diff --git a/Cress-gh/editor.js b/Cress-gh/editor.js index ea84eb3..62b3ab7 100644 --- a/Cress-gh/editor.js +++ b/Cress-gh/editor.js @@ -53,5 +53,5 @@ the last node, the show column modification can be applied.`);const{crossHiddenC columnEnd/columnPropEnd]]) or as an array of CellRange objects.`);const r=(0,d.normalizeSelectionFactory)(n,{createCellCoords:function(){return t.tableProps.createCellCoords(...arguments)},createCellRange:function(){return t.tableProps.createCellRange(...arguments)},propToCol:e=>this.tableProps.propToCol(e),keepDirection:!0}),i=this.settings.navigableHeaders,o={countRows:this.tableProps.countRows(),countCols:this.tableProps.countCols(),countRowHeaders:i?this.tableProps.countRowHeaders():0,countColHeaders:i?this.tableProps.countColHeaders():0},s=!e.some((e=>{const t=r(e),n=t.isValid(o);return!(n&&!t.containsHeaders()||n&&t.containsHeaders()&&t.isSingleHeader())}));return s&&(this.clear(),this.setExpectedLayers(e.length),(0,l.arrayEach)(e,(e=>{const{from:t,to:n}=r(e);this.setRangeStartOnly(t.clone(),!1),this.setRangeEnd(n.clone())})),this.finish()),s}selectColumns(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const r="string"==typeof e?this.tableProps.propToCol(e):e,i="string"==typeof t?this.tableProps.propToCol(t):t,o=this.tableProps.countRows(),s=this.tableProps.countCols(),l=this.tableProps.countColHeaders(),c=0===l?0:-l,u=this.tableProps.createCellCoords(c,r),d=this.tableProps.createCellCoords(o-1,i),h=this.tableProps.createCellRange(u,u,d).isValid({countRows:o,countCols:s,countRowHeaders:0,countColHeaders:l});if(h){let e=0,t=0;Number.isInteger(null==n?void 0:n.row)&&Number.isInteger(null==n?void 0:n.col)?(e=(0,a.clamp)(n.row,c,o-1),t=(0,a.clamp)(n.col,Math.min(r,i),Math.max(r,i))):(e=(0,a.clamp)(n,c,o-1),t=r);const s=this.tableProps.createCellCoords(e,t),u=0===l?0:(0,a.clamp)(s.row,c,-1),d=o-1,h=this.tableProps.createCellCoords(u,r),f=this.tableProps.createCellCoords(d,i);this.runLocalHooks("beforeSelectColumns",h,f,s),h.row=u,f.row=d,this.setRangeStartOnly(h,void 0,s),this.selectedByColumnHeader.add(this.getLayerLevel()),this.setRangeEnd(f),this.runLocalHooks("afterSelectColumns",h,f,s),this.finish()}return h}selectRows(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;const r=this.tableProps.countRows(),i=this.tableProps.countCols(),o=this.tableProps.countRowHeaders(),s=0===o?0:-o,l=this.tableProps.createCellCoords(e,s),c=this.tableProps.createCellCoords(t,i-1),u=this.tableProps.createCellRange(l,l,c).isValid({countRows:r,countCols:i,countRowHeaders:o,countColHeaders:0});if(u){let r=0,l=0;Number.isInteger(null==n?void 0:n.row)&&Number.isInteger(null==n?void 0:n.col)?(r=(0,a.clamp)(n.row,Math.min(e,t),Math.max(e,t)),l=(0,a.clamp)(n.col,s,i-1)):(r=e,l=(0,a.clamp)(n,s,i-1));const c=this.tableProps.createCellCoords(r,l),u=0===o?0:(0,a.clamp)(c.col,s,-1),d=i-1,h=this.tableProps.createCellCoords(e,u),f=this.tableProps.createCellCoords(t,d);this.runLocalHooks("beforeSelectRows",h,f,c),h.col=u,f.col=d,this.setRangeStartOnly(h,void 0,c),this.selectedByRowHeader.add(this.getLayerLevel()),this.setRangeEnd(f),this.runLocalHooks("afterSelectRows",h,f,c),this.finish()}return u}refresh(){if(!this.isSelected())return;const e=this.tableProps.countRows(),t=this.tableProps.countCols();if(0===e||0===t)return void this.deselect();const n=this.selectedRange.peekByIndex(this.selectedRange.size()-1),{from:r,to:i,highlight:o}=n;this.clear(),o.assign({row:(0,a.clamp)(o.row,-1/0,e-1),col:(0,a.clamp)(o.col,-1/0,t-1)}),r.assign({row:(0,a.clamp)(r.row,-1/0,e-1),col:(0,a.clamp)(r.col,-1/0,t-1)}),i.assign({row:(0,a.clamp)(i.row,0,e-1),col:(0,a.clamp)(i.col,0,t-1)}),this.selectedRange.ranges.push(n),this.highlight.getFocus().add(o).commit().syncWith(n),this.applyAndCommit(n)}commit(){if(this.highlight.getCustomSelections().forEach((e=>{e.commit()})),!this.isSelected())return;const e=this.highlight.getFocus(),t=this.getLayerLevel();e.commit().syncWith(this.selectedRange.current());for(let e=0;e{"use strict";t.__esModule=!0,n(16280);var r,i=n(56427),o=(r=n(2306))&&r.__esModule?r:{default:r};function s(e,t,n){a(e,t),t.set(e,n)}function a(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function l(e,t){return e.get(u(e,t))}function c(e,t,n){return e.set(u(e,t),n),n}function u(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var d=new WeakMap,h=new WeakMap,f=new WeakMap,p=new WeakSet;class m{constructor(e,t){!function(e,t){a(e,t),t.add(e)}(this,p),s(this,d,void 0),s(this,h,void 0),s(this,f,{x:0,y:0}),c(d,this,e),c(h,this,t)}transformStart(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const r=l(h,this).createCellCoords(e,t);let o=l(d,this).current().highlight;const s=l(h,this).visualToRenderableCoords(o);let a=0,c=0;if(this.runLocalHooks("beforeTransformStart",r),null!==s.row&&null!==s.col){const{width:e,height:t}=u(p,this,y).call(this),{row:s,col:d}=u(p,this,v).call(this,o),f=l(h,this).fixedRowsBottom(),m=l(h,this).minSpareRows(),b=l(h,this).minSpareCols(),_=l(h,this).autoWrapRow(),x=l(h,this).autoWrapCol(),S=l(h,this).createCellCoords(s+r.row,d+r.col);if(S.row>=t){const r=(0,i.createObjectPropListener)(n&&m>0&&0===f),o=S.col+1,s=l(h,this).createCellCoords(S.row-t,o>=e?o-e:o);this.runLocalHooks("beforeColumnWrap",r,u(p,this,w).call(this,s),o>=e),r.value?this.runLocalHooks("insertRowRequire",l(h,this).countRenderableRows()):x&&S.assign(s)}else if(S.row<0){const n=(0,i.createObjectPropListener)(x),r=S.col-1,o=l(h,this).createCellCoords(t+S.row,r<0?e+r:r);this.runLocalHooks("beforeColumnWrap",n,u(p,this,w).call(this,o),r<0),x&&S.assign(o)}if(S.col>=e){const r=(0,i.createObjectPropListener)(n&&b>0),o=S.row+1,s=l(h,this).createCellCoords(o>=t?o-t:o,S.col-e);this.runLocalHooks("beforeRowWrap",r,u(p,this,w).call(this,s),o>=t),r.value?this.runLocalHooks("insertColRequire",l(h,this).countRenderableColumns()):_&&S.assign(s)}else if(S.col<0){const n=(0,i.createObjectPropListener)(_),r=S.row-1,o=l(h,this).createCellCoords(r<0?t+r:r,e+S.col);this.runLocalHooks("beforeRowWrap",n,u(p,this,w).call(this,o),r<0),_&&S.assign(o)}const{rowDir:C,colDir:M}=u(p,this,g).call(this,S);a=C,c=M,o=u(p,this,w).call(this,S)}return this.runLocalHooks("afterTransformStart",o,a,c),o}transformEnd(e,t){const n=l(h,this).createCellCoords(e,t),r=l(d,this).current(),i=l(h,this).visualToRenderableCoords(r.highlight),o=u(p,this,b).call(this,r.to.row,r.from.row),s=u(p,this,_).call(this,r.to.col,r.from.col),a=r.to.clone();let c=0,f=0;if(this.runLocalHooks("beforeTransformEnd",n),null!==i.row&&null!==i.col&&null!==o&&null!==s){const{row:e,col:t}=u(p,this,v).call(this,r.highlight),i=l(h,this).createCellCoords(o+n.row,s+n.col),d=r.getTopStartCorner(),m=r.getTopEndCorner(),y=r.getBottomEndCorner();if(n.col<0&&s>=t&&i.col0&&s<=t&&i.col>t){const e=u(p,this,_).call(this,m.col,d.col),t=Math.max(i.col-e,1);i.col=e+t}if(n.row<0&&o>=e&&i.row0&&o<=e&&i.row>e){const e=u(p,this,b).call(this,y.row,d.row),t=Math.max(i.row-e,1);i.row=e+t}const{rowDir:x,colDir:S}=u(p,this,g).call(this,i);c=x,f=S;const C=u(p,this,w).call(this,i);0===n.row&&0!==n.col?a.col=C.col:0!==n.row&&0===n.col?a.row=C.row:(a.row=C.row,a.col=C.col)}return this.runLocalHooks("afterTransformEnd",a,c,f),a}setOffsetSize(e){let{x:t,y:n}=e;c(f,this,{x:t,y:n})}}function g(e){const{width:t,height:n}=u(p,this,y).call(this);let r=0,i=0;return e.row<0?(r=-1,e.row=0):e.row>0&&e.row>=n&&(r=1,e.row=n-1),e.col<0?(i=-1,e.col=0):e.col>0&&e.col>=t&&(i=1,e.col=t-1),{rowDir:r,colDir:i}}function y(){return{width:l(f,this).x+l(h,this).countRenderableColumns(),height:l(f,this).y+l(h,this).countRenderableRows()}}function b(e,t){const n=l(h,this).findFirstNonHiddenRenderableRow(e,t);return null===n?null:l(f,this).y+n}function _(e,t){const n=l(h,this).findFirstNonHiddenRenderableColumn(e,t);return null===n?null:l(f,this).x+n}function v(e){const{row:t,col:n}=l(h,this).visualToRenderableCoords(e);if(null===t||null===n)throw new Error("Renderable coords are not visible.");return l(h,this).createCellCoords(l(f,this).y+t,l(f,this).x+n)}function w(e){const t=e.clone();return t.col=e.col-l(f,this).x,t.row=e.row-l(f,this).y,l(h,this).renderableToVisualCoords(t)}(0,i.mixin)(m,o.default),t.default=m},55976:(e,t,n)=>{"use strict";t.__esModule=!0,t.detectSelectionType=p,t.normalizeSelectionFactory=m,t.transformSelectionToColumnDistance=function(e){const t=p(e.getSelected());if(t===s||t===a)return[];const n=m(t,{createCellCoords:e._createCellCoords.bind(e),createCellRange:e._createCellRange.bind(e)}),r=new Set;(0,i.arrayEach)(e.getSelected(),(e=>{const{from:t,to:o}=n(e),s=Math.max(t.col,0),a=o.col-s+1;(0,i.arrayEach)(Array.from(new Array(a),((e,t)=>s+t)),(e=>{r.has(e)||r.add(e)}))}));const o=Array.from(r).sort(((e,t)=>e-t));return(0,i.arrayReduce)(o,((e,t,n,r)=>(0!==n&&t===r[n-1]+1?e[e.length-1][1]+=1:e.push([t,1]),e)),[])},t.transformSelectionToRowDistance=function(e){const t=p(e.getSelected());if(t===s||t===a)return[];const n=m(t,{createCellCoords:e._createCellCoords.bind(e),createCellRange:e._createCellRange.bind(e)}),r=new Set;(0,i.arrayEach)(e.getSelected(),(e=>{const{from:t,to:o}=n(e),s=Math.max(t.row,0),a=o.row-s+1;(0,i.arrayEach)(Array.from(new Array(a),((e,t)=>s+t)),(e=>{r.has(e)||r.add(e)}))}));const o=Array.from(r).sort(((e,t)=>e-t));return(0,i.arrayReduce)(o,((e,t,n,r)=>(0!==n&&t===r[n-1]+1?e[e.length-1][1]+=1:e.push([t,1]),e)),[])},n(16280),n(44114),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(35406),i=n(16363),o=n(74713);const s=t.SELECTION_TYPE_UNRECOGNIZED=0,a=t.SELECTION_TYPE_EMPTY=1,l=t.SELECTION_TYPE_ARRAY=2,c=t.SELECTION_TYPE_OBJECT=3,u=t.SELECTION_TYPES=[c,l],d=[["number"],["number","string"],["number","undefined"],["number","string","undefined"]],h=Symbol("root"),f=Symbol("child");function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:h;if(t!==h&&t!==f)throw new Error("The second argument is used internally only and cannot be overwritten.");const n=Array.isArray(e),i=t===h;let o=s;if(n){const t=e[0];0===e.length?o=a:i&&t instanceof r.CellRange?o=c:i&&Array.isArray(t)?o=p(t,f):e.length>=2&&e.length<=4&&!e.some(((e,t)=>!d[t].includes(typeof e)))&&(o=l)}return o}function m(e){let{createCellCoords:t,createCellRange:n,keepDirection:r=!1,propToCol:i}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!u.includes(e))throw new Error("Unsupported selection ranges schema type was provided.");return function(s){const a=e===c;let l=a?s.from.row:s[0],u=a?s.from.col:s[1],d=a?s.to.row:s[2],h=a?s.to.col:s[3];if("function"==typeof i&&("string"==typeof u&&(u=i(u)),"string"==typeof h&&(h=i(h))),(0,o.isUndefined)(d)&&(d=l),(0,o.isUndefined)(h)&&(h=u),!r){const e=l,t=u,n=d,r=h;l=Math.min(e,n),u=Math.min(t,r),d=Math.max(e,n),h=Math.max(t,r)}const f=t(l,u),p=t(d,h);return n(f,f,p)}}},79920:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"editorCloseAndSave",callback(e){e._getEditorManager().closeEditorAndSaveChanges()}}},18776:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(74166);t.command={name:"editorCloseAndSaveByArrowKeys",callback(e,t,n){const i=e._getEditorManager(),o=i.getActiveEditor();o.isInFullEditMode()&&o.state===r.EDITOR_STATE.EDITING||(i.closeEditorAndSaveChanges(),e.getSelected()&&(n.includes("arrowdown")?e.selection.transformStart(1,0):n.includes("arrowup")?e.selection.transformStart(-1,0):n.includes("arrowleft")?e.selection.transformStart(0,-1*e.getDirectionFactor()):n.includes("arrowright")&&e.selection.transformStart(0,e.getDirectionFactor())),t.preventDefault())}}},85655:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"editorCloseAndSaveByEnter",callback(e,t){const n=e._getEditorManager();n.closeEditorAndSaveChanges(t.ctrlKey||t.metaKey),n.moveSelectionAfterEnter(t)}}},3642:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"editorCloseWithoutSaving",callback(e){const t=e._getEditorManager();t.closeEditorAndRestoreOriginalValue(e.getShortcutManager().isCtrlPressed()),t.activeEditor.focus()}}},54462:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"editorFastOpen",callback(e,t){const{highlight:n}=e.getSelectedRangeLast();n.isHeader()||e._getEditorManager().openEditor(null,t,!0)}}},72038:(e,t,n)=>{"use strict";t.__esModule=!0,t.getAllCommands=function(){return[r.command,i.command,o.command,s.command,a.command,l.command]};var r=n(79920),i=n(18776),o=n(85655),s=n(3642),a=n(54462),l=n(76864)},76864:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(80781);t.command={name:"editorOpen",callback(e,t,n){const i=e._getEditorManager(),o=e.getSelectedRangeLast(),{highlight:s}=o;if(e.selection.isMultiple()&&!o.isHeader()&&e.countRenderedCols()>0&&e.countRenderedRows()>0){const r=e.getSettings(),i="function"==typeof r.enterMoves?r.enterMoves(t):r.enterMoves;n.includes("shift")?e.selection.transformFocus(-i.row,-i.col):e.selection.transformFocus(i.row,i.col)}else s.isHeader()||(e.getSettings().enterBeginsEditing?i.cellProperties.readOnly?i.moveSelectionAfterEnter(t):i.openEditor(null,t,!0):i.moveSelectionAfterEnter(t),(0,r.stopImmediatePropagation)(t))}}},17533:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"emptySelectedCells",callback(e){e.emptySelectedCells(),e._getEditorManager().prepareEditor()}}},91524:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionDown",callback(e){const{highlight:t}=e.getSelectedRangeLast();e.selection.isSelectedByColumnHeader()||e.selection.isSelectedByCorner()||!(t.isCell()||t.isHeader()&&e.selection.isSelectedByRowHeader())||e.selection.transformEnd(1,0)}}},39316:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionDownByViewportHeight",callback(e){const{to:t}=e.getSelectedRangeLast(),n=Math.min(t.row+e.countVisibleRows(),e.countRows()-1),r=e.rowIndexMapper.getNearestNotHiddenIndex(n,-1);if(null!==r){const n=e._createCellCoords(r,t.col),i=t.row-e.view.getFirstFullyVisibleRow(),o=Math.min(n.row-i,e.countRows()-1);e.selection.setRangeEnd(n),e.scrollViewportTo({row:o,verticalSnap:"top",horizontalSnap:"start"})}}}},84458:(e,t,n)=>{"use strict";t.__esModule=!0,t.getAllCommands=function(){return[r.command,i.command,o.command,s.command,a.command,l.command,c.command,u.command,d.command,h.command,f.command,p.command,m.command,g.command]};var r=n(91524),i=n(39316),o=n(31765),s=n(86132),a=n(9502),l=n(35829),c=n(59570),u=n(91503),d=n(96175),h=n(46894),f=n(24379),p=n(37680),m=n(99121),g=n(4117)},31765:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionLeft",callback(e){const{highlight:t}=e.getSelectedRangeLast();e.selection.isSelectedByRowHeader()||e.selection.isSelectedByCorner()||!(t.isCell()||t.isHeader()&&e.selection.isSelectedByColumnHeader())||e.selection.transformEnd(0,-1*e.getDirectionFactor())}}},86132:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionRight",callback(e){const{highlight:t}=e.getSelectedRangeLast();e.selection.isSelectedByRowHeader()||e.selection.isSelectedByCorner()||!(t.isCell()||t.isHeader()&&e.selection.isSelectedByColumnHeader())||e.selection.transformEnd(0,e.getDirectionFactor())}}},9502:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToColumns",callback(e){const{highlight:t,from:n,to:r}=e.getSelectedRangeLast();e.selection.isSelectedByRowHeader()?e.selection.selectAll(!0,!0):e.selectColumns(n.col,r.col,t)}}},35829:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostBottom",callback(e){const{selection:t,rowIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast(),s=r.isHeader()&&e.selection.isSelectedByRowHeader();if(r.isCell()||s){const a=n.getNearestNotHiddenIndex(e.countRows()-1,-1),l=i.clone();l.row=r.row,t.setRangeStart(l,void 0,!1,r.clone()),s&&t.selectedByRowHeader.add(t.getLayerLevel()),t.setRangeEnd(e._createCellCoords(a,o.col))}}}},59570:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostInlineEnd",callback(e){const{selection:t,columnIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast();if(!e.selection.isSelectedByRowHeader()&&!e.selection.isSelectedByCorner()&&r.isCell()){const s=n.getNearestNotHiddenIndex(e.countCols()-1,-1),a=i.clone();a.col=r.col,t.setRangeStart(a,void 0,!1,r.clone()),t.setRangeEnd(e._createCellCoords(o.row,s))}}}},91503:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostInlineStart",callback(e){const{selection:t,columnIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast();if(!e.selection.isSelectedByRowHeader()&&!e.selection.isSelectedByCorner()&&r.isCell()){const s=parseInt(e.getSettings().fixedColumnsStart,10),a=n.getNearestNotHiddenIndex(s,1),l=i.clone();l.col=r.col,t.setRangeStart(l,void 0,!1,r.clone()),t.setRangeEnd(e._createCellCoords(o.row,a))}}}},96175:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostLeft",callback(e){const{selection:t,columnIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast(),s=r.isHeader()&&e.selection.isSelectedByColumnHeader();if(r.isCell()||s){const a=n.getNearestNotHiddenIndex(...e.isRtl()?[e.countCols()-1,-1]:[0,1]),l=i.clone();l.col=r.col,t.setRangeStart(l,void 0,!1,r.clone()),s&&t.selectedByColumnHeader.add(t.getLayerLevel()),t.setRangeEnd(e._createCellCoords(o.row,a))}}}},46894:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostRight",callback(e){const{selection:t,columnIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast(),s=r.isHeader()&&e.selection.isSelectedByColumnHeader();if(r.isCell()||s){const a=n.getNearestNotHiddenIndex(...e.isRtl()?[0,1]:[e.countCols()-1,-1]),l=i.clone();l.col=r.col,t.setRangeStart(l,void 0,!1,r.clone()),s&&t.selectedByColumnHeader.add(t.getLayerLevel()),t.setRangeEnd(e._createCellCoords(o.row,a))}}}},24379:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToMostTop",callback(e){const{selection:t,rowIndexMapper:n}=e,{highlight:r,from:i,to:o}=e.getSelectedRangeLast(),s=r.isHeader()&&e.selection.isSelectedByRowHeader();if(r.isCell()||s){const a=n.getNearestNotHiddenIndex(0,1),l=i.clone();l.row=r.row,t.setRangeStart(l,void 0,!1,r.clone()),s&&t.selectedByRowHeader.add(t.getLayerLevel()),t.setRangeEnd(e._createCellCoords(a,o.col))}}}},37680:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionToRows",callback(e){const{highlight:t,from:n,to:r}=e.getSelectedRangeLast();e.selection.isSelectedByColumnHeader()?e.selection.selectAll(!0,!0):e.selectRows(n.row,r.row,t)}}},99121:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionUp",callback(e){const{highlight:t}=e.getSelectedRangeLast();e.selection.isSelectedByColumnHeader()||e.selection.isSelectedByCorner()||!(t.isCell()||t.isHeader()&&e.selection.isSelectedByRowHeader())||e.selection.transformEnd(-1,0)}}},4117:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"extendCellsSelectionUpByViewportHeight",callback(e){const{to:t}=e.getSelectedRangeLast(),n=Math.max(t.row-e.countVisibleRows(),0),r=e.rowIndexMapper.getNearestNotHiddenIndex(n,1);if(null!==r){const n=e._createCellCoords(r,t.col),i=t.row-e.view.getFirstFullyVisibleRow(),o=Math.max(n.row-i,0);e.selection.setRangeEnd(n),e.scrollViewportTo({row:o,verticalSnap:"top",horizontalSnap:"start"})}}}},16702:(e,t,n)=>{"use strict";t.__esModule=!0,t.createKeyboardShortcutCommandsPool=function(e){const t={};return d.forEach((n=>{let{name:r,callback:i}=n;t[r]=function(){for(var t=arguments.length,n=new Array(t),r=0;r{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionDown",callback(e){let{selection:t}=e;t.transformStart(1,0)}}},10814:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionDownByViewportHeight",callback(e){const{navigableHeaders:t}=e.getSettings(),n=t?e.countColHeaders():0,{row:r}=e.getSelectedRangeLast().highlight;let i=e.countVisibleRows()+n;r===e.countRows()-1?i=1:r+i>e.countRows()&&(i=e.countRows()-r-1),e.selection.transformStart(i,0),e.getSelectedRangeLast().highlight.row<0&&e.scrollViewportTo({row:0})}}},75944:(e,t,n)=>{"use strict";t.__esModule=!0,t.getAllCommands=function(){return[r.command,i.command,o.command,s.command,a.command,l.command,c.command,u.command,d.command,h.command,f.command,p.command,m.command,g.command,y.command,b.command]};var r=n(17406),i=n(10814),o=n(24218),s=n(24007),a=n(311),l=n(82294),c=n(9075),u=n(83897),d=n(31948),h=n(66517),f=n(57989),p=n(20900),m=n(89661),g=n(31142),y=n(91103),b=n(97275)},24218:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionInlineEnd",callback(e,t){const n=e.getSettings(),r=e.getSelectedRangeLast(),i="function"==typeof n.tabMoves?n.tabMoves(t):n.tabMoves;e.selection.isMultiple()&&!r.isHeader()&&e.countRenderedCols()>0&&e.countRenderedRows()>0?e.selection.transformFocus(-i.row,-i.col):e.selection.transformStart(-i.row,-i.col)}}},24007:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionInlineStart",callback(e,t){const n=e.getSettings(),r=e.getSelectedRangeLast(),i="function"==typeof n.tabMoves?n.tabMoves(t):n.tabMoves;e.selection.isMultiple()&&!r.isHeader()&&e.countRenderedCols()>0&&e.countRenderedRows()>0?e.selection.transformFocus(i.row,i.col):e.selection.transformStart(i.row,i.col)}}},311:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionLeft",callback(e){e.selection.transformStart(0,-1*e.getDirectionFactor())}}},82294:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionRight",callback(e){e.selection.transformStart(0,e.getDirectionFactor())}}},9075:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostBottom",callback(e){const{col:t}=e.getSelectedRangeLast().highlight;let n=e.rowIndexMapper.getNearestNotHiddenIndex(e.countRows()-1,-1);null===n&&(n=-1),e.selection.setRangeStart(e._createCellCoords(n,t))}}},83897:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostBottomInlineEnd",callback(e){const{selection:t,rowIndexMapper:n,columnIndexMapper:r}=e,i=parseInt(e.getSettings().fixedRowsBottom,10),o=n.getNearestNotHiddenIndex(e.countRows()-i-1,-1),s=r.getNearestNotHiddenIndex(e.countCols()-1,-1);t.setRangeStart(e._createCellCoords(o,s))}}},31948:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostInlineEnd",callback(e){const{selection:t,columnIndexMapper:n}=e;t.setRangeStart(e._createCellCoords(e.getSelectedRangeLast().highlight.row,n.getNearestNotHiddenIndex(e.countCols()-1,-1)))}}},66517:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostInlineStart",callback(e){const{selection:t,columnIndexMapper:n}=e,r=parseInt(e.getSettings().fixedColumnsStart,10),i=e.getSelectedRangeLast().highlight.row,o=n.getNearestNotHiddenIndex(r,1);t.setRangeStart(e._createCellCoords(i,o))}}},57989:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostLeft",callback(e){const{selection:t,columnIndexMapper:n}=e,r=e.getSelectedRangeLast().highlight.row;let i=n.getNearestNotHiddenIndex(...e.isRtl()?[e.countCols()-1,-1]:[0,1]);null===i&&(i=e.isRtl()?-1:-e.countRowHeaders()),t.setRangeStart(e._createCellCoords(r,i))}}},20900:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostRight",callback(e){const{selection:t,columnIndexMapper:n}=e,{row:r}=e.getSelectedRangeLast().highlight;let i=n.getNearestNotHiddenIndex(...e.isRtl()?[0,1]:[e.countCols()-1,-1]);null===i&&(i=e.isRtl()?-e.countRowHeaders():-1),t.setRangeStart(e._createCellCoords(r,i))}}},89661:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostTop",callback(e){const{col:t}=e.getSelectedRangeLast().highlight;let n=e.rowIndexMapper.getNearestNotHiddenIndex(0,1);null===n&&(n=-e.countColHeaders()),e.selection.setRangeStart(e._createCellCoords(n,t))}}},31142:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionToMostTopInlineStart",callback(e){const{selection:t,rowIndexMapper:n,columnIndexMapper:r}=e,i=parseInt(e.getSettings().fixedRowsTop,10),o=parseInt(e.getSettings().fixedColumnsStart,10),s=n.getNearestNotHiddenIndex(i,1),a=r.getNearestNotHiddenIndex(o,1);t.setRangeStart(e._createCellCoords(s,a))}}},91103:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionUp",callback(e){let{selection:t}=e;t.transformStart(-1,0)}}},97275:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"moveCellSelectionUpByViewportHight",callback(e){const{navigableHeaders:t}=e.getSettings(),n=t?e.countColHeaders():0,{row:r}=e.getSelectedRangeLast().highlight;let i=-(e.countVisibleRows()+n);r===-n?i=-1:r+i{"use strict";t.__esModule=!0,t.command={name:"populateSelectedCellsData",callback(e){const t=e.getSelectedRange(),{row:n,col:r}=t[t.length-1].highlight.normalize(),i=e.getDataAtCell(n,r),o=new Map;for(let s=0;s{if(t>=0&&s>=0&&(t!==n||s!==r)){const{readOnly:n}=e.getCellMeta(t,s);n||o.set(`${t}x${s}`,[t,s,i])}}));e.setDataAtCell(Array.from(o.values()))}}},37943:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"scrollToFocusedCell",callback(e){const{highlight:t}=e.getSelectedRangeLast(),n=e.view.getFirstFullyVisibleRow()-1,r=e.view.getFirstFullyVisibleColumn()-1,i=e.view.getLastFullyVisibleRow()+1,o=e.view.getLastFullyVisibleColumn()+1,s=e._createCellCoords(n,r),a=e._createCellCoords(i,o);if(!e._createCellRange(s,s,a).includes(t)&&(t.row>=0||t.col>=0)){const n={};if(t.col>=0){const r=Math.floor(e.countVisibleCols()/2);n.col=Math.max(t.col-r,0)}if(t.row>=0){const r=Math.floor(e.countVisibleRows()/2);n.row=Math.max(t.row-r,0)}e.scrollViewportTo({...n,verticalSnap:"top",horizontalSnap:"start"})}}}},67968:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"selectAllCells",callback(e){e.selection.selectAll(!0,!0,{disableHeadersHighlight:!0})}}},24929:(e,t)=>{"use strict";t.__esModule=!0,t.command={name:"selectAllCellsAndHeaders",callback(e){e.selection.selectAll(!0,!0,{disableHeadersHighlight:!1})}}},54946:(e,t)=>{"use strict";t.__esModule=!0,t.GRID_GROUP="gridDefault",t.EDITOR_EDIT_GROUP="editorManager.handlingEditor"},65902:(e,t,n)=>{"use strict";t.__esModule=!0,t.shortcutsEditorContext=function(e){const t=e.getShortcutManager().addContext("editor"),n=(0,i.createKeyboardShortcutCommandsPool)(e),o={group:r.EDITOR_EDIT_GROUP};t.addShortcuts([{keys:[["Enter"],["Enter","Shift"]],callback:(e,t)=>n.editorCloseAndSaveByEnter(e,t)},{keys:[["Enter","Control/Meta"],["Enter","Control/Meta","Shift"]],captureCtrl:!0,callback:(e,t)=>n.editorCloseAndSaveByEnter(e,t)},{keys:[["Tab"],["Tab","Shift"],["PageDown"],["PageUp"]],forwardToContext:e.getShortcutManager().getContext("grid"),callback:(e,t)=>n.editorCloseAndSave(e,t)},{keys:[["ArrowDown"],["ArrowUp"],["ArrowLeft"],["ArrowRight"]],preventDefault:!1,callback:(e,t)=>n.editorCloseAndSaveByArrowKeys(e,t)},{keys:[["Escape"],["Escape","Control/Meta"]],callback:()=>n.editorCloseWithoutSaving()}],o)};var r=n(54946),i=n(16702)},70811:(e,t,n)=>{"use strict";t.__esModule=!0,t.shortcutsGridContext=function(e){const t=e.getShortcutManager().addContext("grid"),n=(0,o.createKeyboardShortcutCommandsPool)(e),s={runOnlyIf:()=>{const{navigableHeaders:t}=e.getSettings();return(0,r.isDefined)(e.getSelected())&&(t||!t&&e.countRenderedRows()>0&&e.countRenderedCols()>0)},group:i.GRID_GROUP};t.addShortcuts([{keys:[["F2"]],callback:e=>n.editorFastOpen(e)},{keys:[["Enter"],["Enter","Shift"]],callback:(e,t)=>n.editorOpen(e,t)},{keys:[["Backspace"],["Delete"]],callback:()=>n.emptySelectedCells()}],{group:i.EDITOR_EDIT_GROUP,runOnlyIf:()=>(0,r.isDefined)(e.getSelected())}),t.addShortcuts([{keys:[["Control/Meta","A"]],callback:()=>n.selectAllCells(),runOnlyIf:()=>!e.getSelectedRangeLast().highlight.isHeader()},{keys:[["Control/Meta","A"]],callback:()=>{},runOnlyIf:()=>e.getSelectedRangeLast().highlight.isHeader(),preventDefault:!0},{keys:[["Control/Meta","Shift","Space"]],callback:()=>n.selectAllCellsAndHeaders()},{keys:[["Control/Meta","Enter"]],callback:()=>n.populateSelectedCellsData(),runOnlyIf:()=>!e.getSelectedRangeLast().highlight.isHeader()&&e.getSelectedRangeLast().getCellsCount()>1},{keys:[["Control","Space"]],captureCtrl:!0,callback:()=>n.extendCellsSelectionToColumns()},{keys:[["Shift","Space"]],stopPropagation:!0,callback:()=>n.extendCellsSelectionToRows()},{keys:[["ArrowUp"]],callback:()=>n.moveCellSelectionUp()},{keys:[["ArrowUp","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostTop()},{keys:[["ArrowUp","Shift"]],callback:()=>n.extendCellsSelectionUp()},{keys:[["ArrowUp","Shift","Control/Meta"]],captureCtrl:!0,callback:()=>n.extendCellsSelectionToMostTop(),runOnlyIf:()=>!(e.selection.isSelectedByCorner()||e.selection.isSelectedByColumnHeader())},{keys:[["ArrowDown"]],callback:()=>n.moveCellSelectionDown()},{keys:[["ArrowDown","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostBottom()},{keys:[["ArrowDown","Shift"]],callback:()=>n.extendCellsSelectionDown()},{keys:[["ArrowDown","Shift","Control/Meta"]],captureCtrl:!0,callback:()=>n.extendCellsSelectionToMostBottom(),runOnlyIf:()=>!(e.selection.isSelectedByCorner()||e.selection.isSelectedByColumnHeader())},{keys:[["ArrowLeft"]],callback:()=>n.moveCellSelectionLeft()},{keys:[["ArrowLeft","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostLeft()},{keys:[["ArrowLeft","Shift"]],callback:()=>n.extendCellsSelectionLeft()},{keys:[["ArrowLeft","Shift","Control/Meta"]],captureCtrl:!0,callback:()=>n.extendCellsSelectionToMostLeft(),runOnlyIf:()=>!(e.selection.isSelectedByCorner()||e.selection.isSelectedByRowHeader())},{keys:[["ArrowRight"]],callback:()=>n.moveCellSelectionRight()},{keys:[["ArrowRight","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostRight()},{keys:[["ArrowRight","Shift"]],callback:()=>n.extendCellsSelectionRight()},{keys:[["ArrowRight","Shift","Control/Meta"]],captureCtrl:!0,callback:()=>n.extendCellsSelectionToMostRight(),runOnlyIf:()=>!(e.selection.isSelectedByCorner()||e.selection.isSelectedByRowHeader())},{keys:[["Home"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostInlineStart(),runOnlyIf:()=>e.view.isMainTableNotFullyCoveredByOverlays()},{keys:[["Home","Shift"]],callback:()=>n.extendCellsSelectionToMostInlineStart()},{keys:[["Home","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostTopInlineStart(),runOnlyIf:()=>e.view.isMainTableNotFullyCoveredByOverlays()},{keys:[["End"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostInlineEnd(),runOnlyIf:()=>e.view.isMainTableNotFullyCoveredByOverlays()},{keys:[["End","Shift"]],callback:()=>n.extendCellsSelectionToMostInlineEnd()},{keys:[["End","Control/Meta"]],captureCtrl:!0,callback:()=>n.moveCellSelectionToMostBottomInlineEnd(),runOnlyIf:()=>e.view.isMainTableNotFullyCoveredByOverlays()},{keys:[["PageUp"]],callback:()=>n.moveCellSelectionUpByViewportHight()},{keys:[["PageUp","Shift"]],callback:()=>n.extendCellsSelectionUpByViewportHeight()},{keys:[["PageDown"]],callback:()=>n.moveCellSelectionDownByViewportHeight()},{keys:[["PageDown","Shift"]],callback:()=>n.extendCellsSelectionDownByViewportHeight()},{keys:[["Tab"]],preventDefault:!1,callback:e=>n.moveCellSelectionInlineStart(e)},{keys:[["Shift","Tab"]],preventDefault:!1,callback:e=>n.moveCellSelectionInlineEnd(e)},{keys:[["Control/Meta","Backspace"]],callback:()=>n.scrollToFocusedCell()}],s)};var r=n(74713),i=n(54946),o=n(16702)},40671:(e,t,n)=>{"use strict";t.__esModule=!0;var r={registerAllShortcutContexts:!0};t.registerAllShortcutContexts=function(e){[o.shortcutsGridContext,i.shortcutsEditorContext].forEach((t=>t(e)))};var i=n(65902),o=n(70811),s=n(54946);Object.keys(s).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===s[e]||(t[e]=s[e]))}))},28835:(e,t,n)=>{"use strict";t.__esModule=!0,t.isContextObject=u,n(16280),n(44114);var r=n(50346),i=n(889),o=n(74713),s=n(63996),a=n(56427),l=n(75755);const c=Symbol("shortcut-context");function u(e){return(0,a.isObject)(e)&&e.__kindOf===c}t.createContext=e=>{const t=(0,r.createUniqueMap)({errorIdExists:t=>`The "${t}" shortcut is already registered in the "${e}" context.`}),n=function(){let{keys:e,callback:n,group:r,runOnlyIf:a=(()=>!0),captureCtrl:c=!1,preventDefault:d=!0,stopPropagation:h=!1,relativeToGroup:f,position:p,forwardToContext:m}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if((0,o.isUndefined)(r))throw new Error("You need to define the shortcut's group.");if(!1===(0,s.isFunction)(n))throw new Error("The shortcut's callback needs to be a function.");if(!1===Array.isArray(e))throw new Error(l.toSingleLine`Pass the shortcut\'s keys as an array of arrays,\x20 using the KeyboardEvent.key properties:\x20 https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values.`);const g={callback:n,group:r,runOnlyIf:a,captureCtrl:c,preventDefault:d,stopPropagation:h};(0,o.isDefined)(f)&&(g.relativeToGroup=f,g.position=p),u(m)&&(g.forwardToContext=m),e.forEach((e=>{const n=(0,i.normalizeKeys)(e);if(t.hasItem(n)){const e=t.getItem(n);let r=e.findIndex((e=>e.group===f));-1!==r?"before"===p?r-=1:r+=1:r=e.length,e.splice(r,0,g)}else t.addItem(n,[g])}))},d=e=>{const n=(0,i.normalizeKeys)(e);t.removeItem(n)};return{__kindOf:c,addShortcut:n,addShortcuts:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((e=>{(0,a.objectEach)(t,((n,r)=>{!1===Object.prototype.hasOwnProperty.call(e,r)&&(e[r]=t[r])})),n(e)}))},getShortcuts:e=>{const n=(0,i.normalizeKeys)(e),r=t.getItem(n);return(0,o.isDefined)(r)?r.slice():[]},hasShortcut:e=>{const n=(0,i.normalizeKeys)(e);return t.hasItem(n)},removeShortcutsByKeys:d,removeShortcutsByGroup:e=>{t.getItems().forEach((t=>{let[n,r]=t;const o=r.filter((t=>t.group!==e));0===o.length?d((0,i.getKeysList)(n)):(r.length=0,r.push(...o))}))}}}},2432:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(2507);t.createShortcutManager=r.createShortcutManager},95777:(e,t,n)=>{"use strict";t.__esModule=!0,t.createKeysObserver=function(){const e=new Set;return{press(t){e.add(t)},release(t){e.delete(t)},releaseAll(){e.clear()},isPressed:t=>e.has(t)}},n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197)},2507:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r=n(50346),i=n(80781),o=n(28835),s=n(78176),a=n(75755);t.createShortcutManager=e=>{let{ownerWindow:t,handleEvent:n,beforeKeyDown:l,afterKeyDown:c}=e;const u=(0,r.createUniqueMap)({errorIdExists:e=>`The "${e}" context name is already registered.`});let d="grid";const h=()=>d,f=e=>u.getItem(e);let p=!1;const m=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:h();const r=(0,o.isContextObject)(n)?n:f(n);let s=!1;if(!r.hasShortcut(t))return s;const a=r.getShortcuts(t);for(let n=0;n{const t=(0,o.createContext)(e);return u.addItem(e,t),t},getActiveContextName:h,getContext:f,setActiveContextName:e=>{if(!u.hasItem(e))throw new Error(a.toSingleLine`You've tried to activate the "${e}" shortcut context\x20 - that does not exist. Before activation, register the context using the "addContext" method.`);d=e},isCtrlPressed:()=>!p&&(g.isPressed("control")||g.isPressed("meta")),releasePressedKeys:()=>g.releasePressedKeys(),destroy:()=>g.unmount()}}},78176:(e,t,n)=>{"use strict";t.__esModule=!0,t.useRecorder=function(e,t,n,r,h){const f=e=>l.includes(e),p=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=[];return e.altKey&&n.push("alt"),t&&(e.ctrlKey||e.metaKey)?n.push("control/meta"):(e.ctrlKey&&n.push("control"),e.metaKey&&n.push("meta")),e.shiftKey&&n.push("shift"),n},m=e=>{if(!1===t(e))return;const s=n(e);if(229===e.keyCode||!1===s||(0,o.isImmediatePropagationStopped)(e))return;const l=(0,i.normalizeEventKey)(e);let c=[];f(l)||(c=p(e));const u=[l].concat(c);!h(e,u)&&((0,a.isMacOS)()&&c.includes("meta")||!(0,a.isMacOS)()&&c.includes("control"))&&h(e,[l].concat(p(e,!0))),r(e)},g=e=>{if(e.key){const t=(0,i.normalizeEventKey)(e);f(t)&&c.press(t)}},y=e=>{if(e.key){const t=(0,i.normalizeEventKey)(e);f(t)&&c.release(t)}},b=()=>{c.releaseAll()};return{mount:()=>{let t=e;for(d+=1;t;)1===d&&(t.document.documentElement.addEventListener("keydown",g),u.push({event:"keydown",listener:g}),t.document.documentElement.addEventListener("keyup",y),u.push({event:"keyup",listener:y})),t.document.documentElement.addEventListener("keydown",m),t.document.documentElement.addEventListener("blur",b),t=(0,s.getParentWindow)(t)},unmount:()=>{let t=e;for(d-=1;t;){if(0===d){for(let e=0;ec.isPressed(e),releasePressedKeys:()=>c.releaseAll()}},n(44114);var r=n(95777),i=n(889),o=n(80781),s=n(32993),a=n(19974);const l=["meta","alt","shift","control"],c=(0,r.createKeysObserver)(),u=[];let d=0},889:(e,t,n)=>{"use strict";t.__esModule=!0,n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);const r=new Map([[" ","space"],["spacebar","space"],["scroll","scrolllock"],["del","delete"],["esc","escape"],["medianexttrack","mediatracknext"],["mediaprevioustrack","mediatrackprevious"],["volumeup","audiovolumeup"],["volumedown","audiovolumedown"],["volumemute","audiovolumemute"],["multiply","*"],["add","+"],["divide","/"],["subtract","-"],["left","arrowleft"],["right","arrowright"],["up","arrowup"],["down","arrowdown"]]);t.normalizeKeys=e=>e.map((e=>{const t=e.toLowerCase();return r.has(t)?r.get(t):t})).sort().join("+"),t.getKeysList=e=>e.split("+");const i=new RegExp("^(?:Key|Digit)([A-Z0-9])$"),o=new Set(["Backquote","Minus","Equal","BracketLeft","BracketRight","Backslash","Semicolon","Quote","Comma","Period","Slash"]);t.normalizeEventKey=e=>{let{key:t,code:n}=e,r=t;return i.test(n)?r=n.replace(i,"$1"):o.has(n)&&(r=n),r.toLowerCase()}},27925:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(32993),i=u(n(27577)),o=n(80781),s=u(n(35406)),a=n(96138),l=n(62987),c=n(22592);function u(e){return e&&e.__esModule?e:{default:e}}function d(e,t,n){h(e,t),t.set(e,n)}function h(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function f(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return e.get(g(e,t))}function m(e,t,n){return e.set(g(e,t),n),n}function g(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var y=new WeakMap,b=new WeakMap,_=new WeakMap,v=new WeakMap,w=new WeakMap,x=new WeakMap,S=new WeakMap,C=new WeakSet;function M(){return parseInt(this.hot.rootElement.getAttribute((0,c.A11Y_COLCOUNT)()[0]),10)}function T(e){const t=g(C,this,M).call(this)+e;(0,r.setAttribute)(this.hot.rootElement,...(0,c.A11Y_COLCOUNT)(t))}t.default=class{constructor(e){var t;h(this,t=C),t.add(this),f(this,"hot",void 0),f(this,"eventManager",void 0),f(this,"settings",void 0),f(this,"THEAD",void 0),f(this,"TBODY",void 0),f(this,"_wt",void 0),f(this,"activeWt",void 0),d(this,y,0),d(this,b,0),f(this,"postponedAdjustElementsSize",!1),d(this,_,!1),d(this,v,void 0),d(this,w,void 0),d(this,x,0),d(this,S,0),this.hot=e,this.eventManager=new i.default(this.hot),this.settings=this.hot.getSettings(),this.createElements(),this.registerEvents(),this.initializeWalkontable()}render(){this.hot.isRenderSuspended()||(this.hot.runHooks("beforeRender",this.hot.forceFullRender),this.postponedAdjustElementsSize&&(this.postponedAdjustElementsSize=!1,this.adjustElementsSize(!0)),this._wt.draw(!this.hot.forceFullRender),this.hot.runHooks("afterRender",this.hot.forceFullRender),this.hot.forceFullRender=!1,this.hot.renderCall=!1)}adjustElementsSize(){this.hot.isRenderSuspended()?this.postponedAdjustElementsSize=!0:this._wt.wtOverlays.adjustElementsSize()}getCellAtCoords(e,t){const n=this._wt.getCell(e,t);return n<0?null:n}scrollViewport(e,t,n,r,i){return this._wt.scrollViewport(e,t,n,r,i)}scrollViewportHorizontally(e,t,n){return this._wt.scrollViewportHorizontally(e,t,n)}scrollViewportVertically(e,t,n){return this._wt.scrollViewportVertically(e,t,n)}createElements(){const{rootElement:e,rootDocument:t}=this.hot,n=e.getAttribute("style");n&&e.setAttribute("data-originalstyle",n),(0,r.addClass)(e,"handsontable"),m(w,this,t.createElement("TABLE")),(0,r.addClass)(p(w,this),"htCore"),this.hot.getSettings().tableClassName&&(0,r.addClass)(p(w,this),this.hot.getSettings().tableClassName),this.settings.ariaTags&&((0,r.setAttribute)(p(w,this),[(0,c.A11Y_PRESENTATION)()]),(0,r.setAttribute)(e,[(0,c.A11Y_TREEGRID)(),(0,c.A11Y_ROWCOUNT)(-1),(0,c.A11Y_COLCOUNT)(this.hot.countCols()),(0,c.A11Y_MULTISELECTABLE)()])),this.THEAD=t.createElement("THEAD"),p(w,this).appendChild(this.THEAD),this.TBODY=t.createElement("TBODY"),p(w,this).appendChild(this.TBODY),this.hot.table=p(w,this),this.hot.container.insertBefore(p(w,this),this.hot.container.firstChild)}registerEvents(){const{rootElement:e,rootDocument:t,selection:n,rootWindow:i}=this.hot,s=t.documentElement;this.eventManager.addEventListener(e,"mousedown",(e=>{m(_,this,!0),this.isTextSelectionAllowed(e.target)||((0,r.clearTextSelection)(i),e.preventDefault(),i.focus())})),this.eventManager.addEventListener(e,"mouseup",(()=>{m(_,this,!1)})),this.eventManager.addEventListener(e,"mousemove",(e=>{p(_,this)&&!this.isTextSelectionAllowed(e.target)&&(this.settings.fragmentSelection&&(0,r.clearTextSelection)(i),e.preventDefault())})),this.eventManager.addEventListener(s,"keyup",(e=>{n.isInProgress()&&!e.shiftKey&&n.finish()})),this.eventManager.addEventListener(s,"mouseup",(i=>{n.isInProgress()&&(0,o.isLeftClick)(i)&&n.finish(),m(v,this,!1);const s=(0,r.isOutsideInput)(t.activeElement);(0,r.isInput)(t.activeElement)&&!s||!s&&(n.isSelected()||n.isSelectedByAnyHeader()||e.contains(i.target)||(0,o.isRightClick)(i))||this.hot.unlisten()})),this.eventManager.addEventListener(s,"contextmenu",(e=>{n.isInProgress()&&(0,o.isRightClick)(e)&&(n.finish(),m(v,this,!1))})),this.eventManager.addEventListener(s,"touchend",(()=>{n.isInProgress()&&n.finish(),m(v,this,!1)})),this.eventManager.addEventListener(s,"mousedown",(n=>{const i=n.target,o=n.x||n.clientX,a=n.y||n.clientY;let l=n.target;if(p(v,this)||!e||!this.hot.view)return;const{holder:c}=this.hot.view._wt.wtTable;if(l===c){const e=(0,r.getScrollbarWidth)(t);if(t.elementFromPoint(o+e,a)!==c||t.elementFromPoint(o,a+e)!==c)return}else for(;l!==s;){if(null===l){if(n.isTargetWebComponent)break;return}if(l===e)return;l=l.parentNode}("function"==typeof this.settings.outsideClickDeselects?this.settings.outsideClickDeselects(i):this.settings.outsideClickDeselects)?this.hot.deselectCell():this.hot.destroyEditor(!1,!1)}));let a=(0,r.getParentWindow)(i);for(;null!==a;)this.eventManager.addEventListener(a.document.documentElement,"click",(()=>{this.hot.unlisten()})),a=(0,r.getParentWindow)(a);this.eventManager.addEventListener(p(w,this),"selectstart",(e=>{this.settings.fragmentSelection||(0,r.isInput)(e.target)||e.preventDefault()}))}translateFromRenderableToVisualCoords(e){let{row:t,col:n}=e;return this.hot._createCellCoords(...this.translateFromRenderableToVisualIndex(t,n))}translateFromRenderableToVisualIndex(e,t){let n=e>=0?this.hot.rowIndexMapper.getVisualFromRenderableIndex(e):e,r=t>=0?this.hot.columnIndexMapper.getVisualFromRenderableIndex(t):t;return null===n&&(n=e),null===r&&(r=t),[n,r]}countRenderableIndexes(e,t){const n=Math.min(e.getNotTrimmedIndexesLength(),t),r=e.getNearestNotHiddenIndex(n-1,-1);return null===r?0:e.getRenderableFromVisualIndex(r)+1}countRenderableColumns(){return this.countRenderableIndexes(this.hot.columnIndexMapper,this.settings.maxCols)}countRenderableRows(){return this.countRenderableIndexes(this.hot.rowIndexMapper,this.settings.maxRows)}countNotHiddenRowIndexes(e,t){return this.countNotHiddenIndexes(e,t,this.hot.rowIndexMapper,this.countRenderableRows())}countNotHiddenColumnIndexes(e,t){return this.countNotHiddenIndexes(e,t,this.hot.columnIndexMapper,this.countRenderableColumns())}countNotHiddenIndexes(e,t,n,r){if(isNaN(e)||e<0)return 0;const i=n.getNearestNotHiddenIndex(e,t),o=n.getRenderableFromVisualIndex(i);if(!Number.isInteger(o))return 0;let s=0;return t<0?s=o+1:t>0&&(s=r-o),s}countNotHiddenFixedColumnsStart(){const e=this.hot.countCols(),t=Math.min(parseInt(this.settings.fixedColumnsStart,10),e)-1;return this.countNotHiddenColumnIndexes(t,-1)}countNotHiddenFixedRowsTop(){const e=this.hot.countRows(),t=Math.min(parseInt(this.settings.fixedRowsTop,10),e)-1;return this.countNotHiddenRowIndexes(t,-1)}countNotHiddenFixedRowsBottom(){const e=this.hot.countRows(),t=Math.max(e-parseInt(this.settings.fixedRowsBottom,10),0);return this.countNotHiddenRowIndexes(t,1)}countRenderableColumnsInRange(e,t){let n=0;for(let r=e;r<=t;r++)null!==this.hot.columnIndexMapper.getRenderableFromVisualIndex(r)&&(n+=1);return n}countRenderableRowsInRange(e,t){let n=0;for(let r=e;r<=t;r++)null!==this.hot.rowIndexMapper.getRenderableFromVisualIndex(r)&&(n+=1);return n}isMainTableNotFullyCoveredByOverlays(){const e=this.countNotHiddenFixedRowsTop()+this.countNotHiddenFixedRowsBottom(),t=this.countNotHiddenFixedColumnsStart();return this.hot.countRenderedRows()>e&&this.hot.countRenderedCols()>t}initializeWalkontable(){const e={ariaTags:this.settings.ariaTags,rtlMode:this.hot.isRtl(),externalRowCalculator:this.hot.getPlugin("autoRowSize")&&this.hot.getPlugin("autoRowSize").isEnabled(),table:p(w,this),isDataViewInstance:()=>(0,l.isRootInstance)(this.hot),preventOverflow:()=>this.settings.preventOverflow,preventWheel:()=>this.settings.preventWheel,stretchH:()=>this.settings.stretchH,data:(e,t)=>this.hot.getDataAtCell(...this.translateFromRenderableToVisualIndex(e,t)),totalRows:()=>this.countRenderableRows(),totalColumns:()=>this.countRenderableColumns(),fixedColumnsStart:()=>this.countNotHiddenFixedColumnsStart(),fixedRowsTop:()=>this.countNotHiddenFixedRowsTop(),fixedRowsBottom:()=>this.countNotHiddenFixedRowsBottom(),shouldRenderInlineStartOverlay:()=>this.settings.fixedColumnsStart>0||e.rowHeaders().length>0,shouldRenderTopOverlay:()=>this.settings.fixedRowsTop>0||e.columnHeaders().length>0,shouldRenderBottomOverlay:()=>this.settings.fixedRowsBottom>0,minSpareRows:()=>this.settings.minSpareRows,renderAllRows:this.settings.renderAllRows,renderAllColumns:this.settings.renderAllColumns,rowHeaders:()=>{const e=[];return this.hot.hasRowHeaders()&&e.push(((e,t)=>{const n=e>=0?this.hot.rowIndexMapper.getVisualFromRenderableIndex(e):e;this.appendRowHeader(n,t)})),this.hot.runHooks("afterGetRowHeaderRenderers",e),m(b,this,e.length),this.hot.getSettings().ariaTags&&g(C,this,M).call(this)===this.hot.countCols()&&g(C,this,T).call(this,p(b,this)),e},columnHeaders:()=>{const e=[];return this.hot.hasColHeaders()&&e.push(((e,t)=>{const n=e>=0?this.hot.columnIndexMapper.getVisualFromRenderableIndex(e):e;this.appendColHeader(n,t)})),this.hot.runHooks("afterGetColumnHeaderRenderers",e),m(y,this,e.length),e},columnWidth:e=>{const t=this.hot.columnIndexMapper.getVisualFromRenderableIndex(e);return this.hot.getColWidth(null===t?e:t)},rowHeight:e=>{const t=this.hot.rowIndexMapper.getVisualFromRenderableIndex(e);return this.hot.getRowHeight(null===t?e:t)},cellRenderer:(e,t,n)=>{const[r,i]=this.translateFromRenderableToVisualIndex(e,t),o=this.hot.runHooks("modifyGetCellCoords",r,i);let s=r,a=i;Array.isArray(o)&&([s,a]=o);const l=this.hot.getCellMeta(s,a),c=this.hot.colToProp(a);let u=this.hot.getDataAtRowProp(s,c);this.hot.hasHook("beforeValueRender")&&(u=this.hot.runHooks("beforeValueRender",u,l)),this.hot.runHooks("beforeRenderer",n,r,i,c,u,l),this.hot.getCellRenderer(l)(this.hot,n,r,i,c,u,l),this.hot.runHooks("afterRenderer",n,r,i,c,u,l)},selections:this.hot.selection.highlight,hideBorderOnMouseDownOver:()=>this.settings.fragmentSelection,onWindowResize:()=>{this.hot&&!this.hot.isDestroyed&&this.hot.refreshDimensions()},onContainerElementResize:()=>{this.hot&&!this.hot.isDestroyed&&(0,r.isVisible)(this.hot.rootElement)&&this.hot.refreshDimensions()},onCellMouseDown:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t),s={row:!1,column:!1,cell:!1};this.hot.listen(),this.activeWt=r,m(v,this,!0),this.hot.runHooks("beforeOnCellMouseDown",e,i,n,s),(0,o.isImmediatePropagationStopped)(e)||((0,a.handleMouseEvent)(e,{coords:i,selection:this.hot.selection,controller:s,cellCoordsFactory:(e,t)=>this.hot._createCellCoords(e,t)}),this.hot.runHooks("afterOnCellMouseDown",e,i,n),this.activeWt=this._wt)},onCellContextMenu:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,m(v,this,!1),this.hot.selection.isInProgress()&&this.hot.selection.finish(),this.hot.runHooks("beforeOnCellContextMenu",e,i,n),(0,o.isImmediatePropagationStopped)(e)||(this.hot.runHooks("afterOnCellContextMenu",e,i,n),this.activeWt=this._wt)},onCellMouseOut:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,this.hot.runHooks("beforeOnCellMouseOut",e,i,n),(0,o.isImmediatePropagationStopped)(e)||(this.hot.runHooks("afterOnCellMouseOut",e,i,n),this.activeWt=this._wt)},onCellMouseOver:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t),s={row:!1,column:!1,cell:!1};this.activeWt=r,this.hot.runHooks("beforeOnCellMouseOver",e,i,n,s),(0,o.isImmediatePropagationStopped)(e)||(p(v,this)&&(0,a.handleMouseEvent)(e,{coords:i,selection:this.hot.selection,controller:s,cellCoordsFactory:(e,t)=>this.hot._createCellCoords(e,t)}),this.hot.runHooks("afterOnCellMouseOver",e,i,n),this.activeWt=this._wt)},onCellMouseUp:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,this.hot.runHooks("beforeOnCellMouseUp",e,i,n),(0,o.isImmediatePropagationStopped)(e)||this.hot.isDestroyed||(this.hot.runHooks("afterOnCellMouseUp",e,i,n),this.activeWt=this._wt)},onCellCornerMouseDown:e=>{e.preventDefault(),this.hot.runHooks("afterOnCellCornerMouseDown",e)},onCellCornerDblClick:e=>{e.preventDefault(),this.hot.runHooks("afterOnCellCornerDblClick",e)},beforeDraw:(e,t)=>this.beforeRender(e,t),onDraw:e=>this.afterRender(e),onBeforeViewportScrollVertically:e=>{const t=this.hot.rowIndexMapper,n=e<0;let r=e;return n||(r=t.getVisualFromRenderableIndex(e),null!==r)?(r=this.hot.runHooks("beforeViewportScrollVertically",r),this.hot.runHooks("beforeViewportScroll"),n?r:t.getRenderableFromVisualIndex(r)):e},onBeforeViewportScrollHorizontally:e=>{const t=this.hot.columnIndexMapper,n=e<0;let r=e;return n||(r=t.getVisualFromRenderableIndex(e),null!==r)?(r=this.hot.runHooks("beforeViewportScrollHorizontally",r),this.hot.runHooks("beforeViewportScroll"),n?r:t.getRenderableFromVisualIndex(r)):e},onScrollVertically:()=>{this.hot.runHooks("afterScrollVertically"),this.hot.runHooks("afterScroll")},onScrollHorizontally:()=>{this.hot.runHooks("afterScrollHorizontally"),this.hot.runHooks("afterScroll")},onBeforeRemoveCellClassNames:()=>this.hot.runHooks("beforeRemoveCellClassNames"),onBeforeHighlightingRowHeader:(e,t,n)=>{const r=this.hot.rowIndexMapper,i=e<0;let o=e;i||(o=r.getVisualFromRenderableIndex(e));const s=this.hot.runHooks("beforeHighlightingRowHeader",o,t,n);return i?s:r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(s,1))},onBeforeHighlightingColumnHeader:(e,t,n)=>{const r=this.hot.columnIndexMapper,i=e<0;let o=e;i||(o=r.getVisualFromRenderableIndex(e));const s=this.hot.runHooks("beforeHighlightingColumnHeader",o,t,n);return i?s:r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(s,1))},onAfterDrawSelection:(e,t,n)=>{let r;const[i,o]=this.translateFromRenderableToVisualIndex(e,t),s=this.hot.selection.getSelectedRange();if(s.size()>0){const e=s.peekByIndex(null!=n?n:0);r=[e.from.row,e.from.col,e.to.row,e.to.col]}return this.hot.runHooks("afterDrawSelection",i,o,r,n)},onBeforeDrawBorders:(e,t)=>{const[n,r,i,o]=e,s=[this.hot.rowIndexMapper.getVisualFromRenderableIndex(n),this.hot.columnIndexMapper.getVisualFromRenderableIndex(r),this.hot.rowIndexMapper.getVisualFromRenderableIndex(i),this.hot.columnIndexMapper.getVisualFromRenderableIndex(o)];return this.hot.runHooks("beforeDrawBorders",s,t)},onBeforeTouchScroll:()=>this.hot.runHooks("beforeTouchScroll"),onAfterMomentumScroll:()=>this.hot.runHooks("afterMomentumScroll"),onBeforeStretchingColumnWidth:(e,t)=>{const n=this.hot.columnIndexMapper.getVisualFromRenderableIndex(t);return this.hot.runHooks("beforeStretchingColumnWidth",e,n)},onModifyRowHeaderWidth:e=>this.hot.runHooks("modifyRowHeaderWidth",e),onModifyGetCellCoords:(e,t,n)=>{const r=this.hot.rowIndexMapper,i=this.hot.columnIndexMapper,o=t>=0?i.getVisualFromRenderableIndex(t):t,s=e>=0?r.getVisualFromRenderableIndex(e):e,a=this.hot.runHooks("modifyGetCellCoords",s,o,n);if(Array.isArray(a)){const[e,t,n,o]=a;return[e>=0?r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(e,1)):e,t>=0?i.getRenderableFromVisualIndex(i.getNearestNotHiddenIndex(t,1)):t,n>=0?r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(n,-1)):n,o>=0?i.getRenderableFromVisualIndex(i.getNearestNotHiddenIndex(o,-1)):o]}},viewportRowCalculatorOverride:e=>{let t=this.settings.viewportRowRenderingOffset;if("auto"===t&&this.settings.fixedRowsTop&&(t=10),t>0||"auto"===t){const n=this.countRenderableRows(),r=e.startRow,i=e.endRow;if("number"==typeof t)e.startRow=Math.max(r-t,0),e.endRow=Math.min(i+t,n-1);else if("auto"===t){const t=Math.ceil(i/n*12);e.startRow=Math.max(r-t,0),e.endRow=Math.min(i+t,n-1)}}this.hot.runHooks("afterViewportRowCalculatorOverride",e)},viewportColumnCalculatorOverride:e=>{let t=this.settings.viewportColumnRenderingOffset;if("auto"===t&&this.settings.fixedColumnsStart&&(t=10),t>0||"auto"===t){const n=this.countRenderableColumns(),r=e.startColumn,i=e.endColumn;if("number"==typeof t&&(e.startColumn=Math.max(r-t,0),e.endColumn=Math.min(i+t,n-1)),"auto"===t){const t=Math.ceil(i/n*6);e.startColumn=Math.max(r-t,0),e.endColumn=Math.min(i+t,n-1)}}this.hot.runHooks("afterViewportColumnCalculatorOverride",e)},rowHeaderWidth:()=>this.settings.rowHeaderWidth,columnHeaderHeight:()=>{const e=this.hot.runHooks("modifyColumnHeaderHeight");return this.settings.columnHeaderHeight||e}};this.hot.runHooks("beforeInitWalkontable",e),this._wt=new s.default(e),this.activeWt=this._wt;const t=this._wt.wtTable.spreader,{width:n,height:i}=this.hot.rootElement.getBoundingClientRect();this.setLastSize(n,i),this.eventManager.addEventListener(t,"mousedown",(e=>{e.target===t&&3===e.which&&e.stopPropagation()})),this.eventManager.addEventListener(t,"contextmenu",(e=>{e.target===t&&3===e.which&&e.stopPropagation()})),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"click",(()=>{this.settings.observeDOMVisibility&&this._wt.drawInterrupted&&(this.hot.forceFullRender=!0,this.render())}))}isTextSelectionAllowed(e){if((0,r.isInput)(e))return!0;const t=(0,r.isChildOf)(e,this.hot.view._wt.wtTable.spreader);return!(!0!==this.settings.fragmentSelection||!t)||!("cell"!==this.settings.fragmentSelection||!this.isSelectedOnlyCell()||!t)||!(this.settings.fragmentSelection||!this.isCellEdited()||!this.isSelectedOnlyCell())}isMouseDown(){return p(v,this)}isSelectedOnlyCell(){var e,t;return null!==(e=null===(t=this.hot.getSelectedRangeLast())||void 0===t?void 0:t.isSingleCell())&&void 0!==e&&e}isCellEdited(){const e=this.hot.getActiveEditor();return e&&e.isOpened()}beforeRender(e,t){e&&this.hot.runHooks("beforeViewRender",this.hot.forceFullRender,t)}afterRender(e){e&&this.hot.runHooks("afterViewRender",this.hot.forceFullRender)}appendRowHeader(e,t){if(t.firstChild){const n=t.firstChild;if(!(0,r.hasClass)(n,"relative"))return(0,r.empty)(t),void this.appendRowHeader(e,t);this.updateCellHeader(n.querySelector(".rowHeader"),e,this.hot.getRowHeader)}else{const{rootDocument:n,getRowHeader:r}=this.hot,i=n.createElement("div"),o=n.createElement("span");i.className="relative",o.className="rowHeader",this.updateCellHeader(o,e,r),i.appendChild(o),t.appendChild(i)}this.hot.runHooks("afterGetRowHeader",e,t)}appendColHeader(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hot.getColHeader,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if(t.firstChild){const o=t.firstChild;(0,r.hasClass)(o,"relative")?this.updateCellHeader(o.querySelector(".colHeader"),e,n,i):((0,r.empty)(t),this.appendColHeader(e,t,n,i))}else{const{rootDocument:o}=this.hot,s=o.createElement("div"),a=o.createElement("span");s.className="relative",a.className="colHeader",this.settings.ariaTags&&((0,r.setAttribute)(s,...(0,c.A11Y_PRESENTATION)()),(0,r.setAttribute)(a,...(0,c.A11Y_PRESENTATION)())),this.updateCellHeader(a,e,n,i),s.appendChild(a),t.appendChild(s)}this.hot.runHooks("afterGetColHeader",e,t,i)}updateCellHeader(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=t;const s=this._wt.wtOverlays.getParentOverlay(e)||this._wt;e.parentNode&&((0,r.hasClass)(e,"colHeader")?o=s.wtTable.columnFilter.sourceToRendered(t):(0,r.hasClass)(e,"rowHeader")&&(o=s.wtTable.rowFilter.sourceToRendered(t))),o>-1?(0,r.fastInnerHTML)(e,n(t,i)):((0,r.fastInnerText)(e,String.fromCharCode(160)),(0,r.addClass)(e,"cornerHeader"))}maximumVisibleElementWidth(e){const t=this._wt.wtViewport.getWorkspaceWidth()-e;return t>0?t:0}maximumVisibleElementHeight(e){const t=this._wt.wtViewport.getWorkspaceHeight()-e;return t>0?t:0}setLastSize(e,t){m(x,this,e),m(S,this,t)}getLastSize(){return{width:p(x,this),height:p(S,this)}}getFirstFullyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstVisibleRow())}getLastFullyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleRow())}getFirstFullyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstVisibleColumn())}getLastFullyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleColumn())}getFirstPartiallyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleRow())}getLastPartiallyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleRow())}getFirstPartiallyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleColumn())}getLastPartiallyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleColumn())}getColumnHeadersCount(){return p(y,this)}getRowHeadersCount(){return p(b,this)}getViewportWidth(){return this.hot.view._wt.wtViewport.getViewportWidth()}getWorkspaceWidth(){return this.hot.view._wt.wtViewport.getWorkspaceWidth()}getViewportHeight(){return this.hot.view._wt.wtViewport.getViewportHeight()}getWorkspaceHeight(){return this.hot.view._wt.wtViewport.getWorkspaceHeight()}destroy(){this._wt.destroy(),this.eventManager.destroy()}}},54169:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(99926),i=n(91187);function o(e,t,n){!function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}(e,t),t.set(e,n)}function s(e,t){return e.get(l(e,t))}function a(e,t,n){return e.set(l(e,t),n),n}function l(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var c=new WeakMap,u=new WeakMap,d=new WeakMap,h=new WeakMap,f=new WeakMap;t.ChangesObservable=class{constructor(){let{initialIndexValue:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o(this,c,new Set),o(this,u,[]),o(this,d,[]),o(this,h,!1),o(this,f,!1),a(f,this,null!=e&&e)}createObserver(){const e=new r.ChangesObserver;return s(c,this).add(e),e.addLocalHook("unsubscribe",(()=>{s(c,this).delete(e)})),e._writeInitialChanges((0,i.arrayDiff)(s(u,this),s(d,this))),e}emit(e){let t=s(d,this);s(h,this)&&s(u,this).length===e.length||(0===e.length?e=new Array(t.length).fill(s(f,this)):a(u,this,new Array(e.length).fill(s(f,this))),s(h,this)||(a(h,this,!0),t=s(u,this)));const n=(0,i.arrayDiff)(t,e);s(c,this).forEach((e=>e._write(n))),a(d,this,e)}}},99926:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r,i=n(56427),o=(r=n(2306))&&r.__esModule?r:{default:r};function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var a=new WeakMap;class l{constructor(){!function(e,t,n){!function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}(e,t),t.set(e,n)}(this,a,[])}subscribe(e){var t;return this.addLocalHook("change",e),this._write((this,(t=a).get(s(t,this)))),this}unsubscribe(){return this.runLocalHooks("unsubscribe"),this.clearLocalHooks(),this}_write(e){return e.length>0&&this.runLocalHooks("change",e),this}_writeInitialChanges(e){var t,n;n=e,(t=a).set(s(t,this),n)}}t.ChangesObserver=l,(0,i.mixin)(l,o.default)},91187:(e,t,n)=>{"use strict";t.__esModule=!0,t.arrayDiff=function(e,t){const n=[];let r=0,i=0;for(;r{"use strict";t.__esModule=!0;var r={IndexMapper:!0,getRegisteredMapsCounter:!0,getIncreasedIndexes:!0,getDecreasedIndexes:!0,alterUtilsFactory:!0},i=n(98720);t.IndexMapper=i.IndexMapper;var o=n(18987);t.getRegisteredMapsCounter=o.getRegisteredMapsCounter;var s=n(69515);t.getIncreasedIndexes=s.getIncreasedIndexes,t.getDecreasedIndexes=s.getDecreasedIndexes,t.alterUtilsFactory=s.alterUtilsFactory;var a=n(28025);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}))},98720:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r,i=n(16363),o=n(28025),s=n(653),a=(r=n(2306))&&r.__esModule?r:{default:r},l=n(56427),c=n(74713),u=n(54169);function d(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}new Set;class h{constructor(){d(this,"indexesSequence",new o.IndexesSequence),d(this,"trimmingMapsCollection",new s.AggregatedCollection((e=>e.some((e=>!0===e))),!1)),d(this,"hidingMapsCollection",new s.AggregatedCollection((e=>e.some((e=>!0===e))),!1)),d(this,"variousMapsCollection",new s.MapCollection),d(this,"hidingChangesObservable",new u.ChangesObservable({initialIndexValue:!1})),d(this,"notTrimmedIndexesCache",[]),d(this,"notHiddenIndexesCache",[]),d(this,"isBatched",!1),d(this,"indexesSequenceChanged",!1),d(this,"indexesChangeSource",void 0),d(this,"trimmedIndexesChanged",!1),d(this,"hiddenIndexesChanged",!1),d(this,"renderablePhysicalIndexesCache",[]),d(this,"fromPhysicalToVisualIndexesCache",new Map),d(this,"fromVisualToRenderableIndexesCache",new Map),this.indexesSequence.addLocalHook("change",(()=>{this.indexesSequenceChanged=!0,this.updateCache(),this.runLocalHooks("indexesSequenceChange",this.indexesChangeSource),this.runLocalHooks("change",this.indexesSequence,null)})),this.trimmingMapsCollection.addLocalHook("change",(e=>{this.trimmedIndexesChanged=!0,this.updateCache(),this.runLocalHooks("change",e,this.trimmingMapsCollection)})),this.hidingMapsCollection.addLocalHook("change",(e=>{this.hiddenIndexesChanged=!0,this.updateCache(),this.runLocalHooks("change",e,this.hidingMapsCollection)})),this.variousMapsCollection.addLocalHook("change",(e=>{this.runLocalHooks("change",e,this.variousMapsCollection)}))}suspendOperations(){this.isBatched=!0}resumeOperations(){this.isBatched=!1,this.updateCache()}createChangesObserver(e){if("hiding"!==e)throw new Error(`Unsupported index map type "${e}".`);return this.hidingChangesObservable.createObserver()}createAndRegisterIndexMap(e,t,n){return this.registerMap(e,(0,o.createIndexMap)(t,n))}registerMap(e,t){if(this.trimmingMapsCollection.get(e)||this.hidingMapsCollection.get(e)||this.variousMapsCollection.get(e))throw Error(`Map with name "${e}" has been already registered.`);t instanceof o.TrimmingMap?this.trimmingMapsCollection.register(e,t):t instanceof o.HidingMap?this.hidingMapsCollection.register(e,t):this.variousMapsCollection.register(e,t);const n=this.getNumberOfIndexes();return n>0&&t.init(n),t}unregisterMap(e){this.trimmingMapsCollection.unregister(e),this.hidingMapsCollection.unregister(e),this.variousMapsCollection.unregister(e)}unregisterAll(){this.trimmingMapsCollection.unregisterAll(),this.hidingMapsCollection.unregisterAll(),this.variousMapsCollection.unregisterAll()}getPhysicalFromVisualIndex(e){const t=this.notTrimmedIndexesCache[e];return(0,c.isDefined)(t)?t:null}getPhysicalFromRenderableIndex(e){const t=this.renderablePhysicalIndexesCache[e];return(0,c.isDefined)(t)?t:null}getVisualFromPhysicalIndex(e){const t=this.fromPhysicalToVisualIndexesCache.get(e);return(0,c.isDefined)(t)?t:null}getVisualFromRenderableIndex(e){return this.getVisualFromPhysicalIndex(this.getPhysicalFromRenderableIndex(e))}getRenderableFromVisualIndex(e){const t=this.fromVisualToRenderableIndexesCache.get(e);return(0,c.isDefined)(t)?t:null}getNearestNotHiddenIndex(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null===this.getPhysicalFromVisualIndex(e))return null;if(this.fromVisualToRenderableIndexesCache.has(e))return e;const r=Array.from(this.fromVisualToRenderableIndexesCache.keys());let i=-1;return i=t>0?r.findIndex((t=>t>e)):r.reverse().findIndex((t=>t0&&void 0!==arguments[0]?arguments[0]:this.getNumberOfIndexes();this.notTrimmedIndexesCache=[...new Array(e).keys()],this.notHiddenIndexesCache=[...new Array(e).keys()],this.suspendOperations(),this.indexesChangeSource="init",this.indexesSequence.init(e),this.indexesChangeSource=void 0,this.trimmingMapsCollection.initEvery(e),this.resumeOperations(),this.suspendOperations(),this.hidingMapsCollection.initEvery(e),this.variousMapsCollection.initEvery(e),this.resumeOperations(),this.runLocalHooks("init")}fitToLength(e){const t=this.getNumberOfIndexes();if(et+e));this.removeIndexes(t)}else this.insertIndexes(t,e-t)}getIndexesSequence(){return this.indexesSequence.getValues()}setIndexesSequence(e){void 0===this.indexesChangeSource&&(this.indexesChangeSource="update"),this.indexesSequence.setValues(e),"update"===this.indexesChangeSource&&(this.indexesChangeSource=void 0)}getNotTrimmedIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.notTrimmedIndexesCache:this.getIndexesSequence().filter((e=>!1===this.isTrimmed(e)))}getNotTrimmedIndexesLength(){return this.getNotTrimmedIndexes().length}getNotHiddenIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.notHiddenIndexesCache:this.getIndexesSequence().filter((e=>!1===this.isHidden(e)))}getNotHiddenIndexesLength(){return this.getNotHiddenIndexes().length}getRenderableIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.renderablePhysicalIndexesCache:this.getNotTrimmedIndexes().filter((e=>!1===this.isHidden(e)))}getRenderableIndexesLength(){return this.getRenderableIndexes().length}getNumberOfIndexes(){return this.getIndexesSequence().length}moveIndexes(e,t){"number"==typeof e&&(e=[e]);const n=(0,i.arrayMap)(e,(e=>this.getPhysicalFromVisualIndex(e))),r=this.getNotTrimmedIndexesLength(),s=e.length,a=(0,o.getListWithRemovedItems)(this.getIndexesSequence(),n),l=a.filter((e=>!1===this.isTrimmed(e)));let c=a.indexOf(l[l.length-1])+1;if(t+se+t));this.suspendOperations(),this.indexesChangeSource="insert",this.indexesSequence.insert(o,s),this.indexesChangeSource=void 0,this.trimmingMapsCollection.insertToEvery(o,s),this.hidingMapsCollection.insertToEvery(o,s),this.variousMapsCollection.insertToEvery(o,s),this.resumeOperations()}removeIndexes(e){this.suspendOperations(),this.indexesChangeSource="remove",this.indexesSequence.remove(e),this.indexesChangeSource=void 0,this.trimmingMapsCollection.removeFromEvery(e),this.hidingMapsCollection.removeFromEvery(e),this.variousMapsCollection.removeFromEvery(e),this.resumeOperations()}updateCache(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.indexesSequenceChanged||this.trimmedIndexesChanged||this.hiddenIndexesChanged;(!0===e||!1===this.isBatched&&!0===t)&&(this.trimmingMapsCollection.updateCache(),this.hidingMapsCollection.updateCache(),this.notTrimmedIndexesCache=this.getNotTrimmedIndexes(!1),this.notHiddenIndexesCache=this.getNotHiddenIndexes(!1),this.renderablePhysicalIndexesCache=this.getRenderableIndexes(!1),this.cacheFromPhysicalToVisualIndexes(),this.cacheFromVisualToRenderableIndexes(),this.hiddenIndexesChanged&&this.hidingChangesObservable.emit(this.hidingMapsCollection.getMergedValues()),this.runLocalHooks("cacheUpdated",{indexesSequenceChanged:this.indexesSequenceChanged,trimmedIndexesChanged:this.trimmedIndexesChanged,hiddenIndexesChanged:this.hiddenIndexesChanged}),this.indexesSequenceChanged=!1,this.trimmedIndexesChanged=!1,this.hiddenIndexesChanged=!1)}cacheFromPhysicalToVisualIndexes(){const e=this.getNotTrimmedIndexesLength();this.fromPhysicalToVisualIndexesCache.clear();for(let t=0;t{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(18987),i=n(16363),o=n(74713);function s(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends r.MapCollection{constructor(e,t){super(),s(this,"mergedValuesCache",[]),s(this,"aggregationFunction",void 0),s(this,"fallbackValue",void 0),this.aggregationFunction=e,this.fallbackValue=t}getMergedValues(){if(!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return this.mergedValuesCache;if(0===this.getLength())return[];const e=(0,i.arrayMap)(this.get(),(e=>e.getValues())),t=[],n=(0,o.isDefined)(e[0])&&e[0].length||0;for(let r=0;r{"use strict";t.__esModule=!0;var r=n(84376);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===r[e]||(t[e]=r[e]))}));var i=n(18987);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===i[e]||(t[e]=i[e]))}))},18987:(e,t,n)=>{"use strict";t.__esModule=!0,t.getRegisteredMapsCounter=function(){return a},n(16280);var r,i=n(74713),o=n(56427),s=(r=n(2306))&&r.__esModule?r:{default:r};let a=0;class l{constructor(){!function(e,t,n){var r;(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"collection",new Map)}register(e,t){!1===this.collection.has(e)&&(this.collection.set(e,t),t.addLocalHook("change",(()=>this.runLocalHooks("change",t))),a+=1)}unregister(e){const t=this.collection.get(e);(0,i.isDefined)(t)&&(t.destroy(),this.collection.delete(e),this.runLocalHooks("change",t),a-=1)}unregisterAll(){this.collection.forEach(((e,t)=>this.unregister(t))),this.collection.clear()}get(e){return(0,i.isUndefined)(e)?Array.from(this.collection.values()):this.collection.get(e)}getLength(){return this.collection.size}removeFromEvery(e){this.collection.forEach((t=>{t.remove(e)}))}insertToEvery(e,t){this.collection.forEach((n=>{n.insert(e,t)}))}initEvery(e){this.collection.forEach((t=>{t.init(e)}))}}t.MapCollection=l,(0,o.mixin)(l,s.default)},46714:(e,t,n)=>{"use strict";t.__esModule=!0,n(44114);var r=n(87402),i=n(16363);class o extends r.PhysicalIndexToValueMap{constructor(){super(arguments.length>0&&void 0!==arguments[0]&&arguments[0])}getHiddenIndexes(){return(0,i.arrayReduce)(this.getValues(),((e,t,n)=>(t&&e.push(n),e)),[])}}t.HidingMap=o},28025:(e,t,n)=>{"use strict";t.__esModule=!0;var r={createIndexMap:!0,HidingMap:!0,IndexMap:!0,LinkedPhysicalIndexToValueMap:!0,PhysicalIndexToValueMap:!0,TrimmingMap:!0};t.createIndexMap=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!d.has(e))throw new Error(`The provided map type ("${e}") does not exist.`);return new(d.get(e))(t)},n(16280);var i=n(46714);t.HidingMap=i.HidingMap;var o=n(48263);t.IndexMap=o.IndexMap;var s=n(61053);t.LinkedPhysicalIndexToValueMap=s.LinkedPhysicalIndexToValueMap;var a=n(87402);t.PhysicalIndexToValueMap=a.PhysicalIndexToValueMap;var l=n(77224);t.TrimmingMap=l.TrimmingMap;var c=n(11972);Object.keys(c).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===c[e]||(t[e]=c[e]))}));var u=n(87662);Object.keys(u).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===u[e]||(t[e]=u[e]))}));const d=new Map([["hiding",i.HidingMap],["index",o.IndexMap],["linkedPhysicalIndexToValue",s.LinkedPhysicalIndexToValueMap],["physicalIndexToValue",a.PhysicalIndexToValueMap],["trimming",l.TrimmingMap]])},48263:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r,i=n(38889),o=n(56427),s=n(63996),a=(r=n(2306))&&r.__esModule?r:{default:r};function l(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class c{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;l(this,"indexedValues",[]),l(this,"initValueOrFn",void 0),this.initValueOrFn=e}getValues(){return this.indexedValues}getValueAtIndex(e){const t=this.indexedValues;if(e0&&void 0!==arguments[0]?arguments[0]:this.indexedValues.length;this.indexedValues.length=0,(0,s.isFunction)(this.initValueOrFn)?(0,i.rangeEach)(e-1,(e=>this.indexedValues.push(this.initValueOrFn(e)))):(0,i.rangeEach)(e-1,(()=>this.indexedValues.push(this.initValueOrFn))),this.runLocalHooks("change")}init(e){return this.setDefaultValues(e),this.runLocalHooks("init"),this}insert(){this.runLocalHooks("change")}remove(){this.runLocalHooks("change")}destroy(){this.clearLocalHooks(),this.indexedValues=null,this.initValueOrFn=null}}t.IndexMap=c,(0,o.mixin)(c,a.default)},11972:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(48263),i=n(87662),o=n(69515);class s extends r.IndexMap{constructor(){super((e=>e))}insert(e,t){const n=(0,o.getIncreasedIndexes)(this.indexedValues,t);this.indexedValues=(0,i.getListWithInsertedItems)(n,e,t),super.insert(e,t)}remove(e){const t=(0,i.getListWithRemovedItems)(this.indexedValues,e);this.indexedValues=(0,o.getDecreasedIndexes)(t,e),super.remove(e)}}t.IndexesSequence=s},61053:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r=n(48263),i=n(99368),o=n(87662),s=n(81629),a=n(63996);class l extends r.IndexMap{constructor(){var e,t,n,r;super(...arguments),e=this,n=[],(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t="orderOfIndexes"))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}getValues(){return this.orderOfIndexes.map((e=>this.indexedValues[e]))}setValues(e){this.orderOfIndexes=[...Array(e.length).keys()],super.setValues(e)}setValueAtIndex(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.orderOfIndexes.length;return e0&&void 0!==arguments[0]?arguments[0]:this.indexedValues.length;this.orderOfIndexes.length=0,super.setDefaultValues(e)}insert(e,t){this.indexedValues=(0,i.getListWithInsertedItems)(this.indexedValues,e,t,this.initValueOrFn),this.orderOfIndexes=(0,s.getIncreasedIndexes)(this.orderOfIndexes,t),super.insert(e,t)}remove(e){this.indexedValues=(0,i.getListWithRemovedItems)(this.indexedValues,e),this.orderOfIndexes=(0,o.getListWithRemovedItems)(this.orderOfIndexes,e),this.orderOfIndexes=(0,s.getDecreasedIndexes)(this.orderOfIndexes,e),super.remove(e)}getEntries(){return this.orderOfIndexes.map((e=>[e,this.getValueAtIndex(e)]))}}t.LinkedPhysicalIndexToValueMap=l},87402:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(48263),i=n(99368);class o extends r.IndexMap{insert(e,t){this.indexedValues=(0,i.getListWithInsertedItems)(this.indexedValues,e,t,this.initValueOrFn),super.insert(e,t)}remove(e){this.indexedValues=(0,i.getListWithRemovedItems)(this.indexedValues,e),super.remove(e)}}t.PhysicalIndexToValueMap=o},77224:(e,t,n)=>{"use strict";t.__esModule=!0,n(44114);var r=n(87402),i=n(16363);class o extends r.PhysicalIndexToValueMap{constructor(){super(arguments.length>0&&void 0!==arguments[0]&&arguments[0])}getTrimmedIndexes(){return(0,i.arrayReduce)(this.getValues(),((e,t,n)=>(t&&e.push(n),e)),[])}}t.TrimmingMap=o},81629:(e,t,n)=>{"use strict";t.__esModule=!0,t.getDecreasedIndexes=function(e,t){return(0,r.arrayMap)(e,(e=>e-t.filter((t=>te>=n?e+i:e))};var r=n(16363)},69515:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r=n(81629);t.getDecreasedIndexes=r.getDecreasedIndexes,t.getIncreasedIndexes=r.getIncreasedIndexes;var i=n(87662),o=n(99368);const s=new Map([["indexesSequence",{getListWithInsertedItems:i.getListWithInsertedItems,getListWithRemovedItems:i.getListWithRemovedItems}],["physicallyIndexed",{getListWithInsertedItems:o.getListWithInsertedItems,getListWithRemovedItems:o.getListWithRemovedItems}]]);t.alterUtilsFactory=e=>{if(!1===s.has(e))throw new Error(`Alter strategy with ID '${e}' does not exist.`);return s.get(e)}},87662:(e,t,n)=>{"use strict";t.__esModule=!0,t.getListWithInsertedItems=function(e,t,n){return[...e.slice(0,t),...n,...e.slice(t)]},t.getListWithRemovedItems=function(e,t){return(0,r.arrayFilter)(e,(e=>!1===t.includes(e)))};var r=n(16363)},99368:(e,t,n)=>{"use strict";t.__esModule=!0,t.getListWithInsertedItems=function(e,t,n,i){const o=n.length?n[0]:void 0;return[...e.slice(0,o),...n.map(((e,t)=>(0,r.isFunction)(i)?i(e,t):i)),...void 0===o?[]:e.slice(o)]},t.getListWithRemovedItems=function(e,t){return(0,i.arrayFilter)(e,((e,n)=>!1===t.includes(n)))};var r=n(63996),i=n(16363)},35943:(e,t)=>{"use strict";function n(e,t,n){e.addEventListener(t,n,!1)}function r(e,t,n){e.removeEventListener(t,n,!1)}function i(e){return e.ownerDocument.defaultView.getComputedStyle(e)}t.__esModule=!0,t.createInputElementResizer=function(e){const t={minHeight:200,maxHeight:300,minWidth:100,maxWidth:300},o=e.body,s=e.createTextNode(""),a=e.createElement("span");let l;function c(){s.textContent=l.value,a.style.position="absolute",a.style.fontSize=i(l).fontSize,a.style.fontFamily=i(l).fontFamily,a.style.whiteSpace="pre",o.appendChild(a);const e=a.clientWidth+2;o.removeChild(a);const n=l.style;n.height=`${t.minHeight}px`,t.minWidth>e?n.width=`${t.minWidth}px`:e>t.maxWidth?n.width=`${t.maxWidth}px`:n.width=`${e}px`;const r=l.scrollHeight?l.scrollHeight-1:0;t.minHeight>r?n.height=`${t.minHeight}px`:t.maxHeight2&&void 0!==arguments[2]&&arguments[2];l=e,function(e){if(e&&e.minHeight)if("inherit"===e.minHeight)t.minHeight=l.clientHeight;else{const n=parseInt(e.minHeight,10);isNaN(n)||(t.minHeight=n)}if(e&&e.maxHeight)if("inherit"===e.maxHeight)t.maxHeight=l.clientHeight;else{const n=parseInt(e.maxHeight,10);isNaN(n)||(t.maxHeight=n)}if(e&&e.minWidth)if("inherit"===e.minWidth)t.minWidth=l.clientWidth;else{const n=parseInt(e.minWidth,10);isNaN(n)||(t.minWidth=n)}if(e&&e.maxWidth)if("inherit"===e.maxWidth)t.maxWidth=l.clientWidth;else{const n=parseInt(e.maxWidth,10);isNaN(n)||(t.maxWidth=n)}a.firstChild||(a.className="autoResize",a.style.display="inline-block",a.appendChild(s))}(r),"TEXTAREA"===l.nodeName&&(l.style.resize="none",l.style.height=`${t.minHeight}px`,l.style.minWidth=`${t.minWidth}px`,l.style.maxWidth=`${t.maxWidth}px`,l.style.overflowY="hidden"),i&&(n(l,"input",c),n(l,"keydown",u)),c()},resize:c,unObserve(){r(l,"input",c),r(l,"keydown",u)}}}},94528:(e,t,n)=>{"use strict";function r(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.__esModule=!0,n(16280);class i{constructor(e){r(this,"data",void 0),r(this,"next",null),r(this,"prev",null),this.data=e}}t.NodeStructure=i,t.default=class{constructor(){r(this,"first",null),r(this,"last",null)}push(e){const t=new i(e);if(null===this.first)this.first=t,this.last=t;else{const e=this.last;this.last=t,t.prev=e,e.next=t}return t}unshift(e){const t=new i(e);if(null===this.first)this.first=t,this.last=t;else{const e=this.first;this.first=t,t.next=e,e.prev=t}}inorder(e){let t=this.first;for(;t;){const n=e(t);if(t===this.last||!0===n)break;t=t.next}}remove(e){if(null===this.first)return!1;let t,n,r=this.first;for(;r;){if(r.data===e)return t=r.next,n=r.prev,t&&(t.prev=n),n&&(n.next=t),r===this.first&&(this.first=t),r===this.last&&(this.last=n),!0;r=r.next}return!1}hasCycle(){let e=this.first,t=this.first;for(;;){if(null===e)return!1;if(e=e.next,null===e)return!1;if(e=e.next,t=t.next,e===t)return!0}}pop(){if(null===this.last)return null;const e=this.last;return this.last=this.last.prev,e}shift(){if(null===this.first)return null;const e=this.first;return this.first=this.first.next,e}recursiveReverse(){if(!this.first)return;!function e(t,n){n&&(e(n,n.next),n.next=t)}(this.first,this.first.next),this.first.next=null;const e=this.first;this.first=this.last,this.last=e}reverse(){if(!this.first||!this.first.next)return;let e,t=this.first.next,n=this.first;for(;t;)e=t.next,t.next=n,n.prev=t,n=t,t=e;this.first.next=null,this.last.prev=null,e=this.first,this.first=n,this.last=e}}},63063:(e,t,n)=>{"use strict";t.__esModule=!0,t.createPriorityMap=function(){let{errorPriorityExists:e,errorPriorityNaN:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=new Map;return e=(0,i.isFunction)(e)?e:l,t=(0,i.isFunction)(t)?t:c,{addItem:function(i,o){if(!(0,r.isNumeric)(i))throw new Error(t(i));if(n.has(i))throw new Error(e(i));n.set(i,o)},getItems:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;const[t,r]=a.get(e)||a.get(o);return[...n].sort(((e,n)=>e[0]e[1]))}}},n(16280);var r=n(38889),i=n(63996);const o=t.ASC="asc",s=t.DESC="desc",a=new Map([[o,[-1,1]],[s,[1,-1]]]),l=e=>`The priority '${e}' is already declared in a map.`,c=e=>`The priority '${e}' is not a number.`},80297:(e,t,n)=>{"use strict";function r(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.__esModule=!0,t.depthFirstPreOrder=o,n(16280),n(44114);const i=t.TRAVERSAL_DF_PRE="DF-pre-order";function o(e,t){let n=e.call(t,this);for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:this;const t=new u({...e.data});for(let n=0;n1&&void 0!==arguments[1]?arguments[1]:l;if(!c.has(t))throw new Error(`Traversal strategy "${t}" does not exist`);c.get(t).call(this,e,this)}walkUp(e){const t=this,n=r=>{!1!==e.call(t,r)&&null!==r.parent&&n(r.parent)};n(this)}}t.default=u},50346:(e,t,n)=>{"use strict";t.__esModule=!0,t.createUniqueMap=function(){let{errorIdExists:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Map;function n(){return[...t]}function o(e){return t.has(e)}return e=(0,r.isFunction)(e)?e:i,{addItem:function(n,r){if(o(n))throw new Error(e(n));t.set(n,r)},clear:function(){t.clear()},getId:function(e){const[t]=n().find((t=>{let[n,r]=t;return e===r&&n}))||[null];return t},getItem:function(e){return t.get(e)},getItems:n,hasItem:o,removeItem:function(e){return t.delete(e)}}},n(16280);var r=n(63996);const i=e=>`The id '${e}' is already declared in a map.`},53040:(e,t,n)=>{"use strict";t.__esModule=!0,t.createUniqueSet=function(){let{errorItemExists:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Set;return e=(0,r.isFunction)(e)?e:i,{addItem:function(n){if(t.has(n))throw new Error(e(n));t.add(n)},clear:function(){t.clear()},getItems:function(){return[...t]}}},n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(63996);const i=e=>`'${e}' value is already declared in a unique set.`},65685:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(32993),i=n(16363);function o(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.default=class{constructor(e){o(this,"hot",null),o(this,"container",null),o(this,"injected",!1),o(this,"rows",[]),o(this,"columns",[]),o(this,"samples",null),o(this,"settings",{useHeaders:!0}),this.hot=e}addRow(e,t){if(this.columns.length)throw new Error("Doesn't support multi-dimensional table");this.rows.length||(this.container=this.createContainer(this.hot.rootElement.className));const n={row:e};this.rows.push(n),this.samples=t,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol(e)),this.table.tr.appendChild(this.createRow(e)),this.container.container.appendChild(this.table.fragment),n.table=this.table.table}addColumnHeadersRow(e){if(null!=this.hot.getColHeader(0)){const t={row:-1};this.rows.push(t),this.container=this.createContainer(this.hot.rootElement.className),this.samples=e,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol()),this.appendColumnHeadersRow(),this.container.container.appendChild(this.table.fragment),t.table=this.table.table}}addColumn(e,t){if(this.rows.length)throw new Error("Doesn't support multi-dimensional table");this.columns.length||(this.container=this.createContainer(this.hot.rootElement.className));const n={col:e};this.columns.push(n),this.samples=t,this.table=this.createTable(this.hot.table.className),this.getSetting("useHeaders")&&null!==this.hot.getColHeader(e)&&this.hot.view.appendColHeader(e,this.table.th),this.table.tBody.appendChild(this.createCol(e)),this.container.container.appendChild(this.table.fragment),n.table=this.table.table}getHeights(e){this.injected||this.injectTable(),(0,i.arrayEach)(this.rows,(t=>{e(t.row,(0,r.outerHeight)(t.table)-1)}))}getWidths(e){this.injected||this.injectTable(),(0,i.arrayEach)(this.columns,(t=>{const{width:n}=t.table.getBoundingClientRect();e(t.col,Math.ceil(n))}))}setSettings(e){this.settings=e}setSetting(e,t){this.settings||(this.settings={}),this.settings[e]=t}getSettings(){return this.settings}getSetting(e){return this.settings?this.settings[e]:null}createColGroupsCol(e){const t=this.hot.rootDocument.createDocumentFragment();return this.hot.hasRowHeaders()&&t.appendChild(this.createColElement(-1,-1)),this.samples.forEach((n=>{(0,i.arrayEach)(n.strings,(n=>{t.appendChild(this.createColElement(n.col,e))}))})),t}createRow(e){const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),r=t.createElement("th");return this.hot.hasRowHeaders()&&(this.hot.view.appendRowHeader(e,r),n.appendChild(r)),this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.col,o=this.hot.getCellMeta(e,i),s=this.hot.getCellRenderer(o),a=t.createElement("td");a.setAttribute("ghost-table",1),s(this.hot,a,e,i,this.hot.colToProp(i),r.value,o),n.appendChild(a)}))})),n}appendColumnHeadersRow(){const{rootDocument:e}=this.hot,t=e.createDocumentFragment(),n=[];if(this.hot.hasRowHeaders()){const r=e.createElement("th");n.push([-1,r]),t.appendChild(r)}this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.col,o=e.createElement("th");n.push([i,o]),t.appendChild(o)}))})),this.table.tHead.appendChild(t),(0,i.arrayEach)(n,(e=>{const[t,n]=e;this.hot.view.appendColHeader(t,n)}))}createCol(e){const{rootDocument:t}=this.hot,n=t.createDocumentFragment();return this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.row,o=this.hot.getCellMeta(i,e),s=this.hot.getCellRenderer(o),a=t.createElement("td"),l=t.createElement("tr");a.setAttribute("ghost-table",1),s(this.hot,a,i,e,this.hot.colToProp(e),r.value,o),l.appendChild(a),n.appendChild(l)}))})),n}clean(){this.rows.length=0,this.rows[-1]=void 0,this.columns.length=0,this.samples&&this.samples.clear(),this.samples=null,this.removeTable()}injectTable(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.injected||((e||this.hot.rootElement).appendChild(this.container.fragment),this.injected=!0)}removeTable(){this.injected&&this.container.container.parentNode&&(this.container.container.parentNode.removeChild(this.container.container),this.container=null,this.injected=!1)}createColElement(e,t){const n=this.hot.rootDocument.createElement("col");let r=0;t>=0&&e>=0&&(r=this.hot.getCellMeta(t,e).colspan);let i=this.hot.getColWidth(e);if(r>1)for(let t=e+1;t0&&void 0!==arguments[0]?arguments[0]:"";const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),i=t.createElement("table"),o=t.createElement("thead"),s=t.createElement("tbody"),a=t.createElement("colgroup"),l=t.createElement("tr"),c=t.createElement("th");return this.isVertical()&&i.appendChild(a),this.isHorizontal()&&(l.appendChild(c),o.appendChild(l),i.style.tableLayout="auto",i.style.width="auto"),i.appendChild(o),this.isVertical()&&s.appendChild(l),i.appendChild(s),(0,r.addClass)(i,e),n.appendChild(i),{fragment:n,table:i,tHead:o,tBody:s,colGroup:a,tr:l,th:c}}createContainer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),i=t.createElement("div"),o=`htGhostTable htAutoSize ${e.trim()}`;return(0,r.addClass)(i,o),n.appendChild(i),{fragment:n,container:i}}isVertical(){return!(!this.rows.length||this.columns.length)}isHorizontal(){return!(!this.columns.length||this.rows.length)}}},54957:(e,t,n)=>{"use strict";t.__esModule=!0,t.createPaginator=function(e){let{initialPage:t=-1,size:n=(()=>0),onItemSelect:i=(()=>{}),onClear:o=(()=>{})}=e;const s=new Set;let a=(0,r.clamp)(t,-1,c()-1);function l(e,t){const n=c()-1;return e<0&&(e=n),e>n&&(e=0),s.has(e)?-1:(s.add(e),!1===i(e,!1)&&(e=l(1===t?++e:--e,t)),e)}function c(){return Math.max(n(),0)}return{setCurrentPage:function(e){e>-1&&e0&&(s.clear(),a=l(0,1))},toLastItem:function(){c()>0&&(s.clear(),a=l(c()-1,-1))},toNextItem:function(){c()>0&&(s.clear(),a=l(++a,1))},toPreviousItem:function(){c()>0&&(s.clear(),a=l(--a,-1))},getSize:c,clear:function(){s.clear(),a=t,o()}}},n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(38889)},47901:(e,t,n)=>{"use strict";t.__esModule=!0,t._dataToHTML=function(e){const t=e.length,n=[""];for(let i=0;i");for(let e=0;e/g,">").replace(/((\r\n|\n)?|\r\n|\n)/g,"
\r\n").replace(/\x20{2,}/gi,(e=>`${" ".repeat(e.length-1)} `)).replace(/\t/gi," ");a.push(`
`)}n.push("",...a,""),i+1===t&&n.push("")}return n.push("
${n}
"),n.join("")},t.htmlToGridSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;const n={},r=t.createDocumentFragment(),s=t.createElement("div");r.appendChild(s);let a=e;if("string"==typeof a){const e=a.replace(/]*?>([\s\S]*?)<\/\s*td>/g,(e=>{const t=e.match(/]*?>/g)[0];return`${t}${e.substring(t.length,e.lastIndexOf("<")).trim().replaceAll(/\n\s+/g," ").replaceAll(//g,"\n").replace("\n","").replaceAll(/<\/(.*)>\s+$/gm,"").replace(/(<(?!br)([^>]+)>)/gi,"").replaceAll(/^ $/gm,"")}`}));s.insertAdjacentHTML("afterbegin",`${e}`),a=s.querySelector("table")}if(!a||!function(e){return"TABLE"===(e&&e.nodeName||"")}(a))return;const l=s.querySelector('meta[name$="enerator"]'),c=null!==a.querySelector("tbody th"),u=a.querySelector("tr"),d=u?Array.from(u.cells).reduce(((e,t)=>e+t.colSpan),0)-(c?1:0):0,h=a.tFoot&&Array.from(a.tFoot.rows)||[],f=[];let p=!1,m=0,g=0;if(a.tHead){const e=Array.from(a.tHead.rows).filter((e=>{const t=null!==e.querySelector("td");return t&&f.push(e),!t}));m=e.length,p=m>0,m>1?n.nestedHeaders=Array.from(e).reduce(((e,t)=>{const n=Array.from(t.cells).reduce(((e,t,n)=>{if(c&&0===n)return e;const{colSpan:r,innerHTML:i}=t,o=r>1?{label:i,colspan:r}:i;return e.push(o),e}),[]);return e.push(n),e}),[]):p&&(n.colHeaders=Array.from(e[0].children).reduce(((e,t,n)=>(c&&0===n||e.push(t.innerHTML),e)),[]))}f.length&&(n.fixedRowsTop=f.length),h.length&&(n.fixedRowsBottom=h.length);const y=[...f,...Array.from(a.tBodies).reduce(((e,t)=>(e.push(...Array.from(t.rows)),e)),[]),...h];g=y.length;const b=new Array(g);for(let e=0;evoid 0===e));if("TD"===s){if(c>1||u>1){for(let t=e;t[\r\n]?[\x20]{0,3}/gim,"\r\n"):a.replace(/[\r\n]?/gim,"\r\n"),b[e][d]=t.replace(o,(e=>i[e]))}else v.push(a)}}return _.length&&(n.mergeCells=_),v.length&&(n.rowHeaders=v),b.length&&(n.data=b),n},t.instanceToHTML=function(e){const t=e.hasColHeaders(),n=e.hasRowHeaders(),i=[t?-1:0,n?-1:0,e.countRows()-1,e.countCols()-1],o=e.getData(...i),s=o.length,a=s>0?o[0].length:0,l=["","
"],c=t?["",""]:[],u=["",""],d=n?1:0,h=t?1:0;for(let i=0;i${e.getColHeader(t-d)}`;else if(a)c=`${e.getRowHeader(i-h)}`;else{const n=o[i][t],{hidden:s,rowspan:a,colspan:l}=e.getCellMeta(i-h,t-d);if(!s){const e=[];if(a&&e.push(`rowspan="${a}"`),l&&e.push(`colspan="${l}"`),(0,r.isEmpty)(n))c=``;else{const t=n.toString().replace("<","<").replace(">",">").replace(/((\r\n|\n)?|\r\n|\n)/g,"
\r\n").replace(/\x20/gi," ").replace(/\t/gi," ");c=`${t}`}}}l.push(c)}const f=["",...l,""].join("");s?c.splice(1,0,f):u.splice(-1,0,f)}return l.splice(1,0,c.join(""),u.join("")),l.join("")},n(44114),n(79978);var r=n(74713);const i={" ":" ","&":"&","<":"<",">":">"},o=new RegExp(Object.keys(i).map((e=>`(${e})`)).join("|"),"gi")},62987:(e,t)=>{"use strict";t.__esModule=!0,t.hasValidParameter=function(e){return e===r},t.isRootInstance=function(e){return n.has(e)},t.registerAsRootInstance=function(e){n.set(e,!0)};const n=t.holder=new WeakMap,r=t.rootInstanceSymbol=Symbol("rootInstance")},96992:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(56427),i=n(38889),o=n(74713);function s(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a{static get SAMPLE_COUNT(){return 3}constructor(e){s(this,"samples",null),s(this,"dataFactory",null),s(this,"customSampleCount",null),s(this,"allowDuplicates",!1),this.dataFactory=e}getSampleCount(){return this.customSampleCount?this.customSampleCount:a.SAMPLE_COUNT}setSampleCount(e){this.customSampleCount=e}setAllowDuplicates(e){this.allowDuplicates=e}generateRowSamples(e,t){return this.generateSamples("row",t,e)}generateColumnSamples(e,t){return this.generateSamples("col",t,e)}generateSamples(e,t,n){const r=new Map,{from:o,to:s}="number"==typeof n?{from:n,to:n}:n;return(0,i.rangeEach)(o,s,(n=>{const i=this.generateSample(e,t,n);r.set(n,i)})),r}generateSample(e,t,n){if("row"!==e&&"col"!==e)throw new Error("Unsupported sample type");const s=new Map,a="row"===e?"col":"row",l=[];return(0,i.rangeEach)(t.from,t.to,(t=>{const i="row"===e?this.dataFactory(n,t):this.dataFactory(t,n);if(!1===i)return;const{value:c,bundleSeed:u}=i,d="string"==typeof u&&u.length>0;let h;h=d?u:(0,r.isObject)(c)?`${Object.keys(c).length}`:Array.isArray(c)?`${c.length}`:`${(0,o.stringify)(c).length}`,s.has(h)||s.set(h,{needed:this.getSampleCount(),strings:[]});const f=s.get(h);f.needed&&(!(l.indexOf(c)>-1)||this.allowDuplicates||d)&&(f.strings.push({value:c,[a]:t}),l.push(c),f.needed-=1)})),s}}t.default=a},27419:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"common";n.has(e)||n.set(e,new Map);const t=n.get(e);return{register:function(e,n){t.set(e,n)},getItem:function(e){return t.get(e)},hasItem:function(e){return t.has(e)},getNames:function(){return[...t.keys()]},getValues:function(){return[...t.values()]}}};const n=t.collection=new Map},31113:(e,t)=>{"use strict";t.__esModule=!0,t.autocompleteValidator=r;const n=t.VALIDATOR_TYPE="autocomplete";function r(e,t){let n=e;null==n&&(n=""),this.allowEmpty&&""===n?t(!0):this.strict&&this.source?"function"==typeof this.source?this.source(n,i(n,t)):i(n,t)(this.source):t(!0)}function i(e,t){const n=e;return function(e){let r=!1;for(let t=0,i=e.length;t{"use strict";t.__esModule=!0;var r=n(31113);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.autocompleteValidator=r.autocompleteValidator},1745:(e,t,n)=>{"use strict";t.__esModule=!0,t.correctFormat=u,t.dateValidator=c;var r,i=(r=n(95093))&&r.__esModule?r:{default:r},o=n(50394),s=n(56163),a=n(53176);const l=t.VALIDATOR_TYPE="date";function c(e,t){const n=(0,o.getEditorInstance)(s.EDITOR_TYPE,this.instance);let r=e,a=!0;null==r&&(r="");let l=(0,i.default)(r,this.dateFormat||n.defaultDateFormat,!0).isValid(),c=(0,i.default)(new Date(r)).isValid()||l;if(this.allowEmpty&&""===r&&(c=!0,l=!0),c||(a=!1),!c&&l&&(a=!0),c&&!l)if(!0===this.correctFormat){const e=u(r,this.dateFormat);this.instance.setDataAtCell(this.visualRow,this.visualCol,e,"dateValidator"),a=!0}else a=!1;t(a)}function u(e,t){const n=(0,i.default)((0,a.getNormalizedDate)(e)),r=(0,i.default)(e,t),o=e.search(/[A-z]/g)>-1;let s;return s=n.isValid()&&n.format("x")===r.format("x")||!r.isValid()||o?n:r,s.format(t)}c.VALIDATOR_TYPE=l},5615:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(1745);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.correctFormat=r.correctFormat,t.dateValidator=r.dateValidator},99457:(e,t,n)=>{"use strict";t.__esModule=!0,t.dropdownValidator=o;var r=n(31113);const i=t.VALIDATOR_TYPE="dropdown";function o(e,t){r.autocompleteValidator.apply(this,[e,t])}o.VALIDATOR_TYPE=i},69072:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(99457);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.dropdownValidator=r.dropdownValidator},58130:(e,t,n)=>{"use strict";t.__esModule=!0,t.registerAllValidators=function(){(0,l.registerValidator)(r.autocompleteValidator),(0,l.registerValidator)(o.dropdownValidator),(0,l.registerValidator)(i.dateValidator),(0,l.registerValidator)(s.numericValidator),(0,l.registerValidator)(a.timeValidator)};var r=n(12023);t.autocompleteValidator=r.autocompleteValidator,t.AUTOCOMPLETE_VALIDATOR=r.VALIDATOR_TYPE;var i=n(5615);t.dateValidator=i.dateValidator,t.DATE_VALIDATOR=i.VALIDATOR_TYPE;var o=n(69072);t.dropdownValidator=o.dropdownValidator,t.DROPDOWN_VALIDATOR=o.VALIDATOR_TYPE;var s=n(8268);t.numericValidator=s.numericValidator,t.NUMERIC_VALIDATOR=s.VALIDATOR_TYPE;var a=n(25008);t.timeValidator=a.timeValidator,t.TIME_VALIDATOR=a.VALIDATOR_TYPE;var l=n(34899);t.registerValidator=l.registerValidator,t.getRegisteredValidatorNames=l.getRegisteredValidatorNames,t.getRegisteredValidators=l.getRegisteredValidators,t.getValidator=l.getValidator,t.hasValidator=l.hasValidator},8268:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(18765);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.numericValidator=r.numericValidator},18765:(e,t,n)=>{"use strict";t.__esModule=!0,t.numericValidator=o;var r=n(38889);const i=t.VALIDATOR_TYPE="numeric";function o(e,t){let n=e;null==n&&(n=""),this.allowEmpty&&""===n?t(!0):t(""!==n&&(0,r.isNumeric)(e))}o.VALIDATOR_TYPE=i},34899:(e,t,n)=>{"use strict";t.__esModule=!0,t.getValidator=function(e){if("function"==typeof e)return e;if(!a(e))throw Error(`No registered validator found under "${e}" name`);return s(e)},t.registerValidator=function(e,t){"string"!=typeof e&&(e=(t=e).VALIDATOR_TYPE),o(e,t)},n(16280);var r,i=(r=n(27419))&&r.__esModule?r:{default:r};const{register:o,getItem:s,hasItem:a,getNames:l,getValues:c}=(0,i.default)("validators");t.getRegisteredValidators=c,t.getRegisteredValidatorNames=l,t.hasValidator=a},25008:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(52365);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.timeValidator=r.timeValidator},52365:(e,t,n)=>{"use strict";t.__esModule=!0,t.timeValidator=a;var r,i=(r=n(95093))&&r.__esModule?r:{default:r};const o=["YYYY-MM-DDTHH:mm:ss.SSSZ","X","x"],s=t.VALIDATOR_TYPE="time";function a(e,t){const n=this.timeFormat||"h:mm:ss a";let r=!0,s=e;null===s&&(s=""),s=/^\d{3,}$/.test(s)?parseInt(s,10):s;const a=/^\d{1,2}$/.test(s);a&&(s+=":00");const l=(0,i.default)(s,o,!0).isValid()?(0,i.default)(s):(0,i.default)(s,n);let c=l.isValid(),u=(0,i.default)(s,n,!0).isValid()&&!a;if(this.allowEmpty&&""===s&&(c=!0,u=!0),c||(r=!1),!c&&u&&(r=!0),c&&!u)if(!0===this.correctFormat){const e=l.format(n);this.instance.setDataAtCell(this.visualRow,this.visualCol,e,"timeValidator"),r=!0}else r=!1;t(r)}a.VALIDATOR_TYPE=s},30869:(e,t,n)=>{var r;r=function(){return function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,(function(e){return i(t[s][1][e]||e)}),c,c.exports,e,t,n,r)}return n[s].exports}for(var o=void 0,s=0;s0&&(n=s.concat(n),s=[]),y.map(function(e){return function(e){return k(e,"w:pStyle","Paragraph",S.findParagraphStyleById)}(e).map((function(t){return{type:"paragraphProperties",styleId:t.styleId,styleName:t.name,alignment:e.firstOrEmpty("w:jc").attributes["w:val"],numbering:u(t.styleId,e.firstOrEmpty("w:numPr"),x),indent:T(e.firstOrEmpty("w:ind"))}}))}(t),C(n),(function(e,t){return new o.Paragraph(t,e)})).insertExtra()},"w:r":function(e){return y.map(function(e){return function(e){return k(e,"w:rStyle","Run",S.findCharacterStyleById)}(e).map((function(t){var n,r=e.firstOrEmpty("w:sz").attributes["w:val"],i=/^[0-9]+$/.test(r)?parseInt(r,10)/2:null;return{type:"runProperties",styleId:t.styleId,styleName:t.name,verticalAlignment:e.firstOrEmpty("w:vertAlign").attributes["w:val"],font:e.firstOrEmpty("w:rFonts").attributes["w:ascii"],fontSize:i,isBold:D(e.first("w:b")),isUnderline:E(e.first("w:u")),isItalic:D(e.first("w:i")),isStrikethrough:D(e.first("w:strike")),isAllCaps:D(e.first("w:caps")),isSmallCaps:D(e.first("w:smallCaps")),highlight:(n=e.firstOrEmpty("w:highlight").attributes["w:val"],n&&"none"!==n?n:null)}}))}(e.firstOrEmpty("w:rPr")),C(e.children),(function(e,n){var r,s=(r=i.last(t.filter((function(e){return"hyperlink"===e.type}))))?r.options:null;return null!==s&&(n=[new o.Hyperlink(n,s)]),new o.Run(n,e)}))},"w:fldChar":function(e){var r=e.attributes["w:fldCharType"];if("begin"===r)t.push(R),n=[];else if("end"===r)t.pop();else if("separate"===r){var i=function(e){var t=/\s*HYPERLINK "(.*)"/.exec(e);if(t)return{href:t[1]};var n=/\s*HYPERLINK\s+\\l\s+"(.*)"/.exec(e);return n?{anchor:n[1]}:null}(n.join("")),o=null===i?R:{type:"hyperlink",options:i};t.pop(),t.push(o)}return p()},"w:instrText":function(e){return n.push(e.text()),p()},"w:t":function(e){return m(new o.Text(e.text()))},"w:tab":function(e){return m(new o.Tab)},"w:noBreakHyphen":function(){return m(new o.Text("‑"))},"w:softHyphen":function(e){return m(new o.Text("­"))},"w:sym":function(e){var t=e.attributes["w:font"],n=e.attributes["w:char"],i=r.hex(t,n);return null==i&&/^F0..$/.test(n)&&(i=r.hex(t,n.substring(2))),null==i?f([a("A w:sym element with an unsupported character was ignored: char "+n+" in font "+t)]):m(new o.Text(i.string))},"w:hyperlink":function(e){var t=e.attributes["r:id"],n=e.attributes["w:anchor"];return C(e.children).map((function(r){function s(t){var n=e.attributes["w:tgtFrame"]||null;return new o.Hyperlink(r,i.extend({targetFrame:n},t))}if(t){var a=c.findTargetByRelationshipId(t);return n&&(a=l.replaceFragment(a,n)),s({href:a})}return n?s({anchor:n}):r}))},"w:tbl":function(e){var t=function(e){return function(e){return k(e,"w:tblStyle","Table",S.findTableStyleById)}(e).map((function(e){return{styleId:e.styleId,styleName:e.name}}))}(e.firstOrEmpty("w:tblPr"));return C(e.children).flatMap(I).flatMap((function(e){return t.map((function(t){return o.Table(e,t)}))}))},"w:tr":function(e){var t=!!e.firstOrEmpty("w:trPr").first("w:tblHeader");return C(e.children).map((function(e){return o.TableRow(e,{isHeader:t})}))},"w:tc":function(e){return C(e.children).map((function(t){var n=e.firstOrEmpty("w:tcPr"),r=n.firstOrEmpty("w:gridSpan").attributes["w:val"],i=r?parseInt(r,10):1,s=o.TableCell(t,{colSpan:i});return s._vMerge=function(e){var t=e.first("w:vMerge");if(t){var n=t.attributes["w:val"];return"continue"===n||!n}return null}(n),s}))},"w:footnoteReference":O("footnote"),"w:endnoteReference":O("endnote"),"w:commentReference":function(e){return m(o.commentReference({commentId:e.attributes["w:id"]}))},"w:br":function(e){var t=e.attributes["w:type"];return null==t||"textWrapping"===t?m(o.lineBreak):"page"===t?m(o.pageBreak):"column"===t?m(o.columnBreak):f([a("Unsupported break type: "+t)])},"w:bookmarkStart":function(e){var t=e.attributes["w:name"];return"_GoBack"===t?p():m(new o.BookmarkStart({name:t}))},"mc:AlternateContent":function(e){return L(e.first("mc:Fallback"))},"w:sdt":function(e){return C(e.firstOrEmpty("w:sdtContent").children)},"w:ins":L,"w:object":L,"w:smartTag":L,"w:drawing":L,"w:pict":function(e){return L(e).toExtra()},"v:roundrect":L,"v:shape":L,"v:textbox":L,"w:txbxContent":L,"wp:inline":P,"wp:anchor":P,"v:imagedata":function(e){var t=e.attributes["r:id"];return t?j(H(t),e.attributes["o:title"]):f([a("A v:imagedata element without a relationship ID was ignored")])},"v:group":L,"v:rect":L};return{readXmlElement:M,readXmlElements:C};function I(e){if(i.any(e,(function(e){return e.type!==o.types.tableRow})))return g(e,[a("unexpected non-row element in table, cell merging may be incorrect")]);if(i.any(e,(function(e){return i.any(e.children,(function(e){return e.type!==o.types.tableCell}))})))return g(e,[a("unexpected non-cell element in table row, cell merging may be incorrect")]);var t={};return e.forEach((function(e){var n=0;e.children.forEach((function(e){e._vMerge&&t[n]?t[n].rowSpan++:(t[n]=e,e._vMerge=!1),n+=e.colSpan}))})),e.forEach((function(e){e.children=e.children.filter((function(e){return!e._vMerge})),e.children.forEach((function(e){delete e._vMerge}))})),m(e)}function P(e){return b(e.getElementsByTagName("a:graphic").getElementsByTagName("a:graphicData").getElementsByTagName("pic:pic").getElementsByTagName("pic:blipFill").getElementsByTagName("a:blip").map(N.bind(null,e)))}function N(e,t){var n,r=e.first("wp:docPr").attributes,i=null==(n=r.descr)||/^\s*$/.test(n)?r.title:r.descr,o=function(e){var t=e.attributes["r:embed"],n=e.attributes["r:link"];if(t)return H(t);if(n){var r=c.findTargetByRelationshipId(n);return{path:r,read:w.read.bind(w,r)}}return null}(t);return null===o?f([a("Could not find image file for a:blip element")]):j(o,i)}function H(e){var t=l.uriToZipEntryName("word",c.findTargetByRelationshipId(e));return{path:t,read:v.read.bind(v,t)}}function j(e,t){var n=_.findContentType(e.path);return g(o.Image({readImage:e.read,altText:t,contentType:n}),d[n]?[]:a("Image of type "+n+" is unlikely to display in web browsers"))}}function u(e,t,n){var r=t.firstOrEmpty("w:ilvl").attributes["w:val"],i=t.firstOrEmpty("w:numId").attributes["w:val"];if(void 0!==r&&void 0!==i)return n.findLevel(i,r);if(null!=e){var o=n.findLevelByParagraphStyleId(e);if(null!=o)return o}return null}var d={"image/png":!0,"image/gif":!0,"image/jpeg":!0,"image/svg+xml":!0,"image/tiff":!0},h={"office-word:wrap":!0,"v:shadow":!0,"v:shapetype":!0,"w:annotationRef":!0,"w:bookmarkEnd":!0,"w:sectPr":!0,"w:proofErr":!0,"w:lastRenderedPageBreak":!0,"w:commentRangeStart":!0,"w:commentRangeEnd":!0,"w:del":!0,"w:footnoteRef":!0,"w:endnoteRef":!0,"w:pPr":!0,"w:rPr":!0,"w:tblPr":!0,"w:tblGrid":!0,"w:trPr":!0,"w:tcPr":!0};function f(e){return new y(null,null,e)}function p(){return new y(null)}function m(e){return new y(e)}function g(e,t){return new y(e,null,t)}function y(e,t,n){this.value=e||[],this.extra=t||[],this._result=new s({element:this.value,extra:t},n),this.messages=this._result.messages}function b(e){var t=s.combine(i.pluck(e,"_result"));return new y(i.flatten(i.pluck(t.value,"element")),i.filter(i.flatten(i.pluck(t.value,"extra")),v),t.messages)}function _(e,t){return i.flatten([e,t])}function v(e){return e}y.prototype.toExtra=function(){return new y(null,_(this.extra,this.value),this.messages)},y.prototype.insertExtra=function(){var e=this.extra;return e&&e.length?new y(_(this.value,e),null,this.messages):this},y.prototype.map=function(e){var t=this._result.map((function(t){return e(t.element)}));return new y(t.value,this.extra,t.messages)},y.prototype.flatMap=function(e){var t=this._result.flatMap((function(t){return e(t.element)._result}));return new y(t.value.element,_(this.extra,t.value.extra),t.messages)},y.map=function(e,t,n){return new y(n(e.value,t.value),_(e.extra,t.extra),e.messages.concat(t.messages))}},{"../documents":4,"../results":25,"./uris":16,"dingbat-to-unicode":85,underscore:102}],6:[function(e,t,n){var r=e("../documents"),i=e("../results").Result;n.createCommentsReader=function(e){function t(t){var n=t.attributes["w:id"];function i(e){return(t.attributes[e]||"").trim()||null}return e.readXmlElements(t.children).map((function(e){return r.comment({commentId:n,body:e,authorName:i("w:author"),authorInitials:i("w:initials")})}))}return function(e){return i.combine(e.getElementsByTagName("w:comment").map(t))}}},{"../documents":4,"../results":25}],7:[function(e,t,n){n.readContentTypesFromXml=function(e){var t={},n={};return e.children.forEach((function(e){if("content-types:Default"===e.name&&(t[e.attributes.Extension]=e.attributes.ContentType),"content-types:Override"===e.name){var r=e.attributes.PartName;"/"===r.charAt(0)&&(r=r.substring(1)),n[r]=e.attributes.ContentType}})),i(n,t)};var r={png:"png",gif:"gif",jpeg:"jpeg",jpg:"jpeg",tif:"tiff",tiff:"tiff",bmp:"bmp"};function i(e,t){return{findContentType:function(n){var i=e[n];if(i)return i;var o=n.split("."),s=o[o.length-1];if(t.hasOwnProperty(s))return t[s];var a=r[s.toLowerCase()];return a?"image/"+a:null}}}n.defaultContentTypes=i({},{})},{}],8:[function(e,t,n){n.DocumentXmlReader=function(e){var t=e.bodyReader;return{convertXmlToDocument:function(n){var o=n.first("w:body");if(null==o)throw new Error("Could not find the body element: are you sure this is a docx file?");var s=t.readXmlElements(o.children).map((function(t){return new r.Document(t,{notes:e.notes,comments:e.comments})}));return new i(s.value,s.messages)}}};var r=e("../documents"),i=e("../results").Result},{"../documents":4,"../results":25}],9:[function(e,t,n){n.read=function(e,t){return t=t||{},r.props({contentTypes:x(e),partPaths:y(e),docxFile:e,files:t.path?g.relativeToFile(t.path):new g(null)}).also((function(t){return{styles:(n=e,r=t.partPaths.styles,_({filename:r,readElement:f.readStylesXml,defaultValue:f.defaultStyles})(n))};var n,r})).also((function(t){return{numbering:(n=e,r=t.partPaths.numbering,i=t.styles,_({filename:r,readElement:function(e){return h.readNumberingXml(e,{styles:i})},defaultValue:h.defaultNumbering})(n))};var n,r,i})).also((function(e){return{footnotes:v(e.partPaths.footnotes,e,(function(e,t){return t?p.createFootnotesReader(e)(t):new o([])})),endnotes:v(e.partPaths.endnotes,e,(function(e,t){return t?p.createEndnotesReader(e)(t):new o([])})),comments:v(e.partPaths.comments,e,(function(e,t){return t?m.createCommentsReader(e)(t):new o([])}))}})).also((function(e){return{notes:e.footnotes.flatMap((function(t){return e.endnotes.map((function(e){return new i.Notes(t.concat(e))}))}))}})).then((function(e){return v(e.partPaths.mainDocument,e,(function(t,n){return e.notes.flatMap((function(r){return e.comments.flatMap((function(e){return new c({bodyReader:t,notes:r,comments:e}).convertXmlToDocument(n)}))}))}))}))},n._findPartPaths=y;var r=e("../promises"),i=e("../documents"),o=e("../results").Result,s=e("../zipfile"),a=e("./office-xml-reader").readXmlFromZipFile,l=e("./body-reader").createBodyReader,c=e("./document-xml-reader").DocumentXmlReader,u=e("./relationships-reader"),d=e("./content-types-reader"),h=e("./numbering-xml"),f=e("./styles-reader"),p=e("./notes-reader"),m=e("./comments-reader"),g=e("./files").Files;function y(e){return S(e).then((function(t){var n=b({docxFile:e,relationships:t,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",basePath:"",fallbackPath:"word/document.xml"});if(!e.exists(n))throw new Error("Could not find main document part. Are you sure this is a valid .docx file?");return _({filename:w(n),readElement:u.readRelationships,defaultValue:u.defaultValue})(e).then((function(t){function r(r){return b({docxFile:e,relationships:t,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/"+r,basePath:s.splitPath(n).dirname,fallbackPath:"word/"+r+".xml"})}return{mainDocument:n,comments:r("comments"),endnotes:r("endnotes"),footnotes:r("footnotes"),numbering:r("numbering"),styles:r("styles")}}))}))}function b(e){var t=e.docxFile,n=e.relationships,r=e.relationshipType,i=e.basePath,o=e.fallbackPath,a=n.findTargetsByType(r).map((function(e){return"/","/"===(t=s.joinPath(i,e)).substring(0,1)?t.substring(1):t;var t})).filter((function(e){return t.exists(e)}));return 0===a.length?o:a[0]}function _(e){return function(t){return a(t,e.filename).then((function(t){return t?e.readElement(t):e.defaultValue}))}}function v(e,t,n){return _({filename:w(e),readElement:u.readRelationships,defaultValue:u.defaultValue})(t.docxFile).then((function(r){var i=new l({relationships:r,contentTypes:t.contentTypes,docxFile:t.docxFile,numbering:t.numbering,styles:t.styles,files:t.files});return a(t.docxFile,e).then((function(e){return n(i,e)}))}))}function w(e){var t=s.splitPath(e);return s.joinPath(t.dirname,"_rels",t.basename+".rels")}var x=_({filename:"[Content_Types].xml",readElement:d.readContentTypesFromXml,defaultValue:d.defaultContentTypes}),S=_({filename:"_rels/.rels",readElement:u.readRelationships,defaultValue:u.defaultValue})},{"../documents":4,"../promises":23,"../results":25,"../zipfile":40,"./body-reader":5,"./comments-reader":6,"./content-types-reader":7,"./document-xml-reader":8,"./files":1,"./notes-reader":10,"./numbering-xml":11,"./office-xml-reader":12,"./relationships-reader":13,"./styles-reader":15}],10:[function(e,t,n){var r=e("../documents"),i=e("../results").Result;function o(e,t){function n(e){var t=e.attributes["w:type"];return"continuationSeparator"!==t&&"separator"!==t}function o(n){var i=n.attributes["w:id"];return t.readXmlElements(n.children).map((function(t){return r.Note({noteType:e,noteId:i,body:t})}))}return function(t){return i.combine(t.getElementsByTagName("w:"+e).filter(n).map(o))}}n.createFootnotesReader=o.bind(this,"footnote"),n.createEndnotesReader=o.bind(this,"endnote")},{"../documents":4,"../results":25}],11:[function(e,t,n){var r=e("underscore");function i(e,t,n){var i=r.flatten(r.values(t).map((function(e){return r.values(e.levels)}))),o=r.indexBy(i.filter((function(e){return null!=e.paragraphStyleId})),"paragraphStyleId");return{findLevel:function r(i,o){var s=e[i];if(s){var a=t[s.abstractNumId];return a?null==a.numStyleLink?t[s.abstractNumId].levels[o]:r(n.findNumberingStyleById(a.numStyleLink).numId,o):null}return null},findLevelByParagraphStyleId:function(e){return o[e]||null}}}n.readNumberingXml=function(e,t){if(!t||!t.styles)throw new Error("styles is missing");var n=function(e){var t={};return e.getElementsByTagName("w:abstractNum").forEach((function(e){var n=e.attributes["w:abstractNumId"];t[n]=function(e){var t={};e.getElementsByTagName("w:lvl").forEach((function(e){var n=e.attributes["w:ilvl"],r=e.firstOrEmpty("w:numFmt").attributes["w:val"],i=e.firstOrEmpty("w:pStyle").attributes["w:val"];t[n]={isOrdered:"bullet"!==r,level:n,paragraphStyleId:i}}));var n=e.firstOrEmpty("w:numStyleLink").attributes["w:val"];return{levels:t,numStyleLink:n}}(e)})),t}(e);return new i(function(e){var t={};return e.getElementsByTagName("w:num").forEach((function(e){var n=e.attributes["w:numId"],r=e.first("w:abstractNumId").attributes["w:val"];t[n]={abstractNumId:r}})),t}(e),n,t.styles)},n.Numbering=i,n.defaultNumbering=new i({},{})},{underscore:102}],12:[function(e,t,n){var r=e("underscore"),i=e("../promises"),o=e("../xml");n.read=a,n.readXmlFromZipFile=function(e,t){return e.exists(t)?e.read(t,"utf-8").then(l).then(a):i.resolve(null)};var s={"http://schemas.openxmlformats.org/wordprocessingml/2006/main":"w","http://schemas.openxmlformats.org/officeDocument/2006/relationships":"r","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing":"wp","http://schemas.openxmlformats.org/drawingml/2006/main":"a","http://schemas.openxmlformats.org/drawingml/2006/picture":"pic","http://purl.oclc.org/ooxml/wordprocessingml/main":"w","http://purl.oclc.org/ooxml/officeDocument/relationships":"r","http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing":"wp","http://purl.oclc.org/ooxml/drawingml/main":"a","http://purl.oclc.org/ooxml/drawingml/picture":"pic","http://schemas.openxmlformats.org/package/2006/content-types":"content-types","http://schemas.openxmlformats.org/package/2006/relationships":"relationships","http://schemas.openxmlformats.org/markup-compatibility/2006":"mc","urn:schemas-microsoft-com:vml":"v","urn:schemas-microsoft-com:office:word":"office-word"};function a(e){return o.readString(e,s).then((function(e){return c(e)[0]}))}function l(e){return e.replace(/^\uFEFF/g,"")}function c(e){return"element"===e.type?"mc:AlternateContent"===e.name?e.first("mc:Fallback").children:(e.children=r.flatten(e.children.map(c,!0)),[e]):[e]}},{"../promises":23,"../xml":35,underscore:102}],13:[function(e,t,n){function r(e){var t={};e.forEach((function(e){t[e.relationshipId]=e.target}));var n={};return e.forEach((function(e){n[e.type]||(n[e.type]=[]),n[e.type].push(e.target)})),{findTargetByRelationshipId:function(e){return t[e]},findTargetsByType:function(e){return n[e]||[]}}}n.readRelationships=function(e){var t=[];return e.children.forEach((function(e){if("relationships:Relationship"===e.name){var n={relationshipId:e.attributes.Id,target:e.attributes.Target,type:e.attributes.Type};t.push(n)}})),new r(t)},n.defaultValue=new r([]),n.Relationships=r},{}],14:[function(e,t,n){var r=e("underscore"),i=e("../promises"),o=e("../xml");n.writeStyleMap=function(e,t){return e.write(a,t),function(e){var t="word/_rels/document.xml.rels",n="http://schemas.openxmlformats.org/package/2006/relationships",r="{"+n+"}Relationship";return e.read(t,"utf8").then(o.readString).then((function(i){c(i.children,r,"Id",{Id:"rMammothStyleMap",Type:s,Target:l});var a={"":n};return e.write(t,o.writeString(i,a))}))}(e).then((function(){return function(e){var t="[Content_Types].xml",n="http://schemas.openxmlformats.org/package/2006/content-types",r="{"+n+"}Override";return e.read(t,"utf8").then(o.readString).then((function(i){c(i.children,r,"PartName",{PartName:l,ContentType:"text/prs.mammoth.style-map"});var s={"":n};return e.write(t,o.writeString(i,s))}))}(e)}))},n.readStyleMap=function(e){return e.exists(a)?e.read(a,"utf8"):i.resolve(null)};var s="http://schemas.zwobble.org/mammoth/style-map",a="mammoth/style-map",l="/"+a;function c(e,t,n,i){var s=r.find(e,(function(e){return e.name===t&&e.attributes[n]===i[n]}));s?s.attributes=i:e.push(o.element(t,i))}},{"../promises":23,"../xml":35,underscore:102}],15:[function(e,t,n){function r(e,t,n,r){return{findParagraphStyleById:function(t){return e[t]},findCharacterStyleById:function(e){return t[e]},findTableStyleById:function(e){return n[e]},findNumberingStyleById:function(e){return r[e]}}}n.readStylesXml=function(e){var t={},n={},i={},o={},s={paragraph:t,character:n,table:i};return e.getElementsByTagName("w:style").forEach((function(e){var t=function(e){var t=e.attributes["w:type"],n=e.attributes["w:styleId"],r=function(e){var t=e.first("w:name");return t?t.attributes["w:val"]:null}(e);return{type:t,styleId:n,name:r}}(e);if("numbering"===t.type)o[t.styleId]=function(e){return{numId:e.firstOrEmpty("w:pPr").firstOrEmpty("w:numPr").firstOrEmpty("w:numId").attributes["w:val"]}}(e);else{var n=s[t.type];n&&(n[t.styleId]=t)}})),new r(t,n,i,o)},n.Styles=r,n.defaultStyles=new r({},{}),r.EMPTY=new r({},{},{},{})},{}],16:[function(e,t,n){n.uriToZipEntryName=function(e,t){return"/"===t.charAt(0)?t.substr(1):e+"/"+t},n.replaceFragment=function(e,t){var n=e.indexOf("#");return-1!==n&&(e=e.substring(0,n)),e+"#"+t}},{}],17:[function(e,t,n){var r=e("../styles/html-paths");function i(e,t){return{type:"element",tag:e,children:t||[]}}n.freshElement=function(e,t,n){return i(r.element(e,t,{fresh:!0}),n)},n.nonFreshElement=function(e,t,n){return i(r.element(e,t,{fresh:!1}),n)},n.elementWithTag=i,n.text=function(e){return{type:"text",value:e}},n.forceWrite={type:"forceWrite"};var o={br:!0,hr:!0,img:!0};n.isVoidElement=function(e){return 0===e.children.length&&o[e.tag.tagName]}},{"../styles/html-paths":28}],18:[function(e,t,n){var r=e("./ast");function i(e,t){t.forEach((function(t){!function(e,t){o[t.type](e,t)}(e,t)}))}n.freshElement=r.freshElement,n.nonFreshElement=r.nonFreshElement,n.elementWithTag=r.elementWithTag,n.text=r.text,n.forceWrite=r.forceWrite,n.simplify=e("./simplify");var o={element:function(e,t){r.isVoidElement(t)?e.selfClosing(t.tag.tagName,t.tag.attributes):(e.open(t.tag.tagName,t.tag.attributes),i(e,t.children),e.close(t.tag.tagName))},text:function(e,t){e.text(t.value)},forceWrite:function(){}};n.write=i},{"./ast":17,"./simplify":19}],19:[function(e,t,n){var r=e("underscore"),i=e("./ast");function o(e){var t=[];return e.map(s).forEach((function(e){c(t,e)})),t}function s(e){return a[e.type](e)}var a={element:function(e){return i.elementWithTag(e.tag,o(e.children))},text:l,forceWrite:l};function l(e){return e}function c(e,t){var n=e[e.length-1];"element"===t.type&&!t.tag.fresh&&n&&"element"===n.type&&t.tag.matchesElement(n.tag)?(t.tag.separator&&c(n.children,i.text(t.tag.separator)),t.children.forEach((function(e){c(n.children,e)}))):e.push(t)}function u(e){return t=e,n=function(e){return d[e.type](e)},r.flatten(r.map(t,n),!0);var t,n}var d={element:function(e){var t=u(e.children);return 0!==t.length||i.isVoidElement(e)?[i.elementWithTag(e.tag,t)]:[]},text:function(e){return 0===e.value.length?[]:[e]},forceWrite:function(e){return[e]}};t.exports=function(e){return o(u(e))}},{"./ast":17,underscore:102}],20:[function(e,t,n){var r=e("underscore"),i=e("./promises"),o=e("./html");function s(e){return function(t,n){return i.when(e(t)).then((function(e){var n={};return t.altText&&(n.alt=t.altText),r.extend(n,e),[o.freshElement("img",n)]}))}}n.imgElement=s,n.inline=n.imgElement,n.dataUri=s((function(e){return e.readAsBase64String().then((function(t){return{src:"data:"+e.contentType+";base64,"+t}}))}))},{"./html":18,"./promises":23,underscore:102}],21:[function(e,t,n){(function(t){var r=e("underscore"),i=e("./docx/docx-reader"),o=e("./docx/style-map"),s=e("./document-to-html").DocumentConverter,a=e("./raw-text").convertElementToRawText,l=e("./style-reader").readStyle,c=e("./options-reader").readOptions,u=e("./unzip"),d=e("./results").Result;function h(e,t){return t=c(t),u.openZip(e).tap((function(e){return o.readStyleMap(e).then((function(e){t.embeddedStyleMap=e}))})).then((function(n){return i.read(n,e).then((function(e){return e.map(t.transformDocument)})).then((function(e){return function(e,t){var n,i=(n=t.readStyleMap(),d.combine((n||[]).map(l)).map((function(e){return e.filter((function(e){return!!e}))}))),o=r.extend({},t,{styleMap:i.value}),a=new s(o);return e.flatMapThen((function(e){return i.flatMapThen((function(t){return a.convertToHtml(e)}))}))}(e,t)}))}))}n.convertToHtml=function(e,t){return h(e,t)},n.convertToMarkdown=function(e,t){var n=Object.create(t||{});return n.outputFormat="markdown",h(e,n)},n.convert=h,n.extractRawText=function(e){return u.openZip(e).then(i.read).then((function(e){return e.map(a)}))},n.images=e("./images"),n.transforms=e("./transforms"),n.underline=e("./underline"),n.embedStyleMap=function(e,n){return u.openZip(e).tap((function(e){return o.writeStyleMap(e,n)})).then((function(e){return e.toArrayBuffer()})).then((function(e){return{toArrayBuffer:function(){return e},toBuffer:function(){return t.from(e)}}}))},n.readEmbeddedStyleMap=function(e){return u.openZip(e).then(o.readStyleMap)},n.styleMapping=function(){throw new Error("Use a raw string instead of mammoth.styleMapping e.g. \"p[style-name='Title'] => h1\" instead of mammoth.styleMapping(\"p[style-name='Title'] => h1\")")}}).call(this,e("buffer").Buffer)},{"./document-to-html":3,"./docx/docx-reader":9,"./docx/style-map":14,"./images":20,"./options-reader":22,"./raw-text":24,"./results":25,"./style-reader":26,"./transforms":30,"./underline":31,"./unzip":2,buffer:83,underscore:102}],22:[function(e,t,n){n.readOptions=function(e){return e=e||{},r.extend({},o,e,{customStyleMap:s(e.styleMap),readStyleMap:function(){var e=this.customStyleMap;return this.includeEmbeddedStyleMap&&(e=e.concat(s(this.embeddedStyleMap))),this.includeDefaultStyleMap&&(e=e.concat(i)),e}})};var r=e("underscore"),i=n._defaultStyleMap=["p.Heading1 => h1:fresh","p.Heading2 => h2:fresh","p.Heading3 => h3:fresh","p.Heading4 => h4:fresh","p.Heading5 => h5:fresh","p.Heading6 => h6:fresh","p[style-name='Heading 1'] => h1:fresh","p[style-name='Heading 2'] => h2:fresh","p[style-name='Heading 3'] => h3:fresh","p[style-name='Heading 4'] => h4:fresh","p[style-name='Heading 5'] => h5:fresh","p[style-name='Heading 6'] => h6:fresh","p[style-name='heading 1'] => h1:fresh","p[style-name='heading 2'] => h2:fresh","p[style-name='heading 3'] => h3:fresh","p[style-name='heading 4'] => h4:fresh","p[style-name='heading 5'] => h5:fresh","p[style-name='heading 6'] => h6:fresh","r[style-name='Strong'] => strong","p[style-name='footnote text'] => p:fresh","r[style-name='footnote reference'] =>","p[style-name='endnote text'] => p:fresh","r[style-name='endnote reference'] =>","p[style-name='annotation text'] => p:fresh","r[style-name='annotation reference'] =>","p[style-name='Footnote'] => p:fresh","r[style-name='Footnote anchor'] =>","p[style-name='Endnote'] => p:fresh","r[style-name='Endnote anchor'] =>","p:unordered-list(1) => ul > li:fresh","p:unordered-list(2) => ul|ol > li > ul > li:fresh","p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:ordered-list(1) => ol > li:fresh","p:ordered-list(2) => ul|ol > li > ol > li:fresh","p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","r[style-name='Hyperlink'] =>","p[style-name='Normal'] => p:fresh"],o=n._standardOptions={transformDocument:function(e){return e},includeDefaultStyleMap:!0,includeEmbeddedStyleMap:!0};function s(e){return e?r.isString(e)?e.split("\n").map((function(e){return e.trim()})).filter((function(e){return""!==e&&"#"!==e.charAt(0)})):e:[]}},{underscore:102}],23:[function(e,t,n){var r=e("underscore"),i=e("bluebird/js/release/promise")();n.defer=function(){var e,t,n=new i.Promise((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}},n.when=i.resolve,n.resolve=i.resolve,n.all=i.all,n.props=i.props,n.reject=i.reject,n.promisify=i.promisify,n.mapSeries=i.mapSeries,n.attempt=i.attempt,n.nfcall=function(e){var t=Array.prototype.slice.call(arguments,1);return i.promisify(e).apply(null,t)},i.prototype.fail=i.prototype.caught,i.prototype.also=function(e){return this.then((function(t){var n=r.extend({},t,e(t));return i.props(n)}))}},{"bluebird/js/release/promise":68,underscore:102}],24:[function(e,t,n){var r=e("./documents");n.convertElementToRawText=function e(t){if("text"===t.type)return t.value;if(t.type===r.types.tab)return"\t";var n="paragraph"===t.type?"\n\n":"";return(t.children||[]).map(e).join("")+n}},{"./documents":4}],25:[function(e,t,n){var r=e("underscore");function i(e,t){this.value=e,this.messages=t||[]}function o(e){var t=[];return r.flatten(r.pluck(e,"messages"),!0).forEach((function(e){(function(e,t){return void 0!==r.find(e,s.bind(null,t))})(t,e)||t.push(e)})),t}function s(e,t){return e.type===t.type&&e.message===t.message}n.Result=i,n.success=function(e){return new i(e,[])},n.warning=function(e){return{type:"warning",message:e}},n.error=function(e){return{type:"error",message:e.message,error:e}},i.prototype.map=function(e){return new i(e(this.value),this.messages)},i.prototype.flatMap=function(e){var t=e(this.value);return new i(t.value,o([this,t]))},i.prototype.flatMapThen=function(e){var t=this;return e(this.value).then((function(e){return new i(e.value,o([t,e]))}))},i.combine=function(e){return new i(r.flatten(r.pluck(e,"value")),o(e))}},{underscore:102}],26:[function(e,t,n){var r=e("underscore"),i=e("lop"),o=e("./styles/document-matchers"),s=e("./styles/html-paths"),a=e("./styles/parser/tokeniser").tokenise,l=e("./results");function c(){var e=i.rules.sequence,t=function(e,t){return i.rules.then(i.rules.token("identifier",e),(function(){return t}))},n=t("p",o.paragraph),s=t("r",o.run),a=i.rules.firstOf("p or r or table",n,s),l=i.rules.sequence(i.rules.tokenOfType("dot"),i.rules.sequence.cut(),i.rules.sequence.capture(d)).map((function(e){return{styleId:e}})),c=i.rules.firstOf("style name matcher",i.rules.then(i.rules.sequence(i.rules.tokenOfType("equals"),i.rules.sequence.cut(),i.rules.sequence.capture(f)).head(),(function(e){return{styleName:o.equalTo(e)}})),i.rules.then(i.rules.sequence(i.rules.tokenOfType("startsWith"),i.rules.sequence.cut(),i.rules.sequence.capture(f)).head(),(function(e){return{styleName:o.startsWith(e)}}))),u=i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.token("identifier","style-name"),i.rules.sequence.capture(c),i.rules.tokenOfType("close-square-bracket")).head(),p=i.rules.firstOf("list type",t("ordered-list",{isOrdered:!0}),t("unordered-list",{isOrdered:!1})),m=e(i.rules.tokenOfType("colon"),e.capture(p),e.cut(),i.rules.tokenOfType("open-paren"),e.capture(h),i.rules.tokenOfType("close-paren")).map((function(e,t){return{list:{isOrdered:e.isOrdered,levelIndex:t-1}}}));function g(e){var t=i.rules.firstOf.apply(i.rules.firstOf,["matcher suffix"].concat(e)),n=i.rules.zeroOrMore(t);return i.rules.then(n,(function(e){var t={};return e.forEach((function(e){r.extend(t,e)})),t}))}var y=e(e.capture(a),e.capture(g([l,u,m]))).map((function(e,t){return e(t)})),b=e(i.rules.token("identifier","table"),e.capture(g([l,u]))).map((function(e){return o.table(e)})),_=t("b",o.bold),v=t("i",o.italic),w=t("u",o.underline),x=t("strike",o.strikethrough),S=t("all-caps",o.allCaps),C=t("small-caps",o.smallCaps),M=e(i.rules.token("identifier","highlight"),i.rules.sequence.capture(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.token("identifier","color"),i.rules.tokenOfType("equals"),i.rules.sequence.capture(f),i.rules.tokenOfType("close-square-bracket")).head()))).map((function(e){return o.highlight({color:e.valueOrElse(void 0)})})),T=t("comment-reference",o.commentReference),E=e(i.rules.token("identifier","br"),e.cut(),i.rules.tokenOfType("open-square-bracket"),i.rules.token("identifier","type"),i.rules.tokenOfType("equals"),e.capture(f),i.rules.tokenOfType("close-square-bracket")).map((function(e){switch(e){case"line":return o.lineBreak;case"page":return o.pageBreak;case"column":return o.columnBreak}}));return i.rules.firstOf("element type",y,b,_,v,w,x,S,C,M,T,E)}function u(){var e=i.rules.sequence.capture,t=i.rules.tokenOfType("whitespace"),n=i.rules.then(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("colon"),i.rules.token("identifier","fresh"))),(function(e){return e.map((function(){return!0})).valueOrElse(!1)})),r=i.rules.then(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("colon"),i.rules.token("identifier","separator"),i.rules.tokenOfType("open-paren"),e(f),i.rules.tokenOfType("close-paren")).head()),(function(e){return e.valueOrElse("")})),o=i.rules.oneOrMoreWithSeparator(d,i.rules.tokenOfType("choice")),a=i.rules.sequence(e(o),e(i.rules.zeroOrMore(b)),e(n),e(r)).map((function(e,t,n,r){var i={},o={};return t.forEach((function(e){e.append&&i[e.name]?i[e.name]+=" "+e.value:i[e.name]=e.value})),n&&(o.fresh=!0),r&&(o.separator=r),s.element(e,i,o)}));return i.rules.firstOf("html path",i.rules.then(i.rules.tokenOfType("bang"),(function(){return s.ignore})),i.rules.then(i.rules.zeroOrMoreWithSeparator(a,i.rules.sequence(t,i.rules.tokenOfType("gt"),t)),s.elements))}n.readHtmlPath=function(e){return _(u(),e)},n.readDocumentMatcher=function(e){return _(c(),e)},n.readStyle=function(e){return _(x,e)};var d=i.rules.then(i.rules.tokenOfType("identifier"),m),h=i.rules.tokenOfType("integer"),f=i.rules.then(i.rules.tokenOfType("string"),m),p={n:"\n",r:"\r",t:"\t"};function m(e){return e.replace(/\\(.)/g,(function(e,t){return p[t]||t}))}var g=i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.sequence.capture(d),i.rules.tokenOfType("equals"),i.rules.sequence.capture(f),i.rules.tokenOfType("close-square-bracket")).map((function(e,t){return{name:e,value:t,append:!1}})),y=i.rules.sequence(i.rules.tokenOfType("dot"),i.rules.sequence.cut(),i.rules.sequence.capture(d)).map((function(e){return{name:"class",value:e,append:!0}})),b=i.rules.firstOf("attribute or class",g,y);function _(e,t){var n=a(t),r=i.Parser().parseTokens(e,n);return r.isSuccess()?l.success(r.value()):new l.Result(null,[l.warning(v(t,r))])}function v(e,t){return"Did not understand this style mapping, so ignored it: "+e+"\n"+t.errors().map(w).join("\n")}function w(e){return"Error was at character number "+e.characterNumber()+": Expected "+e.expected+" but got "+e.actual}var x=i.rules.sequence(i.rules.sequence.capture(c()),i.rules.tokenOfType("whitespace"),i.rules.tokenOfType("arrow"),i.rules.sequence.capture(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("whitespace"),i.rules.sequence.capture(u())).head())),i.rules.tokenOfType("end")).map((function(e,t){return{from:e,to:t.valueOrElse(s.empty)}}))},{"./results":25,"./styles/document-matchers":27,"./styles/html-paths":28,"./styles/parser/tokeniser":29,lop:89,underscore:102}],27:[function(e,t,n){function r(e,t){t=t||{},this._elementType=e,this._styleId=t.styleId,this._styleName=t.styleName,t.list&&(this._listIndex=t.list.levelIndex,this._listIsOrdered=t.list.isOrdered)}function i(e){e=e||{},this._color=e.color}function o(e){e=e||{},this._breakType=e.breakType}function s(e,t){return e.toUpperCase()===t.toUpperCase()}function a(e,t){return 0===t.toUpperCase().indexOf(e.toUpperCase())}n.paragraph=function(e){return new r("paragraph",e)},n.run=function(e){return new r("run",e)},n.table=function(e){return new r("table",e)},n.bold=new r("bold"),n.italic=new r("italic"),n.underline=new r("underline"),n.strikethrough=new r("strikethrough"),n.allCaps=new r("allCaps"),n.smallCaps=new r("smallCaps"),n.highlight=function(e){return new i(e)},n.commentReference=new r("commentReference"),n.lineBreak=new o({breakType:"line"}),n.pageBreak=new o({breakType:"page"}),n.columnBreak=new o({breakType:"column"}),n.equalTo=function(e){return{operator:s,operand:e}},n.startsWith=function(e){return{operator:a,operand:e}},r.prototype.matches=function(e){return e.type===this._elementType&&(void 0===this._styleId||e.styleId===this._styleId)&&(void 0===this._styleName||e.styleName&&this._styleName.operator(this._styleName.operand,e.styleName))&&(void 0===this._listIndex||function(e,t,n){return e.numbering&&e.numbering.level==t&&e.numbering.isOrdered==n}(e,this._listIndex,this._listIsOrdered))&&(void 0===this._breakType||this._breakType===e.breakType)},i.prototype.matches=function(e){return"highlight"===e.type&&(void 0===this._color||e.color===this._color)},o.prototype.matches=function(e){return"break"===e.type&&(void 0===this._breakType||e.breakType===this._breakType)}},{}],28:[function(e,t,n){var r=e("underscore"),i=e("../html");function o(e){return new s(e.map((function(e){return r.isString(e)?a(e):e})))}function s(e){this._elements=e}function a(e,t,n){return new l(e,t,n=n||{})}function l(e,t,n){var i={};r.isArray(e)?(e.forEach((function(e){i[e]=!0})),e=e[0]):i[e]=!0,this.tagName=e,this.tagNames=i,this.attributes=t||{},this.fresh=n.fresh,this.separator=n.separator}n.topLevelElement=function(e,t){return o([a(e,t,{fresh:!0})])},n.elements=o,n.element=a,s.prototype.wrap=function(e){for(var t=e(),n=this._elements.length-1;n>=0;n--)t=this._elements[n].wrapNodes(t);return t},l.prototype.matchesElement=function(e){return this.tagNames[e.tagName]&&r.isEqual(this.attributes||{},e.attributes||{})},l.prototype.wrap=function(e){return this.wrapNodes(e())},l.prototype.wrapNodes=function(e){return[i.elementWithTag(this,e)]},n.empty=o([]),n.ignore={wrap:function(){return[]}}},{"../html":18,underscore:102}],29:[function(e,t,n){var r=e("lop").RegexTokeniser;n.tokenise=function(e){var t="(?:[a-zA-Z\\-_]|\\\\.)";return new r([{name:"identifier",regex:new RegExp("("+t+"(?:"+t+"|[0-9])*)")},{name:"dot",regex:/\./},{name:"colon",regex:/:/},{name:"gt",regex:/>/},{name:"whitespace",regex:/\s+/},{name:"arrow",regex:/=>/},{name:"equals",regex:/=/},{name:"startsWith",regex:/\^=/},{name:"open-paren",regex:/\(/},{name:"close-paren",regex:/\)/},{name:"open-square-bracket",regex:/\[/},{name:"close-square-bracket",regex:/\]/},{name:"string",regex:new RegExp(i+"'")},{name:"unterminated-string",regex:new RegExp(i)},{name:"integer",regex:/([0-9]+)/},{name:"choice",regex:/\|/},{name:"bang",regex:/(!)/}]).tokenise(e)};var i="'((?:\\\\.|[^'])*)"},{lop:89}],30:[function(e,t,n){var r=e("underscore");function i(e,t){return o((function(n){return n.type===e?t(n):n}))}function o(e){return function t(n){if(n.children){var i=r.map(n.children,t);n=r.extend(n,{children:i})}return e(n)}}function s(e){var t=[];return a(e,(function(e){t.push(e)})),t}function a(e,t){e.children&&e.children.forEach((function(e){a(e,t),t(e)}))}n.paragraph=function(e){return i("paragraph",e)},n.run=function(e){return i("run",e)},n._elements=o,n.getDescendantsOfType=function(e,t){return s(e).filter((function(e){return e.type===t}))},n.getDescendants=s},{underscore:102}],31:[function(e,t,n){var r=e("./styles/html-paths"),i=e("./html");n.element=function(e){return function(t){return i.elementWithTag(r.element(e),[t])}}},{"./html":18,"./styles/html-paths":28}],32:[function(e,t,n){var r=e("underscore");n.writer=function(e){return(e=e||{}).prettyPrint?function(){var e=0,t=" ",n=[],s=!0,a=!1,l=o();function c(){if(a=!1,!s&&(0===n.length||i[n[n.length-1]])&&!u()){l._append("\n");for(var r=0;r/g,">")}(e)+'"'})).join("")}return{asString:function(){return e.join("")},open:function(n,r){var i=t(r);e.push("<"+n+i+">")},close:function(t){e.push("")},text:function(t){e.push(function(e){return e.replace(/&/g,"&").replace(//g,">")}(t))},selfClosing:function(n,r){var i=t(r);e.push("<"+n+i+" />")},_append:function(t){e.push(t)}}}},{underscore:102}],33:[function(e,t,n){var r=e("./html-writer"),i=e("./markdown-writer");n.writer=function(e){return"markdown"===(e=e||{}).outputFormat?i.writer():r.writer(e)}},{"./html-writer":32,"./markdown-writer":34}],34:[function(e,t,n){var r=e("underscore");function i(e){return o(e,e)}function o(e,t){return function(){return{start:e,end:t}}}function s(e){return function(t,n){return{start:n?"\n":"",end:n?"":"\n",list:{isOrdered:e.isOrdered,indent:n?n.indent+1:0,count:0}}}}var a={p:o("","\n\n"),br:o(""," \n"),ul:s({isOrdered:!1}),ol:s({isOrdered:!0}),li:function(e,t,n){(t=t||{indent:0,isOrdered:!1,count:0}).count++,n.hasClosed=!1;var r=t.isOrdered?t.count+".":"-";return{start:l("\t",t.indent)+r+" ",end:function(){if(!n.hasClosed)return n.hasClosed=!0,"\n"}}},strong:i("__"),em:i("*"),a:function(e){var t=e.href||"";return t?{start:"[",end:"]("+t+")",anchorPosition:"before"}:{}},img:function(e){var t=e.src||"",n=e.alt||"";return t||n?{start:"!["+n+"]("+t+")"}:{}}};function l(e,t){return new Array(t+1).join(e)}!function(){for(var e=1;e<=6;e++)a["h"+e]=o(l("#",e)+" ","\n\n")}(),n.writer=function(){var e=[],t=[],n=null,i={};function o(r,o){o=o||{};var l=(a[r]||function(){return{}})(o,n,i);t.push({end:l.end,list:n}),l.list&&(n=l.list);var c="before"===l.anchorPosition;c&&s(o),e.push(l.start||""),c||s(o)}function s(t){t.id&&e.push('')}function l(i){var o=t.pop();n=o.list;var s=r.isFunction(o.end)?o.end():o.end;e.push(s||"")}return{asString:function(){return e.join("")},open:o,close:l,text:function(t){e.push(function(e){return e.replace(/\\/g,"\\\\").replace(/([\`\*_\{\}\[\]\(\)\#\+\-\.\!])/g,"\\$1")}(t))},selfClosing:function(e,t){o(e,t),l()}}}},{underscore:102}],35:[function(e,t,n){var r=e("./nodes");n.Element=r.Element,n.element=r.element,n.text=r.text,n.readString=e("./reader").readString,n.writeString=e("./writer").writeString},{"./nodes":36,"./reader":37,"./writer":38}],36:[function(e,t,n){var r=e("underscore");n.Element=o,n.element=function(e,t,n){return new o(e,t,n)},n.text=function(e){return{type:"text",value:e}};var i={first:function(){return null},firstOrEmpty:function(){return i},attributes:{}};function o(e,t,n){this.type="element",this.name=e,this.attributes=t||{},this.children=n||[]}o.prototype.first=function(e){return r.find(this.children,(function(t){return t.name===e}))},o.prototype.firstOrEmpty=function(e){return this.first(e)||i},o.prototype.getElementsByTagName=function(e){return a(r.filter(this.children,(function(t){return t.name===e})))},o.prototype.text=function(){if(0===this.children.length)return"";if(1!==this.children.length||"text"!==this.children[0].type)throw new Error("Not implemented");return this.children[0].value};var s={getElementsByTagName:function(e){return a(r.flatten(this.map((function(t){return t.getElementsByTagName(e)}),!0)))}};function a(e){return r.extend(e,s)}},{underscore:102}],37:[function(e,t,n){var r=e("../promises"),i=e("underscore"),o=e("./xmldom"),s=e("./nodes"),a=s.Element;n.readString=function(e,t){t=t||{};try{var n=o.parseFromString(e,"text/xml")}catch(e){return r.reject(e)}if("parsererror"===n.documentElement.tagName)return r.resolve(new Error(n.documentElement.textContent));function c(e){if(e.namespaceURI){var n=t[e.namespaceURI];return(n?n+":":"{"+e.namespaceURI+"}")+e.localName}return e.localName}return r.resolve(function e(t){switch(t.nodeType){case l.ELEMENT_NODE:return function(t){var n=c(t),r=[];i.forEach(t.childNodes,(function(t){var n=e(t);n&&r.push(n)}));var o={};return i.forEach(t.attributes,(function(e){o[c(e)]=e.value})),new a(n,o,r)}(t);case l.TEXT_NODE:return s.text(t.nodeValue)}}(n.documentElement))};var l=o.Node},{"../promises":23,"./nodes":36,"./xmldom":39,underscore:102}],38:[function(e,t,n){var r=e("underscore"),i=e("xmlbuilder");function o(e,t){e.text(t.value)}n.writeString=function(e,t){var n=r.invert(t),s={element:function(e,t){var n=e.element(l(t.name),t.attributes);t.children.forEach((function(e){a(n,e)}))},text:o};function a(e,t){return s[t.type](e,t)}function l(e){var t=/^\{(.*)\}(.*)$/.exec(e);if(t){var r=n[t[1]];return r+(""===r?"":":")+t[2]}return e}return function(e){var n=i.create(l(e.name),{version:"1.0",encoding:"UTF-8",standalone:!0});return r.forEach(t,(function(e,t){var r="xmlns"+(""===t?"":":"+t);n.attribute(r,e)})),e.children.forEach((function(e){a(n,e)})),n.end()}(e)}},{underscore:102,xmlbuilder:127}],39:[function(e,t,n){var r=e("@xmldom/xmldom"),i=e("@xmldom/xmldom/lib/dom");n.parseFromString=function(e){var t=null,n=new r.DOMParser({errorHandler:function(e,n){t={level:e,message:n}}}).parseFromString(e);if(null===t)return n;throw new Error(t.level+": "+t.message)},n.Node=i.Node},{"@xmldom/xmldom":45,"@xmldom/xmldom/lib/dom":43}],40:[function(e,t,n){var r=e("base64-js"),i=e("jszip");n.openArrayBuffer=function(e){return i.loadAsync(e).then((function(e){return{exists:function(t){return null!==e.file(t)},read:function(t,n){return e.file(t).async("uint8array").then((function(e){return"base64"===n?r.fromByteArray(e):n?new TextDecoder(n).decode(e):e}))},write:function(t,n){e.file(t,n)},toArrayBuffer:function(){return e.generateAsync({type:"arraybuffer"})}}}))},n.splitPath=function(e){var t=e.lastIndexOf("/");return-1===t?{dirname:"",basename:e}:{dirname:e.substring(0,t),basename:e.substring(t+1)}},n.joinPath=function(){var e=Array.prototype.filter.call(arguments,(function(e){return e})),t=[];return e.forEach((function(e){/^\//.test(e)?t=[e]:t.push(e)})),t.join("/")}},{"base64-js":47,jszip:88}],41:[function(e,t,n){"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.freeze?t.freeze(e):e}var i=r({HTML:"text/html",isHTML:function(e){return e===i.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),o=r({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(e){return e===o.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});n.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},n.find=function(e,t,n){if(void 0===n&&(n=Array.prototype),e&&"function"==typeof n.find)return n.find.call(e,t);for(var r=0;r=t+n||t?new java.lang.String(e,t,n)+"":e}function y(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}h.prototype.parseFromString=function(e,t){var n=this.options,r=new u,i=n.domBuilder||new f,s=n.errorHandler,a=n.locator,c=n.xmlns||{},h=/\/x?html?$/.test(t),p=h?o.HTML_ENTITIES:o.XML_ENTITIES;a&&i.setDocumentLocator(a),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},i=e instanceof Function;function o(t){var o=e[t];!o&&i&&(o=2==e.length?function(n){e(t,n)}:e),r[t]=o&&function(e){o("[xmldom "+t+"]\t"+e+m(n))}||function(){}}return n=n||{},o("warning"),o("error"),o("fatalError"),r}(s,i,a),r.domBuilder=n.domBuilder||i,h&&(c[""]=l.HTML),c.xml=c.xml||l.XML;var g=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(g(e),c,p):r.errorHandler.error("invalid doc source"),i.doc},f.prototype={startDocument:function(){this.doc=(new a).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.doc,o=i.createElementNS(e,n||t),s=r.length;y(this,o),this.currentElement=o,this.locator&&p(this.locator,o);for(var a=0;a=0))throw new k(E,new Error(e.tagName+"@"+n));for(var i=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function F(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(F(e,t))return!0}while(e=e.nextSibling)}function Y(){this.ownerDocument=this}function W(e,t,n,r){e&&e._inc++,n.namespaceURI===o.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function B(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var i=t.firstChild,o=0;i;)r[o++]=i,i=i.nextSibling;r.length=o,delete r[r.length]}}}function V(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,B(e.ownerDocument,e),t}function z(e){return e&&e.nodeType===j.DOCUMENT_TYPE_NODE}function $(e){return e&&e.nodeType===j.ELEMENT_NODE}function G(e){return e&&e.nodeType===j.TEXT_NODE}function q(e,t){var n=e.childNodes||[];if(i(n,$)||z(t))return!1;var r=i(n,z);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function X(e,t){var n=e.childNodes||[];if(i(n,(function(e){return $(e)&&e!==t})))return!1;var r=i(n,z);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function K(e,t,n){var r=e.childNodes||[],o=t.childNodes||[];if(t.nodeType===j.DOCUMENT_FRAGMENT_NODE){var s=o.filter($);if(s.length>1||i(o,G))throw new k(T,"More than one element or text in fragment");if(1===s.length&&!q(e,n))throw new k(T,"Element in fragment can not be inserted before doctype")}if($(t)&&!q(e,n))throw new k(T,"Only one element can be added and only after doctype");if(z(t)){if(i(r,z))throw new k(T,"Only one doctype is allowed");var a=i(r,$);if(n&&r.indexOf(a)1||i(o,G))throw new k(T,"More than one element or text in fragment");if(1===s.length&&!X(e,n))throw new k(T,"Element in fragment can not be inserted before doctype")}if($(t)&&!X(e,n))throw new k(T,"Only one element can be added and only after doctype");if(z(t)){if(i(r,(function(e){return z(e)&&e!==n})))throw new k(T,"Only one doctype is allowed");var a=i(r,$);if(n&&r.indexOf(a)=0;S--)if(""===(C=i[S]).prefix&&C.namespace===e.namespaceURI){d=C.namespace;break}if(d!==e.namespaceURI)for(S=i.length-1;S>=0;S--){var C;if((C=i[S]).namespace===e.namespaceURI){C.prefix&&(u=C.prefix+":"+c);break}}}t.push("<",u);for(var M=0;M"),n&&/^script$/i.test(c))for(;l;)l.data?t.push(l.data):me(l,t,n,r,i.slice()),l=l.nextSibling;else for(;l;)me(l,t,n,r,i.slice()),l=l.nextSibling;t.push("")}else t.push("/>");return;case v:case x:for(l=e.firstChild;l;)me(l,t,n,r,i.slice()),l=l.nextSibling;return;case f:return pe(t,e.name,e.value);case p:return t.push(e.data.replace(/[<&>]/g,U));case m:return t.push("");case _:return t.push("\x3c!--",e.data,"--\x3e");case w:var k=e.publicId,R=e.systemId;if(t.push("");else if(R&&"."!=R)t.push(" SYSTEM ",R,">");else{var O=e.internalSubset;O&&t.push(" [",O,"]"),t.push(">")}return;case b:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ge(e,t,n){var r;switch(t.nodeType){case h:(r=t.cloneNode(!1)).ownerDocument=e;case x:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var i=t.firstChild;i;)r.appendChild(ge(e,i,n)),i=i.nextSibling;return r}function ye(e,t,n){var r=new t.constructor;for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var o=t[i];"object"!=typeof o&&o!=r[i]&&(r[i]=o)}switch(t.childNodes&&(r.childNodes=new R),r.ownerDocument=e,r.nodeType){case h:var s=t.attributes,a=r.attributes=new A,l=s.length;a._ownerElement=r;for(var c=0;c0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},c(d,j),c(d,j.prototype),Y.prototype={nodeName:"#document",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==x){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===h&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),V(this,e)},replaceChild:function(e,t){Z(this,e,t,J),e.ownerDocument=this,t&&this.removeChild(t),$(e)&&(this.documentElement=e)},importNode:function(e,t){return ge(this,e,t)},getElementById:function(e){var t=null;return F(this.documentElement,(function(n){if(n.nodeType==h&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=l(e);return new O(this,(function(n){var r=[];return t.length>0&&F(n.documentElement,(function(i){if(i!==n&&i.nodeType===h){var o=i.getAttribute("class");if(o){var s=e===o;if(!s){var a=l(o);s=t.every((c=a,function(e){return c&&-1!==c.indexOf(e)}))}s&&r.push(i)}}var c})),r}))},createElement:function(e){var t=new Q;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new R,(t.attributes=new A)._ownerElement=t,t},createDocumentFragment:function(){var e=new ce;return e.ownerDocument=this,e.childNodes=new R,e},createTextNode:function(e){var t=new ne;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ue;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new ee;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new le;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new Q,r=t.split(":"),i=n.attributes=new A;return n.childNodes=new R,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new ee,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},u(Y,j),Q.prototype={nodeType:h,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===x?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,B(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new O(this,(function(t){var n=[];return F(t,(function(r){r===t||r.nodeType!=h||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new O(this,(function(n){var r=[];return F(n,(function(i){i===n||i.nodeType!==h||"*"!==e&&i.namespaceURI!==e||"*"!==t&&i.localName!=t||r.push(i)})),r}))}},Y.prototype.getElementsByTagName=Q.prototype.getElementsByTagName,Y.prototype.getElementsByTagNameNS=Q.prototype.getElementsByTagNameNS,u(Q,j),ee.prototype.nodeType=f,u(ee,j),te.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(M[T])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},u(te,j),ne.prototype={nodeName:"#text",nodeType:p,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},u(ne,te),re.prototype={nodeName:"#comment",nodeType:_},u(re,te),ie.prototype={nodeName:"#cdata-section",nodeType:m},u(ie,te),oe.prototype.nodeType=w,u(oe,j),se.prototype.nodeType=S,u(se,j),ae.prototype.nodeType=y,u(ae,j),le.prototype.nodeType=g,u(le,j),ce.prototype.nodeName="#document-fragment",ce.prototype.nodeType=x,u(ce,j),ue.prototype.nodeType=b,u(ue,j),de.prototype.serializeToString=function(e,t,n){return he.call(e,t,n)},j.prototype.toString=he;try{if(Object.defineProperty){function _e(e){switch(e.nodeType){case h:case x:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(_e(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(O.prototype,"length",{get:function(){return L(this),this.$$length}}),Object.defineProperty(j.prototype,"textContent",{get:function(){return _e(this)},set:function(e){switch(this.nodeType){case h:case x:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),be=function(e,t,n){e["$$"+t]=n}}}catch(ve){}n.DocumentType=oe,n.DOMException=k,n.DOMImplementation=H,n.Element=Q,n.Node=j,n.NodeList=R,n.XMLSerializer=de},{"./conventions":41}],44:[function(e,t,n){var r=e("./conventions").freeze;n.XML_ENTITIES=r({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),n.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),n.entityMap=n.HTML_ENTITIES},{"./conventions":41}],45:[function(e,t,n){var r=e("./dom");n.DOMImplementation=r.DOMImplementation,n.XMLSerializer=r.XMLSerializer,n.DOMParser=e("./dom-parser").DOMParser},{"./dom":43,"./dom-parser":42}],46:[function(e,t,n){var r=e("./conventions").NAMESPACE,i=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,o=new RegExp("[\\-\\.0-9"+i.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),s=new RegExp("^"+i.source+o.source+"*(?::"+i.source+o.source+"*)?$");function a(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,a)}function l(){}function c(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function u(e,t,n,i,o,s){function a(e,t,r){n.attributeNames.hasOwnProperty(e)&&s.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,o),r)}for(var l,c=++t,u=0;;){var d=e.charAt(c);switch(d){case"=":if(1===u)l=e.slice(t,c),u=3;else{if(2!==u)throw new Error("attribute equal must after attrName");u=3}break;case"'":case'"':if(3===u||1===u){if(1===u&&(s.warning('attribute value must after "="'),l=e.slice(t,c)),t=c+1,!((c=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");a(l,h=e.slice(t,c),t-1),u=5}else{if(4!=u)throw new Error('attribute value must after "="');a(l,h=e.slice(t,c),t),s.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=c+1,u=5}break;case"/":switch(u){case 0:n.setTagName(e.slice(t,c));case 5:case 6:case 7:u=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return s.error("unexpected end of input"),0==u&&n.setTagName(e.slice(t,c)),c;case">":switch(u){case 0:n.setTagName(e.slice(t,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,c)).slice(-1)&&(n.closed=!0,h=h.slice(0,-1));case 2:2===u&&(h=l),4==u?(s.warning('attribute "'+h+'" missed quot(")!'),a(l,h,t)):(r.isHTML(i[""])&&h.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),a(h,h,t));break;case 3:throw new Error("attribute value missed!!")}return c;case"€":d=" ";default:if(d<=" ")switch(u){case 0:n.setTagName(e.slice(t,c)),u=6;break;case 1:l=e.slice(t,c),u=2;break;case 4:var h=e.slice(t,c);s.warning('attribute "'+h+'" missed quot(")!!'),a(l,h,t);case 5:u=6}else switch(u){case 2:n.tagName,r.isHTML(i[""])&&l.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=c,u=1;break;case 5:s.warning('attribute space is required"'+l+'"!!');case 6:u=1,t=c;break;case 3:u=4,t=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function d(e,t,n){for(var i=e.tagName,o=null,s=e.length;s--;){var a=e[s],l=a.qName,c=a.value;if((f=l.indexOf(":"))>0)var u=a.prefix=l.slice(0,f),d=l.slice(f+1),h="xmlns"===u&&d;else d=l,u=null,h="xmlns"===l&&"";a.localName=d,!1!==h&&(null==o&&(o={},p(n,n={})),n[h]=o[h]=c,a.uri=r.XMLNS,t.startPrefixMapping(h,c))}for(s=e.length;s--;)(u=(a=e[s]).prefix)&&("xml"===u&&(a.uri=r.XML),"xmlns"!==u&&(a.uri=n[u||""]));var f;(f=i.indexOf(":"))>0?(u=e.prefix=i.slice(0,f),d=e.localName=i.slice(f+1)):(u=null,d=e.localName=i);var m=e.uri=n[u||""];if(t.startElement(m,d,i,e),!e.closed)return e.currentNSMap=n,e.localNSMap=o,!0;if(t.endElement(m,d,i),o)for(u in o)Object.prototype.hasOwnProperty.call(o,u)&&t.endPrefixMapping(u)}function h(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var o=e.indexOf("",t),s=e.substring(t+1,o);if(/[&<]/.test(s))return/^script$/i.test(n)?(i.characters(s,0,s.length),o):(s=s.replace(/&#?\w+;/g,r),i.characters(s,0,s.length),o)}return t+1}function f(e,t,n,r){var i=r[n];return null==i&&((i=e.lastIndexOf(""))t?(n.comment(e,t+4,i-t-4),i+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var i=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,i-t-9),n.endCDATA(),i+3}var o=function(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;for(i.lastIndex=t,i.exec(e);n=i.exec(e);)if(r.push(n),n[1])return r}(e,t),s=o.length;if(s>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],l=!1,c=!1;s>3&&(/^public$/i.test(o[2][0])?(l=o[3][0],c=s>4&&o[4][0]):/^system$/i.test(o[2][0])&&(c=o[3][0]));var u=o[s-1];return n.startDTD(a,l,c),n.endDTD(),u.index+u[0].length}return-1}function g(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return i?(i[0].length,n.processingInstruction(i[1],i[2]),r+2):-1}return-1}function y(){this.attributeNames={}}a.prototype=new Error,a.prototype.name=a.name,l.prototype={parse:function(e,t,n){var i=this.domBuilder;i.startDocument(),p(t,t={}),function(e,t,n,i,o){function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(o.error("entity not found:"+e),e)}function l(t){if(t>C){var n=e.substring(C,t).replace(/&#?\w+;/g,s);w&&p(C),i.characters(n,0,t-C),C=t}}function p(t,n){for(;t>=_&&(n=v.exec(e));)b=n.index,_=b+n[0].length,w.lineNumber++;w.columnNumber=t-b+1}for(var b=0,_=0,v=/.*(?:\r\n?|\n)|.*$/g,w=i.locator,x=[{currentNSMap:t}],S={},C=0;;){try{var M=e.indexOf("<",C);if(M<0){if(!e.substr(C).match(/^\s*$/)){var T=i.doc,E=T.createTextNode(e.substr(C));T.appendChild(E),i.currentElement=E}return}switch(M>C&&l(M),e.charAt(M+1)){case"/":var D=e.indexOf(">",M+3),k=e.substring(M+2,D).replace(/[ \t\n\r]+$/g,""),R=x.pop();D<0?(k=e.substring(M+2).replace(/[\s<].*/,""),o.error("end tag name: "+k+" is not complete:"+R.tagName),D=M+1+k.length):k.match(/\sC?C=D:l(Math.max(M,C)+1)}}(e,t,n,i,this.errorHandler),i.endDocument()}},y.prototype={setTagName:function(e){if(!s.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!s.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},n.XMLReader=l,n.ParseError=a},{"./conventions":41}],47:[function(e,t,n){"use strict";n.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},n.toByteArray=function(e){var t,n,r=l(e),s=r[0],a=r[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,s,a)),u=0,d=a>0?s-4:s;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;return 2===a&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[u++]=255&t),1===a&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t),c},n.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],s=16383,a=0,l=n-i;al?l:a+s));return 1===i?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=s[a],i[s.charCodeAt(a)]=a;function l(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,n){for(var i,o,s=[],a=t;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],48:[function(e,t,n){"use strict";t.exports=function(e){var t=e._SomePromiseArray;function n(e){var n=new t(e),r=n.promise();return n.setHowMany(1),n.setUnwrap(),n.init(),r}e.any=function(e){return n(e)},e.prototype.any=function(){return n(this)}}},{}],49:[function(e,t,n){(function(n){"use strict";var r;try{throw new Error}catch(e){r=e}var i=e("./schedule"),o=e("./queue"),s=e("./util");function a(){this._customScheduler=!1,this._isTickUsed=!1,this._lateQueue=new o(16),this._normalQueue=new o(16),this._haveDrainedQueues=!1,this._trampolineEnabled=!0;var e=this;this.drainQueues=function(){e._drainQueues()},this._schedule=i}function l(e,t,n){this._lateQueue.push(e,t,n),this._queueTick()}function c(e,t,n){this._normalQueue.push(e,t,n),this._queueTick()}function u(e){this._normalQueue._pushOne(e),this._queueTick()}a.prototype.setScheduler=function(e){var t=this._schedule;return this._schedule=e,this._customScheduler=!0,t},a.prototype.hasCustomScheduler=function(){return this._customScheduler},a.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},a.prototype.disableTrampolineIfNecessary=function(){s.hasDevTools&&(this._trampolineEnabled=!1)},a.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},a.prototype.fatalError=function(e,t){t?(n.stderr.write("Fatal "+(e instanceof Error?e.stack:e)+"\n"),n.exit(2)):this.throwLater(e)},a.prototype.throwLater=function(e,t){if(1===arguments.length&&(t=e,e=function(){throw t}),"undefined"!=typeof setTimeout)setTimeout((function(){e(t)}),0);else try{this._schedule((function(){e(t)}))}catch(e){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},s.hasDevTools?(a.prototype.invokeLater=function(e,t,n){this._trampolineEnabled?l.call(this,e,t,n):this._schedule((function(){setTimeout((function(){e.call(t,n)}),100)}))},a.prototype.invoke=function(e,t,n){this._trampolineEnabled?c.call(this,e,t,n):this._schedule((function(){e.call(t,n)}))},a.prototype.settlePromises=function(e){this._trampolineEnabled?u.call(this,e):this._schedule((function(){e._settlePromises()}))}):(a.prototype.invokeLater=l,a.prototype.invoke=c,a.prototype.settlePromises=u),a.prototype._drainQueue=function(e){for(;e.length()>0;){var t=e.shift();if("function"==typeof t){var n=e.shift(),r=e.shift();t.call(n,r)}else t._settlePromises()}},a.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},a.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},a.prototype._reset=function(){this._isTickUsed=!1},t.exports=a,t.exports.firstLineError=r}).call(this,e("_process"))},{"./queue":72,"./schedule":75,"./util":82,_process:101}],50:[function(e,t,n){"use strict";t.exports=function(e,t,n,r){var i=!1,o=function(e,t){this._reject(t)},s=function(e,t){t.promiseRejectionQueued=!0,t.bindingPromise._then(o,o,null,this,e)},a=function(e,t){50397184&this._bitField||this._resolveCallback(t.target)},l=function(e,t){t.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(o){i||(i=!0,e.prototype._propagateFrom=r.propagateFromFunction(),e.prototype._boundValue=r.boundValueFunction());var c=n(o),u=new e(t);u._propagateFrom(this,1);var d=this._target();if(u._setBoundTo(c),c instanceof e){var h={promiseRejectionQueued:!1,promise:u,target:d,bindingPromise:c};d._then(t,s,void 0,u,h),c._then(a,l,void 0,u,h),u._setOnCancel(c)}else u._resolveCallback(d);return u},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=2097152|this._bitField,this._boundTo=e):this._bitField=-2097153&this._bitField},e.prototype._isBound=function(){return!(2097152&~this._bitField)},e.bind=function(t,n){return e.resolve(n).bind(t)}}},{}],51:[function(e,t,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}t.exports=function(t){var n,r,s=e("./util"),a=s.canEvaluate,l=s.isIdentifier,c=function(e){return new Function("ensureMethod"," \n return function(obj) { \n 'use strict' \n var len = this.length; \n ensureMethod(obj, 'methodName'); \n switch(len) { \n case 1: return obj.methodName(this[0]); \n case 2: return obj.methodName(this[0], this[1]); \n case 3: return obj.methodName(this[0], this[1], this[2]); \n case 0: return obj.methodName(); \n default: \n return obj.methodName.apply(obj, this); \n } \n }; \n ".replace(/methodName/g,e))(h)},u=function(e){return new Function("obj"," \n 'use strict'; \n return obj.propertyName; \n ".replace("propertyName",e))},d=function(e,t,n){var r=n[e];if("function"!=typeof r){if(!l(e))return null;if(r=t(e),n[e]=r,n[" size"]++,n[" size"]>512){for(var i=Object.keys(n),o=0;o<256;++o)delete n[i[o]];n[" size"]=i.length-256}}return r};function h(e,n){var r;if(null!=e&&(r=e[n]),"function"!=typeof r){var i="Object "+s.classString(e)+" has no method '"+s.toString(n)+"'";throw new t.TypeError(i)}return r}function f(e){return h(e,this.pop()).apply(e,this)}function p(e){return e[this]}function m(e){var t=+this;return t<0&&(t=Math.max(0,t+e.length)),e[t]}n=function(e){return d(e,c,i)},r=function(e){return d(e,u,o)},t.prototype.call=function(e){for(var t=arguments.length,r=new Array(Math.max(t-1,0)),i=1;i0&&this._settlePromises()},t.prototype._unsetOnCancel=function(){this._onCancelField=void 0},t.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},t.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},t.prototype._doInvokeOnCancel=function(e,t){if(o.isArray(e))for(var n=0;n=0)return n[e]}return e.prototype._promiseCreated=function(){},e.prototype._pushContext=function(){},e.prototype._popContext=function(){return null},e._peekContext=e.prototype._peekContext=function(){},r.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,n.push(this._trace))},r.prototype._popContext=function(){if(void 0!==this._trace){var e=n.pop(),t=e._promiseCreated;return e._promiseCreated=null,t}return null},r.CapturedTrace=null,r.create=function(){if(t)return new r},r.deactivateLongStackTraces=function(){},r.activateLongStackTraces=function(){var n=e.prototype._pushContext,o=e.prototype._popContext,s=e._peekContext,a=e.prototype._peekContext,l=e.prototype._promiseCreated;r.deactivateLongStackTraces=function(){e.prototype._pushContext=n,e.prototype._popContext=o,e._peekContext=s,e.prototype._peekContext=a,e.prototype._promiseCreated=l,t=!1},t=!0,e.prototype._pushContext=r.prototype._pushContext,e.prototype._popContext=r.prototype._popContext,e._peekContext=e.prototype._peekContext=i,e.prototype._promiseCreated=function(){var e=this._peekContext();e&&null==e._promiseCreated&&(e._promiseCreated=this)}},r}},{}],55:[function(e,t,n){(function(n){"use strict";t.exports=function(t,r){var i,o,s,a=t._getDomain,l=t._async,c=e("./errors").Warning,u=e("./util"),d=u.canAttachTrace,h=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,f=/\((?:timers\.js):\d+:\d+\)/,p=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,m=null,g=null,y=!1,b=!(0==u.env("BLUEBIRD_DEBUG")||!u.env("BLUEBIRD_DEBUG")&&"development"!==u.env("NODE_ENV")),_=!(0==u.env("BLUEBIRD_WARNINGS")||!b&&!u.env("BLUEBIRD_WARNINGS")),v=!(0==u.env("BLUEBIRD_LONG_STACK_TRACES")||!b&&!u.env("BLUEBIRD_LONG_STACK_TRACES")),w=0!=u.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(_||!!u.env("BLUEBIRD_W_FORGOTTEN_RETURN"));t.prototype.suppressUnhandledRejections=function(){var e=this._target();e._bitField=-1048577&e._bitField|524288},t.prototype._ensurePossibleRejectionHandled=function(){524288&this._bitField||(this._setRejectionIsUnhandled(),l.invokeLater(this._notifyUnhandledRejection,this,void 0))},t.prototype._notifyUnhandledRejectionIsHandled=function(){B("rejectionHandled",i,void 0,this)},t.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},t.prototype._returnedNonUndefined=function(){return!!(268435456&this._bitField)},t.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._settledValue();this._setUnhandledRejectionIsNotified(),B("unhandledRejection",o,e,this)}},t.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},t.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},t.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},t.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},t.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},t.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},t.prototype._warn=function(e,t,n){return U(e,t,n||this)},t.onPossiblyUnhandledRejection=function(e){var t=a();o="function"==typeof e?null===t?e:u.domainBind(t,e):void 0},t.onUnhandledRejectionHandled=function(e){var t=a();i="function"==typeof e?null===t?e:u.domainBind(t,e):void 0};var x=function(){};t.longStackTraces=function(){if(l.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!J.longStackTraces&&z()){var e=t.prototype._captureStackTrace,n=t.prototype._attachExtraTrace;J.longStackTraces=!0,x=function(){if(l.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");t.prototype._captureStackTrace=e,t.prototype._attachExtraTrace=n,r.deactivateLongStackTraces(),l.enableTrampoline(),J.longStackTraces=!1},t.prototype._captureStackTrace=H,t.prototype._attachExtraTrace=j,r.activateLongStackTraces(),l.disableTrampolineIfNecessary()}},t.hasLongStackTraces=function(){return J.longStackTraces&&z()};var S=function(){try{if("function"==typeof CustomEvent){var e=new CustomEvent("CustomEvent");return u.global.dispatchEvent(e),function(e,t){var n=new CustomEvent(e.toLowerCase(),{detail:t,cancelable:!0});return!u.global.dispatchEvent(n)}}return"function"==typeof Event?(e=new Event("CustomEvent"),u.global.dispatchEvent(e),function(e,t){var n=new Event(e.toLowerCase(),{cancelable:!0});return n.detail=t,!u.global.dispatchEvent(n)}):((e=document.createEvent("CustomEvent")).initCustomEvent("testingtheevent",!1,!0,{}),u.global.dispatchEvent(e),function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e.toLowerCase(),!1,!0,t),!u.global.dispatchEvent(n)})}catch(e){}return function(){return!1}}(),C=u.isNode?function(){return n.emit.apply(n,arguments)}:u.global?function(e){var t="on"+e.toLowerCase(),n=u.global[t];return!!n&&(n.apply(u.global,[].slice.call(arguments,1)),!0)}:function(){return!1};function M(e,t){return{promise:t}}var T={promiseCreated:M,promiseFulfilled:M,promiseRejected:M,promiseResolved:M,promiseCancelled:M,promiseChained:function(e,t,n){return{promise:t,child:n}},warning:function(e,t){return{warning:t}},unhandledRejection:function(e,t,n){return{reason:t,promise:n}},rejectionHandled:M},E=function(e){var t=!1;try{t=C.apply(null,arguments)}catch(e){l.throwLater(e),t=!0}var n=!1;try{n=S(e,T[e].apply(null,arguments))}catch(e){l.throwLater(e),n=!0}return n||t};function D(){return!1}function k(e,t,n){var r=this;try{e(t,n,(function(e){if("function"!=typeof e)throw new TypeError("onCancel must be a function, got: "+u.toString(e));r._attachCancellationCallback(e)}))}catch(e){return e}}function R(e){if(!this._isCancellable())return this;var t=this._onCancel();void 0!==t?u.isArray(t)?t.push(e):this._setOnCancel([t,e]):this._setOnCancel(e)}function O(){return this._onCancelField}function L(e){this._onCancelField=e}function A(){this._cancellationParent=void 0,this._onCancelField=void 0}function I(e,t){if(1&t){this._cancellationParent=e;var n=e._branchesRemainingToCancel;void 0===n&&(n=0),e._branchesRemainingToCancel=n+1}2&t&&e._isBound()&&this._setBoundTo(e._boundTo)}t.config=function(e){if("longStackTraces"in(e=Object(e))&&(e.longStackTraces?t.longStackTraces():!e.longStackTraces&&t.hasLongStackTraces()&&x()),"warnings"in e){var n=e.warnings;J.warnings=!!n,w=J.warnings,u.isObject(n)&&"wForgottenReturn"in n&&(w=!!n.wForgottenReturn)}if("cancellation"in e&&e.cancellation&&!J.cancellation){if(l.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");t.prototype._clearCancellationData=A,t.prototype._propagateFrom=I,t.prototype._onCancel=O,t.prototype._setOnCancel=L,t.prototype._attachCancellationCallback=R,t.prototype._execute=k,P=I,J.cancellation=!0}return"monitoring"in e&&(e.monitoring&&!J.monitoring?(J.monitoring=!0,t.prototype._fireEvent=E):!e.monitoring&&J.monitoring&&(J.monitoring=!1,t.prototype._fireEvent=D)),t},t.prototype._fireEvent=D,t.prototype._execute=function(e,t,n){try{e(t,n)}catch(e){return e}},t.prototype._onCancel=function(){},t.prototype._setOnCancel=function(e){},t.prototype._attachCancellationCallback=function(e){},t.prototype._captureStackTrace=function(){},t.prototype._attachExtraTrace=function(){},t.prototype._clearCancellationData=function(){},t.prototype._propagateFrom=function(e,t){};var P=function(e,t){2&t&&e._isBound()&&this._setBoundTo(e._boundTo)};function N(){var e=this._boundTo;return void 0!==e&&e instanceof t?e.isFulfilled()?e.value():void 0:e}function H(){this._trace=new X(this._peekContext())}function j(e,t){if(d(e)){var n=this._trace;if(void 0!==n&&t&&(n=n._parent),void 0!==n)n.attachExtraTrace(e);else if(!e.__stackCleaned__){var r=Y(e);u.notEnumerableProp(e,"stack",r.message+"\n"+r.stack.join("\n")),u.notEnumerableProp(e,"__stackCleaned__",!0)}}}function U(e,n,r){if(J.warnings){var i,o=new c(e);if(n)r._attachExtraTrace(o);else if(J.longStackTraces&&(i=t._peekContext()))i.attachExtraTrace(o);else{var s=Y(o);o.stack=s.message+"\n"+s.stack.join("\n")}E("warning",o)||W(o,"",!0)}}function F(e){for(var t=[],n=0;n0?function(e){for(var t=e.stack.replace(/\s+$/g,"").split("\n"),n=0;n0&&"SyntaxError"!=e.name&&(t=t.slice(n)),t}(e):[" (No stack trace)"],{message:n,stack:"SyntaxError"==e.name?t:F(t)}}function W(e,t,n){if("undefined"!=typeof console){var r;if(u.isObject(e)){var i=e.stack;r=t+g(i,e)}else r=t+String(e);"function"==typeof s?s(r,n):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(r)}}function B(e,t,n,r){var i=!1;try{"function"==typeof t&&(i=!0,"rejectionHandled"===e?t(r):t(n,r))}catch(e){l.throwLater(e)}"unhandledRejection"===e?E(e,n,r)||i||W(n,"Unhandled rejection "):E(e,r)}function V(e){var t;if("function"==typeof e)t="[function "+(e.name||"anonymous")+"]";else{if(t=e&&"function"==typeof e.toString?e.toString():u.toString(e),/\[object [a-zA-Z0-9$_]+\]/.test(t))try{t=JSON.stringify(e)}catch(e){}0===t.length&&(t="(empty array)")}return"(<"+function(e){return e.length<41?e:e.substr(0,38)+"..."}(t)+">, no stack trace)"}function z(){return"function"==typeof K}var $=function(){return!1},G=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;function q(e){var t=e.match(G);if(t)return{fileName:t[1],line:parseInt(t[2],10)}}function X(e){this._parent=e,this._promisesCreated=0;var t=this._length=1+(void 0===e?0:e._length);K(this,X),t>32&&this.uncycle()}u.inherits(X,Error),r.CapturedTrace=X,X.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var t=[],n={},r=0,i=this;void 0!==i;++r)t.push(i),i=i._parent;for(r=(e=this._length=r)-1;r>=0;--r){var o=t[r].stack;void 0===n[o]&&(n[o]=r)}for(r=0;r0&&(t[s-1]._parent=void 0,t[s-1]._length=1),t[r]._parent=void 0,t[r]._length=1;var a=r>0?t[r-1]:this;s=0;--c)t[c]._length=l,l++;return}}}},X.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var t=Y(e),n=t.message,r=[t.stack],i=this;void 0!==i;)r.push(F(i.stack.split("\n"))),i=i._parent;!function(e){for(var t=e[0],n=1;n=0;--a)if(r[a]===o){s=a;break}for(a=s;a>=0;--a){var l=r[a];if(t[i]!==l)break;t.pop(),i--}t=r}}(r),function(e){for(var t=0;t=0)return m=/@/,g=t,y=!0,function(e){e.stack=(new Error).stack};try{throw new Error}catch(e){r="stack"in e}return!("stack"in i)&&r&&"number"==typeof Error.stackTraceLimit?(m=e,g=t,function(e){Error.stackTraceLimit+=6;try{throw new Error}catch(t){e.stack=t.stack}Error.stackTraceLimit-=6}):(g=function(e,t){return"string"==typeof e?e:"object"!=typeof t&&"function"!=typeof t||void 0===t.name||void 0===t.message?V(t):t.toString()},null)}();"undefined"!=typeof console&&void 0!==console.warn&&(s=function(e){console.warn(e)},u.isNode&&n.stderr.isTTY?s=function(e,t){var n=t?"":"";console.warn(n+e+"\n")}:u.isNode||"string"!=typeof(new Error).stack||(s=function(e,t){console.warn("%c"+e,t?"color: darkorange":"color: red")}));var J={warnings:_,longStackTraces:!1,cancellation:!1,monitoring:!1};return v&&t.longStackTraces(),{longStackTraces:function(){return J.longStackTraces},warnings:function(){return J.warnings},cancellation:function(){return J.cancellation},monitoring:function(){return J.monitoring},propagateFromFunction:function(){return P},boundValueFunction:function(){return N},checkForgottenReturns:function(e,t,n,r,i){if(void 0===e&&null!==t&&w){if(void 0!==i&&i._returnedNonUndefined())return;if(!(65535&r._bitField))return;n&&(n+=" ");var o="",s="";if(t._trace){for(var a=t._trace.stack.split("\n"),l=F(a),c=l.length-1;c>=0;--c){var u=l[c];if(!f.test(u)){var d=u.match(p);d&&(o="at "+d[1]+":"+d[2]+":"+d[3]+" ");break}}if(l.length>0){var h=l[0];for(c=0;c0&&(s="\n"+a[c-1]);break}}}var m="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+s;r._warn(m,!0,t)}},setBounds:function(e,t){if(z()){for(var n,r,i=e.stack.split("\n"),o=t.stack.split("\n"),s=-1,a=-1,l=0;l=a||($=function(e){if(h.test(e))return!0;var t=q(e);return!!(t&&t.fileName===n&&s<=t.line&&t.line<=a)})}},warn:U,deprecated:function(e,t){var n=e+" is deprecated and will be removed in a future version.";return t&&(n+=" Use "+t+" instead."),U(n)},CapturedTrace:X,fireDomEvent:S,fireGlobalEvent:C}}}).call(this,e("_process"))},{"./errors":58,"./util":82,_process:101}],56:[function(e,t,n){"use strict";t.exports=function(e){function t(){return this.value}function n(){throw this.reason}e.prototype.return=e.prototype.thenReturn=function(n){return n instanceof e&&n.suppressUnhandledRejections(),this._then(t,void 0,void 0,{value:n},void 0)},e.prototype.throw=e.prototype.thenThrow=function(e){return this._then(n,void 0,void 0,{reason:e},void 0)},e.prototype.catchThrow=function(e){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:e},void 0);var t=arguments[1];return this.caught(e,(function(){throw t}))},e.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof e&&n.suppressUnhandledRejections(),this._then(void 0,t,void 0,{value:n},void 0);var r=arguments[1];return r instanceof e&&r.suppressUnhandledRejections(),this.caught(n,(function(){return r}))}}},{}],57:[function(e,t,n){"use strict";t.exports=function(e,t){var n=e.reduce,r=e.all;function i(){return r(this)}e.prototype.each=function(e){return n(this,e,t,0)._then(i,void 0,void 0,this,void 0)},e.prototype.mapSeries=function(e){return n(this,e,t,t)},e.each=function(e,r){return n(e,r,t,0)._then(i,void 0,void 0,e,void 0)},e.mapSeries=function(e,r){return n(e,r,t,t)}}},{}],58:[function(e,t,n){"use strict";var r,i,o=e("./es5"),s=o.freeze,a=e("./util"),l=a.inherits,c=a.notEnumerableProp;function u(e,t){function n(r){if(!(this instanceof n))return new n(r);c(this,"message","string"==typeof r?r:t),c(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return l(n,Error),n}var d=u("Warning","warning"),h=u("CancellationError","cancellation error"),f=u("TimeoutError","timeout error"),p=u("AggregateError","aggregate error");try{r=TypeError,i=RangeError}catch(e){r=u("TypeError","type error"),i=u("RangeError","range error")}for(var m="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g1?e.cancelPromise._reject(t):e.cancelPromise._cancel(),e.cancelPromise=null,!0)}function c(){return d.call(this,this.promise._target()._settledValue())}function u(e){if(!l(this,e))return o.e=e,o}function d(e){var r=this.promise,s=this.handler;if(!this.called){this.called=!0;var d=this.isFinallyHandler()?s.call(r._boundValue()):s.call(r._boundValue(),e);if(void 0!==d){r._setReturnedNonUndefined();var h=n(d,r);if(h instanceof t){if(null!=this.cancelPromise){if(h._isCancelled()){var f=new i("late cancellation observer");return r._attachExtraTrace(f),o.e=f,o}h.isPending()&&h._attachCancellationCallback(new a(this))}return h._then(c,u,void 0,this,void 0)}}}return r.isRejected()?(l(this),o.e=e,o):(l(this),e)}return s.prototype.isFinallyHandler=function(){return 0===this.type},a.prototype._resultCancelled=function(){l(this.finallyHandler)},t.prototype._passThrough=function(e,t,n,r){return"function"!=typeof e?this.then():this._then(n,r,void 0,new s(this,t,e),void 0)},t.prototype.lastly=t.prototype.finally=function(e){return this._passThrough(e,0,d,d)},t.prototype.tap=function(e){return this._passThrough(e,1,d)},s}},{"./util":82}],62:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o,s){var a=e("./errors").TypeError,l=e("./util"),c=l.errorObj,u=l.tryCatch,d=[];function h(e,n,i,o){if(s.cancellation()){var a=new t(r),l=this._finallyPromise=new t(r);this._promise=a.lastly((function(){return l})),a._captureStackTrace(),a._setOnCancel(this)}else(this._promise=new t(r))._captureStackTrace();this._stack=o,this._generatorFunction=e,this._receiver=n,this._generator=void 0,this._yieldHandlers="function"==typeof i?[i].concat(d):d,this._yieldedPromise=null,this._cancellationPhase=!1}l.inherits(h,o),h.prototype._isResolved=function(){return null===this._promise},h.prototype._cleanup=function(){this._promise=this._generator=null,s.cancellation()&&null!==this._finallyPromise&&(this._finallyPromise._fulfill(),this._finallyPromise=null)},h.prototype._promiseCancelled=function(){if(!this._isResolved()){var e;if(void 0!==this._generator.return)this._promise._pushContext(),e=u(this._generator.return).call(this._generator,void 0),this._promise._popContext();else{var n=new t.CancellationError("generator .return() sentinel");t.coroutine.returnSentinel=n,this._promise._attachExtraTrace(n),this._promise._pushContext(),e=u(this._generator.throw).call(this._generator,n),this._promise._popContext()}this._cancellationPhase=!0,this._yieldedPromise=null,this._continue(e)}},h.prototype._promiseFulfilled=function(e){this._yieldedPromise=null,this._promise._pushContext();var t=u(this._generator.next).call(this._generator,e);this._promise._popContext(),this._continue(t)},h.prototype._promiseRejected=function(e){this._yieldedPromise=null,this._promise._attachExtraTrace(e),this._promise._pushContext();var t=u(this._generator.throw).call(this._generator,e);this._promise._popContext(),this._continue(t)},h.prototype._resultCancelled=function(){if(this._yieldedPromise instanceof t){var e=this._yieldedPromise;this._yieldedPromise=null,e.cancel()}},h.prototype.promise=function(){return this._promise},h.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._promiseFulfilled(void 0)},h.prototype._continue=function(e){var n=this._promise;if(e===c)return this._cleanup(),this._cancellationPhase?n.cancel():n._rejectCallback(e.e,!1);var r=e.value;if(!0===e.done)return this._cleanup(),this._cancellationPhase?n.cancel():n._resolveCallback(r);var o=i(r,this._promise);if(o instanceof t||(o=function(e,n,r){for(var o=0;o0&&"function"==typeof arguments[o]&&(e=arguments[o],o<=8&&c)){(x=new t(i))._captureStackTrace();for(var u=new(0,m[o-1])(e),d=g,h=0;h=1?s:0,o).promise()}l.inherits(h,n),h.prototype._asyncInit=function(){this._init$(void 0,-2)},h.prototype._init=function(){},h.prototype._promiseFulfilled=function(e,n){var r=this._values,o=this.length(),a=this._preservedValues,l=this._limit;if(n<0){if(r[n=-1*n-1]=e,l>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(l>=1&&this._inFlight>=l)return r[n]=e,this._queue.push(n),!1;null!==a&&(a[n]=e);var d=this._promise,h=this._callback,f=d._boundValue();d._pushContext();var p=c(h).call(f,e,n,o),m=d._popContext();if(s.checkForgottenReturns(p,m,null!==a?"Promise.filter":"Promise.map",d),p===u)return this._reject(p.e),!0;var g=i(p,this._promise);if(g instanceof t){var y=(g=g._target())._bitField;if(!(50397184&y))return l>=1&&this._inFlight++,r[n]=g,g._proxy(this,-1*(n+1)),!1;if(!(33554432&y))return 16777216&y?(this._reject(g._reason()),!0):(this._cancel(),!0);p=g._value()}r[n]=p}return++this._totalResolved>=o&&(null!==a?this._filter(r,a):this._resolve(r),!0)},h.prototype._drainQueue=function(){for(var e=this._queue,t=this._limit,n=this._values;e.length>0&&this._inFlight1){o.deprecated("calling Promise.try with more than 1 argument");var c=arguments[1],u=arguments[2];r=s.isArray(c)?a(e).apply(u,c):a(e).call(u,c)}else r=a(e)();var d=l._popContext();return o.checkForgottenReturns(r,d,"Promise.try",l),l._resolveFromSyncValue(r),l},t.prototype._resolveFromSyncValue=function(e){e===s.errorObj?this._rejectCallback(e.e,!1):this._resolveCallback(e,!0)}}},{"./util":82}],66:[function(e,t,n){"use strict";var r=e("./util"),i=r.maybeWrapAsError,o=e("./errors").OperationalError,s=e("./es5"),a=/^(?:name|message|stack|cause)$/;t.exports=function(e,t){return function(n,l){if(null!==e){if(n){var c=function(e){var t;if(function(e){return e instanceof Error&&s.getPrototypeOf(e)===Error.prototype}(e)){(t=new o(e)).name=e.name,t.message=e.message,t.stack=e.stack;for(var n=s.keys(e),i=0;i1){var n,r=new Array(t-1),i=0;for(n=0;n0&&"function"!=typeof e&&"function"!=typeof t){var n=".then() only accepts functions but was passed: "+c.classString(e);arguments.length>1&&(n+=", "+c.classString(t)),this._warn(n)}return this._then(e,t,void 0,void 0,void 0)},k.prototype.done=function(e,t){this._then(e,t,void 0,void 0,void 0)._setIsFinal()},k.prototype.spread=function(e){return"function"!=typeof e?o("expecting a function but got "+c.classString(e)):this.all()._then(e,void 0,void 0,y,void 0)},k.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},k.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new v(this).promise()},k.prototype.error=function(e){return this.caught(c.originatesFromRejection,e)},k.getNewLibraryCopy=t.exports,k.is=function(e){return e instanceof k},k.fromNode=k.fromCallback=function(e){var t=new k(g);t._captureStackTrace();var n=arguments.length>1&&!!Object(arguments[1]).multiArgs,r=D(e)(T(t,n));return r===E&&t._rejectCallback(r.e,!0),t._isFateSealed()||t._setAsyncGuaranteed(),t},k.all=function(e){return new v(e).promise()},k.cast=function(e){var t=_(e);return t instanceof k||((t=new k(g))._captureStackTrace(),t._setFulfilled(),t._rejectionHandler0=e),t},k.resolve=k.fulfilled=k.cast,k.reject=k.rejected=function(e){var t=new k(g);return t._captureStackTrace(),t._rejectCallback(e,!0),t},k.setScheduler=function(e){if("function"!=typeof e)throw new p("expecting a function but got "+c.classString(e));return h.setScheduler(e)},k.prototype._then=function(e,t,n,r,i){var o=void 0!==i,s=o?i:new k(g),l=this._target(),u=l._bitField;o||(s._propagateFrom(this,3),s._captureStackTrace(),void 0===r&&2097152&this._bitField&&(r=50397184&u?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,s));var d=a();if(50397184&u){var f,p,y=l._settlePromiseCtx;33554432&u?(p=l._rejectionHandler0,f=e):16777216&u?(p=l._fulfillmentHandler0,f=t,l._unsetRejectionIsUnhandled()):(y=l._settlePromiseLateCancellationObserver,p=new m("late cancellation observer"),l._attachExtraTrace(p),f=t),h.invoke(y,l,{handler:null===d?f:"function"==typeof f&&c.domainBind(d,f),promise:s,receiver:r,value:p})}else l._addCallbacks(e,t,s,r,d);return s},k.prototype._length=function(){return 65535&this._bitField},k.prototype._isFateSealed=function(){return!!(117506048&this._bitField)},k.prototype._isFollowing=function(){return!(67108864&~this._bitField)},k.prototype._setLength=function(e){this._bitField=-65536&this._bitField|65535&e},k.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},k.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},k.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},k.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},k.prototype._isFinal=function(){return(4194304&this._bitField)>0},k.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},k.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},k.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},k.prototype._setAsyncGuaranteed=function(){h.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},k.prototype._receiverAt=function(e){var t=0===e?this._receiver0:this[4*e-4+3];if(t!==l)return void 0===t&&this._isBound()?this._boundValue():t},k.prototype._promiseAt=function(e){return this[4*e-4+2]},k.prototype._fulfillmentHandlerAt=function(e){return this[4*e-4+0]},k.prototype._rejectionHandlerAt=function(e){return this[4*e-4+1]},k.prototype._boundValue=function(){},k.prototype._migrateCallback0=function(e){e._bitField;var t=e._fulfillmentHandler0,n=e._rejectionHandler0,r=e._promise0,i=e._receiverAt(0);void 0===i&&(i=l),this._addCallbacks(t,n,r,i,null)},k.prototype._migrateCallbackAt=function(e,t){var n=e._fulfillmentHandlerAt(t),r=e._rejectionHandlerAt(t),i=e._promiseAt(t),o=e._receiverAt(t);void 0===o&&(o=l),this._addCallbacks(n,r,i,o,null)},k.prototype._addCallbacks=function(e,t,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof e&&(this._fulfillmentHandler0=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this._rejectionHandler0=null===i?t:c.domainBind(i,t));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof e&&(this[s+0]=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this[s+1]=null===i?t:c.domainBind(i,t))}return this._setLength(o+1),o},k.prototype._proxy=function(e,t){this._addCallbacks(void 0,void 0,t,e,null)},k.prototype._resolveCallback=function(e,t){if(!(117506048&this._bitField)){if(e===this)return this._rejectCallback(r(),!1);var n=_(e,this);if(!(n instanceof k))return this._fulfill(e);t&&this._propagateFrom(n,2);var i=n._target();if(i!==this){var o=i._bitField;if(50397184&o)if(33554432&o)this._fulfill(i._value());else if(16777216&o)this._reject(i._reason());else{var s=new m("late cancellation observer");i._attachExtraTrace(s),this._reject(s)}else{var a=this._length();a>0&&i._migrateCallback0(this);for(var l=1;l>>16)){if(e===this){var n=r();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=e,(65535&t)>0&&(134217728&t?this._settlePromises():h.settlePromises(this))}},k.prototype._reject=function(e){var t=this._bitField;if(!((117506048&t)>>>16)){if(this._setRejected(),this._fulfillmentHandler0=e,this._isFinal())return h.fatalError(e,c.isNode);(65535&t)>0?h.settlePromises(this):this._ensurePossibleRejectionHandled()}},k.prototype._fulfillPromises=function(e,t){for(var n=1;n0){if(16842752&e){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,e),this._rejectPromises(t,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,e),this._fulfillPromises(t,r)}this._setLength(0)}this._clearCancellationData()},k.prototype._settledValue=function(){var e=this._bitField;return 33554432&e?this._rejectionHandler0:16777216&e?this._fulfillmentHandler0:void 0},k.defer=k.pending=function(){return S.deprecated("Promise.defer","new Promise"),{promise:new k(g),resolve:R,reject:O}},c.notEnumerableProp(k,"_makeSelfResolutionError",r),e("./method")(k,g,_,o,S),e("./bind")(k,g,_,S),e("./cancel")(k,v,o,S),e("./direct_resolve")(k),e("./synchronous_inspection")(k),e("./join")(k,v,_,g,h,a),k.Promise=k,k.version="3.4.7",e("./map.js")(k,v,o,_,g,S),e("./call_get.js")(k),e("./using.js")(k,o,_,x,g,S),e("./timers.js")(k,g,S),e("./generators.js")(k,o,g,_,s,S),e("./nodeify.js")(k),e("./promisify.js")(k,g),e("./props.js")(k,v,_,o),e("./race.js")(k,g,_,o),e("./reduce.js")(k,v,o,_,g,S),e("./settle.js")(k,v,S),e("./some.js")(k,v,o),e("./filter.js")(k,g),e("./each.js")(k,g),e("./any.js")(k),c.toFastProperties(k),c.toFastProperties(k.prototype),L({a:1}),L({b:2}),L({c:3}),L(1),L((function(){})),L(void 0),L(!1),L(new k(g)),S.setBounds(d.firstLineError,c.lastLineError),k}}).call(this,e("_process"))},{"./any.js":48,"./async":49,"./bind":50,"./call_get.js":51,"./cancel":52,"./catch_filter":53,"./context":54,"./debuggability":55,"./direct_resolve":56,"./each.js":57,"./errors":58,"./es5":59,"./filter.js":60,"./finally":61,"./generators.js":62,"./join":63,"./map.js":64,"./method":65,"./nodeback":66,"./nodeify.js":67,"./promise_array":69,"./promisify.js":70,"./props.js":71,"./race.js":73,"./reduce.js":74,"./settle.js":76,"./some.js":77,"./synchronous_inspection":78,"./thenables":79,"./timers.js":80,"./using.js":81,"./util":82,_process:101}],69:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o){var s=e("./util");function a(e){var r=this._promise=new t(n);e instanceof t&&r._propagateFrom(e,3),r._setOnCancel(this),this._values=e,this._length=0,this._totalResolved=0,this._init(void 0,-2)}return s.isArray,s.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function e(n,o){var a=r(this._values,this._promise);if(a instanceof t){var l=(a=a._target())._bitField;if(this._values=a,!(50397184&l))return this._promise._setAsyncGuaranteed(),a._then(e,this._reject,void 0,this,o);if(!(33554432&l))return 16777216&l?this._reject(a._reason()):this._cancel();a=a._value()}if(null!==(a=s.asArray(a)))0!==a.length?this._iterate(a):-5===o?this._resolveEmptyArray():this._resolve(function(e){switch(e){case-2:return[];case-3:return{}}}(o));else{var c=i("expecting an array or an iterable object but got "+s.classString(a)).reason();this._promise._rejectCallback(c,!1)}},a.prototype._iterate=function(e){var n=this.getActualLength(e.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;a=this._length&&(this._resolve(this._values),!0)},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(e){return this._totalResolved++,this._reject(e),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var e=this._values;if(this._cancel(),e instanceof t)e.cancel();else for(var n=0;n=n;--r)t.push(r);for(r=e+1;r<=3;++r)t.push(r);return t}(f),m="string"==typeof e||l===r;var g,y="string"==typeof e?"this != null ? this['"+e+"'] : fn":"fn",b="'use strict'; \n var ret = function (Parameters) { \n 'use strict'; \n var len = arguments.length; \n var promise = new Promise(INTERNAL); \n promise._captureStackTrace(); \n var nodeback = nodebackForPromise(promise, "+h+"); \n var ret; \n var callback = tryCatch([GetFunctionCode]); \n switch(len) { \n [CodeForSwitchCase] \n } \n if (ret === errorObj) { \n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n } \n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n return promise; \n }; \n notEnumerableProp(ret, '__isPromisified__', true); \n return ret; \n ".replace("[CodeForSwitchCase]",function(){for(var e="",t=0;t0?", ":"",(m?"ret = callback.call(this, {{args}}, nodeback); break;\n":void 0===l?"ret = callback({{args}}, nodeback); break;\n":"ret = callback.call(receiver, {{args}}, nodeback); break;\n").replace("{{args}}",o).replace(", ",s));var n,r,o,s;return e+" \n default: \n var args = new Array(len + 1); \n var i = 0; \n for (var i = 0; i < len; ++i) { \n args[i] = arguments[i]; \n } \n args[i] = nodeback; \n [CodeForCall] \n break; \n ".replace("[CodeForCall]",m?"ret = callback.apply(this, args);\n":"ret = callback.apply(receiver, args);\n")}()).replace("[GetFunctionCode]",y);return b=b.replace("Parameters",(g=f,i.filledRange(Math.max(g,3),"_arg",""))),new Function("Promise","fn","receiver","withAppended","maybeWrapAsError","nodebackForPromise","tryCatch","errorObj","notEnumerableProp","INTERNAL",b)(t,u,l,s,a,o,i.tryCatch,i.errorObj,i.notEnumerableProp,n)}:function(e,l,c,u,d,h){var f=function(){return this}(),p=e;function m(){var i=l;l===r&&(i=this);var c=new t(n);c._captureStackTrace();var u="string"==typeof p&&this!==f?this[p]:e,d=o(c,h);try{u.apply(i,s(arguments,d))}catch(e){c._rejectCallback(a(e),!0,!0)}return c._isFateSealed()||c._setAsyncGuaranteed(),c}return"string"==typeof p&&(e=u),i.notEnumerableProp(m,"__isPromisified__",!0),m};function y(e,t,n,o,s){for(var a=new RegExp(t.replace(/([$])/,"\\$")+"$"),l=function(e,t,n,r){for(var o=i.inheritedDataKeys(e),s=[],a=0;a=this._length){var n;if(this._isMap)n=function(e){for(var t=new o,n=e.length/2|0,r=0;r>1},t.prototype.props=function(){return d(this)},t.props=function(e){return d(e)}}},{"./es5":59,"./util":82}],72:[function(e,t,n){"use strict";function r(e){this._capacity=e,this._length=0,this._front=0}r.prototype._willBeOverCapacity=function(e){return this._capacity=this._length&&(this._resolve(this._values),!0)},o.prototype._promiseFulfilled=function(e,t){var n=new i;return n._bitField=33554432,n._settledValueField=e,this._promiseResolved(t,n)},o.prototype._promiseRejected=function(e,t){var n=new i;return n._bitField=16777216,n._settledValueField=e,this._promiseResolved(t,n)},t.settle=function(e){return r.deprecated(".settle()",".reflect()"),new o(e).promise()},t.prototype.settle=function(){return t.settle(this)}}},{"./util":82}],77:[function(e,t,n){"use strict";t.exports=function(t,n,r){var i=e("./util"),o=e("./errors").RangeError,s=e("./errors").AggregateError,a=i.isArray,l={};function c(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function u(e,t){if((0|t)!==t||t<0)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var n=new c(e),i=n.promise();return n.setHowMany(t),n.init(),i}i.inherits(c,n),c.prototype._init=function(){if(this._initialized)if(0!==this._howMany){this._init$(void 0,-5);var e=a(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}else this._resolve([])},c.prototype.init=function(){this._initialized=!0,this._init()},c.prototype.setUnwrap=function(){this._unwrap=!0},c.prototype.howMany=function(){return this._howMany},c.prototype.setHowMany=function(e){this._howMany=e},c.prototype._promiseFulfilled=function(e){return this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0)},c.prototype._promiseRejected=function(e){return this._addRejected(e),this._checkOutcome()},c.prototype._promiseCancelled=function(){return this._values instanceof t||null==this._values?this._cancel():(this._addRejected(l),this._checkOutcome())},c.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var e=new s,t=this.length();t0?this._reject(e):this._cancel(),!0}return!1},c.prototype._fulfilled=function(){return this._totalResolved},c.prototype._rejected=function(){return this._values.length-this.length()},c.prototype._addRejected=function(e){this._values.push(e)},c.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},c.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},c.prototype._getRangeError=function(e){var t="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new o(t)},c.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},t.some=function(e,t){return u(e,t)},t.prototype.some=function(e){return u(this,e)},t._SomePromiseArray=c}},{"./errors":58,"./util":82}],78:[function(e,t,n){"use strict";t.exports=function(e){function t(e){void 0!==e?(e=e._target(),this._bitField=e._bitField,this._settledValueField=e._isFateSealed()?e._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}t.prototype._settledValue=function(){return this._settledValueField};var n=t.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},r=t.prototype.error=t.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},i=t.prototype.isFulfilled=function(){return!!(33554432&this._bitField)},o=t.prototype.isRejected=function(){return!!(16777216&this._bitField)},s=t.prototype.isPending=function(){return!(50397184&this._bitField)},a=t.prototype.isResolved=function(){return!!(50331648&this._bitField)};t.prototype.isCancelled=function(){return!!(8454144&this._bitField)},e.prototype.__isCancelled=function(){return!(65536&~this._bitField)},e.prototype._isCancelled=function(){return this._target().__isCancelled()},e.prototype.isCancelled=function(){return!!(8454144&this._target()._bitField)},e.prototype.isPending=function(){return s.call(this._target())},e.prototype.isRejected=function(){return o.call(this._target())},e.prototype.isFulfilled=function(){return i.call(this._target())},e.prototype.isResolved=function(){return a.call(this._target())},e.prototype.value=function(){return n.call(this._target())},e.prototype.reason=function(){var e=this._target();return e._unsetRejectionIsUnhandled(),r.call(e)},e.prototype._value=function(){return this._settledValue()},e.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},e.PromiseInspection=t}},{}],79:[function(e,t,n){"use strict";t.exports=function(t,n){var r=e("./util"),i=r.errorObj,o=r.isObject,s={}.hasOwnProperty;return function(e,a){if(o(e)){if(e instanceof t)return e;var l=function(e){try{return function(e){return e.then}(e)}catch(e){return i.e=e,i}}(e);if(l===i){a&&a._pushContext();var c=t.reject(l.e);return a&&a._popContext(),c}if("function"==typeof l)return function(e){try{return s.call(e,"_promise0")}catch(e){return!1}}(e)?(c=new t(n),e._then(c._fulfill,c._reject,void 0,c,null),c):function(e,o,s){var a=new t(n),l=a;s&&s._pushContext(),a._captureStackTrace(),s&&s._popContext();var c=!0,u=r.tryCatch(o).call(e,(function(e){a&&(a._resolveCallback(e),a=null)}),(function(e){a&&(a._rejectCallback(e,c,!0),a=null)}));return c=!1,a&&u===i&&(a._rejectCallback(u.e,!0,!0),a=null),l}(e,l,a)}return e}}},{"./util":82}],80:[function(e,t,n){"use strict";t.exports=function(t,n,r){var i=e("./util"),o=t.TimeoutError;function s(e){this.handle=e}s.prototype._resultCancelled=function(){clearTimeout(this.handle)};var a=function(e){return l(+this).thenReturn(e)},l=t.delay=function(e,i){var o,l;return void 0!==i?(o=t.resolve(i)._then(a,null,null,e,void 0),r.cancellation()&&i instanceof t&&o._setOnCancel(i)):(o=new t(n),l=setTimeout((function(){o._fulfill()}),+e),r.cancellation()&&o._setOnCancel(new s(l)),o._captureStackTrace()),o._setAsyncGuaranteed(),o};function c(e){return clearTimeout(this.handle),e}function u(e){throw clearTimeout(this.handle),e}t.prototype.delay=function(e){return l(e,this)},t.prototype.timeout=function(e,t){var n,a;e=+e;var l=new s(setTimeout((function(){n.isPending()&&function(e,t,n){var r;r="string"!=typeof t?t instanceof Error?t:new o("operation timed out"):new o(t),i.markAsOriginatingFromRejection(r),e._attachExtraTrace(r),e._reject(r),null!=n&&n.cancel()}(n,t,a)}),e));return r.cancellation()?(a=this.then(),(n=a._then(c,u,void 0,l,void 0))._setOnCancel(l)):n=this._then(c,u,void 0,l,void 0),n}}},{"./util":82}],81:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o,s){var a=e("./util"),l=e("./errors").TypeError,c=e("./util").inherits,u=a.errorObj,d=a.tryCatch,h={};function f(e){setTimeout((function(){throw e}),0)}function p(e,t,n){this._data=e,this._promise=t,this._context=n}function m(e,t,n){this.constructor$(e,t,n)}function g(e){return p.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}function y(e){this.length=e,this.promise=null,this[e-1]=null}p.prototype.data=function(){return this._data},p.prototype.promise=function(){return this._promise},p.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():h},p.prototype.tryDispose=function(e){var t=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=t!==h?this.doDispose(t,e):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},p.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},c(m,p),m.prototype.doDispose=function(e,t){return this.data().call(e,e,t)},y.prototype._resultCancelled=function(){for(var e=this.length,n=0;n=s)return a._fulfill();var l=function(e){var t=r(e);return t!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&t._setDisposable(e._getDisposer()),t}(e[i++]);if(l instanceof t&&l._isDisposable()){try{l=r(l._getDisposer().tryDispose(n),e.promise)}catch(e){return f(e)}if(l instanceof t)return l._then(o,f,null,null,null)}o()}(),a}(h,e)}));return h.promise=S,S._setOnCancel(h),S},t.prototype._setDisposable=function(e){this._bitField=131072|this._bitField,this._disposer=e},t.prototype._isDisposable=function(){return(131072&this._bitField)>0},t.prototype._getDisposer=function(){return this._disposer},t.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},t.prototype.disposer=function(e){if("function"==typeof e)return new m(e,this,i());throw new l}}},{"./errors":58,"./util":82}],82:[function(e,t,r){(function(n,r){"use strict";var i,o=e("./es5"),s="undefined"==typeof navigator,a={e:{}},l="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==r?r:void 0!==this?this:null;function c(){try{var e=i;return i=null,e.apply(this,arguments)}catch(e){return a.e=e,a}}function u(e){return null==e||!0===e||!1===e||"string"==typeof e||"number"==typeof e}function d(e,t,n){if(u(e))return e;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return o.defineProperty(e,t,r),e}var h=function(){var e=[Array.prototype,Object.prototype,Function.prototype],t=function(t){for(var n=0;n1,r=t.length>0&&!(1===t.length&&"constructor"===t[0]),i=f.test(e+"")&&o.names(e).length>0;if(n||r||i)return!0}return!1}catch(e){return!1}},isIdentifier:function(e){return p.test(e)},inheritedDataKeys:h,getDataPropertyOrDefault:function(e,t,n){if(!o.isES5)return{}.hasOwnProperty.call(e,t)?e[t]:void 0;var r=Object.getOwnPropertyDescriptor(e,t);return null!=r?null==r.get&&null==r.set?r.value:n:void 0},thrower:function(e){throw e},isArray:o.isArray,asArray:v,notEnumerableProp:d,isPrimitive:u,isObject:function(e){return"function"==typeof e||"object"==typeof e&&null!==e},isError:g,canEvaluate:s,errorObj:a,tryCatch:function(e){return i=e,c},inherits:function(e,t){var n={}.hasOwnProperty;function r(){for(var r in this.constructor=e,this.constructor$=t,t.prototype)n.call(t.prototype,r)&&"$"!==r.charAt(r.length-1)&&(this[r+"$"]=t.prototype[r])}return r.prototype=t.prototype,e.prototype=new r,e.prototype},withAppended:function(e,t){var n,r=e.length,i=new Array(r+1);for(n=0;n10||C[0]>0),M.isNode&&M.toFastProperties(n);try{throw new Error}catch(e){M.lastLineError=e}t.exports=M}).call(this,e("_process"),void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./es5":59,_process:101}],83:[function(e,t,r){(function(t){"use strict";var n=e("base64-js"),i=e("ieee754"),o=e("isarray");function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,n);case"utf8":case"utf-8":return T(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return k(this,t,n);case"base64":return M(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,i){var o,s=1,a=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,n/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var u=-1;for(o=n;oa&&(n=a-l),o=n;o>=0;o--){for(var d=!0,h=0;hi&&(r=i):r=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,i=n%256,o.push(i),o.push(r);return o}(t,e.length-n),e,n,r)}function M(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function T(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:c>223?3:c>191?2:1;if(i+d<=n)switch(d){case 1:c<128&&(u=c);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&c)<<6|63&o)>127&&(u=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&c)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(u=l)}null===u?(u=65533,d=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),i+=d}return function(e){var t=e.length;if(t<=E)return String.fromCharCode.apply(String,e);for(var n="",r=0;r0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},l.prototype.compare=function(e,t,n,r,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(r,i),u=e.slice(t,n),d=0;di)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return _(this,e,t,n);case"utf8":case"utf-8":return v(this,e,t,n);case"ascii":return w(this,e,t,n);case"latin1":case"binary":return x(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var E=4096;function D(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;ii)&&(n=i);for(var o="",s=t;sn)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,n,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function I(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function P(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function N(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function H(e,t,n,r,o){return o||N(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function j(e,t,n,r,o){return o||N(e,0,n,8),i.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(i*=256);)r+=this[e+--t]*i;return r},l.prototype.readUInt8=function(e,t){return t||L(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||L(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||L(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this[e],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){t||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return t||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||A(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+n},l.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):I(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):I(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):P(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):P(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);A(this,e,t,n,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):I(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):I(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):P(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):P(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,n){return H(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return H(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return j(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return j(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function W(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":47,ieee754:86,isarray:87}],84:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=[{"Typeface name":"Symbol","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Symbol","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"33","Unicode hex":"21"},{"Typeface name":"Symbol","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"8704","Unicode hex":"2200"},{"Typeface name":"Symbol","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"35","Unicode hex":"23"},{"Typeface name":"Symbol","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"8707","Unicode hex":"2203"},{"Typeface name":"Symbol","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"37","Unicode hex":"25"},{"Typeface name":"Symbol","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"38","Unicode hex":"26"},{"Typeface name":"Symbol","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"8717","Unicode hex":"220D"},{"Typeface name":"Symbol","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"40","Unicode hex":"28"},{"Typeface name":"Symbol","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"41","Unicode hex":"29"},{"Typeface name":"Symbol","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"42","Unicode hex":"2A"},{"Typeface name":"Symbol","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"43","Unicode hex":"2B"},{"Typeface name":"Symbol","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"44","Unicode hex":"2C"},{"Typeface name":"Symbol","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"8722","Unicode hex":"2212"},{"Typeface name":"Symbol","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"46","Unicode hex":"2E"},{"Typeface name":"Symbol","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"47","Unicode hex":"2F"},{"Typeface name":"Symbol","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"48","Unicode hex":"30"},{"Typeface name":"Symbol","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"49","Unicode hex":"31"},{"Typeface name":"Symbol","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"50","Unicode hex":"32"},{"Typeface name":"Symbol","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"51","Unicode hex":"33"},{"Typeface name":"Symbol","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"52","Unicode hex":"34"},{"Typeface name":"Symbol","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"53","Unicode hex":"35"},{"Typeface name":"Symbol","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"54","Unicode hex":"36"},{"Typeface name":"Symbol","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"55","Unicode hex":"37"},{"Typeface name":"Symbol","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"56","Unicode hex":"38"},{"Typeface name":"Symbol","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"57","Unicode hex":"39"},{"Typeface name":"Symbol","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"58","Unicode hex":"3A"},{"Typeface name":"Symbol","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"59","Unicode hex":"3B"},{"Typeface name":"Symbol","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"60","Unicode hex":"3C"},{"Typeface name":"Symbol","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"61","Unicode hex":"3D"},{"Typeface name":"Symbol","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"62","Unicode hex":"3E"},{"Typeface name":"Symbol","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"63","Unicode hex":"3F"},{"Typeface name":"Symbol","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"8773","Unicode hex":"2245"},{"Typeface name":"Symbol","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"913","Unicode hex":"391"},{"Typeface name":"Symbol","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"914","Unicode hex":"392"},{"Typeface name":"Symbol","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"935","Unicode hex":"3A7"},{"Typeface name":"Symbol","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"916","Unicode hex":"394"},{"Typeface name":"Symbol","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"917","Unicode hex":"395"},{"Typeface name":"Symbol","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"934","Unicode hex":"3A6"},{"Typeface name":"Symbol","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"915","Unicode hex":"393"},{"Typeface name":"Symbol","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"919","Unicode hex":"397"},{"Typeface name":"Symbol","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"921","Unicode hex":"399"},{"Typeface name":"Symbol","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"977","Unicode hex":"3D1"},{"Typeface name":"Symbol","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"922","Unicode hex":"39A"},{"Typeface name":"Symbol","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"923","Unicode hex":"39B"},{"Typeface name":"Symbol","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"924","Unicode hex":"39C"},{"Typeface name":"Symbol","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"925","Unicode hex":"39D"},{"Typeface name":"Symbol","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"927","Unicode hex":"39F"},{"Typeface name":"Symbol","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"928","Unicode hex":"3A0"},{"Typeface name":"Symbol","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"920","Unicode hex":"398"},{"Typeface name":"Symbol","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"929","Unicode hex":"3A1"},{"Typeface name":"Symbol","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"931","Unicode hex":"3A3"},{"Typeface name":"Symbol","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"932","Unicode hex":"3A4"},{"Typeface name":"Symbol","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"933","Unicode hex":"3A5"},{"Typeface name":"Symbol","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"962","Unicode hex":"3C2"},{"Typeface name":"Symbol","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"937","Unicode hex":"3A9"},{"Typeface name":"Symbol","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"926","Unicode hex":"39E"},{"Typeface name":"Symbol","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"936","Unicode hex":"3A8"},{"Typeface name":"Symbol","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"918","Unicode hex":"396"},{"Typeface name":"Symbol","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"91","Unicode hex":"5B"},{"Typeface name":"Symbol","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"8756","Unicode hex":"2234"},{"Typeface name":"Symbol","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"93","Unicode hex":"5D"},{"Typeface name":"Symbol","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"8869","Unicode hex":"22A5"},{"Typeface name":"Symbol","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"95","Unicode hex":"5F"},{"Typeface name":"Symbol","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"8254","Unicode hex":"203E"},{"Typeface name":"Symbol","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"945","Unicode hex":"3B1"},{"Typeface name":"Symbol","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"946","Unicode hex":"3B2"},{"Typeface name":"Symbol","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"967","Unicode hex":"3C7"},{"Typeface name":"Symbol","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"948","Unicode hex":"3B4"},{"Typeface name":"Symbol","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"949","Unicode hex":"3B5"},{"Typeface name":"Symbol","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"966","Unicode hex":"3C6"},{"Typeface name":"Symbol","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"947","Unicode hex":"3B3"},{"Typeface name":"Symbol","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"951","Unicode hex":"3B7"},{"Typeface name":"Symbol","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"953","Unicode hex":"3B9"},{"Typeface name":"Symbol","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"981","Unicode hex":"3D5"},{"Typeface name":"Symbol","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"954","Unicode hex":"3BA"},{"Typeface name":"Symbol","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"955","Unicode hex":"3BB"},{"Typeface name":"Symbol","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"956","Unicode hex":"3BC"},{"Typeface name":"Symbol","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"957","Unicode hex":"3BD"},{"Typeface name":"Symbol","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"959","Unicode hex":"3BF"},{"Typeface name":"Symbol","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"960","Unicode hex":"3C0"},{"Typeface name":"Symbol","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"952","Unicode hex":"3B8"},{"Typeface name":"Symbol","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"961","Unicode hex":"3C1"},{"Typeface name":"Symbol","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"963","Unicode hex":"3C3"},{"Typeface name":"Symbol","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"964","Unicode hex":"3C4"},{"Typeface name":"Symbol","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"965","Unicode hex":"3C5"},{"Typeface name":"Symbol","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"982","Unicode hex":"3D6"},{"Typeface name":"Symbol","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"969","Unicode hex":"3C9"},{"Typeface name":"Symbol","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"958","Unicode hex":"3BE"},{"Typeface name":"Symbol","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"968","Unicode hex":"3C8"},{"Typeface name":"Symbol","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"950","Unicode hex":"3B6"},{"Typeface name":"Symbol","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"123","Unicode hex":"7B"},{"Typeface name":"Symbol","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"124","Unicode hex":"7C"},{"Typeface name":"Symbol","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"125","Unicode hex":"7D"},{"Typeface name":"Symbol","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"126","Unicode hex":"7E"},{"Typeface name":"Symbol","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"8364","Unicode hex":"20AC"},{"Typeface name":"Symbol","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"978","Unicode hex":"3D2"},{"Typeface name":"Symbol","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"8242","Unicode hex":"2032"},{"Typeface name":"Symbol","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"8804","Unicode hex":"2264"},{"Typeface name":"Symbol","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"8260","Unicode hex":"2044"},{"Typeface name":"Symbol","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"8734","Unicode hex":"221E"},{"Typeface name":"Symbol","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"402","Unicode hex":"192"},{"Typeface name":"Symbol","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"9827","Unicode hex":"2663"},{"Typeface name":"Symbol","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"9830","Unicode hex":"2666"},{"Typeface name":"Symbol","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"9829","Unicode hex":"2665"},{"Typeface name":"Symbol","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"9824","Unicode hex":"2660"},{"Typeface name":"Symbol","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"8596","Unicode hex":"2194"},{"Typeface name":"Symbol","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"8592","Unicode hex":"2190"},{"Typeface name":"Symbol","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"8593","Unicode hex":"2191"},{"Typeface name":"Symbol","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"8594","Unicode hex":"2192"},{"Typeface name":"Symbol","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"8595","Unicode hex":"2193"},{"Typeface name":"Symbol","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"176","Unicode hex":"B0"},{"Typeface name":"Symbol","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"177","Unicode hex":"B1"},{"Typeface name":"Symbol","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"8243","Unicode hex":"2033"},{"Typeface name":"Symbol","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"8805","Unicode hex":"2265"},{"Typeface name":"Symbol","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"215","Unicode hex":"D7"},{"Typeface name":"Symbol","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"8733","Unicode hex":"221D"},{"Typeface name":"Symbol","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"8706","Unicode hex":"2202"},{"Typeface name":"Symbol","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"8226","Unicode hex":"2022"},{"Typeface name":"Symbol","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"247","Unicode hex":"F7"},{"Typeface name":"Symbol","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"8800","Unicode hex":"2260"},{"Typeface name":"Symbol","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"8801","Unicode hex":"2261"},{"Typeface name":"Symbol","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"8776","Unicode hex":"2248"},{"Typeface name":"Symbol","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"8230","Unicode hex":"2026"},{"Typeface name":"Symbol","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"9168","Unicode hex":"23D0"},{"Typeface name":"Symbol","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"9135","Unicode hex":"23AF"},{"Typeface name":"Symbol","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"8629","Unicode hex":"21B5"},{"Typeface name":"Symbol","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"8501","Unicode hex":"2135"},{"Typeface name":"Symbol","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"8465","Unicode hex":"2111"},{"Typeface name":"Symbol","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"8476","Unicode hex":"211C"},{"Typeface name":"Symbol","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"8472","Unicode hex":"2118"},{"Typeface name":"Symbol","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"8855","Unicode hex":"2297"},{"Typeface name":"Symbol","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"8853","Unicode hex":"2295"},{"Typeface name":"Symbol","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"8709","Unicode hex":"2205"},{"Typeface name":"Symbol","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"8745","Unicode hex":"2229"},{"Typeface name":"Symbol","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"8746","Unicode hex":"222A"},{"Typeface name":"Symbol","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"8835","Unicode hex":"2283"},{"Typeface name":"Symbol","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"8839","Unicode hex":"2287"},{"Typeface name":"Symbol","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"8836","Unicode hex":"2284"},{"Typeface name":"Symbol","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"8834","Unicode hex":"2282"},{"Typeface name":"Symbol","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"8838","Unicode hex":"2286"},{"Typeface name":"Symbol","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"8712","Unicode hex":"2208"},{"Typeface name":"Symbol","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"8713","Unicode hex":"2209"},{"Typeface name":"Symbol","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"8736","Unicode hex":"2220"},{"Typeface name":"Symbol","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"8711","Unicode hex":"2207"},{"Typeface name":"Symbol","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"174","Unicode hex":"AE"},{"Typeface name":"Symbol","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"169","Unicode hex":"A9"},{"Typeface name":"Symbol","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"8482","Unicode hex":"2122"},{"Typeface name":"Symbol","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"8719","Unicode hex":"220F"},{"Typeface name":"Symbol","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"8730","Unicode hex":"221A"},{"Typeface name":"Symbol","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"8901","Unicode hex":"22C5"},{"Typeface name":"Symbol","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"172","Unicode hex":"AC"},{"Typeface name":"Symbol","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"8743","Unicode hex":"2227"},{"Typeface name":"Symbol","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"8744","Unicode hex":"2228"},{"Typeface name":"Symbol","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"8660","Unicode hex":"21D4"},{"Typeface name":"Symbol","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"8656","Unicode hex":"21D0"},{"Typeface name":"Symbol","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"8657","Unicode hex":"21D1"},{"Typeface name":"Symbol","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"8658","Unicode hex":"21D2"},{"Typeface name":"Symbol","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"8659","Unicode hex":"21D3"},{"Typeface name":"Symbol","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"9674","Unicode hex":"25CA"},{"Typeface name":"Symbol","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"12296","Unicode hex":"3008"},{"Typeface name":"Symbol","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"174","Unicode hex":"AE"},{"Typeface name":"Symbol","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"169","Unicode hex":"A9"},{"Typeface name":"Symbol","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"8482","Unicode hex":"2122"},{"Typeface name":"Symbol","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"8721","Unicode hex":"2211"},{"Typeface name":"Symbol","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"9115","Unicode hex":"239B"},{"Typeface name":"Symbol","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"9116","Unicode hex":"239C"},{"Typeface name":"Symbol","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"9117","Unicode hex":"239D"},{"Typeface name":"Symbol","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"9121","Unicode hex":"23A1"},{"Typeface name":"Symbol","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"9122","Unicode hex":"23A2"},{"Typeface name":"Symbol","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"9123","Unicode hex":"23A3"},{"Typeface name":"Symbol","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"9127","Unicode hex":"23A7"},{"Typeface name":"Symbol","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"9128","Unicode hex":"23A8"},{"Typeface name":"Symbol","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"9129","Unicode hex":"23A9"},{"Typeface name":"Symbol","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"9130","Unicode hex":"23AA"},{"Typeface name":"Symbol","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"63743","Unicode hex":"F8FF"},{"Typeface name":"Symbol","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"12297","Unicode hex":"3009"},{"Typeface name":"Symbol","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"8747","Unicode hex":"222B"},{"Typeface name":"Symbol","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"8992","Unicode hex":"2320"},{"Typeface name":"Symbol","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"9134","Unicode hex":"23AE"},{"Typeface name":"Symbol","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"8993","Unicode hex":"2321"},{"Typeface name":"Symbol","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"9118","Unicode hex":"239E"},{"Typeface name":"Symbol","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"9119","Unicode hex":"239F"},{"Typeface name":"Symbol","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"9120","Unicode hex":"23A0"},{"Typeface name":"Symbol","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"9124","Unicode hex":"23A4"},{"Typeface name":"Symbol","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"9125","Unicode hex":"23A5"},{"Typeface name":"Symbol","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"9126","Unicode hex":"23A6"},{"Typeface name":"Symbol","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"9131","Unicode hex":"23AB"},{"Typeface name":"Symbol","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"9132","Unicode hex":"23AC"},{"Typeface name":"Symbol","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"9133","Unicode hex":"23AD"},{"Typeface name":"Webdings","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Webdings","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128375","Unicode hex":"1F577"},{"Typeface name":"Webdings","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"128376","Unicode hex":"1F578"},{"Typeface name":"Webdings","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"128370","Unicode hex":"1F572"},{"Typeface name":"Webdings","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128374","Unicode hex":"1F576"},{"Typeface name":"Webdings","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"127942","Unicode hex":"1F3C6"},{"Typeface name":"Webdings","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"127894","Unicode hex":"1F396"},{"Typeface name":"Webdings","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128391","Unicode hex":"1F587"},{"Typeface name":"Webdings","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128488","Unicode hex":"1F5E8"},{"Typeface name":"Webdings","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"128489","Unicode hex":"1F5E9"},{"Typeface name":"Webdings","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128496","Unicode hex":"1F5F0"},{"Typeface name":"Webdings","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128497","Unicode hex":"1F5F1"},{"Typeface name":"Webdings","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"127798","Unicode hex":"1F336"},{"Typeface name":"Webdings","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"127895","Unicode hex":"1F397"},{"Typeface name":"Webdings","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128638","Unicode hex":"1F67E"},{"Typeface name":"Webdings","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128636","Unicode hex":"1F67C"},{"Typeface name":"Webdings","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128469","Unicode hex":"1F5D5"},{"Typeface name":"Webdings","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128470","Unicode hex":"1F5D6"},{"Typeface name":"Webdings","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128471","Unicode hex":"1F5D7"},{"Typeface name":"Webdings","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"9204","Unicode hex":"23F4"},{"Typeface name":"Webdings","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"9205","Unicode hex":"23F5"},{"Typeface name":"Webdings","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"9206","Unicode hex":"23F6"},{"Typeface name":"Webdings","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"9207","Unicode hex":"23F7"},{"Typeface name":"Webdings","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"9194","Unicode hex":"23EA"},{"Typeface name":"Webdings","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"9193","Unicode hex":"23E9"},{"Typeface name":"Webdings","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"9198","Unicode hex":"23EE"},{"Typeface name":"Webdings","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"9197","Unicode hex":"23ED"},{"Typeface name":"Webdings","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"9208","Unicode hex":"23F8"},{"Typeface name":"Webdings","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"9209","Unicode hex":"23F9"},{"Typeface name":"Webdings","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"9210","Unicode hex":"23FA"},{"Typeface name":"Webdings","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"128474","Unicode hex":"1F5DA"},{"Typeface name":"Webdings","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"128499","Unicode hex":"1F5F3"},{"Typeface name":"Webdings","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128736","Unicode hex":"1F6E0"},{"Typeface name":"Webdings","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"127959","Unicode hex":"1F3D7"},{"Typeface name":"Webdings","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"127960","Unicode hex":"1F3D8"},{"Typeface name":"Webdings","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"127961","Unicode hex":"1F3D9"},{"Typeface name":"Webdings","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"127962","Unicode hex":"1F3DA"},{"Typeface name":"Webdings","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"127964","Unicode hex":"1F3DC"},{"Typeface name":"Webdings","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"127981","Unicode hex":"1F3ED"},{"Typeface name":"Webdings","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"127963","Unicode hex":"1F3DB"},{"Typeface name":"Webdings","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"127968","Unicode hex":"1F3E0"},{"Typeface name":"Webdings","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"127958","Unicode hex":"1F3D6"},{"Typeface name":"Webdings","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"127965","Unicode hex":"1F3DD"},{"Typeface name":"Webdings","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128739","Unicode hex":"1F6E3"},{"Typeface name":"Webdings","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"128269","Unicode hex":"1F50D"},{"Typeface name":"Webdings","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"127956","Unicode hex":"1F3D4"},{"Typeface name":"Webdings","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128065","Unicode hex":"1F441"},{"Typeface name":"Webdings","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"128066","Unicode hex":"1F442"},{"Typeface name":"Webdings","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"127966","Unicode hex":"1F3DE"},{"Typeface name":"Webdings","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"127957","Unicode hex":"1F3D5"},{"Typeface name":"Webdings","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"128740","Unicode hex":"1F6E4"},{"Typeface name":"Webdings","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"127967","Unicode hex":"1F3DF"},{"Typeface name":"Webdings","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"128755","Unicode hex":"1F6F3"},{"Typeface name":"Webdings","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"128364","Unicode hex":"1F56C"},{"Typeface name":"Webdings","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"128363","Unicode hex":"1F56B"},{"Typeface name":"Webdings","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128360","Unicode hex":"1F568"},{"Typeface name":"Webdings","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"128264","Unicode hex":"1F508"},{"Typeface name":"Webdings","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"127892","Unicode hex":"1F394"},{"Typeface name":"Webdings","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"127893","Unicode hex":"1F395"},{"Typeface name":"Webdings","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"128492","Unicode hex":"1F5EC"},{"Typeface name":"Webdings","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128637","Unicode hex":"1F67D"},{"Typeface name":"Webdings","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"128493","Unicode hex":"1F5ED"},{"Typeface name":"Webdings","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"128490","Unicode hex":"1F5EA"},{"Typeface name":"Webdings","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"128491","Unicode hex":"1F5EB"},{"Typeface name":"Webdings","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"11156","Unicode hex":"2B94"},{"Typeface name":"Webdings","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"10004","Unicode hex":"2714"},{"Typeface name":"Webdings","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"128690","Unicode hex":"1F6B2"},{"Typeface name":"Webdings","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"11036","Unicode hex":"2B1C"},{"Typeface name":"Webdings","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"128737","Unicode hex":"1F6E1"},{"Typeface name":"Webdings","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"128230","Unicode hex":"1F4E6"},{"Typeface name":"Webdings","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"128753","Unicode hex":"1F6F1"},{"Typeface name":"Webdings","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"11035","Unicode hex":"2B1B"},{"Typeface name":"Webdings","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"128657","Unicode hex":"1F691"},{"Typeface name":"Webdings","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"128712","Unicode hex":"1F6C8"},{"Typeface name":"Webdings","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"128745","Unicode hex":"1F6E9"},{"Typeface name":"Webdings","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"128752","Unicode hex":"1F6F0"},{"Typeface name":"Webdings","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"128968","Unicode hex":"1F7C8"},{"Typeface name":"Webdings","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"128372","Unicode hex":"1F574"},{"Typeface name":"Webdings","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"11044","Unicode hex":"2B24"},{"Typeface name":"Webdings","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"128741","Unicode hex":"1F6E5"},{"Typeface name":"Webdings","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"128660","Unicode hex":"1F694"},{"Typeface name":"Webdings","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"128472","Unicode hex":"1F5D8"},{"Typeface name":"Webdings","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"128473","Unicode hex":"1F5D9"},{"Typeface name":"Webdings","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"10067","Unicode hex":"2753"},{"Typeface name":"Webdings","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"128754","Unicode hex":"1F6F2"},{"Typeface name":"Webdings","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"128647","Unicode hex":"1F687"},{"Typeface name":"Webdings","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"128653","Unicode hex":"1F68D"},{"Typeface name":"Webdings","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"9971","Unicode hex":"26F3"},{"Typeface name":"Webdings","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"10680","Unicode hex":"29B8"},{"Typeface name":"Webdings","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"8854","Unicode hex":"2296"},{"Typeface name":"Webdings","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"128685","Unicode hex":"1F6AD"},{"Typeface name":"Webdings","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"128494","Unicode hex":"1F5EE"},{"Typeface name":"Webdings","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"9168","Unicode hex":"23D0"},{"Typeface name":"Webdings","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128495","Unicode hex":"1F5EF"},{"Typeface name":"Webdings","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128498","Unicode hex":"1F5F2"},{"Typeface name":"Webdings","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"128697","Unicode hex":"1F6B9"},{"Typeface name":"Webdings","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"128698","Unicode hex":"1F6BA"},{"Typeface name":"Webdings","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"128713","Unicode hex":"1F6C9"},{"Typeface name":"Webdings","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"128714","Unicode hex":"1F6CA"},{"Typeface name":"Webdings","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"128700","Unicode hex":"1F6BC"},{"Typeface name":"Webdings","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"128125","Unicode hex":"1F47D"},{"Typeface name":"Webdings","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"127947","Unicode hex":"1F3CB"},{"Typeface name":"Webdings","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"9975","Unicode hex":"26F7"},{"Typeface name":"Webdings","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"127938","Unicode hex":"1F3C2"},{"Typeface name":"Webdings","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"127948","Unicode hex":"1F3CC"},{"Typeface name":"Webdings","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"127946","Unicode hex":"1F3CA"},{"Typeface name":"Webdings","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"127940","Unicode hex":"1F3C4"},{"Typeface name":"Webdings","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"127949","Unicode hex":"1F3CD"},{"Typeface name":"Webdings","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"127950","Unicode hex":"1F3CE"},{"Typeface name":"Webdings","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"128664","Unicode hex":"1F698"},{"Typeface name":"Webdings","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"128480","Unicode hex":"1F5E0"},{"Typeface name":"Webdings","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"128738","Unicode hex":"1F6E2"},{"Typeface name":"Webdings","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"128176","Unicode hex":"1F4B0"},{"Typeface name":"Webdings","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"127991","Unicode hex":"1F3F7"},{"Typeface name":"Webdings","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"128179","Unicode hex":"1F4B3"},{"Typeface name":"Webdings","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"128106","Unicode hex":"1F46A"},{"Typeface name":"Webdings","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"128481","Unicode hex":"1F5E1"},{"Typeface name":"Webdings","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128482","Unicode hex":"1F5E2"},{"Typeface name":"Webdings","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"128483","Unicode hex":"1F5E3"},{"Typeface name":"Webdings","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"10031","Unicode hex":"272F"},{"Typeface name":"Webdings","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"128388","Unicode hex":"1F584"},{"Typeface name":"Webdings","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128389","Unicode hex":"1F585"},{"Typeface name":"Webdings","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128387","Unicode hex":"1F583"},{"Typeface name":"Webdings","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128390","Unicode hex":"1F586"},{"Typeface name":"Webdings","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"128441","Unicode hex":"1F5B9"},{"Typeface name":"Webdings","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"128442","Unicode hex":"1F5BA"},{"Typeface name":"Webdings","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"128443","Unicode hex":"1F5BB"},{"Typeface name":"Webdings","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"128373","Unicode hex":"1F575"},{"Typeface name":"Webdings","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"128368","Unicode hex":"1F570"},{"Typeface name":"Webdings","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"128445","Unicode hex":"1F5BD"},{"Typeface name":"Webdings","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"128446","Unicode hex":"1F5BE"},{"Typeface name":"Webdings","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128203","Unicode hex":"1F4CB"},{"Typeface name":"Webdings","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128466","Unicode hex":"1F5D2"},{"Typeface name":"Webdings","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128467","Unicode hex":"1F5D3"},{"Typeface name":"Webdings","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"128366","Unicode hex":"1F56E"},{"Typeface name":"Webdings","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"128218","Unicode hex":"1F4DA"},{"Typeface name":"Webdings","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128478","Unicode hex":"1F5DE"},{"Typeface name":"Webdings","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128479","Unicode hex":"1F5DF"},{"Typeface name":"Webdings","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"128451","Unicode hex":"1F5C3"},{"Typeface name":"Webdings","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128450","Unicode hex":"1F5C2"},{"Typeface name":"Webdings","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"128444","Unicode hex":"1F5BC"},{"Typeface name":"Webdings","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"127917","Unicode hex":"1F3AD"},{"Typeface name":"Webdings","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"127900","Unicode hex":"1F39C"},{"Typeface name":"Webdings","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"127896","Unicode hex":"1F398"},{"Typeface name":"Webdings","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"127897","Unicode hex":"1F399"},{"Typeface name":"Webdings","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"127911","Unicode hex":"1F3A7"},{"Typeface name":"Webdings","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"128191","Unicode hex":"1F4BF"},{"Typeface name":"Webdings","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"127902","Unicode hex":"1F39E"},{"Typeface name":"Webdings","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"128247","Unicode hex":"1F4F7"},{"Typeface name":"Webdings","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"127903","Unicode hex":"1F39F"},{"Typeface name":"Webdings","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"127916","Unicode hex":"1F3AC"},{"Typeface name":"Webdings","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"128253","Unicode hex":"1F4FD"},{"Typeface name":"Webdings","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128249","Unicode hex":"1F4F9"},{"Typeface name":"Webdings","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"128254","Unicode hex":"1F4FE"},{"Typeface name":"Webdings","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"128251","Unicode hex":"1F4FB"},{"Typeface name":"Webdings","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"127898","Unicode hex":"1F39A"},{"Typeface name":"Webdings","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"127899","Unicode hex":"1F39B"},{"Typeface name":"Webdings","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"128250","Unicode hex":"1F4FA"},{"Typeface name":"Webdings","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"128187","Unicode hex":"1F4BB"},{"Typeface name":"Webdings","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"128421","Unicode hex":"1F5A5"},{"Typeface name":"Webdings","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"128422","Unicode hex":"1F5A6"},{"Typeface name":"Webdings","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"128423","Unicode hex":"1F5A7"},{"Typeface name":"Webdings","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"128377","Unicode hex":"1F579"},{"Typeface name":"Webdings","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"127918","Unicode hex":"1F3AE"},{"Typeface name":"Webdings","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"128379","Unicode hex":"1F57B"},{"Typeface name":"Webdings","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"128380","Unicode hex":"1F57C"},{"Typeface name":"Webdings","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"128223","Unicode hex":"1F4DF"},{"Typeface name":"Webdings","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"128385","Unicode hex":"1F581"},{"Typeface name":"Webdings","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"128384","Unicode hex":"1F580"},{"Typeface name":"Webdings","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"128424","Unicode hex":"1F5A8"},{"Typeface name":"Webdings","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128425","Unicode hex":"1F5A9"},{"Typeface name":"Webdings","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128447","Unicode hex":"1F5BF"},{"Typeface name":"Webdings","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128426","Unicode hex":"1F5AA"},{"Typeface name":"Webdings","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128476","Unicode hex":"1F5DC"},{"Typeface name":"Webdings","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128274","Unicode hex":"1F512"},{"Typeface name":"Webdings","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128275","Unicode hex":"1F513"},{"Typeface name":"Webdings","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128477","Unicode hex":"1F5DD"},{"Typeface name":"Webdings","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128229","Unicode hex":"1F4E5"},{"Typeface name":"Webdings","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128228","Unicode hex":"1F4E4"},{"Typeface name":"Webdings","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128371","Unicode hex":"1F573"},{"Typeface name":"Webdings","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"127779","Unicode hex":"1F323"},{"Typeface name":"Webdings","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"127780","Unicode hex":"1F324"},{"Typeface name":"Webdings","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"127781","Unicode hex":"1F325"},{"Typeface name":"Webdings","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"127782","Unicode hex":"1F326"},{"Typeface name":"Webdings","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"9729","Unicode hex":"2601"},{"Typeface name":"Webdings","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"127784","Unicode hex":"1F328"},{"Typeface name":"Webdings","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"127783","Unicode hex":"1F327"},{"Typeface name":"Webdings","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"127785","Unicode hex":"1F329"},{"Typeface name":"Webdings","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"127786","Unicode hex":"1F32A"},{"Typeface name":"Webdings","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"127788","Unicode hex":"1F32C"},{"Typeface name":"Webdings","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"127787","Unicode hex":"1F32B"},{"Typeface name":"Webdings","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"127772","Unicode hex":"1F31C"},{"Typeface name":"Webdings","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"127777","Unicode hex":"1F321"},{"Typeface name":"Webdings","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"128715","Unicode hex":"1F6CB"},{"Typeface name":"Webdings","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"128719","Unicode hex":"1F6CF"},{"Typeface name":"Webdings","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"127869","Unicode hex":"1F37D"},{"Typeface name":"Webdings","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"127864","Unicode hex":"1F378"},{"Typeface name":"Webdings","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"128718","Unicode hex":"1F6CE"},{"Typeface name":"Webdings","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"128717","Unicode hex":"1F6CD"},{"Typeface name":"Webdings","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"9413","Unicode hex":"24C5"},{"Typeface name":"Webdings","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"9855","Unicode hex":"267F"},{"Typeface name":"Webdings","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"128710","Unicode hex":"1F6C6"},{"Typeface name":"Webdings","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"128392","Unicode hex":"1F588"},{"Typeface name":"Webdings","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"127891","Unicode hex":"1F393"},{"Typeface name":"Webdings","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"128484","Unicode hex":"1F5E4"},{"Typeface name":"Webdings","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"128485","Unicode hex":"1F5E5"},{"Typeface name":"Webdings","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"128486","Unicode hex":"1F5E6"},{"Typeface name":"Webdings","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"128487","Unicode hex":"1F5E7"},{"Typeface name":"Webdings","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"128746","Unicode hex":"1F6EA"},{"Typeface name":"Webdings","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"128063","Unicode hex":"1F43F"},{"Typeface name":"Webdings","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"128038","Unicode hex":"1F426"},{"Typeface name":"Webdings","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"128031","Unicode hex":"1F41F"},{"Typeface name":"Webdings","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"128021","Unicode hex":"1F415"},{"Typeface name":"Webdings","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"128008","Unicode hex":"1F408"},{"Typeface name":"Webdings","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"128620","Unicode hex":"1F66C"},{"Typeface name":"Webdings","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"128622","Unicode hex":"1F66E"},{"Typeface name":"Webdings","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"128621","Unicode hex":"1F66D"},{"Typeface name":"Webdings","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"128623","Unicode hex":"1F66F"},{"Typeface name":"Webdings","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"128506","Unicode hex":"1F5FA"},{"Typeface name":"Webdings","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"127757","Unicode hex":"1F30D"},{"Typeface name":"Webdings","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"127759","Unicode hex":"1F30F"},{"Typeface name":"Webdings","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"127758","Unicode hex":"1F30E"},{"Typeface name":"Webdings","Dingbat dec":"255","Dingbat hex":"FF","Unicode dec":"128330","Unicode hex":"1F54A"},{"Typeface name":"Wingdings","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128393","Unicode hex":"1F589"},{"Typeface name":"Wingdings","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"9986","Unicode hex":"2702"},{"Typeface name":"Wingdings","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"9985","Unicode hex":"2701"},{"Typeface name":"Wingdings","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128083","Unicode hex":"1F453"},{"Typeface name":"Wingdings","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"128365","Unicode hex":"1F56D"},{"Typeface name":"Wingdings","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"128366","Unicode hex":"1F56E"},{"Typeface name":"Wingdings","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128367","Unicode hex":"1F56F"},{"Typeface name":"Wingdings","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128383","Unicode hex":"1F57F"},{"Typeface name":"Wingdings","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"9990","Unicode hex":"2706"},{"Typeface name":"Wingdings","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128386","Unicode hex":"1F582"},{"Typeface name":"Wingdings","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128387","Unicode hex":"1F583"},{"Typeface name":"Wingdings","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"128234","Unicode hex":"1F4EA"},{"Typeface name":"Wingdings","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"128235","Unicode hex":"1F4EB"},{"Typeface name":"Wingdings","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128236","Unicode hex":"1F4EC"},{"Typeface name":"Wingdings","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128237","Unicode hex":"1F4ED"},{"Typeface name":"Wingdings","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128448","Unicode hex":"1F5C0"},{"Typeface name":"Wingdings","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128449","Unicode hex":"1F5C1"},{"Typeface name":"Wingdings","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128462","Unicode hex":"1F5CE"},{"Typeface name":"Wingdings","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"128463","Unicode hex":"1F5CF"},{"Typeface name":"Wingdings","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"128464","Unicode hex":"1F5D0"},{"Typeface name":"Wingdings","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"128452","Unicode hex":"1F5C4"},{"Typeface name":"Wingdings","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"8987","Unicode hex":"231B"},{"Typeface name":"Wingdings","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"128430","Unicode hex":"1F5AE"},{"Typeface name":"Wingdings","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"128432","Unicode hex":"1F5B0"},{"Typeface name":"Wingdings","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"128434","Unicode hex":"1F5B2"},{"Typeface name":"Wingdings","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"128435","Unicode hex":"1F5B3"},{"Typeface name":"Wingdings","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"128436","Unicode hex":"1F5B4"},{"Typeface name":"Wingdings","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"128427","Unicode hex":"1F5AB"},{"Typeface name":"Wingdings","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"128428","Unicode hex":"1F5AC"},{"Typeface name":"Wingdings","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"9991","Unicode hex":"2707"},{"Typeface name":"Wingdings","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"9997","Unicode hex":"270D"},{"Typeface name":"Wingdings","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128398","Unicode hex":"1F58E"},{"Typeface name":"Wingdings","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"9996","Unicode hex":"270C"},{"Typeface name":"Wingdings","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"128399","Unicode hex":"1F58F"},{"Typeface name":"Wingdings","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"128077","Unicode hex":"1F44D"},{"Typeface name":"Wingdings","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"128078","Unicode hex":"1F44E"},{"Typeface name":"Wingdings","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"9756","Unicode hex":"261C"},{"Typeface name":"Wingdings","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"9758","Unicode hex":"261E"},{"Typeface name":"Wingdings","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"9757","Unicode hex":"261D"},{"Typeface name":"Wingdings","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"9759","Unicode hex":"261F"},{"Typeface name":"Wingdings","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"128400","Unicode hex":"1F590"},{"Typeface name":"Wingdings","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"9786","Unicode hex":"263A"},{"Typeface name":"Wingdings","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128528","Unicode hex":"1F610"},{"Typeface name":"Wingdings","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"9785","Unicode hex":"2639"},{"Typeface name":"Wingdings","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"128163","Unicode hex":"1F4A3"},{"Typeface name":"Wingdings","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128369","Unicode hex":"1F571"},{"Typeface name":"Wingdings","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"127987","Unicode hex":"1F3F3"},{"Typeface name":"Wingdings","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"127985","Unicode hex":"1F3F1"},{"Typeface name":"Wingdings","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"9992","Unicode hex":"2708"},{"Typeface name":"Wingdings","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9788","Unicode hex":"263C"},{"Typeface name":"Wingdings","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"127778","Unicode hex":"1F322"},{"Typeface name":"Wingdings","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"10052","Unicode hex":"2744"},{"Typeface name":"Wingdings","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"128326","Unicode hex":"1F546"},{"Typeface name":"Wingdings","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"10014","Unicode hex":"271E"},{"Typeface name":"Wingdings","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128328","Unicode hex":"1F548"},{"Typeface name":"Wingdings","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"10016","Unicode hex":"2720"},{"Typeface name":"Wingdings","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"10017","Unicode hex":"2721"},{"Typeface name":"Wingdings","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"9770","Unicode hex":"262A"},{"Typeface name":"Wingdings","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"9775","Unicode hex":"262F"},{"Typeface name":"Wingdings","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128329","Unicode hex":"1F549"},{"Typeface name":"Wingdings","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"9784","Unicode hex":"2638"},{"Typeface name":"Wingdings","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"9800","Unicode hex":"2648"},{"Typeface name":"Wingdings","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"9801","Unicode hex":"2649"},{"Typeface name":"Wingdings","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"9802","Unicode hex":"264A"},{"Typeface name":"Wingdings","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"9803","Unicode hex":"264B"},{"Typeface name":"Wingdings","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"9804","Unicode hex":"264C"},{"Typeface name":"Wingdings","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"9805","Unicode hex":"264D"},{"Typeface name":"Wingdings","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"9806","Unicode hex":"264E"},{"Typeface name":"Wingdings","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"9807","Unicode hex":"264F"},{"Typeface name":"Wingdings","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"9808","Unicode hex":"2650"},{"Typeface name":"Wingdings","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"9809","Unicode hex":"2651"},{"Typeface name":"Wingdings","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"9810","Unicode hex":"2652"},{"Typeface name":"Wingdings","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"9811","Unicode hex":"2653"},{"Typeface name":"Wingdings","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"128624","Unicode hex":"1F670"},{"Typeface name":"Wingdings","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"128629","Unicode hex":"1F675"},{"Typeface name":"Wingdings","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"9899","Unicode hex":"26AB"},{"Typeface name":"Wingdings","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"128318","Unicode hex":"1F53E"},{"Typeface name":"Wingdings","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"9724","Unicode hex":"25FC"},{"Typeface name":"Wingdings","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"128911","Unicode hex":"1F78F"},{"Typeface name":"Wingdings","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"128912","Unicode hex":"1F790"},{"Typeface name":"Wingdings","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"10065","Unicode hex":"2751"},{"Typeface name":"Wingdings","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"10066","Unicode hex":"2752"},{"Typeface name":"Wingdings","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"128927","Unicode hex":"1F79F"},{"Typeface name":"Wingdings","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"10731","Unicode hex":"29EB"},{"Typeface name":"Wingdings","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"9670","Unicode hex":"25C6"},{"Typeface name":"Wingdings","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"10070","Unicode hex":"2756"},{"Typeface name":"Wingdings","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"11049","Unicode hex":"2B29"},{"Typeface name":"Wingdings","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"8999","Unicode hex":"2327"},{"Typeface name":"Wingdings","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"11193","Unicode hex":"2BB9"},{"Typeface name":"Wingdings","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"8984","Unicode hex":"2318"},{"Typeface name":"Wingdings","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"127989","Unicode hex":"1F3F5"},{"Typeface name":"Wingdings","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"127990","Unicode hex":"1F3F6"},{"Typeface name":"Wingdings","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128630","Unicode hex":"1F676"},{"Typeface name":"Wingdings","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128631","Unicode hex":"1F677"},{"Typeface name":"Wingdings","Dingbat dec":"127","Dingbat hex":"7F","Unicode dec":"9647","Unicode hex":"25AF"},{"Typeface name":"Wingdings","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"127243","Unicode hex":"1F10B"},{"Typeface name":"Wingdings","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"10112","Unicode hex":"2780"},{"Typeface name":"Wingdings","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"10113","Unicode hex":"2781"},{"Typeface name":"Wingdings","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"10114","Unicode hex":"2782"},{"Typeface name":"Wingdings","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"10115","Unicode hex":"2783"},{"Typeface name":"Wingdings","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"10116","Unicode hex":"2784"},{"Typeface name":"Wingdings","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"10117","Unicode hex":"2785"},{"Typeface name":"Wingdings","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"10118","Unicode hex":"2786"},{"Typeface name":"Wingdings","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"10119","Unicode hex":"2787"},{"Typeface name":"Wingdings","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"10120","Unicode hex":"2788"},{"Typeface name":"Wingdings","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"10121","Unicode hex":"2789"},{"Typeface name":"Wingdings","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"127244","Unicode hex":"1F10C"},{"Typeface name":"Wingdings","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"10122","Unicode hex":"278A"},{"Typeface name":"Wingdings","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"10123","Unicode hex":"278B"},{"Typeface name":"Wingdings","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"10124","Unicode hex":"278C"},{"Typeface name":"Wingdings","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"10125","Unicode hex":"278D"},{"Typeface name":"Wingdings","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"10126","Unicode hex":"278E"},{"Typeface name":"Wingdings","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"10127","Unicode hex":"278F"},{"Typeface name":"Wingdings","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"10128","Unicode hex":"2790"},{"Typeface name":"Wingdings","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"10129","Unicode hex":"2791"},{"Typeface name":"Wingdings","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"10130","Unicode hex":"2792"},{"Typeface name":"Wingdings","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"10131","Unicode hex":"2793"},{"Typeface name":"Wingdings","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128610","Unicode hex":"1F662"},{"Typeface name":"Wingdings","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"128608","Unicode hex":"1F660"},{"Typeface name":"Wingdings","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"128609","Unicode hex":"1F661"},{"Typeface name":"Wingdings","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"128611","Unicode hex":"1F663"},{"Typeface name":"Wingdings","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128606","Unicode hex":"1F65E"},{"Typeface name":"Wingdings","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128604","Unicode hex":"1F65C"},{"Typeface name":"Wingdings","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128605","Unicode hex":"1F65D"},{"Typeface name":"Wingdings","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"128607","Unicode hex":"1F65F"},{"Typeface name":"Wingdings","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"8729","Unicode hex":"2219"},{"Typeface name":"Wingdings","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"8226","Unicode hex":"2022"},{"Typeface name":"Wingdings","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"11037","Unicode hex":"2B1D"},{"Typeface name":"Wingdings","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"11096","Unicode hex":"2B58"},{"Typeface name":"Wingdings","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"128902","Unicode hex":"1F786"},{"Typeface name":"Wingdings","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"128904","Unicode hex":"1F788"},{"Typeface name":"Wingdings","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128906","Unicode hex":"1F78A"},{"Typeface name":"Wingdings","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128907","Unicode hex":"1F78B"},{"Typeface name":"Wingdings","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128319","Unicode hex":"1F53F"},{"Typeface name":"Wingdings","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"9642","Unicode hex":"25AA"},{"Typeface name":"Wingdings","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"128910","Unicode hex":"1F78E"},{"Typeface name":"Wingdings","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128961","Unicode hex":"1F7C1"},{"Typeface name":"Wingdings","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128965","Unicode hex":"1F7C5"},{"Typeface name":"Wingdings","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"9733","Unicode hex":"2605"},{"Typeface name":"Wingdings","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128971","Unicode hex":"1F7CB"},{"Typeface name":"Wingdings","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"128975","Unicode hex":"1F7CF"},{"Typeface name":"Wingdings","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"128979","Unicode hex":"1F7D3"},{"Typeface name":"Wingdings","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"128977","Unicode hex":"1F7D1"},{"Typeface name":"Wingdings","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"11216","Unicode hex":"2BD0"},{"Typeface name":"Wingdings","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"8982","Unicode hex":"2316"},{"Typeface name":"Wingdings","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"11214","Unicode hex":"2BCE"},{"Typeface name":"Wingdings","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"11215","Unicode hex":"2BCF"},{"Typeface name":"Wingdings","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"11217","Unicode hex":"2BD1"},{"Typeface name":"Wingdings","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"10026","Unicode hex":"272A"},{"Typeface name":"Wingdings","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"10032","Unicode hex":"2730"},{"Typeface name":"Wingdings","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"128336","Unicode hex":"1F550"},{"Typeface name":"Wingdings","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"128337","Unicode hex":"1F551"},{"Typeface name":"Wingdings","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128338","Unicode hex":"1F552"},{"Typeface name":"Wingdings","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"128339","Unicode hex":"1F553"},{"Typeface name":"Wingdings","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"128340","Unicode hex":"1F554"},{"Typeface name":"Wingdings","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"128341","Unicode hex":"1F555"},{"Typeface name":"Wingdings","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"128342","Unicode hex":"1F556"},{"Typeface name":"Wingdings","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"128343","Unicode hex":"1F557"},{"Typeface name":"Wingdings","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"128344","Unicode hex":"1F558"},{"Typeface name":"Wingdings","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"128345","Unicode hex":"1F559"},{"Typeface name":"Wingdings","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"128346","Unicode hex":"1F55A"},{"Typeface name":"Wingdings","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"128347","Unicode hex":"1F55B"},{"Typeface name":"Wingdings","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"11184","Unicode hex":"2BB0"},{"Typeface name":"Wingdings","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"11185","Unicode hex":"2BB1"},{"Typeface name":"Wingdings","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"11186","Unicode hex":"2BB2"},{"Typeface name":"Wingdings","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"11187","Unicode hex":"2BB3"},{"Typeface name":"Wingdings","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"11188","Unicode hex":"2BB4"},{"Typeface name":"Wingdings","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"11189","Unicode hex":"2BB5"},{"Typeface name":"Wingdings","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"11190","Unicode hex":"2BB6"},{"Typeface name":"Wingdings","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"11191","Unicode hex":"2BB7"},{"Typeface name":"Wingdings","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128618","Unicode hex":"1F66A"},{"Typeface name":"Wingdings","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128619","Unicode hex":"1F66B"},{"Typeface name":"Wingdings","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128597","Unicode hex":"1F655"},{"Typeface name":"Wingdings","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128596","Unicode hex":"1F654"},{"Typeface name":"Wingdings","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128599","Unicode hex":"1F657"},{"Typeface name":"Wingdings","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128598","Unicode hex":"1F656"},{"Typeface name":"Wingdings","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128592","Unicode hex":"1F650"},{"Typeface name":"Wingdings","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128593","Unicode hex":"1F651"},{"Typeface name":"Wingdings","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128594","Unicode hex":"1F652"},{"Typeface name":"Wingdings","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128595","Unicode hex":"1F653"},{"Typeface name":"Wingdings","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"9003","Unicode hex":"232B"},{"Typeface name":"Wingdings","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"8998","Unicode hex":"2326"},{"Typeface name":"Wingdings","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"11160","Unicode hex":"2B98"},{"Typeface name":"Wingdings","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"11162","Unicode hex":"2B9A"},{"Typeface name":"Wingdings","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"11161","Unicode hex":"2B99"},{"Typeface name":"Wingdings","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"11163","Unicode hex":"2B9B"},{"Typeface name":"Wingdings","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"11144","Unicode hex":"2B88"},{"Typeface name":"Wingdings","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"11146","Unicode hex":"2B8A"},{"Typeface name":"Wingdings","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"11145","Unicode hex":"2B89"},{"Typeface name":"Wingdings","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"11147","Unicode hex":"2B8B"},{"Typeface name":"Wingdings","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"129128","Unicode hex":"1F868"},{"Typeface name":"Wingdings","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"129130","Unicode hex":"1F86A"},{"Typeface name":"Wingdings","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"129129","Unicode hex":"1F869"},{"Typeface name":"Wingdings","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"129131","Unicode hex":"1F86B"},{"Typeface name":"Wingdings","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"129132","Unicode hex":"1F86C"},{"Typeface name":"Wingdings","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"129133","Unicode hex":"1F86D"},{"Typeface name":"Wingdings","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"129135","Unicode hex":"1F86F"},{"Typeface name":"Wingdings","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"129134","Unicode hex":"1F86E"},{"Typeface name":"Wingdings","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"129144","Unicode hex":"1F878"},{"Typeface name":"Wingdings","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"129146","Unicode hex":"1F87A"},{"Typeface name":"Wingdings","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"129145","Unicode hex":"1F879"},{"Typeface name":"Wingdings","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"129147","Unicode hex":"1F87B"},{"Typeface name":"Wingdings","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"129148","Unicode hex":"1F87C"},{"Typeface name":"Wingdings","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"129149","Unicode hex":"1F87D"},{"Typeface name":"Wingdings","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"129151","Unicode hex":"1F87F"},{"Typeface name":"Wingdings","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"129150","Unicode hex":"1F87E"},{"Typeface name":"Wingdings","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"8678","Unicode hex":"21E6"},{"Typeface name":"Wingdings","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"8680","Unicode hex":"21E8"},{"Typeface name":"Wingdings","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"8679","Unicode hex":"21E7"},{"Typeface name":"Wingdings","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"8681","Unicode hex":"21E9"},{"Typeface name":"Wingdings","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"11012","Unicode hex":"2B04"},{"Typeface name":"Wingdings","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"8691","Unicode hex":"21F3"},{"Typeface name":"Wingdings","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"11009","Unicode hex":"2B01"},{"Typeface name":"Wingdings","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"11008","Unicode hex":"2B00"},{"Typeface name":"Wingdings","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"11011","Unicode hex":"2B03"},{"Typeface name":"Wingdings","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"11010","Unicode hex":"2B02"},{"Typeface name":"Wingdings","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"129196","Unicode hex":"1F8AC"},{"Typeface name":"Wingdings","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"129197","Unicode hex":"1F8AD"},{"Typeface name":"Wingdings","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"128502","Unicode hex":"1F5F6"},{"Typeface name":"Wingdings","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"10003","Unicode hex":"2713"},{"Typeface name":"Wingdings","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"128503","Unicode hex":"1F5F7"},{"Typeface name":"Wingdings","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"128505","Unicode hex":"1F5F9"},{"Typeface name":"Wingdings 2","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings 2","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128394","Unicode hex":"1F58A"},{"Typeface name":"Wingdings 2","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"128395","Unicode hex":"1F58B"},{"Typeface name":"Wingdings 2","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"128396","Unicode hex":"1F58C"},{"Typeface name":"Wingdings 2","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128397","Unicode hex":"1F58D"},{"Typeface name":"Wingdings 2","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"9988","Unicode hex":"2704"},{"Typeface name":"Wingdings 2","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"9984","Unicode hex":"2700"},{"Typeface name":"Wingdings 2","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128382","Unicode hex":"1F57E"},{"Typeface name":"Wingdings 2","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128381","Unicode hex":"1F57D"},{"Typeface name":"Wingdings 2","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"128453","Unicode hex":"1F5C5"},{"Typeface name":"Wingdings 2","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128454","Unicode hex":"1F5C6"},{"Typeface name":"Wingdings 2","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128455","Unicode hex":"1F5C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"128456","Unicode hex":"1F5C8"},{"Typeface name":"Wingdings 2","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"128457","Unicode hex":"1F5C9"},{"Typeface name":"Wingdings 2","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128458","Unicode hex":"1F5CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128459","Unicode hex":"1F5CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128460","Unicode hex":"1F5CC"},{"Typeface name":"Wingdings 2","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128461","Unicode hex":"1F5CD"},{"Typeface name":"Wingdings 2","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128203","Unicode hex":"1F4CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"128465","Unicode hex":"1F5D1"},{"Typeface name":"Wingdings 2","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"128468","Unicode hex":"1F5D4"},{"Typeface name":"Wingdings 2","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"128437","Unicode hex":"1F5B5"},{"Typeface name":"Wingdings 2","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"128438","Unicode hex":"1F5B6"},{"Typeface name":"Wingdings 2","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"128439","Unicode hex":"1F5B7"},{"Typeface name":"Wingdings 2","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"128440","Unicode hex":"1F5B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"128429","Unicode hex":"1F5AD"},{"Typeface name":"Wingdings 2","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"128431","Unicode hex":"1F5AF"},{"Typeface name":"Wingdings 2","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"128433","Unicode hex":"1F5B1"},{"Typeface name":"Wingdings 2","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"128402","Unicode hex":"1F592"},{"Typeface name":"Wingdings 2","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"128403","Unicode hex":"1F593"},{"Typeface name":"Wingdings 2","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"128408","Unicode hex":"1F598"},{"Typeface name":"Wingdings 2","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"128409","Unicode hex":"1F599"},{"Typeface name":"Wingdings 2","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128410","Unicode hex":"1F59A"},{"Typeface name":"Wingdings 2","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"128411","Unicode hex":"1F59B"},{"Typeface name":"Wingdings 2","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"128072","Unicode hex":"1F448"},{"Typeface name":"Wingdings 2","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"128073","Unicode hex":"1F449"},{"Typeface name":"Wingdings 2","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"128412","Unicode hex":"1F59C"},{"Typeface name":"Wingdings 2","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"128413","Unicode hex":"1F59D"},{"Typeface name":"Wingdings 2","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"128414","Unicode hex":"1F59E"},{"Typeface name":"Wingdings 2","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"128415","Unicode hex":"1F59F"},{"Typeface name":"Wingdings 2","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"128416","Unicode hex":"1F5A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"128417","Unicode hex":"1F5A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"128070","Unicode hex":"1F446"},{"Typeface name":"Wingdings 2","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128071","Unicode hex":"1F447"},{"Typeface name":"Wingdings 2","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"128418","Unicode hex":"1F5A2"},{"Typeface name":"Wingdings 2","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"128419","Unicode hex":"1F5A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128401","Unicode hex":"1F591"},{"Typeface name":"Wingdings 2","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"128500","Unicode hex":"1F5F4"},{"Typeface name":"Wingdings 2","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"128504","Unicode hex":"1F5F8"},{"Typeface name":"Wingdings 2","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"128501","Unicode hex":"1F5F5"},{"Typeface name":"Wingdings 2","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9745","Unicode hex":"2611"},{"Typeface name":"Wingdings 2","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"11197","Unicode hex":"2BBD"},{"Typeface name":"Wingdings 2","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"9746","Unicode hex":"2612"},{"Typeface name":"Wingdings 2","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"11198","Unicode hex":"2BBE"},{"Typeface name":"Wingdings 2","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"11199","Unicode hex":"2BBF"},{"Typeface name":"Wingdings 2","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128711","Unicode hex":"1F6C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"10680","Unicode hex":"29B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"128625","Unicode hex":"1F671"},{"Typeface name":"Wingdings 2","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"128628","Unicode hex":"1F674"},{"Typeface name":"Wingdings 2","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"128626","Unicode hex":"1F672"},{"Typeface name":"Wingdings 2","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128627","Unicode hex":"1F673"},{"Typeface name":"Wingdings 2","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"8253","Unicode hex":"203D"},{"Typeface name":"Wingdings 2","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"128633","Unicode hex":"1F679"},{"Typeface name":"Wingdings 2","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"128634","Unicode hex":"1F67A"},{"Typeface name":"Wingdings 2","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"128635","Unicode hex":"1F67B"},{"Typeface name":"Wingdings 2","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"128614","Unicode hex":"1F666"},{"Typeface name":"Wingdings 2","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"128612","Unicode hex":"1F664"},{"Typeface name":"Wingdings 2","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"128613","Unicode hex":"1F665"},{"Typeface name":"Wingdings 2","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"128615","Unicode hex":"1F667"},{"Typeface name":"Wingdings 2","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"128602","Unicode hex":"1F65A"},{"Typeface name":"Wingdings 2","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"128600","Unicode hex":"1F658"},{"Typeface name":"Wingdings 2","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"128601","Unicode hex":"1F659"},{"Typeface name":"Wingdings 2","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"128603","Unicode hex":"1F65B"},{"Typeface name":"Wingdings 2","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"9450","Unicode hex":"24EA"},{"Typeface name":"Wingdings 2","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"9312","Unicode hex":"2460"},{"Typeface name":"Wingdings 2","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"9313","Unicode hex":"2461"},{"Typeface name":"Wingdings 2","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"9314","Unicode hex":"2462"},{"Typeface name":"Wingdings 2","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"9315","Unicode hex":"2463"},{"Typeface name":"Wingdings 2","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"9316","Unicode hex":"2464"},{"Typeface name":"Wingdings 2","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"9317","Unicode hex":"2465"},{"Typeface name":"Wingdings 2","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"9318","Unicode hex":"2466"},{"Typeface name":"Wingdings 2","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"9319","Unicode hex":"2467"},{"Typeface name":"Wingdings 2","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"9320","Unicode hex":"2468"},{"Typeface name":"Wingdings 2","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"9321","Unicode hex":"2469"},{"Typeface name":"Wingdings 2","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"9471","Unicode hex":"24FF"},{"Typeface name":"Wingdings 2","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"10102","Unicode hex":"2776"},{"Typeface name":"Wingdings 2","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"10103","Unicode hex":"2777"},{"Typeface name":"Wingdings 2","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"10104","Unicode hex":"2778"},{"Typeface name":"Wingdings 2","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"10105","Unicode hex":"2779"},{"Typeface name":"Wingdings 2","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"10106","Unicode hex":"277A"},{"Typeface name":"Wingdings 2","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"10107","Unicode hex":"277B"},{"Typeface name":"Wingdings 2","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"10108","Unicode hex":"277C"},{"Typeface name":"Wingdings 2","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"10109","Unicode hex":"277D"},{"Typeface name":"Wingdings 2","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"10110","Unicode hex":"277E"},{"Typeface name":"Wingdings 2","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"10111","Unicode hex":"277F"},{"Typeface name":"Wingdings 2","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"9737","Unicode hex":"2609"},{"Typeface name":"Wingdings 2","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"127765","Unicode hex":"1F315"},{"Typeface name":"Wingdings 2","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"9789","Unicode hex":"263D"},{"Typeface name":"Wingdings 2","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"9790","Unicode hex":"263E"},{"Typeface name":"Wingdings 2","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"11839","Unicode hex":"2E3F"},{"Typeface name":"Wingdings 2","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"10013","Unicode hex":"271D"},{"Typeface name":"Wingdings 2","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"128327","Unicode hex":"1F547"},{"Typeface name":"Wingdings 2","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"128348","Unicode hex":"1F55C"},{"Typeface name":"Wingdings 2","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"128349","Unicode hex":"1F55D"},{"Typeface name":"Wingdings 2","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"128350","Unicode hex":"1F55E"},{"Typeface name":"Wingdings 2","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"128351","Unicode hex":"1F55F"},{"Typeface name":"Wingdings 2","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"128352","Unicode hex":"1F560"},{"Typeface name":"Wingdings 2","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"128353","Unicode hex":"1F561"},{"Typeface name":"Wingdings 2","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"128354","Unicode hex":"1F562"},{"Typeface name":"Wingdings 2","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"128355","Unicode hex":"1F563"},{"Typeface name":"Wingdings 2","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"128356","Unicode hex":"1F564"},{"Typeface name":"Wingdings 2","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"128357","Unicode hex":"1F565"},{"Typeface name":"Wingdings 2","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"128358","Unicode hex":"1F566"},{"Typeface name":"Wingdings 2","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"128359","Unicode hex":"1F567"},{"Typeface name":"Wingdings 2","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"128616","Unicode hex":"1F668"},{"Typeface name":"Wingdings 2","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"128617","Unicode hex":"1F669"},{"Typeface name":"Wingdings 2","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"8901","Unicode hex":"22C5"},{"Typeface name":"Wingdings 2","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128900","Unicode hex":"1F784"},{"Typeface name":"Wingdings 2","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"10625","Unicode hex":"2981"},{"Typeface name":"Wingdings 2","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"9679","Unicode hex":"25CF"},{"Typeface name":"Wingdings 2","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"9675","Unicode hex":"25CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128901","Unicode hex":"1F785"},{"Typeface name":"Wingdings 2","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128903","Unicode hex":"1F787"},{"Typeface name":"Wingdings 2","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128905","Unicode hex":"1F789"},{"Typeface name":"Wingdings 2","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"8857","Unicode hex":"2299"},{"Typeface name":"Wingdings 2","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"10687","Unicode hex":"29BF"},{"Typeface name":"Wingdings 2","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"128908","Unicode hex":"1F78C"},{"Typeface name":"Wingdings 2","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"128909","Unicode hex":"1F78D"},{"Typeface name":"Wingdings 2","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"9726","Unicode hex":"25FE"},{"Typeface name":"Wingdings 2","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"9632","Unicode hex":"25A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"9633","Unicode hex":"25A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128913","Unicode hex":"1F791"},{"Typeface name":"Wingdings 2","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128914","Unicode hex":"1F792"},{"Typeface name":"Wingdings 2","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128915","Unicode hex":"1F793"},{"Typeface name":"Wingdings 2","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"128916","Unicode hex":"1F794"},{"Typeface name":"Wingdings 2","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"9635","Unicode hex":"25A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128917","Unicode hex":"1F795"},{"Typeface name":"Wingdings 2","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128918","Unicode hex":"1F796"},{"Typeface name":"Wingdings 2","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"128919","Unicode hex":"1F797"},{"Typeface name":"Wingdings 2","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128920","Unicode hex":"1F798"},{"Typeface name":"Wingdings 2","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"11049","Unicode hex":"2B29"},{"Typeface name":"Wingdings 2","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"11045","Unicode hex":"2B25"},{"Typeface name":"Wingdings 2","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"9671","Unicode hex":"25C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"128922","Unicode hex":"1F79A"},{"Typeface name":"Wingdings 2","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"9672","Unicode hex":"25C8"},{"Typeface name":"Wingdings 2","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"128923","Unicode hex":"1F79B"},{"Typeface name":"Wingdings 2","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"128924","Unicode hex":"1F79C"},{"Typeface name":"Wingdings 2","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"128925","Unicode hex":"1F79D"},{"Typeface name":"Wingdings 2","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"128926","Unicode hex":"1F79E"},{"Typeface name":"Wingdings 2","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"11050","Unicode hex":"2B2A"},{"Typeface name":"Wingdings 2","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"11047","Unicode hex":"2B27"},{"Typeface name":"Wingdings 2","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"9674","Unicode hex":"25CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128928","Unicode hex":"1F7A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"9686","Unicode hex":"25D6"},{"Typeface name":"Wingdings 2","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"9687","Unicode hex":"25D7"},{"Typeface name":"Wingdings 2","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"11210","Unicode hex":"2BCA"},{"Typeface name":"Wingdings 2","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"11211","Unicode hex":"2BCB"},{"Typeface name":"Wingdings 2","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"11200","Unicode hex":"2BC0"},{"Typeface name":"Wingdings 2","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"11201","Unicode hex":"2BC1"},{"Typeface name":"Wingdings 2","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"11039","Unicode hex":"2B1F"},{"Typeface name":"Wingdings 2","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"11202","Unicode hex":"2BC2"},{"Typeface name":"Wingdings 2","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"11043","Unicode hex":"2B23"},{"Typeface name":"Wingdings 2","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"11042","Unicode hex":"2B22"},{"Typeface name":"Wingdings 2","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"11203","Unicode hex":"2BC3"},{"Typeface name":"Wingdings 2","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"11204","Unicode hex":"2BC4"},{"Typeface name":"Wingdings 2","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"128929","Unicode hex":"1F7A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"128930","Unicode hex":"1F7A2"},{"Typeface name":"Wingdings 2","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"128931","Unicode hex":"1F7A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"128932","Unicode hex":"1F7A4"},{"Typeface name":"Wingdings 2","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"128933","Unicode hex":"1F7A5"},{"Typeface name":"Wingdings 2","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128934","Unicode hex":"1F7A6"},{"Typeface name":"Wingdings 2","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128935","Unicode hex":"1F7A7"},{"Typeface name":"Wingdings 2","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128936","Unicode hex":"1F7A8"},{"Typeface name":"Wingdings 2","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128937","Unicode hex":"1F7A9"},{"Typeface name":"Wingdings 2","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128938","Unicode hex":"1F7AA"},{"Typeface name":"Wingdings 2","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128939","Unicode hex":"1F7AB"},{"Typeface name":"Wingdings 2","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128940","Unicode hex":"1F7AC"},{"Typeface name":"Wingdings 2","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128941","Unicode hex":"1F7AD"},{"Typeface name":"Wingdings 2","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128942","Unicode hex":"1F7AE"},{"Typeface name":"Wingdings 2","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128943","Unicode hex":"1F7AF"},{"Typeface name":"Wingdings 2","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"128944","Unicode hex":"1F7B0"},{"Typeface name":"Wingdings 2","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"128945","Unicode hex":"1F7B1"},{"Typeface name":"Wingdings 2","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"128946","Unicode hex":"1F7B2"},{"Typeface name":"Wingdings 2","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"128947","Unicode hex":"1F7B3"},{"Typeface name":"Wingdings 2","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"128948","Unicode hex":"1F7B4"},{"Typeface name":"Wingdings 2","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"128949","Unicode hex":"1F7B5"},{"Typeface name":"Wingdings 2","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"128950","Unicode hex":"1F7B6"},{"Typeface name":"Wingdings 2","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"128951","Unicode hex":"1F7B7"},{"Typeface name":"Wingdings 2","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"128952","Unicode hex":"1F7B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"128953","Unicode hex":"1F7B9"},{"Typeface name":"Wingdings 2","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"128954","Unicode hex":"1F7BA"},{"Typeface name":"Wingdings 2","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"128955","Unicode hex":"1F7BB"},{"Typeface name":"Wingdings 2","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"128956","Unicode hex":"1F7BC"},{"Typeface name":"Wingdings 2","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"128957","Unicode hex":"1F7BD"},{"Typeface name":"Wingdings 2","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"128958","Unicode hex":"1F7BE"},{"Typeface name":"Wingdings 2","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"128959","Unicode hex":"1F7BF"},{"Typeface name":"Wingdings 2","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"128960","Unicode hex":"1F7C0"},{"Typeface name":"Wingdings 2","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"128962","Unicode hex":"1F7C2"},{"Typeface name":"Wingdings 2","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"128964","Unicode hex":"1F7C4"},{"Typeface name":"Wingdings 2","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"128966","Unicode hex":"1F7C6"},{"Typeface name":"Wingdings 2","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"128969","Unicode hex":"1F7C9"},{"Typeface name":"Wingdings 2","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"128970","Unicode hex":"1F7CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"10038","Unicode hex":"2736"},{"Typeface name":"Wingdings 2","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"128972","Unicode hex":"1F7CC"},{"Typeface name":"Wingdings 2","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"128974","Unicode hex":"1F7CE"},{"Typeface name":"Wingdings 2","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"128976","Unicode hex":"1F7D0"},{"Typeface name":"Wingdings 2","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"128978","Unicode hex":"1F7D2"},{"Typeface name":"Wingdings 2","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"10041","Unicode hex":"2739"},{"Typeface name":"Wingdings 2","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"128963","Unicode hex":"1F7C3"},{"Typeface name":"Wingdings 2","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"128967","Unicode hex":"1F7C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"10031","Unicode hex":"272F"},{"Typeface name":"Wingdings 2","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"128973","Unicode hex":"1F7CD"},{"Typeface name":"Wingdings 2","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"128980","Unicode hex":"1F7D4"},{"Typeface name":"Wingdings 2","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"11212","Unicode hex":"2BCC"},{"Typeface name":"Wingdings 2","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"11213","Unicode hex":"2BCD"},{"Typeface name":"Wingdings 2","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"8251","Unicode hex":"203B"},{"Typeface name":"Wingdings 2","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"8258","Unicode hex":"2042"},{"Typeface name":"Wingdings 3","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings 3","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"11104","Unicode hex":"2B60"},{"Typeface name":"Wingdings 3","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"11106","Unicode hex":"2B62"},{"Typeface name":"Wingdings 3","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"11105","Unicode hex":"2B61"},{"Typeface name":"Wingdings 3","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"11107","Unicode hex":"2B63"},{"Typeface name":"Wingdings 3","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"11110","Unicode hex":"2B66"},{"Typeface name":"Wingdings 3","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"11111","Unicode hex":"2B67"},{"Typeface name":"Wingdings 3","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"11113","Unicode hex":"2B69"},{"Typeface name":"Wingdings 3","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"11112","Unicode hex":"2B68"},{"Typeface name":"Wingdings 3","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"11120","Unicode hex":"2B70"},{"Typeface name":"Wingdings 3","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"11122","Unicode hex":"2B72"},{"Typeface name":"Wingdings 3","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"11121","Unicode hex":"2B71"},{"Typeface name":"Wingdings 3","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"11123","Unicode hex":"2B73"},{"Typeface name":"Wingdings 3","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"11126","Unicode hex":"2B76"},{"Typeface name":"Wingdings 3","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"11128","Unicode hex":"2B78"},{"Typeface name":"Wingdings 3","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"11131","Unicode hex":"2B7B"},{"Typeface name":"Wingdings 3","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"11133","Unicode hex":"2B7D"},{"Typeface name":"Wingdings 3","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"11108","Unicode hex":"2B64"},{"Typeface name":"Wingdings 3","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"11109","Unicode hex":"2B65"},{"Typeface name":"Wingdings 3","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"11114","Unicode hex":"2B6A"},{"Typeface name":"Wingdings 3","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"11116","Unicode hex":"2B6C"},{"Typeface name":"Wingdings 3","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"11115","Unicode hex":"2B6B"},{"Typeface name":"Wingdings 3","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"11117","Unicode hex":"2B6D"},{"Typeface name":"Wingdings 3","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"11085","Unicode hex":"2B4D"},{"Typeface name":"Wingdings 3","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"11168","Unicode hex":"2BA0"},{"Typeface name":"Wingdings 3","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"11169","Unicode hex":"2BA1"},{"Typeface name":"Wingdings 3","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"11170","Unicode hex":"2BA2"},{"Typeface name":"Wingdings 3","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"11171","Unicode hex":"2BA3"},{"Typeface name":"Wingdings 3","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"11172","Unicode hex":"2BA4"},{"Typeface name":"Wingdings 3","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"11173","Unicode hex":"2BA5"},{"Typeface name":"Wingdings 3","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"11174","Unicode hex":"2BA6"},{"Typeface name":"Wingdings 3","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"11175","Unicode hex":"2BA7"},{"Typeface name":"Wingdings 3","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"11152","Unicode hex":"2B90"},{"Typeface name":"Wingdings 3","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"11153","Unicode hex":"2B91"},{"Typeface name":"Wingdings 3","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"11154","Unicode hex":"2B92"},{"Typeface name":"Wingdings 3","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"11155","Unicode hex":"2B93"},{"Typeface name":"Wingdings 3","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"11136","Unicode hex":"2B80"},{"Typeface name":"Wingdings 3","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"11139","Unicode hex":"2B83"},{"Typeface name":"Wingdings 3","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"11134","Unicode hex":"2B7E"},{"Typeface name":"Wingdings 3","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"11135","Unicode hex":"2B7F"},{"Typeface name":"Wingdings 3","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"11140","Unicode hex":"2B84"},{"Typeface name":"Wingdings 3","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"11142","Unicode hex":"2B86"},{"Typeface name":"Wingdings 3","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"11141","Unicode hex":"2B85"},{"Typeface name":"Wingdings 3","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"11143","Unicode hex":"2B87"},{"Typeface name":"Wingdings 3","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"11151","Unicode hex":"2B8F"},{"Typeface name":"Wingdings 3","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"11149","Unicode hex":"2B8D"},{"Typeface name":"Wingdings 3","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"11150","Unicode hex":"2B8E"},{"Typeface name":"Wingdings 3","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"11148","Unicode hex":"2B8C"},{"Typeface name":"Wingdings 3","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"11118","Unicode hex":"2B6E"},{"Typeface name":"Wingdings 3","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"11119","Unicode hex":"2B6F"},{"Typeface name":"Wingdings 3","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9099","Unicode hex":"238B"},{"Typeface name":"Wingdings 3","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"8996","Unicode hex":"2324"},{"Typeface name":"Wingdings 3","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"8963","Unicode hex":"2303"},{"Typeface name":"Wingdings 3","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"8997","Unicode hex":"2325"},{"Typeface name":"Wingdings 3","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"9251","Unicode hex":"2423"},{"Typeface name":"Wingdings 3","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"9085","Unicode hex":"237D"},{"Typeface name":"Wingdings 3","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"8682","Unicode hex":"21EA"},{"Typeface name":"Wingdings 3","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"11192","Unicode hex":"2BB8"},{"Typeface name":"Wingdings 3","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"129184","Unicode hex":"1F8A0"},{"Typeface name":"Wingdings 3","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"129185","Unicode hex":"1F8A1"},{"Typeface name":"Wingdings 3","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"129186","Unicode hex":"1F8A2"},{"Typeface name":"Wingdings 3","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"129187","Unicode hex":"1F8A3"},{"Typeface name":"Wingdings 3","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"129188","Unicode hex":"1F8A4"},{"Typeface name":"Wingdings 3","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"129189","Unicode hex":"1F8A5"},{"Typeface name":"Wingdings 3","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"129190","Unicode hex":"1F8A6"},{"Typeface name":"Wingdings 3","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"129191","Unicode hex":"1F8A7"},{"Typeface name":"Wingdings 3","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"129192","Unicode hex":"1F8A8"},{"Typeface name":"Wingdings 3","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"129193","Unicode hex":"1F8A9"},{"Typeface name":"Wingdings 3","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"129194","Unicode hex":"1F8AA"},{"Typeface name":"Wingdings 3","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"129195","Unicode hex":"1F8AB"},{"Typeface name":"Wingdings 3","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"129104","Unicode hex":"1F850"},{"Typeface name":"Wingdings 3","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"129106","Unicode hex":"1F852"},{"Typeface name":"Wingdings 3","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"129105","Unicode hex":"1F851"},{"Typeface name":"Wingdings 3","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"129107","Unicode hex":"1F853"},{"Typeface name":"Wingdings 3","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"129108","Unicode hex":"1F854"},{"Typeface name":"Wingdings 3","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"129109","Unicode hex":"1F855"},{"Typeface name":"Wingdings 3","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"129111","Unicode hex":"1F857"},{"Typeface name":"Wingdings 3","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"129110","Unicode hex":"1F856"},{"Typeface name":"Wingdings 3","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"129112","Unicode hex":"1F858"},{"Typeface name":"Wingdings 3","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"129113","Unicode hex":"1F859"},{"Typeface name":"Wingdings 3","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"9650","Unicode hex":"25B2"},{"Typeface name":"Wingdings 3","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"9660","Unicode hex":"25BC"},{"Typeface name":"Wingdings 3","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"9651","Unicode hex":"25B3"},{"Typeface name":"Wingdings 3","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"9661","Unicode hex":"25BD"},{"Typeface name":"Wingdings 3","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"9664","Unicode hex":"25C0"},{"Typeface name":"Wingdings 3","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"9654","Unicode hex":"25B6"},{"Typeface name":"Wingdings 3","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"9665","Unicode hex":"25C1"},{"Typeface name":"Wingdings 3","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"9655","Unicode hex":"25B7"},{"Typeface name":"Wingdings 3","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"9699","Unicode hex":"25E3"},{"Typeface name":"Wingdings 3","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"9698","Unicode hex":"25E2"},{"Typeface name":"Wingdings 3","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"9700","Unicode hex":"25E4"},{"Typeface name":"Wingdings 3","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"9701","Unicode hex":"25E5"},{"Typeface name":"Wingdings 3","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"128896","Unicode hex":"1F780"},{"Typeface name":"Wingdings 3","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128898","Unicode hex":"1F782"},{"Typeface name":"Wingdings 3","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128897","Unicode hex":"1F781"},{"Typeface name":"Wingdings 3","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"128899","Unicode hex":"1F783"},{"Typeface name":"Wingdings 3","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"11205","Unicode hex":"2BC5"},{"Typeface name":"Wingdings 3","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"11206","Unicode hex":"2BC6"},{"Typeface name":"Wingdings 3","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"11207","Unicode hex":"2BC7"},{"Typeface name":"Wingdings 3","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"11208","Unicode hex":"2BC8"},{"Typeface name":"Wingdings 3","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"11164","Unicode hex":"2B9C"},{"Typeface name":"Wingdings 3","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"11166","Unicode hex":"2B9E"},{"Typeface name":"Wingdings 3","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"11165","Unicode hex":"2B9D"},{"Typeface name":"Wingdings 3","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"11167","Unicode hex":"2B9F"},{"Typeface name":"Wingdings 3","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"129040","Unicode hex":"1F810"},{"Typeface name":"Wingdings 3","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"129042","Unicode hex":"1F812"},{"Typeface name":"Wingdings 3","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"129041","Unicode hex":"1F811"},{"Typeface name":"Wingdings 3","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"129043","Unicode hex":"1F813"},{"Typeface name":"Wingdings 3","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"129044","Unicode hex":"1F814"},{"Typeface name":"Wingdings 3","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"129046","Unicode hex":"1F816"},{"Typeface name":"Wingdings 3","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"129045","Unicode hex":"1F815"},{"Typeface name":"Wingdings 3","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"129047","Unicode hex":"1F817"},{"Typeface name":"Wingdings 3","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"129048","Unicode hex":"1F818"},{"Typeface name":"Wingdings 3","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"129050","Unicode hex":"1F81A"},{"Typeface name":"Wingdings 3","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"129049","Unicode hex":"1F819"},{"Typeface name":"Wingdings 3","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"129051","Unicode hex":"1F81B"},{"Typeface name":"Wingdings 3","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"129052","Unicode hex":"1F81C"},{"Typeface name":"Wingdings 3","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"129054","Unicode hex":"1F81E"},{"Typeface name":"Wingdings 3","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"129053","Unicode hex":"1F81D"},{"Typeface name":"Wingdings 3","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"129055","Unicode hex":"1F81F"},{"Typeface name":"Wingdings 3","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"129024","Unicode hex":"1F800"},{"Typeface name":"Wingdings 3","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"129026","Unicode hex":"1F802"},{"Typeface name":"Wingdings 3","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"129025","Unicode hex":"1F801"},{"Typeface name":"Wingdings 3","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"129027","Unicode hex":"1F803"},{"Typeface name":"Wingdings 3","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"129028","Unicode hex":"1F804"},{"Typeface name":"Wingdings 3","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"129030","Unicode hex":"1F806"},{"Typeface name":"Wingdings 3","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"129029","Unicode hex":"1F805"},{"Typeface name":"Wingdings 3","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"129031","Unicode hex":"1F807"},{"Typeface name":"Wingdings 3","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"129032","Unicode hex":"1F808"},{"Typeface name":"Wingdings 3","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"129034","Unicode hex":"1F80A"},{"Typeface name":"Wingdings 3","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"129033","Unicode hex":"1F809"},{"Typeface name":"Wingdings 3","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"129035","Unicode hex":"1F80B"},{"Typeface name":"Wingdings 3","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"129056","Unicode hex":"1F820"},{"Typeface name":"Wingdings 3","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"129058","Unicode hex":"1F822"},{"Typeface name":"Wingdings 3","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"129060","Unicode hex":"1F824"},{"Typeface name":"Wingdings 3","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"129062","Unicode hex":"1F826"},{"Typeface name":"Wingdings 3","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"129064","Unicode hex":"1F828"},{"Typeface name":"Wingdings 3","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"129066","Unicode hex":"1F82A"},{"Typeface name":"Wingdings 3","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"129068","Unicode hex":"1F82C"},{"Typeface name":"Wingdings 3","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"129180","Unicode hex":"1F89C"},{"Typeface name":"Wingdings 3","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"129181","Unicode hex":"1F89D"},{"Typeface name":"Wingdings 3","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"129182","Unicode hex":"1F89E"},{"Typeface name":"Wingdings 3","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"129183","Unicode hex":"1F89F"},{"Typeface name":"Wingdings 3","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"129070","Unicode hex":"1F82E"},{"Typeface name":"Wingdings 3","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"129072","Unicode hex":"1F830"},{"Typeface name":"Wingdings 3","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"129074","Unicode hex":"1F832"},{"Typeface name":"Wingdings 3","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"129076","Unicode hex":"1F834"},{"Typeface name":"Wingdings 3","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"129078","Unicode hex":"1F836"},{"Typeface name":"Wingdings 3","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"129080","Unicode hex":"1F838"},{"Typeface name":"Wingdings 3","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"129082","Unicode hex":"1F83A"},{"Typeface name":"Wingdings 3","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"129081","Unicode hex":"1F839"},{"Typeface name":"Wingdings 3","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"129083","Unicode hex":"1F83B"},{"Typeface name":"Wingdings 3","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"129176","Unicode hex":"1F898"},{"Typeface name":"Wingdings 3","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"129178","Unicode hex":"1F89A"},{"Typeface name":"Wingdings 3","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"129177","Unicode hex":"1F899"},{"Typeface name":"Wingdings 3","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"129179","Unicode hex":"1F89B"},{"Typeface name":"Wingdings 3","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"129084","Unicode hex":"1F83C"},{"Typeface name":"Wingdings 3","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"129086","Unicode hex":"1F83E"},{"Typeface name":"Wingdings 3","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"129085","Unicode hex":"1F83D"},{"Typeface name":"Wingdings 3","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"129087","Unicode hex":"1F83F"},{"Typeface name":"Wingdings 3","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"129088","Unicode hex":"1F840"},{"Typeface name":"Wingdings 3","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"129090","Unicode hex":"1F842"},{"Typeface name":"Wingdings 3","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"129089","Unicode hex":"1F841"},{"Typeface name":"Wingdings 3","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"129091","Unicode hex":"1F843"},{"Typeface name":"Wingdings 3","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"129092","Unicode hex":"1F844"},{"Typeface name":"Wingdings 3","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"129094","Unicode hex":"1F846"},{"Typeface name":"Wingdings 3","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"129093","Unicode hex":"1F845"},{"Typeface name":"Wingdings 3","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"129095","Unicode hex":"1F847"},{"Typeface name":"Wingdings 3","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"11176","Unicode hex":"2BA8"},{"Typeface name":"Wingdings 3","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"11177","Unicode hex":"2BA9"},{"Typeface name":"Wingdings 3","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"11178","Unicode hex":"2BAA"},{"Typeface name":"Wingdings 3","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"11179","Unicode hex":"2BAB"},{"Typeface name":"Wingdings 3","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"11180","Unicode hex":"2BAC"},{"Typeface name":"Wingdings 3","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"11181","Unicode hex":"2BAD"},{"Typeface name":"Wingdings 3","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"11182","Unicode hex":"2BAE"},{"Typeface name":"Wingdings 3","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"11183","Unicode hex":"2BAF"},{"Typeface name":"Wingdings 3","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"129120","Unicode hex":"1F860"},{"Typeface name":"Wingdings 3","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"129122","Unicode hex":"1F862"},{"Typeface name":"Wingdings 3","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"129121","Unicode hex":"1F861"},{"Typeface name":"Wingdings 3","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"129123","Unicode hex":"1F863"},{"Typeface name":"Wingdings 3","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"129124","Unicode hex":"1F864"},{"Typeface name":"Wingdings 3","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"129125","Unicode hex":"1F865"},{"Typeface name":"Wingdings 3","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"129127","Unicode hex":"1F867"},{"Typeface name":"Wingdings 3","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"129126","Unicode hex":"1F866"},{"Typeface name":"Wingdings 3","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"129136","Unicode hex":"1F870"},{"Typeface name":"Wingdings 3","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"129138","Unicode hex":"1F872"},{"Typeface name":"Wingdings 3","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"129137","Unicode hex":"1F871"},{"Typeface name":"Wingdings 3","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"129139","Unicode hex":"1F873"},{"Typeface name":"Wingdings 3","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"129140","Unicode hex":"1F874"},{"Typeface name":"Wingdings 3","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"129141","Unicode hex":"1F875"},{"Typeface name":"Wingdings 3","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"129143","Unicode hex":"1F877"},{"Typeface name":"Wingdings 3","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"129142","Unicode hex":"1F876"},{"Typeface name":"Wingdings 3","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"129152","Unicode hex":"1F880"},{"Typeface name":"Wingdings 3","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"129154","Unicode hex":"1F882"},{"Typeface name":"Wingdings 3","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"129153","Unicode hex":"1F881"},{"Typeface name":"Wingdings 3","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"129155","Unicode hex":"1F883"},{"Typeface name":"Wingdings 3","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"129156","Unicode hex":"1F884"},{"Typeface name":"Wingdings 3","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"129157","Unicode hex":"1F885"},{"Typeface name":"Wingdings 3","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"129159","Unicode hex":"1F887"},{"Typeface name":"Wingdings 3","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"129158","Unicode hex":"1F886"},{"Typeface name":"Wingdings 3","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"129168","Unicode hex":"1F890"},{"Typeface name":"Wingdings 3","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"129170","Unicode hex":"1F892"},{"Typeface name":"Wingdings 3","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"129169","Unicode hex":"1F891"},{"Typeface name":"Wingdings 3","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"129171","Unicode hex":"1F893"},{"Typeface name":"Wingdings 3","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"129172","Unicode hex":"1F894"},{"Typeface name":"Wingdings 3","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"129174","Unicode hex":"1F896"},{"Typeface name":"Wingdings 3","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"129173","Unicode hex":"1F895"},{"Typeface name":"Wingdings 3","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"129175","Unicode hex":"1F897"}]},{}],85:[function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.hex=n.dec=n.codePoint=void 0;for(var i=r(e("./dingbats")),o={},s=String.fromCodePoint?String.fromCodePoint:function(e){if(e<=65535)return String.fromCharCode(e);var t=Math.floor((e-65536)/1024)+55296,n=(e-65536)%1024+56320;return String.fromCharCode(t,n)},a=0,l=i.default;a>1,u=-7,d=n?i-1:0,h=n?-1:1,f=e[t+d];for(d+=h,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=256*o+e[t+d],d+=h,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+e[t+d],d+=h,u-=8);if(0===o)o=1-c;else{if(o===l)return s?NaN:1/0*(f?-1:1);s+=Math.pow(2,r),o-=c}return(f?-1:1)*s*Math.pow(2,o-r)},n.write=function(e,t,n,r,i,o){var s,a,l,c=8*o-i-1,u=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,p=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+d>=1?h/l:h*Math.pow(2,1-d))*l>=2&&(s++,l/=2),s+d>=u?(a=0,s=u):s+d>=1?(a=(t*l-1)*Math.pow(2,i),s+=d):(a=t*Math.pow(2,d-1)*Math.pow(2,i),s=0));i>=8;e[n+f]=255&a,f+=p,a/=256,i-=8);for(s=s<0;e[n+f]=255&s,f+=p,s/=256,c-=8);e[n+f-p]|=128*m}},{}],87:[function(e,t,n){var r={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},{}],88:[function(e,t,r){(function(n,i){!function(e){"object"==typeof r&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==n?n:"undefined"!=typeof self?self:this).JSZip=e()}((function(){return function t(n,r,i){function o(a,l){if(!r[a]){if(!n[a]){var c="function"==typeof e&&e;if(!l&&c)return c(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[a]={exports:{}};n[a][0].call(d.exports,(function(e){return o(n[a][1][e]||e)}),d,d.exports,t,n,r,i)}return r[a].exports}for(var s="function"==typeof e&&e,a=0;a>2,a=(3&t)<<4|n>>4,l=1>6:64,c=2>4,n=(15&s)<<4|(a=o.indexOf(e.charAt(c++)))>>2,r=(3&a)<<6|(l=o.indexOf(e.charAt(c++))),d[u++]=t,64!==a&&(d[u++]=n),64!==l&&(d[u++]=r);return d}},{"./support":30,"./utils":32}],2:[function(e,t,n){"use strict";var r=e("./external"),i=e("./stream/DataWorker"),o=e("./stream/Crc32Probe"),s=e("./stream/DataLengthProbe");function a(e,t,n,r,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=n,this.compression=r,this.compressedContent=i}a.prototype={getContentWorker:function(){var e=new i(r.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new s("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new i(r.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},a.createWorkerFrom=function(e,t,n){return e.pipe(new o).pipe(new s("uncompressedSize")).pipe(t.compressWorker(n)).pipe(new s("compressedSize")).withStreamInfo("compression",t)},t.exports=a},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,n){"use strict";var r=e("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(e){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,n){"use strict";var r=e("./utils"),i=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==r.getTypeOf(e)?function(e,t,n,r){var o=i,s=0+n;e^=-1;for(var a=0;a>>8^o[255&(e^t[a])];return~e}(0|t,e,e.length):function(e,t,n,r){var o=i,s=0+n;e^=-1;for(var a=0;a>>8^o[255&(e^t.charCodeAt(a))];return~e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,n){"use strict";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(e,t,n){"use strict";var r;r="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:r}},{lie:37}],7:[function(e,t,n){"use strict";var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),o=e("./utils"),s=e("./stream/GenericWorker"),a=r?"uint8array":"array";function l(e,t){s.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}n.magic="\b\0",o.inherits(l,s),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(a,e.data),!1)},l.prototype.flush=function(){s.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},n.compressWorker=function(e){return new l("Deflate",e)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,n){"use strict";function r(e,t){var n,r="";for(n=0;n>>=8;return r}function i(e,t,n,i,s,u){var d,h,f=e.file,p=e.compression,m=u!==a.utf8encode,g=o.transformTo("string",u(f.name)),y=o.transformTo("string",a.utf8encode(f.name)),b=f.comment,_=o.transformTo("string",u(b)),v=o.transformTo("string",a.utf8encode(b)),w=y.length!==f.name.length,x=v.length!==b.length,S="",C="",M="",T=f.dir,E=f.date,D={crc32:0,compressedSize:0,uncompressedSize:0};t&&!n||(D.crc32=e.crc32,D.compressedSize=e.compressedSize,D.uncompressedSize=e.uncompressedSize);var k=0;t&&(k|=8),m||!w&&!x||(k|=2048);var R=0,O=0;T&&(R|=16),"UNIX"===s?(O=798,R|=function(e,t){var n=e;return e||(n=t?16893:33204),(65535&n)<<16}(f.unixPermissions,T)):(O=20,R|=function(e){return 63&(e||0)}(f.dosPermissions)),d=E.getUTCHours(),d<<=6,d|=E.getUTCMinutes(),d<<=5,d|=E.getUTCSeconds()/2,h=E.getUTCFullYear()-1980,h<<=4,h|=E.getUTCMonth()+1,h<<=5,h|=E.getUTCDate(),w&&(C=r(1,1)+r(l(g),4)+y,S+="up"+r(C.length,2)+C),x&&(M=r(1,1)+r(l(_),4)+v,S+="uc"+r(M.length,2)+M);var L="";return L+="\n\0",L+=r(k,2),L+=p.magic,L+=r(d,2),L+=r(h,2),L+=r(D.crc32,4),L+=r(D.compressedSize,4),L+=r(D.uncompressedSize,4),L+=r(g.length,2),L+=r(S.length,2),{fileRecord:c.LOCAL_FILE_HEADER+L+g+S,dirRecord:c.CENTRAL_FILE_HEADER+r(O,2)+L+r(_.length,2)+"\0\0\0\0"+r(R,4)+r(i,4)+g+S+_}}var o=e("../utils"),s=e("../stream/GenericWorker"),a=e("../utf8"),l=e("../crc32"),c=e("../signature");function u(e,t,n,r){s.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=n,this.encodeFileName=r,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(u,s),u.prototype.push=function(e){var t=e.meta.percent||0,n=this.entriesCount,r=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,s.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:n?(t+100*(n-r-1))/n:100}}))},u.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var n=i(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},u.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,n=i(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),t)this.push({data:function(e){return c.DATA_DESCRIPTOR+r(e.crc32,4)+r(e.compressedSize,4)+r(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},u.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)n=(n<<8)+this.byteAt(t);return this.index+=e,n},readString:function(e){return r.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,n){"use strict";var r=e("./Uint8ArrayReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,n){"use strict";var r=e("./DataReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,n){"use strict";var r=e("./ArrayReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,n){"use strict";var r=e("../utils"),i=e("../support"),o=e("./ArrayReader"),s=e("./StringReader"),a=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=r.getTypeOf(e);return r.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new a(e):i.uint8array?new l(r.transformTo("uint8array",e)):new o(r.transformTo("array",e)):new s(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,n){"use strict";n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,n){"use strict";var r=e("./GenericWorker"),i=e("../utils");function o(e){r.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(o,r),o.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,n){"use strict";var r=e("./GenericWorker"),i=e("../crc32");function o(){r.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(o,r),o.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,n){"use strict";var r=e("../utils"),i=e("./GenericWorker");function o(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}r.inherits(o,i),o.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,n){"use strict";var r=e("../utils"),i=e("./GenericWorker");function o(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=r.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}r.inherits(o,i),o.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,r.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(r.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,n){"use strict";function r(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var n=0;n "+e:e}},t.exports=r},{}],29:[function(e,t,n){"use strict";var r=e("../utils"),o=e("./ConvertWorker"),s=e("./GenericWorker"),a=e("../base64"),l=e("../support"),c=e("../external"),u=null;if(l.nodestream)try{u=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function d(e,t,n){var i=t;switch(t){case"blob":case"arraybuffer":i="uint8array";break;case"base64":i="string"}try{this._internalType=i,this._outputType=t,this._mimeType=n,r.checkSupport(i),this._worker=e.pipe(new o(i)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}d.prototype={accumulate:function(e){return function(e,t){return new c.Promise((function(n,o){var s=[],l=e._internalType,c=e._outputType,u=e._mimeType;e.on("data",(function(e,n){s.push(e),t&&t(n)})).on("error",(function(e){s=[],o(e)})).on("end",(function(){try{var e=function(e,t,n){switch(e){case"blob":return r.newBlob(r.transformTo("arraybuffer",t),n);case"base64":return a.encode(t);default:return r.transformTo(e,t)}}(c,function(e,t){var n,r=0,o=null,s=0;for(n=0;n>>6:(n<65536?t[s++]=224|n>>>12:(t[s++]=240|n>>>18,t[s++]=128|n>>>12&63),t[s++]=128|n>>>6&63),t[s++]=128|63&n);return t}(e)},n.utf8decode=function(e){return i.nodebuffer?r.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,n,i,o,s=e.length,l=new Array(2*s);for(t=n=0;t>10&1023,l[n++]=56320|1023&i)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),r.applyFromCharCode(l)}(e=r.transformTo(i.uint8array?"uint8array":"array",e))},r.inherits(c,s),c.prototype.processChunk=function(e){var t=r.transformTo(i.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var o=t;(t=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),t.set(o,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var s=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;0<=n&&128==(192&e[n]);)n--;return n<0||0===n?t:n+a[e[n]]>t?n:t}(t),l=t;s!==t.length&&(i.uint8array?(l=t.subarray(0,s),this.leftOver=t.subarray(s,t.length)):(l=t.slice(0,s),this.leftOver=t.slice(s,t.length))),this.push({data:n.utf8decode(l),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=c,r.inherits(u,s),u.prototype.processChunk=function(e){this.push({data:n.utf8encode(e.data),meta:e.meta})},n.Utf8EncodeWorker=u},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,n){"use strict";var r=e("./support"),i=e("./base64"),o=e("./nodejsUtils"),s=e("set-immediate-shim"),a=e("./external");function l(e){return e}function c(e,t){for(var n=0;n>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=r(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,n,r,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(n<65536?t[s++]=224|n>>>12:(t[s++]=240|n>>>18,t[s++]=128|n>>>12&63),t[s++]=128|n>>>6&63),t[s++]=128|63&n);return t},n.buf2binstring=function(e){return l(e,e.length)},n.binstring2buf=function(e){for(var t=new r.Buf8(e.length),n=0,i=t.length;n>10&1023,c[r++]=56320|1023&i)}return l(c,r)},n.utf8border=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;0<=n&&128==(192&e[n]);)n--;return n<0||0===n?t:n+s[e[n]]>t?n:t}},{"./common":41}],43:[function(e,t,n){"use strict";t.exports=function(e,t,n,r){for(var i=65535&e,o=e>>>16&65535,s=0;0!==n;){for(n-=s=2e3>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t,n,i){var o=r,s=i+n;e^=-1;for(var a=i;a>>8^o[255&(e^t[a])];return~e}},{}],46:[function(e,t,n){"use strict";var r,i=e("../utils/common"),o=e("./trees"),s=e("./adler32"),a=e("./crc32"),l=e("./messages"),c=0,u=0,d=-2,h=2,f=8,p=286,m=30,g=19,y=2*p+1,b=15,_=3,v=258,w=v+_+1,x=42,S=113;function C(e,t){return e.msg=l[t],t}function M(e){return(e<<1)-(4e.avail_out&&(n=e.avail_out),0!==n&&(i.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function D(e,t){o._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,E(e.strm)}function k(e,t){e.pending_buf[e.pending++]=t}function R(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function O(e,t){var n,r,i=e.max_chain_length,o=e.strstart,s=e.prev_length,a=e.nice_match,l=e.strstart>e.w_size-w?e.strstart-(e.w_size-w):0,c=e.window,u=e.w_mask,d=e.prev,h=e.strstart+v,f=c[o+s-1],p=c[o+s];e.prev_length>=e.good_match&&(i>>=2),a>e.lookahead&&(a=e.lookahead);do{if(c[(n=t)+s]===p&&c[n+s-1]===f&&c[n]===c[o]&&c[++n]===c[o+1]){o+=2,n++;do{}while(c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&ol&&0!=--i);return s<=e.lookahead?s:e.lookahead}function L(e){var t,n,r,o,l,c,u,d,h,f,p=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-w)){for(i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=n=e.hash_size;r=e.head[--t],e.head[t]=p<=r?r-p:0,--n;);for(t=n=p;r=e.prev[--t],e.prev[t]=p<=r?r-p:0,--n;);o+=p}if(0===e.strm.avail_in)break;if(c=e.strm,u=e.window,d=e.strstart+e.lookahead,f=void 0,(h=o)<(f=c.avail_in)&&(f=h),n=0===f?0:(c.avail_in-=f,i.arraySet(u,c.input,c.next_in,f,d),1===c.state.wrap?c.adler=s(c.adler,u,f,d):2===c.state.wrap&&(c.adler=a(c.adler,u,f,d)),c.next_in+=f,c.total_in+=f,f),e.lookahead+=n,e.lookahead+e.insert>=_)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=_&&(e.ins_h=(e.ins_h<=_)if(r=o._tr_tally(e,e.strstart-e.match_start,e.match_length-_),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=_){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=_&&(e.ins_h=(e.ins_h<=_&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-_,r=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-_),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(L(e),0===e.lookahead&&t===c)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,D(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-w&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(D(e,!1),e.strm.avail_out),1)})),new P(4,4,8,4,A),new P(4,5,16,8,A),new P(4,6,32,32,A),new P(4,4,16,16,I),new P(8,16,32,32,I),new P(8,16,128,128,I),new P(8,32,128,256,I),new P(32,128,258,1024,I),new P(32,258,258,4096,I)],n.deflateInit=function(e,t){return U(e,t,f,15,8,0)},n.deflateInit2=U,n.deflateReset=j,n.deflateResetKeep=H,n.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?d:(e.state.gzhead=t,u):d},n.deflate=function(e,t){var n,i,s,l;if(!e||!e.state||5>8&255),k(i,i.gzhead.time>>16&255),k(i,i.gzhead.time>>24&255),k(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),k(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(k(i,255&i.gzhead.extra.length),k(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=a(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(k(i,0),k(i,0),k(i,0),k(i,0),k(i,0),k(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),k(i,3),i.status=S);else{var h=f+(i.w_bits-8<<4)<<8;h|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(h|=32),h+=31-h%31,i.status=S,R(i,h),0!==i.strstart&&(R(i,e.adler>>>16),R(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending!==i.pending_buf_size));)k(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexs&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),0===l&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexs&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),0===l&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&E(e),i.pending+2<=i.pending_buf_size&&(k(i,255&e.adler),k(i,e.adler>>8&255),e.adler=0,i.status=S)):i.status=S),0!==i.pending){if(E(e),0===e.avail_out)return i.last_flush=-1,u}else if(0===e.avail_in&&M(t)<=M(n)&&4!==t)return C(e,-5);if(666===i.status&&0!==e.avail_in)return C(e,-5);if(0!==e.avail_in||0!==i.lookahead||t!==c&&666!==i.status){var p=2===i.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(L(e),0===e.lookahead)){if(t===c)return 1;break}if(e.match_length=0,n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(D(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){for(var n,r,i,s,a=e.window;;){if(e.lookahead<=v){if(L(e),e.lookahead<=v&&t===c)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=_&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=_?(n=o._tr_tally(e,1,e.match_length-_),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(D(e,!1),0===e.strm.avail_out)?1:2}(i,t):r[i.level].func(i,t);if(3!==p&&4!==p||(i.status=666),1===p||3===p)return 0===e.avail_out&&(i.last_flush=-1),u;if(2===p&&(1===t?o._tr_align(i):5!==t&&(o._tr_stored_block(i,0,0,!1),3===t&&(T(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),E(e),0===e.avail_out))return i.last_flush=-1,u}return 4!==t?u:i.wrap<=0?1:(2===i.wrap?(k(i,255&e.adler),k(i,e.adler>>8&255),k(i,e.adler>>16&255),k(i,e.adler>>24&255),k(i,255&e.total_in),k(i,e.total_in>>8&255),k(i,e.total_in>>16&255),k(i,e.total_in>>24&255)):(R(i,e.adler>>>16),R(i,65535&e.adler)),E(e),0=n.w_size&&(0===a&&(T(n.head),n.strstart=0,n.block_start=0,n.insert=0),f=new i.Buf8(n.w_size),i.arraySet(f,t,p-n.w_size,n.w_size,0),t=f,p=n.w_size),l=e.avail_in,c=e.next_in,h=e.input,e.avail_in=p,e.next_in=0,e.input=t,L(n);n.lookahead>=_;){for(r=n.strstart,o=n.lookahead-(_-1);n.ins_h=(n.ins_h<>>=v=_>>>24,p-=v,0==(v=_>>>16&255))T[o++]=65535&_;else{if(!(16&v)){if(!(64&v)){_=m[(65535&_)+(f&(1<>>=v,p-=v),p<15&&(f+=M[r++]<>>=v=_>>>24,p-=v,!(16&(v=_>>>16&255))){if(!(64&v)){_=g[(65535&_)+(f&(1<>>=v,p-=v,(v=o-s)>3,f&=(1<<(p-=w<<3))-1,e.next_in=r,e.next_out=o,e.avail_in=r>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function p(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function m(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new r.Buf32(d),t.distcode=t.distdyn=new r.Buf32(h),t.sane=1,t.back=-1,l):c}function g(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,m(e)):c}function y(e,t){var n,r;return e&&e.state?(r=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(r.arraySet(s.window,t,n-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(o=s.wsize-s.wnext)&&(o=i),r.arraySet(s.window,t,n-i,o,s.wnext),(i-=o)?(r.arraySet(s.window,t,n-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=o,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,n.check=o(n.check,j,2,0),_=b=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg="incorrect header check",n.mode=30;break}if(8!=(15&b)){e.msg="unknown compression method",n.mode=30;break}if(_-=4,A=8+(15&(b>>>=4)),0===n.wbits)n.wbits=A;else if(A>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0,n.mode=3;case 3:for(;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.head&&(n.head.time=b),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,j[2]=b>>>16&255,j[3]=b>>>24&255,n.check=o(n.check,j,4,0)),_=b=0,n.mode=4;case 4:for(;_<16;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.head&&(n.head.xflags=255&b,n.head.os=b>>8),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0,n.mode=5;case 5:if(1024&n.flags){for(;_<16;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.length=b,n.head&&(n.head.extra_len=b),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(g<(C=n.length)&&(C=g),C&&(n.head&&(A=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),r.arraySet(n.head.extra,d,p,C,A)),512&n.flags&&(n.check=o(n.check,d,C,p)),g-=C,p+=C,n.length-=C),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===g)break e;for(C=0;A=d[p+C++],n.head&&A&&n.length<65536&&(n.head.name+=String.fromCharCode(A)),A&&C>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}e.adler=n.check=f(b),_=b=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=m,e.avail_out=y,e.next_in=p,e.avail_in=g,n.hold=b,n.bits=_,2;e.adler=n.check=1,n.mode=12;case 12:if(5===t||6===t)break e;case 13:if(n.last){b>>>=7&_,_-=7&_,n.mode=27;break}for(;_<3;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}switch(n.last=1&b,_-=1,3&(b>>>=1)){case 0:n.mode=14;break;case 1:if(x(n),n.mode=20,6!==t)break;b>>>=2,_-=2;break e;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}b>>>=2,_-=2;break;case 14:for(b>>>=7&_,_-=7&_;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if((65535&b)!=(b>>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&b,_=b=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(C=n.length){if(g>>=5,_-=5,n.ndist=1+(31&b),b>>>=5,_-=5,n.ncode=4+(15&b),b>>>=4,_-=4,286>>=3,_-=3}for(;n.have<19;)n.lens[U[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,P={bits:n.lenbits},I=a(0,n.lens,0,19,n.lencode,0,n.work,P),n.lenbits=P.bits,I){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(k<16)b>>>=E,_-=E,n.lens[n.have++]=k;else{if(16===k){for(N=E+2;_>>=E,_-=E,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}A=n.lens[n.have-1],C=3+(3&b),b>>>=2,_-=2}else if(17===k){for(N=E+3;_>>=E)),b>>>=3,_-=3}else{for(N=E+7;_>>=E)),b>>>=7,_-=7}if(n.have+C>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;C--;)n.lens[n.have++]=A}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,P={bits:n.lenbits},I=a(1,n.lens,0,n.nlen,n.lencode,0,n.work,P),n.lenbits=P.bits,I){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,P={bits:n.distbits},I=a(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,P),n.distbits=P.bits,I){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(6<=g&&258<=y){e.next_out=m,e.avail_out=y,e.next_in=p,e.avail_in=g,n.hold=b,n.bits=_,s(e,w),m=e.next_out,h=e.output,y=e.avail_out,p=e.next_in,d=e.input,g=e.avail_in,b=n.hold,_=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;D=(H=n.lencode[b&(1<>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(D&&!(240&D)){for(R=E,O=D,L=k;D=(H=n.lencode[L+((b&(1<>R)])>>>16&255,k=65535&H,!(R+(E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}b>>>=R,_-=R,n.back+=R}if(b>>>=E,_-=E,n.back+=E,n.length=k,0===D){n.mode=26;break}if(32&D){n.back=-1,n.mode=12;break}if(64&D){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&D,n.mode=22;case 22:if(n.extra){for(N=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;D=(H=n.distcode[b&(1<>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(!(240&D)){for(R=E,O=D,L=k;D=(H=n.distcode[L+((b&(1<>R)])>>>16&255,k=65535&H,!(R+(E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}b>>>=R,_-=R,n.back+=R}if(b>>>=E,_-=E,n.back+=E,64&D){e.msg="invalid distance code",n.mode=30;break}n.offset=k,n.extra=15&D,n.mode=24;case 24:if(n.extra){for(N=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===y)break e;if(C=w-y,n.offset>C){if((C=n.offset-C)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}M=C>n.wnext?(C-=n.wnext,n.wsize-C):n.wnext-C,C>n.length&&(C=n.length),T=n.window}else T=h,M=m-n.offset,C=n.length;for(yb?(v=H[j+d[C]],A[I+d[C]]):(v=96,0),f=1<>k)+(p-=f)]=_<<24|v<<16|w,0!==p;);for(f=1<>=1;if(0!==f?(L&=f-1,L+=f):L=0,C++,0==--P[S]){if(S===T)break;S=t[n+d[C]]}if(E>>7)]}function S(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,n){e.bi_valid>s-n?(e.bi_buf|=t<>s-e.bi_valid,e.bi_valid+=n-s):(e.bi_buf|=t<>>=1,n<<=1,0<--t;);return n>>>1}function E(e,t,n){var r,i,s=new Array(o+1),a=0;for(r=1;r<=o;r++)s[r]=a=a+n[r-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=T(s[l]++,l))}}function D(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function k(e){8>1;1<=n;n--)O(e,s,n);for(i=c;n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],O(e,s,1),r=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=r,s[2*i]=s[2*n]+s[2*r],e.depth[i]=(e.depth[n]>=e.depth[r]?e.depth[n]:e.depth[r])+1,s[2*n+1]=s[2*r+1]=i,e.heap[1]=i++,O(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,r,i,s,a,l,c=t.dyn_tree,u=t.max_code,d=t.stat_desc.static_tree,h=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,m=t.stat_desc.max_length,g=0;for(s=0;s<=o;s++)e.bl_count[s]=0;for(c[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)m<(s=c[2*c[2*(r=e.heap[n])+1]+1]+1)&&(s=m,g++),c[2*r+1]=s,u>=7;r<30;r++)for(_[r]=i<<7,e=0;e<1<>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),A(e,e.l_desc),A(e,e.d_desc),s=function(e){var t;for(I(e,e.dyn_ltree,e.l_desc.max_code),I(e,e.dyn_dtree,e.d_desc.max_code),A(e,e.bl_desc),t=18;3<=t&&0===e.bl_tree[2*u[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=i&&(i=o)):i=o=n+5,n+4<=i&&-1!==t?H(e,t,n,r):4===e.strategy||o===i?(C(e,2+(r?1:0),3),L(e,d,h)):(C(e,4+(r?1:0),3),function(e,t,n,r){var i;for(C(e,t-257,5),C(e,n-1,5),C(e,r-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(p[n]+256+1)]++,e.dyn_dtree[2*x(t)]++),e.last_lit===e.lit_bufsize-1},n._tr_align=function(e){C(e,2,3),M(e,256,d),function(e){16===e.bi_valid?(S(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,n){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,n){"use strict";t.exports="function"==typeof setImmediate?setImmediate:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}},{}]},{},[10])(10)}))}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{buffer:83}],89:[function(e,t,n){n.Parser=e("./lib/parser").Parser,n.rules=e("./lib/rules"),n.errors=e("./lib/errors"),n.results=e("./lib/parsing-results"),n.StringSource=e("./lib/StringSource"),n.Token=e("./lib/Token"),n.bottomUp=e("./lib/bottom-up"),n.RegexTokeniser=e("./lib/regex-tokeniser").RegexTokeniser,n.rule=function(e){var t;return function(n){return t||(t=e()),t(n)}}},{"./lib/StringSource":90,"./lib/Token":91,"./lib/bottom-up":93,"./lib/errors":94,"./lib/parser":96,"./lib/parsing-results":97,"./lib/regex-tokeniser":98,"./lib/rules":99}],90:[function(e,t,n){var r=e("util"),i=(t.exports=function(e,t){return{asString:function(){return e},range:function(n,r){return new i(e,t,n,r)}}},function(e,t,n,r){this._string=e,this._description=t,this._startIndex=n,this._endIndex=r});i.prototype.to=function(e){return new i(this._string,this._description,this._startIndex,e._endIndex)},i.prototype.describe=function(){var e=this._position(),t=this._description?this._description+"\n":"";return r.format("%sLine number: %s\nCharacter number: %s",t,e.lineNumber,e.characterNumber)},i.prototype.lineNumber=function(){return this._position().lineNumber},i.prototype.characterNumber=function(){return this._position().characterNumber},i.prototype._position=function(){for(var e=this,t=0,n=function(){return e._string.indexOf("\n",t)},r=1;-1!==n()&&n()n){var c=a[1];return{token:new r(e[o].name,c,i.range(n,l)),endIndex:l}}}}return l=n+1,{token:new r("unrecognisedCharacter",t.substring(n,l),i.range(n,l)),endIndex:l}}return e=e.map((function(e){return{name:e.name,regex:new RegExp(e.regex.source,"g")}})),{tokenise:function(e,n){for(var o=new i(e,n),s=0,a=[];s1)for(var n=1;n=0&&n<=v}}function q(e){return function(t){return null==t?void 0:t[e]}}var X=q("byteLength"),K=G(X),J=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,Z=u?function(e){return m?m(e)&&!F(e):K(e)&&J.test(l.call(e))}:$(!1),Q=q("length");function ee(e,t){t=function(e){for(var t={},n=e.length,r=0;r":">",'"':""","'":"'","`":"`"},ze=Be(Ve),$e=Be(we(Ve)),Ge=re.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},qe=/(.)^/,Xe={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Ke=/\\|'|\r|\n|\u2028|\u2029/g;function Je(e){return"\\"+Xe[e]}var Ze=/^\s*(\w|\$)+\s*$/,Qe=0;function et(e,t,n,r,i){if(!(r instanceof t))return e.apply(n,i);var o=Ee(e.prototype),s=e.apply(o,i);return x(s)?s:o}var tt=w((function(e,t){var n=tt.placeholder,r=function(){for(var i=0,o=t.length,s=Array(o),a=0;a1)it(a,t-1,n,r),i=r.length;else for(var l=0,c=a.length;l0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}var ut=tt(ct,2);function dt(e,t,n){t=Ue(t,n);for(var r,i=te(e),o=0,s=i.length;o0?0:i-1;o>=0&&o0?s=o>=0?o:Math.max(o+l,s):l=o>=0?Math.min(o+1,l):o+l+1;else if(n&&o&&l)return r[o=n(r,i)]===i?o:-1;if(i!=i)return(o=t(a.call(r,s,l),z))>=0?o+s:-1;for(o=e>0?s:l-1;o>=0&&o=3;return function(t,n,r,i){var o=!rt(t)&&te(t),s=(o||t).length,a=e>0?0:s-1;for(i||(r=t[o?o[a]:a],a+=e);a>=0&&a=0}var kt=w((function(e,t,n){var r,i;return P(t)?i=t:(t=Re(t),r=t.slice(0,-1),t=t[t.length-1]),wt(e,(function(e){var o=i;if(!o){if(r&&r.length&&(e=Oe(e,r)),null==e)return;o=e[t]}return null==o?o:o.apply(e,n)}))}));function Rt(e,t){return wt(e,Pe(t))}function Ot(e,t,n){var r,i,o=-1/0,s=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=rt(e)?e:ve(e)).length;ao&&(o=r);else t=Ue(t,n),vt(e,(function(e,n,r){((i=t(e,n,r))>s||i===-1/0&&o===-1/0)&&(o=e,s=i)}));return o}function Lt(e,t,n){if(null==t||n)return rt(e)||(e=ve(e)),e[Ye(e.length-1)];var r=rt(e)?De(e):ve(e),i=Q(r);t=Math.max(Math.min(t,i),0);for(var o=i-1,s=0;s1&&(r=Ne(r,t[1])),t=le(e)):(r=Ut,t=it(t,!1,!1),e=Object(e));for(var i=0,o=t.length;i1&&(n=t[1])):(t=wt(it(t,!1,!1),String),r=function(e,n){return!Dt(t,n)}),Ft(e,r,n)}));function Wt(e,t,n){return a.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function Bt(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Wt(e,e.length-t)}function Vt(e,t,n){return a.call(e,null==t||n?1:t)}var zt=w((function(e,t){return t=it(t,!0,!0),Mt(e,(function(e){return!Dt(t,e)}))})),$t=w((function(e,t){return zt(e,t)}));function Gt(e,t,n,r){C(t)||(r=n,n=t,t=!1),null!=n&&(n=Ue(n,r));for(var i=[],o=[],s=0,a=Q(e);st?(r&&(clearTimeout(r),r=null),a=c,s=e.apply(i,o),r||(i=o=null)):r||!1===n.trailing||(r=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(r),a=0,r=i=o=null},c},debounce:function(e,t,n){var r,i,o,s,a,l=function(){var c=We()-i;t>c?r=setTimeout(l,t-c):(r=null,n||(s=e.apply(a,o)),r||(o=a=null))},c=w((function(c){return a=this,o=c,i=We(),r||(r=setTimeout(l,t),n&&(s=e.apply(a,o))),s}));return c.cancel=function(){clearTimeout(r),r=o=a=null},c},wrap:function(e,t){return tt(t,e)},negate:lt,compose:function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},after:function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},before:ct,once:ut,findKey:dt,findIndex:ft,findLastIndex:pt,sortedIndex:mt,indexOf:yt,lastIndexOf:bt,find:_t,detect:_t,findWhere:function(e,t){return _t(e,Ie(t))},each:vt,forEach:vt,map:wt,collect:wt,reduce:St,foldl:St,inject:St,reduceRight:Ct,foldr:Ct,filter:Mt,select:Mt,reject:function(e,t,n){return Mt(e,lt(Ue(t)),n)},every:Tt,all:Tt,some:Et,any:Et,contains:Dt,includes:Dt,include:Dt,invoke:kt,pluck:Rt,where:function(e,t){return Mt(e,Ie(t))},max:Ot,min:function(e,t,n){var r,i,o=1/0,s=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=rt(e)?e:ve(e)).length;ar||void 0===n)return 1;if(n=o)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),l=r[n];n=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(t)?n.showHidden=t:t&&r._extend(n,t),b(n.showHidden)&&(n.showHidden=!1),b(n.depth)&&(n.depth=2),b(n.colors)&&(n.colors=!1),b(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var n=a.styles[t];return n?"["+a.colors[n][0]+"m"+e+"["+a.colors[n][1]+"m":e}function c(e,t){return e}function u(e,t,n){if(e.customInspect&&t&&S(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return y(i)||(i=u(e,i,n)),i}var o=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(y(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}return g(t)?e.stylize(""+t,"number"):p(t)?e.stylize(""+t,"boolean"):m(t)?e.stylize("null","null"):void 0}(e,t);if(o)return o;var s=Object.keys(t),a=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(t)),x(t)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return d(t);if(0===s.length){if(S(t)){var l=t.name?": "+t.name:"";return e.stylize("[Function"+l+"]","special")}if(_(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(w(t))return e.stylize(Date.prototype.toString.call(t),"date");if(x(t))return d(t)}var c,v="",C=!1,M=["{","}"];return f(t)&&(C=!0,M=["[","]"]),S(t)&&(v=" [Function"+(t.name?": "+t.name:"")+"]"),_(t)&&(v=" "+RegExp.prototype.toString.call(t)),w(t)&&(v=" "+Date.prototype.toUTCString.call(t)),x(t)&&(v=" "+d(t)),0!==s.length||C&&0!=t.length?n<0?_(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),c=C?function(e,t,n,r,i){for(var o=[],s=0,a=t.length;s60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}(c,v,M)):M[0]+v+M[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,i,o){var s,a,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(a=e.stylize("[Setter]","special")),E(r,i)||(s="["+i+"]"),a||(e.seen.indexOf(l.value)<0?(a=m(n)?u(e,l.value,null):u(e,l.value,n-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),b(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function f(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function m(e){return null===e}function g(e){return"number"==typeof e}function y(e){return"string"==typeof e}function b(e){return void 0===e}function _(e){return v(e)&&"[object RegExp]"===C(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===C(e)}function x(e){return v(e)&&("[object Error]"===C(e)||e instanceof Error)}function S(e){return"function"==typeof e}function C(e){return Object.prototype.toString.call(e)}function M(e){return e<10?"0"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(b(o)&&(o=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!s[e])if(new RegExp("\\b"+e+"\\b","i").test(o)){var n=t.pid;s[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,n,t)}}else s[e]=function(){};return s[e]},r.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=f,r.isBoolean=p,r.isNull=m,r.isNullOrUndefined=function(e){return null==e},r.isNumber=g,r.isString=y,r.isSymbol=function(e){return"symbol"==typeof e},r.isUndefined=b,r.isRegExp=_,r.isObject=v,r.isDate=w,r.isError=x,r.isFunction=S,r.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},r.isBuffer=e("./support/isBuffer");var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){var e,t;console.log("%s - %s",(t=[M((e=new Date).getHours()),M(e.getMinutes()),M(e.getSeconds())].join(":"),[e.getDate(),T[e.getMonth()],t].join(" ")),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!v(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e}}).call(this,e("_process"),void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":104,_process:101,inherits:103}],106:[function(e,t,n){(function(){var e,n,r,i,o,s,a,l=[].slice,c={}.hasOwnProperty;e=function(){var e,t,n,r,i,s;if(s=arguments[0],i=2<=arguments.length?l.call(arguments,1):[],o(Object.assign))Object.assign.apply(null,arguments);else for(e=0,n=i.length;e":(null!=(n=this.parent)?n.name:void 0)?"attribute: {"+e+"}, parent: <"+this.parent.name+">":"attribute: {"+e+"}":""},e}()}).call(this)},{}],108:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing CDATA text. "+this.debugInfo());this.text=this.stringify.cdata(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).cdata(this)},t}(n)}).call(this)},{"./XMLNode":119}],109:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing comment text. "+this.debugInfo());this.text=this.stringify.comment(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).comment(this)},t}(n)}).call(this)},{"./XMLNode":119}],110:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r,i,o,s){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());if(null==r)throw new Error("Missing DTD attribute name. "+this.debugInfo(n));if(!i)throw new Error("Missing DTD attribute type. "+this.debugInfo(n));if(!o)throw new Error("Missing DTD attribute default. "+this.debugInfo(n));if(0!==o.indexOf("#")&&(o="#"+o),!o.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(n));if(s&&!o.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(n));this.elementName=this.stringify.eleName(n),this.attributeName=this.stringify.attName(r),this.attributeType=this.stringify.dtdAttType(i),this.defaultValue=this.stringify.dtdAttDefault(s),this.defaultValueType=o}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdAttList(this)},t}(n)}).call(this)},{"./XMLNode":119}],111:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());r||(r="(#PCDATA)"),Array.isArray(r)&&(r="("+r.join(",")+")"),this.name=this.stringify.eleName(n),this.value=this.stringify.dtdElementValue(r)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdElement(this)},t}(n)}).call(this)},{"./XMLNode":119}],112:[function(e,t,n){(function(){var n,r,i={}.hasOwnProperty;r=e("./Utility").isObject,n=e("./XMLNode"),t.exports=function(e){function t(e,n,i,o){if(t.__super__.constructor.call(this,e),null==i)throw new Error("Missing DTD entity name. "+this.debugInfo(i));if(null==o)throw new Error("Missing DTD entity value. "+this.debugInfo(i));if(this.pe=!!n,this.name=this.stringify.eleName(i),r(o)){if(!o.pubID&&!o.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(i));if(o.pubID&&!o.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(i));if(null!=o.pubID&&(this.pubID=this.stringify.dtdPubID(o.pubID)),null!=o.sysID&&(this.sysID=this.stringify.dtdSysID(o.sysID)),null!=o.nData&&(this.nData=this.stringify.dtdNData(o.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(i))}else this.value=this.stringify.dtdEntityValue(o)}return function(e,t){for(var n in t)i.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdEntity(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119}],113:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD notation name. "+this.debugInfo(n));if(!r.pubID&&!r.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(n));this.name=this.stringify.eleName(n),null!=r.pubID&&(this.pubID=this.stringify.dtdPubID(r.pubID)),null!=r.sysID&&(this.sysID=this.stringify.dtdSysID(r.sysID))}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdNotation(this)},t}(n)}).call(this)},{"./XMLNode":119}],114:[function(e,t,n){(function(){var n,r,i={}.hasOwnProperty;r=e("./Utility").isObject,n=e("./XMLNode"),t.exports=function(e){function t(e,n,i,o){var s;t.__super__.constructor.call(this,e),r(n)&&(n=(s=n).version,i=s.encoding,o=s.standalone),n||(n="1.0"),this.version=this.stringify.xmlVersion(n),null!=i&&(this.encoding=this.stringify.xmlEncoding(i)),null!=o&&(this.standalone=this.stringify.xmlStandalone(o))}return function(e,t){for(var n in t)i.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).declaration(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119}],115:[function(e,t,n){(function(){var n,r,i,o,s,a,l={}.hasOwnProperty;a=e("./Utility").isObject,s=e("./XMLNode"),n=e("./XMLDTDAttList"),i=e("./XMLDTDEntity"),r=e("./XMLDTDElement"),o=e("./XMLDTDNotation"),t.exports=function(e){function t(e,n,r){var i,o;t.__super__.constructor.call(this,e),this.name="!DOCTYPE",this.documentObject=e,a(n)&&(n=(i=n).pubID,r=i.sysID),null==r&&(r=(o=[n,r])[0],n=o[1]),null!=n&&(this.pubID=this.stringify.dtdPubID(n)),null!=r&&(this.sysID=this.stringify.dtdSysID(r))}return function(e,t){for(var n in t)l.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.element=function(e,t){var n;return n=new r(this,e,t),this.children.push(n),this},t.prototype.attList=function(e,t,r,i,o){var s;return s=new n(this,e,t,r,i,o),this.children.push(s),this},t.prototype.entity=function(e,t){var n;return n=new i(this,!1,e,t),this.children.push(n),this},t.prototype.pEntity=function(e,t){var n;return n=new i(this,!0,e,t),this.children.push(n),this},t.prototype.notation=function(e,t){var n;return n=new o(this,e,t),this.children.push(n),this},t.prototype.toString=function(e){return this.options.writer.set(e).docType(this)},t.prototype.ele=function(e,t){return this.element(e,t)},t.prototype.att=function(e,t,n,r,i){return this.attList(e,t,n,r,i)},t.prototype.ent=function(e,t){return this.entity(e,t)},t.prototype.pent=function(e,t){return this.pEntity(e,t)},t.prototype.not=function(e,t){return this.notation(e,t)},t.prototype.up=function(){return this.root()||this.documentObject},t}(s)}).call(this)},{"./Utility":106,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLNode":119}],116:[function(e,t,n){(function(){var n,r,i,o,s={}.hasOwnProperty;o=e("./Utility").isPlainObject,n=e("./XMLNode"),i=e("./XMLStringifier"),r=e("./XMLStringWriter"),t.exports=function(e){function t(e){t.__super__.constructor.call(this,null),this.name="?xml",e||(e={}),e.writer||(e.writer=new r),this.options=e,this.stringify=new i(e),this.isDocument=!0}return function(e,t){for(var n in t)s.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.end=function(e){var t;return e?o(e)&&(t=e,e=this.options.writer.set(t)):e=this.options.writer,e.document(this)},t.prototype.toString=function(e){return this.options.writer.set(e).document(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119,"./XMLStringWriter":123,"./XMLStringifier":124}],117:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m,g,y,b,_,v,w,x={}.hasOwnProperty;w=e("./Utility"),_=w.isObject,b=w.isFunction,v=w.isPlainObject,y=w.getValue,d=e("./XMLElement"),r=e("./XMLCData"),i=e("./XMLComment"),f=e("./XMLRaw"),g=e("./XMLText"),h=e("./XMLProcessingInstruction"),c=e("./XMLDeclaration"),u=e("./XMLDocType"),o=e("./XMLDTDAttList"),a=e("./XMLDTDEntity"),s=e("./XMLDTDElement"),l=e("./XMLDTDNotation"),n=e("./XMLAttribute"),m=e("./XMLStringifier"),p=e("./XMLStringWriter"),t.exports=function(){function e(e,t,n){var r;this.name="?xml",e||(e={}),e.writer?v(e.writer)&&(r=e.writer,e.writer=new p(r)):e.writer=new p(e),this.options=e,this.writer=e.writer,this.stringify=new m(e),this.onDataCallback=t||function(){},this.onEndCallback=n||function(){},this.currentNode=null,this.currentLevel=-1,this.openTags={},this.documentStarted=!1,this.documentCompleted=!1,this.root=null}return e.prototype.node=function(e,t,n){var r;if(null==e)throw new Error("Missing node name.");if(this.root&&-1===this.currentLevel)throw new Error("Document can only have one root node. "+this.debugInfo(e));return this.openCurrent(),e=y(e),null==t&&(t={}),t=y(t),_(t)||(n=(r=[t,n])[0],t=r[1]),this.currentNode=new d(this,e,t),this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,null!=n&&this.text(n),this},e.prototype.element=function(e,t,n){return this.currentNode&&this.currentNode instanceof u?this.dtdElement.apply(this,arguments):this.node(e,t,n)},e.prototype.attribute=function(e,t){var r,i;if(!this.currentNode||this.currentNode.children)throw new Error("att() can only be used immediately after an ele() call in callback mode. "+this.debugInfo(e));if(null!=e&&(e=y(e)),_(e))for(r in e)x.call(e,r)&&(i=e[r],this.attribute(r,i));else b(t)&&(t=t.apply()),this.options.skipNullAttributes&&null==t||(this.currentNode.attributes[e]=new n(this,e,t));return this},e.prototype.text=function(e){var t;return this.openCurrent(),t=new g(this,e),this.onData(this.writer.text(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.cdata=function(e){var t;return this.openCurrent(),t=new r(this,e),this.onData(this.writer.cdata(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.comment=function(e){var t;return this.openCurrent(),t=new i(this,e),this.onData(this.writer.comment(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.raw=function(e){var t;return this.openCurrent(),t=new f(this,e),this.onData(this.writer.raw(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.instruction=function(e,t){var n,r,i,o,s;if(this.openCurrent(),null!=e&&(e=y(e)),null!=t&&(t=y(t)),Array.isArray(e))for(n=0,o=e.length;n=0;)this.up();return this.onEnd()},e.prototype.openCurrent=function(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)},e.prototype.openNode=function(e){if(!e.isOpen)return!this.root&&0===this.currentLevel&&e instanceof d&&(this.root=e),this.onData(this.writer.openNode(e,this.currentLevel),this.currentLevel),e.isOpen=!0},e.prototype.closeNode=function(e){if(!e.isClosed)return this.onData(this.writer.closeNode(e,this.currentLevel),this.currentLevel),e.isClosed=!0},e.prototype.onData=function(e,t){return this.documentStarted=!0,this.onDataCallback(e,t+1)},e.prototype.onEnd=function(){return this.documentCompleted=!0,this.onEndCallback()},e.prototype.debugInfo=function(e){return null==e?"":"node: <"+e+">"},e.prototype.ele=function(){return this.element.apply(this,arguments)},e.prototype.nod=function(e,t,n){return this.node(e,t,n)},e.prototype.txt=function(e){return this.text(e)},e.prototype.dat=function(e){return this.cdata(e)},e.prototype.com=function(e){return this.comment(e)},e.prototype.ins=function(e,t){return this.instruction(e,t)},e.prototype.dec=function(e,t,n){return this.declaration(e,t,n)},e.prototype.dtd=function(e,t,n){return this.doctype(e,t,n)},e.prototype.e=function(e,t,n){return this.element(e,t,n)},e.prototype.n=function(e,t,n){return this.node(e,t,n)},e.prototype.t=function(e){return this.text(e)},e.prototype.d=function(e){return this.cdata(e)},e.prototype.c=function(e){return this.comment(e)},e.prototype.r=function(e){return this.raw(e)},e.prototype.i=function(e,t){return this.instruction(e,t)},e.prototype.att=function(){return this.currentNode&&this.currentNode instanceof u?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},e.prototype.a=function(){return this.currentNode&&this.currentNode instanceof u?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},e.prototype.ent=function(e,t){return this.entity(e,t)},e.prototype.pent=function(e,t){return this.pEntity(e,t)},e.prototype.not=function(e,t){return this.notation(e,t)},e}()}).call(this)},{"./Utility":106,"./XMLAttribute":107,"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLStringWriter":123,"./XMLStringifier":124,"./XMLText":125}],118:[function(e,t,n){(function(){var n,r,i,o,s,a,l={}.hasOwnProperty;a=e("./Utility"),s=a.isObject,o=a.isFunction,i=a.getValue,r=e("./XMLNode"),n=e("./XMLAttribute"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing element name. "+this.debugInfo());this.name=this.stringify.eleName(n),this.attributes={},null!=r&&this.attribute(r),e.isDocument&&(this.isRoot=!0,this.documentObject=e,e.rootObject=this)}return function(e,t){for(var n in t)l.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){var e,t,n,r;for(t in(n=Object.create(this)).isRoot&&(n.documentObject=null),n.attributes={},r=this.attributes)l.call(r,t)&&(e=r[t],n.attributes[t]=e.clone());return n.children=[],this.children.forEach((function(e){var t;return(t=e.clone()).parent=n,n.children.push(t)})),n},t.prototype.attribute=function(e,t){var r,a;if(null!=e&&(e=i(e)),s(e))for(r in e)l.call(e,r)&&(a=e[r],this.attribute(r,a));else o(t)&&(t=t.apply()),this.options.skipNullAttributes&&null==t||(this.attributes[e]=new n(this,e,t));return this},t.prototype.removeAttribute=function(e){var t,n,r;if(null==e)throw new Error("Missing attribute name. "+this.debugInfo());if(e=i(e),Array.isArray(e))for(n=0,r=e.length;n":(null!=(n=this.parent)?n.name:void 0)?"node: <"+e+">, parent: <"+this.parent.name+">":"node: <"+e+">":""},t.prototype.ele=function(e,t,n){return this.element(e,t,n)},t.prototype.nod=function(e,t,n){return this.node(e,t,n)},t.prototype.txt=function(e){return this.text(e)},t.prototype.dat=function(e){return this.cdata(e)},t.prototype.com=function(e){return this.comment(e)},t.prototype.ins=function(e,t){return this.instruction(e,t)},t.prototype.doc=function(){return this.document()},t.prototype.dec=function(e,t,n){return this.declaration(e,t,n)},t.prototype.dtd=function(e,t){return this.doctype(e,t)},t.prototype.e=function(e,t,n){return this.element(e,t,n)},t.prototype.n=function(e,t,n){return this.node(e,t,n)},t.prototype.t=function(e){return this.text(e)},t.prototype.d=function(e){return this.cdata(e)},t.prototype.c=function(e){return this.comment(e)},t.prototype.r=function(e){return this.raw(e)},t.prototype.i=function(e,t){return this.instruction(e,t)},t.prototype.u=function(){return this.up()},t.prototype.importXMLBuilder=function(e){return this.importDocument(e)},t}()}).call(this)},{"./Utility":106,"./XMLCData":108,"./XMLComment":109,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125}],120:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing instruction target. "+this.debugInfo());this.target=this.stringify.insTarget(n),r&&(this.value=this.stringify.insValue(r))}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).processingInstruction(this)},t}(n)}).call(this)},{"./XMLNode":119}],121:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing raw text. "+this.debugInfo());this.value=this.stringify.raw(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).raw(this)},t}(n)}).call(this)},{"./XMLNode":119}],122:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m={}.hasOwnProperty;l=e("./XMLDeclaration"),c=e("./XMLDocType"),n=e("./XMLCData"),r=e("./XMLComment"),u=e("./XMLElement"),h=e("./XMLRaw"),f=e("./XMLText"),d=e("./XMLProcessingInstruction"),i=e("./XMLDTDAttList"),o=e("./XMLDTDElement"),s=e("./XMLDTDEntity"),a=e("./XMLDTDNotation"),p=e("./XMLWriterBase"),t.exports=function(e){function t(e,n){t.__super__.constructor.call(this,n),this.stream=e}return function(e,t){for(var n in t)m.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.document=function(e){var t,n,i,o,s,a,u,h;for(n=0,o=(a=e.children).length;n"+this.endline(e))},t.prototype.comment=function(e,t){return this.stream.write(this.space(t)+"\x3c!-- "+e.text+" --\x3e"+this.endline(e))},t.prototype.declaration=function(e,t){return this.stream.write(this.space(t)),this.stream.write('"),this.stream.write(this.endline(e))},t.prototype.docType=function(e,t){var l,c,u,h;if(t||(t=0),this.stream.write(this.space(t)),this.stream.write("0){for(this.stream.write(" ["),this.stream.write(this.endline(e)),c=0,u=(h=e.children).length;c"),this.stream.write(this.endline(e))},t.prototype.element=function(e,t){var i,o,s,a,l,c,p,g;for(l in t||(t=0),g=this.space(t),this.stream.write(g+"<"+e.name),c=e.attributes)m.call(c,l)&&(i=c[l],this.attribute(i));if(0===e.children.length||e.children.every((function(e){return""===e.value})))this.allowEmpty?this.stream.write(">"):this.stream.write(this.spacebeforeslash+"/>");else if(this.pretty&&1===e.children.length&&null!=e.children[0].value)this.stream.write(">"),this.stream.write(e.children[0].value),this.stream.write("");else{for(this.stream.write(">"+this.newline),s=0,a=(p=e.children).length;s")}return this.stream.write(this.endline(e))},t.prototype.processingInstruction=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.raw=function(e,t){return this.stream.write(this.space(t)+e.value+this.endline(e))},t.prototype.text=function(e,t){return this.stream.write(this.space(t)+e.value+this.endline(e))},t.prototype.dtdAttList=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdElement=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdEntity=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdNotation=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.endline=function(e){return e.isLastRootNode?"":this.newline},t}(p)}).call(this)},{"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125,"./XMLWriterBase":126}],123:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m={}.hasOwnProperty;l=e("./XMLDeclaration"),c=e("./XMLDocType"),n=e("./XMLCData"),r=e("./XMLComment"),u=e("./XMLElement"),h=e("./XMLRaw"),f=e("./XMLText"),d=e("./XMLProcessingInstruction"),i=e("./XMLDTDAttList"),o=e("./XMLDTDElement"),s=e("./XMLDTDEntity"),a=e("./XMLDTDNotation"),p=e("./XMLWriterBase"),t.exports=function(e){function t(e){t.__super__.constructor.call(this,e)}return function(e,t){for(var n in t)m.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.document=function(e){var t,n,i,o,s;for(this.textispresent=!1,o="",n=0,i=(s=e.children).length;n"+this.newline},t.prototype.comment=function(e,t){return this.space(t)+"\x3c!-- "+e.text+" --\x3e"+this.newline},t.prototype.declaration=function(e,t){var n;return n=this.space(t),n+='")+this.newline},t.prototype.docType=function(e,t){var l,c,u,h,f;if(t||(t=0),h=this.space(t),h+="0){for(h+=" [",h+=this.newline,c=0,u=(f=e.children).length;c")+this.newline},t.prototype.element=function(e,t){var i,o,s,a,l,c,p,g,y,b,_,v,w;for(p in t||(t=0),w=!1,this.textispresent?(this.newline="",this.pretty=!1):(this.newline=this.newlinedefault,this.pretty=this.prettydefault),g="",g+=(v=this.space(t))+"<"+e.name,y=e.attributes)m.call(y,p)&&(i=y[p],g+=this.attribute(i));if(0===e.children.length||e.children.every((function(e){return""===e.value})))this.allowEmpty?g+=">"+this.newline:g+=this.spacebeforeslash+"/>"+this.newline;else if(this.pretty&&1===e.children.length&&null!=e.children[0].value)g+=">",g+=e.children[0].value,g+=""+this.newline;else{if(this.dontprettytextnodes)for(s=0,l=(b=e.children).length;s"+this.newline,a=0,c=(_=e.children).length;a"+this.newline}return g},t.prototype.processingInstruction=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.raw=function(e,t){return this.space(t)+e.value+this.newline},t.prototype.text=function(e,t){return this.space(t)+e.value+this.newline},t.prototype.dtdAttList=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.dtdElement=function(e,t){return this.space(t)+""+this.newline},t.prototype.dtdEntity=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.dtdNotation=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.openNode=function(e,t){var n,r,i,o;if(t||(t=0),e instanceof u){for(r in i=this.space(t)+"<"+e.name,o=e.attributes)m.call(o,r)&&(n=o[r],i+=this.attribute(n));return i+(e.children?">":"/>")+this.newline}return i=this.space(t)+"")+this.newline},t.prototype.closeNode=function(e,t){switch(t||(t=0),!1){case!(e instanceof u):return this.space(t)+""+this.newline;case!(e instanceof c):return this.space(t)+"]>"+this.newline}},t}(p)}).call(this)},{"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125,"./XMLWriterBase":126}],124:[function(e,t,n){(function(){var e={}.hasOwnProperty;t.exports=function(){function t(t){var n,r,i,o,s;for(i in this.assertLegalChar=(n=this.assertLegalChar,r=this,function(){return n.apply(r,arguments)}),t||(t={}),this.noDoubleEncoding=t.noDoubleEncoding,o=t.stringify||{})e.call(o,i)&&(s=o[i],this[i]=s)}return t.prototype.eleName=function(e){return e=""+e||"",this.assertLegalChar(e)},t.prototype.eleText=function(e){return e=""+e||"",this.assertLegalChar(this.elEscape(e))},t.prototype.cdata=function(e){return e=(e=""+e||"").replace("]]>","]]]]>"),this.assertLegalChar(e)},t.prototype.comment=function(e){if((e=""+e||"").match(/--/))throw new Error("Comment text cannot contain double-hypen: "+e);return this.assertLegalChar(e)},t.prototype.raw=function(e){return""+e||""},t.prototype.attName=function(e){return""+e||""},t.prototype.attValue=function(e){return e=""+e||"",this.attEscape(e)},t.prototype.insTarget=function(e){return""+e||""},t.prototype.insValue=function(e){if((e=""+e||"").match(/\?>/))throw new Error("Invalid processing instruction value: "+e);return e},t.prototype.xmlVersion=function(e){if(!(e=""+e||"").match(/1\.[0-9]+/))throw new Error("Invalid version number: "+e);return e},t.prototype.xmlEncoding=function(e){if(!(e=""+e||"").match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+e);return e},t.prototype.xmlStandalone=function(e){return e?"yes":"no"},t.prototype.dtdPubID=function(e){return""+e||""},t.prototype.dtdSysID=function(e){return""+e||""},t.prototype.dtdElementValue=function(e){return""+e||""},t.prototype.dtdAttType=function(e){return""+e||""},t.prototype.dtdAttDefault=function(e){return null!=e?""+e||"":e},t.prototype.dtdEntityValue=function(e){return""+e||""},t.prototype.dtdNData=function(e){return""+e||""},t.prototype.convertAttKey="@",t.prototype.convertPIKey="?",t.prototype.convertTextKey="#text",t.prototype.convertCDataKey="#cdata",t.prototype.convertCommentKey="#comment",t.prototype.convertRawKey="#raw",t.prototype.assertLegalChar=function(e){var t;if(t=e.match(/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/))throw new Error("Invalid character in string: "+e+" at index "+t.index);return e},t.prototype.elEscape=function(e){var t;return t=this.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,e.replace(t,"&").replace(//g,">").replace(/\r/g," ")},t.prototype.attEscape=function(e){var t;return t=this.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,e.replace(t,"&").replace(/0?new Array(t).join(this.indent):""},t}()}).call(this)},{}],127:[function(e,t,n){(function(){var n,r,i,o,s,a,l;l=e("./Utility"),s=l.assign,a=l.isFunction,n=e("./XMLDocument"),r=e("./XMLDocumentCB"),o=e("./XMLStringWriter"),i=e("./XMLStreamWriter"),t.exports.create=function(e,t,r,i){var o,a;if(null==e)throw new Error("Root element needs a name.");return i=s({},t,r,i),a=(o=new n(i)).element(e),i.headless||(o.declaration(i),null==i.pubID&&null==i.sysID||o.doctype(i)),a},t.exports.begin=function(e,t,i){var o;return a(e)&&(t=(o=[e,t])[0],i=o[1],e={}),t?new r(e,t,i):new n(e)},t.exports.stringWriter=function(e){return new o(e)},t.exports.streamWriter=function(e,t){return new i(e,t)}}).call(this)},{"./Utility":106,"./XMLDocument":116,"./XMLDocumentCB":117,"./XMLStreamWriter":122,"./XMLStringWriter":123}]},{},[21])(21)},e.exports=r()},25177:function(e,t,n){!function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},41488:function(e,t,n){!function(e){"use strict";var t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(r,i,o,s){var a=t(r),l=n[e][t(r)];return 2===a&&(l=l[i?0:1]),l.replace(/%d/i,r)}},i=["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-dz",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:0,doy:4}})}(n(95093))},58676:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(95093))},42353:function(e,t,n){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(e){return function(t,i,o,s){var a=n(t),l=r[e][n(t)];return 2===a&&(l=l[i?0:1]),l.replace(/%d/i,t)}},o=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},24496:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(95093))},6947:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-ps",{months:"كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل".split("_"),monthsShort:"ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).split("").reverse().join("").replace(/[١٢](?![\u062a\u0643])/g,(function(e){return n[e]})).split("").reverse().join("").replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(95093))},82682:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(95093))},89756:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(95093))},61509:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},i={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},o=function(e){return function(t,n,o,s){var a=r(t),l=i[e][r(t)];return 2===a&&(l=l[n?0:1]),l.replace(/%d/i,t)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:o("s"),ss:o("s"),m:o("m"),mm:o("m"),h:o("h"),hh:o("h"),d:o("d"),dd:o("d"),M:o("M"),MM:o("M"),y:o("y"),yy:o("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},95533:function(e,t,n){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var n=e%10;return e+(t[n]||t[e%100-n]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},28959:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"хвіліна":"хвіліну":"h"===n?t?"гадзіна":"гадзіну":e+" "+(r=+e,i={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n(95093))},47777:function(e,t,n){!function(e){"use strict";e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Миналата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[Миналия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",w:"седмица",ww:"%d седмици",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(95093))},54903:function(e,t,n){!function(e){"use strict";e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(95093))},17357:function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn-bd",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t?e<4?e:e+12:"ভোর"===t||"সকাল"===t?e:"দুপুর"===t?e>=3?e:e+12:"বিকাল"===t||"সন্ধ্যা"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"রাত":e<6?"ভোর":e<12?"সকাল":e<15?"দুপুর":e<18?"বিকাল":e<20?"সন্ধ্যা":"রাত"},week:{dow:0,doy:6}})}(n(95093))},61290:function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t&&e>=4||"দুপুর"===t&&e<5||"বিকাল"===t?e+12:e},meridiem:function(e,t,n){return e<4?"রাত":e<10?"সকাল":e<17?"দুপুর":e<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n(95093))},31545:function(e,t,n){!function(e){"use strict";var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12".split("_"),monthsShortRegex:/^(ཟླ་\d{1,2})/,monthsParseExact:!0,weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){return 12===e&&(e=0),"མཚན་མོ"===t&&e>=4||"ཉིན་གུང"===t&&e<5||"དགོང་དག"===t?e+12:e},meridiem:function(e,t,n){return e<4?"མཚན་མོ":e<10?"ཞོགས་ཀས":e<17?"ཉིན་གུང":e<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n(95093))},11470:function(e,t,n){!function(e){"use strict";function t(e,t,n){return e+" "+function(e,t){return 2===t?function(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],e)}function n(e){return e>9?n(e%10):e}var r=[/^gen/i,/^c[ʼ\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],i=/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,o=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];e.defineLocale("br",{months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:o,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[ʼ\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:o,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warcʼhoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Decʼh da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(n(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,t,n){return e<12?"a.m.":"g.m."}})}(n(95093))},44429:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"mm":return r+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return"jedan sat";case"hh":return r+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return r+(1===e?"dan":"dana");case"MM":return r+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return r+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:function(e,t,n,r){if("m"===n)return t?"jedna minuta":r?"jednu minutu":"jedne minute"},mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},7306:function(e,t,n){!function(e){"use strict";e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(95093))},56464:function(e,t,n){!function(e){"use strict";var t={standalone:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),format:"ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince".split("_"),isFormat:/DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/},n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),r=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],i=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function o(e){return e>1&&e<5&&1!=~~(e/10)}function s(e,t,n,r){var i=e+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"ss":return t||r?i+(o(e)?"sekundy":"sekund"):i+"sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?i+(o(e)?"minuty":"minut"):i+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?i+(o(e)?"hodiny":"hodin"):i+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?i+(o(e)?"dny":"dní"):i+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?i+(o(e)?"měsíce":"měsíců"):i+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?i+(o(e)?"roky":"let"):i+"lety"}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},73635:function(e,t,n){!function(e){"use strict";e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(95093))},64226:function(e,t,n){!function(e){"use strict";e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t="";return e>20?t=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(t=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+t},week:{dow:1,doy:4}})}(n(95093))},93601:function(e,t,n){!function(e){"use strict";e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},26111:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},54697:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},77853:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},60708:function(e,t,n){!function(e){"use strict";var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){return e<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(95093))},54691:function(e,t,n){!function(e){"use strict";e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){return e>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){return 6===this.day()?"[το προηγούμενο] dddd [{}] LT":"[την προηγούμενη] dddd [{}] LT"},sameElse:"L"},calendar:function(e,t){var n,r=this._calendarEl[e],i=t&&t.hours();return n=r,("undefined"!=typeof Function&&n instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(r=r.apply(t)),r.replace("{}",i%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(95093))},53872:function(e,t,n){!function(e){"use strict";e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:0,doy:4}})}(n(95093))},28298:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(95093))},56195:function(e,t,n){!function(e){"use strict";e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},66584:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},65543:function(e,t,n){!function(e){"use strict";e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(95093))},9033:function(e,t,n){!function(e){"use strict";e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:0,doy:6}})}(n(95093))},79402:function(e,t,n){!function(e){"use strict";e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},43004:function(e,t,n){!function(e){"use strict";e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},32934:function(e,t,n){!function(e){"use strict";e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(95093))},20838:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},17730:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:4},invalidDate:"Fecha inválida"})}(n(95093))},56575:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(95093))},97650:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4},invalidDate:"Fecha inválida"})}(n(95093))},3035:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},3508:function(e,t,n){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},119:function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"%d ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(95093))},90527:function(e,t,n){!function(e){"use strict";var t="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",t[7],t[8],t[9]];function r(e,r,i,o){var s="";switch(i){case"s":return o?"muutaman sekunnin":"muutama sekunti";case"ss":s=o?"sekunnin":"sekuntia";break;case"m":return o?"minuutin":"minuutti";case"mm":s=o?"minuutin":"minuuttia";break;case"h":return o?"tunnin":"tunti";case"hh":s=o?"tunnin":"tuntia";break;case"d":return o?"päivän":"päivä";case"dd":s=o?"päivän":"päivää";break;case"M":return o?"kuukauden":"kuukausi";case"MM":s=o?"kuukauden":"kuukautta";break;case"y":return o?"vuoden":"vuosi";case"yy":s=o?"vuoden":"vuotta"}return function(e,r){return e<10?r?n[e]:t[e]:e}(e,o)+" "+s}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},95995:function(e,t,n){!function(e){"use strict";e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},52477:function(e,t,n){!function(e){"use strict";e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},26435:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}(n(95093))},37892:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(95093))},85498:function(e,t,n){!function(e){"use strict";var t=/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,n=[/^janv/i,/^févr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^août/i,/^sept/i,/^oct/i,/^nov/i,/^déc/i];e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsRegex:t,monthsShortRegex:t,monthsStrictRegex:/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,monthsShortStrictRegex:/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(95093))},37071:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},41734:function(e,t,n){!function(e){"use strict";e.defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Meitheamh","Iúil","Lúnasa","Meán Fómhair","Deireadh Fómhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","Márt","Aib","Beal","Meith","Iúil","Lún","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Sathairn"],weekdaysShort:["Domh","Luan","Máirt","Céad","Déar","Aoine","Sath"],weekdaysMin:["Do","Lu","Má","Cé","Dé","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d míonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(95093))},70217:function(e,t,n){!function(e){"use strict";e.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(95093))},77329:function(e,t,n){!function(e){"use strict";e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},32124:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["थोडया सॅकंडांनी","थोडे सॅकंड"],ss:[e+" सॅकंडांनी",e+" सॅकंड"],m:["एका मिणटान","एक मिनूट"],mm:[e+" मिणटांनी",e+" मिणटां"],h:["एका वरान","एक वर"],hh:[e+" वरांनी",e+" वरां"],d:["एका दिसान","एक दीस"],dd:[e+" दिसांनी",e+" दीस"],M:["एका म्हयन्यान","एक म्हयनो"],MM:[e+" म्हयन्यानी",e+" म्हयने"],y:["एका वर्सान","एक वर्स"],yy:[e+" वर्सांनी",e+" वर्सां"]};return r?i[n][0]:i[n][1]}e.defineLocale("gom-deva",{months:{standalone:"जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),format:"जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार".split("_"),weekdaysShort:"आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.".split("_"),weekdaysMin:"आ_सो_मं_बु_ब्रे_सु_शे".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [वाजतां]",LTS:"A h:mm:ss [वाजतां]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [वाजतां]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [वाजतां]",llll:"ddd, D MMM YYYY, A h:mm [वाजतां]"},calendar:{sameDay:"[आयज] LT",nextDay:"[फाल्यां] LT",nextWeek:"[फुडलो] dddd[,] LT",lastDay:"[काल] LT",lastWeek:"[फाटलो] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s आदीं",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(वेर)/,ordinal:function(e,t){return"D"===t?e+"वेर":e},week:{dow:0,doy:3},meridiemParse:/राती|सकाळीं|दनपारां|सांजे/,meridiemHour:function(e,t){return 12===e&&(e=0),"राती"===t?e<4?e:e+12:"सकाळीं"===t?e:"दनपारां"===t?e>12?e:e+12:"सांजे"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"राती":e<12?"सकाळीं":e<16?"दनपारां":e<20?"सांजे":"राती"}})}(n(95093))},93383:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return r?i[n][0]:i[n][1]}e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){return"D"===t?e+"er":e},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokallim"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}})}(n(95093))},95050:function(e,t,n){!function(e){"use strict";var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પહેલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){return 12===e&&(e=0),"રાત"===t?e<4?e:e+12:"સવાર"===t?e:"બપોર"===t?e>=10?e:e+12:"સાંજ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"રાત":e<10?"સવાર":e<17?"બપોર":e<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n(95093))},11713:function(e,t,n){!function(e){"use strict";e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n(95093))},43861:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},r=[/^जन/i,/^फ़र|फर/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सितं|सित/i,/^अक्टू/i,/^नव|नवं/i,/^दिसं|दिस/i];e.defineLocale("hi",{months:{format:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),standalone:"जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर".split("_")},monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},monthsParse:r,longMonthsParse:r,shortMonthsParse:[/^जन/i,/^फ़र/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सित/i,/^अक्टू/i,/^नव/i,/^दिस/i],monthsRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsShortRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsStrictRegex:/^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,monthsShortStrictRegex:/^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात"===t?e<4?e:e+12:"सुबह"===t?e:"दोपहर"===t?e>=10?e:e+12:"शाम"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n(95093))},26308:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return r+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return r+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return r+(1===e?"dan":"dana");case"MM":return r+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return r+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:return"[prošlu] [nedjelju] [u] LT";case 3:return"[prošlu] [srijedu] [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},90609:function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(e,t,n,r){var i=e;switch(n){case"s":return r||t?"néhány másodperc":"néhány másodperce";case"ss":return i+(r||t)?" másodperc":" másodperce";case"m":return"egy"+(r||t?" perc":" perce");case"mm":return i+(r||t?" perc":" perce");case"h":return"egy"+(r||t?" óra":" órája");case"hh":return i+(r||t?" óra":" órája");case"d":return"egy"+(r||t?" nap":" napja");case"dd":return i+(r||t?" nap":" napja");case"M":return"egy"+(r||t?" hónap":" hónapja");case"MM":return i+(r||t?" hónap":" hónapja");case"y":return"egy"+(r||t?" év":" éve");case"yy":return i+(r||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},17160:function(e,t,n){!function(e){"use strict";e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?"գիշերվա":e<12?"առավոտվա":e<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-ին":e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(n(95093))},74063:function(e,t,n){!function(e){"use strict";e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(n(95093))},89374:function(e,t,n){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,n,r,i){var o=e+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return t(e)?o+(n||i?"sekúndur":"sekúndum"):o+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return t(e)?o+(n||i?"mínútur":"mínútum"):n?o+"mínúta":o+"mínútu";case"hh":return t(e)?o+(n||i?"klukkustundir":"klukkustundum"):o+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return t(e)?n?o+"dagar":o+(i?"daga":"dögum"):n?o+"dagur":o+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return t(e)?n?o+"mánuðir":o+(i?"mánuði":"mánuðum"):n?o+"mánuður":o+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return t(e)?o+(n||i?"ár":"árum"):o+(n||i?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},21827:function(e,t,n){!function(e){"use strict";e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},88383:function(e,t,n){!function(e){"use strict";e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},23827:function(e,t,n){!function(e){"use strict";e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,t){return"元"===t[1]?1:parseInt(t[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()!==this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()!==e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,t){switch(t){case"y":return 1===e?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n(95093))},89722:function(e,t,n){!function(e){"use strict";e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){return 12===e&&(e=0),"enjing"===t?e:"siyang"===t?e>=11?e:e+12:"sonten"===t||"ndalu"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(95093))},41794:function(e,t,n){!function(e){"use strict";e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,(function(e,t,n){return"ი"===n?t+"ში":t+n+"ში"}))},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):e},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}(n(95093))},27088:function(e,t,n){!function(e){"use strict";var t={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},96870:function(e,t,n){!function(e){"use strict";var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return"ល្ងាច"===e},meridiem:function(e,t,n){return e<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(95093))},84451:function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ರಾತ್ರಿ"===t?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===t?e:"ಮಧ್ಯಾಹ್ನ"===t?e>=10?e:e+12:"ಸಂಜೆ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(95093))},63164:function(e,t,n){!function(e){"use strict";e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}(n(95093))},6181:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["çend sanîye","çend sanîyeyan"],ss:[e+" sanîye",e+" sanîyeyan"],m:["deqîqeyek","deqîqeyekê"],mm:[e+" deqîqe",e+" deqîqeyan"],h:["saetek","saetekê"],hh:[e+" saet",e+" saetan"],d:["rojek","rojekê"],dd:[e+" roj",e+" rojan"],w:["hefteyek","hefteyekê"],ww:[e+" hefte",e+" hefteyan"],M:["mehek","mehekê"],MM:[e+" meh",e+" mehan"],y:["salek","salekê"],yy:[e+" sal",e+" salan"]};return t?i[n][0]:i[n][1]}e.defineLocale("ku-kmr",{months:"Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar".split("_"),monthsShort:"Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber".split("_"),monthsParseExact:!0,weekdays:"Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî".split("_"),weekdaysShort:"Yek_Du_Sê_Çar_Pên_În_Şem".split("_"),weekdaysMin:"Ye_Du_Sê_Ça_Pê_În_Şe".split("_"),meridiem:function(e,t,n){return e<12?n?"bn":"BN":n?"pn":"PN"},meridiemParse:/bn|BN|pn|PN/,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM[a] YYYY[an]",LLL:"Do MMMM[a] YYYY[an] HH:mm",LLLL:"dddd, Do MMMM[a] YYYY[an] HH:mm",ll:"Do MMM[.] YYYY[an]",lll:"Do MMM[.] YYYY[an] HH:mm",llll:"ddd[.], Do MMM[.] YYYY[an] HH:mm"},calendar:{sameDay:"[Îro di saet] LT [de]",nextDay:"[Sibê di saet] LT [de]",nextWeek:"dddd [di saet] LT [de]",lastDay:"[Duh di saet] LT [de]",lastWeek:"dddd[a borî di saet] LT [de]",sameElse:"L"},relativeTime:{future:"di %s de",past:"berî %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,w:t,ww:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(?:yê|ê|\.)/,ordinal:function(e,t){var n=t.toLowerCase();return n.includes("w")||n.includes("m")?e+".":e+function(e){var t=(e=""+e).substring(e.length-1),n=e.length>1?e.substring(e.length-2):"";return 12==n||13==n||"2"!=t&&"3"!=t&&"50"!=n&&"70"!=t&&"80"!=t?"ê":"yê"}(e)},week:{dow:1,doy:4}})}(n(95093))},98174:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];e.defineLocale("ku",{months:r,monthsShort:r,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){return e<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},78474:function(e,t,n){!function(e){"use strict";var t={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},79680:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?i[n][0]:i[n][1]}function n(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return n(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return n(e)}return n(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return n(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return n(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},15867:function(e,t,n){!function(e){"use strict";e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return"ຕອນແລງ"===e},meridiem:function(e,t,n){return e<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(n(95093))},45766:function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(e,t,n,r){return t?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(e){return e%10==0||e>10&&e<20}function i(e){return t[e].split("_")}function o(e,t,o,s){var a=e+" ";return 1===e?a+n(0,t,o[0],s):t?a+(r(e)?i(o)[1]:i(o)[0]):s?a+i(o)[1]:a+(r(e)?i(o)[1]:i(o)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(e,t,n,r){return t?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"},ss:o,m:n,mm:o,h:n,hh:o,d:n,dd:o,M:n,MM:o,y:n,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(95093))},69532:function(e,t,n){!function(e){"use strict";var t={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function r(e,r,i){return e+" "+n(t[i],e,r)}function i(e,r,i){return n(t[i],e,r)}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(e,t){return t?"dažas sekundes":"dažām sekundēm"},ss:r,m:i,mm:r,h:i,hh:r,d:i,dd:r,M:i,MM:r,y:i,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},58076:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var i=t.words[r];return 1===r.length?n?i[0]:i[1]:e+" "+t.correctGrammaticalCase(e,i)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},41848:function(e,t,n){!function(e){"use strict";e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},30306:function(e,t,n){!function(e){"use strict";e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"за %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"една минута",mm:"%d минути",h:"еден час",hh:"%d часа",d:"еден ден",dd:"%d дена",M:"еден месец",MM:"%d месеци",y:"една година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(95093))},73739:function(e,t,n){!function(e){"use strict";e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){return 12===e&&(e=0),"രാത്രി"===t&&e>=4||"ഉച്ച കഴിഞ്ഞ്"===t||"വൈകുന്നേരം"===t?e+12:e},meridiem:function(e,t,n){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}(n(95093))},99053:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return"ҮХ"===e},meridiem:function(e,t,n){return e<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(n(95093))},86169:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function r(e,t,n,r){var i="";if(t)switch(n){case"s":i="काही सेकंद";break;case"ss":i="%d सेकंद";break;case"m":i="एक मिनिट";break;case"mm":i="%d मिनिटे";break;case"h":i="एक तास";break;case"hh":i="%d तास";break;case"d":i="एक दिवस";break;case"dd":i="%d दिवस";break;case"M":i="एक महिना";break;case"MM":i="%d महिने";break;case"y":i="एक वर्ष";break;case"yy":i="%d वर्षे"}else switch(n){case"s":i="काही सेकंदां";break;case"ss":i="%d सेकंदां";break;case"m":i="एका मिनिटा";break;case"mm":i="%d मिनिटां";break;case"h":i="एका तासा";break;case"hh":i="%d तासां";break;case"d":i="एका दिवसा";break;case"dd":i="%d दिवसां";break;case"M":i="एका महिन्या";break;case"MM":i="%d महिन्यां";break;case"y":i="एका वर्षा";break;case"yy":i="%d वर्षां"}return i.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,t){return 12===e&&(e=0),"पहाटे"===t||"सकाळी"===t?e:"दुपारी"===t||"सायंकाळी"===t||"रात्री"===t?e>=12?e:e+12:void 0},meridiem:function(e,t,n){return e>=0&&e<6?"पहाटे":e<12?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n(95093))},92297:function(e,t,n){!function(e){"use strict";e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(95093))},73386:function(e,t,n){!function(e){"use strict";e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(95093))},77075:function(e,t,n){!function(e){"use strict";e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},72264:function(e,t,n){!function(e){"use strict";var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(95093))},22274:function(e,t,n){!function(e){"use strict";e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"én time",hh:"%d timer",d:"én dag",dd:"%d dager",w:"én uke",ww:"%d uker",M:"én måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},8235:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(95093))},43784:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},92572:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",w:"één week",ww:"%d weken",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},54566:function(e,t,n){!function(e){"use strict";e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._må._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},69330:function(e,t,n){!function(e){"use strict";e.defineLocale("oc-lnc",{months:{standalone:"genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),format:"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[uèi a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[ièr a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(95093))},29849:function(e,t,n){!function(e){"use strict";var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ਰਾਤ"===t?e<4?e:e+12:"ਸਵੇਰ"===t?e:"ਦੁਪਹਿਰ"===t?e>=10?e:e+12:"ਸ਼ਾਮ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ਰਾਤ":e<10?"ਸਵੇਰ":e<17?"ਦੁਪਹਿਰ":e<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n(95093))},94418:function(e,t,n){!function(e){"use strict";var t="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),r=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^paź/i,/^lis/i,/^gru/i];function i(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function o(e,t,n){var r=e+" ";switch(n){case"ss":return r+(i(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(i(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(i(e)?"godziny":"godzin");case"ww":return r+(i(e)?"tygodnie":"tygodni");case"MM":return r+(i(e)?"miesiące":"miesięcy");case"yy":return r+(i(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,r){return e?/D MMMM/.test(r)?n[e.month()]:t[e.month()]:t},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:o,m:o,mm:o,h:o,hh:o,d:"1 dzień",dd:"%d dni",w:"tydzień",ww:o,M:"miesiąc",MM:o,y:"rok",yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},48303:function(e,t,n){!function(e){"use strict";e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"do_2ª_3ª_4ª_5ª_6ª_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",invalidDate:"Data inválida"})}(n(95093))},79834:function(e,t,n){!function(e){"use strict";e.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},24457:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"săptămâni",MM:"luni",yy:"ani"}[n]}e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,w:"o săptămână",ww:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}(n(95093))},82271:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"минута":"минуту":e+" "+(r=+e,i={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",ww:"неделя_недели_недель",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,w:"неделя",ww:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(95093))},1221:function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(95093))},33478:function(e,t,n){!function(e){"use strict";e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},17538:function(e,t,n){!function(e){"use strict";e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return"ප.ව."===e||"පස් වරු"===e},meridiem:function(e,t,n){return e>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n(95093))},5784:function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function r(e){return e>1&&e<5}function i(e,t,n,i){var o=e+" ";switch(n){case"s":return t||i?"pár sekúnd":"pár sekundami";case"ss":return t||i?o+(r(e)?"sekundy":"sekúnd"):o+"sekundami";case"m":return t?"minúta":i?"minútu":"minútou";case"mm":return t||i?o+(r(e)?"minúty":"minút"):o+"minútami";case"h":return t?"hodina":i?"hodinu":"hodinou";case"hh":return t||i?o+(r(e)?"hodiny":"hodín"):o+"hodinami";case"d":return t||i?"deň":"dňom";case"dd":return t||i?o+(r(e)?"dni":"dní"):o+"dňami";case"M":return t||i?"mesiac":"mesiacom";case"MM":return t||i?o+(r(e)?"mesiace":"mesiacov"):o+"mesiacmi";case"y":return t||i?"rok":"rokom";case"yy":return t||i?o+(r(e)?"roky":"rokov"):o+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:case 4:case 5:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},46637:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i=e+" ";switch(n){case"s":return t||r?"nekaj sekund":"nekaj sekundami";case"ss":return i+(1===e?t?"sekundo":"sekundi":2===e?t||r?"sekundi":"sekundah":e<5?t||r?"sekunde":"sekundah":"sekund");case"m":return t?"ena minuta":"eno minuto";case"mm":return i+(1===e?t?"minuta":"minuto":2===e?t||r?"minuti":"minutama":e<5?t||r?"minute":"minutami":t||r?"minut":"minutami");case"h":return t?"ena ura":"eno uro";case"hh":return i+(1===e?t?"ura":"uro":2===e?t||r?"uri":"urama":e<5?t||r?"ure":"urami":t||r?"ur":"urami");case"d":return t||r?"en dan":"enim dnem";case"dd":return i+(1===e?t||r?"dan":"dnem":2===e?t||r?"dni":"dnevoma":t||r?"dni":"dnevi");case"M":return t||r?"en mesec":"enim mesecem";case"MM":return i+(1===e?t||r?"mesec":"mesecem":2===e?t||r?"meseca":"mesecema":e<5?t||r?"mesece":"meseci":t||r?"mesecev":"meseci");case"y":return t||r?"eno leto":"enim letom";case"yy":return i+(1===e?t||r?"leto":"letom":2===e?t||r?"leti":"letoma":e<5?t||r?"leta":"leti":t||r?"let":"leti")}}e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},86794:function(e,t,n){!function(e){"use strict";e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},3322:function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једног минута"],mm:["минут","минута","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],d:["један дан","једног дана"],dd:["дан","дана","дана"],M:["један месец","једног месеца"],MM:["месец","месеца","месеци"],y:["једну годину","једне године"],yy:["годину","године","година"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,i){var o,s=t.words[r];return 1===r.length?"y"===r&&n?"једна година":i||n?s[0]:s[1]:(o=t.correctGrammaticalCase(e,s),"yy"===r&&n&&"годину"===o?e+" година":e+" "+o)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},45719:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,i){var o,s=t.words[r];return 1===r.length?"y"===r&&n?"jedna godina":i||n?s[0]:s[1]:(o=t.correctGrammaticalCase(e,s),"yy"===r&&n&&"godinu"===o?e+" godina":e+" "+o)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},56e3:function(e,t,n){!function(e){"use strict";e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,t){return 12===e&&(e=0),"ekuseni"===t?e:"emini"===t?e>=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(95093))},41011:function(e,t,n){!function(e){"use strict";e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?":e":1===t||2===t?":a":":e")},week:{dow:1,doy:4}})}(n(95093))},40748:function(e,t,n){!function(e){"use strict";e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(95093))},11025:function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t||"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(95093))},11885:function(e,t,n){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n(95093))},28861:function(e,t,n){!function(e){"use strict";e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},86571:function(e,t,n){!function(e){"use strict";var t={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:{format:"январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри".split("_"),standalone:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_")},monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Фардо соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),"шаб"===t?e<4?e:e+12:"субҳ"===t?e:"рӯз"===t?e>=11?e:e+12:"бегоҳ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},55802:function(e,t,n){!function(e){"use strict";e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",w:"1 สัปดาห์",ww:"%d สัปดาห์",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(95093))},59527:function(e,t,n){!function(e){"use strict";var t={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'ünji",4:"'ünji",100:"'ünji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};e.defineLocale("tk",{months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[düýn] LT",lastWeek:"[geçen] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var r=e%10;return e+(t[r]||t[e%100-r]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(n(95093))},29231:function(e,t,n){!function(e){"use strict";e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},31052:function(e,t,n){!function(e){"use strict";var t="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(e,n,r,i){var o=function(e){var n=Math.floor(e%1e3/100),r=Math.floor(e%100/10),i=e%10,o="";return n>0&&(o+=t[n]+"vatlh"),r>0&&(o+=(""!==o?" ":"")+t[r]+"maH"),i>0&&(o+=(""!==o?" ":"")+t[i]),""===o?"pagh":o}(e);switch(r){case"ss":return o+" lup";case"mm":return o+" tup";case"hh":return o+" rep";case"dd":return o+" jaj";case"MM":return o+" jar";case"yy":return o+" DIS"}}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"leS":-1!==e.indexOf("jar")?t.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?t.slice(0,-3)+"nem":t+" pIq"},past:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"Hu’":-1!==e.indexOf("jar")?t.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?t.slice(0,-3)+"ben":t+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},85096:function(e,t,n){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_Çar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),meridiem:function(e,t,n){return e<12?n?"öö":"ÖÖ":n?"ös":"ÖS"},meridiemParse:/öö|ÖÖ|ös|ÖS/,isPM:function(e){return"ös"===e||"ÖS"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var r=e%10;return e+(t[r]||t[e%100-r]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(n(95093))},79846:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return r||t?i[n][0]:i[n][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){return e>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},97711:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(95093))},81765:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(95093))},48414:function(e,t,n){!function(e){"use strict";e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){return 12===e&&(e=0),"يېرىم كېچە"===t||"سەھەر"===t||"چۈشتىن بۇرۇن"===t?e:"چۈشتىن كېيىن"===t||"كەچ"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"يېرىم كېچە":r<900?"سەھەر":r<1130?"چۈشتىن بۇرۇن":r<1230?"چۈش":r<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(95093))},16618:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+(r=+e,i={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}function n(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:n.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(95093))},57777:function(e,t,n){!function(e){"use strict";var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(95093))},72475:function(e,t,n){!function(e){"use strict";e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(95093))},57609:function(e,t,n){!function(e){"use strict";e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(95093))},21135:function(e,t,n){!function(e){"use strict";e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần trước lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",w:"một tuần",ww:"%d tuần",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},64051:function(e,t,n){!function(e){"use strict";e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},82218:function(e,t,n){!function(e){"use strict";e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(95093))},52648:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(e){return e.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(e){return this.week()!==e.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(95093))},1632:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1200?"上午":1200===r?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},31541:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},50304:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},35358:(e,t,n)=>{var r={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":82682,"./ar-sa.js":82682,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function i(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=o,e.exports=i,i.id=35358},95093:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,r;function i(){return t.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(a(e,t))return!1;return!0}function c(e){return void 0===e}function u(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function h(e,t){var n,r=[],i=e.length;for(n=0;n>>0;for(t=0;t0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var L=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,A=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},P={};function N(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(P[e]=i),t&&(P[t[0]]=function(){return O(i.apply(this,arguments),t[1],t[2])}),n&&(P[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function H(e,t){return e.isValid()?(t=j(t,e.localeData()),I[t]=I[t]||function(e){var t,n,r,i=e.match(L);for(t=0,n=i.length;t=0&&A.test(e);)e=e.replace(A,r),A.lastIndex=0,n-=1;return e}var U={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function F(e){return"string"==typeof e?U[e]||U[e.toLowerCase()]:void 0}function Y(e){var t,n,r={};for(n in e)a(e,n)&&(t=F(n))&&(r[t]=e[n]);return r}var W={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var B,V=/\d/,z=/\d\d/,$=/\d{3}/,G=/\d{4}/,q=/[+-]?\d{6}/,X=/\d\d?/,K=/\d\d\d\d?/,J=/\d\d\d\d\d\d?/,Z=/\d{1,3}/,Q=/\d{1,4}/,ee=/[+-]?\d{1,6}/,te=/\d+/,ne=/[+-]?\d+/,re=/Z|[+-]\d\d:?\d\d/gi,ie=/Z|[+-]\d\d(?::?\d\d)?/gi,oe=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,se=/^[1-9]\d?/,ae=/^([1-9]\d|\d)/;function le(e,t,n){B[e]=D(t)?t:function(e,r){return e&&n?n:t}}function ce(e,t){return a(B,e)?B[e](t._strict,t._locale):new RegExp(ue(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,i){return t||n||r||i}))))}function ue(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function de(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function he(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=de(t)),n}B={};var fe={};function pe(e,t){var n,r,i=t;for("string"==typeof e&&(e=[e]),u(t)&&(i=function(e,n){n[t]=he(e)}),r=e.length,n=0;n68?1900:2e3)};var De,ke=Re("FullYear",!0);function Re(e,t){return function(n){return null!=n?(Le(this,e,n),i.updateOffset(this,t),this):Oe(this,e)}}function Oe(e,t){if(!e.isValid())return NaN;var n=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return r?n.getUTCSeconds():n.getSeconds();case"Minutes":return r?n.getUTCMinutes():n.getMinutes();case"Hours":return r?n.getUTCHours():n.getHours();case"Date":return r?n.getUTCDate():n.getDate();case"Day":return r?n.getUTCDay():n.getDay();case"Month":return r?n.getUTCMonth():n.getMonth();case"FullYear":return r?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Le(e,t,n){var r,i,o,s,a;if(e.isValid()&&!isNaN(n)){switch(r=e._d,i=e._isUTC,t){case"Milliseconds":return void(i?r.setUTCMilliseconds(n):r.setMilliseconds(n));case"Seconds":return void(i?r.setUTCSeconds(n):r.setSeconds(n));case"Minutes":return void(i?r.setUTCMinutes(n):r.setMinutes(n));case"Hours":return void(i?r.setUTCHours(n):r.setHours(n));case"Date":return void(i?r.setUTCDate(n):r.setDate(n));case"FullYear":break;default:return}o=n,s=e.month(),a=29!==(a=e.date())||1!==s||ye(o)?a:28,i?r.setUTCFullYear(o,s,a):r.setFullYear(o,s,a)}}function Ae(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?ye(e)?29:28:31-r%7%2}De=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t=0?(a=new Date(e+400,t,n,r,i,o,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,i,o,s),a}function Ve(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function ze(e,t,n){var r=7+t-n;return-(7+Ve(e,0,r).getUTCDay()-t)%7+r-1}function $e(e,t,n,r,i){var o,s,a=1+7*(t-1)+(7+n-r)%7+ze(e,r,i);return a<=0?s=Ee(o=e-1)+a:a>Ee(e)?(o=e+1,s=a-Ee(e)):(o=e,s=a),{year:o,dayOfYear:s}}function Ge(e,t,n){var r,i,o=ze(e.year(),t,n),s=Math.floor((e.dayOfYear()-o-1)/7)+1;return s<1?r=s+qe(i=e.year()-1,t,n):s>qe(e.year(),t,n)?(r=s-qe(e.year(),t,n),i=e.year()+1):(i=e.year(),r=s),{week:r,year:i}}function qe(e,t,n){var r=ze(e,t,n),i=ze(e+1,t,n);return(Ee(e)-r+i)/7}N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),le("w",X,se),le("ww",X,z),le("W",X,se),le("WW",X,z),me(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=he(e)}));function Xe(e,t){return e.slice(t,7).concat(e.slice(0,t))}N("d",0,"do","day"),N("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),N("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),N("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),le("d",X),le("e",X),le("E",X),le("dd",(function(e,t){return t.weekdaysMinRegex(e)})),le("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),le("dddd",(function(e,t){return t.weekdaysRegex(e)})),me(["dd","ddd","dddd"],(function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:m(n).invalidWeekday=e})),me(["d","e","E"],(function(e,t,n,r){t[r]=he(e)}));var Ke="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Je="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Qe=oe,et=oe,tt=oe;function nt(e,t,n){var r,i,o,s=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)o=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=De.call(this._weekdaysParse,s))?i:null:"ddd"===t?-1!==(i=De.call(this._shortWeekdaysParse,s))?i:null:-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:"dddd"===t?-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._shortWeekdaysParse,s))||-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:"ddd"===t?-1!==(i=De.call(this._shortWeekdaysParse,s))||-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:-1!==(i=De.call(this._minWeekdaysParse,s))||-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._shortWeekdaysParse,s))?i:null}function rt(){function e(e,t){return t.length-e.length}var t,n,r,i,o,s=[],a=[],l=[],c=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=ue(this.weekdaysMin(n,"")),i=ue(this.weekdaysShort(n,"")),o=ue(this.weekdays(n,"")),s.push(r),a.push(i),l.push(o),c.push(r),c.push(i),c.push(o);s.sort(e),a.sort(e),l.sort(e),c.sort(e),this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function it(){return this.hours()%12||12}function ot(e,t){N(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function st(e,t){return t._meridiemParse}N("H",["HH",2],0,"hour"),N("h",["hh",2],0,it),N("k",["kk",2],0,(function(){return this.hours()||24})),N("hmm",0,0,(function(){return""+it.apply(this)+O(this.minutes(),2)})),N("hmmss",0,0,(function(){return""+it.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),N("Hmm",0,0,(function(){return""+this.hours()+O(this.minutes(),2)})),N("Hmmss",0,0,(function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),ot("a",!0),ot("A",!1),le("a",st),le("A",st),le("H",X,ae),le("h",X,se),le("k",X,se),le("HH",X,z),le("hh",X,z),le("kk",X,z),le("hmm",K),le("hmmss",J),le("Hmm",K),le("Hmmss",J),pe(["H","HH"],we),pe(["k","kk"],(function(e,t,n){var r=he(e);t[we]=24===r?0:r})),pe(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),pe(["h","hh"],(function(e,t,n){t[we]=he(e),m(n).bigHour=!0})),pe("hmm",(function(e,t,n){var r=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r)),m(n).bigHour=!0})),pe("hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r,2)),t[Se]=he(e.substr(i)),m(n).bigHour=!0})),pe("Hmm",(function(e,t,n){var r=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r))})),pe("Hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r,2)),t[Se]=he(e.substr(i))}));var at=Re("Hours",!0);var lt,ct={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ie,monthsShort:Pe,week:{dow:0,doy:6},weekdays:Ke,weekdaysMin:Ze,weekdaysShort:Je,meridiemParse:/[ap]\.?m?\.?/i},ut={},dt={};function ht(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(r=pt(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&ht(i,n)>=t-1)break;t--}o++}return lt}(e)}function bt(e){var t,n=e._a;return n&&-2===m(e).overflow&&(t=n[_e]<0||n[_e]>11?_e:n[ve]<1||n[ve]>Ae(n[be],n[_e])?ve:n[we]<0||n[we]>24||24===n[we]&&(0!==n[xe]||0!==n[Se]||0!==n[Ce])?we:n[xe]<0||n[xe]>59?xe:n[Se]<0||n[Se]>59?Se:n[Ce]<0||n[Ce]>999?Ce:-1,m(e)._overflowDayOfYear&&(tve)&&(t=ve),m(e)._overflowWeeks&&-1===t&&(t=Me),m(e)._overflowWeekday&&-1===t&&(t=Te),m(e).overflow=t),e}var _t=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wt=/Z|[+-]\d\d(?::?\d\d)?/,xt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],St=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ct=/^\/?Date\((-?\d+)/i,Mt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Et(e){var t,n,r,i,o,s,a=e._i,l=_t.exec(a)||vt.exec(a),c=xt.length,u=St.length;if(l){for(m(e).iso=!0,t=0,n=c;t7)&&(l=!0)):(o=e._locale._week.dow,s=e._locale._week.doy,c=Ge(Pt(),o,s),n=Rt(t.gg,e._a[be],c.year),r=Rt(t.w,c.week),null!=t.d?((i=t.d)<0||i>6)&&(l=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(l=!0)):i=o),r<1||r>qe(n,o,s)?m(e)._overflowWeeks=!0:null!=l?m(e)._overflowWeekday=!0:(a=$e(n,r,i,o,s),e._a[be]=a.year,e._dayOfYear=a.dayOfYear)}(e),null!=e._dayOfYear&&(s=Rt(e._a[be],r[be]),(e._dayOfYear>Ee(s)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),n=Ve(s,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[we]&&0===e._a[xe]&&0===e._a[Se]&&0===e._a[Ce]&&(e._nextDay=!0,e._a[we]=0),e._d=(e._useUTC?Ve:Be).apply(null,a),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[we]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(m(e).weekdayMismatch=!0)}}function Lt(e){if(e._f!==i.ISO_8601)if(e._f!==i.RFC_2822){e._a=[],m(e).empty=!0;var t,n,r,o,s,a,l,c=""+e._i,u=c.length,d=0;for(l=(r=j(e._f,e._locale).match(L)||[]).length,t=0;t0&&m(e).unusedInput.push(s),c=c.slice(c.indexOf(n)+n.length),d+=n.length),P[o]?(n?m(e).empty=!1:m(e).unusedTokens.push(o),ge(o,n,e)):e._strict&&!n&&m(e).unusedTokens.push(o);m(e).charsLeftOver=u-d,c.length>0&&m(e).unusedInput.push(c),e._a[we]<=12&&!0===m(e).bigHour&&e._a[we]>0&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[we]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[we],e._meridiem),null!==(a=m(e).era)&&(e._a[be]=e._locale.erasConvertYear(a,e._a[be])),Ot(e),bt(e)}else kt(e);else Et(e)}function At(e){var t=e._i,n=e._f;return e._locale=e._locale||yt(e._l),null===t||void 0===n&&""===t?y({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),x(t)?new w(bt(t)):(d(t)?e._d=t:o(n)?function(e){var t,n,r,i,o,s,a=!1,l=e._f.length;if(0===l)return m(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:y()}));function jt(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Pt();for(n=t[0],r=1;r=0?new Date(e+400,t,n)-pn:new Date(e,t,n).valueOf()}function yn(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-pn:Date.UTC(e,t,n)}function bn(e,t){return t.erasAbbrRegex(e)}function _n(){var e,t,n,r,i,o=[],s=[],a=[],l=[],c=this.eras();for(e=0,t=c.length;e(o=qe(e,r,i))&&(t=o),xn.call(this,e,t,n,r,i))}function xn(e,t,n,r,i){var o=$e(e,t,n,r,i),s=Ve(o.year,0,o.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}N("N",0,0,"eraAbbr"),N("NN",0,0,"eraAbbr"),N("NNN",0,0,"eraAbbr"),N("NNNN",0,0,"eraName"),N("NNNNN",0,0,"eraNarrow"),N("y",["y",1],"yo","eraYear"),N("y",["yy",2],0,"eraYear"),N("y",["yyy",3],0,"eraYear"),N("y",["yyyy",4],0,"eraYear"),le("N",bn),le("NN",bn),le("NNN",bn),le("NNNN",(function(e,t){return t.erasNameRegex(e)})),le("NNNNN",(function(e,t){return t.erasNarrowRegex(e)})),pe(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var i=n._locale.erasParse(e,r,n._strict);i?m(n).era=i:m(n).invalidEra=e})),le("y",te),le("yy",te),le("yyy",te),le("yyyy",te),le("yo",(function(e,t){return t._eraYearOrdinalRegex||te})),pe(["y","yy","yyy","yyyy"],be),pe(["yo"],(function(e,t,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[be]=n._locale.eraYearOrdinalParse(e,i):t[be]=parseInt(e,10)})),N(0,["gg",2],0,(function(){return this.weekYear()%100})),N(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),vn("gggg","weekYear"),vn("ggggg","weekYear"),vn("GGGG","isoWeekYear"),vn("GGGGG","isoWeekYear"),le("G",ne),le("g",ne),le("GG",X,z),le("gg",X,z),le("GGGG",Q,G),le("gggg",Q,G),le("GGGGG",ee,q),le("ggggg",ee,q),me(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=he(e)})),me(["gg","GG"],(function(e,t,n,r){t[r]=i.parseTwoDigitYear(e)})),N("Q",0,"Qo","quarter"),le("Q",V),pe("Q",(function(e,t){t[_e]=3*(he(e)-1)})),N("D",["DD",2],"Do","date"),le("D",X,se),le("DD",X,z),le("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),pe(["D","DD"],ve),pe("Do",(function(e,t){t[ve]=he(e.match(X)[0])}));var Sn=Re("Date",!0);N("DDD",["DDDD",3],"DDDo","dayOfYear"),le("DDD",Z),le("DDDD",$),pe(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=he(e)})),N("m",["mm",2],0,"minute"),le("m",X,ae),le("mm",X,z),pe(["m","mm"],xe);var Cn=Re("Minutes",!1);N("s",["ss",2],0,"second"),le("s",X,ae),le("ss",X,z),pe(["s","ss"],Se);var Mn,Tn,En=Re("Seconds",!1);for(N("S",0,0,(function(){return~~(this.millisecond()/100)})),N(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),N(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),N(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),N(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),N(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),N(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),le("S",Z,V),le("SS",Z,z),le("SSS",Z,$),Mn="SSSS";Mn.length<=9;Mn+="S")le(Mn,te);function Dn(e,t){t[Ce]=he(1e3*("0."+e))}for(Mn="S";Mn.length<=9;Mn+="S")pe(Mn,Dn);Tn=Re("Milliseconds",!1),N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");var kn=w.prototype;function Rn(e){return e}kn.add=nn,kn.calendar=function(e,t){1===arguments.length&&(arguments[0]?sn(arguments[0])?(e=arguments[0],t=void 0):function(e){var t,n=s(e)&&!l(e),r=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;tn.valueOf():n.valueOf()9999?H(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):D(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(n,"Z")):H(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},kn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r="moment",i="";return this.isLocal()||(r=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+r+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY","-MM-DD[T]HH:mm:ss.SSS",n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(kn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),kn.toJSON=function(){return this.isValid()?this.toISOString():null},kn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},kn.unix=function(){return Math.floor(this.valueOf()/1e3)},kn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},kn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},kn.eraName=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},kn.isLocal=function(){return!!this.isValid()&&!this._isUTC},kn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},kn.isUtc=qt,kn.isUTC=qt,kn.zoneAbbr=function(){return this._isUTC?"UTC":""},kn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},kn.dates=C("dates accessor is deprecated. Use date instead.",Sn),kn.months=C("months accessor is deprecated. Use month instead",Ye),kn.years=C("years accessor is deprecated. Use year instead",ke),kn.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),kn.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=At(t))._a?(e=t._isUTC?p(t._a):Pt(t._a),this._isDSTShifted=this.isValid()&&function(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),s=0;for(r=0;r0):this._isDSTShifted=!1,this._isDSTShifted}));var On=R.prototype;function Ln(e,t,n,r){var i=yt(),o=p().set(r,t);return i[n](o,e)}function An(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||"",null!=t)return Ln(e,t,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=Ln(e,r,n,"month");return i}function In(e,t,n,r){"boolean"==typeof e?(u(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,u(t)&&(n=t,t=void 0),t=t||"");var i,o=yt(),s=e?o._week.dow:0,a=[];if(null!=n)return Ln(t,(n+s)%7,r,"day");for(i=0;i<7;i++)a[i]=Ln(t,(i+s)%7,r,"day");return a}On.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return D(r)?r.call(t,n):r},On.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(L).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},On.invalidDate=function(){return this._invalidDate},On.ordinal=function(e){return this._ordinal.replace("%d",e)},On.preparse=Rn,On.postformat=Rn,On.relativeTime=function(e,t,n,r){var i=this._relativeTime[n];return D(i)?i(e,t,n,r):i.replace(/%d/i,e)},On.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return D(n)?n(t):n.replace(/%s/i,t)},On.set=function(e){var t,n;for(n in e)a(e,n)&&(D(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},On.eras=function(e,t){var n,r,o,s=this._eras||yt("en")._eras;for(n=0,r=s.length;n=0)return l[r]},On.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?i(e.since).year():i(e.since).year()+(t-e.offset)*n},On.erasAbbrRegex=function(e){return a(this,"_erasAbbrRegex")||_n.call(this),e?this._erasAbbrRegex:this._erasRegex},On.erasNameRegex=function(e){return a(this,"_erasNameRegex")||_n.call(this),e?this._erasNameRegex:this._erasRegex},On.erasNarrowRegex=function(e){return a(this,"_erasNarrowRegex")||_n.call(this),e?this._erasNarrowRegex:this._erasRegex},On.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ne).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},On.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ne.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},On.monthsParse=function(e,t,n){var r,i,o;if(this._monthsParseExact)return Ue.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},On.monthsRegex=function(e){return this._monthsParseExact?(a(this,"_monthsRegex")||We.call(this),e?this._monthsStrictRegex:this._monthsRegex):(a(this,"_monthsRegex")||(this._monthsRegex=je),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},On.monthsShortRegex=function(e){return this._monthsParseExact?(a(this,"_monthsRegex")||We.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(a(this,"_monthsShortRegex")||(this._monthsShortRegex=He),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},On.week=function(e){return Ge(e,this._week.dow,this._week.doy).week},On.firstDayOfYear=function(){return this._week.doy},On.firstDayOfWeek=function(){return this._week.dow},On.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Xe(n,this._week.dow):e?n[e.day()]:n},On.weekdaysMin=function(e){return!0===e?Xe(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},On.weekdaysShort=function(e){return!0===e?Xe(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},On.weekdaysParse=function(e,t,n){var r,i,o;if(this._weekdaysParseExact)return nt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},On.weekdaysRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=Qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},On.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=et),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},On.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=tt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},On.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},On.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},mt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===he(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),i.lang=C("moment.lang is deprecated. Use moment.locale instead.",mt),i.langData=C("moment.langData is deprecated. Use moment.localeData instead.",yt);var Pn=Math.abs;function Nn(e,t,n,r){var i=Jt(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Hn(e){return e<0?Math.floor(e):Math.ceil(e)}function jn(e){return 4800*e/146097}function Un(e){return 146097*e/4800}function Fn(e){return function(){return this.as(e)}}var Yn=Fn("ms"),Wn=Fn("s"),Bn=Fn("m"),Vn=Fn("h"),zn=Fn("d"),$n=Fn("w"),Gn=Fn("M"),qn=Fn("Q"),Xn=Fn("y"),Kn=Yn;function Jn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Zn=Jn("milliseconds"),Qn=Jn("seconds"),er=Jn("minutes"),tr=Jn("hours"),nr=Jn("days"),rr=Jn("months"),ir=Jn("years");var or=Math.round,sr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ar(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}var lr=Math.abs;function cr(e){return(e>0)-(e<0)||+e}function ur(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,i,o,s,a,l=lr(this._milliseconds)/1e3,c=lr(this._days),u=lr(this._months),d=this.asSeconds();return d?(e=de(l/60),t=de(e/60),l%=60,e%=60,n=de(u/12),u%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",o=cr(this._months)!==cr(d)?"-":"",s=cr(this._days)!==cr(d)?"-":"",a=cr(this._milliseconds)!==cr(d)?"-":"",i+"P"+(n?o+n+"Y":"")+(u?o+u+"M":"")+(c?s+c+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+r+"S":"")):"P0D"}var dr=Ft.prototype;return dr.isValid=function(){return this._isValid},dr.abs=function(){var e=this._data;return this._milliseconds=Pn(this._milliseconds),this._days=Pn(this._days),this._months=Pn(this._months),e.milliseconds=Pn(e.milliseconds),e.seconds=Pn(e.seconds),e.minutes=Pn(e.minutes),e.hours=Pn(e.hours),e.months=Pn(e.months),e.years=Pn(e.years),this},dr.add=function(e,t){return Nn(this,e,t,1)},dr.subtract=function(e,t){return Nn(this,e,t,-1)},dr.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=F(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+jn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Un(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},dr.asMilliseconds=Yn,dr.asSeconds=Wn,dr.asMinutes=Bn,dr.asHours=Vn,dr.asDays=zn,dr.asWeeks=$n,dr.asMonths=Gn,dr.asQuarters=qn,dr.asYears=Xn,dr.valueOf=Kn,dr._bubble=function(){var e,t,n,r,i,o=this._milliseconds,s=this._days,a=this._months,l=this._data;return o>=0&&s>=0&&a>=0||o<=0&&s<=0&&a<=0||(o+=864e5*Hn(Un(a)+s),s=0,a=0),l.milliseconds=o%1e3,e=de(o/1e3),l.seconds=e%60,t=de(e/60),l.minutes=t%60,n=de(t/60),l.hours=n%24,s+=de(n/24),a+=i=de(jn(s)),s-=Hn(Un(i)),r=de(a/12),a%=12,l.days=s,l.months=a,l.years=r,this},dr.clone=function(){return Jt(this)},dr.get=function(e){return e=F(e),this.isValid()?this[e+"s"]():NaN},dr.milliseconds=Zn,dr.seconds=Qn,dr.minutes=er,dr.hours=tr,dr.days=nr,dr.weeks=function(){return de(this.days()/7)},dr.months=rr,dr.years=ir,dr.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,o=sr;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(i=e),"object"==typeof t&&(o=Object.assign({},sr,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1)),r=function(e,t,n,r){var i=Jt(e).abs(),o=or(i.as("s")),s=or(i.as("m")),a=or(i.as("h")),l=or(i.as("d")),c=or(i.as("M")),u=or(i.as("w")),d=or(i.as("y")),h=o<=n.ss&&["s",o]||o0,h[4]=r,ar.apply(null,h)}(this,!i,o,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)},dr.toISOString=ur,dr.toString=ur,dr.toJSON=ur,dr.locale=ln,dr.localeData=un,dr.toIsoString=C("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ur),dr.lang=cn,N("X",0,0,"unix"),N("x",0,0,"valueOf"),le("x",ne),le("X",/[+-]?\d+(\.\d{1,3})?/),pe("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),pe("x",(function(e,t,n){n._d=new Date(he(e))})),i.version="2.30.1",t=Pt,i.fn=kn,i.min=function(){return jt("isBefore",[].slice.call(arguments,0))},i.max=function(){return jt("isAfter",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=p,i.unix=function(e){return Pt(1e3*e)},i.months=function(e,t){return An(e,t,"months")},i.isDate=d,i.locale=mt,i.invalid=y,i.duration=Jt,i.isMoment=x,i.weekdays=function(e,t,n){return In(e,t,n,"weekdays")},i.parseZone=function(){return Pt.apply(null,arguments).parseZone()},i.localeData=yt,i.isDuration=Yt,i.monthsShort=function(e,t){return An(e,t,"monthsShort")},i.weekdaysMin=function(e,t,n){return In(e,t,n,"weekdaysMin")},i.defineLocale=gt,i.updateLocale=function(e,t){if(null!=t){var n,r,i=ct;null!=ut[e]&&null!=ut[e].parentLocale?ut[e].set(k(ut[e]._config,t)):(null!=(r=pt(e))&&(i=r._config),t=k(i,t),null==r&&(t.abbr=e),(n=new R(t)).parentLocale=ut[e],ut[e]=n),mt(e)}else null!=ut[e]&&(null!=ut[e].parentLocale?(ut[e]=ut[e].parentLocale,e===mt()&&mt(e)):null!=ut[e]&&delete ut[e]);return ut[e]},i.locales=function(){return M(ut)},i.weekdaysShort=function(e,t,n){return In(e,t,n,"weekdaysShort")},i.normalizeUnits=F,i.relativeTimeRounding=function(e){return void 0===e?or:"function"==typeof e&&(or=e,!0)},i.relativeTimeThreshold=function(e,t){return void 0!==sr[e]&&(void 0===t?sr[e]:(sr[e]=t,"s"===e&&(sr.ss=t-1),!0))},i.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=kn,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()},28646:e=>{e.exports=function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,(function(e){return i(t[s][1][e]||e)}),c,c.exports,e,t,n,r)}return n[s].exports}for(var o=void 0,s=0;so[s]^n?1:-1;return l==c?0:c(r=e.length)){for(i=n,t-=r;--t;i+=n);e+=i}else tH?e.c=e.e=null:e.c=n=g.length){if(!r)break e;for(;g.length<=p;g.push(0));f=m=0,u=(a%=c)-c+(s=1)}else{for(f=h=g[p],s=1;10<=h;h/=10,s++);m=(u=(a%=c)-c+s)<0?0:f/y[s-u-1]%10|0}if(r=r||t<0||null!=g[p+1]||(u<0?f:f%y[s-u-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):5H?e.c=e.e=null:e.e>>11))?(n=crypto.getRandomValues(new Uint32Array(2)),t[u]=n[0],t[u+1]=n[1]):(h.push(l%1e14),u+=2);u=a/2}else{if(!crypto.randomBytes)throw j=!1,Error(s+"crypto unavailable");for(t=crypto.randomBytes(a*=7);un-1&&(null==s[i+1]&&(s[i+1]=0),s[i+1]+=s[i]/n|0,s[i]%=n)}return s.reverse()}return function(r,i,o,s,a){var l,c,u,d,h,f,p,g,y=r.indexOf("."),b=L,_=A;for(0<=y&&(d=F,F=0,r=r.replace(".",""),f=(g=new B(i)).pow(r.length-y),F=d,g.c=t(v(m(f.c),f.e,"0"),10,o,e),g.e=g.c.length),u=d=(p=t(r,i,o,a?(l=W,e):(l=e,W))).length;0==p[--d];p.pop());if(!p[0])return l.charAt(0);if(y<0?--u:(f.c=p,f.e=u,f.s=s,p=(f=n(f,g,b,_,o)).c,h=f.r,u=f.e),y=p[c=u+b+1],d=o/2,h=h||c<0||null!=p[c+1],h=_<4?(null!=y||h)&&(0==_||_==(f.s<0?3:2)):do;)p[c]=0,c||(++u,p=[1].concat(p));for(d=p.length;!p[--d];);for(y=0,r="";y<=d;r+=l.charAt(p[y++]));r=v(r,u,l.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,i,o,s,a=0,l=e.length,c=t%h,u=t/h|0;for(e=e.slice();l--;)a=((i=c*(o=e[l]%h)+(r=u*o+(s=e[l]/h|0)*c)%h*h+a)/n|0)+(r/h|0)+u*s,e[l]=i%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var i,o;if(n!=r)o=rt[i]?1:-1;break}return o}function n(e,t,n,r){for(var i=0;n--;)e[n]-=i,i=e[n](R[f]||0)&&h--,k<0)v.push(1),m=!0;else{for(M=R.length,E=O.length,k+=2,1<(g=o(u/(O[f=0]+1)))&&(O=e(O,g,u),R=e(R,g,u),E=O.length,M=R.length),C=E,x=(w=R.slice(0,E)).length;x=u/2&&T++;do{if(g=0,(d=t(O,w,E,x))<0){if(S=w[0],E!=x&&(S=S*u+(w[1]||0)),1<(g=o(S/T)))for(u<=g&&(g=u-1),b=(y=e(O,g,u)).length,x=w.length;1==t(y,w,b,x);)g--,n(y,El&&(f.c.length=l):r&&(f=f.mod(t))}if(a){if(0===(a=o(a/2)))break;h=a%2}else if(G(e=e.times(n),e.e+1,1),14l&&(p.c.length=l):r&&(p=p.mod(t))}return r?f:(d&&(f=O.div(f)),t?f.mod(t):l?G(f,F,A,void 0):f)},R.integerValue=function(e){var t=new B(this);return null==e?e=A:y(e,0,8),G(t,t.e+1,e)},R.isEqualTo=R.eq=function(e,t){return 0===g(this,new B(e,t))},R.isFinite=function(){return!!this.c},R.isGreaterThan=R.gt=function(e,t){return 0this.c.length-2},R.isLessThan=R.lt=function(e,t){return g(this,new B(e,t))<0},R.isLessThanOrEqualTo=R.lte=function(e,t){return-1===(t=g(this,new B(e,t)))||0===t},R.isNaN=function(){return!this.s},R.isNegative=function(){return this.s<0},R.isPositive=function(){return 0r&&(r=this.e+1),r},R.shiftedBy=function(e){return y(e,-u,u),this.times("1e"+e)},R.squareRoot=R.sqrt=function(){var e,t,r,i,o,s=this,a=s.c,l=s.s,c=s.e,u=L+4,d=new B("0.5");if(1!==l||!a||!a[0])return new B(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);if((r=0==(l=Math.sqrt(+q(s)))||l==1/0?(((t=m(a)).length+c)%2==0&&(t+="0"),l=Math.sqrt(+t),c=p((c+1)/2)-(c<0||c%2),new B(t=l==1/0?"1e"+c:(t=l.toExponential()).slice(0,t.indexOf("e")+1)+c)):new B(l+"")).c[0])for((l=(c=r.e)+u)<3&&(l=0);;)if(o=r,r=d.times(o.plus(n(s,o,u,1))),m(o.c).slice(0,l)===(t=m(r.c)).slice(0,l)){if(r.e=Math.pow(10,12)&&!n||"trillion"===n?(l=r.trillion,t/=Math.pow(10,12)):c=Math.pow(10,9)&&!n||"billion"===n?(l=r.billion,t/=Math.pow(10,9)):c=Math.pow(10,6)&&!n||"million"===n?(l=r.million,t/=Math.pow(10,6)):(c=Math.pow(10,3)&&!n||"thousand"===n)&&(l=r.thousand,t/=Math.pow(10,3)),l&&(l=(o?" ":"")+l),a){var d=t.toString().split(".")[0];u=Math.max(a-d.length,0)}return{value:t,abbreviation:l,mantissaPrecision:u}}({value:d,forceAverage:M,abbreviations:s.currentAbbreviations(),spaceSeparated:O,totalLength:x});d=N.value,P+=N.abbreviation,x&&(E=N.mantissaPrecision)}if(I){var H=(p=(h={value:d,characteristicPrecision:S}).value,g=void 0===(m=h.characteristicPrecision)?0:m,b=(y=r(p.toExponential().split("e"),2))[0],_=y[1],v=+b,g&&1=this._config.preview;if(r)t.postMessage({results:a,workerId:s.WORKER_ID,finished:c});else if(w(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!w(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){w(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:s.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=s.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=v(this._chunkLoaded,this),t.onerror=v(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+i)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=s.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=v(this._chunkLoaded,this),t.onerror=v(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function h(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=v((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=v((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=v((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=v((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,i=Math.pow(2,53),o=-i,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,h=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(w(e.step)){var b=e.step;e.step=function(t){if(y=t,S())x();else{if(x(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],b(y,c))}}}function v(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function x(){return y&&r&&(M("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+s.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!v(e)}))),S()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;S()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(s=e.transform(s,o)),s=C(o,s),"__parsed_extra"===o?(i[o]=i[o]||[],i[o].push(s)):i[o]=s}return e.header&&(r>g.length?M("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(i,l)),r=!1,e.delimiter)w(e.delimiter)&&(e.delimiter=e.delimiter(i),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,i,o){var a,l,c,u;o=o||[",","\t","|",";",s.RECORD_SEP,s.UNIT_SEP];for(var d=0;d=a)return $(!0)}else for(U=u,u++;;){if(-1===(U=s.indexOf(t,U+1)))return f||x.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:v.length,index:u}),V();if(U===m-1)return V(s.substring(u,U).replace(j,t));if(t!==c||s[U+1]!==c){if(t===c||0===U||s[U-1]!==c){-1!==N&&N=a)return $(!0);break}x.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:v.length,index:u}),U++}}else U++}return V();function W(e){v.push(e),C=u}function B(e){var t=0;if(-1!==e){var n=s.substring(U+1,e);n&&""===n.trim()&&(t=n.length)}return t}function V(e){return f||(void 0===e&&(e=s.substring(u)),S.push(e),u=m,W(S),_&&G()),$()}function z(e){u=e,W(S),S=[],H=s.indexOf(r,u)}function $(e){return{data:v,errors:x,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:C+(h||0)}}}function G(){o($()),v=[],x=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=i[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:b,resume:b};if(w(n.userStep)){for(var s=0;s{"use strict";n.r(t),n.d(t,{default:()=>fr});var r,i=n(75735),o=n.n(i),s=new Uint8Array(16);function a(){if(!r&&!(r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(s)}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var c=[],u=0;u<256;++u)c.push((u+256).toString(16).substr(1));const d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&l.test(e)}(n))throw TypeError("Stringified UUID is invalid");return n},h=function(e,t,n){var r=(e=e||{}).random||(e.rng||a)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return d(r)};var f=n(34655),p=n(37007),m=n.n(p),g=Function.prototype.toString,y=g.call(Object);function b(e){var t,n,r;if(!e||"object"!=typeof e)return e;if(Array.isArray(e)){for(t=[],n=0,r=e.length;n=l.length)){var u=Math.min(c+C,l.length),d=l.slice(c,u);!function(l,c){l.forEach((function(l,u){var d=c+u,h=i.get(l),f=x(h[0],["atts_since","attachments"]);f.open_revs=h.map((function(e){return e.rev})),f.open_revs=f.open_revs.filter(M);var p=M;0===f.open_revs.length&&(delete f.open_revs,p=T),["revs","attachments","binary","ajax","latest"].forEach((function(e){e in t&&(f[e]=t[e])})),e.get(l,f,(function(e,t){var i,c,u,h;i=e?[{error:e}]:p(t),c=l,u=i,a[d]={id:c,docs:u},++s===o&&(h=[],a.forEach((function(e){e.docs.forEach((function(t){h.push({id:e.id,docs:[t]})}))})),n(null,{results:h})),r()}))}))}(d,c),c+=d.length}}()}try{localStorage.setItem("_pouch_check_localstorage",1),S=!!localStorage.getItem("_pouch_check_localstorage")}catch(e){S=!1}function D(){return S}const k="function"==typeof queueMicrotask?queueMicrotask:function(e){Promise.resolve().then(e)};class R extends(m()){constructor(){super(),this._listeners={},D()&&addEventListener("storage",(e=>{this.emit(e.key)}))}addListener(e,t,n,r){if(!this._listeners[t]){var i=!1,o=this;this._listeners[t]=s,this.on(e,s)}function s(){if(o._listeners[t])if(i)i="waiting";else{i=!0;var e=x(r,["style","include_docs","attachments","conflicts","filter","doc_ids","view","since","query_params","binary","return_docs"]);n.changes(e).on("change",(function(e){e.seq>r.since&&!r.cancelled&&(r.since=e.seq,r.onChange(e))})).on("complete",(function(){"waiting"===i&&k(s),i=!1})).on("error",(function(){i=!1}))}}}removeListener(e,t){t in this._listeners&&(super.removeListener(e,this._listeners[t]),delete this._listeners[t])}notifyLocalWindows(e){D()&&(localStorage[e]="a"===localStorage[e]?"b":"a")}notify(e){this.emit(e),this.notifyLocalWindows(e)}}function O(e){if("undefined"!=typeof console&&"function"==typeof console[e]){var t=Array.prototype.slice.call(arguments,1);console[e].apply(console,t)}}function L(e){var t=0;return e||(t=2e3),function(e,t){var n=6e5;return e=parseInt(e,10)||0,(t=parseInt(t,10))!=t||t<=e?t=(e||1)<<1:t+=1,t>n&&(e=3e5,t=n),~~((t-e)*Math.random()+e)}(e,t)}function A(e,t){O("info","The above "+e+" is totally normal. "+t)}class I extends Error{constructor(e,t,n){super(),this.status=e,this.name=t,this.message=n,this.error=!0}toString(){return JSON.stringify({status:this.status,name:this.name,message:this.message,reason:this.reason})}}new I(401,"unauthorized","Name or password is incorrect.");var P=new I(400,"bad_request","Missing JSON list of 'docs'"),N=new I(404,"not_found","missing"),H=new I(409,"conflict","Document update conflict"),j=new I(400,"bad_request","_id field must contain a string"),U=new I(412,"missing_id","_id is required for puts"),F=new I(400,"bad_request","Only reserved document ids may start with underscore."),Y=(new I(412,"precondition_failed","Database not open"),new I(500,"unknown_error","Database encountered an unknown error")),W=new I(500,"badarg","Some query argument is invalid"),B=(new I(400,"invalid_request","Request was invalid"),new I(400,"query_parse_error","Some query parameter is invalid")),V=new I(500,"doc_validation","Bad special document member"),z=new I(400,"bad_request","Something wrong with the request"),$=new I(400,"bad_request","Document must be a JSON object"),G=(new I(404,"not_found","Database not found"),new I(500,"indexed_db_went_bad","unknown")),q=(new I(500,"web_sql_went_bad","unknown"),new I(500,"levelDB_went_went_bad","unknown"),new I(403,"forbidden","Forbidden by design doc validate_doc_update function"),new I(400,"bad_request","Invalid rev format")),X=(new I(412,"file_exists","The database could not be created, the file already exists."),new I(412,"missing_stub","A pre-existing attachment stub wasn't found"));function K(e,t){function n(t){for(var n=Object.getOwnPropertyNames(e),r=0,i=n.length;r0||r0||r>>1],t)<0?i=r+1:o=r;return i}(e,t,n);e.splice(r,0,t)}function Pe(e,t){for(var n,r,i=t,o=e.length;i0;){var i=n.pop(),o=i.tree1,s=i.tree2;(o[1].status||s[1].status)&&(o[1].status="available"===o[1].status||"available"===s[1].status?"available":"missing");for(var a=0;a0;){var m=p.pop();if(0!==m.diff)for(var g=m.ids[2],y=0,b=g.length;yt){n||(n={});var u=c.length-t;a={pos:l.pos+u,ids:Pe(c,u)};for(var d=0;d{var r;t?(r="error",("listenerCount"in this?this.listenerCount(r):m().listenerCount(this,r))>0&&this.emit("error",t)):this.emit("complete",n),this.removeAllListeners(),e.removeListener("destroyed",i)}));n&&(this.on("complete",(function(e){n(null,e)})),this.on("error",n));const i=()=>{this.cancel()};e.once("destroyed",i),t.onChange=(e,t,n)=>{this.isCancelled||function(e,t,n,r){try{e.emit("change",t,n,r)}catch(e){O("error",'Error in .on("change", function):',e)}}(this,e,t,n)};var o=new Promise((function(e,n){t.complete=function(t,r){t?n(t):e(r)}}));this.once("cancel",(function(){e.removeListener("destroyed",i),t.complete(null,{status:"cancelled"})})),this.then=o.then.bind(o),this.catch=o.catch.bind(o),this.then((function(e){r(null,e)}),r),e.taskqueue.isReady?this.validateChanges(t):e.taskqueue.addTask((e=>{e?t.complete(e):this.isCancelled?this.emit("cancel"):this.validateChanges(t)}))}cancel(){this.isCancelled=!0,this.db.taskqueue.isReady&&this.emit("cancel")}validateChanges(e){var t=e.complete;nt._changesFilterPlugin?nt._changesFilterPlugin.validate(e,(n=>{if(n)return t(n);this.doChanges(e)})):this.doChanges(e)}doChanges(e){var t=e.complete;if("live"in(e=b(e))&&!("continuous"in e)&&(e.continuous=e.live),e.processChange=Be,"latest"===e.since&&(e.since="now"),e.since||(e.since=0),"now"!==e.since){if(nt._changesFilterPlugin){if(nt._changesFilterPlugin.normalize(e),nt._changesFilterPlugin.shouldFilter(this,e))return nt._changesFilterPlugin.filter(this,e)}else["doc_ids","filter","selector","view"].forEach((function(t){t in e&&O("warn",'The "'+t+'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.')}));"descending"in e||(e.descending=!1),e.limit=0===e.limit?1:e.limit,e.complete=t;var n=this.db._changes(e);if(n&&"function"==typeof n.cancel){const e=this.cancel;this.cancel=(...t)=>{n.cancel(),e.apply(this,t)}}}else this.db.info().then((n=>{this.isCancelled?t(null,{status:"cancelled"}):(e.since=n.update_seq,this.doChanges(e))}),t)}}function ze(e,t){return function(n,r){n||r[0]&&r[0].error?((n=n||r[0]).docId=t,e(n)):e(null,r.length?r[0]:r)}}function $e(e,t){return e._id===t._id?(e._revisions?e._revisions.start:0)-(t._revisions?t._revisions.start:0):e._idself.purged_infos_limit&&e.purges.splice(0,e.purges.length-self.purged_infos_limit),e.purgeSeq=r,e})).catch((function(e){if(404!==e.status)throw e;return{_id:"_local/purges",purges:[{docId:t,rev:n,purgeSeq:0}],purgeSeq:0}})).then((function(t){return e.put(t)}))}function Xe(e){return null===e||"object"!=typeof e||Array.isArray(e)}const Ke=/^\d+-[^-]*$/;function Je(e){return"string"==typeof e&&Ke.test(e)}class Ze extends(m()){_setup(){this.post=w("post",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),Xe(e))return n(K($));this.bulkDocs({docs:[e]},t,ze(n,e._id))})).bind(this),this.put=w("put",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),Xe(e))return n(K($));if(Q(e._id),"_rev"in e&&!Je(e._rev))return n(K(q));if(We(e._id)&&"function"==typeof this._putLocal)return e._deleted?this._removeLocal(e,n):this._putLocal(e,n);const r=n=>{"function"==typeof this._put&&!1!==t.new_edits?this._put(e,t,n):this.bulkDocs({docs:[e]},t,ze(n,e._id))};var i,o,s,a;t.force&&e._rev?(o=(i=e._rev.split("-"))[1],s=parseInt(i[0],10)+1,a=Me(),e._revisions={start:s,ids:[a,o]},e._rev=s+"-"+a,t.new_edits=!1,r((function(t){var r=t?null:{ok:!0,id:e._id,rev:e._rev};n(t,r)}))):r(n)})).bind(this),this.putAttachment=w("putAttachment",(function(e,t,n,r,i){var o=this;function s(e){var n="_rev"in e?parseInt(e._rev,10):0;return e._attachments=e._attachments||{},e._attachments[t]={content_type:i,data:r,revpos:++n},o.put(e)}return"function"==typeof i&&(i=r,r=n,n=null),void 0===i&&(i=r,r=n,n=null),i||O("warn","Attachment",t,"on document",e,"is missing content_type"),o.get(e).then((function(e){if(e._rev!==n)throw K(H);return s(e)}),(function(t){if(t.reason===N.message)return s({_id:e});throw t}))})).bind(this),this.removeAttachment=w("removeAttachment",(function(e,t,n,r){this.get(e,((e,i)=>{if(e)r(e);else if(i._rev===n){if(!i._attachments)return r();delete i._attachments[t],0===Object.keys(i._attachments).length&&delete i._attachments,this.put(i,r)}else r(K(H))}))})).bind(this),this.remove=w("remove",(function(e,t,n,r){var i;"string"==typeof t?(i={_id:e,_rev:t},"function"==typeof n&&(r=n,n={})):(i=e,"function"==typeof t?(r=t,n={}):(r=n,n=t)),(n=n||{}).was_delete=!0;var o={_id:i._id,_rev:i._rev||n.rev,_deleted:!0};if(We(o._id)&&"function"==typeof this._removeLocal)return this._removeLocal(i,r);this.bulkDocs({docs:[o]},n,ze(r,o._id))})).bind(this),this.revsDiff=w("revsDiff",(function(e,t,n){"function"==typeof t&&(n=t,t={});var r=Object.keys(e);if(!r.length)return n(null,{});var i=0,o=new Map;function s(e,t){o.has(e)||o.set(e,{missing:[]}),o.get(e).missing.push(t)}r.forEach((function(t){this._getRevisionTree(t,(function(a,l){if(a&&404===a.status&&"missing"===a.message)o.set(t,{missing:e[t]});else{if(a)return n(a);!function(t,n){var r=e[t].slice(0);De(n,(function(e,n,i,o,a){var l=n+"-"+i,c=r.indexOf(l);-1!==c&&(r.splice(c,1),"available"!==a.status&&s(t,l))})),r.forEach((function(e){s(t,e)}))}(t,l)}if(++i===r.length){var c={};return o.forEach((function(e,t){c[t]=e})),n(null,c)}}))}),this)})).bind(this),this.bulkGet=w("bulkGet",(function(e,t){E(this,e,t)})).bind(this),this.compactDocument=w("compactDocument",(function(e,t,n){this._getRevisionTree(e,((r,i)=>{if(r)return n(r);var o=function(e){var t={},n=[];return De(e,(function(e,r,i,o){var s=r+"-"+i;return e&&(t[s]=0),void 0!==o&&n.push({from:o,to:s}),s})),n.reverse(),n.forEach((function(e){void 0===t[e.from]?t[e.from]=1+t[e.to]:t[e.from]=Math.min(t[e.from],1+t[e.to])})),t}(i),s=[],a=[];Object.keys(o).forEach((function(e){o[e]>t&&s.push(e)})),De(i,(function(e,t,n,r,i){var o=t+"-"+n;"available"===i.status&&-1!==s.indexOf(o)&&a.push(o)})),this._doCompaction(e,a,n)}))})).bind(this),this.compact=w("compact",(function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{},this._compactionQueue=this._compactionQueue||[],this._compactionQueue.push({opts:e,callback:t}),1===this._compactionQueue.length&&Ge(this)})).bind(this),this.get=w("get",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),t=t||{},"string"!=typeof e)return n(K(j));if(We(e)&&"function"==typeof this._getLocal)return this._getLocal(e,n);var r=[];const i=()=>{var i=[],o=r.length;if(!o)return n(null,i);r.forEach((r=>{this.get(e,{rev:r,revs:t.revs,latest:t.latest,attachments:t.attachments,binary:t.binary},(function(e,t){if(e)i.push({missing:r});else{for(var s,a=0,l=i.length;a{if(r)return r.docId=e,n(r);var o=i.doc,s=i.metadata,a=i.ctx;if(t.conflicts){var l=Oe(s);l.length&&(o._conflicts=l)}if(Ye(s,o._rev)&&(o._deleted=!0),t.revs||t.revs_info){for(var c=o._rev.split("-"),u=parseInt(c[0],10),d=c[1],h=Le(s.rev_tree),f=null,p=0;pe.id===d));(e===u-1||!f&&-1!==e)&&(f=m)}if(!f)return(r=new Error("invalid rev tree")).docId=e,n(r);const i=o._rev.split("-")[1],a=f.ids.findIndex((e=>e.id===i))+1;var g=f.ids.length-a;if(f.ids.splice(a,g),f.ids.reverse(),t.revs&&(o._revisions={start:f.pos+f.ids.length-1,ids:f.ids.map((function(e){return e.id}))}),t.revs_info){var y=f.pos+f.ids.length;o._revs_info=f.ids.map((function(e){return{rev:--y+"-"+e.id,status:e.opts.status}}))}}if(t.attachments&&o._attachments){var b=o._attachments,_=Object.keys(b).length;if(0===_)return n(null,o);Object.keys(b).forEach((e=>{this._getAttachment(o._id,e,b[e],{binary:t.binary,metadata:s,ctx:a},(function(t,r){var i=o._attachments[e];i.data=r,delete i.stub,delete i.length,--_||n(null,o)}))}))}else{if(o._attachments)for(var v in o._attachments)Object.prototype.hasOwnProperty.call(o._attachments,v)&&(o._attachments[v].stub=!0);n(null,o)}}));if("all"===t.open_revs)this._getRevisionTree(e,(function(e,t){if(e)return n(e);r=Re(t).map((function(e){return e.rev})),i()}));else{if(!Array.isArray(t.open_revs))return n(K(Y,"function_clause"));r=t.open_revs;for(var o=0;oi?r(i):o.doc._attachments&&o.doc._attachments[t]?(n.ctx=o.ctx,n.binary=!0,n.metadata=o.metadata,void this._getAttachment(e,t,o.doc._attachments[t],n,r)):r(K(N))))})).bind(this),this.allDocs=w("allDocs",(function(e,t){if("function"==typeof e&&(t=e,e={}),e.skip=void 0!==e.skip?e.skip:0,e.start_key&&(e.startkey=e.start_key),e.end_key&&(e.endkey=e.end_key),"keys"in e){if(!Array.isArray(e.keys))return t(new TypeError("options.keys must be an array"));var n=["startkey","endkey","key"].filter((function(t){return t in e}))[0];if(n)return void t(K(B,"Query parameter `"+n+"` is not compatible with multi-get"));if(!ee(this)&&(function(e){var t="limit"in e?e.keys.slice(e.skip,e.limit+e.skip):e.skip>0?e.keys.slice(e.skip):e.keys;e.keys=t,e.skip=0,delete e.limit,e.descending&&(t.reverse(),e.descending=!1)}(e),0===e.keys.length))return this._allDocs({limit:0},t)}return this._allDocs(e,t)})).bind(this),this.close=w("close",(function(e){return this._closed=!0,this.emit("closed"),this._close(e)})).bind(this),this.info=w("info",(function(e){this._info(((t,n)=>{if(t)return e(t);n.db_name=n.db_name||this.name,n.auto_compaction=!(!this.auto_compaction||ee(this)),n.adapter=this.adapter,e(null,n)}))})).bind(this),this.id=w("id",(function(e){return this._id(e)})).bind(this),this.bulkDocs=w("bulkDocs",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),t=t||{},Array.isArray(e)&&(e={docs:e}),!e||!e.docs||!Array.isArray(e.docs))return n(K(P));for(var r=0;r{this._destroy(e,((e,n)=>{if(e)return t(e);this._destroyed=!0,this.emit("destroyed"),t(null,n||{ok:!0})}))};if(ee(this))return r();this.get("_local/_pouch_dependentDbs",((e,i)=>{if(e)return 404!==e.status?t(e):r();var o=i.dependentDbs,s=this.constructor,a=Object.keys(o).map((e=>{var t=n?e.replace(new RegExp("^"+s.prefix),""):e;return new s(t,this.__opts).destroy()}));Promise.all(a).then(r,t)}))})).bind(this)}_compact(e,t){var n,r={return_docs:!1,last_seq:e.last_seq||0,since:e.last_seq||0},i=[],o=0;const s=e=>{this.activeTasks.update(n,{completed_items:++o}),i.push(this.compactDocument(e.id,0))},a=e=>{this.activeTasks.remove(n,e),t(e)},l=e=>{var r=e.last_seq;Promise.all(i).then((()=>ce(this,"_local/compaction",(e=>(!e.last_seq||e.last_seq{this.activeTasks.remove(n),t(null,{ok:!0})})).catch(a)};this.info().then((e=>{n=this.activeTasks.add({name:"database_compaction",total_items:e.update_seq-r.last_seq}),this.changes(r).on("change",s).on("complete",l).on("error",a)}))}changes(e,t){return"function"==typeof e&&(t=e,e={}),(e=e||{}).return_docs="return_docs"in e?e.return_docs:!e.live,new Ve(this,e,t)}type(){return"function"==typeof this._type?this._type():this.adapter}}Ze.prototype.purge=w("_purge",(function(e,t,n){if(void 0===this._purge)return n(K(Y,"Purge is not implemented in the "+this.adapter+" adapter."));var r=this;r._getRevisionTree(e,((i,o)=>{if(i)return n(i);if(!o)return n(K(N));let s;try{s=function(e,t){let n=[];const r=e.slice();let i;for(;i=r.pop();){const{pos:e,ids:o}=i,s=`${e}-${o[0]}`,a=o[2];if(n.push(s),s===t){if(0!==a.length)throw new Error("The requested revision is not a leaf");return n.reverse()}(0===a.length||a.length>1)&&(n=[]);for(let t=0,n=a.length;t{if(i)return n(i);qe(r,e,t).then((function(){return n(null,o)}))}))}))}));class Qe{constructor(){this.isReady=!1,this.failed=!1,this.queue=[]}execute(){var e;if(this.failed)for(;e=this.queue.shift();)e(this.failed);else for(;e=this.queue.shift();)e()}fail(e){this.failed=e,this.execute()}ready(e){this.isReady=!0,this.db=e,this.execute()}addTask(e){this.queue.push(e),this.failed&&this.execute()}}function et(e,t){let n=function(...e){if(!(this instanceof n))return new n(...e);t.apply(this,e)};var r,i;return i=e,(r=n).prototype=Object.create(i.prototype,{constructor:{value:r}}),n}class tt extends Ze{constructor(e,t){super(),this._setup(e,t)}_setup(e,t){if(super._setup(),t=t||{},e&&"object"==typeof e&&(e=(t=e).name,delete t.name),void 0===t.deterministic_revs&&(t.deterministic_revs=!0),this.__opts=t=b(t),this.auto_compaction=t.auto_compaction,this.purged_infos_limit=t.purged_infos_limit||1e3,this.prefix=nt.prefix,"string"!=typeof e)throw new Error("Missing/invalid DB name");var n=function(e,t){var n=e.match(/([a-z-]*):\/\/(.*)/);if(n)return{name:/https?/.test(n[1])?n[1]+"://"+n[2]:n[2],adapter:n[1]};var r=nt.adapters,i=nt.preferredAdapters,o=nt.prefix,s=t.adapter;if(!s)for(var a=0;a{if(e)return this.taskqueue.fail(e);!function(e){function t(t){e.removeListener("closed",n),t||e.constructor.emit("destroyed",e.name)}function n(){e.removeListener("destroyed",t),e.constructor.emit("unref",e)}e.once("destroyed",t),e.once("closed",n),e.constructor.emit("ref",e)}(this),this.emit("created",this),nt.emit("created",this.name),this.taskqueue.ready(this)}))}}const nt=et(tt,(function(e,t){tt.prototype._setup.call(this,e,t)}));var rt=fetch,it=Headers;nt.adapters={},nt.preferredAdapters=[],nt.prefix="_pouch_";var ot=new(m());function st(e,t){for(var n=e,r=0,i=t.length;r0&&"\\"===e[r-1]&&("$"===o||"."===o)?n=n.substring(0,n.length-1)+o:"."===o?(t.push(n),n=""):n+=o}return t.push(n),t}!function(e){Object.keys(m().prototype).forEach((function(t){"function"==typeof m().prototype[t]&&(e[t]=ot[t].bind(ot))}));var t=e._destructionListeners=new Map;e.on("ref",(function(e){t.has(e.name)||t.set(e.name,[]),t.get(e.name).push(e)})),e.on("unref",(function(e){if(t.has(e.name)){var n=t.get(e.name),r=n.indexOf(e);r<0||(n.splice(r,1),n.length>1?t.set(e.name,n):t.delete(e.name))}})),e.on("destroyed",(function(e){if(t.has(e)){var n=t.get(e);t.delete(e),n.forEach((function(e){e.emit("destroyed",!0)}))}}))}(nt),nt.adapter=function(e,t,n){t.valid()&&(nt.adapters[e]=t,n&&nt.preferredAdapters.push(e))},nt.plugin=function(e){if("function"==typeof e)e(nt);else{if("object"!=typeof e||0===Object.keys(e).length)throw new Error('Invalid plugin: got "'+e+'", expected an object or a function');Object.keys(e).forEach((function(t){nt.prototype[t]=e[t]}))}return this.__defaults&&(nt.__defaults=Object.assign({},this.__defaults)),nt},nt.defaults=function(e){let t=et(nt,(function(e,n){n=n||{},e&&"object"==typeof e&&(e=(n=e).name,delete n.name),n=Object.assign({},t.__defaults,n),nt.call(this,e,n)}));return t.preferredAdapters=nt.preferredAdapters.slice(),Object.keys(nt).forEach((function(e){e in t||(t[e]=nt[e])})),t.__defaults=Object.assign({},this.__defaults,e),t},nt.fetch=function(e,t){return rt(e,t)},nt.prototype.activeTasks=nt.activeTasks=new class{constructor(){this.tasks={}}list(){return Object.values(this.tasks)}add(e){const t=h();return this.tasks[t]={id:t,name:e.name,total_items:e.total_items,created_at:(new Date).toJSON()},t}get(e){return this.tasks[e]}remove(e,t){return delete this.tasks[e],this.tasks}update(e,t){const n=this.tasks[e];if(void 0!==n){const r={id:n.id,name:n.name,created_at:n.created_at,total_items:t.total_items||n.total_items,completed_items:t.completed_items||n.completed_items,updated_at:(new Date).toJSON()};this.tasks[e]=r}return this.tasks}};var lt=["$or","$nor","$not"];function ct(e){return lt.indexOf(e)>-1}function ut(e){return Object.keys(e)[0]}function dt(e){var t={},n={$or:!0,$nor:!0};return e.forEach((function(e){Object.keys(e).forEach((function(r){var i=e[r];if("object"!=typeof i&&(i={$eq:i}),ct(r))if(i instanceof Array){if(n[r])return n[r]=!1,void(t[r]=i);var o=[];t[r].forEach((function(e){Object.keys(i).forEach((function(t){var n=i[t],r=Math.max(Object.keys(e).length,Object.keys(n).length),s=dt([e,n]);Object.keys(s).length<=r||o.push(s)}))})),t[r]=o}else t[r]=dt([i]);else{var s=t[r]=t[r]||{};Object.keys(i).forEach((function(e){var t=i[e];return"$gt"===e||"$gte"===e?function(e,t,n){void 0===n.$eq&&(void 0!==n.$gte?"$gte"===e?t>n.$gte&&(n.$gte=t):t>=n.$gte&&(delete n.$gte,n.$gt=t):void 0!==n.$gt?"$gte"===e?t>n.$gt&&(delete n.$gt,n.$gte=t):t>n.$gt&&(n.$gt=t):n[e]=t)}(e,t,s):"$lt"===e||"$lte"===e?function(e,t,n){void 0===n.$eq&&(void 0!==n.$lte?"$lte"===e?tt?1:-1}(e,t)}return Array.isArray(e)?function(e,t){for(var n=Math.min(e.length,t.length),r=0;rt.length?1:-1}(e,t):function(e,t){for(var n=Object.keys(e),r=Object.keys(t),i=Math.min(n.length,r.length),o=0;or.length?1:-1}(e,t)}function vt(e){switch(typeof e){case"undefined":return null;case"number":return e===1/0||e===-1/0||isNaN(e)?null:e;case"object":var t=e;if(Array.isArray(e)){var n=e.length;e=new Array(n);for(var r=0;r0)return!1;var a=st(r,s);return"object"==typeof o?Tt(o,t,n,a):Et("$eq",t,o,s,a)})):e===r)}function Et(e,t,n,r,i){if(!Ot[e])throw new Error('unknown operator "'+e+'" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');return Ot[e](t,n,r,i)}function Dt(e){return null!=e}function kt(e){return void 0!==e}function Rt(e,t){return t.some((function(t){return e instanceof Array?e.some((function(e){return 0===_t(t,e)})):0===_t(t,e)}))}var Ot={$elemMatch:function(e,t,n,r){return!!Array.isArray(r)&&0!==r.length&&("object"==typeof r[0]&&null!==r[0]?r.some((function(e){return Mt(e,t,Object.keys(t))})):r.some((function(r){return Tt(t,e,n,r)})))},$allMatch:function(e,t,n,r){return!!Array.isArray(r)&&0!==r.length&&("object"==typeof r[0]&&null!==r[0]?r.every((function(e){return Mt(e,t,Object.keys(t))})):r.every((function(r){return Tt(t,e,n,r)})))},$eq:function(e,t,n,r){return kt(r)&&0===_t(r,t)},$gte:function(e,t,n,r){return kt(r)&&_t(r,t)>=0},$gt:function(e,t,n,r){return kt(r)&&_t(r,t)>0},$lte:function(e,t,n,r){return kt(r)&&_t(r,t)<=0},$lt:function(e,t,n,r){return kt(r)&&_t(r,t)<0},$exists:function(e,t,n,r){return t?kt(r):!kt(r)},$mod:function(e,t,n,r){return Dt(r)&&function(e,t){return"number"==typeof e&&parseInt(e,10)===e&&e%t[0]===t[1]}(r,t)},$ne:function(e,t,n,r){return t.every((function(e){return 0!==_t(r,e)}))},$in:function(e,t,n,r){return Dt(r)&&Rt(r,t)},$nin:function(e,t,n,r){return Dt(r)&&!Rt(r,t)},$size:function(e,t,n,r){return Dt(r)&&Array.isArray(r)&&function(e,t){return e.length===t}(r,t)},$all:function(e,t,n,r){return Array.isArray(r)&&function(e,t){return t.every((function(t){return e.some((function(e){return 0===_t(t,e)}))}))}(r,t)},$regex:function(e,t,n,r){return Dt(r)&&"string"==typeof r&&t.every((function(e){return function(e,t){return new RegExp(t).test(e)}(r,e)}))},$type:function(e,t,n,r){return function(e,t){switch(t){case"null":return null===e;case"boolean":return"boolean"==typeof e;case"number":return"number"==typeof e;case"string":return"string"==typeof e;case"array":return e instanceof Array;case"object":return"[object Object]"==={}.toString.call(e)}}(r,t)}};function Lt(e,t){if(e.selector&&e.filter&&"_selector"!==e.filter){var n="string"==typeof e.filter?e.filter:"function";return t(new Error('selector invalid for filter "'+n+'"'))}t()}function At(e){e.view&&!e.filter&&(e.filter="_view"),e.selector&&!e.filter&&(e.filter="_selector"),e.filter&&"string"==typeof e.filter&&("_view"===e.filter?e.view=ne(e.view):e.filter=ne(e.filter))}function It(e,t){return t.filter&&"string"==typeof t.filter&&!t.doc_ids&&!ee(e.db)}function Pt(e,t){var n=t.complete;if("_view"===t.filter){if(!t.view||"string"!=typeof t.view){var r=K(z,"`view` filter parameter not found or invalid.");return n(r)}var i=te(t.view);e.db.get("_design/"+i[0],(function(r,o){if(e.isCancelled)return n(null,{status:"cancelled"});if(r)return n(J(r));var s=o&&o.views&&o.views[i[1]]&&o.views[i[1]].map;if(!s)return n(K(N,o.views?"missing json key: "+i[1]:"missing json key: views"));t.filter=le(["return function(doc) {",' "use strict";'," var emitted = false;"," var emit = function (a, b) {"," emitted = true;"," };"," var view = "+s+";"," view(doc);"," if (emitted) {"," return true;"," }","};"].join("\n"),{}),e.doChanges(t)}))}else if(t.selector)t.filter=function(e){return function(e,t){if("object"!=typeof t)throw new Error("Selector error: expected a JSON object");var n=function(e,t,n){if(e=e.filter((function(e){return Mt(e.doc,t.selector,n)})),t.sort){var r=function(e){function t(t){return e.map((function(e){var n=at(ut(e));return st(t,n)}))}return function(e,n){var r,i,o=_t(t(e.doc),t(n.doc));return 0!==o?o:(r=e.doc._id)<(i=n.doc._id)?-1:r>i?1:0}}(t.sort);e=e.sort(r),"string"!=typeof t.sort[0]&&"desc"===(i=t.sort[0])[ut(i)]&&(e=e.reverse())}var i;if("limit"in t||"skip"in t){var o=t.skip||0,s=("limit"in t?t.limit:e.length)+o;e=e.slice(o,s)}return e}([{doc:e}],{selector:t=pt(t)},Object.keys(t));return n&&1===n.length}(e,t.selector)},e.doChanges(t);else{var o=te(t.filter);e.db.get("_design/"+o[0],(function(r,i){if(e.isCancelled)return n(null,{status:"cancelled"});if(r)return n(J(r));var s=i&&i.filters&&i.filters[o[1]];if(!s)return n(K(N,i&&i.filters?"missing json key: "+o[1]:"missing json key: filters"));t.filter=le('"use strict";\nreturn '+s+";",{}),e.doChanges(t)}))}}function Nt(e){return e.reduce((function(e,t){return e[t]=!0,e}),{})}nt.plugin((function(e){e._changesFilterPlugin={validate:Lt,normalize:At,shouldFilter:It,filter:Pt}})),nt.version="9.0.0";var Ht=Nt(["_id","_rev","_access","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats","_removed"]),jt=Nt(["_access","_attachments","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats"]);function Ut(e){if(!/^\d+-/.test(e))return K(q);var t=e.indexOf("-"),n=e.substring(0,t),r=e.substring(t+1);return{prefix:parseInt(n,10),id:r}}function Ft(e,t,n){var r,i,o;n||(n={deterministic_revs:!0});var s={status:"available"};if(e._deleted&&(s.deleted=!0),t)if(e._id||(e._id=Te()),i=Me(e,n.deterministic_revs),e._rev){if((o=Ut(e._rev)).error)return o;e._rev_tree=[{pos:o.prefix,ids:[o.id,{status:"missing"},[[i,s,[]]]]}],r=o.prefix+1}else e._rev_tree=[{pos:1,ids:[i,s,[]]}],r=1;else if(e._revisions&&(e._rev_tree=function(e,t){for(var n=e.start-e.ids.length+1,r=e.ids,i=[r[0],t,[]],o=1,s=r.length;o1&&!n?(a={continue:function(){if(!o.length)return i();var n,a=o[o.length-1];if(t&&t.upper)try{n=IDBKeyRange.bound(a,t.upper,!0,t.upperOpen)}catch(e){if("DataError"===e.name&&0===e.code)return i()}else n=IDBKeyRange.lowerBound(a,!0);t=n,o=null,s=null,e.getAll(t,r).onsuccess=l,e.getAllKeys(t,r).onsuccess=c}},e.getAll(t,r).onsuccess=l,e.getAllKeys(t,r).onsuccess=c):n?e.openCursor(t,"prev").onsuccess=u:e.openCursor(t).onsuccess=u}var un=!1,dn=[];function hn(){!un&&dn.length&&(un=!0,dn.shift()())}var fn,pn=new Map,mn=new Map;function gn(e,t){var n=this;!function(t,r,i){dn.push((function(){var t;t=function(e,t){!function(e,t,n,r){try{e(t,n)}catch(t){r.emit("error",t)}}(r,e,t,i),un=!1,k((function(){hn()}))},function(e,t,n){var r=t.name,i=null,o=null;function s(e){return function(t,n){t&&t instanceof Error&&!t.reason&&o&&(t.reason=o),e(t,n)}}function a(e){var t=e.createObjectStore(Bt,{keyPath:"id"});e.createObjectStore(Vt,{autoIncrement:!0}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0}),e.createObjectStore(zt,{keyPath:"digest"}),e.createObjectStore(Gt,{keyPath:"id",autoIncrement:!1}),e.createObjectStore(Xt),t.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1}),e.createObjectStore(qt,{keyPath:"_id"});var n=e.createObjectStore($t,{autoIncrement:!0});n.createIndex("seq","seq"),n.createIndex("digestSeq","digestSeq",{unique:!0})}function l(e,t){var n=e.objectStore(Bt);n.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1}),n.openCursor().onsuccess=function(e){var r=e.target.result;if(r){var i=r.value,o=Ye(i);i.deletedOrLocal=o?"1":"0",n.put(i),r.continue()}else t()}}function c(e){e.createObjectStore(qt,{keyPath:"_id"}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0})}function u(e,t){var n=e.objectStore(qt),r=e.objectStore(Bt),i=e.objectStore(Vt);r.openCursor().onsuccess=function(e){var o=e.target.result;if(o){var s=o.value,a=s.id,l=We(a),c=Ee(s);if(l){var u=a+"::"+c,d=a+"::",h=a+"::~",f=i.index("_doc_id_rev"),p=IDBKeyRange.bound(d,h,!1,!1),m=f.openCursor(p);m.onsuccess=function(e){if(m=e.target.result){var t=m.value;t._doc_id_rev===u&&n.put(t),i.delete(m.primaryKey),m.continue()}else r.delete(o.primaryKey),o.continue()}}else o.continue()}else t&&t()}}function d(e){var t=e.createObjectStore($t,{autoIncrement:!0});t.createIndex("seq","seq"),t.createIndex("digestSeq","digestSeq",{unique:!0})}function h(e,t){var n=e.objectStore(Vt),r=e.objectStore(zt),i=e.objectStore($t);r.count().onsuccess=function(e){if(!e.target.result)return t();n.openCursor().onsuccess=function(e){var n=e.target.result;if(!n)return t();for(var r=n.value,o=n.primaryKey,s=Object.keys(r._attachments||{}),a={},l=0;li&&(i=n),t.continue()}}function a(){var e=Zt(o,o.winningRev,o.deleted);r.put(e).onsuccess=function(){i.continue()}}}}e._meta=null,e._remote=!1,e.type=function(){return"idb"},e._id=v((function(t){t(null,e._meta.instanceId)})),e._bulkDocs=function(n,r,o){ln(t,n,r,e,i,s(o))},e._get=function(e,t,n){var r,o,s,a=t.ctx;if(!a){var l=sn(i,[Bt,Vt,zt],"readonly");if(l.error)return n(l.error);a=l.txn}function c(){n(s,{doc:r,metadata:o,ctx:a})}a.objectStore(Bt).get(e).onsuccess=function(e){if(!(o=Qt(e.target.result)))return s=K(N,"missing"),c();var n;if(t.rev)n=t.latest?function(e,t){for(var n,r=t.rev_tree.slice();n=r.pop();){var i=n.pos,o=n.ids,s=o[0],a=o[1],l=o[2],c=0===l.length,u=n.history?n.history.slice():[];if(u.push({id:s,pos:i,opts:a}),c)for(var d=0,h=u.length;d{var t=e.target.result;t&&t.key&&(g=t.key)}),i||0===u||(l?function(e,t,n){var r=new Array(e.length),i=0;e.forEach((function(o,s){t.get(o).onsuccess=function(t){t.target.result?r[s]=t.target.result:r[s]={key:o,error:"not_found"},++i===e.length&&n(e,r,{})}}))}(l,y,C):-1===u?function(e,t,n){if("function"!=typeof e.getAll){var r=[];e.openCursor(t).onsuccess=function(e){var t=e.target.result;t?(r.push(t.value),t.continue()):n({target:{result:r}})}}else e.getAll(t).onsuccess=n}(y,r,(function(t){var n=t.target.result;e.descending&&(n=n.reverse()),S(n)})):cn(y,r,e.descending,u+c,C))}(e,i,s(t))},e._changes=function(t){return function(e,t,n,r){if((e=b(e)).continuous){var i=n+":"+Te();return an.addListener(n,i,t,e),an.notify(n),{cancel:function(){an.removeListener(n,i)}}}var o=e.doc_ids&&new Set(e.doc_ids);e.since=e.since||0;var s=e.since,a="limit"in e?e.limit:-1;0===a&&(a=1);var l,c,u,d,h=[],f=0,p=Z(e),m=new Map;function g(e,t,n,r){if(n.seq!==t)return r();if(n.winningRev===e._rev)return r(n,e);var i=e._id+"::"+n.winningRev;d.get(i).onsuccess=function(e){r(n,en(e.target.result))}}function y(){e.complete(null,{results:h,last_seq:s})}var _=[Bt,Vt];e.attachments&&_.push(zt);var v=sn(r,_,"readonly");if(v.error)return e.complete(v.error);(l=v.txn).onabort=Jt(e.complete),l.oncomplete=function(){!e.continuous&&e.attachments?rn(h).then(y):y()},c=l.objectStore(Vt),u=l.objectStore(Bt),d=c.index("_doc_id_rev"),cn(c,e.since&&!e.descending?IDBKeyRange.lowerBound(e.since,!0):null,e.descending,a,(function(t,n,r){if(r&&t.length){var i=new Array(t.length),c=new Array(t.length),d=0;n.forEach((function(n,s){!function(e,t,n){if(o&&!o.has(e._id))return n();var r=m.get(e._id);if(r)return g(e,t,r,n);u.get(e._id).onsuccess=function(i){r=Qt(i.target.result),m.set(e._id,r),g(e,t,r,n)}}(en(n),t[s],(function(n,o){c[s]=n,i[s]=o,++d===t.length&&function(){for(var t=[],n=0,o=i.length;n=43)},o.onerror=e.onabort=function(e){e.preventDefault(),e.stopPropagation(),r(!1)}})).catch((function(){return!1}))}(u,Xt,"key")),fn.then((function(e){l=e,h()})),u.oncomplete=function(){d=!0,h()},u.onabort=Jt(n)},m.onerror=function(e){var t=e.target.error&&e.target.error.message;t?-1!==t.indexOf("stored database is a higher version")&&(t=new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter')):t="Failed to open indexedDB, are you in private browsing mode?",O("error",t),n(K(G,t))}}(n,e,t)})),hn()}(0,t,n.constructor)}gn.valid=function(){try{return"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}};const yn=5e3,bn={};function _n(e){const t=e.doc||e.ok,n=t&&t._attachments;n&&Object.keys(n).forEach((function(e){const t=n[e];t.data=me(t.data,t.content_type)}))}function vn(e){return/^_design/.test(e)?"_design/"+encodeURIComponent(e.slice(8)):e.startsWith("_local/")?"_local/"+encodeURIComponent(e.slice(7)):encodeURIComponent(e)}function wn(e){return e._attachments&&Object.keys(e._attachments)?Promise.all(Object.keys(e._attachments).map((function(t){const n=e._attachments[t];if(n.data&&"string"!=typeof n.data)return new Promise((function(e){be(n.data,e)})).then((function(e){n.data=e}))}))):Promise.resolve()}function xn(e,t){return Sn(e,e.db+"/"+t)}function Sn(e,t){const n=e.path?"/":"";return e.protocol+"://"+e.host+(e.port?":"+e.port:"")+"/"+e.path+n+t}function Cn(e){const t=Object.keys(e);return 0===t.length?"":"?"+t.map((t=>t+"="+encodeURIComponent(e[t]))).join("&")}function Mn(e,t){const n=this,r=function(e,t){if(function(e){if(!e.prefix)return!1;const t=ae(e.prefix).protocol;return"http"===t||"https"===t}(t)){const n=t.name.substr(t.prefix.length);e=t.prefix.replace(/\/?$/,"/")+encodeURIComponent(n)}const n=ae(e);(n.user||n.password)&&(n.auth={username:n.user,password:n.password});const r=n.path.replace(/(^\/|\/$)/g,"").split("/");return n.db=r.pop(),-1===n.db.indexOf("%")&&(n.db=encodeURIComponent(n.db)),n.path=r.join("/"),n}(e.name,e),i=xn(r,"");e=b(e);const o=async function(t,n){if((n=n||{}).headers=n.headers||new it,n.credentials="include",e.auth||r.auth){const t=e.auth||r.auth,i=t.username+":"+t.password,o=de(unescape(encodeURIComponent(i)));n.headers.set("Authorization","Basic "+o)}const i=e.headers||{};Object.keys(i).forEach((function(e){n.headers.append(e,i[e])})),function(e){const t="undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"",n=-1!==t.indexOf("msie"),r=-1!==t.indexOf("trident"),i=-1!==t.indexOf("edge"),o=!("method"in e)||"GET"===e.method;return(n||r||i)&&o}(n)&&(t+=(-1===t.indexOf("?")?"?":"&")+"_nonce="+Date.now());const o=e.fetch||rt;return await o(t,n)};function s(e,t){return w(e,(function(...e){c().then((function(){return t.apply(this,e)})).catch((function(t){e.pop()(t)}))})).bind(n)}async function a(e,t){const n={};(t=t||{}).headers=t.headers||new it,t.headers.get("Content-Type")||t.headers.set("Content-Type","application/json"),t.headers.get("Accept")||t.headers.set("Accept","application/json");const r=await o(e,t);n.ok=r.ok,n.status=r.status;const i=await r.json();if(n.data=i,!n.ok)throw n.data.status=n.status,J(n.data);return Array.isArray(n.data)&&(n.data=n.data.map((function(e){return e.error||e.missing?J(e):e}))),n}let l;async function c(){return e.skip_setup?Promise.resolve():l||(l=a(i).catch((function(e){return e&&e.status&&404===e.status?(A(404,"PouchDB is just detecting if the remote exists."),a(i,{method:"PUT"})):Promise.reject(e)})).catch((function(e){return!(!e||!e.status||412!==e.status)||Promise.reject(e)})),l.catch((function(){l=null})),l)}function u(e){return e.split("/").map(encodeURIComponent).join("/")}k((function(){t(null,n)})),n._remote=!0,n.type=function(){return"http"},n.id=s("id",(async function(e){let t;try{const e=await o(Sn(r,""));t=await e.json()}catch(e){t={}}e(null,t&&t.uuid?t.uuid+r.db:xn(r,""))})),n.compact=s("compact",(async function(e,t){"function"==typeof e&&(t=e,e={}),e=b(e),await a(xn(r,"_compact"),{method:"POST"}),function r(){n.info((function(n,i){i&&!i.compact_running?t(null,{ok:!0}):setTimeout(r,e.interval||200)}))}()})),n.bulkGet=w("bulkGet",(function(e,t){const n=this;async function i(t){const n={};e.revs&&(n.revs=!0),e.attachments&&(n.attachments=!0),e.latest&&(n.latest=!0);try{const i=await a(xn(r,"_bulk_get"+Cn(n)),{method:"POST",body:JSON.stringify({docs:e.docs})});e.attachments&&e.binary&&i.data.results.forEach((function(e){e.docs.forEach(_n)})),t(null,i.data)}catch(e){t(e)}}function o(){const r=Math.ceil(e.docs.length/50);let i=0;const o=new Array(r);function s(e){return function(n,s){o[e]=s.results,++i===r&&t(null,{results:o.flat()})}}for(let t=0;tt?t:s;const p=xn(r,"_changes"+Cn(i)),m={signal:d.signal,method:u,body:JSON.stringify(l)};if(h=n,!e.aborted)try{await c(),f(null,(await a(p,m)).data)}catch(e){f(e)}},p={results:[]},m=function(n,r){if(e.aborted)return;let i=0;if(r&&r.results){i=r.results.length,p.last_seq=r.last_seq;let t=null,n=null;"number"==typeof r.pending&&(t=r.pending),"string"!=typeof p.last_seq&&"number"!=typeof p.last_seq||(n=p.last_seq),e.query_params,r.results=r.results.filter((function(r){s--;const i=Z(e)(r);return i&&(e.include_docs&&e.attachments&&e.binary&&_n(r),e.return_docs&&p.results.push(r),e.onChange(r,t,n)),i}))}else if(n)return e.aborted=!0,void e.complete(n);r&&r.last_seq&&(h=r.last_seq);const a=o&&s<=0||r&&i{})).then((()=>e())),this.promise}finish(){return this.promise}}function Fn(e){if(!e)return"undefined";switch(typeof e){case"function":case"string":return e.toString();default:return JSON.stringify(e)}}async function Yn(e,t,n,r,i,o){const s=function(e,t){return Fn(e)+Fn(t)+"undefined"}(n,r);let a;if(!i&&(a=e._cachedViews=e._cachedViews||{},a[s]))return a[s];const l=e.info().then((async function(l){const c=l.db_name+"-mrview-"+(i?"temp":Ce(s));await ce(e,"_local/"+o,(function(e){e.views=e.views||{};let n=t;-1===n.indexOf("/")&&(n=t+"/"+t);const r=e.views[n]=e.views[n]||{};if(!r[c])return r[c]=!0,e}));const u=(await e.registerDependentDatabase(c)).db;u.auto_compaction=!0;const d={name:c,db:u,sourceDB:e,adapter:e.adapter,mapFun:n,reduceFun:r};let h;try{h=await d.db.get("_local/lastSeq")}catch(e){if(404!==e.status)throw e}return d.seq=h?h.seq:0,a&&d.db.once("destroyed",(function(){delete a[s]})),d}));return a&&(a[s]=l),l}const Wn={},Bn=new Un;function Vn(e){return-1===e.indexOf("/")?[e,e]:e.split("/")}function zn(e,t,n){try{e.emit("error",t)}catch(e){O("error","The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."),O("error",t,n)}}var $n=function(e,t){return In(t)},Gn=function(e,t){return t.length},qn=function(e,t){return{sum:In(t),min:Math.min.apply(null,t),max:Math.max.apply(null,t),count:t.length,sumsqr:function(e){for(var t=0,n=0,r=e.length;n0?e.slice(n):e}function l(e){const t=e.value;return t&&"object"==typeof t&&t._id||e.id}function c(e){return function(t){return e.include_docs&&e.attachments&&e.binary&&function(e){for(const t of e.rows){const e=t.doc&&t.doc._attachments;if(e)for(const t of Object.keys(e)){const n=e[t];e[t].data=me(n.data,n.content_type)}}}(t),t}}function u(e,t,n,r){let i=t[e];void 0!==i&&(r&&(i=encodeURIComponent(JSON.stringify(i))),n.push(e+"="+i))}function d(e){if(void 0!==e){const t=Number(e);return isNaN(t)||t!==parseInt(e,10)?e:t}}function h(e){if(e){if("number"!=typeof e)return new Tn(`Invalid value for integer: "${e}"`);if(e<0)return new Tn(`Invalid value for positive integer: "${e}"`)}}function f(e,t){const n=e.descending?"endkey":"startkey",r=e.descending?"startkey":"endkey";if(void 0!==e[n]&&void 0!==e[r]&&_t(e[n],e[r])>0)throw new Tn("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");if(t.reduce&&!1!==e.reduce){if(e.include_docs)throw new Tn("{include_docs:true} is invalid for reduce");if(e.keys&&e.keys.length>1&&!e.group&&!e.group_level)throw new Tn("Multi-key fetches for reduce views must use {group: true}")}for(const t of["group_level","limit","skip"]){const n=h(e[t]);if(n)throw n}}function p(e){return function(t){if(404===t.status)return e;throw t}}function m(e){const t="string"==typeof e?e:e.name;let n=Wn[t];return n||(n=Wn[t]=new Un),n}async function g(e,n){return Rn(m(e),(function(){return async function(e,n){let r,o,a;const l=t(e.mapFun,(function(e,t){const n={id:o._id,key:vt(e)};null!=t&&(n.value=vt(t)),r.push(n)}));let c=e.seq||0;function u(t,n){return function(){return function(e,t,n){var r="_local/lastSeq";return e.db.get(r).catch(p({_id:r,seq:0})).then((function(r){var i=Ln(t);return Promise.all(i.map((function(n){return async function(e,t,n){const r="_local/doc_"+e,i={_id:r,keys:[]},o=n.get(e),s=o[0],a=o[1],l=await(function(e){return 1===e.length&&/^1-/.test(e[0].rev)}(a)?Promise.resolve(i):t.db.get(r).catch(p(i))),c=await function(e){return e.keys.length?t.db.allDocs({keys:e.keys,include_docs:!0}):Promise.resolve({rows:[]})}(l);return function(e,t){const n=[],r=new Set;for(const e of t.rows){const t=e.doc;if(t&&(n.push(t),r.add(t._id),t._deleted=!s.has(t._id),!t._deleted)){const e=s.get(t._id);"value"in e&&(t.value=e.value)}}const i=Ln(s);for(const e of i)if(!r.has(e)){const t={_id:e},r=s.get(e);"value"in r&&(t.value=r.value),n.push(t)}return e.keys=On(i.concat(e.keys)),n.push(e),n}(l,c)}(n,e,t)}))).then((function(t){var i=t.flat();return r.seq=n,i.push(r),e.db.bulkDocs({docs:i})})).then((()=>function(e){return e.sourceDB.get("_local/purges").then((function(t){const n=t.purgeSeq;return e.db.get("_local/purgeSeq").then((function(e){return e._rev})).catch(p(void 0)).then((function(t){return e.db.put({_id:"_local/purgeSeq",_rev:t,purgeSeq:n})}))})).catch((function(e){if(404!==e.status)throw e}))}(e)))}))}(e,t,n)}}let d=0;const h={view:e.name,indexed_docs:d};e.sourceDB.emit("indexing",h);const f=new Un;async function m(){return function(t,h){const p=t.results;if(!p.length&&!h.length)return;for(const e of h)if(p.findIndex((function(t){return t.id===e.docId}))<0){const t={_id:e.docId,doc:{_id:e.docId,_deleted:1},changes:[]};e.doc&&(t.doc=e.doc,t.changes.push({rev:e.doc._rev})),p.push(t)}const y=function(t){const n=new Map;for(const a of t){if("_"!==a.doc._id[0]){r=[],o=a.doc,o._deleted||i(e.sourceDB,l,o),r.sort(s);const t=g(r);n.set(a.doc._id,[t,a.changes])}c=a.seq}return n}(p);f.add(u(y,c)),d+=p.length;const b={view:e.name,last_seq:t.last_seq,results_count:p.length,indexed_docs:d};return e.sourceDB.emit("indexing",b),e.sourceDB.activeTasks.update(a,{completed_items:d}),p.lengtht})).map((e=>e.docId)),i=r.filter((function(e,t){return r.indexOf(e)===t}));return Promise.all(i.map((function(t){return e.sourceDB.get(t).then((function(e){return{docId:t,doc:e}})).catch(p({docId:t}))})))})).catch(p([]))})))}function g(e){const t=new Map;let n;for(let r=0,i=e.length;r0&&0===_t(i.key,n)&&o.push(r),t.set(wt(o),i),n=i.key}return t}try{await e.sourceDB.info().then((function(t){a=e.sourceDB.activeTasks.add({name:"view_indexing",total_items:t.update_seq-c})})),await m(),await f.finish(),e.seq=c,e.sourceDB.activeTasks.remove(a)}catch(t){e.sourceDB.activeTasks.remove(a,t)}}(e,n)}))()}function y(e,t){return Rn(m(e),(function(){return async function(e,t){let r;const i=e.reduceFun&&!1!==t.reduce,s=t.skip||0;async function c(t){t.include_docs=!0;const n=await e.db.allDocs(t);return r=n.total_rows,n.rows.map((function(e){if("value"in e.doc&&"object"==typeof e.doc.value&&null!==e.doc.value){const t=Object.keys(e.doc.value).sort(),n=["id","key","value"];if(!(tn))return e.doc.value}const t=function(e){for(var t=[],n=[],r=0;;){var i=e[r++];if("\0"!==i)switch(i){case"1":t.push(null);break;case"2":t.push("1"===e[r]),r++;break;case"3":var o=xt(e,r);t.push(o.num),r+=o.length;break;case"4":for(var s="";;){var a=e[r];if("\0"===a)break;s+=a,r++}s=s.replace(/\u0001\u0001/g,"\0").replace(/\u0001\u0002/g,"").replace(/\u0002\u0002/g,""),t.push(s);break;case"5":var l={element:[],index:t.length};t.push(l.element),n.push(l);break;case"6":var c={element:{},index:t.length};t.push(c.element),n.push(c);break;default:throw new Error("bad collationIndex or unexpectedly reached end of input: "+i)}else{if(1===t.length)return t.pop();St(t,n)}}}(e.doc._id);return{key:t[0],id:t[1],value:"value"in e.doc?e.doc.value:null}}))}async function u(c){let u;if(u=i?function(e,t,r){0===r.group_level&&delete r.group_level;const i=r.group||r.group_level,s=n(e.reduceFun),l=[],c=isNaN(r.group_level)?Number.POSITIVE_INFINITY:r.group_level;for(const e of t){const t=l[l.length-1];let n=i?e.key:null;i&&Array.isArray(n)&&(n=n.slice(0,c)),t&&0===_t(t.groupKey,n)?(t.keys.push([e.key,e.id]),t.values.push(e.value)):l.push({keys:[[e.key,e.id]],values:[e.value],groupKey:n})}t=[];for(const n of l){const r=o(e.sourceDB,s,n.keys,n.values,!1);if(r.error&&r.error instanceof Dn)throw r.error;t.push({value:r.error?null:r.output,key:n.groupKey})}return{rows:a(t,r.limit,r.skip)}}(e,c,t):void 0===t.keys?{total_rows:r,offset:s,rows:c}:{total_rows:r,offset:s,rows:a(c,t.limit,t.skip)},t.update_seq&&(u.update_seq=e.seq),t.include_docs){const n=On(c.map(l)),r=await e.sourceDB.allDocs({keys:n,include_docs:!0,conflicts:t.conflicts,attachments:t.attachments,binary:t.binary}),i=new Map;for(const e of r.rows)i.set(e.id,e.doc);for(const e of c){const t=l(e),n=i.get(t);n&&(e.doc=n)}}return u}if(void 0===t.keys||t.keys.length||(t.limit=0,delete t.keys),void 0!==t.keys){const e=t.keys.map((function(e){const n={startkey:wt([e]),endkey:wt([e,{}])};return t.update_seq&&(n.update_seq=!0),c(n)}));return u((await Promise.all(e)).flat())}{const e={descending:t.descending};let n,r;if(t.update_seq&&(e.update_seq=!0),"start_key"in t&&(n=t.start_key),"startkey"in t&&(n=t.startkey),"end_key"in t&&(r=t.end_key),"endkey"in t&&(r=t.endkey),void 0!==n&&(e.startkey=t.descending?wt([n,{}]):wt([n])),void 0!==r){let n=!1!==t.inclusive_end;t.descending&&(n=!n),e.endkey=wt(n?[r,{}]:[r])}if(void 0!==t.key){const n=wt([t.key]),r=wt([t.key,{}]);e.descending?(e.endkey=n,e.startkey=r):(e.startkey=n,e.endkey=r)}return i||("number"==typeof t.limit&&(e.limit=t.limit),e.skip=s),u(await c(e))}}(e,t)}))()}async function b(t,n,r){if("function"==typeof t._query)return function(e,t,n){return new Promise((function(r,i){e._query(t,n,(function(e,t){if(e)return i(e);r(t)}))}))}(t,n,r);if(ee(t))return async function(e,t,n){let r,i,o=[],s="GET";if(u("reduce",n,o),u("include_docs",n,o),u("attachments",n,o),u("limit",n,o),u("descending",n,o),u("group",n,o),u("group_level",n,o),u("skip",n,o),u("stale",n,o),u("conflicts",n,o),u("startkey",n,o,!0),u("start_key",n,o,!0),u("endkey",n,o,!0),u("end_key",n,o,!0),u("inclusive_end",n,o),u("key",n,o,!0),u("update_seq",n,o),o=o.join("&"),o=""===o?"":"?"+o,void 0!==n.keys){const e=2e3,i=`keys=${encodeURIComponent(JSON.stringify(n.keys))}`;i.length+o.length+1<=e?o+=("?"===o[0]?"&":"?")+i:(s="POST","string"==typeof t?r={keys:n.keys}:t.keys=n.keys)}if("string"==typeof t){const a=Vn(t),l=await e.fetch("_design/"+a[0]+"/_view/"+a[1]+o,{headers:new it({"Content-Type":"application/json"}),method:s,body:JSON.stringify(r)});i=l.ok;const u=await l.json();if(!i)throw u.status=l.status,J(u);for(const e of u.rows)if(e.value&&e.value.error&&"builtin_reduce_error"===e.value.error)throw new Error(e.reason);return new Promise((function(e){e(u)})).then(c(n))}r=r||{};for(const e of Object.keys(t))Array.isArray(t[e])?r[e]=t[e]:r[e]=t[e].toString();const a=await e.fetch("_temp_view"+o,{headers:new it({"Content-Type":"application/json"}),method:"POST",body:JSON.stringify(r)});i=a.ok;const l=await a.json();if(!i)throw l.status=a.status,J(l);return new Promise((function(e){e(l)})).then(c(n))}(t,n,r);const i={changes_batch_size:t.__opts.view_update_changes_batch_size||50};if("string"!=typeof n)return f(r,n),Bn.add((async function(){const o=await Yn(t,"temp_view/temp_view",n.map,n.reduce,!0,e);return s=g(o,i).then((function(){return y(o,r)})),a=function(){return o.db.destroy()},s.then((function(e){return a().then((function(){return e}))}),(function(e){return a().then((function(){throw e}))}));var s,a})),Bn.finish();{const o=n,s=Vn(o),a=s[0],l=s[1],c=await t.get("_design/"+a);if(!(n=c.views&&c.views[l]))throw new En(`ddoc ${c._id} has no view named ${l}`);(function(e,t){var n=e.views&&e.views[t];if("string"!=typeof n.map)throw new En("ddoc "+e._id+" has no string view named "+t+", instead found object of type: "+typeof n.map)})(c,l),f(r,n);const u=await Yn(t,o,n.map,n.reduce,!1,e);return"ok"===r.stale||"update_after"===r.stale?("update_after"===r.stale&&k((function(){g(u,i)})),y(u,r)):(await g(u,i),y(u,r))}}var _;return{query:function(e,t,n){const r=this;"function"==typeof t&&(n=t,t={}),t=t?function(e){return e.group_level=d(e.group_level),e.limit=d(e.limit),e.skip=d(e.skip),e}(t):{},"function"==typeof e&&(e={map:e});const i=Promise.resolve().then((function(){return b(r,e,t)}));return kn(i,n),i},viewCleanup:(_=function(){const t=this;return"function"==typeof t._viewCleanup?function(e){return new Promise((function(t,n){e._viewCleanup((function(e,r){if(e)return n(e);t(r)}))}))}(t):ee(t)?async function(e){return(await e.fetch("_view_cleanup",{headers:new it({"Content-Type":"application/json"}),method:"POST"})).json()}(t):async function(t){try{const n=await t.get("_local/"+e),r=new Map;for(const e of Object.keys(n.views)){const t=Vn(e),n="_design/"+t[0],i=t[1];let o=r.get(n);o||(o=new Set,r.set(n,o)),o.add(i)}const i={keys:Ln(r),include_docs:!0},o=await t.allDocs(i),s={};for(const e of o.rows){const t=e.key.substring(8);for(const i of r.get(e.key)){let r=t+"/"+i;n.views[r]||(r=i);const o=Object.keys(n.views[r]),a=e.doc&&e.doc.views&&e.doc.views[i];for(const e of o)s[e]=s[e]||a}}const a=Object.keys(s).filter((function(e){return!s[e]})).map((function(e){return Rn(m(e),(function(){return new t.constructor(e,t.__opts).destroy()}))()}));return Promise.all(a).then((function(){return{ok:!0}}))}catch(e){if(404===e.status)return{ok:!0};throw e}}(t)},function(...e){var t=e.pop(),n=_.apply(this,e);return"function"==typeof t&&kn(n,t),n})}}("mrviews",(function(e,t){if("function"==typeof e&&2===e.length){var n=e;return function(e){return n(e,t)}}return jn(e.toString(),t)}),(function(e){var t=e.toString(),n=function(e){if(/^_sum/.test(e))return $n;if(/^_count/.test(e))return Gn;if(/^_stats/.test(e))return qn;if(/^_/.test(e))throw new Error(e+" is not a supported reduce function.")}(t);return n||jn(t)})),Kn={query:function(e,t,n){return Xn.query.call(this,e,t,n)},viewCleanup:function(e){return Xn.viewCleanup.call(this,e)}};function Jn(e,t){var n=Object.keys(t._attachments);return Promise.all(n.map((function(n){return e.getAttachment(t._id,n,{rev:t._rev})})))}var Zn="pouchdb";function Qn(e,t,n,r,i){return e.get(t).catch((function(n){if(404===n.status)return"http"!==e.adapter&&"https"!==e.adapter||A(404,"PouchDB is just checking if a remote checkpoint exists."),{session_id:r,_id:t,history:[],replicator:Zn,version:1};throw n})).then((function(o){if(!i.cancelled&&o.last_seq!==n)return o.history=(o.history||[]).filter((function(e){return e.session_id!==r})),o.history.unshift({last_seq:n,session_id:r}),o.history=o.history.slice(0,5),o.version=1,o.replicator=Zn,o.session_id=r,o.last_seq=n,e.put(o).catch((function(o){if(409===o.status)return Qn(e,t,n,r,i);throw o}))}))}class er{constructor(e,t,n,r,i={writeSourceCheckpoint:!0,writeTargetCheckpoint:!0}){this.src=e,this.target=t,this.id=n,this.returnValue=r,this.opts=i,void 0===i.writeSourceCheckpoint&&(i.writeSourceCheckpoint=!0),void 0===i.writeTargetCheckpoint&&(i.writeTargetCheckpoint=!0)}writeCheckpoint(e,t){var n=this;return this.updateTarget(e,t).then((function(){return n.updateSource(e,t)}))}updateTarget(e,t){return this.opts.writeTargetCheckpoint?Qn(this.target,this.id,e,t,this.returnValue):Promise.resolve(!0)}updateSource(e,t){if(this.opts.writeSourceCheckpoint){var n=this;return Qn(this.src,this.id,e,t,this.returnValue).catch((function(e){if(ir(e))return n.opts.writeSourceCheckpoint=!1,!0;throw e}))}return Promise.resolve(!0)}getCheckpoint(){var e=this;return e.opts.writeSourceCheckpoint||e.opts.writeTargetCheckpoint?e.opts&&e.opts.writeSourceCheckpoint&&!e.opts.writeTargetCheckpoint?e.src.get(e.id).then((function(e){return e.last_seq||0})).catch((function(e){if(404!==e.status)throw e;return 0})):e.target.get(e.id).then((function(t){return e.opts&&e.opts.writeTargetCheckpoint&&!e.opts.writeSourceCheckpoint?t.last_seq||0:e.src.get(e.id).then((function(e){return t.version!==e.version?0:(n=t.version?t.version.toString():"undefined")in tr?tr[n](t,e):0;var n}),(function(n){if(404===n.status&&t.last_seq)return e.src.put({_id:e.id,last_seq:0}).then((function(){return 0}),(function(n){return ir(n)?(e.opts.writeSourceCheckpoint=!1,t.last_seq):0}));throw n}))})).catch((function(e){if(404!==e.status)throw e;return 0})):Promise.resolve(0)}}var tr={undefined:function(e,t){return 0===_t(e.last_seq,t.last_seq)?t.last_seq:0},1:function(e,t){return(n=t,r=e,n.session_id===r.session_id?{last_seq:n.last_seq,history:n.history}:nr(n.history,r.history)).last_seq;var n,r}};function nr(e,t){var n=e[0],r=e.slice(1),i=t[0],o=t.slice(1);return n&&0!==t.length?rr(n.session_id,t)?{last_seq:n.last_seq,history:e}:rr(i.session_id,r)?{last_seq:i.last_seq,history:o}:nr(r,o):{last_seq:0,history:[]}}function rr(e,t){var n=t[0],r=t.slice(1);return!(!e||0===t.length)&&(e===n.session_id||rr(e,r))}function ir(e){return"number"==typeof e.status&&4===Math.floor(e.status/100)}function or(e,t,n,r,i){return this instanceof er?or:new er(e,t,n,r,i)}var sr=0;function ar(e,t,n,r,i){var o,s,a,l,c=[],u={seq:0,changes:[],docs:[]},d=!1,h=!1,f=!1,p=0,m=0,g=n.continuous||n.live||!1,y=n.batch_size||100,_=n.batches_limit||10,v=n.style||"all_docs",w=!1,x=n.doc_ids,S=n.selector,C=[],M=Te();i=i||{ok:!0,start_time:(new Date).toISOString(),docs_read:0,docs_written:0,doc_write_failures:0,errors:[]};var T={};function E(){return a?Promise.resolve():function(e,t,n){var r=n.doc_ids?n.doc_ids.sort(_t):"",i=n.filter?n.filter.toString():"",o="",s="",a="";return n.selector&&(a=JSON.stringify(n.selector)),n.filter&&n.query_params&&(o=JSON.stringify(function(e){return Object.keys(e).sort(_t).reduce((function(t,n){return t[n]=e[n],t}),{})}(n.query_params))),n.filter&&"_view"===n.filter&&(s=n.view.toString()),Promise.all([e.id(),t.id()]).then((function(e){var t=e[0]+e[1]+i+s+o+r+a;return new Promise((function(e){Se(t,e)}))})).then((function(e){return"_local/"+e.replace(/\//g,".").replace(/\+/g,"_")}))}(e,t,n).then((function(i){s=i;var o;o=!1===n.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!1}:"source"===n.checkpoint?{writeSourceCheckpoint:!0,writeTargetCheckpoint:!1}:"target"===n.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!0}:{writeSourceCheckpoint:!0,writeTargetCheckpoint:!0},a=new or(e,t,s,r,o)}))}function D(){if(C=[],0!==o.docs.length){var e=o.docs,s={timeout:n.timeout};return t.bulkDocs({docs:e,new_edits:!1},s).then((function(t){if(r.cancelled)throw N(),new Error("cancelled");var n=Object.create(null);t.forEach((function(e){e.error&&(n[e.id]=e)}));var o=Object.keys(n).length;i.doc_write_failures+=o,i.docs_written+=e.length-o,e.forEach((function(e){var t=n[e._id];if(t){i.errors.push(t);var o=(t.name||"").toLowerCase();if("unauthorized"!==o&&"forbidden"!==o)throw t;r.emit("denied",b(t))}else C.push(e)}))}),(function(t){throw i.doc_write_failures+=e.length,t}))}}function R(){if(o.error)throw new Error("There was a problem getting docs.");i.last_seq=m=o.seq;var t=b(i);return C.length&&(t.docs=C,"number"==typeof o.pending&&(t.pending=o.pending,delete o.pending),r.emit("change",t)),d=!0,e.info().then((function(t){var n=e.activeTasks.get(l);if(o&&n){var r=n.completed_items||0,i=parseInt(t.update_seq,10)-parseInt(p,10);e.activeTasks.update(l,{completed_items:r+o.changes.length,total_items:i})}})),a.writeCheckpoint(o.seq,M).then((function(){if(r.emit("checkpoint",{checkpoint:o.seq}),d=!1,r.cancelled)throw N(),new Error("cancelled");o=void 0,F()})).catch((function(e){throw B(e),e}))}function O(){return function(e,t,n,r){n=b(n);var i=[],o=!0;return Promise.resolve().then((function(){var s=function(e){var t=[];return Object.keys(e).forEach((function(n){e[n].missing.forEach((function(e){t.push({id:n,rev:e})}))})),{docs:t,revs:!0,latest:!0}}(n);if(s.docs.length)return e.bulkGet(s).then((function(n){if(r.cancelled)throw new Error("cancelled");return Promise.all(n.results.map((function(n){return Promise.all(n.docs.map((function(n){var r=n.ok;return n.error&&(o=!1),r&&r._attachments?function(e,t,n){var r=ee(t)&&!ee(e),i=Object.keys(n._attachments);return r?e.get(n._id).then((function(r){return Promise.all(i.map((function(i){return function(e,t,n){return!e._attachments||!e._attachments[n]||e._attachments[n].digest!==t._attachments[n].digest}(r,n,i)?t.getAttachment(n._id,i):e.getAttachment(r._id,i)})))})).catch((function(e){if(404!==e.status)throw e;return Jn(t,n)})):Jn(t,n)}(t,e,r).then((e=>{var t=Object.keys(r._attachments);return e.forEach((function(e,n){var i=r._attachments[t[n]];delete i.stub,delete i.length,i.data=e})),r})):r})))}))).then((function(e){i=i.concat(e.flat().filter(Boolean))}))}))})).then((function(){return{ok:o,docs:i}}))}(e,t,o.diffs,r).then((function(e){o.error=!e.ok,e.docs.forEach((function(e){delete o.diffs[e._id],i.docs_read++,o.docs.push(e)}))}))}function A(){var e;r.cancelled||o||(0!==c.length?(o=c.shift(),r.emit("checkpoint",{start_next_batch:o.seq}),(e={},o.changes.forEach((function(t){r.emit("checkpoint",{revs_diff:t}),"_user/"!==t.id&&(e[t.id]=t.changes.map((function(e){return e.rev})))})),t.revsDiff(e).then((function(e){if(r.cancelled)throw N(),new Error("cancelled");o.diffs=e}))).then(O).then(D).then(R).then(A).catch((function(e){P("batch processing terminated with error",e)}))):I(!0))}function I(e){0!==u.changes.length?(e||h||u.changes.length>=y)&&(c.push(u),u={seq:0,changes:[],docs:[]},"pending"!==r.state&&"stopped"!==r.state||(r.state="active",r.emit("active")),A()):0!==c.length||o||((g&&T.live||h)&&(r.state="pending",r.emit("paused")),h&&N())}function P(e,t){f||(t.message||(t.message=e),i.ok=!1,i.status="aborting",c=[],u={seq:0,changes:[],docs:[]},N(t))}function N(o){if(!(f||r.cancelled&&(i.status="cancelled",d)))if(i.status=i.status||"complete",i.end_time=(new Date).toISOString(),i.last_seq=m,f=!0,e.activeTasks.remove(l,o),o){(o=K(o)).result=i;var s=(o.name||"").toLowerCase();"unauthorized"===s||"forbidden"===s?(r.emit("error",o),r.removeAllListeners()):function(e,t,n,r){if(!1===e.retry)return t.emit("error",n),void t.removeAllListeners();if("function"!=typeof e.back_off_function&&(e.back_off_function=L),t.emit("requestError",n),"active"===t.state||"pending"===t.state){t.emit("paused",n),t.state="stopped";var i=function(){e.current_back_off=sr};t.once("paused",(function(){t.removeListener("active",i)})),t.once("active",i)}e.current_back_off=e.current_back_off||sr,e.current_back_off=e.back_off_function(e.current_back_off),setTimeout(r,e.current_back_off)}(n,r,o,(function(){ar(e,t,n,r)}))}else r.emit("complete",i),r.removeAllListeners()}function H(t,i,o){if(r.cancelled)return N();if("number"==typeof i&&(u.pending=i),Z(n)(t))u.seq=t.seq||o,u.changes.push(t),r.emit("checkpoint",{pending_batch:u.seq}),k((function(){I(0===c.length&&T.live)}));else{var s=e.activeTasks.get(l);if(s){var a=s.completed_items||0;e.activeTasks.update(l,{completed_items:++a})}}}function j(e){if(w=!1,r.cancelled)return N();if(e.results.length>0)T.since=e.results[e.results.length-1].seq,F(),I(!0);else{var t=function(){g?(T.live=!0,F()):h=!0,I(!0)};o||0!==e.results.length?t():(d=!0,a.writeCheckpoint(e.last_seq,M).then((function(){if(d=!1,i.last_seq=m=e.last_seq,r.cancelled)throw N(),new Error("cancelled");t()})).catch(B))}}function U(e){if(w=!1,r.cancelled)return N();P("changes rejected",e)}function F(){if(!w&&!h&&c.length<_){w=!0,r._changes&&(r.removeListener("cancel",r._abortChanges),r._changes.cancel()),r.once("cancel",i);var t=e.changes(T).on("change",H);t.then(o,o),t.then(j).catch(U),n.retry&&(r._changes=t,r._abortChanges=i)}function i(){t.cancel()}function o(){r.removeListener("cancel",i)}}function Y(t){return e.info().then((function(r){var i=void 0===n.since?parseInt(r.update_seq,10)-parseInt(t,10):parseInt(r.update_seq,10);return l=e.activeTasks.add({name:`${g?"continuous ":""}replication from ${r.db_name}`,total_items:i}),t}))}function W(){E().then((function(){if(!r.cancelled)return a.getCheckpoint().then(Y).then((function(e){p=e,T={since:m=e,limit:y,batch_size:y,style:v,doc_ids:x,selector:S,return_docs:!0},n.filter&&("string"!=typeof n.filter?T.include_docs=!0:T.filter=n.filter),"heartbeat"in n&&(T.heartbeat=n.heartbeat),"timeout"in n&&(T.timeout=n.timeout),n.query_params&&(T.query_params=n.query_params),n.view&&(T.view=n.view),F()}));N()})).catch((function(e){P("getCheckpoint rejected with ",e)}))}function B(e){d=!1,P("writeCheckpoint completed with error",e)}r.ready(e,t),r.cancelled?N():(r._addedListeners||(r.once("cancel",N),"function"==typeof n.complete&&(r.once("error",n.complete),r.once("complete",(function(e){n.complete(null,e)}))),r._addedListeners=!0),void 0===n.since?W():E().then((function(){return d=!0,a.writeCheckpoint(n.since,M)})).then((function(){d=!1,r.cancelled?N():(m=n.since,W())})).catch(B))}class lr extends(m()){constructor(){super(),this.cancelled=!1,this.state="pending";const e=new Promise(((e,t)=>{this.once("complete",e),this.once("error",t)}));this.then=function(t,n){return e.then(t,n)},this.catch=function(t){return e.catch(t)},this.catch((function(){}))}cancel(){this.cancelled=!0,this.state="cancelled",this.emit("cancel")}ready(e,t){if(this._readyCalled)return;this._readyCalled=!0;const n=()=>{this.cancel()};function r(){e.removeListener("destroyed",n),t.removeListener("destroyed",n)}e.once("destroyed",n),t.once("destroyed",n),this.once("complete",r),this.once("error",r)}}function cr(e,t){var n=t.PouchConstructor;return"string"==typeof e?new n(e,t):e}function ur(e,t,n,r){if("function"==typeof n&&(r=n,n={}),void 0===n&&(n={}),n.doc_ids&&!Array.isArray(n.doc_ids))throw K(z,"`doc_ids` filter parameter is not a list.");n.complete=r,(n=b(n)).continuous=n.continuous||n.live,n.retry="retry"in n&&n.retry,n.PouchConstructor=n.PouchConstructor||this;var i=new lr(n);return ar(cr(e,n),cr(t,n),n,i),i}function dr(e,t,n,r){return"function"==typeof n&&(r=n,n={}),void 0===n&&(n={}),(n=b(n)).PouchConstructor=n.PouchConstructor||this,e=cr(e,n),t=cr(t,n),new hr(e,t,n,r)}class hr extends(m()){constructor(e,t,n,r){super(),this.canceled=!1;const i=n.push?Object.assign({},n,n.push):n,o=n.pull?Object.assign({},n,n.pull):n;this.push=ur(e,t,i),this.pull=ur(t,e,o),this.pushPaused=!0,this.pullPaused=!0;const s=e=>{this.emit("change",{direction:"pull",change:e})},a=e=>{this.emit("change",{direction:"push",change:e})},l=e=>{this.emit("denied",{direction:"push",doc:e})},c=e=>{this.emit("denied",{direction:"pull",doc:e})},u=()=>{this.pushPaused=!0,this.pullPaused&&this.emit("paused")},d=()=>{this.pullPaused=!0,this.pushPaused&&this.emit("paused")},h=()=>{this.pushPaused=!1,this.pullPaused&&this.emit("active",{direction:"push"})},f=()=>{this.pullPaused=!1,this.pushPaused&&this.emit("active",{direction:"pull"})};let p={};const m=e=>(t,n)=>{("change"===t&&(n===s||n===a)||"denied"===t&&(n===c||n===l)||"paused"===t&&(n===d||n===u)||"active"===t&&(n===f||n===h))&&(t in p||(p[t]={}),p[t][e]=!0,2===Object.keys(p[t]).length&&this.removeAllListeners(t))};function g(e,t,n){-1==e.listeners(t).indexOf(n)&&e.on(t,n)}n.live&&(this.push.on("complete",this.pull.cancel.bind(this.pull)),this.pull.on("complete",this.push.cancel.bind(this.push))),this.on("newListener",(function(e){"change"===e?(g(this.pull,"change",s),g(this.push,"change",a)):"denied"===e?(g(this.pull,"denied",c),g(this.push,"denied",l)):"active"===e?(g(this.pull,"active",f),g(this.push,"active",h)):"paused"===e&&(g(this.pull,"paused",d),g(this.push,"paused",u))})),this.on("removeListener",(function(e){"change"===e?(this.pull.removeListener("change",s),this.push.removeListener("change",a)):"denied"===e?(this.pull.removeListener("denied",c),this.push.removeListener("denied",l)):"active"===e?(this.pull.removeListener("active",f),this.push.removeListener("active",h)):"paused"===e&&(this.pull.removeListener("paused",d),this.push.removeListener("paused",u))})),this.pull.on("removeListener",m("pull")),this.push.on("removeListener",m("push"));const y=Promise.all([this.push,this.pull]).then((e=>{const t={push:e[0],pull:e[1]};return this.emit("complete",t),r&&r(null,t),this.removeAllListeners(),t}),(e=>{if(this.cancel(),r?r(e):this.emit("error",e),this.removeAllListeners(),r)throw e}));this.then=function(e,t){return y.then(e,t)},this.catch=function(e){return y.catch(e)}}cancel(){this.canceled||(this.canceled=!0,this.push.cancel(),this.pull.cancel())}}nt.plugin((function(e){e.adapter("idb",gn,!0)})).plugin((function(e){e.adapter("http",Mn,!1),e.adapter("https",Mn,!1)})).plugin(Kn).plugin((function(e){e.replicate=ur,e.sync=dr,Object.defineProperty(e.prototype,"replicate",{get:function(){var e=this;return void 0===this.replicateMethods&&(this.replicateMethods={from:function(t,n,r){return e.constructor.replicate(t,e,n,r)},to:function(t,n,r){return e.constructor.replicate(e,t,n,r)}}),this.replicateMethods}}),e.prototype.sync=function(e,t,n){return this.constructor.sync(this,e,t,n)}}));const fr=nt},75735:e=>{e.exports=function(e){"use strict";var t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function n(e,t){var n=e[0],r=e[1],i=e[2],o=e[3];r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[0]-680876936|0)<<7|n>>>25)+r|0)&r|~n&i)+t[1]-389564586|0)<<12|o>>>20)+n|0)&n|~o&r)+t[2]+606105819|0)<<17|i>>>15)+o|0)&o|~i&n)+t[3]-1044525330|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[4]-176418897|0)<<7|n>>>25)+r|0)&r|~n&i)+t[5]+1200080426|0)<<12|o>>>20)+n|0)&n|~o&r)+t[6]-1473231341|0)<<17|i>>>15)+o|0)&o|~i&n)+t[7]-45705983|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[8]+1770035416|0)<<7|n>>>25)+r|0)&r|~n&i)+t[9]-1958414417|0)<<12|o>>>20)+n|0)&n|~o&r)+t[10]-42063|0)<<17|i>>>15)+o|0)&o|~i&n)+t[11]-1990404162|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[12]+1804603682|0)<<7|n>>>25)+r|0)&r|~n&i)+t[13]-40341101|0)<<12|o>>>20)+n|0)&n|~o&r)+t[14]-1502002290|0)<<17|i>>>15)+o|0)&o|~i&n)+t[15]+1236535329|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[1]-165796510|0)<<5|n>>>27)+r|0)&i|r&~i)+t[6]-1069501632|0)<<9|o>>>23)+n|0)&r|n&~r)+t[11]+643717713|0)<<14|i>>>18)+o|0)&n|o&~n)+t[0]-373897302|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[5]-701558691|0)<<5|n>>>27)+r|0)&i|r&~i)+t[10]+38016083|0)<<9|o>>>23)+n|0)&r|n&~r)+t[15]-660478335|0)<<14|i>>>18)+o|0)&n|o&~n)+t[4]-405537848|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[9]+568446438|0)<<5|n>>>27)+r|0)&i|r&~i)+t[14]-1019803690|0)<<9|o>>>23)+n|0)&r|n&~r)+t[3]-187363961|0)<<14|i>>>18)+o|0)&n|o&~n)+t[8]+1163531501|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[13]-1444681467|0)<<5|n>>>27)+r|0)&i|r&~i)+t[2]-51403784|0)<<9|o>>>23)+n|0)&r|n&~r)+t[7]+1735328473|0)<<14|i>>>18)+o|0)&n|o&~n)+t[12]-1926607734|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[5]-378558|0)<<4|n>>>28)+r|0)^r^i)+t[8]-2022574463|0)<<11|o>>>21)+n|0)^n^r)+t[11]+1839030562|0)<<16|i>>>16)+o|0)^o^n)+t[14]-35309556|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[1]-1530992060|0)<<4|n>>>28)+r|0)^r^i)+t[4]+1272893353|0)<<11|o>>>21)+n|0)^n^r)+t[7]-155497632|0)<<16|i>>>16)+o|0)^o^n)+t[10]-1094730640|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[13]+681279174|0)<<4|n>>>28)+r|0)^r^i)+t[0]-358537222|0)<<11|o>>>21)+n|0)^n^r)+t[3]-722521979|0)<<16|i>>>16)+o|0)^o^n)+t[6]+76029189|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[9]-640364487|0)<<4|n>>>28)+r|0)^r^i)+t[12]-421815835|0)<<11|o>>>21)+n|0)^n^r)+t[15]+530742520|0)<<16|i>>>16)+o|0)^o^n)+t[2]-995338651|0)<<23|r>>>9)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[0]-198630844|0)<<6|n>>>26)+r|0)|~i))+t[7]+1126891415|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[14]-1416354905|0)<<15|i>>>17)+o|0)|~n))+t[5]-57434055|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[12]+1700485571|0)<<6|n>>>26)+r|0)|~i))+t[3]-1894986606|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[10]-1051523|0)<<15|i>>>17)+o|0)|~n))+t[1]-2054922799|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[8]+1873313359|0)<<6|n>>>26)+r|0)|~i))+t[15]-30611744|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[6]-1560198380|0)<<15|i>>>17)+o|0)|~n))+t[13]+1309151649|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[4]-145523070|0)<<6|n>>>26)+r|0)|~i))+t[11]-1120210379|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[2]+718787259|0)<<15|i>>>17)+o|0)|~n))+t[9]-343485551|0)<<21|r>>>11)+i|0,e[0]=n+e[0]|0,e[1]=r+e[1]|0,e[2]=i+e[2]|0,e[3]=o+e[3]|0}function r(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return n}function i(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24);return n}function o(e){var t,i,o,s,a,l,c=e.length,u=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=c;t+=64)n(u,r(e.substring(t-64,t)));for(i=(e=e.substring(t-64)).length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(o[t>>2]|=128<<(t%4<<3),t>55)for(n(u,o),t=0;t<16;t+=1)o[t]=0;return s=(s=8*c).toString(16).match(/(.*?)(.{0,8})$/),a=parseInt(s[2],16),l=parseInt(s[1],16)||0,o[14]=a,o[15]=l,n(u,o),u}function s(e){var n,r="";for(n=0;n<4;n+=1)r+=t[e>>8*n+4&15]+t[e>>8*n&15];return r}function a(e){var t;for(t=0;tc?new ArrayBuffer(0):(r=c-l,i=new ArrayBuffer(r),o=new Uint8Array(i),s=new Uint8Array(this,l,r),o.set(s),i)}}(),u.prototype.append=function(e){return this.appendBinary(l(e)),this},u.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t,i=this._buff.length;for(t=64;t<=i;t+=64)n(this._hash,r(this._buff.substring(t-64,t)));return this._buff=this._buff.substring(t-64),this},u.prototype.end=function(e){var t,n,r=this._buff,i=r.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=r.charCodeAt(t)<<(t%4<<3);return this._finish(o,i),n=a(this._hash),e&&(n=c(n)),this.reset(),n},u.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},u.prototype.setState=function(e){return this._buff=e.buff,this._length=e.length,this._hash=e.hash,this},u.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},u.prototype._finish=function(e,t){var r,i,o,s=t;if(e[s>>2]|=128<<(s%4<<3),s>55)for(n(this._hash,e),s=0;s<16;s+=1)e[s]=0;r=(r=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),i=parseInt(r[2],16),o=parseInt(r[1],16)||0,e[14]=i,e[15]=o,n(this._hash,e)},u.hash=function(e,t){return u.hashBinary(l(e),t)},u.hashBinary=function(e,t){var n=a(o(e));return t?c(n):n},u.ArrayBuffer=function(){this.reset()},u.ArrayBuffer.prototype.append=function(e){var t,r,o,s,a,l=(r=this._buff.buffer,o=e,s=!0,(a=new Uint8Array(r.byteLength+o.byteLength)).set(new Uint8Array(r)),a.set(new Uint8Array(o),r.byteLength),s?a:a.buffer),c=l.length;for(this._length+=e.byteLength,t=64;t<=c;t+=64)n(this._hash,i(l.subarray(t-64,t)));return this._buff=t-64>2]|=r[t]<<(t%4<<3);return this._finish(o,i),n=a(this._hash),e&&(n=c(n)),this.reset(),n},u.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.ArrayBuffer.prototype.getState=function(){var e,t=u.prototype.getState.call(this);return t.buff=(e=t.buff,String.fromCharCode.apply(null,new Uint8Array(e))),t},u.ArrayBuffer.prototype.setState=function(e){return e.buff=function(e,t){var n,r=e.length,i=new ArrayBuffer(r),o=new Uint8Array(i);for(n=0;n>2]|=e[t]<<(t%4<<3);if(o[t>>2]|=128<<(t%4<<3),t>55)for(n(u,o),t=0;t<16;t+=1)o[t]=0;return s=(s=8*c).toString(16).match(/(.*?)(.{0,8})$/),a=parseInt(s[2],16),l=parseInt(s[1],16)||0,o[14]=a,o[15]=l,n(u,o),u}(new Uint8Array(e)));return t?c(r):r},u}()},22831:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"MAX",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v1ToV6",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"v6",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"v6ToV1",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"v7",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return g.default}});var r=y(n(74213)),i=y(n(14808)),o=y(n(96792)),s=y(n(49910)),a=y(n(13518)),l=y(n(30343)),c=y(n(14948)),u=y(n(45073)),d=y(n(77186)),h=y(n(74671)),f=y(n(43507)),p=y(n(30744)),m=y(n(37037)),g=y(n(7775));function y(e){return e&&e.__esModule?e:{default:e}}},74213:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="ffffffff-ffff-ffff-ffff-ffffffffffff"},22311:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function i(e,t,n,i,o,s){return r((a=r(r(t,e),r(i,s)))<<(l=o)|a>>>32-l,n);var a,l}function o(e,t,n,r,o,s,a){return i(t&n|~t&r,e,t,o,s,a)}function s(e,t,n,r,o,s,a){return i(t&r|n&~r,e,t,o,s,a)}function a(e,t,n,r,o,s,a){return i(t^n^r,e,t,o,s,a)}function l(e,t,n,r,o,s,a){return i(n^(t|~r),e,t,o,s,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var i=0;i>5]>>>i%32&255,s=parseInt(r.charAt(o>>>4&15)+r.charAt(15&o),16);t.push(s)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[i/8])<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);t.default={randomUUID:n}},14808:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},96792:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(37037))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,i.default)(e))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},27656:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i},2858:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&!(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};var r=new Uint8Array(16)},9042:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){var t=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var o=unescape(encodeURIComponent(e));e=[];for(var s=0;s>>0;w=v,v=_,_=r(b,30)>>>0,b=y,y=C}i[0]=i[0]+y>>>0,i[1]=i[1]+b>>>0,i[2]=i[2]+_>>>0,i[3]=i[3]+v>>>0,i[4]=i[4]+w>>>0}return[i[0]>>24&255,i[0]>>16&255,i[0]>>8&255,255&i[0],i[1]>>24&255,i[1]>>16&255,i[1]>>8&255,255&i[1],i[2]>>24&255,i[2]>>16&255,i[2]>>8&255,255&i[2],i[3]>>24&255,i[3]>>16&255,i[3]>>8&255,255&i[3],i[4]>>24&255,i[4]>>16&255,i[4]>>8&255,255&i[4]]}},49910:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=a;for(var r,i=(r=n(37037))&&r.__esModule?r:{default:r},o=[],s=0;s<256;++s)o.push((s+256).toString(16).slice(1));function a(e,t=0){return(o[e[t+0]]+o[e[t+1]]+o[e[t+2]]+o[e[t+3]]+"-"+o[e[t+4]]+o[e[t+5]]+"-"+o[e[t+6]]+o[e[t+7]]+"-"+o[e[t+8]]+o[e[t+9]]+"-"+o[e[t+10]]+o[e[t+11]]+o[e[t+12]]+o[e[t+13]]+o[e[t+14]]+o[e[t+15]]).toLowerCase()}t.default=function(e,t=0){var n=a(e,t);if(!(0,i.default)(n))throw TypeError("Stringified UUID is invalid");return n}},13518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i,o,s=(r=n(2858))&&r.__esModule?r:{default:r},a=n(49910),l=0,c=0;t.default=function(e,t,n){var r=t&&n||0,u=t||new Array(16),d=(e=e||{}).node,h=e.clockseq;if(e._v6||(d||(d=i),null==h&&(h=o)),null==d||null==h){var f=e.random||(e.rng||s.default)();null==d&&(d=[f[0],f[1],f[2],f[3],f[4],f[5]],i||e._v6||(d[0]|=1,i=d)),null==h&&(h=16383&(f[6]<<8|f[7]),void 0!==o||e._v6||(o=h))}var p=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:c+1,g=p-l+(m-c)/1e4;if(g<0&&void 0===e.clockseq&&(h=h+1&16383),(g<0||p>l)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,c=m,o=h;var y=(1e4*(268435455&(p+=122192928e5))+m)%4294967296;u[r++]=y>>>24&255,u[r++]=y>>>16&255,u[r++]=y>>>8&255,u[r++]=255&y;var b=p/4294967296*1e4&268435455;u[r++]=b>>>8&255,u[r++]=255&b,u[r++]=b>>>24&15|16,u[r++]=b>>>16&255,u[r++]=h>>>8|128,u[r++]=255&h;for(var _=0;_<6;++_)u[r+_]=d[_];return t||(0,a.unsafeStringify)(u)}},30343:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=(t="string"==typeof e?(0,i.default)(e):e,Uint8Array.of((15&t[6])<<4|t[7]>>4&15,(15&t[7])<<4|(240&t[4])>>4,(15&t[4])<<4|(240&t[5])>>4,(15&t[5])<<4|(240&t[0])>>4,(15&t[0])<<4|(240&t[1])>>4,(15&t[1])<<4|(240&t[2])>>4,96|15&t[2],t[3],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15]));return"string"==typeof e?(0,o.unsafeStringify)(n):n};var r,i=(r=n(96792))&&r.__esModule?r:{default:r},o=n(49910)},14948:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(59025)),i=o(n(22311));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,r.default)("v3",48,i.default);t.default=s},59025:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,s,a){var l;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(46140)),i=s(n(2858)),o=n(49910);function s(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();var s=(e=e||{}).random||(e.rng||i.default)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t){n=n||0;for(var a=0;a<16;++a)t[n+a]=s[a];return t}return(0,o.unsafeStringify)(s)}},77186:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(59025)),i=o(n(9042));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,r.default)("v5",80,i.default);t.default=s},74671:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e={},t,n=0){var s=(0,i.default)(l(l({},e),{},{_v6:!0}),new Uint8Array(16));if(s=(0,o.default)(s),t){for(var a=0;a<16;a++)t[n+a]=s[a];return t}return(0,r.unsafeStringify)(s)};var r=n(49910),i=s(n(13518)),o=s(n(30343));function s(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=(t="string"==typeof e?(0,i.default)(e):e,Uint8Array.of((15&t[3])<<4|t[4]>>4&15,(15&t[4])<<4|(240&t[5])>>4,(15&t[5])<<4|15&t[6],t[7],(15&t[1])<<4|(240&t[2])>>4,(15&t[2])<<4|(240&t[3])>>4,16|(240&t[0])>>4,(15&t[0])<<4|(240&t[1])>>4,t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15]));return"string"==typeof e?(0,o.unsafeStringify)(n):n};var r,i=(r=n(96792))&&r.__esModule?r:{default:r},o=n(49910)},30744:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(2858))&&r.__esModule?r:{default:r},o=n(49910),s=null,a=null,l=0;t.default=function(e,t,n){e=e||{};var r=t&&n||0,c=t||new Uint8Array(16),u=e.random||(e.rng||i.default)(),d=void 0!==e.msecs?e.msecs:Date.now(),h=void 0!==e.seq?e.seq:null,f=a,p=s;return d>l&&void 0===e.msecs&&(l=d,null!==h&&(f=null,p=null)),null!==h&&(h>2147483647&&(h=2147483647),f=h>>>19&4095,p=524287&h),null!==f&&null!==p||(f=(f=127&u[6])<<8|u[7],p=(p=(p=63&u[8])<<8|u[9])<<5|u[10]>>>3),d+1e4>l&&null===h?++p>524287&&(p=0,++f>4095&&(f=0,l++)):l=d,a=f,s=p,c[r++]=l/1099511627776&255,c[r++]=l/4294967296&255,c[r++]=l/16777216&255,c[r++]=l/65536&255,c[r++]=l/256&255,c[r++]=255&l,c[r++]=f>>>4&15|112,c[r++]=255&f,c[r++]=p>>>13&63|128,c[r++]=p>>>5&255,c[r++]=p<<3&255|7&u[10],c[r++]=u[11],c[r++]=u[12],c[r++]=u[13],c[r++]=u[14],c[r++]=u[15],t||(0,o.unsafeStringify)(c)}},37037:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(27656))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&i.default.test(e)}},7775:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(37037))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,i.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},34655:(e,t)=>{"use strict";function n(e,t,n){var r=n[n.length-1];e===r.element&&(n.pop(),r=n[n.length-1]);var i=r.element,o=r.index;Array.isArray(i)?i.push(e):o===t.length-2?i[t.pop()]=e:t.push(e)}t.stringify=function(e){var t=[];t.push({obj:e});for(var n,r,i,o,s,a,l,c,u,d,h="";n=t.pop();)if(r=n.obj,h+=n.prefix||"",i=n.val||"")h+=i;else if("object"!=typeof r)h+=void 0===r?null:JSON.stringify(r);else if(null===r)h+="null";else if(Array.isArray(r)){for(t.push({val:"]"}),o=r.length-1;o>=0;o--)s=0===o?"":",",t.push({obj:r[o],prefix:s});t.push({val:"["})}else{for(l in a=[],r)r.hasOwnProperty(l)&&a.push(l);for(t.push({val:"}"}),o=a.length-1;o>=0;o--)u=r[c=a[o]],d=o>0?",":"",d+=JSON.stringify(c)+":",t.push({obj:u,prefix:d});t.push({val:"{"})}return h},t.parse=function(e){for(var t,r,i,o,s,a,l,c,u,d=[],h=[],f=0;;)if("}"!==(t=e[f++])&&"]"!==t&&void 0!==t)switch(t){case" ":case"\t":case"\n":case":":case",":break;case"n":f+=3,n(null,d,h);break;case"t":f+=3,n(!0,d,h);break;case"f":f+=4,n(!1,d,h);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"-":for(r="",f--;;){if(i=e[f++],!/[\d\.\-e\+]/.test(i)){f--;break}r+=i}n(parseFloat(r),d,h);break;case'"':for(o="",s=void 0,a=0;'"'!==(l=e[f++])||"\\"===s&&a%2==1;)o+=l,"\\"===(s=l)?a++:a=0;n(JSON.parse('"'+o+'"'),d,h);break;case"[":c={element:[],index:d.length},d.push(c.element),h.push(c);break;case"{":u={element:{},index:d.length},d.push(u.element),h.push(u);break;default:throw new Error("unexpectedly reached end of input: "+t)}else{if(1===d.length)return d.pop();n(d.pop(),d,h)}}},26113:e=>{"use strict";const t=()=>window,n=()=>window.document,r=(e,t)=>window.setTimeout(e,t),i=function(e,t,n,r){e.addEventListener(t,n,!!r)},o=function(e,t,n,r){e.removeEventListener(t,n,!!r)},s=function(e,t){return-1!==(" "+e.className+" ").indexOf(" "+t+" ")},a=function(e,t){s(e,t)||(e.className=""===e.className?t:e.className+" "+t)},l=function(e,t){var n;e.className=(n=(" "+e.className+" ").replace(" "+t+" "," ")).trim?n.trim():n.replace(/^\s+|\s+$/g,"")},c=function(e){return/Array/.test(Object.prototype.toString.call(e))},u=function(e){return/Date/.test(Object.prototype.toString.call(e))&&!isNaN(e.getTime())},d=function(e){let t=e.getDay();return 0===t||6===t},h=function(e){return e%4==0&&e%100!=0||e%400==0},f=function(e,t){return[31,h(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},p=function(e){u(e)&&e.setHours(0,0,0,0)},m=function(e,t){return e.getTime()===t.getTime()},g=function(e,t,n){let r,i;for(r in t)i=void 0!==e[r],i&&"object"==typeof t[r]&&null!==t[r]&&void 0===t[r].nodeName?u(t[r])?n&&(e[r]=new Date(t[r].getTime())):c(t[r])?n&&(e[r]=t[r].slice(0)):e[r]=g({},t[r],n):!n&&i||(e[r]=t[r]);return e},y=function(e,t,r){let i=n().createEvent("HTMLEvents");i.initEvent(t,!0,!1),i=g(i,r),e.dispatchEvent(i)},b=function(e){return e.month<0&&(e.year-=Math.ceil(Math.abs(e.month)/12),e.month+=12),e.month>11&&(e.year+=Math.floor(Math.abs(e.month)/12),e.month-=12),e},_={field:null,bound:void 0,ariaLabel:"Use the arrow keys to pick a date",position:"bottom left",reposition:!0,format:"YYYY-MM-DD",toString:null,parse:null,defaultDate:null,setDefaultDate:!1,firstDay:0,firstWeekOfYearMinDays:4,formatStrict:!1,minDate:null,maxDate:null,yearRange:10,showWeekNumber:!1,pickWholeWeek:!1,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,yearSuffix:"",showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,enableSelectionDaysInNextAndPreviousMonths:!1,numberOfMonths:1,mainCalendar:"left",container:void 0,blurFieldOnSelect:!0,i18n:{previousMonth:"Previous Month",nextMonth:"Next Month",months:["January","February","March","April","May","June","July","August","September","October","November","December"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},theme:null,events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:!0},v=function(e,t,n){for(t+=e.firstDay;t>=7;)t-=7;return n?e.i18n.weekdaysShort[t]:e.i18n.weekdays[t]},w=function(e){let t=[],n="false";if(e.isEmpty){if(!e.showDaysInNextAndPreviousMonths)return'';t.push("is-outside-current-month"),e.enableSelectionDaysInNextAndPreviousMonths||t.push("is-selection-disabled")}return e.isDisabled&&t.push("is-disabled"),e.isToday&&t.push("is-today"),e.isSelected&&(t.push("is-selected"),n="true"),e.hasEvent&&t.push("has-event"),e.isInRange&&t.push("is-inrange"),e.isStartRange&&t.push("is-startrange"),e.isEndRange&&t.push("is-endrange"),'"},x=function(e,t,n,r,i){let o=new Date(r,n,t),s=e.hasMoment?e.moment(o).isoWeek():function(e,t){e.setHours(0,0,0,0);let n=e.getDate(),r=e.getDay(),i=t,o=i-1,s=function(e){return(e+7-1)%7};e.setDate(n+o-s(r));let a=new Date(e.getFullYear(),0,i),l=(e.getTime()-a.getTime())/864e5;return 1+Math.round((l-o+s(a.getDay()))/7)}(o,i);return''+s+""},S=function(e,t,n,r){return''+(t?e.reverse():e).join("")+""},C=function(e,t,n,r,i,o){let s,a,l,u,d,h=e._o,f=n===h.minYear,p=n===h.maxYear,m='
',g=!0,y=!0;for(l=[],s=0;s<12;s++)l.push('");for(u='
'+h.i18n.months[r]+'
",c(h.yearRange)?(s=h.yearRange[0],a=h.yearRange[1]+1):(s=n-h.yearRange,a=1+n+h.yearRange),l=[];s=h.minYear&&l.push('");return d='
'+n+h.yearSuffix+'
",h.showMonthAfterYear?m+=d+u:m+=u+d,f&&(0===r||h.minMonth>=r)&&(g=!1),p&&(11===r||h.maxMonth<=r)&&(y=!1),0===t&&(m+='"),t===e._o.numberOfMonths-1&&(m+='"),m+"
"};function M(e){let o=this,a=o.config(e);o._onMouseDown=function(e){if(!o._v)return;let n=(e=e||t().event).target||e.srcElement;if(n)if(s(n,"is-disabled")||(!s(n,"pika-button")||s(n,"is-empty")||s(n.parentNode,"is-disabled")?s(n,"pika-prev")?o.prevMonth():s(n,"pika-next")&&o.nextMonth():(o.setDate(new Date(n.getAttribute("data-pika-year"),n.getAttribute("data-pika-month"),n.getAttribute("data-pika-day"))),a.bound&&r((function(){o.hide(),a.blurFieldOnSelect&&a.field&&a.field.blur()}),100))),s(n,"pika-select"))o._c=!0;else{if(!e.preventDefault)return e.returnValue=!1,!1;e.preventDefault()}},o._onChange=function(e){let n=(e=e||t().event).target||e.srcElement;n&&(s(n,"pika-select-month")?o.gotoMonth(n.value):s(n,"pika-select-year")&&o.gotoYear(n.value))},o._onKeyChange=function(e){if(e=e||t().event,o.isVisible())switch(e.keyCode){case 13:case 27:a.field&&a.field.blur();break;case 37:o.adjustDate("subtract",1);break;case 38:o.adjustDate("subtract",7);break;case 39:o.adjustDate("add",1);break;case 40:o.adjustDate("add",7);break;case 8:case 46:o.setDate(null)}},o._parseFieldValue=function(){if(a.parse)return a.parse(a.field.value,a.format);if(this.hasMoment){let e=this.moment(a.field.value,a.format,a.formatStrict);return e&&e.isValid()?e.toDate():null}return new Date(Date.parse(a.field.value))},o._onInputChange=function(e){let t;e.firedBy!==o&&(t=o._parseFieldValue(),u(t)&&o.setDate(t),o._v||o.show())},o._onInputFocus=function(){o.show()},o._onInputClick=function(){o.show()},o._onInputBlur=function(){let e=n().activeElement;do{if(s(e,"pika-single"))return}while(e=e.parentNode);o._c||(o._b=r((function(){o.hide()}),50)),o._c=!1},o._onClick=function(e){let n=(e=e||t().event).target||e.srcElement,r=n;if(n){!hasEventListeners&&s(n,"pika-select")&&(n.onchange||(n.setAttribute("onchange","return;"),i(n,"change",o._onChange)));do{if(s(r,"pika-single")||r===a.trigger)return}while(r=r.parentNode);o._v&&n!==a.trigger&&r!==a.trigger&&o.hide()}},o.el=n().createElement("div"),o.el.className="pika-single"+(a.isRTL?" is-rtl":"")+(a.theme?" "+a.theme:""),i(o.el,"mousedown",o._onMouseDown,!0),i(o.el,"touchend",o._onMouseDown,!0),i(o.el,"change",o._onChange),a.keyboardInput&&i(n(),"keydown",o._onKeyChange),a.field&&(a.container?a.container.appendChild(o.el):a.bound?n().body.appendChild(o.el):a.field.parentNode.insertBefore(o.el,a.field.nextSibling),i(a.field,"change",o._onInputChange),a.defaultDate||(a.defaultDate=o._parseFieldValue(),a.setDefaultDate=!0));let l=a.defaultDate;u(l)?a.setDefaultDate?o.setDate(l,!0):o.gotoDate(l):o.gotoDate(new Date),a.bound?(this.hide(),o.el.className+=" is-bound",i(a.trigger,"click",o._onInputClick),i(a.trigger,"focus",o._onInputFocus),i(a.trigger,"blur",o._onInputBlur)):this.show()}M.prototype={config:function(e){this._o||(this._o=g({},_,!0));let t=g(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.theme="string"==typeof t.theme&&t.theme?t.theme:null,t.bound=!!(void 0!==t.bound?t.field&&t.bound:t.field),t.trigger=t.trigger&&t.trigger.nodeName?t.trigger:t.field,t.disableWeekends=!!t.disableWeekends,t.disableDayFn="function"==typeof t.disableDayFn?t.disableDayFn:null;let n=parseInt(t.numberOfMonths,10)||1;if(t.numberOfMonths=n>4?4:n,u(t.minDate)||(t.minDate=!1),u(t.maxDate)||(t.maxDate=!1),t.minDate&&t.maxDate&&t.maxDate100&&(t.yearRange=100);return t},toString:function(e){return e=e||this._o.format,u(this._d)?this._o.toString?this._o.toString(this._d,e):this.hasMoment?this.moment(this._d).format(e):this._d.toDateString():""},getMoment:function(){return this.hasMoment?this.moment(this._d):null},setMoment:function(e,t){this.hasMoment&&this.moment.isMoment(e)&&this.setDate(e.toDate(),t)},useMoment:function(e){this.hasMoment=!0,this.moment=e},getDate:function(){return u(this._d)?new Date(this._d.getTime()):null},setDate:function(e,t){if(!e)return this._d=null,this._o.field&&(this._o.field.value="",y(this._o.field,"change",{firedBy:this})),this.draw();if("string"==typeof e&&(e=new Date(Date.parse(e))),!u(e))return;let n=this._o.minDate,r=this._o.maxDate;u(n)&&er&&(e=r),this._d=new Date(e.getTime()),p(this._d),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString(),y(this._o.field,"change",{firedBy:this})),t||"function"!=typeof this._o.onSelect||this._o.onSelect.call(this,this.getDate())},clear:function(){this.setDate(null)},gotoDate:function(e){let t=!0;if(u(e)){if(this.calendars){let n=new Date(this.calendars[0].year,this.calendars[0].month,1),r=new Date(this.calendars[this.calendars.length-1].year,this.calendars[this.calendars.length-1].month,1),i=e.getTime();r.setMonth(r.getMonth()+1),r.setDate(r.getDate()-1),t=i=o&&(this._y=o,!isNaN(a)&&this._m>a&&(this._m=a));for(let e=0;e";this.el.innerHTML=l,n.bound&&"hidden"!==n.field.type&&r((function(){n.trigger.focus()}),1),"function"==typeof this._o.onDraw&&this._o.onDraw(this),n.bound&&n.field.setAttribute("aria-label",n.ariaLabel)},adjustPosition:function(){let e,r,i,o,s,c,u,d,h,f,p;this._o.container||(this.el.style.position="absolute",e=this._o.trigger,r=this.el.offsetWidth,i=this.el.offsetHeight,o=t().innerWidth||n().documentElement.clientWidth,s=t().innerHeight||n().documentElement.clientHeight,c=n().body.scrollTop||n().documentElement.scrollTop,f=!0,p=!0,h=e.getBoundingClientRect(),u=h.left+t().pageXOffset,d=h.bottom+t().pageYOffset,(this._o.reposition&&u+r>o||this._o.position.indexOf("right")>-1&&u-r+e.offsetWidth>0)&&(u=u-r+e.offsetWidth,f=!1),(this._o.reposition&&d+i>s+c||this._o.position.indexOf("top")>-1&&d-i-e.offsetHeight>0)&&(d=d-i-e.offsetHeight,p=!1),u<0&&(u=0),d<0&&(d=0),this.el.style.left=u+"px",this.el.style.top=d+"px",a(this.el,f?"left-aligned":"right-aligned"),a(this.el,p?"bottom-aligned":"top-aligned"),l(this.el,f?"right-aligned":"left-aligned"),l(this.el,p?"top-aligned":"bottom-aligned"))},render:function(e,t,n){let r=this._o,i=new Date,o=f(e,t),s=new Date(e,t,1).getDay(),a=[],l=[];p(i),r.firstDay>0&&(s-=r.firstDay,s<0&&(s+=7));let c=0===t?11:t-1,h=11===t?0:t+1,g=0===t?e-1:e,y=11===t?e+1:e,b=f(g,c),_=o+s,C=_;for(;C>7;)C-=7;_+=7-C;let M=!1;for(let n=0,f=0;n<_;n++){let p=new Date(e,t,n-s+1),_=!!u(this._d)&&m(p,this._d),v=m(p,i),C=-1!==r.events.indexOf(p.toDateString()),T=n=o+s,E=n-s+1,D=t,k=e,R=r.startRange&&m(r.startRange,p),O=r.endRange&&m(r.endRange,p),L=r.startRange&&r.endRange&&r.startRanger.maxDate||r.disableWeekends&&d(p)||r.disableDayFn&&r.disableDayFn(p),isEmpty:T,isStartRange:R,isEndRange:O,isInRange:L,showDaysInNextAndPreviousMonths:r.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:r.enableSelectionDaysInNextAndPreviousMonths};r.pickWholeWeek&&_&&(M=!0),l.push(w(A)),7==++f&&(r.showWeekNumber&&l.unshift(x(this,n-s,t,e,r.firstWeekOfYearMinDays)),a.push(S(l,r.isRTL,r.pickWholeWeek,M)),l=[],f=0,M=!1)}return function(e,t,n){return''+function(e){let t,n=[];for(e.showWeekNumber&&n.push(""),t=0;t<7;t++)n.push('");return""+(e.isRTL?n.reverse():n).join("")+""}(e)+""+t.join("")+"
'+v(e,t,!0)+"
"}(r,a,n)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),l(this.el,"is-hidden"),this._o.bound&&(i(n(),"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){let e=this._v;!1!==e&&(this._o.bound&&o(n(),"click",this._onClick),this._o.container||(this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto"),a(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){let e=this._o;this.hide(),o(this.el,"mousedown",this._onMouseDown,!0),o(this.el,"touchend",this._onMouseDown,!0),o(this.el,"change",this._onChange),e.keyboardInput&&o(n(),"keydown",this._onKeyChange),e.field&&(o(e.field,"change",this._onInputChange),e.bound&&(o(e.trigger,"click",this._onInputClick),o(e.trigger,"focus",this._onInputFocus),o(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},e.exports=M},79306:(e,t,n)=>{"use strict";var r=n(94901),i=n(16823),o=TypeError;e.exports=function(e){if(r(e))return e;throw new o(i(e)+" is not a function")}},73506:(e,t,n)=>{"use strict";var r=n(13925),i=String,o=TypeError;e.exports=function(e){if(r(e))return e;throw new o("Can't set "+i(e)+" as a prototype")}},97080:(e,t,n)=>{"use strict";var r=n(94402).has;e.exports=function(e){return r(e),e}},6469:(e,t,n)=>{"use strict";var r=n(78227),i=n(2360),o=n(24913).f,s=r("unscopables"),a=Array.prototype;void 0===a[s]&&o(a,s,{configurable:!0,value:i(null)}),e.exports=function(e){a[s][e]=!0}},28551:(e,t,n)=>{"use strict";var r=n(20034),i=String,o=TypeError;e.exports=function(e){if(r(e))return e;throw new o(i(e)+" is not an object")}},19617:(e,t,n)=>{"use strict";var r=n(25397),i=n(35610),o=n(26198),s=function(e){return function(t,n,s){var a=r(t),l=o(a);if(0===l)return!e&&-1;var c,u=i(s,l);if(e&&n!=n){for(;l>u;)if((c=a[u++])!=c)return!0}else for(;l>u;u++)if((e||u in a)&&a[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},34527:(e,t,n)=>{"use strict";var r=n(43724),i=n(34376),o=TypeError,s=Object.getOwnPropertyDescriptor,a=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(i(e)&&!s(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r([].slice)},44576:(e,t,n)=>{"use strict";var r=n(79504),i=r({}.toString),o=r("".slice);e.exports=function(e){return o(i(e),8,-1)}},36955:(e,t,n)=>{"use strict";var r=n(92140),i=n(94901),o=n(44576),s=n(78227)("toStringTag"),a=Object,l="Arguments"===o(function(){return arguments}());e.exports=r?o:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=a(e),s))?n:l?o(t):"Object"===(r=o(t))&&i(t.callee)?"Arguments":r}},77740:(e,t,n)=>{"use strict";var r=n(39297),i=n(35031),o=n(77347),s=n(24913);e.exports=function(e,t,n){for(var a=i(t),l=s.f,c=o.f,u=0;u{"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:(e,t,n)=>{"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},36840:(e,t,n)=>{"use strict";var r=n(94901),i=n(24913),o=n(50283),s=n(39433);e.exports=function(e,t,n,a){a||(a={});var l=a.enumerable,c=void 0!==a.name?a.name:t;if(r(n)&&o(n,c,a),a.global)l?e[t]=n:s(t,n);else{try{a.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return e}},39433:(e,t,n)=>{"use strict";var r=n(24475),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:(e,t,n)=>{"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4055:(e,t,n)=>{"use strict";var r=n(24475),i=n(20034),o=r.document,s=i(o)&&i(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},96837:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},6763:e=>{"use strict";e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},48119:(e,t,n)=>{"use strict";var r=n(79392);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},19088:(e,t,n)=>{"use strict";var r=n(24475),i=n(44576);e.exports="process"===i(r.process)},79392:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},77388:(e,t,n)=>{"use strict";var r,i,o=n(24475),s=n(79392),a=o.process,l=o.Deno,c=a&&a.versions||l&&l.version,u=c&&c.v8;u&&(i=(r=u.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&s&&(!(r=s.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=s.match(/Chrome\/(\d+)/))&&(i=+r[1]),e.exports=i},88727:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},16193:(e,t,n)=>{"use strict";var r=n(79504),i=Error,o=r("".replace),s=String(new i("zxcasd").stack),a=/\n\s*at [^:]*:[^\n]*/,l=a.test(s);e.exports=function(e,t){if(l&&"string"==typeof e&&!i.prepareStackTrace)for(;t--;)e=o(e,a,"");return e}},80747:(e,t,n)=>{"use strict";var r=n(66699),i=n(16193),o=n(24659),s=Error.captureStackTrace;e.exports=function(e,t,n,a){o&&(s?s(e,t):r(e,"stack",i(n,a)))}},24659:(e,t,n)=>{"use strict";var r=n(79039),i=n(6980);e.exports=!r((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",i(1,7)),7!==e.stack)}))},46518:(e,t,n)=>{"use strict";var r=n(24475),i=n(77347).f,o=n(66699),s=n(36840),a=n(39433),l=n(77740),c=n(92796);e.exports=function(e,t){var n,u,d,h,f,p=e.target,m=e.global,g=e.stat;if(n=m?r:g?r[p]||a(p,{}):r[p]&&r[p].prototype)for(u in t){if(h=t[u],d=e.dontCallGetSet?(f=i(n,u))&&f.value:n[u],!c(m?u:p+(g?".":"#")+u,e.forced)&&void 0!==d){if(typeof h==typeof d)continue;l(h,d)}(e.sham||d&&d.sham)&&o(h,"sham",!0),s(n,u,h,e)}}},79039:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},18745:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype,o=i.apply,s=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?s.bind(o):function(){return s.apply(o,arguments)})},76080:(e,t,n)=>{"use strict";var r=n(27476),i=n(79306),o=n(40616),s=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?s(e,t):function(){return e.apply(t,arguments)}}},40616:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},69565:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype.call;e.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},10350:(e,t,n)=>{"use strict";var r=n(43724),i=n(39297),o=Function.prototype,s=r&&Object.getOwnPropertyDescriptor,a=i(o,"name"),l=a&&"something"===function(){}.name,c=a&&(!r||r&&s(o,"name").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},46706:(e,t,n)=>{"use strict";var r=n(79504),i=n(79306);e.exports=function(e,t,n){try{return r(i(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},27476:(e,t,n)=>{"use strict";var r=n(44576),i=n(79504);e.exports=function(e){if("Function"===r(e))return i(e)}},79504:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype,o=i.call,s=r&&i.bind.bind(o,o);e.exports=r?s:function(e){return function(){return o.apply(e,arguments)}}},97751:(e,t,n)=>{"use strict";var r=n(24475),i=n(94901);e.exports=function(e,t){return arguments.length<2?(n=r[e],i(n)?n:void 0):r[e]&&r[e][t];var n}},1767:e=>{"use strict";e.exports=function(e){return{iterator:e,next:e.next,done:!1}}},50851:(e,t,n)=>{"use strict";var r=n(36955),i=n(55966),o=n(64117),s=n(26269),a=n(78227)("iterator");e.exports=function(e){if(!o(e))return i(e,a)||i(e,"@@iterator")||s[r(e)]}},70081:(e,t,n)=>{"use strict";var r=n(69565),i=n(79306),o=n(28551),s=n(16823),a=n(50851),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?a(e):t;if(i(n))return o(r(n,e));throw new l(s(e)+" is not iterable")}},66933:(e,t,n)=>{"use strict";var r=n(79504),i=n(34376),o=n(94901),s=n(44576),a=n(655),l=r([].push);e.exports=function(e){if(o(e))return e;if(i(e)){for(var t=e.length,n=[],r=0;r{"use strict";var r=n(79306),i=n(64117);e.exports=function(e,t){var n=e[t];return i(n)?void 0:r(n)}},83789:(e,t,n)=>{"use strict";var r=n(79306),i=n(28551),o=n(69565),s=n(91291),a=n(1767),l="Invalid size",c=RangeError,u=TypeError,d=Math.max,h=function(e,t){this.set=e,this.size=d(t,0),this.has=r(e.has),this.keys=r(e.keys)};h.prototype={getIterator:function(){return a(i(o(this.keys,this.set)))},includes:function(e){return o(this.has,this.set,e)}},e.exports=function(e){i(e);var t=+e.size;if(t!=t)throw new u(l);var n=s(t);if(n<0)throw new c(l);return new h(e,n)}},2478:(e,t,n)=>{"use strict";var r=n(79504),i=n(48981),o=Math.floor,s=r("".charAt),a=r("".replace),l=r("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=c),a(h,m,(function(i,a){var c;switch(s(a,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,f);case"<":c=d[l(a,1,-1)];break;default:var u=+a;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?s(a,1):r[h-1]+s(a,1):i}c=r[u-1]}return void 0===c?"":c}))}},24475:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:(e,t,n)=>{"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:e=>{"use strict";e.exports={}},20397:(e,t,n)=>{"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:(e,t,n)=>{"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i((function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},47055:(e,t,n)=>{"use strict";var r=n(79504),i=n(79039),o=n(44576),s=Object,a=r("".split);e.exports=i((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"===o(e)?a(e,""):s(e)}:s},23167:(e,t,n)=>{"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var s,a;return o&&r(s=t.constructor)&&s!==n&&i(a=s.prototype)&&a!==n.prototype&&o(e,a),e}},33706:(e,t,n)=>{"use strict";var r=n(79504),i=n(94901),o=n(77629),s=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return s(e)}),e.exports=o.inspectSource},77584:(e,t,n)=>{"use strict";var r=n(20034),i=n(66699);e.exports=function(e,t){r(t)&&"cause"in t&&i(e,"cause",t.cause)}},91181:(e,t,n)=>{"use strict";var r,i,o,s=n(58622),a=n(24475),l=n(20034),c=n(66699),u=n(39297),d=n(77629),h=n(66119),f=n(30421),p="Object already initialized",m=a.TypeError,g=a.WeakMap;if(s||d.state){var y=d.state||(d.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw new m(p);return t.facade=e,y.set(e,t),t},i=function(e){return y.get(e)||{}},o=function(e){return y.has(e)}}else{var b=h("state");f[b]=!0,r=function(e,t){if(u(e,b))throw new m(p);return t.facade=e,c(e,b,t),t},i=function(e){return u(e,b)?e[b]:{}},o=function(e){return u(e,b)}}e.exports={set:r,get:i,has:o,enforce:function(e){return o(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=i(t)).type!==e)throw new m("Incompatible receiver, "+e+" required");return n}}}},44209:(e,t,n)=>{"use strict";var r=n(78227),i=n(26269),o=r("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||s[o]===e)}},34376:(e,t,n)=>{"use strict";var r=n(44576);e.exports=Array.isArray||function(e){return"Array"===r(e)}},94901:e=>{"use strict";var t="object"==typeof document&&document.all;e.exports=void 0===t&&void 0!==t?function(e){return"function"==typeof e||e===t}:function(e){return"function"==typeof e}},92796:(e,t,n)=>{"use strict";var r=n(79039),i=n(94901),o=/#|\.prototype\./,s=function(e,t){var n=l[a(e)];return n===u||n!==c&&(i(t)?r(t):!!t)},a=s.normalize=function(e){return String(e).replace(o,".").toLowerCase()},l=s.data={},c=s.NATIVE="N",u=s.POLYFILL="P";e.exports=s},64117:e=>{"use strict";e.exports=function(e){return null==e}},20034:(e,t,n)=>{"use strict";var r=n(94901);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},13925:(e,t,n)=>{"use strict";var r=n(20034);e.exports=function(e){return r(e)||null===e}},96395:e=>{"use strict";e.exports=!1},60788:(e,t,n)=>{"use strict";var r=n(20034),i=n(44576),o=n(78227)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[o])?!!t:"RegExp"===i(e))}},10757:(e,t,n)=>{"use strict";var r=n(97751),i=n(94901),o=n(1625),s=n(7040),a=Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return i(t)&&o(t.prototype,a(e))}},40507:(e,t,n)=>{"use strict";var r=n(69565);e.exports=function(e,t,n){for(var i,o,s=n?e:e.iterator,a=e.next;!(i=r(a,s)).done;)if(void 0!==(o=t(i.value)))return o}},72652:(e,t,n)=>{"use strict";var r=n(76080),i=n(69565),o=n(28551),s=n(16823),a=n(44209),l=n(26198),c=n(1625),u=n(70081),d=n(50851),h=n(9539),f=TypeError,p=function(e,t){this.stopped=e,this.result=t},m=p.prototype;e.exports=function(e,t,n){var g,y,b,_,v,w,x,S=n&&n.that,C=!(!n||!n.AS_ENTRIES),M=!(!n||!n.IS_RECORD),T=!(!n||!n.IS_ITERATOR),E=!(!n||!n.INTERRUPTED),D=r(t,S),k=function(e){return g&&h(g,"normal",e),new p(!0,e)},R=function(e){return C?(o(e),E?D(e[0],e[1],k):D(e[0],e[1])):E?D(e,k):D(e)};if(M)g=e.iterator;else if(T)g=e;else{if(!(y=d(e)))throw new f(s(e)+" is not iterable");if(a(y)){for(b=0,_=l(e);_>b;b++)if((v=R(e[b]))&&c(m,v))return v;return new p(!1)}g=u(e,y)}for(w=M?e.next:g.next;!(x=i(w,g)).done;){try{v=R(x.value)}catch(e){h(g,"throw",e)}if("object"==typeof v&&v&&c(m,v))return v}return new p(!1)}},9539:(e,t,n)=>{"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var s,a;i(e);try{if(!(s=o(e,"return"))){if("throw"===t)throw n;return n}s=r(s,e)}catch(e){a=!0,s=e}if("throw"===t)throw n;if(a)throw s;return i(s),n}},26269:e=>{"use strict";e.exports={}},26198:(e,t,n)=>{"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:(e,t,n)=>{"use strict";var r=n(79504),i=n(79039),o=n(94901),s=n(39297),a=n(43724),l=n(10350).CONFIGURABLE,c=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),g=r("".replace),y=r([].join),b=a&&!i((function(){return 8!==p((function(){}),"length",{value:8}).length})),_=String(String).split("String"),v=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+g(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!s(e,"name")||l&&e.name!==t)&&(a?p(e,"name",{value:t,configurable:!0}):e.name=t),b&&n&&s(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&s(n,"constructor")&&n.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var r=d(e);return s(r,"source")||(r.source=y(_,"string"==typeof t?t:"")),e};Function.prototype.toString=v((function(){return o(this)&&h(this).source||c(this)}),"toString")},80741:e=>{"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},32603:(e,t,n)=>{"use strict";var r=n(655);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},2360:(e,t,n)=>{"use strict";var r,i=n(28551),o=n(96801),s=n(88727),a=n(30421),l=n(20397),c=n(4055),u=n(66119),d="prototype",h="script",f=u("IE_PROTO"),p=function(){},m=function(e){return"<"+h+">"+e+""},g=function(e){e.write(m("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;y="undefined"!=typeof document?document.domain&&r?g(r):(t=c("iframe"),n="java"+h+":",t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m("document.F=Object")),e.close(),e.F):g(r);for(var i=s.length;i--;)delete y[d][s[i]];return y()};a[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p[d]=i(e),n=new p,p[d]=null,n[f]=e):n=y(),void 0===t?n:o.f(n,t)}},96801:(e,t,n)=>{"use strict";var r=n(43724),i=n(48686),o=n(24913),s=n(28551),a=n(25397),l=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){s(e);for(var n,r=a(t),i=l(t),c=i.length,u=0;c>u;)o.f(e,n=i[u++],r[n]);return e}},24913:(e,t,n)=>{"use strict";var r=n(43724),i=n(35917),o=n(48686),s=n(28551),a=n(56969),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(s(e),t=a(t),s(n),"function"==typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return c(e,t,n)}:c:function(e,t,n){if(s(e),t=a(t),s(n),i)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw new l("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:(e,t,n)=>{"use strict";var r=n(43724),i=n(69565),o=n(48773),s=n(6980),a=n(25397),l=n(56969),c=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=a(e),t=l(t),u)try{return d(e,t)}catch(e){}if(c(e,t))return s(!i(o.f,e,t),e[t])}},38480:(e,t,n)=>{"use strict";var r=n(61828),i=n(88727).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},33717:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},1625:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:(e,t,n)=>{"use strict";var r=n(79504),i=n(39297),o=n(25397),s=n(19617).indexOf,a=n(30421),l=r([].push);e.exports=function(e,t){var n,r=o(e),c=0,u=[];for(n in r)!i(a,n)&&i(r,n)&&l(u,n);for(;t.length>c;)i(r,n=t[c++])&&(~s(u,n)||l(u,n));return u}},71072:(e,t,n)=>{"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},52967:(e,t,n)=>{"use strict";var r=n(46706),i=n(20034),o=n(67750),s=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),s(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},84270:(e,t,n)=>{"use strict";var r=n(69565),i=n(94901),o=n(20034),s=TypeError;e.exports=function(e,t){var n,a;if("string"===t&&i(n=e.toString)&&!o(a=r(n,e)))return a;if(i(n=e.valueOf)&&!o(a=r(n,e)))return a;if("string"!==t&&i(n=e.toString)&&!o(a=r(n,e)))return a;throw new s("Can't convert object to primitive value")}},35031:(e,t,n)=>{"use strict";var r=n(97751),i=n(79504),o=n(38480),s=n(33717),a=n(28551),l=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=s.f;return n?l(t,n(e)):t}},11056:(e,t,n)=>{"use strict";var r=n(24913).f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},67979:(e,t,n)=>{"use strict";var r=n(28551);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},61034:(e,t,n)=>{"use strict";var r=n(69565),i=n(39297),o=n(1625),s=n(67979),a=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in a||i(e,"flags")||!o(a,e)?t:r(s,e)}},67750:(e,t,n)=>{"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},79472:(e,t,n)=>{"use strict";var r,i=n(24475),o=n(18745),s=n(94901),a=n(6763),l=n(79392),c=n(67680),u=n(22812),d=i.Function,h=/MSIE .\./.test(l)||a&&((r=i.Bun.version.split(".")).length<3||"0"===r[0]&&(r[1]<3||"3"===r[1]&&"0"===r[2]));e.exports=function(e,t){var n=t?2:1;return h?function(r,i){var a=u(arguments.length,1)>n,l=s(r)?r:d(r),h=a?c(arguments,n):[],f=a?function(){o(l,this,h)}:l;return t?e(f,i):e(f)}:e}},89286:(e,t,n)=>{"use strict";var r=n(94402),i=n(38469),o=r.Set,s=r.add;e.exports=function(e){var t=new o;return i(e,(function(e){s(t,e)})),t}},83440:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(89286),s=n(25170),a=n(83789),l=n(38469),c=n(40507),u=i.has,d=i.remove;e.exports=function(e){var t=r(this),n=a(e),i=o(t);return s(t)<=n.size?l(t,(function(e){n.includes(e)&&d(i,e)})):c(n.getIterator(),(function(e){u(t,e)&&d(i,e)})),i}},94402:(e,t,n)=>{"use strict";var r=n(79504),i=Set.prototype;e.exports={Set,add:r(i.add),has:r(i.has),remove:r(i.delete),proto:i}},68750:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(25170),s=n(83789),a=n(38469),l=n(40507),c=i.Set,u=i.add,d=i.has;e.exports=function(e){var t=r(this),n=s(e),i=new c;return o(t)>n.size?l(n.getIterator(),(function(e){d(t,e)&&u(i,e)})):a(t,(function(e){n.includes(e)&&u(i,e)})),i}},64449:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).has,o=n(25170),s=n(83789),a=n(38469),l=n(40507),c=n(9539);e.exports=function(e){var t=r(this),n=s(e);if(o(t)<=n.size)return!1!==a(t,(function(e){if(n.includes(e))return!1}),!0);var u=n.getIterator();return!1!==l(u,(function(e){if(i(t,e))return c(u,"normal",!1)}))}},53838:(e,t,n)=>{"use strict";var r=n(97080),i=n(25170),o=n(38469),s=n(83789);e.exports=function(e){var t=r(this),n=s(e);return!(i(t)>n.size)&&!1!==o(t,(function(e){if(!n.includes(e))return!1}),!0)}},28527:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).has,o=n(25170),s=n(83789),a=n(40507),l=n(9539);e.exports=function(e){var t=r(this),n=s(e);if(o(t){"use strict";var r=n(79504),i=n(40507),o=n(94402),s=o.Set,a=o.proto,l=r(a.forEach),c=r(a.keys),u=c(new s).next;e.exports=function(e,t,n){return n?i({iterator:c(e),next:u},t):l(e,t)}},84916:(e,t,n)=>{"use strict";var r=n(97751),i=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}};e.exports=function(e){var t=r("Set");try{(new t)[e](i(0));try{return(new t)[e](i(-1)),!1}catch(e){return!0}}catch(e){return!1}}},25170:(e,t,n)=>{"use strict";var r=n(46706),i=n(94402);e.exports=r(i.proto,"size","get")||function(e){return e.size}},83650:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(89286),s=n(83789),a=n(40507),l=i.add,c=i.has,u=i.remove;e.exports=function(e){var t=r(this),n=s(e).getIterator(),i=o(t);return a(n,(function(e){c(t,e)?u(i,e):l(i,e)})),i}},44204:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).add,o=n(89286),s=n(83789),a=n(40507);e.exports=function(e){var t=r(this),n=s(e).getIterator(),l=o(t);return a(n,(function(e){i(l,e)})),l}},66119:(e,t,n)=>{"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:(e,t,n)=>{"use strict";var r=n(96395),i=n(24475),o=n(39433),s="__core-js_shared__",a=e.exports=i[s]||o(s,{});(a.versions||(a.versions=[])).push({version:"3.37.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:(e,t,n)=>{"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},4495:(e,t,n)=>{"use strict";var r=n(77388),i=n(79039),o=n(24475).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol("symbol detection");return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},59225:(e,t,n)=>{"use strict";var r,i,o,s,a=n(24475),l=n(18745),c=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),g=n(22812),y=n(48119),b=n(19088),_=a.setImmediate,v=a.clearImmediate,w=a.process,x=a.Dispatch,S=a.Function,C=a.MessageChannel,M=a.String,T=0,E={},D="onreadystatechange";h((function(){r=a.location}));var k=function(e){if(d(E,e)){var t=E[e];delete E[e],t()}},R=function(e){return function(){k(e)}},O=function(e){k(e.data)},L=function(e){a.postMessage(M(e),r.protocol+"//"+r.host)};_&&v||(_=function(e){g(arguments.length,1);var t=u(e)?e:S(e),n=p(arguments,1);return E[++T]=function(){l(t,void 0,n)},i(T),T},v=function(e){delete E[e]},b?i=function(e){w.nextTick(R(e))}:x&&x.now?i=function(e){x.now(R(e))}:C&&!y?(s=(o=new C).port2,o.port1.onmessage=O,i=c(s.postMessage,s)):a.addEventListener&&u(a.postMessage)&&!a.importScripts&&r&&"file:"!==r.protocol&&!h(L)?(i=L,a.addEventListener("message",O,!1)):i=D in m("script")?function(e){f.appendChild(m("script"))[D]=function(){f.removeChild(this),k(e)}}:function(e){setTimeout(R(e),0)}),e.exports={set:_,clear:v}},35610:(e,t,n)=>{"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},25397:(e,t,n)=>{"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:(e,t,n)=>{"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},18014:(e,t,n)=>{"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:(e,t,n)=>{"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},72777:(e,t,n)=>{"use strict";var r=n(69565),i=n(20034),o=n(10757),s=n(55966),a=n(84270),l=n(78227),c=TypeError,u=l("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,l=s(e,u);if(l){if(void 0===t&&(t="default"),n=r(l,e,t),!i(n)||o(n))return n;throw new c("Can't convert object to primitive value")}return void 0===t&&(t="number"),a(e,t)}},56969:(e,t,n)=>{"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:(e,t,n)=>{"use strict";var r={};r[n(78227)("toStringTag")]="z",e.exports="[object z]"===String(r)},655:(e,t,n)=>{"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},16823:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},33392:(e,t,n)=>{"use strict";var r=n(79504),i=0,o=Math.random(),s=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+s(++i+o,36)}},7040:(e,t,n)=>{"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:(e,t,n)=>{"use strict";var r=n(43724),i=n(79039);e.exports=r&&i((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},22812:e=>{"use strict";var t=TypeError;e.exports=function(e,n){if(e{"use strict";var r=n(24475),i=n(94901),o=r.WeakMap;e.exports=i(o)&&/native code/.test(String(o))},78227:(e,t,n)=>{"use strict";var r=n(24475),i=n(25745),o=n(39297),s=n(33392),a=n(4495),l=n(7040),c=r.Symbol,u=i("wks"),d=l?c.for||c:c&&c.withoutSetter||s;e.exports=function(e){return o(u,e)||(u[e]=a&&o(c,e)?c[e]:d("Symbol."+e)),u[e]}},14601:(e,t,n)=>{"use strict";var r=n(97751),i=n(39297),o=n(66699),s=n(1625),a=n(52967),l=n(77740),c=n(11056),u=n(23167),d=n(32603),h=n(77584),f=n(80747),p=n(43724),m=n(96395);e.exports=function(e,t,n,g){var y="stackTraceLimit",b=g?2:1,_=e.split("."),v=_[_.length-1],w=r.apply(null,_);if(w){var x=w.prototype;if(!m&&i(x,"cause")&&delete x.cause,!n)return w;var S=r("Error"),C=t((function(e,t){var n=d(g?t:e,void 0),r=g?new w(e):new w;return void 0!==n&&o(r,"message",n),f(r,C,r.stack,2),this&&s(x,this)&&u(r,this,C),arguments.length>b&&h(r,arguments[b]),r}));if(C.prototype=x,"Error"!==v?a?a(C,S):l(C,S,{name:!0}):p&&y in w&&(c(C,w,y),c(C,w,"prepareStackTrace")),l(C,w),!m)try{x.name!==v&&o(x,"name",v),x.constructor=C}catch(e){}return C}}},18107:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(91291),a=n(6469);r({target:"Array",proto:!0},{at:function(e){var t=i(this),n=o(t),r=s(e),a=r>=0?r:n+r;return a<0||a>=n?void 0:t[a]}}),a("at")},44114:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(34527),a=n(96837);r({target:"Array",proto:!0,arity:1,forced:n(79039)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=i(this),n=o(t),r=arguments.length;a(n+r);for(var l=0;l{"use strict";n(6469)("flatMap")},93514:(e,t,n)=>{"use strict";n(6469)("flat")},13609:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(34527),a=n(84606),l=n(96837);r({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}}()},{unshift:function(e){var t=i(this),n=o(t),r=arguments.length;if(r){l(n+r);for(var c=n;c--;){var u=c+r;c in t?t[u]=t[c]:a(t,u)}for(var d=0;d{"use strict";var r=n(46518),i=n(24475),o=n(18745),s=n(14601),a="WebAssembly",l=i[a],c=7!==new Error("e",{cause:7}).cause,u=function(e,t){var n={};n[e]=s(e,t,c),r({global:!0,constructor:!0,arity:1,forced:c},n)},d=function(e,t){if(l&&l[e]){var n={};n[e]=s(a+"."+e,t,c),r({target:a,stat:!0,constructor:!0,arity:1,forced:c},n)}};u("Error",(function(e){return function(t){return o(e,this,arguments)}})),u("EvalError",(function(e){return function(t){return o(e,this,arguments)}})),u("RangeError",(function(e){return function(t){return o(e,this,arguments)}})),u("ReferenceError",(function(e){return function(t){return o(e,this,arguments)}})),u("SyntaxError",(function(e){return function(t){return o(e,this,arguments)}})),u("TypeError",(function(e){return function(t){return o(e,this,arguments)}})),u("URIError",(function(e){return function(t){return o(e,this,arguments)}})),d("CompileError",(function(e){return function(t){return o(e,this,arguments)}})),d("LinkError",(function(e){return function(t){return o(e,this,arguments)}})),d("RuntimeError",(function(e){return function(t){return o(e,this,arguments)}}))},33110:(e,t,n)=>{"use strict";var r=n(46518),i=n(97751),o=n(18745),s=n(69565),a=n(79504),l=n(79039),c=n(94901),u=n(10757),d=n(67680),h=n(66933),f=n(4495),p=String,m=i("JSON","stringify"),g=a(/./.exec),y=a("".charAt),b=a("".charCodeAt),_=a("".replace),v=a(1..toString),w=/[\uD800-\uDFFF]/g,x=/^[\uD800-\uDBFF]$/,S=/^[\uDC00-\uDFFF]$/,C=!f||l((function(){var e=i("Symbol")("stringify detection");return"[null]"!==m([e])||"{}"!==m({a:e})||"{}"!==m(Object(e))})),M=l((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),T=function(e,t){var n=d(arguments),r=h(t);if(c(r)||void 0!==e&&!u(e))return n[1]=function(e,t){if(c(r)&&(t=s(r,this,p(e),t)),!u(t))return t},o(m,null,n)},E=function(e,t,n){var r=y(n,t-1),i=y(n,t+1);return g(x,e)&&!g(S,i)||g(S,e)&&!g(x,r)?"\\u"+v(b(e,0),16):e};m&&r({target:"JSON",stat:!0,arity:3,forced:C||M},{stringify:function(e,t,n){var r=d(arguments),i=o(C?T:m,null,r);return M&&"string"==typeof i?_(i,w,E):i}})},53921:(e,t,n)=>{"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,(function(e,n){o(t,e,n)}),{AS_ENTRIES:!0}),t}})},17642:(e,t,n)=>{"use strict";var r=n(46518),i=n(83440);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("difference")},{difference:i})},58004:(e,t,n)=>{"use strict";var r=n(46518),i=n(79039),o=n(68750);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("intersection")||i((function(){return"3,2"!==String(Array.from(new Set([1,2,3]).intersection(new Set([3,2]))))}))},{intersection:o})},33853:(e,t,n)=>{"use strict";var r=n(46518),i=n(64449);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isDisjointFrom")},{isDisjointFrom:i})},45876:(e,t,n)=>{"use strict";var r=n(46518),i=n(53838);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isSubsetOf")},{isSubsetOf:i})},32475:(e,t,n)=>{"use strict";var r=n(46518),i=n(28527);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isSupersetOf")},{isSupersetOf:i})},15024:(e,t,n)=>{"use strict";var r=n(46518),i=n(83650);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("symmetricDifference")},{symmetricDifference:i})},31698:(e,t,n)=>{"use strict";var r=n(46518),i=n(44204);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("union")},{union:i})},79978:(e,t,n)=>{"use strict";var r=n(46518),i=n(69565),o=n(79504),s=n(67750),a=n(94901),l=n(64117),c=n(60788),u=n(655),d=n(55966),h=n(61034),f=n(2478),p=n(78227),m=n(96395),g=p("replace"),y=TypeError,b=o("".indexOf),_=o("".replace),v=o("".slice),w=Math.max;r({target:"String",proto:!0},{replaceAll:function(e,t){var n,r,o,p,x,S,C,M,T,E=s(this),D=0,k=0,R="";if(!l(e)){if((n=c(e))&&(r=u(s(h(e))),!~b(r,"g")))throw new y("`.replaceAll` does not allow non-global regexes");if(o=d(e,g))return i(o,e,E,t);if(m&&n)return _(u(E),e,t)}for(p=u(E),x=u(e),(S=a(t))||(t=u(t)),C=x.length,M=w(1,C),D=b(p,x);-1!==D;)T=S?u(t(x,D,p)):f(x,p,D,[],void 0,t),R+=v(p,k,D)+T,k=D+C,D=D+M>p.length?-1:b(p,x,D+M);return k{"use strict";n(17642)},39225:(e,t,n)=>{"use strict";n(58004)},13972:(e,t,n)=>{"use strict";n(33853)},99209:(e,t,n)=>{"use strict";n(45876)},25714:(e,t,n)=>{"use strict";n(32475)},17561:(e,t,n)=>{"use strict";n(15024)},66197:(e,t,n)=>{"use strict";n(31698)},86368:(e,t,n)=>{"use strict";var r=n(46518),i=n(24475),o=n(59225).clear;r({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==o},{clearImmediate:o})},59848:(e,t,n)=>{"use strict";n(86368),n(29309)},29309:(e,t,n)=>{"use strict";var r=n(46518),i=n(24475),o=n(59225).set,s=n(79472),a=i.setImmediate?s(o,!1):o;r({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==a},{setImmediate:a})}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";const e=n(1179),t=n(40026),r=n(70984),i=n(44809),o=a("sample"),s=a("upload");if(o){const n=window.localStorage.getItem("cress-fs");if(n)try{const r=function e(t){if(t.id===o)return t.name;if(t.children)for(const n of t.children){const t=e(n);if(null!==t)return t}return null}(JSON.parse(n));if(r){let n=`./Cress-gh/assets/samples/${r}`;window.fetch(n).then((e=>{if(!e.ok)throw new Error(e.statusText);return e})).then((async s=>{try{let a=n.split(".").pop();if("csv"===a){const t=await s.text();let n=i.parse(t).data,a={id:o,name:r,header:[],body:l(n)};new e.default(a).start()}else if("docx"===a){const n=await s.arrayBuffer();let i,a;[i,a]=await(0,t.parseWORD)(n);let l={id:o,name:r,header:i,body:a};new e.default(l).start()}}catch(e){console.error(e),console.debug(s)}})).catch((e=>{console.error(e)}))}else console.error("Error finding file in local file system.")}catch(e){console.error("Error parsing local file system:",e)}else console.error("Local file system data not found.")}else{const t=new r.default("Cress-User-Storage");t.getAttachment(s,"table").then((e=>new window.Response(e).json())).then((async n=>{console.log(n);const r=(await t.get(s)).name;let i={id:s,name:r,header:n[0],body:n.slice(1)};new e.default(i).start()}))}function a(e){let t;return window.location.search.substr(1).split("&").forEach((n=>{const r=n.split("=");r[0]===e&&(t=decodeURIComponent(r[1]))})),t}function l(e){let t=e[0];const n=[];for(let r=1;r!p&&(g.isPressed("control")||g.isPressed("meta")),releasePressedKeys:()=>g.releasePressedKeys(),destroy:()=>g.unmount()}}},78176:(e,t,n)=>{"use strict";t.__esModule=!0,t.useRecorder=function(e,t,n,r,h){const f=e=>l.includes(e),p=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=[];return e.altKey&&n.push("alt"),t&&(e.ctrlKey||e.metaKey)?n.push("control/meta"):(e.ctrlKey&&n.push("control"),e.metaKey&&n.push("meta")),e.shiftKey&&n.push("shift"),n},m=e=>{if(!1===t(e))return;const s=n(e);if(229===e.keyCode||!1===s||(0,o.isImmediatePropagationStopped)(e))return;const l=(0,i.normalizeEventKey)(e);let c=[];f(l)||(c=p(e));const u=[l].concat(c);!h(e,u)&&((0,a.isMacOS)()&&c.includes("meta")||!(0,a.isMacOS)()&&c.includes("control"))&&h(e,[l].concat(p(e,!0))),r(e)},g=e=>{if(e.key){const t=(0,i.normalizeEventKey)(e);f(t)&&c.press(t)}},y=e=>{if(e.key){const t=(0,i.normalizeEventKey)(e);f(t)&&c.release(t)}},b=()=>{c.releaseAll()};return{mount:()=>{let t=e;for(d+=1;t;)1===d&&(t.document.documentElement.addEventListener("keydown",g),u.push({event:"keydown",listener:g}),t.document.documentElement.addEventListener("keyup",y),u.push({event:"keyup",listener:y})),t.document.documentElement.addEventListener("keydown",m),t.document.documentElement.addEventListener("blur",b),t=(0,s.getParentWindow)(t)},unmount:()=>{let t=e;for(d-=1;t;){if(0===d){for(let e=0;ec.isPressed(e),releasePressedKeys:()=>c.releaseAll()}},n(44114);var r=n(95777),i=n(889),o=n(80781),s=n(32993),a=n(19974);const l=["meta","alt","shift","control"],c=(0,r.createKeysObserver)(),u=[];let d=0},889:(e,t,n)=>{"use strict";t.__esModule=!0,n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);const r=new Map([[" ","space"],["spacebar","space"],["scroll","scrolllock"],["del","delete"],["esc","escape"],["medianexttrack","mediatracknext"],["mediaprevioustrack","mediatrackprevious"],["volumeup","audiovolumeup"],["volumedown","audiovolumedown"],["volumemute","audiovolumemute"],["multiply","*"],["add","+"],["divide","/"],["subtract","-"],["left","arrowleft"],["right","arrowright"],["up","arrowup"],["down","arrowdown"]]);t.normalizeKeys=e=>e.map((e=>{const t=e.toLowerCase();return r.has(t)?r.get(t):t})).sort().join("+"),t.getKeysList=e=>e.split("+");const i=new RegExp("^(?:Key|Digit)([A-Z0-9])$"),o=new Set(["Backquote","Minus","Equal","BracketLeft","BracketRight","Backslash","Semicolon","Quote","Comma","Period","Slash"]);t.normalizeEventKey=e=>{let{key:t,code:n}=e,r=t;return i.test(n)?r=n.replace(i,"$1"):o.has(n)&&(r=n),r.toLowerCase()}},27925:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(32993),i=u(n(27577)),o=n(80781),s=u(n(35406)),a=n(96138),l=n(62987),c=n(22592);function u(e){return e&&e.__esModule?e:{default:e}}function d(e,t,n){h(e,t),t.set(e,n)}function h(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function f(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p(e,t){return e.get(g(e,t))}function m(e,t,n){return e.set(g(e,t),n),n}function g(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var y=new WeakMap,b=new WeakMap,_=new WeakMap,v=new WeakMap,w=new WeakMap,x=new WeakMap,S=new WeakMap,C=new WeakSet;function M(){return parseInt(this.hot.rootElement.getAttribute((0,c.A11Y_COLCOUNT)()[0]),10)}function T(e){const t=g(C,this,M).call(this)+e;(0,r.setAttribute)(this.hot.rootElement,...(0,c.A11Y_COLCOUNT)(t))}t.default=class{constructor(e){var t;h(this,t=C),t.add(this),f(this,"hot",void 0),f(this,"eventManager",void 0),f(this,"settings",void 0),f(this,"THEAD",void 0),f(this,"TBODY",void 0),f(this,"_wt",void 0),f(this,"activeWt",void 0),d(this,y,0),d(this,b,0),f(this,"postponedAdjustElementsSize",!1),d(this,_,!1),d(this,v,void 0),d(this,w,void 0),d(this,x,0),d(this,S,0),this.hot=e,this.eventManager=new i.default(this.hot),this.settings=this.hot.getSettings(),this.createElements(),this.registerEvents(),this.initializeWalkontable()}render(){this.hot.isRenderSuspended()||(this.hot.runHooks("beforeRender",this.hot.forceFullRender),this.postponedAdjustElementsSize&&(this.postponedAdjustElementsSize=!1,this.adjustElementsSize(!0)),this._wt.draw(!this.hot.forceFullRender),this.hot.runHooks("afterRender",this.hot.forceFullRender),this.hot.forceFullRender=!1,this.hot.renderCall=!1)}adjustElementsSize(){this.hot.isRenderSuspended()?this.postponedAdjustElementsSize=!0:this._wt.wtOverlays.adjustElementsSize()}getCellAtCoords(e,t){const n=this._wt.getCell(e,t);return n<0?null:n}scrollViewport(e,t,n,r,i){return this._wt.scrollViewport(e,t,n,r,i)}scrollViewportHorizontally(e,t,n){return this._wt.scrollViewportHorizontally(e,t,n)}scrollViewportVertically(e,t,n){return this._wt.scrollViewportVertically(e,t,n)}createElements(){const{rootElement:e,rootDocument:t}=this.hot,n=e.getAttribute("style");n&&e.setAttribute("data-originalstyle",n),(0,r.addClass)(e,"handsontable"),m(w,this,t.createElement("TABLE")),(0,r.addClass)(p(w,this),"htCore"),this.hot.getSettings().tableClassName&&(0,r.addClass)(p(w,this),this.hot.getSettings().tableClassName),this.settings.ariaTags&&((0,r.setAttribute)(p(w,this),[(0,c.A11Y_PRESENTATION)()]),(0,r.setAttribute)(e,[(0,c.A11Y_TREEGRID)(),(0,c.A11Y_ROWCOUNT)(-1),(0,c.A11Y_COLCOUNT)(this.hot.countCols()),(0,c.A11Y_MULTISELECTABLE)()])),this.THEAD=t.createElement("THEAD"),p(w,this).appendChild(this.THEAD),this.TBODY=t.createElement("TBODY"),p(w,this).appendChild(this.TBODY),this.hot.table=p(w,this),this.hot.container.insertBefore(p(w,this),this.hot.container.firstChild)}registerEvents(){const{rootElement:e,rootDocument:t,selection:n,rootWindow:i}=this.hot,s=t.documentElement;this.eventManager.addEventListener(e,"mousedown",(e=>{m(_,this,!0),this.isTextSelectionAllowed(e.target)||((0,r.clearTextSelection)(i),e.preventDefault(),i.focus())})),this.eventManager.addEventListener(e,"mouseup",(()=>{m(_,this,!1)})),this.eventManager.addEventListener(e,"mousemove",(e=>{p(_,this)&&!this.isTextSelectionAllowed(e.target)&&(this.settings.fragmentSelection&&(0,r.clearTextSelection)(i),e.preventDefault())})),this.eventManager.addEventListener(s,"keyup",(e=>{n.isInProgress()&&!e.shiftKey&&n.finish()})),this.eventManager.addEventListener(s,"mouseup",(i=>{n.isInProgress()&&(0,o.isLeftClick)(i)&&n.finish(),m(v,this,!1);const s=(0,r.isOutsideInput)(t.activeElement);(0,r.isInput)(t.activeElement)&&!s||!s&&(n.isSelected()||n.isSelectedByAnyHeader()||e.contains(i.target)||(0,o.isRightClick)(i))||this.hot.unlisten()})),this.eventManager.addEventListener(s,"contextmenu",(e=>{n.isInProgress()&&(0,o.isRightClick)(e)&&(n.finish(),m(v,this,!1))})),this.eventManager.addEventListener(s,"touchend",(()=>{n.isInProgress()&&n.finish(),m(v,this,!1)})),this.eventManager.addEventListener(s,"mousedown",(n=>{const i=n.target,o=n.x||n.clientX,a=n.y||n.clientY;let l=n.target;if(p(v,this)||!e||!this.hot.view)return;const{holder:c}=this.hot.view._wt.wtTable;if(l===c){const e=(0,r.getScrollbarWidth)(t);if(t.elementFromPoint(o+e,a)!==c||t.elementFromPoint(o,a+e)!==c)return}else for(;l!==s;){if(null===l){if(n.isTargetWebComponent)break;return}if(l===e)return;l=l.parentNode}("function"==typeof this.settings.outsideClickDeselects?this.settings.outsideClickDeselects(i):this.settings.outsideClickDeselects)?this.hot.deselectCell():this.hot.destroyEditor(!1,!1)}));let a=(0,r.getParentWindow)(i);for(;null!==a;)this.eventManager.addEventListener(a.document.documentElement,"click",(()=>{this.hot.unlisten()})),a=(0,r.getParentWindow)(a);this.eventManager.addEventListener(p(w,this),"selectstart",(e=>{this.settings.fragmentSelection||(0,r.isInput)(e.target)||e.preventDefault()}))}translateFromRenderableToVisualCoords(e){let{row:t,col:n}=e;return this.hot._createCellCoords(...this.translateFromRenderableToVisualIndex(t,n))}translateFromRenderableToVisualIndex(e,t){let n=e>=0?this.hot.rowIndexMapper.getVisualFromRenderableIndex(e):e,r=t>=0?this.hot.columnIndexMapper.getVisualFromRenderableIndex(t):t;return null===n&&(n=e),null===r&&(r=t),[n,r]}countRenderableIndexes(e,t){const n=Math.min(e.getNotTrimmedIndexesLength(),t),r=e.getNearestNotHiddenIndex(n-1,-1);return null===r?0:e.getRenderableFromVisualIndex(r)+1}countRenderableColumns(){return this.countRenderableIndexes(this.hot.columnIndexMapper,this.settings.maxCols)}countRenderableRows(){return this.countRenderableIndexes(this.hot.rowIndexMapper,this.settings.maxRows)}countNotHiddenRowIndexes(e,t){return this.countNotHiddenIndexes(e,t,this.hot.rowIndexMapper,this.countRenderableRows())}countNotHiddenColumnIndexes(e,t){return this.countNotHiddenIndexes(e,t,this.hot.columnIndexMapper,this.countRenderableColumns())}countNotHiddenIndexes(e,t,n,r){if(isNaN(e)||e<0)return 0;const i=n.getNearestNotHiddenIndex(e,t),o=n.getRenderableFromVisualIndex(i);if(!Number.isInteger(o))return 0;let s=0;return t<0?s=o+1:t>0&&(s=r-o),s}countNotHiddenFixedColumnsStart(){const e=this.hot.countCols(),t=Math.min(parseInt(this.settings.fixedColumnsStart,10),e)-1;return this.countNotHiddenColumnIndexes(t,-1)}countNotHiddenFixedRowsTop(){const e=this.hot.countRows(),t=Math.min(parseInt(this.settings.fixedRowsTop,10),e)-1;return this.countNotHiddenRowIndexes(t,-1)}countNotHiddenFixedRowsBottom(){const e=this.hot.countRows(),t=Math.max(e-parseInt(this.settings.fixedRowsBottom,10),0);return this.countNotHiddenRowIndexes(t,1)}countRenderableColumnsInRange(e,t){let n=0;for(let r=e;r<=t;r++)null!==this.hot.columnIndexMapper.getRenderableFromVisualIndex(r)&&(n+=1);return n}countRenderableRowsInRange(e,t){let n=0;for(let r=e;r<=t;r++)null!==this.hot.rowIndexMapper.getRenderableFromVisualIndex(r)&&(n+=1);return n}isMainTableNotFullyCoveredByOverlays(){const e=this.countNotHiddenFixedRowsTop()+this.countNotHiddenFixedRowsBottom(),t=this.countNotHiddenFixedColumnsStart();return this.hot.countRenderedRows()>e&&this.hot.countRenderedCols()>t}initializeWalkontable(){const e={ariaTags:this.settings.ariaTags,rtlMode:this.hot.isRtl(),externalRowCalculator:this.hot.getPlugin("autoRowSize")&&this.hot.getPlugin("autoRowSize").isEnabled(),table:p(w,this),isDataViewInstance:()=>(0,l.isRootInstance)(this.hot),preventOverflow:()=>this.settings.preventOverflow,preventWheel:()=>this.settings.preventWheel,stretchH:()=>this.settings.stretchH,data:(e,t)=>this.hot.getDataAtCell(...this.translateFromRenderableToVisualIndex(e,t)),totalRows:()=>this.countRenderableRows(),totalColumns:()=>this.countRenderableColumns(),fixedColumnsStart:()=>this.countNotHiddenFixedColumnsStart(),fixedRowsTop:()=>this.countNotHiddenFixedRowsTop(),fixedRowsBottom:()=>this.countNotHiddenFixedRowsBottom(),shouldRenderInlineStartOverlay:()=>this.settings.fixedColumnsStart>0||e.rowHeaders().length>0,shouldRenderTopOverlay:()=>this.settings.fixedRowsTop>0||e.columnHeaders().length>0,shouldRenderBottomOverlay:()=>this.settings.fixedRowsBottom>0,minSpareRows:()=>this.settings.minSpareRows,renderAllRows:this.settings.renderAllRows,renderAllColumns:this.settings.renderAllColumns,rowHeaders:()=>{const e=[];return this.hot.hasRowHeaders()&&e.push(((e,t)=>{const n=e>=0?this.hot.rowIndexMapper.getVisualFromRenderableIndex(e):e;this.appendRowHeader(n,t)})),this.hot.runHooks("afterGetRowHeaderRenderers",e),m(b,this,e.length),this.hot.getSettings().ariaTags&&g(C,this,M).call(this)===this.hot.countCols()&&g(C,this,T).call(this,p(b,this)),e},columnHeaders:()=>{const e=[];return this.hot.hasColHeaders()&&e.push(((e,t)=>{const n=e>=0?this.hot.columnIndexMapper.getVisualFromRenderableIndex(e):e;this.appendColHeader(n,t)})),this.hot.runHooks("afterGetColumnHeaderRenderers",e),m(y,this,e.length),e},columnWidth:e=>{const t=this.hot.columnIndexMapper.getVisualFromRenderableIndex(e);return this.hot.getColWidth(null===t?e:t)},rowHeight:e=>{const t=this.hot.rowIndexMapper.getVisualFromRenderableIndex(e);return this.hot.getRowHeight(null===t?e:t)},cellRenderer:(e,t,n)=>{const[r,i]=this.translateFromRenderableToVisualIndex(e,t),o=this.hot.runHooks("modifyGetCellCoords",r,i);let s=r,a=i;Array.isArray(o)&&([s,a]=o);const l=this.hot.getCellMeta(s,a),c=this.hot.colToProp(a);let u=this.hot.getDataAtRowProp(s,c);this.hot.hasHook("beforeValueRender")&&(u=this.hot.runHooks("beforeValueRender",u,l)),this.hot.runHooks("beforeRenderer",n,r,i,c,u,l),this.hot.getCellRenderer(l)(this.hot,n,r,i,c,u,l),this.hot.runHooks("afterRenderer",n,r,i,c,u,l)},selections:this.hot.selection.highlight,hideBorderOnMouseDownOver:()=>this.settings.fragmentSelection,onWindowResize:()=>{this.hot&&!this.hot.isDestroyed&&this.hot.refreshDimensions()},onContainerElementResize:()=>{this.hot&&!this.hot.isDestroyed&&(0,r.isVisible)(this.hot.rootElement)&&this.hot.refreshDimensions()},onCellMouseDown:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t),s={row:!1,column:!1,cell:!1};this.hot.listen(),this.activeWt=r,m(v,this,!0),this.hot.runHooks("beforeOnCellMouseDown",e,i,n,s),(0,o.isImmediatePropagationStopped)(e)||((0,a.handleMouseEvent)(e,{coords:i,selection:this.hot.selection,controller:s,cellCoordsFactory:(e,t)=>this.hot._createCellCoords(e,t)}),this.hot.runHooks("afterOnCellMouseDown",e,i,n),this.activeWt=this._wt)},onCellContextMenu:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,m(v,this,!1),this.hot.selection.isInProgress()&&this.hot.selection.finish(),this.hot.runHooks("beforeOnCellContextMenu",e,i,n),(0,o.isImmediatePropagationStopped)(e)||(this.hot.runHooks("afterOnCellContextMenu",e,i,n),this.activeWt=this._wt)},onCellMouseOut:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,this.hot.runHooks("beforeOnCellMouseOut",e,i,n),(0,o.isImmediatePropagationStopped)(e)||(this.hot.runHooks("afterOnCellMouseOut",e,i,n),this.activeWt=this._wt)},onCellMouseOver:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t),s={row:!1,column:!1,cell:!1};this.activeWt=r,this.hot.runHooks("beforeOnCellMouseOver",e,i,n,s),(0,o.isImmediatePropagationStopped)(e)||(p(v,this)&&(0,a.handleMouseEvent)(e,{coords:i,selection:this.hot.selection,controller:s,cellCoordsFactory:(e,t)=>this.hot._createCellCoords(e,t)}),this.hot.runHooks("afterOnCellMouseOver",e,i,n),this.activeWt=this._wt)},onCellMouseUp:(e,t,n,r)=>{const i=this.translateFromRenderableToVisualCoords(t);this.activeWt=r,this.hot.runHooks("beforeOnCellMouseUp",e,i,n),(0,o.isImmediatePropagationStopped)(e)||this.hot.isDestroyed||(this.hot.runHooks("afterOnCellMouseUp",e,i,n),this.activeWt=this._wt)},onCellCornerMouseDown:e=>{e.preventDefault(),this.hot.runHooks("afterOnCellCornerMouseDown",e)},onCellCornerDblClick:e=>{e.preventDefault(),this.hot.runHooks("afterOnCellCornerDblClick",e)},beforeDraw:(e,t)=>this.beforeRender(e,t),onDraw:e=>this.afterRender(e),onBeforeViewportScrollVertically:e=>{const t=this.hot.rowIndexMapper,n=e<0;let r=e;return n||(r=t.getVisualFromRenderableIndex(e),null!==r)?(r=this.hot.runHooks("beforeViewportScrollVertically",r),this.hot.runHooks("beforeViewportScroll"),n?r:t.getRenderableFromVisualIndex(r)):e},onBeforeViewportScrollHorizontally:e=>{const t=this.hot.columnIndexMapper,n=e<0;let r=e;return n||(r=t.getVisualFromRenderableIndex(e),null!==r)?(r=this.hot.runHooks("beforeViewportScrollHorizontally",r),this.hot.runHooks("beforeViewportScroll"),n?r:t.getRenderableFromVisualIndex(r)):e},onScrollVertically:()=>{this.hot.runHooks("afterScrollVertically"),this.hot.runHooks("afterScroll")},onScrollHorizontally:()=>{this.hot.runHooks("afterScrollHorizontally"),this.hot.runHooks("afterScroll")},onBeforeRemoveCellClassNames:()=>this.hot.runHooks("beforeRemoveCellClassNames"),onBeforeHighlightingRowHeader:(e,t,n)=>{const r=this.hot.rowIndexMapper,i=e<0;let o=e;i||(o=r.getVisualFromRenderableIndex(e));const s=this.hot.runHooks("beforeHighlightingRowHeader",o,t,n);return i?s:r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(s,1))},onBeforeHighlightingColumnHeader:(e,t,n)=>{const r=this.hot.columnIndexMapper,i=e<0;let o=e;i||(o=r.getVisualFromRenderableIndex(e));const s=this.hot.runHooks("beforeHighlightingColumnHeader",o,t,n);return i?s:r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(s,1))},onAfterDrawSelection:(e,t,n)=>{let r;const[i,o]=this.translateFromRenderableToVisualIndex(e,t),s=this.hot.selection.getSelectedRange();if(s.size()>0){const e=s.peekByIndex(null!=n?n:0);r=[e.from.row,e.from.col,e.to.row,e.to.col]}return this.hot.runHooks("afterDrawSelection",i,o,r,n)},onBeforeDrawBorders:(e,t)=>{const[n,r,i,o]=e,s=[this.hot.rowIndexMapper.getVisualFromRenderableIndex(n),this.hot.columnIndexMapper.getVisualFromRenderableIndex(r),this.hot.rowIndexMapper.getVisualFromRenderableIndex(i),this.hot.columnIndexMapper.getVisualFromRenderableIndex(o)];return this.hot.runHooks("beforeDrawBorders",s,t)},onBeforeTouchScroll:()=>this.hot.runHooks("beforeTouchScroll"),onAfterMomentumScroll:()=>this.hot.runHooks("afterMomentumScroll"),onBeforeStretchingColumnWidth:(e,t)=>{const n=this.hot.columnIndexMapper.getVisualFromRenderableIndex(t);return this.hot.runHooks("beforeStretchingColumnWidth",e,n)},onModifyRowHeaderWidth:e=>this.hot.runHooks("modifyRowHeaderWidth",e),onModifyGetCellCoords:(e,t,n)=>{const r=this.hot.rowIndexMapper,i=this.hot.columnIndexMapper,o=t>=0?i.getVisualFromRenderableIndex(t):t,s=e>=0?r.getVisualFromRenderableIndex(e):e,a=this.hot.runHooks("modifyGetCellCoords",s,o,n);if(Array.isArray(a)){const[e,t,n,o]=a;return[e>=0?r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(e,1)):e,t>=0?i.getRenderableFromVisualIndex(i.getNearestNotHiddenIndex(t,1)):t,n>=0?r.getRenderableFromVisualIndex(r.getNearestNotHiddenIndex(n,-1)):n,o>=0?i.getRenderableFromVisualIndex(i.getNearestNotHiddenIndex(o,-1)):o]}},viewportRowCalculatorOverride:e=>{let t=this.settings.viewportRowRenderingOffset;if("auto"===t&&this.settings.fixedRowsTop&&(t=10),t>0||"auto"===t){const n=this.countRenderableRows(),r=e.startRow,i=e.endRow;if("number"==typeof t)e.startRow=Math.max(r-t,0),e.endRow=Math.min(i+t,n-1);else if("auto"===t){const t=Math.ceil(i/n*12);e.startRow=Math.max(r-t,0),e.endRow=Math.min(i+t,n-1)}}this.hot.runHooks("afterViewportRowCalculatorOverride",e)},viewportColumnCalculatorOverride:e=>{let t=this.settings.viewportColumnRenderingOffset;if("auto"===t&&this.settings.fixedColumnsStart&&(t=10),t>0||"auto"===t){const n=this.countRenderableColumns(),r=e.startColumn,i=e.endColumn;if("number"==typeof t&&(e.startColumn=Math.max(r-t,0),e.endColumn=Math.min(i+t,n-1)),"auto"===t){const t=Math.ceil(i/n*6);e.startColumn=Math.max(r-t,0),e.endColumn=Math.min(i+t,n-1)}}this.hot.runHooks("afterViewportColumnCalculatorOverride",e)},rowHeaderWidth:()=>this.settings.rowHeaderWidth,columnHeaderHeight:()=>{const e=this.hot.runHooks("modifyColumnHeaderHeight");return this.settings.columnHeaderHeight||e}};this.hot.runHooks("beforeInitWalkontable",e),this._wt=new s.default(e),this.activeWt=this._wt;const t=this._wt.wtTable.spreader,{width:n,height:i}=this.hot.rootElement.getBoundingClientRect();this.setLastSize(n,i),this.eventManager.addEventListener(t,"mousedown",(e=>{e.target===t&&3===e.which&&e.stopPropagation()})),this.eventManager.addEventListener(t,"contextmenu",(e=>{e.target===t&&3===e.which&&e.stopPropagation()})),this.eventManager.addEventListener(this.hot.rootDocument.documentElement,"click",(()=>{this.settings.observeDOMVisibility&&this._wt.drawInterrupted&&(this.hot.forceFullRender=!0,this.render())}))}isTextSelectionAllowed(e){if((0,r.isInput)(e))return!0;const t=(0,r.isChildOf)(e,this.hot.view._wt.wtTable.spreader);return!(!0!==this.settings.fragmentSelection||!t)||!("cell"!==this.settings.fragmentSelection||!this.isSelectedOnlyCell()||!t)||!(this.settings.fragmentSelection||!this.isCellEdited()||!this.isSelectedOnlyCell())}isMouseDown(){return p(v,this)}isSelectedOnlyCell(){var e,t;return null!==(e=null===(t=this.hot.getSelectedRangeLast())||void 0===t?void 0:t.isSingleCell())&&void 0!==e&&e}isCellEdited(){const e=this.hot.getActiveEditor();return e&&e.isOpened()}beforeRender(e,t){e&&this.hot.runHooks("beforeViewRender",this.hot.forceFullRender,t)}afterRender(e){e&&this.hot.runHooks("afterViewRender",this.hot.forceFullRender)}appendRowHeader(e,t){if(t.firstChild){const n=t.firstChild;if(!(0,r.hasClass)(n,"relative"))return(0,r.empty)(t),void this.appendRowHeader(e,t);this.updateCellHeader(n.querySelector(".rowHeader"),e,this.hot.getRowHeader)}else{const{rootDocument:n,getRowHeader:r}=this.hot,i=n.createElement("div"),o=n.createElement("span");i.className="relative",o.className="rowHeader",this.updateCellHeader(o,e,r),i.appendChild(o),t.appendChild(i)}this.hot.runHooks("afterGetRowHeader",e,t)}appendColHeader(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.hot.getColHeader,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if(t.firstChild){const o=t.firstChild;(0,r.hasClass)(o,"relative")?this.updateCellHeader(o.querySelector(".colHeader"),e,n,i):((0,r.empty)(t),this.appendColHeader(e,t,n,i))}else{const{rootDocument:o}=this.hot,s=o.createElement("div"),a=o.createElement("span");s.className="relative",a.className="colHeader",this.settings.ariaTags&&((0,r.setAttribute)(s,...(0,c.A11Y_PRESENTATION)()),(0,r.setAttribute)(a,...(0,c.A11Y_PRESENTATION)())),this.updateCellHeader(a,e,n,i),s.appendChild(a),t.appendChild(s)}this.hot.runHooks("afterGetColHeader",e,t,i)}updateCellHeader(e,t,n){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,o=t;const s=this._wt.wtOverlays.getParentOverlay(e)||this._wt;e.parentNode&&((0,r.hasClass)(e,"colHeader")?o=s.wtTable.columnFilter.sourceToRendered(t):(0,r.hasClass)(e,"rowHeader")&&(o=s.wtTable.rowFilter.sourceToRendered(t))),o>-1?(0,r.fastInnerHTML)(e,n(t,i)):((0,r.fastInnerText)(e,String.fromCharCode(160)),(0,r.addClass)(e,"cornerHeader"))}maximumVisibleElementWidth(e){const t=this._wt.wtViewport.getWorkspaceWidth()-e;return t>0?t:0}maximumVisibleElementHeight(e){const t=this._wt.wtViewport.getWorkspaceHeight()-e;return t>0?t:0}setLastSize(e,t){m(x,this,e),m(S,this,t)}getLastSize(){return{width:p(x,this),height:p(S,this)}}getFirstFullyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstVisibleRow())}getLastFullyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleRow())}getFirstFullyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstVisibleColumn())}getLastFullyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastVisibleColumn())}getFirstPartiallyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleRow())}getLastPartiallyVisibleRow(){return this.hot.rowIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleRow())}getFirstPartiallyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getFirstPartiallyVisibleColumn())}getLastPartiallyVisibleColumn(){return this.hot.columnIndexMapper.getVisualFromRenderableIndex(this.hot.view._wt.wtScroll.getLastPartiallyVisibleColumn())}getColumnHeadersCount(){return p(y,this)}getRowHeadersCount(){return p(b,this)}getViewportWidth(){return this.hot.view._wt.wtViewport.getViewportWidth()}getWorkspaceWidth(){return this.hot.view._wt.wtViewport.getWorkspaceWidth()}getViewportHeight(){return this.hot.view._wt.wtViewport.getViewportHeight()}getWorkspaceHeight(){return this.hot.view._wt.wtViewport.getWorkspaceHeight()}destroy(){this._wt.destroy(),this.eventManager.destroy()}}},54169:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(99926),i=n(91187);function o(e,t,n){!function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}(e,t),t.set(e,n)}function s(e,t){return e.get(l(e,t))}function a(e,t,n){return e.set(l(e,t),n),n}function l(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var c=new WeakMap,u=new WeakMap,d=new WeakMap,h=new WeakMap,f=new WeakMap;t.ChangesObservable=class{constructor(){let{initialIndexValue:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o(this,c,new Set),o(this,u,[]),o(this,d,[]),o(this,h,!1),o(this,f,!1),a(f,this,null!=e&&e)}createObserver(){const e=new r.ChangesObserver;return s(c,this).add(e),e.addLocalHook("unsubscribe",(()=>{s(c,this).delete(e)})),e._writeInitialChanges((0,i.arrayDiff)(s(u,this),s(d,this))),e}emit(e){let t=s(d,this);s(h,this)&&s(u,this).length===e.length||(0===e.length?e=new Array(t.length).fill(s(f,this)):a(u,this,new Array(e.length).fill(s(f,this))),s(h,this)||(a(h,this,!0),t=s(u,this)));const n=(0,i.arrayDiff)(t,e);s(c,this).forEach((e=>e._write(n))),a(d,this,e)}}},99926:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r,i=n(56427),o=(r=n(2306))&&r.__esModule?r:{default:r};function s(e,t,n){if("function"==typeof e?e===t:e.has(t))return arguments.length<3?t:n;throw new TypeError("Private element is not present on this object")}var a=new WeakMap;class l{constructor(){!function(e,t,n){!function(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}(e,t),t.set(e,n)}(this,a,[])}subscribe(e){var t;return this.addLocalHook("change",e),this._write((this,(t=a).get(s(t,this)))),this}unsubscribe(){return this.runLocalHooks("unsubscribe"),this.clearLocalHooks(),this}_write(e){return e.length>0&&this.runLocalHooks("change",e),this}_writeInitialChanges(e){var t,n;n=e,(t=a).set(s(t,this),n)}}t.ChangesObserver=l,(0,i.mixin)(l,o.default)},91187:(e,t,n)=>{"use strict";t.__esModule=!0,t.arrayDiff=function(e,t){const n=[];let r=0,i=0;for(;r{"use strict";t.__esModule=!0;var r={IndexMapper:!0,getRegisteredMapsCounter:!0,getIncreasedIndexes:!0,getDecreasedIndexes:!0,alterUtilsFactory:!0},i=n(98720);t.IndexMapper=i.IndexMapper;var o=n(18987);t.getRegisteredMapsCounter=o.getRegisteredMapsCounter;var s=n(69515);t.getIncreasedIndexes=s.getIncreasedIndexes,t.getDecreasedIndexes=s.getDecreasedIndexes,t.alterUtilsFactory=s.alterUtilsFactory;var a=n(28025);Object.keys(a).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===a[e]||(t[e]=a[e]))}))},98720:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r,i=n(16363),o=n(28025),s=n(653),a=(r=n(2306))&&r.__esModule?r:{default:r},l=n(56427),c=n(74713),u=n(54169);function d(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}new Set;class h{constructor(){d(this,"indexesSequence",new o.IndexesSequence),d(this,"trimmingMapsCollection",new s.AggregatedCollection((e=>e.some((e=>!0===e))),!1)),d(this,"hidingMapsCollection",new s.AggregatedCollection((e=>e.some((e=>!0===e))),!1)),d(this,"variousMapsCollection",new s.MapCollection),d(this,"hidingChangesObservable",new u.ChangesObservable({initialIndexValue:!1})),d(this,"notTrimmedIndexesCache",[]),d(this,"notHiddenIndexesCache",[]),d(this,"isBatched",!1),d(this,"indexesSequenceChanged",!1),d(this,"indexesChangeSource",void 0),d(this,"trimmedIndexesChanged",!1),d(this,"hiddenIndexesChanged",!1),d(this,"renderablePhysicalIndexesCache",[]),d(this,"fromPhysicalToVisualIndexesCache",new Map),d(this,"fromVisualToRenderableIndexesCache",new Map),this.indexesSequence.addLocalHook("change",(()=>{this.indexesSequenceChanged=!0,this.updateCache(),this.runLocalHooks("indexesSequenceChange",this.indexesChangeSource),this.runLocalHooks("change",this.indexesSequence,null)})),this.trimmingMapsCollection.addLocalHook("change",(e=>{this.trimmedIndexesChanged=!0,this.updateCache(),this.runLocalHooks("change",e,this.trimmingMapsCollection)})),this.hidingMapsCollection.addLocalHook("change",(e=>{this.hiddenIndexesChanged=!0,this.updateCache(),this.runLocalHooks("change",e,this.hidingMapsCollection)})),this.variousMapsCollection.addLocalHook("change",(e=>{this.runLocalHooks("change",e,this.variousMapsCollection)}))}suspendOperations(){this.isBatched=!0}resumeOperations(){this.isBatched=!1,this.updateCache()}createChangesObserver(e){if("hiding"!==e)throw new Error(`Unsupported index map type "${e}".`);return this.hidingChangesObservable.createObserver()}createAndRegisterIndexMap(e,t,n){return this.registerMap(e,(0,o.createIndexMap)(t,n))}registerMap(e,t){if(this.trimmingMapsCollection.get(e)||this.hidingMapsCollection.get(e)||this.variousMapsCollection.get(e))throw Error(`Map with name "${e}" has been already registered.`);t instanceof o.TrimmingMap?this.trimmingMapsCollection.register(e,t):t instanceof o.HidingMap?this.hidingMapsCollection.register(e,t):this.variousMapsCollection.register(e,t);const n=this.getNumberOfIndexes();return n>0&&t.init(n),t}unregisterMap(e){this.trimmingMapsCollection.unregister(e),this.hidingMapsCollection.unregister(e),this.variousMapsCollection.unregister(e)}unregisterAll(){this.trimmingMapsCollection.unregisterAll(),this.hidingMapsCollection.unregisterAll(),this.variousMapsCollection.unregisterAll()}getPhysicalFromVisualIndex(e){const t=this.notTrimmedIndexesCache[e];return(0,c.isDefined)(t)?t:null}getPhysicalFromRenderableIndex(e){const t=this.renderablePhysicalIndexesCache[e];return(0,c.isDefined)(t)?t:null}getVisualFromPhysicalIndex(e){const t=this.fromPhysicalToVisualIndexesCache.get(e);return(0,c.isDefined)(t)?t:null}getVisualFromRenderableIndex(e){return this.getVisualFromPhysicalIndex(this.getPhysicalFromRenderableIndex(e))}getRenderableFromVisualIndex(e){const t=this.fromVisualToRenderableIndexesCache.get(e);return(0,c.isDefined)(t)?t:null}getNearestNotHiddenIndex(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(null===this.getPhysicalFromVisualIndex(e))return null;if(this.fromVisualToRenderableIndexesCache.has(e))return e;const r=Array.from(this.fromVisualToRenderableIndexesCache.keys());let i=-1;return i=t>0?r.findIndex((t=>t>e)):r.reverse().findIndex((t=>t0&&void 0!==arguments[0]?arguments[0]:this.getNumberOfIndexes();this.notTrimmedIndexesCache=[...new Array(e).keys()],this.notHiddenIndexesCache=[...new Array(e).keys()],this.suspendOperations(),this.indexesChangeSource="init",this.indexesSequence.init(e),this.indexesChangeSource=void 0,this.trimmingMapsCollection.initEvery(e),this.resumeOperations(),this.suspendOperations(),this.hidingMapsCollection.initEvery(e),this.variousMapsCollection.initEvery(e),this.resumeOperations(),this.runLocalHooks("init")}fitToLength(e){const t=this.getNumberOfIndexes();if(et+e));this.removeIndexes(t)}else this.insertIndexes(t,e-t)}getIndexesSequence(){return this.indexesSequence.getValues()}setIndexesSequence(e){void 0===this.indexesChangeSource&&(this.indexesChangeSource="update"),this.indexesSequence.setValues(e),"update"===this.indexesChangeSource&&(this.indexesChangeSource=void 0)}getNotTrimmedIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.notTrimmedIndexesCache:this.getIndexesSequence().filter((e=>!1===this.isTrimmed(e)))}getNotTrimmedIndexesLength(){return this.getNotTrimmedIndexes().length}getNotHiddenIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.notHiddenIndexesCache:this.getIndexesSequence().filter((e=>!1===this.isHidden(e)))}getNotHiddenIndexesLength(){return this.getNotHiddenIndexes().length}getRenderableIndexes(){return!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0])?this.renderablePhysicalIndexesCache:this.getNotTrimmedIndexes().filter((e=>!1===this.isHidden(e)))}getRenderableIndexesLength(){return this.getRenderableIndexes().length}getNumberOfIndexes(){return this.getIndexesSequence().length}moveIndexes(e,t){"number"==typeof e&&(e=[e]);const n=(0,i.arrayMap)(e,(e=>this.getPhysicalFromVisualIndex(e))),r=this.getNotTrimmedIndexesLength(),s=e.length,a=(0,o.getListWithRemovedItems)(this.getIndexesSequence(),n),l=a.filter((e=>!1===this.isTrimmed(e)));let c=a.indexOf(l[l.length-1])+1;if(t+se+t));this.suspendOperations(),this.indexesChangeSource="insert",this.indexesSequence.insert(o,s),this.indexesChangeSource=void 0,this.trimmingMapsCollection.insertToEvery(o,s),this.hidingMapsCollection.insertToEvery(o,s),this.variousMapsCollection.insertToEvery(o,s),this.resumeOperations()}removeIndexes(e){this.suspendOperations(),this.indexesChangeSource="remove",this.indexesSequence.remove(e),this.indexesChangeSource=void 0,this.trimmingMapsCollection.removeFromEvery(e),this.hidingMapsCollection.removeFromEvery(e),this.variousMapsCollection.removeFromEvery(e),this.resumeOperations()}updateCache(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=this.indexesSequenceChanged||this.trimmedIndexesChanged||this.hiddenIndexesChanged;(!0===e||!1===this.isBatched&&!0===t)&&(this.trimmingMapsCollection.updateCache(),this.hidingMapsCollection.updateCache(),this.notTrimmedIndexesCache=this.getNotTrimmedIndexes(!1),this.notHiddenIndexesCache=this.getNotHiddenIndexes(!1),this.renderablePhysicalIndexesCache=this.getRenderableIndexes(!1),this.cacheFromPhysicalToVisualIndexes(),this.cacheFromVisualToRenderableIndexes(),this.hiddenIndexesChanged&&this.hidingChangesObservable.emit(this.hidingMapsCollection.getMergedValues()),this.runLocalHooks("cacheUpdated",{indexesSequenceChanged:this.indexesSequenceChanged,trimmedIndexesChanged:this.trimmedIndexesChanged,hiddenIndexesChanged:this.hiddenIndexesChanged}),this.indexesSequenceChanged=!1,this.trimmedIndexesChanged=!1,this.hiddenIndexesChanged=!1)}cacheFromPhysicalToVisualIndexes(){const e=this.getNotTrimmedIndexesLength();this.fromPhysicalToVisualIndexesCache.clear();for(let t=0;t{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(18987),i=n(16363),o=n(74713);function s(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a extends r.MapCollection{constructor(e,t){super(),s(this,"mergedValuesCache",[]),s(this,"aggregationFunction",void 0),s(this,"fallbackValue",void 0),this.aggregationFunction=e,this.fallbackValue=t}getMergedValues(){if(!0===(!(arguments.length>0&&void 0!==arguments[0])||arguments[0]))return this.mergedValuesCache;if(0===this.getLength())return[];const e=(0,i.arrayMap)(this.get(),(e=>e.getValues())),t=[],n=(0,o.isDefined)(e[0])&&e[0].length||0;for(let r=0;r{"use strict";t.__esModule=!0;var r=n(84376);Object.keys(r).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===r[e]||(t[e]=r[e]))}));var i=n(18987);Object.keys(i).forEach((function(e){"default"!==e&&"__esModule"!==e&&(e in t&&t[e]===i[e]||(t[e]=i[e]))}))},18987:(e,t,n)=>{"use strict";t.__esModule=!0,t.getRegisteredMapsCounter=function(){return a},n(16280);var r,i=n(74713),o=n(56427),s=(r=n(2306))&&r.__esModule?r:{default:r};let a=0;class l{constructor(){!function(e,t,n){var r;(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}(this,"collection",new Map)}register(e,t){!1===this.collection.has(e)&&(this.collection.set(e,t),t.addLocalHook("change",(()=>this.runLocalHooks("change",t))),a+=1)}unregister(e){const t=this.collection.get(e);(0,i.isDefined)(t)&&(t.destroy(),this.collection.delete(e),this.runLocalHooks("change",t),a-=1)}unregisterAll(){this.collection.forEach(((e,t)=>this.unregister(t))),this.collection.clear()}get(e){return(0,i.isUndefined)(e)?Array.from(this.collection.values()):this.collection.get(e)}getLength(){return this.collection.size}removeFromEvery(e){this.collection.forEach((t=>{t.remove(e)}))}insertToEvery(e,t){this.collection.forEach((n=>{n.insert(e,t)}))}initEvery(e){this.collection.forEach((t=>{t.init(e)}))}}t.MapCollection=l,(0,o.mixin)(l,s.default)},46714:(e,t,n)=>{"use strict";t.__esModule=!0,n(44114);var r=n(87402),i=n(16363);class o extends r.PhysicalIndexToValueMap{constructor(){super(arguments.length>0&&void 0!==arguments[0]&&arguments[0])}getHiddenIndexes(){return(0,i.arrayReduce)(this.getValues(),((e,t,n)=>(t&&e.push(n),e)),[])}}t.HidingMap=o},28025:(e,t,n)=>{"use strict";t.__esModule=!0;var r={createIndexMap:!0,HidingMap:!0,IndexMap:!0,LinkedPhysicalIndexToValueMap:!0,PhysicalIndexToValueMap:!0,TrimmingMap:!0};t.createIndexMap=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!d.has(e))throw new Error(`The provided map type ("${e}") does not exist.`);return new(d.get(e))(t)},n(16280);var i=n(46714);t.HidingMap=i.HidingMap;var o=n(48263);t.IndexMap=o.IndexMap;var s=n(61053);t.LinkedPhysicalIndexToValueMap=s.LinkedPhysicalIndexToValueMap;var a=n(87402);t.PhysicalIndexToValueMap=a.PhysicalIndexToValueMap;var l=n(77224);t.TrimmingMap=l.TrimmingMap;var c=n(11972);Object.keys(c).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===c[e]||(t[e]=c[e]))}));var u=n(87662);Object.keys(u).forEach((function(e){"default"!==e&&"__esModule"!==e&&(Object.prototype.hasOwnProperty.call(r,e)||e in t&&t[e]===u[e]||(t[e]=u[e]))}));const d=new Map([["hiding",i.HidingMap],["index",o.IndexMap],["linkedPhysicalIndexToValue",s.LinkedPhysicalIndexToValueMap],["physicalIndexToValue",a.PhysicalIndexToValueMap],["trimming",l.TrimmingMap]])},48263:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r,i=n(38889),o=n(56427),s=n(63996),a=(r=n(2306))&&r.__esModule?r:{default:r};function l(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class c{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;l(this,"indexedValues",[]),l(this,"initValueOrFn",void 0),this.initValueOrFn=e}getValues(){return this.indexedValues}getValueAtIndex(e){const t=this.indexedValues;if(e0&&void 0!==arguments[0]?arguments[0]:this.indexedValues.length;this.indexedValues.length=0,(0,s.isFunction)(this.initValueOrFn)?(0,i.rangeEach)(e-1,(e=>this.indexedValues.push(this.initValueOrFn(e)))):(0,i.rangeEach)(e-1,(()=>this.indexedValues.push(this.initValueOrFn))),this.runLocalHooks("change")}init(e){return this.setDefaultValues(e),this.runLocalHooks("init"),this}insert(){this.runLocalHooks("change")}remove(){this.runLocalHooks("change")}destroy(){this.clearLocalHooks(),this.indexedValues=null,this.initValueOrFn=null}}t.IndexMap=c,(0,o.mixin)(c,a.default)},11972:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(48263),i=n(87662),o=n(69515);class s extends r.IndexMap{constructor(){super((e=>e))}insert(e,t){const n=(0,o.getIncreasedIndexes)(this.indexedValues,t);this.indexedValues=(0,i.getListWithInsertedItems)(n,e,t),super.insert(e,t)}remove(e){const t=(0,i.getListWithRemovedItems)(this.indexedValues,e);this.indexedValues=(0,o.getDecreasedIndexes)(t,e),super.remove(e)}}t.IndexesSequence=s},61053:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r=n(48263),i=n(99368),o=n(87662),s=n(81629),a=n(63996);class l extends r.IndexMap{constructor(){var e,t,n,r;super(...arguments),e=this,n=[],(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t="orderOfIndexes"))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n}getValues(){return this.orderOfIndexes.map((e=>this.indexedValues[e]))}setValues(e){this.orderOfIndexes=[...Array(e.length).keys()],super.setValues(e)}setValueAtIndex(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.orderOfIndexes.length;return e0&&void 0!==arguments[0]?arguments[0]:this.indexedValues.length;this.orderOfIndexes.length=0,super.setDefaultValues(e)}insert(e,t){this.indexedValues=(0,i.getListWithInsertedItems)(this.indexedValues,e,t,this.initValueOrFn),this.orderOfIndexes=(0,s.getIncreasedIndexes)(this.orderOfIndexes,t),super.insert(e,t)}remove(e){this.indexedValues=(0,i.getListWithRemovedItems)(this.indexedValues,e),this.orderOfIndexes=(0,o.getListWithRemovedItems)(this.orderOfIndexes,e),this.orderOfIndexes=(0,s.getDecreasedIndexes)(this.orderOfIndexes,e),super.remove(e)}getEntries(){return this.orderOfIndexes.map((e=>[e,this.getValueAtIndex(e)]))}}t.LinkedPhysicalIndexToValueMap=l},87402:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(48263),i=n(99368);class o extends r.IndexMap{insert(e,t){this.indexedValues=(0,i.getListWithInsertedItems)(this.indexedValues,e,t,this.initValueOrFn),super.insert(e,t)}remove(e){this.indexedValues=(0,i.getListWithRemovedItems)(this.indexedValues,e),super.remove(e)}}t.PhysicalIndexToValueMap=o},77224:(e,t,n)=>{"use strict";t.__esModule=!0,n(44114);var r=n(87402),i=n(16363);class o extends r.PhysicalIndexToValueMap{constructor(){super(arguments.length>0&&void 0!==arguments[0]&&arguments[0])}getTrimmedIndexes(){return(0,i.arrayReduce)(this.getValues(),((e,t,n)=>(t&&e.push(n),e)),[])}}t.TrimmingMap=o},81629:(e,t,n)=>{"use strict";t.__esModule=!0,t.getDecreasedIndexes=function(e,t){return(0,r.arrayMap)(e,(e=>e-t.filter((t=>te>=n?e+i:e))};var r=n(16363)},69515:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280);var r=n(81629);t.getDecreasedIndexes=r.getDecreasedIndexes,t.getIncreasedIndexes=r.getIncreasedIndexes;var i=n(87662),o=n(99368);const s=new Map([["indexesSequence",{getListWithInsertedItems:i.getListWithInsertedItems,getListWithRemovedItems:i.getListWithRemovedItems}],["physicallyIndexed",{getListWithInsertedItems:o.getListWithInsertedItems,getListWithRemovedItems:o.getListWithRemovedItems}]]);t.alterUtilsFactory=e=>{if(!1===s.has(e))throw new Error(`Alter strategy with ID '${e}' does not exist.`);return s.get(e)}},87662:(e,t,n)=>{"use strict";t.__esModule=!0,t.getListWithInsertedItems=function(e,t,n){return[...e.slice(0,t),...n,...e.slice(t)]},t.getListWithRemovedItems=function(e,t){return(0,r.arrayFilter)(e,(e=>!1===t.includes(e)))};var r=n(16363)},99368:(e,t,n)=>{"use strict";t.__esModule=!0,t.getListWithInsertedItems=function(e,t,n,i){const o=n.length?n[0]:void 0;return[...e.slice(0,o),...n.map(((e,t)=>(0,r.isFunction)(i)?i(e,t):i)),...void 0===o?[]:e.slice(o)]},t.getListWithRemovedItems=function(e,t){return(0,i.arrayFilter)(e,((e,n)=>!1===t.includes(n)))};var r=n(63996),i=n(16363)},35943:(e,t)=>{"use strict";function n(e,t,n){e.addEventListener(t,n,!1)}function r(e,t,n){e.removeEventListener(t,n,!1)}function i(e){return e.ownerDocument.defaultView.getComputedStyle(e)}t.__esModule=!0,t.createInputElementResizer=function(e){const t={minHeight:200,maxHeight:300,minWidth:100,maxWidth:300},o=e.body,s=e.createTextNode(""),a=e.createElement("span");let l;function c(){s.textContent=l.value,a.style.position="absolute",a.style.fontSize=i(l).fontSize,a.style.fontFamily=i(l).fontFamily,a.style.whiteSpace="pre",o.appendChild(a);const e=a.clientWidth+2;o.removeChild(a);const n=l.style;n.height=`${t.minHeight}px`,t.minWidth>e?n.width=`${t.minWidth}px`:e>t.maxWidth?n.width=`${t.maxWidth}px`:n.width=`${e}px`;const r=l.scrollHeight?l.scrollHeight-1:0;t.minHeight>r?n.height=`${t.minHeight}px`:t.maxHeight2&&void 0!==arguments[2]&&arguments[2];l=e,function(e){if(e&&e.minHeight)if("inherit"===e.minHeight)t.minHeight=l.clientHeight;else{const n=parseInt(e.minHeight,10);isNaN(n)||(t.minHeight=n)}if(e&&e.maxHeight)if("inherit"===e.maxHeight)t.maxHeight=l.clientHeight;else{const n=parseInt(e.maxHeight,10);isNaN(n)||(t.maxHeight=n)}if(e&&e.minWidth)if("inherit"===e.minWidth)t.minWidth=l.clientWidth;else{const n=parseInt(e.minWidth,10);isNaN(n)||(t.minWidth=n)}if(e&&e.maxWidth)if("inherit"===e.maxWidth)t.maxWidth=l.clientWidth;else{const n=parseInt(e.maxWidth,10);isNaN(n)||(t.maxWidth=n)}a.firstChild||(a.className="autoResize",a.style.display="inline-block",a.appendChild(s))}(r),"TEXTAREA"===l.nodeName&&(l.style.resize="none",l.style.height=`${t.minHeight}px`,l.style.minWidth=`${t.minWidth}px`,l.style.maxWidth=`${t.maxWidth}px`,l.style.overflowY="hidden"),i&&(n(l,"input",c),n(l,"keydown",u)),c()},resize:c,unObserve(){r(l,"input",c),r(l,"keydown",u)}}}},94528:(e,t,n)=>{"use strict";function r(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.__esModule=!0,n(16280);class i{constructor(e){r(this,"data",void 0),r(this,"next",null),r(this,"prev",null),this.data=e}}t.NodeStructure=i,t.default=class{constructor(){r(this,"first",null),r(this,"last",null)}push(e){const t=new i(e);if(null===this.first)this.first=t,this.last=t;else{const e=this.last;this.last=t,t.prev=e,e.next=t}return t}unshift(e){const t=new i(e);if(null===this.first)this.first=t,this.last=t;else{const e=this.first;this.first=t,t.next=e,e.prev=t}}inorder(e){let t=this.first;for(;t;){const n=e(t);if(t===this.last||!0===n)break;t=t.next}}remove(e){if(null===this.first)return!1;let t,n,r=this.first;for(;r;){if(r.data===e)return t=r.next,n=r.prev,t&&(t.prev=n),n&&(n.next=t),r===this.first&&(this.first=t),r===this.last&&(this.last=n),!0;r=r.next}return!1}hasCycle(){let e=this.first,t=this.first;for(;;){if(null===e)return!1;if(e=e.next,null===e)return!1;if(e=e.next,t=t.next,e===t)return!0}}pop(){if(null===this.last)return null;const e=this.last;return this.last=this.last.prev,e}shift(){if(null===this.first)return null;const e=this.first;return this.first=this.first.next,e}recursiveReverse(){if(!this.first)return;!function e(t,n){n&&(e(n,n.next),n.next=t)}(this.first,this.first.next),this.first.next=null;const e=this.first;this.first=this.last,this.last=e}reverse(){if(!this.first||!this.first.next)return;let e,t=this.first.next,n=this.first;for(;t;)e=t.next,t.next=n,n.prev=t,n=t,t=e;this.first.next=null,this.last.prev=null,e=this.first,this.first=n,this.last=e}}},63063:(e,t,n)=>{"use strict";t.__esModule=!0,t.createPriorityMap=function(){let{errorPriorityExists:e,errorPriorityNaN:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const n=new Map;return e=(0,i.isFunction)(e)?e:l,t=(0,i.isFunction)(t)?t:c,{addItem:function(i,o){if(!(0,r.isNumeric)(i))throw new Error(t(i));if(n.has(i))throw new Error(e(i));n.set(i,o)},getItems:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:o;const[t,r]=a.get(e)||a.get(o);return[...n].sort(((e,n)=>e[0]e[1]))}}},n(16280);var r=n(38889),i=n(63996);const o=t.ASC="asc",s=t.DESC="desc",a=new Map([[o,[-1,1]],[s,[1,-1]]]),l=e=>`The priority '${e}' is already declared in a map.`,c=e=>`The priority '${e}' is not a number.`},80297:(e,t,n)=>{"use strict";function r(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.__esModule=!0,t.depthFirstPreOrder=o,n(16280),n(44114);const i=t.TRAVERSAL_DF_PRE="DF-pre-order";function o(e,t){let n=e.call(t,this);for(let r=0;r0&&void 0!==arguments[0]?arguments[0]:this;const t=new u({...e.data});for(let n=0;n1&&void 0!==arguments[1]?arguments[1]:l;if(!c.has(t))throw new Error(`Traversal strategy "${t}" does not exist`);c.get(t).call(this,e,this)}walkUp(e){const t=this,n=r=>{!1!==e.call(t,r)&&null!==r.parent&&n(r.parent)};n(this)}}t.default=u},50346:(e,t,n)=>{"use strict";t.__esModule=!0,t.createUniqueMap=function(){let{errorIdExists:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Map;function n(){return[...t]}function o(e){return t.has(e)}return e=(0,r.isFunction)(e)?e:i,{addItem:function(n,r){if(o(n))throw new Error(e(n));t.set(n,r)},clear:function(){t.clear()},getId:function(e){const[t]=n().find((t=>{let[n,r]=t;return e===r&&n}))||[null];return t},getItem:function(e){return t.get(e)},getItems:n,hasItem:o,removeItem:function(e){return t.delete(e)}}},n(16280);var r=n(63996);const i=e=>`The id '${e}' is already declared in a map.`},53040:(e,t,n)=>{"use strict";t.__esModule=!0,t.createUniqueSet=function(){let{errorItemExists:e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const t=new Set;return e=(0,r.isFunction)(e)?e:i,{addItem:function(n){if(t.has(n))throw new Error(e(n));t.add(n)},clear:function(){t.clear()},getItems:function(){return[...t]}}},n(16280),n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(63996);const i=e=>`'${e}' value is already declared in a unique set.`},65685:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(32993),i=n(16363);function o(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.default=class{constructor(e){o(this,"hot",null),o(this,"container",null),o(this,"injected",!1),o(this,"rows",[]),o(this,"columns",[]),o(this,"samples",null),o(this,"settings",{useHeaders:!0}),this.hot=e}addRow(e,t){if(this.columns.length)throw new Error("Doesn't support multi-dimensional table");this.rows.length||(this.container=this.createContainer(this.hot.rootElement.className));const n={row:e};this.rows.push(n),this.samples=t,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol(e)),this.table.tr.appendChild(this.createRow(e)),this.container.container.appendChild(this.table.fragment),n.table=this.table.table}addColumnHeadersRow(e){if(null!=this.hot.getColHeader(0)){const t={row:-1};this.rows.push(t),this.container=this.createContainer(this.hot.rootElement.className),this.samples=e,this.table=this.createTable(this.hot.table.className),this.table.colGroup.appendChild(this.createColGroupsCol()),this.appendColumnHeadersRow(),this.container.container.appendChild(this.table.fragment),t.table=this.table.table}}addColumn(e,t){if(this.rows.length)throw new Error("Doesn't support multi-dimensional table");this.columns.length||(this.container=this.createContainer(this.hot.rootElement.className));const n={col:e};this.columns.push(n),this.samples=t,this.table=this.createTable(this.hot.table.className),this.getSetting("useHeaders")&&null!==this.hot.getColHeader(e)&&this.hot.view.appendColHeader(e,this.table.th),this.table.tBody.appendChild(this.createCol(e)),this.container.container.appendChild(this.table.fragment),n.table=this.table.table}getHeights(e){this.injected||this.injectTable(),(0,i.arrayEach)(this.rows,(t=>{e(t.row,(0,r.outerHeight)(t.table)-1)}))}getWidths(e){this.injected||this.injectTable(),(0,i.arrayEach)(this.columns,(t=>{const{width:n}=t.table.getBoundingClientRect();e(t.col,Math.ceil(n))}))}setSettings(e){this.settings=e}setSetting(e,t){this.settings||(this.settings={}),this.settings[e]=t}getSettings(){return this.settings}getSetting(e){return this.settings?this.settings[e]:null}createColGroupsCol(e){const t=this.hot.rootDocument.createDocumentFragment();return this.hot.hasRowHeaders()&&t.appendChild(this.createColElement(-1,-1)),this.samples.forEach((n=>{(0,i.arrayEach)(n.strings,(n=>{t.appendChild(this.createColElement(n.col,e))}))})),t}createRow(e){const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),r=t.createElement("th");return this.hot.hasRowHeaders()&&(this.hot.view.appendRowHeader(e,r),n.appendChild(r)),this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.col,o=this.hot.getCellMeta(e,i),s=this.hot.getCellRenderer(o),a=t.createElement("td");a.setAttribute("ghost-table",1),s(this.hot,a,e,i,this.hot.colToProp(i),r.value,o),n.appendChild(a)}))})),n}appendColumnHeadersRow(){const{rootDocument:e}=this.hot,t=e.createDocumentFragment(),n=[];if(this.hot.hasRowHeaders()){const r=e.createElement("th");n.push([-1,r]),t.appendChild(r)}this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.col,o=e.createElement("th");n.push([i,o]),t.appendChild(o)}))})),this.table.tHead.appendChild(t),(0,i.arrayEach)(n,(e=>{const[t,n]=e;this.hot.view.appendColHeader(t,n)}))}createCol(e){const{rootDocument:t}=this.hot,n=t.createDocumentFragment();return this.samples.forEach((r=>{(0,i.arrayEach)(r.strings,(r=>{const i=r.row,o=this.hot.getCellMeta(i,e),s=this.hot.getCellRenderer(o),a=t.createElement("td"),l=t.createElement("tr");a.setAttribute("ghost-table",1),s(this.hot,a,i,e,this.hot.colToProp(e),r.value,o),l.appendChild(a),n.appendChild(l)}))})),n}clean(){this.rows.length=0,this.rows[-1]=void 0,this.columns.length=0,this.samples&&this.samples.clear(),this.samples=null,this.removeTable()}injectTable(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.injected||((e||this.hot.rootElement).appendChild(this.container.fragment),this.injected=!0)}removeTable(){this.injected&&this.container.container.parentNode&&(this.container.container.parentNode.removeChild(this.container.container),this.container=null,this.injected=!1)}createColElement(e,t){const n=this.hot.rootDocument.createElement("col");let r=0;t>=0&&e>=0&&(r=this.hot.getCellMeta(t,e).colspan);let i=this.hot.getColWidth(e);if(r>1)for(let t=e+1;t0&&void 0!==arguments[0]?arguments[0]:"";const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),i=t.createElement("table"),o=t.createElement("thead"),s=t.createElement("tbody"),a=t.createElement("colgroup"),l=t.createElement("tr"),c=t.createElement("th");return this.isVertical()&&i.appendChild(a),this.isHorizontal()&&(l.appendChild(c),o.appendChild(l),i.style.tableLayout="auto",i.style.width="auto"),i.appendChild(o),this.isVertical()&&s.appendChild(l),i.appendChild(s),(0,r.addClass)(i,e),n.appendChild(i),{fragment:n,table:i,tHead:o,tBody:s,colGroup:a,tr:l,th:c}}createContainer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";const{rootDocument:t}=this.hot,n=t.createDocumentFragment(),i=t.createElement("div"),o=`htGhostTable htAutoSize ${e.trim()}`;return(0,r.addClass)(i,o),n.appendChild(i),{fragment:n,container:i}}isVertical(){return!(!this.rows.length||this.columns.length)}isHorizontal(){return!(!this.columns.length||this.rows.length)}}},54957:(e,t,n)=>{"use strict";t.__esModule=!0,t.createPaginator=function(e){let{initialPage:t=-1,size:n=(()=>0),onItemSelect:i=(()=>{}),onClear:o=(()=>{})}=e;const s=new Set;let a=(0,r.clamp)(t,-1,c()-1);function l(e,t){const n=c()-1;return e<0&&(e=n),e>n&&(e=0),s.has(e)?-1:(s.add(e),!1===i(e,!1)&&(e=l(1===t?++e:--e,t)),e)}function c(){return Math.max(n(),0)}return{setCurrentPage:function(e){e>-1&&e0&&(s.clear(),a=l(0,1))},toLastItem:function(){c()>0&&(s.clear(),a=l(c()-1,-1))},toNextItem:function(){c()>0&&(s.clear(),a=l(++a,1))},toPreviousItem:function(){c()>0&&(s.clear(),a=l(--a,-1))},getSize:c,clear:function(){s.clear(),a=t,o()}}},n(43375),n(39225),n(13972),n(99209),n(25714),n(17561),n(66197);var r=n(38889)},47901:(e,t,n)=>{"use strict";t.__esModule=!0,t._dataToHTML=function(e){const t=e.length,n=[""];for(let i=0;i");for(let e=0;e/g,">").replace(/((\r\n|\n)?|\r\n|\n)/g,"
\r\n").replace(/\x20{2,}/gi,(e=>`${" ".repeat(e.length-1)} `)).replace(/\t/gi," ");a.push(`
`)}n.push("",...a,""),i+1===t&&n.push("")}return n.push("
${n}
"),n.join("")},t.htmlToGridSettings=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document;const n={},r=t.createDocumentFragment(),s=t.createElement("div");r.appendChild(s);let a=e;if("string"==typeof a){const e=a.replace(/]*?>([\s\S]*?)<\/\s*td>/g,(e=>{const t=e.match(/]*?>/g)[0];return`${t}${e.substring(t.length,e.lastIndexOf("<")).trim().replaceAll(/\n\s+/g," ").replaceAll(//g,"\n").replace("\n","").replaceAll(/<\/(.*)>\s+$/gm,"").replace(/(<(?!br)([^>]+)>)/gi,"").replaceAll(/^ $/gm,"")}`}));s.insertAdjacentHTML("afterbegin",`${e}`),a=s.querySelector("table")}if(!a||!function(e){return"TABLE"===(e&&e.nodeName||"")}(a))return;const l=s.querySelector('meta[name$="enerator"]'),c=null!==a.querySelector("tbody th"),u=a.querySelector("tr"),d=u?Array.from(u.cells).reduce(((e,t)=>e+t.colSpan),0)-(c?1:0):0,h=a.tFoot&&Array.from(a.tFoot.rows)||[],f=[];let p=!1,m=0,g=0;if(a.tHead){const e=Array.from(a.tHead.rows).filter((e=>{const t=null!==e.querySelector("td");return t&&f.push(e),!t}));m=e.length,p=m>0,m>1?n.nestedHeaders=Array.from(e).reduce(((e,t)=>{const n=Array.from(t.cells).reduce(((e,t,n)=>{if(c&&0===n)return e;const{colSpan:r,innerHTML:i}=t,o=r>1?{label:i,colspan:r}:i;return e.push(o),e}),[]);return e.push(n),e}),[]):p&&(n.colHeaders=Array.from(e[0].children).reduce(((e,t,n)=>(c&&0===n||e.push(t.innerHTML),e)),[]))}f.length&&(n.fixedRowsTop=f.length),h.length&&(n.fixedRowsBottom=h.length);const y=[...f,...Array.from(a.tBodies).reduce(((e,t)=>(e.push(...Array.from(t.rows)),e)),[]),...h];g=y.length;const b=new Array(g);for(let e=0;evoid 0===e));if("TD"===s){if(c>1||u>1){for(let t=e;t[\r\n]?[\x20]{0,3}/gim,"\r\n"):a.replace(/[\r\n]?/gim,"\r\n"),b[e][d]=t.replace(o,(e=>i[e]))}else v.push(a)}}return _.length&&(n.mergeCells=_),v.length&&(n.rowHeaders=v),b.length&&(n.data=b),n},t.instanceToHTML=function(e){const t=e.hasColHeaders(),n=e.hasRowHeaders(),i=[t?-1:0,n?-1:0,e.countRows()-1,e.countCols()-1],o=e.getData(...i),s=o.length,a=s>0?o[0].length:0,l=["","
"],c=t?["",""]:[],u=["",""],d=n?1:0,h=t?1:0;for(let i=0;i${e.getColHeader(t-d)}`;else if(a)c=`${e.getRowHeader(i-h)}`;else{const n=o[i][t],{hidden:s,rowspan:a,colspan:l}=e.getCellMeta(i-h,t-d);if(!s){const e=[];if(a&&e.push(`rowspan="${a}"`),l&&e.push(`colspan="${l}"`),(0,r.isEmpty)(n))c=``;else{const t=n.toString().replace("<","<").replace(">",">").replace(/((\r\n|\n)?|\r\n|\n)/g,"
\r\n").replace(/\x20/gi," ").replace(/\t/gi," ");c=`${t}`}}}l.push(c)}const f=["",...l,""].join("");s?c.splice(1,0,f):u.splice(-1,0,f)}return l.splice(1,0,c.join(""),u.join("")),l.join("")},n(44114),n(79978);var r=n(74713);const i={" ":" ","&":"&","<":"<",">":">"},o=new RegExp(Object.keys(i).map((e=>`(${e})`)).join("|"),"gi")},62987:(e,t)=>{"use strict";t.__esModule=!0,t.hasValidParameter=function(e){return e===r},t.isRootInstance=function(e){return n.has(e)},t.registerAsRootInstance=function(e){n.set(e,!0)};const n=t.holder=new WeakMap,r=t.rootInstanceSymbol=Symbol("rootInstance")},96992:(e,t,n)=>{"use strict";t.__esModule=!0,n(16280),n(44114);var r=n(56427),i=n(38889),o=n(74713);function s(e,t,n){var r;return(t="symbol"==typeof(r=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,"string");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t))?r:r+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class a{static get SAMPLE_COUNT(){return 3}constructor(e){s(this,"samples",null),s(this,"dataFactory",null),s(this,"customSampleCount",null),s(this,"allowDuplicates",!1),this.dataFactory=e}getSampleCount(){return this.customSampleCount?this.customSampleCount:a.SAMPLE_COUNT}setSampleCount(e){this.customSampleCount=e}setAllowDuplicates(e){this.allowDuplicates=e}generateRowSamples(e,t){return this.generateSamples("row",t,e)}generateColumnSamples(e,t){return this.generateSamples("col",t,e)}generateSamples(e,t,n){const r=new Map,{from:o,to:s}="number"==typeof n?{from:n,to:n}:n;return(0,i.rangeEach)(o,s,(n=>{const i=this.generateSample(e,t,n);r.set(n,i)})),r}generateSample(e,t,n){if("row"!==e&&"col"!==e)throw new Error("Unsupported sample type");const s=new Map,a="row"===e?"col":"row",l=[];return(0,i.rangeEach)(t.from,t.to,(t=>{const i="row"===e?this.dataFactory(n,t):this.dataFactory(t,n);if(!1===i)return;const{value:c,bundleSeed:u}=i,d="string"==typeof u&&u.length>0;let h;h=d?u:(0,r.isObject)(c)?`${Object.keys(c).length}`:Array.isArray(c)?`${c.length}`:`${(0,o.stringify)(c).length}`,s.has(h)||s.set(h,{needed:this.getSampleCount(),strings:[]});const f=s.get(h);f.needed&&(!(l.indexOf(c)>-1)||this.allowDuplicates||d)&&(f.strings.push({value:c,[a]:t}),l.push(c),f.needed-=1)})),s}}t.default=a},27419:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"common";n.has(e)||n.set(e,new Map);const t=n.get(e);return{register:function(e,n){t.set(e,n)},getItem:function(e){return t.get(e)},hasItem:function(e){return t.has(e)},getNames:function(){return[...t.keys()]},getValues:function(){return[...t.values()]}}};const n=t.collection=new Map},31113:(e,t)=>{"use strict";t.__esModule=!0,t.autocompleteValidator=r;const n=t.VALIDATOR_TYPE="autocomplete";function r(e,t){let n=e;null==n&&(n=""),this.allowEmpty&&""===n?t(!0):this.strict&&this.source?"function"==typeof this.source?this.source(n,i(n,t)):i(n,t)(this.source):t(!0)}function i(e,t){const n=e;return function(e){let r=!1;for(let t=0,i=e.length;t{"use strict";t.__esModule=!0;var r=n(31113);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.autocompleteValidator=r.autocompleteValidator},1745:(e,t,n)=>{"use strict";t.__esModule=!0,t.correctFormat=u,t.dateValidator=c;var r,i=(r=n(95093))&&r.__esModule?r:{default:r},o=n(50394),s=n(56163),a=n(53176);const l=t.VALIDATOR_TYPE="date";function c(e,t){const n=(0,o.getEditorInstance)(s.EDITOR_TYPE,this.instance);let r=e,a=!0;null==r&&(r="");let l=(0,i.default)(r,this.dateFormat||n.defaultDateFormat,!0).isValid(),c=(0,i.default)(new Date(r)).isValid()||l;if(this.allowEmpty&&""===r&&(c=!0,l=!0),c||(a=!1),!c&&l&&(a=!0),c&&!l)if(!0===this.correctFormat){const e=u(r,this.dateFormat);this.instance.setDataAtCell(this.visualRow,this.visualCol,e,"dateValidator"),a=!0}else a=!1;t(a)}function u(e,t){const n=(0,i.default)((0,a.getNormalizedDate)(e)),r=(0,i.default)(e,t),o=e.search(/[A-z]/g)>-1;let s;return s=n.isValid()&&n.format("x")===r.format("x")||!r.isValid()||o?n:r,s.format(t)}c.VALIDATOR_TYPE=l},5615:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(1745);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.correctFormat=r.correctFormat,t.dateValidator=r.dateValidator},99457:(e,t,n)=>{"use strict";t.__esModule=!0,t.dropdownValidator=o;var r=n(31113);const i=t.VALIDATOR_TYPE="dropdown";function o(e,t){r.autocompleteValidator.apply(this,[e,t])}o.VALIDATOR_TYPE=i},69072:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(99457);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.dropdownValidator=r.dropdownValidator},58130:(e,t,n)=>{"use strict";t.__esModule=!0,t.registerAllValidators=function(){(0,l.registerValidator)(r.autocompleteValidator),(0,l.registerValidator)(o.dropdownValidator),(0,l.registerValidator)(i.dateValidator),(0,l.registerValidator)(s.numericValidator),(0,l.registerValidator)(a.timeValidator)};var r=n(12023);t.autocompleteValidator=r.autocompleteValidator,t.AUTOCOMPLETE_VALIDATOR=r.VALIDATOR_TYPE;var i=n(5615);t.dateValidator=i.dateValidator,t.DATE_VALIDATOR=i.VALIDATOR_TYPE;var o=n(69072);t.dropdownValidator=o.dropdownValidator,t.DROPDOWN_VALIDATOR=o.VALIDATOR_TYPE;var s=n(8268);t.numericValidator=s.numericValidator,t.NUMERIC_VALIDATOR=s.VALIDATOR_TYPE;var a=n(25008);t.timeValidator=a.timeValidator,t.TIME_VALIDATOR=a.VALIDATOR_TYPE;var l=n(34899);t.registerValidator=l.registerValidator,t.getRegisteredValidatorNames=l.getRegisteredValidatorNames,t.getRegisteredValidators=l.getRegisteredValidators,t.getValidator=l.getValidator,t.hasValidator=l.hasValidator},8268:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(18765);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.numericValidator=r.numericValidator},18765:(e,t,n)=>{"use strict";t.__esModule=!0,t.numericValidator=o;var r=n(38889);const i=t.VALIDATOR_TYPE="numeric";function o(e,t){let n=e;null==n&&(n=""),this.allowEmpty&&""===n?t(!0):t(""!==n&&(0,r.isNumeric)(e))}o.VALIDATOR_TYPE=i},34899:(e,t,n)=>{"use strict";t.__esModule=!0,t.getValidator=function(e){if("function"==typeof e)return e;if(!a(e))throw Error(`No registered validator found under "${e}" name`);return s(e)},t.registerValidator=function(e,t){"string"!=typeof e&&(e=(t=e).VALIDATOR_TYPE),o(e,t)},n(16280);var r,i=(r=n(27419))&&r.__esModule?r:{default:r};const{register:o,getItem:s,hasItem:a,getNames:l,getValues:c}=(0,i.default)("validators");t.getRegisteredValidators=c,t.getRegisteredValidatorNames=l,t.hasValidator=a},25008:(e,t,n)=>{"use strict";t.__esModule=!0;var r=n(52365);t.VALIDATOR_TYPE=r.VALIDATOR_TYPE,t.timeValidator=r.timeValidator},52365:(e,t,n)=>{"use strict";t.__esModule=!0,t.timeValidator=a;var r,i=(r=n(95093))&&r.__esModule?r:{default:r};const o=["YYYY-MM-DDTHH:mm:ss.SSSZ","X","x"],s=t.VALIDATOR_TYPE="time";function a(e,t){const n=this.timeFormat||"h:mm:ss a";let r=!0,s=e;null===s&&(s=""),s=/^\d{3,}$/.test(s)?parseInt(s,10):s;const a=/^\d{1,2}$/.test(s);a&&(s+=":00");const l=(0,i.default)(s,o,!0).isValid()?(0,i.default)(s):(0,i.default)(s,n);let c=l.isValid(),u=(0,i.default)(s,n,!0).isValid()&&!a;if(this.allowEmpty&&""===s&&(c=!0,u=!0),c||(r=!1),!c&&u&&(r=!0),c&&!u)if(!0===this.correctFormat){const e=l.format(n);this.instance.setDataAtCell(this.visualRow,this.visualCol,e,"timeValidator"),r=!0}else r=!1;t(r)}a.VALIDATOR_TYPE=s},30869:(e,t,n)=>{var r;r=function(){return function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,(function(e){return i(t[s][1][e]||e)}),c,c.exports,e,t,n,r)}return n[s].exports}for(var o=void 0,s=0;s0&&(n=s.concat(n),s=[]),y.map(function(e){return function(e){return k(e,"w:pStyle","Paragraph",S.findParagraphStyleById)}(e).map((function(t){return{type:"paragraphProperties",styleId:t.styleId,styleName:t.name,alignment:e.firstOrEmpty("w:jc").attributes["w:val"],numbering:u(t.styleId,e.firstOrEmpty("w:numPr"),x),indent:T(e.firstOrEmpty("w:ind"))}}))}(t),C(n),(function(e,t){return new o.Paragraph(t,e)})).insertExtra()},"w:r":function(e){return y.map(function(e){return function(e){return k(e,"w:rStyle","Run",S.findCharacterStyleById)}(e).map((function(t){var n,r=e.firstOrEmpty("w:sz").attributes["w:val"],i=/^[0-9]+$/.test(r)?parseInt(r,10)/2:null;return{type:"runProperties",styleId:t.styleId,styleName:t.name,verticalAlignment:e.firstOrEmpty("w:vertAlign").attributes["w:val"],font:e.firstOrEmpty("w:rFonts").attributes["w:ascii"],fontSize:i,isBold:D(e.first("w:b")),isUnderline:E(e.first("w:u")),isItalic:D(e.first("w:i")),isStrikethrough:D(e.first("w:strike")),isAllCaps:D(e.first("w:caps")),isSmallCaps:D(e.first("w:smallCaps")),highlight:(n=e.firstOrEmpty("w:highlight").attributes["w:val"],n&&"none"!==n?n:null)}}))}(e.firstOrEmpty("w:rPr")),C(e.children),(function(e,n){var r,s=(r=i.last(t.filter((function(e){return"hyperlink"===e.type}))))?r.options:null;return null!==s&&(n=[new o.Hyperlink(n,s)]),new o.Run(n,e)}))},"w:fldChar":function(e){var r=e.attributes["w:fldCharType"];if("begin"===r)t.push(R),n=[];else if("end"===r)t.pop();else if("separate"===r){var i=function(e){var t=/\s*HYPERLINK "(.*)"/.exec(e);if(t)return{href:t[1]};var n=/\s*HYPERLINK\s+\\l\s+"(.*)"/.exec(e);return n?{anchor:n[1]}:null}(n.join("")),o=null===i?R:{type:"hyperlink",options:i};t.pop(),t.push(o)}return p()},"w:instrText":function(e){return n.push(e.text()),p()},"w:t":function(e){return m(new o.Text(e.text()))},"w:tab":function(e){return m(new o.Tab)},"w:noBreakHyphen":function(){return m(new o.Text("‑"))},"w:softHyphen":function(e){return m(new o.Text("­"))},"w:sym":function(e){var t=e.attributes["w:font"],n=e.attributes["w:char"],i=r.hex(t,n);return null==i&&/^F0..$/.test(n)&&(i=r.hex(t,n.substring(2))),null==i?f([a("A w:sym element with an unsupported character was ignored: char "+n+" in font "+t)]):m(new o.Text(i.string))},"w:hyperlink":function(e){var t=e.attributes["r:id"],n=e.attributes["w:anchor"];return C(e.children).map((function(r){function s(t){var n=e.attributes["w:tgtFrame"]||null;return new o.Hyperlink(r,i.extend({targetFrame:n},t))}if(t){var a=c.findTargetByRelationshipId(t);return n&&(a=l.replaceFragment(a,n)),s({href:a})}return n?s({anchor:n}):r}))},"w:tbl":function(e){var t=function(e){return function(e){return k(e,"w:tblStyle","Table",S.findTableStyleById)}(e).map((function(e){return{styleId:e.styleId,styleName:e.name}}))}(e.firstOrEmpty("w:tblPr"));return C(e.children).flatMap(I).flatMap((function(e){return t.map((function(t){return o.Table(e,t)}))}))},"w:tr":function(e){var t=!!e.firstOrEmpty("w:trPr").first("w:tblHeader");return C(e.children).map((function(e){return o.TableRow(e,{isHeader:t})}))},"w:tc":function(e){return C(e.children).map((function(t){var n=e.firstOrEmpty("w:tcPr"),r=n.firstOrEmpty("w:gridSpan").attributes["w:val"],i=r?parseInt(r,10):1,s=o.TableCell(t,{colSpan:i});return s._vMerge=function(e){var t=e.first("w:vMerge");if(t){var n=t.attributes["w:val"];return"continue"===n||!n}return null}(n),s}))},"w:footnoteReference":O("footnote"),"w:endnoteReference":O("endnote"),"w:commentReference":function(e){return m(o.commentReference({commentId:e.attributes["w:id"]}))},"w:br":function(e){var t=e.attributes["w:type"];return null==t||"textWrapping"===t?m(o.lineBreak):"page"===t?m(o.pageBreak):"column"===t?m(o.columnBreak):f([a("Unsupported break type: "+t)])},"w:bookmarkStart":function(e){var t=e.attributes["w:name"];return"_GoBack"===t?p():m(new o.BookmarkStart({name:t}))},"mc:AlternateContent":function(e){return L(e.first("mc:Fallback"))},"w:sdt":function(e){return C(e.firstOrEmpty("w:sdtContent").children)},"w:ins":L,"w:object":L,"w:smartTag":L,"w:drawing":L,"w:pict":function(e){return L(e).toExtra()},"v:roundrect":L,"v:shape":L,"v:textbox":L,"w:txbxContent":L,"wp:inline":P,"wp:anchor":P,"v:imagedata":function(e){var t=e.attributes["r:id"];return t?j(H(t),e.attributes["o:title"]):f([a("A v:imagedata element without a relationship ID was ignored")])},"v:group":L,"v:rect":L};return{readXmlElement:M,readXmlElements:C};function I(e){if(i.any(e,(function(e){return e.type!==o.types.tableRow})))return g(e,[a("unexpected non-row element in table, cell merging may be incorrect")]);if(i.any(e,(function(e){return i.any(e.children,(function(e){return e.type!==o.types.tableCell}))})))return g(e,[a("unexpected non-cell element in table row, cell merging may be incorrect")]);var t={};return e.forEach((function(e){var n=0;e.children.forEach((function(e){e._vMerge&&t[n]?t[n].rowSpan++:(t[n]=e,e._vMerge=!1),n+=e.colSpan}))})),e.forEach((function(e){e.children=e.children.filter((function(e){return!e._vMerge})),e.children.forEach((function(e){delete e._vMerge}))})),m(e)}function P(e){return b(e.getElementsByTagName("a:graphic").getElementsByTagName("a:graphicData").getElementsByTagName("pic:pic").getElementsByTagName("pic:blipFill").getElementsByTagName("a:blip").map(N.bind(null,e)))}function N(e,t){var n,r=e.first("wp:docPr").attributes,i=null==(n=r.descr)||/^\s*$/.test(n)?r.title:r.descr,o=function(e){var t=e.attributes["r:embed"],n=e.attributes["r:link"];if(t)return H(t);if(n){var r=c.findTargetByRelationshipId(n);return{path:r,read:w.read.bind(w,r)}}return null}(t);return null===o?f([a("Could not find image file for a:blip element")]):j(o,i)}function H(e){var t=l.uriToZipEntryName("word",c.findTargetByRelationshipId(e));return{path:t,read:v.read.bind(v,t)}}function j(e,t){var n=_.findContentType(e.path);return g(o.Image({readImage:e.read,altText:t,contentType:n}),d[n]?[]:a("Image of type "+n+" is unlikely to display in web browsers"))}}function u(e,t,n){var r=t.firstOrEmpty("w:ilvl").attributes["w:val"],i=t.firstOrEmpty("w:numId").attributes["w:val"];if(void 0!==r&&void 0!==i)return n.findLevel(i,r);if(null!=e){var o=n.findLevelByParagraphStyleId(e);if(null!=o)return o}return null}var d={"image/png":!0,"image/gif":!0,"image/jpeg":!0,"image/svg+xml":!0,"image/tiff":!0},h={"office-word:wrap":!0,"v:shadow":!0,"v:shapetype":!0,"w:annotationRef":!0,"w:bookmarkEnd":!0,"w:sectPr":!0,"w:proofErr":!0,"w:lastRenderedPageBreak":!0,"w:commentRangeStart":!0,"w:commentRangeEnd":!0,"w:del":!0,"w:footnoteRef":!0,"w:endnoteRef":!0,"w:pPr":!0,"w:rPr":!0,"w:tblPr":!0,"w:tblGrid":!0,"w:trPr":!0,"w:tcPr":!0};function f(e){return new y(null,null,e)}function p(){return new y(null)}function m(e){return new y(e)}function g(e,t){return new y(e,null,t)}function y(e,t,n){this.value=e||[],this.extra=t||[],this._result=new s({element:this.value,extra:t},n),this.messages=this._result.messages}function b(e){var t=s.combine(i.pluck(e,"_result"));return new y(i.flatten(i.pluck(t.value,"element")),i.filter(i.flatten(i.pluck(t.value,"extra")),v),t.messages)}function _(e,t){return i.flatten([e,t])}function v(e){return e}y.prototype.toExtra=function(){return new y(null,_(this.extra,this.value),this.messages)},y.prototype.insertExtra=function(){var e=this.extra;return e&&e.length?new y(_(this.value,e),null,this.messages):this},y.prototype.map=function(e){var t=this._result.map((function(t){return e(t.element)}));return new y(t.value,this.extra,t.messages)},y.prototype.flatMap=function(e){var t=this._result.flatMap((function(t){return e(t.element)._result}));return new y(t.value.element,_(this.extra,t.value.extra),t.messages)},y.map=function(e,t,n){return new y(n(e.value,t.value),_(e.extra,t.extra),e.messages.concat(t.messages))}},{"../documents":4,"../results":25,"./uris":16,"dingbat-to-unicode":85,underscore:102}],6:[function(e,t,n){var r=e("../documents"),i=e("../results").Result;n.createCommentsReader=function(e){function t(t){var n=t.attributes["w:id"];function i(e){return(t.attributes[e]||"").trim()||null}return e.readXmlElements(t.children).map((function(e){return r.comment({commentId:n,body:e,authorName:i("w:author"),authorInitials:i("w:initials")})}))}return function(e){return i.combine(e.getElementsByTagName("w:comment").map(t))}}},{"../documents":4,"../results":25}],7:[function(e,t,n){n.readContentTypesFromXml=function(e){var t={},n={};return e.children.forEach((function(e){if("content-types:Default"===e.name&&(t[e.attributes.Extension]=e.attributes.ContentType),"content-types:Override"===e.name){var r=e.attributes.PartName;"/"===r.charAt(0)&&(r=r.substring(1)),n[r]=e.attributes.ContentType}})),i(n,t)};var r={png:"png",gif:"gif",jpeg:"jpeg",jpg:"jpeg",tif:"tiff",tiff:"tiff",bmp:"bmp"};function i(e,t){return{findContentType:function(n){var i=e[n];if(i)return i;var o=n.split("."),s=o[o.length-1];if(t.hasOwnProperty(s))return t[s];var a=r[s.toLowerCase()];return a?"image/"+a:null}}}n.defaultContentTypes=i({},{})},{}],8:[function(e,t,n){n.DocumentXmlReader=function(e){var t=e.bodyReader;return{convertXmlToDocument:function(n){var o=n.first("w:body");if(null==o)throw new Error("Could not find the body element: are you sure this is a docx file?");var s=t.readXmlElements(o.children).map((function(t){return new r.Document(t,{notes:e.notes,comments:e.comments})}));return new i(s.value,s.messages)}}};var r=e("../documents"),i=e("../results").Result},{"../documents":4,"../results":25}],9:[function(e,t,n){n.read=function(e,t){return t=t||{},r.props({contentTypes:x(e),partPaths:y(e),docxFile:e,files:t.path?g.relativeToFile(t.path):new g(null)}).also((function(t){return{styles:(n=e,r=t.partPaths.styles,_({filename:r,readElement:f.readStylesXml,defaultValue:f.defaultStyles})(n))};var n,r})).also((function(t){return{numbering:(n=e,r=t.partPaths.numbering,i=t.styles,_({filename:r,readElement:function(e){return h.readNumberingXml(e,{styles:i})},defaultValue:h.defaultNumbering})(n))};var n,r,i})).also((function(e){return{footnotes:v(e.partPaths.footnotes,e,(function(e,t){return t?p.createFootnotesReader(e)(t):new o([])})),endnotes:v(e.partPaths.endnotes,e,(function(e,t){return t?p.createEndnotesReader(e)(t):new o([])})),comments:v(e.partPaths.comments,e,(function(e,t){return t?m.createCommentsReader(e)(t):new o([])}))}})).also((function(e){return{notes:e.footnotes.flatMap((function(t){return e.endnotes.map((function(e){return new i.Notes(t.concat(e))}))}))}})).then((function(e){return v(e.partPaths.mainDocument,e,(function(t,n){return e.notes.flatMap((function(r){return e.comments.flatMap((function(e){return new c({bodyReader:t,notes:r,comments:e}).convertXmlToDocument(n)}))}))}))}))},n._findPartPaths=y;var r=e("../promises"),i=e("../documents"),o=e("../results").Result,s=e("../zipfile"),a=e("./office-xml-reader").readXmlFromZipFile,l=e("./body-reader").createBodyReader,c=e("./document-xml-reader").DocumentXmlReader,u=e("./relationships-reader"),d=e("./content-types-reader"),h=e("./numbering-xml"),f=e("./styles-reader"),p=e("./notes-reader"),m=e("./comments-reader"),g=e("./files").Files;function y(e){return S(e).then((function(t){var n=b({docxFile:e,relationships:t,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",basePath:"",fallbackPath:"word/document.xml"});if(!e.exists(n))throw new Error("Could not find main document part. Are you sure this is a valid .docx file?");return _({filename:w(n),readElement:u.readRelationships,defaultValue:u.defaultValue})(e).then((function(t){function r(r){return b({docxFile:e,relationships:t,relationshipType:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/"+r,basePath:s.splitPath(n).dirname,fallbackPath:"word/"+r+".xml"})}return{mainDocument:n,comments:r("comments"),endnotes:r("endnotes"),footnotes:r("footnotes"),numbering:r("numbering"),styles:r("styles")}}))}))}function b(e){var t=e.docxFile,n=e.relationships,r=e.relationshipType,i=e.basePath,o=e.fallbackPath,a=n.findTargetsByType(r).map((function(e){return"/","/"===(t=s.joinPath(i,e)).substring(0,1)?t.substring(1):t;var t})).filter((function(e){return t.exists(e)}));return 0===a.length?o:a[0]}function _(e){return function(t){return a(t,e.filename).then((function(t){return t?e.readElement(t):e.defaultValue}))}}function v(e,t,n){return _({filename:w(e),readElement:u.readRelationships,defaultValue:u.defaultValue})(t.docxFile).then((function(r){var i=new l({relationships:r,contentTypes:t.contentTypes,docxFile:t.docxFile,numbering:t.numbering,styles:t.styles,files:t.files});return a(t.docxFile,e).then((function(e){return n(i,e)}))}))}function w(e){var t=s.splitPath(e);return s.joinPath(t.dirname,"_rels",t.basename+".rels")}var x=_({filename:"[Content_Types].xml",readElement:d.readContentTypesFromXml,defaultValue:d.defaultContentTypes}),S=_({filename:"_rels/.rels",readElement:u.readRelationships,defaultValue:u.defaultValue})},{"../documents":4,"../promises":23,"../results":25,"../zipfile":40,"./body-reader":5,"./comments-reader":6,"./content-types-reader":7,"./document-xml-reader":8,"./files":1,"./notes-reader":10,"./numbering-xml":11,"./office-xml-reader":12,"./relationships-reader":13,"./styles-reader":15}],10:[function(e,t,n){var r=e("../documents"),i=e("../results").Result;function o(e,t){function n(e){var t=e.attributes["w:type"];return"continuationSeparator"!==t&&"separator"!==t}function o(n){var i=n.attributes["w:id"];return t.readXmlElements(n.children).map((function(t){return r.Note({noteType:e,noteId:i,body:t})}))}return function(t){return i.combine(t.getElementsByTagName("w:"+e).filter(n).map(o))}}n.createFootnotesReader=o.bind(this,"footnote"),n.createEndnotesReader=o.bind(this,"endnote")},{"../documents":4,"../results":25}],11:[function(e,t,n){var r=e("underscore");function i(e,t,n){var i=r.flatten(r.values(t).map((function(e){return r.values(e.levels)}))),o=r.indexBy(i.filter((function(e){return null!=e.paragraphStyleId})),"paragraphStyleId");return{findLevel:function r(i,o){var s=e[i];if(s){var a=t[s.abstractNumId];return a?null==a.numStyleLink?t[s.abstractNumId].levels[o]:r(n.findNumberingStyleById(a.numStyleLink).numId,o):null}return null},findLevelByParagraphStyleId:function(e){return o[e]||null}}}n.readNumberingXml=function(e,t){if(!t||!t.styles)throw new Error("styles is missing");var n=function(e){var t={};return e.getElementsByTagName("w:abstractNum").forEach((function(e){var n=e.attributes["w:abstractNumId"];t[n]=function(e){var t={};e.getElementsByTagName("w:lvl").forEach((function(e){var n=e.attributes["w:ilvl"],r=e.firstOrEmpty("w:numFmt").attributes["w:val"],i=e.firstOrEmpty("w:pStyle").attributes["w:val"];t[n]={isOrdered:"bullet"!==r,level:n,paragraphStyleId:i}}));var n=e.firstOrEmpty("w:numStyleLink").attributes["w:val"];return{levels:t,numStyleLink:n}}(e)})),t}(e);return new i(function(e){var t={};return e.getElementsByTagName("w:num").forEach((function(e){var n=e.attributes["w:numId"],r=e.first("w:abstractNumId").attributes["w:val"];t[n]={abstractNumId:r}})),t}(e),n,t.styles)},n.Numbering=i,n.defaultNumbering=new i({},{})},{underscore:102}],12:[function(e,t,n){var r=e("underscore"),i=e("../promises"),o=e("../xml");n.read=a,n.readXmlFromZipFile=function(e,t){return e.exists(t)?e.read(t,"utf-8").then(l).then(a):i.resolve(null)};var s={"http://schemas.openxmlformats.org/wordprocessingml/2006/main":"w","http://schemas.openxmlformats.org/officeDocument/2006/relationships":"r","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing":"wp","http://schemas.openxmlformats.org/drawingml/2006/main":"a","http://schemas.openxmlformats.org/drawingml/2006/picture":"pic","http://purl.oclc.org/ooxml/wordprocessingml/main":"w","http://purl.oclc.org/ooxml/officeDocument/relationships":"r","http://purl.oclc.org/ooxml/drawingml/wordprocessingDrawing":"wp","http://purl.oclc.org/ooxml/drawingml/main":"a","http://purl.oclc.org/ooxml/drawingml/picture":"pic","http://schemas.openxmlformats.org/package/2006/content-types":"content-types","http://schemas.openxmlformats.org/package/2006/relationships":"relationships","http://schemas.openxmlformats.org/markup-compatibility/2006":"mc","urn:schemas-microsoft-com:vml":"v","urn:schemas-microsoft-com:office:word":"office-word"};function a(e){return o.readString(e,s).then((function(e){return c(e)[0]}))}function l(e){return e.replace(/^\uFEFF/g,"")}function c(e){return"element"===e.type?"mc:AlternateContent"===e.name?e.first("mc:Fallback").children:(e.children=r.flatten(e.children.map(c,!0)),[e]):[e]}},{"../promises":23,"../xml":35,underscore:102}],13:[function(e,t,n){function r(e){var t={};e.forEach((function(e){t[e.relationshipId]=e.target}));var n={};return e.forEach((function(e){n[e.type]||(n[e.type]=[]),n[e.type].push(e.target)})),{findTargetByRelationshipId:function(e){return t[e]},findTargetsByType:function(e){return n[e]||[]}}}n.readRelationships=function(e){var t=[];return e.children.forEach((function(e){if("relationships:Relationship"===e.name){var n={relationshipId:e.attributes.Id,target:e.attributes.Target,type:e.attributes.Type};t.push(n)}})),new r(t)},n.defaultValue=new r([]),n.Relationships=r},{}],14:[function(e,t,n){var r=e("underscore"),i=e("../promises"),o=e("../xml");n.writeStyleMap=function(e,t){return e.write(a,t),function(e){var t="word/_rels/document.xml.rels",n="http://schemas.openxmlformats.org/package/2006/relationships",r="{"+n+"}Relationship";return e.read(t,"utf8").then(o.readString).then((function(i){c(i.children,r,"Id",{Id:"rMammothStyleMap",Type:s,Target:l});var a={"":n};return e.write(t,o.writeString(i,a))}))}(e).then((function(){return function(e){var t="[Content_Types].xml",n="http://schemas.openxmlformats.org/package/2006/content-types",r="{"+n+"}Override";return e.read(t,"utf8").then(o.readString).then((function(i){c(i.children,r,"PartName",{PartName:l,ContentType:"text/prs.mammoth.style-map"});var s={"":n};return e.write(t,o.writeString(i,s))}))}(e)}))},n.readStyleMap=function(e){return e.exists(a)?e.read(a,"utf8"):i.resolve(null)};var s="http://schemas.zwobble.org/mammoth/style-map",a="mammoth/style-map",l="/"+a;function c(e,t,n,i){var s=r.find(e,(function(e){return e.name===t&&e.attributes[n]===i[n]}));s?s.attributes=i:e.push(o.element(t,i))}},{"../promises":23,"../xml":35,underscore:102}],15:[function(e,t,n){function r(e,t,n,r){return{findParagraphStyleById:function(t){return e[t]},findCharacterStyleById:function(e){return t[e]},findTableStyleById:function(e){return n[e]},findNumberingStyleById:function(e){return r[e]}}}n.readStylesXml=function(e){var t={},n={},i={},o={},s={paragraph:t,character:n,table:i};return e.getElementsByTagName("w:style").forEach((function(e){var t=function(e){var t=e.attributes["w:type"],n=e.attributes["w:styleId"],r=function(e){var t=e.first("w:name");return t?t.attributes["w:val"]:null}(e);return{type:t,styleId:n,name:r}}(e);if("numbering"===t.type)o[t.styleId]=function(e){return{numId:e.firstOrEmpty("w:pPr").firstOrEmpty("w:numPr").firstOrEmpty("w:numId").attributes["w:val"]}}(e);else{var n=s[t.type];n&&(n[t.styleId]=t)}})),new r(t,n,i,o)},n.Styles=r,n.defaultStyles=new r({},{}),r.EMPTY=new r({},{},{},{})},{}],16:[function(e,t,n){n.uriToZipEntryName=function(e,t){return"/"===t.charAt(0)?t.substr(1):e+"/"+t},n.replaceFragment=function(e,t){var n=e.indexOf("#");return-1!==n&&(e=e.substring(0,n)),e+"#"+t}},{}],17:[function(e,t,n){var r=e("../styles/html-paths");function i(e,t){return{type:"element",tag:e,children:t||[]}}n.freshElement=function(e,t,n){return i(r.element(e,t,{fresh:!0}),n)},n.nonFreshElement=function(e,t,n){return i(r.element(e,t,{fresh:!1}),n)},n.elementWithTag=i,n.text=function(e){return{type:"text",value:e}},n.forceWrite={type:"forceWrite"};var o={br:!0,hr:!0,img:!0};n.isVoidElement=function(e){return 0===e.children.length&&o[e.tag.tagName]}},{"../styles/html-paths":28}],18:[function(e,t,n){var r=e("./ast");function i(e,t){t.forEach((function(t){!function(e,t){o[t.type](e,t)}(e,t)}))}n.freshElement=r.freshElement,n.nonFreshElement=r.nonFreshElement,n.elementWithTag=r.elementWithTag,n.text=r.text,n.forceWrite=r.forceWrite,n.simplify=e("./simplify");var o={element:function(e,t){r.isVoidElement(t)?e.selfClosing(t.tag.tagName,t.tag.attributes):(e.open(t.tag.tagName,t.tag.attributes),i(e,t.children),e.close(t.tag.tagName))},text:function(e,t){e.text(t.value)},forceWrite:function(){}};n.write=i},{"./ast":17,"./simplify":19}],19:[function(e,t,n){var r=e("underscore"),i=e("./ast");function o(e){var t=[];return e.map(s).forEach((function(e){c(t,e)})),t}function s(e){return a[e.type](e)}var a={element:function(e){return i.elementWithTag(e.tag,o(e.children))},text:l,forceWrite:l};function l(e){return e}function c(e,t){var n=e[e.length-1];"element"===t.type&&!t.tag.fresh&&n&&"element"===n.type&&t.tag.matchesElement(n.tag)?(t.tag.separator&&c(n.children,i.text(t.tag.separator)),t.children.forEach((function(e){c(n.children,e)}))):e.push(t)}function u(e){return t=e,n=function(e){return d[e.type](e)},r.flatten(r.map(t,n),!0);var t,n}var d={element:function(e){var t=u(e.children);return 0!==t.length||i.isVoidElement(e)?[i.elementWithTag(e.tag,t)]:[]},text:function(e){return 0===e.value.length?[]:[e]},forceWrite:function(e){return[e]}};t.exports=function(e){return o(u(e))}},{"./ast":17,underscore:102}],20:[function(e,t,n){var r=e("underscore"),i=e("./promises"),o=e("./html");function s(e){return function(t,n){return i.when(e(t)).then((function(e){var n={};return t.altText&&(n.alt=t.altText),r.extend(n,e),[o.freshElement("img",n)]}))}}n.imgElement=s,n.inline=n.imgElement,n.dataUri=s((function(e){return e.readAsBase64String().then((function(t){return{src:"data:"+e.contentType+";base64,"+t}}))}))},{"./html":18,"./promises":23,underscore:102}],21:[function(e,t,n){(function(t){var r=e("underscore"),i=e("./docx/docx-reader"),o=e("./docx/style-map"),s=e("./document-to-html").DocumentConverter,a=e("./raw-text").convertElementToRawText,l=e("./style-reader").readStyle,c=e("./options-reader").readOptions,u=e("./unzip"),d=e("./results").Result;function h(e,t){return t=c(t),u.openZip(e).tap((function(e){return o.readStyleMap(e).then((function(e){t.embeddedStyleMap=e}))})).then((function(n){return i.read(n,e).then((function(e){return e.map(t.transformDocument)})).then((function(e){return function(e,t){var n,i=(n=t.readStyleMap(),d.combine((n||[]).map(l)).map((function(e){return e.filter((function(e){return!!e}))}))),o=r.extend({},t,{styleMap:i.value}),a=new s(o);return e.flatMapThen((function(e){return i.flatMapThen((function(t){return a.convertToHtml(e)}))}))}(e,t)}))}))}n.convertToHtml=function(e,t){return h(e,t)},n.convertToMarkdown=function(e,t){var n=Object.create(t||{});return n.outputFormat="markdown",h(e,n)},n.convert=h,n.extractRawText=function(e){return u.openZip(e).then(i.read).then((function(e){return e.map(a)}))},n.images=e("./images"),n.transforms=e("./transforms"),n.underline=e("./underline"),n.embedStyleMap=function(e,n){return u.openZip(e).tap((function(e){return o.writeStyleMap(e,n)})).then((function(e){return e.toArrayBuffer()})).then((function(e){return{toArrayBuffer:function(){return e},toBuffer:function(){return t.from(e)}}}))},n.readEmbeddedStyleMap=function(e){return u.openZip(e).then(o.readStyleMap)},n.styleMapping=function(){throw new Error("Use a raw string instead of mammoth.styleMapping e.g. \"p[style-name='Title'] => h1\" instead of mammoth.styleMapping(\"p[style-name='Title'] => h1\")")}}).call(this,e("buffer").Buffer)},{"./document-to-html":3,"./docx/docx-reader":9,"./docx/style-map":14,"./images":20,"./options-reader":22,"./raw-text":24,"./results":25,"./style-reader":26,"./transforms":30,"./underline":31,"./unzip":2,buffer:83,underscore:102}],22:[function(e,t,n){n.readOptions=function(e){return e=e||{},r.extend({},o,e,{customStyleMap:s(e.styleMap),readStyleMap:function(){var e=this.customStyleMap;return this.includeEmbeddedStyleMap&&(e=e.concat(s(this.embeddedStyleMap))),this.includeDefaultStyleMap&&(e=e.concat(i)),e}})};var r=e("underscore"),i=n._defaultStyleMap=["p.Heading1 => h1:fresh","p.Heading2 => h2:fresh","p.Heading3 => h3:fresh","p.Heading4 => h4:fresh","p.Heading5 => h5:fresh","p.Heading6 => h6:fresh","p[style-name='Heading 1'] => h1:fresh","p[style-name='Heading 2'] => h2:fresh","p[style-name='Heading 3'] => h3:fresh","p[style-name='Heading 4'] => h4:fresh","p[style-name='Heading 5'] => h5:fresh","p[style-name='Heading 6'] => h6:fresh","p[style-name='heading 1'] => h1:fresh","p[style-name='heading 2'] => h2:fresh","p[style-name='heading 3'] => h3:fresh","p[style-name='heading 4'] => h4:fresh","p[style-name='heading 5'] => h5:fresh","p[style-name='heading 6'] => h6:fresh","r[style-name='Strong'] => strong","p[style-name='footnote text'] => p:fresh","r[style-name='footnote reference'] =>","p[style-name='endnote text'] => p:fresh","r[style-name='endnote reference'] =>","p[style-name='annotation text'] => p:fresh","r[style-name='annotation reference'] =>","p[style-name='Footnote'] => p:fresh","r[style-name='Footnote anchor'] =>","p[style-name='Endnote'] => p:fresh","r[style-name='Endnote anchor'] =>","p:unordered-list(1) => ul > li:fresh","p:unordered-list(2) => ul|ol > li > ul > li:fresh","p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh","p:ordered-list(1) => ol > li:fresh","p:ordered-list(2) => ul|ol > li > ol > li:fresh","p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh","r[style-name='Hyperlink'] =>","p[style-name='Normal'] => p:fresh"],o=n._standardOptions={transformDocument:function(e){return e},includeDefaultStyleMap:!0,includeEmbeddedStyleMap:!0};function s(e){return e?r.isString(e)?e.split("\n").map((function(e){return e.trim()})).filter((function(e){return""!==e&&"#"!==e.charAt(0)})):e:[]}},{underscore:102}],23:[function(e,t,n){var r=e("underscore"),i=e("bluebird/js/release/promise")();n.defer=function(){var e,t,n=new i.Promise((function(n,r){e=n,t=r}));return{resolve:e,reject:t,promise:n}},n.when=i.resolve,n.resolve=i.resolve,n.all=i.all,n.props=i.props,n.reject=i.reject,n.promisify=i.promisify,n.mapSeries=i.mapSeries,n.attempt=i.attempt,n.nfcall=function(e){var t=Array.prototype.slice.call(arguments,1);return i.promisify(e).apply(null,t)},i.prototype.fail=i.prototype.caught,i.prototype.also=function(e){return this.then((function(t){var n=r.extend({},t,e(t));return i.props(n)}))}},{"bluebird/js/release/promise":68,underscore:102}],24:[function(e,t,n){var r=e("./documents");n.convertElementToRawText=function e(t){if("text"===t.type)return t.value;if(t.type===r.types.tab)return"\t";var n="paragraph"===t.type?"\n\n":"";return(t.children||[]).map(e).join("")+n}},{"./documents":4}],25:[function(e,t,n){var r=e("underscore");function i(e,t){this.value=e,this.messages=t||[]}function o(e){var t=[];return r.flatten(r.pluck(e,"messages"),!0).forEach((function(e){(function(e,t){return void 0!==r.find(e,s.bind(null,t))})(t,e)||t.push(e)})),t}function s(e,t){return e.type===t.type&&e.message===t.message}n.Result=i,n.success=function(e){return new i(e,[])},n.warning=function(e){return{type:"warning",message:e}},n.error=function(e){return{type:"error",message:e.message,error:e}},i.prototype.map=function(e){return new i(e(this.value),this.messages)},i.prototype.flatMap=function(e){var t=e(this.value);return new i(t.value,o([this,t]))},i.prototype.flatMapThen=function(e){var t=this;return e(this.value).then((function(e){return new i(e.value,o([t,e]))}))},i.combine=function(e){return new i(r.flatten(r.pluck(e,"value")),o(e))}},{underscore:102}],26:[function(e,t,n){var r=e("underscore"),i=e("lop"),o=e("./styles/document-matchers"),s=e("./styles/html-paths"),a=e("./styles/parser/tokeniser").tokenise,l=e("./results");function c(){var e=i.rules.sequence,t=function(e,t){return i.rules.then(i.rules.token("identifier",e),(function(){return t}))},n=t("p",o.paragraph),s=t("r",o.run),a=i.rules.firstOf("p or r or table",n,s),l=i.rules.sequence(i.rules.tokenOfType("dot"),i.rules.sequence.cut(),i.rules.sequence.capture(d)).map((function(e){return{styleId:e}})),c=i.rules.firstOf("style name matcher",i.rules.then(i.rules.sequence(i.rules.tokenOfType("equals"),i.rules.sequence.cut(),i.rules.sequence.capture(f)).head(),(function(e){return{styleName:o.equalTo(e)}})),i.rules.then(i.rules.sequence(i.rules.tokenOfType("startsWith"),i.rules.sequence.cut(),i.rules.sequence.capture(f)).head(),(function(e){return{styleName:o.startsWith(e)}}))),u=i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.token("identifier","style-name"),i.rules.sequence.capture(c),i.rules.tokenOfType("close-square-bracket")).head(),p=i.rules.firstOf("list type",t("ordered-list",{isOrdered:!0}),t("unordered-list",{isOrdered:!1})),m=e(i.rules.tokenOfType("colon"),e.capture(p),e.cut(),i.rules.tokenOfType("open-paren"),e.capture(h),i.rules.tokenOfType("close-paren")).map((function(e,t){return{list:{isOrdered:e.isOrdered,levelIndex:t-1}}}));function g(e){var t=i.rules.firstOf.apply(i.rules.firstOf,["matcher suffix"].concat(e)),n=i.rules.zeroOrMore(t);return i.rules.then(n,(function(e){var t={};return e.forEach((function(e){r.extend(t,e)})),t}))}var y=e(e.capture(a),e.capture(g([l,u,m]))).map((function(e,t){return e(t)})),b=e(i.rules.token("identifier","table"),e.capture(g([l,u]))).map((function(e){return o.table(e)})),_=t("b",o.bold),v=t("i",o.italic),w=t("u",o.underline),x=t("strike",o.strikethrough),S=t("all-caps",o.allCaps),C=t("small-caps",o.smallCaps),M=e(i.rules.token("identifier","highlight"),i.rules.sequence.capture(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.token("identifier","color"),i.rules.tokenOfType("equals"),i.rules.sequence.capture(f),i.rules.tokenOfType("close-square-bracket")).head()))).map((function(e){return o.highlight({color:e.valueOrElse(void 0)})})),T=t("comment-reference",o.commentReference),E=e(i.rules.token("identifier","br"),e.cut(),i.rules.tokenOfType("open-square-bracket"),i.rules.token("identifier","type"),i.rules.tokenOfType("equals"),e.capture(f),i.rules.tokenOfType("close-square-bracket")).map((function(e){switch(e){case"line":return o.lineBreak;case"page":return o.pageBreak;case"column":return o.columnBreak}}));return i.rules.firstOf("element type",y,b,_,v,w,x,S,C,M,T,E)}function u(){var e=i.rules.sequence.capture,t=i.rules.tokenOfType("whitespace"),n=i.rules.then(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("colon"),i.rules.token("identifier","fresh"))),(function(e){return e.map((function(){return!0})).valueOrElse(!1)})),r=i.rules.then(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("colon"),i.rules.token("identifier","separator"),i.rules.tokenOfType("open-paren"),e(f),i.rules.tokenOfType("close-paren")).head()),(function(e){return e.valueOrElse("")})),o=i.rules.oneOrMoreWithSeparator(d,i.rules.tokenOfType("choice")),a=i.rules.sequence(e(o),e(i.rules.zeroOrMore(b)),e(n),e(r)).map((function(e,t,n,r){var i={},o={};return t.forEach((function(e){e.append&&i[e.name]?i[e.name]+=" "+e.value:i[e.name]=e.value})),n&&(o.fresh=!0),r&&(o.separator=r),s.element(e,i,o)}));return i.rules.firstOf("html path",i.rules.then(i.rules.tokenOfType("bang"),(function(){return s.ignore})),i.rules.then(i.rules.zeroOrMoreWithSeparator(a,i.rules.sequence(t,i.rules.tokenOfType("gt"),t)),s.elements))}n.readHtmlPath=function(e){return _(u(),e)},n.readDocumentMatcher=function(e){return _(c(),e)},n.readStyle=function(e){return _(x,e)};var d=i.rules.then(i.rules.tokenOfType("identifier"),m),h=i.rules.tokenOfType("integer"),f=i.rules.then(i.rules.tokenOfType("string"),m),p={n:"\n",r:"\r",t:"\t"};function m(e){return e.replace(/\\(.)/g,(function(e,t){return p[t]||t}))}var g=i.rules.sequence(i.rules.tokenOfType("open-square-bracket"),i.rules.sequence.cut(),i.rules.sequence.capture(d),i.rules.tokenOfType("equals"),i.rules.sequence.capture(f),i.rules.tokenOfType("close-square-bracket")).map((function(e,t){return{name:e,value:t,append:!1}})),y=i.rules.sequence(i.rules.tokenOfType("dot"),i.rules.sequence.cut(),i.rules.sequence.capture(d)).map((function(e){return{name:"class",value:e,append:!0}})),b=i.rules.firstOf("attribute or class",g,y);function _(e,t){var n=a(t),r=i.Parser().parseTokens(e,n);return r.isSuccess()?l.success(r.value()):new l.Result(null,[l.warning(v(t,r))])}function v(e,t){return"Did not understand this style mapping, so ignored it: "+e+"\n"+t.errors().map(w).join("\n")}function w(e){return"Error was at character number "+e.characterNumber()+": Expected "+e.expected+" but got "+e.actual}var x=i.rules.sequence(i.rules.sequence.capture(c()),i.rules.tokenOfType("whitespace"),i.rules.tokenOfType("arrow"),i.rules.sequence.capture(i.rules.optional(i.rules.sequence(i.rules.tokenOfType("whitespace"),i.rules.sequence.capture(u())).head())),i.rules.tokenOfType("end")).map((function(e,t){return{from:e,to:t.valueOrElse(s.empty)}}))},{"./results":25,"./styles/document-matchers":27,"./styles/html-paths":28,"./styles/parser/tokeniser":29,lop:89,underscore:102}],27:[function(e,t,n){function r(e,t){t=t||{},this._elementType=e,this._styleId=t.styleId,this._styleName=t.styleName,t.list&&(this._listIndex=t.list.levelIndex,this._listIsOrdered=t.list.isOrdered)}function i(e){e=e||{},this._color=e.color}function o(e){e=e||{},this._breakType=e.breakType}function s(e,t){return e.toUpperCase()===t.toUpperCase()}function a(e,t){return 0===t.toUpperCase().indexOf(e.toUpperCase())}n.paragraph=function(e){return new r("paragraph",e)},n.run=function(e){return new r("run",e)},n.table=function(e){return new r("table",e)},n.bold=new r("bold"),n.italic=new r("italic"),n.underline=new r("underline"),n.strikethrough=new r("strikethrough"),n.allCaps=new r("allCaps"),n.smallCaps=new r("smallCaps"),n.highlight=function(e){return new i(e)},n.commentReference=new r("commentReference"),n.lineBreak=new o({breakType:"line"}),n.pageBreak=new o({breakType:"page"}),n.columnBreak=new o({breakType:"column"}),n.equalTo=function(e){return{operator:s,operand:e}},n.startsWith=function(e){return{operator:a,operand:e}},r.prototype.matches=function(e){return e.type===this._elementType&&(void 0===this._styleId||e.styleId===this._styleId)&&(void 0===this._styleName||e.styleName&&this._styleName.operator(this._styleName.operand,e.styleName))&&(void 0===this._listIndex||function(e,t,n){return e.numbering&&e.numbering.level==t&&e.numbering.isOrdered==n}(e,this._listIndex,this._listIsOrdered))&&(void 0===this._breakType||this._breakType===e.breakType)},i.prototype.matches=function(e){return"highlight"===e.type&&(void 0===this._color||e.color===this._color)},o.prototype.matches=function(e){return"break"===e.type&&(void 0===this._breakType||e.breakType===this._breakType)}},{}],28:[function(e,t,n){var r=e("underscore"),i=e("../html");function o(e){return new s(e.map((function(e){return r.isString(e)?a(e):e})))}function s(e){this._elements=e}function a(e,t,n){return new l(e,t,n=n||{})}function l(e,t,n){var i={};r.isArray(e)?(e.forEach((function(e){i[e]=!0})),e=e[0]):i[e]=!0,this.tagName=e,this.tagNames=i,this.attributes=t||{},this.fresh=n.fresh,this.separator=n.separator}n.topLevelElement=function(e,t){return o([a(e,t,{fresh:!0})])},n.elements=o,n.element=a,s.prototype.wrap=function(e){for(var t=e(),n=this._elements.length-1;n>=0;n--)t=this._elements[n].wrapNodes(t);return t},l.prototype.matchesElement=function(e){return this.tagNames[e.tagName]&&r.isEqual(this.attributes||{},e.attributes||{})},l.prototype.wrap=function(e){return this.wrapNodes(e())},l.prototype.wrapNodes=function(e){return[i.elementWithTag(this,e)]},n.empty=o([]),n.ignore={wrap:function(){return[]}}},{"../html":18,underscore:102}],29:[function(e,t,n){var r=e("lop").RegexTokeniser;n.tokenise=function(e){var t="(?:[a-zA-Z\\-_]|\\\\.)";return new r([{name:"identifier",regex:new RegExp("("+t+"(?:"+t+"|[0-9])*)")},{name:"dot",regex:/\./},{name:"colon",regex:/:/},{name:"gt",regex:/>/},{name:"whitespace",regex:/\s+/},{name:"arrow",regex:/=>/},{name:"equals",regex:/=/},{name:"startsWith",regex:/\^=/},{name:"open-paren",regex:/\(/},{name:"close-paren",regex:/\)/},{name:"open-square-bracket",regex:/\[/},{name:"close-square-bracket",regex:/\]/},{name:"string",regex:new RegExp(i+"'")},{name:"unterminated-string",regex:new RegExp(i)},{name:"integer",regex:/([0-9]+)/},{name:"choice",regex:/\|/},{name:"bang",regex:/(!)/}]).tokenise(e)};var i="'((?:\\\\.|[^'])*)"},{lop:89}],30:[function(e,t,n){var r=e("underscore");function i(e,t){return o((function(n){return n.type===e?t(n):n}))}function o(e){return function t(n){if(n.children){var i=r.map(n.children,t);n=r.extend(n,{children:i})}return e(n)}}function s(e){var t=[];return a(e,(function(e){t.push(e)})),t}function a(e,t){e.children&&e.children.forEach((function(e){a(e,t),t(e)}))}n.paragraph=function(e){return i("paragraph",e)},n.run=function(e){return i("run",e)},n._elements=o,n.getDescendantsOfType=function(e,t){return s(e).filter((function(e){return e.type===t}))},n.getDescendants=s},{underscore:102}],31:[function(e,t,n){var r=e("./styles/html-paths"),i=e("./html");n.element=function(e){return function(t){return i.elementWithTag(r.element(e),[t])}}},{"./html":18,"./styles/html-paths":28}],32:[function(e,t,n){var r=e("underscore");n.writer=function(e){return(e=e||{}).prettyPrint?function(){var e=0,t=" ",n=[],s=!0,a=!1,l=o();function c(){if(a=!1,!s&&(0===n.length||i[n[n.length-1]])&&!u()){l._append("\n");for(var r=0;r/g,">")}(e)+'"'})).join("")}return{asString:function(){return e.join("")},open:function(n,r){var i=t(r);e.push("<"+n+i+">")},close:function(t){e.push("")},text:function(t){e.push(function(e){return e.replace(/&/g,"&").replace(//g,">")}(t))},selfClosing:function(n,r){var i=t(r);e.push("<"+n+i+" />")},_append:function(t){e.push(t)}}}},{underscore:102}],33:[function(e,t,n){var r=e("./html-writer"),i=e("./markdown-writer");n.writer=function(e){return"markdown"===(e=e||{}).outputFormat?i.writer():r.writer(e)}},{"./html-writer":32,"./markdown-writer":34}],34:[function(e,t,n){var r=e("underscore");function i(e){return o(e,e)}function o(e,t){return function(){return{start:e,end:t}}}function s(e){return function(t,n){return{start:n?"\n":"",end:n?"":"\n",list:{isOrdered:e.isOrdered,indent:n?n.indent+1:0,count:0}}}}var a={p:o("","\n\n"),br:o(""," \n"),ul:s({isOrdered:!1}),ol:s({isOrdered:!0}),li:function(e,t,n){(t=t||{indent:0,isOrdered:!1,count:0}).count++,n.hasClosed=!1;var r=t.isOrdered?t.count+".":"-";return{start:l("\t",t.indent)+r+" ",end:function(){if(!n.hasClosed)return n.hasClosed=!0,"\n"}}},strong:i("__"),em:i("*"),a:function(e){var t=e.href||"";return t?{start:"[",end:"]("+t+")",anchorPosition:"before"}:{}},img:function(e){var t=e.src||"",n=e.alt||"";return t||n?{start:"!["+n+"]("+t+")"}:{}}};function l(e,t){return new Array(t+1).join(e)}!function(){for(var e=1;e<=6;e++)a["h"+e]=o(l("#",e)+" ","\n\n")}(),n.writer=function(){var e=[],t=[],n=null,i={};function o(r,o){o=o||{};var l=(a[r]||function(){return{}})(o,n,i);t.push({end:l.end,list:n}),l.list&&(n=l.list);var c="before"===l.anchorPosition;c&&s(o),e.push(l.start||""),c||s(o)}function s(t){t.id&&e.push('')}function l(i){var o=t.pop();n=o.list;var s=r.isFunction(o.end)?o.end():o.end;e.push(s||"")}return{asString:function(){return e.join("")},open:o,close:l,text:function(t){e.push(function(e){return e.replace(/\\/g,"\\\\").replace(/([\`\*_\{\}\[\]\(\)\#\+\-\.\!])/g,"\\$1")}(t))},selfClosing:function(e,t){o(e,t),l()}}}},{underscore:102}],35:[function(e,t,n){var r=e("./nodes");n.Element=r.Element,n.element=r.element,n.text=r.text,n.readString=e("./reader").readString,n.writeString=e("./writer").writeString},{"./nodes":36,"./reader":37,"./writer":38}],36:[function(e,t,n){var r=e("underscore");n.Element=o,n.element=function(e,t,n){return new o(e,t,n)},n.text=function(e){return{type:"text",value:e}};var i={first:function(){return null},firstOrEmpty:function(){return i},attributes:{}};function o(e,t,n){this.type="element",this.name=e,this.attributes=t||{},this.children=n||[]}o.prototype.first=function(e){return r.find(this.children,(function(t){return t.name===e}))},o.prototype.firstOrEmpty=function(e){return this.first(e)||i},o.prototype.getElementsByTagName=function(e){return a(r.filter(this.children,(function(t){return t.name===e})))},o.prototype.text=function(){if(0===this.children.length)return"";if(1!==this.children.length||"text"!==this.children[0].type)throw new Error("Not implemented");return this.children[0].value};var s={getElementsByTagName:function(e){return a(r.flatten(this.map((function(t){return t.getElementsByTagName(e)}),!0)))}};function a(e){return r.extend(e,s)}},{underscore:102}],37:[function(e,t,n){var r=e("../promises"),i=e("underscore"),o=e("./xmldom"),s=e("./nodes"),a=s.Element;n.readString=function(e,t){t=t||{};try{var n=o.parseFromString(e,"text/xml")}catch(e){return r.reject(e)}if("parsererror"===n.documentElement.tagName)return r.resolve(new Error(n.documentElement.textContent));function c(e){if(e.namespaceURI){var n=t[e.namespaceURI];return(n?n+":":"{"+e.namespaceURI+"}")+e.localName}return e.localName}return r.resolve(function e(t){switch(t.nodeType){case l.ELEMENT_NODE:return function(t){var n=c(t),r=[];i.forEach(t.childNodes,(function(t){var n=e(t);n&&r.push(n)}));var o={};return i.forEach(t.attributes,(function(e){o[c(e)]=e.value})),new a(n,o,r)}(t);case l.TEXT_NODE:return s.text(t.nodeValue)}}(n.documentElement))};var l=o.Node},{"../promises":23,"./nodes":36,"./xmldom":39,underscore:102}],38:[function(e,t,n){var r=e("underscore"),i=e("xmlbuilder");function o(e,t){e.text(t.value)}n.writeString=function(e,t){var n=r.invert(t),s={element:function(e,t){var n=e.element(l(t.name),t.attributes);t.children.forEach((function(e){a(n,e)}))},text:o};function a(e,t){return s[t.type](e,t)}function l(e){var t=/^\{(.*)\}(.*)$/.exec(e);if(t){var r=n[t[1]];return r+(""===r?"":":")+t[2]}return e}return function(e){var n=i.create(l(e.name),{version:"1.0",encoding:"UTF-8",standalone:!0});return r.forEach(t,(function(e,t){var r="xmlns"+(""===t?"":":"+t);n.attribute(r,e)})),e.children.forEach((function(e){a(n,e)})),n.end()}(e)}},{underscore:102,xmlbuilder:127}],39:[function(e,t,n){var r=e("@xmldom/xmldom"),i=e("@xmldom/xmldom/lib/dom");n.parseFromString=function(e){var t=null,n=new r.DOMParser({errorHandler:function(e,n){t={level:e,message:n}}}).parseFromString(e);if(null===t)return n;throw new Error(t.level+": "+t.message)},n.Node=i.Node},{"@xmldom/xmldom":45,"@xmldom/xmldom/lib/dom":43}],40:[function(e,t,n){var r=e("base64-js"),i=e("jszip");n.openArrayBuffer=function(e){return i.loadAsync(e).then((function(e){return{exists:function(t){return null!==e.file(t)},read:function(t,n){return e.file(t).async("uint8array").then((function(e){return"base64"===n?r.fromByteArray(e):n?new TextDecoder(n).decode(e):e}))},write:function(t,n){e.file(t,n)},toArrayBuffer:function(){return e.generateAsync({type:"arraybuffer"})}}}))},n.splitPath=function(e){var t=e.lastIndexOf("/");return-1===t?{dirname:"",basename:e}:{dirname:e.substring(0,t),basename:e.substring(t+1)}},n.joinPath=function(){var e=Array.prototype.filter.call(arguments,(function(e){return e})),t=[];return e.forEach((function(e){/^\//.test(e)?t=[e]:t.push(e)})),t.join("/")}},{"base64-js":47,jszip:88}],41:[function(e,t,n){"use strict";function r(e,t){return void 0===t&&(t=Object),t&&"function"==typeof t.freeze?t.freeze(e):e}var i=r({HTML:"text/html",isHTML:function(e){return e===i.HTML},XML_APPLICATION:"application/xml",XML_TEXT:"text/xml",XML_XHTML_APPLICATION:"application/xhtml+xml",XML_SVG_IMAGE:"image/svg+xml"}),o=r({HTML:"http://www.w3.org/1999/xhtml",isHTML:function(e){return e===o.HTML},SVG:"http://www.w3.org/2000/svg",XML:"http://www.w3.org/XML/1998/namespace",XMLNS:"http://www.w3.org/2000/xmlns/"});n.assign=function(e,t){if(null===e||"object"!=typeof e)throw new TypeError("target is not an object");for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},n.find=function(e,t,n){if(void 0===n&&(n=Array.prototype),e&&"function"==typeof n.find)return n.find.call(e,t);for(var r=0;r=t+n||t?new java.lang.String(e,t,n)+"":e}function y(e,t){e.currentElement?e.currentElement.appendChild(t):e.doc.appendChild(t)}h.prototype.parseFromString=function(e,t){var n=this.options,r=new u,i=n.domBuilder||new f,s=n.errorHandler,a=n.locator,c=n.xmlns||{},h=/\/x?html?$/.test(t),p=h?o.HTML_ENTITIES:o.XML_ENTITIES;a&&i.setDocumentLocator(a),r.errorHandler=function(e,t,n){if(!e){if(t instanceof f)return t;e=t}var r={},i=e instanceof Function;function o(t){var o=e[t];!o&&i&&(o=2==e.length?function(n){e(t,n)}:e),r[t]=o&&function(e){o("[xmldom "+t+"]\t"+e+m(n))}||function(){}}return n=n||{},o("warning"),o("error"),o("fatalError"),r}(s,i,a),r.domBuilder=n.domBuilder||i,h&&(c[""]=l.HTML),c.xml=c.xml||l.XML;var g=n.normalizeLineEndings||d;return e&&"string"==typeof e?r.parse(g(e),c,p):r.errorHandler.error("invalid doc source"),i.doc},f.prototype={startDocument:function(){this.doc=(new a).createDocument(null,null,null),this.locator&&(this.doc.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.doc,o=i.createElementNS(e,n||t),s=r.length;y(this,o),this.currentElement=o,this.locator&&p(this.locator,o);for(var a=0;a=0))throw new k(E,new Error(e.tagName+"@"+n));for(var i=t.length-1;r"==e&&">")||"&"==e&&"&"||'"'==e&&"""||"&#"+e.charCodeAt()+";"}function F(e,t){if(t(e))return!0;if(e=e.firstChild)do{if(F(e,t))return!0}while(e=e.nextSibling)}function Y(){this.ownerDocument=this}function W(e,t,n,r){e&&e._inc++,n.namespaceURI===o.XMLNS&&delete t._nsMap[n.prefix?n.localName:""]}function B(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{for(var i=t.firstChild,o=0;i;)r[o++]=i,i=i.nextSibling;r.length=o,delete r[r.length]}}}function V(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,t.parentNode=null,t.previousSibling=null,t.nextSibling=null,B(e.ownerDocument,e),t}function z(e){return e&&e.nodeType===j.DOCUMENT_TYPE_NODE}function $(e){return e&&e.nodeType===j.ELEMENT_NODE}function G(e){return e&&e.nodeType===j.TEXT_NODE}function q(e,t){var n=e.childNodes||[];if(i(n,$)||z(t))return!1;var r=i(n,z);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function X(e,t){var n=e.childNodes||[];if(i(n,(function(e){return $(e)&&e!==t})))return!1;var r=i(n,z);return!(t&&r&&n.indexOf(r)>n.indexOf(t))}function K(e,t,n){var r=e.childNodes||[],o=t.childNodes||[];if(t.nodeType===j.DOCUMENT_FRAGMENT_NODE){var s=o.filter($);if(s.length>1||i(o,G))throw new k(T,"More than one element or text in fragment");if(1===s.length&&!q(e,n))throw new k(T,"Element in fragment can not be inserted before doctype")}if($(t)&&!q(e,n))throw new k(T,"Only one element can be added and only after doctype");if(z(t)){if(i(r,z))throw new k(T,"Only one doctype is allowed");var a=i(r,$);if(n&&r.indexOf(a)1||i(o,G))throw new k(T,"More than one element or text in fragment");if(1===s.length&&!X(e,n))throw new k(T,"Element in fragment can not be inserted before doctype")}if($(t)&&!X(e,n))throw new k(T,"Only one element can be added and only after doctype");if(z(t)){if(i(r,(function(e){return z(e)&&e!==n})))throw new k(T,"Only one doctype is allowed");var a=i(r,$);if(n&&r.indexOf(a)=0;S--)if(""===(C=i[S]).prefix&&C.namespace===e.namespaceURI){d=C.namespace;break}if(d!==e.namespaceURI)for(S=i.length-1;S>=0;S--){var C;if((C=i[S]).namespace===e.namespaceURI){C.prefix&&(u=C.prefix+":"+c);break}}}t.push("<",u);for(var M=0;M"),n&&/^script$/i.test(c))for(;l;)l.data?t.push(l.data):me(l,t,n,r,i.slice()),l=l.nextSibling;else for(;l;)me(l,t,n,r,i.slice()),l=l.nextSibling;t.push("")}else t.push("/>");return;case v:case x:for(l=e.firstChild;l;)me(l,t,n,r,i.slice()),l=l.nextSibling;return;case f:return pe(t,e.name,e.value);case p:return t.push(e.data.replace(/[<&>]/g,U));case m:return t.push("");case _:return t.push("\x3c!--",e.data,"--\x3e");case w:var k=e.publicId,R=e.systemId;if(t.push("");else if(R&&"."!=R)t.push(" SYSTEM ",R,">");else{var O=e.internalSubset;O&&t.push(" [",O,"]"),t.push(">")}return;case b:return t.push("");case g:return t.push("&",e.nodeName,";");default:t.push("??",e.nodeName)}}function ge(e,t,n){var r;switch(t.nodeType){case h:(r=t.cloneNode(!1)).ownerDocument=e;case x:break;case f:n=!0}if(r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null,n)for(var i=t.firstChild;i;)r.appendChild(ge(e,i,n)),i=i.nextSibling;return r}function ye(e,t,n){var r=new t.constructor;for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)){var o=t[i];"object"!=typeof o&&o!=r[i]&&(r[i]=o)}switch(t.childNodes&&(r.childNodes=new R),r.ownerDocument=e,r.nodeType){case h:var s=t.attributes,a=r.attributes=new A,l=s.length;a._ownerElement=r;for(var c=0;c0},lookupPrefix:function(e){for(var t=this;t;){var n=t._nsMap;if(n)for(var r in n)if(Object.prototype.hasOwnProperty.call(n,r)&&n[r]===e)return r;t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){for(var t=this;t;){var n=t._nsMap;if(n&&Object.prototype.hasOwnProperty.call(n,e))return n[e];t=t.nodeType==f?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){return null==this.lookupPrefix(e)}},c(d,j),c(d,j.prototype),Y.prototype={nodeName:"#document",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==x){for(var n=e.firstChild;n;){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return Z(this,e,t),e.ownerDocument=this,null===this.documentElement&&e.nodeType===h&&(this.documentElement=e),e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),V(this,e)},replaceChild:function(e,t){Z(this,e,t,J),e.ownerDocument=this,t&&this.removeChild(t),$(e)&&(this.documentElement=e)},importNode:function(e,t){return ge(this,e,t)},getElementById:function(e){var t=null;return F(this.documentElement,(function(n){if(n.nodeType==h&&n.getAttribute("id")==e)return t=n,!0})),t},getElementsByClassName:function(e){var t=l(e);return new O(this,(function(n){var r=[];return t.length>0&&F(n.documentElement,(function(i){if(i!==n&&i.nodeType===h){var o=i.getAttribute("class");if(o){var s=e===o;if(!s){var a=l(o);s=t.every((c=a,function(e){return c&&-1!==c.indexOf(e)}))}s&&r.push(i)}}var c})),r}))},createElement:function(e){var t=new Q;return t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.localName=e,t.childNodes=new R,(t.attributes=new A)._ownerElement=t,t},createDocumentFragment:function(){var e=new ce;return e.ownerDocument=this,e.childNodes=new R,e},createTextNode:function(e){var t=new ne;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new re;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ie;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ue;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new ee;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new le;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new Q,r=t.split(":"),i=n.attributes=new A;return n.childNodes=new R,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new ee,r=t.split(":");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,2==r.length?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},u(Y,j),Q.prototype={nodeType:h,hasAttribute:function(e){return null!=this.getAttributeNode(e)},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||""},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=""+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===x?this.insertBefore(e,null):function(e,t){return t.parentNode&&t.parentNode.removeChild(t),t.parentNode=e,t.previousSibling=e.lastChild,t.nextSibling=null,t.previousSibling?t.previousSibling.nextSibling=t:e.firstChild=t,e.lastChild=t,B(e.ownerDocument,e,t),t}(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return null!=this.getAttributeNodeNS(e,t)},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||""},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=""+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new O(this,(function(t){var n=[];return F(t,(function(r){r===t||r.nodeType!=h||"*"!==e&&r.tagName!=e||n.push(r)})),n}))},getElementsByTagNameNS:function(e,t){return new O(this,(function(n){var r=[];return F(n,(function(i){i===n||i.nodeType!==h||"*"!==e&&i.namespaceURI!==e||"*"!==t&&i.localName!=t||r.push(i)})),r}))}},Y.prototype.getElementsByTagName=Q.prototype.getElementsByTagName,Y.prototype.getElementsByTagNameNS=Q.prototype.getElementsByTagNameNS,u(Q,j),ee.prototype.nodeType=f,u(ee,j),te.prototype={data:"",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(M[T])},deleteData:function(e,t){this.replaceData(e,t,"")},replaceData:function(e,t,n){n=this.data.substring(0,e)+n+this.data.substring(e+t),this.nodeValue=this.data=n,this.length=n.length}},u(te,j),ne.prototype={nodeName:"#text",nodeType:p,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},u(ne,te),re.prototype={nodeName:"#comment",nodeType:_},u(re,te),ie.prototype={nodeName:"#cdata-section",nodeType:m},u(ie,te),oe.prototype.nodeType=w,u(oe,j),se.prototype.nodeType=S,u(se,j),ae.prototype.nodeType=y,u(ae,j),le.prototype.nodeType=g,u(le,j),ce.prototype.nodeName="#document-fragment",ce.prototype.nodeType=x,u(ce,j),ue.prototype.nodeType=b,u(ue,j),de.prototype.serializeToString=function(e,t,n){return he.call(e,t,n)},j.prototype.toString=he;try{if(Object.defineProperty){function _e(e){switch(e.nodeType){case h:case x:var t=[];for(e=e.firstChild;e;)7!==e.nodeType&&8!==e.nodeType&&t.push(_e(e)),e=e.nextSibling;return t.join("");default:return e.nodeValue}}Object.defineProperty(O.prototype,"length",{get:function(){return L(this),this.$$length}}),Object.defineProperty(j.prototype,"textContent",{get:function(){return _e(this)},set:function(e){switch(this.nodeType){case h:case x:for(;this.firstChild;)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=e,this.nodeValue=e}}}),be=function(e,t,n){e["$$"+t]=n}}}catch(ve){}n.DocumentType=oe,n.DOMException=k,n.DOMImplementation=H,n.Element=Q,n.Node=j,n.NodeList=R,n.XMLSerializer=de},{"./conventions":41}],44:[function(e,t,n){var r=e("./conventions").freeze;n.XML_ENTITIES=r({amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}),n.HTML_ENTITIES=r({lt:"<",gt:">",amp:"&",quot:'"',apos:"'",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",times:"×",divide:"÷",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",euro:"€",trade:"™",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦"}),n.entityMap=n.HTML_ENTITIES},{"./conventions":41}],45:[function(e,t,n){var r=e("./dom");n.DOMImplementation=r.DOMImplementation,n.XMLSerializer=r.XMLSerializer,n.DOMParser=e("./dom-parser").DOMParser},{"./dom":43,"./dom-parser":42}],46:[function(e,t,n){var r=e("./conventions").NAMESPACE,i=/[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,o=new RegExp("[\\-\\.0-9"+i.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"),s=new RegExp("^"+i.source+o.source+"*(?::"+i.source+o.source+"*)?$");function a(e,t){this.message=e,this.locator=t,Error.captureStackTrace&&Error.captureStackTrace(this,a)}function l(){}function c(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function u(e,t,n,i,o,s){function a(e,t,r){n.attributeNames.hasOwnProperty(e)&&s.fatalError("Attribute "+e+" redefined"),n.addValue(e,t.replace(/[\t\n\r]/g," ").replace(/&#?\w+;/g,o),r)}for(var l,c=++t,u=0;;){var d=e.charAt(c);switch(d){case"=":if(1===u)l=e.slice(t,c),u=3;else{if(2!==u)throw new Error("attribute equal must after attrName");u=3}break;case"'":case'"':if(3===u||1===u){if(1===u&&(s.warning('attribute value must after "="'),l=e.slice(t,c)),t=c+1,!((c=e.indexOf(d,t))>0))throw new Error("attribute value no end '"+d+"' match");a(l,h=e.slice(t,c),t-1),u=5}else{if(4!=u)throw new Error('attribute value must after "="');a(l,h=e.slice(t,c),t),s.warning('attribute "'+l+'" missed start quot('+d+")!!"),t=c+1,u=5}break;case"/":switch(u){case 0:n.setTagName(e.slice(t,c));case 5:case 6:case 7:u=7,n.closed=!0;case 4:case 1:case 2:break;default:throw new Error("attribute invalid close char('/')")}break;case"":return s.error("unexpected end of input"),0==u&&n.setTagName(e.slice(t,c)),c;case">":switch(u){case 0:n.setTagName(e.slice(t,c));case 5:case 6:case 7:break;case 4:case 1:"/"===(h=e.slice(t,c)).slice(-1)&&(n.closed=!0,h=h.slice(0,-1));case 2:2===u&&(h=l),4==u?(s.warning('attribute "'+h+'" missed quot(")!'),a(l,h,t)):(r.isHTML(i[""])&&h.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+h+'" missed value!! "'+h+'" instead!!'),a(h,h,t));break;case 3:throw new Error("attribute value missed!!")}return c;case"€":d=" ";default:if(d<=" ")switch(u){case 0:n.setTagName(e.slice(t,c)),u=6;break;case 1:l=e.slice(t,c),u=2;break;case 4:var h=e.slice(t,c);s.warning('attribute "'+h+'" missed quot(")!!'),a(l,h,t);case 5:u=6}else switch(u){case 2:n.tagName,r.isHTML(i[""])&&l.match(/^(?:disabled|checked|selected)$/i)||s.warning('attribute "'+l+'" missed value!! "'+l+'" instead2!!'),a(l,l,t),t=c,u=1;break;case 5:s.warning('attribute space is required"'+l+'"!!');case 6:u=1,t=c;break;case 3:u=4,t=c;break;case 7:throw new Error("elements closed character '/' and '>' must be connected to")}}c++}}function d(e,t,n){for(var i=e.tagName,o=null,s=e.length;s--;){var a=e[s],l=a.qName,c=a.value;if((f=l.indexOf(":"))>0)var u=a.prefix=l.slice(0,f),d=l.slice(f+1),h="xmlns"===u&&d;else d=l,u=null,h="xmlns"===l&&"";a.localName=d,!1!==h&&(null==o&&(o={},p(n,n={})),n[h]=o[h]=c,a.uri=r.XMLNS,t.startPrefixMapping(h,c))}for(s=e.length;s--;)(u=(a=e[s]).prefix)&&("xml"===u&&(a.uri=r.XML),"xmlns"!==u&&(a.uri=n[u||""]));var f;(f=i.indexOf(":"))>0?(u=e.prefix=i.slice(0,f),d=e.localName=i.slice(f+1)):(u=null,d=e.localName=i);var m=e.uri=n[u||""];if(t.startElement(m,d,i,e),!e.closed)return e.currentNSMap=n,e.localNSMap=o,!0;if(t.endElement(m,d,i),o)for(u in o)Object.prototype.hasOwnProperty.call(o,u)&&t.endPrefixMapping(u)}function h(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var o=e.indexOf("",t),s=e.substring(t+1,o);if(/[&<]/.test(s))return/^script$/i.test(n)?(i.characters(s,0,s.length),o):(s=s.replace(/&#?\w+;/g,r),i.characters(s,0,s.length),o)}return t+1}function f(e,t,n,r){var i=r[n];return null==i&&((i=e.lastIndexOf(""))t?(n.comment(e,t+4,i-t-4),i+3):(r.error("Unclosed comment"),-1):-1;if("CDATA["==e.substr(t+3,6)){var i=e.indexOf("]]>",t+9);return n.startCDATA(),n.characters(e,t+9,i-t-9),n.endCDATA(),i+3}var o=function(e,t){var n,r=[],i=/'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;for(i.lastIndex=t,i.exec(e);n=i.exec(e);)if(r.push(n),n[1])return r}(e,t),s=o.length;if(s>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],l=!1,c=!1;s>3&&(/^public$/i.test(o[2][0])?(l=o[3][0],c=s>4&&o[4][0]):/^system$/i.test(o[2][0])&&(c=o[3][0]));var u=o[s-1];return n.startDTD(a,l,c),n.endDTD(),u.index+u[0].length}return-1}function g(e,t,n){var r=e.indexOf("?>",t);if(r){var i=e.substring(t,r).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);return i?(i[0].length,n.processingInstruction(i[1],i[2]),r+2):-1}return-1}function y(){this.attributeNames={}}a.prototype=new Error,a.prototype.name=a.name,l.prototype={parse:function(e,t,n){var i=this.domBuilder;i.startDocument(),p(t,t={}),function(e,t,n,i,o){function s(e){var t=e.slice(1,-1);return Object.hasOwnProperty.call(n,t)?n[t]:"#"===t.charAt(0)?function(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}(parseInt(t.substr(1).replace("x","0x"))):(o.error("entity not found:"+e),e)}function l(t){if(t>C){var n=e.substring(C,t).replace(/&#?\w+;/g,s);w&&p(C),i.characters(n,0,t-C),C=t}}function p(t,n){for(;t>=_&&(n=v.exec(e));)b=n.index,_=b+n[0].length,w.lineNumber++;w.columnNumber=t-b+1}for(var b=0,_=0,v=/.*(?:\r\n?|\n)|.*$/g,w=i.locator,x=[{currentNSMap:t}],S={},C=0;;){try{var M=e.indexOf("<",C);if(M<0){if(!e.substr(C).match(/^\s*$/)){var T=i.doc,E=T.createTextNode(e.substr(C));T.appendChild(E),i.currentElement=E}return}switch(M>C&&l(M),e.charAt(M+1)){case"/":var D=e.indexOf(">",M+3),k=e.substring(M+2,D).replace(/[ \t\n\r]+$/g,""),R=x.pop();D<0?(k=e.substring(M+2).replace(/[\s<].*/,""),o.error("end tag name: "+k+" is not complete:"+R.tagName),D=M+1+k.length):k.match(/\sC?C=D:l(Math.max(M,C)+1)}}(e,t,n,i,this.errorHandler),i.endDocument()}},y.prototype={setTagName:function(e){if(!s.test(e))throw new Error("invalid tagName:"+e);this.tagName=e},addValue:function(e,t,n){if(!s.test(e))throw new Error("invalid attribute:"+e);this.attributeNames[e]=this.length,this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getLocator:function(e){return this[e].locator},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},n.XMLReader=l,n.ParseError=a},{"./conventions":41}],47:[function(e,t,n){"use strict";n.byteLength=function(e){var t=l(e),n=t[0],r=t[1];return 3*(n+r)/4-r},n.toByteArray=function(e){var t,n,r=l(e),s=r[0],a=r[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,s,a)),u=0,d=a>0?s-4:s;for(n=0;n>16&255,c[u++]=t>>8&255,c[u++]=255&t;return 2===a&&(t=i[e.charCodeAt(n)]<<2|i[e.charCodeAt(n+1)]>>4,c[u++]=255&t),1===a&&(t=i[e.charCodeAt(n)]<<10|i[e.charCodeAt(n+1)]<<4|i[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t),c},n.fromByteArray=function(e){for(var t,n=e.length,i=n%3,o=[],s=16383,a=0,l=n-i;al?l:a+s));return 1===i?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===i&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],i=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0;a<64;++a)r[a]=s[a],i[s.charCodeAt(a)]=a;function l(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var n=e.indexOf("=");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function c(e,t,n){for(var i,o,s=[],a=t;a>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}i["-".charCodeAt(0)]=62,i["_".charCodeAt(0)]=63},{}],48:[function(e,t,n){"use strict";t.exports=function(e){var t=e._SomePromiseArray;function n(e){var n=new t(e),r=n.promise();return n.setHowMany(1),n.setUnwrap(),n.init(),r}e.any=function(e){return n(e)},e.prototype.any=function(){return n(this)}}},{}],49:[function(e,t,n){(function(n){"use strict";var r;try{throw new Error}catch(e){r=e}var i=e("./schedule"),o=e("./queue"),s=e("./util");function a(){this._customScheduler=!1,this._isTickUsed=!1,this._lateQueue=new o(16),this._normalQueue=new o(16),this._haveDrainedQueues=!1,this._trampolineEnabled=!0;var e=this;this.drainQueues=function(){e._drainQueues()},this._schedule=i}function l(e,t,n){this._lateQueue.push(e,t,n),this._queueTick()}function c(e,t,n){this._normalQueue.push(e,t,n),this._queueTick()}function u(e){this._normalQueue._pushOne(e),this._queueTick()}a.prototype.setScheduler=function(e){var t=this._schedule;return this._schedule=e,this._customScheduler=!0,t},a.prototype.hasCustomScheduler=function(){return this._customScheduler},a.prototype.enableTrampoline=function(){this._trampolineEnabled=!0},a.prototype.disableTrampolineIfNecessary=function(){s.hasDevTools&&(this._trampolineEnabled=!1)},a.prototype.haveItemsQueued=function(){return this._isTickUsed||this._haveDrainedQueues},a.prototype.fatalError=function(e,t){t?(n.stderr.write("Fatal "+(e instanceof Error?e.stack:e)+"\n"),n.exit(2)):this.throwLater(e)},a.prototype.throwLater=function(e,t){if(1===arguments.length&&(t=e,e=function(){throw t}),"undefined"!=typeof setTimeout)setTimeout((function(){e(t)}),0);else try{this._schedule((function(){e(t)}))}catch(e){throw new Error("No async scheduler available\n\n See http://goo.gl/MqrFmX\n")}},s.hasDevTools?(a.prototype.invokeLater=function(e,t,n){this._trampolineEnabled?l.call(this,e,t,n):this._schedule((function(){setTimeout((function(){e.call(t,n)}),100)}))},a.prototype.invoke=function(e,t,n){this._trampolineEnabled?c.call(this,e,t,n):this._schedule((function(){e.call(t,n)}))},a.prototype.settlePromises=function(e){this._trampolineEnabled?u.call(this,e):this._schedule((function(){e._settlePromises()}))}):(a.prototype.invokeLater=l,a.prototype.invoke=c,a.prototype.settlePromises=u),a.prototype._drainQueue=function(e){for(;e.length()>0;){var t=e.shift();if("function"==typeof t){var n=e.shift(),r=e.shift();t.call(n,r)}else t._settlePromises()}},a.prototype._drainQueues=function(){this._drainQueue(this._normalQueue),this._reset(),this._haveDrainedQueues=!0,this._drainQueue(this._lateQueue)},a.prototype._queueTick=function(){this._isTickUsed||(this._isTickUsed=!0,this._schedule(this.drainQueues))},a.prototype._reset=function(){this._isTickUsed=!1},t.exports=a,t.exports.firstLineError=r}).call(this,e("_process"))},{"./queue":72,"./schedule":75,"./util":82,_process:101}],50:[function(e,t,n){"use strict";t.exports=function(e,t,n,r){var i=!1,o=function(e,t){this._reject(t)},s=function(e,t){t.promiseRejectionQueued=!0,t.bindingPromise._then(o,o,null,this,e)},a=function(e,t){50397184&this._bitField||this._resolveCallback(t.target)},l=function(e,t){t.promiseRejectionQueued||this._reject(e)};e.prototype.bind=function(o){i||(i=!0,e.prototype._propagateFrom=r.propagateFromFunction(),e.prototype._boundValue=r.boundValueFunction());var c=n(o),u=new e(t);u._propagateFrom(this,1);var d=this._target();if(u._setBoundTo(c),c instanceof e){var h={promiseRejectionQueued:!1,promise:u,target:d,bindingPromise:c};d._then(t,s,void 0,u,h),c._then(a,l,void 0,u,h),u._setOnCancel(c)}else u._resolveCallback(d);return u},e.prototype._setBoundTo=function(e){void 0!==e?(this._bitField=2097152|this._bitField,this._boundTo=e):this._bitField=-2097153&this._bitField},e.prototype._isBound=function(){return!(2097152&~this._bitField)},e.bind=function(t,n){return e.resolve(n).bind(t)}}},{}],51:[function(e,t,n){"use strict";var r=Object.create;if(r){var i=r(null),o=r(null);i[" size"]=o[" size"]=0}t.exports=function(t){var n,r,s=e("./util"),a=s.canEvaluate,l=s.isIdentifier,c=function(e){return new Function("ensureMethod"," \n return function(obj) { \n 'use strict' \n var len = this.length; \n ensureMethod(obj, 'methodName'); \n switch(len) { \n case 1: return obj.methodName(this[0]); \n case 2: return obj.methodName(this[0], this[1]); \n case 3: return obj.methodName(this[0], this[1], this[2]); \n case 0: return obj.methodName(); \n default: \n return obj.methodName.apply(obj, this); \n } \n }; \n ".replace(/methodName/g,e))(h)},u=function(e){return new Function("obj"," \n 'use strict'; \n return obj.propertyName; \n ".replace("propertyName",e))},d=function(e,t,n){var r=n[e];if("function"!=typeof r){if(!l(e))return null;if(r=t(e),n[e]=r,n[" size"]++,n[" size"]>512){for(var i=Object.keys(n),o=0;o<256;++o)delete n[i[o]];n[" size"]=i.length-256}}return r};function h(e,n){var r;if(null!=e&&(r=e[n]),"function"!=typeof r){var i="Object "+s.classString(e)+" has no method '"+s.toString(n)+"'";throw new t.TypeError(i)}return r}function f(e){return h(e,this.pop()).apply(e,this)}function p(e){return e[this]}function m(e){var t=+this;return t<0&&(t=Math.max(0,t+e.length)),e[t]}n=function(e){return d(e,c,i)},r=function(e){return d(e,u,o)},t.prototype.call=function(e){for(var t=arguments.length,r=new Array(Math.max(t-1,0)),i=1;i0&&this._settlePromises()},t.prototype._unsetOnCancel=function(){this._onCancelField=void 0},t.prototype._isCancellable=function(){return this.isPending()&&!this._isCancelled()},t.prototype.isCancellable=function(){return this.isPending()&&!this.isCancelled()},t.prototype._doInvokeOnCancel=function(e,t){if(o.isArray(e))for(var n=0;n=0)return n[e]}return e.prototype._promiseCreated=function(){},e.prototype._pushContext=function(){},e.prototype._popContext=function(){return null},e._peekContext=e.prototype._peekContext=function(){},r.prototype._pushContext=function(){void 0!==this._trace&&(this._trace._promiseCreated=null,n.push(this._trace))},r.prototype._popContext=function(){if(void 0!==this._trace){var e=n.pop(),t=e._promiseCreated;return e._promiseCreated=null,t}return null},r.CapturedTrace=null,r.create=function(){if(t)return new r},r.deactivateLongStackTraces=function(){},r.activateLongStackTraces=function(){var n=e.prototype._pushContext,o=e.prototype._popContext,s=e._peekContext,a=e.prototype._peekContext,l=e.prototype._promiseCreated;r.deactivateLongStackTraces=function(){e.prototype._pushContext=n,e.prototype._popContext=o,e._peekContext=s,e.prototype._peekContext=a,e.prototype._promiseCreated=l,t=!1},t=!0,e.prototype._pushContext=r.prototype._pushContext,e.prototype._popContext=r.prototype._popContext,e._peekContext=e.prototype._peekContext=i,e.prototype._promiseCreated=function(){var e=this._peekContext();e&&null==e._promiseCreated&&(e._promiseCreated=this)}},r}},{}],55:[function(e,t,n){(function(n){"use strict";t.exports=function(t,r){var i,o,s,a=t._getDomain,l=t._async,c=e("./errors").Warning,u=e("./util"),d=u.canAttachTrace,h=/[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/,f=/\((?:timers\.js):\d+:\d+\)/,p=/[\/<\(](.+?):(\d+):(\d+)\)?\s*$/,m=null,g=null,y=!1,b=!(0==u.env("BLUEBIRD_DEBUG")||!u.env("BLUEBIRD_DEBUG")&&"development"!==u.env("NODE_ENV")),_=!(0==u.env("BLUEBIRD_WARNINGS")||!b&&!u.env("BLUEBIRD_WARNINGS")),v=!(0==u.env("BLUEBIRD_LONG_STACK_TRACES")||!b&&!u.env("BLUEBIRD_LONG_STACK_TRACES")),w=0!=u.env("BLUEBIRD_W_FORGOTTEN_RETURN")&&(_||!!u.env("BLUEBIRD_W_FORGOTTEN_RETURN"));t.prototype.suppressUnhandledRejections=function(){var e=this._target();e._bitField=-1048577&e._bitField|524288},t.prototype._ensurePossibleRejectionHandled=function(){524288&this._bitField||(this._setRejectionIsUnhandled(),l.invokeLater(this._notifyUnhandledRejection,this,void 0))},t.prototype._notifyUnhandledRejectionIsHandled=function(){B("rejectionHandled",i,void 0,this)},t.prototype._setReturnedNonUndefined=function(){this._bitField=268435456|this._bitField},t.prototype._returnedNonUndefined=function(){return!!(268435456&this._bitField)},t.prototype._notifyUnhandledRejection=function(){if(this._isRejectionUnhandled()){var e=this._settledValue();this._setUnhandledRejectionIsNotified(),B("unhandledRejection",o,e,this)}},t.prototype._setUnhandledRejectionIsNotified=function(){this._bitField=262144|this._bitField},t.prototype._unsetUnhandledRejectionIsNotified=function(){this._bitField=-262145&this._bitField},t.prototype._isUnhandledRejectionNotified=function(){return(262144&this._bitField)>0},t.prototype._setRejectionIsUnhandled=function(){this._bitField=1048576|this._bitField},t.prototype._unsetRejectionIsUnhandled=function(){this._bitField=-1048577&this._bitField,this._isUnhandledRejectionNotified()&&(this._unsetUnhandledRejectionIsNotified(),this._notifyUnhandledRejectionIsHandled())},t.prototype._isRejectionUnhandled=function(){return(1048576&this._bitField)>0},t.prototype._warn=function(e,t,n){return U(e,t,n||this)},t.onPossiblyUnhandledRejection=function(e){var t=a();o="function"==typeof e?null===t?e:u.domainBind(t,e):void 0},t.onUnhandledRejectionHandled=function(e){var t=a();i="function"==typeof e?null===t?e:u.domainBind(t,e):void 0};var x=function(){};t.longStackTraces=function(){if(l.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");if(!J.longStackTraces&&z()){var e=t.prototype._captureStackTrace,n=t.prototype._attachExtraTrace;J.longStackTraces=!0,x=function(){if(l.haveItemsQueued()&&!J.longStackTraces)throw new Error("cannot enable long stack traces after promises have been created\n\n See http://goo.gl/MqrFmX\n");t.prototype._captureStackTrace=e,t.prototype._attachExtraTrace=n,r.deactivateLongStackTraces(),l.enableTrampoline(),J.longStackTraces=!1},t.prototype._captureStackTrace=H,t.prototype._attachExtraTrace=j,r.activateLongStackTraces(),l.disableTrampolineIfNecessary()}},t.hasLongStackTraces=function(){return J.longStackTraces&&z()};var S=function(){try{if("function"==typeof CustomEvent){var e=new CustomEvent("CustomEvent");return u.global.dispatchEvent(e),function(e,t){var n=new CustomEvent(e.toLowerCase(),{detail:t,cancelable:!0});return!u.global.dispatchEvent(n)}}return"function"==typeof Event?(e=new Event("CustomEvent"),u.global.dispatchEvent(e),function(e,t){var n=new Event(e.toLowerCase(),{cancelable:!0});return n.detail=t,!u.global.dispatchEvent(n)}):((e=document.createEvent("CustomEvent")).initCustomEvent("testingtheevent",!1,!0,{}),u.global.dispatchEvent(e),function(e,t){var n=document.createEvent("CustomEvent");return n.initCustomEvent(e.toLowerCase(),!1,!0,t),!u.global.dispatchEvent(n)})}catch(e){}return function(){return!1}}(),C=u.isNode?function(){return n.emit.apply(n,arguments)}:u.global?function(e){var t="on"+e.toLowerCase(),n=u.global[t];return!!n&&(n.apply(u.global,[].slice.call(arguments,1)),!0)}:function(){return!1};function M(e,t){return{promise:t}}var T={promiseCreated:M,promiseFulfilled:M,promiseRejected:M,promiseResolved:M,promiseCancelled:M,promiseChained:function(e,t,n){return{promise:t,child:n}},warning:function(e,t){return{warning:t}},unhandledRejection:function(e,t,n){return{reason:t,promise:n}},rejectionHandled:M},E=function(e){var t=!1;try{t=C.apply(null,arguments)}catch(e){l.throwLater(e),t=!0}var n=!1;try{n=S(e,T[e].apply(null,arguments))}catch(e){l.throwLater(e),n=!0}return n||t};function D(){return!1}function k(e,t,n){var r=this;try{e(t,n,(function(e){if("function"!=typeof e)throw new TypeError("onCancel must be a function, got: "+u.toString(e));r._attachCancellationCallback(e)}))}catch(e){return e}}function R(e){if(!this._isCancellable())return this;var t=this._onCancel();void 0!==t?u.isArray(t)?t.push(e):this._setOnCancel([t,e]):this._setOnCancel(e)}function O(){return this._onCancelField}function L(e){this._onCancelField=e}function A(){this._cancellationParent=void 0,this._onCancelField=void 0}function I(e,t){if(1&t){this._cancellationParent=e;var n=e._branchesRemainingToCancel;void 0===n&&(n=0),e._branchesRemainingToCancel=n+1}2&t&&e._isBound()&&this._setBoundTo(e._boundTo)}t.config=function(e){if("longStackTraces"in(e=Object(e))&&(e.longStackTraces?t.longStackTraces():!e.longStackTraces&&t.hasLongStackTraces()&&x()),"warnings"in e){var n=e.warnings;J.warnings=!!n,w=J.warnings,u.isObject(n)&&"wForgottenReturn"in n&&(w=!!n.wForgottenReturn)}if("cancellation"in e&&e.cancellation&&!J.cancellation){if(l.haveItemsQueued())throw new Error("cannot enable cancellation after promises are in use");t.prototype._clearCancellationData=A,t.prototype._propagateFrom=I,t.prototype._onCancel=O,t.prototype._setOnCancel=L,t.prototype._attachCancellationCallback=R,t.prototype._execute=k,P=I,J.cancellation=!0}return"monitoring"in e&&(e.monitoring&&!J.monitoring?(J.monitoring=!0,t.prototype._fireEvent=E):!e.monitoring&&J.monitoring&&(J.monitoring=!1,t.prototype._fireEvent=D)),t},t.prototype._fireEvent=D,t.prototype._execute=function(e,t,n){try{e(t,n)}catch(e){return e}},t.prototype._onCancel=function(){},t.prototype._setOnCancel=function(e){},t.prototype._attachCancellationCallback=function(e){},t.prototype._captureStackTrace=function(){},t.prototype._attachExtraTrace=function(){},t.prototype._clearCancellationData=function(){},t.prototype._propagateFrom=function(e,t){};var P=function(e,t){2&t&&e._isBound()&&this._setBoundTo(e._boundTo)};function N(){var e=this._boundTo;return void 0!==e&&e instanceof t?e.isFulfilled()?e.value():void 0:e}function H(){this._trace=new X(this._peekContext())}function j(e,t){if(d(e)){var n=this._trace;if(void 0!==n&&t&&(n=n._parent),void 0!==n)n.attachExtraTrace(e);else if(!e.__stackCleaned__){var r=Y(e);u.notEnumerableProp(e,"stack",r.message+"\n"+r.stack.join("\n")),u.notEnumerableProp(e,"__stackCleaned__",!0)}}}function U(e,n,r){if(J.warnings){var i,o=new c(e);if(n)r._attachExtraTrace(o);else if(J.longStackTraces&&(i=t._peekContext()))i.attachExtraTrace(o);else{var s=Y(o);o.stack=s.message+"\n"+s.stack.join("\n")}E("warning",o)||W(o,"",!0)}}function F(e){for(var t=[],n=0;n0?function(e){for(var t=e.stack.replace(/\s+$/g,"").split("\n"),n=0;n0&&"SyntaxError"!=e.name&&(t=t.slice(n)),t}(e):[" (No stack trace)"],{message:n,stack:"SyntaxError"==e.name?t:F(t)}}function W(e,t,n){if("undefined"!=typeof console){var r;if(u.isObject(e)){var i=e.stack;r=t+g(i,e)}else r=t+String(e);"function"==typeof s?s(r,n):"function"!=typeof console.log&&"object"!=typeof console.log||console.log(r)}}function B(e,t,n,r){var i=!1;try{"function"==typeof t&&(i=!0,"rejectionHandled"===e?t(r):t(n,r))}catch(e){l.throwLater(e)}"unhandledRejection"===e?E(e,n,r)||i||W(n,"Unhandled rejection "):E(e,r)}function V(e){var t;if("function"==typeof e)t="[function "+(e.name||"anonymous")+"]";else{if(t=e&&"function"==typeof e.toString?e.toString():u.toString(e),/\[object [a-zA-Z0-9$_]+\]/.test(t))try{t=JSON.stringify(e)}catch(e){}0===t.length&&(t="(empty array)")}return"(<"+function(e){return e.length<41?e:e.substr(0,38)+"..."}(t)+">, no stack trace)"}function z(){return"function"==typeof K}var $=function(){return!1},G=/[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;function q(e){var t=e.match(G);if(t)return{fileName:t[1],line:parseInt(t[2],10)}}function X(e){this._parent=e,this._promisesCreated=0;var t=this._length=1+(void 0===e?0:e._length);K(this,X),t>32&&this.uncycle()}u.inherits(X,Error),r.CapturedTrace=X,X.prototype.uncycle=function(){var e=this._length;if(!(e<2)){for(var t=[],n={},r=0,i=this;void 0!==i;++r)t.push(i),i=i._parent;for(r=(e=this._length=r)-1;r>=0;--r){var o=t[r].stack;void 0===n[o]&&(n[o]=r)}for(r=0;r0&&(t[s-1]._parent=void 0,t[s-1]._length=1),t[r]._parent=void 0,t[r]._length=1;var a=r>0?t[r-1]:this;s=0;--c)t[c]._length=l,l++;return}}}},X.prototype.attachExtraTrace=function(e){if(!e.__stackCleaned__){this.uncycle();for(var t=Y(e),n=t.message,r=[t.stack],i=this;void 0!==i;)r.push(F(i.stack.split("\n"))),i=i._parent;!function(e){for(var t=e[0],n=1;n=0;--a)if(r[a]===o){s=a;break}for(a=s;a>=0;--a){var l=r[a];if(t[i]!==l)break;t.pop(),i--}t=r}}(r),function(e){for(var t=0;t=0)return m=/@/,g=t,y=!0,function(e){e.stack=(new Error).stack};try{throw new Error}catch(e){r="stack"in e}return!("stack"in i)&&r&&"number"==typeof Error.stackTraceLimit?(m=e,g=t,function(e){Error.stackTraceLimit+=6;try{throw new Error}catch(t){e.stack=t.stack}Error.stackTraceLimit-=6}):(g=function(e,t){return"string"==typeof e?e:"object"!=typeof t&&"function"!=typeof t||void 0===t.name||void 0===t.message?V(t):t.toString()},null)}();"undefined"!=typeof console&&void 0!==console.warn&&(s=function(e){console.warn(e)},u.isNode&&n.stderr.isTTY?s=function(e,t){var n=t?"":"";console.warn(n+e+"\n")}:u.isNode||"string"!=typeof(new Error).stack||(s=function(e,t){console.warn("%c"+e,t?"color: darkorange":"color: red")}));var J={warnings:_,longStackTraces:!1,cancellation:!1,monitoring:!1};return v&&t.longStackTraces(),{longStackTraces:function(){return J.longStackTraces},warnings:function(){return J.warnings},cancellation:function(){return J.cancellation},monitoring:function(){return J.monitoring},propagateFromFunction:function(){return P},boundValueFunction:function(){return N},checkForgottenReturns:function(e,t,n,r,i){if(void 0===e&&null!==t&&w){if(void 0!==i&&i._returnedNonUndefined())return;if(!(65535&r._bitField))return;n&&(n+=" ");var o="",s="";if(t._trace){for(var a=t._trace.stack.split("\n"),l=F(a),c=l.length-1;c>=0;--c){var u=l[c];if(!f.test(u)){var d=u.match(p);d&&(o="at "+d[1]+":"+d[2]+":"+d[3]+" ");break}}if(l.length>0){var h=l[0];for(c=0;c0&&(s="\n"+a[c-1]);break}}}var m="a promise was created in a "+n+"handler "+o+"but was not returned from it, see http://goo.gl/rRqMUw"+s;r._warn(m,!0,t)}},setBounds:function(e,t){if(z()){for(var n,r,i=e.stack.split("\n"),o=t.stack.split("\n"),s=-1,a=-1,l=0;l=a||($=function(e){if(h.test(e))return!0;var t=q(e);return!!(t&&t.fileName===n&&s<=t.line&&t.line<=a)})}},warn:U,deprecated:function(e,t){var n=e+" is deprecated and will be removed in a future version.";return t&&(n+=" Use "+t+" instead."),U(n)},CapturedTrace:X,fireDomEvent:S,fireGlobalEvent:C}}}).call(this,e("_process"))},{"./errors":58,"./util":82,_process:101}],56:[function(e,t,n){"use strict";t.exports=function(e){function t(){return this.value}function n(){throw this.reason}e.prototype.return=e.prototype.thenReturn=function(n){return n instanceof e&&n.suppressUnhandledRejections(),this._then(t,void 0,void 0,{value:n},void 0)},e.prototype.throw=e.prototype.thenThrow=function(e){return this._then(n,void 0,void 0,{reason:e},void 0)},e.prototype.catchThrow=function(e){if(arguments.length<=1)return this._then(void 0,n,void 0,{reason:e},void 0);var t=arguments[1];return this.caught(e,(function(){throw t}))},e.prototype.catchReturn=function(n){if(arguments.length<=1)return n instanceof e&&n.suppressUnhandledRejections(),this._then(void 0,t,void 0,{value:n},void 0);var r=arguments[1];return r instanceof e&&r.suppressUnhandledRejections(),this.caught(n,(function(){return r}))}}},{}],57:[function(e,t,n){"use strict";t.exports=function(e,t){var n=e.reduce,r=e.all;function i(){return r(this)}e.prototype.each=function(e){return n(this,e,t,0)._then(i,void 0,void 0,this,void 0)},e.prototype.mapSeries=function(e){return n(this,e,t,t)},e.each=function(e,r){return n(e,r,t,0)._then(i,void 0,void 0,e,void 0)},e.mapSeries=function(e,r){return n(e,r,t,t)}}},{}],58:[function(e,t,n){"use strict";var r,i,o=e("./es5"),s=o.freeze,a=e("./util"),l=a.inherits,c=a.notEnumerableProp;function u(e,t){function n(r){if(!(this instanceof n))return new n(r);c(this,"message","string"==typeof r?r:t),c(this,"name",e),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):Error.call(this)}return l(n,Error),n}var d=u("Warning","warning"),h=u("CancellationError","cancellation error"),f=u("TimeoutError","timeout error"),p=u("AggregateError","aggregate error");try{r=TypeError,i=RangeError}catch(e){r=u("TypeError","type error"),i=u("RangeError","range error")}for(var m="join pop push shift unshift slice filter forEach some every map indexOf lastIndexOf reduce reduceRight sort reverse".split(" "),g=0;g1?e.cancelPromise._reject(t):e.cancelPromise._cancel(),e.cancelPromise=null,!0)}function c(){return d.call(this,this.promise._target()._settledValue())}function u(e){if(!l(this,e))return o.e=e,o}function d(e){var r=this.promise,s=this.handler;if(!this.called){this.called=!0;var d=this.isFinallyHandler()?s.call(r._boundValue()):s.call(r._boundValue(),e);if(void 0!==d){r._setReturnedNonUndefined();var h=n(d,r);if(h instanceof t){if(null!=this.cancelPromise){if(h._isCancelled()){var f=new i("late cancellation observer");return r._attachExtraTrace(f),o.e=f,o}h.isPending()&&h._attachCancellationCallback(new a(this))}return h._then(c,u,void 0,this,void 0)}}}return r.isRejected()?(l(this),o.e=e,o):(l(this),e)}return s.prototype.isFinallyHandler=function(){return 0===this.type},a.prototype._resultCancelled=function(){l(this.finallyHandler)},t.prototype._passThrough=function(e,t,n,r){return"function"!=typeof e?this.then():this._then(n,r,void 0,new s(this,t,e),void 0)},t.prototype.lastly=t.prototype.finally=function(e){return this._passThrough(e,0,d,d)},t.prototype.tap=function(e){return this._passThrough(e,1,d)},s}},{"./util":82}],62:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o,s){var a=e("./errors").TypeError,l=e("./util"),c=l.errorObj,u=l.tryCatch,d=[];function h(e,n,i,o){if(s.cancellation()){var a=new t(r),l=this._finallyPromise=new t(r);this._promise=a.lastly((function(){return l})),a._captureStackTrace(),a._setOnCancel(this)}else(this._promise=new t(r))._captureStackTrace();this._stack=o,this._generatorFunction=e,this._receiver=n,this._generator=void 0,this._yieldHandlers="function"==typeof i?[i].concat(d):d,this._yieldedPromise=null,this._cancellationPhase=!1}l.inherits(h,o),h.prototype._isResolved=function(){return null===this._promise},h.prototype._cleanup=function(){this._promise=this._generator=null,s.cancellation()&&null!==this._finallyPromise&&(this._finallyPromise._fulfill(),this._finallyPromise=null)},h.prototype._promiseCancelled=function(){if(!this._isResolved()){var e;if(void 0!==this._generator.return)this._promise._pushContext(),e=u(this._generator.return).call(this._generator,void 0),this._promise._popContext();else{var n=new t.CancellationError("generator .return() sentinel");t.coroutine.returnSentinel=n,this._promise._attachExtraTrace(n),this._promise._pushContext(),e=u(this._generator.throw).call(this._generator,n),this._promise._popContext()}this._cancellationPhase=!0,this._yieldedPromise=null,this._continue(e)}},h.prototype._promiseFulfilled=function(e){this._yieldedPromise=null,this._promise._pushContext();var t=u(this._generator.next).call(this._generator,e);this._promise._popContext(),this._continue(t)},h.prototype._promiseRejected=function(e){this._yieldedPromise=null,this._promise._attachExtraTrace(e),this._promise._pushContext();var t=u(this._generator.throw).call(this._generator,e);this._promise._popContext(),this._continue(t)},h.prototype._resultCancelled=function(){if(this._yieldedPromise instanceof t){var e=this._yieldedPromise;this._yieldedPromise=null,e.cancel()}},h.prototype.promise=function(){return this._promise},h.prototype._run=function(){this._generator=this._generatorFunction.call(this._receiver),this._receiver=this._generatorFunction=void 0,this._promiseFulfilled(void 0)},h.prototype._continue=function(e){var n=this._promise;if(e===c)return this._cleanup(),this._cancellationPhase?n.cancel():n._rejectCallback(e.e,!1);var r=e.value;if(!0===e.done)return this._cleanup(),this._cancellationPhase?n.cancel():n._resolveCallback(r);var o=i(r,this._promise);if(o instanceof t||(o=function(e,n,r){for(var o=0;o0&&"function"==typeof arguments[o]&&(e=arguments[o],o<=8&&c)){(x=new t(i))._captureStackTrace();for(var u=new(0,m[o-1])(e),d=g,h=0;h=1?s:0,o).promise()}l.inherits(h,n),h.prototype._asyncInit=function(){this._init$(void 0,-2)},h.prototype._init=function(){},h.prototype._promiseFulfilled=function(e,n){var r=this._values,o=this.length(),a=this._preservedValues,l=this._limit;if(n<0){if(r[n=-1*n-1]=e,l>=1&&(this._inFlight--,this._drainQueue(),this._isResolved()))return!0}else{if(l>=1&&this._inFlight>=l)return r[n]=e,this._queue.push(n),!1;null!==a&&(a[n]=e);var d=this._promise,h=this._callback,f=d._boundValue();d._pushContext();var p=c(h).call(f,e,n,o),m=d._popContext();if(s.checkForgottenReturns(p,m,null!==a?"Promise.filter":"Promise.map",d),p===u)return this._reject(p.e),!0;var g=i(p,this._promise);if(g instanceof t){var y=(g=g._target())._bitField;if(!(50397184&y))return l>=1&&this._inFlight++,r[n]=g,g._proxy(this,-1*(n+1)),!1;if(!(33554432&y))return 16777216&y?(this._reject(g._reason()),!0):(this._cancel(),!0);p=g._value()}r[n]=p}return++this._totalResolved>=o&&(null!==a?this._filter(r,a):this._resolve(r),!0)},h.prototype._drainQueue=function(){for(var e=this._queue,t=this._limit,n=this._values;e.length>0&&this._inFlight1){o.deprecated("calling Promise.try with more than 1 argument");var c=arguments[1],u=arguments[2];r=s.isArray(c)?a(e).apply(u,c):a(e).call(u,c)}else r=a(e)();var d=l._popContext();return o.checkForgottenReturns(r,d,"Promise.try",l),l._resolveFromSyncValue(r),l},t.prototype._resolveFromSyncValue=function(e){e===s.errorObj?this._rejectCallback(e.e,!1):this._resolveCallback(e,!0)}}},{"./util":82}],66:[function(e,t,n){"use strict";var r=e("./util"),i=r.maybeWrapAsError,o=e("./errors").OperationalError,s=e("./es5"),a=/^(?:name|message|stack|cause)$/;t.exports=function(e,t){return function(n,l){if(null!==e){if(n){var c=function(e){var t;if(function(e){return e instanceof Error&&s.getPrototypeOf(e)===Error.prototype}(e)){(t=new o(e)).name=e.name,t.message=e.message,t.stack=e.stack;for(var n=s.keys(e),i=0;i1){var n,r=new Array(t-1),i=0;for(n=0;n0&&"function"!=typeof e&&"function"!=typeof t){var n=".then() only accepts functions but was passed: "+c.classString(e);arguments.length>1&&(n+=", "+c.classString(t)),this._warn(n)}return this._then(e,t,void 0,void 0,void 0)},k.prototype.done=function(e,t){this._then(e,t,void 0,void 0,void 0)._setIsFinal()},k.prototype.spread=function(e){return"function"!=typeof e?o("expecting a function but got "+c.classString(e)):this.all()._then(e,void 0,void 0,y,void 0)},k.prototype.toJSON=function(){var e={isFulfilled:!1,isRejected:!1,fulfillmentValue:void 0,rejectionReason:void 0};return this.isFulfilled()?(e.fulfillmentValue=this.value(),e.isFulfilled=!0):this.isRejected()&&(e.rejectionReason=this.reason(),e.isRejected=!0),e},k.prototype.all=function(){return arguments.length>0&&this._warn(".all() was passed arguments but it does not take any"),new v(this).promise()},k.prototype.error=function(e){return this.caught(c.originatesFromRejection,e)},k.getNewLibraryCopy=t.exports,k.is=function(e){return e instanceof k},k.fromNode=k.fromCallback=function(e){var t=new k(g);t._captureStackTrace();var n=arguments.length>1&&!!Object(arguments[1]).multiArgs,r=D(e)(T(t,n));return r===E&&t._rejectCallback(r.e,!0),t._isFateSealed()||t._setAsyncGuaranteed(),t},k.all=function(e){return new v(e).promise()},k.cast=function(e){var t=_(e);return t instanceof k||((t=new k(g))._captureStackTrace(),t._setFulfilled(),t._rejectionHandler0=e),t},k.resolve=k.fulfilled=k.cast,k.reject=k.rejected=function(e){var t=new k(g);return t._captureStackTrace(),t._rejectCallback(e,!0),t},k.setScheduler=function(e){if("function"!=typeof e)throw new p("expecting a function but got "+c.classString(e));return h.setScheduler(e)},k.prototype._then=function(e,t,n,r,i){var o=void 0!==i,s=o?i:new k(g),l=this._target(),u=l._bitField;o||(s._propagateFrom(this,3),s._captureStackTrace(),void 0===r&&2097152&this._bitField&&(r=50397184&u?this._boundValue():l===this?void 0:this._boundTo),this._fireEvent("promiseChained",this,s));var d=a();if(50397184&u){var f,p,y=l._settlePromiseCtx;33554432&u?(p=l._rejectionHandler0,f=e):16777216&u?(p=l._fulfillmentHandler0,f=t,l._unsetRejectionIsUnhandled()):(y=l._settlePromiseLateCancellationObserver,p=new m("late cancellation observer"),l._attachExtraTrace(p),f=t),h.invoke(y,l,{handler:null===d?f:"function"==typeof f&&c.domainBind(d,f),promise:s,receiver:r,value:p})}else l._addCallbacks(e,t,s,r,d);return s},k.prototype._length=function(){return 65535&this._bitField},k.prototype._isFateSealed=function(){return!!(117506048&this._bitField)},k.prototype._isFollowing=function(){return!(67108864&~this._bitField)},k.prototype._setLength=function(e){this._bitField=-65536&this._bitField|65535&e},k.prototype._setFulfilled=function(){this._bitField=33554432|this._bitField,this._fireEvent("promiseFulfilled",this)},k.prototype._setRejected=function(){this._bitField=16777216|this._bitField,this._fireEvent("promiseRejected",this)},k.prototype._setFollowing=function(){this._bitField=67108864|this._bitField,this._fireEvent("promiseResolved",this)},k.prototype._setIsFinal=function(){this._bitField=4194304|this._bitField},k.prototype._isFinal=function(){return(4194304&this._bitField)>0},k.prototype._unsetCancelled=function(){this._bitField=-65537&this._bitField},k.prototype._setCancelled=function(){this._bitField=65536|this._bitField,this._fireEvent("promiseCancelled",this)},k.prototype._setWillBeCancelled=function(){this._bitField=8388608|this._bitField},k.prototype._setAsyncGuaranteed=function(){h.hasCustomScheduler()||(this._bitField=134217728|this._bitField)},k.prototype._receiverAt=function(e){var t=0===e?this._receiver0:this[4*e-4+3];if(t!==l)return void 0===t&&this._isBound()?this._boundValue():t},k.prototype._promiseAt=function(e){return this[4*e-4+2]},k.prototype._fulfillmentHandlerAt=function(e){return this[4*e-4+0]},k.prototype._rejectionHandlerAt=function(e){return this[4*e-4+1]},k.prototype._boundValue=function(){},k.prototype._migrateCallback0=function(e){e._bitField;var t=e._fulfillmentHandler0,n=e._rejectionHandler0,r=e._promise0,i=e._receiverAt(0);void 0===i&&(i=l),this._addCallbacks(t,n,r,i,null)},k.prototype._migrateCallbackAt=function(e,t){var n=e._fulfillmentHandlerAt(t),r=e._rejectionHandlerAt(t),i=e._promiseAt(t),o=e._receiverAt(t);void 0===o&&(o=l),this._addCallbacks(n,r,i,o,null)},k.prototype._addCallbacks=function(e,t,n,r,i){var o=this._length();if(o>=65531&&(o=0,this._setLength(0)),0===o)this._promise0=n,this._receiver0=r,"function"==typeof e&&(this._fulfillmentHandler0=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this._rejectionHandler0=null===i?t:c.domainBind(i,t));else{var s=4*o-4;this[s+2]=n,this[s+3]=r,"function"==typeof e&&(this[s+0]=null===i?e:c.domainBind(i,e)),"function"==typeof t&&(this[s+1]=null===i?t:c.domainBind(i,t))}return this._setLength(o+1),o},k.prototype._proxy=function(e,t){this._addCallbacks(void 0,void 0,t,e,null)},k.prototype._resolveCallback=function(e,t){if(!(117506048&this._bitField)){if(e===this)return this._rejectCallback(r(),!1);var n=_(e,this);if(!(n instanceof k))return this._fulfill(e);t&&this._propagateFrom(n,2);var i=n._target();if(i!==this){var o=i._bitField;if(50397184&o)if(33554432&o)this._fulfill(i._value());else if(16777216&o)this._reject(i._reason());else{var s=new m("late cancellation observer");i._attachExtraTrace(s),this._reject(s)}else{var a=this._length();a>0&&i._migrateCallback0(this);for(var l=1;l>>16)){if(e===this){var n=r();return this._attachExtraTrace(n),this._reject(n)}this._setFulfilled(),this._rejectionHandler0=e,(65535&t)>0&&(134217728&t?this._settlePromises():h.settlePromises(this))}},k.prototype._reject=function(e){var t=this._bitField;if(!((117506048&t)>>>16)){if(this._setRejected(),this._fulfillmentHandler0=e,this._isFinal())return h.fatalError(e,c.isNode);(65535&t)>0?h.settlePromises(this):this._ensurePossibleRejectionHandled()}},k.prototype._fulfillPromises=function(e,t){for(var n=1;n0){if(16842752&e){var n=this._fulfillmentHandler0;this._settlePromise0(this._rejectionHandler0,n,e),this._rejectPromises(t,n)}else{var r=this._rejectionHandler0;this._settlePromise0(this._fulfillmentHandler0,r,e),this._fulfillPromises(t,r)}this._setLength(0)}this._clearCancellationData()},k.prototype._settledValue=function(){var e=this._bitField;return 33554432&e?this._rejectionHandler0:16777216&e?this._fulfillmentHandler0:void 0},k.defer=k.pending=function(){return S.deprecated("Promise.defer","new Promise"),{promise:new k(g),resolve:R,reject:O}},c.notEnumerableProp(k,"_makeSelfResolutionError",r),e("./method")(k,g,_,o,S),e("./bind")(k,g,_,S),e("./cancel")(k,v,o,S),e("./direct_resolve")(k),e("./synchronous_inspection")(k),e("./join")(k,v,_,g,h,a),k.Promise=k,k.version="3.4.7",e("./map.js")(k,v,o,_,g,S),e("./call_get.js")(k),e("./using.js")(k,o,_,x,g,S),e("./timers.js")(k,g,S),e("./generators.js")(k,o,g,_,s,S),e("./nodeify.js")(k),e("./promisify.js")(k,g),e("./props.js")(k,v,_,o),e("./race.js")(k,g,_,o),e("./reduce.js")(k,v,o,_,g,S),e("./settle.js")(k,v,S),e("./some.js")(k,v,o),e("./filter.js")(k,g),e("./each.js")(k,g),e("./any.js")(k),c.toFastProperties(k),c.toFastProperties(k.prototype),L({a:1}),L({b:2}),L({c:3}),L(1),L((function(){})),L(void 0),L(!1),L(new k(g)),S.setBounds(d.firstLineError,c.lastLineError),k}}).call(this,e("_process"))},{"./any.js":48,"./async":49,"./bind":50,"./call_get.js":51,"./cancel":52,"./catch_filter":53,"./context":54,"./debuggability":55,"./direct_resolve":56,"./each.js":57,"./errors":58,"./es5":59,"./filter.js":60,"./finally":61,"./generators.js":62,"./join":63,"./map.js":64,"./method":65,"./nodeback":66,"./nodeify.js":67,"./promise_array":69,"./promisify.js":70,"./props.js":71,"./race.js":73,"./reduce.js":74,"./settle.js":76,"./some.js":77,"./synchronous_inspection":78,"./thenables":79,"./timers.js":80,"./using.js":81,"./util":82,_process:101}],69:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o){var s=e("./util");function a(e){var r=this._promise=new t(n);e instanceof t&&r._propagateFrom(e,3),r._setOnCancel(this),this._values=e,this._length=0,this._totalResolved=0,this._init(void 0,-2)}return s.isArray,s.inherits(a,o),a.prototype.length=function(){return this._length},a.prototype.promise=function(){return this._promise},a.prototype._init=function e(n,o){var a=r(this._values,this._promise);if(a instanceof t){var l=(a=a._target())._bitField;if(this._values=a,!(50397184&l))return this._promise._setAsyncGuaranteed(),a._then(e,this._reject,void 0,this,o);if(!(33554432&l))return 16777216&l?this._reject(a._reason()):this._cancel();a=a._value()}if(null!==(a=s.asArray(a)))0!==a.length?this._iterate(a):-5===o?this._resolveEmptyArray():this._resolve(function(e){switch(e){case-2:return[];case-3:return{}}}(o));else{var c=i("expecting an array or an iterable object but got "+s.classString(a)).reason();this._promise._rejectCallback(c,!1)}},a.prototype._iterate=function(e){var n=this.getActualLength(e.length);this._length=n,this._values=this.shouldCopyValues()?new Array(n):this._values;for(var i=this._promise,o=!1,s=null,a=0;a=this._length&&(this._resolve(this._values),!0)},a.prototype._promiseCancelled=function(){return this._cancel(),!0},a.prototype._promiseRejected=function(e){return this._totalResolved++,this._reject(e),!0},a.prototype._resultCancelled=function(){if(!this._isResolved()){var e=this._values;if(this._cancel(),e instanceof t)e.cancel();else for(var n=0;n=n;--r)t.push(r);for(r=e+1;r<=3;++r)t.push(r);return t}(f),m="string"==typeof e||l===r;var g,y="string"==typeof e?"this != null ? this['"+e+"'] : fn":"fn",b="'use strict'; \n var ret = function (Parameters) { \n 'use strict'; \n var len = arguments.length; \n var promise = new Promise(INTERNAL); \n promise._captureStackTrace(); \n var nodeback = nodebackForPromise(promise, "+h+"); \n var ret; \n var callback = tryCatch([GetFunctionCode]); \n switch(len) { \n [CodeForSwitchCase] \n } \n if (ret === errorObj) { \n promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n } \n if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n return promise; \n }; \n notEnumerableProp(ret, '__isPromisified__', true); \n return ret; \n ".replace("[CodeForSwitchCase]",function(){for(var e="",t=0;t0?", ":"",(m?"ret = callback.call(this, {{args}}, nodeback); break;\n":void 0===l?"ret = callback({{args}}, nodeback); break;\n":"ret = callback.call(receiver, {{args}}, nodeback); break;\n").replace("{{args}}",o).replace(", ",s));var n,r,o,s;return e+" \n default: \n var args = new Array(len + 1); \n var i = 0; \n for (var i = 0; i < len; ++i) { \n args[i] = arguments[i]; \n } \n args[i] = nodeback; \n [CodeForCall] \n break; \n ".replace("[CodeForCall]",m?"ret = callback.apply(this, args);\n":"ret = callback.apply(receiver, args);\n")}()).replace("[GetFunctionCode]",y);return b=b.replace("Parameters",(g=f,i.filledRange(Math.max(g,3),"_arg",""))),new Function("Promise","fn","receiver","withAppended","maybeWrapAsError","nodebackForPromise","tryCatch","errorObj","notEnumerableProp","INTERNAL",b)(t,u,l,s,a,o,i.tryCatch,i.errorObj,i.notEnumerableProp,n)}:function(e,l,c,u,d,h){var f=function(){return this}(),p=e;function m(){var i=l;l===r&&(i=this);var c=new t(n);c._captureStackTrace();var u="string"==typeof p&&this!==f?this[p]:e,d=o(c,h);try{u.apply(i,s(arguments,d))}catch(e){c._rejectCallback(a(e),!0,!0)}return c._isFateSealed()||c._setAsyncGuaranteed(),c}return"string"==typeof p&&(e=u),i.notEnumerableProp(m,"__isPromisified__",!0),m};function y(e,t,n,o,s){for(var a=new RegExp(t.replace(/([$])/,"\\$")+"$"),l=function(e,t,n,r){for(var o=i.inheritedDataKeys(e),s=[],a=0;a=this._length){var n;if(this._isMap)n=function(e){for(var t=new o,n=e.length/2|0,r=0;r>1},t.prototype.props=function(){return d(this)},t.props=function(e){return d(e)}}},{"./es5":59,"./util":82}],72:[function(e,t,n){"use strict";function r(e){this._capacity=e,this._length=0,this._front=0}r.prototype._willBeOverCapacity=function(e){return this._capacity=this._length&&(this._resolve(this._values),!0)},o.prototype._promiseFulfilled=function(e,t){var n=new i;return n._bitField=33554432,n._settledValueField=e,this._promiseResolved(t,n)},o.prototype._promiseRejected=function(e,t){var n=new i;return n._bitField=16777216,n._settledValueField=e,this._promiseResolved(t,n)},t.settle=function(e){return r.deprecated(".settle()",".reflect()"),new o(e).promise()},t.prototype.settle=function(){return t.settle(this)}}},{"./util":82}],77:[function(e,t,n){"use strict";t.exports=function(t,n,r){var i=e("./util"),o=e("./errors").RangeError,s=e("./errors").AggregateError,a=i.isArray,l={};function c(e){this.constructor$(e),this._howMany=0,this._unwrap=!1,this._initialized=!1}function u(e,t){if((0|t)!==t||t<0)return r("expecting a positive integer\n\n See http://goo.gl/MqrFmX\n");var n=new c(e),i=n.promise();return n.setHowMany(t),n.init(),i}i.inherits(c,n),c.prototype._init=function(){if(this._initialized)if(0!==this._howMany){this._init$(void 0,-5);var e=a(this._values);!this._isResolved()&&e&&this._howMany>this._canPossiblyFulfill()&&this._reject(this._getRangeError(this.length()))}else this._resolve([])},c.prototype.init=function(){this._initialized=!0,this._init()},c.prototype.setUnwrap=function(){this._unwrap=!0},c.prototype.howMany=function(){return this._howMany},c.prototype.setHowMany=function(e){this._howMany=e},c.prototype._promiseFulfilled=function(e){return this._addFulfilled(e),this._fulfilled()===this.howMany()&&(this._values.length=this.howMany(),1===this.howMany()&&this._unwrap?this._resolve(this._values[0]):this._resolve(this._values),!0)},c.prototype._promiseRejected=function(e){return this._addRejected(e),this._checkOutcome()},c.prototype._promiseCancelled=function(){return this._values instanceof t||null==this._values?this._cancel():(this._addRejected(l),this._checkOutcome())},c.prototype._checkOutcome=function(){if(this.howMany()>this._canPossiblyFulfill()){for(var e=new s,t=this.length();t0?this._reject(e):this._cancel(),!0}return!1},c.prototype._fulfilled=function(){return this._totalResolved},c.prototype._rejected=function(){return this._values.length-this.length()},c.prototype._addRejected=function(e){this._values.push(e)},c.prototype._addFulfilled=function(e){this._values[this._totalResolved++]=e},c.prototype._canPossiblyFulfill=function(){return this.length()-this._rejected()},c.prototype._getRangeError=function(e){var t="Input array must contain at least "+this._howMany+" items but contains only "+e+" items";return new o(t)},c.prototype._resolveEmptyArray=function(){this._reject(this._getRangeError(0))},t.some=function(e,t){return u(e,t)},t.prototype.some=function(e){return u(this,e)},t._SomePromiseArray=c}},{"./errors":58,"./util":82}],78:[function(e,t,n){"use strict";t.exports=function(e){function t(e){void 0!==e?(e=e._target(),this._bitField=e._bitField,this._settledValueField=e._isFateSealed()?e._settledValue():void 0):(this._bitField=0,this._settledValueField=void 0)}t.prototype._settledValue=function(){return this._settledValueField};var n=t.prototype.value=function(){if(!this.isFulfilled())throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},r=t.prototype.error=t.prototype.reason=function(){if(!this.isRejected())throw new TypeError("cannot get rejection reason of a non-rejected promise\n\n See http://goo.gl/MqrFmX\n");return this._settledValue()},i=t.prototype.isFulfilled=function(){return!!(33554432&this._bitField)},o=t.prototype.isRejected=function(){return!!(16777216&this._bitField)},s=t.prototype.isPending=function(){return!(50397184&this._bitField)},a=t.prototype.isResolved=function(){return!!(50331648&this._bitField)};t.prototype.isCancelled=function(){return!!(8454144&this._bitField)},e.prototype.__isCancelled=function(){return!(65536&~this._bitField)},e.prototype._isCancelled=function(){return this._target().__isCancelled()},e.prototype.isCancelled=function(){return!!(8454144&this._target()._bitField)},e.prototype.isPending=function(){return s.call(this._target())},e.prototype.isRejected=function(){return o.call(this._target())},e.prototype.isFulfilled=function(){return i.call(this._target())},e.prototype.isResolved=function(){return a.call(this._target())},e.prototype.value=function(){return n.call(this._target())},e.prototype.reason=function(){var e=this._target();return e._unsetRejectionIsUnhandled(),r.call(e)},e.prototype._value=function(){return this._settledValue()},e.prototype._reason=function(){return this._unsetRejectionIsUnhandled(),this._settledValue()},e.PromiseInspection=t}},{}],79:[function(e,t,n){"use strict";t.exports=function(t,n){var r=e("./util"),i=r.errorObj,o=r.isObject,s={}.hasOwnProperty;return function(e,a){if(o(e)){if(e instanceof t)return e;var l=function(e){try{return function(e){return e.then}(e)}catch(e){return i.e=e,i}}(e);if(l===i){a&&a._pushContext();var c=t.reject(l.e);return a&&a._popContext(),c}if("function"==typeof l)return function(e){try{return s.call(e,"_promise0")}catch(e){return!1}}(e)?(c=new t(n),e._then(c._fulfill,c._reject,void 0,c,null),c):function(e,o,s){var a=new t(n),l=a;s&&s._pushContext(),a._captureStackTrace(),s&&s._popContext();var c=!0,u=r.tryCatch(o).call(e,(function(e){a&&(a._resolveCallback(e),a=null)}),(function(e){a&&(a._rejectCallback(e,c,!0),a=null)}));return c=!1,a&&u===i&&(a._rejectCallback(u.e,!0,!0),a=null),l}(e,l,a)}return e}}},{"./util":82}],80:[function(e,t,n){"use strict";t.exports=function(t,n,r){var i=e("./util"),o=t.TimeoutError;function s(e){this.handle=e}s.prototype._resultCancelled=function(){clearTimeout(this.handle)};var a=function(e){return l(+this).thenReturn(e)},l=t.delay=function(e,i){var o,l;return void 0!==i?(o=t.resolve(i)._then(a,null,null,e,void 0),r.cancellation()&&i instanceof t&&o._setOnCancel(i)):(o=new t(n),l=setTimeout((function(){o._fulfill()}),+e),r.cancellation()&&o._setOnCancel(new s(l)),o._captureStackTrace()),o._setAsyncGuaranteed(),o};function c(e){return clearTimeout(this.handle),e}function u(e){throw clearTimeout(this.handle),e}t.prototype.delay=function(e){return l(e,this)},t.prototype.timeout=function(e,t){var n,a;e=+e;var l=new s(setTimeout((function(){n.isPending()&&function(e,t,n){var r;r="string"!=typeof t?t instanceof Error?t:new o("operation timed out"):new o(t),i.markAsOriginatingFromRejection(r),e._attachExtraTrace(r),e._reject(r),null!=n&&n.cancel()}(n,t,a)}),e));return r.cancellation()?(a=this.then(),(n=a._then(c,u,void 0,l,void 0))._setOnCancel(l)):n=this._then(c,u,void 0,l,void 0),n}}},{"./util":82}],81:[function(e,t,n){"use strict";t.exports=function(t,n,r,i,o,s){var a=e("./util"),l=e("./errors").TypeError,c=e("./util").inherits,u=a.errorObj,d=a.tryCatch,h={};function f(e){setTimeout((function(){throw e}),0)}function p(e,t,n){this._data=e,this._promise=t,this._context=n}function m(e,t,n){this.constructor$(e,t,n)}function g(e){return p.isDisposer(e)?(this.resources[this.index]._setDisposable(e),e.promise()):e}function y(e){this.length=e,this.promise=null,this[e-1]=null}p.prototype.data=function(){return this._data},p.prototype.promise=function(){return this._promise},p.prototype.resource=function(){return this.promise().isFulfilled()?this.promise().value():h},p.prototype.tryDispose=function(e){var t=this.resource(),n=this._context;void 0!==n&&n._pushContext();var r=t!==h?this.doDispose(t,e):null;return void 0!==n&&n._popContext(),this._promise._unsetDisposable(),this._data=null,r},p.isDisposer=function(e){return null!=e&&"function"==typeof e.resource&&"function"==typeof e.tryDispose},c(m,p),m.prototype.doDispose=function(e,t){return this.data().call(e,e,t)},y.prototype._resultCancelled=function(){for(var e=this.length,n=0;n=s)return a._fulfill();var l=function(e){var t=r(e);return t!==e&&"function"==typeof e._isDisposable&&"function"==typeof e._getDisposer&&e._isDisposable()&&t._setDisposable(e._getDisposer()),t}(e[i++]);if(l instanceof t&&l._isDisposable()){try{l=r(l._getDisposer().tryDispose(n),e.promise)}catch(e){return f(e)}if(l instanceof t)return l._then(o,f,null,null,null)}o()}(),a}(h,e)}));return h.promise=S,S._setOnCancel(h),S},t.prototype._setDisposable=function(e){this._bitField=131072|this._bitField,this._disposer=e},t.prototype._isDisposable=function(){return(131072&this._bitField)>0},t.prototype._getDisposer=function(){return this._disposer},t.prototype._unsetDisposable=function(){this._bitField=-131073&this._bitField,this._disposer=void 0},t.prototype.disposer=function(e){if("function"==typeof e)return new m(e,this,i());throw new l}}},{"./errors":58,"./util":82}],82:[function(e,t,r){(function(n,r){"use strict";var i,o=e("./es5"),s="undefined"==typeof navigator,a={e:{}},l="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==r?r:void 0!==this?this:null;function c(){try{var e=i;return i=null,e.apply(this,arguments)}catch(e){return a.e=e,a}}function u(e){return null==e||!0===e||!1===e||"string"==typeof e||"number"==typeof e}function d(e,t,n){if(u(e))return e;var r={value:n,configurable:!0,enumerable:!1,writable:!0};return o.defineProperty(e,t,r),e}var h=function(){var e=[Array.prototype,Object.prototype,Function.prototype],t=function(t){for(var n=0;n1,r=t.length>0&&!(1===t.length&&"constructor"===t[0]),i=f.test(e+"")&&o.names(e).length>0;if(n||r||i)return!0}return!1}catch(e){return!1}},isIdentifier:function(e){return p.test(e)},inheritedDataKeys:h,getDataPropertyOrDefault:function(e,t,n){if(!o.isES5)return{}.hasOwnProperty.call(e,t)?e[t]:void 0;var r=Object.getOwnPropertyDescriptor(e,t);return null!=r?null==r.get&&null==r.set?r.value:n:void 0},thrower:function(e){throw e},isArray:o.isArray,asArray:v,notEnumerableProp:d,isPrimitive:u,isObject:function(e){return"function"==typeof e||"object"==typeof e&&null!==e},isError:g,canEvaluate:s,errorObj:a,tryCatch:function(e){return i=e,c},inherits:function(e,t){var n={}.hasOwnProperty;function r(){for(var r in this.constructor=e,this.constructor$=t,t.prototype)n.call(t.prototype,r)&&"$"!==r.charAt(r.length-1)&&(this[r+"$"]=t.prototype[r])}return r.prototype=t.prototype,e.prototype=new r,e.prototype},withAppended:function(e,t){var n,r=e.length,i=new Array(r+1);for(n=0;n10||C[0]>0),M.isNode&&M.toFastProperties(n);try{throw new Error}catch(e){M.lastLineError=e}t.exports=M}).call(this,e("_process"),void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./es5":59,_process:101}],83:[function(e,t,r){(function(t){"use strict";var n=e("base64-js"),i=e("ieee754"),o=e("isarray");function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,t){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,t){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return Y(e).length;default:if(r)return F(e).length;t=(""+t).toLowerCase(),r=!0}}function m(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if((n>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return R(this,t,n);case"utf8":case"utf-8":return T(this,t,n);case"ascii":return D(this,t,n);case"latin1":case"binary":return k(this,t,n);case"base64":return M(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return O(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function g(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function y(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,i);if("number"==typeof t)return t&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function b(e,t,n,r,i){var o,s=1,a=e.length,l=t.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;s=2,a/=2,l/=2,n/=2}function c(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}if(i){var u=-1;for(o=n;oa&&(n=a-l),o=n;o>=0;o--){for(var d=!0,h=0;hi&&(r=i):r=i;var o=t.length;if(o%2!=0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s>8,i=n%256,o.push(i),o.push(r);return o}(t,e.length-n),e,n,r)}function M(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function T(e,t,n){n=Math.min(e.length,n);for(var r=[],i=t;i239?4:c>223?3:c>191?2:1;if(i+d<=n)switch(d){case 1:c<128&&(u=c);break;case 2:128==(192&(o=e[i+1]))&&(l=(31&c)<<6|63&o)>127&&(u=l);break;case 3:o=e[i+1],s=e[i+2],128==(192&o)&&128==(192&s)&&(l=(15&c)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:o=e[i+1],s=e[i+2],a=e[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&c)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(u=l)}null===u?(u=65533,d=1):u>65535&&(u-=65536,r.push(u>>>10&1023|55296),u=56320|1023&u),r.push(u),i+=d}return function(e){var t=e.length;if(t<=E)return String.fromCharCode.apply(String,e);for(var n="",r=0;r0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},l.prototype.compare=function(e,t,n,r,i){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(this===e)return 0;for(var o=(i>>>=0)-(r>>>=0),s=(n>>>=0)-(t>>>=0),a=Math.min(o,s),c=this.slice(r,i),u=e.slice(t,n),d=0;di)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return _(this,e,t,n);case"utf8":case"utf-8":return v(this,e,t,n);case"ascii":return w(this,e,t,n);case"latin1":case"binary":return x(this,e,t,n);case"base64":return S(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var E=4096;function D(e,t,n){var r="";n=Math.min(e.length,n);for(var i=t;ii)&&(n=i);for(var o="",s=t;sn)throw new RangeError("Trying to access beyond buffer length")}function A(e,t,n,r,i,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function I(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function P(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function N(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function H(e,t,n,r,o){return o||N(e,0,n,4),i.write(e,t,n,r,23,4),n+4}function j(e,t,n,r,o){return o||N(e,0,n,8),i.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){var n,r=this.length;if((e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t0&&(i*=256);)r+=this[e+--t]*i;return r},l.prototype.readUInt8=function(e,t){return t||L(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,t){return t||L(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,t){return t||L(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,t){return t||L(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,t){return t||L(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=this[e],i=1,o=0;++o=(i*=128)&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||L(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*t)),o},l.prototype.readInt8=function(e,t){return t||L(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){t||L(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){t||L(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return t||L(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return t||L(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return t||L(e,4,this.length),i.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return t||L(e,8,this.length),i.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,t,n,r){e=+e,t|=0,n|=0,r||A(this,e,t,n,Math.pow(2,8*n)-1,0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+n},l.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):I(this,e,t,!0),t+2},l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):I(this,e,t,!1),t+2},l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):P(this,e,t,!0),t+4},l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):P(this,e,t,!1),t+4},l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);A(this,e,t,n,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s|0)-a&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):I(this,e,t,!0),t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):I(this,e,t,!1),t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):P(this,e,t,!0),t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||A(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):P(this,e,t,!1),t+4},l.prototype.writeFloatLE=function(e,t,n){return H(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return H(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return j(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return j(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),"number"==typeof e)for(o=t;o55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=65536+(i-55296<<10|n-56320)}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function Y(e){return n.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function W(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":47,ieee754:86,isarray:87}],84:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=[{"Typeface name":"Symbol","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Symbol","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"33","Unicode hex":"21"},{"Typeface name":"Symbol","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"8704","Unicode hex":"2200"},{"Typeface name":"Symbol","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"35","Unicode hex":"23"},{"Typeface name":"Symbol","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"8707","Unicode hex":"2203"},{"Typeface name":"Symbol","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"37","Unicode hex":"25"},{"Typeface name":"Symbol","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"38","Unicode hex":"26"},{"Typeface name":"Symbol","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"8717","Unicode hex":"220D"},{"Typeface name":"Symbol","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"40","Unicode hex":"28"},{"Typeface name":"Symbol","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"41","Unicode hex":"29"},{"Typeface name":"Symbol","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"42","Unicode hex":"2A"},{"Typeface name":"Symbol","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"43","Unicode hex":"2B"},{"Typeface name":"Symbol","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"44","Unicode hex":"2C"},{"Typeface name":"Symbol","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"8722","Unicode hex":"2212"},{"Typeface name":"Symbol","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"46","Unicode hex":"2E"},{"Typeface name":"Symbol","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"47","Unicode hex":"2F"},{"Typeface name":"Symbol","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"48","Unicode hex":"30"},{"Typeface name":"Symbol","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"49","Unicode hex":"31"},{"Typeface name":"Symbol","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"50","Unicode hex":"32"},{"Typeface name":"Symbol","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"51","Unicode hex":"33"},{"Typeface name":"Symbol","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"52","Unicode hex":"34"},{"Typeface name":"Symbol","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"53","Unicode hex":"35"},{"Typeface name":"Symbol","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"54","Unicode hex":"36"},{"Typeface name":"Symbol","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"55","Unicode hex":"37"},{"Typeface name":"Symbol","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"56","Unicode hex":"38"},{"Typeface name":"Symbol","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"57","Unicode hex":"39"},{"Typeface name":"Symbol","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"58","Unicode hex":"3A"},{"Typeface name":"Symbol","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"59","Unicode hex":"3B"},{"Typeface name":"Symbol","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"60","Unicode hex":"3C"},{"Typeface name":"Symbol","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"61","Unicode hex":"3D"},{"Typeface name":"Symbol","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"62","Unicode hex":"3E"},{"Typeface name":"Symbol","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"63","Unicode hex":"3F"},{"Typeface name":"Symbol","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"8773","Unicode hex":"2245"},{"Typeface name":"Symbol","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"913","Unicode hex":"391"},{"Typeface name":"Symbol","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"914","Unicode hex":"392"},{"Typeface name":"Symbol","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"935","Unicode hex":"3A7"},{"Typeface name":"Symbol","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"916","Unicode hex":"394"},{"Typeface name":"Symbol","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"917","Unicode hex":"395"},{"Typeface name":"Symbol","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"934","Unicode hex":"3A6"},{"Typeface name":"Symbol","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"915","Unicode hex":"393"},{"Typeface name":"Symbol","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"919","Unicode hex":"397"},{"Typeface name":"Symbol","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"921","Unicode hex":"399"},{"Typeface name":"Symbol","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"977","Unicode hex":"3D1"},{"Typeface name":"Symbol","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"922","Unicode hex":"39A"},{"Typeface name":"Symbol","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"923","Unicode hex":"39B"},{"Typeface name":"Symbol","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"924","Unicode hex":"39C"},{"Typeface name":"Symbol","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"925","Unicode hex":"39D"},{"Typeface name":"Symbol","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"927","Unicode hex":"39F"},{"Typeface name":"Symbol","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"928","Unicode hex":"3A0"},{"Typeface name":"Symbol","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"920","Unicode hex":"398"},{"Typeface name":"Symbol","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"929","Unicode hex":"3A1"},{"Typeface name":"Symbol","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"931","Unicode hex":"3A3"},{"Typeface name":"Symbol","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"932","Unicode hex":"3A4"},{"Typeface name":"Symbol","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"933","Unicode hex":"3A5"},{"Typeface name":"Symbol","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"962","Unicode hex":"3C2"},{"Typeface name":"Symbol","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"937","Unicode hex":"3A9"},{"Typeface name":"Symbol","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"926","Unicode hex":"39E"},{"Typeface name":"Symbol","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"936","Unicode hex":"3A8"},{"Typeface name":"Symbol","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"918","Unicode hex":"396"},{"Typeface name":"Symbol","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"91","Unicode hex":"5B"},{"Typeface name":"Symbol","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"8756","Unicode hex":"2234"},{"Typeface name":"Symbol","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"93","Unicode hex":"5D"},{"Typeface name":"Symbol","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"8869","Unicode hex":"22A5"},{"Typeface name":"Symbol","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"95","Unicode hex":"5F"},{"Typeface name":"Symbol","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"8254","Unicode hex":"203E"},{"Typeface name":"Symbol","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"945","Unicode hex":"3B1"},{"Typeface name":"Symbol","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"946","Unicode hex":"3B2"},{"Typeface name":"Symbol","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"967","Unicode hex":"3C7"},{"Typeface name":"Symbol","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"948","Unicode hex":"3B4"},{"Typeface name":"Symbol","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"949","Unicode hex":"3B5"},{"Typeface name":"Symbol","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"966","Unicode hex":"3C6"},{"Typeface name":"Symbol","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"947","Unicode hex":"3B3"},{"Typeface name":"Symbol","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"951","Unicode hex":"3B7"},{"Typeface name":"Symbol","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"953","Unicode hex":"3B9"},{"Typeface name":"Symbol","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"981","Unicode hex":"3D5"},{"Typeface name":"Symbol","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"954","Unicode hex":"3BA"},{"Typeface name":"Symbol","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"955","Unicode hex":"3BB"},{"Typeface name":"Symbol","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"956","Unicode hex":"3BC"},{"Typeface name":"Symbol","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"957","Unicode hex":"3BD"},{"Typeface name":"Symbol","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"959","Unicode hex":"3BF"},{"Typeface name":"Symbol","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"960","Unicode hex":"3C0"},{"Typeface name":"Symbol","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"952","Unicode hex":"3B8"},{"Typeface name":"Symbol","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"961","Unicode hex":"3C1"},{"Typeface name":"Symbol","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"963","Unicode hex":"3C3"},{"Typeface name":"Symbol","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"964","Unicode hex":"3C4"},{"Typeface name":"Symbol","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"965","Unicode hex":"3C5"},{"Typeface name":"Symbol","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"982","Unicode hex":"3D6"},{"Typeface name":"Symbol","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"969","Unicode hex":"3C9"},{"Typeface name":"Symbol","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"958","Unicode hex":"3BE"},{"Typeface name":"Symbol","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"968","Unicode hex":"3C8"},{"Typeface name":"Symbol","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"950","Unicode hex":"3B6"},{"Typeface name":"Symbol","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"123","Unicode hex":"7B"},{"Typeface name":"Symbol","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"124","Unicode hex":"7C"},{"Typeface name":"Symbol","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"125","Unicode hex":"7D"},{"Typeface name":"Symbol","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"126","Unicode hex":"7E"},{"Typeface name":"Symbol","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"8364","Unicode hex":"20AC"},{"Typeface name":"Symbol","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"978","Unicode hex":"3D2"},{"Typeface name":"Symbol","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"8242","Unicode hex":"2032"},{"Typeface name":"Symbol","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"8804","Unicode hex":"2264"},{"Typeface name":"Symbol","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"8260","Unicode hex":"2044"},{"Typeface name":"Symbol","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"8734","Unicode hex":"221E"},{"Typeface name":"Symbol","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"402","Unicode hex":"192"},{"Typeface name":"Symbol","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"9827","Unicode hex":"2663"},{"Typeface name":"Symbol","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"9830","Unicode hex":"2666"},{"Typeface name":"Symbol","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"9829","Unicode hex":"2665"},{"Typeface name":"Symbol","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"9824","Unicode hex":"2660"},{"Typeface name":"Symbol","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"8596","Unicode hex":"2194"},{"Typeface name":"Symbol","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"8592","Unicode hex":"2190"},{"Typeface name":"Symbol","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"8593","Unicode hex":"2191"},{"Typeface name":"Symbol","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"8594","Unicode hex":"2192"},{"Typeface name":"Symbol","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"8595","Unicode hex":"2193"},{"Typeface name":"Symbol","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"176","Unicode hex":"B0"},{"Typeface name":"Symbol","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"177","Unicode hex":"B1"},{"Typeface name":"Symbol","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"8243","Unicode hex":"2033"},{"Typeface name":"Symbol","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"8805","Unicode hex":"2265"},{"Typeface name":"Symbol","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"215","Unicode hex":"D7"},{"Typeface name":"Symbol","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"8733","Unicode hex":"221D"},{"Typeface name":"Symbol","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"8706","Unicode hex":"2202"},{"Typeface name":"Symbol","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"8226","Unicode hex":"2022"},{"Typeface name":"Symbol","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"247","Unicode hex":"F7"},{"Typeface name":"Symbol","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"8800","Unicode hex":"2260"},{"Typeface name":"Symbol","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"8801","Unicode hex":"2261"},{"Typeface name":"Symbol","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"8776","Unicode hex":"2248"},{"Typeface name":"Symbol","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"8230","Unicode hex":"2026"},{"Typeface name":"Symbol","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"9168","Unicode hex":"23D0"},{"Typeface name":"Symbol","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"9135","Unicode hex":"23AF"},{"Typeface name":"Symbol","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"8629","Unicode hex":"21B5"},{"Typeface name":"Symbol","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"8501","Unicode hex":"2135"},{"Typeface name":"Symbol","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"8465","Unicode hex":"2111"},{"Typeface name":"Symbol","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"8476","Unicode hex":"211C"},{"Typeface name":"Symbol","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"8472","Unicode hex":"2118"},{"Typeface name":"Symbol","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"8855","Unicode hex":"2297"},{"Typeface name":"Symbol","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"8853","Unicode hex":"2295"},{"Typeface name":"Symbol","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"8709","Unicode hex":"2205"},{"Typeface name":"Symbol","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"8745","Unicode hex":"2229"},{"Typeface name":"Symbol","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"8746","Unicode hex":"222A"},{"Typeface name":"Symbol","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"8835","Unicode hex":"2283"},{"Typeface name":"Symbol","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"8839","Unicode hex":"2287"},{"Typeface name":"Symbol","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"8836","Unicode hex":"2284"},{"Typeface name":"Symbol","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"8834","Unicode hex":"2282"},{"Typeface name":"Symbol","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"8838","Unicode hex":"2286"},{"Typeface name":"Symbol","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"8712","Unicode hex":"2208"},{"Typeface name":"Symbol","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"8713","Unicode hex":"2209"},{"Typeface name":"Symbol","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"8736","Unicode hex":"2220"},{"Typeface name":"Symbol","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"8711","Unicode hex":"2207"},{"Typeface name":"Symbol","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"174","Unicode hex":"AE"},{"Typeface name":"Symbol","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"169","Unicode hex":"A9"},{"Typeface name":"Symbol","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"8482","Unicode hex":"2122"},{"Typeface name":"Symbol","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"8719","Unicode hex":"220F"},{"Typeface name":"Symbol","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"8730","Unicode hex":"221A"},{"Typeface name":"Symbol","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"8901","Unicode hex":"22C5"},{"Typeface name":"Symbol","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"172","Unicode hex":"AC"},{"Typeface name":"Symbol","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"8743","Unicode hex":"2227"},{"Typeface name":"Symbol","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"8744","Unicode hex":"2228"},{"Typeface name":"Symbol","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"8660","Unicode hex":"21D4"},{"Typeface name":"Symbol","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"8656","Unicode hex":"21D0"},{"Typeface name":"Symbol","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"8657","Unicode hex":"21D1"},{"Typeface name":"Symbol","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"8658","Unicode hex":"21D2"},{"Typeface name":"Symbol","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"8659","Unicode hex":"21D3"},{"Typeface name":"Symbol","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"9674","Unicode hex":"25CA"},{"Typeface name":"Symbol","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"12296","Unicode hex":"3008"},{"Typeface name":"Symbol","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"174","Unicode hex":"AE"},{"Typeface name":"Symbol","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"169","Unicode hex":"A9"},{"Typeface name":"Symbol","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"8482","Unicode hex":"2122"},{"Typeface name":"Symbol","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"8721","Unicode hex":"2211"},{"Typeface name":"Symbol","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"9115","Unicode hex":"239B"},{"Typeface name":"Symbol","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"9116","Unicode hex":"239C"},{"Typeface name":"Symbol","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"9117","Unicode hex":"239D"},{"Typeface name":"Symbol","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"9121","Unicode hex":"23A1"},{"Typeface name":"Symbol","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"9122","Unicode hex":"23A2"},{"Typeface name":"Symbol","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"9123","Unicode hex":"23A3"},{"Typeface name":"Symbol","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"9127","Unicode hex":"23A7"},{"Typeface name":"Symbol","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"9128","Unicode hex":"23A8"},{"Typeface name":"Symbol","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"9129","Unicode hex":"23A9"},{"Typeface name":"Symbol","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"9130","Unicode hex":"23AA"},{"Typeface name":"Symbol","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"63743","Unicode hex":"F8FF"},{"Typeface name":"Symbol","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"12297","Unicode hex":"3009"},{"Typeface name":"Symbol","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"8747","Unicode hex":"222B"},{"Typeface name":"Symbol","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"8992","Unicode hex":"2320"},{"Typeface name":"Symbol","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"9134","Unicode hex":"23AE"},{"Typeface name":"Symbol","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"8993","Unicode hex":"2321"},{"Typeface name":"Symbol","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"9118","Unicode hex":"239E"},{"Typeface name":"Symbol","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"9119","Unicode hex":"239F"},{"Typeface name":"Symbol","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"9120","Unicode hex":"23A0"},{"Typeface name":"Symbol","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"9124","Unicode hex":"23A4"},{"Typeface name":"Symbol","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"9125","Unicode hex":"23A5"},{"Typeface name":"Symbol","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"9126","Unicode hex":"23A6"},{"Typeface name":"Symbol","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"9131","Unicode hex":"23AB"},{"Typeface name":"Symbol","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"9132","Unicode hex":"23AC"},{"Typeface name":"Symbol","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"9133","Unicode hex":"23AD"},{"Typeface name":"Webdings","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Webdings","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128375","Unicode hex":"1F577"},{"Typeface name":"Webdings","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"128376","Unicode hex":"1F578"},{"Typeface name":"Webdings","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"128370","Unicode hex":"1F572"},{"Typeface name":"Webdings","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128374","Unicode hex":"1F576"},{"Typeface name":"Webdings","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"127942","Unicode hex":"1F3C6"},{"Typeface name":"Webdings","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"127894","Unicode hex":"1F396"},{"Typeface name":"Webdings","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128391","Unicode hex":"1F587"},{"Typeface name":"Webdings","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128488","Unicode hex":"1F5E8"},{"Typeface name":"Webdings","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"128489","Unicode hex":"1F5E9"},{"Typeface name":"Webdings","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128496","Unicode hex":"1F5F0"},{"Typeface name":"Webdings","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128497","Unicode hex":"1F5F1"},{"Typeface name":"Webdings","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"127798","Unicode hex":"1F336"},{"Typeface name":"Webdings","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"127895","Unicode hex":"1F397"},{"Typeface name":"Webdings","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128638","Unicode hex":"1F67E"},{"Typeface name":"Webdings","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128636","Unicode hex":"1F67C"},{"Typeface name":"Webdings","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128469","Unicode hex":"1F5D5"},{"Typeface name":"Webdings","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128470","Unicode hex":"1F5D6"},{"Typeface name":"Webdings","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128471","Unicode hex":"1F5D7"},{"Typeface name":"Webdings","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"9204","Unicode hex":"23F4"},{"Typeface name":"Webdings","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"9205","Unicode hex":"23F5"},{"Typeface name":"Webdings","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"9206","Unicode hex":"23F6"},{"Typeface name":"Webdings","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"9207","Unicode hex":"23F7"},{"Typeface name":"Webdings","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"9194","Unicode hex":"23EA"},{"Typeface name":"Webdings","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"9193","Unicode hex":"23E9"},{"Typeface name":"Webdings","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"9198","Unicode hex":"23EE"},{"Typeface name":"Webdings","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"9197","Unicode hex":"23ED"},{"Typeface name":"Webdings","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"9208","Unicode hex":"23F8"},{"Typeface name":"Webdings","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"9209","Unicode hex":"23F9"},{"Typeface name":"Webdings","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"9210","Unicode hex":"23FA"},{"Typeface name":"Webdings","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"128474","Unicode hex":"1F5DA"},{"Typeface name":"Webdings","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"128499","Unicode hex":"1F5F3"},{"Typeface name":"Webdings","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128736","Unicode hex":"1F6E0"},{"Typeface name":"Webdings","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"127959","Unicode hex":"1F3D7"},{"Typeface name":"Webdings","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"127960","Unicode hex":"1F3D8"},{"Typeface name":"Webdings","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"127961","Unicode hex":"1F3D9"},{"Typeface name":"Webdings","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"127962","Unicode hex":"1F3DA"},{"Typeface name":"Webdings","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"127964","Unicode hex":"1F3DC"},{"Typeface name":"Webdings","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"127981","Unicode hex":"1F3ED"},{"Typeface name":"Webdings","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"127963","Unicode hex":"1F3DB"},{"Typeface name":"Webdings","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"127968","Unicode hex":"1F3E0"},{"Typeface name":"Webdings","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"127958","Unicode hex":"1F3D6"},{"Typeface name":"Webdings","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"127965","Unicode hex":"1F3DD"},{"Typeface name":"Webdings","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128739","Unicode hex":"1F6E3"},{"Typeface name":"Webdings","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"128269","Unicode hex":"1F50D"},{"Typeface name":"Webdings","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"127956","Unicode hex":"1F3D4"},{"Typeface name":"Webdings","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128065","Unicode hex":"1F441"},{"Typeface name":"Webdings","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"128066","Unicode hex":"1F442"},{"Typeface name":"Webdings","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"127966","Unicode hex":"1F3DE"},{"Typeface name":"Webdings","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"127957","Unicode hex":"1F3D5"},{"Typeface name":"Webdings","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"128740","Unicode hex":"1F6E4"},{"Typeface name":"Webdings","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"127967","Unicode hex":"1F3DF"},{"Typeface name":"Webdings","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"128755","Unicode hex":"1F6F3"},{"Typeface name":"Webdings","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"128364","Unicode hex":"1F56C"},{"Typeface name":"Webdings","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"128363","Unicode hex":"1F56B"},{"Typeface name":"Webdings","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128360","Unicode hex":"1F568"},{"Typeface name":"Webdings","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"128264","Unicode hex":"1F508"},{"Typeface name":"Webdings","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"127892","Unicode hex":"1F394"},{"Typeface name":"Webdings","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"127893","Unicode hex":"1F395"},{"Typeface name":"Webdings","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"128492","Unicode hex":"1F5EC"},{"Typeface name":"Webdings","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128637","Unicode hex":"1F67D"},{"Typeface name":"Webdings","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"128493","Unicode hex":"1F5ED"},{"Typeface name":"Webdings","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"128490","Unicode hex":"1F5EA"},{"Typeface name":"Webdings","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"128491","Unicode hex":"1F5EB"},{"Typeface name":"Webdings","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"11156","Unicode hex":"2B94"},{"Typeface name":"Webdings","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"10004","Unicode hex":"2714"},{"Typeface name":"Webdings","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"128690","Unicode hex":"1F6B2"},{"Typeface name":"Webdings","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"11036","Unicode hex":"2B1C"},{"Typeface name":"Webdings","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"128737","Unicode hex":"1F6E1"},{"Typeface name":"Webdings","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"128230","Unicode hex":"1F4E6"},{"Typeface name":"Webdings","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"128753","Unicode hex":"1F6F1"},{"Typeface name":"Webdings","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"11035","Unicode hex":"2B1B"},{"Typeface name":"Webdings","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"128657","Unicode hex":"1F691"},{"Typeface name":"Webdings","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"128712","Unicode hex":"1F6C8"},{"Typeface name":"Webdings","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"128745","Unicode hex":"1F6E9"},{"Typeface name":"Webdings","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"128752","Unicode hex":"1F6F0"},{"Typeface name":"Webdings","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"128968","Unicode hex":"1F7C8"},{"Typeface name":"Webdings","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"128372","Unicode hex":"1F574"},{"Typeface name":"Webdings","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"11044","Unicode hex":"2B24"},{"Typeface name":"Webdings","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"128741","Unicode hex":"1F6E5"},{"Typeface name":"Webdings","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"128660","Unicode hex":"1F694"},{"Typeface name":"Webdings","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"128472","Unicode hex":"1F5D8"},{"Typeface name":"Webdings","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"128473","Unicode hex":"1F5D9"},{"Typeface name":"Webdings","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"10067","Unicode hex":"2753"},{"Typeface name":"Webdings","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"128754","Unicode hex":"1F6F2"},{"Typeface name":"Webdings","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"128647","Unicode hex":"1F687"},{"Typeface name":"Webdings","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"128653","Unicode hex":"1F68D"},{"Typeface name":"Webdings","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"9971","Unicode hex":"26F3"},{"Typeface name":"Webdings","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"10680","Unicode hex":"29B8"},{"Typeface name":"Webdings","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"8854","Unicode hex":"2296"},{"Typeface name":"Webdings","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"128685","Unicode hex":"1F6AD"},{"Typeface name":"Webdings","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"128494","Unicode hex":"1F5EE"},{"Typeface name":"Webdings","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"9168","Unicode hex":"23D0"},{"Typeface name":"Webdings","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128495","Unicode hex":"1F5EF"},{"Typeface name":"Webdings","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128498","Unicode hex":"1F5F2"},{"Typeface name":"Webdings","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"128697","Unicode hex":"1F6B9"},{"Typeface name":"Webdings","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"128698","Unicode hex":"1F6BA"},{"Typeface name":"Webdings","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"128713","Unicode hex":"1F6C9"},{"Typeface name":"Webdings","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"128714","Unicode hex":"1F6CA"},{"Typeface name":"Webdings","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"128700","Unicode hex":"1F6BC"},{"Typeface name":"Webdings","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"128125","Unicode hex":"1F47D"},{"Typeface name":"Webdings","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"127947","Unicode hex":"1F3CB"},{"Typeface name":"Webdings","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"9975","Unicode hex":"26F7"},{"Typeface name":"Webdings","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"127938","Unicode hex":"1F3C2"},{"Typeface name":"Webdings","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"127948","Unicode hex":"1F3CC"},{"Typeface name":"Webdings","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"127946","Unicode hex":"1F3CA"},{"Typeface name":"Webdings","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"127940","Unicode hex":"1F3C4"},{"Typeface name":"Webdings","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"127949","Unicode hex":"1F3CD"},{"Typeface name":"Webdings","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"127950","Unicode hex":"1F3CE"},{"Typeface name":"Webdings","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"128664","Unicode hex":"1F698"},{"Typeface name":"Webdings","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"128480","Unicode hex":"1F5E0"},{"Typeface name":"Webdings","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"128738","Unicode hex":"1F6E2"},{"Typeface name":"Webdings","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"128176","Unicode hex":"1F4B0"},{"Typeface name":"Webdings","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"127991","Unicode hex":"1F3F7"},{"Typeface name":"Webdings","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"128179","Unicode hex":"1F4B3"},{"Typeface name":"Webdings","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"128106","Unicode hex":"1F46A"},{"Typeface name":"Webdings","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"128481","Unicode hex":"1F5E1"},{"Typeface name":"Webdings","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128482","Unicode hex":"1F5E2"},{"Typeface name":"Webdings","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"128483","Unicode hex":"1F5E3"},{"Typeface name":"Webdings","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"10031","Unicode hex":"272F"},{"Typeface name":"Webdings","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"128388","Unicode hex":"1F584"},{"Typeface name":"Webdings","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128389","Unicode hex":"1F585"},{"Typeface name":"Webdings","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128387","Unicode hex":"1F583"},{"Typeface name":"Webdings","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128390","Unicode hex":"1F586"},{"Typeface name":"Webdings","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"128441","Unicode hex":"1F5B9"},{"Typeface name":"Webdings","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"128442","Unicode hex":"1F5BA"},{"Typeface name":"Webdings","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"128443","Unicode hex":"1F5BB"},{"Typeface name":"Webdings","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"128373","Unicode hex":"1F575"},{"Typeface name":"Webdings","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"128368","Unicode hex":"1F570"},{"Typeface name":"Webdings","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"128445","Unicode hex":"1F5BD"},{"Typeface name":"Webdings","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"128446","Unicode hex":"1F5BE"},{"Typeface name":"Webdings","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128203","Unicode hex":"1F4CB"},{"Typeface name":"Webdings","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128466","Unicode hex":"1F5D2"},{"Typeface name":"Webdings","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128467","Unicode hex":"1F5D3"},{"Typeface name":"Webdings","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"128366","Unicode hex":"1F56E"},{"Typeface name":"Webdings","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"128218","Unicode hex":"1F4DA"},{"Typeface name":"Webdings","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128478","Unicode hex":"1F5DE"},{"Typeface name":"Webdings","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128479","Unicode hex":"1F5DF"},{"Typeface name":"Webdings","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"128451","Unicode hex":"1F5C3"},{"Typeface name":"Webdings","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128450","Unicode hex":"1F5C2"},{"Typeface name":"Webdings","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"128444","Unicode hex":"1F5BC"},{"Typeface name":"Webdings","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"127917","Unicode hex":"1F3AD"},{"Typeface name":"Webdings","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"127900","Unicode hex":"1F39C"},{"Typeface name":"Webdings","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"127896","Unicode hex":"1F398"},{"Typeface name":"Webdings","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"127897","Unicode hex":"1F399"},{"Typeface name":"Webdings","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"127911","Unicode hex":"1F3A7"},{"Typeface name":"Webdings","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"128191","Unicode hex":"1F4BF"},{"Typeface name":"Webdings","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"127902","Unicode hex":"1F39E"},{"Typeface name":"Webdings","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"128247","Unicode hex":"1F4F7"},{"Typeface name":"Webdings","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"127903","Unicode hex":"1F39F"},{"Typeface name":"Webdings","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"127916","Unicode hex":"1F3AC"},{"Typeface name":"Webdings","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"128253","Unicode hex":"1F4FD"},{"Typeface name":"Webdings","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128249","Unicode hex":"1F4F9"},{"Typeface name":"Webdings","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"128254","Unicode hex":"1F4FE"},{"Typeface name":"Webdings","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"128251","Unicode hex":"1F4FB"},{"Typeface name":"Webdings","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"127898","Unicode hex":"1F39A"},{"Typeface name":"Webdings","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"127899","Unicode hex":"1F39B"},{"Typeface name":"Webdings","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"128250","Unicode hex":"1F4FA"},{"Typeface name":"Webdings","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"128187","Unicode hex":"1F4BB"},{"Typeface name":"Webdings","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"128421","Unicode hex":"1F5A5"},{"Typeface name":"Webdings","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"128422","Unicode hex":"1F5A6"},{"Typeface name":"Webdings","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"128423","Unicode hex":"1F5A7"},{"Typeface name":"Webdings","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"128377","Unicode hex":"1F579"},{"Typeface name":"Webdings","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"127918","Unicode hex":"1F3AE"},{"Typeface name":"Webdings","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"128379","Unicode hex":"1F57B"},{"Typeface name":"Webdings","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"128380","Unicode hex":"1F57C"},{"Typeface name":"Webdings","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"128223","Unicode hex":"1F4DF"},{"Typeface name":"Webdings","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"128385","Unicode hex":"1F581"},{"Typeface name":"Webdings","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"128384","Unicode hex":"1F580"},{"Typeface name":"Webdings","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"128424","Unicode hex":"1F5A8"},{"Typeface name":"Webdings","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128425","Unicode hex":"1F5A9"},{"Typeface name":"Webdings","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128447","Unicode hex":"1F5BF"},{"Typeface name":"Webdings","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128426","Unicode hex":"1F5AA"},{"Typeface name":"Webdings","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128476","Unicode hex":"1F5DC"},{"Typeface name":"Webdings","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128274","Unicode hex":"1F512"},{"Typeface name":"Webdings","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128275","Unicode hex":"1F513"},{"Typeface name":"Webdings","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128477","Unicode hex":"1F5DD"},{"Typeface name":"Webdings","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128229","Unicode hex":"1F4E5"},{"Typeface name":"Webdings","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128228","Unicode hex":"1F4E4"},{"Typeface name":"Webdings","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128371","Unicode hex":"1F573"},{"Typeface name":"Webdings","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"127779","Unicode hex":"1F323"},{"Typeface name":"Webdings","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"127780","Unicode hex":"1F324"},{"Typeface name":"Webdings","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"127781","Unicode hex":"1F325"},{"Typeface name":"Webdings","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"127782","Unicode hex":"1F326"},{"Typeface name":"Webdings","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"9729","Unicode hex":"2601"},{"Typeface name":"Webdings","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"127784","Unicode hex":"1F328"},{"Typeface name":"Webdings","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"127783","Unicode hex":"1F327"},{"Typeface name":"Webdings","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"127785","Unicode hex":"1F329"},{"Typeface name":"Webdings","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"127786","Unicode hex":"1F32A"},{"Typeface name":"Webdings","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"127788","Unicode hex":"1F32C"},{"Typeface name":"Webdings","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"127787","Unicode hex":"1F32B"},{"Typeface name":"Webdings","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"127772","Unicode hex":"1F31C"},{"Typeface name":"Webdings","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"127777","Unicode hex":"1F321"},{"Typeface name":"Webdings","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"128715","Unicode hex":"1F6CB"},{"Typeface name":"Webdings","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"128719","Unicode hex":"1F6CF"},{"Typeface name":"Webdings","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"127869","Unicode hex":"1F37D"},{"Typeface name":"Webdings","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"127864","Unicode hex":"1F378"},{"Typeface name":"Webdings","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"128718","Unicode hex":"1F6CE"},{"Typeface name":"Webdings","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"128717","Unicode hex":"1F6CD"},{"Typeface name":"Webdings","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"9413","Unicode hex":"24C5"},{"Typeface name":"Webdings","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"9855","Unicode hex":"267F"},{"Typeface name":"Webdings","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"128710","Unicode hex":"1F6C6"},{"Typeface name":"Webdings","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"128392","Unicode hex":"1F588"},{"Typeface name":"Webdings","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"127891","Unicode hex":"1F393"},{"Typeface name":"Webdings","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"128484","Unicode hex":"1F5E4"},{"Typeface name":"Webdings","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"128485","Unicode hex":"1F5E5"},{"Typeface name":"Webdings","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"128486","Unicode hex":"1F5E6"},{"Typeface name":"Webdings","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"128487","Unicode hex":"1F5E7"},{"Typeface name":"Webdings","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"128746","Unicode hex":"1F6EA"},{"Typeface name":"Webdings","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"128063","Unicode hex":"1F43F"},{"Typeface name":"Webdings","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"128038","Unicode hex":"1F426"},{"Typeface name":"Webdings","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"128031","Unicode hex":"1F41F"},{"Typeface name":"Webdings","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"128021","Unicode hex":"1F415"},{"Typeface name":"Webdings","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"128008","Unicode hex":"1F408"},{"Typeface name":"Webdings","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"128620","Unicode hex":"1F66C"},{"Typeface name":"Webdings","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"128622","Unicode hex":"1F66E"},{"Typeface name":"Webdings","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"128621","Unicode hex":"1F66D"},{"Typeface name":"Webdings","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"128623","Unicode hex":"1F66F"},{"Typeface name":"Webdings","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"128506","Unicode hex":"1F5FA"},{"Typeface name":"Webdings","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"127757","Unicode hex":"1F30D"},{"Typeface name":"Webdings","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"127759","Unicode hex":"1F30F"},{"Typeface name":"Webdings","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"127758","Unicode hex":"1F30E"},{"Typeface name":"Webdings","Dingbat dec":"255","Dingbat hex":"FF","Unicode dec":"128330","Unicode hex":"1F54A"},{"Typeface name":"Wingdings","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128393","Unicode hex":"1F589"},{"Typeface name":"Wingdings","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"9986","Unicode hex":"2702"},{"Typeface name":"Wingdings","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"9985","Unicode hex":"2701"},{"Typeface name":"Wingdings","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128083","Unicode hex":"1F453"},{"Typeface name":"Wingdings","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"128365","Unicode hex":"1F56D"},{"Typeface name":"Wingdings","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"128366","Unicode hex":"1F56E"},{"Typeface name":"Wingdings","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128367","Unicode hex":"1F56F"},{"Typeface name":"Wingdings","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128383","Unicode hex":"1F57F"},{"Typeface name":"Wingdings","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"9990","Unicode hex":"2706"},{"Typeface name":"Wingdings","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128386","Unicode hex":"1F582"},{"Typeface name":"Wingdings","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128387","Unicode hex":"1F583"},{"Typeface name":"Wingdings","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"128234","Unicode hex":"1F4EA"},{"Typeface name":"Wingdings","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"128235","Unicode hex":"1F4EB"},{"Typeface name":"Wingdings","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128236","Unicode hex":"1F4EC"},{"Typeface name":"Wingdings","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128237","Unicode hex":"1F4ED"},{"Typeface name":"Wingdings","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128448","Unicode hex":"1F5C0"},{"Typeface name":"Wingdings","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128449","Unicode hex":"1F5C1"},{"Typeface name":"Wingdings","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128462","Unicode hex":"1F5CE"},{"Typeface name":"Wingdings","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"128463","Unicode hex":"1F5CF"},{"Typeface name":"Wingdings","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"128464","Unicode hex":"1F5D0"},{"Typeface name":"Wingdings","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"128452","Unicode hex":"1F5C4"},{"Typeface name":"Wingdings","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"8987","Unicode hex":"231B"},{"Typeface name":"Wingdings","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"128430","Unicode hex":"1F5AE"},{"Typeface name":"Wingdings","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"128432","Unicode hex":"1F5B0"},{"Typeface name":"Wingdings","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"128434","Unicode hex":"1F5B2"},{"Typeface name":"Wingdings","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"128435","Unicode hex":"1F5B3"},{"Typeface name":"Wingdings","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"128436","Unicode hex":"1F5B4"},{"Typeface name":"Wingdings","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"128427","Unicode hex":"1F5AB"},{"Typeface name":"Wingdings","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"128428","Unicode hex":"1F5AC"},{"Typeface name":"Wingdings","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"9991","Unicode hex":"2707"},{"Typeface name":"Wingdings","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"9997","Unicode hex":"270D"},{"Typeface name":"Wingdings","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128398","Unicode hex":"1F58E"},{"Typeface name":"Wingdings","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"9996","Unicode hex":"270C"},{"Typeface name":"Wingdings","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"128399","Unicode hex":"1F58F"},{"Typeface name":"Wingdings","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"128077","Unicode hex":"1F44D"},{"Typeface name":"Wingdings","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"128078","Unicode hex":"1F44E"},{"Typeface name":"Wingdings","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"9756","Unicode hex":"261C"},{"Typeface name":"Wingdings","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"9758","Unicode hex":"261E"},{"Typeface name":"Wingdings","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"9757","Unicode hex":"261D"},{"Typeface name":"Wingdings","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"9759","Unicode hex":"261F"},{"Typeface name":"Wingdings","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"128400","Unicode hex":"1F590"},{"Typeface name":"Wingdings","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"9786","Unicode hex":"263A"},{"Typeface name":"Wingdings","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128528","Unicode hex":"1F610"},{"Typeface name":"Wingdings","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"9785","Unicode hex":"2639"},{"Typeface name":"Wingdings","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"128163","Unicode hex":"1F4A3"},{"Typeface name":"Wingdings","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128369","Unicode hex":"1F571"},{"Typeface name":"Wingdings","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"127987","Unicode hex":"1F3F3"},{"Typeface name":"Wingdings","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"127985","Unicode hex":"1F3F1"},{"Typeface name":"Wingdings","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"9992","Unicode hex":"2708"},{"Typeface name":"Wingdings","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9788","Unicode hex":"263C"},{"Typeface name":"Wingdings","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"127778","Unicode hex":"1F322"},{"Typeface name":"Wingdings","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"10052","Unicode hex":"2744"},{"Typeface name":"Wingdings","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"128326","Unicode hex":"1F546"},{"Typeface name":"Wingdings","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"10014","Unicode hex":"271E"},{"Typeface name":"Wingdings","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128328","Unicode hex":"1F548"},{"Typeface name":"Wingdings","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"10016","Unicode hex":"2720"},{"Typeface name":"Wingdings","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"10017","Unicode hex":"2721"},{"Typeface name":"Wingdings","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"9770","Unicode hex":"262A"},{"Typeface name":"Wingdings","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"9775","Unicode hex":"262F"},{"Typeface name":"Wingdings","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128329","Unicode hex":"1F549"},{"Typeface name":"Wingdings","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"9784","Unicode hex":"2638"},{"Typeface name":"Wingdings","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"9800","Unicode hex":"2648"},{"Typeface name":"Wingdings","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"9801","Unicode hex":"2649"},{"Typeface name":"Wingdings","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"9802","Unicode hex":"264A"},{"Typeface name":"Wingdings","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"9803","Unicode hex":"264B"},{"Typeface name":"Wingdings","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"9804","Unicode hex":"264C"},{"Typeface name":"Wingdings","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"9805","Unicode hex":"264D"},{"Typeface name":"Wingdings","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"9806","Unicode hex":"264E"},{"Typeface name":"Wingdings","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"9807","Unicode hex":"264F"},{"Typeface name":"Wingdings","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"9808","Unicode hex":"2650"},{"Typeface name":"Wingdings","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"9809","Unicode hex":"2651"},{"Typeface name":"Wingdings","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"9810","Unicode hex":"2652"},{"Typeface name":"Wingdings","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"9811","Unicode hex":"2653"},{"Typeface name":"Wingdings","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"128624","Unicode hex":"1F670"},{"Typeface name":"Wingdings","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"128629","Unicode hex":"1F675"},{"Typeface name":"Wingdings","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"9899","Unicode hex":"26AB"},{"Typeface name":"Wingdings","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"128318","Unicode hex":"1F53E"},{"Typeface name":"Wingdings","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"9724","Unicode hex":"25FC"},{"Typeface name":"Wingdings","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"128911","Unicode hex":"1F78F"},{"Typeface name":"Wingdings","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"128912","Unicode hex":"1F790"},{"Typeface name":"Wingdings","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"10065","Unicode hex":"2751"},{"Typeface name":"Wingdings","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"10066","Unicode hex":"2752"},{"Typeface name":"Wingdings","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"128927","Unicode hex":"1F79F"},{"Typeface name":"Wingdings","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"10731","Unicode hex":"29EB"},{"Typeface name":"Wingdings","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"9670","Unicode hex":"25C6"},{"Typeface name":"Wingdings","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"10070","Unicode hex":"2756"},{"Typeface name":"Wingdings","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"11049","Unicode hex":"2B29"},{"Typeface name":"Wingdings","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"8999","Unicode hex":"2327"},{"Typeface name":"Wingdings","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"11193","Unicode hex":"2BB9"},{"Typeface name":"Wingdings","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"8984","Unicode hex":"2318"},{"Typeface name":"Wingdings","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"127989","Unicode hex":"1F3F5"},{"Typeface name":"Wingdings","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"127990","Unicode hex":"1F3F6"},{"Typeface name":"Wingdings","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128630","Unicode hex":"1F676"},{"Typeface name":"Wingdings","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128631","Unicode hex":"1F677"},{"Typeface name":"Wingdings","Dingbat dec":"127","Dingbat hex":"7F","Unicode dec":"9647","Unicode hex":"25AF"},{"Typeface name":"Wingdings","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"127243","Unicode hex":"1F10B"},{"Typeface name":"Wingdings","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"10112","Unicode hex":"2780"},{"Typeface name":"Wingdings","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"10113","Unicode hex":"2781"},{"Typeface name":"Wingdings","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"10114","Unicode hex":"2782"},{"Typeface name":"Wingdings","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"10115","Unicode hex":"2783"},{"Typeface name":"Wingdings","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"10116","Unicode hex":"2784"},{"Typeface name":"Wingdings","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"10117","Unicode hex":"2785"},{"Typeface name":"Wingdings","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"10118","Unicode hex":"2786"},{"Typeface name":"Wingdings","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"10119","Unicode hex":"2787"},{"Typeface name":"Wingdings","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"10120","Unicode hex":"2788"},{"Typeface name":"Wingdings","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"10121","Unicode hex":"2789"},{"Typeface name":"Wingdings","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"127244","Unicode hex":"1F10C"},{"Typeface name":"Wingdings","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"10122","Unicode hex":"278A"},{"Typeface name":"Wingdings","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"10123","Unicode hex":"278B"},{"Typeface name":"Wingdings","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"10124","Unicode hex":"278C"},{"Typeface name":"Wingdings","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"10125","Unicode hex":"278D"},{"Typeface name":"Wingdings","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"10126","Unicode hex":"278E"},{"Typeface name":"Wingdings","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"10127","Unicode hex":"278F"},{"Typeface name":"Wingdings","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"10128","Unicode hex":"2790"},{"Typeface name":"Wingdings","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"10129","Unicode hex":"2791"},{"Typeface name":"Wingdings","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"10130","Unicode hex":"2792"},{"Typeface name":"Wingdings","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"10131","Unicode hex":"2793"},{"Typeface name":"Wingdings","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128610","Unicode hex":"1F662"},{"Typeface name":"Wingdings","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"128608","Unicode hex":"1F660"},{"Typeface name":"Wingdings","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"128609","Unicode hex":"1F661"},{"Typeface name":"Wingdings","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"128611","Unicode hex":"1F663"},{"Typeface name":"Wingdings","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128606","Unicode hex":"1F65E"},{"Typeface name":"Wingdings","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128604","Unicode hex":"1F65C"},{"Typeface name":"Wingdings","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128605","Unicode hex":"1F65D"},{"Typeface name":"Wingdings","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"128607","Unicode hex":"1F65F"},{"Typeface name":"Wingdings","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"8729","Unicode hex":"2219"},{"Typeface name":"Wingdings","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"8226","Unicode hex":"2022"},{"Typeface name":"Wingdings","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"11037","Unicode hex":"2B1D"},{"Typeface name":"Wingdings","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"11096","Unicode hex":"2B58"},{"Typeface name":"Wingdings","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"128902","Unicode hex":"1F786"},{"Typeface name":"Wingdings","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"128904","Unicode hex":"1F788"},{"Typeface name":"Wingdings","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128906","Unicode hex":"1F78A"},{"Typeface name":"Wingdings","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128907","Unicode hex":"1F78B"},{"Typeface name":"Wingdings","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128319","Unicode hex":"1F53F"},{"Typeface name":"Wingdings","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"9642","Unicode hex":"25AA"},{"Typeface name":"Wingdings","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"128910","Unicode hex":"1F78E"},{"Typeface name":"Wingdings","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128961","Unicode hex":"1F7C1"},{"Typeface name":"Wingdings","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128965","Unicode hex":"1F7C5"},{"Typeface name":"Wingdings","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"9733","Unicode hex":"2605"},{"Typeface name":"Wingdings","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128971","Unicode hex":"1F7CB"},{"Typeface name":"Wingdings","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"128975","Unicode hex":"1F7CF"},{"Typeface name":"Wingdings","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"128979","Unicode hex":"1F7D3"},{"Typeface name":"Wingdings","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"128977","Unicode hex":"1F7D1"},{"Typeface name":"Wingdings","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"11216","Unicode hex":"2BD0"},{"Typeface name":"Wingdings","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"8982","Unicode hex":"2316"},{"Typeface name":"Wingdings","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"11214","Unicode hex":"2BCE"},{"Typeface name":"Wingdings","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"11215","Unicode hex":"2BCF"},{"Typeface name":"Wingdings","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"11217","Unicode hex":"2BD1"},{"Typeface name":"Wingdings","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"10026","Unicode hex":"272A"},{"Typeface name":"Wingdings","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"10032","Unicode hex":"2730"},{"Typeface name":"Wingdings","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"128336","Unicode hex":"1F550"},{"Typeface name":"Wingdings","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"128337","Unicode hex":"1F551"},{"Typeface name":"Wingdings","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128338","Unicode hex":"1F552"},{"Typeface name":"Wingdings","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"128339","Unicode hex":"1F553"},{"Typeface name":"Wingdings","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"128340","Unicode hex":"1F554"},{"Typeface name":"Wingdings","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"128341","Unicode hex":"1F555"},{"Typeface name":"Wingdings","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"128342","Unicode hex":"1F556"},{"Typeface name":"Wingdings","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"128343","Unicode hex":"1F557"},{"Typeface name":"Wingdings","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"128344","Unicode hex":"1F558"},{"Typeface name":"Wingdings","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"128345","Unicode hex":"1F559"},{"Typeface name":"Wingdings","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"128346","Unicode hex":"1F55A"},{"Typeface name":"Wingdings","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"128347","Unicode hex":"1F55B"},{"Typeface name":"Wingdings","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"11184","Unicode hex":"2BB0"},{"Typeface name":"Wingdings","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"11185","Unicode hex":"2BB1"},{"Typeface name":"Wingdings","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"11186","Unicode hex":"2BB2"},{"Typeface name":"Wingdings","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"11187","Unicode hex":"2BB3"},{"Typeface name":"Wingdings","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"11188","Unicode hex":"2BB4"},{"Typeface name":"Wingdings","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"11189","Unicode hex":"2BB5"},{"Typeface name":"Wingdings","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"11190","Unicode hex":"2BB6"},{"Typeface name":"Wingdings","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"11191","Unicode hex":"2BB7"},{"Typeface name":"Wingdings","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128618","Unicode hex":"1F66A"},{"Typeface name":"Wingdings","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128619","Unicode hex":"1F66B"},{"Typeface name":"Wingdings","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128597","Unicode hex":"1F655"},{"Typeface name":"Wingdings","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128596","Unicode hex":"1F654"},{"Typeface name":"Wingdings","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128599","Unicode hex":"1F657"},{"Typeface name":"Wingdings","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128598","Unicode hex":"1F656"},{"Typeface name":"Wingdings","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128592","Unicode hex":"1F650"},{"Typeface name":"Wingdings","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128593","Unicode hex":"1F651"},{"Typeface name":"Wingdings","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128594","Unicode hex":"1F652"},{"Typeface name":"Wingdings","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128595","Unicode hex":"1F653"},{"Typeface name":"Wingdings","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"9003","Unicode hex":"232B"},{"Typeface name":"Wingdings","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"8998","Unicode hex":"2326"},{"Typeface name":"Wingdings","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"11160","Unicode hex":"2B98"},{"Typeface name":"Wingdings","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"11162","Unicode hex":"2B9A"},{"Typeface name":"Wingdings","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"11161","Unicode hex":"2B99"},{"Typeface name":"Wingdings","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"11163","Unicode hex":"2B9B"},{"Typeface name":"Wingdings","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"11144","Unicode hex":"2B88"},{"Typeface name":"Wingdings","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"11146","Unicode hex":"2B8A"},{"Typeface name":"Wingdings","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"11145","Unicode hex":"2B89"},{"Typeface name":"Wingdings","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"11147","Unicode hex":"2B8B"},{"Typeface name":"Wingdings","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"129128","Unicode hex":"1F868"},{"Typeface name":"Wingdings","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"129130","Unicode hex":"1F86A"},{"Typeface name":"Wingdings","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"129129","Unicode hex":"1F869"},{"Typeface name":"Wingdings","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"129131","Unicode hex":"1F86B"},{"Typeface name":"Wingdings","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"129132","Unicode hex":"1F86C"},{"Typeface name":"Wingdings","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"129133","Unicode hex":"1F86D"},{"Typeface name":"Wingdings","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"129135","Unicode hex":"1F86F"},{"Typeface name":"Wingdings","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"129134","Unicode hex":"1F86E"},{"Typeface name":"Wingdings","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"129144","Unicode hex":"1F878"},{"Typeface name":"Wingdings","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"129146","Unicode hex":"1F87A"},{"Typeface name":"Wingdings","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"129145","Unicode hex":"1F879"},{"Typeface name":"Wingdings","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"129147","Unicode hex":"1F87B"},{"Typeface name":"Wingdings","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"129148","Unicode hex":"1F87C"},{"Typeface name":"Wingdings","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"129149","Unicode hex":"1F87D"},{"Typeface name":"Wingdings","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"129151","Unicode hex":"1F87F"},{"Typeface name":"Wingdings","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"129150","Unicode hex":"1F87E"},{"Typeface name":"Wingdings","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"8678","Unicode hex":"21E6"},{"Typeface name":"Wingdings","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"8680","Unicode hex":"21E8"},{"Typeface name":"Wingdings","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"8679","Unicode hex":"21E7"},{"Typeface name":"Wingdings","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"8681","Unicode hex":"21E9"},{"Typeface name":"Wingdings","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"11012","Unicode hex":"2B04"},{"Typeface name":"Wingdings","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"8691","Unicode hex":"21F3"},{"Typeface name":"Wingdings","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"11009","Unicode hex":"2B01"},{"Typeface name":"Wingdings","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"11008","Unicode hex":"2B00"},{"Typeface name":"Wingdings","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"11011","Unicode hex":"2B03"},{"Typeface name":"Wingdings","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"11010","Unicode hex":"2B02"},{"Typeface name":"Wingdings","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"129196","Unicode hex":"1F8AC"},{"Typeface name":"Wingdings","Dingbat dec":"250","Dingbat hex":"FA","Unicode dec":"129197","Unicode hex":"1F8AD"},{"Typeface name":"Wingdings","Dingbat dec":"251","Dingbat hex":"FB","Unicode dec":"128502","Unicode hex":"1F5F6"},{"Typeface name":"Wingdings","Dingbat dec":"252","Dingbat hex":"FC","Unicode dec":"10003","Unicode hex":"2713"},{"Typeface name":"Wingdings","Dingbat dec":"253","Dingbat hex":"FD","Unicode dec":"128503","Unicode hex":"1F5F7"},{"Typeface name":"Wingdings","Dingbat dec":"254","Dingbat hex":"FE","Unicode dec":"128505","Unicode hex":"1F5F9"},{"Typeface name":"Wingdings 2","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings 2","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"128394","Unicode hex":"1F58A"},{"Typeface name":"Wingdings 2","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"128395","Unicode hex":"1F58B"},{"Typeface name":"Wingdings 2","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"128396","Unicode hex":"1F58C"},{"Typeface name":"Wingdings 2","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"128397","Unicode hex":"1F58D"},{"Typeface name":"Wingdings 2","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"9988","Unicode hex":"2704"},{"Typeface name":"Wingdings 2","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"9984","Unicode hex":"2700"},{"Typeface name":"Wingdings 2","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"128382","Unicode hex":"1F57E"},{"Typeface name":"Wingdings 2","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"128381","Unicode hex":"1F57D"},{"Typeface name":"Wingdings 2","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"128453","Unicode hex":"1F5C5"},{"Typeface name":"Wingdings 2","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"128454","Unicode hex":"1F5C6"},{"Typeface name":"Wingdings 2","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"128455","Unicode hex":"1F5C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"128456","Unicode hex":"1F5C8"},{"Typeface name":"Wingdings 2","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"128457","Unicode hex":"1F5C9"},{"Typeface name":"Wingdings 2","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"128458","Unicode hex":"1F5CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"128459","Unicode hex":"1F5CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"128460","Unicode hex":"1F5CC"},{"Typeface name":"Wingdings 2","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"128461","Unicode hex":"1F5CD"},{"Typeface name":"Wingdings 2","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"128203","Unicode hex":"1F4CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"128465","Unicode hex":"1F5D1"},{"Typeface name":"Wingdings 2","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"128468","Unicode hex":"1F5D4"},{"Typeface name":"Wingdings 2","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"128437","Unicode hex":"1F5B5"},{"Typeface name":"Wingdings 2","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"128438","Unicode hex":"1F5B6"},{"Typeface name":"Wingdings 2","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"128439","Unicode hex":"1F5B7"},{"Typeface name":"Wingdings 2","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"128440","Unicode hex":"1F5B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"128429","Unicode hex":"1F5AD"},{"Typeface name":"Wingdings 2","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"128431","Unicode hex":"1F5AF"},{"Typeface name":"Wingdings 2","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"128433","Unicode hex":"1F5B1"},{"Typeface name":"Wingdings 2","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"128402","Unicode hex":"1F592"},{"Typeface name":"Wingdings 2","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"128403","Unicode hex":"1F593"},{"Typeface name":"Wingdings 2","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"128408","Unicode hex":"1F598"},{"Typeface name":"Wingdings 2","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"128409","Unicode hex":"1F599"},{"Typeface name":"Wingdings 2","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"128410","Unicode hex":"1F59A"},{"Typeface name":"Wingdings 2","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"128411","Unicode hex":"1F59B"},{"Typeface name":"Wingdings 2","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"128072","Unicode hex":"1F448"},{"Typeface name":"Wingdings 2","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"128073","Unicode hex":"1F449"},{"Typeface name":"Wingdings 2","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"128412","Unicode hex":"1F59C"},{"Typeface name":"Wingdings 2","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"128413","Unicode hex":"1F59D"},{"Typeface name":"Wingdings 2","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"128414","Unicode hex":"1F59E"},{"Typeface name":"Wingdings 2","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"128415","Unicode hex":"1F59F"},{"Typeface name":"Wingdings 2","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"128416","Unicode hex":"1F5A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"128417","Unicode hex":"1F5A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"128070","Unicode hex":"1F446"},{"Typeface name":"Wingdings 2","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"128071","Unicode hex":"1F447"},{"Typeface name":"Wingdings 2","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"128418","Unicode hex":"1F5A2"},{"Typeface name":"Wingdings 2","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"128419","Unicode hex":"1F5A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"128401","Unicode hex":"1F591"},{"Typeface name":"Wingdings 2","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"128500","Unicode hex":"1F5F4"},{"Typeface name":"Wingdings 2","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"128504","Unicode hex":"1F5F8"},{"Typeface name":"Wingdings 2","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"128501","Unicode hex":"1F5F5"},{"Typeface name":"Wingdings 2","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9745","Unicode hex":"2611"},{"Typeface name":"Wingdings 2","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"11197","Unicode hex":"2BBD"},{"Typeface name":"Wingdings 2","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"9746","Unicode hex":"2612"},{"Typeface name":"Wingdings 2","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"11198","Unicode hex":"2BBE"},{"Typeface name":"Wingdings 2","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"11199","Unicode hex":"2BBF"},{"Typeface name":"Wingdings 2","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"128711","Unicode hex":"1F6C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"10680","Unicode hex":"29B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"128625","Unicode hex":"1F671"},{"Typeface name":"Wingdings 2","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"128628","Unicode hex":"1F674"},{"Typeface name":"Wingdings 2","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"128626","Unicode hex":"1F672"},{"Typeface name":"Wingdings 2","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"128627","Unicode hex":"1F673"},{"Typeface name":"Wingdings 2","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"8253","Unicode hex":"203D"},{"Typeface name":"Wingdings 2","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"128633","Unicode hex":"1F679"},{"Typeface name":"Wingdings 2","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"128634","Unicode hex":"1F67A"},{"Typeface name":"Wingdings 2","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"128635","Unicode hex":"1F67B"},{"Typeface name":"Wingdings 2","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"128614","Unicode hex":"1F666"},{"Typeface name":"Wingdings 2","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"128612","Unicode hex":"1F664"},{"Typeface name":"Wingdings 2","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"128613","Unicode hex":"1F665"},{"Typeface name":"Wingdings 2","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"128615","Unicode hex":"1F667"},{"Typeface name":"Wingdings 2","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"128602","Unicode hex":"1F65A"},{"Typeface name":"Wingdings 2","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"128600","Unicode hex":"1F658"},{"Typeface name":"Wingdings 2","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"128601","Unicode hex":"1F659"},{"Typeface name":"Wingdings 2","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"128603","Unicode hex":"1F65B"},{"Typeface name":"Wingdings 2","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"9450","Unicode hex":"24EA"},{"Typeface name":"Wingdings 2","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"9312","Unicode hex":"2460"},{"Typeface name":"Wingdings 2","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"9313","Unicode hex":"2461"},{"Typeface name":"Wingdings 2","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"9314","Unicode hex":"2462"},{"Typeface name":"Wingdings 2","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"9315","Unicode hex":"2463"},{"Typeface name":"Wingdings 2","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"9316","Unicode hex":"2464"},{"Typeface name":"Wingdings 2","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"9317","Unicode hex":"2465"},{"Typeface name":"Wingdings 2","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"9318","Unicode hex":"2466"},{"Typeface name":"Wingdings 2","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"9319","Unicode hex":"2467"},{"Typeface name":"Wingdings 2","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"9320","Unicode hex":"2468"},{"Typeface name":"Wingdings 2","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"9321","Unicode hex":"2469"},{"Typeface name":"Wingdings 2","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"9471","Unicode hex":"24FF"},{"Typeface name":"Wingdings 2","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"10102","Unicode hex":"2776"},{"Typeface name":"Wingdings 2","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"10103","Unicode hex":"2777"},{"Typeface name":"Wingdings 2","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"10104","Unicode hex":"2778"},{"Typeface name":"Wingdings 2","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"10105","Unicode hex":"2779"},{"Typeface name":"Wingdings 2","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"10106","Unicode hex":"277A"},{"Typeface name":"Wingdings 2","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"10107","Unicode hex":"277B"},{"Typeface name":"Wingdings 2","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"10108","Unicode hex":"277C"},{"Typeface name":"Wingdings 2","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"10109","Unicode hex":"277D"},{"Typeface name":"Wingdings 2","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"10110","Unicode hex":"277E"},{"Typeface name":"Wingdings 2","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"10111","Unicode hex":"277F"},{"Typeface name":"Wingdings 2","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"9737","Unicode hex":"2609"},{"Typeface name":"Wingdings 2","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"127765","Unicode hex":"1F315"},{"Typeface name":"Wingdings 2","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"9789","Unicode hex":"263D"},{"Typeface name":"Wingdings 2","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"9790","Unicode hex":"263E"},{"Typeface name":"Wingdings 2","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"11839","Unicode hex":"2E3F"},{"Typeface name":"Wingdings 2","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"10013","Unicode hex":"271D"},{"Typeface name":"Wingdings 2","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"128327","Unicode hex":"1F547"},{"Typeface name":"Wingdings 2","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"128348","Unicode hex":"1F55C"},{"Typeface name":"Wingdings 2","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"128349","Unicode hex":"1F55D"},{"Typeface name":"Wingdings 2","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"128350","Unicode hex":"1F55E"},{"Typeface name":"Wingdings 2","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"128351","Unicode hex":"1F55F"},{"Typeface name":"Wingdings 2","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"128352","Unicode hex":"1F560"},{"Typeface name":"Wingdings 2","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"128353","Unicode hex":"1F561"},{"Typeface name":"Wingdings 2","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"128354","Unicode hex":"1F562"},{"Typeface name":"Wingdings 2","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"128355","Unicode hex":"1F563"},{"Typeface name":"Wingdings 2","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"128356","Unicode hex":"1F564"},{"Typeface name":"Wingdings 2","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"128357","Unicode hex":"1F565"},{"Typeface name":"Wingdings 2","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"128358","Unicode hex":"1F566"},{"Typeface name":"Wingdings 2","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"128359","Unicode hex":"1F567"},{"Typeface name":"Wingdings 2","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"128616","Unicode hex":"1F668"},{"Typeface name":"Wingdings 2","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"128617","Unicode hex":"1F669"},{"Typeface name":"Wingdings 2","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"8901","Unicode hex":"22C5"},{"Typeface name":"Wingdings 2","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"128900","Unicode hex":"1F784"},{"Typeface name":"Wingdings 2","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"10625","Unicode hex":"2981"},{"Typeface name":"Wingdings 2","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"9679","Unicode hex":"25CF"},{"Typeface name":"Wingdings 2","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"9675","Unicode hex":"25CB"},{"Typeface name":"Wingdings 2","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"128901","Unicode hex":"1F785"},{"Typeface name":"Wingdings 2","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"128903","Unicode hex":"1F787"},{"Typeface name":"Wingdings 2","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"128905","Unicode hex":"1F789"},{"Typeface name":"Wingdings 2","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"8857","Unicode hex":"2299"},{"Typeface name":"Wingdings 2","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"10687","Unicode hex":"29BF"},{"Typeface name":"Wingdings 2","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"128908","Unicode hex":"1F78C"},{"Typeface name":"Wingdings 2","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"128909","Unicode hex":"1F78D"},{"Typeface name":"Wingdings 2","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"9726","Unicode hex":"25FE"},{"Typeface name":"Wingdings 2","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"9632","Unicode hex":"25A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"9633","Unicode hex":"25A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"128913","Unicode hex":"1F791"},{"Typeface name":"Wingdings 2","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"128914","Unicode hex":"1F792"},{"Typeface name":"Wingdings 2","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"128915","Unicode hex":"1F793"},{"Typeface name":"Wingdings 2","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"128916","Unicode hex":"1F794"},{"Typeface name":"Wingdings 2","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"9635","Unicode hex":"25A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"128917","Unicode hex":"1F795"},{"Typeface name":"Wingdings 2","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"128918","Unicode hex":"1F796"},{"Typeface name":"Wingdings 2","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"128919","Unicode hex":"1F797"},{"Typeface name":"Wingdings 2","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"128920","Unicode hex":"1F798"},{"Typeface name":"Wingdings 2","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"11049","Unicode hex":"2B29"},{"Typeface name":"Wingdings 2","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"11045","Unicode hex":"2B25"},{"Typeface name":"Wingdings 2","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"9671","Unicode hex":"25C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"128922","Unicode hex":"1F79A"},{"Typeface name":"Wingdings 2","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"9672","Unicode hex":"25C8"},{"Typeface name":"Wingdings 2","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"128923","Unicode hex":"1F79B"},{"Typeface name":"Wingdings 2","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"128924","Unicode hex":"1F79C"},{"Typeface name":"Wingdings 2","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"128925","Unicode hex":"1F79D"},{"Typeface name":"Wingdings 2","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"128926","Unicode hex":"1F79E"},{"Typeface name":"Wingdings 2","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"11050","Unicode hex":"2B2A"},{"Typeface name":"Wingdings 2","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"11047","Unicode hex":"2B27"},{"Typeface name":"Wingdings 2","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"9674","Unicode hex":"25CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"128928","Unicode hex":"1F7A0"},{"Typeface name":"Wingdings 2","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"9686","Unicode hex":"25D6"},{"Typeface name":"Wingdings 2","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"9687","Unicode hex":"25D7"},{"Typeface name":"Wingdings 2","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"11210","Unicode hex":"2BCA"},{"Typeface name":"Wingdings 2","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"11211","Unicode hex":"2BCB"},{"Typeface name":"Wingdings 2","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"11200","Unicode hex":"2BC0"},{"Typeface name":"Wingdings 2","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"11201","Unicode hex":"2BC1"},{"Typeface name":"Wingdings 2","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"11039","Unicode hex":"2B1F"},{"Typeface name":"Wingdings 2","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"11202","Unicode hex":"2BC2"},{"Typeface name":"Wingdings 2","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"11043","Unicode hex":"2B23"},{"Typeface name":"Wingdings 2","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"11042","Unicode hex":"2B22"},{"Typeface name":"Wingdings 2","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"11203","Unicode hex":"2BC3"},{"Typeface name":"Wingdings 2","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"11204","Unicode hex":"2BC4"},{"Typeface name":"Wingdings 2","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"128929","Unicode hex":"1F7A1"},{"Typeface name":"Wingdings 2","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"128930","Unicode hex":"1F7A2"},{"Typeface name":"Wingdings 2","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"128931","Unicode hex":"1F7A3"},{"Typeface name":"Wingdings 2","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"128932","Unicode hex":"1F7A4"},{"Typeface name":"Wingdings 2","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"128933","Unicode hex":"1F7A5"},{"Typeface name":"Wingdings 2","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"128934","Unicode hex":"1F7A6"},{"Typeface name":"Wingdings 2","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"128935","Unicode hex":"1F7A7"},{"Typeface name":"Wingdings 2","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"128936","Unicode hex":"1F7A8"},{"Typeface name":"Wingdings 2","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"128937","Unicode hex":"1F7A9"},{"Typeface name":"Wingdings 2","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"128938","Unicode hex":"1F7AA"},{"Typeface name":"Wingdings 2","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"128939","Unicode hex":"1F7AB"},{"Typeface name":"Wingdings 2","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"128940","Unicode hex":"1F7AC"},{"Typeface name":"Wingdings 2","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"128941","Unicode hex":"1F7AD"},{"Typeface name":"Wingdings 2","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"128942","Unicode hex":"1F7AE"},{"Typeface name":"Wingdings 2","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"128943","Unicode hex":"1F7AF"},{"Typeface name":"Wingdings 2","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"128944","Unicode hex":"1F7B0"},{"Typeface name":"Wingdings 2","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"128945","Unicode hex":"1F7B1"},{"Typeface name":"Wingdings 2","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"128946","Unicode hex":"1F7B2"},{"Typeface name":"Wingdings 2","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"128947","Unicode hex":"1F7B3"},{"Typeface name":"Wingdings 2","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"128948","Unicode hex":"1F7B4"},{"Typeface name":"Wingdings 2","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"128949","Unicode hex":"1F7B5"},{"Typeface name":"Wingdings 2","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"128950","Unicode hex":"1F7B6"},{"Typeface name":"Wingdings 2","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"128951","Unicode hex":"1F7B7"},{"Typeface name":"Wingdings 2","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"128952","Unicode hex":"1F7B8"},{"Typeface name":"Wingdings 2","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"128953","Unicode hex":"1F7B9"},{"Typeface name":"Wingdings 2","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"128954","Unicode hex":"1F7BA"},{"Typeface name":"Wingdings 2","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"128955","Unicode hex":"1F7BB"},{"Typeface name":"Wingdings 2","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"128956","Unicode hex":"1F7BC"},{"Typeface name":"Wingdings 2","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"128957","Unicode hex":"1F7BD"},{"Typeface name":"Wingdings 2","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"128958","Unicode hex":"1F7BE"},{"Typeface name":"Wingdings 2","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"128959","Unicode hex":"1F7BF"},{"Typeface name":"Wingdings 2","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"128960","Unicode hex":"1F7C0"},{"Typeface name":"Wingdings 2","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"128962","Unicode hex":"1F7C2"},{"Typeface name":"Wingdings 2","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"128964","Unicode hex":"1F7C4"},{"Typeface name":"Wingdings 2","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"128966","Unicode hex":"1F7C6"},{"Typeface name":"Wingdings 2","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"128969","Unicode hex":"1F7C9"},{"Typeface name":"Wingdings 2","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"128970","Unicode hex":"1F7CA"},{"Typeface name":"Wingdings 2","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"10038","Unicode hex":"2736"},{"Typeface name":"Wingdings 2","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"128972","Unicode hex":"1F7CC"},{"Typeface name":"Wingdings 2","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"128974","Unicode hex":"1F7CE"},{"Typeface name":"Wingdings 2","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"128976","Unicode hex":"1F7D0"},{"Typeface name":"Wingdings 2","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"128978","Unicode hex":"1F7D2"},{"Typeface name":"Wingdings 2","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"10041","Unicode hex":"2739"},{"Typeface name":"Wingdings 2","Dingbat dec":"241","Dingbat hex":"F1","Unicode dec":"128963","Unicode hex":"1F7C3"},{"Typeface name":"Wingdings 2","Dingbat dec":"242","Dingbat hex":"F2","Unicode dec":"128967","Unicode hex":"1F7C7"},{"Typeface name":"Wingdings 2","Dingbat dec":"243","Dingbat hex":"F3","Unicode dec":"10031","Unicode hex":"272F"},{"Typeface name":"Wingdings 2","Dingbat dec":"244","Dingbat hex":"F4","Unicode dec":"128973","Unicode hex":"1F7CD"},{"Typeface name":"Wingdings 2","Dingbat dec":"245","Dingbat hex":"F5","Unicode dec":"128980","Unicode hex":"1F7D4"},{"Typeface name":"Wingdings 2","Dingbat dec":"246","Dingbat hex":"F6","Unicode dec":"11212","Unicode hex":"2BCC"},{"Typeface name":"Wingdings 2","Dingbat dec":"247","Dingbat hex":"F7","Unicode dec":"11213","Unicode hex":"2BCD"},{"Typeface name":"Wingdings 2","Dingbat dec":"248","Dingbat hex":"F8","Unicode dec":"8251","Unicode hex":"203B"},{"Typeface name":"Wingdings 2","Dingbat dec":"249","Dingbat hex":"F9","Unicode dec":"8258","Unicode hex":"2042"},{"Typeface name":"Wingdings 3","Dingbat dec":"32","Dingbat hex":"20","Unicode dec":"32","Unicode hex":"20"},{"Typeface name":"Wingdings 3","Dingbat dec":"33","Dingbat hex":"21","Unicode dec":"11104","Unicode hex":"2B60"},{"Typeface name":"Wingdings 3","Dingbat dec":"34","Dingbat hex":"22","Unicode dec":"11106","Unicode hex":"2B62"},{"Typeface name":"Wingdings 3","Dingbat dec":"35","Dingbat hex":"23","Unicode dec":"11105","Unicode hex":"2B61"},{"Typeface name":"Wingdings 3","Dingbat dec":"36","Dingbat hex":"24","Unicode dec":"11107","Unicode hex":"2B63"},{"Typeface name":"Wingdings 3","Dingbat dec":"37","Dingbat hex":"25","Unicode dec":"11110","Unicode hex":"2B66"},{"Typeface name":"Wingdings 3","Dingbat dec":"38","Dingbat hex":"26","Unicode dec":"11111","Unicode hex":"2B67"},{"Typeface name":"Wingdings 3","Dingbat dec":"39","Dingbat hex":"27","Unicode dec":"11113","Unicode hex":"2B69"},{"Typeface name":"Wingdings 3","Dingbat dec":"40","Dingbat hex":"28","Unicode dec":"11112","Unicode hex":"2B68"},{"Typeface name":"Wingdings 3","Dingbat dec":"41","Dingbat hex":"29","Unicode dec":"11120","Unicode hex":"2B70"},{"Typeface name":"Wingdings 3","Dingbat dec":"42","Dingbat hex":"2A","Unicode dec":"11122","Unicode hex":"2B72"},{"Typeface name":"Wingdings 3","Dingbat dec":"43","Dingbat hex":"2B","Unicode dec":"11121","Unicode hex":"2B71"},{"Typeface name":"Wingdings 3","Dingbat dec":"44","Dingbat hex":"2C","Unicode dec":"11123","Unicode hex":"2B73"},{"Typeface name":"Wingdings 3","Dingbat dec":"45","Dingbat hex":"2D","Unicode dec":"11126","Unicode hex":"2B76"},{"Typeface name":"Wingdings 3","Dingbat dec":"46","Dingbat hex":"2E","Unicode dec":"11128","Unicode hex":"2B78"},{"Typeface name":"Wingdings 3","Dingbat dec":"47","Dingbat hex":"2F","Unicode dec":"11131","Unicode hex":"2B7B"},{"Typeface name":"Wingdings 3","Dingbat dec":"48","Dingbat hex":"30","Unicode dec":"11133","Unicode hex":"2B7D"},{"Typeface name":"Wingdings 3","Dingbat dec":"49","Dingbat hex":"31","Unicode dec":"11108","Unicode hex":"2B64"},{"Typeface name":"Wingdings 3","Dingbat dec":"50","Dingbat hex":"32","Unicode dec":"11109","Unicode hex":"2B65"},{"Typeface name":"Wingdings 3","Dingbat dec":"51","Dingbat hex":"33","Unicode dec":"11114","Unicode hex":"2B6A"},{"Typeface name":"Wingdings 3","Dingbat dec":"52","Dingbat hex":"34","Unicode dec":"11116","Unicode hex":"2B6C"},{"Typeface name":"Wingdings 3","Dingbat dec":"53","Dingbat hex":"35","Unicode dec":"11115","Unicode hex":"2B6B"},{"Typeface name":"Wingdings 3","Dingbat dec":"54","Dingbat hex":"36","Unicode dec":"11117","Unicode hex":"2B6D"},{"Typeface name":"Wingdings 3","Dingbat dec":"55","Dingbat hex":"37","Unicode dec":"11085","Unicode hex":"2B4D"},{"Typeface name":"Wingdings 3","Dingbat dec":"56","Dingbat hex":"38","Unicode dec":"11168","Unicode hex":"2BA0"},{"Typeface name":"Wingdings 3","Dingbat dec":"57","Dingbat hex":"39","Unicode dec":"11169","Unicode hex":"2BA1"},{"Typeface name":"Wingdings 3","Dingbat dec":"58","Dingbat hex":"3A","Unicode dec":"11170","Unicode hex":"2BA2"},{"Typeface name":"Wingdings 3","Dingbat dec":"59","Dingbat hex":"3B","Unicode dec":"11171","Unicode hex":"2BA3"},{"Typeface name":"Wingdings 3","Dingbat dec":"60","Dingbat hex":"3C","Unicode dec":"11172","Unicode hex":"2BA4"},{"Typeface name":"Wingdings 3","Dingbat dec":"61","Dingbat hex":"3D","Unicode dec":"11173","Unicode hex":"2BA5"},{"Typeface name":"Wingdings 3","Dingbat dec":"62","Dingbat hex":"3E","Unicode dec":"11174","Unicode hex":"2BA6"},{"Typeface name":"Wingdings 3","Dingbat dec":"63","Dingbat hex":"3F","Unicode dec":"11175","Unicode hex":"2BA7"},{"Typeface name":"Wingdings 3","Dingbat dec":"64","Dingbat hex":"40","Unicode dec":"11152","Unicode hex":"2B90"},{"Typeface name":"Wingdings 3","Dingbat dec":"65","Dingbat hex":"41","Unicode dec":"11153","Unicode hex":"2B91"},{"Typeface name":"Wingdings 3","Dingbat dec":"66","Dingbat hex":"42","Unicode dec":"11154","Unicode hex":"2B92"},{"Typeface name":"Wingdings 3","Dingbat dec":"67","Dingbat hex":"43","Unicode dec":"11155","Unicode hex":"2B93"},{"Typeface name":"Wingdings 3","Dingbat dec":"68","Dingbat hex":"44","Unicode dec":"11136","Unicode hex":"2B80"},{"Typeface name":"Wingdings 3","Dingbat dec":"69","Dingbat hex":"45","Unicode dec":"11139","Unicode hex":"2B83"},{"Typeface name":"Wingdings 3","Dingbat dec":"70","Dingbat hex":"46","Unicode dec":"11134","Unicode hex":"2B7E"},{"Typeface name":"Wingdings 3","Dingbat dec":"71","Dingbat hex":"47","Unicode dec":"11135","Unicode hex":"2B7F"},{"Typeface name":"Wingdings 3","Dingbat dec":"72","Dingbat hex":"48","Unicode dec":"11140","Unicode hex":"2B84"},{"Typeface name":"Wingdings 3","Dingbat dec":"73","Dingbat hex":"49","Unicode dec":"11142","Unicode hex":"2B86"},{"Typeface name":"Wingdings 3","Dingbat dec":"74","Dingbat hex":"4A","Unicode dec":"11141","Unicode hex":"2B85"},{"Typeface name":"Wingdings 3","Dingbat dec":"75","Dingbat hex":"4B","Unicode dec":"11143","Unicode hex":"2B87"},{"Typeface name":"Wingdings 3","Dingbat dec":"76","Dingbat hex":"4C","Unicode dec":"11151","Unicode hex":"2B8F"},{"Typeface name":"Wingdings 3","Dingbat dec":"77","Dingbat hex":"4D","Unicode dec":"11149","Unicode hex":"2B8D"},{"Typeface name":"Wingdings 3","Dingbat dec":"78","Dingbat hex":"4E","Unicode dec":"11150","Unicode hex":"2B8E"},{"Typeface name":"Wingdings 3","Dingbat dec":"79","Dingbat hex":"4F","Unicode dec":"11148","Unicode hex":"2B8C"},{"Typeface name":"Wingdings 3","Dingbat dec":"80","Dingbat hex":"50","Unicode dec":"11118","Unicode hex":"2B6E"},{"Typeface name":"Wingdings 3","Dingbat dec":"81","Dingbat hex":"51","Unicode dec":"11119","Unicode hex":"2B6F"},{"Typeface name":"Wingdings 3","Dingbat dec":"82","Dingbat hex":"52","Unicode dec":"9099","Unicode hex":"238B"},{"Typeface name":"Wingdings 3","Dingbat dec":"83","Dingbat hex":"53","Unicode dec":"8996","Unicode hex":"2324"},{"Typeface name":"Wingdings 3","Dingbat dec":"84","Dingbat hex":"54","Unicode dec":"8963","Unicode hex":"2303"},{"Typeface name":"Wingdings 3","Dingbat dec":"85","Dingbat hex":"55","Unicode dec":"8997","Unicode hex":"2325"},{"Typeface name":"Wingdings 3","Dingbat dec":"86","Dingbat hex":"56","Unicode dec":"9251","Unicode hex":"2423"},{"Typeface name":"Wingdings 3","Dingbat dec":"87","Dingbat hex":"57","Unicode dec":"9085","Unicode hex":"237D"},{"Typeface name":"Wingdings 3","Dingbat dec":"88","Dingbat hex":"58","Unicode dec":"8682","Unicode hex":"21EA"},{"Typeface name":"Wingdings 3","Dingbat dec":"89","Dingbat hex":"59","Unicode dec":"11192","Unicode hex":"2BB8"},{"Typeface name":"Wingdings 3","Dingbat dec":"90","Dingbat hex":"5A","Unicode dec":"129184","Unicode hex":"1F8A0"},{"Typeface name":"Wingdings 3","Dingbat dec":"91","Dingbat hex":"5B","Unicode dec":"129185","Unicode hex":"1F8A1"},{"Typeface name":"Wingdings 3","Dingbat dec":"92","Dingbat hex":"5C","Unicode dec":"129186","Unicode hex":"1F8A2"},{"Typeface name":"Wingdings 3","Dingbat dec":"93","Dingbat hex":"5D","Unicode dec":"129187","Unicode hex":"1F8A3"},{"Typeface name":"Wingdings 3","Dingbat dec":"94","Dingbat hex":"5E","Unicode dec":"129188","Unicode hex":"1F8A4"},{"Typeface name":"Wingdings 3","Dingbat dec":"95","Dingbat hex":"5F","Unicode dec":"129189","Unicode hex":"1F8A5"},{"Typeface name":"Wingdings 3","Dingbat dec":"96","Dingbat hex":"60","Unicode dec":"129190","Unicode hex":"1F8A6"},{"Typeface name":"Wingdings 3","Dingbat dec":"97","Dingbat hex":"61","Unicode dec":"129191","Unicode hex":"1F8A7"},{"Typeface name":"Wingdings 3","Dingbat dec":"98","Dingbat hex":"62","Unicode dec":"129192","Unicode hex":"1F8A8"},{"Typeface name":"Wingdings 3","Dingbat dec":"99","Dingbat hex":"63","Unicode dec":"129193","Unicode hex":"1F8A9"},{"Typeface name":"Wingdings 3","Dingbat dec":"100","Dingbat hex":"64","Unicode dec":"129194","Unicode hex":"1F8AA"},{"Typeface name":"Wingdings 3","Dingbat dec":"101","Dingbat hex":"65","Unicode dec":"129195","Unicode hex":"1F8AB"},{"Typeface name":"Wingdings 3","Dingbat dec":"102","Dingbat hex":"66","Unicode dec":"129104","Unicode hex":"1F850"},{"Typeface name":"Wingdings 3","Dingbat dec":"103","Dingbat hex":"67","Unicode dec":"129106","Unicode hex":"1F852"},{"Typeface name":"Wingdings 3","Dingbat dec":"104","Dingbat hex":"68","Unicode dec":"129105","Unicode hex":"1F851"},{"Typeface name":"Wingdings 3","Dingbat dec":"105","Dingbat hex":"69","Unicode dec":"129107","Unicode hex":"1F853"},{"Typeface name":"Wingdings 3","Dingbat dec":"106","Dingbat hex":"6A","Unicode dec":"129108","Unicode hex":"1F854"},{"Typeface name":"Wingdings 3","Dingbat dec":"107","Dingbat hex":"6B","Unicode dec":"129109","Unicode hex":"1F855"},{"Typeface name":"Wingdings 3","Dingbat dec":"108","Dingbat hex":"6C","Unicode dec":"129111","Unicode hex":"1F857"},{"Typeface name":"Wingdings 3","Dingbat dec":"109","Dingbat hex":"6D","Unicode dec":"129110","Unicode hex":"1F856"},{"Typeface name":"Wingdings 3","Dingbat dec":"110","Dingbat hex":"6E","Unicode dec":"129112","Unicode hex":"1F858"},{"Typeface name":"Wingdings 3","Dingbat dec":"111","Dingbat hex":"6F","Unicode dec":"129113","Unicode hex":"1F859"},{"Typeface name":"Wingdings 3","Dingbat dec":"112","Dingbat hex":"70","Unicode dec":"9650","Unicode hex":"25B2"},{"Typeface name":"Wingdings 3","Dingbat dec":"113","Dingbat hex":"71","Unicode dec":"9660","Unicode hex":"25BC"},{"Typeface name":"Wingdings 3","Dingbat dec":"114","Dingbat hex":"72","Unicode dec":"9651","Unicode hex":"25B3"},{"Typeface name":"Wingdings 3","Dingbat dec":"115","Dingbat hex":"73","Unicode dec":"9661","Unicode hex":"25BD"},{"Typeface name":"Wingdings 3","Dingbat dec":"116","Dingbat hex":"74","Unicode dec":"9664","Unicode hex":"25C0"},{"Typeface name":"Wingdings 3","Dingbat dec":"117","Dingbat hex":"75","Unicode dec":"9654","Unicode hex":"25B6"},{"Typeface name":"Wingdings 3","Dingbat dec":"118","Dingbat hex":"76","Unicode dec":"9665","Unicode hex":"25C1"},{"Typeface name":"Wingdings 3","Dingbat dec":"119","Dingbat hex":"77","Unicode dec":"9655","Unicode hex":"25B7"},{"Typeface name":"Wingdings 3","Dingbat dec":"120","Dingbat hex":"78","Unicode dec":"9699","Unicode hex":"25E3"},{"Typeface name":"Wingdings 3","Dingbat dec":"121","Dingbat hex":"79","Unicode dec":"9698","Unicode hex":"25E2"},{"Typeface name":"Wingdings 3","Dingbat dec":"122","Dingbat hex":"7A","Unicode dec":"9700","Unicode hex":"25E4"},{"Typeface name":"Wingdings 3","Dingbat dec":"123","Dingbat hex":"7B","Unicode dec":"9701","Unicode hex":"25E5"},{"Typeface name":"Wingdings 3","Dingbat dec":"124","Dingbat hex":"7C","Unicode dec":"128896","Unicode hex":"1F780"},{"Typeface name":"Wingdings 3","Dingbat dec":"125","Dingbat hex":"7D","Unicode dec":"128898","Unicode hex":"1F782"},{"Typeface name":"Wingdings 3","Dingbat dec":"126","Dingbat hex":"7E","Unicode dec":"128897","Unicode hex":"1F781"},{"Typeface name":"Wingdings 3","Dingbat dec":"128","Dingbat hex":"80","Unicode dec":"128899","Unicode hex":"1F783"},{"Typeface name":"Wingdings 3","Dingbat dec":"129","Dingbat hex":"81","Unicode dec":"11205","Unicode hex":"2BC5"},{"Typeface name":"Wingdings 3","Dingbat dec":"130","Dingbat hex":"82","Unicode dec":"11206","Unicode hex":"2BC6"},{"Typeface name":"Wingdings 3","Dingbat dec":"131","Dingbat hex":"83","Unicode dec":"11207","Unicode hex":"2BC7"},{"Typeface name":"Wingdings 3","Dingbat dec":"132","Dingbat hex":"84","Unicode dec":"11208","Unicode hex":"2BC8"},{"Typeface name":"Wingdings 3","Dingbat dec":"133","Dingbat hex":"85","Unicode dec":"11164","Unicode hex":"2B9C"},{"Typeface name":"Wingdings 3","Dingbat dec":"134","Dingbat hex":"86","Unicode dec":"11166","Unicode hex":"2B9E"},{"Typeface name":"Wingdings 3","Dingbat dec":"135","Dingbat hex":"87","Unicode dec":"11165","Unicode hex":"2B9D"},{"Typeface name":"Wingdings 3","Dingbat dec":"136","Dingbat hex":"88","Unicode dec":"11167","Unicode hex":"2B9F"},{"Typeface name":"Wingdings 3","Dingbat dec":"137","Dingbat hex":"89","Unicode dec":"129040","Unicode hex":"1F810"},{"Typeface name":"Wingdings 3","Dingbat dec":"138","Dingbat hex":"8A","Unicode dec":"129042","Unicode hex":"1F812"},{"Typeface name":"Wingdings 3","Dingbat dec":"139","Dingbat hex":"8B","Unicode dec":"129041","Unicode hex":"1F811"},{"Typeface name":"Wingdings 3","Dingbat dec":"140","Dingbat hex":"8C","Unicode dec":"129043","Unicode hex":"1F813"},{"Typeface name":"Wingdings 3","Dingbat dec":"141","Dingbat hex":"8D","Unicode dec":"129044","Unicode hex":"1F814"},{"Typeface name":"Wingdings 3","Dingbat dec":"142","Dingbat hex":"8E","Unicode dec":"129046","Unicode hex":"1F816"},{"Typeface name":"Wingdings 3","Dingbat dec":"143","Dingbat hex":"8F","Unicode dec":"129045","Unicode hex":"1F815"},{"Typeface name":"Wingdings 3","Dingbat dec":"144","Dingbat hex":"90","Unicode dec":"129047","Unicode hex":"1F817"},{"Typeface name":"Wingdings 3","Dingbat dec":"145","Dingbat hex":"91","Unicode dec":"129048","Unicode hex":"1F818"},{"Typeface name":"Wingdings 3","Dingbat dec":"146","Dingbat hex":"92","Unicode dec":"129050","Unicode hex":"1F81A"},{"Typeface name":"Wingdings 3","Dingbat dec":"147","Dingbat hex":"93","Unicode dec":"129049","Unicode hex":"1F819"},{"Typeface name":"Wingdings 3","Dingbat dec":"148","Dingbat hex":"94","Unicode dec":"129051","Unicode hex":"1F81B"},{"Typeface name":"Wingdings 3","Dingbat dec":"149","Dingbat hex":"95","Unicode dec":"129052","Unicode hex":"1F81C"},{"Typeface name":"Wingdings 3","Dingbat dec":"150","Dingbat hex":"96","Unicode dec":"129054","Unicode hex":"1F81E"},{"Typeface name":"Wingdings 3","Dingbat dec":"151","Dingbat hex":"97","Unicode dec":"129053","Unicode hex":"1F81D"},{"Typeface name":"Wingdings 3","Dingbat dec":"152","Dingbat hex":"98","Unicode dec":"129055","Unicode hex":"1F81F"},{"Typeface name":"Wingdings 3","Dingbat dec":"153","Dingbat hex":"99","Unicode dec":"129024","Unicode hex":"1F800"},{"Typeface name":"Wingdings 3","Dingbat dec":"154","Dingbat hex":"9A","Unicode dec":"129026","Unicode hex":"1F802"},{"Typeface name":"Wingdings 3","Dingbat dec":"155","Dingbat hex":"9B","Unicode dec":"129025","Unicode hex":"1F801"},{"Typeface name":"Wingdings 3","Dingbat dec":"156","Dingbat hex":"9C","Unicode dec":"129027","Unicode hex":"1F803"},{"Typeface name":"Wingdings 3","Dingbat dec":"157","Dingbat hex":"9D","Unicode dec":"129028","Unicode hex":"1F804"},{"Typeface name":"Wingdings 3","Dingbat dec":"158","Dingbat hex":"9E","Unicode dec":"129030","Unicode hex":"1F806"},{"Typeface name":"Wingdings 3","Dingbat dec":"159","Dingbat hex":"9F","Unicode dec":"129029","Unicode hex":"1F805"},{"Typeface name":"Wingdings 3","Dingbat dec":"160","Dingbat hex":"A0","Unicode dec":"129031","Unicode hex":"1F807"},{"Typeface name":"Wingdings 3","Dingbat dec":"161","Dingbat hex":"A1","Unicode dec":"129032","Unicode hex":"1F808"},{"Typeface name":"Wingdings 3","Dingbat dec":"162","Dingbat hex":"A2","Unicode dec":"129034","Unicode hex":"1F80A"},{"Typeface name":"Wingdings 3","Dingbat dec":"163","Dingbat hex":"A3","Unicode dec":"129033","Unicode hex":"1F809"},{"Typeface name":"Wingdings 3","Dingbat dec":"164","Dingbat hex":"A4","Unicode dec":"129035","Unicode hex":"1F80B"},{"Typeface name":"Wingdings 3","Dingbat dec":"165","Dingbat hex":"A5","Unicode dec":"129056","Unicode hex":"1F820"},{"Typeface name":"Wingdings 3","Dingbat dec":"166","Dingbat hex":"A6","Unicode dec":"129058","Unicode hex":"1F822"},{"Typeface name":"Wingdings 3","Dingbat dec":"167","Dingbat hex":"A7","Unicode dec":"129060","Unicode hex":"1F824"},{"Typeface name":"Wingdings 3","Dingbat dec":"168","Dingbat hex":"A8","Unicode dec":"129062","Unicode hex":"1F826"},{"Typeface name":"Wingdings 3","Dingbat dec":"169","Dingbat hex":"A9","Unicode dec":"129064","Unicode hex":"1F828"},{"Typeface name":"Wingdings 3","Dingbat dec":"170","Dingbat hex":"AA","Unicode dec":"129066","Unicode hex":"1F82A"},{"Typeface name":"Wingdings 3","Dingbat dec":"171","Dingbat hex":"AB","Unicode dec":"129068","Unicode hex":"1F82C"},{"Typeface name":"Wingdings 3","Dingbat dec":"172","Dingbat hex":"AC","Unicode dec":"129180","Unicode hex":"1F89C"},{"Typeface name":"Wingdings 3","Dingbat dec":"173","Dingbat hex":"AD","Unicode dec":"129181","Unicode hex":"1F89D"},{"Typeface name":"Wingdings 3","Dingbat dec":"174","Dingbat hex":"AE","Unicode dec":"129182","Unicode hex":"1F89E"},{"Typeface name":"Wingdings 3","Dingbat dec":"175","Dingbat hex":"AF","Unicode dec":"129183","Unicode hex":"1F89F"},{"Typeface name":"Wingdings 3","Dingbat dec":"176","Dingbat hex":"B0","Unicode dec":"129070","Unicode hex":"1F82E"},{"Typeface name":"Wingdings 3","Dingbat dec":"177","Dingbat hex":"B1","Unicode dec":"129072","Unicode hex":"1F830"},{"Typeface name":"Wingdings 3","Dingbat dec":"178","Dingbat hex":"B2","Unicode dec":"129074","Unicode hex":"1F832"},{"Typeface name":"Wingdings 3","Dingbat dec":"179","Dingbat hex":"B3","Unicode dec":"129076","Unicode hex":"1F834"},{"Typeface name":"Wingdings 3","Dingbat dec":"180","Dingbat hex":"B4","Unicode dec":"129078","Unicode hex":"1F836"},{"Typeface name":"Wingdings 3","Dingbat dec":"181","Dingbat hex":"B5","Unicode dec":"129080","Unicode hex":"1F838"},{"Typeface name":"Wingdings 3","Dingbat dec":"182","Dingbat hex":"B6","Unicode dec":"129082","Unicode hex":"1F83A"},{"Typeface name":"Wingdings 3","Dingbat dec":"183","Dingbat hex":"B7","Unicode dec":"129081","Unicode hex":"1F839"},{"Typeface name":"Wingdings 3","Dingbat dec":"184","Dingbat hex":"B8","Unicode dec":"129083","Unicode hex":"1F83B"},{"Typeface name":"Wingdings 3","Dingbat dec":"185","Dingbat hex":"B9","Unicode dec":"129176","Unicode hex":"1F898"},{"Typeface name":"Wingdings 3","Dingbat dec":"186","Dingbat hex":"BA","Unicode dec":"129178","Unicode hex":"1F89A"},{"Typeface name":"Wingdings 3","Dingbat dec":"187","Dingbat hex":"BB","Unicode dec":"129177","Unicode hex":"1F899"},{"Typeface name":"Wingdings 3","Dingbat dec":"188","Dingbat hex":"BC","Unicode dec":"129179","Unicode hex":"1F89B"},{"Typeface name":"Wingdings 3","Dingbat dec":"189","Dingbat hex":"BD","Unicode dec":"129084","Unicode hex":"1F83C"},{"Typeface name":"Wingdings 3","Dingbat dec":"190","Dingbat hex":"BE","Unicode dec":"129086","Unicode hex":"1F83E"},{"Typeface name":"Wingdings 3","Dingbat dec":"191","Dingbat hex":"BF","Unicode dec":"129085","Unicode hex":"1F83D"},{"Typeface name":"Wingdings 3","Dingbat dec":"192","Dingbat hex":"C0","Unicode dec":"129087","Unicode hex":"1F83F"},{"Typeface name":"Wingdings 3","Dingbat dec":"193","Dingbat hex":"C1","Unicode dec":"129088","Unicode hex":"1F840"},{"Typeface name":"Wingdings 3","Dingbat dec":"194","Dingbat hex":"C2","Unicode dec":"129090","Unicode hex":"1F842"},{"Typeface name":"Wingdings 3","Dingbat dec":"195","Dingbat hex":"C3","Unicode dec":"129089","Unicode hex":"1F841"},{"Typeface name":"Wingdings 3","Dingbat dec":"196","Dingbat hex":"C4","Unicode dec":"129091","Unicode hex":"1F843"},{"Typeface name":"Wingdings 3","Dingbat dec":"197","Dingbat hex":"C5","Unicode dec":"129092","Unicode hex":"1F844"},{"Typeface name":"Wingdings 3","Dingbat dec":"198","Dingbat hex":"C6","Unicode dec":"129094","Unicode hex":"1F846"},{"Typeface name":"Wingdings 3","Dingbat dec":"199","Dingbat hex":"C7","Unicode dec":"129093","Unicode hex":"1F845"},{"Typeface name":"Wingdings 3","Dingbat dec":"200","Dingbat hex":"C8","Unicode dec":"129095","Unicode hex":"1F847"},{"Typeface name":"Wingdings 3","Dingbat dec":"201","Dingbat hex":"C9","Unicode dec":"11176","Unicode hex":"2BA8"},{"Typeface name":"Wingdings 3","Dingbat dec":"202","Dingbat hex":"CA","Unicode dec":"11177","Unicode hex":"2BA9"},{"Typeface name":"Wingdings 3","Dingbat dec":"203","Dingbat hex":"CB","Unicode dec":"11178","Unicode hex":"2BAA"},{"Typeface name":"Wingdings 3","Dingbat dec":"204","Dingbat hex":"CC","Unicode dec":"11179","Unicode hex":"2BAB"},{"Typeface name":"Wingdings 3","Dingbat dec":"205","Dingbat hex":"CD","Unicode dec":"11180","Unicode hex":"2BAC"},{"Typeface name":"Wingdings 3","Dingbat dec":"206","Dingbat hex":"CE","Unicode dec":"11181","Unicode hex":"2BAD"},{"Typeface name":"Wingdings 3","Dingbat dec":"207","Dingbat hex":"CF","Unicode dec":"11182","Unicode hex":"2BAE"},{"Typeface name":"Wingdings 3","Dingbat dec":"208","Dingbat hex":"D0","Unicode dec":"11183","Unicode hex":"2BAF"},{"Typeface name":"Wingdings 3","Dingbat dec":"209","Dingbat hex":"D1","Unicode dec":"129120","Unicode hex":"1F860"},{"Typeface name":"Wingdings 3","Dingbat dec":"210","Dingbat hex":"D2","Unicode dec":"129122","Unicode hex":"1F862"},{"Typeface name":"Wingdings 3","Dingbat dec":"211","Dingbat hex":"D3","Unicode dec":"129121","Unicode hex":"1F861"},{"Typeface name":"Wingdings 3","Dingbat dec":"212","Dingbat hex":"D4","Unicode dec":"129123","Unicode hex":"1F863"},{"Typeface name":"Wingdings 3","Dingbat dec":"213","Dingbat hex":"D5","Unicode dec":"129124","Unicode hex":"1F864"},{"Typeface name":"Wingdings 3","Dingbat dec":"214","Dingbat hex":"D6","Unicode dec":"129125","Unicode hex":"1F865"},{"Typeface name":"Wingdings 3","Dingbat dec":"215","Dingbat hex":"D7","Unicode dec":"129127","Unicode hex":"1F867"},{"Typeface name":"Wingdings 3","Dingbat dec":"216","Dingbat hex":"D8","Unicode dec":"129126","Unicode hex":"1F866"},{"Typeface name":"Wingdings 3","Dingbat dec":"217","Dingbat hex":"D9","Unicode dec":"129136","Unicode hex":"1F870"},{"Typeface name":"Wingdings 3","Dingbat dec":"218","Dingbat hex":"DA","Unicode dec":"129138","Unicode hex":"1F872"},{"Typeface name":"Wingdings 3","Dingbat dec":"219","Dingbat hex":"DB","Unicode dec":"129137","Unicode hex":"1F871"},{"Typeface name":"Wingdings 3","Dingbat dec":"220","Dingbat hex":"DC","Unicode dec":"129139","Unicode hex":"1F873"},{"Typeface name":"Wingdings 3","Dingbat dec":"221","Dingbat hex":"DD","Unicode dec":"129140","Unicode hex":"1F874"},{"Typeface name":"Wingdings 3","Dingbat dec":"222","Dingbat hex":"DE","Unicode dec":"129141","Unicode hex":"1F875"},{"Typeface name":"Wingdings 3","Dingbat dec":"223","Dingbat hex":"DF","Unicode dec":"129143","Unicode hex":"1F877"},{"Typeface name":"Wingdings 3","Dingbat dec":"224","Dingbat hex":"E0","Unicode dec":"129142","Unicode hex":"1F876"},{"Typeface name":"Wingdings 3","Dingbat dec":"225","Dingbat hex":"E1","Unicode dec":"129152","Unicode hex":"1F880"},{"Typeface name":"Wingdings 3","Dingbat dec":"226","Dingbat hex":"E2","Unicode dec":"129154","Unicode hex":"1F882"},{"Typeface name":"Wingdings 3","Dingbat dec":"227","Dingbat hex":"E3","Unicode dec":"129153","Unicode hex":"1F881"},{"Typeface name":"Wingdings 3","Dingbat dec":"228","Dingbat hex":"E4","Unicode dec":"129155","Unicode hex":"1F883"},{"Typeface name":"Wingdings 3","Dingbat dec":"229","Dingbat hex":"E5","Unicode dec":"129156","Unicode hex":"1F884"},{"Typeface name":"Wingdings 3","Dingbat dec":"230","Dingbat hex":"E6","Unicode dec":"129157","Unicode hex":"1F885"},{"Typeface name":"Wingdings 3","Dingbat dec":"231","Dingbat hex":"E7","Unicode dec":"129159","Unicode hex":"1F887"},{"Typeface name":"Wingdings 3","Dingbat dec":"232","Dingbat hex":"E8","Unicode dec":"129158","Unicode hex":"1F886"},{"Typeface name":"Wingdings 3","Dingbat dec":"233","Dingbat hex":"E9","Unicode dec":"129168","Unicode hex":"1F890"},{"Typeface name":"Wingdings 3","Dingbat dec":"234","Dingbat hex":"EA","Unicode dec":"129170","Unicode hex":"1F892"},{"Typeface name":"Wingdings 3","Dingbat dec":"235","Dingbat hex":"EB","Unicode dec":"129169","Unicode hex":"1F891"},{"Typeface name":"Wingdings 3","Dingbat dec":"236","Dingbat hex":"EC","Unicode dec":"129171","Unicode hex":"1F893"},{"Typeface name":"Wingdings 3","Dingbat dec":"237","Dingbat hex":"ED","Unicode dec":"129172","Unicode hex":"1F894"},{"Typeface name":"Wingdings 3","Dingbat dec":"238","Dingbat hex":"EE","Unicode dec":"129174","Unicode hex":"1F896"},{"Typeface name":"Wingdings 3","Dingbat dec":"239","Dingbat hex":"EF","Unicode dec":"129173","Unicode hex":"1F895"},{"Typeface name":"Wingdings 3","Dingbat dec":"240","Dingbat hex":"F0","Unicode dec":"129175","Unicode hex":"1F897"}]},{}],85:[function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.hex=n.dec=n.codePoint=void 0;for(var i=r(e("./dingbats")),o={},s=String.fromCodePoint?String.fromCodePoint:function(e){if(e<=65535)return String.fromCharCode(e);var t=Math.floor((e-65536)/1024)+55296,n=(e-65536)%1024+56320;return String.fromCharCode(t,n)},a=0,l=i.default;a>1,u=-7,d=n?i-1:0,h=n?-1:1,f=e[t+d];for(d+=h,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=256*o+e[t+d],d+=h,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=r;u>0;s=256*s+e[t+d],d+=h,u-=8);if(0===o)o=1-c;else{if(o===l)return s?NaN:1/0*(f?-1:1);s+=Math.pow(2,r),o-=c}return(f?-1:1)*s*Math.pow(2,o-r)},n.write=function(e,t,n,r,i,o){var s,a,l,c=8*o-i-1,u=(1<>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,p=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=u):(s=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-s))<1&&(s--,l*=2),(t+=s+d>=1?h/l:h*Math.pow(2,1-d))*l>=2&&(s++,l/=2),s+d>=u?(a=0,s=u):s+d>=1?(a=(t*l-1)*Math.pow(2,i),s+=d):(a=t*Math.pow(2,d-1)*Math.pow(2,i),s=0));i>=8;e[n+f]=255&a,f+=p,a/=256,i-=8);for(s=s<0;e[n+f]=255&s,f+=p,s/=256,c-=8);e[n+f-p]|=128*m}},{}],87:[function(e,t,n){var r={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},{}],88:[function(e,t,r){(function(n,i){!function(e){"object"==typeof r&&void 0!==t?t.exports=e():("undefined"!=typeof window?window:void 0!==n?n:"undefined"!=typeof self?self:this).JSZip=e()}((function(){return function t(n,r,i){function o(a,l){if(!r[a]){if(!n[a]){var c="function"==typeof e&&e;if(!l&&c)return c(a,!0);if(s)return s(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[a]={exports:{}};n[a][0].call(d.exports,(function(e){return o(n[a][1][e]||e)}),d,d.exports,t,n,r,i)}return r[a].exports}for(var s="function"==typeof e&&e,a=0;a>2,a=(3&t)<<4|n>>4,l=1>6:64,c=2>4,n=(15&s)<<4|(a=o.indexOf(e.charAt(c++)))>>2,r=(3&a)<<6|(l=o.indexOf(e.charAt(c++))),d[u++]=t,64!==a&&(d[u++]=n),64!==l&&(d[u++]=r);return d}},{"./support":30,"./utils":32}],2:[function(e,t,n){"use strict";var r=e("./external"),i=e("./stream/DataWorker"),o=e("./stream/Crc32Probe"),s=e("./stream/DataLengthProbe");function a(e,t,n,r,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=n,this.compression=r,this.compressedContent=i}a.prototype={getContentWorker:function(){var e=new i(r.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new s("data_length")),t=this;return e.on("end",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")})),e},getCompressedWorker:function(){return new i(r.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},a.createWorkerFrom=function(e,t,n){return e.pipe(new o).pipe(new s("uncompressedSize")).pipe(t.compressWorker(n)).pipe(new s("compressedSize")).withStreamInfo("compression",t)},t.exports=a},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,n){"use strict";var r=e("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(e){return new r("STORE compression")},uncompressWorker:function(){return new r("STORE decompression")}},n.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,n){"use strict";var r=e("./utils"),i=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?"string"!==r.getTypeOf(e)?function(e,t,n,r){var o=i,s=0+n;e^=-1;for(var a=0;a>>8^o[255&(e^t[a])];return~e}(0|t,e,e.length):function(e,t,n,r){var o=i,s=0+n;e^=-1;for(var a=0;a>>8^o[255&(e^t.charCodeAt(a))];return~e}(0|t,e,e.length):0}},{"./utils":32}],5:[function(e,t,n){"use strict";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(e,t,n){"use strict";var r;r="undefined"!=typeof Promise?Promise:e("lie"),t.exports={Promise:r}},{lie:37}],7:[function(e,t,n){"use strict";var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=e("pako"),o=e("./utils"),s=e("./stream/GenericWorker"),a=r?"uint8array":"array";function l(e,t){s.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}n.magic="\b\0",o.inherits(l,s),l.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(o.transformTo(a,e.data),!1)},l.prototype.flush=function(){s.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},l.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this._pako=null},l.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},n.compressWorker=function(e){return new l("Deflate",e)},n.uncompressWorker=function(){return new l("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,n){"use strict";function r(e,t){var n,r="";for(n=0;n>>=8;return r}function i(e,t,n,i,s,u){var d,h,f=e.file,p=e.compression,m=u!==a.utf8encode,g=o.transformTo("string",u(f.name)),y=o.transformTo("string",a.utf8encode(f.name)),b=f.comment,_=o.transformTo("string",u(b)),v=o.transformTo("string",a.utf8encode(b)),w=y.length!==f.name.length,x=v.length!==b.length,S="",C="",M="",T=f.dir,E=f.date,D={crc32:0,compressedSize:0,uncompressedSize:0};t&&!n||(D.crc32=e.crc32,D.compressedSize=e.compressedSize,D.uncompressedSize=e.uncompressedSize);var k=0;t&&(k|=8),m||!w&&!x||(k|=2048);var R=0,O=0;T&&(R|=16),"UNIX"===s?(O=798,R|=function(e,t){var n=e;return e||(n=t?16893:33204),(65535&n)<<16}(f.unixPermissions,T)):(O=20,R|=function(e){return 63&(e||0)}(f.dosPermissions)),d=E.getUTCHours(),d<<=6,d|=E.getUTCMinutes(),d<<=5,d|=E.getUTCSeconds()/2,h=E.getUTCFullYear()-1980,h<<=4,h|=E.getUTCMonth()+1,h<<=5,h|=E.getUTCDate(),w&&(C=r(1,1)+r(l(g),4)+y,S+="up"+r(C.length,2)+C),x&&(M=r(1,1)+r(l(_),4)+v,S+="uc"+r(M.length,2)+M);var L="";return L+="\n\0",L+=r(k,2),L+=p.magic,L+=r(d,2),L+=r(h,2),L+=r(D.crc32,4),L+=r(D.compressedSize,4),L+=r(D.uncompressedSize,4),L+=r(g.length,2),L+=r(S.length,2),{fileRecord:c.LOCAL_FILE_HEADER+L+g+S,dirRecord:c.CENTRAL_FILE_HEADER+r(O,2)+L+r(_.length,2)+"\0\0\0\0"+r(R,4)+r(i,4)+g+S+_}}var o=e("../utils"),s=e("../stream/GenericWorker"),a=e("../utf8"),l=e("../crc32"),c=e("../signature");function u(e,t,n,r){s.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=n,this.encodeFileName=r,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}o.inherits(u,s),u.prototype.push=function(e){var t=e.meta.percent||0,n=this.entriesCount,r=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,s.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:n?(t+100*(n-r-1))/n:100}}))},u.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var n=i(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:n.fileRecord,meta:{percent:0}})}else this.accumulate=!0},u.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,n=i(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(n.dirRecord),t)this.push({data:function(e){return c.DATA_DESCRIPTOR+r(e.crc32,4)+r(e.compressedSize,4)+r(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:n.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},u.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t=this.index;t--)n=(n<<8)+this.byteAt(t);return this.index+=e,n},readString:function(e){return r.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,n){"use strict";var r=e("./Uint8ArrayReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,n){"use strict";var r=e("./DataReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,n){"use strict";var r=e("./ArrayReader");function i(e){r.call(this,e)}e("../utils").inherits(i,r),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,n){"use strict";var r=e("../utils"),i=e("../support"),o=e("./ArrayReader"),s=e("./StringReader"),a=e("./NodeBufferReader"),l=e("./Uint8ArrayReader");t.exports=function(e){var t=r.getTypeOf(e);return r.checkSupport(t),"string"!==t||i.uint8array?"nodebuffer"===t?new a(e):i.uint8array?new l(r.transformTo("uint8array",e)):new o(r.transformTo("array",e)):new s(e)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,n){"use strict";n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\b"},{}],24:[function(e,t,n){"use strict";var r=e("./GenericWorker"),i=e("../utils");function o(e){r.call(this,"ConvertWorker to "+e),this.destType=e}i.inherits(o,r),o.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=o},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,n){"use strict";var r=e("./GenericWorker"),i=e("../crc32");function o(){r.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(o,r),o.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=o},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,n){"use strict";var r=e("../utils"),i=e("./GenericWorker");function o(e){i.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}r.inherits(o,i),o.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=o},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,n){"use strict";var r=e("../utils"),i=e("./GenericWorker");function o(e){i.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=r.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}r.inherits(o,i),o.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},o.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,r.delay(this._tickAndRepeat,[],this)),!0)},o.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(r.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},o.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,t);break;case"uint8array":e=this.data.subarray(this.index,t);break;case"array":case"nodebuffer":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=o},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,n){"use strict";function r(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}r.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var n=0;n "+e:e}},t.exports=r},{}],29:[function(e,t,n){"use strict";var r=e("../utils"),o=e("./ConvertWorker"),s=e("./GenericWorker"),a=e("../base64"),l=e("../support"),c=e("../external"),u=null;if(l.nodestream)try{u=e("../nodejs/NodejsStreamOutputAdapter")}catch(e){}function d(e,t,n){var i=t;switch(t){case"blob":case"arraybuffer":i="uint8array";break;case"base64":i="string"}try{this._internalType=i,this._outputType=t,this._mimeType=n,r.checkSupport(i),this._worker=e.pipe(new o(i)),e.lock()}catch(e){this._worker=new s("error"),this._worker.error(e)}}d.prototype={accumulate:function(e){return function(e,t){return new c.Promise((function(n,o){var s=[],l=e._internalType,c=e._outputType,u=e._mimeType;e.on("data",(function(e,n){s.push(e),t&&t(n)})).on("error",(function(e){s=[],o(e)})).on("end",(function(){try{var e=function(e,t,n){switch(e){case"blob":return r.newBlob(r.transformTo("arraybuffer",t),n);case"base64":return a.encode(t);default:return r.transformTo(e,t)}}(c,function(e,t){var n,r=0,o=null,s=0;for(n=0;n>>6:(n<65536?t[s++]=224|n>>>12:(t[s++]=240|n>>>18,t[s++]=128|n>>>12&63),t[s++]=128|n>>>6&63),t[s++]=128|63&n);return t}(e)},n.utf8decode=function(e){return i.nodebuffer?r.transformTo("nodebuffer",e).toString("utf-8"):function(e){var t,n,i,o,s=e.length,l=new Array(2*s);for(t=n=0;t>10&1023,l[n++]=56320|1023&i)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),r.applyFromCharCode(l)}(e=r.transformTo(i.uint8array?"uint8array":"array",e))},r.inherits(c,s),c.prototype.processChunk=function(e){var t=r.transformTo(i.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var o=t;(t=new Uint8Array(o.length+this.leftOver.length)).set(this.leftOver,0),t.set(o,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var s=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;0<=n&&128==(192&e[n]);)n--;return n<0||0===n?t:n+a[e[n]]>t?n:t}(t),l=t;s!==t.length&&(i.uint8array?(l=t.subarray(0,s),this.leftOver=t.subarray(s,t.length)):(l=t.slice(0,s),this.leftOver=t.slice(s,t.length))),this.push({data:n.utf8decode(l),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=c,r.inherits(u,s),u.prototype.processChunk=function(e){this.push({data:n.utf8encode(e.data),meta:e.meta})},n.Utf8EncodeWorker=u},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,n){"use strict";var r=e("./support"),i=e("./base64"),o=e("./nodejsUtils"),s=e("set-immediate-shim"),a=e("./external");function l(e){return e}function c(e,t){for(var n=0;n>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=r(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,n,r,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4>>6:(n<65536?t[s++]=224|n>>>12:(t[s++]=240|n>>>18,t[s++]=128|n>>>12&63),t[s++]=128|n>>>6&63),t[s++]=128|63&n);return t},n.buf2binstring=function(e){return l(e,e.length)},n.binstring2buf=function(e){for(var t=new r.Buf8(e.length),n=0,i=t.length;n>10&1023,c[r++]=56320|1023&i)}return l(c,r)},n.utf8border=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;0<=n&&128==(192&e[n]);)n--;return n<0||0===n?t:n+s[e[n]]>t?n:t}},{"./common":41}],43:[function(e,t,n){"use strict";t.exports=function(e,t,n,r){for(var i=65535&e,o=e>>>16&65535,s=0;0!==n;){for(n-=s=2e3>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t,n,i){var o=r,s=i+n;e^=-1;for(var a=i;a>>8^o[255&(e^t[a])];return~e}},{}],46:[function(e,t,n){"use strict";var r,i=e("../utils/common"),o=e("./trees"),s=e("./adler32"),a=e("./crc32"),l=e("./messages"),c=0,u=0,d=-2,h=2,f=8,p=286,m=30,g=19,y=2*p+1,b=15,_=3,v=258,w=v+_+1,x=42,S=113;function C(e,t){return e.msg=l[t],t}function M(e){return(e<<1)-(4e.avail_out&&(n=e.avail_out),0!==n&&(i.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function D(e,t){o._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,E(e.strm)}function k(e,t){e.pending_buf[e.pending++]=t}function R(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function O(e,t){var n,r,i=e.max_chain_length,o=e.strstart,s=e.prev_length,a=e.nice_match,l=e.strstart>e.w_size-w?e.strstart-(e.w_size-w):0,c=e.window,u=e.w_mask,d=e.prev,h=e.strstart+v,f=c[o+s-1],p=c[o+s];e.prev_length>=e.good_match&&(i>>=2),a>e.lookahead&&(a=e.lookahead);do{if(c[(n=t)+s]===p&&c[n+s-1]===f&&c[n]===c[o]&&c[++n]===c[o+1]){o+=2,n++;do{}while(c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&c[++o]===c[++n]&&ol&&0!=--i);return s<=e.lookahead?s:e.lookahead}function L(e){var t,n,r,o,l,c,u,d,h,f,p=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-w)){for(i.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=n=e.hash_size;r=e.head[--t],e.head[t]=p<=r?r-p:0,--n;);for(t=n=p;r=e.prev[--t],e.prev[t]=p<=r?r-p:0,--n;);o+=p}if(0===e.strm.avail_in)break;if(c=e.strm,u=e.window,d=e.strstart+e.lookahead,f=void 0,(h=o)<(f=c.avail_in)&&(f=h),n=0===f?0:(c.avail_in-=f,i.arraySet(u,c.input,c.next_in,f,d),1===c.state.wrap?c.adler=s(c.adler,u,f,d):2===c.state.wrap&&(c.adler=a(c.adler,u,f,d)),c.next_in+=f,c.total_in+=f,f),e.lookahead+=n,e.lookahead+e.insert>=_)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=_&&(e.ins_h=(e.ins_h<=_)if(r=o._tr_tally(e,e.strstart-e.match_start,e.match_length-_),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=_){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<=_&&(e.ins_h=(e.ins_h<=_&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-_,r=o._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-_),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(L(e),0===e.lookahead&&t===c)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,D(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-w&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(D(e,!1),e.strm.avail_out),1)})),new P(4,4,8,4,A),new P(4,5,16,8,A),new P(4,6,32,32,A),new P(4,4,16,16,I),new P(8,16,32,32,I),new P(8,16,128,128,I),new P(8,32,128,256,I),new P(32,128,258,1024,I),new P(32,258,258,4096,I)],n.deflateInit=function(e,t){return U(e,t,f,15,8,0)},n.deflateInit2=U,n.deflateReset=j,n.deflateResetKeep=H,n.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?d:(e.state.gzhead=t,u):d},n.deflate=function(e,t){var n,i,s,l;if(!e||!e.state||5>8&255),k(i,i.gzhead.time>>16&255),k(i,i.gzhead.time>>24&255),k(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),k(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(k(i,255&i.gzhead.extra.length),k(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(e.adler=a(e.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(k(i,0),k(i,0),k(i,0),k(i,0),k(i,0),k(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),k(i,3),i.status=S);else{var h=f+(i.w_bits-8<<4)<<8;h|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(h|=32),h+=31-h%31,i.status=S,R(i,h),0!==i.strstart&&(R(i,e.adler>>>16),R(i,65535&e.adler)),e.adler=1}if(69===i.status)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending!==i.pending_buf_size));)k(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexs&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),0===l&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),E(e),s=i.pending,i.pending===i.pending_buf_size)){l=1;break}l=i.gzindexs&&(e.adler=a(e.adler,i.pending_buf,i.pending-s,s)),0===l&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&E(e),i.pending+2<=i.pending_buf_size&&(k(i,255&e.adler),k(i,e.adler>>8&255),e.adler=0,i.status=S)):i.status=S),0!==i.pending){if(E(e),0===e.avail_out)return i.last_flush=-1,u}else if(0===e.avail_in&&M(t)<=M(n)&&4!==t)return C(e,-5);if(666===i.status&&0!==e.avail_in)return C(e,-5);if(0!==e.avail_in||0!==i.lookahead||t!==c&&666!==i.status){var p=2===i.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(L(e),0===e.lookahead)){if(t===c)return 1;break}if(e.match_length=0,n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(D(e,!1),0===e.strm.avail_out)?1:2}(i,t):3===i.strategy?function(e,t){for(var n,r,i,s,a=e.window;;){if(e.lookahead<=v){if(L(e),e.lookahead<=v&&t===c)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=_&&0e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=_?(n=o._tr_tally(e,1,e.match_length-_),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=o._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(D(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(D(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(D(e,!1),0===e.strm.avail_out)?1:2}(i,t):r[i.level].func(i,t);if(3!==p&&4!==p||(i.status=666),1===p||3===p)return 0===e.avail_out&&(i.last_flush=-1),u;if(2===p&&(1===t?o._tr_align(i):5!==t&&(o._tr_stored_block(i,0,0,!1),3===t&&(T(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),E(e),0===e.avail_out))return i.last_flush=-1,u}return 4!==t?u:i.wrap<=0?1:(2===i.wrap?(k(i,255&e.adler),k(i,e.adler>>8&255),k(i,e.adler>>16&255),k(i,e.adler>>24&255),k(i,255&e.total_in),k(i,e.total_in>>8&255),k(i,e.total_in>>16&255),k(i,e.total_in>>24&255)):(R(i,e.adler>>>16),R(i,65535&e.adler)),E(e),0=n.w_size&&(0===a&&(T(n.head),n.strstart=0,n.block_start=0,n.insert=0),f=new i.Buf8(n.w_size),i.arraySet(f,t,p-n.w_size,n.w_size,0),t=f,p=n.w_size),l=e.avail_in,c=e.next_in,h=e.input,e.avail_in=p,e.next_in=0,e.input=t,L(n);n.lookahead>=_;){for(r=n.strstart,o=n.lookahead-(_-1);n.ins_h=(n.ins_h<>>=v=_>>>24,p-=v,0==(v=_>>>16&255))T[o++]=65535&_;else{if(!(16&v)){if(!(64&v)){_=m[(65535&_)+(f&(1<>>=v,p-=v),p<15&&(f+=M[r++]<>>=v=_>>>24,p-=v,!(16&(v=_>>>16&255))){if(!(64&v)){_=g[(65535&_)+(f&(1<>>=v,p-=v,(v=o-s)>3,f&=(1<<(p-=w<<3))-1,e.next_in=r,e.next_out=o,e.avail_in=r>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function p(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function m(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=u,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new r.Buf32(d),t.distcode=t.distdyn=new r.Buf32(h),t.sane=1,t.back=-1,l):c}function g(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,m(e)):c}function y(e,t){var n,r;return e&&e.state?(r=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15=s.wsize?(r.arraySet(s.window,t,n-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(o=s.wsize-s.wnext)&&(o=i),r.arraySet(s.window,t,n-i,o,s.wnext),(i-=o)?(r.arraySet(s.window,t,n-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=o,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,n.check=o(n.check,j,2,0),_=b=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg="incorrect header check",n.mode=30;break}if(8!=(15&b)){e.msg="unknown compression method",n.mode=30;break}if(_-=4,A=8+(15&(b>>>=4)),0===n.wbits)n.wbits=A;else if(A>n.wbits){e.msg="invalid window size",n.mode=30;break}n.dmax=1<>8&1),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0,n.mode=3;case 3:for(;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.head&&(n.head.time=b),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,j[2]=b>>>16&255,j[3]=b>>>24&255,n.check=o(n.check,j,4,0)),_=b=0,n.mode=4;case 4:for(;_<16;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.head&&(n.head.xflags=255&b,n.head.os=b>>8),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0,n.mode=5;case 5:if(1024&n.flags){for(;_<16;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}n.length=b,n.head&&(n.head.extra_len=b),512&n.flags&&(j[0]=255&b,j[1]=b>>>8&255,n.check=o(n.check,j,2,0)),_=b=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&(g<(C=n.length)&&(C=g),C&&(n.head&&(A=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),r.arraySet(n.head.extra,d,p,C,A)),512&n.flags&&(n.check=o(n.check,d,C,p)),g-=C,p+=C,n.length-=C),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===g)break e;for(C=0;A=d[p+C++],n.head&&A&&n.length<65536&&(n.head.name+=String.fromCharCode(A)),A&&C>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=12;break;case 10:for(;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}e.adler=n.check=f(b),_=b=0,n.mode=11;case 11:if(0===n.havedict)return e.next_out=m,e.avail_out=y,e.next_in=p,e.avail_in=g,n.hold=b,n.bits=_,2;e.adler=n.check=1,n.mode=12;case 12:if(5===t||6===t)break e;case 13:if(n.last){b>>>=7&_,_-=7&_,n.mode=27;break}for(;_<3;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}switch(n.last=1&b,_-=1,3&(b>>>=1)){case 0:n.mode=14;break;case 1:if(x(n),n.mode=20,6!==t)break;b>>>=2,_-=2;break e;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=30}b>>>=2,_-=2;break;case 14:for(b>>>=7&_,_-=7&_;_<32;){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if((65535&b)!=(b>>>16^65535)){e.msg="invalid stored block lengths",n.mode=30;break}if(n.length=65535&b,_=b=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(C=n.length){if(g>>=5,_-=5,n.ndist=1+(31&b),b>>>=5,_-=5,n.ncode=4+(15&b),b>>>=4,_-=4,286>>=3,_-=3}for(;n.have<19;)n.lens[U[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,P={bits:n.lenbits},I=a(0,n.lens,0,19,n.lencode,0,n.work,P),n.lenbits=P.bits,I){e.msg="invalid code lengths set",n.mode=30;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(k<16)b>>>=E,_-=E,n.lens[n.have++]=k;else{if(16===k){for(N=E+2;_>>=E,_-=E,0===n.have){e.msg="invalid bit length repeat",n.mode=30;break}A=n.lens[n.have-1],C=3+(3&b),b>>>=2,_-=2}else if(17===k){for(N=E+3;_>>=E)),b>>>=3,_-=3}else{for(N=E+7;_>>=E)),b>>>=7,_-=7}if(n.have+C>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=30;break}for(;C--;)n.lens[n.have++]=A}}if(30===n.mode)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=30;break}if(n.lenbits=9,P={bits:n.lenbits},I=a(1,n.lens,0,n.nlen,n.lencode,0,n.work,P),n.lenbits=P.bits,I){e.msg="invalid literal/lengths set",n.mode=30;break}if(n.distbits=6,n.distcode=n.distdyn,P={bits:n.distbits},I=a(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,P),n.distbits=P.bits,I){e.msg="invalid distances set",n.mode=30;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(6<=g&&258<=y){e.next_out=m,e.avail_out=y,e.next_in=p,e.avail_in=g,n.hold=b,n.bits=_,s(e,w),m=e.next_out,h=e.output,y=e.avail_out,p=e.next_in,d=e.input,g=e.avail_in,b=n.hold,_=n.bits,12===n.mode&&(n.back=-1);break}for(n.back=0;D=(H=n.lencode[b&(1<>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(D&&!(240&D)){for(R=E,O=D,L=k;D=(H=n.lencode[L+((b&(1<>R)])>>>16&255,k=65535&H,!(R+(E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}b>>>=R,_-=R,n.back+=R}if(b>>>=E,_-=E,n.back+=E,n.length=k,0===D){n.mode=26;break}if(32&D){n.back=-1,n.mode=12;break}if(64&D){e.msg="invalid literal/length code",n.mode=30;break}n.extra=15&D,n.mode=22;case 22:if(n.extra){for(N=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;D=(H=n.distcode[b&(1<>>16&255,k=65535&H,!((E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}if(!(240&D)){for(R=E,O=D,L=k;D=(H=n.distcode[L+((b&(1<>R)])>>>16&255,k=65535&H,!(R+(E=H>>>24)<=_);){if(0===g)break e;g--,b+=d[p++]<<_,_+=8}b>>>=R,_-=R,n.back+=R}if(b>>>=E,_-=E,n.back+=E,64&D){e.msg="invalid distance code",n.mode=30;break}n.offset=k,n.extra=15&D,n.mode=24;case 24:if(n.extra){for(N=n.extra;_>>=n.extra,_-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=30;break}n.mode=25;case 25:if(0===y)break e;if(C=w-y,n.offset>C){if((C=n.offset-C)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=30;break}M=C>n.wnext?(C-=n.wnext,n.wsize-C):n.wnext-C,C>n.length&&(C=n.length),T=n.window}else T=h,M=m-n.offset,C=n.length;for(yb?(v=H[j+d[C]],A[I+d[C]]):(v=96,0),f=1<>k)+(p-=f)]=_<<24|v<<16|w,0!==p;);for(f=1<>=1;if(0!==f?(L&=f-1,L+=f):L=0,C++,0==--P[S]){if(S===T)break;S=t[n+d[C]]}if(E>>7)]}function S(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function C(e,t,n){e.bi_valid>s-n?(e.bi_buf|=t<>s-e.bi_valid,e.bi_valid+=n-s):(e.bi_buf|=t<>>=1,n<<=1,0<--t;);return n>>>1}function E(e,t,n){var r,i,s=new Array(o+1),a=0;for(r=1;r<=o;r++)s[r]=a=a+n[r-1]<<1;for(i=0;i<=t;i++){var l=e[2*i+1];0!==l&&(e[2*i]=T(s[l]++,l))}}function D(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function k(e){8>1;1<=n;n--)O(e,s,n);for(i=c;n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],O(e,s,1),r=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=r,s[2*i]=s[2*n]+s[2*r],e.depth[i]=(e.depth[n]>=e.depth[r]?e.depth[n]:e.depth[r])+1,s[2*n+1]=s[2*r+1]=i,e.heap[1]=i++,O(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,r,i,s,a,l,c=t.dyn_tree,u=t.max_code,d=t.stat_desc.static_tree,h=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,p=t.stat_desc.extra_base,m=t.stat_desc.max_length,g=0;for(s=0;s<=o;s++)e.bl_count[s]=0;for(c[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)m<(s=c[2*c[2*(r=e.heap[n])+1]+1]+1)&&(s=m,g++),c[2*r+1]=s,u>=7;r<30;r++)for(_[r]=i<<7,e=0;e<1<>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),A(e,e.l_desc),A(e,e.d_desc),s=function(e){var t;for(I(e,e.dyn_ltree,e.l_desc.max_code),I(e,e.dyn_dtree,e.d_desc.max_code),A(e,e.bl_desc),t=18;3<=t&&0===e.bl_tree[2*u[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(o=e.static_len+3+7>>>3)<=i&&(i=o)):i=o=n+5,n+4<=i&&-1!==t?H(e,t,n,r):4===e.strategy||o===i?(C(e,2+(r?1:0),3),L(e,d,h)):(C(e,4+(r?1:0),3),function(e,t,n,r){var i;for(C(e,t-257,5),C(e,n-1,5),C(e,r-4,4),i=0;i>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(p[n]+256+1)]++,e.dyn_dtree[2*x(t)]++),e.last_lit===e.lit_bufsize-1},n._tr_align=function(e){C(e,2,3),M(e,256,d),function(e){16===e.bi_valid?(S(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":41}],53:[function(e,t,n){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,n){"use strict";t.exports="function"==typeof setImmediate?setImmediate:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}},{}]},{},[10])(10)}))}).call(this,void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{buffer:83}],89:[function(e,t,n){n.Parser=e("./lib/parser").Parser,n.rules=e("./lib/rules"),n.errors=e("./lib/errors"),n.results=e("./lib/parsing-results"),n.StringSource=e("./lib/StringSource"),n.Token=e("./lib/Token"),n.bottomUp=e("./lib/bottom-up"),n.RegexTokeniser=e("./lib/regex-tokeniser").RegexTokeniser,n.rule=function(e){var t;return function(n){return t||(t=e()),t(n)}}},{"./lib/StringSource":90,"./lib/Token":91,"./lib/bottom-up":93,"./lib/errors":94,"./lib/parser":96,"./lib/parsing-results":97,"./lib/regex-tokeniser":98,"./lib/rules":99}],90:[function(e,t,n){var r=e("util"),i=(t.exports=function(e,t){return{asString:function(){return e},range:function(n,r){return new i(e,t,n,r)}}},function(e,t,n,r){this._string=e,this._description=t,this._startIndex=n,this._endIndex=r});i.prototype.to=function(e){return new i(this._string,this._description,this._startIndex,e._endIndex)},i.prototype.describe=function(){var e=this._position(),t=this._description?this._description+"\n":"";return r.format("%sLine number: %s\nCharacter number: %s",t,e.lineNumber,e.characterNumber)},i.prototype.lineNumber=function(){return this._position().lineNumber},i.prototype.characterNumber=function(){return this._position().characterNumber},i.prototype._position=function(){for(var e=this,t=0,n=function(){return e._string.indexOf("\n",t)},r=1;-1!==n()&&n()n){var c=a[1];return{token:new r(e[o].name,c,i.range(n,l)),endIndex:l}}}}return l=n+1,{token:new r("unrecognisedCharacter",t.substring(n,l),i.range(n,l)),endIndex:l}}return e=e.map((function(e){return{name:e.name,regex:new RegExp(e.regex.source,"g")}})),{tokenise:function(e,n){for(var o=new i(e,n),s=0,a=[];s1)for(var n=1;n=0&&n<=v}}function q(e){return function(t){return null==t?void 0:t[e]}}var X=q("byteLength"),K=G(X),J=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/,Z=u?function(e){return m?m(e)&&!F(e):K(e)&&J.test(l.call(e))}:$(!1),Q=q("length");function ee(e,t){t=function(e){for(var t={},n=e.length,r=0;r":">",'"':""","'":"'","`":"`"},ze=Be(Ve),$e=Be(we(Ve)),Ge=re.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},qe=/(.)^/,Xe={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Ke=/\\|'|\r|\n|\u2028|\u2029/g;function Je(e){return"\\"+Xe[e]}var Ze=/^\s*(\w|\$)+\s*$/,Qe=0;function et(e,t,n,r,i){if(!(r instanceof t))return e.apply(n,i);var o=Ee(e.prototype),s=e.apply(o,i);return x(s)?s:o}var tt=w((function(e,t){var n=tt.placeholder,r=function(){for(var i=0,o=t.length,s=Array(o),a=0;a1)it(a,t-1,n,r),i=r.length;else for(var l=0,c=a.length;l0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}}var ut=tt(ct,2);function dt(e,t,n){t=Ue(t,n);for(var r,i=te(e),o=0,s=i.length;o0?0:i-1;o>=0&&o0?s=o>=0?o:Math.max(o+l,s):l=o>=0?Math.min(o+1,l):o+l+1;else if(n&&o&&l)return r[o=n(r,i)]===i?o:-1;if(i!=i)return(o=t(a.call(r,s,l),z))>=0?o+s:-1;for(o=e>0?s:l-1;o>=0&&o=3;return function(t,n,r,i){var o=!rt(t)&&te(t),s=(o||t).length,a=e>0?0:s-1;for(i||(r=t[o?o[a]:a],a+=e);a>=0&&a=0}var kt=w((function(e,t,n){var r,i;return P(t)?i=t:(t=Re(t),r=t.slice(0,-1),t=t[t.length-1]),wt(e,(function(e){var o=i;if(!o){if(r&&r.length&&(e=Oe(e,r)),null==e)return;o=e[t]}return null==o?o:o.apply(e,n)}))}));function Rt(e,t){return wt(e,Pe(t))}function Ot(e,t,n){var r,i,o=-1/0,s=-1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=rt(e)?e:ve(e)).length;ao&&(o=r);else t=Ue(t,n),vt(e,(function(e,n,r){((i=t(e,n,r))>s||i===-1/0&&o===-1/0)&&(o=e,s=i)}));return o}function Lt(e,t,n){if(null==t||n)return rt(e)||(e=ve(e)),e[Ye(e.length-1)];var r=rt(e)?De(e):ve(e),i=Q(r);t=Math.max(Math.min(t,i),0);for(var o=i-1,s=0;s1&&(r=Ne(r,t[1])),t=le(e)):(r=Ut,t=it(t,!1,!1),e=Object(e));for(var i=0,o=t.length;i1&&(n=t[1])):(t=wt(it(t,!1,!1),String),r=function(e,n){return!Dt(t,n)}),Ft(e,r,n)}));function Wt(e,t,n){return a.call(e,0,Math.max(0,e.length-(null==t||n?1:t)))}function Bt(e,t,n){return null==e||e.length<1?null==t||n?void 0:[]:null==t||n?e[0]:Wt(e,e.length-t)}function Vt(e,t,n){return a.call(e,null==t||n?1:t)}var zt=w((function(e,t){return t=it(t,!0,!0),Mt(e,(function(e){return!Dt(t,e)}))})),$t=w((function(e,t){return zt(e,t)}));function Gt(e,t,n,r){C(t)||(r=n,n=t,t=!1),null!=n&&(n=Ue(n,r));for(var i=[],o=[],s=0,a=Q(e);st?(r&&(clearTimeout(r),r=null),a=c,s=e.apply(i,o),r||(i=o=null)):r||!1===n.trailing||(r=setTimeout(l,u)),s};return c.cancel=function(){clearTimeout(r),a=0,r=i=o=null},c},debounce:function(e,t,n){var r,i,o,s,a,l=function(){var c=We()-i;t>c?r=setTimeout(l,t-c):(r=null,n||(s=e.apply(a,o)),r||(o=a=null))},c=w((function(c){return a=this,o=c,i=We(),r||(r=setTimeout(l,t),n&&(s=e.apply(a,o))),s}));return c.cancel=function(){clearTimeout(r),r=o=a=null},c},wrap:function(e,t){return tt(t,e)},negate:lt,compose:function(){var e=arguments,t=e.length-1;return function(){for(var n=t,r=e[t].apply(this,arguments);n--;)r=e[n].call(this,r);return r}},after:function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},before:ct,once:ut,findKey:dt,findIndex:ft,findLastIndex:pt,sortedIndex:mt,indexOf:yt,lastIndexOf:bt,find:_t,detect:_t,findWhere:function(e,t){return _t(e,Ie(t))},each:vt,forEach:vt,map:wt,collect:wt,reduce:St,foldl:St,inject:St,reduceRight:Ct,foldr:Ct,filter:Mt,select:Mt,reject:function(e,t,n){return Mt(e,lt(Ue(t)),n)},every:Tt,all:Tt,some:Et,any:Et,contains:Dt,includes:Dt,include:Dt,invoke:kt,pluck:Rt,where:function(e,t){return Mt(e,Ie(t))},max:Ot,min:function(e,t,n){var r,i,o=1/0,s=1/0;if(null==t||"number"==typeof t&&"object"!=typeof e[0]&&null!=e)for(var a=0,l=(e=rt(e)?e:ve(e)).length;ar||void 0===n)return 1;if(n=o)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}})),l=r[n];n=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(t)?n.showHidden=t:t&&r._extend(n,t),b(n.showHidden)&&(n.showHidden=!1),b(n.depth)&&(n.depth=2),b(n.colors)&&(n.colors=!1),b(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,e,n.depth)}function l(e,t){var n=a.styles[t];return n?"["+a.colors[n][0]+"m"+e+"["+a.colors[n][1]+"m":e}function c(e,t){return e}function u(e,t,n){if(e.customInspect&&t&&S(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return y(i)||(i=u(e,i,n)),i}var o=function(e,t){if(b(t))return e.stylize("undefined","undefined");if(y(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}return g(t)?e.stylize(""+t,"number"):p(t)?e.stylize(""+t,"boolean"):m(t)?e.stylize("null","null"):void 0}(e,t);if(o)return o;var s=Object.keys(t),a=function(e){var t={};return e.forEach((function(e,n){t[e]=!0})),t}(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(t)),x(t)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return d(t);if(0===s.length){if(S(t)){var l=t.name?": "+t.name:"";return e.stylize("[Function"+l+"]","special")}if(_(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(w(t))return e.stylize(Date.prototype.toString.call(t),"date");if(x(t))return d(t)}var c,v="",C=!1,M=["{","}"];return f(t)&&(C=!0,M=["[","]"]),S(t)&&(v=" [Function"+(t.name?": "+t.name:"")+"]"),_(t)&&(v=" "+RegExp.prototype.toString.call(t)),w(t)&&(v=" "+Date.prototype.toUTCString.call(t)),x(t)&&(v=" "+d(t)),0!==s.length||C&&0!=t.length?n<0?_(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special"):(e.seen.push(t),c=C?function(e,t,n,r,i){for(var o=[],s=0,a=t.length;s60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}(c,v,M)):M[0]+v+M[1]}function d(e){return"["+Error.prototype.toString.call(e)+"]"}function h(e,t,n,r,i,o){var s,a,l;if((l=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?a=l.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):l.set&&(a=e.stylize("[Setter]","special")),E(r,i)||(s="["+i+"]"),a||(e.seen.indexOf(l.value)<0?(a=m(n)?u(e,l.value,null):u(e,l.value,n-1)).indexOf("\n")>-1&&(a=o?a.split("\n").map((function(e){return" "+e})).join("\n").substr(2):"\n"+a.split("\n").map((function(e){return" "+e})).join("\n")):a=e.stylize("[Circular]","special")),b(s)){if(o&&i.match(/^\d+$/))return a;(s=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function f(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function m(e){return null===e}function g(e){return"number"==typeof e}function y(e){return"string"==typeof e}function b(e){return void 0===e}function _(e){return v(e)&&"[object RegExp]"===C(e)}function v(e){return"object"==typeof e&&null!==e}function w(e){return v(e)&&"[object Date]"===C(e)}function x(e){return v(e)&&("[object Error]"===C(e)||e instanceof Error)}function S(e){return"function"==typeof e}function C(e){return Object.prototype.toString.call(e)}function M(e){return e<10?"0"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(b(o)&&(o=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!s[e])if(new RegExp("\\b"+e+"\\b","i").test(o)){var n=t.pid;s[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,n,t)}}else s[e]=function(){};return s[e]},r.inspect=a,a.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},a.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=f,r.isBoolean=p,r.isNull=m,r.isNullOrUndefined=function(e){return null==e},r.isNumber=g,r.isString=y,r.isSymbol=function(e){return"symbol"==typeof e},r.isUndefined=b,r.isRegExp=_,r.isObject=v,r.isDate=w,r.isError=x,r.isFunction=S,r.isPrimitive=function(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||void 0===e},r.isBuffer=e("./support/isBuffer");var T=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){var e,t;console.log("%s - %s",(t=[M((e=new Date).getHours()),M(e.getMinutes()),M(e.getSeconds())].join(":"),[e.getDate(),T[e.getMonth()],t].join(" ")),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!v(t))return e;for(var n=Object.keys(t),r=n.length;r--;)e[n[r]]=t[n[r]];return e}}).call(this,e("_process"),void 0!==n.g?n.g:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":104,_process:101,inherits:103}],106:[function(e,t,n){(function(){var e,n,r,i,o,s,a,l=[].slice,c={}.hasOwnProperty;e=function(){var e,t,n,r,i,s;if(s=arguments[0],i=2<=arguments.length?l.call(arguments,1):[],o(Object.assign))Object.assign.apply(null,arguments);else for(e=0,n=i.length;e":(null!=(n=this.parent)?n.name:void 0)?"attribute: {"+e+"}, parent: <"+this.parent.name+">":"attribute: {"+e+"}":""},e}()}).call(this)},{}],108:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing CDATA text. "+this.debugInfo());this.text=this.stringify.cdata(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).cdata(this)},t}(n)}).call(this)},{"./XMLNode":119}],109:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing comment text. "+this.debugInfo());this.text=this.stringify.comment(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).comment(this)},t}(n)}).call(this)},{"./XMLNode":119}],110:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r,i,o,s){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());if(null==r)throw new Error("Missing DTD attribute name. "+this.debugInfo(n));if(!i)throw new Error("Missing DTD attribute type. "+this.debugInfo(n));if(!o)throw new Error("Missing DTD attribute default. "+this.debugInfo(n));if(0!==o.indexOf("#")&&(o="#"+o),!o.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(n));if(s&&!o.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(n));this.elementName=this.stringify.eleName(n),this.attributeName=this.stringify.attName(r),this.attributeType=this.stringify.dtdAttType(i),this.defaultValue=this.stringify.dtdAttDefault(s),this.defaultValueType=o}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdAttList(this)},t}(n)}).call(this)},{"./XMLNode":119}],111:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());r||(r="(#PCDATA)"),Array.isArray(r)&&(r="("+r.join(",")+")"),this.name=this.stringify.eleName(n),this.value=this.stringify.dtdElementValue(r)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdElement(this)},t}(n)}).call(this)},{"./XMLNode":119}],112:[function(e,t,n){(function(){var n,r,i={}.hasOwnProperty;r=e("./Utility").isObject,n=e("./XMLNode"),t.exports=function(e){function t(e,n,i,o){if(t.__super__.constructor.call(this,e),null==i)throw new Error("Missing DTD entity name. "+this.debugInfo(i));if(null==o)throw new Error("Missing DTD entity value. "+this.debugInfo(i));if(this.pe=!!n,this.name=this.stringify.eleName(i),r(o)){if(!o.pubID&&!o.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(i));if(o.pubID&&!o.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(i));if(null!=o.pubID&&(this.pubID=this.stringify.dtdPubID(o.pubID)),null!=o.sysID&&(this.sysID=this.stringify.dtdSysID(o.sysID)),null!=o.nData&&(this.nData=this.stringify.dtdNData(o.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(i))}else this.value=this.stringify.dtdEntityValue(o)}return function(e,t){for(var n in t)i.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdEntity(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119}],113:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing DTD notation name. "+this.debugInfo(n));if(!r.pubID&&!r.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(n));this.name=this.stringify.eleName(n),null!=r.pubID&&(this.pubID=this.stringify.dtdPubID(r.pubID)),null!=r.sysID&&(this.sysID=this.stringify.dtdSysID(r.sysID))}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).dtdNotation(this)},t}(n)}).call(this)},{"./XMLNode":119}],114:[function(e,t,n){(function(){var n,r,i={}.hasOwnProperty;r=e("./Utility").isObject,n=e("./XMLNode"),t.exports=function(e){function t(e,n,i,o){var s;t.__super__.constructor.call(this,e),r(n)&&(n=(s=n).version,i=s.encoding,o=s.standalone),n||(n="1.0"),this.version=this.stringify.xmlVersion(n),null!=i&&(this.encoding=this.stringify.xmlEncoding(i)),null!=o&&(this.standalone=this.stringify.xmlStandalone(o))}return function(e,t){for(var n in t)i.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.toString=function(e){return this.options.writer.set(e).declaration(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119}],115:[function(e,t,n){(function(){var n,r,i,o,s,a,l={}.hasOwnProperty;a=e("./Utility").isObject,s=e("./XMLNode"),n=e("./XMLDTDAttList"),i=e("./XMLDTDEntity"),r=e("./XMLDTDElement"),o=e("./XMLDTDNotation"),t.exports=function(e){function t(e,n,r){var i,o;t.__super__.constructor.call(this,e),this.name="!DOCTYPE",this.documentObject=e,a(n)&&(n=(i=n).pubID,r=i.sysID),null==r&&(r=(o=[n,r])[0],n=o[1]),null!=n&&(this.pubID=this.stringify.dtdPubID(n)),null!=r&&(this.sysID=this.stringify.dtdSysID(r))}return function(e,t){for(var n in t)l.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.element=function(e,t){var n;return n=new r(this,e,t),this.children.push(n),this},t.prototype.attList=function(e,t,r,i,o){var s;return s=new n(this,e,t,r,i,o),this.children.push(s),this},t.prototype.entity=function(e,t){var n;return n=new i(this,!1,e,t),this.children.push(n),this},t.prototype.pEntity=function(e,t){var n;return n=new i(this,!0,e,t),this.children.push(n),this},t.prototype.notation=function(e,t){var n;return n=new o(this,e,t),this.children.push(n),this},t.prototype.toString=function(e){return this.options.writer.set(e).docType(this)},t.prototype.ele=function(e,t){return this.element(e,t)},t.prototype.att=function(e,t,n,r,i){return this.attList(e,t,n,r,i)},t.prototype.ent=function(e,t){return this.entity(e,t)},t.prototype.pent=function(e,t){return this.pEntity(e,t)},t.prototype.not=function(e,t){return this.notation(e,t)},t.prototype.up=function(){return this.root()||this.documentObject},t}(s)}).call(this)},{"./Utility":106,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLNode":119}],116:[function(e,t,n){(function(){var n,r,i,o,s={}.hasOwnProperty;o=e("./Utility").isPlainObject,n=e("./XMLNode"),i=e("./XMLStringifier"),r=e("./XMLStringWriter"),t.exports=function(e){function t(e){t.__super__.constructor.call(this,null),this.name="?xml",e||(e={}),e.writer||(e.writer=new r),this.options=e,this.stringify=new i(e),this.isDocument=!0}return function(e,t){for(var n in t)s.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.end=function(e){var t;return e?o(e)&&(t=e,e=this.options.writer.set(t)):e=this.options.writer,e.document(this)},t.prototype.toString=function(e){return this.options.writer.set(e).document(this)},t}(n)}).call(this)},{"./Utility":106,"./XMLNode":119,"./XMLStringWriter":123,"./XMLStringifier":124}],117:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m,g,y,b,_,v,w,x={}.hasOwnProperty;w=e("./Utility"),_=w.isObject,b=w.isFunction,v=w.isPlainObject,y=w.getValue,d=e("./XMLElement"),r=e("./XMLCData"),i=e("./XMLComment"),f=e("./XMLRaw"),g=e("./XMLText"),h=e("./XMLProcessingInstruction"),c=e("./XMLDeclaration"),u=e("./XMLDocType"),o=e("./XMLDTDAttList"),a=e("./XMLDTDEntity"),s=e("./XMLDTDElement"),l=e("./XMLDTDNotation"),n=e("./XMLAttribute"),m=e("./XMLStringifier"),p=e("./XMLStringWriter"),t.exports=function(){function e(e,t,n){var r;this.name="?xml",e||(e={}),e.writer?v(e.writer)&&(r=e.writer,e.writer=new p(r)):e.writer=new p(e),this.options=e,this.writer=e.writer,this.stringify=new m(e),this.onDataCallback=t||function(){},this.onEndCallback=n||function(){},this.currentNode=null,this.currentLevel=-1,this.openTags={},this.documentStarted=!1,this.documentCompleted=!1,this.root=null}return e.prototype.node=function(e,t,n){var r;if(null==e)throw new Error("Missing node name.");if(this.root&&-1===this.currentLevel)throw new Error("Document can only have one root node. "+this.debugInfo(e));return this.openCurrent(),e=y(e),null==t&&(t={}),t=y(t),_(t)||(n=(r=[t,n])[0],t=r[1]),this.currentNode=new d(this,e,t),this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,null!=n&&this.text(n),this},e.prototype.element=function(e,t,n){return this.currentNode&&this.currentNode instanceof u?this.dtdElement.apply(this,arguments):this.node(e,t,n)},e.prototype.attribute=function(e,t){var r,i;if(!this.currentNode||this.currentNode.children)throw new Error("att() can only be used immediately after an ele() call in callback mode. "+this.debugInfo(e));if(null!=e&&(e=y(e)),_(e))for(r in e)x.call(e,r)&&(i=e[r],this.attribute(r,i));else b(t)&&(t=t.apply()),this.options.skipNullAttributes&&null==t||(this.currentNode.attributes[e]=new n(this,e,t));return this},e.prototype.text=function(e){var t;return this.openCurrent(),t=new g(this,e),this.onData(this.writer.text(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.cdata=function(e){var t;return this.openCurrent(),t=new r(this,e),this.onData(this.writer.cdata(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.comment=function(e){var t;return this.openCurrent(),t=new i(this,e),this.onData(this.writer.comment(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.raw=function(e){var t;return this.openCurrent(),t=new f(this,e),this.onData(this.writer.raw(t,this.currentLevel+1),this.currentLevel+1),this},e.prototype.instruction=function(e,t){var n,r,i,o,s;if(this.openCurrent(),null!=e&&(e=y(e)),null!=t&&(t=y(t)),Array.isArray(e))for(n=0,o=e.length;n=0;)this.up();return this.onEnd()},e.prototype.openCurrent=function(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)},e.prototype.openNode=function(e){if(!e.isOpen)return!this.root&&0===this.currentLevel&&e instanceof d&&(this.root=e),this.onData(this.writer.openNode(e,this.currentLevel),this.currentLevel),e.isOpen=!0},e.prototype.closeNode=function(e){if(!e.isClosed)return this.onData(this.writer.closeNode(e,this.currentLevel),this.currentLevel),e.isClosed=!0},e.prototype.onData=function(e,t){return this.documentStarted=!0,this.onDataCallback(e,t+1)},e.prototype.onEnd=function(){return this.documentCompleted=!0,this.onEndCallback()},e.prototype.debugInfo=function(e){return null==e?"":"node: <"+e+">"},e.prototype.ele=function(){return this.element.apply(this,arguments)},e.prototype.nod=function(e,t,n){return this.node(e,t,n)},e.prototype.txt=function(e){return this.text(e)},e.prototype.dat=function(e){return this.cdata(e)},e.prototype.com=function(e){return this.comment(e)},e.prototype.ins=function(e,t){return this.instruction(e,t)},e.prototype.dec=function(e,t,n){return this.declaration(e,t,n)},e.prototype.dtd=function(e,t,n){return this.doctype(e,t,n)},e.prototype.e=function(e,t,n){return this.element(e,t,n)},e.prototype.n=function(e,t,n){return this.node(e,t,n)},e.prototype.t=function(e){return this.text(e)},e.prototype.d=function(e){return this.cdata(e)},e.prototype.c=function(e){return this.comment(e)},e.prototype.r=function(e){return this.raw(e)},e.prototype.i=function(e,t){return this.instruction(e,t)},e.prototype.att=function(){return this.currentNode&&this.currentNode instanceof u?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},e.prototype.a=function(){return this.currentNode&&this.currentNode instanceof u?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},e.prototype.ent=function(e,t){return this.entity(e,t)},e.prototype.pent=function(e,t){return this.pEntity(e,t)},e.prototype.not=function(e,t){return this.notation(e,t)},e}()}).call(this)},{"./Utility":106,"./XMLAttribute":107,"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLStringWriter":123,"./XMLStringifier":124,"./XMLText":125}],118:[function(e,t,n){(function(){var n,r,i,o,s,a,l={}.hasOwnProperty;a=e("./Utility"),s=a.isObject,o=a.isFunction,i=a.getValue,r=e("./XMLNode"),n=e("./XMLAttribute"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing element name. "+this.debugInfo());this.name=this.stringify.eleName(n),this.attributes={},null!=r&&this.attribute(r),e.isDocument&&(this.isRoot=!0,this.documentObject=e,e.rootObject=this)}return function(e,t){for(var n in t)l.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){var e,t,n,r;for(t in(n=Object.create(this)).isRoot&&(n.documentObject=null),n.attributes={},r=this.attributes)l.call(r,t)&&(e=r[t],n.attributes[t]=e.clone());return n.children=[],this.children.forEach((function(e){var t;return(t=e.clone()).parent=n,n.children.push(t)})),n},t.prototype.attribute=function(e,t){var r,a;if(null!=e&&(e=i(e)),s(e))for(r in e)l.call(e,r)&&(a=e[r],this.attribute(r,a));else o(t)&&(t=t.apply()),this.options.skipNullAttributes&&null==t||(this.attributes[e]=new n(this,e,t));return this},t.prototype.removeAttribute=function(e){var t,n,r;if(null==e)throw new Error("Missing attribute name. "+this.debugInfo());if(e=i(e),Array.isArray(e))for(n=0,r=e.length;n":(null!=(n=this.parent)?n.name:void 0)?"node: <"+e+">, parent: <"+this.parent.name+">":"node: <"+e+">":""},t.prototype.ele=function(e,t,n){return this.element(e,t,n)},t.prototype.nod=function(e,t,n){return this.node(e,t,n)},t.prototype.txt=function(e){return this.text(e)},t.prototype.dat=function(e){return this.cdata(e)},t.prototype.com=function(e){return this.comment(e)},t.prototype.ins=function(e,t){return this.instruction(e,t)},t.prototype.doc=function(){return this.document()},t.prototype.dec=function(e,t,n){return this.declaration(e,t,n)},t.prototype.dtd=function(e,t){return this.doctype(e,t)},t.prototype.e=function(e,t,n){return this.element(e,t,n)},t.prototype.n=function(e,t,n){return this.node(e,t,n)},t.prototype.t=function(e){return this.text(e)},t.prototype.d=function(e){return this.cdata(e)},t.prototype.c=function(e){return this.comment(e)},t.prototype.r=function(e){return this.raw(e)},t.prototype.i=function(e,t){return this.instruction(e,t)},t.prototype.u=function(){return this.up()},t.prototype.importXMLBuilder=function(e){return this.importDocument(e)},t}()}).call(this)},{"./Utility":106,"./XMLCData":108,"./XMLComment":109,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125}],120:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n,r){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing instruction target. "+this.debugInfo());this.target=this.stringify.insTarget(n),r&&(this.value=this.stringify.insValue(r))}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).processingInstruction(this)},t}(n)}).call(this)},{"./XMLNode":119}],121:[function(e,t,n){(function(){var n,r={}.hasOwnProperty;n=e("./XMLNode"),t.exports=function(e){function t(e,n){if(t.__super__.constructor.call(this,e),null==n)throw new Error("Missing raw text. "+this.debugInfo());this.value=this.stringify.raw(n)}return function(e,t){for(var n in t)r.call(t,n)&&(e[n]=t[n]);function i(){this.constructor=e}i.prototype=t.prototype,e.prototype=new i,e.__super__=t.prototype}(t,e),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(e){return this.options.writer.set(e).raw(this)},t}(n)}).call(this)},{"./XMLNode":119}],122:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m={}.hasOwnProperty;l=e("./XMLDeclaration"),c=e("./XMLDocType"),n=e("./XMLCData"),r=e("./XMLComment"),u=e("./XMLElement"),h=e("./XMLRaw"),f=e("./XMLText"),d=e("./XMLProcessingInstruction"),i=e("./XMLDTDAttList"),o=e("./XMLDTDElement"),s=e("./XMLDTDEntity"),a=e("./XMLDTDNotation"),p=e("./XMLWriterBase"),t.exports=function(e){function t(e,n){t.__super__.constructor.call(this,n),this.stream=e}return function(e,t){for(var n in t)m.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.document=function(e){var t,n,i,o,s,a,u,h;for(n=0,o=(a=e.children).length;n"+this.endline(e))},t.prototype.comment=function(e,t){return this.stream.write(this.space(t)+"\x3c!-- "+e.text+" --\x3e"+this.endline(e))},t.prototype.declaration=function(e,t){return this.stream.write(this.space(t)),this.stream.write('"),this.stream.write(this.endline(e))},t.prototype.docType=function(e,t){var l,c,u,h;if(t||(t=0),this.stream.write(this.space(t)),this.stream.write("0){for(this.stream.write(" ["),this.stream.write(this.endline(e)),c=0,u=(h=e.children).length;c"),this.stream.write(this.endline(e))},t.prototype.element=function(e,t){var i,o,s,a,l,c,p,g;for(l in t||(t=0),g=this.space(t),this.stream.write(g+"<"+e.name),c=e.attributes)m.call(c,l)&&(i=c[l],this.attribute(i));if(0===e.children.length||e.children.every((function(e){return""===e.value})))this.allowEmpty?this.stream.write(">"):this.stream.write(this.spacebeforeslash+"/>");else if(this.pretty&&1===e.children.length&&null!=e.children[0].value)this.stream.write(">"),this.stream.write(e.children[0].value),this.stream.write("");else{for(this.stream.write(">"+this.newline),s=0,a=(p=e.children).length;s")}return this.stream.write(this.endline(e))},t.prototype.processingInstruction=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.raw=function(e,t){return this.stream.write(this.space(t)+e.value+this.endline(e))},t.prototype.text=function(e,t){return this.stream.write(this.space(t)+e.value+this.endline(e))},t.prototype.dtdAttList=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdElement=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdEntity=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.dtdNotation=function(e,t){return this.stream.write(this.space(t)+""+this.endline(e))},t.prototype.endline=function(e){return e.isLastRootNode?"":this.newline},t}(p)}).call(this)},{"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125,"./XMLWriterBase":126}],123:[function(e,t,n){(function(){var n,r,i,o,s,a,l,c,u,d,h,f,p,m={}.hasOwnProperty;l=e("./XMLDeclaration"),c=e("./XMLDocType"),n=e("./XMLCData"),r=e("./XMLComment"),u=e("./XMLElement"),h=e("./XMLRaw"),f=e("./XMLText"),d=e("./XMLProcessingInstruction"),i=e("./XMLDTDAttList"),o=e("./XMLDTDElement"),s=e("./XMLDTDEntity"),a=e("./XMLDTDNotation"),p=e("./XMLWriterBase"),t.exports=function(e){function t(e){t.__super__.constructor.call(this,e)}return function(e,t){for(var n in t)m.call(t,n)&&(e[n]=t[n]);function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype}(t,e),t.prototype.document=function(e){var t,n,i,o,s;for(this.textispresent=!1,o="",n=0,i=(s=e.children).length;n"+this.newline},t.prototype.comment=function(e,t){return this.space(t)+"\x3c!-- "+e.text+" --\x3e"+this.newline},t.prototype.declaration=function(e,t){var n;return n=this.space(t),n+='")+this.newline},t.prototype.docType=function(e,t){var l,c,u,h,f;if(t||(t=0),h=this.space(t),h+="0){for(h+=" [",h+=this.newline,c=0,u=(f=e.children).length;c")+this.newline},t.prototype.element=function(e,t){var i,o,s,a,l,c,p,g,y,b,_,v,w;for(p in t||(t=0),w=!1,this.textispresent?(this.newline="",this.pretty=!1):(this.newline=this.newlinedefault,this.pretty=this.prettydefault),g="",g+=(v=this.space(t))+"<"+e.name,y=e.attributes)m.call(y,p)&&(i=y[p],g+=this.attribute(i));if(0===e.children.length||e.children.every((function(e){return""===e.value})))this.allowEmpty?g+=">"+this.newline:g+=this.spacebeforeslash+"/>"+this.newline;else if(this.pretty&&1===e.children.length&&null!=e.children[0].value)g+=">",g+=e.children[0].value,g+=""+this.newline;else{if(this.dontprettytextnodes)for(s=0,l=(b=e.children).length;s"+this.newline,a=0,c=(_=e.children).length;a"+this.newline}return g},t.prototype.processingInstruction=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.raw=function(e,t){return this.space(t)+e.value+this.newline},t.prototype.text=function(e,t){return this.space(t)+e.value+this.newline},t.prototype.dtdAttList=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.dtdElement=function(e,t){return this.space(t)+""+this.newline},t.prototype.dtdEntity=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.dtdNotation=function(e,t){var n;return n=this.space(t)+"")+this.newline},t.prototype.openNode=function(e,t){var n,r,i,o;if(t||(t=0),e instanceof u){for(r in i=this.space(t)+"<"+e.name,o=e.attributes)m.call(o,r)&&(n=o[r],i+=this.attribute(n));return i+(e.children?">":"/>")+this.newline}return i=this.space(t)+"")+this.newline},t.prototype.closeNode=function(e,t){switch(t||(t=0),!1){case!(e instanceof u):return this.space(t)+""+this.newline;case!(e instanceof c):return this.space(t)+"]>"+this.newline}},t}(p)}).call(this)},{"./XMLCData":108,"./XMLComment":109,"./XMLDTDAttList":110,"./XMLDTDElement":111,"./XMLDTDEntity":112,"./XMLDTDNotation":113,"./XMLDeclaration":114,"./XMLDocType":115,"./XMLElement":118,"./XMLProcessingInstruction":120,"./XMLRaw":121,"./XMLText":125,"./XMLWriterBase":126}],124:[function(e,t,n){(function(){var e={}.hasOwnProperty;t.exports=function(){function t(t){var n,r,i,o,s;for(i in this.assertLegalChar=(n=this.assertLegalChar,r=this,function(){return n.apply(r,arguments)}),t||(t={}),this.noDoubleEncoding=t.noDoubleEncoding,o=t.stringify||{})e.call(o,i)&&(s=o[i],this[i]=s)}return t.prototype.eleName=function(e){return e=""+e||"",this.assertLegalChar(e)},t.prototype.eleText=function(e){return e=""+e||"",this.assertLegalChar(this.elEscape(e))},t.prototype.cdata=function(e){return e=(e=""+e||"").replace("]]>","]]]]>"),this.assertLegalChar(e)},t.prototype.comment=function(e){if((e=""+e||"").match(/--/))throw new Error("Comment text cannot contain double-hypen: "+e);return this.assertLegalChar(e)},t.prototype.raw=function(e){return""+e||""},t.prototype.attName=function(e){return""+e||""},t.prototype.attValue=function(e){return e=""+e||"",this.attEscape(e)},t.prototype.insTarget=function(e){return""+e||""},t.prototype.insValue=function(e){if((e=""+e||"").match(/\?>/))throw new Error("Invalid processing instruction value: "+e);return e},t.prototype.xmlVersion=function(e){if(!(e=""+e||"").match(/1\.[0-9]+/))throw new Error("Invalid version number: "+e);return e},t.prototype.xmlEncoding=function(e){if(!(e=""+e||"").match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+e);return e},t.prototype.xmlStandalone=function(e){return e?"yes":"no"},t.prototype.dtdPubID=function(e){return""+e||""},t.prototype.dtdSysID=function(e){return""+e||""},t.prototype.dtdElementValue=function(e){return""+e||""},t.prototype.dtdAttType=function(e){return""+e||""},t.prototype.dtdAttDefault=function(e){return null!=e?""+e||"":e},t.prototype.dtdEntityValue=function(e){return""+e||""},t.prototype.dtdNData=function(e){return""+e||""},t.prototype.convertAttKey="@",t.prototype.convertPIKey="?",t.prototype.convertTextKey="#text",t.prototype.convertCDataKey="#cdata",t.prototype.convertCommentKey="#comment",t.prototype.convertRawKey="#raw",t.prototype.assertLegalChar=function(e){var t;if(t=e.match(/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/))throw new Error("Invalid character in string: "+e+" at index "+t.index);return e},t.prototype.elEscape=function(e){var t;return t=this.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,e.replace(t,"&").replace(//g,">").replace(/\r/g," ")},t.prototype.attEscape=function(e){var t;return t=this.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,e.replace(t,"&").replace(/0?new Array(t).join(this.indent):""},t}()}).call(this)},{}],127:[function(e,t,n){(function(){var n,r,i,o,s,a,l;l=e("./Utility"),s=l.assign,a=l.isFunction,n=e("./XMLDocument"),r=e("./XMLDocumentCB"),o=e("./XMLStringWriter"),i=e("./XMLStreamWriter"),t.exports.create=function(e,t,r,i){var o,a;if(null==e)throw new Error("Root element needs a name.");return i=s({},t,r,i),a=(o=new n(i)).element(e),i.headless||(o.declaration(i),null==i.pubID&&null==i.sysID||o.doctype(i)),a},t.exports.begin=function(e,t,i){var o;return a(e)&&(t=(o=[e,t])[0],i=o[1],e={}),t?new r(e,t,i):new n(e)},t.exports.stringWriter=function(e){return new o(e)},t.exports.streamWriter=function(e,t){return new i(e,t)}}).call(this)},{"./Utility":106,"./XMLDocument":116,"./XMLDocumentCB":117,"./XMLStreamWriter":122,"./XMLStringWriter":123}]},{},[21])(21)},e.exports=r()},25177:function(e,t,n){!function(e){"use strict";e.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},41488:function(e,t,n){!function(e){"use strict";var t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},r=function(e){return function(r,i,o,s){var a=t(r),l=n[e][t(r)];return 2===a&&(l=l[i?0:1]),l.replace(/%d/i,r)}},i=["جانفي","فيفري","مارس","أفريل","ماي","جوان","جويلية","أوت","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-dz",{months:i,monthsShort:i,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:r("s"),ss:r("s"),m:r("m"),mm:r("m"),h:r("h"),hh:r("h"),d:r("d"),dd:r("d"),M:r("M"),MM:r("M"),y:r("y"),yy:r("y")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:0,doy:4}})}(n(95093))},58676:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(95093))},42353:function(e,t,n){!function(e){"use strict";var t={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(e){return function(t,i,o,s){var a=n(t),l=r[e][n(t)];return 2===a&&(l=l[i?0:1]),l.replace(/%d/i,t)}},o=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar-ly",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},24496:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(95093))},6947:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-ps",{months:"كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل".split("_"),monthsShort:"ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).split("").reverse().join("").replace(/[١٢](?![\u062a\u0643])/g,(function(e){return n[e]})).split("").reverse().join("").replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(95093))},82682:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};e.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(95093))},89756:function(e,t,n){!function(e){"use strict";e.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(95093))},61509:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},i={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},o=function(e){return function(t,n,o,s){var a=r(t),l=i[e][r(t)];return 2===a&&(l=l[n?0:1]),l.replace(/%d/i,t)}},s=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];e.defineLocale("ar",{months:s,monthsShort:s,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(e){return"م"===e},meridiem:function(e,t,n){return e<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:o("s"),ss:o("s"),m:o("m"),mm:o("m"),h:o("h"),hh:o("h"),d:o("d"),dd:o("d"),M:o("M"),MM:o("M"),y:o("y"),yy:o("y")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},95533:function(e,t,n){!function(e){"use strict";var t={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};e.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"bir neçə saniyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(e){return/^(gündüz|axşam)$/.test(e)},meridiem:function(e,t,n){return e<4?"gecə":e<12?"səhər":e<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(e){if(0===e)return e+"-ıncı";var n=e%10;return e+(t[n]||t[e%100-n]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},28959:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"хвіліна":"хвіліну":"h"===n?t?"гадзіна":"гадзіну":e+" "+(r=+e,i={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:t?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}e.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:t,mm:t,h:t,hh:t,d:"дзень",dd:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночы":e<12?"раніцы":e<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+"-ы":e+"-і";case"D":return e+"-га";default:return e}},week:{dow:1,doy:7}})}(n(95093))},47777:function(e,t,n){!function(e){"use strict";e.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Миналата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[Миналия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",w:"седмица",ww:"%d седмици",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(95093))},54903:function(e,t,n){!function(e){"use strict";e.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(95093))},17357:function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn-bd",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t?e<4?e:e+12:"ভোর"===t||"সকাল"===t?e:"দুপুর"===t?e>=3?e:e+12:"বিকাল"===t||"সন্ধ্যা"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"রাত":e<6?"ভোর":e<12?"সকাল":e<15?"দুপুর":e<18?"বিকাল":e<20?"সন্ধ্যা":"রাত"},week:{dow:0,doy:6}})}(n(95093))},61290:function(e,t,n){!function(e){"use strict";var t={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};e.defineLocale("bn",{months:"জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(e){return e.replace(/[১২৩৪৫৬৭৮৯০]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(e,t){return 12===e&&(e=0),"রাত"===t&&e>=4||"দুপুর"===t&&e<5||"বিকাল"===t?e+12:e},meridiem:function(e,t,n){return e<4?"রাত":e<10?"সকাল":e<17?"দুপুর":e<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n(95093))},31545:function(e,t,n){!function(e){"use strict";var t={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};e.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12".split("_"),monthsShortRegex:/^(ཟླ་\d{1,2})/,monthsParseExact:!0,weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(e){return e.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(e,t){return 12===e&&(e=0),"མཚན་མོ"===t&&e>=4||"ཉིན་གུང"===t&&e<5||"དགོང་དག"===t?e+12:e},meridiem:function(e,t,n){return e<4?"མཚན་མོ":e<10?"ཞོགས་ཀས":e<17?"ཉིན་གུང":e<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n(95093))},11470:function(e,t,n){!function(e){"use strict";function t(e,t,n){return e+" "+function(e,t){return 2===t?function(e){var t={m:"v",b:"v",d:"z"};return void 0===t[e.charAt(0)]?e:t[e.charAt(0)]+e.substring(1)}(e):e}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],e)}function n(e){return e>9?n(e%10):e}var r=[/^gen/i,/^c[ʼ\']hwe/i,/^meu/i,/^ebr/i,/^mae/i,/^(mez|eve)/i,/^gou/i,/^eos/i,/^gwe/i,/^her/i,/^du/i,/^ker/i],i=/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,o=[/^Su/i,/^Lu/i,/^Me([^r]|$)/i,/^Mer/i,/^Ya/i,/^Gw/i,/^Sa/i];e.defineLocale("br",{months:"Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParse:o,fullWeekdaysParse:[/^sul/i,/^lun/i,/^meurzh/i,/^merc[ʼ\']her/i,/^yaou/i,/^gwener/i,/^sadorn/i],shortWeekdaysParse:[/^Sul/i,/^Lun/i,/^Meu/i,/^Mer/i,/^Yao/i,/^Gwe/i,/^Sad/i],minWeekdaysParse:o,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,monthsShortStrictRegex:/^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY HH:mm",LLLL:"dddd, D [a viz] MMMM YYYY HH:mm"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warcʼhoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Decʼh da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s ʼzo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:t,h:"un eur",hh:"%d eur",d:"un devezh",dd:t,M:"ur miz",MM:t,y:"ur bloaz",yy:function(e){switch(n(e)){case 1:case 3:case 4:case 5:case 9:return e+" bloaz";default:return e+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(e){return e+(1===e?"añ":"vet")},week:{dow:1,doy:4},meridiemParse:/a.m.|g.m./,isPM:function(e){return"g.m."===e},meridiem:function(e,t,n){return e<12?"a.m.":"g.m."}})}(n(95093))},44429:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"mm":return r+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return"jedan sat";case"hh":return r+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return r+(1===e?"dan":"dana");case"MM":return r+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return r+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:function(e,t,n,r){if("m"===n)return t?"jedna minuta":r?"jednu minutu":"jedne minute"},mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},7306:function(e,t,n){!function(e){"use strict";e.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(95093))},56464:function(e,t,n){!function(e){"use strict";var t={standalone:"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),format:"ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince".split("_"),isFormat:/DD?[o.]?(\[[^\[\]]*\]|\s)+MMMM/},n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_"),r=[/^led/i,/^úno/i,/^bře/i,/^dub/i,/^kvě/i,/^(čvn|červen$|června)/i,/^(čvc|červenec|července)/i,/^srp/i,/^zář/i,/^říj/i,/^lis/i,/^pro/i],i=/^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;function o(e){return e>1&&e<5&&1!=~~(e/10)}function s(e,t,n,r){var i=e+" ";switch(n){case"s":return t||r?"pár sekund":"pár sekundami";case"ss":return t||r?i+(o(e)?"sekundy":"sekund"):i+"sekundami";case"m":return t?"minuta":r?"minutu":"minutou";case"mm":return t||r?i+(o(e)?"minuty":"minut"):i+"minutami";case"h":return t?"hodina":r?"hodinu":"hodinou";case"hh":return t||r?i+(o(e)?"hodiny":"hodin"):i+"hodinami";case"d":return t||r?"den":"dnem";case"dd":return t||r?i+(o(e)?"dny":"dní"):i+"dny";case"M":return t||r?"měsíc":"měsícem";case"MM":return t||r?i+(o(e)?"měsíce":"měsíců"):i+"měsíci";case"y":return t||r?"rok":"rokem";case"yy":return t||r?i+(o(e)?"roky":"let"):i+"lety"}}e.defineLocale("cs",{months:t,monthsShort:n,monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,monthsShortStrictRegex:/^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s,ss:s,m:s,mm:s,h:s,hh:s,d:s,dd:s,M:s,MM:s,y:s,yy:s},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},73635:function(e,t,n){!function(e){"use strict";e.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(e){return e+(/сехет$/i.exec(e)?"рен":/ҫул$/i.exec(e)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(95093))},64226:function(e,t,n){!function(e){"use strict";e.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(e){var t="";return e>20?t=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(t=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),e+t},week:{dow:1,doy:4}})}(n(95093))},93601:function(e,t,n){!function(e){"use strict";e.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},26111:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},54697:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},77853:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[e+" Tage",e+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[e+" Monate",e+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[e+" Jahre",e+" Jahren"]};return t?i[n][0]:i[n][1]}e.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:t,mm:"%d Minuten",h:t,hh:"%d Stunden",d:t,dd:t,w:t,ww:"%d Wochen",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},60708:function(e,t,n){!function(e){"use strict";var t=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];e.defineLocale("dv",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(e){return"މފ"===e},meridiem:function(e,t,n){return e<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(95093))},54691:function(e,t,n){!function(e){"use strict";e.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(e,t){return e?"string"==typeof t&&/D/.test(t.substring(0,t.indexOf("MMMM")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(e,t,n){return e>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(e){return"μ"===(e+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){return 6===this.day()?"[το προηγούμενο] dddd [{}] LT":"[την προηγούμενη] dddd [{}] LT"},sameElse:"L"},calendar:function(e,t){var n,r=this._calendarEl[e],i=t&&t.hours();return n=r,("undefined"!=typeof Function&&n instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(r=r.apply(t)),r.replace("{}",i%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(95093))},53872:function(e,t,n){!function(e){"use strict";e.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:0,doy:4}})}(n(95093))},28298:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(95093))},56195:function(e,t,n){!function(e){"use strict";e.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},66584:function(e,t,n){!function(e){"use strict";e.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},65543:function(e,t,n){!function(e){"use strict";e.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}})}(n(95093))},9033:function(e,t,n){!function(e){"use strict";e.defineLocale("en-in",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:0,doy:6}})}(n(95093))},79402:function(e,t,n){!function(e){"use strict";e.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},43004:function(e,t,n){!function(e){"use strict";e.defineLocale("en-sg",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},32934:function(e,t,n){!function(e){"use strict";e.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"[la] D[-an de] MMMM, YYYY",LLL:"[la] D[-an de] MMMM, YYYY HH:mm",LLLL:"dddd[n], [la] D[-an de] MMMM, YYYY HH:mm",llll:"ddd, [la] D[-an de] MMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(e){return"p"===e.charAt(0).toLowerCase()},meridiem:function(e,t,n){return e>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd[n je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasintan] dddd[n je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"kelkaj sekundoj",ss:"%d sekundoj",m:"unu minuto",mm:"%d minutoj",h:"unu horo",hh:"%d horoj",d:"unu tago",dd:"%d tagoj",M:"unu monato",MM:"%d monatoj",y:"unu jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(95093))},20838:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},17730:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-mx",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:4},invalidDate:"Fecha inválida"})}(n(95093))},56575:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(95093))},97650:function(e,t,n){!function(e){"use strict";var t="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;e.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",w:"una semana",ww:"%d semanas",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4},invalidDate:"Fecha inválida"})}(n(95093))},3035:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[e+"sekundi",e+"sekundit"],m:["ühe minuti","üks minut"],mm:[e+" minuti",e+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[e+" tunni",e+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[e+" kuu",e+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[e+" aasta",e+" aastat"]};return t?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}e.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:"%d päeva",M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},3508:function(e,t,n){!function(e){"use strict";e.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},119:function(e,t,n){!function(e){"use strict";var t={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};e.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,t,n){return e<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"%d ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(e){return e.replace(/[۰-۹]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(95093))},90527:function(e,t,n){!function(e){"use strict";var t="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",t[7],t[8],t[9]];function r(e,r,i,o){var s="";switch(i){case"s":return o?"muutaman sekunnin":"muutama sekunti";case"ss":s=o?"sekunnin":"sekuntia";break;case"m":return o?"minuutin":"minuutti";case"mm":s=o?"minuutin":"minuuttia";break;case"h":return o?"tunnin":"tunti";case"hh":s=o?"tunnin":"tuntia";break;case"d":return o?"päivän":"päivä";case"dd":s=o?"päivän":"päivää";break;case"M":return o?"kuukauden":"kuukausi";case"MM":s=o?"kuukauden":"kuukautta";break;case"y":return o?"vuoden":"vuosi";case"yy":s=o?"vuoden":"vuotta"}return function(e,r){return e<10?r?n[e]:t[e]:e}(e,o)+" "+s}e.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},95995:function(e,t,n){!function(e){"use strict";e.defineLocale("fil",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},52477:function(e,t,n){!function(e){"use strict";e.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minuttur",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaður",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},26435:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}}})}(n(95093))},37892:function(e,t,n){!function(e){"use strict";e.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(e,t){switch(t){default:case"M":case"Q":case"D":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(95093))},85498:function(e,t,n){!function(e){"use strict";var t=/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,n=[/^janv/i,/^févr/i,/^mars/i,/^avr/i,/^mai/i,/^juin/i,/^juil/i,/^août/i,/^sept/i,/^oct/i,/^nov/i,/^déc/i];e.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsRegex:t,monthsShortRegex:t,monthsStrictRegex:/^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,monthsShortStrictRegex:/(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",w:"une semaine",ww:"%d semaines",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(e,t){switch(t){case"D":return e+(1===e?"er":"");default:case"M":case"Q":case"DDD":case"d":return e+(1===e?"er":"e");case"w":case"W":return e+(1===e?"re":"e")}},week:{dow:1,doy:4}})}(n(95093))},37071:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");e.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},41734:function(e,t,n){!function(e){"use strict";e.defineLocale("ga",{months:["Eanáir","Feabhra","Márta","Aibreán","Bealtaine","Meitheamh","Iúil","Lúnasa","Meán Fómhair","Deireadh Fómhair","Samhain","Nollaig"],monthsShort:["Ean","Feabh","Márt","Aib","Beal","Meith","Iúil","Lún","M.F.","D.F.","Samh","Noll"],monthsParseExact:!0,weekdays:["Dé Domhnaigh","Dé Luain","Dé Máirt","Dé Céadaoin","Déardaoin","Dé hAoine","Dé Sathairn"],weekdaysShort:["Domh","Luan","Máirt","Céad","Déar","Aoine","Sath"],weekdaysMin:["Do","Lu","Má","Cé","Dé","A","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Inniu ag] LT",nextDay:"[Amárach ag] LT",nextWeek:"dddd [ag] LT",lastDay:"[Inné ag] LT",lastWeek:"dddd [seo caite] [ag] LT",sameElse:"L"},relativeTime:{future:"i %s",past:"%s ó shin",s:"cúpla soicind",ss:"%d soicind",m:"nóiméad",mm:"%d nóiméad",h:"uair an chloig",hh:"%d uair an chloig",d:"lá",dd:"%d lá",M:"mí",MM:"%d míonna",y:"bliain",yy:"%d bliain"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(95093))},70217:function(e,t,n){!function(e){"use strict";e.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(e){return e+(1===e?"d":e%10==2?"na":"mh")},week:{dow:1,doy:4}})}(n(95093))},77329:function(e,t,n){!function(e){"use strict";e.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(e){return 0===e.indexOf("un")?"n"+e:"en "+e},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},32124:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["थोडया सॅकंडांनी","थोडे सॅकंड"],ss:[e+" सॅकंडांनी",e+" सॅकंड"],m:["एका मिणटान","एक मिनूट"],mm:[e+" मिणटांनी",e+" मिणटां"],h:["एका वरान","एक वर"],hh:[e+" वरांनी",e+" वरां"],d:["एका दिसान","एक दीस"],dd:[e+" दिसांनी",e+" दीस"],M:["एका म्हयन्यान","एक म्हयनो"],MM:[e+" म्हयन्यानी",e+" म्हयने"],y:["एका वर्सान","एक वर्स"],yy:[e+" वर्सांनी",e+" वर्सां"]};return r?i[n][0]:i[n][1]}e.defineLocale("gom-deva",{months:{standalone:"जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),format:"जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार".split("_"),weekdaysShort:"आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.".split("_"),weekdaysMin:"आ_सो_मं_बु_ब्रे_सु_शे".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [वाजतां]",LTS:"A h:mm:ss [वाजतां]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [वाजतां]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [वाजतां]",llll:"ddd, D MMM YYYY, A h:mm [वाजतां]"},calendar:{sameDay:"[आयज] LT",nextDay:"[फाल्यां] LT",nextWeek:"[फुडलो] dddd[,] LT",lastDay:"[काल] LT",lastWeek:"[फाटलो] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s आदीं",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(वेर)/,ordinal:function(e,t){return"D"===t?e+"वेर":e},week:{dow:0,doy:3},meridiemParse:/राती|सकाळीं|दनपारां|सांजे/,meridiemHour:function(e,t){return 12===e&&(e=0),"राती"===t?e<4?e:e+12:"सकाळीं"===t?e:"दनपारां"===t?e>12?e:e+12:"सांजे"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"राती":e<12?"सकाळीं":e<16?"दनपारां":e<20?"सांजे":"राती"}})}(n(95093))},93383:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["thoddea sekondamni","thodde sekond"],ss:[e+" sekondamni",e+" sekond"],m:["eka mintan","ek minut"],mm:[e+" mintamni",e+" mintam"],h:["eka voran","ek vor"],hh:[e+" voramni",e+" voram"],d:["eka disan","ek dis"],dd:[e+" disamni",e+" dis"],M:["eka mhoinean","ek mhoino"],MM:[e+" mhoineamni",e+" mhoine"],y:["eka vorsan","ek voros"],yy:[e+" vorsamni",e+" vorsam"]};return r?i[n][0]:i[n][1]}e.defineLocale("gom-latn",{months:{standalone:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),format:"Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea".split("_"),isFormat:/MMMM(\s)+D[oD]?/},monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Fuddlo] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fattlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(e,t){return"D"===t?e+"er":e},week:{dow:0,doy:3},meridiemParse:/rati|sokallim|donparam|sanje/,meridiemHour:function(e,t){return 12===e&&(e=0),"rati"===t?e<4?e:e+12:"sokallim"===t?e:"donparam"===t?e>12?e:e+12:"sanje"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"rati":e<12?"sokallim":e<16?"donparam":e<20?"sanje":"rati"}})}(n(95093))},95050:function(e,t,n){!function(e){"use strict";var t={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};e.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પહેલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(e){return e.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(e,t){return 12===e&&(e=0),"રાત"===t?e<4?e:e+12:"સવાર"===t?e:"બપોર"===t?e>=10?e:e+12:"સાંજ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"રાત":e<10?"સવાર":e<17?"બપોર":e<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n(95093))},11713:function(e,t,n){!function(e){"use strict";e.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(e){return 2===e?"שעתיים":e+" שעות"},d:"יום",dd:function(e){return 2===e?"יומיים":e+" ימים"},M:"חודש",MM:function(e){return 2===e?"חודשיים":e+" חודשים"},y:"שנה",yy:function(e){return 2===e?"שנתיים":e%10==0&&10!==e?e+" שנה":e+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,t,n){return e<5?"לפנות בוקר":e<10?"בבוקר":e<12?n?'לפנה"צ':"לפני הצהריים":e<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n(95093))},43861:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"},r=[/^जन/i,/^फ़र|फर/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सितं|सित/i,/^अक्टू/i,/^नव|नवं/i,/^दिसं|दिस/i];e.defineLocale("hi",{months:{format:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),standalone:"जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर".split("_")},monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},monthsParse:r,longMonthsParse:r,shortMonthsParse:[/^जन/i,/^फ़र/i,/^मार्च/i,/^अप्रै/i,/^मई/i,/^जून/i,/^जुल/i,/^अग/i,/^सित/i,/^अक्टू/i,/^नव/i,/^दिस/i],monthsRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsShortRegex:/^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,monthsStrictRegex:/^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,monthsShortStrictRegex:/^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,t){return 12===e&&(e=0),"रात"===t?e<4?e:e+12:"सुबह"===t?e:"दोपहर"===t?e>=10?e:e+12:"शाम"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"रात":e<10?"सुबह":e<17?"दोपहर":e<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n(95093))},26308:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=e+" ";switch(n){case"ss":return r+(1===e?"sekunda":2===e||3===e||4===e?"sekunde":"sekundi");case"m":return t?"jedna minuta":"jedne minute";case"mm":return r+(1===e?"minuta":2===e||3===e||4===e?"minute":"minuta");case"h":return t?"jedan sat":"jednog sata";case"hh":return r+(1===e?"sat":2===e||3===e||4===e?"sata":"sati");case"dd":return r+(1===e?"dan":"dana");case"MM":return r+(1===e?"mjesec":2===e||3===e||4===e?"mjeseca":"mjeseci");case"yy":return r+(1===e?"godina":2===e||3===e||4===e?"godine":"godina")}}e.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM YYYY",LLL:"Do MMMM YYYY H:mm",LLLL:"dddd, Do MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:return"[prošlu] [nedjelju] [u] LT";case 3:return"[prošlu] [srijedu] [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:t,m:t,mm:t,h:t,hh:t,d:"dan",dd:t,M:"mjesec",MM:t,y:"godinu",yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},90609:function(e,t,n){!function(e){"use strict";var t="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(e,t,n,r){var i=e;switch(n){case"s":return r||t?"néhány másodperc":"néhány másodperce";case"ss":return i+(r||t)?" másodperc":" másodperce";case"m":return"egy"+(r||t?" perc":" perce");case"mm":return i+(r||t?" perc":" perce");case"h":return"egy"+(r||t?" óra":" órája");case"hh":return i+(r||t?" óra":" órája");case"d":return"egy"+(r||t?" nap":" napja");case"dd":return i+(r||t?" nap":" napja");case"M":return"egy"+(r||t?" hónap":" hónapja");case"MM":return i+(r||t?" hónap":" hónapja");case"y":return"egy"+(r||t?" év":" éve");case"yy":return i+(r||t?" év":" éve")}return""}function r(e){return(e?"":"[múlt] ")+"["+t[this.day()]+"] LT[-kor]"}e.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(e){return"u"===e.charAt(1).toLowerCase()},meridiem:function(e,t,n){return e<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},17160:function(e,t,n){!function(e){"use strict";e.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(e){return/^(ցերեկվա|երեկոյան)$/.test(e)},meridiem:function(e){return e<4?"գիշերվա":e<12?"առավոտվա":e<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(e,t){switch(t){case"DDD":case"w":case"W":case"DDDo":return 1===e?e+"-ին":e+"-րդ";default:return e}},week:{dow:1,doy:7}})}(n(95093))},74063:function(e,t,n){!function(e){"use strict";e.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"siang"===t?e>=11?e:e+12:"sore"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"siang":e<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:0,doy:6}})}(n(95093))},89374:function(e,t,n){!function(e){"use strict";function t(e){return e%100==11||e%10!=1}function n(e,n,r,i){var o=e+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return t(e)?o+(n||i?"sekúndur":"sekúndum"):o+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return t(e)?o+(n||i?"mínútur":"mínútum"):n?o+"mínúta":o+"mínútu";case"hh":return t(e)?o+(n||i?"klukkustundir":"klukkustundum"):o+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return t(e)?n?o+"dagar":o+(i?"daga":"dögum"):n?o+"dagur":o+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return t(e)?n?o+"mánuðir":o+(i?"mánuði":"mánuðum"):n?o+"mánuður":o+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return t(e)?o+(n||i?"ár":"árum"):o+(n||i?"ár":"ári")}}e.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},21827:function(e,t,n){!function(e){"use strict";e.defineLocale("it-ch",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){return 0===this.day()?"[la scorsa] dddd [alle] LT":"[lo scorso] dddd [alle] LT"},sameElse:"L"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?"tra":"in")+" "+e},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},88383:function(e,t,n){!function(e){"use strict";e.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:function(){return"[Oggi a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextDay:function(){return"[Domani a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},nextWeek:function(){return"dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastDay:function(){return"[Ieri a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},lastWeek:function(){return 0===this.day()?"[La scorsa] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT":"[Lo scorso] dddd [a"+(this.hours()>1?"lle ":0===this.hours()?" ":"ll'")+"]LT"},sameElse:"L"},relativeTime:{future:"tra %s",past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",w:"una settimana",ww:"%d settimane",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},23827:function(e,t,n){!function(e){"use strict";e.defineLocale("ja",{eras:[{since:"2019-05-01",offset:1,name:"令和",narrow:"㋿",abbr:"R"},{since:"1989-01-08",until:"2019-04-30",offset:1,name:"平成",narrow:"㍻",abbr:"H"},{since:"1926-12-25",until:"1989-01-07",offset:1,name:"昭和",narrow:"㍼",abbr:"S"},{since:"1912-07-30",until:"1926-12-24",offset:1,name:"大正",narrow:"㍽",abbr:"T"},{since:"1873-01-01",until:"1912-07-29",offset:6,name:"明治",narrow:"㍾",abbr:"M"},{since:"0001-01-01",until:"1873-12-31",offset:1,name:"西暦",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"紀元前",narrow:"BC",abbr:"BC"}],eraYearOrdinalRegex:/(元|\d+)年/,eraYearOrdinalParse:function(e,t){return"元"===t[1]?1:parseInt(t[1]||e,10)},months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 dddd HH:mm",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日(ddd) HH:mm"},meridiemParse:/午前|午後/i,isPM:function(e){return"午後"===e},meridiem:function(e,t,n){return e<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:function(e){return e.week()!==this.week()?"[来週]dddd LT":"dddd LT"},lastDay:"[昨日] LT",lastWeek:function(e){return this.week()!==e.week()?"[先週]dddd LT":"dddd LT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(e,t){switch(t){case"y":return 1===e?"元年":e+"年";case"d":case"D":case"DDD":return e+"日";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n(95093))},89722:function(e,t,n){!function(e){"use strict";e.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(e,t){return 12===e&&(e=0),"enjing"===t?e:"siyang"===t?e>=11?e:e+12:"sonten"===t||"ndalu"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"enjing":e<15?"siyang":e<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(95093))},41794:function(e,t,n){!function(e){"use strict";e.defineLocale("ka",{months:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(e){return e.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,(function(e,t,n){return"ი"===n?t+"ში":t+n+"ში"}))},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,"ის წინ"):/წელი/.test(e)?e.replace(/წელი$/,"წლის წინ"):e},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+"-ლი":e<20||e<=100&&e%20==0||e%100==0?"მე-"+e:e+"-ე"},week:{dow:1,doy:7}})}(n(95093))},27088:function(e,t,n){!function(e){"use strict";var t={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};e.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},96870:function(e,t,n){!function(e){"use strict";var t={1:"១",2:"២",3:"៣",4:"៤",5:"៥",6:"៦",7:"៧",8:"៨",9:"៩",0:"០"},n={"១":"1","២":"2","៣":"3","៤":"4","៥":"5","៦":"6","៧":"7","៨":"8","៩":"9","០":"0"};e.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysMin:"អា_ច_អ_ព_ព្រ_សុ_ស".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ព្រឹក|ល្ងាច/,isPM:function(e){return"ល្ងាច"===e},meridiem:function(e,t,n){return e<12?"ព្រឹក":"ល្ងាច"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},dayOfMonthOrdinalParse:/ទី\d{1,2}/,ordinal:"ទី%d",preparse:function(e){return e.replace(/[១២៣៤៥៦៧៨៩០]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(95093))},84451:function(e,t,n){!function(e){"use strict";var t={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};e.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(e){return e.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ರಾತ್ರಿ"===t?e<4?e:e+12:"ಬೆಳಿಗ್ಗೆ"===t?e:"ಮಧ್ಯಾಹ್ನ"===t?e>=10?e:e+12:"ಸಂಜೆ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ರಾತ್ರಿ":e<10?"ಬೆಳಿಗ್ಗೆ":e<17?"ಮಧ್ಯಾಹ್ನ":e<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(e){return e+"ನೇ"},week:{dow:0,doy:6}})}(n(95093))},63164:function(e,t,n){!function(e){"use strict";e.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"일";case"M":return e+"월";case"w":case"W":return e+"주";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return"오후"===e},meridiem:function(e,t,n){return e<12?"오전":"오후"}})}(n(95093))},6181:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["çend sanîye","çend sanîyeyan"],ss:[e+" sanîye",e+" sanîyeyan"],m:["deqîqeyek","deqîqeyekê"],mm:[e+" deqîqe",e+" deqîqeyan"],h:["saetek","saetekê"],hh:[e+" saet",e+" saetan"],d:["rojek","rojekê"],dd:[e+" roj",e+" rojan"],w:["hefteyek","hefteyekê"],ww:[e+" hefte",e+" hefteyan"],M:["mehek","mehekê"],MM:[e+" meh",e+" mehan"],y:["salek","salekê"],yy:[e+" sal",e+" salan"]};return t?i[n][0]:i[n][1]}e.defineLocale("ku-kmr",{months:"Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar".split("_"),monthsShort:"Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber".split("_"),monthsParseExact:!0,weekdays:"Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî".split("_"),weekdaysShort:"Yek_Du_Sê_Çar_Pên_În_Şem".split("_"),weekdaysMin:"Ye_Du_Sê_Ça_Pê_În_Şe".split("_"),meridiem:function(e,t,n){return e<12?n?"bn":"BN":n?"pn":"PN"},meridiemParse:/bn|BN|pn|PN/,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"Do MMMM[a] YYYY[an]",LLL:"Do MMMM[a] YYYY[an] HH:mm",LLLL:"dddd, Do MMMM[a] YYYY[an] HH:mm",ll:"Do MMM[.] YYYY[an]",lll:"Do MMM[.] YYYY[an] HH:mm",llll:"ddd[.], Do MMM[.] YYYY[an] HH:mm"},calendar:{sameDay:"[Îro di saet] LT [de]",nextDay:"[Sibê di saet] LT [de]",nextWeek:"dddd [di saet] LT [de]",lastDay:"[Duh di saet] LT [de]",lastWeek:"dddd[a borî di saet] LT [de]",sameElse:"L"},relativeTime:{future:"di %s de",past:"berî %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,w:t,ww:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}(?:yê|ê|\.)/,ordinal:function(e,t){var n=t.toLowerCase();return n.includes("w")||n.includes("m")?e+".":e+function(e){var t=(e=""+e).substring(e.length-1),n=e.length>1?e.substring(e.length-2):"";return 12==n||13==n||"2"!=t&&"3"!=t&&"50"!=n&&"70"!=t&&"80"!=t?"ê":"yê"}(e)},week:{dow:1,doy:4}})}(n(95093))},98174:function(e,t,n){!function(e){"use strict";var t={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=["کانونی دووەم","شوبات","ئازار","نیسان","ئایار","حوزەیران","تەمموز","ئاب","ئەیلوول","تشرینی یەكەم","تشرینی دووەم","كانونی یەکەم"];e.defineLocale("ku",{months:r,monthsShort:r,weekdays:"یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌".split("_"),weekdaysShort:"یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌".split("_"),weekdaysMin:"ی_د_س_چ_پ_ه_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/ئێواره‌|به‌یانی/,isPM:function(e){return/ئێواره‌/.test(e)},meridiem:function(e,t,n){return e<12?"به‌یانی":"ئێواره‌"},calendar:{sameDay:"[ئه‌مرۆ كاتژمێر] LT",nextDay:"[به‌یانی كاتژمێر] LT",nextWeek:"dddd [كاتژمێر] LT",lastDay:"[دوێنێ كاتژمێر] LT",lastWeek:"dddd [كاتژمێر] LT",sameElse:"L"},relativeTime:{future:"له‌ %s",past:"%s",s:"چه‌ند چركه‌یه‌ك",ss:"چركه‌ %d",m:"یه‌ك خوله‌ك",mm:"%d خوله‌ك",h:"یه‌ك كاتژمێر",hh:"%d كاتژمێر",d:"یه‌ك ڕۆژ",dd:"%d ڕۆژ",M:"یه‌ك مانگ",MM:"%d مانگ",y:"یه‌ك ساڵ",yy:"%d ساڵ"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,(function(e){return n[e]})).replace(/،/g,",")},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]})).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(95093))},78474:function(e,t,n){!function(e){"use strict";var t={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};e.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кечээ саат] LT",lastWeek:"[Өткөн аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},79680:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return t?i[n][0]:i[n][1]}function n(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var t=e%10;return n(0===t?e/10:t)}if(e<1e4){for(;e>=10;)e/=10;return n(e)}return n(e/=1e3)}e.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(e){return n(e.substr(0,e.indexOf(" ")))?"a "+e:"an "+e},past:function(e){return n(e.substr(0,e.indexOf(" ")))?"viru "+e:"virun "+e},s:"e puer Sekonnen",ss:"%d Sekonnen",m:t,mm:"%d Minutten",h:t,hh:"%d Stonnen",d:t,dd:"%d Deeg",M:t,MM:"%d Méint",y:t,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},15867:function(e,t,n){!function(e){"use strict";e.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(e){return"ຕອນແລງ"===e},meridiem:function(e,t,n){return e<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(e){return"ທີ່"+e}})}(n(95093))},45766:function(e,t,n){!function(e){"use strict";var t={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(e,t,n,r){return t?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(e){return e%10==0||e>10&&e<20}function i(e){return t[e].split("_")}function o(e,t,o,s){var a=e+" ";return 1===e?a+n(0,t,o[0],s):t?a+(r(e)?i(o)[1]:i(o)[0]):s?a+i(o)[1]:a+(r(e)?i(o)[1]:i(o)[2])}e.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(e,t,n,r){return t?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"},ss:o,m:n,mm:o,h:n,hh:o,d:n,dd:o,M:n,MM:o,y:n,yy:o},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(e){return e+"-oji"},week:{dow:1,doy:4}})}(n(95093))},69532:function(e,t,n){!function(e){"use strict";var t={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(e,t,n){return n?t%10==1&&t%100!=11?e[2]:e[3]:t%10==1&&t%100!=11?e[0]:e[1]}function r(e,r,i){return e+" "+n(t[i],e,r)}function i(e,r,i){return n(t[i],e,r)}e.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(e,t){return t?"dažas sekundes":"dažām sekundēm"},ss:r,m:i,mm:r,h:i,hh:r,d:i,dd:r,M:i,MM:r,y:i,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},58076:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(e,t){return 1===e?t[0]:e>=2&&e<=4?t[1]:t[2]},translate:function(e,n,r){var i=t.words[r];return 1===r.length?n?i[0]:i[1]:e+" "+t.correctGrammaticalCase(e,i)}};e.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:"dan",dd:t.translate,M:"mjesec",MM:t.translate,y:"godinu",yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},41848:function(e,t,n){!function(e){"use strict";e.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},30306:function(e,t,n){!function(e){"use strict";e.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"за %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"една минута",mm:"%d минути",h:"еден час",hh:"%d часа",d:"еден ден",dd:"%d дена",M:"еден месец",MM:"%d месеци",y:"една година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var t=e%10,n=e%100;return 0===e?e+"-ев":0===n?e+"-ен":n>10&&n<20?e+"-ти":1===t?e+"-ви":2===t?e+"-ри":7===t||8===t?e+"-ми":e+"-ти"},week:{dow:1,doy:7}})}(n(95093))},73739:function(e,t,n){!function(e){"use strict";e.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(e,t){return 12===e&&(e=0),"രാത്രി"===t&&e>=4||"ഉച്ച കഴിഞ്ഞ്"===t||"വൈകുന്നേരം"===t?e+12:e},meridiem:function(e,t,n){return e<4?"രാത്രി":e<12?"രാവിലെ":e<17?"ഉച്ച കഴിഞ്ഞ്":e<20?"വൈകുന്നേരം":"രാത്രി"}})}(n(95093))},99053:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){switch(n){case"s":return t?"хэдхэн секунд":"хэдхэн секундын";case"ss":return e+(t?" секунд":" секундын");case"m":case"mm":return e+(t?" минут":" минутын");case"h":case"hh":return e+(t?" цаг":" цагийн");case"d":case"dd":return e+(t?" өдөр":" өдрийн");case"M":case"MM":return e+(t?" сар":" сарын");case"y":case"yy":return e+(t?" жил":" жилийн");default:return e}}e.defineLocale("mn",{months:"Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар".split("_"),monthsShort:"1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар".split("_"),monthsParseExact:!0,weekdays:"Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба".split("_"),weekdaysShort:"Ням_Дав_Мяг_Лха_Пүр_Баа_Бям".split("_"),weekdaysMin:"Ня_Да_Мя_Лх_Пү_Ба_Бя".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY оны MMMMын D",LLL:"YYYY оны MMMMын D HH:mm",LLLL:"dddd, YYYY оны MMMMын D HH:mm"},meridiemParse:/ҮӨ|ҮХ/i,isPM:function(e){return"ҮХ"===e},meridiem:function(e,t,n){return e<12?"ҮӨ":"ҮХ"},calendar:{sameDay:"[Өнөөдөр] LT",nextDay:"[Маргааш] LT",nextWeek:"[Ирэх] dddd LT",lastDay:"[Өчигдөр] LT",lastWeek:"[Өнгөрсөн] dddd LT",sameElse:"L"},relativeTime:{future:"%s дараа",past:"%s өмнө",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2} өдөр/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+" өдөр";default:return e}}})}(n(95093))},86169:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function r(e,t,n,r){var i="";if(t)switch(n){case"s":i="काही सेकंद";break;case"ss":i="%d सेकंद";break;case"m":i="एक मिनिट";break;case"mm":i="%d मिनिटे";break;case"h":i="एक तास";break;case"hh":i="%d तास";break;case"d":i="एक दिवस";break;case"dd":i="%d दिवस";break;case"M":i="एक महिना";break;case"MM":i="%d महिने";break;case"y":i="एक वर्ष";break;case"yy":i="%d वर्षे"}else switch(n){case"s":i="काही सेकंदां";break;case"ss":i="%d सेकंदां";break;case"m":i="एका मिनिटा";break;case"mm":i="%d मिनिटां";break;case"h":i="एका तासा";break;case"hh":i="%d तासां";break;case"d":i="एका दिवसा";break;case"dd":i="%d दिवसां";break;case"M":i="एका महिन्या";break;case"MM":i="%d महिन्यां";break;case"y":i="एका वर्षा";break;case"yy":i="%d वर्षां"}return i.replace(/%d/i,e)}e.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,meridiemHour:function(e,t){return 12===e&&(e=0),"पहाटे"===t||"सकाळी"===t?e:"दुपारी"===t||"सायंकाळी"===t||"रात्री"===t?e>=12?e:e+12:void 0},meridiem:function(e,t,n){return e>=0&&e<6?"पहाटे":e<12?"सकाळी":e<17?"दुपारी":e<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n(95093))},92297:function(e,t,n){!function(e){"use strict";e.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(95093))},73386:function(e,t,n){!function(e){"use strict";e.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,t){return 12===e&&(e=0),"pagi"===t?e:"tengahari"===t?e>=11?e:e+12:"petang"===t||"malam"===t?e+12:void 0},meridiem:function(e,t,n){return e<11?"pagi":e<15?"tengahari":e<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(95093))},77075:function(e,t,n){!function(e){"use strict";e.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},72264:function(e,t,n){!function(e){"use strict";var t={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};e.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(e){return e.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},week:{dow:1,doy:4}})}(n(95093))},22274:function(e,t,n){!function(e){"use strict";e.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"én time",hh:"%d timer",d:"én dag",dd:"%d dager",w:"én uke",ww:"%d uker",M:"én måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},8235:function(e,t,n){!function(e){"use strict";var t={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};e.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(e,t){return 12===e&&(e=0),"राति"===t?e<4?e:e+12:"बिहान"===t?e:"दिउँसो"===t?e>=10?e:e+12:"साँझ"===t?e+12:void 0},meridiem:function(e,t,n){return e<3?"राति":e<12?"बिहान":e<16?"दिउँसो":e<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(95093))},43784:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},92572:function(e,t,n){!function(e){"use strict";var t="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^(maart|mrt\.?)$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;e.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(e,r){return e?/-MMM-/.test(r)?n[e.month()]:t[e.month()]:t},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",w:"één week",ww:"%d weken",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(95093))},54566:function(e,t,n){!function(e){"use strict";e.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"su._må._ty._on._to._fr._lau.".split("_"),weekdaysMin:"su_må_ty_on_to_fr_la".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",w:"ei veke",ww:"%d veker",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},69330:function(e,t,n){!function(e){"use strict";e.defineLocale("oc-lnc",{months:{standalone:"genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre".split("_"),format:"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dm._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dm_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:"[uèi a] LT",nextDay:"[deman a] LT",nextWeek:"dddd [a] LT",lastDay:"[ièr a] LT",lastWeek:"dddd [passat a] LT",sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"unas segondas",ss:"%d segondas",m:"una minuta",mm:"%d minutas",h:"una ora",hh:"%d oras",d:"un jorn",dd:"%d jorns",M:"un mes",MM:"%d meses",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(e,t){var n=1===e?"r":2===e?"n":3===e?"r":4===e?"t":"è";return"w"!==t&&"W"!==t||(n="a"),e+n},week:{dow:1,doy:4}})}(n(95093))},29849:function(e,t,n){!function(e){"use strict";var t={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};e.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"[ਅਗਲਾ] dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(e){return e.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(e,t){return 12===e&&(e=0),"ਰਾਤ"===t?e<4?e:e+12:"ਸਵੇਰ"===t?e:"ਦੁਪਹਿਰ"===t?e>=10?e:e+12:"ਸ਼ਾਮ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"ਰਾਤ":e<10?"ਸਵੇਰ":e<17?"ਦੁਪਹਿਰ":e<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n(95093))},94418:function(e,t,n){!function(e){"use strict";var t="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_"),r=[/^sty/i,/^lut/i,/^mar/i,/^kwi/i,/^maj/i,/^cze/i,/^lip/i,/^sie/i,/^wrz/i,/^paź/i,/^lis/i,/^gru/i];function i(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function o(e,t,n){var r=e+" ";switch(n){case"ss":return r+(i(e)?"sekundy":"sekund");case"m":return t?"minuta":"minutę";case"mm":return r+(i(e)?"minuty":"minut");case"h":return t?"godzina":"godzinę";case"hh":return r+(i(e)?"godziny":"godzin");case"ww":return r+(i(e)?"tygodnie":"tygodni");case"MM":return r+(i(e)?"miesiące":"miesięcy");case"yy":return r+(i(e)?"lata":"lat")}}e.defineLocale("pl",{months:function(e,r){return e?/D MMMM/.test(r)?n[e.month()]:t[e.month()]:t},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:o,m:o,mm:o,h:o,hh:o,d:"1 dzień",dd:"%d dni",w:"tydzień",ww:o,M:"miesiąc",MM:o,y:"rok",yy:o},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},48303:function(e,t,n){!function(e){"use strict";e.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado".split("_"),weekdaysShort:"dom_seg_ter_qua_qui_sex_sáb".split("_"),weekdaysMin:"do_2ª_3ª_4ª_5ª_6ª_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",invalidDate:"Data inválida"})}(n(95093))},79834:function(e,t,n){!function(e){"use strict";e.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",w:"uma semana",ww:"%d semanas",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(95093))},24457:function(e,t,n){!function(e){"use strict";function t(e,t,n){var r=" ";return(e%100>=20||e>=100&&e%100==0)&&(r=" de "),e+r+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",ww:"săptămâni",MM:"luni",yy:"ani"}[n]}e.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:t,m:"un minut",mm:t,h:"o oră",hh:t,d:"o zi",dd:t,w:"o săptămână",ww:t,M:"o lună",MM:t,y:"un an",yy:t},week:{dow:1,doy:7}})}(n(95093))},82271:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"минута":"минуту":e+" "+(r=+e,i={ss:t?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:t?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",ww:"неделя_недели_недель",MM:"месяц_месяца_месяцев",yy:"год_года_лет"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];e.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня, в] LT",nextDay:"[Завтра, в] LT",lastDay:"[Вчера, в] LT",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В следующее] dddd, [в] LT";case 1:case 2:case 4:return"[В следующий] dddd, [в] LT";case 3:case 5:case 6:return"[В следующую] dddd, [в] LT"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?"[Во] dddd, [в] LT":"[В] dddd, [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd, [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd, [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd, [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:t,m:t,mm:t,h:"час",hh:t,d:"день",dd:t,w:"неделя",ww:t,M:"месяц",MM:t,y:"год",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночи":e<12?"утра":e<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":return e+"-й";case"D":return e+"-го";case"w":case"W":return e+"-я";default:return e}},week:{dow:1,doy:4}})}(n(95093))},1221:function(e,t,n){!function(e){"use strict";var t=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];e.defineLocale("sd",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(95093))},33478:function(e,t,n){!function(e){"use strict";e.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},17538:function(e,t,n){!function(e){"use strict";e.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(e){return e+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(e){return"ප.ව."===e||"පස් වරු"===e},meridiem:function(e,t,n){return e>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n(95093))},5784:function(e,t,n){!function(e){"use strict";var t="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function r(e){return e>1&&e<5}function i(e,t,n,i){var o=e+" ";switch(n){case"s":return t||i?"pár sekúnd":"pár sekundami";case"ss":return t||i?o+(r(e)?"sekundy":"sekúnd"):o+"sekundami";case"m":return t?"minúta":i?"minútu":"minútou";case"mm":return t||i?o+(r(e)?"minúty":"minút"):o+"minútami";case"h":return t?"hodina":i?"hodinu":"hodinou";case"hh":return t||i?o+(r(e)?"hodiny":"hodín"):o+"hodinami";case"d":return t||i?"deň":"dňom";case"dd":return t||i?o+(r(e)?"dni":"dní"):o+"dňami";case"M":return t||i?"mesiac":"mesiacom";case"MM":return t||i?o+(r(e)?"mesiace":"mesiacov"):o+"mesiacmi";case"y":return t||i?"rok":"rokom";case"yy":return t||i?o+(r(e)?"roky":"rokov"):o+"rokmi"}}e.defineLocale("sk",{months:t,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:case 4:case 5:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},46637:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i=e+" ";switch(n){case"s":return t||r?"nekaj sekund":"nekaj sekundami";case"ss":return i+(1===e?t?"sekundo":"sekundi":2===e?t||r?"sekundi":"sekundah":e<5?t||r?"sekunde":"sekundah":"sekund");case"m":return t?"ena minuta":"eno minuto";case"mm":return i+(1===e?t?"minuta":"minuto":2===e?t||r?"minuti":"minutama":e<5?t||r?"minute":"minutami":t||r?"minut":"minutami");case"h":return t?"ena ura":"eno uro";case"hh":return i+(1===e?t?"ura":"uro":2===e?t||r?"uri":"urama":e<5?t||r?"ure":"urami":t||r?"ur":"urami");case"d":return t||r?"en dan":"enim dnem";case"dd":return i+(1===e?t||r?"dan":"dnem":2===e?t||r?"dni":"dnevoma":t||r?"dni":"dnevi");case"M":return t||r?"en mesec":"enim mesecem";case"MM":return i+(1===e?t||r?"mesec":"mesecem":2===e?t||r?"meseca":"mesecema":e<5?t||r?"mesece":"meseci":t||r?"mesecev":"meseci");case"y":return t||r?"eno leto":"enim letom";case"yy":return i+(1===e?t||r?"leto":"letom":2===e?t||r?"leti":"letoma":e<5?t||r?"leta":"leti":t||r?"let":"leti")}}e.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD. MM. YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},86794:function(e,t,n){!function(e){"use strict";e.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return"M"===e.charAt(0)},meridiem:function(e,t,n){return e<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},3322:function(e,t,n){!function(e){"use strict";var t={words:{ss:["секунда","секунде","секунди"],m:["један минут","једног минута"],mm:["минут","минута","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],d:["један дан","једног дана"],dd:["дан","дана","дана"],M:["један месец","једног месеца"],MM:["месец","месеца","месеци"],y:["једну годину","једне године"],yy:["годину","године","година"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,i){var o,s=t.words[r];return 1===r.length?"y"===r&&n?"једна година":i||n?s[0]:s[1]:(o=t.correctGrammaticalCase(e,s),"yy"===r&&n&&"годину"===o?e+" година":e+" "+o)}};e.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},45719:function(e,t,n){!function(e){"use strict";var t={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],d:["jedan dan","jednog dana"],dd:["dan","dana","dana"],M:["jedan mesec","jednog meseca"],MM:["mesec","meseca","meseci"],y:["jednu godinu","jedne godine"],yy:["godinu","godine","godina"]},correctGrammaticalCase:function(e,t){return e%10>=1&&e%10<=4&&(e%100<10||e%100>=20)?e%10==1?t[0]:t[1]:t[2]},translate:function(e,n,r,i){var o,s=t.words[r];return 1===r.length?"y"===r&&n?"jedna godina":i||n?s[0]:s[1]:(o=t.correctGrammaticalCase(e,s),"yy"===r&&n&&"godinu"===o?e+" godina":e+" "+o)}};e.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D. M. YYYY.",LL:"D. MMMM YYYY.",LLL:"D. MMMM YYYY. H:mm",LLLL:"dddd, D. MMMM YYYY. H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:t.translate,m:t.translate,mm:t.translate,h:t.translate,hh:t.translate,d:t.translate,dd:t.translate,M:t.translate,MM:t.translate,y:t.translate,yy:t.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(95093))},56e3:function(e,t,n){!function(e){"use strict";e.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(e,t,n){return e<11?"ekuseni":e<15?"emini":e<19?"entsambama":"ebusuku"},meridiemHour:function(e,t){return 12===e&&(e=0),"ekuseni"===t?e:"emini"===t?e>=11?e:e+12:"entsambama"===t||"ebusuku"===t?0===e?0:e+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(95093))},41011:function(e,t,n){!function(e){"use strict";e.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?":e":1===t||2===t?":a":":e")},week:{dow:1,doy:4}})}(n(95093))},40748:function(e,t,n){!function(e){"use strict";e.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"hh:mm A",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"siku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(95093))},11025:function(e,t,n){!function(e){"use strict";var t={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};e.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(e){return e+"வது"},preparse:function(e){return e.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,(function(e){return n[e]}))},postformat:function(e){return e.replace(/\d/g,(function(e){return t[e]}))},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(e,t,n){return e<2?" யாமம்":e<6?" வைகறை":e<10?" காலை":e<14?" நண்பகல்":e<18?" எற்பாடு":e<22?" மாலை":" யாமம்"},meridiemHour:function(e,t){return 12===e&&(e=0),"யாமம்"===t?e<2?e:e+12:"வைகறை"===t||"காலை"===t||"நண்பகல்"===t&&e>=10?e:e+12},week:{dow:0,doy:6}})}(n(95093))},11885:function(e,t,n){!function(e){"use strict";e.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(e,t){return 12===e&&(e=0),"రాత్రి"===t?e<4?e:e+12:"ఉదయం"===t?e:"మధ్యాహ్నం"===t?e>=10?e:e+12:"సాయంత్రం"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"రాత్రి":e<10?"ఉదయం":e<17?"మధ్యాహ్నం":e<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n(95093))},28861:function(e,t,n){!function(e){"use strict";e.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"segundu balun",ss:"segundu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},86571:function(e,t,n){!function(e){"use strict";var t={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};e.defineLocale("tg",{months:{format:"январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри".split("_"),standalone:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_")},monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Фардо соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(e,t){return 12===e&&(e=0),"шаб"===t?e<4?e:e+12:"субҳ"===t?e:"рӯз"===t?e>=11?e:e+12:"бегоҳ"===t?e+12:void 0},meridiem:function(e,t,n){return e<4?"шаб":e<11?"субҳ":e<16?"рӯз":e<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(e){return e+(t[e]||t[e%10]||t[e>=100?100:null])},week:{dow:1,doy:7}})}(n(95093))},55802:function(e,t,n){!function(e){"use strict";e.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return"หลังเที่ยง"===e},meridiem:function(e,t,n){return e<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",w:"1 สัปดาห์",ww:"%d สัปดาห์",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(95093))},59527:function(e,t,n){!function(e){"use strict";var t={1:"'inji",5:"'inji",8:"'inji",70:"'inji",80:"'inji",2:"'nji",7:"'nji",20:"'nji",50:"'nji",3:"'ünji",4:"'ünji",100:"'ünji",6:"'njy",9:"'unjy",10:"'unjy",30:"'unjy",60:"'ynjy",90:"'ynjy"};e.defineLocale("tk",{months:"Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr".split("_"),monthsShort:"Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek".split("_"),weekdays:"Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe".split("_"),weekdaysShort:"Ýek_Duş_Siş_Çar_Pen_Ann_Şen".split("_"),weekdaysMin:"Ýk_Dş_Sş_Çr_Pn_An_Şn".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün sagat] LT",nextDay:"[ertir sagat] LT",nextWeek:"[indiki] dddd [sagat] LT",lastDay:"[düýn] LT",lastWeek:"[geçen] dddd [sagat] LT",sameElse:"L"},relativeTime:{future:"%s soň",past:"%s öň",s:"birnäçe sekunt",m:"bir minut",mm:"%d minut",h:"bir sagat",hh:"%d sagat",d:"bir gün",dd:"%d gün",M:"bir aý",MM:"%d aý",y:"bir ýyl",yy:"%d ýyl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'unjy";var r=e%10;return e+(t[r]||t[e%100-r]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(n(95093))},29231:function(e,t,n){!function(e){"use strict";e.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},31052:function(e,t,n){!function(e){"use strict";var t="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(e,n,r,i){var o=function(e){var n=Math.floor(e%1e3/100),r=Math.floor(e%100/10),i=e%10,o="";return n>0&&(o+=t[n]+"vatlh"),r>0&&(o+=(""!==o?" ":"")+t[r]+"maH"),i>0&&(o+=(""!==o?" ":"")+t[i]),""===o?"pagh":o}(e);switch(r){case"ss":return o+" lup";case"mm":return o+" tup";case"hh":return o+" rep";case"dd":return o+" jaj";case"MM":return o+" jar";case"yy":return o+" DIS"}}e.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"leS":-1!==e.indexOf("jar")?t.slice(0,-3)+"waQ":-1!==e.indexOf("DIS")?t.slice(0,-3)+"nem":t+" pIq"},past:function(e){var t=e;return-1!==e.indexOf("jaj")?t.slice(0,-3)+"Hu’":-1!==e.indexOf("jar")?t.slice(0,-3)+"wen":-1!==e.indexOf("DIS")?t.slice(0,-3)+"ben":t+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},85096:function(e,t,n){!function(e){"use strict";var t={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};e.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pzt_Sal_Çar_Per_Cum_Cmt".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),meridiem:function(e,t,n){return e<12?n?"öö":"ÖÖ":n?"ös":"ÖS"},meridiemParse:/öö|ÖÖ|ös|ÖS/,isPM:function(e){return"ös"===e||"ÖS"===e},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",w:"bir hafta",ww:"%d hafta",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(e,n){switch(n){case"d":case"D":case"Do":case"DD":return e;default:if(0===e)return e+"'ıncı";var r=e%10;return e+(t[r]||t[e%100-r]||t[e>=100?100:null])}},week:{dow:1,doy:7}})}(n(95093))},79846:function(e,t,n){!function(e){"use strict";function t(e,t,n,r){var i={s:["viensas secunds","'iensas secunds"],ss:[e+" secunds",e+" secunds"],m:["'n míut","'iens míut"],mm:[e+" míuts",e+" míuts"],h:["'n þora","'iensa þora"],hh:[e+" þoras",e+" þoras"],d:["'n ziua","'iensa ziua"],dd:[e+" ziuas",e+" ziuas"],M:["'n mes","'iens mes"],MM:[e+" mesen",e+" mesen"],y:["'n ar","'iens ar"],yy:[e+" ars",e+" ars"]};return r||t?i[n][0]:i[n][1]}e.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(e){return"d'o"===e.toLowerCase()},meridiem:function(e,t,n){return e>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(95093))},97711:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(95093))},81765:function(e,t,n){!function(e){"use strict";e.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(95093))},48414:function(e,t,n){!function(e){"use strict";e.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(e,t){return 12===e&&(e=0),"يېرىم كېچە"===t||"سەھەر"===t||"چۈشتىن بۇرۇن"===t?e:"چۈشتىن كېيىن"===t||"كەچ"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"يېرىم كېچە":r<900?"سەھەر":r<1130?"چۈشتىن بۇرۇن":r<1230?"چۈش":r<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"-كۈنى";case"w":case"W":return e+"-ھەپتە";default:return e}},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(95093))},16618:function(e,t,n){!function(e){"use strict";function t(e,t,n){return"m"===n?t?"хвилина":"хвилину":"h"===n?t?"година":"годину":e+" "+(r=+e,i={ss:t?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:t?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:t?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"}[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2]);var r,i}function n(e){return function(){return e+"о"+(11===this.hours()?"б":"")+"] LT"}}e.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(e,t){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return!0===e?n.nominative.slice(1,7).concat(n.nominative.slice(0,1)):e?n[/(\[[ВвУу]\]) ?dddd/.test(t)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(t)?"genitive":"nominative"][e.day()]:n.nominative},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:t,m:t,mm:t,h:"годину",hh:t,d:"день",dd:t,M:"місяць",MM:t,y:"рік",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,t,n){return e<4?"ночі":e<12?"ранку":e<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(e,t){switch(t){case"M":case"d":case"DDD":case"w":case"W":return e+"-й";case"D":return e+"-го";default:return e}},week:{dow:1,doy:7}})}(n(95093))},57777:function(e,t,n){!function(e){"use strict";var t=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];e.defineLocale("ur",{months:t,monthsShort:t,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(e){return"شام"===e},meridiem:function(e,t,n){return e<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(e){return e.replace(/،/g,",")},postformat:function(e){return e.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(95093))},72475:function(e,t,n){!function(e){"use strict";e.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(95093))},57609:function(e,t,n){!function(e){"use strict";e.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(95093))},21135:function(e,t,n){!function(e){"use strict";e.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,t,n){return e<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần trước lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",w:"một tuần",ww:"%d tuần",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})}(n(95093))},64051:function(e,t,n){!function(e){"use strict";e.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1==~~(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")},week:{dow:1,doy:4}})}(n(95093))},82218:function(e,t,n){!function(e){"use strict";e.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(95093))},52648:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:function(e){return e.week()!==this.week()?"[下]dddLT":"[本]dddLT"},lastDay:"[昨天]LT",lastWeek:function(e){return this.week()!==e.week()?"[上]dddLT":"[本]dddLT"},sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s后",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",w:"1 周",ww:"%d 周",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(95093))},1632:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1200?"上午":1200===r?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},31541:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-mo",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"D/M/YYYY",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},50304:function(e,t,n){!function(e){"use strict";e.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"中午"===t?e>=11?e:e+12:"下午"===t||"晚上"===t?e+12:void 0},meridiem:function(e,t,n){var r=100*e+t;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天] LT",nextDay:"[明天] LT",nextWeek:"[下]dddd LT",lastDay:"[昨天] LT",lastWeek:"[上]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"週";default:return e}},relativeTime:{future:"%s後",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(95093))},35358:(e,t,n)=>{var r={"./af":25177,"./af.js":25177,"./ar":61509,"./ar-dz":41488,"./ar-dz.js":41488,"./ar-kw":58676,"./ar-kw.js":58676,"./ar-ly":42353,"./ar-ly.js":42353,"./ar-ma":24496,"./ar-ma.js":24496,"./ar-ps":6947,"./ar-ps.js":6947,"./ar-sa":82682,"./ar-sa.js":82682,"./ar-tn":89756,"./ar-tn.js":89756,"./ar.js":61509,"./az":95533,"./az.js":95533,"./be":28959,"./be.js":28959,"./bg":47777,"./bg.js":47777,"./bm":54903,"./bm.js":54903,"./bn":61290,"./bn-bd":17357,"./bn-bd.js":17357,"./bn.js":61290,"./bo":31545,"./bo.js":31545,"./br":11470,"./br.js":11470,"./bs":44429,"./bs.js":44429,"./ca":7306,"./ca.js":7306,"./cs":56464,"./cs.js":56464,"./cv":73635,"./cv.js":73635,"./cy":64226,"./cy.js":64226,"./da":93601,"./da.js":93601,"./de":77853,"./de-at":26111,"./de-at.js":26111,"./de-ch":54697,"./de-ch.js":54697,"./de.js":77853,"./dv":60708,"./dv.js":60708,"./el":54691,"./el.js":54691,"./en-au":53872,"./en-au.js":53872,"./en-ca":28298,"./en-ca.js":28298,"./en-gb":56195,"./en-gb.js":56195,"./en-ie":66584,"./en-ie.js":66584,"./en-il":65543,"./en-il.js":65543,"./en-in":9033,"./en-in.js":9033,"./en-nz":79402,"./en-nz.js":79402,"./en-sg":43004,"./en-sg.js":43004,"./eo":32934,"./eo.js":32934,"./es":97650,"./es-do":20838,"./es-do.js":20838,"./es-mx":17730,"./es-mx.js":17730,"./es-us":56575,"./es-us.js":56575,"./es.js":97650,"./et":3035,"./et.js":3035,"./eu":3508,"./eu.js":3508,"./fa":119,"./fa.js":119,"./fi":90527,"./fi.js":90527,"./fil":95995,"./fil.js":95995,"./fo":52477,"./fo.js":52477,"./fr":85498,"./fr-ca":26435,"./fr-ca.js":26435,"./fr-ch":37892,"./fr-ch.js":37892,"./fr.js":85498,"./fy":37071,"./fy.js":37071,"./ga":41734,"./ga.js":41734,"./gd":70217,"./gd.js":70217,"./gl":77329,"./gl.js":77329,"./gom-deva":32124,"./gom-deva.js":32124,"./gom-latn":93383,"./gom-latn.js":93383,"./gu":95050,"./gu.js":95050,"./he":11713,"./he.js":11713,"./hi":43861,"./hi.js":43861,"./hr":26308,"./hr.js":26308,"./hu":90609,"./hu.js":90609,"./hy-am":17160,"./hy-am.js":17160,"./id":74063,"./id.js":74063,"./is":89374,"./is.js":89374,"./it":88383,"./it-ch":21827,"./it-ch.js":21827,"./it.js":88383,"./ja":23827,"./ja.js":23827,"./jv":89722,"./jv.js":89722,"./ka":41794,"./ka.js":41794,"./kk":27088,"./kk.js":27088,"./km":96870,"./km.js":96870,"./kn":84451,"./kn.js":84451,"./ko":63164,"./ko.js":63164,"./ku":98174,"./ku-kmr":6181,"./ku-kmr.js":6181,"./ku.js":98174,"./ky":78474,"./ky.js":78474,"./lb":79680,"./lb.js":79680,"./lo":15867,"./lo.js":15867,"./lt":45766,"./lt.js":45766,"./lv":69532,"./lv.js":69532,"./me":58076,"./me.js":58076,"./mi":41848,"./mi.js":41848,"./mk":30306,"./mk.js":30306,"./ml":73739,"./ml.js":73739,"./mn":99053,"./mn.js":99053,"./mr":86169,"./mr.js":86169,"./ms":73386,"./ms-my":92297,"./ms-my.js":92297,"./ms.js":73386,"./mt":77075,"./mt.js":77075,"./my":72264,"./my.js":72264,"./nb":22274,"./nb.js":22274,"./ne":8235,"./ne.js":8235,"./nl":92572,"./nl-be":43784,"./nl-be.js":43784,"./nl.js":92572,"./nn":54566,"./nn.js":54566,"./oc-lnc":69330,"./oc-lnc.js":69330,"./pa-in":29849,"./pa-in.js":29849,"./pl":94418,"./pl.js":94418,"./pt":79834,"./pt-br":48303,"./pt-br.js":48303,"./pt.js":79834,"./ro":24457,"./ro.js":24457,"./ru":82271,"./ru.js":82271,"./sd":1221,"./sd.js":1221,"./se":33478,"./se.js":33478,"./si":17538,"./si.js":17538,"./sk":5784,"./sk.js":5784,"./sl":46637,"./sl.js":46637,"./sq":86794,"./sq.js":86794,"./sr":45719,"./sr-cyrl":3322,"./sr-cyrl.js":3322,"./sr.js":45719,"./ss":56e3,"./ss.js":56e3,"./sv":41011,"./sv.js":41011,"./sw":40748,"./sw.js":40748,"./ta":11025,"./ta.js":11025,"./te":11885,"./te.js":11885,"./tet":28861,"./tet.js":28861,"./tg":86571,"./tg.js":86571,"./th":55802,"./th.js":55802,"./tk":59527,"./tk.js":59527,"./tl-ph":29231,"./tl-ph.js":29231,"./tlh":31052,"./tlh.js":31052,"./tr":85096,"./tr.js":85096,"./tzl":79846,"./tzl.js":79846,"./tzm":81765,"./tzm-latn":97711,"./tzm-latn.js":97711,"./tzm.js":81765,"./ug-cn":48414,"./ug-cn.js":48414,"./uk":16618,"./uk.js":16618,"./ur":57777,"./ur.js":57777,"./uz":57609,"./uz-latn":72475,"./uz-latn.js":72475,"./uz.js":57609,"./vi":21135,"./vi.js":21135,"./x-pseudo":64051,"./x-pseudo.js":64051,"./yo":82218,"./yo.js":82218,"./zh-cn":52648,"./zh-cn.js":52648,"./zh-hk":1632,"./zh-hk.js":1632,"./zh-mo":31541,"./zh-mo.js":31541,"./zh-tw":50304,"./zh-tw.js":50304};function i(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}i.keys=function(){return Object.keys(r)},i.resolve=o,e.exports=i,i.id=35358},95093:function(e,t,n){(e=n.nmd(e)).exports=function(){"use strict";var t,r;function i(){return t.apply(null,arguments)}function o(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function l(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var t;for(t in e)if(a(e,t))return!1;return!0}function c(e){return void 0===e}function u(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function h(e,t){var n,r=[],i=e.length;for(n=0;n>>0;for(t=0;t0)for(n=0;n=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var L=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,A=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,I={},P={};function N(e,t,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),e&&(P[e]=i),t&&(P[t[0]]=function(){return O(i.apply(this,arguments),t[1],t[2])}),n&&(P[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),e)})}function H(e,t){return e.isValid()?(t=j(t,e.localeData()),I[t]=I[t]||function(e){var t,n,r,i=e.match(L);for(t=0,n=i.length;t=0&&A.test(e);)e=e.replace(A,r),A.lastIndex=0,n-=1;return e}var U={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function F(e){return"string"==typeof e?U[e]||U[e.toLowerCase()]:void 0}function Y(e){var t,n,r={};for(n in e)a(e,n)&&(t=F(n))&&(r[t]=e[n]);return r}var W={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var B,V=/\d/,z=/\d\d/,$=/\d{3}/,G=/\d{4}/,q=/[+-]?\d{6}/,X=/\d\d?/,K=/\d\d\d\d?/,J=/\d\d\d\d\d\d?/,Z=/\d{1,3}/,Q=/\d{1,4}/,ee=/[+-]?\d{1,6}/,te=/\d+/,ne=/[+-]?\d+/,re=/Z|[+-]\d\d:?\d\d/gi,ie=/Z|[+-]\d\d(?::?\d\d)?/gi,oe=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,se=/^[1-9]\d?/,ae=/^([1-9]\d|\d)/;function le(e,t,n){B[e]=D(t)?t:function(e,r){return e&&n?n:t}}function ce(e,t){return a(B,e)?B[e](t._strict,t._locale):new RegExp(ue(e.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(e,t,n,r,i){return t||n||r||i}))))}function ue(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function de(e){return e<0?Math.ceil(e)||0:Math.floor(e)}function he(e){var t=+e,n=0;return 0!==t&&isFinite(t)&&(n=de(t)),n}B={};var fe={};function pe(e,t){var n,r,i=t;for("string"==typeof e&&(e=[e]),u(t)&&(i=function(e,n){n[t]=he(e)}),r=e.length,n=0;n68?1900:2e3)};var De,ke=Re("FullYear",!0);function Re(e,t){return function(n){return null!=n?(Le(this,e,n),i.updateOffset(this,t),this):Oe(this,e)}}function Oe(e,t){if(!e.isValid())return NaN;var n=e._d,r=e._isUTC;switch(t){case"Milliseconds":return r?n.getUTCMilliseconds():n.getMilliseconds();case"Seconds":return r?n.getUTCSeconds():n.getSeconds();case"Minutes":return r?n.getUTCMinutes():n.getMinutes();case"Hours":return r?n.getUTCHours():n.getHours();case"Date":return r?n.getUTCDate():n.getDate();case"Day":return r?n.getUTCDay():n.getDay();case"Month":return r?n.getUTCMonth():n.getMonth();case"FullYear":return r?n.getUTCFullYear():n.getFullYear();default:return NaN}}function Le(e,t,n){var r,i,o,s,a;if(e.isValid()&&!isNaN(n)){switch(r=e._d,i=e._isUTC,t){case"Milliseconds":return void(i?r.setUTCMilliseconds(n):r.setMilliseconds(n));case"Seconds":return void(i?r.setUTCSeconds(n):r.setSeconds(n));case"Minutes":return void(i?r.setUTCMinutes(n):r.setMinutes(n));case"Hours":return void(i?r.setUTCHours(n):r.setHours(n));case"Date":return void(i?r.setUTCDate(n):r.setDate(n));case"FullYear":break;default:return}o=n,s=e.month(),a=29!==(a=e.date())||1!==s||ye(o)?a:28,i?r.setUTCFullYear(o,s,a):r.setFullYear(o,s,a)}}function Ae(e,t){if(isNaN(e)||isNaN(t))return NaN;var n,r=(t%(n=12)+n)%n;return e+=(t-r)/12,1===r?ye(e)?29:28:31-r%7%2}De=Array.prototype.indexOf?Array.prototype.indexOf:function(e){var t;for(t=0;t=0?(a=new Date(e+400,t,n,r,i,o,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,i,o,s),a}function Ve(e){var t,n;return e<100&&e>=0?((n=Array.prototype.slice.call(arguments))[0]=e+400,t=new Date(Date.UTC.apply(null,n)),isFinite(t.getUTCFullYear())&&t.setUTCFullYear(e)):t=new Date(Date.UTC.apply(null,arguments)),t}function ze(e,t,n){var r=7+t-n;return-(7+Ve(e,0,r).getUTCDay()-t)%7+r-1}function $e(e,t,n,r,i){var o,s,a=1+7*(t-1)+(7+n-r)%7+ze(e,r,i);return a<=0?s=Ee(o=e-1)+a:a>Ee(e)?(o=e+1,s=a-Ee(e)):(o=e,s=a),{year:o,dayOfYear:s}}function Ge(e,t,n){var r,i,o=ze(e.year(),t,n),s=Math.floor((e.dayOfYear()-o-1)/7)+1;return s<1?r=s+qe(i=e.year()-1,t,n):s>qe(e.year(),t,n)?(r=s-qe(e.year(),t,n),i=e.year()+1):(i=e.year(),r=s),{week:r,year:i}}function qe(e,t,n){var r=ze(e,t,n),i=ze(e+1,t,n);return(Ee(e)-r+i)/7}N("w",["ww",2],"wo","week"),N("W",["WW",2],"Wo","isoWeek"),le("w",X,se),le("ww",X,z),le("W",X,se),le("WW",X,z),me(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=he(e)}));function Xe(e,t){return e.slice(t,7).concat(e.slice(0,t))}N("d",0,"do","day"),N("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),N("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),N("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),N("e",0,0,"weekday"),N("E",0,0,"isoWeekday"),le("d",X),le("e",X),le("E",X),le("dd",(function(e,t){return t.weekdaysMinRegex(e)})),le("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),le("dddd",(function(e,t){return t.weekdaysRegex(e)})),me(["dd","ddd","dddd"],(function(e,t,n,r){var i=n._locale.weekdaysParse(e,r,n._strict);null!=i?t.d=i:m(n).invalidWeekday=e})),me(["d","e","E"],(function(e,t,n,r){t[r]=he(e)}));var Ke="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Je="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ze="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Qe=oe,et=oe,tt=oe;function nt(e,t,n){var r,i,o,s=e.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)o=p([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(o,"").toLocaleLowerCase();return n?"dddd"===t?-1!==(i=De.call(this._weekdaysParse,s))?i:null:"ddd"===t?-1!==(i=De.call(this._shortWeekdaysParse,s))?i:null:-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:"dddd"===t?-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._shortWeekdaysParse,s))||-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:"ddd"===t?-1!==(i=De.call(this._shortWeekdaysParse,s))||-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._minWeekdaysParse,s))?i:null:-1!==(i=De.call(this._minWeekdaysParse,s))||-1!==(i=De.call(this._weekdaysParse,s))||-1!==(i=De.call(this._shortWeekdaysParse,s))?i:null}function rt(){function e(e,t){return t.length-e.length}var t,n,r,i,o,s=[],a=[],l=[],c=[];for(t=0;t<7;t++)n=p([2e3,1]).day(t),r=ue(this.weekdaysMin(n,"")),i=ue(this.weekdaysShort(n,"")),o=ue(this.weekdays(n,"")),s.push(r),a.push(i),l.push(o),c.push(r),c.push(i),c.push(o);s.sort(e),a.sort(e),l.sort(e),c.sort(e),this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function it(){return this.hours()%12||12}function ot(e,t){N(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function st(e,t){return t._meridiemParse}N("H",["HH",2],0,"hour"),N("h",["hh",2],0,it),N("k",["kk",2],0,(function(){return this.hours()||24})),N("hmm",0,0,(function(){return""+it.apply(this)+O(this.minutes(),2)})),N("hmmss",0,0,(function(){return""+it.apply(this)+O(this.minutes(),2)+O(this.seconds(),2)})),N("Hmm",0,0,(function(){return""+this.hours()+O(this.minutes(),2)})),N("Hmmss",0,0,(function(){return""+this.hours()+O(this.minutes(),2)+O(this.seconds(),2)})),ot("a",!0),ot("A",!1),le("a",st),le("A",st),le("H",X,ae),le("h",X,se),le("k",X,se),le("HH",X,z),le("hh",X,z),le("kk",X,z),le("hmm",K),le("hmmss",J),le("Hmm",K),le("Hmmss",J),pe(["H","HH"],we),pe(["k","kk"],(function(e,t,n){var r=he(e);t[we]=24===r?0:r})),pe(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),pe(["h","hh"],(function(e,t,n){t[we]=he(e),m(n).bigHour=!0})),pe("hmm",(function(e,t,n){var r=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r)),m(n).bigHour=!0})),pe("hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r,2)),t[Se]=he(e.substr(i)),m(n).bigHour=!0})),pe("Hmm",(function(e,t,n){var r=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r))})),pe("Hmmss",(function(e,t,n){var r=e.length-4,i=e.length-2;t[we]=he(e.substr(0,r)),t[xe]=he(e.substr(r,2)),t[Se]=he(e.substr(i))}));var at=Re("Hours",!0);var lt,ct={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Ie,monthsShort:Pe,week:{dow:0,doy:6},weekdays:Ke,weekdaysMin:Ze,weekdaysShort:Je,meridiemParse:/[ap]\.?m?\.?/i},ut={},dt={};function ht(e,t){var n,r=Math.min(e.length,t.length);for(n=0;n0;){if(r=pt(i.slice(0,t).join("-")))return r;if(n&&n.length>=t&&ht(i,n)>=t-1)break;t--}o++}return lt}(e)}function bt(e){var t,n=e._a;return n&&-2===m(e).overflow&&(t=n[_e]<0||n[_e]>11?_e:n[ve]<1||n[ve]>Ae(n[be],n[_e])?ve:n[we]<0||n[we]>24||24===n[we]&&(0!==n[xe]||0!==n[Se]||0!==n[Ce])?we:n[xe]<0||n[xe]>59?xe:n[Se]<0||n[Se]>59?Se:n[Ce]<0||n[Ce]>999?Ce:-1,m(e)._overflowDayOfYear&&(tve)&&(t=ve),m(e)._overflowWeeks&&-1===t&&(t=Me),m(e)._overflowWeekday&&-1===t&&(t=Te),m(e).overflow=t),e}var _t=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,vt=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,wt=/Z|[+-]\d\d(?::?\d\d)?/,xt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],St=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Ct=/^\/?Date\((-?\d+)/i,Mt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Tt={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Et(e){var t,n,r,i,o,s,a=e._i,l=_t.exec(a)||vt.exec(a),c=xt.length,u=St.length;if(l){for(m(e).iso=!0,t=0,n=c;t7)&&(l=!0)):(o=e._locale._week.dow,s=e._locale._week.doy,c=Ge(Pt(),o,s),n=Rt(t.gg,e._a[be],c.year),r=Rt(t.w,c.week),null!=t.d?((i=t.d)<0||i>6)&&(l=!0):null!=t.e?(i=t.e+o,(t.e<0||t.e>6)&&(l=!0)):i=o),r<1||r>qe(n,o,s)?m(e)._overflowWeeks=!0:null!=l?m(e)._overflowWeekday=!0:(a=$e(n,r,i,o,s),e._a[be]=a.year,e._dayOfYear=a.dayOfYear)}(e),null!=e._dayOfYear&&(s=Rt(e._a[be],r[be]),(e._dayOfYear>Ee(s)||0===e._dayOfYear)&&(m(e)._overflowDayOfYear=!0),n=Ve(s,0,e._dayOfYear),e._a[_e]=n.getUTCMonth(),e._a[ve]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[we]&&0===e._a[xe]&&0===e._a[Se]&&0===e._a[Ce]&&(e._nextDay=!0,e._a[we]=0),e._d=(e._useUTC?Ve:Be).apply(null,a),o=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[we]=24),e._w&&void 0!==e._w.d&&e._w.d!==o&&(m(e).weekdayMismatch=!0)}}function Lt(e){if(e._f!==i.ISO_8601)if(e._f!==i.RFC_2822){e._a=[],m(e).empty=!0;var t,n,r,o,s,a,l,c=""+e._i,u=c.length,d=0;for(l=(r=j(e._f,e._locale).match(L)||[]).length,t=0;t0&&m(e).unusedInput.push(s),c=c.slice(c.indexOf(n)+n.length),d+=n.length),P[o]?(n?m(e).empty=!1:m(e).unusedTokens.push(o),ge(o,n,e)):e._strict&&!n&&m(e).unusedTokens.push(o);m(e).charsLeftOver=u-d,c.length>0&&m(e).unusedInput.push(c),e._a[we]<=12&&!0===m(e).bigHour&&e._a[we]>0&&(m(e).bigHour=void 0),m(e).parsedDateParts=e._a.slice(0),m(e).meridiem=e._meridiem,e._a[we]=function(e,t,n){var r;return null==n?t:null!=e.meridiemHour?e.meridiemHour(t,n):null!=e.isPM?((r=e.isPM(n))&&t<12&&(t+=12),r||12!==t||(t=0),t):t}(e._locale,e._a[we],e._meridiem),null!==(a=m(e).era)&&(e._a[be]=e._locale.erasConvertYear(a,e._a[be])),Ot(e),bt(e)}else kt(e);else Et(e)}function At(e){var t=e._i,n=e._f;return e._locale=e._locale||yt(e._l),null===t||void 0===n&&""===t?y({nullInput:!0}):("string"==typeof t&&(e._i=t=e._locale.preparse(t)),x(t)?new w(bt(t)):(d(t)?e._d=t:o(n)?function(e){var t,n,r,i,o,s,a=!1,l=e._f.length;if(0===l)return m(e).invalidFormat=!0,void(e._d=new Date(NaN));for(i=0;ithis?this:e:y()}));function jt(e,t){var n,r;if(1===t.length&&o(t[0])&&(t=t[0]),!t.length)return Pt();for(n=t[0],r=1;r=0?new Date(e+400,t,n)-pn:new Date(e,t,n).valueOf()}function yn(e,t,n){return e<100&&e>=0?Date.UTC(e+400,t,n)-pn:Date.UTC(e,t,n)}function bn(e,t){return t.erasAbbrRegex(e)}function _n(){var e,t,n,r,i,o=[],s=[],a=[],l=[],c=this.eras();for(e=0,t=c.length;e(o=qe(e,r,i))&&(t=o),xn.call(this,e,t,n,r,i))}function xn(e,t,n,r,i){var o=$e(e,t,n,r,i),s=Ve(o.year,0,o.dayOfYear);return this.year(s.getUTCFullYear()),this.month(s.getUTCMonth()),this.date(s.getUTCDate()),this}N("N",0,0,"eraAbbr"),N("NN",0,0,"eraAbbr"),N("NNN",0,0,"eraAbbr"),N("NNNN",0,0,"eraName"),N("NNNNN",0,0,"eraNarrow"),N("y",["y",1],"yo","eraYear"),N("y",["yy",2],0,"eraYear"),N("y",["yyy",3],0,"eraYear"),N("y",["yyyy",4],0,"eraYear"),le("N",bn),le("NN",bn),le("NNN",bn),le("NNNN",(function(e,t){return t.erasNameRegex(e)})),le("NNNNN",(function(e,t){return t.erasNarrowRegex(e)})),pe(["N","NN","NNN","NNNN","NNNNN"],(function(e,t,n,r){var i=n._locale.erasParse(e,r,n._strict);i?m(n).era=i:m(n).invalidEra=e})),le("y",te),le("yy",te),le("yyy",te),le("yyyy",te),le("yo",(function(e,t){return t._eraYearOrdinalRegex||te})),pe(["y","yy","yyy","yyyy"],be),pe(["yo"],(function(e,t,n,r){var i;n._locale._eraYearOrdinalRegex&&(i=e.match(n._locale._eraYearOrdinalRegex)),n._locale.eraYearOrdinalParse?t[be]=n._locale.eraYearOrdinalParse(e,i):t[be]=parseInt(e,10)})),N(0,["gg",2],0,(function(){return this.weekYear()%100})),N(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),vn("gggg","weekYear"),vn("ggggg","weekYear"),vn("GGGG","isoWeekYear"),vn("GGGGG","isoWeekYear"),le("G",ne),le("g",ne),le("GG",X,z),le("gg",X,z),le("GGGG",Q,G),le("gggg",Q,G),le("GGGGG",ee,q),le("ggggg",ee,q),me(["gggg","ggggg","GGGG","GGGGG"],(function(e,t,n,r){t[r.substr(0,2)]=he(e)})),me(["gg","GG"],(function(e,t,n,r){t[r]=i.parseTwoDigitYear(e)})),N("Q",0,"Qo","quarter"),le("Q",V),pe("Q",(function(e,t){t[_e]=3*(he(e)-1)})),N("D",["DD",2],"Do","date"),le("D",X,se),le("DD",X,z),le("Do",(function(e,t){return e?t._dayOfMonthOrdinalParse||t._ordinalParse:t._dayOfMonthOrdinalParseLenient})),pe(["D","DD"],ve),pe("Do",(function(e,t){t[ve]=he(e.match(X)[0])}));var Sn=Re("Date",!0);N("DDD",["DDDD",3],"DDDo","dayOfYear"),le("DDD",Z),le("DDDD",$),pe(["DDD","DDDD"],(function(e,t,n){n._dayOfYear=he(e)})),N("m",["mm",2],0,"minute"),le("m",X,ae),le("mm",X,z),pe(["m","mm"],xe);var Cn=Re("Minutes",!1);N("s",["ss",2],0,"second"),le("s",X,ae),le("ss",X,z),pe(["s","ss"],Se);var Mn,Tn,En=Re("Seconds",!1);for(N("S",0,0,(function(){return~~(this.millisecond()/100)})),N(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),N(0,["SSS",3],0,"millisecond"),N(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),N(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),N(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),N(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),N(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),N(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),le("S",Z,V),le("SS",Z,z),le("SSS",Z,$),Mn="SSSS";Mn.length<=9;Mn+="S")le(Mn,te);function Dn(e,t){t[Ce]=he(1e3*("0."+e))}for(Mn="S";Mn.length<=9;Mn+="S")pe(Mn,Dn);Tn=Re("Milliseconds",!1),N("z",0,0,"zoneAbbr"),N("zz",0,0,"zoneName");var kn=w.prototype;function Rn(e){return e}kn.add=nn,kn.calendar=function(e,t){1===arguments.length&&(arguments[0]?sn(arguments[0])?(e=arguments[0],t=void 0):function(e){var t,n=s(e)&&!l(e),r=!1,i=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(t=0;tn.valueOf():n.valueOf()9999?H(n,t?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):D(Date.prototype.toISOString)?t?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(n,"Z")):H(n,t?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},kn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var e,t,n,r="moment",i="";return this.isLocal()||(r=0===this.utcOffset()?"moment.utc":"moment.parseZone",i="Z"),e="["+r+'("]',t=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY","-MM-DD[T]HH:mm:ss.SSS",n=i+'[")]',this.format(e+t+"-MM-DD[T]HH:mm:ss.SSS"+n)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(kn[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),kn.toJSON=function(){return this.isValid()?this.toISOString():null},kn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},kn.unix=function(){return Math.floor(this.valueOf()/1e3)},kn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},kn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},kn.eraName=function(){var e,t,n,r=this.localeData().eras();for(e=0,t=r.length;ethis.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},kn.isLocal=function(){return!!this.isValid()&&!this._isUTC},kn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},kn.isUtc=qt,kn.isUTC=qt,kn.zoneAbbr=function(){return this._isUTC?"UTC":""},kn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},kn.dates=C("dates accessor is deprecated. Use date instead.",Sn),kn.months=C("months accessor is deprecated. Use month instead",Ye),kn.years=C("years accessor is deprecated. Use year instead",ke),kn.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),kn.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var e,t={};return v(t,this),(t=At(t))._a?(e=t._isUTC?p(t._a):Pt(t._a),this._isDSTShifted=this.isValid()&&function(e,t,n){var r,i=Math.min(e.length,t.length),o=Math.abs(e.length-t.length),s=0;for(r=0;r0):this._isDSTShifted=!1,this._isDSTShifted}));var On=R.prototype;function Ln(e,t,n,r){var i=yt(),o=p().set(r,t);return i[n](o,e)}function An(e,t,n){if(u(e)&&(t=e,e=void 0),e=e||"",null!=t)return Ln(e,t,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=Ln(e,r,n,"month");return i}function In(e,t,n,r){"boolean"==typeof e?(u(t)&&(n=t,t=void 0),t=t||""):(n=t=e,e=!1,u(t)&&(n=t,t=void 0),t=t||"");var i,o=yt(),s=e?o._week.dow:0,a=[];if(null!=n)return Ln(t,(n+s)%7,r,"day");for(i=0;i<7;i++)a[i]=Ln(t,(i+s)%7,r,"day");return a}On.calendar=function(e,t,n){var r=this._calendar[e]||this._calendar.sameElse;return D(r)?r.call(t,n):r},On.longDateFormat=function(e){var t=this._longDateFormat[e],n=this._longDateFormat[e.toUpperCase()];return t||!n?t:(this._longDateFormat[e]=n.match(L).map((function(e){return"MMMM"===e||"MM"===e||"DD"===e||"dddd"===e?e.slice(1):e})).join(""),this._longDateFormat[e])},On.invalidDate=function(){return this._invalidDate},On.ordinal=function(e){return this._ordinal.replace("%d",e)},On.preparse=Rn,On.postformat=Rn,On.relativeTime=function(e,t,n,r){var i=this._relativeTime[n];return D(i)?i(e,t,n,r):i.replace(/%d/i,e)},On.pastFuture=function(e,t){var n=this._relativeTime[e>0?"future":"past"];return D(n)?n(t):n.replace(/%s/i,t)},On.set=function(e){var t,n;for(n in e)a(e,n)&&(D(t=e[n])?this[n]=t:this["_"+n]=t);this._config=e,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},On.eras=function(e,t){var n,r,o,s=this._eras||yt("en")._eras;for(n=0,r=s.length;n=0)return l[r]},On.erasConvertYear=function(e,t){var n=e.since<=e.until?1:-1;return void 0===t?i(e.since).year():i(e.since).year()+(t-e.offset)*n},On.erasAbbrRegex=function(e){return a(this,"_erasAbbrRegex")||_n.call(this),e?this._erasAbbrRegex:this._erasRegex},On.erasNameRegex=function(e){return a(this,"_erasNameRegex")||_n.call(this),e?this._erasNameRegex:this._erasRegex},On.erasNarrowRegex=function(e){return a(this,"_erasNarrowRegex")||_n.call(this),e?this._erasNarrowRegex:this._erasRegex},On.months=function(e,t){return e?o(this._months)?this._months[e.month()]:this._months[(this._months.isFormat||Ne).test(t)?"format":"standalone"][e.month()]:o(this._months)?this._months:this._months.standalone},On.monthsShort=function(e,t){return e?o(this._monthsShort)?this._monthsShort[e.month()]:this._monthsShort[Ne.test(t)?"format":"standalone"][e.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},On.monthsParse=function(e,t,n){var r,i,o;if(this._monthsParseExact)return Ue.call(this,e,t,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=p([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(o="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(o.replace(".",""),"i")),n&&"MMMM"===t&&this._longMonthsParse[r].test(e))return r;if(n&&"MMM"===t&&this._shortMonthsParse[r].test(e))return r;if(!n&&this._monthsParse[r].test(e))return r}},On.monthsRegex=function(e){return this._monthsParseExact?(a(this,"_monthsRegex")||We.call(this),e?this._monthsStrictRegex:this._monthsRegex):(a(this,"_monthsRegex")||(this._monthsRegex=je),this._monthsStrictRegex&&e?this._monthsStrictRegex:this._monthsRegex)},On.monthsShortRegex=function(e){return this._monthsParseExact?(a(this,"_monthsRegex")||We.call(this),e?this._monthsShortStrictRegex:this._monthsShortRegex):(a(this,"_monthsShortRegex")||(this._monthsShortRegex=He),this._monthsShortStrictRegex&&e?this._monthsShortStrictRegex:this._monthsShortRegex)},On.week=function(e){return Ge(e,this._week.dow,this._week.doy).week},On.firstDayOfYear=function(){return this._week.doy},On.firstDayOfWeek=function(){return this._week.dow},On.weekdays=function(e,t){var n=o(this._weekdays)?this._weekdays:this._weekdays[e&&!0!==e&&this._weekdays.isFormat.test(t)?"format":"standalone"];return!0===e?Xe(n,this._week.dow):e?n[e.day()]:n},On.weekdaysMin=function(e){return!0===e?Xe(this._weekdaysMin,this._week.dow):e?this._weekdaysMin[e.day()]:this._weekdaysMin},On.weekdaysShort=function(e){return!0===e?Xe(this._weekdaysShort,this._week.dow):e?this._weekdaysShort[e.day()]:this._weekdaysShort},On.weekdaysParse=function(e,t,n){var r,i,o;if(this._weekdaysParseExact)return nt.call(this,e,t,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=p([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[r]||(o="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(o.replace(".",""),"i")),n&&"dddd"===t&&this._fullWeekdaysParse[r].test(e))return r;if(n&&"ddd"===t&&this._shortWeekdaysParse[r].test(e))return r;if(n&&"dd"===t&&this._minWeekdaysParse[r].test(e))return r;if(!n&&this._weekdaysParse[r].test(e))return r}},On.weekdaysRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysStrictRegex:this._weekdaysRegex):(a(this,"_weekdaysRegex")||(this._weekdaysRegex=Qe),this._weekdaysStrictRegex&&e?this._weekdaysStrictRegex:this._weekdaysRegex)},On.weekdaysShortRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(a(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=et),this._weekdaysShortStrictRegex&&e?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},On.weekdaysMinRegex=function(e){return this._weekdaysParseExact?(a(this,"_weekdaysRegex")||rt.call(this),e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(a(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=tt),this._weekdaysMinStrictRegex&&e?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},On.isPM=function(e){return"p"===(e+"").toLowerCase().charAt(0)},On.meridiem=function(e,t,n){return e>11?n?"pm":"PM":n?"am":"AM"},mt("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(e){var t=e%10;return e+(1===he(e%100/10)?"th":1===t?"st":2===t?"nd":3===t?"rd":"th")}}),i.lang=C("moment.lang is deprecated. Use moment.locale instead.",mt),i.langData=C("moment.langData is deprecated. Use moment.localeData instead.",yt);var Pn=Math.abs;function Nn(e,t,n,r){var i=Jt(t,n);return e._milliseconds+=r*i._milliseconds,e._days+=r*i._days,e._months+=r*i._months,e._bubble()}function Hn(e){return e<0?Math.floor(e):Math.ceil(e)}function jn(e){return 4800*e/146097}function Un(e){return 146097*e/4800}function Fn(e){return function(){return this.as(e)}}var Yn=Fn("ms"),Wn=Fn("s"),Bn=Fn("m"),Vn=Fn("h"),zn=Fn("d"),$n=Fn("w"),Gn=Fn("M"),qn=Fn("Q"),Xn=Fn("y"),Kn=Yn;function Jn(e){return function(){return this.isValid()?this._data[e]:NaN}}var Zn=Jn("milliseconds"),Qn=Jn("seconds"),er=Jn("minutes"),tr=Jn("hours"),nr=Jn("days"),rr=Jn("months"),ir=Jn("years");var or=Math.round,sr={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ar(e,t,n,r,i){return i.relativeTime(t||1,!!n,e,r)}var lr=Math.abs;function cr(e){return(e>0)-(e<0)||+e}function ur(){if(!this.isValid())return this.localeData().invalidDate();var e,t,n,r,i,o,s,a,l=lr(this._milliseconds)/1e3,c=lr(this._days),u=lr(this._months),d=this.asSeconds();return d?(e=de(l/60),t=de(e/60),l%=60,e%=60,n=de(u/12),u%=12,r=l?l.toFixed(3).replace(/\.?0+$/,""):"",i=d<0?"-":"",o=cr(this._months)!==cr(d)?"-":"",s=cr(this._days)!==cr(d)?"-":"",a=cr(this._milliseconds)!==cr(d)?"-":"",i+"P"+(n?o+n+"Y":"")+(u?o+u+"M":"")+(c?s+c+"D":"")+(t||e||l?"T":"")+(t?a+t+"H":"")+(e?a+e+"M":"")+(l?a+r+"S":"")):"P0D"}var dr=Ft.prototype;return dr.isValid=function(){return this._isValid},dr.abs=function(){var e=this._data;return this._milliseconds=Pn(this._milliseconds),this._days=Pn(this._days),this._months=Pn(this._months),e.milliseconds=Pn(e.milliseconds),e.seconds=Pn(e.seconds),e.minutes=Pn(e.minutes),e.hours=Pn(e.hours),e.months=Pn(e.months),e.years=Pn(e.years),this},dr.add=function(e,t){return Nn(this,e,t,1)},dr.subtract=function(e,t){return Nn(this,e,t,-1)},dr.as=function(e){if(!this.isValid())return NaN;var t,n,r=this._milliseconds;if("month"===(e=F(e))||"quarter"===e||"year"===e)switch(t=this._days+r/864e5,n=this._months+jn(t),e){case"month":return n;case"quarter":return n/3;case"year":return n/12}else switch(t=this._days+Math.round(Un(this._months)),e){case"week":return t/7+r/6048e5;case"day":return t+r/864e5;case"hour":return 24*t+r/36e5;case"minute":return 1440*t+r/6e4;case"second":return 86400*t+r/1e3;case"millisecond":return Math.floor(864e5*t)+r;default:throw new Error("Unknown unit "+e)}},dr.asMilliseconds=Yn,dr.asSeconds=Wn,dr.asMinutes=Bn,dr.asHours=Vn,dr.asDays=zn,dr.asWeeks=$n,dr.asMonths=Gn,dr.asQuarters=qn,dr.asYears=Xn,dr.valueOf=Kn,dr._bubble=function(){var e,t,n,r,i,o=this._milliseconds,s=this._days,a=this._months,l=this._data;return o>=0&&s>=0&&a>=0||o<=0&&s<=0&&a<=0||(o+=864e5*Hn(Un(a)+s),s=0,a=0),l.milliseconds=o%1e3,e=de(o/1e3),l.seconds=e%60,t=de(e/60),l.minutes=t%60,n=de(t/60),l.hours=n%24,s+=de(n/24),a+=i=de(jn(s)),s-=Hn(Un(i)),r=de(a/12),a%=12,l.days=s,l.months=a,l.years=r,this},dr.clone=function(){return Jt(this)},dr.get=function(e){return e=F(e),this.isValid()?this[e+"s"]():NaN},dr.milliseconds=Zn,dr.seconds=Qn,dr.minutes=er,dr.hours=tr,dr.days=nr,dr.weeks=function(){return de(this.days()/7)},dr.months=rr,dr.years=ir,dr.humanize=function(e,t){if(!this.isValid())return this.localeData().invalidDate();var n,r,i=!1,o=sr;return"object"==typeof e&&(t=e,e=!1),"boolean"==typeof e&&(i=e),"object"==typeof t&&(o=Object.assign({},sr,t),null!=t.s&&null==t.ss&&(o.ss=t.s-1)),r=function(e,t,n,r){var i=Jt(e).abs(),o=or(i.as("s")),s=or(i.as("m")),a=or(i.as("h")),l=or(i.as("d")),c=or(i.as("M")),u=or(i.as("w")),d=or(i.as("y")),h=o<=n.ss&&["s",o]||o0,h[4]=r,ar.apply(null,h)}(this,!i,o,n=this.localeData()),i&&(r=n.pastFuture(+this,r)),n.postformat(r)},dr.toISOString=ur,dr.toString=ur,dr.toJSON=ur,dr.locale=ln,dr.localeData=un,dr.toIsoString=C("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ur),dr.lang=cn,N("X",0,0,"unix"),N("x",0,0,"valueOf"),le("x",ne),le("X",/[+-]?\d+(\.\d{1,3})?/),pe("X",(function(e,t,n){n._d=new Date(1e3*parseFloat(e))})),pe("x",(function(e,t,n){n._d=new Date(he(e))})),i.version="2.30.1",t=Pt,i.fn=kn,i.min=function(){return jt("isBefore",[].slice.call(arguments,0))},i.max=function(){return jt("isAfter",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=p,i.unix=function(e){return Pt(1e3*e)},i.months=function(e,t){return An(e,t,"months")},i.isDate=d,i.locale=mt,i.invalid=y,i.duration=Jt,i.isMoment=x,i.weekdays=function(e,t,n){return In(e,t,n,"weekdays")},i.parseZone=function(){return Pt.apply(null,arguments).parseZone()},i.localeData=yt,i.isDuration=Yt,i.monthsShort=function(e,t){return An(e,t,"monthsShort")},i.weekdaysMin=function(e,t,n){return In(e,t,n,"weekdaysMin")},i.defineLocale=gt,i.updateLocale=function(e,t){if(null!=t){var n,r,i=ct;null!=ut[e]&&null!=ut[e].parentLocale?ut[e].set(k(ut[e]._config,t)):(null!=(r=pt(e))&&(i=r._config),t=k(i,t),null==r&&(t.abbr=e),(n=new R(t)).parentLocale=ut[e],ut[e]=n),mt(e)}else null!=ut[e]&&(null!=ut[e].parentLocale?(ut[e]=ut[e].parentLocale,e===mt()&&mt(e)):null!=ut[e]&&delete ut[e]);return ut[e]},i.locales=function(){return M(ut)},i.weekdaysShort=function(e,t,n){return In(e,t,n,"weekdaysShort")},i.normalizeUnits=F,i.relativeTimeRounding=function(e){return void 0===e?or:"function"==typeof e&&(or=e,!0)},i.relativeTimeThreshold=function(e,t){return void 0!==sr[e]&&(void 0===t?sr[e]:(sr[e]=t,"s"===e&&(sr.ss=t-1),!0))},i.calendarFormat=function(e,t){var n=e.diff(t,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=kn,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},i}()},28646:e=>{e.exports=function e(t,n,r){function i(s,a){if(!n[s]){if(!t[s]){if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,(function(e){return i(t[s][1][e]||e)}),c,c.exports,e,t,n,r)}return n[s].exports}for(var o=void 0,s=0;so[s]^n?1:-1;return l==c?0:c(r=e.length)){for(i=n,t-=r;--t;i+=n);e+=i}else tH?e.c=e.e=null:e.c=n=g.length){if(!r)break e;for(;g.length<=p;g.push(0));f=m=0,u=(a%=c)-c+(s=1)}else{for(f=h=g[p],s=1;10<=h;h/=10,s++);m=(u=(a%=c)-c+s)<0?0:f/y[s-u-1]%10|0}if(r=r||t<0||null!=g[p+1]||(u<0?f:f%y[s-u-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):5H?e.c=e.e=null:e.e>>11))?(n=crypto.getRandomValues(new Uint32Array(2)),t[u]=n[0],t[u+1]=n[1]):(h.push(l%1e14),u+=2);u=a/2}else{if(!crypto.randomBytes)throw j=!1,Error(s+"crypto unavailable");for(t=crypto.randomBytes(a*=7);un-1&&(null==s[i+1]&&(s[i+1]=0),s[i+1]+=s[i]/n|0,s[i]%=n)}return s.reverse()}return function(r,i,o,s,a){var l,c,u,d,h,f,p,g,y=r.indexOf("."),b=L,_=A;for(0<=y&&(d=F,F=0,r=r.replace(".",""),f=(g=new B(i)).pow(r.length-y),F=d,g.c=t(v(m(f.c),f.e,"0"),10,o,e),g.e=g.c.length),u=d=(p=t(r,i,o,a?(l=W,e):(l=e,W))).length;0==p[--d];p.pop());if(!p[0])return l.charAt(0);if(y<0?--u:(f.c=p,f.e=u,f.s=s,p=(f=n(f,g,b,_,o)).c,h=f.r,u=f.e),y=p[c=u+b+1],d=o/2,h=h||c<0||null!=p[c+1],h=_<4?(null!=y||h)&&(0==_||_==(f.s<0?3:2)):do;)p[c]=0,c||(++u,p=[1].concat(p));for(d=p.length;!p[--d];);for(y=0,r="";y<=d;r+=l.charAt(p[y++]));r=v(r,u,l.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,i,o,s,a=0,l=e.length,c=t%h,u=t/h|0;for(e=e.slice();l--;)a=((i=c*(o=e[l]%h)+(r=u*o+(s=e[l]/h|0)*c)%h*h+a)/n|0)+(r/h|0)+u*s,e[l]=i%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var i,o;if(n!=r)o=rt[i]?1:-1;break}return o}function n(e,t,n,r){for(var i=0;n--;)e[n]-=i,i=e[n](R[f]||0)&&h--,k<0)v.push(1),m=!0;else{for(M=R.length,E=O.length,k+=2,1<(g=o(u/(O[f=0]+1)))&&(O=e(O,g,u),R=e(R,g,u),E=O.length,M=R.length),C=E,x=(w=R.slice(0,E)).length;x=u/2&&T++;do{if(g=0,(d=t(O,w,E,x))<0){if(S=w[0],E!=x&&(S=S*u+(w[1]||0)),1<(g=o(S/T)))for(u<=g&&(g=u-1),b=(y=e(O,g,u)).length,x=w.length;1==t(y,w,b,x);)g--,n(y,El&&(f.c.length=l):r&&(f=f.mod(t))}if(a){if(0===(a=o(a/2)))break;h=a%2}else if(G(e=e.times(n),e.e+1,1),14l&&(p.c.length=l):r&&(p=p.mod(t))}return r?f:(d&&(f=O.div(f)),t?f.mod(t):l?G(f,F,A,void 0):f)},R.integerValue=function(e){var t=new B(this);return null==e?e=A:y(e,0,8),G(t,t.e+1,e)},R.isEqualTo=R.eq=function(e,t){return 0===g(this,new B(e,t))},R.isFinite=function(){return!!this.c},R.isGreaterThan=R.gt=function(e,t){return 0this.c.length-2},R.isLessThan=R.lt=function(e,t){return g(this,new B(e,t))<0},R.isLessThanOrEqualTo=R.lte=function(e,t){return-1===(t=g(this,new B(e,t)))||0===t},R.isNaN=function(){return!this.s},R.isNegative=function(){return this.s<0},R.isPositive=function(){return 0r&&(r=this.e+1),r},R.shiftedBy=function(e){return y(e,-u,u),this.times("1e"+e)},R.squareRoot=R.sqrt=function(){var e,t,r,i,o,s=this,a=s.c,l=s.s,c=s.e,u=L+4,d=new B("0.5");if(1!==l||!a||!a[0])return new B(!l||l<0&&(!a||a[0])?NaN:a?s:1/0);if((r=0==(l=Math.sqrt(+q(s)))||l==1/0?(((t=m(a)).length+c)%2==0&&(t+="0"),l=Math.sqrt(+t),c=p((c+1)/2)-(c<0||c%2),new B(t=l==1/0?"1e"+c:(t=l.toExponential()).slice(0,t.indexOf("e")+1)+c)):new B(l+"")).c[0])for((l=(c=r.e)+u)<3&&(l=0);;)if(o=r,r=d.times(o.plus(n(s,o,u,1))),m(o.c).slice(0,l)===(t=m(r.c)).slice(0,l)){if(r.e=Math.pow(10,12)&&!n||"trillion"===n?(l=r.trillion,t/=Math.pow(10,12)):c=Math.pow(10,9)&&!n||"billion"===n?(l=r.billion,t/=Math.pow(10,9)):c=Math.pow(10,6)&&!n||"million"===n?(l=r.million,t/=Math.pow(10,6)):(c=Math.pow(10,3)&&!n||"thousand"===n)&&(l=r.thousand,t/=Math.pow(10,3)),l&&(l=(o?" ":"")+l),a){var d=t.toString().split(".")[0];u=Math.max(a-d.length,0)}return{value:t,abbreviation:l,mantissaPrecision:u}}({value:d,forceAverage:M,abbreviations:s.currentAbbreviations(),spaceSeparated:O,totalLength:x});d=N.value,P+=N.abbreviation,x&&(E=N.mantissaPrecision)}if(I){var H=(p=(h={value:d,characteristicPrecision:S}).value,g=void 0===(m=h.characteristicPrecision)?0:m,b=(y=r(p.toExponential().split("e"),2))[0],_=y[1],v=+b,g&&1=this._config.preview;if(r)t.postMessage({results:a,workerId:s.WORKER_ID,finished:c});else if(w(this._config.chunk)&&!n){if(this._config.chunk(a,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);a=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(a.data),this._completeResults.errors=this._completeResults.errors.concat(a.errors),this._completeResults.meta=a.meta),this._completed||!c||!w(this._config.complete)||a&&a.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),c||a&&a.meta.paused||this._nextChunk(),a}this._halted=!0},this._sendError=function(e){w(this._config.error)?this._config.error(e):r&&this._config.error&&t.postMessage({workerId:s.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=s.RemoteChunkSize),l.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),n||(t.onload=v(this._chunkLoaded,this),t.onerror=v(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var r in e)t.setRequestHeader(r,e[r])}if(this._config.chunkSize){var i=this._start+this._config.chunkSize-1;t.setRequestHeader("Range","bytes="+this._start+"-"+i)}try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:t.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader("Content-Range");return null===t?-1:parseInt(t.substring(t.lastIndexOf("/")+1))}(t),this.parseChunk(t.responseText)))},this._chunkError=function(e){var n=t.statusText||e;this._sendError(new Error(n))}}function u(e){var t,n;(e=e||{}).chunkSize||(e.chunkSize=s.LocalChunkSize),l.call(this,e);var r="undefined"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,r?((t=new FileReader).onload=v(this._chunkLoaded,this),t.onerror=v(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,n=this._config.chunkSize;return n?(e=t.substring(0,n),t=t.substring(n)):(e=t,t=""),this._finished=!t,this.parseChunk(e)}}}function h(e){l.call(this,e=e||{});var t=[],n=!0,r=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){r&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):n=!0},this._streamData=v((function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),n&&(n=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}}),this),this._streamError=v((function(e){this._streamCleanUp(),this._sendError(e)}),this),this._streamEnd=v((function(){this._streamCleanUp(),r=!0,this._streamData("")}),this),this._streamCleanUp=v((function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)}),this)}function f(e){var t,n,r,i=Math.pow(2,53),o=-i,a=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,l=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,c=this,u=0,d=0,h=!1,f=!1,g=[],y={data:[],errors:[],meta:{}};if(w(e.step)){var b=e.step;e.step=function(t){if(y=t,S())x();else{if(x(),0===y.data.length)return;u+=t.data.length,e.preview&&u>e.preview?n.abort():(y.data=y.data[0],b(y,c))}}}function v(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function x(){return y&&r&&(M("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+s.DefaultDelimiter+"'"),r=!1),e.skipEmptyLines&&(y.data=y.data.filter((function(e){return!v(e)}))),S()&&function(){if(y)if(Array.isArray(y.data[0])){for(var t=0;S()&&t=g.length?"__parsed_extra":g[r]),e.transform&&(s=e.transform(s,o)),s=C(o,s),"__parsed_extra"===o?(i[o]=i[o]||[],i[o].push(s)):i[o]=s}return e.header&&(r>g.length?M("FieldMismatch","TooManyFields","Too many fields: expected "+g.length+" fields but parsed "+r,d+n):r=r.length/2?"\r\n":"\r"}(i,l)),r=!1,e.delimiter)w(e.delimiter)&&(e.delimiter=e.delimiter(i),y.meta.delimiter=e.delimiter);else{var c=function(t,n,r,i,o){var a,l,c,u;o=o||[",","\t","|",";",s.RECORD_SEP,s.UNIT_SEP];for(var d=0;d=a)return $(!0)}else for(U=u,u++;;){if(-1===(U=s.indexOf(t,U+1)))return f||x.push({type:"Quotes",code:"MissingQuotes",message:"Quoted field unterminated",row:v.length,index:u}),V();if(U===m-1)return V(s.substring(u,U).replace(j,t));if(t!==c||s[U+1]!==c){if(t===c||0===U||s[U-1]!==c){-1!==N&&N=a)return $(!0);break}x.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:v.length,index:u}),U++}}else U++}return V();function W(e){v.push(e),C=u}function B(e){var t=0;if(-1!==e){var n=s.substring(U+1,e);n&&""===n.trim()&&(t=n.length)}return t}function V(e){return f||(void 0===e&&(e=s.substring(u)),S.push(e),u=m,W(S),_&&G()),$()}function z(e){u=e,W(S),S=[],H=s.indexOf(r,u)}function $(e){return{data:v,errors:x,meta:{delimiter:n,linebreak:r,aborted:d,truncated:!!e,cursor:C+(h||0)}}}function G(){o($()),v=[],x=[]}},this.abort=function(){d=!0},this.getCharIndex=function(){return u}}function g(e){var t=e.data,n=i[t.workerId],r=!1;if(t.error)n.userError(t.error,t.file);else if(t.results&&t.results.data){var o={abort:function(){r=!0,y(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:b,resume:b};if(w(n.userStep)){for(var s=0;s{"use strict";n.r(t),n.d(t,{default:()=>fr});var r,i=n(75735),o=n.n(i),s=new Uint8Array(16);function a(){if(!r&&!(r="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return r(s)}const l=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var c=[],u=0;u<256;++u)c.push((u+256).toString(16).substr(1));const d=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&l.test(e)}(n))throw TypeError("Stringified UUID is invalid");return n},h=function(e,t,n){var r=(e=e||{}).random||(e.rng||a)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,t){n=n||0;for(var i=0;i<16;++i)t[n+i]=r[i];return t}return d(r)};var f=n(34655),p=n(37007),m=n.n(p),g=Function.prototype.toString,y=g.call(Object);function b(e){var t,n,r;if(!e||"object"!=typeof e)return e;if(Array.isArray(e)){for(t=[],n=0,r=e.length;n=l.length)){var u=Math.min(c+C,l.length),d=l.slice(c,u);!function(l,c){l.forEach((function(l,u){var d=c+u,h=i.get(l),f=x(h[0],["atts_since","attachments"]);f.open_revs=h.map((function(e){return e.rev})),f.open_revs=f.open_revs.filter(M);var p=M;0===f.open_revs.length&&(delete f.open_revs,p=T),["revs","attachments","binary","ajax","latest"].forEach((function(e){e in t&&(f[e]=t[e])})),e.get(l,f,(function(e,t){var i,c,u,h;i=e?[{error:e}]:p(t),c=l,u=i,a[d]={id:c,docs:u},++s===o&&(h=[],a.forEach((function(e){e.docs.forEach((function(t){h.push({id:e.id,docs:[t]})}))})),n(null,{results:h})),r()}))}))}(d,c),c+=d.length}}()}try{localStorage.setItem("_pouch_check_localstorage",1),S=!!localStorage.getItem("_pouch_check_localstorage")}catch(e){S=!1}function D(){return S}const k="function"==typeof queueMicrotask?queueMicrotask:function(e){Promise.resolve().then(e)};class R extends(m()){constructor(){super(),this._listeners={},D()&&addEventListener("storage",(e=>{this.emit(e.key)}))}addListener(e,t,n,r){if(!this._listeners[t]){var i=!1,o=this;this._listeners[t]=s,this.on(e,s)}function s(){if(o._listeners[t])if(i)i="waiting";else{i=!0;var e=x(r,["style","include_docs","attachments","conflicts","filter","doc_ids","view","since","query_params","binary","return_docs"]);n.changes(e).on("change",(function(e){e.seq>r.since&&!r.cancelled&&(r.since=e.seq,r.onChange(e))})).on("complete",(function(){"waiting"===i&&k(s),i=!1})).on("error",(function(){i=!1}))}}}removeListener(e,t){t in this._listeners&&(super.removeListener(e,this._listeners[t]),delete this._listeners[t])}notifyLocalWindows(e){D()&&(localStorage[e]="a"===localStorage[e]?"b":"a")}notify(e){this.emit(e),this.notifyLocalWindows(e)}}function O(e){if("undefined"!=typeof console&&"function"==typeof console[e]){var t=Array.prototype.slice.call(arguments,1);console[e].apply(console,t)}}function L(e){var t=0;return e||(t=2e3),function(e,t){var n=6e5;return e=parseInt(e,10)||0,(t=parseInt(t,10))!=t||t<=e?t=(e||1)<<1:t+=1,t>n&&(e=3e5,t=n),~~((t-e)*Math.random()+e)}(e,t)}function A(e,t){O("info","The above "+e+" is totally normal. "+t)}class I extends Error{constructor(e,t,n){super(),this.status=e,this.name=t,this.message=n,this.error=!0}toString(){return JSON.stringify({status:this.status,name:this.name,message:this.message,reason:this.reason})}}new I(401,"unauthorized","Name or password is incorrect.");var P=new I(400,"bad_request","Missing JSON list of 'docs'"),N=new I(404,"not_found","missing"),H=new I(409,"conflict","Document update conflict"),j=new I(400,"bad_request","_id field must contain a string"),U=new I(412,"missing_id","_id is required for puts"),F=new I(400,"bad_request","Only reserved document ids may start with underscore."),Y=(new I(412,"precondition_failed","Database not open"),new I(500,"unknown_error","Database encountered an unknown error")),W=new I(500,"badarg","Some query argument is invalid"),B=(new I(400,"invalid_request","Request was invalid"),new I(400,"query_parse_error","Some query parameter is invalid")),V=new I(500,"doc_validation","Bad special document member"),z=new I(400,"bad_request","Something wrong with the request"),$=new I(400,"bad_request","Document must be a JSON object"),G=(new I(404,"not_found","Database not found"),new I(500,"indexed_db_went_bad","unknown")),q=(new I(500,"web_sql_went_bad","unknown"),new I(500,"levelDB_went_went_bad","unknown"),new I(403,"forbidden","Forbidden by design doc validate_doc_update function"),new I(400,"bad_request","Invalid rev format")),X=(new I(412,"file_exists","The database could not be created, the file already exists."),new I(412,"missing_stub","A pre-existing attachment stub wasn't found"));function K(e,t){function n(t){for(var n=Object.getOwnPropertyNames(e),r=0,i=n.length;r0||r0||r>>1],t)<0?i=r+1:o=r;return i}(e,t,n);e.splice(r,0,t)}function Pe(e,t){for(var n,r,i=t,o=e.length;i0;){var i=n.pop(),o=i.tree1,s=i.tree2;(o[1].status||s[1].status)&&(o[1].status="available"===o[1].status||"available"===s[1].status?"available":"missing");for(var a=0;a0;){var m=p.pop();if(0!==m.diff)for(var g=m.ids[2],y=0,b=g.length;yt){n||(n={});var u=c.length-t;a={pos:l.pos+u,ids:Pe(c,u)};for(var d=0;d{var r;t?(r="error",("listenerCount"in this?this.listenerCount(r):m().listenerCount(this,r))>0&&this.emit("error",t)):this.emit("complete",n),this.removeAllListeners(),e.removeListener("destroyed",i)}));n&&(this.on("complete",(function(e){n(null,e)})),this.on("error",n));const i=()=>{this.cancel()};e.once("destroyed",i),t.onChange=(e,t,n)=>{this.isCancelled||function(e,t,n,r){try{e.emit("change",t,n,r)}catch(e){O("error",'Error in .on("change", function):',e)}}(this,e,t,n)};var o=new Promise((function(e,n){t.complete=function(t,r){t?n(t):e(r)}}));this.once("cancel",(function(){e.removeListener("destroyed",i),t.complete(null,{status:"cancelled"})})),this.then=o.then.bind(o),this.catch=o.catch.bind(o),this.then((function(e){r(null,e)}),r),e.taskqueue.isReady?this.validateChanges(t):e.taskqueue.addTask((e=>{e?t.complete(e):this.isCancelled?this.emit("cancel"):this.validateChanges(t)}))}cancel(){this.isCancelled=!0,this.db.taskqueue.isReady&&this.emit("cancel")}validateChanges(e){var t=e.complete;nt._changesFilterPlugin?nt._changesFilterPlugin.validate(e,(n=>{if(n)return t(n);this.doChanges(e)})):this.doChanges(e)}doChanges(e){var t=e.complete;if("live"in(e=b(e))&&!("continuous"in e)&&(e.continuous=e.live),e.processChange=Be,"latest"===e.since&&(e.since="now"),e.since||(e.since=0),"now"!==e.since){if(nt._changesFilterPlugin){if(nt._changesFilterPlugin.normalize(e),nt._changesFilterPlugin.shouldFilter(this,e))return nt._changesFilterPlugin.filter(this,e)}else["doc_ids","filter","selector","view"].forEach((function(t){t in e&&O("warn",'The "'+t+'" option was passed in to changes/replicate, but pouchdb-changes-filter plugin is not installed, so it was ignored. Please install the plugin to enable filtering.')}));"descending"in e||(e.descending=!1),e.limit=0===e.limit?1:e.limit,e.complete=t;var n=this.db._changes(e);if(n&&"function"==typeof n.cancel){const e=this.cancel;this.cancel=(...t)=>{n.cancel(),e.apply(this,t)}}}else this.db.info().then((n=>{this.isCancelled?t(null,{status:"cancelled"}):(e.since=n.update_seq,this.doChanges(e))}),t)}}function ze(e,t){return function(n,r){n||r[0]&&r[0].error?((n=n||r[0]).docId=t,e(n)):e(null,r.length?r[0]:r)}}function $e(e,t){return e._id===t._id?(e._revisions?e._revisions.start:0)-(t._revisions?t._revisions.start:0):e._idself.purged_infos_limit&&e.purges.splice(0,e.purges.length-self.purged_infos_limit),e.purgeSeq=r,e})).catch((function(e){if(404!==e.status)throw e;return{_id:"_local/purges",purges:[{docId:t,rev:n,purgeSeq:0}],purgeSeq:0}})).then((function(t){return e.put(t)}))}function Xe(e){return null===e||"object"!=typeof e||Array.isArray(e)}const Ke=/^\d+-[^-]*$/;function Je(e){return"string"==typeof e&&Ke.test(e)}class Ze extends(m()){_setup(){this.post=w("post",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),Xe(e))return n(K($));this.bulkDocs({docs:[e]},t,ze(n,e._id))})).bind(this),this.put=w("put",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),Xe(e))return n(K($));if(Q(e._id),"_rev"in e&&!Je(e._rev))return n(K(q));if(We(e._id)&&"function"==typeof this._putLocal)return e._deleted?this._removeLocal(e,n):this._putLocal(e,n);const r=n=>{"function"==typeof this._put&&!1!==t.new_edits?this._put(e,t,n):this.bulkDocs({docs:[e]},t,ze(n,e._id))};var i,o,s,a;t.force&&e._rev?(o=(i=e._rev.split("-"))[1],s=parseInt(i[0],10)+1,a=Me(),e._revisions={start:s,ids:[a,o]},e._rev=s+"-"+a,t.new_edits=!1,r((function(t){var r=t?null:{ok:!0,id:e._id,rev:e._rev};n(t,r)}))):r(n)})).bind(this),this.putAttachment=w("putAttachment",(function(e,t,n,r,i){var o=this;function s(e){var n="_rev"in e?parseInt(e._rev,10):0;return e._attachments=e._attachments||{},e._attachments[t]={content_type:i,data:r,revpos:++n},o.put(e)}return"function"==typeof i&&(i=r,r=n,n=null),void 0===i&&(i=r,r=n,n=null),i||O("warn","Attachment",t,"on document",e,"is missing content_type"),o.get(e).then((function(e){if(e._rev!==n)throw K(H);return s(e)}),(function(t){if(t.reason===N.message)return s({_id:e});throw t}))})).bind(this),this.removeAttachment=w("removeAttachment",(function(e,t,n,r){this.get(e,((e,i)=>{if(e)r(e);else if(i._rev===n){if(!i._attachments)return r();delete i._attachments[t],0===Object.keys(i._attachments).length&&delete i._attachments,this.put(i,r)}else r(K(H))}))})).bind(this),this.remove=w("remove",(function(e,t,n,r){var i;"string"==typeof t?(i={_id:e,_rev:t},"function"==typeof n&&(r=n,n={})):(i=e,"function"==typeof t?(r=t,n={}):(r=n,n=t)),(n=n||{}).was_delete=!0;var o={_id:i._id,_rev:i._rev||n.rev,_deleted:!0};if(We(o._id)&&"function"==typeof this._removeLocal)return this._removeLocal(i,r);this.bulkDocs({docs:[o]},n,ze(r,o._id))})).bind(this),this.revsDiff=w("revsDiff",(function(e,t,n){"function"==typeof t&&(n=t,t={});var r=Object.keys(e);if(!r.length)return n(null,{});var i=0,o=new Map;function s(e,t){o.has(e)||o.set(e,{missing:[]}),o.get(e).missing.push(t)}r.forEach((function(t){this._getRevisionTree(t,(function(a,l){if(a&&404===a.status&&"missing"===a.message)o.set(t,{missing:e[t]});else{if(a)return n(a);!function(t,n){var r=e[t].slice(0);De(n,(function(e,n,i,o,a){var l=n+"-"+i,c=r.indexOf(l);-1!==c&&(r.splice(c,1),"available"!==a.status&&s(t,l))})),r.forEach((function(e){s(t,e)}))}(t,l)}if(++i===r.length){var c={};return o.forEach((function(e,t){c[t]=e})),n(null,c)}}))}),this)})).bind(this),this.bulkGet=w("bulkGet",(function(e,t){E(this,e,t)})).bind(this),this.compactDocument=w("compactDocument",(function(e,t,n){this._getRevisionTree(e,((r,i)=>{if(r)return n(r);var o=function(e){var t={},n=[];return De(e,(function(e,r,i,o){var s=r+"-"+i;return e&&(t[s]=0),void 0!==o&&n.push({from:o,to:s}),s})),n.reverse(),n.forEach((function(e){void 0===t[e.from]?t[e.from]=1+t[e.to]:t[e.from]=Math.min(t[e.from],1+t[e.to])})),t}(i),s=[],a=[];Object.keys(o).forEach((function(e){o[e]>t&&s.push(e)})),De(i,(function(e,t,n,r,i){var o=t+"-"+n;"available"===i.status&&-1!==s.indexOf(o)&&a.push(o)})),this._doCompaction(e,a,n)}))})).bind(this),this.compact=w("compact",(function(e,t){"function"==typeof e&&(t=e,e={}),e=e||{},this._compactionQueue=this._compactionQueue||[],this._compactionQueue.push({opts:e,callback:t}),1===this._compactionQueue.length&&Ge(this)})).bind(this),this.get=w("get",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),t=t||{},"string"!=typeof e)return n(K(j));if(We(e)&&"function"==typeof this._getLocal)return this._getLocal(e,n);var r=[];const i=()=>{var i=[],o=r.length;if(!o)return n(null,i);r.forEach((r=>{this.get(e,{rev:r,revs:t.revs,latest:t.latest,attachments:t.attachments,binary:t.binary},(function(e,t){if(e)i.push({missing:r});else{for(var s,a=0,l=i.length;a{if(r)return r.docId=e,n(r);var o=i.doc,s=i.metadata,a=i.ctx;if(t.conflicts){var l=Oe(s);l.length&&(o._conflicts=l)}if(Ye(s,o._rev)&&(o._deleted=!0),t.revs||t.revs_info){for(var c=o._rev.split("-"),u=parseInt(c[0],10),d=c[1],h=Le(s.rev_tree),f=null,p=0;pe.id===d));(e===u-1||!f&&-1!==e)&&(f=m)}if(!f)return(r=new Error("invalid rev tree")).docId=e,n(r);const i=o._rev.split("-")[1],a=f.ids.findIndex((e=>e.id===i))+1;var g=f.ids.length-a;if(f.ids.splice(a,g),f.ids.reverse(),t.revs&&(o._revisions={start:f.pos+f.ids.length-1,ids:f.ids.map((function(e){return e.id}))}),t.revs_info){var y=f.pos+f.ids.length;o._revs_info=f.ids.map((function(e){return{rev:--y+"-"+e.id,status:e.opts.status}}))}}if(t.attachments&&o._attachments){var b=o._attachments,_=Object.keys(b).length;if(0===_)return n(null,o);Object.keys(b).forEach((e=>{this._getAttachment(o._id,e,b[e],{binary:t.binary,metadata:s,ctx:a},(function(t,r){var i=o._attachments[e];i.data=r,delete i.stub,delete i.length,--_||n(null,o)}))}))}else{if(o._attachments)for(var v in o._attachments)Object.prototype.hasOwnProperty.call(o._attachments,v)&&(o._attachments[v].stub=!0);n(null,o)}}));if("all"===t.open_revs)this._getRevisionTree(e,(function(e,t){if(e)return n(e);r=Re(t).map((function(e){return e.rev})),i()}));else{if(!Array.isArray(t.open_revs))return n(K(Y,"function_clause"));r=t.open_revs;for(var o=0;oi?r(i):o.doc._attachments&&o.doc._attachments[t]?(n.ctx=o.ctx,n.binary=!0,n.metadata=o.metadata,void this._getAttachment(e,t,o.doc._attachments[t],n,r)):r(K(N))))})).bind(this),this.allDocs=w("allDocs",(function(e,t){if("function"==typeof e&&(t=e,e={}),e.skip=void 0!==e.skip?e.skip:0,e.start_key&&(e.startkey=e.start_key),e.end_key&&(e.endkey=e.end_key),"keys"in e){if(!Array.isArray(e.keys))return t(new TypeError("options.keys must be an array"));var n=["startkey","endkey","key"].filter((function(t){return t in e}))[0];if(n)return void t(K(B,"Query parameter `"+n+"` is not compatible with multi-get"));if(!ee(this)&&(function(e){var t="limit"in e?e.keys.slice(e.skip,e.limit+e.skip):e.skip>0?e.keys.slice(e.skip):e.keys;e.keys=t,e.skip=0,delete e.limit,e.descending&&(t.reverse(),e.descending=!1)}(e),0===e.keys.length))return this._allDocs({limit:0},t)}return this._allDocs(e,t)})).bind(this),this.close=w("close",(function(e){return this._closed=!0,this.emit("closed"),this._close(e)})).bind(this),this.info=w("info",(function(e){this._info(((t,n)=>{if(t)return e(t);n.db_name=n.db_name||this.name,n.auto_compaction=!(!this.auto_compaction||ee(this)),n.adapter=this.adapter,e(null,n)}))})).bind(this),this.id=w("id",(function(e){return this._id(e)})).bind(this),this.bulkDocs=w("bulkDocs",(function(e,t,n){if("function"==typeof t&&(n=t,t={}),t=t||{},Array.isArray(e)&&(e={docs:e}),!e||!e.docs||!Array.isArray(e.docs))return n(K(P));for(var r=0;r{this._destroy(e,((e,n)=>{if(e)return t(e);this._destroyed=!0,this.emit("destroyed"),t(null,n||{ok:!0})}))};if(ee(this))return r();this.get("_local/_pouch_dependentDbs",((e,i)=>{if(e)return 404!==e.status?t(e):r();var o=i.dependentDbs,s=this.constructor,a=Object.keys(o).map((e=>{var t=n?e.replace(new RegExp("^"+s.prefix),""):e;return new s(t,this.__opts).destroy()}));Promise.all(a).then(r,t)}))})).bind(this)}_compact(e,t){var n,r={return_docs:!1,last_seq:e.last_seq||0,since:e.last_seq||0},i=[],o=0;const s=e=>{this.activeTasks.update(n,{completed_items:++o}),i.push(this.compactDocument(e.id,0))},a=e=>{this.activeTasks.remove(n,e),t(e)},l=e=>{var r=e.last_seq;Promise.all(i).then((()=>ce(this,"_local/compaction",(e=>(!e.last_seq||e.last_seq{this.activeTasks.remove(n),t(null,{ok:!0})})).catch(a)};this.info().then((e=>{n=this.activeTasks.add({name:"database_compaction",total_items:e.update_seq-r.last_seq}),this.changes(r).on("change",s).on("complete",l).on("error",a)}))}changes(e,t){return"function"==typeof e&&(t=e,e={}),(e=e||{}).return_docs="return_docs"in e?e.return_docs:!e.live,new Ve(this,e,t)}type(){return"function"==typeof this._type?this._type():this.adapter}}Ze.prototype.purge=w("_purge",(function(e,t,n){if(void 0===this._purge)return n(K(Y,"Purge is not implemented in the "+this.adapter+" adapter."));var r=this;r._getRevisionTree(e,((i,o)=>{if(i)return n(i);if(!o)return n(K(N));let s;try{s=function(e,t){let n=[];const r=e.slice();let i;for(;i=r.pop();){const{pos:e,ids:o}=i,s=`${e}-${o[0]}`,a=o[2];if(n.push(s),s===t){if(0!==a.length)throw new Error("The requested revision is not a leaf");return n.reverse()}(0===a.length||a.length>1)&&(n=[]);for(let t=0,n=a.length;t{if(i)return n(i);qe(r,e,t).then((function(){return n(null,o)}))}))}))}));class Qe{constructor(){this.isReady=!1,this.failed=!1,this.queue=[]}execute(){var e;if(this.failed)for(;e=this.queue.shift();)e(this.failed);else for(;e=this.queue.shift();)e()}fail(e){this.failed=e,this.execute()}ready(e){this.isReady=!0,this.db=e,this.execute()}addTask(e){this.queue.push(e),this.failed&&this.execute()}}function et(e,t){let n=function(...e){if(!(this instanceof n))return new n(...e);t.apply(this,e)};var r,i;return i=e,(r=n).prototype=Object.create(i.prototype,{constructor:{value:r}}),n}class tt extends Ze{constructor(e,t){super(),this._setup(e,t)}_setup(e,t){if(super._setup(),t=t||{},e&&"object"==typeof e&&(e=(t=e).name,delete t.name),void 0===t.deterministic_revs&&(t.deterministic_revs=!0),this.__opts=t=b(t),this.auto_compaction=t.auto_compaction,this.purged_infos_limit=t.purged_infos_limit||1e3,this.prefix=nt.prefix,"string"!=typeof e)throw new Error("Missing/invalid DB name");var n=function(e,t){var n=e.match(/([a-z-]*):\/\/(.*)/);if(n)return{name:/https?/.test(n[1])?n[1]+"://"+n[2]:n[2],adapter:n[1]};var r=nt.adapters,i=nt.preferredAdapters,o=nt.prefix,s=t.adapter;if(!s)for(var a=0;a{if(e)return this.taskqueue.fail(e);!function(e){function t(t){e.removeListener("closed",n),t||e.constructor.emit("destroyed",e.name)}function n(){e.removeListener("destroyed",t),e.constructor.emit("unref",e)}e.once("destroyed",t),e.once("closed",n),e.constructor.emit("ref",e)}(this),this.emit("created",this),nt.emit("created",this.name),this.taskqueue.ready(this)}))}}const nt=et(tt,(function(e,t){tt.prototype._setup.call(this,e,t)}));var rt=fetch,it=Headers;nt.adapters={},nt.preferredAdapters=[],nt.prefix="_pouch_";var ot=new(m());function st(e,t){for(var n=e,r=0,i=t.length;r0&&"\\"===e[r-1]&&("$"===o||"."===o)?n=n.substring(0,n.length-1)+o:"."===o?(t.push(n),n=""):n+=o}return t.push(n),t}!function(e){Object.keys(m().prototype).forEach((function(t){"function"==typeof m().prototype[t]&&(e[t]=ot[t].bind(ot))}));var t=e._destructionListeners=new Map;e.on("ref",(function(e){t.has(e.name)||t.set(e.name,[]),t.get(e.name).push(e)})),e.on("unref",(function(e){if(t.has(e.name)){var n=t.get(e.name),r=n.indexOf(e);r<0||(n.splice(r,1),n.length>1?t.set(e.name,n):t.delete(e.name))}})),e.on("destroyed",(function(e){if(t.has(e)){var n=t.get(e);t.delete(e),n.forEach((function(e){e.emit("destroyed",!0)}))}}))}(nt),nt.adapter=function(e,t,n){t.valid()&&(nt.adapters[e]=t,n&&nt.preferredAdapters.push(e))},nt.plugin=function(e){if("function"==typeof e)e(nt);else{if("object"!=typeof e||0===Object.keys(e).length)throw new Error('Invalid plugin: got "'+e+'", expected an object or a function');Object.keys(e).forEach((function(t){nt.prototype[t]=e[t]}))}return this.__defaults&&(nt.__defaults=Object.assign({},this.__defaults)),nt},nt.defaults=function(e){let t=et(nt,(function(e,n){n=n||{},e&&"object"==typeof e&&(e=(n=e).name,delete n.name),n=Object.assign({},t.__defaults,n),nt.call(this,e,n)}));return t.preferredAdapters=nt.preferredAdapters.slice(),Object.keys(nt).forEach((function(e){e in t||(t[e]=nt[e])})),t.__defaults=Object.assign({},this.__defaults,e),t},nt.fetch=function(e,t){return rt(e,t)},nt.prototype.activeTasks=nt.activeTasks=new class{constructor(){this.tasks={}}list(){return Object.values(this.tasks)}add(e){const t=h();return this.tasks[t]={id:t,name:e.name,total_items:e.total_items,created_at:(new Date).toJSON()},t}get(e){return this.tasks[e]}remove(e,t){return delete this.tasks[e],this.tasks}update(e,t){const n=this.tasks[e];if(void 0!==n){const r={id:n.id,name:n.name,created_at:n.created_at,total_items:t.total_items||n.total_items,completed_items:t.completed_items||n.completed_items,updated_at:(new Date).toJSON()};this.tasks[e]=r}return this.tasks}};var lt=["$or","$nor","$not"];function ct(e){return lt.indexOf(e)>-1}function ut(e){return Object.keys(e)[0]}function dt(e){var t={},n={$or:!0,$nor:!0};return e.forEach((function(e){Object.keys(e).forEach((function(r){var i=e[r];if("object"!=typeof i&&(i={$eq:i}),ct(r))if(i instanceof Array){if(n[r])return n[r]=!1,void(t[r]=i);var o=[];t[r].forEach((function(e){Object.keys(i).forEach((function(t){var n=i[t],r=Math.max(Object.keys(e).length,Object.keys(n).length),s=dt([e,n]);Object.keys(s).length<=r||o.push(s)}))})),t[r]=o}else t[r]=dt([i]);else{var s=t[r]=t[r]||{};Object.keys(i).forEach((function(e){var t=i[e];return"$gt"===e||"$gte"===e?function(e,t,n){void 0===n.$eq&&(void 0!==n.$gte?"$gte"===e?t>n.$gte&&(n.$gte=t):t>=n.$gte&&(delete n.$gte,n.$gt=t):void 0!==n.$gt?"$gte"===e?t>n.$gt&&(delete n.$gt,n.$gte=t):t>n.$gt&&(n.$gt=t):n[e]=t)}(e,t,s):"$lt"===e||"$lte"===e?function(e,t,n){void 0===n.$eq&&(void 0!==n.$lte?"$lte"===e?tt?1:-1}(e,t)}return Array.isArray(e)?function(e,t){for(var n=Math.min(e.length,t.length),r=0;rt.length?1:-1}(e,t):function(e,t){for(var n=Object.keys(e),r=Object.keys(t),i=Math.min(n.length,r.length),o=0;or.length?1:-1}(e,t)}function vt(e){switch(typeof e){case"undefined":return null;case"number":return e===1/0||e===-1/0||isNaN(e)?null:e;case"object":var t=e;if(Array.isArray(e)){var n=e.length;e=new Array(n);for(var r=0;r0)return!1;var a=st(r,s);return"object"==typeof o?Tt(o,t,n,a):Et("$eq",t,o,s,a)})):e===r)}function Et(e,t,n,r,i){if(!Ot[e])throw new Error('unknown operator "'+e+'" - should be one of $eq, $lte, $lt, $gt, $gte, $exists, $ne, $in, $nin, $size, $mod, $regex, $elemMatch, $type, $allMatch or $all');return Ot[e](t,n,r,i)}function Dt(e){return null!=e}function kt(e){return void 0!==e}function Rt(e,t){return t.some((function(t){return e instanceof Array?e.some((function(e){return 0===_t(t,e)})):0===_t(t,e)}))}var Ot={$elemMatch:function(e,t,n,r){return!!Array.isArray(r)&&0!==r.length&&("object"==typeof r[0]&&null!==r[0]?r.some((function(e){return Mt(e,t,Object.keys(t))})):r.some((function(r){return Tt(t,e,n,r)})))},$allMatch:function(e,t,n,r){return!!Array.isArray(r)&&0!==r.length&&("object"==typeof r[0]&&null!==r[0]?r.every((function(e){return Mt(e,t,Object.keys(t))})):r.every((function(r){return Tt(t,e,n,r)})))},$eq:function(e,t,n,r){return kt(r)&&0===_t(r,t)},$gte:function(e,t,n,r){return kt(r)&&_t(r,t)>=0},$gt:function(e,t,n,r){return kt(r)&&_t(r,t)>0},$lte:function(e,t,n,r){return kt(r)&&_t(r,t)<=0},$lt:function(e,t,n,r){return kt(r)&&_t(r,t)<0},$exists:function(e,t,n,r){return t?kt(r):!kt(r)},$mod:function(e,t,n,r){return Dt(r)&&function(e,t){return"number"==typeof e&&parseInt(e,10)===e&&e%t[0]===t[1]}(r,t)},$ne:function(e,t,n,r){return t.every((function(e){return 0!==_t(r,e)}))},$in:function(e,t,n,r){return Dt(r)&&Rt(r,t)},$nin:function(e,t,n,r){return Dt(r)&&!Rt(r,t)},$size:function(e,t,n,r){return Dt(r)&&Array.isArray(r)&&function(e,t){return e.length===t}(r,t)},$all:function(e,t,n,r){return Array.isArray(r)&&function(e,t){return t.every((function(t){return e.some((function(e){return 0===_t(t,e)}))}))}(r,t)},$regex:function(e,t,n,r){return Dt(r)&&"string"==typeof r&&t.every((function(e){return function(e,t){return new RegExp(t).test(e)}(r,e)}))},$type:function(e,t,n,r){return function(e,t){switch(t){case"null":return null===e;case"boolean":return"boolean"==typeof e;case"number":return"number"==typeof e;case"string":return"string"==typeof e;case"array":return e instanceof Array;case"object":return"[object Object]"==={}.toString.call(e)}}(r,t)}};function Lt(e,t){if(e.selector&&e.filter&&"_selector"!==e.filter){var n="string"==typeof e.filter?e.filter:"function";return t(new Error('selector invalid for filter "'+n+'"'))}t()}function At(e){e.view&&!e.filter&&(e.filter="_view"),e.selector&&!e.filter&&(e.filter="_selector"),e.filter&&"string"==typeof e.filter&&("_view"===e.filter?e.view=ne(e.view):e.filter=ne(e.filter))}function It(e,t){return t.filter&&"string"==typeof t.filter&&!t.doc_ids&&!ee(e.db)}function Pt(e,t){var n=t.complete;if("_view"===t.filter){if(!t.view||"string"!=typeof t.view){var r=K(z,"`view` filter parameter not found or invalid.");return n(r)}var i=te(t.view);e.db.get("_design/"+i[0],(function(r,o){if(e.isCancelled)return n(null,{status:"cancelled"});if(r)return n(J(r));var s=o&&o.views&&o.views[i[1]]&&o.views[i[1]].map;if(!s)return n(K(N,o.views?"missing json key: "+i[1]:"missing json key: views"));t.filter=le(["return function(doc) {",' "use strict";'," var emitted = false;"," var emit = function (a, b) {"," emitted = true;"," };"," var view = "+s+";"," view(doc);"," if (emitted) {"," return true;"," }","};"].join("\n"),{}),e.doChanges(t)}))}else if(t.selector)t.filter=function(e){return function(e,t){if("object"!=typeof t)throw new Error("Selector error: expected a JSON object");var n=function(e,t,n){if(e=e.filter((function(e){return Mt(e.doc,t.selector,n)})),t.sort){var r=function(e){function t(t){return e.map((function(e){var n=at(ut(e));return st(t,n)}))}return function(e,n){var r,i,o=_t(t(e.doc),t(n.doc));return 0!==o?o:(r=e.doc._id)<(i=n.doc._id)?-1:r>i?1:0}}(t.sort);e=e.sort(r),"string"!=typeof t.sort[0]&&"desc"===(i=t.sort[0])[ut(i)]&&(e=e.reverse())}var i;if("limit"in t||"skip"in t){var o=t.skip||0,s=("limit"in t?t.limit:e.length)+o;e=e.slice(o,s)}return e}([{doc:e}],{selector:t=pt(t)},Object.keys(t));return n&&1===n.length}(e,t.selector)},e.doChanges(t);else{var o=te(t.filter);e.db.get("_design/"+o[0],(function(r,i){if(e.isCancelled)return n(null,{status:"cancelled"});if(r)return n(J(r));var s=i&&i.filters&&i.filters[o[1]];if(!s)return n(K(N,i&&i.filters?"missing json key: "+o[1]:"missing json key: filters"));t.filter=le('"use strict";\nreturn '+s+";",{}),e.doChanges(t)}))}}function Nt(e){return e.reduce((function(e,t){return e[t]=!0,e}),{})}nt.plugin((function(e){e._changesFilterPlugin={validate:Lt,normalize:At,shouldFilter:It,filter:Pt}})),nt.version="9.0.0";var Ht=Nt(["_id","_rev","_access","_attachments","_deleted","_revisions","_revs_info","_conflicts","_deleted_conflicts","_local_seq","_rev_tree","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats","_removed"]),jt=Nt(["_access","_attachments","_replication_id","_replication_state","_replication_state_time","_replication_state_reason","_replication_stats"]);function Ut(e){if(!/^\d+-/.test(e))return K(q);var t=e.indexOf("-"),n=e.substring(0,t),r=e.substring(t+1);return{prefix:parseInt(n,10),id:r}}function Ft(e,t,n){var r,i,o;n||(n={deterministic_revs:!0});var s={status:"available"};if(e._deleted&&(s.deleted=!0),t)if(e._id||(e._id=Te()),i=Me(e,n.deterministic_revs),e._rev){if((o=Ut(e._rev)).error)return o;e._rev_tree=[{pos:o.prefix,ids:[o.id,{status:"missing"},[[i,s,[]]]]}],r=o.prefix+1}else e._rev_tree=[{pos:1,ids:[i,s,[]]}],r=1;else if(e._revisions&&(e._rev_tree=function(e,t){for(var n=e.start-e.ids.length+1,r=e.ids,i=[r[0],t,[]],o=1,s=r.length;o1&&!n?(a={continue:function(){if(!o.length)return i();var n,a=o[o.length-1];if(t&&t.upper)try{n=IDBKeyRange.bound(a,t.upper,!0,t.upperOpen)}catch(e){if("DataError"===e.name&&0===e.code)return i()}else n=IDBKeyRange.lowerBound(a,!0);t=n,o=null,s=null,e.getAll(t,r).onsuccess=l,e.getAllKeys(t,r).onsuccess=c}},e.getAll(t,r).onsuccess=l,e.getAllKeys(t,r).onsuccess=c):n?e.openCursor(t,"prev").onsuccess=u:e.openCursor(t).onsuccess=u}var un=!1,dn=[];function hn(){!un&&dn.length&&(un=!0,dn.shift()())}var fn,pn=new Map,mn=new Map;function gn(e,t){var n=this;!function(t,r,i){dn.push((function(){var t;t=function(e,t){!function(e,t,n,r){try{e(t,n)}catch(t){r.emit("error",t)}}(r,e,t,i),un=!1,k((function(){hn()}))},function(e,t,n){var r=t.name,i=null,o=null;function s(e){return function(t,n){t&&t instanceof Error&&!t.reason&&o&&(t.reason=o),e(t,n)}}function a(e){var t=e.createObjectStore(Bt,{keyPath:"id"});e.createObjectStore(Vt,{autoIncrement:!0}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0}),e.createObjectStore(zt,{keyPath:"digest"}),e.createObjectStore(Gt,{keyPath:"id",autoIncrement:!1}),e.createObjectStore(Xt),t.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1}),e.createObjectStore(qt,{keyPath:"_id"});var n=e.createObjectStore($t,{autoIncrement:!0});n.createIndex("seq","seq"),n.createIndex("digestSeq","digestSeq",{unique:!0})}function l(e,t){var n=e.objectStore(Bt);n.createIndex("deletedOrLocal","deletedOrLocal",{unique:!1}),n.openCursor().onsuccess=function(e){var r=e.target.result;if(r){var i=r.value,o=Ye(i);i.deletedOrLocal=o?"1":"0",n.put(i),r.continue()}else t()}}function c(e){e.createObjectStore(qt,{keyPath:"_id"}).createIndex("_doc_id_rev","_doc_id_rev",{unique:!0})}function u(e,t){var n=e.objectStore(qt),r=e.objectStore(Bt),i=e.objectStore(Vt);r.openCursor().onsuccess=function(e){var o=e.target.result;if(o){var s=o.value,a=s.id,l=We(a),c=Ee(s);if(l){var u=a+"::"+c,d=a+"::",h=a+"::~",f=i.index("_doc_id_rev"),p=IDBKeyRange.bound(d,h,!1,!1),m=f.openCursor(p);m.onsuccess=function(e){if(m=e.target.result){var t=m.value;t._doc_id_rev===u&&n.put(t),i.delete(m.primaryKey),m.continue()}else r.delete(o.primaryKey),o.continue()}}else o.continue()}else t&&t()}}function d(e){var t=e.createObjectStore($t,{autoIncrement:!0});t.createIndex("seq","seq"),t.createIndex("digestSeq","digestSeq",{unique:!0})}function h(e,t){var n=e.objectStore(Vt),r=e.objectStore(zt),i=e.objectStore($t);r.count().onsuccess=function(e){if(!e.target.result)return t();n.openCursor().onsuccess=function(e){var n=e.target.result;if(!n)return t();for(var r=n.value,o=n.primaryKey,s=Object.keys(r._attachments||{}),a={},l=0;li&&(i=n),t.continue()}}function a(){var e=Zt(o,o.winningRev,o.deleted);r.put(e).onsuccess=function(){i.continue()}}}}e._meta=null,e._remote=!1,e.type=function(){return"idb"},e._id=v((function(t){t(null,e._meta.instanceId)})),e._bulkDocs=function(n,r,o){ln(t,n,r,e,i,s(o))},e._get=function(e,t,n){var r,o,s,a=t.ctx;if(!a){var l=sn(i,[Bt,Vt,zt],"readonly");if(l.error)return n(l.error);a=l.txn}function c(){n(s,{doc:r,metadata:o,ctx:a})}a.objectStore(Bt).get(e).onsuccess=function(e){if(!(o=Qt(e.target.result)))return s=K(N,"missing"),c();var n;if(t.rev)n=t.latest?function(e,t){for(var n,r=t.rev_tree.slice();n=r.pop();){var i=n.pos,o=n.ids,s=o[0],a=o[1],l=o[2],c=0===l.length,u=n.history?n.history.slice():[];if(u.push({id:s,pos:i,opts:a}),c)for(var d=0,h=u.length;d{var t=e.target.result;t&&t.key&&(g=t.key)}),i||0===u||(l?function(e,t,n){var r=new Array(e.length),i=0;e.forEach((function(o,s){t.get(o).onsuccess=function(t){t.target.result?r[s]=t.target.result:r[s]={key:o,error:"not_found"},++i===e.length&&n(e,r,{})}}))}(l,y,C):-1===u?function(e,t,n){if("function"!=typeof e.getAll){var r=[];e.openCursor(t).onsuccess=function(e){var t=e.target.result;t?(r.push(t.value),t.continue()):n({target:{result:r}})}}else e.getAll(t).onsuccess=n}(y,r,(function(t){var n=t.target.result;e.descending&&(n=n.reverse()),S(n)})):cn(y,r,e.descending,u+c,C))}(e,i,s(t))},e._changes=function(t){return function(e,t,n,r){if((e=b(e)).continuous){var i=n+":"+Te();return an.addListener(n,i,t,e),an.notify(n),{cancel:function(){an.removeListener(n,i)}}}var o=e.doc_ids&&new Set(e.doc_ids);e.since=e.since||0;var s=e.since,a="limit"in e?e.limit:-1;0===a&&(a=1);var l,c,u,d,h=[],f=0,p=Z(e),m=new Map;function g(e,t,n,r){if(n.seq!==t)return r();if(n.winningRev===e._rev)return r(n,e);var i=e._id+"::"+n.winningRev;d.get(i).onsuccess=function(e){r(n,en(e.target.result))}}function y(){e.complete(null,{results:h,last_seq:s})}var _=[Bt,Vt];e.attachments&&_.push(zt);var v=sn(r,_,"readonly");if(v.error)return e.complete(v.error);(l=v.txn).onabort=Jt(e.complete),l.oncomplete=function(){!e.continuous&&e.attachments?rn(h).then(y):y()},c=l.objectStore(Vt),u=l.objectStore(Bt),d=c.index("_doc_id_rev"),cn(c,e.since&&!e.descending?IDBKeyRange.lowerBound(e.since,!0):null,e.descending,a,(function(t,n,r){if(r&&t.length){var i=new Array(t.length),c=new Array(t.length),d=0;n.forEach((function(n,s){!function(e,t,n){if(o&&!o.has(e._id))return n();var r=m.get(e._id);if(r)return g(e,t,r,n);u.get(e._id).onsuccess=function(i){r=Qt(i.target.result),m.set(e._id,r),g(e,t,r,n)}}(en(n),t[s],(function(n,o){c[s]=n,i[s]=o,++d===t.length&&function(){for(var t=[],n=0,o=i.length;n=43)},o.onerror=e.onabort=function(e){e.preventDefault(),e.stopPropagation(),r(!1)}})).catch((function(){return!1}))}(u,Xt,"key")),fn.then((function(e){l=e,h()})),u.oncomplete=function(){d=!0,h()},u.onabort=Jt(n)},m.onerror=function(e){var t=e.target.error&&e.target.error.message;t?-1!==t.indexOf("stored database is a higher version")&&(t=new Error('This DB was created with the newer "indexeddb" adapter, but you are trying to open it with the older "idb" adapter')):t="Failed to open indexedDB, are you in private browsing mode?",O("error",t),n(K(G,t))}}(n,e,t)})),hn()}(0,t,n.constructor)}gn.valid=function(){try{return"undefined"!=typeof indexedDB&&"undefined"!=typeof IDBKeyRange}catch(e){return!1}};const yn=5e3,bn={};function _n(e){const t=e.doc||e.ok,n=t&&t._attachments;n&&Object.keys(n).forEach((function(e){const t=n[e];t.data=me(t.data,t.content_type)}))}function vn(e){return/^_design/.test(e)?"_design/"+encodeURIComponent(e.slice(8)):e.startsWith("_local/")?"_local/"+encodeURIComponent(e.slice(7)):encodeURIComponent(e)}function wn(e){return e._attachments&&Object.keys(e._attachments)?Promise.all(Object.keys(e._attachments).map((function(t){const n=e._attachments[t];if(n.data&&"string"!=typeof n.data)return new Promise((function(e){be(n.data,e)})).then((function(e){n.data=e}))}))):Promise.resolve()}function xn(e,t){return Sn(e,e.db+"/"+t)}function Sn(e,t){const n=e.path?"/":"";return e.protocol+"://"+e.host+(e.port?":"+e.port:"")+"/"+e.path+n+t}function Cn(e){const t=Object.keys(e);return 0===t.length?"":"?"+t.map((t=>t+"="+encodeURIComponent(e[t]))).join("&")}function Mn(e,t){const n=this,r=function(e,t){if(function(e){if(!e.prefix)return!1;const t=ae(e.prefix).protocol;return"http"===t||"https"===t}(t)){const n=t.name.substr(t.prefix.length);e=t.prefix.replace(/\/?$/,"/")+encodeURIComponent(n)}const n=ae(e);(n.user||n.password)&&(n.auth={username:n.user,password:n.password});const r=n.path.replace(/(^\/|\/$)/g,"").split("/");return n.db=r.pop(),-1===n.db.indexOf("%")&&(n.db=encodeURIComponent(n.db)),n.path=r.join("/"),n}(e.name,e),i=xn(r,"");e=b(e);const o=async function(t,n){if((n=n||{}).headers=n.headers||new it,n.credentials="include",e.auth||r.auth){const t=e.auth||r.auth,i=t.username+":"+t.password,o=de(unescape(encodeURIComponent(i)));n.headers.set("Authorization","Basic "+o)}const i=e.headers||{};Object.keys(i).forEach((function(e){n.headers.append(e,i[e])})),function(e){const t="undefined"!=typeof navigator&&navigator.userAgent?navigator.userAgent.toLowerCase():"",n=-1!==t.indexOf("msie"),r=-1!==t.indexOf("trident"),i=-1!==t.indexOf("edge"),o=!("method"in e)||"GET"===e.method;return(n||r||i)&&o}(n)&&(t+=(-1===t.indexOf("?")?"?":"&")+"_nonce="+Date.now());const o=e.fetch||rt;return await o(t,n)};function s(e,t){return w(e,(function(...e){c().then((function(){return t.apply(this,e)})).catch((function(t){e.pop()(t)}))})).bind(n)}async function a(e,t){const n={};(t=t||{}).headers=t.headers||new it,t.headers.get("Content-Type")||t.headers.set("Content-Type","application/json"),t.headers.get("Accept")||t.headers.set("Accept","application/json");const r=await o(e,t);n.ok=r.ok,n.status=r.status;const i=await r.json();if(n.data=i,!n.ok)throw n.data.status=n.status,J(n.data);return Array.isArray(n.data)&&(n.data=n.data.map((function(e){return e.error||e.missing?J(e):e}))),n}let l;async function c(){return e.skip_setup?Promise.resolve():l||(l=a(i).catch((function(e){return e&&e.status&&404===e.status?(A(404,"PouchDB is just detecting if the remote exists."),a(i,{method:"PUT"})):Promise.reject(e)})).catch((function(e){return!(!e||!e.status||412!==e.status)||Promise.reject(e)})),l.catch((function(){l=null})),l)}function u(e){return e.split("/").map(encodeURIComponent).join("/")}k((function(){t(null,n)})),n._remote=!0,n.type=function(){return"http"},n.id=s("id",(async function(e){let t;try{const e=await o(Sn(r,""));t=await e.json()}catch(e){t={}}e(null,t&&t.uuid?t.uuid+r.db:xn(r,""))})),n.compact=s("compact",(async function(e,t){"function"==typeof e&&(t=e,e={}),e=b(e),await a(xn(r,"_compact"),{method:"POST"}),function r(){n.info((function(n,i){i&&!i.compact_running?t(null,{ok:!0}):setTimeout(r,e.interval||200)}))}()})),n.bulkGet=w("bulkGet",(function(e,t){const n=this;async function i(t){const n={};e.revs&&(n.revs=!0),e.attachments&&(n.attachments=!0),e.latest&&(n.latest=!0);try{const i=await a(xn(r,"_bulk_get"+Cn(n)),{method:"POST",body:JSON.stringify({docs:e.docs})});e.attachments&&e.binary&&i.data.results.forEach((function(e){e.docs.forEach(_n)})),t(null,i.data)}catch(e){t(e)}}function o(){const r=Math.ceil(e.docs.length/50);let i=0;const o=new Array(r);function s(e){return function(n,s){o[e]=s.results,++i===r&&t(null,{results:o.flat()})}}for(let t=0;tt?t:s;const p=xn(r,"_changes"+Cn(i)),m={signal:d.signal,method:u,body:JSON.stringify(l)};if(h=n,!e.aborted)try{await c(),f(null,(await a(p,m)).data)}catch(e){f(e)}},p={results:[]},m=function(n,r){if(e.aborted)return;let i=0;if(r&&r.results){i=r.results.length,p.last_seq=r.last_seq;let t=null,n=null;"number"==typeof r.pending&&(t=r.pending),"string"!=typeof p.last_seq&&"number"!=typeof p.last_seq||(n=p.last_seq),e.query_params,r.results=r.results.filter((function(r){s--;const i=Z(e)(r);return i&&(e.include_docs&&e.attachments&&e.binary&&_n(r),e.return_docs&&p.results.push(r),e.onChange(r,t,n)),i}))}else if(n)return e.aborted=!0,void e.complete(n);r&&r.last_seq&&(h=r.last_seq);const a=o&&s<=0||r&&i{})).then((()=>e())),this.promise}finish(){return this.promise}}function Fn(e){if(!e)return"undefined";switch(typeof e){case"function":case"string":return e.toString();default:return JSON.stringify(e)}}async function Yn(e,t,n,r,i,o){const s=function(e,t){return Fn(e)+Fn(t)+"undefined"}(n,r);let a;if(!i&&(a=e._cachedViews=e._cachedViews||{},a[s]))return a[s];const l=e.info().then((async function(l){const c=l.db_name+"-mrview-"+(i?"temp":Ce(s));await ce(e,"_local/"+o,(function(e){e.views=e.views||{};let n=t;-1===n.indexOf("/")&&(n=t+"/"+t);const r=e.views[n]=e.views[n]||{};if(!r[c])return r[c]=!0,e}));const u=(await e.registerDependentDatabase(c)).db;u.auto_compaction=!0;const d={name:c,db:u,sourceDB:e,adapter:e.adapter,mapFun:n,reduceFun:r};let h;try{h=await d.db.get("_local/lastSeq")}catch(e){if(404!==e.status)throw e}return d.seq=h?h.seq:0,a&&d.db.once("destroyed",(function(){delete a[s]})),d}));return a&&(a[s]=l),l}const Wn={},Bn=new Un;function Vn(e){return-1===e.indexOf("/")?[e,e]:e.split("/")}function zn(e,t,n){try{e.emit("error",t)}catch(e){O("error","The user's map/reduce function threw an uncaught error.\nYou can debug this error by doing:\nmyDatabase.on('error', function (err) { debugger; });\nPlease double-check your map/reduce function."),O("error",t,n)}}var $n=function(e,t){return In(t)},Gn=function(e,t){return t.length},qn=function(e,t){return{sum:In(t),min:Math.min.apply(null,t),max:Math.max.apply(null,t),count:t.length,sumsqr:function(e){for(var t=0,n=0,r=e.length;n0?e.slice(n):e}function l(e){const t=e.value;return t&&"object"==typeof t&&t._id||e.id}function c(e){return function(t){return e.include_docs&&e.attachments&&e.binary&&function(e){for(const t of e.rows){const e=t.doc&&t.doc._attachments;if(e)for(const t of Object.keys(e)){const n=e[t];e[t].data=me(n.data,n.content_type)}}}(t),t}}function u(e,t,n,r){let i=t[e];void 0!==i&&(r&&(i=encodeURIComponent(JSON.stringify(i))),n.push(e+"="+i))}function d(e){if(void 0!==e){const t=Number(e);return isNaN(t)||t!==parseInt(e,10)?e:t}}function h(e){if(e){if("number"!=typeof e)return new Tn(`Invalid value for integer: "${e}"`);if(e<0)return new Tn(`Invalid value for positive integer: "${e}"`)}}function f(e,t){const n=e.descending?"endkey":"startkey",r=e.descending?"startkey":"endkey";if(void 0!==e[n]&&void 0!==e[r]&&_t(e[n],e[r])>0)throw new Tn("No rows can match your key range, reverse your start_key and end_key or set {descending : true}");if(t.reduce&&!1!==e.reduce){if(e.include_docs)throw new Tn("{include_docs:true} is invalid for reduce");if(e.keys&&e.keys.length>1&&!e.group&&!e.group_level)throw new Tn("Multi-key fetches for reduce views must use {group: true}")}for(const t of["group_level","limit","skip"]){const n=h(e[t]);if(n)throw n}}function p(e){return function(t){if(404===t.status)return e;throw t}}function m(e){const t="string"==typeof e?e:e.name;let n=Wn[t];return n||(n=Wn[t]=new Un),n}async function g(e,n){return Rn(m(e),(function(){return async function(e,n){let r,o,a;const l=t(e.mapFun,(function(e,t){const n={id:o._id,key:vt(e)};null!=t&&(n.value=vt(t)),r.push(n)}));let c=e.seq||0;function u(t,n){return function(){return function(e,t,n){var r="_local/lastSeq";return e.db.get(r).catch(p({_id:r,seq:0})).then((function(r){var i=Ln(t);return Promise.all(i.map((function(n){return async function(e,t,n){const r="_local/doc_"+e,i={_id:r,keys:[]},o=n.get(e),s=o[0],a=o[1],l=await(function(e){return 1===e.length&&/^1-/.test(e[0].rev)}(a)?Promise.resolve(i):t.db.get(r).catch(p(i))),c=await function(e){return e.keys.length?t.db.allDocs({keys:e.keys,include_docs:!0}):Promise.resolve({rows:[]})}(l);return function(e,t){const n=[],r=new Set;for(const e of t.rows){const t=e.doc;if(t&&(n.push(t),r.add(t._id),t._deleted=!s.has(t._id),!t._deleted)){const e=s.get(t._id);"value"in e&&(t.value=e.value)}}const i=Ln(s);for(const e of i)if(!r.has(e)){const t={_id:e},r=s.get(e);"value"in r&&(t.value=r.value),n.push(t)}return e.keys=On(i.concat(e.keys)),n.push(e),n}(l,c)}(n,e,t)}))).then((function(t){var i=t.flat();return r.seq=n,i.push(r),e.db.bulkDocs({docs:i})})).then((()=>function(e){return e.sourceDB.get("_local/purges").then((function(t){const n=t.purgeSeq;return e.db.get("_local/purgeSeq").then((function(e){return e._rev})).catch(p(void 0)).then((function(t){return e.db.put({_id:"_local/purgeSeq",_rev:t,purgeSeq:n})}))})).catch((function(e){if(404!==e.status)throw e}))}(e)))}))}(e,t,n)}}let d=0;const h={view:e.name,indexed_docs:d};e.sourceDB.emit("indexing",h);const f=new Un;async function m(){return function(t,h){const p=t.results;if(!p.length&&!h.length)return;for(const e of h)if(p.findIndex((function(t){return t.id===e.docId}))<0){const t={_id:e.docId,doc:{_id:e.docId,_deleted:1},changes:[]};e.doc&&(t.doc=e.doc,t.changes.push({rev:e.doc._rev})),p.push(t)}const y=function(t){const n=new Map;for(const a of t){if("_"!==a.doc._id[0]){r=[],o=a.doc,o._deleted||i(e.sourceDB,l,o),r.sort(s);const t=g(r);n.set(a.doc._id,[t,a.changes])}c=a.seq}return n}(p);f.add(u(y,c)),d+=p.length;const b={view:e.name,last_seq:t.last_seq,results_count:p.length,indexed_docs:d};return e.sourceDB.emit("indexing",b),e.sourceDB.activeTasks.update(a,{completed_items:d}),p.lengtht})).map((e=>e.docId)),i=r.filter((function(e,t){return r.indexOf(e)===t}));return Promise.all(i.map((function(t){return e.sourceDB.get(t).then((function(e){return{docId:t,doc:e}})).catch(p({docId:t}))})))})).catch(p([]))})))}function g(e){const t=new Map;let n;for(let r=0,i=e.length;r0&&0===_t(i.key,n)&&o.push(r),t.set(wt(o),i),n=i.key}return t}try{await e.sourceDB.info().then((function(t){a=e.sourceDB.activeTasks.add({name:"view_indexing",total_items:t.update_seq-c})})),await m(),await f.finish(),e.seq=c,e.sourceDB.activeTasks.remove(a)}catch(t){e.sourceDB.activeTasks.remove(a,t)}}(e,n)}))()}function y(e,t){return Rn(m(e),(function(){return async function(e,t){let r;const i=e.reduceFun&&!1!==t.reduce,s=t.skip||0;async function c(t){t.include_docs=!0;const n=await e.db.allDocs(t);return r=n.total_rows,n.rows.map((function(e){if("value"in e.doc&&"object"==typeof e.doc.value&&null!==e.doc.value){const t=Object.keys(e.doc.value).sort(),n=["id","key","value"];if(!(tn))return e.doc.value}const t=function(e){for(var t=[],n=[],r=0;;){var i=e[r++];if("\0"!==i)switch(i){case"1":t.push(null);break;case"2":t.push("1"===e[r]),r++;break;case"3":var o=xt(e,r);t.push(o.num),r+=o.length;break;case"4":for(var s="";;){var a=e[r];if("\0"===a)break;s+=a,r++}s=s.replace(/\u0001\u0001/g,"\0").replace(/\u0001\u0002/g,"").replace(/\u0002\u0002/g,""),t.push(s);break;case"5":var l={element:[],index:t.length};t.push(l.element),n.push(l);break;case"6":var c={element:{},index:t.length};t.push(c.element),n.push(c);break;default:throw new Error("bad collationIndex or unexpectedly reached end of input: "+i)}else{if(1===t.length)return t.pop();St(t,n)}}}(e.doc._id);return{key:t[0],id:t[1],value:"value"in e.doc?e.doc.value:null}}))}async function u(c){let u;if(u=i?function(e,t,r){0===r.group_level&&delete r.group_level;const i=r.group||r.group_level,s=n(e.reduceFun),l=[],c=isNaN(r.group_level)?Number.POSITIVE_INFINITY:r.group_level;for(const e of t){const t=l[l.length-1];let n=i?e.key:null;i&&Array.isArray(n)&&(n=n.slice(0,c)),t&&0===_t(t.groupKey,n)?(t.keys.push([e.key,e.id]),t.values.push(e.value)):l.push({keys:[[e.key,e.id]],values:[e.value],groupKey:n})}t=[];for(const n of l){const r=o(e.sourceDB,s,n.keys,n.values,!1);if(r.error&&r.error instanceof Dn)throw r.error;t.push({value:r.error?null:r.output,key:n.groupKey})}return{rows:a(t,r.limit,r.skip)}}(e,c,t):void 0===t.keys?{total_rows:r,offset:s,rows:c}:{total_rows:r,offset:s,rows:a(c,t.limit,t.skip)},t.update_seq&&(u.update_seq=e.seq),t.include_docs){const n=On(c.map(l)),r=await e.sourceDB.allDocs({keys:n,include_docs:!0,conflicts:t.conflicts,attachments:t.attachments,binary:t.binary}),i=new Map;for(const e of r.rows)i.set(e.id,e.doc);for(const e of c){const t=l(e),n=i.get(t);n&&(e.doc=n)}}return u}if(void 0===t.keys||t.keys.length||(t.limit=0,delete t.keys),void 0!==t.keys){const e=t.keys.map((function(e){const n={startkey:wt([e]),endkey:wt([e,{}])};return t.update_seq&&(n.update_seq=!0),c(n)}));return u((await Promise.all(e)).flat())}{const e={descending:t.descending};let n,r;if(t.update_seq&&(e.update_seq=!0),"start_key"in t&&(n=t.start_key),"startkey"in t&&(n=t.startkey),"end_key"in t&&(r=t.end_key),"endkey"in t&&(r=t.endkey),void 0!==n&&(e.startkey=t.descending?wt([n,{}]):wt([n])),void 0!==r){let n=!1!==t.inclusive_end;t.descending&&(n=!n),e.endkey=wt(n?[r,{}]:[r])}if(void 0!==t.key){const n=wt([t.key]),r=wt([t.key,{}]);e.descending?(e.endkey=n,e.startkey=r):(e.startkey=n,e.endkey=r)}return i||("number"==typeof t.limit&&(e.limit=t.limit),e.skip=s),u(await c(e))}}(e,t)}))()}async function b(t,n,r){if("function"==typeof t._query)return function(e,t,n){return new Promise((function(r,i){e._query(t,n,(function(e,t){if(e)return i(e);r(t)}))}))}(t,n,r);if(ee(t))return async function(e,t,n){let r,i,o=[],s="GET";if(u("reduce",n,o),u("include_docs",n,o),u("attachments",n,o),u("limit",n,o),u("descending",n,o),u("group",n,o),u("group_level",n,o),u("skip",n,o),u("stale",n,o),u("conflicts",n,o),u("startkey",n,o,!0),u("start_key",n,o,!0),u("endkey",n,o,!0),u("end_key",n,o,!0),u("inclusive_end",n,o),u("key",n,o,!0),u("update_seq",n,o),o=o.join("&"),o=""===o?"":"?"+o,void 0!==n.keys){const e=2e3,i=`keys=${encodeURIComponent(JSON.stringify(n.keys))}`;i.length+o.length+1<=e?o+=("?"===o[0]?"&":"?")+i:(s="POST","string"==typeof t?r={keys:n.keys}:t.keys=n.keys)}if("string"==typeof t){const a=Vn(t),l=await e.fetch("_design/"+a[0]+"/_view/"+a[1]+o,{headers:new it({"Content-Type":"application/json"}),method:s,body:JSON.stringify(r)});i=l.ok;const u=await l.json();if(!i)throw u.status=l.status,J(u);for(const e of u.rows)if(e.value&&e.value.error&&"builtin_reduce_error"===e.value.error)throw new Error(e.reason);return new Promise((function(e){e(u)})).then(c(n))}r=r||{};for(const e of Object.keys(t))Array.isArray(t[e])?r[e]=t[e]:r[e]=t[e].toString();const a=await e.fetch("_temp_view"+o,{headers:new it({"Content-Type":"application/json"}),method:"POST",body:JSON.stringify(r)});i=a.ok;const l=await a.json();if(!i)throw l.status=a.status,J(l);return new Promise((function(e){e(l)})).then(c(n))}(t,n,r);const i={changes_batch_size:t.__opts.view_update_changes_batch_size||50};if("string"!=typeof n)return f(r,n),Bn.add((async function(){const o=await Yn(t,"temp_view/temp_view",n.map,n.reduce,!0,e);return s=g(o,i).then((function(){return y(o,r)})),a=function(){return o.db.destroy()},s.then((function(e){return a().then((function(){return e}))}),(function(e){return a().then((function(){throw e}))}));var s,a})),Bn.finish();{const o=n,s=Vn(o),a=s[0],l=s[1],c=await t.get("_design/"+a);if(!(n=c.views&&c.views[l]))throw new En(`ddoc ${c._id} has no view named ${l}`);(function(e,t){var n=e.views&&e.views[t];if("string"!=typeof n.map)throw new En("ddoc "+e._id+" has no string view named "+t+", instead found object of type: "+typeof n.map)})(c,l),f(r,n);const u=await Yn(t,o,n.map,n.reduce,!1,e);return"ok"===r.stale||"update_after"===r.stale?("update_after"===r.stale&&k((function(){g(u,i)})),y(u,r)):(await g(u,i),y(u,r))}}var _;return{query:function(e,t,n){const r=this;"function"==typeof t&&(n=t,t={}),t=t?function(e){return e.group_level=d(e.group_level),e.limit=d(e.limit),e.skip=d(e.skip),e}(t):{},"function"==typeof e&&(e={map:e});const i=Promise.resolve().then((function(){return b(r,e,t)}));return kn(i,n),i},viewCleanup:(_=function(){const t=this;return"function"==typeof t._viewCleanup?function(e){return new Promise((function(t,n){e._viewCleanup((function(e,r){if(e)return n(e);t(r)}))}))}(t):ee(t)?async function(e){return(await e.fetch("_view_cleanup",{headers:new it({"Content-Type":"application/json"}),method:"POST"})).json()}(t):async function(t){try{const n=await t.get("_local/"+e),r=new Map;for(const e of Object.keys(n.views)){const t=Vn(e),n="_design/"+t[0],i=t[1];let o=r.get(n);o||(o=new Set,r.set(n,o)),o.add(i)}const i={keys:Ln(r),include_docs:!0},o=await t.allDocs(i),s={};for(const e of o.rows){const t=e.key.substring(8);for(const i of r.get(e.key)){let r=t+"/"+i;n.views[r]||(r=i);const o=Object.keys(n.views[r]),a=e.doc&&e.doc.views&&e.doc.views[i];for(const e of o)s[e]=s[e]||a}}const a=Object.keys(s).filter((function(e){return!s[e]})).map((function(e){return Rn(m(e),(function(){return new t.constructor(e,t.__opts).destroy()}))()}));return Promise.all(a).then((function(){return{ok:!0}}))}catch(e){if(404===e.status)return{ok:!0};throw e}}(t)},function(...e){var t=e.pop(),n=_.apply(this,e);return"function"==typeof t&&kn(n,t),n})}}("mrviews",(function(e,t){if("function"==typeof e&&2===e.length){var n=e;return function(e){return n(e,t)}}return jn(e.toString(),t)}),(function(e){var t=e.toString(),n=function(e){if(/^_sum/.test(e))return $n;if(/^_count/.test(e))return Gn;if(/^_stats/.test(e))return qn;if(/^_/.test(e))throw new Error(e+" is not a supported reduce function.")}(t);return n||jn(t)})),Kn={query:function(e,t,n){return Xn.query.call(this,e,t,n)},viewCleanup:function(e){return Xn.viewCleanup.call(this,e)}};function Jn(e,t){var n=Object.keys(t._attachments);return Promise.all(n.map((function(n){return e.getAttachment(t._id,n,{rev:t._rev})})))}var Zn="pouchdb";function Qn(e,t,n,r,i){return e.get(t).catch((function(n){if(404===n.status)return"http"!==e.adapter&&"https"!==e.adapter||A(404,"PouchDB is just checking if a remote checkpoint exists."),{session_id:r,_id:t,history:[],replicator:Zn,version:1};throw n})).then((function(o){if(!i.cancelled&&o.last_seq!==n)return o.history=(o.history||[]).filter((function(e){return e.session_id!==r})),o.history.unshift({last_seq:n,session_id:r}),o.history=o.history.slice(0,5),o.version=1,o.replicator=Zn,o.session_id=r,o.last_seq=n,e.put(o).catch((function(o){if(409===o.status)return Qn(e,t,n,r,i);throw o}))}))}class er{constructor(e,t,n,r,i={writeSourceCheckpoint:!0,writeTargetCheckpoint:!0}){this.src=e,this.target=t,this.id=n,this.returnValue=r,this.opts=i,void 0===i.writeSourceCheckpoint&&(i.writeSourceCheckpoint=!0),void 0===i.writeTargetCheckpoint&&(i.writeTargetCheckpoint=!0)}writeCheckpoint(e,t){var n=this;return this.updateTarget(e,t).then((function(){return n.updateSource(e,t)}))}updateTarget(e,t){return this.opts.writeTargetCheckpoint?Qn(this.target,this.id,e,t,this.returnValue):Promise.resolve(!0)}updateSource(e,t){if(this.opts.writeSourceCheckpoint){var n=this;return Qn(this.src,this.id,e,t,this.returnValue).catch((function(e){if(ir(e))return n.opts.writeSourceCheckpoint=!1,!0;throw e}))}return Promise.resolve(!0)}getCheckpoint(){var e=this;return e.opts.writeSourceCheckpoint||e.opts.writeTargetCheckpoint?e.opts&&e.opts.writeSourceCheckpoint&&!e.opts.writeTargetCheckpoint?e.src.get(e.id).then((function(e){return e.last_seq||0})).catch((function(e){if(404!==e.status)throw e;return 0})):e.target.get(e.id).then((function(t){return e.opts&&e.opts.writeTargetCheckpoint&&!e.opts.writeSourceCheckpoint?t.last_seq||0:e.src.get(e.id).then((function(e){return t.version!==e.version?0:(n=t.version?t.version.toString():"undefined")in tr?tr[n](t,e):0;var n}),(function(n){if(404===n.status&&t.last_seq)return e.src.put({_id:e.id,last_seq:0}).then((function(){return 0}),(function(n){return ir(n)?(e.opts.writeSourceCheckpoint=!1,t.last_seq):0}));throw n}))})).catch((function(e){if(404!==e.status)throw e;return 0})):Promise.resolve(0)}}var tr={undefined:function(e,t){return 0===_t(e.last_seq,t.last_seq)?t.last_seq:0},1:function(e,t){return(n=t,r=e,n.session_id===r.session_id?{last_seq:n.last_seq,history:n.history}:nr(n.history,r.history)).last_seq;var n,r}};function nr(e,t){var n=e[0],r=e.slice(1),i=t[0],o=t.slice(1);return n&&0!==t.length?rr(n.session_id,t)?{last_seq:n.last_seq,history:e}:rr(i.session_id,r)?{last_seq:i.last_seq,history:o}:nr(r,o):{last_seq:0,history:[]}}function rr(e,t){var n=t[0],r=t.slice(1);return!(!e||0===t.length)&&(e===n.session_id||rr(e,r))}function ir(e){return"number"==typeof e.status&&4===Math.floor(e.status/100)}function or(e,t,n,r,i){return this instanceof er?or:new er(e,t,n,r,i)}var sr=0;function ar(e,t,n,r,i){var o,s,a,l,c=[],u={seq:0,changes:[],docs:[]},d=!1,h=!1,f=!1,p=0,m=0,g=n.continuous||n.live||!1,y=n.batch_size||100,_=n.batches_limit||10,v=n.style||"all_docs",w=!1,x=n.doc_ids,S=n.selector,C=[],M=Te();i=i||{ok:!0,start_time:(new Date).toISOString(),docs_read:0,docs_written:0,doc_write_failures:0,errors:[]};var T={};function E(){return a?Promise.resolve():function(e,t,n){var r=n.doc_ids?n.doc_ids.sort(_t):"",i=n.filter?n.filter.toString():"",o="",s="",a="";return n.selector&&(a=JSON.stringify(n.selector)),n.filter&&n.query_params&&(o=JSON.stringify(function(e){return Object.keys(e).sort(_t).reduce((function(t,n){return t[n]=e[n],t}),{})}(n.query_params))),n.filter&&"_view"===n.filter&&(s=n.view.toString()),Promise.all([e.id(),t.id()]).then((function(e){var t=e[0]+e[1]+i+s+o+r+a;return new Promise((function(e){Se(t,e)}))})).then((function(e){return"_local/"+e.replace(/\//g,".").replace(/\+/g,"_")}))}(e,t,n).then((function(i){s=i;var o;o=!1===n.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!1}:"source"===n.checkpoint?{writeSourceCheckpoint:!0,writeTargetCheckpoint:!1}:"target"===n.checkpoint?{writeSourceCheckpoint:!1,writeTargetCheckpoint:!0}:{writeSourceCheckpoint:!0,writeTargetCheckpoint:!0},a=new or(e,t,s,r,o)}))}function D(){if(C=[],0!==o.docs.length){var e=o.docs,s={timeout:n.timeout};return t.bulkDocs({docs:e,new_edits:!1},s).then((function(t){if(r.cancelled)throw N(),new Error("cancelled");var n=Object.create(null);t.forEach((function(e){e.error&&(n[e.id]=e)}));var o=Object.keys(n).length;i.doc_write_failures+=o,i.docs_written+=e.length-o,e.forEach((function(e){var t=n[e._id];if(t){i.errors.push(t);var o=(t.name||"").toLowerCase();if("unauthorized"!==o&&"forbidden"!==o)throw t;r.emit("denied",b(t))}else C.push(e)}))}),(function(t){throw i.doc_write_failures+=e.length,t}))}}function R(){if(o.error)throw new Error("There was a problem getting docs.");i.last_seq=m=o.seq;var t=b(i);return C.length&&(t.docs=C,"number"==typeof o.pending&&(t.pending=o.pending,delete o.pending),r.emit("change",t)),d=!0,e.info().then((function(t){var n=e.activeTasks.get(l);if(o&&n){var r=n.completed_items||0,i=parseInt(t.update_seq,10)-parseInt(p,10);e.activeTasks.update(l,{completed_items:r+o.changes.length,total_items:i})}})),a.writeCheckpoint(o.seq,M).then((function(){if(r.emit("checkpoint",{checkpoint:o.seq}),d=!1,r.cancelled)throw N(),new Error("cancelled");o=void 0,F()})).catch((function(e){throw B(e),e}))}function O(){return function(e,t,n,r){n=b(n);var i=[],o=!0;return Promise.resolve().then((function(){var s=function(e){var t=[];return Object.keys(e).forEach((function(n){e[n].missing.forEach((function(e){t.push({id:n,rev:e})}))})),{docs:t,revs:!0,latest:!0}}(n);if(s.docs.length)return e.bulkGet(s).then((function(n){if(r.cancelled)throw new Error("cancelled");return Promise.all(n.results.map((function(n){return Promise.all(n.docs.map((function(n){var r=n.ok;return n.error&&(o=!1),r&&r._attachments?function(e,t,n){var r=ee(t)&&!ee(e),i=Object.keys(n._attachments);return r?e.get(n._id).then((function(r){return Promise.all(i.map((function(i){return function(e,t,n){return!e._attachments||!e._attachments[n]||e._attachments[n].digest!==t._attachments[n].digest}(r,n,i)?t.getAttachment(n._id,i):e.getAttachment(r._id,i)})))})).catch((function(e){if(404!==e.status)throw e;return Jn(t,n)})):Jn(t,n)}(t,e,r).then((e=>{var t=Object.keys(r._attachments);return e.forEach((function(e,n){var i=r._attachments[t[n]];delete i.stub,delete i.length,i.data=e})),r})):r})))}))).then((function(e){i=i.concat(e.flat().filter(Boolean))}))}))})).then((function(){return{ok:o,docs:i}}))}(e,t,o.diffs,r).then((function(e){o.error=!e.ok,e.docs.forEach((function(e){delete o.diffs[e._id],i.docs_read++,o.docs.push(e)}))}))}function A(){var e;r.cancelled||o||(0!==c.length?(o=c.shift(),r.emit("checkpoint",{start_next_batch:o.seq}),(e={},o.changes.forEach((function(t){r.emit("checkpoint",{revs_diff:t}),"_user/"!==t.id&&(e[t.id]=t.changes.map((function(e){return e.rev})))})),t.revsDiff(e).then((function(e){if(r.cancelled)throw N(),new Error("cancelled");o.diffs=e}))).then(O).then(D).then(R).then(A).catch((function(e){P("batch processing terminated with error",e)}))):I(!0))}function I(e){0!==u.changes.length?(e||h||u.changes.length>=y)&&(c.push(u),u={seq:0,changes:[],docs:[]},"pending"!==r.state&&"stopped"!==r.state||(r.state="active",r.emit("active")),A()):0!==c.length||o||((g&&T.live||h)&&(r.state="pending",r.emit("paused")),h&&N())}function P(e,t){f||(t.message||(t.message=e),i.ok=!1,i.status="aborting",c=[],u={seq:0,changes:[],docs:[]},N(t))}function N(o){if(!(f||r.cancelled&&(i.status="cancelled",d)))if(i.status=i.status||"complete",i.end_time=(new Date).toISOString(),i.last_seq=m,f=!0,e.activeTasks.remove(l,o),o){(o=K(o)).result=i;var s=(o.name||"").toLowerCase();"unauthorized"===s||"forbidden"===s?(r.emit("error",o),r.removeAllListeners()):function(e,t,n,r){if(!1===e.retry)return t.emit("error",n),void t.removeAllListeners();if("function"!=typeof e.back_off_function&&(e.back_off_function=L),t.emit("requestError",n),"active"===t.state||"pending"===t.state){t.emit("paused",n),t.state="stopped";var i=function(){e.current_back_off=sr};t.once("paused",(function(){t.removeListener("active",i)})),t.once("active",i)}e.current_back_off=e.current_back_off||sr,e.current_back_off=e.back_off_function(e.current_back_off),setTimeout(r,e.current_back_off)}(n,r,o,(function(){ar(e,t,n,r)}))}else r.emit("complete",i),r.removeAllListeners()}function H(t,i,o){if(r.cancelled)return N();if("number"==typeof i&&(u.pending=i),Z(n)(t))u.seq=t.seq||o,u.changes.push(t),r.emit("checkpoint",{pending_batch:u.seq}),k((function(){I(0===c.length&&T.live)}));else{var s=e.activeTasks.get(l);if(s){var a=s.completed_items||0;e.activeTasks.update(l,{completed_items:++a})}}}function j(e){if(w=!1,r.cancelled)return N();if(e.results.length>0)T.since=e.results[e.results.length-1].seq,F(),I(!0);else{var t=function(){g?(T.live=!0,F()):h=!0,I(!0)};o||0!==e.results.length?t():(d=!0,a.writeCheckpoint(e.last_seq,M).then((function(){if(d=!1,i.last_seq=m=e.last_seq,r.cancelled)throw N(),new Error("cancelled");t()})).catch(B))}}function U(e){if(w=!1,r.cancelled)return N();P("changes rejected",e)}function F(){if(!w&&!h&&c.length<_){w=!0,r._changes&&(r.removeListener("cancel",r._abortChanges),r._changes.cancel()),r.once("cancel",i);var t=e.changes(T).on("change",H);t.then(o,o),t.then(j).catch(U),n.retry&&(r._changes=t,r._abortChanges=i)}function i(){t.cancel()}function o(){r.removeListener("cancel",i)}}function Y(t){return e.info().then((function(r){var i=void 0===n.since?parseInt(r.update_seq,10)-parseInt(t,10):parseInt(r.update_seq,10);return l=e.activeTasks.add({name:`${g?"continuous ":""}replication from ${r.db_name}`,total_items:i}),t}))}function W(){E().then((function(){if(!r.cancelled)return a.getCheckpoint().then(Y).then((function(e){p=e,T={since:m=e,limit:y,batch_size:y,style:v,doc_ids:x,selector:S,return_docs:!0},n.filter&&("string"!=typeof n.filter?T.include_docs=!0:T.filter=n.filter),"heartbeat"in n&&(T.heartbeat=n.heartbeat),"timeout"in n&&(T.timeout=n.timeout),n.query_params&&(T.query_params=n.query_params),n.view&&(T.view=n.view),F()}));N()})).catch((function(e){P("getCheckpoint rejected with ",e)}))}function B(e){d=!1,P("writeCheckpoint completed with error",e)}r.ready(e,t),r.cancelled?N():(r._addedListeners||(r.once("cancel",N),"function"==typeof n.complete&&(r.once("error",n.complete),r.once("complete",(function(e){n.complete(null,e)}))),r._addedListeners=!0),void 0===n.since?W():E().then((function(){return d=!0,a.writeCheckpoint(n.since,M)})).then((function(){d=!1,r.cancelled?N():(m=n.since,W())})).catch(B))}class lr extends(m()){constructor(){super(),this.cancelled=!1,this.state="pending";const e=new Promise(((e,t)=>{this.once("complete",e),this.once("error",t)}));this.then=function(t,n){return e.then(t,n)},this.catch=function(t){return e.catch(t)},this.catch((function(){}))}cancel(){this.cancelled=!0,this.state="cancelled",this.emit("cancel")}ready(e,t){if(this._readyCalled)return;this._readyCalled=!0;const n=()=>{this.cancel()};function r(){e.removeListener("destroyed",n),t.removeListener("destroyed",n)}e.once("destroyed",n),t.once("destroyed",n),this.once("complete",r),this.once("error",r)}}function cr(e,t){var n=t.PouchConstructor;return"string"==typeof e?new n(e,t):e}function ur(e,t,n,r){if("function"==typeof n&&(r=n,n={}),void 0===n&&(n={}),n.doc_ids&&!Array.isArray(n.doc_ids))throw K(z,"`doc_ids` filter parameter is not a list.");n.complete=r,(n=b(n)).continuous=n.continuous||n.live,n.retry="retry"in n&&n.retry,n.PouchConstructor=n.PouchConstructor||this;var i=new lr(n);return ar(cr(e,n),cr(t,n),n,i),i}function dr(e,t,n,r){return"function"==typeof n&&(r=n,n={}),void 0===n&&(n={}),(n=b(n)).PouchConstructor=n.PouchConstructor||this,e=cr(e,n),t=cr(t,n),new hr(e,t,n,r)}class hr extends(m()){constructor(e,t,n,r){super(),this.canceled=!1;const i=n.push?Object.assign({},n,n.push):n,o=n.pull?Object.assign({},n,n.pull):n;this.push=ur(e,t,i),this.pull=ur(t,e,o),this.pushPaused=!0,this.pullPaused=!0;const s=e=>{this.emit("change",{direction:"pull",change:e})},a=e=>{this.emit("change",{direction:"push",change:e})},l=e=>{this.emit("denied",{direction:"push",doc:e})},c=e=>{this.emit("denied",{direction:"pull",doc:e})},u=()=>{this.pushPaused=!0,this.pullPaused&&this.emit("paused")},d=()=>{this.pullPaused=!0,this.pushPaused&&this.emit("paused")},h=()=>{this.pushPaused=!1,this.pullPaused&&this.emit("active",{direction:"push"})},f=()=>{this.pullPaused=!1,this.pushPaused&&this.emit("active",{direction:"pull"})};let p={};const m=e=>(t,n)=>{("change"===t&&(n===s||n===a)||"denied"===t&&(n===c||n===l)||"paused"===t&&(n===d||n===u)||"active"===t&&(n===f||n===h))&&(t in p||(p[t]={}),p[t][e]=!0,2===Object.keys(p[t]).length&&this.removeAllListeners(t))};function g(e,t,n){-1==e.listeners(t).indexOf(n)&&e.on(t,n)}n.live&&(this.push.on("complete",this.pull.cancel.bind(this.pull)),this.pull.on("complete",this.push.cancel.bind(this.push))),this.on("newListener",(function(e){"change"===e?(g(this.pull,"change",s),g(this.push,"change",a)):"denied"===e?(g(this.pull,"denied",c),g(this.push,"denied",l)):"active"===e?(g(this.pull,"active",f),g(this.push,"active",h)):"paused"===e&&(g(this.pull,"paused",d),g(this.push,"paused",u))})),this.on("removeListener",(function(e){"change"===e?(this.pull.removeListener("change",s),this.push.removeListener("change",a)):"denied"===e?(this.pull.removeListener("denied",c),this.push.removeListener("denied",l)):"active"===e?(this.pull.removeListener("active",f),this.push.removeListener("active",h)):"paused"===e&&(this.pull.removeListener("paused",d),this.push.removeListener("paused",u))})),this.pull.on("removeListener",m("pull")),this.push.on("removeListener",m("push"));const y=Promise.all([this.push,this.pull]).then((e=>{const t={push:e[0],pull:e[1]};return this.emit("complete",t),r&&r(null,t),this.removeAllListeners(),t}),(e=>{if(this.cancel(),r?r(e):this.emit("error",e),this.removeAllListeners(),r)throw e}));this.then=function(e,t){return y.then(e,t)},this.catch=function(e){return y.catch(e)}}cancel(){this.canceled||(this.canceled=!0,this.push.cancel(),this.pull.cancel())}}nt.plugin((function(e){e.adapter("idb",gn,!0)})).plugin((function(e){e.adapter("http",Mn,!1),e.adapter("https",Mn,!1)})).plugin(Kn).plugin((function(e){e.replicate=ur,e.sync=dr,Object.defineProperty(e.prototype,"replicate",{get:function(){var e=this;return void 0===this.replicateMethods&&(this.replicateMethods={from:function(t,n,r){return e.constructor.replicate(t,e,n,r)},to:function(t,n,r){return e.constructor.replicate(e,t,n,r)}}),this.replicateMethods}}),e.prototype.sync=function(e,t,n){return this.constructor.sync(this,e,t,n)}}));const fr=nt},75735:e=>{e.exports=function(e){"use strict";var t=["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];function n(e,t){var n=e[0],r=e[1],i=e[2],o=e[3];r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[0]-680876936|0)<<7|n>>>25)+r|0)&r|~n&i)+t[1]-389564586|0)<<12|o>>>20)+n|0)&n|~o&r)+t[2]+606105819|0)<<17|i>>>15)+o|0)&o|~i&n)+t[3]-1044525330|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[4]-176418897|0)<<7|n>>>25)+r|0)&r|~n&i)+t[5]+1200080426|0)<<12|o>>>20)+n|0)&n|~o&r)+t[6]-1473231341|0)<<17|i>>>15)+o|0)&o|~i&n)+t[7]-45705983|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[8]+1770035416|0)<<7|n>>>25)+r|0)&r|~n&i)+t[9]-1958414417|0)<<12|o>>>20)+n|0)&n|~o&r)+t[10]-42063|0)<<17|i>>>15)+o|0)&o|~i&n)+t[11]-1990404162|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&i|~r&o)+t[12]+1804603682|0)<<7|n>>>25)+r|0)&r|~n&i)+t[13]-40341101|0)<<12|o>>>20)+n|0)&n|~o&r)+t[14]-1502002290|0)<<17|i>>>15)+o|0)&o|~i&n)+t[15]+1236535329|0)<<22|r>>>10)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[1]-165796510|0)<<5|n>>>27)+r|0)&i|r&~i)+t[6]-1069501632|0)<<9|o>>>23)+n|0)&r|n&~r)+t[11]+643717713|0)<<14|i>>>18)+o|0)&n|o&~n)+t[0]-373897302|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[5]-701558691|0)<<5|n>>>27)+r|0)&i|r&~i)+t[10]+38016083|0)<<9|o>>>23)+n|0)&r|n&~r)+t[15]-660478335|0)<<14|i>>>18)+o|0)&n|o&~n)+t[4]-405537848|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[9]+568446438|0)<<5|n>>>27)+r|0)&i|r&~i)+t[14]-1019803690|0)<<9|o>>>23)+n|0)&r|n&~r)+t[3]-187363961|0)<<14|i>>>18)+o|0)&n|o&~n)+t[8]+1163531501|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r&o|i&~o)+t[13]-1444681467|0)<<5|n>>>27)+r|0)&i|r&~i)+t[2]-51403784|0)<<9|o>>>23)+n|0)&r|n&~r)+t[7]+1735328473|0)<<14|i>>>18)+o|0)&n|o&~n)+t[12]-1926607734|0)<<20|r>>>12)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[5]-378558|0)<<4|n>>>28)+r|0)^r^i)+t[8]-2022574463|0)<<11|o>>>21)+n|0)^n^r)+t[11]+1839030562|0)<<16|i>>>16)+o|0)^o^n)+t[14]-35309556|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[1]-1530992060|0)<<4|n>>>28)+r|0)^r^i)+t[4]+1272893353|0)<<11|o>>>21)+n|0)^n^r)+t[7]-155497632|0)<<16|i>>>16)+o|0)^o^n)+t[10]-1094730640|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[13]+681279174|0)<<4|n>>>28)+r|0)^r^i)+t[0]-358537222|0)<<11|o>>>21)+n|0)^n^r)+t[3]-722521979|0)<<16|i>>>16)+o|0)^o^n)+t[6]+76029189|0)<<23|r>>>9)+i|0,r=((r+=((i=((i+=((o=((o+=((n=((n+=(r^i^o)+t[9]-640364487|0)<<4|n>>>28)+r|0)^r^i)+t[12]-421815835|0)<<11|o>>>21)+n|0)^n^r)+t[15]+530742520|0)<<16|i>>>16)+o|0)^o^n)+t[2]-995338651|0)<<23|r>>>9)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[0]-198630844|0)<<6|n>>>26)+r|0)|~i))+t[7]+1126891415|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[14]-1416354905|0)<<15|i>>>17)+o|0)|~n))+t[5]-57434055|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[12]+1700485571|0)<<6|n>>>26)+r|0)|~i))+t[3]-1894986606|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[10]-1051523|0)<<15|i>>>17)+o|0)|~n))+t[1]-2054922799|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[8]+1873313359|0)<<6|n>>>26)+r|0)|~i))+t[15]-30611744|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[6]-1560198380|0)<<15|i>>>17)+o|0)|~n))+t[13]+1309151649|0)<<21|r>>>11)+i|0,r=((r+=((o=((o+=(r^((n=((n+=(i^(r|~o))+t[4]-145523070|0)<<6|n>>>26)+r|0)|~i))+t[11]-1120210379|0)<<10|o>>>22)+n|0)^((i=((i+=(n^(o|~r))+t[2]+718787259|0)<<15|i>>>17)+o|0)|~n))+t[9]-343485551|0)<<21|r>>>11)+i|0,e[0]=n+e[0]|0,e[1]=r+e[1]|0,e[2]=i+e[2]|0,e[3]=o+e[3]|0}function r(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return n}function i(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e[t]+(e[t+1]<<8)+(e[t+2]<<16)+(e[t+3]<<24);return n}function o(e){var t,i,o,s,a,l,c=e.length,u=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=c;t+=64)n(u,r(e.substring(t-64,t)));for(i=(e=e.substring(t-64)).length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(o[t>>2]|=128<<(t%4<<3),t>55)for(n(u,o),t=0;t<16;t+=1)o[t]=0;return s=(s=8*c).toString(16).match(/(.*?)(.{0,8})$/),a=parseInt(s[2],16),l=parseInt(s[1],16)||0,o[14]=a,o[15]=l,n(u,o),u}function s(e){var n,r="";for(n=0;n<4;n+=1)r+=t[e>>8*n+4&15]+t[e>>8*n&15];return r}function a(e){var t;for(t=0;tc?new ArrayBuffer(0):(r=c-l,i=new ArrayBuffer(r),o=new Uint8Array(i),s=new Uint8Array(this,l,r),o.set(s),i)}}(),u.prototype.append=function(e){return this.appendBinary(l(e)),this},u.prototype.appendBinary=function(e){this._buff+=e,this._length+=e.length;var t,i=this._buff.length;for(t=64;t<=i;t+=64)n(this._hash,r(this._buff.substring(t-64,t)));return this._buff=this._buff.substring(t-64),this},u.prototype.end=function(e){var t,n,r=this._buff,i=r.length,o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=r.charCodeAt(t)<<(t%4<<3);return this._finish(o,i),n=a(this._hash),e&&(n=c(n)),this.reset(),n},u.prototype.reset=function(){return this._buff="",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},u.prototype.setState=function(e){return this._buff=e.buff,this._length=e.length,this._hash=e.hash,this},u.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},u.prototype._finish=function(e,t){var r,i,o,s=t;if(e[s>>2]|=128<<(s%4<<3),s>55)for(n(this._hash,e),s=0;s<16;s+=1)e[s]=0;r=(r=8*this._length).toString(16).match(/(.*?)(.{0,8})$/),i=parseInt(r[2],16),o=parseInt(r[1],16)||0,e[14]=i,e[15]=o,n(this._hash,e)},u.hash=function(e,t){return u.hashBinary(l(e),t)},u.hashBinary=function(e,t){var n=a(o(e));return t?c(n):n},u.ArrayBuffer=function(){this.reset()},u.ArrayBuffer.prototype.append=function(e){var t,r,o,s,a,l=(r=this._buff.buffer,o=e,s=!0,(a=new Uint8Array(r.byteLength+o.byteLength)).set(new Uint8Array(r)),a.set(new Uint8Array(o),r.byteLength),s?a:a.buffer),c=l.length;for(this._length+=e.byteLength,t=64;t<=c;t+=64)n(this._hash,i(l.subarray(t-64,t)));return this._buff=t-64>2]|=r[t]<<(t%4<<3);return this._finish(o,i),n=a(this._hash),e&&(n=c(n)),this.reset(),n},u.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},u.ArrayBuffer.prototype.getState=function(){var e,t=u.prototype.getState.call(this);return t.buff=(e=t.buff,String.fromCharCode.apply(null,new Uint8Array(e))),t},u.ArrayBuffer.prototype.setState=function(e){return e.buff=function(e,t){var n,r=e.length,i=new ArrayBuffer(r),o=new Uint8Array(i);for(n=0;n>2]|=e[t]<<(t%4<<3);if(o[t>>2]|=128<<(t%4<<3),t>55)for(n(u,o),t=0;t<16;t+=1)o[t]=0;return s=(s=8*c).toString(16).match(/(.*?)(.{0,8})$/),a=parseInt(s[2],16),l=parseInt(s[1],16)||0,o[14]=a,o[15]=l,n(u,o),u}(new Uint8Array(e)));return t?c(r):r},u}()},22831:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"MAX",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v1ToV6",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"v6",{enumerable:!0,get:function(){return h.default}}),Object.defineProperty(t,"v6ToV1",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(t,"v7",{enumerable:!0,get:function(){return p.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return m.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return g.default}});var r=y(n(74213)),i=y(n(14808)),o=y(n(96792)),s=y(n(49910)),a=y(n(13518)),l=y(n(30343)),c=y(n(14948)),u=y(n(45073)),d=y(n(77186)),h=y(n(74671)),f=y(n(43507)),p=y(n(30744)),m=y(n(37037)),g=y(n(7775));function y(e){return e&&e.__esModule?e:{default:e}}},74213:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="ffffffff-ffff-ffff-ffff-ffffffffffff"},22311:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){var n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function i(e,t,n,i,o,s){return r((a=r(r(t,e),r(i,s)))<<(l=o)|a>>>32-l,n);var a,l}function o(e,t,n,r,o,s,a){return i(t&n|~t&r,e,t,o,s,a)}function s(e,t,n,r,o,s,a){return i(t&r|n&~r,e,t,o,s,a)}function a(e,t,n,r,o,s,a){return i(t^n^r,e,t,o,s,a)}function l(e,t,n,r,o,s,a){return i(n^(t|~r),e,t,o,s,a)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){if("string"==typeof e){var t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(var i=0;i>5]>>>i%32&255,s=parseInt(r.charAt(o>>>4&15)+r.charAt(15&o),16);t.push(s)}return t}(function(e,t){e[t>>5]|=128<>5]|=(255&e[i/8])<{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);t.default={randomUUID:n}},14808:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},96792:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(37037))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,i.default)(e))throw TypeError("Invalid UUID");var t,n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},27656:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i},2858:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&!(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};var r=new Uint8Array(16)},9042:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=function(e){var t=[1518500249,1859775393,2400959708,3395469782],i=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){var o=unescape(encodeURIComponent(e));e=[];for(var s=0;s>>0;w=v,v=_,_=r(b,30)>>>0,b=y,y=C}i[0]=i[0]+y>>>0,i[1]=i[1]+b>>>0,i[2]=i[2]+_>>>0,i[3]=i[3]+v>>>0,i[4]=i[4]+w>>>0}return[i[0]>>24&255,i[0]>>16&255,i[0]>>8&255,255&i[0],i[1]>>24&255,i[1]>>16&255,i[1]>>8&255,255&i[1],i[2]>>24&255,i[2]>>16&255,i[2]>>8&255,255&i[2],i[3]>>24&255,i[3]>>16&255,i[3]>>8&255,255&i[3],i[4]>>24&255,i[4]>>16&255,i[4]>>8&255,255&i[4]]}},49910:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=a;for(var r,i=(r=n(37037))&&r.__esModule?r:{default:r},o=[],s=0;s<256;++s)o.push((s+256).toString(16).slice(1));function a(e,t=0){return(o[e[t+0]]+o[e[t+1]]+o[e[t+2]]+o[e[t+3]]+"-"+o[e[t+4]]+o[e[t+5]]+"-"+o[e[t+6]]+o[e[t+7]]+"-"+o[e[t+8]]+o[e[t+9]]+"-"+o[e[t+10]]+o[e[t+11]]+o[e[t+12]]+o[e[t+13]]+o[e[t+14]]+o[e[t+15]]).toLowerCase()}t.default=function(e,t=0){var n=a(e,t);if(!(0,i.default)(n))throw TypeError("Stringified UUID is invalid");return n}},13518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i,o,s=(r=n(2858))&&r.__esModule?r:{default:r},a=n(49910),l=0,c=0;t.default=function(e,t,n){var r=t&&n||0,u=t||new Array(16),d=(e=e||{}).node,h=e.clockseq;if(e._v6||(d||(d=i),null==h&&(h=o)),null==d||null==h){var f=e.random||(e.rng||s.default)();null==d&&(d=[f[0],f[1],f[2],f[3],f[4],f[5]],i||e._v6||(d[0]|=1,i=d)),null==h&&(h=16383&(f[6]<<8|f[7]),void 0!==o||e._v6||(o=h))}var p=void 0!==e.msecs?e.msecs:Date.now(),m=void 0!==e.nsecs?e.nsecs:c+1,g=p-l+(m-c)/1e4;if(g<0&&void 0===e.clockseq&&(h=h+1&16383),(g<0||p>l)&&void 0===e.nsecs&&(m=0),m>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");l=p,c=m,o=h;var y=(1e4*(268435455&(p+=122192928e5))+m)%4294967296;u[r++]=y>>>24&255,u[r++]=y>>>16&255,u[r++]=y>>>8&255,u[r++]=255&y;var b=p/4294967296*1e4&268435455;u[r++]=b>>>8&255,u[r++]=255&b,u[r++]=b>>>24&15|16,u[r++]=b>>>16&255,u[r++]=h>>>8|128,u[r++]=255&h;for(var _=0;_<6;++_)u[r+_]=d[_];return t||(0,a.unsafeStringify)(u)}},30343:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=(t="string"==typeof e?(0,i.default)(e):e,Uint8Array.of((15&t[6])<<4|t[7]>>4&15,(15&t[7])<<4|(240&t[4])>>4,(15&t[4])<<4|(240&t[5])>>4,(15&t[5])<<4|(240&t[0])>>4,(15&t[0])<<4|(240&t[1])>>4,(15&t[1])<<4|(240&t[2])>>4,96|15&t[2],t[3],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15]));return"string"==typeof e?(0,o.unsafeStringify)(n):n};var r,i=(r=n(96792))&&r.__esModule?r:{default:r},o=n(49910)},14948:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(59025)),i=o(n(22311));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,r.default)("v3",48,i.default);t.default=s},59025:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,s,a){var l;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));for(var t=[],n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(46140)),i=s(n(2858)),o=n(49910);function s(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();var s=(e=e||{}).random||(e.rng||i.default)();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,t){n=n||0;for(var a=0;a<16;++a)t[n+a]=s[a];return t}return(0,o.unsafeStringify)(s)}},77186:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(59025)),i=o(n(9042));function o(e){return e&&e.__esModule?e:{default:e}}var s=(0,r.default)("v5",80,i.default);t.default=s},74671:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e={},t,n=0){var s=(0,i.default)(l(l({},e),{},{_v6:!0}),new Uint8Array(16));if(s=(0,o.default)(s),t){for(var a=0;a<16;a++)t[n+a]=s[a];return t}return(0,r.unsafeStringify)(s)};var r=n(49910),i=s(n(13518)),o=s(n(30343));function s(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t,n=(t="string"==typeof e?(0,i.default)(e):e,Uint8Array.of((15&t[3])<<4|t[4]>>4&15,(15&t[4])<<4|(240&t[5])>>4,(15&t[5])<<4|15&t[6],t[7],(15&t[1])<<4|(240&t[2])>>4,(15&t[2])<<4|(240&t[3])>>4,16|(240&t[0])>>4,(15&t[0])<<4|(240&t[1])>>4,t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15]));return"string"==typeof e?(0,o.unsafeStringify)(n):n};var r,i=(r=n(96792))&&r.__esModule?r:{default:r},o=n(49910)},30744:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(2858))&&r.__esModule?r:{default:r},o=n(49910),s=null,a=null,l=0;t.default=function(e,t,n){e=e||{};var r=t&&n||0,c=t||new Uint8Array(16),u=e.random||(e.rng||i.default)(),d=void 0!==e.msecs?e.msecs:Date.now(),h=void 0!==e.seq?e.seq:null,f=a,p=s;return d>l&&void 0===e.msecs&&(l=d,null!==h&&(f=null,p=null)),null!==h&&(h>2147483647&&(h=2147483647),f=h>>>19&4095,p=524287&h),null!==f&&null!==p||(f=(f=127&u[6])<<8|u[7],p=(p=(p=63&u[8])<<8|u[9])<<5|u[10]>>>3),d+1e4>l&&null===h?++p>524287&&(p=0,++f>4095&&(f=0,l++)):l=d,a=f,s=p,c[r++]=l/1099511627776&255,c[r++]=l/4294967296&255,c[r++]=l/16777216&255,c[r++]=l/65536&255,c[r++]=l/256&255,c[r++]=255&l,c[r++]=f>>>4&15|112,c[r++]=255&f,c[r++]=p>>>13&63|128,c[r++]=p>>>5&255,c[r++]=p<<3&255|7&u[10],c[r++]=u[11],c[r++]=u[12],c[r++]=u[13],c[r++]=u[14],c[r++]=u[15],t||(0,o.unsafeStringify)(c)}},37037:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(27656))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&i.default.test(e)}},7775:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,i=(r=n(37037))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,i.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},34655:(e,t)=>{"use strict";function n(e,t,n){var r=n[n.length-1];e===r.element&&(n.pop(),r=n[n.length-1]);var i=r.element,o=r.index;Array.isArray(i)?i.push(e):o===t.length-2?i[t.pop()]=e:t.push(e)}t.stringify=function(e){var t=[];t.push({obj:e});for(var n,r,i,o,s,a,l,c,u,d,h="";n=t.pop();)if(r=n.obj,h+=n.prefix||"",i=n.val||"")h+=i;else if("object"!=typeof r)h+=void 0===r?null:JSON.stringify(r);else if(null===r)h+="null";else if(Array.isArray(r)){for(t.push({val:"]"}),o=r.length-1;o>=0;o--)s=0===o?"":",",t.push({obj:r[o],prefix:s});t.push({val:"["})}else{for(l in a=[],r)r.hasOwnProperty(l)&&a.push(l);for(t.push({val:"}"}),o=a.length-1;o>=0;o--)u=r[c=a[o]],d=o>0?",":"",d+=JSON.stringify(c)+":",t.push({obj:u,prefix:d});t.push({val:"{"})}return h},t.parse=function(e){for(var t,r,i,o,s,a,l,c,u,d=[],h=[],f=0;;)if("}"!==(t=e[f++])&&"]"!==t&&void 0!==t)switch(t){case" ":case"\t":case"\n":case":":case",":break;case"n":f+=3,n(null,d,h);break;case"t":f+=3,n(!0,d,h);break;case"f":f+=4,n(!1,d,h);break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"-":for(r="",f--;;){if(i=e[f++],!/[\d\.\-e\+]/.test(i)){f--;break}r+=i}n(parseFloat(r),d,h);break;case'"':for(o="",s=void 0,a=0;'"'!==(l=e[f++])||"\\"===s&&a%2==1;)o+=l,"\\"===(s=l)?a++:a=0;n(JSON.parse('"'+o+'"'),d,h);break;case"[":c={element:[],index:d.length},d.push(c.element),h.push(c);break;case"{":u={element:{},index:d.length},d.push(u.element),h.push(u);break;default:throw new Error("unexpectedly reached end of input: "+t)}else{if(1===d.length)return d.pop();n(d.pop(),d,h)}}},26113:e=>{"use strict";const t=()=>window,n=()=>window.document,r=(e,t)=>window.setTimeout(e,t),i=function(e,t,n,r){e.addEventListener(t,n,!!r)},o=function(e,t,n,r){e.removeEventListener(t,n,!!r)},s=function(e,t){return-1!==(" "+e.className+" ").indexOf(" "+t+" ")},a=function(e,t){s(e,t)||(e.className=""===e.className?t:e.className+" "+t)},l=function(e,t){var n;e.className=(n=(" "+e.className+" ").replace(" "+t+" "," ")).trim?n.trim():n.replace(/^\s+|\s+$/g,"")},c=function(e){return/Array/.test(Object.prototype.toString.call(e))},u=function(e){return/Date/.test(Object.prototype.toString.call(e))&&!isNaN(e.getTime())},d=function(e){let t=e.getDay();return 0===t||6===t},h=function(e){return e%4==0&&e%100!=0||e%400==0},f=function(e,t){return[31,h(e)?29:28,31,30,31,30,31,31,30,31,30,31][t]},p=function(e){u(e)&&e.setHours(0,0,0,0)},m=function(e,t){return e.getTime()===t.getTime()},g=function(e,t,n){let r,i;for(r in t)i=void 0!==e[r],i&&"object"==typeof t[r]&&null!==t[r]&&void 0===t[r].nodeName?u(t[r])?n&&(e[r]=new Date(t[r].getTime())):c(t[r])?n&&(e[r]=t[r].slice(0)):e[r]=g({},t[r],n):!n&&i||(e[r]=t[r]);return e},y=function(e,t,r){let i=n().createEvent("HTMLEvents");i.initEvent(t,!0,!1),i=g(i,r),e.dispatchEvent(i)},b=function(e){return e.month<0&&(e.year-=Math.ceil(Math.abs(e.month)/12),e.month+=12),e.month>11&&(e.year+=Math.floor(Math.abs(e.month)/12),e.month-=12),e},_={field:null,bound:void 0,ariaLabel:"Use the arrow keys to pick a date",position:"bottom left",reposition:!0,format:"YYYY-MM-DD",toString:null,parse:null,defaultDate:null,setDefaultDate:!1,firstDay:0,firstWeekOfYearMinDays:4,formatStrict:!1,minDate:null,maxDate:null,yearRange:10,showWeekNumber:!1,pickWholeWeek:!1,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,yearSuffix:"",showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,enableSelectionDaysInNextAndPreviousMonths:!1,numberOfMonths:1,mainCalendar:"left",container:void 0,blurFieldOnSelect:!0,i18n:{previousMonth:"Previous Month",nextMonth:"Next Month",months:["January","February","March","April","May","June","July","August","September","October","November","December"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},theme:null,events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:!0},v=function(e,t,n){for(t+=e.firstDay;t>=7;)t-=7;return n?e.i18n.weekdaysShort[t]:e.i18n.weekdays[t]},w=function(e){let t=[],n="false";if(e.isEmpty){if(!e.showDaysInNextAndPreviousMonths)return'';t.push("is-outside-current-month"),e.enableSelectionDaysInNextAndPreviousMonths||t.push("is-selection-disabled")}return e.isDisabled&&t.push("is-disabled"),e.isToday&&t.push("is-today"),e.isSelected&&(t.push("is-selected"),n="true"),e.hasEvent&&t.push("has-event"),e.isInRange&&t.push("is-inrange"),e.isStartRange&&t.push("is-startrange"),e.isEndRange&&t.push("is-endrange"),'"},x=function(e,t,n,r,i){let o=new Date(r,n,t),s=e.hasMoment?e.moment(o).isoWeek():function(e,t){e.setHours(0,0,0,0);let n=e.getDate(),r=e.getDay(),i=t,o=i-1,s=function(e){return(e+7-1)%7};e.setDate(n+o-s(r));let a=new Date(e.getFullYear(),0,i),l=(e.getTime()-a.getTime())/864e5;return 1+Math.round((l-o+s(a.getDay()))/7)}(o,i);return''+s+""},S=function(e,t,n,r){return''+(t?e.reverse():e).join("")+""},C=function(e,t,n,r,i,o){let s,a,l,u,d,h=e._o,f=n===h.minYear,p=n===h.maxYear,m='
',g=!0,y=!0;for(l=[],s=0;s<12;s++)l.push('");for(u='
'+h.i18n.months[r]+'
",c(h.yearRange)?(s=h.yearRange[0],a=h.yearRange[1]+1):(s=n-h.yearRange,a=1+n+h.yearRange),l=[];s=h.minYear&&l.push('");return d='
'+n+h.yearSuffix+'
",h.showMonthAfterYear?m+=d+u:m+=u+d,f&&(0===r||h.minMonth>=r)&&(g=!1),p&&(11===r||h.maxMonth<=r)&&(y=!1),0===t&&(m+='"),t===e._o.numberOfMonths-1&&(m+='"),m+"
"};function M(e){let o=this,a=o.config(e);o._onMouseDown=function(e){if(!o._v)return;let n=(e=e||t().event).target||e.srcElement;if(n)if(s(n,"is-disabled")||(!s(n,"pika-button")||s(n,"is-empty")||s(n.parentNode,"is-disabled")?s(n,"pika-prev")?o.prevMonth():s(n,"pika-next")&&o.nextMonth():(o.setDate(new Date(n.getAttribute("data-pika-year"),n.getAttribute("data-pika-month"),n.getAttribute("data-pika-day"))),a.bound&&r((function(){o.hide(),a.blurFieldOnSelect&&a.field&&a.field.blur()}),100))),s(n,"pika-select"))o._c=!0;else{if(!e.preventDefault)return e.returnValue=!1,!1;e.preventDefault()}},o._onChange=function(e){let n=(e=e||t().event).target||e.srcElement;n&&(s(n,"pika-select-month")?o.gotoMonth(n.value):s(n,"pika-select-year")&&o.gotoYear(n.value))},o._onKeyChange=function(e){if(e=e||t().event,o.isVisible())switch(e.keyCode){case 13:case 27:a.field&&a.field.blur();break;case 37:o.adjustDate("subtract",1);break;case 38:o.adjustDate("subtract",7);break;case 39:o.adjustDate("add",1);break;case 40:o.adjustDate("add",7);break;case 8:case 46:o.setDate(null)}},o._parseFieldValue=function(){if(a.parse)return a.parse(a.field.value,a.format);if(this.hasMoment){let e=this.moment(a.field.value,a.format,a.formatStrict);return e&&e.isValid()?e.toDate():null}return new Date(Date.parse(a.field.value))},o._onInputChange=function(e){let t;e.firedBy!==o&&(t=o._parseFieldValue(),u(t)&&o.setDate(t),o._v||o.show())},o._onInputFocus=function(){o.show()},o._onInputClick=function(){o.show()},o._onInputBlur=function(){let e=n().activeElement;do{if(s(e,"pika-single"))return}while(e=e.parentNode);o._c||(o._b=r((function(){o.hide()}),50)),o._c=!1},o._onClick=function(e){let n=(e=e||t().event).target||e.srcElement,r=n;if(n){!hasEventListeners&&s(n,"pika-select")&&(n.onchange||(n.setAttribute("onchange","return;"),i(n,"change",o._onChange)));do{if(s(r,"pika-single")||r===a.trigger)return}while(r=r.parentNode);o._v&&n!==a.trigger&&r!==a.trigger&&o.hide()}},o.el=n().createElement("div"),o.el.className="pika-single"+(a.isRTL?" is-rtl":"")+(a.theme?" "+a.theme:""),i(o.el,"mousedown",o._onMouseDown,!0),i(o.el,"touchend",o._onMouseDown,!0),i(o.el,"change",o._onChange),a.keyboardInput&&i(n(),"keydown",o._onKeyChange),a.field&&(a.container?a.container.appendChild(o.el):a.bound?n().body.appendChild(o.el):a.field.parentNode.insertBefore(o.el,a.field.nextSibling),i(a.field,"change",o._onInputChange),a.defaultDate||(a.defaultDate=o._parseFieldValue(),a.setDefaultDate=!0));let l=a.defaultDate;u(l)?a.setDefaultDate?o.setDate(l,!0):o.gotoDate(l):o.gotoDate(new Date),a.bound?(this.hide(),o.el.className+=" is-bound",i(a.trigger,"click",o._onInputClick),i(a.trigger,"focus",o._onInputFocus),i(a.trigger,"blur",o._onInputBlur)):this.show()}M.prototype={config:function(e){this._o||(this._o=g({},_,!0));let t=g(this._o,e,!0);t.isRTL=!!t.isRTL,t.field=t.field&&t.field.nodeName?t.field:null,t.theme="string"==typeof t.theme&&t.theme?t.theme:null,t.bound=!!(void 0!==t.bound?t.field&&t.bound:t.field),t.trigger=t.trigger&&t.trigger.nodeName?t.trigger:t.field,t.disableWeekends=!!t.disableWeekends,t.disableDayFn="function"==typeof t.disableDayFn?t.disableDayFn:null;let n=parseInt(t.numberOfMonths,10)||1;if(t.numberOfMonths=n>4?4:n,u(t.minDate)||(t.minDate=!1),u(t.maxDate)||(t.maxDate=!1),t.minDate&&t.maxDate&&t.maxDate100&&(t.yearRange=100);return t},toString:function(e){return e=e||this._o.format,u(this._d)?this._o.toString?this._o.toString(this._d,e):this.hasMoment?this.moment(this._d).format(e):this._d.toDateString():""},getMoment:function(){return this.hasMoment?this.moment(this._d):null},setMoment:function(e,t){this.hasMoment&&this.moment.isMoment(e)&&this.setDate(e.toDate(),t)},useMoment:function(e){this.hasMoment=!0,this.moment=e},getDate:function(){return u(this._d)?new Date(this._d.getTime()):null},setDate:function(e,t){if(!e)return this._d=null,this._o.field&&(this._o.field.value="",y(this._o.field,"change",{firedBy:this})),this.draw();if("string"==typeof e&&(e=new Date(Date.parse(e))),!u(e))return;let n=this._o.minDate,r=this._o.maxDate;u(n)&&er&&(e=r),this._d=new Date(e.getTime()),p(this._d),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString(),y(this._o.field,"change",{firedBy:this})),t||"function"!=typeof this._o.onSelect||this._o.onSelect.call(this,this.getDate())},clear:function(){this.setDate(null)},gotoDate:function(e){let t=!0;if(u(e)){if(this.calendars){let n=new Date(this.calendars[0].year,this.calendars[0].month,1),r=new Date(this.calendars[this.calendars.length-1].year,this.calendars[this.calendars.length-1].month,1),i=e.getTime();r.setMonth(r.getMonth()+1),r.setDate(r.getDate()-1),t=i=o&&(this._y=o,!isNaN(a)&&this._m>a&&(this._m=a));for(let e=0;e";this.el.innerHTML=l,n.bound&&"hidden"!==n.field.type&&r((function(){n.trigger.focus()}),1),"function"==typeof this._o.onDraw&&this._o.onDraw(this),n.bound&&n.field.setAttribute("aria-label",n.ariaLabel)},adjustPosition:function(){let e,r,i,o,s,c,u,d,h,f,p;this._o.container||(this.el.style.position="absolute",e=this._o.trigger,r=this.el.offsetWidth,i=this.el.offsetHeight,o=t().innerWidth||n().documentElement.clientWidth,s=t().innerHeight||n().documentElement.clientHeight,c=n().body.scrollTop||n().documentElement.scrollTop,f=!0,p=!0,h=e.getBoundingClientRect(),u=h.left+t().pageXOffset,d=h.bottom+t().pageYOffset,(this._o.reposition&&u+r>o||this._o.position.indexOf("right")>-1&&u-r+e.offsetWidth>0)&&(u=u-r+e.offsetWidth,f=!1),(this._o.reposition&&d+i>s+c||this._o.position.indexOf("top")>-1&&d-i-e.offsetHeight>0)&&(d=d-i-e.offsetHeight,p=!1),u<0&&(u=0),d<0&&(d=0),this.el.style.left=u+"px",this.el.style.top=d+"px",a(this.el,f?"left-aligned":"right-aligned"),a(this.el,p?"bottom-aligned":"top-aligned"),l(this.el,f?"right-aligned":"left-aligned"),l(this.el,p?"top-aligned":"bottom-aligned"))},render:function(e,t,n){let r=this._o,i=new Date,o=f(e,t),s=new Date(e,t,1).getDay(),a=[],l=[];p(i),r.firstDay>0&&(s-=r.firstDay,s<0&&(s+=7));let c=0===t?11:t-1,h=11===t?0:t+1,g=0===t?e-1:e,y=11===t?e+1:e,b=f(g,c),_=o+s,C=_;for(;C>7;)C-=7;_+=7-C;let M=!1;for(let n=0,f=0;n<_;n++){let p=new Date(e,t,n-s+1),_=!!u(this._d)&&m(p,this._d),v=m(p,i),C=-1!==r.events.indexOf(p.toDateString()),T=n=o+s,E=n-s+1,D=t,k=e,R=r.startRange&&m(r.startRange,p),O=r.endRange&&m(r.endRange,p),L=r.startRange&&r.endRange&&r.startRanger.maxDate||r.disableWeekends&&d(p)||r.disableDayFn&&r.disableDayFn(p),isEmpty:T,isStartRange:R,isEndRange:O,isInRange:L,showDaysInNextAndPreviousMonths:r.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:r.enableSelectionDaysInNextAndPreviousMonths};r.pickWholeWeek&&_&&(M=!0),l.push(w(A)),7==++f&&(r.showWeekNumber&&l.unshift(x(this,n-s,t,e,r.firstWeekOfYearMinDays)),a.push(S(l,r.isRTL,r.pickWholeWeek,M)),l=[],f=0,M=!1)}return function(e,t,n){return''+function(e){let t,n=[];for(e.showWeekNumber&&n.push(""),t=0;t<7;t++)n.push('");return""+(e.isRTL?n.reverse():n).join("")+""}(e)+""+t.join("")+"
'+v(e,t,!0)+"
"}(r,a,n)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),l(this.el,"is-hidden"),this._o.bound&&(i(n(),"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){let e=this._v;!1!==e&&(this._o.bound&&o(n(),"click",this._onClick),this._o.container||(this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto"),a(this.el,"is-hidden"),this._v=!1,void 0!==e&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){let e=this._o;this.hide(),o(this.el,"mousedown",this._onMouseDown,!0),o(this.el,"touchend",this._onMouseDown,!0),o(this.el,"change",this._onChange),e.keyboardInput&&o(n(),"keydown",this._onKeyChange),e.field&&(o(e.field,"change",this._onInputChange),e.bound&&(o(e.trigger,"click",this._onInputClick),o(e.trigger,"focus",this._onInputFocus),o(e.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},e.exports=M},79306:(e,t,n)=>{"use strict";var r=n(94901),i=n(16823),o=TypeError;e.exports=function(e){if(r(e))return e;throw new o(i(e)+" is not a function")}},73506:(e,t,n)=>{"use strict";var r=n(13925),i=String,o=TypeError;e.exports=function(e){if(r(e))return e;throw new o("Can't set "+i(e)+" as a prototype")}},97080:(e,t,n)=>{"use strict";var r=n(94402).has;e.exports=function(e){return r(e),e}},6469:(e,t,n)=>{"use strict";var r=n(78227),i=n(2360),o=n(24913).f,s=r("unscopables"),a=Array.prototype;void 0===a[s]&&o(a,s,{configurable:!0,value:i(null)}),e.exports=function(e){a[s][e]=!0}},28551:(e,t,n)=>{"use strict";var r=n(20034),i=String,o=TypeError;e.exports=function(e){if(r(e))return e;throw new o(i(e)+" is not an object")}},19617:(e,t,n)=>{"use strict";var r=n(25397),i=n(35610),o=n(26198),s=function(e){return function(t,n,s){var a=r(t),l=o(a);if(0===l)return!e&&-1;var c,u=i(s,l);if(e&&n!=n){for(;l>u;)if((c=a[u++])!=c)return!0}else for(;l>u;u++)if((e||u in a)&&a[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},34527:(e,t,n)=>{"use strict";var r=n(43724),i=n(34376),o=TypeError,s=Object.getOwnPropertyDescriptor,a=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(i(e)&&!s(e,"length").writable)throw new o("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},67680:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r([].slice)},44576:(e,t,n)=>{"use strict";var r=n(79504),i=r({}.toString),o=r("".slice);e.exports=function(e){return o(i(e),8,-1)}},36955:(e,t,n)=>{"use strict";var r=n(92140),i=n(94901),o=n(44576),s=n(78227)("toStringTag"),a=Object,l="Arguments"===o(function(){return arguments}());e.exports=r?o:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=a(e),s))?n:l?o(t):"Object"===(r=o(t))&&i(t.callee)?"Arguments":r}},77740:(e,t,n)=>{"use strict";var r=n(39297),i=n(35031),o=n(77347),s=n(24913);e.exports=function(e,t,n){for(var a=i(t),l=s.f,c=o.f,u=0;u{"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},6980:e=>{"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},97040:(e,t,n)=>{"use strict";var r=n(43724),i=n(24913),o=n(6980);e.exports=function(e,t,n){r?i.f(e,t,o(0,n)):e[t]=n}},36840:(e,t,n)=>{"use strict";var r=n(94901),i=n(24913),o=n(50283),s=n(39433);e.exports=function(e,t,n,a){a||(a={});var l=a.enumerable,c=void 0!==a.name?a.name:t;if(r(n)&&o(n,c,a),a.global)l?e[t]=n:s(t,n);else{try{a.unsafe?e[t]&&(l=!0):delete e[t]}catch(e){}l?e[t]=n:i.f(e,t,{value:n,enumerable:!1,configurable:!a.nonConfigurable,writable:!a.nonWritable})}return e}},39433:(e,t,n)=>{"use strict";var r=n(24475),i=Object.defineProperty;e.exports=function(e,t){try{i(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},84606:(e,t,n)=>{"use strict";var r=n(16823),i=TypeError;e.exports=function(e,t){if(!delete e[t])throw new i("Cannot delete property "+r(t)+" of "+r(e))}},43724:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4055:(e,t,n)=>{"use strict";var r=n(24475),i=n(20034),o=r.document,s=i(o)&&i(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},96837:e=>{"use strict";var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},6763:e=>{"use strict";e.exports="function"==typeof Bun&&Bun&&"string"==typeof Bun.version},48119:(e,t,n)=>{"use strict";var r=n(79392);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},19088:(e,t,n)=>{"use strict";var r=n(24475),i=n(44576);e.exports="process"===i(r.process)},79392:e=>{"use strict";e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},77388:(e,t,n)=>{"use strict";var r,i,o=n(24475),s=n(79392),a=o.process,l=o.Deno,c=a&&a.versions||l&&l.version,u=c&&c.v8;u&&(i=(r=u.split("."))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&s&&(!(r=s.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=s.match(/Chrome\/(\d+)/))&&(i=+r[1]),e.exports=i},88727:e=>{"use strict";e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},16193:(e,t,n)=>{"use strict";var r=n(79504),i=Error,o=r("".replace),s=String(new i("zxcasd").stack),a=/\n\s*at [^:]*:[^\n]*/,l=a.test(s);e.exports=function(e,t){if(l&&"string"==typeof e&&!i.prepareStackTrace)for(;t--;)e=o(e,a,"");return e}},80747:(e,t,n)=>{"use strict";var r=n(66699),i=n(16193),o=n(24659),s=Error.captureStackTrace;e.exports=function(e,t,n,a){o&&(s?s(e,t):r(e,"stack",i(n,a)))}},24659:(e,t,n)=>{"use strict";var r=n(79039),i=n(6980);e.exports=!r((function(){var e=new Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",i(1,7)),7!==e.stack)}))},46518:(e,t,n)=>{"use strict";var r=n(24475),i=n(77347).f,o=n(66699),s=n(36840),a=n(39433),l=n(77740),c=n(92796);e.exports=function(e,t){var n,u,d,h,f,p=e.target,m=e.global,g=e.stat;if(n=m?r:g?r[p]||a(p,{}):r[p]&&r[p].prototype)for(u in t){if(h=t[u],d=e.dontCallGetSet?(f=i(n,u))&&f.value:n[u],!c(m?u:p+(g?".":"#")+u,e.forced)&&void 0!==d){if(typeof h==typeof d)continue;l(h,d)}(e.sham||d&&d.sham)&&o(h,"sham",!0),s(n,u,h,e)}}},79039:e=>{"use strict";e.exports=function(e){try{return!!e()}catch(e){return!0}}},18745:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype,o=i.apply,s=i.call;e.exports="object"==typeof Reflect&&Reflect.apply||(r?s.bind(o):function(){return s.apply(o,arguments)})},76080:(e,t,n)=>{"use strict";var r=n(27476),i=n(79306),o=n(40616),s=r(r.bind);e.exports=function(e,t){return i(e),void 0===t?e:o?s(e,t):function(){return e.apply(t,arguments)}}},40616:(e,t,n)=>{"use strict";var r=n(79039);e.exports=!r((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},69565:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype.call;e.exports=r?i.bind(i):function(){return i.apply(i,arguments)}},10350:(e,t,n)=>{"use strict";var r=n(43724),i=n(39297),o=Function.prototype,s=r&&Object.getOwnPropertyDescriptor,a=i(o,"name"),l=a&&"something"===function(){}.name,c=a&&(!r||r&&s(o,"name").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},46706:(e,t,n)=>{"use strict";var r=n(79504),i=n(79306);e.exports=function(e,t,n){try{return r(i(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},27476:(e,t,n)=>{"use strict";var r=n(44576),i=n(79504);e.exports=function(e){if("Function"===r(e))return i(e)}},79504:(e,t,n)=>{"use strict";var r=n(40616),i=Function.prototype,o=i.call,s=r&&i.bind.bind(o,o);e.exports=r?s:function(e){return function(){return o.apply(e,arguments)}}},97751:(e,t,n)=>{"use strict";var r=n(24475),i=n(94901);e.exports=function(e,t){return arguments.length<2?(n=r[e],i(n)?n:void 0):r[e]&&r[e][t];var n}},1767:e=>{"use strict";e.exports=function(e){return{iterator:e,next:e.next,done:!1}}},50851:(e,t,n)=>{"use strict";var r=n(36955),i=n(55966),o=n(64117),s=n(26269),a=n(78227)("iterator");e.exports=function(e){if(!o(e))return i(e,a)||i(e,"@@iterator")||s[r(e)]}},70081:(e,t,n)=>{"use strict";var r=n(69565),i=n(79306),o=n(28551),s=n(16823),a=n(50851),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?a(e):t;if(i(n))return o(r(n,e));throw new l(s(e)+" is not iterable")}},66933:(e,t,n)=>{"use strict";var r=n(79504),i=n(34376),o=n(94901),s=n(44576),a=n(655),l=r([].push);e.exports=function(e){if(o(e))return e;if(i(e)){for(var t=e.length,n=[],r=0;r{"use strict";var r=n(79306),i=n(64117);e.exports=function(e,t){var n=e[t];return i(n)?void 0:r(n)}},83789:(e,t,n)=>{"use strict";var r=n(79306),i=n(28551),o=n(69565),s=n(91291),a=n(1767),l="Invalid size",c=RangeError,u=TypeError,d=Math.max,h=function(e,t){this.set=e,this.size=d(t,0),this.has=r(e.has),this.keys=r(e.keys)};h.prototype={getIterator:function(){return a(i(o(this.keys,this.set)))},includes:function(e){return o(this.has,this.set,e)}},e.exports=function(e){i(e);var t=+e.size;if(t!=t)throw new u(l);var n=s(t);if(n<0)throw new c(l);return new h(e,n)}},2478:(e,t,n)=>{"use strict";var r=n(79504),i=n(48981),o=Math.floor,s=r("".charAt),a=r("".replace),l=r("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;e.exports=function(e,t,n,r,d,h){var f=n+e.length,p=r.length,m=u;return void 0!==d&&(d=i(d),m=c),a(h,m,(function(i,a){var c;switch(s(a,0)){case"$":return"$";case"&":return e;case"`":return l(t,0,n);case"'":return l(t,f);case"<":c=d[l(a,1,-1)];break;default:var u=+a;if(0===u)return i;if(u>p){var h=o(u/10);return 0===h?i:h<=p?void 0===r[h-1]?s(a,1):r[h-1]+s(a,1):i}c=r[u-1]}return void 0===c?"":c}))}},24475:function(e,t,n){"use strict";var r=function(e){return e&&e.Math===Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||r("object"==typeof this&&this)||function(){return this}()||Function("return this")()},39297:(e,t,n)=>{"use strict";var r=n(79504),i=n(48981),o=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return o(i(e),t)}},30421:e=>{"use strict";e.exports={}},20397:(e,t,n)=>{"use strict";var r=n(97751);e.exports=r("document","documentElement")},35917:(e,t,n)=>{"use strict";var r=n(43724),i=n(79039),o=n(4055);e.exports=!r&&!i((function(){return 7!==Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},47055:(e,t,n)=>{"use strict";var r=n(79504),i=n(79039),o=n(44576),s=Object,a=r("".split);e.exports=i((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"===o(e)?a(e,""):s(e)}:s},23167:(e,t,n)=>{"use strict";var r=n(94901),i=n(20034),o=n(52967);e.exports=function(e,t,n){var s,a;return o&&r(s=t.constructor)&&s!==n&&i(a=s.prototype)&&a!==n.prototype&&o(e,a),e}},33706:(e,t,n)=>{"use strict";var r=n(79504),i=n(94901),o=n(77629),s=r(Function.toString);i(o.inspectSource)||(o.inspectSource=function(e){return s(e)}),e.exports=o.inspectSource},77584:(e,t,n)=>{"use strict";var r=n(20034),i=n(66699);e.exports=function(e,t){r(t)&&"cause"in t&&i(e,"cause",t.cause)}},91181:(e,t,n)=>{"use strict";var r,i,o,s=n(58622),a=n(24475),l=n(20034),c=n(66699),u=n(39297),d=n(77629),h=n(66119),f=n(30421),p="Object already initialized",m=a.TypeError,g=a.WeakMap;if(s||d.state){var y=d.state||(d.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw new m(p);return t.facade=e,y.set(e,t),t},i=function(e){return y.get(e)||{}},o=function(e){return y.has(e)}}else{var b=h("state");f[b]=!0,r=function(e,t){if(u(e,b))throw new m(p);return t.facade=e,c(e,b,t),t},i=function(e){return u(e,b)?e[b]:{}},o=function(e){return u(e,b)}}e.exports={set:r,get:i,has:o,enforce:function(e){return o(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=i(t)).type!==e)throw new m("Incompatible receiver, "+e+" required");return n}}}},44209:(e,t,n)=>{"use strict";var r=n(78227),i=n(26269),o=r("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||s[o]===e)}},34376:(e,t,n)=>{"use strict";var r=n(44576);e.exports=Array.isArray||function(e){return"Array"===r(e)}},94901:e=>{"use strict";var t="object"==typeof document&&document.all;e.exports=void 0===t&&void 0!==t?function(e){return"function"==typeof e||e===t}:function(e){return"function"==typeof e}},92796:(e,t,n)=>{"use strict";var r=n(79039),i=n(94901),o=/#|\.prototype\./,s=function(e,t){var n=l[a(e)];return n===u||n!==c&&(i(t)?r(t):!!t)},a=s.normalize=function(e){return String(e).replace(o,".").toLowerCase()},l=s.data={},c=s.NATIVE="N",u=s.POLYFILL="P";e.exports=s},64117:e=>{"use strict";e.exports=function(e){return null==e}},20034:(e,t,n)=>{"use strict";var r=n(94901);e.exports=function(e){return"object"==typeof e?null!==e:r(e)}},13925:(e,t,n)=>{"use strict";var r=n(20034);e.exports=function(e){return r(e)||null===e}},96395:e=>{"use strict";e.exports=!1},60788:(e,t,n)=>{"use strict";var r=n(20034),i=n(44576),o=n(78227)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[o])?!!t:"RegExp"===i(e))}},10757:(e,t,n)=>{"use strict";var r=n(97751),i=n(94901),o=n(1625),s=n(7040),a=Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=r("Symbol");return i(t)&&o(t.prototype,a(e))}},40507:(e,t,n)=>{"use strict";var r=n(69565);e.exports=function(e,t,n){for(var i,o,s=n?e:e.iterator,a=e.next;!(i=r(a,s)).done;)if(void 0!==(o=t(i.value)))return o}},72652:(e,t,n)=>{"use strict";var r=n(76080),i=n(69565),o=n(28551),s=n(16823),a=n(44209),l=n(26198),c=n(1625),u=n(70081),d=n(50851),h=n(9539),f=TypeError,p=function(e,t){this.stopped=e,this.result=t},m=p.prototype;e.exports=function(e,t,n){var g,y,b,_,v,w,x,S=n&&n.that,C=!(!n||!n.AS_ENTRIES),M=!(!n||!n.IS_RECORD),T=!(!n||!n.IS_ITERATOR),E=!(!n||!n.INTERRUPTED),D=r(t,S),k=function(e){return g&&h(g,"normal",e),new p(!0,e)},R=function(e){return C?(o(e),E?D(e[0],e[1],k):D(e[0],e[1])):E?D(e,k):D(e)};if(M)g=e.iterator;else if(T)g=e;else{if(!(y=d(e)))throw new f(s(e)+" is not iterable");if(a(y)){for(b=0,_=l(e);_>b;b++)if((v=R(e[b]))&&c(m,v))return v;return new p(!1)}g=u(e,y)}for(w=M?e.next:g.next;!(x=i(w,g)).done;){try{v=R(x.value)}catch(e){h(g,"throw",e)}if("object"==typeof v&&v&&c(m,v))return v}return new p(!1)}},9539:(e,t,n)=>{"use strict";var r=n(69565),i=n(28551),o=n(55966);e.exports=function(e,t,n){var s,a;i(e);try{if(!(s=o(e,"return"))){if("throw"===t)throw n;return n}s=r(s,e)}catch(e){a=!0,s=e}if("throw"===t)throw n;if(a)throw s;return i(s),n}},26269:e=>{"use strict";e.exports={}},26198:(e,t,n)=>{"use strict";var r=n(18014);e.exports=function(e){return r(e.length)}},50283:(e,t,n)=>{"use strict";var r=n(79504),i=n(79039),o=n(94901),s=n(39297),a=n(43724),l=n(10350).CONFIGURABLE,c=n(33706),u=n(91181),d=u.enforce,h=u.get,f=String,p=Object.defineProperty,m=r("".slice),g=r("".replace),y=r([].join),b=a&&!i((function(){return 8!==p((function(){}),"length",{value:8}).length})),_=String(String).split("String"),v=e.exports=function(e,t,n){"Symbol("===m(f(t),0,7)&&(t="["+g(f(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!s(e,"name")||l&&e.name!==t)&&(a?p(e,"name",{value:t,configurable:!0}):e.name=t),b&&n&&s(n,"arity")&&e.length!==n.arity&&p(e,"length",{value:n.arity});try{n&&s(n,"constructor")&&n.constructor?a&&p(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var r=d(e);return s(r,"source")||(r.source=y(_,"string"==typeof t?t:"")),e};Function.prototype.toString=v((function(){return o(this)&&h(this).source||c(this)}),"toString")},80741:e=>{"use strict";var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},32603:(e,t,n)=>{"use strict";var r=n(655);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:r(e)}},2360:(e,t,n)=>{"use strict";var r,i=n(28551),o=n(96801),s=n(88727),a=n(30421),l=n(20397),c=n(4055),u=n(66119),d="prototype",h="script",f=u("IE_PROTO"),p=function(){},m=function(e){return"<"+h+">"+e+""},g=function(e){e.write(m("")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;y="undefined"!=typeof document?document.domain&&r?g(r):(t=c("iframe"),n="java"+h+":",t.style.display="none",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m("document.F=Object")),e.close(),e.F):g(r);for(var i=s.length;i--;)delete y[d][s[i]];return y()};a[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(p[d]=i(e),n=new p,p[d]=null,n[f]=e):n=y(),void 0===t?n:o.f(n,t)}},96801:(e,t,n)=>{"use strict";var r=n(43724),i=n(48686),o=n(24913),s=n(28551),a=n(25397),l=n(71072);t.f=r&&!i?Object.defineProperties:function(e,t){s(e);for(var n,r=a(t),i=l(t),c=i.length,u=0;c>u;)o.f(e,n=i[u++],r[n]);return e}},24913:(e,t,n)=>{"use strict";var r=n(43724),i=n(35917),o=n(48686),s=n(28551),a=n(56969),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d="enumerable",h="configurable",f="writable";t.f=r?o?function(e,t,n){if(s(e),t=a(t),s(n),"function"==typeof e&&"prototype"===t&&"value"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:d in n?n[d]:r[d],writable:!1})}return c(e,t,n)}:c:function(e,t,n){if(s(e),t=a(t),s(n),i)try{return c(e,t,n)}catch(e){}if("get"in n||"set"in n)throw new l("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},77347:(e,t,n)=>{"use strict";var r=n(43724),i=n(69565),o=n(48773),s=n(6980),a=n(25397),l=n(56969),c=n(39297),u=n(35917),d=Object.getOwnPropertyDescriptor;t.f=r?d:function(e,t){if(e=a(e),t=l(t),u)try{return d(e,t)}catch(e){}if(c(e,t))return s(!i(o.f,e,t),e[t])}},38480:(e,t,n)=>{"use strict";var r=n(61828),i=n(88727).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},33717:(e,t)=>{"use strict";t.f=Object.getOwnPropertySymbols},1625:(e,t,n)=>{"use strict";var r=n(79504);e.exports=r({}.isPrototypeOf)},61828:(e,t,n)=>{"use strict";var r=n(79504),i=n(39297),o=n(25397),s=n(19617).indexOf,a=n(30421),l=r([].push);e.exports=function(e,t){var n,r=o(e),c=0,u=[];for(n in r)!i(a,n)&&i(r,n)&&l(u,n);for(;t.length>c;)i(r,n=t[c++])&&(~s(u,n)||l(u,n));return u}},71072:(e,t,n)=>{"use strict";var r=n(61828),i=n(88727);e.exports=Object.keys||function(e){return r(e,i)}},48773:(e,t)=>{"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},52967:(e,t,n)=>{"use strict";var r=n(46706),i=n(20034),o=n(67750),s=n(73506);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),s(r),i(n)?(t?e(n,r):n.__proto__=r,n):n}}():void 0)},84270:(e,t,n)=>{"use strict";var r=n(69565),i=n(94901),o=n(20034),s=TypeError;e.exports=function(e,t){var n,a;if("string"===t&&i(n=e.toString)&&!o(a=r(n,e)))return a;if(i(n=e.valueOf)&&!o(a=r(n,e)))return a;if("string"!==t&&i(n=e.toString)&&!o(a=r(n,e)))return a;throw new s("Can't convert object to primitive value")}},35031:(e,t,n)=>{"use strict";var r=n(97751),i=n(79504),o=n(38480),s=n(33717),a=n(28551),l=i([].concat);e.exports=r("Reflect","ownKeys")||function(e){var t=o.f(a(e)),n=s.f;return n?l(t,n(e)):t}},11056:(e,t,n)=>{"use strict";var r=n(24913).f;e.exports=function(e,t,n){n in e||r(e,n,{configurable:!0,get:function(){return t[n]},set:function(e){t[n]=e}})}},67979:(e,t,n)=>{"use strict";var r=n(28551);e.exports=function(){var e=r(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},61034:(e,t,n)=>{"use strict";var r=n(69565),i=n(39297),o=n(1625),s=n(67979),a=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in a||i(e,"flags")||!o(a,e)?t:r(s,e)}},67750:(e,t,n)=>{"use strict";var r=n(64117),i=TypeError;e.exports=function(e){if(r(e))throw new i("Can't call method on "+e);return e}},79472:(e,t,n)=>{"use strict";var r,i=n(24475),o=n(18745),s=n(94901),a=n(6763),l=n(79392),c=n(67680),u=n(22812),d=i.Function,h=/MSIE .\./.test(l)||a&&((r=i.Bun.version.split(".")).length<3||"0"===r[0]&&(r[1]<3||"3"===r[1]&&"0"===r[2]));e.exports=function(e,t){var n=t?2:1;return h?function(r,i){var a=u(arguments.length,1)>n,l=s(r)?r:d(r),h=a?c(arguments,n):[],f=a?function(){o(l,this,h)}:l;return t?e(f,i):e(f)}:e}},89286:(e,t,n)=>{"use strict";var r=n(94402),i=n(38469),o=r.Set,s=r.add;e.exports=function(e){var t=new o;return i(e,(function(e){s(t,e)})),t}},83440:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(89286),s=n(25170),a=n(83789),l=n(38469),c=n(40507),u=i.has,d=i.remove;e.exports=function(e){var t=r(this),n=a(e),i=o(t);return s(t)<=n.size?l(t,(function(e){n.includes(e)&&d(i,e)})):c(n.getIterator(),(function(e){u(t,e)&&d(i,e)})),i}},94402:(e,t,n)=>{"use strict";var r=n(79504),i=Set.prototype;e.exports={Set,add:r(i.add),has:r(i.has),remove:r(i.delete),proto:i}},68750:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(25170),s=n(83789),a=n(38469),l=n(40507),c=i.Set,u=i.add,d=i.has;e.exports=function(e){var t=r(this),n=s(e),i=new c;return o(t)>n.size?l(n.getIterator(),(function(e){d(t,e)&&u(i,e)})):a(t,(function(e){n.includes(e)&&u(i,e)})),i}},64449:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).has,o=n(25170),s=n(83789),a=n(38469),l=n(40507),c=n(9539);e.exports=function(e){var t=r(this),n=s(e);if(o(t)<=n.size)return!1!==a(t,(function(e){if(n.includes(e))return!1}),!0);var u=n.getIterator();return!1!==l(u,(function(e){if(i(t,e))return c(u,"normal",!1)}))}},53838:(e,t,n)=>{"use strict";var r=n(97080),i=n(25170),o=n(38469),s=n(83789);e.exports=function(e){var t=r(this),n=s(e);return!(i(t)>n.size)&&!1!==o(t,(function(e){if(!n.includes(e))return!1}),!0)}},28527:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).has,o=n(25170),s=n(83789),a=n(40507),l=n(9539);e.exports=function(e){var t=r(this),n=s(e);if(o(t){"use strict";var r=n(79504),i=n(40507),o=n(94402),s=o.Set,a=o.proto,l=r(a.forEach),c=r(a.keys),u=c(new s).next;e.exports=function(e,t,n){return n?i({iterator:c(e),next:u},t):l(e,t)}},84916:(e,t,n)=>{"use strict";var r=n(97751),i=function(e){return{size:e,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}};e.exports=function(e){var t=r("Set");try{(new t)[e](i(0));try{return(new t)[e](i(-1)),!1}catch(e){return!0}}catch(e){return!1}}},25170:(e,t,n)=>{"use strict";var r=n(46706),i=n(94402);e.exports=r(i.proto,"size","get")||function(e){return e.size}},83650:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402),o=n(89286),s=n(83789),a=n(40507),l=i.add,c=i.has,u=i.remove;e.exports=function(e){var t=r(this),n=s(e).getIterator(),i=o(t);return a(n,(function(e){c(t,e)?u(i,e):l(i,e)})),i}},44204:(e,t,n)=>{"use strict";var r=n(97080),i=n(94402).add,o=n(89286),s=n(83789),a=n(40507);e.exports=function(e){var t=r(this),n=s(e).getIterator(),l=o(t);return a(n,(function(e){i(l,e)})),l}},66119:(e,t,n)=>{"use strict";var r=n(25745),i=n(33392),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},77629:(e,t,n)=>{"use strict";var r=n(96395),i=n(24475),o=n(39433),s="__core-js_shared__",a=e.exports=i[s]||o(s,{});(a.versions||(a.versions=[])).push({version:"3.37.1",mode:r?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.37.1/LICENSE",source:"https://github.com/zloirock/core-js"})},25745:(e,t,n)=>{"use strict";var r=n(77629);e.exports=function(e,t){return r[e]||(r[e]=t||{})}},4495:(e,t,n)=>{"use strict";var r=n(77388),i=n(79039),o=n(24475).String;e.exports=!!Object.getOwnPropertySymbols&&!i((function(){var e=Symbol("symbol detection");return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},59225:(e,t,n)=>{"use strict";var r,i,o,s,a=n(24475),l=n(18745),c=n(76080),u=n(94901),d=n(39297),h=n(79039),f=n(20397),p=n(67680),m=n(4055),g=n(22812),y=n(48119),b=n(19088),_=a.setImmediate,v=a.clearImmediate,w=a.process,x=a.Dispatch,S=a.Function,C=a.MessageChannel,M=a.String,T=0,E={},D="onreadystatechange";h((function(){r=a.location}));var k=function(e){if(d(E,e)){var t=E[e];delete E[e],t()}},R=function(e){return function(){k(e)}},O=function(e){k(e.data)},L=function(e){a.postMessage(M(e),r.protocol+"//"+r.host)};_&&v||(_=function(e){g(arguments.length,1);var t=u(e)?e:S(e),n=p(arguments,1);return E[++T]=function(){l(t,void 0,n)},i(T),T},v=function(e){delete E[e]},b?i=function(e){w.nextTick(R(e))}:x&&x.now?i=function(e){x.now(R(e))}:C&&!y?(s=(o=new C).port2,o.port1.onmessage=O,i=c(s.postMessage,s)):a.addEventListener&&u(a.postMessage)&&!a.importScripts&&r&&"file:"!==r.protocol&&!h(L)?(i=L,a.addEventListener("message",O,!1)):i=D in m("script")?function(e){f.appendChild(m("script"))[D]=function(){f.removeChild(this),k(e)}}:function(e){setTimeout(R(e),0)}),e.exports={set:_,clear:v}},35610:(e,t,n)=>{"use strict";var r=n(91291),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},25397:(e,t,n)=>{"use strict";var r=n(47055),i=n(67750);e.exports=function(e){return r(i(e))}},91291:(e,t,n)=>{"use strict";var r=n(80741);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},18014:(e,t,n)=>{"use strict";var r=n(91291),i=Math.min;e.exports=function(e){var t=r(e);return t>0?i(t,9007199254740991):0}},48981:(e,t,n)=>{"use strict";var r=n(67750),i=Object;e.exports=function(e){return i(r(e))}},72777:(e,t,n)=>{"use strict";var r=n(69565),i=n(20034),o=n(10757),s=n(55966),a=n(84270),l=n(78227),c=TypeError,u=l("toPrimitive");e.exports=function(e,t){if(!i(e)||o(e))return e;var n,l=s(e,u);if(l){if(void 0===t&&(t="default"),n=r(l,e,t),!i(n)||o(n))return n;throw new c("Can't convert object to primitive value")}return void 0===t&&(t="number"),a(e,t)}},56969:(e,t,n)=>{"use strict";var r=n(72777),i=n(10757);e.exports=function(e){var t=r(e,"string");return i(t)?t:t+""}},92140:(e,t,n)=>{"use strict";var r={};r[n(78227)("toStringTag")]="z",e.exports="[object z]"===String(r)},655:(e,t,n)=>{"use strict";var r=n(36955),i=String;e.exports=function(e){if("Symbol"===r(e))throw new TypeError("Cannot convert a Symbol value to a string");return i(e)}},16823:e=>{"use strict";var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},33392:(e,t,n)=>{"use strict";var r=n(79504),i=0,o=Math.random(),s=r(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+s(++i+o,36)}},7040:(e,t,n)=>{"use strict";var r=n(4495);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},48686:(e,t,n)=>{"use strict";var r=n(43724),i=n(79039);e.exports=r&&i((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},22812:e=>{"use strict";var t=TypeError;e.exports=function(e,n){if(e{"use strict";var r=n(24475),i=n(94901),o=r.WeakMap;e.exports=i(o)&&/native code/.test(String(o))},78227:(e,t,n)=>{"use strict";var r=n(24475),i=n(25745),o=n(39297),s=n(33392),a=n(4495),l=n(7040),c=r.Symbol,u=i("wks"),d=l?c.for||c:c&&c.withoutSetter||s;e.exports=function(e){return o(u,e)||(u[e]=a&&o(c,e)?c[e]:d("Symbol."+e)),u[e]}},14601:(e,t,n)=>{"use strict";var r=n(97751),i=n(39297),o=n(66699),s=n(1625),a=n(52967),l=n(77740),c=n(11056),u=n(23167),d=n(32603),h=n(77584),f=n(80747),p=n(43724),m=n(96395);e.exports=function(e,t,n,g){var y="stackTraceLimit",b=g?2:1,_=e.split("."),v=_[_.length-1],w=r.apply(null,_);if(w){var x=w.prototype;if(!m&&i(x,"cause")&&delete x.cause,!n)return w;var S=r("Error"),C=t((function(e,t){var n=d(g?t:e,void 0),r=g?new w(e):new w;return void 0!==n&&o(r,"message",n),f(r,C,r.stack,2),this&&s(x,this)&&u(r,this,C),arguments.length>b&&h(r,arguments[b]),r}));if(C.prototype=x,"Error"!==v?a?a(C,S):l(C,S,{name:!0}):p&&y in w&&(c(C,w,y),c(C,w,"prepareStackTrace")),l(C,w),!m)try{x.name!==v&&o(x,"name",v),x.constructor=C}catch(e){}return C}}},18107:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(91291),a=n(6469);r({target:"Array",proto:!0},{at:function(e){var t=i(this),n=o(t),r=s(e),a=r>=0?r:n+r;return a<0||a>=n?void 0:t[a]}}),a("at")},44114:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(34527),a=n(96837);r({target:"Array",proto:!0,arity:1,forced:n(79039)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=i(this),n=o(t),r=arguments.length;a(n+r);for(var l=0;l{"use strict";n(6469)("flatMap")},93514:(e,t,n)=>{"use strict";n(6469)("flat")},13609:(e,t,n)=>{"use strict";var r=n(46518),i=n(48981),o=n(26198),s=n(34527),a=n(84606),l=n(96837);r({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}}()},{unshift:function(e){var t=i(this),n=o(t),r=arguments.length;if(r){l(n+r);for(var c=n;c--;){var u=c+r;c in t?t[u]=t[c]:a(t,u)}for(var d=0;d{"use strict";var r=n(46518),i=n(24475),o=n(18745),s=n(14601),a="WebAssembly",l=i[a],c=7!==new Error("e",{cause:7}).cause,u=function(e,t){var n={};n[e]=s(e,t,c),r({global:!0,constructor:!0,arity:1,forced:c},n)},d=function(e,t){if(l&&l[e]){var n={};n[e]=s(a+"."+e,t,c),r({target:a,stat:!0,constructor:!0,arity:1,forced:c},n)}};u("Error",(function(e){return function(t){return o(e,this,arguments)}})),u("EvalError",(function(e){return function(t){return o(e,this,arguments)}})),u("RangeError",(function(e){return function(t){return o(e,this,arguments)}})),u("ReferenceError",(function(e){return function(t){return o(e,this,arguments)}})),u("SyntaxError",(function(e){return function(t){return o(e,this,arguments)}})),u("TypeError",(function(e){return function(t){return o(e,this,arguments)}})),u("URIError",(function(e){return function(t){return o(e,this,arguments)}})),d("CompileError",(function(e){return function(t){return o(e,this,arguments)}})),d("LinkError",(function(e){return function(t){return o(e,this,arguments)}})),d("RuntimeError",(function(e){return function(t){return o(e,this,arguments)}}))},33110:(e,t,n)=>{"use strict";var r=n(46518),i=n(97751),o=n(18745),s=n(69565),a=n(79504),l=n(79039),c=n(94901),u=n(10757),d=n(67680),h=n(66933),f=n(4495),p=String,m=i("JSON","stringify"),g=a(/./.exec),y=a("".charAt),b=a("".charCodeAt),_=a("".replace),v=a(1..toString),w=/[\uD800-\uDFFF]/g,x=/^[\uD800-\uDBFF]$/,S=/^[\uDC00-\uDFFF]$/,C=!f||l((function(){var e=i("Symbol")("stringify detection");return"[null]"!==m([e])||"{}"!==m({a:e})||"{}"!==m(Object(e))})),M=l((function(){return'"\\udf06\\ud834"'!==m("\udf06\ud834")||'"\\udead"'!==m("\udead")})),T=function(e,t){var n=d(arguments),r=h(t);if(c(r)||void 0!==e&&!u(e))return n[1]=function(e,t){if(c(r)&&(t=s(r,this,p(e),t)),!u(t))return t},o(m,null,n)},E=function(e,t,n){var r=y(n,t-1),i=y(n,t+1);return g(x,e)&&!g(S,i)||g(S,e)&&!g(x,r)?"\\u"+v(b(e,0),16):e};m&&r({target:"JSON",stat:!0,arity:3,forced:C||M},{stringify:function(e,t,n){var r=d(arguments),i=o(C?T:m,null,r);return M&&"string"==typeof i?_(i,w,E):i}})},53921:(e,t,n)=>{"use strict";var r=n(46518),i=n(72652),o=n(97040);r({target:"Object",stat:!0},{fromEntries:function(e){var t={};return i(e,(function(e,n){o(t,e,n)}),{AS_ENTRIES:!0}),t}})},17642:(e,t,n)=>{"use strict";var r=n(46518),i=n(83440);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("difference")},{difference:i})},58004:(e,t,n)=>{"use strict";var r=n(46518),i=n(79039),o=n(68750);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("intersection")||i((function(){return"3,2"!==String(Array.from(new Set([1,2,3]).intersection(new Set([3,2]))))}))},{intersection:o})},33853:(e,t,n)=>{"use strict";var r=n(46518),i=n(64449);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isDisjointFrom")},{isDisjointFrom:i})},45876:(e,t,n)=>{"use strict";var r=n(46518),i=n(53838);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isSubsetOf")},{isSubsetOf:i})},32475:(e,t,n)=>{"use strict";var r=n(46518),i=n(28527);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("isSupersetOf")},{isSupersetOf:i})},15024:(e,t,n)=>{"use strict";var r=n(46518),i=n(83650);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("symmetricDifference")},{symmetricDifference:i})},31698:(e,t,n)=>{"use strict";var r=n(46518),i=n(44204);r({target:"Set",proto:!0,real:!0,forced:!n(84916)("union")},{union:i})},79978:(e,t,n)=>{"use strict";var r=n(46518),i=n(69565),o=n(79504),s=n(67750),a=n(94901),l=n(64117),c=n(60788),u=n(655),d=n(55966),h=n(61034),f=n(2478),p=n(78227),m=n(96395),g=p("replace"),y=TypeError,b=o("".indexOf),_=o("".replace),v=o("".slice),w=Math.max;r({target:"String",proto:!0},{replaceAll:function(e,t){var n,r,o,p,x,S,C,M,T,E=s(this),D=0,k=0,R="";if(!l(e)){if((n=c(e))&&(r=u(s(h(e))),!~b(r,"g")))throw new y("`.replaceAll` does not allow non-global regexes");if(o=d(e,g))return i(o,e,E,t);if(m&&n)return _(u(E),e,t)}for(p=u(E),x=u(e),(S=a(t))||(t=u(t)),C=x.length,M=w(1,C),D=b(p,x);-1!==D;)T=S?u(t(x,D,p)):f(x,p,D,[],void 0,t),R+=v(p,k,D)+T,k=D+C,D=D+M>p.length?-1:b(p,x,D+M);return k{"use strict";n(17642)},39225:(e,t,n)=>{"use strict";n(58004)},13972:(e,t,n)=>{"use strict";n(33853)},99209:(e,t,n)=>{"use strict";n(45876)},25714:(e,t,n)=>{"use strict";n(32475)},17561:(e,t,n)=>{"use strict";n(15024)},66197:(e,t,n)=>{"use strict";n(31698)},86368:(e,t,n)=>{"use strict";var r=n(46518),i=n(24475),o=n(59225).clear;r({global:!0,bind:!0,enumerable:!0,forced:i.clearImmediate!==o},{clearImmediate:o})},59848:(e,t,n)=>{"use strict";n(86368),n(29309)},29309:(e,t,n)=>{"use strict";var r=n(46518),i=n(24475),o=n(59225).set,s=n(79472),a=i.setImmediate?s(o,!1):o;r({global:!0,bind:!0,enumerable:!0,forced:i.setImmediate!==a},{setImmediate:a})}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";const e=n(1179),t=n(40026),r=n(70984),i=n(44809),o=a("sample"),s=a("upload");if(o){const n=window.localStorage.getItem("cress-fs");if(n)try{const r=function e(t){if(t.id===o)return t.name;if(t.children)for(const n of t.children){const t=e(n);if(null!==t)return t}return null}(JSON.parse(n));if(r){let n=`./Cress-gh/assets/samples/${r}`;window.fetch(n).then((e=>{if(!e.ok)throw new Error(e.statusText);return e})).then((async s=>{try{let a=n.split(".").pop();if("csv"===a){const t=await s.text();let n=i.parse(t,{header:!0}),a={id:o,name:r,header:n.meta.fields,body:n.data};new e.default(a).start()}else if("docx"===a){const n=await s.arrayBuffer();let i,a;[i,a]=await(0,t.parseWORD)(n);let l={id:o,name:r,header:i,body:a};new e.default(l).start()}}catch(e){console.error(e),console.debug(s)}})).catch((e=>{console.error(e)}))}else console.error("Error finding file in local file system.")}catch(e){console.error("Error parsing local file system:",e)}else console.error("Local file system data not found.")}else{const t=new r.default("Cress-User-Storage");t.getAttachment(s,"table").then((e=>new window.Response(e).json())).then((async n=>{console.log(n);const r=(await t.get(s)).name;let i={id:s,name:r,header:n[0],body:n.slice(1)};new e.default(i).start()}))}function a(e){let t;return window.location.search.substr(1).split("&").forEach((n=>{const r=n.split("=");r[0]===e&&(t=decodeURIComponent(r[1]))})),t}})()})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUksSUFBSWloQixFQUFFLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxFQUFFdFcsSUFBSSxFQUFFQSxHQUFHM0ssSUFBSWloQixFQUFFLEdBQUcsSUFBSUEsRUFBRSxHQUFHQSxHQUFHLEVBQUVBLEdBQUcsRUFBRWxyQixHQUFHaUssSUFBSWloQixFQUFFLEdBQUdsckIsSUFBSSxFQUFFQSxJQUFJLEdBQUdpSyxJQUFJLEVBQUVBLElBQUksR0FBRytnQixFQUFFQyxFQUFFLEdBQUdyVyxJQUFJLEVBQUVvVyxFQUFFQyxFQUFFLEdBQUdqckIsSUFBSSxDQUFDLEVBQUUsSUFBSUEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFB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QUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxrRUFBa0Usb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxrRUFBa0Usb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsbUVBQW1FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsa0VBQWtFLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLGtFQUFrRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxrRUFBa0Usb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxzRUFBc0VlLElBQUksQ0FBQ1gsSUFBSSxFQUFFSixPQUFPLENBQUMsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxrRUFBa0Usb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsbUVBQW1FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsa0VBQWtFLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLGtFQUFrRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsbUVBQW1FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLGtFQUFrRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxpRUFBaUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxrRUFBa0Usb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG1FQUFtRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxtRUFBbUUsQ0FBQyxtRUFBbUUsb0VBQW9FLENBQUMsbUVBQW1FLG9FQUFvRSxDQUFDLG1FQUFtRSxvRUFBb0UsQ0FBQyxtRUFB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R0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJaWdELEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcxUyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUs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VUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsVUFBVSxVQUFVLFVBQVUsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxVQUFVLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsVUFBVSxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFVBQVUsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxVQUFVLFdBQVcsVUFBVSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxXQUFXLFdBQVcsVUFBVSxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFVBQVUsV0FBVyxZQUFZLFNBQVN1TyxJQUFJLEtBQUtqbEQsZ0JBQWdCaWxELEdBQUcsT0FBTyxJQUFJQSxFQUFFM1MsRUFBRXAyQixLQUFLbGMsTUFBTUEsS0FBS20xQixFQUFFLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FBVyxXQUFXLFdBQVcsV0FB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QUFJa1YsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSStELEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUlvVCxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJMEIsRUFBRSxDQUFDLEVBQUUsV0FBVyxXQUFXLFdBQVcsWUFBWUUsRUFBRSxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVcsR0FBRyxTQUFTNFEsSUFBSTNTLEVBQUVwWCxLQUFLbGMsS0FBSyxJQUFJQSxLQUFLeTBHLEdBQUcsV0FBV3owRyxLQUFLMDBHLEdBQUcsV0FB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QVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUMzRyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQzNHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDM0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM1RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDNUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzVHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE9BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxPQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxNQUFPLGNBQWUsT0FDN0csQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxj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ZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE1BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxNQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE1BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE1BQU8sY0FBZSxNQUM3RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsTUFBTyxjQUFlLE1BQzdHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQzlHLENBQUUsZ0JBQWlCLFNBQVUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUM5RyxDQUFFLGdCQUFpQixTQUFVLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDOUcsQ0FBRSxnQkFBaUIsU0FBVSxjQUFlLE1B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LGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUMvRyxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDL0csQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQy9HLENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUMvRyxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDL0csQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQy9HLENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUMvRyxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDL0csQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQy9HLENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUMvRyxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDL0csQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2pILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNqSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLEtBQU0sY0FB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LGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JB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QixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFdBQVksY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixXQUFZLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsV0FBWSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxNQUM5RyxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2hILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNoSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDaEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDakgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNqSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2pILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDbkgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixZQUFhLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsWUFBYSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ25ILENBQUUsZ0JBQWlCLFlBQWEsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsTUFDaEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FB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LGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE1BQ2hILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ2xILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNsSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsS0FBTSxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLEtBQU0sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxLQUFNLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxPQUFRLGNBQWUsUUFDbkgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsT0FBUSxjQUFlLFFBQ25ILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLE9BQVEsY0FBZSxRQUNuSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxRQUFTLGNBQWUsUUFDcEgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsUUFBUyxjQUFlLFFBQ3BILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFFBQVMsY0FBZSxRQUNwSCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1BQU8sY0FBZSxLQUFNLGNBQWUsU0FBVSxjQUFlLFNBQ3JILENBQUUsZ0JBQWlCLGNBQWUsY0FBZSxNQUFPLGNBQWUsS0FBTSxjQUFlLFNBQVUsY0FBZSxTQUNySCxDQUFFLGdCQUFpQixjQUFlLGNBQWUsTUFBTyxjQUFlLEtBQU0sY0FBZSxTQUFVLGNBQWUsU0FDckgsQ0FBRSxnQkFBaUIsY0FBZSxjQUFlLE1B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YyxNQUNkLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLE1BQ1gsYUFBYyxNQUNkLFVBQVcsS0FDWCxhQUFjLEtBQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLE1BQ1gsYUFBYyxNQUNkLFVBQVcsTUFDWCxPQUFRLE1BQ1IsVUFBVyxNQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxPQUFRLE1BQ1IsVUFBVyxNQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsYUFBYyxNQUNkLFVBQVcsTUFDWCxPQUFRLE1BQ1IsVUFBVyxNQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxPQUFRLEtBQ1IsVUFBVyxLQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxPQUFRLE1BQ1IsVUFBVyxNQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLE1BQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxPQUFRLE1BQ1IsVUFBVyxNQUNYLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLE1BQ1gsYUFBYyxNQUNkLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLEtBQ1gsYUFBYyxLQUNkLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxPQUFRLE1BQ1IsVUFBVyxNQUNYLE9BQVEsTUFDUixVQUFXLE1BQ1gsYUFBYyxNQUNkLFVBQVcsTUFDWCxhQUFjLE1BQ2QsVUFBVyxNQUNYLGFBQWMsTUFDZCxVQUFXLE1BQ1gsT0FBUSxLQUNSLFVBQVcsS0FDWCxPQUFRLEtBQ1IsVUFBVyxLQUNYLE9BQVEsSUFDUixVQUFXLElBQ1gsT0FBUSxNQUNSLFVBQVcsTUFDWCxRQUFTLE1BQ1QsV0FBWSxNQUNaLE9BQVEsTUFDUixVQUFXLE1BQ1gsT0FB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LFNBQVMwbGQsRUFBWTNxQixHQUNuQixJQUFJMTViLEVBV0osT0FUQXdFLE9BQU9nOEMsU0FBUzdvQyxPQUNicTFDLE9BQU8sR0FDUDN3QixNQUFNLEtBQ04vNUIsU0FBU2s2RSxJQUNSLE1BQU1uUixFQUFNbVIsRUFBS25nRCxNQUFNLEtBQ25CZ3ZDLEVBQUksS0FBT3F1WCxJQUNiMTViLEVBQVNvdGEsbUJBQW1CL2hXLEVBQUksSUFDbEMsSUFFR3JyRSxDQUNUIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvQ29udGVudHMudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvQ3Jlc3NWaWV3LnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL0Rhc2hib2FyZC9EYXNoYm9hcmRDb250ZW50LnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL0Rhc2hib2FyZC9TdG9yYWdlLnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL0VkaXRvci9Db2x1bW5Ub29scy50cyIsIndlYnBhY2s6Ly9DcmVzcy8uL3NyYy9FZGl0b3IvQ3Jlc3NUYWJsZS50cyIsIndlYnBhY2s6Ly9DcmVzcy8uL3NyYy9FZGl0b3IvRXhwb3J0VG9vbHMudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvRWRpdG9yL0ltYWdlVG9vbHMudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvRWRpdG9yL01laVRvb2xzLnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL0VkaXRvci9WYWxpZGF0aW9uVG9vbHMudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvdXRpbHMvTW9kYWxXaW5kb3cudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9zcmMvdXRpbHMvTm90aWZpY2F0aW9uLnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL3V0aWxzL1RlbXBsYXRlLnRzIiwid2VicGFjazovL0NyZXNzLy4vc3JjL3V0aWxzL1Vuc2F2ZWQudHMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvZG9tcHVyaWZ5L2Rpc3QvcHVyaWZ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvZXhjZWxqcy9kaXN0L2V4Y2VsanMubWluLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2ZpbGUtc2F2ZXIvZGlzdC9GaWxlU2F2ZXIubWluLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS9TaGVldENsaXAvU2hlZXRDbGlwLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS9TaGVldENsaXAvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jYWxjdWxhdG9yL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL2NhbGN1bGF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jYWxjdWxhdG9yL3JlbmRlckFsbENvbHVtbnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jYWxjdWxhdG9yL3JlbmRlckFsbFJvd3MuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jYWxjdWxhdG9yL3ZpZXdwb3J0Q29sdW1ucy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL2NhbGN1bGF0b3Ivdmlld3BvcnRSb3dzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvY2VsbC9jb29yZHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jZWxsL3JhbmdlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvY29yZS9fYmFzZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL2NvcmUvY2xvbmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9jb3JlL2NvcmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9ldmVudC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL2ZhY2FkZS9jb3JlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvZmlsdGVyL2NvbHVtbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL2ZpbHRlci9yb3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL292ZXJsYXkvX2Jhc2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9vdmVybGF5L2JvdHRvbS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL292ZXJsYXkvYm90dG9tSW5saW5lU3RhcnRDb3JuZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9vdmVybGF5L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL292ZXJsYXkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9vdmVybGF5L2lubGluZVN0YXJ0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvb3ZlcmxheS90b3AuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9vdmVybGF5L3RvcElubGluZVN0YXJ0Q29ybmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvb3ZlcmxheXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9yZW5kZXJlci9fYmFzZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3JlbmRlcmVyL2NlbGxzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvcmVuZGVyZXIvY29sR3JvdXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9yZW5kZXJlci9jb2x1bW5IZWFkZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvcmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9yZW5kZXJlci9yb3dIZWFkZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvcmVuZGVyZXIvcm93cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3JlbmRlcmVyL3RhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvc2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvc2VsZWN0aW9uL2JvcmRlci9ib3JkZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9zZWxlY3Rpb24vYm9yZGVyL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3NlbGVjdGlvbi9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy9zZWxlY3Rpb24vbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3NlbGVjdGlvbi9zY2FubmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvc2VsZWN0aW9uL3NlbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3NldHRpbmdzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdGFibGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy90YWJsZS9ib3R0b20uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy90YWJsZS9ib3R0b21JbmxpbmVTdGFydENvcm5lci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3RhYmxlL2lubGluZVN0YXJ0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdGFibGUvbWFzdGVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdGFibGUvbWl4aW4vY2FsY3VsYXRlZENvbHVtbnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy90YWJsZS9taXhpbi9jYWxjdWxhdGVkUm93cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3RhYmxlL21peGluL3N0aWNreUNvbHVtbnNTdGFydC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3RhYmxlL21peGluL3N0aWNreVJvd3NCb3R0b20uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy90YWJsZS9taXhpbi9zdGlja3lSb3dzVG9wLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdGFibGUvdG9wLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdGFibGUvdG9wSW5saW5lU3RhcnRDb3JuZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy91dGlscy9jb2x1bW4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy91dGlscy9jb2x1bW5TdHJldGNoaW5nLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdXRpbHMvbm9kZXNQb29sLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdXRpbHMvb3JkZXJWaWV3L2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3V0aWxzL29yZGVyVmlldy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvM3JkcGFydHkvd2Fsa29udGFibGUvc3JjL3V0aWxzL29yZGVyVmlldy9zaGFyZWRWaWV3LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmMvdXRpbHMvb3JkZXJWaWV3L3ZpZXcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy91dGlscy9vcmRlclZpZXcvdmlld1NpemUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy91dGlscy9vcmRlclZpZXcvdmlld1NpemVTZXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy91dGlscy9yb3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyYy92aWV3cG9ydC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvYmFzZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL2F1dG9jb21wbGV0ZVR5cGUvYXV0b2NvbXBsZXRlVHlwZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL2F1dG9jb21wbGV0ZVR5cGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9jaGVja2JveFR5cGUvY2hlY2tib3hUeXBlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvY2hlY2tib3hUeXBlL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvZGF0ZVR5cGUvZGF0ZVR5cGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9kYXRlVHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL2Ryb3Bkb3duVHlwZS9kcm9wZG93blR5cGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9kcm9wZG93blR5cGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9oYW5kc29udGFibGVUeXBlL2hhbmRzb250YWJsZVR5cGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9oYW5kc29udGFibGVUeXBlL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy9udW1lcmljVHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL251bWVyaWNUeXBlL251bWVyaWNUeXBlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvcGFzc3dvcmRUeXBlL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvcGFzc3dvcmRUeXBlL3Bhc3N3b3JkVHlwZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvc2VsZWN0VHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL3NlbGVjdFR5cGUvc2VsZWN0VHlwZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL3RleHRUeXBlL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jZWxsVHlwZXMvdGV4dFR5cGUvdGV4dFR5cGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NlbGxUeXBlcy90aW1lVHlwZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY2VsbFR5cGVzL3RpbWVUeXBlL3RpbWVUeXBlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlL2ZvY3VzQ2F0Y2hlci9mb2N1c0RldGVjdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlL2ZvY3VzQ2F0Y2hlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY29yZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY29yZS92aWV3cG9ydFNjcm9sbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY29yZS92aWV3cG9ydFNjcm9sbC9zY3JvbGxTdHJhdGVnaWVzL2NvbHVtbkhlYWRlclNjcm9sbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY29yZS92aWV3cG9ydFNjcm9sbC9zY3JvbGxTdHJhdGVnaWVzL2Nvcm5lckhlYWRlclNjcm9sbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvY29yZS92aWV3cG9ydFNjcm9sbC9zY3JvbGxTdHJhdGVnaWVzL2ZvY3VzU2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlL3ZpZXdwb3J0U2Nyb2xsL3Njcm9sbFN0cmF0ZWdpZXMvbXVsdGlwbGVTY3JvbGwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2NvcmUvdmlld3BvcnRTY3JvbGwvc2Nyb2xsU3RyYXRlZ2llcy9ub25jb250aWd1b3VzU2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlL3ZpZXdwb3J0U2Nyb2xsL3Njcm9sbFN0cmF0ZWdpZXMvcm93SGVhZGVyU2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9jb3JlL3ZpZXdwb3J0U2Nyb2xsL3Njcm9sbFN0cmF0ZWdpZXMvc2luZ2xlU2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9kYXRhTWFwL2RhdGFNYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2RhdGFNYXAvZGF0YVNvdXJjZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9sYXp5RmFjdG9yeU1hcC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9tZXRhTGF5ZXJzL2NlbGxNZXRhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9kYXRhTWFwL21ldGFNYW5hZ2VyL21ldGFMYXllcnMvY29sdW1uTWV0YS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9tZXRhTGF5ZXJzL2dsb2JhbE1ldGEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2RhdGFNYXAvbWV0YU1hbmFnZXIvbWV0YUxheWVycy90YWJsZU1ldGEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2RhdGFNYXAvbWV0YU1hbmFnZXIvbWV0YVNjaGVtYS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9tb2RzL2R5bmFtaWNDZWxsTWV0YS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZGF0YU1hcC9tZXRhTWFuYWdlci9tb2RzL2V4dGVuZE1ldGFQcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9kYXRhTWFwL21ldGFNYW5hZ2VyL3V0aWxzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9kYXRhTWFwL3JlcGxhY2VEYXRhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2F1dG9jb21wbGV0ZUVkaXRvci9hdXRvY29tcGxldGVFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2VkaXRvcnMvYXV0b2NvbXBsZXRlRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2Jhc2VFZGl0b3IvYmFzZUVkaXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZWRpdG9ycy9iYXNlRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2NoZWNrYm94RWRpdG9yL2NoZWNrYm94RWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2NoZWNrYm94RWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2RhdGVFZGl0b3IvZGF0ZUVkaXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZWRpdG9ycy9kYXRlRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2Ryb3Bkb3duRWRpdG9yL2Ryb3Bkb3duRWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2Ryb3Bkb3duRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2hhbmRzb250YWJsZUVkaXRvci9oYW5kc29udGFibGVFZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2VkaXRvcnMvaGFuZHNvbnRhYmxlRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL251bWVyaWNFZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2VkaXRvcnMvbnVtZXJpY0VkaXRvci9udW1lcmljRWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3Bhc3N3b3JkRWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3Bhc3N3b3JkRWRpdG9yL3Bhc3N3b3JkRWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3NlbGVjdEVkaXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvZWRpdG9ycy9zZWxlY3RFZGl0b3Ivc2VsZWN0RWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3RleHRFZGl0b3IvY2FyZXRQb3NpdGlvbmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3RleHRFZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2VkaXRvcnMvdGV4dEVkaXRvci90ZXh0RWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9lZGl0b3JzL3RpbWVFZGl0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2VkaXRvcnMvdGltZUVkaXRvci90aW1lRWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9ldmVudE1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2ZvY3VzTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaGVscGVycy9hMTF5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL2FycmF5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvY29uc29sZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaGVscGVycy9kYXRhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL2RhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvZG9tL2VsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvZG9tL2V2ZW50LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL2ZlYXR1cmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvbWl4ZWQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvbW92ZXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvbnVtYmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL29iamVjdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaGVscGVycy9zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9oZWxwZXJzL3VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2hlbHBlcnMvd3JhcHBlcnMvanF1ZXJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9pMThuL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaTE4bi9sYW5ndWFnZXMvZW4tVVMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL2kxOG4vcGhyYXNlRm9ybWF0dGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaTE4bi9waHJhc2VGb3JtYXR0ZXJzL3BsdXJhbGl6ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaTE4bi9yZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaTE4bi91dGlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL21peGlucy9ob29rc1JlZlJlZ2lzdGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL21peGlucy9sb2NhbEhvb2tzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5Ib29rcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvQ29sdW1uU2l6ZS9hdXRvQ29sdW1uU2l6ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvQ29sdW1uU2l6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvUm93U2l6ZS9hdXRvUm93U2l6ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvUm93U2l6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvZmlsbC9hdXRvZmlsbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvZmlsbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9hdXRvZmlsbC91dGlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9iYXNlL2Jhc2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvYmFzZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9iaW5kUm93c1dpdGhIZWFkZXJzL2JpbmRSb3dzV2l0aEhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvYmluZFJvd3NXaXRoSGVhZGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9iaW5kUm93c1dpdGhIZWFkZXJzL21hcHMvbG9vc2VCaW5kc01hcC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9iaW5kUm93c1dpdGhIZWFkZXJzL21hcHMvc3RyaWN0QmluZHNNYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sbGFwc2libGVDb2x1bW5zL2NvbGxhcHNpYmxlQ29sdW1ucy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb2xsYXBzaWJsZUNvbHVtbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU29ydGluZy9jb2x1bW5Tb3J0aW5nLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblNvcnRpbmcvY29sdW1uU3RhdGVzTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb2x1bW5Tb3J0aW5nL2RvbUhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU29ydGluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb2x1bW5Tb3J0aW5nL3Jvb3RDb21wYXJhdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblNvcnRpbmcvc29ydEZ1bmN0aW9uL2NoZWNrYm94LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblNvcnRpbmcvc29ydEZ1bmN0aW9uL2RhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU29ydGluZy9zb3J0RnVuY3Rpb24vZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb2x1bW5Tb3J0aW5nL3NvcnRGdW5jdGlvbi9udW1lcmljLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblNvcnRpbmcvc29ydEZ1bmN0aW9uL3RpbWUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU29ydGluZy9zb3J0U2VydmljZS9lbmdpbmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU29ydGluZy9zb3J0U2VydmljZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb2x1bW5Tb3J0aW5nL3NvcnRTZXJ2aWNlL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblNvcnRpbmcvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU3VtbWFyeS9jb2x1bW5TdW1tYXJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblN1bW1hcnkvZW5kcG9pbnRzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbHVtblN1bW1hcnkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29sdW1uU3VtbWFyeS91dGlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb21tZW50cy9jb21tZW50RWRpdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbW1lbnRzL2NvbW1lbnRzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbW1lbnRzL2NvbnRleHRNZW51SXRlbS9hZGRFZGl0Q29tbWVudC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb21tZW50cy9jb250ZXh0TWVudUl0ZW0vcmVhZE9ubHlDb21tZW50LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbW1lbnRzL2NvbnRleHRNZW51SXRlbS9yZW1vdmVDb21tZW50LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbW1lbnRzL2Rpc3BsYXlTd2l0Y2guanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29tbWVudHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvY29tbWFuZEV4ZWN1dG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L2NvbnRleHRNZW51LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L2l0ZW1zRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9tZW51L2N1cnNvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9tZW51L2RlZmF1bHRTaG9ydGN1dHNMaXN0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L21lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvbWVudS9tZW51LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L21lbnUvbWVudUl0ZW1SZW5kZXJlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9tZW51L25hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9tZW51L3Bvc2l0aW9uZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvbWVudS9zaG9ydGN1dHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvbWVudS91dGlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvYWxpZ25tZW50LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy9jbGVhckNvbHVtbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvY29sdW1uTGVmdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvY29sdW1uUmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvcHJlZGVmaW5lZEl0ZW1zL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy9ub0l0ZW1zLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy9yZWFkT25seS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvcmVkby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvcmVtb3ZlQ29sdW1uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy9yZW1vdmVSb3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29udGV4dE1lbnUvcHJlZGVmaW5lZEl0ZW1zL3Jvd0Fib3ZlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy9yb3dCZWxvdy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXMvc2VwYXJhdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtcy91bmRvLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvbnRleHRNZW51L3V0aWxzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9jbGlwYm9hcmREYXRhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9jb250ZXh0TWVudUl0ZW0vY29weS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb3B5UGFzdGUvY29udGV4dE1lbnVJdGVtL2NvcHlDb2x1bW5IZWFkZXJzT25seS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb3B5UGFzdGUvY29udGV4dE1lbnVJdGVtL2NvcHlXaXRoQ29sdW1uR3JvdXBIZWFkZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9jb250ZXh0TWVudUl0ZW0vY29weVdpdGhDb2x1bW5IZWFkZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9jb250ZXh0TWVudUl0ZW0vY3V0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9jb3B5UGFzdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY29weVBhc3RlL2NvcHlhYmxlUmFuZ2VzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2NvcHlQYXN0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jb3B5UGFzdGUvcGFzdGVFdmVudC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jdXN0b21Cb3JkZXJzL2NvbnRleHRNZW51SXRlbS9ib3R0b20uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY3VzdG9tQm9yZGVycy9jb250ZXh0TWVudUl0ZW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY3VzdG9tQm9yZGVycy9jb250ZXh0TWVudUl0ZW0vbGVmdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jdXN0b21Cb3JkZXJzL2NvbnRleHRNZW51SXRlbS9ub0JvcmRlcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY3VzdG9tQm9yZGVycy9jb250ZXh0TWVudUl0ZW0vcmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvY3VzdG9tQm9yZGVycy9jb250ZXh0TWVudUl0ZW0vdG9wLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2N1c3RvbUJvcmRlcnMvY3VzdG9tQm9yZGVycy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9jdXN0b21Cb3JkZXJzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2N1c3RvbUJvcmRlcnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZHJhZ1RvU2Nyb2xsL2RyYWdUb1Njcm9sbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9kcmFnVG9TY3JvbGwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZHJvcGRvd25NZW51L2Ryb3Bkb3duTWVudS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9kcm9wZG93bk1lbnUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZXhwb3J0RmlsZS9kYXRhUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZXhwb3J0RmlsZS9leHBvcnRGaWxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2V4cG9ydEZpbGUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZXhwb3J0RmlsZS90eXBlRmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9leHBvcnRGaWxlL3R5cGVzL19iYXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2V4cG9ydEZpbGUvdHlwZXMvY3N2LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29tcG9uZW50L19iYXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29tcG9uZW50L2FjdGlvbkJhci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbXBvbmVudC9jb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb21wb25lbnQvb3BlcmF0b3JzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29tcG9uZW50L3ZhbHVlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2JlZ2luc1dpdGguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb25kaXRpb24vYmV0d2Vlbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvbi9ieVZhbHVlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2NvbnRhaW5zLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2RhdGUvYWZ0ZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb25kaXRpb24vZGF0ZS9iZWZvcmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb25kaXRpb24vZGF0ZS90b2RheS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvbi9kYXRlL3RvbW9ycm93LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2RhdGUveWVzdGVyZGF5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2VtcHR5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2VuZHNXaXRoLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2VxdWFsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2ZhbHNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2dyZWF0ZXJUaGFuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL2dyZWF0ZXJUaGFuT3JFcXVhbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvbi9sZXNzVGhhbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvbi9sZXNzVGhhbk9yRXF1YWwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb25kaXRpb24vbm9uZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvbi9ub3RCZXR3ZWVuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL25vdENvbnRhaW5zLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL25vdEVtcHR5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL25vdEVxdWFsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uL3RydWUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9jb25kaXRpb25Db2xsZWN0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uZGl0aW9uUmVnaXN0ZXJlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2NvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvZGF0YUZpbHRlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2ZpbHRlcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvbG9naWNhbE9wZXJhdGlvbnMvY29uanVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9sb2dpY2FsT3BlcmF0aW9ucy9kaXNqdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL2xvZ2ljYWxPcGVyYXRpb25zL2Rpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvbWVudS9mb2N1c0NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy9tZW51L2ZvY3VzTmF2aWdhdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2ZpbHRlcnMvdWkvX2Jhc2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy91aS9pbnB1dC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL3VpL2xpbmsuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy91aS9tdWx0aXBsZVNlbGVjdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9maWx0ZXJzL3VpL3JhZGlvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy91aS9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZmlsdGVycy91dGlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9mb3JtdWxhcy9lbmdpbmUvcmVnaXN0ZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZm9ybXVsYXMvZW5naW5lL3NldHRpbmdzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2Zvcm11bGFzL2Zvcm11bGFzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2Zvcm11bGFzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2Zvcm11bGFzL2luZGV4U3luY2VyL2F4aXNTeW5jZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZm9ybXVsYXMvaW5kZXhTeW5jZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvZm9ybXVsYXMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvaGlkZGVuQ29sdW1ucy9jb250ZXh0TWVudUl0ZW0vaGlkZUNvbHVtbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9oaWRkZW5Db2x1bW5zL2NvbnRleHRNZW51SXRlbS9zaG93Q29sdW1uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2hpZGRlbkNvbHVtbnMvaGlkZGVuQ29sdW1ucy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9oaWRkZW5Db2x1bW5zL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL2hpZGRlblJvd3MvY29udGV4dE1lbnVJdGVtL2hpZGVSb3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvaGlkZGVuUm93cy9jb250ZXh0TWVudUl0ZW0vc2hvd1Jvdy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9oaWRkZW5Sb3dzL2hpZGRlblJvd3MuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvaGlkZGVuUm93cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxDb2x1bW5GcmVlemUvY29udGV4dE1lbnVJdGVtL2ZyZWV6ZUNvbHVtbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxDb2x1bW5GcmVlemUvY29udGV4dE1lbnVJdGVtL3VuZnJlZXplQ29sdW1uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21hbnVhbENvbHVtbkZyZWV6ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxDb2x1bW5GcmVlemUvbWFudWFsQ29sdW1uRnJlZXplLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21hbnVhbENvbHVtbk1vdmUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsQ29sdW1uTW92ZS9tYW51YWxDb2x1bW5Nb3ZlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21hbnVhbENvbHVtbk1vdmUvdWkvX2Jhc2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsQ29sdW1uTW92ZS91aS9iYWNrbGlnaHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsQ29sdW1uTW92ZS91aS9ndWlkZWxpbmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsQ29sdW1uUmVzaXplL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21hbnVhbENvbHVtblJlc2l6ZS9tYW51YWxDb2x1bW5SZXNpemUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsUm93TW92ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxSb3dNb3ZlL21hbnVhbFJvd01vdmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsUm93TW92ZS91aS9fYmFzZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxSb3dNb3ZlL3VpL2JhY2tsaWdodC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxSb3dNb3ZlL3VpL2d1aWRlbGluZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tYW51YWxSb3dSZXNpemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWFudWFsUm93UmVzaXplL21hbnVhbFJvd1Jlc2l6ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tZXJnZUNlbGxzL2NhbGN1bGF0aW9ucy9hdXRvZmlsbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tZXJnZUNlbGxzL2NhbGN1bGF0aW9ucy9zZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbWVyZ2VDZWxscy9jZWxsQ29vcmRzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21lcmdlQ2VsbHMvY2VsbHNDb2xsZWN0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21lcmdlQ2VsbHMvY29udGV4dE1lbnVJdGVtL3RvZ2dsZU1lcmdlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21lcmdlQ2VsbHMvZm9jdXNPcmRlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tZXJnZUNlbGxzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL21lcmdlQ2VsbHMvbWVyZ2VDZWxscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tZXJnZUNlbGxzL3V0aWxzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL211bHRpQ29sdW1uU29ydGluZy9kb21IZWxwZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL211bHRpQ29sdW1uU29ydGluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tdWx0aUNvbHVtblNvcnRpbmcvbXVsdGlDb2x1bW5Tb3J0aW5nLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL211bHRpQ29sdW1uU29ydGluZy9yb290Q29tcGFyYXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9tdWx0aUNvbHVtblNvcnRpbmcvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL211bHRpcGxlU2VsZWN0aW9uSGFuZGxlcy9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRIZWFkZXJzL25lc3RlZEhlYWRlcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvaGVhZGVyc1RyZWUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvbWF0cml4R2VuZXJhdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZEhlYWRlcnMvc3RhdGVNYW5hZ2VyL25vZGVNb2RpZmllcnMvY29sbGFwc2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvbm9kZU1vZGlmaWVycy9leHBhbmQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvbm9kZU1vZGlmaWVycy9oaWRlQ29sdW1uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZEhlYWRlcnMvc3RhdGVNYW5hZ2VyL25vZGVNb2RpZmllcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvbm9kZU1vZGlmaWVycy9zaG93Q29sdW1uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZEhlYWRlcnMvc3RhdGVNYW5hZ2VyL25vZGVNb2RpZmllcnMvdXRpbHMvdHJlZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRIZWFkZXJzL3N0YXRlTWFuYWdlci9zZXR0aW5nc05vcm1hbGl6ZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvc291cmNlU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy9zdGF0ZU1hbmFnZXIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3BsdWdpbnMvbmVzdGVkSGVhZGVycy91dGlscy9naG9zdFRhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZFJvd3MvZGF0YS9kYXRhTWFuYWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRSb3dzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZFJvd3MvbmVzdGVkUm93cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRSb3dzL3VpL19iYXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZFJvd3MvdWkvY29sbGFwc2luZy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRSb3dzL3VpL2NvbnRleHRNZW51LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL25lc3RlZFJvd3MvdWkvaGVhZGVycy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9uZXN0ZWRSb3dzL3V0aWxzL3Jvd01vdmVDb250cm9sbGVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3BlcnNpc3RlbnRTdGF0ZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9wZXJzaXN0ZW50U3RhdGUvcGVyc2lzdGVudFN0YXRlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3BlcnNpc3RlbnRTdGF0ZS9zdG9yYWdlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3JlZ2lzdHJ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3NlYXJjaC9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcGx1Z2lucy9zZWFyY2gvc2VhcmNoLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3RvdWNoU2Nyb2xsL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3RvdWNoU2Nyb2xsL3RvdWNoU2Nyb2xsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3RyaW1Sb3dzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3RyaW1Sb3dzL3RyaW1Sb3dzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3VuZG9SZWRvL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9wbHVnaW5zL3VuZG9SZWRvL3VuZG9SZWRvLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL2F1dG9jb21wbGV0ZVJlbmRlcmVyL2F1dG9jb21wbGV0ZVJlbmRlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvYXV0b2NvbXBsZXRlUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9iYXNlUmVuZGVyZXIvYmFzZVJlbmRlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvYmFzZVJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvY2hlY2tib3hSZW5kZXJlci9jaGVja2JveFJlbmRlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvY2hlY2tib3hSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL2RhdGVSZW5kZXJlci9kYXRlUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9kYXRlUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9kcm9wZG93blJlbmRlcmVyL2Ryb3Bkb3duUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9kcm9wZG93blJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvaGFuZHNvbnRhYmxlUmVuZGVyZXIvaGFuZHNvbnRhYmxlUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9oYW5kc29udGFibGVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL2h0bWxSZW5kZXJlci9odG1sUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9odG1sUmVuZGVyZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL251bWVyaWNSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL251bWVyaWNSZW5kZXJlci9udW1lcmljUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9wYXNzd29yZFJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvcGFzc3dvcmRSZW5kZXJlci9wYXNzd29yZFJlbmRlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvcmVnaXN0cnkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3JlbmRlcmVycy9zZWxlY3RSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL3NlbGVjdFJlbmRlcmVyL3NlbGVjdFJlbmRlcmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvdGV4dFJlbmRlcmVyL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9yZW5kZXJlcnMvdGV4dFJlbmRlcmVyL3RleHRSZW5kZXJlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL3RpbWVSZW5kZXJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvcmVuZGVyZXJzL3RpbWVSZW5kZXJlci90aW1lUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3NlbGVjdGlvbi9oaWdobGlnaHQvaGlnaGxpZ2h0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vaGlnaGxpZ2h0L3R5cGVzL2FjdGl2ZUhlYWRlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL2hpZ2hsaWdodC90eXBlcy9hcmVhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vaGlnaGxpZ2h0L3R5cGVzL2FyZWFMYXllcmVkLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vaGlnaGxpZ2h0L3R5cGVzL2NvbHVtbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL2hpZ2hsaWdodC90eXBlcy9jdXN0b21TZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3NlbGVjdGlvbi9oaWdobGlnaHQvdHlwZXMvZmlsbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL2hpZ2hsaWdodC90eXBlcy9mb2N1cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL2hpZ2hsaWdodC90eXBlcy9oZWFkZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3NlbGVjdGlvbi9oaWdobGlnaHQvdHlwZXMvcm93LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vaGlnaGxpZ2h0L3Zpc3VhbFNlbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vbW91c2VFdmVudEhhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3NlbGVjdGlvbi9yYW5nZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL3NlbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2VsZWN0aW9uL3RyYW5zZm9ybWF0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zZWxlY3Rpb24vdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZWRpdG9yL2Nsb3NlQW5kU2F2ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9lZGl0b3IvY2xvc2VBbmRTYXZlQnlBcnJvd0tleXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZWRpdG9yL2Nsb3NlQW5kU2F2ZUJ5RW50ZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZWRpdG9yL2Nsb3NlV2l0aG91dFNhdmluZy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9lZGl0b3IvZmFzdE9wZW4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZWRpdG9yL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2VkaXRvci9vcGVuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2VtcHR5U2VsZWN0ZWRDZWxscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9leHRlbmRDZWxsc1NlbGVjdGlvbi9kb3duLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL2Rvd25CeVZpZXdwb3J0SGVpZ2h0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL2xlZnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZXh0ZW5kQ2VsbHNTZWxlY3Rpb24vcmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZXh0ZW5kQ2VsbHNTZWxlY3Rpb24vdG9Db2x1bW5zLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL3RvTW9zdEJvdHRvbS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9leHRlbmRDZWxsc1NlbGVjdGlvbi90b01vc3RJbmxpbmVFbmQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZXh0ZW5kQ2VsbHNTZWxlY3Rpb24vdG9Nb3N0SW5saW5lU3RhcnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZXh0ZW5kQ2VsbHNTZWxlY3Rpb24vdG9Nb3N0TGVmdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9leHRlbmRDZWxsc1NlbGVjdGlvbi90b01vc3RSaWdodC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9leHRlbmRDZWxsc1NlbGVjdGlvbi90b01vc3RUb3AuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvZXh0ZW5kQ2VsbHNTZWxlY3Rpb24vdG9Sb3dzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL3VwLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL2V4dGVuZENlbGxzU2VsZWN0aW9uL3VwQnlWaWV3cG9ydEhlaWdodC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9tb3ZlQ2VsbFNlbGVjdGlvbi9kb3duLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL2Rvd25CeVZpZXdwb3J0SGVpZ2h0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL2lubGluZUVuZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9tb3ZlQ2VsbFNlbGVjdGlvbi9pbmxpbmVTdGFydC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9tb3ZlQ2VsbFNlbGVjdGlvbi9sZWZ0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3JpZ2h0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3RvTW9zdEJvdHRvbS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9tb3ZlQ2VsbFNlbGVjdGlvbi90b01vc3RCb3R0b21JbmxpbmVFbmQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvbW92ZUNlbGxTZWxlY3Rpb24vdG9Nb3N0SW5saW5lRW5kLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3RvTW9zdElubGluZVN0YXJ0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3RvTW9zdExlZnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvbW92ZUNlbGxTZWxlY3Rpb24vdG9Nb3N0UmlnaHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvbW92ZUNlbGxTZWxlY3Rpb24vdG9Nb3N0VG9wLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3RvTW9zdFRvcElubGluZVN0YXJ0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3VwLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL21vdmVDZWxsU2VsZWN0aW9uL3VwQnlWaWV3cG9ydEhlaWdodC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9jb21tYW5kcy9wb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbW1hbmRzL3Njcm9sbFRvRm9jdXNlZENlbGwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvc2VsZWN0QWxsQ2VsbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvY29tbWFuZHMvc2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dENvbnRleHRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0Q29udGV4dHMvZ3JpZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRDb250ZXh0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRzL2NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3Nob3J0Y3V0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRzL2tleU9ic2VydmVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dHMvbWFuYWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvc2hvcnRjdXRzL3JlY29yZGVyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS9zaG9ydGN1dHMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RhYmxlVmlldy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL2NoYW5nZXNPYnNlcnZhYmxlL29ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RyYW5zbGF0aW9ucy9jaGFuZ2VzT2JzZXJ2YWJsZS9vYnNlcnZlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL2NoYW5nZXNPYnNlcnZhYmxlL3V0aWxzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RyYW5zbGF0aW9ucy9pbmRleE1hcHBlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL21hcENvbGxlY3Rpb25zL2FnZ3JlZ2F0ZWRDb2xsZWN0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwQ29sbGVjdGlvbnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RyYW5zbGF0aW9ucy9tYXBDb2xsZWN0aW9ucy9tYXBDb2xsZWN0aW9uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy9oaWRpbmdNYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RyYW5zbGF0aW9ucy9tYXBzL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy9pbmRleE1hcC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL21hcHMvaW5kZXhlc1NlcXVlbmNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy9saW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL21hcHMvcGh5c2ljYWxJbmRleFRvVmFsdWVNYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3RyYW5zbGF0aW9ucy9tYXBzL3RyaW1taW5nTWFwLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy91dGlscy9hY3Rpb25zT25JbmRleGVzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy91dGlscy9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdHJhbnNsYXRpb25zL21hcHMvdXRpbHMvaW5kZXhlc1NlcXVlbmNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS90cmFuc2xhdGlvbnMvbWFwcy91dGlscy9waHlzaWNhbGx5SW5kZXhlZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvYXV0b1Jlc2l6ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvZGF0YVN0cnVjdHVyZXMvbGlua2VkTGlzdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvZGF0YVN0cnVjdHVyZXMvcHJpb3JpdHlNYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL3RyZWUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL3VuaXF1ZU1hcC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvZGF0YVN0cnVjdHVyZXMvdW5pcXVlU2V0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS91dGlscy9naG9zdFRhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS91dGlscy9wYWdpbmF0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3V0aWxzL3BhcnNlVGFibGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3V0aWxzL3Jvb3RJbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvc2FtcGxlc0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdXRpbHMvc3RhdGljUmVnaXN0ZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvYXV0b2NvbXBsZXRlVmFsaWRhdG9yL2F1dG9jb21wbGV0ZVZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdmFsaWRhdG9ycy9hdXRvY29tcGxldGVWYWxpZGF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvZGF0ZVZhbGlkYXRvci9kYXRlVmFsaWRhdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2hhbmRzb250YWJsZS92YWxpZGF0b3JzL2RhdGVWYWxpZGF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvZHJvcGRvd25WYWxpZGF0b3IvZHJvcGRvd25WYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvZHJvcGRvd25WYWxpZGF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvbnVtZXJpY1ZhbGlkYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdmFsaWRhdG9ycy9udW1lcmljVmFsaWRhdG9yL251bWVyaWNWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvcmVnaXN0cnkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvaGFuZHNvbnRhYmxlL3ZhbGlkYXRvcnMvdGltZVZhbGlkYXRvci9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9oYW5kc29udGFibGUvdmFsaWRhdG9ycy90aW1lVmFsaWRhdG9yL3RpbWVWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbWFtbW90aC9tYW1tb3RoLmJyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hZi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLWR6LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIta3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1seS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLW1hLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXItcHMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hci1zYS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2FyLXRuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9hei5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYmcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ibS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JuLWJkLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYm4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9iby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2JyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvYnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jYS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2NzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvY3YuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9jeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZGUtYXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9kZS1jaC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZHYuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWF1LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tY2EuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1nYi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLWllLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4taWwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lbi1pbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VuLW56LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZW4tc2cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLWRvLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXMtbXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9lcy11cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2VzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ldS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9maWwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2ZyLWNhLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZnItY2guanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9mci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2Z5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ2EuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2dsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZ29tLWRldmEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9nb20tbGF0bi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2d1LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oaS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2hyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaHUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9oeS1hbS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2lkLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvaXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9pdC1jaC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2l0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvamEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9qdi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2thLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva2suanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rbS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2tuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUva28uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS1rbXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9rdS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2t5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbGIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9sby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2x0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbHYuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21pLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbWsuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21uLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9tcy1teS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL21zLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9teS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25iLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9ubC1iZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL25sLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvbm4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9vYy1sbmMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wYS1pbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3BsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcHQtYnIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9wdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3JvLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvcnUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc2kuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zay5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3NsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3EuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zci1jeXJsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3N2LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvc3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90YS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGV0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90aC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3RrLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdGwtcGguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90bGguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS90ci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3R6bS1sYXRuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdHptLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdWctY24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS91ay5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3VyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdXotbGF0bi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3V6LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvdmkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS94LXBzZXVkby5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3lvLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtY24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS96aC1oay5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL3poLW1vLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvemgtdHcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS8gc3luYyBeXFwuXFwvLiokIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL21vbWVudC9tb21lbnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvbnVtYnJvL2Rpc3QvbnVtYnJvLm1pbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9wYXBhcGFyc2UvcGFwYXBhcnNlLm1pbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9wb3VjaGRiL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvcm5nLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3BvdWNoZGIvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9wb3VjaGRiL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3BvdWNoZGIvbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9lc20tYnJvd3Nlci92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9wb3VjaGRiL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLWJyb3dzZXIvdjQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvcG91Y2hkYi9saWIvaW5kZXgtYnJvd3Nlci5lcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9zcGFyay1tZDUvc3BhcmstbWQ1LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL2luZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL21heC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjFUb1Y2LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92Ni5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NlRvVjEuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy92dXZ1emVsYS9pbmRleC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9AaGFuZHNvbnRhYmxlL3Bpa2FkYXkvcGlrYWRheS5janMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXNldC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnVuLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXguanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWNsb25lLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1oZWxwZXJzLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1pbnRlcnNlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWlzLXN1YnNldC1vZi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaXMtc3VwZXJzZXQtb2YuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWl0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNpemUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC11bmlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90YXNrLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5hdC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmZyb20tZW50cmllcy5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LnVuaW9uLnYyLmpzIiwid2VicGFjazovL0NyZXNzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS1hbGwuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qcyIsIndlYnBhY2s6Ly9DcmVzcy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5jbGVhci1pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vQ3Jlc3MvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlLmpzIiwid2VicGFjazovL0NyZXNzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0NyZXNzL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0NyZXNzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9DcmVzcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL0NyZXNzL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQ3Jlc3Mvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9DcmVzcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL0NyZXNzLy4vZGVwbG95bWVudC9zY3JpcHRzL2VkaXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhUTUwgZm9yIEhvdGtleXMgbW9kYWwgd2luZG93XG4gKi9cbmV4cG9ydCBjb25zdCBob3RrZXlzTW9kYWwgPSBgXG4gICAgPGRpdiBjbGFzcz1cIm5lb24tbW9kYWwtd2luZG93LWNvbnRlbnRcIiBpZD1cIm5lb24tbW9kYWwtd2luZG93LWNvbnRlbnQtaG90a2V5c1wiPlxuICAgICAgICA8IS0tIFwiRGlzcGxheVwiIGhvdGtleXMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktc3ViY2F0ZWdvcnktY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LXN1YmNhdGVnb3J5LXRpdGxlXCI+RGlzcGxheTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+U2hpZnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlpvb20gSW48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+U2hpZnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj4tPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlpvb20gT3V0PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPjA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5LWRlc2NyaXB0aW9uXCI+Wm9vbSBSZXNldDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj5oPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPkhpZGUgR2x5cGg8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+U2hpZnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj5UPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlNjcm9sbCBUbyBTeWxsYWJsZSBUZXh0PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBcIkVkaXRcIiBob3RrZXlzIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LXN1YmNhdGVnb3J5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1zdWJjYXRlZ29yeS10aXRsZVwiPkVkaXQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPkN0cmw8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj56PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPuKMmDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pis8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPno8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5LWRlc2NyaXB0aW9uXCI+VW5kbzwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj5DdHJsPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+KzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+U2hpZnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj4rPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnlcIj56PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+b3I8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPuKMmDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pis8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPlNoaWZ0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+KzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+ejwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktZGVzY3JpcHRpb25cIj5SZWRvPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPnEvdy9lL3IvdC95PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICBIaWdobGlnaHQgYnkgU3RhZmYvU3lsbGFibGUvTmV1bWUvTGF5ZXJFbGVtZW50L1NlbGVjdGlvbi9PZmZcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+MS8yLzMvNC81LzY8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5LWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIFNlbGVjdCBieSBTeWxsYWJsZS9OZXVtZS9OZXVtZSBDb21wb25lbnQvU3RhZmYvTGF5ZXIgRWxlbWVudC9CQm94XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeVwiPlNoaWZ0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+KzwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+TnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICBCZWdpbiBJbnNlcnQgZm9yIHRoZSA8aT5udGg8L2k+IG9wdGlvbiBpbiB0aGUgc2VsZWN0ZWQgdGFiXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBcIk90aGVyXCIgaG90a2V5cyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1zdWJjYXRlZ29yeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktc3ViY2F0ZWdvcnktdGl0bGVcIj5PdGhlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+czwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3RrZXktZW50cnktZGVzY3JpcHRpb25cIj5TYXZlIEZpbGU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90a2V5LWVudHJ5XCI+RXNjPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdGtleS1lbnRyeS1kZXNjcmlwdGlvblwiPlJldHVybiB0byBFZGl0IE1vZGU8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuXG5leHBvcnQgY29uc3QgZXJyb3JMb2dzUGFuZWxDb250ZW50cyA9IGA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiIGlkPVwiZXJyb3JMb2dIZWFkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1oZWFkaW5nLXRpdGxlXCI+RXJyb3IgTG9nPC9kaXY+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJpY29uXCI+XG4gICAgICAgICAgICA8dXNlIGlkPVwidG9nZ2xlRXJyb3JMb2dcIiB4bGluazpocmVmPVwiJHtfX0FTU0VUX1BSRUZJWF9ffS9hc3NldHMvaW1nL2ljb25zLnN2ZyNkcm9wZG93bi1kb3duXCI+PC91c2U+XG4gICAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1jb250ZW50c1wiIGlkPVwiZXJyb3JMb2dDb250ZW50c1wiIHN0eWxlPVwib3ZlcmZsb3c6IHNjcm9sbDsgcGFkZGluZzogMC41ZW0gMC43NWVtOyBtYXgtaGVpZ2h0OiAzMDBweDtcIj48ZGl2PmA7XG4iLCJpbXBvcnQgc2V0Qm9keSBmcm9tICcuL3V0aWxzL1RlbXBsYXRlJztcbmltcG9ydCB7IE1vZGFsV2luZG93IH0gZnJvbSAnLi91dGlscy9Nb2RhbFdpbmRvdyc7XG5pbXBvcnQgeyBDcmVzc1RhYmxlIH0gZnJvbSAnLi9FZGl0b3IvQ3Jlc3NUYWJsZSc7XG5pbXBvcnQgeyBNb2RhbFdpbmRvd0ludGVyZmFjZSB9IGZyb20gJy4vSW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBsaXN0ZW5VbnNhdmVkQ2hhbmdlcyB9IGZyb20gJy4vdXRpbHMvVW5zYXZlZCc7XG5pbXBvcnQgeyBDcmVzc0RvYyB9IGZyb20gJy4vVHlwZXMnO1xuXG4vKipcbiAqIENyZXNzVmlldyBjbGFzcy4gTWFuYWdlcyB0aGUgb3RoZXIgbW9kdWxlcyBvZiBDcmVzcyBhbmQgY29tbXVuaWNhdGVzIHdpdGhcbiAqIENyZXNzQ29yZS5cbiAqL1xuY2xhc3MgQ3Jlc3NWaWV3IHtcbiAgLyoqIElEIG9mIHRoZSBkb2N1bWVudCBsb2FkZWQuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBOYW1lIG9mIHRoZSBkb2N1bWVudCBsb2FkZWQuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIENvbnRlbnQgb2YgdGhlIGRvY3VtZW50IGxvYWRlZC4gKi9cbiAgaGVhZGVyOiBzdHJpbmdbXTtcbiAgYm9keTogYW55W107XG4gIC8qKiBNb2R1bGUgdGhhdCBjb250cm9scyBzdGF0ZSBhbmQgY29udGVudCBvZiBDcmVzcyBtb2RhbCB3aW5kb3dzICovXG4gIG1vZGFsOiBNb2RhbFdpbmRvd0ludGVyZmFjZTtcbiAgLyoqIFNwcmVhZHNoZWV0IG1vZHVsZSAqL1xuICB0YWJsZTogQ3Jlc3NUYWJsZTtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3IgZm9yIENyZXNzVmlldy4gU2V0cyBtb2RlIGFuZCBwYXNzZXMgY29uc3RydWN0b3JzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoY3Jlc3NEb2M6IENyZXNzRG9jKSB7XG4gICAgdGhpcy5pZCA9IGNyZXNzRG9jLmlkO1xuICAgIHRoaXMubmFtZSA9IGNyZXNzRG9jLm5hbWU7XG4gICAgdGhpcy5oZWFkZXIgPSBjcmVzc0RvYy5oZWFkZXI7XG4gICAgdGhpcy5ib2R5ID0gY3Jlc3NEb2MuYm9keTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBDcmVzc1xuICAgKi9cbiAgc3RhcnQoKTogdm9pZCB7XG4gICAgc2V0Qm9keSh0aGlzKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBsb2FkIHRoZSBjb21wb25lbnRzXG4gICAgICAgIHRoaXMubW9kYWwgPSBuZXcgTW9kYWxXaW5kb3coKTtcbiAgICAgICAgbGlzdGVuVW5zYXZlZENoYW5nZXMoKTtcblxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbG9hZGluZycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgdGhpcy50YWJsZSA9IG5ldyBDcmVzc1RhYmxlKHRoaXMuaWQsIHRoaXMuaGVhZGVyLCB0aGlzLmJvZHkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7fSk7XG4gIH1cbn1cblxuZXhwb3J0IHsgQ3Jlc3NWaWV3IGFzIGRlZmF1bHQgfTtcbiIsImV4cG9ydCBjb25zdCB1cGxvYWRBcmVhSFRNTCA9IGA8ZGl2IGlkPVwiZG9jdW1lbnQtdXBsb2FkLWNvbnRhaW5lclwiPlxuXG4gICAgPGRpdiBpZD1cImluaXRpYWxfdXBsb2FkX2NvbnRhaW5lclwiPlxuICAgICAgPGRpdiBpZD1cImluaXRpYWxfdXBsb2FkX2FyZWFcIj5cbiAgICAgICAgPGRpdiBpZD1cImluaXRpYWxfdXBsb2FkX21lc3NhZ2VcIj5VcGxvYWQgRmlsZXM8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZpbGVfY29udGFpbmVyXCIgaWQ9XCJ1cGxvYWRpbmdfY29udGFpbmVyXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmaWxlLWNvbnRhaW5lci10aXRsZVwiPlVwbG9hZGluZyBEb2N1bWVudHM8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkb2NfbGlzdFwiIGlkPVwidXBsb2FkaW5nX2xpc3RcIj48L2Rpdj5cblxuICAgICAgPGRpdiBpZD1cInVwbG9hZF9idXR0b25fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25fYnV0dG9uXCIgaWQ9XCJ1cGxvYWRfYnV0dG9uXCI+XG4gICAgICAgICAgVXBsb2FkXG4gICAgICAgICAgPGRpdiBpZD1cInVwbG9hZGluZ19zcGlubmVyXCI+4oa7PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5gO1xuXG5leHBvcnQgY29uc3QgbmV3Rm9sZGVySFRNTCA9IGBcbiAgICA8ZGl2IGlkPVwicmVuYW1lX2NvbnRhaW5lclwiPlxuICAgICAgPGRpdiBpZD1cImRhc2hib2FyZF9pbnB1dF9jb250YWluZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInJlbmFtZV9idXR0b25zX2NvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY2FuY2VsX2Rhc2hib2FyZFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY29uZmlybV9kYXNoYm9hcmRcIj5DcmVhdGU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuXG5leHBvcnQgY29uc3QgcmVuYW1lSFRNTCA9IGBcbiAgICA8ZGl2IGlkPVwicmVuYW1lX2NvbnRhaW5lclwiPlxuICAgICAgPGRpdiBpZD1cImRhc2hib2FyZF9pbnB1dF9jb250YWluZXJcIj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBpZD1cInJlbmFtZV9idXR0b25zX2NvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY2FuY2VsX2Rhc2hib2FyZFwiPkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY29uZmlybV9kYXNoYm9hcmRcIj5Db25maXJtPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiIsImltcG9ydCBQb3VjaERCIGZyb20gJ3BvdWNoZGInO1xuaW1wb3J0IHsgQWxsRG9jcywgRG9jLCB1cGxvYWRzSW5mbyB9IGZyb20gJy4uL1R5cGVzJztcbmltcG9ydCAqIGFzIFBhcGEgZnJvbSAncGFwYXBhcnNlJztcbmltcG9ydCAqIGFzIG1hbW1vdGggZnJvbSAnbWFtbW90aC9tYW1tb3RoLmJyb3dzZXInO1xuXG5leHBvcnQgY29uc3QgZGIgPSBuZXcgUG91Y2hEQignQ3Jlc3MtVXNlci1TdG9yYWdlJyk7XG5cbmZ1bmN0aW9uIGdldEFsbERvY3VtZW50cygpOiBQcm9taXNlPEFsbERvY3M+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBkYi5hbGxEb2NzKHsgaW5jbHVkZV9kb2NzOiB0cnVlIH0pXG4gICAgICAudGhlbigocmVzdWx0KSA9PiByZXNvbHZlKHJlc3VsdCkpXG4gICAgICAuY2F0Y2goKGVycikgPT4gcmVqZWN0KGVycikpO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoVXBsb2FkcygpOiBQcm9taXNlPHVwbG9hZHNJbmZvPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0QWxsRG9jdW1lbnRzKCk7XG4gICAgcmV0dXJuIHJlcy5yb3dzLm1hcCgocm93KSA9PiAoe1xuICAgICAgaWQ6IHJvdy5pZCxcbiAgICAgIG5hbWU6IHJvdy5kb2MgPyByb3cuZG9jLm5hbWUgOiAndW5kZWZpbmVkJyxcbiAgICB9KSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUubG9nKFwiQ291bGRuJ3QgZmV0Y2ggdXBsb2FkZWQgZG9jdW1lbnRzXCIsIGVyci5tZXNzYWdlKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFyc2VDU1YoZmlsZTogRmlsZSk6IFByb21pc2U8YW55W10+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBQYXBhLnBhcnNlKGZpbGUsIHtcbiAgICAgIGhlYWRlcjogdHJ1ZSxcbiAgICAgIGR5bmFtaWNUeXBpbmc6IHRydWUsXG4gICAgICBjb21wbGV0ZTogKHJlc3VsdHMpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdHMuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFcnJvciBwYXJzaW5nIENTViBmaWxlJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoW3Jlc3VsdHMubWV0YS5maWVsZHMsIHJlc3VsdHMuZGF0YV0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlWExTWChmaWxlOiBGaWxlKTogUHJvbWlzZTxhbnlbXT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IEV4Y2VsSlMgPSByZXF1aXJlKCdleGNlbGpzJyk7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB3b3JrYm9vay54bHN4LmxvYWQoZmlsZS5hcnJheUJ1ZmZlcigpKTtcbiAgICAvLyB0byBqc29uXG4gICAgbGV0IHdvcmtzaGVldCA9IGRhdGEud29ya3NoZWV0c1swXTtcbiAgICBsZXQgaGVhZGVyTmFtZXMgPSBbXTtcbiAgICAvLyBUT0RPOiBlbmhhbmNlIHBlcmZvcm1hbmNlLCBnZXQgcmlkIG9mIGxvb3BcbiAgICB3b3Jrc2hlZXQuZWFjaFJvdyh7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9LCBmdW5jdGlvbiAocm93LCByb3dOdW1iZXIpIHtcbiAgICAgIGlmIChyb3dOdW1iZXIgPT09IDEpIHtcbiAgICAgICAgcm93LnZhbHVlcy5mb3JFYWNoKChoZWFkZXIpID0+IHtcbiAgICAgICAgICBoZWFkZXJOYW1lcy5wdXNoKGhlYWRlci50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHJvd3MgPSBbXTtcbiAgICB3b3Jrc2hlZXQuZWFjaFJvdyh7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9LCBmdW5jdGlvbiAocm93LCByb3dOdW1iZXIpIHtcbiAgICAgIGlmIChyb3dOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgbGV0IHJvd0RhdGEgPSB7fTtcbiAgICAgICAgcm93LnZhbHVlcy5mb3JFYWNoKChjZWxsLCBjZWxsTnVtYmVyKSA9PiB7XG4gICAgICAgICAgbGV0IGhlYWRlcktleSA9IGhlYWRlck5hbWVzW2NlbGxOdW1iZXIgLSAxXTtcbiAgICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgcm93RGF0YVtoZWFkZXJLZXldID0gY2VsbC50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dEYXRhW2hlYWRlcktleV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByb3dzLnB1c2gocm93RGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGltYWdlSGVhZGVyID0gaGVhZGVyTmFtZXMuZmluZCgoaGVhZGVyKSA9PiBoZWFkZXIuaW5jbHVkZXMoJ2ltYWdlJykpO1xuICAgIGZvciAoY29uc3QgaW1hZ2Ugb2Ygd29ya3NoZWV0LmdldEltYWdlcygpKSB7XG4gICAgICAvLyBmZXRjaCB0aGUgbWVkaWEgaXRlbSB3aXRoIHRoZSBkYXRhXG4gICAgICBjb25zdCBpbWcgPSB3b3JrYm9vay5tb2RlbC5tZWRpYS5maW5kKChtKSA9PiBtLmluZGV4ID09PSBpbWFnZS5pbWFnZUlkKTtcbiAgICAgIGNvbnN0IGJhc2U2NCA9IGltZy5idWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgY29uc3QgZGF0YVVybCA9IGBkYXRhOiR7aW1nLnR5cGV9O2Jhc2U2NCwke2Jhc2U2NH1gO1xuICAgICAgcm93c1tpbWFnZS5yYW5nZS50bC5uYXRpdmVSb3cgLSAxXVtpbWFnZUhlYWRlcl0gPSBkYXRhVXJsO1xuICAgIH1cbiAgICByZXNvbHZlKFtoZWFkZXJOYW1lcywgcm93c10pO1xuICB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhcnNlV09SRChhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBQcm9taXNlPGFueVtdPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbWFtbW90aFxuICAgICAgLmNvbnZlcnRUb0h0bWwoeyBhcnJheUJ1ZmZlcjogYXJyYXlCdWZmZXIgfSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgbGV0IGh0bWwgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGxldCBtZXNzYWdlcyA9IHJlc3VsdC5tZXNzYWdlcztcbiAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZXMpO1xuXG4gICAgICAgIC8vIGh0bWwgdG8gZG9tXG4gICAgICAgIGxldCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgIGxldCBkb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgLy8gZXh0cmFjdCB0YWJsZXNcbiAgICAgICAgbGV0IHRhYmxlID0gZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0YWJsZScpWzBdO1xuICAgICAgICBsZXQgaGVhZGVyRWxlbWVudHMgPSB0YWJsZVxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKVswXVxuICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGQnKTtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpLFxuICAgICAgICAgIChlbGVtZW50KSA9PiBlbGVtZW50LmlubmVyVGV4dCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gcmVtb3ZlIGhlYWRlciByb3dcbiAgICAgICAgdGFibGUuZGVsZXRlUm93KDApO1xuICAgICAgICAvLyBnZXQgYWxsIHJvd3NcbiAgICAgICAgbGV0IHJvd3MgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndHInKTtcbiAgICAgICAgbGV0IGRhdGEgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3dzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IHJvdyA9IHJvd3Nbal07XG4gICAgICAgICAgbGV0IGNlbGxzID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZCcpO1xuICAgICAgICAgIGxldCByb3dEYXRhID0ge307XG4gICAgICAgICAgLy8gcG9wdWxhdGUgcm93IGRhdGFcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGNlbGxzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICBsZXQgY2VsbCA9IGNlbGxzW2tdO1xuICAgICAgICAgICAgLy8gZ2V0IGFsbCA8cD4gZWxlbWVudHNcbiAgICAgICAgICAgIGxldCBwYXJhZ3JhcGhzID0gY2VsbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncCcpO1xuICAgICAgICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgICAgICAgIGZvciAobGV0IHAgb2YgcGFyYWdyYXBocykge1xuICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyB0ZXh0IGluIHRoZSBwYXJhZ3JhcGhcbiAgICAgICAgICAgICAgaWYgKHAudGV4dENvbnRlbnQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGV4dCArPSBwLnRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlcmUgYXJlIDxpbWc+IGVsZW1lbnRzXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IHAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGltZyBvZiBpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgIGxldCBpbWdTcmMgPSBpbWcuc3JjO1xuICAgICAgICAgICAgICAgICAgLy8gaWYgaW1nU3JjIG5vdCBpbmNsdXNlICdlbWYnLCBzYXZlIHRoZSBzcmMgaW50byB0aGUgdGV4dFxuICAgICAgICAgICAgICAgICAgaWYgKCFpbWdTcmMuaW5jbHVkZXMoJ2VtZicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gaW1nU3JjO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93RGF0YVtoZWFkZXJFbGVtZW50c1trXS50ZXh0Q29udGVudF0gPSB0ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShbaGVhZGVycywgZGF0YV0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVKc29uKGZpbGU6IEZpbGUsIHR5cGU6IHN0cmluZyk6IFByb21pc2U8QmxvYj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICBsZXQgaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdO1xuICAgIGlmICh0eXBlID09PSAnY3N2Jykge1xuICAgICAgW2hlYWRlcnMsIGRhdGFdID0gYXdhaXQgcGFyc2VDU1YoZmlsZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAneGxzeCcpIHtcbiAgICAgIFtoZWFkZXJzLCBkYXRhXSA9IGF3YWl0IHBhcnNlWExTWChmaWxlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkb2MnIHx8IHR5cGUgPT09ICdkb2N4Jykge1xuICAgICAgbGV0IGFycmF5QnVmZmVyID0gYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgW2hlYWRlcnMsIGRhdGFdID0gYXdhaXQgcGFyc2VXT1JEKGFycmF5QnVmZmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVW5zdXBwb3J0ZWQgZmlsZSBmb3JtYXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QganNvbkJsb2IgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoW2hlYWRlcnMsIC4uLmRhdGFdLCBudWxsLCAyKV0sIHtcbiAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICB9KTtcbiAgICByZXNvbHZlKGpzb25CbG9iKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQWRkIG5ldyBlbnRyeSB0byB0aGUgZGF0YWJhc2VcbiAqIEBwYXJhbSBpZFxuICogQHBhcmFtIHRpdGxlXG4gKiBAcGFyYW0gY29udGVudFxuICogQHJldHVybnMgUHJvbWlzZTxib29sZWFuPlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRG9jdW1lbnQoXG4gIGlkOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgY29udGVudDogQmxvYixcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGRiLnB1dCh7XG4gICAgICBfaWQ6IGlkLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIF9hdHRhY2htZW50czoge1xuICAgICAgICB0YWJsZToge1xuICAgICAgICAgIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgIGRhdGE6IGNvbnRlbnQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgd2luZG93LmFsZXJ0KFxuICAgICAgICAgIGBFcnJvciBVcGxvYWRpbmcgRG9jdW1lbnQ6ICR7ZXJyLm1lc3NhZ2V9LCB0aXRsZTogJHtuYW1lfSwgaWQ6ICR7aWR9LmAsXG4gICAgICAgICk7XG4gICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlIGVudHJ5IGZyb20gdGhlIGRhdGFiYXNlXG4gKiBAcGFyYW0gaWRcbiAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZURvY3VtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBkYi5nZXQoaWQpXG4gICAgICAudGhlbigoZG9jKSA9PiB7XG4gICAgICAgIGRiLnJlbW92ZShkb2MpXG4gICAgICAgICAgLnRoZW4oKF8pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgZG9jIGZyb20gdGhlIGRhdGFiYXNlXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBuZXdOYW1lXG4gKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVEb2NOYW1lKGlkOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIFJldHJpZXZlIGRvYyBmcm9tIGRhdGFiYXNlICh0byBnZXQgX3JldilcbiAgICBkYi5nZXQ8RG9jPihpZClcbiAgICAgIC50aGVuKChkb2MpID0+IHtcbiAgICAgICAgZG9jLm5hbWUgPSBuZXdOYW1lO1xuICAgICAgICByZXR1cm4gZGIucHV0KGRvYyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHJlamVjdChlcnIpKTsgLy8gZGIuZ2V0XG4gIH0pO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgZG9jIGZyb20gdGhlIGRhdGFiYXNlXG4gKiBAcGFyYW0gaWRcbiAqIEBwYXJhbSBib2R5IFtoZWFkZXIsIC4uLmNvbnRlbnRdXG4gKiBAcmV0dXJucyBQcm9taXNlPGJvb2xlYW4+XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVBdHRhY2htZW50KFxuICBpZDogc3RyaW5nLFxuICBib2R5OiBhbnlbXSxcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIC8vIFJldHJpZXZlIHRoZSBkb2N1bWVudCB1c2luZyB0aGUgcHJvdmlkZWQgaWRcbiAgICBjb25zdCBkb2MgPSBhd2FpdCBkYi5nZXQoaWQpO1xuXG4gICAgLy8gQ29udmVydCB0aGUgYm9keSBhcnJheSB0byBhIEpTT04gYmxvYlxuICAgIGNvbnN0IGpzb25CbG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGJvZHkpXSwge1xuICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBhdHRhY2htZW50XG4gICAgZG9jLl9hdHRhY2htZW50cyA9IGRvYy5fYXR0YWNobWVudHMgfHwge307XG4gICAgZG9jLl9hdHRhY2htZW50c1sndGFibGUnXSA9IHtcbiAgICAgIGNvbnRlbnRfdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgZGF0YToganNvbkJsb2IsXG4gICAgfTtcblxuICAgIC8vIFNhdmUgdGhlIGRvY3VtZW50IGJhY2sgdG8gdGhlIGRhdGFiYXNlXG4gICAgYXdhaXQgZGIucHV0KGRvYyk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBhdHRhY2htZW50OicsIGVycm9yKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsImV4cG9ydCBjbGFzcyBDb2x1bW5Ub29scyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5wdXRIZWFkZXI6IHN0cmluZ1tdKSB7fVxuXG4gIGdldENvbHVtbnMoaGVhZGVyczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgICBsZXQgaW5wdXRJbWdIZWFkZXIgPSB0aGlzLmlucHV0SGVhZGVyLmZpbmQoKGhlYWRlcikgPT5cbiAgICAgICAgICBoZWFkZXIuaW5jbHVkZXMoJ2ltYWdlJyksXG4gICAgICAgICk7XG4gICAgICAgIGNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogaW5wdXRJbWdIZWFkZXIsXG4gICAgICAgICAgcmVuZGVyZXI6ICdpbWdSZW5kZXJlcicsXG4gICAgICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyc1tpXS5pbmNsdWRlcygnbWVpJykpIHtcbiAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBkYXRhOiBoZWFkZXJzW2ldLFxuICAgICAgICAgIHJlbmRlcmVyOiAnbWVpUmVuZGVyZXInLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbHVtbnMucHVzaCh7XG4gICAgICAgICAgZGF0YTogaGVhZGVyc1tpXSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q29sV2lkdGhzKGhlYWRlcnM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMubWFwKChoZWFkZXIpID0+IChoZWFkZXIuaW5jbHVkZXMoJ21laScpID8gMjAwIDogMTAwKSk7XG4gIH1cblxuICBnZXRJbmRpY2VzKGJvZHk6IGFueVtdKSB7XG4gICAgcmV0dXJuIGJvZHkubWFwKChfLCBpbmRleCkgPT4gaW5kZXggKyAxKTtcbiAgfVxuXG4gIGdldE1laURhdGEoYm9keTogYW55W10pIHtcbiAgICByZXR1cm4gYm9keS5tYXAoKHJvdykgPT4gcm93Lm1laSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhbGwgdGhlIHF1b3RlIHNpZ25zIHRvIGluY2ggbWFya3MgaWYgYW55XG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IG9uIGxvYWRpbmdcbiAgICogQHBhcmFtIGJvZHlcbiAgICovXG4gIGNvbnZlcnRNZWlRdW90ZVNpZ24oYm9keTogYW55W10pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJvZHlbaV0ubWVpID0gYm9keVtpXS5tZWkucmVwbGFjZSgv4oCcL2csICdcIicpLnJlcGxhY2UoL+KAnS9nLCAnXCInKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBIYW5kc29udGFibGUgZnJvbSAnaGFuZHNvbnRhYmxlJztcbmltcG9ydCB7IEltYWdlVG9vbHMgfSBmcm9tICcuL0ltYWdlVG9vbHMnO1xuaW1wb3J0IHsgTWVpVG9vbHMgfSBmcm9tICcuL01laVRvb2xzJztcbmltcG9ydCB7IFZhbGlkYXRpb25Ub29scyB9IGZyb20gJy4vVmFsaWRhdGlvblRvb2xzJztcbmltcG9ydCB7IEV4cG9ydFRvb2xzIH0gZnJvbSAnLi9FeHBvcnRUb29scyc7XG5pbXBvcnQgeyBDb2x1bW5Ub29scyB9IGZyb20gJy4vQ29sdW1uVG9vbHMnO1xuaW1wb3J0IHsgdXBkYXRlQXR0YWNobWVudCB9IGZyb20gJy4uL0Rhc2hib2FyZC9TdG9yYWdlJztcbmltcG9ydCB7IHNldFNhdmVkU3RhdHVzIH0gZnJvbSAnLi4vdXRpbHMvVW5zYXZlZCc7XG5pbXBvcnQgKiBhcyBOb3RpZmljYXRpb24gZnJvbSAnLi4vdXRpbHMvTm90aWZpY2F0aW9uJztcbmltcG9ydCB7IFRhYmxlRXZlbnQgfSBmcm9tICcuLi9UeXBlcyc7XG5cbmNvbnN0IGNoYW5nZUhvb2tzOiBUYWJsZUV2ZW50W10gPSBbXG4gICdhZnRlckNoYW5nZScsXG4gICdhZnRlckNvbHVtbk1vdmUnLFxuICAnYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZScsXG4gICdhZnRlckNyZWF0ZUNvbCcsXG4gICdhZnRlckNyZWF0ZVJvdycsXG4gICdhZnRlckN1dCcsXG4gICdhZnRlclJlbW92ZUNvbCcsXG4gICdhZnRlclJlbW92ZVJvdycsXG4gICdhZnRlclJvd01vdmUnLFxuICAnYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZScsXG5dO1xuXG5leHBvcnQgY2xhc3MgQ3Jlc3NUYWJsZSB7XG4gIHByaXZhdGUgdGFibGU6IEhhbmRzb250YWJsZTtcbiAgcHJpdmF0ZSBpbWFnZXM6IGFueVtdID0gW107IC8vIEFycmF5IHRvIHN0b3JlIGltYWdlc1xuICBwcml2YXRlIGltYWdlVG9vbHM6IEltYWdlVG9vbHM7XG4gIHByaXZhdGUgbWVpVG9vbHM6IE1laVRvb2xzO1xuICBwcml2YXRlIHZhbGlkYXRpb25Ub29sczogVmFsaWRhdGlvblRvb2xzO1xuICBwcml2YXRlIGV4cG9ydFRvb2xzOiBFeHBvcnRUb29scztcbiAgcHJpdmF0ZSBjb2x1bW5Ub29sczogQ29sdW1uVG9vbHM7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgaW5wdXRIZWFkZXI6IHN0cmluZ1tdLCBib2R5OiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdob3QtY29udGFpbmVyJyk7XG5cbiAgICAvLyBJbml0aWFsaXplIFRvb2xzc1xuICAgIHRoaXMuaW1hZ2VUb29scyA9IG5ldyBJbWFnZVRvb2xzKHRoaXMuaW1hZ2VzKTtcbiAgICB0aGlzLm1laVRvb2xzID0gbmV3IE1laVRvb2xzKCk7XG4gICAgdGhpcy52YWxpZGF0aW9uVG9vbHMgPSBuZXcgVmFsaWRhdGlvblRvb2xzKCk7XG4gICAgdGhpcy5leHBvcnRUb29scyA9IG5ldyBFeHBvcnRUb29scygpO1xuICAgIHRoaXMuY29sdW1uVG9vbHMgPSBuZXcgQ29sdW1uVG9vbHMoaW5wdXRIZWFkZXIpO1xuXG4gICAgLy8gQ29udmVydCBhbGwgcXVvdGUgc2lnbnMgdG8gaW5jaCBtYXJrcyBpbiBtZWkgZGF0YVxuICAgIHRoaXMuY29sdW1uVG9vbHMuY29udmVydE1laVF1b3RlU2lnbihib2R5KTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBjdXN0b20gaW1hZ2UgcmVuZGVyZXJcbiAgICBIYW5kc29udGFibGUucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXIoXG4gICAgICAnaW1nUmVuZGVyZXInLFxuICAgICAgdGhpcy5pbWFnZVRvb2xzLmltZ1JlbmRlci5iaW5kKHRoaXMuaW1hZ2VUb29scyksXG4gICAgKTtcblxuICAgIC8vIFJlZ2lzdGVyIHRoZSBjdXN0b20gbWVpIHJlbmRlcmVyXG4gICAgSGFuZHNvbnRhYmxlLnJlbmRlcmVycy5yZWdpc3RlclJlbmRlcmVyKFxuICAgICAgJ21laVJlbmRlcmVyJyxcbiAgICAgIHRoaXMubWVpVG9vbHMubWVpUmVuZGVyLmJpbmQodGhpcy5tZWlUb29scyksXG4gICAgKTtcblxuICAgIC8vIFByZXBhcmUgdGFibGUgY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGhlYWRlcnMgPSBbJ2ltYWdlJywgJ25hbWUnLCAnY2xhc3NpZmljYXRpb24nLCAnbWVpJ107XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1uVG9vbHMuZ2V0Q29sdW1ucyhoZWFkZXJzKTtcbiAgICBjb25zdCBjb2xXaWR0aHMgPSB0aGlzLmNvbHVtblRvb2xzLmdldENvbFdpZHRocyhoZWFkZXJzKTtcbiAgICBjb25zdCBpbmRpY2VzID0gdGhpcy5jb2x1bW5Ub29scy5nZXRJbmRpY2VzKGJvZHkpLm1hcChTdHJpbmcpO1xuXG4gICAgLy8gUHJvY2VzcyBpbWFnZXNcbiAgICBsZXQgaW5wdXRJbWdIZWFkZXIgPSBpbnB1dEhlYWRlci5maW5kKChoZWFkZXIpID0+IGhlYWRlci5pbmNsdWRlcygnaW1hZ2UnKSk7XG4gICAgdGhpcy5pbWFnZVRvb2xzLnN0b3JlSW1hZ2VzKGlucHV0SW1nSGVhZGVyLCBib2R5KTtcblxuICAgIC8vIFByb2Nlc3MgbWVpIGRhdGFcbiAgICBsZXQgaW5wdXRNZWlIZWFkZXIgPSBpbnB1dEhlYWRlci5maW5kKChoZWFkZXIpID0+IGhlYWRlci5pbmNsdWRlcygnbWVpJykpO1xuICAgIHRoaXMubWVpVG9vbHMuaW5pdE1laURhdGEoaW5wdXRNZWlIZWFkZXIsIGJvZHkpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0YWJsZVxuICAgIHRoaXMudGFibGUgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICAgICAgZGF0YTogYm9keSxcbiAgICAgIHN0YXJ0Q29sczogMTEsXG4gICAgICBzdGFydFJvd3M6IGJvZHkubGVuZ3RoLFxuICAgICAgaGVpZ2h0OiAnOTF2aCcsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgbWFudWFsUm93UmVzaXplOiB0cnVlLFxuICAgICAgbWFudWFsQ29sdW1uUmVzaXplOiB0cnVlLFxuICAgICAgbWFudWFsUm93TW92ZTogdHJ1ZSxcbiAgICAgIHNlbGVjdGlvbk1vZGU6ICdtdWx0aXBsZScsXG4gICAgICByb3dIZWlnaHRzOiAxMDAsXG4gICAgICBjb2xXaWR0aHM6IGNvbFdpZHRocyxcbiAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICByb3dIZWFkZXJzOiBpbmRpY2VzLFxuICAgICAgY29sSGVhZGVyczogaGVhZGVycyxcbiAgICAgIHN0cmV0Y2hIOiAnYWxsJyxcbiAgICAgIG1pblNwYXJlUm93czogMCxcbiAgICAgIGF1dG9XcmFwUm93OiB0cnVlLFxuICAgICAgYXV0b1dyYXBDb2w6IHRydWUsXG4gICAgICBjb250ZXh0TWVudTogdHJ1ZSxcbiAgICAgIGRyb3Bkb3duTWVudTogdHJ1ZSxcbiAgICAgIGNsYXNzTmFtZTogJ3RhYmxlLW1lbnUtYnRuJyxcbiAgICAgIGxpY2Vuc2VLZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicsXG4gICAgICBhZnRlckNoYW5nZTogKGNoYW5nZXMsIHNvdXJjZSkgPT4gdGhpcy52YWxpZGF0ZU1laShjaGFuZ2VzLCBzb3VyY2UpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbml0RmlsZUxpc3RlbmVyKGlkLCBpbnB1dEhlYWRlciwgYm9keSwgaGVhZGVycyk7XG4gICAgdGhpcy5pbml0Q2hhbmdlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEZpbGVMaXN0ZW5lcihcbiAgICBpZDogc3RyaW5nLFxuICAgIGlucHV0SGVhZGVyOiBzdHJpbmdbXSxcbiAgICBib2R5OiBhbnlbXSxcbiAgICBoZWFkZXJzOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgY29uc3QgZXhwb3J0UGx1Z2luID0gdGhpcy50YWJsZS5nZXRQbHVnaW4oJ2V4cG9ydEZpbGUnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhwb3J0LXRvLWNzdicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5leHBvcnRUb29scy5leHBvcnRUb0NzdihleHBvcnRQbHVnaW4pO1xuICAgIH0pO1xuXG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZCgnZXhwb3J0LXRvLWV4Y2VsJylcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRUb29scy5leHBvcnRUb0V4Y2VsKFxuICAgICAgICAgIGlucHV0SGVhZGVyLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICB0aGlzLmltYWdlcyxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NhdmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHVwZGF0ZUF0dGFjaG1lbnQoaWQsIFtpbnB1dEhlYWRlciwgLi4uYm9keV0pO1xuXG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHNldFNhdmVkU3RhdHVzKHRydWUpO1xuICAgICAgICBOb3RpZmljYXRpb24ucXVldWVOb3RpZmljYXRpb24oJ1NhdmVkJywgJ3N1Y2Nlc3MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE5vdGlmaWNhdGlvbi5xdWV1ZU5vdGlmaWNhdGlvbignU2F2ZSBmYWlsZWQnLCAnZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGFzeW5jIChldnQpID0+IHtcbiAgICAgIGlmIChldnQua2V5ID09PSAncycpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXBkYXRlQXR0YWNobWVudChpZCwgW2lucHV0SGVhZGVyLCAuLi5ib2R5XSk7XG5cbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHNldFNhdmVkU3RhdHVzKHRydWUpO1xuICAgICAgICAgIE5vdGlmaWNhdGlvbi5xdWV1ZU5vdGlmaWNhdGlvbignU2F2ZWQnLCAnc3VjY2VzcycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE5vdGlmaWNhdGlvbi5xdWV1ZU5vdGlmaWNhdGlvbignU2F2ZSBmYWlsZWQnLCAnZXJyb3InKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q2hhbmdlTGlzdGVuZXIoKSB7XG4gICAgY2hhbmdlSG9va3MuZm9yRWFjaCgoaG9vaykgPT4ge1xuICAgICAgdGhpcy50YWJsZS5hZGRIb29rKGhvb2ssIChzb3VyY2UpID0+IHtcbiAgICAgICAgaWYgKHNvdXJjZSAhPSAnbG9hZERhdGEnKSBzZXRTYXZlZFN0YXR1cyhmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVNZWkoY2hhbmdlcywgc291cmNlKSB7XG4gICAgaWYgKHNvdXJjZSA9PSAnbG9hZERhdGEnKSB7XG4gICAgICAvLyBWYWxpZGF0ZSBtZWkgZGF0YSBhbmQgdXBkYXRlIHRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgdGhpcy5tZWlUb29scy5nZXRNZWlEYXRhKCkuZm9yRWFjaCgobWVpKSA9PiB7XG4gICAgICAgIHRoaXMubWVpVG9vbHMuc2V0UHJvY2Vzc1N0YXR1cyhtZWkpO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25Ub29sc1xuICAgICAgICAgIC5tZWlWYWxpZGF0b3IobWVpLm1laSlcbiAgICAgICAgICAudGhlbigoW2lzVmFsaWQsIGVycm9yTXNnXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZWlUb29scy51cGRhdGVNZWlEYXRhKG1laS5yb3csIG1laS5tZWksIGlzVmFsaWQsIGVycm9yTXNnKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLm1laVRvb2xzLnNldFJlc3VsdFN0YXR1cyhpc1ZhbGlkKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VzPy5mb3JFYWNoKChbcm93LCBwcm9wLCBvbGRWYWx1ZSwgbmV3VmFsdWVdKSA9PiB7XG4gICAgICAgIGlmIChwcm9wID09PSAnbWVpJyAmJiBvbGRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgbmV3IGVkaXRlZCBtZWkgZGF0YSBhbmQgdXBkYXRlIHRoZSB2YWxpZGF0aW9uIHN0YXR1c1xuICAgICAgICAgIHRoaXMubWVpVG9vbHMuc2V0UHJvY2Vzc1N0YXR1cyhuZXdWYWx1ZSk7XG4gICAgICAgICAgdGhpcy5tZWlUb29scy51cGRhdGVNZWlEYXRhKHJvdywgbmV3VmFsdWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICB0aGlzLnRhYmxlLnJlbmRlcigpO1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvblRvb2xzXG4gICAgICAgICAgICAubWVpVmFsaWRhdG9yKG5ld1ZhbHVlKVxuICAgICAgICAgICAgLnRoZW4oKFtpc1ZhbGlkLCBlcnJvck1zZ10pID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5tZWlUb29scy51cGRhdGVNZWlEYXRhKHJvdywgdW5kZWZpbmVkLCBpc1ZhbGlkLCBlcnJvck1zZyk7XG4gICAgICAgICAgICAgIHRoaXMudGFibGUucmVuZGVyKCk7XG4gICAgICAgICAgICAgIHRoaXMubWVpVG9vbHMuc2V0UmVzdWx0U3RhdHVzKGlzVmFsaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5cbmV4cG9ydCBjbGFzcyBFeHBvcnRUb29scyB7XG4gIGV4cG9ydFRvQ3N2KGV4cG9ydFBsdWdpbjogYW55KSB7XG4gICAgZXhwb3J0UGx1Z2luLmRvd25sb2FkRmlsZSgnY3N2Jywge1xuICAgICAgYm9tOiB0cnVlLFxuICAgICAgY29sdW1uRGVsaW1pdGVyOiAnLCcsXG4gICAgICByb3dIZWFkZXJzOiBmYWxzZSxcbiAgICAgIGNvbHVtbkhlYWRlcnM6IHRydWUsXG4gICAgICBleHBvcnRIaWRkZW5Db2x1bW5zOiB0cnVlLFxuICAgICAgZXhwb3J0SGlkZGVuUm93czogdHJ1ZSxcbiAgICAgIGZpbGVFeHRlbnNpb246ICdjc3YnLFxuICAgICAgZmlsZW5hbWU6ICd0YWJsZS1DU1YtZmlsZV9bWVlZWV0tW01NXS1bRERdJyxcbiAgICAgIG1pbWVUeXBlOiAndGV4dC9jc3Y7Y2hhcnNldD1VVEYtOCcsXG4gICAgICByb3dEZWxpbWl0ZXI6ICdcXHJcXG4nLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZXhwb3J0VG9FeGNlbChcbiAgICBpbnB1dEhlYWRlcjogc3RyaW5nW10sXG4gICAgYm9keTogYW55W10sXG4gICAgaGVhZGVyczogc3RyaW5nW10sXG4gICAgaW1hZ2VzOiBhbnlbXSxcbiAgKSB7XG4gICAgY29uc3QgRXhjZWxKUyA9IHJlcXVpcmUoJ2V4Y2VsanMnKTtcbiAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdTaGVldDEnKTtcbiAgICB3b3Jrc2hlZXQucHJvcGVydGllcy5kZWZhdWx0Um93SGVpZ2h0ID0gMTUwO1xuICAgIHdvcmtzaGVldC5jb2x1bW5zID0gaGVhZGVycy5tYXAoKGhlYWRlcikgPT4ge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IGhlYWRlci5pbmNsdWRlcygnbWVpJykgPyA3MCA6IDMwIH07XG4gICAgfSk7XG5cbiAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlcnMpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByb3cgPSBbXTtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaGVhZGVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBsZXQgaW5wdXRDdXJyZW50SGVhZGVyID0gaW5wdXRIZWFkZXIuZmluZCgoaGVhZGVyKSA9PlxuICAgICAgICAgIGhlYWRlci5pbmNsdWRlcyhoZWFkZXJzW2pdKSxcbiAgICAgICAgKTtcbiAgICAgICAgbGV0IGNlbGxWYWx1ZSA9IGJvZHlbaV1baW5wdXRDdXJyZW50SGVhZGVyXTtcbiAgICAgICAgaWYgKGhlYWRlcnNbal0uaW5jbHVkZXMoJ2ltYWdlJykpIHtcbiAgICAgICAgICBpZiAoY2VsbFZhbHVlLmluY2x1ZGVzKCdodHRwJykgfHwgY2VsbFZhbHVlLmluY2x1ZGVzKCdiYXNlNjQnKSkge1xuICAgICAgICAgICAgY2VsbFZhbHVlID0gJyc7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSB3b3JrYm9vay5hZGRJbWFnZSh7XG4gICAgICAgICAgICAgIGJhc2U2NDogYm9keVtpXVtpbnB1dEN1cnJlbnRIZWFkZXJdLFxuICAgICAgICAgICAgICBleHRlbnNpb246ICdwbmcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGltYWdlcy5maW5kKChpbWFnZSkgPT4gaW1hZ2Uucm93ID09PSBpKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICB3b3Jrc2hlZXQuYWRkSW1hZ2UoaW1nLCB7XG4gICAgICAgICAgICAgIHRsOiB7IGNvbDogaiwgcm93OiBpICsgMSB9LFxuICAgICAgICAgICAgICBleHQ6IHsgd2lkdGg6IHdpZHRoLCBoZWlnaHQ6IGhlaWdodCB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJvdy5wdXNoKGNlbGxWYWx1ZSk7XG4gICAgICB9XG4gICAgICB3b3Jrc2hlZXQuaW5zZXJ0Um93KGkgKyAyLCByb3cpO1xuICAgIH1cblxuICAgIHdvcmtzaGVldC5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uLmVhY2hDZWxsKChjZWxsKSA9PiB7XG4gICAgICAgIGNlbGwuYWxpZ25tZW50ID0ge1xuICAgICAgICAgIHZlcnRpY2FsOiAndG9wJyxcbiAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAgICAgICAgd3JhcFRleHQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCB5ZWFyID0gY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhjdXJyZW50RGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcoY3VycmVudERhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gYHRhYmxlLVhMU1gtZmlsZV8ke3llYXJ9LSR7bW9udGh9LSR7ZGF5fS54bHN4YDtcblxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXG4gICAgfSk7XG4gICAgc2F2ZUFzKGJsb2IsIGZpbGVOYW1lKTtcbiAgfVxufVxuIiwiaW1wb3J0IEhhbmRzb250YWJsZSBmcm9tICdoYW5kc29udGFibGUnO1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VUb29scyB7XG4gIHByaXZhdGUgaW1hZ2VzOiBhbnlbXTtcblxuICBjb25zdHJ1Y3RvcihpbWFnZXM6IGFueVtdKSB7XG4gICAgdGhpcy5pbWFnZXMgPSBpbWFnZXM7XG4gIH1cblxuICAvLyBJbWFnZSBIYW5kbGVyIEZ1bmN0aW9uc1xuICBzdG9yZUltYWdlcyhpbnB1dEltZ0hlYWRlcjogc3RyaW5nLCBib2R5OiBhbnlbXSkge1xuICAgIGJvZHkuZm9yRWFjaCgocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSByb3dbaW5wdXRJbWdIZWFkZXJdO1xuICAgICAgaWYgKGJhc2U2NEltYWdlKSB7XG4gICAgICAgIHRoaXMuZ2V0SW1hZ2VEaW1lbnNpb25zKGJhc2U2NEltYWdlKS50aGVuKChbd2lkdGgsIGhlaWdodF0pID0+IHtcbiAgICAgICAgICB0aGlzLmltYWdlcy5wdXNoKHtcbiAgICAgICAgICAgIGltYWdlOiBiYXNlNjRJbWFnZSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBHZXQgaW1hZ2UgZGltZW5zaW9uc1xuICBnZXRJbWFnZURpbWVuc2lvbnMoYmFzZTY0U3RyaW5nOiBzdHJpbmcpOiBQcm9taXNlPFtudW1iZXIsIG51bWJlcl0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICBjb25zdCBtYXhXaWR0aCA9IDYwO1xuICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gNjA7XG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aFJhdGlvID0gbWF4V2lkdGggLyBpbWcud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodFJhdGlvID0gbWF4SGVpZ2h0IC8gaW1nLmhlaWdodDtcbiAgICAgICAgbGV0IHJhdGlvO1xuICAgICAgICBpZiAoaW1nLndpZHRoID4gbWF4V2lkdGggfHwgaW1nLmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgIHJhdGlvID0gTWF0aC5taW4od2lkdGhSYXRpbywgaGVpZ2h0UmF0aW8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJhdGlvID0gTWF0aC5tYXgod2lkdGhSYXRpbywgaGVpZ2h0UmF0aW8pO1xuICAgICAgICB9XG4gICAgICAgIGltZy53aWR0aCAqPSByYXRpbztcbiAgICAgICAgaW1nLmhlaWdodCAqPSByYXRpbztcbiAgICAgICAgcmVzb2x2ZShbaW1nLndpZHRoLCBpbWcuaGVpZ2h0XSk7XG4gICAgICB9O1xuICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICBpbWcuc3JjID0gYmFzZTY0U3RyaW5nO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gSW1hZ2UgUmVuZGVyZXIgRnVuY3Rpb25zXG4gIHB1YmxpYyBpbWdSZW5kZXIoXG4gICAgaW5zdGFuY2U6IEhhbmRzb250YWJsZSxcbiAgICB0ZDogSFRNTEVsZW1lbnQsXG4gICAgcm93OiBudW1iZXIsXG4gICAgY29sOiBudW1iZXIsXG4gICAgcHJvcDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgY2VsbFByb3BlcnRpZXM6IEhhbmRzb250YWJsZS5DZWxsUHJvcGVydGllcyxcbiAgKSB7XG4gICAgSGFuZHNvbnRhYmxlLmRvbS5lbXB0eSh0ZCk7XG5cbiAgICBpZiAodmFsdWUgJiYgKHZhbHVlLmluY2x1ZGVzKCdodHRwJykgfHwgdmFsdWUuaW5jbHVkZXMoJ2Jhc2U2NCcpKSkge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnaW1nLWNlbGwtY29udGFpbmVyJyk7XG5cbiAgICAgIGNvbnN0IGltZ0NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgaW1nQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2ltZy1jb250YWluZXInKTtcblxuICAgICAgY29uc3QgaW1nID0gdGhpcy5jcmVhdGVJbWFnZUVsZW1lbnQodmFsdWUpO1xuICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLmltYWdlcy5maW5kKChpbWFnZSkgPT4gaW1hZ2Uucm93ID09PSByb3cpO1xuICAgICAgaW1nLnN0eWxlLndpZHRoID0gaW1hZ2UgPyBgJHtpbWFnZS53aWR0aH1weGAgOiAnNjBweCc7XG4gICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gaW1hZ2UgPyBgJHtpbWFnZS5oZWlnaHR9cHhgIDogJzQwcHgnO1xuICAgICAgaW1nQ29udGFpbmVyLmFwcGVuZENoaWxkKGltZyk7XG5cbiAgICAgIGNvbnN0IHJlc2l6ZUhhbmRsZSA9IHRoaXMuY3JlYXRlUmVzaXplSGFuZGxlKCk7XG4gICAgICB0aGlzLm1ha2VJbWFnZVJlc2l6YWJsZShpbWcsIHJlc2l6ZUhhbmRsZSwgcm93KTtcbiAgICAgIGltZ0NvbnRhaW5lci5hcHBlbmRDaGlsZChyZXNpemVIYW5kbGUpO1xuXG4gICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaW1nQ29udGFpbmVyKTtcblxuICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMuY3JlYXRlQnV0dG9ucyhpbnN0YW5jZSwgcm93LCBjb2wpO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuXG4gICAgICB0ZC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgY2VsbFByb3BlcnRpZXMucmVhZE9ubHkgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXZhbHVlKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaGFuZGxlSW1nVXBsb2FkKGluc3RhbmNlLCByb3csIGNvbCk7XG4gICAgICB0ZC5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICBjZWxsUHJvcGVydGllcy5yZWFkT25seSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRkLmlubmVyVGV4dCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGQ7XG4gIH1cblxuICAvLyBJbWFnZSBVcGxvYWQgRnVuY3Rpb25zXG4gIGhhbmRsZUltZ1VwbG9hZChpbnN0YW5jZTogSGFuZHNvbnRhYmxlLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgndXBsb2FkLWltZy1jb250YWluZXInKTtcblxuICAgIGNvbnN0IHVwbG9hZEltZ0J1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIHVwbG9hZEltZ0J1dHRvbi5jbGFzc0xpc3QuYWRkKCd1cGxvYWQtaW1nLWJ0bicpO1xuXG4gICAgY29uc3QgdXBsb2FkSW1nSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHVwbG9hZEltZ0ljb24uc3JjID0gJy4vQ3Jlc3MtZ2gvYXNzZXRzL2ltZy91cGxvYWQtaW1nLnN2Zyc7XG4gICAgdXBsb2FkSW1nSWNvbi5hbHQgPSAnVXBsb2FkJztcbiAgICB1cGxvYWRJbWdCdXR0b24uYXBwZW5kQ2hpbGQodXBsb2FkSW1nSWNvbik7XG5cbiAgICBjb25zdCBpbWdJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW1nSW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbWdJbnB1dC5hY2NlcHQgPSAnaW1hZ2UvKic7XG4gICAgaW1nSW5wdXQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgIHVwbG9hZEltZ0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIGltZ0lucHV0LmNsaWNrKCk7XG4gICAgfSk7XG5cbiAgICBpbWdJbnB1dC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzWzBdO1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmFzZTY0U3RyaW5nID0gZS50YXJnZXQucmVzdWx0IGFzIHN0cmluZztcbiAgICAgICAgICBpbnN0YW5jZS5zZXREYXRhQXRDZWxsKHJvdywgY29sLCBiYXNlNjRTdHJpbmcpO1xuICAgICAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgICAgICAgIHRoaXMuZ2V0SW1hZ2VEaW1lbnNpb25zKGJhc2U2NFN0cmluZykudGhlbigoW3dpZHRoLCBoZWlnaHRdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmltYWdlcy5wdXNoKHsgaW1hZ2U6IGJhc2U2NFN0cmluZywgd2lkdGgsIGhlaWdodCwgcm93IH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh1cGxvYWRJbWdCdXR0b24pO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChpbWdJbnB1dCk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIGNyZWF0ZUltYWdlRWxlbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgaW1nLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xuICAgIGltZy5zdHlsZS5tYXhIZWlnaHQgPSAnMTAwJSc7XG4gICAgaW1nLnNyYyA9IHZhbHVlO1xuICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGltZztcbiAgfVxuXG4gIGNyZWF0ZVJlc2l6ZUhhbmRsZSgpIHtcbiAgICBjb25zdCByZXNpemVIYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICByZXNpemVIYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XG4gICAgcmVzaXplSGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcbiAgICByZXNpemVIYW5kbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ2dyYXknO1xuICAgIHJlc2l6ZUhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgcmVzaXplSGFuZGxlLnN0eWxlLnJpZ2h0ID0gJzAnO1xuICAgIHJlc2l6ZUhhbmRsZS5zdHlsZS5ib3R0b20gPSAnMCc7XG4gICAgcmVzaXplSGFuZGxlLnN0eWxlLmN1cnNvciA9ICdzZS1yZXNpemUnO1xuICAgIHJldHVybiByZXNpemVIYW5kbGU7XG4gIH1cblxuICBtYWtlSW1hZ2VSZXNpemFibGUoXG4gICAgaW1nOiBIVE1MSW1hZ2VFbGVtZW50LFxuICAgIHJlc2l6ZUhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICAgcm93OiBudW1iZXIsXG4gICkge1xuICAgIHJlc2l6ZUhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBzdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgICAgY29uc3Qgc3RhcnRZID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIGNvbnN0IHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgbmV3V2lkdGggPSBzdGFydFdpZHRoICsgKGUuY2xpZW50WCAtIHN0YXJ0WCk7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgKGUuY2xpZW50WSAtIHN0YXJ0WSk7XG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke25ld1dpZHRofXB4YDtcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5pbWFnZXMuZmluZCgoaW1hZ2UpID0+IGltYWdlLnJvdyA9PT0gcm93KTtcbiAgICAgICAgaWYgKGltYWdlKSB7XG4gICAgICAgICAgaW1hZ2Uud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICBpbWFnZS5oZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlQnV0dG9ucyhpbnN0YW5jZTogSGFuZHNvbnRhYmxlLCByb3c6IG51bWJlciwgY29sOiBudW1iZXIpIHtcbiAgICBjb25zdCBidXR0b25Db250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBidXR0b25Db250YWluZXIuY2xhc3NMaXN0LmFkZCgnaW1nLWJ0bi1jb250YWluZXInKTtcblxuICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGRlbGV0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdpY29uLWJ0bicpO1xuICAgIGNvbnN0IGRlbGV0ZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICBkZWxldGVJY29uLnNyYyA9ICcuL0NyZXNzLWdoL2Fzc2V0cy9pbWcvcmVtb3ZlLWRvYy5zdmcnO1xuICAgIGRlbGV0ZUljb24uYWx0ID0gJ0RlbGV0ZSc7XG4gICAgZGVsZXRlSWNvbi50aXRsZSA9ICdEZWxldGUgSW1hZ2UnO1xuICAgIGRlbGV0ZUJ1dHRvbi5hcHBlbmRDaGlsZChkZWxldGVJY29uKTtcbiAgICBkZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBpbnN0YW5jZS5zZXREYXRhQXRDZWxsKHJvdywgY29sLCAnJyk7XG4gICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5nZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgIGNoYW5nZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCdpY29uLWJ0bicpO1xuICAgIGNvbnN0IGNoYW5nZUljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICBjaGFuZ2VJY29uLnNyYyA9ICcuL0NyZXNzLWdoL2Fzc2V0cy9pbWcvcmVuYW1lLWRvYy5zdmcnO1xuICAgIGNoYW5nZUljb24uYWx0ID0gJ0NoYW5nZSc7XG4gICAgY2hhbmdlSWNvbi50aXRsZSA9ICdDaGFuZ2UgSW1hZ2UnO1xuICAgIGNoYW5nZUJ1dHRvbi5hcHBlbmRDaGlsZChjaGFuZ2VJY29uKTtcbiAgICBjaGFuZ2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VJbnB1dCA9IHRoaXMuaGFuZGxlSW1nVXBsb2FkKGluc3RhbmNlLCByb3csIGNvbCk7XG4gICAgICBjaGFuZ2VJbnB1dC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmNsaWNrKCk7XG4gICAgfSk7XG5cbiAgICBidXR0b25Db250YWluZXIuYXBwZW5kQ2hpbGQoZGVsZXRlQnV0dG9uKTtcbiAgICBidXR0b25Db250YWluZXIuYXBwZW5kQ2hpbGQoY2hhbmdlQnV0dG9uKTtcblxuICAgIHJldHVybiBidXR0b25Db250YWluZXI7XG4gIH1cbn1cbiIsImltcG9ydCBIYW5kc29udGFibGUgZnJvbSAnaGFuZHNvbnRhYmxlJztcbmltcG9ydCB7IHVwZGF0ZVN0YXR1cyB9IGZyb20gJy4vVmFsaWRhdGlvblRvb2xzJztcbmltcG9ydCAqIGFzIE5vdGlmaWNhdGlvbiBmcm9tICcuLi91dGlscy9Ob3RpZmljYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTWVpVG9vbHMge1xuICBwcml2YXRlIG1laURhdGE6IGFueVtdO1xuICBwdWJsaWMgdmFsaWRhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgcHVibGljIHBlbmRpbmdWYWxpZGF0aW9ucyA9IDA7XG4gIHB1YmxpYyBoYXNJbnZhbGlkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tZWlEYXRhID0gW107XG4gIH1cblxuICAvLyBNZWkgSW5pdGlhbGl6YXRpb25cbiAgcHVibGljIGluaXRNZWlEYXRhKGlucHV0TWVpSGVhZGVyOiBzdHJpbmcsIGJvZHk6IGFueVtdKSB7XG4gICAgYm9keS5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCBtZWkgPSByb3dbaW5wdXRNZWlIZWFkZXJdO1xuICAgICAgaWYgKG1laSkge1xuICAgICAgICB0aGlzLm1laURhdGEucHVzaCh7XG4gICAgICAgICAgbWVpLFxuICAgICAgICAgIHJvdzogcm93SW5kZXgsXG4gICAgICAgICAgaXNWYWxpZDogbnVsbCxcbiAgICAgICAgICBlcnJvck1zZzogbnVsbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHB1YmxpYyBnZXRNZWlEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1laURhdGE7XG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIG1laSBkYXRhXG4gIHB1YmxpYyB1cGRhdGVNZWlEYXRhKFxuICAgIHJvdzogbnVtYmVyLFxuICAgIG1laT86IHN0cmluZyxcbiAgICBpc1ZhbGlkPzogYm9vbGVhbixcbiAgICBlcnJvck1zZz86IHN0cmluZyxcbiAgKSB7XG4gICAgY29uc3QgbWVpRGF0YSA9IHRoaXMubWVpRGF0YS5maW5kKChtZWlEYXRhKSA9PiBtZWlEYXRhLnJvdyA9PT0gcm93KTtcbiAgICBpZiAobWVpRGF0YSkge1xuICAgICAgaWYgKG1laSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1laURhdGEubWVpID0gbWVpO1xuICAgICAgfVxuICAgICAgaWYgKGlzVmFsaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBtZWlEYXRhLmlzVmFsaWQgPSBpc1ZhbGlkO1xuICAgICAgfVxuICAgICAgaWYgKGVycm9yTXNnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbWVpRGF0YS5lcnJvck1zZyA9IGVycm9yTXNnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1laURhdGEucHVzaCh7XG4gICAgICAgIHJvdyxcbiAgICAgICAgbWVpOiBtZWkgPz8gbWVpRGF0YS5tZWksXG4gICAgICAgIGlzVmFsaWQ6IGlzVmFsaWQgPz8gbWVpRGF0YS5pc1ZhbGlkLFxuICAgICAgICBlcnJvck1zZzogZXJyb3JNc2cgPz8gbWVpRGF0YS5lcnJvck1zZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQcm9jZXNzU3RhdHVzKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGlvbkluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdXBkYXRlU3RhdHVzKCdwcm9jZXNzaW5nJyk7XG4gICAgfVxuICAgIC8vIFVwZGF0ZSBgcGVuZGluZ1ZhbGlkYXRpb25zYCBpZiB2YWx1ZSBpcyBub3QgZW1wdHlcbiAgICBpZiAodmFsdWUpIHRoaXMucGVuZGluZ1ZhbGlkYXRpb25zKys7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVzdWx0U3RhdHVzKGlzVmFsaWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWlzVmFsaWQpIHRoaXMuaGFzSW52YWxpZCA9IHRydWU7XG4gICAgdGhpcy5wZW5kaW5nVmFsaWRhdGlvbnMtLTtcbiAgICBpZiAodGhpcy5wZW5kaW5nVmFsaWRhdGlvbnMgPT09IDApIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZVN0YXR1cygnZG9uZScsIHRoaXMuaGFzSW52YWxpZCk7XG4gICAgICB0aGlzLmhhc0ludmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyBNZWkgUmVuZGVyZXIgRnVuY3Rpb25zXG4gIHB1YmxpYyBtZWlSZW5kZXIoXG4gICAgaW5zdGFuY2U6IEhhbmRzb250YWJsZSxcbiAgICB0ZDogSFRNTEVsZW1lbnQsXG4gICAgcm93OiBudW1iZXIsXG4gICAgY29sOiBudW1iZXIsXG4gICAgcHJvcDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnksXG4gICAgY2VsbFByb3BlcnRpZXM6IEhhbmRzb250YWJsZS5DZWxsUHJvcGVydGllcyxcbiAgKSB7XG4gICAgSGFuZHNvbnRhYmxlLmRvbS5lbXB0eSh0ZCk7XG5cbiAgICBjb25zdCBtZWkgPSB0aGlzLm1laURhdGEuZmluZCgobWVpKSA9PiBtZWkucm93ID09PSByb3cpO1xuICAgIGlmIChtZWkpIHtcbiAgICAgIGlmIChtZWkuaXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gY29udGFpbmVyIGZvciB0aGUgaW52YWxpZCBjZWxsXG4gICAgICAgIGNvbnN0IGludmFsaWRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW52YWxpZENvbnRhaW5lci5jbGFzc05hbWUgPSAnaW52YWxpZC1jb250YWluZXInO1xuXG4gICAgICAgIC8vIG1laSBkYXRhXG4gICAgICAgIGNvbnN0IG1laURhdGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIG1laURhdGEudGV4dENvbnRlbnQgPSBtZWkubWVpO1xuICAgICAgICBpbnZhbGlkQ29udGFpbmVyLmFwcGVuZENoaWxkKG1laURhdGEpO1xuXG4gICAgICAgIC8vIHRvb2x0aXAgaWNvbiBhbmQgdGV4dFxuICAgICAgICBjb25zdCB0b29sdGlwQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRvb2x0aXBDb250YWluZXIuY2xhc3NOYW1lID0gJ3Rvb2x0aXAtY29udGFpbmVyJztcblxuICAgICAgICBjb25zdCB0b29sdGlwQ29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0b29sdGlwQ29udGVudC5jbGFzc05hbWUgPSAndG9vbHRpcC10ZXh0JztcbiAgICAgICAgdG9vbHRpcENvbnRlbnQudGV4dENvbnRlbnQgPSBtZWkuZXJyb3JNc2c7XG5cbiAgICAgICAgY29uc3QgY29weUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICBjb3B5QnRuLnNyYyA9ICcuL0NyZXNzLWdoL2Fzc2V0cy9pbWcvY29weS1pY29uLnN2Zyc7XG4gICAgICAgIGNvcHlCdG4uY2xhc3NOYW1lID0gJ3Rvb2x0aXAtY29weSc7XG5cbiAgICAgICAgY29uc3QgdG9vbHRpcEljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgdG9vbHRpcEljb24uc3JjID0gJy4vQ3Jlc3MtZ2gvYXNzZXRzL2ltZy9pbmZvLWljb24uc3ZnJztcbiAgICAgICAgdG9vbHRpcEljb24uY2xhc3NOYW1lID0gJ3Rvb2x0aXAtaWNvbic7XG5cbiAgICAgICAgdG9vbHRpcENvbnRlbnQuYXBwZW5kQ2hpbGQoY29weUJ0bik7XG4gICAgICAgIHRvb2x0aXBDb250YWluZXIuYXBwZW5kQ2hpbGQodG9vbHRpcENvbnRlbnQpO1xuICAgICAgICB0b29sdGlwQ29udGFpbmVyLmFwcGVuZENoaWxkKHRvb2x0aXBJY29uKTtcbiAgICAgICAgaW52YWxpZENvbnRhaW5lci5hcHBlbmRDaGlsZCh0b29sdGlwQ29udGFpbmVyKTtcblxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChpbnZhbGlkQ29udGFpbmVyKTtcbiAgICAgICAgdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNmZmJlYmEnO1xuXG4gICAgICAgIGNvcHlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgLy8gQ29weSB0aGUgdG9vbHRpcENvbnRlbnQncyB0ZXh0IHRvIHRoZSBjbGlwYm9hcmRcbiAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXG4gICAgICAgICAgICAud3JpdGVUZXh0KG1laS5lcnJvck1zZylcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLnF1ZXVlTm90aWZpY2F0aW9uKCdDb3BpZWQgdG8gY2xpcGJvYXJkJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBOb3RpZmljYXRpb24ucXVldWVOb3RpZmljYXRpb24oJ0ZhaWxlZCB0byBjb3B5IHRleHQnLCAnZXJyb3InKTtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNvcHkgdGV4dDogJywgZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRkLnRleHRDb250ZW50ID0gbWVpLm1laTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGQ7XG4gIH1cbn1cbiIsImltcG9ydCB7IHZhbGlkYXRpb25TdGF0dXMgfSBmcm9tICcuLi9UeXBlcyc7XG5cbi8qKlxuICogVXBkYXRlIHRoZSBVSSB3aXRoIHRoZSB2YWxpZGF0aW9uIHJlc3VsdHMuIENhbGxlZCB3aGVuIHRoZSBXZWJXb3JrZXIgZmluaXNoZXMgdmFsaWRhdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhcbiAgc3RhdHVzOiB2YWxpZGF0aW9uU3RhdHVzLFxuICBoYXNJbnZhbGlkPzogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCBtZWlTdGF0dXM6IEhUTUxTcGFuRWxlbWVudCA9XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ZhbGlkYXRpb25fc3RhdHVzJykhO1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ3Byb2Nlc3NpbmcnOlxuICAgICAgbWVpU3RhdHVzLnRleHRDb250ZW50ID0gJ2NoZWNraW5nLi4uJztcbiAgICAgIG1laVN0YXR1cy5zdHlsZS5jb2xvciA9ICdncmF5JztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZG9uZSc6XG4gICAgICBpZiAoaGFzSW52YWxpZCkge1xuICAgICAgICBtZWlTdGF0dXMudGV4dENvbnRlbnQgPSAnSU5WQUxJRCc7XG4gICAgICAgIG1laVN0YXR1cy5zdHlsZS5jb2xvciA9ICdyZWQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVpU3RhdHVzLnRleHRDb250ZW50ID0gJ1ZBTElEJztcbiAgICAgICAgbWVpU3RhdHVzLnN0eWxlLmNvbG9yID0gJyM0YmMxNGInO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbWVpU3RhdHVzLnRleHRDb250ZW50ID0gJ3Vua25vd24nO1xuICAgICAgbWVpU3RhdHVzLnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25Ub29scyB7XG4gIHByaXZhdGUgc2NoZW1hUHJvbWlzZTogUHJvbWlzZTxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGVtcGxhdGVQcm9taXNlOiBQcm9taXNlPHN0cmluZz4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZldGNoU2NoZW1hQW5kVGVtcGxhdGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hTY2hlbWFBbmRUZW1wbGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNjaGVtYVByb21pc2UgPSBmZXRjaChcbiAgICAgIF9fQVNTRVRfUFJFRklYX18gKyAnYXNzZXRzL3ZhbGlkYXRpb24vbWVpLWFsbC5ybmcnLFxuICAgICkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLnRleHQoKSk7XG4gICAgdGhpcy50ZW1wbGF0ZVByb21pc2UgPSBmZXRjaChcbiAgICAgIF9fQVNTRVRfUFJFRklYX18gKyAnYXNzZXRzL3ZhbGlkYXRpb24vbWVpX3RlbXBsYXRlLm1laScsXG4gICAgKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UudGV4dCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNRUkgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIG1laVZhbGlkYXRvcih2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTxbYm9vbGVhbiwgc3RyaW5nIHwgbnVsbF0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnNjaGVtYVByb21pc2UgPT09IG51bGwgfHwgdGhpcy50ZW1wbGF0ZVByb21pc2UgPT09IG51bGwpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFNjaGVtYUFuZFRlbXBsYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHRoaXMuc2NoZW1hUHJvbWlzZTtcbiAgICAgICAgY29uc3QgbWVpVGVtcGxhdGUgPSBhd2FpdCB0aGlzLnRlbXBsYXRlUHJvbWlzZTtcblxuICAgICAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlTUVJKHZhbHVlLCBzY2hlbWEsIG1laVRlbXBsYXRlKTtcbiAgICAgICAgaWYgKGVycm9ycyA9PSBudWxsKSB7XG4gICAgICAgICAgcmVzb2x2ZShbdHJ1ZSwgbnVsbF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBsb2cgPSAnJztcbiAgICAgICAgICBlcnJvcnMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICAgICAgbG9nICs9IGxpbmUgKyAnXFxuJztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXNvbHZlKFtmYWxzZSwgbG9nXSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVzb2x2ZShbZmFsc2UsICdGYWlsZWQgdG8gdmFsaWRhdGUgTUVJJ10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1FSShcbiAgICB2YWx1ZTogc3RyaW5nLFxuICAgIHNjaGVtYTogc3RyaW5nLFxuICAgIG1laVRlbXBsYXRlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgY29uc3QgbWVpRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhtZWlUZW1wbGF0ZSwgJ3RleHQveG1sJyk7XG4gICAgICAgIGNvbnN0IG1laSA9IG1laURvYy5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgbGF5ZXIgPSBtZWkucXVlcnlTZWxlY3RvcignbGF5ZXInKTtcbiAgICAgICAgbGF5ZXIuaW5uZXJIVE1MID0gdmFsdWU7XG4gICAgICAgIGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgWE1MU2VyaWFsaXplcigpO1xuICAgICAgICBjb25zdCB0b0JlVmFsaWRhdGVkID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhtZWlEb2MpO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUT0RPOiBvcHRpbWl6ZSBwZXJmb3JtYW5jZVxuICAgICAgICAgKiB1c2UgaWQgdG8gdHJhY2sgZWFjaCB3b3JrZXIgcmVxdWVzdFxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihcbiAgICAgICAgICBfX0FTU0VUX1BSRUZJWF9fICsgJ3dvcmtlcnMvVmFsaWRhdGlvbldvcmtlci5qcycsXG4gICAgICAgICk7XG5cbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBtZWk6IHRvQmVWYWxpZGF0ZWQsXG4gICAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAobWVzc2FnZTogeyBkYXRhOiBzdHJpbmdbXSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gbWVzc2FnZS5kYXRhO1xuICAgICAgICAgIHJlc29sdmUoZXJyb3JzKTtcbiAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlc29sdmUoWydGYWlsZWQgdG8gdmFsaWRhdGUgTUVJJ10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBNb2RhbFdpbmRvd0ludGVyZmFjZSB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaG90a2V5c01vZGFsIH0gZnJvbSAnLi4vQ29udGVudHMnO1xuaW1wb3J0IHtcbiAgbmV3Rm9sZGVySFRNTCxcbiAgcmVuYW1lSFRNTCxcbiAgdXBsb2FkQXJlYUhUTUwsXG59IGZyb20gJy4uL0Rhc2hib2FyZC9EYXNoYm9hcmRDb250ZW50JztcblxuLyoqXG4gKiBEZWZpbmVzIG1vZGFsIHR5cGVzLlxuICogVG8gY3JlYXRlIG5ldyBtb2RhbCB3aW5kb3cgdHlwZXMsIGFkZCBlbnVtIG9wdGlvbiBhbmQgaW1wbGVtZW50IGxvZ2ljIGluc2lkZSBNb2RhbCBjbGFzcy5cbiAqL1xuZXhwb3J0IGVudW0gTW9kYWxXaW5kb3dWaWV3IHtcbiAgSE9US0VZUyxcbiAgRVJST1JfTE9HLCAvLyBmb3IgdmFsaWRhdGlvbiBlcnJvcnMgYWdhaW5zdCBNRUkgc2NoZW1hIGFuZCBpbnZhbGlkIGVsZW1lbnQgZXJyb3JzXG4gIERPQ1VNRU5UX1VQTE9BRCxcbiAgTU9WRV9UTyxcbiAgTkVXX0ZPTERFUixcbiAgUkVOQU1FLFxufVxuXG5lbnVtIE1vZGFsV2luZG93U3RhdGUge1xuICBPUEVOLFxuICBDTE9TRUQsXG59XG5cbi8qKlxuICogTW9kYWwgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgYW5kIGNvbnRyb2wgc3RhdGUvY29udGVudFxuICogb2YgbW9kYWwgd2luZG93cyBpbiBjcmVzcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE1vZGFsV2luZG93IGltcGxlbWVudHMgTW9kYWxXaW5kb3dJbnRlcmZhY2Uge1xuICBwcml2YXRlIG1vZGFsV2luZG93VmlldzogTW9kYWxXaW5kb3dWaWV3OyAvLyBjdXJyZW50IG1vZGFsIHR5cGVcbiAgcHJpdmF0ZSBtb2RhbFdpbmRvd1N0YXRlOiBNb2RhbFdpbmRvd1N0YXRlOyAvLyBvcGVuIG9yIGNsb3NlZD9cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1vZGFsV2luZG93U3RhdGUgPSBNb2RhbFdpbmRvd1N0YXRlLkNMT1NFRDtcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZXZlbnQgbGlzdGVuZXJzIHRoYXQgYXBwbHkgdG8gYWxsIG1vZGFsIHdpbmRvd3NcbiAgICovXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcbiAgICBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctaGVhZGVyLWNsb3NlJylcbiAgICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGlkZU1vZGFsV2luZG93LmJpbmQodGhpcykpO1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1vZGFsLXdpbmRvdycpXG4gICAgICAuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bkxpc3RlbmVyLmJpbmQodGhpcykpO1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1vZGFsLXdpbmRvdy1jb250YWluZXInKVxuICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5mb2N1c01vZGFsV2luZG93LmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kYWwgd2luZG93XG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1vZGFsLXdpbmRvdy1oZWFkZXItY2xvc2UnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oaWRlTW9kYWxXaW5kb3cuYmluZCh0aGlzKSk7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93JylcbiAgICAgIC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duTGlzdGVuZXIuYmluZCh0aGlzKSk7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWNvbnRhaW5lcicpXG4gICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmZvY3VzTW9kYWxXaW5kb3cuYmluZCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBtb2RhbCB2aWV3IG9mIHRoaXMgTW9kYWwgaW5zdGFuY2UuXG4gICAqIFVwZGF0ZSB0aGUgY29udGVudCBiYXNlZCBvbiBwYXNzZWQgdmlldy5cbiAgICogQHBhcmFtIHZpZXcgVHlwZSBvZiBtb2RhbCB0byBvcGVuIChNb2RhbFZpZXcgZW51bSlcbiAgICovXG4gIHNldE1vZGFsV2luZG93Vmlldyh2aWV3OiBNb2RhbFdpbmRvd1ZpZXcsIGNvbnRlbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGFsV2luZG93VmlldyA9IHZpZXc7XG4gICAgdGhpcy5zZXRNb2RhbFdpbmRvd0NvbnRlbnQoY29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IG1vZGFsIHZpZXcgYXMgYSBzdHJpbmdcbiAgICovXG4gIGdldE1vZGFsV2luZG93VmlldygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZGFsV2luZG93Vmlldy50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBtb2RlbCB3aW5kb3cgd2l0aCBjb250ZW50IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBNb2RhbFZpZXcuXG4gICAqL1xuICBvcGVuTW9kYWxXaW5kb3coKTogdm9pZCB7XG4gICAgLy8gbWFrZSBzdXJlIG5vIG90aGVyIG1vZGFsIGNvbnRlbnQgaXMgYmVpbmcgZGlzcGxheWVkXG4gICAgQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NyZXNzLW1vZGFsLXdpbmRvdy1jb250ZW50JyksXG4gICAgKS5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKTtcbiAgICB9KTtcbiAgICBzd2l0Y2ggKHRoaXMubW9kYWxXaW5kb3dWaWV3KSB7XG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5IT1RLRVlTOlxuICAgICAgICAvLyBzZXQgdXAgYW5kIGRpcGxheSBob3RrZXkgbW9kYWwgY29udGVudFxuICAgICAgICBkb2N1bWVudFxuICAgICAgICAgIC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWNvbnRlbnQtaG90a2V5cycpXG4gICAgICAgICAgLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcblxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuRE9DVU1FTlRfVVBMT0FEOlxuICAgICAgLy8gYWRkIGZ1bmN0aW9uIHRvIHBhaXJpbmcgYnV0dG9uXG4gICAgICAvLyBicmVhaztcblxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuTU9WRV9UTzpcblxuICAgICAgLy8gYnJlYWs7XG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ORVdfRk9MREVSOlxuXG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5SRU5BTUU6XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9XG4gICAgICAgICAgJ2ZsZXgnO1xuICAgICAgICB0aGlzLmZvY3VzTW9kYWxXaW5kb3coKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIG1ha2Ugc3VyZSB1c2VyIGNhbid0IHNjcm9sbCB3aGVuIG1vZGFsIGlzIG9wZW5cbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WCA9ICdoaWRkZW4nO1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgdGhpcy5tb2RhbFdpbmRvd1N0YXRlID0gTW9kYWxXaW5kb3dTdGF0ZS5PUEVOO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgdGhlIGNyZXNzIG1vZGFsIHdpbmRvd1xuICAgKi9cbiAgaGlkZU1vZGFsV2luZG93KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5tb2RhbFdpbmRvd1ZpZXcpIHtcbiAgICAgIGNhc2UgTW9kYWxXaW5kb3dWaWV3LkRPQ1VNRU5UX1VQTE9BRDpcbiAgICAgIGNhc2UgTW9kYWxXaW5kb3dWaWV3Lk1PVkVfVE86XG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ORVdfRk9MREVSOlxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuUkVOQU1FOlxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAnY3Jlc3MtbW9kYWwtd2luZG93LWNvbnRlbnQtY29udGFpbmVyJyxcbiAgICAgICAgKS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWNvbnRhaW5lcicpLnN0eWxlLmRpc3BsYXkgPVxuICAgICAgJ25vbmUnO1xuICAgIC8vIHJlc2V0IHNjcm9sbCBiZWhhdmlvciBvZiBib2R5XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvd1ggPSAnaGlkZGVuJztcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93WSA9ICdzY3JvbGwnO1xuICAgIHRoaXMubW9kYWxXaW5kb3dTdGF0ZSA9IE1vZGFsV2luZG93U3RhdGUuQ0xPU0VEO1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29udGVudCBvZiBtb2RhbCB3aW5kb3dcbiAgICovXG4gIHByaXZhdGUgc2V0TW9kYWxXaW5kb3dDb250ZW50KGNvbnRlbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICdjcmVzcy1tb2RhbC13aW5kb3ctY29udGVudC1jb250YWluZXInLFxuICAgICk7XG4gICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWhlYWRlci10aXRsZScpO1xuXG4gICAgc3dpdGNoICh0aGlzLm1vZGFsV2luZG93Vmlldykge1xuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuSE9US0VZUzpcbiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGhvdGtleXNNb2RhbDtcbiAgICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gJ0hPVEtFWVMnO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuRVJST1JfTE9HOlxuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYDxkaXYgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAzMHB4O3doaXRlLXNwYWNlOiBwcmUtbGluZTtvdmVyZmxvdy15OiBzY3JvbGw7XCI+JHtjb250ZW50fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVzcy1tb2RhbC13aW5kb3ctYnRuXCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUkkoXG4gICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICApfVwiIGRvd25sb2FkPVwiZXJyb3IubG9nXCI+XG4gICAgICAgICAgICAgIEV4cG9ydFxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+YDtcbiAgICAgICAgdGl0bGUuaW5uZXJUZXh0ID0gJ0VSUk9SIExPRyc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ET0NVTUVOVF9VUExPQUQ6XG4gICAgICAgIHRpdGxlLmlubmVyVGV4dCA9ICdET0NVTUVOVCBVUExPQUQnO1xuICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdXBsb2FkQXJlYUhUTUw7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5NT1ZFX1RPOlxuICAgICAgICB0aXRsZS5pbm5lclRleHQgPSAnTU9WRSBUTyc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ORVdfRk9MREVSOlxuICAgICAgICB0aXRsZS5pbm5lclRleHQgPSAnTkVXIEZPTERFUic7XG4gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBuZXdGb2xkZXJIVE1MO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuUkVOQU1FOlxuICAgICAgICB0aXRsZS5pbm5lclRleHQgPSAnUkVOQU1FJztcbiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHJlbmFtZUhUTUw7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIHNlbGVjdGlvbiB0eXBlLiBUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmlsbCBtb2RhbCB3aW5kb3cgd2l0aCBjb250ZW50IGZvciB1cGRhdGluZyBzeWxsYWJsZSB0ZXh0XG4gICAqL1xuICBwcml2YXRlIG9wZW5FZGl0U3lsVGV4dE1vZGFsV2luZG93ID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgIC8vIG1ha2Ugc3VyZSBubyBvdGhlciBtb2RhbCBjb250ZW50IGlzIGJlaW5nIGRpc3BsYXllZFxuICAgIEFycmF5LmZyb20oXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjcmVzcy1tb2RhbC13aW5kb3ctY29udGVudCcpLFxuICAgICkuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKCd2aXNpYmxlJyk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdXAgRWRpdCBTeWxsYWJsZSBUZXh0IG1vZGFsIHdpbmRvd1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1vZGFsLXdpbmRvdy1jb250ZW50LWVkaXQtdGV4dCcpXG4gICAgICAuY2xhc3NMaXN0LmFkZCgndmlzaWJsZScpO1xuXG4gICAgLy8gUmVzZXQgXCJDYW5jZWxcIiBidXR0b24gZXZlbnQgbGlzdGVuZXJcbiAgICBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctZWRpdC10ZXh0LWNhbmNlbCcpXG4gICAgICAucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmhpZGVNb2RhbFdpbmRvdyk7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWVkaXQtdGV4dC1jYW5jZWwnKVxuICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oaWRlTW9kYWxXaW5kb3cuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBSZXNldCBcIlNhdmVcIiBidXR0b24gZXZlbnQgbGlzdGVuZXJcbiAgICBkb2N1bWVudFxuICAgICAgLmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctZWRpdC10ZXh0LXNhdmUnKVxuICAgICAgLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy51cGRhdGVTeWxUZXh0LmJpbmQodGhpcykpO1xuICAgIGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1vZGFsLXdpbmRvdy1lZGl0LXRleHQtc2F2ZScpXG4gICAgICAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnVwZGF0ZVN5bFRleHQuYmluZCh0aGlzKSk7XG5cbiAgICAvLyBkaXNwbGF5IG1vZGFsIHdpbmRvd1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9XG4gICAgICAnZmxleCc7XG4gICAgdGhpcy5mb2N1c01vZGFsV2luZG93KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0ZXh0IG9mIHNlbGVjdGVkLXRvLWVkaXQgc3lsbGFibGVzIHdpdGggdXNlci1wcm92aWRlZCB0ZXh0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVN5bFRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2xvc2UgbW9kYWwgd2luZG93XG4gICAgdGhpcy5oaWRlTW9kYWxXaW5kb3coKTtcbiAgfTtcblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBib3VuZGluZyBib3ggc2VsZWN0ZWQgd2hlbiB0aGUgZWRpdCB0ZXh0IG1vZGFsIGhhcyBiZWVuIGNsaWNrZWRcbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkQkJveChzcGFuOiBIVE1MU3BhbkVsZW1lbnQpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEZpbGwgbW9kYWwgd2luZG93IHdpdGggaG90a2V5IGluZm8gY29udGVudFxuICAgKi9cbiAgLypcbiAgcHJpdmF0ZSBvcGVuSG90a2V5TW9kYWxXaW5kb3cgPSBmdW5jdGlvbigpIHtcbiAgICAvLyBtYWtlIHN1cmUgbm8gb3RoZXIgbW9kYWwgY29udGVudCBpcyBiZWluZyBkaXNwbGF5ZWRcbiAgICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NyZXNzLW1vZGFsLXdpbmRvdy1jb250ZW50JykpLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZSgndmlzaWJsZScpO1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IHVwIGFuZCBkaXBsYXkgaG90a2V5IG1vZGFsIGNvbnRlbnRcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3Jlc3MtbW9kYWwtd2luZG93LWNvbnRlbnQtaG90a2V5cycpLmNsYXNzTGlzdC5hZGQoJ3Zpc2libGUnKTtcblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3ctY29udGFpbmVyJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICB0aGlzLmZvY3VzTW9kYWxXaW5kb3coKTtcbiAgfTtcbiAgKi9cblxuICAvKipcbiAgICogRGVmaW5lIGV2ZW50IGxpc3RlbmVycyBmb3IgbW9kYWwgd2luZG93IGJhc2VkIG9uIG1vZGFsVmlldyB0eXBlXG4gICAqL1xuICBwcml2YXRlIGtleWRvd25MaXN0ZW5lciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsgLy8gcHJldmVudCBjcmVzcyBob3RrZXkgZXZlbnRzIGZyb20gZmlyaW5nIHdoZW4gdXNlciBpcyB0eXBpbmdcblxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHRoaXMuaGlkZU1vZGFsV2luZG93KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEV2ZW50IGxpc3RlbmVyIHRoYXQgZm9jdXNlcyB0aGUgbW9kYWwgd2luZG93IGlmIHVzZXIgY2xpY2tzIGFueXdoZXJlIG91dHNpZGUgb2YgaXRcbiAgICovXG4gIHByaXZhdGUgZm9jdXNNb2RhbFdpbmRvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICBzd2l0Y2ggKHRoaXMubW9kYWxXaW5kb3dWaWV3KSB7XG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ET0NVTUVOVF9VUExPQUQ6XG4gICAgICBjYXNlIE1vZGFsV2luZG93Vmlldy5ORVdfRk9MREVSOlxuICAgICAgY2FzZSBNb2RhbFdpbmRvd1ZpZXcuUkVOQU1FOlxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjcmVzcy1tb2RhbC13aW5kb3cnKS5mb2N1cygpO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCB7IE5vdGlmaWNhdGlvblR5cGUgfSBmcm9tICcuLi9UeXBlcyc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuY29uc3Qgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10gPSBuZXcgQXJyYXkoMCk7XG5sZXQgY3VycmVudE1vZGVNZXNzYWdlOiBOb3RpZmljYXRpb24gPSBudWxsO1xuY29uc3QgTlVNQkVSX1RPX0RJU1BMQVkgPSAzOyAvLyBOdW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB0byBkaXNwbGF5IGF0IGEgdGltZS5cbmNvbnN0IFRJTUVPVVQgPSA1MDAwOyAvLyBOdW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB0byBkaXNwbGF5IGF0IGEgdGltZS5cblxuY29uc3Qgbm90aWZpY2F0aW9uSWNvbjogUmVjb3JkPE5vdGlmaWNhdGlvblR5cGUsIHN0cmluZz4gPSB7XG4gIGRlZmF1bHQ6ICcnLFxuICB3YXJuaW5nOiAn4pqg77iPICcsXG4gIGVycm9yOiAn8J+UtCAnLFxuICBzdWNjZXNzOiAn4pyFICcsXG59O1xuXG4vKipcbiAqIEEgY2xhc3MgdG8gbWFuYWdlIGNyZXNzIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb24ge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRpc3BsYXllZDogYm9vbGVhbjtcbiAgaWQ6IHN0cmluZztcbiAgaXNNb2RlTWVzc2FnZTogYm9vbGVhbjtcbiAgbG9nSW5mbzogc3RyaW5nO1xuICB0aW1lb3V0SUQ6IG51bWJlcjtcbiAgdHlwZTogTm90aWZpY2F0aW9uVHlwZTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBub3RpZmljYXRpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gTm90aWZpY2F0aW9uIGNvbnRlbnQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUsIGxvZ0luZm86IHN0cmluZyA9IG51bGwpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBub3RpZmljYXRpb25JY29uW3R5cGVdICsgbWVzc2FnZTtcbiAgICB0aGlzLmRpc3BsYXllZCA9IGZhbHNlO1xuICAgIHRoaXMuaWQgPSB1dWlkdjQoKTtcbiAgICB0aGlzLmlzTW9kZU1lc3NhZ2UgPSBtZXNzYWdlLnNlYXJjaCgnTW9kZScpICE9PSAtMTtcbiAgICB0aGlzLmxvZ0luZm8gPSBsb2dJbmZvO1xuICAgIHRoaXMudGltZW91dElEID0gLTE7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIElEIGZyb20gc2V0VGltZW91dC4gKi9cbiAgc2V0VGltZW91dElkKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVvdXRJRCA9IE1hdGgubWF4KGlkLCAtMSk7XG4gIH1cblxuICAvKiogRGlzcGxheSB0aGUgTm90aWZpY2F0aW9uLiAqL1xuICBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgVVVJRCBmb3IgdGhpcyBub3RpZmljYXRpb24uXG4gICAqL1xuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYXIgdGhlIG5vdGlmaWNhdGlvblxuICogQHBhcmFtIGN1cnJlbnRJZCAtIFRoZSBJRCBvZiB0aGUgbm90aWZpY2F0aW9uIHRvIGJlIGNsZWFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNsZWFyTm90aWZpY2F0aW9uKGN1cnJlbnRJZDogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjdXJyZW50SWQpKSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3VycmVudElkKS5yZW1vdmUoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BsYXkgYSBub3RpZmljYXRpb24uXG4gKiBAcGFyYW0gbm90aWZpY2F0aW9uIC0gTm90aWZpY2F0aW9uIHRvIGRpc3BsYXkuXG4gKi9cbmZ1bmN0aW9uIGRpc3BsYXlOb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkIHtcbiAgLy8gTm90IHN1cmUgd2hhdCBpdCBkb2VzLCBtYXliZSByZWxhdGVkIHRvIHJvZGFuL2NyZXNzXG4gIGlmIChub3RpZmljYXRpb24uaXNNb2RlTWVzc2FnZSkge1xuICAgIGlmIChjdXJyZW50TW9kZU1lc3NhZ2UgPT09IG51bGwpIHtcbiAgICAgIGN1cnJlbnRNb2RlTWVzc2FnZSA9IG5vdGlmaWNhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dChjdXJyZW50TW9kZU1lc3NhZ2UudGltZW91dElEKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgdGhlIHRvcCBub3RpZmljYXRpb24gaWYgZXhjZWVkcyBtYXhtaW11bVxuICBub3RpZmljYXRpb25zLnB1c2gobm90aWZpY2F0aW9uKTtcbiAgaWYgKG5vdGlmaWNhdGlvbnMubGVuZ3RoID4gTlVNQkVSX1RPX0RJU1BMQVkpIHtcbiAgICBjb25zdCB0b1JlbW92ZSA9IG5vdGlmaWNhdGlvbnMuc2hpZnQoKTtcbiAgICBjbGVhck5vdGlmaWNhdGlvbih0b1JlbW92ZS5nZXRJZCgpKTtcbiAgfVxuICBjb25zdCBub3RpZmljYXRpb25Db250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25vdGlmaWNhdGlvbi1jb250ZW50Jyk7XG4gIGNvbnN0IG5ld05vdGlmaWNhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBuZXdOb3RpZmljYXRpb24uY2xhc3NMaXN0LmFkZCgnY3Jlc3Mtbm90aWZpY2F0aW9uJyk7XG4gIG5ld05vdGlmaWNhdGlvbi5jbGFzc0xpc3QuYWRkKGBjcmVzcy1ub3RpZmljYXRpb24tJHtub3RpZmljYXRpb24udHlwZX1gKTtcbiAgbmV3Tm90aWZpY2F0aW9uLmlkID0gbm90aWZpY2F0aW9uLmdldElkKCk7XG4gIG5ld05vdGlmaWNhdGlvbi5pbm5lckhUTUwgPSBub3RpZmljYXRpb24ubWVzc2FnZTtcbiAgbm90aWZpY2F0aW9uQ29udGVudC5hcHBlbmQobmV3Tm90aWZpY2F0aW9uKTtcbiAgbm90aWZpY2F0aW9uQ29udGVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIG5vdGlmaWNhdGlvbi5kaXNwbGF5KCk7XG59XG5cbi8qKlxuICogU3RhcnQgZGlzcGxheWluZyBub3RpZmljYXRpb25zLiBDYWxsZWQgYXV0b21hdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gc3RhcnROb3RpZmljYXRpb24obm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pOiB2b2lkIHtcbiAgZGlzcGxheU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xuICBub3RpZmljYXRpb24uc2V0VGltZW91dElkKFxuICAgIHdpbmRvdy5zZXRUaW1lb3V0KGNsZWFyTm90aWZpY2F0aW9uLCBUSU1FT1VULCBub3RpZmljYXRpb24uZ2V0SWQoKSksXG4gICk7XG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKG5vdGlmaWNhdGlvbi5nZXRJZCgpKVxuICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQobm90aWZpY2F0aW9uLnRpbWVvdXRJRCk7XG4gICAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb24uZ2V0SWQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQWRkIGEgbm90aWZpY2F0aW9uIHRvIHRoZSBxdWV1ZS5cbiAqIEBwYXJhbSBub3RpZmljYXRpb24gLSBOb3RpZmljYXRpb24gY29udGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXVlTm90aWZpY2F0aW9uKFxuICBub3RpZmljYXRpb25Db250ZW50OiBzdHJpbmcsXG4gIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUgPSAnZGVmYXVsdCcsXG4gIGxvZ0luZm86IHN0cmluZyA9IG51bGwsXG4pOiB2b2lkIHtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbihub3RpZmljYXRpb25Db250ZW50LCB0eXBlLCBsb2dJbmZvKTtcblxuICBzdGFydE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24pO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IHF1ZXVlTm90aWZpY2F0aW9uIH07XG4iLCJpbXBvcnQgQ3Jlc3NWaWV3IGZyb20gJy4uL0NyZXNzVmlldyc7XG5cbmFzeW5jIGZ1bmN0aW9uIHNldEJvZHkoY3Jlc3NWaWV3OiBDcmVzc1ZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtfX0FTU0VUX1BSRUZJWF9ffWFzc2V0cy90ZW1wbGF0ZS5odG1sYCk7XG4gIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAoPEhUTUxJbWFnZUVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NyZXNzLW1haW4taWNvbicpKS5zcmMgPVxuICAgIGAke19fTElOS19MT0NBVElPTl9ffWZhdmljb24ucG5nYDtcbiAgQXJyYXkuZnJvbShkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdleHRlcm5hbC1saW5rLWljb24nKSkuZm9yRWFjaChcbiAgICAoZWwpID0+IHtcbiAgICAgICg8SFRNTEltYWdlRWxlbWVudD5lbCkuc3JjID1cbiAgICAgICAgYCR7X19BU1NFVF9QUkVGSVhfX31hc3NldHMvaW1nL2V4dGVybmFsLWxpbmsuc3ZnYDtcbiAgICB9LFxuICApO1xuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlbmFtZScpLmlubmVyVGV4dCA9IGNyZXNzVmlldy5uYW1lO1xuICBkb2N1bWVudC50aXRsZSA9IGNyZXNzVmlldy5uYW1lO1xuXG4gIC8vIGhvdGtleSBidG4gb25jbGljayBldmVudCBsaXN0ZW5lclxuICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbmF2YmFyLWl0ZW0taG90a2V5cycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7XG4gIC8vICAgY3Jlc3NWaWV3Lm1vZGFsLnNldE1vZGFsV2luZG93VmlldyhNb2RhbFdpbmRvd1ZpZXcuSE9US0VZUyk7XG4gIC8vICAgY3Jlc3NWaWV3Lm1vZGFsLm9wZW5Nb2RhbFdpbmRvdygpO1xuICAvLyB9KTtcblxuICAvLyBzZXQgaW5pdGlhbCBzYXZlZCBzdGF0dXNcbiAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oJyNmaWxlLXNhdmVkJyk7XG4gIGluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ3NyYycsIGAke19fQVNTRVRfUFJFRklYX199YXNzZXRzL2ltZy9zYXZlZC1pY29uLnN2Z2ApO1xuICBpbmRpY2F0b3Iuc2V0QXR0cmlidXRlKCdhbHQnLCAnWW91ciB3b3JrIGlzIHNhdmVkJyk7XG59XG5cbmV4cG9ydCB7IHNldEJvZHkgYXMgZGVmYXVsdCB9O1xuIiwiLy8gSW5pdGlhbCBzYXZlZCBzdGF0dXNcbmxldCBzYXZlZCA9IHRydWU7XG5cbi8qKlxuICogVXBkYXRlIHN0YXR1cyBvZiBzYXZlZCBzdGF0dXMgaW5kaWNhdG9yXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUluZGljYXRvcigpOiB2b2lkIHtcbiAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oJyNmaWxlLXNhdmVkJyk7XG4gIGNvbnN0IHBhdGggPSBzYXZlZFxuICAgID8gYCR7X19BU1NFVF9QUkVGSVhfX31hc3NldHMvaW1nL3NhdmVkLWljb24uc3ZnYFxuICAgIDogYCR7X19BU1NFVF9QUkVGSVhfX31hc3NldHMvaW1nL3Vuc2F2ZWQtaWNvbi5zdmdgO1xuICBpbmRpY2F0b3Iuc2V0QXR0cmlidXRlKCdzcmMnLCBwYXRoKTtcbiAgLy8gc2V0IHRoZSBhbHQgYXR0cmlidXRlIG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGF0ZXN0IGNoYW5nZXMgYXJlIHNhdmUgb3Igbm90XG4gIGNvbnN0IGFsdE1lc3NhZ2UgPSBzYXZlZCA/ICdZb3VyIHdvcmsgaXMgc2F2ZWQnIDogJ1lvdSBoYXZlIHVuc2F2ZWQgd29yayc7XG4gIGluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FsdCcsIGFsdE1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFNldCB0aGUgc2F2ZWQgc3RhdHVzIG9mIHRoZSBmaWxlXG4gKlxuICogQHBhcmFtIHN0YXR1cyBib29sZWFuIHZhbHVlLiB0cnVlIGlmIHN0YXR1cyBpcyBcInNhdmVkXCIsIGZhbHNlIGlmIFwibm90IHNhdmVkXCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFNhdmVkU3RhdHVzKHN0YXR1czogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gIHNhdmVkID0gc3RhdHVzO1xuICB1cGRhdGVJbmRpY2F0b3IoKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGRlZmluZXMgZXZlbnQgbGlzdGVuZXIgdGhhdCBjaGVja3MgZm9yIHVuc2F2ZWQgY2hhbmdlcyBvbiBwYWdlIHJlbG9hZFxuICovXG5leHBvcnQgZnVuY3Rpb24gbGlzdGVuVW5zYXZlZENoYW5nZXMoKTogdm9pZCB7XG4gIHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IChlOiBCZWZvcmVVbmxvYWRFdmVudCkgPT4ge1xuICAgIGlmICghc2F2ZWQpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHJldHVybiAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzISc7XG4gICAgfVxuICB9O1xufVxuIiwiLyohIEBsaWNlbnNlIERPTVB1cmlmeSAyLjUuNCB8IChjKSBDdXJlNTMgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IFJlbGVhc2VkIHVuZGVyIHRoZSBBcGFjaGUgbGljZW5zZSAyLjAgYW5kIE1vemlsbGEgUHVibGljIExpY2Vuc2UgMi4wIHwgZ2l0aHViLmNvbS9jdXJlNTMvRE9NUHVyaWZ5L2Jsb2IvMi41LjQvTElDRU5TRSAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5ET01QdXJpZnkgPSBmYWN0b3J5KCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7XG4gICAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gICAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIG9iajtcbiAgICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbiAgICB9LCBfdHlwZW9mKG9iaik7XG4gIH1cbiAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgIHJldHVybiBvO1xuICAgIH07XG4gICAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbiAgfVxuICBmdW5jdGlvbiBfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgUHJveHkgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgaWYgKF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSkge1xuICAgICAgX2NvbnN0cnVjdCA9IFJlZmxlY3QuY29uc3RydWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBfY29uc3RydWN0ID0gZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gICAgICAgIHZhciBhID0gW251bGxdO1xuICAgICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICAgIHZhciBDb25zdHJ1Y3RvciA9IEZ1bmN0aW9uLmJpbmQuYXBwbHkoUGFyZW50LCBhKTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9XG4gIGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICB9XG4gIGZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTtcbiAgfVxuICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpdGVyW1N5bWJvbC5pdGVyYXRvcl0gIT0gbnVsbCB8fCBpdGVyW1wiQEBpdGVyYXRvclwiXSAhPSBudWxsKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTtcbiAgfVxuICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gICAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIH1cbiAgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07XG4gICAgcmV0dXJuIGFycjI7XG4gIH1cbiAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xuICB9XG5cbiAgdmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0Lmhhc093blByb3BlcnR5LFxuICAgIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mLFxuICAgIGlzRnJvemVuID0gT2JqZWN0LmlzRnJvemVuLFxuICAgIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIHZhciBmcmVlemUgPSBPYmplY3QuZnJlZXplLFxuICAgIHNlYWwgPSBPYmplY3Quc2VhbCxcbiAgICBjcmVhdGUgPSBPYmplY3QuY3JlYXRlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGltcG9ydC9uby1tdXRhYmxlLWV4cG9ydHNcbiAgdmFyIF9yZWYgPSB0eXBlb2YgUmVmbGVjdCAhPT0gJ3VuZGVmaW5lZCcgJiYgUmVmbGVjdCxcbiAgICBhcHBseSA9IF9yZWYuYXBwbHksXG4gICAgY29uc3RydWN0ID0gX3JlZi5jb25zdHJ1Y3Q7XG4gIGlmICghYXBwbHkpIHtcbiAgICBhcHBseSA9IGZ1bmN0aW9uIGFwcGx5KGZ1biwgdGhpc1ZhbHVlLCBhcmdzKSB7XG4gICAgICByZXR1cm4gZnVuLmFwcGx5KHRoaXNWYWx1ZSwgYXJncyk7XG4gICAgfTtcbiAgfVxuICBpZiAoIWZyZWV6ZSkge1xuICAgIGZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIGlmICghc2VhbCkge1xuICAgIHNlYWwgPSBmdW5jdGlvbiBzZWFsKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgaWYgKCFjb25zdHJ1Y3QpIHtcbiAgICBjb25zdHJ1Y3QgPSBmdW5jdGlvbiBjb25zdHJ1Y3QoRnVuYywgYXJncykge1xuICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoRnVuYywgX3RvQ29uc3VtYWJsZUFycmF5KGFyZ3MpKTtcbiAgICB9O1xuICB9XG4gIHZhciBhcnJheUZvckVhY2ggPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKTtcbiAgdmFyIGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgdmFyIGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICB2YXIgc3RyaW5nVG9Mb3dlckNhc2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpO1xuICB2YXIgc3RyaW5nVG9TdHJpbmcgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuICB2YXIgc3RyaW5nUmVwbGFjZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ0luZGV4T2YgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZik7XG4gIHZhciBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuICB2YXIgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgdmFyIHR5cGVFcnJvckNyZWF0ZSA9IHVuY29uc3RydWN0KFR5cGVFcnJvcik7XG4gIGZ1bmN0aW9uIG51bWJlcklzTmFOKHgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItbnVtYmVyLXByb3BlcnRpZXNcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmIGlzTmFOKHgpO1xuICB9XG4gIGZ1bmN0aW9uIHVuYXBwbHkoZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGhpc0FyZykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHVuY29uc3RydWN0KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb25zdHJ1Y3QoZnVuYywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qIEFkZCBwcm9wZXJ0aWVzIHRvIGEgbG9va3VwIHRhYmxlICovXG4gIGZ1bmN0aW9uIGFkZFRvU2V0KHNldCwgYXJyYXksIHRyYW5zZm9ybUNhc2VGdW5jKSB7XG4gICAgdmFyIF90cmFuc2Zvcm1DYXNlRnVuYztcbiAgICB0cmFuc2Zvcm1DYXNlRnVuYyA9IChfdHJhbnNmb3JtQ2FzZUZ1bmMgPSB0cmFuc2Zvcm1DYXNlRnVuYykgIT09IG51bGwgJiYgX3RyYW5zZm9ybUNhc2VGdW5jICE9PSB2b2lkIDAgPyBfdHJhbnNmb3JtQ2FzZUZ1bmMgOiBzdHJpbmdUb0xvd2VyQ2FzZTtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIC8vIE1ha2UgJ2luJyBhbmQgdHJ1dGh5IGNoZWNrcyBsaWtlIEJvb2xlYW4oc2V0LmNvbnN0cnVjdG9yKVxuICAgICAgLy8gaW5kZXBlbmRlbnQgb2YgYW55IHByb3BlcnRpZXMgZGVmaW5lZCBvbiBPYmplY3QucHJvdG90eXBlLlxuICAgICAgLy8gUHJldmVudCBwcm90b3R5cGUgc2V0dGVycyBmcm9tIGludGVyY2VwdGluZyBzZXQgYXMgYSB0aGlzIHZhbHVlLlxuICAgICAgc2V0UHJvdG90eXBlT2Yoc2V0LCBudWxsKTtcbiAgICB9XG4gICAgdmFyIGwgPSBhcnJheS5sZW5ndGg7XG4gICAgd2hpbGUgKGwtLSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBhcnJheVtsXTtcbiAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGxjRWxlbWVudCA9IHRyYW5zZm9ybUNhc2VGdW5jKGVsZW1lbnQpO1xuICAgICAgICBpZiAobGNFbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgLy8gQ29uZmlnIHByZXNldHMgKGUuZy4gdGFncy5qcywgYXR0cnMuanMpIGFyZSBpbW11dGFibGUuXG4gICAgICAgICAgaWYgKCFpc0Zyb3plbihhcnJheSkpIHtcbiAgICAgICAgICAgIGFycmF5W2xdID0gbGNFbGVtZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50ID0gbGNFbGVtZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzZXRbZWxlbWVudF0gPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgLyogU2hhbGxvdyBjbG9uZSBhbiBvYmplY3QgKi9cbiAgZnVuY3Rpb24gY2xvbmUob2JqZWN0KSB7XG4gICAgdmFyIG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICB2YXIgcHJvcGVydHk7XG4gICAgZm9yIChwcm9wZXJ0eSBpbiBvYmplY3QpIHtcbiAgICAgIGlmIChhcHBseShoYXNPd25Qcm9wZXJ0eSwgb2JqZWN0LCBbcHJvcGVydHldKSA9PT0gdHJ1ZSkge1xuICAgICAgICBuZXdPYmplY3RbcHJvcGVydHldID0gb2JqZWN0W3Byb3BlcnR5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld09iamVjdDtcbiAgfVxuXG4gIC8qIElFMTAgZG9lc24ndCBzdXBwb3J0IF9fbG9va3VwR2V0dGVyX18gc28gbGV0cydcbiAgICogc2ltdWxhdGUgaXQuIEl0IGFsc28gYXV0b21hdGljYWxseSBjaGVja3NcbiAgICogaWYgdGhlIHByb3AgaXMgZnVuY3Rpb24gb3IgZ2V0dGVyIGFuZCBiZWhhdmVzXG4gICAqIGFjY29yZGluZ2x5LiAqL1xuICBmdW5jdGlvbiBsb29rdXBHZXR0ZXIob2JqZWN0LCBwcm9wKSB7XG4gICAgd2hpbGUgKG9iamVjdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIGRlc2MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wKTtcbiAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MuZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gdW5hcHBseShkZXNjLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb2JqZWN0ID0gZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmFsbGJhY2tWYWx1ZShlbGVtZW50KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2ZhbGxiYWNrIHZhbHVlIGZvcicsIGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICB9XG5cbiAgdmFyIGh0bWwkMSA9IGZyZWV6ZShbJ2EnLCAnYWJicicsICdhY3JvbnltJywgJ2FkZHJlc3MnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2F1ZGlvJywgJ2InLCAnYmRpJywgJ2JkbycsICdiaWcnLCAnYmxpbmsnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYW52YXMnLCAnY2FwdGlvbicsICdjZW50ZXInLCAnY2l0ZScsICdjb2RlJywgJ2NvbCcsICdjb2xncm91cCcsICdjb250ZW50JywgJ2RhdGEnLCAnZGF0YWxpc3QnLCAnZGQnLCAnZGVjb3JhdG9yJywgJ2RlbCcsICdkZXRhaWxzJywgJ2RmbicsICdkaWFsb2cnLCAnZGlyJywgJ2RpdicsICdkbCcsICdkdCcsICdlbGVtZW50JywgJ2VtJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2ZvbnQnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaScsICdpbWcnLCAnaW5wdXQnLCAnaW5zJywgJ2tiZCcsICdsYWJlbCcsICdsZWdlbmQnLCAnbGknLCAnbWFpbicsICdtYXAnLCAnbWFyaycsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0ZXInLCAnbmF2JywgJ25vYnInLCAnb2wnLCAnb3B0Z3JvdXAnLCAnb3B0aW9uJywgJ291dHB1dCcsICdwJywgJ3BpY3R1cmUnLCAncHJlJywgJ3Byb2dyZXNzJywgJ3EnLCAncnAnLCAncnQnLCAncnVieScsICdzJywgJ3NhbXAnLCAnc2VjdGlvbicsICdzZWxlY3QnLCAnc2hhZG93JywgJ3NtYWxsJywgJ3NvdXJjZScsICdzcGFjZXInLCAnc3BhbicsICdzdHJpa2UnLCAnc3Ryb25nJywgJ3N0eWxlJywgJ3N1YicsICdzdW1tYXJ5JywgJ3N1cCcsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aW1lJywgJ3RyJywgJ3RyYWNrJywgJ3R0JywgJ3UnLCAndWwnLCAndmFyJywgJ3ZpZGVvJywgJ3diciddKTtcblxuICAvLyBTVkdcbiAgdmFyIHN2ZyQxID0gZnJlZXplKFsnc3ZnJywgJ2EnLCAnYWx0Z2x5cGgnLCAnYWx0Z2x5cGhkZWYnLCAnYWx0Z2x5cGhpdGVtJywgJ2FuaW1hdGVjb2xvcicsICdhbmltYXRlbW90aW9uJywgJ2FuaW1hdGV0cmFuc2Zvcm0nLCAnY2lyY2xlJywgJ2NsaXBwYXRoJywgJ2RlZnMnLCAnZGVzYycsICdlbGxpcHNlJywgJ2ZpbHRlcicsICdmb250JywgJ2cnLCAnZ2x5cGgnLCAnZ2x5cGhyZWYnLCAnaGtlcm4nLCAnaW1hZ2UnLCAnbGluZScsICdsaW5lYXJncmFkaWVudCcsICdtYXJrZXInLCAnbWFzaycsICdtZXRhZGF0YScsICdtcGF0aCcsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxncmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAnc3R5bGUnLCAnc3dpdGNoJywgJ3N5bWJvbCcsICd0ZXh0JywgJ3RleHRwYXRoJywgJ3RpdGxlJywgJ3RyZWYnLCAndHNwYW4nLCAndmlldycsICd2a2VybiddKTtcbiAgdmFyIHN2Z0ZpbHRlcnMgPSBmcmVlemUoWydmZUJsZW5kJywgJ2ZlQ29sb3JNYXRyaXgnLCAnZmVDb21wb25lbnRUcmFuc2ZlcicsICdmZUNvbXBvc2l0ZScsICdmZUNvbnZvbHZlTWF0cml4JywgJ2ZlRGlmZnVzZUxpZ2h0aW5nJywgJ2ZlRGlzcGxhY2VtZW50TWFwJywgJ2ZlRGlzdGFudExpZ2h0JywgJ2ZlRmxvb2QnLCAnZmVGdW5jQScsICdmZUZ1bmNCJywgJ2ZlRnVuY0cnLCAnZmVGdW5jUicsICdmZUdhdXNzaWFuQmx1cicsICdmZUltYWdlJywgJ2ZlTWVyZ2UnLCAnZmVNZXJnZU5vZGUnLCAnZmVNb3JwaG9sb2d5JywgJ2ZlT2Zmc2V0JywgJ2ZlUG9pbnRMaWdodCcsICdmZVNwZWN1bGFyTGlnaHRpbmcnLCAnZmVTcG90TGlnaHQnLCAnZmVUaWxlJywgJ2ZlVHVyYnVsZW5jZSddKTtcblxuICAvLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gIC8vIFdlIHN0aWxsIG5lZWQgdG8ga25vdyB0aGVtIHNvIHRoYXQgd2UgY2FuIGRvIG5hbWVzcGFjZVxuICAvLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbiAgLy8gYWxsb3ctbGlzdC5cbiAgdmFyIHN2Z0Rpc2FsbG93ZWQgPSBmcmVlemUoWydhbmltYXRlJywgJ2NvbG9yLXByb2ZpbGUnLCAnY3Vyc29yJywgJ2Rpc2NhcmQnLCAnZmVkcm9wc2hhZG93JywgJ2ZvbnQtZmFjZScsICdmb250LWZhY2UtZm9ybWF0JywgJ2ZvbnQtZmFjZS1uYW1lJywgJ2ZvbnQtZmFjZS1zcmMnLCAnZm9udC1mYWNlLXVyaScsICdmb3JlaWdub2JqZWN0JywgJ2hhdGNoJywgJ2hhdGNocGF0aCcsICdtZXNoJywgJ21lc2hncmFkaWVudCcsICdtZXNocGF0Y2gnLCAnbWVzaHJvdycsICdtaXNzaW5nLWdseXBoJywgJ3NjcmlwdCcsICdzZXQnLCAnc29saWRjb2xvcicsICd1bmtub3duJywgJ3VzZSddKTtcbiAgdmFyIG1hdGhNbCQxID0gZnJlZXplKFsnbWF0aCcsICdtZW5jbG9zZScsICdtZXJyb3InLCAnbWZlbmNlZCcsICdtZnJhYycsICdtZ2x5cGgnLCAnbWknLCAnbWxhYmVsZWR0cicsICdtbXVsdGlzY3JpcHRzJywgJ21uJywgJ21vJywgJ21vdmVyJywgJ21wYWRkZWQnLCAnbXBoYW50b20nLCAnbXJvb3QnLCAnbXJvdycsICdtcycsICdtc3BhY2UnLCAnbXNxcnQnLCAnbXN0eWxlJywgJ21zdWInLCAnbXN1cCcsICdtc3Vic3VwJywgJ210YWJsZScsICdtdGQnLCAnbXRleHQnLCAnbXRyJywgJ211bmRlcicsICdtdW5kZXJvdmVyJ10pO1xuXG4gIC8vIFNpbWlsYXJseSB0byBTVkcsIHdlIHdhbnQgdG8ga25vdyBhbGwgTWF0aE1MIGVsZW1lbnRzLFxuICAvLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cbiAgdmFyIG1hdGhNbERpc2FsbG93ZWQgPSBmcmVlemUoWydtYWN0aW9uJywgJ21hbGlnbmdyb3VwJywgJ21hbGlnbm1hcmsnLCAnbWxvbmdkaXYnLCAnbXNjYXJyaWVzJywgJ21zY2FycnknLCAnbXNncm91cCcsICdtc3RhY2snLCAnbXNsaW5lJywgJ21zcm93JywgJ3NlbWFudGljcycsICdhbm5vdGF0aW9uJywgJ2Fubm90YXRpb24teG1sJywgJ21wcmVzY3JpcHRzJywgJ25vbmUnXSk7XG4gIHZhciB0ZXh0ID0gZnJlZXplKFsnI3RleHQnXSk7XG5cbiAgdmFyIGh0bWwgPSBmcmVlemUoWydhY2NlcHQnLCAnYWN0aW9uJywgJ2FsaWduJywgJ2FsdCcsICdhdXRvY2FwaXRhbGl6ZScsICdhdXRvY29tcGxldGUnLCAnYXV0b3BpY3R1cmVpbnBpY3R1cmUnLCAnYXV0b3BsYXknLCAnYmFja2dyb3VuZCcsICdiZ2NvbG9yJywgJ2JvcmRlcicsICdjYXB0dXJlJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJywgJ2NoZWNrZWQnLCAnY2l0ZScsICdjbGFzcycsICdjbGVhcicsICdjb2xvcicsICdjb2xzJywgJ2NvbHNwYW4nLCAnY29udHJvbHMnLCAnY29udHJvbHNsaXN0JywgJ2Nvb3JkcycsICdjcm9zc29yaWdpbicsICdkYXRldGltZScsICdkZWNvZGluZycsICdkZWZhdWx0JywgJ2RpcicsICdkaXNhYmxlZCcsICdkaXNhYmxlcGljdHVyZWlucGljdHVyZScsICdkaXNhYmxlcmVtb3RlcGxheWJhY2snLCAnZG93bmxvYWQnLCAnZHJhZ2dhYmxlJywgJ2VuY3R5cGUnLCAnZW50ZXJrZXloaW50JywgJ2ZhY2UnLCAnZm9yJywgJ2hlYWRlcnMnLCAnaGVpZ2h0JywgJ2hpZGRlbicsICdoaWdoJywgJ2hyZWYnLCAnaHJlZmxhbmcnLCAnaWQnLCAnaW5wdXRtb2RlJywgJ2ludGVncml0eScsICdpc21hcCcsICdraW5kJywgJ2xhYmVsJywgJ2xhbmcnLCAnbGlzdCcsICdsb2FkaW5nJywgJ2xvb3AnLCAnbG93JywgJ21heCcsICdtYXhsZW5ndGgnLCAnbWVkaWEnLCAnbWV0aG9kJywgJ21pbicsICdtaW5sZW5ndGgnLCAnbXVsdGlwbGUnLCAnbXV0ZWQnLCAnbmFtZScsICdub25jZScsICdub3NoYWRlJywgJ25vdmFsaWRhdGUnLCAnbm93cmFwJywgJ29wZW4nLCAnb3B0aW11bScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3BsYXlzaW5saW5lJywgJ3Bvc3RlcicsICdwcmVsb2FkJywgJ3B1YmRhdGUnLCAncmFkaW9ncm91cCcsICdyZWFkb25seScsICdyZWwnLCAncmVxdWlyZWQnLCAncmV2JywgJ3JldmVyc2VkJywgJ3JvbGUnLCAncm93cycsICdyb3dzcGFuJywgJ3NwZWxsY2hlY2snLCAnc2NvcGUnLCAnc2VsZWN0ZWQnLCAnc2hhcGUnLCAnc2l6ZScsICdzaXplcycsICdzcGFuJywgJ3NyY2xhbmcnLCAnc3RhcnQnLCAnc3JjJywgJ3NyY3NldCcsICdzdGVwJywgJ3N0eWxlJywgJ3N1bW1hcnknLCAndGFiaW5kZXgnLCAndGl0bGUnLCAndHJhbnNsYXRlJywgJ3R5cGUnLCAndXNlbWFwJywgJ3ZhbGlnbicsICd2YWx1ZScsICd3aWR0aCcsICd4bWxucycsICdzbG90J10pO1xuICB2YXIgc3ZnID0gZnJlZXplKFsnYWNjZW50LWhlaWdodCcsICdhY2N1bXVsYXRlJywgJ2FkZGl0aXZlJywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhc2NlbnQnLCAnYXR0cmlidXRlbmFtZScsICdhdHRyaWJ1dGV0eXBlJywgJ2F6aW11dGgnLCAnYmFzZWZyZXF1ZW5jeScsICdiYXNlbGluZS1zaGlmdCcsICdiZWdpbicsICdiaWFzJywgJ2J5JywgJ2NsYXNzJywgJ2NsaXAnLCAnY2xpcHBhdGh1bml0cycsICdjbGlwLXBhdGgnLCAnY2xpcC1ydWxlJywgJ2NvbG9yJywgJ2NvbG9yLWludGVycG9sYXRpb24nLCAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJywgJ2NvbG9yLXByb2ZpbGUnLCAnY29sb3ItcmVuZGVyaW5nJywgJ2N4JywgJ2N5JywgJ2QnLCAnZHgnLCAnZHknLCAnZGlmZnVzZWNvbnN0YW50JywgJ2RpcmVjdGlvbicsICdkaXNwbGF5JywgJ2Rpdmlzb3InLCAnZHVyJywgJ2VkZ2Vtb2RlJywgJ2VsZXZhdGlvbicsICdlbmQnLCAnZmlsbCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2ZpbHRlcicsICdmaWx0ZXJ1bml0cycsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdmeCcsICdmeScsICdnMScsICdnMicsICdnbHlwaC1uYW1lJywgJ2dseXBocmVmJywgJ2dyYWRpZW50dW5pdHMnLCAnZ3JhZGllbnR0cmFuc2Zvcm0nLCAnaGVpZ2h0JywgJ2hyZWYnLCAnaWQnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2luJywgJ2luMicsICdrJywgJ2sxJywgJ2syJywgJ2szJywgJ2s0JywgJ2tlcm5pbmcnLCAna2V5cG9pbnRzJywgJ2tleXNwbGluZXMnLCAna2V5dGltZXMnLCAnbGFuZycsICdsZW5ndGhhZGp1c3QnLCAnbGV0dGVyLXNwYWNpbmcnLCAna2VybmVsbWF0cml4JywgJ2tlcm5lbHVuaXRsZW5ndGgnLCAnbGlnaHRpbmctY29sb3InLCAnbG9jYWwnLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdtYXJrZXJoZWlnaHQnLCAnbWFya2VydW5pdHMnLCAnbWFya2Vyd2lkdGgnLCAnbWFza2NvbnRlbnR1bml0cycsICdtYXNrdW5pdHMnLCAnbWF4JywgJ21hc2snLCAnbWVkaWEnLCAnbWV0aG9kJywgJ21vZGUnLCAnbWluJywgJ25hbWUnLCAnbnVtb2N0YXZlcycsICdvZmZzZXQnLCAnb3BlcmF0b3InLCAnb3BhY2l0eScsICdvcmRlcicsICdvcmllbnQnLCAnb3JpZW50YXRpb24nLCAnb3JpZ2luJywgJ292ZXJmbG93JywgJ3BhaW50LW9yZGVyJywgJ3BhdGgnLCAncGF0aGxlbmd0aCcsICdwYXR0ZXJuY29udGVudHVuaXRzJywgJ3BhdHRlcm50cmFuc2Zvcm0nLCAncGF0dGVybnVuaXRzJywgJ3BvaW50cycsICdwcmVzZXJ2ZWFscGhhJywgJ3ByZXNlcnZlYXNwZWN0cmF0aW8nLCAncHJpbWl0aXZldW5pdHMnLCAncicsICdyeCcsICdyeScsICdyYWRpdXMnLCAncmVmeCcsICdyZWZ5JywgJ3JlcGVhdGNvdW50JywgJ3JlcGVhdGR1cicsICdyZXN0YXJ0JywgJ3Jlc3VsdCcsICdyb3RhdGUnLCAnc2NhbGUnLCAnc2VlZCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3BlY3VsYXJjb25zdGFudCcsICdzcGVjdWxhcmV4cG9uZW50JywgJ3NwcmVhZG1ldGhvZCcsICdzdGFydG9mZnNldCcsICdzdGRkZXZpYXRpb24nLCAnc3RpdGNodGlsZXMnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlJywgJ3N0cm9rZS13aWR0aCcsICdzdHlsZScsICdzdXJmYWNlc2NhbGUnLCAnc3lzdGVtbGFuZ3VhZ2UnLCAndGFiaW5kZXgnLCAndGFyZ2V0eCcsICd0YXJnZXR5JywgJ3RyYW5zZm9ybScsICd0cmFuc2Zvcm0tb3JpZ2luJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd0ZXh0bGVuZ3RoJywgJ3R5cGUnLCAndTEnLCAndTInLCAndW5pY29kZScsICd2YWx1ZXMnLCAndmlld2JveCcsICd2aXNpYmlsaXR5JywgJ3ZlcnNpb24nLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd2lkdGgnLCAnd29yZC1zcGFjaW5nJywgJ3dyYXAnLCAnd3JpdGluZy1tb2RlJywgJ3hjaGFubmVsc2VsZWN0b3InLCAneWNoYW5uZWxzZWxlY3RvcicsICd4JywgJ3gxJywgJ3gyJywgJ3htbG5zJywgJ3knLCAneTEnLCAneTInLCAneicsICd6b29tYW5kcGFuJ10pO1xuICB2YXIgbWF0aE1sID0gZnJlZXplKFsnYWNjZW50JywgJ2FjY2VudHVuZGVyJywgJ2FsaWduJywgJ2JldmVsbGVkJywgJ2Nsb3NlJywgJ2NvbHVtbnNhbGlnbicsICdjb2x1bW5saW5lcycsICdjb2x1bW5zcGFuJywgJ2Rlbm9tYWxpZ24nLCAnZGVwdGgnLCAnZGlyJywgJ2Rpc3BsYXknLCAnZGlzcGxheXN0eWxlJywgJ2VuY29kaW5nJywgJ2ZlbmNlJywgJ2ZyYW1lJywgJ2hlaWdodCcsICdocmVmJywgJ2lkJywgJ2xhcmdlb3AnLCAnbGVuZ3RoJywgJ2xpbmV0aGlja25lc3MnLCAnbHNwYWNlJywgJ2xxdW90ZScsICdtYXRoYmFja2dyb3VuZCcsICdtYXRoY29sb3InLCAnbWF0aHNpemUnLCAnbWF0aHZhcmlhbnQnLCAnbWF4c2l6ZScsICdtaW5zaXplJywgJ21vdmFibGVsaW1pdHMnLCAnbm90YXRpb24nLCAnbnVtYWxpZ24nLCAnb3BlbicsICdyb3dhbGlnbicsICdyb3dsaW5lcycsICdyb3dzcGFjaW5nJywgJ3Jvd3NwYW4nLCAncnNwYWNlJywgJ3JxdW90ZScsICdzY3JpcHRsZXZlbCcsICdzY3JpcHRtaW5zaXplJywgJ3NjcmlwdHNpemVtdWx0aXBsaWVyJywgJ3NlbGVjdGlvbicsICdzZXBhcmF0b3InLCAnc2VwYXJhdG9ycycsICdzdHJldGNoeScsICdzdWJzY3JpcHRzaGlmdCcsICdzdXBzY3JpcHRzaGlmdCcsICdzeW1tZXRyaWMnLCAndm9mZnNldCcsICd3aWR0aCcsICd4bWxucyddKTtcbiAgdmFyIHhtbCA9IGZyZWV6ZShbJ3hsaW5rOmhyZWYnLCAneG1sOmlkJywgJ3hsaW5rOnRpdGxlJywgJ3htbDpzcGFjZScsICd4bWxuczp4bGluayddKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9iZXR0ZXItcmVnZXhcbiAgdmFyIE1VU1RBQ0hFX0VYUFIgPSBzZWFsKC9cXHtcXHtbXFx3XFxXXSp8W1xcd1xcV10qXFx9XFx9L2dtKTsgLy8gU3BlY2lmeSB0ZW1wbGF0ZSBkZXRlY3Rpb24gcmVnZXggZm9yIFNBRkVfRk9SX1RFTVBMQVRFUyBtb2RlXG4gIHZhciBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgdmFyIFRNUExJVF9FWFBSID0gc2VhbCgvXFwke1tcXHdcXFddKn0vZ20pO1xuICB2YXIgREFUQV9BVFRSID0gc2VhbCgvXmRhdGEtW1xcLVxcdy5cXHUwMEI3LVxcdUZGRkZdLyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgdmFyIEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICB2YXIgSVNfQUxMT1dFRF9VUkkgPSBzZWFsKC9eKD86KD86KD86ZnxodCl0cHM/fG1haWx0b3x0ZWx8Y2FsbHRvfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlxcLV0rKD86W15hLXorLlxcLTpdfCQpKS9pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgKTtcbiAgdmFyIElTX1NDUklQVF9PUl9EQVRBID0gc2VhbCgvXig/OlxcdytzY3JpcHR8ZGF0YSk6L2kpO1xuICB2YXIgQVRUUl9XSElURVNQQUNFID0gc2VhbCgvW1xcdTAwMDAtXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MTgwRVxcdTIwMDAtXFx1MjAyOVxcdTIwNUZcXHUzMDAwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuICApO1xuICB2YXIgRE9DVFlQRV9OQU1FID0gc2VhbCgvXmh0bWwkL2kpO1xuICB2YXIgQ1VTVE9NX0VMRU1FTlQgPSBzZWFsKC9eW2Etel1bLlxcd10qKC1bLlxcd10rKSskL2kpO1xuXG4gIHZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IHdpbmRvdztcbiAgfTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5vLW9wIHBvbGljeSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAqIERvbid0IGV4cG9ydCB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUhXG4gICAqIEBwYXJhbSB7P1RydXN0ZWRUeXBlUG9saWN5RmFjdG9yeX0gdHJ1c3RlZFR5cGVzIFRoZSBwb2xpY3kgZmFjdG9yeS5cbiAgICogQHBhcmFtIHtEb2N1bWVudH0gZG9jdW1lbnQgVGhlIGRvY3VtZW50IG9iamVjdCAodG8gZGV0ZXJtaW5lIHBvbGljeSBuYW1lIHN1ZmZpeClcbiAgICogQHJldHVybiB7P1RydXN0ZWRUeXBlUG9saWN5fSBUaGUgcG9saWN5IGNyZWF0ZWQgKG9yIG51bGwsIGlmIFRydXN0ZWQgVHlwZXNcbiAgICogYXJlIG5vdCBzdXBwb3J0ZWQpLlxuICAgKi9cbiAgdmFyIF9jcmVhdGVUcnVzdGVkVHlwZXNQb2xpY3kgPSBmdW5jdGlvbiBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgZG9jdW1lbnQpIHtcbiAgICBpZiAoX3R5cGVvZih0cnVzdGVkVHlwZXMpICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgdHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gQWxsb3cgdGhlIGNhbGxlcnMgdG8gY29udHJvbCB0aGUgdW5pcXVlIHBvbGljeSBuYW1lXG4gICAgLy8gYnkgYWRkaW5nIGEgZGF0YS10dC1wb2xpY3ktc3VmZml4IHRvIHRoZSBzY3JpcHQgZWxlbWVudCB3aXRoIHRoZSBET01QdXJpZnkuXG4gICAgLy8gUG9saWN5IGNyZWF0aW9uIHdpdGggZHVwbGljYXRlIG5hbWVzIHRocm93cyBpbiBUcnVzdGVkIFR5cGVzLlxuICAgIHZhciBzdWZmaXggPSBudWxsO1xuICAgIHZhciBBVFRSX05BTUUgPSAnZGF0YS10dC1wb2xpY3ktc3VmZml4JztcbiAgICBpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0Lmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKSB7XG4gICAgICBzdWZmaXggPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgIH1cbiAgICB2YXIgcG9saWN5TmFtZSA9ICdkb21wdXJpZnknICsgKHN1ZmZpeCA/ICcjJyArIHN1ZmZpeCA6ICcnKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kocG9saWN5TmFtZSwge1xuICAgICAgICBjcmVhdGVIVE1MOiBmdW5jdGlvbiBjcmVhdGVIVE1MKGh0bWwpIHtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlU2NyaXB0VVJMOiBmdW5jdGlvbiBjcmVhdGVTY3JpcHRVUkwoc2NyaXB0VXJsKSB7XG4gICAgICAgICAgcmV0dXJuIHNjcmlwdFVybDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy8gUG9saWN5IGNyZWF0aW9uIGZhaWxlZCAobW9zdCBsaWtlbHkgYW5vdGhlciBET01QdXJpZnkgc2NyaXB0IGhhc1xuICAgICAgLy8gYWxyZWFkeSBydW4pLiBTa2lwIGNyZWF0aW5nIHRoZSBwb2xpY3ksIGFzIHRoaXMgd2lsbCBvbmx5IGNhdXNlIGVycm9yc1xuICAgICAgLy8gaWYgVFQgYXJlIGVuZm9yY2VkLlxuICAgICAgY29uc29sZS53YXJuKCdUcnVzdGVkVHlwZXMgcG9saWN5ICcgKyBwb2xpY3lOYW1lICsgJyBjb3VsZCBub3QgYmUgY3JlYXRlZC4nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcbiAgZnVuY3Rpb24gY3JlYXRlRE9NUHVyaWZ5KCkge1xuICAgIHZhciB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuICAgIHZhciBET01QdXJpZnkgPSBmdW5jdGlvbiBET01QdXJpZnkocm9vdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZURPTVB1cmlmeShyb290KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBsYWJlbCwgZXhwb3NlZCBmb3IgZWFzaWVyIGNoZWNrc1xuICAgICAqIGlmIERPTVB1cmlmeSBpcyB1cCB0byBkYXRlIG9yIG5vdFxuICAgICAqL1xuICAgIERPTVB1cmlmeS52ZXJzaW9uID0gJzIuNS40JztcblxuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGVsZW1lbnRzIHRoYXQgRE9NUHVyaWZ5IHJlbW92ZWQgZHVyaW5nIHNhbml0YXRpb24uXG4gICAgICogRW1wdHkgaWYgbm90aGluZyB3YXMgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBET01QdXJpZnkucmVtb3ZlZCA9IFtdO1xuICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSA5KSB7XG4gICAgICAvLyBOb3QgcnVubmluZyBpbiBhIGJyb3dzZXIsIHByb3ZpZGUgYSBmYWN0b3J5IGZ1bmN0aW9uXG4gICAgICAvLyBzbyB0aGF0IHlvdSBjYW4gcGFzcyB5b3VyIG93biBXaW5kb3dcbiAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgICB9XG4gICAgdmFyIG9yaWdpbmFsRG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgdmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuICAgIHZhciBEb2N1bWVudEZyYWdtZW50ID0gd2luZG93LkRvY3VtZW50RnJhZ21lbnQsXG4gICAgICBIVE1MVGVtcGxhdGVFbGVtZW50ID0gd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQsXG4gICAgICBOb2RlID0gd2luZG93Lk5vZGUsXG4gICAgICBFbGVtZW50ID0gd2luZG93LkVsZW1lbnQsXG4gICAgICBOb2RlRmlsdGVyID0gd2luZG93Lk5vZGVGaWx0ZXIsXG4gICAgICBfd2luZG93JE5hbWVkTm9kZU1hcCA9IHdpbmRvdy5OYW1lZE5vZGVNYXAsXG4gICAgICBOYW1lZE5vZGVNYXAgPSBfd2luZG93JE5hbWVkTm9kZU1hcCA9PT0gdm9pZCAwID8gd2luZG93Lk5hbWVkTm9kZU1hcCB8fCB3aW5kb3cuTW96TmFtZWRBdHRyTWFwIDogX3dpbmRvdyROYW1lZE5vZGVNYXAsXG4gICAgICBIVE1MRm9ybUVsZW1lbnQgPSB3aW5kb3cuSFRNTEZvcm1FbGVtZW50LFxuICAgICAgRE9NUGFyc2VyID0gd2luZG93LkRPTVBhcnNlcixcbiAgICAgIHRydXN0ZWRUeXBlcyA9IHdpbmRvdy50cnVzdGVkVHlwZXM7XG4gICAgdmFyIEVsZW1lbnRQcm90b3R5cGUgPSBFbGVtZW50LnByb3RvdHlwZTtcbiAgICB2YXIgY2xvbmVOb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdjbG9uZU5vZGUnKTtcbiAgICB2YXIgZ2V0TmV4dFNpYmxpbmcgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ25leHRTaWJsaW5nJyk7XG4gICAgdmFyIGdldENoaWxkTm9kZXMgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2NoaWxkTm9kZXMnKTtcbiAgICB2YXIgZ2V0UGFyZW50Tm9kZSA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAncGFyZW50Tm9kZScpO1xuXG4gICAgLy8gQXMgcGVyIGlzc3VlICM0NywgdGhlIHdlYi1jb21wb25lbnRzIHJlZ2lzdHJ5IGlzIGluaGVyaXRlZCBieSBhXG4gICAgLy8gbmV3IGRvY3VtZW50IGNyZWF0ZWQgdmlhIGNyZWF0ZUhUTUxEb2N1bWVudC4gQXMgcGVyIHRoZSBzcGVjXG4gICAgLy8gKGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYmNvbXBvbmVudHMvc3BlYy9jdXN0b20vI2NyZWF0aW5nLWFuZC1wYXNzaW5nLXJlZ2lzdHJpZXMpXG4gICAgLy8gYSBuZXcgZW1wdHkgcmVnaXN0cnkgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGVtcGxhdGUgY29udGVudHMgb3duZXJcbiAgICAvLyBkb2N1bWVudCwgc28gd2UgdXNlIHRoYXQgYXMgb3VyIHBhcmVudCBkb2N1bWVudCB0byBlbnN1cmUgbm90aGluZ1xuICAgIC8vIGlzIGluaGVyaXRlZC5cbiAgICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICBpZiAodGVtcGxhdGUuY29udGVudCAmJiB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQpIHtcbiAgICAgICAgZG9jdW1lbnQgPSB0ZW1wbGF0ZS5jb250ZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB0cnVzdGVkVHlwZXNQb2xpY3kgPSBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5KHRydXN0ZWRUeXBlcywgb3JpZ2luYWxEb2N1bWVudCk7XG4gICAgdmFyIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKSA6ICcnO1xuICAgIHZhciBfZG9jdW1lbnQgPSBkb2N1bWVudCxcbiAgICAgIGltcGxlbWVudGF0aW9uID0gX2RvY3VtZW50LmltcGxlbWVudGF0aW9uLFxuICAgICAgY3JlYXRlTm9kZUl0ZXJhdG9yID0gX2RvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcixcbiAgICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBfZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lID0gX2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lO1xuICAgIHZhciBpbXBvcnROb2RlID0gb3JpZ2luYWxEb2N1bWVudC5pbXBvcnROb2RlO1xuICAgIHZhciBkb2N1bWVudE1vZGUgPSB7fTtcbiAgICB0cnkge1xuICAgICAgZG9jdW1lbnRNb2RlID0gY2xvbmUoZG9jdW1lbnQpLmRvY3VtZW50TW9kZSA/IGRvY3VtZW50LmRvY3VtZW50TW9kZSA6IHt9O1xuICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgdmFyIGhvb2tzID0ge307XG5cbiAgICAvKipcbiAgICAgKiBFeHBvc2Ugd2hldGhlciB0aGlzIGJyb3dzZXIgc3VwcG9ydHMgcnVubmluZyB0aGUgZnVsbCBET01QdXJpZnkuXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gdHlwZW9mIGdldFBhcmVudE5vZGUgPT09ICdmdW5jdGlvbicgJiYgaW1wbGVtZW50YXRpb24gJiYgaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50ICE9PSB1bmRlZmluZWQgJiYgZG9jdW1lbnRNb2RlICE9PSA5O1xuICAgIHZhciBNVVNUQUNIRV9FWFBSJDEgPSBNVVNUQUNIRV9FWFBSLFxuICAgICAgRVJCX0VYUFIkMSA9IEVSQl9FWFBSLFxuICAgICAgVE1QTElUX0VYUFIkMSA9IFRNUExJVF9FWFBSLFxuICAgICAgREFUQV9BVFRSJDEgPSBEQVRBX0FUVFIsXG4gICAgICBBUklBX0FUVFIkMSA9IEFSSUFfQVRUUixcbiAgICAgIElTX1NDUklQVF9PUl9EQVRBJDEgPSBJU19TQ1JJUFRfT1JfREFUQSxcbiAgICAgIEFUVFJfV0hJVEVTUEFDRSQxID0gQVRUUl9XSElURVNQQUNFLFxuICAgICAgQ1VTVE9NX0VMRU1FTlQkMSA9IENVU1RPTV9FTEVNRU5UO1xuICAgIHZhciBJU19BTExPV0VEX1VSSSQxID0gSVNfQUxMT1dFRF9VUkk7XG5cbiAgICAvKipcbiAgICAgKiBXZSBjb25zaWRlciB0aGUgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYmVsb3cgdG8gYmUgc2FmZS4gSWRlYWxseVxuICAgICAqIGRvbid0IGFkZCBhbnkgbmV3IG9uZXMgYnV0IGZlZWwgZnJlZSB0byByZW1vdmUgdW53YW50ZWQgb25lcy5cbiAgICAgKi9cblxuICAgIC8qIGFsbG93ZWQgZWxlbWVudCBuYW1lcyAqL1xuICAgIHZhciBBTExPV0VEX1RBR1MgPSBudWxsO1xuICAgIHZhciBERUZBVUxUX0FMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwkMSksIF90b0NvbnN1bWFibGVBcnJheShzdmckMSksIF90b0NvbnN1bWFibGVBcnJheShzdmdGaWx0ZXJzKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCQxKSwgX3RvQ29uc3VtYWJsZUFycmF5KHRleHQpKSk7XG5cbiAgICAvKiBBbGxvd2VkIGF0dHJpYnV0ZSBuYW1lcyAqL1xuICAgIHZhciBBTExPV0VEX0FUVFIgPSBudWxsO1xuICAgIHZhciBERUZBVUxUX0FMTE9XRURfQVRUUiA9IGFkZFRvU2V0KHt9LCBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGh0bWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnKSwgX3RvQ29uc3VtYWJsZUFycmF5KG1hdGhNbCksIF90b0NvbnN1bWFibGVBcnJheSh4bWwpKSk7XG5cbiAgICAvKlxuICAgICAqIENvbmZpZ3VyZSBob3cgRE9NUFVyaWZ5IHNob3VsZCBoYW5kbGUgY3VzdG9tIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgY3VzdG9taXplZCBidWlsdC1pbiBlbGVtZW50cy5cbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSB0YWdOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGN1c3RvbSBlbGVtZW50cylcbiAgICAgKiBAcHJvcGVydHkge1JlZ0V4cHxGdW5jdGlvbnxudWxsfSBhdHRyaWJ1dGVOYW1lQ2hlY2sgb25lIG9mIFtudWxsLCByZWdleFBhdHRlcm4sIHByZWRpY2F0ZV0uIERlZmF1bHQ6IGBudWxsYCAoZGlzYWxsb3cgYW55IGF0dHJpYnV0ZXMgbm90IG9uIHRoZSBhbGxvdyBsaXN0KVxuICAgICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIGFsbG93IGN1c3RvbSBlbGVtZW50cyBkZXJpdmVkIGZyb20gYnVpbHQtaW5zIGlmIHRoZXkgcGFzcyBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2suIERlZmF1bHQ6IGBmYWxzZWAuXG4gICAgICovXG4gICAgdmFyIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HID0gT2JqZWN0LnNlYWwoT2JqZWN0LmNyZWF0ZShudWxsLCB7XG4gICAgICB0YWdOYW1lQ2hlY2s6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlTmFtZUNoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSxcbiAgICAgIGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgLyogRXhwbGljaXRseSBmb3JiaWRkZW4gdGFncyAob3ZlcnJpZGVzIEFMTE9XRURfVEFHUy9BRERfVEFHUykgKi9cbiAgICB2YXIgRk9SQklEX1RBR1MgPSBudWxsO1xuXG4gICAgLyogRXhwbGljaXRseSBmb3JiaWRkZW4gYXR0cmlidXRlcyAob3ZlcnJpZGVzIEFMTE9XRURfQVRUUi9BRERfQVRUUikgKi9cbiAgICB2YXIgRk9SQklEX0FUVFIgPSBudWxsO1xuXG4gICAgLyogRGVjaWRlIGlmIEFSSUEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuICAgIHZhciBBTExPV19BUklBX0FUVFIgPSB0cnVlO1xuXG4gICAgLyogRGVjaWRlIGlmIGN1c3RvbSBkYXRhIGF0dHJpYnV0ZXMgYXJlIG9rYXkgKi9cbiAgICB2YXIgQUxMT1dfREFUQV9BVFRSID0gdHJ1ZTtcblxuICAgIC8qIERlY2lkZSBpZiB1bmtub3duIHByb3RvY29scyBhcmUgb2theSAqL1xuICAgIHZhciBBTExPV19VTktOT1dOX1BST1RPQ09MUyA9IGZhbHNlO1xuXG4gICAgLyogRGVjaWRlIGlmIHNlbGYtY2xvc2luZyB0YWdzIGluIGF0dHJpYnV0ZXMgYXJlIGFsbG93ZWQuXG4gICAgICogVXN1YWxseSByZW1vdmVkIGR1ZSB0byBhIG1YU1MgaXNzdWUgaW4galF1ZXJ5IDMuMCAqL1xuICAgIHZhciBBTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgPSB0cnVlO1xuXG4gICAgLyogT3V0cHV0IHNob3VsZCBiZSBzYWZlIGZvciBjb21tb24gdGVtcGxhdGUgZW5naW5lcy5cbiAgICAgKiBUaGlzIG1lYW5zLCBET01QdXJpZnkgcmVtb3ZlcyBkYXRhIGF0dHJpYnV0ZXMsIG11c3RhY2hlcyBhbmQgRVJCXG4gICAgICovXG4gICAgdmFyIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGZhbHNlO1xuXG4gICAgLyogT3V0cHV0IHNob3VsZCBiZSBzYWZlIGV2ZW4gZm9yIFhNTCB1c2VkIHdpdGhpbiBIVE1MIGFuZCBhbGlrZS5cbiAgICAgKiBUaGlzIG1lYW5zLCBET01QdXJpZnkgcmVtb3ZlcyBjb21tZW50cyB3aGVuIGNvbnRhaW5pbmcgcmlza3kgY29udGVudC5cbiAgICAgKi9cbiAgICB2YXIgU0FGRV9GT1JfWE1MID0gdHJ1ZTtcblxuICAgIC8qIERlY2lkZSBpZiBkb2N1bWVudCB3aXRoIDxodG1sPi4uLiBzaG91bGQgYmUgcmV0dXJuZWQgKi9cbiAgICB2YXIgV0hPTEVfRE9DVU1FTlQgPSBmYWxzZTtcblxuICAgIC8qIFRyYWNrIHdoZXRoZXIgY29uZmlnIGlzIGFscmVhZHkgc2V0IG9uIHRoaXMgaW5zdGFuY2Ugb2YgRE9NUHVyaWZ5LiAqL1xuICAgIHZhciBTRVRfQ09ORklHID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgYWxsIGVsZW1lbnRzIChlLmcuIHN0eWxlLCBzY3JpcHQpIG11c3QgYmUgY2hpbGRyZW4gb2ZcbiAgICAgKiBkb2N1bWVudC5ib2R5LiBCeSBkZWZhdWx0LCBicm93c2VycyBtaWdodCBtb3ZlIHRoZW0gdG8gZG9jdW1lbnQuaGVhZCAqL1xuICAgIHZhciBGT1JDRV9CT0RZID0gZmFsc2U7XG5cbiAgICAvKiBEZWNpZGUgaWYgYSBET00gYEhUTUxCb2R5RWxlbWVudGAgc2hvdWxkIGJlIHJldHVybmVkLCBpbnN0ZWFkIG9mIGEgaHRtbFxuICAgICAqIHN0cmluZyAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKS5cbiAgICAgKiBJZiBgV0hPTEVfRE9DVU1FTlRgIGlzIGVuYWJsZWQgYSBgSFRNTEh0bWxFbGVtZW50YCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWRcbiAgICAgKi9cbiAgICB2YXIgUkVUVVJOX0RPTSA9IGZhbHNlO1xuXG4gICAgLyogRGVjaWRlIGlmIGEgRE9NIGBEb2N1bWVudEZyYWdtZW50YCBzaG91bGQgYmUgcmV0dXJuZWQsIGluc3RlYWQgb2YgYSBodG1sXG4gICAgICogc3RyaW5nICAob3IgYSBUcnVzdGVkSFRNTCBvYmplY3QgaWYgVHJ1c3RlZCBUeXBlcyBhcmUgc3VwcG9ydGVkKSAqL1xuICAgIHZhciBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gZmFsc2U7XG5cbiAgICAvKiBUcnkgdG8gcmV0dXJuIGEgVHJ1c3RlZCBUeXBlIG9iamVjdCBpbnN0ZWFkIG9mIGEgc3RyaW5nLCByZXR1cm4gYSBzdHJpbmcgaW5cbiAgICAgKiBjYXNlIFRydXN0ZWQgVHlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQgICovXG4gICAgdmFyIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBmYWxzZTtcblxuICAgIC8qIE91dHB1dCBzaG91bGQgYmUgZnJlZSBmcm9tIERPTSBjbG9iYmVyaW5nIGF0dGFja3M/XG4gICAgICogVGhpcyBzYW5pdGl6ZXMgbWFya3VwcyBuYW1lZCB3aXRoIGNvbGxpZGluZywgY2xvYmJlcmFibGUgYnVpbHQtaW4gRE9NIEFQSXMuXG4gICAgICovXG4gICAgdmFyIFNBTklUSVpFX0RPTSA9IHRydWU7XG5cbiAgICAvKiBBY2hpZXZlIGZ1bGwgRE9NIENsb2JiZXJpbmcgcHJvdGVjdGlvbiBieSBpc29sYXRpbmcgdGhlIG5hbWVzcGFjZSBvZiBuYW1lZFxuICAgICAqIHByb3BlcnRpZXMgYW5kIEpTIHZhcmlhYmxlcywgbWl0aWdhdGluZyBhdHRhY2tzIHRoYXQgYWJ1c2UgdGhlIEhUTUwvRE9NIHNwZWMgcnVsZXMuXG4gICAgICpcbiAgICAgKiBIVE1ML0RPTSBzcGVjIHJ1bGVzIHRoYXQgZW5hYmxlIERPTSBDbG9iYmVyaW5nOlxuICAgICAqICAgLSBOYW1lZCBBY2Nlc3Mgb24gV2luZG93ICjCpzcuMy4zKVxuICAgICAqICAgLSBET00gVHJlZSBBY2Nlc3NvcnMgKMKnMy4xLjUpXG4gICAgICogICAtIEZvcm0gRWxlbWVudCBQYXJlbnQtQ2hpbGQgUmVsYXRpb25zICjCpzQuMTAuMylcbiAgICAgKiAgIC0gSWZyYW1lIHNyY2RvYyAvIE5lc3RlZCBXaW5kb3dQcm94aWVzICjCpzQuOC41KVxuICAgICAqICAgLSBIVE1MQ29sbGVjdGlvbiAowqc0LjIuMTAuMilcbiAgICAgKlxuICAgICAqIE5hbWVzcGFjZSBpc29sYXRpb24gaXMgaW1wbGVtZW50ZWQgYnkgcHJlZml4aW5nIGBpZGAgYW5kIGBuYW1lYCBhdHRyaWJ1dGVzXG4gICAgICogd2l0aCBhIGNvbnN0YW50IHN0cmluZywgaS5lLiwgYHVzZXItY29udGVudC1gXG4gICAgICovXG4gICAgdmFyIFNBTklUSVpFX05BTUVEX1BST1BTID0gZmFsc2U7XG4gICAgdmFyIFNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCA9ICd1c2VyLWNvbnRlbnQtJztcblxuICAgIC8qIEtlZXAgZWxlbWVudCBjb250ZW50IHdoZW4gcmVtb3ZpbmcgZWxlbWVudD8gKi9cbiAgICB2YXIgS0VFUF9DT05URU5UID0gdHJ1ZTtcblxuICAgIC8qIElmIGEgYE5vZGVgIGlzIHBhc3NlZCB0byBzYW5pdGl6ZSgpLCB0aGVuIHBlcmZvcm1zIHNhbml0aXphdGlvbiBpbi1wbGFjZSBpbnN0ZWFkXG4gICAgICogb2YgaW1wb3J0aW5nIGl0IGludG8gYSBuZXcgRG9jdW1lbnQgYW5kIHJldHVybmluZyBhIHNhbml0aXplZCBjb3B5ICovXG4gICAgdmFyIElOX1BMQUNFID0gZmFsc2U7XG5cbiAgICAvKiBBbGxvdyB1c2FnZSBvZiBwcm9maWxlcyBsaWtlIGh0bWwsIHN2ZyBhbmQgbWF0aE1sICovXG4gICAgdmFyIFVTRV9QUk9GSUxFUyA9IHt9O1xuXG4gICAgLyogVGFncyB0byBpZ25vcmUgY29udGVudCBvZiB3aGVuIEtFRVBfQ09OVEVOVCBpcyB0cnVlICovXG4gICAgdmFyIEZPUkJJRF9DT05URU5UUyA9IG51bGw7XG4gICAgdmFyIERFRkFVTFRfRk9SQklEX0NPTlRFTlRTID0gYWRkVG9TZXQoe30sIFsnYW5ub3RhdGlvbi14bWwnLCAnYXVkaW8nLCAnY29sZ3JvdXAnLCAnZGVzYycsICdmb3JlaWdub2JqZWN0JywgJ2hlYWQnLCAnaWZyYW1lJywgJ21hdGgnLCAnbWknLCAnbW4nLCAnbW8nLCAnbXMnLCAnbXRleHQnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdwbGFpbnRleHQnLCAnc2NyaXB0JywgJ3N0eWxlJywgJ3N2ZycsICd0ZW1wbGF0ZScsICd0aGVhZCcsICd0aXRsZScsICd2aWRlbycsICd4bXAnXSk7XG5cbiAgICAvKiBUYWdzIHRoYXQgYXJlIHNhZmUgZm9yIGRhdGE6IFVSSXMgKi9cbiAgICB2YXIgREFUQV9VUklfVEFHUyA9IG51bGw7XG4gICAgdmFyIERFRkFVTFRfREFUQV9VUklfVEFHUyA9IGFkZFRvU2V0KHt9LCBbJ2F1ZGlvJywgJ3ZpZGVvJywgJ2ltZycsICdzb3VyY2UnLCAnaW1hZ2UnLCAndHJhY2snXSk7XG5cbiAgICAvKiBBdHRyaWJ1dGVzIHNhZmUgZm9yIHZhbHVlcyBsaWtlIFwiamF2YXNjcmlwdDpcIiAqL1xuICAgIHZhciBVUklfU0FGRV9BVFRSSUJVVEVTID0gbnVsbDtcbiAgICB2YXIgREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTID0gYWRkVG9TZXQoe30sIFsnYWx0JywgJ2NsYXNzJywgJ2ZvcicsICdpZCcsICdsYWJlbCcsICduYW1lJywgJ3BhdHRlcm4nLCAncGxhY2Vob2xkZXInLCAncm9sZScsICdzdW1tYXJ5JywgJ3RpdGxlJywgJ3ZhbHVlJywgJ3N0eWxlJywgJ3htbG5zJ10pO1xuICAgIHZhciBNQVRITUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xuICAgIHZhciBTVkdfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICB2YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG4gICAgLyogRG9jdW1lbnQgbmFtZXNwYWNlICovXG4gICAgdmFyIE5BTUVTUEFDRSA9IEhUTUxfTkFNRVNQQUNFO1xuICAgIHZhciBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuXG4gICAgLyogQWxsb3dlZCBYSFRNTCtYTUwgbmFtZXNwYWNlcyAqL1xuICAgIHZhciBBTExPV0VEX05BTUVTUEFDRVMgPSBudWxsO1xuICAgIHZhciBERUZBVUxUX0FMTE9XRURfTkFNRVNQQUNFUyA9IGFkZFRvU2V0KHt9LCBbTUFUSE1MX05BTUVTUEFDRSwgU1ZHX05BTUVTUEFDRSwgSFRNTF9OQU1FU1BBQ0VdLCBzdHJpbmdUb1N0cmluZyk7XG5cbiAgICAvKiBQYXJzaW5nIG9mIHN0cmljdCBYSFRNTCBkb2N1bWVudHMgKi9cbiAgICB2YXIgUEFSU0VSX01FRElBX1RZUEU7XG4gICAgdmFyIFNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMgPSBbJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsICd0ZXh0L2h0bWwnXTtcbiAgICB2YXIgREVGQVVMVF9QQVJTRVJfTUVESUFfVFlQRSA9ICd0ZXh0L2h0bWwnO1xuICAgIHZhciB0cmFuc2Zvcm1DYXNlRnVuYztcblxuICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gY29uZmlnIHRvIHBhc3MgdG8gaG9va3MgKi9cbiAgICB2YXIgQ09ORklHID0gbnVsbDtcblxuICAgIC8qIFNwZWNpZnkgdGhlIG1heGltdW0gZWxlbWVudCBuZXN0aW5nIGRlcHRoIHRvIHByZXZlbnQgbVhTUyAqL1xuICAgIHZhciBNQVhfTkVTVElOR19ERVBUSCA9IDI1NTtcblxuICAgIC8qIElkZWFsbHksIGRvIG5vdCB0b3VjaCBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgKi9cbiAgICAvKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICovXG5cbiAgICB2YXIgZm9ybUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gICAgdmFyIGlzUmVnZXhPckZ1bmN0aW9uID0gZnVuY3Rpb24gaXNSZWdleE9yRnVuY3Rpb24odGVzdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfcGFyc2VDb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge09iamVjdH0gY2ZnIG9wdGlvbmFsIGNvbmZpZyBsaXRlcmFsXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgICB2YXIgX3BhcnNlQ29uZmlnID0gZnVuY3Rpb24gX3BhcnNlQ29uZmlnKGNmZykge1xuICAgICAgaWYgKENPTkZJRyAmJiBDT05GSUcgPT09IGNmZykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8qIFNoaWVsZCBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIHRhbXBlcmluZyAqL1xuICAgICAgaWYgKCFjZmcgfHwgX3R5cGVvZihjZmcpICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjZmcgPSB7fTtcbiAgICAgIH1cblxuICAgICAgLyogU2hpZWxkIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZyb20gcHJvdG90eXBlIHBvbGx1dGlvbiAqL1xuICAgICAgY2ZnID0gY2xvbmUoY2ZnKTtcbiAgICAgIFBBUlNFUl9NRURJQV9UWVBFID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gUEFSU0VSX01FRElBX1RZUEUgPSBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIDogUEFSU0VSX01FRElBX1RZUEUgPSBjZmcuUEFSU0VSX01FRElBX1RZUEU7XG5cbiAgICAgIC8vIEhUTUwgdGFncyBhbmQgYXR0cmlidXRlcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBjb252ZXJ0aW5nIHRvIGxvd2VyY2FzZS4gS2VlcGluZyBYSFRNTCBhcyBpcy5cbiAgICAgIHRyYW5zZm9ybUNhc2VGdW5jID0gUEFSU0VSX01FRElBX1RZUEUgPT09ICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnID8gc3RyaW5nVG9TdHJpbmcgOiBzdHJpbmdUb0xvd2VyQ2FzZTtcblxuICAgICAgLyogU2V0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqL1xuICAgICAgQUxMT1dFRF9UQUdTID0gJ0FMTE9XRURfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX1RBR1MsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfQUxMT1dFRF9UQUdTO1xuICAgICAgQUxMT1dFRF9BVFRSID0gJ0FMTE9XRURfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfQUxMT1dFRF9BVFRSO1xuICAgICAgQUxMT1dFRF9OQU1FU1BBQ0VTID0gJ0FMTE9XRURfTkFNRVNQQUNFUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX05BTUVTUEFDRVMsIHN0cmluZ1RvU3RyaW5nKSA6IERFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTO1xuICAgICAgVVJJX1NBRkVfQVRUUklCVVRFUyA9ICdBRERfVVJJX1NBRkVfQVRUUicgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICBjZmcuQUREX1VSSV9TQUZFX0FUVFIsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIDogREVGQVVMVF9VUklfU0FGRV9BVFRSSUJVVEVTO1xuICAgICAgREFUQV9VUklfVEFHUyA9ICdBRERfREFUQV9VUklfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoY2xvbmUoREVGQVVMVF9EQVRBX1VSSV9UQUdTKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW5kZW50XG4gICAgICBjZmcuQUREX0RBVEFfVVJJX1RBR1MsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGluZGVudFxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgICkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBpbmRlbnRcbiAgICAgIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgICAgRk9SQklEX0NPTlRFTlRTID0gJ0ZPUkJJRF9DT05URU5UUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTO1xuICAgICAgRk9SQklEX1RBR1MgPSAnRk9SQklEX1RBR1MnIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX1RBR1MsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgRk9SQklEX0FUVFIgPSAnRk9SQklEX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KHt9LCBjZmcuRk9SQklEX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKSA6IHt9O1xuICAgICAgVVNFX1BST0ZJTEVTID0gJ1VTRV9QUk9GSUxFUycgaW4gY2ZnID8gY2ZnLlVTRV9QUk9GSUxFUyA6IGZhbHNlO1xuICAgICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgQUxMT1dfREFUQV9BVFRSID0gY2ZnLkFMTE9XX0RBVEFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuICAgICAgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgPSBjZmcuQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIEFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiA9IGNmZy5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICAgIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGNmZy5TQUZFX0ZPUl9URU1QTEFURVMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIFNBRkVfRk9SX1hNTCA9IGNmZy5TQUZFX0ZPUl9YTUwgIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICAgIFdIT0xFX0RPQ1VNRU5UID0gY2ZnLldIT0xFX0RPQ1VNRU5UIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBSRVRVUk5fRE9NID0gY2ZnLlJFVFVSTl9ET00gfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIFJFVFVSTl9ET01fRlJBR01FTlQgPSBjZmcuUkVUVVJOX0RPTV9GUkFHTUVOVCB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgUkVUVVJOX1RSVVNURURfVFlQRSA9IGNmZy5SRVRVUk5fVFJVU1RFRF9UWVBFIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBGT1JDRV9CT0RZID0gY2ZnLkZPUkNFX0JPRFkgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcbiAgICAgIFNBTklUSVpFX0RPTSA9IGNmZy5TQU5JVElaRV9ET00gIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcbiAgICAgIFNBTklUSVpFX05BTUVEX1BST1BTID0gY2ZnLlNBTklUSVpFX05BTUVEX1BST1BTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG4gICAgICBLRUVQX0NPTlRFTlQgPSBjZmcuS0VFUF9DT05URU5UICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG4gICAgICBJTl9QTEFDRSA9IGNmZy5JTl9QTEFDRSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuICAgICAgSVNfQUxMT1dFRF9VUkkkMSA9IGNmZy5BTExPV0VEX1VSSV9SRUdFWFAgfHwgSVNfQUxMT1dFRF9VUkkkMTtcbiAgICAgIE5BTUVTUEFDRSA9IGNmZy5OQU1FU1BBQ0UgfHwgSFRNTF9OQU1FU1BBQ0U7XG4gICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORyA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyB8fCB7fTtcbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgaXNSZWdleE9yRnVuY3Rpb24oY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaykpIHtcbiAgICAgICAgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrID0gY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaztcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09ICdib29sZWFuJykge1xuICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgfVxuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBBTExPV19EQVRBX0FUVFIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgIFJFVFVSTl9ET00gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBQYXJzZSBwcm9maWxlIGluZm8gKi9cbiAgICAgIGlmIChVU0VfUFJPRklMRVMpIHtcbiAgICAgICAgQUxMT1dFRF9UQUdTID0gYWRkVG9TZXQoe30sIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSk7XG4gICAgICAgIEFMTE9XRURfQVRUUiA9IFtdO1xuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLmh0bWwgPT09IHRydWUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGh0bWwkMSk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBodG1sKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLnN2ZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnJDEpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgc3ZnKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHhtbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFVTRV9QUk9GSUxFUy5zdmdGaWx0ZXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIHN2Zyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCB4bWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMubWF0aE1sID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBtYXRoTWwkMSk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBtYXRoTWwpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBNZXJnZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi9cbiAgICAgIGlmIChjZmcuQUREX1RBR1MpIHtcbiAgICAgICAgaWYgKEFMTE9XRURfVEFHUyA9PT0gREVGQVVMVF9BTExPV0VEX1RBR1MpIHtcbiAgICAgICAgICBBTExPV0VEX1RBR1MgPSBjbG9uZShBTExPV0VEX1RBR1MpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgY2ZnLkFERF9UQUdTLCB0cmFuc2Zvcm1DYXNlRnVuYyk7XG4gICAgICB9XG4gICAgICBpZiAoY2ZnLkFERF9BVFRSKSB7XG4gICAgICAgIGlmIChBTExPV0VEX0FUVFIgPT09IERFRkFVTFRfQUxMT1dFRF9BVFRSKSB7XG4gICAgICAgICAgQUxMT1dFRF9BVFRSID0gY2xvbmUoQUxMT1dFRF9BVFRSKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1NldChBTExPV0VEX0FUVFIsIGNmZy5BRERfQVRUUiwgdHJhbnNmb3JtQ2FzZUZ1bmMpO1xuICAgICAgfVxuICAgICAgaWYgKGNmZy5BRERfVVJJX1NBRkVfQVRUUikge1xuICAgICAgICBhZGRUb1NldChVUklfU0FGRV9BVFRSSUJVVEVTLCBjZmcuQUREX1VSSV9TQUZFX0FUVFIsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cbiAgICAgIGlmIChjZmcuRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gY2xvbmUoRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb1NldChGT1JCSURfQ09OVEVOVFMsIGNmZy5GT1JCSURfQ09OVEVOVFMsIHRyYW5zZm9ybUNhc2VGdW5jKTtcbiAgICAgIH1cblxuICAgICAgLyogQWRkICN0ZXh0IGluIGNhc2UgS0VFUF9DT05URU5UIGlzIHNldCB0byB0cnVlICovXG4gICAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICAgIEFMTE9XRURfVEFHU1snI3RleHQnXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIEFkZCBodG1sLCBoZWFkIGFuZCBib2R5IHRvIEFMTE9XRURfVEFHUyBpbiBjYXNlIFdIT0xFX0RPQ1VNRU5UIGlzIHRydWUgKi9cbiAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCkge1xuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIFsnaHRtbCcsICdoZWFkJywgJ2JvZHknXSk7XG4gICAgICB9XG5cbiAgICAgIC8qIEFkZCB0Ym9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSB0YWJsZXMgYXJlIHBlcm1pdHRlZCwgc2VlICMyODYsICMzNjUgKi9cbiAgICAgIGlmIChBTExPV0VEX1RBR1MudGFibGUpIHtcbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBbJ3Rib2R5J10pO1xuICAgICAgICBkZWxldGUgRk9SQklEX1RBR1MudGJvZHk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXZlbnQgZnVydGhlciBtYW5pcHVsYXRpb24gb2YgY29uZmlndXJhdGlvbi5cbiAgICAgIC8vIE5vdCBhdmFpbGFibGUgaW4gSUU4LCBTYWZhcmkgNSwgZXRjLlxuICAgICAgaWYgKGZyZWV6ZSkge1xuICAgICAgICBmcmVlemUoY2ZnKTtcbiAgICAgIH1cbiAgICAgIENPTkZJRyA9IGNmZztcbiAgICB9O1xuICAgIHZhciBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgICB2YXIgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydmb3JlaWdub2JqZWN0JywgJ2Fubm90YXRpb24teG1sJ10pO1xuXG4gICAgLy8gQ2VydGFpbiBlbGVtZW50cyBhcmUgYWxsb3dlZCBpbiBib3RoIFNWRyBhbmQgSFRNTFxuICAgIC8vIG5hbWVzcGFjZS4gV2UgbmVlZCB0byBzcGVjaWZ5IHRoZW0gZXhwbGljaXRseVxuICAgIC8vIHNvIHRoYXQgdGhleSBkb24ndCBnZXQgZXJyb25lb3VzbHkgZGVsZXRlZCBmcm9tXG4gICAgLy8gSFRNTCBuYW1lc3BhY2UuXG4gICAgdmFyIENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFMgPSBhZGRUb1NldCh7fSwgWyd0aXRsZScsICdzdHlsZScsICdmb250JywgJ2EnLCAnc2NyaXB0J10pO1xuXG4gICAgLyogS2VlcCB0cmFjayBvZiBhbGwgcG9zc2libGUgU1ZHIGFuZCBNYXRoTUwgdGFnc1xuICAgICAqIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gdGhlIG5hbWVzcGFjZSBjaGVja3NcbiAgICAgKiBjb3JyZWN0bHkuICovXG4gICAgdmFyIEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBzdmckMSk7XG4gICAgYWRkVG9TZXQoQUxMX1NWR19UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0Rpc2FsbG93ZWQpO1xuICAgIHZhciBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgbWF0aE1sJDEpO1xuICAgIGFkZFRvU2V0KEFMTF9NQVRITUxfVEFHUywgbWF0aE1sRGlzYWxsb3dlZCk7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtICB7RWxlbWVudH0gZWxlbWVudCBhIERPTSBlbGVtZW50IHdob3NlIG5hbWVzcGFjZSBpcyBiZWluZyBjaGVja2VkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybiBmYWxzZSBpZiB0aGUgZWxlbWVudCBoYXMgYVxuICAgICAqICBuYW1lc3BhY2UgdGhhdCBhIHNwZWMtY29tcGxpYW50IHBhcnNlciB3b3VsZCBuZXZlclxuICAgICAqICByZXR1cm4uIFJldHVybiB0cnVlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICB2YXIgX2NoZWNrVmFsaWROYW1lc3BhY2UgPSBmdW5jdGlvbiBfY2hlY2tWYWxpZE5hbWVzcGFjZShlbGVtZW50KSB7XG4gICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICAgICAgLy8gSW4gSlNET00sIGlmIHdlJ3JlIGluc2lkZSBzaGFkb3cgRE9NLCB0aGVuIHBhcmVudE5vZGVcbiAgICAgIC8vIGNhbiBiZSBudWxsLiBXZSBqdXN0IHNpbXVsYXRlIHBhcmVudCBpbiB0aGlzIGNhc2UuXG4gICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LnRhZ05hbWUpIHtcbiAgICAgICAgcGFyZW50ID0ge1xuICAgICAgICAgIG5hbWVzcGFjZVVSSTogTkFNRVNQQUNFLFxuICAgICAgICAgIHRhZ05hbWU6ICd0ZW1wbGF0ZSdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHZhciB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgIHZhciBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuICAgICAgaWYgKCFBTExPV0VEX05BTUVTUEFDRVNbZWxlbWVudC5uYW1lc3BhY2VVUkldKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gSFRNTCBuYW1lc3BhY2UgdG8gU1ZHXG4gICAgICAgIC8vIGlzIHZpYSA8c3ZnPi4gSWYgaXQgaGFwcGVucyB2aWEgYW55IG90aGVyIHRhZywgdGhlblxuICAgICAgICAvLyBpdCBzaG91bGQgYmUga2lsbGVkLlxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgICByZXR1cm4gdGFnTmFtZSA9PT0gJ3N2Zyc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gTWF0aE1MIHRvIFNWRyBpcyB2aWFgXG4gICAgICAgIC8vIHN2ZyBpZiBwYXJlbnQgaXMgZWl0aGVyIDxhbm5vdGF0aW9uLXhtbD4gb3IgTWF0aE1MXG4gICAgICAgIC8vIHRleHQgaW50ZWdyYXRpb24gcG9pbnRzLlxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnc3ZnJyAmJiAocGFyZW50VGFnTmFtZSA9PT0gJ2Fubm90YXRpb24teG1sJyB8fCBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIFNWR1xuICAgICAgICAvLyBzcGVjLiBBbGwgb3RoZXJzIGFyZSBkaXNhbGxvd2VkIGluIFNWRyBuYW1lc3BhY2UuXG4gICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIEhUTUwgbmFtZXNwYWNlIHRvIE1hdGhNTFxuICAgICAgICAvLyBpcyB2aWEgPG1hdGg+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgb25seSB3YXkgdG8gc3dpdGNoIGZyb20gU1ZHIHRvIE1hdGhNTCBpcyB2aWFcbiAgICAgICAgLy8gPG1hdGg+IGFuZCBIVE1MIGludGVncmF0aW9uIHBvaW50c1xuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCcgJiYgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBvbmx5IGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4gTWF0aE1MXG4gICAgICAgIC8vIHNwZWMuIEFsbCBvdGhlcnMgYXJlIGRpc2FsbG93ZWQgaW4gTWF0aE1MIG5hbWVzcGFjZS5cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIFNWRyB0byBIVE1MIGlzIHZpYVxuICAgICAgICAvLyBIVE1MIGludGVncmF0aW9uIHBvaW50cywgYW5kIGZyb20gTWF0aE1MIHRvIEhUTUxcbiAgICAgICAgLy8gaXMgdmlhIE1hdGhNTCB0ZXh0IGludGVncmF0aW9uIHBvaW50c1xuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSAmJiAhSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UgJiYgIU1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIGRpc2FsbG93IHRhZ3MgdGhhdCBhcmUgc3BlY2lmaWMgZm9yIE1hdGhNTFxuICAgICAgICAvLyBvciBTVkcgYW5kIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gSFRNTCBuYW1lc3BhY2VcbiAgICAgICAgcmV0dXJuICFBTExfTUFUSE1MX1RBR1NbdGFnTmFtZV0gJiYgKENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFNbdGFnTmFtZV0gfHwgIUFMTF9TVkdfVEFHU1t0YWdOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBYSFRNTCBhbmQgWE1MIGRvY3VtZW50cyB0aGF0IHN1cHBvcnQgY3VzdG9tIG5hbWVzcGFjZXNcbiAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgJiYgQUxMT1dFRF9OQU1FU1BBQ0VTW2VsZW1lbnQubmFtZXNwYWNlVVJJXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvZGUgc2hvdWxkIG5ldmVyIHJlYWNoIHRoaXMgcGxhY2UgKHRoaXMgbWVhbnNcbiAgICAgIC8vIHRoYXQgdGhlIGVsZW1lbnQgc29tZWhvdyBnb3QgbmFtZXNwYWNlIHRoYXQgaXMgbm90XG4gICAgICAvLyBIVE1MLCBTVkcsIE1hdGhNTCBvciBhbGxvd2VkIHZpYSBBTExPV0VEX05BTUVTUEFDRVMpLlxuICAgICAgLy8gUmV0dXJuIGZhbHNlIGp1c3QgaW4gY2FzZS5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2ZvcmNlUmVtb3ZlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlIGEgRE9NIG5vZGVcbiAgICAgKi9cbiAgICB2YXIgX2ZvcmNlUmVtb3ZlID0gZnVuY3Rpb24gX2ZvcmNlUmVtb3ZlKG5vZGUpIHtcbiAgICAgIGFycmF5UHVzaChET01QdXJpZnkucmVtb3ZlZCwge1xuICAgICAgICBlbGVtZW50OiBub2RlXG4gICAgICB9KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1yZW1vdmVcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG5vZGUub3V0ZXJIVE1MID0gZW1wdHlIVE1MO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfcmVtb3ZlQXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWUgYW4gQXR0cmlidXRlIG5hbWVcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlIGEgRE9NIG5vZGVcbiAgICAgKi9cbiAgICB2YXIgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBudWxsLFxuICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcblxuICAgICAgLy8gV2Ugdm9pZCBhdHRyaWJ1dGUgdmFsdWVzIGZvciB1bnJlbW92YWJsZSBcImlzXCJcIiBhdHRyaWJ1dGVzXG4gICAgICBpZiAobmFtZSA9PT0gJ2lzJyAmJiAhQUxMT1dFRF9BVFRSW25hbWVdKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NIHx8IFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKG5vZGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsICcnKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pbml0RG9jdW1lbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZGlydHkgYSBzdHJpbmcgb2YgZGlydHkgbWFya3VwXG4gICAgICogQHJldHVybiB7RG9jdW1lbnR9IGEgRE9NLCBmaWxsZWQgd2l0aCB0aGUgZGlydHkgbWFya3VwXG4gICAgICovXG4gICAgdmFyIF9pbml0RG9jdW1lbnQgPSBmdW5jdGlvbiBfaW5pdERvY3VtZW50KGRpcnR5KSB7XG4gICAgICAvKiBDcmVhdGUgYSBIVE1MIGRvY3VtZW50ICovXG4gICAgICB2YXIgZG9jO1xuICAgICAgdmFyIGxlYWRpbmdXaGl0ZXNwYWNlO1xuICAgICAgaWYgKEZPUkNFX0JPRFkpIHtcbiAgICAgICAgZGlydHkgPSAnPHJlbW92ZT48L3JlbW92ZT4nICsgZGlydHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBJZiBGT1JDRV9CT0RZIGlzbid0IHVzZWQsIGxlYWRpbmcgd2hpdGVzcGFjZSBuZWVkcyB0byBiZSBwcmVzZXJ2ZWQgbWFudWFsbHkgKi9cbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzdHJpbmdNYXRjaChkaXJ0eSwgL15bXFxyXFxuXFx0IF0rLyk7XG4gICAgICAgIGxlYWRpbmdXaGl0ZXNwYWNlID0gbWF0Y2hlcyAmJiBtYXRjaGVzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKFBBUlNFUl9NRURJQV9UWVBFID09PSAnYXBwbGljYXRpb24veGh0bWwreG1sJyAmJiBOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIC8vIFJvb3Qgb2YgWEhUTUwgZG9jIG11c3QgY29udGFpbiB4bWxucyBkZWNsYXJhdGlvbiAoc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvbm9ybWF0aXZlLmh0bWwjc3RyaWN0KVxuICAgICAgICBkaXJ0eSA9ICc8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj48aGVhZD48L2hlYWQ+PGJvZHk+JyArIGRpcnR5ICsgJzwvYm9keT48L2h0bWw+JztcbiAgICAgIH1cbiAgICAgIHZhciBkaXJ0eVBheWxvYWQgPSB0cnVzdGVkVHlwZXNQb2xpY3kgPyB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlSFRNTChkaXJ0eSkgOiBkaXJ0eTtcbiAgICAgIC8qXG4gICAgICAgKiBVc2UgdGhlIERPTVBhcnNlciBBUEkgYnkgZGVmYXVsdCwgZmFsbGJhY2sgbGF0ZXIgaWYgbmVlZHMgYmVcbiAgICAgICAqIERPTVBhcnNlciBub3Qgd29yayBmb3Igc3ZnIHdoZW4gaGFzIG11bHRpcGxlIHJvb3QgZWxlbWVudC5cbiAgICAgICAqL1xuICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRpcnR5UGF5bG9hZCwgUEFSU0VSX01FRElBX1RZUEUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuXG4gICAgICAvKiBVc2UgY3JlYXRlSFRNTERvY3VtZW50IGluIGNhc2UgRE9NUGFyc2VyIGlzIG5vdCBhdmFpbGFibGUgKi9cbiAgICAgIGlmICghZG9jIHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIGRvYyA9IGltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KE5BTUVTUEFDRSwgJ3RlbXBsYXRlJywgbnVsbCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC5pbm5lckhUTUwgPSBJU19FTVBUWV9JTlBVVCA/IGVtcHR5SFRNTCA6IGRpcnR5UGF5bG9hZDtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIC8vIFN5bnRheCBlcnJvciBpZiBkaXJ0eVBheWxvYWQgaXMgaW52YWxpZCB4bWxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGJvZHkgPSBkb2MuYm9keSB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKGRpcnR5ICYmIGxlYWRpbmdXaGl0ZXNwYWNlKSB7XG4gICAgICAgIGJvZHkuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlKSwgYm9keS5jaGlsZE5vZGVzWzBdIHx8IG51bGwpO1xuICAgICAgfVxuXG4gICAgICAvKiBXb3JrIG9uIHdob2xlIGRvY3VtZW50IG9yIGp1c3QgaXRzIGJvZHkgKi9cbiAgICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywgV0hPTEVfRE9DVU1FTlQgPyAnaHRtbCcgOiAnYm9keScpWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFdIT0xFX0RPQ1VNRU5UID8gZG9jLmRvY3VtZW50RWxlbWVudCA6IGJvZHk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9jcmVhdGVJdGVyYXRvclxuICAgICAqXG4gICAgICogQHBhcmFtICB7RG9jdW1lbnR9IHJvb3QgZG9jdW1lbnQvZnJhZ21lbnQgdG8gY3JlYXRlIGl0ZXJhdG9yIGZvclxuICAgICAqIEByZXR1cm4ge0l0ZXJhdG9yfSBpdGVyYXRvciBpbnN0YW5jZVxuICAgICAqL1xuICAgIHZhciBfY3JlYXRlSXRlcmF0b3IgPSBmdW5jdGlvbiBfY3JlYXRlSXRlcmF0b3Iocm9vdCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZU5vZGVJdGVyYXRvci5jYWxsKHJvb3Qub3duZXJEb2N1bWVudCB8fCByb290LCByb290LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCB8IE5vZGVGaWx0ZXIuU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OIHwgTm9kZUZpbHRlci5TSE9XX0NEQVRBX1NFQ1RJT04sIG51bGwsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2lzQ2xvYmJlcmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBlbG0gZWxlbWVudCB0byBjaGVjayBmb3IgY2xvYmJlcmluZyBhdHRhY2tzXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBjbG9iYmVyZWQsIGZhbHNlIGlmIHNhZmVcbiAgICAgKi9cbiAgICB2YXIgX2lzQ2xvYmJlcmVkID0gZnVuY3Rpb24gX2lzQ2xvYmJlcmVkKGVsbSkge1xuICAgICAgcmV0dXJuIGVsbSBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCAmJiAodHlwZW9mIGVsbS5fX2RlcHRoICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZWxtLl9fZGVwdGggIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbG0uX19yZW1vdmFsQ291bnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBlbG0uX19yZW1vdmFsQ291bnQgIT09ICdudW1iZXInIHx8IHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBlbG0uaGFzQ2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9pc05vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG9iaiBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAgICovXG4gICAgdmFyIF9pc05vZGUgPSBmdW5jdGlvbiBfaXNOb2RlKG9iamVjdCkge1xuICAgICAgcmV0dXJuIF90eXBlb2YoTm9kZSkgPT09ICdvYmplY3QnID8gb2JqZWN0IGluc3RhbmNlb2YgTm9kZSA6IG9iamVjdCAmJiBfdHlwZW9mKG9iamVjdCkgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgPT09ICdudW1iZXInICYmIHR5cGVvZiBvYmplY3Qubm9kZU5hbWUgPT09ICdzdHJpbmcnO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfZXhlY3V0ZUhvb2tcbiAgICAgKiBFeGVjdXRlIHVzZXIgY29uZmlndXJhYmxlIGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtTdHJpbmd9IGVudHJ5UG9pbnQgIE5hbWUgb2YgdGhlIGhvb2sncyBlbnRyeSBwb2ludFxuICAgICAqIEBwYXJhbSAge05vZGV9IGN1cnJlbnROb2RlIG5vZGUgdG8gd29yayBvbiB3aXRoIHRoZSBob29rXG4gICAgICogQHBhcmFtICB7T2JqZWN0fSBkYXRhIGFkZGl0aW9uYWwgaG9vayBwYXJhbWV0ZXJzXG4gICAgICovXG4gICAgdmFyIF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgaWYgKCFob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcnJheUZvckVhY2goaG9va3NbZW50cnlQb2ludF0sIGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgIGhvb2suY2FsbChET01QdXJpZnksIGN1cnJlbnROb2RlLCBkYXRhLCBDT05GSUcpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9zYW5pdGl6ZUVsZW1lbnRzXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgICAqIEBwcm90ZWN0IHRleHRDb250ZW50XG4gICAgICogQHByb3RlY3QgcmVtb3ZlQ2hpbGRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtOb2RlfSBjdXJyZW50Tm9kZSB0byBjaGVjayBmb3IgcGVybWlzc2lvbiB0byBleGlzdFxuICAgICAqIEByZXR1cm4gIHtCb29sZWFufSB0cnVlIGlmIG5vZGUgd2FzIGtpbGxlZCwgZmFsc2UgaWYgbGVmdCBhbGl2ZVxuICAgICAqL1xuICAgIHZhciBfc2FuaXRpemVFbGVtZW50cyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUVsZW1lbnRzKGN1cnJlbnROb2RlKSB7XG4gICAgICB2YXIgY29udGVudDtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgICAvKiBDaGVjayBpZiBlbGVtZW50IGlzIGNsb2JiZXJlZCBvciBjYW4gY2xvYmJlciAqL1xuICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIENoZWNrIGlmIHRhZ25hbWUgY29udGFpbnMgVW5pY29kZSAqL1xuICAgICAgaWYgKHJlZ0V4cFRlc3QoL1tcXHUwMDgwLVxcdUZGRkZdLywgY3VycmVudE5vZGUubm9kZU5hbWUpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBOb3cgbGV0J3MgY2hlY2sgdGhlIGVsZW1lbnQncyB0eXBlIGFuZCBuYW1lICovXG4gICAgICB2YXIgdGFnTmFtZSA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVFbGVtZW50JywgY3VycmVudE5vZGUsIHtcbiAgICAgICAgdGFnTmFtZTogdGFnTmFtZSxcbiAgICAgICAgYWxsb3dlZFRhZ3M6IEFMTE9XRURfVEFHU1xuICAgICAgfSk7XG5cbiAgICAgIC8qIERldGVjdCBtWFNTIGF0dGVtcHRzIGFidXNpbmcgbmFtZXNwYWNlIGNvbmZ1c2lvbiAqL1xuICAgICAgaWYgKGN1cnJlbnROb2RlLmhhc0NoaWxkTm9kZXMoKSAmJiAhX2lzTm9kZShjdXJyZW50Tm9kZS5maXJzdEVsZW1lbnRDaGlsZCkgJiYgKCFfaXNOb2RlKGN1cnJlbnROb2RlLmNvbnRlbnQpIHx8ICFfaXNOb2RlKGN1cnJlbnROb2RlLmNvbnRlbnQuZmlyc3RFbGVtZW50Q2hpbGQpKSAmJiByZWdFeHBUZXN0KC88Wy9cXHddL2csIGN1cnJlbnROb2RlLmlubmVySFRNTCkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS50ZXh0Q29udGVudCkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIE1pdGlnYXRlIGEgcHJvYmxlbSB3aXRoIHRlbXBsYXRlcyBpbnNpZGUgc2VsZWN0ICovXG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3NlbGVjdCcgJiYgcmVnRXhwVGVzdCgvPHRlbXBsYXRlL2ksIGN1cnJlbnROb2RlLmlubmVySFRNTCkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBhbnkgb2N1cnJlbmNlIG9mIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zICovXG4gICAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDcpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBhbnkga2luZCBvZiBwb3NzaWJseSBoYXJtZnVsIGNvbW1lbnRzICovXG4gICAgICBpZiAoU0FGRV9GT1JfWE1MICYmIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSA4ICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUuZGF0YSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIFJlbW92ZSBlbGVtZW50IGlmIGFueXRoaW5nIGZvcmJpZHMgaXRzIHByZXNlbmNlICovXG4gICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY3VzdG9tIGVsZW1lbnQgdG8gaGFuZGxlICovXG4gICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB0YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodGFnTmFtZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIEtlZXAgY29udGVudCBleGNlcHQgZm9yIGJhZC1saXN0ZWQgZWxlbWVudHMgKi9cbiAgICAgICAgaWYgKEtFRVBfQ09OVEVOVCAmJiAhRk9SQklEX0NPTlRFTlRTW3RhZ05hbWVdKSB7XG4gICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gZ2V0Q2hpbGROb2RlcyhjdXJyZW50Tm9kZSkgfHwgY3VycmVudE5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICBpZiAoY2hpbGROb2RlcyAmJiBwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRDb3VudCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICB2YXIgY2hpbGRDbG9uZSA9IGNsb25lTm9kZShjaGlsZE5vZGVzW2ldLCB0cnVlKTtcbiAgICAgICAgICAgICAgY2hpbGRDbG9uZS5fX3JlbW92YWxDb3VudCA9IChjdXJyZW50Tm9kZS5fX3JlbW92YWxDb3VudCB8fCAwKSArIDE7XG4gICAgICAgICAgICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkQ2xvbmUsIGdldE5leHRTaWJsaW5nKGN1cnJlbnROb2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvKiBDaGVjayB3aGV0aGVyIGVsZW1lbnQgaGFzIGEgdmFsaWQgbmFtZXNwYWNlICovXG4gICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFfY2hlY2tWYWxpZE5hbWVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IG9sZGVyIGJyb3dzZXJzIGRvbid0IGdldCBmYWxsYmFjay10YWcgbVhTUyAqL1xuICAgICAgaWYgKCh0YWdOYW1lID09PSAnbm9zY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdub2VtYmVkJyB8fCB0YWdOYW1lID09PSAnbm9mcmFtZXMnKSAmJiByZWdFeHBUZXN0KC88XFwvbm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSwgY3VycmVudE5vZGUuaW5uZXJIVE1MKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLyogU2FuaXRpemUgZWxlbWVudCBjb250ZW50IHRvIGJlIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMgJiYgY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgICAgLyogR2V0IHRoZSBlbGVtZW50J3MgdGV4dCBjb250ZW50ICovXG4gICAgICAgIGNvbnRlbnQgPSBjdXJyZW50Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBFUkJfRVhQUiQxLCAnICcpO1xuICAgICAgICBjb250ZW50ID0gc3RyaW5nUmVwbGFjZShjb250ZW50LCBUTVBMSVRfRVhQUiQxLCAnICcpO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUudGV4dENvbnRlbnQgIT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgIF9leGVjdXRlSG9vaygnYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBfaXNWYWxpZEF0dHJpYnV0ZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBsY1RhZyBMb3dlcmNhc2UgdGFnIG5hbWUgb2YgY29udGFpbmluZyBlbGVtZW50LlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gbGNOYW1lIExvd2VyY2FzZSBhdHRyaWJ1dGUgbmFtZS5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHZhbHVlIEF0dHJpYnV0ZSB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSBSZXR1cm5zIHRydWUgaWYgYHZhbHVlYCBpcyB2YWxpZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gICAgdmFyIF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50IHx8IHZhbHVlID09PSAnX19kZXB0aCcgfHwgdmFsdWUgPT09ICdfX3JlbW92YWxDb3VudCcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLyogQWxsb3cgdmFsaWQgZGF0YS0qIGF0dHJpYnV0ZXM6IEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgXCItXCJcbiAgICAgICAgICAoaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZG9tLmh0bWwjZW1iZWRkaW5nLWN1c3RvbS1ub24tdmlzaWJsZS1kYXRhLXdpdGgtdGhlLWRhdGEtKi1hdHRyaWJ1dGVzKVxuICAgICAgICAgIFhNTC1jb21wYXRpYmxlIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9pbmZyYXN0cnVjdHVyZS5odG1sI3htbC1jb21wYXRpYmxlIGFuZCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI2QwZTgwNClcbiAgICAgICAgICBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZTsgaXQncyBhbHdheXMgVVJJIHNhZmUuICovXG4gICAgICBpZiAoQUxMT1dfREFUQV9BVFRSICYmICFGT1JCSURfQVRUUltsY05hbWVdICYmIHJlZ0V4cFRlc3QoREFUQV9BVFRSJDEsIGxjTmFtZSkpIDsgZWxzZSBpZiAoQUxMT1dfQVJJQV9BVFRSICYmIHJlZ0V4cFRlc3QoQVJJQV9BVFRSJDEsIGxjTmFtZSkpIDsgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KGxjVGFnKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaywgbGNOYW1lKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sobGNOYW1lKSkgfHxcbiAgICAgICAgLy8gQWx0ZXJuYXRpdmUsIHNlY29uZCBjb25kaXRpb24gY2hlY2tzIGlmIGl0J3MgYW4gYGlzYC1hdHRyaWJ1dGUsIEFORFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VzIHdoYXRldmVyIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGZvciBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2tcbiAgICAgICAgbGNOYW1lID09PSAnaXMnICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpIDsgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIENoZWNrIHZhbHVlIGlzIHNhZmUuIEZpcnN0LCBpcyBhdHRyIGluZXJ0PyBJZiBzbywgaXMgc2FmZSAqL1xuICAgICAgfSBlbHNlIGlmIChVUklfU0FGRV9BVFRSSUJVVEVTW2xjTmFtZV0pIDsgZWxzZSBpZiAocmVnRXhwVGVzdChJU19BTExPV0VEX1VSSSQxLCBzdHJpbmdSZXBsYWNlKHZhbHVlLCBBVFRSX1dISVRFU1BBQ0UkMSwgJycpKSkgOyBlbHNlIGlmICgobGNOYW1lID09PSAnc3JjJyB8fCBsY05hbWUgPT09ICd4bGluazpocmVmJyB8fCBsY05hbWUgPT09ICdocmVmJykgJiYgbGNUYWcgIT09ICdzY3JpcHQnICYmIHN0cmluZ0luZGV4T2YodmFsdWUsICdkYXRhOicpID09PSAwICYmIERBVEFfVVJJX1RBR1NbbGNUYWddKSA7IGVsc2UgaWYgKEFMTE9XX1VOS05PV05fUFJPVE9DT0xTICYmICFyZWdFeHBUZXN0KElTX1NDUklQVF9PUl9EQVRBJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKSA7IGVsc2UgaWYgKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSA7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX2Jhc2ljQ3VzdG9tRWxlbWVudENoZWNrXG4gICAgICogY2hlY2tzIGlmIGF0IGxlYXN0IG9uZSBkYXNoIGlzIGluY2x1ZGVkIGluIHRhZ05hbWUsIGFuZCBpdCdzIG5vdCB0aGUgZmlyc3QgY2hhclxuICAgICAqIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgY2hlY2tpbmcgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvdmFsaWRhdGUtZWxlbWVudC1uYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbmFtZSBvZiB0aGUgdGFnIG9mIHRoZSBub2RlIHRvIHNhbml0aXplXG4gICAgICovXG4gICAgdmFyIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0ID0gZnVuY3Rpb24gX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkge1xuICAgICAgcmV0dXJuIHRhZ05hbWUgIT09ICdhbm5vdGF0aW9uLXhtbCcgJiYgc3RyaW5nTWF0Y2godGFnTmFtZSwgQ1VTVE9NX0VMRU1FTlQkMSk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIF9zYW5pdGl6ZUF0dHJpYnV0ZXNcbiAgICAgKlxuICAgICAqIEBwcm90ZWN0IGF0dHJpYnV0ZXNcbiAgICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgICAqIEBwcm90ZWN0IHJlbW92ZUF0dHJpYnV0ZVxuICAgICAqIEBwcm90ZWN0IHNldEF0dHJpYnV0ZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7Tm9kZX0gY3VycmVudE5vZGUgdG8gc2FuaXRpemVcbiAgICAgKi9cbiAgICB2YXIgX3Nhbml0aXplQXR0cmlidXRlcyA9IGZ1bmN0aW9uIF9zYW5pdGl6ZUF0dHJpYnV0ZXMoY3VycmVudE5vZGUpIHtcbiAgICAgIHZhciBhdHRyO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgdmFyIGxjTmFtZTtcbiAgICAgIHZhciBsO1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMnLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IGN1cnJlbnROb2RlLmF0dHJpYnV0ZXM7XG5cbiAgICAgIC8qIENoZWNrIGlmIHdlIGhhdmUgYXR0cmlidXRlczsgaWYgbm90IHdlIG1pZ2h0IGhhdmUgYSB0ZXh0IG5vZGUgKi9cbiAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgaG9va0V2ZW50ID0ge1xuICAgICAgICBhdHRyTmFtZTogJycsXG4gICAgICAgIGF0dHJWYWx1ZTogJycsXG4gICAgICAgIGtlZXBBdHRyOiB0cnVlLFxuICAgICAgICBhbGxvd2VkQXR0cmlidXRlczogQUxMT1dFRF9BVFRSXG4gICAgICB9O1xuICAgICAgbCA9IGF0dHJpYnV0ZXMubGVuZ3RoO1xuXG4gICAgICAvKiBHbyBiYWNrd2FyZHMgb3ZlciBhbGwgYXR0cmlidXRlczsgc2FmZWx5IHJlbW92ZSBiYWQgb25lcyAqL1xuICAgICAgd2hpbGUgKGwtLSkge1xuICAgICAgICBhdHRyID0gYXR0cmlidXRlc1tsXTtcbiAgICAgICAgdmFyIF9hdHRyID0gYXR0cixcbiAgICAgICAgICBuYW1lID0gX2F0dHIubmFtZSxcbiAgICAgICAgICBuYW1lc3BhY2VVUkkgPSBfYXR0ci5uYW1lc3BhY2VVUkk7XG4gICAgICAgIHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHIudmFsdWUgOiBzdHJpbmdUcmltKGF0dHIudmFsdWUpO1xuICAgICAgICBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcblxuICAgICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG4gICAgICAgIGhvb2tFdmVudC5hdHRyTmFtZSA9IGxjTmFtZTtcbiAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICBob29rRXZlbnQuZm9yY2VLZWVwQXR0ciA9IHVuZGVmaW5lZDsgLy8gQWxsb3dzIGRldmVsb3BlcnMgdG8gc2VlIHRoaXMgaXMgYSBwcm9wZXJ0eSB0aGV5IGNhbiBzZXRcbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVBdHRyaWJ1dGUnLCBjdXJyZW50Tm9kZSwgaG9va0V2ZW50KTtcbiAgICAgICAgdmFsdWUgPSBob29rRXZlbnQuYXR0clZhbHVlO1xuICAgICAgICAvKiBEaWQgdGhlIGhvb2tzIGFwcHJvdmUgb2YgdGhlIGF0dHJpYnV0ZT8gKi9cbiAgICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBSZW1vdmUgYXR0cmlidXRlICovXG4gICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuICAgICAgICBpZiAoIWhvb2tFdmVudC5rZWVwQXR0cikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogV29yayBhcm91bmQgYSBzZWN1cml0eSBpc3N1ZSBpbiBqUXVlcnkgMy4wICovXG4gICAgICAgIGlmICghQUxMT1dfU0VMRl9DTE9TRV9JTl9BVFRSICYmIHJlZ0V4cFRlc3QoL1xcLz4vaSwgdmFsdWUpKSB7XG4gICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBXb3JrIGFyb3VuZCBhIHNlY3VyaXR5IGlzc3VlIHdpdGggY29tbWVudHMgaW5zaWRlIGF0dHJpYnV0ZXMgKi9cbiAgICAgICAgaWYgKFNBRkVfRk9SX1hNTCAmJiByZWdFeHBUZXN0KC8oKC0tIT98XSk+KXw8XFwvKHN0eWxlfHRpdGxlKS9pLCB2YWx1ZSkpIHtcbiAgICAgICAgICBfcmVtb3ZlQXR0cmlidXRlKG5hbWUsIGN1cnJlbnROb2RlKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFNhbml0aXplIGF0dHJpYnV0ZSBjb250ZW50IHRvIGJlIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgRVJCX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgICB2YWx1ZSA9IHN0cmluZ1JlcGxhY2UodmFsdWUsIFRNUExJVF9FWFBSJDEsICcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBJcyBgdmFsdWVgIHZhbGlkIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi9cbiAgICAgICAgdmFyIGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuICAgICAgICBpZiAoIV9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRnVsbCBET00gQ2xvYmJlcmluZyBwcm90ZWN0aW9uIHZpYSBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICAgICAgICAgKiBQcmVmaXggaWQgYW5kIG5hbWUgYXR0cmlidXRlcyB3aXRoIGB1c2VyLWNvbnRlbnQtYFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKFNBTklUSVpFX05BTUVEX1BST1BTICYmIChsY05hbWUgPT09ICdpZCcgfHwgbGNOYW1lID09PSAnbmFtZScpKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgd2l0aCB0aGlzIHZhbHVlXG4gICAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAvLyBQcmVmaXggdGhlIHZhbHVlIGFuZCBsYXRlciByZS1jcmVhdGUgdGhlIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW5pdGl6ZWQgdmFsdWVcbiAgICAgICAgICB2YWx1ZSA9IFNBTklUSVpFX05BTUVEX1BST1BTX1BSRUZJWCArIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogSGFuZGxlIGF0dHJpYnV0ZXMgdGhhdCByZXF1aXJlIFRydXN0ZWQgVHlwZXMgKi9cbiAgICAgICAgaWYgKHRydXN0ZWRUeXBlc1BvbGljeSAmJiBfdHlwZW9mKHRydXN0ZWRUeXBlcykgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0cnVzdGVkVHlwZXMuZ2V0QXR0cmlidXRlVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlmIChuYW1lc3BhY2VVUkkpIDsgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRydXN0ZWRUeXBlcy5nZXRBdHRyaWJ1dGVUeXBlKGxjVGFnLCBsY05hbWUpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ1RydXN0ZWRIVE1MJzpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnVHJ1c3RlZFNjcmlwdFVSTCc6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0cnVzdGVkVHlwZXNQb2xpY3kuY3JlYXRlU2NyaXB0VVJMKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKiBIYW5kbGUgaW52YWxpZCBkYXRhLSogYXR0cmlidXRlIHNldCBieSB0cnktY2F0Y2hpbmcgaXQgKi9cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gc2V0QXR0cmlidXRlKCkgZm9yIGJyb3dzZXItdW5yZWNvZ25pemVkIG5hbWVzcGFjZXMgZS5nLiBcIngtc2NoZW1hXCIuICovXG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX2lzQ2xvYmJlcmVkKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlQb3AoRE9NUHVyaWZ5LnJlbW92ZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplQXR0cmlidXRlcycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplU2hhZG93RE9NXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudCB0byBpdGVyYXRlIG92ZXIgcmVjdXJzaXZlbHlcbiAgICAgKi9cbiAgICB2YXIgX3Nhbml0aXplU2hhZG93RE9NID0gZnVuY3Rpb24gX3Nhbml0aXplU2hhZG93RE9NKGZyYWdtZW50KSB7XG4gICAgICB2YXIgc2hhZG93Tm9kZTtcbiAgICAgIHZhciBzaGFkb3dJdGVyYXRvciA9IF9jcmVhdGVJdGVyYXRvcihmcmFnbWVudCk7XG5cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVTaGFkb3dET00nLCBmcmFnbWVudCwgbnVsbCk7XG4gICAgICB3aGlsZSAoc2hhZG93Tm9kZSA9IHNoYWRvd0l0ZXJhdG9yLm5leHROb2RlKCkpIHtcbiAgICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZVNoYWRvd05vZGUnLCBzaGFkb3dOb2RlLCBudWxsKTtcblxuICAgICAgICAvKiBTYW5pdGl6ZSB0YWdzIGFuZCBlbGVtZW50cyAqL1xuICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoc2hhZG93Tm9kZSk7XG5cbiAgICAgICAgLyogU2V0IHRoZSBuZXN0aW5nIGRlcHRoIG9mIGFuIGVsZW1lbnQgKi9cbiAgICAgICAgaWYgKHNoYWRvd05vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLl9fZGVwdGgpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgIFdlIHdhbnQgdGhlIGRlcHRoIG9mIHRoZSBub2RlIGluIHRoZSBvcmlnaW5hbCB0cmVlLCB3aGljaCBjYW5cbiAgICAgICAgICAgICAgY2hhbmdlIHdoZW4gaXQncyByZW1vdmVkIGZyb20gaXRzIHBhcmVudC5cbiAgICAgICAgICAgICovXG4gICAgICAgICAgICBzaGFkb3dOb2RlLl9fZGVwdGggPSAoc2hhZG93Tm9kZS5fX3JlbW92YWxDb3VudCB8fCAwKSArIHBhcmVudE5vZGUuX19kZXB0aCArIDE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNoYWRvd05vZGUuX19kZXB0aCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLypcbiAgICAgICAgICogUmVtb3ZlIGFuIGVsZW1lbnQgaWYgbmVzdGVkIHRvbyBkZWVwbHkgdG8gYXZvaWQgbVhTU1xuICAgICAgICAgKiBvciBpZiB0aGUgX19kZXB0aCBtaWdodCBoYXZlIGJlZW4gdGFtcGVyZWQgd2l0aFxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHNoYWRvd05vZGUuX19kZXB0aCA+PSBNQVhfTkVTVElOR19ERVBUSCB8fCBudW1iZXJJc05hTihzaGFkb3dOb2RlLl9fZGVwdGgpKSB7XG4gICAgICAgICAgX2ZvcmNlUmVtb3ZlKHNoYWRvd05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLyogRGVlcCBzaGFkb3cgRE9NIGRldGVjdGVkICovXG4gICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgc2hhZG93Tm9kZS5jb250ZW50Ll9fZGVwdGggPSBzaGFkb3dOb2RlLl9fZGVwdGg7XG4gICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBDaGVjayBhdHRyaWJ1dGVzLCBzYW5pdGl6ZSBpZiBuZWNlc3NhcnkgKi9cbiAgICAgICAgX3Nhbml0aXplQXR0cmlidXRlcyhzaGFkb3dOb2RlKTtcbiAgICAgIH1cblxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplU2hhZG93RE9NJywgZnJhZ21lbnQsIG51bGwpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTYW5pdGl6ZVxuICAgICAqIFB1YmxpYyBtZXRob2QgcHJvdmlkaW5nIGNvcmUgc2FuaXRhdGlvbiBmdW5jdGlvbmFsaXR5XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xOb2RlfSBkaXJ0eSBzdHJpbmcgb3IgRE9NIG5vZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICAgIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSkge1xuICAgICAgdmFyIGNmZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgYm9keTtcbiAgICAgIHZhciBpbXBvcnRlZE5vZGU7XG4gICAgICB2YXIgY3VycmVudE5vZGU7XG4gICAgICB2YXIgb2xkTm9kZTtcbiAgICAgIHZhciByZXR1cm5Ob2RlO1xuICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBzdHJpbmcgdG8gc2FuaXRpemUuXG4gICAgICAgIERPIE5PVCByZXR1cm4gZWFybHksIGFzIHRoaXMgd2lsbCByZXR1cm4gdGhlIHdyb25nIHR5cGUgaWZcbiAgICAgICAgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBhIERPTSBvYmplY3QgcmF0aGVyIHRoYW4gYSBzdHJpbmcgKi9cbiAgICAgIElTX0VNUFRZX0lOUFVUID0gIWRpcnR5O1xuICAgICAgaWYgKElTX0VNUFRZX0lOUFVUKSB7XG4gICAgICAgIGRpcnR5ID0gJzwhLS0+JztcbiAgICAgIH1cblxuICAgICAgLyogU3RyaW5naWZ5LCBpbiBjYXNlIGRpcnR5IGlzIGFuIG9iamVjdCAqL1xuICAgICAgaWYgKHR5cGVvZiBkaXJ0eSAhPT0gJ3N0cmluZycgJiYgIV9pc05vZGUoZGlydHkpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGlydHkudG9TdHJpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBkaXJ0eSA9IGRpcnR5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgnZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ3RvU3RyaW5nIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogQ2hlY2sgd2UgY2FuIHJ1bi4gT3RoZXJ3aXNlIGZhbGwgYmFjayBvciBpZ25vcmUgKi9cbiAgICAgIGlmICghRE9NUHVyaWZ5LmlzU3VwcG9ydGVkKSB7XG4gICAgICAgIGlmIChfdHlwZW9mKHdpbmRvdy50b1N0YXRpY0hUTUwpID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygd2luZG93LnRvU3RhdGljSFRNTCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LnRvU3RhdGljSFRNTChkaXJ0eSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfaXNOb2RlKGRpcnR5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy50b1N0YXRpY0hUTUwoZGlydHkub3V0ZXJIVE1MKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgfVxuXG4gICAgICAvKiBBc3NpZ24gY29uZmlnIHZhcnMgKi9cbiAgICAgIGlmICghU0VUX0NPTkZJRykge1xuICAgICAgICBfcGFyc2VDb25maWcoY2ZnKTtcbiAgICAgIH1cblxuICAgICAgLyogQ2xlYW4gdXAgcmVtb3ZlZCBlbGVtZW50cyAqL1xuICAgICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcblxuICAgICAgLyogQ2hlY2sgaWYgZGlydHkgaXMgY29ycmVjdGx5IHR5cGVkIGZvciBJTl9QTEFDRSAqL1xuICAgICAgaWYgKHR5cGVvZiBkaXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgSU5fUExBQ0UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgICAvKiBEbyBzb21lIGVhcmx5IHByZS1zYW5pdGl6YXRpb24gdG8gYXZvaWQgdW5zYWZlIHJvb3Qgbm9kZXMgKi9cbiAgICAgICAgaWYgKGRpcnR5Lm5vZGVOYW1lKSB7XG4gICAgICAgICAgdmFyIHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhkaXJ0eS5ub2RlTmFtZSk7XG4gICAgICAgICAgaWYgKCFBTExPV0VEX1RBR1NbdGFnTmFtZV0gfHwgRk9SQklEX1RBR1NbdGFnTmFtZV0pIHtcbiAgICAgICAgICAgIHRocm93IHR5cGVFcnJvckNyZWF0ZSgncm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkaXJ0eSBpbnN0YW5jZW9mIE5vZGUpIHtcbiAgICAgICAgLyogSWYgZGlydHkgaXMgYSBET00gZWxlbWVudCwgYXBwZW5kIHRvIGFuIGVtcHR5IGRvY3VtZW50IHRvIGF2b2lkXG4gICAgICAgICAgIGVsZW1lbnRzIGJlaW5nIHN0cmlwcGVkIGJ5IHRoZSBwYXJzZXIgKi9cbiAgICAgICAgYm9keSA9IF9pbml0RG9jdW1lbnQoJzwhLS0tLT4nKTtcbiAgICAgICAgaW1wb3J0ZWROb2RlID0gYm9keS5vd25lckRvY3VtZW50LmltcG9ydE5vZGUoZGlydHksIHRydWUpO1xuICAgICAgICBpZiAoaW1wb3J0ZWROb2RlLm5vZGVUeXBlID09PSAxICYmIGltcG9ydGVkTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgLyogTm9kZSBpcyBhbHJlYWR5IGEgYm9keSwgdXNlIGFzIGlzICovXG4gICAgICAgICAgYm9keSA9IGltcG9ydGVkTm9kZTtcbiAgICAgICAgfSBlbHNlIGlmIChpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoaW1wb3J0ZWROb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogRXhpdCBkaXJlY3RseSBpZiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8gKi9cbiAgICAgICAgaWYgKCFSRVRVUk5fRE9NICYmICFTQUZFX0ZPUl9URU1QTEFURVMgJiYgIVdIT0xFX0RPQ1VNRU5UICYmXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgICBkaXJ0eS5pbmRleE9mKCc8JykgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBkb2N1bWVudCB0byB3b3JrIG9uICovXG4gICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KGRpcnR5KTtcblxuICAgICAgICAvKiBDaGVjayB3ZSBoYXZlIGEgRE9NIG5vZGUgZnJvbSB0aGUgZGF0YSAqL1xuICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICByZXR1cm4gUkVUVVJOX0RPTSA/IG51bGwgOiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gZW1wdHlIVE1MIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogUmVtb3ZlIGZpcnN0IGVsZW1lbnQgbm9kZSAob3VycykgaWYgRk9SQ0VfQk9EWSBpcyBzZXQgKi9cbiAgICAgIGlmIChib2R5ICYmIEZPUkNFX0JPRFkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGJvZHkuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIC8qIEdldCBub2RlIGl0ZXJhdG9yICovXG4gICAgICB2YXIgbm9kZUl0ZXJhdG9yID0gX2NyZWF0ZUl0ZXJhdG9yKElOX1BMQUNFID8gZGlydHkgOiBib2R5KTtcblxuICAgICAgLyogTm93IHN0YXJ0IGl0ZXJhdGluZyBvdmVyIHRoZSBjcmVhdGVkIGRvY3VtZW50ICovXG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAvKiBGaXggSUUncyBzdHJhbmdlIGJlaGF2aW9yIHdpdGggbWFuaXB1bGF0ZWQgdGV4dE5vZGVzICM4OSAqL1xuICAgICAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMgJiYgY3VycmVudE5vZGUgPT09IG9sZE5vZGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG4gICAgICAgIGlmIChfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIC8qIFNldCB0aGUgbmVzdGluZyBkZXB0aCBvZiBhbiBlbGVtZW50ICovXG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIGlmIChwYXJlbnROb2RlICYmIHBhcmVudE5vZGUuX19kZXB0aCkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgV2Ugd2FudCB0aGUgZGVwdGggb2YgdGhlIG5vZGUgaW4gdGhlIG9yaWdpbmFsIHRyZWUsIHdoaWNoIGNhblxuICAgICAgICAgICAgICBjaGFuZ2Ugd2hlbiBpdCdzIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50LlxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGN1cnJlbnROb2RlLl9fZGVwdGggPSAoY3VycmVudE5vZGUuX19yZW1vdmFsQ291bnQgfHwgMCkgKyBwYXJlbnROb2RlLl9fZGVwdGggKyAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5fX2RlcHRoID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgKiBSZW1vdmUgYW4gZWxlbWVudCBpZiBuZXN0ZWQgdG9vIGRlZXBseSB0byBhdm9pZCBtWFNTXG4gICAgICAgICAqIG9yIGlmIHRoZSBfX2RlcHRoIG1pZ2h0IGhhdmUgYmVlbiB0YW1wZXJlZCB3aXRoXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuX19kZXB0aCA+PSBNQVhfTkVTVElOR19ERVBUSCB8fCBudW1iZXJJc05hTihjdXJyZW50Tm9kZS5fX2RlcHRoKSkge1xuICAgICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBTaGFkb3cgRE9NIGRldGVjdGVkLCBzYW5pdGl6ZSBpdCAqL1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICBjdXJyZW50Tm9kZS5jb250ZW50Ll9fZGVwdGggPSBjdXJyZW50Tm9kZS5fX2RlcHRoO1xuICAgICAgICAgIF9zYW5pdGl6ZVNoYWRvd0RPTShjdXJyZW50Tm9kZS5jb250ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIENoZWNrIGF0dHJpYnV0ZXMsIHNhbml0aXplIGlmIG5lY2Vzc2FyeSAqL1xuICAgICAgICBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKTtcbiAgICAgICAgb2xkTm9kZSA9IGN1cnJlbnROb2RlO1xuICAgICAgfVxuICAgICAgb2xkTm9kZSA9IG51bGw7XG5cbiAgICAgIC8qIElmIHdlIHNhbml0aXplZCBgZGlydHlgIGluLXBsYWNlLCByZXR1cm4gaXQuICovXG4gICAgICBpZiAoSU5fUExBQ0UpIHtcbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgfVxuXG4gICAgICAvKiBSZXR1cm4gc2FuaXRpemVkIHN0cmluZyBvciBET00gKi9cbiAgICAgIGlmIChSRVRVUk5fRE9NKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgcmV0dXJuTm9kZSA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQuY2FsbChib2R5Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgIHdoaWxlIChib2R5LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICAgIHJldHVybk5vZGUuYXBwZW5kQ2hpbGQoYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuTm9kZSA9IGJvZHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEFMTE9XRURfQVRUUi5zaGFkb3dyb290IHx8IEFMTE9XRURfQVRUUi5zaGFkb3dyb290bW9kKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIEFkb3B0Tm9kZSgpIGlzIG5vdCB1c2VkIGJlY2F1c2UgaW50ZXJuYWwgc3RhdGUgaXMgbm90IHJlc2V0XG4gICAgICAgICAgICAoZS5nLiB0aGUgcGFzdCBuYW1lcyBtYXAgb2YgYSBIVE1MRm9ybUVsZW1lbnQpLCB0aGlzIGlzIHNhZmVcbiAgICAgICAgICAgIGluIHRoZW9yeSBidXQgd2Ugd291bGQgcmF0aGVyIG5vdCByaXNrIGFub3RoZXIgYXR0YWNrIHZlY3Rvci5cbiAgICAgICAgICAgIFRoZSBzdGF0ZSB0aGF0IGlzIGNsb25lZCBieSBpbXBvcnROb2RlKCkgaXMgZXhwbGljaXRseSBkZWZpbmVkXG4gICAgICAgICAgICBieSB0aGUgc3BlY3MuXG4gICAgICAgICAgKi9cbiAgICAgICAgICByZXR1cm5Ob2RlID0gaW1wb3J0Tm9kZS5jYWxsKG9yaWdpbmFsRG9jdW1lbnQsIHJldHVybk5vZGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgfVxuICAgICAgdmFyIHNlcmlhbGl6ZWRIVE1MID0gV0hPTEVfRE9DVU1FTlQgPyBib2R5Lm91dGVySFRNTCA6IGJvZHkuaW5uZXJIVE1MO1xuXG4gICAgICAvKiBTZXJpYWxpemUgZG9jdHlwZSBpZiBhbGxvd2VkICovXG4gICAgICBpZiAoV0hPTEVfRE9DVU1FTlQgJiYgQUxMT1dFRF9UQUdTWychZG9jdHlwZSddICYmIGJvZHkub3duZXJEb2N1bWVudCAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZSAmJiBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lICYmIHJlZ0V4cFRlc3QoRE9DVFlQRV9OQU1FLCBib2R5Lm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSkge1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9ICc8IURPQ1RZUEUgJyArIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgKyAnPlxcbicgKyBzZXJpYWxpemVkSFRNTDtcbiAgICAgIH1cblxuICAgICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cbiAgICAgIGlmIChTQUZFX0ZPUl9URU1QTEFURVMpIHtcbiAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBNVVNUQUNIRV9FWFBSJDEsICcgJyk7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgRVJCX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgc2VyaWFsaXplZEhUTUwgPSBzdHJpbmdSZXBsYWNlKHNlcmlhbGl6ZWRIVE1MLCBUTVBMSVRfRVhQUiQxLCAnICcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydXN0ZWRUeXBlc1BvbGljeSAmJiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoc2VyaWFsaXplZEhUTUwpIDogc2VyaWFsaXplZEhUTUw7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIG9uY2VcbiAgICAgKiBzZXRDb25maWdcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjZmcgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZykge1xuICAgICAgX3BhcnNlQ29uZmlnKGNmZyk7XG4gICAgICBTRVRfQ09ORklHID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBjbGVhckNvbmZpZ1xuICAgICAqXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LmNsZWFyQ29uZmlnID0gZnVuY3Rpb24gKCkge1xuICAgICAgQ09ORklHID0gbnVsbDtcbiAgICAgIFNFVF9DT05GSUcgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byBjaGVjayBpZiBhbiBhdHRyaWJ1dGUgdmFsdWUgaXMgdmFsaWQuXG4gICAgICogVXNlcyBsYXN0IHNldCBjb25maWcsIGlmIGFueS4gT3RoZXJ3aXNlLCB1c2VzIGNvbmZpZyBkZWZhdWx0cy5cbiAgICAgKiBpc1ZhbGlkQXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRhZyBUYWcgbmFtZSBvZiBjb250YWluaW5nIGVsZW1lbnQuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBhdHRyIEF0dHJpYnV0ZSBuYW1lLlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmFsdWUgQXR0cmlidXRlIHZhbHVlLlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIHZhbGlkLiBPdGhlcndpc2UsIHJldHVybnMgZmFsc2UuXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LmlzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAodGFnLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgLyogSW5pdGlhbGl6ZSBzaGFyZWQgY29uZmlnIHZhcnMgaWYgbmVjZXNzYXJ5LiAqL1xuICAgICAgaWYgKCFDT05GSUcpIHtcbiAgICAgICAgX3BhcnNlQ29uZmlnKHt9KTtcbiAgICAgIH1cbiAgICAgIHZhciBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKHRhZyk7XG4gICAgICB2YXIgbGNOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoYXR0cik7XG4gICAgICByZXR1cm4gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGRIb29rXG4gICAgICogUHVibGljIG1ldGhvZCB0byBhZGQgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgKi9cbiAgICBET01QdXJpZnkuYWRkSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50LCBob29rRnVuY3Rpb24pIHtcbiAgICAgIGlmICh0eXBlb2YgaG9va0Z1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhIERPTVB1cmlmeSBob29rIGF0IGEgZ2l2ZW4gZW50cnlQb2ludFxuICAgICAqIChwb3BzIGl0IGZyb20gdGhlIHN0YWNrIG9mIGhvb2tzIGlmIG1vcmUgYXJlIHByZXNlbnQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259IHJlbW92ZWQocG9wcGVkKSBob29rXG4gICAgICovXG4gICAgRE9NUHVyaWZ5LnJlbW92ZUhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgIHJldHVybiBhcnJheVBvcChob29rc1tlbnRyeVBvaW50XSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tzXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgYWxsIERPTVB1cmlmeSBob29rcyBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgICAqL1xuICAgIERPTVB1cmlmeS5yZW1vdmVIb29rcyA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgaG9va3NbZW50cnlQb2ludF0gPSBbXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlQWxsSG9va3NcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIHJlbW92ZSBhbGwgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKi9cbiAgICBET01QdXJpZnkucmVtb3ZlQWxsSG9va3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBob29rcyA9IHt9O1xuICAgIH07XG4gICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgfVxuICB2YXIgcHVyaWZ5ID0gY3JlYXRlRE9NUHVyaWZ5KCk7XG5cbiAgcmV0dXJuIHB1cmlmeTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVyaWZ5LmpzLm1hcFxuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFIgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgPyBSZWZsZWN0IDogbnVsbFxudmFyIFJlZmxlY3RBcHBseSA9IFIgJiYgdHlwZW9mIFIuYXBwbHkgPT09ICdmdW5jdGlvbidcbiAgPyBSLmFwcGx5XG4gIDogZnVuY3Rpb24gUmVmbGVjdEFwcGx5KHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpIHtcbiAgICByZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwodGFyZ2V0LCByZWNlaXZlciwgYXJncyk7XG4gIH1cblxudmFyIFJlZmxlY3RPd25LZXlzXG5pZiAoUiAmJiB0eXBlb2YgUi5vd25LZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gUi5vd25LZXlzXG59IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCkpO1xuICB9O1xufSBlbHNlIHtcbiAgUmVmbGVjdE93bktleXMgPSBmdW5jdGlvbiBSZWZsZWN0T3duS2V5cyh0YXJnZXQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUHJvY2Vzc0VtaXRXYXJuaW5nKHdhcm5pbmcpIHtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4od2FybmluZyk7XG59XG5cbnZhciBOdW1iZXJJc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBOdW1iZXJJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIEV2ZW50RW1pdHRlci5pbml0LmNhbGwodGhpcyk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcbm1vZHVsZS5leHBvcnRzLm9uY2UgPSBvbmNlO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50c0NvdW50ID0gMDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxudmFyIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuZnVuY3Rpb24gY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcikge1xuICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBsaXN0ZW5lcik7XG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEV2ZW50RW1pdHRlciwgJ2RlZmF1bHRNYXhMaXN0ZW5lcnMnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24oYXJnKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInIHx8IGFyZyA8IDAgfHwgTnVtYmVySXNOYU4oYXJnKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgYXJnICsgJy4nKTtcbiAgICB9XG4gICAgZGVmYXVsdE1heExpc3RlbmVycyA9IGFyZztcbiAgfVxufSk7XG5cbkV2ZW50RW1pdHRlci5pbml0ID0gZnVuY3Rpb24oKSB7XG5cbiAgaWYgKHRoaXMuX2V2ZW50cyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLl9ldmVudHMgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSB7XG4gICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gIH1cblxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSB0aGlzLl9tYXhMaXN0ZW5lcnMgfHwgdW5kZWZpbmVkO1xufTtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gc2V0TWF4TGlzdGVuZXJzKG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJyB8fCBuIDwgMCB8fCBOdW1iZXJJc05hTihuKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJuXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIG4gKyAnLicpO1xuICB9XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuZnVuY3Rpb24gX2dldE1heExpc3RlbmVycyh0aGF0KSB7XG4gIGlmICh0aGF0Ll9tYXhMaXN0ZW5lcnMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnM7XG4gIHJldHVybiB0aGF0Ll9tYXhMaXN0ZW5lcnM7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24gZ2V0TWF4TGlzdGVuZXJzKCkge1xuICByZXR1cm4gX2dldE1heExpc3RlbmVycyh0aGlzKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQodHlwZSkge1xuICB2YXIgYXJncyA9IFtdO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gIHZhciBkb0Vycm9yID0gKHR5cGUgPT09ICdlcnJvcicpO1xuXG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZClcbiAgICBkb0Vycm9yID0gKGRvRXJyb3IgJiYgZXZlbnRzLmVycm9yID09PSB1bmRlZmluZWQpO1xuICBlbHNlIGlmICghZG9FcnJvcilcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgLy8gSWYgdGhlcmUgaXMgbm8gJ2Vycm9yJyBldmVudCBsaXN0ZW5lciB0aGVuIHRocm93LlxuICBpZiAoZG9FcnJvcikge1xuICAgIHZhciBlcjtcbiAgICBpZiAoYXJncy5sZW5ndGggPiAwKVxuICAgICAgZXIgPSBhcmdzWzBdO1xuICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgY29tbWVudHMgb24gdGhlIGB0aHJvd2AgbGluZXMgYXJlIGludGVudGlvbmFsLCB0aGV5IHNob3dcbiAgICAgIC8vIHVwIGluIE5vZGUncyBvdXRwdXQgaWYgdGhpcyByZXN1bHRzIGluIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uXG4gICAgICB0aHJvdyBlcjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgICB9XG4gICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuaGFuZGxlZCBlcnJvci4nICsgKGVyID8gJyAoJyArIGVyLm1lc3NhZ2UgKyAnKScgOiAnJykpO1xuICAgIGVyci5jb250ZXh0ID0gZXI7XG4gICAgdGhyb3cgZXJyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICB9XG5cbiAgdmFyIGhhbmRsZXIgPSBldmVudHNbdHlwZV07XG5cbiAgaWYgKGhhbmRsZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgUmVmbGVjdEFwcGx5KGhhbmRsZXIsIHRoaXMsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBsZW4gPSBoYW5kbGVyLmxlbmd0aDtcbiAgICB2YXIgbGlzdGVuZXJzID0gYXJyYXlDbG9uZShoYW5kbGVyLCBsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICBSZWZsZWN0QXBwbHkobGlzdGVuZXJzW2ldLCB0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gX2FkZExpc3RlbmVyKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIsIHByZXBlbmQpIHtcbiAgdmFyIG07XG4gIHZhciBldmVudHM7XG4gIHZhciBleGlzdGluZztcblxuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRhcmdldC5fZXZlbnRzQ291bnQgPSAwO1xuICB9IGVsc2Uge1xuICAgIC8vIFRvIGF2b2lkIHJlY3Vyc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHR5cGUgPT09IFwibmV3TGlzdGVuZXJcIiEgQmVmb3JlXG4gICAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICAgIGlmIChldmVudHMubmV3TGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGFyZ2V0LmVtaXQoJ25ld0xpc3RlbmVyJywgdHlwZSxcbiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyID8gbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgICAgIC8vIFJlLWFzc2lnbiBgZXZlbnRzYCBiZWNhdXNlIGEgbmV3TGlzdGVuZXIgaGFuZGxlciBjb3VsZCBoYXZlIGNhdXNlZCB0aGVcbiAgICAgIC8vIHRoaXMuX2V2ZW50cyB0byBiZSBhc3NpZ25lZCB0byBhIG5ldyBvYmplY3RcbiAgICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICAgIH1cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXTtcbiAgfVxuXG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPSBsaXN0ZW5lcjtcbiAgICArK3RhcmdldC5fZXZlbnRzQ291bnQ7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gQWRkaW5nIHRoZSBzZWNvbmQgZWxlbWVudCwgbmVlZCB0byBjaGFuZ2UgdG8gYXJyYXkuXG4gICAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9XG4gICAgICAgIHByZXBlbmQgPyBbbGlzdGVuZXIsIGV4aXN0aW5nXSA6IFtleGlzdGluZywgbGlzdGVuZXJdO1xuICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIH0gZWxzZSBpZiAocHJlcGVuZCkge1xuICAgICAgZXhpc3RpbmcudW5zaGlmdChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nLnB1c2gobGlzdGVuZXIpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBsaXN0ZW5lciBsZWFrXG4gICAgbSA9IF9nZXRNYXhMaXN0ZW5lcnModGFyZ2V0KTtcbiAgICBpZiAobSA+IDAgJiYgZXhpc3RpbmcubGVuZ3RoID4gbSAmJiAhZXhpc3Rpbmcud2FybmVkKSB7XG4gICAgICBleGlzdGluZy53YXJuZWQgPSB0cnVlO1xuICAgICAgLy8gTm8gZXJyb3IgY29kZSBmb3IgdGhpcyBzaW5jZSBpdCBpcyBhIFdhcm5pbmdcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgdmFyIHcgPSBuZXcgRXJyb3IoJ1Bvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmxlbmd0aCArICcgJyArIFN0cmluZyh0eXBlKSArICcgbGlzdGVuZXJzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jcmVhc2UgbGltaXQnKTtcbiAgICAgIHcubmFtZSA9ICdNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmcnO1xuICAgICAgdy5lbWl0dGVyID0gdGFyZ2V0O1xuICAgICAgdy50eXBlID0gdHlwZTtcbiAgICAgIHcuY291bnQgPSBleGlzdGluZy5sZW5ndGg7XG4gICAgICBQcm9jZXNzRW1pdFdhcm5pbmcodyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCB0cnVlKTtcbiAgICB9O1xuXG5mdW5jdGlvbiBvbmNlV3JhcHBlcigpIHtcbiAgaWYgKCF0aGlzLmZpcmVkKSB7XG4gICAgdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLCB0aGlzLndyYXBGbik7XG4gICAgdGhpcy5maXJlZCA9IHRydWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTtcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCwgYXJndW1lbnRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfb25jZVdyYXAodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgc3RhdGUgPSB7IGZpcmVkOiBmYWxzZSwgd3JhcEZuOiB1bmRlZmluZWQsIHRhcmdldDogdGFyZ2V0LCB0eXBlOiB0eXBlLCBsaXN0ZW5lcjogbGlzdGVuZXIgfTtcbiAgdmFyIHdyYXBwZWQgPSBvbmNlV3JhcHBlci5iaW5kKHN0YXRlKTtcbiAgd3JhcHBlZC5saXN0ZW5lciA9IGxpc3RlbmVyO1xuICBzdGF0ZS53cmFwRm4gPSB3cmFwcGVkO1xuICByZXR1cm4gd3JhcHBlZDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbmNlID0gZnVuY3Rpb24gb25jZSh0eXBlLCBsaXN0ZW5lcikge1xuICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgdGhpcy5vbih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRPbmNlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgICAgdGhpcy5wcmVwZW5kTGlzdGVuZXIodHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4vLyBFbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWYgYW5kIG9ubHkgaWYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHZhciBsaXN0LCBldmVudHMsIHBvc2l0aW9uLCBpLCBvcmlnaW5hbExpc3RlbmVyO1xuXG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgbGlzdCA9IGV2ZW50c1t0eXBlXTtcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBpZiAobGlzdCA9PT0gbGlzdGVuZXIgfHwgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3QubGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsaXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHBvc2l0aW9uID0gLTE7XG5cbiAgICAgICAgZm9yIChpID0gbGlzdC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChsaXN0W2ldID09PSBsaXN0ZW5lciB8fCBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RbaV0ubGlzdGVuZXI7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IGk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAgIGlmIChwb3NpdGlvbiA9PT0gMClcbiAgICAgICAgICBsaXN0LnNoaWZ0KCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNwbGljZU9uZShsaXN0LCBwb3NpdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpXG4gICAgICAgICAgZXZlbnRzW3R5cGVdID0gbGlzdFswXTtcblxuICAgICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIG9yaWdpbmFsTGlzdGVuZXIgfHwgbGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID1cbiAgICBmdW5jdGlvbiByZW1vdmVBbGxMaXN0ZW5lcnModHlwZSkge1xuICAgICAgdmFyIGxpc3RlbmVycywgZXZlbnRzLCBpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gICAgICBpZiAoZXZlbnRzLnJlbW92ZUxpc3RlbmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudHNbdHlwZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICAvLyBlbWl0IHJlbW92ZUxpc3RlbmVyIGZvciBhbGwgbGlzdGVuZXJzIG9uIGFsbCBldmVudHNcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZXZlbnRzKTtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgIGlmIChrZXkgPT09ICdyZW1vdmVMaXN0ZW5lcicpIGNvbnRpbnVlO1xuICAgICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoJ3JlbW92ZUxpc3RlbmVyJyk7XG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGxpc3RlbmVycyA9IGV2ZW50c1t0eXBlXTtcblxuICAgICAgaWYgKHR5cGVvZiBsaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBMSUZPIG9yZGVyXG4gICAgICAgIGZvciAoaSA9IGxpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG5mdW5jdGlvbiBfbGlzdGVuZXJzKHRhcmdldCwgdHlwZSwgdW53cmFwKSB7XG4gIHZhciBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuICBpZiAoZXZsaXN0ZW5lciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpXG4gICAgcmV0dXJuIHVud3JhcCA/IFtldmxpc3RlbmVyLmxpc3RlbmVyIHx8IGV2bGlzdGVuZXJdIDogW2V2bGlzdGVuZXJdO1xuXG4gIHJldHVybiB1bndyYXAgP1xuICAgIHVud3JhcExpc3RlbmVycyhldmxpc3RlbmVyKSA6IGFycmF5Q2xvbmUoZXZsaXN0ZW5lciwgZXZsaXN0ZW5lci5sZW5ndGgpO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uIGxpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIHRydWUpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnMgPSBmdW5jdGlvbiByYXdMaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLmxpc3RlbmVyQ291bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZW1pdHRlci5saXN0ZW5lckNvdW50KHR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsaXN0ZW5lckNvdW50LmNhbGwoZW1pdHRlciwgdHlwZSk7XG4gIH1cbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGxpc3RlbmVyQ291bnQ7XG5mdW5jdGlvbiBsaXN0ZW5lckNvdW50KHR5cGUpIHtcbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcblxuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcblxuICAgIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChldmxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBldmxpc3RlbmVyLmxlbmd0aDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgcmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50ID4gMCA/IFJlZmxlY3RPd25LZXlzKHRoaXMuX2V2ZW50cykgOiBbXTtcbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2xvbmUoYXJyLCBuKSB7XG4gIHZhciBjb3B5ID0gbmV3IEFycmF5KG4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSlcbiAgICBjb3B5W2ldID0gYXJyW2ldO1xuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gc3BsaWNlT25lKGxpc3QsIGluZGV4KSB7XG4gIGZvciAoOyBpbmRleCArIDEgPCBsaXN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICBsaXN0W2luZGV4XSA9IGxpc3RbaW5kZXggKyAxXTtcbiAgbGlzdC5wb3AoKTtcbn1cblxuZnVuY3Rpb24gdW53cmFwTGlzdGVuZXJzKGFycikge1xuICB2YXIgcmV0ID0gbmV3IEFycmF5KGFyci5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7ICsraSkge1xuICAgIHJldFtpXSA9IGFycltpXS5saXN0ZW5lciB8fCBhcnJbaV07XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gb25jZShlbWl0dGVyLCBuYW1lKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICBpZiAodHlwZW9mIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBlcnJvckxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIHJlc29sdmUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICB9O1xuXG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIHJlc29sdmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgaWYgKG5hbWUgIT09ICdlcnJvcicpIHtcbiAgICAgIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGVycm9yTGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBoYW5kbGVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgJ2Vycm9yJywgaGFuZGxlciwgZmxhZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCBsaXN0ZW5lciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgIGVtaXR0ZXIub25jZShuYW1lLCBsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXR0ZXIub24obmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRXZlbnRUYXJnZXQgZG9lcyBub3QgaGF2ZSBgZXJyb3JgIGV2ZW50IHNlbWFudGljcyBsaWtlIE5vZGVcbiAgICAvLyBFdmVudEVtaXR0ZXJzLCB3ZSBkbyBub3QgbGlzdGVuIGZvciBgZXJyb3JgIGV2ZW50cyBoZXJlLlxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmdW5jdGlvbiB3cmFwTGlzdGVuZXIoYXJnKSB7XG4gICAgICAvLyBJRSBkb2VzIG5vdCBoYXZlIGJ1aWx0aW4gYHsgb25jZTogdHJ1ZSB9YCBzdXBwb3J0IHNvIHdlXG4gICAgICAvLyBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5LlxuICAgICAgaWYgKGZsYWdzLm9uY2UpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIHdyYXBMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICBsaXN0ZW5lcihhcmcpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImVtaXR0ZXJcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRXZlbnRFbWl0dGVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgZW1pdHRlcik7XG4gIH1cbn1cbiIsIi8qISBFeGNlbEpTIDE5LTEwLTIwMjMgKi9cblxuIWZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWUoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5FeGNlbEpTPWUoKX19KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBlKHQscixuKXtmdW5jdGlvbiBpKG8sYSl7aWYoIXJbb10pe2lmKCF0W29dKXt2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFhJiZsKXJldHVybiBsKG8sITApO2lmKHMpcmV0dXJuIHMobywhMCk7dmFyIGM9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBjLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsY312YXIgdT1yW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwodS5leHBvcnRzLChmdW5jdGlvbihlKXtyZXR1cm4gaSh0W29dWzFdW2VdfHxlKX0pLHUsdS5leHBvcnRzLGUsdCxyLG4pfXJldHVybiByW29dLmV4cG9ydHN9Zm9yKHZhciBzPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsbz0wO288bi5sZW5ndGg7bysrKWkobltvXSk7cmV0dXJuIGl9KHsxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiZnNcIiksaT1lKFwiZmFzdC1jc3ZcIikscz1lKFwiZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0XCIpLG89ZShcImRheWpzL3BsdWdpbi91dGNcIiksYT1lKFwiZGF5anNcIikuZXh0ZW5kKHMpLmV4dGVuZChvKSxsPWUoXCIuLi91dGlscy9zdHJlYW0tYnVmXCIpLHtmczp7ZXhpc3RzOmN9fT1lKFwiLi4vdXRpbHMvdXRpbHNcIiksdT17dHJ1ZTohMCxmYWxzZTohMSxcIiNOL0FcIjp7ZXJyb3I6XCIjTi9BXCJ9LFwiI1JFRiFcIjp7ZXJyb3I6XCIjUkVGIVwifSxcIiNOQU1FP1wiOntlcnJvcjpcIiNOQU1FP1wifSxcIiNESVYvMCFcIjp7ZXJyb3I6XCIjRElWLzAhXCJ9LFwiI05VTEwhXCI6e2Vycm9yOlwiI05VTEwhXCJ9LFwiI1ZBTFVFIVwiOntlcnJvcjpcIiNWQUxVRSFcIn0sXCIjTlVNIVwiOntlcnJvcjpcIiNOVU0hXCJ9fTt0LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy53b3JrYm9vaz1lLHRoaXMud29ya3NoZWV0PW51bGx9YXN5bmMgcmVhZEZpbGUoZSx0KXtpZih0PXR8fHt9LCFhd2FpdCBjKGUpKXRocm93IG5ldyBFcnJvcihcIkZpbGUgbm90IGZvdW5kOiBcIitlKTtjb25zdCByPW4uY3JlYXRlUmVhZFN0cmVhbShlKSxpPWF3YWl0IHRoaXMucmVhZChyLHQpO3JldHVybiByLmNsb3NlKCksaX1yZWFkKGUsdCl7cmV0dXJuIHQ9dHx8e30sbmV3IFByb21pc2UoKHIsbik9Pntjb25zdCBzPXRoaXMud29ya2Jvb2suYWRkV29ya3NoZWV0KHQuc2hlZXROYW1lKSxvPXQuZGF0ZUZvcm1hdHN8fFtcIllZWVktTU0tRERbVF1ISDptbTpzc1pcIixcIllZWVktTU0tRERbVF1ISDptbTpzc1wiLFwiTU0tREQtWVlZWVwiLFwiWVlZWS1NTS1ERFwiXSxsPXQubWFwfHxmdW5jdGlvbihlKXtpZihcIlwiPT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PU51bWJlcihlKTtpZighTnVtYmVyLmlzTmFOKHQpJiZ0IT09MS8wKXJldHVybiB0O2NvbnN0IHI9by5yZWR1Y2UoKHQscik9PntpZih0KXJldHVybiB0O2NvbnN0IG49YShlLHIsITApO3JldHVybiBuLmlzVmFsaWQoKT9uOm51bGx9LG51bGwpO2lmKHIpcmV0dXJuIG5ldyBEYXRlKHIudmFsdWVPZigpKTtjb25zdCBuPXVbZV07cmV0dXJuIHZvaWQgMCE9PW4/bjplfSxjPWkucGFyc2UodC5wYXJzZXJPcHRpb25zKS5vbihcImRhdGFcIixlPT57cy5hZGRSb3coZS5tYXAobCkpfSkub24oXCJlbmRcIiwoKT0+e2MuZW1pdChcIndvcmtzaGVldFwiLHMpfSk7Yy5vbihcIndvcmtzaGVldFwiLHIpLm9uKFwiZXJyb3JcIixuKSxlLnBpcGUoYyl9KX1jcmVhdGVJbnB1dFN0cmVhbSgpe3Rocm93IG5ldyBFcnJvcihcImBDU1YjY3JlYXRlSW5wdXRTdHJlYW1gIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIGBDU1YjcmVhZGAgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gNS4wLiBQbGVhc2UgZm9sbG93IHVwZ3JhZGUgaW5zdHJ1Y3Rpb246IGh0dHBzOi8vZ2l0aHViLmNvbS9leGNlbGpzL2V4Y2VsanMvYmxvYi9tYXN0ZXIvVVBHUkFERS00LjAubWRcIil9d3JpdGUoZSx0KXtyZXR1cm4gbmV3IFByb21pc2UoKHIsbik9Pnt0PXR8fHt9O2NvbnN0IHM9dGhpcy53b3JrYm9vay5nZXRXb3Jrc2hlZXQodC5zaGVldE5hbWV8fHQuc2hlZXRJZCksbz1pLmZvcm1hdCh0LmZvcm1hdHRlck9wdGlvbnMpO2Uub24oXCJmaW5pc2hcIiwoKT0+e3IoKX0pLG8ub24oXCJlcnJvclwiLG4pLG8ucGlwZShlKTtjb25zdHtkYXRlRm9ybWF0OmwsZGF0ZVVUQzpjfT10LHU9dC5tYXB8fChlPT57aWYoZSl7aWYoZS50ZXh0fHxlLmh5cGVybGluaylyZXR1cm4gZS5oeXBlcmxpbmt8fGUudGV4dHx8XCJcIjtpZihlLmZvcm11bGF8fGUucmVzdWx0KXJldHVybiBlLnJlc3VsdHx8XCJcIjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbD9jP2EudXRjKGUpLmZvcm1hdChsKTphKGUpLmZvcm1hdChsKTpjP2EudXRjKGUpLmZvcm1hdCgpOmEoZSkuZm9ybWF0KCk7aWYoZS5lcnJvcilyZXR1cm4gZS5lcnJvcjtpZihcIm9iamVjdFwiPT10eXBlb2YgZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9cmV0dXJuIGV9KSxoPXZvaWQgMD09PXQuaW5jbHVkZUVtcHR5Um93c3x8dC5pbmNsdWRlRW1wdHlSb3dzO2xldCBmPTE7cyYmcy5lYWNoUm93KChlLHQpPT57aWYoaClmb3IoO2YrKzx0LTE7KW8ud3JpdGUoW10pO2NvbnN0e3ZhbHVlczpyfT1lO3Iuc2hpZnQoKSxvLndyaXRlKHIubWFwKHUpKSxmPXR9KSxvLmVuZCgpfSl9d3JpdGVGaWxlKGUsdCl7Y29uc3Qgcj17ZW5jb2Rpbmc6KHQ9dHx8e30pLmVuY29kaW5nfHxcInV0ZjhcIn0saT1uLmNyZWF0ZVdyaXRlU3RyZWFtKGUscik7cmV0dXJuIHRoaXMud3JpdGUoaSx0KX1hc3luYyB3cml0ZUJ1ZmZlcihlKXtjb25zdCB0PW5ldyBsO3JldHVybiBhd2FpdCB0aGlzLndyaXRlKHQsZSksdC5yZWFkKCl9fX0se1wiLi4vdXRpbHMvc3RyZWFtLWJ1ZlwiOjI0LFwiLi4vdXRpbHMvdXRpbHNcIjoyNyxkYXlqczozOTEsXCJkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXRcIjozOTIsXCJkYXlqcy9wbHVnaW4vdXRjXCI6MzkzLFwiZmFzdC1jc3ZcIjo0MjQsZnM6MjE2fV0sMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL3V0aWxzL2NvbC1jYWNoZVwiKTtjbGFzcyBpe2NvbnN0cnVjdG9yKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYodGhpcy53b3Jrc2hlZXQ9ZSx0KWlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtjb25zdCBlPW4uZGVjb2RlQWRkcmVzcyh0KTt0aGlzLm5hdGl2ZUNvbD1lLmNvbCtyLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9ZS5yb3crcix0aGlzLm5hdGl2ZVJvd09mZj0wfWVsc2Ugdm9pZCAwIT09dC5uYXRpdmVDb2w/KHRoaXMubmF0aXZlQ29sPXQubmF0aXZlQ29sfHwwLHRoaXMubmF0aXZlQ29sT2ZmPXQubmF0aXZlQ29sT2ZmfHwwLHRoaXMubmF0aXZlUm93PXQubmF0aXZlUm93fHwwLHRoaXMubmF0aXZlUm93T2ZmPXQubmF0aXZlUm93T2ZmfHwwKTp2b2lkIDAhPT10LmNvbD8odGhpcy5jb2w9dC5jb2wrcix0aGlzLnJvdz10LnJvdytyKToodGhpcy5uYXRpdmVDb2w9MCx0aGlzLm5hdGl2ZUNvbE9mZj0wLHRoaXMubmF0aXZlUm93PTAsdGhpcy5uYXRpdmVSb3dPZmY9MCk7ZWxzZSB0aGlzLm5hdGl2ZUNvbD0wLHRoaXMubmF0aXZlQ29sT2ZmPTAsdGhpcy5uYXRpdmVSb3c9MCx0aGlzLm5hdGl2ZVJvd09mZj0wfXN0YXRpYyBhc0luc3RhbmNlKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaXx8bnVsbD09ZT9lOm5ldyBpKGUpfWdldCBjb2woKXtyZXR1cm4gdGhpcy5uYXRpdmVDb2wrTWF0aC5taW4odGhpcy5jb2xXaWR0aC0xLHRoaXMubmF0aXZlQ29sT2ZmKS90aGlzLmNvbFdpZHRofXNldCBjb2woZSl7dGhpcy5uYXRpdmVDb2w9TWF0aC5mbG9vcihlKSx0aGlzLm5hdGl2ZUNvbE9mZj1NYXRoLmZsb29yKChlLXRoaXMubmF0aXZlQ29sKSp0aGlzLmNvbFdpZHRoKX1nZXQgcm93KCl7cmV0dXJuIHRoaXMubmF0aXZlUm93K01hdGgubWluKHRoaXMucm93SGVpZ2h0LTEsdGhpcy5uYXRpdmVSb3dPZmYpL3RoaXMucm93SGVpZ2h0fXNldCByb3coZSl7dGhpcy5uYXRpdmVSb3c9TWF0aC5mbG9vcihlKSx0aGlzLm5hdGl2ZVJvd09mZj1NYXRoLmZsb29yKChlLXRoaXMubmF0aXZlUm93KSp0aGlzLnJvd0hlaWdodCl9Z2V0IGNvbFdpZHRoKCl7cmV0dXJuIHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRDb2x1bW4odGhpcy5uYXRpdmVDb2wrMSkmJnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS5pc0N1c3RvbVdpZHRoP01hdGguZmxvb3IoMWU0KnRoaXMud29ya3NoZWV0LmdldENvbHVtbih0aGlzLm5hdGl2ZUNvbCsxKS53aWR0aCk6NjRlNH1nZXQgcm93SGVpZ2h0KCl7cmV0dXJuIHRoaXMud29ya3NoZWV0JiZ0aGlzLndvcmtzaGVldC5nZXRSb3codGhpcy5uYXRpdmVSb3crMSkmJnRoaXMud29ya3NoZWV0LmdldFJvdyh0aGlzLm5hdGl2ZVJvdysxKS5oZWlnaHQ/TWF0aC5mbG9vcigxZTQqdGhpcy53b3Jrc2hlZXQuZ2V0Um93KHRoaXMubmF0aXZlUm93KzEpLmhlaWdodCk6MThlNH1nZXQgbW9kZWwoKXtyZXR1cm57bmF0aXZlQ29sOnRoaXMubmF0aXZlQ29sLG5hdGl2ZUNvbE9mZjp0aGlzLm5hdGl2ZUNvbE9mZixuYXRpdmVSb3c6dGhpcy5uYXRpdmVSb3csbmF0aXZlUm93T2ZmOnRoaXMubmF0aXZlUm93T2ZmfX1zZXQgbW9kZWwoZSl7dGhpcy5uYXRpdmVDb2w9ZS5uYXRpdmVDb2wsdGhpcy5uYXRpdmVDb2xPZmY9ZS5uYXRpdmVDb2xPZmYsdGhpcy5uYXRpdmVSb3c9ZS5uYXRpdmVSb3csdGhpcy5uYXRpdmVSb3dPZmY9ZS5uYXRpdmVSb3dPZmZ9fXQuZXhwb3J0cz1pfSx7XCIuLi91dGlscy9jb2wtY2FjaGVcIjoxOX1dLDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi91dGlscy9jb2wtY2FjaGVcIiksaT1lKFwiLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxzPWUoXCIuL2VudW1zXCIpLHtzbGlkZUZvcm11bGE6b309ZShcIi4uL3V0aWxzL3NoYXJlZC1mb3JtdWxhXCIpLGE9ZShcIi4vbm90ZVwiKTtjbGFzcyBse2NvbnN0cnVjdG9yKGUsdCxyKXtpZighZXx8IXQpdGhyb3cgbmV3IEVycm9yKFwiQSBDZWxsIG5lZWRzIGEgUm93XCIpO3RoaXMuX3Jvdz1lLHRoaXMuX2NvbHVtbj10LG4udmFsaWRhdGVBZGRyZXNzKHIpLHRoaXMuX2FkZHJlc3M9cix0aGlzLl92YWx1ZT1jLmNyZWF0ZShsLlR5cGVzLk51bGwsdGhpcyksdGhpcy5zdHlsZT10aGlzLl9tZXJnZVN0eWxlKGUuc3R5bGUsdC5zdHlsZSx7fSksdGhpcy5fbWVyZ2VDb3VudD0wfWdldCB3b3Jrc2hlZXQoKXtyZXR1cm4gdGhpcy5fcm93LndvcmtzaGVldH1nZXQgd29ya2Jvb2soKXtyZXR1cm4gdGhpcy5fcm93LndvcmtzaGVldC53b3JrYm9va31kZXN0cm95KCl7ZGVsZXRlIHRoaXMuc3R5bGUsZGVsZXRlIHRoaXMuX3ZhbHVlLGRlbGV0ZSB0aGlzLl9yb3csZGVsZXRlIHRoaXMuX2NvbHVtbixkZWxldGUgdGhpcy5fYWRkcmVzc31nZXQgbnVtRm10KCl7cmV0dXJuIHRoaXMuc3R5bGUubnVtRm10fXNldCBudW1GbXQoZSl7dGhpcy5zdHlsZS5udW1GbXQ9ZX1nZXQgZm9udCgpe3JldHVybiB0aGlzLnN0eWxlLmZvbnR9c2V0IGZvbnQoZSl7dGhpcy5zdHlsZS5mb250PWV9Z2V0IGFsaWdubWVudCgpe3JldHVybiB0aGlzLnN0eWxlLmFsaWdubWVudH1zZXQgYWxpZ25tZW50KGUpe3RoaXMuc3R5bGUuYWxpZ25tZW50PWV9Z2V0IGJvcmRlcigpe3JldHVybiB0aGlzLnN0eWxlLmJvcmRlcn1zZXQgYm9yZGVyKGUpe3RoaXMuc3R5bGUuYm9yZGVyPWV9Z2V0IGZpbGwoKXtyZXR1cm4gdGhpcy5zdHlsZS5maWxsfXNldCBmaWxsKGUpe3RoaXMuc3R5bGUuZmlsbD1lfWdldCBwcm90ZWN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUucHJvdGVjdGlvbn1zZXQgcHJvdGVjdGlvbihlKXt0aGlzLnN0eWxlLnByb3RlY3Rpb249ZX1fbWVyZ2VTdHlsZShlLHQscil7Y29uc3Qgbj1lJiZlLm51bUZtdHx8dCYmdC5udW1GbXQ7biYmKHIubnVtRm10PW4pO2NvbnN0IGk9ZSYmZS5mb250fHx0JiZ0LmZvbnQ7aSYmKHIuZm9udD1pKTtjb25zdCBzPWUmJmUuYWxpZ25tZW50fHx0JiZ0LmFsaWdubWVudDtzJiYoci5hbGlnbm1lbnQ9cyk7Y29uc3Qgbz1lJiZlLmJvcmRlcnx8dCYmdC5ib3JkZXI7byYmKHIuYm9yZGVyPW8pO2NvbnN0IGE9ZSYmZS5maWxsfHx0JiZ0LmZpbGw7YSYmKHIuZmlsbD1hKTtjb25zdCBsPWUmJmUucHJvdGVjdGlvbnx8dCYmdC5wcm90ZWN0aW9uO3JldHVybiBsJiYoci5wcm90ZWN0aW9uPWwpLHJ9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5fYWRkcmVzc31nZXQgcm93KCl7cmV0dXJuIHRoaXMuX3Jvdy5udW1iZXJ9Z2V0IGNvbCgpe3JldHVybiB0aGlzLl9jb2x1bW4ubnVtYmVyfWdldCAkY29sJHJvdygpe3JldHVybmAkJHt0aGlzLl9jb2x1bW4ubGV0dGVyfSQke3RoaXMucm93fWB9Z2V0IHR5cGUoKXtyZXR1cm4gdGhpcy5fdmFsdWUudHlwZX1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiB0aGlzLl92YWx1ZS5lZmZlY3RpdmVUeXBlfXRvQ3N2U3RyaW5nKCl7cmV0dXJuIHRoaXMuX3ZhbHVlLnRvQ3N2U3RyaW5nKCl9YWRkTWVyZ2VSZWYoKXt0aGlzLl9tZXJnZUNvdW50Kyt9cmVsZWFzZU1lcmdlUmVmKCl7dGhpcy5fbWVyZ2VDb3VudC0tfWdldCBpc01lcmdlZCgpe3JldHVybiB0aGlzLl9tZXJnZUNvdW50PjB8fHRoaXMudHlwZT09PWwuVHlwZXMuTWVyZ2V9bWVyZ2UoZSx0KXt0aGlzLl92YWx1ZS5yZWxlYXNlKCksdGhpcy5fdmFsdWU9Yy5jcmVhdGUobC5UeXBlcy5NZXJnZSx0aGlzLGUpLHR8fCh0aGlzLnN0eWxlPWUuc3R5bGUpfXVubWVyZ2UoKXt0aGlzLnR5cGU9PT1sLlR5cGVzLk1lcmdlJiYodGhpcy5fdmFsdWUucmVsZWFzZSgpLHRoaXMuX3ZhbHVlPWMuY3JlYXRlKGwuVHlwZXMuTnVsbCx0aGlzKSx0aGlzLnN0eWxlPXRoaXMuX21lcmdlU3R5bGUodGhpcy5fcm93LnN0eWxlLHRoaXMuX2NvbHVtbi5zdHlsZSx7fSkpfWlzTWVyZ2VkVG8oZSl7cmV0dXJuIHRoaXMuX3ZhbHVlLnR5cGU9PT1sLlR5cGVzLk1lcmdlJiZ0aGlzLl92YWx1ZS5pc01lcmdlZFRvKGUpfWdldCBtYXN0ZXIoKXtyZXR1cm4gdGhpcy50eXBlPT09bC5UeXBlcy5NZXJnZT90aGlzLl92YWx1ZS5tYXN0ZXI6dGhpc31nZXQgaXNIeXBlcmxpbmsoKXtyZXR1cm4gdGhpcy5fdmFsdWUudHlwZT09PWwuVHlwZXMuSHlwZXJsaW5rfWdldCBoeXBlcmxpbmsoKXtyZXR1cm4gdGhpcy5fdmFsdWUuaHlwZXJsaW5rfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZS52YWx1ZX1zZXQgdmFsdWUoZSl7dGhpcy50eXBlIT09bC5UeXBlcy5NZXJnZT8odGhpcy5fdmFsdWUucmVsZWFzZSgpLHRoaXMuX3ZhbHVlPWMuY3JlYXRlKGMuZ2V0VHlwZShlKSx0aGlzLGUpKTp0aGlzLl92YWx1ZS5tYXN0ZXIudmFsdWU9ZX1nZXQgbm90ZSgpe3JldHVybiB0aGlzLl9jb21tZW50JiZ0aGlzLl9jb21tZW50Lm5vdGV9c2V0IG5vdGUoZSl7dGhpcy5fY29tbWVudD1uZXcgYShlKX1nZXQgdGV4dCgpe3JldHVybiB0aGlzLl92YWx1ZS50b1N0cmluZygpfWdldCBodG1sKCl7cmV0dXJuIGkuZXNjYXBlSHRtbCh0aGlzLnRleHQpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMudGV4dH1fdXBncmFkZVRvSHlwZXJsaW5rKGUpe3RoaXMudHlwZT09PWwuVHlwZXMuU3RyaW5nJiYodGhpcy5fdmFsdWU9Yy5jcmVhdGUobC5UeXBlcy5IeXBlcmxpbmssdGhpcyx7dGV4dDp0aGlzLl92YWx1ZS52YWx1ZSxoeXBlcmxpbms6ZX0pKX1nZXQgZm9ybXVsYSgpe3JldHVybiB0aGlzLl92YWx1ZS5mb3JtdWxhfWdldCByZXN1bHQoKXtyZXR1cm4gdGhpcy5fdmFsdWUucmVzdWx0fWdldCBmb3JtdWxhVHlwZSgpe3JldHVybiB0aGlzLl92YWx1ZS5mb3JtdWxhVHlwZX1nZXQgZnVsbEFkZHJlc3MoKXtjb25zdHt3b3Jrc2hlZXQ6ZX09dGhpcy5fcm93O3JldHVybntzaGVldE5hbWU6ZS5uYW1lLGFkZHJlc3M6dGhpcy5hZGRyZXNzLHJvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fWdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZXNbMF19c2V0IG5hbWUoZSl7dGhpcy5uYW1lcz1bZV19Z2V0IG5hbWVzKCl7cmV0dXJuIHRoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLmdldE5hbWVzRXgodGhpcy5mdWxsQWRkcmVzcyl9c2V0IG5hbWVzKGUpe2NvbnN0e2RlZmluZWROYW1lczp0fT10aGlzLndvcmtib29rO3QucmVtb3ZlQWxsTmFtZXModGhpcy5mdWxsQWRkcmVzcyksZS5mb3JFYWNoKGU9Pnt0LmFkZEV4KHRoaXMuZnVsbEFkZHJlc3MsZSl9KX1hZGROYW1lKGUpe3RoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLmFkZEV4KHRoaXMuZnVsbEFkZHJlc3MsZSl9cmVtb3ZlTmFtZShlKXt0aGlzLndvcmtib29rLmRlZmluZWROYW1lcy5yZW1vdmVFeCh0aGlzLmZ1bGxBZGRyZXNzLGUpfXJlbW92ZUFsbE5hbWVzKCl7dGhpcy53b3JrYm9vay5kZWZpbmVkTmFtZXMucmVtb3ZlQWxsTmFtZXModGhpcy5mdWxsQWRkcmVzcyl9Z2V0IF9kYXRhVmFsaWRhdGlvbnMoKXtyZXR1cm4gdGhpcy53b3Jrc2hlZXQuZGF0YVZhbGlkYXRpb25zfWdldCBkYXRhVmFsaWRhdGlvbigpe3JldHVybiB0aGlzLl9kYXRhVmFsaWRhdGlvbnMuZmluZCh0aGlzLmFkZHJlc3MpfXNldCBkYXRhVmFsaWRhdGlvbihlKXt0aGlzLl9kYXRhVmFsaWRhdGlvbnMuYWRkKHRoaXMuYWRkcmVzcyxlKX1nZXQgbW9kZWwoKXtjb25zdHttb2RlbDplfT10aGlzLl92YWx1ZTtyZXR1cm4gZS5zdHlsZT10aGlzLnN0eWxlLHRoaXMuX2NvbW1lbnQmJihlLmNvbW1lbnQ9dGhpcy5fY29tbWVudC5tb2RlbCksZX1zZXQgbW9kZWwoZSl7aWYodGhpcy5fdmFsdWUucmVsZWFzZSgpLHRoaXMuX3ZhbHVlPWMuY3JlYXRlKGUudHlwZSx0aGlzKSx0aGlzLl92YWx1ZS5tb2RlbD1lLGUuY29tbWVudClzd2l0Y2goZS5jb21tZW50LnR5cGUpe2Nhc2VcIm5vdGVcIjp0aGlzLl9jb21tZW50PWEuZnJvbU1vZGVsKGUuY29tbWVudCl9ZS5zdHlsZT90aGlzLnN0eWxlPWUuc3R5bGU6dGhpcy5zdHlsZT17fX19bC5UeXBlcz1zLlZhbHVlVHlwZTtjb25zdCBjPXtnZXRUeXBlOmU9Pm51bGw9PWU/bC5UeXBlcy5OdWxsOmUgaW5zdGFuY2VvZiBTdHJpbmd8fFwic3RyaW5nXCI9PXR5cGVvZiBlP2wuVHlwZXMuU3RyaW5nOlwibnVtYmVyXCI9PXR5cGVvZiBlP2wuVHlwZXMuTnVtYmVyOlwiYm9vbGVhblwiPT10eXBlb2YgZT9sLlR5cGVzLkJvb2xlYW46ZSBpbnN0YW5jZW9mIERhdGU/bC5UeXBlcy5EYXRlOmUudGV4dCYmZS5oeXBlcmxpbms/bC5UeXBlcy5IeXBlcmxpbms6ZS5mb3JtdWxhfHxlLnNoYXJlZEZvcm11bGE/bC5UeXBlcy5Gb3JtdWxhOmUucmljaFRleHQ/bC5UeXBlcy5SaWNoVGV4dDplLnNoYXJlZFN0cmluZz9sLlR5cGVzLlNoYXJlZFN0cmluZzplLmVycm9yP2wuVHlwZXMuRXJyb3I6bC5UeXBlcy5KU09OLHR5cGVzOlt7dDpsLlR5cGVzLk51bGwsZjpjbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm1vZGVsPXthZGRyZXNzOmUuYWRkcmVzcyx0eXBlOmwuVHlwZXMuTnVsbH19Z2V0IHZhbHVlKCl7cmV0dXJuIG51bGx9c2V0IHZhbHVlKGUpe31nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLk51bGx9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gbC5UeXBlcy5OdWxsfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhlKXt0aGlzLm1vZGVsLmFkZHJlc3M9ZX10b0NzdlN0cmluZygpe3JldHVyblwiXCJ9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVyblwiXCJ9fX0se3Q6bC5UeXBlcy5OdW1iZXIsZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5OdW1iZXIsdmFsdWU6dH19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMubW9kZWwudmFsdWU9ZX1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLk51bWJlcn1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLk51bWJlcn1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfX19LHt0OmwuVHlwZXMuU3RyaW5nLGY6Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm1vZGVsPXthZGRyZXNzOmUuYWRkcmVzcyx0eXBlOmwuVHlwZXMuU3RyaW5nLHZhbHVlOnR9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLm1vZGVsLnZhbHVlPWV9Z2V0IHR5cGUoKXtyZXR1cm4gbC5UeXBlcy5TdHJpbmd9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gbC5UeXBlcy5TdHJpbmd9Z2V0IGFkZHJlc3MoKXtyZXR1cm4gdGhpcy5tb2RlbC5hZGRyZXNzfXNldCBhZGRyZXNzKGUpe3RoaXMubW9kZWwuYWRkcmVzcz1lfXRvQ3N2U3RyaW5nKCl7cmV0dXJuYFwiJHt0aGlzLm1vZGVsLnZhbHVlLnJlcGxhY2UoL1wiL2csJ1wiXCInKX1cImB9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfX19LHt0OmwuVHlwZXMuRGF0ZSxmOmNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5tb2RlbD17YWRkcmVzczplLmFkZHJlc3MsdHlwZTpsLlR5cGVzLkRhdGUsdmFsdWU6dH19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMubW9kZWwudmFsdWU9ZX1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLkRhdGV9Z2V0IGVmZmVjdGl2ZVR5cGUoKXtyZXR1cm4gbC5UeXBlcy5EYXRlfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhlKXt0aGlzLm1vZGVsLmFkZHJlc3M9ZX10b0NzdlN0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnRvSVNPU3RyaW5nKCl9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnRvU3RyaW5nKCl9fX0se3Q6bC5UeXBlcy5IeXBlcmxpbmssZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5IeXBlcmxpbmssdGV4dDp0P3QudGV4dDp2b2lkIDAsaHlwZXJsaW5rOnQ/dC5oeXBlcmxpbms6dm9pZCAwfSx0JiZ0LnRvb2x0aXAmJih0aGlzLm1vZGVsLnRvb2x0aXA9dC50b29sdGlwKX1nZXQgdmFsdWUoKXtjb25zdCBlPXt0ZXh0OnRoaXMubW9kZWwudGV4dCxoeXBlcmxpbms6dGhpcy5tb2RlbC5oeXBlcmxpbmt9O3JldHVybiB0aGlzLm1vZGVsLnRvb2x0aXAmJihlLnRvb2x0aXA9dGhpcy5tb2RlbC50b29sdGlwKSxlfXNldCB2YWx1ZShlKXt0aGlzLm1vZGVsPXt0ZXh0OmUudGV4dCxoeXBlcmxpbms6ZS5oeXBlcmxpbmt9LGUudG9vbHRpcCYmKHRoaXMubW9kZWwudG9vbHRpcD1lLnRvb2x0aXApfWdldCB0ZXh0KCl7cmV0dXJuIHRoaXMubW9kZWwudGV4dH1zZXQgdGV4dChlKXt0aGlzLm1vZGVsLnRleHQ9ZX1nZXQgaHlwZXJsaW5rKCl7cmV0dXJuIHRoaXMubW9kZWwuaHlwZXJsaW5rfXNldCBoeXBlcmxpbmsoZSl7dGhpcy5tb2RlbC5oeXBlcmxpbms9ZX1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLkh5cGVybGlua31nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLkh5cGVybGlua31nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC5oeXBlcmxpbmt9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnRleHR9fX0se3Q6bC5UeXBlcy5Gb3JtdWxhLGY6Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmNlbGw9ZSx0aGlzLm1vZGVsPXthZGRyZXNzOmUuYWRkcmVzcyx0eXBlOmwuVHlwZXMuRm9ybXVsYSxzaGFyZVR5cGU6dD90LnNoYXJlVHlwZTp2b2lkIDAscmVmOnQ/dC5yZWY6dm9pZCAwLGZvcm11bGE6dD90LmZvcm11bGE6dm9pZCAwLHNoYXJlZEZvcm11bGE6dD90LnNoYXJlZEZvcm11bGE6dm9pZCAwLHJlc3VsdDp0P3QucmVzdWx0OnZvaWQgMH19X2NvcHlNb2RlbChlKXtjb25zdCB0PXt9LHI9cj0+e2NvbnN0IG49ZVtyXTtuJiYodFtyXT1uKX07cmV0dXJuIHIoXCJmb3JtdWxhXCIpLHIoXCJyZXN1bHRcIikscihcInJlZlwiKSxyKFwic2hhcmVUeXBlXCIpLHIoXCJzaGFyZWRGb3JtdWxhXCIpLHR9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX2NvcHlNb2RlbCh0aGlzLm1vZGVsKX1zZXQgdmFsdWUoZSl7dGhpcy5tb2RlbD10aGlzLl9jb3B5TW9kZWwoZSl9dmFsaWRhdGUoZSl7c3dpdGNoKGMuZ2V0VHlwZShlKSl7Y2FzZSBsLlR5cGVzLk51bGw6Y2FzZSBsLlR5cGVzLlN0cmluZzpjYXNlIGwuVHlwZXMuTnVtYmVyOmNhc2UgbC5UeXBlcy5EYXRlOmJyZWFrO2Nhc2UgbC5UeXBlcy5IeXBlcmxpbms6Y2FzZSBsLlR5cGVzLkZvcm11bGE6ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcHJvY2VzcyB0aGF0IHR5cGUgb2YgcmVzdWx0IHZhbHVlXCIpfX1nZXQgZGVwZW5kZW5jaWVzKCl7cmV0dXJue3Jhbmdlczp0aGlzLmZvcm11bGEubWF0Y2goLyhbYS16QS1aMC05XSshKT9bQS1aXXsxLDN9XFxkezEsNH06W0EtWl17MSwzfVxcZHsxLDR9L2cpLGNlbGxzOnRoaXMuZm9ybXVsYS5yZXBsYWNlKC8oW2EtekEtWjAtOV0rISk/W0EtWl17MSwzfVxcZHsxLDR9OltBLVpdezEsM31cXGR7MSw0fS9nLFwiXCIpLm1hdGNoKC8oW2EtekEtWjAtOV0rISk/W0EtWl17MSwzfVxcZHsxLDR9L2cpfX1nZXQgZm9ybXVsYSgpe3JldHVybiB0aGlzLm1vZGVsLmZvcm11bGF8fHRoaXMuX2dldFRyYW5zbGF0ZWRGb3JtdWxhKCl9c2V0IGZvcm11bGEoZSl7dGhpcy5tb2RlbC5mb3JtdWxhPWV9Z2V0IGZvcm11bGFUeXBlKCl7cmV0dXJuIHRoaXMubW9kZWwuZm9ybXVsYT9zLkZvcm11bGFUeXBlLk1hc3Rlcjp0aGlzLm1vZGVsLnNoYXJlZEZvcm11bGE/cy5Gb3JtdWxhVHlwZS5TaGFyZWQ6cy5Gb3JtdWxhVHlwZS5Ob25lfWdldCByZXN1bHQoKXtyZXR1cm4gdGhpcy5tb2RlbC5yZXN1bHR9c2V0IHJlc3VsdChlKXt0aGlzLm1vZGVsLnJlc3VsdD1lfWdldCB0eXBlKCl7cmV0dXJuIGwuVHlwZXMuRm9ybXVsYX1nZXQgZWZmZWN0aXZlVHlwZSgpe2NvbnN0IGU9dGhpcy5tb2RlbC5yZXN1bHQ7cmV0dXJuIG51bGw9PWU/cy5WYWx1ZVR5cGUuTnVsbDplIGluc3RhbmNlb2YgU3RyaW5nfHxcInN0cmluZ1wiPT10eXBlb2YgZT9zLlZhbHVlVHlwZS5TdHJpbmc6XCJudW1iZXJcIj09dHlwZW9mIGU/cy5WYWx1ZVR5cGUuTnVtYmVyOmUgaW5zdGFuY2VvZiBEYXRlP3MuVmFsdWVUeXBlLkRhdGU6ZS50ZXh0JiZlLmh5cGVybGluaz9zLlZhbHVlVHlwZS5IeXBlcmxpbms6ZS5mb3JtdWxhP3MuVmFsdWVUeXBlLkZvcm11bGE6cy5WYWx1ZVR5cGUuTnVsbH1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9X2dldFRyYW5zbGF0ZWRGb3JtdWxhKCl7aWYoIXRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhJiZ0aGlzLm1vZGVsLnNoYXJlZEZvcm11bGEpe2NvbnN0e3dvcmtzaGVldDplfT10aGlzLmNlbGwsdD1lLmZpbmRDZWxsKHRoaXMubW9kZWwuc2hhcmVkRm9ybXVsYSk7dGhpcy5fdHJhbnNsYXRlZEZvcm11bGE9dCYmbyh0LmZvcm11bGEsdC5hZGRyZXNzLHRoaXMubW9kZWwuYWRkcmVzcyl9cmV0dXJuIHRoaXMuX3RyYW5zbGF0ZWRGb3JtdWxhfXRvQ3N2U3RyaW5nKCl7cmV0dXJuXCJcIisodGhpcy5tb2RlbC5yZXN1bHR8fFwiXCIpfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC5yZXN1bHQ/dGhpcy5tb2RlbC5yZXN1bHQudG9TdHJpbmcoKTpcIlwifX19LHt0OmwuVHlwZXMuTWVyZ2UsZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5NZXJnZSxtYXN0ZXI6dD90LmFkZHJlc3M6dm9pZCAwfSx0aGlzLl9tYXN0ZXI9dCx0JiZ0LmFkZE1lcmdlUmVmKCl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX21hc3Rlci52YWx1ZX1zZXQgdmFsdWUoZSl7ZSBpbnN0YW5jZW9mIGw/KHRoaXMuX21hc3RlciYmdGhpcy5fbWFzdGVyLnJlbGVhc2VNZXJnZVJlZigpLGUuYWRkTWVyZ2VSZWYoKSx0aGlzLl9tYXN0ZXI9ZSk6dGhpcy5fbWFzdGVyLnZhbHVlPWV9aXNNZXJnZWRUbyhlKXtyZXR1cm4gZT09PXRoaXMuX21hc3Rlcn1nZXQgbWFzdGVyKCl7cmV0dXJuIHRoaXMuX21hc3Rlcn1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLk1lcmdlfWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIHRoaXMuX21hc3Rlci5lZmZlY3RpdmVUeXBlfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhlKXt0aGlzLm1vZGVsLmFkZHJlc3M9ZX10b0NzdlN0cmluZygpe3JldHVyblwiXCJ9cmVsZWFzZSgpe3RoaXMuX21hc3Rlci5yZWxlYXNlTWVyZ2VSZWYoKX10b1N0cmluZygpe3JldHVybiB0aGlzLnZhbHVlLnRvU3RyaW5nKCl9fX0se3Q6bC5UeXBlcy5KU09OLGY6Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLm1vZGVsPXthZGRyZXNzOmUuYWRkcmVzcyx0eXBlOmwuVHlwZXMuU3RyaW5nLHZhbHVlOkpTT04uc3RyaW5naWZ5KHQpLHJhd1ZhbHVlOnR9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnJhd1ZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLm1vZGVsLnJhd1ZhbHVlPWUsdGhpcy5tb2RlbC52YWx1ZT1KU09OLnN0cmluZ2lmeShlKX1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLlN0cmluZ31nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLlN0cmluZ31nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZX1yZWxlYXNlKCl7fXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9fX0se3Q6bC5UeXBlcy5TaGFyZWRTdHJpbmcsZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5TaGFyZWRTdHJpbmcsdmFsdWU6dH19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMubW9kZWwudmFsdWU9ZX1nZXQgdHlwZSgpe3JldHVybiBsLlR5cGVzLlNoYXJlZFN0cmluZ31nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLlNoYXJlZFN0cmluZ31nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfXJlbGVhc2UoKXt9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZS50b1N0cmluZygpfX19LHt0OmwuVHlwZXMuUmljaFRleHQsZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5TdHJpbmcsdmFsdWU6dH19Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWV9c2V0IHZhbHVlKGUpe3RoaXMubW9kZWwudmFsdWU9ZX10b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0Lm1hcChlPT5lLnRleHQpLmpvaW4oXCJcIil9Z2V0IHR5cGUoKXtyZXR1cm4gbC5UeXBlcy5SaWNoVGV4dH1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLlJpY2hUZXh0fWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhlKXt0aGlzLm1vZGVsLmFkZHJlc3M9ZX10b0NzdlN0cmluZygpe3JldHVybmBcIiR7dGhpcy50ZXh0LnJlcGxhY2UoL1wiL2csJ1wiXCInKX1cImB9cmVsZWFzZSgpe319fSx7dDpsLlR5cGVzLkJvb2xlYW4sZjpjbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMubW9kZWw9e2FkZHJlc3M6ZS5hZGRyZXNzLHR5cGU6bC5UeXBlcy5Cb29sZWFuLHZhbHVlOnR9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLm1vZGVsLnZhbHVlPWV9Z2V0IHR5cGUoKXtyZXR1cm4gbC5UeXBlcy5Cb29sZWFufWdldCBlZmZlY3RpdmVUeXBlKCl7cmV0dXJuIGwuVHlwZXMuQm9vbGVhbn1nZXQgYWRkcmVzcygpe3JldHVybiB0aGlzLm1vZGVsLmFkZHJlc3N9c2V0IGFkZHJlc3MoZSl7dGhpcy5tb2RlbC5hZGRyZXNzPWV9dG9Dc3ZTdHJpbmcoKXtyZXR1cm4gdGhpcy5tb2RlbC52YWx1ZT8xOjB9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLnRvU3RyaW5nKCl9fX0se3Q6bC5UeXBlcy5FcnJvcixmOmNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5tb2RlbD17YWRkcmVzczplLmFkZHJlc3MsdHlwZTpsLlR5cGVzLkVycm9yLHZhbHVlOnR9fWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlfXNldCB2YWx1ZShlKXt0aGlzLm1vZGVsLnZhbHVlPWV9Z2V0IHR5cGUoKXtyZXR1cm4gbC5UeXBlcy5FcnJvcn1nZXQgZWZmZWN0aXZlVHlwZSgpe3JldHVybiBsLlR5cGVzLkVycm9yfWdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMubW9kZWwuYWRkcmVzc31zZXQgYWRkcmVzcyhlKXt0aGlzLm1vZGVsLmFkZHJlc3M9ZX10b0NzdlN0cmluZygpe3JldHVybiB0aGlzLnRvU3RyaW5nKCl9cmVsZWFzZSgpe310b1N0cmluZygpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlLmVycm9yLnRvU3RyaW5nKCl9fX1dLnJlZHVjZSgoZSx0KT0+KGVbdC50XT10LmYsZSksW10pLGNyZWF0ZShlLHQscil7Y29uc3Qgbj10aGlzLnR5cGVzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgVmFsdWUgb2YgdHlwZSBcIitlKTtyZXR1cm4gbmV3IG4odCxyKX19O3QuZXhwb3J0cz1sfSx7XCIuLi91dGlscy9jb2wtY2FjaGVcIjoxOSxcIi4uL3V0aWxzL3NoYXJlZC1mb3JtdWxhXCI6MjMsXCIuLi91dGlscy91bmRlci1kYXNoXCI6MjYsXCIuL2VudW1zXCI6NyxcIi4vbm90ZVwiOjl9XSw0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxpPWUoXCIuL2VudW1zXCIpLHM9ZShcIi4uL3V0aWxzL2NvbC1jYWNoZVwiKTtjbGFzcyBve2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLl93b3Jrc2hlZXQ9ZSx0aGlzLl9udW1iZXI9dCwhMSE9PXImJih0aGlzLmRlZm49cil9Z2V0IG51bWJlcigpe3JldHVybiB0aGlzLl9udW1iZXJ9Z2V0IHdvcmtzaGVldCgpe3JldHVybiB0aGlzLl93b3Jrc2hlZXR9Z2V0IGxldHRlcigpe3JldHVybiBzLm4ybCh0aGlzLl9udW1iZXIpfWdldCBpc0N1c3RvbVdpZHRoKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMud2lkdGgmJjkhPT10aGlzLndpZHRofWdldCBkZWZuKCl7cmV0dXJue2hlYWRlcjp0aGlzLl9oZWFkZXIsa2V5OnRoaXMua2V5LHdpZHRoOnRoaXMud2lkdGgsc3R5bGU6dGhpcy5zdHlsZSxoaWRkZW46dGhpcy5oaWRkZW4sb3V0bGluZUxldmVsOnRoaXMub3V0bGluZUxldmVsfX1zZXQgZGVmbihlKXtlPyh0aGlzLmtleT1lLmtleSx0aGlzLndpZHRoPXZvaWQgMCE9PWUud2lkdGg/ZS53aWR0aDo5LHRoaXMub3V0bGluZUxldmVsPWUub3V0bGluZUxldmVsLGUuc3R5bGU/dGhpcy5zdHlsZT1lLnN0eWxlOnRoaXMuc3R5bGU9e30sdGhpcy5oZWFkZXI9ZS5oZWFkZXIsdGhpcy5faGlkZGVuPSEhZS5oaWRkZW4pOihkZWxldGUgdGhpcy5faGVhZGVyLGRlbGV0ZSB0aGlzLl9rZXksZGVsZXRlIHRoaXMud2lkdGgsdGhpcy5zdHlsZT17fSx0aGlzLm91dGxpbmVMZXZlbD0wKX1nZXQgaGVhZGVycygpe3JldHVybiB0aGlzLl9oZWFkZXImJnRoaXMuX2hlYWRlciBpbnN0YW5jZW9mIEFycmF5P3RoaXMuX2hlYWRlcjpbdGhpcy5faGVhZGVyXX1nZXQgaGVhZGVyKCl7cmV0dXJuIHRoaXMuX2hlYWRlcn1zZXQgaGVhZGVyKGUpe3ZvaWQgMCE9PWU/KHRoaXMuX2hlYWRlcj1lLHRoaXMuaGVhZGVycy5mb3JFYWNoKChlLHQpPT57dGhpcy5fd29ya3NoZWV0LmdldENlbGwodCsxLHRoaXMubnVtYmVyKS52YWx1ZT1lfSkpOnRoaXMuX2hlYWRlcj12b2lkIDB9Z2V0IGtleSgpe3JldHVybiB0aGlzLl9rZXl9c2V0IGtleShlKXsodGhpcy5fa2V5JiZ0aGlzLl93b3Jrc2hlZXQuZ2V0Q29sdW1uS2V5KHRoaXMuX2tleSkpPT09dGhpcyYmdGhpcy5fd29ya3NoZWV0LmRlbGV0ZUNvbHVtbktleSh0aGlzLl9rZXkpLHRoaXMuX2tleT1lLGUmJnRoaXMuX3dvcmtzaGVldC5zZXRDb2x1bW5LZXkodGhpcy5fa2V5LHRoaXMpfWdldCBoaWRkZW4oKXtyZXR1cm4hIXRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGUpe3RoaXMuX2hpZGRlbj1lfWdldCBvdXRsaW5lTGV2ZWwoKXtyZXR1cm4gdGhpcy5fb3V0bGluZUxldmVsfHwwfXNldCBvdXRsaW5lTGV2ZWwoZSl7dGhpcy5fb3V0bGluZUxldmVsPWV9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiEhKHRoaXMuX291dGxpbmVMZXZlbCYmdGhpcy5fb3V0bGluZUxldmVsPj10aGlzLl93b3Jrc2hlZXQucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxDb2wpfXRvU3RyaW5nKCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KHtrZXk6dGhpcy5rZXksd2lkdGg6dGhpcy53aWR0aCxoZWFkZXJzOnRoaXMuaGVhZGVycy5sZW5ndGg/dGhpcy5oZWFkZXJzOnZvaWQgMH0pfWVxdWl2YWxlbnRUbyhlKXtyZXR1cm4gdGhpcy53aWR0aD09PWUud2lkdGgmJnRoaXMuaGlkZGVuPT09ZS5oaWRkZW4mJnRoaXMub3V0bGluZUxldmVsPT09ZS5vdXRsaW5lTGV2ZWwmJm4uaXNFcXVhbCh0aGlzLnN0eWxlLGUuc3R5bGUpfWdldCBpc0RlZmF1bHQoKXtpZih0aGlzLmlzQ3VzdG9tV2lkdGgpcmV0dXJuITE7aWYodGhpcy5oaWRkZW4pcmV0dXJuITE7aWYodGhpcy5vdXRsaW5lTGV2ZWwpcmV0dXJuITE7Y29uc3QgZT10aGlzLnN0eWxlO3JldHVybiFlfHwhKGUuZm9udHx8ZS5udW1GbXR8fGUuYWxpZ25tZW50fHxlLmJvcmRlcnx8ZS5maWxsfHxlLnByb3RlY3Rpb24pfWdldCBoZWFkZXJDb3VudCgpe3JldHVybiB0aGlzLmhlYWRlcnMubGVuZ3RofWVhY2hDZWxsKGUsdCl7Y29uc3Qgcj10aGlzLm51bWJlcjt0fHwodD1lLGU9bnVsbCksdGhpcy5fd29ya3NoZWV0LmVhY2hSb3coZSwoZSxuKT0+e3QoZS5nZXRDZWxsKHIpLG4pfSl9Z2V0IHZhbHVlcygpe2NvbnN0IGU9W107cmV0dXJuIHRoaXMuZWFjaENlbGwoKHQscik9Pnt0JiZ0LnR5cGUhPT1pLlZhbHVlVHlwZS5OdWxsJiYoZVtyXT10LnZhbHVlKX0pLGV9c2V0IHZhbHVlcyhlKXtpZighZSlyZXR1cm47Y29uc3QgdD10aGlzLm51bWJlcjtsZXQgcj0wO2UuaGFzT3duUHJvcGVydHkoXCIwXCIpJiYocj0xKSxlLmZvckVhY2goKGUsbik9Pnt0aGlzLl93b3Jrc2hlZXQuZ2V0Q2VsbChuK3IsdCkudmFsdWU9ZX0pfV9hcHBseVN0eWxlKGUsdCl7cmV0dXJuIHRoaXMuc3R5bGVbZV09dCx0aGlzLmVhY2hDZWxsKHI9PntyW2VdPXR9KSx0fWdldCBudW1GbXQoKXtyZXR1cm4gdGhpcy5zdHlsZS5udW1GbXR9c2V0IG51bUZtdChlKXt0aGlzLl9hcHBseVN0eWxlKFwibnVtRm10XCIsZSl9Z2V0IGZvbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5mb250fXNldCBmb250KGUpe3RoaXMuX2FwcGx5U3R5bGUoXCJmb250XCIsZSl9Z2V0IGFsaWdubWVudCgpe3JldHVybiB0aGlzLnN0eWxlLmFsaWdubWVudH1zZXQgYWxpZ25tZW50KGUpe3RoaXMuX2FwcGx5U3R5bGUoXCJhbGlnbm1lbnRcIixlKX1nZXQgcHJvdGVjdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLnByb3RlY3Rpb259c2V0IHByb3RlY3Rpb24oZSl7dGhpcy5fYXBwbHlTdHlsZShcInByb3RlY3Rpb25cIixlKX1nZXQgYm9yZGVyKCl7cmV0dXJuIHRoaXMuc3R5bGUuYm9yZGVyfXNldCBib3JkZXIoZSl7dGhpcy5fYXBwbHlTdHlsZShcImJvcmRlclwiLGUpfWdldCBmaWxsKCl7cmV0dXJuIHRoaXMuc3R5bGUuZmlsbH1zZXQgZmlsbChlKXt0aGlzLl9hcHBseVN0eWxlKFwiZmlsbFwiLGUpfXN0YXRpYyB0b01vZGVsKGUpe2NvbnN0IHQ9W107bGV0IHI9bnVsbDtyZXR1cm4gZSYmZS5mb3JFYWNoKChlLG4pPT57ZS5pc0RlZmF1bHQ/ciYmKHI9bnVsbCk6ciYmZS5lcXVpdmFsZW50VG8ocik/ci5tYXg9bisxOihyPXttaW46bisxLG1heDpuKzEsd2lkdGg6dm9pZCAwIT09ZS53aWR0aD9lLndpZHRoOjksc3R5bGU6ZS5zdHlsZSxpc0N1c3RvbVdpZHRoOmUuaXNDdXN0b21XaWR0aCxoaWRkZW46ZS5oaWRkZW4sb3V0bGluZUxldmVsOmUub3V0bGluZUxldmVsLGNvbGxhcHNlZDplLmNvbGxhcHNlZH0sdC5wdXNoKHIpKX0pLHQubGVuZ3RoP3Q6dm9pZCAwfXN0YXRpYyBmcm9tTW9kZWwoZSx0KXtjb25zdCByPVtdO2xldCBuPTEsaT0wO2Zvcih0PSh0PXR8fFtdKS5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLm1pbi10Lm1pbn0pKTtpPHQubGVuZ3RoOyl7Y29uc3Qgcz10W2krK107Zm9yKDtuPHMubWluOylyLnB1c2gobmV3IG8oZSxuKyspKTtmb3IoO248PXMubWF4OylyLnB1c2gobmV3IG8oZSxuKysscykpfXJldHVybiByLmxlbmd0aD9yOm51bGx9fXQuZXhwb3J0cz1vfSx7XCIuLi91dGlscy9jb2wtY2FjaGVcIjoxOSxcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4vZW51bXNcIjo3fV0sNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLm1vZGVsPWV8fHt9fWFkZChlLHQpe3JldHVybiB0aGlzLm1vZGVsW2VdPXR9ZmluZChlKXtyZXR1cm4gdGhpcy5tb2RlbFtlXX1yZW1vdmUoZSl7dGhpcy5tb2RlbFtlXT12b2lkIDB9fX0se31dLDY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4uL3V0aWxzL2NvbC1jYWNoZVwiKSxzPWUoXCIuLi91dGlscy9jZWxsLW1hdHJpeFwiKSxvPWUoXCIuL3JhbmdlXCIpLGE9L1skXShcXHcrKVskXShcXGQrKSg6WyRdKFxcdyspWyRdKFxcZCspKT8vO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMubWF0cml4TWFwPXt9fWdldE1hdHJpeChlKXtyZXR1cm4gdGhpcy5tYXRyaXhNYXBbZV18fCh0aGlzLm1hdHJpeE1hcFtlXT1uZXcgcyl9YWRkKGUsdCl7Y29uc3Qgcj1pLmRlY29kZUV4KGUpO3RoaXMuYWRkRXgocix0KX1hZGRFeChlLHQpe2NvbnN0IHI9dGhpcy5nZXRNYXRyaXgodCk7aWYoZS50b3ApZm9yKGxldCB0PWUubGVmdDt0PD1lLnJpZ2h0O3QrKylmb3IobGV0IG49ZS50b3A7bjw9ZS5ib3R0b207bisrKXtjb25zdCBzPXtzaGVldE5hbWU6ZS5zaGVldE5hbWUsYWRkcmVzczppLm4ybCh0KStuLHJvdzpuLGNvbDp0fTtyLmFkZENlbGxFeChzKX1lbHNlIHIuYWRkQ2VsbEV4KGUpfXJlbW92ZShlLHQpe2NvbnN0IHI9aS5kZWNvZGVFeChlKTt0aGlzLnJlbW92ZUV4KHIsdCl9cmVtb3ZlRXgoZSx0KXt0aGlzLmdldE1hdHJpeCh0KS5yZW1vdmVDZWxsRXgoZSl9cmVtb3ZlQWxsTmFtZXMoZSl7bi5lYWNoKHRoaXMubWF0cml4TWFwLHQ9Pnt0LnJlbW92ZUNlbGxFeChlKX0pfWZvckVhY2goZSl7bi5lYWNoKHRoaXMubWF0cml4TWFwLCh0LHIpPT57dC5mb3JFYWNoKHQ9PntlKHIsdCl9KX0pfWdldE5hbWVzKGUpe3JldHVybiB0aGlzLmdldE5hbWVzRXgoaS5kZWNvZGVFeChlKSl9Z2V0TmFtZXNFeChlKXtyZXR1cm4gbi5tYXAodGhpcy5tYXRyaXhNYXAsKHQscik9PnQuZmluZENlbGxFeChlKSYmcikuZmlsdGVyKEJvb2xlYW4pfV9leHBsb3JlKGUsdCl7dC5tYXJrPSExO2NvbnN0e3NoZWV0TmFtZTpyfT10LG49bmV3IG8odC5yb3csdC5jb2wsdC5yb3csdC5jb2wscik7bGV0IGkscztmdW5jdGlvbiBhKGkscyl7Y29uc3Qgbz1lLmZpbmRDZWxsQXQocixpLHQuY29sKTtyZXR1cm4hKCFvfHwhby5tYXJrKSYmKG5bc109aSxvLm1hcms9ITEsITApfWZvcihzPXQucm93LTE7YShzLFwidG9wXCIpO3MtLSk7Zm9yKHM9dC5yb3crMTthKHMsXCJib3R0b21cIik7cysrKTtmdW5jdGlvbiBsKHQsaSl7Y29uc3Qgbz1bXTtmb3Iocz1uLnRvcDtzPD1uLmJvdHRvbTtzKyspe2NvbnN0IG49ZS5maW5kQ2VsbEF0KHIscyx0KTtpZighbnx8IW4ubWFyaylyZXR1cm4hMTtvLnB1c2gobil9bltpXT10O2ZvcihsZXQgZT0wO2U8by5sZW5ndGg7ZSsrKW9bZV0ubWFyaz0hMTtyZXR1cm4hMH1mb3IoaT10LmNvbC0xO2woaSxcImxlZnRcIik7aS0tKTtmb3IoaT10LmNvbCsxO2woaSxcInJpZ2h0XCIpO2krKyk7cmV0dXJuIG59Z2V0UmFuZ2VzKGUsdCl7aWYoISh0PXR8fHRoaXMubWF0cml4TWFwW2VdKSlyZXR1cm57bmFtZTplLHJhbmdlczpbXX07dC5mb3JFYWNoKGU9PntlLm1hcms9ITB9KTtyZXR1cm57bmFtZTplLHJhbmdlczp0Lm1hcChlPT5lLm1hcmsmJnRoaXMuX2V4cGxvcmUodCxlKSkuZmlsdGVyKEJvb2xlYW4pLm1hcChlPT5lLiRzaG9ydFJhbmdlKX19bm9ybWFsaXNlTWF0cml4KGUsdCl7ZS5mb3JFYWNoSW5TaGVldCh0LChlLHQscik9PntlJiYoZS5yb3c9PT10JiZlLmNvbD09PXJ8fChlLnJvdz10LGUuY29sPXIsZS5hZGRyZXNzPWkubjJsKHIpK3QpKX0pfXNwbGljZVJvd3MoZSx0LHIsaSl7bi5lYWNoKHRoaXMubWF0cml4TWFwLG49PntuLnNwbGljZVJvd3MoZSx0LHIsaSksdGhpcy5ub3JtYWxpc2VNYXRyaXgobixlKX0pfXNwbGljZUNvbHVtbnMoZSx0LHIsaSl7bi5lYWNoKHRoaXMubWF0cml4TWFwLG49PntuLnNwbGljZUNvbHVtbnMoZSx0LHIsaSksdGhpcy5ub3JtYWxpc2VNYXRyaXgobixlKX0pfWdldCBtb2RlbCgpe3JldHVybiBuLm1hcCh0aGlzLm1hdHJpeE1hcCwoZSx0KT0+dGhpcy5nZXRSYW5nZXModCxlKSkuZmlsdGVyKGU9PmUucmFuZ2VzLmxlbmd0aCl9c2V0IG1vZGVsKGUpe2NvbnN0IHQ9dGhpcy5tYXRyaXhNYXA9e307ZS5mb3JFYWNoKGU9Pntjb25zdCByPXRbZS5uYW1lXT1uZXcgcztlLnJhbmdlcy5mb3JFYWNoKGU9PnthLnRlc3QoZS5zcGxpdChcIiFcIikucG9wKCl8fFwiXCIpJiZyLmFkZENlbGwoZSl9KX0pfX19LHtcIi4uL3V0aWxzL2NlbGwtbWF0cml4XCI6MTgsXCIuLi91dGlscy9jb2wtY2FjaGVcIjoxOSxcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4vcmFuZ2VcIjoxMH1dLDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e1ZhbHVlVHlwZTp7TnVsbDowLE1lcmdlOjEsTnVtYmVyOjIsU3RyaW5nOjMsRGF0ZTo0LEh5cGVybGluazo1LEZvcm11bGE6NixTaGFyZWRTdHJpbmc6NyxSaWNoVGV4dDo4LEJvb2xlYW46OSxFcnJvcjoxMH0sRm9ybXVsYVR5cGU6e05vbmU6MCxNYXN0ZXI6MSxTaGFyZWQ6Mn0sUmVsYXRpb25zaGlwVHlwZTp7Tm9uZTowLE9mZmljZURvY3VtZW50OjEsV29ya3NoZWV0OjIsQ2FsY0NoYWluOjMsU2hhcmVkU3RyaW5nczo0LFN0eWxlczo1LFRoZW1lOjYsSHlwZXJsaW5rOjd9LERvY3VtZW50VHlwZTp7WGxzeDoxfSxSZWFkaW5nT3JkZXI6e0xlZnRUb1JpZ2h0OjEsUmlnaHRUb0xlZnQ6Mn0sRXJyb3JWYWx1ZTp7Tm90QXBwbGljYWJsZTpcIiNOL0FcIixSZWY6XCIjUkVGIVwiLE5hbWU6XCIjTkFNRT9cIixEaXZaZXJvOlwiI0RJVi8wIVwiLE51bGw6XCIjTlVMTCFcIixWYWx1ZTpcIiNWQUxVRSFcIixOdW06XCIjTlVNIVwifX19LHt9XSw4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vdXRpbHMvY29sLWNhY2hlXCIpLGk9ZShcIi4vYW5jaG9yXCIpO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMud29ya3NoZWV0PWUsdGhpcy5tb2RlbD10fWdldCBtb2RlbCgpe3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2VcImJhY2tncm91bmRcIjpyZXR1cm57dHlwZTp0aGlzLnR5cGUsaW1hZ2VJZDp0aGlzLmltYWdlSWR9O2Nhc2VcImltYWdlXCI6cmV0dXJue3R5cGU6dGhpcy50eXBlLGltYWdlSWQ6dGhpcy5pbWFnZUlkLGh5cGVybGlua3M6dGhpcy5yYW5nZS5oeXBlcmxpbmtzLHJhbmdlOnt0bDp0aGlzLnJhbmdlLnRsLm1vZGVsLGJyOnRoaXMucmFuZ2UuYnImJnRoaXMucmFuZ2UuYnIubW9kZWwsZXh0OnRoaXMucmFuZ2UuZXh0LGVkaXRBczp0aGlzLnJhbmdlLmVkaXRBc319O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBJbWFnZSBUeXBlXCIpfX1zZXQgbW9kZWwoZSl7bGV0e3R5cGU6dCxpbWFnZUlkOnIscmFuZ2U6cyxoeXBlcmxpbmtzOm99PWU7aWYodGhpcy50eXBlPXQsdGhpcy5pbWFnZUlkPXIsXCJpbWFnZVwiPT09dClpZihcInN0cmluZ1wiPT10eXBlb2Ygcyl7Y29uc3QgZT1uLmRlY29kZShzKTt0aGlzLnJhbmdlPXt0bDpuZXcgaSh0aGlzLndvcmtzaGVldCx7Y29sOmUubGVmdCxyb3c6ZS50b3B9LC0xKSxicjpuZXcgaSh0aGlzLndvcmtzaGVldCx7Y29sOmUucmlnaHQscm93OmUuYm90dG9tfSwwKSxlZGl0QXM6XCJvbmVDZWxsXCJ9fWVsc2UgdGhpcy5yYW5nZT17dGw6bmV3IGkodGhpcy53b3Jrc2hlZXQscy50bCwwKSxicjpzLmJyJiZuZXcgaSh0aGlzLndvcmtzaGVldCxzLmJyLDApLGV4dDpzLmV4dCxlZGl0QXM6cy5lZGl0QXMsaHlwZXJsaW5rczpvfHxzLmh5cGVybGlua3N9fX19LHtcIi4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi9hbmNob3JcIjoyfV0sOTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIik7Y2xhc3MgaXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5vdGU9ZX1nZXQgbW9kZWwoKXtsZXQgZT1udWxsO3N3aXRjaCh0eXBlb2YgdGhpcy5ub3RlKXtjYXNlXCJzdHJpbmdcIjplPXt0eXBlOlwibm90ZVwiLG5vdGU6e3RleHRzOlt7dGV4dDp0aGlzLm5vdGV9XX19O2JyZWFrO2RlZmF1bHQ6ZT17dHlwZTpcIm5vdGVcIixub3RlOnRoaXMubm90ZX19cmV0dXJuIG4uZGVlcE1lcmdlKHt9LGkuREVGQVVMVF9DT05GSUdTLGUpfXNldCBtb2RlbChlKXtjb25zdHtub3RlOnR9PWUse3RleHRzOnJ9PXQ7MT09PXIubGVuZ3RoJiYxPT09T2JqZWN0LmtleXMoclswXSkubGVuZ3RoP3RoaXMubm90ZT1yWzBdLnRleHQ6dGhpcy5ub3RlPXR9c3RhdGljIGZyb21Nb2RlbChlKXtjb25zdCB0PW5ldyBpO3JldHVybiB0Lm1vZGVsPWUsdH19aS5ERUZBVUxUX0NPTkZJR1M9e25vdGU6e21hcmdpbnM6e2luc2V0bW9kZTpcImF1dG9cIixpbnNldDpbLjEzLC4xMywuMjUsLjI1XX0scHJvdGVjdGlvbjp7bG9ja2VkOlwiVHJ1ZVwiLGxvY2tUZXh0OlwiVHJ1ZVwifSxlZGl0QXM6XCJhYnNvbHV0ZVwifX0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNn1dLDEwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vdXRpbHMvY29sLWNhY2hlXCIpO2NsYXNzIGl7Y29uc3RydWN0b3IoKXt0aGlzLmRlY29kZShhcmd1bWVudHMpfXNldFRMQlIoZSx0LHIsaSxzKXtpZihhcmd1bWVudHMubGVuZ3RoPDQpe2NvbnN0IGk9bi5kZWNvZGVBZGRyZXNzKGUpLG89bi5kZWNvZGVBZGRyZXNzKHQpO3RoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihpLnJvdyxvLnJvdyksbGVmdDpNYXRoLm1pbihpLmNvbCxvLmNvbCksYm90dG9tOk1hdGgubWF4KGkucm93LG8ucm93KSxyaWdodDpNYXRoLm1heChpLmNvbCxvLmNvbCksc2hlZXROYW1lOnJ9LHRoaXMuc2V0VExCUihpLnJvdyxpLmNvbCxvLnJvdyxvLmNvbCxzKX1lbHNlIHRoaXMubW9kZWw9e3RvcDpNYXRoLm1pbihlLHIpLGxlZnQ6TWF0aC5taW4odCxpKSxib3R0b206TWF0aC5tYXgoZSxyKSxyaWdodDpNYXRoLm1heCh0LGkpLHNoZWV0TmFtZTpzfX1kZWNvZGUoZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDU6dGhpcy5zZXRUTEJSKGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSk7YnJlYWs7Y2FzZSA0OnRoaXMuc2V0VExCUihlWzBdLGVbMV0sZVsyXSxlWzNdKTticmVhaztjYXNlIDM6dGhpcy5zZXRUTEJSKGVbMF0sZVsxXSxlWzJdKTticmVhaztjYXNlIDI6dGhpcy5zZXRUTEJSKGVbMF0sZVsxXSk7YnJlYWs7Y2FzZSAxOntjb25zdCB0PWVbMF07aWYodCBpbnN0YW5jZW9mIGkpdGhpcy5tb2RlbD17dG9wOnQubW9kZWwudG9wLGxlZnQ6dC5tb2RlbC5sZWZ0LGJvdHRvbTp0Lm1vZGVsLmJvdHRvbSxyaWdodDp0Lm1vZGVsLnJpZ2h0LHNoZWV0TmFtZTp0LnNoZWV0TmFtZX07ZWxzZSBpZih0IGluc3RhbmNlb2YgQXJyYXkpdGhpcy5kZWNvZGUodCk7ZWxzZSBpZih0LnRvcCYmdC5sZWZ0JiZ0LmJvdHRvbSYmdC5yaWdodCl0aGlzLm1vZGVsPXt0b3A6dC50b3AsbGVmdDp0LmxlZnQsYm90dG9tOnQuYm90dG9tLHJpZ2h0OnQucmlnaHQsc2hlZXROYW1lOnQuc2hlZXROYW1lfTtlbHNle2NvbnN0IGU9bi5kZWNvZGVFeCh0KTtlLnRvcD90aGlzLm1vZGVsPXt0b3A6ZS50b3AsbGVmdDplLmxlZnQsYm90dG9tOmUuYm90dG9tLHJpZ2h0OmUucmlnaHQsc2hlZXROYW1lOmUuc2hlZXROYW1lfTp0aGlzLm1vZGVsPXt0b3A6ZS5yb3csbGVmdDplLmNvbCxib3R0b206ZS5yb3cscmlnaHQ6ZS5jb2wsc2hlZXROYW1lOmUuc2hlZXROYW1lfX1icmVha31jYXNlIDA6dGhpcy5tb2RlbD17dG9wOjAsbGVmdDowLGJvdHRvbTowLHJpZ2h0OjB9O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHRvIF9nZXREaW1lbnNpb25zKCkgLSBcIitlLmxlbmd0aCl9fWdldCB0b3AoKXtyZXR1cm4gdGhpcy5tb2RlbC50b3B8fDF9c2V0IHRvcChlKXt0aGlzLm1vZGVsLnRvcD1lfWdldCBsZWZ0KCl7cmV0dXJuIHRoaXMubW9kZWwubGVmdHx8MX1zZXQgbGVmdChlKXt0aGlzLm1vZGVsLmxlZnQ9ZX1nZXQgYm90dG9tKCl7cmV0dXJuIHRoaXMubW9kZWwuYm90dG9tfHwxfXNldCBib3R0b20oZSl7dGhpcy5tb2RlbC5ib3R0b209ZX1nZXQgcmlnaHQoKXtyZXR1cm4gdGhpcy5tb2RlbC5yaWdodHx8MX1zZXQgcmlnaHQoZSl7dGhpcy5tb2RlbC5yaWdodD1lfWdldCBzaGVldE5hbWUoKXtyZXR1cm4gdGhpcy5tb2RlbC5zaGVldE5hbWV9c2V0IHNoZWV0TmFtZShlKXt0aGlzLm1vZGVsLnNoZWV0TmFtZT1lfWdldCBfc2VyaWFsaXNlZFNoZWV0TmFtZSgpe2NvbnN0e3NoZWV0TmFtZTplfT10aGlzLm1vZGVsO3JldHVybiBlPy9eW2EtekEtWjAtOV0qJC8udGVzdChlKT9lK1wiIVwiOmAnJHtlfSchYDpcIlwifWV4cGFuZChlLHQscixuKXsoIXRoaXMubW9kZWwudG9wfHxlPHRoaXMudG9wKSYmKHRoaXMudG9wPWUpLCghdGhpcy5tb2RlbC5sZWZ0fHx0PHRoaXMubGVmdCkmJih0aGlzLmxlZnQ9dCksKCF0aGlzLm1vZGVsLmJvdHRvbXx8cj50aGlzLmJvdHRvbSkmJih0aGlzLmJvdHRvbT1yKSwoIXRoaXMubW9kZWwucmlnaHR8fG4+dGhpcy5yaWdodCkmJih0aGlzLnJpZ2h0PW4pfWV4cGFuZFJvdyhlKXtpZihlKXtjb25zdHtkaW1lbnNpb25zOnQsbnVtYmVyOnJ9PWU7dCYmdGhpcy5leHBhbmQocix0Lm1pbixyLHQubWF4KX19ZXhwYW5kVG9BZGRyZXNzKGUpe2NvbnN0IHQ9bi5kZWNvZGVFeChlKTt0aGlzLmV4cGFuZCh0LnJvdyx0LmNvbCx0LnJvdyx0LmNvbCl9Z2V0IHRsKCl7cmV0dXJuIG4ubjJsKHRoaXMubGVmdCkrdGhpcy50b3B9Z2V0ICR0JGwoKXtyZXR1cm5gJCR7bi5uMmwodGhpcy5sZWZ0KX0kJHt0aGlzLnRvcH1gfWdldCBicigpe3JldHVybiBuLm4ybCh0aGlzLnJpZ2h0KSt0aGlzLmJvdHRvbX1nZXQgJGIkcigpe3JldHVybmAkJHtuLm4ybCh0aGlzLnJpZ2h0KX0kJHt0aGlzLmJvdHRvbX1gfWdldCByYW5nZSgpe3JldHVybmAke3RoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy50bH06JHt0aGlzLmJyfWB9Z2V0ICRyYW5nZSgpe3JldHVybmAke3RoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy4kdCRsfToke3RoaXMuJGIkcn1gfWdldCBzaG9ydFJhbmdlKCl7cmV0dXJuIHRoaXMuY291bnQ+MT90aGlzLnJhbmdlOnRoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy50bH1nZXQgJHNob3J0UmFuZ2UoKXtyZXR1cm4gdGhpcy5jb3VudD4xP3RoaXMuJHJhbmdlOnRoaXMuX3NlcmlhbGlzZWRTaGVldE5hbWUrdGhpcy4kdCRsfWdldCBjb3VudCgpe3JldHVybigxK3RoaXMuYm90dG9tLXRoaXMudG9wKSooMSt0aGlzLnJpZ2h0LXRoaXMubGVmdCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5yYW5nZX1pbnRlcnNlY3RzKGUpe3JldHVybighZS5zaGVldE5hbWV8fCF0aGlzLnNoZWV0TmFtZXx8ZS5zaGVldE5hbWU9PT10aGlzLnNoZWV0TmFtZSkmJighKGUuYm90dG9tPHRoaXMudG9wKSYmKCEoZS50b3A+dGhpcy5ib3R0b20pJiYoIShlLnJpZ2h0PHRoaXMubGVmdCkmJiEoZS5sZWZ0PnRoaXMucmlnaHQpKSkpfWNvbnRhaW5zKGUpe2NvbnN0IHQ9bi5kZWNvZGVFeChlKTtyZXR1cm4gdGhpcy5jb250YWluc0V4KHQpfWNvbnRhaW5zRXgoZSl7cmV0dXJuKCFlLnNoZWV0TmFtZXx8IXRoaXMuc2hlZXROYW1lfHxlLnNoZWV0TmFtZT09PXRoaXMuc2hlZXROYW1lKSYmKGUucm93Pj10aGlzLnRvcCYmZS5yb3c8PXRoaXMuYm90dG9tJiZlLmNvbD49dGhpcy5sZWZ0JiZlLmNvbDw9dGhpcy5yaWdodCl9Zm9yRWFjaEFkZHJlc3MoZSl7Zm9yKGxldCB0PXRoaXMubGVmdDt0PD10aGlzLnJpZ2h0O3QrKylmb3IobGV0IHI9dGhpcy50b3A7cjw9dGhpcy5ib3R0b207cisrKWUobi5lbmNvZGVBZGRyZXNzKHIsdCkscix0KX19dC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5fV0sMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4vZW51bXNcIikscz1lKFwiLi4vdXRpbHMvY29sLWNhY2hlXCIpLG89ZShcIi4vY2VsbFwiKTt0LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl93b3Jrc2hlZXQ9ZSx0aGlzLl9udW1iZXI9dCx0aGlzLl9jZWxscz1bXSx0aGlzLnN0eWxlPXt9LHRoaXMub3V0bGluZUxldmVsPTB9Z2V0IG51bWJlcigpe3JldHVybiB0aGlzLl9udW1iZXJ9Z2V0IHdvcmtzaGVldCgpe3JldHVybiB0aGlzLl93b3Jrc2hlZXR9Y29tbWl0KCl7dGhpcy5fd29ya3NoZWV0Ll9jb21taXRSb3codGhpcyl9ZGVzdHJveSgpe2RlbGV0ZSB0aGlzLl93b3Jrc2hlZXQsZGVsZXRlIHRoaXMuX2NlbGxzLGRlbGV0ZSB0aGlzLnN0eWxlfWZpbmRDZWxsKGUpe3JldHVybiB0aGlzLl9jZWxsc1tlLTFdfWdldENlbGxFeChlKXtsZXQgdD10aGlzLl9jZWxsc1tlLmNvbC0xXTtpZighdCl7Y29uc3Qgcj10aGlzLl93b3Jrc2hlZXQuZ2V0Q29sdW1uKGUuY29sKTt0PW5ldyBvKHRoaXMscixlLmFkZHJlc3MpLHRoaXMuX2NlbGxzW2UuY29sLTFdPXR9cmV0dXJuIHR9Z2V0Q2VsbChlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7Y29uc3QgdD10aGlzLl93b3Jrc2hlZXQuZ2V0Q29sdW1uS2V5KGUpO2U9dD90Lm51bWJlcjpzLmwybihlKX1yZXR1cm4gdGhpcy5fY2VsbHNbZS0xXXx8dGhpcy5nZXRDZWxsRXgoe2FkZHJlc3M6cy5lbmNvZGVBZGRyZXNzKHRoaXMuX251bWJlcixlKSxyb3c6dGhpcy5fbnVtYmVyLGNvbDplfSl9c3BsaWNlKGUsdCl7Y29uc3Qgcj1lK3Q7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobj4yP24tMjowKSxzPTI7czxuO3MrKylpW3MtMl09YXJndW1lbnRzW3NdO2NvbnN0IG89aS5sZW5ndGgtdCxhPXRoaXMuX2NlbGxzLmxlbmd0aDtsZXQgbCxjLHU7aWYobzwwKWZvcihsPWUraS5sZW5ndGg7bDw9YTtsKyspdT10aGlzLl9jZWxsc1tsLTFdLGM9dGhpcy5fY2VsbHNbbC1vLTFdLGM/KHU9dGhpcy5nZXRDZWxsKGwpLHUudmFsdWU9Yy52YWx1ZSx1LnN0eWxlPWMuc3R5bGUsdS5fY29tbWVudD1jLl9jb21tZW50KTp1JiYodS52YWx1ZT1udWxsLHUuc3R5bGU9e30sdS5fY29tbWVudD12b2lkIDApO2Vsc2UgaWYobz4wKWZvcihsPWE7bD49cjtsLS0pYz10aGlzLl9jZWxsc1tsLTFdLGM/KHU9dGhpcy5nZXRDZWxsKGwrbyksdS52YWx1ZT1jLnZhbHVlLHUuc3R5bGU9Yy5zdHlsZSx1Ll9jb21tZW50PWMuX2NvbW1lbnQpOnRoaXMuX2NlbGxzW2wrby0xXT12b2lkIDA7Zm9yKGw9MDtsPGkubGVuZ3RoO2wrKyl1PXRoaXMuZ2V0Q2VsbChlK2wpLHUudmFsdWU9aVtsXSx1LnN0eWxlPXt9LHUuX2NvbW1lbnQ9dm9pZCAwfWVhY2hDZWxsKGUsdCl7aWYodHx8KHQ9ZSxlPW51bGwpLGUmJmUuaW5jbHVkZUVtcHR5KXtjb25zdCBlPXRoaXMuX2NlbGxzLmxlbmd0aDtmb3IobGV0IHI9MTtyPD1lO3IrKyl0KHRoaXMuZ2V0Q2VsbChyKSxyKX1lbHNlIHRoaXMuX2NlbGxzLmZvckVhY2goKGUscik9PntlJiZlLnR5cGUhPT1pLlZhbHVlVHlwZS5OdWxsJiZ0KGUscisxKX0pfWFkZFBhZ2VCcmVhayhlLHQpe2NvbnN0IHI9dGhpcy5fd29ya3NoZWV0LG49TWF0aC5tYXgoMCxlLTEpfHwwLGk9TWF0aC5tYXgoMCx0LTEpfHwxNjgzOCxzPXtpZDp0aGlzLl9udW1iZXIsbWF4OmksbWFuOjF9O24mJihzLm1pbj1uKSxyLnJvd0JyZWFrcy5wdXNoKHMpfWdldCB2YWx1ZXMoKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLl9jZWxscy5mb3JFYWNoKHQ9Pnt0JiZ0LnR5cGUhPT1pLlZhbHVlVHlwZS5OdWxsJiYoZVt0LmNvbF09dC52YWx1ZSl9KSxlfXNldCB2YWx1ZXMoZSl7aWYodGhpcy5fY2VsbHM9W10sZSlpZihlIGluc3RhbmNlb2YgQXJyYXkpe2xldCB0PTA7ZS5oYXNPd25Qcm9wZXJ0eShcIjBcIikmJih0PTEpLGUuZm9yRWFjaCgoZSxyKT0+e3ZvaWQgMCE9PWUmJih0aGlzLmdldENlbGxFeCh7YWRkcmVzczpzLmVuY29kZUFkZHJlc3ModGhpcy5fbnVtYmVyLHIrdCkscm93OnRoaXMuX251bWJlcixjb2w6cit0fSkudmFsdWU9ZSl9KX1lbHNlIHRoaXMuX3dvcmtzaGVldC5lYWNoQ29sdW1uS2V5KCh0LHIpPT57dm9pZCAwIT09ZVtyXSYmKHRoaXMuZ2V0Q2VsbEV4KHthZGRyZXNzOnMuZW5jb2RlQWRkcmVzcyh0aGlzLl9udW1iZXIsdC5udW1iZXIpLHJvdzp0aGlzLl9udW1iZXIsY29sOnQubnVtYmVyfSkudmFsdWU9ZVtyXSl9KTtlbHNlO31nZXQgaGFzVmFsdWVzKCl7cmV0dXJuIG4uc29tZSh0aGlzLl9jZWxscyxlPT5lJiZlLnR5cGUhPT1pLlZhbHVlVHlwZS5OdWxsKX1nZXQgY2VsbENvdW50KCl7cmV0dXJuIHRoaXMuX2NlbGxzLmxlbmd0aH1nZXQgYWN0dWFsQ2VsbENvdW50KCl7bGV0IGU9MDtyZXR1cm4gdGhpcy5lYWNoQ2VsbCgoKT0+e2UrK30pLGV9Z2V0IGRpbWVuc2lvbnMoKXtsZXQgZT0wLHQ9MDtyZXR1cm4gdGhpcy5fY2VsbHMuZm9yRWFjaChyPT57ciYmci50eXBlIT09aS5WYWx1ZVR5cGUuTnVsbCYmKCghZXx8ZT5yLmNvbCkmJihlPXIuY29sKSx0PHIuY29sJiYodD1yLmNvbCkpfSksZT4wP3ttaW46ZSxtYXg6dH06bnVsbH1fYXBwbHlTdHlsZShlLHQpe3JldHVybiB0aGlzLnN0eWxlW2VdPXQsdGhpcy5fY2VsbHMuZm9yRWFjaChyPT57ciYmKHJbZV09dCl9KSx0fWdldCBudW1GbXQoKXtyZXR1cm4gdGhpcy5zdHlsZS5udW1GbXR9c2V0IG51bUZtdChlKXt0aGlzLl9hcHBseVN0eWxlKFwibnVtRm10XCIsZSl9Z2V0IGZvbnQoKXtyZXR1cm4gdGhpcy5zdHlsZS5mb250fXNldCBmb250KGUpe3RoaXMuX2FwcGx5U3R5bGUoXCJmb250XCIsZSl9Z2V0IGFsaWdubWVudCgpe3JldHVybiB0aGlzLnN0eWxlLmFsaWdubWVudH1zZXQgYWxpZ25tZW50KGUpe3RoaXMuX2FwcGx5U3R5bGUoXCJhbGlnbm1lbnRcIixlKX1nZXQgcHJvdGVjdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLnByb3RlY3Rpb259c2V0IHByb3RlY3Rpb24oZSl7dGhpcy5fYXBwbHlTdHlsZShcInByb3RlY3Rpb25cIixlKX1nZXQgYm9yZGVyKCl7cmV0dXJuIHRoaXMuc3R5bGUuYm9yZGVyfXNldCBib3JkZXIoZSl7dGhpcy5fYXBwbHlTdHlsZShcImJvcmRlclwiLGUpfWdldCBmaWxsKCl7cmV0dXJuIHRoaXMuc3R5bGUuZmlsbH1zZXQgZmlsbChlKXt0aGlzLl9hcHBseVN0eWxlKFwiZmlsbFwiLGUpfWdldCBoaWRkZW4oKXtyZXR1cm4hIXRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGUpe3RoaXMuX2hpZGRlbj1lfWdldCBvdXRsaW5lTGV2ZWwoKXtyZXR1cm4gdGhpcy5fb3V0bGluZUxldmVsfHwwfXNldCBvdXRsaW5lTGV2ZWwoZSl7dGhpcy5fb3V0bGluZUxldmVsPWV9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiEhKHRoaXMuX291dGxpbmVMZXZlbCYmdGhpcy5fb3V0bGluZUxldmVsPj10aGlzLl93b3Jrc2hlZXQucHJvcGVydGllcy5vdXRsaW5lTGV2ZWxSb3cpfWdldCBtb2RlbCgpe2NvbnN0IGU9W107bGV0IHQ9MCxyPTA7cmV0dXJuIHRoaXMuX2NlbGxzLmZvckVhY2gobj0+e2lmKG4pe2NvbnN0IGk9bi5tb2RlbDtpJiYoKCF0fHx0Pm4uY29sKSYmKHQ9bi5jb2wpLHI8bi5jb2wmJihyPW4uY29sKSxlLnB1c2goaSkpfX0pLHRoaXMuaGVpZ2h0fHxlLmxlbmd0aD97Y2VsbHM6ZSxudW1iZXI6dGhpcy5udW1iZXIsbWluOnQsbWF4OnIsaGVpZ2h0OnRoaXMuaGVpZ2h0LHN0eWxlOnRoaXMuc3R5bGUsaGlkZGVuOnRoaXMuaGlkZGVuLG91dGxpbmVMZXZlbDp0aGlzLm91dGxpbmVMZXZlbCxjb2xsYXBzZWQ6dGhpcy5jb2xsYXBzZWR9Om51bGx9c2V0IG1vZGVsKGUpe2lmKGUubnVtYmVyIT09dGhpcy5fbnVtYmVyKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcm93IG51bWJlciBpbiBtb2RlbFwiKTtsZXQgdDt0aGlzLl9jZWxscz1bXSxlLmNlbGxzLmZvckVhY2goZT0+e3N3aXRjaChlLnR5cGUpe2Nhc2Ugby5UeXBlcy5NZXJnZTpicmVhaztkZWZhdWx0OntsZXQgcjtpZihlLmFkZHJlc3Mpcj1zLmRlY29kZUFkZHJlc3MoZS5hZGRyZXNzKTtlbHNlIGlmKHQpe2NvbnN0e3JvdzplfT10LG49dC5jb2wrMTtyPXtyb3c6ZSxjb2w6bixhZGRyZXNzOnMuZW5jb2RlQWRkcmVzcyhlLG4pLCRjb2wkcm93OmAkJHtzLm4ybChuKX0kJHtlfWB9fXQ9cjt0aGlzLmdldENlbGxFeChyKS5tb2RlbD1lO2JyZWFrfX19KSxlLmhlaWdodD90aGlzLmhlaWdodD1lLmhlaWdodDpkZWxldGUgdGhpcy5oZWlnaHQsdGhpcy5oaWRkZW49ZS5oaWRkZW4sdGhpcy5vdXRsaW5lTGV2ZWw9ZS5vdXRsaW5lTGV2ZWx8fDAsdGhpcy5zdHlsZT1lLnN0eWxlJiZKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUuc3R5bGUpKXx8e319fX0se1wiLi4vdXRpbHMvY29sLWNhY2hlXCI6MTksXCIuLi91dGlscy91bmRlci1kYXNoXCI6MjYsXCIuL2NlbGxcIjozLFwiLi9lbnVtc1wiOjd9XSwxMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL3V0aWxzL2NvbC1jYWNoZVwiKTtjbGFzcyBpe2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLnRhYmxlPWUsdGhpcy5jb2x1bW49dCx0aGlzLmluZGV4PXJ9X3NldChlLHQpe3RoaXMudGFibGUuY2FjaGVTdGF0ZSgpLHRoaXMuY29sdW1uW2VdPXR9Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5jb2x1bW4ubmFtZX1zZXQgbmFtZShlKXt0aGlzLl9zZXQoXCJuYW1lXCIsZSl9Z2V0IGZpbHRlckJ1dHRvbigpe3JldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJCdXR0b259c2V0IGZpbHRlckJ1dHRvbihlKXt0aGlzLmNvbHVtbi5maWx0ZXJCdXR0b249ZX1nZXQgc3R5bGUoKXtyZXR1cm4gdGhpcy5jb2x1bW4uc3R5bGV9c2V0IHN0eWxlKGUpe3RoaXMuY29sdW1uLnN0eWxlPWV9Z2V0IHRvdGFsc1Jvd0xhYmVsKCl7cmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsc1Jvd0xhYmVsfXNldCB0b3RhbHNSb3dMYWJlbChlKXt0aGlzLl9zZXQoXCJ0b3RhbHNSb3dMYWJlbFwiLGUpfWdldCB0b3RhbHNSb3dGdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbHVtbi50b3RhbHNSb3dGdW5jdGlvbn1zZXQgdG90YWxzUm93RnVuY3Rpb24oZSl7dGhpcy5fc2V0KFwidG90YWxzUm93RnVuY3Rpb25cIixlKX1nZXQgdG90YWxzUm93UmVzdWx0KCl7cmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsc1Jvd1Jlc3VsdH1zZXQgdG90YWxzUm93UmVzdWx0KGUpe3RoaXMuX3NldChcInRvdGFsc1Jvd1Jlc3VsdFwiLGUpfWdldCB0b3RhbHNSb3dGb3JtdWxhKCl7cmV0dXJuIHRoaXMuY29sdW1uLnRvdGFsc1Jvd0Zvcm11bGF9c2V0IHRvdGFsc1Jvd0Zvcm11bGEoZSl7dGhpcy5fc2V0KFwidG90YWxzUm93Rm9ybXVsYVwiLGUpfX10LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLndvcmtzaGVldD1lLHQmJih0aGlzLnRhYmxlPXQsdGhpcy52YWxpZGF0ZSgpLHRoaXMuc3RvcmUoKSl9Z2V0Rm9ybXVsYShlKXtzd2l0Y2goZS50b3RhbHNSb3dGdW5jdGlvbil7Y2FzZVwibm9uZVwiOnJldHVybiBudWxsO2Nhc2VcImF2ZXJhZ2VcIjpyZXR1cm5gU1VCVE9UQUwoMTAxLCR7dGhpcy50YWJsZS5uYW1lfVske2UubmFtZX1dKWA7Y2FzZVwiY291bnROdW1zXCI6cmV0dXJuYFNVQlRPVEFMKDEwMiwke3RoaXMudGFibGUubmFtZX1bJHtlLm5hbWV9XSlgO2Nhc2VcImNvdW50XCI6cmV0dXJuYFNVQlRPVEFMKDEwMywke3RoaXMudGFibGUubmFtZX1bJHtlLm5hbWV9XSlgO2Nhc2VcIm1heFwiOnJldHVybmBTVUJUT1RBTCgxMDQsJHt0aGlzLnRhYmxlLm5hbWV9WyR7ZS5uYW1lfV0pYDtjYXNlXCJtaW5cIjpyZXR1cm5gU1VCVE9UQUwoMTA1LCR7dGhpcy50YWJsZS5uYW1lfVske2UubmFtZX1dKWA7Y2FzZVwic3RkRGV2XCI6cmV0dXJuYFNVQlRPVEFMKDEwNiwke3RoaXMudGFibGUubmFtZX1bJHtlLm5hbWV9XSlgO2Nhc2VcInZhclwiOnJldHVybmBTVUJUT1RBTCgxMDcsJHt0aGlzLnRhYmxlLm5hbWV9WyR7ZS5uYW1lfV0pYDtjYXNlXCJzdW1cIjpyZXR1cm5gU1VCVE9UQUwoMTA5LCR7dGhpcy50YWJsZS5uYW1lfVske2UubmFtZX1dKWA7Y2FzZVwiY3VzdG9tXCI6cmV0dXJuIGUudG90YWxzUm93Rm9ybXVsYTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkludmFsaWQgVG90YWxzIFJvdyBGdW5jdGlvbjogXCIrZS50b3RhbHNSb3dGdW5jdGlvbil9fWdldCB3aWR0aCgpe3JldHVybiB0aGlzLnRhYmxlLmNvbHVtbnMubGVuZ3RofWdldCBoZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZS5yb3dzLmxlbmd0aH1nZXQgZmlsdGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVpZ2h0Kyh0aGlzLnRhYmxlLmhlYWRlclJvdz8xOjApfWdldCB0YWJsZUhlaWdodCgpe3JldHVybiB0aGlzLmZpbHRlckhlaWdodCsodGhpcy50YWJsZS50b3RhbHNSb3c/MTowKX12YWxpZGF0ZSgpe2NvbnN0e3RhYmxlOmV9PXRoaXMsdD0oZSx0LHIpPT57dm9pZCAwPT09ZVt0XSYmKGVbdF09cil9O3QoZSxcImhlYWRlclJvd1wiLCEwKSx0KGUsXCJ0b3RhbHNSb3dcIiwhMSksdChlLFwic3R5bGVcIix7fSksdChlLnN0eWxlLFwidGhlbWVcIixcIlRhYmxlU3R5bGVNZWRpdW0yXCIpLHQoZS5zdHlsZSxcInNob3dGaXJzdENvbHVtblwiLCExKSx0KGUuc3R5bGUsXCJzaG93TGFzdENvbHVtblwiLCExKSx0KGUuc3R5bGUsXCJzaG93Um93U3RyaXBlc1wiLCExKSx0KGUuc3R5bGUsXCJzaG93Q29sdW1uU3RyaXBlc1wiLCExKTtjb25zdCByPShlLHQpPT57aWYoIWUpdGhyb3cgbmV3IEVycm9yKHQpfTtyKGUucmVmLFwiVGFibGUgbXVzdCBoYXZlIHJlZlwiKSxyKGUuY29sdW1ucyxcIlRhYmxlIG11c3QgaGF2ZSBjb2x1bW4gZGVmaW5pdGlvbnNcIikscihlLnJvd3MsXCJUYWJsZSBtdXN0IGhhdmUgcm93IGRlZmluaXRpb25zXCIpLGUudGw9bi5kZWNvZGVBZGRyZXNzKGUucmVmKTtjb25zdHtyb3c6aSxjb2w6c309ZS50bDtyKGk+MCxcIlRhYmxlIG11c3QgYmUgb24gdmFsaWQgcm93XCIpLHIocz4wLFwiVGFibGUgbXVzdCBiZSBvbiB2YWxpZCBjb2xcIik7Y29uc3R7d2lkdGg6byxmaWx0ZXJIZWlnaHQ6YSx0YWJsZUhlaWdodDpsfT10aGlzO2UuYXV0b0ZpbHRlclJlZj1uLmVuY29kZShpLHMsaSthLTEscytvLTEpLGUudGFibGVSZWY9bi5lbmNvZGUoaSxzLGkrbC0xLHMrby0xKSxlLmNvbHVtbnMuZm9yRWFjaCgoZSxuKT0+e3IoZS5uYW1lLGBDb2x1bW4gJHtufSBtdXN0IGhhdmUgYSBuYW1lYCksMD09PW4/dChlLFwidG90YWxzUm93TGFiZWxcIixcIlRvdGFsXCIpOih0KGUsXCJ0b3RhbHNSb3dGdW5jdGlvblwiLFwibm9uZVwiKSxlLnRvdGFsc1Jvd0Zvcm11bGE9dGhpcy5nZXRGb3JtdWxhKGUpKX0pfXN0b3JlKCl7Y29uc3QgZT0oZSx0KT0+e3QmJk9iamVjdC5rZXlzKHQpLmZvckVhY2gocj0+e2Vbcl09dFtyXX0pfSx7d29ya3NoZWV0OnQsdGFibGU6cn09dGhpcyx7cm93Om4sY29sOml9PXIudGw7bGV0IHM9MDtpZihyLmhlYWRlclJvdyl7Y29uc3Qgbz10LmdldFJvdyhuK3MrKyk7ci5jb2x1bW5zLmZvckVhY2goKHQscik9Pntjb25zdHtzdHlsZTpuLG5hbWU6c309dCxhPW8uZ2V0Q2VsbChpK3IpO2EudmFsdWU9cyxlKGEsbil9KX1pZihyLnJvd3MuZm9yRWFjaChvPT57Y29uc3QgYT10LmdldFJvdyhuK3MrKyk7by5mb3JFYWNoKCh0LG4pPT57Y29uc3Qgcz1hLmdldENlbGwoaStuKTtzLnZhbHVlPXQsZShzLHIuY29sdW1uc1tuXS5zdHlsZSl9KX0pLHIudG90YWxzUm93KXtjb25zdCBvPXQuZ2V0Um93KG4rcysrKTtyLmNvbHVtbnMuZm9yRWFjaCgodCxyKT0+e2NvbnN0IG49by5nZXRDZWxsKGkrcik7aWYoMD09PXIpbi52YWx1ZT10LnRvdGFsc1Jvd0xhYmVsO2Vsc2V7Y29uc3QgZT10aGlzLmdldEZvcm11bGEodCk7bi52YWx1ZT1lP3tmb3JtdWxhOnQudG90YWxzUm93Rm9ybXVsYSxyZXN1bHQ6dC50b3RhbHNSb3dSZXN1bHR9Om51bGx9ZShuLHQuc3R5bGUpfSl9fWxvYWQoZSl7Y29uc3R7dGFibGU6dH09dGhpcyx7cm93OnIsY29sOm59PXQudGw7bGV0IGk9MDtpZih0LmhlYWRlclJvdyl7Y29uc3Qgcz1lLmdldFJvdyhyK2krKyk7dC5jb2x1bW5zLmZvckVhY2goKGUsdCk9PntzLmdldENlbGwobit0KS52YWx1ZT1lLm5hbWV9KX1pZih0LnJvd3MuZm9yRWFjaCh0PT57Y29uc3Qgcz1lLmdldFJvdyhyK2krKyk7dC5mb3JFYWNoKChlLHQpPT57cy5nZXRDZWxsKG4rdCkudmFsdWU9ZX0pfSksdC50b3RhbHNSb3cpe2NvbnN0IHM9ZS5nZXRSb3cocitpKyspO3QuY29sdW1ucy5mb3JFYWNoKChlLHQpPT57Y29uc3Qgcj1zLmdldENlbGwobit0KTtpZigwPT09dClyLnZhbHVlPWUudG90YWxzUm93TGFiZWw7ZWxzZXt0aGlzLmdldEZvcm11bGEoZSkmJihyLnZhbHVlPXtmb3JtdWxhOmUudG90YWxzUm93Rm9ybXVsYSxyZXN1bHQ6ZS50b3RhbHNSb3dSZXN1bHR9KX19KX19Z2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMudGFibGV9c2V0IG1vZGVsKGUpe3RoaXMudGFibGU9ZX1jYWNoZVN0YXRlKCl7dGhpcy5fY2FjaGV8fCh0aGlzLl9jYWNoZT17cmVmOnRoaXMucmVmLHdpZHRoOnRoaXMud2lkdGgsdGFibGVIZWlnaHQ6dGhpcy50YWJsZUhlaWdodH0pfWNvbW1pdCgpe2lmKCF0aGlzLl9jYWNoZSlyZXR1cm47dGhpcy52YWxpZGF0ZSgpO2NvbnN0IGU9bi5kZWNvZGVBZGRyZXNzKHRoaXMuX2NhY2hlLnJlZik7aWYodGhpcy5yZWYhPT10aGlzLl9jYWNoZS5yZWYpZm9yKGxldCB0PTA7dDx0aGlzLl9jYWNoZS50YWJsZUhlaWdodDt0Kyspe2NvbnN0IHI9dGhpcy53b3Jrc2hlZXQuZ2V0Um93KGUucm93K3QpO2ZvcihsZXQgdD0wO3Q8dGhpcy5fY2FjaGUud2lkdGg7dCsrKXtyLmdldENlbGwoZS5jb2wrdCkudmFsdWU9bnVsbH19ZWxzZXtmb3IobGV0IHQ9dGhpcy50YWJsZUhlaWdodDt0PHRoaXMuX2NhY2hlLnRhYmxlSGVpZ2h0O3QrKyl7Y29uc3Qgcj10aGlzLndvcmtzaGVldC5nZXRSb3coZS5yb3crdCk7Zm9yKGxldCB0PTA7dDx0aGlzLl9jYWNoZS53aWR0aDt0Kyspe3IuZ2V0Q2VsbChlLmNvbCt0KS52YWx1ZT1udWxsfX1mb3IobGV0IHQ9MDt0PHRoaXMudGFibGVIZWlnaHQ7dCsrKXtjb25zdCByPXRoaXMud29ya3NoZWV0LmdldFJvdyhlLnJvdyt0KTtmb3IobGV0IHQ9dGhpcy53aWR0aDt0PHRoaXMuX2NhY2hlLndpZHRoO3QrKyl7ci5nZXRDZWxsKGUuY29sK3QpLnZhbHVlPW51bGx9fX10aGlzLnN0b3JlKCl9YWRkUm93KGUsdCl7dGhpcy5jYWNoZVN0YXRlKCksdm9pZCAwPT09dD90aGlzLnRhYmxlLnJvd3MucHVzaChlKTp0aGlzLnRhYmxlLnJvd3Muc3BsaWNlKHQsMCxlKX1yZW1vdmVSb3dzKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2FjaGVTdGF0ZSgpLHRoaXMudGFibGUucm93cy5zcGxpY2UoZSx0KX1nZXRDb2x1bW4oZSl7Y29uc3QgdD10aGlzLnRhYmxlLmNvbHVtbnNbZV07cmV0dXJuIG5ldyBpKHRoaXMsdCxlKX1hZGRDb2x1bW4oZSx0LHIpe3RoaXMuY2FjaGVTdGF0ZSgpLHZvaWQgMD09PXI/KHRoaXMudGFibGUuY29sdW1ucy5wdXNoKGUpLHRoaXMudGFibGUucm93cy5mb3JFYWNoKChlLHIpPT57ZS5wdXNoKHRbcl0pfSkpOih0aGlzLnRhYmxlLmNvbHVtbnMuc3BsaWNlKHIsMCxlKSx0aGlzLnRhYmxlLnJvd3MuZm9yRWFjaCgoZSxuKT0+e2Uuc3BsaWNlKHIsMCx0W25dKX0pKX1yZW1vdmVDb2x1bW5zKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2FjaGVTdGF0ZSgpLHRoaXMudGFibGUuY29sdW1ucy5zcGxpY2UoZSx0KSx0aGlzLnRhYmxlLnJvd3MuZm9yRWFjaChyPT57ci5zcGxpY2UoZSx0KX0pfV9hc3NpZ24oZSx0LHIpe3RoaXMuY2FjaGVTdGF0ZSgpLGVbdF09cn1nZXQgcmVmKCl7cmV0dXJuIHRoaXMudGFibGUucmVmfXNldCByZWYoZSl7dGhpcy5fYXNzaWduKHRoaXMudGFibGUsXCJyZWZcIixlKX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLnRhYmxlLm5hbWV9c2V0IG5hbWUoZSl7dGhpcy50YWJsZS5uYW1lPWV9Z2V0IGRpc3BsYXlOYW1lKCl7cmV0dXJuIHRoaXMudGFibGUuZGlzcGx5TmFtZXx8dGhpcy50YWJsZS5uYW1lfXNldCBkaXNwbGF5TmFtZW5hbWUoZSl7dGhpcy50YWJsZS5kaXNwbGF5TmFtZT1lfWdldCBoZWFkZXJSb3coKXtyZXR1cm4gdGhpcy50YWJsZS5oZWFkZXJSb3d9c2V0IGhlYWRlclJvdyhlKXt0aGlzLl9hc3NpZ24odGhpcy50YWJsZSxcImhlYWRlclJvd1wiLGUpfWdldCB0b3RhbHNSb3coKXtyZXR1cm4gdGhpcy50YWJsZS50b3RhbHNSb3d9c2V0IHRvdGFsc1JvdyhlKXt0aGlzLl9hc3NpZ24odGhpcy50YWJsZSxcInRvdGFsc1Jvd1wiLGUpfWdldCB0aGVtZSgpe3JldHVybiB0aGlzLnRhYmxlLnN0eWxlLm5hbWV9c2V0IHRoZW1lKGUpe3RoaXMudGFibGUuc3R5bGUubmFtZT1lfWdldCBzaG93Rmlyc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy50YWJsZS5zdHlsZS5zaG93Rmlyc3RDb2x1bW59c2V0IHNob3dGaXJzdENvbHVtbihlKXt0aGlzLnRhYmxlLnN0eWxlLnNob3dGaXJzdENvbHVtbj1lfWdldCBzaG93TGFzdENvbHVtbigpe3JldHVybiB0aGlzLnRhYmxlLnN0eWxlLnNob3dMYXN0Q29sdW1ufXNldCBzaG93TGFzdENvbHVtbihlKXt0aGlzLnRhYmxlLnN0eWxlLnNob3dMYXN0Q29sdW1uPWV9Z2V0IHNob3dSb3dTdHJpcGVzKCl7cmV0dXJuIHRoaXMudGFibGUuc3R5bGUuc2hvd1Jvd1N0cmlwZXN9c2V0IHNob3dSb3dTdHJpcGVzKGUpe3RoaXMudGFibGUuc3R5bGUuc2hvd1Jvd1N0cmlwZXM9ZX1nZXQgc2hvd0NvbHVtblN0cmlwZXMoKXtyZXR1cm4gdGhpcy50YWJsZS5zdHlsZS5zaG93Q29sdW1uU3RyaXBlc31zZXQgc2hvd0NvbHVtblN0cmlwZXMoZSl7dGhpcy50YWJsZS5zdHlsZS5zaG93Q29sdW1uU3RyaXBlcz1lfX19LHtcIi4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5fV0sMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL3dvcmtzaGVldFwiKSxpPWUoXCIuL2RlZmluZWQtbmFtZXNcIikscz1lKFwiLi4veGxzeC94bHN4XCIpLG89ZShcIi4uL2Nzdi9jc3ZcIik7dC5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5jYXRlZ29yeT1cIlwiLHRoaXMuY29tcGFueT1cIlwiLHRoaXMuY3JlYXRlZD1uZXcgRGF0ZSx0aGlzLmRlc2NyaXB0aW9uPVwiXCIsdGhpcy5rZXl3b3Jkcz1cIlwiLHRoaXMubWFuYWdlcj1cIlwiLHRoaXMubW9kaWZpZWQ9dGhpcy5jcmVhdGVkLHRoaXMucHJvcGVydGllcz17fSx0aGlzLmNhbGNQcm9wZXJ0aWVzPXt9LHRoaXMuX3dvcmtzaGVldHM9W10sdGhpcy5zdWJqZWN0PVwiXCIsdGhpcy50aXRsZT1cIlwiLHRoaXMudmlld3M9W10sdGhpcy5tZWRpYT1bXSx0aGlzLl9kZWZpbmVkTmFtZXM9bmV3IGl9Z2V0IHhsc3goKXtyZXR1cm4gdGhpcy5feGxzeHx8KHRoaXMuX3hsc3g9bmV3IHModGhpcykpLHRoaXMuX3hsc3h9Z2V0IGNzdigpe3JldHVybiB0aGlzLl9jc3Z8fCh0aGlzLl9jc3Y9bmV3IG8odGhpcykpLHRoaXMuX2Nzdn1nZXQgbmV4dElkKCl7Zm9yKGxldCBlPTE7ZTx0aGlzLl93b3Jrc2hlZXRzLmxlbmd0aDtlKyspaWYoIXRoaXMuX3dvcmtzaGVldHNbZV0pcmV0dXJuIGU7cmV0dXJuIHRoaXMuX3dvcmtzaGVldHMubGVuZ3RofHwxfWFkZFdvcmtzaGVldChlLHQpe2NvbnN0IHI9dGhpcy5uZXh0SWQ7dCYmKFwic3RyaW5nXCI9PXR5cGVvZiB0Pyhjb25zb2xlLnRyYWNlKCd0YWJDb2xvciBhcmd1bWVudCBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQobmFtZSwge3Byb3BlcnRpZXM6IHsgdGFiQ29sb3I6IHsgYXJnYjogXCJyYmcgdmFsdWVcIiB9IH0nKSx0PXtwcm9wZXJ0aWVzOnt0YWJDb2xvcjp7YXJnYjp0fX19KToodC5hcmdifHx0LnRoZW1lfHx0LmluZGV4ZWQpJiYoY29uc29sZS50cmFjZShcInRhYkNvbG9yIGFyZ3VtZW50IGlzIG5vdyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHdvcmtib29rLmFkZFdvcmtzaGVldChuYW1lLCB7cHJvcGVydGllczogeyB0YWJDb2xvcjogeyAuLi4gfSB9XCIpLHQ9e3Byb3BlcnRpZXM6e3RhYkNvbG9yOnR9fSkpO2NvbnN0IGk9dGhpcy5fd29ya3NoZWV0cy5yZWR1Y2UoKGUsdCk9Pih0JiZ0Lm9yZGVyTm8pPmU/dC5vcmRlck5vOmUsMCkscz1PYmplY3QuYXNzaWduKHt9LHQse2lkOnIsbmFtZTplLG9yZGVyTm86aSsxLHdvcmtib29rOnRoaXN9KSxvPW5ldyBuKHMpO3JldHVybiB0aGlzLl93b3Jrc2hlZXRzW3JdPW8sb31yZW1vdmVXb3Jrc2hlZXRFeChlKXtkZWxldGUgdGhpcy5fd29ya3NoZWV0c1tlLmlkXX1yZW1vdmVXb3Jrc2hlZXQoZSl7Y29uc3QgdD10aGlzLmdldFdvcmtzaGVldChlKTt0JiZ0LmRlc3Ryb3koKX1nZXRXb3Jrc2hlZXQoZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5fd29ya3NoZWV0cy5maW5kKEJvb2xlYW4pOlwibnVtYmVyXCI9PXR5cGVvZiBlP3RoaXMuX3dvcmtzaGVldHNbZV06XCJzdHJpbmdcIj09dHlwZW9mIGU/dGhpcy5fd29ya3NoZWV0cy5maW5kKHQ9PnQmJnQubmFtZT09PWUpOnZvaWQgMH1nZXQgd29ya3NoZWV0cygpe3JldHVybiB0aGlzLl93b3Jrc2hlZXRzLnNsaWNlKDEpLnNvcnQoKGUsdCk9PmUub3JkZXJOby10Lm9yZGVyTm8pLmZpbHRlcihCb29sZWFuKX1lYWNoU2hlZXQoZSl7dGhpcy53b3Jrc2hlZXRzLmZvckVhY2godD0+e2UodCx0LmlkKX0pfWdldCBkZWZpbmVkTmFtZXMoKXtyZXR1cm4gdGhpcy5fZGVmaW5lZE5hbWVzfWNsZWFyVGhlbWVzKCl7dGhpcy5fdGhlbWVzPXZvaWQgMH1hZGRJbWFnZShlKXtjb25zdCB0PXRoaXMubWVkaWEubGVuZ3RoO3JldHVybiB0aGlzLm1lZGlhLnB1c2goT2JqZWN0LmFzc2lnbih7fSxlLHt0eXBlOlwiaW1hZ2VcIn0pKSx0fWdldEltYWdlKGUpe3JldHVybiB0aGlzLm1lZGlhW2VdfWdldCBtb2RlbCgpe3JldHVybntjcmVhdG9yOnRoaXMuY3JlYXRvcnx8XCJVbmtub3duXCIsbGFzdE1vZGlmaWVkQnk6dGhpcy5sYXN0TW9kaWZpZWRCeXx8XCJVbmtub3duXCIsbGFzdFByaW50ZWQ6dGhpcy5sYXN0UHJpbnRlZCxjcmVhdGVkOnRoaXMuY3JlYXRlZCxtb2RpZmllZDp0aGlzLm1vZGlmaWVkLHByb3BlcnRpZXM6dGhpcy5wcm9wZXJ0aWVzLHdvcmtzaGVldHM6dGhpcy53b3Jrc2hlZXRzLm1hcChlPT5lLm1vZGVsKSxzaGVldHM6dGhpcy53b3Jrc2hlZXRzLm1hcChlPT5lLm1vZGVsKS5maWx0ZXIoQm9vbGVhbiksZGVmaW5lZE5hbWVzOnRoaXMuX2RlZmluZWROYW1lcy5tb2RlbCx2aWV3czp0aGlzLnZpZXdzLGNvbXBhbnk6dGhpcy5jb21wYW55LG1hbmFnZXI6dGhpcy5tYW5hZ2VyLHRpdGxlOnRoaXMudGl0bGUsc3ViamVjdDp0aGlzLnN1YmplY3Qsa2V5d29yZHM6dGhpcy5rZXl3b3JkcyxjYXRlZ29yeTp0aGlzLmNhdGVnb3J5LGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbGFuZ3VhZ2U6dGhpcy5sYW5ndWFnZSxyZXZpc2lvbjp0aGlzLnJldmlzaW9uLGNvbnRlbnRTdGF0dXM6dGhpcy5jb250ZW50U3RhdHVzLHRoZW1lczp0aGlzLl90aGVtZXMsbWVkaWE6dGhpcy5tZWRpYSxjYWxjUHJvcGVydGllczp0aGlzLmNhbGNQcm9wZXJ0aWVzfX1zZXQgbW9kZWwoZSl7dGhpcy5jcmVhdG9yPWUuY3JlYXRvcix0aGlzLmxhc3RNb2RpZmllZEJ5PWUubGFzdE1vZGlmaWVkQnksdGhpcy5sYXN0UHJpbnRlZD1lLmxhc3RQcmludGVkLHRoaXMuY3JlYXRlZD1lLmNyZWF0ZWQsdGhpcy5tb2RpZmllZD1lLm1vZGlmaWVkLHRoaXMuY29tcGFueT1lLmNvbXBhbnksdGhpcy5tYW5hZ2VyPWUubWFuYWdlcix0aGlzLnRpdGxlPWUudGl0bGUsdGhpcy5zdWJqZWN0PWUuc3ViamVjdCx0aGlzLmtleXdvcmRzPWUua2V5d29yZHMsdGhpcy5jYXRlZ29yeT1lLmNhdGVnb3J5LHRoaXMuZGVzY3JpcHRpb249ZS5kZXNjcmlwdGlvbix0aGlzLmxhbmd1YWdlPWUubGFuZ3VhZ2UsdGhpcy5yZXZpc2lvbj1lLnJldmlzaW9uLHRoaXMuY29udGVudFN0YXR1cz1lLmNvbnRlbnRTdGF0dXMsdGhpcy5wcm9wZXJ0aWVzPWUucHJvcGVydGllcyx0aGlzLmNhbGNQcm9wZXJ0aWVzPWUuY2FsY1Byb3BlcnRpZXMsdGhpcy5fd29ya3NoZWV0cz1bXSxlLndvcmtzaGVldHMuZm9yRWFjaCh0PT57Y29uc3R7aWQ6cixuYW1lOmksc3RhdGU6c309dCxvPWUuc2hlZXRzJiZlLnNoZWV0cy5maW5kSW5kZXgoZT0+ZS5pZD09PXIpOyh0aGlzLl93b3Jrc2hlZXRzW3JdPW5ldyBuKHtpZDpyLG5hbWU6aSxvcmRlck5vOm8sc3RhdGU6cyx3b3JrYm9vazp0aGlzfSkpLm1vZGVsPXR9KSx0aGlzLl9kZWZpbmVkTmFtZXMubW9kZWw9ZS5kZWZpbmVkTmFtZXMsdGhpcy52aWV3cz1lLnZpZXdzLHRoaXMuX3RoZW1lcz1lLnRoZW1lcyx0aGlzLm1lZGlhPWUubWVkaWF8fFtdfX19LHtcIi4uL2Nzdi9jc3ZcIjoxLFwiLi4veGxzeC94bHN4XCI6MTQ0LFwiLi9kZWZpbmVkLW5hbWVzXCI6NixcIi4vd29ya3NoZWV0XCI6MTR9XSwxNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIiksaT1lKFwiLi4vdXRpbHMvY29sLWNhY2hlXCIpLHM9ZShcIi4vcmFuZ2VcIiksbz1lKFwiLi9yb3dcIiksYT1lKFwiLi9jb2x1bW5cIiksbD1lKFwiLi9lbnVtc1wiKSxjPWUoXCIuL2ltYWdlXCIpLHU9ZShcIi4vdGFibGVcIiksaD1lKFwiLi9kYXRhLXZhbGlkYXRpb25zXCIpLGY9ZShcIi4uL3V0aWxzL2VuY3J5cHRvclwiKSx7Y29weVN0eWxlOmR9PWUoXCIuLi91dGlscy9jb3B5LXN0eWxlXCIpO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlPWV8fHt9LHRoaXMuX3dvcmtib29rPWUud29ya2Jvb2ssdGhpcy5pZD1lLmlkLHRoaXMub3JkZXJObz1lLm9yZGVyTm8sdGhpcy5uYW1lPWUubmFtZSx0aGlzLnN0YXRlPWUuc3RhdGV8fFwidmlzaWJsZVwiLHRoaXMuX3Jvd3M9W10sdGhpcy5fY29sdW1ucz1udWxsLHRoaXMuX2tleXM9e30sdGhpcy5fbWVyZ2VzPXt9LHRoaXMucm93QnJlYWtzPVtdLHRoaXMucHJvcGVydGllcz1PYmplY3QuYXNzaWduKHt9LHtkZWZhdWx0Um93SGVpZ2h0OjE1LGR5RGVzY2VudDo1NSxvdXRsaW5lTGV2ZWxDb2w6MCxvdXRsaW5lTGV2ZWxSb3c6MH0sZS5wcm9wZXJ0aWVzKSx0aGlzLnBhZ2VTZXR1cD1PYmplY3QuYXNzaWduKHt9LHttYXJnaW5zOntsZWZ0Oi43LHJpZ2h0Oi43LHRvcDouNzUsYm90dG9tOi43NSxoZWFkZXI6LjMsZm9vdGVyOi4zfSxvcmllbnRhdGlvbjpcInBvcnRyYWl0XCIsaG9yaXpvbnRhbERwaTo0Mjk0OTY3Mjk1LHZlcnRpY2FsRHBpOjQyOTQ5NjcyOTUsZml0VG9QYWdlOiEoIWUucGFnZVNldHVwfHwhZS5wYWdlU2V0dXAuZml0VG9XaWR0aCYmIWUucGFnZVNldHVwLmZpdFRvSGVpZ2h0fHxlLnBhZ2VTZXR1cC5zY2FsZSkscGFnZU9yZGVyOlwiZG93blRoZW5PdmVyXCIsYmxhY2tBbmRXaGl0ZTohMSxkcmFmdDohMSxjZWxsQ29tbWVudHM6XCJOb25lXCIsZXJyb3JzOlwiZGlzcGxheWVkXCIsc2NhbGU6MTAwLGZpdFRvV2lkdGg6MSxmaXRUb0hlaWdodDoxLHBhcGVyU2l6ZTp2b2lkIDAsc2hvd1Jvd0NvbEhlYWRlcnM6ITEsc2hvd0dyaWRMaW5lczohMSxmaXJzdFBhZ2VOdW1iZXI6dm9pZCAwLGhvcml6b250YWxDZW50ZXJlZDohMSx2ZXJ0aWNhbENlbnRlcmVkOiExLHJvd0JyZWFrczpudWxsLGNvbEJyZWFrczpudWxsfSxlLnBhZ2VTZXR1cCksdGhpcy5oZWFkZXJGb290ZXI9T2JqZWN0LmFzc2lnbih7fSx7ZGlmZmVyZW50Rmlyc3Q6ITEsZGlmZmVyZW50T2RkRXZlbjohMSxvZGRIZWFkZXI6bnVsbCxvZGRGb290ZXI6bnVsbCxldmVuSGVhZGVyOm51bGwsZXZlbkZvb3RlcjpudWxsLGZpcnN0SGVhZGVyOm51bGwsZmlyc3RGb290ZXI6bnVsbH0sZS5oZWFkZXJGb290ZXIpLHRoaXMuZGF0YVZhbGlkYXRpb25zPW5ldyBoLHRoaXMudmlld3M9ZS52aWV3c3x8W10sdGhpcy5hdXRvRmlsdGVyPWUuYXV0b0ZpbHRlcnx8bnVsbCx0aGlzLl9tZWRpYT1bXSx0aGlzLnNoZWV0UHJvdGVjdGlvbj1udWxsLHRoaXMudGFibGVzPXt9LHRoaXMuY29uZGl0aW9uYWxGb3JtYXR0aW5ncz1bXX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfXNldCBuYW1lKGUpe2lmKHZvaWQgMD09PWUmJihlPVwic2hlZXRcIit0aGlzLmlkKSx0aGlzLl9uYW1lIT09ZSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiVGhlIG5hbWUgaGFzIHRvIGJlIGEgc3RyaW5nLlwiKTtpZihcIlwiPT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgbmFtZSBjYW4ndCBiZSBlbXB0eS5cIik7aWYoXCJIaXN0b3J5XCI9PT1lKXRocm93IG5ldyBFcnJvcignVGhlIG5hbWUgXCJIaXN0b3J5XCIgaXMgcHJvdGVjdGVkLiBQbGVhc2UgdXNlIGEgZGlmZmVyZW50IG5hbWUuJyk7aWYoL1sqPzovXFxcXFtcXF1dLy50ZXN0KGUpKXRocm93IG5ldyBFcnJvcihgV29ya3NoZWV0IG5hbWUgJHtlfSBjYW5ub3QgaW5jbHVkZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOiAqID8gOiBcXFxcIC8gWyBdYCk7aWYoLyheJyl8KCckKS8udGVzdChlKSl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgb2Ygd29ya3NoZWV0IG5hbWUgY2Fubm90IGJlIGEgc2luZ2xlIHF1b3RhdGlvbiBtYXJrOiBcIitlKTtpZihlJiZlLmxlbmd0aD4zMSYmKGNvbnNvbGUud2FybihgV29ya3NoZWV0IG5hbWUgJHtlfSBleGNlZWRzIDMxIGNoYXJzLiBUaGlzIHdpbGwgYmUgdHJ1bmNhdGVkYCksZT1lLnN1YnN0cmluZygwLDMxKSksdGhpcy5fd29ya2Jvb2suX3dvcmtzaGVldHMuZmluZCh0PT50JiZ0Lm5hbWUudG9Mb3dlckNhc2UoKT09PWUudG9Mb3dlckNhc2UoKSkpdGhyb3cgbmV3IEVycm9yKFwiV29ya3NoZWV0IG5hbWUgYWxyZWFkeSBleGlzdHM6IFwiK2UpO3RoaXMuX25hbWU9ZX19Z2V0IHdvcmtib29rKCl7cmV0dXJuIHRoaXMuX3dvcmtib29rfWRlc3Ryb3koKXt0aGlzLl93b3JrYm9vay5yZW1vdmVXb3Jrc2hlZXRFeCh0aGlzKX1nZXQgZGltZW5zaW9ucygpe2NvbnN0IGU9bmV3IHM7cmV0dXJuIHRoaXMuX3Jvd3MuZm9yRWFjaCh0PT57aWYodCl7Y29uc3Qgcj10LmRpbWVuc2lvbnM7ciYmZS5leHBhbmQodC5udW1iZXIsci5taW4sdC5udW1iZXIsci5tYXgpfX0pLGV9Z2V0IGNvbHVtbnMoKXtyZXR1cm4gdGhpcy5fY29sdW1uc31zZXQgY29sdW1ucyhlKXt0aGlzLl9oZWFkZXJSb3dDb3VudD1lLnJlZHVjZSgoZSx0KT0+e2NvbnN0IHI9KHQuaGVhZGVyPzE6dC5oZWFkZXJzJiZ0LmhlYWRlcnMubGVuZ3RoKXx8MDtyZXR1cm4gTWF0aC5tYXgoZSxyKX0sMCk7bGV0IHQ9MTtjb25zdCByPXRoaXMuX2NvbHVtbnM9W107ZS5mb3JFYWNoKGU9Pntjb25zdCBuPW5ldyBhKHRoaXMsdCsrLCExKTtyLnB1c2gobiksbi5kZWZuPWV9KX1nZXRDb2x1bW5LZXkoZSl7cmV0dXJuIHRoaXMuX2tleXNbZV19c2V0Q29sdW1uS2V5KGUsdCl7dGhpcy5fa2V5c1tlXT10fWRlbGV0ZUNvbHVtbktleShlKXtkZWxldGUgdGhpcy5fa2V5c1tlXX1lYWNoQ29sdW1uS2V5KGUpe24uZWFjaCh0aGlzLl9rZXlzLGUpfWdldENvbHVtbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7Y29uc3QgdD10aGlzLl9rZXlzW2VdO2lmKHQpcmV0dXJuIHQ7ZT1pLmwybihlKX1pZih0aGlzLl9jb2x1bW5zfHwodGhpcy5fY29sdW1ucz1bXSksZT50aGlzLl9jb2x1bW5zLmxlbmd0aCl7bGV0IHQ9dGhpcy5fY29sdW1ucy5sZW5ndGgrMTtmb3IoO3Q8PWU7KXRoaXMuX2NvbHVtbnMucHVzaChuZXcgYSh0aGlzLHQrKykpfXJldHVybiB0aGlzLl9jb2x1bW5zW2UtMV19c3BsaWNlQ29sdW1ucyhlLHQpe2NvbnN0IHI9dGhpcy5fcm93cy5sZW5ndGg7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobj4yP24tMjowKSxzPTI7czxuO3MrKylpW3MtMl09YXJndW1lbnRzW3NdO2lmKGkubGVuZ3RoPjApZm9yKGxldCBuPTA7bjxyO24rKyl7Y29uc3Qgcj1bZSx0XTtpLmZvckVhY2goZT0+e3IucHVzaChlW25dfHxudWxsKX0pO2NvbnN0IHM9dGhpcy5nZXRSb3cobisxKTtzLnNwbGljZS5hcHBseShzLHIpfWVsc2UgdGhpcy5fcm93cy5mb3JFYWNoKHI9PntyJiZyLnNwbGljZShlLHQpfSk7Y29uc3Qgbz1pLmxlbmd0aC10LGE9ZSt0LGw9dGhpcy5fY29sdW1ucy5sZW5ndGg7aWYobzwwKWZvcihsZXQgdD1lK2kubGVuZ3RoO3Q8PWw7dCsrKXRoaXMuZ2V0Q29sdW1uKHQpLmRlZm49dGhpcy5nZXRDb2x1bW4odC1vKS5kZWZuO2Vsc2UgaWYobz4wKWZvcihsZXQgZT1sO2U+PWE7ZS0tKXRoaXMuZ2V0Q29sdW1uKGUrbykuZGVmbj10aGlzLmdldENvbHVtbihlKS5kZWZuO2ZvcihsZXQgdD1lO3Q8ZStpLmxlbmd0aDt0KyspdGhpcy5nZXRDb2x1bW4odCkuZGVmbj1udWxsO3RoaXMud29ya2Jvb2suZGVmaW5lZE5hbWVzLnNwbGljZUNvbHVtbnModGhpcy5uYW1lLGUsdCxpLmxlbmd0aCl9Z2V0IGxhc3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRDb2x1bW4odGhpcy5jb2x1bW5Db3VudCl9Z2V0IGNvbHVtbkNvdW50KCl7bGV0IGU9MDtyZXR1cm4gdGhpcy5lYWNoUm93KHQ9PntlPU1hdGgubWF4KGUsdC5jZWxsQ291bnQpfSksZX1nZXQgYWN0dWFsQ29sdW1uQ291bnQoKXtjb25zdCBlPVtdO2xldCB0PTA7cmV0dXJuIHRoaXMuZWFjaFJvdyhyPT57ci5lYWNoQ2VsbChyPT57bGV0e2NvbDpufT1yO2Vbbl18fChlW25dPSEwLHQrKyl9KX0pLHR9X2NvbW1pdFJvdygpe31nZXQgX2xhc3RSb3dOdW1iZXIoKXtjb25zdCBlPXRoaXMuX3Jvd3M7bGV0IHQ9ZS5sZW5ndGg7Zm9yKDt0PjAmJnZvaWQgMD09PWVbdC0xXTspdC0tO3JldHVybiB0fWdldCBfbmV4dFJvdygpe3JldHVybiB0aGlzLl9sYXN0Um93TnVtYmVyKzF9Z2V0IGxhc3RSb3coKXtpZih0aGlzLl9yb3dzLmxlbmd0aClyZXR1cm4gdGhpcy5fcm93c1t0aGlzLl9yb3dzLmxlbmd0aC0xXX1maW5kUm93KGUpe3JldHVybiB0aGlzLl9yb3dzW2UtMV19ZmluZFJvd3MoZSx0KXtyZXR1cm4gdGhpcy5fcm93cy5zbGljZShlLTEsZS0xK3QpfWdldCByb3dDb3VudCgpe3JldHVybiB0aGlzLl9sYXN0Um93TnVtYmVyfWdldCBhY3R1YWxSb3dDb3VudCgpe2xldCBlPTA7cmV0dXJuIHRoaXMuZWFjaFJvdygoKT0+e2UrK30pLGV9Z2V0Um93KGUpe2xldCB0PXRoaXMuX3Jvd3NbZS0xXTtyZXR1cm4gdHx8KHQ9dGhpcy5fcm93c1tlLTFdPW5ldyBvKHRoaXMsZSkpLHR9Z2V0Um93cyhlLHQpe2lmKHQ8MSlyZXR1cm47Y29uc3Qgcj1bXTtmb3IobGV0IG49ZTtuPGUrdDtuKyspci5wdXNoKHRoaXMuZ2V0Um93KG4pKTtyZXR1cm4gcn1hZGRSb3coZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiblwiO2NvbnN0IHI9dGhpcy5fbmV4dFJvdyxuPXRoaXMuZ2V0Um93KHIpO3JldHVybiBuLnZhbHVlcz1lLHRoaXMuX3NldFN0eWxlT3B0aW9uKHIsXCJpXCI9PT10WzBdP3Q6XCJuXCIpLG59YWRkUm93cyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06XCJuXCI7Y29uc3Qgcj1bXTtyZXR1cm4gZS5mb3JFYWNoKGU9PntyLnB1c2godGhpcy5hZGRSb3coZSx0KSl9KSxyfWluc2VydFJvdyhlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIm5cIjtyZXR1cm4gdGhpcy5zcGxpY2VSb3dzKGUsMCx0KSx0aGlzLl9zZXRTdHlsZU9wdGlvbihlLHIpLHRoaXMuZ2V0Um93KGUpfWluc2VydFJvd3MoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06XCJuXCI7aWYodGhpcy5zcGxpY2VSb3dzKGUsMCwuLi50KSxcIm5cIiE9PXIpZm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspXCJvXCI9PT1yWzBdJiZ2b2lkIDAhPT10aGlzLmZpbmRSb3codC5sZW5ndGgrZStuKT90aGlzLl9jb3B5U3R5bGUodC5sZW5ndGgrZStuLGUrbixcIitcIj09PXJbMV0pOlwiaVwiPT09clswXSYmdm9pZCAwIT09dGhpcy5maW5kUm93KGUtMSkmJnRoaXMuX2NvcHlTdHlsZShlLTEsZStuLFwiK1wiPT09clsxXSk7cmV0dXJuIHRoaXMuZ2V0Um93cyhlLHQubGVuZ3RoKX1fc2V0U3R5bGVPcHRpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOlwiblwiO1wib1wiPT09dFswXSYmdm9pZCAwIT09dGhpcy5maW5kUm93KGUrMSk/dGhpcy5fY29weVN0eWxlKGUrMSxlLFwiK1wiPT09dFsxXSk6XCJpXCI9PT10WzBdJiZ2b2lkIDAhPT10aGlzLmZpbmRSb3coZS0xKSYmdGhpcy5fY29weVN0eWxlKGUtMSxlLFwiK1wiPT09dFsxXSl9X2NvcHlTdHlsZShlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgbj10aGlzLmdldFJvdyhlKSxpPXRoaXMuZ2V0Um93KHQpO2kuc3R5bGU9ZChuLnN0eWxlKSxuLmVhY2hDZWxsKHtpbmNsdWRlRW1wdHk6cn0sKGUsdCk9PntpLmdldENlbGwodCkuc3R5bGU9ZChlLnN0eWxlKX0pLGkuaGVpZ2h0PW4uaGVpZ2h0fWR1cGxpY2F0ZVJvdyhlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgbj10aGlzLl9yb3dzW2UtMV0saT1uZXcgQXJyYXkodCkuZmlsbChuLnZhbHVlcyk7dGhpcy5zcGxpY2VSb3dzKGUrMSxyPzA6dCwuLi5pKTtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXRoaXMuX3Jvd3NbZStyXTt0LnN0eWxlPW4uc3R5bGUsdC5oZWlnaHQ9bi5oZWlnaHQsbi5lYWNoQ2VsbCh7aW5jbHVkZUVtcHR5OiEwfSwoZSxyKT0+e3QuZ2V0Q2VsbChyKS5zdHlsZT1lLnN0eWxlfSl9fXNwbGljZVJvd3MoZSx0KXtjb25zdCByPWUrdDtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxpPW5ldyBBcnJheShuPjI/bi0yOjApLHM9MjtzPG47cysrKWlbcy0yXT1hcmd1bWVudHNbc107Y29uc3Qgbz1pLmxlbmd0aCxhPW8tdCxsPXRoaXMuX3Jvd3MubGVuZ3RoO2xldCBjLHU7aWYoYTwwKWZvcihlPT09bCYmKHRoaXMuX3Jvd3NbbC0xXT12b2lkIDApLGM9cjtjPD1sO2MrKylpZih1PXRoaXMuX3Jvd3NbYy0xXSx1KXtjb25zdCBlPXRoaXMuZ2V0Um93KGMrYSk7ZS52YWx1ZXM9dS52YWx1ZXMsZS5zdHlsZT11LnN0eWxlLGUuaGVpZ2h0PXUuaGVpZ2h0LHUuZWFjaENlbGwoe2luY2x1ZGVFbXB0eTohMH0sKHQscik9PntlLmdldENlbGwocikuc3R5bGU9dC5zdHlsZX0pLHRoaXMuX3Jvd3NbYy0xXT12b2lkIDB9ZWxzZSB0aGlzLl9yb3dzW2MrYS0xXT12b2lkIDA7ZWxzZSBpZihhPjApZm9yKGM9bDtjPj1yO2MtLSlpZih1PXRoaXMuX3Jvd3NbYy0xXSx1KXtjb25zdCBlPXRoaXMuZ2V0Um93KGMrYSk7ZS52YWx1ZXM9dS52YWx1ZXMsZS5zdHlsZT11LnN0eWxlLGUuaGVpZ2h0PXUuaGVpZ2h0LHUuZWFjaENlbGwoe2luY2x1ZGVFbXB0eTohMH0sKHQscik9PntpZihlLmdldENlbGwocikuc3R5bGU9dC5zdHlsZSxcIk1lcmdlVmFsdWVcIj09PXQuX3ZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpe2NvbnN0IGU9dGhpcy5nZXRSb3codC5fcm93Ll9udW1iZXIrbykuZ2V0Q2VsbChyKSxuPXQuX3ZhbHVlLl9tYXN0ZXIsaT10aGlzLmdldFJvdyhuLl9yb3cuX251bWJlcitvKS5nZXRDZWxsKG4uX2NvbHVtbi5fbnVtYmVyKTtlLm1lcmdlKGkpfX0pfWVsc2UgdGhpcy5fcm93c1tjK2EtMV09dm9pZCAwO2ZvcihjPTA7YzxvO2MrKyl7Y29uc3QgdD10aGlzLmdldFJvdyhlK2MpO3Quc3R5bGU9e30sdC52YWx1ZXM9aVtjXX10aGlzLndvcmtib29rLmRlZmluZWROYW1lcy5zcGxpY2VSb3dzKHRoaXMubmFtZSxlLHQsbyl9ZWFjaFJvdyhlLHQpe2lmKHR8fCh0PWUsZT12b2lkIDApLGUmJmUuaW5jbHVkZUVtcHR5KXtjb25zdCBlPXRoaXMuX3Jvd3MubGVuZ3RoO2ZvcihsZXQgcj0xO3I8PWU7cisrKXQodGhpcy5nZXRSb3cocikscil9ZWxzZSB0aGlzLl9yb3dzLmZvckVhY2goZT0+e2UmJmUuaGFzVmFsdWVzJiZ0KGUsZS5udW1iZXIpfSl9Z2V0U2hlZXRWYWx1ZXMoKXtjb25zdCBlPVtdO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2godD0+e3QmJihlW3QubnVtYmVyXT10LnZhbHVlcyl9KSxlfWZpbmRDZWxsKGUsdCl7Y29uc3Qgcj1pLmdldEFkZHJlc3MoZSx0KSxuPXRoaXMuX3Jvd3Nbci5yb3ctMV07cmV0dXJuIG4/bi5maW5kQ2VsbChyLmNvbCk6dm9pZCAwfWdldENlbGwoZSx0KXtjb25zdCByPWkuZ2V0QWRkcmVzcyhlLHQpO3JldHVybiB0aGlzLmdldFJvdyhyLnJvdykuZ2V0Q2VsbEV4KHIpfW1lcmdlQ2VsbHMoKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtjb25zdCBuPW5ldyBzKHQpO3RoaXMuX21lcmdlQ2VsbHNJbnRlcm5hbChuKX1tZXJnZUNlbGxzV2l0aG91dFN0eWxlKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07Y29uc3Qgbj1uZXcgcyh0KTt0aGlzLl9tZXJnZUNlbGxzSW50ZXJuYWwobiwhMCl9X21lcmdlQ2VsbHNJbnRlcm5hbChlLHQpe24uZWFjaCh0aGlzLl9tZXJnZXMsdD0+e2lmKHQuaW50ZXJzZWN0cyhlKSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgbWVyZ2UgYWxyZWFkeSBtZXJnZWQgY2VsbHNcIil9KTtjb25zdCByPXRoaXMuZ2V0Q2VsbChlLnRvcCxlLmxlZnQpO2ZvcihsZXQgbj1lLnRvcDtuPD1lLmJvdHRvbTtuKyspZm9yKGxldCBpPWUubGVmdDtpPD1lLnJpZ2h0O2krKykobj5lLnRvcHx8aT5lLmxlZnQpJiZ0aGlzLmdldENlbGwobixpKS5tZXJnZShyLHQpO3RoaXMuX21lcmdlc1tyLmFkZHJlc3NdPWV9X3VuTWVyZ2VNYXN0ZXIoZSl7Y29uc3QgdD10aGlzLl9tZXJnZXNbZS5hZGRyZXNzXTtpZih0KXtmb3IobGV0IGU9dC50b3A7ZTw9dC5ib3R0b207ZSsrKWZvcihsZXQgcj10LmxlZnQ7cjw9dC5yaWdodDtyKyspdGhpcy5nZXRDZWxsKGUscikudW5tZXJnZSgpO2RlbGV0ZSB0aGlzLl9tZXJnZXNbZS5hZGRyZXNzXX19Z2V0IGhhc01lcmdlcygpe3JldHVybiBuLnNvbWUodGhpcy5fbWVyZ2VzLEJvb2xlYW4pfXVuTWVyZ2VDZWxscygpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO2NvbnN0IG49bmV3IHModCk7Zm9yKGxldCBlPW4udG9wO2U8PW4uYm90dG9tO2UrKylmb3IobGV0IHQ9bi5sZWZ0O3Q8PW4ucmlnaHQ7dCsrKXtjb25zdCByPXRoaXMuZmluZENlbGwoZSx0KTtyJiYoci50eXBlPT09bC5WYWx1ZVR5cGUuTWVyZ2U/dGhpcy5fdW5NZXJnZU1hc3RlcihyLm1hc3Rlcik6dGhpcy5fbWVyZ2VzW3IuYWRkcmVzc10mJnRoaXMuX3VuTWVyZ2VNYXN0ZXIocikpfX1maWxsRm9ybXVsYShlLHQscil7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOlwic2hhcmVkXCI7Y29uc3Qgcz1pLmRlY29kZShlKSx7dG9wOm8sbGVmdDphLGJvdHRvbTpsLHJpZ2h0OmN9PXMsdT1jLWErMSxoPWkuZW5jb2RlQWRkcmVzcyhvLGEpLGY9XCJzaGFyZWRcIj09PW47bGV0IGQ7ZD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByP3I6QXJyYXkuaXNBcnJheShyKT9BcnJheS5pc0FycmF5KHJbMF0pPyhlLHQpPT5yW2Utb11bdC1hXTooZSx0KT0+clsoZS1vKSp1Kyh0LWEpXTooKT0+e307bGV0IHA9ITA7Zm9yKGxldCByPW87cjw9bDtyKyspZm9yKGxldCBpPWE7aTw9YztpKyspcD8odGhpcy5nZXRDZWxsKHIsaSkudmFsdWU9e3NoYXJlVHlwZTpuLGZvcm11bGE6dCxyZWY6ZSxyZXN1bHQ6ZChyLGkpfSxwPSExKTp0aGlzLmdldENlbGwocixpKS52YWx1ZT1mP3tzaGFyZWRGb3JtdWxhOmgscmVzdWx0OmQocixpKX06ZChyLGkpfWFkZEltYWdlKGUsdCl7Y29uc3Qgcj17dHlwZTpcImltYWdlXCIsaW1hZ2VJZDplLHJhbmdlOnR9O3RoaXMuX21lZGlhLnB1c2gobmV3IGModGhpcyxyKSl9Z2V0SW1hZ2VzKCl7cmV0dXJuIHRoaXMuX21lZGlhLmZpbHRlcihlPT5cImltYWdlXCI9PT1lLnR5cGUpfWFkZEJhY2tncm91bmRJbWFnZShlKXtjb25zdCB0PXt0eXBlOlwiYmFja2dyb3VuZFwiLGltYWdlSWQ6ZX07dGhpcy5fbWVkaWEucHVzaChuZXcgYyh0aGlzLHQpKX1nZXRCYWNrZ3JvdW5kSW1hZ2VJZCgpe2NvbnN0IGU9dGhpcy5fbWVkaWEuZmluZChlPT5cImJhY2tncm91bmRcIj09PWUudHlwZSk7cmV0dXJuIGUmJmUuaW1hZ2VJZH1wcm90ZWN0KGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9Pnt0aGlzLnNoZWV0UHJvdGVjdGlvbj17c2hlZXQ6ITB9LHQmJlwic3BpbkNvdW50XCJpbiB0JiYodC5zcGluQ291bnQ9TnVtYmVyLmlzRmluaXRlKHQuc3BpbkNvdW50KT9NYXRoLnJvdW5kKE1hdGgubWF4KDAsdC5zcGluQ291bnQpKToxZTUpLGUmJih0aGlzLnNoZWV0UHJvdGVjdGlvbi5hbGdvcml0aG1OYW1lPVwiU0hBLTUxMlwiLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNhbHRWYWx1ZT1mLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImJhc2U2NFwiKSx0aGlzLnNoZWV0UHJvdGVjdGlvbi5zcGluQ291bnQ9dCYmXCJzcGluQ291bnRcImluIHQ/dC5zcGluQ291bnQ6MWU1LHRoaXMuc2hlZXRQcm90ZWN0aW9uLmhhc2hWYWx1ZT1mLmNvbnZlcnRQYXNzd29yZFRvSGFzaChlLFwiU0hBNTEyXCIsdGhpcy5zaGVldFByb3RlY3Rpb24uc2FsdFZhbHVlLHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNwaW5Db3VudCkpLHQmJih0aGlzLnNoZWV0UHJvdGVjdGlvbj1PYmplY3QuYXNzaWduKHRoaXMuc2hlZXRQcm90ZWN0aW9uLHQpLCFlJiZcInNwaW5Db3VudFwiaW4gdCYmZGVsZXRlIHRoaXMuc2hlZXRQcm90ZWN0aW9uLnNwaW5Db3VudCkscigpfSl9dW5wcm90ZWN0KCl7dGhpcy5zaGVldFByb3RlY3Rpb249bnVsbH1hZGRUYWJsZShlKXtjb25zdCB0PW5ldyB1KHRoaXMsZSk7cmV0dXJuIHRoaXMudGFibGVzW2UubmFtZV09dCx0fWdldFRhYmxlKGUpe3JldHVybiB0aGlzLnRhYmxlc1tlXX1yZW1vdmVUYWJsZShlKXtkZWxldGUgdGhpcy50YWJsZXNbZV19Z2V0VGFibGVzKCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy50YWJsZXMpfWFkZENvbmRpdGlvbmFsRm9ybWF0dGluZyhlKXt0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MucHVzaChlKX1yZW1vdmVDb25kaXRpb25hbEZvcm1hdHRpbmcoZSl7XCJudW1iZXJcIj09dHlwZW9mIGU/dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLnNwbGljZShlLDEpOnRoaXMuY29uZGl0aW9uYWxGb3JtYXR0aW5ncz1lIGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzLmZpbHRlcihlKTpbXX1nZXQgdGFiQ29sb3IoKXtyZXR1cm4gY29uc29sZS50cmFjZShcIndvcmtzaGVldC50YWJDb2xvciBwcm9wZXJ0eSBpcyBub3cgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB3b3Jrc2hlZXQucHJvcGVydGllcy50YWJDb2xvclwiKSx0aGlzLnByb3BlcnRpZXMudGFiQ29sb3J9c2V0IHRhYkNvbG9yKGUpe2NvbnNvbGUudHJhY2UoXCJ3b3Jrc2hlZXQudGFiQ29sb3IgcHJvcGVydHkgaXMgbm93IGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ugd29ya3NoZWV0LnByb3BlcnRpZXMudGFiQ29sb3JcIiksdGhpcy5wcm9wZXJ0aWVzLnRhYkNvbG9yPWV9Z2V0IG1vZGVsKCl7Y29uc3QgZT17aWQ6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxkYXRhVmFsaWRhdGlvbnM6dGhpcy5kYXRhVmFsaWRhdGlvbnMubW9kZWwscHJvcGVydGllczp0aGlzLnByb3BlcnRpZXMsc3RhdGU6dGhpcy5zdGF0ZSxwYWdlU2V0dXA6dGhpcy5wYWdlU2V0dXAsaGVhZGVyRm9vdGVyOnRoaXMuaGVhZGVyRm9vdGVyLHJvd0JyZWFrczp0aGlzLnJvd0JyZWFrcyx2aWV3czp0aGlzLnZpZXdzLGF1dG9GaWx0ZXI6dGhpcy5hdXRvRmlsdGVyLG1lZGlhOnRoaXMuX21lZGlhLm1hcChlPT5lLm1vZGVsKSxzaGVldFByb3RlY3Rpb246dGhpcy5zaGVldFByb3RlY3Rpb24sdGFibGVzOk9iamVjdC52YWx1ZXModGhpcy50YWJsZXMpLm1hcChlPT5lLm1vZGVsKSxjb25kaXRpb25hbEZvcm1hdHRpbmdzOnRoaXMuY29uZGl0aW9uYWxGb3JtYXR0aW5nc307ZS5jb2xzPWEudG9Nb2RlbCh0aGlzLmNvbHVtbnMpO2NvbnN0IHQ9ZS5yb3dzPVtdLHI9ZS5kaW1lbnNpb25zPW5ldyBzO3JldHVybiB0aGlzLl9yb3dzLmZvckVhY2goZT0+e2NvbnN0IG49ZSYmZS5tb2RlbDtuJiYoci5leHBhbmQobi5udW1iZXIsbi5taW4sbi5udW1iZXIsbi5tYXgpLHQucHVzaChuKSl9KSxlLm1lcmdlcz1bXSxuLmVhY2godGhpcy5fbWVyZ2VzLHQ9PntlLm1lcmdlcy5wdXNoKHQucmFuZ2UpfSksZX1fcGFyc2VSb3dzKGUpe3RoaXMuX3Jvd3M9W10sZS5yb3dzLmZvckVhY2goZT0+e2NvbnN0IHQ9bmV3IG8odGhpcyxlLm51bWJlcik7dGhpcy5fcm93c1t0Lm51bWJlci0xXT10LHQubW9kZWw9ZX0pfV9wYXJzZU1lcmdlQ2VsbHMoZSl7bi5lYWNoKGUubWVyZ2VDZWxscyxlPT57dGhpcy5tZXJnZUNlbGxzV2l0aG91dFN0eWxlKGUpfSl9c2V0IG1vZGVsKGUpe3RoaXMubmFtZT1lLm5hbWUsdGhpcy5fY29sdW1ucz1hLmZyb21Nb2RlbCh0aGlzLGUuY29scyksdGhpcy5fcGFyc2VSb3dzKGUpLHRoaXMuX3BhcnNlTWVyZ2VDZWxscyhlKSx0aGlzLmRhdGFWYWxpZGF0aW9ucz1uZXcgaChlLmRhdGFWYWxpZGF0aW9ucyksdGhpcy5wcm9wZXJ0aWVzPWUucHJvcGVydGllcyx0aGlzLnBhZ2VTZXR1cD1lLnBhZ2VTZXR1cCx0aGlzLmhlYWRlckZvb3Rlcj1lLmhlYWRlckZvb3Rlcix0aGlzLnZpZXdzPWUudmlld3MsdGhpcy5hdXRvRmlsdGVyPWUuYXV0b0ZpbHRlcix0aGlzLl9tZWRpYT1lLm1lZGlhLm1hcChlPT5uZXcgYyh0aGlzLGUpKSx0aGlzLnNoZWV0UHJvdGVjdGlvbj1lLnNoZWV0UHJvdGVjdGlvbix0aGlzLnRhYmxlcz1lLnRhYmxlcy5yZWR1Y2UoKGUsdCk9Pntjb25zdCByPW5ldyB1O3JldHVybiByLm1vZGVsPXQsZVt0Lm5hbWVdPXIsZX0se30pLHRoaXMuY29uZGl0aW9uYWxGb3JtYXR0aW5ncz1lLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3N9fX0se1wiLi4vdXRpbHMvY29sLWNhY2hlXCI6MTksXCIuLi91dGlscy9jb3B5LXN0eWxlXCI6MjAsXCIuLi91dGlscy9lbmNyeXB0b3JcIjoyMSxcIi4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4vY29sdW1uXCI6NCxcIi4vZGF0YS12YWxpZGF0aW9uc1wiOjUsXCIuL2VudW1zXCI6NyxcIi4vaW1hZ2VcIjo4LFwiLi9yYW5nZVwiOjEwLFwiLi9yb3dcIjoxMSxcIi4vdGFibGVcIjoxMn1dLDE1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZShcImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlXCIpLGUoXCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5XCIpLGUoXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnblwiKSxlKFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzXCIpLGUoXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlc1wiKSxlKFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbFwiKSxlKFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvclwiKSxlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yXCIpLGUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXNcIiksZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWluZGV4XCIpLGUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZFwiKSxlKFwiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnRcIiksZShcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXNcIiksZShcImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuXCIpLGUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7Y29uc3Qgbj17V29ya2Jvb2s6ZShcIi4vZG9jL3dvcmtib29rXCIpfSxpPWUoXCIuL2RvYy9lbnVtc1wiKTtPYmplY3Qua2V5cyhpKS5mb3JFYWNoKGU9PntuW2VdPWlbZV19KSx0LmV4cG9ydHM9bn0se1wiLi9kb2MvZW51bXNcIjo3LFwiLi9kb2Mvd29ya2Jvb2tcIjoxMyxcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kXCI6MzU5LFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXhcIjozNTgsXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXNcIjozNjAsXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3JcIjozNjEsXCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLW5hblwiOjM2MyxcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduXCI6MzY0LFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzXCI6MzY2LFwiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC52YWx1ZXNcIjozNjcsXCJjb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZVwiOjM3MixcImNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHlcIjozNzEsXCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmZyb20tY29kZS1wb2ludFwiOjM3NixcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXNcIjozNzcsXCJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sXCI6MzgxLFwiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvclwiOjM3OCxcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiOjQ5Mn1dLDE2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1cInVuZGVmaW5lZFwiPT10eXBlb2YgVGV4dERlY29kZXI/bnVsbDpuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtyLmJ1ZmZlclRvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP2U6bj9uLmRlY29kZShlKTplLnRvU3RyaW5nKCl9fSx7fV0sMTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPVwidW5kZWZpbmVkXCI9PXR5cGVvZiBUZXh0RW5jb2Rlcj9udWxsOm5ldyBUZXh0RW5jb2RlcihcInV0Zi04XCIpLHtCdWZmZXI6aX09ZShcImJ1ZmZlclwiKTtyLnN0cmluZ1RvQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlP2U6bj9pLmZyb20obi5lbmNvZGUoZSkuYnVmZmVyKTppLmZyb20oZSl9fSx7YnVmZmVyOjIyMH1dLDE4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi91bmRlci1kYXNoXCIpLGk9ZShcIi4vY29sLWNhY2hlXCIpO3QuZXhwb3J0cz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRlbXBsYXRlPWUsdGhpcy5zaGVldHM9e319YWRkQ2VsbChlKXt0aGlzLmFkZENlbGxFeChpLmRlY29kZUV4KGUpKX1nZXRDZWxsKGUpe3JldHVybiB0aGlzLmZpbmRDZWxsRXgoaS5kZWNvZGVFeChlKSwhMCl9ZmluZENlbGwoZSl7cmV0dXJuIHRoaXMuZmluZENlbGxFeChpLmRlY29kZUV4KGUpLCExKX1maW5kQ2VsbEF0KGUsdCxyKXtjb25zdCBuPXRoaXMuc2hlZXRzW2VdLGk9biYmblt0XTtyZXR1cm4gaSYmaVtyXX1hZGRDZWxsRXgoZSl7aWYoZS50b3ApZm9yKGxldCB0PWUudG9wO3Q8PWUuYm90dG9tO3QrKylmb3IobGV0IHI9ZS5sZWZ0O3I8PWUucmlnaHQ7cisrKXRoaXMuZ2V0Q2VsbEF0KGUuc2hlZXROYW1lLHQscik7ZWxzZSB0aGlzLmZpbmRDZWxsRXgoZSwhMCl9Z2V0Q2VsbEV4KGUpe3JldHVybiB0aGlzLmZpbmRDZWxsRXgoZSwhMCl9ZmluZENlbGxFeChlLHQpe2NvbnN0IHI9dGhpcy5maW5kU2hlZXQoZSx0KSxuPXRoaXMuZmluZFNoZWV0Um93KHIsZSx0KTtyZXR1cm4gdGhpcy5maW5kUm93Q2VsbChuLGUsdCl9Z2V0Q2VsbEF0KGUsdCxyKXtjb25zdCBuPXRoaXMuc2hlZXRzW2VdfHwodGhpcy5zaGVldHNbZV09W10pLHM9blt0XXx8KG5bdF09W10pO3JldHVybiBzW3JdfHwoc1tyXT17c2hlZXROYW1lOmUsYWRkcmVzczppLm4ybChyKSt0LHJvdzp0LGNvbDpyfSl9cmVtb3ZlQ2VsbEV4KGUpe2NvbnN0IHQ9dGhpcy5maW5kU2hlZXQoZSk7aWYoIXQpcmV0dXJuO2NvbnN0IHI9dGhpcy5maW5kU2hlZXRSb3codCxlKTtyJiZkZWxldGUgcltlLmNvbF19Zm9yRWFjaEluU2hlZXQoZSx0KXtjb25zdCByPXRoaXMuc2hlZXRzW2VdO3ImJnIuZm9yRWFjaCgoZSxyKT0+e2UmJmUuZm9yRWFjaCgoZSxuKT0+e2UmJnQoZSxyLG4pfSl9KX1mb3JFYWNoKGUpe24uZWFjaCh0aGlzLnNoZWV0cywodCxyKT0+e3RoaXMuZm9yRWFjaEluU2hlZXQocixlKX0pfW1hcChlKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLmZvckVhY2gocj0+e3QucHVzaChlKHIpKX0pLHR9ZmluZFNoZWV0KGUsdCl7Y29uc3Qgcj1lLnNoZWV0TmFtZTtyZXR1cm4gdGhpcy5zaGVldHNbcl0/dGhpcy5zaGVldHNbcl06dD90aGlzLnNoZWV0c1tyXT1bXTp2b2lkIDB9ZmluZFNoZWV0Um93KGUsdCxyKXtjb25zdHtyb3c6bn09dDtyZXR1cm4gZSYmZVtuXT9lW25dOnI/ZVtuXT1bXTp2b2lkIDB9ZmluZFJvd0NlbGwoZSx0LHIpe2NvbnN0e2NvbDpufT10O3JldHVybiBlJiZlW25dP2Vbbl06cj9lW25dPXRoaXMudGVtcGxhdGU/T2JqZWN0LmFzc2lnbih0LEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy50ZW1wbGF0ZSkpKTp0OnZvaWQgMH1zcGxpY2VSb3dzKGUsdCxyLG4pe2NvbnN0IGk9dGhpcy5zaGVldHNbZV07aWYoaSl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PG47dCsrKWUucHVzaChbXSk7aS5zcGxpY2UodCxyLC4uLmUpfX1zcGxpY2VDb2x1bW5zKGUsdCxyLGkpe2NvbnN0IHM9dGhpcy5zaGVldHNbZV07aWYocyl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MDt0PGk7dCsrKWUucHVzaChudWxsKTtuLmVhY2gocyxuPT57bi5zcGxpY2UodCxyLC4uLmUpfSl9fX19LHtcIi4vY29sLWNhY2hlXCI6MTksXCIuL3VuZGVyLWRhc2hcIjoyNn1dLDE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj0vXltBLVpdK1xcZCskLyxpPXtfZGljdGlvbmFyeTpbXCJBXCIsXCJCXCIsXCJDXCIsXCJEXCIsXCJFXCIsXCJGXCIsXCJHXCIsXCJIXCIsXCJJXCIsXCJKXCIsXCJLXCIsXCJMXCIsXCJNXCIsXCJOXCIsXCJPXCIsXCJQXCIsXCJRXCIsXCJSXCIsXCJTXCIsXCJUXCIsXCJVXCIsXCJWXCIsXCJXXCIsXCJYXCIsXCJZXCIsXCJaXCJdLF9sMm5GaWxsOjAsX2wybjp7fSxfbjJsOltdLF9sZXZlbDplPT5lPD0yNj8xOmU8PTY3Nj8yOjMsX2ZpbGwoZSl7bGV0IHQscixuLGkscyxvPTE7aWYoZT49NCl0aHJvdyBuZXcgRXJyb3IoXCJPdXQgb2YgYm91bmRzLiBFeGNlbCBzdXBwb3J0cyBjb2x1bW5zIGZyb20gMSB0byAxNjM4NFwiKTtpZih0aGlzLl9sMm5GaWxsPDEmJmU+PTEpe2Zvcig7bzw9MjY7KXQ9dGhpcy5fZGljdGlvbmFyeVtvLTFdLHRoaXMuX24ybFtvXT10LHRoaXMuX2wyblt0XT1vLG8rKzt0aGlzLl9sMm5GaWxsPTF9aWYodGhpcy5fbDJuRmlsbDwyJiZlPj0yKXtmb3Iobz0yNztvPD03MDI7KXI9by0yNyxuPXIlMjYsaT1NYXRoLmZsb29yKHIvMjYpLHQ9dGhpcy5fZGljdGlvbmFyeVtpXSt0aGlzLl9kaWN0aW9uYXJ5W25dLHRoaXMuX24ybFtvXT10LHRoaXMuX2wyblt0XT1vLG8rKzt0aGlzLl9sMm5GaWxsPTJ9aWYodGhpcy5fbDJuRmlsbDwzJiZlPj0zKXtmb3Iobz03MDM7bzw9MTYzODQ7KXI9by03MDMsbj1yJTI2LGk9TWF0aC5mbG9vcihyLzI2KSUyNixzPU1hdGguZmxvb3Ioci82NzYpLHQ9dGhpcy5fZGljdGlvbmFyeVtzXSt0aGlzLl9kaWN0aW9uYXJ5W2ldK3RoaXMuX2RpY3Rpb25hcnlbbl0sdGhpcy5fbjJsW29dPXQsdGhpcy5fbDJuW3RdPW8sbysrO3RoaXMuX2wybkZpbGw9M319LGwybihlKXtpZih0aGlzLl9sMm5bZV18fHRoaXMuX2ZpbGwoZS5sZW5ndGgpLCF0aGlzLl9sMm5bZV0pdGhyb3cgbmV3IEVycm9yKFwiT3V0IG9mIGJvdW5kcy4gSW52YWxpZCBjb2x1bW4gbGV0dGVyOiBcIitlKTtyZXR1cm4gdGhpcy5fbDJuW2VdfSxuMmwoZSl7aWYoZTwxfHxlPjE2Mzg0KXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG91dCBvZiBib3VuZHMuIEV4Y2VsIHN1cHBvcnRzIGNvbHVtbnMgZnJvbSAxIHRvIDE2Mzg0XCIpO3JldHVybiB0aGlzLl9uMmxbZV18fHRoaXMuX2ZpbGwodGhpcy5fbGV2ZWwoZSkpLHRoaXMuX24ybFtlXX0sX2hhc2g6e30sdmFsaWRhdGVBZGRyZXNzKGUpe2lmKCFuLnRlc3QoZSkpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBBZGRyZXNzOiBcIitlKTtyZXR1cm4hMH0sZGVjb2RlQWRkcmVzcyhlKXtjb25zdCB0PWUubGVuZ3RoPDUmJnRoaXMuX2hhc2hbZV07aWYodClyZXR1cm4gdDtsZXQgcj0hMSxuPVwiXCIsaT0wLHM9ITEsbz1cIlwiLGE9MDtmb3IobGV0IHQsbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKHQ9ZS5jaGFyQ29kZUF0KGwpLCFzJiZ0Pj02NSYmdDw9OTApcj0hMCxuKz1lW2xdLGk9MjYqaSt0LTY0O2Vsc2UgaWYodD49NDgmJnQ8PTU3KXM9ITAsbys9ZVtsXSxhPTEwKmErdC00ODtlbHNlIGlmKHMmJnImJjM2IT09dClicmVhaztpZihyKXtpZihpPjE2Mzg0KXRocm93IG5ldyBFcnJvcihcIk91dCBvZiBib3VuZHMuIEludmFsaWQgY29sdW1uIGxldHRlcjogXCIrbil9ZWxzZSBpPXZvaWQgMDtzfHwoYT12b2lkIDApO2NvbnN0IGw9e2FkZHJlc3M6ZT1uK28sY29sOmkscm93OmEsJGNvbCRyb3c6YCQke259JCR7b31gfTtyZXR1cm4gaTw9MTAwJiZhPD0xMDAmJih0aGlzLl9oYXNoW2VdPWwsdGhpcy5faGFzaFtsLiRjb2wkcm93XT1sKSxsfSxnZXRBZGRyZXNzKGUsdCl7aWYodCl7Y29uc3Qgcj10aGlzLm4ybCh0KStlO3JldHVybiB0aGlzLmRlY29kZUFkZHJlc3Mocil9cmV0dXJuIHRoaXMuZGVjb2RlQWRkcmVzcyhlKX0sZGVjb2RlKGUpe2NvbnN0IHQ9ZS5zcGxpdChcIjpcIik7aWYoMj09PXQubGVuZ3RoKXtjb25zdCBlPXRoaXMuZGVjb2RlQWRkcmVzcyh0WzBdKSxyPXRoaXMuZGVjb2RlQWRkcmVzcyh0WzFdKSxuPXt0b3A6TWF0aC5taW4oZS5yb3csci5yb3cpLGxlZnQ6TWF0aC5taW4oZS5jb2wsci5jb2wpLGJvdHRvbTpNYXRoLm1heChlLnJvdyxyLnJvdykscmlnaHQ6TWF0aC5tYXgoZS5jb2wsci5jb2wpfTtyZXR1cm4gbi50bD10aGlzLm4ybChuLmxlZnQpK24udG9wLG4uYnI9dGhpcy5uMmwobi5yaWdodCkrbi5ib3R0b20sbi5kaW1lbnNpb25zPWAke24udGx9OiR7bi5icn1gLG59cmV0dXJuIHRoaXMuZGVjb2RlQWRkcmVzcyhlKX0sZGVjb2RlRXgoZSl7Y29uc3QgdD1lLm1hdGNoKC8oPzooPzooPzonKCg/OlteJ118JycpKiknKXwoW14nXiAhXSopKSEpPyguKikvKSxyPXRbMV18fHRbMl0sbj10WzNdLGk9bi5zcGxpdChcIjpcIik7aWYoaS5sZW5ndGg+MSl7bGV0IGU9dGhpcy5kZWNvZGVBZGRyZXNzKGlbMF0pLHQ9dGhpcy5kZWNvZGVBZGRyZXNzKGlbMV0pO2NvbnN0IG49TWF0aC5taW4oZS5yb3csdC5yb3cpLHM9TWF0aC5taW4oZS5jb2wsdC5jb2wpLG89TWF0aC5tYXgoZS5yb3csdC5yb3cpLGE9TWF0aC5tYXgoZS5jb2wsdC5jb2wpO3JldHVybiBlPXRoaXMubjJsKHMpK24sdD10aGlzLm4ybChhKStvLHt0b3A6bixsZWZ0OnMsYm90dG9tOm8scmlnaHQ6YSxzaGVldE5hbWU6cix0bDp7YWRkcmVzczplLGNvbDpzLHJvdzpuLCRjb2wkcm93OmAkJHt0aGlzLm4ybChzKX0kJHtufWAsc2hlZXROYW1lOnJ9LGJyOnthZGRyZXNzOnQsY29sOmEscm93Om8sJGNvbCRyb3c6YCQke3RoaXMubjJsKGEpfSQke299YCxzaGVldE5hbWU6cn0sZGltZW5zaW9uczpgJHtlfToke3R9YH19aWYobi5zdGFydHNXaXRoKFwiI1wiKSlyZXR1cm4gcj97c2hlZXROYW1lOnIsZXJyb3I6bn06e2Vycm9yOm59O2NvbnN0IHM9dGhpcy5kZWNvZGVBZGRyZXNzKG4pO3JldHVybiByP3tzaGVldE5hbWU6ciwuLi5zfTpzfSxlbmNvZGVBZGRyZXNzOihlLHQpPT5pLm4ybCh0KStlLGVuY29kZSgpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDI6cmV0dXJuIGkuZW5jb2RlQWRkcmVzcyhhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDQ6cmV0dXJuYCR7aS5lbmNvZGVBZGRyZXNzKGFyZ3VtZW50c1swXSxhcmd1bWVudHNbMV0pfToke2kuZW5jb2RlQWRkcmVzcyhhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdKX1gO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiQ2FuIG9ubHkgZW5jb2RlIHdpdGggMiBvciA0IGFyZ3VtZW50c1wiKX19LGluUmFuZ2UoZSx0KXtjb25zdFtyLG4sLGksc109ZSxbbyxhXT10O3JldHVybiBvPj1yJiZvPD1pJiZhPj1uJiZhPD1zfX07dC5leHBvcnRzPWl9LHt9XSwyMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49KGUsdCk9Pih7Li4uZSwuLi50LnJlZHVjZSgodCxyKT0+KGVbcl0mJih0W3JdPXsuLi5lW3JdfSksdCkse30pfSksaT1mdW5jdGlvbihlLHQscil7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOltdO2Vbcl0mJih0W3JdPW4oZVtyXSxpKSl9O3IuY29weVN0eWxlPWU9PntpZighZSlyZXR1cm4gZTtpZih0PWUsMD09PU9iamVjdC5rZXlzKHQpLmxlbmd0aClyZXR1cm57fTt2YXIgdDtjb25zdCByPXsuLi5lfTtyZXR1cm4gaShlLHIsXCJmb250XCIsW1wiY29sb3JcIl0pLGkoZSxyLFwiYWxpZ25tZW50XCIpLGkoZSxyLFwicHJvdGVjdGlvblwiKSxlLmJvcmRlciYmKGkoZSxyLFwiYm9yZGVyXCIpLGkoZS5ib3JkZXIsci5ib3JkZXIsXCJ0b3BcIixbXCJjb2xvclwiXSksaShlLmJvcmRlcixyLmJvcmRlcixcImxlZnRcIixbXCJjb2xvclwiXSksaShlLmJvcmRlcixyLmJvcmRlcixcImJvdHRvbVwiLFtcImNvbG9yXCJdKSxpKGUuYm9yZGVyLHIuYm9yZGVyLFwicmlnaHRcIixbXCJjb2xvclwiXSksaShlLmJvcmRlcixyLmJvcmRlcixcImRpYWdvbmFsXCIsW1wiY29sb3JcIl0pKSxlLmZpbGwmJihpKGUscixcImZpbGxcIixbXCJmZ0NvbG9yXCIsXCJiZ0NvbG9yXCIsXCJjZW50ZXJcIl0pLGUuZmlsbC5zdG9wcyYmKHIuZmlsbC5zdG9wcz1lLmZpbGwuc3RvcHMubWFwKGU9Pm4oZSxbXCJjb2xvclwiXSkpKSkscn19LHt9XSwyMTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCJjcnlwdG9cIiksaT17aGFzaChlKXtjb25zdCB0PW4uY3JlYXRlSGFzaChlKTtmb3IodmFyIGk9YXJndW1lbnRzLmxlbmd0aCxzPW5ldyBBcnJheShpPjE/aS0xOjApLG89MTtvPGk7bysrKXNbby0xXT1hcmd1bWVudHNbb107cmV0dXJuIHQudXBkYXRlKHIuY29uY2F0KHMpKSx0LmRpZ2VzdCgpfSxjb252ZXJ0UGFzc3dvcmRUb0hhc2goZSx0LGkscyl7dD10LnRvTG93ZXJDYXNlKCk7aWYobi5nZXRIYXNoZXMoKS5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKGBIYXNoIGFsZ29yaXRobSAnJHt0fScgbm90IHN1cHBvcnRlZCFgKTtjb25zdCBvPXIuZnJvbShlLFwidXRmMTZsZVwiKTtsZXQgYT10aGlzLmhhc2godCxyLmZyb20oaSxcImJhc2U2NFwiKSxvKTtmb3IobGV0IGU9MDtlPHM7ZSsrKXtjb25zdCBuPXIuYWxsb2MoNCk7bi53cml0ZVVJbnQzMkxFKGUsMCksYT10aGlzLmhhc2godCxhLG4pfXJldHVybiBhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfSxyYW5kb21CeXRlczplPT5uLnJhbmRvbUJ5dGVzKGUpfTt0LmV4cG9ydHM9aX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMCxjcnlwdG86MzkwfV0sMjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdHtTYXhlc1BhcnNlcjpufT1lKFwic2F4ZXNcIikse1Bhc3NUaHJvdWdoOml9PWUoXCJyZWFkYWJsZS1zdHJlYW1cIikse2J1ZmZlclRvU3RyaW5nOnN9PWUoXCIuL2Jyb3dzZXItYnVmZmVyLWRlY29kZVwiKTt0LmV4cG9ydHM9YXN5bmMgZnVuY3Rpb24qKGUpe2UucGlwZSYmIWVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdJiYoZT1lLnBpcGUobmV3IGkpKTtjb25zdCB0PW5ldyBuO2xldCByO3Qub24oXCJlcnJvclwiLGU9PntyPWV9KTtsZXQgbz1bXTt0Lm9uKFwib3BlbnRhZ1wiLGU9Pm8ucHVzaCh7ZXZlbnRUeXBlOlwib3BlbnRhZ1wiLHZhbHVlOmV9KSksdC5vbihcInRleHRcIixlPT5vLnB1c2goe2V2ZW50VHlwZTpcInRleHRcIix2YWx1ZTplfSkpLHQub24oXCJjbG9zZXRhZ1wiLGU9Pm8ucHVzaCh7ZXZlbnRUeXBlOlwiY2xvc2V0YWdcIix2YWx1ZTplfSkpO2ZvciBhd2FpdChjb25zdCBuIG9mIGUpe2lmKHQud3JpdGUocyhuKSkscil0aHJvdyByO3lpZWxkIG8sbz1bXX19fSx7XCIuL2Jyb3dzZXItYnVmZmVyLWRlY29kZVwiOjE2LFwicmVhZGFibGUtc3RyZWFtXCI6NDkxLHNheGVzOjQ5Nn1dLDIzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi9jb2wtY2FjaGVcIiksaT0vKChbYS16X1xcLTAtOV0qKSEpPyhbYS16MC05XyRdezIsfSkoWyhdKT8vZ2kscz0vXihbJF0pPyhbYS16XSspKFskXSk/KFsxLTldWzAtOV0qKSQvaTt0LmV4cG9ydHM9e3NsaWRlRm9ybXVsYTpmdW5jdGlvbihlLHQscil7Y29uc3Qgbz1uLmRlY29kZSh0KSxhPW4uZGVjb2RlKHIpO3JldHVybiBlLnJlcGxhY2UoaSwoZSx0LHIsaSxsKT0+e2lmKGwpcmV0dXJuIGU7Y29uc3QgYz1zLmV4ZWMoaSk7aWYoYyl7Y29uc3Qgcj1jWzFdLGk9Y1syXS50b1VwcGVyQ2FzZSgpLHM9Y1szXSxsPWNbNF07aWYoaS5sZW5ndGg+M3x8Mz09PWkubGVuZ3RoJiZpPlwiWEZEXCIpcmV0dXJuIGU7bGV0IHU9bi5sMm4oaSksaD1wYXJzZUludChsLDEwKTtyfHwodSs9YS5jb2wtby5jb2wpLHN8fChoKz1hLnJvdy1vLnJvdyk7cmV0dXJuKHR8fFwiXCIpKyhyfHxcIlwiKStuLm4ybCh1KSsoc3x8XCJcIikraH1yZXR1cm4gZX0pfX19LHtcIi4vY29sLWNhY2hlXCI6MTl9XSwyNDpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2NvbnN0IGk9ZShcInJlYWRhYmxlLXN0cmVhbVwiKSxzPWUoXCIuL3V0aWxzXCIpLG89ZShcIi4vc3RyaW5nLWJ1ZlwiKTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5fZGF0YT1lLHRoaXMuX2VuY29kaW5nPXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnRvQnVmZmVyKCkubGVuZ3RofWNvcHkoZSx0LHIsbil7cmV0dXJuIHRoaXMudG9CdWZmZXIoKS5jb3B5KGUsdCxyLG4pfXRvQnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnx8KHRoaXMuX2J1ZmZlcj1uLmZyb20odGhpcy5fZGF0YSx0aGlzLl9lbmNvZGluZykpLHRoaXMuX2J1ZmZlcn19Y2xhc3MgbHtjb25zdHJ1Y3RvcihlKXt0aGlzLl9kYXRhPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhLmxlbmd0aH1jb3B5KGUsdCxyLG4pe3JldHVybiB0aGlzLl9kYXRhLl9idWYuY29weShlLHQscixuKX10b0J1ZmZlcigpe3JldHVybiB0aGlzLl9kYXRhLnRvQnVmZmVyKCl9fWNsYXNzIGN7Y29uc3RydWN0b3IoZSl7dGhpcy5fZGF0YT1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fZGF0YS5sZW5ndGh9Y29weShlLHQscixuKXt0aGlzLl9kYXRhLmNvcHkoZSx0LHIsbil9dG9CdWZmZXIoKXtyZXR1cm4gdGhpcy5fZGF0YX19Y2xhc3MgdXtjb25zdHJ1Y3RvcihlKXt0aGlzLnNpemU9ZSx0aGlzLmJ1ZmZlcj1uLmFsbG9jKGUpLHRoaXMuaVJlYWQ9MCx0aGlzLmlXcml0ZT0wfXRvQnVmZmVyKCl7aWYoMD09PXRoaXMuaVJlYWQmJnRoaXMuaVdyaXRlPT09dGhpcy5zaXplKXJldHVybiB0aGlzLmJ1ZmZlcjtjb25zdCBlPW4uYWxsb2ModGhpcy5pV3JpdGUtdGhpcy5pUmVhZCk7cmV0dXJuIHRoaXMuYnVmZmVyLmNvcHkoZSwwLHRoaXMuaVJlYWQsdGhpcy5pV3JpdGUpLGV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmlXcml0ZS10aGlzLmlSZWFkfWdldCBlb2QoKXtyZXR1cm4gdGhpcy5pUmVhZD09PXRoaXMuaVdyaXRlfWdldCBmdWxsKCl7cmV0dXJuIHRoaXMuaVdyaXRlPT09dGhpcy5zaXplfXJlYWQoZSl7bGV0IHQ7cmV0dXJuIDA9PT1lP251bGw6dm9pZCAwPT09ZXx8ZT49dGhpcy5sZW5ndGg/KHQ9dGhpcy50b0J1ZmZlcigpLHRoaXMuaVJlYWQ9dGhpcy5pV3JpdGUsdCk6KHQ9bi5hbGxvYyhlKSx0aGlzLmJ1ZmZlci5jb3B5KHQsMCx0aGlzLmlSZWFkLGUpLHRoaXMuaVJlYWQrPWUsdCl9d3JpdGUoZSx0LHIpe2NvbnN0IG49TWF0aC5taW4ocix0aGlzLnNpemUtdGhpcy5pV3JpdGUpO3JldHVybiBlLmNvcHkodGhpcy5idWZmZXIsdGhpcy5pV3JpdGUsdCx0K24pLHRoaXMuaVdyaXRlKz1uLG59fWNvbnN0IGg9ZnVuY3Rpb24oZSl7ZT1lfHx7fSx0aGlzLmJ1ZlNpemU9ZS5idWZTaXplfHwxMDQ4NTc2LHRoaXMuYnVmZmVycz1bXSx0aGlzLmJhdGNoPWUuYmF0Y2h8fCExLHRoaXMuY29ya2VkPSExLHRoaXMuaW5Qb3M9MCx0aGlzLm91dFBvcz0wLHRoaXMucGlwZXM9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5lbmNvZGluZz1udWxsfTtzLmluaGVyaXRzKGgsaS5EdXBsZXgse3RvQnVmZmVyKCl7c3dpdGNoKHRoaXMuYnVmZmVycy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbnVsbDtjYXNlIDE6cmV0dXJuIHRoaXMuYnVmZmVyc1swXS50b0J1ZmZlcigpO2RlZmF1bHQ6cmV0dXJuIG4uY29uY2F0KHRoaXMuYnVmZmVycy5tYXAoZT0+ZS50b0J1ZmZlcigpKSl9fSxfZ2V0V3JpdGFibGVCdWZmZXIoKXtpZih0aGlzLmJ1ZmZlcnMubGVuZ3RoKXtjb25zdCBlPXRoaXMuYnVmZmVyc1t0aGlzLmJ1ZmZlcnMubGVuZ3RoLTFdO2lmKCFlLmZ1bGwpcmV0dXJuIGV9Y29uc3QgZT1uZXcgdSh0aGlzLmJ1ZlNpemUpO3JldHVybiB0aGlzLmJ1ZmZlcnMucHVzaChlKSxlfSxhc3luYyBfcGlwZShlKXthd2FpdCBQcm9taXNlLmFsbCh0aGlzLnBpcGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9Pnt0LndyaXRlKGUudG9CdWZmZXIoKSwoKT0+e3IoKX0pfSl9KSkpfSxfd3JpdGVUb0J1ZmZlcnMoZSl7bGV0IHQ9MDtjb25zdCByPWUubGVuZ3RoO2Zvcig7dDxyOyl7dCs9dGhpcy5fZ2V0V3JpdGFibGVCdWZmZXIoKS53cml0ZShlLHQsci10KX19LGFzeW5jIHdyaXRlKGUsdCxpKXtsZXQgdTtpZih0IGluc3RhbmNlb2YgRnVuY3Rpb24mJihpPXQsdD1cInV0ZjhcIiksaT1pfHxzLm5vcCxlIGluc3RhbmNlb2Ygbyl1PW5ldyBsKGUpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIG4pdT1uZXcgYyhlKTtlbHNle2lmKCEoXCJzdHJpbmdcIj09dHlwZW9mIGV8fGUgaW5zdGFuY2VvZiBTdHJpbmd8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKFwiQ2h1bmsgbXVzdCBiZSBvbmUgb2YgdHlwZSBTdHJpbmcsIEJ1ZmZlciBvciBTdHJpbmdCdWYuXCIpO3U9bmV3IGEoZSx0KX1pZih0aGlzLnBpcGVzLmxlbmd0aClpZih0aGlzLmJhdGNoKWZvcih0aGlzLl93cml0ZVRvQnVmZmVycyh1KTshdGhpcy5jb3JrZWQmJnRoaXMuYnVmZmVycy5sZW5ndGg+MTspdGhpcy5fcGlwZSh0aGlzLmJ1ZmZlcnMuc2hpZnQoKSk7ZWxzZSB0aGlzLmNvcmtlZD8odGhpcy5fd3JpdGVUb0J1ZmZlcnModSksci5uZXh0VGljayhpKSk6KGF3YWl0IHRoaXMuX3BpcGUodSksaSgpKTtlbHNlIHRoaXMucGF1c2VkfHx0aGlzLmVtaXQoXCJkYXRhXCIsdS50b0J1ZmZlcigpKSx0aGlzLl93cml0ZVRvQnVmZmVycyh1KSx0aGlzLmVtaXQoXCJyZWFkYWJsZVwiKTtyZXR1cm4hMH0sY29yaygpe3RoaXMuY29ya2VkPSEwfSxfZmx1c2goKXtpZih0aGlzLnBpcGVzLmxlbmd0aClmb3IoO3RoaXMuYnVmZmVycy5sZW5ndGg7KXRoaXMuX3BpcGUodGhpcy5idWZmZXJzLnNoaWZ0KCkpfSx1bmNvcmsoKXt0aGlzLmNvcmtlZD0hMSx0aGlzLl9mbHVzaCgpfSxlbmQoZSx0LHIpe2NvbnN0IG49ZT0+e2U/cihlKToodGhpcy5fZmx1c2goKSx0aGlzLnBpcGVzLmZvckVhY2goZT0+e2UuZW5kKCl9KSx0aGlzLmVtaXQoXCJmaW5pc2hcIikpfTtlP3RoaXMud3JpdGUoZSx0LG4pOm4oKX0scmVhZChlKXtsZXQgdDtpZihlKXtmb3IodD1bXTtlJiZ0aGlzLmJ1ZmZlcnMubGVuZ3RoJiYhdGhpcy5idWZmZXJzWzBdLmVvZDspe2NvbnN0IHI9dGhpcy5idWZmZXJzWzBdLG49ci5yZWFkKGUpO2UtPW4ubGVuZ3RoLHQucHVzaChuKSxyLmVvZCYmci5mdWxsJiZ0aGlzLmJ1ZmZlcnMuc2hpZnQoKX1yZXR1cm4gbi5jb25jYXQodCl9cmV0dXJuIHQ9dGhpcy5idWZmZXJzLm1hcChlPT5lLnRvQnVmZmVyKCkpLmZpbHRlcihCb29sZWFuKSx0aGlzLmJ1ZmZlcnM9W10sbi5jb25jYXQodCl9LHNldEVuY29kaW5nKGUpe3RoaXMuZW5jb2Rpbmc9ZX0scGF1c2UoKXt0aGlzLnBhdXNlZD0hMH0scmVzdW1lKCl7dGhpcy5wYXVzZWQ9ITF9LGlzUGF1c2VkKCl7cmV0dXJuISF0aGlzLnBhdXNlZH0scGlwZShlKXt0aGlzLnBpcGVzLnB1c2goZSksIXRoaXMucGF1c2VkJiZ0aGlzLmJ1ZmZlcnMubGVuZ3RoJiZ0aGlzLmVuZCgpfSx1bnBpcGUoZSl7dGhpcy5waXBlcz10aGlzLnBpcGVzLmZpbHRlcih0PT50IT09ZSl9LHVuc2hpZnQoKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgSW1wbGVtZW50ZWRcIil9LHdyYXAoKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgSW1wbGVtZW50ZWRcIil9fSksdC5leHBvcnRzPWh9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJfcHJvY2Vzc1wiKSxlKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtcIi4vc3RyaW5nLWJ1ZlwiOjI1LFwiLi91dGlsc1wiOjI3LF9wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLFwicmVhZGFibGUtc3RyZWFtXCI6NDkxfV0sMjU6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuX2J1Zj1lLmFsbG9jKHQmJnQuc2l6ZXx8MTYzODQpLHRoaXMuX2VuY29kaW5nPXQmJnQuZW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuX2luUG9zPTAsdGhpcy5fYnVmZmVyPXZvaWQgMH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2luUG9zfWdldCBjYXBhY2l0eSgpe3JldHVybiB0aGlzLl9idWYubGVuZ3RofWdldCBidWZmZXIoKXtyZXR1cm4gdGhpcy5fYnVmfXRvQnVmZmVyKCl7cmV0dXJuIHRoaXMuX2J1ZmZlcnx8KHRoaXMuX2J1ZmZlcj1lLmFsbG9jKHRoaXMubGVuZ3RoKSx0aGlzLl9idWYuY29weSh0aGlzLl9idWZmZXIsMCwwLHRoaXMubGVuZ3RoKSksdGhpcy5fYnVmZmVyfXJlc2V0KGUpe2U9ZXx8MCx0aGlzLl9idWZmZXI9dm9pZCAwLHRoaXMuX2luUG9zPWV9X2dyb3codCl7bGV0IHI9Mip0aGlzLl9idWYubGVuZ3RoO2Zvcig7cjx0OylyKj0yO2NvbnN0IG49ZS5hbGxvYyhyKTt0aGlzLl9idWYuY29weShuLDApLHRoaXMuX2J1Zj1ufWFkZFRleHQoZSl7dGhpcy5fYnVmZmVyPXZvaWQgMDtsZXQgdD10aGlzLl9pblBvcyt0aGlzLl9idWYud3JpdGUoZSx0aGlzLl9pblBvcyx0aGlzLl9lbmNvZGluZyk7Zm9yKDt0Pj10aGlzLl9idWYubGVuZ3RoLTQ7KXRoaXMuX2dyb3codGhpcy5faW5Qb3MrZS5sZW5ndGgpLHQ9dGhpcy5faW5Qb3MrdGhpcy5fYnVmLndyaXRlKGUsdGhpcy5faW5Qb3MsdGhpcy5fZW5jb2RpbmcpO3RoaXMuX2luUG9zPXR9YWRkU3RyaW5nQnVmKGUpe2UubGVuZ3RoJiYodGhpcy5fYnVmZmVyPXZvaWQgMCx0aGlzLmxlbmd0aCtlLmxlbmd0aD50aGlzLmNhcGFjaXR5JiZ0aGlzLl9ncm93KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSxlLl9idWYuY29weSh0aGlzLl9idWYsdGhpcy5faW5Qb3MsMCxlLmxlbmd0aCksdGhpcy5faW5Qb3MrPWUubGVuZ3RoKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6MjIwfV0sMjY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdHt0b1N0cmluZzpufT1PYmplY3QucHJvdG90eXBlLGk9L1tcIiY8Pl0vLHM9e2VhY2g6ZnVuY3Rpb24oZSx0KXtlJiYoQXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2godCk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChyPT57dChlW3JdLHIpfSkpfSxzb21lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuISFlJiYoQXJyYXkuaXNBcnJheShlKT9lLnNvbWUodCk6T2JqZWN0LmtleXMoZSkuc29tZShyPT50KGVbcl0scikpKX0sZXZlcnk6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hZXx8KEFycmF5LmlzQXJyYXkoZSk/ZS5ldmVyeSh0KTpPYmplY3Qua2V5cyhlKS5ldmVyeShyPT50KGVbcl0scikpKX0sbWFwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/QXJyYXkuaXNBcnJheShlKT9lLm1hcCh0KTpPYmplY3Qua2V5cyhlKS5tYXAocj0+dChlW3JdLHIpKTpbXX0sa2V5Qnk6KGUsdCk9PmUucmVkdWNlKChlLHIpPT4oZVtyW3RdXT1yLGUpLHt9KSxpc0VxdWFsOmZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj10eXBlb2YgZSxuPXR5cGVvZiB0LGk9QXJyYXkuaXNBcnJheShlKSxvPUFycmF5LmlzQXJyYXkodCk7bGV0IGE7aWYociE9PW4pcmV0dXJuITE7c3dpdGNoKHR5cGVvZiBlKXtjYXNlXCJvYmplY3RcIjppZihpfHxvKXJldHVybiEoIWl8fCFvKSYmKGUubGVuZ3RoPT09dC5sZW5ndGgmJmUuZXZlcnkoKGUscik9Pntjb25zdCBuPXRbcl07cmV0dXJuIHMuaXNFcXVhbChlLG4pfSkpO2lmKG51bGw9PT1lfHxudWxsPT09dClyZXR1cm4gZT09PXQ7aWYoYT1PYmplY3Qua2V5cyhlKSxPYmplY3Qua2V5cyh0KS5sZW5ndGghPT1hLmxlbmd0aClyZXR1cm4hMTtmb3IoY29uc3QgZSBvZiBhKWlmKCF0Lmhhc093blByb3BlcnR5KGUpKXJldHVybiExO3JldHVybiBzLmV2ZXJ5KGUsKGUscik9Pntjb25zdCBuPXRbcl07cmV0dXJuIHMuaXNFcXVhbChlLG4pfSk7ZGVmYXVsdDpyZXR1cm4gZT09PXR9fSxlc2NhcGVIdG1sKGUpe2NvbnN0IHQ9aS5leGVjKGUpO2lmKCF0KXJldHVybiBlO2xldCByPVwiXCIsbj1cIlwiLHM9MCxvPXQuaW5kZXg7Zm9yKDtvPGUubGVuZ3RoO28rKyl7c3dpdGNoKGUuY2hhckF0KG8pKXtjYXNlJ1wiJzpuPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZVwiJlwiOm49XCImYW1wO1wiO2JyZWFrO2Nhc2VcIidcIjpuPVwiJmFwb3M7XCI7YnJlYWs7Y2FzZVwiPFwiOm49XCImbHQ7XCI7YnJlYWs7Y2FzZVwiPlwiOm49XCImZ3Q7XCI7YnJlYWs7ZGVmYXVsdDpjb250aW51ZX1zIT09byYmKHIrPWUuc3Vic3RyaW5nKHMsbykpLHM9bysxLHIrPW59cmV0dXJuIHMhPT1vP3IrZS5zdWJzdHJpbmcocyxvKTpyfSxzdHJjbXA6KGUsdCk9PmU8dD8tMTplPnQ/MTowLGlzVW5kZWZpbmVkOmU9PlwiW29iamVjdCBVbmRlZmluZWRdXCI9PT1uLmNhbGwoZSksaXNPYmplY3Q6ZT0+XCJbb2JqZWN0IE9iamVjdF1cIj09PW4uY2FsbChlKSxkZWVwTWVyZ2UoKXtjb25zdCBlPWFyZ3VtZW50c1swXXx8e30se2xlbmd0aDp0fT1hcmd1bWVudHM7bGV0IHIsbixpO2Z1bmN0aW9uIG8odCxvKXtyPWVbb10saT1BcnJheS5pc0FycmF5KHQpLHMuaXNPYmplY3QodCl8fGk/KGk/KGk9ITEsbj1yJiZBcnJheS5pc0FycmF5KHIpP3I6W10pOm49ciYmcy5pc09iamVjdChyKT9yOnt9LGVbb109cy5kZWVwTWVyZ2Uobix0KSk6cy5pc1VuZGVmaW5lZCh0KXx8KGVbb109dCl9Zm9yKGxldCBlPTA7ZTx0O2UrKylzLmVhY2goYXJndW1lbnRzW2VdLG8pO3JldHVybiBlfX07dC5leHBvcnRzPXN9LHt9XSwyNzpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2NvbnN0IGk9ZShcImZzXCIpLHM9L1s8PiYnXCJcXHg3RlxceDAwLVxceDA4XFx4MEItXFx4MENcXHgwRS1cXHgxRl0vLG89e25vcCgpe30scHJvbWlzZUltbWVkaWF0ZTplPT5uZXcgUHJvbWlzZSh0PT57ci5zZXRJbW1lZGlhdGU/bigoKT0+e3QoZSl9KTpzZXRUaW1lb3V0KCgpPT57dChlKX0sMSl9KSxpbmhlcml0czpmdW5jdGlvbihlLHQscixuKXtlLnN1cGVyXz10LG58fChuPXIscj1udWxsKSxyJiZPYmplY3Qua2V5cyhyKS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KTtjb25zdCBpPXtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH19O24mJk9iamVjdC5rZXlzKG4pLmZvckVhY2goZT0+e2lbZV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLGUpfSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxpKX0sZGF0ZVRvRXhjZWw6KGUsdCk9PjI1NTY5K2UuZ2V0VGltZSgpLzg2NGU1LSh0PzE0NjI6MCksZXhjZWxUb0RhdGUoZSx0KXtjb25zdCByPU1hdGgucm91bmQoMjQqKGUtMjU1NjkrKHQ/MTQ2MjowKSkqMzYwMCoxZTMpO3JldHVybiBuZXcgRGF0ZShyKX0scGFyc2VQYXRoKGUpe2NvbnN0IHQ9ZS5sYXN0SW5kZXhPZihcIi9cIik7cmV0dXJue3BhdGg6ZS5zdWJzdHJpbmcoMCx0KSxuYW1lOmUuc3Vic3RyaW5nKHQrMSl9fSxnZXRSZWxzUGF0aChlKXtjb25zdCB0PW8ucGFyc2VQYXRoKGUpO3JldHVybmAke3QucGF0aH0vX3JlbHMvJHt0Lm5hbWV9LnJlbHNgfSx4bWxFbmNvZGUoZSl7Y29uc3QgdD1zLmV4ZWMoZSk7aWYoIXQpcmV0dXJuIGU7bGV0IHI9XCJcIixuPVwiXCIsaT0wLG89dC5pbmRleDtmb3IoO288ZS5sZW5ndGg7bysrKXtjb25zdCB0PWUuY2hhckNvZGVBdChvKTtzd2l0Y2godCl7Y2FzZSAzNDpuPVwiJnF1b3Q7XCI7YnJlYWs7Y2FzZSAzODpuPVwiJmFtcDtcIjticmVhaztjYXNlIDM5Om49XCImYXBvcztcIjticmVhaztjYXNlIDYwOm49XCImbHQ7XCI7YnJlYWs7Y2FzZSA2MjpuPVwiJmd0O1wiO2JyZWFrO2Nhc2UgMTI3Om49XCJcIjticmVhaztkZWZhdWx0OmlmKHQ8PTMxJiYodDw9OHx8dD49MTEmJjEzIT09dCkpe249XCJcIjticmVha31jb250aW51ZX1pIT09byYmKHIrPWUuc3Vic3RyaW5nKGksbykpLGk9bysxLG4mJihyKz1uKX1yZXR1cm4gaSE9PW8/citlLnN1YnN0cmluZyhpLG8pOnJ9LHhtbERlY29kZTplPT5lLnJlcGxhY2UoLyYoW2Etel0qKTsvZyxlPT57c3dpdGNoKGUpe2Nhc2VcIiZsdDtcIjpyZXR1cm5cIjxcIjtjYXNlXCImZ3Q7XCI6cmV0dXJuXCI+XCI7Y2FzZVwiJmFtcDtcIjpyZXR1cm5cIiZcIjtjYXNlXCImYXBvcztcIjpyZXR1cm5cIidcIjtjYXNlXCImcXVvdDtcIjpyZXR1cm4nXCInO2RlZmF1bHQ6cmV0dXJuIGV9fSksdmFsaWRJbnQoZSl7Y29uc3QgdD1wYXJzZUludChlLDEwKTtyZXR1cm4gTnVtYmVyLmlzTmFOKHQpPzA6dH0saXNEYXRlRm10KGUpe2lmKCFlKXJldHVybiExO3JldHVybiBudWxsIT09KGU9KGU9ZS5yZXBsYWNlKC9cXFtbXlxcXV0qXS9nLFwiXCIpKS5yZXBsYWNlKC9cIlteXCJdKlwiL2csXCJcIikpLm1hdGNoKC9beW1kaE1zYl0rLyl9LGZzOntleGlzdHM6ZT0+bmV3IFByb21pc2UodD0+e2kuYWNjZXNzKGUsaS5jb25zdGFudHMuRl9PSyxlPT57dCghZSl9KX0pfSx0b0lzb0RhdGVTdHJpbmc6ZT0+ZS50b0lzb1N0cmluZygpLnN1YnNzdHIoMCwxMCkscGFyc2VCb29sZWFuOmU9PiEwPT09ZXx8XCJ0cnVlXCI9PT1lfHwxPT09ZXx8XCIxXCI9PT1lfTt0LmV4cG9ydHM9b30pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxlKFwidGltZXJzXCIpLnNldEltbWVkaWF0ZSl9LHtmczoyMTYsdGltZXJzOjUyM31dLDI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi91bmRlci1kYXNoXCIpLGk9ZShcIi4vdXRpbHNcIik7ZnVuY3Rpb24gcyhlLHQscil7ZS5wdXNoKGAgJHt0fT1cIiR7aS54bWxFbmNvZGUoci50b1N0cmluZygpKX1cImApfWZ1bmN0aW9uIG8oZSx0KXtpZih0KXtjb25zdCByPVtdO24uZWFjaCh0LChlLHQpPT57dm9pZCAwIT09ZSYmcyhyLHQsZSl9KSxlLnB1c2goci5qb2luKFwiXCIpKX19Y2xhc3MgYXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3htbD1bXSx0aGlzLl9zdGFjaz1bXSx0aGlzLl9yb2xsYmFja3M9W119Z2V0IHRvcygpe3JldHVybiB0aGlzLl9zdGFjay5sZW5ndGg/dGhpcy5fc3RhY2tbdGhpcy5fc3RhY2subGVuZ3RoLTFdOnZvaWQgMH1nZXQgY3Vyc29yKCl7cmV0dXJuIHRoaXMuX3htbC5sZW5ndGh9b3BlblhtbChlKXtjb25zdCB0PXRoaXMuX3htbDt0LnB1c2goXCI8P3htbFwiKSxvKHQsZSksdC5wdXNoKFwiPz5cXG5cIil9b3Blbk5vZGUoZSx0KXtjb25zdCByPXRoaXMudG9zLG49dGhpcy5feG1sO3ImJnRoaXMub3BlbiYmbi5wdXNoKFwiPlwiKSx0aGlzLl9zdGFjay5wdXNoKGUpLG4ucHVzaChcIjxcIiksbi5wdXNoKGUpLG8obix0KSx0aGlzLmxlYWY9ITAsdGhpcy5vcGVuPSEwfWFkZEF0dHJpYnV0ZShlLHQpe2lmKCF0aGlzLm9wZW4pdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHdyaXRlIGF0dHJpYnV0ZXMgdG8gbm9kZSBpZiBpdCBpcyBub3Qgb3BlblwiKTt2b2lkIDAhPT10JiZzKHRoaXMuX3htbCxlLHQpfWFkZEF0dHJpYnV0ZXMoZSl7aWYoIXRoaXMub3Blbil0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgd3JpdGUgYXR0cmlidXRlcyB0byBub2RlIGlmIGl0IGlzIG5vdCBvcGVuXCIpO28odGhpcy5feG1sLGUpfXdyaXRlVGV4dChlKXtjb25zdCB0PXRoaXMuX3htbDt0aGlzLm9wZW4mJih0LnB1c2goXCI+XCIpLHRoaXMub3Blbj0hMSksdGhpcy5sZWFmPSExLHQucHVzaChpLnhtbEVuY29kZShlLnRvU3RyaW5nKCkpKX13cml0ZVhtbChlKXt0aGlzLm9wZW4mJih0aGlzLl94bWwucHVzaChcIj5cIiksdGhpcy5vcGVuPSExKSx0aGlzLmxlYWY9ITEsdGhpcy5feG1sLnB1c2goZSl9Y2xvc2VOb2RlKCl7Y29uc3QgZT10aGlzLl9zdGFjay5wb3AoKSx0PXRoaXMuX3htbDt0aGlzLmxlYWY/dC5wdXNoKFwiLz5cIik6KHQucHVzaChcIjwvXCIpLHQucHVzaChlKSx0LnB1c2goXCI+XCIpKSx0aGlzLm9wZW49ITEsdGhpcy5sZWFmPSExfWxlYWZOb2RlKGUsdCxyKXt0aGlzLm9wZW5Ob2RlKGUsdCksdm9pZCAwIT09ciYmdGhpcy53cml0ZVRleHQociksdGhpcy5jbG9zZU5vZGUoKX1jbG9zZUFsbCgpe2Zvcig7dGhpcy5fc3RhY2subGVuZ3RoOyl0aGlzLmNsb3NlTm9kZSgpfWFkZFJvbGxiYWNrKCl7cmV0dXJuIHRoaXMuX3JvbGxiYWNrcy5wdXNoKHt4bWw6dGhpcy5feG1sLmxlbmd0aCxzdGFjazp0aGlzLl9zdGFjay5sZW5ndGgsbGVhZjp0aGlzLmxlYWYsb3Blbjp0aGlzLm9wZW59KSx0aGlzLmN1cnNvcn1jb21taXQoKXt0aGlzLl9yb2xsYmFja3MucG9wKCl9cm9sbGJhY2soKXtjb25zdCBlPXRoaXMuX3JvbGxiYWNrcy5wb3AoKTt0aGlzLl94bWwubGVuZ3RoPmUueG1sJiZ0aGlzLl94bWwuc3BsaWNlKGUueG1sLHRoaXMuX3htbC5sZW5ndGgtZS54bWwpLHRoaXMuX3N0YWNrLmxlbmd0aD5lLnN0YWNrJiZ0aGlzLl9zdGFjay5zcGxpY2UoZS5zdGFjayx0aGlzLl9zdGFjay5sZW5ndGgtZS5zdGFjayksdGhpcy5sZWFmPWUubGVhZix0aGlzLm9wZW49ZS5vcGVufWdldCB4bWwoKXtyZXR1cm4gdGhpcy5jbG9zZUFsbCgpLHRoaXMuX3htbC5qb2luKFwiXCIpfX1hLlN0ZERvY0F0dHJpYnV0ZXM9e3ZlcnNpb246XCIxLjBcIixlbmNvZGluZzpcIlVURi04XCIsc3RhbmRhbG9uZTpcInllc1wifSx0LmV4cG9ydHM9YX0se1wiLi91bmRlci1kYXNoXCI6MjYsXCIuL3V0aWxzXCI6Mjd9XSwyOTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCJldmVudHNcIiksaT1lKFwianN6aXBcIikscz1lKFwiLi9zdHJlYW0tYnVmXCIpLHtzdHJpbmdUb0J1ZmZlcjpvfT1lKFwiLi9icm93c2VyLWJ1ZmZlci1lbmNvZGVcIik7Y2xhc3MgYSBleHRlbmRzIG4uRXZlbnRFbWl0dGVye2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5vcHRpb25zPU9iamVjdC5hc3NpZ24oe3R5cGU6XCJub2RlYnVmZmVyXCIsY29tcHJlc3Npb246XCJERUZMQVRFXCJ9LGUpLHRoaXMuemlwPW5ldyBpLHRoaXMuc3RyZWFtPW5ldyBzfWFwcGVuZChlLHQpe3QuaGFzT3duUHJvcGVydHkoXCJiYXNlNjRcIikmJnQuYmFzZTY0P3RoaXMuemlwLmZpbGUodC5uYW1lLGUse2Jhc2U2NDohMH0pOihyLmJyb3dzZXImJlwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1vKGUpKSx0aGlzLnppcC5maWxlKHQubmFtZSxlKSl9YXN5bmMgZmluYWxpemUoKXtjb25zdCBlPWF3YWl0IHRoaXMuemlwLmdlbmVyYXRlQXN5bmModGhpcy5vcHRpb25zKTt0aGlzLnN0cmVhbS5lbmQoZSksdGhpcy5lbWl0KFwiZmluaXNoXCIpfXJlYWQoZSl7cmV0dXJuIHRoaXMuc3RyZWFtLnJlYWQoZSl9c2V0RW5jb2RpbmcoZSl7cmV0dXJuIHRoaXMuc3RyZWFtLnNldEVuY29kaW5nKGUpfXBhdXNlKCl7cmV0dXJuIHRoaXMuc3RyZWFtLnBhdXNlKCl9cmVzdW1lKCl7cmV0dXJuIHRoaXMuc3RyZWFtLnJlc3VtZSgpfWlzUGF1c2VkKCl7cmV0dXJuIHRoaXMuc3RyZWFtLmlzUGF1c2VkKCl9cGlwZShlLHQpe3JldHVybiB0aGlzLnN0cmVhbS5waXBlKGUsdCl9dW5waXBlKGUpe3JldHVybiB0aGlzLnN0cmVhbS51bnBpcGUoZSl9dW5zaGlmdChlKXtyZXR1cm4gdGhpcy5zdHJlYW0udW5zaGlmdChlKX13cmFwKGUpe3JldHVybiB0aGlzLnN0cmVhbS53cmFwKGUpfX10LmV4cG9ydHM9e1ppcFdyaXRlcjphfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpKX0se1wiLi9icm93c2VyLWJ1ZmZlci1lbmNvZGVcIjoxNyxcIi4vc3RyZWFtLWJ1ZlwiOjI0LF9wcm9jZXNzOjQ2NyxldmVudHM6NDIyLGpzemlwOjQ0MX1dLDMwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXswOntmOlwiR2VuZXJhbFwifSwxOntmOlwiMFwifSwyOntmOlwiMC4wMFwifSwzOntmOlwiIywjIzBcIn0sNDp7ZjpcIiMsIyMwLjAwXCJ9LDk6e2Y6XCIwJVwifSwxMDp7ZjpcIjAuMDAlXCJ9LDExOntmOlwiMC4wMEUrMDBcIn0sMTI6e2Y6XCIjID8vP1wifSwxMzp7ZjpcIiMgPz8vPz9cIn0sMTQ6e2Y6XCJtbS1kZC15eVwifSwxNTp7ZjpcImQtbW1tLXl5XCJ9LDE2OntmOlwiZC1tbW1cIn0sMTc6e2Y6XCJtbW0teXlcIn0sMTg6e2Y6XCJoOm1tIEFNL1BNXCJ9LDE5OntmOlwiaDptbTpzcyBBTS9QTVwifSwyMDp7ZjpcImg6bW1cIn0sMjE6e2Y6XCJoOm1tOnNzXCJ9LDIyOntmOidtL2QveXkgXCJoXCI6bW0nfSwyNzp7XCJ6aC10d1wiOlwiWyQtNDA0XWUvbS9kXCIsXCJ6aC1jblwiOid5eXl5XCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCInLFwiamEtanBcIjpcIlskLTQxMV1nZS5tLmRcIixcImtvLWtyXCI6J3l5eXlcIlxcdTVlNzRcIiBtbVwiXFx1NjcwOFwiIGRkXCJcXHU2NWU1XCInfSwyODp7XCJ6aC10d1wiOidbJC00MDRdZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcInpoLWNuXCI6J21cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJqYS1qcFwiOidbJC00MTFdZ2dnZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImtvLWtyXCI6XCJtbS1kZFwifSwyOTp7XCJ6aC10d1wiOidbJC00MDRdZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcInpoLWNuXCI6J21cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJqYS1qcFwiOidbJC00MTFdZ2dnZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImtvLWtyXCI6XCJtbS1kZFwifSwzMDp7XCJ6aC10d1wiOlwibS9kL3l5IFwiLFwiemgtY25cIjpcIm0tZC15eVwiLFwiamEtanBcIjpcIm0vZC95eVwiLFwia28ta3JcIjpcIm1tLWRkLXl5XCJ9LDMxOntcInpoLXR3XCI6J3l5eXlcIlxcdTVlNzRcIm1cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJ6aC1jblwiOid5eXl5XCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwiamEtanBcIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImtvLWtyXCI6J3l5eXlcIlxcdWIxNDRcIiBtbVwiXFx1YzZkNFwiIGRkXCJcXHVjNzdjXCInfSwzMjp7XCJ6aC10d1wiOidoaFwiXFx1NjY0MlwibW1cIlxcdTUyMDZcIicsXCJ6aC1jblwiOidoXCJcXHU2NWY2XCJtbVwiXFx1NTIwNlwiJyxcImphLWpwXCI6J2hcIlxcdTY2NDJcIm1tXCJcXHU1MjA2XCInLFwia28ta3JcIjonaFwiXFx1YzJkY1wiIG1tXCJcXHViZDg0XCInfSwzMzp7XCJ6aC10d1wiOidoaFwiXFx1NjY0MlwibW1cIlxcdTUyMDZcInNzXCJcXHU3OWQyXCInLFwiemgtY25cIjonaFwiXFx1NjVmNlwibW1cIlxcdTUyMDZcInNzXCJcXHU3OWQyXCInLFwiamEtanBcIjonaFwiXFx1NjY0MlwibW1cIlxcdTUyMDZcInNzXCJcXHU3OWQyXCInLFwia28ta3JcIjonaFwiXFx1YzJkY1wiIG1tXCJcXHViZDg0XCIgc3NcIlxcdWNkMDhcIid9LDM0OntcInpoLXR3XCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhoXCJcXHU2NjQyXCJtbVwiXFx1NTIwNlwiJyxcInpoLWNuXCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhcIlxcdTY1ZjZcIm1tXCJcXHU1MjA2XCInLFwiamEtanBcIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiJyxcImtvLWtyXCI6XCJ5eXl5LW1tLWRkXCJ9LDM1OntcInpoLXR3XCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhoXCJcXHU2NjQyXCJtbVwiXFx1NTIwNlwic3NcIlxcdTc5ZDJcIicsXCJ6aC1jblwiOidcXHU0ZTBhXFx1NTM0OC9cXHU0ZTBiXFx1NTM0OCBoXCJcXHU2NWY2XCJtbVwiXFx1NTIwNlwic3NcIlxcdTc5ZDJcIicsXCJqYS1qcFwiOidtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwia28ta3JcIjpcInl5eXktbW0tZGRcIn0sMzY6e1wiemgtdHdcIjpcIlskLTQwNF1lL20vZFwiLFwiemgtY25cIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiJyxcImphLWpwXCI6XCJbJC00MTFdZ2UubS5kXCIsXCJrby1rclwiOid5eXl5XCJcXHU1ZTc0XCIgbW1cIlxcdTY3MDhcIiBkZFwiXFx1NjVlNVwiJ30sMzc6e2Y6XCIjLCMjMCA7KCMsIyMwKVwifSwzODp7ZjpcIiMsIyMwIDtbUmVkXSgjLCMjMClcIn0sMzk6e2Y6XCIjLCMjMC4wMCA7KCMsIyMwLjAwKVwifSw0MDp7ZjpcIiMsIyMwLjAwIDtbUmVkXSgjLCMjMC4wMClcIn0sNDU6e2Y6XCJtbTpzc1wifSw0Njp7ZjpcIltoXTptbTpzc1wifSw0Nzp7ZjpcIm1tc3MuMFwifSw0ODp7ZjpcIiMjMC4wRSswXCJ9LDQ5OntmOlwiQFwifSw1MDp7XCJ6aC10d1wiOlwiWyQtNDA0XWUvbS9kXCIsXCJ6aC1jblwiOid5eXl5XCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCInLFwiamEtanBcIjpcIlskLTQxMV1nZS5tLmRcIixcImtvLWtyXCI6J3l5eXlcIlxcdTVlNzRcIiBtbVwiXFx1NjcwOFwiIGRkXCJcXHU2NWU1XCInfSw1MTp7XCJ6aC10d1wiOidbJC00MDRdZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcInpoLWNuXCI6J21cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJqYS1qcFwiOidbJC00MTFdZ2dnZVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImtvLWtyXCI6XCJtbS1kZFwifSw1Mjp7XCJ6aC10d1wiOidcXHU0ZTBhXFx1NTM0OC9cXHU0ZTBiXFx1NTM0OCBoaFwiXFx1NjY0MlwibW1cIlxcdTUyMDZcIicsXCJ6aC1jblwiOid5eXl5XCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCInLFwiamEtanBcIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiJyxcImtvLWtyXCI6XCJ5eXl5LW1tLWRkXCJ9LDUzOntcInpoLXR3XCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhoXCJcXHU2NjQyXCJtbVwiXFx1NTIwNlwic3NcIlxcdTc5ZDJcIicsXCJ6aC1jblwiOidtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwiamEtanBcIjonbVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImtvLWtyXCI6XCJ5eXl5LW1tLWRkXCJ9LDU0OntcInpoLXR3XCI6J1skLTQwNF1lXCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwiemgtY25cIjonbVwiXFx1NjcwOFwiZFwiXFx1NjVlNVwiJyxcImphLWpwXCI6J1skLTQxMV1nZ2dlXCJcXHU1ZTc0XCJtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwia28ta3JcIjpcIm1tLWRkXCJ9LDU1OntcInpoLXR3XCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhoXCJcXHU2NjQyXCJtbVwiXFx1NTIwNlwiJyxcInpoLWNuXCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhcIlxcdTY1ZjZcIm1tXCJcXHU1MjA2XCInLFwiamEtanBcIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiJyxcImtvLWtyXCI6XCJ5eXl5LW1tLWRkXCJ9LDU2OntcInpoLXR3XCI6J1xcdTRlMGFcXHU1MzQ4L1xcdTRlMGJcXHU1MzQ4IGhoXCJcXHU2NjQyXCJtbVwiXFx1NTIwNlwic3NcIlxcdTc5ZDJcIicsXCJ6aC1jblwiOidcXHU0ZTBhXFx1NTM0OC9cXHU0ZTBiXFx1NTM0OCBoXCJcXHU2NWY2XCJtbVwiXFx1NTIwNlwic3NcIlxcdTc5ZDJcIicsXCJqYS1qcFwiOidtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwia28ta3JcIjpcInl5eXktbW0tZGRcIn0sNTc6e1wiemgtdHdcIjpcIlskLTQwNF1lL20vZFwiLFwiemgtY25cIjoneXl5eVwiXFx1NWU3NFwibVwiXFx1NjcwOFwiJyxcImphLWpwXCI6XCJbJC00MTFdZ2UubS5kXCIsXCJrby1rclwiOid5eXl5XCJcXHU1ZTc0XCIgbW1cIlxcdTY3MDhcIiBkZFwiXFx1NjVlNVwiJ30sNTg6e1wiemgtdHdcIjonWyQtNDA0XWVcIlxcdTVlNzRcIm1cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJ6aC1jblwiOidtXCJcXHU2NzA4XCJkXCJcXHU2NWU1XCInLFwiamEtanBcIjonWyQtNDExXWdnZ2VcIlxcdTVlNzRcIm1cIlxcdTY3MDhcImRcIlxcdTY1ZTVcIicsXCJrby1rclwiOlwibW0tZGRcIn0sNTk6e1widGgtdGhcIjpcInQwXCJ9LDYwOntcInRoLXRoXCI6XCJ0MC4wMFwifSw2MTp7XCJ0aC10aFwiOlwidCMsIyMwXCJ9LDYyOntcInRoLXRoXCI6XCJ0IywjIzAuMDBcIn0sNjc6e1widGgtdGhcIjpcInQwJVwifSw2ODp7XCJ0aC10aFwiOlwidDAuMDAlXCJ9LDY5OntcInRoLXRoXCI6XCJ0IyA/Lz9cIn0sNzA6e1widGgtdGhcIjpcInQjID8/Lz8/XCJ9LDgxOntcInRoLXRoXCI6XCJkL20vYmJcIn19fSx7fV0sMzE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e09mZmljZURvY3VtZW50OlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudFwiLFdvcmtzaGVldDpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0XCIsQ2FsY0NoYWluOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jYWxjQ2hhaW5cIixTaGFyZWRTdHJpbmdzOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzXCIsU3R5bGVzOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXNcIixUaGVtZTpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWVcIixIeXBlcmxpbms6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGlua1wiLEltYWdlOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZVwiLENvcmVQcm9wZXJ0aWVzOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGllc1wiLEV4dGVuZGVyUHJvcGVydGllczpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllc1wiLENvbW1lbnRzOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50c1wiLFZtbERyYXdpbmc6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmdcIixUYWJsZTpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGFibGVcIn19LHt9XSwzMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uL3V0aWxzL3BhcnNlLXNheFwiKSxpPWUoXCIuLi8uLi91dGlscy94bWwtc3RyZWFtXCIpO2NsYXNzIHN7cHJlcGFyZSgpe31yZW5kZXIoKXt9cGFyc2VPcGVuKGUpe31wYXJzZVRleHQoZSl7fXBhcnNlQ2xvc2UoZSl7fXJlY29uY2lsZShlLHQpe31yZXNldCgpe3RoaXMubW9kZWw9bnVsbCx0aGlzLm1hcCYmT2JqZWN0LnZhbHVlcyh0aGlzLm1hcCkuZm9yRWFjaChlPT57ZSBpbnN0YW5jZW9mIHM/ZS5yZXNldCgpOmUueGZvcm0mJmUueGZvcm0ucmVzZXQoKX0pfW1lcmdlTW9kZWwoZSl7dGhpcy5tb2RlbD1PYmplY3QuYXNzaWduKHRoaXMubW9kZWx8fHt9LGUpfWFzeW5jIHBhcnNlKGUpe2ZvciBhd2FpdChjb25zdCB0IG9mIGUpZm9yKGNvbnN0e2V2ZW50VHlwZTplLHZhbHVlOnJ9b2YgdClpZihcIm9wZW50YWdcIj09PWUpdGhpcy5wYXJzZU9wZW4ocik7ZWxzZSBpZihcInRleHRcIj09PWUpdGhpcy5wYXJzZVRleHQocik7ZWxzZSBpZihcImNsb3NldGFnXCI9PT1lJiYhdGhpcy5wYXJzZUNsb3NlKHIubmFtZSkpcmV0dXJuIHRoaXMubW9kZWw7cmV0dXJuIHRoaXMubW9kZWx9YXN5bmMgcGFyc2VTdHJlYW0oZSl7cmV0dXJuIHRoaXMucGFyc2UobihlKSl9Z2V0IHhtbCgpe3JldHVybiB0aGlzLnRvWG1sKHRoaXMubW9kZWwpfXRvWG1sKGUpe2NvbnN0IHQ9bmV3IGk7cmV0dXJuIHRoaXMucmVuZGVyKHQsZSksdC54bWx9c3RhdGljIHRvQXR0cmlidXRlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZih2b2lkIDA9PT1lKXtpZihyKXJldHVybiB0fWVsc2UgaWYocnx8ZSE9PXQpcmV0dXJuIGUudG9TdHJpbmcoKX1zdGF0aWMgdG9TdHJpbmdBdHRyaWJ1dGUoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3JldHVybiBzLnRvQXR0cmlidXRlKGUsdCxyKX1zdGF0aWMgdG9TdHJpbmdWYWx1ZShlLHQpe3JldHVybiB2b2lkIDA9PT1lP3Q6ZX1zdGF0aWMgdG9Cb29sQXR0cmlidXRlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZih2b2lkIDA9PT1lKXtpZihyKXJldHVybiB0fWVsc2UgaWYocnx8ZSE9PXQpcmV0dXJuIGU/XCIxXCI6XCIwXCJ9c3RhdGljIHRvQm9vbFZhbHVlKGUsdCl7cmV0dXJuIHZvaWQgMD09PWU/dDpcIjFcIj09PWV9c3RhdGljIHRvSW50QXR0cmlidXRlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtyZXR1cm4gcy50b0F0dHJpYnV0ZShlLHQscil9c3RhdGljIHRvSW50VmFsdWUoZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT90OnBhcnNlSW50KGUsMTApfXN0YXRpYyB0b0Zsb2F0QXR0cmlidXRlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtyZXR1cm4gcy50b0F0dHJpYnV0ZShlLHQscil9c3RhdGljIHRvRmxvYXRWYWx1ZShlLHQpe3JldHVybiB2b2lkIDA9PT1lP3Q6cGFyc2VGbG9hdChlKX19dC5leHBvcnRzPXN9LHtcIi4uLy4uL3V0aWxzL3BhcnNlLXNheFwiOjIyLFwiLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4fV0sMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiKTtmdW5jdGlvbiBzKGUpe3RyeXtyZXR1cm4gaS5kZWNvZGVFeChlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gbyhlKXtjb25zdCB0PVtdO2xldCByPSExLG49XCJcIjtyZXR1cm4gZS5zcGxpdChcIixcIikuZm9yRWFjaChlPT57aWYoIWUpcmV0dXJuO2NvbnN0IGk9KGUubWF0Y2goLycvZyl8fFtdKS5sZW5ndGg7aWYoIWkpcmV0dXJuIHZvaWQocj9uKz1lK1wiLFwiOnMoZSkmJnQucHVzaChlKSk7Y29uc3Qgbz1pJTI9PTA7IXImJm8mJnMoZSk/dC5wdXNoKGUpOnImJiFvPyhyPSExLHMobitlKSYmdC5wdXNoKG4rZSksbj1cIlwiKToocj0hMCxuKz1lK1wiLFwiKX0pLHR9dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntyZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKFwiZGVmaW5lZE5hbWVcIix7bmFtZTp0Lm5hbWUsbG9jYWxTaGVldElkOnQubG9jYWxTaGVldElkfSksZS53cml0ZVRleHQodC5yYW5nZXMuam9pbihcIixcIikpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2VcImRlZmluZWROYW1lXCI6cmV0dXJuIHRoaXMuX3BhcnNlZE5hbWU9ZS5hdHRyaWJ1dGVzLm5hbWUsdGhpcy5fcGFyc2VkTG9jYWxTaGVldElkPWUuYXR0cmlidXRlcy5sb2NhbFNoZWV0SWQsdGhpcy5fcGFyc2VkVGV4dD1bXSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoZSl7dGhpcy5fcGFyc2VkVGV4dC5wdXNoKGUpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5tb2RlbD17bmFtZTp0aGlzLl9wYXJzZWROYW1lLHJhbmdlczpvKHRoaXMuX3BhcnNlZFRleHQuam9pbihcIlwiKSl9LHZvaWQgMCE9PXRoaXMuX3BhcnNlZExvY2FsU2hlZXRJZCYmKHRoaXMubW9kZWwubG9jYWxTaGVldElkPXBhcnNlSW50KHRoaXMuX3BhcnNlZExvY2FsU2hlZXRJZCwxMCkpLCExfX19LHtcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91dGlsc1wiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZShcInNoZWV0XCIse3NoZWV0SWQ6dC5pZCxuYW1lOnQubmFtZSxzdGF0ZTp0LnN0YXRlLFwicjppZFwiOnQucklkfSl9cGFyc2VPcGVuKGUpe3JldHVyblwic2hlZXRcIj09PWUubmFtZSYmKHRoaXMubW9kZWw9e25hbWU6bi54bWxEZWNvZGUoZS5hdHRyaWJ1dGVzLm5hbWUpLGlkOnBhcnNlSW50KGUuYXR0cmlidXRlcy5zaGVldElkLDEwKSxzdGF0ZTplLmF0dHJpYnV0ZXMuc3RhdGUscklkOmUuYXR0cmlidXRlc1tcInI6aWRcIl19LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI6MjcsXCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwzNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntyZW5kZXIoZSx0KXtlLmxlYWZOb2RlKFwiY2FsY1ByXCIse2NhbGNJZDoxNzEwMjcsZnVsbENhbGNPbkxvYWQ6dC5mdWxsQ2FsY09uTG9hZD8xOnZvaWQgMH0pfXBhcnNlT3BlbihlKXtyZXR1cm5cImNhbGNQclwiPT09ZS5uYW1lJiYodGhpcy5tb2RlbD17fSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwzNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntyZW5kZXIoZSx0KXtlLmxlYWZOb2RlKFwid29ya2Jvb2tQclwiLHtkYXRlMTkwNDp0LmRhdGUxOTA0PzE6dm9pZCAwLGRlZmF1bHRUaGVtZVZlcnNpb246MTY0MDExLGZpbHRlclByaXZhY3k6MX0pfXBhcnNlT3BlbihlKXtyZXR1cm5cIndvcmtib29rUHJcIj09PWUubmFtZSYmKHRoaXMubW9kZWw9e2RhdGUxOTA0OlwiMVwiPT09ZS5hdHRyaWJ1dGVzLmRhdGUxOTA0fSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwzNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntyZW5kZXIoZSx0KXtjb25zdCByPXt4V2luZG93OnQueHx8MCx5V2luZG93OnQueXx8MCx3aW5kb3dXaWR0aDp0LndpZHRofHwxMmUzLHdpbmRvd0hlaWdodDp0LmhlaWdodHx8MjRlMyxmaXJzdFNoZWV0OnQuZmlyc3RTaGVldCxhY3RpdmVUYWI6dC5hY3RpdmVUYWJ9O3QudmlzaWJpbGl0eSYmXCJ2aXNpYmxlXCIhPT10LnZpc2liaWxpdHkmJihyLnZpc2liaWxpdHk9dC52aXNpYmlsaXR5KSxlLmxlYWZOb2RlKFwid29ya2Jvb2tWaWV3XCIscil9cGFyc2VPcGVuKGUpe2lmKFwid29ya2Jvb2tWaWV3XCI9PT1lLm5hbWUpe2NvbnN0IHQ9dGhpcy5tb2RlbD17fSxyPWZ1bmN0aW9uKGUscixuKXtjb25zdCBpPXZvaWQgMCE9PXI/dFtlXT1yOm47dm9pZCAwIT09aSYmKHRbZV09aSl9LG49ZnVuY3Rpb24oZSxyLG4pe2NvbnN0IGk9dm9pZCAwIT09cj90W2VdPXBhcnNlSW50KHIsMTApOm47dm9pZCAwIT09aSYmKHRbZV09aSl9O3JldHVybiBuKFwieFwiLGUuYXR0cmlidXRlcy54V2luZG93LDApLG4oXCJ5XCIsZS5hdHRyaWJ1dGVzLnlXaW5kb3csMCksbihcIndpZHRoXCIsZS5hdHRyaWJ1dGVzLndpbmRvd1dpZHRoLDI1ZTMpLG4oXCJoZWlnaHRcIixlLmF0dHJpYnV0ZXMud2luZG93SGVpZ2h0LDFlNCkscihcInZpc2liaWxpdHlcIixlLmF0dHJpYnV0ZXMudmlzaWJpbGl0eSxcInZpc2libGVcIiksbihcImFjdGl2ZVRhYlwiLGUuYXR0cmlidXRlcy5hY3RpdmVUYWIsdm9pZCAwKSxuKFwiZmlyc3RTaGVldFwiLGUuYXR0cmlidXRlcy5maXJzdFNoZWV0LHZvaWQgMCksITB9cmV0dXJuITF9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwzODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIiksaT1lKFwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlXCIpLHM9ZShcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIiksbz1lKFwiLi4vYmFzZS14Zm9ybVwiKSxhPWUoXCIuLi9zdGF0aWMteGZvcm1cIiksbD1lKFwiLi4vbGlzdC14Zm9ybVwiKSxjPWUoXCIuL2RlZmluZWQtbmFtZS14Zm9ybVwiKSx1PWUoXCIuL3NoZWV0LXhmb3JtXCIpLGg9ZShcIi4vd29ya2Jvb2stdmlldy14Zm9ybVwiKSxmPWUoXCIuL3dvcmtib29rLXByb3BlcnRpZXMteGZvcm1cIiksZD1lKFwiLi93b3JrYm9vay1jYWxjLXByb3BlcnRpZXMteGZvcm1cIik7Y2xhc3MgcCBleHRlbmRzIG97Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtmaWxlVmVyc2lvbjpwLlNUQVRJQ19YRk9STVMuZmlsZVZlcnNpb24sd29ya2Jvb2tQcjpuZXcgZixib29rVmlld3M6bmV3IGwoe3RhZzpcImJvb2tWaWV3c1wiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IGh9KSxzaGVldHM6bmV3IGwoe3RhZzpcInNoZWV0c1wiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IHV9KSxkZWZpbmVkTmFtZXM6bmV3IGwoe3RhZzpcImRlZmluZWROYW1lc1wiLGNvdW50OiExLGNoaWxkWGZvcm06bmV3IGN9KSxjYWxjUHI6bmV3IGR9fXByZXBhcmUoZSl7ZS5zaGVldHM9ZS53b3Jrc2hlZXRzO2NvbnN0IHQ9W107bGV0IHI9MDtlLnNoZWV0cy5mb3JFYWNoKGU9PntpZihlLnBhZ2VTZXR1cCYmZS5wYWdlU2V0dXAucHJpbnRBcmVhJiZlLnBhZ2VTZXR1cC5wcmludEFyZWEuc3BsaXQoXCImJlwiKS5mb3JFYWNoKG49Pntjb25zdCBpPW4uc3BsaXQoXCI6XCIpLHM9e25hbWU6XCJfeGxubS5QcmludF9BcmVhXCIscmFuZ2VzOltgJyR7ZS5uYW1lfSchJCR7aVswXX06JCR7aVsxXX1gXSxsb2NhbFNoZWV0SWQ6cn07dC5wdXNoKHMpfSksZS5wYWdlU2V0dXAmJihlLnBhZ2VTZXR1cC5wcmludFRpdGxlc1Jvd3x8ZS5wYWdlU2V0dXAucHJpbnRUaXRsZXNDb2x1bW4pKXtjb25zdCBuPVtdO2lmKGUucGFnZVNldHVwLnByaW50VGl0bGVzQ29sdW1uKXtjb25zdCB0PWUucGFnZVNldHVwLnByaW50VGl0bGVzQ29sdW1uLnNwbGl0KFwiOlwiKTtuLnB1c2goYCcke2UubmFtZX0nISQke3RbMF19OiQke3RbMV19YCl9aWYoZS5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3cpe2NvbnN0IHQ9ZS5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3cuc3BsaXQoXCI6XCIpO24ucHVzaChgJyR7ZS5uYW1lfSchJCR7dFswXX06JCR7dFsxXX1gKX1jb25zdCBpPXtuYW1lOlwiX3hsbm0uUHJpbnRfVGl0bGVzXCIscmFuZ2VzOm4sbG9jYWxTaGVldElkOnJ9O3QucHVzaChpKX1yKyt9KSx0Lmxlbmd0aCYmKGUuZGVmaW5lZE5hbWVzPWUuZGVmaW5lZE5hbWVzLmNvbmNhdCh0KSksKGUubWVkaWF8fFtdKS5mb3JFYWNoKChlLHQpPT57ZS5uYW1lPWUudHlwZSsodCsxKX0pfXJlbmRlcihlLHQpe2Uub3BlblhtbChzLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoXCJ3b3JrYm9va1wiLHAuV09SS0JPT0tfQVRUUklCVVRFUyksdGhpcy5tYXAuZmlsZVZlcnNpb24ucmVuZGVyKGUpLHRoaXMubWFwLndvcmtib29rUHIucmVuZGVyKGUsdC5wcm9wZXJ0aWVzKSx0aGlzLm1hcC5ib29rVmlld3MucmVuZGVyKGUsdC52aWV3cyksdGhpcy5tYXAuc2hlZXRzLnJlbmRlcihlLHQuc2hlZXRzKSx0aGlzLm1hcC5kZWZpbmVkTmFtZXMucmVuZGVyKGUsdC5kZWZpbmVkTmFtZXMpLHRoaXMubWFwLmNhbGNQci5yZW5kZXIoZSx0LmNhbGNQcm9wZXJ0aWVzKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcIndvcmtib29rXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZVwid29ya2Jvb2tcIjpyZXR1cm4gdGhpcy5tb2RlbD17c2hlZXRzOnRoaXMubWFwLnNoZWV0cy5tb2RlbCxwcm9wZXJ0aWVzOnRoaXMubWFwLndvcmtib29rUHIubW9kZWx8fHt9LHZpZXdzOnRoaXMubWFwLmJvb2tWaWV3cy5tb2RlbCxjYWxjUHJvcGVydGllczp7fX0sdGhpcy5tYXAuZGVmaW5lZE5hbWVzLm1vZGVsJiYodGhpcy5tb2RlbC5kZWZpbmVkTmFtZXM9dGhpcy5tYXAuZGVmaW5lZE5hbWVzLm1vZGVsKSwhMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoZSl7Y29uc3QgdD0oZS53b3JrYm9va1JlbHN8fFtdKS5yZWR1Y2UoKGUsdCk9PihlW3QuSWRdPXQsZSkse30pLHI9W107bGV0IHMsbz0wOyhlLnNoZWV0c3x8W10pLmZvckVhY2gobj0+e2NvbnN0IGk9dFtuLnJJZF07aSYmKHM9ZS53b3Jrc2hlZXRIYXNoW1wieGwvXCIraS5UYXJnZXQucmVwbGFjZSgvXihcXHN8XFwveGxcXC8pKy8sXCJcIildLHMmJihzLm5hbWU9bi5uYW1lLHMuaWQ9bi5pZCxzLnN0YXRlPW4uc3RhdGUscltvKytdPXMpKX0pO2NvbnN0IGE9W107bi5lYWNoKGUuZGVmaW5lZE5hbWVzLGU9PntpZihcIl94bG5tLlByaW50X0FyZWFcIj09PWUubmFtZSl7aWYocz1yW2UubG9jYWxTaGVldElkXSxzKXtzLnBhZ2VTZXR1cHx8KHMucGFnZVNldHVwPXt9KTtjb25zdCB0PWkuZGVjb2RlRXgoZS5yYW5nZXNbMF0pO3MucGFnZVNldHVwLnByaW50QXJlYT1zLnBhZ2VTZXR1cC5wcmludEFyZWE/YCR7cy5wYWdlU2V0dXAucHJpbnRBcmVhfSYmJHt0LmRpbWVuc2lvbnN9YDp0LmRpbWVuc2lvbnN9fWVsc2UgaWYoXCJfeGxubS5QcmludF9UaXRsZXNcIj09PWUubmFtZSl7aWYocz1yW2UubG9jYWxTaGVldElkXSxzKXtzLnBhZ2VTZXR1cHx8KHMucGFnZVNldHVwPXt9KTtjb25zdCB0PWUucmFuZ2VzLmpvaW4oXCIsXCIpLHI9L1xcJC9nLG49L1xcJFxcZCs6XFwkXFxkKy8saT10Lm1hdGNoKG4pO2lmKGkmJmkubGVuZ3RoKXtjb25zdCBlPWlbMF07cy5wYWdlU2V0dXAucHJpbnRUaXRsZXNSb3c9ZS5yZXBsYWNlKHIsXCJcIil9Y29uc3Qgbz0vXFwkW0EtWl0rOlxcJFtBLVpdKy8sYT10Lm1hdGNoKG8pO2lmKGEmJmEubGVuZ3RoKXtjb25zdCBlPWFbMF07cy5wYWdlU2V0dXAucHJpbnRUaXRsZXNDb2x1bW49ZS5yZXBsYWNlKHIsXCJcIil9fX1lbHNlIGEucHVzaChlKX0pLGUuZGVmaW5lZE5hbWVzPWEsZS5tZWRpYS5mb3JFYWNoKChlLHQpPT57ZS5pbmRleD10fSl9fXAuV09SS0JPT0tfQVRUUklCVVRFUz17eG1sbnM6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW5cIixcInhtbG5zOnJcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHNcIixcInhtbG5zOm1jXCI6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiLFwibWM6SWdub3JhYmxlXCI6XCJ4MTVcIixcInhtbG5zOngxNVwiOlwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDEwLzExL21haW5cIn0scC5TVEFUSUNfWEZPUk1TPXtmaWxlVmVyc2lvbjpuZXcgYSh7dGFnOlwiZmlsZVZlcnNpb25cIiwkOnthcHBOYW1lOlwieGxcIixsYXN0RWRpdGVkOjUsbG93ZXN0RWRpdGVkOjUscnVwQnVpbGQ6OTMwM319KX0sdC5leHBvcnRzPXB9LHtcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiOjI2LFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vbGlzdC14Zm9ybVwiOjcxLFwiLi4vc3RhdGljLXhmb3JtXCI6MTIwLFwiLi9kZWZpbmVkLW5hbWUteGZvcm1cIjozMyxcIi4vc2hlZXQteGZvcm1cIjozNCxcIi4vd29ya2Jvb2stY2FsYy1wcm9wZXJ0aWVzLXhmb3JtXCI6MzUsXCIuL3dvcmtib29rLXByb3BlcnRpZXMteGZvcm1cIjozNixcIi4vd29ya2Jvb2stdmlldy14Zm9ybVwiOjM3fV0sMzk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9zdHJpbmdzL3JpY2gtdGV4dC14Zm9ybVwiKSxpPWUoXCIuLi8uLi8uLi91dGlscy91dGlsc1wiKSxzPWUoXCIuLi9iYXNlLXhmb3JtXCIpLG89dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3RoaXMubW9kZWw9ZX07aS5pbmhlcml0cyhvLHMse2dldCB0YWcoKXtyZXR1cm5cInJcIn0sZ2V0IHJpY2hUZXh0WGZvcm0oKXtyZXR1cm4gdGhpcy5fcmljaFRleHRYZm9ybXx8KHRoaXMuX3JpY2hUZXh0WGZvcm09bmV3IG4pLHRoaXMuX3JpY2hUZXh0WGZvcm19LHJlbmRlcihlLHQpe3Q9dHx8dGhpcy5tb2RlbCxlLm9wZW5Ob2RlKFwiY29tbWVudFwiLHtyZWY6dC5yZWYsYXV0aG9ySWQ6MH0pLGUub3Blbk5vZGUoXCJ0ZXh0XCIpLHQmJnQubm90ZSYmdC5ub3RlLnRleHRzJiZ0Lm5vdGUudGV4dHMuZm9yRWFjaCh0PT57dGhpcy5yaWNoVGV4dFhmb3JtLnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKSxlLmNsb3NlTm9kZSgpfSxwYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlXCJjb21tZW50XCI6cmV0dXJuIHRoaXMubW9kZWw9e3R5cGU6XCJub3RlXCIsbm90ZTp7dGV4dHM6W119LC4uLmUuYXR0cmlidXRlc30sITA7Y2FzZVwiclwiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLnJpY2hUZXh0WGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fSxwYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX0scGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZVwiY29tbWVudFwiOnJldHVybiExO2Nhc2VcInJcIjpyZXR1cm4gdGhpcy5tb2RlbC5ub3RlLnRleHRzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKSwhMH19fSl9LHtcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI6MjcsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9zdHJpbmdzL3JpY2gtdGV4dC14Zm9ybVwiOjEyMn1dLDQwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKSxpPWUoXCIuLi8uLi8uLi91dGlscy91dGlsc1wiKSxzPWUoXCIuLi9iYXNlLXhmb3JtXCIpLG89ZShcIi4vY29tbWVudC14Zm9ybVwiKSxhPXQuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMubWFwPXtjb21tZW50Om5ldyBvfX07aS5pbmhlcml0cyhhLHMse0NPTU1FTlRTX0FUVFJJQlVURVM6e3htbG5zOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCJ9fSx7cmVuZGVyKGUsdCl7dD10fHx0aGlzLm1vZGVsLGUub3BlblhtbChuLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoXCJjb21tZW50c1wiLGEuQ09NTUVOVFNfQVRUUklCVVRFUyksZS5vcGVuTm9kZShcImF1dGhvcnNcIiksZS5sZWFmTm9kZShcImF1dGhvclwiLG51bGwsXCJBdXRob3JcIiksZS5jbG9zZU5vZGUoKSxlLm9wZW5Ob2RlKFwiY29tbWVudExpc3RcIiksdC5jb21tZW50cy5mb3JFYWNoKHQ9Pnt0aGlzLm1hcC5jb21tZW50LnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKSxlLmNsb3NlTm9kZSgpfSxwYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlXCJjb21tZW50TGlzdFwiOnJldHVybiB0aGlzLm1vZGVsPXtjb21tZW50czpbXX0sITA7Y2FzZVwiY29tbWVudFwiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcC5jb21tZW50LHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtkZWZhdWx0OnJldHVybiExfX0scGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9LHBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2VcImNvbW1lbnRMaXN0XCI6cmV0dXJuITE7Y2FzZVwiY29tbWVudFwiOnJldHVybiB0aGlzLm1vZGVsLmNvbW1lbnRzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKSwhMH19fSl9LHtcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI6MjcsXCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL2NvbW1lbnQteGZvcm1cIjozOX1dLDQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fbW9kZWw9ZX1nZXQgdGFnKCl7cmV0dXJuIHRoaXMuX21vZGVsJiZ0aGlzLl9tb2RlbC50YWd9cmVuZGVyKGUsdCxyKXsodD09PXJbMl18fFwieDpTaXplV2l0aENlbGxzXCI9PT10aGlzLnRhZyYmdD09PXJbMV0pJiZlLmxlYWZOb2RlKHRoaXMudGFnKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17fSx0aGlzLm1vZGVsW3RoaXMudGFnXT0hMCwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMn1dLDQyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fbW9kZWw9ZX1nZXQgdGFnKCl7cmV0dXJuIHRoaXMuX21vZGVsJiZ0aGlzLl9tb2RlbC50YWd9cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLHQpfXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLnRleHQ9XCJcIiwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoZSl7dGhpcy50ZXh0PWV9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMn1dLDQzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cIng6QW5jaG9yXCJ9Z2V0QW5jaG9yUmVjdChlKXtjb25zdCB0PU1hdGguZmxvb3IoZS5sZWZ0KSxyPU1hdGguZmxvb3IoNjgqKGUubGVmdC10KSksbj1NYXRoLmZsb29yKGUudG9wKSxpPU1hdGguZmxvb3IoMTgqKGUudG9wLW4pKSxzPU1hdGguZmxvb3IoZS5yaWdodCksbz1NYXRoLmZsb29yKDY4KihlLnJpZ2h0LXMpKSxhPU1hdGguZmxvb3IoZS5ib3R0b20pO3JldHVyblt0LHIsbixpLHMsbyxhLE1hdGguZmxvb3IoMTgqKGUuYm90dG9tLWEpKV19Z2V0RGVmYXVsdFJlY3QoZSl7Y29uc3QgdD1lLmNvbCxyPU1hdGgubWF4KGUucm93LTIsMCk7cmV0dXJuW3QsNixyLDE0LHQrMiwyLHIrNCwxNl19cmVuZGVyKGUsdCl7Y29uc3Qgcj10LmFuY2hvcj90aGlzLmdldEFuY2hvclJlY3QodC5hbmNob3IpOnRoaXMuZ2V0RGVmYXVsdFJlY3QodC5yZWZBZGRyZXNzKTtlLmxlYWZOb2RlKFwieDpBbmNob3JcIixudWxsLHIuam9pbihcIiwgXCIpKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy50ZXh0PVwiXCIsITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe3RoaXMudGV4dD1lfXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw0NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIiksaT1lKFwiLi92bWwtYW5jaG9yLXhmb3JtXCIpLHM9ZShcIi4vc3R5bGUvdm1sLXByb3RlY3Rpb24teGZvcm1cIiksbz1lKFwiLi9zdHlsZS92bWwtcG9zaXRpb24teGZvcm1cIiksYT1bXCJ0d29DZWxsc1wiLFwib25lQ2VsbHNcIixcImFic29sdXRlXCJdO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcIng6QW5jaG9yXCI6bmV3IGksXCJ4OkxvY2tlZFwiOm5ldyBzKHt0YWc6XCJ4OkxvY2tlZFwifSksXCJ4OkxvY2tUZXh0XCI6bmV3IHMoe3RhZzpcIng6TG9ja1RleHRcIn0pLFwieDpTaXplV2l0aENlbGxzXCI6bmV3IG8oe3RhZzpcIng6U2l6ZVdpdGhDZWxsc1wifSksXCJ4Ok1vdmVXaXRoQ2VsbHNcIjpuZXcgbyh7dGFnOlwieDpNb3ZlV2l0aENlbGxzXCJ9KX19Z2V0IHRhZygpe3JldHVyblwieDpDbGllbnREYXRhXCJ9cmVuZGVyKGUsdCl7Y29uc3R7cHJvdGVjdGlvbjpyLGVkaXRBczpufT10Lm5vdGU7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7T2JqZWN0VHlwZTpcIk5vdGVcIn0pLHRoaXMubWFwW1wieDpNb3ZlV2l0aENlbGxzXCJdLnJlbmRlcihlLG4sYSksdGhpcy5tYXBbXCJ4OlNpemVXaXRoQ2VsbHNcIl0ucmVuZGVyKGUsbixhKSx0aGlzLm1hcFtcIng6QW5jaG9yXCJdLnJlbmRlcihlLHQpLHRoaXMubWFwW1wieDpMb2NrZWRcIl0ucmVuZGVyKGUsci5sb2NrZWQpLGUubGVhZk5vZGUoXCJ4OkF1dG9GaWxsXCIsbnVsbCxcIkZhbHNlXCIpLHRoaXMubWFwW1wieDpMb2NrVGV4dFwiXS5yZW5kZXIoZSxyLmxvY2tUZXh0KSxlLmxlYWZOb2RlKFwieDpSb3dcIixudWxsLHQucmVmQWRkcmVzcy5yb3ctMSksZS5sZWFmTm9kZShcIng6Q29sdW1uXCIsbnVsbCx0LnJlZkFkZHJlc3MuY29sLTEpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e2FuY2hvcjpbXSxwcm90ZWN0aW9uOnt9LGVkaXRBczpcIlwifTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5ub3JtYWxpemVNb2RlbCgpLCExO2RlZmF1bHQ6cmV0dXJuITB9fW5vcm1hbGl6ZU1vZGVsKCl7Y29uc3QgZT1PYmplY3QuYXNzaWduKHt9LHRoaXMubWFwW1wieDpNb3ZlV2l0aENlbGxzXCJdLm1vZGVsLHRoaXMubWFwW1wieDpTaXplV2l0aENlbGxzXCJdLm1vZGVsKSx0PU9iamVjdC5rZXlzKGUpLmxlbmd0aDt0aGlzLm1vZGVsLmVkaXRBcz1hW3RdLHRoaXMubW9kZWwuYW5jaG9yPXRoaXMubWFwW1wieDpBbmNob3JcIl0udGV4dCx0aGlzLm1vZGVsLnByb3RlY3Rpb24ubG9ja2VkPXRoaXMubWFwW1wieDpMb2NrZWRcIl0udGV4dCx0aGlzLm1vZGVsLnByb3RlY3Rpb24ubG9ja1RleHQ9dGhpcy5tYXBbXCJ4OkxvY2tUZXh0XCJdLnRleHR9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9zdHlsZS92bWwtcG9zaXRpb24teGZvcm1cIjo0MSxcIi4vc3R5bGUvdm1sLXByb3RlY3Rpb24teGZvcm1cIjo0MixcIi4vdm1sLWFuY2hvci14Zm9ybVwiOjQzfV0sNDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCIpLGk9ZShcIi4uL2Jhc2UteGZvcm1cIikscz1lKFwiLi92bWwtc2hhcGUteGZvcm1cIik7Y2xhc3MgbyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcInY6c2hhcGVcIjpuZXcgc319Z2V0IHRhZygpe3JldHVyblwieG1sXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuWG1sKG4uU3RkRG9jQXR0cmlidXRlcyksZS5vcGVuTm9kZSh0aGlzLnRhZyxvLkRSQVdJTkdfQVRUUklCVVRFUyksZS5vcGVuTm9kZShcIm86c2hhcGVsYXlvdXRcIix7XCJ2OmV4dFwiOlwiZWRpdFwifSksZS5sZWFmTm9kZShcIm86aWRtYXBcIix7XCJ2OmV4dFwiOlwiZWRpdFwiLGRhdGE6MX0pLGUuY2xvc2VOb2RlKCksZS5vcGVuTm9kZShcInY6c2hhcGV0eXBlXCIse2lkOlwiX3gwMDAwX3QyMDJcIixjb29yZHNpemU6XCIyMTYwMCwyMTYwMFwiLFwibzpzcHRcIjoyMDIscGF0aDpcIm0sbCwyMTYwMHIyMTYwMCxsMjE2MDAseGVcIn0pLGUubGVhZk5vZGUoXCJ2OnN0cm9rZVwiLHtqb2luc3R5bGU6XCJtaXRlclwifSksZS5sZWFmTm9kZShcInY6cGF0aFwiLHtncmFkaWVudHNoYXBlb2s6XCJ0XCIsXCJvOmNvbm5lY3R0eXBlXCI6XCJyZWN0XCJ9KSxlLmNsb3NlTm9kZSgpLHQuY29tbWVudHMuZm9yRWFjaCgodCxyKT0+e3RoaXMubWFwW1widjpzaGFwZVwiXS5yZW5kZXIoZSx0LHIpfSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnRoaXMucmVzZXQoKSx0aGlzLm1vZGVsPXtjb21tZW50czpbXX07YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSl9cmV0dXJuITB9cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubW9kZWwuY29tbWVudHMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoZSx0KXtlLmFuY2hvcnMuZm9yRWFjaChlPT57ZS5icj90aGlzLm1hcFtcInhkcjp0d29DZWxsQW5jaG9yXCJdLnJlY29uY2lsZShlLHQpOnRoaXMubWFwW1wieGRyOm9uZUNlbGxBbmNob3JcIl0ucmVjb25jaWxlKGUsdCl9KX19by5EUkFXSU5HX0FUVFJJQlVURVM9e1wieG1sbnM6dlwiOlwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWxcIixcInhtbG5zOm9cIjpcInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZVwiLFwieG1sbnM6eFwiOlwidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWxcIn0sdC5leHBvcnRzPW99LHtcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIjoyOCxcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4vdm1sLXNoYXBlLXhmb3JtXCI6NDZ9XSw0NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIiksaT1lKFwiLi92bWwtdGV4dGJveC14Zm9ybVwiKSxzPWUoXCIuL3ZtbC1jbGllbnQtZGF0YS14Zm9ybVwiKTtjbGFzcyBvIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e1widjp0ZXh0Ym94XCI6bmV3IGksXCJ4OkNsaWVudERhdGFcIjpuZXcgc319Z2V0IHRhZygpe3JldHVyblwidjpzaGFwZVwifXJlbmRlcihlLHQscil7ZS5vcGVuTm9kZShcInY6c2hhcGVcIixvLlZfU0hBUEVfQVRUUklCVVRFUyh0LHIpKSxlLmxlYWZOb2RlKFwidjpmaWxsXCIse2NvbG9yMjpcImluZm9CYWNrZ3JvdW5kIFs4MF1cIn0pLGUubGVhZk5vZGUoXCJ2OnNoYWRvd1wiLHtjb2xvcjpcIm5vbmUgWzgxXVwiLG9ic2N1cmVkOlwidFwifSksZS5sZWFmTm9kZShcInY6cGF0aFwiLHtcIm86Y29ubmVjdHR5cGVcIjpcIm5vbmVcIn0pLHRoaXMubWFwW1widjp0ZXh0Ym94XCJdLnJlbmRlcihlLHQpLHRoaXMubWFwW1wieDpDbGllbnREYXRhXCJdLnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCksdGhpcy5tb2RlbD17bWFyZ2luczp7aW5zZXRtb2RlOmUuYXR0cmlidXRlc1tcIm86aW5zZXRtb2RlXCJdfSxhbmNob3I6XCJcIixlZGl0QXM6XCJcIixwcm90ZWN0aW9uOnt9fTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5tYXJnaW5zLmluc2V0PXRoaXMubWFwW1widjp0ZXh0Ym94XCJdLm1vZGVsJiZ0aGlzLm1hcFtcInY6dGV4dGJveFwiXS5tb2RlbC5pbnNldCx0aGlzLm1vZGVsLnByb3RlY3Rpb249dGhpcy5tYXBbXCJ4OkNsaWVudERhdGFcIl0ubW9kZWwmJnRoaXMubWFwW1wieDpDbGllbnREYXRhXCJdLm1vZGVsLnByb3RlY3Rpb24sdGhpcy5tb2RlbC5hbmNob3I9dGhpcy5tYXBbXCJ4OkNsaWVudERhdGFcIl0ubW9kZWwmJnRoaXMubWFwW1wieDpDbGllbnREYXRhXCJdLm1vZGVsLmFuY2hvcix0aGlzLm1vZGVsLmVkaXRBcz10aGlzLm1hcFtcIng6Q2xpZW50RGF0YVwiXS5tb2RlbCYmdGhpcy5tYXBbXCJ4OkNsaWVudERhdGFcIl0ubW9kZWwuZWRpdEFzLCExO2RlZmF1bHQ6cmV0dXJuITB9fX1vLlZfU0hBUEVfQVRUUklCVVRFUz0oZSx0KT0+KHtpZDpcIl94MDAwMF9zXCIrKDEwMjUrdCksdHlwZTpcIiNfeDAwMDBfdDIwMlwiLHN0eWxlOlwicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjEwNS4zcHQ7bWFyZ2luLXRvcDoxMC41cHQ7d2lkdGg6OTcuOHB0O2hlaWdodDo1OS4xcHQ7ei1pbmRleDoxO3Zpc2liaWxpdHk6aGlkZGVuXCIsZmlsbGNvbG9yOlwiaW5mb0JhY2tncm91bmQgWzgwXVwiLHN0cm9rZWNvbG9yOlwibm9uZSBbODFdXCIsXCJvOmluc2V0bW9kZVwiOmUubm90ZS5tYXJnaW5zJiZlLm5vdGUubWFyZ2lucy5pbnNldG1vZGV9KSx0LmV4cG9ydHM9b30se1wiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi92bWwtY2xpZW50LWRhdGEteGZvcm1cIjo0NCxcIi4vdm1sLXRleHRib3gteGZvcm1cIjo0N31dLDQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInY6dGV4dGJveFwifWNvbnZlcnNpb25Vbml0KGUsdCxyKXtyZXR1cm5gJHtwYXJzZUZsb2F0KGUpKnQudG9GaXhlZCgyKX0ke3J9YH1yZXZlcnNlQ29udmVyc2lvblVuaXQoZSl7cmV0dXJuKGV8fFwiXCIpLnNwbGl0KFwiLFwiKS5tYXAoZT0+TnVtYmVyKHBhcnNlRmxvYXQodGhpcy5jb252ZXJzaW9uVW5pdChwYXJzZUZsb2F0KGUpLC4xLFwiXCIpKS50b0ZpeGVkKDIpKSl9cmVuZGVyKGUsdCl7Y29uc3Qgcj17c3R5bGU6XCJtc28tZGlyZWN0aW9uLWFsdDphdXRvXCJ9O2lmKHQmJnQubm90ZSl7bGV0e2luc2V0OmV9PXQubm90ZSYmdC5ub3RlLm1hcmdpbnM7QXJyYXkuaXNBcnJheShlKSYmKGU9ZS5tYXAoZT0+dGhpcy5jb252ZXJzaW9uVW5pdChlLDEwLFwibW1cIikpLmpvaW4oXCIsXCIpKSxlJiYoci5pbnNldD1lKX1lLm9wZW5Ob2RlKFwidjp0ZXh0Ym94XCIsciksZS5sZWFmTm9kZShcImRpdlwiLHtzdHlsZTpcInRleHQtYWxpZ246bGVmdFwifSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17aW5zZXQ6dGhpcy5yZXZlcnNlQ29udmVyc2lvblVuaXQoZS5hdHRyaWJ1dGVzLmluc2V0KX0sITA7ZGVmYXVsdDpyZXR1cm4hMH19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sNDg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjcmVhdGVOZXdNb2RlbChlKXtyZXR1cm57fX1wYXJzZU9wZW4oZSl7cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucGFyc2VyfHx0aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITApOmUubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD10aGlzLmNyZWF0ZU5ld01vZGVsKGUpLCEwKX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1vblBhcnNlckNsb3NlKGUsdCl7dGhpcy5tb2RlbFtlXT10Lm1vZGVsfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5vblBhcnNlckNsb3NlKGUsdGhpcy5wYXJzZXIpLHRoaXMucGFyc2VyPXZvaWQgMCksITApOmUhPT10aGlzLnRhZ319fSx7XCIuL2Jhc2UteGZvcm1cIjozMn1dLDQ5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue3JlbmRlcihlLHQpe2Uub3Blbk5vZGUoXCJIZWFkaW5nUGFpcnNcIiksZS5vcGVuTm9kZShcInZ0OnZlY3RvclwiLHtzaXplOjIsYmFzZVR5cGU6XCJ2YXJpYW50XCJ9KSxlLm9wZW5Ob2RlKFwidnQ6dmFyaWFudFwiKSxlLmxlYWZOb2RlKFwidnQ6bHBzdHJcIix2b2lkIDAsXCJXb3Jrc2hlZXRzXCIpLGUuY2xvc2VOb2RlKCksZS5vcGVuTm9kZShcInZ0OnZhcmlhbnRcIiksZS5sZWFmTm9kZShcInZ0Omk0XCIsdm9pZCAwLHQubGVuZ3RoKSxlLmNsb3NlTm9kZSgpLGUuY2xvc2VOb2RlKCksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7cmV0dXJuXCJIZWFkaW5nUGFpcnNcIj09PWUubmFtZX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShlKXtyZXR1cm5cIkhlYWRpbmdQYWlyc1wiIT09ZX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw1MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntyZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKFwiVGl0bGVzT2ZQYXJ0c1wiKSxlLm9wZW5Ob2RlKFwidnQ6dmVjdG9yXCIse3NpemU6dC5sZW5ndGgsYmFzZVR5cGU6XCJscHN0clwifSksdC5mb3JFYWNoKHQ9PntlLmxlYWZOb2RlKFwidnQ6bHBzdHJcIix2b2lkIDAsdC5uYW1lKX0pLGUuY2xvc2VOb2RlKCksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7cmV0dXJuXCJUaXRsZXNPZlBhcnRzXCI9PT1lLm5hbWV9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7cmV0dXJuXCJUaXRsZXNPZlBhcnRzXCIhPT1lfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDUxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpLHM9ZShcIi4uL3NpbXBsZS9zdHJpbmcteGZvcm1cIiksbz1lKFwiLi9hcHAtaGVhZGluZy1wYWlycy14Zm9ybVwiKSxhPWUoXCIuL2FwcC10aXRsZXMtb2YtcGFydHMteGZvcm1cIik7Y2xhc3MgbCBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtDb21wYW55Om5ldyBzKHt0YWc6XCJDb21wYW55XCJ9KSxNYW5hZ2VyOm5ldyBzKHt0YWc6XCJNYW5hZ2VyXCJ9KSxIZWFkaW5nUGFpcnM6bmV3IG8sVGl0bGVPZlBhcnRzOm5ldyBhfX1yZW5kZXIoZSx0KXtlLm9wZW5YbWwobi5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKFwiUHJvcGVydGllc1wiLGwuUFJPUEVSVFlfQVRUUklCVVRFUyksZS5sZWFmTm9kZShcIkFwcGxpY2F0aW9uXCIsdm9pZCAwLFwiTWljcm9zb2Z0IEV4Y2VsXCIpLGUubGVhZk5vZGUoXCJEb2NTZWN1cml0eVwiLHZvaWQgMCxcIjBcIiksZS5sZWFmTm9kZShcIlNjYWxlQ3JvcFwiLHZvaWQgMCxcImZhbHNlXCIpLHRoaXMubWFwLkhlYWRpbmdQYWlycy5yZW5kZXIoZSx0LndvcmtzaGVldHMpLHRoaXMubWFwLlRpdGxlT2ZQYXJ0cy5yZW5kZXIoZSx0LndvcmtzaGVldHMpLHRoaXMubWFwLkNvbXBhbnkucmVuZGVyKGUsdC5jb21wYW55fHxcIlwiKSx0aGlzLm1hcC5NYW5hZ2VyLnJlbmRlcihlLHQubWFuYWdlciksZS5sZWFmTm9kZShcIkxpbmtzVXBUb0RhdGVcIix2b2lkIDAsXCJmYWxzZVwiKSxlLmxlYWZOb2RlKFwiU2hhcmVkRG9jXCIsdm9pZCAwLFwiZmFsc2VcIiksZS5sZWFmTm9kZShcIkh5cGVybGlua3NDaGFuZ2VkXCIsdm9pZCAwLFwiZmFsc2VcIiksZS5sZWFmTm9kZShcIkFwcFZlcnNpb25cIix2b2lkIDAsXCIxNi4wMzAwXCIpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwiUHJvcGVydGllc1wiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCl9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlXCJQcm9wZXJ0aWVzXCI6cmV0dXJuIHRoaXMubW9kZWw9e3dvcmtzaGVldHM6dGhpcy5tYXAuVGl0bGVPZlBhcnRzLm1vZGVsLGNvbXBhbnk6dGhpcy5tYXAuQ29tcGFueS5tb2RlbCxtYW5hZ2VyOnRoaXMubWFwLk1hbmFnZXIubW9kZWx9LCExO2RlZmF1bHQ6cmV0dXJuITB9fX1sLkRhdGVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bLl1cXGR7Myw2fS8sXCJcIil9LGwuRGF0ZUF0dHJzPXtcInhzaTp0eXBlXCI6XCJkY3Rlcm1zOlczQ0RURlwifSxsLlBST1BFUlRZX0FUVFJJQlVURVM9e3htbG5zOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZXh0ZW5kZWQtcHJvcGVydGllc1wiLFwieG1sbnM6dnRcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzXCJ9LHQuZXhwb3J0cz1sfSx7XCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9zaW1wbGUvc3RyaW5nLXhmb3JtXCI6MTE5LFwiLi9hcHAtaGVhZGluZy1wYWlycy14Zm9ybVwiOjQ5LFwiLi9hcHAtdGl0bGVzLW9mLXBhcnRzLXhmb3JtXCI6NTB9XSw1MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIiksaT1lKFwiLi4vYmFzZS14Zm9ybVwiKTtjbGFzcyBzIGV4dGVuZHMgaXtyZW5kZXIoZSx0KXtlLm9wZW5YbWwobi5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKFwiVHlwZXNcIixzLlBST1BFUlRZX0FUVFJJQlVURVMpO2NvbnN0IHI9e307KHQubWVkaWF8fFtdKS5mb3JFYWNoKHQ9PntpZihcImltYWdlXCI9PT10LnR5cGUpe2NvbnN0IG49dC5leHRlbnNpb247cltuXXx8KHJbbl09ITAsZS5sZWFmTm9kZShcIkRlZmF1bHRcIix7RXh0ZW5zaW9uOm4sQ29udGVudFR5cGU6XCJpbWFnZS9cIitufSkpfX0pLGUubGVhZk5vZGUoXCJEZWZhdWx0XCIse0V4dGVuc2lvbjpcInJlbHNcIixDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sXCJ9KSxlLmxlYWZOb2RlKFwiRGVmYXVsdFwiLHtFeHRlbnNpb246XCJ4bWxcIixDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3htbFwifSksZS5sZWFmTm9kZShcIk92ZXJyaWRlXCIse1BhcnROYW1lOlwiL3hsL3dvcmtib29rLnhtbFwiLENvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWxcIn0pLHQud29ya3NoZWV0cy5mb3JFYWNoKHQ9Pntjb25zdCByPWAveGwvd29ya3NoZWV0cy9zaGVldCR7dC5pZH0ueG1sYDtlLmxlYWZOb2RlKFwiT3ZlcnJpZGVcIix7UGFydE5hbWU6cixDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWxcIn0pfSksZS5sZWFmTm9kZShcIk92ZXJyaWRlXCIse1BhcnROYW1lOlwiL3hsL3RoZW1lL3RoZW1lMS54bWxcIixDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWxcIn0pLGUubGVhZk5vZGUoXCJPdmVycmlkZVwiLHtQYXJ0TmFtZTpcIi94bC9zdHlsZXMueG1sXCIsQ29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sXCJ9KTt0LnNoYXJlZFN0cmluZ3MmJnQuc2hhcmVkU3RyaW5ncy5jb3VudCYmZS5sZWFmTm9kZShcIk92ZXJyaWRlXCIse1BhcnROYW1lOlwiL3hsL3NoYXJlZFN0cmluZ3MueG1sXCIsQ29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbFwifSksdC50YWJsZXMmJnQudGFibGVzLmZvckVhY2godD0+e2UubGVhZk5vZGUoXCJPdmVycmlkZVwiLHtQYXJ0TmFtZTpcIi94bC90YWJsZXMvXCIrdC50YXJnZXQsQ29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWxcIn0pfSksdC5kcmF3aW5ncyYmdC5kcmF3aW5ncy5mb3JFYWNoKHQ9PntlLmxlYWZOb2RlKFwiT3ZlcnJpZGVcIix7UGFydE5hbWU6YC94bC9kcmF3aW5ncy8ke3QubmFtZX0ueG1sYCxDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwifSl9KSx0LmNvbW1lbnRSZWZzJiYoZS5sZWFmTm9kZShcIkRlZmF1bHRcIix7RXh0ZW5zaW9uOlwidm1sXCIsQ29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZ1wifSksdC5jb21tZW50UmVmcy5mb3JFYWNoKHQ9PntsZXR7Y29tbWVudE5hbWU6cn09dDtlLmxlYWZOb2RlKFwiT3ZlcnJpZGVcIix7UGFydE5hbWU6YC94bC8ke3J9LnhtbGAsQ29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb21tZW50cyt4bWxcIn0pfSkpLGUubGVhZk5vZGUoXCJPdmVycmlkZVwiLHtQYXJ0TmFtZTpcIi9kb2NQcm9wcy9jb3JlLnhtbFwiLENvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbFwifSksZS5sZWFmTm9kZShcIk92ZXJyaWRlXCIse1BhcnROYW1lOlwiL2RvY1Byb3BzL2FwcC54bWxcIixDb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5leHRlbmRlZC1wcm9wZXJ0aWVzK3htbFwifSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oKXtyZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX1zLlBST1BFUlRZX0FUVFJJQlVURVM9e3htbG5zOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzXCJ9LHQuZXhwb3J0cz1zfSx7XCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw1MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIiksaT1lKFwiLi4vYmFzZS14Zm9ybVwiKSxzPWUoXCIuLi9zaW1wbGUvZGF0ZS14Zm9ybVwiKSxvPWUoXCIuLi9zaW1wbGUvc3RyaW5nLXhmb3JtXCIpLGE9ZShcIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtXCIpO2NsYXNzIGwgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJkYzpjcmVhdG9yXCI6bmV3IG8oe3RhZzpcImRjOmNyZWF0b3JcIn0pLFwiZGM6dGl0bGVcIjpuZXcgbyh7dGFnOlwiZGM6dGl0bGVcIn0pLFwiZGM6c3ViamVjdFwiOm5ldyBvKHt0YWc6XCJkYzpzdWJqZWN0XCJ9KSxcImRjOmRlc2NyaXB0aW9uXCI6bmV3IG8oe3RhZzpcImRjOmRlc2NyaXB0aW9uXCJ9KSxcImRjOmlkZW50aWZpZXJcIjpuZXcgbyh7dGFnOlwiZGM6aWRlbnRpZmllclwifSksXCJkYzpsYW5ndWFnZVwiOm5ldyBvKHt0YWc6XCJkYzpsYW5ndWFnZVwifSksXCJjcDprZXl3b3Jkc1wiOm5ldyBvKHt0YWc6XCJjcDprZXl3b3Jkc1wifSksXCJjcDpjYXRlZ29yeVwiOm5ldyBvKHt0YWc6XCJjcDpjYXRlZ29yeVwifSksXCJjcDpsYXN0TW9kaWZpZWRCeVwiOm5ldyBvKHt0YWc6XCJjcDpsYXN0TW9kaWZpZWRCeVwifSksXCJjcDpsYXN0UHJpbnRlZFwiOm5ldyBzKHt0YWc6XCJjcDpsYXN0UHJpbnRlZFwiLGZvcm1hdDpsLkRhdGVGb3JtYXR9KSxcImNwOnJldmlzaW9uXCI6bmV3IGEoe3RhZzpcImNwOnJldmlzaW9uXCJ9KSxcImNwOnZlcnNpb25cIjpuZXcgbyh7dGFnOlwiY3A6dmVyc2lvblwifSksXCJjcDpjb250ZW50U3RhdHVzXCI6bmV3IG8oe3RhZzpcImNwOmNvbnRlbnRTdGF0dXNcIn0pLFwiY3A6Y29udGVudFR5cGVcIjpuZXcgbyh7dGFnOlwiY3A6Y29udGVudFR5cGVcIn0pLFwiZGN0ZXJtczpjcmVhdGVkXCI6bmV3IHMoe3RhZzpcImRjdGVybXM6Y3JlYXRlZFwiLGF0dHJzOmwuRGF0ZUF0dHJzLGZvcm1hdDpsLkRhdGVGb3JtYXR9KSxcImRjdGVybXM6bW9kaWZpZWRcIjpuZXcgcyh7dGFnOlwiZGN0ZXJtczptb2RpZmllZFwiLGF0dHJzOmwuRGF0ZUF0dHJzLGZvcm1hdDpsLkRhdGVGb3JtYXR9KX19cmVuZGVyKGUsdCl7ZS5vcGVuWG1sKG4uU3RkRG9jQXR0cmlidXRlcyksZS5vcGVuTm9kZShcImNwOmNvcmVQcm9wZXJ0aWVzXCIsbC5DT1JFX1BST1BFUlRZX0FUVFJJQlVURVMpLHRoaXMubWFwW1wiZGM6Y3JlYXRvclwiXS5yZW5kZXIoZSx0LmNyZWF0b3IpLHRoaXMubWFwW1wiZGM6dGl0bGVcIl0ucmVuZGVyKGUsdC50aXRsZSksdGhpcy5tYXBbXCJkYzpzdWJqZWN0XCJdLnJlbmRlcihlLHQuc3ViamVjdCksdGhpcy5tYXBbXCJkYzpkZXNjcmlwdGlvblwiXS5yZW5kZXIoZSx0LmRlc2NyaXB0aW9uKSx0aGlzLm1hcFtcImRjOmlkZW50aWZpZXJcIl0ucmVuZGVyKGUsdC5pZGVudGlmaWVyKSx0aGlzLm1hcFtcImRjOmxhbmd1YWdlXCJdLnJlbmRlcihlLHQubGFuZ3VhZ2UpLHRoaXMubWFwW1wiY3A6a2V5d29yZHNcIl0ucmVuZGVyKGUsdC5rZXl3b3JkcyksdGhpcy5tYXBbXCJjcDpjYXRlZ29yeVwiXS5yZW5kZXIoZSx0LmNhdGVnb3J5KSx0aGlzLm1hcFtcImNwOmxhc3RNb2RpZmllZEJ5XCJdLnJlbmRlcihlLHQubGFzdE1vZGlmaWVkQnkpLHRoaXMubWFwW1wiY3A6bGFzdFByaW50ZWRcIl0ucmVuZGVyKGUsdC5sYXN0UHJpbnRlZCksdGhpcy5tYXBbXCJjcDpyZXZpc2lvblwiXS5yZW5kZXIoZSx0LnJldmlzaW9uKSx0aGlzLm1hcFtcImNwOnZlcnNpb25cIl0ucmVuZGVyKGUsdC52ZXJzaW9uKSx0aGlzLm1hcFtcImNwOmNvbnRlbnRTdGF0dXNcIl0ucmVuZGVyKGUsdC5jb250ZW50U3RhdHVzKSx0aGlzLm1hcFtcImNwOmNvbnRlbnRUeXBlXCJdLnJlbmRlcihlLHQuY29udGVudFR5cGUpLHRoaXMubWFwW1wiZGN0ZXJtczpjcmVhdGVkXCJdLnJlbmRlcihlLHQuY3JlYXRlZCksdGhpcy5tYXBbXCJkY3Rlcm1zOm1vZGlmaWVkXCJdLnJlbmRlcihlLHQubW9kaWZpZWQpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwiY3A6Y29yZVByb3BlcnRpZXNcIjpjYXNlXCJjb3JlUHJvcGVydGllc1wiOnJldHVybiEwO2RlZmF1bHQ6aWYodGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3Rocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VPcGVuOiBcIitKU09OLnN0cmluZ2lmeShlKSl9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlXCJjcDpjb3JlUHJvcGVydGllc1wiOmNhc2VcImNvcmVQcm9wZXJ0aWVzXCI6cmV0dXJuIHRoaXMubW9kZWw9e2NyZWF0b3I6dGhpcy5tYXBbXCJkYzpjcmVhdG9yXCJdLm1vZGVsLHRpdGxlOnRoaXMubWFwW1wiZGM6dGl0bGVcIl0ubW9kZWwsc3ViamVjdDp0aGlzLm1hcFtcImRjOnN1YmplY3RcIl0ubW9kZWwsZGVzY3JpcHRpb246dGhpcy5tYXBbXCJkYzpkZXNjcmlwdGlvblwiXS5tb2RlbCxpZGVudGlmaWVyOnRoaXMubWFwW1wiZGM6aWRlbnRpZmllclwiXS5tb2RlbCxsYW5ndWFnZTp0aGlzLm1hcFtcImRjOmxhbmd1YWdlXCJdLm1vZGVsLGtleXdvcmRzOnRoaXMubWFwW1wiY3A6a2V5d29yZHNcIl0ubW9kZWwsY2F0ZWdvcnk6dGhpcy5tYXBbXCJjcDpjYXRlZ29yeVwiXS5tb2RlbCxsYXN0TW9kaWZpZWRCeTp0aGlzLm1hcFtcImNwOmxhc3RNb2RpZmllZEJ5XCJdLm1vZGVsLGxhc3RQcmludGVkOnRoaXMubWFwW1wiY3A6bGFzdFByaW50ZWRcIl0ubW9kZWwscmV2aXNpb246dGhpcy5tYXBbXCJjcDpyZXZpc2lvblwiXS5tb2RlbCxjb250ZW50U3RhdHVzOnRoaXMubWFwW1wiY3A6Y29udGVudFN0YXR1c1wiXS5tb2RlbCxjb250ZW50VHlwZTp0aGlzLm1hcFtcImNwOmNvbnRlbnRUeXBlXCJdLm1vZGVsLGNyZWF0ZWQ6dGhpcy5tYXBbXCJkY3Rlcm1zOmNyZWF0ZWRcIl0ubW9kZWwsbW9kaWZpZWQ6dGhpcy5tYXBbXCJkY3Rlcm1zOm1vZGlmaWVkXCJdLm1vZGVsfSwhMTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VDbG9zZTogXCIrZSl9fX1sLkRhdGVGb3JtYXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bLl1cXGR7M30vLFwiXCIpfSxsLkRhdGVBdHRycz17XCJ4c2k6dHlwZVwiOlwiZGN0ZXJtczpXM0NEVEZcIn0sbC5DT1JFX1BST1BFUlRZX0FUVFJJQlVURVM9e1wieG1sbnM6Y3BcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzXCIsXCJ4bWxuczpkY1wiOlwiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS9cIixcInhtbG5zOmRjdGVybXNcIjpcImh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9cIixcInhtbG5zOmRjbWl0eXBlXCI6XCJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvXCIsXCJ4bWxuczp4c2lcIjpcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCJ9LHQuZXhwb3J0cz1sfSx7XCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9zaW1wbGUvZGF0ZS14Zm9ybVwiOjExNyxcIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtXCI6MTE4LFwiLi4vc2ltcGxlL3N0cmluZy14Zm9ybVwiOjExOX1dLDU0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue3JlbmRlcihlLHQpe2UubGVhZk5vZGUoXCJSZWxhdGlvbnNoaXBcIix0KX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZVwiUmVsYXRpb25zaGlwXCI6cmV0dXJuIHRoaXMubW9kZWw9ZS5hdHRyaWJ1dGVzLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sNTU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCIpLGk9ZShcIi4uL2Jhc2UteGZvcm1cIikscz1lKFwiLi9yZWxhdGlvbnNoaXAteGZvcm1cIik7Y2xhc3MgbyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtSZWxhdGlvbnNoaXA6bmV3IHN9fXJlbmRlcihlLHQpe3Q9dHx8dGhpcy5fdmFsdWVzLGUub3BlblhtbChuLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoXCJSZWxhdGlvbnNoaXBzXCIsby5SRUxBVElPTlNISVBTX0FUVFJJQlVURVMpLHQuZm9yRWFjaCh0PT57dGhpcy5tYXAuUmVsYXRpb25zaGlwLnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlXCJSZWxhdGlvbnNoaXBzXCI6cmV0dXJuIHRoaXMubW9kZWw9W10sITA7ZGVmYXVsdDppZih0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZU9wZW46IFwiK0pTT04uc3RyaW5naWZ5KGUpKX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubW9kZWwucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZVwiUmVsYXRpb25zaGlwc1wiOnJldHVybiExO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZUNsb3NlOiBcIitlKX19fW8uUkVMQVRJT05TSElQU19BVFRSSUJVVEVTPXt4bWxuczpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwc1wifSx0LmV4cG9ydHM9b30se1wiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9yZWxhdGlvbnNoaXAteGZvcm1cIjo1NH1dLDU2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue3BhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e3JhbmdlOntlZGl0QXM6ZS5hdHRyaWJ1dGVzLmVkaXRBc3x8XCJvbmVDZWxsXCJ9fTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1yZWNvbmNpbGVQaWN0dXJlKGUsdCl7aWYoZSYmZS5ySWQpe2NvbnN0IHI9dC5yZWxzW2UucklkXS5UYXJnZXQubWF0Y2goLy4qXFwvbWVkaWFcXC8oLitbLl1bYS16QS1aXXszLDR9KS8pO2lmKHIpe2NvbnN0IGU9clsxXSxuPXQubWVkaWFJbmRleFtlXTtyZXR1cm4gdC5tZWRpYVtuXX19fX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDU3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuL2JsaXAteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e1wiYTpibGlwXCI6bmV3IGl9fWdldCB0YWcoKXtyZXR1cm5cInhkcjpibGlwRmlsbFwifXJlbmRlcihlLHQpe2Uub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwW1wiYTpibGlwXCJdLnJlbmRlcihlLHQpLGUub3Blbk5vZGUoXCJhOnN0cmV0Y2hcIiksZS5sZWFmTm9kZShcImE6ZmlsbFJlY3RcIiksZS5jbG9zZU5vZGUoKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpfXJldHVybiEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD10aGlzLm1hcFtcImE6YmxpcFwiXS5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL2JsaXAteGZvcm1cIjo1OH1dLDU4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cImE6YmxpcFwifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcse1wieG1sbnM6clwiOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwc1wiLFwicjplbWJlZFwiOnQucklkLGNzdGF0ZTpcInByaW50XCJ9KX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD17cklkOmUuYXR0cmlidXRlc1tcInI6ZW1iZWRcIl19LCEwO2RlZmF1bHQ6cmV0dXJuITB9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGUpe3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDU5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInhkcjpjTnZQaWNQclwifXJlbmRlcihlKXtlLm9wZW5Ob2RlKHRoaXMudGFnKSxlLmxlYWZOb2RlKFwiYTpwaWNMb2Nrc1wiLHtub0NoYW5nZUFzcGVjdDpcIjFcIn0pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6ZGVmYXVsdDpyZXR1cm4hMH19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sNjA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4vaGxpbmstY2xpY2steGZvcm1cIikscz1lKFwiLi9leHQtbHN0LXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcImE6aGxpbmtDbGlja1wiOm5ldyBpLFwiYTpleHRMc3RcIjpuZXcgc319Z2V0IHRhZygpe3JldHVyblwieGRyOmNOdlByXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7aWQ6dC5pbmRleCxuYW1lOlwiUGljdHVyZSBcIit0LmluZGV4fSksdGhpcy5tYXBbXCJhOmhsaW5rQ2xpY2tcIl0ucmVuZGVyKGUsdCksdGhpcy5tYXBbXCJhOmV4dExzdFwiXS5yZW5kZXIoZSx0KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpfXJldHVybiEwfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbD10aGlzLm1hcFtcImE6aGxpbmtDbGlja1wiXS5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL2V4dC1sc3QteGZvcm1cIjo2MyxcIi4vaGxpbmstY2xpY2steGZvcm1cIjo2NX1dLDYxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi9zaW1wbGUvaW50ZWdlci14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50YWc9ZS50YWcsdGhpcy5tYXA9e1wieGRyOmNvbFwiOm5ldyBpKHt0YWc6XCJ4ZHI6Y29sXCIsemVybzohMH0pLFwieGRyOmNvbE9mZlwiOm5ldyBpKHt0YWc6XCJ4ZHI6Y29sT2ZmXCIsemVybzohMH0pLFwieGRyOnJvd1wiOm5ldyBpKHt0YWc6XCJ4ZHI6cm93XCIsemVybzohMH0pLFwieGRyOnJvd09mZlwiOm5ldyBpKHt0YWc6XCJ4ZHI6cm93T2ZmXCIsemVybzohMH0pfX1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLm1hcFtcInhkcjpjb2xcIl0ucmVuZGVyKGUsdC5uYXRpdmVDb2wpLHRoaXMubWFwW1wieGRyOmNvbE9mZlwiXS5yZW5kZXIoZSx0Lm5hdGl2ZUNvbE9mZiksdGhpcy5tYXBbXCJ4ZHI6cm93XCJdLnJlbmRlcihlLHQubmF0aXZlUm93KSx0aGlzLm1hcFtcInhkcjpyb3dPZmZcIl0ucmVuZGVyKGUsdC5uYXRpdmVSb3dPZmYpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSl9cmV0dXJuITB9cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKGUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e25hdGl2ZUNvbDp0aGlzLm1hcFtcInhkcjpjb2xcIl0ubW9kZWwsbmF0aXZlQ29sT2ZmOnRoaXMubWFwW1wieGRyOmNvbE9mZlwiXS5tb2RlbCxuYXRpdmVSb3c6dGhpcy5tYXBbXCJ4ZHI6cm93XCJdLm1vZGVsLG5hdGl2ZVJvd09mZjp0aGlzLm1hcFtcInhkcjpyb3dPZmZcIl0ubW9kZWx9LCExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtXCI6MTE4fV0sNjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGVcIiksaT1lKFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKSxzPWUoXCIuLi9iYXNlLXhmb3JtXCIpLG89ZShcIi4vdHdvLWNlbGwtYW5jaG9yLXhmb3JtXCIpLGE9ZShcIi4vb25lLWNlbGwtYW5jaG9yLXhmb3JtXCIpO2NsYXNzIGwgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4ZHI6dHdvQ2VsbEFuY2hvclwiOm5ldyBvLFwieGRyOm9uZUNlbGxBbmNob3JcIjpuZXcgYX19cHJlcGFyZShlKXtlLmFuY2hvcnMuZm9yRWFjaCgoZSx0KT0+e2UuYW5jaG9yVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIGUucmFuZ2U/bi5kZWNvZGUoZS5yYW5nZSk6ZS5yYW5nZSkuYnI/XCJ4ZHI6dHdvQ2VsbEFuY2hvclwiOlwieGRyOm9uZUNlbGxBbmNob3JcIn0oZSk7dGhpcy5tYXBbZS5hbmNob3JUeXBlXS5wcmVwYXJlKGUse2luZGV4OnR9KX0pfWdldCB0YWcoKXtyZXR1cm5cInhkcjp3c0RyXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuWG1sKGkuU3RkRG9jQXR0cmlidXRlcyksZS5vcGVuTm9kZSh0aGlzLnRhZyxsLkRSQVdJTkdfQVRUUklCVVRFUyksdC5hbmNob3JzLmZvckVhY2godD0+e3RoaXMubWFwW3QuYW5jaG9yVHlwZV0ucmVuZGVyKGUsdCl9KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e2FuY2hvcnM6W119O2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpfXJldHVybiEwfXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLm1vZGVsLmFuY2hvcnMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoZSx0KXtlLmFuY2hvcnMuZm9yRWFjaChlPT57ZS5icj90aGlzLm1hcFtcInhkcjp0d29DZWxsQW5jaG9yXCJdLnJlY29uY2lsZShlLHQpOnRoaXMubWFwW1wieGRyOm9uZUNlbGxBbmNob3JcIl0ucmVjb25jaWxlKGUsdCl9KX19bC5EUkFXSU5HX0FUVFJJQlVURVM9e1wieG1sbnM6eGRyXCI6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nXCIsXCJ4bWxuczphXCI6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpblwifSx0LmV4cG9ydHM9bH0se1wiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlXCI6MTksXCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL29uZS1jZWxsLWFuY2hvci14Zm9ybVwiOjY3LFwiLi90d28tY2VsbC1hbmNob3IteGZvcm1cIjo3MH1dLDYzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cImE6ZXh0THN0XCJ9cmVuZGVyKGUpe2Uub3Blbk5vZGUodGhpcy50YWcpLGUub3Blbk5vZGUoXCJhOmV4dFwiLHt1cmk6XCJ7RkYyQjVFRjQtRkZGMi00MEI0LUJFNDktRjIzOEUyN0ZDMjM2fVwifSksZS5sZWFmTm9kZShcImExNjpjcmVhdGlvbklkXCIse1wieG1sbnM6YTE2XCI6XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9kcmF3aW5nLzIwMTQvbWFpblwiLGlkOlwiezAwMDAwMDAwLTAwMDgtMDAwMC0wMDAwLTAwMDAwMjAwMDAwMH1cIn0pLGUuY2xvc2VOb2RlKCksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzpkZWZhdWx0OnJldHVybiEwfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw2NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudGFnPWUudGFnLHRoaXMubWFwPXt9fXJlbmRlcihlLHQpe2Uub3Blbk5vZGUodGhpcy50YWcpO2NvbnN0IHI9TWF0aC5mbG9vcig5NTI1KnQud2lkdGgpLG49TWF0aC5mbG9vcig5NTI1KnQuaGVpZ2h0KTtlLmFkZEF0dHJpYnV0ZShcImN4XCIsciksZS5hZGRBdHRyaWJ1dGUoXCJjeVwiLG4pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe3JldHVybiBlLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e3dpZHRoOnBhcnNlSW50KGUuYXR0cmlidXRlcy5jeHx8XCIwXCIsMTApLzk1MjUsaGVpZ2h0OnBhcnNlSW50KGUuYXR0cmlidXRlcy5jeXx8XCIwXCIsMTApLzk1MjV9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDY1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cImE6aGxpbmtDbGlja1wifXJlbmRlcihlLHQpe3QuaHlwZXJsaW5rcyYmdC5oeXBlcmxpbmtzLnJJZCYmZS5sZWFmTm9kZSh0aGlzLnRhZyx7XCJ4bWxuczpyXCI6XCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzXCIsXCJyOmlkXCI6dC5oeXBlcmxpbmtzLnJJZCx0b29sdGlwOnQuaHlwZXJsaW5rcy50b29sdGlwfSl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e2h5cGVybGlua3M6e3JJZDplLmF0dHJpYnV0ZXNbXCJyOmlkXCJdLHRvb2x0aXA6ZS5hdHRyaWJ1dGVzLnRvb2x0aXB9fSwhMDtkZWZhdWx0OnJldHVybiEwfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDY2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuL2MtbnYtcHIteGZvcm1cIikscz1lKFwiLi9jLW52LXBpYy1wci14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4ZHI6Y052UHJcIjpuZXcgaSxcInhkcjpjTnZQaWNQclwiOm5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuXCJ4ZHI6bnZQaWNQclwifXJlbmRlcihlLHQpe2Uub3Blbk5vZGUodGhpcy50YWcpLHRoaXMubWFwW1wieGRyOmNOdlByXCJdLnJlbmRlcihlLHQpLHRoaXMubWFwW1wieGRyOmNOdlBpY1ByXCJdLnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZSB0aGlzLnRhZzp0aGlzLnJlc2V0KCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSl9cmV0dXJuITB9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXRoaXMubWFwW1wieGRyOmNOdlByXCJdLm1vZGVsLCExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4vYy1udi1waWMtcHIteGZvcm1cIjo1OSxcIi4vYy1udi1wci14Zm9ybVwiOjYwfV0sNjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL2Jhc2UtY2VsbC1hbmNob3IteGZvcm1cIiksaT1lKFwiLi4vc3RhdGljLXhmb3JtXCIpLHM9ZShcIi4vY2VsbC1wb3NpdGlvbi14Zm9ybVwiKSxvPWUoXCIuL2V4dC14Zm9ybVwiKSxhPWUoXCIuL3BpYy14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4ZHI6ZnJvbVwiOm5ldyBzKHt0YWc6XCJ4ZHI6ZnJvbVwifSksXCJ4ZHI6ZXh0XCI6bmV3IG8oe3RhZzpcInhkcjpleHRcIn0pLFwieGRyOnBpY1wiOm5ldyBhLFwieGRyOmNsaWVudERhdGFcIjpuZXcgaSh7dGFnOlwieGRyOmNsaWVudERhdGFcIn0pfX1nZXQgdGFnKCl7cmV0dXJuXCJ4ZHI6b25lQ2VsbEFuY2hvclwifXByZXBhcmUoZSx0KXt0aGlzLm1hcFtcInhkcjpwaWNcIl0ucHJlcGFyZShlLnBpY3R1cmUsdCl9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7ZWRpdEFzOnQucmFuZ2UuZWRpdEFzfHxcIm9uZUNlbGxcIn0pLHRoaXMubWFwW1wieGRyOmZyb21cIl0ucmVuZGVyKGUsdC5yYW5nZS50bCksdGhpcy5tYXBbXCJ4ZHI6ZXh0XCJdLnJlbmRlcihlLHQucmFuZ2UuZXh0KSx0aGlzLm1hcFtcInhkcjpwaWNcIl0ucmVuZGVyKGUsdC5waWN0dXJlKSx0aGlzLm1hcFtcInhkcjpjbGllbnREYXRhXCJdLnJlbmRlcihlLHt9KSxlLmNsb3NlTm9kZSgpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsLnJhbmdlLnRsPXRoaXMubWFwW1wieGRyOmZyb21cIl0ubW9kZWwsdGhpcy5tb2RlbC5yYW5nZS5leHQ9dGhpcy5tYXBbXCJ4ZHI6ZXh0XCJdLm1vZGVsLHRoaXMubW9kZWwucGljdHVyZT10aGlzLm1hcFtcInhkcjpwaWNcIl0ubW9kZWwsITE7ZGVmYXVsdDpyZXR1cm4hMH19cmVjb25jaWxlKGUsdCl7ZS5tZWRpdW09dGhpcy5yZWNvbmNpbGVQaWN0dXJlKGUucGljdHVyZSx0KX19fSx7XCIuLi9zdGF0aWMteGZvcm1cIjoxMjAsXCIuL2Jhc2UtY2VsbC1hbmNob3IteGZvcm1cIjo1NixcIi4vY2VsbC1wb3NpdGlvbi14Zm9ybVwiOjYxLFwiLi9leHQteGZvcm1cIjo2NCxcIi4vcGljLXhmb3JtXCI6Njh9XSw2ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIiksaT1lKFwiLi4vc3RhdGljLXhmb3JtXCIpLHM9ZShcIi4vYmxpcC1maWxsLXhmb3JtXCIpLG89ZShcIi4vbnYtcGljLXByLXhmb3JtXCIpLGE9ZShcIi4vc3AtcHJcIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e1wieGRyOm52UGljUHJcIjpuZXcgbyxcInhkcjpibGlwRmlsbFwiOm5ldyBzLFwieGRyOnNwUHJcIjpuZXcgaShhKX19Z2V0IHRhZygpe3JldHVyblwieGRyOnBpY1wifXByZXBhcmUoZSx0KXtlLmluZGV4PXQuaW5kZXgrMX1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLm1hcFtcInhkcjpudlBpY1ByXCJdLnJlbmRlcihlLHQpLHRoaXMubWFwW1wieGRyOmJsaXBGaWxsXCJdLnJlbmRlcihlLHQpLHRoaXMubWFwW1wieGRyOnNwUHJcIl0ucmVuZGVyKGUsdCksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnRoaXMucmVzZXQoKTticmVhaztkZWZhdWx0OnRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKX1yZXR1cm4hMH1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubWVyZ2VNb2RlbCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9zdGF0aWMteGZvcm1cIjoxMjAsXCIuL2JsaXAtZmlsbC14Zm9ybVwiOjU3LFwiLi9udi1waWMtcHIteGZvcm1cIjo2NixcIi4vc3AtcHJcIjo2OX1dLDY5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXt0YWc6XCJ4ZHI6c3BQclwiLGM6W3t0YWc6XCJhOnhmcm1cIixjOlt7dGFnOlwiYTpvZmZcIiwkOnt4OlwiMFwiLHk6XCIwXCJ9fSx7dGFnOlwiYTpleHRcIiwkOntjeDpcIjBcIixjeTpcIjBcIn19XX0se3RhZzpcImE6cHJzdEdlb21cIiwkOntwcnN0OlwicmVjdFwifSxjOlt7dGFnOlwiYTphdkxzdFwifV19XX19LHt9XSw3MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybVwiKSxpPWUoXCIuLi9zdGF0aWMteGZvcm1cIikscz1lKFwiLi9jZWxsLXBvc2l0aW9uLXhmb3JtXCIpLG89ZShcIi4vcGljLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcInhkcjpmcm9tXCI6bmV3IHMoe3RhZzpcInhkcjpmcm9tXCJ9KSxcInhkcjp0b1wiOm5ldyBzKHt0YWc6XCJ4ZHI6dG9cIn0pLFwieGRyOnBpY1wiOm5ldyBvLFwieGRyOmNsaWVudERhdGFcIjpuZXcgaSh7dGFnOlwieGRyOmNsaWVudERhdGFcIn0pfX1nZXQgdGFnKCl7cmV0dXJuXCJ4ZHI6dHdvQ2VsbEFuY2hvclwifXByZXBhcmUoZSx0KXt0aGlzLm1hcFtcInhkcjpwaWNcIl0ucHJlcGFyZShlLnBpY3R1cmUsdCl9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7ZWRpdEFzOnQucmFuZ2UuZWRpdEFzfHxcIm9uZUNlbGxcIn0pLHRoaXMubWFwW1wieGRyOmZyb21cIl0ucmVuZGVyKGUsdC5yYW5nZS50bCksdGhpcy5tYXBbXCJ4ZHI6dG9cIl0ucmVuZGVyKGUsdC5yYW5nZS5iciksdGhpcy5tYXBbXCJ4ZHI6cGljXCJdLnJlbmRlcihlLHQucGljdHVyZSksdGhpcy5tYXBbXCJ4ZHI6Y2xpZW50RGF0YVwiXS5yZW5kZXIoZSx7fSksZS5jbG9zZU5vZGUoKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5yYW5nZS50bD10aGlzLm1hcFtcInhkcjpmcm9tXCJdLm1vZGVsLHRoaXMubW9kZWwucmFuZ2UuYnI9dGhpcy5tYXBbXCJ4ZHI6dG9cIl0ubW9kZWwsdGhpcy5tb2RlbC5waWN0dXJlPXRoaXMubWFwW1wieGRyOnBpY1wiXS5tb2RlbCwhMTtkZWZhdWx0OnJldHVybiEwfX1yZWNvbmNpbGUoZSx0KXtlLm1lZGl1bT10aGlzLnJlY29uY2lsZVBpY3R1cmUoZS5waWN0dXJlLHQpfX19LHtcIi4uL3N0YXRpYy14Zm9ybVwiOjEyMCxcIi4vYmFzZS1jZWxsLWFuY2hvci14Zm9ybVwiOjU2LFwiLi9jZWxsLXBvc2l0aW9uLXhmb3JtXCI6NjEsXCIuL3BpYy14Zm9ybVwiOjY4fV0sNzE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudGFnPWUudGFnLHRoaXMuYWx3YXlzPSEhZS5hbHdheXMsdGhpcy5jb3VudD1lLmNvdW50LHRoaXMuZW1wdHk9ZS5lbXB0eSx0aGlzLiRjb3VudD1lLiRjb3VudHx8XCJjb3VudFwiLHRoaXMuJD1lLiQsdGhpcy5jaGlsZFhmb3JtPWUuY2hpbGRYZm9ybSx0aGlzLm1heEl0ZW1zPWUubWF4SXRlbXN9cHJlcGFyZShlLHQpe2NvbnN0e2NoaWxkWGZvcm06cn09dGhpcztlJiZlLmZvckVhY2goKGUsbik9Pnt0LmluZGV4PW4sci5wcmVwYXJlKGUsdCl9KX1yZW5kZXIoZSx0KXtpZih0aGlzLmFsd2F5c3x8dCYmdC5sZW5ndGgpe2Uub3Blbk5vZGUodGhpcy50YWcsdGhpcy4kKSx0aGlzLmNvdW50JiZlLmFkZEF0dHJpYnV0ZSh0aGlzLiRjb3VudCx0JiZ0Lmxlbmd0aHx8MCk7Y29uc3R7Y2hpbGRYZm9ybTpyfT10aGlzOyh0fHxbXSkuZm9yRWFjaCgodCxuKT0+e3IucmVuZGVyKGUsdCxuKX0pLGUuY2xvc2VOb2RlKCl9ZWxzZSB0aGlzLmVtcHR5JiZlLmxlYWZOb2RlKHRoaXMudGFnKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPVtdLCEwO2RlZmF1bHQ6cmV0dXJuISF0aGlzLmNoaWxkWGZvcm0ucGFyc2VPcGVuKGUpJiYodGhpcy5wYXJzZXI9dGhpcy5jaGlsZFhmb3JtLCEwKX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcil7aWYoIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSkmJih0aGlzLm1vZGVsLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCx0aGlzLm1heEl0ZW1zJiZ0aGlzLm1vZGVsLmxlbmd0aD50aGlzLm1heEl0ZW1zKSl0aHJvdyBuZXcgRXJyb3IoYE1heCAke3RoaXMuY2hpbGRYZm9ybS50YWd9IGNvdW50ICgke3RoaXMubWF4SXRlbXN9KSBleGNlZWRlZGApO3JldHVybiEwfXJldHVybiExfXJlY29uY2lsZShlLHQpe2lmKGUpe2NvbnN0e2NoaWxkWGZvcm06cn09dGhpcztlLmZvckVhY2goZT0+e3IucmVjb25jaWxlKGUsdCl9KX19fX0se1wiLi9iYXNlLXhmb3JtXCI6MzJ9XSw3MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Z2V0IHRhZygpe3JldHVyblwiYXV0b0ZpbHRlclwifXJlbmRlcihlLHQpe2lmKHQpaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpZS5sZWFmTm9kZShcImF1dG9GaWx0ZXJcIix7cmVmOnR9KTtlbHNle2NvbnN0IHI9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpuLmdldEFkZHJlc3MoZS5yb3csZS5jb2x1bW4pLmFkZHJlc3N9LGk9cih0LmZyb20pLHM9cih0LnRvKTtpJiZzJiZlLmxlYWZOb2RlKFwiYXV0b0ZpbHRlclwiLHtyZWY6YCR7aX06JHtzfWB9KX19cGFyc2VPcGVuKGUpe1wiYXV0b0ZpbHRlclwiPT09ZS5uYW1lJiYodGhpcy5tb2RlbD1lLmF0dHJpYnV0ZXMucmVmKX19fSx7XCIuLi8uLi8uLi91dGlscy9jb2wtY2FjaGVcIjoxOSxcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDczOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIiksaT1lKFwiLi4vYmFzZS14Zm9ybVwiKSxzPWUoXCIuLi8uLi8uLi9kb2MvcmFuZ2VcIiksbz1lKFwiLi4vLi4vLi4vZG9jL2VudW1zXCIpLGE9ZShcIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtXCIpO2Z1bmN0aW9uIGwoZSl7aWYobnVsbD09ZSlyZXR1cm4gby5WYWx1ZVR5cGUuTnVsbDtpZihlIGluc3RhbmNlb2YgU3RyaW5nfHxcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gby5WYWx1ZVR5cGUuU3RyaW5nO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBvLlZhbHVlVHlwZS5OdW1iZXI7aWYoXCJib29sZWFuXCI9PXR5cGVvZiBlKXJldHVybiBvLlZhbHVlVHlwZS5Cb29sZWFuO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBvLlZhbHVlVHlwZS5EYXRlO2lmKGUudGV4dCYmZS5oeXBlcmxpbmspcmV0dXJuIG8uVmFsdWVUeXBlLkh5cGVybGluaztpZihlLmZvcm11bGEpcmV0dXJuIG8uVmFsdWVUeXBlLkZvcm11bGE7aWYoZS5lcnJvcilyZXR1cm4gby5WYWx1ZVR5cGUuRXJyb3I7dGhyb3cgbmV3IEVycm9yKFwiSSBjb3VsZCBub3QgdW5kZXJzdGFuZCB0eXBlIG9mIHZhbHVlXCIpfXQuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMucmljaFRleHRYRm9ybT1uZXcgYX1nZXQgdGFnKCl7cmV0dXJuXCJjXCJ9cHJlcGFyZShlLHQpe2NvbnN0IHI9dC5zdHlsZXMuYWRkU3R5bGVNb2RlbChlLnN0eWxlfHx7fSxmdW5jdGlvbihlKXtzd2l0Y2goZS50eXBlKXtjYXNlIG8uVmFsdWVUeXBlLkZvcm11bGE6cmV0dXJuIGwoZS5yZXN1bHQpO2RlZmF1bHQ6cmV0dXJuIGUudHlwZX19KGUpKTtzd2l0Y2gociYmKGUuc3R5bGVJZD1yKSxlLmNvbW1lbnQmJnQuY29tbWVudHMucHVzaCh7Li4uZS5jb21tZW50LHJlZjplLmFkZHJlc3N9KSxlLnR5cGUpe2Nhc2Ugby5WYWx1ZVR5cGUuU3RyaW5nOmNhc2Ugby5WYWx1ZVR5cGUuUmljaFRleHQ6dC5zaGFyZWRTdHJpbmdzJiYoZS5zc0lkPXQuc2hhcmVkU3RyaW5ncy5hZGQoZS52YWx1ZSkpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuRGF0ZTp0LmRhdGUxOTA0JiYoZS5kYXRlMTkwND0hMCk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5IeXBlcmxpbms6dC5zaGFyZWRTdHJpbmdzJiZ2b2lkIDAhPT1lLnRleHQmJm51bGwhPT1lLnRleHQmJihlLnNzSWQ9dC5zaGFyZWRTdHJpbmdzLmFkZChlLnRleHQpKSx0Lmh5cGVybGlua3MucHVzaCh7YWRkcmVzczplLmFkZHJlc3MsdGFyZ2V0OmUuaHlwZXJsaW5rLHRvb2x0aXA6ZS50b29sdGlwfSk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5NZXJnZTp0Lm1lcmdlcy5hZGQoZSk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5Gb3JtdWxhOmlmKHQuZGF0ZTE5MDQmJihlLmRhdGUxOTA0PSEwKSxcInNoYXJlZFwiPT09ZS5zaGFyZVR5cGUmJihlLnNpPXQuc2lGb3JtdWxhZSsrKSxlLmZvcm11bGEpdC5mb3JtdWxhZVtlLmFkZHJlc3NdPWU7ZWxzZSBpZihlLnNoYXJlZEZvcm11bGEpe2NvbnN0IHI9dC5mb3JtdWxhZVtlLnNoYXJlZEZvcm11bGFdO2lmKCFyKXRocm93IG5ldyBFcnJvcihcIlNoYXJlZCBGb3JtdWxhIG1hc3RlciBtdXN0IGV4aXN0IGFib3ZlIGFuZCBvciBsZWZ0IG9mIGNsb25lIGZvciBjZWxsIFwiK2UuYWRkcmVzcyk7dm9pZCAwPT09ci5zaT8oci5zaGFyZVR5cGU9XCJzaGFyZWRcIixyLnNpPXQuc2lGb3JtdWxhZSsrLHIucmFuZ2U9bmV3IHMoci5hZGRyZXNzLGUuYWRkcmVzcykpOnIucmFuZ2UmJnIucmFuZ2UuZXhwYW5kVG9BZGRyZXNzKGUuYWRkcmVzcyksZS5zaT1yLnNpfX19cmVuZGVyRm9ybXVsYShlLHQpe2xldCByPW51bGw7c3dpdGNoKHQuc2hhcmVUeXBlKXtjYXNlXCJzaGFyZWRcIjpyPXt0Olwic2hhcmVkXCIscmVmOnQucmVmfHx0LnJhbmdlLnJhbmdlLHNpOnQuc2l9O2JyZWFrO2Nhc2VcImFycmF5XCI6cj17dDpcImFycmF5XCIscmVmOnQucmVmfTticmVhaztkZWZhdWx0OnZvaWQgMCE9PXQuc2kmJihyPXt0Olwic2hhcmVkXCIsc2k6dC5zaX0pfXN3aXRjaChsKHQucmVzdWx0KSl7Y2FzZSBvLlZhbHVlVHlwZS5OdWxsOmUubGVhZk5vZGUoXCJmXCIscix0LmZvcm11bGEpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuU3RyaW5nOmUuYWRkQXR0cmlidXRlKFwidFwiLFwic3RyXCIpLGUubGVhZk5vZGUoXCJmXCIscix0LmZvcm11bGEpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCx0LnJlc3VsdCk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5OdW1iZXI6ZS5sZWFmTm9kZShcImZcIixyLHQuZm9ybXVsYSksZS5sZWFmTm9kZShcInZcIixudWxsLHQucmVzdWx0KTticmVhaztjYXNlIG8uVmFsdWVUeXBlLkJvb2xlYW46ZS5hZGRBdHRyaWJ1dGUoXCJ0XCIsXCJiXCIpLGUubGVhZk5vZGUoXCJmXCIscix0LmZvcm11bGEpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCx0LnJlc3VsdD8xOjApO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuRXJyb3I6ZS5hZGRBdHRyaWJ1dGUoXCJ0XCIsXCJlXCIpLGUubGVhZk5vZGUoXCJmXCIscix0LmZvcm11bGEpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCx0LnJlc3VsdC5lcnJvcik7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5EYXRlOmUubGVhZk5vZGUoXCJmXCIscix0LmZvcm11bGEpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCxuLmRhdGVUb0V4Y2VsKHQucmVzdWx0LHQuZGF0ZTE5MDQpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcIkkgY291bGQgbm90IHVuZGVyc3RhbmQgdHlwZSBvZiB2YWx1ZVwiKX19cmVuZGVyKGUsdCl7aWYodC50eXBlIT09by5WYWx1ZVR5cGUuTnVsbHx8dC5zdHlsZUlkKXtzd2l0Y2goZS5vcGVuTm9kZShcImNcIiksZS5hZGRBdHRyaWJ1dGUoXCJyXCIsdC5hZGRyZXNzKSx0LnN0eWxlSWQmJmUuYWRkQXR0cmlidXRlKFwic1wiLHQuc3R5bGVJZCksdC50eXBlKXtjYXNlIG8uVmFsdWVUeXBlLk51bGw6YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5OdW1iZXI6ZS5sZWFmTm9kZShcInZcIixudWxsLHQudmFsdWUpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuQm9vbGVhbjplLmFkZEF0dHJpYnV0ZShcInRcIixcImJcIiksZS5sZWFmTm9kZShcInZcIixudWxsLHQudmFsdWU/XCIxXCI6XCIwXCIpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuRXJyb3I6ZS5hZGRBdHRyaWJ1dGUoXCJ0XCIsXCJlXCIpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCx0LnZhbHVlLmVycm9yKTticmVhaztjYXNlIG8uVmFsdWVUeXBlLlN0cmluZzpjYXNlIG8uVmFsdWVUeXBlLlJpY2hUZXh0OnZvaWQgMCE9PXQuc3NJZD8oZS5hZGRBdHRyaWJ1dGUoXCJ0XCIsXCJzXCIpLGUubGVhZk5vZGUoXCJ2XCIsbnVsbCx0LnNzSWQpKTp0LnZhbHVlJiZ0LnZhbHVlLnJpY2hUZXh0PyhlLmFkZEF0dHJpYnV0ZShcInRcIixcImlubGluZVN0clwiKSxlLm9wZW5Ob2RlKFwiaXNcIiksdC52YWx1ZS5yaWNoVGV4dC5mb3JFYWNoKHQ9Pnt0aGlzLnJpY2hUZXh0WEZvcm0ucmVuZGVyKGUsdCl9KSxlLmNsb3NlTm9kZShcImlzXCIpKTooZS5hZGRBdHRyaWJ1dGUoXCJ0XCIsXCJzdHJcIiksZS5sZWFmTm9kZShcInZcIixudWxsLHQudmFsdWUpKTticmVhaztjYXNlIG8uVmFsdWVUeXBlLkRhdGU6ZS5sZWFmTm9kZShcInZcIixudWxsLG4uZGF0ZVRvRXhjZWwodC52YWx1ZSx0LmRhdGUxOTA0KSk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5IeXBlcmxpbms6dm9pZCAwIT09dC5zc0lkPyhlLmFkZEF0dHJpYnV0ZShcInRcIixcInNcIiksZS5sZWFmTm9kZShcInZcIixudWxsLHQuc3NJZCkpOihlLmFkZEF0dHJpYnV0ZShcInRcIixcInN0clwiKSxlLmxlYWZOb2RlKFwidlwiLG51bGwsdC50ZXh0KSk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5Gb3JtdWxhOnRoaXMucmVuZGVyRm9ybXVsYShlLHQpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuTWVyZ2U6fWUuY2xvc2VOb2RlKCl9fXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcImNcIjpyZXR1cm4gdGhpcy5tb2RlbD17YWRkcmVzczplLmF0dHJpYnV0ZXMucn0sdGhpcy50PWUuYXR0cmlidXRlcy50LGUuYXR0cmlidXRlcy5zJiYodGhpcy5tb2RlbC5zdHlsZUlkPXBhcnNlSW50KGUuYXR0cmlidXRlcy5zLDEwKSksITA7Y2FzZVwiZlwiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPVwiZlwiLHRoaXMubW9kZWwuc2k9ZS5hdHRyaWJ1dGVzLnNpLHRoaXMubW9kZWwuc2hhcmVUeXBlPWUuYXR0cmlidXRlcy50LHRoaXMubW9kZWwucmVmPWUuYXR0cmlidXRlcy5yZWYsITA7Y2FzZVwidlwiOnJldHVybiB0aGlzLmN1cnJlbnROb2RlPVwidlwiLCEwO2Nhc2VcInRcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT1cInRcIiwhMDtjYXNlXCJyXCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMucmljaFRleHRYRm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe2lmKHRoaXMucGFyc2VyKXRoaXMucGFyc2VyLnBhcnNlVGV4dChlKTtlbHNlIHN3aXRjaCh0aGlzLmN1cnJlbnROb2RlKXtjYXNlXCJmXCI6dGhpcy5tb2RlbC5mb3JtdWxhPXRoaXMubW9kZWwuZm9ybXVsYT90aGlzLm1vZGVsLmZvcm11bGErZTplO2JyZWFrO2Nhc2VcInZcIjpjYXNlXCJ0XCI6dGhpcy5tb2RlbC52YWx1ZSYmdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dD90aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0LnRleHQ9dGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dC50ZXh0P3RoaXMubW9kZWwudmFsdWUucmljaFRleHQudGV4dCtlOmU6dGhpcy5tb2RlbC52YWx1ZT10aGlzLm1vZGVsLnZhbHVlP3RoaXMubW9kZWwudmFsdWUrZTplfX1wYXJzZUNsb3NlKGUpe3N3aXRjaChlKXtjYXNlXCJjXCI6e2NvbnN0e21vZGVsOmV9PXRoaXM7aWYoZS5mb3JtdWxhfHxlLnNoYXJlVHlwZSllLnR5cGU9by5WYWx1ZVR5cGUuRm9ybXVsYSxlLnZhbHVlJiYoXCJzdHJcIj09PXRoaXMudD9lLnJlc3VsdD1uLnhtbERlY29kZShlLnZhbHVlKTpcImJcIj09PXRoaXMudD9lLnJlc3VsdD0wIT09cGFyc2VJbnQoZS52YWx1ZSwxMCk6XCJlXCI9PT10aGlzLnQ/ZS5yZXN1bHQ9e2Vycm9yOmUudmFsdWV9OmUucmVzdWx0PXBhcnNlRmxvYXQoZS52YWx1ZSksZS52YWx1ZT12b2lkIDApO2Vsc2UgaWYodm9pZCAwIT09ZS52YWx1ZSlzd2l0Y2godGhpcy50KXtjYXNlXCJzXCI6ZS50eXBlPW8uVmFsdWVUeXBlLlN0cmluZyxlLnZhbHVlPXBhcnNlSW50KGUudmFsdWUsMTApO2JyZWFrO2Nhc2VcInN0clwiOmUudHlwZT1vLlZhbHVlVHlwZS5TdHJpbmcsZS52YWx1ZT1uLnhtbERlY29kZShlLnZhbHVlKTticmVhaztjYXNlXCJpbmxpbmVTdHJcIjplLnR5cGU9by5WYWx1ZVR5cGUuU3RyaW5nO2JyZWFrO2Nhc2VcImJcIjplLnR5cGU9by5WYWx1ZVR5cGUuQm9vbGVhbixlLnZhbHVlPTAhPT1wYXJzZUludChlLnZhbHVlLDEwKTticmVhaztjYXNlXCJlXCI6ZS50eXBlPW8uVmFsdWVUeXBlLkVycm9yLGUudmFsdWU9e2Vycm9yOmUudmFsdWV9O2JyZWFrO2RlZmF1bHQ6ZS50eXBlPW8uVmFsdWVUeXBlLk51bWJlcixlLnZhbHVlPXBhcnNlRmxvYXQoZS52YWx1ZSl9ZWxzZSBlLnN0eWxlSWQ/ZS50eXBlPW8uVmFsdWVUeXBlLk51bGw6ZS50eXBlPW8uVmFsdWVUeXBlLk1lcmdlO3JldHVybiExfWNhc2VcImZcIjpjYXNlXCJ2XCI6Y2FzZVwiaXNcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT12b2lkIDAsITA7Y2FzZVwidFwiOnJldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKSwhMCk6KHRoaXMuY3VycmVudE5vZGU9dm9pZCAwLCEwKTtjYXNlXCJyXCI6cmV0dXJuIHRoaXMubW9kZWwudmFsdWU9dGhpcy5tb2RlbC52YWx1ZXx8e30sdGhpcy5tb2RlbC52YWx1ZS5yaWNoVGV4dD10aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0fHxbXSx0aGlzLm1vZGVsLnZhbHVlLnJpY2hUZXh0LnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCx0aGlzLmN1cnJlbnROb2RlPXZvaWQgMCwhMDtkZWZhdWx0OnJldHVybiEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpLCEwKX19cmVjb25jaWxlKGUsdCl7Y29uc3Qgcj1lLnN0eWxlSWQmJnQuc3R5bGVzJiZ0LnN0eWxlcy5nZXRTdHlsZU1vZGVsKGUuc3R5bGVJZCk7c3dpdGNoKHImJihlLnN0eWxlPXIpLHZvaWQgMCE9PWUuc3R5bGVJZCYmKGUuc3R5bGVJZD12b2lkIDApLGUudHlwZSl7Y2FzZSBvLlZhbHVlVHlwZS5TdHJpbmc6XCJudW1iZXJcIj09dHlwZW9mIGUudmFsdWUmJnQuc2hhcmVkU3RyaW5ncyYmKGUudmFsdWU9dC5zaGFyZWRTdHJpbmdzLmdldFN0cmluZyhlLnZhbHVlKSksZS52YWx1ZS5yaWNoVGV4dCYmKGUudHlwZT1vLlZhbHVlVHlwZS5SaWNoVGV4dCk7YnJlYWs7Y2FzZSBvLlZhbHVlVHlwZS5OdW1iZXI6ciYmbi5pc0RhdGVGbXQoci5udW1GbXQpJiYoZS50eXBlPW8uVmFsdWVUeXBlLkRhdGUsZS52YWx1ZT1uLmV4Y2VsVG9EYXRlKGUudmFsdWUsdC5kYXRlMTkwNCkpO2JyZWFrO2Nhc2Ugby5WYWx1ZVR5cGUuRm9ybXVsYTp2b2lkIDAhPT1lLnJlc3VsdCYmciYmbi5pc0RhdGVGbXQoci5udW1GbXQpJiYoZS5yZXN1bHQ9bi5leGNlbFRvRGF0ZShlLnJlc3VsdCx0LmRhdGUxOTA0KSksXCJzaGFyZWRcIj09PWUuc2hhcmVUeXBlJiYoZS5yZWY/dC5mb3JtdWxhZVtlLnNpXT1lLmFkZHJlc3M6KGUuc2hhcmVkRm9ybXVsYT10LmZvcm11bGFlW2Uuc2ldLGRlbGV0ZSBlLnNoYXJlVHlwZSksZGVsZXRlIGUuc2kpfWNvbnN0IGk9dC5oeXBlcmxpbmtNYXBbZS5hZGRyZXNzXTtpJiYoZS50eXBlPT09by5WYWx1ZVR5cGUuRm9ybXVsYT8oZS50ZXh0PWUucmVzdWx0LGUucmVzdWx0PXZvaWQgMCk6KGUudGV4dD1lLnZhbHVlLGUudmFsdWU9dm9pZCAwKSxlLnR5cGU9by5WYWx1ZVR5cGUuSHlwZXJsaW5rLGUuaHlwZXJsaW5rPWkpO2NvbnN0IHM9dC5jb21tZW50c01hcCYmdC5jb21tZW50c01hcFtlLmFkZHJlc3NdO3MmJihlLmNvbW1lbnQ9cyl9fX0se1wiLi4vLi4vLi4vZG9jL2VudW1zXCI6NyxcIi4uLy4uLy4uL2RvYy9yYW5nZVwiOjEwLFwiLi4vLi4vLi4vdXRpbHMvdXRpbHNcIjoyNyxcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4uL3N0cmluZ3MvcmljaC10ZXh0LXhmb3JtXCI6MTIyfV0sNzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwieDE0OmNmSWNvblwifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcse2ljb25TZXQ6dC5pY29uU2V0LGljb25JZDp0Lmljb25JZH0pfXBhcnNlT3BlbihlKXtsZXR7YXR0cmlidXRlczp0fT1lO3RoaXMubW9kZWw9e2ljb25TZXQ6dC5pY29uU2V0LGljb25JZDpuLnRvSW50VmFsdWUodC5pY29uSWQpfX1wYXJzZUNsb3NlKGUpe3JldHVybiBlIT09dGhpcy50YWd9fX0se1wiLi4vLi4vYmFzZS14Zm9ybVwiOjMyfV0sNzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdHt2NDpufT1lKFwidXVpZFwiKSxpPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpLHM9ZShcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiKSxvPWUoXCIuL2RhdGFiYXItZXh0LXhmb3JtXCIpLGE9ZShcIi4vaWNvbi1zZXQtZXh0LXhmb3JtXCIpLGw9e1wiM1RyaWFuZ2xlc1wiOiEwLFwiM1N0YXJzXCI6ITAsXCI1Qm94ZXNcIjohMH07Y2xhc3MgYyBleHRlbmRzIHN7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcIngxNDpkYXRhQmFyXCI6dGhpcy5kYXRhYmFyWGZvcm09bmV3IG8sXCJ4MTQ6aWNvblNldFwiOnRoaXMuaWNvblNldFhmb3JtPW5ldyBhfX1nZXQgdGFnKCl7cmV0dXJuXCJ4MTQ6Y2ZSdWxlXCJ9c3RhdGljIGlzRXh0KGUpe3JldHVyblwiZGF0YUJhclwiPT09ZS50eXBlP28uaXNFeHQoZSk6IShcImljb25TZXRcIiE9PWUudHlwZXx8IWUuY3VzdG9tJiYhbFtlLmljb25TZXRdKX1wcmVwYXJlKGUpe2MuaXNFeHQoZSkmJihlLngxNElkPWB7JHtuKCl9fWAudG9VcHBlckNhc2UoKSl9cmVuZGVyKGUsdCl7aWYoYy5pc0V4dCh0KSlzd2l0Y2godC50eXBlKXtjYXNlXCJkYXRhQmFyXCI6dGhpcy5yZW5kZXJEYXRhQmFyKGUsdCk7YnJlYWs7Y2FzZVwiaWNvblNldFwiOnRoaXMucmVuZGVySWNvblNldChlLHQpfX1yZW5kZXJEYXRhQmFyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTpcImRhdGFCYXJcIixpZDp0LngxNElkfSksdGhpcy5kYXRhYmFyWGZvcm0ucmVuZGVyKGUsdCksZS5jbG9zZU5vZGUoKX1yZW5kZXJJY29uU2V0KGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTpcImljb25TZXRcIixwcmlvcml0eTp0LnByaW9yaXR5LGlkOnQueDE0SWR8fGB7JHtuKCl9fWB9KSx0aGlzLmljb25TZXRYZm9ybS5yZW5kZXIoZSx0KSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKGUpe2xldHthdHRyaWJ1dGVzOnR9PWU7cmV0dXJue3R5cGU6dC50eXBlLHgxNElkOnQuaWQscHJpb3JpdHk6aS50b0ludFZhbHVlKHQucHJpb3JpdHkpfX1vblBhcnNlckNsb3NlKGUsdCl7T2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLHQubW9kZWwpfX10LmV4cG9ydHM9Y30se1wiLi4vLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCI6NDgsXCIuL2RhdGFiYXItZXh0LXhmb3JtXCI6NzksXCIuL2ljb24tc2V0LWV4dC14Zm9ybVwiOjgxLHV1aWQ6NTI4fV0sNzY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIiksaT1lKFwiLi9mLWV4dC14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4bTpmXCI6dGhpcy5mRXh0WGZvcm09bmV3IGl9fWdldCB0YWcoKXtyZXR1cm5cIngxNDpjZnZvXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTp0LnR5cGV9KSx2b2lkIDAhPT10LnZhbHVlJiZ0aGlzLmZFeHRYZm9ybS5yZW5kZXIoZSx0LnZhbHVlKSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKGUpe3JldHVybnt0eXBlOmUuYXR0cmlidXRlcy50eXBlfX1vblBhcnNlckNsb3NlKGUsdCl7c3dpdGNoKGUpe2Nhc2VcInhtOmZcIjp0aGlzLm1vZGVsLnZhbHVlPXQubW9kZWw/cGFyc2VGbG9hdCh0Lm1vZGVsKTowfX19fSx7XCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIjo0OCxcIi4vZi1leHQteGZvcm1cIjo4MH1dLDc3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCIpLGk9ZShcIi4vc3FyZWYtZXh0LXhmb3JtXCIpLHM9ZShcIi4vY2YtcnVsZS1leHQteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e1wieG06c3FyZWZcIjp0aGlzLnNxUmVmPW5ldyBpLFwieDE0OmNmUnVsZVwiOnRoaXMuY2ZSdWxlPW5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuXCJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5nXCJ9cHJlcGFyZShlLHQpe2UucnVsZXMuZm9yRWFjaChlPT57dGhpcy5jZlJ1bGUucHJlcGFyZShlLHQpfSl9cmVuZGVyKGUsdCl7dC5ydWxlcy5zb21lKHMuaXNFeHQpJiYoZS5vcGVuTm9kZSh0aGlzLnRhZyx7XCJ4bWxuczp4bVwiOlwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluXCJ9KSx0LnJ1bGVzLmZpbHRlcihzLmlzRXh0KS5mb3JFYWNoKHQ9PnRoaXMuY2ZSdWxlLnJlbmRlcihlLHQpKSx0aGlzLnNxUmVmLnJlbmRlcihlLHQucmVmKSxlLmNsb3NlTm9kZSgpKX1jcmVhdGVOZXdNb2RlbCgpe3JldHVybntydWxlczpbXX19b25QYXJzZXJDbG9zZShlLHQpe3N3aXRjaChlKXtjYXNlXCJ4bTpzcXJlZlwiOnRoaXMubW9kZWwucmVmPXQubW9kZWw7YnJlYWs7Y2FzZVwieDE0OmNmUnVsZVwiOnRoaXMubW9kZWwucnVsZXMucHVzaCh0Lm1vZGVsKX19fX0se1wiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCI6NDgsXCIuL2NmLXJ1bGUtZXh0LXhmb3JtXCI6NzUsXCIuL3NxcmVmLWV4dC14Zm9ybVwiOjgyfV0sNzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIiksaT1lKFwiLi9jZi1ydWxlLWV4dC14Zm9ybVwiKSxzPWUoXCIuL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmctZXh0LXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcIngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmdcIjp0aGlzLmNmWGZvcm09bmV3IHN9fWdldCB0YWcoKXtyZXR1cm5cIngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmdzXCJ9aGFzQ29udGVudChlKXtyZXR1cm4gdm9pZCAwPT09ZS5oYXNFeHRDb250ZW50JiYoZS5oYXNFeHRDb250ZW50PWUuc29tZShlPT5lLnJ1bGVzLnNvbWUoaS5pc0V4dCkpKSxlLmhhc0V4dENvbnRlbnR9cHJlcGFyZShlLHQpe2UuZm9yRWFjaChlPT57dGhpcy5jZlhmb3JtLnByZXBhcmUoZSx0KX0pfXJlbmRlcihlLHQpe3RoaXMuaGFzQ29udGVudCh0KSYmKGUub3Blbk5vZGUodGhpcy50YWcpLHQuZm9yRWFjaCh0PT50aGlzLmNmWGZvcm0ucmVuZGVyKGUsdCkpLGUuY2xvc2VOb2RlKCkpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJuW119b25QYXJzZXJDbG9zZShlLHQpe3RoaXMubW9kZWwucHVzaCh0Lm1vZGVsKX19fSx7XCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIjo0OCxcIi4vY2YtcnVsZS1leHQteGZvcm1cIjo3NSxcIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy1leHQteGZvcm1cIjo3N31dLDc5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIikscz1lKFwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm1cIiksbz1lKFwiLi9jZnZvLWV4dC14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4MTQ6Y2Z2b1wiOnRoaXMuY2Z2b1hmb3JtPW5ldyBvLFwieDE0OmJvcmRlckNvbG9yXCI6dGhpcy5ib3JkZXJDb2xvclhmb3JtPW5ldyBzKFwieDE0OmJvcmRlckNvbG9yXCIpLFwieDE0Om5lZ2F0aXZlQm9yZGVyQ29sb3JcIjp0aGlzLm5lZ2F0aXZlQm9yZGVyQ29sb3JYZm9ybT1uZXcgcyhcIngxNDpuZWdhdGl2ZUJvcmRlckNvbG9yXCIpLFwieDE0Om5lZ2F0aXZlRmlsbENvbG9yXCI6dGhpcy5uZWdhdGl2ZUZpbGxDb2xvclhmb3JtPW5ldyBzKFwieDE0Om5lZ2F0aXZlRmlsbENvbG9yXCIpLFwieDE0OmF4aXNDb2xvclwiOnRoaXMuYXhpc0NvbG9yWGZvcm09bmV3IHMoXCJ4MTQ6YXhpc0NvbG9yXCIpfX1zdGF0aWMgaXNFeHQoZSl7cmV0dXJuIWUuZ3JhZGllbnR9Z2V0IHRhZygpe3JldHVyblwieDE0OmRhdGFCYXJcIn1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnLHttaW5MZW5ndGg6bi50b0ludEF0dHJpYnV0ZSh0Lm1pbkxlbmd0aCwwLCEwKSxtYXhMZW5ndGg6bi50b0ludEF0dHJpYnV0ZSh0Lm1heExlbmd0aCwxMDAsITApLGJvcmRlcjpuLnRvQm9vbEF0dHJpYnV0ZSh0LmJvcmRlciwhMSksZ3JhZGllbnQ6bi50b0Jvb2xBdHRyaWJ1dGUodC5ncmFkaWVudCwhMCksbmVnYXRpdmVCYXJDb2xvclNhbWVBc1Bvc2l0aXZlOm4udG9Cb29sQXR0cmlidXRlKHQubmVnYXRpdmVCYXJDb2xvclNhbWVBc1Bvc2l0aXZlLCEwKSxuZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRpdmU6bi50b0Jvb2xBdHRyaWJ1dGUodC5uZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRpdmUsITApLGF4aXNQb3NpdGlvbjpuLnRvQXR0cmlidXRlKHQuYXhpc1Bvc2l0aW9uLFwiYXV0b1wiKSxkaXJlY3Rpb246bi50b0F0dHJpYnV0ZSh0LmRpcmVjdGlvbixcImxlZnRUb1JpZ2h0XCIpfSksdC5jZnZvLmZvckVhY2godD0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihlLHQpfSksdGhpcy5ib3JkZXJDb2xvclhmb3JtLnJlbmRlcihlLHQuYm9yZGVyQ29sb3IpLHRoaXMubmVnYXRpdmVCb3JkZXJDb2xvclhmb3JtLnJlbmRlcihlLHQubmVnYXRpdmVCb3JkZXJDb2xvciksdGhpcy5uZWdhdGl2ZUZpbGxDb2xvclhmb3JtLnJlbmRlcihlLHQubmVnYXRpdmVGaWxsQ29sb3IpLHRoaXMuYXhpc0NvbG9yWGZvcm0ucmVuZGVyKGUsdC5heGlzQ29sb3IpLGUuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwoZSl7bGV0e2F0dHJpYnV0ZXM6dH09ZTtyZXR1cm57Y2Z2bzpbXSxtaW5MZW5ndGg6bi50b0ludFZhbHVlKHQubWluTGVuZ3RoLDApLG1heExlbmd0aDpuLnRvSW50VmFsdWUodC5tYXhMZW5ndGgsMTAwKSxib3JkZXI6bi50b0Jvb2xWYWx1ZSh0LmJvcmRlciwhMSksZ3JhZGllbnQ6bi50b0Jvb2xWYWx1ZSh0LmdyYWRpZW50LCEwKSxuZWdhdGl2ZUJhckNvbG9yU2FtZUFzUG9zaXRpdmU6bi50b0Jvb2xWYWx1ZSh0Lm5lZ2F0aXZlQmFyQ29sb3JTYW1lQXNQb3NpdGl2ZSwhMCksbmVnYXRpdmVCYXJCb3JkZXJDb2xvclNhbWVBc1Bvc2l0aXZlOm4udG9Cb29sVmFsdWUodC5uZWdhdGl2ZUJhckJvcmRlckNvbG9yU2FtZUFzUG9zaXRpdmUsITApLGF4aXNQb3NpdGlvbjpuLnRvU3RyaW5nVmFsdWUodC5heGlzUG9zaXRpb24sXCJhdXRvXCIpLGRpcmVjdGlvbjpuLnRvU3RyaW5nVmFsdWUodC5kaXJlY3Rpb24sXCJsZWZ0VG9SaWdodFwiKX19b25QYXJzZXJDbG9zZShlLHQpe2NvbnN0WyxyXT1lLnNwbGl0KFwiOlwiKTtzd2l0Y2gocil7Y2FzZVwiY2Z2b1wiOnRoaXMubW9kZWwuY2Z2by5wdXNoKHQubW9kZWwpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tb2RlbFtyXT10Lm1vZGVsfX19fSx7XCIuLi8uLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIjo0OCxcIi4uLy4uL3N0eWxlL2NvbG9yLXhmb3JtXCI6MTI4LFwiLi9jZnZvLWV4dC14Zm9ybVwiOjc2fV0sODA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwieG06ZlwifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcsbnVsbCx0KX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPVwiXCJ9cGFyc2VUZXh0KGUpe3RoaXMubW9kZWwrPWV9cGFyc2VDbG9zZShlKXtyZXR1cm4gZSE9PXRoaXMudGFnfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMn1dLDgxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIikscz1lKFwiLi9jZnZvLWV4dC14Zm9ybVwiKSxvPWUoXCIuL2NmLWljb24tZXh0LXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcIngxNDpjZnZvXCI6dGhpcy5jZnZvWGZvcm09bmV3IHMsXCJ4MTQ6Y2ZJY29uXCI6dGhpcy5jZkljb25YZm9ybT1uZXcgb319Z2V0IHRhZygpe3JldHVyblwieDE0Omljb25TZXRcIn1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnLHtpY29uU2V0Om4udG9TdHJpbmdBdHRyaWJ1dGUodC5pY29uU2V0KSxyZXZlcnNlOm4udG9Cb29sQXR0cmlidXRlKHQucmV2ZXJzZSwhMSksc2hvd1ZhbHVlOm4udG9Cb29sQXR0cmlidXRlKHQuc2hvd1ZhbHVlLCEwKSxjdXN0b206bi50b0Jvb2xBdHRyaWJ1dGUodC5pY29ucywhMSl9KSx0LmNmdm8uZm9yRWFjaCh0PT57dGhpcy5jZnZvWGZvcm0ucmVuZGVyKGUsdCl9KSx0Lmljb25zJiZ0Lmljb25zLmZvckVhY2goKHQscik9Pnt0Lmljb25JZD1yLHRoaXMuY2ZJY29uWGZvcm0ucmVuZGVyKGUsdCl9KSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKGUpe2xldHthdHRyaWJ1dGVzOnR9PWU7cmV0dXJue2Nmdm86W10saWNvblNldDpuLnRvU3RyaW5nVmFsdWUodC5pY29uU2V0LFwiM1RyYWZmaWNMaWdodHNcIikscmV2ZXJzZTpuLnRvQm9vbFZhbHVlKHQucmV2ZXJzZSwhMSksc2hvd1ZhbHVlOm4udG9Cb29sVmFsdWUodC5zaG93VmFsdWUsITApfX1vblBhcnNlckNsb3NlKGUsdCl7Y29uc3RbLHJdPWUuc3BsaXQoXCI6XCIpO3N3aXRjaChyKXtjYXNlXCJjZnZvXCI6dGhpcy5tb2RlbC5jZnZvLnB1c2godC5tb2RlbCk7YnJlYWs7Y2FzZVwiY2ZJY29uXCI6dGhpcy5tb2RlbC5pY29uc3x8KHRoaXMubW9kZWwuaWNvbnM9W10pLHRoaXMubW9kZWwuaWNvbnMucHVzaCh0Lm1vZGVsKTticmVhaztkZWZhdWx0OnRoaXMubW9kZWxbcl09dC5tb2RlbH19fX0se1wiLi4vLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCI6NDgsXCIuL2NmLWljb24tZXh0LXhmb3JtXCI6NzQsXCIuL2Nmdm8tZXh0LXhmb3JtXCI6NzZ9XSw4MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJ4bTpzcXJlZlwifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcsbnVsbCx0KX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPVwiXCJ9cGFyc2VUZXh0KGUpe3RoaXMubW9kZWwrPWV9cGFyc2VDbG9zZShlKXtyZXR1cm4gZSE9PXRoaXMudGFnfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMn1dLDgzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIikscz1lKFwiLi4vLi4vLi4vLi4vZG9jL3JhbmdlXCIpLG89ZShcIi4vZGF0YWJhci14Zm9ybVwiKSxhPWUoXCIuL2V4dC1sc3QtcmVmLXhmb3JtXCIpLGw9ZShcIi4vZm9ybXVsYS14Zm9ybVwiKSxjPWUoXCIuL2NvbG9yLXNjYWxlLXhmb3JtXCIpLHU9ZShcIi4vaWNvbi1zZXQteGZvcm1cIiksaD17XCIzVHJpYW5nbGVzXCI6ITAsXCIzU3RhcnNcIjohMCxcIjVCb3hlc1wiOiEwfSxmPWU9Pntjb25zdHt0eXBlOnQsb3BlcmF0b3I6cn09ZTtzd2l0Y2godCl7Y2FzZVwiY29udGFpbnNUZXh0XCI6Y2FzZVwiY29udGFpbnNCbGFua3NcIjpjYXNlXCJub3RDb250YWluc0JsYW5rc1wiOmNhc2VcImNvbnRhaW5zRXJyb3JzXCI6Y2FzZVwibm90Q29udGFpbnNFcnJvcnNcIjpyZXR1cm57dHlwZTpcImNvbnRhaW5zVGV4dFwiLG9wZXJhdG9yOnR9O2RlZmF1bHQ6cmV0dXJue3R5cGU6dCxvcGVyYXRvcjpyfX19O2NsYXNzIGQgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17ZGF0YUJhcjp0aGlzLmRhdGFiYXJYZm9ybT1uZXcgbyxleHRMc3Q6dGhpcy5leHRMc3RSZWZYZm9ybT1uZXcgYSxmb3JtdWxhOnRoaXMuZm9ybXVsYVhmb3JtPW5ldyBsLGNvbG9yU2NhbGU6dGhpcy5jb2xvclNjYWxlWGZvcm09bmV3IGMsaWNvblNldDp0aGlzLmljb25TZXRYZm9ybT1uZXcgdX19Z2V0IHRhZygpe3JldHVyblwiY2ZSdWxlXCJ9c3RhdGljIGlzUHJpbWl0aXZlKGUpe3JldHVyblwiaWNvblNldFwiIT09ZS50eXBlfHwhZS5jdXN0b20mJiFoW2UuaWNvblNldF19cmVuZGVyKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZVwiZXhwcmVzc2lvblwiOnRoaXMucmVuZGVyRXhwcmVzc2lvbihlLHQpO2JyZWFrO2Nhc2VcImNlbGxJc1wiOnRoaXMucmVuZGVyQ2VsbElzKGUsdCk7YnJlYWs7Y2FzZVwidG9wMTBcIjp0aGlzLnJlbmRlclRvcDEwKGUsdCk7YnJlYWs7Y2FzZVwiYWJvdmVBdmVyYWdlXCI6dGhpcy5yZW5kZXJBYm92ZUF2ZXJhZ2UoZSx0KTticmVhaztjYXNlXCJkYXRhQmFyXCI6dGhpcy5yZW5kZXJEYXRhQmFyKGUsdCk7YnJlYWs7Y2FzZVwiY29sb3JTY2FsZVwiOnRoaXMucmVuZGVyQ29sb3JTY2FsZShlLHQpO2JyZWFrO2Nhc2VcImljb25TZXRcIjp0aGlzLnJlbmRlckljb25TZXQoZSx0KTticmVhaztjYXNlXCJjb250YWluc1RleHRcIjp0aGlzLnJlbmRlclRleHQoZSx0KTticmVhaztjYXNlXCJ0aW1lUGVyaW9kXCI6dGhpcy5yZW5kZXJUaW1lUGVyaW9kKGUsdCl9fXJlbmRlckV4cHJlc3Npb24oZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOlwiZXhwcmVzc2lvblwiLGR4ZklkOnQuZHhmSWQscHJpb3JpdHk6dC5wcmlvcml0eX0pLHRoaXMuZm9ybXVsYVhmb3JtLnJlbmRlcihlLHQuZm9ybXVsYWVbMF0pLGUuY2xvc2VOb2RlKCl9cmVuZGVyQ2VsbElzKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTpcImNlbGxJc1wiLGR4ZklkOnQuZHhmSWQscHJpb3JpdHk6dC5wcmlvcml0eSxvcGVyYXRvcjp0Lm9wZXJhdG9yfSksdC5mb3JtdWxhZS5mb3JFYWNoKHQ9Pnt0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIoZSx0KX0pLGUuY2xvc2VOb2RlKCl9cmVuZGVyVG9wMTAoZSx0KXtlLmxlYWZOb2RlKHRoaXMudGFnLHt0eXBlOlwidG9wMTBcIixkeGZJZDp0LmR4ZklkLHByaW9yaXR5OnQucHJpb3JpdHkscGVyY2VudDpuLnRvQm9vbEF0dHJpYnV0ZSh0LnBlcmNlbnQsITEpLGJvdHRvbTpuLnRvQm9vbEF0dHJpYnV0ZSh0LmJvdHRvbSwhMSkscmFuazpuLnRvSW50VmFsdWUodC5yYW5rLDEwLCEwKX0pfXJlbmRlckFib3ZlQXZlcmFnZShlLHQpe2UubGVhZk5vZGUodGhpcy50YWcse3R5cGU6XCJhYm92ZUF2ZXJhZ2VcIixkeGZJZDp0LmR4ZklkLHByaW9yaXR5OnQucHJpb3JpdHksYWJvdmVBdmVyYWdlOm4udG9Cb29sQXR0cmlidXRlKHQuYWJvdmVBdmVyYWdlLCEwKX0pfXJlbmRlckRhdGFCYXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOlwiZGF0YUJhclwiLHByaW9yaXR5OnQucHJpb3JpdHl9KSx0aGlzLmRhdGFiYXJYZm9ybS5yZW5kZXIoZSx0KSx0aGlzLmV4dExzdFJlZlhmb3JtLnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9cmVuZGVyQ29sb3JTY2FsZShlLHQpe2Uub3Blbk5vZGUodGhpcy50YWcse3R5cGU6XCJjb2xvclNjYWxlXCIscHJpb3JpdHk6dC5wcmlvcml0eX0pLHRoaXMuY29sb3JTY2FsZVhmb3JtLnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9cmVuZGVySWNvblNldChlLHQpe2QuaXNQcmltaXRpdmUodCkmJihlLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOlwiaWNvblNldFwiLHByaW9yaXR5OnQucHJpb3JpdHl9KSx0aGlzLmljb25TZXRYZm9ybS5yZW5kZXIoZSx0KSxlLmNsb3NlTm9kZSgpKX1yZW5kZXJUZXh0KGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7dHlwZTp0Lm9wZXJhdG9yLGR4ZklkOnQuZHhmSWQscHJpb3JpdHk6dC5wcmlvcml0eSxvcGVyYXRvcjpuLnRvU3RyaW5nQXR0cmlidXRlKHQub3BlcmF0b3IsXCJjb250YWluc1RleHRcIil9KTtjb25zdCByPShlPT57aWYoZS5mb3JtdWxhZSYmZS5mb3JtdWxhZVswXSlyZXR1cm4gZS5mb3JtdWxhZVswXTtjb25zdCB0PW5ldyBzKGUucmVmKSx7dGw6cn09dDtzd2l0Y2goZS5vcGVyYXRvcil7Y2FzZVwiY29udGFpbnNUZXh0XCI6cmV0dXJuYE5PVChJU0VSUk9SKFNFQVJDSChcIiR7ZS50ZXh0fVwiLCR7cn0pKSlgO2Nhc2VcImNvbnRhaW5zQmxhbmtzXCI6cmV0dXJuYExFTihUUklNKCR7cn0pKT0wYDtjYXNlXCJub3RDb250YWluc0JsYW5rc1wiOnJldHVybmBMRU4oVFJJTSgke3J9KSk+MGA7Y2FzZVwiY29udGFpbnNFcnJvcnNcIjpyZXR1cm5gSVNFUlJPUigke3J9KWA7Y2FzZVwibm90Q29udGFpbnNFcnJvcnNcIjpyZXR1cm5gTk9UKElTRVJST1IoJHtyfSkpYDtkZWZhdWx0OnJldHVybn19KSh0KTtyJiZ0aGlzLmZvcm11bGFYZm9ybS5yZW5kZXIoZSxyKSxlLmNsb3NlTm9kZSgpfXJlbmRlclRpbWVQZXJpb2QoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnLHt0eXBlOlwidGltZVBlcmlvZFwiLGR4ZklkOnQuZHhmSWQscHJpb3JpdHk6dC5wcmlvcml0eSx0aW1lUGVyaW9kOnQudGltZVBlcmlvZH0pO2NvbnN0IHI9KGU9PntpZihlLmZvcm11bGFlJiZlLmZvcm11bGFlWzBdKXJldHVybiBlLmZvcm11bGFlWzBdO2NvbnN0IHQ9bmV3IHMoZS5yZWYpLHt0bDpyfT10O3N3aXRjaChlLnRpbWVQZXJpb2Qpe2Nhc2VcInRoaXNXZWVrXCI6cmV0dXJuYEFORChUT0RBWSgpLVJPVU5ERE9XTigke3J9LDApPD1XRUVLREFZKFRPREFZKCkpLTEsUk9VTkRET1dOKCR7cn0sMCktVE9EQVkoKTw9Ny1XRUVLREFZKFRPREFZKCkpKWA7Y2FzZVwibGFzdFdlZWtcIjpyZXR1cm5gQU5EKFRPREFZKCktUk9VTkRET1dOKCR7cn0sMCk+PShXRUVLREFZKFRPREFZKCkpKSxUT0RBWSgpLVJPVU5ERE9XTigke3J9LDApPChXRUVLREFZKFRPREFZKCkpKzcpKWA7Y2FzZVwibmV4dFdlZWtcIjpyZXR1cm5gQU5EKFJPVU5ERE9XTigke3J9LDApLVRPREFZKCk+KDctV0VFS0RBWShUT0RBWSgpKSksUk9VTkRET1dOKCR7cn0sMCktVE9EQVkoKTwoMTUtV0VFS0RBWShUT0RBWSgpKSkpYDtjYXNlXCJ5ZXN0ZXJkYXlcIjpyZXR1cm5gRkxPT1IoJHtyfSwxKT1UT0RBWSgpLTFgO2Nhc2VcInRvZGF5XCI6cmV0dXJuYEZMT09SKCR7cn0sMSk9VE9EQVkoKWA7Y2FzZVwidG9tb3Jyb3dcIjpyZXR1cm5gRkxPT1IoJHtyfSwxKT1UT0RBWSgpKzFgO2Nhc2VcImxhc3Q3RGF5c1wiOnJldHVybmBBTkQoVE9EQVkoKS1GTE9PUigke3J9LDEpPD02LEZMT09SKCR7cn0sMSk8PVRPREFZKCkpYDtjYXNlXCJsYXN0TW9udGhcIjpyZXR1cm5gQU5EKE1PTlRIKCR7cn0pPU1PTlRIKEVEQVRFKFRPREFZKCksMC0xKSksWUVBUigke3J9KT1ZRUFSKEVEQVRFKFRPREFZKCksMC0xKSkpYDtjYXNlXCJ0aGlzTW9udGhcIjpyZXR1cm5gQU5EKE1PTlRIKCR7cn0pPU1PTlRIKFRPREFZKCkpLFlFQVIoJHtyfSk9WUVBUihUT0RBWSgpKSlgO2Nhc2VcIm5leHRNb250aFwiOnJldHVybmBBTkQoTU9OVEgoJHtyfSk9TU9OVEgoRURBVEUoVE9EQVkoKSwwKzEpKSxZRUFSKCR7cn0pPVlFQVIoRURBVEUoVE9EQVkoKSwwKzEpKSlgO2RlZmF1bHQ6cmV0dXJufX0pKHQpO3ImJnRoaXMuZm9ybXVsYVhmb3JtLnJlbmRlcihlLHIpLGUuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwoZSl7bGV0e2F0dHJpYnV0ZXM6dH09ZTtyZXR1cm57Li4uZih0KSxkeGZJZDpuLnRvSW50VmFsdWUodC5keGZJZCkscHJpb3JpdHk6bi50b0ludFZhbHVlKHQucHJpb3JpdHkpLHRpbWVQZXJpb2Q6dC50aW1lUGVyaW9kLHBlcmNlbnQ6bi50b0Jvb2xWYWx1ZSh0LnBlcmNlbnQpLGJvdHRvbTpuLnRvQm9vbFZhbHVlKHQuYm90dG9tKSxyYW5rOm4udG9JbnRWYWx1ZSh0LnJhbmspLGFib3ZlQXZlcmFnZTpuLnRvQm9vbFZhbHVlKHQuYWJvdmVBdmVyYWdlKX19b25QYXJzZXJDbG9zZShlLHQpe3N3aXRjaChlKXtjYXNlXCJkYXRhQmFyXCI6Y2FzZVwiZXh0THN0XCI6Y2FzZVwiY29sb3JTY2FsZVwiOmNhc2VcImljb25TZXRcIjpPYmplY3QuYXNzaWduKHRoaXMubW9kZWwsdC5tb2RlbCk7YnJlYWs7Y2FzZVwiZm9ybXVsYVwiOnRoaXMubW9kZWwuZm9ybXVsYWU9dGhpcy5tb2RlbC5mb3JtdWxhZXx8W10sdGhpcy5tb2RlbC5mb3JtdWxhZS5wdXNoKHQubW9kZWwpfX19dC5leHBvcnRzPWR9LHtcIi4uLy4uLy4uLy4uL2RvYy9yYW5nZVwiOjEwLFwiLi4vLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCI6NDgsXCIuL2NvbG9yLXNjYWxlLXhmb3JtXCI6ODUsXCIuL2RhdGFiYXIteGZvcm1cIjo4OCxcIi4vZXh0LWxzdC1yZWYteGZvcm1cIjo4OSxcIi4vZm9ybXVsYS14Zm9ybVwiOjkwLFwiLi9pY29uLXNldC14Zm9ybVwiOjkxfV0sODQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiY2Z2b1wifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcse3R5cGU6dC50eXBlLHZhbDp0LnZhbHVlfSl9cGFyc2VPcGVuKGUpe3RoaXMubW9kZWw9e3R5cGU6ZS5hdHRyaWJ1dGVzLnR5cGUsdmFsdWU6bi50b0Zsb2F0VmFsdWUoZS5hdHRyaWJ1dGVzLnZhbCl9fXBhcnNlQ2xvc2UoZSl7cmV0dXJuIGUhPT10aGlzLnRhZ319fSx7XCIuLi8uLi9iYXNlLXhmb3JtXCI6MzJ9XSw4NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybVwiKSxzPWUoXCIuL2Nmdm8teGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2Nmdm86dGhpcy5jZnZvWGZvcm09bmV3IHMsY29sb3I6dGhpcy5jb2xvclhmb3JtPW5ldyBpfX1nZXQgdGFnKCl7cmV0dXJuXCJjb2xvclNjYWxlXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyksdC5jZnZvLmZvckVhY2godD0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihlLHQpfSksdC5jb2xvci5mb3JFYWNoKHQ9Pnt0aGlzLmNvbG9yWGZvcm0ucmVuZGVyKGUsdCl9KSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKGUpe3JldHVybntjZnZvOltdLGNvbG9yOltdfX1vblBhcnNlckNsb3NlKGUsdCl7dGhpcy5tb2RlbFtlXS5wdXNoKHQubW9kZWwpfX19LHtcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiOjQ4LFwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm1cIjoxMjgsXCIuL2Nmdm8teGZvcm1cIjo4NH1dLDg2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vY29tcG9zaXRlLXhmb3JtXCIpLGk9ZShcIi4vY2YtcnVsZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17Y2ZSdWxlOm5ldyBpfX1nZXQgdGFnKCl7cmV0dXJuXCJjb25kaXRpb25hbEZvcm1hdHRpbmdcIn1yZW5kZXIoZSx0KXt0LnJ1bGVzLnNvbWUoaS5pc1ByaW1pdGl2ZSkmJihlLm9wZW5Ob2RlKHRoaXMudGFnLHtzcXJlZjp0LnJlZn0pLHQucnVsZXMuZm9yRWFjaChyPT57aS5pc1ByaW1pdGl2ZShyKSYmKHIucmVmPXQucmVmLHRoaXMubWFwLmNmUnVsZS5yZW5kZXIoZSxyKSl9KSxlLmNsb3NlTm9kZSgpKX1jcmVhdGVOZXdNb2RlbChlKXtsZXR7YXR0cmlidXRlczp0fT1lO3JldHVybntyZWY6dC5zcXJlZixydWxlczpbXX19b25QYXJzZXJDbG9zZShlLHQpe3RoaXMubW9kZWwucnVsZXMucHVzaCh0Lm1vZGVsKX19fSx7XCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIjo0OCxcIi4vY2YtcnVsZS14Zm9ybVwiOjgzfV0sODc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4vY29uZGl0aW9uYWwtZm9ybWF0dGluZy14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmNmWGZvcm09bmV3IGl9Z2V0IHRhZygpe3JldHVyblwiY29uZGl0aW9uYWxGb3JtYXR0aW5nXCJ9cmVzZXQoKXt0aGlzLm1vZGVsPVtdfXByZXBhcmUoZSx0KXtsZXQgcj1lLnJlZHVjZSgoZSx0KT0+TWF0aC5tYXgoZSwuLi50LnJ1bGVzLm1hcChlPT5lLnByaW9yaXR5fHwwKSksMSk7ZS5mb3JFYWNoKGU9PntlLnJ1bGVzLmZvckVhY2goZT0+e2UucHJpb3JpdHl8fChlLnByaW9yaXR5PXIrKyksZS5zdHlsZSYmKGUuZHhmSWQ9dC5zdHlsZXMuYWRkRHhmU3R5bGUoZS5zdHlsZSkpfSl9KX1yZW5kZXIoZSx0KXt0LmZvckVhY2godD0+e3RoaXMuY2ZYZm9ybS5yZW5kZXIoZSx0KX0pfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcImNvbmRpdGlvbmFsRm9ybWF0dGluZ1wiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLmNmWGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuISF0aGlzLnBhcnNlciYmKCEhdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMubW9kZWwucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwLCExKSl9cmVjb25jaWxlKGUsdCl7ZS5mb3JFYWNoKGU9PntlLnJ1bGVzLmZvckVhY2goZT0+e3ZvaWQgMCE9PWUuZHhmSWQmJihlLnN0eWxlPXQuc3R5bGVzLmdldER4ZlN0eWxlKGUuZHhmSWQpLGRlbGV0ZSBlLmR4ZklkKX0pfSl9fX0se1wiLi4vLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9jb25kaXRpb25hbC1mb3JtYXR0aW5nLXhmb3JtXCI6ODZ9XSw4ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9zdHlsZS9jb2xvci14Zm9ybVwiKSxzPWUoXCIuL2Nmdm8teGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2Nmdm86dGhpcy5jZnZvWGZvcm09bmV3IHMsY29sb3I6dGhpcy5jb2xvclhmb3JtPW5ldyBpfX1nZXQgdGFnKCl7cmV0dXJuXCJkYXRhQmFyXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyksdC5jZnZvLmZvckVhY2godD0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihlLHQpfSksdGhpcy5jb2xvclhmb3JtLnJlbmRlcihlLHQuY29sb3IpLGUuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57Y2Z2bzpbXX19b25QYXJzZXJDbG9zZShlLHQpe3N3aXRjaChlKXtjYXNlXCJjZnZvXCI6dGhpcy5tb2RlbC5jZnZvLnB1c2godC5tb2RlbCk7YnJlYWs7Y2FzZVwiY29sb3JcIjp0aGlzLm1vZGVsLmNvbG9yPXQubW9kZWx9fX19LHtcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiOjQ4LFwiLi4vLi4vc3R5bGUvY29sb3IteGZvcm1cIjoxMjgsXCIuL2Nmdm8teGZvcm1cIjo4NH1dLDg5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIik7Y2xhc3MgcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwieDE0OmlkXCJ9cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZSh0aGlzLnRhZyxudWxsLHQpfXBhcnNlT3Blbigpe3RoaXMubW9kZWw9XCJcIn1wYXJzZVRleHQoZSl7dGhpcy5tb2RlbCs9ZX1wYXJzZUNsb3NlKGUpe3JldHVybiBlIT09dGhpcy50YWd9fWNsYXNzIG8gZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17XCJ4MTQ6aWRcIjp0aGlzLmlkWGZvcm09bmV3IHN9fWdldCB0YWcoKXtyZXR1cm5cImV4dFwifXJlbmRlcihlLHQpe2Uub3Blbk5vZGUodGhpcy50YWcse3VyaTpcIntCMDI1RjkzNy1DN0IxLTQ3RDMtQjY3Ri1BNjJFRkY2NjZFM0V9XCIsXCJ4bWxuczp4MTRcIjpcImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L21haW5cIn0pLHRoaXMuaWRYZm9ybS5yZW5kZXIoZSx0LngxNElkKSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue319b25QYXJzZXJDbG9zZShlLHQpe3RoaXMubW9kZWwueDE0SWQ9dC5tb2RlbH19dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgaXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2V4dDpuZXcgb319Z2V0IHRhZygpe3JldHVyblwiZXh0THN0XCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5tYXAuZXh0LnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57fX1vblBhcnNlckNsb3NlKGUsdCl7T2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLHQubW9kZWwpfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMixcIi4uLy4uL2NvbXBvc2l0ZS14Zm9ybVwiOjQ4fV0sOTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiZm9ybXVsYVwifXJlbmRlcihlLHQpe2UubGVhZk5vZGUodGhpcy50YWcsbnVsbCx0KX1wYXJzZU9wZW4oKXt0aGlzLm1vZGVsPVwiXCJ9cGFyc2VUZXh0KGUpe3RoaXMubW9kZWwrPWV9cGFyc2VDbG9zZShlKXtyZXR1cm4gZSE9PXRoaXMudGFnfX19LHtcIi4uLy4uL2Jhc2UteGZvcm1cIjozMn1dLDkxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIikscz1lKFwiLi9jZnZvLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtjZnZvOnRoaXMuY2Z2b1hmb3JtPW5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuXCJpY29uU2V0XCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx7aWNvblNldDpuLnRvU3RyaW5nQXR0cmlidXRlKHQuaWNvblNldCxcIjNUcmFmZmljTGlnaHRzXCIpLHJldmVyc2U6bi50b0Jvb2xBdHRyaWJ1dGUodC5yZXZlcnNlLCExKSxzaG93VmFsdWU6bi50b0Jvb2xBdHRyaWJ1dGUodC5zaG93VmFsdWUsITApfSksdC5jZnZvLmZvckVhY2godD0+e3RoaXMuY2Z2b1hmb3JtLnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKX1jcmVhdGVOZXdNb2RlbChlKXtsZXR7YXR0cmlidXRlczp0fT1lO3JldHVybntpY29uU2V0Om4udG9TdHJpbmdWYWx1ZSh0Lmljb25TZXQsXCIzVHJhZmZpY0xpZ2h0c1wiKSxyZXZlcnNlOm4udG9Cb29sVmFsdWUodC5yZXZlcnNlKSxzaG93VmFsdWU6bi50b0Jvb2xWYWx1ZSh0LnNob3dWYWx1ZSksY2Z2bzpbXX19b25QYXJzZXJDbG9zZShlLHQpe3RoaXMubW9kZWxbZV0ucHVzaCh0Lm1vZGVsKX19fSx7XCIuLi8uLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi8uLi9jb21wb3NpdGUteGZvcm1cIjo0OCxcIi4vY2Z2by14Zm9ybVwiOjg0fV0sOTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91dGlsc1wiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Z2V0IHRhZygpe3JldHVyblwiY29sXCJ9cHJlcGFyZShlLHQpe2NvbnN0IHI9dC5zdHlsZXMuYWRkU3R5bGVNb2RlbChlLnN0eWxlfHx7fSk7ciYmKGUuc3R5bGVJZD1yKX1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKFwiY29sXCIpLGUuYWRkQXR0cmlidXRlKFwibWluXCIsdC5taW4pLGUuYWRkQXR0cmlidXRlKFwibWF4XCIsdC5tYXgpLHQud2lkdGgmJmUuYWRkQXR0cmlidXRlKFwid2lkdGhcIix0LndpZHRoKSx0LnN0eWxlSWQmJmUuYWRkQXR0cmlidXRlKFwic3R5bGVcIix0LnN0eWxlSWQpLHQuaGlkZGVuJiZlLmFkZEF0dHJpYnV0ZShcImhpZGRlblwiLFwiMVwiKSx0LmJlc3RGaXQmJmUuYWRkQXR0cmlidXRlKFwiYmVzdEZpdFwiLFwiMVwiKSx0Lm91dGxpbmVMZXZlbCYmZS5hZGRBdHRyaWJ1dGUoXCJvdXRsaW5lTGV2ZWxcIix0Lm91dGxpbmVMZXZlbCksdC5jb2xsYXBzZWQmJmUuYWRkQXR0cmlidXRlKFwiY29sbGFwc2VkXCIsXCIxXCIpLGUuYWRkQXR0cmlidXRlKFwiY3VzdG9tV2lkdGhcIixcIjFcIiksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYoXCJjb2xcIj09PWUubmFtZSl7Y29uc3QgdD10aGlzLm1vZGVsPXttaW46cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLm1pbnx8XCIwXCIsMTApLG1heDpwYXJzZUludChlLmF0dHJpYnV0ZXMubWF4fHxcIjBcIiwxMCksd2lkdGg6dm9pZCAwPT09ZS5hdHRyaWJ1dGVzLndpZHRoP3ZvaWQgMDpwYXJzZUZsb2F0KGUuYXR0cmlidXRlcy53aWR0aHx8XCIwXCIpfTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnN0eWxlJiYodC5zdHlsZUlkPXBhcnNlSW50KGUuYXR0cmlidXRlcy5zdHlsZSwxMCkpLG4ucGFyc2VCb29sZWFuKGUuYXR0cmlidXRlcy5oaWRkZW4pJiYodC5oaWRkZW49ITApLG4ucGFyc2VCb29sZWFuKGUuYXR0cmlidXRlcy5iZXN0Rml0KSYmKHQuYmVzdEZpdD0hMCksZS5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbCYmKHQub3V0bGluZUxldmVsPXBhcnNlSW50KGUuYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWwsMTApKSxuLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuY29sbGFwc2VkKSYmKHQuY29sbGFwc2VkPSEwKSwhMH1yZXR1cm4hMX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfXJlY29uY2lsZShlLHQpe2Uuc3R5bGVJZCYmKGUuc3R5bGU9dC5zdHlsZXMuZ2V0U3R5bGVNb2RlbChlLnN0eWxlSWQpKX19fSx7XCIuLi8uLi8uLi91dGlscy91dGlsc1wiOjI3LFwiLi4vYmFzZS14Zm9ybVwiOjMyfV0sOTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCIpLHM9ZShcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiKSxvPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGE9ZShcIi4uLy4uLy4uL2RvYy9yYW5nZVwiKTtmdW5jdGlvbiBsKGUsdCxyLG4pe2NvbnN0IGk9dFtyXTt2b2lkIDAhPT1pP2Vbcl09aTp2b2lkIDAhPT1uJiYoZVtyXT1uKX1mdW5jdGlvbiBjKGUsdCxyLG4pe2NvbnN0IHM9dFtyXTt2b2lkIDAhPT1zP2Vbcl09aS5wYXJzZUJvb2xlYW4ocyk6dm9pZCAwIT09biYmKGVbcl09bil9dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgb3tnZXQgdGFnKCl7cmV0dXJuXCJkYXRhVmFsaWRhdGlvbnNcIn1yZW5kZXIoZSx0KXtjb25zdCByPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bi5tYXAoZSwoZSx0KT0+KHthZGRyZXNzOnQsZGF0YVZhbGlkYXRpb246ZSxtYXJrZWQ6ITF9KSkuc29ydCgoZSx0KT0+bi5zdHJjbXAoZS5hZGRyZXNzLHQuYWRkcmVzcykpLHI9bi5rZXlCeSh0LFwiYWRkcmVzc1wiKSxpPSh0LHIsaSk9Pntmb3IobGV0IG89MDtvPHI7bysrKXtjb25zdCByPXMuZW5jb2RlQWRkcmVzcyh0LnJvdytvLGkpO2lmKCFlW3JdfHwhbi5pc0VxdWFsKGVbdC5hZGRyZXNzXSxlW3JdKSlyZXR1cm4hMX1yZXR1cm4hMH07cmV0dXJuIHQubWFwKHQ9PntpZighdC5tYXJrZWQpe2NvbnN0IG89cy5kZWNvZGVFeCh0LmFkZHJlc3MpO2lmKG8uZGltZW5zaW9ucylyZXR1cm4gcltvLmRpbWVuc2lvbnNdLm1hcmtlZD0hMCx7Li4udC5kYXRhVmFsaWRhdGlvbixzcXJlZjp0LmFkZHJlc3N9O2xldCBhPTEsbD1zLmVuY29kZUFkZHJlc3Moby5yb3crYSxvLmNvbCk7Zm9yKDtlW2xdJiZuLmlzRXF1YWwodC5kYXRhVmFsaWRhdGlvbixlW2xdKTspYSsrLGw9cy5lbmNvZGVBZGRyZXNzKG8ucm93K2Esby5jb2wpO2xldCBjPTE7Zm9yKDtpKG8sYSxvLmNvbCtjKTspYysrO2ZvcihsZXQgZT0wO2U8YTtlKyspZm9yKGxldCB0PTA7dDxjO3QrKylsPXMuZW5jb2RlQWRkcmVzcyhvLnJvdytlLG8uY29sK3QpLHJbbF0ubWFya2VkPSEwO2lmKGE+MXx8Yz4xKXtjb25zdCBlPW8ucm93KyhhLTEpLHI9by5jb2wrKGMtMSk7cmV0dXJuey4uLnQuZGF0YVZhbGlkYXRpb24sc3FyZWY6YCR7dC5hZGRyZXNzfToke3MuZW5jb2RlQWRkcmVzcyhlLHIpfWB9fXJldHVybnsuLi50LmRhdGFWYWxpZGF0aW9uLHNxcmVmOnQuYWRkcmVzc319cmV0dXJuIG51bGx9KS5maWx0ZXIoQm9vbGVhbil9KHQpO3IubGVuZ3RoJiYoZS5vcGVuTm9kZShcImRhdGFWYWxpZGF0aW9uc1wiLHtjb3VudDpyLmxlbmd0aH0pLHIuZm9yRWFjaCh0PT57ZS5vcGVuTm9kZShcImRhdGFWYWxpZGF0aW9uXCIpLFwiYW55XCIhPT10LnR5cGUmJihlLmFkZEF0dHJpYnV0ZShcInR5cGVcIix0LnR5cGUpLHQub3BlcmF0b3ImJlwibGlzdFwiIT09dC50eXBlJiZcImJldHdlZW5cIiE9PXQub3BlcmF0b3ImJmUuYWRkQXR0cmlidXRlKFwib3BlcmF0b3JcIix0Lm9wZXJhdG9yKSx0LmFsbG93QmxhbmsmJmUuYWRkQXR0cmlidXRlKFwiYWxsb3dCbGFua1wiLFwiMVwiKSksdC5zaG93SW5wdXRNZXNzYWdlJiZlLmFkZEF0dHJpYnV0ZShcInNob3dJbnB1dE1lc3NhZ2VcIixcIjFcIiksdC5wcm9tcHRUaXRsZSYmZS5hZGRBdHRyaWJ1dGUoXCJwcm9tcHRUaXRsZVwiLHQucHJvbXB0VGl0bGUpLHQucHJvbXB0JiZlLmFkZEF0dHJpYnV0ZShcInByb21wdFwiLHQucHJvbXB0KSx0LnNob3dFcnJvck1lc3NhZ2UmJmUuYWRkQXR0cmlidXRlKFwic2hvd0Vycm9yTWVzc2FnZVwiLFwiMVwiKSx0LmVycm9yU3R5bGUmJmUuYWRkQXR0cmlidXRlKFwiZXJyb3JTdHlsZVwiLHQuZXJyb3JTdHlsZSksdC5lcnJvclRpdGxlJiZlLmFkZEF0dHJpYnV0ZShcImVycm9yVGl0bGVcIix0LmVycm9yVGl0bGUpLHQuZXJyb3ImJmUuYWRkQXR0cmlidXRlKFwiZXJyb3JcIix0LmVycm9yKSxlLmFkZEF0dHJpYnV0ZShcInNxcmVmXCIsdC5zcXJlZiksKHQuZm9ybXVsYWV8fFtdKS5mb3JFYWNoKChyLG4pPT57ZS5vcGVuTm9kZShcImZvcm11bGFcIisobisxKSksXCJkYXRlXCI9PT10LnR5cGU/ZS53cml0ZVRleHQoaS5kYXRlVG9FeGNlbChuZXcgRGF0ZShyKSkpOmUud3JpdGVUZXh0KHIpLGUuY2xvc2VOb2RlKCl9KSxlLmNsb3NlTm9kZSgpfSksZS5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2VcImRhdGFWYWxpZGF0aW9uc1wiOnJldHVybiB0aGlzLm1vZGVsPXt9LCEwO2Nhc2VcImRhdGFWYWxpZGF0aW9uXCI6e3RoaXMuX2FkZHJlc3M9ZS5hdHRyaWJ1dGVzLnNxcmVmO2NvbnN0IHQ9e3R5cGU6ZS5hdHRyaWJ1dGVzLnR5cGV8fFwiYW55XCIsZm9ybXVsYWU6W119O3N3aXRjaChlLmF0dHJpYnV0ZXMudHlwZSYmYyh0LGUuYXR0cmlidXRlcyxcImFsbG93QmxhbmtcIiksYyh0LGUuYXR0cmlidXRlcyxcInNob3dJbnB1dE1lc3NhZ2VcIiksYyh0LGUuYXR0cmlidXRlcyxcInNob3dFcnJvck1lc3NhZ2VcIiksdC50eXBlKXtjYXNlXCJhbnlcIjpjYXNlXCJsaXN0XCI6Y2FzZVwiY3VzdG9tXCI6YnJlYWs7ZGVmYXVsdDpsKHQsZS5hdHRyaWJ1dGVzLFwib3BlcmF0b3JcIixcImJldHdlZW5cIil9cmV0dXJuIGwodCxlLmF0dHJpYnV0ZXMsXCJwcm9tcHRUaXRsZVwiKSxsKHQsZS5hdHRyaWJ1dGVzLFwicHJvbXB0XCIpLGwodCxlLmF0dHJpYnV0ZXMsXCJlcnJvclN0eWxlXCIpLGwodCxlLmF0dHJpYnV0ZXMsXCJlcnJvclRpdGxlXCIpLGwodCxlLmF0dHJpYnV0ZXMsXCJlcnJvclwiKSx0aGlzLl9kYXRhVmFsaWRhdGlvbj10LCEwfWNhc2VcImZvcm11bGExXCI6Y2FzZVwiZm9ybXVsYTJcIjpyZXR1cm4gdGhpcy5fZm9ybXVsYT1bXSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoZSl7dGhpcy5fZm9ybXVsYSYmdGhpcy5fZm9ybXVsYS5wdXNoKGUpfXBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2VcImRhdGFWYWxpZGF0aW9uc1wiOnJldHVybiExO2Nhc2VcImRhdGFWYWxpZGF0aW9uXCI6dGhpcy5fZGF0YVZhbGlkYXRpb24uZm9ybXVsYWUmJnRoaXMuX2RhdGFWYWxpZGF0aW9uLmZvcm11bGFlLmxlbmd0aHx8KGRlbGV0ZSB0aGlzLl9kYXRhVmFsaWRhdGlvbi5mb3JtdWxhZSxkZWxldGUgdGhpcy5fZGF0YVZhbGlkYXRpb24ub3BlcmF0b3IpO3JldHVybih0aGlzLl9hZGRyZXNzLnNwbGl0KC9cXHMrL2cpfHxbXSkuZm9yRWFjaChlPT57aWYoZS5pbmNsdWRlcyhcIjpcIikpe25ldyBhKGUpLmZvckVhY2hBZGRyZXNzKGU9Pnt0aGlzLm1vZGVsW2VdPXRoaXMuX2RhdGFWYWxpZGF0aW9ufSl9ZWxzZSB0aGlzLm1vZGVsW2VdPXRoaXMuX2RhdGFWYWxpZGF0aW9ufSksITA7Y2FzZVwiZm9ybXVsYTFcIjpjYXNlXCJmb3JtdWxhMlwiOntsZXQgZT10aGlzLl9mb3JtdWxhLmpvaW4oXCJcIik7c3dpdGNoKHRoaXMuX2RhdGFWYWxpZGF0aW9uLnR5cGUpe2Nhc2VcIndob2xlXCI6Y2FzZVwidGV4dExlbmd0aFwiOmU9cGFyc2VJbnQoZSwxMCk7YnJlYWs7Y2FzZVwiZGVjaW1hbFwiOmU9cGFyc2VGbG9hdChlKTticmVhaztjYXNlXCJkYXRlXCI6ZT1pLmV4Y2VsVG9EYXRlKHBhcnNlRmxvYXQoZSkpfXJldHVybiB0aGlzLl9kYXRhVmFsaWRhdGlvbi5mb3JtdWxhZS5wdXNoKGUpLHRoaXMuX2Zvcm11bGE9dm9pZCAwLCEwfWRlZmF1bHQ6cmV0dXJuITB9fX19LHtcIi4uLy4uLy4uL2RvYy9yYW5nZVwiOjEwLFwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlXCI6MTksXCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCI6MjYsXCIuLi8uLi8uLi91dGlscy91dGlsc1wiOjI3LFwiLi4vYmFzZS14Zm9ybVwiOjMyfV0sOTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiZGltZW5zaW9uXCJ9cmVuZGVyKGUsdCl7dCYmZS5sZWFmTm9kZShcImRpbWVuc2lvblwiLHtyZWY6dH0pfXBhcnNlT3BlbihlKXtyZXR1cm5cImRpbWVuc2lvblwiPT09ZS5uYW1lJiYodGhpcy5tb2RlbD1lLmF0dHJpYnV0ZXMucmVmLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDk1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cImRyYXdpbmdcIn1yZW5kZXIoZSx0KXt0JiZlLmxlYWZOb2RlKHRoaXMudGFnLHtcInI6aWRcIjp0LnJJZH0pfXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtySWQ6ZS5hdHRyaWJ1dGVzW1wicjppZFwiXX0sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw5NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2NvbXBvc2l0ZS14Zm9ybVwiKSxpPWUoXCIuL2NmLWV4dC9jb25kaXRpb25hbC1mb3JtYXR0aW5ncy1leHQteGZvcm1cIik7Y2xhc3MgcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtcIngxNDpjb25kaXRpb25hbEZvcm1hdHRpbmdzXCI6dGhpcy5jb25kaXRpb25hbEZvcm1hdHRpbmdzPW5ldyBpfX1nZXQgdGFnKCl7cmV0dXJuXCJleHRcIn1oYXNDb250ZW50KGUpe3JldHVybiB0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MuaGFzQ29udGVudChlLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MpfXByZXBhcmUoZSx0KXt0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MucHJlcGFyZShlLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MsdCl9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZShcImV4dFwiLHt1cmk6XCJ7NzhDMEQ5MzEtNjQzNy00MDdkLUE4RUUtRjBBQUQ3NTM5RTY1fVwiLFwieG1sbnM6eDE0XCI6XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9tYWluXCJ9KSx0aGlzLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MucmVuZGVyKGUsdC5jb25kaXRpb25hbEZvcm1hdHRpbmdzKSxlLmNsb3NlTm9kZSgpfWNyZWF0ZU5ld01vZGVsKCl7cmV0dXJue319b25QYXJzZXJDbG9zZShlLHQpe3RoaXMubW9kZWxbZV09dC5tb2RlbH19dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2V4dDp0aGlzLmV4dD1uZXcgc319Z2V0IHRhZygpe3JldHVyblwiZXh0THN0XCJ9cHJlcGFyZShlLHQpe3RoaXMuZXh0LnByZXBhcmUoZSx0KX1oYXNDb250ZW50KGUpe3JldHVybiB0aGlzLmV4dC5oYXNDb250ZW50KGUpfXJlbmRlcihlLHQpe3RoaXMuaGFzQ29udGVudCh0KSYmKGUub3Blbk5vZGUoXCJleHRMc3RcIiksdGhpcy5leHQucmVuZGVyKGUsdCksZS5jbG9zZU5vZGUoKSl9Y3JlYXRlTmV3TW9kZWwoKXtyZXR1cm57fX1vblBhcnNlckNsb3NlKGUsdCl7T2JqZWN0LmFzc2lnbih0aGlzLm1vZGVsLHQubW9kZWwpfX19LHtcIi4uL2NvbXBvc2l0ZS14Zm9ybVwiOjQ4LFwiLi9jZi1leHQvY29uZGl0aW9uYWwtZm9ybWF0dGluZ3MtZXh0LXhmb3JtXCI6Nzh9XSw5NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJoZWFkZXJGb290ZXJcIn1yZW5kZXIoZSx0KXtpZih0KXtlLmFkZFJvbGxiYWNrKCk7bGV0IHI9ITE7ZS5vcGVuTm9kZShcImhlYWRlckZvb3RlclwiKSx0LmRpZmZlcmVudEZpcnN0JiYoZS5hZGRBdHRyaWJ1dGUoXCJkaWZmZXJlbnRGaXJzdFwiLFwiMVwiKSxyPSEwKSx0LmRpZmZlcmVudE9kZEV2ZW4mJihlLmFkZEF0dHJpYnV0ZShcImRpZmZlcmVudE9kZEV2ZW5cIixcIjFcIikscj0hMCksdC5vZGRIZWFkZXImJlwic3RyaW5nXCI9PXR5cGVvZiB0Lm9kZEhlYWRlciYmKGUubGVhZk5vZGUoXCJvZGRIZWFkZXJcIixudWxsLHQub2RkSGVhZGVyKSxyPSEwKSx0Lm9kZEZvb3RlciYmXCJzdHJpbmdcIj09dHlwZW9mIHQub2RkRm9vdGVyJiYoZS5sZWFmTm9kZShcIm9kZEZvb3RlclwiLG51bGwsdC5vZGRGb290ZXIpLHI9ITApLHQuZXZlbkhlYWRlciYmXCJzdHJpbmdcIj09dHlwZW9mIHQuZXZlbkhlYWRlciYmKGUubGVhZk5vZGUoXCJldmVuSGVhZGVyXCIsbnVsbCx0LmV2ZW5IZWFkZXIpLHI9ITApLHQuZXZlbkZvb3RlciYmXCJzdHJpbmdcIj09dHlwZW9mIHQuZXZlbkZvb3RlciYmKGUubGVhZk5vZGUoXCJldmVuRm9vdGVyXCIsbnVsbCx0LmV2ZW5Gb290ZXIpLHI9ITApLHQuZmlyc3RIZWFkZXImJlwic3RyaW5nXCI9PXR5cGVvZiB0LmZpcnN0SGVhZGVyJiYoZS5sZWFmTm9kZShcImZpcnN0SGVhZGVyXCIsbnVsbCx0LmZpcnN0SGVhZGVyKSxyPSEwKSx0LmZpcnN0Rm9vdGVyJiZcInN0cmluZ1wiPT10eXBlb2YgdC5maXJzdEZvb3RlciYmKGUubGVhZk5vZGUoXCJmaXJzdEZvb3RlclwiLG51bGwsdC5maXJzdEZvb3Rlcikscj0hMCkscj8oZS5jbG9zZU5vZGUoKSxlLmNvbW1pdCgpKTplLnJvbGxiYWNrKCl9fXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlXCJoZWFkZXJGb290ZXJcIjpyZXR1cm4gdGhpcy5tb2RlbD17fSxlLmF0dHJpYnV0ZXMuZGlmZmVyZW50Rmlyc3QmJih0aGlzLm1vZGVsLmRpZmZlcmVudEZpcnN0PTE9PT1wYXJzZUludChlLmF0dHJpYnV0ZXMuZGlmZmVyZW50Rmlyc3QsMCkpLGUuYXR0cmlidXRlcy5kaWZmZXJlbnRPZGRFdmVuJiYodGhpcy5tb2RlbC5kaWZmZXJlbnRPZGRFdmVuPTE9PT1wYXJzZUludChlLmF0dHJpYnV0ZXMuZGlmZmVyZW50T2RkRXZlbiwwKSksITA7Y2FzZVwib2RkSGVhZGVyXCI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9XCJvZGRIZWFkZXJcIiwhMDtjYXNlXCJvZGRGb290ZXJcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT1cIm9kZEZvb3RlclwiLCEwO2Nhc2VcImV2ZW5IZWFkZXJcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT1cImV2ZW5IZWFkZXJcIiwhMDtjYXNlXCJldmVuRm9vdGVyXCI6cmV0dXJuIHRoaXMuY3VycmVudE5vZGU9XCJldmVuRm9vdGVyXCIsITA7Y2FzZVwiZmlyc3RIZWFkZXJcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT1cImZpcnN0SGVhZGVyXCIsITA7Y2FzZVwiZmlyc3RGb290ZXJcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT1cImZpcnN0Rm9vdGVyXCIsITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe3N3aXRjaCh0aGlzLmN1cnJlbnROb2RlKXtjYXNlXCJvZGRIZWFkZXJcIjp0aGlzLm1vZGVsLm9kZEhlYWRlcj1lO2JyZWFrO2Nhc2VcIm9kZEZvb3RlclwiOnRoaXMubW9kZWwub2RkRm9vdGVyPWU7YnJlYWs7Y2FzZVwiZXZlbkhlYWRlclwiOnRoaXMubW9kZWwuZXZlbkhlYWRlcj1lO2JyZWFrO2Nhc2VcImV2ZW5Gb290ZXJcIjp0aGlzLm1vZGVsLmV2ZW5Gb290ZXI9ZTticmVhaztjYXNlXCJmaXJzdEhlYWRlclwiOnRoaXMubW9kZWwuZmlyc3RIZWFkZXI9ZTticmVhaztjYXNlXCJmaXJzdEZvb3RlclwiOnRoaXMubW9kZWwuZmlyc3RGb290ZXI9ZX19cGFyc2VDbG9zZSgpe3N3aXRjaCh0aGlzLmN1cnJlbnROb2RlKXtjYXNlXCJvZGRIZWFkZXJcIjpjYXNlXCJvZGRGb290ZXJcIjpjYXNlXCJldmVuSGVhZGVyXCI6Y2FzZVwiZXZlbkZvb3RlclwiOmNhc2VcImZpcnN0SGVhZGVyXCI6Y2FzZVwiZmlyc3RGb290ZXJcIjpyZXR1cm4gdGhpcy5jdXJyZW50Tm9kZT12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4hMX19fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sOTg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiaHlwZXJsaW5rXCJ9cmVuZGVyKGUsdCl7dGhpcy5pc0ludGVybmFsTGluayh0KT9lLmxlYWZOb2RlKFwiaHlwZXJsaW5rXCIse3JlZjp0LmFkZHJlc3MsXCJyOmlkXCI6dC5ySWQsdG9vbHRpcDp0LnRvb2x0aXAsbG9jYXRpb246dC50YXJnZXR9KTplLmxlYWZOb2RlKFwiaHlwZXJsaW5rXCIse3JlZjp0LmFkZHJlc3MsXCJyOmlkXCI6dC5ySWQsdG9vbHRpcDp0LnRvb2x0aXB9KX1wYXJzZU9wZW4oZSl7cmV0dXJuXCJoeXBlcmxpbmtcIj09PWUubmFtZSYmKHRoaXMubW9kZWw9e2FkZHJlc3M6ZS5hdHRyaWJ1dGVzLnJlZixySWQ6ZS5hdHRyaWJ1dGVzW1wicjppZFwiXSx0b29sdGlwOmUuYXR0cmlidXRlcy50b29sdGlwfSxlLmF0dHJpYnV0ZXMubG9jYXRpb24mJih0aGlzLm1vZGVsLnRhcmdldD1lLmF0dHJpYnV0ZXMubG9jYXRpb24pLCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfWlzSW50ZXJuYWxMaW5rKGUpe3JldHVybiBlLnRhcmdldCYmL15bXiFdKyFbYS16QS1aXStbXFxkXSskLy50ZXN0KGUudGFyZ2V0KX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSw5OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJtZXJnZUNlbGxcIn1yZW5kZXIoZSx0KXtlLmxlYWZOb2RlKFwibWVyZ2VDZWxsXCIse3JlZjp0fSl9cGFyc2VPcGVuKGUpe3JldHVyblwibWVyZ2VDZWxsXCI9PT1lLm5hbWUmJih0aGlzLm1vZGVsPWUuYXR0cmlidXRlcy5yZWYsITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTAwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxpPWUoXCIuLi8uLi8uLi9kb2MvcmFuZ2VcIikscz1lKFwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlXCIpLG89ZShcIi4uLy4uLy4uL2RvYy9lbnVtc1wiKTt0LmV4cG9ydHM9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLm1lcmdlcz17fX1hZGQoZSl7aWYodGhpcy5tZXJnZXNbZS5tYXN0ZXJdKXRoaXMubWVyZ2VzW2UubWFzdGVyXS5leHBhbmRUb0FkZHJlc3MoZS5hZGRyZXNzKTtlbHNle2NvbnN0IHQ9YCR7ZS5tYXN0ZXJ9OiR7ZS5hZGRyZXNzfWA7dGhpcy5tZXJnZXNbZS5tYXN0ZXJdPW5ldyBpKHQpfX1nZXQgbWVyZ2VDZWxscygpe3JldHVybiBuLm1hcCh0aGlzLm1lcmdlcyxlPT5lLnJhbmdlKX1yZWNvbmNpbGUoZSx0KXtuLmVhY2goZSxlPT57Y29uc3Qgcj1zLmRlY29kZShlKTtmb3IobGV0IGU9ci50b3A7ZTw9ci5ib3R0b207ZSsrKXtjb25zdCBuPXRbZS0xXTtmb3IobGV0IHQ9ci5sZWZ0O3Q8PXIucmlnaHQ7dCsrKXtjb25zdCBpPW4uY2VsbHNbdC0xXTtpP2kudHlwZT09PW8uVmFsdWVUeXBlLk1lcmdlJiYoaS5tYXN0ZXI9ci50bCk6bi5jZWxsc1t0XT17dHlwZTpvLlZhbHVlVHlwZS5OdWxsLGFkZHJlc3M6cy5lbmNvZGVBZGRyZXNzKGUsdCl9fX19KX1nZXRNYXN0ZXJBZGRyZXNzKGUpe2NvbnN0IHQ9dGhpcy5oYXNoW2VdO3JldHVybiB0JiZ0LnRsfX19LHtcIi4uLy4uLy4uL2RvYy9lbnVtc1wiOjcsXCIuLi8uLi8uLi9kb2MvcmFuZ2VcIjoxMCxcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiOjI2fV0sMTAxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKSxpPWU9PnZvaWQgMCE9PWU7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJvdXRsaW5lUHJcIn1yZW5kZXIoZSx0KXtyZXR1cm4hKCF0fHwhaSh0LnN1bW1hcnlCZWxvdykmJiFpKHQuc3VtbWFyeVJpZ2h0KSkmJihlLmxlYWZOb2RlKHRoaXMudGFnLHtzdW1tYXJ5QmVsb3c6aSh0LnN1bW1hcnlCZWxvdyk/TnVtYmVyKHQuc3VtbWFyeUJlbG93KTp2b2lkIDAsc3VtbWFyeVJpZ2h0OmkodC5zdW1tYXJ5UmlnaHQpP051bWJlcih0LnN1bW1hcnlSaWdodCk6dm9pZCAwfSksITApfXBhcnNlT3BlbihlKXtyZXR1cm4gZS5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXtzdW1tYXJ5QmVsb3c6aShlLmF0dHJpYnV0ZXMuc3VtbWFyeUJlbG93KT9Cb29sZWFuKE51bWJlcihlLmF0dHJpYnV0ZXMuc3VtbWFyeUJlbG93KSk6dm9pZCAwLHN1bW1hcnlSaWdodDppKGUuYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpP0Jvb2xlYW4oTnVtYmVyKGUuYXR0cmlidXRlcy5zdW1tYXJ5UmlnaHQpKTp2b2lkIDB9LCEwKX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDEwMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJicmtcIn1yZW5kZXIoZSx0KXtlLmxlYWZOb2RlKFwiYnJrXCIsdCl9cGFyc2VPcGVuKGUpe3JldHVyblwiYnJrXCI9PT1lLm5hbWUmJih0aGlzLm1vZGVsPWUuYXR0cmlidXRlcy5yZWYsITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTAzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIGl7Z2V0IHRhZygpe3JldHVyblwicGFnZU1hcmdpbnNcIn1yZW5kZXIoZSx0KXtpZih0KXtjb25zdCByPXtsZWZ0OnQubGVmdCxyaWdodDp0LnJpZ2h0LHRvcDp0LnRvcCxib3R0b206dC5ib3R0b20saGVhZGVyOnQuaGVhZGVyLGZvb3Rlcjp0LmZvb3Rlcn07bi5zb21lKHIsZT0+dm9pZCAwIT09ZSkmJmUubGVhZk5vZGUodGhpcy50YWcscil9fXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtsZWZ0OnBhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmxlZnR8fC43KSxyaWdodDpwYXJzZUZsb2F0KGUuYXR0cmlidXRlcy5yaWdodHx8LjcpLHRvcDpwYXJzZUZsb2F0KGUuYXR0cmlidXRlcy50b3B8fC43NSksYm90dG9tOnBhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmJvdHRvbXx8Ljc1KSxoZWFkZXI6cGFyc2VGbG9hdChlLmF0dHJpYnV0ZXMuaGVhZGVyfHwuMyksZm9vdGVyOnBhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmZvb3Rlcnx8LjMpfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDEwNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntnZXQgdGFnKCl7cmV0dXJuXCJwYWdlU2V0VXBQclwifXJlbmRlcihlLHQpe3JldHVybiEoIXR8fCF0LmZpdFRvUGFnZSkmJihlLmxlYWZOb2RlKHRoaXMudGFnLHtmaXRUb1BhZ2U6dC5maXRUb1BhZ2U/XCIxXCI6dm9pZCAwfSksITApfXBhcnNlT3BlbihlKXtyZXR1cm4gZS5uYW1lPT09dGhpcy50YWcmJih0aGlzLm1vZGVsPXtmaXRUb1BhZ2U6XCIxXCI9PT1lLmF0dHJpYnV0ZXMuZml0VG9QYWdlfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4uL2Jhc2UteGZvcm1cIik7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT9cIjFcIjp2b2lkIDB9ZnVuY3Rpb24gbyhlKXtzd2l0Y2goZSl7Y2FzZVwib3ZlclRoZW5Eb3duXCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIGEoZSl7c3dpdGNoKGUpe2Nhc2VcImF0RW5kXCI6Y2FzZVwiYXNEaXNwbHllZFwiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJufX1mdW5jdGlvbiBsKGUpe3N3aXRjaChlKXtjYXNlXCJkYXNoXCI6Y2FzZVwiYmxhbmtcIjpjYXNlXCJOQVwiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJufX10LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2dldCB0YWcoKXtyZXR1cm5cInBhZ2VTZXR1cFwifXJlbmRlcihlLHQpe2lmKHQpe2NvbnN0IHI9e3BhcGVyU2l6ZTp0LnBhcGVyU2l6ZSxvcmllbnRhdGlvbjp0Lm9yaWVudGF0aW9uLGhvcml6b250YWxEcGk6dC5ob3Jpem9udGFsRHBpLHZlcnRpY2FsRHBpOnQudmVydGljYWxEcGkscGFnZU9yZGVyOm8odC5wYWdlT3JkZXIpLGJsYWNrQW5kV2hpdGU6cyh0LmJsYWNrQW5kV2hpdGUpLGRyYWZ0OnModC5kcmFmdCksY2VsbENvbW1lbnRzOmEodC5jZWxsQ29tbWVudHMpLGVycm9yczpsKHQuZXJyb3JzKSxzY2FsZTp0LnNjYWxlLGZpdFRvV2lkdGg6dC5maXRUb1dpZHRoLGZpdFRvSGVpZ2h0OnQuZml0VG9IZWlnaHQsZmlyc3RQYWdlTnVtYmVyOnQuZmlyc3RQYWdlTnVtYmVyLHVzZUZpcnN0UGFnZU51bWJlcjpzKHQuZmlyc3RQYWdlTnVtYmVyKSx1c2VQcmludGVyRGVmYXVsdHM6cyh0LnVzZVByaW50ZXJEZWZhdWx0cyksY29waWVzOnQuY29waWVzfTtuLnNvbWUocixlPT52b2lkIDAhPT1lKSYmZS5sZWFmTm9kZSh0aGlzLnRhZyxyKX19cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e3BhcGVyU2l6ZToodD1lLmF0dHJpYnV0ZXMucGFwZXJTaXplLHZvaWQgMCE9PXQ/cGFyc2VJbnQodCwxMCk6dm9pZCAwKSxvcmllbnRhdGlvbjplLmF0dHJpYnV0ZXMub3JpZW50YXRpb258fFwicG9ydHJhaXRcIixob3Jpem9udGFsRHBpOnBhcnNlSW50KGUuYXR0cmlidXRlcy5ob3Jpem9udGFsRHBpfHxcIjQyOTQ5NjcyOTVcIiwxMCksdmVydGljYWxEcGk6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnZlcnRpY2FsRHBpfHxcIjQyOTQ5NjcyOTVcIiwxMCkscGFnZU9yZGVyOmUuYXR0cmlidXRlcy5wYWdlT3JkZXJ8fFwiZG93blRoZW5PdmVyXCIsYmxhY2tBbmRXaGl0ZTpcIjFcIj09PWUuYXR0cmlidXRlcy5ibGFja0FuZFdoaXRlLGRyYWZ0OlwiMVwiPT09ZS5hdHRyaWJ1dGVzLmRyYWZ0LGNlbGxDb21tZW50czplLmF0dHJpYnV0ZXMuY2VsbENvbW1lbnRzfHxcIk5vbmVcIixlcnJvcnM6ZS5hdHRyaWJ1dGVzLmVycm9yc3x8XCJkaXNwbGF5ZWRcIixzY2FsZTpwYXJzZUludChlLmF0dHJpYnV0ZXMuc2NhbGV8fFwiMTAwXCIsMTApLGZpdFRvV2lkdGg6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmZpdFRvV2lkdGh8fFwiMVwiLDEwKSxmaXRUb0hlaWdodDpwYXJzZUludChlLmF0dHJpYnV0ZXMuZml0VG9IZWlnaHR8fFwiMVwiLDEwKSxmaXJzdFBhZ2VOdW1iZXI6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmZpcnN0UGFnZU51bWJlcnx8XCIxXCIsMTApLHVzZUZpcnN0UGFnZU51bWJlcjpcIjFcIj09PWUuYXR0cmlidXRlcy51c2VGaXJzdFBhZ2VOdW1iZXIsdXNlUHJpbnRlckRlZmF1bHRzOlwiMVwiPT09ZS5hdHRyaWJ1dGVzLnVzZVByaW50ZXJEZWZhdWx0cyxjb3BpZXM6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmNvcGllc3x8XCIxXCIsMTApfSwhMDtkZWZhdWx0OnJldHVybiExfXZhciB0fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiOjI2LFwiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTA2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInBpY3R1cmVcIn1yZW5kZXIoZSx0KXt0JiZlLmxlYWZOb2RlKHRoaXMudGFnLHtcInI6aWRcIjp0LnJJZH0pfXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtySWQ6ZS5hdHRyaWJ1dGVzW1wicjppZFwiXX0sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4uL2Jhc2UteGZvcm1cIik7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT9cIjFcIjp2b2lkIDB9dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgaXtnZXQgdGFnKCl7cmV0dXJuXCJwcmludE9wdGlvbnNcIn1yZW5kZXIoZSx0KXtpZih0KXtjb25zdCByPXtoZWFkaW5nczpzKHQuc2hvd1Jvd0NvbEhlYWRlcnMpLGdyaWRMaW5lczpzKHQuc2hvd0dyaWRMaW5lcyksaG9yaXpvbnRhbENlbnRlcmVkOnModC5ob3Jpem9udGFsQ2VudGVyZWQpLHZlcnRpY2FsQ2VudGVyZWQ6cyh0LnZlcnRpY2FsQ2VudGVyZWQpfTtuLnNvbWUocixlPT52b2lkIDAhPT1lKSYmZS5sZWFmTm9kZSh0aGlzLnRhZyxyKX19cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e3Nob3dSb3dDb2xIZWFkZXJzOlwiMVwiPT09ZS5hdHRyaWJ1dGVzLmhlYWRpbmdzLHNob3dHcmlkTGluZXM6XCIxXCI9PT1lLmF0dHJpYnV0ZXMuZ3JpZExpbmVzLGhvcml6b250YWxDZW50ZXJlZDpcIjFcIj09PWUuYXR0cmlidXRlcy5ob3Jpem9udGFsQ2VudGVyZWQsdmVydGljYWxDZW50ZXJlZDpcIjFcIj09PWUuYXR0cmlidXRlcy52ZXJ0aWNhbENlbnRlcmVkfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDEwODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4vcGFnZS1icmVha3MteGZvcm1cIiksaT1lKFwiLi4vbGlzdC14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIoe3RhZzpcInJvd0JyZWFrc1wiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IG59KX1yZW5kZXIoZSx0KXtpZih0JiZ0Lmxlbmd0aCl7ZS5vcGVuTm9kZSh0aGlzLnRhZyx0aGlzLiQpLHRoaXMuY291bnQmJihlLmFkZEF0dHJpYnV0ZSh0aGlzLiRjb3VudCx0Lmxlbmd0aCksZS5hZGRBdHRyaWJ1dGUoXCJtYW51YWxCcmVha0NvdW50XCIsdC5sZW5ndGgpKTtjb25zdHtjaGlsZFhmb3JtOnJ9PXRoaXM7dC5mb3JFYWNoKHQ9PntyLnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKX1lbHNlIHRoaXMuZW1wdHkmJmUubGVhZk5vZGUodGhpcy50YWcpfX19LHtcIi4uL2xpc3QteGZvcm1cIjo3MSxcIi4vcGFnZS1icmVha3MteGZvcm1cIjoxMDJ9XSwxMDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCIpLHM9ZShcIi4vY2VsbC14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5tYXhJdGVtcz1lJiZlLm1heEl0ZW1zLHRoaXMubWFwPXtjOm5ldyBzfX1nZXQgdGFnKCl7cmV0dXJuXCJyb3dcIn1wcmVwYXJlKGUsdCl7Y29uc3Qgcj10LnN0eWxlcy5hZGRTdHlsZU1vZGVsKGUuc3R5bGUpO3ImJihlLnN0eWxlSWQ9cik7Y29uc3Qgbj10aGlzLm1hcC5jO2UuY2VsbHMuZm9yRWFjaChlPT57bi5wcmVwYXJlKGUsdCl9KX1yZW5kZXIoZSx0LHIpe2Uub3Blbk5vZGUoXCJyb3dcIiksZS5hZGRBdHRyaWJ1dGUoXCJyXCIsdC5udW1iZXIpLHQuaGVpZ2h0JiYoZS5hZGRBdHRyaWJ1dGUoXCJodFwiLHQuaGVpZ2h0KSxlLmFkZEF0dHJpYnV0ZShcImN1c3RvbUhlaWdodFwiLFwiMVwiKSksdC5oaWRkZW4mJmUuYWRkQXR0cmlidXRlKFwiaGlkZGVuXCIsXCIxXCIpLHQubWluPjAmJnQubWF4PjAmJnQubWluPD10Lm1heCYmZS5hZGRBdHRyaWJ1dGUoXCJzcGFuc1wiLGAke3QubWlufToke3QubWF4fWApLHQuc3R5bGVJZCYmKGUuYWRkQXR0cmlidXRlKFwic1wiLHQuc3R5bGVJZCksZS5hZGRBdHRyaWJ1dGUoXCJjdXN0b21Gb3JtYXRcIixcIjFcIikpLGUuYWRkQXR0cmlidXRlKFwieDE0YWM6ZHlEZXNjZW50XCIsXCIwLjI1XCIpLHQub3V0bGluZUxldmVsJiZlLmFkZEF0dHJpYnV0ZShcIm91dGxpbmVMZXZlbFwiLHQub3V0bGluZUxldmVsKSx0LmNvbGxhcHNlZCYmZS5hZGRBdHRyaWJ1dGUoXCJjb2xsYXBzZWRcIixcIjFcIik7Y29uc3Qgbj10aGlzLm1hcC5jO3QuY2VsbHMuZm9yRWFjaCh0PT57bi5yZW5kZXIoZSx0LHIpfSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtpZihcInJvd1wiPT09ZS5uYW1lKXt0aGlzLm51bVJvd3NTZWVuKz0xO2NvbnN0IHQ9ZS5hdHRyaWJ1dGVzLnNwYW5zP2UuYXR0cmlidXRlcy5zcGFucy5zcGxpdChcIjpcIikubWFwKGU9PnBhcnNlSW50KGUsMTApKTpbdm9pZCAwLHZvaWQgMF0scj10aGlzLm1vZGVsPXtudW1iZXI6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnIsMTApLG1pbjp0WzBdLG1heDp0WzFdLGNlbGxzOltdfTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnMmJihyLnN0eWxlSWQ9cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnMsMTApKSxpLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuaGlkZGVuKSYmKHIuaGlkZGVuPSEwKSxpLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuYmVzdEZpdCkmJihyLmJlc3RGaXQ9ITApLGUuYXR0cmlidXRlcy5odCYmKHIuaGVpZ2h0PXBhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmh0KSksZS5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbCYmKHIub3V0bGluZUxldmVsPXBhcnNlSW50KGUuYXR0cmlidXRlcy5vdXRsaW5lTGV2ZWwsMTApKSxpLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuY29sbGFwc2VkKSYmKHIuY29sbGFwc2VkPSEwKSwhMH1yZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXtpZighdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKSl7aWYodGhpcy5tb2RlbC5jZWxscy5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLm1heEl0ZW1zJiZ0aGlzLm1vZGVsLmNlbGxzLmxlbmd0aD50aGlzLm1heEl0ZW1zKXRocm93IG5ldyBFcnJvcihgTWF4IGNvbHVtbiBjb3VudCAoJHt0aGlzLm1heEl0ZW1zfSkgZXhjZWVkZWRgKTt0aGlzLnBhcnNlcj12b2lkIDB9cmV0dXJuITB9cmV0dXJuITF9cmVjb25jaWxlKGUsdCl7ZS5zdHlsZT1lLnN0eWxlSWQ/dC5zdHlsZXMuZ2V0U3R5bGVNb2RlbChlLnN0eWxlSWQpOnt9LHZvaWQgMCE9PWUuc3R5bGVJZCYmKGUuc3R5bGVJZD12b2lkIDApO2NvbnN0IHI9dGhpcy5tYXAuYztlLmNlbGxzLmZvckVhY2goZT0+e3IucmVjb25jaWxlKGUsdCl9KX19fSx7XCIuLi8uLi8uLi91dGlscy91dGlsc1wiOjI3LFwiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9jZWxsLXhmb3JtXCI6NzN9XSwxMTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCIpLGk9ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgaXtnZXQgdGFnKCl7cmV0dXJuXCJzaGVldEZvcm1hdFByXCJ9cmVuZGVyKGUsdCl7aWYodCl7Y29uc3Qgcj17ZGVmYXVsdFJvd0hlaWdodDp0LmRlZmF1bHRSb3dIZWlnaHQsb3V0bGluZUxldmVsUm93OnQub3V0bGluZUxldmVsUm93LG91dGxpbmVMZXZlbENvbDp0Lm91dGxpbmVMZXZlbENvbCxcIngxNGFjOmR5RGVzY2VudFwiOnQuZHlEZXNjZW50fTt0LmRlZmF1bHRDb2xXaWR0aCYmKHIuZGVmYXVsdENvbFdpZHRoPXQuZGVmYXVsdENvbFdpZHRoKSx0LmRlZmF1bHRSb3dIZWlnaHQmJjE1PT09dC5kZWZhdWx0Um93SGVpZ2h0fHwoci5jdXN0b21IZWlnaHQ9XCIxXCIpLG4uc29tZShyLGU9PnZvaWQgMCE9PWUpJiZlLmxlYWZOb2RlKFwic2hlZXRGb3JtYXRQclwiLHIpfX1wYXJzZU9wZW4oZSl7cmV0dXJuXCJzaGVldEZvcm1hdFByXCI9PT1lLm5hbWUmJih0aGlzLm1vZGVsPXtkZWZhdWx0Um93SGVpZ2h0OnBhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmRlZmF1bHRSb3dIZWlnaHR8fFwiMFwiKSxkeURlc2NlbnQ6cGFyc2VGbG9hdChlLmF0dHJpYnV0ZXNbXCJ4MTRhYzpkeURlc2NlbnRcIl18fFwiMFwiKSxvdXRsaW5lTGV2ZWxSb3c6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLm91dGxpbmVMZXZlbFJvd3x8XCIwXCIsMTApLG91dGxpbmVMZXZlbENvbDpwYXJzZUludChlLmF0dHJpYnV0ZXMub3V0bGluZUxldmVsQ29sfHxcIjBcIiwxMCl9LGUuYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgmJih0aGlzLm1vZGVsLmRlZmF1bHRDb2xXaWR0aD1wYXJzZUZsb2F0KGUuYXR0cmlidXRlcy5kZWZhdWx0Q29sV2lkdGgpKSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi8uLi8uLi91dGlscy91bmRlci1kYXNoXCI6MjYsXCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4uL3N0eWxlL2NvbG9yLXhmb3JtXCIpLHM9ZShcIi4vcGFnZS1zZXR1cC1wcm9wZXJ0aWVzLXhmb3JtXCIpLG89ZShcIi4vb3V0bGluZS1wcm9wZXJ0aWVzLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXt0YWJDb2xvcjpuZXcgaShcInRhYkNvbG9yXCIpLHBhZ2VTZXRVcFByOm5ldyBzLG91dGxpbmVQcjpuZXcgb319Z2V0IHRhZygpe3JldHVyblwic2hlZXRQclwifXJlbmRlcihlLHQpe2lmKHQpe2UuYWRkUm9sbGJhY2soKSxlLm9wZW5Ob2RlKFwic2hlZXRQclwiKTtsZXQgcj0hMTtyPXRoaXMubWFwLnRhYkNvbG9yLnJlbmRlcihlLHQudGFiQ29sb3IpfHxyLHI9dGhpcy5tYXAucGFnZVNldFVwUHIucmVuZGVyKGUsdC5wYWdlU2V0dXApfHxyLHI9dGhpcy5tYXAub3V0bGluZVByLnJlbmRlcihlLHQub3V0bGluZVByb3BlcnRpZXMpfHxyLHI/KGUuY2xvc2VOb2RlKCksZS5jb21taXQoKSk6ZS5yb2xsYmFjaygpfX1wYXJzZU9wZW4oZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITApOmUubmFtZT09PXRoaXMudGFnPyh0aGlzLnJlc2V0KCksITApOiEhdGhpcy5tYXBbZS5uYW1lXSYmKHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKX1wYXJzZVRleHQoZSl7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlVGV4dChlKSwhMCl9cGFyc2VDbG9zZShlKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKToodGhpcy5tYXAudGFiQ29sb3IubW9kZWx8fHRoaXMubWFwLnBhZ2VTZXRVcFByLm1vZGVsfHx0aGlzLm1hcC5vdXRsaW5lUHIubW9kZWw/KHRoaXMubW9kZWw9e30sdGhpcy5tYXAudGFiQ29sb3IubW9kZWwmJih0aGlzLm1vZGVsLnRhYkNvbG9yPXRoaXMubWFwLnRhYkNvbG9yLm1vZGVsKSx0aGlzLm1hcC5wYWdlU2V0VXBQci5tb2RlbCYmKHRoaXMubW9kZWwucGFnZVNldHVwPXRoaXMubWFwLnBhZ2VTZXRVcFByLm1vZGVsKSx0aGlzLm1hcC5vdXRsaW5lUHIubW9kZWwmJih0aGlzLm1vZGVsLm91dGxpbmVQcm9wZXJ0aWVzPXRoaXMubWFwLm91dGxpbmVQci5tb2RlbCkpOnRoaXMubW9kZWw9bnVsbCwhMSl9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vc3R5bGUvY29sb3IteGZvcm1cIjoxMjgsXCIuL291dGxpbmUtcHJvcGVydGllcy14Zm9ybVwiOjEwMSxcIi4vcGFnZS1zZXR1cC1wcm9wZXJ0aWVzLXhmb3JtXCI6MTA0fV0sMTEyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpO2Z1bmN0aW9uIHMoZSx0KXtyZXR1cm4gZT90OnZvaWQgMH1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIGU9PT10fHx2b2lkIDB9dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgaXtnZXQgdGFnKCl7cmV0dXJuXCJzaGVldFByb3RlY3Rpb25cIn1yZW5kZXIoZSx0KXtpZih0KXtjb25zdCByPXtzaGVldDpzKHQuc2hlZXQsXCIxXCIpLHNlbGVjdExvY2tlZENlbGxzOiExPT09dC5zZWxlY3RMb2NrZWRDZWxscz9cIjFcIjp2b2lkIDAsc2VsZWN0VW5sb2NrZWRDZWxsczohMT09PXQuc2VsZWN0VW5sb2NrZWRDZWxscz9cIjFcIjp2b2lkIDAsZm9ybWF0Q2VsbHM6cyh0LmZvcm1hdENlbGxzLFwiMFwiKSxmb3JtYXRDb2x1bW5zOnModC5mb3JtYXRDb2x1bW5zLFwiMFwiKSxmb3JtYXRSb3dzOnModC5mb3JtYXRSb3dzLFwiMFwiKSxpbnNlcnRDb2x1bW5zOnModC5pbnNlcnRDb2x1bW5zLFwiMFwiKSxpbnNlcnRSb3dzOnModC5pbnNlcnRSb3dzLFwiMFwiKSxpbnNlcnRIeXBlcmxpbmtzOnModC5pbnNlcnRIeXBlcmxpbmtzLFwiMFwiKSxkZWxldGVDb2x1bW5zOnModC5kZWxldGVDb2x1bW5zLFwiMFwiKSxkZWxldGVSb3dzOnModC5kZWxldGVSb3dzLFwiMFwiKSxzb3J0OnModC5zb3J0LFwiMFwiKSxhdXRvRmlsdGVyOnModC5hdXRvRmlsdGVyLFwiMFwiKSxwaXZvdFRhYmxlczpzKHQucGl2b3RUYWJsZXMsXCIwXCIpfTt0LnNoZWV0JiYoci5hbGdvcml0aG1OYW1lPXQuYWxnb3JpdGhtTmFtZSxyLmhhc2hWYWx1ZT10Lmhhc2hWYWx1ZSxyLnNhbHRWYWx1ZT10LnNhbHRWYWx1ZSxyLnNwaW5Db3VudD10LnNwaW5Db3VudCxyLm9iamVjdHM9cyghMT09PXQub2JqZWN0cyxcIjFcIiksci5zY2VuYXJpb3M9cyghMT09PXQuc2NlbmFyaW9zLFwiMVwiKSksbi5zb21lKHIsZT0+dm9pZCAwIT09ZSkmJmUubGVhZk5vZGUodGhpcy50YWcscil9fXBhcnNlT3BlbihlKXtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXtzaGVldDpvKGUuYXR0cmlidXRlcy5zaGVldCxcIjFcIiksb2JqZWN0czpcIjFcIiE9PWUuYXR0cmlidXRlcy5vYmplY3RzJiZ2b2lkIDAsc2NlbmFyaW9zOlwiMVwiIT09ZS5hdHRyaWJ1dGVzLnNjZW5hcmlvcyYmdm9pZCAwLHNlbGVjdExvY2tlZENlbGxzOlwiMVwiIT09ZS5hdHRyaWJ1dGVzLnNlbGVjdExvY2tlZENlbGxzJiZ2b2lkIDAsc2VsZWN0VW5sb2NrZWRDZWxsczpcIjFcIiE9PWUuYXR0cmlidXRlcy5zZWxlY3RVbmxvY2tlZENlbGxzJiZ2b2lkIDAsZm9ybWF0Q2VsbHM6byhlLmF0dHJpYnV0ZXMuZm9ybWF0Q2VsbHMsXCIwXCIpLGZvcm1hdENvbHVtbnM6byhlLmF0dHJpYnV0ZXMuZm9ybWF0Q29sdW1ucyxcIjBcIiksZm9ybWF0Um93czpvKGUuYXR0cmlidXRlcy5mb3JtYXRSb3dzLFwiMFwiKSxpbnNlcnRDb2x1bW5zOm8oZS5hdHRyaWJ1dGVzLmluc2VydENvbHVtbnMsXCIwXCIpLGluc2VydFJvd3M6byhlLmF0dHJpYnV0ZXMuaW5zZXJ0Um93cyxcIjBcIiksaW5zZXJ0SHlwZXJsaW5rczpvKGUuYXR0cmlidXRlcy5pbnNlcnRIeXBlcmxpbmtzLFwiMFwiKSxkZWxldGVDb2x1bW5zOm8oZS5hdHRyaWJ1dGVzLmRlbGV0ZUNvbHVtbnMsXCIwXCIpLGRlbGV0ZVJvd3M6byhlLmF0dHJpYnV0ZXMuZGVsZXRlUm93cyxcIjBcIiksc29ydDpvKGUuYXR0cmlidXRlcy5zb3J0LFwiMFwiKSxhdXRvRmlsdGVyOm8oZS5hdHRyaWJ1dGVzLmF1dG9GaWx0ZXIsXCIwXCIpLHBpdm90VGFibGVzOm8oZS5hdHRyaWJ1dGVzLnBpdm90VGFibGVzLFwiMFwiKX0sZS5hdHRyaWJ1dGVzLmFsZ29yaXRobU5hbWUmJih0aGlzLm1vZGVsLmFsZ29yaXRobU5hbWU9ZS5hdHRyaWJ1dGVzLmFsZ29yaXRobU5hbWUsdGhpcy5tb2RlbC5oYXNoVmFsdWU9ZS5hdHRyaWJ1dGVzLmhhc2hWYWx1ZSx0aGlzLm1vZGVsLnNhbHRWYWx1ZT1lLmF0dHJpYnV0ZXMuc2FsdFZhbHVlLHRoaXMubW9kZWwuc3BpbkNvdW50PXBhcnNlSW50KGUuYXR0cmlidXRlcy5zcGluQ291bnQsMTApKSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDExMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpLHM9e2Zyb3plbjpcImZyb3plblwiLGZyb3plblNwbGl0OlwiZnJvemVuXCIsc3BsaXQ6XCJzcGxpdFwifTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2dldCB0YWcoKXtyZXR1cm5cInNoZWV0Vmlld1wifXByZXBhcmUoZSl7c3dpdGNoKGUuc3RhdGUpe2Nhc2VcImZyb3plblwiOmNhc2VcInNwbGl0XCI6YnJlYWs7ZGVmYXVsdDplLnN0YXRlPVwibm9ybWFsXCJ9fXJlbmRlcihlLHQpe2Uub3Blbk5vZGUoXCJzaGVldFZpZXdcIix7d29ya2Jvb2tWaWV3SWQ6dC53b3JrYm9va1ZpZXdJZHx8MH0pO2NvbnN0IHI9ZnVuY3Rpb24odCxyLG4pe24mJmUuYWRkQXR0cmlidXRlKHQscil9O2xldCBpLHMsbyxhO3N3aXRjaChyKFwicmlnaHRUb0xlZnRcIixcIjFcIiwhMD09PXQucmlnaHRUb0xlZnQpLHIoXCJ0YWJTZWxlY3RlZFwiLFwiMVwiLHQudGFiU2VsZWN0ZWQpLHIoXCJzaG93UnVsZXJcIixcIjBcIiwhMT09PXQuc2hvd1J1bGVyKSxyKFwic2hvd1Jvd0NvbEhlYWRlcnNcIixcIjBcIiwhMT09PXQuc2hvd1Jvd0NvbEhlYWRlcnMpLHIoXCJzaG93R3JpZExpbmVzXCIsXCIwXCIsITE9PT10LnNob3dHcmlkTGluZXMpLHIoXCJ6b29tU2NhbGVcIix0Lnpvb21TY2FsZSx0Lnpvb21TY2FsZSkscihcInpvb21TY2FsZU5vcm1hbFwiLHQuem9vbVNjYWxlTm9ybWFsLHQuem9vbVNjYWxlTm9ybWFsKSxyKFwidmlld1wiLHQuc3R5bGUsdC5zdHlsZSksdC5zdGF0ZSl7Y2FzZVwiZnJvemVuXCI6cz10LnhTcGxpdHx8MCxvPXQueVNwbGl0fHwwLGk9dC50b3BMZWZ0Q2VsbHx8bi5nZXRBZGRyZXNzKG8rMSxzKzEpLmFkZHJlc3MsYT0odC54U3BsaXQmJnQueVNwbGl0P1wiYm90dG9tUmlnaHRcIjp0LnhTcGxpdCYmXCJ0b3BSaWdodFwiKXx8XCJib3R0b21MZWZ0XCIsZS5sZWFmTm9kZShcInBhbmVcIix7eFNwbGl0OnQueFNwbGl0fHx2b2lkIDAseVNwbGl0OnQueVNwbGl0fHx2b2lkIDAsdG9wTGVmdENlbGw6aSxhY3RpdmVQYW5lOmEsc3RhdGU6XCJmcm96ZW5cIn0pLGUubGVhZk5vZGUoXCJzZWxlY3Rpb25cIix7cGFuZTphLGFjdGl2ZUNlbGw6dC5hY3RpdmVDZWxsLHNxcmVmOnQuYWN0aXZlQ2VsbH0pO2JyZWFrO2Nhc2VcInNwbGl0XCI6XCJ0b3BMZWZ0XCI9PT10LmFjdGl2ZVBhbmUmJih0LmFjdGl2ZVBhbmU9dm9pZCAwKSxlLmxlYWZOb2RlKFwicGFuZVwiLHt4U3BsaXQ6dC54U3BsaXR8fHZvaWQgMCx5U3BsaXQ6dC55U3BsaXR8fHZvaWQgMCx0b3BMZWZ0Q2VsbDp0LnRvcExlZnRDZWxsLGFjdGl2ZVBhbmU6dC5hY3RpdmVQYW5lfSksZS5sZWFmTm9kZShcInNlbGVjdGlvblwiLHtwYW5lOnQuYWN0aXZlUGFuZSxhY3RpdmVDZWxsOnQuYWN0aXZlQ2VsbCxzcXJlZjp0LmFjdGl2ZUNlbGx9KTticmVhaztjYXNlXCJub3JtYWxcIjp0LmFjdGl2ZUNlbGwmJmUubGVhZk5vZGUoXCJzZWxlY3Rpb25cIix7YWN0aXZlQ2VsbDp0LmFjdGl2ZUNlbGwsc3FyZWY6dC5hY3RpdmVDZWxsfSl9ZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZVwic2hlZXRWaWV3XCI6cmV0dXJuIHRoaXMuc2hlZXRWaWV3PXt3b3JrYm9va1ZpZXdJZDpwYXJzZUludChlLmF0dHJpYnV0ZXMud29ya2Jvb2tWaWV3SWQsMTApLHJpZ2h0VG9MZWZ0OlwiMVwiPT09ZS5hdHRyaWJ1dGVzLnJpZ2h0VG9MZWZ0LHRhYlNlbGVjdGVkOlwiMVwiPT09ZS5hdHRyaWJ1dGVzLnRhYlNlbGVjdGVkLHNob3dSdWxlcjohKFwiMFwiPT09ZS5hdHRyaWJ1dGVzLnNob3dSdWxlciksc2hvd1Jvd0NvbEhlYWRlcnM6IShcIjBcIj09PWUuYXR0cmlidXRlcy5zaG93Um93Q29sSGVhZGVycyksc2hvd0dyaWRMaW5lczohKFwiMFwiPT09ZS5hdHRyaWJ1dGVzLnNob3dHcmlkTGluZXMpLHpvb21TY2FsZTpwYXJzZUludChlLmF0dHJpYnV0ZXMuem9vbVNjYWxlfHxcIjEwMFwiLDEwKSx6b29tU2NhbGVOb3JtYWw6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnpvb21TY2FsZU5vcm1hbHx8XCIxMDBcIiwxMCksc3R5bGU6ZS5hdHRyaWJ1dGVzLnZpZXd9LHRoaXMucGFuZT12b2lkIDAsdGhpcy5zZWxlY3Rpb25zPXt9LCEwO2Nhc2VcInBhbmVcIjpyZXR1cm4gdGhpcy5wYW5lPXt4U3BsaXQ6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnhTcGxpdHx8XCIwXCIsMTApLHlTcGxpdDpwYXJzZUludChlLmF0dHJpYnV0ZXMueVNwbGl0fHxcIjBcIiwxMCksdG9wTGVmdENlbGw6ZS5hdHRyaWJ1dGVzLnRvcExlZnRDZWxsLGFjdGl2ZVBhbmU6ZS5hdHRyaWJ1dGVzLmFjdGl2ZVBhbmV8fFwidG9wTGVmdFwiLHN0YXRlOmUuYXR0cmlidXRlcy5zdGF0ZX0sITA7Y2FzZVwic2VsZWN0aW9uXCI6e2NvbnN0IHQ9ZS5hdHRyaWJ1dGVzLnBhbmV8fFwidG9wTGVmdFwiO3JldHVybiB0aGlzLnNlbGVjdGlvbnNbdF09e3BhbmU6dCxhY3RpdmVDZWxsOmUuYXR0cmlidXRlcy5hY3RpdmVDZWxsfSwhMH1kZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShlKXtsZXQgdCxyO3N3aXRjaChlKXtjYXNlXCJzaGVldFZpZXdcIjpyZXR1cm4gdGhpcy5zaGVldFZpZXcmJnRoaXMucGFuZT8odD10aGlzLm1vZGVsPXt3b3JrYm9va1ZpZXdJZDp0aGlzLnNoZWV0Vmlldy53b3JrYm9va1ZpZXdJZCxyaWdodFRvTGVmdDp0aGlzLnNoZWV0Vmlldy5yaWdodFRvTGVmdCxzdGF0ZTpzW3RoaXMucGFuZS5zdGF0ZV18fFwic3BsaXRcIix4U3BsaXQ6dGhpcy5wYW5lLnhTcGxpdCx5U3BsaXQ6dGhpcy5wYW5lLnlTcGxpdCx0b3BMZWZ0Q2VsbDp0aGlzLnBhbmUudG9wTGVmdENlbGwsc2hvd1J1bGVyOnRoaXMuc2hlZXRWaWV3LnNob3dSdWxlcixzaG93Um93Q29sSGVhZGVyczp0aGlzLnNoZWV0Vmlldy5zaG93Um93Q29sSGVhZGVycyxzaG93R3JpZExpbmVzOnRoaXMuc2hlZXRWaWV3LnNob3dHcmlkTGluZXMsem9vbVNjYWxlOnRoaXMuc2hlZXRWaWV3Lnpvb21TY2FsZSx6b29tU2NhbGVOb3JtYWw6dGhpcy5zaGVldFZpZXcuem9vbVNjYWxlTm9ybWFsfSxcInNwbGl0XCI9PT10aGlzLm1vZGVsLnN0YXRlJiYodC5hY3RpdmVQYW5lPXRoaXMucGFuZS5hY3RpdmVQYW5lKSxyPXRoaXMuc2VsZWN0aW9uc1t0aGlzLnBhbmUuYWN0aXZlUGFuZV0sciYmci5hY3RpdmVDZWxsJiYodC5hY3RpdmVDZWxsPXIuYWN0aXZlQ2VsbCksdGhpcy5zaGVldFZpZXcuc3R5bGUmJih0LnN0eWxlPXRoaXMuc2hlZXRWaWV3LnN0eWxlKSk6KHQ9dGhpcy5tb2RlbD17d29ya2Jvb2tWaWV3SWQ6dGhpcy5zaGVldFZpZXcud29ya2Jvb2tWaWV3SWQscmlnaHRUb0xlZnQ6dGhpcy5zaGVldFZpZXcucmlnaHRUb0xlZnQsc3RhdGU6XCJub3JtYWxcIixzaG93UnVsZXI6dGhpcy5zaGVldFZpZXcuc2hvd1J1bGVyLHNob3dSb3dDb2xIZWFkZXJzOnRoaXMuc2hlZXRWaWV3LnNob3dSb3dDb2xIZWFkZXJzLHNob3dHcmlkTGluZXM6dGhpcy5zaGVldFZpZXcuc2hvd0dyaWRMaW5lcyx6b29tU2NhbGU6dGhpcy5zaGVldFZpZXcuem9vbVNjYWxlLHpvb21TY2FsZU5vcm1hbDp0aGlzLnNoZWV0Vmlldy56b29tU2NhbGVOb3JtYWx9LHI9dGhpcy5zZWxlY3Rpb25zLnRvcExlZnQsciYmci5hY3RpdmVDZWxsJiYodC5hY3RpdmVDZWxsPXIuYWN0aXZlQ2VsbCksdGhpcy5zaGVldFZpZXcuc3R5bGUmJih0LnN0eWxlPXRoaXMuc2hlZXRWaWV3LnN0eWxlKSksITE7ZGVmYXVsdDpyZXR1cm4hMH19cmVjb25jaWxlKCl7fX19LHtcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTE0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInRhYmxlUGFydFwifXJlbmRlcihlLHQpe3QmJmUubGVhZk5vZGUodGhpcy50YWcse1wicjppZFwiOnQucklkfSl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e3JJZDplLmF0dHJpYnV0ZXNbXCJyOmlkXCJdfSwhMDtkZWZhdWx0OnJldHVybiExfX1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDExNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIiksaT1lKFwiLi4vLi4vLi4vdXRpbHMvY29sLWNhY2hlXCIpLHM9ZShcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIiksbz1lKFwiLi4vLi4vcmVsLXR5cGVcIiksYT1lKFwiLi9tZXJnZXNcIiksbD1lKFwiLi4vYmFzZS14Zm9ybVwiKSxjPWUoXCIuLi9saXN0LXhmb3JtXCIpLHU9ZShcIi4vcm93LXhmb3JtXCIpLGg9ZShcIi4vY29sLXhmb3JtXCIpLGY9ZShcIi4vZGltZW5zaW9uLXhmb3JtXCIpLGQ9ZShcIi4vaHlwZXJsaW5rLXhmb3JtXCIpLHA9ZShcIi4vbWVyZ2UtY2VsbC14Zm9ybVwiKSxtPWUoXCIuL2RhdGEtdmFsaWRhdGlvbnMteGZvcm1cIiksYj1lKFwiLi9zaGVldC1wcm9wZXJ0aWVzLXhmb3JtXCIpLGc9ZShcIi4vc2hlZXQtZm9ybWF0LXByb3BlcnRpZXMteGZvcm1cIikseT1lKFwiLi9zaGVldC12aWV3LXhmb3JtXCIpLHY9ZShcIi4vc2hlZXQtcHJvdGVjdGlvbi14Zm9ybVwiKSx3PWUoXCIuL3BhZ2UtbWFyZ2lucy14Zm9ybVwiKSxfPWUoXCIuL3BhZ2Utc2V0dXAteGZvcm1cIikseD1lKFwiLi9wcmludC1vcHRpb25zLXhmb3JtXCIpLGs9ZShcIi4vYXV0by1maWx0ZXIteGZvcm1cIiksUz1lKFwiLi9waWN0dXJlLXhmb3JtXCIpLE09ZShcIi4vZHJhd2luZy14Zm9ybVwiKSxDPWUoXCIuL3RhYmxlLXBhcnQteGZvcm1cIiksVD1lKFwiLi9yb3ctYnJlYWtzLXhmb3JtXCIpLEU9ZShcIi4vaGVhZGVyLWZvb3Rlci14Zm9ybVwiKSxBPWUoXCIuL2NmL2NvbmRpdGlvbmFsLWZvcm1hdHRpbmdzLXhmb3JtXCIpLFI9ZShcIi4vZXh0LWxzdC14Zm9ybVwiKSxPPShlLHQpPT57aWYoIXR8fCF0Lmxlbmd0aClyZXR1cm4gZTtpZighZXx8IWUubGVuZ3RoKXJldHVybiB0O2NvbnN0IHI9e30sbj17fTtyZXR1cm4gZS5mb3JFYWNoKGU9PntyW2UucmVmXT1lLGUucnVsZXMuZm9yRWFjaChlPT57Y29uc3R7eDE0SWQ6dH09ZTt0JiYoblt0XT1lKX0pfSksdC5mb3JFYWNoKHQ9Pnt0LnJ1bGVzLmZvckVhY2goaT0+e2NvbnN0IHM9bltpLngxNElkXTtzPygoZSx0KT0+e09iamVjdC5rZXlzKHQpLmZvckVhY2gocj0+e2NvbnN0IG49ZVtyXSxpPXRbcl07dm9pZCAwPT09biYmdm9pZCAwIT09aSYmKGVbcl09aSl9KX0pKHMsaSk6clt0LnJlZl0/clt0LnJlZl0ucnVsZXMucHVzaChpKTplLnB1c2goe3JlZjp0LnJlZixydWxlczpbaV19KX0pfSksZX07Y2xhc3MgaiBleHRlbmRzIGx7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTtjb25zdHttYXhSb3dzOnQsbWF4Q29sczpyLGlnbm9yZU5vZGVzOm59PWV8fHt9O3RoaXMuaWdub3JlTm9kZXM9bnx8W10sdGhpcy5tYXA9e3NoZWV0UHI6bmV3IGIsZGltZW5zaW9uOm5ldyBmLHNoZWV0Vmlld3M6bmV3IGMoe3RhZzpcInNoZWV0Vmlld3NcIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyB5fSksc2hlZXRGb3JtYXRQcjpuZXcgZyxjb2xzOm5ldyBjKHt0YWc6XCJjb2xzXCIsY291bnQ6ITEsY2hpbGRYZm9ybTpuZXcgaH0pLHNoZWV0RGF0YTpuZXcgYyh7dGFnOlwic2hlZXREYXRhXCIsY291bnQ6ITEsZW1wdHk6ITAsY2hpbGRYZm9ybTpuZXcgdSh7bWF4SXRlbXM6cn0pLG1heEl0ZW1zOnR9KSxhdXRvRmlsdGVyOm5ldyBrLG1lcmdlQ2VsbHM6bmV3IGMoe3RhZzpcIm1lcmdlQ2VsbHNcIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBwfSkscm93QnJlYWtzOm5ldyBULGh5cGVybGlua3M6bmV3IGMoe3RhZzpcImh5cGVybGlua3NcIixjb3VudDohMSxjaGlsZFhmb3JtOm5ldyBkfSkscGFnZU1hcmdpbnM6bmV3IHcsZGF0YVZhbGlkYXRpb25zOm5ldyBtLHBhZ2VTZXR1cDpuZXcgXyxoZWFkZXJGb290ZXI6bmV3IEUscHJpbnRPcHRpb25zOm5ldyB4LHBpY3R1cmU6bmV3IFMsZHJhd2luZzpuZXcgTSxzaGVldFByb3RlY3Rpb246bmV3IHYsdGFibGVQYXJ0czpuZXcgYyh7dGFnOlwidGFibGVQYXJ0c1wiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IEN9KSxjb25kaXRpb25hbEZvcm1hdHRpbmc6bmV3IEEsZXh0THN0Om5ldyBSfX1wcmVwYXJlKGUsdCl7dC5tZXJnZXM9bmV3IGEsZS5oeXBlcmxpbmtzPXQuaHlwZXJsaW5rcz1bXSxlLmNvbW1lbnRzPXQuY29tbWVudHM9W10sdC5mb3JtdWxhZT17fSx0LnNpRm9ybXVsYWU9MCx0aGlzLm1hcC5jb2xzLnByZXBhcmUoZS5jb2xzLHQpLHRoaXMubWFwLnNoZWV0RGF0YS5wcmVwYXJlKGUucm93cyx0KSx0aGlzLm1hcC5jb25kaXRpb25hbEZvcm1hdHRpbmcucHJlcGFyZShlLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MsdCksZS5tZXJnZUNlbGxzPXQubWVyZ2VzLm1lcmdlQ2VsbHM7Y29uc3Qgcj1lLnJlbHM9W107ZnVuY3Rpb24gbihlKXtyZXR1cm5cInJJZFwiKyhlLmxlbmd0aCsxKX1pZihlLmh5cGVybGlua3MuZm9yRWFjaChlPT57Y29uc3QgdD1uKHIpO2UucklkPXQsci5wdXNoKHtJZDp0LFR5cGU6by5IeXBlcmxpbmssVGFyZ2V0OmUudGFyZ2V0LFRhcmdldE1vZGU6XCJFeHRlcm5hbFwifSl9KSxlLmNvbW1lbnRzLmxlbmd0aD4wKXtjb25zdCBzPXtJZDpuKHIpLFR5cGU6by5Db21tZW50cyxUYXJnZXQ6YC4uL2NvbW1lbnRzJHtlLmlkfS54bWxgfTtyLnB1c2gocyk7Y29uc3QgYT17SWQ6bihyKSxUeXBlOm8uVm1sRHJhd2luZyxUYXJnZXQ6YC4uL2RyYXdpbmdzL3ZtbERyYXdpbmcke2UuaWR9LnZtbGB9O3IucHVzaChhKSxlLmNvbW1lbnRzLmZvckVhY2goZT0+e2UucmVmQWRkcmVzcz1pLmRlY29kZUFkZHJlc3MoZS5yZWYpfSksdC5jb21tZW50UmVmcy5wdXNoKHtjb21tZW50TmFtZTpcImNvbW1lbnRzXCIrZS5pZCx2bWxEcmF3aW5nOlwidm1sRHJhd2luZ1wiK2UuaWR9KX1jb25zdCBzPVtdO2xldCBsO2UubWVkaWEuZm9yRWFjaChpPT57aWYoXCJiYWNrZ3JvdW5kXCI9PT1pLnR5cGUpe2NvbnN0IHM9bihyKTtsPXQubWVkaWFbaS5pbWFnZUlkXSxyLnB1c2goe0lkOnMsVHlwZTpvLkltYWdlLFRhcmdldDpgLi4vbWVkaWEvJHtsLm5hbWV9LiR7bC5leHRlbnNpb259YH0pLGUuYmFja2dyb3VuZD17cklkOnN9LGUuaW1hZ2U9dC5tZWRpYVtpLmltYWdlSWRdfWVsc2UgaWYoXCJpbWFnZVwiPT09aS50eXBlKXtsZXR7ZHJhd2luZzphfT1lO2w9dC5tZWRpYVtpLmltYWdlSWRdLGF8fChhPWUuZHJhd2luZz17cklkOm4ociksbmFtZTpcImRyYXdpbmdcIisgKyt0LmRyYXdpbmdzQ291bnQsYW5jaG9yczpbXSxyZWxzOltdfSx0LmRyYXdpbmdzLnB1c2goYSksci5wdXNoKHtJZDphLnJJZCxUeXBlOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nXCIsVGFyZ2V0OmAuLi9kcmF3aW5ncy8ke2EubmFtZX0ueG1sYH0pKTtsZXQgYz10aGlzLnByZUltYWdlSWQ9PT1pLmltYWdlSWQ/c1tpLmltYWdlSWRdOnNbYS5yZWxzLmxlbmd0aF07Y3x8KGM9bihhLnJlbHMpLHNbYS5yZWxzLmxlbmd0aF09YyxhLnJlbHMucHVzaCh7SWQ6YyxUeXBlOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9pbWFnZVwiLFRhcmdldDpgLi4vbWVkaWEvJHtsLm5hbWV9LiR7bC5leHRlbnNpb259YH0pKTtjb25zdCB1PXtwaWN0dXJlOntySWQ6Y30scmFuZ2U6aS5yYW5nZX07aWYoaS5oeXBlcmxpbmtzJiZpLmh5cGVybGlua3MuaHlwZXJsaW5rKXtjb25zdCBlPW4oYS5yZWxzKTtzW2EucmVscy5sZW5ndGhdPWUsdS5waWN0dXJlLmh5cGVybGlua3M9e3Rvb2x0aXA6aS5oeXBlcmxpbmtzLnRvb2x0aXAscklkOmV9LGEucmVscy5wdXNoKHtJZDplLFR5cGU6by5IeXBlcmxpbmssVGFyZ2V0OmkuaHlwZXJsaW5rcy5oeXBlcmxpbmssVGFyZ2V0TW9kZTpcIkV4dGVybmFsXCJ9KX10aGlzLnByZUltYWdlSWQ9aS5pbWFnZUlkLGEuYW5jaG9ycy5wdXNoKHUpfX0pLGUudGFibGVzLmZvckVhY2goZT0+e2NvbnN0IGk9bihyKTtlLnJJZD1pLHIucHVzaCh7SWQ6aSxUeXBlOm8uVGFibGUsVGFyZ2V0OlwiLi4vdGFibGVzL1wiK2UudGFyZ2V0fSksZS5jb2x1bW5zLmZvckVhY2goZT0+e2NvbnN0e3N0eWxlOnJ9PWU7ciYmKGUuZHhmSWQ9dC5zdHlsZXMuYWRkRHhmU3R5bGUocikpfSl9KSx0aGlzLm1hcC5leHRMc3QucHJlcGFyZShlLHQpfXJlbmRlcihlLHQpe2Uub3BlblhtbChzLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUoXCJ3b3Jrc2hlZXRcIixqLldPUktTSEVFVF9BVFRSSUJVVEVTKTtjb25zdCByPXQucHJvcGVydGllcz97ZGVmYXVsdFJvd0hlaWdodDp0LnByb3BlcnRpZXMuZGVmYXVsdFJvd0hlaWdodCxkeURlc2NlbnQ6dC5wcm9wZXJ0aWVzLmR5RGVzY2VudCxvdXRsaW5lTGV2ZWxDb2w6dC5wcm9wZXJ0aWVzLm91dGxpbmVMZXZlbENvbCxvdXRsaW5lTGV2ZWxSb3c6dC5wcm9wZXJ0aWVzLm91dGxpbmVMZXZlbFJvd306dm9pZCAwO3QucHJvcGVydGllcyYmdC5wcm9wZXJ0aWVzLmRlZmF1bHRDb2xXaWR0aCYmKHIuZGVmYXVsdENvbFdpZHRoPXQucHJvcGVydGllcy5kZWZhdWx0Q29sV2lkdGgpO2NvbnN0IG49e291dGxpbmVQcm9wZXJ0aWVzOnQucHJvcGVydGllcyYmdC5wcm9wZXJ0aWVzLm91dGxpbmVQcm9wZXJ0aWVzLHRhYkNvbG9yOnQucHJvcGVydGllcyYmdC5wcm9wZXJ0aWVzLnRhYkNvbG9yLHBhZ2VTZXR1cDp0LnBhZ2VTZXR1cCYmdC5wYWdlU2V0dXAuZml0VG9QYWdlP3tmaXRUb1BhZ2U6dC5wYWdlU2V0dXAuZml0VG9QYWdlfTp2b2lkIDB9LGk9dC5wYWdlU2V0dXAmJnQucGFnZVNldHVwLm1hcmdpbnMsYT17c2hvd1Jvd0NvbEhlYWRlcnM6dC5wYWdlU2V0dXAmJnQucGFnZVNldHVwLnNob3dSb3dDb2xIZWFkZXJzLHNob3dHcmlkTGluZXM6dC5wYWdlU2V0dXAmJnQucGFnZVNldHVwLnNob3dHcmlkTGluZXMsaG9yaXpvbnRhbENlbnRlcmVkOnQucGFnZVNldHVwJiZ0LnBhZ2VTZXR1cC5ob3Jpem9udGFsQ2VudGVyZWQsdmVydGljYWxDZW50ZXJlZDp0LnBhZ2VTZXR1cCYmdC5wYWdlU2V0dXAudmVydGljYWxDZW50ZXJlZH0sbD10LnNoZWV0UHJvdGVjdGlvbjt0aGlzLm1hcC5zaGVldFByLnJlbmRlcihlLG4pLHRoaXMubWFwLmRpbWVuc2lvbi5yZW5kZXIoZSx0LmRpbWVuc2lvbnMpLHRoaXMubWFwLnNoZWV0Vmlld3MucmVuZGVyKGUsdC52aWV3cyksdGhpcy5tYXAuc2hlZXRGb3JtYXRQci5yZW5kZXIoZSxyKSx0aGlzLm1hcC5jb2xzLnJlbmRlcihlLHQuY29scyksdGhpcy5tYXAuc2hlZXREYXRhLnJlbmRlcihlLHQucm93cyksdGhpcy5tYXAuc2hlZXRQcm90ZWN0aW9uLnJlbmRlcihlLGwpLHRoaXMubWFwLmF1dG9GaWx0ZXIucmVuZGVyKGUsdC5hdXRvRmlsdGVyKSx0aGlzLm1hcC5tZXJnZUNlbGxzLnJlbmRlcihlLHQubWVyZ2VDZWxscyksdGhpcy5tYXAuY29uZGl0aW9uYWxGb3JtYXR0aW5nLnJlbmRlcihlLHQuY29uZGl0aW9uYWxGb3JtYXR0aW5ncyksdGhpcy5tYXAuZGF0YVZhbGlkYXRpb25zLnJlbmRlcihlLHQuZGF0YVZhbGlkYXRpb25zKSx0aGlzLm1hcC5oeXBlcmxpbmtzLnJlbmRlcihlLHQuaHlwZXJsaW5rcyksdGhpcy5tYXAucHJpbnRPcHRpb25zLnJlbmRlcihlLGEpLHRoaXMubWFwLnBhZ2VNYXJnaW5zLnJlbmRlcihlLGkpLHRoaXMubWFwLnBhZ2VTZXR1cC5yZW5kZXIoZSx0LnBhZ2VTZXR1cCksdGhpcy5tYXAuaGVhZGVyRm9vdGVyLnJlbmRlcihlLHQuaGVhZGVyRm9vdGVyKSx0aGlzLm1hcC5yb3dCcmVha3MucmVuZGVyKGUsdC5yb3dCcmVha3MpLHRoaXMubWFwLmRyYXdpbmcucmVuZGVyKGUsdC5kcmF3aW5nKSx0aGlzLm1hcC5waWN0dXJlLnJlbmRlcihlLHQuYmFja2dyb3VuZCksdGhpcy5tYXAudGFibGVQYXJ0cy5yZW5kZXIoZSx0LnRhYmxlcyksdGhpcy5tYXAuZXh0THN0LnJlbmRlcihlLHQpLHQucmVscyYmdC5yZWxzLmZvckVhY2godD0+e3QuVHlwZT09PW8uVm1sRHJhd2luZyYmZS5sZWFmTm9kZShcImxlZ2FjeURyYXdpbmdcIix7XCJyOmlkXCI6dC5JZH0pfSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITApOlwid29ya3NoZWV0XCI9PT1lLm5hbWU/KG4uZWFjaCh0aGlzLm1hcCxlPT57ZS5yZXNldCgpfSksITApOih0aGlzLm1hcFtlLm5hbWVdJiYhdGhpcy5pZ25vcmVOb2Rlcy5pbmNsdWRlcyhlLm5hbWUpJiYodGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSkpLCEwKX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZVwid29ya3NoZWV0XCI6e2NvbnN0IGU9dGhpcy5tYXAuc2hlZXRGb3JtYXRQci5tb2RlbHx8e307dGhpcy5tYXAuc2hlZXRQci5tb2RlbCYmdGhpcy5tYXAuc2hlZXRQci5tb2RlbC50YWJDb2xvciYmKGUudGFiQ29sb3I9dGhpcy5tYXAuc2hlZXRQci5tb2RlbC50YWJDb2xvciksdGhpcy5tYXAuc2hlZXRQci5tb2RlbCYmdGhpcy5tYXAuc2hlZXRQci5tb2RlbC5vdXRsaW5lUHJvcGVydGllcyYmKGUub3V0bGluZVByb3BlcnRpZXM9dGhpcy5tYXAuc2hlZXRQci5tb2RlbC5vdXRsaW5lUHJvcGVydGllcyk7Y29uc3QgdD17Zml0VG9QYWdlOnRoaXMubWFwLnNoZWV0UHIubW9kZWwmJnRoaXMubWFwLnNoZWV0UHIubW9kZWwucGFnZVNldHVwJiZ0aGlzLm1hcC5zaGVldFByLm1vZGVsLnBhZ2VTZXR1cC5maXRUb1BhZ2V8fCExLG1hcmdpbnM6dGhpcy5tYXAucGFnZU1hcmdpbnMubW9kZWx9LHI9T2JqZWN0LmFzc2lnbih0LHRoaXMubWFwLnBhZ2VTZXR1cC5tb2RlbCx0aGlzLm1hcC5wcmludE9wdGlvbnMubW9kZWwpLG49Tyh0aGlzLm1hcC5jb25kaXRpb25hbEZvcm1hdHRpbmcubW9kZWwsdGhpcy5tYXAuZXh0THN0Lm1vZGVsJiZ0aGlzLm1hcC5leHRMc3QubW9kZWxbXCJ4MTQ6Y29uZGl0aW9uYWxGb3JtYXR0aW5nc1wiXSk7cmV0dXJuIHRoaXMubW9kZWw9e2RpbWVuc2lvbnM6dGhpcy5tYXAuZGltZW5zaW9uLm1vZGVsLGNvbHM6dGhpcy5tYXAuY29scy5tb2RlbCxyb3dzOnRoaXMubWFwLnNoZWV0RGF0YS5tb2RlbCxtZXJnZUNlbGxzOnRoaXMubWFwLm1lcmdlQ2VsbHMubW9kZWwsaHlwZXJsaW5rczp0aGlzLm1hcC5oeXBlcmxpbmtzLm1vZGVsLGRhdGFWYWxpZGF0aW9uczp0aGlzLm1hcC5kYXRhVmFsaWRhdGlvbnMubW9kZWwscHJvcGVydGllczplLHZpZXdzOnRoaXMubWFwLnNoZWV0Vmlld3MubW9kZWwscGFnZVNldHVwOnIsaGVhZGVyRm9vdGVyOnRoaXMubWFwLmhlYWRlckZvb3Rlci5tb2RlbCxiYWNrZ3JvdW5kOnRoaXMubWFwLnBpY3R1cmUubW9kZWwsZHJhd2luZzp0aGlzLm1hcC5kcmF3aW5nLm1vZGVsLHRhYmxlczp0aGlzLm1hcC50YWJsZVBhcnRzLm1vZGVsLGNvbmRpdGlvbmFsRm9ybWF0dGluZ3M6bn0sdGhpcy5tYXAuYXV0b0ZpbHRlci5tb2RlbCYmKHRoaXMubW9kZWwuYXV0b0ZpbHRlcj10aGlzLm1hcC5hdXRvRmlsdGVyLm1vZGVsKSx0aGlzLm1hcC5zaGVldFByb3RlY3Rpb24ubW9kZWwmJih0aGlzLm1vZGVsLnNoZWV0UHJvdGVjdGlvbj10aGlzLm1hcC5zaGVldFByb3RlY3Rpb24ubW9kZWwpLCExfWRlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShlLHQpe2NvbnN0IHI9KGUucmVsYXRpb25zaGlwc3x8W10pLnJlZHVjZSgocixuKT0+e2lmKHJbbi5JZF09bixuLlR5cGU9PT1vLkNvbW1lbnRzJiYoZS5jb21tZW50cz10LmNvbW1lbnRzW24uVGFyZ2V0XS5jb21tZW50cyksbi5UeXBlPT09by5WbWxEcmF3aW5nJiZlLmNvbW1lbnRzJiZlLmNvbW1lbnRzLmxlbmd0aCl7Y29uc3Qgcj10LnZtbERyYXdpbmdzW24uVGFyZ2V0XS5jb21tZW50cztlLmNvbW1lbnRzLmZvckVhY2goKGUsdCk9PntlLm5vdGU9T2JqZWN0LmFzc2lnbih7fSxlLm5vdGUsclt0XSl9KX1yZXR1cm4gcn0se30pO2lmKHQuY29tbWVudHNNYXA9KGUuY29tbWVudHN8fFtdKS5yZWR1Y2UoKGUsdCk9Pih0LnJlZiYmKGVbdC5yZWZdPXQpLGUpLHt9KSx0Lmh5cGVybGlua01hcD0oZS5oeXBlcmxpbmtzfHxbXSkucmVkdWNlKChlLHQpPT4odC5ySWQmJihlW3QuYWRkcmVzc109clt0LnJJZF0uVGFyZ2V0KSxlKSx7fSksdC5mb3JtdWxhZT17fSxlLnJvd3M9ZS5yb3dzJiZlLnJvd3MuZmlsdGVyKEJvb2xlYW4pfHxbXSxlLnJvd3MuZm9yRWFjaChlPT57ZS5jZWxscz1lLmNlbGxzJiZlLmNlbGxzLmZpbHRlcihCb29sZWFuKXx8W119KSx0aGlzLm1hcC5jb2xzLnJlY29uY2lsZShlLmNvbHMsdCksdGhpcy5tYXAuc2hlZXREYXRhLnJlY29uY2lsZShlLnJvd3MsdCksdGhpcy5tYXAuY29uZGl0aW9uYWxGb3JtYXR0aW5nLnJlY29uY2lsZShlLmNvbmRpdGlvbmFsRm9ybWF0dGluZ3MsdCksZS5tZWRpYT1bXSxlLmRyYXdpbmcpe2NvbnN0IG49cltlLmRyYXdpbmcucklkXS5UYXJnZXQubWF0Y2goL1xcL2RyYXdpbmdzXFwvKFthLXpBLVowLTldKylbLl1bYS16QS1aXXszLDR9JC8pO2lmKG4pe2NvbnN0IHI9blsxXTt0LmRyYXdpbmdzW3JdLmFuY2hvcnMuZm9yRWFjaCh0PT57aWYodC5tZWRpdW0pe2NvbnN0IHI9e3R5cGU6XCJpbWFnZVwiLGltYWdlSWQ6dC5tZWRpdW0uaW5kZXgscmFuZ2U6dC5yYW5nZSxoeXBlcmxpbmtzOnQucGljdHVyZS5oeXBlcmxpbmtzfTtlLm1lZGlhLnB1c2gocil9fSl9fWNvbnN0IG49ZS5iYWNrZ3JvdW5kJiZyW2UuYmFja2dyb3VuZC5ySWRdO2lmKG4pe2NvbnN0IHI9bi5UYXJnZXQuc3BsaXQoXCIvbWVkaWEvXCIpWzFdLGk9dC5tZWRpYUluZGV4JiZ0Lm1lZGlhSW5kZXhbcl07dm9pZCAwIT09aSYmZS5tZWRpYS5wdXNoKHt0eXBlOlwiYmFja2dyb3VuZFwiLGltYWdlSWQ6aX0pfWUudGFibGVzPShlLnRhYmxlc3x8W10pLm1hcChlPT57Y29uc3Qgbj1yW2UucklkXTtyZXR1cm4gdC50YWJsZXNbbi5UYXJnZXRdfSksZGVsZXRlIGUucmVsYXRpb25zaGlwcyxkZWxldGUgZS5oeXBlcmxpbmtzLGRlbGV0ZSBlLmNvbW1lbnRzfX1qLldPUktTSEVFVF9BVFRSSUJVVEVTPXt4bWxuczpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpblwiLFwieG1sbnM6clwiOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwc1wiLFwieG1sbnM6bWNcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2XCIsXCJtYzpJZ25vcmFibGVcIjpcIngxNGFjXCIsXCJ4bWxuczp4MTRhY1wiOlwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWNcIn0sdC5leHBvcnRzPWp9LHtcIi4uLy4uLy4uL3V0aWxzL2NvbC1jYWNoZVwiOjE5LFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiOjI2LFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi4vLi4vcmVsLXR5cGVcIjozMSxcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4uL2xpc3QteGZvcm1cIjo3MSxcIi4vYXV0by1maWx0ZXIteGZvcm1cIjo3MixcIi4vY2YvY29uZGl0aW9uYWwtZm9ybWF0dGluZ3MteGZvcm1cIjo4NyxcIi4vY29sLXhmb3JtXCI6OTIsXCIuL2RhdGEtdmFsaWRhdGlvbnMteGZvcm1cIjo5MyxcIi4vZGltZW5zaW9uLXhmb3JtXCI6OTQsXCIuL2RyYXdpbmcteGZvcm1cIjo5NSxcIi4vZXh0LWxzdC14Zm9ybVwiOjk2LFwiLi9oZWFkZXItZm9vdGVyLXhmb3JtXCI6OTcsXCIuL2h5cGVybGluay14Zm9ybVwiOjk4LFwiLi9tZXJnZS1jZWxsLXhmb3JtXCI6OTksXCIuL21lcmdlc1wiOjEwMCxcIi4vcGFnZS1tYXJnaW5zLXhmb3JtXCI6MTAzLFwiLi9wYWdlLXNldHVwLXhmb3JtXCI6MTA1LFwiLi9waWN0dXJlLXhmb3JtXCI6MTA2LFwiLi9wcmludC1vcHRpb25zLXhmb3JtXCI6MTA3LFwiLi9yb3ctYnJlYWtzLXhmb3JtXCI6MTA4LFwiLi9yb3cteGZvcm1cIjoxMDksXCIuL3NoZWV0LWZvcm1hdC1wcm9wZXJ0aWVzLXhmb3JtXCI6MTEwLFwiLi9zaGVldC1wcm9wZXJ0aWVzLXhmb3JtXCI6MTExLFwiLi9zaGVldC1wcm90ZWN0aW9uLXhmb3JtXCI6MTEyLFwiLi9zaGVldC12aWV3LXhmb3JtXCI6MTEzLFwiLi90YWJsZS1wYXJ0LXhmb3JtXCI6MTE0fV0sMTE2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50YWc9ZS50YWcsdGhpcy5hdHRyPWUuYXR0cn1yZW5kZXIoZSx0KXt0JiYoZS5vcGVuTm9kZSh0aGlzLnRhZyksZS5jbG9zZU5vZGUoKSl9cGFyc2VPcGVuKGUpe2UubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD0hMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLnRhZz1lLnRhZyx0aGlzLmF0dHI9ZS5hdHRyLHRoaXMuYXR0cnM9ZS5hdHRycyx0aGlzLl9mb3JtYXQ9ZS5mb3JtYXR8fGZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gTnVtYmVyLmlzTmFOKGUuZ2V0VGltZSgpKT9cIlwiOmUudG9JU09TdHJpbmcoKX1jYXRjaChlKXtyZXR1cm5cIlwifX0sdGhpcy5fcGFyc2U9ZS5wYXJzZXx8ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBEYXRlKGUpfX1yZW5kZXIoZSx0KXt0JiYoZS5vcGVuTm9kZSh0aGlzLnRhZyksdGhpcy5hdHRycyYmZS5hZGRBdHRyaWJ1dGVzKHRoaXMuYXR0cnMpLHRoaXMuYXR0cj9lLmFkZEF0dHJpYnV0ZSh0aGlzLmF0dHIsdGhpcy5fZm9ybWF0KHQpKTplLndyaXRlVGV4dCh0aGlzLl9mb3JtYXQodCkpLGUuY2xvc2VOb2RlKCkpfXBhcnNlT3BlbihlKXtlLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMuYXR0cj90aGlzLm1vZGVsPXRoaXMuX3BhcnNlKGUuYXR0cmlidXRlc1t0aGlzLmF0dHJdKTp0aGlzLnRleHQ9W10pfXBhcnNlVGV4dChlKXt0aGlzLmF0dHJ8fHRoaXMudGV4dC5wdXNoKGUpfXBhcnNlQ2xvc2UoKXtyZXR1cm4gdGhpcy5hdHRyfHwodGhpcy5tb2RlbD10aGlzLl9wYXJzZSh0aGlzLnRleHQuam9pbihcIlwiKSkpLCExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDExODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMudGFnPWUudGFnLHRoaXMuYXR0cj1lLmF0dHIsdGhpcy5hdHRycz1lLmF0dHJzLHRoaXMuemVybz1lLnplcm99cmVuZGVyKGUsdCl7KHR8fHRoaXMuemVybykmJihlLm9wZW5Ob2RlKHRoaXMudGFnKSx0aGlzLmF0dHJzJiZlLmFkZEF0dHJpYnV0ZXModGhpcy5hdHRycyksdGhpcy5hdHRyP2UuYWRkQXR0cmlidXRlKHRoaXMuYXR0cix0KTplLndyaXRlVGV4dCh0KSxlLmNsb3NlTm9kZSgpKX1wYXJzZU9wZW4oZSl7cmV0dXJuIGUubmFtZT09PXRoaXMudGFnJiYodGhpcy5hdHRyP3RoaXMubW9kZWw9cGFyc2VJbnQoZS5hdHRyaWJ1dGVzW3RoaXMuYXR0cl0sMTApOnRoaXMudGV4dD1bXSwhMCl9cGFyc2VUZXh0KGUpe3RoaXMuYXR0cnx8dGhpcy50ZXh0LnB1c2goZSl9cGFyc2VDbG9zZSgpe3JldHVybiB0aGlzLmF0dHJ8fCh0aGlzLm1vZGVsPXBhcnNlSW50KHRoaXMudGV4dC5qb2luKFwiXCIpfHwwLDEwKSksITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy50YWc9ZS50YWcsdGhpcy5hdHRyPWUuYXR0cix0aGlzLmF0dHJzPWUuYXR0cnN9cmVuZGVyKGUsdCl7dm9pZCAwIT09dCYmKGUub3Blbk5vZGUodGhpcy50YWcpLHRoaXMuYXR0cnMmJmUuYWRkQXR0cmlidXRlcyh0aGlzLmF0dHJzKSx0aGlzLmF0dHI/ZS5hZGRBdHRyaWJ1dGUodGhpcy5hdHRyLHQpOmUud3JpdGVUZXh0KHQpLGUuY2xvc2VOb2RlKCkpfXBhcnNlT3BlbihlKXtlLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMuYXR0cj90aGlzLm1vZGVsPWUuYXR0cmlidXRlc1t0aGlzLmF0dHJdOnRoaXMudGV4dD1bXSl9cGFyc2VUZXh0KGUpe3RoaXMuYXR0cnx8dGhpcy50ZXh0LnB1c2goZSl9cGFyc2VDbG9zZSgpe3JldHVybiB0aGlzLmF0dHJ8fCh0aGlzLm1vZGVsPXRoaXMudGV4dC5qb2luKFwiXCIpKSwhMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMjA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL2Jhc2UteGZvcm1cIiksaT1lKFwiLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fbW9kZWw9ZX1yZW5kZXIoZSl7aWYoIXRoaXMuX3htbCl7Y29uc3QgZT1uZXcgaTshZnVuY3Rpb24gZSh0LHIpe3Qub3Blbk5vZGUoci50YWcsci4kKSxyLmMmJnIuYy5mb3JFYWNoKHI9PntlKHQscil9KSxyLnQmJnQud3JpdGVUZXh0KHIudCksdC5jbG9zZU5vZGUoKX0oZSx0aGlzLl9tb2RlbCksdGhpcy5feG1sPWUueG1sfWUud3JpdGVYbWwodGhpcy5feG1sKX1wYXJzZU9wZW4oKXtyZXR1cm4hMH1wYXJzZVRleHQoKXt9cGFyc2VDbG9zZShlKXtzd2l0Y2goZSl7Y2FzZSB0aGlzLl9tb2RlbC50YWc6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0se1wiLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMjE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL3RleHQteGZvcm1cIiksaT1lKFwiLi9yaWNoLXRleHQteGZvcm1cIikscz1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17cjpuZXcgaSx0Om5ldyBufX1nZXQgdGFnKCl7cmV0dXJuXCJyUGhcIn1yZW5kZXIoZSx0KXtpZihlLm9wZW5Ob2RlKHRoaXMudGFnLHtzYjp0LnNifHwwLGViOnQuZWJ8fDB9KSx0JiZ0Lmhhc093blByb3BlcnR5KFwicmljaFRleHRcIikmJnQucmljaFRleHQpe2NvbnN0e3I6cn09dGhpcy5tYXA7dC5yaWNoVGV4dC5mb3JFYWNoKHQ9PntyLnJlbmRlcihlLHQpfSl9ZWxzZSB0JiZ0aGlzLm1hcC50LnJlbmRlcihlLHQudGV4dCk7ZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7Y29uc3R7bmFtZTp0fT1lO3JldHVybiB0aGlzLnBhcnNlcj8odGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKTp0PT09dGhpcy50YWc/KHRoaXMubW9kZWw9e3NiOnBhcnNlSW50KGUuYXR0cmlidXRlcy5zYiwxMCksZWI6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmViLDEwKX0sITApOih0aGlzLnBhcnNlcj10aGlzLm1hcFt0XSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKSl9cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcil7aWYoIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSkpe3N3aXRjaChlKXtjYXNlXCJyXCI6e2xldCBlPXRoaXMubW9kZWwucmljaFRleHQ7ZXx8KGU9dGhpcy5tb2RlbC5yaWNoVGV4dD1bXSksZS5wdXNoKHRoaXMucGFyc2VyLm1vZGVsKTticmVha31jYXNlXCJ0XCI6dGhpcy5tb2RlbC50ZXh0PXRoaXMucGFyc2VyLm1vZGVsfXRoaXMucGFyc2VyPXZvaWQgMH1yZXR1cm4hMH1zd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4hMTtkZWZhdWx0OnJldHVybiEwfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL3JpY2gtdGV4dC14Zm9ybVwiOjEyMixcIi4vdGV4dC14Zm9ybVwiOjEyNX1dLDEyMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4vdGV4dC14Zm9ybVwiKSxpPWUoXCIuLi9zdHlsZS9mb250LXhmb3JtXCIpLHM9ZShcIi4uL2Jhc2UteGZvcm1cIik7Y2xhc3MgbyBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm1vZGVsPWV9Z2V0IHRhZygpe3JldHVyblwiclwifWdldCB0ZXh0WGZvcm0oKXtyZXR1cm4gdGhpcy5fdGV4dFhmb3JtfHwodGhpcy5fdGV4dFhmb3JtPW5ldyBuKX1nZXQgZm9udFhmb3JtKCl7cmV0dXJuIHRoaXMuX2ZvbnRYZm9ybXx8KHRoaXMuX2ZvbnRYZm9ybT1uZXcgaShvLkZPTlRfT1BUSU9OUykpfXJlbmRlcihlLHQpe3Q9dHx8dGhpcy5tb2RlbCxlLm9wZW5Ob2RlKFwiclwiKSx0LmZvbnQmJnRoaXMuZm9udFhmb3JtLnJlbmRlcihlLHQuZm9udCksdGhpcy50ZXh0WGZvcm0ucmVuZGVyKGUsdC50ZXh0KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcInJcIjpyZXR1cm4gdGhpcy5tb2RlbD17fSwhMDtjYXNlXCJ0XCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMudGV4dFhmb3JtLHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtjYXNlXCJyUHJcIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5mb250WGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7c3dpdGNoKGUpe2Nhc2VcInJcIjpyZXR1cm4hMTtjYXNlXCJ0XCI6cmV0dXJuIHRoaXMubW9kZWwudGV4dD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLnBhcnNlcj12b2lkIDAsITA7Y2FzZVwiclByXCI6cmV0dXJuIHRoaXMubW9kZWwuZm9udD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLnBhcnNlcj12b2lkIDAsITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSksITB9fX1vLkZPTlRfT1BUSU9OUz17dGFnTmFtZTpcInJQclwiLGZvbnROYW1lVGFnOlwickZvbnRcIn0sdC5leHBvcnRzPW99LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4uL3N0eWxlL2ZvbnQteGZvcm1cIjoxMzEsXCIuL3RleHQteGZvcm1cIjoxMjV9XSwxMjM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL3RleHQteGZvcm1cIiksaT1lKFwiLi9yaWNoLXRleHQteGZvcm1cIikscz1lKFwiLi9waG9uZXRpYy10ZXh0LXhmb3JtXCIpLG89ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgb3tjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMubW9kZWw9ZSx0aGlzLm1hcD17cjpuZXcgaSx0Om5ldyBuLHJQaDpuZXcgc319Z2V0IHRhZygpe3JldHVyblwic2lcIn1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKHRoaXMudGFnKSx0JiZ0Lmhhc093blByb3BlcnR5KFwicmljaFRleHRcIikmJnQucmljaFRleHQ/dC5yaWNoVGV4dC5sZW5ndGg/dC5yaWNoVGV4dC5mb3JFYWNoKHQ9Pnt0aGlzLm1hcC5yLnJlbmRlcihlLHQpfSk6dGhpcy5tYXAudC5yZW5kZXIoZSxcIlwiKTpudWxsIT10JiZ0aGlzLm1hcC50LnJlbmRlcihlLHQpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2NvbnN0e25hbWU6dH09ZTtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCk6dD09PXRoaXMudGFnPyh0aGlzLm1vZGVsPXt9LCEwKToodGhpcy5wYXJzZXI9dGhpcy5tYXBbdF0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCkpfXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpe2lmKCF0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpKXtzd2l0Y2goZSl7Y2FzZVwiclwiOntsZXQgZT10aGlzLm1vZGVsLnJpY2hUZXh0O2V8fChlPXRoaXMubW9kZWwucmljaFRleHQ9W10pLGUucHVzaCh0aGlzLnBhcnNlci5tb2RlbCk7YnJlYWt9Y2FzZVwidFwiOnRoaXMubW9kZWw9dGhpcy5wYXJzZXIubW9kZWx9dGhpcy5wYXJzZXI9dm9pZCAwfXJldHVybiEwfXN3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4vcGhvbmV0aWMtdGV4dC14Zm9ybVwiOjEyMSxcIi4vcmljaC10ZXh0LXhmb3JtXCI6MTIyLFwiLi90ZXh0LXhmb3JtXCI6MTI1fV0sMTI0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpLHM9ZShcIi4vc2hhcmVkLXN0cmluZy14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5tb2RlbD1lfHx7dmFsdWVzOltdLGNvdW50OjB9LHRoaXMuaGFzaD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucmljaD1PYmplY3QuY3JlYXRlKG51bGwpfWdldCBzaGFyZWRTdHJpbmdYZm9ybSgpe3JldHVybiB0aGlzLl9zaGFyZWRTdHJpbmdYZm9ybXx8KHRoaXMuX3NoYXJlZFN0cmluZ1hmb3JtPW5ldyBzKX1nZXQgdmFsdWVzKCl7cmV0dXJuIHRoaXMubW9kZWwudmFsdWVzfWdldCB1bmlxdWVDb3VudCgpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlcy5sZW5ndGh9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMubW9kZWwuY291bnR9Z2V0U3RyaW5nKGUpe3JldHVybiB0aGlzLm1vZGVsLnZhbHVlc1tlXX1hZGQoZSl7cmV0dXJuIGUucmljaFRleHQ/dGhpcy5hZGRSaWNoVGV4dChlKTp0aGlzLmFkZFRleHQoZSl9YWRkVGV4dChlKXtsZXQgdD10aGlzLmhhc2hbZV07cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMuaGFzaFtlXT10aGlzLm1vZGVsLnZhbHVlcy5sZW5ndGgsdGhpcy5tb2RlbC52YWx1ZXMucHVzaChlKSksdGhpcy5tb2RlbC5jb3VudCsrLHR9YWRkUmljaFRleHQoZSl7Y29uc3QgdD10aGlzLnNoYXJlZFN0cmluZ1hmb3JtLnRvWG1sKGUpO2xldCByPXRoaXMucmljaFt0XTtyZXR1cm4gdm9pZCAwPT09ciYmKHI9dGhpcy5yaWNoW3RdPXRoaXMubW9kZWwudmFsdWVzLmxlbmd0aCx0aGlzLm1vZGVsLnZhbHVlcy5wdXNoKGUpKSx0aGlzLm1vZGVsLmNvdW50Kysscn1yZW5kZXIoZSx0KXt0PXR8fHRoaXMuX3ZhbHVlcyxlLm9wZW5YbWwobi5TdGREb2NBdHRyaWJ1dGVzKSxlLm9wZW5Ob2RlKFwic3N0XCIse3htbG5zOlwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluXCIsY291bnQ6dC5jb3VudCx1bmlxdWVDb3VudDp0LnZhbHVlcy5sZW5ndGh9KTtjb25zdCByPXRoaXMuc2hhcmVkU3RyaW5nWGZvcm07dC52YWx1ZXMuZm9yRWFjaCh0PT57ci5yZW5kZXIoZSx0KX0pLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwic3N0XCI6cmV0dXJuITA7Y2FzZVwic2lcIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5zaGFyZWRTdHJpbmdYZm9ybSx0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlT3BlbjogXCIrSlNPTi5zdHJpbmdpZnkoZSkpfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tb2RlbC52YWx1ZXMucHVzaCh0aGlzLnBhcnNlci5tb2RlbCksdGhpcy5tb2RlbC5jb3VudCsrLHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKGUpe2Nhc2VcInNzdFwiOnJldHVybiExO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCB4bWwgbm9kZSBpbiBwYXJzZUNsb3NlOiBcIitlKX19fX0se1wiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9zaGFyZWQtc3RyaW5nLXhmb3JtXCI6MTIzfV0sMTI1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInRcIn1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKFwidFwiKSwvXlxcc3xcXG58XFxzJC8udGVzdCh0KSYmZS5hZGRBdHRyaWJ1dGUoXCJ4bWw6c3BhY2VcIixcInByZXNlcnZlXCIpLGUud3JpdGVUZXh0KHQpLGUuY2xvc2VOb2RlKCl9Z2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMuX3RleHQuam9pbihcIlwiKS5yZXBsYWNlKC9feChbMC05QS1GXXs0fSlfL2csKGUsdCk9PlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodCwxNikpKX1wYXJzZU9wZW4oZSl7c3dpdGNoKGUubmFtZSl7Y2FzZVwidFwiOnJldHVybiB0aGlzLl90ZXh0PVtdLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0aGlzLl90ZXh0LnB1c2goZSl9cGFyc2VDbG9zZSgpe3JldHVybiExfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDEyNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uLy4uLy4uL2RvYy9lbnVtc1wiKSxpPWUoXCIuLi8uLi8uLi91dGlscy91dGlsc1wiKSxzPWUoXCIuLi9iYXNlLXhmb3JtXCIpLG89e2hvcml6b250YWxWYWx1ZXM6W1wibGVmdFwiLFwiY2VudGVyXCIsXCJyaWdodFwiLFwiZmlsbFwiLFwiY2VudGVyQ29udGludW91c1wiLFwiZGlzdHJpYnV0ZWRcIixcImp1c3RpZnlcIl0ucmVkdWNlKChlLHQpPT4oZVt0XT0hMCxlKSx7fSksaG9yaXpvbnRhbChlKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsVmFsdWVzW2VdP2U6dm9pZCAwfSx2ZXJ0aWNhbFZhbHVlczpbXCJ0b3BcIixcIm1pZGRsZVwiLFwiYm90dG9tXCIsXCJkaXN0cmlidXRlZFwiLFwianVzdGlmeVwiXS5yZWR1Y2UoKGUsdCk9PihlW3RdPSEwLGUpLHt9KSx2ZXJ0aWNhbChlKXtyZXR1cm5cIm1pZGRsZVwiPT09ZT9cImNlbnRlclwiOnRoaXMudmVydGljYWxWYWx1ZXNbZV0/ZTp2b2lkIDB9LHdyYXBUZXh0OmU9PiEhZXx8dm9pZCAwLHNocmlua1RvRml0OmU9PiEhZXx8dm9pZCAwLHRleHRSb3RhdGlvbihlKXtzd2l0Y2goZSl7Y2FzZVwidmVydGljYWxcIjpyZXR1cm4gZTtkZWZhdWx0OnJldHVybihlPWkudmFsaWRJbnQoZSkpPj0tOTAmJmU8PTkwP2U6dm9pZCAwfX0saW5kZW50OmU9PihlPWkudmFsaWRJbnQoZSksTWF0aC5tYXgoMCxlKSkscmVhZGluZ09yZGVyKGUpe3N3aXRjaChlKXtjYXNlXCJsdHJcIjpyZXR1cm4gbi5SZWFkaW5nT3JkZXIuTGVmdFRvUmlnaHQ7Y2FzZVwicnRsXCI6cmV0dXJuIG4uUmVhZGluZ09yZGVyLlJpZ2h0VG9MZWZ0O2RlZmF1bHQ6cmV0dXJufX19LGE9e3RvWG1sKGUpe2lmKGU9by50ZXh0Um90YXRpb24oZSkpe2lmKFwidmVydGljYWxcIj09PWUpcmV0dXJuIDI1NTtjb25zdCB0PU1hdGgucm91bmQoZSk7aWYodD49MCYmdDw9OTApcmV0dXJuIHQ7aWYodDwwJiZ0Pj0tOTApcmV0dXJuIDkwLXR9fSx0b01vZGVsKGUpe2NvbnN0IHQ9aS52YWxpZEludChlKTtpZih2b2lkIDAhPT10KXtpZigyNTU9PT10KXJldHVyblwidmVydGljYWxcIjtpZih0Pj0wJiZ0PD05MClyZXR1cm4gdDtpZih0PjkwJiZ0PD0xODApcmV0dXJuIDkwLXR9fX07dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgc3tnZXQgdGFnKCl7cmV0dXJuXCJhbGlnbm1lbnRcIn1yZW5kZXIoZSx0KXtlLmFkZFJvbGxiYWNrKCksZS5vcGVuTm9kZShcImFsaWdubWVudFwiKTtsZXQgcj0hMTtmdW5jdGlvbiBuKHQsbil7biYmKGUuYWRkQXR0cmlidXRlKHQsbikscj0hMCl9bihcImhvcml6b250YWxcIixvLmhvcml6b250YWwodC5ob3Jpem9udGFsKSksbihcInZlcnRpY2FsXCIsby52ZXJ0aWNhbCh0LnZlcnRpY2FsKSksbihcIndyYXBUZXh0XCIsISFvLndyYXBUZXh0KHQud3JhcFRleHQpJiZcIjFcIiksbihcInNocmlua1RvRml0XCIsISFvLnNocmlua1RvRml0KHQuc2hyaW5rVG9GaXQpJiZcIjFcIiksbihcImluZGVudFwiLG8uaW5kZW50KHQuaW5kZW50KSksbihcInRleHRSb3RhdGlvblwiLGEudG9YbWwodC50ZXh0Um90YXRpb24pKSxuKFwicmVhZGluZ09yZGVyXCIsby5yZWFkaW5nT3JkZXIodC5yZWFkaW5nT3JkZXIpKSxlLmNsb3NlTm9kZSgpLHI/ZS5jb21taXQoKTplLnJvbGxiYWNrKCl9cGFyc2VPcGVuKGUpe2NvbnN0IHQ9e307bGV0IHI9ITE7ZnVuY3Rpb24gbihlLG4saSl7ZSYmKHRbbl09aSxyPSEwKX1uKGUuYXR0cmlidXRlcy5ob3Jpem9udGFsLFwiaG9yaXpvbnRhbFwiLGUuYXR0cmlidXRlcy5ob3Jpem9udGFsKSxuKGUuYXR0cmlidXRlcy52ZXJ0aWNhbCxcInZlcnRpY2FsXCIsXCJjZW50ZXJcIj09PWUuYXR0cmlidXRlcy52ZXJ0aWNhbD9cIm1pZGRsZVwiOmUuYXR0cmlidXRlcy52ZXJ0aWNhbCksbihlLmF0dHJpYnV0ZXMud3JhcFRleHQsXCJ3cmFwVGV4dFwiLGkucGFyc2VCb29sZWFuKGUuYXR0cmlidXRlcy53cmFwVGV4dCkpLG4oZS5hdHRyaWJ1dGVzLnNocmlua1RvRml0LFwic2hyaW5rVG9GaXRcIixpLnBhcnNlQm9vbGVhbihlLmF0dHJpYnV0ZXMuc2hyaW5rVG9GaXQpKSxuKGUuYXR0cmlidXRlcy5pbmRlbnQsXCJpbmRlbnRcIixwYXJzZUludChlLmF0dHJpYnV0ZXMuaW5kZW50LDEwKSksbihlLmF0dHJpYnV0ZXMudGV4dFJvdGF0aW9uLFwidGV4dFJvdGF0aW9uXCIsYS50b01vZGVsKGUuYXR0cmlidXRlcy50ZXh0Um90YXRpb24pKSxuKGUuYXR0cmlidXRlcy5yZWFkaW5nT3JkZXIsXCJyZWFkaW5nT3JkZXJcIixcIjJcIj09PWUuYXR0cmlidXRlcy5yZWFkaW5nT3JkZXI/XCJydGxcIjpcImx0clwiKSx0aGlzLm1vZGVsPXI/dDpudWxsfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vLi4vLi4vZG9jL2VudW1zXCI6NyxcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCI6MjcsXCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4uLy4uLy4uL3V0aWxzL3V0aWxzXCIpLHM9ZShcIi4vY29sb3IteGZvcm1cIik7Y2xhc3MgbyBleHRlbmRzIG57Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm5hbWU9ZSx0aGlzLm1hcD17Y29sb3I6bmV3IHN9fWdldCB0YWcoKXtyZXR1cm4gdGhpcy5uYW1lfXJlbmRlcihlLHQscil7Y29uc3Qgbj10JiZ0LmNvbG9yfHxyfHx0aGlzLmRlZmF1bHRDb2xvcjtlLm9wZW5Ob2RlKHRoaXMubmFtZSksdCYmdC5zdHlsZSYmKGUuYWRkQXR0cmlidXRlKFwic3R5bGVcIix0LnN0eWxlKSxuJiZ0aGlzLm1hcC5jb2xvci5yZW5kZXIoZSxuKSksZS5jbG9zZU5vZGUoKX1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMubmFtZTp7Y29uc3R7c3R5bGU6dH09ZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLm1vZGVsPXQ/e3N0eWxlOnR9OnZvaWQgMCwhMH1jYXNlXCJjb2xvclwiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcC5jb2xvcix0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtyZXR1cm4gdGhpcy5wYXJzZXI/KHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwKTooZT09PXRoaXMubmFtZSYmdGhpcy5tYXAuY29sb3IubW9kZWwmJih0aGlzLm1vZGVsfHwodGhpcy5tb2RlbD17fSksdGhpcy5tb2RlbC5jb2xvcj10aGlzLm1hcC5jb2xvci5tb2RlbCksITEpfXZhbGlkU3R5bGUoZSl7cmV0dXJuIG8udmFsaWRTdHlsZVZhbHVlc1tlXX19by52YWxpZFN0eWxlVmFsdWVzPVtcInRoaW5cIixcImRhc2hlZFwiLFwiZG90dGVkXCIsXCJkYXNoRG90XCIsXCJoYWlyXCIsXCJkYXNoRG90RG90XCIsXCJzbGFudERhc2hEb3RcIixcIm1lZGl1bURhc2hlZFwiLFwibWVkaXVtRGFzaERvdERvdFwiLFwibWVkaXVtRGFzaERvdFwiLFwibWVkaXVtXCIsXCJkb3VibGVcIixcInRoaWNrXCJdLnJlZHVjZSgoZSx0KT0+KGVbdF09ITAsZSkse30pO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXt0b3A6bmV3IG8oXCJ0b3BcIiksbGVmdDpuZXcgbyhcImxlZnRcIiksYm90dG9tOm5ldyBvKFwiYm90dG9tXCIpLHJpZ2h0Om5ldyBvKFwicmlnaHRcIiksZGlhZ29uYWw6bmV3IG8oXCJkaWFnb25hbFwiKX19cmVuZGVyKGUsdCl7Y29uc3R7Y29sb3I6cn09dDtmdW5jdGlvbiBuKG4saSl7biYmIW4uY29sb3ImJnQuY29sb3ImJihuPXsuLi5uLGNvbG9yOnQuY29sb3J9KSxpLnJlbmRlcihlLG4scil9ZS5vcGVuTm9kZShcImJvcmRlclwiKSx0LmRpYWdvbmFsJiZ0LmRpYWdvbmFsLnN0eWxlJiYodC5kaWFnb25hbC51cCYmZS5hZGRBdHRyaWJ1dGUoXCJkaWFnb25hbFVwXCIsXCIxXCIpLHQuZGlhZ29uYWwuZG93biYmZS5hZGRBdHRyaWJ1dGUoXCJkaWFnb25hbERvd25cIixcIjFcIikpLG4odC5sZWZ0LHRoaXMubWFwLmxlZnQpLG4odC5yaWdodCx0aGlzLm1hcC5yaWdodCksbih0LnRvcCx0aGlzLm1hcC50b3ApLG4odC5ib3R0b20sdGhpcy5tYXAuYm90dG9tKSxuKHQuZGlhZ29uYWwsdGhpcy5tYXAuZGlhZ29uYWwpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwiYm9yZGVyXCI6cmV0dXJuIHRoaXMucmVzZXQoKSx0aGlzLmRpYWdvbmFsVXA9aS5wYXJzZUJvb2xlYW4oZS5hdHRyaWJ1dGVzLmRpYWdvbmFsVXApLHRoaXMuZGlhZ29uYWxEb3duPWkucGFyc2VCb29sZWFuKGUuYXR0cmlidXRlcy5kaWFnb25hbERvd24pLCEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMCl9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO2lmKFwiYm9yZGVyXCI9PT1lKXtjb25zdCBlPXRoaXMubW9kZWw9e30sdD1mdW5jdGlvbih0LHIsbil7ciYmKG4mJk9iamVjdC5hc3NpZ24ocixuKSxlW3RdPXIpfTt0KFwibGVmdFwiLHRoaXMubWFwLmxlZnQubW9kZWwpLHQoXCJyaWdodFwiLHRoaXMubWFwLnJpZ2h0Lm1vZGVsKSx0KFwidG9wXCIsdGhpcy5tYXAudG9wLm1vZGVsKSx0KFwiYm90dG9tXCIsdGhpcy5tYXAuYm90dG9tLm1vZGVsKSx0KFwiZGlhZ29uYWxcIix0aGlzLm1hcC5kaWFnb25hbC5tb2RlbCx7dXA6dGhpcy5kaWFnb25hbFVwLGRvd246dGhpcy5kaWFnb25hbERvd259KX1yZXR1cm4hMX19fSx7XCIuLi8uLi8uLi91dGlscy91dGlsc1wiOjI3LFwiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi9jb2xvci14Zm9ybVwiOjEyOH1dLDEyODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIik7dC5leHBvcnRzPWNsYXNzIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMubmFtZT1lfHxcImNvbG9yXCJ9Z2V0IHRhZygpe3JldHVybiB0aGlzLm5hbWV9cmVuZGVyKGUsdCl7cmV0dXJuISF0JiYoZS5vcGVuTm9kZSh0aGlzLm5hbWUpLHQuYXJnYj9lLmFkZEF0dHJpYnV0ZShcInJnYlwiLHQuYXJnYik6dm9pZCAwIT09dC50aGVtZT8oZS5hZGRBdHRyaWJ1dGUoXCJ0aGVtZVwiLHQudGhlbWUpLHZvaWQgMCE9PXQudGludCYmZS5hZGRBdHRyaWJ1dGUoXCJ0aW50XCIsdC50aW50KSk6dm9pZCAwIT09dC5pbmRleGVkP2UuYWRkQXR0cmlidXRlKFwiaW5kZXhlZFwiLHQuaW5kZXhlZCk6ZS5hZGRBdHRyaWJ1dGUoXCJhdXRvXCIsXCIxXCIpLGUuY2xvc2VOb2RlKCksITApfXBhcnNlT3BlbihlKXtyZXR1cm4gZS5uYW1lPT09dGhpcy5uYW1lJiYoZS5hdHRyaWJ1dGVzLnJnYj90aGlzLm1vZGVsPXthcmdiOmUuYXR0cmlidXRlcy5yZ2J9OmUuYXR0cmlidXRlcy50aGVtZT8odGhpcy5tb2RlbD17dGhlbWU6cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnRoZW1lLDEwKX0sZS5hdHRyaWJ1dGVzLnRpbnQmJih0aGlzLm1vZGVsLnRpbnQ9cGFyc2VGbG9hdChlLmF0dHJpYnV0ZXMudGludCkpKTplLmF0dHJpYnV0ZXMuaW5kZXhlZD90aGlzLm1vZGVsPXtpbmRleGVkOnBhcnNlSW50KGUuYXR0cmlidXRlcy5pbmRleGVkLDEwKX06dGhpcy5tb2RlbD12b2lkIDAsITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKSxpPWUoXCIuL2FsaWdubWVudC14Zm9ybVwiKSxzPWUoXCIuL2JvcmRlci14Zm9ybVwiKSxvPWUoXCIuL2ZpbGwteGZvcm1cIiksYT1lKFwiLi9mb250LXhmb3JtXCIpLGw9ZShcIi4vbnVtZm10LXhmb3JtXCIpLGM9ZShcIi4vcHJvdGVjdGlvbi14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17YWxpZ25tZW50Om5ldyBpLGJvcmRlcjpuZXcgcyxmaWxsOm5ldyBvLGZvbnQ6bmV3IGEsbnVtRm10Om5ldyBsLHByb3RlY3Rpb246bmV3IGN9fWdldCB0YWcoKXtyZXR1cm5cImR4ZlwifXJlbmRlcihlLHQpe2lmKGUub3Blbk5vZGUodGhpcy50YWcpLHQuZm9udCYmdGhpcy5tYXAuZm9udC5yZW5kZXIoZSx0LmZvbnQpLHQubnVtRm10JiZ0Lm51bUZtdElkKXtjb25zdCByPXtpZDp0Lm51bUZtdElkLGZvcm1hdENvZGU6dC5udW1GbXR9O3RoaXMubWFwLm51bUZtdC5yZW5kZXIoZSxyKX10LmZpbGwmJnRoaXMubWFwLmZpbGwucmVuZGVyKGUsdC5maWxsKSx0LmFsaWdubWVudCYmdGhpcy5tYXAuYWxpZ25tZW50LnJlbmRlcihlLHQuYWxpZ25tZW50KSx0LmJvcmRlciYmdGhpcy5tYXAuYm9yZGVyLnJlbmRlcihlLHQuYm9yZGVyKSx0LnByb3RlY3Rpb24mJnRoaXMubWFwLnByb3RlY3Rpb24ucmVuZGVyKGUsdC5wcm90ZWN0aW9uKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMucmVzZXQoKSwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITB9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMCk6ZSE9PXRoaXMudGFnfHwodGhpcy5tb2RlbD17YWxpZ25tZW50OnRoaXMubWFwLmFsaWdubWVudC5tb2RlbCxib3JkZXI6dGhpcy5tYXAuYm9yZGVyLm1vZGVsLGZpbGw6dGhpcy5tYXAuZmlsbC5tb2RlbCxmb250OnRoaXMubWFwLmZvbnQubW9kZWwsbnVtRm10OnRoaXMubWFwLm51bUZtdC5tb2RlbCxwcm90ZWN0aW9uOnRoaXMubWFwLnByb3RlY3Rpb24ubW9kZWx9LCExKX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL2FsaWdubWVudC14Zm9ybVwiOjEyNixcIi4vYm9yZGVyLXhmb3JtXCI6MTI3LFwiLi9maWxsLXhmb3JtXCI6MTMwLFwiLi9mb250LXhmb3JtXCI6MTMxLFwiLi9udW1mbXQteGZvcm1cIjoxMzIsXCIuL3Byb3RlY3Rpb24teGZvcm1cIjoxMzN9XSwxMzA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4vY29sb3IteGZvcm1cIik7Y2xhc3MgcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtjb2xvcjpuZXcgaX19Z2V0IHRhZygpe3JldHVyblwic3RvcFwifXJlbmRlcihlLHQpe2Uub3Blbk5vZGUoXCJzdG9wXCIpLGUuYWRkQXR0cmlidXRlKFwicG9zaXRpb25cIix0LnBvc2l0aW9uKSx0aGlzLm1hcC5jb2xvci5yZW5kZXIoZSx0LmNvbG9yKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcInN0b3BcIjpyZXR1cm4gdGhpcy5tb2RlbD17cG9zaXRpb246cGFyc2VGbG9hdChlLmF0dHJpYnV0ZXMucG9zaXRpb24pfSwhMDtjYXNlXCJjb2xvclwiOnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcC5jb2xvcix0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoZSl7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLm1vZGVsLmNvbG9yPXRoaXMucGFyc2VyLm1vZGVsLHRoaXMucGFyc2VyPXZvaWQgMCksITApfX1jbGFzcyBvIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e2ZnQ29sb3I6bmV3IGkoXCJmZ0NvbG9yXCIpLGJnQ29sb3I6bmV3IGkoXCJiZ0NvbG9yXCIpfX1nZXQgbmFtZSgpe3JldHVyblwicGF0dGVyblwifWdldCB0YWcoKXtyZXR1cm5cInBhdHRlcm5GaWxsXCJ9cmVuZGVyKGUsdCl7ZS5vcGVuTm9kZShcInBhdHRlcm5GaWxsXCIpLGUuYWRkQXR0cmlidXRlKFwicGF0dGVyblR5cGVcIix0LnBhdHRlcm4pLHQuZmdDb2xvciYmdGhpcy5tYXAuZmdDb2xvci5yZW5kZXIoZSx0LmZnQ29sb3IpLHQuYmdDb2xvciYmdGhpcy5tYXAuYmdDb2xvci5yZW5kZXIoZSx0LmJnQ29sb3IpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwicGF0dGVybkZpbGxcIjpyZXR1cm4gdGhpcy5tb2RlbD17dHlwZTpcInBhdHRlcm5cIixwYXR0ZXJuOmUuYXR0cmlidXRlcy5wYXR0ZXJuVHlwZX0sITA7ZGVmYXVsdDpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSwhIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwKX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtyZXR1cm4hIXRoaXMucGFyc2VyJiYodGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMucGFyc2VyLm1vZGVsJiYodGhpcy5tb2RlbFtlXT10aGlzLnBhcnNlci5tb2RlbCksdGhpcy5wYXJzZXI9dm9pZCAwKSwhMCl9fWNsYXNzIGEgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLm1hcD17c3RvcDpuZXcgc319Z2V0IG5hbWUoKXtyZXR1cm5cImdyYWRpZW50XCJ9Z2V0IHRhZygpe3JldHVyblwiZ3JhZGllbnRGaWxsXCJ9cmVuZGVyKGUsdCl7c3dpdGNoKGUub3Blbk5vZGUoXCJncmFkaWVudEZpbGxcIiksdC5ncmFkaWVudCl7Y2FzZVwiYW5nbGVcIjplLmFkZEF0dHJpYnV0ZShcImRlZ3JlZVwiLHQuZGVncmVlKTticmVhaztjYXNlXCJwYXRoXCI6ZS5hZGRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJwYXRoXCIpLHQuY2VudGVyLmxlZnQmJihlLmFkZEF0dHJpYnV0ZShcImxlZnRcIix0LmNlbnRlci5sZWZ0KSx2b2lkIDA9PT10LmNlbnRlci5yaWdodCYmZS5hZGRBdHRyaWJ1dGUoXCJyaWdodFwiLHQuY2VudGVyLmxlZnQpKSx0LmNlbnRlci5yaWdodCYmZS5hZGRBdHRyaWJ1dGUoXCJyaWdodFwiLHQuY2VudGVyLnJpZ2h0KSx0LmNlbnRlci50b3AmJihlLmFkZEF0dHJpYnV0ZShcInRvcFwiLHQuY2VudGVyLnRvcCksdm9pZCAwPT09dC5jZW50ZXIuYm90dG9tJiZlLmFkZEF0dHJpYnV0ZShcImJvdHRvbVwiLHQuY2VudGVyLnRvcCkpLHQuY2VudGVyLmJvdHRvbSYmZS5hZGRBdHRyaWJ1dGUoXCJib3R0b21cIix0LmNlbnRlci5ib3R0b20pfWNvbnN0IHI9dGhpcy5tYXAuc3RvcDt0LnN0b3BzLmZvckVhY2godD0+e3IucmVuZGVyKGUsdCl9KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcImdyYWRpZW50RmlsbFwiOntjb25zdCB0PXRoaXMubW9kZWw9e3N0b3BzOltdfTtyZXR1cm4gZS5hdHRyaWJ1dGVzLmRlZ3JlZT8odC5ncmFkaWVudD1cImFuZ2xlXCIsdC5kZWdyZWU9cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLmRlZ3JlZSwxMCkpOlwicGF0aFwiPT09ZS5hdHRyaWJ1dGVzLnR5cGUmJih0LmdyYWRpZW50PVwicGF0aFwiLHQuY2VudGVyPXtsZWZ0OmUuYXR0cmlidXRlcy5sZWZ0P3BhcnNlRmxvYXQoZS5hdHRyaWJ1dGVzLmxlZnQpOjAsdG9wOmUuYXR0cmlidXRlcy50b3A/cGFyc2VGbG9hdChlLmF0dHJpYnV0ZXMudG9wKTowfSxlLmF0dHJpYnV0ZXMucmlnaHQhPT1lLmF0dHJpYnV0ZXMubGVmdCYmKHQuY2VudGVyLnJpZ2h0PWUuYXR0cmlidXRlcy5yaWdodD9wYXJzZUZsb2F0KGUuYXR0cmlidXRlcy5yaWdodCk6MCksZS5hdHRyaWJ1dGVzLmJvdHRvbSE9PWUuYXR0cmlidXRlcy50b3AmJih0LmNlbnRlci5ib3R0b209ZS5hdHRyaWJ1dGVzLmJvdHRvbT9wYXJzZUZsb2F0KGUuYXR0cmlidXRlcy5ib3R0b20pOjApKSwhMH1jYXNlXCJzdG9wXCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLnN0b3AsdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuISF0aGlzLnBhcnNlciYmKHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLm1vZGVsLnN0b3BzLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCksITApfX1jbGFzcyBsIGV4dGVuZHMgbntjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tYXA9e3BhdHRlcm5GaWxsOm5ldyBvLGdyYWRpZW50RmlsbDpuZXcgYX19Z2V0IHRhZygpe3JldHVyblwiZmlsbFwifXJlbmRlcihlLHQpe3N3aXRjaChlLmFkZFJvbGxiYWNrKCksZS5vcGVuTm9kZShcImZpbGxcIiksdC50eXBlKXtjYXNlXCJwYXR0ZXJuXCI6dGhpcy5tYXAucGF0dGVybkZpbGwucmVuZGVyKGUsdCk7YnJlYWs7Y2FzZVwiZ3JhZGllbnRcIjp0aGlzLm1hcC5ncmFkaWVudEZpbGwucmVuZGVyKGUsdCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCBlLnJvbGxiYWNrKCl9ZS5jbG9zZU5vZGUoKSxlLmNvbW1pdCgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcImZpbGxcIjpyZXR1cm4gdGhpcy5tb2RlbD17fSwhMDtkZWZhdWx0OnJldHVybiB0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLCEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITApfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe3JldHVybiEhdGhpcy5wYXJzZXImJih0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tb2RlbD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLm1vZGVsLnR5cGU9dGhpcy5wYXJzZXIubmFtZSx0aGlzLnBhcnNlcj12b2lkIDApLCEwKX12YWxpZFN0eWxlKGUpe3JldHVybiBsLnZhbGlkUGF0dGVyblZhbHVlc1tlXX19bC52YWxpZFBhdHRlcm5WYWx1ZXM9W1wibm9uZVwiLFwic29saWRcIixcImRhcmtWZXJ0aWNhbFwiLFwiZGFya0dyYXlcIixcIm1lZGl1bUdyYXlcIixcImxpZ2h0R3JheVwiLFwiZ3JheTEyNVwiLFwiZ3JheTA2MjVcIixcImRhcmtIb3Jpem9udGFsXCIsXCJkYXJrVmVydGljYWxcIixcImRhcmtEb3duXCIsXCJkYXJrVXBcIixcImRhcmtHcmlkXCIsXCJkYXJrVHJlbGxpc1wiLFwibGlnaHRIb3Jpem9udGFsXCIsXCJsaWdodFZlcnRpY2FsXCIsXCJsaWdodERvd25cIixcImxpZ2h0VXBcIixcImxpZ2h0R3JpZFwiLFwibGlnaHRUcmVsbGlzXCIsXCJsaWdodEdyaWRcIl0ucmVkdWNlKChlLHQpPT4oZVt0XT0hMCxlKSx7fSksbC5TdG9wWGZvcm09cyxsLlBhdHRlcm5GaWxsWGZvcm09byxsLkdyYWRpZW50RmlsbFhmb3JtPWEsdC5leHBvcnRzPWx9LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4vY29sb3IteGZvcm1cIjoxMjh9XSwxMzE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuL2NvbG9yLXhmb3JtXCIpLGk9ZShcIi4uL3NpbXBsZS9ib29sZWFuLXhmb3JtXCIpLHM9ZShcIi4uL3NpbXBsZS9pbnRlZ2VyLXhmb3JtXCIpLG89ZShcIi4uL3NpbXBsZS9zdHJpbmcteGZvcm1cIiksYT1lKFwiLi91bmRlcmxpbmUteGZvcm1cIiksbD1lKFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxjPWUoXCIuLi9iYXNlLXhmb3JtXCIpO2NsYXNzIHUgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5vcHRpb25zPWV8fHUuT1BUSU9OUyx0aGlzLm1hcD17Yjp7cHJvcDpcImJvbGRcIix4Zm9ybTpuZXcgaSh7dGFnOlwiYlwiLGF0dHI6XCJ2YWxcIn0pfSxpOntwcm9wOlwiaXRhbGljXCIseGZvcm06bmV3IGkoe3RhZzpcImlcIixhdHRyOlwidmFsXCJ9KX0sdTp7cHJvcDpcInVuZGVybGluZVwiLHhmb3JtOm5ldyBhfSxjaGFyc2V0Ontwcm9wOlwiY2hhcnNldFwiLHhmb3JtOm5ldyBzKHt0YWc6XCJjaGFyc2V0XCIsYXR0cjpcInZhbFwifSl9LGNvbG9yOntwcm9wOlwiY29sb3JcIix4Zm9ybTpuZXcgbn0sY29uZGVuc2U6e3Byb3A6XCJjb25kZW5zZVwiLHhmb3JtOm5ldyBpKHt0YWc6XCJjb25kZW5zZVwiLGF0dHI6XCJ2YWxcIn0pfSxleHRlbmQ6e3Byb3A6XCJleHRlbmRcIix4Zm9ybTpuZXcgaSh7dGFnOlwiZXh0ZW5kXCIsYXR0cjpcInZhbFwifSl9LGZhbWlseTp7cHJvcDpcImZhbWlseVwiLHhmb3JtOm5ldyBzKHt0YWc6XCJmYW1pbHlcIixhdHRyOlwidmFsXCJ9KX0sb3V0bGluZTp7cHJvcDpcIm91dGxpbmVcIix4Zm9ybTpuZXcgaSh7dGFnOlwib3V0bGluZVwiLGF0dHI6XCJ2YWxcIn0pfSx2ZXJ0QWxpZ246e3Byb3A6XCJ2ZXJ0QWxpZ25cIix4Zm9ybTpuZXcgbyh7dGFnOlwidmVydEFsaWduXCIsYXR0cjpcInZhbFwifSl9LHNjaGVtZTp7cHJvcDpcInNjaGVtZVwiLHhmb3JtOm5ldyBvKHt0YWc6XCJzY2hlbWVcIixhdHRyOlwidmFsXCJ9KX0sc2hhZG93Ontwcm9wOlwic2hhZG93XCIseGZvcm06bmV3IGkoe3RhZzpcInNoYWRvd1wiLGF0dHI6XCJ2YWxcIn0pfSxzdHJpa2U6e3Byb3A6XCJzdHJpa2VcIix4Zm9ybTpuZXcgaSh7dGFnOlwic3RyaWtlXCIsYXR0cjpcInZhbFwifSl9LHN6Ontwcm9wOlwic2l6ZVwiLHhmb3JtOm5ldyBzKHt0YWc6XCJzelwiLGF0dHI6XCJ2YWxcIn0pfX0sdGhpcy5tYXBbdGhpcy5vcHRpb25zLmZvbnROYW1lVGFnXT17cHJvcDpcIm5hbWVcIix4Zm9ybTpuZXcgbyh7dGFnOnRoaXMub3B0aW9ucy5mb250TmFtZVRhZyxhdHRyOlwidmFsXCJ9KX19Z2V0IHRhZygpe3JldHVybiB0aGlzLm9wdGlvbnMudGFnTmFtZX1yZW5kZXIoZSx0KXtjb25zdHttYXA6cn09dGhpcztlLm9wZW5Ob2RlKHRoaXMub3B0aW9ucy50YWdOYW1lKSxsLmVhY2godGhpcy5tYXAsKG4saSk9PntyW2ldLnhmb3JtLnJlbmRlcihlLHRbbi5wcm9wXSl9KSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2lmKHRoaXMubWFwW2UubmFtZV0pcmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0ueGZvcm0sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy5vcHRpb25zLnRhZ05hbWU6cmV0dXJuIHRoaXMubW9kZWw9e30sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlciYmIXRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSkpe2NvbnN0IHQ9dGhpcy5tYXBbZV07cmV0dXJuIHRoaXMucGFyc2VyLm1vZGVsJiYodGhpcy5tb2RlbFt0LnByb3BdPXRoaXMucGFyc2VyLm1vZGVsKSx0aGlzLnBhcnNlcj12b2lkIDAsITB9c3dpdGNoKGUpe2Nhc2UgdGhpcy5vcHRpb25zLnRhZ05hbWU6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19fXUuT1BUSU9OUz17dGFnTmFtZTpcImZvbnRcIixmb250TmFtZVRhZzpcIm5hbWVcIn0sdC5leHBvcnRzPXV9LHtcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4uL3NpbXBsZS9ib29sZWFuLXhmb3JtXCI6MTE2LFwiLi4vc2ltcGxlL2ludGVnZXIteGZvcm1cIjoxMTgsXCIuLi9zaW1wbGUvc3RyaW5nLXhmb3JtXCI6MTE5LFwiLi9jb2xvci14Zm9ybVwiOjEyOCxcIi4vdW5kZXJsaW5lLXhmb3JtXCI6MTM2fV0sMTMyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMvdW5kZXItZGFzaFwiKSxpPWUoXCIuLi8uLi9kZWZhdWx0bnVtZm9ybWF0c1wiKSxzPWUoXCIuLi9iYXNlLXhmb3JtXCIpO2NvbnN0IG89ZnVuY3Rpb24oKXtjb25zdCBlPXt9O3JldHVybiBuLmVhY2goaSwodCxyKT0+e3QuZiYmKGVbdC5mXT1wYXJzZUludChyLDEwKSl9KSxlfSgpO2NsYXNzIGEgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoKSx0aGlzLmlkPWUsdGhpcy5mb3JtYXRDb2RlPXR9Z2V0IHRhZygpe3JldHVyblwibnVtRm10XCJ9cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZShcIm51bUZtdFwiLHtudW1GbXRJZDp0LmlkLGZvcm1hdENvZGU6dC5mb3JtYXRDb2RlfSl9cGFyc2VPcGVuKGUpe3N3aXRjaChlLm5hbWUpe2Nhc2VcIm51bUZtdFwiOnJldHVybiB0aGlzLm1vZGVsPXtpZDpwYXJzZUludChlLmF0dHJpYnV0ZXMubnVtRm10SWQsMTApLGZvcm1hdENvZGU6ZS5hdHRyaWJ1dGVzLmZvcm1hdENvZGUucmVwbGFjZSgvW1xcXFxdKC4pL2csXCIkMVwiKX0sITA7ZGVmYXVsdDpyZXR1cm4hMX19cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19YS5nZXREZWZhdWx0Rm10SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG9bZV19LGEuZ2V0RGVmYXVsdEZtdENvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV0mJmlbZV0uZn0sdC5leHBvcnRzPWF9LHtcIi4uLy4uLy4uL3V0aWxzL3VuZGVyLWRhc2hcIjoyNixcIi4uLy4uL2RlZmF1bHRudW1mb3JtYXRzXCI6MzAsXCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9e2Jvb2xlYW46KGUsdCk9PnZvaWQgMD09PWU/dDplfTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2dldCB0YWcoKXtyZXR1cm5cInByb3RlY3Rpb25cIn1yZW5kZXIoZSx0KXtlLmFkZFJvbGxiYWNrKCksZS5vcGVuTm9kZShcInByb3RlY3Rpb25cIik7bGV0IHI9ITE7ZnVuY3Rpb24gbih0LG4pe3ZvaWQgMCE9PW4mJihlLmFkZEF0dHJpYnV0ZSh0LG4pLHI9ITApfW4oXCJsb2NrZWRcIixpLmJvb2xlYW4odC5sb2NrZWQsITApP3ZvaWQgMDpcIjBcIiksbihcImhpZGRlblwiLGkuYm9vbGVhbih0LmhpZGRlbiwhMSk/XCIxXCI6dm9pZCAwKSxlLmNsb3NlTm9kZSgpLHI/ZS5jb21taXQoKTplLnJvbGxiYWNrKCl9cGFyc2VPcGVuKGUpe2NvbnN0IHQ9e2xvY2tlZDohKFwiMFwiPT09ZS5hdHRyaWJ1dGVzLmxvY2tlZCksaGlkZGVuOlwiMVwiPT09ZS5hdHRyaWJ1dGVzLmhpZGRlbn0scj0hdC5sb2NrZWR8fHQuaGlkZGVuO3RoaXMubW9kZWw9cj90Om51bGx9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4vYWxpZ25tZW50LXhmb3JtXCIpLHM9ZShcIi4vcHJvdGVjdGlvbi14Zm9ybVwiKTt0LmV4cG9ydHM9Y2xhc3MgZXh0ZW5kcyBue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy54ZklkPSEoIWV8fCFlLnhmSWQpLHRoaXMubWFwPXthbGlnbm1lbnQ6bmV3IGkscHJvdGVjdGlvbjpuZXcgc319Z2V0IHRhZygpe3JldHVyblwieGZcIn1yZW5kZXIoZSx0KXtlLm9wZW5Ob2RlKFwieGZcIix7bnVtRm10SWQ6dC5udW1GbXRJZHx8MCxmb250SWQ6dC5mb250SWR8fDAsZmlsbElkOnQuZmlsbElkfHwwLGJvcmRlcklkOnQuYm9yZGVySWR8fDB9KSx0aGlzLnhmSWQmJmUuYWRkQXR0cmlidXRlKFwieGZJZFwiLHQueGZJZHx8MCksdC5udW1GbXRJZCYmZS5hZGRBdHRyaWJ1dGUoXCJhcHBseU51bWJlckZvcm1hdFwiLFwiMVwiKSx0LmZvbnRJZCYmZS5hZGRBdHRyaWJ1dGUoXCJhcHBseUZvbnRcIixcIjFcIiksdC5maWxsSWQmJmUuYWRkQXR0cmlidXRlKFwiYXBwbHlGaWxsXCIsXCIxXCIpLHQuYm9yZGVySWQmJmUuYWRkQXR0cmlidXRlKFwiYXBwbHlCb3JkZXJcIixcIjFcIiksdC5hbGlnbm1lbnQmJmUuYWRkQXR0cmlidXRlKFwiYXBwbHlBbGlnbm1lbnRcIixcIjFcIiksdC5wcm90ZWN0aW9uJiZlLmFkZEF0dHJpYnV0ZShcImFwcGx5UHJvdGVjdGlvblwiLFwiMVwiKSx0LmFsaWdubWVudCYmdGhpcy5tYXAuYWxpZ25tZW50LnJlbmRlcihlLHQuYWxpZ25tZW50KSx0LnByb3RlY3Rpb24mJnRoaXMubWFwLnByb3RlY3Rpb24ucmVuZGVyKGUsdC5wcm90ZWN0aW9uKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO3N3aXRjaChlLm5hbWUpe2Nhc2VcInhmXCI6cmV0dXJuIHRoaXMubW9kZWw9e251bUZtdElkOnBhcnNlSW50KGUuYXR0cmlidXRlcy5udW1GbXRJZCwxMCksZm9udElkOnBhcnNlSW50KGUuYXR0cmlidXRlcy5mb250SWQsMTApLGZpbGxJZDpwYXJzZUludChlLmF0dHJpYnV0ZXMuZmlsbElkLDEwKSxib3JkZXJJZDpwYXJzZUludChlLmF0dHJpYnV0ZXMuYm9yZGVySWQsMTApfSx0aGlzLnhmSWQmJih0aGlzLm1vZGVsLnhmSWQ9cGFyc2VJbnQoZS5hdHRyaWJ1dGVzLnhmSWQsMTApKSwhMDtjYXNlXCJhbGlnbm1lbnRcIjpyZXR1cm4gdGhpcy5wYXJzZXI9dGhpcy5tYXAuYWxpZ25tZW50LHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtjYXNlXCJwcm90ZWN0aW9uXCI6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwLnByb3RlY3Rpb24sdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2RlZmF1bHQ6cmV0dXJuITF9fXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7cmV0dXJuIHRoaXMucGFyc2VyPyh0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tYXAucHJvdGVjdGlvbj09PXRoaXMucGFyc2VyP3RoaXMubW9kZWwucHJvdGVjdGlvbj10aGlzLnBhcnNlci5tb2RlbDp0aGlzLm1vZGVsLmFsaWdubWVudD10aGlzLnBhcnNlci5tb2RlbCx0aGlzLnBhcnNlcj12b2lkIDApLCEwKTpcInhmXCIhPT1lfX19LHtcIi4uL2Jhc2UteGZvcm1cIjozMixcIi4vYWxpZ25tZW50LXhmb3JtXCI6MTI2LFwiLi9wcm90ZWN0aW9uLXhmb3JtXCI6MTMzfV0sMTM1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vZG9jL2VudW1zXCIpLGk9ZShcIi4uLy4uLy4uL3V0aWxzL3htbC1zdHJlYW1cIikscz1lKFwiLi4vYmFzZS14Zm9ybVwiKSxvPWUoXCIuLi9zdGF0aWMteGZvcm1cIiksYT1lKFwiLi4vbGlzdC14Zm9ybVwiKSxsPWUoXCIuL2ZvbnQteGZvcm1cIiksYz1lKFwiLi9maWxsLXhmb3JtXCIpLHU9ZShcIi4vYm9yZGVyLXhmb3JtXCIpLGg9ZShcIi4vbnVtZm10LXhmb3JtXCIpLGY9ZShcIi4vc3R5bGUteGZvcm1cIiksZD1lKFwiLi9keGYteGZvcm1cIik7Y2xhc3MgcCBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7c3VwZXIoKSx0aGlzLm1hcD17bnVtRm10czpuZXcgYSh7dGFnOlwibnVtRm10c1wiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGh9KSxmb250czpuZXcgYSh7dGFnOlwiZm9udHNcIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBsLCQ6e1wieDE0YWM6a25vd25Gb250c1wiOjF9fSksZmlsbHM6bmV3IGEoe3RhZzpcImZpbGxzXCIsY291bnQ6ITAsY2hpbGRYZm9ybTpuZXcgY30pLGJvcmRlcnM6bmV3IGEoe3RhZzpcImJvcmRlcnNcIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyB1fSksY2VsbFN0eWxlWGZzOm5ldyBhKHt0YWc6XCJjZWxsU3R5bGVYZnNcIixjb3VudDohMCxjaGlsZFhmb3JtOm5ldyBmfSksY2VsbFhmczpuZXcgYSh7dGFnOlwiY2VsbFhmc1wiLGNvdW50OiEwLGNoaWxkWGZvcm06bmV3IGYoe3hmSWQ6ITB9KX0pLGR4ZnM6bmV3IGEoe3RhZzpcImR4ZnNcIixhbHdheXM6ITAsY291bnQ6ITAsY2hpbGRYZm9ybTpuZXcgZH0pLG51bUZtdDpuZXcgaCxmb250Om5ldyBsLGZpbGw6bmV3IGMsYm9yZGVyOm5ldyB1LHN0eWxlOm5ldyBmKHt4ZklkOiEwfSksY2VsbFN0eWxlczpwLlNUQVRJQ19YRk9STVMuY2VsbFN0eWxlcyx0YWJsZVN0eWxlczpwLlNUQVRJQ19YRk9STVMudGFibGVTdHlsZXMsZXh0THN0OnAuU1RBVElDX1hGT1JNUy5leHRMc3R9LGUmJnRoaXMuaW5pdCgpfWluaXRJbmRleCgpe3RoaXMuaW5kZXg9e3N0eWxlOnt9LG51bUZtdDp7fSxudW1GbXROZXh0SWQ6MTY0LGZvbnQ6e30sYm9yZGVyOnt9LGZpbGw6e319fWluaXQoKXt0aGlzLm1vZGVsPXtzdHlsZXM6W10sbnVtRm10czpbXSxmb250czpbXSxib3JkZXJzOltdLGZpbGxzOltdLGR4ZnM6W119LHRoaXMuaW5pdEluZGV4KCksdGhpcy5fYWRkQm9yZGVyKHt9KSx0aGlzLl9hZGRTdHlsZSh7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH0pLHRoaXMuX2FkZEZpbGwoe3R5cGU6XCJwYXR0ZXJuXCIscGF0dGVybjpcIm5vbmVcIn0pLHRoaXMuX2FkZEZpbGwoe3R5cGU6XCJwYXR0ZXJuXCIscGF0dGVybjpcImdyYXkxMjVcIn0pLHRoaXMud2Vha01hcD1uZXcgV2Vha01hcH1yZW5kZXIoZSx0KXt0PXR8fHRoaXMubW9kZWwsZS5vcGVuWG1sKGkuU3RkRG9jQXR0cmlidXRlcyksZS5vcGVuTm9kZShcInN0eWxlU2hlZXRcIixwLlNUWUxFU0hFRVRfQVRUUklCVVRFUyksdGhpcy5pbmRleD8odC5udW1GbXRzJiZ0Lm51bUZtdHMubGVuZ3RoJiYoZS5vcGVuTm9kZShcIm51bUZtdHNcIix7Y291bnQ6dC5udW1GbXRzLmxlbmd0aH0pLHQubnVtRm10cy5mb3JFYWNoKHQ9PntlLndyaXRlWG1sKHQpfSksZS5jbG9zZU5vZGUoKSksdC5mb250cy5sZW5ndGh8fHRoaXMuX2FkZEZvbnQoe3NpemU6MTEsY29sb3I6e3RoZW1lOjF9LG5hbWU6XCJDYWxpYnJpXCIsZmFtaWx5OjIsc2NoZW1lOlwibWlub3JcIn0pLGUub3Blbk5vZGUoXCJmb250c1wiLHtjb3VudDp0LmZvbnRzLmxlbmd0aCxcIngxNGFjOmtub3duRm9udHNcIjoxfSksdC5mb250cy5mb3JFYWNoKHQ9PntlLndyaXRlWG1sKHQpfSksZS5jbG9zZU5vZGUoKSxlLm9wZW5Ob2RlKFwiZmlsbHNcIix7Y291bnQ6dC5maWxscy5sZW5ndGh9KSx0LmZpbGxzLmZvckVhY2godD0+e2Uud3JpdGVYbWwodCl9KSxlLmNsb3NlTm9kZSgpLGUub3Blbk5vZGUoXCJib3JkZXJzXCIse2NvdW50OnQuYm9yZGVycy5sZW5ndGh9KSx0LmJvcmRlcnMuZm9yRWFjaCh0PT57ZS53cml0ZVhtbCh0KX0pLGUuY2xvc2VOb2RlKCksdGhpcy5tYXAuY2VsbFN0eWxlWGZzLnJlbmRlcihlLFt7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH1dKSxlLm9wZW5Ob2RlKFwiY2VsbFhmc1wiLHtjb3VudDp0LnN0eWxlcy5sZW5ndGh9KSx0LnN0eWxlcy5mb3JFYWNoKHQ9PntlLndyaXRlWG1sKHQpfSksZS5jbG9zZU5vZGUoKSk6KHRoaXMubWFwLm51bUZtdHMucmVuZGVyKGUsdC5udW1GbXRzKSx0aGlzLm1hcC5mb250cy5yZW5kZXIoZSx0LmZvbnRzKSx0aGlzLm1hcC5maWxscy5yZW5kZXIoZSx0LmZpbGxzKSx0aGlzLm1hcC5ib3JkZXJzLnJlbmRlcihlLHQuYm9yZGVycyksdGhpcy5tYXAuY2VsbFN0eWxlWGZzLnJlbmRlcihlLFt7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH1dKSx0aGlzLm1hcC5jZWxsWGZzLnJlbmRlcihlLHQuc3R5bGVzKSkscC5TVEFUSUNfWEZPUk1TLmNlbGxTdHlsZXMucmVuZGVyKGUpLHRoaXMubWFwLmR4ZnMucmVuZGVyKGUsdC5keGZzKSxwLlNUQVRJQ19YRk9STVMudGFibGVTdHlsZXMucmVuZGVyKGUpLHAuU1RBVElDX1hGT1JNUy5leHRMc3QucmVuZGVyKGUpLGUuY2xvc2VOb2RlKCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7c3dpdGNoKGUubmFtZSl7Y2FzZVwic3R5bGVTaGVldFwiOnJldHVybiB0aGlzLmluaXRJbmRleCgpLCEwO2RlZmF1bHQ6cmV0dXJuIHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMH19cGFyc2VUZXh0KGUpe3RoaXMucGFyc2VyJiZ0aGlzLnBhcnNlci5wYXJzZVRleHQoZSl9cGFyc2VDbG9zZShlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VDbG9zZShlKXx8KHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKGUpe2Nhc2VcInN0eWxlU2hlZXRcIjp7dGhpcy5tb2RlbD17fTtjb25zdCBlPShlLHQpPT57dC5tb2RlbCYmdC5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsW2VdPXQubW9kZWwpfTtpZihlKFwibnVtRm10c1wiLHRoaXMubWFwLm51bUZtdHMpLGUoXCJmb250c1wiLHRoaXMubWFwLmZvbnRzKSxlKFwiZmlsbHNcIix0aGlzLm1hcC5maWxscyksZShcImJvcmRlcnNcIix0aGlzLm1hcC5ib3JkZXJzKSxlKFwic3R5bGVzXCIsdGhpcy5tYXAuY2VsbFhmcyksZShcImR4ZnNcIix0aGlzLm1hcC5keGZzKSx0aGlzLmluZGV4PXttb2RlbDpbXSxudW1GbXQ6W119LHRoaXMubW9kZWwubnVtRm10cyl7Y29uc3QgZT10aGlzLmluZGV4Lm51bUZtdDt0aGlzLm1vZGVsLm51bUZtdHMuZm9yRWFjaCh0PT57ZVt0LmlkXT10LmZvcm1hdENvZGV9KX1yZXR1cm4hMX1kZWZhdWx0OnJldHVybiEwfX1hZGRTdHlsZU1vZGVsKGUsdCl7aWYoIWUpcmV0dXJuIDA7aWYodGhpcy5tb2RlbC5mb250cy5sZW5ndGh8fHRoaXMuX2FkZEZvbnQoe3NpemU6MTEsY29sb3I6e3RoZW1lOjF9LG5hbWU6XCJDYWxpYnJpXCIsZmFtaWx5OjIsc2NoZW1lOlwibWlub3JcIn0pLHRoaXMud2Vha01hcCYmdGhpcy53ZWFrTWFwLmhhcyhlKSlyZXR1cm4gdGhpcy53ZWFrTWFwLmdldChlKTtjb25zdCByPXt9O2lmKHQ9dHx8bi5WYWx1ZVR5cGUuTnVtYmVyLGUubnVtRm10KXIubnVtRm10SWQ9dGhpcy5fYWRkTnVtRm10U3RyKGUubnVtRm10KTtlbHNlIHN3aXRjaCh0KXtjYXNlIG4uVmFsdWVUeXBlLk51bWJlcjpyLm51bUZtdElkPXRoaXMuX2FkZE51bUZtdFN0cihcIkdlbmVyYWxcIik7YnJlYWs7Y2FzZSBuLlZhbHVlVHlwZS5EYXRlOnIubnVtRm10SWQ9dGhpcy5fYWRkTnVtRm10U3RyKFwibW0tZGQteXlcIil9ZS5mb250JiYoci5mb250SWQ9dGhpcy5fYWRkRm9udChlLmZvbnQpKSxlLmJvcmRlciYmKHIuYm9yZGVySWQ9dGhpcy5fYWRkQm9yZGVyKGUuYm9yZGVyKSksZS5maWxsJiYoci5maWxsSWQ9dGhpcy5fYWRkRmlsbChlLmZpbGwpKSxlLmFsaWdubWVudCYmKHIuYWxpZ25tZW50PWUuYWxpZ25tZW50KSxlLnByb3RlY3Rpb24mJihyLnByb3RlY3Rpb249ZS5wcm90ZWN0aW9uKTtjb25zdCBpPXRoaXMuX2FkZFN0eWxlKHIpO3JldHVybiB0aGlzLndlYWtNYXAmJnRoaXMud2Vha01hcC5zZXQoZSxpKSxpfWdldFN0eWxlTW9kZWwoZSl7Y29uc3QgdD10aGlzLm1vZGVsLnN0eWxlc1tlXTtpZighdClyZXR1cm4gbnVsbDtsZXQgcj10aGlzLmluZGV4Lm1vZGVsW2VdO2lmKHIpcmV0dXJuIHI7aWYocj10aGlzLmluZGV4Lm1vZGVsW2VdPXt9LHQubnVtRm10SWQpe2NvbnN0IGU9dGhpcy5pbmRleC5udW1GbXRbdC5udW1GbXRJZF18fGguZ2V0RGVmYXVsdEZtdENvZGUodC5udW1GbXRJZCk7ZSYmKHIubnVtRm10PWUpfWZ1bmN0aW9uIG4oZSx0LG4pe2lmKG58fDA9PT1uKXtjb25zdCBpPXRbbl07aSYmKHJbZV09aSl9fXJldHVybiBuKFwiZm9udFwiLHRoaXMubW9kZWwuZm9udHMsdC5mb250SWQpLG4oXCJib3JkZXJcIix0aGlzLm1vZGVsLmJvcmRlcnMsdC5ib3JkZXJJZCksbihcImZpbGxcIix0aGlzLm1vZGVsLmZpbGxzLHQuZmlsbElkKSx0LmFsaWdubWVudCYmKHIuYWxpZ25tZW50PXQuYWxpZ25tZW50KSx0LnByb3RlY3Rpb24mJihyLnByb3RlY3Rpb249dC5wcm90ZWN0aW9uKSxyfWFkZER4ZlN0eWxlKGUpe3JldHVybiBlLm51bUZtdCYmKGUubnVtRm10SWQ9dGhpcy5fYWRkTnVtRm10U3RyKGUubnVtRm10KSksdGhpcy5tb2RlbC5keGZzLnB1c2goZSksdGhpcy5tb2RlbC5keGZzLmxlbmd0aC0xfWdldER4ZlN0eWxlKGUpe3JldHVybiB0aGlzLm1vZGVsLmR4ZnNbZV19X2FkZFN0eWxlKGUpe2NvbnN0IHQ9dGhpcy5tYXAuc3R5bGUudG9YbWwoZSk7bGV0IHI9dGhpcy5pbmRleC5zdHlsZVt0XTtyZXR1cm4gdm9pZCAwPT09ciYmKHI9dGhpcy5pbmRleC5zdHlsZVt0XT10aGlzLm1vZGVsLnN0eWxlcy5sZW5ndGgsdGhpcy5tb2RlbC5zdHlsZXMucHVzaCh0KSkscn1fYWRkTnVtRm10U3RyKGUpe2xldCB0PWguZ2V0RGVmYXVsdEZtdElkKGUpO2lmKHZvaWQgMCE9PXQpcmV0dXJuIHQ7aWYodD10aGlzLmluZGV4Lm51bUZtdFtlXSx2b2lkIDAhPT10KXJldHVybiB0O3Q9dGhpcy5pbmRleC5udW1GbXRbZV09MTY0K3RoaXMubW9kZWwubnVtRm10cy5sZW5ndGg7Y29uc3Qgcj10aGlzLm1hcC5udW1GbXQudG9YbWwoe2lkOnQsZm9ybWF0Q29kZTplfSk7cmV0dXJuIHRoaXMubW9kZWwubnVtRm10cy5wdXNoKHIpLHR9X2FkZEZvbnQoZSl7Y29uc3QgdD10aGlzLm1hcC5mb250LnRvWG1sKGUpO2xldCByPXRoaXMuaW5kZXguZm9udFt0XTtyZXR1cm4gdm9pZCAwPT09ciYmKHI9dGhpcy5pbmRleC5mb250W3RdPXRoaXMubW9kZWwuZm9udHMubGVuZ3RoLHRoaXMubW9kZWwuZm9udHMucHVzaCh0KSkscn1fYWRkQm9yZGVyKGUpe2NvbnN0IHQ9dGhpcy5tYXAuYm9yZGVyLnRvWG1sKGUpO2xldCByPXRoaXMuaW5kZXguYm9yZGVyW3RdO3JldHVybiB2b2lkIDA9PT1yJiYocj10aGlzLmluZGV4LmJvcmRlclt0XT10aGlzLm1vZGVsLmJvcmRlcnMubGVuZ3RoLHRoaXMubW9kZWwuYm9yZGVycy5wdXNoKHQpKSxyfV9hZGRGaWxsKGUpe2NvbnN0IHQ9dGhpcy5tYXAuZmlsbC50b1htbChlKTtsZXQgcj10aGlzLmluZGV4LmZpbGxbdF07cmV0dXJuIHZvaWQgMD09PXImJihyPXRoaXMuaW5kZXguZmlsbFt0XT10aGlzLm1vZGVsLmZpbGxzLmxlbmd0aCx0aGlzLm1vZGVsLmZpbGxzLnB1c2godCkpLHJ9fXAuU1RZTEVTSEVFVF9BVFRSSUJVVEVTPXt4bWxuczpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpblwiLFwieG1sbnM6bWNcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2XCIsXCJtYzpJZ25vcmFibGVcIjpcIngxNGFjIHgxNnIyXCIsXCJ4bWxuczp4MTRhY1wiOlwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hlZXRtbC8yMDA5LzkvYWNcIixcInhtbG5zOngxNnIyXCI6XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTUvMDIvbWFpblwifSxwLlNUQVRJQ19YRk9STVM9e2NlbGxTdHlsZXM6bmV3IG8oe3RhZzpcImNlbGxTdHlsZXNcIiwkOntjb3VudDoxfSxjOlt7dGFnOlwiY2VsbFN0eWxlXCIsJDp7bmFtZTpcIk5vcm1hbFwiLHhmSWQ6MCxidWlsdGluSWQ6MH19XX0pLGR4ZnM6bmV3IG8oe3RhZzpcImR4ZnNcIiwkOntjb3VudDowfX0pLHRhYmxlU3R5bGVzOm5ldyBvKHt0YWc6XCJ0YWJsZVN0eWxlc1wiLCQ6e2NvdW50OjAsZGVmYXVsdFRhYmxlU3R5bGU6XCJUYWJsZVN0eWxlTWVkaXVtMlwiLGRlZmF1bHRQaXZvdFN0eWxlOlwiUGl2b3RTdHlsZUxpZ2h0MTZcIn19KSxleHRMc3Q6bmV3IG8oe3RhZzpcImV4dExzdFwiLGM6W3t0YWc6XCJleHRcIiwkOnt1cmk6XCJ7RUI3OURFRjItODBCOC00M2U1LTk1QkQtNTRDQkRERjkwMjBDfVwiLFwieG1sbnM6eDE0XCI6XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9tYWluXCJ9LGM6W3t0YWc6XCJ4MTQ6c2xpY2VyU3R5bGVzXCIsJDp7ZGVmYXVsdFNsaWNlclN0eWxlOlwiU2xpY2VyU3R5bGVMaWdodDFcIn19XX0se3RhZzpcImV4dFwiLCQ6e3VyaTpcIns5MjYwQTUxMC1GMzAxLTQ2YTgtODYzNS1GNTEyRDY0QkU1RjV9XCIsXCJ4bWxuczp4MTVcIjpcImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxMC8xMS9tYWluXCJ9LGM6W3t0YWc6XCJ4MTU6dGltZWxpbmVTdHlsZXNcIiwkOntkZWZhdWx0VGltZWxpbmVTdHlsZTpcIlRpbWVTbGljZXJTdHlsZUxpZ2h0MVwifX1dfV19KX07cC5Nb2NrPWNsYXNzIGV4dGVuZHMgcHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5tb2RlbD17c3R5bGVzOlt7bnVtRm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowLHhmSWQ6MH1dLG51bUZtdHM6W10sZm9udHM6W3tzaXplOjExLGNvbG9yOnt0aGVtZToxfSxuYW1lOlwiQ2FsaWJyaVwiLGZhbWlseToyLHNjaGVtZTpcIm1pbm9yXCJ9XSxib3JkZXJzOlt7fV0sZmlsbHM6W3t0eXBlOlwicGF0dGVyblwiLHBhdHRlcm46XCJub25lXCJ9LHt0eXBlOlwicGF0dGVyblwiLHBhdHRlcm46XCJncmF5MTI1XCJ9XX19cGFyc2VTdHJlYW0oZSl7cmV0dXJuIGUuYXV0b2RyYWluKCksUHJvbWlzZS5yZXNvbHZlKCl9YWRkU3R5bGVNb2RlbChlLHQpe3N3aXRjaCh0KXtjYXNlIG4uVmFsdWVUeXBlLkRhdGU6cmV0dXJuIHRoaXMuZGF0ZVN0eWxlSWQ7ZGVmYXVsdDpyZXR1cm4gMH19Z2V0IGRhdGVTdHlsZUlkKCl7aWYoIXRoaXMuX2RhdGVTdHlsZUlkKXtjb25zdCBlPXtudW1GbXRJZDpoLmdldERlZmF1bHRGbXRJZChcIm1tLWRkLXl5XCIpfTt0aGlzLl9kYXRlU3R5bGVJZD10aGlzLm1vZGVsLnN0eWxlcy5sZW5ndGgsdGhpcy5tb2RlbC5zdHlsZXMucHVzaChlKX1yZXR1cm4gdGhpcy5fZGF0ZVN0eWxlSWR9Z2V0U3R5bGVNb2RlbCgpe3JldHVybnt9fX0sdC5leHBvcnRzPXB9LHtcIi4uLy4uLy4uL2RvYy9lbnVtc1wiOjcsXCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9saXN0LXhmb3JtXCI6NzEsXCIuLi9zdGF0aWMteGZvcm1cIjoxMjAsXCIuL2JvcmRlci14Zm9ybVwiOjEyNyxcIi4vZHhmLXhmb3JtXCI6MTI5LFwiLi9maWxsLXhmb3JtXCI6MTMwLFwiLi9mb250LXhmb3JtXCI6MTMxLFwiLi9udW1mbXQteGZvcm1cIjoxMzIsXCIuL3N0eWxlLXhmb3JtXCI6MTM0fV0sMTM2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vYmFzZS14Zm9ybVwiKTtjbGFzcyBpIGV4dGVuZHMgbntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMubW9kZWw9ZX1nZXQgdGFnKCl7cmV0dXJuXCJ1XCJ9cmVuZGVyKGUsdCl7aWYoITA9PT0odD10fHx0aGlzLm1vZGVsKSllLmxlYWZOb2RlKFwidVwiKTtlbHNle2NvbnN0IHI9aS5BdHRyaWJ1dGVzW3RdO3ImJmUubGVhZk5vZGUoXCJ1XCIscil9fXBhcnNlT3BlbihlKXtcInVcIj09PWUubmFtZSYmKHRoaXMubW9kZWw9ZS5hdHRyaWJ1dGVzLnZhbHx8ITApfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fWkuQXR0cmlidXRlcz17c2luZ2xlOnt9LGRvdWJsZTp7dmFsOlwiZG91YmxlXCJ9LHNpbmdsZUFjY291bnRpbmc6e3ZhbDpcInNpbmdsZUFjY291bnRpbmdcIn0sZG91YmxlQWNjb3VudGluZzp7dmFsOlwiZG91YmxlQWNjb3VudGluZ1wifX0sdC5leHBvcnRzPWl9LHtcIi4uL2Jhc2UteGZvcm1cIjozMn1dLDEzNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcIi4uL2Jhc2UteGZvcm1cIiksaT1lKFwiLi9maWx0ZXItY29sdW1uLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtmaWx0ZXJDb2x1bW46bmV3IGl9fWdldCB0YWcoKXtyZXR1cm5cImF1dG9GaWx0ZXJcIn1wcmVwYXJlKGUpe2UuY29sdW1ucy5mb3JFYWNoKChlLHQpPT57dGhpcy5tYXAuZmlsdGVyQ29sdW1uLnByZXBhcmUoZSx7aW5kZXg6dH0pfSl9cmVuZGVyKGUsdCl7cmV0dXJuIGUub3Blbk5vZGUodGhpcy50YWcse3JlZjp0LmF1dG9GaWx0ZXJSZWZ9KSx0LmNvbHVtbnMuZm9yRWFjaCh0PT57dGhpcy5tYXAuZmlsdGVyQ29sdW1uLnJlbmRlcihlLHQpfSksZS5jbG9zZU5vZGUoKSwhMH1wYXJzZU9wZW4oZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlT3BlbihlKSwhMDtzd2l0Y2goZS5uYW1lKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsPXthdXRvRmlsdGVyUmVmOmUuYXR0cmlidXRlcy5yZWYsY29sdW1uczpbXX0sITA7ZGVmYXVsdDppZih0aGlzLnBhcnNlcj10aGlzLm1hcFtlLm5hbWVdLHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlT3BlbihlKSwhMDt0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlT3BlbjogXCIrSlNPTi5zdHJpbmdpZnkoZSkpfX1wYXJzZVRleHQoZSl7dGhpcy5wYXJzZXImJnRoaXMucGFyc2VyLnBhcnNlVGV4dChlKX1wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5tb2RlbC5jb2x1bW5zLnB1c2godGhpcy5wYXJzZXIubW9kZWwpLHRoaXMucGFyc2VyPXZvaWQgMCksITA7c3dpdGNoKGUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuITE7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHhtbCBub2RlIGluIHBhcnNlQ2xvc2U6IFwiK2UpfX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuL2ZpbHRlci1jb2x1bW4teGZvcm1cIjoxMzl9XSwxMzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiY3VzdG9tRmlsdGVyXCJ9cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZSh0aGlzLnRhZyx7dmFsOnQudmFsLG9wZXJhdG9yOnQub3BlcmF0b3J9KX1wYXJzZU9wZW4oZSl7cmV0dXJuIGUubmFtZT09PXRoaXMudGFnJiYodGhpcy5tb2RlbD17dmFsOmUuYXR0cmlidXRlcy52YWwsb3BlcmF0b3I6ZS5hdHRyaWJ1dGVzLm9wZXJhdG9yfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxMzk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpLGk9ZShcIi4uL2xpc3QteGZvcm1cIikscz1lKFwiLi9jdXN0b20tZmlsdGVyLXhmb3JtXCIpLG89ZShcIi4vZmlsdGVyLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXtjdXN0b21GaWx0ZXJzOm5ldyBpKHt0YWc6XCJjdXN0b21GaWx0ZXJzXCIsY291bnQ6ITEsZW1wdHk6ITAsY2hpbGRYZm9ybTpuZXcgc30pLGZpbHRlcnM6bmV3IGkoe3RhZzpcImZpbHRlcnNcIixjb3VudDohMSxlbXB0eTohMCxjaGlsZFhmb3JtOm5ldyBvfSl9fWdldCB0YWcoKXtyZXR1cm5cImZpbHRlckNvbHVtblwifXByZXBhcmUoZSx0KXtlLmNvbElkPXQuaW5kZXgudG9TdHJpbmcoKX1yZW5kZXIoZSx0KXtyZXR1cm4gdC5jdXN0b21GaWx0ZXJzPyhlLm9wZW5Ob2RlKHRoaXMudGFnLHtjb2xJZDp0LmNvbElkLGhpZGRlbkJ1dHRvbjp0LmZpbHRlckJ1dHRvbj9cIjBcIjpcIjFcIn0pLHRoaXMubWFwLmN1c3RvbUZpbHRlcnMucmVuZGVyKGUsdC5jdXN0b21GaWx0ZXJzKSxlLmNsb3NlTm9kZSgpLCEwKTooZS5sZWFmTm9kZSh0aGlzLnRhZyx7Y29sSWQ6dC5jb2xJZCxoaWRkZW5CdXR0b246dC5maWx0ZXJCdXR0b24/XCIwXCI6XCIxXCJ9KSwhMCl9cGFyc2VPcGVuKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZU9wZW4oZSksITA7Y29uc3R7YXR0cmlidXRlczp0fT1lO3N3aXRjaChlLm5hbWUpe2Nhc2UgdGhpcy50YWc6cmV0dXJuIHRoaXMubW9kZWw9e2ZpbHRlckJ1dHRvbjpcIjBcIj09PXQuaGlkZGVuQnV0dG9ufSwhMDtkZWZhdWx0OmlmKHRoaXMucGFyc2VyPXRoaXMubWFwW2UubmFtZV0sdGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VPcGVuKGUpLCEwO3Rocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgeG1sIG5vZGUgaW4gcGFyc2VPcGVuOiBcIitKU09OLnN0cmluZ2lmeShlKSl9fXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKGUpe2lmKHRoaXMucGFyc2VyKXJldHVybiB0aGlzLnBhcnNlci5wYXJzZUNsb3NlKGUpfHwodGhpcy5wYXJzZXI9dm9pZCAwKSwhMDtzd2l0Y2goZSl7Y2FzZSB0aGlzLnRhZzpyZXR1cm4gdGhpcy5tb2RlbC5jdXN0b21GaWx0ZXJzPXRoaXMubWFwLmN1c3RvbUZpbHRlcnMubW9kZWwsITE7ZGVmYXVsdDpyZXR1cm4hMH19fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyLFwiLi4vbGlzdC14Zm9ybVwiOjcxLFwiLi9jdXN0b20tZmlsdGVyLXhmb3JtXCI6MTM4LFwiLi9maWx0ZXIteGZvcm1cIjoxNDB9XSwxNDA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwiZmlsdGVyXCJ9cmVuZGVyKGUsdCl7ZS5sZWFmTm9kZSh0aGlzLnRhZyx7dmFsOnQudmFsfSl9cGFyc2VPcGVuKGUpe3JldHVybiBlLm5hbWU9PT10aGlzLnRhZyYmKHRoaXMubW9kZWw9e3ZhbDplLmF0dHJpYnV0ZXMudmFsfSwhMCl9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxNDE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwidGFibGVDb2x1bW5cIn1wcmVwYXJlKGUsdCl7ZS5pZD10LmluZGV4KzF9cmVuZGVyKGUsdCl7cmV0dXJuIGUubGVhZk5vZGUodGhpcy50YWcse2lkOnQuaWQudG9TdHJpbmcoKSxuYW1lOnQubmFtZSx0b3RhbHNSb3dMYWJlbDp0LnRvdGFsc1Jvd0xhYmVsLHRvdGFsc1Jvd0Z1bmN0aW9uOnQudG90YWxzUm93RnVuY3Rpb24sZHhmSWQ6dC5keGZJZH0pLCEwfXBhcnNlT3BlbihlKXtpZihlLm5hbWU9PT10aGlzLnRhZyl7Y29uc3R7YXR0cmlidXRlczp0fT1lO3JldHVybiB0aGlzLm1vZGVsPXtuYW1lOnQubmFtZSx0b3RhbHNSb3dMYWJlbDp0LnRvdGFsc1Jvd0xhYmVsLHRvdGFsc1Jvd0Z1bmN0aW9uOnQudG90YWxzUm93RnVuY3Rpb24sZHhmSWQ6dC5keGZJZH0sITB9cmV0dXJuITF9cGFyc2VUZXh0KCl7fXBhcnNlQ2xvc2UoKXtyZXR1cm4hMX19fSx7XCIuLi9iYXNlLXhmb3JtXCI6MzJ9XSwxNDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlLXhmb3JtXCIpO3QuZXhwb3J0cz1jbGFzcyBleHRlbmRzIG57Z2V0IHRhZygpe3JldHVyblwidGFibGVTdHlsZUluZm9cIn1yZW5kZXIoZSx0KXtyZXR1cm4gZS5sZWFmTm9kZSh0aGlzLnRhZyx7bmFtZTp0LnRoZW1lP3QudGhlbWU6dm9pZCAwLHNob3dGaXJzdENvbHVtbjp0LnNob3dGaXJzdENvbHVtbj9cIjFcIjpcIjBcIixzaG93TGFzdENvbHVtbjp0LnNob3dMYXN0Q29sdW1uP1wiMVwiOlwiMFwiLHNob3dSb3dTdHJpcGVzOnQuc2hvd1Jvd1N0cmlwZXM/XCIxXCI6XCIwXCIsc2hvd0NvbHVtblN0cmlwZXM6dC5zaG93Q29sdW1uU3RyaXBlcz9cIjFcIjpcIjBcIn0pLCEwfXBhcnNlT3BlbihlKXtpZihlLm5hbWU9PT10aGlzLnRhZyl7Y29uc3R7YXR0cmlidXRlczp0fT1lO3JldHVybiB0aGlzLm1vZGVsPXt0aGVtZTp0Lm5hbWU/dC5uYW1lOm51bGwsc2hvd0ZpcnN0Q29sdW1uOlwiMVwiPT09dC5zaG93Rmlyc3RDb2x1bW4sc2hvd0xhc3RDb2x1bW46XCIxXCI9PT10LnNob3dMYXN0Q29sdW1uLHNob3dSb3dTdHJpcGVzOlwiMVwiPT09dC5zaG93Um93U3RyaXBlcyxzaG93Q29sdW1uU3RyaXBlczpcIjFcIj09PXQuc2hvd0NvbHVtblN0cmlwZXN9LCEwfXJldHVybiExfXBhcnNlVGV4dCgpe31wYXJzZUNsb3NlKCl7cmV0dXJuITF9fX0se1wiLi4vYmFzZS14Zm9ybVwiOjMyfV0sMTQzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi4vLi4vLi4vdXRpbHMveG1sLXN0cmVhbVwiKSxpPWUoXCIuLi9iYXNlLXhmb3JtXCIpLHM9ZShcIi4uL2xpc3QteGZvcm1cIiksbz1lKFwiLi9hdXRvLWZpbHRlci14Zm9ybVwiKSxhPWUoXCIuL3RhYmxlLWNvbHVtbi14Zm9ybVwiKSxsPWUoXCIuL3RhYmxlLXN0eWxlLWluZm8teGZvcm1cIik7Y2xhc3MgYyBleHRlbmRzIGl7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMubWFwPXthdXRvRmlsdGVyOm5ldyBvLHRhYmxlQ29sdW1uczpuZXcgcyh7dGFnOlwidGFibGVDb2x1bW5zXCIsY291bnQ6ITAsZW1wdHk6ITAsY2hpbGRYZm9ybTpuZXcgYX0pLHRhYmxlU3R5bGVJbmZvOm5ldyBsfX1wcmVwYXJlKGUsdCl7dGhpcy5tYXAuYXV0b0ZpbHRlci5wcmVwYXJlKGUpLHRoaXMubWFwLnRhYmxlQ29sdW1ucy5wcmVwYXJlKGUuY29sdW1ucyx0KX1nZXQgdGFnKCl7cmV0dXJuXCJ0YWJsZVwifXJlbmRlcihlLHQpe2Uub3BlblhtbChuLlN0ZERvY0F0dHJpYnV0ZXMpLGUub3Blbk5vZGUodGhpcy50YWcsey4uLmMuVEFCTEVfQVRUUklCVVRFUyxpZDp0LmlkLG5hbWU6dC5uYW1lLGRpc3BsYXlOYW1lOnQuZGlzcGxheU5hbWV8fHQubmFtZSxyZWY6dC50YWJsZVJlZix0b3RhbHNSb3dDb3VudDp0LnRvdGFsc1Jvdz9cIjFcIjp2b2lkIDAsdG90YWxzUm93U2hvd246dC50b3RhbHNSb3c/dm9pZCAwOlwiMVwiLGhlYWRlclJvd0NvdW50OnQuaGVhZGVyUm93P1wiMVwiOlwiMFwifSksdGhpcy5tYXAuYXV0b0ZpbHRlci5yZW5kZXIoZSx0KSx0aGlzLm1hcC50YWJsZUNvbHVtbnMucmVuZGVyKGUsdC5jb2x1bW5zKSx0aGlzLm1hcC50YWJsZVN0eWxlSW5mby5yZW5kZXIoZSx0LnN0eWxlKSxlLmNsb3NlTm9kZSgpfXBhcnNlT3BlbihlKXtpZih0aGlzLnBhcnNlcilyZXR1cm4gdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpLCEwO2NvbnN0e25hbWU6dCxhdHRyaWJ1dGVzOnJ9PWU7c3dpdGNoKHQpe2Nhc2UgdGhpcy50YWc6dGhpcy5yZXNldCgpLHRoaXMubW9kZWw9e25hbWU6ci5uYW1lLGRpc3BsYXlOYW1lOnIuZGlzcGxheU5hbWV8fHIubmFtZSx0YWJsZVJlZjpyLnJlZix0b3RhbHNSb3c6XCIxXCI9PT1yLnRvdGFsc1Jvd0NvdW50LGhlYWRlclJvdzpcIjFcIj09PXIuaGVhZGVyUm93Q291bnR9O2JyZWFrO2RlZmF1bHQ6dGhpcy5wYXJzZXI9dGhpcy5tYXBbZS5uYW1lXSx0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VPcGVuKGUpfXJldHVybiEwfXBhcnNlVGV4dChlKXt0aGlzLnBhcnNlciYmdGhpcy5wYXJzZXIucGFyc2VUZXh0KGUpfXBhcnNlQ2xvc2UoZSl7aWYodGhpcy5wYXJzZXIpcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlQ2xvc2UoZSl8fCh0aGlzLnBhcnNlcj12b2lkIDApLCEwO3N3aXRjaChlKXtjYXNlIHRoaXMudGFnOnJldHVybiB0aGlzLm1vZGVsLmNvbHVtbnM9dGhpcy5tYXAudGFibGVDb2x1bW5zLm1vZGVsLHRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwmJih0aGlzLm1vZGVsLmF1dG9GaWx0ZXJSZWY9dGhpcy5tYXAuYXV0b0ZpbHRlci5tb2RlbC5hdXRvRmlsdGVyUmVmLHRoaXMubWFwLmF1dG9GaWx0ZXIubW9kZWwuY29sdW1ucy5mb3JFYWNoKChlLHQpPT57dGhpcy5tb2RlbC5jb2x1bW5zW3RdLmZpbHRlckJ1dHRvbj1lLmZpbHRlckJ1dHRvbn0pKSx0aGlzLm1vZGVsLnN0eWxlPXRoaXMubWFwLnRhYmxlU3R5bGVJbmZvLm1vZGVsLCExO2RlZmF1bHQ6cmV0dXJuITB9fXJlY29uY2lsZShlLHQpe2UuY29sdW1ucy5mb3JFYWNoKGU9Pnt2b2lkIDAhPT1lLmR4ZklkJiYoZS5zdHlsZT10LnN0eWxlcy5nZXREeGZTdHlsZShlLmR4ZklkKSl9KX19Yy5UQUJMRV9BVFRSSUJVVEVTPXt4bWxuczpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpblwiLFwieG1sbnM6bWNcIjpcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2XCIsXCJtYzpJZ25vcmFibGVcIjpcInhyIHhyM1wiLFwieG1sbnM6eHJcIjpcImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxNC9yZXZpc2lvblwiLFwieG1sbnM6eHIzXCI6XCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMTYvcmV2aXNpb24zXCJ9LHQuZXhwb3J0cz1jfSx7XCIuLi8uLi8uLi91dGlscy94bWwtc3RyZWFtXCI6MjgsXCIuLi9iYXNlLXhmb3JtXCI6MzIsXCIuLi9saXN0LXhmb3JtXCI6NzEsXCIuL2F1dG8tZmlsdGVyLXhmb3JtXCI6MTM3LFwiLi90YWJsZS1jb2x1bW4teGZvcm1cIjoxNDEsXCIuL3RhYmxlLXN0eWxlLWluZm8teGZvcm1cIjoxNDJ9XSwxNDQ6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24ocixuKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtjb25zdCBpPWUoXCJmc1wiKSxzPWUoXCJqc3ppcFwiKSx7UGFzc1Rocm91Z2g6b309ZShcInJlYWRhYmxlLXN0cmVhbVwiKSxhPWUoXCIuLi91dGlscy96aXAtc3RyZWFtXCIpLGw9ZShcIi4uL3V0aWxzL3N0cmVhbS1idWZcIiksYz1lKFwiLi4vdXRpbHMvdXRpbHNcIiksdT1lKFwiLi4vdXRpbHMveG1sLXN0cmVhbVwiKSx7YnVmZmVyVG9TdHJpbmc6aH09ZShcIi4uL3V0aWxzL2Jyb3dzZXItYnVmZmVyLWRlY29kZVwiKSxmPWUoXCIuL3hmb3JtL3N0eWxlL3N0eWxlcy14Zm9ybVwiKSxkPWUoXCIuL3hmb3JtL2NvcmUvY29yZS14Zm9ybVwiKSxwPWUoXCIuL3hmb3JtL3N0cmluZ3Mvc2hhcmVkLXN0cmluZ3MteGZvcm1cIiksbT1lKFwiLi94Zm9ybS9jb3JlL3JlbGF0aW9uc2hpcHMteGZvcm1cIiksYj1lKFwiLi94Zm9ybS9jb3JlL2NvbnRlbnQtdHlwZXMteGZvcm1cIiksZz1lKFwiLi94Zm9ybS9jb3JlL2FwcC14Zm9ybVwiKSx5PWUoXCIuL3hmb3JtL2Jvb2svd29ya2Jvb2steGZvcm1cIiksdj1lKFwiLi94Zm9ybS9zaGVldC93b3Jrc2hlZXQteGZvcm1cIiksdz1lKFwiLi94Zm9ybS9kcmF3aW5nL2RyYXdpbmcteGZvcm1cIiksXz1lKFwiLi94Zm9ybS90YWJsZS90YWJsZS14Zm9ybVwiKSx4PWUoXCIuL3hmb3JtL2NvbW1lbnQvY29tbWVudHMteGZvcm1cIiksaz1lKFwiLi94Zm9ybS9jb21tZW50L3ZtbC1ub3Rlcy14Zm9ybVwiKSxTPWUoXCIuL3htbC90aGVtZTFcIik7Y2xhc3MgTXtjb25zdHJ1Y3RvcihlKXt0aGlzLndvcmtib29rPWV9YXN5bmMgcmVhZEZpbGUoZSx0KXtpZighYXdhaXQgYy5mcy5leGlzdHMoZSkpdGhyb3cgbmV3IEVycm9yKFwiRmlsZSBub3QgZm91bmQ6IFwiK2UpO2NvbnN0IHI9aS5jcmVhdGVSZWFkU3RyZWFtKGUpO3RyeXtjb25zdCBlPWF3YWl0IHRoaXMucmVhZChyLHQpO3JldHVybiByLmNsb3NlKCksZX1jYXRjaChlKXt0aHJvdyByLmNsb3NlKCksZX19cGFyc2VSZWxzKGUpe3JldHVybihuZXcgbSkucGFyc2VTdHJlYW0oZSl9cGFyc2VXb3JrYm9vayhlKXtyZXR1cm4obmV3IHkpLnBhcnNlU3RyZWFtKGUpfXBhcnNlU2hhcmVkU3RyaW5ncyhlKXtyZXR1cm4obmV3IHApLnBhcnNlU3RyZWFtKGUpfXJlY29uY2lsZShlLHQpe2NvbnN0IHI9bmV3IHksbj1uZXcgdih0KSxpPW5ldyB3LHM9bmV3IF87ci5yZWNvbmNpbGUoZSk7Y29uc3Qgbz17bWVkaWE6ZS5tZWRpYSxtZWRpYUluZGV4OmUubWVkaWFJbmRleH07T2JqZWN0LmtleXMoZS5kcmF3aW5ncykuZm9yRWFjaCh0PT57Y29uc3Qgcj1lLmRyYXdpbmdzW3RdLG49ZS5kcmF3aW5nUmVsc1t0XTtuJiYoby5yZWxzPW4ucmVkdWNlKChlLHQpPT4oZVt0LklkXT10LGUpLHt9KSwoci5hbmNob3JzfHxbXSkuZm9yRWFjaChlPT57Y29uc3QgdD1lLnBpY3R1cmUmJmUucGljdHVyZS5oeXBlcmxpbmtzO3QmJm8ucmVsc1t0LnJJZF0mJih0Lmh5cGVybGluaz1vLnJlbHNbdC5ySWRdLlRhcmdldCxkZWxldGUgdC5ySWQpfSksaS5yZWNvbmNpbGUocixvKSl9KTtjb25zdCBhPXtzdHlsZXM6ZS5zdHlsZXN9O09iamVjdC52YWx1ZXMoZS50YWJsZXMpLmZvckVhY2goZT0+e3MucmVjb25jaWxlKGUsYSl9KTtjb25zdCBsPXtzdHlsZXM6ZS5zdHlsZXMsc2hhcmVkU3RyaW5nczplLnNoYXJlZFN0cmluZ3MsbWVkaWE6ZS5tZWRpYSxtZWRpYUluZGV4OmUubWVkaWFJbmRleCxkYXRlMTkwNDplLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5kYXRlMTkwNCxkcmF3aW5nczplLmRyYXdpbmdzLGNvbW1lbnRzOmUuY29tbWVudHMsdGFibGVzOmUudGFibGVzLHZtbERyYXdpbmdzOmUudm1sRHJhd2luZ3N9O2Uud29ya3NoZWV0cy5mb3JFYWNoKHQ9Pnt0LnJlbGF0aW9uc2hpcHM9ZS53b3Jrc2hlZXRSZWxzW3Quc2hlZXROb10sbi5yZWNvbmNpbGUodCxsKX0pLGRlbGV0ZSBlLndvcmtzaGVldEhhc2gsZGVsZXRlIGUud29ya3NoZWV0UmVscyxkZWxldGUgZS5nbG9iYWxSZWxzLGRlbGV0ZSBlLnNoYXJlZFN0cmluZ3MsZGVsZXRlIGUud29ya2Jvb2tSZWxzLGRlbGV0ZSBlLnNoZWV0RGVmcyxkZWxldGUgZS5zdHlsZXMsZGVsZXRlIGUubWVkaWFJbmRleCxkZWxldGUgZS5kcmF3aW5ncyxkZWxldGUgZS5kcmF3aW5nUmVscyxkZWxldGUgZS52bWxEcmF3aW5nc31hc3luYyBfcHJvY2Vzc1dvcmtzaGVldEVudHJ5KGUsdCxyLG4saSl7Y29uc3Qgcz1uZXcgdihuKSxvPWF3YWl0IHMucGFyc2VTdHJlYW0oZSk7by5zaGVldE5vPXIsdC53b3Jrc2hlZXRIYXNoW2ldPW8sdC53b3Jrc2hlZXRzLnB1c2gobyl9YXN5bmMgX3Byb2Nlc3NDb21tZW50RW50cnkoZSx0LHIpe2NvbnN0IG49bmV3IHgsaT1hd2FpdCBuLnBhcnNlU3RyZWFtKGUpO3QuY29tbWVudHNbYC4uLyR7cn0ueG1sYF09aX1hc3luYyBfcHJvY2Vzc1RhYmxlRW50cnkoZSx0LHIpe2NvbnN0IG49bmV3IF8saT1hd2FpdCBuLnBhcnNlU3RyZWFtKGUpO3QudGFibGVzW2AuLi90YWJsZXMvJHtyfS54bWxgXT1pfWFzeW5jIF9wcm9jZXNzV29ya3NoZWV0UmVsc0VudHJ5KGUsdCxyKXtjb25zdCBuPW5ldyBtLGk9YXdhaXQgbi5wYXJzZVN0cmVhbShlKTt0LndvcmtzaGVldFJlbHNbcl09aX1hc3luYyBfcHJvY2Vzc01lZGlhRW50cnkoZSx0LHIpe2NvbnN0IG49ci5sYXN0SW5kZXhPZihcIi5cIik7aWYobj49MSl7Y29uc3QgaT1yLnN1YnN0cihuKzEpLHM9ci5zdWJzdHIoMCxuKTthd2FpdCBuZXcgUHJvbWlzZSgobixvKT0+e2NvbnN0IGE9bmV3IGw7YS5vbihcImZpbmlzaFwiLCgpPT57dC5tZWRpYUluZGV4W3JdPXQubWVkaWEubGVuZ3RoLHQubWVkaWFJbmRleFtzXT10Lm1lZGlhLmxlbmd0aDtjb25zdCBlPXt0eXBlOlwiaW1hZ2VcIixuYW1lOnMsZXh0ZW5zaW9uOmksYnVmZmVyOmEudG9CdWZmZXIoKX07dC5tZWRpYS5wdXNoKGUpLG4oKX0pLGUub24oXCJlcnJvclwiLGU9PntvKGUpfSksZS5waXBlKGEpfSl9fWFzeW5jIF9wcm9jZXNzRHJhd2luZ0VudHJ5KGUsdCxyKXtjb25zdCBuPW5ldyB3LGk9YXdhaXQgbi5wYXJzZVN0cmVhbShlKTt0LmRyYXdpbmdzW3JdPWl9YXN5bmMgX3Byb2Nlc3NEcmF3aW5nUmVsc0VudHJ5KGUsdCxyKXtjb25zdCBuPW5ldyBtLGk9YXdhaXQgbi5wYXJzZVN0cmVhbShlKTt0LmRyYXdpbmdSZWxzW3JdPWl9YXN5bmMgX3Byb2Nlc3NWbWxEcmF3aW5nRW50cnkoZSx0LHIpe2NvbnN0IG49bmV3IGssaT1hd2FpdCBuLnBhcnNlU3RyZWFtKGUpO3Qudm1sRHJhd2luZ3NbYC4uL2RyYXdpbmdzLyR7cn0udm1sYF09aX1hc3luYyBfcHJvY2Vzc1RoZW1lRW50cnkoZSx0LHIpe2F3YWl0IG5ldyBQcm9taXNlKChuLGkpPT57Y29uc3Qgcz1uZXcgbDtlLm9uKFwiZXJyb3JcIixpKSxzLm9uKFwiZXJyb3JcIixpKSxzLm9uKFwiZmluaXNoXCIsKCk9Pnt0LnRoZW1lc1tyXT1zLnJlYWQoKS50b1N0cmluZygpLG4oKX0pLGUucGlwZShzKX0pfWNyZWF0ZUlucHV0U3RyZWFtKCl7dGhyb3cgbmV3IEVycm9yKFwiYFhMU1gjY3JlYXRlSW5wdXRTdHJlYW1gIGlzIGRlcHJlY2F0ZWQuIFlvdSBzaG91bGQgdXNlIGBYTFNYI3JlYWRgIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2ZXJzaW9uIDUuMC4gUGxlYXNlIGZvbGxvdyB1cGdyYWRlIGluc3RydWN0aW9uOiBodHRwczovL2dpdGh1Yi5jb20vZXhjZWxqcy9leGNlbGpzL2Jsb2IvbWFzdGVyL1VQR1JBREUtNC4wLm1kXCIpfWFzeW5jIHJlYWQoZSx0KXshZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0mJmUucGlwZSYmKGU9ZS5waXBlKG5ldyBvKSk7Y29uc3Qgcj1bXTtmb3IgYXdhaXQoY29uc3QgdCBvZiBlKXIucHVzaCh0KTtyZXR1cm4gdGhpcy5sb2FkKG4uY29uY2F0KHIpLHQpfWFzeW5jIGxvYWQoZSx0KXtsZXQgaTtpPXQmJnQuYmFzZTY0P24uZnJvbShlLnRvU3RyaW5nKCksXCJiYXNlNjRcIik6ZTtjb25zdCBhPXt3b3Jrc2hlZXRzOltdLHdvcmtzaGVldEhhc2g6e30sd29ya3NoZWV0UmVsczpbXSx0aGVtZXM6e30sbWVkaWE6W10sbWVkaWFJbmRleDp7fSxkcmF3aW5nczp7fSxkcmF3aW5nUmVsczp7fSxjb21tZW50czp7fSx0YWJsZXM6e30sdm1sRHJhd2luZ3M6e319LGw9YXdhaXQgcy5sb2FkQXN5bmMoaSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyhsLmZpbGVzKSlpZighZS5kaXIpe2xldCBuLGk9ZS5uYW1lO2lmKFwiL1wiPT09aVswXSYmKGk9aS5zdWJzdHIoMSkpLGkubWF0Y2goL3hsXFwvbWVkaWFcXC8vKXx8aS5tYXRjaCgveGxcXC90aGVtZVxcLyhbYS16QS1aMC05XSspWy5deG1sLykpbj1uZXcgbyxuLndyaXRlKGF3YWl0IGUuYXN5bmMoXCJub2RlYnVmZmVyXCIpKTtlbHNle2xldCB0O249bmV3IG8oe3dyaXRhYmxlT2JqZWN0TW9kZTohMCxyZWFkYWJsZU9iamVjdE1vZGU6ITB9KSx0PXIuYnJvd3Nlcj9oKGF3YWl0IGUuYXN5bmMoXCJub2RlYnVmZmVyXCIpKTphd2FpdCBlLmFzeW5jKFwic3RyaW5nXCIpO2NvbnN0IGk9MTYzODQ7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz1pKW4ud3JpdGUodC5zdWJzdHJpbmcoZSxlK2kpKX1zd2l0Y2gobi5lbmQoKSxpKXtjYXNlXCJfcmVscy8ucmVsc1wiOmEuZ2xvYmFsUmVscz1hd2FpdCB0aGlzLnBhcnNlUmVscyhuKTticmVhaztjYXNlXCJ4bC93b3JrYm9vay54bWxcIjp7Y29uc3QgZT1hd2FpdCB0aGlzLnBhcnNlV29ya2Jvb2sobik7YS5zaGVldHM9ZS5zaGVldHMsYS5kZWZpbmVkTmFtZXM9ZS5kZWZpbmVkTmFtZXMsYS52aWV3cz1lLnZpZXdzLGEucHJvcGVydGllcz1lLnByb3BlcnRpZXMsYS5jYWxjUHJvcGVydGllcz1lLmNhbGNQcm9wZXJ0aWVzO2JyZWFrfWNhc2VcInhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzXCI6YS53b3JrYm9va1JlbHM9YXdhaXQgdGhpcy5wYXJzZVJlbHMobik7YnJlYWs7Y2FzZVwieGwvc2hhcmVkU3RyaW5ncy54bWxcIjphLnNoYXJlZFN0cmluZ3M9bmV3IHAsYXdhaXQgYS5zaGFyZWRTdHJpbmdzLnBhcnNlU3RyZWFtKG4pO2JyZWFrO2Nhc2VcInhsL3N0eWxlcy54bWxcIjphLnN0eWxlcz1uZXcgZixhd2FpdCBhLnN0eWxlcy5wYXJzZVN0cmVhbShuKTticmVhaztjYXNlXCJkb2NQcm9wcy9hcHAueG1sXCI6e2NvbnN0IGU9bmV3IGcsdD1hd2FpdCBlLnBhcnNlU3RyZWFtKG4pO2EuY29tcGFueT10LmNvbXBhbnksYS5tYW5hZ2VyPXQubWFuYWdlcjticmVha31jYXNlXCJkb2NQcm9wcy9jb3JlLnhtbFwiOntjb25zdCBlPW5ldyBkLHQ9YXdhaXQgZS5wYXJzZVN0cmVhbShuKTtPYmplY3QuYXNzaWduKGEsdCk7YnJlYWt9ZGVmYXVsdDp7bGV0IGU9aS5tYXRjaCgveGxcXC93b3Jrc2hlZXRzXFwvc2hlZXQoXFxkKylbLl14bWwvKTtpZihlKXthd2FpdCB0aGlzLl9wcm9jZXNzV29ya3NoZWV0RW50cnkobixhLGVbMV0sdCxpKTticmVha31pZihlPWkubWF0Y2goL3hsXFwvd29ya3NoZWV0c1xcL19yZWxzXFwvc2hlZXQoXFxkKylbLl14bWwucmVscy8pLGUpe2F3YWl0IHRoaXMuX3Byb2Nlc3NXb3Jrc2hlZXRSZWxzRW50cnkobixhLGVbMV0pO2JyZWFrfWlmKGU9aS5tYXRjaCgveGxcXC90aGVtZVxcLyhbYS16QS1aMC05XSspWy5deG1sLyksZSl7YXdhaXQgdGhpcy5fcHJvY2Vzc1RoZW1lRW50cnkobixhLGVbMV0pO2JyZWFrfWlmKGU9aS5tYXRjaCgveGxcXC9tZWRpYVxcLyhbYS16QS1aMC05XStbLl1bYS16QS1aMC05XXszLDR9KSQvKSxlKXthd2FpdCB0aGlzLl9wcm9jZXNzTWVkaWFFbnRyeShuLGEsZVsxXSk7YnJlYWt9aWYoZT1pLm1hdGNoKC94bFxcL2RyYXdpbmdzXFwvKFthLXpBLVowLTldKylbLl14bWwvKSxlKXthd2FpdCB0aGlzLl9wcm9jZXNzRHJhd2luZ0VudHJ5KG4sYSxlWzFdKTticmVha31pZihlPWkubWF0Y2goL3hsXFwvKGNvbW1lbnRzXFxkKylbLl14bWwvKSxlKXthd2FpdCB0aGlzLl9wcm9jZXNzQ29tbWVudEVudHJ5KG4sYSxlWzFdKTticmVha31pZihlPWkubWF0Y2goL3hsXFwvdGFibGVzXFwvKHRhYmxlXFxkKylbLl14bWwvKSxlKXthd2FpdCB0aGlzLl9wcm9jZXNzVGFibGVFbnRyeShuLGEsZVsxXSk7YnJlYWt9aWYoZT1pLm1hdGNoKC94bFxcL2RyYXdpbmdzXFwvX3JlbHNcXC8oW2EtekEtWjAtOV0rKVsuXXhtbFsuXXJlbHMvKSxlKXthd2FpdCB0aGlzLl9wcm9jZXNzRHJhd2luZ1JlbHNFbnRyeShuLGEsZVsxXSk7YnJlYWt9aWYoZT1pLm1hdGNoKC94bFxcL2RyYXdpbmdzXFwvKHZtbERyYXdpbmdcXGQrKVsuXXZtbC8pLGUpe2F3YWl0IHRoaXMuX3Byb2Nlc3NWbWxEcmF3aW5nRW50cnkobixhLGVbMV0pO2JyZWFrfX19fXJldHVybiB0aGlzLnJlY29uY2lsZShhLHQpLHRoaXMud29ya2Jvb2subW9kZWw9YSx0aGlzLndvcmtib29rfWFzeW5jIGFkZE1lZGlhKGUsdCl7YXdhaXQgUHJvbWlzZS5hbGwodC5tZWRpYS5tYXAoYXN5bmMgdD0+e2lmKFwiaW1hZ2VcIj09PXQudHlwZSl7Y29uc3Qgcj1geGwvbWVkaWEvJHt0Lm5hbWV9LiR7dC5leHRlbnNpb259YDtpZih0LmZpbGVuYW1lKXtjb25zdCBuPWF3YWl0IGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKChyLG4pPT57aS5yZWFkRmlsZShlLHQsKGUsdCk9PntlP24oZSk6cih0KX0pfSl9KHQuZmlsZW5hbWUpO3JldHVybiBlLmFwcGVuZChuLHtuYW1lOnJ9KX1pZih0LmJ1ZmZlcilyZXR1cm4gZS5hcHBlbmQodC5idWZmZXIse25hbWU6cn0pO2lmKHQuYmFzZTY0KXtjb25zdCBuPXQuYmFzZTY0LGk9bi5zdWJzdHJpbmcobi5pbmRleE9mKFwiLFwiKSsxKTtyZXR1cm4gZS5hcHBlbmQoaSx7bmFtZTpyLGJhc2U2NDohMH0pfX10aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBtZWRpYVwiKX0pKX1hZGREcmF3aW5ncyhlLHQpe2NvbnN0IHI9bmV3IHcsbj1uZXcgbTt0LndvcmtzaGVldHMuZm9yRWFjaCh0PT57Y29uc3R7ZHJhd2luZzppfT10O2lmKGkpe3IucHJlcGFyZShpLHt9KTtsZXQgdD1yLnRvWG1sKGkpO2UuYXBwZW5kKHQse25hbWU6YHhsL2RyYXdpbmdzLyR7aS5uYW1lfS54bWxgfSksdD1uLnRvWG1sKGkucmVscyksZS5hcHBlbmQodCx7bmFtZTpgeGwvZHJhd2luZ3MvX3JlbHMvJHtpLm5hbWV9LnhtbC5yZWxzYH0pfX0pfWFkZFRhYmxlcyhlLHQpe2NvbnN0IHI9bmV3IF87dC53b3Jrc2hlZXRzLmZvckVhY2godD0+e2NvbnN0e3RhYmxlczpufT10O24uZm9yRWFjaCh0PT57ci5wcmVwYXJlKHQse30pO2NvbnN0IG49ci50b1htbCh0KTtlLmFwcGVuZChuLHtuYW1lOlwieGwvdGFibGVzL1wiK3QudGFyZ2V0fSl9KX0pfWFzeW5jIGFkZENvbnRlbnRUeXBlcyhlLHQpe2NvbnN0IHI9KG5ldyBiKS50b1htbCh0KTtlLmFwcGVuZChyLHtuYW1lOlwiW0NvbnRlbnRfVHlwZXNdLnhtbFwifSl9YXN5bmMgYWRkQXBwKGUsdCl7Y29uc3Qgcj0obmV3IGcpLnRvWG1sKHQpO2UuYXBwZW5kKHIse25hbWU6XCJkb2NQcm9wcy9hcHAueG1sXCJ9KX1hc3luYyBhZGRDb3JlKGUsdCl7Y29uc3Qgcj1uZXcgZDtlLmFwcGVuZChyLnRvWG1sKHQpLHtuYW1lOlwiZG9jUHJvcHMvY29yZS54bWxcIn0pfWFzeW5jIGFkZFRoZW1lcyhlLHQpe2NvbnN0IHI9dC50aGVtZXN8fHt0aGVtZTE6U307T2JqZWN0LmtleXMocikuZm9yRWFjaCh0PT57Y29uc3Qgbj1yW3RdLGk9YHhsL3RoZW1lLyR7dH0ueG1sYDtlLmFwcGVuZChuLHtuYW1lOml9KX0pfWFzeW5jIGFkZE9mZmljZVJlbHMoZSl7Y29uc3QgdD0obmV3IG0pLnRvWG1sKFt7SWQ6XCJySWQxXCIsVHlwZTpNLlJlbFR5cGUuT2ZmaWNlRG9jdW1lbnQsVGFyZ2V0OlwieGwvd29ya2Jvb2sueG1sXCJ9LHtJZDpcInJJZDJcIixUeXBlOk0uUmVsVHlwZS5Db3JlUHJvcGVydGllcyxUYXJnZXQ6XCJkb2NQcm9wcy9jb3JlLnhtbFwifSx7SWQ6XCJySWQzXCIsVHlwZTpNLlJlbFR5cGUuRXh0ZW5kZXJQcm9wZXJ0aWVzLFRhcmdldDpcImRvY1Byb3BzL2FwcC54bWxcIn1dKTtlLmFwcGVuZCh0LHtuYW1lOlwiX3JlbHMvLnJlbHNcIn0pfWFzeW5jIGFkZFdvcmtib29rUmVscyhlLHQpe2xldCByPTE7Y29uc3Qgbj1be0lkOlwicklkXCIrcisrLFR5cGU6TS5SZWxUeXBlLlN0eWxlcyxUYXJnZXQ6XCJzdHlsZXMueG1sXCJ9LHtJZDpcInJJZFwiK3IrKyxUeXBlOk0uUmVsVHlwZS5UaGVtZSxUYXJnZXQ6XCJ0aGVtZS90aGVtZTEueG1sXCJ9XTt0LnNoYXJlZFN0cmluZ3MuY291bnQmJm4ucHVzaCh7SWQ6XCJySWRcIityKyssVHlwZTpNLlJlbFR5cGUuU2hhcmVkU3RyaW5ncyxUYXJnZXQ6XCJzaGFyZWRTdHJpbmdzLnhtbFwifSksdC53b3Jrc2hlZXRzLmZvckVhY2goZT0+e2UucklkPVwicklkXCIrcisrLG4ucHVzaCh7SWQ6ZS5ySWQsVHlwZTpNLlJlbFR5cGUuV29ya3NoZWV0LFRhcmdldDpgd29ya3NoZWV0cy9zaGVldCR7ZS5pZH0ueG1sYH0pfSk7Y29uc3QgaT0obmV3IG0pLnRvWG1sKG4pO2UuYXBwZW5kKGkse25hbWU6XCJ4bC9fcmVscy93b3JrYm9vay54bWwucmVsc1wifSl9YXN5bmMgYWRkU2hhcmVkU3RyaW5ncyhlLHQpe3Quc2hhcmVkU3RyaW5ncyYmdC5zaGFyZWRTdHJpbmdzLmNvdW50JiZlLmFwcGVuZCh0LnNoYXJlZFN0cmluZ3MueG1sLHtuYW1lOlwieGwvc2hhcmVkU3RyaW5ncy54bWxcIn0pfWFzeW5jIGFkZFN0eWxlcyhlLHQpe2NvbnN0e3htbDpyfT10LnN0eWxlcztyJiZlLmFwcGVuZChyLHtuYW1lOlwieGwvc3R5bGVzLnhtbFwifSl9YXN5bmMgYWRkV29ya2Jvb2soZSx0KXtjb25zdCByPW5ldyB5O2UuYXBwZW5kKHIudG9YbWwodCkse25hbWU6XCJ4bC93b3JrYm9vay54bWxcIn0pfWFzeW5jIGFkZFdvcmtzaGVldHMoZSx0KXtjb25zdCByPW5ldyB2LG49bmV3IG0saT1uZXcgeCxzPW5ldyBrO3Qud29ya3NoZWV0cy5mb3JFYWNoKHQ9PntsZXQgbz1uZXcgdTtyLnJlbmRlcihvLHQpLGUuYXBwZW5kKG8ueG1sLHtuYW1lOmB4bC93b3Jrc2hlZXRzL3NoZWV0JHt0LmlkfS54bWxgfSksdC5yZWxzJiZ0LnJlbHMubGVuZ3RoJiYobz1uZXcgdSxuLnJlbmRlcihvLHQucmVscyksZS5hcHBlbmQoby54bWwse25hbWU6YHhsL3dvcmtzaGVldHMvX3JlbHMvc2hlZXQke3QuaWR9LnhtbC5yZWxzYH0pKSx0LmNvbW1lbnRzLmxlbmd0aD4wJiYobz1uZXcgdSxpLnJlbmRlcihvLHQpLGUuYXBwZW5kKG8ueG1sLHtuYW1lOmB4bC9jb21tZW50cyR7dC5pZH0ueG1sYH0pLG89bmV3IHUscy5yZW5kZXIobyx0KSxlLmFwcGVuZChvLnhtbCx7bmFtZTpgeGwvZHJhd2luZ3Mvdm1sRHJhd2luZyR7dC5pZH0udm1sYH0pKX0pfV9maW5hbGl6ZShlKXtyZXR1cm4gbmV3IFByb21pc2UoKHQscik9PntlLm9uKFwiZmluaXNoXCIsKCk9Pnt0KHRoaXMpfSksZS5vbihcImVycm9yXCIsciksZS5maW5hbGl6ZSgpfSl9cHJlcGFyZU1vZGVsKGUsdCl7ZS5jcmVhdG9yPWUuY3JlYXRvcnx8XCJFeGNlbEpTXCIsZS5sYXN0TW9kaWZpZWRCeT1lLmxhc3RNb2RpZmllZEJ5fHxcIkV4Y2VsSlNcIixlLmNyZWF0ZWQ9ZS5jcmVhdGVkfHxuZXcgRGF0ZSxlLm1vZGlmaWVkPWUubW9kaWZpZWR8fG5ldyBEYXRlLGUudXNlU2hhcmVkU3RyaW5ncz12b2lkIDA9PT10LnVzZVNoYXJlZFN0cmluZ3N8fHQudXNlU2hhcmVkU3RyaW5ncyxlLnVzZVN0eWxlcz12b2lkIDA9PT10LnVzZVN0eWxlc3x8dC51c2VTdHlsZXMsZS5zaGFyZWRTdHJpbmdzPW5ldyBwLGUuc3R5bGVzPWUudXNlU3R5bGVzP25ldyBmKCEwKTpuZXcgZi5Nb2NrO2NvbnN0IHI9bmV3IHksbj1uZXcgdjtyLnByZXBhcmUoZSk7Y29uc3QgaT17c2hhcmVkU3RyaW5nczplLnNoYXJlZFN0cmluZ3Msc3R5bGVzOmUuc3R5bGVzLGRhdGUxOTA0OmUucHJvcGVydGllcy5kYXRlMTkwNCxkcmF3aW5nc0NvdW50OjAsbWVkaWE6ZS5tZWRpYX07aS5kcmF3aW5ncz1lLmRyYXdpbmdzPVtdLGkuY29tbWVudFJlZnM9ZS5jb21tZW50UmVmcz1bXTtsZXQgcz0wO2UudGFibGVzPVtdLGUud29ya3NoZWV0cy5mb3JFYWNoKHQ9Pnt0LnRhYmxlcy5mb3JFYWNoKHQ9PntzKyssdC50YXJnZXQ9YHRhYmxlJHtzfS54bWxgLHQuaWQ9cyxlLnRhYmxlcy5wdXNoKHQpfSksbi5wcmVwYXJlKHQsaSl9KX1hc3luYyB3cml0ZShlLHQpe3Q9dHx8e307Y29uc3R7bW9kZWw6cn09dGhpcy53b3JrYm9vayxuPW5ldyBhLlppcFdyaXRlcih0LnppcCk7cmV0dXJuIG4ucGlwZShlKSx0aGlzLnByZXBhcmVNb2RlbChyLHQpLGF3YWl0IHRoaXMuYWRkQ29udGVudFR5cGVzKG4sciksYXdhaXQgdGhpcy5hZGRPZmZpY2VSZWxzKG4sciksYXdhaXQgdGhpcy5hZGRXb3JrYm9va1JlbHMobixyKSxhd2FpdCB0aGlzLmFkZFdvcmtzaGVldHMobixyKSxhd2FpdCB0aGlzLmFkZFNoYXJlZFN0cmluZ3MobixyKSxhd2FpdCB0aGlzLmFkZERyYXdpbmdzKG4sciksYXdhaXQgdGhpcy5hZGRUYWJsZXMobixyKSxhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5hZGRUaGVtZXMobixyKSx0aGlzLmFkZFN0eWxlcyhuLHIpXSksYXdhaXQgdGhpcy5hZGRNZWRpYShuLHIpLGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmFkZEFwcChuLHIpLHRoaXMuYWRkQ29yZShuLHIpXSksYXdhaXQgdGhpcy5hZGRXb3JrYm9vayhuLHIpLHRoaXMuX2ZpbmFsaXplKG4pfXdyaXRlRmlsZShlLHQpe2NvbnN0IHI9aS5jcmVhdGVXcml0ZVN0cmVhbShlKTtyZXR1cm4gbmV3IFByb21pc2UoKGUsbik9PntyLm9uKFwiZmluaXNoXCIsKCk9PntlKCl9KSxyLm9uKFwiZXJyb3JcIixlPT57bihlKX0pLHRoaXMud3JpdGUocix0KS50aGVuKCgpPT57ci5lbmQoKX0pLmNhdGNoKGU9PntuKGUpfSl9KX1hc3luYyB3cml0ZUJ1ZmZlcihlKXtjb25zdCB0PW5ldyBsO3JldHVybiBhd2FpdCB0aGlzLndyaXRlKHQsZSksdC5yZWFkKCl9fU0uUmVsVHlwZT1lKFwiLi9yZWwtdHlwZVwiKSx0LmV4cG9ydHM9TX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpLGUoXCJidWZmZXJcIikuQnVmZmVyKX0se1wiLi4vdXRpbHMvYnJvd3Nlci1idWZmZXItZGVjb2RlXCI6MTYsXCIuLi91dGlscy9zdHJlYW0tYnVmXCI6MjQsXCIuLi91dGlscy91dGlsc1wiOjI3LFwiLi4vdXRpbHMveG1sLXN0cmVhbVwiOjI4LFwiLi4vdXRpbHMvemlwLXN0cmVhbVwiOjI5LFwiLi9yZWwtdHlwZVwiOjMxLFwiLi94Zm9ybS9ib29rL3dvcmtib29rLXhmb3JtXCI6MzgsXCIuL3hmb3JtL2NvbW1lbnQvY29tbWVudHMteGZvcm1cIjo0MCxcIi4veGZvcm0vY29tbWVudC92bWwtbm90ZXMteGZvcm1cIjo0NSxcIi4veGZvcm0vY29yZS9hcHAteGZvcm1cIjo1MSxcIi4veGZvcm0vY29yZS9jb250ZW50LXR5cGVzLXhmb3JtXCI6NTIsXCIuL3hmb3JtL2NvcmUvY29yZS14Zm9ybVwiOjUzLFwiLi94Zm9ybS9jb3JlL3JlbGF0aW9uc2hpcHMteGZvcm1cIjo1NSxcIi4veGZvcm0vZHJhd2luZy9kcmF3aW5nLXhmb3JtXCI6NjIsXCIuL3hmb3JtL3NoZWV0L3dvcmtzaGVldC14Zm9ybVwiOjExNSxcIi4veGZvcm0vc3RyaW5ncy9zaGFyZWQtc3RyaW5ncy14Zm9ybVwiOjEyNCxcIi4veGZvcm0vc3R5bGUvc3R5bGVzLXhmb3JtXCI6MTM1LFwiLi94Zm9ybS90YWJsZS90YWJsZS14Zm9ybVwiOjE0MyxcIi4veG1sL3RoZW1lMVwiOjE0NSxfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMCxmczoyMTYsanN6aXA6NDQxLFwicmVhZGFibGUtc3RyZWFtXCI6NDkxfV0sMTQ1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPSc8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiIHN0YW5kYWxvbmU9XCJ5ZXNcIj8+XFxuPGE6dGhlbWUgeG1sbnM6YT1cImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluXCIgbmFtZT1cIk9mZmljZSBUaGVtZVwiPiA8YTp0aGVtZUVsZW1lbnRzPiA8YTpjbHJTY2hlbWUgbmFtZT1cIk9mZmljZVwiPiA8YTpkazE+IDxhOnN5c0NsciB2YWw9XCJ3aW5kb3dUZXh0XCIgbGFzdENscj1cIjAwMDAwMFwiLz4gPC9hOmRrMT4gPGE6bHQxPiA8YTpzeXNDbHIgdmFsPVwid2luZG93XCIgbGFzdENscj1cIkZGRkZGRlwiLz4gPC9hOmx0MT4gPGE6ZGsyPiA8YTpzcmdiQ2xyIHZhbD1cIjFGNDk3RFwiLz4gPC9hOmRrMj4gPGE6bHQyPiA8YTpzcmdiQ2xyIHZhbD1cIkVFRUNFMVwiLz4gPC9hOmx0Mj4gPGE6YWNjZW50MT4gPGE6c3JnYkNsciB2YWw9XCI0RjgxQkRcIi8+IDwvYTphY2NlbnQxPiA8YTphY2NlbnQyPiA8YTpzcmdiQ2xyIHZhbD1cIkMwNTA0RFwiLz4gPC9hOmFjY2VudDI+IDxhOmFjY2VudDM+IDxhOnNyZ2JDbHIgdmFsPVwiOUJCQjU5XCIvPiA8L2E6YWNjZW50Mz4gPGE6YWNjZW50ND4gPGE6c3JnYkNsciB2YWw9XCI4MDY0QTJcIi8+IDwvYTphY2NlbnQ0PiA8YTphY2NlbnQ1PiA8YTpzcmdiQ2xyIHZhbD1cIjRCQUNDNlwiLz4gPC9hOmFjY2VudDU+IDxhOmFjY2VudDY+IDxhOnNyZ2JDbHIgdmFsPVwiRjc5NjQ2XCIvPiA8L2E6YWNjZW50Nj4gPGE6aGxpbms+IDxhOnNyZ2JDbHIgdmFsPVwiMDAwMEZGXCIvPiA8L2E6aGxpbms+IDxhOmZvbEhsaW5rPiA8YTpzcmdiQ2xyIHZhbD1cIjgwMDA4MFwiLz4gPC9hOmZvbEhsaW5rPiA8L2E6Y2xyU2NoZW1lPiA8YTpmb250U2NoZW1lIG5hbWU9XCJPZmZpY2VcIj4gPGE6bWFqb3JGb250PiA8YTpsYXRpbiB0eXBlZmFjZT1cIkNhbWJyaWFcIi8+IDxhOmVhIHR5cGVmYWNlPVwiXCIvPiA8YTpjcyB0eXBlZmFjZT1cIlwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJKcGFuXCIgdHlwZWZhY2U9XCJcXHVmZjJkXFx1ZmYzMyBcXHVmZjMwXFx1MzBiNFxcdTMwYjdcXHUzMGMzXFx1MzBhZlwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW5nXCIgdHlwZWZhY2U9XCJcXHViOWQxXFx1Yzc0MCBcXHVhY2UwXFx1YjUxNVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCJcXHU1YjhiXFx1NGY1M1wiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCJcXHU2NWIwXFx1N2QzMFxcdTY2MGVcXHU5YWQ0XCIvPiA8YTpmb250IHNjcmlwdD1cIkFyYWJcIiB0eXBlZmFjZT1cIlRpbWVzIE5ldyBSb21hblwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIZWJyXCIgdHlwZWZhY2U9XCJUaW1lcyBOZXcgUm9tYW5cIi8+IDxhOmZvbnQgc2NyaXB0PVwiVGhhaVwiIHR5cGVmYWNlPVwiVGFob21hXCIvPiA8YTpmb250IHNjcmlwdD1cIkV0aGlcIiB0eXBlZmFjZT1cIk55YWxhXCIvPiA8YTpmb250IHNjcmlwdD1cIkJlbmdcIiB0eXBlZmFjZT1cIlZyaW5kYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJHdWpyXCIgdHlwZWZhY2U9XCJTaHJ1dGlcIi8+IDxhOmZvbnQgc2NyaXB0PVwiS2htclwiIHR5cGVmYWNlPVwiTW9vbEJvcmFuXCIvPiA8YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPiA8YTpmb250IHNjcmlwdD1cIkd1cnVcIiB0eXBlZmFjZT1cIlJhYXZpXCIvPiA8YTpmb250IHNjcmlwdD1cIkNhbnNcIiB0eXBlZmFjZT1cIkV1cGhlbWlhXCIvPiA8YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPiA8YTpmb250IHNjcmlwdD1cIllpaWlcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBZaSBCYWl0aVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJUaWJ0XCIgdHlwZWZhY2U9XCJNaWNyb3NvZnQgSGltYWxheWFcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJEZXZhXCIgdHlwZWZhY2U9XCJNYW5nYWxcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVGVsdVwiIHR5cGVmYWNlPVwiR2F1dGFtaVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJTeXJjXCIgdHlwZWZhY2U9XCJFc3RyYW5nZWxvIEVkZXNzYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJPcnlhXCIgdHlwZWZhY2U9XCJLYWxpbmdhXCIvPiA8YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+IDxhOmZvbnQgc2NyaXB0PVwiTGFvb1wiIHR5cGVmYWNlPVwiRG9rQ2hhbXBhXCIvPiA8YTpmb250IHNjcmlwdD1cIlNpbmhcIiB0eXBlZmFjZT1cIklza29vbGEgUG90YVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVmlldFwiIHR5cGVmYWNlPVwiVGltZXMgTmV3IFJvbWFuXCIvPiA8YTpmb250IHNjcmlwdD1cIlVpZ2hcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBVaWdodXJcIi8+IDxhOmZvbnQgc2NyaXB0PVwiR2VvclwiIHR5cGVmYWNlPVwiU3lsZmFlblwiLz4gPC9hOm1ham9yRm9udD4gPGE6bWlub3JGb250PiA8YTpsYXRpbiB0eXBlZmFjZT1cIkNhbGlicmlcIi8+IDxhOmVhIHR5cGVmYWNlPVwiXCIvPiA8YTpjcyB0eXBlZmFjZT1cIlwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJKcGFuXCIgdHlwZWZhY2U9XCJcXHVmZjJkXFx1ZmYzMyBcXHVmZjMwXFx1MzBiNFxcdTMwYjdcXHUzMGMzXFx1MzBhZlwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW5nXCIgdHlwZWZhY2U9XCJcXHViOWQxXFx1Yzc0MCBcXHVhY2UwXFx1YjUxNVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW5zXCIgdHlwZWZhY2U9XCJcXHU1YjhiXFx1NGY1M1wiLz4gPGE6Zm9udCBzY3JpcHQ9XCJIYW50XCIgdHlwZWZhY2U9XCJcXHU2NWIwXFx1N2QzMFxcdTY2MGVcXHU5YWQ0XCIvPiA8YTpmb250IHNjcmlwdD1cIkFyYWJcIiB0eXBlZmFjZT1cIkFyaWFsXCIvPiA8YTpmb250IHNjcmlwdD1cIkhlYnJcIiB0eXBlZmFjZT1cIkFyaWFsXCIvPiA8YTpmb250IHNjcmlwdD1cIlRoYWlcIiB0eXBlZmFjZT1cIlRhaG9tYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJFdGhpXCIgdHlwZWZhY2U9XCJOeWFsYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJCZW5nXCIgdHlwZWZhY2U9XCJWcmluZGFcIi8+IDxhOmZvbnQgc2NyaXB0PVwiR3VqclwiIHR5cGVmYWNlPVwiU2hydXRpXCIvPiA8YTpmb250IHNjcmlwdD1cIktobXJcIiB0eXBlZmFjZT1cIkRhdW5QZW5oXCIvPiA8YTpmb250IHNjcmlwdD1cIktuZGFcIiB0eXBlZmFjZT1cIlR1bmdhXCIvPiA8YTpmb250IHNjcmlwdD1cIkd1cnVcIiB0eXBlZmFjZT1cIlJhYXZpXCIvPiA8YTpmb250IHNjcmlwdD1cIkNhbnNcIiB0eXBlZmFjZT1cIkV1cGhlbWlhXCIvPiA8YTpmb250IHNjcmlwdD1cIkNoZXJcIiB0eXBlZmFjZT1cIlBsYW50YWdlbmV0IENoZXJva2VlXCIvPiA8YTpmb250IHNjcmlwdD1cIllpaWlcIiB0eXBlZmFjZT1cIk1pY3Jvc29mdCBZaSBCYWl0aVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJUaWJ0XCIgdHlwZWZhY2U9XCJNaWNyb3NvZnQgSGltYWxheWFcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVGhhYVwiIHR5cGVmYWNlPVwiTVYgQm9saVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJEZXZhXCIgdHlwZWZhY2U9XCJNYW5nYWxcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVGVsdVwiIHR5cGVmYWNlPVwiR2F1dGFtaVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJUYW1sXCIgdHlwZWZhY2U9XCJMYXRoYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJTeXJjXCIgdHlwZWZhY2U9XCJFc3RyYW5nZWxvIEVkZXNzYVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJPcnlhXCIgdHlwZWZhY2U9XCJLYWxpbmdhXCIvPiA8YTpmb250IHNjcmlwdD1cIk1seW1cIiB0eXBlZmFjZT1cIkthcnRpa2FcIi8+IDxhOmZvbnQgc2NyaXB0PVwiTGFvb1wiIHR5cGVmYWNlPVwiRG9rQ2hhbXBhXCIvPiA8YTpmb250IHNjcmlwdD1cIlNpbmhcIiB0eXBlZmFjZT1cIklza29vbGEgUG90YVwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJNb25nXCIgdHlwZWZhY2U9XCJNb25nb2xpYW4gQmFpdGlcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVmlldFwiIHR5cGVmYWNlPVwiQXJpYWxcIi8+IDxhOmZvbnQgc2NyaXB0PVwiVWlnaFwiIHR5cGVmYWNlPVwiTWljcm9zb2Z0IFVpZ2h1clwiLz4gPGE6Zm9udCBzY3JpcHQ9XCJHZW9yXCIgdHlwZWZhY2U9XCJTeWxmYWVuXCIvPiA8L2E6bWlub3JGb250PiA8L2E6Zm9udFNjaGVtZT4gPGE6Zm10U2NoZW1lIG5hbWU9XCJPZmZpY2VcIj4gPGE6ZmlsbFN0eWxlTHN0PiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz4gPC9hOnNvbGlkRmlsbD4gPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPVwiMVwiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPVwiMFwiPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj4gPGE6dGludCB2YWw9XCI1MDAwMFwiLz4gPGE6c2F0TW9kIHZhbD1cIjMwMDAwMFwiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9XCIzNTAwMFwiPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj4gPGE6dGludCB2YWw9XCIzNzAwMFwiLz4gPGE6c2F0TW9kIHZhbD1cIjMwMDAwMFwiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9XCIxMDAwMDBcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+IDxhOnRpbnQgdmFsPVwiMTUwMDBcIi8+IDxhOnNhdE1vZCB2YWw9XCIzNTAwMDBcIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpsaW4gYW5nPVwiMTYyMDAwMDBcIiBzY2FsZWQ9XCIxXCIvPiA8L2E6Z3JhZEZpbGw+IDxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT1cIjFcIj4gPGE6Z3NMc3Q+IDxhOmdzIHBvcz1cIjBcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+IDxhOnRpbnQgdmFsPVwiMTAwMDAwXCIvPiA8YTpzaGFkZSB2YWw9XCIxMDAwMDBcIi8+IDxhOnNhdE1vZCB2YWw9XCIxMzAwMDBcIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPVwiMTAwMDAwXCI+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPiA8YTp0aW50IHZhbD1cIjUwMDAwXCIvPiA8YTpzaGFkZSB2YWw9XCIxMDAwMDBcIi8+IDxhOnNhdE1vZCB2YWw9XCIzNTAwMDBcIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpsaW4gYW5nPVwiMTYyMDAwMDBcIiBzY2FsZWQ9XCIwXCIvPiA8L2E6Z3JhZEZpbGw+IDwvYTpmaWxsU3R5bGVMc3Q+IDxhOmxuU3R5bGVMc3Q+IDxhOmxuIHc9XCI5NTI1XCIgY2FwPVwiZmxhdFwiIGNtcGQ9XCJzbmdcIiBhbGduPVwiY3RyXCI+IDxhOnNvbGlkRmlsbD4gPGE6c2NoZW1lQ2xyIHZhbD1cInBoQ2xyXCI+IDxhOnNoYWRlIHZhbD1cIjk1MDAwXCIvPiA8YTpzYXRNb2QgdmFsPVwiMTA1MDAwXCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6c29saWRGaWxsPiA8YTpwcnN0RGFzaCB2YWw9XCJzb2xpZFwiLz4gPC9hOmxuPiA8YTpsbiB3PVwiMjU0MDBcIiBjYXA9XCJmbGF0XCIgY21wZD1cInNuZ1wiIGFsZ249XCJjdHJcIj4gPGE6c29saWRGaWxsPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIi8+IDwvYTpzb2xpZEZpbGw+IDxhOnByc3REYXNoIHZhbD1cInNvbGlkXCIvPiA8L2E6bG4+IDxhOmxuIHc9XCIzODEwMFwiIGNhcD1cImZsYXRcIiBjbXBkPVwic25nXCIgYWxnbj1cImN0clwiPiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz4gPC9hOnNvbGlkRmlsbD4gPGE6cHJzdERhc2ggdmFsPVwic29saWRcIi8+IDwvYTpsbj4gPC9hOmxuU3R5bGVMc3Q+IDxhOmVmZmVjdFN0eWxlTHN0PiA8YTplZmZlY3RTdHlsZT4gPGE6ZWZmZWN0THN0PiA8YTpvdXRlclNoZHcgYmx1clJhZD1cIjQwMDAwXCIgZGlzdD1cIjIwMDAwXCIgZGlyPVwiNTQwMDAwMFwiIHJvdFdpdGhTaGFwZT1cIjBcIj4gPGE6c3JnYkNsciB2YWw9XCIwMDAwMDBcIj4gPGE6YWxwaGEgdmFsPVwiMzgwMDBcIi8+IDwvYTpzcmdiQ2xyPiA8L2E6b3V0ZXJTaGR3PiA8L2E6ZWZmZWN0THN0PiA8L2E6ZWZmZWN0U3R5bGU+IDxhOmVmZmVjdFN0eWxlPiA8YTplZmZlY3RMc3Q+IDxhOm91dGVyU2hkdyBibHVyUmFkPVwiNDAwMDBcIiBkaXN0PVwiMjMwMDBcIiBkaXI9XCI1NDAwMDAwXCIgcm90V2l0aFNoYXBlPVwiMFwiPiA8YTpzcmdiQ2xyIHZhbD1cIjAwMDAwMFwiPiA8YTphbHBoYSB2YWw9XCIzNTAwMFwiLz4gPC9hOnNyZ2JDbHI+IDwvYTpvdXRlclNoZHc+IDwvYTplZmZlY3RMc3Q+IDwvYTplZmZlY3RTdHlsZT4gPGE6ZWZmZWN0U3R5bGU+IDxhOmVmZmVjdExzdD4gPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9XCI0MDAwMFwiIGRpc3Q9XCIyMzAwMFwiIGRpcj1cIjU0MDAwMDBcIiByb3RXaXRoU2hhcGU9XCIwXCI+IDxhOnNyZ2JDbHIgdmFsPVwiMDAwMDAwXCI+IDxhOmFscGhhIHZhbD1cIjM1MDAwXCIvPiA8L2E6c3JnYkNscj4gPC9hOm91dGVyU2hkdz4gPC9hOmVmZmVjdExzdD4gPGE6c2NlbmUzZD4gPGE6Y2FtZXJhIHByc3Q9XCJvcnRob2dyYXBoaWNGcm9udFwiPiA8YTpyb3QgbGF0PVwiMFwiIGxvbj1cIjBcIiByZXY9XCIwXCIvPiA8L2E6Y2FtZXJhPiA8YTpsaWdodFJpZyByaWc9XCJ0aHJlZVB0XCIgZGlyPVwidFwiPiA8YTpyb3QgbGF0PVwiMFwiIGxvbj1cIjBcIiByZXY9XCIxMjAwMDAwXCIvPiA8L2E6bGlnaHRSaWc+IDwvYTpzY2VuZTNkPiA8YTpzcDNkPiA8YTpiZXZlbFQgdz1cIjYzNTAwXCIgaD1cIjI1NDAwXCIvPiA8L2E6c3AzZD4gPC9hOmVmZmVjdFN0eWxlPiA8L2E6ZWZmZWN0U3R5bGVMc3Q+IDxhOmJnRmlsbFN0eWxlTHN0PiA8YTpzb2xpZEZpbGw+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiLz4gPC9hOnNvbGlkRmlsbD4gPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPVwiMVwiPiA8YTpnc0xzdD4gPGE6Z3MgcG9zPVwiMFwiPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj4gPGE6dGludCB2YWw9XCI0MDAwMFwiLz4gPGE6c2F0TW9kIHZhbD1cIjM1MDAwMFwiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8YTpncyBwb3M9XCI0MDAwMFwiPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj4gPGE6dGludCB2YWw9XCI0NTAwMFwiLz4gPGE6c2hhZGUgdmFsPVwiOTkwMDBcIi8+IDxhOnNhdE1vZCB2YWw9XCIzNTAwMDBcIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPGE6Z3MgcG9zPVwiMTAwMDAwXCI+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPiA8YTpzaGFkZSB2YWw9XCIyMDAwMFwiLz4gPGE6c2F0TW9kIHZhbD1cIjI1NTAwMFwiLz4gPC9hOnNjaGVtZUNscj4gPC9hOmdzPiA8L2E6Z3NMc3Q+IDxhOnBhdGggcGF0aD1cImNpcmNsZVwiPiA8YTpmaWxsVG9SZWN0IGw9XCI1MDAwMFwiIHQ9XCItODAwMDBcIiByPVwiNTAwMDBcIiBiPVwiMTgwMDAwXCIvPiA8L2E6cGF0aD4gPC9hOmdyYWRGaWxsPiA8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9XCIxXCI+IDxhOmdzTHN0PiA8YTpncyBwb3M9XCIwXCI+IDxhOnNjaGVtZUNsciB2YWw9XCJwaENsclwiPiA8YTp0aW50IHZhbD1cIjgwMDAwXCIvPiA8YTpzYXRNb2QgdmFsPVwiMzAwMDAwXCIvPiA8L2E6c2NoZW1lQ2xyPiA8L2E6Z3M+IDxhOmdzIHBvcz1cIjEwMDAwMFwiPiA8YTpzY2hlbWVDbHIgdmFsPVwicGhDbHJcIj4gPGE6c2hhZGUgdmFsPVwiMzAwMDBcIi8+IDxhOnNhdE1vZCB2YWw9XCIyMDAwMDBcIi8+IDwvYTpzY2hlbWVDbHI+IDwvYTpncz4gPC9hOmdzTHN0PiA8YTpwYXRoIHBhdGg9XCJjaXJjbGVcIj4gPGE6ZmlsbFRvUmVjdCBsPVwiNTAwMDBcIiB0PVwiNTAwMDBcIiByPVwiNTAwMDBcIiBiPVwiNTAwMDBcIi8+IDwvYTpwYXRoPiA8L2E6Z3JhZEZpbGw+IDwvYTpiZ0ZpbGxTdHlsZUxzdD4gPC9hOmZtdFNjaGVtZT4gPC9hOnRoZW1lRWxlbWVudHM+IDxhOm9iamVjdERlZmF1bHRzPiA8YTpzcERlZj4gPGE6c3BQci8+IDxhOmJvZHlQci8+IDxhOmxzdFN0eWxlLz4gPGE6c3R5bGU+IDxhOmxuUmVmIGlkeD1cIjFcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+IDwvYTpsblJlZj4gPGE6ZmlsbFJlZiBpZHg9XCIzXCI+IDxhOnNjaGVtZUNsciB2YWw9XCJhY2NlbnQxXCIvPiA8L2E6ZmlsbFJlZj4gPGE6ZWZmZWN0UmVmIGlkeD1cIjJcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+IDwvYTplZmZlY3RSZWY+IDxhOmZvbnRSZWYgaWR4PVwibWlub3JcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cImx0MVwiLz4gPC9hOmZvbnRSZWY+IDwvYTpzdHlsZT4gPC9hOnNwRGVmPiA8YTpsbkRlZj4gPGE6c3BQci8+IDxhOmJvZHlQci8+IDxhOmxzdFN0eWxlLz4gPGE6c3R5bGU+IDxhOmxuUmVmIGlkeD1cIjJcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+IDwvYTpsblJlZj4gPGE6ZmlsbFJlZiBpZHg9XCIwXCI+IDxhOnNjaGVtZUNsciB2YWw9XCJhY2NlbnQxXCIvPiA8L2E6ZmlsbFJlZj4gPGE6ZWZmZWN0UmVmIGlkeD1cIjFcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cImFjY2VudDFcIi8+IDwvYTplZmZlY3RSZWY+IDxhOmZvbnRSZWYgaWR4PVwibWlub3JcIj4gPGE6c2NoZW1lQ2xyIHZhbD1cInR4MVwiLz4gPC9hOmZvbnRSZWY+IDwvYTpzdHlsZT4gPC9hOmxuRGVmPiA8L2E6b2JqZWN0RGVmYXVsdHM+IDxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4gPC9hOnRoZW1lPid9LHt9XSwxNDY6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IG49ZShcInN0cmVhbVwiKSxpPWUoXCIuL2Zvcm1hdHRlclwiKTtjbGFzcyBzIGV4dGVuZHMgbi5UcmFuc2Zvcm17Y29uc3RydWN0b3IoZSl7c3VwZXIoe3dyaXRhYmxlT2JqZWN0TW9kZTplLm9iamVjdE1vZGV9KSx0aGlzLmhhc1dyaXR0ZW5CT009ITEsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPWUsdGhpcy5yb3dGb3JtYXR0ZXI9bmV3IGkuUm93Rm9ybWF0dGVyKGUpLHRoaXMuaGFzV3JpdHRlbkJPTT0hZS53cml0ZUJPTX10cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMucm93Rm9ybWF0dGVyLnJvd1RyYW5zZm9ybT1lLHRoaXN9X3RyYW5zZm9ybShlLHIsbil7bGV0IGk9ITE7dHJ5e3RoaXMuaGFzV3JpdHRlbkJPTXx8KHRoaXMucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMuQk9NKSx0aGlzLmhhc1dyaXR0ZW5CT009ITApLHRoaXMucm93Rm9ybWF0dGVyLmZvcm1hdChlLChlLHIpPT5lPyhpPSEwLG4oZSkpOihyJiZyLmZvckVhY2goZT0+e3RoaXMucHVzaCh0LmZyb20oZSxcInV0ZjhcIikpfSksaT0hMCxuKCkpKX1jYXRjaChlKXtpZihpKXRocm93IGU7bihlKX19X2ZsdXNoKGUpe3RoaXMucm93Rm9ybWF0dGVyLmZpbmlzaCgocixuKT0+cj9lKHIpOihuJiZuLmZvckVhY2goZT0+e3RoaXMucHVzaCh0LmZyb20oZSxcInV0ZjhcIikpfSksZSgpKSl9fXIuQ3N2Rm9ybWF0dGVyU3RyZWFtPXN9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJidWZmZXJcIikuQnVmZmVyKX0se1wiLi9mb3JtYXR0ZXJcIjoxNTAsYnVmZmVyOjIyMCxzdHJlYW06NTA1fV0sMTQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Gb3JtYXR0ZXJPcHRpb25zPXZvaWQgMDtyLkZvcm1hdHRlck9wdGlvbnM9Y2xhc3N7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dmFyIHQ7dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPVwiLFwiLHRoaXMucm93RGVsaW1pdGVyPVwiXFxuXCIsdGhpcy5xdW90ZT0nXCInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5xdW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009XCJcXHVmZWZmXCIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2JqZWN0LmFzc2lnbih0aGlzLGV8fHt9KSx2b2lkIDA9PT0obnVsbD09ZT92b2lkIDA6ZS5xdW90ZUhlYWRlcnMpJiYodGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMpLCEwPT09KG51bGw9PWU/dm9pZCAwOmUucXVvdGUpP3RoaXMucXVvdGU9J1wiJzohMT09PShudWxsPT1lP3ZvaWQgMDplLnF1b3RlKSYmKHRoaXMucXVvdGU9XCJcIiksXCJzdHJpbmdcIiE9dHlwZW9mKG51bGw9PWU/dm9pZCAwOmUuZXNjYXBlKSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PSh0PWUud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09dHx8dCksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlzLmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSx7fV0sMTQ4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCBpPW4oZShcImxvZGFzaC5pc2Jvb2xlYW5cIikpLHM9bihlKFwibG9kYXNoLmlzbmlsXCIpKSxvPW4oZShcImxvZGFzaC5lc2NhcGVyZWdleHBcIikpO3IuRmllbGRGb3JtYXR0ZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1lLG51bGwhPT1lLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9ZS5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoZS5xdW90ZSxcImdcIik7Y29uc3QgdD1gWyR7ZS5kZWxpbWl0ZXJ9JHtvLmRlZmF1bHQoZS5yb3dEZWxpbWl0ZXIpfXxcXHJ8XFxuXWA7dGhpcy5FU0NBUEVfUkVHRVhQPW5ldyBSZWdFeHAodCl9c2V0IGhlYWRlcnMoZSl7dGhpcy5faGVhZGVycz1lfXNob3VsZFF1b3RlKGUsdCl7Y29uc3Qgcj10P3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUhlYWRlcnM6dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlQ29sdW1ucztyZXR1cm4gaS5kZWZhdWx0KHIpP3I6QXJyYXkuaXNBcnJheShyKT9yW2VdOm51bGwhPT10aGlzLl9oZWFkZXJzJiZyW3RoaXMuX2hlYWRlcnNbZV1dfWZvcm1hdChlLHQscil7Y29uc3Qgbj0oXCJcIisocy5kZWZhdWx0KGUpP1wiXCI6ZSkpLnJlcGxhY2UoL1xcMC9nLFwiXCIpLHtmb3JtYXR0ZXJPcHRpb25zOml9PXRoaXM7aWYoXCJcIiE9PWkucXVvdGUpe2lmKC0xIT09bi5pbmRleE9mKGkucXVvdGUpKXJldHVybiB0aGlzLnF1b3RlRmllbGQobi5yZXBsYWNlKHRoaXMuUkVQTEFDRV9SRUdFWFAsaS5lc2NhcGVkUXVvdGUpKX1yZXR1cm4tMSE9PW4uc2VhcmNoKHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxkUXVvdGUodCxyKT90aGlzLnF1b3RlRmllbGQobik6bn1xdW90ZUZpZWxkKGUpe2NvbnN0e3F1b3RlOnR9PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5gJHt0fSR7ZX0ke3R9YH19fSx7XCJsb2Rhc2guZXNjYXBlcmVnZXhwXCI6NDQyLFwibG9kYXNoLmlzYm9vbGVhblwiOjQ0NCxcImxvZGFzaC5pc25pbFwiOjQ0N31dLDE0OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Sb3dGb3JtYXR0ZXI9dm9pZCAwO2NvbnN0IGk9bihlKFwibG9kYXNoLmlzZnVuY3Rpb25cIikpLHM9bihlKFwibG9kYXNoLmlzZXF1YWxcIikpLG89ZShcIi4vRmllbGRGb3JtYXR0ZXJcIiksYT1lKFwiLi4vdHlwZXNcIik7Y2xhc3MgbHtjb25zdHJ1Y3RvcihlKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPWUsdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgby5GaWVsZEZvcm1hdHRlcihlKSx0aGlzLmhlYWRlcnM9ZS5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPWUuc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLGUudHJhbnNmb3JtJiYodGhpcy5yb3dUcmFuc2Zvcm09ZS50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShlKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSkmJihBcnJheS5pc0FycmF5KGVbMF0pJiYyPT09ZVswXS5sZW5ndGgpfXN0YXRpYyBpc1Jvd0FycmF5KGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYhdGhpcy5pc1Jvd0hhc2hBcnJheShlKX1zdGF0aWMgZ2F0aGVySGVhZGVycyhlKXtyZXR1cm4gbC5pc1Jvd0hhc2hBcnJheShlKT9lLm1hcChlPT5lWzBdKTpBcnJheS5pc0FycmF5KGUpP2U6T2JqZWN0LmtleXMoZSl9c3RhdGljIGNyZWF0ZVRyYW5zZm9ybShlKXtyZXR1cm4gYS5pc1N5bmNUcmFuc2Zvcm0oZSk/KHQscik9PntsZXQgbj1udWxsO3RyeXtuPWUodCl9Y2F0Y2goZSl7cmV0dXJuIHIoZSl9cmV0dXJuIHIobnVsbCxuKX06KHQscik9PntlKHQscil9fXNldCByb3dUcmFuc2Zvcm0oZSl7aWYoIWkuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTt0aGlzLl9yb3dUcmFuc2Zvcm09bC5jcmVhdGVUcmFuc2Zvcm0oZSl9Zm9ybWF0KGUsdCl7dGhpcy5jYWxsVHJhbnNmb3JtZXIoZSwocixuKT0+e2lmKHIpcmV0dXJuIHQocik7aWYoIWUpcmV0dXJuIHQobnVsbCk7Y29uc3QgaT1bXTtpZihuKXtjb25zdHtzaG91bGRGb3JtYXRDb2x1bW5zOmUsaGVhZGVyczp0fT10aGlzLmNoZWNrSGVhZGVycyhuKTtpZih0aGlzLnNob3VsZFdyaXRlSGVhZGVycyYmdCYmIXRoaXMuaGFzV3JpdHRlbkhlYWRlcnMmJihpLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHQsITApKSx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSEwKSxlKXtjb25zdCBlPXRoaXMuZ2F0aGVyQ29sdW1ucyhuKTtpLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKGUsITEpKX19cmV0dXJuIHQobnVsbCxpKX0pfWZpbmlzaChlKXtjb25zdCB0PVtdO2lmKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5hbHdheXNXcml0ZUhlYWRlcnMmJjA9PT10aGlzLnJvd0NvdW50KXtpZighdGhpcy5oZWFkZXJzKXJldHVybiBlKG5ldyBFcnJvcihcImBhbHdheXNXcml0ZUhlYWRlcnNgIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBidXQgYGhlYWRlcnNgIG9wdGlvbiBub3QgcHJvdmlkZWQuXCIpKTt0LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmdC5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLGUobnVsbCx0KX1jaGVja0hlYWRlcnMoZSl7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB0PWwuZ2F0aGVySGVhZGVycyhlKTtyZXR1cm4gdGhpcy5oZWFkZXJzPXQsdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXQsdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6IXMuZGVmYXVsdCh0LGUpLGhlYWRlcnM6dH06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKGUpe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKFwiSGVhZGVycyBpcyBjdXJyZW50bHkgbnVsbFwiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9sLmlzUm93SGFzaEFycmF5KGUpP3RoaXMuaGVhZGVycy5tYXAoKHQscik9Pntjb25zdCBuPWVbcl07cmV0dXJuIG4/blsxXTpcIlwifSk6bC5pc1Jvd0FycmF5KGUpJiYhdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/ZTp0aGlzLmhlYWRlcnMubWFwKCh0LHIpPT5lW3JdKTp0aGlzLmhlYWRlcnMubWFwKHQ9PmVbdF0pfWNhbGxUcmFuc2Zvcm1lcihlLHQpe3JldHVybiB0aGlzLl9yb3dUcmFuc2Zvcm0/dGhpcy5fcm93VHJhbnNmb3JtKGUsdCk6dChudWxsLGUpfWZvcm1hdENvbHVtbnMoZSx0KXtjb25zdCByPWUubWFwKChlLHIpPT50aGlzLmZpZWxkRm9ybWF0dGVyLmZvcm1hdChlLHIsdCkpLmpvaW4odGhpcy5mb3JtYXR0ZXJPcHRpb25zLmRlbGltaXRlcikse3Jvd0NvdW50Om59PXRoaXM7cmV0dXJuIHRoaXMucm93Q291bnQrPTEsbj9bdGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0RlbGltaXRlcixyXS5qb2luKFwiXCIpOnJ9fXIuUm93Rm9ybWF0dGVyPWx9LHtcIi4uL3R5cGVzXCI6MTUyLFwiLi9GaWVsZEZvcm1hdHRlclwiOjE0OCxcImxvZGFzaC5pc2VxdWFsXCI6NDQ1LFwibG9kYXNoLmlzZnVuY3Rpb25cIjo0NDZ9XSwxNTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLkZpZWxkRm9ybWF0dGVyPXIuUm93Rm9ybWF0dGVyPXZvaWQgMDt2YXIgbj1lKFwiLi9Sb3dGb3JtYXR0ZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJSb3dGb3JtYXR0ZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5Sb3dGb3JtYXR0ZXJ9fSk7dmFyIGk9ZShcIi4vRmllbGRGb3JtYXR0ZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJGaWVsZEZvcm1hdHRlclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkZpZWxkRm9ybWF0dGVyfX0pfSx7XCIuL0ZpZWxkRm9ybWF0dGVyXCI6MTQ4LFwiLi9Sb3dGb3JtYXR0ZXJcIjoxNDl9XSwxNTE6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W3JdfX0pfTpmdW5jdGlvbihlLHQscixuKXt2b2lkIDA9PT1uJiYobj1yKSxlW25dPXRbcl19LGk9T2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnR9KX06ZnVuY3Rpb24oZSx0KXtlLmRlZmF1bHQ9dH0scz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIHIgaW4gZSlcImRlZmF1bHRcIiE9PXImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZuKHQsZSxyKTtyZXR1cm4gaSh0LGUpLHR9LG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gZSlcImRlZmF1bHRcIj09PXJ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LHIpfHxuKHQsZSxyKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci53cml0ZVRvUGF0aD1yLndyaXRlVG9TdHJpbmc9ci53cml0ZVRvQnVmZmVyPXIud3JpdGVUb1N0cmVhbT1yLndyaXRlPXIuZm9ybWF0PXIuRm9ybWF0dGVyT3B0aW9ucz1yLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgYT1lKFwidXRpbFwiKSxsPWUoXCJzdHJlYW1cIiksYz1zKGUoXCJmc1wiKSksdT1lKFwiLi9Gb3JtYXR0ZXJPcHRpb25zXCIpLGg9ZShcIi4vQ3N2Rm9ybWF0dGVyU3RyZWFtXCIpO28oZShcIi4vdHlwZXNcIikscik7dmFyIGY9ZShcIi4vQ3N2Rm9ybWF0dGVyU3RyZWFtXCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiQ3N2Rm9ybWF0dGVyU3RyZWFtXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGYuQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pO3ZhciBkPWUoXCIuL0Zvcm1hdHRlck9wdGlvbnNcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJGb3JtYXR0ZXJPcHRpb25zXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGQuRm9ybWF0dGVyT3B0aW9uc319KSxyLmZvcm1hdD1lPT5uZXcgaC5Dc3ZGb3JtYXR0ZXJTdHJlYW0obmV3IHUuRm9ybWF0dGVyT3B0aW9ucyhlKSksci53cml0ZT0oZSx0KT0+e2NvbnN0IG49ci5mb3JtYXQodCksaT1hLnByb21pc2lmeSgoZSx0KT0+e24ud3JpdGUoZSx2b2lkIDAsdCl9KTtyZXR1cm4gZS5yZWR1Y2UoKGUsdCk9PmUudGhlbigoKT0+aSh0KSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9Pm4uZW5kKCkpLmNhdGNoKGU9PntuLmVtaXQoXCJlcnJvclwiLGUpfSksbn0sci53cml0ZVRvU3RyZWFtPShlLHQsbik9PnIud3JpdGUodCxuKS5waXBlKGUpLHIud3JpdGVUb0J1ZmZlcj1mdW5jdGlvbihlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3QgaT1bXSxzPW5ldyBsLldyaXRhYmxlKHt3cml0ZShlLHQscil7aS5wdXNoKGUpLHIoKX19KTtyZXR1cm4gbmV3IFByb21pc2UoKG8sYSk9PntzLm9uKFwiZXJyb3JcIixhKS5vbihcImZpbmlzaFwiLCgpPT5vKHQuY29uY2F0KGkpKSksci53cml0ZShlLG4pLnBpcGUocyl9KX0sci53cml0ZVRvU3RyaW5nPShlLHQpPT5yLndyaXRlVG9CdWZmZXIoZSx0KS50aGVuKGU9PmUudG9TdHJpbmcoKSksci53cml0ZVRvUGF0aD0oZSx0LG4pPT57Y29uc3QgaT1jLmNyZWF0ZVdyaXRlU3RyZWFtKGUse2VuY29kaW5nOlwidXRmOFwifSk7cmV0dXJuIHIud3JpdGUodCxuKS5waXBlKGkpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCIuL0NzdkZvcm1hdHRlclN0cmVhbVwiOjE0NixcIi4vRm9ybWF0dGVyT3B0aW9uc1wiOjE0NyxcIi4vdHlwZXNcIjoxNTIsYnVmZmVyOjIyMCxmczoyMTYsc3RyZWFtOjUwNSx1dGlsOjUyN31dLDE1MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuaXNTeW5jVHJhbnNmb3JtPXZvaWQgMCxyLmlzU3luY1RyYW5zZm9ybT1lPT4xPT09ZS5sZW5ndGh9LHt9XSwxNTM6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Dc3ZQYXJzZXJTdHJlYW09dm9pZCAwO2NvbnN0IG49ZShcInN0cmluZ19kZWNvZGVyXCIpLGk9ZShcInN0cmVhbVwiKSxzPWUoXCIuL3RyYW5zZm9ybXNcIiksbz1lKFwiLi9wYXJzZXJcIik7Y2xhc3MgYSBleHRlbmRzIGkuVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvYmplY3RNb2RlOmUub2JqZWN0TW9kZX0pLHRoaXMubGluZXM9XCJcIix0aGlzLnJvd0NvdW50PTAsdGhpcy5wYXJzZWRSb3dDb3VudD0wLHRoaXMucGFyc2VkTGluZUNvdW50PTAsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMuaGVhZGVyc0VtaXR0ZWQ9ITEsdGhpcy5wYXJzZXJPcHRpb25zPWUsdGhpcy5wYXJzZXI9bmV3IG8uUGFyc2VyKGUpLHRoaXMuaGVhZGVyVHJhbnNmb3JtZXI9bmV3IHMuSGVhZGVyVHJhbnNmb3JtZXIoZSksdGhpcy5kZWNvZGVyPW5ldyBuLlN0cmluZ0RlY29kZXIoZS5lbmNvZGluZyksdGhpcy5yb3dUcmFuc2Zvcm1lclZhbGlkYXRvcj1uZXcgcy5Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvcn1nZXQgaGFzSGl0Um93TGltaXQoKXtyZXR1cm4gdGhpcy5wYXJzZXJPcHRpb25zLmxpbWl0Um93cyYmdGhpcy5yb3dDb3VudD49dGhpcy5wYXJzZXJPcHRpb25zLm1heFJvd3N9Z2V0IHNob3VsZEVtaXRSb3dzKCl7cmV0dXJuIHRoaXMucGFyc2VkUm93Q291bnQ+dGhpcy5wYXJzZXJPcHRpb25zLnNraXBSb3dzfWdldCBzaG91bGRTa2lwTGluZSgpe3JldHVybiB0aGlzLnBhcnNlZExpbmVDb3VudDw9dGhpcy5wYXJzZXJPcHRpb25zLnNraXBMaW5lc310cmFuc2Zvcm0oZSl7cmV0dXJuIHRoaXMucm93VHJhbnNmb3JtZXJWYWxpZGF0b3Iucm93VHJhbnNmb3JtPWUsdGhpc312YWxpZGF0ZShlKXtyZXR1cm4gdGhpcy5yb3dUcmFuc2Zvcm1lclZhbGlkYXRvci5yb3dWYWxpZGF0b3I9ZSx0aGlzfWVtaXQoZSl7aWYoXCJlbmRcIj09PWUpcmV0dXJuIHRoaXMuZW5kRW1pdHRlZHx8KHRoaXMuZW5kRW1pdHRlZD0hMCxzdXBlci5lbWl0KFwiZW5kXCIsdGhpcy5yb3dDb3VudCkpLCExO2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KHQ+MT90LTE6MCksbj0xO248dDtuKyspcltuLTFdPWFyZ3VtZW50c1tuXTtyZXR1cm4gc3VwZXIuZW1pdChlLC4uLnIpfV90cmFuc2Zvcm0oZSx0LHIpe2lmKHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIHIoKTtjb25zdCBuPWEud3JhcERvbmVDYWxsYmFjayhyKTt0cnl7Y29uc3R7bGluZXM6dH09dGhpcyxyPXQrdGhpcy5kZWNvZGVyLndyaXRlKGUpLGk9dGhpcy5wYXJzZShyLCEwKTtyZXR1cm4gdGhpcy5wcm9jZXNzUm93cyhpLG4pfWNhdGNoKGUpe3JldHVybiBuKGUpfX1fZmx1c2goZSl7Y29uc3QgdD1hLndyYXBEb25lQ2FsbGJhY2soZSk7aWYodGhpcy5oYXNIaXRSb3dMaW1pdClyZXR1cm4gdCgpO3RyeXtjb25zdCBlPXRoaXMubGluZXMrdGhpcy5kZWNvZGVyLmVuZCgpLHI9dGhpcy5wYXJzZShlLCExKTtyZXR1cm4gdGhpcy5wcm9jZXNzUm93cyhyLHQpfWNhdGNoKGUpe3JldHVybiB0KGUpfX1wYXJzZShlLHQpe2lmKCFlKXJldHVybltdO2NvbnN0e2xpbmU6cixyb3dzOm59PXRoaXMucGFyc2VyLnBhcnNlKGUsdCk7cmV0dXJuIHRoaXMubGluZXM9cixufXByb2Nlc3NSb3dzKGUscil7Y29uc3Qgbj1lLmxlbmd0aCxpPXM9Pntjb25zdCBvPWU9PmU/cihlKTpzJTEwMCE9MD9pKHMrMSk6dm9pZCB0KCgpPT5pKHMrMSkpO2lmKHRoaXMuY2hlY2tBbmRFbWl0SGVhZGVycygpLHM+PW58fHRoaXMuaGFzSGl0Um93TGltaXQpcmV0dXJuIHIoKTtpZih0aGlzLnBhcnNlZExpbmVDb3VudCs9MSx0aGlzLnNob3VsZFNraXBMaW5lKXJldHVybiBvKCk7Y29uc3QgYT1lW3NdO3RoaXMucm93Q291bnQrPTEsdGhpcy5wYXJzZWRSb3dDb3VudCs9MTtjb25zdCBsPXRoaXMucm93Q291bnQ7cmV0dXJuIHRoaXMudHJhbnNmb3JtUm93KGEsKGUsdCk9PntpZihlKXJldHVybiB0aGlzLnJvd0NvdW50LT0xLG8oZSk7aWYoIXQpcmV0dXJuIG8obmV3IEVycm9yKFwiZXhwZWN0ZWQgdHJhbnNmb3JtIHJlc3VsdFwiKSk7aWYodC5pc1ZhbGlkKXtpZih0LnJvdylyZXR1cm4gdGhpcy5wdXNoUm93KHQucm93LG8pfWVsc2UgdGhpcy5lbWl0KFwiZGF0YS1pbnZhbGlkXCIsdC5yb3csbCx0LnJlYXNvbik7cmV0dXJuIG8oKX0pfTtpKDApfXRyYW5zZm9ybVJvdyhlLHQpe3RyeXt0aGlzLmhlYWRlclRyYW5zZm9ybWVyLnRyYW5zZm9ybShlLChyLG4pPT5yP3Qocik6bj9uLmlzVmFsaWQ/bi5yb3c/dGhpcy5zaG91bGRFbWl0Um93cz90aGlzLnJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yLnRyYW5zZm9ybUFuZFZhbGlkYXRlKG4ucm93LHQpOnRoaXMuc2tpcFJvdyh0KToodGhpcy5yb3dDb3VudC09MSx0aGlzLnBhcnNlZFJvd0NvdW50LT0xLHQobnVsbCx7cm93Om51bGwsaXNWYWxpZDohMH0pKTp0aGlzLnNob3VsZEVtaXRSb3dzP3QobnVsbCx7aXNWYWxpZDohMSxyb3c6ZX0pOnRoaXMuc2tpcFJvdyh0KTp0KG5ldyBFcnJvcihcIkV4cGVjdGVkIHJlc3VsdCBmcm9tIGhlYWRlciB0cmFuc2Zvcm1cIikpKX1jYXRjaChlKXt0KGUpfX1jaGVja0FuZEVtaXRIZWFkZXJzKCl7IXRoaXMuaGVhZGVyc0VtaXR0ZWQmJnRoaXMuaGVhZGVyVHJhbnNmb3JtZXIuaGVhZGVycyYmKHRoaXMuaGVhZGVyc0VtaXR0ZWQ9ITAsdGhpcy5lbWl0KFwiaGVhZGVyc1wiLHRoaXMuaGVhZGVyVHJhbnNmb3JtZXIuaGVhZGVycykpfXNraXBSb3coZSl7cmV0dXJuIHRoaXMucm93Q291bnQtPTEsZShudWxsLHtyb3c6bnVsbCxpc1ZhbGlkOiEwfSl9cHVzaFJvdyhlLHQpe3RyeXt0aGlzLnBhcnNlck9wdGlvbnMub2JqZWN0TW9kZT90aGlzLnB1c2goZSk6dGhpcy5wdXNoKEpTT04uc3RyaW5naWZ5KGUpKSx0KCl9Y2F0Y2goZSl7dChlKX19c3RhdGljIHdyYXBEb25lQ2FsbGJhY2soZSl7bGV0IHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKHIpe2lmKHQpdGhyb3cgcjtyZXR1cm4gdD0hMCx2b2lkIGUocil9Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkobj4xP24tMTowKSxzPTE7czxuO3MrKylpW3MtMV09YXJndW1lbnRzW3NdO2UoLi4uaSl9fX1yLkNzdlBhcnNlclN0cmVhbT1hfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwidGltZXJzXCIpLnNldEltbWVkaWF0ZSl9LHtcIi4vcGFyc2VyXCI6MTY1LFwiLi90cmFuc2Zvcm1zXCI6MTY4LHN0cmVhbTo1MDUsc3RyaW5nX2RlY29kZXI6MjE4LHRpbWVyczo1MjN9XSwxNTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuUGFyc2VyT3B0aW9ucz12b2lkIDA7Y29uc3QgaT1uKGUoXCJsb2Rhc2guZXNjYXBlcmVnZXhwXCIpKSxzPW4oZShcImxvZGFzaC5pc25pbFwiKSk7ci5QYXJzZXJPcHRpb25zPWNsYXNze2NvbnN0cnVjdG9yKGUpe3ZhciB0O2lmKHRoaXMub2JqZWN0TW9kZT0hMCx0aGlzLmRlbGltaXRlcj1cIixcIix0aGlzLmlnbm9yZUVtcHR5PSExLHRoaXMucXVvdGU9J1wiJyx0aGlzLmVzY2FwZT1udWxsLHRoaXMuZXNjYXBlQ2hhcj10aGlzLnF1b3RlLHRoaXMuY29tbWVudD1udWxsLHRoaXMuc3VwcG9ydHNDb21tZW50cz0hMSx0aGlzLmx0cmltPSExLHRoaXMucnRyaW09ITEsdGhpcy50cmltPSExLHRoaXMuaGVhZGVycz1udWxsLHRoaXMucmVuYW1lSGVhZGVycz0hMSx0aGlzLnN0cmljdENvbHVtbkhhbmRsaW5nPSExLHRoaXMuZGlzY2FyZFVubWFwcGVkQ29sdW1ucz0hMSx0aGlzLmNhcnJpYWdlUmV0dXJuPVwiXFxyXCIsdGhpcy5lbmNvZGluZz1cInV0ZjhcIix0aGlzLmxpbWl0Um93cz0hMSx0aGlzLm1heFJvd3M9MCx0aGlzLnNraXBMaW5lcz0wLHRoaXMuc2tpcFJvd3M9MCxPYmplY3QuYXNzaWduKHRoaXMsZXx8e30pLHRoaXMuZGVsaW1pdGVyLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcihcImRlbGltaXRlciBvcHRpb24gbXVzdCBiZSBvbmUgY2hhcmFjdGVyIGxvbmdcIik7dGhpcy5lc2NhcGVkRGVsaW1pdGVyPWkuZGVmYXVsdCh0aGlzLmRlbGltaXRlciksdGhpcy5lc2NhcGVDaGFyPW51bGwhPT0odD10aGlzLmVzY2FwZSkmJnZvaWQgMCE9PXQ/dDp0aGlzLnF1b3RlLHRoaXMuc3VwcG9ydHNDb21tZW50cz0hcy5kZWZhdWx0KHRoaXMuY29tbWVudCksdGhpcy5ORVhUX1RPS0VOX1JFR0VYUD1uZXcgUmVnRXhwKGAoW15cXFxcc118XFxcXHJcXFxcbnxcXFxcbnxcXFxccnwke3RoaXMuZXNjYXBlZERlbGltaXRlcn0pYCksdGhpcy5tYXhSb3dzPjAmJih0aGlzLmxpbWl0Um93cz0hMCl9fX0se1wibG9kYXNoLmVzY2FwZXJlZ2V4cFwiOjQ0MixcImxvZGFzaC5pc25pbFwiOjQ0N31dLDE1NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX19KX06ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49ciksZVtuXT10W3JdfSxpPU9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxcImRlZmF1bHRcIix7ZW51bWVyYWJsZTohMCx2YWx1ZTp0fSl9OmZ1bmN0aW9uKGUsdCl7ZS5kZWZhdWx0PXR9LHM9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciByIGluIGUpXCJkZWZhdWx0XCIhPT1yJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmbih0LGUscik7cmV0dXJuIGkodCxlKSx0fSxvPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByIGluIGUpXCJkZWZhdWx0XCI9PT1yfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxyKXx8bih0LGUscil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIucGFyc2VTdHJpbmc9ci5wYXJzZUZpbGU9ci5wYXJzZVN0cmVhbT1yLnBhcnNlPXIuUGFyc2VyT3B0aW9ucz1yLkNzdlBhcnNlclN0cmVhbT12b2lkIDA7Y29uc3QgYT1zKGUoXCJmc1wiKSksbD1lKFwic3RyZWFtXCIpLGM9ZShcIi4vUGFyc2VyT3B0aW9uc1wiKSx1PWUoXCIuL0NzdlBhcnNlclN0cmVhbVwiKTtvKGUoXCIuL3R5cGVzXCIpLHIpO3ZhciBoPWUoXCIuL0NzdlBhcnNlclN0cmVhbVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIkNzdlBhcnNlclN0cmVhbVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoLkNzdlBhcnNlclN0cmVhbX19KTt2YXIgZj1lKFwiLi9QYXJzZXJPcHRpb25zXCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiUGFyc2VyT3B0aW9uc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBmLlBhcnNlck9wdGlvbnN9fSksci5wYXJzZT1lPT5uZXcgdS5Dc3ZQYXJzZXJTdHJlYW0obmV3IGMuUGFyc2VyT3B0aW9ucyhlKSksci5wYXJzZVN0cmVhbT0oZSx0KT0+ZS5waXBlKG5ldyB1LkNzdlBhcnNlclN0cmVhbShuZXcgYy5QYXJzZXJPcHRpb25zKHQpKSksci5wYXJzZUZpbGU9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiBhLmNyZWF0ZVJlYWRTdHJlYW0oZSkucGlwZShuZXcgdS5Dc3ZQYXJzZXJTdHJlYW0obmV3IGMuUGFyc2VyT3B0aW9ucyh0KSkpfSxyLnBhcnNlU3RyaW5nPShlLHQpPT57Y29uc3Qgcj1uZXcgbC5SZWFkYWJsZTtyZXR1cm4gci5wdXNoKGUpLHIucHVzaChudWxsKSxyLnBpcGUobmV3IHUuQ3N2UGFyc2VyU3RyZWFtKG5ldyBjLlBhcnNlck9wdGlvbnModCkpKX19LHtcIi4vQ3N2UGFyc2VyU3RyZWFtXCI6MTUzLFwiLi9QYXJzZXJPcHRpb25zXCI6MTU0LFwiLi90eXBlc1wiOjE2OSxmczoyMTYsc3RyZWFtOjUwNX1dLDE1NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuUGFyc2VyPXZvaWQgMDtjb25zdCBuPWUoXCIuL1NjYW5uZXJcIiksaT1lKFwiLi9Sb3dQYXJzZXJcIikscz1lKFwiLi9Ub2tlblwiKTtjbGFzcyBve2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyc2VyT3B0aW9ucz1lLHRoaXMucm93UGFyc2VyPW5ldyBpLlJvd1BhcnNlcih0aGlzLnBhcnNlck9wdGlvbnMpfXN0YXRpYyByZW1vdmVCT00oZSl7cmV0dXJuIGUmJjY1Mjc5PT09ZS5jaGFyQ29kZUF0KDApP2Uuc2xpY2UoMSk6ZX1wYXJzZShlLHQpe2NvbnN0IHI9bmV3IG4uU2Nhbm5lcih7bGluZTpvLnJlbW92ZUJPTShlKSxwYXJzZXJPcHRpb25zOnRoaXMucGFyc2VyT3B0aW9ucyxoYXNNb3JlRGF0YTp0fSk7cmV0dXJuIHRoaXMucGFyc2VyT3B0aW9ucy5zdXBwb3J0c0NvbW1lbnRzP3RoaXMucGFyc2VXaXRoQ29tbWVudHMocik6dGhpcy5wYXJzZVdpdGhvdXRDb21tZW50cyhyKX1wYXJzZVdpdGhvdXRDb21tZW50cyhlKXtjb25zdCB0PVtdO2xldCByPSEwO2Zvcig7cjspcj10aGlzLnBhcnNlUm93KGUsdCk7cmV0dXJue2xpbmU6ZS5saW5lLHJvd3M6dH19cGFyc2VXaXRoQ29tbWVudHMoZSl7Y29uc3R7cGFyc2VyT3B0aW9uczp0fT10aGlzLHI9W107Zm9yKGxldCBuPWUubmV4dENoYXJhY3RlclRva2VuO251bGwhPT1uO249ZS5uZXh0Q2hhcmFjdGVyVG9rZW4paWYocy5Ub2tlbi5pc1Rva2VuQ29tbWVudChuLHQpKXtpZihudWxsPT09ZS5hZHZhbmNlUGFzdExpbmUoKSlyZXR1cm57bGluZTplLmxpbmVGcm9tQ3Vyc29yLHJvd3M6cn07aWYoIWUuaGFzTW9yZUNoYXJhY3RlcnMpcmV0dXJue2xpbmU6ZS5saW5lRnJvbUN1cnNvcixyb3dzOnJ9O2UudHJ1bmNhdGVUb0N1cnNvcigpfWVsc2UgaWYoIXRoaXMucGFyc2VSb3coZSxyKSlicmVhaztyZXR1cm57bGluZTplLmxpbmUscm93czpyfX1wYXJzZVJvdyhlLHQpe2lmKCFlLm5leHROb25TcGFjZVRva2VuKXJldHVybiExO2NvbnN0IHI9dGhpcy5yb3dQYXJzZXIucGFyc2UoZSk7cmV0dXJuIG51bGwhPT1yJiYodGhpcy5wYXJzZXJPcHRpb25zLmlnbm9yZUVtcHR5JiZpLlJvd1BhcnNlci5pc0VtcHR5Um93KHIpfHx0LnB1c2gociksITApfX1yLlBhcnNlcj1vfSx7XCIuL1Jvd1BhcnNlclwiOjE1NyxcIi4vU2Nhbm5lclwiOjE1OCxcIi4vVG9rZW5cIjoxNTl9XSwxNTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLlJvd1BhcnNlcj12b2lkIDA7Y29uc3Qgbj1lKFwiLi9jb2x1bW5cIiksaT1lKFwiLi9Ub2tlblwiKTtyLlJvd1BhcnNlcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnBhcnNlck9wdGlvbnM9ZSx0aGlzLmNvbHVtblBhcnNlcj1uZXcgbi5Db2x1bW5QYXJzZXIoZSl9c3RhdGljIGlzRW1wdHlSb3coZSl7cmV0dXJuXCJcIj09PWUuam9pbihcIlwiKS5yZXBsYWNlKC9cXHMrL2csXCJcIil9cGFyc2UoZSl7Y29uc3R7cGFyc2VyT3B0aW9uczp0fT10aGlzLHtoYXNNb3JlRGF0YTpyfT1lLG49ZSxzPVtdO2xldCBvPXRoaXMuZ2V0U3RhcnRUb2tlbihuLHMpO2Zvcig7bzspe2lmKGkuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihvKSlyZXR1cm4gbi5hZHZhbmNlUGFzdFRva2VuKG8pLCFuLmhhc01vcmVDaGFyYWN0ZXJzJiZpLlRva2VuLmlzVG9rZW5DYXJyaWFnZVJldHVybihvLHQpJiZyP251bGw6KG4udHJ1bmNhdGVUb0N1cnNvcigpLHMpO2lmKCF0aGlzLnNob3VsZFNraXBDb2x1bW5QYXJzZShuLG8scykpe2NvbnN0IGU9dGhpcy5jb2x1bW5QYXJzZXIucGFyc2Uobik7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7cy5wdXNoKGUpfW89bi5uZXh0Tm9uU3BhY2VUb2tlbn1yZXR1cm4gcj9udWxsOihuLnRydW5jYXRlVG9DdXJzb3IoKSxzKX1nZXRTdGFydFRva2VuKGUsdCl7Y29uc3Qgcj1lLm5leHROb25TcGFjZVRva2VuO3JldHVybiBudWxsIT09ciYmaS5Ub2tlbi5pc1Rva2VuRGVsaW1pdGVyKHIsdGhpcy5wYXJzZXJPcHRpb25zKT8odC5wdXNoKFwiXCIpLGUubmV4dE5vblNwYWNlVG9rZW4pOnJ9c2hvdWxkU2tpcENvbHVtblBhcnNlKGUsdCxyKXtjb25zdHtwYXJzZXJPcHRpb25zOm59PXRoaXM7aWYoaS5Ub2tlbi5pc1Rva2VuRGVsaW1pdGVyKHQsbikpe2UuYWR2YW5jZVBhc3RUb2tlbih0KTtjb25zdCBzPWUubmV4dENoYXJhY3RlclRva2VuO2lmKCFlLmhhc01vcmVDaGFyYWN0ZXJzfHxudWxsIT09cyYmaS5Ub2tlbi5pc1Rva2VuUm93RGVsaW1pdGVyKHMpKXJldHVybiByLnB1c2goXCJcIiksITA7aWYobnVsbCE9PXMmJmkuVG9rZW4uaXNUb2tlbkRlbGltaXRlcihzLG4pKXJldHVybiByLnB1c2goXCJcIiksITB9cmV0dXJuITF9fX0se1wiLi9Ub2tlblwiOjE1OSxcIi4vY29sdW1uXCI6MTY0fV0sMTU4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5TY2FubmVyPXZvaWQgMDtjb25zdCBuPWUoXCIuL1Rva2VuXCIpLGk9LygoPzpcXHJcXG4pfFxcbnxcXHIpLztyLlNjYW5uZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5jdXJzb3I9MCx0aGlzLmxpbmU9ZS5saW5lLHRoaXMubGluZUxlbmd0aD10aGlzLmxpbmUubGVuZ3RoLHRoaXMucGFyc2VyT3B0aW9ucz1lLnBhcnNlck9wdGlvbnMsdGhpcy5oYXNNb3JlRGF0YT1lLmhhc01vcmVEYXRhLHRoaXMuY3Vyc29yPWUuY3Vyc29yfHwwfWdldCBoYXNNb3JlQ2hhcmFjdGVycygpe3JldHVybiB0aGlzLmxpbmVMZW5ndGg+dGhpcy5jdXJzb3J9Z2V0IG5leHROb25TcGFjZVRva2VuKCl7Y29uc3R7bGluZUZyb21DdXJzb3I6ZX09dGhpcyx0PXRoaXMucGFyc2VyT3B0aW9ucy5ORVhUX1RPS0VOX1JFR0VYUDtpZigtMT09PWUuc2VhcmNoKHQpKXJldHVybiBudWxsO2NvbnN0IHI9dC5leGVjKGUpO2lmKG51bGw9PXIpcmV0dXJuIG51bGw7Y29uc3QgaT1yWzFdLHM9dGhpcy5jdXJzb3IrKHIuaW5kZXh8fDApO3JldHVybiBuZXcgbi5Ub2tlbih7dG9rZW46aSxzdGFydEN1cnNvcjpzLGVuZEN1cnNvcjpzK2kubGVuZ3RoLTF9KX1nZXQgbmV4dENoYXJhY3RlclRva2VuKCl7Y29uc3R7Y3Vyc29yOmUsbGluZUxlbmd0aDp0fT10aGlzO3JldHVybiB0PD1lP251bGw6bmV3IG4uVG9rZW4oe3Rva2VuOnRoaXMubGluZVtlXSxzdGFydEN1cnNvcjplLGVuZEN1cnNvcjplfSl9Z2V0IGxpbmVGcm9tQ3Vyc29yKCl7cmV0dXJuIHRoaXMubGluZS5zdWJzdHIodGhpcy5jdXJzb3IpfWFkdmFuY2VQYXN0TGluZSgpe2NvbnN0IGU9aS5leGVjKHRoaXMubGluZUZyb21DdXJzb3IpO3JldHVybiBlPyh0aGlzLmN1cnNvcis9KGUuaW5kZXh8fDApK2VbMF0ubGVuZ3RoLHRoaXMpOnRoaXMuaGFzTW9yZURhdGE/bnVsbDoodGhpcy5jdXJzb3I9dGhpcy5saW5lTGVuZ3RoLHRoaXMpfWFkdmFuY2VUbyhlKXtyZXR1cm4gdGhpcy5jdXJzb3I9ZSx0aGlzfWFkdmFuY2VUb1Rva2VuKGUpe3JldHVybiB0aGlzLmN1cnNvcj1lLnN0YXJ0Q3Vyc29yLHRoaXN9YWR2YW5jZVBhc3RUb2tlbihlKXtyZXR1cm4gdGhpcy5jdXJzb3I9ZS5lbmRDdXJzb3IrMSx0aGlzfXRydW5jYXRlVG9DdXJzb3IoKXtyZXR1cm4gdGhpcy5saW5lPXRoaXMubGluZUZyb21DdXJzb3IsdGhpcy5saW5lTGVuZ3RoPXRoaXMubGluZS5sZW5ndGgsdGhpcy5jdXJzb3I9MCx0aGlzfX19LHtcIi4vVG9rZW5cIjoxNTl9XSwxNTk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLlRva2VuPXZvaWQgMDtyLlRva2VuPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMudG9rZW49ZS50b2tlbix0aGlzLnN0YXJ0Q3Vyc29yPWUuc3RhcnRDdXJzb3IsdGhpcy5lbmRDdXJzb3I9ZS5lbmRDdXJzb3J9c3RhdGljIGlzVG9rZW5Sb3dEZWxpbWl0ZXIoZSl7Y29uc3QgdD1lLnRva2VuO3JldHVyblwiXFxyXCI9PT10fHxcIlxcblwiPT09dHx8XCJcXHJcXG5cIj09PXR9c3RhdGljIGlzVG9rZW5DYXJyaWFnZVJldHVybihlLHQpe3JldHVybiBlLnRva2VuPT09dC5jYXJyaWFnZVJldHVybn1zdGF0aWMgaXNUb2tlbkNvbW1lbnQoZSx0KXtyZXR1cm4gdC5zdXBwb3J0c0NvbW1lbnRzJiYhIWUmJmUudG9rZW49PT10LmNvbW1lbnR9c3RhdGljIGlzVG9rZW5Fc2NhcGVDaGFyYWN0ZXIoZSx0KXtyZXR1cm4gZS50b2tlbj09PXQuZXNjYXBlQ2hhcn1zdGF0aWMgaXNUb2tlblF1b3RlKGUsdCl7cmV0dXJuIGUudG9rZW49PT10LnF1b3RlfXN0YXRpYyBpc1Rva2VuRGVsaW1pdGVyKGUsdCl7cmV0dXJuIGUudG9rZW49PT10LmRlbGltaXRlcn19fSx7fV0sMTYwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Db2x1bW5Gb3JtYXR0ZXI9dm9pZCAwO3IuQ29sdW1uRm9ybWF0dGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UudHJpbT90aGlzLmZvcm1hdD1lPT5lLnRyaW0oKTplLmx0cmltP3RoaXMuZm9ybWF0PWU9PmUudHJpbUxlZnQoKTplLnJ0cmltP3RoaXMuZm9ybWF0PWU9PmUudHJpbVJpZ2h0KCk6dGhpcy5mb3JtYXQ9ZT0+ZX19fSx7fV0sMTYxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Db2x1bW5QYXJzZXI9dm9pZCAwO2NvbnN0IG49ZShcIi4vTm9uUXVvdGVkQ29sdW1uUGFyc2VyXCIpLGk9ZShcIi4vUXVvdGVkQ29sdW1uUGFyc2VyXCIpLHM9ZShcIi4uL1Rva2VuXCIpO3IuQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyc2VyT3B0aW9ucz1lLHRoaXMucXVvdGVkQ29sdW1uUGFyc2VyPW5ldyBpLlF1b3RlZENvbHVtblBhcnNlcihlKSx0aGlzLm5vblF1b3RlZENvbHVtblBhcnNlcj1uZXcgbi5Ob25RdW90ZWRDb2x1bW5QYXJzZXIoZSl9cGFyc2UoZSl7Y29uc3R7bmV4dE5vblNwYWNlVG9rZW46dH09ZTtyZXR1cm4gbnVsbCE9PXQmJnMuVG9rZW4uaXNUb2tlblF1b3RlKHQsdGhpcy5wYXJzZXJPcHRpb25zKT8oZS5hZHZhbmNlVG9Ub2tlbih0KSx0aGlzLnF1b3RlZENvbHVtblBhcnNlci5wYXJzZShlKSk6dGhpcy5ub25RdW90ZWRDb2x1bW5QYXJzZXIucGFyc2UoZSl9fX0se1wiLi4vVG9rZW5cIjoxNTksXCIuL05vblF1b3RlZENvbHVtblBhcnNlclwiOjE2MixcIi4vUXVvdGVkQ29sdW1uUGFyc2VyXCI6MTYzfV0sMTYyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5Ob25RdW90ZWRDb2x1bW5QYXJzZXI9dm9pZCAwO2NvbnN0IG49ZShcIi4vQ29sdW1uRm9ybWF0dGVyXCIpLGk9ZShcIi4uL1Rva2VuXCIpO3IuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMucGFyc2VyT3B0aW9ucz1lLHRoaXMuY29sdW1uRm9ybWF0dGVyPW5ldyBuLkNvbHVtbkZvcm1hdHRlcihlKX1wYXJzZShlKXtpZighZS5oYXNNb3JlQ2hhcmFjdGVycylyZXR1cm4gbnVsbDtjb25zdHtwYXJzZXJPcHRpb25zOnR9PXRoaXMscj1bXTtsZXQgbj1lLm5leHRDaGFyYWN0ZXJUb2tlbjtmb3IoO24mJighaS5Ub2tlbi5pc1Rva2VuRGVsaW1pdGVyKG4sdCkmJiFpLlRva2VuLmlzVG9rZW5Sb3dEZWxpbWl0ZXIobikpO249ZS5uZXh0Q2hhcmFjdGVyVG9rZW4pci5wdXNoKG4udG9rZW4pLGUuYWR2YW5jZVBhc3RUb2tlbihuKTtyZXR1cm4gdGhpcy5jb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0KHIuam9pbihcIlwiKSl9fX0se1wiLi4vVG9rZW5cIjoxNTksXCIuL0NvbHVtbkZvcm1hdHRlclwiOjE2MH1dLDE2MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuUXVvdGVkQ29sdW1uUGFyc2VyPXZvaWQgMDtjb25zdCBuPWUoXCIuL0NvbHVtbkZvcm1hdHRlclwiKSxpPWUoXCIuLi9Ub2tlblwiKTtyLlF1b3RlZENvbHVtblBhcnNlcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLnBhcnNlck9wdGlvbnM9ZSx0aGlzLmNvbHVtbkZvcm1hdHRlcj1uZXcgbi5Db2x1bW5Gb3JtYXR0ZXIoZSl9cGFyc2UoZSl7aWYoIWUuaGFzTW9yZUNoYXJhY3RlcnMpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmN1cnNvcix7Zm91bmRDbG9zaW5nUXVvdGU6cixjb2w6bn09dGhpcy5nYXRoZXJEYXRhQmV0d2VlblF1b3RlcyhlKTtpZighcil7aWYoZS5hZHZhbmNlVG8odCksIWUuaGFzTW9yZURhdGEpdGhyb3cgbmV3IEVycm9yKGBQYXJzZSBFcnJvcjogbWlzc2luZyBjbG9zaW5nOiAnJHt0aGlzLnBhcnNlck9wdGlvbnMucXVvdGV8fFwiXCJ9JyBpbiBsaW5lOiBhdCAnJHtlLmxpbmVGcm9tQ3Vyc29yLnJlcGxhY2UoL1tcXHJcXG5dL2csXCJcXFxcbidcIil9J2ApO3JldHVybiBudWxsfXJldHVybiB0aGlzLmNoZWNrRm9yTWFsZm9ybWVkQ29sdW1uKGUpLG59Z2F0aGVyRGF0YUJldHdlZW5RdW90ZXMoZSl7Y29uc3R7cGFyc2VyT3B0aW9uczp0fT10aGlzO2xldCByPSExLG49ITE7Y29uc3Qgcz1bXTtsZXQgbz1lLm5leHRDaGFyYWN0ZXJUb2tlbjtmb3IoOyFuJiZudWxsIT09bztvPWUubmV4dENoYXJhY3RlclRva2VuKXtjb25zdCBhPWkuVG9rZW4uaXNUb2tlblF1b3RlKG8sdCk7aWYoIXImJmEpcj0hMDtlbHNlIGlmKHIpaWYoaS5Ub2tlbi5pc1Rva2VuRXNjYXBlQ2hhcmFjdGVyKG8sdCkpe2UuYWR2YW5jZVBhc3RUb2tlbihvKTtjb25zdCByPWUubmV4dENoYXJhY3RlclRva2VuO251bGwhPT1yJiYoaS5Ub2tlbi5pc1Rva2VuUXVvdGUocix0KXx8aS5Ub2tlbi5pc1Rva2VuRXNjYXBlQ2hhcmFjdGVyKHIsdCkpPyhzLnB1c2goci50b2tlbiksbz1yKTphP249ITA6cy5wdXNoKG8udG9rZW4pfWVsc2UgYT9uPSEwOnMucHVzaChvLnRva2VuKTtlLmFkdmFuY2VQYXN0VG9rZW4obyl9cmV0dXJue2NvbDp0aGlzLmNvbHVtbkZvcm1hdHRlci5mb3JtYXQocy5qb2luKFwiXCIpKSxmb3VuZENsb3NpbmdRdW90ZTpufX1jaGVja0Zvck1hbGZvcm1lZENvbHVtbihlKXtjb25zdHtwYXJzZXJPcHRpb25zOnR9PXRoaXMse25leHROb25TcGFjZVRva2VuOnJ9PWU7aWYocil7Y29uc3Qgbj1pLlRva2VuLmlzVG9rZW5EZWxpbWl0ZXIocix0KSxzPWkuVG9rZW4uaXNUb2tlblJvd0RlbGltaXRlcihyKTtpZighbiYmIXMpe2NvbnN0IG49ZS5saW5lRnJvbUN1cnNvci5zdWJzdHIoMCwxMCkucmVwbGFjZSgvW1xcclxcbl0vZyxcIlxcXFxuJ1wiKTt0aHJvdyBuZXcgRXJyb3IoYFBhcnNlIEVycm9yOiBleHBlY3RlZDogJyR7dC5lc2NhcGVkRGVsaW1pdGVyfScgT1IgbmV3IGxpbmUgZ290OiAnJHtyLnRva2VufScuIGF0ICcke259YCl9ZS5hZHZhbmNlVG9Ub2tlbihyKX1lbHNlIGUuaGFzTW9yZURhdGF8fGUuYWR2YW5jZVBhc3RMaW5lKCl9fX0se1wiLi4vVG9rZW5cIjoxNTksXCIuL0NvbHVtbkZvcm1hdHRlclwiOjE2MH1dLDE2NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuQ29sdW1uRm9ybWF0dGVyPXIuUXVvdGVkQ29sdW1uUGFyc2VyPXIuTm9uUXVvdGVkQ29sdW1uUGFyc2VyPXIuQ29sdW1uUGFyc2VyPXZvaWQgMDt2YXIgbj1lKFwiLi9Db2x1bW5QYXJzZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJDb2x1bW5QYXJzZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi5Db2x1bW5QYXJzZXJ9fSk7dmFyIGk9ZShcIi4vTm9uUXVvdGVkQ29sdW1uUGFyc2VyXCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiTm9uUXVvdGVkQ29sdW1uUGFyc2VyXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuTm9uUXVvdGVkQ29sdW1uUGFyc2VyfX0pO3ZhciBzPWUoXCIuL1F1b3RlZENvbHVtblBhcnNlclwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIlF1b3RlZENvbHVtblBhcnNlclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLlF1b3RlZENvbHVtblBhcnNlcn19KTt2YXIgbz1lKFwiLi9Db2x1bW5Gb3JtYXR0ZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJDb2x1bW5Gb3JtYXR0ZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Db2x1bW5Gb3JtYXR0ZXJ9fSl9LHtcIi4vQ29sdW1uRm9ybWF0dGVyXCI6MTYwLFwiLi9Db2x1bW5QYXJzZXJcIjoxNjEsXCIuL05vblF1b3RlZENvbHVtblBhcnNlclwiOjE2MixcIi4vUXVvdGVkQ29sdW1uUGFyc2VyXCI6MTYzfV0sMTY1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5RdW90ZWRDb2x1bW5QYXJzZXI9ci5Ob25RdW90ZWRDb2x1bW5QYXJzZXI9ci5Db2x1bW5QYXJzZXI9ci5Ub2tlbj1yLlNjYW5uZXI9ci5Sb3dQYXJzZXI9ci5QYXJzZXI9dm9pZCAwO3ZhciBuPWUoXCIuL1BhcnNlclwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIlBhcnNlclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlBhcnNlcn19KTt2YXIgaT1lKFwiLi9Sb3dQYXJzZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJSb3dQYXJzZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5Sb3dQYXJzZXJ9fSk7dmFyIHM9ZShcIi4vU2Nhbm5lclwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIlNjYW5uZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5TY2FubmVyfX0pO3ZhciBvPWUoXCIuL1Rva2VuXCIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiVG9rZW5cIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5Ub2tlbn19KTt2YXIgYT1lKFwiLi9jb2x1bW5cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJDb2x1bW5QYXJzZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Db2x1bW5QYXJzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJOb25RdW90ZWRDb2x1bW5QYXJzZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5Ob25RdW90ZWRDb2x1bW5QYXJzZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJRdW90ZWRDb2x1bW5QYXJzZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5RdW90ZWRDb2x1bW5QYXJzZXJ9fSl9LHtcIi4vUGFyc2VyXCI6MTU2LFwiLi9Sb3dQYXJzZXJcIjoxNTcsXCIuL1NjYW5uZXJcIjoxNTgsXCIuL1Rva2VuXCI6MTU5LFwiLi9jb2x1bW5cIjoxNjR9XSwxNjY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuSGVhZGVyVHJhbnNmb3JtZXI9dm9pZCAwO2NvbnN0IGk9bihlKFwibG9kYXNoLmlzdW5kZWZpbmVkXCIpKSxzPW4oZShcImxvZGFzaC5pc2Z1bmN0aW9uXCIpKSxvPW4oZShcImxvZGFzaC51bmlxXCIpKSxhPW4oZShcImxvZGFzaC5ncm91cGJ5XCIpKTtyLkhlYWRlclRyYW5zZm9ybWVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuaGVhZGVycz1udWxsLHRoaXMucmVjZWl2ZWRIZWFkZXJzPSExLHRoaXMuc2hvdWxkVXNlRmlyc3RSb3c9ITEsdGhpcy5wcm9jZXNzZWRGaXJzdFJvdz0hMSx0aGlzLmhlYWRlcnNMZW5ndGg9MCx0aGlzLnBhcnNlck9wdGlvbnM9ZSwhMD09PWUuaGVhZGVycz90aGlzLnNob3VsZFVzZUZpcnN0Um93PSEwOkFycmF5LmlzQXJyYXkoZS5oZWFkZXJzKT90aGlzLnNldEhlYWRlcnMoZS5oZWFkZXJzKTpzLmRlZmF1bHQoZS5oZWFkZXJzKSYmKHRoaXMuaGVhZGVyc1RyYW5zZm9ybT1lLmhlYWRlcnMpfXRyYW5zZm9ybShlLHQpe3JldHVybiB0aGlzLnNob3VsZE1hcFJvdyhlKT90KG51bGwsdGhpcy5wcm9jZXNzUm93KGUpKTp0KG51bGwse3JvdzpudWxsLGlzVmFsaWQ6ITB9KX1zaG91bGRNYXBSb3coZSl7Y29uc3R7cGFyc2VyT3B0aW9uczp0fT10aGlzO2lmKCF0aGlzLmhlYWRlcnNUcmFuc2Zvcm0mJnQucmVuYW1lSGVhZGVycyYmIXRoaXMucHJvY2Vzc2VkRmlyc3RSb3cpe2lmKCF0aGlzLnJlY2VpdmVkSGVhZGVycyl0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciByZW5hbWluZyBoZWFkZXJzOiBuZXcgaGVhZGVycyBtdXN0IGJlIHByb3ZpZGVkIGluIGFuIGFycmF5XCIpO3JldHVybiB0aGlzLnByb2Nlc3NlZEZpcnN0Um93PSEwLCExfWlmKCF0aGlzLnJlY2VpdmVkSGVhZGVycyYmQXJyYXkuaXNBcnJheShlKSl7aWYodGhpcy5oZWFkZXJzVHJhbnNmb3JtKXRoaXMuc2V0SGVhZGVycyh0aGlzLmhlYWRlcnNUcmFuc2Zvcm0oZSkpO2Vsc2V7aWYoIXRoaXMuc2hvdWxkVXNlRmlyc3RSb3cpcmV0dXJuITA7dGhpcy5zZXRIZWFkZXJzKGUpfXJldHVybiExfXJldHVybiEwfXByb2Nlc3NSb3coZSl7aWYoIXRoaXMuaGVhZGVycylyZXR1cm57cm93OmUsaXNWYWxpZDohMH07Y29uc3R7cGFyc2VyT3B0aW9uczp0fT10aGlzO2lmKCF0LmRpc2NhcmRVbm1hcHBlZENvbHVtbnMmJmUubGVuZ3RoPnRoaXMuaGVhZGVyc0xlbmd0aCl7aWYoIXQuc3RyaWN0Q29sdW1uSGFuZGxpbmcpdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIEVycm9yOiBjb2x1bW4gaGVhZGVyIG1pc21hdGNoIGV4cGVjdGVkOiAke3RoaXMuaGVhZGVyc0xlbmd0aH0gY29sdW1ucyBnb3Q6ICR7ZS5sZW5ndGh9YCk7cmV0dXJue3JvdzplLGlzVmFsaWQ6ITEscmVhc29uOmBDb2x1bW4gaGVhZGVyIG1pc21hdGNoIGV4cGVjdGVkOiAke3RoaXMuaGVhZGVyc0xlbmd0aH0gY29sdW1ucyBnb3Q6ICR7ZS5sZW5ndGh9YH19cmV0dXJuIHQuc3RyaWN0Q29sdW1uSGFuZGxpbmcmJmUubGVuZ3RoPHRoaXMuaGVhZGVyc0xlbmd0aD97cm93OmUsaXNWYWxpZDohMSxyZWFzb246YENvbHVtbiBoZWFkZXIgbWlzbWF0Y2ggZXhwZWN0ZWQ6ICR7dGhpcy5oZWFkZXJzTGVuZ3RofSBjb2x1bW5zIGdvdDogJHtlLmxlbmd0aH1gfTp7cm93OnRoaXMubWFwSGVhZGVycyhlKSxpc1ZhbGlkOiEwfX1tYXBIZWFkZXJzKGUpe2NvbnN0IHQ9e30se2hlYWRlcnM6cixoZWFkZXJzTGVuZ3RoOm59PXRoaXM7Zm9yKGxldCBzPTA7czxuO3MrPTEpe2NvbnN0IG49cltzXTtpZighaS5kZWZhdWx0KG4pKXtjb25zdCByPWVbc107aS5kZWZhdWx0KHIpP3Rbbl09XCJcIjp0W25dPXJ9fXJldHVybiB0fXNldEhlYWRlcnMoZSl7dmFyIHQ7Y29uc3Qgcj1lLmZpbHRlcihlPT4hIWUpO2lmKG8uZGVmYXVsdChyKS5sZW5ndGghPT1yLmxlbmd0aCl7Y29uc3QgZT1hLmRlZmF1bHQociksdD1PYmplY3Qua2V5cyhlKS5maWx0ZXIodD0+ZVt0XS5sZW5ndGg+MSk7dGhyb3cgbmV3IEVycm9yKFwiRHVwbGljYXRlIGhlYWRlcnMgZm91bmQgXCIrSlNPTi5zdHJpbmdpZnkodCkpfXRoaXMuaGVhZGVycz1lLHRoaXMucmVjZWl2ZWRIZWFkZXJzPSEwLHRoaXMuaGVhZGVyc0xlbmd0aD0obnVsbD09PSh0PXRoaXMuaGVhZGVycyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKXx8MH19fSx7XCJsb2Rhc2guZ3JvdXBieVwiOjQ0MyxcImxvZGFzaC5pc2Z1bmN0aW9uXCI6NDQ2LFwibG9kYXNoLmlzdW5kZWZpbmVkXCI6NDQ4LFwibG9kYXNoLnVuaXFcIjo0NDl9XSwxNjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuUm93VHJhbnNmb3JtZXJWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IGk9bihlKFwibG9kYXNoLmlzZnVuY3Rpb25cIikpLHM9ZShcIi4uL3R5cGVzXCIpO2NsYXNzIG97Y29uc3RydWN0b3IoKXt0aGlzLl9yb3dUcmFuc2Zvcm09bnVsbCx0aGlzLl9yb3dWYWxpZGF0b3I9bnVsbH1zdGF0aWMgY3JlYXRlVHJhbnNmb3JtKGUpe3JldHVybiBzLmlzU3luY1RyYW5zZm9ybShlKT8odCxyKT0+e2xldCBuPW51bGw7dHJ5e249ZSh0KX1jYXRjaChlKXtyZXR1cm4gcihlKX1yZXR1cm4gcihudWxsLG4pfTplfXN0YXRpYyBjcmVhdGVWYWxpZGF0b3IoZSl7cmV0dXJuIHMuaXNTeW5jVmFsaWRhdGUoZSk/KHQscik9PntyKG51bGwse3Jvdzp0LGlzVmFsaWQ6ZSh0KX0pfToodCxyKT0+e2UodCwoZSxuLGkpPT5lP3IoZSk6cihudWxsLG4/e3Jvdzp0LGlzVmFsaWQ6bixyZWFzb246aX06e3Jvdzp0LGlzVmFsaWQ6ITEscmVhc29uOml9KSl9fXNldCByb3dUcmFuc2Zvcm0oZSl7aWYoIWkuZGVmYXVsdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHRyYW5zZm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTt0aGlzLl9yb3dUcmFuc2Zvcm09by5jcmVhdGVUcmFuc2Zvcm0oZSl9c2V0IHJvd1ZhbGlkYXRvcihlKXtpZighaS5kZWZhdWx0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgdmFsaWRhdGUgc2hvdWxkIGJlIGEgZnVuY3Rpb25cIik7dGhpcy5fcm93VmFsaWRhdG9yPW8uY3JlYXRlVmFsaWRhdG9yKGUpfXRyYW5zZm9ybUFuZFZhbGlkYXRlKGUsdCl7cmV0dXJuIHRoaXMuY2FsbFRyYW5zZm9ybWVyKGUsKGUscik9PmU/dChlKTpyP3RoaXMuY2FsbFZhbGlkYXRvcihyLChlLG4pPT5lP3QoZSk6biYmIW4uaXNWYWxpZD90KG51bGwse3JvdzpyLGlzVmFsaWQ6ITEscmVhc29uOm4ucmVhc29ufSk6dChudWxsLHtyb3c6cixpc1ZhbGlkOiEwfSkpOnQobnVsbCx7cm93Om51bGwsaXNWYWxpZDohMH0pKX1jYWxsVHJhbnNmb3JtZXIoZSx0KXtyZXR1cm4gdGhpcy5fcm93VHJhbnNmb3JtP3RoaXMuX3Jvd1RyYW5zZm9ybShlLHQpOnQobnVsbCxlKX1jYWxsVmFsaWRhdG9yKGUsdCl7cmV0dXJuIHRoaXMuX3Jvd1ZhbGlkYXRvcj90aGlzLl9yb3dWYWxpZGF0b3IoZSx0KTp0KG51bGwse3JvdzplLGlzVmFsaWQ6ITB9KX19ci5Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvcj1vfSx7XCIuLi90eXBlc1wiOjE2OSxcImxvZGFzaC5pc2Z1bmN0aW9uXCI6NDQ2fV0sMTY4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5IZWFkZXJUcmFuc2Zvcm1lcj1yLlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yPXZvaWQgMDt2YXIgbj1lKFwiLi9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvclwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIlJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uUm93VHJhbnNmb3JtZXJWYWxpZGF0b3J9fSk7dmFyIGk9ZShcIi4vSGVhZGVyVHJhbnNmb3JtZXJcIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJIZWFkZXJUcmFuc2Zvcm1lclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLkhlYWRlclRyYW5zZm9ybWVyfX0pfSx7XCIuL0hlYWRlclRyYW5zZm9ybWVyXCI6MTY2LFwiLi9Sb3dUcmFuc2Zvcm1lclZhbGlkYXRvclwiOjE2N31dLDE2OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuaXNTeW5jVmFsaWRhdGU9ci5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLHIuaXNTeW5jVHJhbnNmb3JtPWU9PjE9PT1lLmxlbmd0aCxyLmlzU3luY1ZhbGlkYXRlPWU9PjE9PT1lLmxlbmd0aH0se31dLDE3MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49cjtuLmJpZ251bT1lKFwiYm4uanNcIiksbi5kZWZpbmU9ZShcIi4vYXNuMS9hcGlcIikuZGVmaW5lLG4uYmFzZT1lKFwiLi9hc24xL2Jhc2VcIiksbi5jb25zdGFudHM9ZShcIi4vYXNuMS9jb25zdGFudHNcIiksbi5kZWNvZGVycz1lKFwiLi9hc24xL2RlY29kZXJzXCIpLG4uZW5jb2RlcnM9ZShcIi4vYXNuMS9lbmNvZGVyc1wiKX0se1wiLi9hc24xL2FwaVwiOjE3MSxcIi4vYXNuMS9iYXNlXCI6MTczLFwiLi9hc24xL2NvbnN0YW50c1wiOjE3NyxcIi4vYXNuMS9kZWNvZGVyc1wiOjE3OSxcIi4vYXNuMS9lbmNvZGVyc1wiOjE4MixcImJuLmpzXCI6MTg0fV0sMTcxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiLi9lbmNvZGVyc1wiKSxpPWUoXCIuL2RlY29kZXJzXCIpLHM9ZShcImluaGVyaXRzXCIpO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLmJvZHk9dCx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319ci5kZWZpbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IG8oZSx0KX0sby5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5uYW1lO2Z1bmN0aW9uIHIoZSl7dGhpcy5faW5pdE5hbWVkKGUsdCl9cmV0dXJuIHMocixlKSxyLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKHQscil7ZS5jYWxsKHRoaXMsdCxyKX0sbmV3IHIodGhpcyl9LG8ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fFwiZGVyXCIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShlKXx8KHRoaXMuZGVjb2RlcnNbZV09dGhpcy5fY3JlYXRlTmFtZWQoaVtlXSkpLHRoaXMuZGVjb2RlcnNbZV19LG8ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIodCkuZGVjb2RlKGUscil9LG8ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fFwiZGVyXCIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShlKXx8KHRoaXMuZW5jb2RlcnNbZV09dGhpcy5fY3JlYXRlTmFtZWQobltlXSkpLHRoaXMuZW5jb2RlcnNbZV19LG8ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIodCkuZW5jb2RlKGUscil9fSx7XCIuL2RlY29kZXJzXCI6MTc5LFwiLi9lbmNvZGVyc1wiOjE4Mixpbmhlcml0czo0NDB9XSwxNzI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCIuLi9iYXNlL3JlcG9ydGVyXCIpLlJlcG9ydGVyLHM9ZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gbyhlLHQpe2kuY2FsbCh0aGlzLHQpLHMuaXNCdWZmZXIoZSk/KHRoaXMuYmFzZT1lLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9ZS5sZW5ndGgpOnRoaXMuZXJyb3IoXCJJbnB1dCBub3QgQnVmZmVyXCIpfWZ1bmN0aW9uIGEoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGEuaXNFbmNvZGVyQnVmZmVyKGUpfHwoZT1uZXcgYShlLHQpKSx0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsZX0pLHRoaXMpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKCEoMDw9ZSYmZTw9MjU1KSlyZXR1cm4gdC5lcnJvcihcIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWVcIik7dGhpcy52YWx1ZT1lLHRoaXMubGVuZ3RoPTF9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgZSl0aGlzLnZhbHVlPWUsdGhpcy5sZW5ndGg9cy5ieXRlTGVuZ3RoKGUpO2Vsc2V7aWYoIXMuaXNCdWZmZXIoZSkpcmV0dXJuIHQuZXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlOiBcIit0eXBlb2YgZSk7dGhpcy52YWx1ZT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RofX1uKG8saSksci5EZWNvZGVyQnVmZmVyPW8sby5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuITA7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGUmJnMuaXNCdWZmZXIoZS5iYXNlKSYmXCJEZWNvZGVyQnVmZmVyXCI9PT1lLmNvbnN0cnVjdG9yLm5hbWUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLm9mZnNldCYmXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnNhdmUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVzdG9yZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5pc0VtcHR5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlYWRVSW50OCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5za2lwJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJhd30sby5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6aS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sby5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBvKHRoaXMuYmFzZSk7cmV0dXJuIHQub2Zmc2V0PWUub2Zmc2V0LHQubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PWUub2Zmc2V0LGkucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLGUucmVwb3J0ZXIpLHR9LG8ucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sby5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoZXx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIil9LG8ucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMub2Zmc2V0K2U8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcih0fHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKTtjb25zdCByPW5ldyBvKHRoaXMuYmFzZSk7cmV0dXJuIHIuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyLm9mZnNldD10aGlzLm9mZnNldCxyLmxlbmd0aD10aGlzLm9mZnNldCtlLHRoaXMub2Zmc2V0Kz1lLHJ9LG8ucHJvdG90eXBlLnJhdz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKGU/ZS5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxyLkVuY29kZXJCdWZmZXI9YSxhLmlzRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgYSlyZXR1cm4hMDtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmXCJFbmNvZGVyQnVmZmVyXCI9PT1lLmNvbnN0cnVjdG9yLm5hbWUmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5qb2lufSxhLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGV8fChlPXMuYWxsb2ModGhpcy5sZW5ndGgpKSx0fHwodD0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5qb2luKGUsdCksdCs9ci5sZW5ndGh9KSk6KFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnZhbHVlP2VbdF09dGhpcy52YWx1ZTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT9lLndyaXRlKHRoaXMudmFsdWUsdCk6cy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KGUsdCksdCs9dGhpcy5sZW5ndGgpKSxlfX0se1wiLi4vYmFzZS9yZXBvcnRlclwiOjE3NSxpbmhlcml0czo0NDAsXCJzYWZlci1idWZmZXJcIjo0OTV9XSwxNzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPXI7bi5SZXBvcnRlcj1lKFwiLi9yZXBvcnRlclwiKS5SZXBvcnRlcixuLkRlY29kZXJCdWZmZXI9ZShcIi4vYnVmZmVyXCIpLkRlY29kZXJCdWZmZXIsbi5FbmNvZGVyQnVmZmVyPWUoXCIuL2J1ZmZlclwiKS5FbmNvZGVyQnVmZmVyLG4uTm9kZT1lKFwiLi9ub2RlXCIpfSx7XCIuL2J1ZmZlclwiOjE3MixcIi4vbm9kZVwiOjE3NCxcIi4vcmVwb3J0ZXJcIjoxNzV9XSwxNzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCIuLi9iYXNlL3JlcG9ydGVyXCIpLlJlcG9ydGVyLGk9ZShcIi4uL2Jhc2UvYnVmZmVyXCIpLkVuY29kZXJCdWZmZXIscz1lKFwiLi4vYmFzZS9idWZmZXJcIikuRGVjb2RlckJ1ZmZlcixvPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpLGE9W1wic2VxXCIsXCJzZXFvZlwiLFwic2V0XCIsXCJzZXRvZlwiLFwib2JqaWRcIixcImJvb2xcIixcImdlbnRpbWVcIixcInV0Y3RpbWVcIixcIm51bGxfXCIsXCJlbnVtXCIsXCJpbnRcIixcIm9iakRlc2NcIixcImJpdHN0clwiLFwiYm1wc3RyXCIsXCJjaGFyc3RyXCIsXCJnZW5zdHJcIixcImdyYXBoc3RyXCIsXCJpYTVzdHJcIixcImlzbzY0NnN0clwiLFwibnVtc3RyXCIsXCJvY3RzdHJcIixcInByaW50c3RyXCIsXCJ0NjFzdHJcIixcInVuaXN0clwiLFwidXRmOHN0clwiLFwidmlkZW9zdHJcIl0sbD1bXCJrZXlcIixcIm9ialwiLFwidXNlXCIsXCJvcHRpb25hbFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJkZWZcIixcImNob2ljZVwiLFwiYW55XCIsXCJjb250YWluc1wiXS5jb25jYXQoYSk7ZnVuY3Rpb24gYyhlLHQscil7Y29uc3Qgbj17fTt0aGlzLl9iYXNlU3RhdGU9bixuLm5hbWU9cixuLmVuYz1lLG4ucGFyZW50PXR8fG51bGwsbi5jaGlsZHJlbj1udWxsLG4udGFnPW51bGwsbi5hcmdzPW51bGwsbi5yZXZlcnNlQXJncz1udWxsLG4uY2hvaWNlPW51bGwsbi5vcHRpb25hbD0hMSxuLmFueT0hMSxuLm9iaj0hMSxuLnVzZT1udWxsLG4udXNlRGVjb2Rlcj1udWxsLG4ua2V5PW51bGwsbi5kZWZhdWx0PW51bGwsbi5leHBsaWNpdD1udWxsLG4uaW1wbGljaXQ9bnVsbCxuLmNvbnRhaW5zPW51bGwsbi5wYXJlbnR8fChuLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dC5leHBvcnRzPWM7Y29uc3QgdT1bXCJlbmNcIixcInBhcmVudFwiLFwiY2hpbGRyZW5cIixcInRhZ1wiLFwiYXJnc1wiLFwicmV2ZXJzZUFyZ3NcIixcImNob2ljZVwiLFwib3B0aW9uYWxcIixcImFueVwiLFwib2JqXCIsXCJ1c2VcIixcImFsdGVyZWRVc2VcIixcImtleVwiLFwiZGVmYXVsdFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJjb250YWluc1wiXTtjLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5fYmFzZVN0YXRlLHQ9e307dS5mb3JFYWNoKChmdW5jdGlvbihyKXt0W3JdPWVbcl19KSk7Y29uc3Qgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT10LHJ9LGMucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9iYXNlU3RhdGU7bC5mb3JFYWNoKChmdW5jdGlvbih0KXt0aGlzW3RdPWZ1bmN0aW9uKCl7Y29uc3Qgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gZS5jaGlsZHJlbi5wdXNoKHIpLHJbdF0uYXBwbHkocixhcmd1bWVudHMpfX0pLHRoaXMpfSxjLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTtvKG51bGw9PT10LnBhcmVudCksZS5jYWxsKHRoaXMpLHQuY2hpbGRyZW49dC5jaGlsZHJlbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30pLHRoaXMpLG8uZXF1YWwodC5jaGlsZHJlbi5sZW5ndGgsMSxcIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZFwiKX0sYy5wcm90b3R5cGUuX3VzZUFyZ3M9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLl9iYXNlU3RhdGUscj1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSksdGhpcyk7ZT1lLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9KSx0aGlzKSwwIT09ci5sZW5ndGgmJihvKG51bGw9PT10LmNoaWxkcmVuKSx0LmNoaWxkcmVuPXIsci5mb3JFYWNoKChmdW5jdGlvbihlKXtlLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9KSx0aGlzKSksMCE9PWUubGVuZ3RoJiYobyhudWxsPT09dC5hcmdzKSx0LmFyZ3M9ZSx0LnJldmVyc2VBcmdzPWUubWFwKChmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8ZS5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gZTtjb25zdCB0PXt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihyKXtyPT0oMHxyKSYmKHJ8PTApO2NvbnN0IG49ZVtyXTt0W25dPXJ9KSksdH0pKSl9LFtcIl9wZWVrVGFnXCIsXCJfZGVjb2RlVGFnXCIsXCJfdXNlXCIsXCJfZGVjb2RlU3RyXCIsXCJfZGVjb2RlT2JqaWRcIixcIl9kZWNvZGVUaW1lXCIsXCJfZGVjb2RlTnVsbFwiLFwiX2RlY29kZUludFwiLFwiX2RlY29kZUJvb2xcIixcIl9kZWNvZGVMaXN0XCIsXCJfZW5jb2RlQ29tcG9zaXRlXCIsXCJfZW5jb2RlU3RyXCIsXCJfZW5jb2RlT2JqaWRcIixcIl9lbmNvZGVUaW1lXCIsXCJfZW5jb2RlTnVsbFwiLFwiX2VuY29kZUludFwiLFwiX2VuY29kZUJvb2xcIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yy5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IoZStcIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiBcIit0LmVuYyl9fSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24oZSl7Yy5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIG8obnVsbD09PXQudGFnKSx0LnRhZz1lLHRoaXMuX3VzZUFyZ3MociksdGhpc319KSksYy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKGUpe28oZSk7Y29uc3QgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIG8obnVsbD09PXQudXNlKSx0LnVzZT1lLHRoaXN9LGMucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxjLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIG8obnVsbD09PXQuZGVmYXVsdCksdC5kZWZhdWx0PWUsdC5vcHRpb25hbD0hMCx0aGlzfSxjLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbyhudWxsPT09dC5leHBsaWNpdCYmbnVsbD09PXQuaW1wbGljaXQpLHQuZXhwbGljaXQ9ZSx0aGlzfSxjLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbyhudWxsPT09dC5leHBsaWNpdCYmbnVsbD09PXQuaW1wbGljaXQpLHQuaW1wbGljaXQ9ZSx0aGlzfSxjLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX2Jhc2VTdGF0ZSx0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGUub2JqPSEwLDAhPT10Lmxlbmd0aCYmdGhpcy5fdXNlQXJncyh0KSx0aGlzfSxjLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIG8obnVsbD09PXQua2V5KSx0LmtleT1lLHRoaXN9LGMucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEwLHRoaXN9LGMucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbyhudWxsPT09dC5jaG9pY2UpLHQuY2hvaWNlPWUsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhlKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpKSx0aGlzfSxjLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbyhudWxsPT09dC51c2UpLHQuY29udGFpbnM9ZSx0aGlzfSxjLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXIucGFyZW50KXJldHVybiBlLndyYXBSZXN1bHQoci5jaGlsZHJlblswXS5fZGVjb2RlKGUsdCkpO2xldCBuLGk9ci5kZWZhdWx0LG89ITAsYT1udWxsO2lmKG51bGwhPT1yLmtleSYmKGE9ZS5lbnRlcktleShyLmtleSkpLHIub3B0aW9uYWwpe2xldCBuPW51bGw7aWYobnVsbCE9PXIuZXhwbGljaXQ/bj1yLmV4cGxpY2l0Om51bGwhPT1yLmltcGxpY2l0P249ci5pbXBsaWNpdDpudWxsIT09ci50YWcmJihuPXIudGFnKSxudWxsIT09bnx8ci5hbnkpe2lmKG89dGhpcy5fcGVla1RhZyhlLG4sci5hbnkpLGUuaXNFcnJvcihvKSlyZXR1cm4gb31lbHNle2NvbnN0IG49ZS5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLGUsdCk6dGhpcy5fZGVjb2RlQ2hvaWNlKGUsdCksbz0hMH1jYXRjaChlKXtvPSExfWUucmVzdG9yZShuKX19aWYoci5vYmomJm8mJihuPWUuZW50ZXJPYmplY3QoKSksbyl7aWYobnVsbCE9PXIuZXhwbGljaXQpe2NvbnN0IHQ9dGhpcy5fZGVjb2RlVGFnKGUsci5leHBsaWNpdCk7aWYoZS5pc0Vycm9yKHQpKXJldHVybiB0O2U9dH1jb25zdCBuPWUub2Zmc2V0O2lmKG51bGw9PT1yLnVzZSYmbnVsbD09PXIuY2hvaWNlKXtsZXQgdDtyLmFueSYmKHQ9ZS5zYXZlKCkpO2NvbnN0IG49dGhpcy5fZGVjb2RlVGFnKGUsbnVsbCE9PXIuaW1wbGljaXQ/ci5pbXBsaWNpdDpyLnRhZyxyLmFueSk7aWYoZS5pc0Vycm9yKG4pKXJldHVybiBuO3IuYW55P2k9ZS5yYXcodCk6ZT1ufWlmKHQmJnQudHJhY2smJm51bGwhPT1yLnRhZyYmdC50cmFjayhlLnBhdGgoKSxuLGUubGVuZ3RoLFwidGFnZ2VkXCIpLHQmJnQudHJhY2smJm51bGwhPT1yLnRhZyYmdC50cmFjayhlLnBhdGgoKSxlLm9mZnNldCxlLmxlbmd0aCxcImNvbnRlbnRcIiksci5hbnl8fChpPW51bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLGUsdCk6dGhpcy5fZGVjb2RlQ2hvaWNlKGUsdCkpLGUuaXNFcnJvcihpKSlyZXR1cm4gaTtpZihyLmFueXx8bnVsbCE9PXIuY2hvaWNlfHxudWxsPT09ci5jaGlsZHJlbnx8ci5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihyKXtyLl9kZWNvZGUoZSx0KX0pKSxyLmNvbnRhaW5zJiYoXCJvY3RzdHJcIj09PXIudGFnfHxcImJpdHN0clwiPT09ci50YWcpKXtjb25zdCBuPW5ldyBzKGkpO2k9dGhpcy5fZ2V0VXNlKHIuY29udGFpbnMsZS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUobix0KX19cmV0dXJuIHIub2JqJiZvJiYoaT1lLmxlYXZlT2JqZWN0KG4pKSxudWxsPT09ci5rZXl8fG51bGw9PT1pJiYhMCE9PW8/bnVsbCE9PWEmJmUuZXhpdEtleShhKTplLmxlYXZlS2V5KGEsci5rZXksaSksaX0sYy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oZSx0LHIpe2NvbnN0IG49dGhpcy5fYmFzZVN0YXRlO3JldHVyblwic2VxXCI9PT1lfHxcInNldFwiPT09ZT9udWxsOlwic2Vxb2ZcIj09PWV8fFwic2V0b2ZcIj09PWU/dGhpcy5fZGVjb2RlTGlzdCh0LGUsbi5hcmdzWzBdLHIpOi9zdHIkLy50ZXN0KGUpP3RoaXMuX2RlY29kZVN0cih0LGUscik6XCJvYmppZFwiPT09ZSYmbi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKHQsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTpcIm9iamlkXCI9PT1lP3RoaXMuX2RlY29kZU9iamlkKHQsbnVsbCxudWxsLHIpOlwiZ2VudGltZVwiPT09ZXx8XCJ1dGN0aW1lXCI9PT1lP3RoaXMuX2RlY29kZVRpbWUodCxlLHIpOlwibnVsbF9cIj09PWU/dGhpcy5fZGVjb2RlTnVsbCh0LHIpOlwiYm9vbFwiPT09ZT90aGlzLl9kZWNvZGVCb29sKHQscik6XCJvYmpEZXNjXCI9PT1lP3RoaXMuX2RlY29kZVN0cih0LGUscik6XCJpbnRcIj09PWV8fFwiZW51bVwiPT09ZT90aGlzLl9kZWNvZGVJbnQodCxuLmFyZ3MmJm4uYXJnc1swXSxyKTpudWxsIT09bi51c2U/dGhpcy5fZ2V0VXNlKG4udXNlLHQuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKHQscik6dC5lcnJvcihcInVua25vd24gdGFnOiBcIitlKX0sYy5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihlLHQpe2NvbnN0IHI9dGhpcy5fYmFzZVN0YXRlO3JldHVybiByLnVzZURlY29kZXI9dGhpcy5fdXNlKGUsdCksbyhudWxsPT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sci5pbXBsaWNpdCE9PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5jbG9uZSgpLHIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PXIuaW1wbGljaXQpLHIudXNlRGVjb2Rlcn0sYy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihlLHQpe2NvbnN0IHI9dGhpcy5fYmFzZVN0YXRlO2xldCBuPW51bGwsaT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoci5jaG9pY2UpLnNvbWUoKGZ1bmN0aW9uKHMpe2NvbnN0IG89ZS5zYXZlKCksYT1yLmNob2ljZVtzXTt0cnl7Y29uc3Qgcj1hLl9kZWNvZGUoZSx0KTtpZihlLmlzRXJyb3IocikpcmV0dXJuITE7bj17dHlwZTpzLHZhbHVlOnJ9LGk9ITB9Y2F0Y2godCl7cmV0dXJuIGUucmVzdG9yZShvKSwhMX1yZXR1cm4hMH0pLHRoaXMpLGk/bjplLmVycm9yKFwiQ2hvaWNlIG5vdCBtYXRjaGVkXCIpfSxjLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoZSx0aGlzLnJlcG9ydGVyKX0sYy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihlLHQscil7Y29uc3Qgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PW4uZGVmYXVsdCYmbi5kZWZhdWx0PT09ZSlyZXR1cm47Y29uc3QgaT10aGlzLl9lbmNvZGVWYWx1ZShlLHQscik7cmV0dXJuIHZvaWQgMD09PWl8fHRoaXMuX3NraXBEZWZhdWx0KGksdCxyKT92b2lkIDA6aX0sYy5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBpPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09aS5wYXJlbnQpcmV0dXJuIGkuY2hpbGRyZW5bMF0uX2VuY29kZShlLHR8fG5ldyBuKTtsZXQgcz1udWxsO2lmKHRoaXMucmVwb3J0ZXI9dCxpLm9wdGlvbmFsJiZ2b2lkIDA9PT1lKXtpZihudWxsPT09aS5kZWZhdWx0KXJldHVybjtlPWkuZGVmYXVsdH1sZXQgbz1udWxsLGE9ITE7aWYoaS5hbnkpcz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUpO2Vsc2UgaWYoaS5jaG9pY2Upcz10aGlzLl9lbmNvZGVDaG9pY2UoZSx0KTtlbHNlIGlmKGkuY29udGFpbnMpbz10aGlzLl9nZXRVc2UoaS5jb250YWlucyxyKS5fZW5jb2RlKGUsdCksYT0hMDtlbHNlIGlmKGkuY2hpbGRyZW4pbz1pLmNoaWxkcmVuLm1hcCgoZnVuY3Rpb24ocil7aWYoXCJudWxsX1wiPT09ci5fYmFzZVN0YXRlLnRhZylyZXR1cm4gci5fZW5jb2RlKG51bGwsdCxlKTtpZihudWxsPT09ci5fYmFzZVN0YXRlLmtleSlyZXR1cm4gdC5lcnJvcihcIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5XCIpO2NvbnN0IG49dC5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSlyZXR1cm4gdC5lcnJvcihcIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdFwiKTtjb25zdCBpPXIuX2VuY29kZShlW3IuX2Jhc2VTdGF0ZS5rZXldLHQsZSk7cmV0dXJuIHQubGVhdmVLZXkobiksaX0pLHRoaXMpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGV9KSksbz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG8pO2Vsc2UgaWYoXCJzZXFvZlwiPT09aS50YWd8fFwic2V0b2ZcIj09PWkudGFnKXtpZighaS5hcmdzfHwxIT09aS5hcmdzLmxlbmd0aClyZXR1cm4gdC5lcnJvcihcIlRvbyBtYW55IGFyZ3MgZm9yIDogXCIraS50YWcpO2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0LmVycm9yKFwic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheVwiKTtjb25zdCByPXRoaXMuY2xvbmUoKTtyLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZS5tYXAoKGZ1bmN0aW9uKHIpe2NvbnN0IG49dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0aGlzLl9nZXRVc2Uobi5hcmdzWzBdLGUpLl9lbmNvZGUocix0KX0pLHIpKX1lbHNlIG51bGwhPT1pLnVzZT9zPXRoaXMuX2dldFVzZShpLnVzZSxyKS5fZW5jb2RlKGUsdCk6KG89dGhpcy5fZW5jb2RlUHJpbWl0aXZlKGkudGFnLGUpLGE9ITApO2lmKCFpLmFueSYmbnVsbD09PWkuY2hvaWNlKXtjb25zdCBlPW51bGwhPT1pLmltcGxpY2l0P2kuaW1wbGljaXQ6aS50YWcscj1udWxsPT09aS5pbXBsaWNpdD9cInVuaXZlcnNhbFwiOlwiY29udGV4dFwiO251bGw9PT1lP251bGw9PT1pLnVzZSYmdC5lcnJvcihcIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKVwiKTpudWxsPT09aS51c2UmJihzPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShlLGEscixvKSl9cmV0dXJuIG51bGwhPT1pLmV4cGxpY2l0JiYocz10aGlzLl9lbmNvZGVDb21wb3NpdGUoaS5leHBsaWNpdCwhMSxcImNvbnRleHRcIixzKSksc30sYy5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihlLHQpe2NvbnN0IHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbZS50eXBlXTtyZXR1cm4gbnx8byghMSxlLnR5cGUrXCIgbm90IGZvdW5kIGluIFwiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHIuY2hvaWNlKSkpLG4uX2VuY29kZShlLnZhbHVlLHQpfSxjLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoZSkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cih0LGUpO2lmKFwib2JqaWRcIj09PWUmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQodCxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoXCJvYmppZFwiPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQodCxudWxsLG51bGwpO2lmKFwiZ2VudGltZVwiPT09ZXx8XCJ1dGN0aW1lXCI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKHQsZSk7aWYoXCJudWxsX1wiPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKFwiaW50XCI9PT1lfHxcImVudW1cIj09PWUpcmV0dXJuIHRoaXMuX2VuY29kZUludCh0LHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoXCJib29sXCI9PT1lKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKHQpO2lmKFwib2JqRGVzY1wiPT09ZSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKHQsZSk7dGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdGFnOiBcIitlKX0sYy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoZSl9LGMucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKGUpe3JldHVybi9eW0EtWmEtejAtOSAnKCkrLC0uLzo9P10qJC8udGVzdChlKX19LHtcIi4uL2Jhc2UvYnVmZmVyXCI6MTcyLFwiLi4vYmFzZS9yZXBvcnRlclwiOjE3NSxcIm1pbmltYWxpc3RpYy1hc3NlcnRcIjo0NTN9XSwxNzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCJpbmhlcml0c1wiKTtmdW5jdGlvbiBpKGUpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczplfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIHMoZSx0KXt0aGlzLnBhdGg9ZSx0aGlzLnJldGhyb3codCl9ci5SZXBvcnRlcj1pLGkucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBzfSxpLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7Y29uc3QgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ZS5vYmoscGF0aExlbjplLnBhdGgubGVuZ3RofX0saS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5vYmo9ZS5vYmosdC5wYXRoPXQucGF0aC5zbGljZSgwLGUucGF0aExlbil9LGkucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChlKX0saS5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7dC5wYXRoPXQucGF0aC5zbGljZSgwLGUtMSl9LGkucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGUpLG51bGwhPT1uLm9iaiYmKG4ub2JqW3RdPXIpfSxpLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKFwiL1wiKX0saS5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuX3JlcG9ydGVyU3RhdGUsdD1lLm9iajtyZXR1cm4gZS5vYmo9e30sdH0saS5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oZSl7Y29uc3QgdD10aGlzLl9yZXBvcnRlclN0YXRlLHI9dC5vYmo7cmV0dXJuIHQub2JqPWUscn0saS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oZSl7bGV0IHQ7Y29uc3Qgcj10aGlzLl9yZXBvcnRlclN0YXRlLG49ZSBpbnN0YW5jZW9mIHM7aWYodD1uP2U6bmV3IHMoci5wYXRoLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCJbXCIrSlNPTi5zdHJpbmdpZnkoZSkrXCJdXCJ9KSkuam9pbihcIlwiKSxlLm1lc3NhZ2V8fGUsZS5zdGFjayksIXIub3B0aW9ucy5wYXJ0aWFsKXRocm93IHQ7cmV0dXJuIG58fHIuZXJyb3JzLnB1c2godCksdH0saS5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbihlKXtjb25zdCB0PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIHQub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKGUpP251bGw6ZSxlcnJvcnM6dC5lcnJvcnN9OmV9LG4ocyxFcnJvcikscy5wcm90b3R5cGUucmV0aHJvdz1mdW5jdGlvbihlKXtpZih0aGlzLm1lc3NhZ2U9ZStcIiBhdDogXCIrKHRoaXMucGF0aHx8XCIoc2hhbGxvdylcIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMscyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKGUpe3RoaXMuc3RhY2s9ZS5zdGFja31yZXR1cm4gdGhpc319LHtpbmhlcml0czo0NDB9XSwxNzY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUpe2NvbnN0IHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7Y29uc3Qgbj1lW3JdO3Rbbl09cn0pKSx0fXIudGFnQ2xhc3M9ezA6XCJ1bml2ZXJzYWxcIiwxOlwiYXBwbGljYXRpb25cIiwyOlwiY29udGV4dFwiLDM6XCJwcml2YXRlXCJ9LHIudGFnQ2xhc3NCeU5hbWU9bihyLnRhZ0NsYXNzKSxyLnRhZz17MDpcImVuZFwiLDE6XCJib29sXCIsMjpcImludFwiLDM6XCJiaXRzdHJcIiw0Olwib2N0c3RyXCIsNTpcIm51bGxfXCIsNjpcIm9iamlkXCIsNzpcIm9iakRlc2NcIiw4OlwiZXh0ZXJuYWxcIiw5OlwicmVhbFwiLDEwOlwiZW51bVwiLDExOlwiZW1iZWRcIiwxMjpcInV0ZjhzdHJcIiwxMzpcInJlbGF0aXZlT2lkXCIsMTY6XCJzZXFcIiwxNzpcInNldFwiLDE4OlwibnVtc3RyXCIsMTk6XCJwcmludHN0clwiLDIwOlwidDYxc3RyXCIsMjE6XCJ2aWRlb3N0clwiLDIyOlwiaWE1c3RyXCIsMjM6XCJ1dGN0aW1lXCIsMjQ6XCJnZW50aW1lXCIsMjU6XCJncmFwaHN0clwiLDI2OlwiaXNvNjQ2c3RyXCIsMjc6XCJnZW5zdHJcIiwyODpcInVuaXN0clwiLDI5OlwiY2hhcnN0clwiLDMwOlwiYm1wc3RyXCJ9LHIudGFnQnlOYW1lPW4oci50YWcpfSx7fV0sMTc3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1yO24uX3JldmVyc2U9ZnVuY3Rpb24oZSl7Y29uc3QgdD17fTtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7KDB8cik9PXImJihyfD0wKTtjb25zdCBuPWVbcl07dFtuXT1yfSkpLHR9LG4uZGVyPWUoXCIuL2RlclwiKX0se1wiLi9kZXJcIjoxNzZ9XSwxNzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCJibi5qc1wiKSxzPWUoXCIuLi9iYXNlL2J1ZmZlclwiKS5EZWNvZGVyQnVmZmVyLG89ZShcIi4uL2Jhc2Uvbm9kZVwiKSxhPWUoXCIuLi9jb25zdGFudHMvZGVyXCIpO2Z1bmN0aW9uIGwoZSl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9ZS5uYW1lLHRoaXMuZW50aXR5PWUsdGhpcy50cmVlPW5ldyBjLHRoaXMudHJlZS5faW5pdChlLmJvZHkpfWZ1bmN0aW9uIGMoZSl7by5jYWxsKHRoaXMsXCJkZXJcIixlKX1mdW5jdGlvbiB1KGUsdCl7bGV0IHI9ZS5yZWFkVUludDgodCk7aWYoZS5pc0Vycm9yKHIpKXJldHVybiByO2NvbnN0IG49YS50YWdDbGFzc1tyPj42XSxpPTA9PSgzMiZyKTtpZigzMT09KDMxJnIpKXtsZXQgbj1yO2ZvcihyPTA7MTI4PT0oMTI4Jm4pOyl7aWYobj1lLnJlYWRVSW50OCh0KSxlLmlzRXJyb3IobikpcmV0dXJuIG47cjw8PTcscnw9MTI3Jm59fWVsc2UgciY9MzE7cmV0dXJue2NsczpuLHByaW1pdGl2ZTppLHRhZzpyLHRhZ1N0cjphLnRhZ1tyXX19ZnVuY3Rpb24gaChlLHQscil7bGV0IG49ZS5yZWFkVUludDgocik7aWYoZS5pc0Vycm9yKG4pKXJldHVybiBuO2lmKCF0JiYxMjg9PT1uKXJldHVybiBudWxsO2lmKDA9PSgxMjgmbikpcmV0dXJuIG47Y29uc3QgaT0xMjcmbjtpZihpPjQpcmV0dXJuIGUuZXJyb3IoXCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nXCIpO249MDtmb3IobGV0IHQ9MDt0PGk7dCsrKXtuPDw9ODtjb25zdCB0PWUucmVhZFVJbnQ4KHIpO2lmKGUuaXNFcnJvcih0KSlyZXR1cm4gdDtufD10fXJldHVybiBufXQuZXhwb3J0cz1sLGwucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiBzLmlzRGVjb2RlckJ1ZmZlcihlKXx8KGU9bmV3IHMoZSx0KSksdGhpcy50cmVlLl9kZWNvZGUoZSx0KX0sbihjLG8pLGMucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKGUsdCxyKXtpZihlLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBuPWUuc2F2ZSgpLGk9dShlLCdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJyt0KydcIicpO3JldHVybiBlLmlzRXJyb3IoaSk/aTooZS5yZXN0b3JlKG4pLGkudGFnPT09dHx8aS50YWdTdHI9PT10fHxpLnRhZ1N0citcIm9mXCI9PT10fHxyKX0sYy5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihlLHQscil7Y29uc3Qgbj11KGUsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJyt0KydcIicpO2lmKGUuaXNFcnJvcihuKSlyZXR1cm4gbjtsZXQgaT1oKGUsbi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJyt0KydcIicpO2lmKGUuaXNFcnJvcihpKSlyZXR1cm4gaTtpZighciYmbi50YWchPT10JiZuLnRhZ1N0ciE9PXQmJm4udGFnU3RyK1wib2ZcIiE9PXQpcmV0dXJuIGUuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJyt0KydcIicpO2lmKG4ucHJpbWl0aXZlfHxudWxsIT09aSlyZXR1cm4gZS5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrdCsnXCInKTtjb25zdCBzPWUuc2F2ZSgpLG89dGhpcy5fc2tpcFVudGlsRW5kKGUsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyt0aGlzLnRhZysnXCInKTtyZXR1cm4gZS5pc0Vycm9yKG8pP286KGk9ZS5vZmZzZXQtcy5vZmZzZXQsZS5yZXN0b3JlKHMpLGUuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK3QrJ1wiJykpfSxjLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKGUsdCl7Zm9yKDs7KXtjb25zdCByPXUoZSx0KTtpZihlLmlzRXJyb3IocikpcmV0dXJuIHI7Y29uc3Qgbj1oKGUsci5wcmltaXRpdmUsdCk7aWYoZS5pc0Vycm9yKG4pKXJldHVybiBuO2xldCBpO2lmKGk9ci5wcmltaXRpdmV8fG51bGwhPT1uP2Uuc2tpcChuKTp0aGlzLl9za2lwVW50aWxFbmQoZSx0KSxlLmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoXCJlbmRcIj09PXIudGFnU3RyKWJyZWFrfX0sYy5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc3QgaT1bXTtmb3IoOyFlLmlzRW1wdHkoKTspe2NvbnN0IHQ9dGhpcy5fcGVla1RhZyhlLFwiZW5kXCIpO2lmKGUuaXNFcnJvcih0KSlyZXR1cm4gdDtjb25zdCBzPXIuZGVjb2RlKGUsXCJkZXJcIixuKTtpZihlLmlzRXJyb3IocykmJnQpYnJlYWs7aS5wdXNoKHMpfXJldHVybiBpfSxjLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKGUsdCl7aWYoXCJiaXRzdHJcIj09PXQpe2NvbnN0IHQ9ZS5yZWFkVUludDgoKTtyZXR1cm4gZS5pc0Vycm9yKHQpP3Q6e3VudXNlZDp0LGRhdGE6ZS5yYXcoKX19aWYoXCJibXBzdHJcIj09PXQpe2NvbnN0IHQ9ZS5yYXcoKTtpZih0Lmxlbmd0aCUyPT0xKXJldHVybiBlLmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2hcIik7bGV0IHI9XCJcIjtmb3IobGV0IGU9MDtlPHQubGVuZ3RoLzI7ZSsrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5yZWFkVUludDE2QkUoMiplKSk7cmV0dXJuIHJ9aWYoXCJudW1zdHJcIj09PXQpe2NvbnN0IHQ9ZS5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc051bXN0cih0KT90OmUuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9aWYoXCJvY3RzdHJcIj09PXQpcmV0dXJuIGUucmF3KCk7aWYoXCJvYmpEZXNjXCI9PT10KXJldHVybiBlLnJhdygpO2lmKFwicHJpbnRzdHJcIj09PXQpe2NvbnN0IHQ9ZS5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKHQpP3Q6ZS5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfXJldHVybi9zdHIkLy50ZXN0KHQpP2UucmF3KCkudG9TdHJpbmcoKTplLmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK3QrXCIgdW5zdXBwb3J0ZWRcIil9LGMucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihlLHQscil7bGV0IG47Y29uc3QgaT1bXTtsZXQgcz0wLG89MDtmb3IoOyFlLmlzRW1wdHkoKTspbz1lLnJlYWRVSW50OCgpLHM8PD03LHN8PTEyNyZvLDA9PSgxMjgmbykmJihpLnB1c2gocykscz0wKTsxMjgmbyYmaS5wdXNoKHMpO2NvbnN0IGE9aVswXS80MHwwLGw9aVswXSU0MDtpZihuPXI/aTpbYSxsXS5jb25jYXQoaS5zbGljZSgxKSksdCl7bGV0IGU9dFtuLmpvaW4oXCIgXCIpXTt2b2lkIDA9PT1lJiYoZT10W24uam9pbihcIi5cIildKSx2b2lkIDAhPT1lJiYobj1lKX1yZXR1cm4gbn0sYy5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oZSx0KXtjb25zdCByPWUucmF3KCkudG9TdHJpbmcoKTtsZXQgbixpLHMsbyxhLGw7aWYoXCJnZW50aW1lXCI9PT10KW49MHxyLnNsaWNlKDAsNCksaT0wfHIuc2xpY2UoNCw2KSxzPTB8ci5zbGljZSg2LDgpLG89MHxyLnNsaWNlKDgsMTApLGE9MHxyLnNsaWNlKDEwLDEyKSxsPTB8ci5zbGljZSgxMiwxNCk7ZWxzZXtpZihcInV0Y3RpbWVcIiE9PXQpcmV0dXJuIGUuZXJyb3IoXCJEZWNvZGluZyBcIit0K1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7bj0wfHIuc2xpY2UoMCwyKSxpPTB8ci5zbGljZSgyLDQpLHM9MHxyLnNsaWNlKDQsNiksbz0wfHIuc2xpY2UoNiw4KSxhPTB8ci5zbGljZSg4LDEwKSxsPTB8ci5zbGljZSgxMCwxMiksbj1uPDcwPzJlMytuOjE5MDArbn1yZXR1cm4gRGF0ZS5VVEMobixpLTEscyxvLGEsbCwwKX0sYy5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sYy5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnJlYWRVSW50OCgpO3JldHVybiBlLmlzRXJyb3IodCk/dDowIT09dH0sYy5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5yYXcoKTtsZXQgbj1uZXcgaShyKTtyZXR1cm4gdCYmKG49dFtuLnRvU3RyaW5nKDEwKV18fG4pLG59LGMucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxlLl9nZXREZWNvZGVyKFwiZGVyXCIpLnRyZWV9fSx7XCIuLi9iYXNlL2J1ZmZlclwiOjE3MixcIi4uL2Jhc2Uvbm9kZVwiOjE3NCxcIi4uL2NvbnN0YW50cy9kZXJcIjoxNzYsXCJibi5qc1wiOjE4NCxpbmhlcml0czo0NDB9XSwxNzk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtjb25zdCBuPXI7bi5kZXI9ZShcIi4vZGVyXCIpLG4ucGVtPWUoXCIuL3BlbVwiKX0se1wiLi9kZXJcIjoxNzgsXCIuL3BlbVwiOjE4MH1dLDE4MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcImluaGVyaXRzXCIpLGk9ZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXIscz1lKFwiLi9kZXJcIik7ZnVuY3Rpb24gbyhlKXtzLmNhbGwodGhpcyxlKSx0aGlzLmVuYz1cInBlbVwifW4obyxzKSx0LmV4cG9ydHM9byxvLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oZSx0KXtjb25zdCByPWUudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpLG49dC5sYWJlbC50b1VwcGVyQ2FzZSgpLG89L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBhPS0xLGw9LTE7Zm9yKGxldCBlPTA7ZTxyLmxlbmd0aDtlKyspe2NvbnN0IHQ9cltlXS5tYXRjaChvKTtpZihudWxsIT09dCYmdFsyXT09PW4pe2lmKC0xIT09YSl7aWYoXCJFTkRcIiE9PXRbMV0pYnJlYWs7bD1lO2JyZWFrfWlmKFwiQkVHSU5cIiE9PXRbMV0pYnJlYWs7YT1lfX1pZigtMT09PWF8fC0xPT09bCl0aHJvdyBuZXcgRXJyb3IoXCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiBcIituKTtjb25zdCBjPXIuc2xpY2UoYSsxLGwpLmpvaW4oXCJcIik7Yy5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLFwiXCIpO2NvbnN0IHU9aS5mcm9tKGMsXCJiYXNlNjRcIik7cmV0dXJuIHMucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsdSx0KX19LHtcIi4vZGVyXCI6MTc4LGluaGVyaXRzOjQ0MCxcInNhZmVyLWJ1ZmZlclwiOjQ5NX1dLDE4MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49ZShcImluaGVyaXRzXCIpLGk9ZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXIscz1lKFwiLi4vYmFzZS9ub2RlXCIpLG89ZShcIi4uL2NvbnN0YW50cy9kZXJcIik7ZnVuY3Rpb24gYShlKXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT1lLm5hbWUsdGhpcy5lbnRpdHk9ZSx0aGlzLnRyZWU9bmV3IGwsdGhpcy50cmVlLl9pbml0KGUuYm9keSl9ZnVuY3Rpb24gbChlKXtzLmNhbGwodGhpcyxcImRlclwiLGUpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU8MTA/XCIwXCIrZTplfXQuZXhwb3J0cz1hLGEucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShlLHQpLmpvaW4oKX0sbihsLHMpLGwucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oZSx0LHIsbil7Y29uc3Qgcz1mdW5jdGlvbihlLHQscixuKXtsZXQgaTtcInNlcW9mXCI9PT1lP2U9XCJzZXFcIjpcInNldG9mXCI9PT1lJiYoZT1cInNldFwiKTtpZihvLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShlKSlpPW8udGFnQnlOYW1lW2VdO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fCgwfGUpIT09ZSlyZXR1cm4gbi5lcnJvcihcIlVua25vd24gdGFnOiBcIitlKTtpPWV9aWYoaT49MzEpcmV0dXJuIG4uZXJyb3IoXCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWRcIik7dHx8KGl8PTMyKTtyZXR1cm4gaXw9by50YWdDbGFzc0J5TmFtZVtyfHxcInVuaXZlcnNhbFwiXTw8NixpfShlLHQscix0aGlzLnJlcG9ydGVyKTtpZihuLmxlbmd0aDwxMjgpe2NvbnN0IGU9aS5hbGxvYygyKTtyZXR1cm4gZVswXT1zLGVbMV09bi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbZSxuXSl9bGV0IGE9MTtmb3IobGV0IGU9bi5sZW5ndGg7ZT49MjU2O2U+Pj04KWErKztjb25zdCBsPWkuYWxsb2MoMithKTtsWzBdPXMsbFsxXT0xMjh8YTtmb3IobGV0IGU9MSthLHQ9bi5sZW5ndGg7dD4wO2UtLSx0Pj49OClsW2VdPTI1NSZ0O3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtsLG5dKX0sbC5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihlLHQpe2lmKFwiYml0c3RyXCI9PT10KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfGUudW51c2VkLGUuZGF0YV0pO2lmKFwiYm1wc3RyXCI9PT10KXtjb25zdCB0PWkuYWxsb2MoMiplLmxlbmd0aCk7Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspdC53cml0ZVVJbnQxNkJFKGUuY2hhckNvZGVBdChyKSwyKnIpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpfXJldHVyblwibnVtc3RyXCI9PT10P3RoaXMuX2lzTnVtc3RyKGUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlXCIpOlwicHJpbnRzdHJcIj09PXQ/dGhpcy5faXNQcmludHN0cihlKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGUpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFya1wiKTovc3RyJC8udGVzdCh0KXx8XCJvYmpEZXNjXCI9PT10P3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIit0K1wiIHVuc3VwcG9ydGVkXCIpfSxsLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oZSx0LHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZighdClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmRcIik7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcFwiKTtlPXRbZV0uc3BsaXQoL1tcXHMuXSsvZyk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0KyspZVt0XXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2U9ZS5zbGljZSgpO2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF18PTB9aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6IFwiK0pTT04uc3RyaW5naWZ5KGUpKTtpZighcil7aWYoZVsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0JcIik7ZS5zcGxpY2UoMCwyLDQwKmVbMF0rZVsxXSl9bGV0IG49MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IHI9ZVt0XTtmb3IobisrO3I+PTEyODtyPj49NyluKyt9Y29uc3Qgcz1pLmFsbG9jKG4pO2xldCBvPXMubGVuZ3RoLTE7Zm9yKGxldCB0PWUubGVuZ3RoLTE7dD49MDt0LS0pe2xldCByPWVbdF07Zm9yKHNbby0tXT0xMjcmcjsocj4+PTcpPjA7KXNbby0tXT0xMjh8MTI3JnJ9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocyl9LGwucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKGUsdCl7bGV0IHI7Y29uc3Qgbj1uZXcgRGF0ZShlKTtyZXR1cm5cImdlbnRpbWVcIj09PXQ/cj1bYyhuLmdldFVUQ0Z1bGxZZWFyKCkpLGMobi5nZXRVVENNb250aCgpKzEpLGMobi5nZXRVVENEYXRlKCkpLGMobi5nZXRVVENIb3VycygpKSxjKG4uZ2V0VVRDTWludXRlcygpKSxjKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTpcInV0Y3RpbWVcIj09PXQ/cj1bYyhuLmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxjKG4uZ2V0VVRDTW9udGgoKSsxKSxjKG4uZ2V0VVRDRGF0ZSgpKSxjKG4uZ2V0VVRDSG91cnMoKSksYyhuLmdldFVUQ01pbnV0ZXMoKSksYyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIFwiK3QrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKSx0aGlzLl9lbmNvZGVTdHIocixcIm9jdHN0clwiKX0sbC5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihcIlwiKX0sbC5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihlLHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZighdClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXBcIik7aWYoIXQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogXCIrSlNPTi5zdHJpbmdpZnkoZSkpO2U9dFtlXX1pZihcIm51bWJlclwiIT10eXBlb2YgZSYmIWkuaXNCdWZmZXIoZSkpe2NvbnN0IHQ9ZS50b0FycmF5KCk7IWUuc2lnbiYmMTI4JnRbMF0mJnQudW5zaGlmdCgwKSxlPWkuZnJvbSh0KX1pZihpLmlzQnVmZmVyKGUpKXtsZXQgdD1lLmxlbmd0aDswPT09ZS5sZW5ndGgmJnQrKztjb25zdCByPWkuYWxsb2ModCk7cmV0dXJuIGUuY29weShyKSwwPT09ZS5sZW5ndGgmJihyWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocil9aWYoZTwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZSk7aWYoZTwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsZV0pO2xldCByPTE7Zm9yKGxldCB0PWU7dD49MjU2O3Q+Pj04KXIrKztjb25zdCBuPW5ldyBBcnJheShyKTtmb3IobGV0IHQ9bi5sZW5ndGgtMTt0Pj0wO3QtLSluW3RdPTI1NSZlLGU+Pj04O3JldHVybiAxMjgmblswXSYmbi51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaS5mcm9tKG4pKX0sbC5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZT8yNTU6MCl9LGwucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYoZT1lKHQpKSxlLl9nZXRFbmNvZGVyKFwiZGVyXCIpLnRyZWV9LGwucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihlLHQscil7Y29uc3Qgbj10aGlzLl9iYXNlU3RhdGU7bGV0IGk7aWYobnVsbD09PW4uZGVmYXVsdClyZXR1cm4hMTtjb25zdCBzPWUuam9pbigpO2lmKHZvaWQgMD09PW4uZGVmYXVsdEJ1ZmZlciYmKG4uZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShuLmRlZmF1bHQsdCxyKS5qb2luKCkpLHMubGVuZ3RoIT09bi5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKWlmKHNbaV0hPT1uLmRlZmF1bHRCdWZmZXJbaV0pcmV0dXJuITE7cmV0dXJuITB9fSx7XCIuLi9iYXNlL25vZGVcIjoxNzQsXCIuLi9jb25zdGFudHMvZGVyXCI6MTc2LGluaGVyaXRzOjQ0MCxcInNhZmVyLWJ1ZmZlclwiOjQ5NX1dLDE4MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2NvbnN0IG49cjtuLmRlcj1lKFwiLi9kZXJcIiksbi5wZW09ZShcIi4vcGVtXCIpfSx7XCIuL2RlclwiOjE4MSxcIi4vcGVtXCI6MTgzfV0sMTgzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7Y29uc3Qgbj1lKFwiaW5oZXJpdHNcIiksaT1lKFwiLi9kZXJcIik7ZnVuY3Rpb24gcyhlKXtpLmNhbGwodGhpcyxlKSx0aGlzLmVuYz1cInBlbVwifW4ocyxpKSx0LmV4cG9ydHM9cyxzLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oZSx0KXtjb25zdCByPWkucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsZSkudG9TdHJpbmcoXCJiYXNlNjRcIiksbj1bXCItLS0tLUJFR0lOIFwiK3QubGFiZWwrXCItLS0tLVwiXTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrPTY0KW4ucHVzaChyLnNsaWNlKGUsZSs2NCkpO3JldHVybiBuLnB1c2goXCItLS0tLUVORCBcIit0LmxhYmVsK1wiLS0tLS1cIiksbi5qb2luKFwiXFxuXCIpfX0se1wiLi9kZXJcIjoxODEsaW5oZXJpdHM6NDQwfV0sMTg0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7IWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0fHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaShlLHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gcyhlLHQscil7aWYocy5pc0JOKGUpKXJldHVybiBlO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1lJiYoXCJsZVwiIT09dCYmXCJiZVwiIT09dHx8KHI9dCx0PTEwKSx0aGlzLl9pbml0KGV8fDAsdHx8MTAscnx8XCJiZVwiKSl9dmFyIG87XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPXM6KHZvaWQgMCkuQk49cyxzLkJOPXMscy53b3JkU2l6ZT0yNjt0cnl7bz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6ZShcImJ1ZmZlclwiKS5CdWZmZXJ9Y2F0Y2goZSl7fWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIHI+PTY1JiZyPD03MD9yLTU1OnI+PTk3JiZyPD0xMDI/ci04NzpyLTQ4JjE1fWZ1bmN0aW9uIGwoZSx0LHIpe3ZhciBuPWEoZSxyKTtyZXR1cm4gci0xPj10JiYobnw9YShlLHItMSk8PDQpLG59ZnVuY3Rpb24gYyhlLHQscixuKXtmb3IodmFyIGk9MCxzPU1hdGgubWluKGUubGVuZ3RoLHIpLG89dDtvPHM7bysrKXt2YXIgYT1lLmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1hPj00OT9hLTQ5KzEwOmE+PTE3P2EtMTcrMTA6YX1yZXR1cm4gaX1zLmlzQk49ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBzfHxudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3Iud29yZFNpemU9PT1zLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGUud29yZHMpfSxzLm1heD1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNtcCh0KT4wP2U6dH0scy5taW49ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jbXAodCk8MD9lOnR9LHMucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gdGhpcy5faW5pdE51bWJlcihlLHQscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpcmV0dXJuIHRoaXMuX2luaXRBcnJheShlLHQscik7XCJoZXhcIj09PXQmJih0PTE2KSxuKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpO3ZhciBpPTA7XCItXCI9PT0oZT1lLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpKVswXSYmKGkrKyx0aGlzLm5lZ2F0aXZlPTEpLGk8ZS5sZW5ndGgmJigxNj09PXQ/dGhpcy5fcGFyc2VIZXgoZSxpLHIpOih0aGlzLl9wYXJzZUJhc2UoZSx0LGkpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx0LHIpKSl9LHMucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGUsdCxyKXtlPDAmJih0aGlzLm5lZ2F0aXZlPTEsZT0tZSksZTw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZV0sdGhpcy5sZW5ndGg9MSk6ZTw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZlLGUvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKGU8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZSxlLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSx0LHIpfSxzLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGUsdCxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiBlLmxlbmd0aCksZS5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZS5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgcyxvLGE9MDtpZihcImJlXCI9PT1yKWZvcihpPWUubGVuZ3RoLTEscz0wO2k+PTA7aS09MylvPWVbaV18ZVtpLTFdPDw4fGVbaS0yXTw8MTYsdGhpcy53b3Jkc1tzXXw9bzw8YSY2NzEwODg2Myx0aGlzLndvcmRzW3MrMV09bz4+PjI2LWEmNjcxMDg4NjMsKGErPTI0KT49MjYmJihhLT0yNixzKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLHM9MDtpPGUubGVuZ3RoO2krPTMpbz1lW2ldfGVbaSsxXTw8OHxlW2krMl08PDE2LHRoaXMud29yZHNbc118PW88PGEmNjcxMDg4NjMsdGhpcy53b3Jkc1tzKzFdPW8+Pj4yNi1hJjY3MTA4ODYzLChhKz0yNCk+PTI2JiYoYS09MjYscysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxzLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZSx0LHIpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZS5sZW5ndGgtdCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09MDt2YXIgaSxzPTAsbz0wO2lmKFwiYmVcIj09PXIpZm9yKG49ZS5sZW5ndGgtMTtuPj10O24tPTIpaT1sKGUsdCxuKTw8cyx0aGlzLndvcmRzW29dfD02NzEwODg2MyZpLHM+PTE4PyhzLT0xOCxvKz0xLHRoaXMud29yZHNbb118PWk+Pj4yNik6cys9ODtlbHNlIGZvcihuPShlLmxlbmd0aC10KSUyPT0wP3QrMTp0O248ZS5sZW5ndGg7bis9MilpPWwoZSx0LG4pPDxzLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmkscz49MTg/KHMtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTpzKz04O3RoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihlLHQscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9dCluKys7bi0tLGk9aS90fDA7Zm9yKHZhciBzPWUubGVuZ3RoLXIsbz1zJW4sYT1NYXRoLm1pbihzLHMtbykrcixsPTAsdT1yO3U8YTt1Kz1uKWw9YyhlLHUsdStuLHQpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCk7aWYoMCE9PW8pe3ZhciBoPTE7Zm9yKGw9YyhlLHUsZS5sZW5ndGgsdCksdT0wO3U8bzt1KyspaCo9dDt0aGlzLmltdWxuKGgpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpfXRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihlKXtlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aDt0KyspZS53b3Jkc1t0XT10aGlzLndvcmRzW3RdO2UubGVuZ3RoPXRoaXMubGVuZ3RoLGUubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxlLnJlZD10aGlzLnJlZH0scy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGUpLGV9LHMucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxlbmd0aDxlOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHMucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0scy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHMucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIHU9W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLGg9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sZj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBkKGUsdCxyKXtyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZTt2YXIgbj1lLmxlbmd0aCt0Lmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfGUud29yZHNbMF0scz0wfHQud29yZHNbMF0sbz1pKnMsYT02NzEwODg2MyZvLGw9by82NzEwODg2NHwwO3Iud29yZHNbMF09YTtmb3IodmFyIGM9MTtjPG47YysrKXtmb3IodmFyIHU9bD4+PjI2LGg9NjcxMDg4NjMmbCxmPU1hdGgubWluKGMsdC5sZW5ndGgtMSksZD1NYXRoLm1heCgwLGMtZS5sZW5ndGgrMSk7ZDw9ZjtkKyspe3ZhciBwPWMtZHwwO3UrPShvPShpPTB8ZS53b3Jkc1twXSkqKHM9MHx0LndvcmRzW2RdKStoKS82NzEwODg2NHwwLGg9NjcxMDg4NjMmb31yLndvcmRzW2NdPTB8aCxsPTB8dX1yZXR1cm4gMCE9PWw/ci53b3Jkc1tjXT0wfGw6ci5sZW5ndGgtLSxyLnN0cmlwKCl9cy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSx0KXt2YXIgcjtpZih0PTB8dHx8MSwxNj09PShlPWV8fDEwKXx8XCJoZXhcIj09PWUpe3I9XCJcIjtmb3IodmFyIGk9MCxzPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgYT10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihhPDxpfHMpKS50b1N0cmluZygxNik7cj0wIT09KHM9YT4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT91WzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1zJiYocj1zLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCV0IT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpe3ZhciBjPWhbZV0sZD1mW2VdO3I9XCJcIjt2YXIgcD10aGlzLmNsb25lKCk7Zm9yKHAubmVnYXRpdmU9MDshcC5pc1plcm8oKTspe3ZhciBtPXAubW9kbihkKS50b1N0cmluZyhlKTtyPShwPXAuaWRpdm4oZCkpLmlzWmVybygpP20rcjp1W2MtbS5sZW5ndGhdK20rcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGgldCE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0scy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/ZSs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2UrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy1lOmV9LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0scy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbih2b2lkIDAhPT1vKSx0aGlzLnRvQXJyYXlMaWtlKG8sZSx0KX0scy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGUsdCl9LHMucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxzPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1zLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKHM+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIG8sYSxsPVwibGVcIj09PXQsYz1uZXcgZShzKSx1PXRoaXMuY2xvbmUoKTtpZihsKXtmb3IoYT0wOyF1LmlzWmVybygpO2ErKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW2FdPW87Zm9yKDthPHM7YSsrKWNbYV09MH1lbHNle2ZvcihhPTA7YTxzLWk7YSsrKWNbYV09MDtmb3IoYT0wOyF1LmlzWmVybygpO2ErKylvPXUuYW5kbG4oMjU1KSx1Lml1c2hybig4KSxjW3MtYS0xXT1vfXJldHVybiBjfSxNYXRoLmNsejMyP3MucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZSl9OnMucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPTA7cmV0dXJuIHQ+PTQwOTYmJihyKz0xMyx0Pj4+PTEzKSx0Pj02NCYmKHIrPTcsdD4+Pj03KSx0Pj04JiYocis9NCx0Pj4+PTQpLHQ+PTImJihyKz0yLHQ+Pj49Mikscit0fSxzLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIDI2O3ZhciB0PWUscj0wO3JldHVybiAwPT0oODE5MSZ0KSYmKHIrPTEzLHQ+Pj49MTMpLDA9PSgxMjcmdCkmJihyKz03LHQ+Pj49NyksMD09KDE1JnQpJiYocis9NCx0Pj4+PTQpLDA9PSgzJnQpJiYocis9Mix0Pj4+PTIpLDA9PSgxJnQpJiZyKysscn0scy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSx0PXRoaXMuX2NvdW50Qml0cyhlKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3R9LHMucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbdF0pO2lmKGUrPXIsMjYhPT1yKWJyZWFrfXJldHVybiBlfSxzLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxzLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZSl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZSkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxzLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50ZXN0bihlLTEpP3RoaXMubm90bihlKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxzLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0scy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHMucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHMucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZSl7Zm9yKDt0aGlzLmxlbmd0aDxlLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXRoaXMud29yZHNbdF09dGhpcy53b3Jkc1t0XXxlLndvcmRzW3RdO3JldHVybiB0aGlzLnN0cmlwKCl9LHMucHJvdG90eXBlLmlvcj1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGUpfSxzLnByb3RvdHlwZS5vcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihlKTplLmNsb25lKCkuaW9yKHRoaXMpfSxzLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGUpOmUuY2xvbmUoKS5pdW9yKHRoaXMpfSxzLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihlKXt2YXIgdDt0PXRoaXMubGVuZ3RoPmUubGVuZ3RoP2U6dGhpcztmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mZS53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxzLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGUpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfGUubmVnYXRpdmUpKSx0aGlzLml1YW5kKGUpfSxzLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGUpOmUuY2xvbmUoKS5pYW5kKHRoaXMpfSxzLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZSk6ZS5jbG9uZSgpLml1YW5kKHRoaXMpfSxzLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihlKXt2YXIgdCxyO3RoaXMubGVuZ3RoPmUubGVuZ3RoPyh0PXRoaXMscj1lKToodD1lLHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT10LndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PXQpZm9yKDtuPHQubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPXQud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPXQubGVuZ3RoLHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihlKX0scy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihlKTplLmNsb25lKCkuaXhvcih0aGlzKX0scy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGUpOmUuY2xvbmUoKS5pdXhvcih0aGlzKX0scy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZSl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHQ9MHxNYXRoLmNlaWwoZS8yNikscj1lJTI2O3RoaXMuX2V4cGFuZCh0KSxyPjAmJnQtLTtmb3IodmFyIGk9MDtpPHQ7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGUpfSxzLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGUsdCl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHI9ZS8yNnwwLGk9ZSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT10P3RoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxzLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0PXRoaXMuaXN1YihlKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1lLm5lZ2F0aXZlKXJldHVybiBlLm5lZ2F0aXZlPTAsdD10aGlzLmlzdWIoZSksZS5uZWdhdGl2ZT0xLHQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+ZS5sZW5ndGg/KHI9dGhpcyxuPWUpOihyPWUsbj10aGlzKTtmb3IodmFyIGk9MCxzPTA7czxuLmxlbmd0aDtzKyspdD0oMHxyLndvcmRzW3NdKSsoMHxuLndvcmRzW3NdKStpLHRoaXMud29yZHNbc109NjcxMDg4NjMmdCxpPXQ+Pj4yNjtmb3IoOzAhPT1pJiZzPHIubGVuZ3RoO3MrKyl0PSgwfHIud29yZHNbc10pK2ksdGhpcy53b3Jkc1tzXT02NzEwODg2MyZ0LGk9dD4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7czxyLmxlbmd0aDtzKyspdGhpcy53b3Jkc1tzXT1yLndvcmRzW3NdO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHQ9dGhpcy5zdWIoZSksZS5uZWdhdGl2ZV49MSx0KTowPT09ZS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCx0PWUuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSx0KTp0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChlKTplLmNsb25lKCkuaWFkZCh0aGlzKX0scy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihlKXtpZigwIT09ZS5uZWdhdGl2ZSl7ZS5uZWdhdGl2ZT0wO3ZhciB0PXRoaXMuaWFkZChlKTtyZXR1cm4gZS5uZWdhdGl2ZT0xLHQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHIsbixpPXRoaXMuY21wKGUpO2lmKDA9PT1pKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztpPjA/KHI9dGhpcyxuPWUpOihyPWUsbj10aGlzKTtmb3IodmFyIHM9MCxvPTA7bzxuLmxlbmd0aDtvKyspcz0odD0oMHxyLndvcmRzW29dKS0oMHxuLndvcmRzW29dKStzKT4+MjYsdGhpcy53b3Jkc1tvXT02NzEwODg2MyZ0O2Zvcig7MCE9PXMmJm88ci5sZW5ndGg7bysrKXM9KHQ9KDB8ci53b3Jkc1tvXSkrcyk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmdDtpZigwPT09cyYmbzxyLmxlbmd0aCYmciE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLG8pLHIhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZSl9O3ZhciBwPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLHMsbz1lLndvcmRzLGE9dC53b3JkcyxsPXIud29yZHMsYz0wLHU9MHxvWzBdLGg9ODE5MSZ1LGY9dT4+PjEzLGQ9MHxvWzFdLHA9ODE5MSZkLG09ZD4+PjEzLGI9MHxvWzJdLGc9ODE5MSZiLHk9Yj4+PjEzLHY9MHxvWzNdLHc9ODE5MSZ2LF89dj4+PjEzLHg9MHxvWzRdLGs9ODE5MSZ4LFM9eD4+PjEzLE09MHxvWzVdLEM9ODE5MSZNLFQ9TT4+PjEzLEU9MHxvWzZdLEE9ODE5MSZFLFI9RT4+PjEzLE89MHxvWzddLGo9ODE5MSZPLEk9Tz4+PjEzLE49MHxvWzhdLFA9ODE5MSZOLEI9Tj4+PjEzLEQ9MHxvWzldLEY9ODE5MSZELEw9RD4+PjEzLHo9MHxhWzBdLFU9ODE5MSZ6LCQ9ej4+PjEzLEg9MHxhWzFdLFY9ODE5MSZILHE9SD4+PjEzLFc9MHxhWzJdLFg9ODE5MSZXLEs9Vz4+PjEzLFk9MHxhWzNdLFo9ODE5MSZZLEc9WT4+PjEzLEo9MHxhWzRdLFE9ODE5MSZKLGVlPUo+Pj4xMyx0ZT0wfGFbNV0scmU9ODE5MSZ0ZSxuZT10ZT4+PjEzLGllPTB8YVs2XSxzZT04MTkxJmllLG9lPWllPj4+MTMsYWU9MHxhWzddLGxlPTgxOTEmYWUsY2U9YWU+Pj4xMyx1ZT0wfGFbOF0saGU9ODE5MSZ1ZSxmZT11ZT4+PjEzLGRlPTB8YVs5XSxwZT04MTkxJmRlLG1lPWRlPj4+MTM7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9MTk7dmFyIGJlPShjKyhuPU1hdGguaW11bChoLFUpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKGgsJCkpK01hdGguaW11bChmLFUpfDApKTw8MTMpfDA7Yz0oKHM9TWF0aC5pbXVsKGYsJCkpKyhpPj4+MTMpfDApKyhiZT4+PjI2KXwwLGJlJj02NzEwODg2MyxuPU1hdGguaW11bChwLFUpLGk9KGk9TWF0aC5pbXVsKHAsJCkpK01hdGguaW11bChtLFUpfDAscz1NYXRoLmltdWwobSwkKTt2YXIgZ2U9KGMrKG49bitNYXRoLmltdWwoaCxWKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxxKXwwKStNYXRoLmltdWwoZixWKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYscSl8MCkrKGk+Pj4xMyl8MCkrKGdlPj4+MjYpfDAsZ2UmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGcsVSksaT0oaT1NYXRoLmltdWwoZywkKSkrTWF0aC5pbXVsKHksVSl8MCxzPU1hdGguaW11bCh5LCQpLG49bitNYXRoLmltdWwocCxWKXwwLGk9KGk9aStNYXRoLmltdWwocCxxKXwwKStNYXRoLmltdWwobSxWKXwwLHM9cytNYXRoLmltdWwobSxxKXwwO3ZhciB5ZT0oYysobj1uK01hdGguaW11bChoLFgpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLEspfDApK01hdGguaW11bChmLFgpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixLKXwwKSsoaT4+PjEzKXwwKSsoeWU+Pj4yNil8MCx5ZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxVKSxpPShpPU1hdGguaW11bCh3LCQpKStNYXRoLmltdWwoXyxVKXwwLHM9TWF0aC5pbXVsKF8sJCksbj1uK01hdGguaW11bChnLFYpfDAsaT0oaT1pK01hdGguaW11bChnLHEpfDApK01hdGguaW11bCh5LFYpfDAscz1zK01hdGguaW11bCh5LHEpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT0oaT1pK01hdGguaW11bChwLEspfDApK01hdGguaW11bChtLFgpfDAscz1zK01hdGguaW11bChtLEspfDA7dmFyIHZlPShjKyhuPW4rTWF0aC5pbXVsKGgsWil8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsRyl8MCkrTWF0aC5pbXVsKGYsWil8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChmLEcpfDApKyhpPj4+MTMpfDApKyh2ZT4+PjI2KXwwLHZlJj02NzEwODg2MyxuPU1hdGguaW11bChrLFUpLGk9KGk9TWF0aC5pbXVsKGssJCkpK01hdGguaW11bChTLFUpfDAscz1NYXRoLmltdWwoUywkKSxuPW4rTWF0aC5pbXVsKHcsVil8MCxpPShpPWkrTWF0aC5pbXVsKHcscSl8MCkrTWF0aC5pbXVsKF8sVil8MCxzPXMrTWF0aC5pbXVsKF8scSl8MCxuPW4rTWF0aC5pbXVsKGcsWCl8MCxpPShpPWkrTWF0aC5pbXVsKGcsSyl8MCkrTWF0aC5pbXVsKHksWCl8MCxzPXMrTWF0aC5pbXVsKHksSyl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPShpPWkrTWF0aC5pbXVsKHAsRyl8MCkrTWF0aC5pbXVsKG0sWil8MCxzPXMrTWF0aC5pbXVsKG0sRyl8MDt2YXIgd2U9KGMrKG49bitNYXRoLmltdWwoaCxRKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxlZSl8MCkrTWF0aC5pbXVsKGYsUSl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChmLGVlKXwwKSsoaT4+PjEzKXwwKSsod2U+Pj4yNil8MCx3ZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxVKSxpPShpPU1hdGguaW11bChDLCQpKStNYXRoLmltdWwoVCxVKXwwLHM9TWF0aC5pbXVsKFQsJCksbj1uK01hdGguaW11bChrLFYpfDAsaT0oaT1pK01hdGguaW11bChrLHEpfDApK01hdGguaW11bChTLFYpfDAscz1zK01hdGguaW11bChTLHEpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT0oaT1pK01hdGguaW11bCh3LEspfDApK01hdGguaW11bChfLFgpfDAscz1zK01hdGguaW11bChfLEspfDAsbj1uK01hdGguaW11bChnLFopfDAsaT0oaT1pK01hdGguaW11bChnLEcpfDApK01hdGguaW11bCh5LFopfDAscz1zK01hdGguaW11bCh5LEcpfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT0oaT1pK01hdGguaW11bChwLGVlKXwwKStNYXRoLmltdWwobSxRKXwwLHM9cytNYXRoLmltdWwobSxlZSl8MDt2YXIgX2U9KGMrKG49bitNYXRoLmltdWwoaCxyZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsbmUpfDApK01hdGguaW11bChmLHJlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsbmUpfDApKyhpPj4+MTMpfDApKyhfZT4+PjI2KXwwLF9lJj02NzEwODg2MyxuPU1hdGguaW11bChBLFUpLGk9KGk9TWF0aC5pbXVsKEEsJCkpK01hdGguaW11bChSLFUpfDAscz1NYXRoLmltdWwoUiwkKSxuPW4rTWF0aC5pbXVsKEMsVil8MCxpPShpPWkrTWF0aC5pbXVsKEMscSl8MCkrTWF0aC5pbXVsKFQsVil8MCxzPXMrTWF0aC5pbXVsKFQscSl8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPShpPWkrTWF0aC5pbXVsKGssSyl8MCkrTWF0aC5pbXVsKFMsWCl8MCxzPXMrTWF0aC5pbXVsKFMsSyl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPShpPWkrTWF0aC5pbXVsKHcsRyl8MCkrTWF0aC5pbXVsKF8sWil8MCxzPXMrTWF0aC5pbXVsKF8sRyl8MCxuPW4rTWF0aC5pbXVsKGcsUSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsZWUpfDApK01hdGguaW11bCh5LFEpfDAscz1zK01hdGguaW11bCh5LGVlKXwwLG49bitNYXRoLmltdWwocCxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsbmUpfDApK01hdGguaW11bChtLHJlKXwwLHM9cytNYXRoLmltdWwobSxuZSl8MDt2YXIgeGU9KGMrKG49bitNYXRoLmltdWwoaCxzZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsb2UpfDApK01hdGguaW11bChmLHNlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsb2UpfDApKyhpPj4+MTMpfDApKyh4ZT4+PjI2KXwwLHhlJj02NzEwODg2MyxuPU1hdGguaW11bChqLFUpLGk9KGk9TWF0aC5pbXVsKGosJCkpK01hdGguaW11bChJLFUpfDAscz1NYXRoLmltdWwoSSwkKSxuPW4rTWF0aC5pbXVsKEEsVil8MCxpPShpPWkrTWF0aC5pbXVsKEEscSl8MCkrTWF0aC5pbXVsKFIsVil8MCxzPXMrTWF0aC5pbXVsKFIscSl8MCxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPShpPWkrTWF0aC5pbXVsKEMsSyl8MCkrTWF0aC5pbXVsKFQsWCl8MCxzPXMrTWF0aC5pbXVsKFQsSyl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPShpPWkrTWF0aC5pbXVsKGssRyl8MCkrTWF0aC5pbXVsKFMsWil8MCxzPXMrTWF0aC5pbXVsKFMsRyl8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsZWUpfDApK01hdGguaW11bChfLFEpfDAscz1zK01hdGguaW11bChfLGVlKXwwLG49bitNYXRoLmltdWwoZyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsbmUpfDApK01hdGguaW11bCh5LHJlKXwwLHM9cytNYXRoLmltdWwoeSxuZSl8MCxuPW4rTWF0aC5pbXVsKHAsc2UpfDAsaT0oaT1pK01hdGguaW11bChwLG9lKXwwKStNYXRoLmltdWwobSxzZSl8MCxzPXMrTWF0aC5pbXVsKG0sb2UpfDA7dmFyIGtlPShjKyhuPW4rTWF0aC5pbXVsKGgsbGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGNlKXwwKStNYXRoLmltdWwoZixsZSl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChmLGNlKXwwKSsoaT4+PjEzKXwwKSsoa2U+Pj4yNil8MCxrZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxVKSxpPShpPU1hdGguaW11bChQLCQpKStNYXRoLmltdWwoQixVKXwwLHM9TWF0aC5pbXVsKEIsJCksbj1uK01hdGguaW11bChqLFYpfDAsaT0oaT1pK01hdGguaW11bChqLHEpfDApK01hdGguaW11bChJLFYpfDAscz1zK01hdGguaW11bChJLHEpfDAsbj1uK01hdGguaW11bChBLFgpfDAsaT0oaT1pK01hdGguaW11bChBLEspfDApK01hdGguaW11bChSLFgpfDAscz1zK01hdGguaW11bChSLEspfDAsbj1uK01hdGguaW11bChDLFopfDAsaT0oaT1pK01hdGguaW11bChDLEcpfDApK01hdGguaW11bChULFopfDAscz1zK01hdGguaW11bChULEcpfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT0oaT1pK01hdGguaW11bChrLGVlKXwwKStNYXRoLmltdWwoUyxRKXwwLHM9cytNYXRoLmltdWwoUyxlZSl8MCxuPW4rTWF0aC5pbXVsKHcscmUpfDAsaT0oaT1pK01hdGguaW11bCh3LG5lKXwwKStNYXRoLmltdWwoXyxyZSl8MCxzPXMrTWF0aC5pbXVsKF8sbmUpfDAsbj1uK01hdGguaW11bChnLHNlKXwwLGk9KGk9aStNYXRoLmltdWwoZyxvZSl8MCkrTWF0aC5pbXVsKHksc2UpfDAscz1zK01hdGguaW11bCh5LG9lKXwwLG49bitNYXRoLmltdWwocCxsZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsY2UpfDApK01hdGguaW11bChtLGxlKXwwLHM9cytNYXRoLmltdWwobSxjZSl8MDt2YXIgU2U9KGMrKG49bitNYXRoLmltdWwoaCxoZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsZmUpfDApK01hdGguaW11bChmLGhlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsZmUpfDApKyhpPj4+MTMpfDApKyhTZT4+PjI2KXwwLFNlJj02NzEwODg2MyxuPU1hdGguaW11bChGLFUpLGk9KGk9TWF0aC5pbXVsKEYsJCkpK01hdGguaW11bChMLFUpfDAscz1NYXRoLmltdWwoTCwkKSxuPW4rTWF0aC5pbXVsKFAsVil8MCxpPShpPWkrTWF0aC5pbXVsKFAscSl8MCkrTWF0aC5pbXVsKEIsVil8MCxzPXMrTWF0aC5pbXVsKEIscSl8MCxuPW4rTWF0aC5pbXVsKGosWCl8MCxpPShpPWkrTWF0aC5pbXVsKGosSyl8MCkrTWF0aC5pbXVsKEksWCl8MCxzPXMrTWF0aC5pbXVsKEksSyl8MCxuPW4rTWF0aC5pbXVsKEEsWil8MCxpPShpPWkrTWF0aC5pbXVsKEEsRyl8MCkrTWF0aC5pbXVsKFIsWil8MCxzPXMrTWF0aC5pbXVsKFIsRyl8MCxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZWUpfDApK01hdGguaW11bChULFEpfDAscz1zK01hdGguaW11bChULGVlKXwwLG49bitNYXRoLmltdWwoayxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKGssbmUpfDApK01hdGguaW11bChTLHJlKXwwLHM9cytNYXRoLmltdWwoUyxuZSl8MCxuPW4rTWF0aC5pbXVsKHcsc2UpfDAsaT0oaT1pK01hdGguaW11bCh3LG9lKXwwKStNYXRoLmltdWwoXyxzZSl8MCxzPXMrTWF0aC5pbXVsKF8sb2UpfDAsbj1uK01hdGguaW11bChnLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoZyxjZSl8MCkrTWF0aC5pbXVsKHksbGUpfDAscz1zK01hdGguaW11bCh5LGNlKXwwLG49bitNYXRoLmltdWwocCxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsZmUpfDApK01hdGguaW11bChtLGhlKXwwLHM9cytNYXRoLmltdWwobSxmZSl8MDt2YXIgTWU9KGMrKG49bitNYXRoLmltdWwoaCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsbWUpfDApK01hdGguaW11bChmLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsbWUpfDApKyhpPj4+MTMpfDApKyhNZT4+PjI2KXwwLE1lJj02NzEwODg2MyxuPU1hdGguaW11bChGLFYpLGk9KGk9TWF0aC5pbXVsKEYscSkpK01hdGguaW11bChMLFYpfDAscz1NYXRoLmltdWwoTCxxKSxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPShpPWkrTWF0aC5pbXVsKFAsSyl8MCkrTWF0aC5pbXVsKEIsWCl8MCxzPXMrTWF0aC5pbXVsKEIsSyl8MCxuPW4rTWF0aC5pbXVsKGosWil8MCxpPShpPWkrTWF0aC5pbXVsKGosRyl8MCkrTWF0aC5pbXVsKEksWil8MCxzPXMrTWF0aC5pbXVsKEksRyl8MCxuPW4rTWF0aC5pbXVsKEEsUSl8MCxpPShpPWkrTWF0aC5pbXVsKEEsZWUpfDApK01hdGguaW11bChSLFEpfDAscz1zK01hdGguaW11bChSLGVlKXwwLG49bitNYXRoLmltdWwoQyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsbmUpfDApK01hdGguaW11bChULHJlKXwwLHM9cytNYXRoLmltdWwoVCxuZSl8MCxuPW4rTWF0aC5pbXVsKGssc2UpfDAsaT0oaT1pK01hdGguaW11bChrLG9lKXwwKStNYXRoLmltdWwoUyxzZSl8MCxzPXMrTWF0aC5pbXVsKFMsb2UpfDAsbj1uK01hdGguaW11bCh3LGxlKXwwLGk9KGk9aStNYXRoLmltdWwodyxjZSl8MCkrTWF0aC5pbXVsKF8sbGUpfDAscz1zK01hdGguaW11bChfLGNlKXwwLG49bitNYXRoLmltdWwoZyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKGcsZmUpfDApK01hdGguaW11bCh5LGhlKXwwLHM9cytNYXRoLmltdWwoeSxmZSl8MDt2YXIgQ2U9KGMrKG49bitNYXRoLmltdWwocCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKHAsbWUpfDApK01hdGguaW11bChtLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKG0sbWUpfDApKyhpPj4+MTMpfDApKyhDZT4+PjI2KXwwLENlJj02NzEwODg2MyxuPU1hdGguaW11bChGLFgpLGk9KGk9TWF0aC5pbXVsKEYsSykpK01hdGguaW11bChMLFgpfDAscz1NYXRoLmltdWwoTCxLKSxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPShpPWkrTWF0aC5pbXVsKFAsRyl8MCkrTWF0aC5pbXVsKEIsWil8MCxzPXMrTWF0aC5pbXVsKEIsRyl8MCxuPW4rTWF0aC5pbXVsKGosUSl8MCxpPShpPWkrTWF0aC5pbXVsKGosZWUpfDApK01hdGguaW11bChJLFEpfDAscz1zK01hdGguaW11bChJLGVlKXwwLG49bitNYXRoLmltdWwoQSxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKEEsbmUpfDApK01hdGguaW11bChSLHJlKXwwLHM9cytNYXRoLmltdWwoUixuZSl8MCxuPW4rTWF0aC5pbXVsKEMsc2UpfDAsaT0oaT1pK01hdGguaW11bChDLG9lKXwwKStNYXRoLmltdWwoVCxzZSl8MCxzPXMrTWF0aC5pbXVsKFQsb2UpfDAsbj1uK01hdGguaW11bChrLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoayxjZSl8MCkrTWF0aC5pbXVsKFMsbGUpfDAscz1zK01hdGguaW11bChTLGNlKXwwLG49bitNYXRoLmltdWwodyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsZmUpfDApK01hdGguaW11bChfLGhlKXwwLHM9cytNYXRoLmltdWwoXyxmZSl8MDt2YXIgVGU9KGMrKG49bitNYXRoLmltdWwoZyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGcsbWUpfDApK01hdGguaW11bCh5LHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKHksbWUpfDApKyhpPj4+MTMpfDApKyhUZT4+PjI2KXwwLFRlJj02NzEwODg2MyxuPU1hdGguaW11bChGLFopLGk9KGk9TWF0aC5pbXVsKEYsRykpK01hdGguaW11bChMLFopfDAscz1NYXRoLmltdWwoTCxHKSxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsZWUpfDApK01hdGguaW11bChCLFEpfDAscz1zK01hdGguaW11bChCLGVlKXwwLG49bitNYXRoLmltdWwoaixyZSl8MCxpPShpPWkrTWF0aC5pbXVsKGosbmUpfDApK01hdGguaW11bChJLHJlKXwwLHM9cytNYXRoLmltdWwoSSxuZSl8MCxuPW4rTWF0aC5pbXVsKEEsc2UpfDAsaT0oaT1pK01hdGguaW11bChBLG9lKXwwKStNYXRoLmltdWwoUixzZSl8MCxzPXMrTWF0aC5pbXVsKFIsb2UpfDAsbj1uK01hdGguaW11bChDLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoQyxjZSl8MCkrTWF0aC5pbXVsKFQsbGUpfDAscz1zK01hdGguaW11bChULGNlKXwwLG49bitNYXRoLmltdWwoayxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKGssZmUpfDApK01hdGguaW11bChTLGhlKXwwLHM9cytNYXRoLmltdWwoUyxmZSl8MDt2YXIgRWU9KGMrKG49bitNYXRoLmltdWwodyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKHcsbWUpfDApK01hdGguaW11bChfLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKF8sbWUpfDApKyhpPj4+MTMpfDApKyhFZT4+PjI2KXwwLEVlJj02NzEwODg2MyxuPU1hdGguaW11bChGLFEpLGk9KGk9TWF0aC5pbXVsKEYsZWUpKStNYXRoLmltdWwoTCxRKXwwLHM9TWF0aC5pbXVsKEwsZWUpLG49bitNYXRoLmltdWwoUCxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsbmUpfDApK01hdGguaW11bChCLHJlKXwwLHM9cytNYXRoLmltdWwoQixuZSl8MCxuPW4rTWF0aC5pbXVsKGosc2UpfDAsaT0oaT1pK01hdGguaW11bChqLG9lKXwwKStNYXRoLmltdWwoSSxzZSl8MCxzPXMrTWF0aC5pbXVsKEksb2UpfDAsbj1uK01hdGguaW11bChBLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoQSxjZSl8MCkrTWF0aC5pbXVsKFIsbGUpfDAscz1zK01hdGguaW11bChSLGNlKXwwLG49bitNYXRoLmltdWwoQyxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsZmUpfDApK01hdGguaW11bChULGhlKXwwLHM9cytNYXRoLmltdWwoVCxmZSl8MDt2YXIgQWU9KGMrKG49bitNYXRoLmltdWwoayxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGssbWUpfDApK01hdGguaW11bChTLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKFMsbWUpfDApKyhpPj4+MTMpfDApKyhBZT4+PjI2KXwwLEFlJj02NzEwODg2MyxuPU1hdGguaW11bChGLHJlKSxpPShpPU1hdGguaW11bChGLG5lKSkrTWF0aC5pbXVsKEwscmUpfDAscz1NYXRoLmltdWwoTCxuZSksbj1uK01hdGguaW11bChQLHNlKXwwLGk9KGk9aStNYXRoLmltdWwoUCxvZSl8MCkrTWF0aC5pbXVsKEIsc2UpfDAscz1zK01hdGguaW11bChCLG9lKXwwLG49bitNYXRoLmltdWwoaixsZSl8MCxpPShpPWkrTWF0aC5pbXVsKGosY2UpfDApK01hdGguaW11bChJLGxlKXwwLHM9cytNYXRoLmltdWwoSSxjZSl8MCxuPW4rTWF0aC5pbXVsKEEsaGUpfDAsaT0oaT1pK01hdGguaW11bChBLGZlKXwwKStNYXRoLmltdWwoUixoZSl8MCxzPXMrTWF0aC5pbXVsKFIsZmUpfDA7dmFyIFJlPShjKyhuPW4rTWF0aC5pbXVsKEMscGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChDLG1lKXwwKStNYXRoLmltdWwoVCxwZSl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChULG1lKXwwKSsoaT4+PjEzKXwwKSsoUmU+Pj4yNil8MCxSZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRixzZSksaT0oaT1NYXRoLmltdWwoRixvZSkpK01hdGguaW11bChMLHNlKXwwLHM9TWF0aC5pbXVsKEwsb2UpLG49bitNYXRoLmltdWwoUCxsZSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsY2UpfDApK01hdGguaW11bChCLGxlKXwwLHM9cytNYXRoLmltdWwoQixjZSl8MCxuPW4rTWF0aC5pbXVsKGosaGUpfDAsaT0oaT1pK01hdGguaW11bChqLGZlKXwwKStNYXRoLmltdWwoSSxoZSl8MCxzPXMrTWF0aC5pbXVsKEksZmUpfDA7dmFyIE9lPShjKyhuPW4rTWF0aC5pbXVsKEEscGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChBLG1lKXwwKStNYXRoLmltdWwoUixwZSl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChSLG1lKXwwKSsoaT4+PjEzKXwwKSsoT2U+Pj4yNil8MCxPZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoRixsZSksaT0oaT1NYXRoLmltdWwoRixjZSkpK01hdGguaW11bChMLGxlKXwwLHM9TWF0aC5pbXVsKEwsY2UpLG49bitNYXRoLmltdWwoUCxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKFAsZmUpfDApK01hdGguaW11bChCLGhlKXwwLHM9cytNYXRoLmltdWwoQixmZSl8MDt2YXIgamU9KGMrKG49bitNYXRoLmltdWwoaixwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGosbWUpfDApK01hdGguaW11bChJLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKEksbWUpfDApKyhpPj4+MTMpfDApKyhqZT4+PjI2KXwwLGplJj02NzEwODg2MyxuPU1hdGguaW11bChGLGhlKSxpPShpPU1hdGguaW11bChGLGZlKSkrTWF0aC5pbXVsKEwsaGUpfDAscz1NYXRoLmltdWwoTCxmZSk7dmFyIEllPShjKyhuPW4rTWF0aC5pbXVsKFAscGUpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChQLG1lKXwwKStNYXRoLmltdWwoQixwZSl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChCLG1lKXwwKSsoaT4+PjEzKXwwKSsoSWU+Pj4yNil8MCxJZSY9NjcxMDg4NjM7dmFyIE5lPShjKyhuPU1hdGguaW11bChGLHBlKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChGLG1lKSkrTWF0aC5pbXVsKEwscGUpfDApKTw8MTMpfDA7cmV0dXJuIGM9KChzPU1hdGguaW11bChMLG1lKSkrKGk+Pj4xMyl8MCkrKE5lPj4+MjYpfDAsTmUmPTY3MTA4ODYzLGxbMF09YmUsbFsxXT1nZSxsWzJdPXllLGxbM109dmUsbFs0XT13ZSxsWzVdPV9lLGxbNl09eGUsbFs3XT1rZSxsWzhdPVNlLGxbOV09TWUsbFsxMF09Q2UsbFsxMV09VGUsbFsxMl09RWUsbFsxM109QWUsbFsxNF09UmUsbFsxNV09T2UsbFsxNl09amUsbFsxN109SWUsbFsxOF09TmUsMCE9PWMmJihsWzE5XT1jLHIubGVuZ3RoKyspLHJ9O2Z1bmN0aW9uIG0oZSx0LHIpe3JldHVybihuZXcgYikubXVscChlLHQscil9ZnVuY3Rpb24gYihlLHQpe3RoaXMueD1lLHRoaXMueT10fU1hdGguaW11bHx8KHA9ZCkscy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmxlbmd0aCtlLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1lLmxlbmd0aD9wKHRoaXMsZSx0KTpyPDYzP2QodGhpcyxlLHQpOnI8MTAyND9mdW5jdGlvbihlLHQscil7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9ZS5sZW5ndGgrdC5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLHM9MDtzPHIubGVuZ3RoLTE7cysrKXt2YXIgbz1pO2k9MDtmb3IodmFyIGE9NjcxMDg4NjMmbixsPU1hdGgubWluKHMsdC5sZW5ndGgtMSksYz1NYXRoLm1heCgwLHMtZS5sZW5ndGgrMSk7Yzw9bDtjKyspe3ZhciB1PXMtYyxoPSgwfGUud29yZHNbdV0pKigwfHQud29yZHNbY10pLGY9NjcxMDg4NjMmaDthPTY3MTA4ODYzJihmPWYrYXwwKSxpKz0obz0obz1vKyhoLzY3MTA4ODY0fDApfDApKyhmPj4+MjYpfDApPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1tzXT1hLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbc109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX0odGhpcyxlLHQpOm0odGhpcyxlLHQpfSxiLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZSkscj1zLnByb3RvdHlwZS5fY291bnRCaXRzKGUpLTEsbj0wO248ZTtuKyspdFtuXT10aGlzLnJldkJpbihuLHIsZSk7cmV0dXJuIHR9LGIucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihlLHQscil7aWYoMD09PWV8fGU9PT1yLTEpcmV0dXJuIGU7Zm9yKHZhciBuPTAsaT0wO2k8dDtpKyspbnw9KDEmZSk8PHQtaS0xLGU+Pj0xO3JldHVybiBufSxiLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxzKXtmb3IodmFyIG89MDtvPHM7bysrKW5bb109dFtlW29dXSxpW29dPXJbZVtvXV19LGIucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihlLHQscixuLGkscyl7dGhpcy5wZXJtdXRlKHMsZSx0LHIsbixpKTtmb3IodmFyIG89MTtvPGk7bzw8PTEpZm9yKHZhciBhPW88PDEsbD1NYXRoLmNvcygyKk1hdGguUEkvYSksYz1NYXRoLnNpbigyKk1hdGguUEkvYSksdT0wO3U8aTt1Kz1hKWZvcih2YXIgaD1sLGY9YyxkPTA7ZDxvO2QrKyl7dmFyIHA9clt1K2RdLG09blt1K2RdLGI9clt1K2Qrb10sZz1uW3UrZCtvXSx5PWgqYi1mKmc7Zz1oKmcrZipiLGI9eSxyW3UrZF09cCtiLG5bdStkXT1tK2csclt1K2Qrb109cC1iLG5bdStkK29dPW0tZyxkIT09YSYmKHk9bCpoLWMqZixmPWwqZitjKmgsaD15KX19LGIucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MXxNYXRoLm1heCh0LGUpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxiLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZSx0LHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT1lW25dO2Vbbl09ZVtyLW4tMV0sZVtyLW4tMV09aSxpPXRbbl0sdFtuXT0tdFtyLW4tMV0sdFtyLW4tMV09LWl9fSxiLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MCxuPTA7bjx0LzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQoZVsyKm4rMV0vdCkrTWF0aC5yb3VuZChlWzIqbl0vdCkrcjtlW25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiBlfSxiLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGUsdCxyLGkpe2Zvcih2YXIgcz0wLG89MDtvPHQ7bysrKXMrPTB8ZVtvXSxyWzIqb109ODE5MSZzLHM+Pj49MTMsclsyKm8rMV09ODE5MSZzLHM+Pj49MTM7Zm9yKG89Mip0O288aTsrK28pcltvXT0wO24oMD09PXMpLG4oMD09KC04MTkyJnMpKX0sYi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09MDtyZXR1cm4gdH0sYi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihlLHQscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKGUubGVuZ3RoLHQubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxzPXRoaXMuc3R1YihuKSxvPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxsPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxmPXIud29yZHM7Zi5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxvLG4pLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGMsbiksdGhpcy50cmFuc2Zvcm0obyxzLGEsbCxuLGkpLHRoaXMudHJhbnNmb3JtKGMscyx1LGgsbixpKTtmb3IodmFyIGQ9MDtkPG47ZCsrKXt2YXIgcD1hW2RdKnVbZF0tbFtkXSpoW2RdO2xbZF09YVtkXSpoW2RdK2xbZF0qdVtkXSxhW2RdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGEsbCxuKSx0aGlzLnRyYW5zZm9ybShhLGwsZixzLG4saSksdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMubm9ybWFsaXplMTNiKGYsbiksci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9ZS5sZW5ndGgrdC5sZW5ndGgsci5zdHJpcCgpfSxzLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSx0aGlzLm11bFRvKGUsdCl9LHMucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSxtKHRoaXMsZSx0KX0scy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGUsdGhpcyl9LHMucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUpLG4oZTw2NzEwODg2NCk7Zm9yKHZhciB0PTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSplLHM9KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZ0KTt0Pj49MjYsdCs9aS82NzEwODg2NHwwLHQrPXM+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJnN9cmV0dXJuIDAhPT10JiYodGhpcy53b3Jkc1tyXT10LHRoaXMubGVuZ3RoKyspLHRoaXN9LHMucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihlKX0scy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxzLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxzLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlLmJpdExlbmd0aCgpKSxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7dFtyXT0oZS53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIHR9KGUpO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IHMoMSk7Zm9yKHZhciByPXRoaXMsbj0wO248dC5sZW5ndGgmJjA9PT10W25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjx0Lmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPHQubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PXRbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0scy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApO3ZhciB0LHI9ZSUyNixpPShlLXIpLzI2LHM9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgbz0wO2Zvcih0PTA7dDx0aGlzLmxlbmd0aDt0Kyspe3ZhciBhPXRoaXMud29yZHNbdF0mcyxsPSgwfHRoaXMud29yZHNbdF0pLWE8PHI7dGhpcy53b3Jkc1t0XT1sfG8sbz1hPj4+MjYtcn1vJiYodGhpcy53b3Jkc1t0XT1vLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IodD10aGlzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMud29yZHNbdCtpXT10aGlzLndvcmRzW3RdO2Zvcih0PTA7dDxpO3QrKyl0aGlzLndvcmRzW3RdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGUpfSxzLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZSx0LHIpe3ZhciBpO24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApLGk9dD8odC10JTI2KS8yNjowO3ZhciBzPWUlMjYsbz1NYXRoLm1pbigoZS1zKS8yNix0aGlzLmxlbmd0aCksYT02NzEwODg2M142NzEwODg2Mz4+PnM8PHMsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgYz0wO2M8bztjKyspbC53b3Jkc1tjXT10aGlzLndvcmRzW2NdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHU9MDtmb3IoYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49aSk7Yy0tKXt2YXIgaD0wfHRoaXMud29yZHNbY107dGhpcy53b3Jkc1tjXT11PDwyNi1zfGg+Pj5zLHU9aCZhfXJldHVybiBsJiYwIT09dSYmKGwud29yZHNbbC5sZW5ndGgrK109dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihlLHQscil9LHMucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihlKX0scy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZSl9LHMucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihlKX0scy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZSl9LHMucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGUpe24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApO3ZhciB0PWUlMjYscj0oZS10KS8yNixpPTE8PHQ7cmV0dXJuISh0aGlzLmxlbmd0aDw9cikmJiEhKHRoaXMud29yZHNbcl0maSl9LHMucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wKTt2YXIgdD1lJTI2LHI9KGUtdCkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09dCYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT10KXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PnQ8PHQ7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxzLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihlKX0scy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIGUpLG4oZTw2NzEwODg2NCksZTwwP3RoaXMuaXN1Ym4oLWUpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8ZT8odGhpcy53b3Jkc1swXT1lLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGUpfSxzLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZSl7dGhpcy53b3Jkc1swXSs9ZTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3RdPj02NzEwODg2NDt0KyspdGhpcy53b3Jkc1t0XS09NjcxMDg4NjQsdD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t0KzFdPTE6dGhpcy53b3Jkc1t0KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHQrMSksdGhpc30scy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZSl7aWYobihcIm51bWJlclwiPT10eXBlb2YgZSksbihlPDY3MTA4ODY0KSxlPDApcmV0dXJuIHRoaXMuaWFkZG4oLWUpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihlKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1lLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t0XTwwO3QrKyl0aGlzLndvcmRzW3RdKz02NzEwODg2NCx0aGlzLndvcmRzW3QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGUpfSxzLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZSl9LHMucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHMucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxzLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLHMsbz1lLmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYT0wO2ZvcihpPTA7aTxlLmxlbmd0aDtpKyspe3M9KDB8dGhpcy53b3Jkc1tpK3JdKSthO3ZhciBsPSgwfGUud29yZHNbaV0pKnQ7YT0oKHMtPTY3MTA4ODYzJmwpPj4yNiktKGwvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJnN9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KHM9KDB8dGhpcy53b3Jkc1tpK3JdKSthKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJnM7aWYoMD09PWEpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PWEpLGE9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0ocz0tKDB8dGhpcy53b3Jkc1tpXSkrYSk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmcztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0scy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZSx0KXt2YXIgcj0odGhpcy5sZW5ndGgsZS5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9ZSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIGEsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09dCl7KGE9bmV3IHMobnVsbCkpLmxlbmd0aD1sKzEsYS53b3Jkcz1uZXcgQXJyYXkoYS5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWEud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSxsKTswPT09dS5uZWdhdGl2ZSYmKG49dSxhJiYoYS53b3Jkc1tsXT0xKSk7Zm9yKHZhciBoPWwtMTtoPj0wO2gtLSl7dmFyIGY9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtoXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtoLTFdKTtmb3IoZj1NYXRoLm1pbihmL298MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxmLGgpOzAhPT1uLm5lZ2F0aXZlOylmLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxoKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7YSYmKGEud29yZHNbaF09Zil9cmV0dXJuIGEmJmEuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PXQmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OmF8fG51bGwsbW9kOm59fSxzLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuKCFlLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHMoMCksbW9kOm5ldyBzKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmU/KGE9dGhpcy5uZWcoKS5kaXZtb2QoZSx0KSxcIm1vZFwiIT09dCYmKGk9YS5kaXYubmVnKCkpLFwiZGl2XCIhPT10JiYobz1hLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pYWRkKGUpKSx7ZGl2OmksbW9kOm99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWUubmVnYXRpdmU/KGE9dGhpcy5kaXZtb2QoZS5uZWcoKSx0KSxcIm1vZFwiIT09dCYmKGk9YS5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6YS5tb2R9KTowIT0odGhpcy5uZWdhdGl2ZSZlLm5lZ2F0aXZlKT8oYT10aGlzLm5lZygpLmRpdm1vZChlLm5lZygpLHQpLFwiZGl2XCIhPT10JiYobz1hLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pc3ViKGUpKSx7ZGl2OmEuZGl2LG1vZDpvfSk6ZS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGUpPDA/e2RpdjpuZXcgcygwKSxtb2Q6dGhpc306MT09PWUubGVuZ3RoP1wiZGl2XCI9PT10P3tkaXY6dGhpcy5kaXZuKGUud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09dD97ZGl2Om51bGwsbW9kOm5ldyBzKHRoaXMubW9kbihlLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGUud29yZHNbMF0pLG1vZDpuZXcgcyh0aGlzLm1vZG4oZS53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGUsdCk7dmFyIGksbyxhfSxzLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGl2bW9kKGUsXCJkaXZcIiwhMSkuZGl2fSxzLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGl2bW9kKGUsXCJtb2RcIiwhMSkubW9kfSxzLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpdm1vZChlLFwibW9kXCIsITApLm1vZH0scy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5kaXZtb2QoZSk7aWYodC5tb2QuaXNaZXJvKCkpcmV0dXJuIHQuZGl2O3ZhciByPTAhPT10LmRpdi5uZWdhdGl2ZT90Lm1vZC5pc3ViKGUpOnQubW9kLG49ZS51c2hybigxKSxpPWUuYW5kbG4oMSkscz1yLmNtcChuKTtyZXR1cm4gczwwfHwxPT09aSYmMD09PXM/dC5kaXY6MCE9PXQuZGl2Lm5lZ2F0aXZlP3QuZGl2LmlzdWJuKDEpOnQuZGl2LmlhZGRuKDEpfSxzLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGUpe24oZTw9NjcxMDg4NjMpO2Zvcih2YXIgdD0oMTw8MjYpJWUscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPSh0KnIrKDB8dGhpcy53b3Jkc1tpXSkpJWU7cmV0dXJuIHJ9LHMucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGUpe24oZTw9NjcxMDg4NjMpO2Zvcih2YXIgdD0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqdDt0aGlzLndvcmRzW3JdPWkvZXwwLHQ9aSVlfXJldHVybiB0aGlzLnN0cmlwKCl9LHMucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihlKX0scy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihlKXtuKDA9PT1lLm5lZ2F0aXZlKSxuKCFlLmlzWmVybygpKTt2YXIgdD10aGlzLHI9ZS5jbG9uZSgpO3Q9MCE9PXQubmVnYXRpdmU/dC51bW9kKGUpOnQuY2xvbmUoKTtmb3IodmFyIGk9bmV3IHMoMSksbz1uZXcgcygwKSxhPW5ldyBzKDApLGw9bmV3IHMoMSksYz0wO3QuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KXQuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrYztmb3IodmFyIHU9ci5jbG9uZSgpLGg9dC5jbG9uZSgpOyF0LmlzWmVybygpOyl7Zm9yKHZhciBmPTAsZD0xOzA9PSh0LndvcmRzWzBdJmQpJiZmPDI2OysrZixkPDw9MSk7aWYoZj4wKWZvcih0Lml1c2hybihmKTtmLS0gPjA7KShpLmlzT2RkKCl8fG8uaXNPZGQoKSkmJihpLmlhZGQodSksby5pc3ViKGgpKSxpLml1c2hybigxKSxvLml1c2hybigxKTtmb3IodmFyIHA9MCxtPTE7MD09KHIud29yZHNbMF0mbSkmJnA8MjY7KytwLG08PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGEuaXNPZGQoKXx8bC5pc09kZCgpKSYmKGEuaWFkZCh1KSxsLmlzdWIoaCkpLGEuaXVzaHJuKDEpLGwuaXVzaHJuKDEpO3QuY21wKHIpPj0wPyh0LmlzdWIociksaS5pc3ViKGEpLG8uaXN1YihsKSk6KHIuaXN1Yih0KSxhLmlzdWIoaSksbC5pc3ViKG8pKX1yZXR1cm57YTphLGI6bCxnY2Q6ci5pdXNobG4oYyl9fSxzLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZSl7bigwPT09ZS5uZWdhdGl2ZSksbighZS5pc1plcm8oKSk7dmFyIHQ9dGhpcyxyPWUuY2xvbmUoKTt0PTAhPT10Lm5lZ2F0aXZlP3QudW1vZChlKTp0LmNsb25lKCk7Zm9yKHZhciBpLG89bmV3IHMoMSksYT1uZXcgcygwKSxsPXIuY2xvbmUoKTt0LmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIGM9MCx1PTE7MD09KHQud29yZHNbMF0mdSkmJmM8MjY7KytjLHU8PD0xKTtpZihjPjApZm9yKHQuaXVzaHJuKGMpO2MtLSA+MDspby5pc09kZCgpJiZvLmlhZGQobCksby5pdXNocm4oMSk7Zm9yKHZhciBoPTAsZj0xOzA9PShyLndvcmRzWzBdJmYpJiZoPDI2OysraCxmPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGwpLGEuaXVzaHJuKDEpO3QuY21wKHIpPj0wPyh0LmlzdWIociksby5pc3ViKGEpKTooci5pc3ViKHQpLGEuaXN1YihvKSl9cmV0dXJuKGk9MD09PXQuY21wbigxKT9vOmEpLmNtcG4oMCk8MCYmaS5pYWRkKGUpLGl9LHMucHJvdG90eXBlLmdjZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBlLmFicygpO2lmKGUuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIHQ9dGhpcy5jbG9uZSgpLHI9ZS5jbG9uZSgpO3QubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7dC5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspdC5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO3QuaXNFdmVuKCk7KXQuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9dC5jbXAocik7aWYoaTwwKXt2YXIgcz10O3Q9cixyPXN9ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhazt0LmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxzLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVnY2QoZSkuYS51bW9kKGUpfSxzLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LHMucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxzLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZlfSxzLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlKTt2YXIgdD1lJTI2LHI9KGUtdCkvMjYsaT0xPDx0O2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBzPWksbz1yOzAhPT1zJiZvPHRoaXMubGVuZ3RoO28rKyl7dmFyIGE9MHx0aGlzLndvcmRzW29dO3M9KGErPXMpPj4+MjYsYSY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1hfXJldHVybiAwIT09cyYmKHRoaXMud29yZHNbb109cyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxzLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0scy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihlKXt2YXIgdCxyPWU8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpdD0xO2Vsc2V7ciYmKGU9LWUpLG4oZTw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07dD1pPT09ZT8wOmk8ZT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC10OnR9LHMucHJvdG90eXBlLmNtcD1mdW5jdGlvbihlKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWUubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1lLm5lZ2F0aXZlKXJldHVybiAxO3ZhciB0PXRoaXMudWNtcChlKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtdDp0fSxzLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGUpe2lmKHRoaXMubGVuZ3RoPmUubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGUubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgdD0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHxlLndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/dD0tMTpuPmkmJih0PTEpO2JyZWFrfX1yZXR1cm4gdH0scy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09dGhpcy5jbXBuKGUpfSxzLnByb3RvdHlwZS5ndD1mdW5jdGlvbihlKXtyZXR1cm4gMT09PXRoaXMuY21wKGUpfSxzLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcG4oZSk+PTB9LHMucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbXAoZSk+PTB9LHMucHJvdG90eXBlLmx0bj1mdW5jdGlvbihlKXtyZXR1cm4tMT09PXRoaXMuY21wbihlKX0scy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZSl7cmV0dXJuLTE9PT10aGlzLmNtcChlKX0scy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbXBuKGUpPD0wfSxzLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY21wKGUpPD0wfSxzLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZSl9LHMucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5jbXAoZSl9LHMucmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgayhlKX0scy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksZS5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGUpfSxzLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxzLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVkPWUsdGhpc30scy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZChlKX0scy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyxlKX0scy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihlKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyxlKX0scy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyxlKX0scy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyxlKX0scy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyxlKX0scy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGUpLHRoaXMucmVkLm11bCh0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGUpLHRoaXMucmVkLmltdWwodGhpcyxlKX0scy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0scy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0scy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0scy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0scy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0scy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkJiYhZS5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxlKX07dmFyIGc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB5KGUsdCl7dGhpcy5uYW1lPWUsdGhpcy5wPW5ldyBzKHQsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBzKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB2KCl7eS5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiB3KCl7eS5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiBfKCl7eS5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB4KCl7eS5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBrKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgdD1zLl9wcmltZShlKTt0aGlzLm09dC5wLHRoaXMucHJpbWU9dH1lbHNlIG4oZS5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPWUsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFMoZSl7ay5jYWxsKHRoaXMsZSksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgcygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX15LnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHMobnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxlfSx5LnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZTtkb3t0aGlzLnNwbGl0KHIsdGhpcy50bXApLHQ9KHI9KHI9dGhpcy5pbXVsSyhyKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHQ+dGhpcy5uKTt2YXIgbj10PHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6dm9pZCAwIT09ci5zdHJpcD9yLnN0cmlwKCk6ci5fc3RyaXAoKSxyfSx5LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlLHQpe2UuaXVzaHJuKHRoaXMubiwwLHQpfSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pbXVsKHRoaXMuayl9LGkodix5KSx2LnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLm1pbihlLmxlbmd0aCw5KSxuPTA7bjxyO24rKyl0LndvcmRzW25dPWUud29yZHNbbl07aWYodC5sZW5ndGg9cixlLmxlbmd0aDw9OSlyZXR1cm4gZS53b3Jkc1swXT0wLHZvaWQoZS5sZW5ndGg9MSk7dmFyIGk9ZS53b3Jkc1s5XTtmb3IodC53b3Jkc1t0Lmxlbmd0aCsrXT00MTk0MzAzJmksbj0xMDtuPGUubGVuZ3RoO24rKyl7dmFyIHM9MHxlLndvcmRzW25dO2Uud29yZHNbbi0xMF09KDQxOTQzMDMmcyk8PDR8aT4+PjIyLGk9c31pPj4+PTIyLGUud29yZHNbbi0xMF09aSwwPT09aSYmZS5sZW5ndGg+MTA/ZS5sZW5ndGgtPTEwOmUubGVuZ3RoLT05fSx2LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihlKXtlLndvcmRzW2UubGVuZ3RoXT0wLGUud29yZHNbZS5sZW5ndGgrMV09MCxlLmxlbmd0aCs9Mjtmb3IodmFyIHQ9MCxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPTB8ZS53b3Jkc1tyXTt0Kz05NzcqbixlLndvcmRzW3JdPTY3MTA4ODYzJnQsdD02NCpuKyh0LzY3MTA4ODY0fDApfXJldHVybiAwPT09ZS53b3Jkc1tlLmxlbmd0aC0xXSYmKGUubGVuZ3RoLS0sMD09PWUud29yZHNbZS5sZW5ndGgtMV0mJmUubGVuZ3RoLS0pLGV9LGkodyx5KSxpKF8seSksaSh4LHkpLHgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8ZS53b3Jkc1tyXSkrdCxpPTY3MTA4ODYzJm47bj4+Pj0yNixlLndvcmRzW3JdPWksdD1ufXJldHVybiAwIT09dCYmKGUud29yZHNbZS5sZW5ndGgrK109dCksZX0scy5fcHJpbWU9ZnVuY3Rpb24oZSl7aWYoZ1tlXSlyZXR1cm4gZ1tlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgdjtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyB3O2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IF87ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHh9cmV0dXJuIGdbZV09dCx0fSxrLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihlKXtuKDA9PT1lLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbihlLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LGsucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGUsdCl7bigwPT0oZS5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4oZS5yZWQmJmUucmVkPT09dC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxrLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShlKS5fZm9yY2VSZWQodGhpcyk6ZS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNaZXJvKCk/ZS5jbG9uZSgpOnRoaXMubS5zdWIoZSkuX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5hZGQodCk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxrLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdmVyaWZ5MihlLHQpO3ZhciByPWUuaWFkZCh0KTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0say5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUsdCl7dGhpcy5fdmVyaWZ5MihlLHQpO3ZhciByPWUuc3ViKHQpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5pc3ViKHQpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0say5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZSksdGhpcy5pbW9kKGUudXNobG4odCkpfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZSx0KSx0aGlzLmltb2QoZS5pbXVsKHQpKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZSx0KSx0aGlzLmltb2QoZS5tdWwodCkpfSxrLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmltdWwoZSxlLmNsb25lKCkpfSxrLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubXVsKGUsZSl9LGsucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gZS5jbG9uZSgpO3ZhciB0PXRoaXMubS5hbmRsbigzKTtpZihuKHQlMj09MSksMz09PXQpe3ZhciByPXRoaXMubS5hZGQobmV3IHMoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coZSxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksbz0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspbysrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBhPW5ldyBzKDEpLnRvUmVkKHRoaXMpLGw9YS5yZWROZWcoKSxjPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1PXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodT1uZXcgcygyKnUqdSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHUsYykuY21wKGwpOyl1LnJlZElBZGQobCk7Zm9yKHZhciBoPXRoaXMucG93KHUsaSksZj10aGlzLnBvdyhlLGkuYWRkbigxKS5pdXNocm4oMSkpLGQ9dGhpcy5wb3coZSxpKSxwPW87MCE9PWQuY21wKGEpOyl7Zm9yKHZhciBtPWQsYj0wOzAhPT1tLmNtcChhKTtiKyspbT1tLnJlZFNxcigpO24oYjxwKTt2YXIgZz10aGlzLnBvdyhoLG5ldyBzKDEpLml1c2hsbihwLWItMSkpO2Y9Zi5yZWRNdWwoZyksaD1nLnJlZFNxcigpLGQ9ZC5yZWRNdWwoaCkscD1ifXJldHVybiBmfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGUpe3ZhciB0PWUuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKHQpLnJlZE5lZygpKTp0aGlzLmltb2QodCl9LGsucHJvdG90eXBlLnBvdz1mdW5jdGlvbihlLHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIG5ldyBzKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT10LmNtcG4oMSkpcmV0dXJuIGUuY2xvbmUoKTt2YXIgcj1uZXcgQXJyYXkoMTYpO3JbMF09bmV3IHMoMSkudG9SZWQodGhpcyksclsxXT1lO2Zvcih2YXIgbj0yO248ci5sZW5ndGg7bisrKXJbbl09dGhpcy5tdWwocltuLTFdLGUpO3ZhciBpPXJbMF0sbz0wLGE9MCxsPXQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1sJiYobD0yNiksbj10Lmxlbmd0aC0xO24+PTA7bi0tKXtmb3IodmFyIGM9dC53b3Jkc1tuXSx1PWwtMTt1Pj0wO3UtLSl7dmFyIGg9Yz4+dSYxO2khPT1yWzBdJiYoaT10aGlzLnNxcihpKSksMCE9PWh8fDAhPT1vPyhvPDw9MSxvfD1oLCg0PT09KythfHwwPT09biYmMD09PXUpJiYoaT10aGlzLm11bChpLHJbb10pLGE9MCxvPTApKTphPTB9bD0yNn1yZXR1cm4gaX0say5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGUpe3ZhciB0PWUudW1vZCh0aGlzLm0pO3JldHVybiB0PT09ZT90LmNsb25lKCk6dH0say5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbG9uZSgpO3JldHVybiB0LnJlZD1udWxsLHR9LHMubW9udD1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFMoZSl9LGkoUyxrKSxTLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW1vZChlLnVzaGxuKHRoaXMuc2hpZnQpKX0sUy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5pbW9kKGUubXVsKHRoaXMucmludikpO3JldHVybiB0LnJlZD1udWxsLHR9LFMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZSx0KXtpZihlLmlzWmVybygpfHx0LmlzWmVybygpKXJldHVybiBlLndvcmRzWzBdPTAsZS5sZW5ndGg9MSxlO3ZhciByPWUuaW11bCh0KSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxzPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/cz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKHM9aS5pYWRkKHRoaXMubSkpLHMuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSx0KXtpZihlLmlzWmVybygpfHx0LmlzWmVybygpKXJldHVybiBuZXcgcygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9ZS5tdWwodCksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbW9kKGUuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh2b2lkIDA9PT10fHx0KX0se2J1ZmZlcjoxODh9XSwxODU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oZSl7dmFyIHQ9YyhlKSxyPXRbMF0sbj10WzFdO3JldHVybiAzKihyK24pLzQtbn0sci50b0J5dGVBcnJheT1mdW5jdGlvbihlKXt2YXIgdCxyLG49YyhlKSxvPW5bMF0sYT1uWzFdLGw9bmV3IHMoZnVuY3Rpb24oZSx0LHIpe3JldHVybiAzKih0K3IpLzQtcn0oMCxvLGEpKSx1PTAsaD1hPjA/by00Om87Zm9yKHI9MDtyPGg7cis9NCl0PWlbZS5jaGFyQ29kZUF0KHIpXTw8MTh8aVtlLmNoYXJDb2RlQXQocisxKV08PDEyfGlbZS5jaGFyQ29kZUF0KHIrMildPDw2fGlbZS5jaGFyQ29kZUF0KHIrMyldLGxbdSsrXT10Pj4xNiYyNTUsbFt1KytdPXQ+PjgmMjU1LGxbdSsrXT0yNTUmdDsyPT09YSYmKHQ9aVtlLmNoYXJDb2RlQXQocildPDwyfGlbZS5jaGFyQ29kZUF0KHIrMSldPj40LGxbdSsrXT0yNTUmdCk7MT09PWEmJih0PWlbZS5jaGFyQ29kZUF0KHIpXTw8MTB8aVtlLmNoYXJDb2RlQXQocisxKV08PDR8aVtlLmNoYXJDb2RlQXQocisyKV0+PjIsbFt1KytdPXQ+PjgmMjU1LGxbdSsrXT0yNTUmdCk7cmV0dXJuIGx9LHIuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmxlbmd0aCxpPXIlMyxzPVtdLG89MCxhPXItaTtvPGE7bys9MTYzODMpcy5wdXNoKHUoZSxvLG8rMTYzODM+YT9hOm8rMTYzODMpKTsxPT09aT8odD1lW3ItMV0scy5wdXNoKG5bdD4+Ml0rblt0PDw0JjYzXStcIj09XCIpKToyPT09aSYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLHMucHVzaChuW3Q+PjEwXStuW3Q+PjQmNjNdK25bdDw8MiY2M10rXCI9XCIpKTtyZXR1cm4gcy5qb2luKFwiXCIpfTtmb3IodmFyIG49W10saT1bXSxzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIixhPTAsbD1vLmxlbmd0aDthPGw7KythKW5bYV09b1thXSxpW28uY2hhckNvZGVBdChhKV09YTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7dmFyIHI9ZS5pbmRleE9mKFwiPVwiKTtyZXR1cm4tMT09PXImJihyPXQpLFtyLHI9PT10PzA6NC1yJTRdfWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgaSxzLG89W10sYT10O2E8cjthKz0zKWk9KGVbYV08PDE2JjE2NzExNjgwKSsoZVthKzFdPDw4JjY1MjgwKSsoMjU1JmVbYSsyXSksby5wdXNoKG5bKHM9aSk+PjE4JjYzXStuW3M+PjEyJjYzXStuW3M+PjYmNjNdK25bNjMmc10pO3JldHVybiBvLmpvaW4oXCJcIil9aVtcIi1cIi5jaGFyQ29kZUF0KDApXT02MixpW1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sMTg2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7IWZ1bmN0aW9uKHQscil7ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0fHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaShlLHQpe2Uuc3VwZXJfPXQ7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWV9ZnVuY3Rpb24gcyhlLHQscil7aWYocy5pc0JOKGUpKXJldHVybiBlO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1lJiYoXCJsZVwiIT09dCYmXCJiZVwiIT09dHx8KHI9dCx0PTEwKSx0aGlzLl9pbml0KGV8fDAsdHx8MTAscnx8XCJiZVwiKSl9dmFyIG87XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPXM6KHZvaWQgMCkuQk49cyxzLkJOPXMscy53b3JkU2l6ZT0yNjt0cnl7bz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6ZShcImJ1ZmZlclwiKS5CdWZmZXJ9Y2F0Y2goZSl7fWZ1bmN0aW9uIGEoZSx0KXt2YXIgcj1lLmNoYXJDb2RlQXQodCk7cmV0dXJuIHI+PTQ4JiZyPD01Nz9yLTQ4OnI+PTY1JiZyPD03MD9yLTU1OnI+PTk3JiZyPD0xMDI/ci04Nzp2b2lkIG4oITEsXCJJbnZhbGlkIGNoYXJhY3RlciBpbiBcIitlKX1mdW5jdGlvbiBsKGUsdCxyKXt2YXIgbj1hKGUscik7cmV0dXJuIHItMT49dCYmKG58PWEoZSxyLTEpPDw0KSxufWZ1bmN0aW9uIGMoZSx0LHIsaSl7Zm9yKHZhciBzPTAsbz0wLGE9TWF0aC5taW4oZS5sZW5ndGgsciksbD10O2w8YTtsKyspe3ZhciBjPWUuY2hhckNvZGVBdChsKS00ODtzKj1pLG89Yz49NDk/Yy00OSsxMDpjPj0xNz9jLTE3KzEwOmMsbihjPj0wJiZvPGksXCJJbnZhbGlkIGNoYXJhY3RlclwiKSxzKz1vfXJldHVybiBzfWZ1bmN0aW9uIHUoZSx0KXtlLndvcmRzPXQud29yZHMsZS5sZW5ndGg9dC5sZW5ndGgsZS5uZWdhdGl2ZT10Lm5lZ2F0aXZlLGUucmVkPXQucmVkfWlmKHMuaXNCTj1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHN8fG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXMud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZS53b3Jkcyl9LHMubWF4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuY21wKHQpPjA/ZTp0fSxzLm1pbj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNtcCh0KTwwP2U6dH0scy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSx0LHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGUsdCxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgZSlyZXR1cm4gdGhpcy5faW5pdEFycmF5KGUsdCxyKTtcImhleFwiPT09dCYmKHQ9MTYpLG4odD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNik7dmFyIGk9MDtcIi1cIj09PShlPWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIikpWzBdJiYoaSsrLHRoaXMubmVnYXRpdmU9MSksaTxlLmxlbmd0aCYmKDE2PT09dD90aGlzLl9wYXJzZUhleChlLGkscik6KHRoaXMuX3BhcnNlQmFzZShlLHQsaSksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHQscikpKX0scy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZSx0LHIpe2U8MCYmKHRoaXMubmVnYXRpdmU9MSxlPS1lKSxlPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZlXSx0aGlzLmxlbmd0aD0xKTplPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmUsZS82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4oZTw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZlLGUvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHQscil9LHMucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZSx0LHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIGUubGVuZ3RoKSxlLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChlLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBzLG8sYT0wO2lmKFwiYmVcIj09PXIpZm9yKGk9ZS5sZW5ndGgtMSxzPTA7aT49MDtpLT0zKW89ZVtpXXxlW2ktMV08PDh8ZVtpLTJdPDwxNix0aGlzLndvcmRzW3NdfD1vPDxhJjY3MTA4ODYzLHRoaXMud29yZHNbcysxXT1vPj4+MjYtYSY2NzEwODg2MywoYSs9MjQpPj0yNiYmKGEtPTI2LHMrKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAscz0wO2k8ZS5sZW5ndGg7aSs9MylvPWVbaV18ZVtpKzFdPDw4fGVbaSsyXTw8MTYsdGhpcy53b3Jkc1tzXXw9bzw8YSY2NzEwODg2Myx0aGlzLndvcmRzW3MrMV09bz4+PjI2LWEmNjcxMDg4NjMsKGErPTI0KT49MjYmJihhLT0yNixzKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxzLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZSx0LHIpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZS5sZW5ndGgtdCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgbj0wO248dGhpcy5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09MDt2YXIgaSxzPTAsbz0wO2lmKFwiYmVcIj09PXIpZm9yKG49ZS5sZW5ndGgtMTtuPj10O24tPTIpaT1sKGUsdCxuKTw8cyx0aGlzLndvcmRzW29dfD02NzEwODg2MyZpLHM+PTE4PyhzLT0xOCxvKz0xLHRoaXMud29yZHNbb118PWk+Pj4yNik6cys9ODtlbHNlIGZvcihuPShlLmxlbmd0aC10KSUyPT0wP3QrMTp0O248ZS5sZW5ndGg7bis9MilpPWwoZSx0LG4pPDxzLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmkscz49MTg/KHMtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTpzKz04O3RoaXMuX3N0cmlwKCl9LHMucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZSx0LHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPXQpbisrO24tLSxpPWkvdHwwO2Zvcih2YXIgcz1lLmxlbmd0aC1yLG89cyVuLGE9TWF0aC5taW4ocyxzLW8pK3IsbD0wLHU9cjt1PGE7dSs9bilsPWMoZSx1LHUrbix0KSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rbDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1sOnRoaXMuX2lhZGRuKGwpO2lmKDAhPT1vKXt2YXIgaD0xO2ZvcihsPWMoZSx1LGUubGVuZ3RoLHQpLHU9MDt1PG87dSsrKWgqPXQ7dGhpcy5pbXVsbihoKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKX10aGlzLl9zdHJpcCgpfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUpe2Uud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyllLndvcmRzW3RdPXRoaXMud29yZHNbdF07ZS5sZW5ndGg9dGhpcy5sZW5ndGgsZS5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGUucmVkPXRoaXMucmVkfSxzLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbihlKXt1KGUsdGhpcyl9LHMucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IHMobnVsbCk7cmV0dXJuIHRoaXMuY29weShlKSxlfSxzLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGUpe2Zvcig7dGhpcy5sZW5ndGg8ZTspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxzLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7cy5wcm90b3R5cGVbU3ltYm9sLmZvcihcIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tXCIpXT1ofWNhdGNoKGUpe3MucHJvdG90eXBlLmluc3BlY3Q9aH1lbHNlIHMucHJvdG90eXBlLmluc3BlY3Q9aDtmdW5jdGlvbiBoKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9dmFyIGY9W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLGQ9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scD1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByO2lmKHQ9MHx0fHwxLDE2PT09KGU9ZXx8MTApfHxcImhleFwiPT09ZSl7cj1cIlwiO2Zvcih2YXIgaT0wLHM9MCxvPTA7bzx0aGlzLmxlbmd0aDtvKyspe3ZhciBhPXRoaXMud29yZHNbb10sbD0oMTY3NzcyMTUmKGE8PGl8cykpLnRvU3RyaW5nKDE2KTtzPWE+Pj4yNC1pJjE2Nzc3MjE1LChpKz0yKT49MjYmJihpLT0yNixvLS0pLHI9MCE9PXN8fG8hPT10aGlzLmxlbmd0aC0xP2ZbNi1sLmxlbmd0aF0rbCtyOmwrcn1mb3IoMCE9PXMmJihyPXMudG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJXQhPTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYoZT09PSgwfGUpJiZlPj0yJiZlPD0zNil7dmFyIGM9ZFtlXSx1PXBbZV07cj1cIlwiO3ZhciBoPXRoaXMuY2xvbmUoKTtmb3IoaC5uZWdhdGl2ZT0wOyFoLmlzWmVybygpOyl7dmFyIG09aC5tb2Rybih1KS50b1N0cmluZyhlKTtyPShoPWguaWRpdm4odSkpLmlzWmVybygpP20rcjpmW2MtbS5sZW5ndGhdK20rcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGgldCE9MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0scy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/ZSs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2UrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy1lOmV9LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxvJiYocy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShvLGUsdCl9KSxzLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksZSx0KX07ZnVuY3Rpb24gbShlLHQscil7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmU7dmFyIG49ZS5sZW5ndGgrdC5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHxlLndvcmRzWzBdLHM9MHx0LndvcmRzWzBdLG89aSpzLGE9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPWE7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixoPTY3MTA4ODYzJmwsZj1NYXRoLm1pbihjLHQubGVuZ3RoLTEpLGQ9TWF0aC5tYXgoMCxjLWUubGVuZ3RoKzEpO2Q8PWY7ZCsrKXt2YXIgcD1jLWR8MDt1Kz0obz0oaT0wfGUud29yZHNbcF0pKihzPTB8dC53b3Jkc1tkXSkraCkvNjcxMDg4NjR8MCxoPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGgsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5fc3RyaXAoKX1zLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihlLHQscil7dGhpcy5fc3RyaXAoKTt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxzPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1zLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKHM+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKTt2YXIgbz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmFsbG9jVW5zYWZlP2UuYWxsb2NVbnNhZmUodCk6bmV3IGUodCl9KGUscyk7cmV0dXJuIHRoaXNbXCJfdG9BcnJheUxpa2VcIisoXCJsZVwiPT09dD9cIkxFXCI6XCJCRVwiKV0obyxpKSxvfSxzLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLG49MCxpPTAscz0wO2k8dGhpcy5sZW5ndGg7aSsrKXt2YXIgbz10aGlzLndvcmRzW2ldPDxzfG47ZVtyKytdPTI1NSZvLHI8ZS5sZW5ndGgmJihlW3IrK109bz4+OCYyNTUpLHI8ZS5sZW5ndGgmJihlW3IrK109bz4+MTYmMjU1KSw2PT09cz8ocjxlLmxlbmd0aCYmKGVbcisrXT1vPj4yNCYyNTUpLG49MCxzPTApOihuPW8+Pj4yNCxzKz0yKX1pZihyPGUubGVuZ3RoKWZvcihlW3IrK109bjtyPGUubGVuZ3RoOyllW3IrK109MH0scy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgtMSxuPTAsaT0wLHM9MDtpPHRoaXMubGVuZ3RoO2krKyl7dmFyIG89dGhpcy53b3Jkc1tpXTw8c3xuO2Vbci0tXT0yNTUmbyxyPj0wJiYoZVtyLS1dPW8+PjgmMjU1KSxyPj0wJiYoZVtyLS1dPW8+PjE2JjI1NSksNj09PXM/KHI+PTAmJihlW3ItLV09bz4+MjQmMjU1KSxuPTAscz0wKToobj1vPj4+MjQscys9Mil9aWYocj49MClmb3IoZVtyLS1dPW47cj49MDspZVtyLS1dPTB9LE1hdGguY2x6MzI/cy5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbihlKXtyZXR1cm4gMzItTWF0aC5jbHozMihlKX06cy5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbihlKXt2YXIgdD1lLHI9MDtyZXR1cm4gdD49NDA5NiYmKHIrPTEzLHQ+Pj49MTMpLHQ+PTY0JiYocis9Nyx0Pj4+PTcpLHQ+PTgmJihyKz00LHQ+Pj49NCksdD49MiYmKHIrPTIsdD4+Pj0yKSxyK3R9LHMucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihlKXtpZigwPT09ZSlyZXR1cm4gMjY7dmFyIHQ9ZSxyPTA7cmV0dXJuIDA9PSg4MTkxJnQpJiYocis9MTMsdD4+Pj0xMyksMD09KDEyNyZ0KSYmKHIrPTcsdD4+Pj03KSwwPT0oMTUmdCkmJihyKz00LHQ+Pj49NCksMD09KDMmdCkmJihyKz0yLHQ+Pj49MiksMD09KDEmdCkmJnIrKyxyfSxzLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLHQ9dGhpcy5fY291bnRCaXRzKGUpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrdH0scy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1t0XSk7aWYoZSs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIGV9LHMucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHMucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihlKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihlKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHMucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRlc3RuKGUtMSk/dGhpcy5ub3RuKGUpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHMucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxzLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0scy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30scy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihlKXtmb3IoO3RoaXMubGVuZ3RoPGUubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspdGhpcy53b3Jkc1t0XT10aGlzLndvcmRzW3RdfGUud29yZHNbdF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHMucHJvdG90eXBlLmlvcj1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGUpfSxzLnByb3RvdHlwZS5vcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihlKTplLmNsb25lKCkuaW9yKHRoaXMpfSxzLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGUpOmUuY2xvbmUoKS5pdW9yKHRoaXMpfSxzLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihlKXt2YXIgdDt0PXRoaXMubGVuZ3RoPmUubGVuZ3RoP2U6dGhpcztmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mZS53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihlKXtyZXR1cm4gbigwPT0odGhpcy5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChlKX0scy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChlKTplLmNsb25lKCkuaWFuZCh0aGlzKX0scy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGUpOmUuY2xvbmUoKS5pdWFuZCh0aGlzKX0scy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZSl7dmFyIHQscjt0aGlzLmxlbmd0aD5lLmxlbmd0aD8odD10aGlzLHI9ZSk6KHQ9ZSxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09dC53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT10KWZvcig7bjx0Lmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT10LndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxzLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGUpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfGUubmVnYXRpdmUpKSx0aGlzLml1eG9yKGUpfSxzLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubGVuZ3RoPmUubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGUpOmUuY2xvbmUoKS5peG9yKHRoaXMpfSxzLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxlbmd0aD5lLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZSk6ZS5jbG9uZSgpLml1eG9yKHRoaXMpfSxzLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wKTt2YXIgdD0wfE1hdGguY2VpbChlLzI2KSxyPWUlMjY7dGhpcy5fZXhwYW5kKHQpLHI+MCYmdC0tO2Zvcih2YXIgaT0wO2k8dDtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGUpfSxzLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGUsdCl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHI9ZS8yNnwwLGk9ZSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXT10P3RoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihlKXt2YXIgdCxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1lLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdD10aGlzLmlzdWIoZSksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09ZS5uZWdhdGl2ZSlyZXR1cm4gZS5uZWdhdGl2ZT0wLHQ9dGhpcy5pc3ViKGUpLGUubmVnYXRpdmU9MSx0Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmUubGVuZ3RoPyhyPXRoaXMsbj1lKToocj1lLG49dGhpcyk7Zm9yKHZhciBpPTAscz0wO3M8bi5sZW5ndGg7cysrKXQ9KDB8ci53b3Jkc1tzXSkrKDB8bi53b3Jkc1tzXSkraSx0aGlzLndvcmRzW3NdPTY3MTA4ODYzJnQsaT10Pj4+MjY7Zm9yKDswIT09aSYmczxyLmxlbmd0aDtzKyspdD0oMHxyLndvcmRzW3NdKStpLHRoaXMud29yZHNbc109NjcxMDg4NjMmdCxpPXQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO3M8ci5sZW5ndGg7cysrKXRoaXMud29yZHNbc109ci53b3Jkc1tzXTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAwIT09ZS5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0PXRoaXMuc3ViKGUpLGUubmVnYXRpdmVePTEsdCk6MD09PWUubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsdD1lLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsdCk6dGhpcy5sZW5ndGg+ZS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZSk6ZS5jbG9uZSgpLmlhZGQodGhpcyl9LHMucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZSl7aWYoMCE9PWUubmVnYXRpdmUpe2UubmVnYXRpdmU9MDt2YXIgdD10aGlzLmlhZGQoZSk7cmV0dXJuIGUubmVnYXRpdmU9MSx0Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGUpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcChlKTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj1lKToocj1lLG49dGhpcyk7Zm9yKHZhciBzPTAsbz0wO288bi5sZW5ndGg7bysrKXM9KHQ9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrcyk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmdDtmb3IoOzAhPT1zJiZvPHIubGVuZ3RoO28rKylzPSh0PSgwfHIud29yZHNbb10pK3MpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJnQ7aWYoMD09PXMmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihlKX07dmFyIGI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGkscyxvPWUud29yZHMsYT10LndvcmRzLGw9ci53b3JkcyxjPTAsdT0wfG9bMF0saD04MTkxJnUsZj11Pj4+MTMsZD0wfG9bMV0scD04MTkxJmQsbT1kPj4+MTMsYj0wfG9bMl0sZz04MTkxJmIseT1iPj4+MTMsdj0wfG9bM10sdz04MTkxJnYsXz12Pj4+MTMseD0wfG9bNF0saz04MTkxJngsUz14Pj4+MTMsTT0wfG9bNV0sQz04MTkxJk0sVD1NPj4+MTMsRT0wfG9bNl0sQT04MTkxJkUsUj1FPj4+MTMsTz0wfG9bN10saj04MTkxJk8sST1PPj4+MTMsTj0wfG9bOF0sUD04MTkxJk4sQj1OPj4+MTMsRD0wfG9bOV0sRj04MTkxJkQsTD1EPj4+MTMsej0wfGFbMF0sVT04MTkxJnosJD16Pj4+MTMsSD0wfGFbMV0sVj04MTkxJkgscT1IPj4+MTMsVz0wfGFbMl0sWD04MTkxJlcsSz1XPj4+MTMsWT0wfGFbM10sWj04MTkxJlksRz1ZPj4+MTMsSj0wfGFbNF0sUT04MTkxJkosZWU9Sj4+PjEzLHRlPTB8YVs1XSxyZT04MTkxJnRlLG5lPXRlPj4+MTMsaWU9MHxhWzZdLHNlPTgxOTEmaWUsb2U9aWU+Pj4xMyxhZT0wfGFbN10sbGU9ODE5MSZhZSxjZT1hZT4+PjEzLHVlPTB8YVs4XSxoZT04MTkxJnVlLGZlPXVlPj4+MTMsZGU9MHxhWzldLHBlPTgxOTEmZGUsbWU9ZGU+Pj4xMztyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD0xOTt2YXIgYmU9KGMrKG49TWF0aC5pbXVsKGgsVSkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoaCwkKSkrTWF0aC5pbXVsKGYsVSl8MCkpPDwxMyl8MDtjPSgocz1NYXRoLmltdWwoZiwkKSkrKGk+Pj4xMyl8MCkrKGJlPj4+MjYpfDAsYmUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAsVSksaT0oaT1NYXRoLmltdWwocCwkKSkrTWF0aC5pbXVsKG0sVSl8MCxzPU1hdGguaW11bChtLCQpO3ZhciBnZT0oYysobj1uK01hdGguaW11bChoLFYpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLHEpfDApK01hdGguaW11bChmLFYpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixxKXwwKSsoaT4+PjEzKXwwKSsoZ2U+Pj4yNil8MCxnZSY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZyxVKSxpPShpPU1hdGguaW11bChnLCQpKStNYXRoLmltdWwoeSxVKXwwLHM9TWF0aC5pbXVsKHksJCksbj1uK01hdGguaW11bChwLFYpfDAsaT0oaT1pK01hdGguaW11bChwLHEpfDApK01hdGguaW11bChtLFYpfDAscz1zK01hdGguaW11bChtLHEpfDA7dmFyIHllPShjKyhuPW4rTWF0aC5pbXVsKGgsWCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsSyl8MCkrTWF0aC5pbXVsKGYsWCl8MCkpPDwxMyl8MDtjPSgocz1zK01hdGguaW11bChmLEspfDApKyhpPj4+MTMpfDApKyh5ZT4+PjI2KXwwLHllJj02NzEwODg2MyxuPU1hdGguaW11bCh3LFUpLGk9KGk9TWF0aC5pbXVsKHcsJCkpK01hdGguaW11bChfLFUpfDAscz1NYXRoLmltdWwoXywkKSxuPW4rTWF0aC5pbXVsKGcsVil8MCxpPShpPWkrTWF0aC5pbXVsKGcscSl8MCkrTWF0aC5pbXVsKHksVil8MCxzPXMrTWF0aC5pbXVsKHkscSl8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPShpPWkrTWF0aC5pbXVsKHAsSyl8MCkrTWF0aC5pbXVsKG0sWCl8MCxzPXMrTWF0aC5pbXVsKG0sSyl8MDt2YXIgdmU9KGMrKG49bitNYXRoLmltdWwoaCxaKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxHKXwwKStNYXRoLmltdWwoZixaKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsRyl8MCkrKGk+Pj4xMyl8MCkrKHZlPj4+MjYpfDAsdmUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGssVSksaT0oaT1NYXRoLmltdWwoaywkKSkrTWF0aC5pbXVsKFMsVSl8MCxzPU1hdGguaW11bChTLCQpLG49bitNYXRoLmltdWwodyxWKXwwLGk9KGk9aStNYXRoLmltdWwodyxxKXwwKStNYXRoLmltdWwoXyxWKXwwLHM9cytNYXRoLmltdWwoXyxxKXwwLG49bitNYXRoLmltdWwoZyxYKXwwLGk9KGk9aStNYXRoLmltdWwoZyxLKXwwKStNYXRoLmltdWwoeSxYKXwwLHM9cytNYXRoLmltdWwoeSxLKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9KGk9aStNYXRoLmltdWwocCxHKXwwKStNYXRoLmltdWwobSxaKXwwLHM9cytNYXRoLmltdWwobSxHKXwwO3ZhciB3ZT0oYysobj1uK01hdGguaW11bChoLFEpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChoLGVlKXwwKStNYXRoLmltdWwoZixRKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsZWUpfDApKyhpPj4+MTMpfDApKyh3ZT4+PjI2KXwwLHdlJj02NzEwODg2MyxuPU1hdGguaW11bChDLFUpLGk9KGk9TWF0aC5pbXVsKEMsJCkpK01hdGguaW11bChULFUpfDAscz1NYXRoLmltdWwoVCwkKSxuPW4rTWF0aC5pbXVsKGssVil8MCxpPShpPWkrTWF0aC5pbXVsKGsscSl8MCkrTWF0aC5pbXVsKFMsVil8MCxzPXMrTWF0aC5pbXVsKFMscSl8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPShpPWkrTWF0aC5pbXVsKHcsSyl8MCkrTWF0aC5pbXVsKF8sWCl8MCxzPXMrTWF0aC5pbXVsKF8sSyl8MCxuPW4rTWF0aC5pbXVsKGcsWil8MCxpPShpPWkrTWF0aC5pbXVsKGcsRyl8MCkrTWF0aC5pbXVsKHksWil8MCxzPXMrTWF0aC5pbXVsKHksRyl8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsZWUpfDApK01hdGguaW11bChtLFEpfDAscz1zK01hdGguaW11bChtLGVlKXwwO3ZhciBfZT0oYysobj1uK01hdGguaW11bChoLHJlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxuZSl8MCkrTWF0aC5pbXVsKGYscmUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixuZSl8MCkrKGk+Pj4xMyl8MCkrKF9lPj4+MjYpfDAsX2UmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEEsVSksaT0oaT1NYXRoLmltdWwoQSwkKSkrTWF0aC5pbXVsKFIsVSl8MCxzPU1hdGguaW11bChSLCQpLG49bitNYXRoLmltdWwoQyxWKXwwLGk9KGk9aStNYXRoLmltdWwoQyxxKXwwKStNYXRoLmltdWwoVCxWKXwwLHM9cytNYXRoLmltdWwoVCxxKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9KGk9aStNYXRoLmltdWwoayxLKXwwKStNYXRoLmltdWwoUyxYKXwwLHM9cytNYXRoLmltdWwoUyxLKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9KGk9aStNYXRoLmltdWwodyxHKXwwKStNYXRoLmltdWwoXyxaKXwwLHM9cytNYXRoLmltdWwoXyxHKXwwLG49bitNYXRoLmltdWwoZyxRKXwwLGk9KGk9aStNYXRoLmltdWwoZyxlZSl8MCkrTWF0aC5pbXVsKHksUSl8MCxzPXMrTWF0aC5pbXVsKHksZWUpfDAsbj1uK01hdGguaW11bChwLHJlKXwwLGk9KGk9aStNYXRoLmltdWwocCxuZSl8MCkrTWF0aC5pbXVsKG0scmUpfDAscz1zK01hdGguaW11bChtLG5lKXwwO3ZhciB4ZT0oYysobj1uK01hdGguaW11bChoLHNlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxvZSl8MCkrTWF0aC5pbXVsKGYsc2UpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixvZSl8MCkrKGk+Pj4xMyl8MCkrKHhlPj4+MjYpfDAseGUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGosVSksaT0oaT1NYXRoLmltdWwoaiwkKSkrTWF0aC5pbXVsKEksVSl8MCxzPU1hdGguaW11bChJLCQpLG49bitNYXRoLmltdWwoQSxWKXwwLGk9KGk9aStNYXRoLmltdWwoQSxxKXwwKStNYXRoLmltdWwoUixWKXwwLHM9cytNYXRoLmltdWwoUixxKXwwLG49bitNYXRoLmltdWwoQyxYKXwwLGk9KGk9aStNYXRoLmltdWwoQyxLKXwwKStNYXRoLmltdWwoVCxYKXwwLHM9cytNYXRoLmltdWwoVCxLKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9KGk9aStNYXRoLmltdWwoayxHKXwwKStNYXRoLmltdWwoUyxaKXwwLHM9cytNYXRoLmltdWwoUyxHKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9KGk9aStNYXRoLmltdWwodyxlZSl8MCkrTWF0aC5pbXVsKF8sUSl8MCxzPXMrTWF0aC5pbXVsKF8sZWUpfDAsbj1uK01hdGguaW11bChnLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoZyxuZSl8MCkrTWF0aC5pbXVsKHkscmUpfDAscz1zK01hdGguaW11bCh5LG5lKXwwLG49bitNYXRoLmltdWwocCxzZSl8MCxpPShpPWkrTWF0aC5pbXVsKHAsb2UpfDApK01hdGguaW11bChtLHNlKXwwLHM9cytNYXRoLmltdWwobSxvZSl8MDt2YXIga2U9KGMrKG49bitNYXRoLmltdWwoaCxsZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGgsY2UpfDApK01hdGguaW11bChmLGxlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKGYsY2UpfDApKyhpPj4+MTMpfDApKyhrZT4+PjI2KXwwLGtlJj02NzEwODg2MyxuPU1hdGguaW11bChQLFUpLGk9KGk9TWF0aC5pbXVsKFAsJCkpK01hdGguaW11bChCLFUpfDAscz1NYXRoLmltdWwoQiwkKSxuPW4rTWF0aC5pbXVsKGosVil8MCxpPShpPWkrTWF0aC5pbXVsKGoscSl8MCkrTWF0aC5pbXVsKEksVil8MCxzPXMrTWF0aC5pbXVsKEkscSl8MCxuPW4rTWF0aC5pbXVsKEEsWCl8MCxpPShpPWkrTWF0aC5pbXVsKEEsSyl8MCkrTWF0aC5pbXVsKFIsWCl8MCxzPXMrTWF0aC5pbXVsKFIsSyl8MCxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPShpPWkrTWF0aC5pbXVsKEMsRyl8MCkrTWF0aC5pbXVsKFQsWil8MCxzPXMrTWF0aC5pbXVsKFQsRyl8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPShpPWkrTWF0aC5pbXVsKGssZWUpfDApK01hdGguaW11bChTLFEpfDAscz1zK01hdGguaW11bChTLGVlKXwwLG49bitNYXRoLmltdWwodyxyZSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsbmUpfDApK01hdGguaW11bChfLHJlKXwwLHM9cytNYXRoLmltdWwoXyxuZSl8MCxuPW4rTWF0aC5pbXVsKGcsc2UpfDAsaT0oaT1pK01hdGguaW11bChnLG9lKXwwKStNYXRoLmltdWwoeSxzZSl8MCxzPXMrTWF0aC5pbXVsKHksb2UpfDAsbj1uK01hdGguaW11bChwLGxlKXwwLGk9KGk9aStNYXRoLmltdWwocCxjZSl8MCkrTWF0aC5pbXVsKG0sbGUpfDAscz1zK01hdGguaW11bChtLGNlKXwwO3ZhciBTZT0oYysobj1uK01hdGguaW11bChoLGhlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxmZSl8MCkrTWF0aC5pbXVsKGYsaGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixmZSl8MCkrKGk+Pj4xMyl8MCkrKFNlPj4+MjYpfDAsU2UmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsVSksaT0oaT1NYXRoLmltdWwoRiwkKSkrTWF0aC5pbXVsKEwsVSl8MCxzPU1hdGguaW11bChMLCQpLG49bitNYXRoLmltdWwoUCxWKXwwLGk9KGk9aStNYXRoLmltdWwoUCxxKXwwKStNYXRoLmltdWwoQixWKXwwLHM9cytNYXRoLmltdWwoQixxKXwwLG49bitNYXRoLmltdWwoaixYKXwwLGk9KGk9aStNYXRoLmltdWwoaixLKXwwKStNYXRoLmltdWwoSSxYKXwwLHM9cytNYXRoLmltdWwoSSxLKXwwLG49bitNYXRoLmltdWwoQSxaKXwwLGk9KGk9aStNYXRoLmltdWwoQSxHKXwwKStNYXRoLmltdWwoUixaKXwwLHM9cytNYXRoLmltdWwoUixHKXwwLG49bitNYXRoLmltdWwoQyxRKXwwLGk9KGk9aStNYXRoLmltdWwoQyxlZSl8MCkrTWF0aC5pbXVsKFQsUSl8MCxzPXMrTWF0aC5pbXVsKFQsZWUpfDAsbj1uK01hdGguaW11bChrLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoayxuZSl8MCkrTWF0aC5pbXVsKFMscmUpfDAscz1zK01hdGguaW11bChTLG5lKXwwLG49bitNYXRoLmltdWwodyxzZSl8MCxpPShpPWkrTWF0aC5pbXVsKHcsb2UpfDApK01hdGguaW11bChfLHNlKXwwLHM9cytNYXRoLmltdWwoXyxvZSl8MCxuPW4rTWF0aC5pbXVsKGcsbGUpfDAsaT0oaT1pK01hdGguaW11bChnLGNlKXwwKStNYXRoLmltdWwoeSxsZSl8MCxzPXMrTWF0aC5pbXVsKHksY2UpfDAsbj1uK01hdGguaW11bChwLGhlKXwwLGk9KGk9aStNYXRoLmltdWwocCxmZSl8MCkrTWF0aC5pbXVsKG0saGUpfDAscz1zK01hdGguaW11bChtLGZlKXwwO3ZhciBNZT0oYysobj1uK01hdGguaW11bChoLHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaCxtZSl8MCkrTWF0aC5pbXVsKGYscGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoZixtZSl8MCkrKGk+Pj4xMyl8MCkrKE1lPj4+MjYpfDAsTWUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsViksaT0oaT1NYXRoLmltdWwoRixxKSkrTWF0aC5pbXVsKEwsVil8MCxzPU1hdGguaW11bChMLHEpLG49bitNYXRoLmltdWwoUCxYKXwwLGk9KGk9aStNYXRoLmltdWwoUCxLKXwwKStNYXRoLmltdWwoQixYKXwwLHM9cytNYXRoLmltdWwoQixLKXwwLG49bitNYXRoLmltdWwoaixaKXwwLGk9KGk9aStNYXRoLmltdWwoaixHKXwwKStNYXRoLmltdWwoSSxaKXwwLHM9cytNYXRoLmltdWwoSSxHKXwwLG49bitNYXRoLmltdWwoQSxRKXwwLGk9KGk9aStNYXRoLmltdWwoQSxlZSl8MCkrTWF0aC5pbXVsKFIsUSl8MCxzPXMrTWF0aC5pbXVsKFIsZWUpfDAsbj1uK01hdGguaW11bChDLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoQyxuZSl8MCkrTWF0aC5pbXVsKFQscmUpfDAscz1zK01hdGguaW11bChULG5lKXwwLG49bitNYXRoLmltdWwoayxzZSl8MCxpPShpPWkrTWF0aC5pbXVsKGssb2UpfDApK01hdGguaW11bChTLHNlKXwwLHM9cytNYXRoLmltdWwoUyxvZSl8MCxuPW4rTWF0aC5pbXVsKHcsbGUpfDAsaT0oaT1pK01hdGguaW11bCh3LGNlKXwwKStNYXRoLmltdWwoXyxsZSl8MCxzPXMrTWF0aC5pbXVsKF8sY2UpfDAsbj1uK01hdGguaW11bChnLGhlKXwwLGk9KGk9aStNYXRoLmltdWwoZyxmZSl8MCkrTWF0aC5pbXVsKHksaGUpfDAscz1zK01hdGguaW11bCh5LGZlKXwwO3ZhciBDZT0oYysobj1uK01hdGguaW11bChwLHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwocCxtZSl8MCkrTWF0aC5pbXVsKG0scGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwobSxtZSl8MCkrKGk+Pj4xMyl8MCkrKENlPj4+MjYpfDAsQ2UmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsWCksaT0oaT1NYXRoLmltdWwoRixLKSkrTWF0aC5pbXVsKEwsWCl8MCxzPU1hdGguaW11bChMLEspLG49bitNYXRoLmltdWwoUCxaKXwwLGk9KGk9aStNYXRoLmltdWwoUCxHKXwwKStNYXRoLmltdWwoQixaKXwwLHM9cytNYXRoLmltdWwoQixHKXwwLG49bitNYXRoLmltdWwoaixRKXwwLGk9KGk9aStNYXRoLmltdWwoaixlZSl8MCkrTWF0aC5pbXVsKEksUSl8MCxzPXMrTWF0aC5pbXVsKEksZWUpfDAsbj1uK01hdGguaW11bChBLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoQSxuZSl8MCkrTWF0aC5pbXVsKFIscmUpfDAscz1zK01hdGguaW11bChSLG5lKXwwLG49bitNYXRoLmltdWwoQyxzZSl8MCxpPShpPWkrTWF0aC5pbXVsKEMsb2UpfDApK01hdGguaW11bChULHNlKXwwLHM9cytNYXRoLmltdWwoVCxvZSl8MCxuPW4rTWF0aC5pbXVsKGssbGUpfDAsaT0oaT1pK01hdGguaW11bChrLGNlKXwwKStNYXRoLmltdWwoUyxsZSl8MCxzPXMrTWF0aC5pbXVsKFMsY2UpfDAsbj1uK01hdGguaW11bCh3LGhlKXwwLGk9KGk9aStNYXRoLmltdWwodyxmZSl8MCkrTWF0aC5pbXVsKF8saGUpfDAscz1zK01hdGguaW11bChfLGZlKXwwO3ZhciBUZT0oYysobj1uK01hdGguaW11bChnLHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZyxtZSl8MCkrTWF0aC5pbXVsKHkscGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoeSxtZSl8MCkrKGk+Pj4xMyl8MCkrKFRlPj4+MjYpfDAsVGUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsWiksaT0oaT1NYXRoLmltdWwoRixHKSkrTWF0aC5pbXVsKEwsWil8MCxzPU1hdGguaW11bChMLEcpLG49bitNYXRoLmltdWwoUCxRKXwwLGk9KGk9aStNYXRoLmltdWwoUCxlZSl8MCkrTWF0aC5pbXVsKEIsUSl8MCxzPXMrTWF0aC5pbXVsKEIsZWUpfDAsbj1uK01hdGguaW11bChqLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoaixuZSl8MCkrTWF0aC5pbXVsKEkscmUpfDAscz1zK01hdGguaW11bChJLG5lKXwwLG49bitNYXRoLmltdWwoQSxzZSl8MCxpPShpPWkrTWF0aC5pbXVsKEEsb2UpfDApK01hdGguaW11bChSLHNlKXwwLHM9cytNYXRoLmltdWwoUixvZSl8MCxuPW4rTWF0aC5pbXVsKEMsbGUpfDAsaT0oaT1pK01hdGguaW11bChDLGNlKXwwKStNYXRoLmltdWwoVCxsZSl8MCxzPXMrTWF0aC5pbXVsKFQsY2UpfDAsbj1uK01hdGguaW11bChrLGhlKXwwLGk9KGk9aStNYXRoLmltdWwoayxmZSl8MCkrTWF0aC5pbXVsKFMsaGUpfDAscz1zK01hdGguaW11bChTLGZlKXwwO3ZhciBFZT0oYysobj1uK01hdGguaW11bCh3LHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwodyxtZSl8MCkrTWF0aC5pbXVsKF8scGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoXyxtZSl8MCkrKGk+Pj4xMyl8MCkrKEVlPj4+MjYpfDAsRWUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsUSksaT0oaT1NYXRoLmltdWwoRixlZSkpK01hdGguaW11bChMLFEpfDAscz1NYXRoLmltdWwoTCxlZSksbj1uK01hdGguaW11bChQLHJlKXwwLGk9KGk9aStNYXRoLmltdWwoUCxuZSl8MCkrTWF0aC5pbXVsKEIscmUpfDAscz1zK01hdGguaW11bChCLG5lKXwwLG49bitNYXRoLmltdWwoaixzZSl8MCxpPShpPWkrTWF0aC5pbXVsKGosb2UpfDApK01hdGguaW11bChJLHNlKXwwLHM9cytNYXRoLmltdWwoSSxvZSl8MCxuPW4rTWF0aC5pbXVsKEEsbGUpfDAsaT0oaT1pK01hdGguaW11bChBLGNlKXwwKStNYXRoLmltdWwoUixsZSl8MCxzPXMrTWF0aC5pbXVsKFIsY2UpfDAsbj1uK01hdGguaW11bChDLGhlKXwwLGk9KGk9aStNYXRoLmltdWwoQyxmZSl8MCkrTWF0aC5pbXVsKFQsaGUpfDAscz1zK01hdGguaW11bChULGZlKXwwO3ZhciBBZT0oYysobj1uK01hdGguaW11bChrLHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoayxtZSl8MCkrTWF0aC5pbXVsKFMscGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoUyxtZSl8MCkrKGk+Pj4xMyl8MCkrKEFlPj4+MjYpfDAsQWUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYscmUpLGk9KGk9TWF0aC5pbXVsKEYsbmUpKStNYXRoLmltdWwoTCxyZSl8MCxzPU1hdGguaW11bChMLG5lKSxuPW4rTWF0aC5pbXVsKFAsc2UpfDAsaT0oaT1pK01hdGguaW11bChQLG9lKXwwKStNYXRoLmltdWwoQixzZSl8MCxzPXMrTWF0aC5pbXVsKEIsb2UpfDAsbj1uK01hdGguaW11bChqLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoaixjZSl8MCkrTWF0aC5pbXVsKEksbGUpfDAscz1zK01hdGguaW11bChJLGNlKXwwLG49bitNYXRoLmltdWwoQSxoZSl8MCxpPShpPWkrTWF0aC5pbXVsKEEsZmUpfDApK01hdGguaW11bChSLGhlKXwwLHM9cytNYXRoLmltdWwoUixmZSl8MDt2YXIgUmU9KGMrKG49bitNYXRoLmltdWwoQyxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEMsbWUpfDApK01hdGguaW11bChULHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKFQsbWUpfDApKyhpPj4+MTMpfDApKyhSZT4+PjI2KXwwLFJlJj02NzEwODg2MyxuPU1hdGguaW11bChGLHNlKSxpPShpPU1hdGguaW11bChGLG9lKSkrTWF0aC5pbXVsKEwsc2UpfDAscz1NYXRoLmltdWwoTCxvZSksbj1uK01hdGguaW11bChQLGxlKXwwLGk9KGk9aStNYXRoLmltdWwoUCxjZSl8MCkrTWF0aC5pbXVsKEIsbGUpfDAscz1zK01hdGguaW11bChCLGNlKXwwLG49bitNYXRoLmltdWwoaixoZSl8MCxpPShpPWkrTWF0aC5pbXVsKGosZmUpfDApK01hdGguaW11bChJLGhlKXwwLHM9cytNYXRoLmltdWwoSSxmZSl8MDt2YXIgT2U9KGMrKG49bitNYXRoLmltdWwoQSxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKEEsbWUpfDApK01hdGguaW11bChSLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKFIsbWUpfDApKyhpPj4+MTMpfDApKyhPZT4+PjI2KXwwLE9lJj02NzEwODg2MyxuPU1hdGguaW11bChGLGxlKSxpPShpPU1hdGguaW11bChGLGNlKSkrTWF0aC5pbXVsKEwsbGUpfDAscz1NYXRoLmltdWwoTCxjZSksbj1uK01hdGguaW11bChQLGhlKXwwLGk9KGk9aStNYXRoLmltdWwoUCxmZSl8MCkrTWF0aC5pbXVsKEIsaGUpfDAscz1zK01hdGguaW11bChCLGZlKXwwO3ZhciBqZT0oYysobj1uK01hdGguaW11bChqLHBlKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoaixtZSl8MCkrTWF0aC5pbXVsKEkscGUpfDApKTw8MTMpfDA7Yz0oKHM9cytNYXRoLmltdWwoSSxtZSl8MCkrKGk+Pj4xMyl8MCkrKGplPj4+MjYpfDAsamUmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEYsaGUpLGk9KGk9TWF0aC5pbXVsKEYsZmUpKStNYXRoLmltdWwoTCxoZSl8MCxzPU1hdGguaW11bChMLGZlKTt2YXIgSWU9KGMrKG49bitNYXRoLmltdWwoUCxwZSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKFAsbWUpfDApK01hdGguaW11bChCLHBlKXwwKSk8PDEzKXwwO2M9KChzPXMrTWF0aC5pbXVsKEIsbWUpfDApKyhpPj4+MTMpfDApKyhJZT4+PjI2KXwwLEllJj02NzEwODg2Mzt2YXIgTmU9KGMrKG49TWF0aC5pbXVsKEYscGUpKXwwKSsoKDgxOTEmKGk9KGk9TWF0aC5pbXVsKEYsbWUpKStNYXRoLmltdWwoTCxwZSl8MCkpPDwxMyl8MDtyZXR1cm4gYz0oKHM9TWF0aC5pbXVsKEwsbWUpKSsoaT4+PjEzKXwwKSsoTmU+Pj4yNil8MCxOZSY9NjcxMDg4NjMsbFswXT1iZSxsWzFdPWdlLGxbMl09eWUsbFszXT12ZSxsWzRdPXdlLGxbNV09X2UsbFs2XT14ZSxsWzddPWtlLGxbOF09U2UsbFs5XT1NZSxsWzEwXT1DZSxsWzExXT1UZSxsWzEyXT1FZSxsWzEzXT1BZSxsWzE0XT1SZSxsWzE1XT1PZSxsWzE2XT1qZSxsWzE3XT1JZSxsWzE4XT1OZSwwIT09YyYmKGxbMTldPWMsci5sZW5ndGgrKykscn07ZnVuY3Rpb24gZyhlLHQscil7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9ZS5sZW5ndGgrdC5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLHM9MDtzPHIubGVuZ3RoLTE7cysrKXt2YXIgbz1pO2k9MDtmb3IodmFyIGE9NjcxMDg4NjMmbixsPU1hdGgubWluKHMsdC5sZW5ndGgtMSksYz1NYXRoLm1heCgwLHMtZS5sZW5ndGgrMSk7Yzw9bDtjKyspe3ZhciB1PXMtYyxoPSgwfGUud29yZHNbdV0pKigwfHQud29yZHNbY10pLGY9NjcxMDg4NjMmaDthPTY3MTA4ODYzJihmPWYrYXwwKSxpKz0obz0obz1vKyhoLzY3MTA4ODY0fDApfDApKyhmPj4+MjYpfDApPj4+MjYsbyY9NjcxMDg4NjN9ci53b3Jkc1tzXT1hLG49byxvPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbc109bjpyLmxlbmd0aC0tLHIuX3N0cmlwKCl9ZnVuY3Rpb24geShlLHQscil7cmV0dXJuIGcoZSx0LHIpfWZ1bmN0aW9uIHYoZSx0KXt0aGlzLng9ZSx0aGlzLnk9dH1NYXRoLmltdWx8fChiPW0pLHMucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5sZW5ndGgrZS5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09ZS5sZW5ndGg/Yih0aGlzLGUsdCk6cjw2Mz9tKHRoaXMsZSx0KTpyPDEwMjQ/Zyh0aGlzLGUsdCk6eSh0aGlzLGUsdCl9LHYucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBBcnJheShlKSxyPXMucHJvdG90eXBlLl9jb3VudEJpdHMoZSktMSxuPTA7bjxlO24rKyl0W25dPXRoaXMucmV2QmluKG4scixlKTtyZXR1cm4gdH0sdi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZXx8ZT09PXItMSlyZXR1cm4gZTtmb3IodmFyIG49MCxpPTA7aTx0O2krKylufD0oMSZlKTw8dC1pLTEsZT4+PTE7cmV0dXJuIG59LHYucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZSx0LHIsbixpLHMpe2Zvcih2YXIgbz0wO288cztvKyspbltvXT10W2Vbb11dLGlbb109cltlW29dXX0sdi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyLG4saSxzKXt0aGlzLnBlcm11dGUocyxlLHQscixuLGkpO2Zvcih2YXIgbz0xO288aTtvPDw9MSlmb3IodmFyIGE9bzw8MSxsPU1hdGguY29zKDIqTWF0aC5QSS9hKSxjPU1hdGguc2luKDIqTWF0aC5QSS9hKSx1PTA7dTxpO3UrPWEpZm9yKHZhciBoPWwsZj1jLGQ9MDtkPG87ZCsrKXt2YXIgcD1yW3UrZF0sbT1uW3UrZF0sYj1yW3UrZCtvXSxnPW5bdStkK29dLHk9aCpiLWYqZztnPWgqZytmKmIsYj15LHJbdStkXT1wK2Isblt1K2RdPW0rZyxyW3UrZCtvXT1wLWIsblt1K2Qrb109bS1nLGQhPT1hJiYoeT1sKmgtYypmLGY9bCpmK2MqaCxoPXkpfX0sdi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xfE1hdGgubWF4KHQsZSksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LHYucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihlLHQscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPWVbbl07ZVtuXT1lW3Itbi0xXSxlW3Itbi0xXT1pLGk9dFtuXSx0W25dPS10W3Itbi0xXSx0W3Itbi0xXT0taX19LHYucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLG49MDtuPHQvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZChlWzIqbisxXS90KStNYXRoLnJvdW5kKGVbMipuXS90KStyO2Vbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIGV9LHYucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZSx0LHIsaSl7Zm9yKHZhciBzPTAsbz0wO288dDtvKyspcys9MHxlW29dLHJbMipvXT04MTkxJnMscz4+Pj0xMyxyWzIqbysxXT04MTkxJnMscz4+Pj0xMztmb3Iobz0yKnQ7bzxpOysrbylyW29dPTA7bigwPT09cyksbigwPT0oLTgxOTImcykpfSx2LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT0wO3JldHVybiB0fSx2LnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZS5sZW5ndGgsdC5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLHM9dGhpcy5zdHViKG4pLG89bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLGw9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGY9ci53b3JkcztmLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLG8sbiksdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYyxuKSx0aGlzLnRyYW5zZm9ybShvLHMsYSxsLG4saSksdGhpcy50cmFuc2Zvcm0oYyxzLHUsaCxuLGkpO2Zvcih2YXIgZD0wO2Q8bjtkKyspe3ZhciBwPWFbZF0qdVtkXS1sW2RdKmhbZF07bFtkXT1hW2RdKmhbZF0rbFtkXSp1W2RdLGFbZF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoYSxsLG4pLHRoaXMudHJhbnNmb3JtKGEsbCxmLHMsbixpKSx0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy5ub3JtYWxpemUxM2IoZixuKSxyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD1lLmxlbmd0aCt0Lmxlbmd0aCxyLl9zdHJpcCgpfSxzLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSx0aGlzLm11bFRvKGUsdCl9LHMucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMobnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2UubGVuZ3RoKSx5KHRoaXMsZSx0KX0scy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGUsdGhpcyl9LHMucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGUpe3ZhciB0PWU8MDt0JiYoZT0tZSksbihcIm51bWJlclwiPT10eXBlb2YgZSksbihlPDY3MTA4ODY0KTtmb3IodmFyIHI9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspe3ZhciBzPSgwfHRoaXMud29yZHNbaV0pKmUsbz0oNjcxMDg4NjMmcykrKDY3MTA4ODYzJnIpO3I+Pj0yNixyKz1zLzY3MTA4ODY0fDAscis9bz4+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmb31yZXR1cm4gMCE9PXImJih0aGlzLndvcmRzW2ldPXIsdGhpcy5sZW5ndGgrKyksdD90aGlzLmluZWcoKTp0aGlzfSxzLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZSl9LHMucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0scy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0scy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5iaXRMZW5ndGgoKSkscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O3Rbcl09ZS53b3Jkc1tuXT4+PmkmMX1yZXR1cm4gdH0oZSk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBuZXcgcygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjx0Lmxlbmd0aCYmMD09PXRbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPHQubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248dC5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09dFtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxzLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZSl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHQscj1lJTI2LGk9KGUtcikvMjYscz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBvPTA7Zm9yKHQ9MDt0PHRoaXMubGVuZ3RoO3QrKyl7dmFyIGE9dGhpcy53b3Jkc1t0XSZzLGw9KDB8dGhpcy53b3Jkc1t0XSktYTw8cjt0aGlzLndvcmRzW3RdPWx8byxvPWE+Pj4yNi1yfW8mJih0aGlzLndvcmRzW3RdPW8sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2Zvcih0PXRoaXMubGVuZ3RoLTE7dD49MDt0LS0pdGhpcy53b3Jkc1t0K2ldPXRoaXMud29yZHNbdF07Zm9yKHQ9MDt0PGk7dCsrKXRoaXMud29yZHNbdF09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZSl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGUpfSxzLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZSx0LHIpe3ZhciBpO24oXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+PTApLGk9dD8odC10JTI2KS8yNjowO3ZhciBzPWUlMjYsbz1NYXRoLm1pbigoZS1zKS8yNix0aGlzLmxlbmd0aCksYT02NzEwODg2M142NzEwODg2Mz4+PnM8PHMsbD1yO2lmKGktPW8saT1NYXRoLm1heCgwLGkpLGwpe2Zvcih2YXIgYz0wO2M8bztjKyspbC53b3Jkc1tjXT10aGlzLndvcmRzW2NdO2wubGVuZ3RoPW99aWYoMD09PW8pO2Vsc2UgaWYodGhpcy5sZW5ndGg+bylmb3IodGhpcy5sZW5ndGgtPW8sYz0wO2M8dGhpcy5sZW5ndGg7YysrKXRoaXMud29yZHNbY109dGhpcy53b3Jkc1tjK29dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHU9MDtmb3IoYz10aGlzLmxlbmd0aC0xO2M+PTAmJigwIT09dXx8Yz49aSk7Yy0tKXt2YXIgaD0wfHRoaXMud29yZHNbY107dGhpcy53b3Jkc1tjXT11PDwyNi1zfGg+Pj5zLHU9aCZhfXJldHVybiBsJiYwIT09dSYmKGwud29yZHNbbC5sZW5ndGgrK109dSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHMucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZSx0LHIpfSxzLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZSl9LHMucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGUpfSxzLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZSl9LHMucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGUpfSxzLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPj0wKTt2YXIgdD1lJTI2LHI9KGUtdCkvMjYsaT0xPDx0O3JldHVybiEodGhpcy5sZW5ndGg8PXIpJiYhISh0aGlzLndvcmRzW3JdJmkpfSxzLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZSl7bihcIm51bWJlclwiPT10eXBlb2YgZSYmZT49MCk7dmFyIHQ9ZSUyNixyPShlLXQpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PXQmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09dCl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj50PDx0O3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHMucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGUpfSxzLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihlKXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgZSksbihlPDY3MTA4ODY0KSxlPDA/dGhpcy5pc3VibigtZSk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9ZT8odGhpcy53b3Jkc1swXT1lLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGUpfSxzLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZSl7dGhpcy53b3Jkc1swXSs9ZTtmb3IodmFyIHQ9MDt0PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3RdPj02NzEwODg2NDt0KyspdGhpcy53b3Jkc1t0XS09NjcxMDg4NjQsdD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1t0KzFdPTE6dGhpcy53b3Jkc1t0KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHQrMSksdGhpc30scy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZSl7aWYobihcIm51bWJlclwiPT10eXBlb2YgZSksbihlPDY3MTA4ODY0KSxlPDApcmV0dXJuIHRoaXMuaWFkZG4oLWUpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihlKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1lLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciB0PTA7dDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1t0XTwwO3QrKyl0aGlzLndvcmRzW3RdKz02NzEwODg2NCx0aGlzLndvcmRzW3QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHMucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihlKX0scy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGUpfSxzLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxzLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0scy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaSxzLG89ZS5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGE9MDtmb3IoaT0wO2k8ZS5sZW5ndGg7aSsrKXtzPSgwfHRoaXMud29yZHNbaStyXSkrYTt2YXIgbD0oMHxlLndvcmRzW2ldKSp0O2E9KChzLT02NzEwODg2MyZsKT4+MjYpLShsLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZzfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPShzPSgwfHRoaXMud29yZHNbaStyXSkrYSk+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZzO2lmKDA9PT1hKXJldHVybiB0aGlzLl9zdHJpcCgpO2ZvcihuKC0xPT09YSksYT0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPShzPS0oMHx0aGlzLndvcmRzW2ldKSthKT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZzO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0scy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZSx0KXt2YXIgcj0odGhpcy5sZW5ndGgsZS5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9ZSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIGEsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09dCl7KGE9bmV3IHMobnVsbCkpLmxlbmd0aD1sKzEsYS53b3Jkcz1uZXcgQXJyYXkoYS5sZW5ndGgpO2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKWEud29yZHNbY109MH12YXIgdT1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSxsKTswPT09dS5uZWdhdGl2ZSYmKG49dSxhJiYoYS53b3Jkc1tsXT0xKSk7Zm9yKHZhciBoPWwtMTtoPj0wO2gtLSl7dmFyIGY9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtoXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtoLTFdKTtmb3IoZj1NYXRoLm1pbihmL298MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxmLGgpOzAhPT1uLm5lZ2F0aXZlOylmLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxoKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7YSYmKGEud29yZHNbaF09Zil9cmV0dXJuIGEmJmEuX3N0cmlwKCksbi5fc3RyaXAoKSxcImRpdlwiIT09dCYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6YXx8bnVsbCxtb2Q6bn19LHMucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG4oIWUuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgcygwKSxtb2Q6bmV3IHMoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09ZS5uZWdhdGl2ZT8oYT10aGlzLm5lZygpLmRpdm1vZChlLHQpLFwibW9kXCIhPT10JiYoaT1hLmRpdi5uZWcoKSksXCJkaXZcIiE9PXQmJihvPWEubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlhZGQoZSkpLHtkaXY6aSxtb2Q6b30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09ZS5uZWdhdGl2ZT8oYT10aGlzLmRpdm1vZChlLm5lZygpLHQpLFwibW9kXCIhPT10JiYoaT1hLmRpdi5uZWcoKSkse2RpdjppLG1vZDphLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJmUubmVnYXRpdmUpPyhhPXRoaXMubmVnKCkuZGl2bW9kKGUubmVnKCksdCksXCJkaXZcIiE9PXQmJihvPWEubW9kLm5lZygpLHImJjAhPT1vLm5lZ2F0aXZlJiZvLmlzdWIoZSkpLHtkaXY6YS5kaXYsbW9kOm99KTplLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZSk8MD97ZGl2Om5ldyBzKDApLG1vZDp0aGlzfToxPT09ZS5sZW5ndGg/XCJkaXZcIj09PXQ/e2Rpdjp0aGlzLmRpdm4oZS53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT10P3tkaXY6bnVsbCxtb2Q6bmV3IHModGhpcy5tb2RybihlLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGUud29yZHNbMF0pLG1vZDpuZXcgcyh0aGlzLm1vZHJuKGUud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihlLHQpO3ZhciBpLG8sYX0scy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpdm1vZChlLFwiZGl2XCIsITEpLmRpdn0scy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRpdm1vZChlLFwibW9kXCIsITEpLm1vZH0scy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kaXZtb2QoZSxcIm1vZFwiLCEwKS5tb2R9LHMucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZGl2bW9kKGUpO2lmKHQubW9kLmlzWmVybygpKXJldHVybiB0LmRpdjt2YXIgcj0wIT09dC5kaXYubmVnYXRpdmU/dC5tb2QuaXN1YihlKTp0Lm1vZCxuPWUudXNocm4oMSksaT1lLmFuZGxuKDEpLHM9ci5jbXAobik7cmV0dXJuIHM8MHx8MT09PWkmJjA9PT1zP3QuZGl2OjAhPT10LmRpdi5uZWdhdGl2ZT90LmRpdi5pc3VibigxKTp0LmRpdi5pYWRkbigxKX0scy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZTwwO3QmJihlPS1lKSxuKGU8PTY3MTA4ODYzKTtmb3IodmFyIHI9KDE8PDI2KSVlLGk9MCxzPXRoaXMubGVuZ3RoLTE7cz49MDtzLS0paT0ocippKygwfHRoaXMud29yZHNbc10pKSVlO3JldHVybiB0Py1pOml9LHMucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubW9kcm4oZSl9LHMucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGUpe3ZhciB0PWU8MDt0JiYoZT0tZSksbihlPD02NzEwODg2Myk7Zm9yKHZhciByPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgcz0oMHx0aGlzLndvcmRzW2ldKSs2NzEwODg2NCpyO3RoaXMud29yZHNbaV09cy9lfDAscj1zJWV9cmV0dXJuIHRoaXMuX3N0cmlwKCksdD90aGlzLmluZWcoKTp0aGlzfSxzLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZSl9LHMucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZSl7bigwPT09ZS5uZWdhdGl2ZSksbighZS5pc1plcm8oKSk7dmFyIHQ9dGhpcyxyPWUuY2xvbmUoKTt0PTAhPT10Lm5lZ2F0aXZlP3QudW1vZChlKTp0LmNsb25lKCk7Zm9yKHZhciBpPW5ldyBzKDEpLG89bmV3IHMoMCksYT1uZXcgcygwKSxsPW5ldyBzKDEpLGM9MDt0LmlzRXZlbigpJiZyLmlzRXZlbigpOyl0Lml1c2hybigxKSxyLml1c2hybigxKSwrK2M7Zm9yKHZhciB1PXIuY2xvbmUoKSxoPXQuY2xvbmUoKTshdC5pc1plcm8oKTspe2Zvcih2YXIgZj0wLGQ9MTswPT0odC53b3Jkc1swXSZkKSYmZjwyNjsrK2YsZDw8PTEpO2lmKGY+MClmb3IodC5pdXNocm4oZik7Zi0tID4wOykoaS5pc09kZCgpfHxvLmlzT2RkKCkpJiYoaS5pYWRkKHUpLG8uaXN1YihoKSksaS5pdXNocm4oMSksby5pdXNocm4oMSk7Zm9yKHZhciBwPTAsbT0xOzA9PShyLndvcmRzWzBdJm0pJiZwPDI2OysrcCxtPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShhLmlzT2RkKCl8fGwuaXNPZGQoKSkmJihhLmlhZGQodSksbC5pc3ViKGgpKSxhLml1c2hybigxKSxsLml1c2hybigxKTt0LmNtcChyKT49MD8odC5pc3ViKHIpLGkuaXN1YihhKSxvLmlzdWIobCkpOihyLmlzdWIodCksYS5pc3ViKGkpLGwuaXN1YihvKSl9cmV0dXJue2E6YSxiOmwsZ2NkOnIuaXVzaGxuKGMpfX0scy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGUpe24oMD09PWUubmVnYXRpdmUpLG4oIWUuaXNaZXJvKCkpO3ZhciB0PXRoaXMscj1lLmNsb25lKCk7dD0wIT09dC5uZWdhdGl2ZT90LnVtb2QoZSk6dC5jbG9uZSgpO2Zvcih2YXIgaSxvPW5ldyBzKDEpLGE9bmV3IHMoMCksbD1yLmNsb25lKCk7dC5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBjPTAsdT0xOzA9PSh0LndvcmRzWzBdJnUpJiZjPDI2OysrYyx1PDw9MSk7aWYoYz4wKWZvcih0Lml1c2hybihjKTtjLS0gPjA7KW8uaXNPZGQoKSYmby5pYWRkKGwpLG8uaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGY9MTswPT0oci53b3Jkc1swXSZmKSYmaDwyNjsrK2gsZjw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChsKSxhLml1c2hybigxKTt0LmNtcChyKT49MD8odC5pc3ViKHIpLG8uaXN1YihhKSk6KHIuaXN1Yih0KSxhLmlzdWIobykpfXJldHVybihpPTA9PT10LmNtcG4oMSk/bzphKS5jbXBuKDApPDAmJmkuaWFkZChlKSxpfSxzLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZSl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZS5hYnMoKTtpZihlLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciB0PXRoaXMuY2xvbmUoKSxyPWUuY2xvbmUoKTt0Lm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO3QuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKXQuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDt0LmlzRXZlbigpOyl0Lml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPXQuY21wKHIpO2lmKGk8MCl7dmFyIHM9dDt0PXIscj1zfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7dC5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0scy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lZ2NkKGUpLmEudW1vZChlKX0scy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxzLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0scy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMud29yZHNbMF0mZX0scy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZSl7bihcIm51bWJlclwiPT10eXBlb2YgZSk7dmFyIHQ9ZSUyNixyPShlLXQpLzI2LGk9MTw8dDtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgcz1pLG89cjswIT09cyYmbzx0aGlzLmxlbmd0aDtvKyspe3ZhciBhPTB8dGhpcy53b3Jkc1tvXTtzPShhKz1zKT4+PjI2LGEmPTY3MTA4ODYzLHRoaXMud29yZHNbb109YX1yZXR1cm4gMCE9PXMmJih0aGlzLndvcmRzW29dPXMsdGhpcy5sZW5ndGgrKyksdGhpc30scy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHMucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZSl7dmFyIHQscj1lPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFyKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZyKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSl0PTE7ZWxzZXtyJiYoZT0tZSksbihlPD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTt0PWk9PT1lPzA6aTxlPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXQ6dH0scy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGUpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09ZS5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWUubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHQ9dGhpcy51Y21wKGUpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC10OnR9LHMucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZSl7aWYodGhpcy5sZW5ndGg+ZS5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8ZS5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciB0PTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfGUud29yZHNbcl07aWYobiE9PWkpe248aT90PS0xOm4+aSYmKHQ9MSk7YnJlYWt9fXJldHVybiB0fSxzLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZSl9LHMucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGUpe3JldHVybiAxPT09dGhpcy5jbXAoZSl9LHMucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY21wbihlKT49MH0scy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcChlKT49MH0scy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGUpe3JldHVybi0xPT09dGhpcy5jbXBuKGUpfSxzLnByb3RvdHlwZS5sdD1mdW5jdGlvbihlKXtyZXR1cm4tMT09PXRoaXMuY21wKGUpfSxzLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNtcG4oZSk8PTB9LHMucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jbXAoZSk8PTB9LHMucHJvdG90eXBlLmVxbj1mdW5jdGlvbihlKXtyZXR1cm4gMD09PXRoaXMuY21wbihlKX0scy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PT10aGlzLmNtcChlKX0scy5yZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBDKGUpfSxzLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihlKXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxlLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZSl9LHMucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHMucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZWQ9ZSx0aGlzfSxzLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihlKXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKGUpfSxzLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGUpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZSksdGhpcy5yZWQubXVsKHRoaXMsZSl9LHMucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZSksdGhpcy5yZWQuaW11bCh0aGlzLGUpfSxzLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxzLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxzLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxzLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxzLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxzLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odGhpcy5yZWQmJiFlLnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGUpfTt2YXIgdz17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIF8oZSx0KXt0aGlzLm5hbWU9ZSx0aGlzLnA9bmV3IHModCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHMoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHgoKXtfLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGsoKXtfLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIFMoKXtfLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIE0oKXtfLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIEMoZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciB0PXMuX3ByaW1lKGUpO3RoaXMubT10LnAsdGhpcy5wcmltZT10fWVsc2UgbihlLmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09ZSx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gVChlKXtDLmNhbGwodGhpcyxlKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBzKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV8ucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgcyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGV9LF8ucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZSl7dmFyIHQscj1lO2Rve3RoaXMuc3BsaXQocix0aGlzLnRtcCksdD0ocj0ocj10aGlzLmltdWxLKHIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUodD50aGlzLm4pO3ZhciBuPXQ8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1yLnN0cmlwP3Iuc3RyaXAoKTpyLl9zdHJpcCgpLHJ9LF8ucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGUsdCl7ZS5pdXNocm4odGhpcy5uLDAsdCl9LF8ucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGUpe3JldHVybiBlLmltdWwodGhpcy5rKX0saSh4LF8pLHgucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPU1hdGgubWluKGUubGVuZ3RoLDkpLG49MDtuPHI7bisrKXQud29yZHNbbl09ZS53b3Jkc1tuXTtpZih0Lmxlbmd0aD1yLGUubGVuZ3RoPD05KXJldHVybiBlLndvcmRzWzBdPTAsdm9pZChlLmxlbmd0aD0xKTt2YXIgaT1lLndvcmRzWzldO2Zvcih0LndvcmRzW3QubGVuZ3RoKytdPTQxOTQzMDMmaSxuPTEwO248ZS5sZW5ndGg7bisrKXt2YXIgcz0wfGUud29yZHNbbl07ZS53b3Jkc1tuLTEwXT0oNDE5NDMwMyZzKTw8NHxpPj4+MjIsaT1zfWk+Pj49MjIsZS53b3Jkc1tuLTEwXT1pLDA9PT1pJiZlLmxlbmd0aD4xMD9lLmxlbmd0aC09MTA6ZS5sZW5ndGgtPTl9LHgucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGUpe2Uud29yZHNbZS5sZW5ndGhdPTAsZS53b3Jkc1tlLmxlbmd0aCsxXT0wLGUubGVuZ3RoKz0yO2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49MHxlLndvcmRzW3JdO3QrPTk3NypuLGUud29yZHNbcl09NjcxMDg4NjMmdCx0PTY0Km4rKHQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1lLndvcmRzW2UubGVuZ3RoLTFdJiYoZS5sZW5ndGgtLSwwPT09ZS53b3Jkc1tlLmxlbmd0aC0xXSYmZS5sZW5ndGgtLSksZX0saShrLF8pLGkoUyxfKSxpKE0sXyksTS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHxlLndvcmRzW3JdKSt0LGk9NjcxMDg4NjMmbjtuPj4+PTI2LGUud29yZHNbcl09aSx0PW59cmV0dXJuIDAhPT10JiYoZS53b3Jkc1tlLmxlbmd0aCsrXT10KSxlfSxzLl9wcmltZT1mdW5jdGlvbihlKXtpZih3W2VdKXJldHVybiB3W2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyB4O2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGs7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgUztlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgTX1yZXR1cm4gd1tlXT10LHR9LEMucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGUpe24oMD09PWUubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKGUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sQy5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZSx0KXtuKDA9PShlLm5lZ2F0aXZlfHQubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbihlLnJlZCYmZS5yZWQ9PT10LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LEMucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGUpLl9mb3JjZVJlZCh0aGlzKToodShlLGUudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksZSl9LEMucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtyZXR1cm4gZS5pc1plcm8oKT9lLmNsb25lKCk6dGhpcy5tLnN1YihlKS5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlLHQpe3RoaXMuX3ZlcmlmeTIoZSx0KTt2YXIgcj1lLmFkZCh0KTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5pYWRkKHQpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxDLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZSx0KXt0aGlzLl92ZXJpZnkyKGUsdCk7dmFyIHI9ZS5zdWIodCk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihlLHQpe3RoaXMuX3ZlcmlmeTIoZSx0KTt2YXIgcj1lLmlzdWIodCk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxDLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShlKSx0aGlzLmltb2QoZS51c2hsbih0KSl9LEMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihlLHQpLHRoaXMuaW1vZChlLmltdWwodCkpfSxDLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihlLHQpLHRoaXMuaW1vZChlLm11bCh0KSl9LEMucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaW11bChlLGUuY2xvbmUoKSl9LEMucHJvdG90eXBlLnNxcj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tdWwoZSxlKX0sQy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihlKXtpZihlLmlzWmVybygpKXJldHVybiBlLmNsb25lKCk7dmFyIHQ9dGhpcy5tLmFuZGxuKDMpO2lmKG4odCUyPT0xKSwzPT09dCl7dmFyIHI9dGhpcy5tLmFkZChuZXcgcygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhlLHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxvPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylvKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGE9bmV3IHMoMSkudG9SZWQodGhpcyksbD1hLnJlZE5lZygpLGM9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1PW5ldyBzKDIqdSp1KS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codSxjKS5jbXAobCk7KXUucmVkSUFkZChsKTtmb3IodmFyIGg9dGhpcy5wb3codSxpKSxmPXRoaXMucG93KGUsaS5hZGRuKDEpLml1c2hybigxKSksZD10aGlzLnBvdyhlLGkpLHA9bzswIT09ZC5jbXAoYSk7KXtmb3IodmFyIG09ZCxiPTA7MCE9PW0uY21wKGEpO2IrKyltPW0ucmVkU3FyKCk7bihiPHApO3ZhciBnPXRoaXMucG93KGgsbmV3IHMoMSkuaXVzaGxuKHAtYi0xKSk7Zj1mLnJlZE11bChnKSxoPWcucmVkU3FyKCksZD1kLnJlZE11bChoKSxwPWJ9cmV0dXJuIGZ9LEMucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXQubmVnYXRpdmU/KHQubmVnYXRpdmU9MCx0aGlzLmltb2QodCkucmVkTmVnKCkpOnRoaXMuaW1vZCh0KX0sQy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGUsdCl7aWYodC5pc1plcm8oKSlyZXR1cm4gbmV3IHMoMSkudG9SZWQodGhpcyk7aWYoMD09PXQuY21wbigxKSlyZXR1cm4gZS5jbG9uZSgpO3ZhciByPW5ldyBBcnJheSgxNik7clswXT1uZXcgcygxKS50b1JlZCh0aGlzKSxyWzFdPWU7Zm9yKHZhciBuPTI7bjxyLmxlbmd0aDtuKyspcltuXT10aGlzLm11bChyW24tMV0sZSk7dmFyIGk9clswXSxvPTAsYT0wLGw9dC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PWwmJihsPTI2KSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2Zvcih2YXIgYz10LndvcmRzW25dLHU9bC0xO3U+PTA7dS0tKXt2YXIgaD1jPj51JjE7aSE9PXJbMF0mJihpPXRoaXMuc3FyKGkpKSwwIT09aHx8MCE9PW8/KG88PD0xLG98PWgsKDQ9PT0rK2F8fDA9PT1uJiYwPT09dSkmJihpPXRoaXMubXVsKGkscltvXSksYT0wLG89MCkpOmE9MH1sPTI2fXJldHVybiBpfSxDLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS51bW9kKHRoaXMubSk7cmV0dXJuIHQ9PT1lP3QuY2xvbmUoKTp0fSxDLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihlKXt2YXIgdD1lLmNsb25lKCk7cmV0dXJuIHQucmVkPW51bGwsdH0scy5tb250PWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVChlKX0saShULEMpLFQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbW9kKGUudXNobG4odGhpcy5zaGlmdCkpfSxULnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmltb2QoZS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIHQucmVkPW51bGwsdH0sVC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihlLHQpe2lmKGUuaXNaZXJvKCl8fHQuaXNaZXJvKCkpcmV0dXJuIGUud29yZHNbMF09MCxlLmxlbmd0aD0xLGU7dmFyIHI9ZS5pbXVsKHQpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLHM9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9zPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYocz1pLmlhZGQodGhpcy5tKSkscy5fZm9yY2VSZWQodGhpcyl9LFQucHJvdG90eXBlLm11bD1mdW5jdGlvbihlLHQpe2lmKGUuaXNaZXJvKCl8fHQuaXNaZXJvKCkpcmV0dXJuIG5ldyBzKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj1lLm11bCh0KSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxULnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmltb2QoZS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHZvaWQgMD09PXR8fHQpfSx7YnVmZmVyOjE4OH1dLDE4NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuO2Z1bmN0aW9uIGkoZSl7dGhpcy5yYW5kPWV9aWYodC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBufHwobj1uZXcgaShudWxsKSksbi5nZW5lcmF0ZShlKX0sdC5leHBvcnRzLlJhbmQ9aSxpLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmFuZChlKX0saS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJldHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXMoZSk7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGUpLHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIHR9LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/aS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh0KSx0fTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9pLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXModCksdH06XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmKGkucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX0pO2Vsc2UgdHJ5e3ZhciBzPWUoXCJjcnlwdG9cIik7aWYoXCJmdW5jdGlvblwiIT10eXBlb2Ygcy5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkXCIpO2kucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKGUpe3JldHVybiBzLnJhbmRvbUJ5dGVzKGUpfX1jYXRjaChlKXt9fSx7Y3J5cHRvOjE4OH1dLDE4ODpbZnVuY3Rpb24oZSx0LHIpe30se31dLDE4OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gaShlKXtuLmlzQnVmZmVyKGUpfHwoZT1uLmZyb20oZSkpO2Zvcih2YXIgdD1lLmxlbmd0aC80fDAscj1uZXcgQXJyYXkodCksaT0wO2k8dDtpKyspcltpXT1lLnJlYWRVSW50MzJCRSg0KmkpO3JldHVybiByfWZ1bmN0aW9uIHMoZSl7Zm9yKDswPGUubGVuZ3RoO2UrKyllWzBdPTB9ZnVuY3Rpb24gbyhlLHQscixuLGkpe2Zvcih2YXIgcyxvLGEsbCxjPXJbMF0sdT1yWzFdLGg9clsyXSxmPXJbM10sZD1lWzBdXnRbMF0scD1lWzFdXnRbMV0sbT1lWzJdXnRbMl0sYj1lWzNdXnRbM10sZz00LHk9MTt5PGk7eSsrKXM9Y1tkPj4+MjRdXnVbcD4+PjE2JjI1NV1eaFttPj4+OCYyNTVdXmZbMjU1JmJdXnRbZysrXSxvPWNbcD4+PjI0XV51W20+Pj4xNiYyNTVdXmhbYj4+PjgmMjU1XV5mWzI1NSZkXV50W2crK10sYT1jW20+Pj4yNF1edVtiPj4+MTYmMjU1XV5oW2Q+Pj44JjI1NV1eZlsyNTUmcF1edFtnKytdLGw9Y1tiPj4+MjRdXnVbZD4+PjE2JjI1NV1eaFtwPj4+OCYyNTVdXmZbMjU1Jm1dXnRbZysrXSxkPXMscD1vLG09YSxiPWw7cmV0dXJuIHM9KG5bZD4+PjI0XTw8MjR8bltwPj4+MTYmMjU1XTw8MTZ8blttPj4+OCYyNTVdPDw4fG5bMjU1JmJdKV50W2crK10sbz0obltwPj4+MjRdPDwyNHxuW20+Pj4xNiYyNTVdPDwxNnxuW2I+Pj44JjI1NV08PDh8blsyNTUmZF0pXnRbZysrXSxhPShuW20+Pj4yNF08PDI0fG5bYj4+PjE2JjI1NV08PDE2fG5bZD4+PjgmMjU1XTw8OHxuWzI1NSZwXSledFtnKytdLGw9KG5bYj4+PjI0XTw8MjR8bltkPj4+MTYmMjU1XTw8MTZ8bltwPj4+OCYyNTVdPDw4fG5bMjU1Jm1dKV50W2crK10sW3M+Pj49MCxvPj4+PTAsYT4+Pj0wLGw+Pj49MF19dmFyIGE9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLGw9ZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IEFycmF5KDI1NiksdD0wO3Q8MjU2O3QrKyllW3RdPXQ8MTI4P3Q8PDE6dDw8MV4yODM7Zm9yKHZhciByPVtdLG49W10saT1bW10sW10sW10sW11dLHM9W1tdLFtdLFtdLFtdXSxvPTAsYT0wLGw9MDtsPDI1NjsrK2wpe3ZhciBjPWFeYTw8MV5hPDwyXmE8PDNeYTw8NDtjPWM+Pj44XjI1NSZjXjk5LHJbb109YyxuW2NdPW87dmFyIHU9ZVtvXSxoPWVbdV0sZj1lW2hdLGQ9MjU3KmVbY11eMTY4NDMwMDgqYztpWzBdW29dPWQ8PDI0fGQ+Pj44LGlbMV1bb109ZDw8MTZ8ZD4+PjE2LGlbMl1bb109ZDw8OHxkPj4+MjQsaVszXVtvXT1kLGQ9MTY4NDMwMDkqZl42NTUzNypoXjI1Nyp1XjE2ODQzMDA4Km8sc1swXVtjXT1kPDwyNHxkPj4+OCxzWzFdW2NdPWQ8PDE2fGQ+Pj4xNixzWzJdW2NdPWQ8PDh8ZD4+PjI0LHNbM11bY109ZCwwPT09bz9vPWE9MToobz11XmVbZVtlW2ZedV1dXSxhXj1lW2VbYV1dKX1yZXR1cm57U0JPWDpyLElOVl9TQk9YOm4sU1VCX01JWDppLElOVl9TVUJfTUlYOnN9fSgpO2Z1bmN0aW9uIGMoZSl7dGhpcy5fa2V5PWkoZSksdGhpcy5fcmVzZXQoKX1jLmJsb2NrU2l6ZT0xNixjLmtleVNpemU9MzIsYy5wcm90b3R5cGUuYmxvY2tTaXplPWMuYmxvY2tTaXplLGMucHJvdG90eXBlLmtleVNpemU9Yy5rZXlTaXplLGMucHJvdG90eXBlLl9yZXNldD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9rZXksdD1lLmxlbmd0aCxyPXQrNixuPTQqKHIrMSksaT1bXSxzPTA7czx0O3MrKylpW3NdPWVbc107Zm9yKHM9dDtzPG47cysrKXt2YXIgbz1pW3MtMV07cyV0PT0wPyhvPW88PDh8bz4+PjI0LG89bC5TQk9YW28+Pj4yNF08PDI0fGwuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8bC5TQk9YW28+Pj44JjI1NV08PDh8bC5TQk9YWzI1NSZvXSxvXj1hW3MvdHwwXTw8MjQpOnQ+NiYmcyV0PT00JiYobz1sLlNCT1hbbz4+PjI0XTw8MjR8bC5TQk9YW28+Pj4xNiYyNTVdPDwxNnxsLlNCT1hbbz4+PjgmMjU1XTw8OHxsLlNCT1hbMjU1Jm9dKSxpW3NdPWlbcy10XV5vfWZvcih2YXIgYz1bXSx1PTA7dTxuO3UrKyl7dmFyIGg9bi11LGY9aVtoLSh1JTQ/MDo0KV07Y1t1XT11PDR8fGg8PTQ/ZjpsLklOVl9TVUJfTUlYWzBdW2wuU0JPWFtmPj4+MjRdXV5sLklOVl9TVUJfTUlYWzFdW2wuU0JPWFtmPj4+MTYmMjU1XV1ebC5JTlZfU1VCX01JWFsyXVtsLlNCT1hbZj4+PjgmMjU1XV1ebC5JTlZfU1VCX01JWFszXVtsLlNCT1hbMjU1JmZdXX10aGlzLl9uUm91bmRzPXIsdGhpcy5fa2V5U2NoZWR1bGU9aSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1jfSxjLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZT1pKGUpLHRoaXMuX2tleVNjaGVkdWxlLGwuU1VCX01JWCxsLlNCT1gsdGhpcy5fblJvdW5kcyl9LGMucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLmVuY3J5cHRCbG9ja1JhdyhlKSxyPW4uYWxsb2NVbnNhZmUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn0sYy5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe3ZhciB0PShlPWkoZSkpWzFdO2VbMV09ZVszXSxlWzNdPXQ7dmFyIHI9byhlLHRoaXMuX2ludktleVNjaGVkdWxlLGwuSU5WX1NVQl9NSVgsbC5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSxzPW4uYWxsb2NVbnNhZmUoMTYpO3JldHVybiBzLndyaXRlVUludDMyQkUoclswXSwwKSxzLndyaXRlVUludDMyQkUoclszXSw0KSxzLndyaXRlVUludDMyQkUoclsyXSw4KSxzLndyaXRlVUludDMyQkUoclsxXSwxMiksc30sYy5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtzKHRoaXMuX2tleVNjaGVkdWxlKSxzKHRoaXMuX2ludktleVNjaGVkdWxlKSxzKHRoaXMuX2tleSl9LHQuZXhwb3J0cy5BRVM9Y30se1wic2FmZS1idWZmZXJcIjo0OTR9XSwxOTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9hZXNcIiksaT1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLHM9ZShcImNpcGhlci1iYXNlXCIpLG89ZShcImluaGVyaXRzXCIpLGE9ZShcIi4vZ2hhc2hcIiksbD1lKFwiYnVmZmVyLXhvclwiKSxjPWUoXCIuL2luY3IzMlwiKTtmdW5jdGlvbiB1KGUsdCxyLG8pe3MuY2FsbCh0aGlzKTt2YXIgbD1pLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBuLkFFUyh0KTt2YXIgdT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGwpO3RoaXMuX2doYXNoPW5ldyBhKHUpLHI9ZnVuY3Rpb24oZSx0LHIpe2lmKDEyPT09dC5sZW5ndGgpcmV0dXJuIGUuX2ZpbklEPWkuY29uY2F0KFt0LGkuZnJvbShbMCwwLDAsMV0pXSksaS5jb25jYXQoW3QsaS5mcm9tKFswLDAsMCwyXSldKTt2YXIgbj1uZXcgYShyKSxzPXQubGVuZ3RoLG89cyUxNjtuLnVwZGF0ZSh0KSxvJiYobz0xNi1vLG4udXBkYXRlKGkuYWxsb2MobywwKSkpLG4udXBkYXRlKGkuYWxsb2MoOCwwKSk7dmFyIGw9OCpzLHU9aS5hbGxvYyg4KTt1LndyaXRlVUludEJFKGwsMCw4KSxuLnVwZGF0ZSh1KSxlLl9maW5JRD1uLnN0YXRlO3ZhciBoPWkuZnJvbShlLl9maW5JRCk7cmV0dXJuIGMoaCksaH0odGhpcyxyLHUpLHRoaXMuX3ByZXY9aS5mcm9tKHIpLHRoaXMuX2NhY2hlPWkuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9aS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PW8sdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9ZSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfW8odSxzKSx1LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciB0PTE2LXRoaXMuX2FsZW4lMTY7dDwxNiYmKHQ9aS5hbGxvYyh0LDApLHRoaXMuX2doYXNoLnVwZGF0ZSh0KSl9dGhpcy5fY2FsbGVkPSEwO3ZhciByPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLGUpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZShlKTp0aGlzLl9naGFzaC51cGRhdGUociksdGhpcy5fbGVuKz1lLmxlbmd0aCxyfSx1LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIik7dmFyIGU9bCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbihlLHQpe3ZhciByPTA7ZS5sZW5ndGghPT10Lmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCksaT0wO2k8bjsrK2kpcis9ZVtpXV50W2ldO3JldHVybiByfShlLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt0aGlzLl9hdXRoVGFnPWUsdGhpcy5fY2lwaGVyLnNjcnViKCl9LHUucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhaS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sdS5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihlKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPWV9LHUucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihlKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZShlKSx0aGlzLl9hbGVuKz1lLmxlbmd0aH0sdC5leHBvcnRzPXV9LHtcIi4vYWVzXCI6MTg5LFwiLi9naGFzaFwiOjE5NCxcIi4vaW5jcjMyXCI6MTk1LFwiYnVmZmVyLXhvclwiOjIxOSxcImNpcGhlci1iYXNlXCI6MjIxLGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMTkxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vZW5jcnlwdGVyXCIpLGk9ZShcIi4vZGVjcnlwdGVyXCIpLHM9ZShcIi4vbW9kZXMvbGlzdC5qc29uXCIpO3IuY3JlYXRlQ2lwaGVyPXIuQ2lwaGVyPW4uY3JlYXRlQ2lwaGVyLHIuY3JlYXRlQ2lwaGVyaXY9ci5DaXBoZXJpdj1uLmNyZWF0ZUNpcGhlcml2LHIuY3JlYXRlRGVjaXBoZXI9ci5EZWNpcGhlcj1pLmNyZWF0ZURlY2lwaGVyLHIuY3JlYXRlRGVjaXBoZXJpdj1yLkRlY2lwaGVyaXY9aS5jcmVhdGVEZWNpcGhlcml2LHIubGlzdENpcGhlcnM9ci5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHMpfX0se1wiLi9kZWNyeXB0ZXJcIjoxOTIsXCIuL2VuY3J5cHRlclwiOjE5MyxcIi4vbW9kZXMvbGlzdC5qc29uXCI6MjAzfV0sMTkyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vYXV0aENpcGhlclwiKSxpPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIscz1lKFwiLi9tb2Rlc1wiKSxvPWUoXCIuL3N0cmVhbUNpcGhlclwiKSxhPWUoXCJjaXBoZXItYmFzZVwiKSxsPWUoXCIuL2Flc1wiKSxjPWUoXCJldnBfYnl0ZXN0b2tleVwiKTtmdW5jdGlvbiB1KGUsdCxyKXthLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGgsdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBsLkFFUyh0KSx0aGlzLl9wcmV2PWkuZnJvbShyKSx0aGlzLl9tb2RlPWUsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZnVuY3Rpb24gaCgpe3RoaXMuY2FjaGU9aS5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBmKGUsdCxyKXt2YXIgYT1zW2UudG9Mb3dlckNhc2UoKV07aWYoIWEpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9aS5mcm9tKHIpKSxcIkdDTVwiIT09YS5tb2RlJiZyLmxlbmd0aCE9PWEuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9aS5mcm9tKHQpKSx0Lmxlbmd0aCE9PWEua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIit0Lmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PWEudHlwZT9uZXcgbyhhLm1vZHVsZSx0LHIsITApOlwiYXV0aFwiPT09YS50eXBlP25ldyBuKGEubW9kdWxlLHQsciwhMCk6bmV3IHUoYS5tb2R1bGUsdCxyKX1lKFwiaW5oZXJpdHNcIikodSxhKSx1LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0LHI7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgbj1bXTt0PXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KXI9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCksbi5wdXNoKHIpO3JldHVybiBpLmNvbmNhdChuKX0sdS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxNV07aWYodDwxfHx0PjE2KXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7dmFyIHI9LTE7Zm9yKDsrK3I8dDspaWYoZVtyKygxNi10KV0hPT10KXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTY9PT10KXJldHVybjtyZXR1cm4gZS5zbGljZSgwLDE2LXQpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxlKSk7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LHUucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIWUsdGhpc30saC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9aS5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxoLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHR9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHQ7cmV0dXJuIG51bGx9LGgucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LHIuY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcj1zW2UudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKHQsITEsci5rZXksci5pdik7cmV0dXJuIGYoZSxuLmtleSxuLml2KX0sci5jcmVhdGVEZWNpcGhlcml2PWZ9LHtcIi4vYWVzXCI6MTg5LFwiLi9hdXRoQ2lwaGVyXCI6MTkwLFwiLi9tb2Rlc1wiOjIwMixcIi4vc3RyZWFtQ2lwaGVyXCI6MjA1LFwiY2lwaGVyLWJhc2VcIjoyMjEsZXZwX2J5dGVzdG9rZXk6NDIzLGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMTkzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vbW9kZXNcIiksaT1lKFwiLi9hdXRoQ2lwaGVyXCIpLHM9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixvPWUoXCIuL3N0cmVhbUNpcGhlclwiKSxhPWUoXCJjaXBoZXItYmFzZVwiKSxsPWUoXCIuL2Flc1wiKSxjPWUoXCJldnBfYnl0ZXN0b2tleVwiKTtmdW5jdGlvbiB1KGUsdCxyKXthLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGYsdGhpcy5fY2lwaGVyPW5ldyBsLkFFUyh0KSx0aGlzLl9wcmV2PXMuZnJvbShyKSx0aGlzLl9tb2RlPWUsdGhpcy5fYXV0b3BhZGRpbmc9ITB9ZShcImluaGVyaXRzXCIpKHUsYSksdS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdCxyO3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIG49W107dD10aGlzLl9jYWNoZS5nZXQoKTspcj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSxuLnB1c2gocik7cmV0dXJuIHMuY29uY2F0KG4pfTt2YXIgaD1zLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBmKCl7dGhpcy5jYWNoZT1zLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIGQoZSx0LHIpe3ZhciBhPW5bZS50b0xvd2VyQ2FzZSgpXTtpZighYSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1zLmZyb20odCkpLHQubGVuZ3RoIT09YS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3QubGVuZ3RoKTtpZihcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9cy5mcm9tKHIpKSxcIkdDTVwiIT09YS5tb2RlJiZyLmxlbmd0aCE9PWEuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK3IubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09YS50eXBlP25ldyBvKGEubW9kdWxlLHQscik6XCJhdXRoXCI9PT1hLnR5cGU/bmV3IGkoYS5tb2R1bGUsdCxyKTpuZXcgdShhLm1vZHVsZSx0LHIpfXUucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGU9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsZSksdGhpcy5fY2lwaGVyLnNjcnViKCksZTtpZighZS5lcXVhbHMoaCkpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSx1LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFlLHRoaXN9LGYucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXMuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0sZi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1yZXR1cm4gbnVsbH0sZi5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgsdD1zLmFsbG9jVW5zYWZlKGUpLHI9LTE7KytyPGU7KXQud3JpdGVVSW50OChlLHIpO3JldHVybiBzLmNvbmNhdChbdGhpcy5jYWNoZSx0XSl9LHIuY3JlYXRlQ2lwaGVyaXY9ZCxyLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbihlLHQpe3ZhciByPW5bZS50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBpPWModCwhMSxyLmtleSxyLml2KTtyZXR1cm4gZChlLGkua2V5LGkuaXYpfX0se1wiLi9hZXNcIjoxODksXCIuL2F1dGhDaXBoZXJcIjoxOTAsXCIuL21vZGVzXCI6MjAyLFwiLi9zdHJlYW1DaXBoZXJcIjoyMDUsXCJjaXBoZXItYmFzZVwiOjIyMSxldnBfYnl0ZXN0b2tleTo0MjMsaW5oZXJpdHM6NDQwLFwic2FmZS1idWZmZXJcIjo0OTR9XSwxOTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLGk9bi5hbGxvYygxNiwwKTtmdW5jdGlvbiBzKGUpe3ZhciB0PW4uYWxsb2NVbnNhZmUoMTYpO3JldHVybiB0LndyaXRlVUludDMyQkUoZVswXT4+PjAsMCksdC53cml0ZVVJbnQzMkJFKGVbMV0+Pj4wLDQpLHQud3JpdGVVSW50MzJCRShlWzJdPj4+MCw4KSx0LndyaXRlVUludDMyQkUoZVszXT4+PjAsMTIpLHR9ZnVuY3Rpb24gbyhlKXt0aGlzLmg9ZSx0aGlzLnN0YXRlPW4uYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1uLmFsbG9jVW5zYWZlKDApfW8ucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMTsrK3Q8ZS5sZW5ndGg7KXRoaXMuc3RhdGVbdF1ePWVbdF07dGhpcy5fbXVsdGlwbHkoKX0sby5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQscixuPVsoZT10aGlzLmgpLnJlYWRVSW50MzJCRSgwKSxlLnJlYWRVSW50MzJCRSg0KSxlLnJlYWRVSW50MzJCRSg4KSxlLnJlYWRVSW50MzJCRSgxMildLGk9WzAsMCwwLDBdLG89LTE7KytvPDEyODspe2ZvcigwIT0odGhpcy5zdGF0ZVt+fihvLzgpXSYxPDw3LW8lOCkmJihpWzBdXj1uWzBdLGlbMV1ePW5bMV0saVsyXV49blsyXSxpWzNdXj1uWzNdKSxyPTAhPSgxJm5bM10pLHQ9Mzt0PjA7dC0tKW5bdF09blt0XT4+PjF8KDEmblt0LTFdKTw8MzE7blswXT1uWzBdPj4+MSxyJiYoblswXT1uWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9cyhpKX0sby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0aGlzLmNhY2hlPW4uY29uY2F0KFt0aGlzLmNhY2hlLGVdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2godCl9LG8ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKG4uY29uY2F0KFt0aGlzLmNhY2hlLGldLDE2KSksdGhpcy5naGFzaChzKFswLGUsMCx0XSkpLHRoaXMuc3RhdGV9LHQuZXhwb3J0cz1vfSx7XCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDE5NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmxlbmd0aDtyLS07KXtpZigyNTUhPT0odD1lLnJlYWRVSW50OChyKSkpe3QrKyxlLndyaXRlVUludDgodCxyKTticmVha31lLndyaXRlVUludDgoMCxyKX19fSx7fV0sMTk2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJ1ZmZlci14b3JcIik7ci5lbmNyeXB0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9bih0LGUuX3ByZXYpO3JldHVybiBlLl9wcmV2PWUuX2NpcGhlci5lbmNyeXB0QmxvY2sociksZS5fcHJldn0sci5kZWNyeXB0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fcHJldjtlLl9wcmV2PXQ7dmFyIGk9ZS5fY2lwaGVyLmRlY3J5cHRCbG9jayh0KTtyZXR1cm4gbihpLHIpfX0se1wiYnVmZmVyLXhvclwiOjIxOX1dLDE5NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsaT1lKFwiYnVmZmVyLXhvclwiKTtmdW5jdGlvbiBzKGUsdCxyKXt2YXIgcz10Lmxlbmd0aCxvPWkodCxlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHMpLGUuX3ByZXY9bi5jb25jYXQoW2UuX3ByZXYscj90Om9dKSxvfXIuZW5jcnlwdD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBpLG89bi5hbGxvY1Vuc2FmZSgwKTt0Lmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bi5hbGxvY1Vuc2FmZSgwKSksIShlLl9jYWNoZS5sZW5ndGg8PXQubGVuZ3RoKSl7bz1uLmNvbmNhdChbbyxzKGUsdCxyKV0pO2JyZWFrfWk9ZS5fY2FjaGUubGVuZ3RoLG89bi5jb25jYXQoW28scyhlLHQuc2xpY2UoMCxpKSxyKV0pLHQ9dC5zbGljZShpKX1yZXR1cm4gb319LHtcImJ1ZmZlci14b3JcIjoyMTksXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDE5ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gaShlLHQscil7Zm9yKHZhciBuLGksbz0tMSxhPTA7KytvPDg7KW49dCYxPDw3LW8/MTI4OjAsYSs9KDEyOCYoaT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpWzBdXm4pKT4+byU4LGUuX3ByZXY9cyhlLl9wcmV2LHI/bjppKTtyZXR1cm4gYX1mdW5jdGlvbiBzKGUsdCl7dmFyIHI9ZS5sZW5ndGgsaT0tMSxzPW4uYWxsb2NVbnNhZmUoZS5sZW5ndGgpO2ZvcihlPW4uY29uY2F0KFtlLG4uZnJvbShbdF0pXSk7KytpPHI7KXNbaV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIHN9ci5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIHM9dC5sZW5ndGgsbz1uLmFsbG9jVW5zYWZlKHMpLGE9LTE7KythPHM7KW9bYV09aShlLHRbYV0scik7cmV0dXJuIG99fSx7XCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDE5OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gaShlLHQscil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KVswXV50O3JldHVybiBlLl9wcmV2PW4uY29uY2F0KFtlLl9wcmV2LnNsaWNlKDEpLG4uZnJvbShbcj90OmldKV0pLGl9ci5lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIHM9dC5sZW5ndGgsbz1uLmFsbG9jVW5zYWZlKHMpLGE9LTE7KythPHM7KW9bYV09aShlLHRbYV0scik7cmV0dXJuIG99fSx7XCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDIwMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJidWZmZXIteG9yXCIpLGk9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixzPWUoXCIuLi9pbmNyMzJcIik7ZnVuY3Rpb24gbyhlKXt2YXIgdD1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KGUuX3ByZXYpO3JldHVybiBzKGUuX3ByZXYpLHR9ci5lbmNyeXB0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9TWF0aC5jZWlsKHQubGVuZ3RoLzE2KSxzPWUuX2NhY2hlLmxlbmd0aDtlLl9jYWNoZT1pLmNvbmNhdChbZS5fY2FjaGUsaS5hbGxvY1Vuc2FmZSgxNipyKV0pO2Zvcih2YXIgYT0wO2E8cjthKyspe3ZhciBsPW8oZSksYz1zKzE2KmE7ZS5fY2FjaGUud3JpdGVVSW50MzJCRShsWzBdLGMrMCksZS5fY2FjaGUud3JpdGVVSW50MzJCRShsWzFdLGMrNCksZS5fY2FjaGUud3JpdGVVSW50MzJCRShsWzJdLGMrOCksZS5fY2FjaGUud3JpdGVVSW50MzJCRShsWzNdLGMrMTIpfXZhciB1PWUuX2NhY2hlLnNsaWNlKDAsdC5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZSh0Lmxlbmd0aCksbih0LHUpfX0se1wiLi4vaW5jcjMyXCI6MTk1LFwiYnVmZmVyLXhvclwiOjIxOSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMjAxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ci5lbmNyeXB0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX2NpcGhlci5lbmNyeXB0QmxvY2sodCl9LHIuZGVjcnlwdD1mdW5jdGlvbihlLHQpe3JldHVybiBlLl9jaXBoZXIuZGVjcnlwdEJsb2NrKHQpfX0se31dLDIwMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXtFQ0I6ZShcIi4vZWNiXCIpLENCQzplKFwiLi9jYmNcIiksQ0ZCOmUoXCIuL2NmYlwiKSxDRkI4OmUoXCIuL2NmYjhcIiksQ0ZCMTplKFwiLi9jZmIxXCIpLE9GQjplKFwiLi9vZmJcIiksQ1RSOmUoXCIuL2N0clwiKSxHQ006ZShcIi4vY3RyXCIpfSxpPWUoXCIuL2xpc3QuanNvblwiKTtmb3IodmFyIHMgaW4gaSlpW3NdLm1vZHVsZT1uW2lbc10ubW9kZV07dC5leHBvcnRzPWl9LHtcIi4vY2JjXCI6MTk2LFwiLi9jZmJcIjoxOTcsXCIuL2NmYjFcIjoxOTgsXCIuL2NmYjhcIjoxOTksXCIuL2N0clwiOjIwMCxcIi4vZWNiXCI6MjAxLFwiLi9saXN0Lmpzb25cIjoyMDMsXCIuL29mYlwiOjIwNH1dLDIwMzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17XCJhZXMtMTI4LWVjYlwiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxcImFlcy0xOTItZWNiXCI6e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LFwiYWVzLTI1Ni1lY2JcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sXCJhZXMtMTI4LWNiY1wiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sXCJhZXMtMTkyLWNiY1wiOntjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sXCJhZXMtMjU2LWNiY1wiOntjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sYWVzMTI4OntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sYWVzMTkyOntjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sYWVzMjU2OntjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sXCJhZXMtMTI4LWNmYlwiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LFwiYWVzLTE5Mi1jZmJcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxcImFlcy0yNTYtY2ZiXCI6e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTI4LWNmYjhcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTkyLWNmYjhcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMjU2LWNmYjhcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTI4LWNmYjFcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTkyLWNmYjFcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMjU2LWNmYjFcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTI4LW9mYlwiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LFwiYWVzLTE5Mi1vZmJcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxcImFlcy0yNTYtb2ZiXCI6e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTI4LWN0clwiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LFwiYWVzLTE5Mi1jdHJcIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxcImFlcy0yNTYtY3RyXCI6e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sXCJhZXMtMTI4LWdjbVwiOntjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxcImFlcy0xOTItZ2NtXCI6e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LFwiYWVzLTI1Ni1nY21cIjp7Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19fSx7fV0sMjA0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJidWZmZXIteG9yXCIpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUuX3ByZXY9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2fXIuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsaShlKV0pO3ZhciBzPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksbihyLHMpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7YnVmZmVyOjIyMCxcImJ1ZmZlci14b3JcIjoyMTl9XSwyMDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9hZXNcIiksaT1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLHM9ZShcImNpcGhlci1iYXNlXCIpO2Z1bmN0aW9uIG8oZSx0LHIsbyl7cy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgbi5BRVModCksdGhpcy5fcHJldj1pLmZyb20ociksdGhpcy5fY2FjaGU9aS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1pLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9byx0aGlzLl9tb2RlPWV9ZShcImluaGVyaXRzXCIpKG8scyksby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsZSx0aGlzLl9kZWNyeXB0KX0sby5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHQuZXhwb3J0cz1vfSx7XCIuL2Flc1wiOjE4OSxcImNpcGhlci1iYXNlXCI6MjIxLGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMjA2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJyb3dzZXJpZnktZGVzXCIpLGk9ZShcImJyb3dzZXJpZnktYWVzL2Jyb3dzZXJcIikscz1lKFwiYnJvd3NlcmlmeS1hZXMvbW9kZXNcIiksbz1lKFwiYnJvd3NlcmlmeS1kZXMvbW9kZXNcIiksYT1lKFwiZXZwX2J5dGVzdG9rZXlcIik7ZnVuY3Rpb24gbChlLHQscil7aWYoZT1lLnRvTG93ZXJDYXNlKCksc1tlXSlyZXR1cm4gaS5jcmVhdGVDaXBoZXJpdihlLHQscik7aWYob1tlXSlyZXR1cm4gbmV3IG4oe2tleTp0LGl2OnIsbW9kZTplfSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1mdW5jdGlvbiBjKGUsdCxyKXtpZihlPWUudG9Mb3dlckNhc2UoKSxzW2VdKXJldHVybiBpLmNyZWF0ZURlY2lwaGVyaXYoZSx0LHIpO2lmKG9bZV0pcmV0dXJuIG5ldyBuKHtrZXk6dCxpdjpyLG1vZGU6ZSxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1yLmNyZWF0ZUNpcGhlcj1yLkNpcGhlcj1mdW5jdGlvbihlLHQpe3ZhciByLG47aWYoZT1lLnRvTG93ZXJDYXNlKCksc1tlXSlyPXNbZV0ua2V5LG49c1tlXS5pdjtlbHNle2lmKCFvW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7cj04Km9bZV0ua2V5LG49b1tlXS5pdn12YXIgaT1hKHQsITEscixuKTtyZXR1cm4gbChlLGkua2V5LGkuaXYpfSxyLmNyZWF0ZUNpcGhlcml2PXIuQ2lwaGVyaXY9bCxyLmNyZWF0ZURlY2lwaGVyPXIuRGVjaXBoZXI9ZnVuY3Rpb24oZSx0KXt2YXIgcixuO2lmKGU9ZS50b0xvd2VyQ2FzZSgpLHNbZV0pcj1zW2VdLmtleSxuPXNbZV0uaXY7ZWxzZXtpZighb1tlXSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3I9OCpvW2VdLmtleSxuPW9bZV0uaXZ9dmFyIGk9YSh0LCExLHIsbik7cmV0dXJuIGMoZSxpLmtleSxpLml2KX0sci5jcmVhdGVEZWNpcGhlcml2PXIuRGVjaXBoZXJpdj1jLHIubGlzdENpcGhlcnM9ci5nZXRDaXBoZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmNvbmNhdChpLmdldENpcGhlcnMoKSl9fSx7XCJicm93c2VyaWZ5LWFlcy9icm93c2VyXCI6MTkxLFwiYnJvd3NlcmlmeS1hZXMvbW9kZXNcIjoyMDIsXCJicm93c2VyaWZ5LWRlc1wiOjIwNyxcImJyb3dzZXJpZnktZGVzL21vZGVzXCI6MjA4LGV2cF9ieXRlc3Rva2V5OjQyM31dLDIwNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJjaXBoZXItYmFzZVwiKSxpPWUoXCJkZXMuanNcIikscz1lKFwiaW5oZXJpdHNcIiksbz1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLGE9e1wiZGVzLWVkZTMtY2JjXCI6aS5DQkMuaW5zdGFudGlhdGUoaS5FREUpLFwiZGVzLWVkZTNcIjppLkVERSxcImRlcy1lZGUtY2JjXCI6aS5DQkMuaW5zdGFudGlhdGUoaS5FREUpLFwiZGVzLWVkZVwiOmkuRURFLFwiZGVzLWNiY1wiOmkuQ0JDLmluc3RhbnRpYXRlKGkuREVTKSxcImRlcy1lY2JcIjppLkRFU307ZnVuY3Rpb24gbChlKXtuLmNhbGwodGhpcyk7dmFyIHQscj1lLm1vZGUudG9Mb3dlckNhc2UoKSxpPWFbcl07dD1lLmRlY3J5cHQ/XCJkZWNyeXB0XCI6XCJlbmNyeXB0XCI7dmFyIHM9ZS5rZXk7by5pc0J1ZmZlcihzKXx8KHM9by5mcm9tKHMpKSxcImRlcy1lZGVcIiE9PXImJlwiZGVzLWVkZS1jYmNcIiE9PXJ8fChzPW8uY29uY2F0KFtzLHMuc2xpY2UoMCw4KV0pKTt2YXIgbD1lLml2O28uaXNCdWZmZXIobCl8fChsPW8uZnJvbShsKSksdGhpcy5fZGVzPWkuY3JlYXRlKHtrZXk6cyxpdjpsLHR5cGU6dH0pfWEuZGVzPWFbXCJkZXMtY2JjXCJdLGEuZGVzMz1hW1wiZGVzLWVkZTMtY2JjXCJdLHQuZXhwb3J0cz1sLHMobCxuKSxsLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBvLmZyb20odGhpcy5fZGVzLnVwZGF0ZShlKSl9LGwucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBvLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0se1wiY2lwaGVyLWJhc2VcIjoyMjEsXCJkZXMuanNcIjozOTQsaW5oZXJpdHM6NDQwLFwic2FmZS1idWZmZXJcIjo0OTR9XSwyMDg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyW1wiZGVzLWVjYlwiXT17a2V5OjgsaXY6MH0scltcImRlcy1jYmNcIl09ci5kZXM9e2tleTo4LGl2Ojh9LHJbXCJkZXMtZWRlMy1jYmNcIl09ci5kZXMzPXtrZXk6MjQsaXY6OH0scltcImRlcy1lZGUzXCJdPXtrZXk6MjQsaXY6MH0scltcImRlcy1lZGUtY2JjXCJdPXtrZXk6MTYsaXY6OH0scltcImRlcy1lZGVcIl09e2tleToxNixpdjowfX0se31dLDIwOTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwicmFuZG9tYnl0ZXNcIik7ZnVuY3Rpb24gcyhlKXt2YXIgdCxyPWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97dD1uZXcgbihpKHIpKX13aGlsZSh0LmNtcChlLm1vZHVsdXMpPj0wfHwhdC51bW9kKGUucHJpbWUxKXx8IXQudW1vZChlLnByaW1lMikpO3JldHVybiB0fWZ1bmN0aW9uIG8oZSx0KXt2YXIgaT1mdW5jdGlvbihlKXt2YXIgdD1zKGUpO3JldHVybntibGluZGVyOnQudG9SZWQobi5tb250KGUubW9kdWx1cykpLnJlZFBvdyhuZXcgbihlLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjp0Lmludm0oZS5tb2R1bHVzKX19KHQpLG89dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxhPW5ldyBuKGUpLm11bChpLmJsaW5kZXIpLnVtb2QodC5tb2R1bHVzKSxsPWEudG9SZWQobi5tb250KHQucHJpbWUxKSksYz1hLnRvUmVkKG4ubW9udCh0LnByaW1lMikpLHU9dC5jb2VmZmljaWVudCxoPXQucHJpbWUxLGY9dC5wcmltZTIsZD1sLnJlZFBvdyh0LmV4cG9uZW50MSkuZnJvbVJlZCgpLHA9Yy5yZWRQb3codC5leHBvbmVudDIpLmZyb21SZWQoKSxtPWQuaXN1YihwKS5pbXVsKHUpLnVtb2QoaCkuaW11bChmKTtyZXR1cm4gcC5pYWRkKG0pLmltdWwoaS51bmJsaW5kZXIpLnVtb2QodC5tb2R1bHVzKS50b0FycmF5TGlrZShyLFwiYmVcIixvKX1vLmdldHI9cyx0LmV4cG9ydHM9b30pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCJibi5qc1wiOjE4NixidWZmZXI6MjIwLHJhbmRvbWJ5dGVzOjQ3NX1dLDIxMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lKFwiLi9icm93c2VyL2FsZ29yaXRobXMuanNvblwiKX0se1wiLi9icm93c2VyL2FsZ29yaXRobXMuanNvblwiOjIxMX1dLDIxMTpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17c2hhMjI0V2l0aFJTQUVuY3J5cHRpb246e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6XCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wifSxcIlJTQS1TSEEyMjRcIjp7c2lnbjpcImVjZHNhL3JzYVwiLGhhc2g6XCJzaGEyMjRcIixpZDpcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCJ9LHNoYTI1NldpdGhSU0FFbmNyeXB0aW9uOntzaWduOlwicnNhXCIsaGFzaDpcInNoYTI1NlwiLGlkOlwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIn0sXCJSU0EtU0hBMjU2XCI6e3NpZ246XCJlY2RzYS9yc2FcIixoYXNoOlwic2hhMjU2XCIsaWQ6XCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwifSxzaGEzODRXaXRoUlNBRW5jcnlwdGlvbjp7c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCJ9LFwiUlNBLVNIQTM4NFwiOntzaWduOlwiZWNkc2EvcnNhXCIsaGFzaDpcInNoYTM4NFwiLGlkOlwiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzBcIn0sc2hhNTEyV2l0aFJTQUVuY3J5cHRpb246e3NpZ246XCJyc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6XCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwifSxcIlJTQS1TSEE1MTJcIjp7c2lnbjpcImVjZHNhL3JzYVwiLGhhc2g6XCJzaGE1MTJcIixpZDpcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCJ9LFwiUlNBLVNIQTFcIjp7c2lnbjpcInJzYVwiLGhhc2g6XCJzaGExXCIsaWQ6XCIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTRcIn0sXCJlY2RzYS13aXRoLVNIQTFcIjp7c2lnbjpcImVjZHNhXCIsaGFzaDpcInNoYTFcIixpZDpcIlwifSxzaGEyNTY6e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpcIlwifSxzaGEyMjQ6e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGEyMjRcIixpZDpcIlwifSxzaGEzODQ6e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpcIlwifSxzaGE1MTI6e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGE1MTJcIixpZDpcIlwifSxcIkRTQS1TSEFcIjp7c2lnbjpcImRzYVwiLGhhc2g6XCJzaGExXCIsaWQ6XCJcIn0sXCJEU0EtU0hBMVwiOntzaWduOlwiZHNhXCIsaGFzaDpcInNoYTFcIixpZDpcIlwifSxEU0E6e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMVwiLGlkOlwiXCJ9LFwiRFNBLVdJVEgtU0hBMjI0XCI6e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6XCJcIn0sXCJEU0EtU0hBMjI0XCI6e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6XCJcIn0sXCJEU0EtV0lUSC1TSEEyNTZcIjp7c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpcIlwifSxcIkRTQS1TSEEyNTZcIjp7c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpcIlwifSxcIkRTQS1XSVRILVNIQTM4NFwiOntzaWduOlwiZHNhXCIsaGFzaDpcInNoYTM4NFwiLGlkOlwiXCJ9LFwiRFNBLVNIQTM4NFwiOntzaWduOlwiZHNhXCIsaGFzaDpcInNoYTM4NFwiLGlkOlwiXCJ9LFwiRFNBLVdJVEgtU0hBNTEyXCI6e3NpZ246XCJkc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6XCJcIn0sXCJEU0EtU0hBNTEyXCI6e3NpZ246XCJkc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6XCJcIn0sXCJEU0EtUklQRU1EMTYwXCI6e3NpZ246XCJkc2FcIixoYXNoOlwicm1kMTYwXCIsaWQ6XCJcIn0scmlwZW1kMTYwV2l0aFJTQTp7c2lnbjpcInJzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwifSxcIlJTQS1SSVBFTUQxNjBcIjp7c2lnbjpcInJzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwifSxtZDVXaXRoUlNBRW5jcnlwdGlvbjp7c2lnbjpcInJzYVwiLGhhc2g6XCJtZDVcIixpZDpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwifSxcIlJTQS1NRDVcIjp7c2lnbjpcInJzYVwiLGhhc2g6XCJtZDVcIixpZDpcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwifX19LHt9XSwyMTI6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e1wiMS4zLjEzMi4wLjEwXCI6XCJzZWNwMjU2azFcIixcIjEuMy4xMzIuMC4zM1wiOlwicDIyNFwiLFwiMS4yLjg0MC4xMDA0NS4zLjEuMVwiOlwicDE5MlwiLFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiOlwicDI1NlwiLFwiMS4zLjEzMi4wLjM0XCI6XCJwMzg0XCIsXCIxLjMuMTMyLjAuMzVcIjpcInA1MjFcIn19LHt9XSwyMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLGk9ZShcImNyZWF0ZS1oYXNoXCIpLHM9ZShcInJlYWRhYmxlLXN0cmVhbVwiKSxvPWUoXCJpbmhlcml0c1wiKSxhPWUoXCIuL3NpZ25cIiksbD1lKFwiLi92ZXJpZnlcIiksYz1lKFwiLi9hbGdvcml0aG1zLmpzb25cIik7ZnVuY3Rpb24gdShlKXtzLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIHQ9Y1tlXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2hUeXBlPXQuaGFzaCx0aGlzLl9oYXNoPWkodC5oYXNoKSx0aGlzLl90YWc9dC5pZCx0aGlzLl9zaWduVHlwZT10LnNpZ259ZnVuY3Rpb24gaChlKXtzLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIHQ9Y1tlXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2g9aSh0Lmhhc2gpLHRoaXMuX3RhZz10LmlkLHRoaXMuX3NpZ25UeXBlPXQuc2lnbn1mdW5jdGlvbiBmKGUpe3JldHVybiBuZXcgdShlKX1mdW5jdGlvbiBkKGUpe3JldHVybiBuZXcgaChlKX1PYmplY3Qua2V5cyhjKS5mb3JFYWNoKChmdW5jdGlvbihlKXtjW2VdLmlkPW4uZnJvbShjW2VdLmlkLFwiaGV4XCIpLGNbZS50b0xvd2VyQ2FzZSgpXT1jW2VdfSkpLG8odSxzLldyaXRhYmxlKSx1LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2hhc2gudXBkYXRlKGUpLHIoKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPW4uZnJvbShlLHQpKSx0aGlzLl9oYXNoLnVwZGF0ZShlKSx0aGlzfSx1LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGUsdCl7dGhpcy5lbmQoKTt2YXIgcj10aGlzLl9oYXNoLmRpZ2VzdCgpLG49YShyLGUsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKTtyZXR1cm4gdD9uLnRvU3RyaW5nKHQpOm59LG8oaCxzLldyaXRhYmxlKSxoLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3RoaXMuX2hhc2gudXBkYXRlKGUpLHIoKX0saC5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPW4uZnJvbShlLHQpKSx0aGlzLl9oYXNoLnVwZGF0ZShlKSx0aGlzfSxoLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0LHIpe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uLmZyb20odCxyKSksdGhpcy5lbmQoKTt2YXIgaT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBsKHQsaSxlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LHQuZXhwb3J0cz17U2lnbjpmLFZlcmlmeTpkLGNyZWF0ZVNpZ246ZixjcmVhdGVWZXJpZnk6ZH19LHtcIi4vYWxnb3JpdGhtcy5qc29uXCI6MjExLFwiLi9zaWduXCI6MjE0LFwiLi92ZXJpZnlcIjoyMTUsXCJjcmVhdGUtaGFzaFwiOjM4Nixpbmhlcml0czo0NDAsXCJyZWFkYWJsZS1zdHJlYW1cIjo0OTEsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDIxNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsaT1lKFwiY3JlYXRlLWhtYWNcIikscz1lKFwiYnJvd3NlcmlmeS1yc2FcIiksbz1lKFwiZWxsaXB0aWNcIikuZWMsYT1lKFwiYm4uanNcIiksbD1lKFwicGFyc2UtYXNuMVwiKSxjPWUoXCIuL2N1cnZlcy5qc29uXCIpO2Z1bmN0aW9uIHUoZSx0LHIscyl7aWYoKGU9bi5mcm9tKGUudG9BcnJheSgpKSkubGVuZ3RoPHQuYnl0ZUxlbmd0aCgpKXt2YXIgbz1uLmFsbG9jKHQuYnl0ZUxlbmd0aCgpLWUubGVuZ3RoKTtlPW4uY29uY2F0KFtvLGVdKX12YXIgYT1yLmxlbmd0aCxsPWZ1bmN0aW9uKGUsdCl7ZT0oZT1oKGUsdCkpLm1vZCh0KTt2YXIgcj1uLmZyb20oZS50b0FycmF5KCkpO2lmKHIubGVuZ3RoPHQuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uLmFsbG9jKHQuYnl0ZUxlbmd0aCgpLXIubGVuZ3RoKTtyPW4uY29uY2F0KFtpLHJdKX1yZXR1cm4gcn0ocix0KSxjPW4uYWxsb2MoYSk7Yy5maWxsKDEpO3ZhciB1PW4uYWxsb2MoYSk7cmV0dXJuIHU9aShzLHUpLnVwZGF0ZShjKS51cGRhdGUobi5mcm9tKFswXSkpLnVwZGF0ZShlKS51cGRhdGUobCkuZGlnZXN0KCksYz1pKHMsdSkudXBkYXRlKGMpLmRpZ2VzdCgpLHtrOnU9aShzLHUpLnVwZGF0ZShjKS51cGRhdGUobi5mcm9tKFsxXSkpLnVwZGF0ZShlKS51cGRhdGUobCkuZGlnZXN0KCksdjpjPWkocyx1KS51cGRhdGUoYykuZGlnZXN0KCl9fWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj1uZXcgYShlKSxuPShlLmxlbmd0aDw8MyktdC5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gZihlLHQscil7dmFyIHMsbztkb3tmb3Iocz1uLmFsbG9jKDApOzgqcy5sZW5ndGg8ZS5iaXRMZW5ndGgoKTspdC52PWkocix0LmspLnVwZGF0ZSh0LnYpLmRpZ2VzdCgpLHM9bi5jb25jYXQoW3MsdC52XSk7bz1oKHMsZSksdC5rPWkocix0LmspLnVwZGF0ZSh0LnYpLnVwZGF0ZShuLmZyb20oWzBdKSkuZGlnZXN0KCksdC52PWkocix0LmspLnVwZGF0ZSh0LnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09by5jbXAoZSkpO3JldHVybiBvfWZ1bmN0aW9uIGQoZSx0LHIsbil7cmV0dXJuIGUudG9SZWQoYS5tb250KHIpKS5yZWRQb3codCkuZnJvbVJlZCgpLm1vZChuKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSxwKXt2YXIgbT1sKHQpO2lmKG0uY3VydmUpe2lmKFwiZWNkc2FcIiE9PWkmJlwiZWNkc2EvcnNhXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9Y1t0LmN1cnZlLmpvaW4oXCIuXCIpXTtpZighcil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGN1cnZlIFwiK3QuY3VydmUuam9pbihcIi5cIikpO3ZhciBpPW5ldyBvKHIpLmtleUZyb21Qcml2YXRlKHQucHJpdmF0ZUtleSkuc2lnbihlKTtyZXR1cm4gbi5mcm9tKGkudG9ERVIoKSl9KGUsbSl9aWYoXCJkc2FcIj09PW0udHlwZSl7aWYoXCJkc2FcIiE9PWkpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBpLHM9dC5wYXJhbXMucHJpdl9rZXksbz10LnBhcmFtcy5wLGw9dC5wYXJhbXMucSxjPXQucGFyYW1zLmcscD1uZXcgYSgwKSxtPWgoZSxsKS5tb2QobCksYj0hMSxnPXUocyxsLGUscik7Zm9yKDshMT09PWI7KWk9ZihsLGcscikscD1kKGMsaSxvLGwpLDA9PT0oYj1pLmludm0obCkuaW11bChtLmFkZChzLm11bChwKSkpLm1vZChsKSkuY21wbigwKSYmKGI9ITEscD1uZXcgYSgwKSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7ZT1lLnRvQXJyYXkoKSx0PXQudG9BcnJheSgpLDEyOCZlWzBdJiYoZT1bMF0uY29uY2F0KGUpKTsxMjgmdFswXSYmKHQ9WzBdLmNvbmNhdCh0KSk7dmFyIHI9WzQ4LGUubGVuZ3RoK3QubGVuZ3RoKzQsMixlLmxlbmd0aF07cmV0dXJuIHI9ci5jb25jYXQoZSxbMix0Lmxlbmd0aF0sdCksbi5mcm9tKHIpfShwLGIpfShlLG0scil9aWYoXCJyc2FcIiE9PWkmJlwiZWNkc2EvcnNhXCIhPT1pKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7ZT1uLmNvbmNhdChbcCxlXSk7Zm9yKHZhciBiPW0ubW9kdWx1cy5ieXRlTGVuZ3RoKCksZz1bMCwxXTtlLmxlbmd0aCtnLmxlbmd0aCsxPGI7KWcucHVzaCgyNTUpO2cucHVzaCgwKTtmb3IodmFyIHk9LTE7Kyt5PGUubGVuZ3RoOylnLnB1c2goZVt5XSk7cmV0dXJuIHMoZyxtKX0sdC5leHBvcnRzLmdldEtleT11LHQuZXhwb3J0cy5tYWtlS2V5PWZ9LHtcIi4vY3VydmVzLmpzb25cIjoyMTIsXCJibi5qc1wiOjE4NixcImJyb3dzZXJpZnktcnNhXCI6MjA5LFwiY3JlYXRlLWhtYWNcIjozODgsZWxsaXB0aWM6NDA1LFwicGFyc2UtYXNuMVwiOjQ1OSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMjE1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixpPWUoXCJibi5qc1wiKSxzPWUoXCJlbGxpcHRpY1wiKS5lYyxvPWUoXCJwYXJzZS1hc24xXCIpLGE9ZShcIi4vY3VydmVzLmpzb25cIik7ZnVuY3Rpb24gbChlLHQpe2lmKGUuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKTtpZihlLmNtcCh0KT49dCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYyx1KXt2YXIgaD1vKHIpO2lmKFwiZWNcIj09PWgudHlwZSl7aWYoXCJlY2RzYVwiIT09YyYmXCJlY2RzYS9yc2FcIiE9PWMpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49YVtyLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oXCIuXCIpXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGN1cnZlIFwiK3IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbihcIi5cIikpO3ZhciBpPW5ldyBzKG4pLG89ci5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7cmV0dXJuIGkudmVyaWZ5KHQsZSxvKX0oZSx0LGgpfWlmKFwiZHNhXCI9PT1oLnR5cGUpe2lmKFwiZHNhXCIhPT1jKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIuZGF0YS5wLHM9ci5kYXRhLnEsYT1yLmRhdGEuZyxjPXIuZGF0YS5wdWJfa2V5LHU9by5zaWduYXR1cmUuZGVjb2RlKGUsXCJkZXJcIiksaD11LnMsZj11LnI7bChoLHMpLGwoZixzKTt2YXIgZD1pLm1vbnQobikscD1oLmludm0ocyk7cmV0dXJuIDA9PT1hLnRvUmVkKGQpLnJlZFBvdyhuZXcgaSh0KS5tdWwocCkubW9kKHMpKS5mcm9tUmVkKCkubXVsKGMudG9SZWQoZCkucmVkUG93KGYubXVsKHApLm1vZChzKSkuZnJvbVJlZCgpKS5tb2QobikubW9kKHMpLmNtcChmKX0oZSx0LGgpfWlmKFwicnNhXCIhPT1jJiZcImVjZHNhL3JzYVwiIT09Yyl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7dD1uLmNvbmNhdChbdSx0XSk7Zm9yKHZhciBmPWgubW9kdWx1cy5ieXRlTGVuZ3RoKCksZD1bMV0scD0wO3QubGVuZ3RoK2QubGVuZ3RoKzI8ZjspZC5wdXNoKDI1NSkscCsrO2QucHVzaCgwKTtmb3IodmFyIG09LTE7KyttPHQubGVuZ3RoOylkLnB1c2godFttXSk7ZD1uLmZyb20oZCk7dmFyIGI9aS5tb250KGgubW9kdWx1cyk7ZT0oZT1uZXcgaShlKS50b1JlZChiKSkucmVkUG93KG5ldyBpKGgucHVibGljRXhwb25lbnQpKSxlPW4uZnJvbShlLmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBnPXA8OD8xOjA7Zm9yKGY9TWF0aC5taW4oZS5sZW5ndGgsZC5sZW5ndGgpLGUubGVuZ3RoIT09ZC5sZW5ndGgmJihnPTEpLG09LTE7KyttPGY7KWd8PWVbbV1eZFttXTtyZXR1cm4gMD09PWd9fSx7XCIuL2N1cnZlcy5qc29uXCI6MjEyLFwiYm4uanNcIjoxODYsZWxsaXB0aWM6NDA1LFwicGFyc2UtYXNuMVwiOjQ1OSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMjE2OltmdW5jdGlvbihlLHQscil7fSx7fV0sMjE3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJ1ZmZlclwiKSxpPW4uQnVmZmVyO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIGkoZSx0LHIpfWkuZnJvbSYmaS5hbGxvYyYmaS5hbGxvY1Vuc2FmZSYmaS5hbGxvY1Vuc2FmZVNsb3c/dC5leHBvcnRzPW46KHMobixyKSxyLkJ1ZmZlcj1vKSxzKGksbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGkoZSx0LHIpfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgbj1pKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiByP24uZmlsbCh0LHIpOm4uZmlsbCh0KTpuLmZpbGwoMCksbn0sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gaShlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19LHtidWZmZXI6MjIwfV0sMjE4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixpPW4uaXNFbmNvZGluZ3x8ZnVuY3Rpb24oZSl7c3dpdGNoKChlPVwiXCIrZSkmJmUudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07ZnVuY3Rpb24gcyhlKXt2YXIgdDtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm5cInV0ZjhcIjtmb3IodmFyIHQ7Oylzd2l0Y2goZSl7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuXCJ1dGY4XCI7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuXCJ1dGYxNmxlXCI7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuXCJsYXRpbjFcIjtjYXNlXCJiYXNlNjRcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImhleFwiOnJldHVybiBlO2RlZmF1bHQ6aWYodClyZXR1cm47ZT0oXCJcIitlKS50b0xvd2VyQ2FzZSgpLHQ9ITB9fShlKTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCYmKG4uaXNFbmNvZGluZz09PWl8fCFpKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIitlKTtyZXR1cm4gdHx8ZX0oZSksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmMTZsZVwiOnRoaXMudGV4dD1sLHRoaXMuZW5kPWMsdD00O2JyZWFrO2Nhc2VcInV0ZjhcIjp0aGlzLmZpbGxMYXN0PWEsdD00O2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMudGV4dD11LHRoaXMuZW5kPWgsdD0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9Zix2b2lkKHRoaXMuZW5kPWQpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9bi5hbGxvY1Vuc2FmZSh0KX1mdW5jdGlvbiBvKGUpe3JldHVybiBlPD0xMjc/MDplPj41PT02PzI6ZT4+ND09MTQ/MzplPj4zPT0zMD80OmU+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gYShlKXt2YXIgdD10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHI9ZnVuY3Rpb24oZSx0LHIpe2lmKDEyOCE9KDE5MiZ0WzBdKSlyZXR1cm4gZS5sYXN0TmVlZD0wLFwiXFx1ZmZmZFwiO2lmKGUubGFzdE5lZWQ+MSYmdC5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnRbMV0pKXJldHVybiBlLmxhc3ROZWVkPTEsXCJcXHVmZmZkXCI7aWYoZS5sYXN0TmVlZD4yJiZ0Lmxlbmd0aD4yJiYxMjghPSgxOTImdFsyXSkpcmV0dXJuIGUubGFzdE5lZWQ9MixcIlxcdWZmZmRcIn19KHRoaXMsZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0aGlzLmxhc3ROZWVkPD1lLmxlbmd0aD8oZS5jb3B5KHRoaXMubGFzdENoYXIsdCwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KGUuY29weSh0aGlzLmxhc3RDaGFyLHQsMCxlLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1lLmxlbmd0aCkpfWZ1bmN0aW9uIGwoZSx0KXtpZigoZS5sZW5ndGgtdCklMj09MCl7dmFyIHI9ZS50b1N0cmluZyhcInV0ZjE2bGVcIix0KTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09ZVtlLmxlbmd0aC0xXSxlLnRvU3RyaW5nKFwidXRmMTZsZVwiLHQsZS5sZW5ndGgtMSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7aWYodGhpcy5sYXN0TmVlZCl7dmFyIHI9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZDtyZXR1cm4gdCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwidXRmMTZsZVwiLDAscil9cmV0dXJuIHR9ZnVuY3Rpb24gdShlLHQpe3ZhciByPShlLmxlbmd0aC10KSUzO3JldHVybiAwPT09cj9lLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCk6KHRoaXMubGFzdE5lZWQ9My1yLHRoaXMubGFzdFRvdGFsPTMsMT09PXI/dGhpcy5sYXN0Q2hhclswXT1lW2UubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPWVbZS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1lW2UubGVuZ3RoLTFdKSxlLnRvU3RyaW5nKFwiYmFzZTY0XCIsdCxlLmxlbmd0aC1yKSl9ZnVuY3Rpb24gaChlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKFwiYmFzZTY0XCIsMCwzLXRoaXMubGFzdE5lZWQpOnR9ZnVuY3Rpb24gZihlKXtyZXR1cm4gZS50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCJ9ci5TdHJpbmdEZWNvZGVyPXMscy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVyblwiXCI7dmFyIHQscjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0odD10aGlzLmZpbGxMYXN0KGUpKSlyZXR1cm5cIlwiO3I9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSByPTA7cmV0dXJuIHI8ZS5sZW5ndGg/dD90K3RoaXMudGV4dChlLHIpOnRoaXMudGV4dChlLHIpOnR8fFwiXCJ9LHMucHJvdG90eXBlLmVuZD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLmxlbmd0aD90aGlzLndyaXRlKGUpOlwiXCI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/dCtcIlxcdWZmZmRcIjp0fSxzLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPW8odFtuXSk7aWYoaT49MClyZXR1cm4gaT4wJiYoZS5sYXN0TmVlZD1pLTEpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKHRbbl0pKT49MClyZXR1cm4gaT4wJiYoZS5sYXN0TmVlZD1pLTIpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKHRbbl0pKT49MClyZXR1cm4gaT4wJiYoMj09PWk/aT0wOmUubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLGUsdCk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIGUudG9TdHJpbmcoXCJ1dGY4XCIsdCk7dGhpcy5sYXN0VG90YWw9cjt2YXIgbj1lLmxlbmd0aC0oci10aGlzLmxhc3ROZWVkKTtyZXR1cm4gZS5jb3B5KHRoaXMubGFzdENoYXIsMCxuKSxlLnRvU3RyaW5nKFwidXRmOFwiLHQsbil9LHMucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKGUpe2lmKHRoaXMubGFzdE5lZWQ8PWUubGVuZ3RoKXJldHVybiBlLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO2UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxlLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09ZS5sZW5ndGh9fSx7XCJzYWZlLWJ1ZmZlclwiOjIxN31dLDIxOTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobikscz0wO3M8bjsrK3MpaVtzXT10W3NdXnJbc107cmV0dXJuIGl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtidWZmZXI6MjIwfV0sMjIwOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe1xuLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG5cInVzZSBzdHJpY3RcIjt2YXIgdD1lKFwiYmFzZTY0LWpzXCIpLG49ZShcImllZWU3NTRcIik7ci5CdWZmZXI9cyxyLlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7K2UhPWUmJihlPTApO3JldHVybiBzLmFsbG9jKCtlKX0sci5JTlNQRUNUX01BWF9CWVRFUz01MDtmdW5jdGlvbiBpKGUpe2lmKGU+MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTt2YXIgdD1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gdC5fX3Byb3RvX189cy5wcm90b3R5cGUsdH1mdW5jdGlvbiBzKGUsdCxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbChlKX1yZXR1cm4gbyhlLHQscil9ZnVuY3Rpb24gbyhlLHQscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7XCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10fHwodD1cInV0ZjhcIik7aWYoIXMuaXNFbmNvZGluZyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7dmFyIHI9MHxoKGUsdCksbj1pKHIpLG89bi53cml0ZShlLHQpO28hPT1yJiYobj1uLnNsaWNlKDAsbykpO3JldHVybiBufShlLHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhlKSlyZXR1cm4gYyhlKTtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKTtpZihGKGUsQXJyYXlCdWZmZXIpfHxlJiZGKGUuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe2lmKHQ8MHx8ZS5ieXRlTGVuZ3RoPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoZS5ieXRlTGVuZ3RoPHQrKHJ8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO3ZhciBuO249dm9pZCAwPT09dCYmdm9pZCAwPT09cj9uZXcgVWludDhBcnJheShlKTp2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KGUsdCk6bmV3IFVpbnQ4QXJyYXkoZSx0LHIpO3JldHVybiBuLl9fcHJvdG9fXz1zLnByb3RvdHlwZSxufShlLHQscik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbj1lLnZhbHVlT2YmJmUudmFsdWVPZigpO2lmKG51bGwhPW4mJm4hPT1lKXJldHVybiBzLmZyb20obix0LHIpO3ZhciBvPWZ1bmN0aW9uKGUpe2lmKHMuaXNCdWZmZXIoZSkpe3ZhciB0PTB8dShlLmxlbmd0aCkscj1pKHQpO3JldHVybiAwPT09ci5sZW5ndGh8fGUuY29weShyLDAsMCx0KSxyfWlmKHZvaWQgMCE9PWUubGVuZ3RoKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlLmxlbmd0aHx8TChlLmxlbmd0aCk/aSgwKTpjKGUpO2lmKFwiQnVmZmVyXCI9PT1lLnR5cGUmJkFycmF5LmlzQXJyYXkoZS5kYXRhKSlyZXR1cm4gYyhlLmRhdGEpfShlKTtpZihvKXJldHVybiBvO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBzLmZyb20oZVtTeW1ib2wudG9QcmltaXRpdmVdKFwic3RyaW5nXCIpLHQscik7dGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKX1mdW5jdGlvbiBhKGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gYShlKSxpKGU8MD8wOjB8dShlKSl9ZnVuY3Rpb24gYyhlKXtmb3IodmFyIHQ9ZS5sZW5ndGg8MD8wOjB8dShlLmxlbmd0aCkscj1pKHQpLG49MDtuPHQ7bis9MSlyW25dPTI1NSZlW25dO3JldHVybiByfWZ1bmN0aW9uIHUoZSl7aWYoZT49MjE0NzQ4MzY0Nyl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIisyMTQ3NDgzNjQ3Li50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8ZX1mdW5jdGlvbiBoKGUsdCl7aWYocy5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxGKGUsQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7dmFyIHI9ZS5sZW5ndGgsbj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFuJiYwPT09cilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2godCl7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gcjtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gUChlKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqcjtjYXNlXCJoZXhcIjpyZXR1cm4gcj4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEIoZSkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gbj8tMTpQKGUpLmxlbmd0aDt0PShcIlwiK3QpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gZihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtpZigodm9pZCAwPT09cnx8cj50aGlzLmxlbmd0aCkmJihyPXRoaXMubGVuZ3RoKSxyPD0wKXJldHVyblwiXCI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVyblwiXCI7Zm9yKGV8fChlPVwidXRmOFwiKTs7KXN3aXRjaChlKXtjYXNlXCJoZXhcIjpyZXR1cm4gQyh0aGlzLHQscik7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIGsodGhpcyx0LHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIFModGhpcyx0LHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBNKHRoaXMsdCxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIFQodGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZSk7ZT0oZStcIlwiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGQoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBwKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxMKHI9K3IpJiYocj1pPzA6ZS5sZW5ndGgtMSkscjwwJiYocj1lLmxlbmd0aCtyKSxyPj1lLmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPWUubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9cy5mcm9tKHQsbikpLHMuaXNCdWZmZXIodCkpcmV0dXJuIDA9PT10Lmxlbmd0aD8tMTptKGUsdCxyLG4saSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTptKGUsW3RdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIG0oZSx0LHIsbixpKXt2YXIgcyxvPTEsYT1lLmxlbmd0aCxsPXQubGVuZ3RoO2lmKHZvaWQgMCE9PW4mJihcInVjczJcIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8XCJ1Y3MtMlwiPT09bnx8XCJ1dGYxNmxlXCI9PT1ufHxcInV0Zi0xNmxlXCI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTtvPTIsYS89MixsLz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09bz9lW3RdOmUucmVhZFVJbnQxNkJFKHQqbyl9aWYoaSl7dmFyIHU9LTE7Zm9yKHM9cjtzPGE7cysrKWlmKGMoZSxzKT09PWModCwtMT09PXU/MDpzLXUpKXtpZigtMT09PXUmJih1PXMpLHMtdSsxPT09bClyZXR1cm4gdSpvfWVsc2UtMSE9PXUmJihzLT1zLXUpLHU9LTF9ZWxzZSBmb3IocitsPmEmJihyPWEtbCkscz1yO3M+PTA7cy0tKXtmb3IodmFyIGg9ITAsZj0wO2Y8bDtmKyspaWYoYyhlLHMrZikhPT1jKHQsZikpe2g9ITE7YnJlYWt9aWYoaClyZXR1cm4gc31yZXR1cm4tMX1mdW5jdGlvbiBiKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgcz10Lmxlbmd0aDtuPnMvMiYmKG49cy8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgYT1wYXJzZUludCh0LnN1YnN0cigyKm8sMiksMTYpO2lmKEwoYSkpcmV0dXJuIG87ZVtyK29dPWF9cmV0dXJuIG99ZnVuY3Rpb24gZyhlLHQscixuKXtyZXR1cm4gRChQKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIHkoZSx0LHIsbil7cmV0dXJuIEQoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiB2KGUsdCxyLG4pe3JldHVybiB5KGUsdCxyLG4pfWZ1bmN0aW9uIHcoZSx0LHIsbil7cmV0dXJuIEQoQih0KSxlLHIsbil9ZnVuY3Rpb24gXyhlLHQscixuKXtyZXR1cm4gRChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGkscz1bXSxvPTA7bzxlLmxlbmd0aCYmISgodC09Mik8MCk7KytvKXI9ZS5jaGFyQ29kZUF0KG8pLG49cj4+OCxpPXIlMjU2LHMucHVzaChpKSxzLnB1c2gobik7cmV0dXJuIHN9KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIHgoZSxyLG4pe3JldHVybiAwPT09ciYmbj09PWUubGVuZ3RoP3QuZnJvbUJ5dGVBcnJheShlKTp0LmZyb21CeXRlQXJyYXkoZS5zbGljZShyLG4pKX1mdW5jdGlvbiBrKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIHMsbyxhLGwsYz1lW2ldLHU9bnVsbCxoPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStoPD1yKXN3aXRjaChoKXtjYXNlIDE6YzwxMjgmJih1PWMpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKHM9ZVtpKzFdKSkmJihsPSgzMSZjKTw8Nnw2MyZzKT4xMjcmJih1PWwpO2JyZWFrO2Nhc2UgMzpzPWVbaSsxXSxvPWVbaSsyXSwxMjg9PSgxOTImcykmJjEyOD09KDE5MiZvKSYmKGw9KDE1JmMpPDwxMnwoNjMmcyk8PDZ8NjMmbyk+MjA0NyYmKGw8NTUyOTZ8fGw+NTczNDMpJiYodT1sKTticmVhaztjYXNlIDQ6cz1lW2krMV0sbz1lW2krMl0sYT1lW2krM10sMTI4PT0oMTkyJnMpJiYxMjg9PSgxOTImbykmJjEyOD09KDE5MiZhKSYmKGw9KDE1JmMpPDwxOHwoNjMmcyk8PDEyfCg2MyZvKTw8Nnw2MyZhKT42NTUzNSYmbDwxMTE0MTEyJiYodT1sKX1udWxsPT09dT8odT02NTUzMyxoPTEpOnU+NjU1MzUmJih1LT02NTUzNixuLnB1c2godT4+PjEwJjEwMjN8NTUyOTYpLHU9NTYzMjB8MTAyMyZ1KSxuLnB1c2godSksaSs9aH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9NDA5NilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9XCJcIixuPTA7Zm9yKDtuPHQ7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD0yMTQ3NDgzNjQ3LHMuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZS5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PWUuZm9vKCl9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHMuVFlQRURfQVJSQVlfU1VQUE9SVHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGNvbnNvbGV8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGNvbnNvbGUuZXJyb3J8fGNvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC5cIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwicGFyZW50XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHMucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYocy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZzW1N5bWJvbC5zcGVjaWVzXT09PXMmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSkscy5wb29sU2l6ZT04MTkyLHMuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIG8oZSx0LHIpfSxzLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUscy5fX3Byb3RvX189VWludDhBcnJheSxzLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3JldHVybiBhKGUpLGU8PTA/aShlKTp2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiByP2koZSkuZmlsbCh0LHIpOmkoZSkuZmlsbCh0KTppKGUpfShlLHQscil9LHMuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSl9LHMuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsKGUpfSxzLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYhMD09PWUuX2lzQnVmZmVyJiZlIT09cy5wcm90b3R5cGV9LHMuY29tcGFyZT1mdW5jdGlvbihlLHQpe2lmKEYoZSxVaW50OEFycmF5KSYmKGU9cy5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksRih0LFVpbnQ4QXJyYXkpJiYodD1zLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihlKXx8IXMuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHMuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHMuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBzLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49cy5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIG89ZVtyXTtpZihGKG8sVWludDhBcnJheSkmJihvPXMuZnJvbShvKSksIXMuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7by5jb3B5KG4saSksaSs9by5sZW5ndGh9cmV0dXJuIG59LHMuYnl0ZUxlbmd0aD1oLHMucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxzLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIHQ9MDt0PGU7dCs9MilkKHRoaXMsdCx0KzEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClkKHRoaXMsdCx0KzMpLGQodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHNcIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpZCh0aGlzLHQsdCs3KSxkKHRoaXMsdCsxLHQrNiksZCh0aGlzLHQrMix0KzUpLGQodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30scy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9rKHRoaXMsMCxlKTpmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9cy5wcm90b3R5cGUudG9TdHJpbmcscy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXMuY29tcGFyZSh0aGlzLGUpfSxzLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGU9XCJcIix0PXIuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIGU9dGhpcy50b1N0cmluZyhcImhleFwiLDAsdCkucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpLHRoaXMubGVuZ3RoPnQmJihlKz1cIiAuLi4gXCIpLFwiPEJ1ZmZlciBcIitlK1wiPlwifSxzLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoRihlLFVpbnQ4QXJyYXkpJiYoZT1zLmZyb20oZSxlLm9mZnNldCxlLmJ5dGVMZW5ndGgpKSwhcy5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ0YXJnZXRcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIGUpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09aSYmKGk9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxpPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLSh0Pj4+PTApLGw9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSx1PWUuc2xpY2UodCxyKSxoPTA7aDxsOysraClpZihjW2hdIT09dVtoXSl7bz1jW2hdLGE9dVtoXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHMucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LHMucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBwKHRoaXMsZSx0LHIsITApfSxzLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHAodGhpcyxlLHQsciwhMSl9LHMucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHZvaWQgMD09PXQpbj1cInV0ZjhcIixyPXRoaXMubGVuZ3RoLHQ9MDtlbHNlIGlmKHZvaWQgMD09PXImJlwic3RyaW5nXCI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZFwiKTt0Pj4+PTAsaXNGaW5pdGUocik/KHI+Pj49MCx2b2lkIDA9PT1uJiYobj1cInV0ZjhcIikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLXQ7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLGUubGVuZ3RoPjAmJihyPDB8fHQ8MCl8fHQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtufHwobj1cInV0ZjhcIik7Zm9yKHZhciBzPSExOzspc3dpdGNoKG4pe2Nhc2VcImhleFwiOnJldHVybiBiKHRoaXMsZSx0LHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBnKHRoaXMsZSx0LHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIHkodGhpcyxlLHQscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIHYodGhpcyxlLHQscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHcodGhpcyxlLHQscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIF8odGhpcyxlLHQscik7ZGVmYXVsdDppZihzKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIituKTtuPShcIlwiK24pLnRvTG93ZXJDYXNlKCkscz0hMH19LHMucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtmdW5jdGlvbiBTKGUsdCxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBNKGUsdCxyKXt2YXIgbj1cIlwiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBpPXQ7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbaV0pO3JldHVybiBufWZ1bmN0aW9uIEMoZSx0LHIpe3ZhciBuPWUubGVuZ3RoOyghdHx8dDwwKSYmKHQ9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT1cIlwiLHM9dDtzPHI7KytzKWkrPU4oZVtzXSk7cmV0dXJuIGl9ZnVuY3Rpb24gVChlLHQscil7Zm9yKHZhciBuPWUuc2xpY2UodCxyKSxpPVwiXCIscz0wO3M8bi5sZW5ndGg7cys9MilpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bc10rMjU2Km5bcysxXSk7cmV0dXJuIGl9ZnVuY3Rpb24gRShlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYoZSt0PnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIEEoZSx0LHIsbixpLG8pe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+aXx8dDxvKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBSKGUsdCxyLG4saSxzKXtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIE8oZSx0LHIsaSxzKXtyZXR1cm4gdD0rdCxyPj4+PTAsc3x8UihlLDAsciw0KSxuLndyaXRlKGUsdCxyLGksMjMsNCkscis0fWZ1bmN0aW9uIGooZSx0LHIsaSxzKXtyZXR1cm4gdD0rdCxyPj4+PTAsc3x8UihlLDAsciw4KSxuLndyaXRlKGUsdCxyLGksNTIsOCkscis4fXMucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5sZW5ndGg7KGU9fn5lKTwwPyhlKz1yKTwwJiYoZT0wKTplPnImJihlPXIpLCh0PXZvaWQgMD09PXQ/cjp+fnQpPDA/KHQrPXIpPDAmJih0PTApOnQ+ciYmKHQ9ciksdDxlJiYodD1lKTt2YXIgbj10aGlzLnN1YmFycmF5KGUsdCk7cmV0dXJuIG4uX19wcm90b19fPXMucHJvdG90eXBlLG59LHMucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oZSx0LHIpe2U+Pj49MCx0Pj4+PTAscnx8RShlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGk9MSxzPTA7KytzPHQmJihpKj0yNTYpOyluKz10aGlzW2Urc10qaTtyZXR1cm4gbn0scy5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZT4+Pj0wLHQ+Pj49MCxyfHxFKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZSstLXRdLGk9MTt0PjAmJihpKj0yNTYpOyluKz10aGlzW2UrLS10XSppO3JldHVybiBufSxzLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fEUoZSwxLHRoaXMubGVuZ3RoKSx0aGlzW2VdfSxzLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fEUoZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0scy5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxFKGUsMix0aGlzLmxlbmd0aCksdGhpc1tlXTw8OHx0aGlzW2UrMV19LHMucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSsxNjc3NzIxNip0aGlzW2UrM119LHMucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LHMucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZT4+Pj0wLHQ+Pj49MCxyfHxFKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbZV0saT0xLHM9MDsrK3M8dCYmKGkqPTI1Nik7KW4rPXRoaXNbZStzXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCp0KSksbn0scy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKGUsdCxyKXtlPj4+PTAsdD4+Pj0wLHJ8fEUoZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dCxpPTEscz10aGlzW2UrLS1uXTtuPjAmJihpKj0yNTYpOylzKz10aGlzW2UrLS1uXSppO3JldHVybiBzPj0oaSo9MTI4KSYmKHMtPU1hdGgucG93KDIsOCp0KSksc30scy5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fEUoZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0scy5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXtlPj4+PTAsdHx8RShlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxzLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihlLHQpe2U+Pj49MCx0fHxFKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlKzFdfHRoaXNbZV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHMucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj49MCx0fHxFKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxzLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDQsdGhpcy5sZW5ndGgpLHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX0scy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT4+Pj0wLHR8fEUoZSw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyxlLCEwLDIzLDQpfSxzLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITEsMjMsNCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITAsNTIsOCl9LHMucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihlLHQpe3JldHVybiBlPj4+PTAsdHx8RShlLDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLGUsITEsNTIsOCl9LHMucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHQ+Pj49MCxyPj4+PTAsbil8fEEodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLHM9MDtmb3IodGhpc1t0XT0yNTUmZTsrK3M8ciYmKGkqPTI1Nik7KXRoaXNbdCtzXT1lL2kmMjU1O3JldHVybiB0K3J9LHMucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHQ+Pj49MCxyPj4+PTAsbil8fEEodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEscz0xO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYocyo9MjU2KTspdGhpc1t0K2ldPWUvcyYyNTU7cmV0dXJuIHQrcn0scy5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdD4+Pj0wLHJ8fEEodGhpcyxlLHQsMSwyNTUsMCksdGhpc1t0XT0yNTUmZSx0KzF9LHMucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHQ+Pj49MCxyfHxBKHRoaXMsZSx0LDIsNjU1MzUsMCksdGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdCsyfSxzLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0Pj4+PTAscnx8QSh0aGlzLGUsdCwyLDY1NTM1LDApLHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlLHQrMn0scy5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdD4+Pj0wLHJ8fEEodGhpcyxlLHQsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbdCszXT1lPj4+MjQsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrMV09ZT4+PjgsdGhpc1t0XT0yNTUmZSx0KzR9LHMucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHQ+Pj49MCxyfHxBKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSx0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUsdCs0fSxzLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdD4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtBKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgcz0wLG89MSxhPTA7Zm9yKHRoaXNbdF09MjU1JmU7KytzPHImJihvKj0yNTYpOyllPDAmJjA9PT1hJiYwIT09dGhpc1t0K3MtMV0mJihhPTEpLHRoaXNbdCtzXT0oZS9vPj4wKS1hJjI1NTtyZXR1cm4gdCtyfSxzLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdD4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtBKHRoaXMsZSx0LHIsaS0xLC1pKX12YXIgcz1yLTEsbz0xLGE9MDtmb3IodGhpc1t0K3NdPTI1NSZlOy0tcz49MCYmKG8qPTI1Nik7KWU8MCYmMD09PWEmJjAhPT10aGlzW3QrcysxXSYmKGE9MSksdGhpc1t0K3NdPShlL28+PjApLWEmMjU1O3JldHVybiB0K3J9LHMucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdD4+Pj0wLHJ8fEEodGhpcyxlLHQsMSwxMjcsLTEyOCksZTwwJiYoZT0yNTUrZSsxKSx0aGlzW3RdPTI1NSZlLHQrMX0scy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0Pj4+PTAscnx8QSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksdGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdCsyfSxzLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHQ+Pj49MCxyfHxBKHRoaXMsZSx0LDIsMzI3NjcsLTMyNzY4KSx0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSx0KzJ9LHMucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdD4+Pj0wLHJ8fEEodGhpcyxlLHQsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCx0aGlzW3QrMl09ZT4+PjE2LHRoaXNbdCszXT1lPj4+MjQsdCs0fSxzLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHQ+Pj49MCxyfHxBKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksdGhpc1t0XT1lPj4+MjQsdGhpc1t0KzFdPWU+Pj4xNix0aGlzW3QrMl09ZT4+PjgsdGhpc1t0KzNdPTI1NSZlLHQrNH0scy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTyh0aGlzLGUsdCwhMCxyKX0scy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTyh0aGlzLGUsdCwhMSxyKX0scy5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGoodGhpcyxlLHQsITAscil9LHMucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBqKHRoaXMsZSx0LCExLHIpfSxzLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCFzLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXJcIik7aWYocnx8KHI9MCksbnx8MD09PW58fChuPXRoaXMubGVuZ3RoKSx0Pj1lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHR8fCh0PTApLG4+MCYmbjxyJiYobj1yKSxuPT09cilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKHI8MHx8cj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7bj50aGlzLmxlbmd0aCYmKG49dGhpcy5sZW5ndGgpLGUubGVuZ3RoLXQ8bi1yJiYobj1lLmxlbmd0aC10K3IpO3ZhciBpPW4tcjtpZih0aGlzPT09ZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbil0aGlzLmNvcHlXaXRoaW4odCxyLG4pO2Vsc2UgaWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcih2YXIgbz1pLTE7bz49MDstLW8pZVtvK3RdPXRoaXNbbytyXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShyLG4pLHQpO3JldHVybiBpfSxzLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdD8obj10LHQ9MCxyPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1uJiZcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbiYmIXMuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7aWYoMT09PWUubGVuZ3RoKXt2YXIgaT1lLmNoYXJDb2RlQXQoMCk7KFwidXRmOFwiPT09biYmaTwxMjh8fFwibGF0aW4xXCI9PT1uKSYmKGU9aSl9fWVsc2VcIm51bWJlclwiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYodDwwfHx0aGlzLmxlbmd0aDx0fHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIG87aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSxcIm51bWJlclwiPT10eXBlb2YgZSlmb3Iobz10O288cjsrK28pdGhpc1tvXT1lO2Vsc2V7dmFyIGE9cy5pc0J1ZmZlcihlKT9lOnMuZnJvbShlLG4pLGw9YS5sZW5ndGg7aWYoMD09PWwpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJytlKydcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKTtmb3Iobz0wO288ci10Oysrbyl0aGlzW28rdF09YVtvJWxdfXJldHVybiB0aGlzfTt2YXIgST0vW14rLzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIE4oZSl7cmV0dXJuIGU8MTY/XCIwXCIrZS50b1N0cmluZygxNik6ZS50b1N0cmluZygxNil9ZnVuY3Rpb24gUChlLHQpe3ZhciByO3Q9dHx8MS8wO2Zvcih2YXIgbj1lLmxlbmd0aCxpPW51bGwscz1bXSxvPTA7bzxuOysrbyl7aWYoKHI9ZS5jaGFyQ29kZUF0KG8pKT41NTI5NSYmcjw1NzM0NCl7aWYoIWkpe2lmKHI+NTYzMTkpeyh0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihvKzE9PT1uKXsodC09Myk+LTEmJnMucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aT1yO2NvbnRpbnVlfWlmKHI8NTYzMjApeyh0LT0zKT4tMSYmcy5wdXNoKDIzOSwxOTEsMTg5KSxpPXI7Y29udGludWV9cj02NTUzNisoaS01NTI5Njw8MTB8ci01NjMyMCl9ZWxzZSBpJiYodC09Myk+LTEmJnMucHVzaCgyMzksMTkxLDE4OSk7aWYoaT1udWxsLHI8MTI4KXtpZigodC09MSk8MClicmVhaztzLnB1c2gocil9ZWxzZSBpZihyPDIwNDgpe2lmKCh0LT0yKTwwKWJyZWFrO3MucHVzaChyPj42fDE5Miw2MyZyfDEyOCl9ZWxzZSBpZihyPDY1NTM2KXtpZigodC09Myk8MClicmVhaztzLnB1c2gocj4+MTJ8MjI0LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX1lbHNle2lmKCEocjwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIik7aWYoKHQtPTQpPDApYnJlYWs7cy5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gc31mdW5jdGlvbiBCKGUpe3JldHVybiB0LnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPShlPWUuc3BsaXQoXCI9XCIpWzBdKS50cmltKCkucmVwbGFjZShJLFwiXCIpKS5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9XCI9XCI7cmV0dXJuIGV9KGUpKX1mdW5jdGlvbiBEKGUsdCxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PXQubGVuZ3RofHxpPj1lLmxlbmd0aCk7KytpKXRbaStyXT1lW2ldO3JldHVybiBpfWZ1bmN0aW9uIEYoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR8fG51bGwhPWUmJm51bGwhPWUuY29uc3RydWN0b3ImJm51bGwhPWUuY29uc3RydWN0b3IubmFtZSYmZS5jb25zdHJ1Y3Rvci5uYW1lPT09dC5uYW1lfWZ1bmN0aW9uIEwoZSl7cmV0dXJuIGUhPWV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiYnVmZmVyXCIpLkJ1ZmZlcil9LHtcImJhc2U2NC1qc1wiOjE4NSxidWZmZXI6MjIwLGllZWU3NTQ6NDM5fV0sMjIxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixpPWUoXCJzdHJlYW1cIikuVHJhbnNmb3JtLHM9ZShcInN0cmluZ19kZWNvZGVyXCIpLlN0cmluZ0RlY29kZXI7ZnVuY3Rpb24gbyhlKXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgZSx0aGlzLmhhc2hNb2RlP3RoaXNbZV09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9ZShcImluaGVyaXRzXCIpKG8saSksby5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCxyKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9bi5mcm9tKGUsdCkpO3ZhciBpPXRoaXMuX3VwZGF0ZShlKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihyJiYoaT10aGlzLl90b1N0cmluZyhpLHIpKSxpKX0sby5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG8ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxvLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sby5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShlKTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKGUpKX1jYXRjaChlKXtuPWV9ZmluYWxseXtyKG4pfX0sby5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKGUpe3ZhciB0O3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKGUpe3Q9ZX1lKHQpfSxvLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZmluYWwoKXx8bi5hbGxvYygwKTtyZXR1cm4gZSYmKHQ9dGhpcy5fdG9TdHJpbmcodCxlLCEwKSksdH0sby5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgcyh0KSx0aGlzLl9lbmNvZGluZz10KSx0aGlzLl9lbmNvZGluZyE9PXQpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKGUpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn0sdC5leHBvcnRzPW99LHtpbmhlcml0czo0NDAsXCJzYWZlLWJ1ZmZlclwiOjQ5NCxzdHJlYW06NTA1LHN0cmluZ19kZWNvZGVyOjIxOH1dLDIyMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksaT1lKFwiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmdcIikscz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpcmV0dXJuIGU7dGhyb3cgbmV3IHMoaShlKStcIiBpcyBub3QgYSBmdW5jdGlvblwiKX19LHtcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nXCI6MzQ5fV0sMjIzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvclwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZ1wiKSxzPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSlyZXR1cm4gZTt0aHJvdyBuZXcgcyhpKGUpK1wiIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpfX0se1wiLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yXCI6Mjg2LFwiLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmdcIjozNDl9XSwyMjQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLGk9U3RyaW5nLHM9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXx8bihlKSlyZXR1cm4gZTt0aHJvdyBuZXcgcyhcIkNhbid0IHNldCBcIitpKGUpK1wiIGFzIGEgcHJvdG90eXBlXCIpfX0se1wiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCI6Mjg1fV0sMjI1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKS5mLG89bihcInVuc2NvcGFibGVzXCIpLGE9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09PWFbb10mJnMoYSxvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6aShudWxsKX0pLHQuZXhwb3J0cz1mdW5jdGlvbihlKXthW29dW2VdPSEwfX0se1wiLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGVcIjozMDYsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOCxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDIyNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZlwiKSxpPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKHQsZSkpcmV0dXJuIGU7dGhyb3cgbmV3IGkoXCJJbmNvcnJlY3QgaW52b2NhdGlvblwiKX19LHtcIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mXCI6MzE0fV0sMjI3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIiksaT1TdHJpbmcscz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpcmV0dXJuIGU7dGhyb3cgbmV3IHMoaShlKStcIiBpcyBub3QgYW4gb2JqZWN0XCIpfX0se1wiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiOjI4OX1dLDIyODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksaT1lKFwiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4XCIpLHM9ZShcIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZVwiKSxvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbyl7dmFyIGEsbD1uKHQpLGM9cyhsKSx1PWkobyxjKTtpZihlJiZyIT1yKXtmb3IoO2M+dTspaWYoKGE9bFt1KytdKSE9YSlyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PXIpcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX07dC5leHBvcnRzPXtpbmNsdWRlczpvKCEwKSxpbmRleE9mOm8oITEpfX0se1wiLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlXCI6Mjk5LFwiLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4XCI6MzQwLFwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0XCI6MzQxfV0sMjI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3RcIiksbz1lKFwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdFwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2VcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlXCIpLGM9aShbXS5wdXNoKSx1PWZ1bmN0aW9uKGUpe3ZhciB0PTE9PT1lLHI9Mj09PWUsaT0zPT09ZSx1PTQ9PT1lLGg9Nj09PWUsZj03PT09ZSxkPTU9PT1lfHxoO3JldHVybiBmdW5jdGlvbihwLG0sYixnKXtmb3IodmFyIHksdix3PW8ocCksXz1zKHcpLHg9bihtLGIpLGs9YShfKSxTPTAsTT1nfHxsLEM9dD9NKHAsayk6cnx8Zj9NKHAsMCk6dm9pZCAwO2s+UztTKyspaWYoKGR8fFMgaW4gXykmJih2PXgoeT1fW1NdLFMsdyksZSkpaWYodClDW1NdPXY7ZWxzZSBpZih2KXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gUztjYXNlIDI6YyhDLHkpfWVsc2Ugc3dpdGNoKGUpe2Nhc2UgNDpyZXR1cm4hMTtjYXNlIDc6YyhDLHkpfXJldHVybiBoPy0xOml8fHU/dTpDfX07dC5leHBvcnRzPXtmb3JFYWNoOnUoMCksbWFwOnUoMSksZmlsdGVyOnUoMiksc29tZTp1KDMpLGV2ZXJ5OnUoNCksZmluZDp1KDUpLGZpbmRJbmRleDp1KDYpLGZpbHRlclJlamVjdDp1KDcpfX0se1wiLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlXCI6MjMzLFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dFwiOjI2MixcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3RcIjoyODAsXCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2VcIjoyOTksXCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0XCI6MzQ0fV0sMjMwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2VcIikscz1lKFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eVwiKSxvPUFycmF5LGE9TWF0aC5tYXg7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGw9aShlKSxjPW4odCxsKSx1PW4odm9pZCAwPT09cj9sOnIsbCksaD1vKGEodS1jLDApKSxmPTA7Yzx1O2MrKyxmKyspcyhoLGYsZVtjXSk7cmV0dXJuIGgubGVuZ3RoPWYsaH19LHtcIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHlcIjoyNDMsXCIuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2VcIjoyOTksXCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXhcIjozNDB9XSwyMzE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiKTt0LmV4cG9ydHM9bihbXS5zbGljZSl9LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjh9XSwyMzI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2lzLWFycmF5XCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvclwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0XCIpLG89ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKShcInNwZWNpZXNcIiksYT1BcnJheTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJih0PWUuY29uc3RydWN0b3IsKGkodCkmJih0PT09YXx8bih0LnByb3RvdHlwZSkpfHxzKHQpJiZudWxsPT09KHQ9dFtvXSkpJiYodD12b2lkIDApKSx2b2lkIDA9PT10P2E6dH19LHtcIi4uL2ludGVybmFscy9pcy1hcnJheVwiOjI4NCxcIi4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvclwiOjI4NixcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIjoyODksXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwyMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3JcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhuKGUpKSgwPT09dD8wOnQpfX0se1wiLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3JcIjoyMzJ9XSwyMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpKFwiaXRlcmF0b3JcIiksaT0hMTt0cnl7dmFyIHM9MCxvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ISFzKyt9fSxyZXR1cm46ZnVuY3Rpb24oKXtpPSEwfX07b1tuXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxBcnJheS5mcm9tKG8sKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2lmKCF0JiYhaSlyZXR1cm4hMX1jYXRjaChlKXtyZXR1cm4hMX12YXIgcj0hMTt0cnl7dmFyIHM9e307c1tuXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6cj0hMH19fX0sZShzKX1jYXRjaChlKXt9cmV0dXJuIHJ9fSx7XCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwyMzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiKSxpPW4oe30udG9TdHJpbmcpLHM9bihcIlwiLnNsaWNlKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoaShlKSw4LC0xKX19LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjh9XSwyMzY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIikscz1lKFwiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3XCIpLG89ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKShcInRvU3RyaW5nVGFnXCIpLGE9T2JqZWN0LGw9XCJBcmd1bWVudHNcIj09PXMoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt0LmV4cG9ydHM9bj9zOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtyZXR1cm4gdm9pZCAwPT09ZT9cIlVuZGVmaW5lZFwiOm51bGw9PT1lP1wiTnVsbFwiOlwic3RyaW5nXCI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9YShlKSxvKSk/cjpsP3ModCk6XCJPYmplY3RcIj09PShuPXModCkpJiZpKHQuY2FsbGVlKT9cIkFyZ3VtZW50c1wiOm59fSx7XCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIjoyMzUsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODUsXCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0XCI6MzQ3LFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3fV0sMjM3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCIpLGk9ZShcIi4uL2ludGVybmFscy9vd24ta2V5c1wiKSxzPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1pKHQpLGw9by5mLGM9cy5mLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGg9YVt1XTtuKGUsaCl8fHImJm4ocixoKXx8bChlLGgsYyh0LGgpKX19fSx7XCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiOjI3NSxcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCI6MzA4LFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIjozMDksXCIuLi9pbnRlcm5hbHMvb3duLWtleXNcIjozMjF9XSwyMzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PS8uLzt0cnl7XCIvLi9cIltlXSh0KX1jYXRjaChyKXt0cnl7cmV0dXJuIHRbbl09ITEsXCIvLi9cIltlXSh0KX1jYXRjaChlKXt9fXJldHVybiExfX0se1wiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3fV0sMjM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGUpIT09ZS5wcm90b3R5cGV9KSl9LHtcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MH1dLDI0MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTplLGRvbmU6dH19fSx7fV0sMjQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7dC5leHBvcnRzPW4/ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBpLmYoZSx0LHMoMSxyKSl9OmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yLGV9fSx7XCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3JcIjoyNDIsXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOH1dLDI0MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LHt9XSwyNDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleVwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3JcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbz1uKHQpO28gaW4gZT9pLmYoZSxvLHMoMCxyKSk6ZVtvXT1yfX0se1wiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yXCI6MjQyLFwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHlcIjozMDgsXCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5XCI6MzQ2fV0sMjQ0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluXCIpLGk9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHIuZ2V0JiZuKHIuZ2V0LHQse2dldHRlcjohMH0pLHIuc2V0JiZuKHIuc2V0LHQse3NldHRlcjohMH0pLGkuZihlLHQscil9fSx7XCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pblwiOjMwMCxcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCI6MzA4fV0sMjQ1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pblwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSl7YXx8KGE9e30pO3ZhciBsPWEuZW51bWVyYWJsZSxjPXZvaWQgMCE9PWEubmFtZT9hLm5hbWU6dDtpZihuKHIpJiZzKHIsYyxhKSxhLmdsb2JhbClsP2VbdF09cjpvKHQscik7ZWxzZXt0cnl7YS51bnNhZmU/ZVt0XSYmKGw9ITApOmRlbGV0ZSBlW3RdfWNhdGNoKGUpe31sP2VbdF09cjppLmYoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiFhLm5vbkNvbmZpZ3VyYWJsZSx3cml0YWJsZTohYS5ub25Xcml0YWJsZX0pfXJldHVybiBlfX0se1wiLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHlcIjoyNDYsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODUsXCIuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pblwiOjMwMCxcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCI6MzA4fV0sMjQ2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksaT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e2kobixlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKHIpe25bZV09dH1yZXR1cm4gdH19LHtcIi4uL2ludGVybmFscy9nbG9iYWxcIjoyNzR9XSwyNDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpO3QuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0se1wiLi4vaW50ZXJuYWxzL2ZhaWxzXCI6MjYwfV0sMjQ4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGwsaT12b2lkIDA9PT1uJiZ2b2lkIDAhPT1uO3QuZXhwb3J0cz17YWxsOm4sSVNfSFRNTEREQTppfX0se31dLDI0OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIikscz1uLmRvY3VtZW50LG89aShzKSYmaShzLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbz9zLmNyZWF0ZUVsZW1lbnQoZSk6e319fSx7XCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiOjI4OX1dLDI1MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm9cIiksaT1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlXCIpO3QuZXhwb3J0cz0hbiYmIWkmJlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJlwib2JqZWN0XCI9PXR5cGVvZiBkb2N1bWVudH0se1wiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vXCI6MjUxLFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlXCI6MjU0fV0sMjUxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPVwib2JqZWN0XCI9PXR5cGVvZiBEZW5vJiZEZW5vJiZcIm9iamVjdFwiPT10eXBlb2YgRGVuby52ZXJzaW9ufSx7fV0sMjUyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudFwiKTt0LmV4cG9ydHM9L2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KG4pJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgUGViYmxlfSx7XCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnRcIjoyNTZ9XSwyNTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50XCIpO3QuZXhwb3J0cz0vKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdChuKX0se1wiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50XCI6MjU2fV0sMjU0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3XCIpO3QuZXhwb3J0cz1cInByb2Nlc3NcIj09PWkobi5wcm9jZXNzKX0se1wiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3XCI6MjM1LFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiOjI3NH1dLDI1NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnRcIik7dC5leHBvcnRzPS93ZWIwcyg/IS4qY2hyb21lKS9pLnRlc3Qobil9LHtcIi4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudFwiOjI1Nn1dLDI1NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2YgbmF2aWdhdG9yJiZTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCl8fFwiXCJ9LHt9XSwyNTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLHM9ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksbz1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50XCIpLGE9cy5wcm9jZXNzLGw9cy5EZW5vLGM9YSYmYS52ZXJzaW9uc3x8bCYmbC52ZXJzaW9uLHU9YyYmYy52ODt1JiYoaT0obj11LnNwbGl0KFwiLlwiKSlbMF0+MCYmblswXTw0PzE6KyhuWzBdK25bMV0pKSwhaSYmbyYmKCEobj1vLm1hdGNoKC9FZGdlXFwvKFxcZCspLykpfHxuWzFdPj03NCkmJihuPW8ubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pKSYmKGk9K25bMV0pLHQuZXhwb3J0cz1pfSx7XCIuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnRcIjoyNTYsXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0fV0sMjU4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPVtcImNvbnN0cnVjdG9yXCIsXCJoYXNPd25Qcm9wZXJ0eVwiLFwiaXNQcm90b3R5cGVPZlwiLFwicHJvcGVydHlJc0VudW1lcmFibGVcIixcInRvTG9jYWxlU3RyaW5nXCIsXCJ0b1N0cmluZ1wiLFwidmFsdWVPZlwiXX0se31dLDI1OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCIpLGk9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpLmYscz1lKFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluXCIpLGE9ZShcIi4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5XCIpLGw9ZShcIi4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXNcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2lzLWZvcmNlZFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcix1LGgsZixkLHA9ZS50YXJnZXQsbT1lLmdsb2JhbCxiPWUuc3RhdDtpZihyPW0/bjpiP25bcF18fGEocCx7fSk6KG5bcF18fHt9KS5wcm90b3R5cGUpZm9yKHUgaW4gdCl7aWYoZj10W3VdLGg9ZS5kb250Q2FsbEdldFNldD8oZD1pKHIsdSkpJiZkLnZhbHVlOnJbdV0sIWMobT91OnArKGI/XCIuXCI6XCIjXCIpK3UsZS5mb3JjZWQpJiZ2b2lkIDAhPT1oKXtpZih0eXBlb2YgZj09dHlwZW9mIGgpY29udGludWU7bChmLGgpfShlLnNoYW18fGgmJmguc2hhbSkmJnMoZixcInNoYW1cIiwhMCksbyhyLHUsZixlKX19fSx7XCIuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzXCI6MjM3LFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eVwiOjI0MSxcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eVwiOjI0NixcIi4uL2ludGVybmFscy9nbG9iYWxcIjoyNzQsXCIuLi9pbnRlcm5hbHMvaXMtZm9yY2VkXCI6Mjg3LFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIjozMDl9XSwyNjA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LHt9XSwyNjE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlXCIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLHM9aS5hcHBseSxvPWkuY2FsbDt0LmV4cG9ydHM9XCJvYmplY3RcIj09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChuP28uYmluZChzKTpmdW5jdGlvbigpe3JldHVybiBvLmFwcGx5KHMsYXJndW1lbnRzKX0pfSx7XCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmVcIjoyNjN9XSwyNjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2VcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIikscz1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlXCIpLG89bihuLmJpbmQpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpKGUpLHZvaWQgMD09PXQ/ZTpzP28oZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSx7XCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiOjIyMixcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZVwiOjI2MyxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlXCI6MjY3fV0sMjYzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKTt0LmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm5cImZ1bmN0aW9uXCIhPXR5cGVvZiBlfHxlLmhhc093blByb3BlcnR5KFwicHJvdG90eXBlXCIpfSkpfSx7XCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjB9XSwyNjQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlXCIpLGk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dC5leHBvcnRzPW4/aS5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoaSxhcmd1bWVudHMpfX0se1wiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlXCI6MjYzfV0sMjY1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiKSxzPUZ1bmN0aW9uLnByb3RvdHlwZSxvPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYT1pKHMsXCJuYW1lXCIpLGw9YSYmXCJzb21ldGhpbmdcIj09PWZ1bmN0aW9uKCl7fS5uYW1lLGM9YSYmKCFufHxuJiZvKHMsXCJuYW1lXCIpLmNvbmZpZ3VyYWJsZSk7dC5leHBvcnRzPXtFWElTVFM6YSxQUk9QRVI6bCxDT05GSUdVUkFCTEU6Y319LHtcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiOjI0NyxcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCI6Mjc1fV0sMjY2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt0cnl7cmV0dXJuIG4oaShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdClbcl0pKX1jYXRjaChlKXt9fX0se1wiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIjoyMjIsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCI6MjY4fV0sMjY3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9jbGFzc29mLXJhd1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihcIkZ1bmN0aW9uXCI9PT1uKGUpKXJldHVybiBpKGUpfX0se1wiLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3XCI6MjM1LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiOjI2OH1dLDI2ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmVcIiksaT1GdW5jdGlvbi5wcm90b3R5cGUscz1pLmNhbGwsbz1uJiZpLmJpbmQuYmluZChzLHMpO3QuZXhwb3J0cz1uP286ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoZSxhcmd1bWVudHMpfX19LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZVwiOjI2M31dLDI2OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxzPWZ1bmN0aW9uKGUpe3JldHVybiBpKGUpP2U6dm9pZCAwfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3MobltlXSk6bltlXSYmbltlXVt0XX19LHtcIi4uL2ludGVybmFscy9nbG9iYWxcIjoyNzQsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODV9XSwyNzA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2NsYXNzb2ZcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2dldC1tZXRob2RcIikscz1lKFwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkXCIpLG89ZShcIi4uL2ludGVybmFscy9pdGVyYXRvcnNcIiksYT1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpKFwiaXRlcmF0b3JcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFzKGUpKXJldHVybiBpKGUsYSl8fGkoZSxcIkBAaXRlcmF0b3JcIil8fG9bbihlKV19fSx7XCIuLi9pbnRlcm5hbHMvY2xhc3NvZlwiOjIzNixcIi4uL2ludGVybmFscy9nZXQtbWV0aG9kXCI6MjczLFwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkXCI6Mjg4LFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yc1wiOjI5OCxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDI3MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCIpLG89ZShcIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nXCIpLGE9ZShcIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpLGw9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9hKGUpOnQ7aWYoaShyKSlyZXR1cm4gcyhuKHIsZSkpO3Rocm93IG5ldyBsKG8oZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpfX0se1wiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIjoyMjIsXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCI6MjI3LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZFwiOjI3MCxcIi4uL2ludGVybmFscy90cnktdG8tc3RyaW5nXCI6MzQ5fV0sMjcyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLWFycmF5XCIpLHM9ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIiksYT1lKFwiLi4vaW50ZXJuYWxzL3RvLXN0cmluZ1wiKSxsPW4oW10ucHVzaCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKHMoZSkpcmV0dXJuIGU7aWYoaShlKSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sbj0wO248dDtuKyspe3ZhciBjPWVbbl07XCJzdHJpbmdcIj09dHlwZW9mIGM/bChyLGMpOlwibnVtYmVyXCIhPXR5cGVvZiBjJiZcIk51bWJlclwiIT09byhjKSYmXCJTdHJpbmdcIiE9PW8oYyl8fGwocixhKGMpKX12YXIgdT1yLmxlbmd0aCxoPSEwO3JldHVybiBmdW5jdGlvbihlLHQpe2lmKGgpcmV0dXJuIGg9ITEsdDtpZihpKHRoaXMpKXJldHVybiB0O2Zvcih2YXIgbj0wO248dTtuKyspaWYocltuXT09PWUpcmV0dXJuIHR9fX19LHtcIi4uL2ludGVybmFscy9jbGFzc29mLXJhd1wiOjIzNSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvaXMtYXJyYXlcIjoyODQsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODUsXCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nXCI6MzQ4fV0sMjczOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9hLWNhbGxhYmxlXCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW3RdO3JldHVybiBpKHIpP3ZvaWQgMDpuKHIpfX0se1wiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIjoyMjIsXCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWRcIjoyODh9XSwyNzQ6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09PU1hdGgmJmV9O3QuZXhwb3J0cz1yKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxyKFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cihcIm9iamVjdFwiPT10eXBlb2YgZSYmZSl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fHRoaXN8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwyNzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0XCIpLHM9bih7fS5oYXNPd25Qcm9wZXJ0eSk7dC5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHMoaShlKSx0KX19LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0XCI6MzQ0fV0sMjc2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXt9fSx7fV0sMjc3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5ezE9PT1hcmd1bWVudHMubGVuZ3RoP2NvbnNvbGUuZXJyb3IoZSk6Y29uc29sZS5lcnJvcihlLHQpfWNhdGNoKGUpe319fSx7fV0sMjc4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW5cIik7dC5leHBvcnRzPW4oXCJkb2N1bWVudFwiLFwiZG9jdW1lbnRFbGVtZW50XCIpfSx7XCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCI6MjY5fV0sMjc5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIikscz1lKFwiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50XCIpO3QuZXhwb3J0cz0hbiYmIWkoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkocyhcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0se1wiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCI6MjQ3LFwiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50XCI6MjQ5LFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCI6MjYwfV0sMjgwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLHM9ZShcIi4uL2ludGVybmFscy9jbGFzc29mLXJhd1wiKSxvPU9iamVjdCxhPW4oXCJcIi5zcGxpdCk7dC5leHBvcnRzPWkoKGZ1bmN0aW9uKCl7cmV0dXJuIW8oXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKGUpe3JldHVyblwiU3RyaW5nXCI9PT1zKGUpP2EoZSxcIlwiKTpvKGUpfTpvfSx7XCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIjoyMzUsXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCI6MjY4fV0sMjgxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLHM9ZShcIi4uL2ludGVybmFscy9zaGFyZWQtc3RvcmVcIiksbz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTtpKHMuaW5zcGVjdFNvdXJjZSl8fChzLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSl9KSx0LmV4cG9ydHM9cy5pbnNwZWN0U291cmNlfSx7XCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCI6MjY4LFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCI6Mjg1LFwiLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZVwiOjMzM31dLDI4MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGkscyxvPWUoXCIuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uXCIpLGE9ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiKSxjPWUoXCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5XCIpLHU9ZShcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCIpLGg9ZShcIi4uL2ludGVybmFscy9zaGFyZWQtc3RvcmVcIiksZj1lKFwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXlcIiksZD1lKFwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzXCIpLHA9YS5UeXBlRXJyb3IsbT1hLldlYWtNYXA7aWYob3x8aC5zdGF0ZSl7dmFyIGI9aC5zdGF0ZXx8KGguc3RhdGU9bmV3IG0pO2IuZ2V0PWIuZ2V0LGIuaGFzPWIuaGFzLGIuc2V0PWIuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZihiLmhhcyhlKSl0aHJvdyBuZXcgcChcIk9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkXCIpO3JldHVybiB0LmZhY2FkZT1lLGIuc2V0KGUsdCksdH0saT1mdW5jdGlvbihlKXtyZXR1cm4gYi5nZXQoZSl8fHt9fSxzPWZ1bmN0aW9uKGUpe3JldHVybiBiLmhhcyhlKX19ZWxzZXt2YXIgZz1mKFwic3RhdGVcIik7ZFtnXT0hMCxuPWZ1bmN0aW9uKGUsdCl7aWYodShlLGcpKXRocm93IG5ldyBwKFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIik7cmV0dXJuIHQuZmFjYWRlPWUsYyhlLGcsdCksdH0saT1mdW5jdGlvbihlKXtyZXR1cm4gdShlLGcpP2VbZ106e319LHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSxnKX19dC5leHBvcnRzPXtzZXQ6bixnZXQ6aSxoYXM6cyxlbmZvcmNlOmZ1bmN0aW9uKGUpe3JldHVybiBzKGUpP2koZSk6bihlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcjtpZighbCh0KXx8KHI9aSh0KSkudHlwZSE9PWUpdGhyb3cgbmV3IHAoXCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFwiK2UrXCIgcmVxdWlyZWRcIik7cmV0dXJuIHJ9fX19LHtcIi4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHlcIjoyNDEsXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXNcIjoyNzYsXCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0XCI6Mjg5LFwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXlcIjozMzIsXCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlXCI6MzMzLFwiLi4vaW50ZXJuYWxzL3dlYWstbWFwLWJhc2ljLWRldGVjdGlvblwiOjM1NH1dLDI4MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yc1wiKSxzPW4oXCJpdGVyYXRvclwiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihpLkFycmF5PT09ZXx8b1tzXT09PWUpfX0se1wiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yc1wiOjI5OCxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDI4NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIik7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiQXJyYXlcIj09PW4oZSl9fSx7XCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIjoyMzV9XSwyODU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWFsbFwiKSxpPW4uYWxsO3QuZXhwb3J0cz1uLklTX0hUTUxEREE/ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZXx8ZT09PWl9OmZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9fSx7XCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsXCI6MjQ4fV0sMjg2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLHM9ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvY2xhc3NvZlwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCIpLGw9ZShcIi4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZVwiKSxjPWZ1bmN0aW9uKCl7fSx1PVtdLGg9YShcIlJlZmxlY3RcIixcImNvbnN0cnVjdFwiKSxmPS9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sZD1uKGYuZXhlYykscD0hZi50ZXN0KGMpLG09ZnVuY3Rpb24oZSl7aWYoIXMoZSkpcmV0dXJuITE7dHJ5e3JldHVybiBoKGMsdSxlKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LGI9ZnVuY3Rpb24oZSl7aWYoIXMoZSkpcmV0dXJuITE7c3dpdGNoKG8oZSkpe2Nhc2VcIkFzeW5jRnVuY3Rpb25cIjpjYXNlXCJHZW5lcmF0b3JGdW5jdGlvblwiOmNhc2VcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIjpyZXR1cm4hMX10cnl7cmV0dXJuIHB8fCEhZChmLGwoZSkpfWNhdGNoKGUpe3JldHVybiEwfX07Yi5zaGFtPSEwLHQuZXhwb3J0cz0haHx8aSgoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gbShtLmNhbGwpfHwhbShPYmplY3QpfHwhbSgoZnVuY3Rpb24oKXtlPSEwfSkpfHxlfSkpP2I6bX0se1wiLi4vaW50ZXJuYWxzL2NsYXNzb2ZcIjoyMzYsXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCI6MjY4LFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiOjI2OSxcIi4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZVwiOjI4MSxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NX1dLDI4NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLHM9LyN8XFwucHJvdG90eXBlXFwuLyxvPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bFthKGUpXTtyZXR1cm4gcj09PXV8fHIhPT1jJiYoaSh0KT9uKHQpOiEhdCl9LGE9by5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKHMsXCIuXCIpLnRvTG93ZXJDYXNlKCl9LGw9by5kYXRhPXt9LGM9by5OQVRJVkU9XCJOXCIsdT1vLlBPTFlGSUxMPVwiUFwiO3QuZXhwb3J0cz1vfSx7XCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODV9XSwyODg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSx7fV0sMjg5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsXCIpLHM9aS5hbGw7dC5leHBvcnRzPWkuSVNfSFRNTEREQT9mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZT9udWxsIT09ZTpuKGUpfHxlPT09c306ZnVuY3Rpb24oZSl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/bnVsbCE9PWU6bihlKX19LHtcIi4uL2ludGVybmFscy9kb2N1bWVudC1hbGxcIjoyNDgsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODV9XSwyOTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ITF9LHt9XSwyOTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIikscz1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBuKGUpJiYodm9pZCAwIT09KHQ9ZVtzXSk/ISF0OlwiUmVnRXhwXCI9PT1pKGUpKX19LHtcIi4uL2ludGVybmFscy9jbGFzc29mLXJhd1wiOjIzNSxcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIjoyODksXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwyOTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2ZcIiksbz1lKFwiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkXCIpLGE9T2JqZWN0O3QuZXhwb3J0cz1vP2Z1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1uKFwiU3ltYm9sXCIpO3JldHVybiBpKHQpJiZzKHQucHJvdG90eXBlLGEoZSkpfX0se1wiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiOjI2OSxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mXCI6MzE0LFwiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkXCI6MzUxfV0sMjkzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIikscz1lKFwiLi4vaW50ZXJuYWxzL2FuLW9iamVjdFwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZ1wiKSxhPWUoXCIuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kXCIpLGw9ZShcIi4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZVwiKSxjPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZlwiKSx1PWUoXCIuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yXCIpLGg9ZShcIi4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kXCIpLGY9ZShcIi4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZVwiKSxkPVR5cGVFcnJvcixwPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9wcGVkPWUsdGhpcy5yZXN1bHQ9dH0sbT1wLnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBiLGcseSx2LHcsXyx4LGs9ciYmci50aGF0LFM9ISghcnx8IXIuQVNfRU5UUklFUyksTT0hKCFyfHwhci5JU19SRUNPUkQpLEM9ISghcnx8IXIuSVNfSVRFUkFUT1IpLFQ9ISghcnx8IXIuSU5URVJSVVBURUQpLEU9bih0LGspLEE9ZnVuY3Rpb24oZSl7cmV0dXJuIGImJmYoYixcIm5vcm1hbFwiLGUpLG5ldyBwKCEwLGUpfSxSPWZ1bmN0aW9uKGUpe3JldHVybiBTPyhzKGUpLFQ/RShlWzBdLGVbMV0sQSk6RShlWzBdLGVbMV0pKTpUP0UoZSxBKTpFKGUpfTtpZihNKWI9ZS5pdGVyYXRvcjtlbHNlIGlmKEMpYj1lO2Vsc2V7aWYoIShnPWgoZSkpKXRocm93IG5ldyBkKG8oZSkrXCIgaXMgbm90IGl0ZXJhYmxlXCIpO2lmKGEoZykpe2Zvcih5PTAsdj1sKGUpO3Y+eTt5KyspaWYoKHc9UihlW3ldKSkmJmMobSx3KSlyZXR1cm4gdztyZXR1cm4gbmV3IHAoITEpfWI9dShlLGcpfWZvcihfPU0/ZS5uZXh0OmIubmV4dDshKHg9aShfLGIpKS5kb25lOyl7dHJ5e3c9Uih4LnZhbHVlKX1jYXRjaChlKXtmKGIsXCJ0aHJvd1wiLGUpfWlmKFwib2JqZWN0XCI9PXR5cGVvZiB3JiZ3JiZjKG0sdykpcmV0dXJuIHd9cmV0dXJuIG5ldyBwKCExKX19LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0XCI6MjYyLFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yXCI6MjcxLFwiLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2RcIjoyNzAsXCIuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kXCI6MjgzLFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlXCI6Mjk0LFwiLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlXCI6Mjk5LFwiLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2ZcIjozMTQsXCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZ1wiOjM0OX1dLDI5NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCIpLHM9ZShcIi4uL2ludGVybmFscy9nZXQtbWV0aG9kXCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIG8sYTtpKGUpO3RyeXtpZighKG89cyhlLFwicmV0dXJuXCIpKSl7aWYoXCJ0aHJvd1wiPT09dCl0aHJvdyByO3JldHVybiByfW89bihvLGUpfWNhdGNoKGUpe2E9ITAsbz1lfWlmKFwidGhyb3dcIj09PXQpdGhyb3cgcjtpZihhKXRocm93IG87cmV0dXJuIGkobykscn19LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiOjI2NCxcIi4uL2ludGVybmFscy9nZXQtbWV0aG9kXCI6MjczfV0sMjk1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZVwiKS5JdGVyYXRvclByb3RvdHlwZSxpPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3JcIiksbz1lKFwiLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnXCIpLGE9ZShcIi4uL2ludGVybmFscy9pdGVyYXRvcnNcIiksbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYyl7dmFyIHU9dCtcIiBJdGVyYXRvclwiO3JldHVybiBlLnByb3RvdHlwZT1pKG4se25leHQ6cygrIWMscil9KSxvKGUsdSwhMSwhMCksYVt1XT1sLGV9fSx7XCIuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3JcIjoyNDIsXCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzXCI6Mjk4LFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlXCI6Mjk3LFwiLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGVcIjozMDYsXCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWdcIjozMzF9XSwyOTY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZVwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvclwiKSxjPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2ZcIiksdT1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mXCIpLGg9ZShcIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZ1wiKSxmPWUoXCIuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5XCIpLGQ9ZShcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIikscD1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpLG09ZShcIi4uL2ludGVybmFscy9pdGVyYXRvcnNcIiksYj1lKFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlXCIpLGc9by5QUk9QRVIseT1vLkNPTkZJR1VSQUJMRSx2PWIuSXRlcmF0b3JQcm90b3R5cGUsdz1iLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMsXz1wKFwiaXRlcmF0b3JcIikseD1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyxwLGIsayl7bChyLHQsbyk7dmFyIFMsTSxDLFQ9ZnVuY3Rpb24oZSl7aWYoZT09PXAmJmopcmV0dXJuIGo7aWYoIXcmJmUmJmUgaW4gUilyZXR1cm4gUltlXTtzd2l0Y2goZSl7Y2FzZVwia2V5c1wiOmNhc2VcInZhbHVlc1wiOmNhc2VcImVudHJpZXNcIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMpfX0sRT10K1wiIEl0ZXJhdG9yXCIsQT0hMSxSPWUucHJvdG90eXBlLE89UltfXXx8UltcIkBAaXRlcmF0b3JcIl18fHAmJlJbcF0saj0hdyYmT3x8VChwKSxJPVwiQXJyYXlcIj09PXQmJlIuZW50cmllc3x8TztpZihJJiYoUz1jKEkuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJlMubmV4dCYmKHN8fGMoUyk9PT12fHwodT91KFMsdik6YShTW19dKXx8ZChTLF8seCkpLGgoUyxFLCEwLCEwKSxzJiYobVtFXT14KSksZyYmXCJ2YWx1ZXNcIj09PXAmJk8mJlwidmFsdWVzXCIhPT1PLm5hbWUmJighcyYmeT9mKFIsXCJuYW1lXCIsXCJ2YWx1ZXNcIik6KEE9ITAsaj1mdW5jdGlvbigpe3JldHVybiBpKE8sdGhpcyl9KSkscClpZihNPXt2YWx1ZXM6VChcInZhbHVlc1wiKSxrZXlzOmI/ajpUKFwia2V5c1wiKSxlbnRyaWVzOlQoXCJlbnRyaWVzXCIpfSxrKWZvcihDIGluIE0pKHd8fEF8fCEoQyBpbiBSKSkmJmQoUixDLE1bQ10pO2Vsc2Ugbih7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOnd8fEF9LE0pO3JldHVybiBzJiYha3x8UltfXT09PWp8fGQoUixfLGose25hbWU6cH0pLG1bdF09aixNfX0se1wiLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eVwiOjI0MSxcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZVwiOjI2NSxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9pcy1wdXJlXCI6MjkwLFwiLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvclwiOjI5NSxcIi4uL2ludGVybmFscy9pdGVyYXRvcnNcIjoyOTgsXCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmVcIjoyOTcsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2ZcIjozMTMsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2ZcIjozMTgsXCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWdcIjozMzEsXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwyOTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLHMsbz1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLGE9ZShcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiKSxsPWUoXCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0XCIpLGM9ZShcIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlXCIpLHU9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZlwiKSxoPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluXCIpLGY9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxkPWUoXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiKSxwPWYoXCJpdGVyYXRvclwiKSxtPSExO1tdLmtleXMmJihcIm5leHRcImluKHM9W10ua2V5cygpKT8oaT11KHUocykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihuPWkpOm09ITApLCFsKG4pfHxvKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBuW3BdLmNhbGwoZSkhPT1lfSkpP249e306ZCYmKG49YyhuKSksYShuW3BdKXx8aChuLHAsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksdC5leHBvcnRzPXtJdGVyYXRvclByb3RvdHlwZTpuLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6bX19LHtcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODUsXCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0XCI6Mjg5LFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIjoyOTAsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZVwiOjMwNixcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZlwiOjMxMyxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDI5ODpbZnVuY3Rpb24oZSx0LHIpe2FyZ3VtZW50c1s0XVsyNzZdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2R1cDoyNzZ9XSwyOTk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3RvLWxlbmd0aFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0se1wiLi4vaW50ZXJuYWxzL3RvLWxlbmd0aFwiOjM0M31dLDMwMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLGk9ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksbz1lKFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCIpLGw9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lXCIpLkNPTkZJR1VSQUJMRSxjPWUoXCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2VcIiksdT1lKFwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlXCIpLGg9dS5lbmZvcmNlLGY9dS5nZXQsZD1TdHJpbmcscD1PYmplY3QuZGVmaW5lUHJvcGVydHksbT1uKFwiXCIuc2xpY2UpLGI9bihcIlwiLnJlcGxhY2UpLGc9bihbXS5qb2luKSx5PWEmJiFpKChmdW5jdGlvbigpe3JldHVybiA4IT09cCgoZnVuY3Rpb24oKXt9KSxcImxlbmd0aFwiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHY9U3RyaW5nKFN0cmluZykuc3BsaXQoXCJTdHJpbmdcIiksdz10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe1wiU3ltYm9sKFwiPT09bShkKHQpLDAsNykmJih0PVwiW1wiK2IoZCh0KSwvXlN5bWJvbFxcKChbXildKilcXCkvLFwiJDFcIikrXCJdXCIpLHImJnIuZ2V0dGVyJiYodD1cImdldCBcIit0KSxyJiZyLnNldHRlciYmKHQ9XCJzZXQgXCIrdCksKCFvKGUsXCJuYW1lXCIpfHxsJiZlLm5hbWUhPT10KSYmKGE/cChlLFwibmFtZVwiLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pOmUubmFtZT10KSx5JiZyJiZvKHIsXCJhcml0eVwiKSYmZS5sZW5ndGghPT1yLmFyaXR5JiZwKGUsXCJsZW5ndGhcIix7dmFsdWU6ci5hcml0eX0pO3RyeXtyJiZvKHIsXCJjb25zdHJ1Y3RvclwiKSYmci5jb25zdHJ1Y3Rvcj9hJiZwKGUsXCJwcm90b3R5cGVcIix7d3JpdGFibGU6ITF9KTplLnByb3RvdHlwZSYmKGUucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2goZSl7fXZhciBuPWgoZSk7cmV0dXJuIG8obixcInNvdXJjZVwiKXx8KG4uc291cmNlPWcodixcInN0cmluZ1wiPT10eXBlb2YgdD90OlwiXCIpKSxlfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9dygoZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKSYmZih0aGlzKS5zb3VyY2V8fGModGhpcyl9KSxcInRvU3RyaW5nXCIpfSx7XCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZVwiOjI2NSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiOjI3NSxcIi4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZVwiOjI4MSxcIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZVwiOjI4MixcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NX1dLDMwMTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7dC5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciB0PStlO3JldHVybih0PjA/aTpuKSh0KX19LHt9XSwzMDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLHMsbyxhLGw9ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dFwiKSx1PWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvclwiKS5mLGg9ZShcIi4uL2ludGVybmFscy90YXNrXCIpLnNldCxmPWUoXCIuLi9pbnRlcm5hbHMvcXVldWVcIiksZD1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3NcIikscD1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlXCIpLG09ZShcIi4uL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0XCIpLGI9ZShcIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZVwiKSxnPWwuTXV0YXRpb25PYnNlcnZlcnx8bC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHk9bC5kb2N1bWVudCx2PWwucHJvY2Vzcyx3PWwuUHJvbWlzZSxfPXUobCxcInF1ZXVlTWljcm90YXNrXCIpLHg9XyYmXy52YWx1ZTtpZigheCl7dmFyIGs9bmV3IGYsUz1mdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKGImJihlPXYuZG9tYWluKSYmZS5leGl0KCk7dD1rLmdldCgpOyl0cnl7dCgpfWNhdGNoKGUpe3Rocm93IGsuaGVhZCYmbigpLGV9ZSYmZS5lbnRlcigpfTtkfHxifHxtfHwhZ3x8IXk/IXAmJncmJncucmVzb2x2ZT8oKG89dy5yZXNvbHZlKHZvaWQgMCkpLmNvbnN0cnVjdG9yPXcsYT1jKG8udGhlbixvKSxuPWZ1bmN0aW9uKCl7YShTKX0pOmI/bj1mdW5jdGlvbigpe3YubmV4dFRpY2soUyl9OihoPWMoaCxsKSxuPWZ1bmN0aW9uKCl7aChTKX0pOihpPSEwLHM9eS5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuZXcgZyhTKS5vYnNlcnZlKHMse2NoYXJhY3RlckRhdGE6ITB9KSxuPWZ1bmN0aW9uKCl7cy5kYXRhPWk9IWl9KSx4PWZ1bmN0aW9uKGUpe2suaGVhZHx8bigpLGsuYWRkKGUpfX10LmV4cG9ydHM9eH0se1wiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3NcIjoyNTMsXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGVcIjoyNTIsXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGVcIjoyNTQsXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdFwiOjI1NSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHRcIjoyNjIsXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JcIjozMDksXCIuLi9pbnRlcm5hbHMvcXVldWVcIjozMjgsXCIuLi9pbnRlcm5hbHMvdGFza1wiOjMzOX1dLDMwMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiKSxpPVR5cGVFcnJvcixzPWZ1bmN0aW9uKGUpe3ZhciB0LHI7dGhpcy5wcm9taXNlPW5ldyBlKChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PXR8fHZvaWQgMCE9PXIpdGhyb3cgbmV3IGkoXCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvclwiKTt0PWUscj1ufSkpLHRoaXMucmVzb2x2ZT1uKHQpLHRoaXMucmVqZWN0PW4ocil9O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcyhlKX19LHtcIi4uL2ludGVybmFscy9hLWNhbGxhYmxlXCI6MjIyfV0sMzA0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9pcy1yZWdleHBcIiksaT1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgbmV3IGkoXCJUaGUgbWV0aG9kIGRvZXNuJ3QgYWNjZXB0IHJlZ3VsYXIgZXhwcmVzc2lvbnNcIik7cmV0dXJuIGV9fSx7XCIuLi9pbnRlcm5hbHMvaXMtcmVnZXhwXCI6MjkxfV0sMzA1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLHM9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCIpLG89ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKSxhPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXNcIiksbD1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHNcIiksYz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlXCIpLHU9ZShcIi4uL2ludGVybmFscy90by1vYmplY3RcIiksaD1lKFwiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0XCIpLGY9T2JqZWN0LmFzc2lnbixkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxwPWkoW10uY29uY2F0KTt0LmV4cG9ydHM9IWZ8fG8oKGZ1bmN0aW9uKCl7aWYobiYmMSE9PWYoe2I6MX0sZihkKHt9LFwiYVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2QodGhpcyxcImJcIix7dmFsdWU6MyxlbnVtZXJhYmxlOiExfSl9fSkse2I6Mn0pKS5iKXJldHVybiEwO3ZhciBlPXt9LHQ9e30scj1TeW1ib2woXCJhc3NpZ24gZGV0ZWN0aW9uXCIpO3JldHVybiBlW3JdPTcsXCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiLnNwbGl0KFwiXCIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZX0pKSw3IT09Zih7fSxlKVtyXXx8XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiIT09YShmKHt9LHQpKS5qb2luKFwiXCIpfSkpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXUoZSksaT1hcmd1bWVudHMubGVuZ3RoLG89MSxmPWwuZixkPWMuZjtpPm87KWZvcih2YXIgbSxiPWgoYXJndW1lbnRzW28rK10pLGc9Zj9wKGEoYiksZihiKSk6YShiKSx5PWcubGVuZ3RoLHY9MDt5PnY7KW09Z1t2KytdLG4mJiFzKGQsYixtKXx8KHJbbV09YlttXSk7cmV0dXJuIHJ9OmZ9LHtcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiOjI0NyxcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MCxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCI6MjY0LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiOjI2OCxcIi4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdFwiOjI4MCxcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCI6MzEyLFwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzXCI6MzE2LFwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlXCI6MzE3LFwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdFwiOjM0NH1dLDMwNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9ZShcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllc1wiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5c1wiKSxhPWUoXCIuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXNcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2h0bWxcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50XCIpLHU9ZShcIi4uL2ludGVybmFscy9zaGFyZWQta2V5XCIpLGg9dShcIklFX1BST1RPXCIpLGY9ZnVuY3Rpb24oKXt9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCI8c2NyaXB0PlwiK2UrXCI8XFwvc2NyaXB0PlwifSxwPWZ1bmN0aW9uKGUpe2Uud3JpdGUoZChcIlwiKSksZS5jbG9zZSgpO3ZhciB0PWUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gZT1udWxsLHR9LG09ZnVuY3Rpb24oKXt0cnl7bj1uZXcgQWN0aXZlWE9iamVjdChcImh0bWxmaWxlXCIpfWNhdGNoKGUpe312YXIgZSx0O209XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj9wKG4pOigodD1jKFwiaWZyYW1lXCIpKS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiLGwuYXBwZW5kQ2hpbGQodCksdC5zcmM9U3RyaW5nKFwiamF2YXNjcmlwdDpcIiksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShkKFwiZG9jdW1lbnQuRj1PYmplY3RcIikpLGUuY2xvc2UoKSxlLkYpOnAobik7Zm9yKHZhciByPW8ubGVuZ3RoO3ItLTspZGVsZXRlIG0ucHJvdG90eXBlW29bcl1dO3JldHVybiBtKCl9O2FbaF09ITAsdC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhmLnByb3RvdHlwZT1pKGUpLHI9bmV3IGYsZi5wcm90b3R5cGU9bnVsbCxyW2hdPWUpOnI9bSgpLHZvaWQgMD09PXQ/cjpzLmYocix0KX19LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnRcIjoyNDksXCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5c1wiOjI1OCxcIi4uL2ludGVybmFscy9oaWRkZW4ta2V5c1wiOjI3NixcIi4uL2ludGVybmFscy9odG1sXCI6Mjc4LFwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllc1wiOjMwNyxcIi4uL2ludGVybmFscy9zaGFyZWQta2V5XCI6MzMyfV0sMzA3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWdcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHlcIiksbz1lKFwiLi4vaW50ZXJuYWxzL2FuLW9iamVjdFwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksbD1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzXCIpO3IuZj1uJiYhaT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe28oZSk7Zm9yKHZhciByLG49YSh0KSxpPWwodCksYz1pLmxlbmd0aCx1PTA7Yz51OylzLmYoZSxyPWlbdSsrXSxuW3JdKTtyZXR1cm4gZX19LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOCxcIi4uL2ludGVybmFscy9vYmplY3Qta2V5c1wiOjMxNixcIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdFwiOjM0MSxcIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Z1wiOjM1Mn1dLDMwODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lXCIpLHM9ZShcIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Z1wiKSxvPWUoXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCIpLGE9ZShcIi4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXlcIiksbD1UeXBlRXJyb3IsYz1PYmplY3QuZGVmaW5lUHJvcGVydHksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3IuZj1uP3M/ZnVuY3Rpb24oZSx0LHIpe2lmKG8oZSksdD1hKHQpLG8ociksXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmXCJwcm90b3R5cGVcIj09PXQmJlwidmFsdWVcImluIHImJlwid3JpdGFibGVcImluIHImJiFyLndyaXRhYmxlKXt2YXIgbj11KGUsdCk7biYmbi53cml0YWJsZSYmKGVbdF09ci52YWx1ZSxyPXtjb25maWd1cmFibGU6XCJjb25maWd1cmFibGVcImluIHI/ci5jb25maWd1cmFibGU6bi5jb25maWd1cmFibGUsZW51bWVyYWJsZTpcImVudW1lcmFibGVcImluIHI/ci5lbnVtZXJhYmxlOm4uZW51bWVyYWJsZSx3cml0YWJsZTohMX0pfXJldHVybiBjKGUsdCxyKX06YzpmdW5jdGlvbihlLHQscil7aWYobyhlKSx0PWEodCksbyhyKSxpKXRyeXtyZXR1cm4gYyhlLHQscil9Y2F0Y2goZSl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBuZXcgbChcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkXCIpO3JldHVyblwidmFsdWVcImluIHImJihlW3RdPXIudmFsdWUpLGV9fSx7XCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCI6MjI3LFwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCI6MjQ3LFwiLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lXCI6Mjc5LFwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleVwiOjM0NixcIi4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Z1wiOjM1Mn1dLDMwOTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlXCIpLG89ZShcIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvclwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksbD1lKFwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleVwiKSxjPWUoXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiKSx1PWUoXCIuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmVcIiksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3IuZj1uP2g6ZnVuY3Rpb24oZSx0KXtpZihlPWEoZSksdD1sKHQpLHUpdHJ5e3JldHVybiBoKGUsdCl9Y2F0Y2goZSl7fWlmKGMoZSx0KSlyZXR1cm4gbyghaShzLmYsZSx0KSxlW3RdKX19LHtcIi4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvclwiOjI0MixcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiOjI0NyxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCI6MjY0LFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmVcIjoyNzksXCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGVcIjozMTcsXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIjozNDEsXCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5XCI6MzQ2fV0sMzEwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9jbGFzc29mLXJhd1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzXCIpLmYsbz1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZVwiKSxhPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTt0LmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gYSYmXCJXaW5kb3dcIj09PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBzKGUpfWNhdGNoKGUpe3JldHVybiBvKGEpfX0oZSk6cyhpKGUpKX19LHtcIi4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGVcIjoyMzAsXCIuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXdcIjoyMzUsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXNcIjozMTEsXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIjozNDF9XSwzMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsXCIpLGk9ZShcIi4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzXCIpLmNvbmNhdChcImxlbmd0aFwiLFwicHJvdG90eXBlXCIpO3IuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxpKX19LHtcIi4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzXCI6MjU4LFwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsXCI6MzE1fV0sMzEyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ci5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LHt9XSwzMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLHM9ZShcIi4uL2ludGVybmFscy90by1vYmplY3RcIiksbz1lKFwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXlcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlclwiKSxsPW8oXCJJRV9QUk9UT1wiKSxjPU9iamVjdCx1PWMucHJvdG90eXBlO3QuZXhwb3J0cz1hP2MuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9cyhlKTtpZihuKHQsbCkpcmV0dXJuIHRbbF07dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gaShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIGM/dTpudWxsfX0se1wiLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlclwiOjIzOSxcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCI6Mjc1LFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCI6Mjg1LFwiLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXlcIjozMzIsXCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0XCI6MzQ0fV0sMzE0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIik7dC5leHBvcnRzPW4oe30uaXNQcm90b3R5cGVPZil9LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjh9XSwzMTU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiKSxpPWUoXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksbz1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzXCIpLmluZGV4T2YsYT1lKFwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzXCIpLGw9bihbXS5wdXNoKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXMoZSksYz0wLHU9W107Zm9yKHIgaW4gbikhaShhLHIpJiZpKG4scikmJmwodSxyKTtmb3IoO3QubGVuZ3RoPmM7KWkobixyPXRbYysrXSkmJih+byh1LHIpfHxsKHUscikpO3JldHVybiB1fX0se1wiLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzXCI6MjI4LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpc1wiOjI2OCxcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCI6Mjc1LFwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzXCI6Mjc2LFwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0XCI6MzQxfV0sMzE2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5c1wiKTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsaSl9fSx7XCIuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5c1wiOjI1OCxcIi4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbFwiOjMxNX1dLDMxNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzPWkmJiFuLmNhbGwoezE6Mn0sMSk7ci5mPXM/ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpufSx7fV0sMzE4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3JcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2FuLW9iamVjdFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGVcIik7dC5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KFwiX19wcm90b19fXCJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIixcInNldFwiKSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBpKHIpLHMobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSx7XCIuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGVcIjoyMjQsXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCI6MjI3LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvclwiOjI2Nn1dLDMxOTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLHM9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksbz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mXCIpLGE9ZShcIi4uL2ludGVybmFscy9vYmplY3Qta2V5c1wiKSxsPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksYz1zKGUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGVcIikuZiksdT1zKFtdLnB1c2gpLGg9biYmaSgoZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlWzJdPTIsIWMoZSwyKX0pKSxmPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHIsaT1sKHQpLHM9YShpKSxmPWgmJm51bGw9PT1vKGkpLGQ9cy5sZW5ndGgscD0wLG09W107ZD5wOylyPXNbcCsrXSxuJiYhKGY/ciBpbiBpOmMoaSxyKSl8fHUobSxlP1tyLGlbcl1dOmlbcl0pO3JldHVybiBtfX07dC5leHBvcnRzPXtlbnRyaWVzOmYoITApLHZhbHVlczpmKCExKX19LHtcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiOjI0NyxcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MCxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2ZcIjozMTMsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXNcIjozMTYsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGVcIjozMTcsXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIjozNDF9XSwzMjA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLHM9ZShcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIiksbz1UeXBlRXJyb3I7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYTtpZihcInN0cmluZ1wiPT09dCYmaShyPWUudG9TdHJpbmcpJiYhcyhhPW4ocixlKSkpcmV0dXJuIGE7aWYoaShyPWUudmFsdWVPZikmJiFzKGE9bihyLGUpKSlyZXR1cm4gYTtpZihcInN0cmluZ1wiIT09dCYmaShyPWUudG9TdHJpbmcpJiYhcyhhPW4ocixlKSkpcmV0dXJuIGE7dGhyb3cgbmV3IG8oXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSx7XCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiOjI2NCxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIjoyODl9XSwzMjE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLHM9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lc1wiKSxvPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9sc1wiKSxhPWUoXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCIpLGw9aShbXS5jb25jYXQpO3QuZXhwb3J0cz1uKFwiUmVmbGVjdFwiLFwib3duS2V5c1wiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9cy5mKGEoZSkpLHI9by5mO3JldHVybiByP2wodCxyKGUpKTp0fX0se1wiLi4vaW50ZXJuYWxzL2FuLW9iamVjdFwiOjIyNyxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCI6MjY5LFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzXCI6MzExLFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHNcIjozMTJ9XSwzMjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKTt0LmV4cG9ydHM9bn0se1wiLi4vaW50ZXJuYWxzL2dsb2JhbFwiOjI3NH1dLDMyMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJue2Vycm9yOiExLHZhbHVlOmUoKX19Y2F0Y2goZSl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmV9fX19LHt9XSwzMjQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3JcIikscz1lKFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCIpLG89ZShcIi4uL2ludGVybmFscy9pcy1mb3JjZWRcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlXCIpLGw9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxjPWUoXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXJcIiksdT1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vXCIpLGg9ZShcIi4uL2ludGVybmFscy9pcy1wdXJlXCIpLGY9ZShcIi4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvblwiKSxkPWkmJmkucHJvdG90eXBlLHA9bChcInNwZWNpZXNcIiksbT0hMSxiPXMobi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpLGc9byhcIlByb21pc2VcIiwoZnVuY3Rpb24oKXt2YXIgZT1hKGkpLHQ9ZSE9PVN0cmluZyhpKTtpZighdCYmNjY9PT1mKXJldHVybiEwO2lmKGgmJighZC5jYXRjaHx8IWQuZmluYWxseSkpcmV0dXJuITA7aWYoIWZ8fGY8NTF8fCEvbmF0aXZlIGNvZGUvLnRlc3QoZSkpe3ZhciByPW5ldyBpKChmdW5jdGlvbihlKXtlKDEpfSkpLG49ZnVuY3Rpb24oZSl7ZSgoZnVuY3Rpb24oKXt9KSwoZnVuY3Rpb24oKXt9KSl9O2lmKChyLmNvbnN0cnVjdG9yPXt9KVtwXT1uLCEobT1yLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBuKSlyZXR1cm4hMH1yZXR1cm4hdCYmKGN8fHUpJiYhYn0pKTt0LmV4cG9ydHM9e0NPTlNUUlVDVE9SOmcsUkVKRUNUSU9OX0VWRU5UOmIsU1VCQ0xBU1NJTkc6bX19LHtcIi4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlclwiOjI1MCxcIi4uL2ludGVybmFscy9lbmdpbmUtaXMtZGVub1wiOjI1MSxcIi4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvblwiOjI1NyxcIi4uL2ludGVybmFscy9nbG9iYWxcIjoyNzQsXCIuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2VcIjoyODEsXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIjoyODUsXCIuLi9pbnRlcm5hbHMvaXMtZm9yY2VkXCI6Mjg3LFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIjoyOTAsXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3JcIjozMjUsXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwzMjU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKTt0LmV4cG9ydHM9bi5Qcm9taXNlfSx7XCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0fV0sMzI2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eVwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKGUpLGkodCkmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciByPXMuZihlKTtyZXR1cm4oMCxyLnJlc29sdmUpKHQpLHIucHJvbWlzZX19LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvaXMtb2JqZWN0XCI6Mjg5LFwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHlcIjozMDN9XSwzMjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yXCIpLGk9ZShcIi4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb25cIikscz1lKFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCIpLkNPTlNUUlVDVE9SO3QuZXhwb3J0cz1zfHwhaSgoZnVuY3Rpb24oZSl7bi5hbGwoZSkudGhlbih2b2lkIDAsKGZ1bmN0aW9uKCl7fSkpfSkpfSx7XCIuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uXCI6MjM0LFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzI0LFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yXCI6MzI1fV0sMzI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07bi5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt2YXIgdD17aXRlbTplLG5leHQ6bnVsbH0scj10aGlzLnRhaWw7cj9yLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dH0sZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5oZWFkO2lmKGUpcmV0dXJuIG51bGw9PT0odGhpcy5oZWFkPWUubmV4dCkmJih0aGlzLnRhaWw9bnVsbCksZS5pdGVtfX0sdC5leHBvcnRzPW59LHt9XSwzMjk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkXCIpLGk9VHlwZUVycm9yO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXRocm93IG5ldyBpKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIrZSk7cmV0dXJuIGV9fSx7XCIuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWRcIjoyODh9XSwzMzA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yXCIpLHM9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIiksYT1zKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTtvJiZ0JiYhdFthXSYmaSh0LGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LHtcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3JcIjoyNDQsXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCI6MjY5LFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3fV0sMzMxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCIpLmYsaT1lKFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIikscz1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpKFwidG9TdHJpbmdUYWdcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhciYmKGU9ZS5wcm90b3R5cGUpLGUmJiFpKGUscykmJm4oZSxzLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0se1wiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOCxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDMzMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCIpLGk9ZShcIi4uL2ludGVybmFscy91aWRcIikscz1uKFwia2V5c1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHNbZV18fChzW2VdPWkoZSkpfX0se1wiLi4vaW50ZXJuYWxzL3NoYXJlZFwiOjMzNCxcIi4uL2ludGVybmFscy91aWRcIjozNTB9XSwzMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eVwiKSxzPW5bXCJfX2NvcmUtanNfc2hhcmVkX19cIl18fGkoXCJfX2NvcmUtanNfc2hhcmVkX19cIix7fSk7dC5leHBvcnRzPXN9LHtcIi4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5XCI6MjQ2LFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiOjI3NH1dLDMzNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlXCIpOyh0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaVtlXXx8KGlbZV09dm9pZCAwIT09dD90Ont9KX0pKFwidmVyc2lvbnNcIixbXSkucHVzaCh7dmVyc2lvbjpcIjMuMzMuMFwiLG1vZGU6bj9cInB1cmVcIjpcImdsb2JhbFwiLGNvcHlyaWdodDpcIlxceGE5IDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwiLGxpY2Vuc2U6XCJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMzLjAvTElDRU5TRVwiLHNvdXJjZTpcImh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzXCJ9KX0se1wiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIjoyOTAsXCIuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlXCI6MzMzfV0sMzM1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3JcIikscz1lKFwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkXCIpLG89ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1uKGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHxzKHI9bihhKVtvXSk/dDppKHIpfX0se1wiLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3JcIjoyMjMsXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCI6MjI3LFwiLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkXCI6Mjg4LFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3fV0sMzM2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvblwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIikscz1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKS5TdHJpbmc7dC5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIWkoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKFwic3ltYm9sIGRldGVjdGlvblwiKTtyZXR1cm4hcyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmbiYmbjw0MX0pKX0se1wiLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uXCI6MjU3LFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCI6MjYwLFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiOjI3NH1dLDMzNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCIpLHM9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluXCIpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPWkoXCJTeW1ib2xcIiksdD1lJiZlLnByb3RvdHlwZSxyPXQmJnQudmFsdWVPZixhPXMoXCJ0b1ByaW1pdGl2ZVwiKTt0JiYhdFthXSYmbyh0LGEsKGZ1bmN0aW9uKGUpe3JldHVybiBuKHIsdGhpcyl9KSx7YXJpdHk6MX0pfX0se1wiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pblwiOjI0NSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCI6MjY0LFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiOjI2OSxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiOjM1N31dLDMzODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvblwiKTt0LmV4cG9ydHM9biYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3J9LHtcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzM2fV0sMzM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxzLG8sYT1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKSxsPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHlcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dFwiKSx1PWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksaD1lKFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIiksZj1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLGQ9ZShcIi4uL2ludGVybmFscy9odG1sXCIpLHA9ZShcIi4uL2ludGVybmFscy9hcnJheS1zbGljZVwiKSxtPWUoXCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnRcIiksYj1lKFwiLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGhcIiksZz1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3NcIikseT1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlXCIpLHY9YS5zZXRJbW1lZGlhdGUsdz1hLmNsZWFySW1tZWRpYXRlLF89YS5wcm9jZXNzLHg9YS5EaXNwYXRjaCxrPWEuRnVuY3Rpb24sUz1hLk1lc3NhZ2VDaGFubmVsLE09YS5TdHJpbmcsQz0wLFQ9e307ZigoZnVuY3Rpb24oKXtuPWEubG9jYXRpb259KSk7dmFyIEU9ZnVuY3Rpb24oZSl7aWYoaChULGUpKXt2YXIgdD1UW2VdO2RlbGV0ZSBUW2VdLHQoKX19LEE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7RShlKX19LFI9ZnVuY3Rpb24oZSl7RShlLmRhdGEpfSxPPWZ1bmN0aW9uKGUpe2EucG9zdE1lc3NhZ2UoTShlKSxuLnByb3RvY29sK1wiLy9cIituLmhvc3QpfTt2JiZ3fHwodj1mdW5jdGlvbihlKXtiKGFyZ3VtZW50cy5sZW5ndGgsMSk7dmFyIHQ9dShlKT9lOmsoZSkscj1wKGFyZ3VtZW50cywxKTtyZXR1cm4gVFsrK0NdPWZ1bmN0aW9uKCl7bCh0LHZvaWQgMCxyKX0saShDKSxDfSx3PWZ1bmN0aW9uKGUpe2RlbGV0ZSBUW2VdfSx5P2k9ZnVuY3Rpb24oZSl7Xy5uZXh0VGljayhBKGUpKX06eCYmeC5ub3c/aT1mdW5jdGlvbihlKXt4Lm5vdyhBKGUpKX06UyYmIWc/KG89KHM9bmV3IFMpLnBvcnQyLHMucG9ydDEub25tZXNzYWdlPVIsaT1jKG8ucG9zdE1lc3NhZ2UsbykpOmEuYWRkRXZlbnRMaXN0ZW5lciYmdShhLnBvc3RNZXNzYWdlKSYmIWEuaW1wb3J0U2NyaXB0cyYmbiYmXCJmaWxlOlwiIT09bi5wcm90b2NvbCYmIWYoTyk/KGk9TyxhLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsUiwhMSkpOmk9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIG0oXCJzY3JpcHRcIik/ZnVuY3Rpb24oZSl7ZC5hcHBlbmRDaGlsZChtKFwic2NyaXB0XCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtkLnJlbW92ZUNoaWxkKHRoaXMpLEUoZSl9fTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KEEoZSksMCl9KSx0LmV4cG9ydHM9e3NldDp2LGNsZWFyOnd9fSx7XCIuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2VcIjoyMzEsXCIuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnRcIjoyNDksXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvc1wiOjI1MyxcIi4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZVwiOjI1NCxcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MCxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseVwiOjI2MSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHRcIjoyNjIsXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvaHRtbFwiOjI3OCxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoXCI6MzUzfV0sMzQwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5XCIpLGk9TWF0aC5tYXgscz1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/aShyK3QsMCk6cyhyLHQpfX0se1wiLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHlcIjozNDJ9XSwzNDE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0XCIpLGk9ZShcIi4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGVcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGkoZSkpfX0se1wiLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0XCI6MjgwLFwiLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZVwiOjMyOX1dLDM0MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvbWF0aC10cnVuY1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6bih0KX19LHtcIi4uL2ludGVybmFscy9tYXRoLXRydW5jXCI6MzAxfV0sMzQzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5XCIpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/aShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSx7XCIuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eVwiOjM0Mn1dLDM0NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlXCIpLGk9T2JqZWN0O3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShuKGUpKX19LHtcIi4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGVcIjozMjl9XSwzNDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaXMtc3ltYm9sXCIpLG89ZShcIi4uL2ludGVybmFscy9nZXQtbWV0aG9kXCIpLGE9ZShcIi4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmVcIiksbD1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpLGM9VHlwZUVycm9yLHU9bChcInRvUHJpbWl0aXZlXCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFpKGUpfHxzKGUpKXJldHVybiBlO3ZhciByLGw9byhlLHUpO2lmKGwpe2lmKHZvaWQgMD09PXQmJih0PVwiZGVmYXVsdFwiKSxyPW4obCxlLHQpLCFpKHIpfHxzKHIpKXJldHVybiByO3Rocm93IG5ldyBjKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfXJldHVybiB2b2lkIDA9PT10JiYodD1cIm51bWJlclwiKSxhKGUsdCl9fSx7XCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiOjI2NCxcIi4uL2ludGVybmFscy9nZXQtbWV0aG9kXCI6MjczLFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiOjI4OSxcIi4uL2ludGVybmFscy9pcy1zeW1ib2xcIjoyOTIsXCIuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlXCI6MzIwLFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3fV0sMzQ2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy90by1wcmltaXRpdmVcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlLFwic3RyaW5nXCIpO3JldHVybiBpKHQpP3Q6dCtcIlwifX0se1wiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbFwiOjI5MixcIi4uL2ludGVybmFscy90by1wcmltaXRpdmVcIjozNDV9XSwzNDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj17fTtuW2UoXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIikoXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCIsdC5leHBvcnRzPVwiW29iamVjdCB6XVwiPT09U3RyaW5nKG4pfSx7XCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwzNDg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2NsYXNzb2ZcIiksaT1TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKFwiU3ltYm9sXCI9PT1uKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZ1wiKTtyZXR1cm4gaShlKX19LHtcIi4uL2ludGVybmFscy9jbGFzc29mXCI6MjM2fV0sMzQ5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49U3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIG4oZSl9Y2F0Y2goZSl7cmV0dXJuXCJPYmplY3RcIn19fSx7fV0sMzUwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksaT0wLHM9TWF0aC5yYW5kb20oKSxvPW4oMS4udG9TdHJpbmcpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm5cIlN5bWJvbChcIisodm9pZCAwPT09ZT9cIlwiOmUpK1wiKV9cIitvKCsraStzLDM2KX19LHtcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjh9XSwzNTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIik7dC5leHBvcnRzPW4mJiFTeW1ib2wuc2hhbSYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcn0se1wiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIjozMzZ9XSwzNTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCIpLGk9ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKTt0LmV4cG9ydHM9biYmaSgoZnVuY3Rpb24oKXtyZXR1cm4gNDIhPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksXCJwcm90b3R5cGVcIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSl9LHtcIi4uL2ludGVybmFscy9kZXNjcmlwdG9yc1wiOjI0NyxcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MH1dLDM1MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPVR5cGVFcnJvcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihlPHQpdGhyb3cgbmV3IG4oXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKTtyZXR1cm4gZX19LHt9XSwzNTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIikscz1uLldlYWtNYXA7dC5leHBvcnRzPWkocykmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcocykpfSx7XCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCI6Mjg1fV0sMzU1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9wYXRoXCIpLGk9ZShcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCIpLHM9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkXCIpLG89ZShcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCIpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4uU3ltYm9sfHwobi5TeW1ib2w9e30pO2kodCxlKXx8byh0LGUse3ZhbHVlOnMuZihlKX0pfX0se1wiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOCxcIi4uL2ludGVybmFscy9wYXRoXCI6MzIyLFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWRcIjozNTZ9XSwzNTY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCIpO3IuZj1ufSx7XCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2xcIjozNTd9XSwzNTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCIpLHM9ZShcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCIpLG89ZShcIi4uL2ludGVybmFscy91aWRcIiksYT1lKFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIiksbD1lKFwiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkXCIpLGM9bi5TeW1ib2wsdT1pKFwid2tzXCIpLGg9bD9jLmZvcnx8YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG87dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzKHUsZSl8fCh1W2VdPWEmJnMoYyxlKT9jW2VdOmgoXCJTeW1ib2wuXCIrZSkpLHVbZV19fSx7XCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIjoyNzUsXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCI6MzM0LFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIjozMzYsXCIuLi9pbnRlcm5hbHMvdWlkXCI6MzUwLFwiLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkXCI6MzUxfV0sMzU4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvblwiKS5maW5kSW5kZXgscz1lKFwiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlc1wiKSxvPSEwO1wiZmluZEluZGV4XCJpbltdJiZBcnJheSgxKS5maW5kSW5kZXgoKGZ1bmN0aW9uKCl7bz0hMX0pKSxuKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpvfSx7ZmluZEluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscyhcImZpbmRJbmRleFwiKX0se1wiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlc1wiOjIyNSxcIi4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb25cIjoyMjksXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5fV0sMzU5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvblwiKS5maW5kLHM9ZShcIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXNcIiksbz0hMDtcImZpbmRcImluW10mJkFycmF5KDEpLmZpbmQoKGZ1bmN0aW9uKCl7bz0hMX0pKSxuKHt0YXJnZXQ6XCJBcnJheVwiLHByb3RvOiEwLGZvcmNlZDpvfSx7ZmluZDpmdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHMoXCJmaW5kXCIpfSx7XCIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzXCI6MjI1LFwiLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvblwiOjIyOSxcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTl9XSwzNjA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXNcIikuaW5jbHVkZXMscz1lKFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCIpLG89ZShcIi4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXNcIik7bih7dGFyZ2V0OlwiQXJyYXlcIixwcm90bzohMCxmb3JjZWQ6cygoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkoMSkuaW5jbHVkZXMoKX0pKX0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBpKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksbyhcImluY2x1ZGVzXCIpfSx7XCIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzXCI6MjI1LFwiLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzXCI6MjI4LFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9mYWlsc1wiOjI2MH1dLDM2MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlc1wiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzXCIpLG89ZShcIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZVwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiKS5mLGw9ZShcIi4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmVcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3RcIiksdT1lKFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIiksaD1lKFwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCIpLGY9by5zZXQsZD1vLmdldHRlckZvcihcIkFycmF5IEl0ZXJhdG9yXCIpO3QuZXhwb3J0cz1sKEFycmF5LFwiQXJyYXlcIiwoZnVuY3Rpb24oZSx0KXtmKHRoaXMse3R5cGU6XCJBcnJheSBJdGVyYXRvclwiLHRhcmdldDpuKGUpLGluZGV4OjAsa2luZDp0fSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1kKHRoaXMpLHQ9ZS50YXJnZXQscj1lLmtpbmQsbj1lLmluZGV4Kys7aWYoIXR8fG4+PXQubGVuZ3RoKXJldHVybiBlLnRhcmdldD12b2lkIDAsYyh2b2lkIDAsITApO3N3aXRjaChyKXtjYXNlXCJrZXlzXCI6cmV0dXJuIGMobiwhMSk7Y2FzZVwidmFsdWVzXCI6cmV0dXJuIGModFtuXSwhMSl9cmV0dXJuIGMoW24sdFtuXV0sITEpfSksXCJ2YWx1ZXNcIik7dmFyIHA9cy5Bcmd1bWVudHM9cy5BcnJheTtpZihpKFwia2V5c1wiKSxpKFwidmFsdWVzXCIpLGkoXCJlbnRyaWVzXCIpLCF1JiZoJiZcInZhbHVlc1wiIT09cC5uYW1lKXRyeXthKHAsXCJuYW1lXCIse3ZhbHVlOlwidmFsdWVzXCJ9KX1jYXRjaChlKXt9fSx7XCIuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzXCI6MjI1LFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3RcIjoyNDAsXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGVcIjoyODIsXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiOjI5MCxcIi4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmVcIjoyOTYsXCIuLi9pbnRlcm5hbHMvaXRlcmF0b3JzXCI6Mjk4LFwiLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHlcIjozMDgsXCIuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3RcIjozNDF9XSwzNjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCIpLHM9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLGw9ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKSxjPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksdT1lKFwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbFwiKSxoPWUoXCIuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2VcIiksZj1lKFwiLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uXCIpLGQ9ZShcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCIpLHA9U3RyaW5nLG09aShcIkpTT05cIixcInN0cmluZ2lmeVwiKSxiPWEoLy4vLmV4ZWMpLGc9YShcIlwiLmNoYXJBdCkseT1hKFwiXCIuY2hhckNvZGVBdCksdj1hKFwiXCIucmVwbGFjZSksdz1hKDEuLnRvU3RyaW5nKSxfPS9bXFx1RDgwMC1cXHVERkZGXS9nLHg9L15bXFx1RDgwMC1cXHVEQkZGXSQvLGs9L15bXFx1REMwMC1cXHVERkZGXSQvLFM9IWR8fGwoKGZ1bmN0aW9uKCl7dmFyIGU9aShcIlN5bWJvbFwiKShcInN0cmluZ2lmeSBkZXRlY3Rpb25cIik7cmV0dXJuXCJbbnVsbF1cIiE9PW0oW2VdKXx8XCJ7fVwiIT09bSh7YTplfSl8fFwie31cIiE9PW0oT2JqZWN0KGUpKX0pKSxNPWwoKGZ1bmN0aW9uKCl7cmV0dXJuJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInIT09bShcIlxcdWRmMDZcXHVkODM0XCIpfHwnXCJcXFxcdWRlYWRcIichPT1tKFwiXFx1ZGVhZFwiKX0pKSxDPWZ1bmN0aW9uKGUsdCl7dmFyIHI9aChhcmd1bWVudHMpLG49Zih0KTtpZihjKG4pfHx2b2lkIDAhPT1lJiYhdShlKSlyZXR1cm4gclsxXT1mdW5jdGlvbihlLHQpe2lmKGMobikmJih0PW8obix0aGlzLHAoZSksdCkpLCF1KHQpKXJldHVybiB0fSxzKG0sbnVsbCxyKX0sVD1mdW5jdGlvbihlLHQscil7dmFyIG49ZyhyLHQtMSksaT1nKHIsdCsxKTtyZXR1cm4gYih4LGUpJiYhYihrLGkpfHxiKGssZSkmJiFiKHgsbik/XCJcXFxcdVwiK3coeShlLDApLDE2KTplfTttJiZuKHt0YXJnZXQ6XCJKU09OXCIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpTfHxNfSx7c3RyaW5naWZ5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1oKGFyZ3VtZW50cyksaT1zKFM/QzptLG51bGwsbik7cmV0dXJuIE0mJlwic3RyaW5nXCI9PXR5cGVvZiBpP3YoaSxfLFQpOml9fSl9LHtcIi4uL2ludGVybmFscy9hcnJheS1zbGljZVwiOjIzMSxcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTksXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHlcIjoyNjEsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiOjI2NCxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCI6MjY5LFwiLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uXCI6MjcyLFwiLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlXCI6Mjg1LFwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbFwiOjI5MixcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzM2fV0sMzYzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZShcIi4uL2ludGVybmFscy9leHBvcnRcIikoe3RhcmdldDpcIk51bWJlclwiLHN0YXQ6ITB9LHtpc05hTjpmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OX1dLDM2NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCIpLGk9ZShcIi4uL2ludGVybmFscy9vYmplY3QtYXNzaWduXCIpO24oe3RhcmdldDpcIk9iamVjdFwiLHN0YXQ6ITAsYXJpdHk6Mixmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PWl9LHthc3NpZ246aX0pfSx7XCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ25cIjozMDV9XSwzNjU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvblwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIiksbz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHNcIiksYT1lKFwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdFwiKTtuKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohaXx8cygoZnVuY3Rpb24oKXtvLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oZSl7dmFyIHQ9by5mO3JldHVybiB0P3QoYShlKSk6W119fSl9LHtcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTksXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9sc1wiOjMxMixcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzM2LFwiLi4vaW50ZXJuYWxzL3RvLW9iamVjdFwiOjM0NH1dLDM2NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCIpLGk9ZShcIi4uL2ludGVybmFscy90by1vYmplY3RcIikscz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzXCIpO24oe3RhcmdldDpcIk9iamVjdFwiLHN0YXQ6ITAsZm9yY2VkOmUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIikoKGZ1bmN0aW9uKCl7cygxKX0pKX0se2tleXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoaShlKSl9fSl9LHtcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTksXCIuLi9pbnRlcm5hbHMvZmFpbHNcIjoyNjAsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXNcIjozMTYsXCIuLi9pbnRlcm5hbHMvdG8tb2JqZWN0XCI6MzQ0fV0sMzY3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC10by1hcnJheVwiKS52YWx1ZXM7bih7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMH0se3ZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gaShlKX19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXlcIjozMTl9XSwzNjg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eVwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvcGVyZm9ybVwiKSxsPWUoXCIuLi9pbnRlcm5hbHMvaXRlcmF0ZVwiKTtuKHt0YXJnZXQ6XCJQcm9taXNlXCIsc3RhdDohMCxmb3JjZWQ6ZShcIi4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvblwiKX0se2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9by5mKHQpLG49ci5yZXNvbHZlLGM9ci5yZWplY3QsdT1hKChmdW5jdGlvbigpe3ZhciByPXModC5yZXNvbHZlKSxvPVtdLGE9MCx1PTE7bChlLChmdW5jdGlvbihlKXt2YXIgcz1hKyssbD0hMTt1KyssaShyLHQsZSkudGhlbigoZnVuY3Rpb24oZSl7bHx8KGw9ITAsb1tzXT1lLC0tdXx8bihvKSl9KSxjKX0pKSwtLXV8fG4obyl9KSk7cmV0dXJuIHUuZXJyb3ImJmModS52YWx1ZSksci5wcm9taXNlfX0pfSx7XCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiOjIyMixcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTksXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiOjI2NCxcIi4uL2ludGVybmFscy9pdGVyYXRlXCI6MjkzLFwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHlcIjozMDMsXCIuLi9pbnRlcm5hbHMvcGVyZm9ybVwiOjMyMyxcIi4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvblwiOjMyN31dLDM2OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1wdXJlXCIpLHM9ZShcIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvblwiKS5DT05TVFJVQ1RPUixvPWUoXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3JcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxsPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksYz1lKFwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pblwiKSx1PW8mJm8ucHJvdG90eXBlO2lmKG4oe3RhcmdldDpcIlByb21pc2VcIixwcm90bzohMCxmb3JjZWQ6cyxyZWFsOiEwfSx7Y2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksIWkmJmwobykpe3ZhciBoPWEoXCJQcm9taXNlXCIpLnByb3RvdHlwZS5jYXRjaDt1LmNhdGNoIT09aCYmYyh1LFwiY2F0Y2hcIixoLHt1bnNhZmU6ITB9KX19LHtcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiOjI2OSxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9pcy1wdXJlXCI6MjkwLFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzI0LFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yXCI6MzI1fV0sMzcwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saSxzLG89ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlXCIpLGM9ZShcIi4uL2ludGVybmFscy9nbG9iYWxcIiksdT1lKFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIiksaD1lKFwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pblwiKSxmPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2ZcIiksZD1lKFwiLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnXCIpLHA9ZShcIi4uL2ludGVybmFscy9zZXQtc3BlY2llc1wiKSxtPWUoXCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiKSxiPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksZz1lKFwiLi4vaW50ZXJuYWxzL2lzLW9iamVjdFwiKSx5PWUoXCIuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2VcIiksdj1lKFwiLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3JcIiksdz1lKFwiLi4vaW50ZXJuYWxzL3Rhc2tcIikuc2V0LF89ZShcIi4uL2ludGVybmFscy9taWNyb3Rhc2tcIikseD1lKFwiLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9yc1wiKSxrPWUoXCIuLi9pbnRlcm5hbHMvcGVyZm9ybVwiKSxTPWUoXCIuLi9pbnRlcm5hbHMvcXVldWVcIiksTT1lKFwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlXCIpLEM9ZShcIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvclwiKSxUPWUoXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIiksRT1lKFwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHlcIiksQT1ULkNPTlNUUlVDVE9SLFI9VC5SRUpFQ1RJT05fRVZFTlQsTz1ULlNVQkNMQVNTSU5HLGo9TS5nZXR0ZXJGb3IoXCJQcm9taXNlXCIpLEk9TS5zZXQsTj1DJiZDLnByb3RvdHlwZSxQPUMsQj1OLEQ9Yy5UeXBlRXJyb3IsRj1jLmRvY3VtZW50LEw9Yy5wcm9jZXNzLHo9RS5mLFU9eiwkPSEhKEYmJkYuY3JlYXRlRXZlbnQmJmMuZGlzcGF0Y2hFdmVudCksSD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4hKCFnKGUpfHwhYih0PWUudGhlbikpJiZ0fSxWPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHM9dC52YWx1ZSxvPTE9PT10LnN0YXRlLGE9bz9lLm9rOmUuZmFpbCxsPWUucmVzb2x2ZSxjPWUucmVqZWN0LGg9ZS5kb21haW47dHJ5e2E/KG98fCgyPT09dC5yZWplY3Rpb24mJlkodCksdC5yZWplY3Rpb249MSksITA9PT1hP3I9czooaCYmaC5lbnRlcigpLHI9YShzKSxoJiYoaC5leGl0KCksaT0hMCkpLHI9PT1lLnByb21pc2U/YyhuZXcgRChcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihuPUgocikpP3UobixyLGwsYyk6bChyKSk6YyhzKX1jYXRjaChlKXtoJiYhaSYmaC5leGl0KCksYyhlKX19LHE9ZnVuY3Rpb24oZSx0KXtlLm5vdGlmaWVkfHwoZS5ub3RpZmllZD0hMCxfKChmdW5jdGlvbigpe2Zvcih2YXIgcixuPWUucmVhY3Rpb25zO3I9bi5nZXQoKTspVihyLGUpO2Uubm90aWZpZWQ9ITEsdCYmIWUucmVqZWN0aW9uJiZYKGUpfSkpKX0sVz1mdW5jdGlvbihlLHQscil7dmFyIG4saTskPygobj1GLmNyZWF0ZUV2ZW50KFwiRXZlbnRcIikpLnByb21pc2U9dCxuLnJlYXNvbj1yLG4uaW5pdEV2ZW50KGUsITEsITApLGMuZGlzcGF0Y2hFdmVudChuKSk6bj17cHJvbWlzZTp0LHJlYXNvbjpyfSwhUiYmKGk9Y1tcIm9uXCIrZV0pP2kobik6XCJ1bmhhbmRsZWRyZWplY3Rpb25cIj09PWUmJngoXCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb25cIixyKX0sWD1mdW5jdGlvbihlKXt1KHcsYywoZnVuY3Rpb24oKXt2YXIgdCxyPWUuZmFjYWRlLG49ZS52YWx1ZTtpZihLKGUpJiYodD1rKChmdW5jdGlvbigpe2w/TC5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsbixyKTpXKFwidW5oYW5kbGVkcmVqZWN0aW9uXCIscixuKX0pKSxlLnJlamVjdGlvbj1sfHxLKGUpPzI6MSx0LmVycm9yKSl0aHJvdyB0LnZhbHVlfSkpfSxLPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5yZWplY3Rpb24mJiFlLnBhcmVudH0sWT1mdW5jdGlvbihlKXt1KHcsYywoZnVuY3Rpb24oKXt2YXIgdD1lLmZhY2FkZTtsP0wuZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIix0KTpXKFwicmVqZWN0aW9uaGFuZGxlZFwiLHQsZS52YWx1ZSl9KSl9LFo9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihuKXtlKHQsbixyKX19LEc9ZnVuY3Rpb24oZSx0LHIpe2UuZG9uZXx8KGUuZG9uZT0hMCxyJiYoZT1yKSxlLnZhbHVlPXQsZS5zdGF0ZT0yLHEoZSwhMCkpfSxKPWZ1bmN0aW9uKGUsdCxyKXtpZighZS5kb25lKXtlLmRvbmU9ITAsciYmKGU9cik7dHJ5e2lmKGUuZmFjYWRlPT09dCl0aHJvdyBuZXcgRChcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO3ZhciBuPUgodCk7bj9fKChmdW5jdGlvbigpe3ZhciByPXtkb25lOiExfTt0cnl7dShuLHQsWihKLHIsZSksWihHLHIsZSkpfWNhdGNoKHQpe0cocix0LGUpfX0pKTooZS52YWx1ZT10LGUuc3RhdGU9MSxxKGUsITEpKX1jYXRjaCh0KXtHKHtkb25lOiExfSx0LGUpfX19O2lmKEEmJihCPShQPWZ1bmN0aW9uKGUpe3kodGhpcyxCKSxtKGUpLHUobix0aGlzKTt2YXIgdD1qKHRoaXMpO3RyeXtlKFooSix0KSxaKEcsdCkpfWNhdGNoKGUpe0codCxlKX19KS5wcm90b3R5cGUsKG49ZnVuY3Rpb24oZSl7SSh0aGlzLHt0eXBlOlwiUHJvbWlzZVwiLGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpuZXcgUyxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT1oKEIsXCJ0aGVuXCIsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9aih0aGlzKSxuPXoodih0aGlzLFApKTtyZXR1cm4gci5wYXJlbnQ9ITAsbi5vaz0hYihlKXx8ZSxuLmZhaWw9Yih0KSYmdCxuLmRvbWFpbj1sP0wuZG9tYWluOnZvaWQgMCwwPT09ci5zdGF0ZT9yLnJlYWN0aW9ucy5hZGQobik6XygoZnVuY3Rpb24oKXtWKG4scil9KSksbi5wcm9taXNlfSkpLGk9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbix0PWooZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPVooSix0KSx0aGlzLnJlamVjdD1aKEcsdCl9LEUuZj16PWZ1bmN0aW9uKGUpe3JldHVybiBlPT09UHx8dm9pZCAwPT09ZT9uZXcgaShlKTpVKGUpfSwhYSYmYihDKSYmTiE9PU9iamVjdC5wcm90b3R5cGUpKXtzPU4udGhlbixPfHxoKE4sXCJ0aGVuXCIsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztyZXR1cm4gbmV3IFAoKGZ1bmN0aW9uKGUsdCl7dShzLHIsZSx0KX0pKS50aGVuKGUsdCl9KSx7dW5zYWZlOiEwfSk7dHJ5e2RlbGV0ZSBOLmNvbnN0cnVjdG9yfWNhdGNoKGUpe31mJiZmKE4sQil9byh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOkF9LHtQcm9taXNlOlB9KSxkKFAsXCJQcm9taXNlXCIsITEsITApLHAoXCJQcm9taXNlXCIpfSx7XCIuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZVwiOjIyMixcIi4uL2ludGVybmFscy9hbi1pbnN0YW5jZVwiOjIyNixcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGVcIjoyNTQsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCI6Mjc0LFwiLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9yc1wiOjI3NyxcIi4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZVwiOjI4MixcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9pcy1vYmplY3RcIjoyODksXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiOjI5MCxcIi4uL2ludGVybmFscy9taWNyb3Rhc2tcIjozMDIsXCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eVwiOjMwMyxcIi4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZlwiOjMxOCxcIi4uL2ludGVybmFscy9wZXJmb3JtXCI6MzIzLFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzI0LFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yXCI6MzI1LFwiLi4vaW50ZXJuYWxzL3F1ZXVlXCI6MzI4LFwiLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzXCI6MzMwLFwiLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnXCI6MzMxLFwiLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3JcIjozMzUsXCIuLi9pbnRlcm5hbHMvdGFza1wiOjMzOX1dLDM3MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCIpLGk9ZShcIi4uL2ludGVybmFscy9pcy1wdXJlXCIpLHM9ZShcIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvclwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvZmFpbHNcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxsPWUoXCIuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGVcIiksYz1lKFwiLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3JcIiksdT1lKFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZVwiKSxoPWUoXCIuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluXCIpLGY9cyYmcy5wcm90b3R5cGU7aWYobih7dGFyZ2V0OlwiUHJvbWlzZVwiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhcyYmbygoZnVuY3Rpb24oKXtmLmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24oZSl7dmFyIHQ9Yyh0aGlzLGEoXCJQcm9taXNlXCIpKSxyPWwoZSk7cmV0dXJuIHRoaXMudGhlbihyP2Z1bmN0aW9uKHIpe3JldHVybiB1KHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiByfSkpfTplLHI/ZnVuY3Rpb24ocil7cmV0dXJuIHUodCxlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06ZSl9fSksIWkmJmwocykpe3ZhciBkPWEoXCJQcm9taXNlXCIpLnByb3RvdHlwZS5maW5hbGx5O2YuZmluYWxseSE9PWQmJmgoZixcImZpbmFsbHlcIixkLHt1bnNhZmU6ITB9KX19LHtcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIjoyNDUsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCI6MjYwLFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiOjI2OSxcIi4uL2ludGVybmFscy9pcy1jYWxsYWJsZVwiOjI4NSxcIi4uL2ludGVybmFscy9pcy1wdXJlXCI6MjkwLFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yXCI6MzI1LFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZVwiOjMyNixcIi4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yXCI6MzM1fV0sMzcyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZShcIi4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvclwiKSxlKFwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbFwiKSxlKFwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoXCIpLGUoXCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZVwiKSxlKFwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdFwiKSxlKFwiLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmVcIil9LHtcIi4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGxcIjozNjgsXCIuLi9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2hcIjozNjksXCIuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3JcIjozNzAsXCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmFjZVwiOjM3MyxcIi4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3RcIjozNzQsXCIuLi9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZVwiOjM3NX1dLDM3MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCIpLGk9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCIpLHM9ZShcIi4uL2ludGVybmFscy9hLWNhbGxhYmxlXCIpLG89ZShcIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCIpLGE9ZShcIi4uL2ludGVybmFscy9wZXJmb3JtXCIpLGw9ZShcIi4uL2ludGVybmFscy9pdGVyYXRlXCIpO24oe3RhcmdldDpcIlByb21pc2VcIixzdGF0OiEwLGZvcmNlZDplKFwiLi4vaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uXCIpfSx7cmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9by5mKHQpLG49ci5yZWplY3QsYz1hKChmdW5jdGlvbigpe3ZhciBvPXModC5yZXNvbHZlKTtsKGUsKGZ1bmN0aW9uKGUpe2kobyx0LGUpLnRoZW4oci5yZXNvbHZlLG4pfSkpfSkpO3JldHVybiBjLmVycm9yJiZuKGMudmFsdWUpLHIucHJvbWlzZX19KX0se1wiLi4vaW50ZXJuYWxzL2EtY2FsbGFibGVcIjoyMjIsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvaXRlcmF0ZVwiOjI5MyxcIi4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5XCI6MzAzLFwiLi4vaW50ZXJuYWxzL3BlcmZvcm1cIjozMjMsXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb25cIjozMjd9XSwzNzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbFwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eVwiKTtuKHt0YXJnZXQ6XCJQcm9taXNlXCIsc3RhdDohMCxmb3JjZWQ6ZShcIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvblwiKS5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1zLmYodGhpcyk7cmV0dXJuIGkodC5yZWplY3Qsdm9pZCAwLGUpLHQucHJvbWlzZX19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCI6MjY0LFwiLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHlcIjozMDMsXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIjozMjR9XSwzNzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluXCIpLHM9ZShcIi4uL2ludGVybmFscy9pcy1wdXJlXCIpLG89ZShcIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvclwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb25cIikuQ09OU1RSVUNUT1IsbD1lKFwiLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZVwiKSxjPWkoXCJQcm9taXNlXCIpLHU9cyYmIWE7bih7dGFyZ2V0OlwiUHJvbWlzZVwiLHN0YXQ6ITAsZm9yY2VkOnN8fGF9LHtyZXNvbHZlOmZ1bmN0aW9uKGUpe3JldHVybiBsKHUmJnRoaXM9PT1jP286dGhpcyxlKX19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW5cIjoyNjksXCIuLi9pbnRlcm5hbHMvaXMtcHVyZVwiOjI5MCxcIi4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvblwiOjMyNCxcIi4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvclwiOjMyNSxcIi4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmVcIjozMjZ9XSwzNzY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLHM9ZShcIi4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleFwiKSxvPVJhbmdlRXJyb3IsYT1TdHJpbmcuZnJvbUNoYXJDb2RlLGw9U3RyaW5nLmZyb21Db2RlUG9pbnQsYz1pKFtdLmpvaW4pO24oe3RhcmdldDpcIlN0cmluZ1wiLHN0YXQ6ITAsYXJpdHk6MSxmb3JjZWQ6ISFsJiYxIT09bC5sZW5ndGh9LHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLG49YXJndW1lbnRzLmxlbmd0aCxpPTA7bj5pOyl7aWYodD0rYXJndW1lbnRzW2krK10scyh0LDExMTQxMTEpIT09dCl0aHJvdyBuZXcgbyh0K1wiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnRcIik7cltpXT10PDY1NTM2P2EodCk6YSg1NTI5NisoKHQtPTY1NTM2KT4+MTApLHQlMTAyNCs1NjMyMCl9cmV0dXJuIGMocixcIlwiKX19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXhcIjozNDB9XSwzNzc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCIpLHM9ZShcIi4uL2ludGVybmFscy9ub3QtYS1yZWdleHBcIiksbz1lKFwiLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZVwiKSxhPWUoXCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nXCIpLGw9ZShcIi4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpY1wiKSxjPWkoXCJcIi5pbmRleE9mKTtuKHt0YXJnZXQ6XCJTdHJpbmdcIixwcm90bzohMCxmb3JjZWQ6IWwoXCJpbmNsdWRlc1wiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfmMoYShvKHRoaXMpKSxhKHMoZSkpLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0se1wiLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljXCI6MjM4LFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIjoyNjgsXCIuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwXCI6MzA0LFwiLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZVwiOjMyOSxcIi4uL2ludGVybmFscy90by1zdHJpbmdcIjozNDh9XSwzNzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlKFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZVwiKShcImFzeW5jSXRlcmF0b3JcIil9LHtcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmVcIjozNTV9XSwzNzk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vaW50ZXJuYWxzL2V4cG9ydFwiKSxpPWUoXCIuLi9pbnRlcm5hbHMvZ2xvYmFsXCIpLHM9ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsXCIpLG89ZShcIi4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXNcIiksYT1lKFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIiksbD1lKFwiLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzXCIpLGM9ZShcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCIpLHU9ZShcIi4uL2ludGVybmFscy9mYWlsc1wiKSxoPWUoXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiKSxmPWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZlwiKSxkPWUoXCIuLi9pbnRlcm5hbHMvYW4tb2JqZWN0XCIpLHA9ZShcIi4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdFwiKSxtPWUoXCIuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5XCIpLGI9ZShcIi4uL2ludGVybmFscy90by1zdHJpbmdcIiksZz1lKFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpLHk9ZShcIi4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlXCIpLHY9ZShcIi4uL2ludGVybmFscy9vYmplY3Qta2V5c1wiKSx3PWUoXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXNcIiksXz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsXCIpLHg9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpLGs9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCIpLFM9ZShcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5XCIpLE09ZShcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXNcIiksQz1lKFwiLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlXCIpLFQ9ZShcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5cIiksRT1lKFwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvclwiKSxBPWUoXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCIpLFI9ZShcIi4uL2ludGVybmFscy9zaGFyZWQta2V5XCIpLE89ZShcIi4uL2ludGVybmFscy9oaWRkZW4ta2V5c1wiKSxqPWUoXCIuLi9pbnRlcm5hbHMvdWlkXCIpLEk9ZShcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbFwiKSxOPWUoXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZFwiKSxQPWUoXCIuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lXCIpLEI9ZShcIi4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZVwiKSxEPWUoXCIuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWdcIiksRj1lKFwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlXCIpLEw9ZShcIi4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb25cIikuZm9yRWFjaCx6PVIoXCJoaWRkZW5cIiksVT1GLnNldCwkPUYuZ2V0dGVyRm9yKFwiU3ltYm9sXCIpLEg9T2JqZWN0LnByb3RvdHlwZSxWPWkuU3ltYm9sLHE9ViYmVi5wcm90b3R5cGUsVz1pLlJhbmdlRXJyb3IsWD1pLlR5cGVFcnJvcixLPWkuUU9iamVjdCxZPWsuZixaPVMuZixHPV8uZixKPUMuZixRPW8oW10ucHVzaCksZWU9QShcInN5bWJvbHNcIiksdGU9QShcIm9wLXN5bWJvbHNcIikscmU9QShcIndrc1wiKSxuZT0hS3x8IUsucHJvdG90eXBlfHwhSy5wcm90b3R5cGUuZmluZENoaWxkLGllPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1ZKEgsdCk7biYmZGVsZXRlIEhbdF0sWihlLHQsciksbiYmZSE9PUgmJlooSCx0LG4pfSxzZT1sJiZ1KChmdW5jdGlvbigpe3JldHVybiA3IT09eShaKHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWih0aGlzLFwiYVwiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9pZTpaLG9lPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZWVbZV09eShxKTtyZXR1cm4gVShyLHt0eXBlOlwiU3ltYm9sXCIsdGFnOmUsZGVzY3JpcHRpb246dH0pLGx8fChyLmRlc2NyaXB0aW9uPXQpLHJ9LGFlPWZ1bmN0aW9uKGUsdCxyKXtlPT09SCYmYWUodGUsdCxyKSxkKGUpO3ZhciBuPW0odCk7cmV0dXJuIGQociksaChlZSxuKT8oci5lbnVtZXJhYmxlPyhoKGUseikmJmVbel1bbl0mJihlW3pdW25dPSExKSxyPXkocix7ZW51bWVyYWJsZTpnKDAsITEpfSkpOihoKGUseil8fFooZSx6LGcoMSx7fSkpLGVbel1bbl09ITApLHNlKGUsbixyKSk6WihlLG4scil9LGxlPWZ1bmN0aW9uKGUsdCl7ZChlKTt2YXIgcj1wKHQpLG49dihyKS5jb25jYXQoZmUocikpO3JldHVybiBMKG4sKGZ1bmN0aW9uKHQpe2wmJiFzKGNlLHIsdCl8fGFlKGUsdCxyW3RdKX0pKSxlfSxjZT1mdW5jdGlvbihlKXt2YXIgdD1tKGUpLHI9cyhKLHRoaXMsdCk7cmV0dXJuISh0aGlzPT09SCYmaChlZSx0KSYmIWgodGUsdCkpJiYoIShyfHwhaCh0aGlzLHQpfHwhaChlZSx0KXx8aCh0aGlzLHopJiZ0aGlzW3pdW3RdKXx8cil9LHVlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9cChlKSxuPW0odCk7aWYociE9PUh8fCFoKGVlLG4pfHxoKHRlLG4pKXt2YXIgaT1ZKHIsbik7cmV0dXJuIWl8fCFoKGVlLG4pfHxoKHIseikmJnJbel1bbl18fChpLmVudW1lcmFibGU9ITApLGl9fSxoZT1mdW5jdGlvbihlKXt2YXIgdD1HKHAoZSkpLHI9W107cmV0dXJuIEwodCwoZnVuY3Rpb24oZSl7aChlZSxlKXx8aChPLGUpfHxRKHIsZSl9KSkscn0sZmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT09PUgscj1HKHQ/dGU6cChlKSksbj1bXTtyZXR1cm4gTChyLChmdW5jdGlvbihlKXshaChlZSxlKXx8dCYmIWgoSCxlKXx8UShuLGVlW2VdKX0pKSxufTtjfHwoVChxPShWPWZ1bmN0aW9uKCl7aWYoZihxLHRoaXMpKXRocm93IG5ldyBYKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yXCIpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9iKGFyZ3VtZW50c1swXSk6dm9pZCAwLHQ9aihlKSxyPWZ1bmN0aW9uKGUpe3RoaXM9PT1IJiZzKHIsdGUsZSksaCh0aGlzLHopJiZoKHRoaXNbel0sdCkmJih0aGlzW3pdW3RdPSExKTt2YXIgbj1nKDEsZSk7dHJ5e3NlKHRoaXMsdCxuKX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBXKSl0aHJvdyBlO2llKHRoaXMsdCxuKX19O3JldHVybiBsJiZuZSYmc2UoSCx0LHtjb25maWd1cmFibGU6ITAsc2V0OnJ9KSxvZSh0LGUpfSkucHJvdG90eXBlLFwidG9TdHJpbmdcIiwoZnVuY3Rpb24oKXtyZXR1cm4gJCh0aGlzKS50YWd9KSksVChWLFwid2l0aG91dFNldHRlclwiLChmdW5jdGlvbihlKXtyZXR1cm4gb2UoaihlKSxlKX0pKSxDLmY9Y2UsUy5mPWFlLE0uZj1sZSxrLmY9dWUsdy5mPV8uZj1oZSx4LmY9ZmUsTi5mPWZ1bmN0aW9uKGUpe3JldHVybiBvZShJKGUpLGUpfSxsJiYoRShxLFwiZGVzY3JpcHRpb25cIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiAkKHRoaXMpLmRlc2NyaXB0aW9ufX0pLGF8fFQoSCxcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsY2Use3Vuc2FmZTohMH0pKSksbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOiFjLHNoYW06IWN9LHtTeW1ib2w6Vn0pLEwodihyZSksKGZ1bmN0aW9uKGUpe1AoZSl9KSksbih7dGFyZ2V0OlwiU3ltYm9sXCIsc3RhdDohMCxmb3JjZWQ6IWN9LHt1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtuZT0hMH0sdXNlU2ltcGxlOmZ1bmN0aW9uKCl7bmU9ITF9fSksbih7dGFyZ2V0OlwiT2JqZWN0XCIsc3RhdDohMCxmb3JjZWQ6IWMsc2hhbTohbH0se2NyZWF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P3koZSk6bGUoeShlKSx0KX0sZGVmaW5lUHJvcGVydHk6YWUsZGVmaW5lUHJvcGVydGllczpsZSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6dWV9KSxuKHt0YXJnZXQ6XCJPYmplY3RcIixzdGF0OiEwLGZvcmNlZDohY30se2dldE93blByb3BlcnR5TmFtZXM6aGV9KSxCKCksRChWLFwiU3ltYm9sXCIpLE9bel09ITB9LHtcIi4uL2ludGVybmFscy9hbi1vYmplY3RcIjoyMjcsXCIuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uXCI6MjI5LFwiLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yXCI6MjQyLFwiLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pblwiOjI0NSxcIi4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3JcIjoyNDQsXCIuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnNcIjoyNDcsXCIuLi9pbnRlcm5hbHMvZXhwb3J0XCI6MjU5LFwiLi4vaW50ZXJuYWxzL2ZhaWxzXCI6MjYwLFwiLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGxcIjoyNjQsXCIuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzXCI6MjY4LFwiLi4vaW50ZXJuYWxzL2dsb2JhbFwiOjI3NCxcIi4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5XCI6Mjc1LFwiLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzXCI6Mjc2LFwiLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlXCI6MjgyLFwiLi4vaW50ZXJuYWxzL2lzLXB1cmVcIjoyOTAsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZVwiOjMwNixcIi4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXNcIjozMDcsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eVwiOjMwOCxcIi4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yXCI6MzA5LFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzXCI6MzExLFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsXCI6MzEwLFwiLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHNcIjozMTIsXCIuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZlwiOjMxNCxcIi4uL2ludGVybmFscy9vYmplY3Qta2V5c1wiOjMxNixcIi4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZVwiOjMxNyxcIi4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZ1wiOjMzMSxcIi4uL2ludGVybmFscy9zaGFyZWRcIjozMzQsXCIuLi9pbnRlcm5hbHMvc2hhcmVkLWtleVwiOjMzMixcIi4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uXCI6MzM2LFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1kZWZpbmUtdG8tcHJpbWl0aXZlXCI6MzM3LFwiLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0XCI6MzQxLFwiLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleVwiOjM0NixcIi4uL2ludGVybmFscy90by1zdHJpbmdcIjozNDgsXCIuLi9pbnRlcm5hbHMvdWlkXCI6MzUwLFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sXCI6MzU3LFwiLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZVwiOjM1NSxcIi4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkXCI6MzU2fV0sMzgwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pblwiKSxzPWUoXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvdG8tc3RyaW5nXCIpLGE9ZShcIi4uL2ludGVybmFscy9zaGFyZWRcIiksbD1lKFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb25cIiksYz1hKFwic3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeVwiKSx1PWEoXCJzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5XCIpO24oe3RhcmdldDpcIlN5bWJvbFwiLHN0YXQ6ITAsZm9yY2VkOiFsfSx7Zm9yOmZ1bmN0aW9uKGUpe3ZhciB0PW8oZSk7aWYocyhjLHQpKXJldHVybiBjW3RdO3ZhciByPWkoXCJTeW1ib2xcIikodCk7cmV0dXJuIGNbdF09cix1W3JdPXQscn19KX0se1wiLi4vaW50ZXJuYWxzL2V4cG9ydFwiOjI1OSxcIi4uL2ludGVybmFscy9nZXQtYnVpbHQtaW5cIjoyNjksXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiOjI3NSxcIi4uL2ludGVybmFscy9zaGFyZWRcIjozMzQsXCIuLi9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvblwiOjMzOCxcIi4uL2ludGVybmFscy90by1zdHJpbmdcIjozNDh9XSwzODE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtlKFwiLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3JcIiksZShcIi4uL21vZHVsZXMvZXMuc3ltYm9sLmZvclwiKSxlKFwiLi4vbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvclwiKSxlKFwiLi4vbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeVwiKSxlKFwiLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCIpfSx7XCIuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5XCI6MzYyLFwiLi4vbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzXCI6MzY1LFwiLi4vbW9kdWxlcy9lcy5zeW1ib2wuY29uc3RydWN0b3JcIjozNzksXCIuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3JcIjozODAsXCIuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yXCI6MzgyfV0sMzgyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL2ludGVybmFscy9leHBvcnRcIiksaT1lKFwiLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHlcIikscz1lKFwiLi4vaW50ZXJuYWxzL2lzLXN5bWJvbFwiKSxvPWUoXCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZ1wiKSxhPWUoXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCIpLGw9ZShcIi4uL2ludGVybmFscy9zeW1ib2wtcmVnaXN0cnktZGV0ZWN0aW9uXCIpLGM9YShcInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnlcIik7bih7dGFyZ2V0OlwiU3ltYm9sXCIsc3RhdDohMCxmb3JjZWQ6IWx9LHtrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihvKGUpK1wiIGlzIG5vdCBhIHN5bWJvbFwiKTtpZihpKGMsZSkpcmV0dXJuIGNbZV19fSl9LHtcIi4uL2ludGVybmFscy9leHBvcnRcIjoyNTksXCIuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eVwiOjI3NSxcIi4uL2ludGVybmFscy9pcy1zeW1ib2xcIjoyOTIsXCIuLi9pbnRlcm5hbHMvc2hhcmVkXCI6MzM0LFwiLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb25cIjozMzgsXCIuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZ1wiOjM0OX1dLDM4MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1yLmlzQXJyYXk9ZnVuY3Rpb24oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShlKTpcIltvYmplY3QgQXJyYXldXCI9PT1uKGUpfSxyLmlzQm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGV9LHIuaXNOdWxsPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZX0sci5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sci5pc051bWJlcj1mdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZX0sci5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZX0sci5pc1N5bWJvbD1mdW5jdGlvbihlKXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgZX0sci5pc1VuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX0sci5pc1JlZ0V4cD1mdW5jdGlvbihlKXtyZXR1cm5cIltvYmplY3QgUmVnRXhwXVwiPT09bihlKX0sci5pc09iamVjdD1mdW5jdGlvbihlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWV9LHIuaXNEYXRlPWZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBEYXRlXVwiPT09bihlKX0sci5pc0Vycm9yPWZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBFcnJvcl1cIj09PW4oZSl8fGUgaW5zdGFuY2VvZiBFcnJvcn0sci5pc0Z1bmN0aW9uPWZ1bmN0aW9uKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9LHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcImJvb2xlYW5cIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fHZvaWQgMD09PWV9LHIuaXNCdWZmZXI9ZShcImJ1ZmZlclwiKS5CdWZmZXIuaXNCdWZmZXJ9LHtidWZmZXI6MjIwfV0sMzg0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJlbGxpcHRpY1wiKSxpPWUoXCJibi5qc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBvKGUpfTt2YXIgcz17c2VjcDI1NmsxOntuYW1lOlwic2VjcDI1NmsxXCIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOlwicDIyNFwiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6XCJwMjU2XCIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZTpcInAxOTJcIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOlwiZWQyNTUxOVwiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZTpcInAzODRcIixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6XCJwNTIxXCIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIG8oZSl7dGhpcy5jdXJ2ZVR5cGU9c1tlXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOmV9KSx0aGlzLmN1cnZlPW5ldyBuLmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gYShlLHQsbil7QXJyYXkuaXNBcnJheShlKXx8KGU9ZS50b0FycmF5KCkpO3ZhciBpPW5ldyByKGUpO2lmKG4mJmkubGVuZ3RoPG4pe3ZhciBzPW5ldyByKG4taS5sZW5ndGgpO3MuZmlsbCgwKSxpPXIuY29uY2F0KFtzLGldKX1yZXR1cm4gdD9pLnRvU3RyaW5nKHQpOml9cy5wMjI0PXMuc2VjcDIyNHIxLHMucDI1Nj1zLnNlY3AyNTZyMT1zLnByaW1lMjU2djEscy5wMTkyPXMuc2VjcDE5MnIxPXMucHJpbWUxOTJ2MSxzLnAzODQ9cy5zZWNwMzg0cjEscy5wNTIxPXMuc2VjcDUyMXIxLG8ucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoZSx0KX0sby5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9dHx8XCJ1dGY4XCIsci5pc0J1ZmZlcihlKXx8KGU9bmV3IHIoZSx0KSksYSh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoZSkuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxuLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxvLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmtleXMuZ2V0UHVibGljKFwiY29tcHJlc3NlZFwiPT09dCwhMCk7cmV0dXJuXCJoeWJyaWRcIj09PXQmJihyW3IubGVuZ3RoLTFdJTI/clswXT03OnJbMF09NiksYShyLGUpfSxvLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMua2V5cy5nZXRQcml2YXRlKCksZSl9LG8ucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihlLHQpe3JldHVybiB0PXR8fFwidXRmOFwiLHIuaXNCdWZmZXIoZSl8fChlPW5ldyByKGUsdCkpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKGUpLHRoaXN9LG8ucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oZSx0KXt0PXR8fFwidXRmOFwiLHIuaXNCdWZmZXIoZSl8fChlPW5ldyByKGUsdCkpO3ZhciBuPW5ldyBpKGUpO3JldHVybiBuPW4udG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUobiksdGhpc319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJidWZmZXJcIikuQnVmZmVyKX0se1wiYm4uanNcIjozODUsYnVmZmVyOjIyMCxlbGxpcHRpYzo0MDV9XSwzODU6W2Z1bmN0aW9uKGUsdCxyKXthcmd1bWVudHNbNF1bMTg0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtidWZmZXI6MTg4LGR1cDoxODR9XSwzODY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiaW5oZXJpdHNcIiksaT1lKFwibWQ1LmpzXCIpLHM9ZShcInJpcGVtZDE2MFwiKSxvPWUoXCJzaGEuanNcIiksYT1lKFwiY2lwaGVyLWJhc2VcIik7ZnVuY3Rpb24gbChlKXthLmNhbGwodGhpcyxcImRpZ2VzdFwiKSx0aGlzLl9oYXNoPWV9bihsLGEpLGwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5faGFzaC51cGRhdGUoZSl9LGwucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJtZDVcIj09PShlPWUudG9Mb3dlckNhc2UoKSk/bmV3IGk6XCJybWQxNjBcIj09PWV8fFwicmlwZW1kMTYwXCI9PT1lP25ldyBzOm5ldyBsKG8oZSkpfX0se1wiY2lwaGVyLWJhc2VcIjoyMjEsaW5oZXJpdHM6NDQwLFwibWQ1LmpzXCI6NDUwLHJpcGVtZDE2MDo0OTMsXCJzaGEuanNcIjo0OTh9XSwzODc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwibWQ1LmpzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4obmV3IG4pLnVwZGF0ZShlKS5kaWdlc3QoKX19LHtcIm1kNS5qc1wiOjQ1MH1dLDM4ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCIuL2xlZ2FjeVwiKSxzPWUoXCJjaXBoZXItYmFzZVwiKSxvPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsYT1lKFwiY3JlYXRlLWhhc2gvbWQ1XCIpLGw9ZShcInJpcGVtZDE2MFwiKSxjPWUoXCJzaGEuanNcIiksdT1vLmFsbG9jKDEyOCk7ZnVuY3Rpb24gaChlLHQpe3MuY2FsbCh0aGlzLFwiZGlnZXN0XCIpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1vLmZyb20odCkpO3ZhciByPVwic2hhNTEyXCI9PT1lfHxcInNoYTM4NFwiPT09ZT8xMjg6NjQ7KHRoaXMuX2FsZz1lLHRoaXMuX2tleT10LHQubGVuZ3RoPnIpP3Q9KFwicm1kMTYwXCI9PT1lP25ldyBsOmMoZSkpLnVwZGF0ZSh0KS5kaWdlc3QoKTp0Lmxlbmd0aDxyJiYodD1vLmNvbmNhdChbdCx1XSxyKSk7Zm9yKHZhciBuPXRoaXMuX2lwYWQ9by5hbGxvY1Vuc2FmZShyKSxpPXRoaXMuX29wYWQ9by5hbGxvY1Vuc2FmZShyKSxhPTA7YTxyO2ErKyluW2FdPTU0XnRbYV0saVthXT05Ml50W2FdO3RoaXMuX2hhc2g9XCJybWQxNjBcIj09PWU/bmV3IGw6YyhlKSx0aGlzLl9oYXNoLnVwZGF0ZShuKX1uKGgscyksaC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9oYXNoLnVwZGF0ZShlKX0saC5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oXCJybWQxNjBcIj09PXRoaXMuX2FsZz9uZXcgbDpjKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoZSkuZGlnZXN0KCl9LHQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVyblwicm1kMTYwXCI9PT0oZT1lLnRvTG93ZXJDYXNlKCkpfHxcInJpcGVtZDE2MFwiPT09ZT9uZXcgaChcInJtZDE2MFwiLHQpOlwibWQ1XCI9PT1lP25ldyBpKGEsdCk6bmV3IGgoZSx0KX19LHtcIi4vbGVnYWN5XCI6Mzg5LFwiY2lwaGVyLWJhc2VcIjoyMjEsXCJjcmVhdGUtaGFzaC9tZDVcIjozODcsaW5oZXJpdHM6NDQwLHJpcGVtZDE2MDo0OTMsXCJzYWZlLWJ1ZmZlclwiOjQ5NCxcInNoYS5qc1wiOjQ5OH1dLDM4OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIscz1lKFwiY2lwaGVyLWJhc2VcIiksbz1pLmFsbG9jKDEyOCk7ZnVuY3Rpb24gYShlLHQpe3MuY2FsbCh0aGlzLFwiZGlnZXN0XCIpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1pLmZyb20odCkpLHRoaXMuX2FsZz1lLHRoaXMuX2tleT10LHQubGVuZ3RoPjY0P3Q9ZSh0KTp0Lmxlbmd0aDw2NCYmKHQ9aS5jb25jYXQoW3Qsb10sNjQpKTtmb3IodmFyIHI9dGhpcy5faXBhZD1pLmFsbG9jVW5zYWZlKDY0KSxuPXRoaXMuX29wYWQ9aS5hbGxvY1Vuc2FmZSg2NCksYT0wO2E8NjQ7YSsrKXJbYV09NTRedFthXSxuW2FdPTkyXnRbYV07dGhpcy5faGFzaD1bcl19bihhLHMpLGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5faGFzaC5wdXNoKGUpfSxhLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9hbGcoaS5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoaS5jb25jYXQoW3RoaXMuX29wYWQsZV0pKX0sdC5leHBvcnRzPWF9LHtcImNpcGhlci1iYXNlXCI6MjIxLGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sMzkwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ci5yYW5kb21CeXRlcz1yLnJuZz1yLnBzZXVkb1JhbmRvbUJ5dGVzPXIucHJuZz1lKFwicmFuZG9tYnl0ZXNcIiksci5jcmVhdGVIYXNoPXIuSGFzaD1lKFwiY3JlYXRlLWhhc2hcIiksci5jcmVhdGVIbWFjPXIuSG1hYz1lKFwiY3JlYXRlLWhtYWNcIik7dmFyIG49ZShcImJyb3dzZXJpZnktc2lnbi9hbGdvc1wiKSxpPU9iamVjdC5rZXlzKG4pLHM9W1wic2hhMVwiLFwic2hhMjI0XCIsXCJzaGEyNTZcIixcInNoYTM4NFwiLFwic2hhNTEyXCIsXCJtZDVcIixcInJtZDE2MFwiXS5jb25jYXQoaSk7ci5nZXRIYXNoZXM9ZnVuY3Rpb24oKXtyZXR1cm4gc307dmFyIG89ZShcInBia2RmMlwiKTtyLnBia2RmMj1vLnBia2RmMixyLnBia2RmMlN5bmM9by5wYmtkZjJTeW5jO3ZhciBhPWUoXCJicm93c2VyaWZ5LWNpcGhlclwiKTtyLkNpcGhlcj1hLkNpcGhlcixyLmNyZWF0ZUNpcGhlcj1hLmNyZWF0ZUNpcGhlcixyLkNpcGhlcml2PWEuQ2lwaGVyaXYsci5jcmVhdGVDaXBoZXJpdj1hLmNyZWF0ZUNpcGhlcml2LHIuRGVjaXBoZXI9YS5EZWNpcGhlcixyLmNyZWF0ZURlY2lwaGVyPWEuY3JlYXRlRGVjaXBoZXIsci5EZWNpcGhlcml2PWEuRGVjaXBoZXJpdixyLmNyZWF0ZURlY2lwaGVyaXY9YS5jcmVhdGVEZWNpcGhlcml2LHIuZ2V0Q2lwaGVycz1hLmdldENpcGhlcnMsci5saXN0Q2lwaGVycz1hLmxpc3RDaXBoZXJzO3ZhciBsPWUoXCJkaWZmaWUtaGVsbG1hblwiKTtyLkRpZmZpZUhlbGxtYW5Hcm91cD1sLkRpZmZpZUhlbGxtYW5Hcm91cCxyLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1sLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxyLmdldERpZmZpZUhlbGxtYW49bC5nZXREaWZmaWVIZWxsbWFuLHIuY3JlYXRlRGlmZmllSGVsbG1hbj1sLmNyZWF0ZURpZmZpZUhlbGxtYW4sci5EaWZmaWVIZWxsbWFuPWwuRGlmZmllSGVsbG1hbjt2YXIgYz1lKFwiYnJvd3NlcmlmeS1zaWduXCIpO3IuY3JlYXRlU2lnbj1jLmNyZWF0ZVNpZ24sci5TaWduPWMuU2lnbixyLmNyZWF0ZVZlcmlmeT1jLmNyZWF0ZVZlcmlmeSxyLlZlcmlmeT1jLlZlcmlmeSxyLmNyZWF0ZUVDREg9ZShcImNyZWF0ZS1lY2RoXCIpO3ZhciB1PWUoXCJwdWJsaWMtZW5jcnlwdFwiKTtyLnB1YmxpY0VuY3J5cHQ9dS5wdWJsaWNFbmNyeXB0LHIucHJpdmF0ZUVuY3J5cHQ9dS5wcml2YXRlRW5jcnlwdCxyLnB1YmxpY0RlY3J5cHQ9dS5wdWJsaWNEZWNyeXB0LHIucHJpdmF0ZURlY3J5cHQ9dS5wcml2YXRlRGVjcnlwdDt2YXIgaD1lKFwicmFuZG9tZmlsbFwiKTtyLnJhbmRvbUZpbGw9aC5yYW5kb21GaWxsLHIucmFuZG9tRmlsbFN5bmM9aC5yYW5kb21GaWxsU3luYyxyLmNyZWF0ZUNyZWRlbnRpYWxzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFtcInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XCIsXCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1wiLFwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5XCJdLmpvaW4oXCJcXG5cIikpfSxyLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LHtcImJyb3dzZXJpZnktY2lwaGVyXCI6MjA2LFwiYnJvd3NlcmlmeS1zaWduXCI6MjEzLFwiYnJvd3NlcmlmeS1zaWduL2FsZ29zXCI6MjEwLFwiY3JlYXRlLWVjZGhcIjozODQsXCJjcmVhdGUtaGFzaFwiOjM4NixcImNyZWF0ZS1obWFjXCI6Mzg4LFwiZGlmZmllLWhlbGxtYW5cIjo0MDAscGJrZGYyOjQ2MCxcInB1YmxpYy1lbmNyeXB0XCI6NDY4LHJhbmRvbWJ5dGVzOjQ3NSxyYW5kb21maWxsOjQ3Nn1dLDM5MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZ2b2lkIDAhPT10P3QuZXhwb3J0cz1uKCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqcz1uKCl9KHZvaWQgMCwoZnVuY3Rpb24oKXt2YXIgZT02ZTQsdD0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLG49XCJzZWNvbmRcIixpPVwibWludXRlXCIscz1cImhvdXJcIixvPVwiZGF5XCIsYT1cIndlZWtcIixsPVwibW9udGhcIixjPVwicXVhcnRlclwiLHU9XCJ5ZWFyXCIsaD1cImRhdGVcIixmPVwiSW52YWxpZCBEYXRlXCIsZD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHA9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLG09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLHI9ZSUxMDA7cmV0dXJuXCJbXCIrZSsodFsoci0yMCklMTBdfHx0W3JdfHx0WzBdKStcIl1cIn19LGI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVN0cmluZyhlKTtyZXR1cm4hbnx8bi5sZW5ndGg+PXQ/ZTpcIlwiK0FycmF5KHQrMS1uLmxlbmd0aCkuam9pbihyKStlfSxnPXtzOmIsejpmdW5jdGlvbihlKXt2YXIgdD0tZS51dGNPZmZzZXQoKSxyPU1hdGguYWJzKHQpLG49TWF0aC5mbG9vcihyLzYwKSxpPXIlNjA7cmV0dXJuKHQ8PTA/XCIrXCI6XCItXCIpK2IobiwyLFwiMFwiKStcIjpcIitiKGksMixcIjBcIil9LG06ZnVuY3Rpb24gZSh0LHIpe2lmKHQuZGF0ZSgpPHIuZGF0ZSgpKXJldHVybi1lKHIsdCk7dmFyIG49MTIqKHIueWVhcigpLXQueWVhcigpKSsoci5tb250aCgpLXQubW9udGgoKSksaT10LmNsb25lKCkuYWRkKG4sbCkscz1yLWk8MCxvPXQuY2xvbmUoKS5hZGQobisocz8tMToxKSxsKTtyZXR1cm4rKC0obisoci1pKS8ocz9pLW86by1pKSl8fDApfSxhOmZ1bmN0aW9uKGUpe3JldHVybiBlPDA/TWF0aC5jZWlsKGUpfHwwOk1hdGguZmxvb3IoZSl9LHA6ZnVuY3Rpb24oZSl7cmV0dXJue006bCx5OnUsdzphLGQ6byxEOmgsaDpzLG06aSxzOm4sbXM6cixROmN9W2VdfHxTdHJpbmcoZXx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV9fSx5PVwiZW5cIix2PXt9O3ZbeV09bTt2YXIgdz1cIiRpc0RheWpzT2JqZWN0XCIsXz1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIE18fCEoIWV8fCFlW3ddKX0seD1mdW5jdGlvbiBlKHQscixuKXt2YXIgaTtpZighdClyZXR1cm4geTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIHM9dC50b0xvd2VyQ2FzZSgpO3Zbc10mJihpPXMpLHImJih2W3NdPXIsaT1zKTt2YXIgbz10LnNwbGl0KFwiLVwiKTtpZighaSYmby5sZW5ndGg+MSlyZXR1cm4gZShvWzBdKX1lbHNle3ZhciBhPXQubmFtZTt2W2FdPXQsaT1hfXJldHVybiFuJiZpJiYoeT1pKSxpfHwhbiYmeX0saz1mdW5jdGlvbihlLHQpe2lmKF8oZSkpcmV0dXJuIGUuY2xvbmUoKTt2YXIgcj1cIm9iamVjdFwiPT10eXBlb2YgdD90Ont9O3JldHVybiByLmRhdGU9ZSxyLmFyZ3M9YXJndW1lbnRzLG5ldyBNKHIpfSxTPWc7Uy5sPXgsUy5pPV8sUy53PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsoZSx7bG9jYWxlOnQuJEwsdXRjOnQuJHUseDp0LiR4LCRvZmZzZXQ6dC4kb2Zmc2V0fSl9O3ZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbShlKXt0aGlzLiRMPXgoZS5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZShlKSx0aGlzLiR4PXRoaXMuJHh8fGUueHx8e30sdGhpc1t3XT0hMH12YXIgYj1tLnByb3RvdHlwZTtyZXR1cm4gYi5wYXJzZT1mdW5jdGlvbihlKXt0aGlzLiRkPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxyPWUudXRjO2lmKG51bGw9PT10KXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKFMudSh0KSlyZXR1cm4gbmV3IERhdGU7aWYodCBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYhL1okL2kudGVzdCh0KSl7dmFyIG49dC5tYXRjaChkKTtpZihuKXt2YXIgaT1uWzJdLTF8fDAscz0obls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiByP25ldyBEYXRlKERhdGUuVVRDKG5bMV0saSxuWzNdfHwxLG5bNF18fDAsbls1XXx8MCxuWzZdfHwwLHMpKTpuZXcgRGF0ZShuWzFdLGksblszXXx8MSxuWzRdfHwwLG5bNV18fDAsbls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKHQpfShlKSx0aGlzLmluaXQoKX0sYi5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kZDt0aGlzLiR5PWUuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPWUuZ2V0TW9udGgoKSx0aGlzLiREPWUuZ2V0RGF0ZSgpLHRoaXMuJFc9ZS5nZXREYXkoKSx0aGlzLiRIPWUuZ2V0SG91cnMoKSx0aGlzLiRtPWUuZ2V0TWludXRlcygpLHRoaXMuJHM9ZS5nZXRTZWNvbmRzKCksdGhpcy4kbXM9ZS5nZXRNaWxsaXNlY29uZHMoKX0sYi4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gU30sYi5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1mKX0sYi5pc1NhbWU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1rKGUpO3JldHVybiB0aGlzLnN0YXJ0T2YodCk8PXImJnI8PXRoaXMuZW5kT2YodCl9LGIuaXNBZnRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBrKGUpPHRoaXMuc3RhcnRPZih0KX0sYi5pc0JlZm9yZT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuZE9mKHQpPGsoZSl9LGIuJGc9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBTLnUoZSk/dGhpc1t0XTp0aGlzLnNldChyLGUpfSxiLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxiLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LGIuc3RhcnRPZj1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsYz0hIVMudSh0KXx8dCxmPVMucChlKSxkPWZ1bmN0aW9uKGUsdCl7dmFyIG49Uy53KHIuJHU/RGF0ZS5VVEMoci4keSx0LGUpOm5ldyBEYXRlKHIuJHksdCxlKSxyKTtyZXR1cm4gYz9uOm4uZW5kT2Yobyl9LHA9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUy53KHIudG9EYXRlKClbZV0uYXBwbHkoci50b0RhdGUoXCJzXCIpLChjP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UodCkpLHIpfSxtPXRoaXMuJFcsYj10aGlzLiRNLGc9dGhpcy4kRCx5PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSB1OnJldHVybiBjP2QoMSwwKTpkKDMxLDExKTtjYXNlIGw6cmV0dXJuIGM/ZCgxLGIpOmQoMCxiKzEpO2Nhc2UgYTp2YXIgdj10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsdz0obTx2P20rNzptKS12O3JldHVybiBkKGM/Zy13OmcrKDYtdyksYik7Y2FzZSBvOmNhc2UgaDpyZXR1cm4gcCh5K1wiSG91cnNcIiwwKTtjYXNlIHM6cmV0dXJuIHAoeStcIk1pbnV0ZXNcIiwxKTtjYXNlIGk6cmV0dXJuIHAoeStcIlNlY29uZHNcIiwyKTtjYXNlIG46cmV0dXJuIHAoeStcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LGIuZW5kT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc3RhcnRPZihlLCExKX0sYi4kc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIGEsYz1TLnAoZSksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksZD0oYT17fSxhW29dPWYrXCJEYXRlXCIsYVtoXT1mK1wiRGF0ZVwiLGFbbF09ZitcIk1vbnRoXCIsYVt1XT1mK1wiRnVsbFllYXJcIixhW3NdPWYrXCJIb3Vyc1wiLGFbaV09ZitcIk1pbnV0ZXNcIixhW25dPWYrXCJTZWNvbmRzXCIsYVtyXT1mK1wiTWlsbGlzZWNvbmRzXCIsYSlbY10scD1jPT09bz90aGlzLiREKyh0LXRoaXMuJFcpOnQ7aWYoYz09PWx8fGM9PT11KXt2YXIgbT10aGlzLmNsb25lKCkuc2V0KGgsMSk7bS4kZFtkXShwKSxtLmluaXQoKSx0aGlzLiRkPW0uc2V0KGgsTWF0aC5taW4odGhpcy4kRCxtLmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGQmJnRoaXMuJGRbZF0ocCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LGIuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KGUsdCl9LGIuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW1MucChlKV0oKX0sYi5hZGQ9ZnVuY3Rpb24ocixjKXt2YXIgaCxmPXRoaXM7cj1OdW1iZXIocik7dmFyIGQ9Uy5wKGMpLHA9ZnVuY3Rpb24oZSl7dmFyIHQ9ayhmKTtyZXR1cm4gUy53KHQuZGF0ZSh0LmRhdGUoKStNYXRoLnJvdW5kKGUqcikpLGYpfTtpZihkPT09bClyZXR1cm4gdGhpcy5zZXQobCx0aGlzLiRNK3IpO2lmKGQ9PT11KXJldHVybiB0aGlzLnNldCh1LHRoaXMuJHkrcik7aWYoZD09PW8pcmV0dXJuIHAoMSk7aWYoZD09PWEpcmV0dXJuIHAoNyk7dmFyIG09KGg9e30saFtpXT1lLGhbc109dCxoW25dPTFlMyxoKVtkXXx8MSxiPXRoaXMuJGQuZ2V0VGltZSgpK3IqbTtyZXR1cm4gUy53KGIsdGhpcyl9LGIuc3VidHJhY3Q9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5hZGQoLTEqZSx0KX0sYi5mb3JtYXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gci5pbnZhbGlkRGF0ZXx8Zjt2YXIgbj1lfHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1TLnoodGhpcykscz10aGlzLiRILG89dGhpcy4kbSxhPXRoaXMuJE0sbD1yLndlZWtkYXlzLGM9ci5tb250aHMsdT1yLm1lcmlkaWVtLGg9ZnVuY3Rpb24oZSxyLGkscyl7cmV0dXJuIGUmJihlW3JdfHxlKHQsbikpfHxpW3JdLnNsaWNlKDAscyl9LGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIFMucyhzJTEyfHwxMixlLFwiMFwiKX0sbT11fHxmdW5jdGlvbihlLHQscil7dmFyIG49ZTwxMj9cIkFNXCI6XCJQTVwiO3JldHVybiByP24udG9Mb3dlckNhc2UoKTpufTtyZXR1cm4gbi5yZXBsYWNlKHAsKGZ1bmN0aW9uKGUsbil7cmV0dXJuIG58fGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlXCJZWVwiOnJldHVybiBTdHJpbmcodC4keSkuc2xpY2UoLTIpO2Nhc2VcIllZWVlcIjpyZXR1cm4gUy5zKHQuJHksNCxcIjBcIik7Y2FzZVwiTVwiOnJldHVybiBhKzE7Y2FzZVwiTU1cIjpyZXR1cm4gUy5zKGErMSwyLFwiMFwiKTtjYXNlXCJNTU1cIjpyZXR1cm4gaChyLm1vbnRoc1Nob3J0LGEsYywzKTtjYXNlXCJNTU1NXCI6cmV0dXJuIGgoYyxhKTtjYXNlXCJEXCI6cmV0dXJuIHQuJEQ7Y2FzZVwiRERcIjpyZXR1cm4gUy5zKHQuJEQsMixcIjBcIik7Y2FzZVwiZFwiOnJldHVybiBTdHJpbmcodC4kVyk7Y2FzZVwiZGRcIjpyZXR1cm4gaChyLndlZWtkYXlzTWluLHQuJFcsbCwyKTtjYXNlXCJkZGRcIjpyZXR1cm4gaChyLndlZWtkYXlzU2hvcnQsdC4kVyxsLDMpO2Nhc2VcImRkZGRcIjpyZXR1cm4gbFt0LiRXXTtjYXNlXCJIXCI6cmV0dXJuIFN0cmluZyhzKTtjYXNlXCJISFwiOnJldHVybiBTLnMocywyLFwiMFwiKTtjYXNlXCJoXCI6cmV0dXJuIGQoMSk7Y2FzZVwiaGhcIjpyZXR1cm4gZCgyKTtjYXNlXCJhXCI6cmV0dXJuIG0ocyxvLCEwKTtjYXNlXCJBXCI6cmV0dXJuIG0ocyxvLCExKTtjYXNlXCJtXCI6cmV0dXJuIFN0cmluZyhvKTtjYXNlXCJtbVwiOnJldHVybiBTLnMobywyLFwiMFwiKTtjYXNlXCJzXCI6cmV0dXJuIFN0cmluZyh0LiRzKTtjYXNlXCJzc1wiOnJldHVybiBTLnModC4kcywyLFwiMFwiKTtjYXNlXCJTU1NcIjpyZXR1cm4gUy5zKHQuJG1zLDMsXCIwXCIpO2Nhc2VcIlpcIjpyZXR1cm4gaX1yZXR1cm4gbnVsbH0oZSl8fGkucmVwbGFjZShcIjpcIixcIlwiKX0pKX0sYi51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sYi5kaWZmPWZ1bmN0aW9uKHIsaCxmKXt2YXIgZCxwPXRoaXMsbT1TLnAoaCksYj1rKHIpLGc9KGIudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqZSx5PXRoaXMtYix2PWZ1bmN0aW9uKCl7cmV0dXJuIFMubShwLGIpfTtzd2l0Y2gobSl7Y2FzZSB1OmQ9digpLzEyO2JyZWFrO2Nhc2UgbDpkPXYoKTticmVhaztjYXNlIGM6ZD12KCkvMzticmVhaztjYXNlIGE6ZD0oeS1nKS82MDQ4ZTU7YnJlYWs7Y2FzZSBvOmQ9KHktZykvODY0ZTU7YnJlYWs7Y2FzZSBzOmQ9eS90O2JyZWFrO2Nhc2UgaTpkPXkvZTticmVhaztjYXNlIG46ZD15LzFlMzticmVhaztkZWZhdWx0OmQ9eX1yZXR1cm4gZj9kOlMuYShkKX0sYi5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGwpLiREfSxiLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gdlt0aGlzLiRMXX0sYi5sb2NhbGU9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdGhpcy4kTDt2YXIgcj10aGlzLmNsb25lKCksbj14KGUsdCwhMCk7cmV0dXJuIG4mJihyLiRMPW4pLHJ9LGIuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gUy53KHRoaXMuJGQsdGhpcyl9LGIudG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sYi50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LGIudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxiLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sbX0oKSxDPU0ucHJvdG90eXBlO3JldHVybiBrLnByb3RvdHlwZT1DLFtbXCIkbXNcIixyXSxbXCIkc1wiLG5dLFtcIiRtXCIsaV0sW1wiJEhcIixzXSxbXCIkV1wiLG9dLFtcIiRNXCIsbF0sW1wiJHlcIix1XSxbXCIkRFwiLGhdXS5mb3JFYWNoKChmdW5jdGlvbihlKXtDW2VbMV1dPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLiRnKHQsZVswXSxlWzFdKX19KSksay5leHRlbmQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS4kaXx8KGUodCxNLGspLGUuJGk9ITApLGt9LGsubG9jYWxlPXgsay5pc0RheWpzPV8say51bml4PWZ1bmN0aW9uKGUpe3JldHVybiBrKDFlMyplKX0say5lbj12W3ldLGsuTHM9dixrLnA9e30sa30pKX0se31dLDM5MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyFmdW5jdGlvbihlLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiZ2b2lkIDAhPT10P3QuZXhwb3J0cz1uKCk6KGU9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczplfHxzZWxmKS5kYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQ9bigpfSh2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGU9e0xUUzpcImg6bW06c3MgQVwiLExUOlwiaDptbSBBXCIsTDpcIk1NL0REL1lZWVlcIixMTDpcIk1NTU0gRCwgWVlZWVwiLExMTDpcIk1NTU0gRCwgWVlZWSBoOm1tIEFcIixMTExMOlwiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQVwifSx0PS8oXFxbW15bXSpcXF0pfChbLV86Ly4sKClcXHNdKyl8KEF8YXxZWVlZfFlZP3xNTT9NP00/fERvfEREP3xoaD98SEg/fG1tP3xzcz98U3sxLDN9fHp8Wlo/KS9nLHI9L1xcZFxcZC8sbj0vXFxkXFxkPy8saT0vXFxkKlteLV86LywoKVxcc1xcZF0rLyxzPXt9LG89ZnVuY3Rpb24oZSl7cmV0dXJuKGU9K2UpKyhlPjY4PzE5MDA6MmUzKX0sYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dGhpc1tlXT0rdH19LGw9Wy9bKy1dXFxkXFxkOj8oXFxkXFxkKT98Wi8sZnVuY3Rpb24oZSl7KHRoaXMuem9uZXx8KHRoaXMuem9uZT17fSkpLm9mZnNldD1mdW5jdGlvbihlKXtpZighZSlyZXR1cm4gMDtpZihcIlpcIj09PWUpcmV0dXJuIDA7dmFyIHQ9ZS5tYXRjaCgvKFsrLV18XFxkXFxkKS9nKSxyPTYwKnRbMV0rKCt0WzJdfHwwKTtyZXR1cm4gMD09PXI/MDpcIitcIj09PXRbMF0/LXI6cn0oZSl9XSxjPWZ1bmN0aW9uKGUpe3ZhciB0PXNbZV07cmV0dXJuIHQmJih0LmluZGV4T2Y/dDp0LnMuY29uY2F0KHQuZikpfSx1PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1zLm1lcmlkaWVtO2lmKG4pe2Zvcih2YXIgaT0xO2k8PTI0O2krPTEpaWYoZS5pbmRleE9mKG4oaSwwLHQpKT4tMSl7cj1pPjEyO2JyZWFrfX1lbHNlIHI9ZT09PSh0P1wicG1cIjpcIlBNXCIpO3JldHVybiByfSxoPXtBOltpLGZ1bmN0aW9uKGUpe3RoaXMuYWZ0ZXJub29uPXUoZSwhMSl9XSxhOltpLGZ1bmN0aW9uKGUpe3RoaXMuYWZ0ZXJub29uPXUoZSwhMCl9XSxTOlsvXFxkLyxmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0xMDAqK2V9XSxTUzpbcixmdW5jdGlvbihlKXt0aGlzLm1pbGxpc2Vjb25kcz0xMCorZX1dLFNTUzpbL1xcZHszfS8sZnVuY3Rpb24oZSl7dGhpcy5taWxsaXNlY29uZHM9K2V9XSxzOltuLGEoXCJzZWNvbmRzXCIpXSxzczpbbixhKFwic2Vjb25kc1wiKV0sbTpbbixhKFwibWludXRlc1wiKV0sbW06W24sYShcIm1pbnV0ZXNcIildLEg6W24sYShcImhvdXJzXCIpXSxoOltuLGEoXCJob3Vyc1wiKV0sSEg6W24sYShcImhvdXJzXCIpXSxoaDpbbixhKFwiaG91cnNcIildLEQ6W24sYShcImRheVwiKV0sREQ6W3IsYShcImRheVwiKV0sRG86W2ksZnVuY3Rpb24oZSl7dmFyIHQ9cy5vcmRpbmFsLHI9ZS5tYXRjaCgvXFxkKy8pO2lmKHRoaXMuZGF5PXJbMF0sdClmb3IodmFyIG49MTtuPD0zMTtuKz0xKXQobikucmVwbGFjZSgvXFxbfFxcXS9nLFwiXCIpPT09ZSYmKHRoaXMuZGF5PW4pfV0sTTpbbixhKFwibW9udGhcIildLE1NOltyLGEoXCJtb250aFwiKV0sTU1NOltpLGZ1bmN0aW9uKGUpe3ZhciB0PWMoXCJtb250aHNcIikscj0oYyhcIm1vbnRoc1Nob3J0XCIpfHx0Lm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoMCwzKX0pKSkuaW5kZXhPZihlKSsxO2lmKHI8MSl0aHJvdyBuZXcgRXJyb3I7dGhpcy5tb250aD1yJTEyfHxyfV0sTU1NTTpbaSxmdW5jdGlvbihlKXt2YXIgdD1jKFwibW9udGhzXCIpLmluZGV4T2YoZSkrMTtpZih0PDEpdGhyb3cgbmV3IEVycm9yO3RoaXMubW9udGg9dCUxMnx8dH1dLFk6Wy9bKy1dP1xcZCsvLGEoXCJ5ZWFyXCIpXSxZWTpbcixmdW5jdGlvbihlKXt0aGlzLnllYXI9byhlKX1dLFlZWVk6Wy9cXGR7NH0vLGEoXCJ5ZWFyXCIpXSxaOmwsWlo6bH07ZnVuY3Rpb24gZihyKXt2YXIgbixpO249cixpPXMmJnMuZm9ybWF0cztmb3IodmFyIG89KHI9bi5yZXBsYWNlKC8oXFxbW15cXF1dK10pfChMVFM/fGx7MSw0fXxMezEsNH0pL2csKGZ1bmN0aW9uKHQscixuKXt2YXIgcz1uJiZuLnRvVXBwZXJDYXNlKCk7cmV0dXJuIHJ8fGlbbl18fGVbbl18fGlbc10ucmVwbGFjZSgvKFxcW1teXFxdXStdKXwoTU1NTXxNTXxERHxkZGRkKS9nLChmdW5jdGlvbihlLHQscil7cmV0dXJuIHR8fHIuc2xpY2UoMSl9KSl9KSkpLm1hdGNoKHQpLGE9by5sZW5ndGgsbD0wO2w8YTtsKz0xKXt2YXIgYz1vW2xdLHU9aFtjXSxmPXUmJnVbMF0sZD11JiZ1WzFdO29bbF09ZD97cmVnZXg6ZixwYXJzZXI6ZH06Yy5yZXBsYWNlKC9eXFxbfFxcXSQvZyxcIlwiKX1yZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXt9LHI9MCxuPTA7cjxhO3IrPTEpe3ZhciBpPW9bcl07aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkpbis9aS5sZW5ndGg7ZWxzZXt2YXIgcz1pLnJlZ2V4LGw9aS5wYXJzZXIsYz1lLnNsaWNlKG4pLHU9cy5leGVjKGMpWzBdO2wuY2FsbCh0LHUpLGU9ZS5yZXBsYWNlKHUsXCJcIil9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLmFmdGVybm9vbjtpZih2b2lkIDAhPT10KXt2YXIgcj1lLmhvdXJzO3Q/cjwxMiYmKGUuaG91cnMrPTEyKToxMj09PXImJihlLmhvdXJzPTApLGRlbGV0ZSBlLmFmdGVybm9vbn19KHQpLHR9fXJldHVybiBmdW5jdGlvbihlLHQscil7ci5wLmN1c3RvbVBhcnNlRm9ybWF0PSEwLGUmJmUucGFyc2VUd29EaWdpdFllYXImJihvPWUucGFyc2VUd29EaWdpdFllYXIpO3ZhciBuPXQucHJvdG90eXBlLGk9bi5wYXJzZTtuLnBhcnNlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0ZSxuPWUudXRjLG89ZS5hcmdzO3RoaXMuJHU9bjt2YXIgYT1vWzFdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBhKXt2YXIgbD0hMD09PW9bMl0sYz0hMD09PW9bM10sdT1sfHxjLGg9b1syXTtjJiYoaD1vWzJdKSxzPXRoaXMuJGxvY2FsZSgpLCFsJiZoJiYocz1yLkxzW2hdKSx0aGlzLiRkPWZ1bmN0aW9uKGUsdCxyKXt0cnl7aWYoW1wieFwiLFwiWFwiXS5pbmRleE9mKHQpPi0xKXJldHVybiBuZXcgRGF0ZSgoXCJYXCI9PT10PzFlMzoxKSplKTt2YXIgbj1mKHQpKGUpLGk9bi55ZWFyLHM9bi5tb250aCxvPW4uZGF5LGE9bi5ob3VycyxsPW4ubWludXRlcyxjPW4uc2Vjb25kcyx1PW4ubWlsbGlzZWNvbmRzLGg9bi56b25lLGQ9bmV3IERhdGUscD1vfHwoaXx8cz8xOmQuZ2V0RGF0ZSgpKSxtPWl8fGQuZ2V0RnVsbFllYXIoKSxiPTA7aSYmIXN8fChiPXM+MD9zLTE6ZC5nZXRNb250aCgpKTt2YXIgZz1hfHwwLHk9bHx8MCx2PWN8fDAsdz11fHwwO3JldHVybiBoP25ldyBEYXRlKERhdGUuVVRDKG0sYixwLGcseSx2LHcrNjAqaC5vZmZzZXQqMWUzKSk6cj9uZXcgRGF0ZShEYXRlLlVUQyhtLGIscCxnLHksdix3KSk6bmV3IERhdGUobSxiLHAsZyx5LHYsdyl9Y2F0Y2goZSl7cmV0dXJuIG5ldyBEYXRlKFwiXCIpfX0odCxhLG4pLHRoaXMuaW5pdCgpLGgmJiEwIT09aCYmKHRoaXMuJEw9dGhpcy5sb2NhbGUoaCkuJEwpLHUmJnQhPXRoaXMuZm9ybWF0KGEpJiYodGhpcy4kZD1uZXcgRGF0ZShcIlwiKSkscz17fX1lbHNlIGlmKGEgaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIGQ9YS5sZW5ndGgscD0xO3A8PWQ7cCs9MSl7b1sxXT1hW3AtMV07dmFyIG09ci5hcHBseSh0aGlzLG8pO2lmKG0uaXNWYWxpZCgpKXt0aGlzLiRkPW0uJGQsdGhpcy4kTD1tLiRMLHRoaXMuaW5pdCgpO2JyZWFrfXA9PT1kJiYodGhpcy4kZD1uZXcgRGF0ZShcIlwiKSl9ZWxzZSBpLmNhbGwodGhpcyxlKX19fSkpfSx7fV0sMzkzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7IWZ1bmN0aW9uKGUsbil7XCJvYmplY3RcIj09dHlwZW9mIHImJnZvaWQgMCE9PXQ/dC5leHBvcnRzPW4oKTooZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmRheWpzX3BsdWdpbl91dGM9bigpfSh2b2lkIDAsKGZ1bmN0aW9uKCl7dmFyIGU9XCJtaW51dGVcIix0PS9bKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9nLHI9LyhbKy1dfFxcZFxcZCkvZztyZXR1cm4gZnVuY3Rpb24obixpLHMpe3ZhciBvPWkucHJvdG90eXBlO3MudXRjPWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRlOmUsdXRjOiEwLGFyZ3M6YXJndW1lbnRzfTtyZXR1cm4gbmV3IGkodCl9LG8udXRjPWZ1bmN0aW9uKHQpe3ZhciByPXModGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiEwfSk7cmV0dXJuIHQ/ci5hZGQodGhpcy51dGNPZmZzZXQoKSxlKTpyfSxvLmxvY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIHModGhpcy50b0RhdGUoKSx7bG9jYWxlOnRoaXMuJEwsdXRjOiExfSl9O3ZhciBhPW8ucGFyc2U7by5wYXJzZT1mdW5jdGlvbihlKXtlLnV0YyYmKHRoaXMuJHU9ITApLHRoaXMuJHV0aWxzKCkudShlLiRvZmZzZXQpfHwodGhpcy4kb2Zmc2V0PWUuJG9mZnNldCksYS5jYWxsKHRoaXMsZSl9O3ZhciBsPW8uaW5pdDtvLmluaXQ9ZnVuY3Rpb24oKXtpZih0aGlzLiR1KXt2YXIgZT10aGlzLiRkO3RoaXMuJHk9ZS5nZXRVVENGdWxsWWVhcigpLHRoaXMuJE09ZS5nZXRVVENNb250aCgpLHRoaXMuJEQ9ZS5nZXRVVENEYXRlKCksdGhpcy4kVz1lLmdldFVUQ0RheSgpLHRoaXMuJEg9ZS5nZXRVVENIb3VycygpLHRoaXMuJG09ZS5nZXRVVENNaW51dGVzKCksdGhpcy4kcz1lLmdldFVUQ1NlY29uZHMoKSx0aGlzLiRtcz1lLmdldFVUQ01pbGxpc2Vjb25kcygpfWVsc2UgbC5jYWxsKHRoaXMpfTt2YXIgYz1vLnV0Y09mZnNldDtvLnV0Y09mZnNldD1mdW5jdGlvbihuLGkpe3ZhciBzPXRoaXMuJHV0aWxzKCkudTtpZihzKG4pKXJldHVybiB0aGlzLiR1PzA6cyh0aGlzLiRvZmZzZXQpP2MuY2FsbCh0aGlzKTp0aGlzLiRvZmZzZXQ7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJm51bGw9PT0obj1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1cIlwiKTt2YXIgbj1lLm1hdGNoKHQpO2lmKCFuKXJldHVybiBudWxsO3ZhciBpPShcIlwiK25bMF0pLm1hdGNoKHIpfHxbXCItXCIsMCwwXSxzPWlbMF0sbz02MCoraVsxXSsgK2lbMl07cmV0dXJuIDA9PT1vPzA6XCIrXCI9PT1zP286LW99KG4pKSlyZXR1cm4gdGhpczt2YXIgbz1NYXRoLmFicyhuKTw9MTY/NjAqbjpuLGE9dGhpcztpZihpKXJldHVybiBhLiRvZmZzZXQ9byxhLiR1PTA9PT1uLGE7aWYoMCE9PW4pe3ZhciBsPXRoaXMuJHU/dGhpcy50b0RhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOi0xKnRoaXMudXRjT2Zmc2V0KCk7KGE9dGhpcy5sb2NhbCgpLmFkZChvK2wsZSkpLiRvZmZzZXQ9byxhLiR4LiRsb2NhbE9mZnNldD1sfWVsc2UgYT10aGlzLnV0YygpO3JldHVybiBhfTt2YXIgdT1vLmZvcm1hdDtvLmZvcm1hdD1mdW5jdGlvbihlKXt2YXIgdD1lfHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gdS5jYWxsKHRoaXMsdCl9LG8udmFsdWVPZj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0Kyh0aGlzLiR4LiRsb2NhbE9mZnNldHx8dGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpKTtyZXR1cm4gdGhpcy4kZC52YWx1ZU9mKCktNmU0KmV9LG8uaXNVVEM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuJHV9LG8udG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfSxvLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9VVENTdHJpbmcoKX07dmFyIGg9by50b0RhdGU7by50b0RhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzXCI9PT1lJiZ0aGlzLiRvZmZzZXQ/cyh0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKS50b0RhdGUoKTpoLmNhbGwodGhpcyl9O3ZhciBmPW8uZGlmZjtvLmRpZmY9ZnVuY3Rpb24oZSx0LHIpe2lmKGUmJnRoaXMuJHU9PT1lLiR1KXJldHVybiBmLmNhbGwodGhpcyxlLHQscik7dmFyIG49dGhpcy5sb2NhbCgpLGk9cyhlKS5sb2NhbCgpO3JldHVybiBmLmNhbGwobixpLHQscil9fX0pKX0se31dLDM5NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3IudXRpbHM9ZShcIi4vZGVzL3V0aWxzXCIpLHIuQ2lwaGVyPWUoXCIuL2Rlcy9jaXBoZXJcIiksci5ERVM9ZShcIi4vZGVzL2Rlc1wiKSxyLkNCQz1lKFwiLi9kZXMvY2JjXCIpLHIuRURFPWUoXCIuL2Rlcy9lZGVcIil9LHtcIi4vZGVzL2NiY1wiOjM5NSxcIi4vZGVzL2NpcGhlclwiOjM5NixcIi4vZGVzL2Rlc1wiOjM5NyxcIi4vZGVzL2VkZVwiOjM5OCxcIi4vZGVzL3V0aWxzXCI6Mzk5fV0sMzk1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIm1pbmltYWxpc3RpYy1hc3NlcnRcIiksaT1lKFwiaW5oZXJpdHNcIikscz17fTtmdW5jdGlvbiBvKGUpe24uZXF1YWwoZS5sZW5ndGgsOCxcIkludmFsaWQgSVYgbGVuZ3RoXCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgdD0wO3Q8dGhpcy5pdi5sZW5ndGg7dCsrKXRoaXMuaXZbdF09ZVt0XX1yLmluc3RhbnRpYXRlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7ZS5jYWxsKHRoaXMsdCksdGhpcy5fY2JjSW5pdCgpfWkodCxlKTtmb3IodmFyIHI9T2JqZWN0LmtleXMocyksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbz1yW25dO3QucHJvdG90eXBlW29dPXNbb119cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdChlKX0sdH0scy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBlPW5ldyBvKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9ZX0scy5fdXBkYXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXRoaXMuX2NiY1N0YXRlLHM9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLG89aS5pdjtpZihcImVuY3J5cHRcIj09PXRoaXMudHlwZSl7Zm9yKHZhciBhPTA7YTx0aGlzLmJsb2NrU2l6ZTthKyspb1thXV49ZVt0K2FdO3MuX3VwZGF0ZS5jYWxsKHRoaXMsbywwLHIsbik7Zm9yKGE9MDthPHRoaXMuYmxvY2tTaXplO2ErKylvW2FdPXJbbithXX1lbHNle3MuX3VwZGF0ZS5jYWxsKHRoaXMsZSx0LHIsbik7Zm9yKGE9MDthPHRoaXMuYmxvY2tTaXplO2ErKylyW24rYV1ePW9bYV07Zm9yKGE9MDthPHRoaXMuYmxvY2tTaXplO2ErKylvW2FdPWVbdCthXX19fSx7aW5oZXJpdHM6NDQwLFwibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1M31dLDM5NjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpO2Z1bmN0aW9uIGkoZSl7dGhpcy5vcHRpb25zPWUsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLnBhZGRpbmc9ITEhPT1lLnBhZGRpbmd9dC5leHBvcnRzPWksaS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWUubGVuZ3RoP1tdOlwiZGVjcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoZSk6dGhpcy5fdXBkYXRlRW5jcnlwdChlKX0saS5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsZS5sZW5ndGgtdCksbj0wO248cjtuKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrbl09ZVt0K25dO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9cixyfSxpLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsZSx0KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxpLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihlKXt2YXIgdD0wLHI9MCxuPSh0aGlzLmJ1ZmZlck9mZitlLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJih0Kz10aGlzLl9idWZmZXIoZSx0KSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscikpKTtmb3IodmFyIHM9ZS5sZW5ndGgtKGUubGVuZ3RoLXQpJXRoaXMuYmxvY2tTaXplO3Q8czt0Kz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoZSx0LGkscikscis9dGhpcy5ibG9ja1NpemU7Zm9yKDt0PGUubGVuZ3RoO3QrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1lW3RdO3JldHVybiBpfSxpLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPTAsbj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK2UubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTtuPjA7bi0tKXQrPXRoaXMuX2J1ZmZlcihlLHQpLHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscik7cmV0dXJuIHQrPXRoaXMuX2J1ZmZlcihlLHQpLGl9LGkucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKGUpe3ZhciB0LHI7cmV0dXJuIGUmJih0PXRoaXMudXBkYXRlKGUpKSxyPVwiZW5jcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHQ/dC5jb25jYXQocik6cn0saS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihlLHQpe2lmKDA9PT10KXJldHVybiExO2Zvcig7dDxlLmxlbmd0aDspZVt0KytdPTA7cmV0dXJuITB9LGkucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxlLDApLGV9LGkucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihlKXtyZXR1cm4gZX0saS5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe24uZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsXCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdFwiKTt2YXIgZT1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihlLDApLHRoaXMuX3VucGFkKGUpfX0se1wibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1M31dLDM5NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpLGk9ZShcImluaGVyaXRzXCIpLHM9ZShcIi4vdXRpbHNcIiksbz1lKFwiLi9jaXBoZXJcIik7ZnVuY3Rpb24gYSgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBsKGUpe28uY2FsbCh0aGlzLGUpO3ZhciB0PW5ldyBhO3RoaXMuX2Rlc1N0YXRlPXQsdGhpcy5kZXJpdmVLZXlzKHQsZS5rZXkpfWkobCxvKSx0LmV4cG9ydHM9bCxsLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGwoZSl9O3ZhciBjPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtsLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKGUsdCl7ZS5rZXlzPW5ldyBBcnJheSgzMiksbi5lcXVhbCh0Lmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSxcIkludmFsaWQga2V5IGxlbmd0aFwiKTt2YXIgcj1zLnJlYWRVSW50MzJCRSh0LDApLGk9cy5yZWFkVUludDMyQkUodCw0KTtzLnBjMShyLGksZS50bXAsMCkscj1lLnRtcFswXSxpPWUudG1wWzFdO2Zvcih2YXIgbz0wO288ZS5rZXlzLmxlbmd0aDtvKz0yKXt2YXIgYT1jW28+Pj4xXTtyPXMucjI4c2hsKHIsYSksaT1zLnIyOHNobChpLGEpLHMucGMyKHIsaSxlLmtleXMsbyl9fSxsLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXRoaXMuX2Rlc1N0YXRlLG89cy5yZWFkVUludDMyQkUoZSx0KSxhPXMucmVhZFVJbnQzMkJFKGUsdCs0KTtzLmlwKG8sYSxpLnRtcCwwKSxvPWkudG1wWzBdLGE9aS50bXBbMV0sXCJlbmNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChpLG8sYSxpLnRtcCwwKTp0aGlzLl9kZWNyeXB0KGksbyxhLGkudG1wLDApLG89aS50bXBbMF0sYT1pLnRtcFsxXSxzLndyaXRlVUludDMyQkUocixvLG4pLHMud3JpdGVVSW50MzJCRShyLGEsbis0KX0sbC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihlLHQpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgcj1lLmxlbmd0aC10LG49dDtuPGUubGVuZ3RoO24rKyllW25dPXI7cmV0dXJuITB9LGwucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihlKXtpZighMT09PXRoaXMucGFkZGluZylyZXR1cm4gZTtmb3IodmFyIHQ9ZVtlLmxlbmd0aC0xXSxyPWUubGVuZ3RoLXQ7cjxlLmxlbmd0aDtyKyspbi5lcXVhbChlW3JdLHQpO3JldHVybiBlLnNsaWNlKDAsZS5sZW5ndGgtdCl9LGwucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKGUsdCxyLG4saSl7Zm9yKHZhciBvPXQsYT1yLGw9MDtsPGUua2V5cy5sZW5ndGg7bCs9Mil7dmFyIGM9ZS5rZXlzW2xdLHU9ZS5rZXlzW2wrMV07cy5leHBhbmQoYSxlLnRtcCwwKSxjXj1lLnRtcFswXSx1Xj1lLnRtcFsxXTt2YXIgaD1zLnN1YnN0aXR1dGUoYyx1KSxmPWE7YT0ob15zLnBlcm11dGUoaCkpPj4+MCxvPWZ9cy5yaXAoYSxvLG4saSl9LGwucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKGUsdCxyLG4saSl7Zm9yKHZhciBvPXIsYT10LGw9ZS5rZXlzLmxlbmd0aC0yO2w+PTA7bC09Mil7dmFyIGM9ZS5rZXlzW2xdLHU9ZS5rZXlzW2wrMV07cy5leHBhbmQobyxlLnRtcCwwKSxjXj1lLnRtcFswXSx1Xj1lLnRtcFsxXTt2YXIgaD1zLnN1YnN0aXR1dGUoYyx1KSxmPW87bz0oYV5zLnBlcm11dGUoaCkpPj4+MCxhPWZ9cy5yaXAobyxhLG4saSl9fSx7XCIuL2NpcGhlclwiOjM5NixcIi4vdXRpbHNcIjozOTksaW5oZXJpdHM6NDQwLFwibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1M31dLDM5ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpLGk9ZShcImluaGVyaXRzXCIpLHM9ZShcIi4vY2lwaGVyXCIpLG89ZShcIi4vZGVzXCIpO2Z1bmN0aW9uIGEoZSx0KXtuLmVxdWFsKHQubGVuZ3RoLDI0LFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpO3ZhciByPXQuc2xpY2UoMCw4KSxpPXQuc2xpY2UoOCwxNikscz10LnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9XCJlbmNyeXB0XCI9PT1lP1tvLmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6cn0pLG8uY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTppfSksby5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5OnN9KV06W28uY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTpzfSksby5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5Oml9KSxvLmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6cn0pXX1mdW5jdGlvbiBsKGUpe3MuY2FsbCh0aGlzLGUpO3ZhciB0PW5ldyBhKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT10fWkobCxzKSx0LmV4cG9ydHM9bCxsLmNyZWF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGwoZSl9LGwucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dGhpcy5fZWRlU3RhdGU7aS5jaXBoZXJzWzBdLl91cGRhdGUoZSx0LHIsbiksaS5jaXBoZXJzWzFdLl91cGRhdGUocixuLHIsbiksaS5jaXBoZXJzWzJdLl91cGRhdGUocixuLHIsbil9LGwucHJvdG90eXBlLl9wYWQ9by5wcm90b3R5cGUuX3BhZCxsLnByb3RvdHlwZS5fdW5wYWQ9by5wcm90b3R5cGUuX3VucGFkfSx7XCIuL2NpcGhlclwiOjM5NixcIi4vZGVzXCI6Mzk3LGluaGVyaXRzOjQ0MCxcIm1pbmltYWxpc3RpYy1hc3NlcnRcIjo0NTN9XSwzOTk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLnJlYWRVSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybihlWzArdF08PDI0fGVbMSt0XTw8MTZ8ZVsyK3RdPDw4fGVbMyt0XSk+Pj4wfSxyLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oZSx0LHIpe2VbMCtyXT10Pj4+MjQsZVsxK3JdPXQ+Pj4xNiYyNTUsZVsyK3JdPXQ+Pj44JjI1NSxlWzMrcl09MjU1JnR9LHIuaXA9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTAscz0wLG89NjtvPj0wO28tPTIpe2Zvcih2YXIgYT0wO2E8PTI0O2ErPTgpaTw8PTEsaXw9dD4+PmErbyYxO2ZvcihhPTA7YTw9MjQ7YSs9OClpPDw9MSxpfD1lPj4+YStvJjF9Zm9yKG89NjtvPj0wO28tPTIpe2ZvcihhPTE7YTw9MjU7YSs9OClzPDw9MSxzfD10Pj4+YStvJjE7Zm9yKGE9MTthPD0yNTthKz04KXM8PD0xLHN8PWU+Pj5hK28mMX1yW24rMF09aT4+PjAscltuKzFdPXM+Pj4wfSxyLnJpcD1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGk9MCxzPTAsbz0wO288NDtvKyspZm9yKHZhciBhPTI0O2E+PTA7YS09OClpPDw9MSxpfD10Pj4+YStvJjEsaTw8PTEsaXw9ZT4+PmErbyYxO2ZvcihvPTQ7bzw4O28rKylmb3IoYT0yNDthPj0wO2EtPTgpczw8PTEsc3w9dD4+PmErbyYxLHM8PD0xLHN8PWU+Pj5hK28mMTtyW24rMF09aT4+PjAscltuKzFdPXM+Pj4wfSxyLnBjMT1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGk9MCxzPTAsbz03O28+PTU7by0tKXtmb3IodmFyIGE9MDthPD0yNDthKz04KWk8PD0xLGl8PXQ+PmErbyYxO2ZvcihhPTA7YTw9MjQ7YSs9OClpPDw9MSxpfD1lPj5hK28mMX1mb3IoYT0wO2E8PTI0O2ErPTgpaTw8PTEsaXw9dD4+YStvJjE7Zm9yKG89MTtvPD0zO28rKyl7Zm9yKGE9MDthPD0yNDthKz04KXM8PD0xLHN8PXQ+PmErbyYxO2ZvcihhPTA7YTw9MjQ7YSs9OClzPDw9MSxzfD1lPj5hK28mMX1mb3IoYT0wO2E8PTI0O2ErPTgpczw8PTEsc3w9ZT4+YStvJjE7cltuKzBdPWk+Pj4wLHJbbisxXT1zPj4+MH0sci5yMjhzaGw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZTw8dCYyNjg0MzU0NTV8ZT4+PjI4LXR9O3ZhciBuPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO3IucGMyPWZ1bmN0aW9uKGUsdCxyLGkpe2Zvcih2YXIgcz0wLG89MCxhPW4ubGVuZ3RoPj4+MSxsPTA7bDxhO2wrKylzPDw9MSxzfD1lPj4+bltsXSYxO2ZvcihsPWE7bDxuLmxlbmd0aDtsKyspbzw8PTEsb3w9dD4+Pm5bbF0mMTtyW2krMF09cz4+PjAscltpKzFdPW8+Pj4wfSxyLmV4cGFuZD1mdW5jdGlvbihlLHQscil7dmFyIG49MCxpPTA7bj0oMSZlKTw8NXxlPj4+Mjc7Zm9yKHZhciBzPTIzO3M+PTE1O3MtPTQpbjw8PTYsbnw9ZT4+PnMmNjM7Zm9yKHM9MTE7cz49MztzLT00KWl8PWU+Pj5zJjYzLGk8PD02O2l8PSgzMSZlKTw8MXxlPj4+MzEsdFtyKzBdPW4+Pj4wLHRbcisxXT1pPj4+MH07dmFyIGk9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07ci5zdWJzdGl0dXRlPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPTAsbj0wO248NDtuKyspe3I8PD00LHJ8PWlbNjQqbisoZT4+PjE4LTYqbiY2MyldfWZvcihuPTA7bjw0O24rKyl7cjw8PTQscnw9aVsyNTYrNjQqbisodD4+PjE4LTYqbiY2MyldfXJldHVybiByPj4+MH07dmFyIHM9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO3IucGVybXV0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPTA7cjxzLmxlbmd0aDtyKyspdDw8PTEsdHw9ZT4+PnNbcl0mMTtyZXR1cm4gdD4+PjB9LHIucGFkU3BsaXQ9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKDIpO24ubGVuZ3RoPHQ7KW49XCIwXCIrbjtmb3IodmFyIGk9W10scz0wO3M8dDtzKz1yKWkucHVzaChuLnNsaWNlKHMscytyKSk7cmV0dXJuIGkuam9pbihcIiBcIil9fSx7fV0sNDAwOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL2xpYi9nZW5lcmF0ZVByaW1lXCIpLGk9ZShcIi4vbGliL3ByaW1lcy5qc29uXCIpLHM9ZShcIi4vbGliL2RoXCIpO3ZhciBvPXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07ci5EaWZmaWVIZWxsbWFuR3JvdXA9ci5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9ci5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uKGUpe3ZhciByPW5ldyB0KGlbZV0ucHJpbWUsXCJoZXhcIiksbj1uZXcgdChpW2VdLmdlbixcImhleFwiKTtyZXR1cm4gbmV3IHMocixuKX0sci5jcmVhdGVEaWZmaWVIZWxsbWFuPXIuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBlKHIsaSxhLGwpe3JldHVybiB0LmlzQnVmZmVyKGkpfHx2b2lkIDA9PT1vW2ldP2UocixcImJpbmFyeVwiLGksYSk6KGk9aXx8XCJiaW5hcnlcIixsPWx8fFwiYmluYXJ5XCIsYT1hfHxuZXcgdChbMl0pLHQuaXNCdWZmZXIoYSl8fChhPW5ldyB0KGEsbCkpLFwibnVtYmVyXCI9PXR5cGVvZiByP25ldyBzKG4ocixhKSxhLCEwKToodC5pc0J1ZmZlcihyKXx8KHI9bmV3IHQocixpKSksbmV3IHMocixhLCEwKSkpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCIuL2xpYi9kaFwiOjQwMSxcIi4vbGliL2dlbmVyYXRlUHJpbWVcIjo0MDIsXCIuL2xpYi9wcmltZXMuanNvblwiOjQwMyxidWZmZXI6MjIwfV0sNDAxOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJibi5qc1wiKSxpPW5ldyhlKFwibWlsbGVyLXJhYmluXCIpKSxzPW5ldyBuKDI0KSxvPW5ldyBuKDExKSxhPW5ldyBuKDEwKSxsPW5ldyBuKDMpLGM9bmV3IG4oNyksdT1lKFwiLi9nZW5lcmF0ZVByaW1lXCIpLGg9ZShcInJhbmRvbWJ5dGVzXCIpO2Z1bmN0aW9uIGYoZSx0KXtyZXR1cm4gdD10fHxcInV0ZjhcIixyLmlzQnVmZmVyKGUpfHwoZT1uZXcgcihlLHQpKSx0aGlzLl9wdWI9bmV3IG4oZSksdGhpc31mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIHQ9dHx8XCJ1dGY4XCIsci5pc0J1ZmZlcihlKXx8KGU9bmV3IHIoZSx0KSksdGhpcy5fcHJpdj1uZXcgbihlKSx0aGlzfXQuZXhwb3J0cz1tO3ZhciBwPXt9O2Z1bmN0aW9uIG0oZSx0LHIpe3RoaXMuc2V0R2VuZXJhdG9yKHQpLHRoaXMuX19wcmltZT1uZXcgbihlKSx0aGlzLl9wcmltZT1uLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1lLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAscj8odGhpcy5zZXRQdWJsaWNLZXk9Zix0aGlzLnNldFByaXZhdGVLZXk9ZCk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gYihlLHQpe3ZhciBuPW5ldyByKGUudG9BcnJheSgpKTtyZXR1cm4gdD9uLnRvU3RyaW5nKHQpOm59T2JqZWN0LmRlZmluZVByb3BlcnR5KG0ucHJvdG90eXBlLFwidmVyaWZ5RXJyb3JcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dC50b1N0cmluZyhcImhleFwiKSxuPVtyLGUudG9TdHJpbmcoMTYpXS5qb2luKFwiX1wiKTtpZihuIGluIHApcmV0dXJuIHBbbl07dmFyIGgsZj0wO2lmKGUuaXNFdmVuKCl8fCF1LnNpbXBsZVNpZXZlfHwhdS5mZXJtYXRUZXN0KGUpfHwhaS50ZXN0KGUpKXJldHVybiBmKz0xLGYrPVwiMDJcIj09PXJ8fFwiMDVcIj09PXI/ODo0LHBbbl09ZixmO3N3aXRjaChpLnRlc3QoZS5zaHJuKDEpKXx8KGYrPTIpLHIpe2Nhc2VcIjAyXCI6ZS5tb2QocykuY21wKG8pJiYoZis9OCk7YnJlYWs7Y2FzZVwiMDVcIjooaD1lLm1vZChhKSkuY21wKGwpJiZoLmNtcChjKSYmKGYrPTgpO2JyZWFrO2RlZmF1bHQ6Zis9NH1yZXR1cm4gcFtuXT1mLGZ9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLG0ucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgbihoKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sbS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihlKXt2YXIgdD0oZT0oZT1uZXcgbihlKSkudG9SZWQodGhpcy5fcHJpbWUpKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLGk9bmV3IHIodC50b0FycmF5KCkpLHM9dGhpcy5nZXRQcmltZSgpO2lmKGkubGVuZ3RoPHMubGVuZ3RoKXt2YXIgbz1uZXcgcihzLmxlbmd0aC1pLmxlbmd0aCk7by5maWxsKDApLGk9ci5jb25jYXQoW28saV0pfXJldHVybiBpfSxtLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIGIodGhpcy5fcHViLGUpfSxtLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKGUpe3JldHVybiBiKHRoaXMuX3ByaXYsZSl9LG0ucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKGUpe3JldHVybiBiKHRoaXMuX19wcmltZSxlKX0sbS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGUpe3JldHVybiBiKHRoaXMuX2dlbixlKX0sbS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8XCJ1dGY4XCIsci5pc0J1ZmZlcihlKXx8KGU9bmV3IHIoZSx0KSksdGhpcy5fX2dlbj1lLHRoaXMuX2dlbj1uZXcgbihlKSx0aGlzfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcImJ1ZmZlclwiKS5CdWZmZXIpfSx7XCIuL2dlbmVyYXRlUHJpbWVcIjo0MDIsXCJibi5qc1wiOjQwNCxidWZmZXI6MjIwLFwibWlsbGVyLXJhYmluXCI6NDUxLHJhbmRvbWJ5dGVzOjQ3NX1dLDQwMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJyYW5kb21ieXRlc1wiKTt0LmV4cG9ydHM9eSx5LnNpbXBsZVNpZXZlPWIseS5mZXJtYXRUZXN0PWc7dmFyIGk9ZShcImJuLmpzXCIpLHM9bmV3IGkoMjQpLG89bmV3KGUoXCJtaWxsZXItcmFiaW5cIikpLGE9bmV3IGkoMSksbD1uZXcgaSgyKSxjPW5ldyBpKDUpLHU9KG5ldyBpKDE2KSxuZXcgaSg4KSxuZXcgaSgxMCkpLGg9bmV3IGkoMyksZj0obmV3IGkoNyksbmV3IGkoMTEpKSxkPW5ldyBpKDQpLHA9KG5ldyBpKDEyKSxudWxsKTtmdW5jdGlvbiBtKCl7aWYobnVsbCE9PXApcmV0dXJuIHA7dmFyIGU9W107ZVswXT0yO2Zvcih2YXIgdD0xLHI9MztyPDEwNDg1NzY7cis9Mil7Zm9yKHZhciBuPU1hdGguY2VpbChNYXRoLnNxcnQocikpLGk9MDtpPHQmJmVbaV08PW4mJnIlZVtpXSE9MDtpKyspO3QhPT1pJiZlW2ldPD1ufHwoZVt0KytdPXIpfXJldHVybiBwPWUsZX1mdW5jdGlvbiBiKGUpe2Zvcih2YXIgdD1tKCkscj0wO3I8dC5sZW5ndGg7cisrKWlmKDA9PT1lLm1vZG4odFtyXSkpcmV0dXJuIDA9PT1lLmNtcG4odFtyXSk7cmV0dXJuITB9ZnVuY3Rpb24gZyhlKXt2YXIgdD1pLm1vbnQoZSk7cmV0dXJuIDA9PT1sLnRvUmVkKHQpLnJlZFBvdyhlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHkoZSx0KXtpZihlPDE2KXJldHVybiBuZXcgaSgyPT09dHx8NT09PXQ/WzE0MCwxMjNdOlsxNDAsMzldKTt2YXIgcixwO2Zvcih0PW5ldyBpKHQpOzspe2ZvcihyPW5ldyBpKG4oTWF0aC5jZWlsKGUvOCkpKTtyLmJpdExlbmd0aCgpPmU7KXIuaXNocm4oMSk7aWYoci5pc0V2ZW4oKSYmci5pYWRkKGEpLHIudGVzdG4oMSl8fHIuaWFkZChsKSx0LmNtcChsKSl7aWYoIXQuY21wKGMpKWZvcig7ci5tb2QodSkuY21wKGgpOylyLmlhZGQoZCl9ZWxzZSBmb3IoO3IubW9kKHMpLmNtcChmKTspci5pYWRkKGQpO2lmKGIocD1yLnNocm4oMSkpJiZiKHIpJiZnKHApJiZnKHIpJiZvLnRlc3QocCkmJm8udGVzdChyKSlyZXR1cm4gcn19fSx7XCJibi5qc1wiOjQwNCxcIm1pbGxlci1yYWJpblwiOjQ1MSxyYW5kb21ieXRlczo0NzV9XSw0MDM6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e21vZHAxOntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAyOntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwNTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTQ6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTU6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE2OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTc6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE4OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmZcIn19fSx7fV0sNDA0OltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDA1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cjtuLnZlcnNpb249ZShcIi4uL3BhY2thZ2UuanNvblwiKS52ZXJzaW9uLG4udXRpbHM9ZShcIi4vZWxsaXB0aWMvdXRpbHNcIiksbi5yYW5kPWUoXCJicm9yYW5kXCIpLG4uY3VydmU9ZShcIi4vZWxsaXB0aWMvY3VydmVcIiksbi5jdXJ2ZXM9ZShcIi4vZWxsaXB0aWMvY3VydmVzXCIpLG4uZWM9ZShcIi4vZWxsaXB0aWMvZWNcIiksbi5lZGRzYT1lKFwiLi9lbGxpcHRpYy9lZGRzYVwiKX0se1wiLi4vcGFja2FnZS5qc29uXCI6NDIxLFwiLi9lbGxpcHRpYy9jdXJ2ZVwiOjQwOCxcIi4vZWxsaXB0aWMvY3VydmVzXCI6NDExLFwiLi9lbGxpcHRpYy9lY1wiOjQxMixcIi4vZWxsaXB0aWMvZWRkc2FcIjo0MTUsXCIuL2VsbGlwdGljL3V0aWxzXCI6NDE5LGJyb3JhbmQ6MTg3fV0sNDA2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJuLmpzXCIpLGk9ZShcIi4uL3V0aWxzXCIpLHM9aS5nZXROQUYsbz1pLmdldEpTRixhPWkuYXNzZXJ0O2Z1bmN0aW9uIGwoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnA9bmV3IG4odC5wLDE2KSx0aGlzLnJlZD10LnByaW1lP24ucmVkKHQucHJpbWUpOm4ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbigwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG4oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBuKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49dC5uJiZuZXcgbih0Lm4sMTYpLHRoaXMuZz10LmcmJnRoaXMucG9pbnRGcm9tSlNPTih0LmcsdC5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIHI9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IXJ8fHIuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gYyhlLHQpe3RoaXMuY3VydmU9ZSx0aGlzLnR5cGU9dCx0aGlzLnByZWNvbXB1dGVkPW51bGx9dC5leHBvcnRzPWwsbC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LGwucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxsLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oZSx0KXthKGUucHJlY29tcHV0ZWQpO3ZhciByPWUuX2dldERvdWJsZXMoKSxuPXModCwxLHRoaXMuX2JpdExlbmd0aCksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09MD8yOjEpO2kvPTM7dmFyIG8sbCxjPVtdO2ZvcihvPTA7bzxuLmxlbmd0aDtvKz1yLnN0ZXApe2w9MDtmb3IodmFyIHU9bytyLnN0ZXAtMTt1Pj1vO3UtLSlsPShsPDwxKStuW3VdO2MucHVzaChsKX1mb3IodmFyIGg9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGY9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGQ9aTtkPjA7ZC0tKXtmb3Iobz0wO288Yy5sZW5ndGg7bysrKShsPWNbb10pPT09ZD9mPWYubWl4ZWRBZGQoci5wb2ludHNbb10pOmw9PT0tZCYmKGY9Zi5taXhlZEFkZChyLnBvaW50c1tvXS5uZWcoKSkpO2g9aC5hZGQoZil9cmV0dXJuIGgudG9QKCl9LGwucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9NCxuPWUuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxvPXModCxyLHRoaXMuX2JpdExlbmd0aCksbD10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksYz1vLmxlbmd0aC0xO2M+PTA7Yy0tKXtmb3IodmFyIHU9MDtjPj0wJiYwPT09b1tjXTtjLS0pdSsrO2lmKGM+PTAmJnUrKyxsPWwuZGJscCh1KSxjPDApYnJlYWs7dmFyIGg9b1tjXTthKDAhPT1oKSxsPVwiYWZmaW5lXCI9PT1lLnR5cGU/aD4wP2wubWl4ZWRBZGQoaVtoLTE+PjFdKTpsLm1peGVkQWRkKGlbLWgtMT4+MV0ubmVnKCkpOmg+MD9sLmFkZChpW2gtMT4+MV0pOmwuYWRkKGlbLWgtMT4+MV0ubmVnKCkpfXJldHVyblwiYWZmaW5lXCI9PT1lLnR5cGU/bC50b1AoKTpsfSxsLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBhLGwsYyx1PXRoaXMuX3duYWZUMSxoPXRoaXMuX3duYWZUMixmPXRoaXMuX3duYWZUMyxkPTA7Zm9yKGE9MDthPG47YSsrKXt2YXIgcD0oYz10W2FdKS5fZ2V0TkFGUG9pbnRzKGUpO3VbYV09cC53bmQsaFthXT1wLnBvaW50c31mb3IoYT1uLTE7YT49MTthLT0yKXt2YXIgbT1hLTEsYj1hO2lmKDE9PT11W21dJiYxPT09dVtiXSl7dmFyIGc9W3RbbV0sbnVsbCxudWxsLHRbYl1dOzA9PT10W21dLnkuY21wKHRbYl0ueSk/KGdbMV09dFttXS5hZGQodFtiXSksZ1syXT10W21dLnRvSigpLm1peGVkQWRkKHRbYl0ubmVnKCkpKTowPT09dFttXS55LmNtcCh0W2JdLnkucmVkTmVnKCkpPyhnWzFdPXRbbV0udG9KKCkubWl4ZWRBZGQodFtiXSksZ1syXT10W21dLmFkZCh0W2JdLm5lZygpKSk6KGdbMV09dFttXS50b0ooKS5taXhlZEFkZCh0W2JdKSxnWzJdPXRbbV0udG9KKCkubWl4ZWRBZGQodFtiXS5uZWcoKSkpO3ZhciB5PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLHY9byhyW21dLHJbYl0pO2ZvcihkPU1hdGgubWF4KHZbMF0ubGVuZ3RoLGQpLGZbbV09bmV3IEFycmF5KGQpLGZbYl09bmV3IEFycmF5KGQpLGw9MDtsPGQ7bCsrKXt2YXIgdz0wfHZbMF1bbF0sXz0wfHZbMV1bbF07ZlttXVtsXT15WzMqKHcrMSkrKF8rMSldLGZbYl1bbF09MCxoW21dPWd9fWVsc2UgZlttXT1zKHJbbV0sdVttXSx0aGlzLl9iaXRMZW5ndGgpLGZbYl09cyhyW2JdLHVbYl0sdGhpcy5fYml0TGVuZ3RoKSxkPU1hdGgubWF4KGZbbV0ubGVuZ3RoLGQpLGQ9TWF0aC5tYXgoZltiXS5sZW5ndGgsZCl9dmFyIHg9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGs9dGhpcy5fd25hZlQ0O2ZvcihhPWQ7YT49MDthLS0pe2Zvcih2YXIgUz0wO2E+PTA7KXt2YXIgTT0hMDtmb3IobD0wO2w8bjtsKyspa1tsXT0wfGZbbF1bYV0sMCE9PWtbbF0mJihNPSExKTtpZighTSlicmVhaztTKyssYS0tfWlmKGE+PTAmJlMrKyx4PXguZGJscChTKSxhPDApYnJlYWs7Zm9yKGw9MDtsPG47bCsrKXt2YXIgQz1rW2xdOzAhPT1DJiYoQz4wP2M9aFtsXVtDLTE+PjFdOkM8MCYmKGM9aFtsXVstQy0xPj4xXS5uZWcoKSkseD1cImFmZmluZVwiPT09Yy50eXBlP3gubWl4ZWRBZGQoYyk6eC5hZGQoYykpfX1mb3IoYT0wO2E8bjthKyspaFthXT1udWxsO3JldHVybiBpP3g6eC50b1AoKX0sbC5CYXNlUG9pbnQ9YyxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sYy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sbC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oZSx0KXtlPWkudG9BcnJheShlLHQpO3ZhciByPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1lWzBdfHw2PT09ZVswXXx8Nz09PWVbMF0pJiZlLmxlbmd0aC0xPT0yKnIpcmV0dXJuIDY9PT1lWzBdP2EoZVtlLmxlbmd0aC0xXSUyPT0wKTo3PT09ZVswXSYmYShlW2UubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoZS5zbGljZSgxLDErciksZS5zbGljZSgxK3IsMSsyKnIpKTtpZigoMj09PWVbMF18fDM9PT1lWzBdKSYmZS5sZW5ndGgtMT09PXIpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChlLnNsaWNlKDEsMStyKSwzPT09ZVswXSk7dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwb2ludCBmb3JtYXRcIil9LGMucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZW5jb2RlKGUsITApfSxjLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkscj10aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIix0KTtyZXR1cm4gZT9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQocik6WzRdLmNvbmNhdChyLHRoaXMuZ2V0WSgpLnRvQXJyYXkoXCJiZVwiLHQpKX0sYy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuZW5jb2RlKHRoaXMuX2VuY29kZSh0KSxlKX0sYy5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihlKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciB0PXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gdC5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLHQuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsZSksdC5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPXQsdGhpc30sYy5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oZSl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIHQ9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhdCYmdC5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKGUuYml0TGVuZ3RoKCkrMSkvdC5zdGVwKX0sYy5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHI9W3RoaXNdLG49dGhpcyxpPTA7aTx0O2krPWUpe2Zvcih2YXIgcz0wO3M8ZTtzKyspbj1uLmRibCgpO3IucHVzaChuKX1yZXR1cm57c3RlcDplLHBvaW50czpyfX0sYy5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihlKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciB0PVt0aGlzXSxyPSgxPDxlKS0xLG49MT09PXI/bnVsbDp0aGlzLmRibCgpLGk9MTtpPHI7aSsrKXRbaV09dFtpLTFdLmFkZChuKTtyZXR1cm57d25kOmUscG9pbnRzOnR9fSxjLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxjLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLHI9MDtyPGU7cisrKXQ9dC5kYmwoKTtyZXR1cm4gdH19LHtcIi4uL3V0aWxzXCI6NDE5LFwiYm4uanNcIjo0MjB9XSw0MDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiYm4uanNcIikscz1lKFwiaW5oZXJpdHNcIiksbz1lKFwiLi9iYXNlXCIpLGE9bi5hc3NlcnQ7ZnVuY3Rpb24gbChlKXt0aGlzLnR3aXN0ZWQ9MSE9KDB8ZS5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfGUuYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLG8uY2FsbCh0aGlzLFwiZWR3YXJkc1wiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBpKGUuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgaShlLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxhKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxlLmMpfWZ1bmN0aW9uIGMoZSx0LHIsbixzKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsZSxcInByb2plY3RpdmVcIiksbnVsbD09PXQmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSx0aGlzLno9bj9uZXcgaShuLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9cyYmbmV3IGkocywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9cyhsLG8pLHQuZXhwb3J0cz1sLGwucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1PbmVBP2UucmVkTmVnKCk6dGhpcy5hLnJlZE11bChlKX0sbC5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub25lQz9lOnRoaXMuYy5yZWRNdWwoZSl9LGwucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscixuKXtyZXR1cm4gdGhpcy5wb2ludChlLHQscixuKX0sbC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbihlLHQpeyhlPW5ldyBpKGUsMTYpKS5yZWR8fChlPWUudG9SZWQodGhpcy5yZWQpKTt2YXIgcj1lLnJlZFNxcigpLG49dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChyKSkscz10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwocikpLG89bi5yZWRNdWwocy5yZWRJbnZtKCkpLGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIGw9YS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4odCYmIWx8fCF0JiZsKSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChlLGEpfSxsLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKGUsdCl7KGU9bmV3IGkoZSwxNikpLnJlZHx8KGU9ZS50b1JlZCh0aGlzLnJlZCkpO3ZhciByPWUucmVkU3FyKCksbj1yLnJlZFN1Yih0aGlzLmMyKSxzPXIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLG89bi5yZWRNdWwocy5yZWRJbnZtKCkpO2lmKDA9PT1vLmNtcCh0aGlzLnplcm8pKXtpZih0KXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLGUpfXZhciBhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiBhLmZyb21SZWQoKS5pc09kZCgpIT09dCYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChhLGUpfSxsLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlKXtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4hMDtlLm5vcm1hbGl6ZSgpO3ZhciB0PWUueC5yZWRTcXIoKSxyPWUueS5yZWRTcXIoKSxuPXQucmVkTXVsKHRoaXMuYSkucmVkQWRkKHIpLGk9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwodCkucmVkTXVsKHIpKSk7cmV0dXJuIDA9PT1uLmNtcChpKX0scyhjLG8uQmFzZVBvaW50KSxsLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBjLmZyb21KU09OKHRoaXMsZSl9LGwucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcgYyh0aGlzLGUsdCxyLG4pfSxjLmZyb21KU09OPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBjKGUsdFswXSx0WzFdLHRbMl0pfSxjLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxjLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LGMucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLngucmVkU3FyKCksdD10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCk7cj1yLnJlZElBZGQocik7dmFyIG49dGhpcy5jdXJ2ZS5fbXVsQShlKSxpPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKGUpLnJlZElTdWIodCkscz1uLnJlZEFkZCh0KSxvPXMucmVkU3ViKHIpLGE9bi5yZWRTdWIodCksbD1pLnJlZE11bChvKSxjPXMucmVkTXVsKGEpLHU9aS5yZWRNdWwoYSksaD1vLnJlZE11bChzKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChsLGMsaCx1KX0sYy5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLHMsbz10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksYT10aGlzLngucmVkU3FyKCksbD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgYz0obj10aGlzLmN1cnZlLl9tdWxBKGEpKS5yZWRBZGQobCk7dGhpcy56T25lPyhlPW8ucmVkU3ViKGEpLnJlZFN1YihsKS5yZWRNdWwoYy5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSx0PWMucmVkTXVsKG4ucmVkU3ViKGwpKSxyPWMucmVkU3FyKCkucmVkU3ViKGMpLnJlZFN1YihjKSk6KGk9dGhpcy56LnJlZFNxcigpLHM9Yy5yZWRTdWIoaSkucmVkSVN1YihpKSxlPW8ucmVkU3ViKGEpLnJlZElTdWIobCkucmVkTXVsKHMpLHQ9Yy5yZWRNdWwobi5yZWRTdWIobCkpLHI9Yy5yZWRNdWwocykpfWVsc2Ugbj1hLnJlZEFkZChsKSxpPXRoaXMuY3VydmUuX211bEModGhpcy56KS5yZWRTcXIoKSxzPW4ucmVkU3ViKGkpLnJlZFN1YihpKSxlPXRoaXMuY3VydmUuX211bEMoby5yZWRJU3ViKG4pKS5yZWRNdWwocyksdD10aGlzLmN1cnZlLl9tdWxDKG4pLnJlZE11bChhLnJlZElTdWIobCkpLHI9bi5yZWRNdWwocyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZSx0LHIpfSxjLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sYy5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKGUueS5yZWRTdWIoZS54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKGUueS5yZWRBZGQoZS54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChlLnQpLGk9dGhpcy56LnJlZE11bChlLnoucmVkQWRkKGUueikpLHM9ci5yZWRTdWIodCksbz1pLnJlZFN1YihuKSxhPWkucmVkQWRkKG4pLGw9ci5yZWRBZGQodCksYz1zLnJlZE11bChvKSx1PWEucmVkTXVsKGwpLGg9cy5yZWRNdWwobCksZj1vLnJlZE11bChhKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChjLHUsZixoKX0sYy5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuei5yZWRNdWwoZS56KSxpPW4ucmVkU3FyKCkscz10aGlzLngucmVkTXVsKGUueCksbz10aGlzLnkucmVkTXVsKGUueSksYT10aGlzLmN1cnZlLmQucmVkTXVsKHMpLnJlZE11bChvKSxsPWkucmVkU3ViKGEpLGM9aS5yZWRBZGQoYSksdT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKGUueC5yZWRBZGQoZS55KSkucmVkSVN1YihzKS5yZWRJU3ViKG8pLGg9bi5yZWRNdWwobCkucmVkTXVsKHUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHQ9bi5yZWRNdWwoYykucmVkTXVsKG8ucmVkU3ViKHRoaXMuY3VydmUuX211bEEocykpKSxyPWwucmVkTXVsKGMpKToodD1uLnJlZE11bChjKS5yZWRNdWwoby5yZWRTdWIocykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhsKS5yZWRNdWwoYykpLHRoaXMuY3VydmUucG9pbnQoaCx0LHIpfSxjLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP2U6ZS5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZChlKTp0aGlzLl9wcm9qQWRkKGUpfSxjLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoZSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxlKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LGMucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyx0XSxbZSxyXSwyLCExKX0sYy5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyx0XSxbZSxyXSwyLCEwKX0sYy5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKGUpLHRoaXMueT10aGlzLnkucmVkTXVsKGUpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKGUpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sYy5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGMucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fDA9PT10aGlzLmdldFgoKS5jbXAoZS5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKGUuZ2V0WSgpKX0sYy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKGUpe3ZhciB0PWUudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKHQpKXJldHVybiEwO2Zvcih2YXIgcj1lLmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZih0LnJlZElBZGQobiksMD09PXRoaXMueC5jbXAodCkpcmV0dXJuITB9fSxjLnByb3RvdHlwZS50b1A9Yy5wcm90b3R5cGUubm9ybWFsaXplLGMucHJvdG90eXBlLm1peGVkQWRkPWMucHJvdG90eXBlLmFkZH0se1wiLi4vdXRpbHNcIjo0MTksXCIuL2Jhc2VcIjo0MDYsXCJibi5qc1wiOjQyMCxpbmhlcml0czo0NDB9XSw0MDg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yO24uYmFzZT1lKFwiLi9iYXNlXCIpLG4uc2hvcnQ9ZShcIi4vc2hvcnRcIiksbi5tb250PWUoXCIuL21vbnRcIiksbi5lZHdhcmRzPWUoXCIuL2Vkd2FyZHNcIil9LHtcIi4vYmFzZVwiOjQwNixcIi4vZWR3YXJkc1wiOjQwNyxcIi4vbW9udFwiOjQwOSxcIi4vc2hvcnRcIjo0MTB9XSw0MDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiaW5oZXJpdHNcIikscz1lKFwiLi9iYXNlXCIpLG89ZShcIi4uL3V0aWxzXCIpO2Z1bmN0aW9uIGEoZSl7cy5jYWxsKHRoaXMsXCJtb250XCIsZSksdGhpcy5hPW5ldyBuKGUuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgbihlLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBuKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IG4oMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBsKGUsdCxyKXtzLkJhc2VQb2ludC5jYWxsKHRoaXMsZSxcInByb2plY3RpdmVcIiksbnVsbD09PXQmJm51bGw9PT1yPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgbih0LDE2KSx0aGlzLno9bmV3IG4ociwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1pKGEscyksdC5leHBvcnRzPWEsYS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub3JtYWxpemUoKS54LHI9dC5yZWRTcXIoKSxuPXIucmVkTXVsKHQpLnJlZEFkZChyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQodCk7cmV0dXJuIDA9PT1uLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAobil9LGkobCxzLkJhc2VQb2ludCksYS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wb2ludChvLnRvQXJyYXkoZSx0KSwxKX0sYS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGwodGhpcyxlLHQpfSxhLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKGUpe3JldHVybiBsLmZyb21KU09OKHRoaXMsZSl9LGwucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGwucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGwuZnJvbUpTT049ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGwoZSx0WzBdLHRbMV18fGUub25lKX0sbC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGwucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxsLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksdD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCkscj1lLnJlZFN1Yih0KSxuPWUucmVkTXVsKHQpLGk9ci5yZWRNdWwodC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKHIpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobixpKX0sbC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxsLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy54LnJlZEFkZCh0aGlzLnopLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLGk9ZS54LnJlZEFkZChlLnopLHM9ZS54LnJlZFN1YihlLnopLnJlZE11bChyKSxvPWkucmVkTXVsKG4pLGE9dC56LnJlZE11bChzLnJlZEFkZChvKS5yZWRTcXIoKSksbD10LngucmVkTXVsKHMucmVkSVN1YihvKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoYSxsKX0sbC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNsb25lKCkscj10aGlzLG49dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGk9W107MCE9PXQuY21wbigwKTt0Lml1c2hybigxKSlpLnB1c2godC5hbmRsbigxKSk7Zm9yKHZhciBzPWkubGVuZ3RoLTE7cz49MDtzLS0pMD09PWlbc10/KHI9ci5kaWZmQWRkKG4sdGhpcyksbj1uLmRibCgpKToobj1yLmRpZmZBZGQobix0aGlzKSxyPXIuZGJsKCkpO3JldHVybiBufSxsLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGwucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGwucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKGUuZ2V0WCgpKX0sbC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxsLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LHtcIi4uL3V0aWxzXCI6NDE5LFwiLi9iYXNlXCI6NDA2LFwiYm4uanNcIjo0MjAsaW5oZXJpdHM6NDQwfV0sNDEwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL3V0aWxzXCIpLGk9ZShcImJuLmpzXCIpLHM9ZShcImluaGVyaXRzXCIpLG89ZShcIi4vYmFzZVwiKSxhPW4uYXNzZXJ0O2Z1bmN0aW9uIGwoZSl7by5jYWxsKHRoaXMsXCJzaG9ydFwiLGUpLHRoaXMuYT1uZXcgaShlLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGkoZS5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShlKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBjKGUsdCxyLG4pe28uQmFzZVBvaW50LmNhbGwodGhpcyxlLFwiYWZmaW5lXCIpLG51bGw9PT10JiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IGkodCwxNiksdGhpcy55PW5ldyBpKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gdShlLHQscixuKXtvLkJhc2VQb2ludC5jYWxsKHRoaXMsZSxcImphY29iaWFuXCIpLG51bGw9PT10JiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBpKDApKToodGhpcy54PW5ldyBpKHQsMTYpLHRoaXMueT1uZXcgaShyLDE2KSx0aGlzLno9bmV3IGkobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1zKGwsbyksdC5leHBvcnRzPWwsbC5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbihlKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgdCxyO2lmKGUuYmV0YSl0PW5ldyBpKGUuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIG49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7dD0odD1uWzBdLmNtcChuWzFdKTwwP25bMF06blsxXSkudG9SZWQodGhpcy5yZWQpfWlmKGUubGFtYmRhKXI9bmV3IGkoZS5sYW1iZGEsMTYpO2Vsc2V7dmFyIHM9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoc1swXSkueC5jbXAodGhpcy5nLngucmVkTXVsKHQpKT9yPXNbMF06KHI9c1sxXSxhKDA9PT10aGlzLmcubXVsKHIpLnguY21wKHRoaXMuZy54LnJlZE11bCh0KSkpKX1yZXR1cm57YmV0YTp0LGxhbWJkYTpyLGJhc2lzOmUuYmFzaXM/ZS5iYXNpcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybnthOm5ldyBpKGUuYSwxNiksYjpuZXcgaShlLmIsMTYpfX0pKTp0aGlzLl9nZXRFbmRvQmFzaXMocil9fX0sbC5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihlKXt2YXIgdD1lPT09dGhpcy5wP3RoaXMucmVkOmkubW9udChlKSxyPW5ldyBpKDIpLnRvUmVkKHQpLnJlZEludm0oKSxuPXIucmVkTmVnKCkscz1uZXcgaSgzKS50b1JlZCh0KS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpO3JldHVybltuLnJlZEFkZChzKS5mcm9tUmVkKCksbi5yZWRTdWIocykuZnJvbVJlZCgpXX0sbC5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLHMsbyxhLGwsYyx1LGg9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxmPWUsZD10aGlzLm4uY2xvbmUoKSxwPW5ldyBpKDEpLG09bmV3IGkoMCksYj1uZXcgaSgwKSxnPW5ldyBpKDEpLHk9MDswIT09Zi5jbXBuKDApOyl7dmFyIHY9ZC5kaXYoZik7Yz1kLnN1Yih2Lm11bChmKSksdT1iLnN1Yih2Lm11bChwKSk7dmFyIHc9Zy5zdWIodi5tdWwobSkpO2lmKCFuJiZjLmNtcChoKTwwKXQ9bC5uZWcoKSxyPXAsbj1jLm5lZygpLHM9dTtlbHNlIGlmKG4mJjI9PSsreSlicmVhaztsPWMsZD1mLGY9YyxiPXAscD11LGc9bSxtPXd9bz1jLm5lZygpLGE9dTt2YXIgXz1uLnNxcigpLmFkZChzLnNxcigpKTtyZXR1cm4gby5zcXIoKS5hZGQoYS5zcXIoKSkuY21wKF8pPj0wJiYobz10LGE9ciksbi5uZWdhdGl2ZSYmKG49bi5uZWcoKSxzPXMubmVnKCkpLG8ubmVnYXRpdmUmJihvPW8ubmVnKCksYT1hLm5lZygpKSxbe2E6bixiOnN9LHthOm8sYjphfV19LGwucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5lbmRvLmJhc2lzLHI9dFswXSxuPXRbMV0saT1uLmIubXVsKGUpLmRpdlJvdW5kKHRoaXMubikscz1yLmIubmVnKCkubXVsKGUpLmRpdlJvdW5kKHRoaXMubiksbz1pLm11bChyLmEpLGE9cy5tdWwobi5hKSxsPWkubXVsKHIuYiksYz1zLm11bChuLmIpO3JldHVybntrMTplLnN1YihvKS5zdWIoYSksazI6bC5hZGQoYykubmVnKCl9fSxsLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKGUsdCl7KGU9bmV3IGkoZSwxNikpLnJlZHx8KGU9ZS50b1JlZCh0aGlzLnJlZCkpO3ZhciByPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQoZS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLG49ci5yZWRTcXJ0KCk7aWYoMCE9PW4ucmVkU3FyKCkucmVkU3ViKHIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIHM9bi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4odCYmIXN8fCF0JiZzKSYmKG49bi5yZWROZWcoKSksdGhpcy5wb2ludChlLG4pfSxsLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihlKXtpZihlLmluZilyZXR1cm4hMDt2YXIgdD1lLngscj1lLnksbj10aGlzLmEucmVkTXVsKHQpLGk9dC5yZWRTcXIoKS5yZWRNdWwodCkucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1yLnJlZFNxcigpLnJlZElTdWIoaSkuY21wbigwKX0sbC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49dGhpcy5fZW5kb1duYWZUMSxpPXRoaXMuX2VuZG9XbmFmVDIscz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbz10aGlzLl9lbmRvU3BsaXQodFtzXSksYT1lW3NdLGw9YS5fZ2V0QmV0YSgpO28uazEubmVnYXRpdmUmJihvLmsxLmluZWcoKSxhPWEubmVnKCEwKSksby5rMi5uZWdhdGl2ZSYmKG8uazIuaW5lZygpLGw9bC5uZWcoITApKSxuWzIqc109YSxuWzIqcysxXT1sLGlbMipzXT1vLmsxLGlbMipzKzFdPW8uazJ9Zm9yKHZhciBjPXRoaXMuX3duYWZNdWxBZGQoMSxuLGksMipzLHIpLHU9MDt1PDIqczt1Kyspblt1XT1udWxsLGlbdV09bnVsbDtyZXR1cm4gY30scyhjLG8uQmFzZVBvaW50KSxsLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyBjKHRoaXMsZSx0LHIpfSxsLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMuZnJvbUpTT04odGhpcyxlLHQpfSxjLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIGU9dGhpcy5wcmVjb21wdXRlZDtpZihlJiZlLmJldGEpcmV0dXJuIGUuYmV0YTt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoZSl7dmFyIHI9dGhpcy5jdXJ2ZSxuPWZ1bmN0aW9uKGUpe3JldHVybiByLnBvaW50KGUueC5yZWRNdWwoci5lbmRvLmJldGEpLGUueSl9O2UuYmV0YT10LHQucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6ZS5uYWYmJnt3bmQ6ZS5uYWYud25kLHBvaW50czplLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOmUuZG91YmxlcyYme3N0ZXA6ZS5kb3VibGVzLnN0ZXAscG9pbnRzOmUuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIHR9fSxjLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxjLmZyb21KU09OPWZ1bmN0aW9uKGUsdCxyKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9SlNPTi5wYXJzZSh0KSk7dmFyIG49ZS5wb2ludCh0WzBdLHRbMV0scik7aWYoIXRbMl0pcmV0dXJuIG47ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5wb2ludCh0WzBdLHRbMV0scil9dmFyIHM9dFsyXTtyZXR1cm4gbi5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6cy5kb3VibGVzJiZ7c3RlcDpzLmRvdWJsZXMuc3RlcCxwb2ludHM6W25dLmNvbmNhdChzLmRvdWJsZXMucG9pbnRzLm1hcChpKSl9LG5hZjpzLm5hZiYme3duZDpzLm5hZi53bmQscG9pbnRzOltuXS5jb25jYXQocy5uYWYucG9pbnRzLm1hcChpKSl9fSxufSxjLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0sYy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sYy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaW5mKXJldHVybiBlO2lmKGUuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoZSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShlKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKGUueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnkucmVkU3ViKGUueSk7MCE9PXQuY21wbigwKSYmKHQ9dC5yZWRNdWwodGhpcy54LnJlZFN1YihlLngpLnJlZEludm0oKSkpO3ZhciByPXQucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoZS54KSxuPXQucmVkTXVsKHRoaXMueC5yZWRTdWIocikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxjLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZT10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PWUuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciB0PXRoaXMuY3VydmUuYSxyPXRoaXMueC5yZWRTcXIoKSxuPWUucmVkSW52bSgpLGk9ci5yZWRBZGQocikucmVkSUFkZChyKS5yZWRJQWRkKHQpLnJlZE11bChuKSxzPWkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLG89aS5yZWRNdWwodGhpcy54LnJlZFN1YihzKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsbyl9LGMucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sYy5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxjLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9bmV3IGkoZSwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKGUpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsZSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbZV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxlKX0sYy5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxjLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bdGhpcyx0XSxpPVtlLHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxjLnByb3RvdHlwZS5lcT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcz09PWV8fHRoaXMuaW5mPT09ZS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoZS54KSYmMD09PXRoaXMueS5jbXAoZS55KSl9LGMucHJvdG90eXBlLm5lZz1mdW5jdGlvbihlKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKGUmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbihlKXtyZXR1cm4gZS5uZWcoKX07dC5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiB0fSxjLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxzKHUsby5CYXNlUG9pbnQpLGwucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihlLHQscil7cmV0dXJuIG5ldyB1KHRoaXMsZSx0LHIpfSx1LnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuei5yZWRJbnZtKCksdD1lLnJlZFNxcigpLHI9dGhpcy54LnJlZE11bCh0KSxuPXRoaXMueS5yZWRNdWwodCkucmVkTXVsKGUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LHUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LHUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gZTtpZihlLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgdD1lLnoucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj10aGlzLngucmVkTXVsKHQpLGk9ZS54LnJlZE11bChyKSxzPXRoaXMueS5yZWRNdWwodC5yZWRNdWwoZS56KSksbz1lLnkucmVkTXVsKHIucmVkTXVsKHRoaXMueikpLGE9bi5yZWRTdWIoaSksbD1zLnJlZFN1YihvKTtpZigwPT09YS5jbXBuKDApKXJldHVybiAwIT09bC5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBjPWEucmVkU3FyKCksdT1jLnJlZE11bChhKSxoPW4ucmVkTXVsKGMpLGY9bC5yZWRTcXIoKS5yZWRJQWRkKHUpLnJlZElTdWIoaCkucmVkSVN1YihoKSxkPWwucmVkTXVsKGgucmVkSVN1YihmKSkucmVkSVN1YihzLnJlZE11bCh1KSkscD10aGlzLnoucmVkTXVsKGUueikucmVkTXVsKGEpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChmLGQscCl9LHUucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBlLnRvSigpO2lmKGUuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRTcXIoKSxyPXRoaXMueCxuPWUueC5yZWRNdWwodCksaT10aGlzLnkscz1lLnkucmVkTXVsKHQpLnJlZE11bCh0aGlzLnopLG89ci5yZWRTdWIobiksYT1pLnJlZFN1YihzKTtpZigwPT09by5jbXBuKDApKXJldHVybiAwIT09YS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBsPW8ucmVkU3FyKCksYz1sLnJlZE11bChvKSx1PXIucmVkTXVsKGwpLGg9YS5yZWRTcXIoKS5yZWRJQWRkKGMpLnJlZElTdWIodSkucmVkSVN1Yih1KSxmPWEucmVkTXVsKHUucmVkSVN1YihoKSkucmVkSVN1YihpLnJlZE11bChjKSksZD10aGlzLnoucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChoLGYsZCl9LHUucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oZSl7aWYoMD09PWUpcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIWUpcmV0dXJuIHRoaXMuZGJsKCk7dmFyIHQ7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciByPXRoaXM7Zm9yKHQ9MDt0PGU7dCsrKXI9ci5kYmwoKTtyZXR1cm4gcn12YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYscz10aGlzLngsbz10aGlzLnksYT10aGlzLnosbD1hLnJlZFNxcigpLnJlZFNxcigpLGM9by5yZWRBZGQobyk7Zm9yKHQ9MDt0PGU7dCsrKXt2YXIgdT1zLnJlZFNxcigpLGg9Yy5yZWRTcXIoKSxmPWgucmVkU3FyKCksZD11LnJlZEFkZCh1KS5yZWRJQWRkKHUpLnJlZElBZGQobi5yZWRNdWwobCkpLHA9cy5yZWRNdWwoaCksbT1kLnJlZFNxcigpLnJlZElTdWIocC5yZWRBZGQocCkpLGI9cC5yZWRJU3ViKG0pLGc9ZC5yZWRNdWwoYik7Zz1nLnJlZElBZGQoZykucmVkSVN1YihmKTt2YXIgeT1jLnJlZE11bChhKTt0KzE8ZSYmKGw9bC5yZWRNdWwoZikpLHM9bSxhPXksYz1nfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChzLGMucmVkTXVsKGkpLGEpfSx1LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSx1LnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBlLHQscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxzPWkucmVkU3FyKCksbz10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihzKTtvPW8ucmVkSUFkZChvKTt2YXIgYT1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLGw9YS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIobyksYz1zLnJlZElBZGQocyk7Yz0oYz1jLnJlZElBZGQoYykpLnJlZElBZGQoYyksZT1sLHQ9YS5yZWRNdWwoby5yZWRJU3ViKGwpKS5yZWRJU3ViKGMpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIHU9dGhpcy54LnJlZFNxcigpLGg9dGhpcy55LnJlZFNxcigpLGY9aC5yZWRTcXIoKSxkPXRoaXMueC5yZWRBZGQoaCkucmVkU3FyKCkucmVkSVN1Yih1KS5yZWRJU3ViKGYpO2Q9ZC5yZWRJQWRkKGQpO3ZhciBwPXUucmVkQWRkKHUpLnJlZElBZGQodSksbT1wLnJlZFNxcigpLGI9Zi5yZWRJQWRkKGYpO2I9KGI9Yi5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpLGU9bS5yZWRJU3ViKGQpLnJlZElTdWIoZCksdD1wLnJlZE11bChkLnJlZElTdWIoZSkpLnJlZElTdWIoYikscj0ocj10aGlzLnkucmVkTXVsKHRoaXMueikpLnJlZElBZGQocil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sdS5wcm90b3R5cGUuX3RocmVlRGJsPWZ1bmN0aW9uKCl7dmFyIGUsdCxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLHM9aS5yZWRTcXIoKSxvPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKHMpO289by5yZWRJQWRkKG8pO3ZhciBhPW4ucmVkQWRkKG4pLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmN1cnZlLmEpLGw9YS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIobyk7ZT1sO3ZhciBjPXMucmVkSUFkZChzKTtjPShjPWMucmVkSUFkZChjKSkucmVkSUFkZChjKSx0PWEucmVkTXVsKG8ucmVkSVN1YihsKSkucmVkSVN1YihjKSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciB1PXRoaXMuei5yZWRTcXIoKSxoPXRoaXMueS5yZWRTcXIoKSxmPXRoaXMueC5yZWRNdWwoaCksZD10aGlzLngucmVkU3ViKHUpLnJlZE11bCh0aGlzLngucmVkQWRkKHUpKTtkPWQucmVkQWRkKGQpLnJlZElBZGQoZCk7dmFyIHA9Zi5yZWRJQWRkKGYpLG09KHA9cC5yZWRJQWRkKHApKS5yZWRBZGQocCk7ZT1kLnJlZFNxcigpLnJlZElTdWIobSkscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihoKS5yZWRJU3ViKHUpO3ZhciBiPWgucmVkU3FyKCk7Yj0oYj0oYj1iLnJlZElBZGQoYikpLnJlZElBZGQoYikpLnJlZElBZGQoYiksdD1kLnJlZE11bChwLnJlZElTdWIoZSkpLnJlZElTdWIoYil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGUsdCxyKX0sdS5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VydmUuYSx0PXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCkscz10LnJlZFNxcigpLG89ci5yZWRTcXIoKSxhPXMucmVkQWRkKHMpLnJlZElBZGQocykucmVkSUFkZChlLnJlZE11bChpKSksbD10LnJlZEFkZCh0KSxjPShsPWwucmVkSUFkZChsKSkucmVkTXVsKG8pLHU9YS5yZWRTcXIoKS5yZWRJU3ViKGMucmVkQWRkKGMpKSxoPWMucmVkSVN1Yih1KSxmPW8ucmVkU3FyKCk7Zj0oZj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIGQ9YS5yZWRNdWwoaCkucmVkSVN1YihmKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodSxkLHApfSx1LnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBlPXRoaXMueC5yZWRTcXIoKSx0PXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXQucmVkU3FyKCksaT1lLnJlZEFkZChlKS5yZWRJQWRkKGUpLHM9aS5yZWRTcXIoKSxvPXRoaXMueC5yZWRBZGQodCkucmVkU3FyKCkucmVkSVN1YihlKS5yZWRJU3ViKG4pLGE9KG89KG89KG89by5yZWRJQWRkKG8pKS5yZWRBZGQobykucmVkSUFkZChvKSkucmVkSVN1YihzKSkucmVkU3FyKCksbD1uLnJlZElBZGQobik7bD0obD0obD1sLnJlZElBZGQobCkpLnJlZElBZGQobCkpLnJlZElBZGQobCk7dmFyIGM9aS5yZWRJQWRkKG8pLnJlZFNxcigpLnJlZElTdWIocykucmVkSVN1YihhKS5yZWRJU3ViKGwpLHU9dC5yZWRNdWwoYyk7dT0odT11LnJlZElBZGQodSkpLnJlZElBZGQodSk7dmFyIGg9dGhpcy54LnJlZE11bChhKS5yZWRJU3ViKHUpO2g9KGg9aC5yZWRJQWRkKGgpKS5yZWRJQWRkKGgpO3ZhciBmPXRoaXMueS5yZWRNdWwoYy5yZWRNdWwobC5yZWRJU3ViKGMpKS5yZWRJU3ViKG8ucmVkTXVsKGEpKSk7Zj0oZj0oZj1mLnJlZElBZGQoZikpLnJlZElBZGQoZikpLnJlZElBZGQoZik7dmFyIGQ9dGhpcy56LnJlZEFkZChvKS5yZWRTcXIoKS5yZWRJU3ViKHIpLnJlZElTdWIoYSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsZixkKX0sdS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bmV3IGkoZSx0KSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsZSl9LHUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGUpe2lmKFwiYWZmaW5lXCI9PT1lLnR5cGUpcmV0dXJuIHRoaXMuZXEoZS50b0ooKSk7aWYodGhpcz09PWUpcmV0dXJuITA7dmFyIHQ9dGhpcy56LnJlZFNxcigpLHI9ZS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKHIpLnJlZElTdWIoZS54LnJlZE11bCh0KSkuY21wbigwKSlyZXR1cm4hMTt2YXIgbj10LnJlZE11bCh0aGlzLnopLGk9ci5yZWRNdWwoZS56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoaSkucmVkSVN1YihlLnkucmVkTXVsKG4pKS5jbXBuKDApfSx1LnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy56LnJlZFNxcigpLHI9ZS50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHQpO2lmKDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwO2Zvcih2YXIgbj1lLmNsb25lKCksaT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHQpOzspe2lmKG4uaWFkZCh0aGlzLmN1cnZlLm4pLG4uY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoci5yZWRJQWRkKGkpLDA9PT10aGlzLnguY21wKHIpKXJldHVybiEwfX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSx1LnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LHtcIi4uL3V0aWxzXCI6NDE5LFwiLi9iYXNlXCI6NDA2LFwiYm4uanNcIjo0MjAsaW5oZXJpdHM6NDQwfV0sNDExOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1yLHM9ZShcImhhc2guanNcIiksbz1lKFwiLi9jdXJ2ZVwiKSxhPWUoXCIuL3V0aWxzXCIpLmFzc2VydDtmdW5jdGlvbiBsKGUpe1wic2hvcnRcIj09PWUudHlwZT90aGlzLmN1cnZlPW5ldyBvLnNob3J0KGUpOlwiZWR3YXJkc1wiPT09ZS50eXBlP3RoaXMuY3VydmU9bmV3IG8uZWR3YXJkcyhlKTp0aGlzLmN1cnZlPW5ldyBvLm1vbnQoZSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1lLmhhc2gsYSh0aGlzLmcudmFsaWRhdGUoKSxcIkludmFsaWQgY3VydmVcIiksYSh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLFwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE9cIil9ZnVuY3Rpb24gYyhlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGUse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPW5ldyBsKHQpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSkscn19KX1pLlByZXNldEN1cnZlPWwsYyhcInAxOTJcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMTkyXCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxXCIsaGFzaDpzLnNoYTI1NixnUmVkOiExLGc6W1wiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTJcIixcIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExXCJdfSksYyhcInAyMjRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMjI0XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlXCIsYjpcImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkXCIsaGFzaDpzLnNoYTI1NixnUmVkOiExLGc6W1wiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjFcIixcImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0XCJdfSksYyhcInAyNTZcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGJcIixuOlwiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTFcIixoYXNoOnMuc2hhMjU2LGdSZWQ6ITEsZzpbXCI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NlwiLFwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjVcIl19KSxjKFwicDM4NFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmY1wiLGI6XCJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZlwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3M1wiLGhhc2g6cy5zaGEzODQsZ1JlZDohMSxnOltcImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3XCIsXCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZlwiXX0pLGMoXCJwNTIxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwXCIsbjpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5XCIsaGFzaDpzLnNoYTUxMixnUmVkOiExLGc6W1wiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjZcIixcIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwXCJdfSksYyhcImN1cnZlMjU1MTlcIix7dHlwZTpcIm1vbnRcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIjc2ZDA2XCIsYjpcIjFcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6cy5zaGEyNTYsZ1JlZDohMSxnOltcIjlcIl19KSxjKFwiZWQyNTUxOVwiLHt0eXBlOlwiZWR3YXJkc1wiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiLTFcIixjOlwiMVwiLGQ6XCI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOnMuc2hhMjU2LGdSZWQ6ITEsZzpbXCIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhXCIsXCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4XCJdfSk7dHJ5e249ZShcIi4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxXCIpfWNhdGNoKGUpe249dm9pZCAwfWMoXCJzZWNwMjU2azFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJrMjU2XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIsYTpcIjBcIixiOlwiN1wiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MVwiLGg6XCIxXCIsaGFzaDpzLnNoYTI1NixiZXRhOlwiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZVwiLGxhbWJkYTpcIjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzJcIixiYXNpczpbe2E6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwiLGI6XCItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzNcIn0se2E6XCIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDhcIixiOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIn1dLGdSZWQ6ITEsZzpbXCI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4XCIsXCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4XCIsbl19KX0se1wiLi9jdXJ2ZVwiOjQwOCxcIi4vcHJlY29tcHV0ZWQvc2VjcDI1NmsxXCI6NDE4LFwiLi91dGlsc1wiOjQxOSxcImhhc2guanNcIjo0MjZ9XSw0MTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiaG1hYy1kcmJnXCIpLHM9ZShcIi4uL3V0aWxzXCIpLG89ZShcIi4uL2N1cnZlc1wiKSxhPWUoXCJicm9yYW5kXCIpLGw9cy5hc3NlcnQsYz1lKFwiLi9rZXlcIiksdT1lKFwiLi9zaWduYXR1cmVcIik7ZnVuY3Rpb24gaChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBoKSlyZXR1cm4gbmV3IGgoZSk7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLGUpLFwiVW5rbm93biBjdXJ2ZSBcIitlKSxlPW9bZV0pLGUgaW5zdGFuY2VvZiBvLlByZXNldEN1cnZlJiYoZT17Y3VydmU6ZX0pLHRoaXMuY3VydmU9ZS5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPWUuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShlLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPWUuaGFzaHx8ZS5jdXJ2ZS5oYXNofXQuZXhwb3J0cz1oLGgucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBjKHRoaXMsZSl9LGgucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMuZnJvbVByaXZhdGUodGhpcyxlLHQpfSxoLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMuZnJvbVB1YmxpYyh0aGlzLGUsdCl9LGgucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oZSl7ZXx8KGU9e30pO2Zvcih2YXIgdD1uZXcgaSh7aGFzaDp0aGlzLmhhc2gscGVyczplLnBlcnMscGVyc0VuYzplLnBlcnNFbmN8fFwidXRmOFwiLGVudHJvcHk6ZS5lbnRyb3B5fHxhKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6ZS5lbnRyb3B5JiZlLmVudHJvcHlFbmN8fFwidXRmOFwiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxyPXRoaXMubi5ieXRlTGVuZ3RoKCkscz10aGlzLm4uc3ViKG5ldyBuKDIpKTs7KXt2YXIgbz1uZXcgbih0LmdlbmVyYXRlKHIpKTtpZighKG8uY21wKHMpPjApKXJldHVybiBvLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUobyl9fSxoLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oZSx0KXt2YXIgcj04KmUuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcj4wJiYoZT1lLnVzaHJuKHIpKSwhdCYmZS5jbXAodGhpcy5uKT49MD9lLnN1Yih0aGlzLm4pOmV9LGgucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oZSx0LHIscyl7XCJvYmplY3RcIj09dHlwZW9mIHImJihzPXIscj1udWxsKSxzfHwocz17fSksdD10aGlzLmtleUZyb21Qcml2YXRlKHQsciksZT10aGlzLl90cnVuY2F0ZVRvTihuZXcgbihlLDE2KSk7Zm9yKHZhciBvPXRoaXMubi5ieXRlTGVuZ3RoKCksYT10LmdldFByaXZhdGUoKS50b0FycmF5KFwiYmVcIixvKSxsPWUudG9BcnJheShcImJlXCIsbyksYz1uZXcgaSh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTphLG5vbmNlOmwscGVyczpzLnBlcnMscGVyc0VuYzpzLnBlcnNFbmN8fFwidXRmOFwifSksaD10aGlzLm4uc3ViKG5ldyBuKDEpKSxmPTA7O2YrKyl7dmFyIGQ9cy5rP3MuayhmKTpuZXcgbihjLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChkPXRoaXMuX3RydW5jYXRlVG9OKGQsITApKS5jbXBuKDEpPD0wfHxkLmNtcChoKT49MCkpe3ZhciBwPXRoaXMuZy5tdWwoZCk7aWYoIXAuaXNJbmZpbml0eSgpKXt2YXIgbT1wLmdldFgoKSxiPW0udW1vZCh0aGlzLm4pO2lmKDAhPT1iLmNtcG4oMCkpe3ZhciBnPWQuaW52bSh0aGlzLm4pLm11bChiLm11bCh0LmdldFByaXZhdGUoKSkuaWFkZChlKSk7aWYoMCE9PShnPWcudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgeT0ocC5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09bS5jbXAoYik/MjowKTtyZXR1cm4gcy5jYW5vbmljYWwmJmcuY21wKHRoaXMubmgpPjAmJihnPXRoaXMubi5zdWIoZykseV49MSksbmV3IHUoe3I6YixzOmcscmVjb3ZlcnlQYXJhbTp5fSl9fX19fX0saC5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUsdCxyLGkpe2U9dGhpcy5fdHJ1bmNhdGVUb04obmV3IG4oZSwxNikpLHI9dGhpcy5rZXlGcm9tUHVibGljKHIsaSk7dmFyIHM9KHQ9bmV3IHUodCxcImhleFwiKSkucixvPXQucztpZihzLmNtcG4oMSk8MHx8cy5jbXAodGhpcy5uKT49MClyZXR1cm4hMTtpZihvLmNtcG4oMSk8MHx8by5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgYSxsPW8uaW52bSh0aGlzLm4pLGM9bC5tdWwoZSkudW1vZCh0aGlzLm4pLGg9bC5tdWwocykudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShhPXRoaXMuZy5qbXVsQWRkKGMsci5nZXRQdWJsaWMoKSxoKSkuaXNJbmZpbml0eSgpJiZhLmVxWFRvUChzKTohKGE9dGhpcy5nLm11bEFkZChjLHIuZ2V0UHVibGljKCksaCkpLmlzSW5maW5pdHkoKSYmMD09PWEuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAocyl9LGgucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oZSx0LHIsaSl7bCgoMyZyKT09PXIsXCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzXCIpLHQ9bmV3IHUodCxpKTt2YXIgcz10aGlzLm4sbz1uZXcgbihlKSxhPXQucixjPXQucyxoPTEmcixmPXI+PjE7aWYoYS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmYpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlXCIpO2E9Zj90aGlzLmN1cnZlLnBvaW50RnJvbVgoYS5hZGQodGhpcy5jdXJ2ZS5uKSxoKTp0aGlzLmN1cnZlLnBvaW50RnJvbVgoYSxoKTt2YXIgZD10LnIuaW52bShzKSxwPXMuc3ViKG8pLm11bChkKS51bW9kKHMpLG09Yy5tdWwoZCkudW1vZChzKTtyZXR1cm4gdGhpcy5nLm11bEFkZChwLGEsbSl9LGgucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oZSx0LHIsbil7aWYobnVsbCE9PSh0PW5ldyB1KHQsbikpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIHQucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgczt0cnl7cz10aGlzLnJlY292ZXJQdWJLZXkoZSx0LGkpfWNhdGNoKGUpe2NvbnRpbnVlfWlmKHMuZXEocikpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yXCIpfX0se1wiLi4vY3VydmVzXCI6NDExLFwiLi4vdXRpbHNcIjo0MTksXCIuL2tleVwiOjQxMyxcIi4vc2lnbmF0dXJlXCI6NDE0LFwiYm4uanNcIjo0MjAsYnJvcmFuZDoxODcsXCJobWFjLWRyYmdcIjo0Mzh9XSw0MTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiLi4vdXRpbHNcIikuYXNzZXJ0O2Z1bmN0aW9uIHMoZSx0KXt0aGlzLmVjPWUsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCx0LnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUodC5wcml2LHQucHJpdkVuYyksdC5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyh0LnB1Yix0LnB1YkVuYyl9dC5leHBvcnRzPXMscy5mcm9tUHVibGljPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHM/dDpuZXcgcyhlLHtwdWI6dCxwdWJFbmM6cn0pfSxzLmZyb21Qcml2YXRlPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHM/dDpuZXcgcyhlLHtwcml2OnQscHJpdkVuYzpyfSl9LHMucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gZS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06ZS52YWxpZGF0ZSgpP2UubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LHMucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihlLHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYodD1lLGU9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLHQ/dGhpcy5wdWIuZW5jb2RlKHQsZSk6dGhpcy5wdWJ9LHMucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0scy5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLnByaXY9bmV3IG4oZSx0fHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LHMucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oZSx0KXtpZihlLnh8fGUueSlyZXR1cm5cIm1vbnRcIj09PXRoaXMuZWMuY3VydmUudHlwZT9pKGUueCxcIk5lZWQgeCBjb29yZGluYXRlXCIpOlwic2hvcnRcIiE9PXRoaXMuZWMuY3VydmUudHlwZSYmXCJlZHdhcmRzXCIhPT10aGlzLmVjLmN1cnZlLnR5cGV8fGkoZS54JiZlLnksXCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlXCIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChlLngsZS55KSk7dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChlLHQpfSxzLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUudmFsaWRhdGUoKXx8aShlLnZhbGlkYXRlKCksXCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZFwiKSxlLm11bCh0aGlzLnByaXYpLmdldFgoKX0scy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihlLHQscil7cmV0dXJuIHRoaXMuZWMuc2lnbihlLHRoaXMsdCxyKX0scy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KGUsdCx0aGlzKX0scy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVyblwiPEtleSBwcml2OiBcIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpK1wiIHB1YjogXCIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpK1wiID5cIn19LHtcIi4uL3V0aWxzXCI6NDE5LFwiYm4uanNcIjo0MjB9XSw0MTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiLi4vdXRpbHNcIikscz1pLmFzc2VydDtmdW5jdGlvbiBvKGUsdCl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuIGU7dGhpcy5faW1wb3J0REVSKGUsdCl8fChzKGUuciYmZS5zLFwiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzXCIpLHRoaXMucj1uZXcgbihlLnIsMTYpLHRoaXMucz1uZXcgbihlLnMsMTYpLHZvaWQgMD09PWUucmVjb3ZlcnlQYXJhbT90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09ZS5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiBhKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj1lW3QucGxhY2UrK107aWYoISgxMjgmcikpcmV0dXJuIHI7dmFyIG49MTUmcjtpZigwPT09bnx8bj40KXJldHVybiExO2Zvcih2YXIgaT0wLHM9MCxvPXQucGxhY2U7czxuO3MrKyxvKyspaTw8PTgsaXw9ZVtvXSxpPj4+PTA7cmV0dXJuIShpPD0xMjcpJiYodC5wbGFjZT1vLGkpfWZ1bmN0aW9uIGMoZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aC0xOyFlW3RdJiYhKDEyOCZlW3QrMV0pJiZ0PHI7KXQrKztyZXR1cm4gMD09PXQ/ZTplLnNsaWNlKHQpfWZ1bmN0aW9uIHUoZSx0KXtpZih0PDEyOCllLnB1c2godCk7ZWxzZXt2YXIgcj0xKyhNYXRoLmxvZyh0KS9NYXRoLkxOMj4+PjMpO2ZvcihlLnB1c2goMTI4fHIpOy0tcjspZS5wdXNoKHQ+Pj4ocjw8MykmMjU1KTtlLnB1c2godCl9fXQuZXhwb3J0cz1vLG8ucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oZSx0KXtlPWkudG9BcnJheShlLHQpO3ZhciByPW5ldyBhO2lmKDQ4IT09ZVtyLnBsYWNlKytdKXJldHVybiExO3ZhciBzPWwoZSxyKTtpZighMT09PXMpcmV0dXJuITE7aWYocytyLnBsYWNlIT09ZS5sZW5ndGgpcmV0dXJuITE7aWYoMiE9PWVbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgbz1sKGUscik7aWYoITE9PT1vKXJldHVybiExO3ZhciBjPWUuc2xpY2Uoci5wbGFjZSxvK3IucGxhY2UpO2lmKHIucGxhY2UrPW8sMiE9PWVbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgdT1sKGUscik7aWYoITE9PT11KXJldHVybiExO2lmKGUubGVuZ3RoIT09dStyLnBsYWNlKXJldHVybiExO3ZhciBoPWUuc2xpY2Uoci5wbGFjZSx1K3IucGxhY2UpO2lmKDA9PT1jWzBdKXtpZighKDEyOCZjWzFdKSlyZXR1cm4hMTtjPWMuc2xpY2UoMSl9aWYoMD09PWhbMF0pe2lmKCEoMTI4JmhbMV0pKXJldHVybiExO2g9aC5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBuKGMpLHRoaXMucz1uZXcgbihoKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sby5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yLnRvQXJyYXkoKSxyPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZ0WzBdJiYodD1bMF0uY29uY2F0KHQpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSksdD1jKHQpLHI9YyhyKTshKHJbMF18fDEyOCZyWzFdKTspcj1yLnNsaWNlKDEpO3ZhciBuPVsyXTt1KG4sdC5sZW5ndGgpLChuPW4uY29uY2F0KHQpKS5wdXNoKDIpLHUobixyLmxlbmd0aCk7dmFyIHM9bi5jb25jYXQociksbz1bNDhdO3JldHVybiB1KG8scy5sZW5ndGgpLG89by5jb25jYXQocyksaS5lbmNvZGUobyxlKX19LHtcIi4uL3V0aWxzXCI6NDE5LFwiYm4uanNcIjo0MjB9XSw0MTU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiaGFzaC5qc1wiKSxpPWUoXCIuLi9jdXJ2ZXNcIikscz1lKFwiLi4vdXRpbHNcIiksbz1zLmFzc2VydCxhPXMucGFyc2VCeXRlcyxsPWUoXCIuL2tleVwiKSxjPWUoXCIuL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiB1KGUpe2lmKG8oXCJlZDI1NTE5XCI9PT1lLFwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhclwiKSwhKHRoaXMgaW5zdGFuY2VvZiB1KSlyZXR1cm4gbmV3IHUoZSk7ZT1pW2VdLmN1cnZlLHRoaXMuY3VydmU9ZSx0aGlzLmc9ZS5nLHRoaXMuZy5wcmVjb21wdXRlKGUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9ZS5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKGUubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9bi5zaGE1MTJ9dC5leHBvcnRzPXUsdS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihlLHQpe2U9YShlKTt2YXIgcj10aGlzLmtleUZyb21TZWNyZXQodCksbj10aGlzLmhhc2hJbnQoci5tZXNzYWdlUHJlZml4KCksZSksaT10aGlzLmcubXVsKG4pLHM9dGhpcy5lbmNvZGVQb2ludChpKSxvPXRoaXMuaGFzaEludChzLHIucHViQnl0ZXMoKSxlKS5tdWwoci5wcml2KCkpLGw9bi5hZGQobykudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6aSxTOmwsUmVuY29kZWQ6c30pfSx1LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZSx0LHIpe2U9YShlKSx0PXRoaXMubWFrZVNpZ25hdHVyZSh0KTt2YXIgbj10aGlzLmtleUZyb21QdWJsaWMociksaT10aGlzLmhhc2hJbnQodC5SZW5jb2RlZCgpLG4ucHViQnl0ZXMoKSxlKSxzPXRoaXMuZy5tdWwodC5TKCkpO3JldHVybiB0LlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpLmVxKHMpfSx1LnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuaGFzaCgpLHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUudXBkYXRlKGFyZ3VtZW50c1t0XSk7cmV0dXJuIHMuaW50RnJvbUxFKGUuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sdS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihlKXtyZXR1cm4gbC5mcm9tUHVibGljKHRoaXMsZSl9LHUucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGwuZnJvbVNlY3JldCh0aGlzLGUpfSx1LnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYz9lOm5ldyBjKHRoaXMsZSl9LHUucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiB0W3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PWUuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsdH0sdS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KGU9cy5wYXJzZUJ5dGVzKGUpKS5sZW5ndGgtMSxyPWUuc2xpY2UoMCx0KS5jb25jYXQoLTEyOSZlW3RdKSxuPTAhPSgxMjgmZVt0XSksaT1zLmludEZyb21MRShyKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGksbil9LHUucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihlKXtyZXR1cm4gZS50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sdS5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKGUpe3JldHVybiBzLmludEZyb21MRShlKX0sdS5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LHtcIi4uL2N1cnZlc1wiOjQxMSxcIi4uL3V0aWxzXCI6NDE5LFwiLi9rZXlcIjo0MTYsXCIuL3NpZ25hdHVyZVwiOjQxNyxcImhhc2guanNcIjo0MjZ9XSw0MTY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1uLmFzc2VydCxzPW4ucGFyc2VCeXRlcyxvPW4uY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gYShlLHQpe3RoaXMuZWRkc2E9ZSx0aGlzLl9zZWNyZXQ9cyh0LnNlY3JldCksZS5pc1BvaW50KHQucHViKT90aGlzLl9wdWI9dC5wdWI6dGhpcy5fcHViQnl0ZXM9cyh0LnB1Yil9YS5mcm9tUHVibGljPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhP3Q6bmV3IGEoZSx7cHViOnR9KX0sYS5mcm9tU2VjcmV0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhP3Q6bmV3IGEoZSx7c2VjcmV0OnR9KX0sYS5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sbyhhLFwicHViQnl0ZXNcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pKSxvKGEsXCJwdWJcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSksbyhhLFwicHJpdkJ5dGVzXCIsKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lZGRzYSx0PXRoaXMuaGFzaCgpLHI9ZS5lbmNvZGluZ0xlbmd0aC0xLG49dC5zbGljZSgwLGUuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBuWzBdJj0yNDgsbltyXSY9MTI3LG5bcl18PTY0LG59KSksbyhhLFwicHJpdlwiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pKSxvKGEsXCJoYXNoXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pKSxvKGEsXCJtZXNzYWdlUHJlZml4XCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSkpLGEucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnlcIiksdGhpcy5lZGRzYS5zaWduKGUsdGhpcyl9LGEucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShlLHQsdGhpcyl9LGEucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihlKXtyZXR1cm4gaSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5XCIpLG4uZW5jb2RlKHRoaXMuc2VjcmV0KCksZSl9LGEucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihlKXtyZXR1cm4gbi5lbmNvZGUodGhpcy5wdWJCeXRlcygpLGUpfSx0LmV4cG9ydHM9YX0se1wiLi4vdXRpbHNcIjo0MTl9XSw0MTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiLi4vdXRpbHNcIikscz1pLmFzc2VydCxvPWkuY2FjaGVkUHJvcGVydHksYT1pLnBhcnNlQnl0ZXM7ZnVuY3Rpb24gbChlLHQpe3RoaXMuZWRkc2E9ZSxcIm9iamVjdFwiIT10eXBlb2YgdCYmKHQ9YSh0KSksQXJyYXkuaXNBcnJheSh0KSYmKHQ9e1I6dC5zbGljZSgwLGUuZW5jb2RpbmdMZW5ndGgpLFM6dC5zbGljZShlLmVuY29kaW5nTGVuZ3RoKX0pLHModC5SJiZ0LlMsXCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFNcIiksZS5pc1BvaW50KHQuUikmJih0aGlzLl9SPXQuUiksdC5TIGluc3RhbmNlb2YgbiYmKHRoaXMuX1M9dC5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KHQuUik/dC5SOnQuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheSh0LlMpP3QuUzp0LlNlbmNvZGVkfW8obCxcIlNcIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pKSxvKGwsXCJSXCIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pKSxvKGwsXCJSZW5jb2RlZFwiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pKSxvKGwsXCJTZW5jb2RlZFwiLChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSksbC5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LGwucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGkuZW5jb2RlKHRoaXMudG9CeXRlcygpLFwiaGV4XCIpLnRvVXBwZXJDYXNlKCl9LHQuZXhwb3J0cz1sfSx7XCIuLi91dGlsc1wiOjQxOSxcImJuLmpzXCI6NDIwfV0sNDE4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbXCJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhXCIsXCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxXCJdLFtcIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDhcIixcIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWZcIl0sW1wiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOVwiLFwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NVwiXSxbXCIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwXCIsXCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTlcIl0sW1wiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwY1wiLFwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNlwiXSxbXCI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhXCIsXCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmXCJdLFtcImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmFcIixcIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTlcIl0sW1wiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMFwiLFwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOVwiXSxbXCJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkXCIsXCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkXCJdLFtcImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmRcIixcImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODhcIl0sW1wiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMVwiLFwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZFwiXSxbXCI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwXCIsXCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4XCJdLFtcIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDdcIixcIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmFcIl0sW1wiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MlwiLFwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1M1wiXSxbXCI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTdcIixcIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjBcIl0sW1wiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZFwiLFwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMFwiXSxbXCI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzXCIsXCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2XCJdLFtcIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYVwiLFwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OVwiXSxbXCI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4XCIsXCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3XCJdLFtcImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmRcIixcIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGFcIl0sW1wiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNVwiLFwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZFwiXSxbXCIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0XCIsXCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyXCJdLFtcIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2NcIixcIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTZcIl0sW1wiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNlwiLFwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZlwiXSxbXCI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5XCIsXCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxXCJdLFtcImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTFcIixcIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzNcIl0sW1wiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YlwiLFwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZlwiXSxbXCJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzXCIsXCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3XCJdLFtcImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWRcIixcImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzhcIl0sW1wiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MFwiLFwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMVwiXSxbXCI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0XCIsXCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTBcIl0sW1wiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYVwiLFwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MlwiXSxbXCJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExXCIsXCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjXCJdLFtcIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWVcIixcImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGJcIl0sW1wiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MVwiLFwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MVwiXSxbXCJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmXCIsXCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDVcIl0sW1wiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOFwiLFwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMFwiXSxbXCIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkXCIsXCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0XCJdLFtcIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTZcIixcIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkXCJdLFtcIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2RcIixcImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWRcIl0sW1wiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNVwiLFwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOFwiXSxbXCJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2XCIsXCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4XCJdLFtcIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzFcIixcIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWNcIl0sW1wiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjXCIsXCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmXCJdLFtcIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTFcIixcIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjJcIl0sW1wiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZVwiLFwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwN1wiXSxbXCI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxXCIsXCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjXCJdLFtcImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjNcIixcImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2RcIl0sW1wiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZlwiLFwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNFwiXSxbXCIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5XCIsXCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkXCJdLFtcIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmVcIixcImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDBcIl0sW1wiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOVwiLFwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMVwiXSxbXCJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyXCIsXCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxXCJdLFtcImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTNcIixcIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGNcIl0sW1wiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3Y1wiLFwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3M1wiXSxbXCI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhXCIsXCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkXCJdLFtcImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTFcIixcImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDVcIl0sW1wiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3M1wiLFwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OVwiXSxbXCI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4XCIsXCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlXCJdLFtcIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmJcIixcIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjdcIl0sW1wiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NlwiLFwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxXCJdLFtcIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWFcIixcIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODJcIl0sW1wiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwXCIsXCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1XCJdLFtcImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODdcIixcIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzNcIl0sW1wiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZVwiLFwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MlwiXV19LG5hZjp7d25kOjcscG9pbnRzOltbXCJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5XCIsXCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyXCJdLFtcIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTRcIixcImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDZcIl0sW1wiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliY1wiLFwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYVwiXSxbXCJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlXCIsXCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3XCJdLFtcIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2JcIixcImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWJcIl0sW1wiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOFwiLFwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxXCJdLFtcImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGVcIixcIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNThcIl0sW1wiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNFwiLFwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3N1wiXSxbXCIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjXCIsXCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhXCJdLFtcIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDVcIixcIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGNcIl0sW1wiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZlwiLFwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3XCJdLFtcIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTRcIixcIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDJcIl0sW1wiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOVwiLFwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NVwiXSxbXCJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiXCIsXCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyXCJdLFtcIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjRcIixcImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODJcIl0sW1wiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNVwiLFwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NlwiXSxbXCI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5XCIsXCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDlcIl0sW1wiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZFwiLFwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZlwiXSxbXCI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmXCIsXCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhXCJdLFtcIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmJcIixcImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmN1wiXSxbXCJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5XCIsXCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzXCJdLFtcIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2M1wiLFwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YVwiXSxbXCI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0XCIsXCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2XCJdLFtcImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzBcIixcImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzdcIl0sW1wiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YlwiLFwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZVwiXSxbXCJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3XCIsXCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2XCJdLFtcImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDFcIixcImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzZcIl0sW1wiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMFwiLFwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MFwiXSxbXCI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1XCIsXCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjFcIl0sW1wiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOFwiLFwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzXCJdLFtcImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZThcIixcIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjVcIl0sW1wiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYlwiLFwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YlwiXSxbXCJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmXCIsXCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3XCJdLFtcIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDNcIixcImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjhcIl0sW1wiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYVwiLFwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YVwiXSxbXCJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1XCIsXCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2XCJdLFtcIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWFcIixcIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTZcIl0sW1wiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZVwiLFwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZVwiXSxbXCJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4XCIsXCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkXCJdLFtcIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmNcIixcIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTJcIl0sW1wiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOVwiLFwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZVwiXSxbXCI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiXCIsXCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3XCJdLFtcIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2FcIixcImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTFcIl0sW1wiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZlwiLFwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNFwiXSxbXCIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwXCIsXCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1XCJdLFtcIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDRcIixcImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWRcIl0sW1wiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1Y1wiLFwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZFwiXSxbXCJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwXCIsXCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5XCJdLFtcImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODBcIixcImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNlwiXSxbXCIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzXCIsXCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0XCJdLFtcIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGZcIixcIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZVwiXSxbXCJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzXCIsXCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxXCJdLFtcImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDhcIixcImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2JcIl0sW1wiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZlwiLFwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MVwiXSxbXCI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1XCIsXCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2XCJdLFtcImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDZcIixcIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWVcIl0sW1wiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNVwiLFwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZFwiXSxbXCJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5XCIsXCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjXCJdLFtcIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MVwiLFwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNFwiXSxbXCI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1XCIsXCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjXCJdLFtcImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjVcIixcIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmJcIl0sW1wiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5N1wiLFwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzXCJdLFtcIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODFcIixcIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NFwiXSxbXCI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1XCIsXCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1XCJdLFtcIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjZcIixcImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmNcIl0sW1wiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2XCIsXCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0XCJdLFtcIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGVcIixcIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGVcIl0sW1wiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NFwiLFwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2XCJdLFtcIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzFcIixcIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTFcIl0sW1wiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MVwiLFwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiXCJdLFtcImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTJcIixcImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjJcIl0sW1wiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1XCIsXCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjXCJdLFtcImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2JcIixcIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTNcIl0sW1wiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNFwiLFwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZFwiXSxbXCJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmXCIsXCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwXCJdLFtcImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5XCIsXCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0XCJdLFtcIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDZcIixcImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTZcIl0sW1wiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NFwiLFwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNFwiXSxbXCIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhXCIsXCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3XCJdLFtcImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzBcIixcImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTNcIl0sW1wiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5N1wiLFwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NlwiXSxbXCJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTNcIixcImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzhcIl0sW1wiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZlwiLFwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmXCJdLFtcIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzhcIixcIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDhcIl0sW1wiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YVwiLFwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YVwiXSxbXCJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExXCIsXCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0XCJdLFtcIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDJcIixcIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzdcIl0sW1wiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYVwiLFwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmN1wiXSxbXCJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2XCIsXCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkXCJdLFtcImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODZcIixcIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmFcIl0sW1wiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZVwiLFwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NFwiXSxbXCI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0XCIsXCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3XCJdLFtcImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGFcIixcImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTdcIl0sW1wiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OVwiLFwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMFwiXSxbXCJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmXCIsXCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1XCJdLFtcImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGNcIixcIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2VcIl0sW1wiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MlwiLFwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMVwiXSxbXCJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhXCIsXCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyXCJdLFtcImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODBcIixcIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjNcIl0sW1wiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZFwiLFwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOFwiXSxbXCI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExXCIsXCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4XCJdLFtcIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjNcIixcImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NVwiXSxbXCJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyXCIsXCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkXCJdLFtcIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTNcIixcImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWNcIl0sW1wiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMFwiLFwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwXCJdLFtcIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNThcIixcImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2NcIl0sW1wiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmN1wiLFwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNFwiXSxbXCI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4XCIsXCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmXCJdLFtcIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2VcIixcIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDlcIl0sW1wiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZFwiLFwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2XCJdLFtcIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmJcIixcIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTVcIl0sW1wiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZlwiLFwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4N1wiXSxbXCIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2XCIsXCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiXCJdLFtcImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTdcIixcIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmNcIl0sW1wiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YVwiLFwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3Y1wiXSxbXCJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjXCIsXCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmXCJdLFtcImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTJcIixcIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2FcIl0sW1wiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYlwiLFwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NlwiXSxbXCI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1XCIsXCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmXCJdLFtcIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTdcIixcIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDNcIl0sW1wiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOVwiLFwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOFwiXSxbXCIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzXCIsXCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4XCJdLFtcIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTdcIixcIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3M1wiXSxbXCIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2XCIsXCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzXCJdLFtcIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYThcIixcIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDhcIl0sW1wiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMVwiLFwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMVwiXSxbXCIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwXCIsXCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5XCJdXX19fSx7fV0sNDE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cixpPWUoXCJibi5qc1wiKSxzPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpLG89ZShcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIik7bi5hc3NlcnQ9cyxuLnRvQXJyYXk9by50b0FycmF5LG4uemVybzI9by56ZXJvMixuLnRvSGV4PW8udG9IZXgsbi5lbmNvZGU9by5lbmNvZGUsbi5nZXROQUY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPW5ldyBBcnJheShNYXRoLm1heChlLmJpdExlbmd0aCgpLHIpKzEpO24uZmlsbCgwKTtmb3IodmFyIGk9MTw8dCsxLHM9ZS5jbG9uZSgpLG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGEsbD1zLmFuZGxuKGktMSk7cy5pc09kZCgpPyhhPWw+KGk+PjEpLTE/KGk+PjEpLWw6bCxzLmlzdWJuKGEpKTphPTAsbltvXT1hLHMuaXVzaHJuKDEpfXJldHVybiBufSxuLmdldEpTRj1mdW5jdGlvbihlLHQpe3ZhciByPVtbXSxbXV07ZT1lLmNsb25lKCksdD10LmNsb25lKCk7Zm9yKHZhciBuLGk9MCxzPTA7ZS5jbXBuKC1pKT4wfHx0LmNtcG4oLXMpPjA7KXt2YXIgbyxhLGw9ZS5hbmRsbigzKStpJjMsYz10LmFuZGxuKDMpK3MmMzszPT09bCYmKGw9LTEpLDM9PT1jJiYoYz0tMSksbz0wPT0oMSZsKT8wOjMhPT0obj1lLmFuZGxuKDcpK2kmNykmJjUhPT1ufHwyIT09Yz9sOi1sLHJbMF0ucHVzaChvKSxhPTA9PSgxJmMpPzA6MyE9PShuPXQuYW5kbG4oNykrcyY3KSYmNSE9PW58fDIhPT1sP2M6LWMsclsxXS5wdXNoKGEpLDIqaT09PW8rMSYmKGk9MS1pKSwyKnM9PT1hKzEmJihzPTEtcyksZS5pdXNocm4oMSksdC5pdXNocm4oMSl9cmV0dXJuIHJ9LG4uY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVwiX1wiK3Q7ZS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09ci5jYWxsKHRoaXMpfX0sbi5wYXJzZUJ5dGVzPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP24udG9BcnJheShlLFwiaGV4XCIpOmV9LG4uaW50RnJvbUxFPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlLFwiaGV4XCIsXCJsZVwiKX19LHtcImJuLmpzXCI6NDIwLFwibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1MyxcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIjo0NTR9XSw0MjA6W2Z1bmN0aW9uKGUsdCxyKXthcmd1bWVudHNbNF1bMTg0XVswXS5hcHBseShyLGFyZ3VtZW50cyl9LHtidWZmZXI6MTg4LGR1cDoxODR9XSw0MjE6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e25hbWU6XCJlbGxpcHRpY1wiLHZlcnNpb246XCI2LjUuNFwiLGRlc2NyaXB0aW9uOlwiRUMgY3J5cHRvZ3JhcGh5XCIsbWFpbjpcImxpYi9lbGxpcHRpYy5qc1wiLGZpbGVzOltcImxpYlwiXSxzY3JpcHRzOntsaW50OlwiZXNsaW50IGxpYiB0ZXN0XCIsXCJsaW50OmZpeFwiOlwibnBtIHJ1biBsaW50IC0tIC0tZml4XCIsdW5pdDpcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzXCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHJlcG9zaXRvcnk6e3R5cGU6XCJnaXRcIix1cmw6XCJnaXRAZ2l0aHViLmNvbTppbmR1dG55L2VsbGlwdGljXCJ9LGtleXdvcmRzOltcIkVDXCIsXCJFbGxpcHRpY1wiLFwiY3VydmVcIixcIkNyeXB0b2dyYXBoeVwiXSxhdXRob3I6XCJGZWRvciBJbmR1dG55IDxmZWRvckBpbmR1dG55LmNvbT5cIixsaWNlbnNlOlwiTUlUXCIsYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGhvbWVwYWdlOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixkZXZEZXBlbmRlbmNpZXM6e2JyZnM6XCJeMi4wLjJcIixjb3ZlcmFsbHM6XCJeMy4xLjBcIixlc2xpbnQ6XCJeNy42LjBcIixncnVudDpcIl4xLjIuMVwiLFwiZ3J1bnQtYnJvd3NlcmlmeVwiOlwiXjUuMy4wXCIsXCJncnVudC1jbGlcIjpcIl4xLjMuMlwiLFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6XCJeMy4wLjBcIixcImdydW50LWNvbnRyaWItY29weVwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLXVnbGlmeVwiOlwiXjUuMC4wXCIsXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOlwiXjUuMC4yXCIsXCJncnVudC1zYXVjZWxhYnNcIjpcIl45LjAuMVwiLGlzdGFuYnVsOlwiXjAuNC41XCIsbW9jaGE6XCJeOC4wLjFcIn0sZGVwZW5kZW5jaWVzOntcImJuLmpzXCI6XCJeNC4xMS45XCIsYnJvcmFuZDpcIl4xLjEuMFwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsXCJobWFjLWRyYmdcIjpcIl4xLjAuMVwiLGluaGVyaXRzOlwiXjIuMC40XCIsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6XCJeMS4wLjFcIixcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIjpcIl4xLjAuMVwifX19LHt9XSw0MjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbigpe307cmV0dXJuIHQucHJvdG90eXBlPWUsbmV3IHR9LGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHIpJiZ0LnB1c2gocik7cmV0dXJuIHJ9LHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZSxhcmd1bWVudHMpfX07ZnVuY3Rpb24gbygpe3RoaXMuX2V2ZW50cyYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsXCJfZXZlbnRzXCIpfHwodGhpcy5fZXZlbnRzPW4obnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfXQuZXhwb3J0cz1vLG8uRXZlbnRFbWl0dGVyPW8sby5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsby5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIGEsbD0xMDt0cnl7dmFyIGM9e307T2JqZWN0LmRlZmluZVByb3BlcnR5JiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxcInhcIix7dmFsdWU6MH0pLGE9MD09PWMueH1jYXRjaChlKXthPSExfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHZvaWQgMD09PWUuX21heExpc3RlbmVycz9vLmRlZmF1bHRNYXhMaXN0ZW5lcnM6ZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIGgoZSx0LHIpe2lmKHQpZS5jYWxsKHIpO2Vsc2UgZm9yKHZhciBuPWUubGVuZ3RoLGk9XyhlLG4pLHM9MDtzPG47KytzKWlbc10uY2FsbChyKX1mdW5jdGlvbiBmKGUsdCxyLG4pe2lmKHQpZS5jYWxsKHIsbik7ZWxzZSBmb3IodmFyIGk9ZS5sZW5ndGgscz1fKGUsaSksbz0wO288aTsrK28pc1tvXS5jYWxsKHIsbil9ZnVuY3Rpb24gZChlLHQscixuLGkpe2lmKHQpZS5jYWxsKHIsbixpKTtlbHNlIGZvcih2YXIgcz1lLmxlbmd0aCxvPV8oZSxzKSxhPTA7YTxzOysrYSlvW2FdLmNhbGwocixuLGkpfWZ1bmN0aW9uIHAoZSx0LHIsbixpLHMpe2lmKHQpZS5jYWxsKHIsbixpLHMpO2Vsc2UgZm9yKHZhciBvPWUubGVuZ3RoLGE9XyhlLG8pLGw9MDtsPG87KytsKWFbbF0uY2FsbChyLG4saSxzKX1mdW5jdGlvbiBtKGUsdCxyLG4pe2lmKHQpZS5hcHBseShyLG4pO2Vsc2UgZm9yKHZhciBpPWUubGVuZ3RoLHM9XyhlLGkpLG89MDtvPGk7KytvKXNbb10uYXBwbHkocixuKX1mdW5jdGlvbiBiKGUsdCxyLGkpe3ZhciBzLG8sYTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtpZigobz1lLl9ldmVudHMpPyhvLm5ld0xpc3RlbmVyJiYoZS5lbWl0KFwibmV3TGlzdGVuZXJcIix0LHIubGlzdGVuZXI/ci5saXN0ZW5lcjpyKSxvPWUuX2V2ZW50cyksYT1vW3RdKToobz1lLl9ldmVudHM9bihudWxsKSxlLl9ldmVudHNDb3VudD0wKSxhKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhP2E9b1t0XT1pP1tyLGFdOlthLHJdOmk/YS51bnNoaWZ0KHIpOmEucHVzaChyKSwhYS53YXJuZWQmJihzPXUoZSkpJiZzPjAmJmEubGVuZ3RoPnMpe2Eud2FybmVkPSEwO3ZhciBsPW5ldyBFcnJvcihcIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gXCIrYS5sZW5ndGgrJyBcIicrU3RyaW5nKHQpKydcIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicpO2wubmFtZT1cIk1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZ1wiLGwuZW1pdHRlcj1lLGwudHlwZT10LGwuY291bnQ9YS5sZW5ndGgsXCJvYmplY3RcIj09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKFwiJXM6ICVzXCIsbC5uYW1lLGwubWVzc2FnZSl9fWVsc2UgYT1vW3RdPXIsKytlLl9ldmVudHNDb3VudDtyZXR1cm4gZX1mdW5jdGlvbiBnKCl7aWYoIXRoaXMuZmlyZWQpc3dpdGNoKHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCxhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7Y2FzZSAxOnJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQsYXJndW1lbnRzWzBdKTtjYXNlIDI6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdKTtjYXNlIDM6cmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCxhcmd1bWVudHNbMF0sYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7ZGVmYXVsdDpmb3IodmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHQ9MDt0PGUubGVuZ3RoOysrdCllW3RdPWFyZ3VtZW50c1t0XTt0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGUpfX1mdW5jdGlvbiB5KGUsdCxyKXt2YXIgbj17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6ZSx0eXBlOnQsbGlzdGVuZXI6cn0saT1zLmNhbGwoZyxuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiB2KGUsdCxyKXt2YXIgbj1lLl9ldmVudHM7aWYoIW4pcmV0dXJuW107dmFyIGk9blt0XTtyZXR1cm4gaT9cImZ1bmN0aW9uXCI9PXR5cGVvZiBpP3I/W2kubGlzdGVuZXJ8fGldOltpXTpyP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil0W3JdPWVbcl0ubGlzdGVuZXJ8fGVbcl07cmV0dXJuIHR9KGkpOl8oaSxpLmxlbmd0aCk6W119ZnVuY3Rpb24gdyhlKXt2YXIgdD10aGlzLl9ldmVudHM7aWYodCl7dmFyIHI9dFtlXTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByKXJldHVybiAxO2lmKHIpcmV0dXJuIHIubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZVtuXTtyZXR1cm4gcn1hP09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLFwiZGVmYXVsdE1heExpc3RlbmVyc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsfSxzZXQ6ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fGU8MHx8ZSE9ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImRlZmF1bHRNYXhMaXN0ZW5lcnNcIiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7bD1lfX0pOm8uZGVmYXVsdE1heExpc3RlbmVycz1sLG8ucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8ZTwwfHxpc05hTihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcIm5cIiBhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1lLHRoaXN9LG8ucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMpfSxvLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLHMsbyxhPVwiZXJyb3JcIj09PWU7aWYobz10aGlzLl9ldmVudHMpYT1hJiZudWxsPT1vLmVycm9yO2Vsc2UgaWYoIWEpcmV0dXJuITE7aWYoYSl7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYodD1hcmd1bWVudHNbMV0pLHQgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyB0O3ZhciBsPW5ldyBFcnJvcignVW5oYW5kbGVkIFwiZXJyb3JcIiBldmVudC4gKCcrdCtcIilcIik7dGhyb3cgbC5jb250ZXh0PXQsbH1pZighKHI9b1tlXSkpcmV0dXJuITE7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2Ygcjtzd2l0Y2gobj1hcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6aChyLGMsdGhpcyk7YnJlYWs7Y2FzZSAyOmYocixjLHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6ZChyLGMsdGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdKTticmVhaztjYXNlIDQ6cChyLGMsdGhpcyxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXSk7YnJlYWs7ZGVmYXVsdDpmb3IoaT1uZXcgQXJyYXkobi0xKSxzPTE7czxuO3MrKylpW3MtMV09YXJndW1lbnRzW3NdO20ocixjLHRoaXMsaSl9cmV0dXJuITB9LG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIodGhpcyxlLHQsITEpfSxvLnByb3RvdHlwZS5vbj1vLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixvLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYih0aGlzLGUsdCwhMCl9LG8ucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4gdGhpcy5vbihlLHkodGhpcyxlLHQpKSx0aGlzfSxvLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHRoaXMucHJlcGVuZExpc3RlbmVyKGUseSh0aGlzLGUsdCkpLHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxzLG8sYTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdGVuZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtpZighKGk9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZighKHI9aVtlXSkpcmV0dXJuIHRoaXM7aWYocj09PXR8fHIubGlzdGVuZXI9PT10KTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPW4obnVsbCk6KGRlbGV0ZSBpW2VdLGkucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsZSxyLmxpc3RlbmVyfHx0KSk7ZWxzZSBpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiByKXtmb3Iocz0tMSxvPXIubGVuZ3RoLTE7bz49MDtvLS0paWYocltvXT09PXR8fHJbb10ubGlzdGVuZXI9PT10KXthPXJbb10ubGlzdGVuZXIscz1vO2JyZWFrfWlmKHM8MClyZXR1cm4gdGhpczswPT09cz9yLnNoaWZ0KCk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dCxuPXIrMSxpPWUubGVuZ3RoO248aTtyKz0xLG4rPTEpZVtyXT1lW25dO2UucG9wKCl9KHIscyksMT09PXIubGVuZ3RoJiYoaVtlXT1yWzBdKSxpLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLGUsYXx8dCl9cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxyLHM7aWYoIShyPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYoIXIucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9bihudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTpyW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9bihudWxsKTpkZWxldGUgcltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIG8sYT1pKHIpO2ZvcihzPTA7czxhLmxlbmd0aDsrK3MpXCJyZW1vdmVMaXN0ZW5lclwiIT09KG89YVtzXSkmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKG8pO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhcInJlbW92ZUxpc3RlbmVyXCIpLHRoaXMuX2V2ZW50cz1uKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZihcImZ1bmN0aW9uXCI9PXR5cGVvZih0PXJbZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoZSx0KTtlbHNlIGlmKHQpZm9yKHM9dC5sZW5ndGgtMTtzPj0wO3MtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdFtzXSk7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm4gdih0aGlzLGUsITApfSxvLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIHYodGhpcyxlLCExKX0sby5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZS5saXN0ZW5lckNvdW50P2UubGlzdGVuZXJDb3VudCh0KTp3LmNhbGwoZSx0KX0sby5wcm90b3R5cGUubGlzdGVuZXJDb3VudD13LG8ucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9SZWZsZWN0Lm93bktleXModGhpcy5fZXZlbnRzKTpbXX19LHt9XSw0MjM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLGk9ZShcIm1kNS5qc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7aWYobi5pc0J1ZmZlcihlKXx8KGU9bi5mcm9tKGUsXCJiaW5hcnlcIikpLHQmJihuLmlzQnVmZmVyKHQpfHwodD1uLmZyb20odCxcImJpbmFyeVwiKSksOCE9PXQubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGhcIik7Zm9yKHZhciBvPXIvOCxhPW4uYWxsb2MobyksbD1uLmFsbG9jKHN8fDApLGM9bi5hbGxvYygwKTtvPjB8fHM+MDspe3ZhciB1PW5ldyBpO3UudXBkYXRlKGMpLHUudXBkYXRlKGUpLHQmJnUudXBkYXRlKHQpLGM9dS5kaWdlc3QoKTt2YXIgaD0wO2lmKG8+MCl7dmFyIGY9YS5sZW5ndGgtbztoPU1hdGgubWluKG8sYy5sZW5ndGgpLGMuY29weShhLGYsMCxoKSxvLT1ofWlmKGg8Yy5sZW5ndGgmJnM+MCl7dmFyIGQ9bC5sZW5ndGgtcyxwPU1hdGgubWluKHMsYy5sZW5ndGgtaCk7Yy5jb3B5KGwsZCxoLGgrcCkscy09cH19cmV0dXJuIGMuZmlsbCgwKSx7a2V5OmEsaXY6bH19fSx7XCJtZDUuanNcIjo0NTAsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQyNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuQ3N2UGFyc2VyU3RyZWFtPXIuUGFyc2VyT3B0aW9ucz1yLnBhcnNlRmlsZT1yLnBhcnNlU3RyZWFtPXIucGFyc2VTdHJpbmc9ci5wYXJzZT1yLkZvcm1hdHRlck9wdGlvbnM9ci5Dc3ZGb3JtYXR0ZXJTdHJlYW09ci53cml0ZVRvUGF0aD1yLndyaXRlVG9TdHJpbmc9ci53cml0ZVRvQnVmZmVyPXIud3JpdGVUb1N0cmVhbT1yLndyaXRlPXIuZm9ybWF0PXZvaWQgMDt2YXIgbj1lKFwiQGZhc3QtY3N2L2Zvcm1hdFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcImZvcm1hdFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmZvcm1hdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIndyaXRlXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ud3JpdGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ3cml0ZVRvU3RyZWFtXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4ud3JpdGVUb1N0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIndyaXRlVG9CdWZmZXJcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbi53cml0ZVRvQnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwid3JpdGVUb1N0cmluZ1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLndyaXRlVG9TdHJpbmd9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ3cml0ZVRvUGF0aFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLndyaXRlVG9QYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiQ3N2Rm9ybWF0dGVyU3RyZWFtXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG4uQ3N2Rm9ybWF0dGVyU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiRm9ybWF0dGVyT3B0aW9uc1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLkZvcm1hdHRlck9wdGlvbnN9fSk7dmFyIGk9ZShcIkBmYXN0LWNzdi9wYXJzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcInBhcnNlXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkucGFyc2V9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJwYXJzZVN0cmluZ1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnBhcnNlU3RyaW5nfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwicGFyc2VTdHJlYW1cIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5wYXJzZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcInBhcnNlRmlsZVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLnBhcnNlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIlBhcnNlck9wdGlvbnNcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaS5QYXJzZXJPcHRpb25zfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiQ3N2UGFyc2VyU3RyZWFtXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGkuQ3N2UGFyc2VyU3RyZWFtfX0pfSx7XCJAZmFzdC1jc3YvZm9ybWF0XCI6MTUxLFwiQGZhc3QtY3N2L3BhcnNlXCI6MTU1fV0sNDI1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixpPWUoXCJyZWFkYWJsZS1zdHJlYW1cIikuVHJhbnNmb3JtO2Z1bmN0aW9uIHMoZSl7aS5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPW4uYWxsb2NVbnNhZmUoZSksdGhpcy5fYmxvY2tTaXplPWUsdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2ZpbmFsaXplZD0hMX1lKFwiaW5oZXJpdHNcIikocyxpKSxzLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1udWxsO3RyeXt0aGlzLnVwZGF0ZShlLHQpfWNhdGNoKGUpe249ZX1yKG4pfSxzLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKGUpe3Q9ZX1lKHQpfSxzLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXtpZihmdW5jdGlvbihlLHQpe2lmKCFuLmlzQnVmZmVyKGUpJiZcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrXCIgbXVzdCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlclwiKX0oZSxcIkRhdGFcIiksdGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcihcIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZFwiKTtuLmlzQnVmZmVyKGUpfHwoZT1uLmZyb20oZSx0KSk7Zm9yKHZhciByPXRoaXMuX2Jsb2NrLGk9MDt0aGlzLl9ibG9ja09mZnNldCtlLmxlbmd0aC1pPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIHM9dGhpcy5fYmxvY2tPZmZzZXQ7czx0aGlzLl9ibG9ja1NpemU7KXJbcysrXT1lW2krK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO2k8ZS5sZW5ndGg7KXJbdGhpcy5fYmxvY2tPZmZzZXQrK109ZVtpKytdO2Zvcih2YXIgbz0wLGE9OCplLmxlbmd0aDthPjA7KytvKXRoaXMuX2xlbmd0aFtvXSs9YSwoYT10aGlzLl9sZW5ndGhbb10vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW29dLT00Mjk0OTY3Mjk2KmEpO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWRcIil9LHMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihlKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKFwiRGlnZXN0IGFscmVhZHkgY2FsbGVkXCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgdD10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1lJiYodD10LnRvU3RyaW5nKGUpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciByPTA7cjw0Oysrcil0aGlzLl9sZW5ndGhbcl09MDtyZXR1cm4gdH0scy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkXCIpfSx0LmV4cG9ydHM9c30se2luaGVyaXRzOjQ0MCxcInJlYWRhYmxlLXN0cmVhbVwiOjQ5MSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDI2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cjtuLnV0aWxzPWUoXCIuL2hhc2gvdXRpbHNcIiksbi5jb21tb249ZShcIi4vaGFzaC9jb21tb25cIiksbi5zaGE9ZShcIi4vaGFzaC9zaGFcIiksbi5yaXBlbWQ9ZShcIi4vaGFzaC9yaXBlbWRcIiksbi5obWFjPWUoXCIuL2hhc2gvaG1hY1wiKSxuLnNoYTE9bi5zaGEuc2hhMSxuLnNoYTI1Nj1uLnNoYS5zaGEyNTYsbi5zaGEyMjQ9bi5zaGEuc2hhMjI0LG4uc2hhMzg0PW4uc2hhLnNoYTM4NCxuLnNoYTUxMj1uLnNoYS5zaGE1MTIsbi5yaXBlbWQxNjA9bi5yaXBlbWQucmlwZW1kMTYwfSx7XCIuL2hhc2gvY29tbW9uXCI6NDI3LFwiLi9oYXNoL2htYWNcIjo0MjgsXCIuL2hhc2gvcmlwZW1kXCI6NDI5LFwiLi9oYXNoL3NoYVwiOjQzMCxcIi4vaGFzaC91dGlsc1wiOjQzN31dLDQyNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3V0aWxzXCIpLGk9ZShcIm1pbmltYWxpc3RpYy1hc3NlcnRcIik7ZnVuY3Rpb24gcygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPVwiYmlnXCIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1yLkJsb2NrSGFzaD1zLHMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKGU9bi50b0FycmF5KGUsdCksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KGUpOnRoaXMucGVuZGluZz1lLHRoaXMucGVuZGluZ1RvdGFsKz1lLmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciByPShlPXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9ZS5zbGljZShlLmxlbmd0aC1yLGUubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSxlPW4uam9pbjMyKGUsMCxlLmxlbmd0aC1yLHRoaXMuZW5kaWFuKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKGUsaSxpK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxpKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdChlKX0scy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMucGVuZGluZ1RvdGFsLHQ9dGhpcy5fZGVsdGE4LHI9dC0oZSt0aGlzLnBhZExlbmd0aCkldCxuPW5ldyBBcnJheShyK3RoaXMucGFkTGVuZ3RoKTtuWzBdPTEyODtmb3IodmFyIGk9MTtpPHI7aSsrKW5baV09MDtpZihlPDw9MyxcImJpZ1wiPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgcz04O3M8dGhpcy5wYWRMZW5ndGg7cysrKW5baSsrXT0wO25baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT1lPj4+MjQmMjU1LG5baSsrXT1lPj4+MTYmMjU1LG5baSsrXT1lPj4+OCYyNTUsbltpKytdPTI1NSZlfWVsc2UgZm9yKG5baSsrXT0yNTUmZSxuW2krK109ZT4+PjgmMjU1LG5baSsrXT1lPj4+MTYmMjU1LG5baSsrXT1lPj4+MjQmMjU1LG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLHM9ODtzPHRoaXMucGFkTGVuZ3RoO3MrKyluW2krK109MDtyZXR1cm4gbn19LHtcIi4vdXRpbHNcIjo0MzcsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6NDUzfV0sNDI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vdXRpbHNcIiksaT1lKFwibWluaW1hbGlzdGljLWFzc2VydFwiKTtmdW5jdGlvbiBzKGUsdCxyKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzKSlyZXR1cm4gbmV3IHMoZSx0LHIpO3RoaXMuSGFzaD1lLHRoaXMuYmxvY2tTaXplPWUuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPWUub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChuLnRvQXJyYXkodCxyKSl9dC5leHBvcnRzPXMscy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZSl7ZS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihlPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoZSkuZGlnZXN0KCkpLGkoZS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIHQ9ZS5sZW5ndGg7dDx0aGlzLmJsb2NrU2l6ZTt0KyspZS5wdXNoKDApO2Zvcih0PTA7dDxlLmxlbmd0aDt0KyspZVt0XV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShlKSx0PTA7dDxlLmxlbmd0aDt0KyspZVt0XV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShlKX0scy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGUsdCksdGhpc30scy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChlKX19LHtcIi4vdXRpbHNcIjo0MzcsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6NDUzfV0sNDI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9jb21tb25cIikscz1uLnJvdGwzMixvPW4uc3VtMzIsYT1uLnN1bTMyXzMsbD1uLnN1bTMyXzQsYz1pLkJsb2NrSGFzaDtmdW5jdGlvbiB1KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1O2MuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj1cImxpdHRsZVwifWZ1bmN0aW9uIGgoZSx0LHIsbil7cmV0dXJuIGU8PTE1P3Recl5uOmU8PTMxP3Qmcnx+dCZuOmU8PTQ3Pyh0fH5yKV5uOmU8PTYzP3QmbnxyJn5uOnReKHJ8fm4pfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGU8PTE1PzA6ZTw9MzE/MTUxODUwMDI0OTplPD00Nz8xODU5Nzc1MzkzOmU8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBkKGUpe3JldHVybiBlPD0xNT8xMzUyODI5OTI2OmU8PTMxPzE1NDg2MDM2ODQ6ZTw9NDc/MTgzNjA3MjY5MTplPD02Mz8yMDUzOTk0MjE3OjB9bi5pbmhlcml0cyh1LGMpLHIucmlwZW1kMTYwPXUsdS5ibG9ja1NpemU9NTEyLHUub3V0U2l6ZT0xNjAsdS5obWFjU3RyZW5ndGg9MTkyLHUucGFkTGVuZ3RoPTY0LHUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5oWzBdLG49dGhpcy5oWzFdLGk9dGhpcy5oWzJdLGM9dGhpcy5oWzNdLHU9dGhpcy5oWzRdLHk9cix2PW4sdz1pLF89Yyx4PXUsaz0wO2s8ODA7aysrKXt2YXIgUz1vKHMobChyLGgoayxuLGksYyksZVtwW2tdK3RdLGYoaykpLGJba10pLHUpO3I9dSx1PWMsYz1zKGksMTApLGk9bixuPVMsUz1vKHMobCh5LGgoNzktayx2LHcsXyksZVttW2tdK3RdLGQoaykpLGdba10pLHgpLHk9eCx4PV8sXz1zKHcsMTApLHc9dix2PVN9Uz1hKHRoaXMuaFsxXSxpLF8pLHRoaXMuaFsxXT1hKHRoaXMuaFsyXSxjLHgpLHRoaXMuaFsyXT1hKHRoaXMuaFszXSx1LHkpLHRoaXMuaFszXT1hKHRoaXMuaFs0XSxyLHYpLHRoaXMuaFs0XT1hKHRoaXMuaFswXSxuLHcpLHRoaXMuaFswXT1TfSx1LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVyblwiaGV4XCI9PT1lP24udG9IZXgzMih0aGlzLmgsXCJsaXR0bGVcIik6bi5zcGxpdDMyKHRoaXMuaCxcImxpdHRsZVwiKX07dmFyIHA9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sbT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxiPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxnPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0se1wiLi9jb21tb25cIjo0MjcsXCIuL3V0aWxzXCI6NDM3fV0sNDMwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ci5zaGExPWUoXCIuL3NoYS8xXCIpLHIuc2hhMjI0PWUoXCIuL3NoYS8yMjRcIiksci5zaGEyNTY9ZShcIi4vc2hhLzI1NlwiKSxyLnNoYTM4ND1lKFwiLi9zaGEvMzg0XCIpLHIuc2hhNTEyPWUoXCIuL3NoYS81MTJcIil9LHtcIi4vc2hhLzFcIjo0MzEsXCIuL3NoYS8yMjRcIjo0MzIsXCIuL3NoYS8yNTZcIjo0MzMsXCIuL3NoYS8zODRcIjo0MzQsXCIuL3NoYS81MTJcIjo0MzV9XSw0MzE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vY29tbW9uXCIpLHM9ZShcIi4vY29tbW9uXCIpLG89bi5yb3RsMzIsYT1uLnN1bTMyLGw9bi5zdW0zMl81LGM9cy5mdF8xLHU9aS5CbG9ja0hhc2gsaD1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gZigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGYpKXJldHVybiBuZXcgZjt1LmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9bi5pbmhlcml0cyhmLHUpLHQuZXhwb3J0cz1mLGYuYmxvY2tTaXplPTUxMixmLm91dFNpemU9MTYwLGYuaG1hY1N0cmVuZ3RoPTgwLGYucGFkTGVuZ3RoPTY0LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPWVbdCtuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09byhyW24tM11ecltuLThdXnJbbi0xNF1ecltuLTE2XSwxKTt2YXIgaT10aGlzLmhbMF0scz10aGlzLmhbMV0sdT10aGlzLmhbMl0sZj10aGlzLmhbM10sZD10aGlzLmhbNF07Zm9yKG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHA9fn4obi8yMCksbT1sKG8oaSw1KSxjKHAscyx1LGYpLGQscltuXSxoW3BdKTtkPWYsZj11LHU9byhzLDMwKSxzPWksaT1tfXRoaXMuaFswXT1hKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09YSh0aGlzLmhbMV0scyksdGhpcy5oWzJdPWEodGhpcy5oWzJdLHUpLHRoaXMuaFszXT1hKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09YSh0aGlzLmhbNF0sZCl9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/bi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpuLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0se1wiLi4vY29tbW9uXCI6NDI3LFwiLi4vdXRpbHNcIjo0MzcsXCIuL2NvbW1vblwiOjQzNn1dLDQzMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLzI1NlwiKTtmdW5jdGlvbiBzKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcykpcmV0dXJuIG5ldyBzO2kuY2FsbCh0aGlzKSx0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdfW4uaW5oZXJpdHMocyxpKSx0LmV4cG9ydHM9cyxzLmJsb2NrU2l6ZT01MTIscy5vdXRTaXplPTIyNCxzLmhtYWNTdHJlbmd0aD0xOTIscy5wYWRMZW5ndGg9NjQscy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlKXtyZXR1cm5cImhleFwiPT09ZT9uLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6bi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfX0se1wiLi4vdXRpbHNcIjo0MzcsXCIuLzI1NlwiOjQzM31dLDQzMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9jb21tb25cIikscz1lKFwiLi9jb21tb25cIiksbz1lKFwibWluaW1hbGlzdGljLWFzc2VydFwiKSxhPW4uc3VtMzIsbD1uLnN1bTMyXzQsYz1uLnN1bTMyXzUsdT1zLmNoMzIsaD1zLm1hajMyLGY9cy5zMF8yNTYsZD1zLnMxXzI1NixwPXMuZzBfMjU2LG09cy5nMV8yNTYsYj1pLkJsb2NrSGFzaCxnPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIHkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHk7Yi5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1nLHRoaXMuVz1uZXcgQXJyYXkoNjQpfW4uaW5oZXJpdHMoeSxiKSx0LmV4cG9ydHM9eSx5LmJsb2NrU2l6ZT01MTIseS5vdXRTaXplPTI1Nix5LmhtYWNTdHJlbmd0aD0xOTIseS5wYWRMZW5ndGg9NjQseS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09ZVt0K25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1sKG0ocltuLTJdKSxyW24tN10scChyW24tMTVdKSxyW24tMTZdKTt2YXIgaT10aGlzLmhbMF0scz10aGlzLmhbMV0sYj10aGlzLmhbMl0sZz10aGlzLmhbM10seT10aGlzLmhbNF0sdj10aGlzLmhbNV0sdz10aGlzLmhbNl0sXz10aGlzLmhbN107Zm9yKG8odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciB4PWMoXyxkKHkpLHUoeSx2LHcpLHRoaXMua1tuXSxyW25dKSxrPWEoZihpKSxoKGkscyxiKSk7Xz13LHc9dix2PXkseT1hKGcseCksZz1iLGI9cyxzPWksaT1hKHgsayl9dGhpcy5oWzBdPWEodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1hKHRoaXMuaFsxXSxzKSx0aGlzLmhbMl09YSh0aGlzLmhbMl0sYiksdGhpcy5oWzNdPWEodGhpcy5oWzNdLGcpLHRoaXMuaFs0XT1hKHRoaXMuaFs0XSx5KSx0aGlzLmhbNV09YSh0aGlzLmhbNV0sdiksdGhpcy5oWzZdPWEodGhpcy5oWzZdLHcpLHRoaXMuaFs3XT1hKHRoaXMuaFs3XSxfKX0seS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlKXtyZXR1cm5cImhleFwiPT09ZT9uLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOm4uc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9fSx7XCIuLi9jb21tb25cIjo0MjcsXCIuLi91dGlsc1wiOjQzNyxcIi4vY29tbW9uXCI6NDM2LFwibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1M31dLDQzNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLzUxMlwiKTtmdW5jdGlvbiBzKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcykpcmV0dXJuIG5ldyBzO2kuY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfW4uaW5oZXJpdHMocyxpKSx0LmV4cG9ydHM9cyxzLmJsb2NrU2l6ZT0xMDI0LHMub3V0U2l6ZT0zODQscy5obWFjU3RyZW5ndGg9MTkyLHMucGFkTGVuZ3RoPTEyOCxzLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGUpe3JldHVyblwiaGV4XCI9PT1lP24udG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIik6bi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKX19LHtcIi4uL3V0aWxzXCI6NDM3LFwiLi81MTJcIjo0MzV9XSw0MzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vY29tbW9uXCIpLHM9ZShcIm1pbmltYWxpc3RpYy1hc3NlcnRcIiksbz1uLnJvdHI2NF9oaSxhPW4ucm90cjY0X2xvLGw9bi5zaHI2NF9oaSxjPW4uc2hyNjRfbG8sdT1uLnN1bTY0LGg9bi5zdW02NF9oaSxmPW4uc3VtNjRfbG8sZD1uLnN1bTY0XzRfaGkscD1uLnN1bTY0XzRfbG8sbT1uLnN1bTY0XzVfaGksYj1uLnN1bTY0XzVfbG8sZz1pLkJsb2NrSGFzaCx5PVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gdigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYpKXJldHVybiBuZXcgdjtnLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9eSx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gdyhlLHQscixuLGkpe3ZhciBzPWUmcl5+ZSZpO3JldHVybiBzPDAmJihzKz00Mjk0OTY3Mjk2KSxzfWZ1bmN0aW9uIF8oZSx0LHIsbixpLHMpe3ZhciBvPXQmbl5+dCZzO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIHgoZSx0LHIsbixpKXt2YXIgcz1lJnJeZSZpXnImaTtyZXR1cm4gczwwJiYocys9NDI5NDk2NzI5Niksc31mdW5jdGlvbiBrKGUsdCxyLG4saSxzKXt2YXIgbz10Jm5edCZzXm4mcztyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBTKGUsdCl7dmFyIHI9byhlLHQsMjgpXm8odCxlLDIpXm8odCxlLDcpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIE0oZSx0KXt2YXIgcj1hKGUsdCwyOCleYSh0LGUsMileYSh0LGUsNyk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gQyhlLHQpe3ZhciByPW8oZSx0LDE0KV5vKGUsdCwxOClebyh0LGUsOSk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gVChlLHQpe3ZhciByPWEoZSx0LDE0KV5hKGUsdCwxOCleYSh0LGUsOSk7cmV0dXJuIHI8MCYmKHIrPTQyOTQ5NjcyOTYpLHJ9ZnVuY3Rpb24gRShlLHQpe3ZhciByPW8oZSx0LDEpXm8oZSx0LDgpXmwoZSx0LDcpO3JldHVybiByPDAmJihyKz00Mjk0OTY3Mjk2KSxyfWZ1bmN0aW9uIEEoZSx0KXt2YXIgcj1hKGUsdCwxKV5hKGUsdCw4KV5jKGUsdCw3KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiBSKGUsdCl7dmFyIHI9byhlLHQsMTkpXm8odCxlLDI5KV5sKGUsdCw2KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1mdW5jdGlvbiBPKGUsdCl7dmFyIHI9YShlLHQsMTkpXmEodCxlLDI5KV5jKGUsdCw2KTtyZXR1cm4gcjwwJiYocis9NDI5NDk2NzI5Nikscn1uLmluaGVyaXRzKHYsZyksdC5leHBvcnRzPXYsdi5ibG9ja1NpemU9MTAyNCx2Lm91dFNpemU9NTEyLHYuaG1hY1N0cmVuZ3RoPTE5Mix2LnBhZExlbmd0aD0xMjgsdi5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MzI7bisrKXJbbl09ZVt0K25dO2Zvcig7bjxyLmxlbmd0aDtuKz0yKXt2YXIgaT1SKHJbbi00XSxyW24tM10pLHM9TyhyW24tNF0scltuLTNdKSxvPXJbbi0xNF0sYT1yW24tMTNdLGw9RShyW24tMzBdLHJbbi0yOV0pLGM9QShyW24tMzBdLHJbbi0yOV0pLHU9cltuLTMyXSxoPXJbbi0zMV07cltuXT1kKGkscyxvLGEsbCxjLHUsaCkscltuKzFdPXAoaSxzLG8sYSxsLGMsdSxoKX19LHYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wcmVwYXJlQmxvY2soZSx0KTt2YXIgcj10aGlzLlcsbj10aGlzLmhbMF0saT10aGlzLmhbMV0sbz10aGlzLmhbMl0sYT10aGlzLmhbM10sbD10aGlzLmhbNF0sYz10aGlzLmhbNV0sZD10aGlzLmhbNl0scD10aGlzLmhbN10sZz10aGlzLmhbOF0seT10aGlzLmhbOV0sdj10aGlzLmhbMTBdLEU9dGhpcy5oWzExXSxBPXRoaXMuaFsxMl0sUj10aGlzLmhbMTNdLE89dGhpcy5oWzE0XSxqPXRoaXMuaFsxNV07cyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgST0wO0k8ci5sZW5ndGg7SSs9Mil7dmFyIE49TyxQPWosQj1DKGcseSksRD1UKGcseSksRj13KGcseSx2LEUsQSksTD1fKGcseSx2LEUsQSxSKSx6PXRoaXMua1tJXSxVPXRoaXMua1tJKzFdLCQ9cltJXSxIPXJbSSsxXSxWPW0oTixQLEIsRCxGLEwseixVLCQsSCkscT1iKE4sUCxCLEQsRixMLHosVSwkLEgpO049UyhuLGkpLFA9TShuLGkpLEI9eChuLGksbyxhLGwpLEQ9ayhuLGksbyxhLGwsYyk7dmFyIFc9aChOLFAsQixEKSxYPWYoTixQLEIsRCk7Tz1BLGo9UixBPXYsUj1FLHY9ZyxFPXksZz1oKGQscCxWLHEpLHk9ZihwLHAsVixxKSxkPWwscD1jLGw9byxjPWEsbz1uLGE9aSxuPWgoVixxLFcsWCksaT1mKFYscSxXLFgpfXUodGhpcy5oLDAsbixpKSx1KHRoaXMuaCwyLG8sYSksdSh0aGlzLmgsNCxsLGMpLHUodGhpcy5oLDYsZCxwKSx1KHRoaXMuaCw4LGcseSksdSh0aGlzLmgsMTAsdixFKSx1KHRoaXMuaCwxMixBLFIpLHUodGhpcy5oLDE0LE8sail9LHYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuXCJoZXhcIj09PWU/bi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpuLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0se1wiLi4vY29tbW9uXCI6NDI3LFwiLi4vdXRpbHNcIjo0MzcsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6NDUzfV0sNDM2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4uL3V0aWxzXCIpLnJvdHIzMjtmdW5jdGlvbiBpKGUsdCxyKXtyZXR1cm4gZSZ0Xn5lJnJ9ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIGUmdF5lJnJedCZyfWZ1bmN0aW9uIG8oZSx0LHIpe3JldHVybiBlXnRecn1yLmZ0XzE9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIDA9PT1lP2kodCxyLG4pOjE9PT1lfHwzPT09ZT9vKHQscixuKToyPT09ZT9zKHQscixuKTp2b2lkIDB9LHIuY2gzMj1pLHIubWFqMzI9cyxyLnAzMj1vLHIuczBfMjU2PWZ1bmN0aW9uKGUpe3JldHVybiBuKGUsMilebihlLDEzKV5uKGUsMjIpfSxyLnMxXzI1Nj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLDYpXm4oZSwxMSlebihlLDI1KX0sci5nMF8yNTY9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSw3KV5uKGUsMTgpXmU+Pj4zfSxyLmcxXzI1Nj1mdW5jdGlvbihlKXtyZXR1cm4gbihlLDE3KV5uKGUsMTkpXmU+Pj4xMH19LHtcIi4uL3V0aWxzXCI6NDM3fV0sNDM3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIm1pbmltYWxpc3RpYy1hc3NlcnRcIiksaT1lKFwiaW5oZXJpdHNcIik7ZnVuY3Rpb24gcyhlLHQpe3JldHVybiA1NTI5Nj09KDY0NTEyJmUuY2hhckNvZGVBdCh0KSkmJighKHQ8MHx8dCsxPj1lLmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImZS5jaGFyQ29kZUF0KHQrMSkpKX1mdW5jdGlvbiBvKGUpe3JldHVybihlPj4+MjR8ZT4+PjgmNjUyODB8ZTw8OCYxNjcxMTY4MHwoMjU1JmUpPDwyNCk+Pj4wfWZ1bmN0aW9uIGEoZSl7cmV0dXJuIDE9PT1lLmxlbmd0aD9cIjBcIitlOmV9ZnVuY3Rpb24gbChlKXtyZXR1cm4gNz09PWUubGVuZ3RoP1wiMFwiK2U6Nj09PWUubGVuZ3RoP1wiMDBcIitlOjU9PT1lLmxlbmd0aD9cIjAwMFwiK2U6ND09PWUubGVuZ3RoP1wiMDAwMFwiK2U6Mz09PWUubGVuZ3RoP1wiMDAwMDBcIitlOjI9PT1lLmxlbmd0aD9cIjAwMDAwMFwiK2U6MT09PWUubGVuZ3RoP1wiMDAwMDAwMFwiK2U6ZX1yLmluaGVyaXRzPWksci50b0FycmF5PWZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZS5zbGljZSgpO2lmKCFlKXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKHQpe2lmKFwiaGV4XCI9PT10KWZvcigoZT1lLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIikpLmxlbmd0aCUyIT0wJiYoZT1cIjBcIitlKSxpPTA7aTxlLmxlbmd0aDtpKz0yKXIucHVzaChwYXJzZUludChlW2ldK2VbaSsxXSwxNikpfWVsc2UgZm9yKHZhciBuPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1lLmNoYXJDb2RlQXQoaSk7bzwxMjg/cltuKytdPW86bzwyMDQ4PyhyW24rK109bz4+NnwxOTIscltuKytdPTYzJm98MTI4KTpzKGUsaSk/KG89NjU1MzYrKCgxMDIzJm8pPDwxMCkrKDEwMjMmZS5jaGFyQ29kZUF0KCsraSkpLHJbbisrXT1vPj4xOHwyNDAscltuKytdPW8+PjEyJjYzfDEyOCxyW24rK109bz4+NiY2M3wxMjgscltuKytdPTYzJm98MTI4KToocltuKytdPW8+PjEyfDIyNCxyW24rK109bz4+NiY2M3wxMjgscltuKytdPTYzJm98MTI4KX1lbHNlIGZvcihpPTA7aTxlLmxlbmd0aDtpKyspcltpXT0wfGVbaV07cmV0dXJuIHJ9LHIudG9IZXg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIscj0wO3I8ZS5sZW5ndGg7cisrKXQrPWEoZVtyXS50b1N0cmluZygxNikpO3JldHVybiB0fSxyLmh0b25sPW8sci50b0hleDMyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVwiXCIsbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO1wibGl0dGxlXCI9PT10JiYoaT1vKGkpKSxyKz1sKGkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcn0sci56ZXJvMj1hLHIuemVybzg9bCxyLmpvaW4zMj1mdW5jdGlvbihlLHQscixpKXt2YXIgcz1yLXQ7bihzJTQ9PTApO2Zvcih2YXIgbz1uZXcgQXJyYXkocy80KSxhPTAsbD10O2E8by5sZW5ndGg7YSsrLGwrPTQpe3ZhciBjO2M9XCJiaWdcIj09PWk/ZVtsXTw8MjR8ZVtsKzFdPDwxNnxlW2wrMl08PDh8ZVtsKzNdOmVbbCszXTw8MjR8ZVtsKzJdPDwxNnxlW2wrMV08PDh8ZVtsXSxvW2FdPWM+Pj4wfXJldHVybiBvfSxyLnNwbGl0MzI9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bmV3IEFycmF5KDQqZS5sZW5ndGgpLG49MCxpPTA7bjxlLmxlbmd0aDtuKyssaSs9NCl7dmFyIHM9ZVtuXTtcImJpZ1wiPT09dD8ocltpXT1zPj4+MjQscltpKzFdPXM+Pj4xNiYyNTUscltpKzJdPXM+Pj44JjI1NSxyW2krM109MjU1JnMpOihyW2krM109cz4+PjI0LHJbaSsyXT1zPj4+MTYmMjU1LHJbaSsxXT1zPj4+OCYyNTUscltpXT0yNTUmcyl9cmV0dXJuIHJ9LHIucm90cjMyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU+Pj50fGU8PDMyLXR9LHIucm90bDMyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU8PHR8ZT4+PjMyLXR9LHIuc3VtMzI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSt0Pj4+MH0sci5zdW0zMl8zPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZSt0K3I+Pj4wfSxyLnN1bTMyXzQ9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIGUrdCtyK24+Pj4wfSxyLnN1bTMyXzU9ZnVuY3Rpb24oZSx0LHIsbixpKXtyZXR1cm4gZSt0K3IrbitpPj4+MH0sci5zdW02ND1mdW5jdGlvbihlLHQscixuKXt2YXIgaT1lW3RdLHM9bitlW3QrMV0+Pj4wLG89KHM8bj8xOjApK3IraTtlW3RdPW8+Pj4wLGVbdCsxXT1zfSxyLnN1bTY0X2hpPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybih0K24+Pj4wPHQ/MTowKStlK3I+Pj4wfSxyLnN1bTY0X2xvPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB0K24+Pj4wfSxyLnN1bTY0XzRfaGk9ZnVuY3Rpb24oZSx0LHIsbixpLHMsbyxhKXt2YXIgbD0wLGM9dDtyZXR1cm4gbCs9KGM9YytuPj4+MCk8dD8xOjAsbCs9KGM9YytzPj4+MCk8cz8xOjAsZStyK2krbysobCs9KGM9YythPj4+MCk8YT8xOjApPj4+MH0sci5zdW02NF80X2xvPWZ1bmN0aW9uKGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHQrbitzK2E+Pj4wfSxyLnN1bTY0XzVfaGk9ZnVuY3Rpb24oZSx0LHIsbixpLHMsbyxhLGwsYyl7dmFyIHU9MCxoPXQ7cmV0dXJuIHUrPShoPWgrbj4+PjApPHQ/MTowLHUrPShoPWgrcz4+PjApPHM/MTowLHUrPShoPWgrYT4+PjApPGE/MTowLGUrcitpK28rbCsodSs9KGg9aCtjPj4+MCk8Yz8xOjApPj4+MH0sci5zdW02NF81X2xvPWZ1bmN0aW9uKGUsdCxyLG4saSxzLG8sYSxsLGMpe3JldHVybiB0K24rcythK2M+Pj4wfSxyLnJvdHI2NF9oaT1mdW5jdGlvbihlLHQscil7cmV0dXJuKHQ8PDMyLXJ8ZT4+PnIpPj4+MH0sci5yb3RyNjRfbG89ZnVuY3Rpb24oZSx0LHIpe3JldHVybihlPDwzMi1yfHQ+Pj5yKT4+PjB9LHIuc2hyNjRfaGk9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPj4+cn0sci5zaHI2NF9sbz1mdW5jdGlvbihlLHQscil7cmV0dXJuKGU8PDMyLXJ8dD4+PnIpPj4+MH19LHtpbmhlcml0czo0NDAsXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCI6NDUzfV0sNDM4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImhhc2guanNcIiksaT1lKFwibWluaW1hbGlzdGljLWNyeXB0by11dGlsc1wiKSxzPWUoXCJtaW5pbWFsaXN0aWMtYXNzZXJ0XCIpO2Z1bmN0aW9uIG8oZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKGUpO3RoaXMuaGFzaD1lLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhZS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1lLm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciB0PWkudG9BcnJheShlLmVudHJvcHksZS5lbnRyb3B5RW5jfHxcImhleFwiKSxyPWkudG9BcnJheShlLm5vbmNlLGUubm9uY2VFbmN8fFwiaGV4XCIpLG49aS50b0FycmF5KGUucGVycyxlLnBlcnNFbmN8fFwiaGV4XCIpO3ModC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl9pbml0KHQscixuKX10LmV4cG9ydHM9byxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihlLHQscil7dmFyIG49ZS5jb25jYXQodCkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sby5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4uaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7ZSYmKHQ9dC51cGRhdGUoZSkpLHRoaXMuSz10LmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksZSYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKGUpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxvLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oZSx0LHIsbil7XCJzdHJpbmdcIiE9dHlwZW9mIHQmJihuPXIscj10LHQ9bnVsbCksZT1pLnRvQXJyYXkoZSx0KSxyPWkudG9BcnJheShyLG4pLHMoZS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl91cGRhdGUoZS5jb25jYXQocnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sby5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oZSx0LHIsbil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKFwiUmVzZWVkIGlzIHJlcXVpcmVkXCIpO1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj1yLHI9dCx0PW51bGwpLHImJihyPWkudG9BcnJheShyLG58fFwiaGV4XCIpLHRoaXMuX3VwZGF0ZShyKSk7Zm9yKHZhciBzPVtdO3MubGVuZ3RoPGU7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkscz1zLmNvbmNhdCh0aGlzLlYpO3ZhciBvPXMuc2xpY2UoMCxlKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHIpLHRoaXMuX3Jlc2VlZCsrLGkuZW5jb2RlKG8sdCl9fSx7XCJoYXNoLmpzXCI6NDI2LFwibWluaW1hbGlzdGljLWFzc2VydFwiOjQ1MyxcIm1pbmltYWxpc3RpYy1jcnlwdG8tdXRpbHNcIjo0NTR9XSw0Mzk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovci5yZWFkPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIHMsbyxhPTgqaS1uLTEsbD0oMTw8YSktMSxjPWw+PjEsdT0tNyxoPXI/aS0xOjAsZj1yPy0xOjEsZD1lW3QraF07Zm9yKGgrPWYscz1kJigxPDwtdSktMSxkPj49LXUsdSs9YTt1PjA7cz0yNTYqcytlW3QraF0saCs9Zix1LT04KTtmb3Iobz1zJigxPDwtdSktMSxzPj49LXUsdSs9bjt1PjA7bz0yNTYqbytlW3QraF0saCs9Zix1LT04KTtpZigwPT09cylzPTEtYztlbHNle2lmKHM9PT1sKXJldHVybiBvP05hTjoxLzAqKGQ/LTE6MSk7bys9TWF0aC5wb3coMixuKSxzLT1jfXJldHVybihkPy0xOjEpKm8qTWF0aC5wb3coMixzLW4pfSxyLndyaXRlPWZ1bmN0aW9uKGUsdCxyLG4saSxzKXt2YXIgbyxhLGwsYz04KnMtaS0xLHU9KDE8PGMpLTEsaD11Pj4xLGY9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxkPW4/MDpzLTEscD1uPzE6LTEsbT10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9TWF0aC5hYnModCksaXNOYU4odCl8fHQ9PT0xLzA/KGE9aXNOYU4odCk/MTowLG89dSk6KG89TWF0aC5mbG9vcihNYXRoLmxvZyh0KS9NYXRoLkxOMiksdCoobD1NYXRoLnBvdygyLC1vKSk8MSYmKG8tLSxsKj0yKSwodCs9bytoPj0xP2YvbDpmKk1hdGgucG93KDIsMS1oKSkqbD49MiYmKG8rKyxsLz0yKSxvK2g+PXU/KGE9MCxvPXUpOm8raD49MT8oYT0odCpsLTEpKk1hdGgucG93KDIsaSksbys9aCk6KGE9dCpNYXRoLnBvdygyLGgtMSkqTWF0aC5wb3coMixpKSxvPTApKTtpPj04O2VbcitkXT0yNTUmYSxkKz1wLGEvPTI1NixpLT04KTtmb3Iobz1vPDxpfGEsYys9aTtjPjA7ZVtyK2RdPTI1NSZvLGQrPXAsby89MjU2LGMtPTgpO2VbcitkLXBdfD0xMjgqbX19LHt9XSw0NDA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3QmJihlLnN1cGVyXz10LGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYodCl7ZS5zdXBlcl89dDt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHIsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZX19fSx7fV0sNDQxOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKG4saSxzLG8sYSxsLGMsdSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7XG4vKiFcblxuSlNaaXAgdjMuMTAuMSAtIEEgSmF2YVNjcmlwdCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBhbmQgcmVhZGluZyB6aXAgZmlsZXNcbjxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+XG5cbihjKSAyMDA5LTIwMTYgU3R1YXJ0IEtuaWdodGxleSA8c3R1YXJ0IFthdF0gc3R1YXJ0ay5jb20+XG5EdWFsIGxpY2VuY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBvciBHUEx2My4gU2VlIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vU3R1ay9qc3ppcC9tYWluL0xJQ0VOU0UubWFya2Rvd24uXG5cbkpTWmlwIHVzZXMgdGhlIGxpYnJhcnkgcGFrbyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgOlxuaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9wYWtvL2Jsb2IvbWFpbi9MSUNFTlNFXG4qLyFmdW5jdGlvbihlKXtcIm9iamVjdFwiPT10eXBlb2YgciYmdm9pZCAwIT09dD90LmV4cG9ydHM9ZSgpOihcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1pP2k6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5KU1ppcD1lKCl9KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KHIsbixpKXtmdW5jdGlvbiBzKGEsbCl7aWYoIW5bYV0pe2lmKCFyW2FdKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlO2lmKCFsJiZjKXJldHVybiBjKGEsITApO2lmKG8pcmV0dXJuIG8oYSwhMCk7dmFyIHU9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIithK1wiJ1wiKTt0aHJvdyB1LmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsdX12YXIgaD1uW2FdPXtleHBvcnRzOnt9fTtyW2FdWzBdLmNhbGwoaC5leHBvcnRzLChmdW5jdGlvbihlKXtyZXR1cm4gcyhyW2FdWzFdW2VdfHxlKX0pLGgsaC5leHBvcnRzLHQscixuLGkpfXJldHVybiBuW2FdLmV4cG9ydHN9Zm9yKHZhciBvPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsYT0wO2E8aS5sZW5ndGg7YSsrKXMoaVthXSk7cmV0dXJuIHN9KHsxOltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9zdXBwb3J0XCIpLHM9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO3IuZW5jb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLGksbyxhLGwsYyx1PVtdLGg9MCxmPWUubGVuZ3RoLGQ9ZixwPVwic3RyaW5nXCIhPT1uLmdldFR5cGVPZihlKTtoPGUubGVuZ3RoOylkPWYtaCxpPXA/KHQ9ZVtoKytdLHI9aDxmP2VbaCsrXTowLGg8Zj9lW2grK106MCk6KHQ9ZS5jaGFyQ29kZUF0KGgrKykscj1oPGY/ZS5jaGFyQ29kZUF0KGgrKyk6MCxoPGY/ZS5jaGFyQ29kZUF0KGgrKyk6MCksbz10Pj4yLGE9KDMmdCk8PDR8cj4+NCxsPTE8ZD8oMTUmcik8PDJ8aT4+Njo2NCxjPTI8ZD82MyZpOjY0LHUucHVzaChzLmNoYXJBdChvKStzLmNoYXJBdChhKStzLmNoYXJBdChsKStzLmNoYXJBdChjKSk7cmV0dXJuIHUuam9pbihcIlwiKX0sci5kZWNvZGU9ZnVuY3Rpb24oZSl7dmFyIHQscixuLG8sYSxsLGM9MCx1PTAsaD1cImRhdGE6XCI7aWYoZS5zdWJzdHIoMCxoLmxlbmd0aCk9PT1oKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBpdCBsb29rcyBsaWtlIGEgZGF0YSB1cmwuXCIpO3ZhciBmLGQ9MyooZT1lLnJlcGxhY2UoL1teQS1aYS16MC05Ky89XS9nLFwiXCIpKS5sZW5ndGgvNDtpZihlLmNoYXJBdChlLmxlbmd0aC0xKT09PXMuY2hhckF0KDY0KSYmZC0tLGUuY2hhckF0KGUubGVuZ3RoLTIpPT09cy5jaGFyQXQoNjQpJiZkLS0sZCUxIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBiYWQgY29udGVudCBsZW5ndGguXCIpO2ZvcihmPWkudWludDhhcnJheT9uZXcgVWludDhBcnJheSgwfGQpOm5ldyBBcnJheSgwfGQpO2M8ZS5sZW5ndGg7KXQ9cy5pbmRleE9mKGUuY2hhckF0KGMrKykpPDwyfChvPXMuaW5kZXhPZihlLmNoYXJBdChjKyspKSk+PjQscj0oMTUmbyk8PDR8KGE9cy5pbmRleE9mKGUuY2hhckF0KGMrKykpKT4+MixuPSgzJmEpPDw2fChsPXMuaW5kZXhPZihlLmNoYXJBdChjKyspKSksZlt1KytdPXQsNjQhPT1hJiYoZlt1KytdPXIpLDY0IT09bCYmKGZbdSsrXT1uKTtyZXR1cm4gZn19LHtcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMjpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL2V4dGVybmFsXCIpLGk9ZShcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIikscz1lKFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxvPWUoXCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmVcIik7ZnVuY3Rpb24gYShlLHQscixuLGkpe3RoaXMuY29tcHJlc3NlZFNpemU9ZSx0aGlzLnVuY29tcHJlc3NlZFNpemU9dCx0aGlzLmNyYzMyPXIsdGhpcy5jb21wcmVzc2lvbj1uLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9aX1hLnByb3RvdHlwZT17Z2V0Q29udGVudFdvcmtlcjpmdW5jdGlvbigpe3ZhciBlPW5ldyBpKG4uUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKS5waXBlKHRoaXMuY29tcHJlc3Npb24udW5jb21wcmVzc1dvcmtlcigpKS5waXBlKG5ldyBvKFwiZGF0YV9sZW5ndGhcIikpLHQ9dGhpcztyZXR1cm4gZS5vbihcImVuZFwiLChmdW5jdGlvbigpe2lmKHRoaXMuc3RyZWFtSW5mby5kYXRhX2xlbmd0aCE9PXQudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoXCIpfSkpLGV9LGdldENvbXByZXNzZWRXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkobi5Qcm9taXNlLnJlc29sdmUodGhpcy5jb21wcmVzc2VkQ29udGVudCkpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3NlZFNpemVcIix0aGlzLmNvbXByZXNzZWRTaXplKS53aXRoU3RyZWFtSW5mbyhcInVuY29tcHJlc3NlZFNpemVcIix0aGlzLnVuY29tcHJlc3NlZFNpemUpLndpdGhTdHJlYW1JbmZvKFwiY3JjMzJcIix0aGlzLmNyYzMyKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzaW9uXCIsdGhpcy5jb21wcmVzc2lvbil9fSxhLmNyZWF0ZVdvcmtlckZyb209ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLnBpcGUobmV3IHMpLnBpcGUobmV3IG8oXCJ1bmNvbXByZXNzZWRTaXplXCIpKS5waXBlKHQuY29tcHJlc3NXb3JrZXIocikpLnBpcGUobmV3IG8oXCJjb21wcmVzc2VkU2l6ZVwiKSkud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2lvblwiLHQpfSx0LmV4cG9ydHM9YX0se1wiLi9leHRlcm5hbFwiOjYsXCIuL3N0cmVhbS9DcmMzMlByb2JlXCI6MjUsXCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmVcIjoyNixcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIjoyN31dLDM6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKTtyLlNUT1JFPXttYWdpYzpcIlxcMFxcMFwiLGNvbXByZXNzV29ya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKFwiU1RPUkUgY29tcHJlc3Npb25cIil9LHVuY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oXCJTVE9SRSBkZWNvbXByZXNzaW9uXCIpfX0sci5ERUZMQVRFPWUoXCIuL2ZsYXRlXCIpfSx7XCIuL2ZsYXRlXCI6NyxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDQ6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi91dGlsc1wiKSxpPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmUubGVuZ3RoP1wic3RyaW5nXCIhPT1uLmdldFR5cGVPZihlKT9mdW5jdGlvbihlLHQscixuKXt2YXIgcz1pLG89MCtyO2VePS0xO2Zvcih2YXIgYT0wO2E8bzthKyspZT1lPj4+OF5zWzI1NSYoZV50W2FdKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgpOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBzPWksbz0wK3I7ZV49LTE7Zm9yKHZhciBhPTA7YTxvO2ErKyllPWU+Pj44XnNbMjU1JihlXnQuY2hhckNvZGVBdChhKSldO3JldHVybi0xXmV9KDB8dCxlLGUubGVuZ3RoKTowfX0se1wiLi91dGlsc1wiOjMyfV0sNTpbZnVuY3Rpb24oZSx0LHIpe3IuYmFzZTY0PSExLHIuYmluYXJ5PSExLHIuZGlyPSExLHIuY3JlYXRlRm9sZGVycz0hMCxyLmRhdGU9bnVsbCxyLmNvbXByZXNzaW9uPW51bGwsci5jb21wcmVzc2lvbk9wdGlvbnM9bnVsbCxyLmNvbW1lbnQ9bnVsbCxyLnVuaXhQZXJtaXNzaW9ucz1udWxsLHIuZG9zUGVybWlzc2lvbnM9bnVsbH0se31dLDY6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbjtuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlP1Byb21pc2U6ZShcImxpZVwiKSx0LmV4cG9ydHM9e1Byb21pc2U6bn19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbihlLHQscil7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQzMkFycmF5LGk9ZShcInBha29cIikscz1lKFwiLi91dGlsc1wiKSxvPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLGE9bj9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7ZnVuY3Rpb24gbChlLHQpe28uY2FsbCh0aGlzLFwiRmxhdGVXb3JrZXIvXCIrZSksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249ZSx0aGlzLl9wYWtvT3B0aW9ucz10LHRoaXMubWV0YT17fX1yLm1hZ2ljPVwiXFxiXFwwXCIscy5pbmhlcml0cyhsLG8pLGwucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLm1ldGE9ZS5tZXRhLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKHMudHJhbnNmb3JtVG8oYSxlLmRhdGEpLCExKX0sbC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtvLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKFtdLCEwKX0sbC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe28ucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLl9wYWtvPW51bGx9LGwucHJvdG90eXBlLl9jcmVhdGVQYWtvPWZ1bmN0aW9uKCl7dGhpcy5fcGFrbz1uZXcgaVt0aGlzLl9wYWtvQWN0aW9uXSh7cmF3OiEwLGxldmVsOnRoaXMuX3Bha29PcHRpb25zLmxldmVsfHwtMX0pO3ZhciBlPXRoaXM7dGhpcy5fcGFrby5vbkRhdGE9ZnVuY3Rpb24odCl7ZS5wdXNoKHtkYXRhOnQsbWV0YTplLm1ldGF9KX19LHIuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBsKFwiRGVmbGF0ZVwiLGUpfSxyLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGwoXCJJbmZsYXRlXCIse30pfX0se1wiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi91dGlsc1wiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlLHQpe3ZhciByLG49XCJcIjtmb3Iocj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSksZT4+Pj04O3JldHVybiBufWZ1bmN0aW9uIGkoZSx0LHIsaSxvLHUpe3ZhciBoLGYsZD1lLmZpbGUscD1lLmNvbXByZXNzaW9uLG09dSE9PWEudXRmOGVuY29kZSxiPXMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix1KGQubmFtZSkpLGc9cy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLGEudXRmOGVuY29kZShkLm5hbWUpKSx5PWQuY29tbWVudCx2PXMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix1KHkpKSx3PXMudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixhLnV0ZjhlbmNvZGUoeSkpLF89Zy5sZW5ndGghPT1kLm5hbWUubGVuZ3RoLHg9dy5sZW5ndGghPT15Lmxlbmd0aCxrPVwiXCIsUz1cIlwiLE09XCJcIixDPWQuZGlyLFQ9ZC5kYXRlLEU9e2NyYzMyOjAsY29tcHJlc3NlZFNpemU6MCx1bmNvbXByZXNzZWRTaXplOjB9O3QmJiFyfHwoRS5jcmMzMj1lLmNyYzMyLEUuY29tcHJlc3NlZFNpemU9ZS5jb21wcmVzc2VkU2l6ZSxFLnVuY29tcHJlc3NlZFNpemU9ZS51bmNvbXByZXNzZWRTaXplKTt2YXIgQT0wO3QmJihBfD04KSxtfHwhXyYmIXh8fChBfD0yMDQ4KTt2YXIgUj0wLE89MDtDJiYoUnw9MTYpLFwiVU5JWFwiPT09bz8oTz03OTgsUnw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lO3JldHVybiBlfHwocj10PzE2ODkzOjMzMjA0KSwoNjU1MzUmcik8PDE2fShkLnVuaXhQZXJtaXNzaW9ucyxDKSk6KE89MjAsUnw9ZnVuY3Rpb24oZSl7cmV0dXJuIDYzJihlfHwwKX0oZC5kb3NQZXJtaXNzaW9ucykpLGg9VC5nZXRVVENIb3VycygpLGg8PD02LGh8PVQuZ2V0VVRDTWludXRlcygpLGg8PD01LGh8PVQuZ2V0VVRDU2Vjb25kcygpLzIsZj1ULmdldFVUQ0Z1bGxZZWFyKCktMTk4MCxmPDw9NCxmfD1ULmdldFVUQ01vbnRoKCkrMSxmPDw9NSxmfD1ULmdldFVUQ0RhdGUoKSxfJiYoUz1uKDEsMSkrbihsKGIpLDQpK2csays9XCJ1cFwiK24oUy5sZW5ndGgsMikrUykseCYmKE09bigxLDEpK24obCh2KSw0KSt3LGsrPVwidWNcIituKE0ubGVuZ3RoLDIpK00pO3ZhciBqPVwiXCI7cmV0dXJuIGorPVwiXFxuXFwwXCIsais9bihBLDIpLGorPXAubWFnaWMsais9bihoLDIpLGorPW4oZiwyKSxqKz1uKEUuY3JjMzIsNCksais9bihFLmNvbXByZXNzZWRTaXplLDQpLGorPW4oRS51bmNvbXByZXNzZWRTaXplLDQpLGorPW4oYi5sZW5ndGgsMiksais9bihrLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpjLkxPQ0FMX0ZJTEVfSEVBREVSK2orYitrLGRpclJlY29yZDpjLkNFTlRSQUxfRklMRV9IRUFERVIrbihPLDIpK2orbih2Lmxlbmd0aCwyKStcIlxcMFxcMFxcMFxcMFwiK24oUiw0KStuKGksNCkrYitrK3Z9fXZhciBzPWUoXCIuLi91dGlsc1wiKSxvPWUoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxhPWUoXCIuLi91dGY4XCIpLGw9ZShcIi4uL2NyYzMyXCIpLGM9ZShcIi4uL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiB1KGUsdCxyLG4pe28uY2FsbCh0aGlzLFwiWmlwRmlsZVdvcmtlclwiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD10LHRoaXMuemlwUGxhdGZvcm09cix0aGlzLmVuY29kZUZpbGVOYW1lPW4sdGhpcy5zdHJlYW1GaWxlcz1lLHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119cy5pbmhlcml0cyh1LG8pLHUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRhLnBlcmNlbnR8fDAscj10aGlzLmVudHJpZXNDb3VudCxuPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaChlKToodGhpcy5ieXRlc1dyaXR0ZW4rPWUuZGF0YS5sZW5ndGgsby5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6ZS5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpyPyh0KzEwMCooci1uLTEpKS9yOjEwMH19KSl9LHUucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT1lLmZpbGUubmFtZTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcjtpZih0KXt2YXIgcj1pKGUsdCwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6ci5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0sdS5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKGUpe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcixyPWkoZSx0LCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHIuZGlyUmVjb3JkKSx0KXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gYy5EQVRBX0RFU0NSSVBUT1IrbihlLmNyYzMyLDQpK24oZS5jb21wcmVzc2VkU2l6ZSw0KStuKGUudW5jb21wcmVzc2VkU2l6ZSw0KX0oZSksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOnIuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LHUucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnl0ZXNXcml0dGVuLHQ9MDt0PHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7dCsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbdF0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIHI9dGhpcy5ieXRlc1dyaXR0ZW4tZSxpPWZ1bmN0aW9uKGUsdCxyLGksbyl7dmFyIGE9cy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLG8oaSkpO3JldHVybiBjLkNFTlRSQUxfRElSRUNUT1JZX0VORCtcIlxcMFxcMFxcMFxcMFwiK24oZSwyKStuKGUsMikrbih0LDQpK24ociw0KStuKGEubGVuZ3RoLDIpK2F9KHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgscixlLHRoaXMuemlwQ29tbWVudCx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6aSxtZXRhOntwZXJjZW50OjEwMH19KX0sdS5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJldmlvdXMucmVzdW1lKCl9LHUucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24oZSl7dGhpcy5fc291cmNlcy5wdXNoKGUpO3ZhciB0PXRoaXM7cmV0dXJuIGUub24oXCJkYXRhXCIsKGZ1bmN0aW9uKGUpe3QucHJvY2Vzc0NodW5rKGUpfSkpLGUub24oXCJlbmRcIiwoZnVuY3Rpb24oKXt0LmNsb3NlZFNvdXJjZSh0LnByZXZpb3VzLnN0cmVhbUluZm8pLHQuX3NvdXJjZXMubGVuZ3RoP3QucHJlcGFyZU5leHRTb3VyY2UoKTp0LmVuZCgpfSkpLGUub24oXCJlcnJvclwiLChmdW5jdGlvbihlKXt0LmVycm9yKGUpfSkpLHRoaXN9LHUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhby5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAwOih0aGlzLmVuZCgpLCEwKSl9LHUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NvdXJjZXM7aWYoIW8ucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0cnl7dFtyXS5lcnJvcihlKX1jYXRjaChlKXt9cmV0dXJuITB9LHUucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXtvLnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciBlPXRoaXMuX3NvdXJjZXMsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0ubG9jaygpfSx0LmV4cG9ydHM9dX0se1wiLi4vY3JjMzJcIjo0LFwiLi4vc2lnbmF0dXJlXCI6MjMsXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRmOFwiOjMxLFwiLi4vdXRpbHNcIjozMn1dLDk6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi4vY29tcHJlc3Npb25zXCIpLGk9ZShcIi4vWmlwRmlsZVdvcmtlclwiKTtyLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1uZXcgaSh0LnN0cmVhbUZpbGVzLHIsdC5wbGF0Zm9ybSx0LmVuY29kZUZpbGVOYW1lKSxvPTA7dHJ5e2UuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtvKys7dmFyIGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lfHx0LGk9bltyXTtpZighaSl0aHJvdyBuZXcgRXJyb3IocitcIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgIVwiKTtyZXR1cm4gaX0oci5vcHRpb25zLmNvbXByZXNzaW9uLHQuY29tcHJlc3Npb24pLGE9ci5vcHRpb25zLmNvbXByZXNzaW9uT3B0aW9uc3x8dC5jb21wcmVzc2lvbk9wdGlvbnN8fHt9LGw9ci5kaXIsYz1yLmRhdGU7ci5fY29tcHJlc3NXb3JrZXIoaSxhKS53aXRoU3RyZWFtSW5mbyhcImZpbGVcIix7bmFtZTplLGRpcjpsLGRhdGU6Yyxjb21tZW50OnIuY29tbWVudHx8XCJcIix1bml4UGVybWlzc2lvbnM6ci51bml4UGVybWlzc2lvbnMsZG9zUGVybWlzc2lvbnM6ci5kb3NQZXJtaXNzaW9uc30pLnBpcGUocyl9KSkscy5lbnRyaWVzQ291bnQ9b31jYXRjaChlKXtzLmVycm9yKGUpfXJldHVybiBzfX0se1wiLi4vY29tcHJlc3Npb25zXCI6MyxcIi4vWmlwRmlsZVdvcmtlclwiOjh9XSwxMDpbZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG47aWYoYXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgY29uc3RydWN0b3Igd2l0aCBwYXJhbWV0ZXJzIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuXCIpO3RoaXMuZmlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9XCJcIix0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IG47Zm9yKHZhciB0IGluIHRoaXMpXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc1t0XSYmKGVbdF09dGhpc1t0XSk7cmV0dXJuIGV9fShuLnByb3RvdHlwZT1lKFwiLi9vYmplY3RcIikpLmxvYWRBc3luYz1lKFwiLi9sb2FkXCIpLG4uc3VwcG9ydD1lKFwiLi9zdXBwb3J0XCIpLG4uZGVmYXVsdHM9ZShcIi4vZGVmYXVsdHNcIiksbi52ZXJzaW9uPVwiMy4xMC4xXCIsbi5sb2FkQXN5bmM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IG4pLmxvYWRBc3luYyhlLHQpfSxuLmV4dGVybmFsPWUoXCIuL2V4dGVybmFsXCIpLHQuZXhwb3J0cz1ufSx7XCIuL2RlZmF1bHRzXCI6NSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9sb2FkXCI6MTEsXCIuL29iamVjdFwiOjE1LFwiLi9zdXBwb3J0XCI6MzB9XSwxMTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL3V0aWxzXCIpLGk9ZShcIi4vZXh0ZXJuYWxcIikscz1lKFwiLi91dGY4XCIpLG89ZShcIi4vemlwRW50cmllc1wiKSxhPWUoXCIuL3N0cmVhbS9DcmMzMlByb2JlXCIpLGw9ZShcIi4vbm9kZWpzVXRpbHNcIik7ZnVuY3Rpb24gYyhlKXtyZXR1cm4gbmV3IGkuUHJvbWlzZSgoZnVuY3Rpb24odCxyKXt2YXIgbj1lLmRlY29tcHJlc3NlZC5nZXRDb250ZW50V29ya2VyKCkucGlwZShuZXcgYSk7bi5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe3IoZSl9KSkub24oXCJlbmRcIiwoZnVuY3Rpb24oKXtuLnN0cmVhbUluZm8uY3JjMzIhPT1lLmRlY29tcHJlc3NlZC5jcmMzMj9yKG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaFwiKSk6dCgpfSkpLnJlc3VtZSgpfSkpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7cmV0dXJuIHQ9bi5leHRlbmQodHx8e30se2Jhc2U2NDohMSxjaGVja0NSQzMyOiExLG9wdGltaXplZEJpbmFyeVN0cmluZzohMSxjcmVhdGVGb2xkZXJzOiExLGRlY29kZUZpbGVOYW1lOnMudXRmOGRlY29kZX0pLGwuaXNOb2RlJiZsLmlzU3RyZWFtKGUpP2kuUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSlNaaXAgY2FuJ3QgYWNjZXB0IGEgc3RyZWFtIHdoZW4gbG9hZGluZyBhIHppcCBmaWxlLlwiKSk6bi5wcmVwYXJlQ29udGVudChcInRoZSBsb2FkZWQgemlwIGZpbGVcIixlLCEwLHQub3B0aW1pemVkQmluYXJ5U3RyaW5nLHQuYmFzZTY0KS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1uZXcgbyh0KTtyZXR1cm4gci5sb2FkKGUpLHJ9KSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI9W2kuUHJvbWlzZS5yZXNvbHZlKGUpXSxuPWUuZmlsZXM7aWYodC5jaGVja0NSQzMyKWZvcih2YXIgcz0wO3M8bi5sZW5ndGg7cysrKXIucHVzaChjKG5bc10pKTtyZXR1cm4gaS5Qcm9taXNlLmFsbChyKX0pKS50aGVuKChmdW5jdGlvbihlKXtmb3IodmFyIGk9ZS5zaGlmdCgpLHM9aS5maWxlcyxvPTA7bzxzLmxlbmd0aDtvKyspe3ZhciBhPXNbb10sbD1hLmZpbGVOYW1lU3RyLGM9bi5yZXNvbHZlKGEuZmlsZU5hbWVTdHIpO3IuZmlsZShjLGEuZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6YS5kYXRlLGRpcjphLmRpcixjb21tZW50OmEuZmlsZUNvbW1lbnRTdHIubGVuZ3RoP2EuZmlsZUNvbW1lbnRTdHI6bnVsbCx1bml4UGVybWlzc2lvbnM6YS51bml4UGVybWlzc2lvbnMsZG9zUGVybWlzc2lvbnM6YS5kb3NQZXJtaXNzaW9ucyxjcmVhdGVGb2xkZXJzOnQuY3JlYXRlRm9sZGVyc30pLGEuZGlyfHwoci5maWxlKGMpLnVuc2FmZU9yaWdpbmFsTmFtZT1sKX1yZXR1cm4gaS56aXBDb21tZW50Lmxlbmd0aCYmKHIuY29tbWVudD1pLnppcENvbW1lbnQpLHJ9KSl9fSx7XCIuL2V4dGVybmFsXCI6NixcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIjoyNSxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyLFwiLi96aXBFbnRyaWVzXCI6MzN9XSwxMjpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKTtmdW5jdGlvbiBzKGUsdCl7aS5jYWxsKHRoaXMsXCJOb2RlanMgc3RyZWFtIGlucHV0IGFkYXB0ZXIgZm9yIFwiK2UpLHRoaXMuX3Vwc3RyZWFtRW5kZWQ9ITEsdGhpcy5fYmluZFN0cmVhbSh0KX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUuX2JpbmRTdHJlYW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczsodGhpcy5fc3RyZWFtPWUpLnBhdXNlKCksZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp7cGVyY2VudDowfX0pfSkpLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7dC5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPWU6dC5lcnJvcihlKX0pKS5vbihcImVuZFwiLChmdW5jdGlvbigpe3QuaXNQYXVzZWQ/dC5fdXBzdHJlYW1FbmRlZD0hMDp0LmVuZCgpfSkpfSxzLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucGF1c2UuY2FsbCh0aGlzKSYmKHRoaXMuX3N0cmVhbS5wYXVzZSgpLCEwKX0scy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFpLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKHRoaXMuX3Vwc3RyZWFtRW5kZWQ/dGhpcy5lbmQoKTp0aGlzLl9zdHJlYW0ucmVzdW1lKCksITApfSx0LmV4cG9ydHM9c30se1wiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4uL3V0aWxzXCI6MzJ9XSwxMzpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCJyZWFkYWJsZS1zdHJlYW1cIikuUmVhZGFibGU7ZnVuY3Rpb24gaShlLHQscil7bi5jYWxsKHRoaXMsdCksdGhpcy5faGVscGVyPWU7dmFyIGk9dGhpcztlLm9uKFwiZGF0YVwiLChmdW5jdGlvbihlLHQpe2kucHVzaChlKXx8aS5faGVscGVyLnBhdXNlKCksciYmcih0KX0pKS5vbihcImVycm9yXCIsKGZ1bmN0aW9uKGUpe2kuZW1pdChcImVycm9yXCIsZSl9KSkub24oXCJlbmRcIiwoZnVuY3Rpb24oKXtpLnB1c2gobnVsbCl9KSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oKXt0aGlzLl9oZWxwZXIucmVzdW1lKCl9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwicmVhZGFibGUtc3RyZWFtXCI6MTZ9XSwxNDpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17aXNOb2RlOnZvaWQgMCE9PXMsbmV3QnVmZmVyRnJvbTpmdW5jdGlvbihlLHQpe2lmKHMuZnJvbSYmcy5mcm9tIT09VWludDhBcnJheS5mcm9tKXJldHVybiBzLmZyb20oZSx0KTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcImRhdGFcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiBuZXcgcyhlLHQpfSxhbGxvY0J1ZmZlcjpmdW5jdGlvbihlKXtpZihzLmFsbG9jKXJldHVybiBzLmFsbG9jKGUpO3ZhciB0PW5ldyBzKGUpO3JldHVybiB0LmZpbGwoMCksdH0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuaXNCdWZmZXIoZSl9LGlzU3RyZWFtOmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm9uJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnBhdXNlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnJlc3VtZX19fSx7fV0sMTU6W2Z1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBuKGUsdCxyKXt2YXIgbixpPXMuZ2V0VHlwZU9mKHQpLGE9cy5leHRlbmQocnx8e30sbCk7YS5kYXRlPWEuZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWEuY29tcHJlc3Npb24mJihhLmNvbXByZXNzaW9uPWEuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksXCJzdHJpbmdcIj09dHlwZW9mIGEudW5peFBlcm1pc3Npb25zJiYoYS51bml4UGVybWlzc2lvbnM9cGFyc2VJbnQoYS51bml4UGVybWlzc2lvbnMsOCkpLGEudW5peFBlcm1pc3Npb25zJiYxNjM4NCZhLnVuaXhQZXJtaXNzaW9ucyYmKGEuZGlyPSEwKSxhLmRvc1Blcm1pc3Npb25zJiYxNiZhLmRvc1Blcm1pc3Npb25zJiYoYS5kaXI9ITApLGEuZGlyJiYoZT1tKGUpKSxhLmNyZWF0ZUZvbGRlcnMmJihuPXAoZSkpJiZiLmNhbGwodGhpcyxuLCEwKTt2YXIgaD1cInN0cmluZ1wiPT09aSYmITE9PT1hLmJpbmFyeSYmITE9PT1hLmJhc2U2NDtyJiZ2b2lkIDAhPT1yLmJpbmFyeXx8KGEuYmluYXJ5PSFoKSwodCBpbnN0YW5jZW9mIGMmJjA9PT10LnVuY29tcHJlc3NlZFNpemV8fGEuZGlyfHwhdHx8MD09PXQubGVuZ3RoKSYmKGEuYmFzZTY0PSExLGEuYmluYXJ5PSEwLHQ9XCJcIixhLmNvbXByZXNzaW9uPVwiU1RPUkVcIixpPVwic3RyaW5nXCIpO3ZhciBnO2c9dCBpbnN0YW5jZW9mIGN8fHQgaW5zdGFuY2VvZiBvP3Q6Zi5pc05vZGUmJmYuaXNTdHJlYW0odCk/bmV3IGQoZSx0KTpzLnByZXBhcmVDb250ZW50KGUsdCxhLmJpbmFyeSxhLm9wdGltaXplZEJpbmFyeVN0cmluZyxhLmJhc2U2NCk7dmFyIHk9bmV3IHUoZSxnLGEpO3RoaXMuZmlsZXNbZV09eX12YXIgaT1lKFwiLi91dGY4XCIpLHM9ZShcIi4vdXRpbHNcIiksbz1lKFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxhPWUoXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIiksbD1lKFwiLi9kZWZhdWx0c1wiKSxjPWUoXCIuL2NvbXByZXNzZWRPYmplY3RcIiksdT1lKFwiLi96aXBPYmplY3RcIiksaD1lKFwiLi9nZW5lcmF0ZVwiKSxmPWUoXCIuL25vZGVqc1V0aWxzXCIpLGQ9ZShcIi4vbm9kZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlclwiKSxwPWZ1bmN0aW9uKGUpe1wiL1wiPT09ZS5zbGljZSgtMSkmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMSkpO3ZhciB0PWUubGFzdEluZGV4T2YoXCIvXCIpO3JldHVybiAwPHQ/ZS5zdWJzdHJpbmcoMCx0KTpcIlwifSxtPWZ1bmN0aW9uKGUpe3JldHVyblwiL1wiIT09ZS5zbGljZSgtMSkmJihlKz1cIi9cIiksZX0sYj1mdW5jdGlvbihlLHQpe3JldHVybiB0PXZvaWQgMCE9PXQ/dDpsLmNyZWF0ZUZvbGRlcnMsZT1tKGUpLHRoaXMuZmlsZXNbZV18fG4uY2FsbCh0aGlzLGUsbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6dH0pLHRoaXMuZmlsZXNbZV19O2Z1bmN0aW9uIGcoZSl7cmV0dXJuXCJbb2JqZWN0IFJlZ0V4cF1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX12YXIgeT17bG9hZDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuXCIpfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtmb3IodCBpbiB0aGlzLmZpbGVzKW49dGhpcy5maWxlc1t0XSwocj10LnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsdC5sZW5ndGgpKSYmdC5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZlKHIsbil9LGZpbHRlcjpmdW5jdGlvbihlKXt2YXIgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2UocixuKSYmdC5wdXNoKG4pfSkpLHR9LGZpbGU6ZnVuY3Rpb24oZSx0LHIpe2lmKDEhPT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPXRoaXMucm9vdCtlLG4uY2FsbCh0aGlzLGUsdCxyKSx0aGlzO2lmKGcoZSkpe3ZhciBpPWU7cmV0dXJuIHRoaXMuZmlsdGVyKChmdW5jdGlvbihlLHQpe3JldHVybiF0LmRpciYmaS50ZXN0KGUpfSkpfXZhciBzPXRoaXMuZmlsZXNbdGhpcy5yb290K2VdO3JldHVybiBzJiYhcy5kaXI/czpudWxsfSxmb2xkZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHRoaXM7aWYoZyhlKSlyZXR1cm4gdGhpcy5maWx0ZXIoKGZ1bmN0aW9uKHQscil7cmV0dXJuIHIuZGlyJiZlLnRlc3QodCl9KSk7dmFyIHQ9dGhpcy5yb290K2Uscj1iLmNhbGwodGhpcyx0KSxuPXRoaXMuY2xvbmUoKTtyZXR1cm4gbi5yb290PXIubmFtZSxufSxyZW1vdmU6ZnVuY3Rpb24oZSl7ZT10aGlzLnJvb3QrZTt2YXIgdD10aGlzLmZpbGVzW2VdO2lmKHR8fChcIi9cIiE9PWUuc2xpY2UoLTEpJiYoZSs9XCIvXCIpLHQ9dGhpcy5maWxlc1tlXSksdCYmIXQuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW2VdO2Vsc2UgZm9yKHZhciByPXRoaXMuZmlsdGVyKChmdW5jdGlvbih0LHIpe3JldHVybiByLm5hbWUuc2xpY2UoMCxlLmxlbmd0aCk9PT1lfSkpLG49MDtuPHIubGVuZ3RoO24rKylkZWxldGUgdGhpcy5maWxlc1tyW25dLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuXCIpfSxnZW5lcmF0ZUludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0LHI9e307dHJ5e2lmKChyPXMuZXh0ZW5kKGV8fHt9LHtzdHJlYW1GaWxlczohMSxjb21wcmVzc2lvbjpcIlNUT1JFXCIsY29tcHJlc3Npb25PcHRpb25zOm51bGwsdHlwZTpcIlwiLHBsYXRmb3JtOlwiRE9TXCIsY29tbWVudDpudWxsLG1pbWVUeXBlOlwiYXBwbGljYXRpb24vemlwXCIsZW5jb2RlRmlsZU5hbWU6aS51dGY4ZW5jb2RlfSkpLnR5cGU9ci50eXBlLnRvTG93ZXJDYXNlKCksci5jb21wcmVzc2lvbj1yLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksXCJiaW5hcnlzdHJpbmdcIj09PXIudHlwZSYmKHIudHlwZT1cInN0cmluZ1wiKSwhci50eXBlKXRocm93IG5ldyBFcnJvcihcIk5vIG91dHB1dCB0eXBlIHNwZWNpZmllZC5cIik7cy5jaGVja1N1cHBvcnQoci50eXBlKSxcImRhcndpblwiIT09ci5wbGF0Zm9ybSYmXCJmcmVlYnNkXCIhPT1yLnBsYXRmb3JtJiZcImxpbnV4XCIhPT1yLnBsYXRmb3JtJiZcInN1bm9zXCIhPT1yLnBsYXRmb3JtfHwoci5wbGF0Zm9ybT1cIlVOSVhcIiksXCJ3aW4zMlwiPT09ci5wbGF0Zm9ybSYmKHIucGxhdGZvcm09XCJET1NcIik7dmFyIG49ci5jb21tZW50fHx0aGlzLmNvbW1lbnR8fFwiXCI7dD1oLmdlbmVyYXRlV29ya2VyKHRoaXMscixuKX1jYXRjaChlKXsodD1uZXcgbyhcImVycm9yXCIpKS5lcnJvcihlKX1yZXR1cm4gbmV3IGEodCxyLnR5cGV8fFwic3RyaW5nXCIsci5taW1lVHlwZSl9LGdlbmVyYXRlQXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKGUpLmFjY3VtdWxhdGUodCl9LGdlbmVyYXRlTm9kZVN0cmVhbTpmdW5jdGlvbihlLHQpe3JldHVybihlPWV8fHt9KS50eXBlfHwoZS50eXBlPVwibm9kZWJ1ZmZlclwiKSx0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0oZSkudG9Ob2RlanNTdHJlYW0odCl9fTt0LmV4cG9ydHM9eX0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vZGVmYXVsdHNcIjo1LFwiLi9nZW5lcmF0ZVwiOjksXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIjoxMixcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3RyZWFtL1N0cmVhbUhlbHBlclwiOjI5LFwiLi91dGY4XCI6MzEsXCIuL3V0aWxzXCI6MzIsXCIuL3ppcE9iamVjdFwiOjM1fV0sMTY6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZShcInN0cmVhbVwiKX0se3N0cmVhbTp2b2lkIDB9XSwxNzpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuZGF0YS5sZW5ndGg7dCsrKWVbdF09MjU1JmVbdF19ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUuYnl0ZUF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFbdGhpcy56ZXJvK2VdfSxpLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGFyQ29kZUF0KDApLHI9ZS5jaGFyQ29kZUF0KDEpLG49ZS5jaGFyQ29kZUF0KDIpLGk9ZS5jaGFyQ29kZUF0KDMpLHM9dGhpcy5sZW5ndGgtNDswPD1zOy0tcylpZih0aGlzLmRhdGFbc109PT10JiZ0aGlzLmRhdGFbcysxXT09PXImJnRoaXMuZGF0YVtzKzJdPT09biYmdGhpcy5kYXRhW3MrM109PT1pKXJldHVybiBzLXRoaXMuemVybztyZXR1cm4tMX0saS5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckNvZGVBdCgwKSxyPWUuY2hhckNvZGVBdCgxKSxuPWUuY2hhckNvZGVBdCgyKSxpPWUuY2hhckNvZGVBdCgzKSxzPXRoaXMucmVhZERhdGEoNCk7cmV0dXJuIHQ9PT1zWzBdJiZyPT09c1sxXSYmbj09PXNbMl0mJmk9PT1zWzNdfSxpLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihlKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGUpLDA9PT1lKXJldHVybltdO3ZhciB0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtlKTtyZXR1cm4gdGhpcy5pbmRleCs9ZSx0fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcIi4vRGF0YVJlYWRlclwiOjE4fV0sMTg6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gaShlKXt0aGlzLmRhdGE9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmluZGV4PTAsdGhpcy56ZXJvPTB9aS5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K2UpfSxjaGVja0luZGV4OmZ1bmN0aW9uKGUpe2lmKHRoaXMubGVuZ3RoPHRoaXMuemVybytlfHxlPDApdGhyb3cgbmV3IEVycm9yKFwiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSBcIit0aGlzLmxlbmd0aCtcIiwgYXNrZWQgaW5kZXggPSBcIitlK1wiKS4gQ29ycnVwdGVkIHppcCA/XCIpfSxzZXRJbmRleDpmdW5jdGlvbihlKXt0aGlzLmNoZWNrSW5kZXgoZSksdGhpcy5pbmRleD1lfSxza2lwOmZ1bmN0aW9uKGUpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtlKX0sYnl0ZUF0OmZ1bmN0aW9uKCl7fSxyZWFkSW50OmZ1bmN0aW9uKGUpe3ZhciB0LHI9MDtmb3IodGhpcy5jaGVja09mZnNldChlKSx0PXRoaXMuaW5kZXgrZS0xO3Q+PXRoaXMuaW5kZXg7dC0tKXI9KHI8PDgpK3RoaXMuYnl0ZUF0KHQpO3JldHVybiB0aGlzLmluZGV4Kz1lLHJ9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIG4udHJhbnNmb3JtVG8oXCJzdHJpbmdcIix0aGlzLnJlYWREYXRhKGUpKX0scmVhZERhdGE6ZnVuY3Rpb24oKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKCl7fSxyZWFkQW5kQ2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZShEYXRlLlVUQygxOTgwKyhlPj4yNSYxMjcpLChlPj4yMSYxNSktMSxlPj4xNiYzMSxlPj4xMSYzMSxlPj41JjYzLCgzMSZlKTw8MSkpfX0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzXCI6MzJ9XSwxOTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNoZWNrT2Zmc2V0KGUpO3ZhciB0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtlKTtyZXR1cm4gdGhpcy5pbmRleCs9ZSx0fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcIi4vVWludDhBcnJheVJlYWRlclwiOjIxfV0sMjA6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9EYXRhUmVhZGVyXCIpO2Z1bmN0aW9uIGkoZSl7bi5jYWxsKHRoaXMsZSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUuYnl0ZUF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdCh0aGlzLnplcm8rZSl9LGkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoZSktdGhpcy56ZXJvfSxpLnByb3RvdHlwZS5yZWFkQW5kQ2hlY2tTaWduYXR1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10aGlzLnJlYWREYXRhKDQpfSxpLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNoZWNrT2Zmc2V0KGUpO3ZhciB0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtlKTtyZXR1cm4gdGhpcy5pbmRleCs9ZSx0fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcIi4vRGF0YVJlYWRlclwiOjE4fV0sMjE6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9BcnJheVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLG4pLGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hlY2tPZmZzZXQoZSksMD09PWUpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtlKTtyZXR1cm4gdGhpcy5pbmRleCs9ZSx0fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcIi4vQXJyYXlSZWFkZXJcIjoxN31dLDIyOltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4uL3V0aWxzXCIpLGk9ZShcIi4uL3N1cHBvcnRcIikscz1lKFwiLi9BcnJheVJlYWRlclwiKSxvPWUoXCIuL1N0cmluZ1JlYWRlclwiKSxhPWUoXCIuL05vZGVCdWZmZXJSZWFkZXJcIiksbD1lKFwiLi9VaW50OEFycmF5UmVhZGVyXCIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uLmdldFR5cGVPZihlKTtyZXR1cm4gbi5jaGVja1N1cHBvcnQodCksXCJzdHJpbmdcIiE9PXR8fGkudWludDhhcnJheT9cIm5vZGVidWZmZXJcIj09PXQ/bmV3IGEoZSk6aS51aW50OGFycmF5P25ldyBsKG4udHJhbnNmb3JtVG8oXCJ1aW50OGFycmF5XCIsZSkpOm5ldyBzKG4udHJhbnNmb3JtVG8oXCJhcnJheVwiLGUpKTpuZXcgbyhlKX19LHtcIi4uL3N1cHBvcnRcIjozMCxcIi4uL3V0aWxzXCI6MzIsXCIuL0FycmF5UmVhZGVyXCI6MTcsXCIuL05vZGVCdWZmZXJSZWFkZXJcIjoxOSxcIi4vU3RyaW5nUmVhZGVyXCI6MjAsXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIjoyMX1dLDIzOltmdW5jdGlvbihlLHQscil7ci5MT0NBTF9GSUxFX0hFQURFUj1cIlBLXFx4MDNcXHgwNFwiLHIuQ0VOVFJBTF9GSUxFX0hFQURFUj1cIlBLXFx4MDFcXHgwMlwiLHIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcXHgwNVxceDA2XCIsci5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPVwiUEtcXHgwNlxceDA3XCIsci5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9XCJQS1xceDA2XFx4MDZcIixyLkRBVEFfREVTQ1JJUFRPUj1cIlBLXFx4MDdcXGJcIn0se31dLDI0OltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4vR2VuZXJpY1dvcmtlclwiKSxpPWUoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBzKGUpe24uY2FsbCh0aGlzLFwiQ29udmVydFdvcmtlciB0byBcIitlKSx0aGlzLmRlc3RUeXBlPWV9aS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6aS50cmFuc2Zvcm1Ubyh0aGlzLmRlc3RUeXBlLGUuZGF0YSksbWV0YTplLm1ldGF9KX0sdC5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI1OltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4vR2VuZXJpY1dvcmtlclwiKSxpPWUoXCIuLi9jcmMzMlwiKTtmdW5jdGlvbiBzKCl7bi5jYWxsKHRoaXMsXCJDcmMzMlByb2JlXCIpLHRoaXMud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLDApfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnN0cmVhbUluZm8uY3JjMzI9aShlLmRhdGEsdGhpcy5zdHJlYW1JbmZvLmNyYzMyfHwwKSx0aGlzLnB1c2goZSl9LHQuZXhwb3J0cz1zfSx7XCIuLi9jcmMzMlwiOjQsXCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNjpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlKXtpLmNhbGwodGhpcyxcIkRhdGFMZW5ndGhQcm9iZSBmb3IgXCIrZSksdGhpcy5wcm9wTmFtZT1lLHRoaXMud2l0aFN0cmVhbUluZm8oZSwwKX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuc3RyZWFtSW5mb1t0aGlzLnByb3BOYW1lXXx8MDt0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV09dCtlLmRhdGEubGVuZ3RofWkucHJvdG90eXBlLnByb2Nlc3NDaHVuay5jYWxsKHRoaXMsZSl9LHQuZXhwb3J0cz1zfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNzpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlKXtpLmNhbGwodGhpcyxcIkRhdGFXb3JrZXJcIik7dmFyIHQ9dGhpczt0aGlzLmRhdGFJc1JlYWR5PSExLHRoaXMuaW5kZXg9MCx0aGlzLm1heD0wLHRoaXMuZGF0YT1udWxsLHRoaXMudHlwZT1cIlwiLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsZS50aGVuKChmdW5jdGlvbihlKXt0LmRhdGFJc1JlYWR5PSEwLHQuZGF0YT1lLHQubWF4PWUmJmUubGVuZ3RofHwwLHQudHlwZT1uLmdldFR5cGVPZihlKSx0LmlzUGF1c2VkfHx0Ll90aWNrQW5kUmVwZWF0KCl9KSwoZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pKX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2kucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLmRhdGE9bnVsbH0scy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFpLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLl90aWNrU2NoZWR1bGVkJiZ0aGlzLmRhdGFJc1JlYWR5JiYodGhpcy5fdGlja1NjaGVkdWxlZD0hMCxuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcykpLCEwKX0scy5wcm90b3R5cGUuX3RpY2tBbmRSZXBlYXQ9ZnVuY3Rpb24oKXt0aGlzLl90aWNrU2NoZWR1bGVkPSExLHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZHx8KHRoaXMuX3RpY2soKSx0aGlzLmlzRmluaXNoZWR8fChuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcyksdGhpcy5fdGlja1NjaGVkdWxlZD0hMCkpfSxzLnByb3RvdHlwZS5fdGljaz1mdW5jdGlvbigpe2lmKHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgZT1udWxsLHQ9TWF0aC5taW4odGhpcy5tYXgsdGhpcy5pbmRleCsxNjM4NCk7aWYodGhpcy5pbmRleD49dGhpcy5tYXgpcmV0dXJuIHRoaXMuZW5kKCk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVwic3RyaW5nXCI6ZT10aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwidWludDhhcnJheVwiOmU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwiYXJyYXlcIjpjYXNlXCJub2RlYnVmZmVyXCI6ZT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0KX1yZXR1cm4gdGhpcy5pbmRleD10LHRoaXMucHVzaCh7ZGF0YTplLG1ldGE6e3BlcmNlbnQ6dGhpcy5tYXg/dGhpcy5pbmRleC90aGlzLm1heCoxMDA6MH19KX0sdC5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI4OltmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9ZXx8XCJkZWZhdWx0XCIsdGhpcy5zdHJlYW1JbmZvPXt9LHRoaXMuZ2VuZXJhdGVkRXJyb3I9bnVsbCx0aGlzLmV4dHJhU3RyZWFtSW5mbz17fSx0aGlzLmlzUGF1c2VkPSEwLHRoaXMuaXNGaW5pc2hlZD0hMSx0aGlzLmlzTG9ja2VkPSExLHRoaXMuX2xpc3RlbmVycz17ZGF0YTpbXSxlbmQ6W10sZXJyb3I6W119LHRoaXMucHJldmlvdXM9bnVsbH1uLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihlKXt0aGlzLmVtaXQoXCJkYXRhXCIsZSl9LGVuZDpmdW5jdGlvbigpe2lmKHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt0aGlzLmZsdXNoKCk7dHJ5e3RoaXMuZW1pdChcImVuZFwiKSx0aGlzLmNsZWFuVXAoKSx0aGlzLmlzRmluaXNoZWQ9ITB9Y2F0Y2goZSl7dGhpcy5lbWl0KFwiZXJyb3JcIixlKX1yZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOih0aGlzLmlzRmluaXNoZWQ9ITAsdGhpcy5lbWl0KFwiZXJyb3JcIixlKSx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmVycm9yKGUpLHRoaXMuY2xlYW5VcCgpKSwhMCl9LG9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlXS5wdXNoKHQpLHRoaXN9LGNsZWFuVXA6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbUluZm89dGhpcy5nZW5lcmF0ZWRFcnJvcj10aGlzLmV4dHJhU3RyZWFtSW5mbz1udWxsLHRoaXMuX2xpc3RlbmVycz1bXX0sZW1pdDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX2xpc3RlbmVyc1tlXSlmb3IodmFyIHI9MDtyPHRoaXMuX2xpc3RlbmVyc1tlXS5sZW5ndGg7cisrKXRoaXMuX2xpc3RlbmVyc1tlXVtyXS5jYWxsKHRoaXMsdCl9LHBpcGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnaXN0ZXJQcmV2aW91cyh0aGlzKX0scmVnaXN0ZXJQcmV2aW91czpmdW5jdGlvbihlKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5zdHJlYW1JbmZvPWUuc3RyZWFtSW5mbyx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXMucHJldmlvdXM9ZTt2YXIgdD10aGlzO3JldHVybiBlLm9uKFwiZGF0YVwiLChmdW5jdGlvbihlKXt0LnByb2Nlc3NDaHVuayhlKX0pKSxlLm9uKFwiZW5kXCIsKGZ1bmN0aW9uKCl7dC5lbmQoKX0pKSxlLm9uKFwiZXJyb3JcIiwoZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pKSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUGF1c2VkJiYhdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnBhdXNlKCksITApfSxyZXN1bWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciBlPXRoaXMuaXNQYXVzZWQ9ITE7cmV0dXJuIHRoaXMuZ2VuZXJhdGVkRXJyb3ImJih0aGlzLmVycm9yKHRoaXMuZ2VuZXJhdGVkRXJyb3IpLGU9ITApLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucmVzdW1lKCksIWV9LGZsdXNoOmZ1bmN0aW9uKCl7fSxwcm9jZXNzQ2h1bms6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKGUpfSx3aXRoU3RyZWFtSW5mbzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmV4dHJhU3RyZWFtSW5mb1tlXT10LHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpc30sbWVyZ2VTdHJlYW1JbmZvOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuZXh0cmFTdHJlYW1JbmZvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmV4dHJhU3RyZWFtSW5mbyxlKSYmKHRoaXMuc3RyZWFtSW5mb1tlXT10aGlzLmV4dHJhU3RyZWFtSW5mb1tlXSl9LGxvY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5pc0xvY2tlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmxvY2soKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1cIldvcmtlciBcIit0aGlzLm5hbWU7cmV0dXJuIHRoaXMucHJldmlvdXM/dGhpcy5wcmV2aW91cytcIiAtPiBcIitlOmV9fSx0LmV4cG9ydHM9bn0se31dLDI5OltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4uL3V0aWxzXCIpLGk9ZShcIi4vQ29udmVydFdvcmtlclwiKSxvPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksYT1lKFwiLi4vYmFzZTY0XCIpLGw9ZShcIi4uL3N1cHBvcnRcIiksYz1lKFwiLi4vZXh0ZXJuYWxcIiksdT1udWxsO2lmKGwubm9kZXN0cmVhbSl0cnl7dT1lKFwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJcIil9Y2F0Y2goZSl7fWZ1bmN0aW9uIGgoZSx0LHIpe3ZhciBzPXQ7c3dpdGNoKHQpe2Nhc2VcImJsb2JcIjpjYXNlXCJhcnJheWJ1ZmZlclwiOnM9XCJ1aW50OGFycmF5XCI7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6cz1cInN0cmluZ1wifXRyeXt0aGlzLl9pbnRlcm5hbFR5cGU9cyx0aGlzLl9vdXRwdXRUeXBlPXQsdGhpcy5fbWltZVR5cGU9cixuLmNoZWNrU3VwcG9ydChzKSx0aGlzLl93b3JrZXI9ZS5waXBlKG5ldyBpKHMpKSxlLmxvY2soKX1jYXRjaChlKXt0aGlzLl93b3JrZXI9bmV3IG8oXCJlcnJvclwiKSx0aGlzLl93b3JrZXIuZXJyb3IoZSl9fWgucHJvdG90eXBlPXthY2N1bXVsYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBuZXcgYy5Qcm9taXNlKChmdW5jdGlvbihyLGkpe3ZhciBvPVtdLGw9ZS5faW50ZXJuYWxUeXBlLGM9ZS5fb3V0cHV0VHlwZSx1PWUuX21pbWVUeXBlO2Uub24oXCJkYXRhXCIsKGZ1bmN0aW9uKGUscil7by5wdXNoKGUpLHQmJnQocil9KSkub24oXCJlcnJvclwiLChmdW5jdGlvbihlKXtvPVtdLGkoZSl9KSkub24oXCJlbmRcIiwoZnVuY3Rpb24oKXt0cnl7dmFyIGU9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlXCJibG9iXCI6cmV0dXJuIG4ubmV3QmxvYihuLnRyYW5zZm9ybVRvKFwiYXJyYXlidWZmZXJcIix0KSxyKTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gYS5lbmNvZGUodCk7ZGVmYXVsdDpyZXR1cm4gbi50cmFuc2Zvcm1UbyhlLHQpfX0oYyxmdW5jdGlvbihlLHQpe3ZhciByLG49MCxpPW51bGwsbz0wO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspbys9dFtyXS5sZW5ndGg7c3dpdGNoKGUpe2Nhc2VcInN0cmluZ1wiOnJldHVybiB0LmpvaW4oXCJcIik7Y2FzZVwiYXJyYXlcIjpyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSx0KTtjYXNlXCJ1aW50OGFycmF5XCI6Zm9yKGk9bmV3IFVpbnQ4QXJyYXkobykscj0wO3I8dC5sZW5ndGg7cisrKWkuc2V0KHRbcl0sbiksbis9dFtyXS5sZW5ndGg7cmV0dXJuIGk7Y2FzZVwibm9kZWJ1ZmZlclwiOnJldHVybiBzLmNvbmNhdCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJ1wiK2UrXCInXCIpfX0obCxvKSx1KTtyKGUpfWNhdGNoKGUpe2koZSl9bz1bXX0pKS5yZXN1bWUoKX0pKX0odGhpcyxlKX0sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVyblwiZGF0YVwiPT09ZT90aGlzLl93b3JrZXIub24oZSwoZnVuY3Rpb24oZSl7dC5jYWxsKHIsZS5kYXRhLGUubWV0YSl9KSk6dGhpcy5fd29ya2VyLm9uKGUsKGZ1bmN0aW9uKCl7bi5kZWxheSh0LGFyZ3VtZW50cyxyKX0pKSx0aGlzfSxyZXN1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWxheSh0aGlzLl93b3JrZXIucmVzdW1lLFtdLHRoaXMuX3dvcmtlciksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd29ya2VyLnBhdXNlKCksdGhpc30sdG9Ob2RlanNTdHJlYW06ZnVuY3Rpb24oZSl7aWYobi5jaGVja1N1cHBvcnQoXCJub2Rlc3RyZWFtXCIpLFwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZSl0aHJvdyBuZXcgRXJyb3IodGhpcy5fb3V0cHV0VHlwZStcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kXCIpO3JldHVybiBuZXcgdSh0aGlzLHtvYmplY3RNb2RlOlwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZX0sZSl9fSx0LmV4cG9ydHM9aH0se1wiLi4vYmFzZTY0XCI6MSxcIi4uL2V4dGVybmFsXCI6NixcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCI6MTMsXCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9Db252ZXJ0V29ya2VyXCI6MjQsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDMwOltmdW5jdGlvbihlLHQscil7aWYoci5iYXNlNjQ9ITAsci5hcnJheT0hMCxyLnN0cmluZz0hMCxyLmFycmF5YnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksci5ub2RlYnVmZmVyPXZvaWQgMCE9PXMsci51aW50OGFycmF5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcilyLmJsb2I9ITE7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e3IuYmxvYj0wPT09bmV3IEJsb2IoW25dLHt0eXBlOlwiYXBwbGljYXRpb24vemlwXCJ9KS5zaXplfWNhdGNoKGUpe3RyeXt2YXIgaT1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtpLmFwcGVuZChuKSxyLmJsb2I9MD09PWkuZ2V0QmxvYihcImFwcGxpY2F0aW9uL3ppcFwiKS5zaXplfWNhdGNoKGUpe3IuYmxvYj0hMX19fXRyeXtyLm5vZGVzdHJlYW09ISFlKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlfWNhdGNoKGUpe3Iubm9kZXN0cmVhbT0hMX19LHtcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMzE6W2Z1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9zdXBwb3J0XCIpLHM9ZShcIi4vbm9kZWpzVXRpbHNcIiksbz1lKFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxhPW5ldyBBcnJheSgyNTYpLGw9MDtsPDI1NjtsKyspYVtsXT0yNTI8PWw/NjoyNDg8PWw/NToyNDA8PWw/NDoyMjQ8PWw/MzoxOTI8PWw/MjoxO2Z1bmN0aW9uIGMoKXtvLmNhbGwodGhpcyxcInV0Zi04IGRlY29kZVwiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gdSgpe28uY2FsbCh0aGlzLFwidXRmLTggZW5jb2RlXCIpfWFbMjU0XT1hWzI1NF09MSxyLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkubm9kZWJ1ZmZlcj9zLm5ld0J1ZmZlckZyb20oZSxcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixzLG8sYT1lLmxlbmd0aCxsPTA7Zm9yKHM9MDtzPGE7cysrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KHMpKSkmJnMrMTxhJiY1NjMyMD09KDY0NTEyJihuPWUuY2hhckNvZGVBdChzKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApLHMrKyksbCs9cjwxMjg/MTpyPDIwNDg/MjpyPDY1NTM2PzM6NDtmb3IodD1pLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkobCk6bmV3IEFycmF5KGwpLHM9bz0wO288bDtzKyspNTUyOTY9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQocykpKSYmcysxPGEmJjU2MzIwPT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KHMrMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsobi01NjMyMCkscysrKSxyPDEyOD90W28rK109cjoocjwyMDQ4P3RbbysrXT0xOTJ8cj4+PjY6KHI8NjU1MzY/dFtvKytdPTIyNHxyPj4+MTI6KHRbbysrXT0yNDB8cj4+PjE4LHRbbysrXT0xMjh8cj4+PjEyJjYzKSx0W28rK109MTI4fHI+Pj42JjYzKSx0W28rK109MTI4fDYzJnIpO3JldHVybiB0fShlKX0sci51dGY4ZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBpLm5vZGVidWZmZXI/bi50cmFuc2Zvcm1UbyhcIm5vZGVidWZmZXJcIixlKS50b1N0cmluZyhcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LHIsaSxzLG89ZS5sZW5ndGgsbD1uZXcgQXJyYXkoMipvKTtmb3IodD1yPTA7dDxvOylpZigoaT1lW3QrK10pPDEyOClsW3IrK109aTtlbHNlIGlmKDQ8KHM9YVtpXSkpbFtyKytdPTY1NTMzLHQrPXMtMTtlbHNle2ZvcihpJj0yPT09cz8zMTozPT09cz8xNTo3OzE8cyYmdDxvOylpPWk8PDZ8NjMmZVt0KytdLHMtLTsxPHM/bFtyKytdPTY1NTMzOmk8NjU1MzY/bFtyKytdPWk6KGktPTY1NTM2LGxbcisrXT01NTI5NnxpPj4xMCYxMDIzLGxbcisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBsLmxlbmd0aCE9PXImJihsLnN1YmFycmF5P2w9bC5zdWJhcnJheSgwLHIpOmwubGVuZ3RoPXIpLG4uYXBwbHlGcm9tQ2hhckNvZGUobCl9KGU9bi50cmFuc2Zvcm1UbyhpLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLGUpKX0sbi5pbmhlcml0cyhjLG8pLGMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt2YXIgdD1uLnRyYW5zZm9ybVRvKGkudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsZS5kYXRhKTtpZih0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCl7aWYoaS51aW50OGFycmF5KXt2YXIgcz10Oyh0PW5ldyBVaW50OEFycmF5KHMubGVuZ3RoK3RoaXMubGVmdE92ZXIubGVuZ3RoKSkuc2V0KHRoaXMubGVmdE92ZXIsMCksdC5zZXQocyx0aGlzLmxlZnRPdmVyLmxlbmd0aCl9ZWxzZSB0PXRoaXMubGVmdE92ZXIuY29uY2F0KHQpO3RoaXMubGVmdE92ZXI9bnVsbH12YXIgbz1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwfHwwPT09cj90OnIrYVtlW3JdXT50P3I6dH0odCksbD10O28hPT10Lmxlbmd0aCYmKGkudWludDhhcnJheT8obD10LnN1YmFycmF5KDAsbyksdGhpcy5sZWZ0T3Zlcj10LnN1YmFycmF5KG8sdC5sZW5ndGgpKToobD10LnNsaWNlKDAsbyksdGhpcy5sZWZ0T3Zlcj10LnNsaWNlKG8sdC5sZW5ndGgpKSksdGhpcy5wdXNoKHtkYXRhOnIudXRmOGRlY29kZShsKSxtZXRhOmUubWV0YX0pfSxjLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoJiYodGhpcy5wdXNoKHtkYXRhOnIudXRmOGRlY29kZSh0aGlzLmxlZnRPdmVyKSxtZXRhOnt9fSksdGhpcy5sZWZ0T3Zlcj1udWxsKX0sci5VdGY4RGVjb2RlV29ya2VyPWMsbi5pbmhlcml0cyh1LG8pLHUucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6ci51dGY4ZW5jb2RlKGUuZGF0YSksbWV0YTplLm1ldGF9KX0sci5VdGY4RW5jb2RlV29ya2VyPXV9LHtcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMzI6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9zdXBwb3J0XCIpLGk9ZShcIi4vYmFzZTY0XCIpLHM9ZShcIi4vbm9kZWpzVXRpbHNcIiksbz1lKFwiLi9leHRlcm5hbFwiKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPTI1NSZlLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9ZShcInNldGltbWVkaWF0ZVwiKSxyLm5ld0Jsb2I9ZnVuY3Rpb24oZSx0KXtyLmNoZWNrU3VwcG9ydChcImJsb2JcIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZV0se3R5cGU6dH0pfWNhdGNoKHIpe3RyeXt2YXIgbj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gbi5hcHBlbmQoZSksbi5nZXRCbG9iKHQpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIil9fX07dmFyIGM9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdLGk9MCxzPWUubGVuZ3RoO2lmKHM8PXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IoO2k8czspXCJhcnJheVwiPT09dHx8XCJub2RlYnVmZmVyXCI9PT10P24ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zbGljZShpLE1hdGgubWluKGkrcixzKSkpKTpuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoaSxNYXRoLm1pbihpK3IscykpKSksaSs9cjtyZXR1cm4gbi5qb2luKFwiXCIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIscj0wO3I8ZS5sZW5ndGg7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHR9LGFwcGx5Q2FuQmVVc2VkOnt1aW50OGFycmF5OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuLnVpbnQ4YXJyYXkmJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksbm9kZWJ1ZmZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gbi5ub2RlYnVmZmVyJiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHMuYWxsb2NCdWZmZXIoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCl9fTtmdW5jdGlvbiBoKGUpe3ZhciB0PTY1NTM2LG49ci5nZXRUeXBlT2YoZSksaT0hMDtpZihcInVpbnQ4YXJyYXlcIj09PW4/aT1jLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6XCJub2RlYnVmZmVyXCI9PT1uJiYoaT1jLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLGkpZm9yKDsxPHQ7KXRyeXtyZXR1cm4gYy5zdHJpbmdpZnlCeUNodW5rKGUsbix0KX1jYXRjaChlKXt0PU1hdGguZmxvb3IodC8yKX1yZXR1cm4gYy5zdHJpbmdpZnlCeUNoYXIoZSl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtyZXR1cm4gdH1yLmFwcGx5RnJvbUNoYXJDb2RlPWg7dmFyIGQ9e307ZC5zdHJpbmc9e3N0cmluZzphLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBkLnN0cmluZy51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbChlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxzLmFsbG9jQnVmZmVyKGUubGVuZ3RoKSl9fSxkLmFycmF5PXtzdHJpbmc6aCxhcnJheTphLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBzLm5ld0J1ZmZlckZyb20oZSl9fSxkLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGgobmV3IFVpbnQ4QXJyYXkoZSkpfSxhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihuZXcgVWludDhBcnJheShlKSxuZXcgQXJyYXkoZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOmEsdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShlKSl9fSxkLnVpbnQ4YXJyYXk9e3N0cmluZzpoLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBmKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1ZmZlcn0sdWludDhhcnJheTphLG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHMubmV3QnVmZmVyRnJvbShlKX19LGQubm9kZWJ1ZmZlcj17c3RyaW5nOmgsYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSxuZXcgQXJyYXkoZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGQubm9kZWJ1ZmZlci51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6YX0sci50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8XCJcIiwhZSlyZXR1cm4gdDtyLmNoZWNrU3VwcG9ydChlKTt2YXIgbj1yLmdldFR5cGVPZih0KTtyZXR1cm4gZFtuXVtlXSh0KX0sci5yZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiL1wiKSxyPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcIi5cIj09PWl8fFwiXCI9PT1pJiYwIT09biYmbiE9PXQubGVuZ3RoLTF8fChcIi4uXCI9PT1pP3IucG9wKCk6ci5wdXNoKGkpKX1yZXR1cm4gci5qb2luKFwiL1wiKX0sci5nZXRUeXBlT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJzdHJpbmdcIjpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk/XCJhcnJheVwiOm4ubm9kZWJ1ZmZlciYmcy5pc0J1ZmZlcihlKT9cIm5vZGVidWZmZXJcIjpuLnVpbnQ4YXJyYXkmJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P1widWludDhhcnJheVwiOm4uYXJyYXlidWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9cImFycmF5YnVmZmVyXCI6dm9pZCAwfSxyLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlKXtpZighbltlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybVwiKX0sci5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LHIuTUFYX1ZBTFVFXzMyQklUUz0tMSxyLnByZXR0eT1mdW5jdGlvbihlKXt2YXIgdCxyLG49XCJcIjtmb3Iocj0wO3I8KGV8fFwiXCIpLmxlbmd0aDtyKyspbis9XCJcXFxceFwiKygodD1lLmNoYXJDb2RlQXQocikpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG59LHIuZGVsYXk9ZnVuY3Rpb24oZSx0LHIpe3UoKGZ1bmN0aW9uKCl7ZS5hcHBseShyfHxudWxsLHR8fFtdKX0pKX0sci5pbmhlcml0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHJ9LHIuZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPXt9O2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylmb3IodCBpbiBhcmd1bWVudHNbZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50c1tlXSx0KSYmdm9pZCAwPT09clt0XSYmKHJbdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gcn0sci5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihlLHQscyxhLGMpe3JldHVybiBvLlByb21pc2UucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gbi5ibG9iJiYoZSBpbnN0YW5jZW9mIEJsb2J8fC0xIT09W1wiW29iamVjdCBGaWxlXVwiLFwiW29iamVjdCBCbG9iXVwiXS5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSkpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcj9uZXcgby5Qcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBGaWxlUmVhZGVyO24ub25sb2FkPWZ1bmN0aW9uKGUpe3QoZS50YXJnZXQucmVzdWx0KX0sbi5vbmVycm9yPWZ1bmN0aW9uKGUpe3IoZS50YXJnZXQuZXJyb3IpfSxuLnJlYWRBc0FycmF5QnVmZmVyKGUpfSkpOmV9KSkudGhlbigoZnVuY3Rpb24odCl7dmFyIHU9ci5nZXRUeXBlT2YodCk7cmV0dXJuIHU/KFwiYXJyYXlidWZmZXJcIj09PXU/dD1yLnRyYW5zZm9ybVRvKFwidWludDhhcnJheVwiLHQpOlwic3RyaW5nXCI9PT11JiYoYz90PWkuZGVjb2RlKHQpOnMmJiEwIT09YSYmKHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxuLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgpOm5ldyBBcnJheShlLmxlbmd0aCkpfSh0KSkpLHQpOm8uUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQ2FuJ3QgcmVhZCB0aGUgZGF0YSBvZiAnXCIrZStcIicuIElzIGl0IGluIGEgc3VwcG9ydGVkIEphdmFTY3JpcHQgdHlwZSAoU3RyaW5nLCBCbG9iLCBBcnJheUJ1ZmZlciwgZXRjKSA/XCIpKX0pKX19LHtcIi4vYmFzZTY0XCI6MSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdXBwb3J0XCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLGk9ZShcIi4vdXRpbHNcIikscz1lKFwiLi9zaWduYXR1cmVcIiksbz1lKFwiLi96aXBFbnRyeVwiKSxhPWUoXCIuL3N1cHBvcnRcIik7ZnVuY3Rpb24gbChlKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9ZX1sLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShlKSl7dGhpcy5yZWFkZXIuaW5kZXgtPTQ7dmFyIHQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTt0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogdW5leHBlY3RlZCBzaWduYXR1cmUgKFwiK2kucHJldHR5KHQpK1wiLCBleHBlY3RlZCBcIitpLnByZXR0eShlKStcIilcIil9fSxpc1NpZ25hdHVyZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMucmVhZGVyLmluZGV4O3RoaXMucmVhZGVyLnNldEluZGV4KGUpO3ZhciBuPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT10O3JldHVybiB0aGlzLnJlYWRlci5zZXRJbmRleChyKSxufSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpO3ZhciBlPXRoaXMucmVhZGVyLnJlYWREYXRhKHRoaXMuemlwQ29tbWVudExlbmd0aCksdD1hLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLHI9aS50cmFuc2Zvcm1Ubyh0LGUpO3RoaXMuemlwQ29tbWVudD10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5yZWFkZXIuc2tpcCg0KSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGUsdCxyLG49dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxuOyllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHI9dGhpcy5yZWFkZXIucmVhZERhdGEodCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2VdPXtpZDplLGxlbmd0aDp0LHZhbHVlOnJ9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSwxPHRoaXMuZGlza3NDb3VudCl0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZFwiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihlPTA7ZTx0aGlzLmZpbGVzLmxlbmd0aDtlKyspdD10aGlzLmZpbGVzW2VdLHRoaXMucmVhZGVyLnNldEluZGV4KHQubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5MT0NBTF9GSUxFX0hFQURFUiksdC5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSx0LmhhbmRsZVVURjgoKSx0LnByb2Nlc3NBdHRyaWJ1dGVzKCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9GSUxFX0hFQURFUik7KShlPW5ldyBvKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goZSk7aWYodGhpcy5jZW50cmFsRGlyUmVjb3JkcyE9PXRoaXMuZmlsZXMubGVuZ3RoJiYwIT09dGhpcy5jZW50cmFsRGlyUmVjb3JkcyYmMD09PXRoaXMuZmlsZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCBcIit0aGlzLmNlbnRyYWxEaXJSZWNvcmRzK1wiIHJlY29yZHMgaW4gY2VudHJhbCBkaXIsIGdvdCBcIit0aGlzLmZpbGVzLmxlbmd0aCl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoZTwwKXRocm93IHRoaXMuaXNTaWduYXR1cmUoMCxzLkxPQ0FMX0ZJTEVfSEVBREVSKT9uZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeVwiKTpuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/IElmIGl0IGlzLCBzZWUgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWxcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZSk7dmFyIHQ9ZTtpZih0aGlzLmNoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1pLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PWkuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwoZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKTwwKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXCIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KGUpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLCF0aGlzLmlzU2lnbmF0dXJlKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcixzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCkmJih0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcjwwKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9dmFyIHI9dGhpcy5jZW50cmFsRGlyT2Zmc2V0K3RoaXMuY2VudHJhbERpclNpemU7dGhpcy56aXA2NCYmKHIrPTIwLHIrPTEyK3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplKTt2YXIgbj10LXI7aWYoMDxuKXRoaXMuaXNTaWduYXR1cmUodCxzLkNFTlRSQUxfRklMRV9IRUFERVIpfHwodGhpcy5yZWFkZXIuemVybz1uKTtlbHNlIGlmKG48MCl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBtaXNzaW5nIFwiK01hdGguYWJzKG4pK1wiIGJ5dGVzLlwiKX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihlKXt0aGlzLnJlYWRlcj1uKGUpfSxsb2FkOmZ1bmN0aW9uKGUpe3RoaXMucHJlcGFyZVJlYWRlcihlKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sdC5leHBvcnRzPWx9LHtcIi4vcmVhZGVyL3JlYWRlckZvclwiOjIyLFwiLi9zaWduYXR1cmVcIjoyMyxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyLFwiLi96aXBFbnRyeVwiOjM0fV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLGk9ZShcIi4vdXRpbHNcIikscz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLG89ZShcIi4vY3JjMzJcIiksYT1lKFwiLi91dGY4XCIpLGw9ZShcIi4vY29tcHJlc3Npb25zXCIpLGM9ZShcIi4vc3VwcG9ydFwiKTtmdW5jdGlvbiB1KGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5sb2FkT3B0aW9ucz10fXUucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQscjtpZihlLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9ZS5yZWFkSW50KDIpLHI9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9ZS5yZWFkRGF0YSh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxlLnNraXAociksLTE9PT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpXCIpO2lmKG51bGw9PT0odD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gbClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCx0KSYmbFt0XS5tYWdpYz09PWUpcmV0dXJuIGxbdF07cmV0dXJuIG51bGx9KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gXCIraS5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrXCIgdW5rbm93biAoaW5uZXIgZmlsZSA6IFwiK2kudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix0aGlzLmZpbGVOYW1lKStcIilcIik7dGhpcy5kZWNvbXByZXNzZWQ9bmV3IHModGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5jcmMzMix0LGUucmVhZERhdGEodGhpcy5jb21wcmVzc2VkU2l6ZSkpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oZSl7dGhpcy52ZXJzaW9uTWFkZUJ5PWUucmVhZEludCgyKSxlLnNraXAoMiksdGhpcy5iaXRGbGFnPWUucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPWUucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9ZS5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9ZS5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoNCk7dmFyIHQ9ZS5yZWFkSW50KDIpO2lmKHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PWUucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9ZS5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1lLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIik7ZS5za2lwKHQpLHRoaXMucmVhZEV4dHJhRmllbGRzKGUpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoZSksdGhpcy5maWxlQ29tbWVudD1lLnJlYWREYXRhKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpfSxwcm9jZXNzQXR0cmlidXRlczpmdW5jdGlvbigpe3RoaXMudW5peFBlcm1pc3Npb25zPW51bGwsdGhpcy5kb3NQZXJtaXNzaW9ucz1udWxsO3ZhciBlPXRoaXMudmVyc2lvbk1hZGVCeT4+ODt0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLDA9PWUmJih0aGlzLmRvc1Blcm1pc3Npb25zPTYzJnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMz09ZSYmKHRoaXMudW5peFBlcm1pc3Npb25zPXRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmNjU1MzUpLHRoaXMuZGlyfHxcIi9cIiE9PXRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBlPW4odGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09aS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPWUucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PWkuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09aS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09aS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9ZS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4dHJhRmllbGRzPXt9KTtlLmluZGV4KzQ8aTspdD1lLnJlYWRJbnQoMikscj1lLnJlYWRJbnQoMiksbj1lLnJlYWREYXRhKHIpLHRoaXMuZXh0cmFGaWVsZHNbdF09e2lkOnQsbGVuZ3RoOnIsdmFsdWU6bn07ZS5zZXRJbmRleChpKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBlPWMudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZVN0cj1hLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudFN0cj1hLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgdD10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtpZihudWxsIT09dCl0aGlzLmZpbGVOYW1lU3RyPXQ7ZWxzZXt2YXIgcj1pLnRyYW5zZm9ybVRvKGUsdGhpcy5maWxlTmFtZSk7dGhpcy5maWxlTmFtZVN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfXZhciBuPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO2lmKG51bGwhPT1uKXRoaXMuZmlsZUNvbW1lbnRTdHI9bjtlbHNle3ZhciBzPWkudHJhbnNmb3JtVG8oZSx0aGlzLmZpbGVDb21tZW50KTt0aGlzLmZpbGVDb21tZW50U3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUocyl9fX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKGUpe3ZhciB0PW4oZS52YWx1ZSk7cmV0dXJuIDEhPT10LnJlYWRJbnQoMSl8fG8odGhpcy5maWxlTmFtZSkhPT10LnJlYWRJbnQoNCk/bnVsbDphLnV0ZjhkZWNvZGUodC5yZWFkRGF0YShlLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihlKXt2YXIgdD1uKGUudmFsdWUpO3JldHVybiAxIT09dC5yZWFkSW50KDEpfHxvKHRoaXMuZmlsZUNvbW1lbnQpIT09dC5yZWFkSW50KDQpP251bGw6YS51dGY4ZGVjb2RlKHQucmVhZERhdGEoZS5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sdC5leHBvcnRzPXV9LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL2NvbXByZXNzaW9uc1wiOjMsXCIuL2NyYzMyXCI6NCxcIi4vcmVhZGVyL3JlYWRlckZvclwiOjIyLFwiLi9zdXBwb3J0XCI6MzAsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMn1dLDM1OltmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlLHQscil7dGhpcy5uYW1lPWUsdGhpcy5kaXI9ci5kaXIsdGhpcy5kYXRlPXIuZGF0ZSx0aGlzLmNvbW1lbnQ9ci5jb21tZW50LHRoaXMudW5peFBlcm1pc3Npb25zPXIudW5peFBlcm1pc3Npb25zLHRoaXMuZG9zUGVybWlzc2lvbnM9ci5kb3NQZXJtaXNzaW9ucyx0aGlzLl9kYXRhPXQsdGhpcy5fZGF0YUJpbmFyeT1yLmJpbmFyeSx0aGlzLm9wdGlvbnM9e2NvbXByZXNzaW9uOnIuY29tcHJlc3Npb24sY29tcHJlc3Npb25PcHRpb25zOnIuY29tcHJlc3Npb25PcHRpb25zfX12YXIgaT1lKFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLHM9ZShcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIiksbz1lKFwiLi91dGY4XCIpLGE9ZShcIi4vY29tcHJlc3NlZE9iamVjdFwiKSxsPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO24ucHJvdG90eXBlPXtpbnRlcm5hbFN0cmVhbTpmdW5jdGlvbihlKXt2YXIgdD1udWxsLHI9XCJzdHJpbmdcIjt0cnl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLlwiKTt2YXIgbj1cInN0cmluZ1wiPT09KHI9ZS50b0xvd2VyQ2FzZSgpKXx8XCJ0ZXh0XCI9PT1yO1wiYmluYXJ5c3RyaW5nXCIhPT1yJiZcInRleHRcIiE9PXJ8fChyPVwic3RyaW5nXCIpLHQ9dGhpcy5fZGVjb21wcmVzc1dvcmtlcigpO3ZhciBzPSF0aGlzLl9kYXRhQmluYXJ5O3MmJiFuJiYodD10LnBpcGUobmV3IG8uVXRmOEVuY29kZVdvcmtlcikpLCFzJiZuJiYodD10LnBpcGUobmV3IG8uVXRmOERlY29kZVdvcmtlcikpfWNhdGNoKGUpeyh0PW5ldyBsKFwiZXJyb3JcIikpLmVycm9yKGUpfXJldHVybiBuZXcgaSh0LHIsXCJcIil9LGFzeW5jOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oZSkuYWNjdW11bGF0ZSh0KX0sbm9kZVN0cmVhbTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmludGVybmFsU3RyZWFtKGV8fFwibm9kZWJ1ZmZlclwiKS50b05vZGVqc1N0cmVhbSh0KX0sX2NvbXByZXNzV29ya2VyOmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIGEmJnRoaXMuX2RhdGEuY29tcHJlc3Npb24ubWFnaWM9PT1lLm1hZ2ljKXJldHVybiB0aGlzLl9kYXRhLmdldENvbXByZXNzZWRXb3JrZXIoKTt2YXIgcj10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7cmV0dXJuIHRoaXMuX2RhdGFCaW5hcnl8fChyPXIucGlwZShuZXcgby5VdGY4RW5jb2RlV29ya2VyKSksYS5jcmVhdGVXb3JrZXJGcm9tKHIsZSx0KX0sX2RlY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YSBpbnN0YW5jZW9mIGE/dGhpcy5fZGF0YS5nZXRDb250ZW50V29ya2VyKCk6dGhpcy5fZGF0YSBpbnN0YW5jZW9mIGw/dGhpcy5fZGF0YTpuZXcgcyh0aGlzLl9kYXRhKX19O2Zvcih2YXIgYz1bXCJhc1RleHRcIixcImFzQmluYXJ5XCIsXCJhc05vZGVCdWZmZXJcIixcImFzVWludDhBcnJheVwiLFwiYXNBcnJheUJ1ZmZlclwiXSx1PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGg9MDtoPGMubGVuZ3RoO2grKyluLnByb3RvdHlwZVtjW2hdXT11O3QuZXhwb3J0cz1ufSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiOjI3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCI6MjksXCIuL3V0ZjhcIjozMX1dLDM2OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpe3ZhciByLG4saT1lLk11dGF0aW9uT2JzZXJ2ZXJ8fGUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtpZihpKXt2YXIgcz0wLG89bmV3IGkodSksYT1lLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO28ub2JzZXJ2ZShhLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2EuZGF0YT1zPSsrcyUyfX1lbHNlIGlmKGUuc2V0SW1tZWRpYXRlfHx2b2lkIDA9PT1lLk1lc3NhZ2VDaGFubmVsKXI9XCJkb2N1bWVudFwiaW4gZSYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT9mdW5jdGlvbigpe3ZhciB0PWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTt0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3UoKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHQpfTpmdW5jdGlvbigpe3NldFRpbWVvdXQodSwwKX07ZWxzZXt2YXIgbD1uZXcgZS5NZXNzYWdlQ2hhbm5lbDtsLnBvcnQxLm9ubWVzc2FnZT11LHI9ZnVuY3Rpb24oKXtsLnBvcnQyLnBvc3RNZXNzYWdlKDApfX12YXIgYz1bXTtmdW5jdGlvbiB1KCl7dmFyIGUsdDtuPSEwO2Zvcih2YXIgcj1jLmxlbmd0aDtyOyl7Zm9yKHQ9YyxjPVtdLGU9LTE7KytlPHI7KXRbZV0oKTtyPWMubGVuZ3RofW49ITF9dC5leHBvcnRzPWZ1bmN0aW9uKGUpezEhPT1jLnB1c2goZSl8fG58fHIoKX19KS5jYWxsKHRoaXMsdm9pZCAwIT09aT9pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sMzc6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiaW1tZWRpYXRlXCIpO2Z1bmN0aW9uIGkoKXt9dmFyIHM9e30sbz1bXCJSRUpFQ1RFRFwiXSxhPVtcIkZVTEZJTExFRFwiXSxsPVtcIlBFTkRJTkdcIl07ZnVuY3Rpb24gYyhlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dGhpcy5zdGF0ZT1sLHRoaXMucXVldWU9W10sdGhpcy5vdXRjb21lPXZvaWQgMCxlIT09aSYmZCh0aGlzLGUpfWZ1bmN0aW9uIHUoZSx0LHIpe3RoaXMucHJvbWlzZT1lLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0aGlzLm9uRnVsZmlsbGVkPXQsdGhpcy5jYWxsRnVsZmlsbGVkPXRoaXMub3RoZXJDYWxsRnVsZmlsbGVkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYodGhpcy5vblJlamVjdGVkPXIsdGhpcy5jYWxsUmVqZWN0ZWQ9dGhpcy5vdGhlckNhbGxSZWplY3RlZCl9ZnVuY3Rpb24gaChlLHQscil7bigoZnVuY3Rpb24oKXt2YXIgbjt0cnl7bj10KHIpfWNhdGNoKG4pe3JldHVybiBzLnJlamVjdChlLG4pfW49PT1lP3MucmVqZWN0KGUsbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOnMucmVzb2x2ZShlLG4pfSkpfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZSYmZS50aGVuO2lmKGUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIGZ1bmN0aW9uKCl7dC5hcHBseShlLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj0hMTtmdW5jdGlvbiBuKHQpe3J8fChyPSEwLHMucmVqZWN0KGUsdCkpfWZ1bmN0aW9uIGkodCl7cnx8KHI9ITAscy5yZXNvbHZlKGUsdCkpfXZhciBvPXAoKGZ1bmN0aW9uKCl7dChpLG4pfSkpO1wiZXJyb3JcIj09PW8uc3RhdHVzJiZuKG8udmFsdWUpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj17fTt0cnl7ci52YWx1ZT1lKHQpLHIuc3RhdHVzPVwic3VjY2Vzc1wifWNhdGNoKGUpe3Iuc3RhdHVzPVwiZXJyb3JcIixyLnZhbHVlPWV9cmV0dXJuIHJ9KHQuZXhwb3J0cz1jKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbihlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbigoZnVuY3Rpb24ocil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9KSwoZnVuY3Rpb24ocil7cmV0dXJuIHQucmVzb2x2ZShlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX0pKX0sYy5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbihudWxsLGUpfSxjLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmdGhpcy5zdGF0ZT09PWF8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQmJnRoaXMuc3RhdGU9PT1vKXJldHVybiB0aGlzO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGkpO3JldHVybiB0aGlzLnN0YXRlIT09bD9oKHIsdGhpcy5zdGF0ZT09PWE/ZTp0LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyB1KHIsZSx0KSkscn0sdS5wcm90b3R5cGUuY2FsbEZ1bGZpbGxlZD1mdW5jdGlvbihlKXtzLnJlc29sdmUodGhpcy5wcm9taXNlLGUpfSx1LnByb3RvdHlwZS5vdGhlckNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oZSl7aCh0aGlzLnByb21pc2UsdGhpcy5vbkZ1bGZpbGxlZCxlKX0sdS5wcm90b3R5cGUuY2FsbFJlamVjdGVkPWZ1bmN0aW9uKGUpe3MucmVqZWN0KHRoaXMucHJvbWlzZSxlKX0sdS5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24oZSl7aCh0aGlzLnByb21pc2UsdGhpcy5vblJlamVjdGVkLGUpfSxzLnJlc29sdmU9ZnVuY3Rpb24oZSx0KXt2YXIgcj1wKGYsdCk7aWYoXCJlcnJvclwiPT09ci5zdGF0dXMpcmV0dXJuIHMucmVqZWN0KGUsci52YWx1ZSk7dmFyIG49ci52YWx1ZTtpZihuKWQoZSxuKTtlbHNle2Uuc3RhdGU9YSxlLm91dGNvbWU9dDtmb3IodmFyIGk9LTEsbz1lLnF1ZXVlLmxlbmd0aDsrK2k8bzspZS5xdWV1ZVtpXS5jYWxsRnVsZmlsbGVkKHQpfXJldHVybiBlfSxzLnJlamVjdD1mdW5jdGlvbihlLHQpe2Uuc3RhdGU9byxlLm91dGNvbWU9dDtmb3IodmFyIHI9LTEsbj1lLnF1ZXVlLmxlbmd0aDsrK3I8bjspZS5xdWV1ZVtyXS5jYWxsUmVqZWN0ZWQodCk7cmV0dXJuIGV9LGMucmVzb2x2ZT1mdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpzLnJlc29sdmUobmV3IHRoaXMoaSksZSl9LGMucmVqZWN0PWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyB0aGlzKGkpO3JldHVybiBzLnJlamVjdCh0LGUpfSxjLmFsbD1mdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKFwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcihcIm11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciByPWUubGVuZ3RoLG49ITE7aWYoIXIpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBvPW5ldyBBcnJheShyKSxhPTAsbD0tMSxjPW5ldyB0aGlzKGkpOysrbDxyOyl1KGVbbF0sbCk7cmV0dXJuIGM7ZnVuY3Rpb24gdShlLGkpe3QucmVzb2x2ZShlKS50aGVuKChmdW5jdGlvbihlKXtvW2ldPWUsKythIT09cnx8bnx8KG49ITAscy5yZXNvbHZlKGMsbykpfSksKGZ1bmN0aW9uKGUpe258fChuPSEwLHMucmVqZWN0KGMsZSkpfSkpfX0sYy5yYWNlPWZ1bmN0aW9uKGUpe2lmKFwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcihcIm11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciB0PWUubGVuZ3RoLHI9ITE7aWYoIXQpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7Zm9yKHZhciBuLG89LTEsYT1uZXcgdGhpcyhpKTsrK288dDspbj1lW29dLHRoaXMucmVzb2x2ZShuKS50aGVuKChmdW5jdGlvbihlKXtyfHwocj0hMCxzLnJlc29sdmUoYSxlKSl9KSwoZnVuY3Rpb24oZSl7cnx8KHI9ITAscy5yZWplY3QoYSxlKSl9KSk7cmV0dXJuIGF9fSx7aW1tZWRpYXRlOjM2fV0sMzg6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj17fTsoMCxlKFwiLi9saWIvdXRpbHMvY29tbW9uXCIpLmFzc2lnbikobixlKFwiLi9saWIvZGVmbGF0ZVwiKSxlKFwiLi9saWIvaW5mbGF0ZVwiKSxlKFwiLi9saWIvemxpYi9jb25zdGFudHNcIikpLHQuZXhwb3J0cz1ufSx7XCIuL2xpYi9kZWZsYXRlXCI6MzksXCIuL2xpYi9pbmZsYXRlXCI6NDAsXCIuL2xpYi91dGlscy9jb21tb25cIjo0MSxcIi4vbGliL3psaWIvY29uc3RhbnRzXCI6NDR9XSwzOTpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL3psaWIvZGVmbGF0ZVwiKSxpPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxzPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksbz1lKFwiLi96bGliL21lc3NhZ2VzXCIpLGE9ZShcIi4vemxpYi96c3RyZWFtXCIpLGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBjKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlKTt0aGlzLm9wdGlvbnM9aS5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzpcIlwifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiYwPHQud2luZG93Qml0cz90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJjA8dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGEsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPW4uZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKDAhPT1yKXRocm93IG5ldyBFcnJvcihvW3JdKTtpZih0LmhlYWRlciYmbi5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgdTtpZih1PVwic3RyaW5nXCI9PXR5cGVvZiB0LmRpY3Rpb25hcnk/cy5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09bC5jYWxsKHQuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTp0LmRpY3Rpb25hcnksMCE9PShyPW4uZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLHUpKSl0aHJvdyBuZXcgRXJyb3Iob1tyXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIHUoZSx0KXt2YXIgcj1uZXcgYyh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fG9bci5lcnJdO3JldHVybiByLnJlc3VsdH1jLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbyxhPXRoaXMuc3RybSxjPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtvPXQ9PT1+fnQ/dDohMD09PXQ/NDowLFwic3RyaW5nXCI9PXR5cGVvZiBlP2EuaW5wdXQ9cy5zdHJpbmcyYnVmKGUpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PWwuY2FsbChlKT9hLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOmEuaW5wdXQ9ZSxhLm5leHRfaW49MCxhLmF2YWlsX2luPWEuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1hLmF2YWlsX291dCYmKGEub3V0cHV0PW5ldyBpLkJ1ZjgoYyksYS5uZXh0X291dD0wLGEuYXZhaWxfb3V0PWMpLDEhPT0ocj1uLmRlZmxhdGUoYSxvKSkmJjAhPT1yKXJldHVybiB0aGlzLm9uRW5kKHIpLCEodGhpcy5lbmRlZD0hMCk7MCE9PWEuYXZhaWxfb3V0JiYoMCE9PWEuYXZhaWxfaW58fDQhPT1vJiYyIT09byl8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvP3RoaXMub25EYXRhKHMuYnVmMmJpbnN0cmluZyhpLnNocmlua0J1ZihhLm91dHB1dCxhLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKGkuc2hyaW5rQnVmKGEub3V0cHV0LGEubmV4dF9vdXQpKSl9d2hpbGUoKDA8YS5hdmFpbF9pbnx8MD09PWEuYXZhaWxfb3V0KSYmMSE9PXIpO3JldHVybiA0PT09bz8ocj1uLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAsMD09PXIpOjIhPT1vfHwodGhpcy5vbkVuZCgwKSwhKGEuYXZhaWxfb3V0PTApKX0sYy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LGMucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpezA9PT1lJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PWkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5EZWZsYXRlPWMsci5kZWZsYXRlPXUsci5kZWZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCx1KGUsdCl9LHIuZ3ppcD1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nemlwPSEwLHUoZSx0KX19LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9kZWZsYXRlXCI6NDYsXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MDpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuL3psaWIvaW5mbGF0ZVwiKSxpPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxzPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksbz1lKFwiLi96bGliL2NvbnN0YW50c1wiKSxhPWUoXCIuL3psaWIvbWVzc2FnZXNcIiksbD1lKFwiLi96bGliL3pzdHJlYW1cIiksYz1lKFwiLi96bGliL2d6aGVhZGVyXCIpLHU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBoKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGgpKXJldHVybiBuZXcgaChlKTt0aGlzLm9wdGlvbnM9aS5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86XCJcIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cywwPT09dC53aW5kb3dCaXRzJiYodC53aW5kb3dCaXRzPS0xNSkpLCEoMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYpfHxlJiZlLndpbmRvd0JpdHN8fCh0LndpbmRvd0JpdHMrPTMyKSwxNTx0LndpbmRvd0JpdHMmJnQud2luZG93Qml0czw0OCYmMD09KDE1JnQud2luZG93Qml0cykmJih0LndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGwsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPW4uaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpO2lmKHIhPT1vLlpfT0spdGhyb3cgbmV3IEVycm9yKGFbcl0pO3RoaXMuaGVhZGVyPW5ldyBjLG4uaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIGYoZSx0KXt2YXIgcj1uZXcgaCh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fGFbci5lcnJdO3JldHVybiByLnJlc3VsdH1oLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYSxsLGMsaCxmLGQ9dGhpcy5zdHJtLHA9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxtPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGI9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTthPXQ9PT1+fnQ/dDohMD09PXQ/by5aX0ZJTklTSDpvLlpfTk9fRkxVU0gsXCJzdHJpbmdcIj09dHlwZW9mIGU/ZC5pbnB1dD1zLmJpbnN0cmluZzJidWYoZSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09dS5jYWxsKGUpP2QuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6ZC5pbnB1dD1lLGQubmV4dF9pbj0wLGQuYXZhaWxfaW49ZC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWQuYXZhaWxfb3V0JiYoZC5vdXRwdXQ9bmV3IGkuQnVmOChwKSxkLm5leHRfb3V0PTAsZC5hdmFpbF9vdXQ9cCksKHI9bi5pbmZsYXRlKGQsby5aX05PX0ZMVVNIKSk9PT1vLlpfTkVFRF9ESUNUJiZtJiYoZj1cInN0cmluZ1wiPT10eXBlb2YgbT9zLnN0cmluZzJidWYobSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09dS5jYWxsKG0pP25ldyBVaW50OEFycmF5KG0pOm0scj1uLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxmKSkscj09PW8uWl9CVUZfRVJST1ImJiEwPT09YiYmKHI9by5aX09LLGI9ITEpLHIhPT1vLlpfU1RSRUFNX0VORCYmciE9PW8uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChyKSwhKHRoaXMuZW5kZWQ9ITApO2QubmV4dF9vdXQmJigwIT09ZC5hdmFpbF9vdXQmJnIhPT1vLlpfU1RSRUFNX0VORCYmKDAhPT1kLmF2YWlsX2lufHxhIT09by5aX0ZJTklTSCYmYSE9PW8uWl9TWU5DX0ZMVVNIKXx8KFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/KGw9cy51dGY4Ym9yZGVyKGQub3V0cHV0LGQubmV4dF9vdXQpLGM9ZC5uZXh0X291dC1sLGg9cy5idWYyc3RyaW5nKGQub3V0cHV0LGwpLGQubmV4dF9vdXQ9YyxkLmF2YWlsX291dD1wLWMsYyYmaS5hcnJheVNldChkLm91dHB1dCxkLm91dHB1dCxsLGMsMCksdGhpcy5vbkRhdGEoaCkpOnRoaXMub25EYXRhKGkuc2hyaW5rQnVmKGQub3V0cHV0LGQubmV4dF9vdXQpKSkpLDA9PT1kLmF2YWlsX2luJiYwPT09ZC5hdmFpbF9vdXQmJihiPSEwKX13aGlsZSgoMDxkLmF2YWlsX2lufHwwPT09ZC5hdmFpbF9vdXQpJiZyIT09by5aX1NUUkVBTV9FTkQpO3JldHVybiByPT09by5aX1NUUkVBTV9FTkQmJihhPW8uWl9GSU5JU0gpLGE9PT1vLlpfRklOSVNIPyhyPW4uaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09by5aX09LKTphIT09by5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKG8uWl9PSyksIShkLmF2YWlsX291dD0wKSl9LGgucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxoLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09by5aX09LJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PWkuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5JbmZsYXRlPWgsci5pbmZsYXRlPWYsci5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxmKGUsdCl9LHIudW5nemlwPWZ9LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9jb25zdGFudHNcIjo0NCxcIi4vemxpYi9nemhlYWRlclwiOjQ3LFwiLi96bGliL2luZmxhdGVcIjo0OSxcIi4vemxpYi9tZXNzYWdlc1wiOjUxLFwiLi96bGliL3pzdHJlYW1cIjo1M31dLDQxOltmdW5jdGlvbihlLHQscil7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludDMyQXJyYXk7ci5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciByPXQuc2hpZnQoKTtpZihyKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKHIrXCJtdXN0IGJlIG5vbi1vYmplY3RcIik7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09cltuXSl9fXJldHVybiBlfSxyLnNocmlua0J1Zj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQ/ZTplLnN1YmFycmF5P2Uuc3ViYXJyYXkoMCx0KTooZS5sZW5ndGg9dCxlKX07dmFyIGk9e2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KHIscituKSxpKTtlbHNlIGZvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLG87Zm9yKHQ9bj0wLHI9ZS5sZW5ndGg7dDxyO3QrKyluKz1lW3RdLmxlbmd0aDtmb3Iobz1uZXcgVWludDhBcnJheShuKSx0PWk9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspcz1lW3RdLG8uc2V0KHMsaSksaSs9cy5sZW5ndGg7cmV0dXJuIG99fSxzPXthcnJheVNldDpmdW5jdGlvbihlLHQscixuLGkpe2Zvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtyLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHIuQnVmOD1VaW50OEFycmF5LHIuQnVmMTY9VWludDE2QXJyYXksci5CdWYzMj1JbnQzMkFycmF5LHIuYXNzaWduKHIsaSkpOihyLkJ1Zjg9QXJyYXksci5CdWYxNj1BcnJheSxyLkJ1ZjMyPUFycmF5LHIuYXNzaWduKHIscykpfSxyLnNldFR5cGVkKG4pfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi9jb21tb25cIiksaT0hMCxzPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChlKXtpPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe3M9ITF9Zm9yKHZhciBvPW5ldyBuLkJ1ZjgoMjU2KSxhPTA7YTwyNTY7YSsrKW9bYV09MjUyPD1hPzY6MjQ4PD1hPzU6MjQwPD1hPzQ6MjI0PD1hPzM6MTkyPD1hPzI6MTtmdW5jdGlvbiBsKGUsdCl7aWYodDw2NTUzNyYmKGUuc3ViYXJyYXkmJnN8fCFlLnN1YmFycmF5JiZpKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG4uc2hyaW5rQnVmKGUsdCkpO2Zvcih2YXIgcj1cIlwiLG89MDtvPHQ7bysrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtvXSk7cmV0dXJuIHJ9b1syNTRdPW9bMjU0XT0xLHIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxyLGkscyxvLGE9ZS5sZW5ndGgsbD0wO2ZvcihzPTA7czxhO3MrKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChzKSkpJiZzKzE8YSYmNTYzMjA9PSg2NDUxMiYoaT1lLmNoYXJDb2RlQXQocysxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhpLTU2MzIwKSxzKyspLGwrPXI8MTI4PzE6cjwyMDQ4PzI6cjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IG4uQnVmOChsKSxzPW89MDtvPGw7cysrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KHMpKSkmJnMrMTxhJiY1NjMyMD09KDY0NTEyJihpPWUuY2hhckNvZGVBdChzKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKGktNTYzMjApLHMrKykscjwxMjg/dFtvKytdPXI6KHI8MjA0OD90W28rK109MTkyfHI+Pj42OihyPDY1NTM2P3RbbysrXT0yMjR8cj4+PjEyOih0W28rK109MjQwfHI+Pj4xOCx0W28rK109MTI4fHI+Pj4xMiY2MyksdFtvKytdPTEyOHxyPj4+NiY2MyksdFtvKytdPTEyOHw2MyZyKTtyZXR1cm4gdH0sci5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsZS5sZW5ndGgpfSxyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBuLkJ1ZjgoZS5sZW5ndGgpLHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspdFtyXT1lLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9LHIuYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxzLGE9dHx8ZS5sZW5ndGgsYz1uZXcgQXJyYXkoMiphKTtmb3Iocj1uPTA7cjxhOylpZigoaT1lW3IrK10pPDEyOCljW24rK109aTtlbHNlIGlmKDQ8KHM9b1tpXSkpY1tuKytdPTY1NTMzLHIrPXMtMTtlbHNle2ZvcihpJj0yPT09cz8zMTozPT09cz8xNTo3OzE8cyYmcjxhOylpPWk8PDZ8NjMmZVtyKytdLHMtLTsxPHM/Y1tuKytdPTY1NTMzOmk8NjU1MzY/Y1tuKytdPWk6KGktPTY1NTM2LGNbbisrXT01NTI5NnxpPj4xMCYxMDIzLGNbbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBsKGMsbil9LHIudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwfHwwPT09cj90OnIrb1tlW3JdXT50P3I6dH19LHtcIi4vY29tbW9uXCI6NDF9XSw0MzpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGk9NjU1MzUmZXwwLHM9ZT4+PjE2JjY1NTM1fDAsbz0wOzAhPT1yOyl7Zm9yKHItPW89MmUzPHI/MmUzOnI7cz1zKyhpPWkrdFtuKytdfDApfDAsLS1vOyk7aSU9NjU1MjEscyU9NjU1MjF9cmV0dXJuIGl8czw8MTZ8MH19LHt9XSw0NDpbZnVuY3Rpb24oZSx0LHIpe3QuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDQ1OltmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1bXSxyPTA7cjwyNTY7cisrKXtlPXI7Zm9yKHZhciBuPTA7bjw4O24rKyllPTEmZT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbcl09ZX1yZXR1cm4gdH0oKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIHM9bixvPWkrcjtlXj0tMTtmb3IodmFyIGE9aTthPG87YSsrKWU9ZT4+Pjhec1syNTUmKGVedFthXSldO3JldHVybi0xXmV9fSx7fV0sNDY6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbixpPWUoXCIuLi91dGlscy9jb21tb25cIikscz1lKFwiLi90cmVlc1wiKSxvPWUoXCIuL2FkbGVyMzJcIiksYT1lKFwiLi9jcmMzMlwiKSxsPWUoXCIuL21lc3NhZ2VzXCIpLGM9LTIsdT0yNTgsaD0yNjIsZj0xMTM7ZnVuY3Rpb24gZChlLHQpe3JldHVybiBlLm1zZz1sW3RdLHR9ZnVuY3Rpb24gcChlKXtyZXR1cm4oZTw8MSktKDQ8ZT85OjApfWZ1bmN0aW9uIG0oZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfWZ1bmN0aW9uIGIoZSl7dmFyIHQ9ZS5zdGF0ZSxyPXQucGVuZGluZztyPmUuYXZhaWxfb3V0JiYocj1lLmF2YWlsX291dCksMCE9PXImJihpLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxyLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPXIsdC5wZW5kaW5nX291dCs9cixlLnRvdGFsX291dCs9cixlLmF2YWlsX291dC09cix0LnBlbmRpbmctPXIsMD09PXQucGVuZGluZyYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIGcoZSx0KXtzLl90cl9mbHVzaF9ibG9jayhlLDA8PWUuYmxvY2tfc3RhcnQ/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LGIoZS5zdHJtKX1mdW5jdGlvbiB5KGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiB2KGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fWZ1bmN0aW9uIHcoZSx0KXt2YXIgcixuLGk9ZS5tYXhfY2hhaW5fbGVuZ3RoLHM9ZS5zdHJzdGFydCxvPWUucHJldl9sZW5ndGgsYT1lLm5pY2VfbWF0Y2gsbD1lLnN0cnN0YXJ0PmUud19zaXplLWg/ZS5zdHJzdGFydC0oZS53X3NpemUtaCk6MCxjPWUud2luZG93LGY9ZS53X21hc2ssZD1lLnByZXYscD1lLnN0cnN0YXJ0K3UsbT1jW3Mrby0xXSxiPWNbcytvXTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihpPj49MiksYT5lLmxvb2thaGVhZCYmKGE9ZS5sb29rYWhlYWQpO2Rve2lmKGNbKHI9dCkrb109PT1iJiZjW3Irby0xXT09PW0mJmNbcl09PT1jW3NdJiZjWysrcl09PT1jW3MrMV0pe3MrPTIscisrO2Rve313aGlsZShjWysrc109PT1jWysrcl0mJmNbKytzXT09PWNbKytyXSYmY1srK3NdPT09Y1srK3JdJiZjWysrc109PT1jWysrcl0mJmNbKytzXT09PWNbKytyXSYmY1srK3NdPT09Y1srK3JdJiZjWysrc109PT1jWysrcl0mJmNbKytzXT09PWNbKytyXSYmczxwKTtpZihuPXUtKHAtcykscz1wLXUsbzxuKXtpZihlLm1hdGNoX3N0YXJ0PXQsYTw9KG89bikpYnJlYWs7bT1jW3Mrby0xXSxiPWNbcytvXX19fXdoaWxlKCh0PWRbdCZmXSk+bCYmMCE9LS1pKTtyZXR1cm4gbzw9ZS5sb29rYWhlYWQ/bzplLmxvb2thaGVhZH1mdW5jdGlvbiBfKGUpe3ZhciB0LHIsbixzLGwsYyx1LGYsZCxwLG09ZS53X3NpemU7ZG97aWYocz1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49bSsobS1oKSl7Zm9yKGkuYXJyYXlTZXQoZS53aW5kb3csZS53aW5kb3csbSxtLDApLGUubWF0Y2hfc3RhcnQtPW0sZS5zdHJzdGFydC09bSxlLmJsb2NrX3N0YXJ0LT1tLHQ9cj1lLmhhc2hfc2l6ZTtuPWUuaGVhZFstLXRdLGUuaGVhZFt0XT1tPD1uP24tbTowLC0tcjspO2Zvcih0PXI9bTtuPWUucHJldlstLXRdLGUucHJldlt0XT1tPD1uP24tbTowLC0tcjspO3MrPW19aWYoMD09PWUuc3RybS5hdmFpbF9pbilicmVhaztpZihjPWUuc3RybSx1PWUud2luZG93LGY9ZS5zdHJzdGFydCtlLmxvb2thaGVhZCxwPXZvaWQgMCwoZD1zKTwocD1jLmF2YWlsX2luKSYmKHA9ZCkscj0wPT09cD8wOihjLmF2YWlsX2luLT1wLGkuYXJyYXlTZXQodSxjLmlucHV0LGMubmV4dF9pbixwLGYpLDE9PT1jLnN0YXRlLndyYXA/Yy5hZGxlcj1vKGMuYWRsZXIsdSxwLGYpOjI9PT1jLnN0YXRlLndyYXAmJihjLmFkbGVyPWEoYy5hZGxlcix1LHAsZikpLGMubmV4dF9pbis9cCxjLnRvdGFsX2luKz1wLHApLGUubG9va2FoZWFkKz1yLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj0zKWZvcihsPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tsXSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbbCsxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbbCszLTFdKSZlLmhhc2hfbWFzayxlLnByZXZbbCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1sLGwrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8MykpOyk7fXdoaWxlKGUubG9va2FoZWFkPGgmJjAhPT1lLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIHgoZSx0KXtmb3IodmFyIHIsbjs7KXtpZihlLmxvb2thaGVhZDxoKXtpZihfKGUpLGUubG9va2FoZWFkPGgmJjA9PT10KXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PTMmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCszLTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1yJiZlLnN0cnN0YXJ0LXI8PWUud19zaXplLWgmJihlLm1hdGNoX2xlbmd0aD13KGUscikpLGUubWF0Y2hfbGVuZ3RoPj0zKWlmKG49cy5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgtMyksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49Myl7Zm9yKGUubWF0Y2hfbGVuZ3RoLS07ZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzMtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCwwIT0tLWUubWF0Y2hfbGVuZ3RoOyk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIG49cy5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihuJiYoZyhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8Mj9lLnN0cnN0YXJ0OjIsND09PXQ/KGcoZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTplLmxhc3RfbGl0JiYoZyhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/MToyfWZ1bmN0aW9uIGsoZSx0KXtmb3IodmFyIHIsbixpOzspe2lmKGUubG9va2FoZWFkPGgpe2lmKF8oZSksZS5sb29rYWhlYWQ8aCYmMD09PXQpcmV0dXJuIDE7aWYoMD09PWUubG9va2FoZWFkKWJyZWFrfWlmKHI9MCxlLmxvb2thaGVhZD49MyYmKGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzMtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksZS5wcmV2X2xlbmd0aD1lLm1hdGNoX2xlbmd0aCxlLnByZXZfbWF0Y2g9ZS5tYXRjaF9zdGFydCxlLm1hdGNoX2xlbmd0aD0yLDAhPT1yJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtcjw9ZS53X3NpemUtaCYmKGUubWF0Y2hfbGVuZ3RoPXcoZSxyKSxlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1lLnN0cmF0ZWd5fHwzPT09ZS5tYXRjaF9sZW5ndGgmJjQwOTY8ZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0KSYmKGUubWF0Y2hfbGVuZ3RoPTIpKSxlLnByZXZfbGVuZ3RoPj0zJiZlLm1hdGNoX2xlbmd0aDw9ZS5wcmV2X2xlbmd0aCl7Zm9yKGk9ZS5zdHJzdGFydCtlLmxvb2thaGVhZC0zLG49cy5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LTEtZS5wcmV2X21hdGNoLGUucHJldl9sZW5ndGgtMyksZS5sb29rYWhlYWQtPWUucHJldl9sZW5ndGgtMSxlLnByZXZfbGVuZ3RoLT0yOysrZS5zdHJzdGFydDw9aSYmKGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzMtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCksMCE9LS1lLnByZXZfbGVuZ3RoOyk7aWYoZS5tYXRjaF9hdmFpbGFibGU9MCxlLm1hdGNoX2xlbmd0aD0yLGUuc3Ryc3RhcnQrKyxuJiYoZyhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihlLm1hdGNoX2F2YWlsYWJsZSl7aWYoKG49cy5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pKSYmZyhlLCExKSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLSwwPT09ZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIGUubWF0Y2hfYXZhaWxhYmxlPTEsZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS19cmV0dXJuIGUubWF0Y2hfYXZhaWxhYmxlJiYobj1zLl90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDwyP2Uuc3Ryc3RhcnQ6Miw0PT09dD8oZyhlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD8zOjQpOmUubGFzdF9saXQmJihnKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUyhlLHQscixuLGkpe3RoaXMuZ29vZF9sZW5ndGg9ZSx0aGlzLm1heF9sYXp5PXQsdGhpcy5uaWNlX2xlbmd0aD1yLHRoaXMubWF4X2NoYWluPW4sdGhpcy5mdW5jPWl9ZnVuY3Rpb24gTSgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPTgsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IGkuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IGkuQnVmMTYoMTIyKSx0aGlzLmJsX3RyZWU9bmV3IGkuQnVmMTYoNzgpLG0odGhpcy5keW5fbHRyZWUpLG0odGhpcy5keW5fZHRyZWUpLG0odGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgaS5CdWYxNigxNiksdGhpcy5oZWFwPW5ldyBpLkJ1ZjE2KDU3MyksbSh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgaS5CdWYxNig1NzMpLG0odGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gQyhlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8oZS50b3RhbF9pbj1lLnRvdGFsX291dD0wLGUuZGF0YV90eXBlPTIsKHQ9ZS5zdGF0ZSkucGVuZGluZz0wLHQucGVuZGluZ19vdXQ9MCx0LndyYXA8MCYmKHQud3JhcD0tdC53cmFwKSx0LnN0YXR1cz10LndyYXA/NDI6ZixlLmFkbGVyPTI9PT10LndyYXA/MDoxLHQubGFzdF9mbHVzaD0wLHMuX3RyX2luaXQodCksMCk6ZChlLGMpfWZ1bmN0aW9uIFQoZSl7dmFyIHQ9QyhlKTtyZXR1cm4gMD09PXQmJmZ1bmN0aW9uKGUpe2Uud2luZG93X3NpemU9MiplLndfc2l6ZSxtKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1uW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1uW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD1uW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1uW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPTIsZS5tYXRjaF9hdmFpbGFibGU9MCxlLmluc19oPTB9KGUuc3RhdGUpLHR9ZnVuY3Rpb24gRShlLHQscixuLHMsbyl7aWYoIWUpcmV0dXJuIGM7dmFyIGE9MTtpZigtMT09PXQmJih0PTYpLG48MD8oYT0wLG49LW4pOjE1PG4mJihhPTIsbi09MTYpLHM8MXx8OTxzfHw4IT09cnx8bjw4fHwxNTxufHx0PDB8fDk8dHx8bzwwfHw0PG8pcmV0dXJuIGQoZSxjKTs4PT09biYmKG49OSk7dmFyIGw9bmV3IE07cmV0dXJuKGUuc3RhdGU9bCkuc3RybT1lLGwud3JhcD1hLGwuZ3poZWFkPW51bGwsbC53X2JpdHM9bixsLndfc2l6ZT0xPDxsLndfYml0cyxsLndfbWFzaz1sLndfc2l6ZS0xLGwuaGFzaF9iaXRzPXMrNyxsLmhhc2hfc2l6ZT0xPDxsLmhhc2hfYml0cyxsLmhhc2hfbWFzaz1sLmhhc2hfc2l6ZS0xLGwuaGFzaF9zaGlmdD1+figobC5oYXNoX2JpdHMrMy0xKS8zKSxsLndpbmRvdz1uZXcgaS5CdWY4KDIqbC53X3NpemUpLGwuaGVhZD1uZXcgaS5CdWYxNihsLmhhc2hfc2l6ZSksbC5wcmV2PW5ldyBpLkJ1ZjE2KGwud19zaXplKSxsLmxpdF9idWZzaXplPTE8PHMrNixsLnBlbmRpbmdfYnVmX3NpemU9NCpsLmxpdF9idWZzaXplLGwucGVuZGluZ19idWY9bmV3IGkuQnVmOChsLnBlbmRpbmdfYnVmX3NpemUpLGwuZF9idWY9MSpsLmxpdF9idWZzaXplLGwubF9idWY9MypsLmxpdF9idWZzaXplLGwubGV2ZWw9dCxsLnN0cmF0ZWd5PW8sbC5tZXRob2Q9cixUKGUpfW49W25ldyBTKDAsMCwwLDAsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9NjU1MzU7Zm9yKHI+ZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihyPWUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihlLmxvb2thaGVhZDw9MSl7aWYoXyhlKSwwPT09ZS5sb29rYWhlYWQmJjA9PT10KXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciBuPWUuYmxvY2tfc3RhcnQrcjtpZigoMD09PWUuc3Ryc3RhcnR8fGUuc3Ryc3RhcnQ+PW4pJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1uLGUuc3Ryc3RhcnQ9bixnKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMTtpZihlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQ+PWUud19zaXplLWgmJihnKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gZS5pbnNlcnQ9MCw0PT09dD8oZyhlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD8zOjQpOihlLnN0cnN0YXJ0PmUuYmxvY2tfc3RhcnQmJihnKGUsITEpLGUuc3RybS5hdmFpbF9vdXQpLDEpfSkpLG5ldyBTKDQsNCw4LDQseCksbmV3IFMoNCw1LDE2LDgseCksbmV3IFMoNCw2LDMyLDMyLHgpLG5ldyBTKDQsNCwxNiwxNixrKSxuZXcgUyg4LDE2LDMyLDMyLGspLG5ldyBTKDgsMTYsMTI4LDEyOCxrKSxuZXcgUyg4LDMyLDEyOCwyNTYsayksbmV3IFMoMzIsMTI4LDI1OCwxMDI0LGspLG5ldyBTKDMyLDI1OCwyNTgsNDA5NixrKV0sci5kZWZsYXRlSW5pdD1mdW5jdGlvbihlLHQpe3JldHVybiBFKGUsdCw4LDE1LDgsMCl9LHIuZGVmbGF0ZUluaXQyPUUsci5kZWZsYXRlUmVzZXQ9VCxyLmRlZmxhdGVSZXNldEtlZXA9QyxyLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmZS5zdGF0ZT8yIT09ZS5zdGF0ZS53cmFwP2M6KGUuc3RhdGUuZ3poZWFkPXQsMCk6Y30sci5kZWZsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaSxvLGw7aWYoIWV8fCFlLnN0YXRlfHw1PHR8fHQ8MClyZXR1cm4gZT9kKGUsYyk6YztpZihpPWUuc3RhdGUsIWUub3V0cHV0fHwhZS5pbnB1dCYmMCE9PWUuYXZhaWxfaW58fDY2Nj09PWkuc3RhdHVzJiY0IT09dClyZXR1cm4gZChlLDA9PT1lLmF2YWlsX291dD8tNTpjKTtpZihpLnN0cm09ZSxyPWkubGFzdF9mbHVzaCxpLmxhc3RfZmx1c2g9dCw0Mj09PWkuc3RhdHVzKWlmKDI9PT1pLndyYXApZS5hZGxlcj0wLHkoaSwzMSkseShpLDEzOSkseShpLDgpLGkuZ3poZWFkPyh5KGksKGkuZ3poZWFkLnRleHQ/MTowKSsoaS5nemhlYWQuaGNyYz8yOjApKyhpLmd6aGVhZC5leHRyYT80OjApKyhpLmd6aGVhZC5uYW1lPzg6MCkrKGkuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLHkoaSwyNTUmaS5nemhlYWQudGltZSkseShpLGkuZ3poZWFkLnRpbWU+PjgmMjU1KSx5KGksaS5nemhlYWQudGltZT4+MTYmMjU1KSx5KGksaS5nemhlYWQudGltZT4+MjQmMjU1KSx5KGksOT09PWkubGV2ZWw/MjoyPD1pLnN0cmF0ZWd5fHxpLmxldmVsPDI/NDowKSx5KGksMjU1JmkuZ3poZWFkLm9zKSxpLmd6aGVhZC5leHRyYSYmaS5nemhlYWQuZXh0cmEubGVuZ3RoJiYoeShpLDI1NSZpLmd6aGVhZC5leHRyYS5sZW5ndGgpLHkoaSxpLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaS5nemhlYWQuaGNyYyYmKGUuYWRsZXI9YShlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLDApKSxpLmd6aW5kZXg9MCxpLnN0YXR1cz02OSk6KHkoaSwwKSx5KGksMCkseShpLDApLHkoaSwwKSx5KGksMCkseShpLDk9PT1pLmxldmVsPzI6Mjw9aS5zdHJhdGVneXx8aS5sZXZlbDwyPzQ6MCkseShpLDMpLGkuc3RhdHVzPWYpO2Vsc2V7dmFyIGg9OCsoaS53X2JpdHMtODw8NCk8PDg7aHw9KDI8PWkuc3RyYXRlZ3l8fGkubGV2ZWw8Mj8wOmkubGV2ZWw8Nj8xOjY9PT1pLmxldmVsPzI6Myk8PDYsMCE9PWkuc3Ryc3RhcnQmJihofD0zMiksaCs9MzEtaCUzMSxpLnN0YXR1cz1mLHYoaSxoKSwwIT09aS5zdHJzdGFydCYmKHYoaSxlLmFkbGVyPj4+MTYpLHYoaSw2NTUzNSZlLmFkbGVyKSksZS5hZGxlcj0xfWlmKDY5PT09aS5zdGF0dXMpaWYoaS5nemhlYWQuZXh0cmEpe2ZvcihvPWkucGVuZGluZztpLmd6aW5kZXg8KDY1NTM1JmkuZ3poZWFkLmV4dHJhLmxlbmd0aCkmJihpLnBlbmRpbmchPT1pLnBlbmRpbmdfYnVmX3NpemV8fChpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+byYmKGUuYWRsZXI9YShlLmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLW8sbykpLGIoZSksbz1pLnBlbmRpbmcsaS5wZW5kaW5nIT09aS5wZW5kaW5nX2J1Zl9zaXplKSk7KXkoaSwyNTUmaS5nemhlYWQuZXh0cmFbaS5nemluZGV4XSksaS5nemluZGV4Kys7aS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPm8mJihlLmFkbGVyPWEoZS5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1vLG8pKSxpLmd6aW5kZXg9PT1pLmd6aGVhZC5leHRyYS5sZW5ndGgmJihpLmd6aW5kZXg9MCxpLnN0YXR1cz03Myl9ZWxzZSBpLnN0YXR1cz03MztpZig3Mz09PWkuc3RhdHVzKWlmKGkuZ3poZWFkLm5hbWUpe289aS5wZW5kaW5nO2Rve2lmKGkucGVuZGluZz09PWkucGVuZGluZ19idWZfc2l6ZSYmKGkuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5vJiYoZS5hZGxlcj1hKGUuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctbyxvKSksYihlKSxvPWkucGVuZGluZyxpLnBlbmRpbmc9PT1pLnBlbmRpbmdfYnVmX3NpemUpKXtsPTE7YnJlYWt9bD1pLmd6aW5kZXg8aS5nemhlYWQubmFtZS5sZW5ndGg/MjU1JmkuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChpLmd6aW5kZXgrKyk6MCx5KGksbCl9d2hpbGUoMCE9PWwpO2kuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5vJiYoZS5hZGxlcj1hKGUuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctbyxvKSksMD09PWwmJihpLmd6aW5kZXg9MCxpLnN0YXR1cz05MSl9ZWxzZSBpLnN0YXR1cz05MTtpZig5MT09PWkuc3RhdHVzKWlmKGkuZ3poZWFkLmNvbW1lbnQpe289aS5wZW5kaW5nO2Rve2lmKGkucGVuZGluZz09PWkucGVuZGluZ19idWZfc2l6ZSYmKGkuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5vJiYoZS5hZGxlcj1hKGUuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctbyxvKSksYihlKSxvPWkucGVuZGluZyxpLnBlbmRpbmc9PT1pLnBlbmRpbmdfYnVmX3NpemUpKXtsPTE7YnJlYWt9bD1pLmd6aW5kZXg8aS5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JmkuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChpLmd6aW5kZXgrKyk6MCx5KGksbCl9d2hpbGUoMCE9PWwpO2kuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5vJiYoZS5hZGxlcj1hKGUuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctbyxvKSksMD09PWwmJihpLnN0YXR1cz0xMDMpfWVsc2UgaS5zdGF0dXM9MTAzO2lmKDEwMz09PWkuc3RhdHVzJiYoaS5nemhlYWQuaGNyYz8oaS5wZW5kaW5nKzI+aS5wZW5kaW5nX2J1Zl9zaXplJiZiKGUpLGkucGVuZGluZysyPD1pLnBlbmRpbmdfYnVmX3NpemUmJih5KGksMjU1JmUuYWRsZXIpLHkoaSxlLmFkbGVyPj44JjI1NSksZS5hZGxlcj0wLGkuc3RhdHVzPWYpKTppLnN0YXR1cz1mKSwwIT09aS5wZW5kaW5nKXtpZihiKGUpLDA9PT1lLmF2YWlsX291dClyZXR1cm4gaS5sYXN0X2ZsdXNoPS0xLDB9ZWxzZSBpZigwPT09ZS5hdmFpbF9pbiYmcCh0KTw9cChyKSYmNCE9PXQpcmV0dXJuIGQoZSwtNSk7aWYoNjY2PT09aS5zdGF0dXMmJjAhPT1lLmF2YWlsX2luKXJldHVybiBkKGUsLTUpO2lmKDAhPT1lLmF2YWlsX2lufHwwIT09aS5sb29rYWhlYWR8fDAhPT10JiY2NjYhPT1pLnN0YXR1cyl7dmFyIHc9Mj09PWkuc3RyYXRlZ3k/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI7Oyl7aWYoMD09PWUubG9va2FoZWFkJiYoXyhlKSwwPT09ZS5sb29rYWhlYWQpKXtpZigwPT09dClyZXR1cm4gMTticmVha31pZihlLm1hdGNoX2xlbmd0aD0wLHI9cy5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyxyJiYoZyhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIGUuaW5zZXJ0PTAsND09PXQ/KGcoZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTplLmxhc3RfbGl0JiYoZyhlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/MToyfShpLHQpOjM9PT1pLnN0cmF0ZWd5P2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4saSxvLGE9ZS53aW5kb3c7Oyl7aWYoZS5sb29rYWhlYWQ8PXUpe2lmKF8oZSksZS5sb29rYWhlYWQ8PXUmJjA9PT10KXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihlLm1hdGNoX2xlbmd0aD0wLGUubG9va2FoZWFkPj0zJiYwPGUuc3Ryc3RhcnQmJihuPWFbaT1lLnN0cnN0YXJ0LTFdKT09PWFbKytpXSYmbj09PWFbKytpXSYmbj09PWFbKytpXSl7bz1lLnN0cnN0YXJ0K3U7ZG97fXdoaWxlKG49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0mJmk8byk7ZS5tYXRjaF9sZW5ndGg9dS0oby1pKSxlLm1hdGNoX2xlbmd0aD5lLmxvb2thaGVhZCYmKGUubWF0Y2hfbGVuZ3RoPWUubG9va2FoZWFkKX1pZihlLm1hdGNoX2xlbmd0aD49Mz8ocj1zLl90cl90YWxseShlLDEsZS5tYXRjaF9sZW5ndGgtMyksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUuc3Ryc3RhcnQrPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPTApOihyPXMuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyspLHImJihnKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gZS5pbnNlcnQ9MCw0PT09dD8oZyhlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD8zOjQpOmUubGFzdF9saXQmJihnKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGksdCk6bltpLmxldmVsXS5mdW5jKGksdCk7aWYoMyE9PXcmJjQhPT13fHwoaS5zdGF0dXM9NjY2KSwxPT09d3x8Mz09PXcpcmV0dXJuIDA9PT1lLmF2YWlsX291dCYmKGkubGFzdF9mbHVzaD0tMSksMDtpZigyPT09dyYmKDE9PT10P3MuX3RyX2FsaWduKGkpOjUhPT10JiYocy5fdHJfc3RvcmVkX2Jsb2NrKGksMCwwLCExKSwzPT09dCYmKG0oaS5oZWFkKSwwPT09aS5sb29rYWhlYWQmJihpLnN0cnN0YXJ0PTAsaS5ibG9ja19zdGFydD0wLGkuaW5zZXJ0PTApKSksYihlKSwwPT09ZS5hdmFpbF9vdXQpKXJldHVybiBpLmxhc3RfZmx1c2g9LTEsMH1yZXR1cm4gNCE9PXQ/MDppLndyYXA8PTA/MTooMj09PWkud3JhcD8oeShpLDI1NSZlLmFkbGVyKSx5KGksZS5hZGxlcj4+OCYyNTUpLHkoaSxlLmFkbGVyPj4xNiYyNTUpLHkoaSxlLmFkbGVyPj4yNCYyNTUpLHkoaSwyNTUmZS50b3RhbF9pbikseShpLGUudG90YWxfaW4+PjgmMjU1KSx5KGksZS50b3RhbF9pbj4+MTYmMjU1KSx5KGksZS50b3RhbF9pbj4+MjQmMjU1KSk6KHYoaSxlLmFkbGVyPj4+MTYpLHYoaSw2NTUzNSZlLmFkbGVyKSksYihlKSwwPGkud3JhcCYmKGkud3JhcD0taS53cmFwKSwwIT09aS5wZW5kaW5nPzA6MSl9LHIuZGVmbGF0ZUVuZD1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT80MiE9PSh0PWUuc3RhdGUuc3RhdHVzKSYmNjkhPT10JiY3MyE9PXQmJjkxIT09dCYmMTAzIT09dCYmdCE9PWYmJjY2NiE9PXQ/ZChlLGMpOihlLnN0YXRlPW51bGwsdD09PWY/ZChlLC0zKTowKTpjfSxyLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixzLGEsbCx1LGgsZixkPXQubGVuZ3RoO2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gYztpZigyPT09KGE9KHI9ZS5zdGF0ZSkud3JhcCl8fDE9PT1hJiY0MiE9PXIuc3RhdHVzfHxyLmxvb2thaGVhZClyZXR1cm4gYztmb3IoMT09PWEmJihlLmFkbGVyPW8oZS5hZGxlcix0LGQsMCkpLHIud3JhcD0wLGQ+PXIud19zaXplJiYoMD09PWEmJihtKHIuaGVhZCksci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSxmPW5ldyBpLkJ1Zjgoci53X3NpemUpLGkuYXJyYXlTZXQoZix0LGQtci53X3NpemUsci53X3NpemUsMCksdD1mLGQ9ci53X3NpemUpLGw9ZS5hdmFpbF9pbix1PWUubmV4dF9pbixoPWUuaW5wdXQsZS5hdmFpbF9pbj1kLGUubmV4dF9pbj0wLGUuaW5wdXQ9dCxfKHIpO3IubG9va2FoZWFkPj0zOyl7Zm9yKG49ci5zdHJzdGFydCxzPXIubG9va2FoZWFkLTI7ci5pbnNfaD0oci5pbnNfaDw8ci5oYXNoX3NoaWZ0XnIud2luZG93W24rMy0xXSkmci5oYXNoX21hc2ssci5wcmV2W24mci53X21hc2tdPXIuaGVhZFtyLmluc19oXSxyLmhlYWRbci5pbnNfaF09bixuKyssLS1zOyk7ci5zdHJzdGFydD1uLHIubG9va2FoZWFkPTIsXyhyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD0yLHIubWF0Y2hfYXZhaWxhYmxlPTAsZS5uZXh0X2luPXUsZS5pbnB1dD1oLGUuYXZhaWxfaW49bCxyLndyYXA9YSwwfSxyLmRlZmxhdGVJbmZvPVwicGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KVwifSx7XCIuLi91dGlscy9jb21tb25cIjo0MSxcIi4vYWRsZXIzMlwiOjQzLFwiLi9jcmMzMlwiOjQ1LFwiLi9tZXNzYWdlc1wiOjUxLFwiLi90cmVlc1wiOjUyfV0sNDc6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9XCJcIix0aGlzLmNvbW1lbnQ9XCJcIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sNDg6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscyxvLGEsbCxjLHUsaCxmLGQscCxtLGIsZyx5LHYsdyxfLHgsayxTLE0sQztyPWUuc3RhdGUsbj1lLm5leHRfaW4sTT1lLmlucHV0LGk9bisoZS5hdmFpbF9pbi01KSxzPWUubmV4dF9vdXQsQz1lLm91dHB1dCxvPXMtKHQtZS5hdmFpbF9vdXQpLGE9cysoZS5hdmFpbF9vdXQtMjU3KSxsPXIuZG1heCxjPXIud3NpemUsdT1yLndoYXZlLGg9ci53bmV4dCxmPXIud2luZG93LGQ9ci5ob2xkLHA9ci5iaXRzLG09ci5sZW5jb2RlLGI9ci5kaXN0Y29kZSxnPSgxPDxyLmxlbmJpdHMpLTEseT0oMTw8ci5kaXN0Yml0cyktMTtlOmRve3A8MTUmJihkKz1NW24rK108PHAscCs9OCxkKz1NW24rK108PHAscCs9OCksdj1tW2QmZ107dDpmb3IoOzspe2lmKGQ+Pj49dz12Pj4+MjQscC09dywwPT0odz12Pj4+MTYmMjU1KSlDW3MrK109NjU1MzUmdjtlbHNle2lmKCEoMTYmdykpe2lmKDA9PSg2NCZ3KSl7dj1tWyg2NTUzNSZ2KSsoZCYoMTw8dyktMSldO2NvbnRpbnVlIHR9aWYoMzImdyl7ci5tb2RlPTEyO2JyZWFrIGV9ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixyLm1vZGU9MzA7YnJlYWsgZX1fPTY1NTM1JnYsKHcmPTE1KSYmKHA8dyYmKGQrPU1bbisrXTw8cCxwKz04KSxfKz1kJigxPDx3KS0xLGQ+Pj49dyxwLT13KSxwPDE1JiYoZCs9TVtuKytdPDxwLHArPTgsZCs9TVtuKytdPDxwLHArPTgpLHY9YltkJnldO3I6Zm9yKDs7KXtpZihkPj4+PXc9dj4+PjI0LHAtPXcsISgxNiYodz12Pj4+MTYmMjU1KSkpe2lmKDA9PSg2NCZ3KSl7dj1iWyg2NTUzNSZ2KSsoZCYoMTw8dyktMSldO2NvbnRpbnVlIHJ9ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixyLm1vZGU9MzA7YnJlYWsgZX1pZih4PTY1NTM1JnYscDwodyY9MTUpJiYoZCs9TVtuKytdPDxwLChwKz04KTx3JiYoZCs9TVtuKytdPDxwLHArPTgpKSxsPCh4Kz1kJigxPDx3KS0xKSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVhayBlfWlmKGQ+Pj49dyxwLT13LCh3PXMtbyk8eCl7aWYodTwodz14LXcpJiZyLnNhbmUpe2UubXNnPVwiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixyLm1vZGU9MzA7YnJlYWsgZX1pZihTPWYsKGs9MCk9PT1oKXtpZihrKz1jLXcsdzxfKXtmb3IoXy09dztDW3MrK109ZltrKytdLC0tdzspO2s9cy14LFM9Q319ZWxzZSBpZihoPHcpe2lmKGsrPWMraC13LCh3LT1oKTxfKXtmb3IoXy09dztDW3MrK109ZltrKytdLC0tdzspO2lmKGs9MCxoPF8pe2ZvcihfLT13PWg7Q1tzKytdPWZbaysrXSwtLXc7KTtrPXMteCxTPUN9fX1lbHNlIGlmKGsrPWgtdyx3PF8pe2ZvcihfLT13O0NbcysrXT1mW2srK10sLS13Oyk7az1zLXgsUz1DfWZvcig7MjxfOylDW3MrK109U1trKytdLENbcysrXT1TW2srK10sQ1tzKytdPVNbaysrXSxfLT0zO18mJihDW3MrK109U1trKytdLDE8XyYmKENbcysrXT1TW2srK10pKX1lbHNle2ZvcihrPXMteDtDW3MrK109Q1trKytdLENbcysrXT1DW2srK10sQ1tzKytdPUNbaysrXSwyPChfLT0zKTspO18mJihDW3MrK109Q1trKytdLDE8XyYmKENbcysrXT1DW2srK10pKX1icmVha319YnJlYWt9fXdoaWxlKG48aSYmczxhKTtuLT1fPXA+PjMsZCY9KDE8PChwLT1fPDwzKSktMSxlLm5leHRfaW49bixlLm5leHRfb3V0PXMsZS5hdmFpbF9pbj1uPGk/aS1uKzU6NS0obi1pKSxlLmF2YWlsX291dD1zPGE/YS1zKzI1NzoyNTctKHMtYSksci5ob2xkPWQsci5iaXRzPXB9fSx7fV0sNDk6W2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLGk9ZShcIi4vYWRsZXIzMlwiKSxzPWUoXCIuL2NyYzMyXCIpLG89ZShcIi4vaW5mZmFzdFwiKSxhPWUoXCIuL2luZnRyZWVzXCIpLGw9LTI7ZnVuY3Rpb24gYyhlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKDY1MjgwJmUpPDw4KSsoKDI1NSZlKTw8MjQpfWZ1bmN0aW9uIHUoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IG4uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IG4uQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gaChlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8odD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPVwiXCIsdC53cmFwJiYoZS5hZGxlcj0xJnQud3JhcCksdC5tb2RlPTEsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IG4uQnVmMzIoODUyKSx0LmRpc3Rjb2RlPXQuZGlzdGR5bj1uZXcgbi5CdWYzMig1OTIpLHQuc2FuZT0xLHQuYmFjaz0tMSwwKTpsfWZ1bmN0aW9uIGYoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KCh0PWUuc3RhdGUpLndzaXplPTAsdC53aGF2ZT0wLHQud25leHQ9MCxoKGUpKTpsfWZ1bmN0aW9uIGQoZSx0KXt2YXIgcixuO3JldHVybiBlJiZlLnN0YXRlPyhuPWUuc3RhdGUsdDwwPyhyPTAsdD0tdCk6KHI9MSsodD4+NCksdDw0OCYmKHQmPTE1KSksdCYmKHQ8OHx8MTU8dCk/bDoobnVsbCE9PW4ud2luZG93JiZuLndiaXRzIT09dCYmKG4ud2luZG93PW51bGwpLG4ud3JhcD1yLG4ud2JpdHM9dCxmKGUpKSk6bH1mdW5jdGlvbiBwKGUsdCl7dmFyIHIsbjtyZXR1cm4gZT8obj1uZXcgdSwoZS5zdGF0ZT1uKS53aW5kb3c9bnVsbCwwIT09KHI9ZChlLHQpKSYmKGUuc3RhdGU9bnVsbCkscik6bH12YXIgbSxiLGc9ITA7ZnVuY3Rpb24geShlKXtpZihnKXt2YXIgdDtmb3IobT1uZXcgbi5CdWYzMig1MTIpLGI9bmV3IG4uQnVmMzIoMzIpLHQ9MDt0PDE0NDspZS5sZW5zW3QrK109ODtmb3IoO3Q8MjU2OyllLmxlbnNbdCsrXT05O2Zvcig7dDwyODA7KWUubGVuc1t0KytdPTc7Zm9yKDt0PDI4ODspZS5sZW5zW3QrK109ODtmb3IoYSgxLGUubGVucywwLDI4OCxtLDAsZS53b3JrLHtiaXRzOjl9KSx0PTA7dDwzMjspZS5sZW5zW3QrK109NTthKDIsZS5sZW5zLDAsMzIsYiwwLGUud29yayx7Yml0czo1fSksZz0hMX1lLmxlbmNvZGU9bSxlLmxlbmJpdHM9OSxlLmRpc3Rjb2RlPWIsZS5kaXN0Yml0cz01fWZ1bmN0aW9uIHYoZSx0LHIsaSl7dmFyIHMsbz1lLnN0YXRlO3JldHVybiBudWxsPT09by53aW5kb3cmJihvLndzaXplPTE8PG8ud2JpdHMsby53bmV4dD0wLG8ud2hhdmU9MCxvLndpbmRvdz1uZXcgbi5CdWY4KG8ud3NpemUpKSxpPj1vLndzaXplPyhuLmFycmF5U2V0KG8ud2luZG93LHQsci1vLndzaXplLG8ud3NpemUsMCksby53bmV4dD0wLG8ud2hhdmU9by53c2l6ZSk6KGk8KHM9by53c2l6ZS1vLnduZXh0KSYmKHM9aSksbi5hcnJheVNldChvLndpbmRvdyx0LHItaSxzLG8ud25leHQpLChpLT1zKT8obi5hcnJheVNldChvLndpbmRvdyx0LHItaSxpLDApLG8ud25leHQ9aSxvLndoYXZlPW8ud3NpemUpOihvLnduZXh0Kz1zLG8ud25leHQ9PT1vLndzaXplJiYoby53bmV4dD0wKSxvLndoYXZlPG8ud3NpemUmJihvLndoYXZlKz1zKSkpLDB9ci5pbmZsYXRlUmVzZXQ9ZixyLmluZmxhdGVSZXNldDI9ZCxyLmluZmxhdGVSZXNldEtlZXA9aCxyLmluZmxhdGVJbml0PWZ1bmN0aW9uKGUpe3JldHVybiBwKGUsMTUpfSxyLmluZmxhdGVJbml0Mj1wLHIuaW5mbGF0ZT1mdW5jdGlvbihlLHQpe3ZhciByLHUsaCxmLGQscCxtLGIsZyx3LF8seCxrLFMsTSxDLFQsRSxBLFIsTyxqLEksTixQPTAsQj1uZXcgbi5CdWY4KDQpLEQ9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFlfHwhZS5zdGF0ZXx8IWUub3V0cHV0fHwhZS5pbnB1dCYmMCE9PWUuYXZhaWxfaW4pcmV0dXJuIGw7MTI9PT0ocj1lLnN0YXRlKS5tb2RlJiYoci5tb2RlPTEzKSxkPWUubmV4dF9vdXQsaD1lLm91dHB1dCxtPWUuYXZhaWxfb3V0LGY9ZS5uZXh0X2luLHU9ZS5pbnB1dCxwPWUuYXZhaWxfaW4sYj1yLmhvbGQsZz1yLmJpdHMsdz1wLF89bSxqPTA7ZTpmb3IoOzspc3dpdGNoKHIubW9kZSl7Y2FzZSAxOmlmKDA9PT1yLndyYXApe3IubW9kZT0xMzticmVha31mb3IoO2c8MTY7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1pZigyJnIud3JhcCYmMzU2MTU9PT1iKXtCW3IuY2hlY2s9MF09MjU1JmIsQlsxXT1iPj4+OCYyNTUsci5jaGVjaz1zKHIuY2hlY2ssQiwyLDApLGc9Yj0wLHIubW9kZT0yO2JyZWFrfWlmKHIuZmxhZ3M9MCxyLmhlYWQmJihyLmhlYWQuZG9uZT0hMSksISgxJnIud3JhcCl8fCgoKDI1NSZiKTw8OCkrKGI+PjgpKSUzMSl7ZS5tc2c9XCJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrXCIsci5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZiKSl7ZS5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLHIubW9kZT0zMDticmVha31pZihnLT00LE89OCsoMTUmKGI+Pj49NCkpLDA9PT1yLndiaXRzKXIud2JpdHM9TztlbHNlIGlmKE8+ci53Yml0cyl7ZS5tc2c9XCJpbnZhbGlkIHdpbmRvdyBzaXplXCIsci5tb2RlPTMwO2JyZWFrfXIuZG1heD0xPDxPLGUuYWRsZXI9ci5jaGVjaz0xLHIubW9kZT01MTImYj8xMDoxMixnPWI9MDticmVhaztjYXNlIDI6Zm9yKDtnPDE2Oyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9aWYoci5mbGFncz1iLDghPSgyNTUmci5mbGFncykpe2UubXNnPVwidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2RcIixyLm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmci5mbGFncyl7ZS5tc2c9XCJ1bmtub3duIGhlYWRlciBmbGFncyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9ci5oZWFkJiYoci5oZWFkLnRleHQ9Yj4+OCYxKSw1MTImci5mbGFncyYmKEJbMF09MjU1JmIsQlsxXT1iPj4+OCYyNTUsci5jaGVjaz1zKHIuY2hlY2ssQiwyLDApKSxnPWI9MCxyLm1vZGU9MztjYXNlIDM6Zm9yKDtnPDMyOyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9ci5oZWFkJiYoci5oZWFkLnRpbWU9YiksNTEyJnIuZmxhZ3MmJihCWzBdPTI1NSZiLEJbMV09Yj4+PjgmMjU1LEJbMl09Yj4+PjE2JjI1NSxCWzNdPWI+Pj4yNCYyNTUsci5jaGVjaz1zKHIuY2hlY2ssQiw0LDApKSxnPWI9MCxyLm1vZGU9NDtjYXNlIDQ6Zm9yKDtnPDE2Oyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9ci5oZWFkJiYoci5oZWFkLnhmbGFncz0yNTUmYixyLmhlYWQub3M9Yj4+OCksNTEyJnIuZmxhZ3MmJihCWzBdPTI1NSZiLEJbMV09Yj4+PjgmMjU1LHIuY2hlY2s9cyhyLmNoZWNrLEIsMiwwKSksZz1iPTAsci5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmci5mbGFncyl7Zm9yKDtnPDE2Oyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9ci5sZW5ndGg9YixyLmhlYWQmJihyLmhlYWQuZXh0cmFfbGVuPWIpLDUxMiZyLmZsYWdzJiYoQlswXT0yNTUmYixCWzFdPWI+Pj44JjI1NSxyLmNoZWNrPXMoci5jaGVjayxCLDIsMCkpLGc9Yj0wfWVsc2Ugci5oZWFkJiYoci5oZWFkLmV4dHJhPW51bGwpO3IubW9kZT02O2Nhc2UgNjppZigxMDI0JnIuZmxhZ3MmJihwPCh4PXIubGVuZ3RoKSYmKHg9cCkseCYmKHIuaGVhZCYmKE89ci5oZWFkLmV4dHJhX2xlbi1yLmxlbmd0aCxyLmhlYWQuZXh0cmF8fChyLmhlYWQuZXh0cmE9bmV3IEFycmF5KHIuaGVhZC5leHRyYV9sZW4pKSxuLmFycmF5U2V0KHIuaGVhZC5leHRyYSx1LGYseCxPKSksNTEyJnIuZmxhZ3MmJihyLmNoZWNrPXMoci5jaGVjayx1LHgsZikpLHAtPXgsZis9eCxyLmxlbmd0aC09eCksci5sZW5ndGgpKWJyZWFrIGU7ci5sZW5ndGg9MCxyLm1vZGU9NztjYXNlIDc6aWYoMjA0OCZyLmZsYWdzKXtpZigwPT09cClicmVhayBlO2Zvcih4PTA7Tz11W2YreCsrXSxyLmhlYWQmJk8mJnIubGVuZ3RoPDY1NTM2JiYoci5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoTykpLE8mJng8cDspO2lmKDUxMiZyLmZsYWdzJiYoci5jaGVjaz1zKHIuY2hlY2ssdSx4LGYpKSxwLT14LGYrPXgsTylicmVhayBlfWVsc2Ugci5oZWFkJiYoci5oZWFkLm5hbWU9bnVsbCk7ci5sZW5ndGg9MCxyLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZyLmZsYWdzKXtpZigwPT09cClicmVhayBlO2Zvcih4PTA7Tz11W2YreCsrXSxyLmhlYWQmJk8mJnIubGVuZ3RoPDY1NTM2JiYoci5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoTykpLE8mJng8cDspO2lmKDUxMiZyLmZsYWdzJiYoci5jaGVjaz1zKHIuY2hlY2ssdSx4LGYpKSxwLT14LGYrPXgsTylicmVhayBlfWVsc2Ugci5oZWFkJiYoci5oZWFkLmNvbW1lbnQ9bnVsbCk7ci5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZyLmZsYWdzKXtmb3IoO2c8MTY7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1pZihiIT09KDY1NTM1JnIuY2hlY2spKXtlLm1zZz1cImhlYWRlciBjcmMgbWlzbWF0Y2hcIixyLm1vZGU9MzA7YnJlYWt9Zz1iPTB9ci5oZWFkJiYoci5oZWFkLmhjcmM9ci5mbGFncz4+OSYxLHIuaGVhZC5kb25lPSEwKSxlLmFkbGVyPXIuY2hlY2s9MCxyLm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO2c8MzI7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1lLmFkbGVyPXIuY2hlY2s9YyhiKSxnPWI9MCxyLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09ci5oYXZlZGljdClyZXR1cm4gZS5uZXh0X291dD1kLGUuYXZhaWxfb3V0PW0sZS5uZXh0X2luPWYsZS5hdmFpbF9pbj1wLHIuaG9sZD1iLHIuYml0cz1nLDI7ZS5hZGxlcj1yLmNoZWNrPTEsci5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PXR8fDY9PT10KWJyZWFrIGU7Y2FzZSAxMzppZihyLmxhc3Qpe2I+Pj49NyZnLGctPTcmZyxyLm1vZGU9Mjc7YnJlYWt9Zm9yKDtnPDM7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1zd2l0Y2goci5sYXN0PTEmYixnLT0xLDMmKGI+Pj49MSkpe2Nhc2UgMDpyLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKHkociksci5tb2RlPTIwLDYhPT10KWJyZWFrO2I+Pj49MixnLT0yO2JyZWFrIGU7Y2FzZSAyOnIubW9kZT0xNzticmVhaztjYXNlIDM6ZS5tc2c9XCJpbnZhbGlkIGJsb2NrIHR5cGVcIixyLm1vZGU9MzB9Yj4+Pj0yLGctPTI7YnJlYWs7Y2FzZSAxNDpmb3IoYj4+Pj03JmcsZy09NyZnO2c8MzI7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1pZigoNjU1MzUmYikhPShiPj4+MTZeNjU1MzUpKXtlLm1zZz1cImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHNcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5sZW5ndGg9NjU1MzUmYixnPWI9MCxyLm1vZGU9MTUsNj09PXQpYnJlYWsgZTtjYXNlIDE1OnIubW9kZT0xNjtjYXNlIDE2OmlmKHg9ci5sZW5ndGgpe2lmKHA8eCYmKHg9cCksbTx4JiYoeD1tKSwwPT09eClicmVhayBlO24uYXJyYXlTZXQoaCx1LGYseCxkKSxwLT14LGYrPXgsbS09eCxkKz14LHIubGVuZ3RoLT14O2JyZWFrfXIubW9kZT0xMjticmVhaztjYXNlIDE3OmZvcig7ZzwxNDspe2lmKDA9PT1wKWJyZWFrIGU7cC0tLGIrPXVbZisrXTw8ZyxnKz04fWlmKHIubmxlbj0yNTcrKDMxJmIpLGI+Pj49NSxnLT01LHIubmRpc3Q9MSsoMzEmYiksYj4+Pj01LGctPTUsci5uY29kZT00KygxNSZiKSxiPj4+PTQsZy09NCwyODY8ci5ubGVufHwzMDxyLm5kaXN0KXtlLm1zZz1cInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzXCIsci5tb2RlPTMwO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT0xODtjYXNlIDE4OmZvcig7ci5oYXZlPHIubmNvZGU7KXtmb3IoO2c8Mzspe2lmKDA9PT1wKWJyZWFrIGU7cC0tLGIrPXVbZisrXTw8ZyxnKz04fXIubGVuc1tEW3IuaGF2ZSsrXV09NyZiLGI+Pj49MyxnLT0zfWZvcig7ci5oYXZlPDE5OylyLmxlbnNbRFtyLmhhdmUrK11dPTA7aWYoci5sZW5jb2RlPXIubGVuZHluLHIubGVuYml0cz03LEk9e2JpdHM6ci5sZW5iaXRzfSxqPWEoMCxyLmxlbnMsMCwxOSxyLmxlbmNvZGUsMCxyLndvcmssSSksci5sZW5iaXRzPUkuYml0cyxqKXtlLm1zZz1cImludmFsaWQgY29kZSBsZW5ndGhzIHNldFwiLHIubW9kZT0zMDticmVha31yLmhhdmU9MCxyLm1vZGU9MTk7Y2FzZSAxOTpmb3IoO3IuaGF2ZTxyLm5sZW4rci5uZGlzdDspe2Zvcig7Qz0oUD1yLmxlbmNvZGVbYiYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsVD02NTUzNSZQLCEoKE09UD4+PjI0KTw9Zyk7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1pZihUPDE2KWI+Pj49TSxnLT1NLHIubGVuc1tyLmhhdmUrK109VDtlbHNle2lmKDE2PT09VCl7Zm9yKE49TSsyO2c8Tjspe2lmKDA9PT1wKWJyZWFrIGU7cC0tLGIrPXVbZisrXTw8ZyxnKz04fWlmKGI+Pj49TSxnLT1NLDA9PT1yLmhhdmUpe2UubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLHIubW9kZT0zMDticmVha31PPXIubGVuc1tyLmhhdmUtMV0seD0zKygzJmIpLGI+Pj49MixnLT0yfWVsc2UgaWYoMTc9PT1UKXtmb3IoTj1NKzM7ZzxOOyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9Zy09TSxPPTAseD0zKyg3JihiPj4+PU0pKSxiPj4+PTMsZy09M31lbHNle2ZvcihOPU0rNztnPE47KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1nLT1NLE89MCx4PTExKygxMjcmKGI+Pj49TSkpLGI+Pj49NyxnLT03fWlmKHIuaGF2ZSt4PnIubmxlbityLm5kaXN0KXtlLm1zZz1cImludmFsaWQgYml0IGxlbmd0aCByZXBlYXRcIixyLm1vZGU9MzA7YnJlYWt9Zm9yKDt4LS07KXIubGVuc1tyLmhhdmUrK109T319aWYoMzA9PT1yLm1vZGUpYnJlYWs7aWYoMD09PXIubGVuc1syNTZdKXtlLm1zZz1cImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9ja1wiLHIubW9kZT0zMDticmVha31pZihyLmxlbmJpdHM9OSxJPXtiaXRzOnIubGVuYml0c30saj1hKDEsci5sZW5zLDAsci5ubGVuLHIubGVuY29kZSwwLHIud29yayxJKSxyLmxlbmJpdHM9SS5iaXRzLGope2UubXNnPVwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfWlmKHIuZGlzdGJpdHM9NixyLmRpc3Rjb2RlPXIuZGlzdGR5bixJPXtiaXRzOnIuZGlzdGJpdHN9LGo9YSgyLHIubGVucyxyLm5sZW4sci5uZGlzdCxyLmRpc3Rjb2RlLDAsci53b3JrLEkpLHIuZGlzdGJpdHM9SS5iaXRzLGope2UubXNnPVwiaW52YWxpZCBkaXN0YW5jZXMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfWlmKHIubW9kZT0yMCw2PT09dClicmVhayBlO2Nhc2UgMjA6ci5tb2RlPTIxO2Nhc2UgMjE6aWYoNjw9cCYmMjU4PD1tKXtlLm5leHRfb3V0PWQsZS5hdmFpbF9vdXQ9bSxlLm5leHRfaW49ZixlLmF2YWlsX2luPXAsci5ob2xkPWIsci5iaXRzPWcsbyhlLF8pLGQ9ZS5uZXh0X291dCxoPWUub3V0cHV0LG09ZS5hdmFpbF9vdXQsZj1lLm5leHRfaW4sdT1lLmlucHV0LHA9ZS5hdmFpbF9pbixiPXIuaG9sZCxnPXIuYml0cywxMj09PXIubW9kZSYmKHIuYmFjaz0tMSk7YnJlYWt9Zm9yKHIuYmFjaz0wO0M9KFA9ci5sZW5jb2RlW2ImKDE8PHIubGVuYml0cyktMV0pPj4+MTYmMjU1LFQ9NjU1MzUmUCwhKChNPVA+Pj4yNCk8PWcpOyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9aWYoQyYmMD09KDI0MCZDKSl7Zm9yKEU9TSxBPUMsUj1UO0M9KFA9ci5sZW5jb2RlW1IrKChiJigxPDxFK0EpLTEpPj5FKV0pPj4+MTYmMjU1LFQ9NjU1MzUmUCwhKEUrKE09UD4+PjI0KTw9Zyk7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1iPj4+PUUsZy09RSxyLmJhY2srPUV9aWYoYj4+Pj1NLGctPU0sci5iYWNrKz1NLHIubGVuZ3RoPVQsMD09PUMpe3IubW9kZT0yNjticmVha31pZigzMiZDKXtyLmJhY2s9LTEsci5tb2RlPTEyO2JyZWFrfWlmKDY0JkMpe2UubXNnPVwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlXCIsci5tb2RlPTMwO2JyZWFrfXIuZXh0cmE9MTUmQyxyLm1vZGU9MjI7Y2FzZSAyMjppZihyLmV4dHJhKXtmb3IoTj1yLmV4dHJhO2c8Tjspe2lmKDA9PT1wKWJyZWFrIGU7cC0tLGIrPXVbZisrXTw8ZyxnKz04fXIubGVuZ3RoKz1iJigxPDxyLmV4dHJhKS0xLGI+Pj49ci5leHRyYSxnLT1yLmV4dHJhLHIuYmFjays9ci5leHRyYX1yLndhcz1yLmxlbmd0aCxyLm1vZGU9MjM7Y2FzZSAyMzpmb3IoO0M9KFA9ci5kaXN0Y29kZVtiJigxPDxyLmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsVD02NTUzNSZQLCEoKE09UD4+PjI0KTw9Zyk7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1pZigwPT0oMjQwJkMpKXtmb3IoRT1NLEE9QyxSPVQ7Qz0oUD1yLmRpc3Rjb2RlW1IrKChiJigxPDxFK0EpLTEpPj5FKV0pPj4+MTYmMjU1LFQ9NjU1MzUmUCwhKEUrKE09UD4+PjI0KTw9Zyk7KXtpZigwPT09cClicmVhayBlO3AtLSxiKz11W2YrK108PGcsZys9OH1iPj4+PUUsZy09RSxyLmJhY2srPUV9aWYoYj4+Pj1NLGctPU0sci5iYWNrKz1NLDY0JkMpe2UubXNnPVwiaW52YWxpZCBkaXN0YW5jZSBjb2RlXCIsci5tb2RlPTMwO2JyZWFrfXIub2Zmc2V0PVQsci5leHRyYT0xNSZDLHIubW9kZT0yNDtjYXNlIDI0OmlmKHIuZXh0cmEpe2ZvcihOPXIuZXh0cmE7ZzxOOyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9ci5vZmZzZXQrPWImKDE8PHIuZXh0cmEpLTEsYj4+Pj1yLmV4dHJhLGctPXIuZXh0cmEsci5iYWNrKz1yLmV4dHJhfWlmKHIub2Zmc2V0PnIuZG1heCl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVha31yLm1vZGU9MjU7Y2FzZSAyNTppZigwPT09bSlicmVhayBlO2lmKHg9Xy1tLHIub2Zmc2V0Pngpe2lmKCh4PXIub2Zmc2V0LXgpPnIud2hhdmUmJnIuc2FuZSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVha31rPXg+ci53bmV4dD8oeC09ci53bmV4dCxyLndzaXplLXgpOnIud25leHQteCx4PnIubGVuZ3RoJiYoeD1yLmxlbmd0aCksUz1yLndpbmRvd31lbHNlIFM9aCxrPWQtci5vZmZzZXQseD1yLmxlbmd0aDtmb3IobTx4JiYoeD1tKSxtLT14LHIubGVuZ3RoLT14O2hbZCsrXT1TW2srK10sLS14Oyk7MD09PXIubGVuZ3RoJiYoci5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1tKWJyZWFrIGU7aFtkKytdPXIubGVuZ3RoLG0tLSxyLm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihyLndyYXApe2Zvcig7ZzwzMjspe2lmKDA9PT1wKWJyZWFrIGU7cC0tLGJ8PXVbZisrXTw8ZyxnKz04fWlmKF8tPW0sZS50b3RhbF9vdXQrPV8sci50b3RhbCs9XyxfJiYoZS5hZGxlcj1yLmNoZWNrPXIuZmxhZ3M/cyhyLmNoZWNrLGgsXyxkLV8pOmkoci5jaGVjayxoLF8sZC1fKSksXz1tLChyLmZsYWdzP2I6YyhiKSkhPT1yLmNoZWNrKXtlLm1zZz1cImluY29ycmVjdCBkYXRhIGNoZWNrXCIsci5tb2RlPTMwO2JyZWFrfWc9Yj0wfXIubW9kZT0yODtjYXNlIDI4OmlmKHIud3JhcCYmci5mbGFncyl7Zm9yKDtnPDMyOyl7aWYoMD09PXApYnJlYWsgZTtwLS0sYis9dVtmKytdPDxnLGcrPTh9aWYoYiE9PSg0Mjk0OTY3Mjk1JnIudG90YWwpKXtlLm1zZz1cImluY29ycmVjdCBsZW5ndGggY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9Zz1iPTB9ci5tb2RlPTI5O2Nhc2UgMjk6aj0xO2JyZWFrIGU7Y2FzZSAzMDpqPS0zO2JyZWFrIGU7Y2FzZSAzMTpyZXR1cm4tNDtjYXNlIDMyOmRlZmF1bHQ6cmV0dXJuIGx9cmV0dXJuIGUubmV4dF9vdXQ9ZCxlLmF2YWlsX291dD1tLGUubmV4dF9pbj1mLGUuYXZhaWxfaW49cCxyLmhvbGQ9YixyLmJpdHM9Zywoci53c2l6ZXx8XyE9PWUuYXZhaWxfb3V0JiZyLm1vZGU8MzAmJihyLm1vZGU8Mjd8fDQhPT10KSkmJnYoZSxlLm91dHB1dCxlLm5leHRfb3V0LF8tZS5hdmFpbF9vdXQpPyhyLm1vZGU9MzEsLTQpOih3LT1lLmF2YWlsX2luLF8tPWUuYXZhaWxfb3V0LGUudG90YWxfaW4rPXcsZS50b3RhbF9vdXQrPV8sci50b3RhbCs9XyxyLndyYXAmJl8mJihlLmFkbGVyPXIuY2hlY2s9ci5mbGFncz9zKHIuY2hlY2ssaCxfLGUubmV4dF9vdXQtXyk6aShyLmNoZWNrLGgsXyxlLm5leHRfb3V0LV8pKSxlLmRhdGFfdHlwZT1yLmJpdHMrKHIubGFzdD82NDowKSsoMTI9PT1yLm1vZGU/MTI4OjApKygyMD09PXIubW9kZXx8MTU9PT1yLm1vZGU/MjU2OjApLCgwPT13JiYwPT09X3x8ND09PXQpJiYwPT09aiYmKGo9LTUpLGopfSxyLmluZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLnN0YXRlKXJldHVybiBsO3ZhciB0PWUuc3RhdGU7cmV0dXJuIHQud2luZG93JiYodC53aW5kb3c9bnVsbCksZS5zdGF0ZT1udWxsLDB9LHIuaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBlJiZlLnN0YXRlPzA9PSgyJihyPWUuc3RhdGUpLndyYXApP2w6KChyLmhlYWQ9dCkuZG9uZT0hMSwwKTpsfSxyLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10Lmxlbmd0aDtyZXR1cm4gZSYmZS5zdGF0ZT8wIT09KHI9ZS5zdGF0ZSkud3JhcCYmMTEhPT1yLm1vZGU/bDoxMT09PXIubW9kZSYmaSgxLHQsbiwwKSE9PXIuY2hlY2s/LTM6dihlLHQsbixuKT8oci5tb2RlPTMxLC00KTooci5oYXZlZGljdD0xLDApOmx9LHIuaW5mbGF0ZUluZm89XCJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXCJ9LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9hZGxlcjMyXCI6NDMsXCIuL2NyYzMyXCI6NDUsXCIuL2luZmZhc3RcIjo0OCxcIi4vaW5mdHJlZXNcIjo1MH1dLDUwOltmdW5jdGlvbihlLHQscil7dmFyIG49ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxpPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0scz1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLG89WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLGE9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbCxjLHUsaCxmKXt2YXIgZCxwLG0sYixnLHksdix3LF8seD1mLmJpdHMsaz0wLFM9MCxNPTAsQz0wLFQ9MCxFPTAsQT0wLFI9MCxPPTAsaj0wLEk9bnVsbCxOPTAsUD1uZXcgbi5CdWYxNigxNiksQj1uZXcgbi5CdWYxNigxNiksRD1udWxsLEY9MDtmb3Ioaz0wO2s8PTE1O2srKylQW2tdPTA7Zm9yKFM9MDtTPGw7UysrKVBbdFtyK1NdXSsrO2ZvcihUPXgsQz0xNTsxPD1DJiYwPT09UFtDXTtDLS0pO2lmKEM8VCYmKFQ9QyksMD09PUMpcmV0dXJuIGNbdSsrXT0yMDk3MTUyMCxjW3UrK109MjA5NzE1MjAsZi5iaXRzPTEsMDtmb3IoTT0xO008QyYmMD09PVBbTV07TSsrKTtmb3IoVDxNJiYoVD1NKSxrPVI9MTtrPD0xNTtrKyspaWYoUjw8PTEsKFItPVBba10pPDApcmV0dXJuLTE7aWYoMDxSJiYoMD09PWV8fDEhPT1DKSlyZXR1cm4tMTtmb3IoQlsxXT0wLGs9MTtrPDE1O2srKylCW2srMV09QltrXStQW2tdO2ZvcihTPTA7UzxsO1MrKykwIT09dFtyK1NdJiYoaFtCW3RbcitTXV0rK109Uyk7aWYoeT0wPT09ZT8oST1EPWgsMTkpOjE9PT1lPyhJPWksTi09MjU3LEQ9cyxGLT0yNTcsMjU2KTooST1vLEQ9YSwtMSksaz1NLGc9dSxBPVM9aj0wLG09LTEsYj0oTz0xPDwoRT1UKSktMSwxPT09ZSYmODUyPE98fDI9PT1lJiY1OTI8TylyZXR1cm4gMTtmb3IoOzspe2Zvcih2PWstQSxfPWhbU108eT8odz0wLGhbU10pOmhbU10+eT8odz1EW0YraFtTXV0sSVtOK2hbU11dKToodz05NiwwKSxkPTE8PGstQSxNPXA9MTw8RTtjW2crKGo+PkEpKyhwLT1kKV09djw8MjR8dzw8MTZ8X3wwLDAhPT1wOyk7Zm9yKGQ9MTw8ay0xO2omZDspZD4+PTE7aWYoMCE9PWQ/KGomPWQtMSxqKz1kKTpqPTAsUysrLDA9PS0tUFtrXSl7aWYoaz09PUMpYnJlYWs7az10W3IraFtTXV19aWYoVDxrJiYoaiZiKSE9PW0pe2ZvcigwPT09QSYmKEE9VCksZys9TSxSPTE8PChFPWstQSk7RStBPEMmJiEoKFItPVBbRStBXSk8PTApOylFKyssUjw8PTE7aWYoTys9MTw8RSwxPT09ZSYmODUyPE98fDI9PT1lJiY1OTI8TylyZXR1cm4gMTtjW209aiZiXT1UPDwyNHxFPDwxNnxnLXV8MH19cmV0dXJuIDAhPT1qJiYoY1tnK2pdPWstQTw8MjR8NjQ8PDE2fDApLGYuYml0cz1ULDB9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUxOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPXsyOlwibmVlZCBkaWN0aW9uYXJ5XCIsMTpcInN0cmVhbSBlbmRcIiwwOlwiXCIsXCItMVwiOlwiZmlsZSBlcnJvclwiLFwiLTJcIjpcInN0cmVhbSBlcnJvclwiLFwiLTNcIjpcImRhdGEgZXJyb3JcIixcIi00XCI6XCJpbnN1ZmZpY2llbnQgbWVtb3J5XCIsXCItNVwiOlwiYnVmZmVyIGVycm9yXCIsXCItNlwiOlwiaW5jb21wYXRpYmxlIHZlcnNpb25cIn19LHt9XSw1MjpbZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUoXCIuLi91dGlscy9jb21tb25cIik7ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9ZS5sZW5ndGg7MDw9LS10OyllW3RdPTB9dmFyIHM9MjU2LG89Mjg2LGE9MzAsbD0xNSxjPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLHU9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLGg9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLGY9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLGQ9bmV3IEFycmF5KDU3Nik7aShkKTt2YXIgcD1uZXcgQXJyYXkoNjApO2kocCk7dmFyIG09bmV3IEFycmF5KDUxMik7aShtKTt2YXIgYj1uZXcgQXJyYXkoMjU2KTtpKGIpO3ZhciBnPW5ldyBBcnJheSgyOSk7aShnKTt2YXIgeSx2LHcsXz1uZXcgQXJyYXkoYSk7ZnVuY3Rpb24geChlLHQscixuLGkpe3RoaXMuc3RhdGljX3RyZWU9ZSx0aGlzLmV4dHJhX2JpdHM9dCx0aGlzLmV4dHJhX2Jhc2U9cix0aGlzLmVsZW1zPW4sdGhpcy5tYXhfbGVuZ3RoPWksdGhpcy5oYXNfc3RyZWU9ZSYmZS5sZW5ndGh9ZnVuY3Rpb24gayhlLHQpe3RoaXMuZHluX3RyZWU9ZSx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9dH1mdW5jdGlvbiBTKGUpe3JldHVybiBlPDI1Nj9tW2VdOm1bMjU2KyhlPj4+NyldfWZ1bmN0aW9uIE0oZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT0yNTUmdCxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTV9ZnVuY3Rpb24gQyhlLHQscil7ZS5iaV92YWxpZD4xNi1yPyhlLmJpX2J1Znw9dDw8ZS5iaV92YWxpZCY2NTUzNSxNKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PjE2LWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9ci0xNik6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPXIpfWZ1bmN0aW9uIFQoZSx0LHIpe0MoZSxyWzIqdF0sclsyKnQrMV0pfWZ1bmN0aW9uIEUoZSx0KXtmb3IodmFyIHI9MDtyfD0xJmUsZT4+Pj0xLHI8PD0xLDA8LS10Oyk7cmV0dXJuIHI+Pj4xfWZ1bmN0aW9uIEEoZSx0LHIpe3ZhciBuLGkscz1uZXcgQXJyYXkoMTYpLG89MDtmb3Iobj0xO248PWw7bisrKXNbbl09bz1vK3Jbbi0xXTw8MTtmb3IoaT0wO2k8PXQ7aSsrKXt2YXIgYT1lWzIqaSsxXTswIT09YSYmKGVbMippXT1FKHNbYV0rKyxhKSl9fWZ1bmN0aW9uIFIoZSl7dmFyIHQ7Zm9yKHQ9MDt0PG87dCsrKWUuZHluX2x0cmVlWzIqdF09MDtmb3IodD0wO3Q8YTt0KyspZS5keW5fZHRyZWVbMip0XT0wO2Zvcih0PTA7dDwxOTt0KyspZS5ibF90cmVlWzIqdF09MDtlLmR5bl9sdHJlZVs1MTJdPTEsZS5vcHRfbGVuPWUuc3RhdGljX2xlbj0wLGUubGFzdF9saXQ9ZS5tYXRjaGVzPTB9ZnVuY3Rpb24gTyhlKXs4PGUuYmlfdmFsaWQ/TShlLGUuYmlfYnVmKTowPGUuYmlfdmFsaWQmJihlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT1lLmJpX2J1ZiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gaihlLHQscixuKXt2YXIgaT0yKnQscz0yKnI7cmV0dXJuIGVbaV08ZVtzXXx8ZVtpXT09PWVbc10mJm5bdF08PW5bcl19ZnVuY3Rpb24gSShlLHQscil7Zm9yKHZhciBuPWUuaGVhcFtyXSxpPXI8PDE7aTw9ZS5oZWFwX2xlbiYmKGk8ZS5oZWFwX2xlbiYmaih0LGUuaGVhcFtpKzFdLGUuaGVhcFtpXSxlLmRlcHRoKSYmaSsrLCFqKHQsbixlLmhlYXBbaV0sZS5kZXB0aCkpOyllLmhlYXBbcl09ZS5oZWFwW2ldLHI9aSxpPDw9MTtlLmhlYXBbcl09bn1mdW5jdGlvbiBOKGUsdCxyKXt2YXIgbixpLG8sYSxsPTA7aWYoMCE9PWUubGFzdF9saXQpZm9yKDtuPWUucGVuZGluZ19idWZbZS5kX2J1ZisyKmxdPDw4fGUucGVuZGluZ19idWZbZS5kX2J1ZisyKmwrMV0saT1lLnBlbmRpbmdfYnVmW2UubF9idWYrbF0sbCsrLDA9PT1uP1QoZSxpLHQpOihUKGUsKG89YltpXSkrcysxLHQpLDAhPT0oYT1jW29dKSYmQyhlLGktPWdbb10sYSksVChlLG89UygtLW4pLHIpLDAhPT0oYT11W29dKSYmQyhlLG4tPV9bb10sYSkpLGw8ZS5sYXN0X2xpdDspO1QoZSwyNTYsdCl9ZnVuY3Rpb24gUChlLHQpe3ZhciByLG4saSxzPXQuZHluX3RyZWUsbz10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxhPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxjPXQuc3RhdF9kZXNjLmVsZW1zLHU9LTE7Zm9yKGUuaGVhcF9sZW49MCxlLmhlYXBfbWF4PTU3MyxyPTA7cjxjO3IrKykwIT09c1syKnJdPyhlLmhlYXBbKytlLmhlYXBfbGVuXT11PXIsZS5kZXB0aFtyXT0wKTpzWzIqcisxXT0wO2Zvcig7ZS5oZWFwX2xlbjwyOylzWzIqKGk9ZS5oZWFwWysrZS5oZWFwX2xlbl09dTwyPysrdTowKV09MSxlLmRlcHRoW2ldPTAsZS5vcHRfbGVuLS0sYSYmKGUuc3RhdGljX2xlbi09b1syKmkrMV0pO2Zvcih0Lm1heF9jb2RlPXUscj1lLmhlYXBfbGVuPj4xOzE8PXI7ci0tKUkoZSxzLHIpO2ZvcihpPWM7cj1lLmhlYXBbMV0sZS5oZWFwWzFdPWUuaGVhcFtlLmhlYXBfbGVuLS1dLEkoZSxzLDEpLG49ZS5oZWFwWzFdLGUuaGVhcFstLWUuaGVhcF9tYXhdPXIsZS5oZWFwWy0tZS5oZWFwX21heF09bixzWzIqaV09c1syKnJdK3NbMipuXSxlLmRlcHRoW2ldPShlLmRlcHRoW3JdPj1lLmRlcHRoW25dP2UuZGVwdGhbcl06ZS5kZXB0aFtuXSkrMSxzWzIqcisxXT1zWzIqbisxXT1pLGUuaGVhcFsxXT1pKyssSShlLHMsMSksMjw9ZS5oZWFwX2xlbjspO2UuaGVhcFstLWUuaGVhcF9tYXhdPWUuaGVhcFsxXSxmdW5jdGlvbihlLHQpe3ZhciByLG4saSxzLG8sYSxjPXQuZHluX3RyZWUsdT10Lm1heF9jb2RlLGg9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsZj10LnN0YXRfZGVzYy5oYXNfc3RyZWUsZD10LnN0YXRfZGVzYy5leHRyYV9iaXRzLHA9dC5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxtPXQuc3RhdF9kZXNjLm1heF9sZW5ndGgsYj0wO2ZvcihzPTA7czw9bDtzKyspZS5ibF9jb3VudFtzXT0wO2ZvcihjWzIqZS5oZWFwW2UuaGVhcF9tYXhdKzFdPTAscj1lLmhlYXBfbWF4KzE7cjw1NzM7cisrKW08KHM9Y1syKmNbMioobj1lLmhlYXBbcl0pKzFdKzFdKzEpJiYocz1tLGIrKyksY1syKm4rMV09cyx1PG58fChlLmJsX2NvdW50W3NdKyssbz0wLHA8PW4mJihvPWRbbi1wXSksYT1jWzIqbl0sZS5vcHRfbGVuKz1hKihzK28pLGYmJihlLnN0YXRpY19sZW4rPWEqKGhbMipuKzFdK28pKSk7aWYoMCE9PWIpe2Rve2ZvcihzPW0tMTswPT09ZS5ibF9jb3VudFtzXTspcy0tO2UuYmxfY291bnRbc10tLSxlLmJsX2NvdW50W3MrMV0rPTIsZS5ibF9jb3VudFttXS0tLGItPTJ9d2hpbGUoMDxiKTtmb3Iocz1tOzAhPT1zO3MtLSlmb3Iobj1lLmJsX2NvdW50W3NdOzAhPT1uOyl1PChpPWUuaGVhcFstLXJdKXx8KGNbMippKzFdIT09cyYmKGUub3B0X2xlbis9KHMtY1syKmkrMV0pKmNbMippXSxjWzIqaSsxXT1zKSxuLS0pfX0oZSx0KSxBKHMsdSxlLmJsX2NvdW50KX1mdW5jdGlvbiBCKGUsdCxyKXt2YXIgbixpLHM9LTEsbz10WzFdLGE9MCxsPTcsYz00O2ZvcigwPT09byYmKGw9MTM4LGM9MyksdFsyKihyKzEpKzFdPTY1NTM1LG49MDtuPD1yO24rKylpPW8sbz10WzIqKG4rMSkrMV0sKythPGwmJmk9PT1vfHwoYTxjP2UuYmxfdHJlZVsyKmldKz1hOjAhPT1pPyhpIT09cyYmZS5ibF90cmVlWzIqaV0rKyxlLmJsX3RyZWVbMzJdKyspOmE8PTEwP2UuYmxfdHJlZVszNF0rKzplLmJsX3RyZWVbMzZdKysscz1pLGM9KGE9MCk9PT1vPyhsPTEzOCwzKTppPT09bz8obD02LDMpOihsPTcsNCkpfWZ1bmN0aW9uIEQoZSx0LHIpe3ZhciBuLGkscz0tMSxvPXRbMV0sYT0wLGw9NyxjPTQ7Zm9yKDA9PT1vJiYobD0xMzgsYz0zKSxuPTA7bjw9cjtuKyspaWYoaT1vLG89dFsyKihuKzEpKzFdLCEoKythPGwmJmk9PT1vKSl7aWYoYTxjKWZvcig7VChlLGksZS5ibF90cmVlKSwwIT0tLWE7KTtlbHNlIDAhPT1pPyhpIT09cyYmKFQoZSxpLGUuYmxfdHJlZSksYS0tKSxUKGUsMTYsZS5ibF90cmVlKSxDKGUsYS0zLDIpKTphPD0xMD8oVChlLDE3LGUuYmxfdHJlZSksQyhlLGEtMywzKSk6KFQoZSwxOCxlLmJsX3RyZWUpLEMoZSxhLTExLDcpKTtzPWksYz0oYT0wKT09PW8/KGw9MTM4LDMpOmk9PT1vPyhsPTYsMyk6KGw9Nyw0KX19aShfKTt2YXIgRj0hMTtmdW5jdGlvbiBMKGUsdCxyLGkpe0MoZSwwKyhpPzE6MCksMyksZnVuY3Rpb24oZSx0LHIsaSl7TyhlKSxNKGUsciksTShlLH5yKSxuLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxyLGUucGVuZGluZyksZS5wZW5kaW5nKz1yfShlLHQscil9ci5fdHJfaW5pdD1mdW5jdGlvbihlKXtGfHwoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLHM9bmV3IEFycmF5KDE2KTtmb3Iobj1yPTA7bjwyODtuKyspZm9yKGdbbl09cixlPTA7ZTwxPDxjW25dO2UrKyliW3IrK109bjtmb3IoYltyLTFdPW4sbj1pPTA7bjwxNjtuKyspZm9yKF9bbl09aSxlPTA7ZTwxPDx1W25dO2UrKyltW2krK109bjtmb3IoaT4+PTc7bjxhO24rKylmb3IoX1tuXT1pPDw3LGU9MDtlPDE8PHVbbl0tNztlKyspbVsyNTYraSsrXT1uO2Zvcih0PTA7dDw9bDt0Kyspc1t0XT0wO2ZvcihlPTA7ZTw9MTQzOylkWzIqZSsxXT04LGUrKyxzWzhdKys7Zm9yKDtlPD0yNTU7KWRbMiplKzFdPTksZSsrLHNbOV0rKztmb3IoO2U8PTI3OTspZFsyKmUrMV09NyxlKyssc1s3XSsrO2Zvcig7ZTw9Mjg3OylkWzIqZSsxXT04LGUrKyxzWzhdKys7Zm9yKEEoZCwyODcscyksZT0wO2U8YTtlKyspcFsyKmUrMV09NSxwWzIqZV09RShlLDUpO3k9bmV3IHgoZCxjLDI1NyxvLGwpLHY9bmV3IHgocCx1LDAsYSxsKSx3PW5ldyB4KG5ldyBBcnJheSgwKSxoLDAsMTksNyl9KCksRj0hMCksZS5sX2Rlc2M9bmV3IGsoZS5keW5fbHRyZWUseSksZS5kX2Rlc2M9bmV3IGsoZS5keW5fZHRyZWUsdiksZS5ibF9kZXNjPW5ldyBrKGUuYmxfdHJlZSx3KSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCxSKGUpfSxyLl90cl9zdG9yZWRfYmxvY2s9TCxyLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbihlLHQscixuKXt2YXIgaSxvLGE9MDswPGUubGV2ZWw/KDI9PT1lLnN0cm0uZGF0YV90eXBlJiYoZS5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbihlKXt2YXIgdCxyPTQwOTM2MjQ0NDc7Zm9yKHQ9MDt0PD0zMTt0Kysscj4+Pj0xKWlmKDEmciYmMCE9PWUuZHluX2x0cmVlWzIqdF0pcmV0dXJuIDA7aWYoMCE9PWUuZHluX2x0cmVlWzE4XXx8MCE9PWUuZHluX2x0cmVlWzIwXXx8MCE9PWUuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IodD0zMjt0PHM7dCsrKWlmKDAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiAxO3JldHVybiAwfShlKSksUChlLGUubF9kZXNjKSxQKGUsZS5kX2Rlc2MpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKEIoZSxlLmR5bl9sdHJlZSxlLmxfZGVzYy5tYXhfY29kZSksQihlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSxQKGUsZS5ibF9kZXNjKSx0PTE4OzM8PXQmJjA9PT1lLmJsX3RyZWVbMipmW3RdKzFdO3QtLSk7cmV0dXJuIGUub3B0X2xlbis9MyoodCsxKSs1KzUrNCx0fShlKSxpPWUub3B0X2xlbiszKzc+Pj4zLChvPWUuc3RhdGljX2xlbiszKzc+Pj4zKTw9aSYmKGk9bykpOmk9bz1yKzUscis0PD1pJiYtMSE9PXQ/TChlLHQscixuKTo0PT09ZS5zdHJhdGVneXx8bz09PWk/KEMoZSwyKyhuPzE6MCksMyksTihlLGQscCkpOihDKGUsNCsobj8xOjApLDMpLGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpO2ZvcihDKGUsdC0yNTcsNSksQyhlLHItMSw1KSxDKGUsbi00LDQpLGk9MDtpPG47aSsrKUMoZSxlLmJsX3RyZWVbMipmW2ldKzFdLDMpO0QoZSxlLmR5bl9sdHJlZSx0LTEpLEQoZSxlLmR5bl9kdHJlZSxyLTEpfShlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxhKzEpLE4oZSxlLmR5bl9sdHJlZSxlLmR5bl9kdHJlZSkpLFIoZSksbiYmTyhlKX0sci5fdHJfdGFsbHk9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0XT10Pj4+OCYyNTUsZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqZS5sYXN0X2xpdCsxXT0yNTUmdCxlLnBlbmRpbmdfYnVmW2UubF9idWYrZS5sYXN0X2xpdF09MjU1JnIsZS5sYXN0X2xpdCsrLDA9PT10P2UuZHluX2x0cmVlWzIqcl0rKzooZS5tYXRjaGVzKyssdC0tLGUuZHluX2x0cmVlWzIqKGJbcl0rcysxKV0rKyxlLmR5bl9kdHJlZVsyKlModCldKyspLGUubGFzdF9saXQ9PT1lLmxpdF9idWZzaXplLTF9LHIuX3RyX2FsaWduPWZ1bmN0aW9uKGUpe0MoZSwyLDMpLFQoZSwyNTYsZCksZnVuY3Rpb24oZSl7MTY9PT1lLmJpX3ZhbGlkPyhNKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTo4PD1lLmJpX3ZhbGlkJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109MjU1JmUuYmlfYnVmLGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX0oZSl9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUzOltmdW5jdGlvbihlLHQscil7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPVwiXCIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dLDU0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihlLHQpe2lmKCFlLnNldEltbWVkaWF0ZSl7dmFyIHIsaSxzLG8sYT0xLGw9e30sYz0hMSx1PWUuZG9jdW1lbnQsaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtoPWgmJmguc2V0VGltZW91dD9oOmUscj1cIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoZS5wcm9jZXNzKT9mdW5jdGlvbihlKXtuLm5leHRUaWNrKChmdW5jdGlvbigpe2QoZSl9KSl9OmZ1bmN0aW9uKCl7aWYoZS5wb3N0TWVzc2FnZSYmIWUuaW1wb3J0U2NyaXB0cyl7dmFyIHQ9ITAscj1lLm9ubWVzc2FnZTtyZXR1cm4gZS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXt0PSExfSxlLnBvc3RNZXNzYWdlKFwiXCIsXCIqXCIpLGUub25tZXNzYWdlPXIsdH19KCk/KG89XCJzZXRJbW1lZGlhdGUkXCIrTWF0aC5yYW5kb20oKStcIiRcIixlLmFkZEV2ZW50TGlzdGVuZXI/ZS5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHAsITEpOmUuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIixwKSxmdW5jdGlvbih0KXtlLnBvc3RNZXNzYWdlKG8rdCxcIipcIil9KTplLk1lc3NhZ2VDaGFubmVsPygocz1uZXcgTWVzc2FnZUNoYW5uZWwpLnBvcnQxLm9ubWVzc2FnZT1mdW5jdGlvbihlKXtkKGUuZGF0YSl9LGZ1bmN0aW9uKGUpe3MucG9ydDIucG9zdE1lc3NhZ2UoZSl9KTp1JiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gdS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpPyhpPXUuZG9jdW1lbnRFbGVtZW50LGZ1bmN0aW9uKGUpe3ZhciB0PXUuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTt0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2QoZSksdC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxpLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH0saS5hcHBlbmRDaGlsZCh0KX0pOmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZCwwLGUpfSxoLnNldEltbWVkaWF0ZT1mdW5jdGlvbihlKXtcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiYoZT1uZXcgRnVuY3Rpb24oXCJcIitlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpLG49MDtuPHQubGVuZ3RoO24rKyl0W25dPWFyZ3VtZW50c1tuKzFdO3ZhciBpPXtjYWxsYmFjazplLGFyZ3M6dH07cmV0dXJuIGxbYV09aSxyKGEpLGErK30saC5jbGVhckltbWVkaWF0ZT1mfWZ1bmN0aW9uIGYoZSl7ZGVsZXRlIGxbZV19ZnVuY3Rpb24gZChlKXtpZihjKXNldFRpbWVvdXQoZCwwLGUpO2Vsc2V7dmFyIHQ9bFtlXTtpZih0KXtjPSEwO3RyeXshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jYWxsYmFjayxyPWUuYXJncztzd2l0Y2goci5sZW5ndGgpe2Nhc2UgMDp0KCk7YnJlYWs7Y2FzZSAxOnQoclswXSk7YnJlYWs7Y2FzZSAyOnQoclswXSxyWzFdKTticmVhaztjYXNlIDM6dChyWzBdLHJbMV0sclsyXSk7YnJlYWs7ZGVmYXVsdDp0LmFwcGx5KHZvaWQgMCxyKX19KHQpfWZpbmFsbHl7ZihlKSxjPSExfX19fWZ1bmN0aW9uIHAodCl7dC5zb3VyY2U9PT1lJiZcInN0cmluZ1wiPT10eXBlb2YgdC5kYXRhJiYwPT09dC5kYXRhLmluZGV4T2YobykmJmQoK3QuZGF0YS5zbGljZShvLmxlbmd0aCkpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGY/dm9pZCAwPT09ZT90aGlzOmU6c2VsZil9KS5jYWxsKHRoaXMsdm9pZCAwIT09aT9pOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV19LHt9LFsxMF0pKDEwKX0pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30sZShcImJ1ZmZlclwiKS5CdWZmZXIsYXJndW1lbnRzWzNdLGFyZ3VtZW50c1s0XSxhcmd1bWVudHNbNV0sYXJndW1lbnRzWzZdLGUoXCJ0aW1lcnNcIikuc2V0SW1tZWRpYXRlKX0se19wcm9jZXNzOjQ2NyxidWZmZXI6MjIwLHRpbWVyczo1MjN9XSw0NDI6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9L1tcXFxcXiQuKis/KClbXFxde318XS9nLG49UmVnRXhwKHIuc291cmNlKSxpPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSxzPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixvPWl8fHN8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsbD1vLlN5bWJvbCxjPWw/bC5wcm90b3R5cGU6dm9pZCAwLHU9Yz9jLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBoKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKGZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfShlKSYmXCJbb2JqZWN0IFN5bWJvbF1cIj09YS5jYWxsKGUpfShlKSlyZXR1cm4gdT91LmNhbGwoZSk6XCJcIjt2YXIgdD1lK1wiXCI7cmV0dXJuXCIwXCI9PXQmJjEvZT09LTEvMD9cIi0wXCI6dH10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuKGU9bnVsbD09KHQ9ZSk/XCJcIjpoKHQpKSYmbi50ZXN0KGUpP2UucmVwbGFjZShyLFwiXFxcXCQmXCIpOmV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ0MzpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1cIltvYmplY3QgQXJndW1lbnRzXVwiLGk9XCJbb2JqZWN0IE1hcF1cIixzPVwiW29iamVjdCBPYmplY3RdXCIsbz1cIltvYmplY3QgU2V0XVwiLGE9L1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxsPS9eXFx3KiQvLGM9L15cXC4vLHU9L1teLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCQpKS9nLGg9L1xcXFwoXFxcXCk/L2csZj0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLGQ9L14oPzowfFsxLTldXFxkKikkLyxwPXt9O3BbXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIl09cFtcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXT1wW1wiW29iamVjdCBJbnQ4QXJyYXldXCJdPXBbXCJbb2JqZWN0IEludDE2QXJyYXldXCJdPXBbXCJbb2JqZWN0IEludDMyQXJyYXldXCJdPXBbXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCJdPXBbXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiXT1wW1wiW29iamVjdCBVaW50MTZBcnJheV1cIl09cFtcIltvYmplY3QgVWludDMyQXJyYXldXCJdPSEwLHBbbl09cFtcIltvYmplY3QgQXJyYXldXCJdPXBbXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiXT1wW1wiW29iamVjdCBCb29sZWFuXVwiXT1wW1wiW29iamVjdCBEYXRhVmlld11cIl09cFtcIltvYmplY3QgRGF0ZV1cIl09cFtcIltvYmplY3QgRXJyb3JdXCJdPXBbXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXT1wW2ldPXBbXCJbb2JqZWN0IE51bWJlcl1cIl09cFtzXT1wW1wiW29iamVjdCBSZWdFeHBdXCJdPXBbb109cFtcIltvYmplY3QgU3RyaW5nXVwiXT1wW1wiW29iamVjdCBXZWFrTWFwXVwiXT0hMTt2YXIgbT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsYj1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZz1tfHxifHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkseT1cIm9iamVjdFwiPT10eXBlb2YgciYmciYmIXIubm9kZVR5cGUmJnIsdj15JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsdz12JiZ2LmV4cG9ydHM9PT15JiZtLnByb2Nlc3MsXz1mdW5jdGlvbigpe3RyeXtyZXR1cm4gdyYmdy5iaW5kaW5nKFwidXRpbFwiKX1jYXRjaChlKXt9fSgpLHg9XyYmXy5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gayhlLHQscixuKXtmb3IodmFyIGk9LTEscz1lP2UubGVuZ3RoOjA7KytpPHM7KXt2YXIgbz1lW2ldO3QobixvLHIobyksZSl9cmV0dXJuIG59ZnVuY3Rpb24gUyhlLHQpe2Zvcih2YXIgcj0tMSxuPWU/ZS5sZW5ndGg6MDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTShlKXt2YXIgdD0hMTtpZihudWxsIT1lJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLnRvU3RyaW5nKXRyeXt0PSEhKGUrXCJcIil9Y2F0Y2goZSl7fXJldHVybiB0fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUsbil7clsrK3RdPVtuLGVdfSkpLHJ9ZnVuY3Rpb24gVChlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7clsrK3RdPWV9KSkscn12YXIgRSxBLFIsTz1BcnJheS5wcm90b3R5cGUsaj1GdW5jdGlvbi5wcm90b3R5cGUsST1PYmplY3QucHJvdG90eXBlLE49Z1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxQPShFPS9bXi5dKyQvLmV4ZWMoTiYmTi5rZXlzJiZOLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIrRTpcIlwiLEI9ai50b1N0cmluZyxEPUkuaGFzT3duUHJvcGVydHksRj1JLnRvU3RyaW5nLEw9UmVnRXhwKFwiXlwiK0IuY2FsbChEKS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLHo9Zy5TeW1ib2wsVT1nLlVpbnQ4QXJyYXksJD1JLnByb3BlcnR5SXNFbnVtZXJhYmxlLEg9Ty5zcGxpY2UsVj0oQT1PYmplY3Qua2V5cyxSPU9iamVjdCxmdW5jdGlvbihlKXtyZXR1cm4gQShSKGUpKX0pLHE9Q2UoZyxcIkRhdGFWaWV3XCIpLFc9Q2UoZyxcIk1hcFwiKSxYPUNlKGcsXCJQcm9taXNlXCIpLEs9Q2UoZyxcIlNldFwiKSxZPUNlKGcsXCJXZWFrTWFwXCIpLFo9Q2UoT2JqZWN0LFwiY3JlYXRlXCIpLEc9TmUocSksSj1OZShXKSxRPU5lKFgpLGVlPU5lKEspLHRlPU5lKFkpLHJlPXo/ei5wcm90b3R5cGU6dm9pZCAwLG5lPXJlP3JlLnZhbHVlT2Y6dm9pZCAwLGllPXJlP3JlLnRvU3RyaW5nOnZvaWQgMDtmdW5jdGlvbiBzZShlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBvZShlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBhZShlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBsZShlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgYWU7Kyt0PHI7KXRoaXMuYWRkKGVbdF0pfWZ1bmN0aW9uIGNlKGUpe3RoaXMuX19kYXRhX189bmV3IG9lKGUpfWZ1bmN0aW9uIHVlKGUsdCl7dmFyIHI9VWUoZSl8fHplKGUpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByPS0xLG49QXJyYXkoZSk7KytyPGU7KW5bcl09dChyKTtyZXR1cm4gbn0oZS5sZW5ndGgsU3RyaW5nKTpbXSxuPXIubGVuZ3RoLGk9ISFuO2Zvcih2YXIgcyBpbiBlKSF0JiYhRC5jYWxsKGUscyl8fGkmJihcImxlbmd0aFwiPT1zfHxFZShzLG4pKXx8ci5wdXNoKHMpO3JldHVybiByfWZ1bmN0aW9uIGhlKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoO3ItLTspaWYoTGUoZVtyXVswXSx0KSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBmZShlLHQscixuKXtyZXR1cm4gbWUoZSwoZnVuY3Rpb24oZSxpLHMpe3QobixlLHIoZSkscyl9KSksbn1zZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVo/WihudWxsKTp7fX0sc2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdfSxzZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187aWYoWil7dmFyIHI9dFtlXTtyZXR1cm5cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIj09PXI/dm9pZCAwOnJ9cmV0dXJuIEQuY2FsbCh0LGUpP3RbZV06dm9pZCAwfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIFo/dm9pZCAwIT09dFtlXTpELmNhbGwodCxlKX0sc2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9fZGF0YV9fW2VdPVomJnZvaWQgMD09PXQ/XCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCI6dCx0aGlzfSxvZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdfSxvZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1oZSh0LGUpO3JldHVybiEocjwwKSYmKHI9PXQubGVuZ3RoLTE/dC5wb3AoKTpILmNhbGwodCxyLDEpLCEwKX0sb2UucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9aGUodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfSxvZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBoZSh0aGlzLl9fZGF0YV9fLGUpPi0xfSxvZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPWhlKHIsZSk7cmV0dXJuIG48MD9yLnB1c2goW2UsdF0pOnJbbl1bMV09dCx0aGlzfSxhZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBzZSxtYXA6bmV3KFd8fG9lKSxzdHJpbmc6bmV3IHNlfX0sYWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gTWUodGhpcyxlKS5kZWxldGUoZSl9LGFlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE1lKHRoaXMsZSkuZ2V0KGUpfSxhZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiBNZSh0aGlzLGUpLmhhcyhlKX0sYWUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBNZSh0aGlzLGUpLnNldChlLHQpLHRoaXN9LGxlLnByb3RvdHlwZS5hZGQ9bGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIpLHRoaXN9LGxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGUpfSxjZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPW5ldyBvZX0sY2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5kZWxldGUoZSl9LGNlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfSxjZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0sY2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIG9lKXt2YXIgbj1yLl9fZGF0YV9fO2lmKCFXfHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbZSx0XSksdGhpcztyPXRoaXMuX19kYXRhX189bmV3IGFlKG4pfXJldHVybiByLnNldChlLHQpLHRoaXN9O3ZhciBkZSxwZSxtZT0oZGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmYmUoZSx0LFllKX0sZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybiBlO2lmKCEkZShlKSlyZXR1cm4gZGUoZSx0KTtmb3IodmFyIHI9ZS5sZW5ndGgsbj1wZT9yOi0xLGk9T2JqZWN0KGUpOyhwZT9uLS06KytuPHIpJiYhMSE9PXQoaVtuXSxuLGkpOyk7cmV0dXJuIGV9KSxiZT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe2Zvcih2YXIgaT0tMSxzPU9iamVjdCh0KSxvPW4odCksYT1vLmxlbmd0aDthLS07KXt2YXIgbD1vW2U/YTorK2ldO2lmKCExPT09cihzW2xdLGwscykpYnJlYWt9cmV0dXJuIHR9fSgpO2Z1bmN0aW9uIGdlKGUsdCl7Zm9yKHZhciByPTAsbj0odD1BZSh0LGUpP1t0XTprZSh0KSkubGVuZ3RoO251bGwhPWUmJnI8bjspZT1lW0llKHRbcisrXSldO3JldHVybiByJiZyPT1uP2U6dm9pZCAwfWZ1bmN0aW9uIHllKGUsdCl7cmV0dXJuIG51bGwhPWUmJnQgaW4gT2JqZWN0KGUpfWZ1bmN0aW9uIHZlKGUsdCxyLGEsbCl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IXFlKGUpJiYhV2UodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQscixhLGwsYyl7dmFyIHU9VWUoZSksaD1VZSh0KSxmPVwiW29iamVjdCBBcnJheV1cIixkPVwiW29iamVjdCBBcnJheV1cIjt1fHwoZj0oZj1UZShlKSk9PW4/czpmKTtofHwoZD0oZD1UZSh0KSk9PW4/czpkKTt2YXIgcD1mPT1zJiYhTShlKSxtPWQ9PXMmJiFNKHQpLGI9Zj09ZDtpZihiJiYhcClyZXR1cm4gY3x8KGM9bmV3IGNlKSx1fHxLZShlKT9TZShlLHQscixhLGwsYyk6ZnVuY3Rpb24oZSx0LHIsbixzLGEsbCl7c3dpdGNoKHIpe2Nhc2VcIltvYmplY3QgRGF0YVZpZXddXCI6aWYoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fGUuYnl0ZU9mZnNldCE9dC5ieXRlT2Zmc2V0KXJldHVybiExO2U9ZS5idWZmZXIsdD10LmJ1ZmZlcjtjYXNlXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiOnJldHVybiEoZS5ieXRlTGVuZ3RoIT10LmJ5dGVMZW5ndGh8fCFuKG5ldyBVKGUpLG5ldyBVKHQpKSk7Y2FzZVwiW29iamVjdCBCb29sZWFuXVwiOmNhc2VcIltvYmplY3QgRGF0ZV1cIjpjYXNlXCJbb2JqZWN0IE51bWJlcl1cIjpyZXR1cm4gTGUoK2UsK3QpO2Nhc2VcIltvYmplY3QgRXJyb3JdXCI6cmV0dXJuIGUubmFtZT09dC5uYW1lJiZlLm1lc3NhZ2U9PXQubWVzc2FnZTtjYXNlXCJbb2JqZWN0IFJlZ0V4cF1cIjpjYXNlXCJbb2JqZWN0IFN0cmluZ11cIjpyZXR1cm4gZT09dCtcIlwiO2Nhc2UgaTp2YXIgYz1DO2Nhc2Ugbzp2YXIgdT0yJmE7aWYoY3x8KGM9VCksZS5zaXplIT10LnNpemUmJiF1KXJldHVybiExO3ZhciBoPWwuZ2V0KGUpO2lmKGgpcmV0dXJuIGg9PXQ7YXw9MSxsLnNldChlLHQpO3ZhciBmPVNlKGMoZSksYyh0KSxuLHMsYSxsKTtyZXR1cm4gbC5kZWxldGUoZSksZjtjYXNlXCJbb2JqZWN0IFN5bWJvbF1cIjppZihuZSlyZXR1cm4gbmUuY2FsbChlKT09bmUuY2FsbCh0KX1yZXR1cm4hMX0oZSx0LGYscixhLGwsYyk7aWYoISgyJmwpKXt2YXIgZz1wJiZELmNhbGwoZSxcIl9fd3JhcHBlZF9fXCIpLHk9bSYmRC5jYWxsKHQsXCJfX3dyYXBwZWRfX1wiKTtpZihnfHx5KXt2YXIgdj1nP2UudmFsdWUoKTplLHc9eT90LnZhbHVlKCk6dDtyZXR1cm4gY3x8KGM9bmV3IGNlKSxyKHYsdyxhLGwsYyl9fWlmKCFiKXJldHVybiExO3JldHVybiBjfHwoYz1uZXcgY2UpLGZ1bmN0aW9uKGUsdCxyLG4saSxzKXt2YXIgbz0yJmksYT1ZZShlKSxsPWEubGVuZ3RoLGM9WWUodCkubGVuZ3RoO2lmKGwhPWMmJiFvKXJldHVybiExO3ZhciB1PWw7Zm9yKDt1LS07KXt2YXIgaD1hW3VdO2lmKCEobz9oIGluIHQ6RC5jYWxsKHQsaCkpKXJldHVybiExfXZhciBmPXMuZ2V0KGUpO2lmKGYmJnMuZ2V0KHQpKXJldHVybiBmPT10O3ZhciBkPSEwO3Muc2V0KGUsdCkscy5zZXQodCxlKTt2YXIgcD1vO2Zvcig7Kyt1PGw7KXtoPWFbdV07dmFyIG09ZVtoXSxiPXRbaF07aWYobil2YXIgZz1vP24oYixtLGgsdCxlLHMpOm4obSxiLGgsZSx0LHMpO2lmKCEodm9pZCAwPT09Zz9tPT09Ynx8cihtLGIsbixpLHMpOmcpKXtkPSExO2JyZWFrfXB8fChwPVwiY29uc3RydWN0b3JcIj09aCl9aWYoZCYmIXApe3ZhciB5PWUuY29uc3RydWN0b3Isdj10LmNvbnN0cnVjdG9yO3k9PXZ8fCEoXCJjb25zdHJ1Y3RvclwiaW4gZSl8fCEoXCJjb25zdHJ1Y3RvclwiaW4gdCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHkmJnkgaW5zdGFuY2VvZiB5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB2JiZ2IGluc3RhbmNlb2Ygdnx8KGQ9ITEpfXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxkfShlLHQscixhLGwsYyl9KGUsdCx2ZSxyLGEsbCkpfWZ1bmN0aW9uIHdlKGUpe3JldHVybiEoIXFlKGUpfHxmdW5jdGlvbihlKXtyZXR1cm4hIVAmJlAgaW4gZX0oZSkpJiYoSGUoZSl8fE0oZSk/TDpmKS50ZXN0KE5lKGUpKX1mdW5jdGlvbiBfZShlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6bnVsbD09ZT9aZTpcIm9iamVjdFwiPT10eXBlb2YgZT9VZShlKT9mdW5jdGlvbihlLHQpe2lmKEFlKGUpJiZSZSh0KSlyZXR1cm4gT2UoSWUoZSksdCk7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1udWxsPT1lP3ZvaWQgMDpnZShlLHQpO3JldHVybiB2b2lkIDA9PT1uP3I6bn0ocixlKTtyZXR1cm4gdm9pZCAwPT09biYmbj09PXQ/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmZnVuY3Rpb24oZSx0LHIpe3Q9QWUodCxlKT9bdF06a2UodCk7dmFyIG4saT0tMSxzPXQubGVuZ3RoO2Zvcig7KytpPHM7KXt2YXIgbz1JZSh0W2ldKTtpZighKG49bnVsbCE9ZSYmcihlLG8pKSlicmVhaztlPWVbb119aWYobilyZXR1cm4gbjtyZXR1cm4hIShzPWU/ZS5sZW5ndGg6MCkmJlZlKHMpJiZFZShvLHMpJiYoVWUoZSl8fHplKGUpKX0oZSx0LHllKX0ocixlKTp2ZSh0LG4sdm9pZCAwLDMpfX0oZVswXSxlWzFdKTpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD1ZZShlKSxyPXQubGVuZ3RoO2Zvcig7ci0tOyl7dmFyIG49dFtyXSxpPWVbbl07dFtyXT1bbixpLFJlKGkpXX1yZXR1cm4gdH0oZSk7aWYoMT09dC5sZW5ndGgmJnRbMF1bMl0pcmV0dXJuIE9lKHRbMF1bMF0sdFswXVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiByPT09ZXx8ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9ci5sZW5ndGgscz1pLG89IW47aWYobnVsbD09ZSlyZXR1cm4hcztmb3IoZT1PYmplY3QoZSk7aS0tOyl7dmFyIGE9cltpXTtpZihvJiZhWzJdP2FbMV0hPT1lW2FbMF1dOiEoYVswXWluIGUpKXJldHVybiExfWZvcig7KytpPHM7KXt2YXIgbD0oYT1yW2ldKVswXSxjPWVbbF0sdT1hWzFdO2lmKG8mJmFbMl0pe2lmKHZvaWQgMD09PWMmJiEobCBpbiBlKSlyZXR1cm4hMX1lbHNle3ZhciBoPW5ldyBjZTtpZihuKXZhciBmPW4oYyx1LGwsZSx0LGgpO2lmKCEodm9pZCAwPT09Zj92ZSh1LGMsbiwzLGgpOmYpKXJldHVybiExfX1yZXR1cm4hMH0ocixlLHQpfX0oZSk6QWUodD1lKT8ocj1JZSh0KSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVtyXX0pOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZ2UodCxlKX19KHQpO3ZhciB0LHJ9ZnVuY3Rpb24geGUoZSl7aWYocj0odD1lKSYmdC5jb25zdHJ1Y3RvcixuPVwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxJLHQhPT1uKXJldHVybiBWKGUpO3ZhciB0LHIsbixpPVtdO2Zvcih2YXIgcyBpbiBPYmplY3QoZSkpRC5jYWxsKGUscykmJlwiY29uc3RydWN0b3JcIiE9cyYmaS5wdXNoKHMpO3JldHVybiBpfWZ1bmN0aW9uIGtlKGUpe3JldHVybiBVZShlKT9lOmplKGUpfWZ1bmN0aW9uIFNlKGUsdCxyLG4saSxzKXt2YXIgbz0yJmksYT1lLmxlbmd0aCxsPXQubGVuZ3RoO2lmKGEhPWwmJiEobyYmbD5hKSlyZXR1cm4hMTt2YXIgYz1zLmdldChlKTtpZihjJiZzLmdldCh0KSlyZXR1cm4gYz09dDt2YXIgdT0tMSxoPSEwLGY9MSZpP25ldyBsZTp2b2lkIDA7Zm9yKHMuc2V0KGUsdCkscy5zZXQodCxlKTsrK3U8YTspe3ZhciBkPWVbdV0scD10W3VdO2lmKG4pdmFyIG09bz9uKHAsZCx1LHQsZSxzKTpuKGQscCx1LGUsdCxzKTtpZih2b2lkIDAhPT1tKXtpZihtKWNvbnRpbnVlO2g9ITE7YnJlYWt9aWYoZil7aWYoIVModCwoZnVuY3Rpb24oZSx0KXtpZighZi5oYXModCkmJihkPT09ZXx8cihkLGUsbixpLHMpKSlyZXR1cm4gZi5hZGQodCl9KSkpe2g9ITE7YnJlYWt9fWVsc2UgaWYoZCE9PXAmJiFyKGQscCxuLGkscykpe2g9ITE7YnJlYWt9fXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxofWZ1bmN0aW9uIE1lKGUsdCl7dmFyIHIsbixpPWUuX19kYXRhX187cmV0dXJuKFwic3RyaW5nXCI9PShuPXR5cGVvZihyPXQpKXx8XCJudW1iZXJcIj09bnx8XCJzeW1ib2xcIj09bnx8XCJib29sZWFuXCI9PW4/XCJfX3Byb3RvX19cIiE9PXI6bnVsbD09PXIpP2lbXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcImhhc2hcIl06aS5tYXB9ZnVuY3Rpb24gQ2UoZSx0KXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfShlLHQpO3JldHVybiB3ZShyKT9yOnZvaWQgMH12YXIgVGU9ZnVuY3Rpb24oZSl7cmV0dXJuIEYuY2FsbChlKX07ZnVuY3Rpb24gRWUoZSx0KXtyZXR1cm4hISh0PW51bGw9PXQ/OTAwNzE5OTI1NDc0MDk5MTp0KSYmKFwibnVtYmVyXCI9PXR5cGVvZiBlfHxkLnRlc3QoZSkpJiZlPi0xJiZlJTE9PTAmJmU8dH1mdW5jdGlvbiBBZShlLHQpe2lmKFVlKGUpKXJldHVybiExO3ZhciByPXR5cGVvZiBlO3JldHVybiEoXCJudW1iZXJcIiE9ciYmXCJzeW1ib2xcIiE9ciYmXCJib29sZWFuXCIhPXImJm51bGwhPWUmJiFYZShlKSl8fChsLnRlc3QoZSl8fCFhLnRlc3QoZSl8fG51bGwhPXQmJmUgaW4gT2JqZWN0KHQpKX1mdW5jdGlvbiBSZShlKXtyZXR1cm4gZT09ZSYmIXFlKGUpfWZ1bmN0aW9uIE9lKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiYocltlXT09PXQmJih2b2lkIDAhPT10fHxlIGluIE9iamVjdChyKSkpfX0ocSYmXCJbb2JqZWN0IERhdGFWaWV3XVwiIT1UZShuZXcgcShuZXcgQXJyYXlCdWZmZXIoMSkpKXx8VyYmVGUobmV3IFcpIT1pfHxYJiZcIltvYmplY3QgUHJvbWlzZV1cIiE9VGUoWC5yZXNvbHZlKCkpfHxLJiZUZShuZXcgSykhPW98fFkmJlwiW29iamVjdCBXZWFrTWFwXVwiIT1UZShuZXcgWSkpJiYoVGU9ZnVuY3Rpb24oZSl7dmFyIHQ9Ri5jYWxsKGUpLHI9dD09cz9lLmNvbnN0cnVjdG9yOnZvaWQgMCxuPXI/TmUocik6dm9pZCAwO2lmKG4pc3dpdGNoKG4pe2Nhc2UgRzpyZXR1cm5cIltvYmplY3QgRGF0YVZpZXddXCI7Y2FzZSBKOnJldHVybiBpO2Nhc2UgUTpyZXR1cm5cIltvYmplY3QgUHJvbWlzZV1cIjtjYXNlIGVlOnJldHVybiBvO2Nhc2UgdGU6cmV0dXJuXCJbb2JqZWN0IFdlYWtNYXBdXCJ9cmV0dXJuIHR9KTt2YXIgamU9RmUoKGZ1bmN0aW9uKGUpe3ZhciB0O2U9bnVsbD09KHQ9ZSk/XCJcIjpmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihYZShlKSlyZXR1cm4gaWU/aWUuY2FsbChlKTpcIlwiO3ZhciB0PWUrXCJcIjtyZXR1cm5cIjBcIj09dCYmMS9lPT0tMS8wP1wiLTBcIjp0fSh0KTt2YXIgcj1bXTtyZXR1cm4gYy50ZXN0KGUpJiZyLnB1c2goXCJcIiksZS5yZXBsYWNlKHUsKGZ1bmN0aW9uKGUsdCxuLGkpe3IucHVzaChuP2kucmVwbGFjZShoLFwiJDFcIik6dHx8ZSl9KSkscn0pKTtmdW5jdGlvbiBJZShlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZXx8WGUoZSkpcmV0dXJuIGU7dmFyIHQ9ZStcIlwiO3JldHVyblwiMFwiPT10JiYxL2U9PS0xLzA/XCItMFwiOnR9ZnVuY3Rpb24gTmUoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBCLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn12YXIgUGUsQmUsRGU9KFBlPWZ1bmN0aW9uKGUsdCxyKXtELmNhbGwoZSxyKT9lW3JdLnB1c2godCk6ZVtyXT1bdF19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9VWUoZSk/azpmZSxuPUJlP0JlKCk6e307cmV0dXJuIHIoZSxQZSxfZSh0KSxuKX0pO2Z1bmN0aW9uIEZlKGUsdCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiKTt2YXIgcj1mdW5jdGlvbigpe3ZhciBuPWFyZ3VtZW50cyxpPXQ/dC5hcHBseSh0aGlzLG4pOm5bMF0scz1yLmNhY2hlO2lmKHMuaGFzKGkpKXJldHVybiBzLmdldChpKTt2YXIgbz1lLmFwcGx5KHRoaXMsbik7cmV0dXJuIHIuY2FjaGU9cy5zZXQoaSxvKSxvfTtyZXR1cm4gci5jYWNoZT1uZXcoRmUuQ2FjaGV8fGFlKSxyfWZ1bmN0aW9uIExlKGUsdCl7cmV0dXJuIGU9PT10fHxlIT1lJiZ0IT10fWZ1bmN0aW9uIHplKGUpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gV2UoZSkmJiRlKGUpfShlKSYmRC5jYWxsKGUsXCJjYWxsZWVcIikmJighJC5jYWxsKGUsXCJjYWxsZWVcIil8fEYuY2FsbChlKT09bil9RmUuQ2FjaGU9YWU7dmFyIFVlPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gJGUoZSl7cmV0dXJuIG51bGwhPWUmJlZlKGUubGVuZ3RoKSYmIUhlKGUpfWZ1bmN0aW9uIEhlKGUpe3ZhciB0PXFlKGUpP0YuY2FsbChlKTpcIlwiO3JldHVyblwiW29iamVjdCBGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXVwiPT10fWZ1bmN0aW9uIFZlKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlJiZlPi0xJiZlJTE9PTAmJmU8PTkwMDcxOTkyNTQ3NDA5OTF9ZnVuY3Rpb24gcWUoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX1mdW5jdGlvbiBXZShlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfWZ1bmN0aW9uIFhlKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfHxXZShlKSYmXCJbb2JqZWN0IFN5bWJvbF1cIj09Ri5jYWxsKGUpfXZhciBLZT14P2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KHgpOmZ1bmN0aW9uKGUpe3JldHVybiBXZShlKSYmVmUoZS5sZW5ndGgpJiYhIXBbRi5jYWxsKGUpXX07ZnVuY3Rpb24gWWUoZSl7cmV0dXJuICRlKGUpP3VlKGUpOnhlKGUpfWZ1bmN0aW9uIFplKGUpe3JldHVybiBlfXQuZXhwb3J0cz1EZX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw0NDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hMD09PWV8fCExPT09ZXx8ZnVuY3Rpb24oZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT10eXBlb2YgZX0oZSkmJlwiW29iamVjdCBCb29sZWFuXVwiPT1uLmNhbGwoZSl9fSx7fV0sNDQ1OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuPVwiW29iamVjdCBBcmd1bWVudHNdXCIsaT1cIltvYmplY3QgTWFwXVwiLHM9XCJbb2JqZWN0IE9iamVjdF1cIixvPVwiW29iamVjdCBTZXRdXCIsYT0vXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvLGw9L14oPzowfFsxLTldXFxkKikkLyxjPXt9O2NbXCJbb2JqZWN0IEZsb2F0MzJBcnJheV1cIl09Y1tcIltvYmplY3QgRmxvYXQ2NEFycmF5XVwiXT1jW1wiW29iamVjdCBJbnQ4QXJyYXldXCJdPWNbXCJbb2JqZWN0IEludDE2QXJyYXldXCJdPWNbXCJbb2JqZWN0IEludDMyQXJyYXldXCJdPWNbXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCJdPWNbXCJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XVwiXT1jW1wiW29iamVjdCBVaW50MTZBcnJheV1cIl09Y1tcIltvYmplY3QgVWludDMyQXJyYXldXCJdPSEwLGNbbl09Y1tcIltvYmplY3QgQXJyYXldXCJdPWNbXCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiXT1jW1wiW29iamVjdCBCb29sZWFuXVwiXT1jW1wiW29iamVjdCBEYXRhVmlld11cIl09Y1tcIltvYmplY3QgRGF0ZV1cIl09Y1tcIltvYmplY3QgRXJyb3JdXCJdPWNbXCJbb2JqZWN0IEZ1bmN0aW9uXVwiXT1jW2ldPWNbXCJbb2JqZWN0IE51bWJlcl1cIl09Y1tzXT1jW1wiW29iamVjdCBSZWdFeHBdXCJdPWNbb109Y1tcIltvYmplY3QgU3RyaW5nXVwiXT1jW1wiW29iamVjdCBXZWFrTWFwXVwiXT0hMTt2YXIgdT1cIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5PYmplY3Q9PT1PYmplY3QmJmUsaD1cIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZj11fHxofHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksZD1cIm9iamVjdFwiPT10eXBlb2YgciYmciYmIXIubm9kZVR5cGUmJnIscD1kJiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdCYmIXQubm9kZVR5cGUmJnQsbT1wJiZwLmV4cG9ydHM9PT1kLGI9bSYmdS5wcm9jZXNzLGc9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGImJmIuYmluZGluZyYmYi5iaW5kaW5nKFwidXRpbFwiKX1jYXRjaChlKXt9fSgpLHk9ZyYmZy5pc1R5cGVkQXJyYXk7ZnVuY3Rpb24gdihlLHQpe2Zvcih2YXIgcj0tMSxuPW51bGw9PWU/MDplLmxlbmd0aDsrK3I8bjspaWYodChlW3JdLHIsZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdyhlKXt2YXIgdD0tMSxyPUFycmF5KGUuc2l6ZSk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtyWysrdF09W24sZV19KSkscn1mdW5jdGlvbiBfKGUpe3ZhciB0PS0xLHI9QXJyYXkoZS5zaXplKTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlKXtyWysrdF09ZX0pKSxyfXZhciB4LGssUyxNPUFycmF5LnByb3RvdHlwZSxDPUZ1bmN0aW9uLnByb3RvdHlwZSxUPU9iamVjdC5wcm90b3R5cGUsRT1mW1wiX19jb3JlLWpzX3NoYXJlZF9fXCJdLEE9Qy50b1N0cmluZyxSPVQuaGFzT3duUHJvcGVydHksTz0oeD0vW14uXSskLy5leGVjKEUmJkUua2V5cyYmRS5rZXlzLklFX1BST1RPfHxcIlwiKSk/XCJTeW1ib2woc3JjKV8xLlwiK3g6XCJcIixqPVQudG9TdHJpbmcsST1SZWdFeHAoXCJeXCIrQS5jYWxsKFIpLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLFwiXFxcXCQmXCIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csXCIkMS4qP1wiKStcIiRcIiksTj1tP2YuQnVmZmVyOnZvaWQgMCxQPWYuU3ltYm9sLEI9Zi5VaW50OEFycmF5LEQ9VC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxGPU0uc3BsaWNlLEw9UD9QLnRvU3RyaW5nVGFnOnZvaWQgMCx6PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsVT1OP04uaXNCdWZmZXI6dm9pZCAwLCQ9KGs9T2JqZWN0LmtleXMsUz1PYmplY3QsZnVuY3Rpb24oZSl7cmV0dXJuIGsoUyhlKSl9KSxIPWdlKGYsXCJEYXRhVmlld1wiKSxWPWdlKGYsXCJNYXBcIikscT1nZShmLFwiUHJvbWlzZVwiKSxXPWdlKGYsXCJTZXRcIiksWD1nZShmLFwiV2Vha01hcFwiKSxLPWdlKE9iamVjdCxcImNyZWF0ZVwiKSxZPV9lKEgpLFo9X2UoViksRz1fZShxKSxKPV9lKFcpLFE9X2UoWCksZWU9UD9QLnByb3RvdHlwZTp2b2lkIDAsdGU9ZWU/ZWUudmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24gcmUoZSl7dmFyIHQ9LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gbmUoZSl7dmFyIHQ9LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gaWUoZSl7dmFyIHQ9LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gc2UoZSl7dmFyIHQ9LTEscj1udWxsPT1lPzA6ZS5sZW5ndGg7Zm9yKHRoaXMuX19kYXRhX189bmV3IGllOysrdDxyOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiBvZShlKXt2YXIgdD10aGlzLl9fZGF0YV9fPW5ldyBuZShlKTt0aGlzLnNpemU9dC5zaXplfWZ1bmN0aW9uIGFlKGUsdCl7dmFyIHI9U2UoZSksbj0hciYma2UoZSksaT0hciYmIW4mJk1lKGUpLHM9IXImJiFuJiYhaSYmUmUoZSksbz1yfHxufHxpfHxzLGE9bz9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0tMSxuPUFycmF5KGUpOysrcjxlOyluW3JdPXQocik7cmV0dXJuIG59KGUubGVuZ3RoLFN0cmluZyk6W10sbD1hLmxlbmd0aDtmb3IodmFyIGMgaW4gZSkhdCYmIVIuY2FsbChlLGMpfHxvJiYoXCJsZW5ndGhcIj09Y3x8aSYmKFwib2Zmc2V0XCI9PWN8fFwicGFyZW50XCI9PWMpfHxzJiYoXCJidWZmZXJcIj09Y3x8XCJieXRlTGVuZ3RoXCI9PWN8fFwiYnl0ZU9mZnNldFwiPT1jKXx8d2UoYyxsKSl8fGEucHVzaChjKTtyZXR1cm4gYX1mdW5jdGlvbiBsZShlLHQpe2Zvcih2YXIgcj1lLmxlbmd0aDtyLS07KWlmKHhlKGVbcl1bMF0sdCkpcmV0dXJuIHI7cmV0dXJuLTF9ZnVuY3Rpb24gY2UoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9cIltvYmplY3QgVW5kZWZpbmVkXVwiOlwiW29iamVjdCBOdWxsXVwiOkwmJkwgaW4gT2JqZWN0KGUpP2Z1bmN0aW9uKGUpe3ZhciB0PVIuY2FsbChlLEwpLHI9ZVtMXTt0cnl7ZVtMXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2goZSl7fXZhciBpPWouY2FsbChlKTtuJiYodD9lW0xdPXI6ZGVsZXRlIGVbTF0pO3JldHVybiBpfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gai5jYWxsKGUpfShlKX1mdW5jdGlvbiB1ZShlKXtyZXR1cm4gQWUoZSkmJmNlKGUpPT1ufWZ1bmN0aW9uIGhlKGUsdCxyLGEsbCl7cmV0dXJuIGU9PT10fHwobnVsbD09ZXx8bnVsbD09dHx8IUFlKGUpJiYhQWUodCk/ZSE9ZSYmdCE9dDpmdW5jdGlvbihlLHQscixhLGwsYyl7dmFyIHU9U2UoZSksaD1TZSh0KSxmPXU/XCJbb2JqZWN0IEFycmF5XVwiOnZlKGUpLGQ9aD9cIltvYmplY3QgQXJyYXldXCI6dmUodCkscD0oZj1mPT1uP3M6Zik9PXMsbT0oZD1kPT1uP3M6ZCk9PXMsYj1mPT1kO2lmKGImJk1lKGUpKXtpZighTWUodCkpcmV0dXJuITE7dT0hMCxwPSExfWlmKGImJiFwKXJldHVybiBjfHwoYz1uZXcgb2UpLHV8fFJlKGUpP3BlKGUsdCxyLGEsbCxjKTpmdW5jdGlvbihlLHQscixuLHMsYSxsKXtzd2l0Y2gocil7Y2FzZVwiW29iamVjdCBEYXRhVmlld11cIjppZihlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8ZS5ieXRlT2Zmc2V0IT10LmJ5dGVPZmZzZXQpcmV0dXJuITE7ZT1lLmJ1ZmZlcix0PXQuYnVmZmVyO2Nhc2VcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI6cmV0dXJuIShlLmJ5dGVMZW5ndGghPXQuYnl0ZUxlbmd0aHx8IWEobmV3IEIoZSksbmV3IEIodCkpKTtjYXNlXCJbb2JqZWN0IEJvb2xlYW5dXCI6Y2FzZVwiW29iamVjdCBEYXRlXVwiOmNhc2VcIltvYmplY3QgTnVtYmVyXVwiOnJldHVybiB4ZSgrZSwrdCk7Y2FzZVwiW29iamVjdCBFcnJvcl1cIjpyZXR1cm4gZS5uYW1lPT10Lm5hbWUmJmUubWVzc2FnZT09dC5tZXNzYWdlO2Nhc2VcIltvYmplY3QgUmVnRXhwXVwiOmNhc2VcIltvYmplY3QgU3RyaW5nXVwiOnJldHVybiBlPT10K1wiXCI7Y2FzZSBpOnZhciBjPXc7Y2FzZSBvOnZhciB1PTEmbjtpZihjfHwoYz1fKSxlLnNpemUhPXQuc2l6ZSYmIXUpcmV0dXJuITE7dmFyIGg9bC5nZXQoZSk7aWYoaClyZXR1cm4gaD09dDtufD0yLGwuc2V0KGUsdCk7dmFyIGY9cGUoYyhlKSxjKHQpLG4scyxhLGwpO3JldHVybiBsLmRlbGV0ZShlKSxmO2Nhc2VcIltvYmplY3QgU3ltYm9sXVwiOmlmKHRlKXJldHVybiB0ZS5jYWxsKGUpPT10ZS5jYWxsKHQpfXJldHVybiExfShlLHQsZixyLGEsbCxjKTtpZighKDEmcikpe3ZhciBnPXAmJlIuY2FsbChlLFwiX193cmFwcGVkX19cIikseT1tJiZSLmNhbGwodCxcIl9fd3JhcHBlZF9fXCIpO2lmKGd8fHkpe3ZhciB2PWc/ZS52YWx1ZSgpOmUseD15P3QudmFsdWUoKTp0O3JldHVybiBjfHwoYz1uZXcgb2UpLGwodix4LHIsYSxjKX19aWYoIWIpcmV0dXJuITE7cmV0dXJuIGN8fChjPW5ldyBvZSksZnVuY3Rpb24oZSx0LHIsbixpLHMpe3ZhciBvPTEmcixhPW1lKGUpLGw9YS5sZW5ndGgsYz1tZSh0KS5sZW5ndGg7aWYobCE9YyYmIW8pcmV0dXJuITE7dmFyIHU9bDtmb3IoO3UtLTspe3ZhciBoPWFbdV07aWYoIShvP2ggaW4gdDpSLmNhbGwodCxoKSkpcmV0dXJuITF9dmFyIGY9cy5nZXQoZSk7aWYoZiYmcy5nZXQodCkpcmV0dXJuIGY9PXQ7dmFyIGQ9ITA7cy5zZXQoZSx0KSxzLnNldCh0LGUpO3ZhciBwPW87Zm9yKDsrK3U8bDspe2g9YVt1XTt2YXIgbT1lW2hdLGI9dFtoXTtpZihuKXZhciBnPW8/bihiLG0saCx0LGUscyk6bihtLGIsaCxlLHQscyk7aWYoISh2b2lkIDA9PT1nP209PT1ifHxpKG0sYixyLG4scyk6Zykpe2Q9ITE7YnJlYWt9cHx8KHA9XCJjb25zdHJ1Y3RvclwiPT1oKX1pZihkJiYhcCl7dmFyIHk9ZS5jb25zdHJ1Y3Rvcix2PXQuY29uc3RydWN0b3I7eT09dnx8IShcImNvbnN0cnVjdG9yXCJpbiBlKXx8IShcImNvbnN0cnVjdG9yXCJpbiB0KXx8XCJmdW5jdGlvblwiPT10eXBlb2YgeSYmeSBpbnN0YW5jZW9mIHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHYmJnYgaW5zdGFuY2VvZiB2fHwoZD0hMSl9cmV0dXJuIHMuZGVsZXRlKGUpLHMuZGVsZXRlKHQpLGR9KGUsdCxyLGEsbCxjKX0oZSx0LHIsYSxoZSxsKSl9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuISghRWUoZSl8fGZ1bmN0aW9uKGUpe3JldHVybiEhTyYmTyBpbiBlfShlKSkmJihDZShlKT9JOmEpLnRlc3QoX2UoZSkpfWZ1bmN0aW9uIGRlKGUpe2lmKHI9KHQ9ZSkmJnQuY29uc3RydWN0b3Isbj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZyLnByb3RvdHlwZXx8VCx0IT09bilyZXR1cm4gJChlKTt2YXIgdCxyLG4saT1bXTtmb3IodmFyIHMgaW4gT2JqZWN0KGUpKVIuY2FsbChlLHMpJiZcImNvbnN0cnVjdG9yXCIhPXMmJmkucHVzaChzKTtyZXR1cm4gaX1mdW5jdGlvbiBwZShlLHQscixuLGkscyl7dmFyIG89MSZyLGE9ZS5sZW5ndGgsbD10Lmxlbmd0aDtpZihhIT1sJiYhKG8mJmw+YSkpcmV0dXJuITE7dmFyIGM9cy5nZXQoZSk7aWYoYyYmcy5nZXQodCkpcmV0dXJuIGM9PXQ7dmFyIHU9LTEsaD0hMCxmPTImcj9uZXcgc2U6dm9pZCAwO2ZvcihzLnNldChlLHQpLHMuc2V0KHQsZSk7Kyt1PGE7KXt2YXIgZD1lW3VdLHA9dFt1XTtpZihuKXZhciBtPW8/bihwLGQsdSx0LGUscyk6bihkLHAsdSxlLHQscyk7aWYodm9pZCAwIT09bSl7aWYobSljb250aW51ZTtoPSExO2JyZWFrfWlmKGYpe2lmKCF2KHQsKGZ1bmN0aW9uKGUsdCl7aWYobz10LCFmLmhhcyhvKSYmKGQ9PT1lfHxpKGQsZSxyLG4scykpKXJldHVybiBmLnB1c2godCk7dmFyIG99KSkpe2g9ITE7YnJlYWt9fWVsc2UgaWYoZCE9PXAmJiFpKGQscCxyLG4scykpe2g9ITE7YnJlYWt9fXJldHVybiBzLmRlbGV0ZShlKSxzLmRlbGV0ZSh0KSxofWZ1bmN0aW9uIG1lKGUpe3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49dChlKTtyZXR1cm4gU2UoZSk/bjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0tMSxuPXQubGVuZ3RoLGk9ZS5sZW5ndGg7KytyPG47KWVbaStyXT10W3JdO3JldHVybiBlfShuLHIoZSkpfShlLE9lLHllKX1mdW5jdGlvbiBiZShlLHQpe3ZhciByLG4saT1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0obj10eXBlb2Yocj10KSl8fFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCI9PW58fFwiYm9vbGVhblwiPT1uP1wiX19wcm90b19fXCIhPT1yOm51bGw9PT1yKT9pW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOmkubWFwfWZ1bmN0aW9uIGdlKGUsdCl7dmFyIHI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZT92b2lkIDA6ZVt0XX0oZSx0KTtyZXR1cm4gZmUocik/cjp2b2lkIDB9cmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1LP0sobnVsbCk6e30sdGhpcy5zaXplPTB9LHJlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oYXMoZSkmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2VdO3JldHVybiB0aGlzLnNpemUtPXQ/MTowLHR9LHJlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztpZihLKXt2YXIgcj10W2VdO3JldHVyblwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiPT09cj92b2lkIDA6cn1yZXR1cm4gUi5jYWxsKHQsZSk/dFtlXTp2b2lkIDB9LHJlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXztyZXR1cm4gSz92b2lkIDAhPT10W2VdOlIuY2FsbCh0LGUpfSxyZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhlKT8wOjEscltlXT1LJiZ2b2lkIDA9PT10P1wiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiOnQsdGhpc30sbmUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sbmUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fLHI9bGUodCxlKTtyZXR1cm4hKHI8MCkmJihyPT10Lmxlbmd0aC0xP3QucG9wKCk6Ri5jYWxsKHQsciwxKSwtLXRoaXMuc2l6ZSwhMCl9LG5lLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPWxlKHQsZSk7cmV0dXJuIHI8MD92b2lkIDA6dFtyXVsxXX0sbmUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gbGUodGhpcy5fX2RhdGFfXyxlKT4tMX0sbmUucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19kYXRhX18sbj1sZShyLGUpO3JldHVybiBuPDA/KCsrdGhpcy5zaXplLHIucHVzaChbZSx0XSkpOnJbbl1bMV09dCx0aGlzfSxpZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyByZSxtYXA6bmV3KFZ8fG5lKSxzdHJpbmc6bmV3IHJlfX0saWUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXt2YXIgdD1iZSh0aGlzLGUpLmRlbGV0ZShlKTtyZXR1cm4gdGhpcy5zaXplLT10PzE6MCx0fSxpZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBiZSh0aGlzLGUpLmdldChlKX0saWUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gYmUodGhpcyxlKS5oYXMoZSl9LGllLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgcj1iZSh0aGlzLGUpLG49ci5zaXplO3JldHVybiByLnNldChlLHQpLHRoaXMuc2l6ZSs9ci5zaXplPT1uPzA6MSx0aGlzfSxzZS5wcm90b3R5cGUuYWRkPXNlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChlLFwiX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfX1wiKSx0aGlzfSxzZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0sb2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1uZXcgbmUsdGhpcy5zaXplPTB9LG9lLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPXQuZGVsZXRlKGUpO3JldHVybiB0aGlzLnNpemU9dC5zaXplLHJ9LG9lLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGUpfSxvZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhlKX0sb2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYociBpbnN0YW5jZW9mIG5lKXt2YXIgbj1yLl9fZGF0YV9fO2lmKCFWfHxuLmxlbmd0aDwxOTkpcmV0dXJuIG4ucHVzaChbZSx0XSksdGhpcy5zaXplPSsrci5zaXplLHRoaXM7cj10aGlzLl9fZGF0YV9fPW5ldyBpZShuKX1yZXR1cm4gci5zZXQoZSx0KSx0aGlzLnNpemU9ci5zaXplLHRoaXN9O3ZhciB5ZT16P2Z1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1tdOihlPU9iamVjdChlKSxmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0tMSxuPW51bGw9PWU/MDplLmxlbmd0aCxpPTAscz1bXTsrK3I8bjspe3ZhciBvPWVbcl07dChvLHIsZSkmJihzW2krK109byl9cmV0dXJuIHN9KHooZSksKGZ1bmN0aW9uKHQpe3JldHVybiBELmNhbGwoZSx0KX0pKSl9OmZ1bmN0aW9uKCl7cmV0dXJuW119LHZlPWNlO2Z1bmN0aW9uIHdlKGUsdCl7cmV0dXJuISEodD1udWxsPT10PzkwMDcxOTkyNTQ3NDA5OTE6dCkmJihcIm51bWJlclwiPT10eXBlb2YgZXx8bC50ZXN0KGUpKSYmZT4tMSYmZSUxPT0wJiZlPHR9ZnVuY3Rpb24gX2UoZSl7aWYobnVsbCE9ZSl7dHJ5e3JldHVybiBBLmNhbGwoZSl9Y2F0Y2goZSl7fXRyeXtyZXR1cm4gZStcIlwifWNhdGNoKGUpe319cmV0dXJuXCJcIn1mdW5jdGlvbiB4ZShlLHQpe3JldHVybiBlPT09dHx8ZSE9ZSYmdCE9dH0oSCYmXCJbb2JqZWN0IERhdGFWaWV3XVwiIT12ZShuZXcgSChuZXcgQXJyYXlCdWZmZXIoMSkpKXx8ViYmdmUobmV3IFYpIT1pfHxxJiZcIltvYmplY3QgUHJvbWlzZV1cIiE9dmUocS5yZXNvbHZlKCkpfHxXJiZ2ZShuZXcgVykhPW98fFgmJlwiW29iamVjdCBXZWFrTWFwXVwiIT12ZShuZXcgWCkpJiYodmU9ZnVuY3Rpb24oZSl7dmFyIHQ9Y2UoZSkscj10PT1zP2UuY29uc3RydWN0b3I6dm9pZCAwLG49cj9fZShyKTpcIlwiO2lmKG4pc3dpdGNoKG4pe2Nhc2UgWTpyZXR1cm5cIltvYmplY3QgRGF0YVZpZXddXCI7Y2FzZSBaOnJldHVybiBpO2Nhc2UgRzpyZXR1cm5cIltvYmplY3QgUHJvbWlzZV1cIjtjYXNlIEo6cmV0dXJuIG87Y2FzZSBROnJldHVyblwiW29iamVjdCBXZWFrTWFwXVwifXJldHVybiB0fSk7dmFyIGtlPXVlKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/dWU6ZnVuY3Rpb24oZSl7cmV0dXJuIEFlKGUpJiZSLmNhbGwoZSxcImNhbGxlZVwiKSYmIUQuY2FsbChlLFwiY2FsbGVlXCIpfSxTZT1BcnJheS5pc0FycmF5O3ZhciBNZT1VfHxmdW5jdGlvbigpe3JldHVybiExfTtmdW5jdGlvbiBDZShlKXtpZighRWUoZSkpcmV0dXJuITE7dmFyIHQ9Y2UoZSk7cmV0dXJuXCJbb2JqZWN0IEZ1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBBc3luY0Z1bmN0aW9uXVwiPT10fHxcIltvYmplY3QgUHJveHldXCI9PXR9ZnVuY3Rpb24gVGUoZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGUmJmU+LTEmJmUlMT09MCYmZTw9OTAwNzE5OTI1NDc0MDk5MX1mdW5jdGlvbiBFZShlKXt2YXIgdD10eXBlb2YgZTtyZXR1cm4gbnVsbCE9ZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIG51bGwhPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlfXZhciBSZT15P2Z1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0KX19KHkpOmZ1bmN0aW9uKGUpe3JldHVybiBBZShlKSYmVGUoZS5sZW5ndGgpJiYhIWNbY2UoZSldfTtmdW5jdGlvbiBPZShlKXtyZXR1cm4gbnVsbCE9KHQ9ZSkmJlRlKHQubGVuZ3RoKSYmIUNlKHQpP2FlKGUpOmRlKGUpO3ZhciB0fXQuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBoZShlLHQpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw0NDY6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9XCJvYmplY3RcIj09dHlwZW9mIGUmJmUmJmUuT2JqZWN0PT09T2JqZWN0JiZlLG49XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGk9cnx8bnx8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHM9T2JqZWN0LnByb3RvdHlwZSxvPXMuaGFzT3duUHJvcGVydHksYT1zLnRvU3RyaW5nLGw9aS5TeW1ib2wsYz1sP2wudG9TdHJpbmdUYWc6dm9pZCAwO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIG51bGw9PWU/dm9pZCAwPT09ZT9cIltvYmplY3QgVW5kZWZpbmVkXVwiOlwiW29iamVjdCBOdWxsXVwiOmMmJmMgaW4gT2JqZWN0KGUpP2Z1bmN0aW9uKGUpe3ZhciB0PW8uY2FsbChlLGMpLHI9ZVtjXTt0cnl7ZVtjXT12b2lkIDA7dmFyIG49ITB9Y2F0Y2goZSl7fXZhciBpPWEuY2FsbChlKTtuJiYodD9lW2NdPXI6ZGVsZXRlIGVbY10pO3JldHVybiBpfShlKTpmdW5jdGlvbihlKXtyZXR1cm4gYS5jYWxsKGUpfShlKX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiBudWxsIT1lJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX0oZSkpcmV0dXJuITE7dmFyIHQ9dShlKTtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dHx8XCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBQcm94eV1cIj09dH19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7fV0sNDQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfX0se31dLDQ0ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZX19LHt9XSw0NDk6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHI9L15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLyxuPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlJiZlLk9iamVjdD09PU9iamVjdCYmZSxpPVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZixzPW58fGl8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtmdW5jdGlvbiBvKGUsdCl7cmV0dXJuISEoZT9lLmxlbmd0aDowKSYmZnVuY3Rpb24oZSx0LHIpe2lmKHQhPXQpcmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUubGVuZ3RoLHM9cisobj8xOi0xKTtmb3IoO24/cy0tOisrczxpOylpZih0KGVbc10scyxlKSlyZXR1cm4gcztyZXR1cm4tMX0oZSxsLHIpO3ZhciBuPXItMSxpPWUubGVuZ3RoO2Zvcig7KytuPGk7KWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfShlLHQsMCk+LTF9ZnVuY3Rpb24gYShlLHQscil7Zm9yKHZhciBuPS0xLGk9ZT9lLmxlbmd0aDowOysrbjxpOylpZihyKHQsZVtuXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZSE9ZX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIGUuaGFzKHQpfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9LTEscj1BcnJheShlLnNpemUpO3JldHVybiBlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3JbKyt0XT1lfSkpLHJ9dmFyIGgsZj1BcnJheS5wcm90b3R5cGUsZD1GdW5jdGlvbi5wcm90b3R5cGUscD1PYmplY3QucHJvdG90eXBlLG09c1tcIl9fY29yZS1qc19zaGFyZWRfX1wiXSxiPShoPS9bXi5dKyQvLmV4ZWMobSYmbS5rZXlzJiZtLmtleXMuSUVfUFJPVE98fFwiXCIpKT9cIlN5bWJvbChzcmMpXzEuXCIraDpcIlwiLGc9ZC50b1N0cmluZyx5PXAuaGFzT3duUHJvcGVydHksdj1wLnRvU3RyaW5nLHc9UmVnRXhwKFwiXlwiK2cuY2FsbCh5KS5yZXBsYWNlKC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZyxcIlxcXFwkJlwiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLFwiJDEuKj9cIikrXCIkXCIpLF89Zi5zcGxpY2UseD1JKHMsXCJNYXBcIiksaz1JKHMsXCJTZXRcIiksUz1JKE9iamVjdCxcImNyZWF0ZVwiKTtmdW5jdGlvbiBNKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLmNsZWFyKCk7Kyt0PHI7KXt2YXIgbj1lW3RdO3RoaXMuc2V0KG5bMF0sblsxXSl9fWZ1bmN0aW9uIEMoZSl7dmFyIHQ9LTEscj1lP2UubGVuZ3RoOjA7Zm9yKHRoaXMuY2xlYXIoKTsrK3Q8cjspe3ZhciBuPWVbdF07dGhpcy5zZXQoblswXSxuWzFdKX19ZnVuY3Rpb24gVChlKXt2YXIgdD0tMSxyPWU/ZS5sZW5ndGg6MDtmb3IodGhpcy5jbGVhcigpOysrdDxyOyl7dmFyIG49ZVt0XTt0aGlzLnNldChuWzBdLG5bMV0pfX1mdW5jdGlvbiBFKGUpe3ZhciB0PS0xLHI9ZT9lLmxlbmd0aDowO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBUOysrdDxyOyl0aGlzLmFkZChlW3RdKX1mdW5jdGlvbiBBKGUsdCl7Zm9yKHZhciByLG4saT1lLmxlbmd0aDtpLS07KWlmKChyPWVbaV1bMF0pPT09KG49dCl8fHIhPXImJm4hPW4pcmV0dXJuIGk7cmV0dXJuLTF9ZnVuY3Rpb24gUihlKXtyZXR1cm4hKCFOKGUpfHwodD1lLGImJmIgaW4gdCkpJiYoZnVuY3Rpb24oZSl7dmFyIHQ9TihlKT92LmNhbGwoZSk6XCJcIjtyZXR1cm5cIltvYmplY3QgRnVuY3Rpb25dXCI9PXR8fFwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl1cIj09dH0oZSl8fGZ1bmN0aW9uKGUpe3ZhciB0PSExO2lmKG51bGwhPWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGUudG9TdHJpbmcpdHJ5e3Q9ISEoZStcIlwiKX1jYXRjaChlKXt9cmV0dXJuIHR9KGUpP3c6cikudGVzdChmdW5jdGlvbihlKXtpZihudWxsIT1lKXt0cnl7cmV0dXJuIGcuY2FsbChlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBlK1wiXCJ9Y2F0Y2goZSl7fX1yZXR1cm5cIlwifShlKSk7dmFyIHR9TS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVM/UyhudWxsKTp7fX0sTS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhcyhlKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bZV19LE0ucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9fZGF0YV9fO2lmKFMpe3ZhciByPXRbZV07cmV0dXJuXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCI9PT1yP3ZvaWQgMDpyfXJldHVybiB5LmNhbGwodCxlKT90W2VdOnZvaWQgMH0sTS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX187cmV0dXJuIFM/dm9pZCAwIT09dFtlXTp5LmNhbGwodCxlKX0sTS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX19kYXRhX19bZV09UyYmdm9pZCAwPT09dD9cIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX19cIjp0LHRoaXN9LEMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz1bXX0sQy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX19kYXRhX18scj1BKHQsZSk7cmV0dXJuIShyPDApJiYocj09dC5sZW5ndGgtMT90LnBvcCgpOl8uY2FsbCh0LHIsMSksITApfSxDLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fX2RhdGFfXyxyPUEodCxlKTtyZXR1cm4gcjwwP3ZvaWQgMDp0W3JdWzFdfSxDLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIEEodGhpcy5fX2RhdGFfXyxlKT4tMX0sQy5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxuPUEocixlKTtyZXR1cm4gbjwwP3IucHVzaChbZSx0XSk6cltuXVsxXT10LHRoaXN9LFQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgTSxtYXA6bmV3KHh8fEMpLHN0cmluZzpuZXcgTX19LFQucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaih0aGlzLGUpLmRlbGV0ZShlKX0sVC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBqKHRoaXMsZSkuZ2V0KGUpfSxULnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGoodGhpcyxlKS5oYXMoZSl9LFQucHJvdG90eXBlLnNldD1mdW5jdGlvbihlLHQpe3JldHVybiBqKHRoaXMsZSkuc2V0KGUsdCksdGhpc30sRS5wcm90b3R5cGUuYWRkPUUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KGUsXCJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fXCIpLHRoaXN9LEUucHJvdG90eXBlLmhhcz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoZSl9O3ZhciBPPWsmJjEvdShuZXcgayhbLC0wXSkpWzFdPT0xLzA/ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBrKGUpfTpmdW5jdGlvbigpe307ZnVuY3Rpb24gaihlLHQpe3ZhciByLG4saT1lLl9fZGF0YV9fO3JldHVybihcInN0cmluZ1wiPT0obj10eXBlb2Yocj10KSl8fFwibnVtYmVyXCI9PW58fFwic3ltYm9sXCI9PW58fFwiYm9vbGVhblwiPT1uP1wiX19wcm90b19fXCIhPT1yOm51bGw9PT1yKT9pW1wic3RyaW5nXCI9PXR5cGVvZiB0P1wic3RyaW5nXCI6XCJoYXNoXCJdOmkubWFwfWZ1bmN0aW9uIEkoZSx0KXt2YXIgcj1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lP3ZvaWQgMDplW3RdfShlLHQpO3JldHVybiBSKHIpP3I6dm9pZCAwfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuISFlJiYoXCJvYmplY3RcIj09dHx8XCJmdW5jdGlvblwiPT10KX10LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUubGVuZ3RoP2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj0tMSxpPW8scz1lLmxlbmd0aCxsPSEwLGg9W10sZj1oO2lmKHIpbD0hMSxpPWE7ZWxzZSBpZihzPj0yMDApe3ZhciBkPXQ/bnVsbDpPKGUpO2lmKGQpcmV0dXJuIHUoZCk7bD0hMSxpPWMsZj1uZXcgRX1lbHNlIGY9dD9bXTpoO2U6Zm9yKDsrK248czspe3ZhciBwPWVbbl0sbT10P3QocCk6cDtpZihwPXJ8fDAhPT1wP3A6MCxsJiZtPT1tKXtmb3IodmFyIGI9Zi5sZW5ndGg7Yi0tOylpZihmW2JdPT09bSljb250aW51ZSBlO3QmJmYucHVzaChtKSxoLnB1c2gocCl9ZWxzZSBpKGYsbSxyKXx8KGYhPT1oJiZmLnB1c2gobSksaC5wdXNoKHApKX1yZXR1cm4gaH0oZSk6W119fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDQ1MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCJoYXNoLWJhc2VcIikscz1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLG89bmV3IEFycmF5KDE2KTtmdW5jdGlvbiBhKCl7aS5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZTw8dHxlPj4+MzItdH1mdW5jdGlvbiBjKGUsdCxyLG4saSxzLG8pe3JldHVybiBsKGUrKHQmcnx+dCZuKStpK3N8MCxvKSt0fDB9ZnVuY3Rpb24gdShlLHQscixuLGkscyxvKXtyZXR1cm4gbChlKyh0Jm58ciZ+bikraStzfDAsbykrdHwwfWZ1bmN0aW9uIGgoZSx0LHIsbixpLHMsbyl7cmV0dXJuIGwoZSsodF5yXm4pK2krc3wwLG8pK3R8MH1mdW5jdGlvbiBmKGUsdCxyLG4saSxzLG8pe3JldHVybiBsKGUrKHJeKHR8fm4pKStpK3N8MCxvKSt0fDB9bihhLGkpLGEucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9byx0PTA7dDwxNjsrK3QpZVt0XT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnQpO3ZhciByPXRoaXMuX2Esbj10aGlzLl9iLGk9dGhpcy5fYyxzPXRoaXMuX2Q7cj1jKHIsbixpLHMsZVswXSwzNjE0MDkwMzYwLDcpLHM9YyhzLHIsbixpLGVbMV0sMzkwNTQwMjcxMCwxMiksaT1jKGkscyxyLG4sZVsyXSw2MDYxMDU4MTksMTcpLG49YyhuLGkscyxyLGVbM10sMzI1MDQ0MTk2NiwyMikscj1jKHIsbixpLHMsZVs0XSw0MTE4NTQ4Mzk5LDcpLHM9YyhzLHIsbixpLGVbNV0sMTIwMDA4MDQyNiwxMiksaT1jKGkscyxyLG4sZVs2XSwyODIxNzM1OTU1LDE3KSxuPWMobixpLHMscixlWzddLDQyNDkyNjEzMTMsMjIpLHI9YyhyLG4saSxzLGVbOF0sMTc3MDAzNTQxNiw3KSxzPWMocyxyLG4saSxlWzldLDIzMzY1NTI4NzksMTIpLGk9YyhpLHMscixuLGVbMTBdLDQyOTQ5MjUyMzMsMTcpLG49YyhuLGkscyxyLGVbMTFdLDIzMDQ1NjMxMzQsMjIpLHI9YyhyLG4saSxzLGVbMTJdLDE4MDQ2MDM2ODIsNykscz1jKHMscixuLGksZVsxM10sNDI1NDYyNjE5NSwxMiksaT1jKGkscyxyLG4sZVsxNF0sMjc5Mjk2NTAwNiwxNykscj11KHIsbj1jKG4saSxzLHIsZVsxNV0sMTIzNjUzNTMyOSwyMiksaSxzLGVbMV0sNDEyOTE3MDc4Niw1KSxzPXUocyxyLG4saSxlWzZdLDMyMjU0NjU2NjQsOSksaT11KGkscyxyLG4sZVsxMV0sNjQzNzE3NzEzLDE0KSxuPXUobixpLHMscixlWzBdLDM5MjEwNjk5OTQsMjApLHI9dShyLG4saSxzLGVbNV0sMzU5MzQwODYwNSw1KSxzPXUocyxyLG4saSxlWzEwXSwzODAxNjA4Myw5KSxpPXUoaSxzLHIsbixlWzE1XSwzNjM0NDg4OTYxLDE0KSxuPXUobixpLHMscixlWzRdLDM4ODk0Mjk0NDgsMjApLHI9dShyLG4saSxzLGVbOV0sNTY4NDQ2NDM4LDUpLHM9dShzLHIsbixpLGVbMTRdLDMyNzUxNjM2MDYsOSksaT11KGkscyxyLG4sZVszXSw0MTA3NjAzMzM1LDE0KSxuPXUobixpLHMscixlWzhdLDExNjM1MzE1MDEsMjApLHI9dShyLG4saSxzLGVbMTNdLDI4NTAyODU4MjksNSkscz11KHMscixuLGksZVsyXSw0MjQzNTYzNTEyLDkpLGk9dShpLHMscixuLGVbN10sMTczNTMyODQ3MywxNCkscj1oKHIsbj11KG4saSxzLHIsZVsxMl0sMjM2ODM1OTU2MiwyMCksaSxzLGVbNV0sNDI5NDU4ODczOCw0KSxzPWgocyxyLG4saSxlWzhdLDIyNzIzOTI4MzMsMTEpLGk9aChpLHMscixuLGVbMTFdLDE4MzkwMzA1NjIsMTYpLG49aChuLGkscyxyLGVbMTRdLDQyNTk2NTc3NDAsMjMpLHI9aChyLG4saSxzLGVbMV0sMjc2Mzk3NTIzNiw0KSxzPWgocyxyLG4saSxlWzRdLDEyNzI4OTMzNTMsMTEpLGk9aChpLHMscixuLGVbN10sNDEzOTQ2OTY2NCwxNiksbj1oKG4saSxzLHIsZVsxMF0sMzIwMDIzNjY1NiwyMykscj1oKHIsbixpLHMsZVsxM10sNjgxMjc5MTc0LDQpLHM9aChzLHIsbixpLGVbMF0sMzkzNjQzMDA3NCwxMSksaT1oKGkscyxyLG4sZVszXSwzNTcyNDQ1MzE3LDE2KSxuPWgobixpLHMscixlWzZdLDc2MDI5MTg5LDIzKSxyPWgocixuLGkscyxlWzldLDM2NTQ2MDI4MDksNCkscz1oKHMscixuLGksZVsxMl0sMzg3MzE1MTQ2MSwxMSksaT1oKGkscyxyLG4sZVsxNV0sNTMwNzQyNTIwLDE2KSxyPWYocixuPWgobixpLHMscixlWzJdLDMyOTk2Mjg2NDUsMjMpLGkscyxlWzBdLDQwOTYzMzY0NTIsNikscz1mKHMscixuLGksZVs3XSwxMTI2ODkxNDE1LDEwKSxpPWYoaSxzLHIsbixlWzE0XSwyODc4NjEyMzkxLDE1KSxuPWYobixpLHMscixlWzVdLDQyMzc1MzMyNDEsMjEpLHI9ZihyLG4saSxzLGVbMTJdLDE3MDA0ODU1NzEsNikscz1mKHMscixuLGksZVszXSwyMzk5OTgwNjkwLDEwKSxpPWYoaSxzLHIsbixlWzEwXSw0MjkzOTE1NzczLDE1KSxuPWYobixpLHMscixlWzFdLDIyNDAwNDQ0OTcsMjEpLHI9ZihyLG4saSxzLGVbOF0sMTg3MzMxMzM1OSw2KSxzPWYocyxyLG4saSxlWzE1XSw0MjY0MzU1NTUyLDEwKSxpPWYoaSxzLHIsbixlWzZdLDI3MzQ3Njg5MTYsMTUpLG49ZihuLGkscyxyLGVbMTNdLDEzMDkxNTE2NDksMjEpLHI9ZihyLG4saSxzLGVbNF0sNDE0OTQ0NDIyNiw2KSxzPWYocyxyLG4saSxlWzExXSwzMTc0NzU2OTE3LDEwKSxpPWYoaSxzLHIsbixlWzJdLDcxODc4NzI1OSwxNSksbj1mKG4saSxzLHIsZVs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErcnwwLHRoaXMuX2I9dGhpcy5fYitufDAsdGhpcy5fYz10aGlzLl9jK2l8MCx0aGlzLl9kPXRoaXMuX2Qrc3wwfSxhLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIGU9cy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGUud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksZS53cml0ZUludDMyTEUodGhpcy5fYiw0KSxlLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGV9LHQuZXhwb3J0cz1hfSx7XCJoYXNoLWJhc2VcIjo0MjUsaW5oZXJpdHM6NDQwLFwic2FmZS1idWZmZXJcIjo0OTR9XSw0NTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYm4uanNcIiksaT1lKFwiYnJvcmFuZFwiKTtmdW5jdGlvbiBzKGUpe3RoaXMucmFuZD1lfHxuZXcgaS5SYW5kfXQuZXhwb3J0cz1zLHMuY3JlYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgcyhlKX0scy5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihlKXt2YXIgdD1lLmJpdExlbmd0aCgpLHI9TWF0aC5jZWlsKHQvOCk7ZG97dmFyIGk9bmV3IG4odGhpcy5yYW5kLmdlbmVyYXRlKHIpKX13aGlsZShpLmNtcChlKT49MCk7cmV0dXJuIGl9LHMucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj10LnN1YihlKTtyZXR1cm4gZS5hZGQodGhpcy5fcmFuZGJlbG93KHIpKX0scy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihlLHQscil7dmFyIGk9ZS5iaXRMZW5ndGgoKSxzPW4ubW9udChlKSxvPW5ldyBuKDEpLnRvUmVkKHMpO3R8fCh0PU1hdGgubWF4KDEsaS80OHwwKSk7Zm9yKHZhciBhPWUuc3VibigxKSxsPTA7IWEudGVzdG4obCk7bCsrKTtmb3IodmFyIGM9ZS5zaHJuKGwpLHU9YS50b1JlZChzKTt0PjA7dC0tKXt2YXIgaD10aGlzLl9yYW5kcmFuZ2UobmV3IG4oMiksYSk7ciYmcihoKTt2YXIgZj1oLnRvUmVkKHMpLnJlZFBvdyhjKTtpZigwIT09Zi5jbXAobykmJjAhPT1mLmNtcCh1KSl7Zm9yKHZhciBkPTE7ZDxsO2QrKyl7aWYoMD09PShmPWYucmVkU3FyKCkpLmNtcChvKSlyZXR1cm4hMTtpZigwPT09Zi5jbXAodSkpYnJlYWt9aWYoZD09PWwpcmV0dXJuITF9fXJldHVybiEwfSxzLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5iaXRMZW5ndGgoKSxpPW4ubW9udChlKSxzPW5ldyBuKDEpLnRvUmVkKGkpO3R8fCh0PU1hdGgubWF4KDEsci80OHwwKSk7Zm9yKHZhciBvPWUuc3VibigxKSxhPTA7IW8udGVzdG4oYSk7YSsrKTtmb3IodmFyIGw9ZS5zaHJuKGEpLGM9by50b1JlZChpKTt0PjA7dC0tKXt2YXIgdT10aGlzLl9yYW5kcmFuZ2UobmV3IG4oMiksbyksaD1lLmdjZCh1KTtpZigwIT09aC5jbXBuKDEpKXJldHVybiBoO3ZhciBmPXUudG9SZWQoaSkucmVkUG93KGwpO2lmKDAhPT1mLmNtcChzKSYmMCE9PWYuY21wKGMpKXtmb3IodmFyIGQ9MTtkPGE7ZCsrKXtpZigwPT09KGY9Zi5yZWRTcXIoKSkuY21wKHMpKXJldHVybiBmLmZyb21SZWQoKS5zdWJuKDEpLmdjZChlKTtpZigwPT09Zi5jbXAoYykpYnJlYWt9aWYoZD09PWEpcmV0dXJuKGY9Zi5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKGUpfX1yZXR1cm4hMX19LHtcImJuLmpzXCI6NDUyLGJyb3JhbmQ6MTg3fV0sNDUyOltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzE4NF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7YnVmZmVyOjE4OCxkdXA6MTg0fV0sNDUzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQpe2lmKCFlKXRocm93IG5ldyBFcnJvcih0fHxcIkFzc2VydGlvbiBmYWlsZWRcIil9dC5leHBvcnRzPW4sbi5lcXVhbD1mdW5jdGlvbihlLHQscil7aWYoZSE9dCl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIitlK1wiICE9IFwiK3QpfX0se31dLDQ1NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXI7ZnVuY3Rpb24gaShlKXtyZXR1cm4gMT09PWUubGVuZ3RoP1wiMFwiK2U6ZX1mdW5jdGlvbiBzKGUpe2Zvcih2YXIgdD1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1pKGVbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gdH1uLnRvQXJyYXk9ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLnNsaWNlKCk7aWYoIWUpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXJbbl09MHxlW25dO3JldHVybiByfWlmKFwiaGV4XCI9PT10KXsoZT1lLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIikpLmxlbmd0aCUyIT0wJiYoZT1cIjBcIitlKTtmb3Iobj0wO248ZS5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQoZVtuXStlW24rMV0sMTYpKX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKSxzPWk+Pjgsbz0yNTUmaTtzP3IucHVzaChzLG8pOnIucHVzaChvKX1yZXR1cm4gcn0sbi56ZXJvMj1pLG4udG9IZXg9cyxuLmVuY29kZT1mdW5jdGlvbihlLHQpe3JldHVyblwiaGV4XCI9PT10P3MoZSk6ZX19LHt9XSw0NTU6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOlwiYWVzLTEyOC1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjpcImFlcy0xMjgtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6XCJhZXMtMTI4LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOlwiYWVzLTEyOC1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6XCJhZXMtMTkyLWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjpcImFlcy0xOTItY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOlwiYWVzLTE5Mi1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6XCJhZXMtMTkyLWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjpcImFlcy0yNTYtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOlwiYWVzLTI1Ni1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6XCJhZXMtMjU2LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjpcImFlcy0yNTYtY2ZiXCJ9fSx7fV0sNDU2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImFzbjEuanNcIik7ci5jZXJ0aWZpY2F0ZT1lKFwiLi9jZXJ0aWZpY2F0ZVwiKTt2YXIgaT1uLmRlZmluZShcIlJTQVByaXZhdGVLZXlcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTFcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTJcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDFcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDJcIikuaW50KCksdGhpcy5rZXkoXCJjb2VmZmljaWVudFwiKS5pbnQoKSl9KSk7ci5SU0FQcml2YXRlS2V5PWk7dmFyIHM9bi5kZWZpbmUoXCJSU0FQdWJsaWNLZXlcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSl9KSk7ci5SU0FQdWJsaWNLZXk9czt2YXIgbz1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsKGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGEpLHRoaXMua2V5KFwic3ViamVjdFB1YmxpY0tleVwiKS5iaXRzdHIoKSl9KSk7ci5QdWJsaWNLZXk9bzt2YXIgYT1uLmRlZmluZShcIkFsZ29yaXRobUlkZW50aWZpZXJcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5vYmppZCgpLHRoaXMua2V5KFwibm9uZVwiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJjdXJ2ZVwiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpKS5vcHRpb25hbCgpKX0pKSxsPW4uZGVmaW5lKFwiUHJpdmF0ZUtleUluZm9cIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGEpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSkpO3IuUHJpdmF0ZUtleT1sO3ZhciBjPW4uZGVmaW5lKFwiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwiZGVjcnlwdFwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJrZGVcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImtkZXBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJzYWx0XCIpLm9jdHN0cigpLHRoaXMua2V5KFwiaXRlcnNcIikuaW50KCkpKSx0aGlzLmtleShcImNpcGhlclwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvXCIpLm9iamlkKCksdGhpcy5rZXkoXCJpdlwiKS5vY3RzdHIoKSkpKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pKTtyLkVuY3J5cHRlZFByaXZhdGVLZXk9Yzt2YXIgdT1uLmRlZmluZShcIkRTQVByaXZhdGVLZXlcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCksdGhpcy5rZXkoXCJwdWJfa2V5XCIpLmludCgpLHRoaXMua2V5KFwicHJpdl9rZXlcIikuaW50KCkpfSkpO3IuRFNBUHJpdmF0ZUtleT11LHIuRFNBcGFyYW09bi5kZWZpbmUoXCJEU0FwYXJhbVwiLChmdW5jdGlvbigpe3RoaXMuaW50KCl9KSk7dmFyIGg9bi5kZWZpbmUoXCJFQ1ByaXZhdGVLZXlcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlS2V5XCIpLm9jdHN0cigpLHRoaXMua2V5KFwicGFyYW1ldGVyc1wiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShmKSx0aGlzLmtleShcInB1YmxpY0tleVwiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pKTtyLkVDUHJpdmF0ZUtleT1oO3ZhciBmPW4uZGVmaW5lKFwiRUNQYXJhbWV0ZXJzXCIsKGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KSk7ci5zaWduYXR1cmU9bi5kZWZpbmUoXCJzaWduYXR1cmVcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInJcIikuaW50KCksdGhpcy5rZXkoXCJzXCIpLmludCgpKX0pKX0se1wiLi9jZXJ0aWZpY2F0ZVwiOjQ1NyxcImFzbjEuanNcIjoxNzB9XSw0NTc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiYXNuMS5qc1wiKSxpPW4uZGVmaW5lKFwiVGltZVwiLChmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSkscz1uLmRlZmluZShcIkF0dHJpYnV0ZVR5cGVWYWx1ZVwiLChmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidHlwZVwiKS5vYmppZCgpLHRoaXMua2V5KFwidmFsdWVcIikuYW55KCkpfSkpLG89bi5kZWZpbmUoXCJBbGdvcml0aG1JZGVudGlmaWVyXCIsKGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikub2JqaWQoKSx0aGlzLmtleShcInBhcmFtZXRlcnNcIikub3B0aW9uYWwoKSx0aGlzLmtleShcImN1cnZlXCIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSksYT1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsKGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKG8pLHRoaXMua2V5KFwic3ViamVjdFB1YmxpY0tleVwiKS5iaXRzdHIoKSl9KSksbD1uLmRlZmluZShcIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWVcIiwoZnVuY3Rpb24oKXt0aGlzLnNldG9mKHMpfSkpLGM9bi5kZWZpbmUoXCJSRE5TZXF1ZW5jZVwiLChmdW5jdGlvbigpe3RoaXMuc2Vxb2YobCl9KSksdT1uLmRlZmluZShcIk5hbWVcIiwoZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoYyl9KX0pKSxoPW4uZGVmaW5lKFwiVmFsaWRpdHlcIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm5vdEJlZm9yZVwiKS51c2UoaSksdGhpcy5rZXkoXCJub3RBZnRlclwiKS51c2UoaSkpfSkpLGY9bi5kZWZpbmUoXCJFeHRlbnNpb25cIiwoZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImV4dG5JRFwiKS5vYmppZCgpLHRoaXMua2V5KFwiY3JpdGljYWxcIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoXCJleHRuVmFsdWVcIikub2N0c3RyKCkpfSkpLGQ9bi5kZWZpbmUoXCJUQlNDZXJ0aWZpY2F0ZVwiLChmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KFwic2VyaWFsTnVtYmVyXCIpLmludCgpLHRoaXMua2V5KFwic2lnbmF0dXJlXCIpLnVzZShvKSx0aGlzLmtleShcImlzc3VlclwiKS51c2UodSksdGhpcy5rZXkoXCJ2YWxpZGl0eVwiKS51c2UoaCksdGhpcy5rZXkoXCJzdWJqZWN0XCIpLnVzZSh1KSx0aGlzLmtleShcInN1YmplY3RQdWJsaWNLZXlJbmZvXCIpLnVzZShhKSx0aGlzLmtleShcImlzc3VlclVuaXF1ZUlEXCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJzdWJqZWN0VW5pcXVlSURcIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleShcImV4dGVuc2lvbnNcIikuZXhwbGljaXQoMykuc2Vxb2YoZikub3B0aW9uYWwoKSl9KSkscD1uLmRlZmluZShcIlg1MDlDZXJ0aWZpY2F0ZVwiLChmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidGJzQ2VydGlmaWNhdGVcIikudXNlKGQpLHRoaXMua2V5KFwic2lnbmF0dXJlQWxnb3JpdGhtXCIpLnVzZShvKSx0aGlzLmtleShcInNpZ25hdHVyZVZhbHVlXCIpLmJpdHN0cigpKX0pKTt0LmV4cG9ydHM9cH0se1wiYXNuMS5qc1wiOjE3MH1dLDQ1ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xcblxccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcXG5cXHJdKyhbMC05QS16XFxuXFxyKy89XSspW1xcblxccl0rL20saT0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20scz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcXG5cXHIrLz1dKyktLS0tLUVORCBcXDEtLS0tLSQvbSxvPWUoXCJldnBfYnl0ZXN0b2tleVwiKSxhPWUoXCJicm93c2VyaWZ5LWFlc1wiKSxsPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsYz1lLnRvU3RyaW5nKCksdT1jLm1hdGNoKG4pO2lmKHUpe3ZhciBoPVwiYWVzXCIrdVsxXSxmPWwuZnJvbSh1WzJdLFwiaGV4XCIpLGQ9bC5mcm9tKHVbM10ucmVwbGFjZSgvW1xcclxcbl0vZyxcIlwiKSxcImJhc2U2NFwiKSxwPW8odCxmLnNsaWNlKDAsOCkscGFyc2VJbnQodVsxXSwxMCkpLmtleSxtPVtdLGI9YS5jcmVhdGVEZWNpcGhlcml2KGgscCxmKTttLnB1c2goYi51cGRhdGUoZCkpLG0ucHVzaChiLmZpbmFsKCkpLHI9bC5jb25jYXQobSl9ZWxzZXt2YXIgZz1jLm1hdGNoKHMpO3I9bC5mcm9tKGdbMl0ucmVwbGFjZSgvW1xcclxcbl0vZyxcIlwiKSxcImJhc2U2NFwiKX1yZXR1cm57dGFnOmMubWF0Y2goaSlbMV0sZGF0YTpyfX19LHtcImJyb3dzZXJpZnktYWVzXCI6MTkxLGV2cF9ieXRlc3Rva2V5OjQyMyxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDU5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vYXNuMVwiKSxpPWUoXCIuL2Flc2lkLmpzb25cIikscz1lKFwiLi9maXhQcm9jXCIpLG89ZShcImJyb3dzZXJpZnktYWVzXCIpLGE9ZShcInBia2RmMlwiKSxsPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gYyhlKXt2YXIgdDtcIm9iamVjdFwiIT10eXBlb2YgZXx8bC5pc0J1ZmZlcihlKXx8KHQ9ZS5wYXNzcGhyYXNlLGU9ZS5rZXkpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1sLmZyb20oZSkpO3ZhciByLGMsdT1zKGUsdCksaD11LnRhZyxmPXUuZGF0YTtzd2l0Y2goaCl7Y2FzZVwiQ0VSVElGSUNBVEVcIjpjPW4uY2VydGlmaWNhdGUuZGVjb2RlKGYsXCJkZXJcIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm87Y2FzZVwiUFVCTElDIEtFWVwiOnN3aXRjaChjfHwoYz1uLlB1YmxpY0tleS5kZWNvZGUoZixcImRlclwiKSkscj1jLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG4uUlNBUHVibGljS2V5LmRlY29kZShjLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybiBjLnN1YmplY3RQcml2YXRlS2V5PWMuc3ViamVjdFB1YmxpY0tleSx7dHlwZTpcImVjXCIsZGF0YTpjfTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBjLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1uLkRTQXBhcmFtLmRlY29kZShjLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKSx7dHlwZTpcImRzYVwiLGRhdGE6Yy5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK3IpfWNhc2VcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiOmY9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxuPXBhcnNlSW50KGUuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxzPWlbZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKFwiLlwiKV0sYz1lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdix1PWUuc3ViamVjdFByaXZhdGVLZXksaD1wYXJzZUludChzLnNwbGl0KFwiLVwiKVsxXSwxMCkvOCxmPWEucGJrZGYyU3luYyh0LHIsbixoLFwic2hhMVwiKSxkPW8uY3JlYXRlRGVjaXBoZXJpdihzLGYsYykscD1bXTtyZXR1cm4gcC5wdXNoKGQudXBkYXRlKHUpKSxwLnB1c2goZC5maW5hbCgpKSxsLmNvbmNhdChwKX0oZj1uLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGYsXCJkZXJcIiksdCk7Y2FzZVwiUFJJVkFURSBLRVlcIjpzd2l0Y2gocj0oYz1uLlByaXZhdGVLZXkuZGVjb2RlKGYsXCJkZXJcIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG4uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYy5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybntjdXJ2ZTpjLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5Om4uRUNQcml2YXRlS2V5LmRlY29kZShjLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLnByaXZhdGVLZXl9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGMuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1uLkRTQXBhcmFtLmRlY29kZShjLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIscGFyYW1zOmMuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIityKX1jYXNlXCJSU0EgUFVCTElDIEtFWVwiOnJldHVybiBuLlJTQVB1YmxpY0tleS5kZWNvZGUoZixcImRlclwiKTtjYXNlXCJSU0EgUFJJVkFURSBLRVlcIjpyZXR1cm4gbi5SU0FQcml2YXRlS2V5LmRlY29kZShmLFwiZGVyXCIpO2Nhc2VcIkRTQSBQUklWQVRFIEtFWVwiOnJldHVybnt0eXBlOlwiZHNhXCIscGFyYW1zOm4uRFNBUHJpdmF0ZUtleS5kZWNvZGUoZixcImRlclwiKX07Y2FzZVwiRUMgUFJJVkFURSBLRVlcIjpyZXR1cm57Y3VydmU6KGY9bi5FQ1ByaXZhdGVLZXkuZGVjb2RlKGYsXCJkZXJcIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpmLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIitoKX19dC5leHBvcnRzPWMsYy5zaWduYXR1cmU9bi5zaWduYXR1cmV9LHtcIi4vYWVzaWQuanNvblwiOjQ1NSxcIi4vYXNuMVwiOjQ1NixcIi4vZml4UHJvY1wiOjQ1OCxcImJyb3dzZXJpZnktYWVzXCI6MTkxLHBia2RmMjo0NjAsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQ2MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3IucGJrZGYyPWUoXCIuL2xpYi9hc3luY1wiKSxyLnBia2RmMlN5bmM9ZShcIi4vbGliL3N5bmNcIil9LHtcIi4vbGliL2FzeW5jXCI6NDYxLFwiLi9saWIvc3luY1wiOjQ2NH1dLDQ2MTpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLHM9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixvPWUoXCIuL3ByZWNvbmRpdGlvblwiKSxhPWUoXCIuL2RlZmF1bHQtZW5jb2RpbmdcIiksbD1lKFwiLi9zeW5jXCIpLGM9ZShcIi4vdG8tYnVmZmVyXCIpLHU9ci5jcnlwdG8mJnIuY3J5cHRvLnN1YnRsZSxoPXtzaGE6XCJTSEEtMVwiLFwic2hhLTFcIjpcIlNIQS0xXCIsc2hhMTpcIlNIQS0xXCIsc2hhMjU2OlwiU0hBLTI1NlwiLFwic2hhLTI1NlwiOlwiU0hBLTI1NlwiLHNoYTM4NDpcIlNIQS0zODRcIixcInNoYS0zODRcIjpcIlNIQS0zODRcIixcInNoYS01MTJcIjpcIlNIQS01MTJcIixzaGE1MTI6XCJTSEEtNTEyXCJ9LGY9W107ZnVuY3Rpb24gZCgpe3JldHVybiBpfHwoaT1yLnByb2Nlc3MmJnIucHJvY2Vzcy5uZXh0VGljaz9yLnByb2Nlc3MubmV4dFRpY2s6ci5xdWV1ZU1pY3JvdGFzaz9yLnF1ZXVlTWljcm90YXNrOnIuc2V0SW1tZWRpYXRlP3Iuc2V0SW1tZWRpYXRlOnIuc2V0VGltZW91dCl9ZnVuY3Rpb24gcChlLHQscixuLGkpe3JldHVybiB1LmltcG9ydEtleShcInJhd1wiLGUse25hbWU6XCJQQktERjJcIn0sITEsW1wiZGVyaXZlQml0c1wiXSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHUuZGVyaXZlQml0cyh7bmFtZTpcIlBCS0RGMlwiLHNhbHQ6dCxpdGVyYXRpb25zOnIsaGFzaDp7bmFtZTppfX0sZSxuPDwzKX0pKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gcy5mcm9tKGUpfSkpfXQuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSxtLGIsZyl7XCJmdW5jdGlvblwiPT10eXBlb2YgYiYmKGc9YixiPXZvaWQgMCk7dmFyIHk9aFsoYj1ifHxcInNoYTFcIikudG9Mb3dlckNhc2UoKV07aWYoeSYmXCJmdW5jdGlvblwiPT10eXBlb2Ygci5Qcm9taXNlKXtpZihvKGksbSksZT1jKGUsYSxcIlBhc3N3b3JkXCIpLHQ9Yyh0LGEsXCJTYWx0XCIpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGcpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyXCIpOyFmdW5jdGlvbihlLHQpe2UudGhlbigoZnVuY3Rpb24oZSl7ZCgpKChmdW5jdGlvbigpe3QobnVsbCxlKX0pKX0pLChmdW5jdGlvbihlKXtkKCkoKGZ1bmN0aW9uKCl7dChlKX0pKX0pKX0oZnVuY3Rpb24oZSl7aWYoci5wcm9jZXNzJiYhci5wcm9jZXNzLmJyb3dzZXIpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYoIXV8fCF1LmltcG9ydEtleXx8IXUuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1mW2VdKXJldHVybiBmW2VdO3ZhciB0PXAobj1ufHxzLmFsbG9jKDgpLG4sMTAsMTI4LGUpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSk7cmV0dXJuIGZbZV09dCx0fSh5KS50aGVuKChmdW5jdGlvbihyKXtyZXR1cm4gcj9wKGUsdCxpLG0seSk6bChlLHQsaSxtLGIpfSkpLGcpfWVsc2UgZCgpKChmdW5jdGlvbigpe3ZhciByO3RyeXtyPWwoZSx0LGksbSxiKX1jYXRjaChlKXtyZXR1cm4gZyhlKX1nKG51bGwscil9KSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se1wiLi9kZWZhdWx0LWVuY29kaW5nXCI6NDYyLFwiLi9wcmVjb25kaXRpb25cIjo0NjMsXCIuL3N5bmNcIjo0NjQsXCIuL3RvLWJ1ZmZlclwiOjQ2NSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDYyOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUscil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG47aWYoci5wcm9jZXNzJiZyLnByb2Nlc3MuYnJvd3NlciluPVwidXRmLThcIjtlbHNlIGlmKHIucHJvY2VzcyYmci5wcm9jZXNzLnZlcnNpb24pe249cGFyc2VJbnQoZS52ZXJzaW9uLnNwbGl0KFwiLlwiKVswXS5zbGljZSgxKSwxMCk+PTY/XCJ1dGYtOFwiOlwiYmluYXJ5XCJ9ZWxzZSBuPVwidXRmLThcIjt0LmV4cG9ydHM9bn0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDY3fV0sNDYzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49TWF0aC5wb3coMiwzMCktMTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSXRlcmF0aW9ucyBub3QgYSBudW1iZXJcIik7aWYoZTwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQgaXRlcmF0aW9uc1wiKTtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGxlbmd0aCBub3QgYSBudW1iZXJcIik7aWYodDwwfHx0Pm58fHQhPXQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhZCBrZXkgbGVuZ3RoXCIpfX0se31dLDQ2NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJjcmVhdGUtaGFzaC9tZDVcIiksaT1lKFwicmlwZW1kMTYwXCIpLHM9ZShcInNoYS5qc1wiKSxvPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsYT1lKFwiLi9wcmVjb25kaXRpb25cIiksbD1lKFwiLi9kZWZhdWx0LWVuY29kaW5nXCIpLGM9ZShcIi4vdG8tYnVmZmVyXCIpLHU9by5hbGxvYygxMjgpLGg9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBmKGUsdCxyKXt2YXIgYT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQpe3JldHVybiBzKGUpLnVwZGF0ZSh0KS5kaWdlc3QoKX1yZXR1cm5cInJtZDE2MFwiPT09ZXx8XCJyaXBlbWQxNjBcIj09PWU/ZnVuY3Rpb24oZSl7cmV0dXJuKG5ldyBpKS51cGRhdGUoZSkuZGlnZXN0KCl9OlwibWQ1XCI9PT1lP246dH0oZSksbD1cInNoYTUxMlwiPT09ZXx8XCJzaGEzODRcIj09PWU/MTI4OjY0O3QubGVuZ3RoPmw/dD1hKHQpOnQubGVuZ3RoPGwmJih0PW8uY29uY2F0KFt0LHVdLGwpKTtmb3IodmFyIGM9by5hbGxvY1Vuc2FmZShsK2hbZV0pLGY9by5hbGxvY1Vuc2FmZShsK2hbZV0pLGQ9MDtkPGw7ZCsrKWNbZF09NTRedFtkXSxmW2RdPTkyXnRbZF07dmFyIHA9by5hbGxvY1Vuc2FmZShsK3IrNCk7Yy5jb3B5KHAsMCwwLGwpLHRoaXMuaXBhZDE9cCx0aGlzLmlwYWQyPWMsdGhpcy5vcGFkPWYsdGhpcy5hbGc9ZSx0aGlzLmJsb2Nrc2l6ZT1sLHRoaXMuaGFzaD1hLHRoaXMuc2l6ZT1oW2VdfWYucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmNvcHkodCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHQpLmNvcHkodGhpcy5vcGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sdC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4saSl7YShyLG4pO3ZhciBzPW5ldyBmKGk9aXx8XCJzaGExXCIsZT1jKGUsbCxcIlBhc3N3b3JkXCIpLCh0PWModCxsLFwiU2FsdFwiKSkubGVuZ3RoKSx1PW8uYWxsb2NVbnNhZmUobiksZD1vLmFsbG9jVW5zYWZlKHQubGVuZ3RoKzQpO3QuY29weShkLDAsMCx0Lmxlbmd0aCk7Zm9yKHZhciBwPTAsbT1oW2ldLGI9TWF0aC5jZWlsKG4vbSksZz0xO2c8PWI7ZysrKXtkLndyaXRlVUludDMyQkUoZyx0Lmxlbmd0aCk7Zm9yKHZhciB5PXMucnVuKGQscy5pcGFkMSksdj15LHc9MTt3PHI7dysrKXt2PXMucnVuKHYscy5pcGFkMik7Zm9yKHZhciBfPTA7XzxtO18rKyl5W19dXj12W19dfXkuY29weSh1LHApLHArPW19cmV0dXJuIHV9fSx7XCIuL2RlZmF1bHQtZW5jb2RpbmdcIjo0NjIsXCIuL3ByZWNvbmRpdGlvblwiOjQ2MyxcIi4vdG8tYnVmZmVyXCI6NDY1LFwiY3JlYXRlLWhhc2gvbWQ1XCI6Mzg3LHJpcGVtZDE2MDo0OTMsXCJzYWZlLWJ1ZmZlclwiOjQ5NCxcInNoYS5qc1wiOjQ5OH1dLDQ2NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuLmlzQnVmZmVyKGUpKXJldHVybiBlO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXJldHVybiBuLmZyb20oZSx0KTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpcmV0dXJuIG4uZnJvbShlLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihyK1wiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXdcIil9fSx7XCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQ2NjpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2b2lkIDA9PT1lfHwhZS52ZXJzaW9ufHwwPT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MC5cIil8fDA9PT1lLnZlcnNpb24uaW5kZXhPZihcInYxLlwiKSYmMCE9PWUudmVyc2lvbi5pbmRleE9mKFwidjEuOC5cIik/dC5leHBvcnRzPXtuZXh0VGljazpmdW5jdGlvbih0LHIsbixpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgcyxvLGE9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZS5uZXh0VGljayh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dFRpY2soKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscil9KSk7Y2FzZSAzOnJldHVybiBlLm5leHRUaWNrKChmdW5jdGlvbigpe3QuY2FsbChudWxsLHIsbil9KSk7Y2FzZSA0OnJldHVybiBlLm5leHRUaWNrKChmdW5jdGlvbigpe3QuY2FsbChudWxsLHIsbixpKX0pKTtkZWZhdWx0OmZvcihzPW5ldyBBcnJheShhLTEpLG89MDtvPHMubGVuZ3RoOylzW28rK109YXJndW1lbnRzW29dO3JldHVybiBlLm5leHRUaWNrKChmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxzKX0pKX19fTp0LmV4cG9ydHM9ZX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpKX0se19wcm9jZXNzOjQ2N31dLDQ2NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGkscz10LmV4cG9ydHM9e307ZnVuY3Rpb24gbygpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gYSgpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBsKGUpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKG49PT1vfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBuKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e249XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0Om99Y2F0Y2goZSl7bj1vfXRyeXtpPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6YX1jYXRjaChlKXtpPWF9fSgpO3ZhciBjLHU9W10saD0hMSxmPS0xO2Z1bmN0aW9uIGQoKXtoJiZjJiYoaD0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmY9LTEsdS5sZW5ndGgmJnAoKSl9ZnVuY3Rpb24gcCgpe2lmKCFoKXt2YXIgZT1sKGQpO2g9ITA7Zm9yKHZhciB0PXUubGVuZ3RoO3Q7KXtmb3IoYz11LHU9W107KytmPHQ7KWMmJmNbZl0ucnVuKCk7Zj0tMSx0PXUubGVuZ3RofWM9bnVsbCxoPSExLGZ1bmN0aW9uKGUpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChlKTtpZigoaT09PWF8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoZSk7dHJ5e2koZSl9Y2F0Y2godCl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCxlKX1jYXRjaCh0KXtyZXR1cm4gaS5jYWxsKHRoaXMsZSl9fX0oZSl9fWZ1bmN0aW9uIG0oZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBiKCl7fXMubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdFtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IG0oZSx0KSksMSE9PXUubGVuZ3RofHxofHxsKHApfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxzLnRpdGxlPVwiYnJvd3NlclwiLHMuYnJvd3Nlcj0hMCxzLmVudj17fSxzLmFyZ3Y9W10scy52ZXJzaW9uPVwiXCIscy52ZXJzaW9ucz17fSxzLm9uPWIscy5hZGRMaXN0ZW5lcj1iLHMub25jZT1iLHMub2ZmPWIscy5yZW1vdmVMaXN0ZW5lcj1iLHMucmVtb3ZlQWxsTGlzdGVuZXJzPWIscy5lbWl0PWIscy5wcmVwZW5kTGlzdGVuZXI9YixzLnByZXBlbmRPbmNlTGlzdGVuZXI9YixzLmxpc3RlbmVycz1mdW5jdGlvbihlKXtyZXR1cm5bXX0scy5iaW5kaW5nPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxzLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxzLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0scy51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0se31dLDQ2ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3IucHVibGljRW5jcnlwdD1lKFwiLi9wdWJsaWNFbmNyeXB0XCIpLHIucHJpdmF0ZURlY3J5cHQ9ZShcIi4vcHJpdmF0ZURlY3J5cHRcIiksci5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbihlLHQpe3JldHVybiByLnB1YmxpY0VuY3J5cHQoZSx0LCEwKX0sci5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIucHJpdmF0ZURlY3J5cHQoZSx0LCEwKX19LHtcIi4vcHJpdmF0ZURlY3J5cHRcIjo0NzEsXCIuL3B1YmxpY0VuY3J5cHRcIjo0NzJ9XSw0Njk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiY3JlYXRlLWhhc2hcIiksaT1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9aS5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdC53cml0ZVVJbnQzMkJFKGUsMCksdH10LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbz1pLmFsbG9jKDApLGE9MDtvLmxlbmd0aDx0OylyPXMoYSsrKSxvPWkuY29uY2F0KFtvLG4oXCJzaGExXCIpLnVwZGF0ZShlKS51cGRhdGUocikuZGlnZXN0KCldKTtyZXR1cm4gby5zbGljZSgwLHQpfX0se1wiY3JlYXRlLWhhc2hcIjozODYsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQ3MDpbZnVuY3Rpb24oZSx0LHIpe2FyZ3VtZW50c1s0XVsxODRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0se2J1ZmZlcjoxODgsZHVwOjE4NH1dLDQ3MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJwYXJzZS1hc24xXCIpLGk9ZShcIi4vbWdmXCIpLHM9ZShcIi4veG9yXCIpLG89ZShcImJuLmpzXCIpLGE9ZShcImJyb3dzZXJpZnktcnNhXCIpLGw9ZShcImNyZWF0ZS1oYXNoXCIpLGM9ZShcIi4vd2l0aFB1YmxpY1wiKSx1PWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaDtoPWUucGFkZGluZz9lLnBhZGRpbmc6cj8xOjQ7dmFyIGYsZD1uKGUpLHA9ZC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZih0Lmxlbmd0aD5wfHxuZXcgbyh0KS5jbXAoZC5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO2Y9cj9jKG5ldyBvKHQpLGQpOmEodCxkKTt2YXIgbT11LmFsbG9jKHAtZi5sZW5ndGgpO2lmKGY9dS5jb25jYXQoW20sZl0scCksND09PWgpcmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxuPWwoXCJzaGExXCIpLnVwZGF0ZSh1LmFsbG9jKDApKS5kaWdlc3QoKSxvPW4ubGVuZ3RoO2lmKDAhPT10WzBdKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7dmFyIGE9dC5zbGljZSgxLG8rMSksYz10LnNsaWNlKG8rMSksaD1zKGEsaShjLG8pKSxmPXMoYyxpKGgsci1vLTEpKTtpZihmdW5jdGlvbihlLHQpe2U9dS5mcm9tKGUpLHQ9dS5mcm9tKHQpO3ZhciByPTAsbj1lLmxlbmd0aDtlLmxlbmd0aCE9PXQubGVuZ3RoJiYocisrLG49TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpKTt2YXIgaT0tMTtmb3IoOysraTxuOylyKz1lW2ldXnRbaV07cmV0dXJuIHJ9KG4sZi5zbGljZSgwLG8pKSl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3ZhciBkPW87Zm9yKDswPT09ZltkXTspZCsrO2lmKDEhPT1mW2QrK10pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtyZXR1cm4gZi5zbGljZShkKX0oZCxmKTtpZigxPT09aClyZXR1cm4gZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQuc2xpY2UoMCwyKSxpPTIscz0wO2Zvcig7MCE9PXRbaSsrXTspaWYoaT49dC5sZW5ndGgpe3MrKzticmVha312YXIgbz10LnNsaWNlKDIsaS0xKTsoXCIwMDAyXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiYhcnx8XCIwMDAxXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiZyKSYmcysrO28ubGVuZ3RoPDgmJnMrKztpZihzKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7cmV0dXJuIHQuc2xpY2UoaSl9KDAsZixyKTtpZigzPT09aClyZXR1cm4gZjt0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIil9fSx7XCIuL21nZlwiOjQ2OSxcIi4vd2l0aFB1YmxpY1wiOjQ3MyxcIi4veG9yXCI6NDc0LFwiYm4uanNcIjo0NzAsXCJicm93c2VyaWZ5LXJzYVwiOjIwOSxcImNyZWF0ZS1oYXNoXCI6Mzg2LFwicGFyc2UtYXNuMVwiOjQ1OSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDcyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInBhcnNlLWFzbjFcIiksaT1lKFwicmFuZG9tYnl0ZXNcIikscz1lKFwiY3JlYXRlLWhhc2hcIiksbz1lKFwiLi9tZ2ZcIiksYT1lKFwiLi94b3JcIiksbD1lKFwiYm4uanNcIiksYz1lKFwiLi93aXRoUHVibGljXCIpLHU9ZShcImJyb3dzZXJpZnktcnNhXCIpLGg9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBmO2Y9ZS5wYWRkaW5nP2UucGFkZGluZzpyPzE6NDt2YXIgZCxwPW4oZSk7aWYoND09PWYpZD1mdW5jdGlvbihlLHQpe3ZhciByPWUubW9kdWx1cy5ieXRlTGVuZ3RoKCksbj10Lmxlbmd0aCxjPXMoXCJzaGExXCIpLnVwZGF0ZShoLmFsbG9jKDApKS5kaWdlc3QoKSx1PWMubGVuZ3RoLGY9Mip1O2lmKG4+ci1mLTIpdGhyb3cgbmV3IEVycm9yKFwibWVzc2FnZSB0b28gbG9uZ1wiKTt2YXIgZD1oLmFsbG9jKHItbi1mLTIpLHA9ci11LTEsbT1pKHUpLGI9YShoLmNvbmNhdChbYyxkLGguYWxsb2MoMSwxKSx0XSxwKSxvKG0scCkpLGc9YShtLG8oYix1KSk7cmV0dXJuIG5ldyBsKGguY29uY2F0KFtoLmFsbG9jKDEpLGcsYl0scikpfShwLHQpO2Vsc2UgaWYoMT09PWYpZD1mdW5jdGlvbihlLHQscil7dmFyIG4scz10Lmxlbmd0aCxvPWUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYocz5vLTExKXRocm93IG5ldyBFcnJvcihcIm1lc3NhZ2UgdG9vIGxvbmdcIik7bj1yP2guYWxsb2Moby1zLTMsMjU1KTpmdW5jdGlvbihlKXt2YXIgdCxyPWguYWxsb2NVbnNhZmUoZSksbj0wLHM9aSgyKmUpLG89MDtmb3IoO248ZTspbz09PXMubGVuZ3RoJiYocz1pKDIqZSksbz0wKSwodD1zW28rK10pJiYocltuKytdPXQpO3JldHVybiByfShvLXMtMyk7cmV0dXJuIG5ldyBsKGguY29uY2F0KFtoLmZyb20oWzAscj8xOjJdKSxuLGguYWxsb2MoMSksdF0sbykpfShwLHQscik7ZWxzZXtpZigzIT09Zil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIik7aWYoKGQ9bmV3IGwodCkpLmNtcChwLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcihcImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXNcIil9cmV0dXJuIHI/dShkLHApOmMoZCxwKX19LHtcIi4vbWdmXCI6NDY5LFwiLi93aXRoUHVibGljXCI6NDczLFwiLi94b3JcIjo0NzQsXCJibi5qc1wiOjQ3MCxcImJyb3dzZXJpZnktcnNhXCI6MjA5LFwiY3JlYXRlLWhhc2hcIjozODYsXCJwYXJzZS1hc24xXCI6NDU5LHJhbmRvbWJ5dGVzOjQ3NSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDczOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJuLmpzXCIpLGk9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5mcm9tKGUudG9SZWQobi5tb250KHQubW9kdWx1cykpLnJlZFBvdyhuZXcgbih0LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSx7XCJibi5qc1wiOjQ3MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDc0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49LTE7KytuPHI7KWVbbl1ePXRbbl07cmV0dXJuIGV9fSx7fV0sNDc1OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixzPW4uY3J5cHRvfHxuLm1zQ3J5cHRvO3MmJnMuZ2V0UmFuZG9tVmFsdWVzP3QuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGU+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInJlcXVlc3RlZCB0b28gbWFueSByYW5kb20gYnl0ZXNcIik7dmFyIG49aS5hbGxvY1Vuc2FmZShlKTtpZihlPjApaWYoZT42NTUzNilmb3IodmFyIG89MDtvPGU7bys9NjU1MzYpcy5nZXRSYW5kb21WYWx1ZXMobi5zbGljZShvLG8rNjU1MzYpKTtlbHNlIHMuZ2V0UmFuZG9tVmFsdWVzKG4pO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpcmV0dXJuIHIubmV4dFRpY2soKGZ1bmN0aW9uKCl7dChudWxsLG4pfSkpO3JldHVybiBufTp0LmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxcblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTFcIil9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtfcHJvY2Vzczo0NjcsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQ3NjpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0LG4peyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXFxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMVwiKX12YXIgcz1lKFwic2FmZS1idWZmZXJcIiksbz1lKFwicmFuZG9tYnl0ZXNcIiksYT1zLkJ1ZmZlcixsPXMua01heExlbmd0aCxjPW4uY3J5cHRvfHxuLm1zQ3J5cHRvLHU9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBoKGUsdCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fGUhPWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyXCIpO2lmKGU+dXx8ZTwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMlwiKTtpZihlPmx8fGU+dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gZihlLHQscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGV8fGUhPWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZihlPnV8fGU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwic2l6ZSBtdXN0IGJlIGEgdWludDMyXCIpO2lmKGUrdD5yfHxlPmwpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJidWZmZXIgdG9vIHNtYWxsXCIpfWZ1bmN0aW9uIGQoZSxyLG4saSl7aWYodC5icm93c2VyKXt2YXIgcz1lLmJ1ZmZlcixhPW5ldyBVaW50OEFycmF5KHMscixuKTtyZXR1cm4gYy5nZXRSYW5kb21WYWx1ZXMoYSksaT92b2lkIHQubmV4dFRpY2soKGZ1bmN0aW9uKCl7aShudWxsLGUpfSkpOmV9aWYoIWkpcmV0dXJuIG8obikuY29weShlLHIpLGU7byhuLChmdW5jdGlvbih0LG4pe2lmKHQpcmV0dXJuIGkodCk7bi5jb3B5KGUsciksaShudWxsLGUpfSkpfWMmJmMuZ2V0UmFuZG9tVmFsdWVzfHwhdC5icm93c2VyPyhyLnJhbmRvbUZpbGw9ZnVuY3Rpb24oZSx0LHIsaSl7aWYoIShhLmlzQnVmZmVyKGUpfHxlIGluc3RhbmNlb2Ygbi5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZlwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpaT10LHQ9MCxyPWUubGVuZ3RoO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgcilpPXIscj1lLmxlbmd0aC10O2Vsc2UgaWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNiXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIGgodCxlLmxlbmd0aCksZihyLHQsZS5sZW5ndGgpLGQoZSx0LHIsaSl9LHIucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24oZSx0LHIpe3ZvaWQgMD09PXQmJih0PTApO2lmKCEoYS5pc0J1ZmZlcihlKXx8ZSBpbnN0YW5jZW9mIG4uVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtoKHQsZS5sZW5ndGgpLHZvaWQgMD09PXImJihyPWUubGVuZ3RoLXQpO3JldHVybiBmKHIsdCxlLmxlbmd0aCksZChlLHQscil9KTooci5yYW5kb21GaWxsPWksci5yYW5kb21GaWxsU3luYz1pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7X3Byb2Nlc3M6NDY3LHJhbmRvbWJ5dGVzOjQ3NSxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNDc3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e307ZnVuY3Rpb24gaShlLHQscil7cnx8KHI9RXJyb3IpO3ZhciBpPWZ1bmN0aW9uKGUpe3ZhciByLG47ZnVuY3Rpb24gaShyLG4saSl7cmV0dXJuIGUuY2FsbCh0aGlzLGZ1bmN0aW9uKGUscixuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90OnQoZSxyLG4pfShyLG4saSkpfHx0aGlzfXJldHVybiBuPWUsKHI9aSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5fX3Byb3RvX189bixpfShyKTtpLnByb3RvdHlwZS5uYW1lPXIubmFtZSxpLnByb3RvdHlwZS5jb2RlPWUsbltlXT1pfWZ1bmN0aW9uIHMoZSx0KXtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgcj1lLmxlbmd0aDtyZXR1cm4gZT1lLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKX0pKSxyPjI/XCJvbmUgb2YgXCIuY29uY2F0KHQsXCIgXCIpLmNvbmNhdChlLnNsaWNlKDAsci0xKS5qb2luKFwiLCBcIiksXCIsIG9yIFwiKStlW3ItMV06Mj09PXI/XCJvbmUgb2YgXCIuY29uY2F0KHQsXCIgXCIpLmNvbmNhdChlWzBdLFwiIG9yIFwiKS5jb25jYXQoZVsxXSk6XCJvZiBcIi5jb25jYXQodCxcIiBcIikuY29uY2F0KGVbMF0pfXJldHVyblwib2YgXCIuY29uY2F0KHQsXCIgXCIpLmNvbmNhdChTdHJpbmcoZSkpfWkoXCJFUlJfSU5WQUxJRF9PUFRfVkFMVUVcIiwoZnVuY3Rpb24oZSx0KXtyZXR1cm4nVGhlIHZhbHVlIFwiJyt0KydcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCInK2UrJ1wiJ30pLFR5cGVFcnJvciksaShcIkVSUl9JTlZBTElEX0FSR19UWVBFXCIsKGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKGk9XCJub3QgXCIsdC5zdWJzdHIoIW98fG88MD8wOitvLGkubGVuZ3RoKT09PWkpPyhuPVwibXVzdCBub3QgYmVcIix0PXQucmVwbGFjZSgvXm5vdCAvLFwiXCIpKTpuPVwibXVzdCBiZVwiLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4odm9pZCAwPT09cnx8cj5lLmxlbmd0aCkmJihyPWUubGVuZ3RoKSxlLnN1YnN0cmluZyhyLXQubGVuZ3RoLHIpPT09dH0oZSxcIiBhcmd1bWVudFwiKSlhPVwiVGhlIFwiLmNvbmNhdChlLFwiIFwiKS5jb25jYXQobixcIiBcIikuY29uY2F0KHModCxcInR5cGVcIikpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24oZSx0LHIpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiByJiYocj0wKSwhKHIrdC5sZW5ndGg+ZS5sZW5ndGgpJiYtMSE9PWUuaW5kZXhPZih0LHIpfShlLFwiLlwiKT9cInByb3BlcnR5XCI6XCJhcmd1bWVudFwiO2E9J1RoZSBcIicuY29uY2F0KGUsJ1wiICcpLmNvbmNhdChsLFwiIFwiKS5jb25jYXQobixcIiBcIikuY29uY2F0KHModCxcInR5cGVcIikpfXJldHVybiBhKz1cIi4gUmVjZWl2ZWQgdHlwZSBcIi5jb25jYXQodHlwZW9mIHIpfSksVHlwZUVycm9yKSxpKFwiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRlwiLFwic3RyZWFtLnB1c2goKSBhZnRlciBFT0ZcIiksaShcIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEXCIsKGZ1bmN0aW9uKGUpe3JldHVyblwiVGhlIFwiK2UrXCIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZFwifSkpLGkoXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiLFwiUHJlbWF0dXJlIGNsb3NlXCIpLGkoXCJFUlJfU1RSRUFNX0RFU1RST1lFRFwiLChmdW5jdGlvbihlKXtyZXR1cm5cIkNhbm5vdCBjYWxsIFwiK2UrXCIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZFwifSkpLGkoXCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0tcIixcIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKSxpKFwiRVJSX1NUUkVBTV9DQU5OT1RfUElQRVwiLFwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZVwiKSxpKFwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkRcIixcIndyaXRlIGFmdGVyIGVuZFwiKSxpKFwiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFU1wiLFwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1cIixUeXBlRXJyb3IpLGkoXCJFUlJfVU5LTk9XTl9FTkNPRElOR1wiLChmdW5jdGlvbihlKXtyZXR1cm5cIlVua25vd24gZW5jb2Rpbmc6IFwiK2V9KSxUeXBlRXJyb3IpLGkoXCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UXCIsXCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudFwiKSx0LmV4cG9ydHMuY29kZXM9bn0se31dLDQ3ODpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7dmFyIHQ9W107Zm9yKHZhciByIGluIGUpdC5wdXNoKHIpO3JldHVybiB0fTt0LmV4cG9ydHM9Yzt2YXIgaT1lKFwiLi9fc3RyZWFtX3JlYWRhYmxlXCIpLHM9ZShcIi4vX3N0cmVhbV93cml0YWJsZVwiKTtlKFwiaW5oZXJpdHNcIikoYyxpKTtmb3IodmFyIG89bihzLnByb3RvdHlwZSksYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgbD1vW2FdO2MucHJvdG90eXBlW2xdfHwoYy5wcm90b3R5cGVbbF09cy5wcm90b3R5cGVbbF0pfWZ1bmN0aW9uIGMoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgYykpcmV0dXJuIG5ldyBjKGUpO2kuY2FsbCh0aGlzLGUpLHMuY2FsbCh0aGlzLGUpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxlJiYoITE9PT1lLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1lLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1lLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKFwiZW5kXCIsdSkpKX1mdW5jdGlvbiB1KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ci5uZXh0VGljayhoLHRoaXMpfWZ1bmN0aW9uIGgoZSl7ZS5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxcIndyaXRhYmxlQnVmZmVyXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLFwid3JpdGFibGVMZW5ndGhcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLFwiZGVzdHJveWVkXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQpfSxzZXQ6ZnVuY3Rpb24oZSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJfcHJvY2Vzc1wiKSl9LHtcIi4vX3N0cmVhbV9yZWFkYWJsZVwiOjQ4MCxcIi4vX3N0cmVhbV93cml0YWJsZVwiOjQ4MixfcHJvY2Vzczo0NjcsaW5oZXJpdHM6NDQwfV0sNDc5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWk7dmFyIG49ZShcIi4vX3N0cmVhbV90cmFuc2Zvcm1cIik7ZnVuY3Rpb24gaShlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkoZSk7bi5jYWxsKHRoaXMsZSl9ZShcImluaGVyaXRzXCIpKGksbiksaS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7cihudWxsLGUpfX0se1wiLi9fc3RyZWFtX3RyYW5zZm9ybVwiOjQ4MSxpbmhlcml0czo0NDB9XSw0ODA6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24ocixuKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgaTt0LmV4cG9ydHM9TSxNLlJlYWRhYmxlU3RhdGU9UztlKFwiZXZlbnRzXCIpLkV2ZW50RW1pdHRlcjt2YXIgcz1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxpc3RlbmVycyh0KS5sZW5ndGh9LG89ZShcIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW1cIiksYT1lKFwiYnVmZmVyXCIpLkJ1ZmZlcixsPSh2b2lkIDAhPT1uP246XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBjLHU9ZShcInV0aWxcIik7Yz11JiZ1LmRlYnVnbG9nP3UuZGVidWdsb2coXCJzdHJlYW1cIik6ZnVuY3Rpb24oKXt9O3ZhciBoLGYsZCxwPWUoXCIuL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3RcIiksbT1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3lcIiksYj1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlXCIpLmdldEhpZ2hXYXRlck1hcmssZz1lKFwiLi4vZXJyb3JzXCIpLmNvZGVzLHk9Zy5FUlJfSU5WQUxJRF9BUkdfVFlQRSx2PWcuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRix3PWcuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXz1nLkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7ZShcImluaGVyaXRzXCIpKE0sbyk7dmFyIHg9bS5lcnJvck9yRGVzdHJveSxrPVtcImVycm9yXCIsXCJjbG9zZVwiLFwiZGVzdHJveVwiLFwicGF1c2VcIixcInJlc3VtZVwiXTtmdW5jdGlvbiBTKHQscixuKXtpPWl8fGUoXCIuL19zdHJlYW1fZHVwbGV4XCIpLHQ9dHx8e30sXCJib29sZWFuXCIhPXR5cGVvZiBuJiYobj1yIGluc3RhbmNlb2YgaSksdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLG4mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Yih0aGlzLHQsXCJyZWFkYWJsZUhpZ2hXYXRlck1hcmtcIixuKSx0aGlzLmJ1ZmZlcj1uZXcgcCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT10LmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhdC5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdC5lbmNvZGluZyYmKGh8fChoPWUoXCJzdHJpbmdfZGVjb2Rlci9cIikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBoKHQuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyl9ZnVuY3Rpb24gTSh0KXtpZihpPWl8fGUoXCIuL19zdHJlYW1fZHVwbGV4XCIpLCEodGhpcyBpbnN0YW5jZW9mIE0pKXJldHVybiBuZXcgTSh0KTt2YXIgcj10aGlzIGluc3RhbmNlb2YgaTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBTKHQsdGhpcyxyKSx0aGlzLnJlYWRhYmxlPSEwLHQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWQmJih0aGlzLl9yZWFkPXQucmVhZCksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZXN0cm95JiYodGhpcy5fZGVzdHJveT10LmRlc3Ryb3kpKSxvLmNhbGwodGhpcyl9ZnVuY3Rpb24gQyhlLHQscixuLGkpe2MoXCJyZWFkYWJsZUFkZENodW5rXCIsdCk7dmFyIHMsbz1lLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT10KW8ucmVhZGluZz0hMSxmdW5jdGlvbihlLHQpe2lmKGMoXCJvbkVvZkNodW5rXCIpLHQuZW5kZWQpcmV0dXJuO2lmKHQuZGVjb2Rlcil7dmFyIHI9dC5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYodC5idWZmZXIucHVzaChyKSx0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGgpfXQuZW5kZWQ9ITAsdC5zeW5jP0EoZSk6KHQubmVlZFJlYWRhYmxlPSExLHQuZW1pdHRlZFJlYWRhYmxlfHwodC5lbWl0dGVkUmVhZGFibGU9ITAsUihlKSkpfShlLG8pO2Vsc2UgaWYoaXx8KHM9ZnVuY3Rpb24oZSx0KXt2YXIgcjtuPXQsYS5pc0J1ZmZlcihuKXx8biBpbnN0YW5jZW9mIGx8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fHxlLm9iamVjdE1vZGV8fChyPW5ldyB5KFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiLFwiVWludDhBcnJheVwiXSx0KSk7dmFyIG47cmV0dXJuIHJ9KG8sdCkpLHMpeChlLHMpO2Vsc2UgaWYoby5vYmplY3RNb2RlfHx0JiZ0Lmxlbmd0aD4wKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHxvLm9iamVjdE1vZGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PWEucHJvdG90eXBlfHwodD1mdW5jdGlvbihlKXtyZXR1cm4gYS5mcm9tKGUpfSh0KSksbilvLmVuZEVtaXR0ZWQ/eChlLG5ldyBfKTpUKGUsbyx0LCEwKTtlbHNlIGlmKG8uZW5kZWQpeChlLG5ldyB2KTtlbHNle2lmKG8uZGVzdHJveWVkKXJldHVybiExO28ucmVhZGluZz0hMSxvLmRlY29kZXImJiFyPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fDAhPT10Lmxlbmd0aD9UKGUsbyx0LCExKTpPKGUsbykpOlQoZSxvLHQsITEpfWVsc2Ugbnx8KG8ucmVhZGluZz0hMSxPKGUsbykpO3JldHVybiFvLmVuZGVkJiYoby5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrfHwwPT09by5sZW5ndGgpfWZ1bmN0aW9uIFQoZSx0LHIsbil7dC5mbG93aW5nJiYwPT09dC5sZW5ndGgmJiF0LnN5bmM/KHQuYXdhaXREcmFpbj0wLGUuZW1pdChcImRhdGFcIixyKSk6KHQubGVuZ3RoKz10Lm9iamVjdE1vZGU/MTpyLmxlbmd0aCxuP3QuYnVmZmVyLnVuc2hpZnQocik6dC5idWZmZXIucHVzaChyKSx0Lm5lZWRSZWFkYWJsZSYmQShlKSksTyhlLHQpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLnByb3RvdHlwZSxcImRlc3Ryb3llZFwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1lKX19KSxNLnByb3RvdHlwZS5kZXN0cm95PW0uZGVzdHJveSxNLnByb3RvdHlwZS5fdW5kZXN0cm95PW0udW5kZXN0cm95LE0ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dChlKX0sTS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6XCJzdHJpbmdcIj09dHlwZW9mIGUmJigodD10fHxuLmRlZmF1bHRFbmNvZGluZykhPT1uLmVuY29kaW5nJiYoZT1hLmZyb20oZSx0KSx0PVwiXCIpLHI9ITApLEModGhpcyxlLHQsITEscil9LE0ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIEModGhpcyxlLG51bGwsITAsITEpfSxNLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxNLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih0KXtofHwoaD1lKFwic3RyaW5nX2RlY29kZXIvXCIpLlN0cmluZ0RlY29kZXIpO3ZhciByPW5ldyBoKHQpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1yLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGk9XCJcIjtudWxsIT09bjspaSs9ci53cml0ZShuLmRhdGEpLG49bi5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLFwiXCIhPT1pJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKGkpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPWkubGVuZ3RoLHRoaXN9O2Z1bmN0aW9uIEUoZSx0KXtyZXR1cm4gZTw9MHx8MD09PXQubGVuZ3RoJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6ZSE9ZT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6dC5sZW5ndGg6KGU+dC5oaWdoV2F0ZXJNYXJrJiYodC5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBlPj0xMDczNzQxODI0P2U9MTA3Mzc0MTgyNDooZS0tLGV8PWU+Pj4xLGV8PWU+Pj4yLGV8PWU+Pj40LGV8PWU+Pj44LGV8PWU+Pj4xNixlKyspLGV9KGUpKSxlPD10Lmxlbmd0aD9lOnQuZW5kZWQ/dC5sZW5ndGg6KHQubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBBKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7YyhcImVtaXRSZWFkYWJsZVwiLHQubmVlZFJlYWRhYmxlLHQuZW1pdHRlZFJlYWRhYmxlKSx0Lm5lZWRSZWFkYWJsZT0hMSx0LmVtaXR0ZWRSZWFkYWJsZXx8KGMoXCJlbWl0UmVhZGFibGVcIix0LmZsb3dpbmcpLHQuZW1pdHRlZFJlYWRhYmxlPSEwLHIubmV4dFRpY2soUixlKSl9ZnVuY3Rpb24gUihlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2MoXCJlbWl0UmVhZGFibGVfXCIsdC5kZXN0cm95ZWQsdC5sZW5ndGgsdC5lbmRlZCksdC5kZXN0cm95ZWR8fCF0Lmxlbmd0aCYmIXQuZW5kZWR8fChlLmVtaXQoXCJyZWFkYWJsZVwiKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMSksdC5uZWVkUmVhZGFibGU9IXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPD10LmhpZ2hXYXRlck1hcmssQihlKX1mdW5jdGlvbiBPKGUsdCl7dC5yZWFkaW5nTW9yZXx8KHQucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayhqLGUsdCkpfWZ1bmN0aW9uIGooZSx0KXtmb3IoOyF0LnJlYWRpbmcmJiF0LmVuZGVkJiYodC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHx0LmZsb3dpbmcmJjA9PT10Lmxlbmd0aCk7KXt2YXIgcj10Lmxlbmd0aDtpZihjKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksZS5yZWFkKDApLHI9PT10Lmxlbmd0aClicmVha310LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTt0LnJlYWRhYmxlTGlzdGVuaW5nPWUubGlzdGVuZXJDb3VudChcInJlYWRhYmxlXCIpPjAsdC5yZXN1bWVTY2hlZHVsZWQmJiF0LnBhdXNlZD90LmZsb3dpbmc9ITA6ZS5saXN0ZW5lckNvdW50KFwiZGF0YVwiKT4wJiZlLnJlc3VtZSgpfWZ1bmN0aW9uIE4oZSl7YyhcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSxlLnJlYWQoMCl9ZnVuY3Rpb24gUChlLHQpe2MoXCJyZXN1bWVcIix0LnJlYWRpbmcpLHQucmVhZGluZ3x8ZS5yZWFkKDApLHQucmVzdW1lU2NoZWR1bGVkPSExLGUuZW1pdChcInJlc3VtZVwiKSxCKGUpLHQuZmxvd2luZyYmIXQucmVhZGluZyYmZS5yZWFkKDApfWZ1bmN0aW9uIEIoZSl7dmFyIHQ9ZS5fcmVhZGFibGVTdGF0ZTtmb3IoYyhcImZsb3dcIix0LmZsb3dpbmcpO3QuZmxvd2luZyYmbnVsbCE9PWUucmVhZCgpOyk7fWZ1bmN0aW9uIEQoZSx0KXtyZXR1cm4gMD09PXQubGVuZ3RoP251bGw6KHQub2JqZWN0TW9kZT9yPXQuYnVmZmVyLnNoaWZ0KCk6IWV8fGU+PXQubGVuZ3RoPyhyPXQuZGVjb2Rlcj90LmJ1ZmZlci5qb2luKFwiXCIpOjE9PT10LmJ1ZmZlci5sZW5ndGg/dC5idWZmZXIuZmlyc3QoKTp0LmJ1ZmZlci5jb25jYXQodC5sZW5ndGgpLHQuYnVmZmVyLmNsZWFyKCkpOnI9dC5idWZmZXIuY29uc3VtZShlLHQuZGVjb2Rlcikscik7dmFyIHJ9ZnVuY3Rpb24gRihlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2MoXCJlbmRSZWFkYWJsZVwiLHQuZW5kRW1pdHRlZCksdC5lbmRFbWl0dGVkfHwodC5lbmRlZD0hMCxyLm5leHRUaWNrKEwsdCxlKSl9ZnVuY3Rpb24gTChlLHQpe2lmKGMoXCJlbmRSZWFkYWJsZU5UXCIsZS5lbmRFbWl0dGVkLGUubGVuZ3RoKSwhZS5lbmRFbWl0dGVkJiYwPT09ZS5sZW5ndGgmJihlLmVuZEVtaXR0ZWQ9ITAsdC5yZWFkYWJsZT0hMSx0LmVtaXQoXCJlbmRcIiksZS5hdXRvRGVzdHJveSkpe3ZhciByPXQuX3dyaXRhYmxlU3RhdGU7KCFyfHxyLmF1dG9EZXN0cm95JiZyLmZpbmlzaGVkKSYmdC5kZXN0cm95KCl9fWZ1bmN0aW9uIHooZSx0KXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXT09PXQpcmV0dXJuIHI7cmV0dXJuLTF9TS5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihlKXtjKFwicmVhZFwiLGUpLGU9cGFyc2VJbnQoZSwxMCk7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPWU7aWYoMCE9PWUmJih0LmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PWUmJnQubmVlZFJlYWRhYmxlJiYoKDAhPT10LmhpZ2hXYXRlck1hcms/dC5sZW5ndGg+PXQuaGlnaFdhdGVyTWFyazp0Lmxlbmd0aD4wKXx8dC5lbmRlZCkpcmV0dXJuIGMoXCJyZWFkOiBlbWl0UmVhZGFibGVcIix0Lmxlbmd0aCx0LmVuZGVkKSwwPT09dC5sZW5ndGgmJnQuZW5kZWQ/Rih0aGlzKTpBKHRoaXMpLG51bGw7aWYoMD09PShlPUUoZSx0KSkmJnQuZW5kZWQpcmV0dXJuIDA9PT10Lmxlbmd0aCYmRih0aGlzKSxudWxsO3ZhciBuLGk9dC5uZWVkUmVhZGFibGU7cmV0dXJuIGMoXCJuZWVkIHJlYWRhYmxlXCIsaSksKDA9PT10Lmxlbmd0aHx8dC5sZW5ndGgtZTx0LmhpZ2hXYXRlck1hcmspJiZjKFwibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmtcIixpPSEwKSx0LmVuZGVkfHx0LnJlYWRpbmc/YyhcInJlYWRpbmcgb3IgZW5kZWRcIixpPSExKTppJiYoYyhcImRvIHJlYWRcIiksdC5yZWFkaW5nPSEwLHQuc3luYz0hMCwwPT09dC5sZW5ndGgmJih0Lm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZCh0LmhpZ2hXYXRlck1hcmspLHQuc3luYz0hMSx0LnJlYWRpbmd8fChlPUUocix0KSkpLG51bGw9PT0obj1lPjA/RChlLHQpOm51bGwpPyh0Lm5lZWRSZWFkYWJsZT10Lmxlbmd0aDw9dC5oaWdoV2F0ZXJNYXJrLGU9MCk6KHQubGVuZ3RoLT1lLHQuYXdhaXREcmFpbj0wKSwwPT09dC5sZW5ndGgmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLHIhPT1lJiZ0LmVuZGVkJiZGKHRoaXMpKSxudWxsIT09biYmdGhpcy5lbWl0KFwiZGF0YVwiLG4pLG59LE0ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3godGhpcyxuZXcgdyhcIl9yZWFkKClcIikpfSxNLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGkucGlwZXNDb3VudCl7Y2FzZSAwOmkucGlwZXM9ZTticmVhaztjYXNlIDE6aS5waXBlcz1baS5waXBlcyxlXTticmVhaztkZWZhdWx0OmkucGlwZXMucHVzaChlKX1pLnBpcGVzQ291bnQrPTEsYyhcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLGkucGlwZXNDb3VudCx0KTt2YXIgbz0oIXR8fCExIT09dC5lbmQpJiZlIT09ci5zdGRvdXQmJmUhPT1yLnN0ZGVycj9sOmI7ZnVuY3Rpb24gYSh0LHIpe2MoXCJvbnVucGlwZVwiKSx0PT09biYmciYmITE9PT1yLmhhc1VucGlwZWQmJihyLmhhc1VucGlwZWQ9ITAsYyhcImNsZWFudXBcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIscCksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLG0pLGUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLHUpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGQpLGUucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixhKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbCksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGIpLG4ucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsZiksaD0hMCwhaS5hd2FpdERyYWlufHxlLl93cml0YWJsZVN0YXRlJiYhZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHUoKSl9ZnVuY3Rpb24gbCgpe2MoXCJvbmVuZFwiKSxlLmVuZCgpfWkuZW5kRW1pdHRlZD9yLm5leHRUaWNrKG8pOm4ub25jZShcImVuZFwiLG8pLGUub24oXCJ1bnBpcGVcIixhKTt2YXIgdT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2MoXCJwaXBlT25EcmFpblwiLHQuYXdhaXREcmFpbiksdC5hd2FpdERyYWluJiZ0LmF3YWl0RHJhaW4tLSwwPT09dC5hd2FpdERyYWluJiZzKGUsXCJkYXRhXCIpJiYodC5mbG93aW5nPSEwLEIoZSkpfX0obik7ZS5vbihcImRyYWluXCIsdSk7dmFyIGg9ITE7ZnVuY3Rpb24gZih0KXtjKFwib25kYXRhXCIpO3ZhciByPWUud3JpdGUodCk7YyhcImRlc3Qud3JpdGVcIixyKSwhMT09PXImJigoMT09PWkucGlwZXNDb3VudCYmaS5waXBlcz09PWV8fGkucGlwZXNDb3VudD4xJiYtMSE9PXooaS5waXBlcyxlKSkmJiFoJiYoYyhcImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZVwiLGkuYXdhaXREcmFpbiksaS5hd2FpdERyYWluKyspLG4ucGF1c2UoKSl9ZnVuY3Rpb24gZCh0KXtjKFwib25lcnJvclwiLHQpLGIoKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixkKSwwPT09cyhlLFwiZXJyb3JcIikmJngoZSx0KX1mdW5jdGlvbiBwKCl7ZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLG0pLGIoKX1mdW5jdGlvbiBtKCl7YyhcIm9uZmluaXNoXCIpLGUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApLGIoKX1mdW5jdGlvbiBiKCl7YyhcInVucGlwZVwiKSxuLnVucGlwZShlKX1yZXR1cm4gbi5vbihcImRhdGFcIixmKSxmdW5jdGlvbihlLHQscil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIGUucHJlcGVuZExpc3RlbmVyKHQscik7ZS5fZXZlbnRzJiZlLl9ldmVudHNbdF0/QXJyYXkuaXNBcnJheShlLl9ldmVudHNbdF0pP2UuX2V2ZW50c1t0XS51bnNoaWZ0KHIpOmUuX2V2ZW50c1t0XT1bcixlLl9ldmVudHNbdF1dOmUub24odCxyKX0oZSxcImVycm9yXCIsZCksZS5vbmNlKFwiY2xvc2VcIixwKSxlLm9uY2UoXCJmaW5pc2hcIixtKSxlLmVtaXQoXCJwaXBlXCIsbiksaS5mbG93aW5nfHwoYyhcInBpcGUgcmVzdW1lXCIpLG4ucmVzdW1lKCkpLGV9LE0ucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlLHI9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT10LnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PXQucGlwZXNDb3VudClyZXR1cm4gZSYmZSE9PXQucGlwZXN8fChlfHwoZT10LnBpcGVzKSx0LnBpcGVzPW51bGwsdC5waXBlc0NvdW50PTAsdC5mbG93aW5nPSExLGUmJmUuZW1pdChcInVucGlwZVwiLHRoaXMscikpLHRoaXM7aWYoIWUpe3ZhciBuPXQucGlwZXMsaT10LnBpcGVzQ291bnQ7dC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMTtmb3IodmFyIHM9MDtzPGk7cysrKW5bc10uZW1pdChcInVucGlwZVwiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgbz16KHQucGlwZXMsZSk7cmV0dXJuLTE9PT1vfHwodC5waXBlcy5zcGxpY2UobywxKSx0LnBpcGVzQ291bnQtPTEsMT09PXQucGlwZXNDb3VudCYmKHQucGlwZXM9dC5waXBlc1swXSksZS5lbWl0KFwidW5waXBlXCIsdGhpcyxyKSksdGhpc30sTS5wcm90b3R5cGUub249ZnVuY3Rpb24oZSx0KXt2YXIgbj1vLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsZSx0KSxpPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuXCJkYXRhXCI9PT1lPyhpLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudChcInJlYWRhYmxlXCIpPjAsITEhPT1pLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOlwicmVhZGFibGVcIj09PWUmJihpLmVuZEVtaXR0ZWR8fGkucmVhZGFibGVMaXN0ZW5pbmd8fChpLnJlYWRhYmxlTGlzdGVuaW5nPWkubmVlZFJlYWRhYmxlPSEwLGkuZmxvd2luZz0hMSxpLmVtaXR0ZWRSZWFkYWJsZT0hMSxjKFwib24gcmVhZGFibGVcIixpLmxlbmd0aCxpLnJlYWRpbmcpLGkubGVuZ3RoP0EodGhpcyk6aS5yZWFkaW5nfHxyLm5leHRUaWNrKE4sdGhpcykpKSxufSxNLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1NLnByb3RvdHlwZS5vbixNLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3ZhciBuPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxlLHQpO3JldHVyblwicmVhZGFibGVcIj09PWUmJnIubmV4dFRpY2soSSx0aGlzKSxufSxNLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oZSl7dmFyIHQ9by5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm5cInJlYWRhYmxlXCIhPT1lJiZ2b2lkIDAhPT1lfHxyLm5leHRUaWNrKEksdGhpcyksdH0sTS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gZS5mbG93aW5nfHwoYyhcInJlc3VtZVwiKSxlLmZsb3dpbmc9IWUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24oZSx0KXt0LnJlc3VtZVNjaGVkdWxlZHx8KHQucmVzdW1lU2NoZWR1bGVkPSEwLHIubmV4dFRpY2soUCxlLHQpKX0odGhpcyxlKSksZS5wYXVzZWQ9ITEsdGhpc30sTS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gYyhcImNhbGwgcGF1c2UgZmxvd2luZz0lalwiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihjKFwicGF1c2VcIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdChcInBhdXNlXCIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxNLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLG49ITE7Zm9yKHZhciBpIGluIGUub24oXCJlbmRcIiwoZnVuY3Rpb24oKXtpZihjKFwid3JhcHBlZCBlbmRcIiksci5kZWNvZGVyJiYhci5lbmRlZCl7dmFyIGU9ci5kZWNvZGVyLmVuZCgpO2UmJmUubGVuZ3RoJiZ0LnB1c2goZSl9dC5wdXNoKG51bGwpfSkpLGUub24oXCJkYXRhXCIsKGZ1bmN0aW9uKGkpeyhjKFwid3JhcHBlZCBkYXRhXCIpLHIuZGVjb2RlciYmKGk9ci5kZWNvZGVyLndyaXRlKGkpKSxyLm9iamVjdE1vZGUmJm51bGw9PWkpfHwoci5vYmplY3RNb2RlfHxpJiZpLmxlbmd0aCkmJih0LnB1c2goaSl8fChuPSEwLGUucGF1c2UoKSkpfSkpLGUpdm9pZCAwPT09dGhpc1tpXSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZVtpXSYmKHRoaXNbaV09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGVbdF0uYXBwbHkoZSxhcmd1bWVudHMpfX0oaSkpO2Zvcih2YXIgcz0wO3M8ay5sZW5ndGg7cysrKWUub24oa1tzXSx0aGlzLmVtaXQuYmluZCh0aGlzLGtbc10pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbih0KXtjKFwid3JhcHBlZCBfcmVhZFwiLHQpLG4mJihuPSExLGUucmVzdW1lKCkpfSx0aGlzfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihNLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09ZiYmKGY9ZShcIi4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvclwiKSksZih0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLnByb3RvdHlwZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE0ucHJvdG90eXBlLFwicmVhZGFibGVCdWZmZXJcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE0ucHJvdG90eXBlLFwicmVhZGFibGVGbG93aW5nXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ZSl9fSksTS5fZnJvbUxpc3Q9RCxPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsXCJyZWFkYWJsZUxlbmd0aFwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihNLmZyb209ZnVuY3Rpb24odCxyKXtyZXR1cm4gdm9pZCAwPT09ZCYmKGQ9ZShcIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tXCIpKSxkKE0sdCxyKX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4uL2Vycm9yc1wiOjQ3NyxcIi4vX3N0cmVhbV9kdXBsZXhcIjo0NzgsXCIuL2ludGVybmFsL3N0cmVhbXMvYXN5bmNfaXRlcmF0b3JcIjo0ODMsXCIuL2ludGVybmFsL3N0cmVhbXMvYnVmZmVyX2xpc3RcIjo0ODQsXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveVwiOjQ4NSxcIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tXCI6NDg3LFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlXCI6NDg5LFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbVwiOjQ5MCxfcHJvY2Vzczo0NjcsYnVmZmVyOjIyMCxldmVudHM6NDIyLGluaGVyaXRzOjQ0MCxcInN0cmluZ19kZWNvZGVyL1wiOjUyMix1dGlsOjE4OH1dLDQ4MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz11O3ZhciBuPWUoXCIuLi9lcnJvcnNcIikuY29kZXMsaT1uLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELHM9bi5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssbz1uLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsYT1uLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxsPWUoXCIuL19zdHJlYW1fZHVwbGV4XCIpO2Z1bmN0aW9uIGMoZSx0KXt2YXIgcj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtyLnRyYW5zZm9ybWluZz0hMTt2YXIgbj1yLndyaXRlY2I7aWYobnVsbD09PW4pcmV0dXJuIHRoaXMuZW1pdChcImVycm9yXCIsbmV3IHMpO3Iud3JpdGVjaHVuaz1udWxsLHIud3JpdGVjYj1udWxsLG51bGwhPXQmJnRoaXMucHVzaCh0KSxuKGUpO3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7aS5yZWFkaW5nPSExLChpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIHUoZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdSkpcmV0dXJuIG5ldyB1KGUpO2wuY2FsbCh0aGlzLGUpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpjLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxlJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09ZS50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmx1c2gmJih0aGlzLl9mbHVzaD1lLmZsdXNoKSksdGhpcy5vbihcInByZWZpbmlzaFwiLGgpfWZ1bmN0aW9uIGgoKXt2YXIgZT10aGlzO1wiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9mKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaCgoZnVuY3Rpb24odCxyKXtmKGUsdCxyKX0pKX1mdW5jdGlvbiBmKGUsdCxyKXtpZih0KXJldHVybiBlLmVtaXQoXCJlcnJvclwiLHQpO2lmKG51bGwhPXImJmUucHVzaChyKSxlLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgYTtpZihlLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IG87cmV0dXJuIGUucHVzaChudWxsKX1lKFwiaW5oZXJpdHNcIikodSxsKSx1LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsbC5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsZSx0KX0sdS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7cihuZXcgaShcIl90cmFuc2Zvcm0oKVwiKSl9LHUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYobi53cml0ZWNiPXIsbi53cml0ZWNodW5rPWUsbi53cml0ZWVuY29kaW5nPXQsIW4udHJhbnNmb3JtaW5nKXt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlOyhuLm5lZWRUcmFuc2Zvcm18fGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9fSx1LnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09dC53cml0ZWNodW5rfHx0LnRyYW5zZm9ybWluZz90Lm5lZWRUcmFuc2Zvcm09ITA6KHQudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybSh0LndyaXRlY2h1bmssdC53cml0ZWVuY29kaW5nLHQuYWZ0ZXJUcmFuc2Zvcm0pKX0sdS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXtsLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZSwoZnVuY3Rpb24oZSl7dChlKX0pKX19LHtcIi4uL2Vycm9yc1wiOjQ3NyxcIi4vX3N0cmVhbV9kdXBsZXhcIjo0NzgsaW5oZXJpdHM6NDQwfV0sNDgyOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShlKXt2YXIgdD10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbihlLHQscil7dmFyIG49ZS5lbnRyeTtlLmVudHJ5PW51bGw7Zm9yKDtuOyl7dmFyIGk9bi5jYWxsYmFjazt0LnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9dC5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1lfSh0LGUpfX12YXIgczt0LmV4cG9ydHM9TSxNLldyaXRhYmxlU3RhdGU9Uzt2YXIgbz17ZGVwcmVjYXRlOmUoXCJ1dGlsLWRlcHJlY2F0ZVwiKX0sYT1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbVwiKSxsPWUoXCJidWZmZXJcIikuQnVmZmVyLGM9KHZvaWQgMCE9PW4/bjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe307dmFyIHUsaD1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL2Rlc3Ryb3lcIiksZj1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlXCIpLmdldEhpZ2hXYXRlck1hcmssZD1lKFwiLi4vZXJyb3JzXCIpLmNvZGVzLHA9ZC5FUlJfSU5WQUxJRF9BUkdfVFlQRSxtPWQuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsYj1kLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxnPWQuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSx5PWQuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsdj1kLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsdz1kLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELF89ZC5FUlJfVU5LTk9XTl9FTkNPRElORyx4PWguZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gaygpe31mdW5jdGlvbiBTKHQsbixvKXtzPXN8fGUoXCIuL19zdHJlYW1fZHVwbGV4XCIpLHQ9dHx8e30sXCJib29sZWFuXCIhPXR5cGVvZiBvJiYobz1uIGluc3RhbmNlb2YgcyksdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLG8mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Zih0aGlzLHQsXCJ3cml0YWJsZUhpZ2hXYXRlck1hcmtcIixvKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMTt2YXIgYT0hMT09PXQuZGVjb2RlU3RyaW5nczt0aGlzLmRlY29kZVN0cmluZ3M9IWEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oZSl7IWZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5fd3JpdGFibGVTdGF0ZSxpPW4uc3luYyxzPW4ud3JpdGVjYjtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBzKXRocm93IG5ldyBiO2lmKGZ1bmN0aW9uKGUpe2Uud3JpdGluZz0hMSxlLndyaXRlY2I9bnVsbCxlLmxlbmd0aC09ZS53cml0ZWxlbixlLndyaXRlbGVuPTB9KG4pLHQpIWZ1bmN0aW9uKGUsdCxuLGkscyl7LS10LnBlbmRpbmdjYixuPyhyLm5leHRUaWNrKHMsaSksci5uZXh0VGljayhPLGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAseChlLGkpKToocyhpKSxlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx4KGUsaSksTyhlLHQpKX0oZSxuLGksdCxzKTtlbHNle3ZhciBvPUEobil8fGUuZGVzdHJveWVkO298fG4uY29ya2VkfHxuLmJ1ZmZlclByb2Nlc3Npbmd8fCFuLmJ1ZmZlcmVkUmVxdWVzdHx8RShlLG4pLGk/ci5uZXh0VGljayhULGUsbixvLHMpOlQoZSxuLG8scyl9fShuLGUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT10LmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhdC5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGkodGhpcyl9ZnVuY3Rpb24gTSh0KXt2YXIgcj10aGlzIGluc3RhbmNlb2Yocz1zfHxlKFwiLi9fc3RyZWFtX2R1cGxleFwiKSk7aWYoIXImJiF1LmNhbGwoTSx0aGlzKSlyZXR1cm4gbmV3IE0odCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgUyh0LHRoaXMsciksdGhpcy53cml0YWJsZT0hMCx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC53cml0ZSYmKHRoaXMuX3dyaXRlPXQud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGV2JiYodGhpcy5fd3JpdGV2PXQud3JpdGV2KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXQuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maW5hbCYmKHRoaXMuX2ZpbmFsPXQuZmluYWwpKSxhLmNhbGwodGhpcyl9ZnVuY3Rpb24gQyhlLHQscixuLGkscyxvKXt0LndyaXRlbGVuPW4sdC53cml0ZWNiPW8sdC53cml0aW5nPSEwLHQuc3luYz0hMCx0LmRlc3Ryb3llZD90Lm9ud3JpdGUobmV3IHkoXCJ3cml0ZVwiKSk6cj9lLl93cml0ZXYoaSx0Lm9ud3JpdGUpOmUuX3dyaXRlKGkscyx0Lm9ud3JpdGUpLHQuc3luYz0hMX1mdW5jdGlvbiBUKGUsdCxyLG4pe3J8fGZ1bmN0aW9uKGUsdCl7MD09PXQubGVuZ3RoJiZ0Lm5lZWREcmFpbiYmKHQubmVlZERyYWluPSExLGUuZW1pdChcImRyYWluXCIpKX0oZSx0KSx0LnBlbmRpbmdjYi0tLG4oKSxPKGUsdCl9ZnVuY3Rpb24gRShlLHQpe3QuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgcj10LmJ1ZmZlcmVkUmVxdWVzdDtpZihlLl93cml0ZXYmJnImJnIubmV4dCl7dmFyIG49dC5idWZmZXJlZFJlcXVlc3RDb3VudCxzPW5ldyBBcnJheShuKSxvPXQuY29ya2VkUmVxdWVzdHNGcmVlO28uZW50cnk9cjtmb3IodmFyIGE9MCxsPSEwO3I7KXNbYV09cixyLmlzQnVmfHwobD0hMSkscj1yLm5leHQsYSs9MTtzLmFsbEJ1ZmZlcnM9bCxDKGUsdCwhMCx0Lmxlbmd0aCxzLFwiXCIsby5maW5pc2gpLHQucGVuZGluZ2NiKyssdC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsby5uZXh0Pyh0LmNvcmtlZFJlcXVlc3RzRnJlZT1vLm5leHQsby5uZXh0PW51bGwpOnQuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKHQpLHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7cjspe3ZhciBjPXIuY2h1bmssdT1yLmVuY29kaW5nLGg9ci5jYWxsYmFjaztpZihDKGUsdCwhMSx0Lm9iamVjdE1vZGU/MTpjLmxlbmd0aCxjLHUsaCkscj1yLm5leHQsdC5idWZmZXJlZFJlcXVlc3RDb3VudC0tLHQud3JpdGluZylicmVha31udWxsPT09ciYmKHQubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX10LmJ1ZmZlcmVkUmVxdWVzdD1yLHQuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBBKGUpe3JldHVybiBlLmVuZGluZyYmMD09PWUubGVuZ3RoJiZudWxsPT09ZS5idWZmZXJlZFJlcXVlc3QmJiFlLmZpbmlzaGVkJiYhZS53cml0aW5nfWZ1bmN0aW9uIFIoZSx0KXtlLl9maW5hbCgoZnVuY3Rpb24ocil7dC5wZW5kaW5nY2ItLSxyJiZ4KGUsciksdC5wcmVmaW5pc2hlZD0hMCxlLmVtaXQoXCJwcmVmaW5pc2hcIiksTyhlLHQpfSkpfWZ1bmN0aW9uIE8oZSx0KXt2YXIgbj1BKHQpO2lmKG4mJihmdW5jdGlvbihlLHQpe3QucHJlZmluaXNoZWR8fHQuZmluYWxDYWxsZWR8fChcImZ1bmN0aW9uXCIhPXR5cGVvZiBlLl9maW5hbHx8dC5kZXN0cm95ZWQ/KHQucHJlZmluaXNoZWQ9ITAsZS5lbWl0KFwicHJlZmluaXNoXCIpKToodC5wZW5kaW5nY2IrKyx0LmZpbmFsQ2FsbGVkPSEwLHIubmV4dFRpY2soUixlLHQpKSl9KGUsdCksMD09PXQucGVuZGluZ2NiJiYodC5maW5pc2hlZD0hMCxlLmVtaXQoXCJmaW5pc2hcIiksdC5hdXRvRGVzdHJveSkpKXt2YXIgaT1lLl9yZWFkYWJsZVN0YXRlOyghaXx8aS5hdXRvRGVzdHJveSYmaS5lbmRFbWl0dGVkKSYmZS5kZXN0cm95KCl9cmV0dXJuIG59ZShcImluaGVyaXRzXCIpKE0sYSksUy5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHQ9W107ZTspdC5wdXNoKGUpLGU9ZS5uZXh0O3JldHVybiB0fSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUy5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0Om8uZGVwcmVjYXRlKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSksXCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLlwiLFwiREVQMDAwM1wiKX0pfWNhdGNoKGUpe319KCksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyh1PUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISF1LmNhbGwodGhpcyxlKXx8dGhpcz09PU0mJihlJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgUyl9fSkpOnU9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzfSxNLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7eCh0aGlzLG5ldyBnKX0sTS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHM9dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExLGE9IXMub2JqZWN0TW9kZSYmKGk9ZSxsLmlzQnVmZmVyKGkpfHxpIGluc3RhbmNlb2YgYyk7cmV0dXJuIGEmJiFsLmlzQnVmZmVyKGUpJiYoZT1mdW5jdGlvbihlKXtyZXR1cm4gbC5mcm9tKGUpfShlKSksXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKG49dCx0PW51bGwpLGE/dD1cImJ1ZmZlclwiOnR8fCh0PXMuZGVmYXVsdEVuY29kaW5nKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiBuJiYobj1rKSxzLmVuZGluZz9mdW5jdGlvbihlLHQpe3ZhciBuPW5ldyB3O3goZSxuKSxyLm5leHRUaWNrKHQsbil9KHRoaXMsbik6KGF8fGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBzO3JldHVybiBudWxsPT09bj9zPW5ldyB2Olwic3RyaW5nXCI9PXR5cGVvZiBufHx0Lm9iamVjdE1vZGV8fChzPW5ldyBwKFwiY2h1bmtcIixbXCJzdHJpbmdcIixcIkJ1ZmZlclwiXSxuKSksIXN8fCh4KGUscyksci5uZXh0VGljayhpLHMpLCExKX0odGhpcyxzLGUsbikpJiYocy5wZW5kaW5nY2IrKyxvPWZ1bmN0aW9uKGUsdCxyLG4saSxzKXtpZighcil7dmFyIG89ZnVuY3Rpb24oZSx0LHIpe2Uub2JqZWN0TW9kZXx8ITE9PT1lLmRlY29kZVN0cmluZ3N8fFwic3RyaW5nXCIhPXR5cGVvZiB0fHwodD1sLmZyb20odCxyKSk7cmV0dXJuIHR9KHQsbixpKTtuIT09byYmKHI9ITAsaT1cImJ1ZmZlclwiLG49byl9dmFyIGE9dC5vYmplY3RNb2RlPzE6bi5sZW5ndGg7dC5sZW5ndGgrPWE7dmFyIGM9dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrO2N8fCh0Lm5lZWREcmFpbj0hMCk7aWYodC53cml0aW5nfHx0LmNvcmtlZCl7dmFyIHU9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0O3QubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6bixlbmNvZGluZzppLGlzQnVmOnIsY2FsbGJhY2s6cyxuZXh0Om51bGx9LHU/dS5uZXh0PXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDp0LmJ1ZmZlcmVkUmVxdWVzdD10Lmxhc3RCdWZmZXJlZFJlcXVlc3QsdC5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIEMoZSx0LCExLGEsbixpLHMpO3JldHVybiBjfSh0aGlzLHMsYSxlLHQsbikpLG99LE0ucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxNLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl93cml0YWJsZVN0YXRlO2UuY29ya2VkJiYoZS5jb3JrZWQtLSxlLndyaXRpbmd8fGUuY29ya2VkfHxlLmJ1ZmZlclByb2Nlc3Npbmd8fCFlLmJ1ZmZlcmVkUmVxdWVzdHx8RSh0aGlzLGUpKX0sTS5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnRvTG93ZXJDYXNlKCkpLCEoW1wiaGV4XCIsXCJ1dGY4XCIsXCJ1dGYtOFwiLFwiYXNjaWlcIixcImJpbmFyeVwiLFwiYmFzZTY0XCIsXCJ1Y3MyXCIsXCJ1Y3MtMlwiLFwidXRmMTZsZVwiLFwidXRmLTE2bGVcIixcInJhd1wiXS5pbmRleE9mKChlK1wiXCIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgXyhlKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9ZSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsXCJ3cml0YWJsZUJ1ZmZlclwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLnByb3RvdHlwZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksTS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtyKG5ldyBtKFwiX3dyaXRlKClcIikpfSxNLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsTS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGU/KG49ZSxlPW51bGwsdD1udWxsKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYobj10LHQ9bnVsbCksbnVsbCE9ZSYmdGhpcy53cml0ZShlLHQpLGkuY29ya2VkJiYoaS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxpLmVuZGluZ3x8ZnVuY3Rpb24oZSx0LG4pe3QuZW5kaW5nPSEwLE8oZSx0KSxuJiYodC5maW5pc2hlZD9yLm5leHRUaWNrKG4pOmUub25jZShcImZpbmlzaFwiLG4pKTt0LmVuZGVkPSEwLGUud3JpdGFibGU9ITF9KHRoaXMsaSxuKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsXCJ3cml0YWJsZUxlbmd0aFwiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTS5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSksTS5wcm90b3R5cGUuZGVzdHJveT1oLmRlc3Ryb3ksTS5wcm90b3R5cGUuX3VuZGVzdHJveT1oLnVuZGVzdHJveSxNLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihlLHQpe3QoZSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4uL2Vycm9yc1wiOjQ3NyxcIi4vX3N0cmVhbV9kdXBsZXhcIjo0NzgsXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveVwiOjQ4NSxcIi4vaW50ZXJuYWwvc3RyZWFtcy9zdGF0ZVwiOjQ4OSxcIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW1cIjo0OTAsX3Byb2Nlc3M6NDY3LGJ1ZmZlcjoyMjAsaW5oZXJpdHM6NDQwLFwidXRpbC1kZXByZWNhdGVcIjo1MjR9XSw0ODM6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG47ZnVuY3Rpb24gaShlLHQscil7cmV0dXJuKHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHI9ZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PXIpe3ZhciBuPXIuY2FsbChlLHR8fFwiZGVmYXVsdFwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgbilyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIil9cmV0dXJuKFwic3RyaW5nXCI9PT10P1N0cmluZzpOdW1iZXIpKGUpfShlLFwic3RyaW5nXCIpO3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX12YXIgcz1lKFwiLi9lbmQtb2Ytc3RyZWFtXCIpLG89U3ltYm9sKFwibGFzdFJlc29sdmVcIiksYT1TeW1ib2woXCJsYXN0UmVqZWN0XCIpLGw9U3ltYm9sKFwiZXJyb3JcIiksYz1TeW1ib2woXCJlbmRlZFwiKSx1PVN5bWJvbChcImxhc3RQcm9taXNlXCIpLGg9U3ltYm9sKFwiaGFuZGxlUHJvbWlzZVwiKSxmPVN5bWJvbChcInN0cmVhbVwiKTtmdW5jdGlvbiBkKGUsdCl7cmV0dXJue3ZhbHVlOmUsZG9uZTp0fX1mdW5jdGlvbiBwKGUpe3ZhciB0PWVbb107aWYobnVsbCE9PXQpe3ZhciByPWVbZl0ucmVhZCgpO251bGwhPT1yJiYoZVt1XT1udWxsLGVbb109bnVsbCxlW2FdPW51bGwsdChkKHIsITEpKSl9fWZ1bmN0aW9uIG0oZSl7ci5uZXh0VGljayhwLGUpfXZhciBiPU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSksZz1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2ZdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXNbbF07aWYobnVsbCE9PXQpcmV0dXJuIFByb21pc2UucmVqZWN0KHQpO2lmKHRoaXNbY10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShkKHZvaWQgMCwhMCkpO2lmKHRoaXNbZl0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXtyLm5leHRUaWNrKChmdW5jdGlvbigpe2VbbF0/bihlW2xdKTp0KGQodm9pZCAwLCEwKSl9KSl9KSk7dmFyIG4saT10aGlzW3VdO2lmKGkpbj1uZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLG4pe2UudGhlbigoZnVuY3Rpb24oKXt0W2NdP3IoZCh2b2lkIDAsITApKTp0W2hdKHIsbil9KSxuKX19KGksdGhpcykpO2Vsc2V7dmFyIHM9dGhpc1tmXS5yZWFkKCk7aWYobnVsbCE9PXMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShkKHMsITEpKTtuPW5ldyBQcm9taXNlKHRoaXNbaF0pfXJldHVybiB0aGlzW3VdPW4sbn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobixcInJldHVyblwiLChmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2VbZl0uZGVzdHJveShudWxsLChmdW5jdGlvbihlKXtlP3IoZSk6dChkKHZvaWQgMCwhMCkpfSkpfSkpfSkpLG4pLGIpO3QuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyPU9iamVjdC5jcmVhdGUoZywoaSh0PXt9LGYse3ZhbHVlOmUsd3JpdGFibGU6ITB9KSxpKHQsbyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkodCxhLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaSh0LGwse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKHQsYyx7dmFsdWU6ZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksaSh0LGgse3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49cltmXS5yZWFkKCk7bj8oclt1XT1udWxsLHJbb109bnVsbCxyW2FdPW51bGwsZShkKG4sITEpKSk6KHJbb109ZSxyW2FdPXQpfSx3cml0YWJsZTohMH0pLHQpKTtyZXR1cm4gclt1XT1udWxsLHMoZSwoZnVuY3Rpb24oZSl7aWYoZSYmXCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRVwiIT09ZS5jb2RlKXt2YXIgdD1yW2FdO3JldHVybiBudWxsIT09dCYmKHJbdV09bnVsbCxyW29dPW51bGwsclthXT1udWxsLHQoZSkpLHZvaWQocltsXT1lKX12YXIgbj1yW29dO251bGwhPT1uJiYoclt1XT1udWxsLHJbb109bnVsbCxyW2FdPW51bGwsbihkKHZvaWQgMCwhMCkpKSxyW2NdPSEwfSkpLGUub24oXCJyZWFkYWJsZVwiLG0uYmluZChudWxsLHIpKSxyfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpKX0se1wiLi9lbmQtb2Ytc3RyZWFtXCI6NDg2LF9wcm9jZXNzOjQ2N31dLDQ4NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0KXt2YXIgcj1PYmplY3Qua2V5cyhlKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO3QmJihuPW4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGkoZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW3RdP2FyZ3VtZW50c1t0XTp7fTt0JTI/bihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoZSx0LHJbdF0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOm4oT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iocix0KSl9KSl9cmV0dXJuIGV9ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuKHQ9YSh0KSlpbiBlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTplW3RdPXIsZX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLGEobi5rZXkpLG4pfX1mdW5jdGlvbiBhKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGV8fG51bGw9PT1lKXJldHVybiBlO3ZhciByPWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1yKXt2YXIgbj1yLmNhbGwoZSx0fHxcImRlZmF1bHRcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpfXJldHVybihcInN0cmluZ1wiPT09dD9TdHJpbmc6TnVtYmVyKShlKX0oZSxcInN0cmluZ1wiKTtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdD90OlN0cmluZyh0KX12YXIgbD1lKFwiYnVmZmVyXCIpLkJ1ZmZlcixjPWUoXCJ1dGlsXCIpLmluc3BlY3QsdT1jJiZjLmN1c3RvbXx8XCJpbnNwZWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9KHRoaXMsZSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH12YXIgdCxyLG47cmV0dXJuIHQ9ZSwocj1be2tleTpcInB1c2hcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD17ZGF0YTplLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD10OnRoaXMuaGVhZD10LHRoaXMudGFpbD10LCsrdGhpcy5sZW5ndGh9fSx7a2V5OlwidW5zaGlmdFwiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10KSx0aGlzLmhlYWQ9dCwrK3RoaXMubGVuZ3RofX0se2tleTpcInNoaWZ0XCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlPXRoaXMuaGVhZC5kYXRhO3JldHVybiAxPT09dGhpcy5sZW5ndGg/dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsOnRoaXMuaGVhZD10aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGV9fX0se2tleTpcImNsZWFyXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6XCJqb2luXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciB0PXRoaXMuaGVhZCxyPVwiXCIrdC5kYXRhO3Q9dC5uZXh0OylyKz1lK3QuZGF0YTtyZXR1cm4gcn19LHtrZXk6XCJjb25jYXRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIGwuYWxsb2MoMCk7Zm9yKHZhciB0LHIsbixpPWwuYWxsb2NVbnNhZmUoZT4+PjApLHM9dGhpcy5oZWFkLG89MDtzOyl0PXMuZGF0YSxyPWksbj1vLGwucHJvdG90eXBlLmNvcHkuY2FsbCh0LHIsbiksbys9cy5kYXRhLmxlbmd0aCxzPXMubmV4dDtyZXR1cm4gaX19LHtrZXk6XCJjb25zdW1lXCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gZTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KHI9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlKSk6cj1lPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTp0P3RoaXMuX2dldFN0cmluZyhlKTp0aGlzLl9nZXRCdWZmZXIoZSkscn19LHtrZXk6XCJmaXJzdFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleTpcIl9nZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmhlYWQscj0xLG49dC5kYXRhO2ZvcihlLT1uLmxlbmd0aDt0PXQubmV4dDspe3ZhciBpPXQuZGF0YSxzPWU+aS5sZW5ndGg/aS5sZW5ndGg6ZTtpZihzPT09aS5sZW5ndGg/bis9aTpuKz1pLnNsaWNlKDAsZSksMD09KGUtPXMpKXtzPT09aS5sZW5ndGg/KCsrcix0Lm5leHQ/dGhpcy5oZWFkPXQubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9dCx0LmRhdGE9aS5zbGljZShzKSk7YnJlYWt9KytyfXJldHVybiB0aGlzLmxlbmd0aC09cixufX0se2tleTpcIl9nZXRCdWZmZXJcIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1sLmFsbG9jVW5zYWZlKGUpLHI9dGhpcy5oZWFkLG49MTtmb3Ioci5kYXRhLmNvcHkodCksZS09ci5kYXRhLmxlbmd0aDtyPXIubmV4dDspe3ZhciBpPXIuZGF0YSxzPWU+aS5sZW5ndGg/aS5sZW5ndGg6ZTtpZihpLmNvcHkodCx0Lmxlbmd0aC1lLDAscyksMD09KGUtPXMpKXtzPT09aS5sZW5ndGg/KCsrbixyLm5leHQ/dGhpcy5oZWFkPXIubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cixyLmRhdGE9aS5zbGljZShzKSk7YnJlYWt9KytufXJldHVybiB0aGlzLmxlbmd0aC09bix0fX0se2tleTp1LHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGModGhpcyxpKGkoe30sdCkse30se2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJm8odC5wcm90b3R5cGUsciksbiYmbyh0LG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwicHJvdG90eXBlXCIse3dyaXRhYmxlOiExfSksZX0oKX0se2J1ZmZlcjoyMjAsdXRpbDoxODh9XSw0ODU6W2Z1bmN0aW9uKGUsdCxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcihlLHQpe2koZSx0KSxuKGUpfWZ1bmN0aW9uIG4oZSl7ZS5fd3JpdGFibGVTdGF0ZSYmIWUuX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxlLl9yZWFkYWJsZVN0YXRlJiYhZS5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fGUuZW1pdChcImNsb3NlXCIpfWZ1bmN0aW9uIGkoZSx0KXtlLmVtaXQoXCJlcnJvclwiLHQpfXQuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbih0LHMpe3ZhciBvPXRoaXMsYT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCxsPXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkO3JldHVybiBhfHxsPyhzP3ModCk6dCYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxlLm5leHRUaWNrKGksdGhpcyx0KSk6ZS5uZXh0VGljayhpLHRoaXMsdCkpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh0fHxudWxsLChmdW5jdGlvbih0KXshcyYmdD9vLl93cml0YWJsZVN0YXRlP28uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP2UubmV4dFRpY2sobixvKTooby5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5uZXh0VGljayhyLG8sdCkpOmUubmV4dFRpY2socixvLHQpOnM/KGUubmV4dFRpY2sobixvKSxzKHQpKTplLm5leHRUaWNrKG4sbyl9KSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl9yZWFkYWJsZVN0YXRlLG49ZS5fd3JpdGFibGVTdGF0ZTtyJiZyLmF1dG9EZXN0cm95fHxuJiZuLmF1dG9EZXN0cm95P2UuZGVzdHJveSh0KTplLmVtaXQoXCJlcnJvclwiLHQpfX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJfcHJvY2Vzc1wiKSl9LHtfcHJvY2Vzczo0Njd9XSw0ODY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vLi4vLi4vZXJyb3JzXCIpLmNvZGVzLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIGkoKXt9dC5leHBvcnRzPWZ1bmN0aW9uIGUodCxyLHMpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIGUodCxudWxsLHIpO3J8fChyPXt9KSxzPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybiBmdW5jdGlvbigpe2lmKCF0KXt0PSEwO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09YXJndW1lbnRzW2ldO2UuYXBwbHkodGhpcyxuKX19fShzfHxpKTt2YXIgbz1yLnJlYWRhYmxlfHwhMSE9PXIucmVhZGFibGUmJnQucmVhZGFibGUsYT1yLndyaXRhYmxlfHwhMSE9PXIud3JpdGFibGUmJnQud3JpdGFibGUsbD1mdW5jdGlvbigpe3Qud3JpdGFibGV8fHUoKX0sYz10Ll93cml0YWJsZVN0YXRlJiZ0Ll93cml0YWJsZVN0YXRlLmZpbmlzaGVkLHU9ZnVuY3Rpb24oKXthPSExLGM9ITAsb3x8cy5jYWxsKHQpfSxoPXQuX3JlYWRhYmxlU3RhdGUmJnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxmPWZ1bmN0aW9uKCl7bz0hMSxoPSEwLGF8fHMuY2FsbCh0KX0sZD1mdW5jdGlvbihlKXtzLmNhbGwodCxlKX0scD1mdW5jdGlvbigpe3ZhciBlO3JldHVybiBvJiYhaD8odC5fcmVhZGFibGVTdGF0ZSYmdC5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KGU9bmV3IG4pLHMuY2FsbCh0LGUpKTphJiYhYz8odC5fd3JpdGFibGVTdGF0ZSYmdC5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KGU9bmV3IG4pLHMuY2FsbCh0LGUpKTp2b2lkIDB9LG09ZnVuY3Rpb24oKXt0LnJlcS5vbihcImZpbmlzaFwiLHUpfTtyZXR1cm4hZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2V0SGVhZGVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmFib3J0fSh0KT9hJiYhdC5fd3JpdGFibGVTdGF0ZSYmKHQub24oXCJlbmRcIixsKSx0Lm9uKFwiY2xvc2VcIixsKSk6KHQub24oXCJjb21wbGV0ZVwiLHUpLHQub24oXCJhYm9ydFwiLHApLHQucmVxP20oKTp0Lm9uKFwicmVxdWVzdFwiLG0pKSx0Lm9uKFwiZW5kXCIsZiksdC5vbihcImZpbmlzaFwiLHUpLCExIT09ci5lcnJvciYmdC5vbihcImVycm9yXCIsZCksdC5vbihcImNsb3NlXCIscCksZnVuY3Rpb24oKXt0LnJlbW92ZUxpc3RlbmVyKFwiY29tcGxldGVcIix1KSx0LnJlbW92ZUxpc3RlbmVyKFwiYWJvcnRcIixwKSx0LnJlbW92ZUxpc3RlbmVyKFwicmVxdWVzdFwiLG0pLHQucmVxJiZ0LnJlcS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLHUpLHQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixsKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixsKSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsdSksdC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGYpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGQpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHApfX19LHtcIi4uLy4uLy4uL2Vycm9yc1wiOjQ3N31dLDQ4NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlclwiKX19LHt9XSw0ODg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbjt2YXIgaT1lKFwiLi4vLi4vLi4vZXJyb3JzXCIpLmNvZGVzLHM9aS5FUlJfTUlTU0lOR19BUkdTLG89aS5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBhKGUpe2lmKGUpdGhyb3cgZX1mdW5jdGlvbiBsKHQscixpLHMpe3M9ZnVuY3Rpb24oZSl7dmFyIHQ9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7dHx8KHQ9ITAsZS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShzKTt2YXIgYT0hMTt0Lm9uKFwiY2xvc2VcIiwoZnVuY3Rpb24oKXthPSEwfSkpLHZvaWQgMD09PW4mJihuPWUoXCIuL2VuZC1vZi1zdHJlYW1cIikpLG4odCx7cmVhZGFibGU6cix3cml0YWJsZTppfSwoZnVuY3Rpb24oZSl7aWYoZSlyZXR1cm4gcyhlKTthPSEwLHMoKX0pKTt2YXIgbD0hMTtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoIWEmJiFsKXJldHVybiBsPSEwLGZ1bmN0aW9uKGUpe3JldHVybiBlLnNldEhlYWRlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5hYm9ydH0odCk/dC5hYm9ydCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZGVzdHJveT90LmRlc3Ryb3koKTp2b2lkIHMoZXx8bmV3IG8oXCJwaXBlXCIpKX19ZnVuY3Rpb24gYyhlKXtlKCl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiBlLnBpcGUodCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5sZW5ndGg/XCJmdW5jdGlvblwiIT10eXBlb2YgZVtlLmxlbmd0aC0xXT9hOmUucG9wKCk6YX10LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTt2YXIgbixpPWgodCk7aWYoQXJyYXkuaXNBcnJheSh0WzBdKSYmKHQ9dFswXSksdC5sZW5ndGg8Mil0aHJvdyBuZXcgcyhcInN0cmVhbXNcIik7dmFyIG89dC5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIHM9cjx0Lmxlbmd0aC0xO3JldHVybiBsKGUscyxyPjAsKGZ1bmN0aW9uKGUpe258fChuPWUpLGUmJm8uZm9yRWFjaChjKSxzfHwoby5mb3JFYWNoKGMpLGkobikpfSkpfSkpO3JldHVybiB0LnJlZHVjZSh1KX19LHtcIi4uLy4uLy4uL2Vycm9yc1wiOjQ3NyxcIi4vZW5kLW9mLXN0cmVhbVwiOjQ4Nn1dLDQ4OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi8uLi8uLi9lcnJvcnNcIikuY29kZXMuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3QuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihlLHQscixpKXt2YXIgcz1mdW5jdGlvbihlLHQscil7cmV0dXJuIG51bGwhPWUuaGlnaFdhdGVyTWFyaz9lLmhpZ2hXYXRlck1hcms6dD9lW3JdOm51bGx9KHQsaSxyKTtpZihudWxsIT1zKXtpZighaXNGaW5pdGUocyl8fE1hdGguZmxvb3IocykhPT1zfHxzPDApdGhyb3cgbmV3IG4oaT9yOlwiaGlnaFdhdGVyTWFya1wiLHMpO3JldHVybiBNYXRoLmZsb29yKHMpfXJldHVybiBlLm9iamVjdE1vZGU/MTY6MTYzODR9fX0se1wiLi4vLi4vLi4vZXJyb3JzXCI6NDc3fV0sNDkwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWUoXCJldmVudHNcIikuRXZlbnRFbWl0dGVyfSx7ZXZlbnRzOjQyMn1dLDQ5MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiOyhyPXQuZXhwb3J0cz1lKFwiLi9saWIvX3N0cmVhbV9yZWFkYWJsZS5qc1wiKSkuU3RyZWFtPXIsci5SZWFkYWJsZT1yLHIuV3JpdGFibGU9ZShcIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanNcIiksci5EdXBsZXg9ZShcIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzXCIpLHIuVHJhbnNmb3JtPWUoXCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qc1wiKSxyLlBhc3NUaHJvdWdoPWUoXCIuL2xpYi9fc3RyZWFtX3Bhc3N0aHJvdWdoLmpzXCIpLHIuZmluaXNoZWQ9ZShcIi4vbGliL2ludGVybmFsL3N0cmVhbXMvZW5kLW9mLXN0cmVhbS5qc1wiKSxyLnBpcGVsaW5lPWUoXCIuL2xpYi9pbnRlcm5hbC9zdHJlYW1zL3BpcGVsaW5lLmpzXCIpfSx7XCIuL2xpYi9fc3RyZWFtX2R1cGxleC5qc1wiOjQ3OCxcIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanNcIjo0NzksXCIuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzXCI6NDgwLFwiLi9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanNcIjo0ODEsXCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzXCI6NDgyLFwiLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzXCI6NDg2LFwiLi9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qc1wiOjQ4OH1dLDQ5MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49T2JqZWN0LmRlZmluZVByb3BlcnR5fHxmdW5jdGlvbihlLHQscil7ZVt0XT1yLnZhbHVlfSxpPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scz1pLml0ZXJhdG9yfHxcIkBAaXRlcmF0b3JcIixvPWkuYXN5bmNJdGVyYXRvcnx8XCJAQGFzeW5jSXRlcmF0b3JcIixhPWkudG9TdHJpbmdUYWd8fFwiQEB0b1N0cmluZ1RhZ1wiO2Z1bmN0aW9uIGwoZSx0LHIpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZVt0XX10cnl7bCh7fSxcIlwiKX1jYXRjaChlKXtsPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZVt0XT1yfX1mdW5jdGlvbiBjKGUsdCxyLGkpe3ZhciBzPXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgZj90OmYsbz1PYmplY3QuY3JlYXRlKHMucHJvdG90eXBlKSxhPW5ldyBNKGl8fFtdKTtyZXR1cm4gbihvLFwiX2ludm9rZVwiLHt2YWx1ZTpfKGUscixhKX0pLG99ZnVuY3Rpb24gdShlLHQscil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOmV9fX1lLndyYXA9Yzt2YXIgaD17fTtmdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gcCgpe312YXIgbT17fTtsKG0scywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgYj1PYmplY3QuZ2V0UHJvdG90eXBlT2YsZz1iJiZiKGIoQyhbXSkpKTtnJiZnIT09dCYmci5jYWxsKGcscykmJihtPWcpO3ZhciB5PXAucHJvdG90eXBlPWYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSk7ZnVuY3Rpb24gdihlKXtbXCJuZXh0XCIsXCJ0aHJvd1wiLFwicmV0dXJuXCJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2woZSx0LChmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9KSl9KSl9ZnVuY3Rpb24gdyhlLHQpe3ZhciBpO24odGhpcyxcIl9pbnZva2VcIix7dmFsdWU6ZnVuY3Rpb24obixzKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyB0KChmdW5jdGlvbihpLG8peyFmdW5jdGlvbiBuKGkscyxvLGEpe3ZhciBsPXUoZVtpXSxlLHMpO2lmKFwidGhyb3dcIiE9PWwudHlwZSl7dmFyIGM9bC5hcmcsaD1jLnZhbHVlO3JldHVybiBoJiZcIm9iamVjdFwiPT10eXBlb2YgaCYmci5jYWxsKGgsXCJfX2F3YWl0XCIpP3QucmVzb2x2ZShoLl9fYXdhaXQpLnRoZW4oKGZ1bmN0aW9uKGUpe24oXCJuZXh0XCIsZSxvLGEpfSksKGZ1bmN0aW9uKGUpe24oXCJ0aHJvd1wiLGUsbyxhKX0pKTp0LnJlc29sdmUoaCkudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLG8oYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIG4oXCJ0aHJvd1wiLGUsbyxhKX0pKX1hKGwuYXJnKX0obixzLGksbyl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fSl9ZnVuY3Rpb24gXyhlLHQscil7dmFyIG49XCJzdXNwZW5kZWRTdGFydFwiO3JldHVybiBmdW5jdGlvbihpLHMpe2lmKFwiZXhlY3V0aW5nXCI9PT1uKXRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7aWYoXCJjb21wbGV0ZWRcIj09PW4pe2lmKFwidGhyb3dcIj09PWkpdGhyb3cgcztyZXR1cm4gVCgpfWZvcihyLm1ldGhvZD1pLHIuYXJnPXM7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgYT14KG8scik7aWYoYSl7aWYoYT09PWgpY29udGludWU7cmV0dXJuIGF9fWlmKFwibmV4dFwiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZihcInRocm93XCI9PT1yLm1ldGhvZCl7aWYoXCJzdXNwZW5kZWRTdGFydFwiPT09bil0aHJvdyBuPVwiY29tcGxldGVkXCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZVwicmV0dXJuXCI9PT1yLm1ldGhvZCYmci5hYnJ1cHQoXCJyZXR1cm5cIixyLmFyZyk7bj1cImV4ZWN1dGluZ1wiO3ZhciBsPXUoZSx0LHIpO2lmKFwibm9ybWFsXCI9PT1sLnR5cGUpe2lmKG49ci5kb25lP1wiY29tcGxldGVkXCI6XCJzdXNwZW5kZWRZaWVsZFwiLGwuYXJnPT09aCljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fVwidGhyb3dcIj09PWwudHlwZSYmKG49XCJjb21wbGV0ZWRcIixyLm1ldGhvZD1cInRocm93XCIsci5hcmc9bC5hcmcpfX19ZnVuY3Rpb24geChlLHQpe3ZhciByPXQubWV0aG9kLG49ZS5pdGVyYXRvcltyXTtpZih2b2lkIDA9PT1uKXJldHVybiB0LmRlbGVnYXRlPW51bGwsXCJ0aHJvd1wiPT09ciYmZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD1cInJldHVyblwiLHQuYXJnPXZvaWQgMCx4KGUsdCksXCJ0aHJvd1wiPT09dC5tZXRob2QpfHxcInJldHVyblwiIT09ciYmKHQubWV0aG9kPVwidGhyb3dcIix0LmFyZz1uZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIrcitcIicgbWV0aG9kXCIpKSxoO3ZhciBpPXUobixlLml0ZXJhdG9yLHQuYXJnKTtpZihcInRocm93XCI9PT1pLnR5cGUpcmV0dXJuIHQubWV0aG9kPVwidGhyb3dcIix0LmFyZz1pLmFyZyx0LmRlbGVnYXRlPW51bGwsaDt2YXIgcz1pLmFyZztyZXR1cm4gcz9zLmRvbmU/KHRbZS5yZXN1bHROYW1lXT1zLnZhbHVlLHQubmV4dD1lLm5leHRMb2MsXCJyZXR1cm5cIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9XCJuZXh0XCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsaCk6czoodC5tZXRob2Q9XCJ0aHJvd1wiLHQuYXJnPW5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKSx0LmRlbGVnYXRlPW51bGwsaCl9ZnVuY3Rpb24gayhlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBTKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPVwibm9ybWFsXCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIE0oZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOlwicm9vdFwifV0sZS5mb3JFYWNoKGssdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gQyhlKXtpZihlKXt2YXIgdD1lW3NdO2lmKHQpcmV0dXJuIHQuY2FsbChlKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0OlR9fWZ1bmN0aW9uIFQoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBkLnByb3RvdHlwZT1wLG4oeSxcImNvbnN0cnVjdG9yXCIse3ZhbHVlOnAsY29uZmlndXJhYmxlOiEwfSksbihwLFwiY29uc3RydWN0b3JcIix7dmFsdWU6ZCxjb25maWd1cmFibGU6ITB9KSxkLmRpc3BsYXlOYW1lPWwocCxhLFwiR2VuZXJhdG9yRnVuY3Rpb25cIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWR8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUscCk6KGUuX19wcm90b19fPXAsbChlLGEsXCJHZW5lcmF0b3JGdW5jdGlvblwiKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5KSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx2KHcucHJvdG90eXBlKSxsKHcucHJvdG90eXBlLG8sKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSksZS5Bc3luY0l0ZXJhdG9yPXcsZS5hc3luYz1mdW5jdGlvbih0LHIsbixpLHMpe3ZvaWQgMD09PXMmJihzPVByb21pc2UpO3ZhciBvPW5ldyB3KGModCxyLG4saSkscyk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9vOm8ubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmRvbmU/ZS52YWx1ZTpvLm5leHQoKX0pKX0sdih5KSxsKHksYSxcIkdlbmVyYXRvclwiKSxsKHkscywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxsKHksXCJ0b1N0cmluZ1wiLChmdW5jdGlvbigpe3JldHVyblwiW29iamVjdCBHZW5lcmF0b3JdXCJ9KSksZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdChlKSxyPVtdO2Zvcih2YXIgbiBpbiB0KXIucHVzaChuKTtyZXR1cm4gci5yZXZlcnNlKCksZnVuY3Rpb24gZSgpe2Zvcig7ci5sZW5ndGg7KXt2YXIgbj1yLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gZS52YWx1ZT1uLGUuZG9uZT0hMSxlfXJldHVybiBlLmRvbmU9ITAsZX19LGUudmFsdWVzPUMsTS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOk0scmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9XCJuZXh0XCIsdGhpcy5hcmc9dm9pZCAwLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKFMpLCFlKWZvcih2YXIgdCBpbiB0aGlzKVwidFwiPT09dC5jaGFyQXQoMCkmJnIuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPVwidGhyb3dcIixvLmFyZz1lLHQubmV4dD1yLG4mJih0Lm1ldGhvZD1cIm5leHRcIix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgcz10aGlzLnRyeUVudHJpZXNbaV0sbz1zLmNvbXBsZXRpb247aWYoXCJyb290XCI9PT1zLnRyeUxvYylyZXR1cm4gbihcImVuZFwiKTtpZihzLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgYT1yLmNhbGwocyxcImNhdGNoTG9jXCIpLGw9ci5jYWxsKHMsXCJmaW5hbGx5TG9jXCIpO2lmKGEmJmwpe2lmKHRoaXMucHJldjxzLmNhdGNoTG9jKXJldHVybiBuKHMuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxzLmZpbmFsbHlMb2MpcmV0dXJuIG4ocy5maW5hbGx5TG9jKX1lbHNlIGlmKGEpe2lmKHRoaXMucHJldjxzLmNhdGNoTG9jKXJldHVybiBuKHMuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7aWYodGhpcy5wcmV2PHMuZmluYWxseUxvYylyZXR1cm4gbihzLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmci5jYWxsKGksXCJmaW5hbGx5TG9jXCIpJiZ0aGlzLnByZXY8aS5maW5hbGx5TG9jKXt2YXIgcz1pO2JyZWFrfX1zJiYoXCJicmVha1wiPT09ZXx8XCJjb250aW51ZVwiPT09ZSkmJnMudHJ5TG9jPD10JiZ0PD1zLmZpbmFsbHlMb2MmJihzPW51bGwpO3ZhciBvPXM/cy5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9ZSxvLmFyZz10LHM/KHRoaXMubWV0aG9kPVwibmV4dFwiLHRoaXMubmV4dD1zLmZpbmFsbHlMb2MsaCk6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuXCJicmVha1wiPT09ZS50eXBlfHxcImNvbnRpbnVlXCI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOlwicmV0dXJuXCI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD1cInJldHVyblwiLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGh9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksUyhyKSxofX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PW4udHlwZSl7dmFyIGk9bi5hcmc7UyhyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6QyhlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSxcIm5leHRcIj09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxofX0sZX0oXCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzOnt9KTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPW59Y2F0Y2goZSl7XCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWU9bjpGdW5jdGlvbihcInJcIixcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikobil9fSx7fV0sNDkzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImJ1ZmZlclwiKS5CdWZmZXIsaT1lKFwiaW5oZXJpdHNcIikscz1lKFwiaGFzaC1iYXNlXCIpLG89bmV3IEFycmF5KDE2KSxhPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGw9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sYz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sdT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0saD1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxmPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIGQoKXtzLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4gZTw8dHxlPj4+MzItdH1mdW5jdGlvbiBtKGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHAoZSsodF5yXm4pK3Mrb3wwLGEpK2l8MH1mdW5jdGlvbiBiKGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHAoZSsodCZyfH50Jm4pK3Mrb3wwLGEpK2l8MH1mdW5jdGlvbiBnKGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHAoZSsoKHR8fnIpXm4pK3Mrb3wwLGEpK2l8MH1mdW5jdGlvbiB5KGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHAoZSsodCZufHImfm4pK3Mrb3wwLGEpK2l8MH1mdW5jdGlvbiB2KGUsdCxyLG4saSxzLG8sYSl7cmV0dXJuIHAoZSsodF4ocnx+bikpK3Mrb3wwLGEpK2l8MH1pKGQscyksZC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgZT1vLHQ9MDt0PDE2OysrdCllW3RdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqdCk7Zm9yKHZhciByPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixpPTB8dGhpcy5fYyxzPTB8dGhpcy5fZCxkPTB8dGhpcy5fZSx3PTB8dGhpcy5fYSxfPTB8dGhpcy5fYix4PTB8dGhpcy5fYyxrPTB8dGhpcy5fZCxTPTB8dGhpcy5fZSxNPTA7TTw4MDtNKz0xKXt2YXIgQyxUO008MTY/KEM9bShyLG4saSxzLGQsZVthW01dXSxoWzBdLGNbTV0pLFQ9dih3LF8seCxrLFMsZVtsW01dXSxmWzBdLHVbTV0pKTpNPDMyPyhDPWIocixuLGkscyxkLGVbYVtNXV0saFsxXSxjW01dKSxUPXkodyxfLHgsayxTLGVbbFtNXV0sZlsxXSx1W01dKSk6TTw0OD8oQz1nKHIsbixpLHMsZCxlW2FbTV1dLGhbMl0sY1tNXSksVD1nKHcsXyx4LGssUyxlW2xbTV1dLGZbMl0sdVtNXSkpOk08NjQ/KEM9eShyLG4saSxzLGQsZVthW01dXSxoWzNdLGNbTV0pLFQ9Yih3LF8seCxrLFMsZVtsW01dXSxmWzNdLHVbTV0pKTooQz12KHIsbixpLHMsZCxlW2FbTV1dLGhbNF0sY1tNXSksVD1tKHcsXyx4LGssUyxlW2xbTV1dLGZbNF0sdVtNXSkpLHI9ZCxkPXMscz1wKGksMTApLGk9bixuPUMsdz1TLFM9ayxrPXAoeCwxMCkseD1fLF89VH12YXIgRT10aGlzLl9iK2kra3wwO3RoaXMuX2I9dGhpcy5fYytzK1N8MCx0aGlzLl9jPXRoaXMuX2QrZCt3fDAsdGhpcy5fZD10aGlzLl9lK3IrX3wwLHRoaXMuX2U9dGhpcy5fYStuK3h8MCx0aGlzLl9hPUV9LGQucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYmJih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgZT1uLmFsbG9jP24uYWxsb2MoMjApOm5ldyBuKDIwKTtyZXR1cm4gZS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxlLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLGUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksZS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksZS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksZX0sdC5leHBvcnRzPWR9LHtidWZmZXI6MjIwLFwiaGFzaC1iYXNlXCI6NDI1LGluaGVyaXRzOjQ0MH1dLDQ5NDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovdmFyIG49ZShcImJ1ZmZlclwiKSxpPW4uQnVmZmVyO2Z1bmN0aW9uIHMoZSx0KXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl19ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuIGkoZSx0LHIpfWkuZnJvbSYmaS5hbGxvYyYmaS5hbGxvY1Vuc2FmZSYmaS5hbGxvY1Vuc2FmZVNsb3c/dC5leHBvcnRzPW46KHMobixyKSxyLkJ1ZmZlcj1vKSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxzKGksbyksby5mcm9tPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIGkoZSx0LHIpfSxvLmFsbG9jPWZ1bmN0aW9uKGUsdCxyKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTt2YXIgbj1pKGUpO3JldHVybiB2b2lkIDAhPT10P1wic3RyaW5nXCI9PXR5cGVvZiByP24uZmlsbCh0LHIpOm4uZmlsbCh0KTpuLmZpbGwoMCksbn0sby5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlclwiKTtyZXR1cm4gaShlKX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIG4uU2xvd0J1ZmZlcihlKX19LHtidWZmZXI6MjIwfV0sNDk1OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciBuLGk9ZShcImJ1ZmZlclwiKSxzPWkuQnVmZmVyLG89e307Zm9yKG4gaW4gaSlpLmhhc093blByb3BlcnR5KG4pJiZcIlNsb3dCdWZmZXJcIiE9PW4mJlwiQnVmZmVyXCIhPT1uJiYob1tuXT1pW25dKTt2YXIgYT1vLkJ1ZmZlcj17fTtmb3IobiBpbiBzKXMuaGFzT3duUHJvcGVydHkobikmJlwiYWxsb2NVbnNhZmVcIiE9PW4mJlwiYWxsb2NVbnNhZmVTbG93XCIhPT1uJiYoYVtuXT1zW25dKTtpZihvLkJ1ZmZlci5wcm90b3R5cGU9cy5wcm90b3R5cGUsYS5mcm9tJiZhLmZyb20hPT1VaW50OEFycmF5LmZyb218fChhLmZyb209ZnVuY3Rpb24oZSx0LHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7aWYoZSYmdm9pZCAwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKTtyZXR1cm4gcyhlLHQscil9KSxhLmFsbG9jfHwoYS5hbGxvYz1mdW5jdGlvbihlLHQscil7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSk7aWYoZTwwfHxlPj0yKigxPDwzMCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyk7dmFyIG49cyhlKTtyZXR1cm4gdCYmMCE9PXQubGVuZ3RoP1wic3RyaW5nXCI9PXR5cGVvZiByP24uZmlsbCh0LHIpOm4uZmlsbCh0KTpuLmZpbGwoMCksbn0pLCFvLmtTdHJpbmdNYXhMZW5ndGgpdHJ5e28ua1N0cmluZ01heExlbmd0aD1yLmJpbmRpbmcoXCJidWZmZXJcIikua1N0cmluZ01heExlbmd0aH1jYXRjaChlKXt9by5jb25zdGFudHN8fChvLmNvbnN0YW50cz17TUFYX0xFTkdUSDpvLmtNYXhMZW5ndGh9LG8ua1N0cmluZ01heExlbmd0aCYmKG8uY29uc3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPW8ua1N0cmluZ01heExlbmd0aCkpLHQuZXhwb3J0cz1vfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIikpfSx7X3Byb2Nlc3M6NDY3LGJ1ZmZlcjoyMjB9XSw0OTY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTtjb25zdCBuPWUoXCJ4bWxjaGFycy94bWwvMS4wL2VkNVwiKSxpPWUoXCJ4bWxjaGFycy94bWwvMS4xL2VkMlwiKSxzPWUoXCJ4bWxjaGFycy94bWxucy8xLjAvZWQzXCIpO3ZhciBvPW4uaXNTLGE9bi5pc0NoYXIsbD1uLmlzTmFtZVN0YXJ0Q2hhcixjPW4uaXNOYW1lQ2hhcix1PW4uU19MSVNULGg9bi5OQU1FX1JFLGY9aS5pc0NoYXIsZD1zLmlzTkNOYW1lU3RhcnRDaGFyLHA9cy5pc05DTmFtZUNoYXIsbT1zLk5DX05BTUVfUkU7Y29uc3QgYj1cImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLGc9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiLHk9e19fcHJvdG9fXzpudWxsLHhtbDpiLHhtbG5zOmd9LHY9e19fcHJvdG9fXzpudWxsLGFtcDpcIiZcIixndDpcIj5cIixsdDpcIjxcIixxdW90OidcIicsYXBvczpcIidcIn0sdz1lPT4zND09PWV8fDM5PT09ZSxfPVszNCwzOV0seD1bLi4uXyw5MSw2Ml0saz1bLi4uXyw2MCw5M10sUz1bNjEsNjMsLi4udV0sTT1bLi4udSw2MiwzOCw2MF07ZnVuY3Rpb24gQyhlLHQscil7c3dpdGNoKHQpe2Nhc2VcInhtbFwiOnIhPT1iJiZlLmZhaWwoYHhtbCBwcmVmaXggbXVzdCBiZSBib3VuZCB0byAke2J9LmApO2JyZWFrO2Nhc2VcInhtbG5zXCI6ciE9PWcmJmUuZmFpbChgeG1sbnMgcHJlZml4IG11c3QgYmUgYm91bmQgdG8gJHtnfS5gKX1zd2l0Y2gocil7Y2FzZSBnOmUuZmFpbChcIlwiPT09dD9gdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG1heSBub3QgYmUgc2V0IHRvICR7cn0uYDpgbWF5IG5vdCBhc3NpZ24gYSBwcmVmaXggKGV2ZW4gXCJ4bWxuc1wiKSB0byB0aGUgVVJJICR7Z30uYCk7YnJlYWs7Y2FzZSBiOnN3aXRjaCh0KXtjYXNlXCJ4bWxcIjpicmVhaztjYXNlXCJcIjplLmZhaWwoYHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBtYXkgbm90IGJlIHNldCB0byAke3J9LmApO2JyZWFrO2RlZmF1bHQ6ZS5mYWlsKFwibWF5IG5vdCBhc3NpZ24gdGhlIHhtbCBuYW1lc3BhY2UgdG8gYW5vdGhlciBwcmVmaXguXCIpfX19Y29uc3QgVD1lPT5tLnRlc3QoZSksRT1lPT5oLnRlc3QoZSk7ci5FVkVOVFM9W1wieG1sZGVjbFwiLFwidGV4dFwiLFwicHJvY2Vzc2luZ2luc3RydWN0aW9uXCIsXCJkb2N0eXBlXCIsXCJjb21tZW50XCIsXCJvcGVudGFnc3RhcnRcIixcImF0dHJpYnV0ZVwiLFwib3BlbnRhZ1wiLFwiY2xvc2V0YWdcIixcImNkYXRhXCIsXCJlcnJvclwiLFwiZW5kXCIsXCJyZWFkeVwiXTtjb25zdCBBPXt4bWxkZWNsOlwieG1sZGVjbEhhbmRsZXJcIix0ZXh0OlwidGV4dEhhbmRsZXJcIixwcm9jZXNzaW5naW5zdHJ1Y3Rpb246XCJwaUhhbmRsZXJcIixkb2N0eXBlOlwiZG9jdHlwZUhhbmRsZXJcIixjb21tZW50OlwiY29tbWVudEhhbmRsZXJcIixvcGVudGFnc3RhcnQ6XCJvcGVuVGFnU3RhcnRIYW5kbGVyXCIsYXR0cmlidXRlOlwiYXR0cmlidXRlSGFuZGxlclwiLG9wZW50YWc6XCJvcGVuVGFnSGFuZGxlclwiLGNsb3NldGFnOlwiY2xvc2VUYWdIYW5kbGVyXCIsY2RhdGE6XCJjZGF0YUhhbmRsZXJcIixlcnJvcjpcImVycm9ySGFuZGxlclwiLGVuZDpcImVuZEhhbmRsZXJcIixyZWFkeTpcInJlYWR5SGFuZGxlclwifTtyLlNheGVzUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0PW51bGwhPWU/ZTp7fSx0aGlzLmZyYWdtZW50T3B0PSEhdGhpcy5vcHQuZnJhZ21lbnQ7Y29uc3QgdD10aGlzLnhtbG5zT3B0PSEhdGhpcy5vcHQueG1sbnM7aWYodGhpcy50cmFja1Bvc2l0aW9uPSExIT09dGhpcy5vcHQucG9zaXRpb24sdGhpcy5maWxlTmFtZT10aGlzLm9wdC5maWxlTmFtZSx0KXt0aGlzLm5hbWVTdGFydENoZWNrPWQsdGhpcy5uYW1lQ2hlY2s9cCx0aGlzLmlzTmFtZT1ULHRoaXMucHJvY2Vzc0F0dHJpYnM9dGhpcy5wcm9jZXNzQXR0cmlic05TLHRoaXMucHVzaEF0dHJpYj10aGlzLnB1c2hBdHRyaWJOUyx0aGlzLm5zPU9iamVjdC5hc3NpZ24oe19fcHJvdG9fXzpudWxsfSx5KTtjb25zdCBlPXRoaXMub3B0LmFkZGl0aW9uYWxOYW1lc3BhY2VzO251bGwhPWUmJighZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0KSlDKGUscix0W3JdKX0odGhpcyxlKSxPYmplY3QuYXNzaWduKHRoaXMubnMsZSkpfWVsc2UgdGhpcy5uYW1lU3RhcnRDaGVjaz1sLHRoaXMubmFtZUNoZWNrPWMsdGhpcy5pc05hbWU9RSx0aGlzLnByb2Nlc3NBdHRyaWJzPXRoaXMucHJvY2Vzc0F0dHJpYnNQbGFpbix0aGlzLnB1c2hBdHRyaWI9dGhpcy5wdXNoQXR0cmliUGxhaW47dGhpcy5zdGF0ZVRhYmxlPVt0aGlzLnNCZWdpbix0aGlzLnNCZWdpbldoaXRlc3BhY2UsdGhpcy5zRG9jdHlwZSx0aGlzLnNEb2N0eXBlUXVvdGUsdGhpcy5zRFRELHRoaXMuc0RURFF1b3RlZCx0aGlzLnNEVERPcGVuV2FrYSx0aGlzLnNEVERPcGVuV2FrYUJhbmcsdGhpcy5zRFREQ29tbWVudCx0aGlzLnNEVERDb21tZW50RW5kaW5nLHRoaXMuc0RURENvbW1lbnRFbmRlZCx0aGlzLnNEVERQSSx0aGlzLnNEVERQSUVuZGluZyx0aGlzLnNUZXh0LHRoaXMuc0VudGl0eSx0aGlzLnNPcGVuV2FrYSx0aGlzLnNPcGVuV2FrYUJhbmcsdGhpcy5zQ29tbWVudCx0aGlzLnNDb21tZW50RW5kaW5nLHRoaXMuc0NvbW1lbnRFbmRlZCx0aGlzLnNDRGF0YSx0aGlzLnNDRGF0YUVuZGluZyx0aGlzLnNDRGF0YUVuZGluZzIsdGhpcy5zUElGaXJzdENoYXIsdGhpcy5zUElSZXN0LHRoaXMuc1BJQm9keSx0aGlzLnNQSUVuZGluZyx0aGlzLnNYTUxEZWNsTmFtZVN0YXJ0LHRoaXMuc1hNTERlY2xOYW1lLHRoaXMuc1hNTERlY2xFcSx0aGlzLnNYTUxEZWNsVmFsdWVTdGFydCx0aGlzLnNYTUxEZWNsVmFsdWUsdGhpcy5zWE1MRGVjbFNlcGFyYXRvcix0aGlzLnNYTUxEZWNsRW5kaW5nLHRoaXMuc09wZW5UYWcsdGhpcy5zT3BlblRhZ1NsYXNoLHRoaXMuc0F0dHJpYix0aGlzLnNBdHRyaWJOYW1lLHRoaXMuc0F0dHJpYk5hbWVTYXdXaGl0ZSx0aGlzLnNBdHRyaWJWYWx1ZSx0aGlzLnNBdHRyaWJWYWx1ZVF1b3RlZCx0aGlzLnNBdHRyaWJWYWx1ZUNsb3NlZCx0aGlzLnNBdHRyaWJWYWx1ZVVucXVvdGVkLHRoaXMuc0Nsb3NlVGFnLHRoaXMuc0Nsb3NlVGFnU2F3V2hpdGVdLHRoaXMuX2luaXQoKX1nZXQgY2xvc2VkKCl7cmV0dXJuIHRoaXMuX2Nsb3NlZH1faW5pdCgpe3ZhciBlO3RoaXMub3Blbldha2FCYW5nPVwiXCIsdGhpcy50ZXh0PVwiXCIsdGhpcy5uYW1lPVwiXCIsdGhpcy5waVRhcmdldD1cIlwiLHRoaXMuZW50aXR5PVwiXCIsdGhpcy5xPW51bGwsdGhpcy50YWdzPVtdLHRoaXMudGFnPW51bGwsdGhpcy50b3BOUz1udWxsLHRoaXMuY2h1bms9XCJcIix0aGlzLmNodW5rUG9zaXRpb249MCx0aGlzLmk9MCx0aGlzLnByZXZJPTAsdGhpcy5jYXJyaWVkRnJvbVByZXZpb3VzPXZvaWQgMCx0aGlzLmZvcmJpZGRlblN0YXRlPTAsdGhpcy5hdHRyaWJMaXN0PVtdO2NvbnN0e2ZyYWdtZW50T3B0OnR9PXRoaXM7dGhpcy5zdGF0ZT10PzEzOjAsdGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290PXRoaXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290PXRoaXMuY2xvc2VkUm9vdD10aGlzLnNhd1Jvb3Q9dCx0aGlzLnhtbERlY2xQb3NzaWJsZT0hdCx0aGlzLnhtbERlY2xFeHBlY3RzPVtcInZlcnNpb25cIl0sdGhpcy5lbnRpdHlSZXR1cm5TdGF0ZT12b2lkIDA7bGV0e2RlZmF1bHRYTUxWZXJzaW9uOnJ9PXRoaXMub3B0O2lmKHZvaWQgMD09PXIpe2lmKCEwPT09dGhpcy5vcHQuZm9yY2VYTUxWZXJzaW9uKXRocm93IG5ldyBFcnJvcihcImZvcmNlWE1MVmVyc2lvbiBzZXQgYnV0IGRlZmF1bHRYTUxWZXJzaW9uIGlzIG5vdCBzZXRcIik7cj1cIjEuMFwifXRoaXMuc2V0WE1MVmVyc2lvbihyKSx0aGlzLnBvc2l0aW9uQXROZXdMaW5lPTAsdGhpcy5kb2N0eXBlPSExLHRoaXMuX2Nsb3NlZD0hMSx0aGlzLnhtbERlY2w9e3ZlcnNpb246dm9pZCAwLGVuY29kaW5nOnZvaWQgMCxzdGFuZGFsb25lOnZvaWQgMH0sdGhpcy5saW5lPTEsdGhpcy5jb2x1bW49MCx0aGlzLkVOVElUSUVTPU9iamVjdC5jcmVhdGUodiksbnVsbD09PShlPXRoaXMucmVhZHlIYW5kbGVyKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMpfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLmNodW5rUG9zaXRpb24rdGhpcy5pfWdldCBjb2x1bW5JbmRleCgpe3JldHVybiB0aGlzLnBvc2l0aW9uLXRoaXMucG9zaXRpb25BdE5ld0xpbmV9b24oZSx0KXt0aGlzW0FbZV1dPXR9b2ZmKGUpe3RoaXNbQVtlXV09dm9pZCAwfW1ha2VFcnJvcihlKXt2YXIgdDtsZXQgcj1udWxsIT09KHQ9dGhpcy5maWxlTmFtZSkmJnZvaWQgMCE9PXQ/dDpcIlwiO3JldHVybiB0aGlzLnRyYWNrUG9zaXRpb24mJihyLmxlbmd0aD4wJiYocis9XCI6XCIpLHIrPWAke3RoaXMubGluZX06JHt0aGlzLmNvbHVtbn1gKSxyLmxlbmd0aD4wJiYocis9XCI6IFwiKSxuZXcgRXJyb3IocitlKX1mYWlsKGUpe2NvbnN0IHQ9dGhpcy5tYWtlRXJyb3IoZSkscj10aGlzLmVycm9ySGFuZGxlcjtpZih2b2lkIDA9PT1yKXRocm93IHQ7cmV0dXJuIHIodCksdGhpc313cml0ZShlKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpcy5mYWlsKFwiY2Fubm90IHdyaXRlIGFmdGVyIGNsb3NlOyBhc3NpZ24gYW4gb25yZWFkeSBoYW5kbGVyLlwiKTtsZXQgdD0hMTtudWxsPT09ZT8odD0hMCxlPVwiXCIpOlwib2JqZWN0XCI9PXR5cGVvZiBlJiYoZT1lLnRvU3RyaW5nKCkpLHZvaWQgMCE9PXRoaXMuY2FycmllZEZyb21QcmV2aW91cyYmKGU9YCR7dGhpcy5jYXJyaWVkRnJvbVByZXZpb3VzfSR7ZX1gLHRoaXMuY2FycmllZEZyb21QcmV2aW91cz12b2lkIDApO2xldCByPWUubGVuZ3RoO2NvbnN0IG49ZS5jaGFyQ29kZUF0KHItMSk7IXQmJigxMz09PW58fG4+PTU1Mjk2JiZuPD01NjMxOSkmJih0aGlzLmNhcnJpZWRGcm9tUHJldmlvdXM9ZVtyLTFdLHItLSxlPWUuc2xpY2UoMCxyKSk7Y29uc3R7c3RhdGVUYWJsZTppfT10aGlzO2Zvcih0aGlzLmNodW5rPWUsdGhpcy5pPTA7dGhpcy5pPHI7KWlbdGhpcy5zdGF0ZV0uY2FsbCh0aGlzKTtyZXR1cm4gdGhpcy5jaHVua1Bvc2l0aW9uKz1yLHQ/dGhpcy5lbmQoKTp0aGlzfWNsb3NlKCl7cmV0dXJuIHRoaXMud3JpdGUobnVsbCl9Z2V0Q29kZTEwKCl7Y29uc3R7Y2h1bms6ZSxpOnR9PXRoaXM7aWYodGhpcy5wcmV2ST10LHRoaXMuaT10KzEsdD49ZS5sZW5ndGgpcmV0dXJuLTE7Y29uc3Qgcj1lLmNoYXJDb2RlQXQodCk7aWYodGhpcy5jb2x1bW4rKyxyPDU1Mjk2KXtpZihyPj0zMnx8OT09PXIpcmV0dXJuIHI7c3dpdGNoKHIpe2Nhc2UgMTA6cmV0dXJuIHRoaXMubGluZSsrLHRoaXMuY29sdW1uPTAsdGhpcy5wb3NpdGlvbkF0TmV3TGluZT10aGlzLnBvc2l0aW9uLDEwO2Nhc2UgMTM6cmV0dXJuIDEwPT09ZS5jaGFyQ29kZUF0KHQrMSkmJih0aGlzLmk9dCsyKSx0aGlzLmxpbmUrKyx0aGlzLmNvbHVtbj0wLHRoaXMucG9zaXRpb25BdE5ld0xpbmU9dGhpcy5wb3NpdGlvbiwtMjtkZWZhdWx0OnJldHVybiB0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3Rlci5cIikscn19aWYocj41NjMxOSlyZXR1cm4gcj49NTczNDQmJnI8PTY1NTMzfHx0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3Rlci5cIikscjtjb25zdCBuPTY1NTM2KzEwMjQqKHItNTUyOTYpKyhlLmNoYXJDb2RlQXQodCsxKS01NjMyMCk7cmV0dXJuIHRoaXMuaT10KzIsbj4xMTE0MTExJiZ0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3Rlci5cIiksbn1nZXRDb2RlMTEoKXtjb25zdHtjaHVuazplLGk6dH09dGhpcztpZih0aGlzLnByZXZJPXQsdGhpcy5pPXQrMSx0Pj1lLmxlbmd0aClyZXR1cm4tMTtjb25zdCByPWUuY2hhckNvZGVBdCh0KTtpZih0aGlzLmNvbHVtbisrLHI8NTUyOTYpe2lmKHI+MzEmJnI8MTI3fHxyPjE1OSYmODIzMiE9PXJ8fDk9PT1yKXJldHVybiByO3N3aXRjaChyKXtjYXNlIDEwOnJldHVybiB0aGlzLmxpbmUrKyx0aGlzLmNvbHVtbj0wLHRoaXMucG9zaXRpb25BdE5ld0xpbmU9dGhpcy5wb3NpdGlvbiwxMDtjYXNlIDEzOntjb25zdCByPWUuY2hhckNvZGVBdCh0KzEpOzEwIT09ciYmMTMzIT09cnx8KHRoaXMuaT10KzIpfWNhc2UgMTMzOmNhc2UgODIzMjpyZXR1cm4gdGhpcy5saW5lKyssdGhpcy5jb2x1bW49MCx0aGlzLnBvc2l0aW9uQXROZXdMaW5lPXRoaXMucG9zaXRpb24sLTI7ZGVmYXVsdDpyZXR1cm4gdGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuXCIpLHJ9fWlmKHI+NTYzMTkpcmV0dXJuIHI+PTU3MzQ0JiZyPD02NTUzM3x8dGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuXCIpLHI7Y29uc3Qgbj02NTUzNisxMDI0KihyLTU1Mjk2KSsoZS5jaGFyQ29kZUF0KHQrMSktNTYzMjApO3JldHVybiB0aGlzLmk9dCsyLG4+MTExNDExMSYmdGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuXCIpLG59Z2V0Q29kZU5vcm0oKXtjb25zdCBlPXRoaXMuZ2V0Q29kZSgpO3JldHVybi0yPT09ZT8xMDplfXVuZ2V0KCl7dGhpcy5pPXRoaXMucHJldkksdGhpcy5jb2x1bW4tLX1jYXB0dXJlVG8oZSl7bGV0e2k6dH09dGhpcztjb25zdHtjaHVuazpyfT10aGlzO2Zvcig7Oyl7Y29uc3Qgbj10aGlzLmdldENvZGUoKSxpPS0yPT09bixzPWk/MTA6bjtpZigtMT09PXN8fGUuaW5jbHVkZXMocykpcmV0dXJuIHRoaXMudGV4dCs9ci5zbGljZSh0LHRoaXMucHJldkkpLHM7aSYmKHRoaXMudGV4dCs9ci5zbGljZSh0LHRoaXMucHJldkkpK1wiXFxuXCIsdD10aGlzLmkpfX1jYXB0dXJlVG9DaGFyKGUpe2xldHtpOnR9PXRoaXM7Y29uc3R7Y2h1bms6cn09dGhpcztmb3IoOzspe2xldCBuPXRoaXMuZ2V0Q29kZSgpO3N3aXRjaChuKXtjYXNlLTI6dGhpcy50ZXh0Kz1yLnNsaWNlKHQsdGhpcy5wcmV2SSkrXCJcXG5cIix0PXRoaXMuaSxuPTEwO2JyZWFrO2Nhc2UtMTpyZXR1cm4gdGhpcy50ZXh0Kz1yLnNsaWNlKHQpLCExfWlmKG49PT1lKXJldHVybiB0aGlzLnRleHQrPXIuc2xpY2UodCx0aGlzLnByZXZJKSwhMH19Y2FwdHVyZU5hbWVDaGFycygpe2NvbnN0e2NodW5rOmUsaTp0fT10aGlzO2Zvcig7Oyl7Y29uc3Qgcj10aGlzLmdldENvZGUoKTtpZigtMT09PXIpcmV0dXJuIHRoaXMubmFtZSs9ZS5zbGljZSh0KSwtMTtpZighYyhyKSlyZXR1cm4gdGhpcy5uYW1lKz1lLnNsaWNlKHQsdGhpcy5wcmV2SSksLTI9PT1yPzEwOnJ9fXNraXBTcGFjZXMoKXtmb3IoOzspe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpO2lmKC0xPT09ZXx8IW8oZSkpcmV0dXJuIGV9fXNldFhNTFZlcnNpb24oZSl7dGhpcy5jdXJyZW50WE1MVmVyc2lvbj1lLFwiMS4wXCI9PT1lPyh0aGlzLmlzQ2hhcj1hLHRoaXMuZ2V0Q29kZT10aGlzLmdldENvZGUxMCk6KHRoaXMuaXNDaGFyPWYsdGhpcy5nZXRDb2RlPXRoaXMuZ2V0Q29kZTExKX1zQmVnaW4oKXs2NTI3OT09PXRoaXMuY2h1bmsuY2hhckNvZGVBdCgwKSYmKHRoaXMuaSsrLHRoaXMuY29sdW1uKyspLHRoaXMuc3RhdGU9MX1zQmVnaW5XaGl0ZXNwYWNlKCl7Y29uc3QgZT10aGlzLmksdD10aGlzLnNraXBTcGFjZXMoKTtzd2l0Y2godGhpcy5wcmV2SSE9PWUmJih0aGlzLnhtbERlY2xQb3NzaWJsZT0hMSksdCl7Y2FzZSA2MDppZih0aGlzLnN0YXRlPTE1LDAhPT10aGlzLnRleHQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIm5vLWVtcHR5IHRleHQgYXQgc3RhcnRcIik7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy51bmdldCgpLHRoaXMuc3RhdGU9MTMsdGhpcy54bWxEZWNsUG9zc2libGU9ITF9fXNEb2N0eXBlKCl7dmFyIGU7Y29uc3QgdD10aGlzLmNhcHR1cmVUbyh4KTtzd2l0Y2godCl7Y2FzZSA2MjpudWxsPT09KGU9dGhpcy5kb2N0eXBlSGFuZGxlcil8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHRoaXMudGV4dCksdGhpcy50ZXh0PVwiXCIsdGhpcy5zdGF0ZT0xMyx0aGlzLmRvY3R5cGU9ITA7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludCh0KSw5MT09PXQ/dGhpcy5zdGF0ZT00OncodCkmJih0aGlzLnN0YXRlPTMsdGhpcy5xPXQpfX1zRG9jdHlwZVF1b3RlKCl7Y29uc3QgZT10aGlzLnE7dGhpcy5jYXB0dXJlVG9DaGFyKGUpJiYodGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSx0aGlzLnE9bnVsbCx0aGlzLnN0YXRlPTIpfXNEVEQoKXtjb25zdCBlPXRoaXMuY2FwdHVyZVRvKGspOy0xIT09ZSYmKHRoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZSksOTM9PT1lP3RoaXMuc3RhdGU9Mjo2MD09PWU/dGhpcy5zdGF0ZT02OncoZSkmJih0aGlzLnN0YXRlPTUsdGhpcy5xPWUpKX1zRFREUXVvdGVkKCl7Y29uc3QgZT10aGlzLnE7dGhpcy5jYXB0dXJlVG9DaGFyKGUpJiYodGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSx0aGlzLnN0YXRlPTQsdGhpcy5xPW51bGwpfXNEVERPcGVuV2FrYSgpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpO3N3aXRjaCh0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KGUpLGUpe2Nhc2UgMzM6dGhpcy5zdGF0ZT03LHRoaXMub3Blbldha2FCYW5nPVwiXCI7YnJlYWs7Y2FzZSA2Mzp0aGlzLnN0YXRlPTExO2JyZWFrO2RlZmF1bHQ6dGhpcy5zdGF0ZT00fX1zRFRET3Blbldha2FCYW5nKCl7Y29uc3QgZT1TdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmdldENvZGVOb3JtKCkpLHQ9dGhpcy5vcGVuV2FrYUJhbmcrPWU7dGhpcy50ZXh0Kz1lLFwiLVwiIT09dCYmKHRoaXMuc3RhdGU9XCItLVwiPT09dD84OjQsdGhpcy5vcGVuV2FrYUJhbmc9XCJcIil9c0RURENvbW1lbnQoKXt0aGlzLmNhcHR1cmVUb0NoYXIoNDUpJiYodGhpcy50ZXh0Kz1cIi1cIix0aGlzLnN0YXRlPTkpfXNEVERDb21tZW50RW5kaW5nKCl7Y29uc3QgZT10aGlzLmdldENvZGVOb3JtKCk7dGhpcy50ZXh0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSx0aGlzLnN0YXRlPTQ1PT09ZT8xMDo4fXNEVERDb21tZW50RW5kZWQoKXtjb25zdCBlPXRoaXMuZ2V0Q29kZU5vcm0oKTt0aGlzLnRleHQrPVN0cmluZy5mcm9tQ29kZVBvaW50KGUpLDYyPT09ZT90aGlzLnN0YXRlPTQ6KHRoaXMuZmFpbChcIm1hbGZvcm1lZCBjb21tZW50LlwiKSx0aGlzLnN0YXRlPTgpfXNEVERQSSgpe3RoaXMuY2FwdHVyZVRvQ2hhcig2MykmJih0aGlzLnRleHQrPVwiP1wiLHRoaXMuc3RhdGU9MTIpfXNEVERQSUVuZGluZygpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpO3RoaXMudGV4dCs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZSksNjI9PT1lJiYodGhpcy5zdGF0ZT00KX1zVGV4dCgpezAhPT10aGlzLnRhZ3MubGVuZ3RoP3RoaXMuaGFuZGxlVGV4dEluUm9vdCgpOnRoaXMuaGFuZGxlVGV4dE91dHNpZGVSb290KCl9c0VudGl0eSgpe2xldHtpOmV9PXRoaXM7Y29uc3R7Y2h1bms6dH09dGhpcztlOmZvcig7Oylzd2l0Y2godGhpcy5nZXRDb2RlKCkpe2Nhc2UtMjp0aGlzLmVudGl0eSs9dC5zbGljZShlLHRoaXMucHJldkkpK1wiXFxuXCIsZT10aGlzLmk7YnJlYWs7Y2FzZSA1OTp7Y29uc3R7ZW50aXR5UmV0dXJuU3RhdGU6cn09dGhpcyxuPXRoaXMuZW50aXR5K3Quc2xpY2UoZSx0aGlzLnByZXZJKTtsZXQgaTt0aGlzLnN0YXRlPXIsXCJcIj09PW4/KHRoaXMuZmFpbChcImVtcHR5IGVudGl0eSBuYW1lLlwiKSxpPVwiJjtcIik6KGk9dGhpcy5wYXJzZUVudGl0eShuKSx0aGlzLmVudGl0eT1cIlwiKSwxMz09PXImJnZvaWQgMD09PXRoaXMudGV4dEhhbmRsZXJ8fCh0aGlzLnRleHQrPWkpO2JyZWFrIGV9Y2FzZS0xOnRoaXMuZW50aXR5Kz10LnNsaWNlKGUpO2JyZWFrIGV9fXNPcGVuV2FrYSgpe2NvbnN0IGU9dGhpcy5nZXRDb2RlKCk7aWYobChlKSl0aGlzLnN0YXRlPTM0LHRoaXMudW5nZXQoKSx0aGlzLnhtbERlY2xQb3NzaWJsZT0hMTtlbHNlIHN3aXRjaChlKXtjYXNlIDQ3OnRoaXMuc3RhdGU9NDMsdGhpcy54bWxEZWNsUG9zc2libGU9ITE7YnJlYWs7Y2FzZSAzMzp0aGlzLnN0YXRlPTE2LHRoaXMub3Blbldha2FCYW5nPVwiXCIsdGhpcy54bWxEZWNsUG9zc2libGU9ITE7YnJlYWs7Y2FzZSA2Mzp0aGlzLnN0YXRlPTIzO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWVcIiksdGhpcy5zdGF0ZT0xMyx0aGlzLnhtbERlY2xQb3NzaWJsZT0hMX19c09wZW5XYWthQmFuZygpe3N3aXRjaCh0aGlzLm9wZW5XYWthQmFuZys9U3RyaW5nLmZyb21Db2RlUG9pbnQodGhpcy5nZXRDb2RlTm9ybSgpKSx0aGlzLm9wZW5XYWthQmFuZyl7Y2FzZVwiW0NEQVRBW1wiOnRoaXMuc2F3Um9vdHx8dGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290fHwodGhpcy5mYWlsKFwidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLlwiKSx0aGlzLnJlcG9ydGVkVGV4dEJlZm9yZVJvb3Q9ITApLHRoaXMuY2xvc2VkUm9vdCYmIXRoaXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290JiYodGhpcy5mYWlsKFwidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLlwiKSx0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdD0hMCksdGhpcy5zdGF0ZT0yMCx0aGlzLm9wZW5XYWthQmFuZz1cIlwiO2JyZWFrO2Nhc2VcIi0tXCI6dGhpcy5zdGF0ZT0xNyx0aGlzLm9wZW5XYWthQmFuZz1cIlwiO2JyZWFrO2Nhc2VcIkRPQ1RZUEVcIjp0aGlzLnN0YXRlPTIsKHRoaXMuZG9jdHlwZXx8dGhpcy5zYXdSb290KSYmdGhpcy5mYWlsKFwiaW5hcHByb3ByaWF0ZWx5IGxvY2F0ZWQgZG9jdHlwZSBkZWNsYXJhdGlvbi5cIiksdGhpcy5vcGVuV2FrYUJhbmc9XCJcIjticmVhaztkZWZhdWx0OnRoaXMub3Blbldha2FCYW5nLmxlbmd0aD49NyYmdGhpcy5mYWlsKFwiaW5jb3JyZWN0IHN5bnRheC5cIil9fXNDb21tZW50KCl7dGhpcy5jYXB0dXJlVG9DaGFyKDQ1KSYmKHRoaXMuc3RhdGU9MTgpfXNDb21tZW50RW5kaW5nKCl7dmFyIGU7Y29uc3QgdD10aGlzLmdldENvZGVOb3JtKCk7NDU9PT10Pyh0aGlzLnN0YXRlPTE5LG51bGw9PT0oZT10aGlzLmNvbW1lbnRIYW5kbGVyKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMsdGhpcy50ZXh0KSx0aGlzLnRleHQ9XCJcIik6KHRoaXMudGV4dCs9XCItXCIrU3RyaW5nLmZyb21Db2RlUG9pbnQodCksdGhpcy5zdGF0ZT0xNyl9c0NvbW1lbnRFbmRlZCgpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpOzYyIT09ZT8odGhpcy5mYWlsKFwibWFsZm9ybWVkIGNvbW1lbnQuXCIpLHRoaXMudGV4dCs9XCItLVwiK1N0cmluZy5mcm9tQ29kZVBvaW50KGUpLHRoaXMuc3RhdGU9MTcpOnRoaXMuc3RhdGU9MTN9c0NEYXRhKCl7dGhpcy5jYXB0dXJlVG9DaGFyKDkzKSYmKHRoaXMuc3RhdGU9MjEpfXNDRGF0YUVuZGluZygpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpOzkzPT09ZT90aGlzLnN0YXRlPTIyOih0aGlzLnRleHQrPVwiXVwiK1N0cmluZy5mcm9tQ29kZVBvaW50KGUpLHRoaXMuc3RhdGU9MjApfXNDRGF0YUVuZGluZzIoKXt2YXIgZTtjb25zdCB0PXRoaXMuZ2V0Q29kZU5vcm0oKTtzd2l0Y2godCl7Y2FzZSA2MjpudWxsPT09KGU9dGhpcy5jZGF0YUhhbmRsZXIpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyx0aGlzLnRleHQpLHRoaXMudGV4dD1cIlwiLHRoaXMuc3RhdGU9MTM7YnJlYWs7Y2FzZSA5Mzp0aGlzLnRleHQrPVwiXVwiO2JyZWFrO2RlZmF1bHQ6dGhpcy50ZXh0Kz1cIl1dXCIrU3RyaW5nLmZyb21Db2RlUG9pbnQodCksdGhpcy5zdGF0ZT0yMH19c1BJRmlyc3RDaGFyKCl7Y29uc3QgZT10aGlzLmdldENvZGVOb3JtKCk7dGhpcy5uYW1lU3RhcnRDaGVjayhlKT8odGhpcy5waVRhcmdldCs9U3RyaW5nLmZyb21Db2RlUG9pbnQoZSksdGhpcy5zdGF0ZT0yNCk6NjM9PT1lfHxvKGUpPyh0aGlzLmZhaWwoXCJwcm9jZXNzaW5nIGluc3RydWN0aW9uIHdpdGhvdXQgYSB0YXJnZXQuXCIpLHRoaXMuc3RhdGU9NjM9PT1lPzI2OjI1KToodGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBuYW1lLlwiKSx0aGlzLnBpVGFyZ2V0Kz1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSx0aGlzLnN0YXRlPTI0KX1zUElSZXN0KCl7Y29uc3R7Y2h1bms6ZSxpOnR9PXRoaXM7Zm9yKDs7KXtjb25zdCByPXRoaXMuZ2V0Q29kZU5vcm0oKTtpZigtMT09PXIpcmV0dXJuIHZvaWQodGhpcy5waVRhcmdldCs9ZS5zbGljZSh0KSk7aWYoIXRoaXMubmFtZUNoZWNrKHIpKXt0aGlzLnBpVGFyZ2V0Kz1lLnNsaWNlKHQsdGhpcy5wcmV2SSk7Y29uc3Qgbj02Mz09PXI7bnx8byhyKT9cInhtbFwiPT09dGhpcy5waVRhcmdldD8odGhpcy54bWxEZWNsUG9zc2libGV8fHRoaXMuZmFpbChcImFuIFhNTCBkZWNsYXJhdGlvbiBtdXN0IGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuXCIpLHRoaXMuc3RhdGU9bj8zMzoyNyk6dGhpcy5zdGF0ZT1uPzI2OjI1Oih0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5hbWUuXCIpLHRoaXMucGlUYXJnZXQrPVN0cmluZy5mcm9tQ29kZVBvaW50KHIpKTticmVha319fXNQSUJvZHkoKXtpZigwPT09dGhpcy50ZXh0Lmxlbmd0aCl7Y29uc3QgZT10aGlzLmdldENvZGVOb3JtKCk7NjM9PT1lP3RoaXMuc3RhdGU9MjY6byhlKXx8KHRoaXMudGV4dD1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSl9ZWxzZSB0aGlzLmNhcHR1cmVUb0NoYXIoNjMpJiYodGhpcy5zdGF0ZT0yNil9c1BJRW5kaW5nKCl7dmFyIGU7Y29uc3QgdD10aGlzLmdldENvZGVOb3JtKCk7aWYoNjI9PT10KXtjb25zdHtwaVRhcmdldDp0fT10aGlzO1wieG1sXCI9PT10LnRvTG93ZXJDYXNlKCkmJnRoaXMuZmFpbChcInRoZSBYTUwgZGVjbGFyYXRpb24gbXVzdCBhcHBlYXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBkb2N1bWVudC5cIiksbnVsbD09PShlPXRoaXMucGlIYW5kbGVyKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMse3RhcmdldDp0LGJvZHk6dGhpcy50ZXh0fSksdGhpcy5waVRhcmdldD10aGlzLnRleHQ9XCJcIix0aGlzLnN0YXRlPTEzfWVsc2UgNjM9PT10P3RoaXMudGV4dCs9XCI/XCI6KHRoaXMudGV4dCs9XCI/XCIrU3RyaW5nLmZyb21Db2RlUG9pbnQodCksdGhpcy5zdGF0ZT0yNSk7dGhpcy54bWxEZWNsUG9zc2libGU9ITF9c1hNTERlY2xOYW1lU3RhcnQoKXtjb25zdCBlPXRoaXMuc2tpcFNwYWNlcygpOzYzIT09ZT8tMSE9PWUmJih0aGlzLnN0YXRlPTI4LHRoaXMubmFtZT1TdHJpbmcuZnJvbUNvZGVQb2ludChlKSk6dGhpcy5zdGF0ZT0zM31zWE1MRGVjbE5hbWUoKXtjb25zdCBlPXRoaXMuY2FwdHVyZVRvKFMpO2lmKDYzPT09ZSlyZXR1cm4gdGhpcy5zdGF0ZT0zMyx0aGlzLm5hbWUrPXRoaXMudGV4dCx0aGlzLnRleHQ9XCJcIix2b2lkIHRoaXMuZmFpbChcIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLlwiKTtpZihvKGUpfHw2MT09PWUpe2lmKHRoaXMubmFtZSs9dGhpcy50ZXh0LHRoaXMudGV4dD1cIlwiLCF0aGlzLnhtbERlY2xFeHBlY3RzLmluY2x1ZGVzKHRoaXMubmFtZSkpc3dpdGNoKHRoaXMubmFtZS5sZW5ndGgpe2Nhc2UgMDp0aGlzLmZhaWwoXCJkaWQgbm90IGV4cGVjdCBhbnkgbW9yZSBuYW1lL3ZhbHVlIHBhaXJzLlwiKTticmVhaztjYXNlIDE6dGhpcy5mYWlsKGBleHBlY3RlZCB0aGUgbmFtZSAke3RoaXMueG1sRGVjbEV4cGVjdHNbMF19LmApO2JyZWFrO2RlZmF1bHQ6dGhpcy5mYWlsKFwiZXhwZWN0ZWQgb25lIG9mIFwiK3RoaXMueG1sRGVjbEV4cGVjdHMuam9pbihcIiwgXCIpKX10aGlzLnN0YXRlPTYxPT09ZT8zMDoyOX19c1hNTERlY2xFcSgpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpO2lmKDYzPT09ZSlyZXR1cm4gdGhpcy5zdGF0ZT0zMyx2b2lkIHRoaXMuZmFpbChcIlhNTCBkZWNsYXJhdGlvbiBpcyBpbmNvbXBsZXRlLlwiKTtvKGUpfHwoNjEhPT1lJiZ0aGlzLmZhaWwoXCJ2YWx1ZSByZXF1aXJlZC5cIiksdGhpcy5zdGF0ZT0zMCl9c1hNTERlY2xWYWx1ZVN0YXJ0KCl7Y29uc3QgZT10aGlzLmdldENvZGVOb3JtKCk7aWYoNjM9PT1lKXJldHVybiB0aGlzLnN0YXRlPTMzLHZvaWQgdGhpcy5mYWlsKFwiWE1MIGRlY2xhcmF0aW9uIGlzIGluY29tcGxldGUuXCIpO28oZSl8fCh3KGUpP3RoaXMucT1lOih0aGlzLmZhaWwoXCJ2YWx1ZSBtdXN0IGJlIHF1b3RlZC5cIiksdGhpcy5xPTMyKSx0aGlzLnN0YXRlPTMxKX1zWE1MRGVjbFZhbHVlKCl7Y29uc3QgZT10aGlzLmNhcHR1cmVUbyhbdGhpcy5xLDYzXSk7aWYoNjM9PT1lKXJldHVybiB0aGlzLnN0YXRlPTMzLHRoaXMudGV4dD1cIlwiLHZvaWQgdGhpcy5mYWlsKFwiWE1MIGRlY2xhcmF0aW9uIGlzIGluY29tcGxldGUuXCIpO2lmKC0xPT09ZSlyZXR1cm47Y29uc3QgdD10aGlzLnRleHQ7c3dpdGNoKHRoaXMudGV4dD1cIlwiLHRoaXMubmFtZSl7Y2FzZVwidmVyc2lvblwiOnt0aGlzLnhtbERlY2xFeHBlY3RzPVtcImVuY29kaW5nXCIsXCJzdGFuZGFsb25lXCJdO2NvbnN0IGU9dDt0aGlzLnhtbERlY2wudmVyc2lvbj1lLC9eMVxcLlswLTldKyQvLnRlc3QoZSk/dGhpcy5vcHQuZm9yY2VYTUxWZXJzaW9ufHx0aGlzLnNldFhNTFZlcnNpb24oZSk6dGhpcy5mYWlsKFwidmVyc2lvbiBudW1iZXIgbXVzdCBtYXRjaCAvXjFcXFxcLlswLTldKyQvLlwiKTticmVha31jYXNlXCJlbmNvZGluZ1wiOi9eW0EtWmEtel1bQS1aYS16MC05Ll8tXSokLy50ZXN0KHQpfHx0aGlzLmZhaWwoXCJlbmNvZGluZyB2YWx1ZSBtdXN0IG1hdGNoIC9eW0EtWmEtejAtOV1bQS1aYS16MC05Ll8tXSokLy5cIiksdGhpcy54bWxEZWNsRXhwZWN0cz1bXCJzdGFuZGFsb25lXCJdLHRoaXMueG1sRGVjbC5lbmNvZGluZz10O2JyZWFrO2Nhc2VcInN0YW5kYWxvbmVcIjpcInllc1wiIT09dCYmXCJub1wiIT09dCYmdGhpcy5mYWlsKCdzdGFuZGFsb25lIHZhbHVlIG11c3QgbWF0Y2ggXCJ5ZXNcIiBvciBcIm5vXCIuJyksdGhpcy54bWxEZWNsRXhwZWN0cz1bXSx0aGlzLnhtbERlY2wuc3RhbmRhbG9uZT10fXRoaXMubmFtZT1cIlwiLHRoaXMuc3RhdGU9MzJ9c1hNTERlY2xTZXBhcmF0b3IoKXtjb25zdCBlPXRoaXMuZ2V0Q29kZU5vcm0oKTs2MyE9PWU/KG8oZSl8fCh0aGlzLmZhaWwoXCJ3aGl0ZXNwYWNlIHJlcXVpcmVkLlwiKSx0aGlzLnVuZ2V0KCkpLHRoaXMuc3RhdGU9MjcpOnRoaXMuc3RhdGU9MzN9c1hNTERlY2xFbmRpbmcoKXt2YXIgZTs2Mj09PXRoaXMuZ2V0Q29kZU5vcm0oKT8oXCJ4bWxcIiE9PXRoaXMucGlUYXJnZXQ/dGhpcy5mYWlsKFwicHJvY2Vzc2luZyBpbnN0cnVjdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGJlZm9yZSByb290LlwiKTpcInZlcnNpb25cIiE9PXRoaXMubmFtZSYmdGhpcy54bWxEZWNsRXhwZWN0cy5pbmNsdWRlcyhcInZlcnNpb25cIikmJnRoaXMuZmFpbChcIlhNTCBkZWNsYXJhdGlvbiBtdXN0IGNvbnRhaW4gYSB2ZXJzaW9uLlwiKSxudWxsPT09KGU9dGhpcy54bWxkZWNsSGFuZGxlcil8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHRoaXMueG1sRGVjbCksdGhpcy5uYW1lPVwiXCIsdGhpcy5waVRhcmdldD10aGlzLnRleHQ9XCJcIix0aGlzLnN0YXRlPTEzKTp0aGlzLmZhaWwoXCJUaGUgY2hhcmFjdGVyID8gaXMgZGlzYWxsb3dlZCBhbnl3aGVyZSBpbiBYTUwgZGVjbGFyYXRpb25zLlwiKSx0aGlzLnhtbERlY2xQb3NzaWJsZT0hMX1zT3BlblRhZygpe3ZhciBlO2NvbnN0IHQ9dGhpcy5jYXB0dXJlTmFtZUNoYXJzKCk7aWYoLTE9PT10KXJldHVybjtjb25zdCByPXRoaXMudGFnPXtuYW1lOnRoaXMubmFtZSxhdHRyaWJ1dGVzOk9iamVjdC5jcmVhdGUobnVsbCl9O3N3aXRjaCh0aGlzLm5hbWU9XCJcIix0aGlzLnhtbG5zT3B0JiYodGhpcy50b3BOUz1yLm5zPU9iamVjdC5jcmVhdGUobnVsbCkpLG51bGw9PT0oZT10aGlzLm9wZW5UYWdTdGFydEhhbmRsZXIpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyxyKSx0aGlzLnNhd1Jvb3Q9ITAsIXRoaXMuZnJhZ21lbnRPcHQmJnRoaXMuY2xvc2VkUm9vdCYmdGhpcy5mYWlsKFwiZG9jdW1lbnRzIG1heSBjb250YWluIG9ubHkgb25lIHJvb3QuXCIpLHQpe2Nhc2UgNjI6dGhpcy5vcGVuVGFnKCk7YnJlYWs7Y2FzZSA0Nzp0aGlzLnN0YXRlPTM1O2JyZWFrO2RlZmF1bHQ6byh0KXx8dGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gdGFnIG5hbWUuXCIpLHRoaXMuc3RhdGU9MzZ9fXNPcGVuVGFnU2xhc2goKXs2Mj09PXRoaXMuZ2V0Q29kZSgpP3RoaXMub3BlblNlbGZDbG9zaW5nVGFnKCk6KHRoaXMuZmFpbChcImZvcndhcmQtc2xhc2ggaW4gb3BlbmluZyB0YWcgbm90IGZvbGxvd2VkIGJ5ID4uXCIpLHRoaXMuc3RhdGU9MzYpfXNBdHRyaWIoKXtjb25zdCBlPXRoaXMuc2tpcFNwYWNlcygpOy0xIT09ZSYmKGwoZSk/KHRoaXMudW5nZXQoKSx0aGlzLnN0YXRlPTM3KTo2Mj09PWU/dGhpcy5vcGVuVGFnKCk6NDc9PT1lP3RoaXMuc3RhdGU9MzU6dGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gYXR0cmlidXRlIG5hbWUuXCIpKX1zQXR0cmliTmFtZSgpe2NvbnN0IGU9dGhpcy5jYXB0dXJlTmFtZUNoYXJzKCk7NjE9PT1lP3RoaXMuc3RhdGU9Mzk6byhlKT90aGlzLnN0YXRlPTM4OjYyPT09ZT8odGhpcy5mYWlsKFwiYXR0cmlidXRlIHdpdGhvdXQgdmFsdWUuXCIpLHRoaXMucHVzaEF0dHJpYih0aGlzLm5hbWUsdGhpcy5uYW1lKSx0aGlzLm5hbWU9dGhpcy50ZXh0PVwiXCIsdGhpcy5vcGVuVGFnKCkpOi0xIT09ZSYmdGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gYXR0cmlidXRlIG5hbWUuXCIpfXNBdHRyaWJOYW1lU2F3V2hpdGUoKXtjb25zdCBlPXRoaXMuc2tpcFNwYWNlcygpO3N3aXRjaChlKXtjYXNlLTE6cmV0dXJuO2Nhc2UgNjE6dGhpcy5zdGF0ZT0zOTticmVhaztkZWZhdWx0OnRoaXMuZmFpbChcImF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlLlwiKSx0aGlzLnRleHQ9XCJcIix0aGlzLm5hbWU9XCJcIiw2Mj09PWU/dGhpcy5vcGVuVGFnKCk6bChlKT8odGhpcy51bmdldCgpLHRoaXMuc3RhdGU9MzcpOih0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBhdHRyaWJ1dGUgbmFtZS5cIiksdGhpcy5zdGF0ZT0zNil9fXNBdHRyaWJWYWx1ZSgpe2NvbnN0IGU9dGhpcy5nZXRDb2RlTm9ybSgpO3coZSk/KHRoaXMucT1lLHRoaXMuc3RhdGU9NDApOm8oZSl8fCh0aGlzLmZhaWwoXCJ1bnF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuXCIpLHRoaXMuc3RhdGU9NDIsdGhpcy51bmdldCgpKX1zQXR0cmliVmFsdWVRdW90ZWQoKXtjb25zdHtxOmUsY2h1bms6dH09dGhpcztsZXR7aTpyfT10aGlzO2Zvcig7Oylzd2l0Y2godGhpcy5nZXRDb2RlKCkpe2Nhc2UgZTpyZXR1cm4gdGhpcy5wdXNoQXR0cmliKHRoaXMubmFtZSx0aGlzLnRleHQrdC5zbGljZShyLHRoaXMucHJldkkpKSx0aGlzLm5hbWU9dGhpcy50ZXh0PVwiXCIsdGhpcy5xPW51bGwsdm9pZCh0aGlzLnN0YXRlPTQxKTtjYXNlIDM4OnJldHVybiB0aGlzLnRleHQrPXQuc2xpY2Uocix0aGlzLnByZXZJKSx0aGlzLnN0YXRlPTE0LHZvaWQodGhpcy5lbnRpdHlSZXR1cm5TdGF0ZT00MCk7Y2FzZSAxMDpjYXNlLTI6Y2FzZSA5OnRoaXMudGV4dCs9dC5zbGljZShyLHRoaXMucHJldkkpK1wiIFwiLHI9dGhpcy5pO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIHRoaXMudGV4dCs9dC5zbGljZShyLHRoaXMucHJldkkpLHZvaWQgdGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIuXCIpO2Nhc2UtMTpyZXR1cm4gdm9pZCh0aGlzLnRleHQrPXQuc2xpY2UocikpfX1zQXR0cmliVmFsdWVDbG9zZWQoKXtjb25zdCBlPXRoaXMuZ2V0Q29kZU5vcm0oKTtvKGUpP3RoaXMuc3RhdGU9MzY6NjI9PT1lP3RoaXMub3BlblRhZygpOjQ3PT09ZT90aGlzLnN0YXRlPTM1OmwoZSk/KHRoaXMuZmFpbChcIm5vIHdoaXRlc3BhY2UgYmV0d2VlbiBhdHRyaWJ1dGVzLlwiKSx0aGlzLnVuZ2V0KCksdGhpcy5zdGF0ZT0zNyk6dGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gYXR0cmlidXRlIG5hbWUuXCIpfXNBdHRyaWJWYWx1ZVVucXVvdGVkKCl7Y29uc3QgZT10aGlzLmNhcHR1cmVUbyhNKTtzd2l0Y2goZSl7Y2FzZSAzODp0aGlzLnN0YXRlPTE0LHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9NDI7YnJlYWs7Y2FzZSA2MDp0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3Rlci5cIik7YnJlYWs7Y2FzZS0xOmJyZWFrO2RlZmF1bHQ6dGhpcy50ZXh0LmluY2x1ZGVzKFwiXV0+XCIpJiZ0aGlzLmZhaWwoJ3RoZSBzdHJpbmcgXCJdXT5cIiBpcyBkaXNhbGxvd2VkIGluIGNoYXIgZGF0YS4nKSx0aGlzLnB1c2hBdHRyaWIodGhpcy5uYW1lLHRoaXMudGV4dCksdGhpcy5uYW1lPXRoaXMudGV4dD1cIlwiLDYyPT09ZT90aGlzLm9wZW5UYWcoKTp0aGlzLnN0YXRlPTM2fX1zQ2xvc2VUYWcoKXtjb25zdCBlPXRoaXMuY2FwdHVyZU5hbWVDaGFycygpOzYyPT09ZT90aGlzLmNsb3NlVGFnKCk6byhlKT90aGlzLnN0YXRlPTQ0Oi0xIT09ZSYmdGhpcy5mYWlsKFwiZGlzYWxsb3dlZCBjaGFyYWN0ZXIgaW4gY2xvc2luZyB0YWcuXCIpfXNDbG9zZVRhZ1Nhd1doaXRlKCl7c3dpdGNoKHRoaXMuc2tpcFNwYWNlcygpKXtjYXNlIDYyOnRoaXMuY2xvc2VUYWcoKTticmVhaztjYXNlLTE6YnJlYWs7ZGVmYXVsdDp0aGlzLmZhaWwoXCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBjbG9zaW5nIHRhZy5cIil9fWhhbmRsZVRleHRJblJvb3QoKXtsZXR7aTplLGZvcmJpZGRlblN0YXRlOnR9PXRoaXM7Y29uc3R7Y2h1bms6cix0ZXh0SGFuZGxlcjpufT10aGlzO2U6Zm9yKDs7KXN3aXRjaCh0aGlzLmdldENvZGUoKSl7Y2FzZSA2MDppZih0aGlzLnN0YXRlPTE1LHZvaWQgMCE9PW4pe2NvbnN0e3RleHQ6dH09dGhpcyxpPXIuc2xpY2UoZSx0aGlzLnByZXZJKTswIT09dC5sZW5ndGg/KG4odCtpKSx0aGlzLnRleHQ9XCJcIik6MCE9PWkubGVuZ3RoJiZuKGkpfXQ9MDticmVhayBlO2Nhc2UgMzg6dGhpcy5zdGF0ZT0xNCx0aGlzLmVudGl0eVJldHVyblN0YXRlPTEzLHZvaWQgMCE9PW4mJih0aGlzLnRleHQrPXIuc2xpY2UoZSx0aGlzLnByZXZJKSksdD0wO2JyZWFrIGU7Y2FzZSA5Mzpzd2l0Y2godCl7Y2FzZSAwOnQ9MTticmVhaztjYXNlIDE6dD0yO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImltcG9zc2libGUgc3RhdGVcIil9YnJlYWs7Y2FzZSA2MjoyPT09dCYmdGhpcy5mYWlsKCd0aGUgc3RyaW5nIFwiXV0+XCIgaXMgZGlzYWxsb3dlZCBpbiBjaGFyIGRhdGEuJyksdD0wO2JyZWFrO2Nhc2UtMjp2b2lkIDAhPT1uJiYodGhpcy50ZXh0Kz1yLnNsaWNlKGUsdGhpcy5wcmV2SSkrXCJcXG5cIiksZT10aGlzLmksdD0wO2JyZWFrO2Nhc2UtMTp2b2lkIDAhPT1uJiYodGhpcy50ZXh0Kz1yLnNsaWNlKGUpKTticmVhayBlO2RlZmF1bHQ6dD0wfXRoaXMuZm9yYmlkZGVuU3RhdGU9dH1oYW5kbGVUZXh0T3V0c2lkZVJvb3QoKXtsZXR7aTplfT10aGlzO2NvbnN0e2NodW5rOnQsdGV4dEhhbmRsZXI6cn09dGhpcztsZXQgbj0hMTtlOmZvcig7Oyl7Y29uc3QgaT10aGlzLmdldENvZGUoKTtzd2l0Y2goaSl7Y2FzZSA2MDppZih0aGlzLnN0YXRlPTE1LHZvaWQgMCE9PXIpe2NvbnN0e3RleHQ6bn09dGhpcyxpPXQuc2xpY2UoZSx0aGlzLnByZXZJKTswIT09bi5sZW5ndGg/KHIobitpKSx0aGlzLnRleHQ9XCJcIik6MCE9PWkubGVuZ3RoJiZyKGkpfWJyZWFrIGU7Y2FzZSAzODp0aGlzLnN0YXRlPTE0LHRoaXMuZW50aXR5UmV0dXJuU3RhdGU9MTMsdm9pZCAwIT09ciYmKHRoaXMudGV4dCs9dC5zbGljZShlLHRoaXMucHJldkkpKSxuPSEwO2JyZWFrIGU7Y2FzZS0yOnZvaWQgMCE9PXImJih0aGlzLnRleHQrPXQuc2xpY2UoZSx0aGlzLnByZXZJKStcIlxcblwiKSxlPXRoaXMuaTticmVhaztjYXNlLTE6dm9pZCAwIT09ciYmKHRoaXMudGV4dCs9dC5zbGljZShlKSk7YnJlYWsgZTtkZWZhdWx0Om8oaSl8fChuPSEwKX19biYmKHRoaXMuc2F3Um9vdHx8dGhpcy5yZXBvcnRlZFRleHRCZWZvcmVSb290fHwodGhpcy5mYWlsKFwidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLlwiKSx0aGlzLnJlcG9ydGVkVGV4dEJlZm9yZVJvb3Q9ITApLHRoaXMuY2xvc2VkUm9vdCYmIXRoaXMucmVwb3J0ZWRUZXh0QWZ0ZXJSb290JiYodGhpcy5mYWlsKFwidGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLlwiKSx0aGlzLnJlcG9ydGVkVGV4dEFmdGVyUm9vdD0hMCkpfXB1c2hBdHRyaWJOUyhlLHQpe3ZhciByO2NvbnN0e3ByZWZpeDpuLGxvY2FsOml9PXRoaXMucW5hbWUoZSkscz17bmFtZTplLHByZWZpeDpuLGxvY2FsOmksdmFsdWU6dH07aWYodGhpcy5hdHRyaWJMaXN0LnB1c2gocyksbnVsbD09PShyPXRoaXMuYXR0cmlidXRlSGFuZGxlcil8fHZvaWQgMD09PXJ8fHIuY2FsbCh0aGlzLHMpLFwieG1sbnNcIj09PW4pe2NvbnN0IGU9dC50cmltKCk7XCIxLjBcIj09PXRoaXMuY3VycmVudFhNTFZlcnNpb24mJlwiXCI9PT1lJiZ0aGlzLmZhaWwoXCJpbnZhbGlkIGF0dGVtcHQgdG8gdW5kZWZpbmUgcHJlZml4IGluIFhNTCAxLjBcIiksdGhpcy50b3BOU1tpXT1lLEModGhpcyxpLGUpfWVsc2UgaWYoXCJ4bWxuc1wiPT09ZSl7Y29uc3QgZT10LnRyaW0oKTt0aGlzLnRvcE5TW1wiXCJdPWUsQyh0aGlzLFwiXCIsZSl9fXB1c2hBdHRyaWJQbGFpbihlLHQpe3ZhciByO2NvbnN0IG49e25hbWU6ZSx2YWx1ZTp0fTt0aGlzLmF0dHJpYkxpc3QucHVzaChuKSxudWxsPT09KHI9dGhpcy5hdHRyaWJ1dGVIYW5kbGVyKXx8dm9pZCAwPT09cnx8ci5jYWxsKHRoaXMsbil9ZW5kKCl7dmFyIGUsdDt0aGlzLnNhd1Jvb3R8fHRoaXMuZmFpbChcImRvY3VtZW50IG11c3QgY29udGFpbiBhIHJvb3QgZWxlbWVudC5cIik7Y29uc3R7dGFnczpyfT10aGlzO2Zvcig7ci5sZW5ndGg+MDspe2NvbnN0IGU9ci5wb3AoKTt0aGlzLmZhaWwoXCJ1bmNsb3NlZCB0YWc6IFwiK2UubmFtZSl9MCE9PXRoaXMuc3RhdGUmJjEzIT09dGhpcy5zdGF0ZSYmdGhpcy5mYWlsKFwidW5leHBlY3RlZCBlbmQuXCIpO2NvbnN0e3RleHQ6bn09dGhpcztyZXR1cm4gMCE9PW4ubGVuZ3RoJiYobnVsbD09PShlPXRoaXMudGV4dEhhbmRsZXIpfHx2b2lkIDA9PT1lfHxlLmNhbGwodGhpcyxuKSx0aGlzLnRleHQ9XCJcIiksdGhpcy5fY2xvc2VkPSEwLG51bGw9PT0odD10aGlzLmVuZEhhbmRsZXIpfHx2b2lkIDA9PT10fHx0LmNhbGwodGhpcyksdGhpcy5faW5pdCgpLHRoaXN9cmVzb2x2ZShlKXt2YXIgdCxyO2xldCBuPXRoaXMudG9wTlNbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbjtjb25zdHt0YWdzOml9PXRoaXM7Zm9yKGxldCB0PWkubGVuZ3RoLTE7dD49MDt0LS0paWYobj1pW3RdLm5zW2VdLHZvaWQgMCE9PW4pcmV0dXJuIG47cmV0dXJuIG49dGhpcy5uc1tlXSx2b2lkIDAhPT1uP246bnVsbD09PShyPSh0PXRoaXMub3B0KS5yZXNvbHZlUHJlZml4KXx8dm9pZCAwPT09cj92b2lkIDA6ci5jYWxsKHQsZSl9cW5hbWUoZSl7Y29uc3QgdD1lLmluZGV4T2YoXCI6XCIpO2lmKC0xPT09dClyZXR1cm57cHJlZml4OlwiXCIsbG9jYWw6ZX07Y29uc3Qgcj1lLnNsaWNlKHQrMSksbj1lLnNsaWNlKDAsdCk7cmV0dXJuKFwiXCI9PT1ufHxcIlwiPT09cnx8ci5pbmNsdWRlcyhcIjpcIikpJiZ0aGlzLmZhaWwoYG1hbGZvcm1lZCBuYW1lOiAke2V9LmApLHtwcmVmaXg6bixsb2NhbDpyfX1wcm9jZXNzQXR0cmlic05TKCl7dmFyIGU7Y29uc3R7YXR0cmliTGlzdDp0fT10aGlzLHI9dGhpcy50YWc7e2NvbnN0e3ByZWZpeDp0LGxvY2FsOm59PXRoaXMucW5hbWUoci5uYW1lKTtyLnByZWZpeD10LHIubG9jYWw9bjtjb25zdCBpPXIudXJpPW51bGwhPT0oZT10aGlzLnJlc29sdmUodCkpJiZ2b2lkIDAhPT1lP2U6XCJcIjtcIlwiIT09dCYmKFwieG1sbnNcIj09PXQmJnRoaXMuZmFpbCgndGFncyBtYXkgbm90IGhhdmUgXCJ4bWxuc1wiIGFzIHByZWZpeC4nKSxcIlwiPT09aSYmKHRoaXMuZmFpbChgdW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAke0pTT04uc3RyaW5naWZ5KHQpfS5gKSxyLnVyaT10KSl9aWYoMD09PXQubGVuZ3RoKXJldHVybjtjb25zdHthdHRyaWJ1dGVzOm59PXIsaT1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0e25hbWU6dCxwcmVmaXg6cixsb2NhbDpzfT1lO2xldCBvLGE7XCJcIj09PXI/KG89XCJ4bWxuc1wiPT09dD9nOlwiXCIsYT10KToobz10aGlzLnJlc29sdmUociksdm9pZCAwPT09byYmKHRoaXMuZmFpbChgdW5ib3VuZCBuYW1lc3BhY2UgcHJlZml4OiAke0pTT04uc3RyaW5naWZ5KHIpfS5gKSxvPXIpLGE9YHske299fSR7c31gKSxpLmhhcyhhKSYmdGhpcy5mYWlsKGBkdXBsaWNhdGUgYXR0cmlidXRlOiAke2F9LmApLGkuYWRkKGEpLGUudXJpPW8sblt0XT1lfXRoaXMuYXR0cmliTGlzdD1bXX1wcm9jZXNzQXR0cmlic1BsYWluKCl7Y29uc3R7YXR0cmliTGlzdDplfT10aGlzLHQ9dGhpcy50YWcuYXR0cmlidXRlcztmb3IoY29uc3R7bmFtZTpyLHZhbHVlOm59b2YgZSl2b2lkIDAhPT10W3JdJiZ0aGlzLmZhaWwoYGR1cGxpY2F0ZSBhdHRyaWJ1dGU6ICR7cn0uYCksdFtyXT1uO3RoaXMuYXR0cmliTGlzdD1bXX1vcGVuVGFnKCl7dmFyIGU7dGhpcy5wcm9jZXNzQXR0cmlicygpO2NvbnN0e3RhZ3M6dH09dGhpcyxyPXRoaXMudGFnO3IuaXNTZWxmQ2xvc2luZz0hMSxudWxsPT09KGU9dGhpcy5vcGVuVGFnSGFuZGxlcil8fHZvaWQgMD09PWV8fGUuY2FsbCh0aGlzLHIpLHQucHVzaChyKSx0aGlzLnN0YXRlPTEzLHRoaXMubmFtZT1cIlwifW9wZW5TZWxmQ2xvc2luZ1RhZygpe3ZhciBlLHQscjt0aGlzLnByb2Nlc3NBdHRyaWJzKCk7Y29uc3R7dGFnczpufT10aGlzLGk9dGhpcy50YWc7aS5pc1NlbGZDbG9zaW5nPSEwLG51bGw9PT0oZT10aGlzLm9wZW5UYWdIYW5kbGVyKXx8dm9pZCAwPT09ZXx8ZS5jYWxsKHRoaXMsaSksbnVsbD09PSh0PXRoaXMuY2xvc2VUYWdIYW5kbGVyKXx8dm9pZCAwPT09dHx8dC5jYWxsKHRoaXMsaSk7bnVsbD09PSh0aGlzLnRhZz1udWxsIT09KHI9bltuLmxlbmd0aC0xXSkmJnZvaWQgMCE9PXI/cjpudWxsKSYmKHRoaXMuY2xvc2VkUm9vdD0hMCksdGhpcy5zdGF0ZT0xMyx0aGlzLm5hbWU9XCJcIn1jbG9zZVRhZygpe2NvbnN0e3RhZ3M6ZSxuYW1lOnR9PXRoaXM7aWYodGhpcy5zdGF0ZT0xMyx0aGlzLm5hbWU9XCJcIixcIlwiPT09dClyZXR1cm4gdGhpcy5mYWlsKFwid2VpcmQgZW1wdHkgY2xvc2UgdGFnLlwiKSx2b2lkKHRoaXMudGV4dCs9XCI8Lz5cIik7Y29uc3Qgcj10aGlzLmNsb3NlVGFnSGFuZGxlcjtsZXQgbj1lLmxlbmd0aDtmb3IoO24tLSA+MDspe2NvbnN0IG49dGhpcy50YWc9ZS5wb3AoKTtpZih0aGlzLnRvcE5TPW4ubnMsbnVsbD09cnx8cihuKSxuLm5hbWU9PT10KWJyZWFrO3RoaXMuZmFpbChcInVuZXhwZWN0ZWQgY2xvc2UgdGFnLlwiKX0wPT09bj90aGlzLmNsb3NlZFJvb3Q9ITA6bjwwJiYodGhpcy5mYWlsKGB1bm1hdGNoZWQgY2xvc2luZyB0YWc6ICR7dH0uYCksdGhpcy50ZXh0Kz1gPC8ke3R9PmApfXBhcnNlRW50aXR5KGUpe2lmKFwiI1wiIT09ZVswXSl7Y29uc3QgdD10aGlzLkVOVElUSUVTW2VdO3JldHVybiB2b2lkIDAhPT10P3Q6KHRoaXMuZmFpbCh0aGlzLmlzTmFtZShlKT9cInVuZGVmaW5lZCBlbnRpdHkuXCI6XCJkaXNhbGxvd2VkIGNoYXJhY3RlciBpbiBlbnRpdHkgbmFtZS5cIiksYCYke2V9O2ApfWxldCB0PU5hTjtyZXR1cm5cInhcIj09PWVbMV0mJi9eI3hbMC05YS1mXSskL2kudGVzdChlKT90PXBhcnNlSW50KGUuc2xpY2UoMiksMTYpOi9eI1swLTldKyQvLnRlc3QoZSkmJih0PXBhcnNlSW50KGUuc2xpY2UoMSksMTApKSx0aGlzLmlzQ2hhcih0KT9TdHJpbmcuZnJvbUNvZGVQb2ludCh0KToodGhpcy5mYWlsKFwibWFsZm9ybWVkIGNoYXJhY3RlciBlbnRpdHkuXCIpLGAmJHtlfTtgKX19fSx7XCJ4bWxjaGFycy94bWwvMS4wL2VkNVwiOjU0MyxcInhtbGNoYXJzL3htbC8xLjEvZWQyXCI6NTQ0LFwieG1sY2hhcnMveG1sbnMvMS4wL2VkM1wiOjU0NX1dLDQ5NzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXI7ZnVuY3Rpb24gaShlLHQpe3RoaXMuX2Jsb2NrPW4uYWxsb2MoZSksdGhpcy5fZmluYWxTaXplPXQsdGhpcy5fYmxvY2tTaXplPWUsdGhpcy5fbGVuPTB9aS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJih0PXR8fFwidXRmOFwiLGU9bi5mcm9tKGUsdCkpO2Zvcih2YXIgcj10aGlzLl9ibG9jayxpPXRoaXMuX2Jsb2NrU2l6ZSxzPWUubGVuZ3RoLG89dGhpcy5fbGVuLGE9MDthPHM7KXtmb3IodmFyIGw9byVpLGM9TWF0aC5taW4ocy1hLGktbCksdT0wO3U8Yzt1KyspcltsK3VdPWVbYSt1XTthKz1jLChvKz1jKSVpPT0wJiZ0aGlzLl91cGRhdGUocil9cmV0dXJuIHRoaXMuX2xlbis9cyx0aGlzfSxpLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1t0XT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLHQrMSksdD49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgcj04KnRoaXMuX2xlbjtpZihyPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUocix0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgbj0oNDI5NDk2NzI5NSZyKT4+PjAsaT0oci1uKS80Mjk0OTY3Mjk2O3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoaSx0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShuLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBzPXRoaXMuX2hhc2goKTtyZXR1cm4gZT9zLnRvU3RyaW5nKGUpOnN9LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NcIil9LHQuZXhwb3J0cz1pfSx7XCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDQ5ODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQuZXhwb3J0cz1mdW5jdGlvbihlKXtlPWUudG9Mb3dlckNhc2UoKTt2YXIgdD1uW2VdO2lmKCF0KXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKVwiKTtyZXR1cm4gbmV3IHR9O24uc2hhPWUoXCIuL3NoYVwiKSxuLnNoYTE9ZShcIi4vc2hhMVwiKSxuLnNoYTIyND1lKFwiLi9zaGEyMjRcIiksbi5zaGEyNTY9ZShcIi4vc2hhMjU2XCIpLG4uc2hhMzg0PWUoXCIuL3NoYTM4NFwiKSxuLnNoYTUxMj1lKFwiLi9zaGE1MTJcIil9LHtcIi4vc2hhXCI6NDk5LFwiLi9zaGExXCI6NTAwLFwiLi9zaGEyMjRcIjo1MDEsXCIuL3NoYTI1NlwiOjUwMixcIi4vc2hhMzg0XCI6NTAzLFwiLi9zaGE1MTJcIjo1MDR9XSw0OTk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiaW5oZXJpdHNcIiksaT1lKFwiLi9oYXNoXCIpLHM9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixvPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sYT1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGwoKXt0aGlzLmluaXQoKSx0aGlzLl93PWEsaS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGU8PDMwfGU+Pj4yfWZ1bmN0aW9uIHUoZSx0LHIsbil7cmV0dXJuIDA9PT1lP3Qmcnx+dCZuOjI9PT1lP3Qmcnx0Jm58ciZuOnRecl5ufW4obCxpKSxsLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxsLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuX3csbj0wfHRoaXMuX2EsaT0wfHRoaXMuX2Iscz0wfHRoaXMuX2MsYT0wfHRoaXMuX2QsbD0wfHRoaXMuX2UsaD0wO2g8MTY7KytoKXJbaF09ZS5yZWFkSW50MzJCRSg0KmgpO2Zvcig7aDw4MDsrK2gpcltoXT1yW2gtM11ecltoLThdXnJbaC0xNF1ecltoLTE2XTtmb3IodmFyIGY9MDtmPDgwOysrZil7dmFyIGQ9fn4oZi8yMCkscD0wfCgodD1uKTw8NXx0Pj4+MjcpK3UoZCxpLHMsYSkrbCtyW2ZdK29bZF07bD1hLGE9cyxzPWMoaSksaT1uLG49cH10aGlzLl9hPW4rdGhpcy5fYXwwLHRoaXMuX2I9aSt0aGlzLl9ifDAsdGhpcy5fYz1zK3RoaXMuX2N8MCx0aGlzLl9kPWErdGhpcy5fZHwwLHRoaXMuX2U9bCt0aGlzLl9lfDB9LGwucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9cy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxlLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksZS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksZS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxlfSx0LmV4cG9ydHM9bH0se1wiLi9oYXNoXCI6NDk3LGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNTAwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImluaGVyaXRzXCIpLGk9ZShcIi4vaGFzaFwiKSxzPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsbz1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGE9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBsKCl7dGhpcy5pbml0KCksdGhpcy5fdz1hLGkuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBjKGUpe3JldHVybiBlPDw1fGU+Pj4yN31mdW5jdGlvbiB1KGUpe3JldHVybiBlPDwzMHxlPj4+Mn1mdW5jdGlvbiBoKGUsdCxyLG4pe3JldHVybiAwPT09ZT90JnJ8fnQmbjoyPT09ZT90JnJ8dCZufHImbjp0XnJebn1uKGwsaSksbC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sbC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLl93LG49MHx0aGlzLl9hLGk9MHx0aGlzLl9iLHM9MHx0aGlzLl9jLGE9MHx0aGlzLl9kLGw9MHx0aGlzLl9lLGY9MDtmPDE2OysrZilyW2ZdPWUucmVhZEludDMyQkUoNCpmKTtmb3IoO2Y8ODA7KytmKXJbZl09KHQ9cltmLTNdXnJbZi04XV5yW2YtMTRdXnJbZi0xNl0pPDwxfHQ+Pj4zMTtmb3IodmFyIGQ9MDtkPDgwOysrZCl7dmFyIHA9fn4oZC8yMCksbT1jKG4pK2gocCxpLHMsYSkrbCtyW2RdK29bcF18MDtsPWEsYT1zLHM9dShpKSxpPW4sbj1tfXRoaXMuX2E9bit0aGlzLl9hfDAsdGhpcy5fYj1pK3RoaXMuX2J8MCx0aGlzLl9jPXMrdGhpcy5fY3wwLHRoaXMuX2Q9YSt0aGlzLl9kfDAsdGhpcy5fZT1sK3RoaXMuX2V8MH0sbC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgZT1zLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gZS53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLGUud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxlLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksZS53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxlLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLGV9LHQuZXhwb3J0cz1sfSx7XCIuL2hhc2hcIjo0OTcsaW5oZXJpdHM6NDQwLFwic2FmZS1idWZmZXJcIjo0OTR9XSw1MDE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiaW5oZXJpdHNcIiksaT1lKFwiLi9zaGEyNTZcIikscz1lKFwiLi9oYXNoXCIpLG89ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixhPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gbCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9YSxzLmNhbGwodGhpcyw2NCw1Nil9bihsLGkpLGwucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sbC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgZT1vLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gZS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxlLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksZS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksZS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksZS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksZS53cml0ZUludDMyQkUodGhpcy5fZywyNCksZX0sdC5leHBvcnRzPWx9LHtcIi4vaGFzaFwiOjQ5NyxcIi4vc2hhMjU2XCI6NTAyLGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNTAyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcImluaGVyaXRzXCIpLGk9ZShcIi4vaGFzaFwiKSxzPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsbz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxhPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gbCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9YSxpLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gYyhlLHQscil7cmV0dXJuIHJeZSYodF5yKX1mdW5jdGlvbiB1KGUsdCxyKXtyZXR1cm4gZSZ0fHImKGV8dCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4oZT4+PjJ8ZTw8MzApXihlPj4+MTN8ZTw8MTkpXihlPj4+MjJ8ZTw8MTApfWZ1bmN0aW9uIGYoZSl7cmV0dXJuKGU+Pj42fGU8PDI2KV4oZT4+PjExfGU8PDIxKV4oZT4+PjI1fGU8PDcpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuKGU+Pj43fGU8PDI1KV4oZT4+PjE4fGU8PDE0KV5lPj4+M31uKGwsaSksbC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3NzkwMzM3MDMsdGhpcy5fYj0zMTQ0MTM0Mjc3LHRoaXMuX2M9MTAxMzkwNDI0Mix0aGlzLl9kPTI3NzM0ODA3NjIsdGhpcy5fZT0xMzU5ODkzMTE5LHRoaXMuX2Y9MjYwMDgyMjkyNCx0aGlzLl9nPTUyODczNDYzNSx0aGlzLl9oPTE1NDE0NTkyMjUsdGhpc30sbC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLl93LG49MHx0aGlzLl9hLGk9MHx0aGlzLl9iLHM9MHx0aGlzLl9jLGE9MHx0aGlzLl9kLGw9MHx0aGlzLl9lLHA9MHx0aGlzLl9mLG09MHx0aGlzLl9nLGI9MHx0aGlzLl9oLGc9MDtnPDE2OysrZylyW2ddPWUucmVhZEludDMyQkUoNCpnKTtmb3IoO2c8NjQ7KytnKXJbZ109MHwoKCh0PXJbZy0yXSk+Pj4xN3x0PDwxNSleKHQ+Pj4xOXx0PDwxMyledD4+PjEwKStyW2ctN10rZChyW2ctMTVdKStyW2ctMTZdO2Zvcih2YXIgeT0wO3k8NjQ7Kyt5KXt2YXIgdj1iK2YobCkrYyhsLHAsbSkrb1t5XStyW3ldfDAsdz1oKG4pK3UobixpLHMpfDA7Yj1tLG09cCxwPWwsbD1hK3Z8MCxhPXMscz1pLGk9bixuPXYrd3wwfXRoaXMuX2E9bit0aGlzLl9hfDAsdGhpcy5fYj1pK3RoaXMuX2J8MCx0aGlzLl9jPXMrdGhpcy5fY3wwLHRoaXMuX2Q9YSt0aGlzLl9kfDAsdGhpcy5fZT1sK3RoaXMuX2V8MCx0aGlzLl9mPXArdGhpcy5fZnwwLHRoaXMuX2c9bSt0aGlzLl9nfDAsdGhpcy5faD1iK3RoaXMuX2h8MH0sbC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgZT1zLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gZS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxlLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLGUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksZS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksZS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksZS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksZS53cml0ZUludDMyQkUodGhpcy5fZywyNCksZS53cml0ZUludDMyQkUodGhpcy5faCwyOCksZX0sdC5leHBvcnRzPWx9LHtcIi4vaGFzaFwiOjQ5Nyxpbmhlcml0czo0NDAsXCJzYWZlLWJ1ZmZlclwiOjQ5NH1dLDUwMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCJpbmhlcml0c1wiKSxpPWUoXCIuL3NoYTUxMlwiKSxzPWUoXCIuL2hhc2hcIiksbz1lKFwic2FmZS1idWZmZXJcIikuQnVmZmVyLGE9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gbCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9YSxzLmNhbGwodGhpcywxMjgsMTEyKX1uKGwsaSksbC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LGwucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9by5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gdCh0LHIsbil7ZS53cml0ZUludDMyQkUodCxuKSxlLndyaXRlSW50MzJCRShyLG4rNCl9cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxlfSx0LmV4cG9ydHM9bH0se1wiLi9oYXNoXCI6NDk3LFwiLi9zaGE1MTJcIjo1MDQsaW5oZXJpdHM6NDQwLFwic2FmZS1idWZmZXJcIjo0OTR9XSw1MDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiaW5oZXJpdHNcIiksaT1lKFwiLi9oYXNoXCIpLHM9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixvPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sYT1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBsKCl7dGhpcy5pbml0KCksdGhpcy5fdz1hLGkuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIGMoZSx0LHIpe3JldHVybiByXmUmKHRecil9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIGUmdHxyJihlfHQpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4oZT4+PjI4fHQ8PDQpXih0Pj4+MnxlPDwzMCleKHQ+Pj43fGU8PDI1KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuKGU+Pj4xNHx0PDwxOCleKGU+Pj4xOHx0PDwxNCleKHQ+Pj45fGU8PDIzKX1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuKGU+Pj4xfHQ8PDMxKV4oZT4+Pjh8dDw8MjQpXmU+Pj43fWZ1bmN0aW9uIHAoZSx0KXtyZXR1cm4oZT4+PjF8dDw8MzEpXihlPj4+OHx0PDwyNCleKGU+Pj43fHQ8PDI1KX1mdW5jdGlvbiBtKGUsdCl7cmV0dXJuKGU+Pj4xOXx0PDwxMyleKHQ+Pj4yOXxlPDwzKV5lPj4+Nn1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuKGU+Pj4xOXx0PDwxMyleKHQ+Pj4yOXxlPDwzKV4oZT4+PjZ8dDw8MjYpfWZ1bmN0aW9uIGcoZSx0KXtyZXR1cm4gZT4+PjA8dD4+PjA/MTowfW4obCxpKSxsLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sbC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5fdyxyPTB8dGhpcy5fYWgsbj0wfHRoaXMuX2JoLGk9MHx0aGlzLl9jaCxzPTB8dGhpcy5fZGgsYT0wfHRoaXMuX2VoLGw9MHx0aGlzLl9maCx5PTB8dGhpcy5fZ2gsdj0wfHRoaXMuX2hoLHc9MHx0aGlzLl9hbCxfPTB8dGhpcy5fYmwseD0wfHRoaXMuX2NsLGs9MHx0aGlzLl9kbCxTPTB8dGhpcy5fZWwsTT0wfHRoaXMuX2ZsLEM9MHx0aGlzLl9nbCxUPTB8dGhpcy5faGwsRT0wO0U8MzI7RSs9Mil0W0VdPWUucmVhZEludDMyQkUoNCpFKSx0W0UrMV09ZS5yZWFkSW50MzJCRSg0KkUrNCk7Zm9yKDtFPDE2MDtFKz0yKXt2YXIgQT10W0UtMzBdLFI9dFtFLTMwKzFdLE89ZChBLFIpLGo9cChSLEEpLEk9bShBPXRbRS00XSxSPXRbRS00KzFdKSxOPWIoUixBKSxQPXRbRS0xNF0sQj10W0UtMTQrMV0sRD10W0UtMzJdLEY9dFtFLTMyKzFdLEw9aitCfDAsej1PK1ArZyhMLGopfDA7ej0oej16K0krZyhMPUwrTnwwLE4pfDApK0QrZyhMPUwrRnwwLEYpfDAsdFtFXT16LHRbRSsxXT1MfWZvcih2YXIgVT0wO1U8MTYwO1UrPTIpe3o9dFtVXSxMPXRbVSsxXTt2YXIgJD11KHIsbixpKSxIPXUodyxfLHgpLFY9aChyLHcpLHE9aCh3LHIpLFc9ZihhLFMpLFg9ZihTLGEpLEs9b1tVXSxZPW9bVSsxXSxaPWMoYSxsLHkpLEc9YyhTLE0sQyksSj1UK1h8MCxRPXYrVytnKEosVCl8MDtRPShRPShRPVErWitnKEo9SitHfDAsRyl8MCkrSytnKEo9SitZfDAsWSl8MCkreitnKEo9SitMfDAsTCl8MDt2YXIgZWU9cStIfDAsdGU9ViskK2coZWUscSl8MDt2PXksVD1DLHk9bCxDPU0sbD1hLE09UyxhPXMrUStnKFM9aytKfDAsayl8MCxzPWksaz14LGk9bix4PV8sbj1yLF89dyxyPVErdGUrZyh3PUorZWV8MCxKKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3d8MCx0aGlzLl9ibD10aGlzLl9ibCtffDAsdGhpcy5fY2w9dGhpcy5fY2wreHwwLHRoaXMuX2RsPXRoaXMuX2RsK2t8MCx0aGlzLl9lbD10aGlzLl9lbCtTfDAsdGhpcy5fZmw9dGhpcy5fZmwrTXwwLHRoaXMuX2dsPXRoaXMuX2dsK0N8MCx0aGlzLl9obD10aGlzLl9obCtUfDAsdGhpcy5fYWg9dGhpcy5fYWgrcitnKHRoaXMuX2FsLHcpfDAsdGhpcy5fYmg9dGhpcy5fYmgrbitnKHRoaXMuX2JsLF8pfDAsdGhpcy5fY2g9dGhpcy5fY2graStnKHRoaXMuX2NsLHgpfDAsdGhpcy5fZGg9dGhpcy5fZGgrcytnKHRoaXMuX2RsLGspfDAsdGhpcy5fZWg9dGhpcy5fZWgrYStnKHRoaXMuX2VsLFMpfDAsdGhpcy5fZmg9dGhpcy5fZmgrbCtnKHRoaXMuX2ZsLE0pfDAsdGhpcy5fZ2g9dGhpcy5fZ2greStnKHRoaXMuX2dsLEMpfDAsdGhpcy5faGg9dGhpcy5faGgrditnKHRoaXMuX2hsLFQpfDB9LGwucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIGU9cy5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gdCh0LHIsbil7ZS53cml0ZUludDMyQkUodCxuKSxlLndyaXRlSW50MzJCRShyLG4rNCl9cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSx0KHRoaXMuX2doLHRoaXMuX2dsLDQ4KSx0KHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxlfSx0LmV4cG9ydHM9bH0se1wiLi9oYXNoXCI6NDk3LGluaGVyaXRzOjQ0MCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNTA1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWk7dmFyIG49ZShcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX1lKFwiaW5oZXJpdHNcIikoaSxuKSxpLlJlYWRhYmxlPWUoXCJyZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanNcIiksaS5Xcml0YWJsZT1lKFwicmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzXCIpLGkuRHVwbGV4PWUoXCJyZWFkYWJsZS1zdHJlYW0vZHVwbGV4LmpzXCIpLGkuVHJhbnNmb3JtPWUoXCJyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzXCIpLGkuUGFzc1Rocm91Z2g9ZShcInJlYWRhYmxlLXN0cmVhbS9wYXNzdGhyb3VnaC5qc1wiKSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkodCl7ZS53cml0YWJsZSYmITE9PT1lLndyaXRlKHQpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gcygpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oXCJkYXRhXCIsaSksZS5vbihcImRyYWluXCIscyksZS5faXNTdGRpb3x8dCYmITE9PT10LmVuZHx8KHIub24oXCJlbmRcIixhKSxyLm9uKFwiY2xvc2VcIixsKSk7dmFyIG89ITE7ZnVuY3Rpb24gYSgpe298fChvPSEwLGUuZW5kKCkpfWZ1bmN0aW9uIGwoKXtvfHwobz0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmRlc3Ryb3kmJmUuZGVzdHJveSgpKX1mdW5jdGlvbiBjKGUpe2lmKHUoKSwwPT09bi5saXN0ZW5lckNvdW50KHRoaXMsXCJlcnJvclwiKSl0aHJvdyBlfWZ1bmN0aW9uIHUoKXtyLnJlbW92ZUxpc3RlbmVyKFwiZGF0YVwiLGkpLGUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLHMpLHIucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixhKSxyLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixsKSxyLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixjKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixjKSxyLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsdSksci5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSl9cmV0dXJuIHIub24oXCJlcnJvclwiLGMpLGUub24oXCJlcnJvclwiLGMpLHIub24oXCJlbmRcIix1KSxyLm9uKFwiY2xvc2VcIix1KSxlLm9uKFwiY2xvc2VcIix1KSxlLmVtaXQoXCJwaXBlXCIsciksZX19LHtldmVudHM6NDIyLGluaGVyaXRzOjQ0MCxcInJlYWRhYmxlLXN0cmVhbS9kdXBsZXguanNcIjo1MDcsXCJyZWFkYWJsZS1zdHJlYW0vcGFzc3Rocm91Z2guanNcIjo1MTYsXCJyZWFkYWJsZS1zdHJlYW0vcmVhZGFibGUuanNcIjo1MTcsXCJyZWFkYWJsZS1zdHJlYW0vdHJhbnNmb3JtLmpzXCI6NTE4LFwicmVhZGFibGUtc3RyZWFtL3dyaXRhYmxlLmpzXCI6NTE5fV0sNTA2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09bi5jYWxsKGUpfX0se31dLDUwNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lKFwiLi9saWIvX3N0cmVhbV9kdXBsZXguanNcIil9LHtcIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzXCI6NTA4fV0sNTA4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInByb2Nlc3MtbmV4dGljay1hcmdzXCIpLGk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdH07dC5leHBvcnRzPWg7dmFyIHM9T2JqZWN0LmNyZWF0ZShlKFwiY29yZS11dGlsLWlzXCIpKTtzLmluaGVyaXRzPWUoXCJpbmhlcml0c1wiKTt2YXIgbz1lKFwiLi9fc3RyZWFtX3JlYWRhYmxlXCIpLGE9ZShcIi4vX3N0cmVhbV93cml0YWJsZVwiKTtzLmluaGVyaXRzKGgsbyk7Zm9yKHZhciBsPWkoYS5wcm90b3R5cGUpLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXTtoLnByb3RvdHlwZVt1XXx8KGgucHJvdG90eXBlW3VdPWEucHJvdG90eXBlW3VdKX1mdW5jdGlvbiBoKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGgpKXJldHVybiBuZXcgaChlKTtvLmNhbGwodGhpcyxlKSxhLmNhbGwodGhpcyxlKSxlJiYhMT09PWUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSxlJiYhMT09PWUud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsZSYmITE9PT1lLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHRoaXMub25jZShcImVuZFwiLGYpfWZ1bmN0aW9uIGYoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fG4ubmV4dFRpY2soZCx0aGlzKX1mdW5jdGlvbiBkKGUpe2UuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGgucHJvdG90eXBlLFwid3JpdGFibGVIaWdoV2F0ZXJNYXJrXCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaC5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQpfSxzZXQ6ZnVuY3Rpb24oZSl7dm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUsdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ZSl9fSksaC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxuLm5leHRUaWNrKHQsZSl9fSx7XCIuL19zdHJlYW1fcmVhZGFibGVcIjo1MTAsXCIuL19zdHJlYW1fd3JpdGFibGVcIjo1MTIsXCJjb3JlLXV0aWwtaXNcIjozODMsaW5oZXJpdHM6NDQwLFwicHJvY2Vzcy1uZXh0aWNrLWFyZ3NcIjo0NjZ9XSw1MDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9czt2YXIgbj1lKFwiLi9fc3RyZWFtX3RyYW5zZm9ybVwiKSxpPU9iamVjdC5jcmVhdGUoZShcImNvcmUtdXRpbC1pc1wiKSk7ZnVuY3Rpb24gcyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzKSlyZXR1cm4gbmV3IHMoZSk7bi5jYWxsKHRoaXMsZSl9aS5pbmhlcml0cz1lKFwiaW5oZXJpdHNcIiksaS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZSx0LHIpe3IobnVsbCxlKX19LHtcIi4vX3N0cmVhbV90cmFuc2Zvcm1cIjo1MTEsXCJjb3JlLXV0aWwtaXNcIjozODMsaW5oZXJpdHM6NDQwfV0sNTEwOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIsbil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcInByb2Nlc3MtbmV4dGljay1hcmdzXCIpO3QuZXhwb3J0cz12O3ZhciBzLG89ZShcImlzYXJyYXlcIik7di5SZWFkYWJsZVN0YXRlPXk7ZShcImV2ZW50c1wiKS5FdmVudEVtaXR0ZXI7dmFyIGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5saXN0ZW5lcnModCkubGVuZ3RofSxsPWUoXCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtXCIpLGM9ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcix1PSh2b2lkIDAhPT1uP246XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBoPU9iamVjdC5jcmVhdGUoZShcImNvcmUtdXRpbC1pc1wiKSk7aC5pbmhlcml0cz1lKFwiaW5oZXJpdHNcIik7dmFyIGY9ZShcInV0aWxcIiksZD12b2lkIDA7ZD1mJiZmLmRlYnVnbG9nP2YuZGVidWdsb2coXCJzdHJlYW1cIik6ZnVuY3Rpb24oKXt9O3ZhciBwLG09ZShcIi4vaW50ZXJuYWwvc3RyZWFtcy9CdWZmZXJMaXN0XCIpLGI9ZShcIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95XCIpO2guaW5oZXJpdHModixsKTt2YXIgZz1bXCJlcnJvclwiLFwiY2xvc2VcIixcImRlc3Ryb3lcIixcInBhdXNlXCIsXCJyZXN1bWVcIl07ZnVuY3Rpb24geSh0LHIpe3Q9dHx8e307dmFyIG49ciBpbnN0YW5jZW9mKHM9c3x8ZShcIi4vX3N0cmVhbV9kdXBsZXhcIikpO3RoaXMub2JqZWN0TW9kZT0hIXQub2JqZWN0TW9kZSxuJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIGk9dC5oaWdoV2F0ZXJNYXJrLG89dC5yZWFkYWJsZUhpZ2hXYXRlck1hcmssYT10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPWl8fDA9PT1pP2k6biYmKG98fDA9PT1vKT9vOmEsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgbSx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHQuZW5jb2RpbmcmJihwfHwocD1lKFwic3RyaW5nX2RlY29kZXIvXCIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgcCh0LmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcpfWZ1bmN0aW9uIHYodCl7aWYocz1zfHxlKFwiLi9fc3RyZWFtX2R1cGxleFwiKSwhKHRoaXMgaW5zdGFuY2VvZiB2KSlyZXR1cm4gbmV3IHYodCk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgeSh0LHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZCYmKHRoaXMuX3JlYWQ9dC5yZWFkKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXQuZGVzdHJveSkpLGwuY2FsbCh0aGlzKX1mdW5jdGlvbiB3KGUsdCxyLG4saSl7dmFyIHMsbz1lLl9yZWFkYWJsZVN0YXRlO251bGw9PT10PyhvLnJlYWRpbmc9ITEsZnVuY3Rpb24oZSx0KXtpZih0LmVuZGVkKXJldHVybjtpZih0LmRlY29kZXIpe3ZhciByPXQuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKHQuYnVmZmVyLnB1c2gociksdC5sZW5ndGgrPXQub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX10LmVuZGVkPSEwLGsoZSl9KGUsbykpOihpfHwocz1mdW5jdGlvbihlLHQpe3ZhciByO249dCxjLmlzQnVmZmVyKG4pfHxuIGluc3RhbmNlb2YgdXx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fHZvaWQgMD09PXR8fGUub2JqZWN0TW9kZXx8KHI9bmV3IFR5cGVFcnJvcihcIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmtcIikpO3ZhciBuO3JldHVybiByfShvLHQpKSxzP2UuZW1pdChcImVycm9yXCIscyk6by5vYmplY3RNb2RlfHx0JiZ0Lmxlbmd0aD4wPyhcInN0cmluZ1wiPT10eXBlb2YgdHx8by5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1jLnByb3RvdHlwZXx8KHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGMuZnJvbShlKX0odCkpLG4/by5lbmRFbWl0dGVkP2UuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnRcIikpOl8oZSxvLHQsITApOm8uZW5kZWQ/ZS5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiKSk6KG8ucmVhZGluZz0hMSxvLmRlY29kZXImJiFyPyh0PW8uZGVjb2Rlci53cml0ZSh0KSxvLm9iamVjdE1vZGV8fDAhPT10Lmxlbmd0aD9fKGUsbyx0LCExKTpNKGUsbykpOl8oZSxvLHQsITEpKSk6bnx8KG8ucmVhZGluZz0hMSkpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hZS5lbmRlZCYmKGUubmVlZFJlYWRhYmxlfHxlLmxlbmd0aDxlLmhpZ2hXYXRlck1hcmt8fDA9PT1lLmxlbmd0aCl9KG8pfWZ1bmN0aW9uIF8oZSx0LHIsbil7dC5mbG93aW5nJiYwPT09dC5sZW5ndGgmJiF0LnN5bmM/KGUuZW1pdChcImRhdGFcIixyKSxlLnJlYWQoMCkpOih0Lmxlbmd0aCs9dC5vYmplY3RNb2RlPzE6ci5sZW5ndGgsbj90LmJ1ZmZlci51bnNoaWZ0KHIpOnQuYnVmZmVyLnB1c2gociksdC5uZWVkUmVhZGFibGUmJmsoZSkpLE0oZSx0KX1PYmplY3QuZGVmaW5lUHJvcGVydHkodi5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLHYucHJvdG90eXBlLmRlc3Ryb3k9Yi5kZXN0cm95LHYucHJvdG90eXBlLl91bmRlc3Ryb3k9Yi51bmRlc3Ryb3ksdi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLnB1c2gobnVsbCksdChlKX0sdi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6XCJzdHJpbmdcIj09dHlwZW9mIGUmJigodD10fHxuLmRlZmF1bHRFbmNvZGluZykhPT1uLmVuY29kaW5nJiYoZT1jLmZyb20oZSx0KSx0PVwiXCIpLHI9ITApLHcodGhpcyxlLHQsITEscil9LHYucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHcodGhpcyxlLG51bGwsITAsITEpfSx2LnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSx2LnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gcHx8KHA9ZShcInN0cmluZ19kZWNvZGVyL1wiKS5TdHJpbmdEZWNvZGVyKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IHAodCksdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10LHRoaXN9O2Z1bmN0aW9uIHgoZSx0KXtyZXR1cm4gZTw9MHx8MD09PXQubGVuZ3RoJiZ0LmVuZGVkPzA6dC5vYmplY3RNb2RlPzE6ZSE9ZT90LmZsb3dpbmcmJnQubGVuZ3RoP3QuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6dC5sZW5ndGg6KGU+dC5oaWdoV2F0ZXJNYXJrJiYodC5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBlPj04Mzg4NjA4P2U9ODM4ODYwODooZS0tLGV8PWU+Pj4xLGV8PWU+Pj4yLGV8PWU+Pj40LGV8PWU+Pj44LGV8PWU+Pj4xNixlKyspLGV9KGUpKSxlPD10Lmxlbmd0aD9lOnQuZW5kZWQ/dC5sZW5ndGg6KHQubmVlZFJlYWRhYmxlPSEwLDApKX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7dC5uZWVkUmVhZGFibGU9ITEsdC5lbWl0dGVkUmVhZGFibGV8fChkKFwiZW1pdFJlYWRhYmxlXCIsdC5mbG93aW5nKSx0LmVtaXR0ZWRSZWFkYWJsZT0hMCx0LnN5bmM/aS5uZXh0VGljayhTLGUpOlMoZSkpfWZ1bmN0aW9uIFMoZSl7ZChcImVtaXQgcmVhZGFibGVcIiksZS5lbWl0KFwicmVhZGFibGVcIiksQShlKX1mdW5jdGlvbiBNKGUsdCl7dC5yZWFkaW5nTW9yZXx8KHQucmVhZGluZ01vcmU9ITAsaS5uZXh0VGljayhDLGUsdCkpfWZ1bmN0aW9uIEMoZSx0KXtmb3IodmFyIHI9dC5sZW5ndGg7IXQucmVhZGluZyYmIXQuZmxvd2luZyYmIXQuZW5kZWQmJnQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyayYmKGQoXCJtYXliZVJlYWRNb3JlIHJlYWQgMFwiKSxlLnJlYWQoMCksciE9PXQubGVuZ3RoKTspcj10Lmxlbmd0aDt0LnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIFQoZSl7ZChcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSxlLnJlYWQoMCl9ZnVuY3Rpb24gRShlLHQpe3QucmVhZGluZ3x8KGQoXCJyZXN1bWUgcmVhZCAwXCIpLGUucmVhZCgwKSksdC5yZXN1bWVTY2hlZHVsZWQ9ITEsdC5hd2FpdERyYWluPTAsZS5lbWl0KFwicmVzdW1lXCIpLEEoZSksdC5mbG93aW5nJiYhdC5yZWFkaW5nJiZlLnJlYWQoMCl9ZnVuY3Rpb24gQShlKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2ZvcihkKFwiZmxvd1wiLHQuZmxvd2luZyk7dC5mbG93aW5nJiZudWxsIT09ZS5yZWFkKCk7KTt9ZnVuY3Rpb24gUihlLHQpe3JldHVybiAwPT09dC5sZW5ndGg/bnVsbDoodC5vYmplY3RNb2RlP3I9dC5idWZmZXIuc2hpZnQoKTohZXx8ZT49dC5sZW5ndGg/KHI9dC5kZWNvZGVyP3QuYnVmZmVyLmpvaW4oXCJcIik6MT09PXQuYnVmZmVyLmxlbmd0aD90LmJ1ZmZlci5oZWFkLmRhdGE6dC5idWZmZXIuY29uY2F0KHQubGVuZ3RoKSx0LmJ1ZmZlci5jbGVhcigpKTpyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjtlPHQuaGVhZC5kYXRhLmxlbmd0aD8obj10LmhlYWQuZGF0YS5zbGljZSgwLGUpLHQuaGVhZC5kYXRhPXQuaGVhZC5kYXRhLnNsaWNlKGUpKTpuPWU9PT10LmhlYWQuZGF0YS5sZW5ndGg/dC5zaGlmdCgpOnI/ZnVuY3Rpb24oZSx0KXt2YXIgcj10LmhlYWQsbj0xLGk9ci5kYXRhO2UtPWkubGVuZ3RoO2Zvcig7cj1yLm5leHQ7KXt2YXIgcz1yLmRhdGEsbz1lPnMubGVuZ3RoP3MubGVuZ3RoOmU7aWYobz09PXMubGVuZ3RoP2krPXM6aSs9cy5zbGljZSgwLGUpLDA9PT0oZS09bykpe289PT1zLmxlbmd0aD8oKytuLHIubmV4dD90LmhlYWQ9ci5uZXh0OnQuaGVhZD10LnRhaWw9bnVsbCk6KHQuaGVhZD1yLHIuZGF0YT1zLnNsaWNlKG8pKTticmVha30rK259cmV0dXJuIHQubGVuZ3RoLT1uLGl9KGUsdCk6ZnVuY3Rpb24oZSx0KXt2YXIgcj1jLmFsbG9jVW5zYWZlKGUpLG49dC5oZWFkLGk9MTtuLmRhdGEuY29weShyKSxlLT1uLmRhdGEubGVuZ3RoO2Zvcig7bj1uLm5leHQ7KXt2YXIgcz1uLmRhdGEsbz1lPnMubGVuZ3RoP3MubGVuZ3RoOmU7aWYocy5jb3B5KHIsci5sZW5ndGgtZSwwLG8pLDA9PT0oZS09bykpe289PT1zLmxlbmd0aD8oKytpLG4ubmV4dD90LmhlYWQ9bi5uZXh0OnQuaGVhZD10LnRhaWw9bnVsbCk6KHQuaGVhZD1uLG4uZGF0YT1zLnNsaWNlKG8pKTticmVha30rK2l9cmV0dXJuIHQubGVuZ3RoLT1pLHJ9KGUsdCk7cmV0dXJuIG59KGUsdC5idWZmZXIsdC5kZWNvZGVyKSxyKTt2YXIgcn1mdW5jdGlvbiBPKGUpe3ZhciB0PWUuX3JlYWRhYmxlU3RhdGU7aWYodC5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJ1wiZW5kUmVhZGFibGUoKVwiIGNhbGxlZCBvbiBub24tZW1wdHkgc3RyZWFtJyk7dC5lbmRFbWl0dGVkfHwodC5lbmRlZD0hMCxpLm5leHRUaWNrKGosdCxlKSl9ZnVuY3Rpb24gaihlLHQpe2UuZW5kRW1pdHRlZHx8MCE9PWUubGVuZ3RofHwoZS5lbmRFbWl0dGVkPSEwLHQucmVhZGFibGU9ITEsdC5lbWl0KFwiZW5kXCIpKX1mdW5jdGlvbiBJKGUsdCl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKWlmKGVbcl09PT10KXJldHVybiByO3JldHVybi0xfXYucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oZSl7ZChcInJlYWRcIixlKSxlPXBhcnNlSW50KGUsMTApO3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGUscj1lO2lmKDAhPT1lJiYodC5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1lJiZ0Lm5lZWRSZWFkYWJsZSYmKHQubGVuZ3RoPj10LmhpZ2hXYXRlck1hcmt8fHQuZW5kZWQpKXJldHVybiBkKFwicmVhZDogZW1pdFJlYWRhYmxlXCIsdC5sZW5ndGgsdC5lbmRlZCksMD09PXQubGVuZ3RoJiZ0LmVuZGVkP08odGhpcyk6ayh0aGlzKSxudWxsO2lmKDA9PT0oZT14KGUsdCkpJiZ0LmVuZGVkKXJldHVybiAwPT09dC5sZW5ndGgmJk8odGhpcyksbnVsbDt2YXIgbixpPXQubmVlZFJlYWRhYmxlO3JldHVybiBkKFwibmVlZCByZWFkYWJsZVwiLGkpLCgwPT09dC5sZW5ndGh8fHQubGVuZ3RoLWU8dC5oaWdoV2F0ZXJNYXJrKSYmZChcImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrXCIsaT0hMCksdC5lbmRlZHx8dC5yZWFkaW5nP2QoXCJyZWFkaW5nIG9yIGVuZGVkXCIsaT0hMSk6aSYmKGQoXCJkbyByZWFkXCIpLHQucmVhZGluZz0hMCx0LnN5bmM9ITAsMD09PXQubGVuZ3RoJiYodC5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQodC5oaWdoV2F0ZXJNYXJrKSx0LnN5bmM9ITEsdC5yZWFkaW5nfHwoZT14KHIsdCkpKSxudWxsPT09KG49ZT4wP1IoZSx0KTpudWxsKT8odC5uZWVkUmVhZGFibGU9ITAsZT0wKTp0Lmxlbmd0aC09ZSwwPT09dC5sZW5ndGgmJih0LmVuZGVkfHwodC5uZWVkUmVhZGFibGU9ITApLHIhPT1lJiZ0LmVuZGVkJiZPKHRoaXMpKSxudWxsIT09biYmdGhpcy5lbWl0KFwiZGF0YVwiLG4pLG59LHYucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKGUpe3RoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwiX3JlYWQoKSBpcyBub3QgaW1wbGVtZW50ZWRcIikpfSx2LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxzPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKHMucGlwZXNDb3VudCl7Y2FzZSAwOnMucGlwZXM9ZTticmVhaztjYXNlIDE6cy5waXBlcz1bcy5waXBlcyxlXTticmVhaztkZWZhdWx0OnMucGlwZXMucHVzaChlKX1zLnBpcGVzQ291bnQrPTEsZChcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLHMucGlwZXNDb3VudCx0KTt2YXIgbD0oIXR8fCExIT09dC5lbmQpJiZlIT09ci5zdGRvdXQmJmUhPT1yLnN0ZGVycj91OnY7ZnVuY3Rpb24gYyh0LHIpe2QoXCJvbnVucGlwZVwiKSx0PT09biYmciYmITE9PT1yLmhhc1VucGlwZWQmJihyLmhhc1VucGlwZWQ9ITAsZChcImNsZWFudXBcIiksZS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsZyksZS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLHkpLGUucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLGgpLGUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGIpLGUucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixjKSxuLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsdSksbi5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHYpLG4ucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsbSksZj0hMCwhcy5hd2FpdERyYWlufHxlLl93cml0YWJsZVN0YXRlJiYhZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fGgoKSl9ZnVuY3Rpb24gdSgpe2QoXCJvbmVuZFwiKSxlLmVuZCgpfXMuZW5kRW1pdHRlZD9pLm5leHRUaWNrKGwpOm4ub25jZShcImVuZFwiLGwpLGUub24oXCJ1bnBpcGVcIixjKTt2YXIgaD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1lLl9yZWFkYWJsZVN0YXRlO2QoXCJwaXBlT25EcmFpblwiLHQuYXdhaXREcmFpbiksdC5hd2FpdERyYWluJiZ0LmF3YWl0RHJhaW4tLSwwPT09dC5hd2FpdERyYWluJiZhKGUsXCJkYXRhXCIpJiYodC5mbG93aW5nPSEwLEEoZSkpfX0obik7ZS5vbihcImRyYWluXCIsaCk7dmFyIGY9ITE7dmFyIHA9ITE7ZnVuY3Rpb24gbSh0KXtkKFwib25kYXRhXCIpLHA9ITEsITEhPT1lLndyaXRlKHQpfHxwfHwoKDE9PT1zLnBpcGVzQ291bnQmJnMucGlwZXM9PT1lfHxzLnBpcGVzQ291bnQ+MSYmLTEhPT1JKHMucGlwZXMsZSkpJiYhZiYmKGQoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixzLmF3YWl0RHJhaW4pLHMuYXdhaXREcmFpbisrLHA9ITApLG4ucGF1c2UoKSl9ZnVuY3Rpb24gYih0KXtkKFwib25lcnJvclwiLHQpLHYoKSxlLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixiKSwwPT09YShlLFwiZXJyb3JcIikmJmUuZW1pdChcImVycm9yXCIsdCl9ZnVuY3Rpb24gZygpe2UucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIix5KSx2KCl9ZnVuY3Rpb24geSgpe2QoXCJvbmZpbmlzaFwiKSxlLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixnKSx2KCl9ZnVuY3Rpb24gdigpe2QoXCJ1bnBpcGVcIiksbi51bnBpcGUoZSl9cmV0dXJuIG4ub24oXCJkYXRhXCIsbSksZnVuY3Rpb24oZSx0LHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBlLnByZXBlbmRMaXN0ZW5lcih0LHIpO2UuX2V2ZW50cyYmZS5fZXZlbnRzW3RdP28oZS5fZXZlbnRzW3RdKT9lLl9ldmVudHNbdF0udW5zaGlmdChyKTplLl9ldmVudHNbdF09W3IsZS5fZXZlbnRzW3RdXTplLm9uKHQscil9KGUsXCJlcnJvclwiLGIpLGUub25jZShcImNsb3NlXCIsZyksZS5vbmNlKFwiZmluaXNoXCIseSksZS5lbWl0KFwicGlwZVwiLG4pLHMuZmxvd2luZ3x8KGQoXCJwaXBlIHJlc3VtZVwiKSxuLnJlc3VtZSgpKSxlfSx2LnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXtoYXNVbnBpcGVkOiExfTtpZigwPT09dC5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT10LnBpcGVzQ291bnQpcmV0dXJuIGUmJmUhPT10LnBpcGVzfHwoZXx8KGU9dC5waXBlcyksdC5waXBlcz1udWxsLHQucGlwZXNDb3VudD0wLHQuZmxvd2luZz0hMSxlJiZlLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHIpKSx0aGlzO2lmKCFlKXt2YXIgbj10LnBpcGVzLGk9dC5waXBlc0NvdW50O3QucGlwZXM9bnVsbCx0LnBpcGVzQ291bnQ9MCx0LmZsb3dpbmc9ITE7Zm9yKHZhciBzPTA7czxpO3MrKyluW3NdLmVtaXQoXCJ1bnBpcGVcIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIG89SSh0LnBpcGVzLGUpO3JldHVybi0xPT09b3x8KHQucGlwZXMuc3BsaWNlKG8sMSksdC5waXBlc0NvdW50LT0xLDE9PT10LnBpcGVzQ291bnQmJih0LnBpcGVzPXQucGlwZXNbMF0pLGUuZW1pdChcInVucGlwZVwiLHRoaXMscikpLHRoaXN9LHYucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bC5wcm90b3R5cGUub24uY2FsbCh0aGlzLGUsdCk7aWYoXCJkYXRhXCI9PT1lKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoXCJyZWFkYWJsZVwiPT09ZSl7dmFyIG49dGhpcy5fcmVhZGFibGVTdGF0ZTtuLmVuZEVtaXR0ZWR8fG4ucmVhZGFibGVMaXN0ZW5pbmd8fChuLnJlYWRhYmxlTGlzdGVuaW5nPW4ubmVlZFJlYWRhYmxlPSEwLG4uZW1pdHRlZFJlYWRhYmxlPSExLG4ucmVhZGluZz9uLmxlbmd0aCYmayh0aGlzKTppLm5leHRUaWNrKFQsdGhpcykpfXJldHVybiByfSx2LnByb3RvdHlwZS5hZGRMaXN0ZW5lcj12LnByb3RvdHlwZS5vbix2LnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBlLmZsb3dpbmd8fChkKFwicmVzdW1lXCIpLGUuZmxvd2luZz0hMCxmdW5jdGlvbihlLHQpe3QucmVzdW1lU2NoZWR1bGVkfHwodC5yZXN1bWVTY2hlZHVsZWQ9ITAsaS5uZXh0VGljayhFLGUsdCkpfSh0aGlzLGUpKSx0aGlzfSx2LnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBkKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKGQoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXN9LHYucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuX3JlYWRhYmxlU3RhdGUsbj0hMTtmb3IodmFyIGkgaW4gZS5vbihcImVuZFwiLChmdW5jdGlvbigpe2lmKGQoXCJ3cmFwcGVkIGVuZFwiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgZT1yLmRlY29kZXIuZW5kKCk7ZSYmZS5sZW5ndGgmJnQucHVzaChlKX10LnB1c2gobnVsbCl9KSksZS5vbihcImRhdGFcIiwoZnVuY3Rpb24oaSl7KGQoXCJ3cmFwcGVkIGRhdGFcIiksci5kZWNvZGVyJiYoaT1yLmRlY29kZXIud3JpdGUoaSkpLHIub2JqZWN0TW9kZSYmbnVsbD09aSl8fChyLm9iamVjdE1vZGV8fGkmJmkubGVuZ3RoKSYmKHQucHVzaChpKXx8KG49ITAsZS5wYXVzZSgpKSl9KSksZSl2b2lkIDA9PT10aGlzW2ldJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlW2ldJiYodGhpc1tpXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZVt0XS5hcHBseShlLGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBzPTA7czxnLmxlbmd0aDtzKyspZS5vbihnW3NdLHRoaXMuZW1pdC5iaW5kKHRoaXMsZ1tzXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKHQpe2QoXCJ3cmFwcGVkIF9yZWFkXCIsdCksbiYmKG49ITEsZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2LnByb3RvdHlwZSxcInJlYWRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksdi5fZnJvbUxpc3Q9Un0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsZShcIl9wcm9jZXNzXCIpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7XCIuL19zdHJlYW1fZHVwbGV4XCI6NTA4LFwiLi9pbnRlcm5hbC9zdHJlYW1zL0J1ZmZlckxpc3RcIjo1MTMsXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveVwiOjUxNCxcIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW1cIjo1MTUsX3Byb2Nlc3M6NDY3LFwiY29yZS11dGlsLWlzXCI6MzgzLGV2ZW50czo0MjIsaW5oZXJpdHM6NDQwLGlzYXJyYXk6NTA2LFwicHJvY2Vzcy1uZXh0aWNrLWFyZ3NcIjo0NjYsXCJzYWZlLWJ1ZmZlclwiOjUyMCxcInN0cmluZ19kZWNvZGVyL1wiOjUyMSx1dGlsOjE4OH1dLDUxMTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1vO3ZhciBuPWUoXCIuL19zdHJlYW1fZHVwbGV4XCIpLGk9T2JqZWN0LmNyZWF0ZShlKFwiY29yZS11dGlsLWlzXCIpKTtmdW5jdGlvbiBzKGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ci50cmFuc2Zvcm1pbmc9ITE7dmFyIG49ci53cml0ZWNiO2lmKCFuKXJldHVybiB0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1wiKSk7ci53cml0ZWNodW5rPW51bGwsci53cml0ZWNiPW51bGwsbnVsbCE9dCYmdGhpcy5wdXNoKHQpLG4oZSk7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtpLnJlYWRpbmc9ITEsKGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gbyhlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBvKSlyZXR1cm4gbmV3IG8oZSk7bi5jYWxsKHRoaXMsZSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOnMuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1lLnRyYW5zZm9ybSksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5mbHVzaCYmKHRoaXMuX2ZsdXNoPWUuZmx1c2gpKSx0aGlzLm9uKFwicHJlZmluaXNoXCIsYSl9ZnVuY3Rpb24gYSgpe3ZhciBlPXRoaXM7XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goKGZ1bmN0aW9uKHQscil7bChlLHQscil9KSk6bCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gbChlLHQscil7aWYodClyZXR1cm4gZS5lbWl0KFwiZXJyb3JcIix0KTtpZihudWxsIT1yJiZlLnB1c2gociksZS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwXCIpO2lmKGUuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nXCIpO3JldHVybiBlLnB1c2gobnVsbCl9aS5pbmhlcml0cz1lKFwiaW5oZXJpdHNcIiksaS5pbmhlcml0cyhvLG4pLG8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxuLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxlLHQpfSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt0aHJvdyBuZXcgRXJyb3IoXCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkXCIpfSxvLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKG4ud3JpdGVjYj1yLG4ud3JpdGVjaHVuaz1lLG4ud3JpdGVlbmNvZGluZz10LCFuLnRyYW5zZm9ybWluZyl7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTsobi5uZWVkVHJhbnNmb3JtfHxpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfX0sby5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PXQud3JpdGVjaHVuayYmdC53cml0ZWNiJiYhdC50cmFuc2Zvcm1pbmc/KHQudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybSh0LndyaXRlY2h1bmssdC53cml0ZWVuY29kaW5nLHQuYWZ0ZXJUcmFuc2Zvcm0pKTp0Lm5lZWRUcmFuc2Zvcm09ITB9LG8ucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztuLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsZSwoZnVuY3Rpb24oZSl7dChlKSxyLmVtaXQoXCJjbG9zZVwiKX0pKX19LHtcIi4vX3N0cmVhbV9kdXBsZXhcIjo1MDgsXCJjb3JlLXV0aWwtaXNcIjozODMsaW5oZXJpdHM6NDQwfV0sNTEyOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHIsbixpKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgcz1lKFwicHJvY2Vzcy1uZXh0aWNrLWFyZ3NcIik7ZnVuY3Rpb24gbyhlKXt2YXIgdD10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbihlLHQscil7dmFyIG49ZS5lbnRyeTtlLmVudHJ5PW51bGw7Zm9yKDtuOyl7dmFyIGk9bi5jYWxsYmFjazt0LnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9dC5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1lfSh0LGUpfX10LmV4cG9ydHM9eTt2YXIgYSxsPSFyLmJyb3dzZXImJltcInYwLjEwXCIsXCJ2MC45LlwiXS5pbmRleE9mKHIudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9pOnMubmV4dFRpY2s7eS5Xcml0YWJsZVN0YXRlPWc7dmFyIGM9T2JqZWN0LmNyZWF0ZShlKFwiY29yZS11dGlsLWlzXCIpKTtjLmluaGVyaXRzPWUoXCJpbmhlcml0c1wiKTt2YXIgdT17ZGVwcmVjYXRlOmUoXCJ1dGlsLWRlcHJlY2F0ZVwiKX0saD1lKFwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbVwiKSxmPWUoXCJzYWZlLWJ1ZmZlclwiKS5CdWZmZXIsZD0odm9pZCAwIT09bj9uOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgcCxtPWUoXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveVwiKTtmdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIGcodCxyKXthPWF8fGUoXCIuL19zdHJlYW1fZHVwbGV4XCIpLHQ9dHx8e307dmFyIG49ciBpbnN0YW5jZW9mIGE7dGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLG4mJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQud3JpdGFibGVPYmplY3RNb2RlKTt2YXIgaT10LmhpZ2hXYXRlck1hcmssYz10LndyaXRhYmxlSGlnaFdhdGVyTWFyayx1PXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9aXx8MD09PWk/aTpuJiYoY3x8MD09PWMpP2M6dSx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBoPSExPT09dC5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlU3RyaW5ncz0haCx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5sZW5ndGg9MCx0aGlzLndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXt2YXIgcj1lLl93cml0YWJsZVN0YXRlLG49ci5zeW5jLGk9ci53cml0ZWNiO2lmKGZ1bmN0aW9uKGUpe2Uud3JpdGluZz0hMSxlLndyaXRlY2I9bnVsbCxlLmxlbmd0aC09ZS53cml0ZWxlbixlLndyaXRlbGVuPTB9KHIpLHQpIWZ1bmN0aW9uKGUsdCxyLG4saSl7LS10LnBlbmRpbmdjYixyPyhzLm5leHRUaWNrKGksbikscy5uZXh0VGljayhTLGUsdCksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5lbWl0KFwiZXJyb3JcIixuKSk6KGkobiksZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsZS5lbWl0KFwiZXJyb3JcIixuKSxTKGUsdCkpfShlLHIsbix0LGkpO2Vsc2V7dmFyIG89eChyKTtvfHxyLmNvcmtlZHx8ci5idWZmZXJQcm9jZXNzaW5nfHwhci5idWZmZXJlZFJlcXVlc3R8fF8oZSxyKSxuP2wodyxlLHIsbyxpKTp3KGUscixvLGkpfX0ocixlKX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgbyh0aGlzKX1mdW5jdGlvbiB5KHQpe2lmKGE9YXx8ZShcIi4vX3N0cmVhbV9kdXBsZXhcIiksIShwLmNhbGwoeSx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgeSh0KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBnKHQsdGhpcyksdGhpcy53cml0YWJsZT0hMCx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC53cml0ZSYmKHRoaXMuX3dyaXRlPXQud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGV2JiYodGhpcy5fd3JpdGV2PXQud3JpdGV2KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXQuZGVzdHJveSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maW5hbCYmKHRoaXMuX2ZpbmFsPXQuZmluYWwpKSxoLmNhbGwodGhpcyl9ZnVuY3Rpb24gdihlLHQscixuLGkscyxvKXt0LndyaXRlbGVuPW4sdC53cml0ZWNiPW8sdC53cml0aW5nPSEwLHQuc3luYz0hMCxyP2UuX3dyaXRldihpLHQub253cml0ZSk6ZS5fd3JpdGUoaSxzLHQub253cml0ZSksdC5zeW5jPSExfWZ1bmN0aW9uIHcoZSx0LHIsbil7cnx8ZnVuY3Rpb24oZSx0KXswPT09dC5sZW5ndGgmJnQubmVlZERyYWluJiYodC5uZWVkRHJhaW49ITEsZS5lbWl0KFwiZHJhaW5cIikpfShlLHQpLHQucGVuZGluZ2NiLS0sbigpLFMoZSx0KX1mdW5jdGlvbiBfKGUsdCl7dC5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPXQuYnVmZmVyZWRSZXF1ZXN0O2lmKGUuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgbj10LmJ1ZmZlcmVkUmVxdWVzdENvdW50LGk9bmV3IEFycmF5KG4pLHM9dC5jb3JrZWRSZXF1ZXN0c0ZyZWU7cy5lbnRyeT1yO2Zvcih2YXIgYT0wLGw9ITA7cjspaVthXT1yLHIuaXNCdWZ8fChsPSExKSxyPXIubmV4dCxhKz0xO2kuYWxsQnVmZmVycz1sLHYoZSx0LCEwLHQubGVuZ3RoLGksXCJcIixzLmZpbmlzaCksdC5wZW5kaW5nY2IrKyx0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxzLm5leHQ/KHQuY29ya2VkUmVxdWVzdHNGcmVlPXMubmV4dCxzLm5leHQ9bnVsbCk6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IG8odCksdC5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtyOyl7dmFyIGM9ci5jaHVuayx1PXIuZW5jb2RpbmcsaD1yLmNhbGxiYWNrO2lmKHYoZSx0LCExLHQub2JqZWN0TW9kZT8xOmMubGVuZ3RoLGMsdSxoKSxyPXIubmV4dCx0LmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdC53cml0aW5nKWJyZWFrfW51bGw9PT1yJiYodC5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfXQuYnVmZmVyZWRSZXF1ZXN0PXIsdC5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIGUuZW5kaW5nJiYwPT09ZS5sZW5ndGgmJm51bGw9PT1lLmJ1ZmZlcmVkUmVxdWVzdCYmIWUuZmluaXNoZWQmJiFlLndyaXRpbmd9ZnVuY3Rpb24gayhlLHQpe2UuX2ZpbmFsKChmdW5jdGlvbihyKXt0LnBlbmRpbmdjYi0tLHImJmUuZW1pdChcImVycm9yXCIsciksdC5wcmVmaW5pc2hlZD0hMCxlLmVtaXQoXCJwcmVmaW5pc2hcIiksUyhlLHQpfSkpfWZ1bmN0aW9uIFMoZSx0KXt2YXIgcj14KHQpO3JldHVybiByJiYoIWZ1bmN0aW9uKGUsdCl7dC5wcmVmaW5pc2hlZHx8dC5maW5hbENhbGxlZHx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuX2ZpbmFsPyh0LnBlbmRpbmdjYisrLHQuZmluYWxDYWxsZWQ9ITAscy5uZXh0VGljayhrLGUsdCkpOih0LnByZWZpbmlzaGVkPSEwLGUuZW1pdChcInByZWZpbmlzaFwiKSkpfShlLHQpLDA9PT10LnBlbmRpbmdjYiYmKHQuZmluaXNoZWQ9ITAsZS5lbWl0KFwiZmluaXNoXCIpKSkscn1jLmluaGVyaXRzKHksaCksZy5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LHQ9W107ZTspdC5wdXNoKGUpLGU9ZS5uZXh0O3JldHVybiB0fSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZy5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OnUuZGVwcmVjYXRlKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSksXCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLlwiLFwiREVQMDAwM1wiKX0pfWNhdGNoKGUpe319KCksXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhwPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISFwLmNhbGwodGhpcyxlKXx8dGhpcz09PXkmJihlJiZlLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgZyl9fSkpOnA9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzfSx5LnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlXCIpKX0seS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGk9dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExLGE9IWkub2JqZWN0TW9kZSYmKG49ZSxmLmlzQnVmZmVyKG4pfHxuIGluc3RhbmNlb2YgZCk7cmV0dXJuIGEmJiFmLmlzQnVmZmVyKGUpJiYoZT1mdW5jdGlvbihlKXtyZXR1cm4gZi5mcm9tKGUpfShlKSksXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHI9dCx0PW51bGwpLGE/dD1cImJ1ZmZlclwiOnR8fCh0PWkuZGVmYXVsdEVuY29kaW5nKSxcImZ1bmN0aW9uXCIhPXR5cGVvZiByJiYocj1iKSxpLmVuZGVkP2Z1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IEVycm9yKFwid3JpdGUgYWZ0ZXIgZW5kXCIpO2UuZW1pdChcImVycm9yXCIscikscy5uZXh0VGljayh0LHIpfSh0aGlzLHIpOihhfHxmdW5jdGlvbihlLHQscixuKXt2YXIgaT0hMCxvPSExO3JldHVybiBudWxsPT09cj9vPW5ldyBUeXBlRXJyb3IoXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiKTpcInN0cmluZ1wiPT10eXBlb2Ygcnx8dm9pZCAwPT09cnx8dC5vYmplY3RNb2RlfHwobz1uZXcgVHlwZUVycm9yKFwiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVua1wiKSksbyYmKGUuZW1pdChcImVycm9yXCIsbykscy5uZXh0VGljayhuLG8pLGk9ITEpLGl9KHRoaXMsaSxlLHIpKSYmKGkucGVuZGluZ2NiKyssbz1mdW5jdGlvbihlLHQscixuLGkscyl7aWYoIXIpe3ZhciBvPWZ1bmN0aW9uKGUsdCxyKXtlLm9iamVjdE1vZGV8fCExPT09ZS5kZWNvZGVTdHJpbmdzfHxcInN0cmluZ1wiIT10eXBlb2YgdHx8KHQ9Zi5mcm9tKHQscikpO3JldHVybiB0fSh0LG4saSk7biE9PW8mJihyPSEwLGk9XCJidWZmZXJcIixuPW8pfXZhciBhPXQub2JqZWN0TW9kZT8xOm4ubGVuZ3RoO3QubGVuZ3RoKz1hO3ZhciBsPXQubGVuZ3RoPHQuaGlnaFdhdGVyTWFyaztsfHwodC5uZWVkRHJhaW49ITApO2lmKHQud3JpdGluZ3x8dC5jb3JrZWQpe3ZhciBjPXQubGFzdEJ1ZmZlcmVkUmVxdWVzdDt0Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOm4sZW5jb2Rpbmc6aSxpc0J1ZjpyLGNhbGxiYWNrOnMsbmV4dDpudWxsfSxjP2MubmV4dD10Lmxhc3RCdWZmZXJlZFJlcXVlc3Q6dC5idWZmZXJlZFJlcXVlc3Q9dC5sYXN0QnVmZmVyZWRSZXF1ZXN0LHQuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSB2KGUsdCwhMSxhLG4saSxzKTtyZXR1cm4gbH0odGhpcyxpLGEsZSx0LHIpKSxvfSx5LnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30seS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtlLmNvcmtlZCYmKGUuY29ya2VkLS0sZS53cml0aW5nfHxlLmNvcmtlZHx8ZS5idWZmZXJQcm9jZXNzaW5nfHwhZS5idWZmZXJlZFJlcXVlc3R8fF8odGhpcyxlKSl9LHkucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKSwhKFtcImhleFwiLFwidXRmOFwiLFwidXRmLThcIixcImFzY2lpXCIsXCJiaW5hcnlcIixcImJhc2U2NFwiLFwidWNzMlwiLFwidWNzLTJcIixcInV0ZjE2bGVcIixcInV0Zi0xNmxlXCIsXCJyYXdcIl0uaW5kZXhPZigoZStcIlwiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz1lLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LnByb3RvdHlwZSxcIndyaXRhYmxlSGlnaFdhdGVyTWFya1wiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSkseS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGUsdCxyKXtyKG5ldyBFcnJvcihcIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZFwiKSl9LHkucHJvdG90eXBlLl93cml0ZXY9bnVsbCx5LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7XCJmdW5jdGlvblwiPT10eXBlb2YgZT8ocj1lLGU9bnVsbCx0PW51bGwpOlwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJihyPXQsdD1udWxsKSxudWxsIT1lJiZ0aGlzLndyaXRlKGUsdCksbi5jb3JrZWQmJihuLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG4uZW5kaW5nfHxmdW5jdGlvbihlLHQscil7dC5lbmRpbmc9ITAsUyhlLHQpLHImJih0LmZpbmlzaGVkP3MubmV4dFRpY2socik6ZS5vbmNlKFwiZmluaXNoXCIscikpO3QuZW5kZWQ9ITAsZS53cml0YWJsZT0hMX0odGhpcyxuLHIpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeS5wcm90b3R5cGUsXCJkZXN0cm95ZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWUpfX0pLHkucHJvdG90eXBlLmRlc3Ryb3k9bS5kZXN0cm95LHkucHJvdG90eXBlLl91bmRlc3Ryb3k9bS51bmRlc3Ryb3kseS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oZSx0KXt0aGlzLmVuZCgpLHQoZSl9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxlKFwidGltZXJzXCIpLnNldEltbWVkaWF0ZSl9LHtcIi4vX3N0cmVhbV9kdXBsZXhcIjo1MDgsXCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveVwiOjUxNCxcIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW1cIjo1MTUsX3Byb2Nlc3M6NDY3LFwiY29yZS11dGlsLWlzXCI6MzgzLGluaGVyaXRzOjQ0MCxcInByb2Nlc3MtbmV4dGljay1hcmdzXCI6NDY2LFwic2FmZS1idWZmZXJcIjo1MjAsdGltZXJzOjUyMyxcInV0aWwtZGVwcmVjYXRlXCI6NTI0fV0sNTEzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcInNhZmUtYnVmZmVyXCIpLkJ1ZmZlcixpPWUoXCJ1dGlsXCIpO3QuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfSh0aGlzLGUpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIGUucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9e2RhdGE6ZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dDp0aGlzLmhlYWQ9dCx0aGlzLnRhaWw9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKGUpe3ZhciB0PXtkYXRhOmUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10KSx0aGlzLmhlYWQ9dCwrK3RoaXMubGVuZ3RofSxlLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZX19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LGUucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciB0PXRoaXMuaGVhZCxyPVwiXCIrdC5kYXRhO3Q9dC5uZXh0OylyKz1lK3QuZGF0YTtyZXR1cm4gcn0sZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKGUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gbi5hbGxvYygwKTtmb3IodmFyIHQscixpLHM9bi5hbGxvY1Vuc2FmZShlPj4+MCksbz10aGlzLmhlYWQsYT0wO287KXQ9by5kYXRhLHI9cyxpPWEsdC5jb3B5KHIsaSksYSs9by5kYXRhLmxlbmd0aCxvPW8ubmV4dDtyZXR1cm4gc30sZX0oKSxpJiZpLmluc3BlY3QmJmkuaW5zcGVjdC5jdXN0b20mJih0LmV4cG9ydHMucHJvdG90eXBlW2kuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIGU9aS5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lK1wiIFwiK2V9KX0se1wic2FmZS1idWZmZXJcIjo1MjAsdXRpbDoxODh9XSw1MTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwicHJvY2Vzcy1uZXh0aWNrLWFyZ3NcIik7ZnVuY3Rpb24gaShlLHQpe2UuZW1pdChcImVycm9yXCIsdCl9dC5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcyxzPXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkLG89dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ7cmV0dXJuIHN8fG8/KHQ/dChlKTplJiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG4ubmV4dFRpY2soaSx0aGlzLGUpKTpuLm5leHRUaWNrKGksdGhpcyxlKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KGV8fG51bGwsKGZ1bmN0aW9uKGUpeyF0JiZlP3IuX3dyaXRhYmxlU3RhdGU/ci5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChyLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxuLm5leHRUaWNrKGkscixlKSk6bi5uZXh0VGljayhpLHIsZSk6dCYmdChlKX0pKSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LHtcInByb2Nlc3MtbmV4dGljay1hcmdzXCI6NDY2fV0sNTE1OltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzQ5MF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjQ5MCxldmVudHM6NDIyfV0sNTE2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWUoXCIuL3JlYWRhYmxlXCIpLlBhc3NUaHJvdWdofSx7XCIuL3JlYWRhYmxlXCI6NTE3fV0sNTE3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7KHI9dC5leHBvcnRzPWUoXCIuL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzXCIpKS5TdHJlYW09cixyLlJlYWRhYmxlPXIsci5Xcml0YWJsZT1lKFwiLi9saWIvX3N0cmVhbV93cml0YWJsZS5qc1wiKSxyLkR1cGxleD1lKFwiLi9saWIvX3N0cmVhbV9kdXBsZXguanNcIiksci5UcmFuc2Zvcm09ZShcIi4vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzXCIpLHIuUGFzc1Rocm91Z2g9ZShcIi4vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanNcIil9LHtcIi4vbGliL19zdHJlYW1fZHVwbGV4LmpzXCI6NTA4LFwiLi9saWIvX3N0cmVhbV9wYXNzdGhyb3VnaC5qc1wiOjUwOSxcIi4vbGliL19zdHJlYW1fcmVhZGFibGUuanNcIjo1MTAsXCIuL2xpYi9fc3RyZWFtX3RyYW5zZm9ybS5qc1wiOjUxMSxcIi4vbGliL19zdHJlYW1fd3JpdGFibGUuanNcIjo1MTJ9XSw1MTg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZShcIi4vcmVhZGFibGVcIikuVHJhbnNmb3JtfSx7XCIuL3JlYWRhYmxlXCI6NTE3fV0sNTE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWUoXCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzXCIpfSx7XCIuL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzXCI6NTEyfV0sNTIwOltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzIxN11bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7YnVmZmVyOjIyMCxkdXA6MjE3fV0sNTIxOltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxOCxcInNhZmUtYnVmZmVyXCI6NTIwfV0sNTIyOltmdW5jdGlvbihlLHQscil7YXJndW1lbnRzWzRdWzIxOF1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjIxOCxcInNhZmUtYnVmZmVyXCI6NDk0fV0sNTIzOltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQsbil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcInByb2Nlc3MvYnJvd3Nlci5qc1wiKS5uZXh0VGljayxzPUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSxvPUFycmF5LnByb3RvdHlwZS5zbGljZSxhPXt9LGw9MDtmdW5jdGlvbiBjKGUsdCl7dGhpcy5faWQ9ZSx0aGlzLl9jbGVhckZuPXR9ci5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjKHMuY2FsbChzZXRUaW1lb3V0LHdpbmRvdyxhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LHIuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGMocy5jYWxsKHNldEludGVydmFsLHdpbmRvdyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSxyLmNsZWFyVGltZW91dD1yLmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfSxjLnByb3RvdHlwZS51bnJlZj1jLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LGMucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdyx0aGlzLl9pZCl9LHIuZW5yb2xsPWZ1bmN0aW9uKGUsdCl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PXR9LHIudW5lbnJvbGw9ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUuX2lkbGVUaW1lb3V0SWQpLGUuX2lkbGVUaW1lb3V0PS0xfSxyLl91bnJlZkFjdGl2ZT1yLmFjdGl2ZT1mdW5jdGlvbihlKXtjbGVhclRpbWVvdXQoZS5faWRsZVRpbWVvdXRJZCk7dmFyIHQ9ZS5faWRsZVRpbWVvdXQ7dD49MCYmKGUuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLl9vblRpbWVvdXQmJmUuX29uVGltZW91dCgpfSksdCkpfSxyLnNldEltbWVkaWF0ZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9bCsrLG49IShhcmd1bWVudHMubGVuZ3RoPDIpJiZvLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBhW3RdPSEwLGkoKGZ1bmN0aW9uKCl7YVt0XSYmKG4/ZS5hcHBseShudWxsLG4pOmUuY2FsbChudWxsKSxyLmNsZWFySW1tZWRpYXRlKHQpKX0pKSx0fSxyLmNsZWFySW1tZWRpYXRlPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpmdW5jdGlvbihlKXtkZWxldGUgYVtlXX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLGUoXCJ0aW1lcnNcIikuc2V0SW1tZWRpYXRlLGUoXCJ0aW1lcnNcIikuY2xlYXJJbW1lZGlhdGUpfSx7XCJwcm9jZXNzL2Jyb3dzZXIuanNcIjo0NjcsdGltZXJzOjUyM31dLDUyNDpbZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlKXsoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3RyeXtpZighZS5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITF9dmFyIHI9ZS5sb2NhbFN0b3JhZ2VbdF07cmV0dXJuIG51bGwhPXImJlwidHJ1ZVwiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYocihcIm5vRGVwcmVjYXRpb25cIikpcmV0dXJuIGU7dmFyIG49ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIW4pe2lmKHIoXCJ0aHJvd0RlcHJlY2F0aW9uXCIpKXRocm93IG5ldyBFcnJvcih0KTtyKFwidHJhY2VEZXByZWNhdGlvblwiKT9jb25zb2xlLnRyYWNlKHQpOmNvbnNvbGUud2Fybih0KSxuPSEwfXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDUyNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5zdXBlcl89dCxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7ZS5zdXBlcl89dDt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHIsZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZX19LHt9XSw1MjY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5yZWFkVUludDh9fSx7fV0sNTI3OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQsbil7KGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbihlKXtpZighZyhlKSl7Zm9yKHZhciB0PVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQucHVzaChhKGFyZ3VtZW50c1tyXSkpO3JldHVybiB0LmpvaW4oXCIgXCIpfXI9MTtmb3IodmFyIG49YXJndW1lbnRzLHM9bi5sZW5ndGgsbz1TdHJpbmcoZSkucmVwbGFjZShpLChmdW5jdGlvbihlKXtpZihcIiUlXCI9PT1lKXJldHVyblwiJVwiO2lmKHI+PXMpcmV0dXJuIGU7c3dpdGNoKGUpe2Nhc2VcIiVzXCI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2VcIiVkXCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2VcIiVqXCI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKGUpe3JldHVyblwiW0NpcmN1bGFyXVwifWRlZmF1bHQ6cmV0dXJuIGV9fSkpLGw9bltyXTtyPHM7bD1uWysrcl0pbShsKXx8IXcobCk/bys9XCIgXCIrbDpvKz1cIiBcIithKGwpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbihlLGkpe2lmKHkobi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUoZSxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09dC5ub0RlcHJlY2F0aW9uKXJldHVybiBlO3ZhciBzPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFzKXtpZih0LnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO3QudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSkscz0hMH1yZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgcyxvPXt9O2Z1bmN0aW9uIGEoZSx0KXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmN9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLHAodCk/bi5zaG93SGlkZGVuPXQ6dCYmci5fZXh0ZW5kKG4sdCkseShuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx5KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx5KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx5KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWwpLHUobixlLG4uZGVwdGgpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgcj1hLnN0eWxlc1t0XTtyZXR1cm4gcj9cIlxceDFiW1wiK2EuY29sb3JzW3JdWzBdK1wibVwiK2UrXCJcXHgxYltcIithLmNvbG9yc1tyXVsxXStcIm1cIjplfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gZX1mdW5jdGlvbiB1KGUsdCxuKXtpZihlLmN1c3RvbUluc3BlY3QmJnQmJmsodC5pbnNwZWN0KSYmdC5pbnNwZWN0IT09ci5pbnNwZWN0JiYoIXQuY29uc3RydWN0b3J8fHQuY29uc3RydWN0b3IucHJvdG90eXBlIT09dCkpe3ZhciBpPXQuaW5zcGVjdChuLGUpO3JldHVybiBnKGkpfHwoaT11KGUsaSxuKSksaX12YXIgcz1mdW5jdGlvbihlLHQpe2lmKHkodCkpcmV0dXJuIGUuc3R5bGl6ZShcInVuZGVmaW5lZFwiLFwidW5kZWZpbmVkXCIpO2lmKGcodCkpe3ZhciByPVwiJ1wiK0pTT04uc3RyaW5naWZ5KHQpLnJlcGxhY2UoL15cInxcIiQvZyxcIlwiKS5yZXBsYWNlKC8nL2csXCJcXFxcJ1wiKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKStcIidcIjtyZXR1cm4gZS5zdHlsaXplKHIsXCJzdHJpbmdcIil9aWYoYih0KSlyZXR1cm4gZS5zdHlsaXplKFwiXCIrdCxcIm51bWJlclwiKTtpZihwKHQpKXJldHVybiBlLnN0eWxpemUoXCJcIit0LFwiYm9vbGVhblwiKTtpZihtKHQpKXJldHVybiBlLnN0eWxpemUoXCJudWxsXCIsXCJudWxsXCIpfShlLHQpO2lmKHMpcmV0dXJuIHM7dmFyIG89T2JqZWN0LmtleXModCksYT1mdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3RbZV09ITB9KSksdH0obyk7aWYoZS5zaG93SGlkZGVuJiYobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSkseCh0KSYmKG8uaW5kZXhPZihcIm1lc3NhZ2VcIik+PTB8fG8uaW5kZXhPZihcImRlc2NyaXB0aW9uXCIpPj0wKSlyZXR1cm4gaCh0KTtpZigwPT09by5sZW5ndGgpe2lmKGsodCkpe3ZhciBsPXQubmFtZT9cIjogXCIrdC5uYW1lOlwiXCI7cmV0dXJuIGUuc3R5bGl6ZShcIltGdW5jdGlvblwiK2wrXCJdXCIsXCJzcGVjaWFsXCIpfWlmKHYodCkpcmV0dXJuIGUuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksXCJyZWdleHBcIik7aWYoXyh0KSlyZXR1cm4gZS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCksXCJkYXRlXCIpO2lmKHgodCkpcmV0dXJuIGgodCl9dmFyIGMsdz1cIlwiLFM9ITEsTT1bXCJ7XCIsXCJ9XCJdOyhkKHQpJiYoUz0hMCxNPVtcIltcIixcIl1cIl0pLGsodCkpJiYodz1cIiBbRnVuY3Rpb25cIisodC5uYW1lP1wiOiBcIit0Lm5hbWU6XCJcIikrXCJdXCIpO3JldHVybiB2KHQpJiYodz1cIiBcIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpLF8odCkmJih3PVwiIFwiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwodCkpLHgodCkmJih3PVwiIFwiK2godCkpLDAhPT1vLmxlbmd0aHx8UyYmMCE9dC5sZW5ndGg/bjwwP3YodCk/ZS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSxcInJlZ2V4cFwiKTplLnN0eWxpemUoXCJbT2JqZWN0XVwiLFwic3BlY2lhbFwiKTooZS5zZWVuLnB1c2godCksYz1TP2Z1bmN0aW9uKGUsdCxyLG4saSl7Zm9yKHZhciBzPVtdLG89MCxhPXQubGVuZ3RoO288YTsrK28pRSh0LFN0cmluZyhvKSk/cy5wdXNoKGYoZSx0LHIsbixTdHJpbmcobyksITApKTpzLnB1c2goXCJcIik7cmV0dXJuIGkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxcZCskLyl8fHMucHVzaChmKGUsdCxyLG4saSwhMCkpfSkpLHN9KGUsdCxuLGEsbyk6by5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiBmKGUsdCxuLGEscixTKX0pKSxlLnNlZW4ucG9wKCksZnVuY3Rpb24oZSx0LHIpe2lmKGUucmVkdWNlKChmdW5jdGlvbihlLHQpe3JldHVybiB0LmluZGV4T2YoXCJcXG5cIik+PTAmJjAsZSt0LnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLFwiXCIpLmxlbmd0aCsxfSksMCk+NjApcmV0dXJuIHJbMF0rKFwiXCI9PT10P1wiXCI6dCtcIlxcbiBcIikrXCIgXCIrZS5qb2luKFwiLFxcbiAgXCIpK1wiIFwiK3JbMV07cmV0dXJuIHJbMF0rdCtcIiBcIitlLmpvaW4oXCIsIFwiKStcIiBcIityWzFdfShjLHcsTSkpOk1bMF0rdytNWzFdfWZ1bmN0aW9uIGgoZSl7cmV0dXJuXCJbXCIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkrXCJdXCJ9ZnVuY3Rpb24gZihlLHQscixuLGkscyl7dmFyIG8sYSxsO2lmKChsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKXx8e3ZhbHVlOnRbaV19KS5nZXQ/YT1sLnNldD9lLnN0eWxpemUoXCJbR2V0dGVyL1NldHRlcl1cIixcInNwZWNpYWxcIik6ZS5zdHlsaXplKFwiW0dldHRlcl1cIixcInNwZWNpYWxcIik6bC5zZXQmJihhPWUuc3R5bGl6ZShcIltTZXR0ZXJdXCIsXCJzcGVjaWFsXCIpKSxFKG4saSl8fChvPVwiW1wiK2krXCJdXCIpLGF8fChlLnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwPyhhPW0ocik/dShlLGwudmFsdWUsbnVsbCk6dShlLGwudmFsdWUsci0xKSkuaW5kZXhPZihcIlxcblwiKT4tMSYmKGE9cz9hLnNwbGl0KFwiXFxuXCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCIgIFwiK2V9KSkuam9pbihcIlxcblwiKS5zdWJzdHIoMik6XCJcXG5cIithLnNwbGl0KFwiXFxuXCIpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuXCIgICBcIitlfSkpLmpvaW4oXCJcXG5cIikpOmE9ZS5zdHlsaXplKFwiW0NpcmN1bGFyXVwiLFwic3BlY2lhbFwiKSkseShvKSl7aWYocyYmaS5tYXRjaCgvXlxcZCskLykpcmV0dXJuIGE7KG89SlNPTi5zdHJpbmdpZnkoXCJcIitpKSkubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pPyhvPW8uc3Vic3RyKDEsby5sZW5ndGgtMiksbz1lLnN0eWxpemUobyxcIm5hbWVcIikpOihvPW8ucmVwbGFjZSgvJy9nLFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csXCInXCIpLG89ZS5zdHlsaXplKG8sXCJzdHJpbmdcIikpfXJldHVybiBvK1wiOiBcIithfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl9ZnVuY3Rpb24gcChlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGV9ZnVuY3Rpb24gbShlKXtyZXR1cm4gbnVsbD09PWV9ZnVuY3Rpb24gYihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZX1mdW5jdGlvbiBnKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlfWZ1bmN0aW9uIHkoZSl7cmV0dXJuIHZvaWQgMD09PWV9ZnVuY3Rpb24gdihlKXtyZXR1cm4gdyhlKSYmXCJbb2JqZWN0IFJlZ0V4cF1cIj09PVMoZSl9ZnVuY3Rpb24gdyhlKXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgZSYmbnVsbCE9PWV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdyhlKSYmXCJbb2JqZWN0IERhdGVdXCI9PT1TKGUpfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIHcoZSkmJihcIltvYmplY3QgRXJyb3JdXCI9PT1TKGUpfHxlIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZX1mdW5jdGlvbiBTKGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4gZTwxMD9cIjBcIitlLnRvU3RyaW5nKDEwKTplLnRvU3RyaW5nKDEwKX1yLmRlYnVnbG9nPWZ1bmN0aW9uKGUpe2lmKHkocykmJihzPXQuZW52Lk5PREVfREVCVUd8fFwiXCIpLGU9ZS50b1VwcGVyQ2FzZSgpLCFvW2VdKWlmKG5ldyBSZWdFeHAoXCJcXFxcYlwiK2UrXCJcXFxcYlwiLFwiaVwiKS50ZXN0KHMpKXt2YXIgbj10LnBpZDtvW2VdPWZ1bmN0aW9uKCl7dmFyIHQ9ci5mb3JtYXQuYXBwbHkocixhcmd1bWVudHMpO2NvbnNvbGUuZXJyb3IoXCIlcyAlZDogJXNcIixlLG4sdCl9fWVsc2Ugb1tlXT1mdW5jdGlvbigpe307cmV0dXJuIG9bZV19LHIuaW5zcGVjdD1hLGEuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxhLnN0eWxlcz17c3BlY2lhbDpcImN5YW5cIixudW1iZXI6XCJ5ZWxsb3dcIixib29sZWFuOlwieWVsbG93XCIsdW5kZWZpbmVkOlwiZ3JleVwiLG51bGw6XCJib2xkXCIsc3RyaW5nOlwiZ3JlZW5cIixkYXRlOlwibWFnZW50YVwiLHJlZ2V4cDpcInJlZFwifSxyLmlzQXJyYXk9ZCxyLmlzQm9vbGVhbj1wLHIuaXNOdWxsPW0sci5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX0sci5pc051bWJlcj1iLHIuaXNTdHJpbmc9ZyxyLmlzU3ltYm9sPWZ1bmN0aW9uKGUpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiBlfSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD12LHIuaXNPYmplY3Q9dyxyLmlzRGF0ZT1fLHIuaXNFcnJvcj14LHIuaXNGdW5jdGlvbj1rLHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfHxcImJvb2xlYW5cIj09dHlwZW9mIGV8fFwibnVtYmVyXCI9PXR5cGVvZiBlfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8XCJzeW1ib2xcIj09dHlwZW9mIGV8fHZvaWQgMD09PWV9LHIuaXNCdWZmZXI9ZShcIi4vc3VwcG9ydC9pc0J1ZmZlclwiKTt2YXIgQz1bXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdO2Z1bmN0aW9uIFQoKXt2YXIgZT1uZXcgRGF0ZSx0PVtNKGUuZ2V0SG91cnMoKSksTShlLmdldE1pbnV0ZXMoKSksTShlLmdldFNlY29uZHMoKSldLmpvaW4oXCI6XCIpO3JldHVybltlLmdldERhdGUoKSxDW2UuZ2V0TW9udGgoKV0sdF0uam9pbihcIiBcIil9ZnVuY3Rpb24gRShlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1yLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKFwiJXMgLSAlc1wiLFQoKSxyLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cykpfSxyLmluaGVyaXRzPWUoXCJpbmhlcml0c1wiKSxyLl9leHRlbmQ9ZnVuY3Rpb24oZSx0KXtpZighdHx8IXcodCkpcmV0dXJuIGU7Zm9yKHZhciByPU9iamVjdC5rZXlzKHQpLG49ci5sZW5ndGg7bi0tOyllW3Jbbl1dPXRbcltuXV07cmV0dXJuIGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyxlKFwiX3Byb2Nlc3NcIiksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHtcIi4vc3VwcG9ydC9pc0J1ZmZlclwiOjUyNixfcHJvY2Vzczo0NjcsaW5oZXJpdHM6NTI1fV0sNTI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ2MVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ2M1wiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ2NFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ2NVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJOSUxcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwidmVyc2lvblwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJ2YWxpZGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBjLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJzdHJpbmdpZnlcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdS5kZWZhdWx0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwicGFyc2VcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWZhdWx0fX0pO3ZhciBuPWYoZShcIi4vdjEuanNcIikpLGk9ZihlKFwiLi92My5qc1wiKSkscz1mKGUoXCIuL3Y0LmpzXCIpKSxvPWYoZShcIi4vdjUuanNcIikpLGE9ZihlKFwiLi9uaWwuanNcIikpLGw9ZihlKFwiLi92ZXJzaW9uLmpzXCIpKSxjPWYoZShcIi4vdmFsaWRhdGUuanNcIikpLHU9ZihlKFwiLi9zdHJpbmdpZnkuanNcIikpLGg9ZihlKFwiLi9wYXJzZS5qc1wiKSk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19fSx7XCIuL25pbC5qc1wiOjUzMCxcIi4vcGFyc2UuanNcIjo1MzEsXCIuL3N0cmluZ2lmeS5qc1wiOjUzNSxcIi4vdjEuanNcIjo1MzYsXCIuL3YzLmpzXCI6NTM3LFwiLi92NC5qc1wiOjUzOSxcIi4vdjUuanNcIjo1NDAsXCIuL3ZhbGlkYXRlLmpzXCI6NTQxLFwiLi92ZXJzaW9uLmpzXCI6NTQyfV0sNTI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gMTQrKGUrNjQ+Pj45PDw0KSsxfWZ1bmN0aW9uIGkoZSx0KXtjb25zdCByPSg2NTUzNSZlKSsoNjU1MzUmdCk7cmV0dXJuKGU+PjE2KSsodD4+MTYpKyhyPj4xNik8PDE2fDY1NTM1JnJ9ZnVuY3Rpb24gcyhlLHQscixuLHMsbyl7cmV0dXJuIGkoKGE9aShpKHQsZSksaShuLG8pKSk8PChsPXMpfGE+Pj4zMi1sLHIpO3ZhciBhLGx9ZnVuY3Rpb24gbyhlLHQscixuLGksbyxhKXtyZXR1cm4gcyh0JnJ8fnQmbixlLHQsaSxvLGEpfWZ1bmN0aW9uIGEoZSx0LHIsbixpLG8sYSl7cmV0dXJuIHModCZufHImfm4sZSx0LGksbyxhKX1mdW5jdGlvbiBsKGUsdCxyLG4saSxvLGEpe3JldHVybiBzKHRecl5uLGUsdCxpLG8sYSl9ZnVuY3Rpb24gYyhlLHQscixuLGksbyxhKXtyZXR1cm4gcyhyXih0fH5uKSxlLHQsaSxvLGEpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuZGVmYXVsdD12b2lkIDA7dmFyIHU9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2NvbnN0IHQ9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKTtlPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHI9MDtyPHQubGVuZ3RoOysrcillW3JdPXQuY2hhckNvZGVBdChyKX1yZXR1cm4gZnVuY3Rpb24oZSl7Y29uc3QgdD1bXSxyPTMyKmUubGVuZ3RoO2ZvcihsZXQgbj0wO248cjtuKz04KXtjb25zdCByPWVbbj4+NV0+Pj5uJTMyJjI1NSxpPXBhcnNlSW50KFwiMDEyMzQ1Njc4OWFiY2RlZlwiLmNoYXJBdChyPj4+NCYxNSkrXCIwMTIzNDU2Nzg5YWJjZGVmXCIuY2hhckF0KDE1JnIpLDE2KTt0LnB1c2goaSl9cmV0dXJuIHR9KGZ1bmN0aW9uKGUsdCl7ZVt0Pj41XXw9MTI4PDx0JTMyLGVbbih0KS0xXT10O2xldCByPTE3MzI1ODQxOTMscz0tMjcxNzMzODc5LHU9LTE3MzI1ODQxOTQsaD0yNzE3MzM4Nzg7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kz0xNil7Y29uc3Qgbj1yLGY9cyxkPXUscD1oO3I9byhyLHMsdSxoLGVbdF0sNywtNjgwODc2OTM2KSxoPW8oaCxyLHMsdSxlW3QrMV0sMTIsLTM4OTU2NDU4NiksdT1vKHUsaCxyLHMsZVt0KzJdLDE3LDYwNjEwNTgxOSkscz1vKHMsdSxoLHIsZVt0KzNdLDIyLC0xMDQ0NTI1MzMwKSxyPW8ocixzLHUsaCxlW3QrNF0sNywtMTc2NDE4ODk3KSxoPW8oaCxyLHMsdSxlW3QrNV0sMTIsMTIwMDA4MDQyNiksdT1vKHUsaCxyLHMsZVt0KzZdLDE3LC0xNDczMjMxMzQxKSxzPW8ocyx1LGgscixlW3QrN10sMjIsLTQ1NzA1OTgzKSxyPW8ocixzLHUsaCxlW3QrOF0sNywxNzcwMDM1NDE2KSxoPW8oaCxyLHMsdSxlW3QrOV0sMTIsLTE5NTg0MTQ0MTcpLHU9byh1LGgscixzLGVbdCsxMF0sMTcsLTQyMDYzKSxzPW8ocyx1LGgscixlW3QrMTFdLDIyLC0xOTkwNDA0MTYyKSxyPW8ocixzLHUsaCxlW3QrMTJdLDcsMTgwNDYwMzY4MiksaD1vKGgscixzLHUsZVt0KzEzXSwxMiwtNDAzNDExMDEpLHU9byh1LGgscixzLGVbdCsxNF0sMTcsLTE1MDIwMDIyOTApLHM9byhzLHUsaCxyLGVbdCsxNV0sMjIsMTIzNjUzNTMyOSkscj1hKHIscyx1LGgsZVt0KzFdLDUsLTE2NTc5NjUxMCksaD1hKGgscixzLHUsZVt0KzZdLDksLTEwNjk1MDE2MzIpLHU9YSh1LGgscixzLGVbdCsxMV0sMTQsNjQzNzE3NzEzKSxzPWEocyx1LGgscixlW3RdLDIwLC0zNzM4OTczMDIpLHI9YShyLHMsdSxoLGVbdCs1XSw1LC03MDE1NTg2OTEpLGg9YShoLHIscyx1LGVbdCsxMF0sOSwzODAxNjA4MyksdT1hKHUsaCxyLHMsZVt0KzE1XSwxNCwtNjYwNDc4MzM1KSxzPWEocyx1LGgscixlW3QrNF0sMjAsLTQwNTUzNzg0OCkscj1hKHIscyx1LGgsZVt0KzldLDUsNTY4NDQ2NDM4KSxoPWEoaCxyLHMsdSxlW3QrMTRdLDksLTEwMTk4MDM2OTApLHU9YSh1LGgscixzLGVbdCszXSwxNCwtMTg3MzYzOTYxKSxzPWEocyx1LGgscixlW3QrOF0sMjAsMTE2MzUzMTUwMSkscj1hKHIscyx1LGgsZVt0KzEzXSw1LC0xNDQ0NjgxNDY3KSxoPWEoaCxyLHMsdSxlW3QrMl0sOSwtNTE0MDM3ODQpLHU9YSh1LGgscixzLGVbdCs3XSwxNCwxNzM1MzI4NDczKSxzPWEocyx1LGgscixlW3QrMTJdLDIwLC0xOTI2NjA3NzM0KSxyPWwocixzLHUsaCxlW3QrNV0sNCwtMzc4NTU4KSxoPWwoaCxyLHMsdSxlW3QrOF0sMTEsLTIwMjI1NzQ0NjMpLHU9bCh1LGgscixzLGVbdCsxMV0sMTYsMTgzOTAzMDU2Mikscz1sKHMsdSxoLHIsZVt0KzE0XSwyMywtMzUzMDk1NTYpLHI9bChyLHMsdSxoLGVbdCsxXSw0LC0xNTMwOTkyMDYwKSxoPWwoaCxyLHMsdSxlW3QrNF0sMTEsMTI3Mjg5MzM1MyksdT1sKHUsaCxyLHMsZVt0KzddLDE2LC0xNTU0OTc2MzIpLHM9bChzLHUsaCxyLGVbdCsxMF0sMjMsLTEwOTQ3MzA2NDApLHI9bChyLHMsdSxoLGVbdCsxM10sNCw2ODEyNzkxNzQpLGg9bChoLHIscyx1LGVbdF0sMTEsLTM1ODUzNzIyMiksdT1sKHUsaCxyLHMsZVt0KzNdLDE2LC03MjI1MjE5NzkpLHM9bChzLHUsaCxyLGVbdCs2XSwyMyw3NjAyOTE4OSkscj1sKHIscyx1LGgsZVt0KzldLDQsLTY0MDM2NDQ4NyksaD1sKGgscixzLHUsZVt0KzEyXSwxMSwtNDIxODE1ODM1KSx1PWwodSxoLHIscyxlW3QrMTVdLDE2LDUzMDc0MjUyMCkscz1sKHMsdSxoLHIsZVt0KzJdLDIzLC05OTUzMzg2NTEpLHI9YyhyLHMsdSxoLGVbdF0sNiwtMTk4NjMwODQ0KSxoPWMoaCxyLHMsdSxlW3QrN10sMTAsMTEyNjg5MTQxNSksdT1jKHUsaCxyLHMsZVt0KzE0XSwxNSwtMTQxNjM1NDkwNSkscz1jKHMsdSxoLHIsZVt0KzVdLDIxLC01NzQzNDA1NSkscj1jKHIscyx1LGgsZVt0KzEyXSw2LDE3MDA0ODU1NzEpLGg9YyhoLHIscyx1LGVbdCszXSwxMCwtMTg5NDk4NjYwNiksdT1jKHUsaCxyLHMsZVt0KzEwXSwxNSwtMTA1MTUyMykscz1jKHMsdSxoLHIsZVt0KzFdLDIxLC0yMDU0OTIyNzk5KSxyPWMocixzLHUsaCxlW3QrOF0sNiwxODczMzEzMzU5KSxoPWMoaCxyLHMsdSxlW3QrMTVdLDEwLC0zMDYxMTc0NCksdT1jKHUsaCxyLHMsZVt0KzZdLDE1LC0xNTYwMTk4MzgwKSxzPWMocyx1LGgscixlW3QrMTNdLDIxLDEzMDkxNTE2NDkpLHI9YyhyLHMsdSxoLGVbdCs0XSw2LC0xNDU1MjMwNzApLGg9YyhoLHIscyx1LGVbdCsxMV0sMTAsLTExMjAyMTAzNzkpLHU9Yyh1LGgscixzLGVbdCsyXSwxNSw3MTg3ODcyNTkpLHM9YyhzLHUsaCxyLGVbdCs5XSwyMSwtMzQzNDg1NTUxKSxyPWkocixuKSxzPWkocyxmKSx1PWkodSxkKSxoPWkoaCxwKX1yZXR1cm5bcixzLHUsaF19KGZ1bmN0aW9uKGUpe2lmKDA9PT1lLmxlbmd0aClyZXR1cm5bXTtjb25zdCB0PTgqZS5sZW5ndGgscj1uZXcgVWludDMyQXJyYXkobih0KSk7Zm9yKGxldCBuPTA7bjx0O24rPTgpcltuPj41XXw9KDI1NSZlW24vOF0pPDxuJTMyO3JldHVybiByfShlKSw4KmUubGVuZ3RoKSl9O3IuZGVmYXVsdD11fSx7fV0sNTMwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kZWZhdWx0PXZvaWQgMDtyLmRlZmF1bHQ9XCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIn0se31dLDUzMTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuZGVmYXVsdD12b2lkIDA7dmFyIG4saT0obj1lKFwiLi92YWxpZGF0ZS5qc1wiKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciBzPWZ1bmN0aW9uKGUpe2lmKCEoMCxpLmRlZmF1bHQpKGUpKXRocm93IFR5cGVFcnJvcihcIkludmFsaWQgVVVJRFwiKTtsZXQgdDtjb25zdCByPW5ldyBVaW50OEFycmF5KDE2KTtyZXR1cm4gclswXT0odD1wYXJzZUludChlLnNsaWNlKDAsOCksMTYpKT4+PjI0LHJbMV09dD4+PjE2JjI1NSxyWzJdPXQ+Pj44JjI1NSxyWzNdPTI1NSZ0LHJbNF09KHQ9cGFyc2VJbnQoZS5zbGljZSg5LDEzKSwxNikpPj4+OCxyWzVdPTI1NSZ0LHJbNl09KHQ9cGFyc2VJbnQoZS5zbGljZSgxNCwxOCksMTYpKT4+Pjgscls3XT0yNTUmdCxyWzhdPSh0PXBhcnNlSW50KGUuc2xpY2UoMTksMjMpLDE2KSk+Pj44LHJbOV09MjU1JnQsclsxMF09KHQ9cGFyc2VJbnQoZS5zbGljZSgyNCwzNiksMTYpKS8xMDk5NTExNjI3Nzc2JjI1NSxyWzExXT10LzQyOTQ5NjcyOTYmMjU1LHJbMTJdPXQ+Pj4yNCYyNTUsclsxM109dD4+PjE2JjI1NSxyWzE0XT10Pj4+OCYyNTUsclsxNV09MjU1JnQscn07ci5kZWZhdWx0PXN9LHtcIi4vdmFsaWRhdGUuanNcIjo1NDF9XSw1MzI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLmRlZmF1bHQ9dm9pZCAwO3IuZGVmYXVsdD0vXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2l9LHt9XSw1MzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtsZXQgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLmRlZmF1bHQ9ZnVuY3Rpb24oKXtpZighbiYmKG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNyeXB0byYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byl8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtc0NyeXB0byYmXCJmdW5jdGlvblwiPT10eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0byksIW4pKXRocm93IG5ldyBFcnJvcihcImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkXCIpO3JldHVybiBuKGkpfTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDE2KX0se31dLDUzNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0LHIsbil7c3dpdGNoKGUpe2Nhc2UgMDpyZXR1cm4gdCZyXn50Jm47Y2FzZSAxOnJldHVybiB0XnJebjtjYXNlIDI6cmV0dXJuIHQmcl50Jm5eciZuO2Nhc2UgMzpyZXR1cm4gdF5yXm59fWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4gZTw8dHxlPj4+MzItdH1PYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLmRlZmF1bHQ9dm9pZCAwO3ZhciBzPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdLHI9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7Y29uc3QgdD11bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpO2U9W107Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKHQuY2hhckNvZGVBdChyKSl9ZWxzZSBBcnJheS5pc0FycmF5KGUpfHwoZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKSk7ZS5wdXNoKDEyOCk7Y29uc3Qgcz1lLmxlbmd0aC80KzIsbz1NYXRoLmNlaWwocy8xNiksYT1uZXcgQXJyYXkobyk7Zm9yKGxldCB0PTA7dDxvOysrdCl7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkoMTYpO2ZvcihsZXQgbj0wO248MTY7KytuKXJbbl09ZVs2NCp0KzQqbl08PDI0fGVbNjQqdCs0Km4rMV08PDE2fGVbNjQqdCs0Km4rMl08PDh8ZVs2NCp0KzQqbiszXTthW3RdPXJ9YVtvLTFdWzE0XT04KihlLmxlbmd0aC0xKS9NYXRoLnBvdygyLDMyKSxhW28tMV1bMTRdPU1hdGguZmxvb3IoYVtvLTFdWzE0XSksYVtvLTFdWzE1XT04KihlLmxlbmd0aC0xKSY0Mjk0OTY3Mjk1O2ZvcihsZXQgZT0wO2U8bzsrK2Upe2NvbnN0IHM9bmV3IFVpbnQzMkFycmF5KDgwKTtmb3IobGV0IHQ9MDt0PDE2OysrdClzW3RdPWFbZV1bdF07Zm9yKGxldCBlPTE2O2U8ODA7KytlKXNbZV09aShzW2UtM11ec1tlLThdXnNbZS0xNF1ec1tlLTE2XSwxKTtsZXQgbz1yWzBdLGw9clsxXSxjPXJbMl0sdT1yWzNdLGg9cls0XTtmb3IobGV0IGU9MDtlPDgwOysrZSl7Y29uc3Qgcj1NYXRoLmZsb29yKGUvMjApLGE9aShvLDUpK24ocixsLGMsdSkraCt0W3JdK3NbZV0+Pj4wO2g9dSx1PWMsYz1pKGwsMzApPj4+MCxsPW8sbz1hfXJbMF09clswXStvPj4+MCxyWzFdPXJbMV0rbD4+PjAsclsyXT1yWzJdK2M+Pj4wLHJbM109clszXSt1Pj4+MCxyWzRdPXJbNF0raD4+PjB9cmV0dXJuW3JbMF0+PjI0JjI1NSxyWzBdPj4xNiYyNTUsclswXT4+OCYyNTUsMjU1JnJbMF0sclsxXT4+MjQmMjU1LHJbMV0+PjE2JjI1NSxyWzFdPj44JjI1NSwyNTUmclsxXSxyWzJdPj4yNCYyNTUsclsyXT4+MTYmMjU1LHJbMl0+PjgmMjU1LDI1NSZyWzJdLHJbM10+PjI0JjI1NSxyWzNdPj4xNiYyNTUsclszXT4+OCYyNTUsMjU1JnJbM10scls0XT4+MjQmMjU1LHJbNF0+PjE2JjI1NSxyWzRdPj44JjI1NSwyNTUmcls0XV19O3IuZGVmYXVsdD1zfSx7fV0sNTM1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kZWZhdWx0PXZvaWQgMDt2YXIgbixpPShuPWUoXCIuL3ZhbGlkYXRlLmpzXCIpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07Y29uc3Qgcz1bXTtmb3IobGV0IGU9MDtlPDI1NjsrK2Upcy5wdXNoKChlKzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7dmFyIG89ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Y29uc3Qgcj0oc1tlW3QrMF1dK3NbZVt0KzFdXStzW2VbdCsyXV0rc1tlW3QrM11dK1wiLVwiK3NbZVt0KzRdXStzW2VbdCs1XV0rXCItXCIrc1tlW3QrNl1dK3NbZVt0KzddXStcIi1cIitzW2VbdCs4XV0rc1tlW3QrOV1dK1wiLVwiK3NbZVt0KzEwXV0rc1tlW3QrMTFdXStzW2VbdCsxMl1dK3NbZVt0KzEzXV0rc1tlW3QrMTRdXStzW2VbdCsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCEoMCxpLmRlZmF1bHQpKHIpKXRocm93IFR5cGVFcnJvcihcIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZFwiKTtyZXR1cm4gcn07ci5kZWZhdWx0PW99LHtcIi4vdmFsaWRhdGUuanNcIjo1NDF9XSw1MzY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLmRlZmF1bHQ9dm9pZCAwO3ZhciBuPXMoZShcIi4vcm5nLmpzXCIpKSxpPXMoZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1sZXQgbyxhLGw9MCxjPTA7dmFyIHU9ZnVuY3Rpb24oZSx0LHIpe2xldCBzPXQmJnJ8fDA7Y29uc3QgdT10fHxuZXcgQXJyYXkoMTYpO2xldCBoPShlPWV8fHt9KS5ub2RlfHxvLGY9dm9pZCAwIT09ZS5jbG9ja3NlcT9lLmNsb2Nrc2VxOmE7aWYobnVsbD09aHx8bnVsbD09Zil7Y29uc3QgdD1lLnJhbmRvbXx8KGUucm5nfHxuLmRlZmF1bHQpKCk7bnVsbD09aCYmKGg9bz1bMXx0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XV0pLG51bGw9PWYmJihmPWE9MTYzODMmKHRbNl08PDh8dFs3XSkpfWxldCBkPXZvaWQgMCE9PWUubXNlY3M/ZS5tc2VjczpEYXRlLm5vdygpLHA9dm9pZCAwIT09ZS5uc2Vjcz9lLm5zZWNzOmMrMTtjb25zdCBtPWQtbCsocC1jKS8xZTQ7aWYobTwwJiZ2b2lkIDA9PT1lLmNsb2Nrc2VxJiYoZj1mKzEmMTYzODMpLChtPDB8fGQ+bCkmJnZvaWQgMD09PWUubnNlY3MmJihwPTApLHA+PTFlNCl0aHJvdyBuZXcgRXJyb3IoXCJ1dWlkLnYxKCk6IENhbid0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlY1wiKTtsPWQsYz1wLGE9ZixkKz0xMjIxOTI5MjhlNTtjb25zdCBiPSgxZTQqKDI2ODQzNTQ1NSZkKStwKSU0Mjk0OTY3Mjk2O3VbcysrXT1iPj4+MjQmMjU1LHVbcysrXT1iPj4+MTYmMjU1LHVbcysrXT1iPj4+OCYyNTUsdVtzKytdPTI1NSZiO2NvbnN0IGc9ZC80Mjk0OTY3Mjk2KjFlNCYyNjg0MzU0NTU7dVtzKytdPWc+Pj44JjI1NSx1W3MrK109MjU1JmcsdVtzKytdPWc+Pj4yNCYxNXwxNix1W3MrK109Zz4+PjE2JjI1NSx1W3MrK109Zj4+Pjh8MTI4LHVbcysrXT0yNTUmZjtmb3IobGV0IGU9MDtlPDY7KytlKXVbcytlXT1oW2VdO3JldHVybiB0fHwoMCxpLmRlZmF1bHQpKHUpfTtyLmRlZmF1bHQ9dX0se1wiLi9ybmcuanNcIjo1MzMsXCIuL3N0cmluZ2lmeS5qc1wiOjUzNX1dLDUzNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuZGVmYXVsdD12b2lkIDA7dmFyIG49cyhlKFwiLi92MzUuanNcIikpLGk9cyhlKFwiLi9tZDUuanNcIikpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBvPSgwLG4uZGVmYXVsdCkoXCJ2M1wiLDQ4LGkuZGVmYXVsdCk7ci5kZWZhdWx0PW99LHtcIi4vbWQ1LmpzXCI6NTI5LFwiLi92MzUuanNcIjo1Mzh9XSw1Mzg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIHMoZSxzLG8sYSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKGUpe2U9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUpKTtjb25zdCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fShlKSksXCJzdHJpbmdcIj09dHlwZW9mIHMmJihzPSgwLGkuZGVmYXVsdCkocykpLDE2IT09cy5sZW5ndGgpdGhyb3cgVHlwZUVycm9yKFwiTmFtZXNwYWNlIG11c3QgYmUgYXJyYXktbGlrZSAoMTYgaXRlcmFibGUgaW50ZWdlciB2YWx1ZXMsIDAtMjU1KVwiKTtsZXQgbD1uZXcgVWludDhBcnJheSgxNitlLmxlbmd0aCk7aWYobC5zZXQocyksbC5zZXQoZSxzLmxlbmd0aCksbD1yKGwpLGxbNl09MTUmbFs2XXx0LGxbOF09NjMmbFs4XXwxMjgsbyl7YT1hfHwwO2ZvcihsZXQgZT0wO2U8MTY7KytlKW9bYStlXT1sW2VdO3JldHVybiBvfXJldHVybigwLG4uZGVmYXVsdCkobCl9dHJ5e3MubmFtZT1lfWNhdGNoKGUpe31yZXR1cm4gcy5ETlM9byxzLlVSTD1hLHN9LHIuVVJMPXIuRE5TPXZvaWQgMDt2YXIgbj1zKGUoXCIuL3N0cmluZ2lmeS5qc1wiKSksaT1zKGUoXCIuL3BhcnNlLmpzXCIpKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1jb25zdCBvPVwiNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4XCI7ci5ETlM9bztjb25zdCBhPVwiNmJhN2I4MTEtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4XCI7ci5VUkw9YX0se1wiLi9wYXJzZS5qc1wiOjUzMSxcIi4vc3RyaW5naWZ5LmpzXCI6NTM1fV0sNTM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kZWZhdWx0PXZvaWQgMDt2YXIgbj1zKGUoXCIuL3JuZy5qc1wiKSksaT1zKGUoXCIuL3N0cmluZ2lmeS5qc1wiKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIG89ZnVuY3Rpb24oZSx0LHIpe2NvbnN0IHM9KGU9ZXx8e30pLnJhbmRvbXx8KGUucm5nfHxuLmRlZmF1bHQpKCk7aWYoc1s2XT0xNSZzWzZdfDY0LHNbOF09NjMmc1s4XXwxMjgsdCl7cj1yfHwwO2ZvcihsZXQgZT0wO2U8MTY7KytlKXRbcitlXT1zW2VdO3JldHVybiB0fXJldHVybigwLGkuZGVmYXVsdCkocyl9O3IuZGVmYXVsdD1vfSx7XCIuL3JuZy5qc1wiOjUzMyxcIi4vc3RyaW5naWZ5LmpzXCI6NTM1fV0sNTQwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kZWZhdWx0PXZvaWQgMDt2YXIgbj1zKGUoXCIuL3YzNS5qc1wiKSksaT1zKGUoXCIuL3NoYTEuanNcIikpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBvPSgwLG4uZGVmYXVsdCkoXCJ2NVwiLDgwLGkuZGVmYXVsdCk7ci5kZWZhdWx0PW99LHtcIi4vc2hhMS5qc1wiOjUzNCxcIi4vdjM1LmpzXCI6NTM4fV0sNTQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksci5kZWZhdWx0PXZvaWQgMDt2YXIgbixpPShuPWUoXCIuL3JlZ2V4LmpzXCIpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn07dmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGUmJmkuZGVmYXVsdC50ZXN0KGUpfTtyLmRlZmF1bHQ9c30se1wiLi9yZWdleC5qc1wiOjUzMn1dLDU0MjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuZGVmYXVsdD12b2lkIDA7dmFyIG4saT0obj1lKFwiLi92YWxpZGF0ZS5qc1wiKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O3ZhciBzPWZ1bmN0aW9uKGUpe2lmKCEoMCxpLmRlZmF1bHQpKGUpKXRocm93IFR5cGVFcnJvcihcIkludmFsaWQgVVVJRFwiKTtyZXR1cm4gcGFyc2VJbnQoZS5zdWJzdHIoMTQsMSksMTYpfTtyLmRlZmF1bHQ9c30se1wiLi92YWxpZGF0ZS5qc1wiOjU0MX1dLDU0MzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDaGFyYWN0ZXIgY2xhc3NlcyBhbmQgYXNzb2NpYXRlZCB1dGlsaXRpZXMgZm9yIHRoZSA1dGggZWRpdGlvbiBvZiBYTUwgMS4wLlxuICpcbiAqIEBhdXRob3IgTG91aXMtRG9taW5pcXVlIER1YmVhdVxuICogQGxpY2Vuc2UgTUlUXG4gKiBAY29weXJpZ2h0IExvdWlzLURvbWluaXF1ZSBEdWJlYXVcbiAqL09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuQ0hBUj1cIlxcdFxcblxcciAtXFx1ZDdmZlxcdWUwMDAtXFx1ZmZmZFxcdWQ4MDBcXHVkYzAwLVxcdWRiZmZcXHVkZmZmXCIsci5TPVwiIFxcdFxcclxcblwiLHIuTkFNRV9TVEFSVF9DSEFSPVwiOkEtWl9hLXpcXHhjMC1cXHhkNlxceGQ4LVxceGY2XFx4ZjgtXFx1MDJmZlxcdTAzNzAtXFx1MDM3ZFxcdTAzN2YtXFx1MWZmZlxcdTIwMGNcXHUyMDBkXFx1MjA3MC1cXHUyMThmXFx1MmMwMC1cXHUyZmVmXFx1MzAwMS1cXHVkN2ZmXFx1ZjkwMC1cXHVmZGNmXFx1ZmRmMC1cXHVmZmZkXFx1ZDgwMFxcdWRjMDAtXFx1ZGI3ZlxcdWRmZmZcIixyLk5BTUVfQ0hBUj1cIi1cIityLk5BTUVfU1RBUlRfQ0hBUitcIi4wLTlcXHhiN1xcdTAzMDAtXFx1MDM2ZlxcdTIwM2YtXFx1MjA0MFwiLHIuQ0hBUl9SRT1uZXcgUmVnRXhwKFwiXltcIityLkNIQVIrXCJdJFwiLFwidVwiKSxyLlNfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5TK1wiXSskXCIsXCJ1XCIpLHIuTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoXCJeW1wiK3IuTkFNRV9TVEFSVF9DSEFSK1wiXSRcIixcInVcIiksci5OQU1FX0NIQVJfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQU1FX0NIQVIrXCJdJFwiLFwidVwiKSxyLk5BTUVfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQU1FX1NUQVJUX0NIQVIrXCJdW1wiK3IuTkFNRV9DSEFSK1wiXSokXCIsXCJ1XCIpLHIuTk1UT0tFTl9SRT1uZXcgUmVnRXhwKFwiXltcIityLk5BTUVfQ0hBUitcIl0rJFwiLFwidVwiKTtmdW5jdGlvbiBuKGUpe3JldHVybiBlPj02NSYmZTw9OTB8fGU+PTk3JiZlPD0xMjJ8fDU4PT09ZXx8OTU9PT1lfHw4MjA0PT09ZXx8ODIwNT09PWV8fGU+PTE5MiYmZTw9MjE0fHxlPj0yMTYmJmU8PTI0Nnx8ZT49MjQ4JiZlPD03Njd8fGU+PTg4MCYmZTw9ODkzfHxlPj04OTUmJmU8PTgxOTF8fGU+PTgzMDQmJmU8PTg1OTF8fGU+PTExMjY0JiZlPD0xMjI3MXx8ZT49MTIyODkmJmU8PTU1Mjk1fHxlPj02Mzc0NCYmZTw9NjQ5NzV8fGU+PTY1MDA4JiZlPD02NTUzM3x8ZT49NjU1MzYmJmU8PTk4MzAzOX1yLlNfTElTVD1bMzIsMTAsMTMsOV0sci5pc0NoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTMyJiZlPD01NTI5NXx8MTA9PT1lfHwxMz09PWV8fDk9PT1lfHxlPj01NzM0NCYmZTw9NjU1MzN8fGU+PTY1NTM2JiZlPD0xMTE0MTExfSxyLmlzUz1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHwxMD09PWV8fDEzPT09ZXx8OT09PWV9LHIuaXNOYW1lU3RhcnRDaGFyPW4sci5pc05hbWVDaGFyPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUpfHxlPj00OCYmZTw9NTd8fDQ1PT09ZXx8NDY9PT1lfHwxODM9PT1lfHxlPj03NjgmJmU8PTg3OXx8ZT49ODI1NSYmZTw9ODI1Nn19LHt9XSw1NDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtcbi8qKlxuICogQ2hhcmFjdGVyIGNsYXNzZXMgYW5kIGFzc29jaWF0ZWQgdXRpbGl0aWVzIGZvciB0aGUgMm5kIGVkaXRpb24gb2YgWE1MIDEuMS5cbiAqXG4gKiBAYXV0aG9yIExvdWlzLURvbWluaXF1ZSBEdWJlYXVcbiAqIEBsaWNlbnNlIE1JVFxuICogQGNvcHlyaWdodCBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1XG4gKi9PYmplY3QuZGVmaW5lUHJvcGVydHkocixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyLkNIQVI9XCJcXHgwMS1cXHVkN2ZmXFx1ZTAwMC1cXHVmZmZkXFx1ZDgwMFxcdWRjMDAtXFx1ZGJmZlxcdWRmZmZcIixyLlJFU1RSSUNURURfQ0hBUj1cIlxceDAxLVxcYlxcdlxcZlxceDBlLVxceDFmXFx4N2YtXFx4ODRcXHg4Ni1cXHg5ZlwiLHIuUz1cIiBcXHRcXHJcXG5cIixyLk5BTUVfU1RBUlRfQ0hBUj1cIjpBLVpfYS16XFx4YzAtXFx4ZDZcXHhkOC1cXHhmNlxceGY4LVxcdTAyZmZcXHUwMzcwLVxcdTAzN2RcXHUwMzdmLVxcdTFmZmZcXHUyMDBjXFx1MjAwZFxcdTIwNzAtXFx1MjE4ZlxcdTJjMDAtXFx1MmZlZlxcdTMwMDEtXFx1ZDdmZlxcdWY5MDAtXFx1ZmRjZlxcdWZkZjAtXFx1ZmZmZFxcdWQ4MDBcXHVkYzAwLVxcdWRiN2ZcXHVkZmZmXCIsci5OQU1FX0NIQVI9XCItXCIrci5OQU1FX1NUQVJUX0NIQVIrXCIuMC05XFx4YjdcXHUwMzAwLVxcdTAzNmZcXHUyMDNmLVxcdTIwNDBcIixyLkNIQVJfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5DSEFSK1wiXSRcIixcInVcIiksci5SRVNUUklDVEVEX0NIQVJfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5SRVNUUklDVEVEX0NIQVIrXCJdJFwiLFwidVwiKSxyLlNfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5TK1wiXSskXCIsXCJ1XCIpLHIuTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoXCJeW1wiK3IuTkFNRV9TVEFSVF9DSEFSK1wiXSRcIixcInVcIiksci5OQU1FX0NIQVJfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQU1FX0NIQVIrXCJdJFwiLFwidVwiKSxyLk5BTUVfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQU1FX1NUQVJUX0NIQVIrXCJdW1wiK3IuTkFNRV9DSEFSK1wiXSokXCIsXCJ1XCIpLHIuTk1UT0tFTl9SRT1uZXcgUmVnRXhwKFwiXltcIityLk5BTUVfQ0hBUitcIl0rJFwiLFwidVwiKTtmdW5jdGlvbiBuKGUpe3JldHVybiBlPj02NSYmZTw9OTB8fGU+PTk3JiZlPD0xMjJ8fDU4PT09ZXx8OTU9PT1lfHw4MjA0PT09ZXx8ODIwNT09PWV8fGU+PTE5MiYmZTw9MjE0fHxlPj0yMTYmJmU8PTI0Nnx8ZT49MjQ4JiZlPD03Njd8fGU+PTg4MCYmZTw9ODkzfHxlPj04OTUmJmU8PTgxOTF8fGU+PTgzMDQmJmU8PTg1OTF8fGU+PTExMjY0JiZlPD0xMjI3MXx8ZT49MTIyODkmJmU8PTU1Mjk1fHxlPj02Mzc0NCYmZTw9NjQ5NzV8fGU+PTY1MDA4JiZlPD02NTUzM3x8ZT49NjU1MzYmJmU8PTk4MzAzOX1yLlNfTElTVD1bMzIsMTAsMTMsOV0sci5pc0NoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTEmJmU8PTU1Mjk1fHxlPj01NzM0NCYmZTw9NjU1MzN8fGU+PTY1NTM2JiZlPD0xMTE0MTExfSxyLmlzUmVzdHJpY3RlZENoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTEmJmU8PTh8fDExPT09ZXx8MTI9PT1lfHxlPj0xNCYmZTw9MzF8fGU+PTEyNyYmZTw9MTMyfHxlPj0xMzQmJmU8PTE1OX0sci5pc0NoYXJBbmROb3RSZXN0cmljdGVkPWZ1bmN0aW9uKGUpe3JldHVybiA5PT09ZXx8MTA9PT1lfHwxMz09PWV8fGU+MzEmJmU8MTI3fHwxMzM9PT1lfHxlPjE1OSYmZTw9NTUyOTV8fGU+PTU3MzQ0JiZlPD02NTUzM3x8ZT49NjU1MzYmJmU8PTExMTQxMTF9LHIuaXNTPWZ1bmN0aW9uKGUpe3JldHVybiAzMj09PWV8fDEwPT09ZXx8MTM9PT1lfHw5PT09ZX0sci5pc05hbWVTdGFydENoYXI9bixyLmlzTmFtZUNoYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSl8fGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWV8fDE4Mz09PWV8fGU+PTc2OCYmZTw9ODc5fHxlPj04MjU1JiZlPD04MjU2fX0se31dLDU0NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO1xuLyoqXG4gKiBDaGFyYWN0ZXIgY2xhc3MgdXRpbGl0aWVzIGZvciBYTUwgTlMgMS4wIGVkaXRpb24gMy5cbiAqXG4gKiBAYXV0aG9yIExvdWlzLURvbWluaXF1ZSBEdWJlYXVcbiAqIEBsaWNlbnNlIE1JVFxuICogQGNvcHlyaWdodCBMb3Vpcy1Eb21pbmlxdWUgRHViZWF1XG4gKi9mdW5jdGlvbiBuKGUpe3JldHVybiBlPj02NSYmZTw9OTB8fDk1PT09ZXx8ZT49OTcmJmU8PTEyMnx8ZT49MTkyJiZlPD0yMTR8fGU+PTIxNiYmZTw9MjQ2fHxlPj0yNDgmJmU8PTc2N3x8ZT49ODgwJiZlPD04OTN8fGU+PTg5NSYmZTw9ODE5MXx8ZT49ODIwNCYmZTw9ODIwNXx8ZT49ODMwNCYmZTw9ODU5MXx8ZT49MTEyNjQmJmU8PTEyMjcxfHxlPj0xMjI4OSYmZTw9NTUyOTV8fGU+PTYzNzQ0JiZlPD02NDk3NXx8ZT49NjUwMDgmJmU8PTY1NTMzfHxlPj02NTUzNiYmZTw9OTgzMDM5fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIuTkNfTkFNRV9TVEFSVF9DSEFSPVwiQS1aX2EtelxceGMwLVxceGQ2XFx4ZDgtXFx4ZjZcXHhmOC1cXHUwMmZmXFx1MDM3MC1cXHUwMzdkXFx1MDM3Zi1cXHUxZmZmXFx1MjAwYy1cXHUyMDBkXFx1MjA3MC1cXHUyMThmXFx1MmMwMC1cXHUyZmVmXFx1MzAwMS1cXHVkN2ZmXFx1ZjkwMC1cXHVmZGNmXFx1ZmRmMC1cXHVmZmZkXFx1ZDgwMFxcdWRjMDAtXFx1ZGI3ZlxcdWRmZmZcIixyLk5DX05BTUVfQ0hBUj1cIi1cIityLk5DX05BTUVfU1RBUlRfQ0hBUitcIi4wLTlcXHhiN1xcdTAzMDAtXFx1MDM2ZlxcdTIwM2YtXFx1MjA0MFwiLHIuTkNfTkFNRV9TVEFSVF9DSEFSX1JFPW5ldyBSZWdFeHAoXCJeW1wiK3IuTkNfTkFNRV9TVEFSVF9DSEFSK1wiXSRcIixcInVcIiksci5OQ19OQU1FX0NIQVJfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQ19OQU1FX0NIQVIrXCJdJFwiLFwidVwiKSxyLk5DX05BTUVfUkU9bmV3IFJlZ0V4cChcIl5bXCIrci5OQ19OQU1FX1NUQVJUX0NIQVIrXCJdW1wiK3IuTkNfTkFNRV9DSEFSK1wiXSokXCIsXCJ1XCIpLHIuaXNOQ05hbWVTdGFydENoYXI9bixyLmlzTkNOYW1lQ2hhcj1mdW5jdGlvbihlKXtyZXR1cm4gbihlKXx8NDU9PT1lfHw0Nj09PWV8fGU+PTQ4JiZlPD01N3x8MTgzPT09ZXx8ZT49NzY4JiZlPD04Nzl8fGU+PTgyNTUmJmU8PTgyNTZ9fSx7fV19LHt9LFsxNV0pKDE1KX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4Y2VsanMubWluLmpzLm1hcCIsIihmdW5jdGlvbihhLGIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sYik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyliKCk7ZWxzZXtiKCksYS5GaWxlU2F2ZXI9e2V4cG9ydHM6e319LmV4cG9ydHN9fSkodGhpcyxmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGIoYSxiKXtyZXR1cm5cInVuZGVmaW5lZFwiPT10eXBlb2YgYj9iPXthdXRvQm9tOiExfTpcIm9iamVjdFwiIT10eXBlb2YgYiYmKGNvbnNvbGUud2FybihcIkRlcHJlY2F0ZWQ6IEV4cGVjdGVkIHRoaXJkIGFyZ3VtZW50IHRvIGJlIGEgb2JqZWN0XCIpLGI9e2F1dG9Cb206IWJ9KSxiLmF1dG9Cb20mJi9eXFxzKig/OnRleHRcXC9cXFMqfGFwcGxpY2F0aW9uXFwveG1sfFxcUypcXC9cXFMqXFwreG1sKVxccyo7LipjaGFyc2V0XFxzKj1cXHMqdXRmLTgvaS50ZXN0KGEudHlwZSk/bmV3IEJsb2IoW1wiXFx1RkVGRlwiLGFdLHt0eXBlOmEudHlwZX0pOmF9ZnVuY3Rpb24gYyhhLGIsYyl7dmFyIGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihcIkdFVFwiLGEpLGQucmVzcG9uc2VUeXBlPVwiYmxvYlwiLGQub25sb2FkPWZ1bmN0aW9uKCl7ZyhkLnJlc3BvbnNlLGIsYyl9LGQub25lcnJvcj1mdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoXCJjb3VsZCBub3QgZG93bmxvYWQgZmlsZVwiKX0sZC5zZW5kKCl9ZnVuY3Rpb24gZChhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7Yi5vcGVuKFwiSEVBRFwiLGEsITEpO3RyeXtiLnNlbmQoKX1jYXRjaChhKXt9cmV0dXJuIDIwMDw9Yi5zdGF0dXMmJjI5OT49Yi5zdGF0dXN9ZnVuY3Rpb24gZShhKXt0cnl7YS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIikpfWNhdGNoKGMpe3ZhciBiPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiTW91c2VFdmVudHNcIik7Yi5pbml0TW91c2VFdmVudChcImNsaWNrXCIsITAsITAsd2luZG93LDAsMCwwLDgwLDIwLCExLCExLCExLCExLDAsbnVsbCksYS5kaXNwYXRjaEV2ZW50KGIpfX12YXIgZj1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cud2luZG93PT09d2luZG93P3dpbmRvdzpcIm9iamVjdFwiPT10eXBlb2Ygc2VsZiYmc2VsZi5zZWxmPT09c2VsZj9zZWxmOlwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbC5nbG9iYWw9PT1nbG9iYWw/Z2xvYmFsOnZvaWQgMCxhPWYubmF2aWdhdG9yJiYvTWFjaW50b3NoLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYvQXBwbGVXZWJLaXQvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEvU2FmYXJpLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGc9Zi5zYXZlQXN8fChcIm9iamVjdFwiIT10eXBlb2Ygd2luZG93fHx3aW5kb3chPT1mP2Z1bmN0aW9uKCl7fTpcImRvd25sb2FkXCJpbiBIVE1MQW5jaG9yRWxlbWVudC5wcm90b3R5cGUmJiFhP2Z1bmN0aW9uKGIsZyxoKXt2YXIgaT1mLlVSTHx8Zi53ZWJraXRVUkwsaj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtnPWd8fGIubmFtZXx8XCJkb3dubG9hZFwiLGouZG93bmxvYWQ9ZyxqLnJlbD1cIm5vb3BlbmVyXCIsXCJzdHJpbmdcIj09dHlwZW9mIGI/KGouaHJlZj1iLGoub3JpZ2luPT09bG9jYXRpb24ub3JpZ2luP2Uoaik6ZChqLmhyZWYpP2MoYixnLGgpOmUoaixqLnRhcmdldD1cIl9ibGFua1wiKSk6KGouaHJlZj1pLmNyZWF0ZU9iamVjdFVSTChiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5yZXZva2VPYmplY3RVUkwoai5ocmVmKX0sNEU0KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShqKX0sMCkpfTpcIm1zU2F2ZU9yT3BlbkJsb2JcImluIG5hdmlnYXRvcj9mdW5jdGlvbihmLGcsaCl7aWYoZz1nfHxmLm5hbWV8fFwiZG93bmxvYWRcIixcInN0cmluZ1wiIT10eXBlb2YgZiluYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYihiKGYsaCksZyk7ZWxzZSBpZihkKGYpKWMoZixnLGgpO2Vsc2V7dmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7aS5ocmVmPWYsaS50YXJnZXQ9XCJfYmxhbmtcIixzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShpKX0pfX06ZnVuY3Rpb24oYixkLGUsZyl7aWYoZz1nfHxvcGVuKFwiXCIsXCJfYmxhbmtcIiksZyYmKGcuZG9jdW1lbnQudGl0bGU9Zy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dD1cImRvd25sb2FkaW5nLi4uXCIpLFwic3RyaW5nXCI9PXR5cGVvZiBiKXJldHVybiBjKGIsZCxlKTt2YXIgaD1cImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiPT09Yi50eXBlLGk9L2NvbnN0cnVjdG9yL2kudGVzdChmLkhUTUxFbGVtZW50KXx8Zi5zYWZhcmksaj0vQ3JpT1NcXC9bXFxkXSsvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoKGp8fGgmJml8fGEpJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcil7dmFyIGs9bmV3IEZpbGVSZWFkZXI7ay5vbmxvYWRlbmQ9ZnVuY3Rpb24oKXt2YXIgYT1rLnJlc3VsdDthPWo/YTphLnJlcGxhY2UoL15kYXRhOlteO10qOy8sXCJkYXRhOmF0dGFjaG1lbnQvZmlsZTtcIiksZz9nLmxvY2F0aW9uLmhyZWY9YTpsb2NhdGlvbj1hLGc9bnVsbH0say5yZWFkQXNEYXRhVVJMKGIpfWVsc2V7dmFyIGw9Zi5VUkx8fGYud2Via2l0VVJMLG09bC5jcmVhdGVPYmplY3RVUkwoYik7Zz9nLmxvY2F0aW9uPW06bG9jYXRpb24uaHJlZj1tLGc9bnVsbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bC5yZXZva2VPYmplY3RVUkwobSl9LDRFNCl9fSk7Zi5zYXZlQXM9Zy5zYXZlQXM9ZyxcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlJiYobW9kdWxlLmV4cG9ydHM9Zyl9KTtcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZVNhdmVyLm1pbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBTaGVldENsaXAgLSBTcHJlYWRzaGVldCBDbGlwYm9hcmQgUGFyc2VyLlxuICogdmVyc2lvbiAwLjJcbiAqXG4gKiBUaGlzIHRpbnkgbGlicmFyeSB0cmFuc2Zvcm1zIEphdmFTY3JpcHQgYXJyYXlzIHRvIHN0cmluZ3MgdGhhdCBhcmUgcGFzdGVhYmxlIGJ5IExpYnJlT2ZmaWNlLCBPcGVuT2ZmaWNlLFxuICogR29vZ2xlIERvY3MgYW5kIE1pY3Jvc29mdCBFeGNlbC5cbiAqXG4gKiBDb3B5cmlnaHQgMjAxMiwgTWFyY2luIFdhcnBlY2hvd3NraVxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogaHR0cDovL2dpdGh1Yi5jb20vd2FycGVjaC9zaGVldGNsaXAvXG4gKi9cblxuY29uc3QgcmVnVW5pdmVyc2FsTmV3TGluZSA9IC9eKFxcclxcbnxcXG5cXHJ8XFxyfFxcbikvO1xuY29uc3QgcmVnTmV4dENlbGxOb1F1b3RlcyA9IC9eW15cXHRcXHJcXG5dKy87XG5jb25zdCByZWdOZXh0RW1wdHlDZWxsID0gL15cXHQvO1xuXG4vKipcbiAqIERlY29kZSBzcHJlYWRzaGVldCBzdHJpbmcgaW50byBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIFRoZSBzdHJpbmcgdG8gcGFyc2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICBjb25zdCBhcnIgPSBbWycnXV07XG4gIGlmIChzdHIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFycjtcbiAgfVxuICBsZXQgY29sdW1uID0gMDtcbiAgbGV0IHJvdyA9IDA7XG4gIGxldCBsYXN0TGVuZ3RoO1xuICB3aGlsZSAoc3RyLmxlbmd0aCA+IDApIHtcbiAgICBpZiAobGFzdExlbmd0aCA9PT0gc3RyLmxlbmd0aCkge1xuICAgICAgLy8gSW4gdGhlIGNhc2UgSWYgaW4gbGFzdCBjeWNsZSB3ZSBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcsIHdlIGhhdmUgdG8gbGVhdmUgdGhlIGluZmluaXRlIGxvb3BcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsYXN0TGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICBpZiAoc3RyLm1hdGNoKHJlZ05leHRFbXB0eUNlbGwpKSB7XG4gICAgICBzdHIgPSBzdHIucmVwbGFjZShyZWdOZXh0RW1wdHlDZWxsLCAnJyk7XG4gICAgICBjb2x1bW4gKz0gMTtcbiAgICAgIGFycltyb3ddW2NvbHVtbl0gPSAnJztcbiAgICB9IGVsc2UgaWYgKHN0ci5tYXRjaChyZWdVbml2ZXJzYWxOZXdMaW5lKSkge1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UocmVnVW5pdmVyc2FsTmV3TGluZSwgJycpO1xuICAgICAgY29sdW1uID0gMDtcbiAgICAgIHJvdyArPSAxO1xuICAgICAgYXJyW3Jvd10gPSBbJyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV4dENlbGwgPSAnJztcbiAgICAgIGlmIChzdHIuc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgICBsZXQgcXVvdGVObyA9IDA7XG4gICAgICAgIGxldCBpc1N0aWxsQ2VsbCA9IHRydWU7XG4gICAgICAgIHdoaWxlIChpc1N0aWxsQ2VsbCkge1xuICAgICAgICAgIGNvbnN0IG5leHRDaGFyID0gc3RyLnNsaWNlKDAsIDEpO1xuICAgICAgICAgIGlmIChuZXh0Q2hhciA9PT0gJ1wiJykge1xuICAgICAgICAgICAgcXVvdGVObyArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXh0Q2VsbCArPSBuZXh0Q2hhcjtcbiAgICAgICAgICBzdHIgPSBzdHIuc2xpY2UoMSk7XG4gICAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDAgfHwgc3RyLm1hdGNoKC9eW1xcdFxcclxcbl0vKSAmJiBxdW90ZU5vICUgMiA9PT0gMCkge1xuICAgICAgICAgICAgaXNTdGlsbENlbGwgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dENlbGwgPSBuZXh0Q2VsbC5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXCIkLywgJycpLnJlcGxhY2UoL1tcIl0qL2csIG1hdGNoID0+IG5ldyBBcnJheShNYXRoLmZsb29yKG1hdGNoLmxlbmd0aCAvIDIpKS5maWxsKCdcIicpLmpvaW4oJycpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRUZXh0ID0gc3RyLm1hdGNoKHJlZ05leHRDZWxsTm9RdW90ZXMpO1xuICAgICAgICBuZXh0Q2VsbCA9IG1hdGNoZWRUZXh0ID8gbWF0Y2hlZFRleHRbMF0gOiAnJztcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKG5leHRDZWxsLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBhcnJbcm93XVtjb2x1bW5dID0gbmV4dENlbGw7XG4gICAgfVxuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8qKlxuICogRW5jb2RlIGFycmF5IGludG8gdmFsaWQgc3ByZWFkc2hlZXQgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyciBBbiBhcnJheSBvZiBhcnJheXMgdG8gc3RyaW5naWZ5LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KGFycikge1xuICBsZXQgcjtcbiAgbGV0IHJMZW47XG4gIGxldCBjO1xuICBsZXQgY0xlbjtcbiAgbGV0IHN0ciA9ICcnO1xuICBsZXQgdmFsO1xuICBmb3IgKHIgPSAwLCByTGVuID0gYXJyLmxlbmd0aDsgciA8IHJMZW47IHIgKz0gMSkge1xuICAgIGNMZW4gPSBhcnJbcl0ubGVuZ3RoO1xuICAgIGZvciAoYyA9IDA7IGMgPCBjTGVuOyBjICs9IDEpIHtcbiAgICAgIGlmIChjID4gMCkge1xuICAgICAgICBzdHIgKz0gJ1xcdCc7XG4gICAgICB9XG4gICAgICB2YWwgPSBhcnJbcl1bY107XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHZhbC5pbmRleE9mKCdcXG4nKSA+IC0xKSB7XG4gICAgICAgICAgc3RyICs9IGBcIiR7dmFsLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciArPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHVuZGVmaW5lZCByZXNvbHZlcyB0byB1bmRlZmluZWRcbiAgICAgICAgc3RyICs9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyICs9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHIgIT09IHJMZW4gLSAxKSB7XG4gICAgICBzdHIgKz0gJ1xcbic7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdHI7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX1NoZWV0Q2xpcCA9IHJlcXVpcmUoXCIuL1NoZWV0Q2xpcFwiKTtcbmV4cG9ydHMucGFyc2UgPSBfU2hlZXRDbGlwLnBhcnNlO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBfU2hlZXRDbGlwLnN0cmluZ2lmeTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8qKlxuICogUmVuZGVyIHR5cGUgY2FsY3VsYXRpb24gY2FsY3VsYXRlcyBob3cgbWFueSBET00gbm9kZXMgc2hvdWxkIGJlIGNyZWF0ZWQgYW5kIHdoZXJlIHBsYWNlZFxuICogYmFzZWQgb24gYHN0YXJ0Um93YCBhbmQgYGVuZFJvd2AgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBSRU5ERVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSX1RZUEUgPSAxO1xuLyoqXG4gKiBGdWxseSB2aXNpYmxlIHR5cGUgY2FsY3VsYXRpb24gY2FsY3VsYXRlcyByb3dzIHRoYXQgYXJlIGZ1bGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LlxuICogVGhpcyB0eXBlIG9mIGNhbGN1bGF0aW9uIGlzIHVzZWQgaW4gc2Nyb2xsaW5nIGJ5IGFycm93IGtleXMgbmF2aWdhdGlvbi5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBGVUxMWV9WSVNJQkxFX1RZUEUgPSBleHBvcnRzLkZVTExZX1ZJU0lCTEVfVFlQRSA9IDI7XG4vKipcbiAqIFBhcnRpYWxseSB2aXNpYmxlIHR5cGUgY2FsY3VsYXRpb24gY2FsY3VsYXRlcyByb3dzIHRoYXQgYXJlIGZ1bGx5IGFuZCBwYXJ0aWFsbHkgdmlzaWJsZSBpblxuICogdGhlIHZpZXdwb3J0LiBUaGlzIHR5cGUgb2YgY2FsY3VsYXRpb24gaXMgdXNlZCB0byBjaGVjayBgZW5kUm93YCAob3IgYHN0YXJ0Um93YCkgd2l0aCBwcm9wZXJ0aWVzXG4gKiBjYWxjdWxhdGVkIGluIHJlbmRlciBjYWxjdWxhdG9yLiBJZiBjaGVja2luZyBtZXQgdGhlIGNyaXRlcmlhIHNsb3cgcmVuZGVyIGlzXG4gKiBwZXJmb3JtZWQgKHdoaWNoIHJlbmRlciBjYWxjdWxhdG9yIHdpdGggbmV3IGRhdGEpLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IFBBUlRJQUxMWV9WSVNJQkxFX1RZUEUgPSBleHBvcnRzLlBBUlRJQUxMWV9WSVNJQkxFX1RZUEUgPSAzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgUmVuZGVyQWxsQ29sdW1uc0NhbGN1bGF0b3I6IHRydWUsXG4gIFJlbmRlckFsbFJvd3NDYWxjdWxhdG9yOiB0cnVlLFxuICBWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yOiB0cnVlLFxuICBWaWV3cG9ydFJvd3NDYWxjdWxhdG9yOiB0cnVlXG59O1xudmFyIF9yZW5kZXJBbGxDb2x1bW5zID0gcmVxdWlyZShcIi4vcmVuZGVyQWxsQ29sdW1uc1wiKTtcbmV4cG9ydHMuUmVuZGVyQWxsQ29sdW1uc0NhbGN1bGF0b3IgPSBfcmVuZGVyQWxsQ29sdW1ucy5SZW5kZXJBbGxDb2x1bW5zQ2FsY3VsYXRvcjtcbnZhciBfcmVuZGVyQWxsUm93cyA9IHJlcXVpcmUoXCIuL3JlbmRlckFsbFJvd3NcIik7XG5leHBvcnRzLlJlbmRlckFsbFJvd3NDYWxjdWxhdG9yID0gX3JlbmRlckFsbFJvd3MuUmVuZGVyQWxsUm93c0NhbGN1bGF0b3I7XG52YXIgX3ZpZXdwb3J0Q29sdW1ucyA9IHJlcXVpcmUoXCIuL3ZpZXdwb3J0Q29sdW1uc1wiKTtcbmV4cG9ydHMuVmlld3BvcnRDb2x1bW5zQ2FsY3VsYXRvciA9IF92aWV3cG9ydENvbHVtbnMuVmlld3BvcnRDb2x1bW5zQ2FsY3VsYXRvcjtcbnZhciBfdmlld3BvcnRSb3dzID0gcmVxdWlyZShcIi4vdmlld3BvcnRSb3dzXCIpO1xuZXhwb3J0cy5WaWV3cG9ydFJvd3NDYWxjdWxhdG9yID0gX3ZpZXdwb3J0Um93cy5WaWV3cG9ydFJvd3NDYWxjdWxhdG9yO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5PYmplY3Qua2V5cyhfY29uc3RhbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY29uc3RhbnRzW2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX2NvbnN0YW50c1trZXldO1xufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFJlbmRlckFsbENvbHVtbnNDYWxjdWxhdG9yT3B0aW9uc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsQ29sdW1ucyBUb3RhbCBudW1iZXIgb2YgY29sdW1ucy5cbiAqL1xuLyoqXG4gKiBIb2xkcyBhbGwgY2FsY3VsYXRpb25zIG5lZWRlZCB0byBwZXJmb3JtIHRoZSByZW5kZXJpbmcgb2YgYWxsIGNvbHVtbnMuXG4gKlxuICogQGNsYXNzIFJlbmRlckFsbENvbHVtbnNDYWxjdWxhdG9yXG4gKi9cbmNsYXNzIFJlbmRlckFsbENvbHVtbnNDYWxjdWxhdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7UmVuZGVyQWxsQ29sdW1uc0NhbGN1bGF0b3JPcHRpb25zfSBvcHRpb25zIE9iamVjdCB3aXRoIGFsbCBvcHRpb25zIHNwZWNpZmllZCBmb3IgY29sdW1uIHZpZXdwb3J0IGNhbGN1bGF0aW9uLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiByZW5kZXJlZC92aXNpYmxlIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvdW50XCIsIDApO1xuICAgIC8qKlxuICAgICAqIEluZGV4IG9mIHRoZSBmaXJzdCByZW5kZXJlZC92aXNpYmxlIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhcnRDb2x1bW5cIiwgMCk7XG4gICAgLyoqXG4gICAgICogSW5kZXggb2YgdGhlIGxhc3QgcmVuZGVyZWQvdmlzaWJsZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVuZENvbHVtblwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBQb3NpdGlvbiBvZiB0aGUgZmlyc3QgcmVuZGVyZWQvdmlzaWJsZSBjb2x1bW4gKGluIHB4KS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhcnRQb3NpdGlvblwiLCAwKTtcbiAgICB0aGlzLmNvdW50ID0gb3B0aW9ucy50b3RhbENvbHVtbnM7XG4gICAgdGhpcy5lbmRDb2x1bW4gPSB0aGlzLmNvdW50IC0gMTtcbiAgfVxufVxuZXhwb3J0cy5SZW5kZXJBbGxDb2x1bW5zQ2FsY3VsYXRvciA9IFJlbmRlckFsbENvbHVtbnNDYWxjdWxhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBSZW5kZXJBbGxSb3dzQ2FsY3VsYXRvck9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbFJvd3MgVG90YWwgbnVtYmVyIG9mIHJvd3MuXG4gKi9cbi8qKlxuICogSG9sZHMgYWxsIGNhbGN1bGF0aW9ucyBuZWVkZWQgdG8gcGVyZm9ybSB0aGUgcmVuZGVyaW5nIG9mIGFsbCByb3dzLlxuICpcbiAqIEBjbGFzcyBSZW5kZXJBbGxSb3dzQ2FsY3VsYXRvclxuICovXG5jbGFzcyBSZW5kZXJBbGxSb3dzQ2FsY3VsYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1JlbmRlckFsbFJvd3NDYWxjdWxhdG9yT3B0aW9uc30gb3B0aW9ucyBPYmplY3Qgd2l0aCBhbGwgb3B0aW9ucyBzcGVjaWZpZWQgZm9yIHJvdyB2aWV3cG9ydCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgcmVuZGVyZWQvdmlzaWJsZSByb3dzLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb3VudFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZmlyc3QgcmVuZGVyZWQvdmlzaWJsZSByb3cuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0Um93XCIsIDApO1xuICAgIC8qKlxuICAgICAqIEluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkL3Zpc2libGUgcm93LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJlbmRSb3dcIiwgMCk7XG4gICAgLyoqXG4gICAgICogUG9zaXRpb24gb2YgdGhlIGZpcnN0IHJlbmRlcmVkL3Zpc2libGUgcm93IChpbiBweCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0UG9zaXRpb25cIiwgMCk7XG4gICAgdGhpcy5jb3VudCA9IG9wdGlvbnMudG90YWxSb3dzO1xuICAgIHRoaXMuZW5kUm93ID0gdGhpcy5jb3VudCAtIDE7XG4gIH1cbn1cbmV4cG9ydHMuUmVuZGVyQWxsUm93c0NhbGN1bGF0b3IgPSBSZW5kZXJBbGxSb3dzQ2FsY3VsYXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmF0LmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZpZXdwb3J0Q29sdW1uc0NhbGN1bGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmlld3BvcnRXaWR0aCBXaWR0aCBvZiB0aGUgdmlld3BvcnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2Nyb2xsT2Zmc2V0IEN1cnJlbnQgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsQ29sdW1ucyBUb3RhbCBudW1iZXIgb2YgY29sdW1ucy5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGNvbHVtbldpZHRoRm4gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGF0IGEgZ2l2ZW4gaW5kZXggKGluIHB4KS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IG92ZXJyaWRlRm4gRnVuY3Rpb24gdGhhdCBjaGFuZ2VzIGNhbGN1bGF0ZWQgdGhpcy5zdGFydFJvdywgdGhpcy5lbmRSb3cgKHVzZWQgYnlcbiAqICAgTWVyZ2VDZWxscyBwbHVnaW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhbGN1bGF0aW9uVHlwZSBTdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHR5cGVzIG9mIGNhbGN1bGF0aW9uIHdoaWNoIHdpbGwgYmUgcGVyZm9ybWVkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlubGluZVN0YXJ0T2Zmc2V0IElubGluZS1zdGFydCBvZmZzZXQgb2YgdGhlIHBhcmVudCBjb250YWluZXIuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc3RyZXRjaE1vZGUgU3RyZXRjaCBtb2RlICdhbGwnIG9yICdsYXN0Jy5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV3IHdpZHRoIG9mIHRoZSBzdHJldGNoZWQgY29sdW1uLlxuICovXG4vKipcbiAqIENhbGN1bGF0ZXMgaW5kZXhlcyBvZiBjb2x1bW5zIHRvIHJlbmRlciBPUiBjb2x1bW5zIHRoYXQgYXJlIHZpc2libGUuXG4gKiBUbyByZWRvIHRoZSBjYWxjdWxhdGlvbiwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbmV3IGNhbGN1bGF0b3IuXG4gKlxuICogQGNsYXNzIFZpZXdwb3J0Q29sdW1uc0NhbGN1bGF0b3JcbiAqL1xudmFyIF9vcHRpb25zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgY29sdW1uIHdpZHRoLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldCBERUZBVUxUX1dJRFRIKCkge1xuICAgIHJldHVybiA1MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVuZGVyZWQvdmlzaWJsZSBjb2x1bW5zLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yT3B0aW9uc30gb3B0aW9ucyBPYmplY3Qgd2l0aCBhbGwgb3B0aW9ucyBzcGVjaWZpZWQgZm9yIGNvbHVtbiB2aWV3cG9ydCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb3VudFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZmlyc3QgcmVuZGVyZWQvdmlzaWJsZSBjb2x1bW4gKGNhbiBiZSBvdmVyd3JpdHRlbiB1c2luZyBvdmVycmlkZUZuKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ8bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFydENvbHVtblwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgbGFzdCByZW5kZXJlZC92aXNpYmxlIGNvbHVtbiAoY2FuIGJlIG92ZXJ3cml0dGVuIHVzaW5nIG92ZXJyaWRlRm4pLlxuICAgICAqXG4gICAgICogQHR5cGUge251bGx9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZW5kQ29sdW1uXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSBmaXJzdCByZW5kZXJlZC92aXNpYmxlIGNvbHVtbiAoaW4gcHgpLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcnxudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0UG9zaXRpb25cIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmlld3BvcnQgaXMgdmlzaWJsZSBpbiB0aGUgdHJpbW1pbmcgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lclwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogVGhlIGNhbGN1bGF0b3Igb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yT3B0aW9uc31cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfb3B0aW9ucywgdm9pZCAwKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX29wdGlvbnMsIHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2FsY3VsYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB2aWV3cG9ydC5cbiAgICovXG4gIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYWxjdWxhdGlvblR5cGUsXG4gICAgICBvdmVycmlkZUZuLFxuICAgICAgc2Nyb2xsT2Zmc2V0LFxuICAgICAgdG90YWxDb2x1bW5zLFxuICAgICAgdmlld3BvcnRXaWR0aFxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpO1xuICAgIGNvbnN0IHplcm9CYXNlZFNjcm9sbE9mZnNldCA9IE1hdGgubWF4KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuc2Nyb2xsT2Zmc2V0LCAwKTtcbiAgICAvLyArMSBwaXhlbCBmb3Igcm93IGhlYWRlciB3aWR0aCBjb21wZW5zYXRpb24gZm9yIGhvcml6b250YWwgc2Nyb2xsID4gMFxuICAgIGNvbnN0IGNvbXBlbnNhdGVkVmlld3BvcnRXaWR0aCA9IHplcm9CYXNlZFNjcm9sbE9mZnNldCA+IDAgPyB2aWV3cG9ydFdpZHRoICsgMSA6IHZpZXdwb3J0V2lkdGg7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgbGV0IG5lZWRSZXZlcnNlID0gdHJ1ZTtcbiAgICBjb25zdCBzdGFydFBvc2l0aW9ucyA9IFtdO1xuICAgIGxldCBjb2x1bW5XaWR0aDtcbiAgICBsZXQgZmlyc3RWaXNpYmxlQ29sdW1uV2lkdGggPSAwO1xuICAgIGxldCBsYXN0VmlzaWJsZUNvbHVtbldpZHRoID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRvdGFsQ29sdW1uczsgaSsrKSB7XG4gICAgICBjb2x1bW5XaWR0aCA9IHRoaXMuX2dldENvbHVtbldpZHRoKGkpO1xuICAgICAgaWYgKHN1bSA8PSB6ZXJvQmFzZWRTY3JvbGxPZmZzZXQgJiYgY2FsY3VsYXRpb25UeXBlICE9PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSkge1xuICAgICAgICB0aGlzLnN0YXJ0Q29sdW1uID0gaTtcbiAgICAgICAgZmlyc3RWaXNpYmxlQ29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmIChzdW0gPj0gemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0ICYmIHN1bSArIChjYWxjdWxhdGlvblR5cGUgPT09IF9jb25zdGFudHMuRlVMTFlfVklTSUJMRV9UWVBFID8gY29sdW1uV2lkdGggOiAwKSA8PSB6ZXJvQmFzZWRTY3JvbGxPZmZzZXQgKyBjb21wZW5zYXRlZFZpZXdwb3J0V2lkdGgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRDb2x1bW4gPT09IG51bGwgfHwgdGhpcy5zdGFydENvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zdGFydENvbHVtbiA9IGk7XG4gICAgICAgICAgZmlyc3RWaXNpYmxlQ29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuZENvbHVtbiA9IGk7XG4gICAgICB9XG4gICAgICBzdGFydFBvc2l0aW9ucy5wdXNoKHN1bSk7XG4gICAgICBzdW0gKz0gY29sdW1uV2lkdGg7XG4gICAgICBsYXN0VmlzaWJsZUNvbHVtbldpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgICBpZiAoY2FsY3VsYXRpb25UeXBlICE9PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSkge1xuICAgICAgICB0aGlzLmVuZENvbHVtbiA9IGk7XG4gICAgICB9XG4gICAgICBpZiAoc3VtID49IHplcm9CYXNlZFNjcm9sbE9mZnNldCArIHZpZXdwb3J0V2lkdGgpIHtcbiAgICAgICAgbmVlZFJldmVyc2UgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG1vc3RSaWdodFNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHZpZXdwb3J0V2lkdGggLSBjb21wZW5zYXRlZFZpZXdwb3J0V2lkdGg7XG4gICAgY29uc3QgaW5saW5lRW5kQ29sdW1uT2Zmc2V0ID0gY2FsY3VsYXRpb25UeXBlID09PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSA/IDAgOiBsYXN0VmlzaWJsZUNvbHVtbldpZHRoO1xuICAgIGNvbnN0IGlubGluZVN0YXJ0Q29sdW1uT2Zmc2V0ID0gY2FsY3VsYXRpb25UeXBlID09PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSA/IGZpcnN0VmlzaWJsZUNvbHVtbldpZHRoIDogMDtcbiAgICBpZiAoXG4gICAgLy8gdGhlIHRhYmxlIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB2aWV3cG9ydFxuICAgIG1vc3RSaWdodFNjcm9sbE9mZnNldCA8IC0xICogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5pbmxpbmVTdGFydE9mZnNldCB8fCBzY3JvbGxPZmZzZXQgPiBzdGFydFBvc2l0aW9ucy5hdCgtMSkgKyBpbmxpbmVFbmRDb2x1bW5PZmZzZXQgfHxcbiAgICAvLyB0aGUgdGFibGUgaXMgdG8gdGhlIHJpZ2h0IG9mIHRoZSB2aWV3cG9ydFxuICAgIC0xICogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5zY3JvbGxPZmZzZXQgLSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpLnZpZXdwb3J0V2lkdGggPiAtMSAqIGlubGluZVN0YXJ0Q29sdW1uT2Zmc2V0KSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZW5kQ29sdW1uID09PSB0b3RhbENvbHVtbnMgLSAxICYmIG5lZWRSZXZlcnNlKSB7XG4gICAgICB0aGlzLnN0YXJ0Q29sdW1uID0gdGhpcy5lbmRDb2x1bW47XG4gICAgICB3aGlsZSAodGhpcy5zdGFydENvbHVtbiA+IDApIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRTdW0gPSBzdGFydFBvc2l0aW9uc1t0aGlzLmVuZENvbHVtbl0gKyBjb2x1bW5XaWR0aCAtIHN0YXJ0UG9zaXRpb25zW3RoaXMuc3RhcnRDb2x1bW4gLSAxXTtcbiAgICAgICAgaWYgKHZpZXdwb3J0U3VtIDw9IHZpZXdwb3J0V2lkdGggfHwgY2FsY3VsYXRpb25UeXBlICE9PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSkge1xuICAgICAgICAgIHRoaXMuc3RhcnRDb2x1bW4gLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlld3BvcnRTdW0gPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGN1bGF0aW9uVHlwZSA9PT0gX2NvbnN0YW50cy5SRU5ERVJfVFlQRSAmJiB0aGlzLnN0YXJ0Q29sdW1uICE9PSBudWxsICYmIG92ZXJyaWRlRm4pIHtcbiAgICAgIG92ZXJyaWRlRm4odGhpcyk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb25zW3RoaXMuc3RhcnRDb2x1bW5dO1xuICAgIGlmICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJZiB0b3RhbENvbHVtbnMgZXhjZWVkZWQgaXRzIHRvdGFsIGNvbHVtbnMgc2l6ZSBzZXQgZW5kQ29sdW1uIHRvIHRoZSBsYXRlc3QgaXRlbVxuICAgIGlmICh0b3RhbENvbHVtbnMgPCB0aGlzLmVuZENvbHVtbikge1xuICAgICAgdGhpcy5lbmRDb2x1bW4gPSB0b3RhbENvbHVtbnMgLSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGFydENvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb3VudCA9IHRoaXMuZW5kQ29sdW1uIC0gdGhpcy5zdGFydENvbHVtbiArIDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29sdW1uV2lkdGgoY29sdW1uKSB7XG4gICAgbGV0IHdpZHRoID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5jb2x1bW5XaWR0aEZuKGNvbHVtbik7XG4gICAgaWYgKGlzTmFOKHdpZHRoKSkge1xuICAgICAgd2lkdGggPSBWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yLkRFRkFVTFRfV0lEVEg7XG4gICAgfVxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxufVxuZXhwb3J0cy5WaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yID0gVmlld3BvcnRDb2x1bW5zQ2FsY3VsYXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmF0LmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFZpZXdwb3J0Um93c0NhbGN1bGF0b3JPcHRpb25zXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmlld3BvcnRIZWlnaHQgSGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY3JvbGxPZmZzZXQgQ3VycmVudCB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHRvdGFsUm93cyBUb3RhbCBudW1iZXIgb2Ygcm93cy5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHJvd0hlaWdodEZuIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSByb3cgYXQgYSBnaXZlbiBpbmRleCAoaW4gcHgpLlxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gb3ZlcnJpZGVGbiBGdW5jdGlvbiB0aGF0IGNoYW5nZXMgY2FsY3VsYXRlZCB0aGlzLnN0YXJ0Um93LCB0aGlzLmVuZFJvdyAodXNlZCBieSBNZXJnZUNlbGxzIHBsdWdpbikuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FsY3VsYXRpb25UeXBlIFN0cmluZyB3aGljaCBkZXNjcmliZXMgdHlwZXMgb2YgY2FsY3VsYXRpb24gd2hpY2ggd2lsbCBiZSBwZXJmb3JtZWQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCBUaGUgc2Nyb2xsYmFyIGhlaWdodC5cbiAqL1xuLyoqXG4gKiBDYWxjdWxhdGVzIGluZGV4ZXMgb2Ygcm93cyB0byByZW5kZXIgT1Igcm93cyB0aGF0IGFyZSB2aXNpYmxlLlxuICogVG8gcmVkbyB0aGUgY2FsY3VsYXRpb24sIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBjYWxjdWxhdG9yLlxuICpcbiAqIEBjbGFzcyBWaWV3cG9ydFJvd3NDYWxjdWxhdG9yXG4gKi9cbnZhciBfb3B0aW9ucyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuY2xhc3MgVmlld3BvcnRSb3dzQ2FsY3VsYXRvciB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvdyBoZWlnaHQuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERFRkFVTFRfSEVJR0hUKCkge1xuICAgIHJldHVybiAyMztcbiAgfVxuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVuZGVyZWQvdmlzaWJsZSByb3dzLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtWaWV3cG9ydFJvd3NDYWxjdWxhdG9yT3B0aW9uc30gb3B0aW9ucyBPYmplY3Qgd2l0aCBhbGwgb3B0aW9ucyBzcGVjaWZpZWQgZm9yIHJvdyB2aWV3cG9ydCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb3VudFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZmlyc3QgcmVuZGVyZWQvdmlzaWJsZSByb3cgKGNhbiBiZSBvdmVyd3JpdHRlbiB1c2luZyBvdmVycmlkZUZuKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ8bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGFydFJvd1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgbGFzdCByZW5kZXJlZC92aXNpYmxlIHJvdyAoY2FuIGJlIG92ZXJ3cml0dGVuIHVzaW5nIG92ZXJyaWRlRm4pLlxuICAgICAqXG4gICAgICogQHR5cGUge251bGx9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZW5kUm93XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFBvc2l0aW9uIG9mIHRoZSBmaXJzdCByZW5kZXJlZC92aXNpYmxlIHJvdyAoaW4gcHgpLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcnxudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0UG9zaXRpb25cIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgdmlld3BvcnQgaXMgdmlzaWJsZSBpbiB0aGUgdHJpbW1pbmcgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lclwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogVGhlIGNhbGN1bGF0b3Igb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtWaWV3cG9ydFJvd3NDYWxjdWxhdG9yT3B0aW9uc31cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfb3B0aW9ucywgdm9pZCAwKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX29wdGlvbnMsIHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2FsY3VsYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB2aWV3cG9ydC5cbiAgICovXG4gIGNhbGN1bGF0ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYWxjdWxhdGlvblR5cGUsXG4gICAgICBvdmVycmlkZUZuLFxuICAgICAgcm93SGVpZ2h0Rm4sXG4gICAgICBzY3JvbGxPZmZzZXQsXG4gICAgICB0b3RhbFJvd3MsXG4gICAgICB2aWV3cG9ydEhlaWdodFxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpO1xuICAgIGNvbnN0IHplcm9CYXNlZFNjcm9sbE9mZnNldCA9IE1hdGgubWF4KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuc2Nyb2xsT2Zmc2V0LCAwKTtcbiAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IHx8IDA7XG4gICAgY29uc3QgaW5uZXJWaWV3cG9ydEhlaWdodCA9IHplcm9CYXNlZFNjcm9sbE9mZnNldCArIHZpZXdwb3J0SGVpZ2h0IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDtcbiAgICBsZXQgc3VtID0gMDtcbiAgICBsZXQgbmVlZFJldmVyc2UgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0UG9zaXRpb25zID0gW107XG4gICAgbGV0IHJvd0hlaWdodDtcbiAgICBsZXQgZmlyc3RWaXNpYmxlUm93SGVpZ2h0ID0gMDtcbiAgICBsZXQgbGFzdFZpc2libGVSb3dIZWlnaHQgPSAwO1xuXG4gICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgKHN0YXJ0IGFuZCBlbmQgaW5kZXgpIG9mIHJvd3MgbmVlZGVkXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbFJvd3M7IGkrKykge1xuICAgICAgcm93SGVpZ2h0ID0gcm93SGVpZ2h0Rm4oaSk7XG4gICAgICBpZiAoaXNOYU4ocm93SGVpZ2h0KSkge1xuICAgICAgICByb3dIZWlnaHQgPSBWaWV3cG9ydFJvd3NDYWxjdWxhdG9yLkRFRkFVTFRfSEVJR0hUO1xuICAgICAgfVxuICAgICAgaWYgKHN1bSA8PSB6ZXJvQmFzZWRTY3JvbGxPZmZzZXQgJiYgY2FsY3VsYXRpb25UeXBlICE9PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSkge1xuICAgICAgICB0aGlzLnN0YXJ0Um93ID0gaTtcbiAgICAgICAgZmlyc3RWaXNpYmxlUm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKHN1bSA+PSB6ZXJvQmFzZWRTY3JvbGxPZmZzZXQgJiYgc3VtICsgKGNhbGN1bGF0aW9uVHlwZSA9PT0gX2NvbnN0YW50cy5GVUxMWV9WSVNJQkxFX1RZUEUgPyByb3dIZWlnaHQgOiAwKSA8PSBpbm5lclZpZXdwb3J0SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zdGFydFJvdyA9IGk7XG4gICAgICAgICAgZmlyc3RWaXNpYmxlUm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kUm93ID0gaTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0UG9zaXRpb25zLnB1c2goc3VtKTtcbiAgICAgIHN1bSArPSByb3dIZWlnaHQ7XG4gICAgICBsYXN0VmlzaWJsZVJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgIGlmIChjYWxjdWxhdGlvblR5cGUgIT09IF9jb25zdGFudHMuRlVMTFlfVklTSUJMRV9UWVBFKSB7XG4gICAgICAgIHRoaXMuZW5kUm93ID0gaTtcbiAgICAgIH1cbiAgICAgIGlmIChzdW0gPj0gaW5uZXJWaWV3cG9ydEhlaWdodCkge1xuICAgICAgICBuZWVkUmV2ZXJzZSA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbW9zdEJvdHRvbVNjcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHZpZXdwb3J0SGVpZ2h0IC0gaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDtcbiAgICBjb25zdCB0b3BSb3dPZmZzZXQgPSBjYWxjdWxhdGlvblR5cGUgPT09IF9jb25zdGFudHMuRlVMTFlfVklTSUJMRV9UWVBFID8gZmlyc3RWaXNpYmxlUm93SGVpZ2h0IDogMDtcbiAgICBjb25zdCBib3R0b21Sb3dPZmZzZXQgPSBjYWxjdWxhdGlvblR5cGUgPT09IF9jb25zdGFudHMuRlVMTFlfVklTSUJMRV9UWVBFID8gMCA6IGxhc3RWaXNpYmxlUm93SGVpZ2h0O1xuICAgIGlmIChtb3N0Qm90dG9tU2Nyb2xsT2Zmc2V0IDwgdG9wUm93T2Zmc2V0IHx8IHNjcm9sbE9mZnNldCA+IHN0YXJ0UG9zaXRpb25zLmF0KC0xKSArIGJvdHRvbVJvd09mZnNldCkge1xuICAgICAgdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGVzdGltYXRpb24gaGFzIHJlYWNoZWQgdGhlIGxhc3Qgcm93IGFuZCB0aGVyZSBpcyBzdGlsbCBzb21lIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgdmlld3BvcnQsXG4gICAgLy8gd2UgbmVlZCB0byByZW5kZXIgaW4gcmV2ZXJzZSBpbiBvcmRlciB0byBmaWxsIHRoZSB3aG9sZSB2aWV3cG9ydCB3aXRoIHJvd3NcbiAgICBpZiAodGhpcy5lbmRSb3cgPT09IHRvdGFsUm93cyAtIDEgJiYgbmVlZFJldmVyc2UpIHtcbiAgICAgIHRoaXMuc3RhcnRSb3cgPSB0aGlzLmVuZFJvdztcbiAgICAgIHdoaWxlICh0aGlzLnN0YXJ0Um93ID4gMCkge1xuICAgICAgICAvLyByb3dIZWlnaHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgbGFzdCByb3dcbiAgICAgICAgY29uc3Qgdmlld3BvcnRTdW0gPSBzdGFydFBvc2l0aW9uc1t0aGlzLmVuZFJvd10gKyByb3dIZWlnaHQgLSBzdGFydFBvc2l0aW9uc1t0aGlzLnN0YXJ0Um93IC0gMV07XG4gICAgICAgIGlmICh2aWV3cG9ydFN1bSA8PSB2aWV3cG9ydEhlaWdodCAtIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQgfHwgY2FsY3VsYXRpb25UeXBlICE9PSBfY29uc3RhbnRzLkZVTExZX1ZJU0lCTEVfVFlQRSkge1xuICAgICAgICAgIHRoaXMuc3RhcnRSb3cgLT0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlld3BvcnRTdW0gPj0gdmlld3BvcnRIZWlnaHQgLSBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNhbGN1bGF0aW9uVHlwZSA9PT0gX2NvbnN0YW50cy5SRU5ERVJfVFlQRSAmJiB0aGlzLnN0YXJ0Um93ICE9PSBudWxsICYmIG92ZXJyaWRlRm4pIHtcbiAgICAgIG92ZXJyaWRlRm4odGhpcyk7XG4gICAgfVxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb25zW3RoaXMuc3RhcnRSb3ddO1xuICAgIGlmICh0aGlzLnN0YXJ0UG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGFydFBvc2l0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBJZiB0b3RhbFJvd3MgZXhjZWVkZWQgaXRzIHRvdGFsIHJvd3Mgc2l6ZSBzZXQgZW5kUm93IHRvIHRoZSBsYXRlc3QgaXRlbVxuICAgIGlmICh0b3RhbFJvd3MgPCB0aGlzLmVuZFJvdykge1xuICAgICAgdGhpcy5lbmRSb3cgPSB0b3RhbFJvd3MgLSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGFydFJvdyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5jb3VudCA9IHRoaXMuZW5kUm93IC0gdGhpcy5zdGFydFJvdyArIDE7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLlZpZXdwb3J0Um93c0NhbGN1bGF0b3IgPSBWaWV3cG9ydFJvd3NDYWxjdWxhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbnZhciBfaXNSdGwgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVGhlIGBDZWxsQ29vcmRzYCBjbGFzcyBob2xkcyB0aGUgY29vcmRpbmF0ZXMgKGByb3dgLCBgY29sYCkgb2YgYSBzaW5nbGUgY2VsbC5cbiAqXG4gKiBJdCBhbHNvIGNvbnRhaW5zIG1ldGhvZHMgZm9yIHZhbGlkYXRpbmcgdGhlIGNvb3JkaW5hdGVzXG4gKiBhbmQgcmV0cmlldmluZyB0aGVtIGFzIGFuIG9iamVjdC5cbiAqXG4gKiBUbyBpbXBvcnQgdGhlIGBDZWxsQ29vcmRzYCBjbGFzczpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IEhhbmRzb250YWJsZSwgeyBDZWxsQ29vcmRzIH0gZnJvbSAnL2hhbmRzb250YWJsZSc7XG4gKlxuICogLy8gb3IsIHVzaW5nIG1vZHVsZXNcbiAqIGltcG9ydCBIYW5kc29udGFibGUsIHsgQ2VsbENvb3JkcyB9IGZyb20gJy9oYW5kc29udGFibGUvYmFzZSc7XG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2VsbENvb3JkcyB7XG4gIGNvbnN0cnVjdG9yKHJvdywgY29sdW1uKSB7XG4gICAgbGV0IGlzUnRsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBBIHZpc3VhbCByb3cgaW5kZXguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBBIGZsYWcgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgY29vcmRpbmF0ZXMgcnVuIGluIFJUTCBtb2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2lzUnRsLCBmYWxzZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1J0bCwgdGhpcywgaXNSdGwpO1xuICAgIGlmICh0eXBlb2Ygcm93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29sdW1uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5yb3cgPSByb3c7XG4gICAgICB0aGlzLmNvbCA9IGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb29yZGluYXRlcyBpbiB5b3VyIGBDZWxsQ29vcmRzYCBpbnN0YW5jZSBhcmUgdmFsaWRcbiAgICogaW4gdGhlIGNvbnRleHQgb2YgZ2l2ZW4gdGFibGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhlIGByb3dgIGluZGV4OlxuICAgKiAtIE11c3QgYmUgYW4gaW50ZWdlci5cbiAgICogLSBNdXN0IGJlIGhpZ2hlciB0aGFuIHRoZSBudW1iZXIgb2YgY29sdW1uIGhlYWRlcnMgaW4gdGhlIHRhYmxlLlxuICAgKiAtIE11c3QgYmUgbG93ZXIgdGhhbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBUaGUgYGNvbGAgaW5kZXg6XG4gICAqIC0gTXVzdCBiZSBhbiBpbnRlZ2VyLlxuICAgKiAtIE11c3QgYmUgaGlnaGVyIHRoYW4gdGhlIG51bWJlciBvZiByb3cgaGVhZGVycyBpbiB0aGUgdGFibGUuXG4gICAqIC0gTXVzdCBiZSBsb3dlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbdGFibGVQYXJhbXNdIEFuIG9iamVjdCB3aXRoIGEgZGVmaW5lZCB0YWJsZSBzaXplLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3RhYmxlUGFyYW1zLmNvdW50Um93cz0wXSBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGFibGVQYXJhbXMuY291bnRDb2xzPTBdIFRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0YWJsZVBhcmFtcy5jb3VudFJvd0hlYWRlcnM9MF0gQSBudW1iZXIgb2Ygcm93IGhlYWRlcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdGFibGVQYXJhbXMuY291bnRDb2xIZWFkZXJzPTBdIEEgbnVtYmVyIG9mIGNvbHVtbiBoZWFkZXJzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgOiBUaGUgY29vcmRpbmF0ZXMgYXJlIHZhbGlkLlxuICAgKi9cbiAgaXNWYWxpZCh0YWJsZVBhcmFtcykge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvdW50Um93cyxcbiAgICAgIGNvdW50Q29scyxcbiAgICAgIGNvdW50Um93SGVhZGVycyxcbiAgICAgIGNvdW50Q29sSGVhZGVyc1xuICAgIH0gPSB7XG4gICAgICBjb3VudFJvd3M6IDAsXG4gICAgICBjb3VudENvbHM6IDAsXG4gICAgICBjb3VudFJvd0hlYWRlcnM6IDAsXG4gICAgICBjb3VudENvbEhlYWRlcnM6IDAsXG4gICAgICAuLi50YWJsZVBhcmFtc1xuICAgIH07XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMucm93KSB8fCAhTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvbCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucm93IDwgLWNvdW50Q29sSGVhZGVycyB8fCB0aGlzLmNvbCA8IC1jb3VudFJvd0hlYWRlcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucm93ID49IGNvdW50Um93cyB8fCB0aGlzLmNvbCA+PSBjb3VudENvbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFub3RoZXIgc2V0IG9mIGNvb3JkaW5hdGVzIChgY29vcmRzYClcbiAgICogaXMgZXF1YWwgdG8gdGhlIGNvb3JkaW5hdGVzIGluIHlvdXIgYENlbGxDb29yZHNgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZGluYXRlcyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VxdWFsKGNvb3Jkcykge1xuICAgIGlmIChjb29yZHMgPT09IHRoaXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yb3cgPT09IGNvb3Jkcy5yb3cgJiYgdGhpcy5jb2wgPT09IGNvb3Jkcy5jb2w7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb29yZGluYXRlcyBwb2ludCB0byB0aGUgaGVhZGVycyByYW5nZS4gSWYgb25lIG9mIHRoZSBheGlzIChyb3cgb3IgY29sKSBwb2ludCB0b1xuICAgKiB0aGUgaGVhZGVyIChuZWdhdGl2ZSB2YWx1ZSkgdGhlbiBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNIZWFkZXIoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzQ2VsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29vcmRpbmF0ZXMgcG9pbnQgdG8gdGhlIGNlbGxzIHJhbmdlLiBJZiBhbGwgYXhpcyAocm93IGFuZCBjb2wpIHBvaW50IHRvXG4gICAqIHRoZSBjZWxsIChwb3NpdGl2ZSB2YWx1ZSkgdGhlbiBtZXRob2QgcmV0dXJucyBgdHJ1ZWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLnJvdyA+PSAwICYmIHRoaXMuY29sID49IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb29yZGluYXRlcyBydW5zIGluIFJUTCBtb2RlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUnRsKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUnRsLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5vdGhlciBzZXQgb2YgY29vcmRpbmF0ZXMgKGB0ZXN0ZWRDb29yZHNgKVxuICAgKiBpcyBzb3V0aC1lYXN0IG9mIHRoZSBjb29yZGluYXRlcyBpbiB5b3VyIGBDZWxsQ29vcmRzYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSB0ZXN0ZWRDb29yZHMgQ29vcmRpbmF0ZXMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTb3V0aEVhc3RPZih0ZXN0ZWRDb29yZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yb3cgPj0gdGVzdGVkQ29vcmRzLnJvdyAmJiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyB0aGlzLmNvbCA8PSB0ZXN0ZWRDb29yZHMuY29sIDogdGhpcy5jb2wgPj0gdGVzdGVkQ29vcmRzLmNvbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFub3RoZXIgc2V0IG9mIGNvb3JkaW5hdGVzIChgdGVzdGVkQ29vcmRzYClcbiAgICogaXMgbm9ydGgtd2VzdCBvZiB0aGUgY29vcmRpbmF0ZXMgaW4geW91ciBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gdGVzdGVkQ29vcmRzIENvb3JkaW5hdGVzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTm9ydGhXZXN0T2YodGVzdGVkQ29vcmRzKSB7XG4gICAgcmV0dXJuIHRoaXMucm93IDw9IHRlc3RlZENvb3Jkcy5yb3cgJiYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNSdGwsIHRoaXMpID8gdGhpcy5jb2wgPj0gdGVzdGVkQ29vcmRzLmNvbCA6IHRoaXMuY29sIDw9IHRlc3RlZENvb3Jkcy5jb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbm90aGVyIHNldCBvZiBjb29yZGluYXRlcyAoYHRlc3RlZENvb3Jkc2ApXG4gICAqIGlzIHNvdXRoLXdlc3Qgb2YgdGhlIGNvb3JkaW5hdGVzIGluIHlvdXIgYENlbGxDb29yZHNgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRlc3RlZENvb3JkcyBDb29yZGluYXRlcyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NvdXRoV2VzdE9mKHRlc3RlZENvb3Jkcykge1xuICAgIHJldHVybiB0aGlzLnJvdyA+PSB0ZXN0ZWRDb29yZHMucm93ICYmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUnRsLCB0aGlzKSA/IHRoaXMuY29sID49IHRlc3RlZENvb3Jkcy5jb2wgOiB0aGlzLmNvbCA8PSB0ZXN0ZWRDb29yZHMuY29sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5vdGhlciBzZXQgb2YgY29vcmRpbmF0ZXMgKGB0ZXN0ZWRDb29yZHNgKVxuICAgKiBpcyBub3J0aC1lYXN0IG9mIHRoZSBjb29yZGluYXRlcyBpbiB5b3VyIGBDZWxsQ29vcmRzYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSB0ZXN0ZWRDb29yZHMgQ29vcmRpbmF0ZXMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNOb3J0aEVhc3RPZih0ZXN0ZWRDb29yZHMpIHtcbiAgICByZXR1cm4gdGhpcy5yb3cgPD0gdGVzdGVkQ29vcmRzLnJvdyAmJiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyB0aGlzLmNvbCA8PSB0ZXN0ZWRDb29yZHMuY29sIDogdGhpcy5jb2wgPj0gdGVzdGVkQ29vcmRzLmNvbCk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyB0aGUgY29vcmRpbmF0ZXMgaW4geW91ciBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UgdG8gdGhlIG5lYXJlc3QgdmFsaWQgcG9zaXRpb24uXG4gICAqXG4gICAqIENvb3JkaW5hdGVzIHRoYXQgcG9pbnQgdG8gaGVhZGVycyAobmVnYXRpdmUgdmFsdWVzKSBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgbm9ybWFsaXplKCkge1xuICAgIHRoaXMucm93ID0gdGhpcy5yb3cgPT09IG51bGwgPyB0aGlzLnJvdyA6IE1hdGgubWF4KHRoaXMucm93LCAwKTtcbiAgICB0aGlzLmNvbCA9IHRoaXMuY29sID09PSBudWxsID8gdGhpcy5jb2wgOiBNYXRoLm1heCh0aGlzLmNvbCwgMCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWducyB0aGUgY29vcmRpbmF0ZXMgZnJvbSBhbm90aGVyIGBDZWxsQ29vcmRzYCBpbnN0YW5jZSAob3IgY29tcGF0aWJsZSBsaXRlcmFsIG9iamVjdClcbiAgICogdG8geW91ciBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3JkcyB8IHsgcm93OiBudW1iZXIgfCB1bmRlZmluZWQsIGNvbDogbnVtYmVyIHwgdW5kZWZpbmVkIH19IGNvb3JkcyBUaGUgQ2VsbENvb3Jkc1xuICAgKiBpbnN0YW5jZSBvciBjb21wYXRpYmxlIGxpdGVyYWwgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGFzc2lnbihjb29yZHMpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb29yZHMgPT09IG51bGwgfHwgY29vcmRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb29yZHMucm93KSkge1xuICAgICAgdGhpcy5yb3cgPSBjb29yZHMucm93O1xuICAgIH1cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb29yZHMgPT09IG51bGwgfHwgY29vcmRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb29yZHMuY29sKSkge1xuICAgICAgdGhpcy5jb2wgPSBjb29yZHMuY29sO1xuICAgIH1cbiAgICBpZiAoY29vcmRzIGluc3RhbmNlb2YgQ2VsbENvb3Jkcykge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1J0bCwgdGhpcywgY29vcmRzLmlzUnRsKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZXMgeW91ciBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBDZWxsQ29vcmRzKHRoaXMucm93LCB0aGlzLmNvbCwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHlvdXIgYENlbGxDb29yZHNgIGluc3RhbmNlIGludG8gYW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBgcm93YCBhbmQgYGNvbGAgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHJldHVybnMge3tyb3c6IG51bWJlciwgY29sOiBudW1iZXJ9fSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgdG9PYmplY3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvdzogdGhpcy5yb3csXG4gICAgICBjb2w6IHRoaXMuY29sXG4gICAgfTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQ2VsbENvb3JkczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2Nvb3JkcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vLi4vY2VsbC9jb29yZHNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVGhlIGBDZWxsUmFuZ2VgIGNsYXNzIGhvbGRzIGEgc2V0IG9mIGNlbGwgY29vcmRpbmF0ZXMgKFtgQ2VsbENvb3Jkc2BdKEAvYXBpL2NlbGxDb29yZHMubWQpIGluc3RhbmNlcylcbiAqIHRoYXQgZm9ybSBhIFtzZWxlY3Rpb24gcmFuZ2VdKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvc2VsZWN0aW9uL3NlbGVjdGlvbi5tZCNzZWxlY3QtcmFuZ2VzKS5cbiAqXG4gKiBBIHNpbmdsZSBgQ2VsbFJhbmdlYCBpbnN0YW5jZSByZXByZXNlbnRzIGEgc2luZ2xlIHVuaXQgb2Ygc2VsZWN0aW9uXG4gKiB0aGF0IGNvbnRhaW5zIGVpdGhlciBhIHNpbmdsZSBjZWxsIG9yIG11bHRpcGxlIGFkamFjZW50IGNlbGxzLlxuICpcbiAqIFRvIGltcG9ydCB0aGUgYENlbGxSYW5nZWAgY2xhc3M6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCBIYW5kc29udGFibGUsIHsgQ2VsbFJhbmdlIH0gZnJvbSAnL2hhbmRzb250YWJsZSc7XG4gKlxuICogLy8gb3IsIHVzaW5nIG1vZHVsZXNcbiAqIGltcG9ydCBIYW5kc29udGFibGUsIHsgQ2VsbFJhbmdlIH0gZnJvbSAnL2hhbmRzb250YWJsZS9iYXNlJztcbiAqIGBgYFxuICovXG52YXIgX2lzUnRsID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBDZWxsUmFuZ2Uge1xuICBjb25zdHJ1Y3RvcihoaWdobGlnaHQpIHtcbiAgICBsZXQgZnJvbSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogaGlnaGxpZ2h0O1xuICAgIGxldCB0byA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogaGlnaGxpZ2h0O1xuICAgIGxldCBpc1J0bCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gICAgLyoqXG4gICAgICogVXNlZCB0byBkcmF3IGJvbGQgYm9yZGVyIGFyb3VuZCBhIGNlbGwgd2hlcmUgc2VsZWN0aW9uIHdhcyBzdGFydGVkIGFuZCB0byBlZGl0IHRoZSBjZWxsXG4gICAgICogd2hlbiB5b3UgcHJlc3MgRW50ZXIuIFRoZSBoaWdobGlnaHQgY2Fubm90IHBvaW50IHRvIGhlYWRlcnMgKG5lZ2F0aXZlIHZhbHVlcykgc28gaXRzXG4gICAgICogY29vcmRpbmF0ZXMgb2JqZWN0IGlzIG5vcm1hbGl6ZWQgd2hpbGUgYXNzaWduaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Q2VsbENvb3Jkc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoaWdobGlnaHRcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogVXN1YWxseSB0aGUgc2FtZSBhcyBoaWdobGlnaHQsIGJ1dCBpbiBFeGNlbCB0aGVyZSBpcyBkaXN0aW5jdGlvbiAtIG9uZSBjYW4gY2hhbmdlXG4gICAgICogaGlnaGxpZ2h0IHdpdGhpbiBhIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0NlbGxDb29yZHN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZnJvbVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBFbmQgc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Q2VsbENvb3Jkc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0b1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaXNSdGwsIGZhbHNlKTtcbiAgICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodC5jbG9uZSgpO1xuICAgIHRoaXMuZnJvbSA9IGZyb20uY2xvbmUoKTtcbiAgICB0aGlzLnRvID0gdG8uY2xvbmUoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lzUnRsLCB0aGlzLCBpc1J0bCk7XG4gIH1cblxuICAvKipcbiAgICogSGlnaGxpZ2h0cyBjZWxsIHNlbGVjdGlvbiBhdCB0aGUgYGNvb3Jkc2AgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIENvb3JkaW5hdGVzIHRvIHVzZS5cbiAgICogQHJldHVybnMge0NlbGxSYW5nZX1cbiAgICovXG4gIHNldEhpZ2hsaWdodChjb29yZHMpIHtcbiAgICB0aGlzLmhpZ2hsaWdodCA9IGNvb3Jkcy5jbG9uZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBjb29yZHNgIGNvb3JkaW5hdGVzIGFzIHRoZSBzdGFydCBvZiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZGluYXRlcyB0byB1c2UuXG4gICAqIEByZXR1cm5zIHtDZWxsUmFuZ2V9XG4gICAqL1xuICBzZXRGcm9tKGNvb3Jkcykge1xuICAgIHRoaXMuZnJvbSA9IGNvb3Jkcy5jbG9uZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGBjb29yZHNgIGNvb3JkaW5hdGVzIGFzIHRoZSBlbmQgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgQ29vcmRpbmF0ZXMgdG8gdXNlLlxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlfVxuICAgKi9cbiAgc2V0VG8oY29vcmRzKSB7XG4gICAgdGhpcy50byA9IGNvb3Jkcy5jbG9uZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29vcmRpbmF0ZXMgaW4geW91ciBgQ2VsbFJhbmdlYCBpbnN0YW5jZSBhcmUgdmFsaWRcbiAgICogaW4gdGhlIGNvbnRleHQgb2YgZ2l2ZW4gdGFibGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogU2VlIHRoZSBbYGlzVmFsaWQoKWBdKEAvYXBpL2NlbGxDb29yZHMubWQjaXN2YWxpZCkgbWV0aG9kIG9mIHRoZSBbYENlbGxDb29yZHNgXShAL2FwaS9jZWxsQ29vcmRzLm1kKSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHRhYmxlUGFyYW1zIEFuIG9iamVjdCB3aXRoIGEgZGVmaW5lZCB0YWJsZSBzaXplLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFibGVQYXJhbXMuY291bnRSb3dzIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRhYmxlUGFyYW1zLmNvdW50Q29scyBUaGUgdG90YWwgbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YWJsZVBhcmFtcy5jb3VudFJvd0hlYWRlcnMgQSBudW1iZXIgb2Ygcm93IGhlYWRlcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0YWJsZVBhcmFtcy5jb3VudENvbEhlYWRlcnMgQSBudW1iZXIgb2YgY29sdW1uIGhlYWRlcnMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNWYWxpZCh0YWJsZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmZyb20uaXNWYWxpZCh0YWJsZVBhcmFtcykgJiYgdGhpcy50by5pc1ZhbGlkKHRhYmxlUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgeW91ciByYW5nZSBpcyBqdXN0IGEgc2luZ2xlIGNlbGwgb3IgaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2luZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpIHx8IHRoaXMuaXNTaW5nbGVIZWFkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgeW91ciByYW5nZSBpcyBqdXN0IGEgc2luZ2xlIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTaW5nbGVDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLmZyb20ucm93ID49IDAgJiYgdGhpcy5mcm9tLnJvdyA9PT0gdGhpcy50by5yb3cgJiYgdGhpcy5mcm9tLmNvbCA+PSAwICYmIHRoaXMuZnJvbS5jb2wgPT09IHRoaXMudG8uY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB5b3VyIHJhbmdlIGlzIGp1c3QgYSBzaW5nbGUgaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2luZ2xlSGVhZGVyKCkge1xuICAgIHJldHVybiAodGhpcy5mcm9tLnJvdyA8IDAgfHwgdGhpcy5mcm9tLmNvbCA8IDApICYmIHRoaXMuZnJvbS5yb3cgPT09IHRoaXMudG8ucm93ICYmIHRoaXMuZnJvbS5jb2wgPT09IHRoaXMudG8uY29sO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB5b3VyIHJhbmdlIGNvdmVycyBvbmx5IGhlYWRlcnMgcmFuZ2UgKG5lZ2F0aXZlIGNvb3JkaW5hdGVzLCB3aXRob3V0IGFueSBjZWxscykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNIZWFkZXIoKSB7XG4gICAgaWYgKHRoaXMuZnJvbS5pc0hlYWRlcigpICYmIHRoaXMudG8uaXNIZWFkZXIoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZyb20uY29sIDwgMCAmJiB0aGlzLnRvLmNvbCA8IDAgfHwgdGhpcy5mcm9tLnJvdyA8IDAgJiYgdGhpcy50by5yb3cgPCAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB5b3VyIHJhbmdlIG92ZXJsYXBzIGhlYWRlcnMgcmFuZ2UgKG5lZ2F0aXZlIGNvb3JkaW5hdGVzKS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb250YWluc0hlYWRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbS5pc0hlYWRlcigpIHx8IHRoaXMudG8uaXNIZWFkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgeW91ciByYW5nZSAoYXMgYSBudW1iZXIgb2Ygcm93cywgaW5jbHVkaW5nIHJvdyBoZWFkZXJzKS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE91dGVySGVpZ2h0KCkge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZyb20ucm93LCB0aGlzLnRvLnJvdykgLSBNYXRoLm1pbih0aGlzLmZyb20ucm93LCB0aGlzLnRvLnJvdykgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHlvdXIgcmFuZ2UgKGFzIGEgbnVtYmVyIG9mIGNvbHVtbnMsIGluY2x1ZGluZyBjb2x1bW4gaGVhZGVycykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRPdXRlcldpZHRoKCkge1xuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkgLSBNYXRoLm1pbih0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB5b3VyIHJhbmdlIChhcyBhIG51bWJlciBvZiByb3dzLCBleGNsdWRpbmcgcm93IGhlYWRlcnMpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb25seSByb3cgaGVhZGVycywgcmV0dXJuIDBcbiAgICBpZiAodGhpcy5mcm9tLnJvdyA8IDAgJiYgdGhpcy50by5yb3cgPCAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3QgZnJvbVJvdyA9IE1hdGgubWF4KHRoaXMuZnJvbS5yb3csIDApO1xuICAgIGNvbnN0IHRvUm93ID0gTWF0aC5tYXgodGhpcy50by5yb3csIDApO1xuICAgIHJldHVybiBNYXRoLm1heChmcm9tUm93LCB0b1JvdykgLSBNYXRoLm1pbihmcm9tUm93LCB0b1JvdykgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHlvdXIgcmFuZ2UgKGFzIGEgbnVtYmVyIG9mIGNvbHVtbnMsIGV4Y2x1ZGluZyBjb2x1bW4gaGVhZGVycykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBpZiB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIG9ubHkgY29sdW1uIGhlYWRlcnMsIHJldHVybiAwXG4gICAgaWYgKHRoaXMuZnJvbS5jb2wgPCAwICYmIHRoaXMudG8uY29sIDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IGZyb21Db2wgPSBNYXRoLm1heCh0aGlzLmZyb20uY29sLCAwKTtcbiAgICBjb25zdCB0b0NvbCA9IE1hdGgubWF4KHRoaXMudG8uY29sLCAwKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoZnJvbUNvbCwgdG9Db2wpIC0gTWF0aC5taW4oZnJvbUNvbCwgdG9Db2wpICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2VsbHMgd2l0aGluIHlvdXIgcmFuZ2UgKGV4Y2x1ZGluZyBjb2x1bW4gYW5kIHJvdyBoZWFkZXJzKS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENlbGxzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSAqIHRoaXMuZ2V0SGVpZ2h0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFub3RoZXIgc2V0IG9mIGNvb3JkaW5hdGVzIChgY2VsbENvb3Jkc2ApXG4gICAqIGlzIHdpdGhpbiB0aGUgYGZyb21gIGFuZCBgdG9gIGNvb3JkaW5hdGVzIG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY2VsbENvb3JkcyBDb29yZGluYXRlcyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpbmNsdWRlcyhjZWxsQ29vcmRzKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgY29sXG4gICAgfSA9IGNlbGxDb29yZHM7XG4gICAgY29uc3QgdG9wU3RhcnQgPSB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCBib3R0b21FbmQgPSB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7XG4gICAgcmV0dXJuIHRvcFN0YXJ0LnJvdyA8PSByb3cgJiYgYm90dG9tRW5kLnJvdyA+PSByb3cgJiYgdG9wU3RhcnQuY29sIDw9IGNvbCAmJiBib3R0b21FbmQuY29sID49IGNvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5vdGhlciByYW5nZSAoYGNlbGxSYW5nZWApIGlzIHdpdGhpbiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gY2VsbFJhbmdlIEEgcmFuZ2UgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaW5jbHVkZXNSYW5nZShjZWxsUmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5pbmNsdWRlcyhjZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSAmJiB0aGlzLmluY2x1ZGVzKGNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW5vdGhlciByYW5nZSAoYGNlbGxSYW5nZWApIGlzIGVxdWFsIHRvIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBjZWxsUmFuZ2UgQSByYW5nZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VxdWFsKGNlbGxSYW5nZSkge1xuICAgIHJldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LCB0aGlzLnRvLnJvdykgPT09IE1hdGgubWluKGNlbGxSYW5nZS5mcm9tLnJvdywgY2VsbFJhbmdlLnRvLnJvdykgJiYgTWF0aC5tYXgodGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpID09PSBNYXRoLm1heChjZWxsUmFuZ2UuZnJvbS5yb3csIGNlbGxSYW5nZS50by5yb3cpICYmIE1hdGgubWluKHRoaXMuZnJvbS5jb2wsIHRoaXMudG8uY29sKSA9PT0gTWF0aC5taW4oY2VsbFJhbmdlLmZyb20uY29sLCBjZWxsUmFuZ2UudG8uY29sKSAmJiBNYXRoLm1heCh0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkgPT09IE1hdGgubWF4KGNlbGxSYW5nZS5mcm9tLmNvbCwgY2VsbFJhbmdlLnRvLmNvbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFub3RoZXIgcmFuZ2UgKGBjZWxsUmFuZ2VgKSBvdmVybGFwcyB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBSYW5nZSBBIG92ZXJsYXBzIHJhbmdlIEIgaWYgdGhlIGludGVyc2VjdGlvbiBvZiBBIGFuZCBCIChvciBCIGFuZCBBKSBpcyBub3QgZW1wdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBjZWxsUmFuZ2UgQSByYW5nZSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBvdmVybGFwcyhjZWxsUmFuZ2UpIHtcbiAgICByZXR1cm4gY2VsbFJhbmdlLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkgJiYgY2VsbFJhbmdlLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBjb29yZGluYXRlcyBwb2ludCBpcyBzb3V0aC1lYXN0IG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY2VsbENvb3JkcyBDb29yZGluYXRlcyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NvdXRoRWFzdE9mKGNlbGxDb29yZHMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGNlbGxDb29yZHMpIHx8IHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzU291dGhFYXN0T2YoY2VsbENvb3Jkcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGNvb3JkaW5hdGVzIHBvaW50IGlzIG5vcnRoLXdlc3Qgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxDb29yZHMgQ29vcmRpbmF0ZXMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNOb3J0aFdlc3RPZihjZWxsQ29vcmRzKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihjZWxsQ29vcmRzKSB8fCB0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGNlbGxDb29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbm90aGVyIHJhbmdlIChgY2VsbFJhbmdlYCkgb3ZlcmxhcHMgeW91ciByYW5nZSBob3Jpem9udGFsbHkuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOiByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGFzdCBjb2x1bW4gb2YgeW91ciByYW5nZSBpcyBgNWBcbiAgICogYW5kIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIGBjZWxsUmFuZ2VgIHJhbmdlIGlzIGAzYC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBBIHJhbmdlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkoY2VsbFJhbmdlKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wgPj0gY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wgJiYgdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCA8PSBjZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wgfHwgdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sIDw9IGNlbGxSYW5nZS5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCAmJiB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wgPj0gY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFub3RoZXIgcmFuZ2UgKGBjZWxsUmFuZ2VgKSBvdmVybGFwcyB5b3VyIHJhbmdlIHZlcnRpY2FsbHkuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOiByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbGFzdCByb3cgb2YgeW91ciByYW5nZSBpcyBgNWBcbiAgICogYW5kIHRoZSBmaXJzdCByb3cgb2YgdGhlIGBjZWxsUmFuZ2VgIHJhbmdlIGlzIGAzYC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBBIHJhbmdlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGNlbGxSYW5nZSkge1xuICAgIHJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3cgPj0gY2VsbFJhbmdlLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3cgJiYgdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93IDw9IGNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93IHx8IHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3cgPD0gY2VsbFJhbmdlLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3cgJiYgdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdyA+PSBjZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2VsbCB0byB5b3VyIHJhbmdlLCBhdCBgY2VsbENvb3Jkc2AgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIFRoZSBgY2VsbENvb3Jkc2AgY29vcmRpbmF0ZXMgbXVzdCBleGNlZWQgYSBjb3JuZXIgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjZWxsQ29vcmRzIEEgbmV3IGNlbGwncyBjb29yZGluYXRlcy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBleHBhbmQoY2VsbENvb3Jkcykge1xuICAgIGNvbnN0IHRvcFN0YXJ0ID0gdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kID0gdGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO1xuICAgIGlmIChjZWxsQ29vcmRzLnJvdyA8IHRvcFN0YXJ0LnJvdyB8fCBjZWxsQ29vcmRzLmNvbCA8IHRvcFN0YXJ0LmNvbCB8fCBjZWxsQ29vcmRzLnJvdyA+IGJvdHRvbUVuZC5yb3cgfHwgY2VsbENvb3Jkcy5jb2wgPiBib3R0b21FbmQuY29sKSB7XG4gICAgICB0aGlzLmZyb20gPSB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRvcFN0YXJ0LnJvdywgY2VsbENvb3Jkcy5yb3cpLCBNYXRoLm1pbih0b3BTdGFydC5jb2wsIGNlbGxDb29yZHMuY29sKSk7XG4gICAgICB0aGlzLnRvID0gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChib3R0b21FbmQucm93LCBjZWxsQ29vcmRzLnJvdyksIE1hdGgubWF4KGJvdHRvbUVuZC5jb2wsIGNlbGxDb29yZHMuY29sKSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCB5b3VyIHJhbmdlIHdpdGggYW5vdGhlciByYW5nZSAoYGV4cGFuZGluZ1JhbmdlYCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBleHBhbmRpbmdSYW5nZSBBIG5ldyByYW5nZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY2hhbmdlRGlyZWN0aW9uPXRydWVdIElmIGB0cnVlYCwgdGhlIGRpcmVjdGlvbiBvZiB5b3VyIHJhbmdlIGlzIGNoYW5nZWQgdG8gdGhlIGRpcmVjdGlvblxuICAgKiBvZiB0aGUgYGV4cGFuZGluZ1JhbmdlYCByYW5nZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBleHBhbmRCeVJhbmdlKGV4cGFuZGluZ1JhbmdlKSB7XG4gICAgbGV0IGNoYW5nZURpcmVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICBpZiAodGhpcy5pbmNsdWRlc1JhbmdlKGV4cGFuZGluZ1JhbmdlKSB8fCAhdGhpcy5vdmVybGFwcyhleHBhbmRpbmdSYW5nZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdG9wU3RhcnQgPSB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCBib3R0b21FbmQgPSB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7XG4gICAgY29uc3QgaW5pdGlhbERpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCk7XG4gICAgY29uc3QgZXhwYW5kaW5nVG9wU3RhcnQgPSBleHBhbmRpbmdSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgZXhwYW5kaW5nQm90dG9tRW5kID0gZXhwYW5kaW5nUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBjb25zdCByZXN1bHRUb3BSb3cgPSBNYXRoLm1pbih0b3BTdGFydC5yb3csIGV4cGFuZGluZ1RvcFN0YXJ0LnJvdyk7XG4gICAgY29uc3QgcmVzdWx0VG9wQ29sID0gTWF0aC5taW4odG9wU3RhcnQuY29sLCBleHBhbmRpbmdUb3BTdGFydC5jb2wpO1xuICAgIGNvbnN0IHJlc3VsdEJvdHRvbVJvdyA9IE1hdGgubWF4KGJvdHRvbUVuZC5yb3csIGV4cGFuZGluZ0JvdHRvbUVuZC5yb3cpO1xuICAgIGNvbnN0IHJlc3VsdEJvdHRvbUNvbCA9IE1hdGgubWF4KGJvdHRvbUVuZC5jb2wsIGV4cGFuZGluZ0JvdHRvbUVuZC5jb2wpO1xuICAgIGNvbnN0IGZpbmFsRnJvbSA9IHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMocmVzdWx0VG9wUm93LCByZXN1bHRUb3BDb2wpO1xuICAgIGNvbnN0IGZpbmFsVG8gPSB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKHJlc3VsdEJvdHRvbVJvdywgcmVzdWx0Qm90dG9tQ29sKTtcbiAgICB0aGlzLmZyb20gPSBmaW5hbEZyb207XG4gICAgdGhpcy50byA9IGZpbmFsVG87XG4gICAgdGhpcy5zZXREaXJlY3Rpb24oaW5pdGlhbERpcmVjdGlvbik7XG4gICAgaWYgKGNoYW5nZURpcmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0LnJvdyA9PT0gdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93ICYmIHRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSA9PT0gJ04tUycpIHtcbiAgICAgICAgdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0LmNvbCA9PT0gdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sICYmIHRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpID09PSAnVy1FJykge1xuICAgICAgICB0aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXM6IGAnTlctU0UnYCwgYCdORS1TVydgLCBgJ1NFLU5XJ2AsIGAnU1ctTkUnYC5cbiAgICovXG4gIGdldERpcmVjdGlvbigpIHtcbiAgICBpZiAodGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50bykpIHtcbiAgICAgIC8vIE5vcnRoV2VzdCAtIFNvdXRoRWFzdFxuICAgICAgcmV0dXJuICdOVy1TRSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKSkge1xuICAgICAgLy8gTm9ydGhFYXN0IC0gU291dGhXZXN0XG4gICAgICByZXR1cm4gJ05FLVNXJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pKSB7XG4gICAgICAvLyBTb3V0aEVhc3QgLSBOb3J0aFdlc3RcbiAgICAgIHJldHVybiAnU0UtTlcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50bykpIHtcbiAgICAgIC8vIFNvdXRoV2VzdCAtIE5vcnRoRWFzdFxuICAgICAgcmV0dXJuICdTVy1ORSc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIE9uZSBvZiB0aGUgdmFsdWVzOiBgJ05XLVNFJ2AsIGAnTkUtU1cnYCwgYCdTRS1OVydgLCBgJ1NXLU5FJ2AuXG4gICAqL1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uKSB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ05XLVNFJzpcbiAgICAgICAgW3RoaXMuZnJvbSwgdGhpcy50b10gPSBbdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSwgdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ05FLVNXJzpcbiAgICAgICAgW3RoaXMuZnJvbSwgdGhpcy50b10gPSBbdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksIHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NFLU5XJzpcbiAgICAgICAgW3RoaXMuZnJvbSwgdGhpcy50b10gPSBbdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NXLU5FJzpcbiAgICAgICAgW3RoaXMuZnJvbSwgdGhpcy50b10gPSBbdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSwgdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2ZXJ0aWNhbCBkaXJlY3Rpb24gb2YgdGhlIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlczogYE4tU2AgKG5vcnRoLT5zb3V0aCksIGBTLU5gIChzb3V0aC0+bm9ydGgpLlxuICAgKi9cbiAgZ2V0VmVydGljYWxEaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIFsnTkUtU1cnLCAnTlctU0UnXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpID4gLTEgPyAnTi1TJyA6ICdTLU4nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhvcml6b250YWwgZGlyZWN0aW9uIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXM6IGBXLUVgICh3ZXN0LT5lYXN0KSwgYEUtV2AgKGVhc3QtPndlc3QpLlxuICAgKi9cbiAgZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpIHtcbiAgICByZXR1cm4gWydOVy1TRScsICdTVy1ORSddLmluZGV4T2YodGhpcy5nZXREaXJlY3Rpb24oKSkgPiAtMSA/ICdXLUUnIDogJ0UtVyc7XG4gIH1cblxuICAvKipcbiAgICogRmxpcHMgdGhlIGRpcmVjdGlvbiBvZiB5b3VyIHJhbmdlIHZlcnRpY2FsbHkgKGUuZy4sIGBOVy1TRWAgY2hhbmdlcyB0byBgU1ctTkVgKS5cbiAgICovXG4gIGZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCkge1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuZ2V0RGlyZWN0aW9uKCk7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ05XLVNFJzpcbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb24oJ1NXLU5FJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnTkUtU1cnOlxuICAgICAgICB0aGlzLnNldERpcmVjdGlvbignU0UtTlcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdTRS1OVyc6XG4gICAgICAgIHRoaXMuc2V0RGlyZWN0aW9uKCdORS1TVycpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NXLU5FJzpcbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb24oJ05XLVNFJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZsaXBzIHRoZSBkaXJlY3Rpb24gb2YgeW91ciByYW5nZSBob3Jpem9udGFsbHkgKGUuZy4sIGBOVy1TRWAgY2hhbmdlcyB0byBgTkUtU1dgKS5cbiAgICovXG4gIGZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSB7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5nZXREaXJlY3Rpb24oKTtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnTlctU0UnOlxuICAgICAgICB0aGlzLnNldERpcmVjdGlvbignTkUtU1cnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdORS1TVyc6XG4gICAgICAgIHRoaXMuc2V0RGlyZWN0aW9uKCdOVy1TRScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NFLU5XJzpcbiAgICAgICAgdGhpcy5zZXREaXJlY3Rpb24oJ1NXLU5FJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnU1ctTkUnOlxuICAgICAgICB0aGlzLnNldERpcmVjdGlvbignU0UtTlcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdG9wLWxlZnQgKGluIExUUikgb3IgdG9wLXJpZ2h0IChpbiBSVEwpIGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIGNvcm5lciBjb29yZGluYXRlcyBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0VG9wU3RhcnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1pbih0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvcC1sZWZ0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIGNvcm5lciBjb29yZGluYXRlcyBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0VG9wTGVmdENvcm5lcigpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyB0aGlzLmdldFRvcEVuZENvcm5lcigpIDogdGhpcy5nZXRUb3BTdGFydENvcm5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJvdHRvbSByaWdodCAoaW4gTFRSKSBvciBib3R0b20gbGVmdCAoaW4gUlRMKSBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogSWYgdGhlIGNvcm5lciBjb250YWlucyBoZWFkZXIgY29vcmRpbmF0ZXMgKG5lZ2F0aXZlIHZhbHVlcyksXG4gICAqIHRoZSBjb3JuZXIgY29vcmRpbmF0ZXMgYXJlIG5vcm1hbGl6ZWQgdG8gYDBgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGdldEJvdHRvbUVuZENvcm5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LCB0aGlzLnRvLnJvdyksIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsIHRoaXMudG8uY29sKSkubm9ybWFsaXplKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIGNvcm5lciBjb29yZGluYXRlcyBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0Qm90dG9tUmlnaHRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNSdGwsIHRoaXMpID8gdGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpIDogdGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0b3AgcmlnaHQgKGluIExUUikgb3IgdG9wIGxlZnQgKGluIFJUTCkgY29ybmVyIGNvb3JkaW5hdGVzIG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIElmIHRoZSBjb3JuZXIgY29udGFpbnMgaGVhZGVyIGNvb3JkaW5hdGVzIChuZWdhdGl2ZSB2YWx1ZXMpLFxuICAgKiB0aGUgY29ybmVyIGNvb3JkaW5hdGVzIGFyZSBub3JtYWxpemVkIHRvIGAwYC5cbiAgICpcbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRUb3BFbmRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1heCh0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvcCByaWdodCBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgeW91ciByYW5nZSxcbiAgICogYm90aCBpbiB0aGUgTFRSIGFuZCBSVEwgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIGNvcm5lciBjb250YWlucyBoZWFkZXIgY29vcmRpbmF0ZXMgKG5lZ2F0aXZlIHZhbHVlcyksXG4gICAqIHRoZSBjb3JuZXIgY29vcmRpbmF0ZXMgYXJlIG5vcm1hbGl6ZWQgdG8gYDBgLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGdldFRvcFJpZ2h0Q29ybmVyKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUnRsLCB0aGlzKSA/IHRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKSA6IHRoaXMuZ2V0VG9wRW5kQ29ybmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYm90dG9tIGxlZnQgKGluIExUUikgb3IgYm90dG9tIHJpZ2h0IChpbiBSVEwpIGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIGNvcm5lciBjb29yZGluYXRlcyBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1pbih0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIGNvcm5lciBjb29yZGluYXRlcyBhcmUgbm9ybWFsaXplZCB0byBgMGAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0Qm90dG9tTGVmdENvcm5lcigpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyB0aGlzLmdldEJvdHRvbUVuZENvcm5lcigpIDogdGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvcCBsZWZ0IChpbiBMVFIpIG9yIHRvcCByaWdodCAoaW4gUlRMKSBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogSWYgdGhlIGNvcm5lciBjb250YWlucyBoZWFkZXIgY29vcmRpbmF0ZXMgKG5lZ2F0aXZlIHZhbHVlcyksXG4gICAqIHRoZSB0b3AgYW5kIHN0YXJ0IGNvb3JkaW5hdGVzIGFyZSBwb2ludGVkIHRvIHRoYXQgaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1pbih0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvcCBsZWZ0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBhcmUgcG9pbnRlZCB0byB0aGF0IGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRPdXRlclRvcExlZnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNSdGwsIHRoaXMpID8gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpIDogdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYm90dG9tIHJpZ2h0IChpbiBMVFIpIG9yIGJvdHRvbSBsZWZ0IChpbiBSVEwpIGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIHRvcCBhbmQgc3RhcnQgY29vcmRpbmF0ZXMgYXJlIHBvaW50ZWQgdG8gdGhhdCBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1heCh0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJvdHRvbSByaWdodCBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgeW91ciByYW5nZSxcbiAgICogYm90aCBpbiB0aGUgTFRSIGFuZCBSVEwgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogSWYgdGhlIGNvcm5lciBjb250YWlucyBoZWFkZXIgY29vcmRpbmF0ZXMgKG5lZ2F0aXZlIHZhbHVlcyksXG4gICAqIHRoZSB0b3AgYW5kIGxlZnQgY29vcmRpbmF0ZXMgYXJlIHBvaW50ZWQgdG8gdGhhdCBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKSA6IHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0b3AgcmlnaHQgKGluIExUUikgb3IgdG9wIGxlZnQgKGluIFJUTCkgY29ybmVyIGNvb3JkaW5hdGVzIG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIElmIHRoZSBjb3JuZXIgY29udGFpbnMgaGVhZGVyIGNvb3JkaW5hdGVzIChuZWdhdGl2ZSB2YWx1ZXMpLFxuICAgKiB0aGUgdG9wIGFuZCBzdGFydCBjb29yZGluYXRlcyBhcmUgcG9pbnRlZCB0byB0aGF0IGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRPdXRlclRvcEVuZENvcm5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LCB0aGlzLnRvLnJvdyksIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsIHRoaXMudG8uY29sKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdG9wIHJpZ2h0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBhcmUgcG9pbnRlZCB0byB0aGF0IGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUnRsLCB0aGlzKSA/IHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpIDogdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJvdHRvbSBsZWZ0IChpbiBMVFIpIG9yIGJvdHRvbSByaWdodCAoaW4gUlRMKSBjb3JuZXIgY29vcmRpbmF0ZXMgb2YgeW91ciByYW5nZS5cbiAgICpcbiAgICogSWYgdGhlIGNvcm5lciBjb250YWlucyBoZWFkZXIgY29vcmRpbmF0ZXMgKG5lZ2F0aXZlIHZhbHVlcyksXG4gICAqIHRoZSB0b3AgYW5kIHN0YXJ0IGNvb3JkaW5hdGVzIGFyZSBwb2ludGVkIHRvIHRoYXQgaGVhZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLCBNYXRoLm1pbih0aGlzLmZyb20uY29sLCB0aGlzLnRvLmNvbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBjb29yZGluYXRlcyBvZiB5b3VyIHJhbmdlLFxuICAgKiBib3RoIGluIHRoZSBMVFIgYW5kIFJUTCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBJZiB0aGUgY29ybmVyIGNvbnRhaW5zIGhlYWRlciBjb29yZGluYXRlcyAobmVnYXRpdmUgdmFsdWVzKSxcbiAgICogdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBhcmUgcG9pbnRlZCB0byB0aGF0IGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNSdGwsIHRoaXMpID8gdGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpIDogdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgc2V0IG9mIGNvb3JkaW5hdGVzIChgY29vcmRzYCkgbWF0Y2hlcyBvbmUgb2YgdGhlIDQgY29ybmVycyBvZiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZGluYXRlcyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0Nvcm5lcihjb29yZHMpIHtcbiAgICByZXR1cm4gY29vcmRzLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkgfHwgY29vcmRzLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkpIHx8IGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpIHx8IGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb29yZGluYXRlcyBvZiBhIHJhbmdlIGNvcm5lciBvcHBvc2l0ZSB0byB0aGUgcHJvdmlkZWQgYGNvb3Jkc2AuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOiBpZiB0aGUgYGNvb3Jkc2AgY29vcmRpbmF0ZXMgbWF0Y2ggdGhlIGJvdHRvbS1yaWdodCBjb3JuZXIgb2YgeW91ciByYW5nZSxcbiAgICogdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgeW91ciByYW5nZSBhcmUgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIENvb3JkaW5hdGVzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGdldE9wcG9zaXRlQ29ybmVyKGNvb3Jkcykge1xuICAgIGlmICghKGNvb3JkcyBpbnN0YW5jZW9mIF9jb29yZHMuZGVmYXVsdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICB9IGVsc2UgaWYgKGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtcbiAgICB9IGVsc2UgaWYgKGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTtcbiAgICB9IGVsc2UgaWYgKGNvb3Jkcy5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoaWNoIGJvcmRlcnMgKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCkgYXJlIHNoYXJlZCBiZXR3ZWVuXG4gICAqIHlvdXIgYENlbGxSYW5nZWBpbnN0YW5jZSBhbmQgYW5vdGhlciBgcmFuZ2VgIHRoYXQncyB3aXRoaW4geW91ciByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IHJhbmdlIEEgcmFuZ2UgdG8gY29tcGFyZSB3aXRoLlxuICAgKiBAcmV0dXJucyB7QXJyYXk8J3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCc+fVxuICAgKi9cbiAgZ2V0Qm9yZGVyc1NoYXJlZFdpdGgocmFuZ2UpIHtcbiAgICBpZiAoIXRoaXMuaW5jbHVkZXNSYW5nZShyYW5nZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgdGhpc0JvcmRlcnMgPSB7XG4gICAgICB0b3A6IE1hdGgubWluKHRoaXMuZnJvbS5yb3csIHRoaXMudG8ucm93KSxcbiAgICAgIGJvdHRvbTogTWF0aC5tYXgodGhpcy5mcm9tLnJvdywgdGhpcy50by5yb3cpLFxuICAgICAgbGVmdDogTWF0aC5taW4odGhpcy5mcm9tLmNvbCwgdGhpcy50by5jb2wpLFxuICAgICAgcmlnaHQ6IE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsIHRoaXMudG8uY29sKVxuICAgIH07XG4gICAgY29uc3QgcmFuZ2VCb3JkZXJzID0ge1xuICAgICAgdG9wOiBNYXRoLm1pbihyYW5nZS5mcm9tLnJvdywgcmFuZ2UudG8ucm93KSxcbiAgICAgIGJvdHRvbTogTWF0aC5tYXgocmFuZ2UuZnJvbS5yb3csIHJhbmdlLnRvLnJvdyksXG4gICAgICBsZWZ0OiBNYXRoLm1pbihyYW5nZS5mcm9tLmNvbCwgcmFuZ2UudG8uY29sKSxcbiAgICAgIHJpZ2h0OiBNYXRoLm1heChyYW5nZS5mcm9tLmNvbCwgcmFuZ2UudG8uY29sKVxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXNCb3JkZXJzLnRvcCA9PT0gcmFuZ2VCb3JkZXJzLnRvcCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3RvcCcpO1xuICAgIH1cbiAgICBpZiAodGhpc0JvcmRlcnMucmlnaHQgPT09IHJhbmdlQm9yZGVycy5yaWdodCkge1xuICAgICAgcmVzdWx0LnB1c2goX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykgPyAnbGVmdCcgOiAncmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXNCb3JkZXJzLmJvdHRvbSA9PT0gcmFuZ2VCb3JkZXJzLmJvdHRvbSkge1xuICAgICAgcmVzdWx0LnB1c2goJ2JvdHRvbScpO1xuICAgIH1cbiAgICBpZiAodGhpc0JvcmRlcnMubGVmdCA9PT0gcmFuZ2VCb3JkZXJzLmxlZnQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNSdGwsIHRoaXMpID8gJ3JpZ2h0JyA6ICdsZWZ0Jyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGlubmVyIGNlbGxzIG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzW119XG4gICAqL1xuICBnZXRJbm5lcigpIHtcbiAgICBjb25zdCB0b3BTdGFydCA9IHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpO1xuICAgIGNvbnN0IGJvdHRvbUVuZCA9IHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBjb25zdCBvdXQgPSBbXTtcbiAgICBmb3IgKGxldCByID0gdG9wU3RhcnQucm93OyByIDw9IGJvdHRvbUVuZC5yb3c7IHIrKykge1xuICAgICAgZm9yIChsZXQgYyA9IHRvcFN0YXJ0LmNvbDsgYyA8PSBib3R0b21FbmQuY29sOyBjKyspIHtcbiAgICAgICAgaWYgKCEodGhpcy5mcm9tLnJvdyA9PT0gciAmJiB0aGlzLmZyb20uY29sID09PSBjKSAmJiAhKHRoaXMudG8ucm93ID09PSByICYmIHRoaXMudG8uY29sID09PSBjKSkge1xuICAgICAgICAgIG91dC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMociwgYykpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29vcmRpbmF0ZXMgb2YgYWxsIGNlbGxzIG9mIHlvdXIgcmFuZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzW119XG4gICAqL1xuICBnZXRBbGwoKSB7XG4gICAgY29uc3QgdG9wU3RhcnQgPSB0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCBib3R0b21FbmQgPSB0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgZm9yIChsZXQgciA9IHRvcFN0YXJ0LnJvdzsgciA8PSBib3R0b21FbmQucm93OyByKyspIHtcbiAgICAgIGZvciAobGV0IGMgPSB0b3BTdGFydC5jb2w7IGMgPD0gYm90dG9tRW5kLmNvbDsgYysrKSB7XG4gICAgICAgIGlmICh0b3BTdGFydC5yb3cgPT09IHIgJiYgdG9wU3RhcnQuY29sID09PSBjKSB7XG4gICAgICAgICAgb3V0LnB1c2godG9wU3RhcnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGJvdHRvbUVuZC5yb3cgPT09IHIgJiYgYm90dG9tRW5kLmNvbCA9PT0gYykge1xuICAgICAgICAgIG91dC5wdXNoKGJvdHRvbUVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0LnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhyLCBjKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gYWxsIGNlbGxzIHdpdGhpbiB5b3VyIHJhbmdlLlxuICAgKlxuICAgKiBZb3UgY2FuIGJyZWFrIHRoZSBpdGVyYXRpb24gYnkgcmV0dXJuaW5nIGBmYWxzZWAgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlciwgbnVtYmVyKTogYm9vbGVhbn0gY2FsbGJhY2sgQSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIGZvckFsbChjYWxsYmFjaykge1xuICAgIGNvbnN0IHRvcFN0YXJ0ID0gdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kID0gdGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO1xuICAgIGZvciAobGV0IHIgPSB0b3BTdGFydC5yb3c7IHIgPD0gYm90dG9tRW5kLnJvdzsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gdG9wU3RhcnQuY29sOyBjIDw9IGJvdHRvbUVuZC5jb2w7IGMrKykge1xuICAgICAgICBjb25zdCBicmVha0l0ZXJhdGlvbiA9IGNhbGxiYWNrKHIsIGMpO1xuICAgICAgICBpZiAoYnJlYWtJdGVyYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb25lcyB5b3VyIGBDZWxsUmFuZ2VgIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlfVxuICAgKi9cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBDZWxsUmFuZ2UodGhpcy5oaWdobGlnaHQsIHRoaXMuZnJvbSwgdGhpcy50bywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1J0bCwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHlvdXIgYENlbGxSYW5nZWAgaW5zdGFuY2UgaW50byBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICpcbiAgICogLSBgZnJvbWBcbiAgICogICAgLSBgcm93YFxuICAgKiAgICAtIGBjb2xgXG4gICAqIC0gYHRvYFxuICAgKiAgICAtIGByb3dgXG4gICAqICAgIC0gYGNvbGBcbiAgICpcbiAgICogQHJldHVybnMge3tmcm9tOiB7cm93OiBudW1iZXIsIGNvbDogbnVtYmVyfSwgdG86IHtyb3c6IG51bWJlciwgY29sOiBudW1iZXJ9fX0gQW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBgZnJvbWAgYW5kIGB0b2AgcHJvcGVydGllcy5cbiAgICovXG4gIHRvT2JqZWN0KCkge1xuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB0aGlzLmZyb20udG9PYmplY3QoKSxcbiAgICAgIHRvOiB0aGlzLnRvLnRvT2JqZWN0KClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGBDZWxsQ29vcmRzYCBjbGFzcy5cbiAgICpcbiAgICogVGhlIG5ldyBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UgYXV0b21hdGljYWxseSBpbmhlcml0cyB0aGUgTFRSL1JUTCBmbGFnXG4gICAqIGZyb20geW91ciBgQ2VsbFJhbmdlYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBBIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBBIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBfY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbikge1xuICAgIHJldHVybiBuZXcgX2Nvb3Jkcy5kZWZhdWx0KHJvdywgY29sdW1uLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUnRsLCB0aGlzKSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IENlbGxSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvc3RyaW5nXCIpO1xudmFyIF9ldmVudE1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9ldmVudE1hbmFnZXJcIikpO1xudmFyIF9zY3JvbGwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9zY3JvbGxcIikpO1xudmFyIF9jb29yZHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9jZWxsL2Nvb3Jkc1wiKSk7XG52YXIgX3JhbmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vY2VsbC9yYW5nZVwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBhYnN0cmFjdFxuICogQGNsYXNzIFdhbGtvbnRhYmxlXG4gKi9cbmNsYXNzIENvcmVBYnN0cmFjdCB7XG4gIGdldCBldmVudE1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBfZXZlbnRNYW5hZ2VyLmRlZmF1bHQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MVGFibGVFbGVtZW50fSB0YWJsZSBNYWluIHRhYmxlLlxuICAgKiBAcGFyYW0ge1NldHRpbmdzfSBzZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZSwgc2V0dGluZ3MpIHtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3dFRhYmxlXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid3RTY3JvbGxcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3dFZpZXdwb3J0XCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid3RPdmVybGF5c1wiLCB2b2lkIDApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNlbGVjdGlvbk1hbmFnZXJcIiwgdm9pZCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3dEV2ZW50XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIHdhbGtvbnRhYmxlIGluc3RhbmNlIGlkLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImd1aWRcIiwgYHd0XyR7KDAsIF9zdHJpbmcucmFuZG9tU3RyaW5nKSgpfWApO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRyYXdJbnRlcnJ1cHRlZFwiLCBmYWxzZSk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZHJhd25cIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBET00gYmluZGluZ3MuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHR5cGUge0RvbUJpbmRpbmdzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRvbUJpbmRpbmdzXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogU2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICogQHR5cGUge1NldHRpbmdzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInd0U2V0dGluZ3NcIiwgdm9pZCAwKTtcbiAgICB0aGlzLmRvbUJpbmRpbmdzID0ge1xuICAgICAgcm9vdFRhYmxlOiB0YWJsZSxcbiAgICAgIHJvb3REb2N1bWVudDogdGFibGUub3duZXJEb2N1bWVudCxcbiAgICAgIHJvb3RXaW5kb3c6IHRhYmxlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXdcbiAgICB9O1xuICAgIHRoaXMud3RTZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgIHRoaXMud3RTY3JvbGwgPSBuZXcgX3Njcm9sbC5kZWZhdWx0KHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpO1xuICB9XG4gIGZpbmRPcmlnaW5hbEhlYWRlcnMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxIZWFkZXJzID0gW107XG5cbiAgICAvLyBmaW5kIG9yaWdpbmFsIGhlYWRlcnNcbiAgICBpZiAodGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXMubGVuZ3RoICYmIHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XG4gICAgICAgIG9yaWdpbmFsSGVhZGVycy5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbY10uaW5uZXJIVE1MKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy53dFNldHRpbmdzLnVwZGF0ZSgnY29sdW1uSGVhZGVycycsIFtmdW5jdGlvbiAoY29sdW1uLCBUSCkge1xuICAgICAgICAgICgwLCBfZWxlbWVudC5mYXN0SW5uZXJUZXh0KShUSCwgb3JpZ2luYWxIZWFkZXJzW2NvbHVtbl0pO1xuICAgICAgICB9XSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIENlbGxDb29yZHMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHJvdyBUaGUgcm93IGluZGV4LlxuICAgKiBAcGFyYW0geyp9IGNvbHVtbiBUaGUgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIGNyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gbmV3IF9jb29yZHMuZGVmYXVsdChyb3csIGNvbHVtbiwgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3J0bE1vZGUnKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgQ2VsbFJhbmdlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBoaWdobGlnaHQgVGhlIGhpZ2hsaWdodCBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBmcm9tIFRoZSBmcm9tIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRvIFRoZSB0byBjb29yZGluYXRlcy5cbiAgICogQHJldHVybnMge0NlbGxSYW5nZX1cbiAgICovXG4gIGNyZWF0ZUNlbGxSYW5nZShoaWdobGlnaHQsIGZyb20sIHRvKSB7XG4gICAgcmV0dXJuIG5ldyBfcmFuZ2UuZGVmYXVsdChoaWdobGlnaHQsIGZyb20sIHRvLCB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncnRsTW9kZScpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZSByZXJlbmRlciBvZiBXYWxrb250YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZmFzdERyYXc9ZmFsc2VdIFdoZW4gYHRydWVgLCB0cnkgdG8gcmVmcmVzaCBvbmx5IHRoZSBwb3NpdGlvbnMgb2YgYm9yZGVycyB3aXRob3V0IHJlcmVuZGVyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YS4gSXQgd2lsbCBvbmx5IHdvcmsgaWYgVGFibGUuZHJhdygpIGRvZXMgbm90IGZvcmNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgYW55d2F5LlxuICAgKiBAcmV0dXJucyB7V2Fsa29udGFibGV9XG4gICAqL1xuICBkcmF3KCkge1xuICAgIGxldCBmYXN0RHJhdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgdGhpcy5kcmF3SW50ZXJydXB0ZWQgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMud3RUYWJsZS5pc1Zpc2libGUoKSkge1xuICAgICAgLy8gZHJhdyBpbnRlcnJ1cHRlZCBiZWNhdXNlIFRBQkxFIGlzIG5vdCB2aXNpYmxlXG4gICAgICB0aGlzLmRyYXdJbnRlcnJ1cHRlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3RUYWJsZS5kcmF3KGZhc3REcmF3KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgVEQgYXQgY29vcmRzLiBJZiB0b3Btb3N0IGlzIHNldCB0byB0cnVlLCByZXR1cm5zIFREIGZyb20gdGhlIHRvcG1vc3Qgb3ZlcmxheSBsYXllcixcbiAgICogaWYgbm90IHNldCBvciBzZXQgdG8gZmFsc2UsIHJldHVybnMgVEQgZnJvbSB0aGUgbWFzdGVyIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBUaGUgY2VsbCBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9wbW9zdD1mYWxzZV0gSWYgc2V0IHRvIGB0cnVlYCwgaXQgcmV0dXJucyB0aGUgVEQgZWxlbWVudCBmcm9tIHRoZSB0b3Btb3N0IG92ZXJsYXkuIEZvciBleGFtcGxlLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgd2FudGVkIGNlbGwgaXMgaW4gdGhlIHJhbmdlIG9mIGZpeGVkIHJvd3MsIGl0IHdpbGwgcmV0dXJuIGEgVEQgZWxlbWVudFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSB0b3Agb3ZlcmxheS5cbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0Q2VsbChjb29yZHMpIHtcbiAgICBsZXQgdG9wbW9zdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgaWYgKCF0b3Btb3N0KSB7XG4gICAgICByZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwoY29vcmRzKTtcbiAgICB9XG4gICAgY29uc3QgdG90YWxSb3dzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpO1xuICAgIGNvbnN0IGZpeGVkUm93c1RvcCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NUb3AnKTtcbiAgICBjb25zdCBmaXhlZFJvd3NCb3R0b20gPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJyk7XG4gICAgY29uc3QgZml4ZWRDb2x1bW5zU3RhcnQgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKTtcbiAgICBpZiAoY29vcmRzLnJvdyA8IGZpeGVkUm93c1RvcCAmJiBjb29yZHMuY29sIDwgZml4ZWRDb2x1bW5zU3RhcnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChjb29yZHMpO1xuICAgIH0gZWxzZSBpZiAoY29vcmRzLnJvdyA8IGZpeGVkUm93c1RvcCkge1xuICAgICAgcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChjb29yZHMpO1xuICAgIH0gZWxzZSBpZiAoY29vcmRzLmNvbCA8IGZpeGVkQ29sdW1uc1N0YXJ0ICYmIGNvb3Jkcy5yb3cgPj0gdG90YWxSb3dzIC0gZml4ZWRSb3dzQm90dG9tKSB7XG4gICAgICBpZiAodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSAmJiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChjb29yZHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29vcmRzLmNvbCA8IGZpeGVkQ29sdW1uc1N0YXJ0KSB7XG4gICAgICByZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwoY29vcmRzKTtcbiAgICB9IGVsc2UgaWYgKGNvb3Jkcy5yb3cgPCB0b3RhbFJvd3MgJiYgY29vcmRzLnJvdyA+PSB0b3RhbFJvd3MgLSBmaXhlZFJvd3NCb3R0b20pIHtcbiAgICAgIGlmICh0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSAmJiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZSkge1xuICAgICAgICByZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGNvb3Jkcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChjb29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIGEgY2VsbCAocmVyZW5kZXJzIGlmIG5lZWRlZCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBjZWxsIGNvb3JkaW5hdGVzIHRvIHNjcm9sbCB0by5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvVG9wXSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIHRvcCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb1JpZ2h0XSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvQm90dG9tXSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0xlZnRdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgbGVmdCBvZiB0aGUgdGFibGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2Nyb2xsVmlld3BvcnQoY29vcmRzLCBzbmFwVG9Ub3AsIHNuYXBUb1JpZ2h0LCBzbmFwVG9Cb3R0b20sIHNuYXBUb0xlZnQpIHtcbiAgICBpZiAoY29vcmRzLmNvbCA8IDAgfHwgY29vcmRzLnJvdyA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnQoY29vcmRzLCBzbmFwVG9Ub3AsIHNuYXBUb1JpZ2h0LCBzbmFwVG9Cb3R0b20sIHNuYXBUb0xlZnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIGEgY29sdW1uIChyZXJlbmRlcnMgaWYgbmVlZGVkKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9SaWdodF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSByaWdodCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0xlZnRdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgbGVmdCBvZiB0aGUgdGFibGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoY29sdW1uLCBzbmFwVG9SaWdodCwgc25hcFRvTGVmdCkge1xuICAgIGlmIChjb2x1bW4gPCAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGNvbHVtbiwgc25hcFRvUmlnaHQsIHNuYXBUb0xlZnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIGEgcm93IChyZXJlbmRlcnMgaWYgbmVlZGVkKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9Ub3BdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgdG9wIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvQm90dG9tXSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KHJvdywgc25hcFRvVG9wLCBzbmFwVG9Cb3R0b20pIHtcbiAgICBpZiAocm93IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkocm93LCBzbmFwVG9Ub3AsIHNuYXBUb0JvdHRvbSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Vmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIFt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksIHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSwgdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlUm93KCksIHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95IGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpO1xuICAgIHRoaXMud3RFdmVudC5kZXN0cm95KCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGRhdGEgYWNjZXNzIG9iamVjdCBmb3Igc2Nyb2xsLlxuICAgKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEByZXR1cm5zIHtTY3JvbGxEYW99XG4gICAqL1xuICBjcmVhdGVTY3JvbGxEYW8oKSB7XG4gICAgY29uc3Qgd290ID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IGRyYXduKCkge1xuICAgICAgICByZXR1cm4gd290LmRyYXduOyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBjb25zaWRlciBhYm91dCBpbmplY3RpbmcgYGlzRHJhd25gIGZ1bmN0aW9uIDogKCk9PnJldHVybiB3b3QuZHJhd24uIChpdCdsbCBlbmFibGVzIHJlbW92ZSBkYW8gbGF5ZXIpXG4gICAgICB9LFxuICAgICAgZ2V0IHRvcE92ZXJsYXkoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RPdmVybGF5cy50b3BPdmVybGF5OyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBtb3ZlIG91dHNpZGUgZGFvLCB1c2UgSU9DXG4gICAgICB9LFxuICAgICAgZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheTsgLy8gVE9ETyByZWZhY3RvcmluZzogbW92ZSBvdXRzaWRlIGRhbywgdXNlIElPQ1xuICAgICAgfSxcbiAgICAgIGdldCB3dFRhYmxlKCkge1xuICAgICAgICByZXR1cm4gd290Lnd0VGFibGU7IC8vIFRPRE8gcmVmYWN0b3Jpbmc6IG1vdmUgb3V0c2lkZSBkYW8sIHVzZSBJT0NcbiAgICAgIH0sXG4gICAgICBnZXQgd3RWaWV3cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0OyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBtb3ZlIG91dHNpZGUgZGFvLCB1c2UgSU9DXG4gICAgICB9LFxuICAgICAgZ2V0IHd0U2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RTZXR0aW5ncztcbiAgICAgIH0sXG4gICAgICBnZXQgcm9vdFdpbmRvdygpIHtcbiAgICAgICAgcmV0dXJuIHdvdC5kb21CaW5kaW5ncy5yb290V2luZG93OyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBtb3ZlIG91dHNpZGUgZGFvXG4gICAgICB9LFxuICAgICAgLy8gVE9ETyByZWZhY3RvcmluZywgY29uc2lkZXIgYWJvdXQgdXNpbmcgaW5qZWN0aW5nIHd0U2V0dGluZ3MgaW50byBzY3JvbGwgKGl0J2xsIGVuYWJsZXMgcmVtb3ZlIGRhbyBsYXllcilcbiAgICAgIGdldCB0b3RhbFJvd3MoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICAgIH0sXG4gICAgICBnZXQgdG90YWxDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxDb2x1bW5zJyk7XG4gICAgICB9LFxuICAgICAgZ2V0IGZpeGVkUm93c1RvcCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpO1xuICAgICAgfSxcbiAgICAgIGdldCBmaXhlZFJvd3NCb3R0b20oKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NCb3R0b20nKTtcbiAgICAgIH0sXG4gICAgICBnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZENvbHVtbnNTdGFydCcpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbiAgLy8gVE9ETyByZWZhY3RvcmluZzogaXQgd2lsbCBiZSBtdWNoIGJldHRlciB0byBub3QgdXNlIERBTyBvYmplY3RzLiBUaGV5IGFyZSBuZWVkZWQgZm9yIG5vdyB0byBwcm92aWRlXG4gIC8vIGR5bmFtaWNhbGx5IGFjY2VzcyB0byByZWxhdGVkIG9iamVjdHNcbiAgLyoqXG4gICAqIENyZWF0ZSBkYXRhIGFjY2VzcyBvYmplY3QgZm9yIHd0VGFibGUuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQHJldHVybnMge1RhYmxlRGFvfVxuICAgKi9cbiAgZ2V0VGFibGVEYW8oKSB7XG4gICAgY29uc3Qgd290ID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0IHdvdCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdDtcbiAgICAgIH0sXG4gICAgICBnZXQgcGFyZW50VGFibGVPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB3b3QuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldDsgLy8gVE9ETyByZXRoaW5rOiBjbG9uZVNvdXJjZSBleGlzdHMgb25seSBpbiBDbG9uZSB0eXBlLlxuICAgICAgfSxcbiAgICAgIGdldCBjbG9uZVNvdXJjZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC5jbG9uZVNvdXJjZTsgLy8gVE9ETyByZXRoaW5rOiBjbG9uZVNvdXJjZSBleGlzdHMgb25seSBpbiBDbG9uZSB0eXBlLlxuICAgICAgfSxcbiAgICAgIGdldCB3b3Jrc3BhY2VXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCk7XG4gICAgICB9LFxuICAgICAgZ2V0IHd0Vmlld3BvcnQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydDsgLy8gVE9ETyByZWZhY3RvcmluZzogbW92ZSBvdXRzaWRlIGRhbywgdXNlIElPQ1xuICAgICAgfSxcbiAgICAgIGdldCB3dE92ZXJsYXlzKCkge1xuICAgICAgICByZXR1cm4gd290Lnd0T3ZlcmxheXM7IC8vIFRPRE8gcmVmYWN0b3Jpbmc6IG1vdmUgb3V0c2lkZSBkYW8sIHVzZSBJT0NcbiAgICAgIH0sXG4gICAgICBnZXQgc2VsZWN0aW9uTWFuYWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHdvdC5zZWxlY3Rpb25NYW5hZ2VyOyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBtb3ZlIG91dHNpZGUgZGFvLCB1c2UgSU9DXG4gICAgICB9LFxuICAgICAgZ2V0IGRyYXduKCkge1xuICAgICAgICByZXR1cm4gd290LmRyYXduO1xuICAgICAgfSxcbiAgICAgIHNldCBkcmF3bih2KSB7XG4gICAgICAgIC8vIFRPRE8gcmV0aGluazogdGhpcyBicmVha3MgYXNzdW1lcyBvZiBkYXRhIGFjY2VzcyBvYmplY3QsIGhvd2V2ZXIgaXQgaXMgcmVxdWlyZWQgdW50aWwgaW52ZW50IGJldHRlciB3YXkgdG8gaGFuZGxlIFdPVCBzdGF0ZS5cbiAgICAgICAgd290LmRyYXduID0gdjtcbiAgICAgIH0sXG4gICAgICBnZXQgd3RUYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFRhYmxlOyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBpdCBwcm92aWRlcyBpdHNlbGZcbiAgICAgIH0sXG4gICAgICBnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1uO1xuICAgICAgfSxcbiAgICAgIGdldCBzdGFydENvbHVtblZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW47XG4gICAgICB9LFxuICAgICAgZ2V0IHN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbjtcbiAgICAgIH0sXG4gICAgICBnZXQgZW5kQ29sdW1uUmVuZGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1bW47XG4gICAgICB9LFxuICAgICAgZ2V0IGVuZENvbHVtblZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1uO1xuICAgICAgfSxcbiAgICAgIGdldCBlbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gd290Lnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbjtcbiAgICAgIH0sXG4gICAgICBnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3VudDtcbiAgICAgIH0sXG4gICAgICBnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5jb3VudDtcbiAgICAgIH0sXG4gICAgICBnZXQgc3RhcnRSb3dSZW5kZXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93O1xuICAgICAgfSxcbiAgICAgIGdldCBzdGFydFJvd1Zpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3c7XG4gICAgICB9LFxuICAgICAgZ2V0IHN0YXJ0Um93UGFydGlhbGx5VmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvdztcbiAgICAgIH0sXG4gICAgICBnZXQgZW5kUm93UmVuZGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3c7XG4gICAgICB9LFxuICAgICAgZ2V0IGVuZFJvd1Zpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93O1xuICAgICAgfSxcbiAgICAgIGdldCBlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gd290Lnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvdztcbiAgICAgIH0sXG4gICAgICBnZXQgY291bnRSb3dzUmVuZGVyZWQoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudDtcbiAgICAgIH0sXG4gICAgICBnZXQgY291bnRSb3dzVmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudDtcbiAgICAgIH0sXG4gICAgICBnZXQgY29sdW1uSGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICAgIH0sXG4gICAgICBnZXQgcm93SGVhZGVycygpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dFNldHRpbmdzLmdldFNldHRpbmcoJ3Jvd0hlYWRlcnMnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb3JlQWJzdHJhY3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9ldmVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2V2ZW50XCIpKTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAY2xhc3MgV2Fsa29udGFibGVcbiAqL1xuY2xhc3MgQ2xvbmUgZXh0ZW5kcyBfYmFzZS5kZWZhdWx0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTFRhYmxlRWxlbWVudH0gdGFibGUgTWFpbiB0YWJsZS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc1B1cmV8U2V0dGluZ3N9IHNldHRpbmdzIFRoZSBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICogQHBhcmFtIHtXYWxrb250YWJsZUNsb25lT3B0aW9uc30gY2xvbmUgQ2xvbmUgZGF0YS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHRhYmxlLCBzZXR0aW5ncywgY2xvbmUpIHtcbiAgICBzdXBlcih0YWJsZSwgc2V0dGluZ3MpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtXYWxrb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjbG9uZVNvdXJjZVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtPdmVybGF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNsb25lT3ZlcmxheVwiLCB2b2lkIDApO1xuICAgIGNvbnN0IGZhY2FkZUdldHRlciA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmYWNhZGUnLCB0aGlzKTtcbiAgICB0aGlzLmNsb25lU291cmNlID0gY2xvbmUuc291cmNlO1xuICAgIHRoaXMuY2xvbmVPdmVybGF5ID0gY2xvbmUub3ZlcmxheTtcbiAgICB0aGlzLnd0VGFibGUgPSB0aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksIGZhY2FkZUdldHRlciwgdGhpcy5kb21CaW5kaW5ncywgdGhpcy53dFNldHRpbmdzKTtcbiAgICB0aGlzLnd0Vmlld3BvcnQgPSBjbG9uZS52aWV3cG9ydDtcbiAgICB0aGlzLnNlbGVjdGlvbk1hbmFnZXIgPSBjbG9uZS5zZWxlY3Rpb25NYW5hZ2VyO1xuICAgIHRoaXMud3RFdmVudCA9IG5ldyBfZXZlbnQuZGVmYXVsdChmYWNhZGVHZXR0ZXIsIHRoaXMuZG9tQmluZGluZ3MsIHRoaXMud3RTZXR0aW5ncywgdGhpcy5ldmVudE1hbmFnZXIsIHRoaXMud3RUYWJsZSwgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLCBjbG9uZS5ldmVudCk7XG4gICAgdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCk7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENsb25lOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9ldmVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2V2ZW50XCIpKTtcbnZhciBfb3ZlcmxheXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi9vdmVybGF5c1wiKSk7XG52YXIgX3NldHRpbmdzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vc2V0dGluZ3NcIikpO1xudmFyIF9tYXN0ZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90YWJsZS9tYXN0ZXJcIikpO1xudmFyIF92aWV3cG9ydCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3ZpZXdwb3J0XCIpKTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xudmFyIF9tYW5hZ2VyID0gcmVxdWlyZShcIi4uL3NlbGVjdGlvbi9tYW5hZ2VyXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIEBjbGFzcyBXYWxrb250YWJsZVxuICovXG5jbGFzcyBXYWxrb250YWJsZSBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICAvKipcbiAgICogQHBhcmFtIHtIVE1MVGFibGVFbGVtZW50fSB0YWJsZSBNYWluIHRhYmxlLlxuICAgKiBAcGFyYW0ge1NldHRpbmdzUHVyZX0gc2V0dGluZ3MgVGhlIFdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGUsIHNldHRpbmdzKSB7XG4gICAgc3VwZXIodGFibGUsIG5ldyBfc2V0dGluZ3MuZGVmYXVsdChzZXR0aW5ncykpO1xuICAgIGNvbnN0IGZhY2FkZUdldHRlciA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmYWNhZGUnLCB0aGlzKTsgLy8gdG9kbyByZXRoaW5rLiBJIHdvdWxkIGxpa2UgdG8gaGF2ZSBubyBhY2Nlc3MgdG8gZmFjYWRlIGZyb20gdGhlIGludGVybmFsIHNjb3BlLlxuXG4gICAgdGhpcy53dFRhYmxlID0gbmV3IF9tYXN0ZXIuZGVmYXVsdCh0aGlzLmdldFRhYmxlRGFvKCksIGZhY2FkZUdldHRlciwgdGhpcy5kb21CaW5kaW5ncywgdGhpcy53dFNldHRpbmdzKTtcbiAgICB0aGlzLnd0Vmlld3BvcnQgPSBuZXcgX3ZpZXdwb3J0LmRlZmF1bHQodGhpcy5nZXRWaWV3cG9ydERhbygpLCB0aGlzLmRvbUJpbmRpbmdzLCB0aGlzLnd0U2V0dGluZ3MsIHRoaXMuZXZlbnRNYW5hZ2VyLCB0aGlzLnd0VGFibGUpO1xuICAgIHRoaXMuc2VsZWN0aW9uTWFuYWdlciA9IG5ldyBfbWFuYWdlci5TZWxlY3Rpb25NYW5hZ2VyKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdzZWxlY3Rpb25zJykpO1xuICAgIHRoaXMud3RFdmVudCA9IG5ldyBfZXZlbnQuZGVmYXVsdChmYWNhZGVHZXR0ZXIsIHRoaXMuZG9tQmluZGluZ3MsIHRoaXMud3RTZXR0aW5ncywgdGhpcy5ldmVudE1hbmFnZXIsIHRoaXMud3RUYWJsZSwgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyKTtcbiAgICB0aGlzLnd0T3ZlcmxheXMgPSBuZXcgX292ZXJsYXlzLmRlZmF1bHQoXG4gICAgLy8gVE9ETyBjcmVhdGUgREFPIGFuZCByZW1vdmUgcmVmZXJlbmNlIHRvIHRoZSBXYWxrb250YWJsZSBpbnN0YW5jZS5cbiAgICB0aGlzLCBmYWNhZGVHZXR0ZXIsIHRoaXMuZG9tQmluZGluZ3MsIHRoaXMud3RTZXR0aW5ncywgdGhpcy5ldmVudE1hbmFnZXIsIHRoaXMud3RUYWJsZSk7XG4gICAgdGhpcy5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpO1xuICAgIHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBzZXR0aW5ncyBhcyBjbGFzcyBuYW1lcyBhZGRlZCB0byB0aGUgcGFyZW50IGVsZW1lbnQgb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSB7XG4gICAgY29uc3QgdG9FeHBvcnQgPSB7XG4gICAgICByb3dIZWFkZXJzOiAnaHRSb3dIZWFkZXJzJyxcbiAgICAgIGNvbHVtbkhlYWRlcnM6ICdodENvbHVtbkhlYWRlcnMnXG4gICAgfTtcbiAgICBjb25zdCBhbGxDbGFzc05hbWVzID0gW107XG4gICAgY29uc3QgbmV3Q2xhc3NOYW1lcyA9IFtdO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHRvRXhwb3J0LCAoY2xhc3NOYW1lLCBrZXkpID0+IHtcbiAgICAgIGlmICh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhrZXkpLmxlbmd0aCkge1xuICAgICAgICBuZXdDbGFzc05hbWVzLnB1c2goY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICAgIGFsbENsYXNzTmFtZXMucHVzaChjbGFzc05hbWUpO1xuICAgIH0pO1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSwgYWxsQ2xhc3NOYW1lcyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLCBuZXdDbGFzc05hbWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Vmlld3BvcnREYW99XG4gICAqL1xuICBnZXRWaWV3cG9ydERhbygpIHtcbiAgICBjb25zdCB3b3QgPSB0aGlzO1xuICAgIHJldHVybiB7XG4gICAgICBnZXQgd290KCkge1xuICAgICAgICByZXR1cm4gd290O1xuICAgICAgfSxcbiAgICAgIGdldCB0b3BPdmVybGF5VHJpbW1pbmdDb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LnRyaW1taW5nQ29udGFpbmVyO1xuICAgICAgfSxcbiAgICAgIGdldCBpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcjtcbiAgICAgIH0sXG4gICAgICBnZXQgdG9wU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICB9LFxuICAgICAgZ2V0IHRvcFBhcmVudE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtcbiAgICAgIH0sXG4gICAgICBnZXQgaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgfSxcbiAgICAgIGdldCBpbmxpbmVTdGFydFBhcmVudE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRUYWJsZVBhcmVudE9mZnNldCgpO1xuICAgICAgfSxcbiAgICAgIGdldCB0b3BPdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gd290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheTsgLy8gVE9ETyByZWZhY3RvcmluZzogbW92ZSBvdXRzaWRlIGRhbywgdXNlIElPQ1xuICAgICAgfSxcbiAgICAgIGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKSB7XG4gICAgICAgIHJldHVybiB3b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXk7IC8vIFRPRE8gcmVmYWN0b3Jpbmc6IG1vdmUgb3V0c2lkZSBkYW8sIHVzZSBJT0NcbiAgICAgIH0sXG4gICAgICBnZXQgYm90dG9tT3ZlcmxheSgpIHtcbiAgICAgICAgcmV0dXJuIHdvdC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXk7IC8vIFRPRE8gcmVmYWN0b3Jpbmc6IG1vdmUgb3V0c2lkZSBkYW8sIHVzZSBJT0NcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBXYWxrb250YWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9mdW5jdGlvblwiKTtcbnZhciBfZmVhdHVyZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2ZlYXR1cmVcIik7XG52YXIgX2Jyb3dzZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9icm93c2VyXCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQGNsYXNzIEV2ZW50XG4gKi9cbnZhciBfd3RTZXR0aW5ncyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9kb21CaW5kaW5ncyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF93dFRhYmxlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3NlbGVjdGlvbk1hbmFnZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcGFyZW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2V2ZW50TWFuYWdlciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9mYWNhZGVHZXR0ZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZGJsQ2xpY2tUaW1lb3V0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2RibENsaWNrT3JpZ2luID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBFdmVudCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEdldHMgYW4gaW5zdGFuY2UgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIGRvbS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgd2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RXZlbnRNYW5hZ2VyfSBldmVudE1hbmFnZXIgVGhlIHdhbGtvbnRhYmxlIGV2ZW50IG1hbmFnZXIuXG4gICAqIEBwYXJhbSB7VGFibGV9IHd0VGFibGUgVGhlIHRhYmxlLlxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbk1hbmFnZXJ9IHNlbGVjdGlvbk1hbmFnZXIgU2VsZWN0aW9ucy5cbiAgICogQHBhcmFtIHtFdmVudH0gW3BhcmVudD1udWxsXSBUaGUgbWFpbiBFdmVudCBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGZhY2FkZUdldHRlciwgZG9tQmluZGluZ3MsIHd0U2V0dGluZ3MsIGV2ZW50TWFuYWdlciwgd3RUYWJsZSwgc2VsZWN0aW9uTWFuYWdlcikge1xuICAgIGxldCBwYXJlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gNiAmJiBhcmd1bWVudHNbNl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s2XSA6IG51bGw7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3d0U2V0dGluZ3MsIHZvaWQgMCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2RvbUJpbmRpbmdzLCB2b2lkIDApO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF93dFRhYmxlLCB2b2lkIDApO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZWxlY3Rpb25NYW5hZ2VyLCB2b2lkIDApO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wYXJlbnQsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIEV2ZW50TWFuYWdlcn0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RXZlbnRNYW5hZ2VyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ldmVudE1hbmFnZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogU2hvdWxkIGJlIHVzZSBvbmx5IGZvciBwYXNzaW5nIGZhY2UgY2FsbGVkIGV4dGVybmFsIG9yaWdpbiBtZXRob2RzLCBsaWtlIHJlZ2lzdGVyZWQgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAqIEl0IHByb3ZpZGVzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYnkgZ2V0dGluZyBpbnN0YW5jZSBmYWNhZGUuXG4gICAgICpcbiAgICAgKiBAdG9kbyBDb25zaWRlciBhYm91dCByZW1vdmluZyB0aGlzIGZyb20gRXZlbnQgY2xhc3MsIGJlY2F1c2UgaXQgbWFrZSByZWxhdGlvbnNoaXAgaW50byBmYWNhZGUgKGltcGxpY2l0IGNpcmN1bGFyXG4gICAgICogICBkZXBlbmRlbmN5KS5cbiAgICAgKiBAdG9kbyBDb24uIE1heWJlIHBhc3NpbmcgbGlzdGVuZXIgY2FsbGVyIGFzIGFuIGlvYyBmcm9tIGZhY2VkIHJlc29sdmVzIHRoaXMgaXNzdWUuIFRvIHJldGhpbmsgbGF0ZXIuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RmFjYWRlR2V0dGVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9mYWNhZGVHZXR0ZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGJsQ2xpY2tUaW1lb3V0LCBbbnVsbCwgbnVsbF0pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGJsQ2xpY2tPcmlnaW4sIFtudWxsLCBudWxsXSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF93dFNldHRpbmdzLCB0aGlzLCB3dFNldHRpbmdzKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RvbUJpbmRpbmdzLCB0aGlzLCBkb21CaW5kaW5ncyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF93dFRhYmxlLCB0aGlzLCB3dFRhYmxlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NlbGVjdGlvbk1hbmFnZXIsIHRoaXMsIHNlbGVjdGlvbk1hbmFnZXIpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcGFyZW50LCB0aGlzLCBwYXJlbnQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZXZlbnRNYW5hZ2VyLCB0aGlzLCBldmVudE1hbmFnZXIpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZmFjYWRlR2V0dGVyLCB0aGlzLCBmYWNhZGVHZXR0ZXIpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGxpc3RlbmVycyBmb3IgbW91c2UgYW5kIHRvdWNoIGV2ZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyRXZlbnRzKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZXZlbnRNYW5hZ2VyLCB0aGlzKS5hZGRFdmVudExpc3RlbmVyKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuaG9sZGVyLCAnY29udGV4dG1lbnUnLCBldmVudCA9PiB0aGlzLm9uQ29udGV4dE1lbnUoZXZlbnQpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2V2ZW50TWFuYWdlciwgdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0VGFibGUsIHRoaXMpLlRBQkxFLCAnbW91c2VvdmVyJywgZXZlbnQgPT4gdGhpcy5vbk1vdXNlT3ZlcihldmVudCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZXZlbnRNYW5hZ2VyLCB0aGlzKS5hZGRFdmVudExpc3RlbmVyKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuVEFCTEUsICdtb3VzZW91dCcsIGV2ZW50ID0+IHRoaXMub25Nb3VzZU91dChldmVudCkpO1xuICAgIGNvbnN0IGluaXRUb3VjaEV2ZW50cyA9ICgpID0+IHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZXZlbnRNYW5hZ2VyLCB0aGlzKS5hZGRFdmVudExpc3RlbmVyKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuaG9sZGVyLCAndG91Y2hzdGFydCcsIGV2ZW50ID0+IHRoaXMub25Ub3VjaFN0YXJ0KGV2ZW50KSk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2V2ZW50TWFuYWdlciwgdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0VGFibGUsIHRoaXMpLmhvbGRlciwgJ3RvdWNoZW5kJywgZXZlbnQgPT4gdGhpcy5vblRvdWNoRW5kKGV2ZW50KSk7XG4gICAgICBpZiAoIXRoaXMubW9tZW50dW1TY3JvbGxpbmcpIHtcbiAgICAgICAgdGhpcy5tb21lbnR1bVNjcm9sbGluZyA9IHt9O1xuICAgICAgfVxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ldmVudE1hbmFnZXIsIHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFRhYmxlLCB0aGlzKS5ob2xkZXIsICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0KTtcbiAgICAgICAgaWYgKCF0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmcpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0U2V0dGluZ3MsIHRoaXMpLmdldFNldHRpbmcoJ29uQmVmb3JlVG91Y2hTY3JvbGwnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnRvdWNoQXBwbGllZCkge1xuICAgICAgICAgICAgdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0U2V0dGluZ3MsIHRoaXMpLmdldFNldHRpbmcoJ29uQWZ0ZXJNb21lbnR1bVNjcm9sbCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMjAwKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgaW5pdE1vdXNlRXZlbnRzID0gKCkgPT4ge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ldmVudE1hbmFnZXIsIHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFRhYmxlLCB0aGlzKS5ob2xkZXIsICdtb3VzZXVwJywgZXZlbnQgPT4gdGhpcy5vbk1vdXNlVXAoZXZlbnQpKTtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZXZlbnRNYW5hZ2VyLCB0aGlzKS5hZGRFdmVudExpc3RlbmVyKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuaG9sZGVyLCAnbW91c2Vkb3duJywgZXZlbnQgPT4gdGhpcy5vbk1vdXNlRG93bihldmVudCkpO1xuICAgIH07XG4gICAgaWYgKCgwLCBfYnJvd3Nlci5pc01vYmlsZUJyb3dzZXIpKCkpIHtcbiAgICAgIGluaXRUb3VjaEV2ZW50cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQQyBsaWtlIGRldmljZXMgd2hpY2ggc3VwcG9ydCBib3RoIG1ldGhvZHMgKHRvdWNoc2NyZWVuIGFuZCBhYmlsaXR5IHRvIHBsdWctaW4gbW91c2UpLlxuICAgICAgaWYgKCgwLCBfZmVhdHVyZS5pc1RvdWNoU3VwcG9ydGVkKSgpKSB7XG4gICAgICAgIGluaXRUb3VjaEV2ZW50cygpO1xuICAgICAgfVxuICAgICAgaW5pdE1vdXNlRXZlbnRzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBlbGVtZW50IGlzIGFscmVhZHkgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdG91Y2hUYXJnZXQgQW4gZWxlbWVudCB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RlZENlbGxXYXNUb3VjaGVkKHRvdWNoVGFyZ2V0KSB7XG4gICAgY29uc3QgY2VsbFVuZGVyRmluZ2VyID0gdGhpcy5wYXJlbnRDZWxsKHRvdWNoVGFyZ2V0KTtcbiAgICBjb25zdCBjb29yZHNPZkNlbGxVbmRlckZpbmdlciA9IGNlbGxVbmRlckZpbmdlci5jb29yZHM7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQsIHRoaXMpICYmIGNvb3Jkc09mQ2VsbFVuZGVyRmluZ2VyKSB7XG4gICAgICBjb25zdCBbcm93VG91Y2hlZCwgcm93U2VsZWN0ZWRdID0gW2Nvb3Jkc09mQ2VsbFVuZGVyRmluZ2VyLnJvdywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZCwgdGhpcykuZnJvbS5yb3ddO1xuICAgICAgY29uc3QgW2NvbFRvdWNoZWQsIGNvbFNlbGVjdGVkXSA9IFtjb29yZHNPZkNlbGxVbmRlckZpbmdlci5jb2wsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQsIHRoaXMpLmZyb20uY29sXTtcbiAgICAgIHJldHVybiByb3dUb3VjaGVkID09PSByb3dTZWxlY3RlZCAmJiBjb2xUb3VjaGVkID09PSBjb2xTZWxlY3RlZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY2xvc2VzdCBURCBvciBUSCBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW0gQW4gZWxlbWVudCBmcm9tIHRoZSB0cmF2ZXJzaW5nIHN0YXJ0cy5cbiAgICogQHJldHVybnMge29iamVjdH0gQ29udGFpbnMgY29vcmRpbmF0ZXMgYW5kIHJlZmVyZW5jZSB0byBURCBvciBUSCBpZiBpdCBleGlzdHMuIE90aGVyd2lzZSBpdCdzIGVtcHR5IG9iamVjdC5cbiAgICovXG4gIHBhcmVudENlbGwoZWxlbSkge1xuICAgIGNvbnN0IGNlbGwgPSB7fTtcbiAgICBjb25zdCBUQUJMRSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuVEFCTEU7XG4gICAgY29uc3QgVEQgPSAoMCwgX2VsZW1lbnQuY2xvc2VzdERvd24pKGVsZW0sIFsnVEQnLCAnVEgnXSwgVEFCTEUpO1xuICAgIGlmIChURCkge1xuICAgICAgY2VsbC5jb29yZHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0VGFibGUsIHRoaXMpLmdldENvb3JkcyhURCk7XG4gICAgICBjZWxsLlREID0gVEQ7XG4gICAgfSBlbHNlIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGVsZW0sICd3dEJvcmRlcicpICYmICgwLCBfZWxlbWVudC5oYXNDbGFzcykoZWxlbSwgJ2N1cnJlbnQnKSkge1xuICAgICAgY2VsbC5jb29yZHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbk1hbmFnZXIsIHRoaXMpLmdldEZvY3VzU2VsZWN0aW9uKCkuY2VsbFJhbmdlLmhpZ2hsaWdodDtcbiAgICAgIGNlbGwuVEQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0VGFibGUsIHRoaXMpLmdldENlbGwoY2VsbC5jb29yZHMpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShlbGVtLCAnd3RCb3JkZXInKSAmJiAoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGVsZW0sICdhcmVhJykpIHtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbk1hbmFnZXIsIHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UpIHtcbiAgICAgICAgY2VsbC5jb29yZHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbk1hbmFnZXIsIHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2UudG87XG4gICAgICAgIGNlbGwuVEQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0VGFibGUsIHRoaXMpLmdldENlbGwoY2VsbC5jb29yZHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2VsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbk1vdXNlRG93biBjYWxsYmFjay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kb21CaW5kaW5ncywgdGhpcykucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZ2V0UGFyZW50Tm9kZSA9ICgwLCBfZnVuY3Rpb24ucGFydGlhbCkoX2VsZW1lbnQuZ2V0UGFyZW50LCBldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IHJlYWxUYXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAvLyBpZ25vcmUgbm9uLVREIGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIG1vdXNlIGRvd24gcHJvY2Vzc2luZ1xuICAgIC8vIChodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9pc3N1ZXMvMzU1NSlcbiAgICBpZiAoIVsnVEQnLCAnVEgnXS5pbmNsdWRlcyhhY3RpdmVFbGVtZW50Lm5vZGVOYW1lKSAmJiAocmVhbFRhcmdldCA9PT0gYWN0aXZlRWxlbWVudCB8fCBnZXRQYXJlbnROb2RlKDApID09PSBhY3RpdmVFbGVtZW50IHx8IGdldFBhcmVudE5vZGUoMSkgPT09IGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLnBhcmVudENlbGwocmVhbFRhcmdldCk7XG4gICAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykocmVhbFRhcmdldCwgJ2Nvcm5lcicpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0U2V0dGluZ3MsIHRoaXMpLmdldFNldHRpbmcoJ29uQ2VsbENvcm5lck1vdXNlRG93bicsIGV2ZW50LCByZWFsVGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGNlbGwuVEQgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFNldHRpbmdzLCB0aGlzKS5oYXMoJ29uQ2VsbE1vdXNlRG93bicpKSB7XG4gICAgICB0aGlzLmNhbGxMaXN0ZW5lcignb25DZWxsTW91c2VEb3duJywgZXZlbnQsIGNlbGwuY29vcmRzLCBjZWxsLlREKTtcbiAgICB9XG5cbiAgICAvLyBkb3VibGVjbGljayByZWFjdHMgb25seSBmb3IgbGVmdCBtb3VzZSBidXR0b24gb3IgZnJvbSB0b3VjaCBldmVudHNcbiAgICBpZiAoKGV2ZW50LmJ1dHRvbiA9PT0gMCB8fCB0aGlzLnRvdWNoQXBwbGllZCkgJiYgY2VsbC5URCkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMF0gPSBjZWxsLlREO1xuICAgICAgY2xlYXJUaW1lb3V0KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsQ2xpY2tUaW1lb3V0LCB0aGlzKVswXSk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RibENsaWNrVGltZW91dCwgdGhpcylbMF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMF0gPSBudWxsO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uQ29udGV4dE1lbnUgY2FsbGJhY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIG9uQ29udGV4dE1lbnUoZXZlbnQpIHtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFNldHRpbmdzLCB0aGlzKS5oYXMoJ29uQ2VsbENvbnRleHRNZW51JykpIHtcbiAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLnBhcmVudENlbGwoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGlmIChjZWxsLlREKSB7XG4gICAgICAgIHRoaXMuY2FsbExpc3RlbmVyKCdvbkNlbGxDb250ZXh0TWVudScsIGV2ZW50LCBjZWxsLmNvb3JkcywgY2VsbC5URCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uTW91c2VPdmVyIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAqL1xuICBvbk1vdXNlT3ZlcihldmVudCkge1xuICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFNldHRpbmdzLCB0aGlzKS5oYXMoJ29uQ2VsbE1vdXNlT3ZlcicpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhYmxlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFRhYmxlLCB0aGlzKS5UQUJMRTtcbiAgICBjb25zdCB0ZCA9ICgwLCBfZWxlbWVudC5jbG9zZXN0RG93bikoZXZlbnQudGFyZ2V0LCBbJ1REJywgJ1RIJ10sIHRhYmxlKTtcbiAgICBjb25zdCBwYXJlbnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3BhcmVudCwgdGhpcykgfHwgdGhpcztcbiAgICBpZiAodGQgJiYgdGQgIT09IHBhcmVudC5sYXN0TW91c2VPdmVyICYmICgwLCBfZWxlbWVudC5pc0NoaWxkT2YpKHRkLCB0YWJsZSkpIHtcbiAgICAgIHBhcmVudC5sYXN0TW91c2VPdmVyID0gdGQ7XG4gICAgICB0aGlzLmNhbGxMaXN0ZW5lcignb25DZWxsTW91c2VPdmVyJywgZXZlbnQsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuZ2V0Q29vcmRzKHRkKSwgdGQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPbk1vdXNlT3V0IGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAqL1xuICBvbk1vdXNlT3V0KGV2ZW50KSB7XG4gICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0U2V0dGluZ3MsIHRoaXMpLmhhcygnb25DZWxsTW91c2VPdXQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuVEFCTEU7XG4gICAgY29uc3QgbGFzdFREID0gKDAsIF9lbGVtZW50LmNsb3Nlc3REb3duKShldmVudC50YXJnZXQsIFsnVEQnLCAnVEgnXSwgdGFibGUpO1xuICAgIGNvbnN0IG5leHRURCA9ICgwLCBfZWxlbWVudC5jbG9zZXN0RG93bikoZXZlbnQucmVsYXRlZFRhcmdldCwgWydURCcsICdUSCddLCB0YWJsZSk7XG4gICAgY29uc3QgcGFyZW50ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wYXJlbnQsIHRoaXMpIHx8IHRoaXM7XG4gICAgaWYgKGxhc3RURCAmJiBsYXN0VEQgIT09IG5leHRURCAmJiAoMCwgX2VsZW1lbnQuaXNDaGlsZE9mKShsYXN0VEQsIHRhYmxlKSkge1xuICAgICAgdGhpcy5jYWxsTGlzdGVuZXIoJ29uQ2VsbE1vdXNlT3V0JywgZXZlbnQsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfd3RUYWJsZSwgdGhpcykuZ2V0Q29vcmRzKGxhc3RURCksIGxhc3RURCk7XG4gICAgICBpZiAobmV4dFREID09PSBudWxsKSB7XG4gICAgICAgIHBhcmVudC5sYXN0TW91c2VPdmVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT25Nb3VzZVVwIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAqL1xuICBvbk1vdXNlVXAoZXZlbnQpIHtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5wYXJlbnRDZWxsKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGNlbGwuVEQgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFNldHRpbmdzLCB0aGlzKS5oYXMoJ29uQ2VsbE1vdXNlVXAnKSkge1xuICAgICAgdGhpcy5jYWxsTGlzdGVuZXIoJ29uQ2VsbE1vdXNlVXAnLCBldmVudCwgY2VsbC5jb29yZHMsIGNlbGwuVEQpO1xuICAgIH1cblxuICAgIC8vIGlmIG5vdCBsZWZ0IG1vdXNlIGJ1dHRvbiwgYW5kIHRoZSBvcmlnaW4gZXZlbnQgaXMgbm90IGNvbWVzIGZyb20gdG91Y2hcbiAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwICYmICF0aGlzLnRvdWNoQXBwbGllZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY2VsbC5URCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMF0gJiYgY2VsbC5URCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMV0pIHtcbiAgICAgIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGV2ZW50LnRhcmdldCwgJ2Nvcm5lcicpKSB7XG4gICAgICAgIHRoaXMuY2FsbExpc3RlbmVyKCdvbkNlbGxDb3JuZXJEYmxDbGljaycsIGV2ZW50LCBjZWxsLmNvb3JkcywgY2VsbC5URCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNhbGxMaXN0ZW5lcignb25DZWxsRGJsQ2xpY2snLCBldmVudCwgY2VsbC5jb29yZHMsIGNlbGwuVEQpO1xuICAgICAgfVxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMF0gPSBudWxsO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMV0gPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoY2VsbC5URCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja09yaWdpbiwgdGhpcylbMF0pIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsQ2xpY2tPcmlnaW4sIHRoaXMpWzFdID0gY2VsbC5URDtcbiAgICAgIGNsZWFyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RibENsaWNrVGltZW91dCwgdGhpcylbMV0pO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYmxDbGlja1RpbWVvdXQsIHRoaXMpWzFdID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsQ2xpY2tPcmlnaW4sIHRoaXMpWzFdID0gbnVsbDtcbiAgICAgIH0sIDUwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE9uVG91Y2hTdGFydCBjYWxsYmFjay4gU2ltdWxhdGVzIG1vdXNlZG93biBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb25Ub3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZCwgdGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25NYW5hZ2VyLCB0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZSk7XG4gICAgdGhpcy50b3VjaEFwcGxpZWQgPSB0cnVlO1xuICAgIHRoaXMub25Nb3VzZURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uVG91Y2hFbmQgY2FsbGJhY2suIFNpbXVsYXRlcyBtb3VzZXVwIGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAqL1xuICBvblRvdWNoRW5kKGV2ZW50KSB7XG4gICAgdmFyIF90aGlzJHBhcmVudENlbGw7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGNvbnN0IHBhcmVudENlbGxDb29yZHMgPSAoX3RoaXMkcGFyZW50Q2VsbCA9IHRoaXMucGFyZW50Q2VsbCh0YXJnZXQpKSA9PT0gbnVsbCB8fCBfdGhpcyRwYXJlbnRDZWxsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRwYXJlbnRDZWxsLmNvb3JkcztcbiAgICBjb25zdCBpc0NlbGxzUmFuZ2UgPSAoMCwgX21peGVkLmlzRGVmaW5lZCkocGFyZW50Q2VsbENvb3JkcykgJiYgcGFyZW50Q2VsbENvb3Jkcy5yb3cgPj0gMCAmJiBwYXJlbnRDZWxsQ29vcmRzLmNvbCA+PSAwO1xuICAgIGNvbnN0IGlzRXZlbnRDYW5jZWxhYmxlID0gZXZlbnQuY2FuY2VsYWJsZSAmJiBpc0NlbGxzUmFuZ2UgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF93dFNldHRpbmdzLCB0aGlzKS5nZXRTZXR0aW5nKCdpc0RhdGFWaWV3SW5zdGFuY2UnKTtcblxuICAgIC8vIFRvIHByZXZlbnQgYWNjaWRlbnRhbCByZWRpcmVjdHMgb3Igb3RoZXIgYWN0aW9ucyB0aGF0IHRoZSBpbnRlcmFjdGl2ZSBlbGVtZW50cyAoZS5xIFwiQVwiIGxpbmspIGRvXG4gICAgLy8gd2hpbGUgdGhlIGNlbGwgaXMgaGlnaGxpZ2h0ZWQsIGFsbCB0b3VjaCBldmVudHMgdGhhdCBhcmUgdHJpZ2dlcmVkIG9uIGRpZmZlcmVudCBjZWxscyBhcmVcbiAgICAvLyBcInByZXZlbnREZWZhdWx0XCInZWQuIFRoZSB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBlbGVtZW50IChlLnEuIGNsaWNrIG9uIHRoZSBsaW5rIHRoYXQgb3BlbnNcbiAgICAvLyBhIG5ldyBwYWdlKSBvbmx5IHdoZW4gdGhlIHNhbWUgY2VsbCB3YXMgcHJldmlvdXNseSBzZWxlY3RlZCAoc2VlIHJlbGF0ZWQgUFIgIzc5ODApLlxuICAgIGlmIChpc0V2ZW50Q2FuY2VsYWJsZSkge1xuICAgICAgY29uc3QgaW50ZXJhY3RpdmVFbGVtZW50cyA9IFsnQScsICdCVVRUT04nLCAnSU5QVVQnXTtcblxuICAgICAgLy8gRm9yIGJyb3dzZXJzIHRoYXQgdXNlIHRoZSBXZWJLaXQgYXMgYW4gZW5naW5lIChleGNsdWRpbmcgU2FmYXJpKSwgdGhlcmUgaXMgYSBidWcuIFRoZSBwcmV2ZW50XG4gICAgICAvLyBkZWZhdWx0IGhhcyB0byBiZSBjYWxsZWQgYWxsIHRoZSB0aW1lLiBPdGhlcndpc2UsIHRoZSBzZWNvbmQgdGFwIHdvbid0IGJlIHRyaWdnZXJlZCAocHJvYmFibHlcbiAgICAgIC8vIGNhdXNlZCBieSB0aGUgbmF0aXZlIH4zMDBtcyBkZWxheSAtIGh0dHBzOi8vd2Via2l0Lm9yZy9ibG9nLzU2MTAvbW9yZS1yZXNwb25zaXZlLXRhcHBpbmctb24taW9zLykuXG4gICAgICAvLyBUbyBtYWtlIHRoZSBpbnRlcmFjdGl2ZSBlbGVtZW50cyB3b3JrLCB0aGUgZXZlbnQgdGFyZ2V0IGVsZW1lbnQgaGFzIHRvIGJlIGNoZWNrLiBJZiB0aGUgZWxlbWVudFxuICAgICAgLy8gbWF0Y2hlcyB0aGUgYWxsb3ctbGlzdCwgdGhlIGV2ZW50IGlzIG5vdCBwcmV2ZW50ZWQuXG4gICAgICBpZiAoKDAsIF9icm93c2VyLmlzSU9TKSgpICYmICgoMCwgX2Jyb3dzZXIuaXNDaHJvbWVXZWJLaXQpKCkgfHwgKDAsIF9icm93c2VyLmlzRmlyZWZveFdlYktpdCkoKSkgJiYgdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKHRhcmdldCkgJiYgIWludGVyYWN0aXZlRWxlbWVudHMuaW5jbHVkZXModGFyZ2V0LnRhZ05hbWUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQodGFyZ2V0KSkge1xuICAgICAgICAvLyBGb3Igb3RoZXIgYnJvd3NlcnMsIHByZXZlbnQgZGVmYXVsdCBpcyBmaXJlZCBvbmx5IGZvciB0aGUgZmlyc3QgdGFwIGFuZCBvbmx5IHdoZW4gdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIGhpZ2hsaWdodGVkIGNlbGwgd2FzIGRpZmZlcmVudC5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbk1vdXNlVXAoZXZlbnQpO1xuICAgIHRoaXMudG91Y2hBcHBsaWVkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBsaXN0ZW5lciB3aXRoIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgbGlzdGVuZXIuXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgQ29vcmRpbmF0ZXMuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldCBFdmVudCB0YXJnZXQuXG4gICAqL1xuICBjYWxsTGlzdGVuZXIobmFtZSwgZXZlbnQsIGNvb3JkcywgdGFyZ2V0KSB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3d0U2V0dGluZ3MsIHRoaXMpLmdldFNldHRpbmdQdXJlKG5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIoZXZlbnQsIGNvb3JkcywgdGFyZ2V0LCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZhY2FkZUdldHRlciwgdGhpcykuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBkb3VibGUtY2xpY2sgdGltZW91dHMgYW5kIGRlc3Ryb3lzIHRoZSBpbnRlcm5hbCBldmVudE1hbmFnZXIgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNsZWFyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RibENsaWNrVGltZW91dCwgdGhpcylbMF0pO1xuICAgIGNsZWFyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RibENsaWNrVGltZW91dCwgdGhpcylbMV0pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZXZlbnRNYW5hZ2VyLCB0aGlzKS5kZXN0cm95KCk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEV2ZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jb3JlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vY29yZS9jb3JlXCIpKTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2NvcmUvX2Jhc2VcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogVGhpcyBsYXllciBjYXJlcyBhYm91dCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICpcbiAqIEBjbGFzcyBXYWxrb250YWJsZUZhY2FkZVxuICogQGF1Z21lbnRzIFdhbGtvbnRhYmxlXG4gKiBAaW5oZXJpdERvY1xuICovXG5jbGFzcyBXYWxrb250YWJsZUZhY2FkZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NldHRpbmdzUHVyZXxXYWxrb250YWJsZX0gc2V0dGluZ3NPckluc3RhbmNlIFRoZSBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzT3JJbnN0YW5jZSkge1xuICAgIGlmIChzZXR0aW5nc09ySW5zdGFuY2UgaW5zdGFuY2VvZiBfYmFzZS5kZWZhdWx0KSB7XG4gICAgICB0aGlzLl93b3QgPSBzZXR0aW5nc09ySW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2luaXRGcm9tU2V0dGluZ3Moc2V0dGluZ3NPckluc3RhbmNlKTtcbiAgICB9XG4gIH1cbiAgX2luaXRGcm9tU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBzZXR0aW5ncy5mYWNhZGUgPSBpbnN0YW5jZSA9PiB7XG4gICAgICBjb25zdCBmYWNhZGUgPSBuZXcgV2Fsa29udGFibGVGYWNhZGUoaW5zdGFuY2UpO1xuICAgICAgcmV0dXJuICgpID0+IGZhY2FkZTtcbiAgICB9O1xuICAgIHRoaXMuX3dvdCA9IG5ldyBfY29yZS5kZWZhdWx0KHNldHRpbmdzLnRhYmxlLCBzZXR0aW5ncyk7XG4gIH1cbiAgZ2V0IGd1aWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5ndWlkO1xuICB9XG4gIGdldCByb290RG9jdW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQ7XG4gIH1cbiAgZ2V0IHJvb3RXaW5kb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5kb21CaW5kaW5ncy5yb290V2luZG93O1xuICB9XG4gIGdldCB3dFNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nczsgLy8gdG9kbyBjcmVhdGUgZmFjYWRlXG4gIH1cbiAgZ2V0IGNsb25lU291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLl93b3QuY2xvbmVTb3VyY2U7IC8vIHRvZG8gY3JlYXRlIGZhY2FkZVxuICB9XG4gIGdldCBjbG9uZU92ZXJsYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXk7IC8vIHRvZG8gY3JlYXRlIGZhY2FkZVxuICB9XG4gIGdldCBzZWxlY3Rpb25NYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcjsgLy8gdG9kbyBjcmVhdGUgZmFjYWRlXG4gIH1cbiAgZ2V0IHd0Vmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC53dFZpZXdwb3J0OyAvLyB0b2RvIGNyZWF0ZSBmYWNhZGVcbiAgfVxuICBnZXQgd3RPdmVybGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5fd290Lnd0T3ZlcmxheXM7IC8vIHRvZG8gY3JlYXRlIGZhY2FkZVxuICB9XG4gIGdldCB3dFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLl93b3Qud3RUYWJsZTsgLy8gdG9kbyBjcmVhdGUgZmFjYWRlXG4gIH1cbiAgZ2V0IHd0RXZlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC53dEV2ZW50OyAvLyB0b2RvIGNyZWF0ZSBmYWNhZGVcbiAgfVxuICBnZXQgd3RTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC53dFNjcm9sbDsgLy8gdG9kbyBjcmVhdGUgZmFjYWRlXG4gIH1cbiAgZ2V0IGRyYXduKCkge1xuICAgIHJldHVybiB0aGlzLl93b3QuZHJhd247XG4gIH1cbiAgc2V0IGRyYXduKHZhbHVlKSB7XG4gICAgdGhpcy5fd290LmRyYXduID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRyYXdJbnRlcnJ1cHRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZDtcbiAgfVxuICBzZXQgZHJhd0ludGVycnVwdGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZCA9IHZhbHVlO1xuICB9XG4gIGdldCBsYXN0TW91c2VPdmVyKCkge1xuICAgIHJldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3ZlcjtcbiAgfVxuICBzZXQgbGFzdE1vdXNlT3Zlcih2YWx1ZSkge1xuICAgIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyID0gdmFsdWU7XG4gIH1cbiAgZ2V0IG1vbWVudHVtU2Nyb2xsaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmc7XG4gIH1cbiAgc2V0IG1vbWVudHVtU2Nyb2xsaW5nKHZhbHVlKSB7XG4gICAgdGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHRvdWNoQXBwbGllZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZDtcbiAgfVxuICBzZXQgdG91Y2hBcHBsaWVkKHZhbHVlKSB7XG4gICAgdGhpcy5fd290LnRvdWNoQXBwbGllZCA9IHZhbHVlO1xuICB9XG4gIGdldCBkb21CaW5kaW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzO1xuICB9XG4gIGdldCBldmVudExpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmV2ZW50TGlzdGVuZXJzO1xuICB9XG4gIHNldCBldmVudExpc3RlbmVycyh2YWx1ZSkge1xuICAgIHRoaXMuX3dvdC5ldmVudExpc3RlbmVycyA9IHZhbHVlO1xuICB9XG4gIGdldCBldmVudE1hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5ldmVudE1hbmFnZXI7XG4gIH1cbiAgY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbik7XG4gIH1cbiAgY3JlYXRlQ2VsbFJhbmdlKGhpZ2hsaWdodCwgZnJvbSwgdG8pIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShoaWdobGlnaHQsIGZyb20sIHRvKTtcbiAgfVxuICBkcmF3KCkge1xuICAgIGxldCBmYXN0RHJhdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgdGhpcy5fd290LmRyYXcoZmFzdERyYXcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldENlbGwoY29vcmRzKSB7XG4gICAgbGV0IHRvcG1vc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIHJldHVybiB0aGlzLl93b3QuZ2V0Q2VsbChjb29yZHMsIHRvcG1vc3QpO1xuICB9XG4gIHNjcm9sbFZpZXdwb3J0KGNvb3Jkcywgc25hcFRvVG9wLCBzbmFwVG9SaWdodCwgc25hcFRvQm90dG9tLCBzbmFwVG9MZWZ0KSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChjb29yZHMsIHNuYXBUb1RvcCwgc25hcFRvUmlnaHQsIHNuYXBUb0JvdHRvbSwgc25hcFRvTGVmdCk7XG4gIH1cbiAgc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoY29sdW1uLCBzbmFwVG9SaWdodCwgc25hcFRvTGVmdCkge1xuICAgIHJldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoY29sdW1uLCBzbmFwVG9SaWdodCwgc25hcFRvTGVmdCk7XG4gIH1cbiAgc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KHJvdywgc25hcFRvVG9wLCBzbmFwVG9Cb3R0b20pIHtcbiAgICByZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShyb3csIHNuYXBUb1RvcCwgc25hcFRvQm90dG9tKTtcbiAgfVxuICBnZXRWaWV3cG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmdldFZpZXdwb3J0KCk7XG4gIH1cbiAgZ2V0T3ZlcmxheU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXkgPyB0aGlzLl93b3QuY2xvbmVPdmVybGF5LnR5cGUgOiAnbWFzdGVyJztcbiAgfVxuICBleHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5fd290LmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCk7XG4gIH1cbiAgdXBkYXRlKHNldHRpbmdzLCB2YWx1ZSkge1xuICAgIHRoaXMuX3dvdC53dFNldHRpbmdzLnVwZGF0ZShzZXR0aW5ncywgdmFsdWUpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIGdldFNldHRpbmcoa2V5LCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpIHtcbiAgICByZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhrZXksIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCk7XG4gIH1cbiAgaGFzU2V0dGluZyhrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuaGFzU2V0dGluZyhrZXkpO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5fd290LmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gV2Fsa29udGFibGVGYWNhZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBjbGFzcyBDb2x1bW5GaWx0ZXJcbiAqL1xuY2xhc3MgQ29sdW1uRmlsdGVyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIHNjcm9sbCBob3Jpem9udGFsIG9mZnNldC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvdGFsIFRoZSB0b3RhbCB3aWR0aCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFRIIFRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93IGhlYWRlcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvZmZzZXQsIHRvdGFsLCBjb3VudFRIKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJvZmZzZXRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvdGFsXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb3VudFRIXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgIHRoaXMuY291bnRUSCA9IGNvdW50VEg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0dGVkKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4ICsgdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdW5PZmZzZXR0ZWQoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggLSB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICByZW5kZXJlZFRvU291cmNlKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0dGVkKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzb3VyY2VUb1JlbmRlcmVkKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG9mZnNldHRlZFRIKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4IC0gdGhpcy5jb3VudFRIO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHVuT2Zmc2V0dGVkVEgoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggKyB0aGlzLmNvdW50VEg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGluZGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQoaW5kZXgpKTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQ29sdW1uRmlsdGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAY2xhc3MgUm93RmlsdGVyXG4gKi9cbmNsYXNzIFJvd0ZpbHRlciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IFRoZSBzY3JvbGwgdmVydGljYWwgb2Zmc2V0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWwgVGhlIHRvdGFsIGhlaWdodCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudFRIIFRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1uIGhlYWRlcnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvZmZzZXQsIHRvdGFsLCBjb3VudFRIKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJvZmZzZXRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvdGFsXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb3VudFRIXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgIHRoaXMuY291bnRUSCA9IGNvdW50VEg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgb2Zmc2V0dGVkKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4ICsgdGhpcy5vZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdW5PZmZzZXR0ZWQoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggLSB0aGlzLm9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICByZW5kZXJlZFRvU291cmNlKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMub2Zmc2V0dGVkKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzb3VyY2VUb1JlbmRlcmVkKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG9mZnNldHRlZFRIKGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4IC0gdGhpcy5jb3VudFRIO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHVuT2Zmc2V0dGVkVEgoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXggKyB0aGlzLmNvdW50VEg7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGluZGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQoaW5kZXgpKTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gUm93RmlsdGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jYWxjdWxhdG9yID0gcmVxdWlyZShcIi4vY2FsY3VsYXRvclwiKTtcbmV4cG9ydHMuVmlld3BvcnRDb2x1bW5zQ2FsY3VsYXRvciA9IF9jYWxjdWxhdG9yLlZpZXdwb3J0Q29sdW1uc0NhbGN1bGF0b3I7XG5leHBvcnRzLlZpZXdwb3J0Um93c0NhbGN1bGF0b3IgPSBfY2FsY3VsYXRvci5WaWV3cG9ydFJvd3NDYWxjdWxhdG9yO1xudmFyIF9jb29yZHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NlbGwvY29vcmRzXCIpKTtcbmV4cG9ydHMuQ2VsbENvb3JkcyA9IF9jb29yZHMuZGVmYXVsdDtcbnZhciBfcmFuZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NlbGwvcmFuZ2VcIikpO1xuZXhwb3J0cy5DZWxsUmFuZ2UgPSBfcmFuZ2UuZGVmYXVsdDtcbnZhciBfY29yZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZmFjYWRlL2NvcmVcIikpO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2NvcmUuZGVmYXVsdDtcbmV4cG9ydHMuQ29yZSA9IF9jb3JlLmRlZmF1bHQ7XG52YXIgX3NlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL3NlbGVjdGlvblwiKTtcbmV4cG9ydHMuU2VsZWN0aW9uID0gX3NlbGVjdGlvbi5TZWxlY3Rpb247XG5leHBvcnRzLkhJR0hMSUdIVF9BQ1RJVkVfSEVBREVSX1RZUEUgPSBfc2VsZWN0aW9uLkFDVElWRV9IRUFERVJfVFlQRTtcbmV4cG9ydHMuSElHSExJR0hUX0FSRUFfVFlQRSA9IF9zZWxlY3Rpb24uQVJFQV9UWVBFO1xuZXhwb3J0cy5ISUdITElHSFRfRk9DVVNfVFlQRSA9IF9zZWxlY3Rpb24uRk9DVVNfVFlQRTtcbmV4cG9ydHMuSElHSExJR0hUX0ZJTExfVFlQRSA9IF9zZWxlY3Rpb24uRklMTF9UWVBFO1xuZXhwb3J0cy5ISUdITElHSFRfSEVBREVSX1RZUEUgPSBfc2VsZWN0aW9uLkhFQURFUl9UWVBFO1xuZXhwb3J0cy5ISUdITElHSFRfUk9XX1RZUEUgPSBfc2VsZWN0aW9uLlJPV19UWVBFO1xuZXhwb3J0cy5ISUdITElHSFRfQ09MVU1OX1RZUEUgPSBfc2VsZWN0aW9uLkNPTFVNTl9UWVBFO1xuZXhwb3J0cy5ISUdITElHSFRfQ1VTVE9NX1NFTEVDVElPTl9UWVBFID0gX3NlbGVjdGlvbi5DVVNUT01fU0VMRUNUSU9OX1RZUEU7XG52YXIgUmVuZGVyZXIgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9yZW5kZXJlclwiKSk7XG5leHBvcnRzLlJlbmRlcmVyID0gUmVuZGVyZXI7XG52YXIgX29yZGVyVmlldyA9IHJlcXVpcmUoXCIuL3V0aWxzL29yZGVyVmlld1wiKTtcbmV4cG9ydHMuT3JkZXJWaWV3ID0gX29yZGVyVmlldy5PcmRlclZpZXc7XG5leHBvcnRzLlNoYXJlZE9yZGVyVmlldyA9IF9vcmRlclZpZXcuU2hhcmVkT3JkZXJWaWV3O1xudmFyIF9ldmVudE1hbmFnZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXZlbnRNYW5hZ2VyXCIpO1xuZXhwb3J0cy5nZXRMaXN0ZW5lcnNDb3VudGVyID0gX2V2ZW50TWFuYWdlci5nZXRMaXN0ZW5lcnNDb3VudGVyO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xudmFyIF9jbG9uZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2NvcmUvY2xvbmVcIikpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQ3JlYXRlcyBhbiBvdmVybGF5IG92ZXIgdGhlIG9yaWdpbmFsIFdhbGtvbnRhYmxlIGluc3RhbmNlLiBUaGUgb3ZlcmxheSByZW5kZXJzIHRoZSBjbG9uZSBvZiB0aGUgb3JpZ2luYWwgV2Fsa29udGFibGVcbiAqIGFuZCAob3B0aW9uYWxseSkgaW1wbGVtZW50cyBiZWhhdmlvciBuZWVkZWQgZm9yIG5hdGl2ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBzY3JvbGxpbmcuXG4gKlxuICogQGFic3RyYWN0XG4gKiBAY2xhc3MgT3ZlcmxheVxuICogQHByb3BlcnR5IHtXYWxrb250YWJsZX0gd290IFRoZSBXYWxrb250YWJsZSBpbnN0YW5jZS5cbiAqL1xuY2xhc3MgT3ZlcmxheSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlfSB3b3RJbnN0YW5jZSBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuIEBUT0RPIHJlZmFjdG9yaW5nOiBjaGVjayBpZiBjYW4gYmUgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtGYWNhZGVHZXR0ZXJ9IGZhY2FkZUdldHRlciBGdW5jdGlvbiB3aGljaCByZXR1cm4gcHJvcGVyIGZhY2FkZS5cbiAgICogQHBhcmFtIHtDTE9ORV9UWVBFU19FTlVNfSB0eXBlIFRoZSBvdmVybGF5IHR5cGUgbmFtZSAoY2xvbmUgbmFtZSkuXG4gICAqIEBwYXJhbSB7U2V0dGluZ3N9IHd0U2V0dGluZ3MgVGhlIFdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBEb20gZWxlbWVudHMgYm91bmQgdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih3b3RJbnN0YW5jZSwgZmFjYWRlR2V0dGVyLCB0eXBlLCB3dFNldHRpbmdzLCBkb21CaW5kaW5ncykge1xuICAgIC8qKlxuICAgICAqICBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtTZXR0aW5nc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3dFNldHRpbmdzXCIsIG51bGwpO1xuICAgICgwLCBfb2JqZWN0LmRlZmluZUdldHRlcikodGhpcywgJ3dvdCcsIHdvdEluc3RhbmNlLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLmRvbUJpbmRpbmdzID0gZG9tQmluZGluZ3M7XG4gICAgdGhpcy5mYWNhZGVHZXR0ZXIgPSBmYWNhZGVHZXR0ZXI7XG4gICAgdGhpcy53dFNldHRpbmdzID0gd3RTZXR0aW5ncztcbiAgICBjb25zdCB7XG4gICAgICBUQUJMRSxcbiAgICAgIGhpZGVyLFxuICAgICAgc3ByZWFkZXIsXG4gICAgICBob2xkZXIsXG4gICAgICB3dFJvb3RFbGVtZW50XG4gICAgfSA9IHRoaXMud290Lnd0VGFibGU7IC8vIHRvZG8gaW9jXG5cbiAgICAvLyBsZWdhY3kgc3VwcG9ydCwgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlXG4gICAgdGhpcy5pbnN0YW5jZSA9IHRoaXMud290O1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy5UQUJMRSA9IFRBQkxFO1xuICAgIHRoaXMuaGlkZXIgPSBoaWRlcjtcbiAgICB0aGlzLnNwcmVhZGVyID0gc3ByZWFkZXI7XG4gICAgdGhpcy5ob2xkZXIgPSBob2xkZXI7XG4gICAgdGhpcy53dFJvb3RFbGVtZW50ID0gd3RSb290RWxlbWVudDtcbiAgICB0aGlzLnRyaW1taW5nQ29udGFpbmVyID0gKDAsIF9lbGVtZW50LmdldFRyaW1taW5nQ29udGFpbmVyKSh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSk7XG4gICAgdGhpcy5uZWVkRnVsbFJlbmRlciA9IHRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpO1xuICAgIHRoaXMuY2xvbmUgPSB0aGlzLm1ha2VDbG9uZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgb3ZlcmxheSByZW5kZXJpbmcgc3RhdGUgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkge1xuICAgIHJldHVybiB0aGlzLm5lZWRGdWxsUmVuZGVyICE9PSB0aGlzLnNob3VsZEJlUmVuZGVyZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGludGVybmFsIHN0YXRlIHdpdGggYW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5lZWQgb2YgZnVsbCByZW5kZXJpbmcgb2YgdGhlIG92ZXJsYXkgaW4gdGhlIG5leHQgZHJhdyBjeWNsZXMuXG4gICAqXG4gICAqIElmIHRoZSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIHJlbmRlciB0aGUgb3ZlcmxheSwgdGhlIGBuZWVkRnVsbFJlbmRlcmAgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYCB3aGljaCBtZWFucyB0aGF0XG4gICAqIHRoZSBvdmVybGF5IHdpbGwgYmUgZnVsbHkgcmVuZGVyZWQgaW4gdGhlIGN1cnJlbnQgZHJhdyBjeWNsZS4gSWYgdGhlIHN0YXRlIGlzIGNoYW5nZWQgdG8gbm90IHJlbmRlciB0aGUgb3ZlcmxheSxcbiAgICogdGhlIGBuZWVkRnVsbFJlbmRlcmAgcHJvcGVydHkgaXMgc2V0IHRvIGBmYWxzZWAgd2hpY2ggbWVhbnMgdGhhdCB0aGUgb3ZlcmxheSB3aWxsIGJlIGZ1bGx5IHJlbmRlcmVkIGluIHRoZVxuICAgKiBjdXJyZW50IGRyYXcgY3ljbGUgYnV0IGl0IHdpbGwgbm90IGJlIHJlbmRlcmVkIGluIHRoZSBuZXh0IGRyYXcgY3ljbGVzLlxuICAgKlxuICAgKiBAcGFyYW0geydiZWZvcmUnIHwgJ2FmdGVyJ30gZHJhd1BoYXNlIFRoZSBwaGFzZSBvZiB0aGUgcmVuZGVyaW5nIHByb2Nlc3MuXG4gICAqL1xuICB1cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKGRyYXdQaGFzZSkge1xuICAgIGlmIChkcmF3UGhhc2UgPT09ICdiZWZvcmUnICYmIHRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpKSB7XG4gICAgICB0aGlzLm5lZWRGdWxsUmVuZGVyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGRyYXdQaGFzZSA9PT0gJ2FmdGVyJyAmJiAhdGhpcy5zaG91bGRCZVJlbmRlcmVkKCkpIHtcbiAgICAgIHRoaXMubmVlZEZ1bGxSZW5kZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG92ZXJsYXkgc2hvdWxkIGJlIGZ1bGx5IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNob3VsZEJlUmVuZGVyZWQoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSB0cmltbWluZyBjb250YWluZXIuXG4gICAqL1xuICB1cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLnRyaW1taW5nQ29udGFpbmVyID0gKDAsIF9lbGVtZW50LmdldFRyaW1taW5nQ29udGFpbmVyKSh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBtYWluIHNjcm9sbGFibGUgZWxlbWVudC5cbiAgICovXG4gIHVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlXG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBpZiAocm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdycpID09PSAnaGlkZGVuJykge1xuICAgICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9IHRoaXMud290Lnd0VGFibGUuaG9sZGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50ID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGFibGVFbGVtZW50KSh3dFRhYmxlLlRBQkxFKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb29yZGluYXRlcyBvZiB0aGUgcHJvdmlkZWQgZWxlbWVudCwgcmVsYXRpdmUgdG8gdGhlIHJvb3QgSGFuZHNvbnRhYmxlIGVsZW1lbnQuXG4gICAqIE5PVEU6IFRoZSBlbGVtZW50IG5lZWRzIHRvIGJlIGEgY2hpbGQgb2YgdGhlIG92ZXJsYXkgaW4gb3JkZXIgZm9yIHRoZSBtZXRob2QgdG8gd29yayBjb3JyZWN0bHkuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGNlbGwgZWxlbWVudCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIGZvci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCBzdGFydDogbnVtYmVyfXx1bmRlZmluZWR9XG4gICAqL1xuICBnZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihlbGVtZW50LCByb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICBpZiAodGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhlbGVtZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2YgdGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQgPT09IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdztcbiAgICBjb25zdCBmaXhlZENvbHVtblN0YXJ0ID0gY29sdW1uSW5kZXggPCB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKTtcbiAgICBjb25zdCBmaXhlZFJvd1RvcCA9IHJvd0luZGV4IDwgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpO1xuICAgIGNvbnN0IGZpeGVkUm93Qm90dG9tID0gcm93SW5kZXggPj0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpIC0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c0JvdHRvbScpO1xuICAgIGNvbnN0IHNwcmVhZGVyID0gdGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyO1xuICAgIGNvbnN0IHNwcmVhZGVyT2Zmc2V0ID0ge1xuICAgICAgc3RhcnQ6IHRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKHNwcmVhZGVyKSxcbiAgICAgIHRvcDogc3ByZWFkZXIub2Zmc2V0VG9wXG4gICAgfTtcbiAgICBjb25zdCBlbGVtZW50T2Zmc2V0ID0ge1xuICAgICAgc3RhcnQ6IHRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGVsZW1lbnQpLFxuICAgICAgdG9wOiBlbGVtZW50Lm9mZnNldFRvcFxuICAgIH07XG4gICAgbGV0IG9mZnNldE9iamVjdCA9IG51bGw7XG4gICAgaWYgKHdpbmRvd1Njcm9sbCkge1xuICAgICAgb2Zmc2V0T2JqZWN0ID0gdGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhmaXhlZFJvd1RvcCwgZml4ZWRDb2x1bW5TdGFydCwgZWxlbWVudE9mZnNldCwgc3ByZWFkZXJPZmZzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRPYmplY3QgPSB0aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGZpeGVkUm93VG9wLCBmaXhlZFJvd0JvdHRvbSwgZml4ZWRDb2x1bW5TdGFydCwgZWxlbWVudE9mZnNldCwgc3ByZWFkZXJPZmZzZXQpO1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0T2JqZWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmxpbmUgc3RhcnQgdmFsdWUgZGVwZW5kaW5nIG9mIGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgRWxlbWVudC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihlbCkge1xuICAgIHJldHVybiB0aGlzLmlzUnRsKCkgPyBlbC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGggLSBlbC5vZmZzZXRMZWZ0IC0gZWwub2Zmc2V0V2lkdGggOiBlbC5vZmZzZXRMZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgY29vcmRpbmF0ZXMgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQsIHJlbGF0aXZlIHRvIHRoZSByb290IEhhbmRzb250YWJsZSBlbGVtZW50IHdpdGhpbiBhIHRhYmxlIHdpdGggd2luZG93XG4gICAqIGFzIGEgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uRml4ZWRSb3dUb3AgYHRydWVgIGlmIHRoZSBjb29yZGluYXRlcyBwb2ludCB0byBhIHBsYWNlIHdpdGhpbiB0aGUgdG9wIGZpeGVkIHJvd3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25GaXhlZENvbHVtbiBgdHJ1ZWAgaWYgdGhlIGNvb3JkaW5hdGVzIHBvaW50IHRvIGEgcGxhY2Ugd2l0aGluIHRoZSBmaXhlZCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZWxlbWVudE9mZnNldCBPZmZzZXQgcG9zaXRpb24gb2YgdGhlIGNlbGwgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNwcmVhZGVyT2Zmc2V0IE9mZnNldCBwb3NpdGlvbiBvZiB0aGUgc3ByZWFkZXIgZWxlbWVudC5cbiAgICogQHJldHVybnMge3t0b3A6IG51bWJlciwgbGVmdDogbnVtYmVyfX1cbiAgICovXG4gIGdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KG9uRml4ZWRSb3dUb3AsIG9uRml4ZWRDb2x1bW4sIGVsZW1lbnRPZmZzZXQsIHNwcmVhZGVyT2Zmc2V0KSB7XG4gICAgY29uc3QgYWJzb2x1dGVSb290RWxlbWVudFBvc2l0aW9uID0gdGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyB0b2RvIHJlZmFjdG9yaW5nOiBERU1FVEVSXG4gICAgbGV0IGhvcml6b250YWxPZmZzZXQgPSAwO1xuICAgIGxldCB2ZXJ0aWNhbE9mZnNldCA9IDA7XG4gICAgaWYgKCFvbkZpeGVkQ29sdW1uKSB7XG4gICAgICBob3Jpem9udGFsT2Zmc2V0ID0gc3ByZWFkZXJPZmZzZXQuc3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBhYnNvbHV0ZVJvb3RFbGVtZW50U3RhcnRQb3NpdGlvbiA9IGFic29sdXRlUm9vdEVsZW1lbnRQb3NpdGlvbi5sZWZ0O1xuICAgICAgaWYgKHRoaXMuaXNSdGwoKSkge1xuICAgICAgICBhYnNvbHV0ZVJvb3RFbGVtZW50U3RhcnRQb3NpdGlvbiA9IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoIC0gKGFic29sdXRlUm9vdEVsZW1lbnRQb3NpdGlvbi5sZWZ0ICsgYWJzb2x1dGVSb290RWxlbWVudFBvc2l0aW9uLndpZHRoICsgKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKSgpKTtcbiAgICAgIH1cbiAgICAgIGhvcml6b250YWxPZmZzZXQgPSBhYnNvbHV0ZVJvb3RFbGVtZW50U3RhcnRQb3NpdGlvbiA8PSAwID8gLTEgKiBhYnNvbHV0ZVJvb3RFbGVtZW50U3RhcnRQb3NpdGlvbiA6IDA7XG4gICAgfVxuICAgIGlmIChvbkZpeGVkUm93VG9wKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZU92ZXJsYXlQb3NpdGlvbiA9IHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gYWJzb2x1dGVPdmVybGF5UG9zaXRpb24udG9wIC0gYWJzb2x1dGVSb290RWxlbWVudFBvc2l0aW9uLnRvcDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmVydGljYWxPZmZzZXQgPSBzcHJlYWRlck9mZnNldC50b3A7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogZWxlbWVudE9mZnNldC5zdGFydCArIGhvcml6b250YWxPZmZzZXQsXG4gICAgICB0b3A6IGVsZW1lbnRPZmZzZXQudG9wICsgdmVydGljYWxPZmZzZXRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgY29vcmRpbmF0ZXMgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQsIHJlbGF0aXZlIHRvIHRoZSByb290IEhhbmRzb250YWJsZSBlbGVtZW50IHdpdGhpbiBhIHRhYmxlIHdpdGggd2luZG93XG4gICAqIGFzIGEgc2Nyb2xsYWJsZSBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG9uRml4ZWRSb3dUb3AgYHRydWVgIGlmIHRoZSBjb29yZGluYXRlcyBwb2ludCB0byBhIHBsYWNlIHdpdGhpbiB0aGUgdG9wIGZpeGVkIHJvd3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb25GaXhlZFJvd0JvdHRvbSBgdHJ1ZWAgaWYgdGhlIGNvb3JkaW5hdGVzIHBvaW50IHRvIGEgcGxhY2Ugd2l0aGluIHRoZSBib3R0b20gZml4ZWQgcm93cy5cbiAgICogQHBhcmFtIHtib29sZWFufSBvbkZpeGVkQ29sdW1uIGB0cnVlYCBpZiB0aGUgY29vcmRpbmF0ZXMgcG9pbnQgdG8gYSBwbGFjZSB3aXRoaW4gdGhlIGZpeGVkIGNvbHVtbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbGVtZW50T2Zmc2V0IE9mZnNldCBwb3NpdGlvbiBvZiB0aGUgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3ByZWFkZXJPZmZzZXQgT2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBzcHJlYWRlciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7e3RvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXJ9fVxuICAgKi9cbiAgZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIob25GaXhlZFJvd1RvcCwgb25GaXhlZFJvd0JvdHRvbSwgb25GaXhlZENvbHVtbiwgZWxlbWVudE9mZnNldCwgc3ByZWFkZXJPZmZzZXQpIHtcbiAgICBjb25zdCB0YWJsZVNjcm9sbFBvc2l0aW9uID0ge1xuICAgICAgaG9yaXpvbnRhbDogdGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxcbiAgICAgIHZlcnRpY2FsOiB0aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKVxuICAgIH07XG4gICAgbGV0IGhvcml6b250YWxPZmZzZXQgPSAwO1xuICAgIGxldCB2ZXJ0aWNhbE9mZnNldCA9IDA7XG4gICAgaWYgKCFvbkZpeGVkQ29sdW1uKSB7XG4gICAgICBob3Jpem9udGFsT2Zmc2V0ID0gdGFibGVTY3JvbGxQb3NpdGlvbi5ob3Jpem9udGFsIC0gc3ByZWFkZXJPZmZzZXQuc3RhcnQ7XG4gICAgfVxuICAgIGlmIChvbkZpeGVkUm93Qm90dG9tKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZVJvb3RFbGVtZW50UG9zaXRpb24gPSB0aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIHRvZG8gcmVmYWN0b3Jpbmc6IERFTUVURVJcbiAgICAgIGNvbnN0IGFic29sdXRlT3ZlcmxheVBvc2l0aW9uID0gdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOyAvLyB0b2RvIHJlZmFjdG9yaW5nOiBERU1FVEVSXG5cbiAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gYWJzb2x1dGVPdmVybGF5UG9zaXRpb24udG9wICogLTEgKyBhYnNvbHV0ZVJvb3RFbGVtZW50UG9zaXRpb24udG9wO1xuICAgIH0gZWxzZSBpZiAoIW9uRml4ZWRSb3dUb3ApIHtcbiAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gdGFibGVTY3JvbGxQb3NpdGlvbi52ZXJ0aWNhbCAtIHNwcmVhZGVyT2Zmc2V0LnRvcDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBlbGVtZW50T2Zmc2V0LnN0YXJ0IC0gaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgIHRvcDogZWxlbWVudE9mZnNldC50b3AgLSB2ZXJ0aWNhbE9mZnNldFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIGNsb25lIG9mIHRhYmxlIGZvciBvdmVybGF5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2xvbmV9XG4gICAqL1xuICBtYWtlQ2xvbmUoKSB7XG4gICAgaWYgKF9jb25zdGFudHMuQ0xPTkVfVFlQRVMuaW5kZXhPZih0aGlzLnR5cGUpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0eXBlIFwiJHt0aGlzLnR5cGV9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZSxcbiAgICAgIHd0U2V0dGluZ3NcbiAgICB9ID0gdGhpcy53b3Q7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50LFxuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IGNsb25lID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGNsb25lZFRhYmxlID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgY29uc3QgdGFibGVQYXJlbnQgPSB3dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICBjbG9uZS5jbGFzc05hbWUgPSBgJHtfY29uc3RhbnRzLkNMT05FX0NMQVNTX05BTUVTLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgO1xuICAgIGNsb25lLnNldEF0dHJpYnV0ZSgnZGlyJywgdGhpcy5pc1J0bCgpID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgY2xvbmUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIGNsb25lLnN0eWxlLnRvcCA9IDA7XG4gICAgY2xvbmUuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgaWYgKHRoaXMuaXNSdGwoKSkge1xuICAgICAgY2xvbmUuc3R5bGUucmlnaHQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9uZS5zdHlsZS5sZWZ0ID0gMDtcbiAgICB9XG4gICAgaWYgKHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnYXJpYVRhZ3MnKSkge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoY2xvbmUsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCldKTtcbiAgICB9XG4gICAgY2xvbmVkVGFibGUuY2xhc3NOYW1lID0gd3RUYWJsZS5UQUJMRS5jbGFzc05hbWU7XG5cbiAgICAvLyBDbG9uZSB0aGUgbWFpbiB0YWJsZSdzIGByb2xlYCBhdHRyaWJ1dGUgdG8gdGhlIGNsb25lZCB0YWJsZS5cbiAgICBjb25zdCBtYWluVGFibGVSb2xlID0gd3RUYWJsZS5UQUJMRS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICBpZiAobWFpblRhYmxlUm9sZSkge1xuICAgICAgY2xvbmVkVGFibGUuc2V0QXR0cmlidXRlKCdyb2xlJywgd3RUYWJsZS5UQUJMRS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSk7XG4gICAgfVxuICAgIGNsb25lLmFwcGVuZENoaWxkKGNsb25lZFRhYmxlKTtcbiAgICB0YWJsZVBhcmVudC5hcHBlbmRDaGlsZChjbG9uZSk7XG4gICAgY29uc3QgcHJldmVudE92ZXJmbG93ID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRPdmVyZmxvdycpO1xuICAgIGlmIChwcmV2ZW50T3ZlcmZsb3cgPT09IHRydWUgfHwgcHJldmVudE92ZXJmbG93ID09PSAnaG9yaXpvbnRhbCcgJiYgdGhpcy50eXBlID09PSBfY29uc3RhbnRzLkNMT05FX1RPUCB8fCBwcmV2ZW50T3ZlcmZsb3cgPT09ICd2ZXJ0aWNhbCcgJiYgdGhpcy50eXBlID09PSBfY29uc3RhbnRzLkNMT05FX0lOTElORV9TVEFSVCkge1xuICAgICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RXaW5kb3c7XG4gICAgfSBlbHNlIGlmIChyb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGFibGVQYXJlbnQpLmdldFByb3BlcnR5VmFsdWUoJ292ZXJmbG93JykgPT09ICdoaWRkZW4nKSB7XG4gICAgICB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50ID0gd3RUYWJsZS5ob2xkZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQgPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYWJsZUVsZW1lbnQpKHd0VGFibGUuVEFCTEUpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgV2Fsa29udGFibGUgY2xhc3NcbiAgICByZXR1cm4gbmV3IF9jbG9uZS5kZWZhdWx0KGNsb25lZFRhYmxlLCB0aGlzLnd0U2V0dGluZ3MsIHtcbiAgICAgIC8vIHRvZG8gaW9jIGZhY3RvcnlcbiAgICAgIHNvdXJjZTogdGhpcy53b3QsXG4gICAgICBvdmVybGF5OiB0aGlzLFxuICAgICAgdmlld3BvcnQ6IHRoaXMud290Lnd0Vmlld3BvcnQsXG4gICAgICAvLyB0b2RvIGlvYyAsIG9yIGZhY3RvciBmdW5jIGlmIHVzZWQgb25seSBoZXJlXG4gICAgICBldmVudDogdGhpcy53b3Qud3RFdmVudCxcbiAgICAgIC8vIHRvZG8gaW9jICwgb3IgZmFjdG9yeSBmdW5jIGlmIHVzZWQgb25seSBoZXJlXG4gICAgICBzZWxlY3Rpb25NYW5hZ2VyOiB0aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyIC8vIHRvZG8gaW9jICwgb3IgZmFjdG9yeSBmdW5jIGlmIHVzZWQgb25seSBoZXJlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaC9SZWRyYXcgb3ZlcmxheS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZmFzdERyYXc9ZmFsc2VdIFdoZW4gYHRydWVgLCB0cnkgdG8gcmVmcmVzaCBvbmx5IHRoZSBwb3NpdGlvbnMgb2YgYm9yZGVycyB3aXRob3V0IHJlcmVuZGVyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGF0YS4gSXQgd2lsbCBvbmx5IHdvcmsgaWYgVGFibGUuZHJhdygpIGRvZXMgbm90IGZvcmNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJpbmcgYW55d2F5LlxuICAgKi9cbiAgcmVmcmVzaCgpIHtcbiAgICBsZXQgZmFzdERyYXcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGlmICh0aGlzLm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLmNsb25lLmRyYXcoZmFzdERyYXcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBvdmVybGF5IHN0eWxlcyB0byBpbml0aWFsIHZhbHVlcy5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7IC8vIHRvZG8gcmVmYWN0b3Jpbmc6IERFTUVURVJcbiAgICBjb25zdCBoaWRlciA9IHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlcjsgLy8gdG9kbyByZWZhY3RvcmluZzogREVNRVRFUlxuICAgIGNvbnN0IGhvbGRlclN0eWxlID0gaG9sZGVyLnN0eWxlO1xuICAgIGNvbnN0IGhpZGVyU3R5bGUgPSBoaWRlci5zdHlsZTtcbiAgICBjb25zdCByb290U3R5bGUgPSBob2xkZXIucGFyZW50Tm9kZS5zdHlsZTtcbiAgICBbaG9sZGVyU3R5bGUsIGhpZGVyU3R5bGUsIHJvb3RTdHlsZV0uZm9yRWFjaChzdHlsZSA9PiB7XG4gICAgICBzdHlsZS53aWR0aCA9ICcnO1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIFdhbGtvbnRhYmxlIGlzIHJ1bm5pbmcgaW4gUlRMIG1vZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNSdGwoKSB7XG4gICAgcmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdydGxNb2RlJyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBvdmVybGF5IGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7IC8vIHRvZG8gY2hlY2sgaWYgaXQgaXMgZ29vZCBwbGFjZSBmb3IgdGhhdCBvcGVyYXRpb25cbiAgfVxufVxuZXhwb3J0cy5PdmVybGF5ID0gT3ZlcmxheTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYm90dG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi8uLi90YWJsZS9ib3R0b21cIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQGNsYXNzIEJvdHRvbU92ZXJsYXlcbiAqL1xuY2xhc3MgQm90dG9tT3ZlcmxheSBleHRlbmRzIF9iYXNlLk92ZXJsYXkge1xuICAvKipcbiAgICogQHBhcmFtIHtXYWxrb250YWJsZX0gd290SW5zdGFuY2UgVGhlIFdhbGtvbnRhYmxlIGluc3RhbmNlLiBAVE9ETyByZWZhY3RvcmluZzogY2hlY2sgaWYgY2FuIGJlIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7RmFjYWRlR2V0dGVyfSBmYWNhZGVHZXR0ZXIgRnVuY3Rpb24gd2hpY2ggcmV0dXJuIHByb3BlciBmYWNhZGUuXG4gICAqIEBwYXJhbSB7U2V0dGluZ3N9IHd0U2V0dGluZ3MgVGhlIFdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBEb20gZWxlbWVudHMgYm91bmQgdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih3b3RJbnN0YW5jZSwgZmFjYWRlR2V0dGVyLCB3dFNldHRpbmdzLCBkb21CaW5kaW5ncykge1xuICAgIHN1cGVyKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIF9jb25zdGFudHMuQ0xPTkVfQk9UVE9NLCB3dFNldHRpbmdzLCBkb21CaW5kaW5ncyk7XG4gICAgLyoqXG4gICAgICogQ2FjaGVkIHZhbHVlIHdoaWNoIGhvbGRzIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYGZpeGVkUm93c0JvdHRvbWAgb3B0aW9uLlxuICAgICAqIEl0IGlzIHVzZWQgYXMgYSBjb21wYXJpc29uIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gdGhhdCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FjaGVkRml4ZWRSb3dzQm90dG9tXCIsIC0xKTtcbiAgICB0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NCb3R0b20nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBgVGFibGVgIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBvdmVybGF5LlxuICAgKlxuICAgKiBAc2VlIFRhYmxlI2NvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Li4uKn0gYXJncyBQYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIGBUYWJsZWAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtCb3R0b21PdmVybGF5VGFibGV9XG4gICAqL1xuICBjcmVhdGVUYWJsZSgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHJldHVybiBuZXcgX2JvdHRvbS5kZWZhdWx0KC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBvdmVybGF5IHNob3VsZCBiZSBmdWxseSByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzaG91bGRCZVJlbmRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRvcCBvdmVybGF5IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlc2V0Rml4ZWRQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubmVlZEZ1bGxSZW5kZXIgfHwgIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpIHx8ICF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSB7XG4gICAgICAvLyByZW1vdmVkIGZyb20gRE9NXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCBvdmVybGF5Um9vdCA9IHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBvdmVybGF5Um9vdC5zdHlsZS50b3AgPSAnJztcbiAgICBsZXQgb3ZlcmxheVBvc2l0aW9uID0gMDtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgPT09IHJvb3RXaW5kb3cgJiYgKCFwcmV2ZW50T3ZlcmZsb3cgfHwgcHJldmVudE92ZXJmbG93ICE9PSAndmVydGljYWwnKSkge1xuICAgICAgb3ZlcmxheVBvc2l0aW9uID0gdGhpcy5nZXRPdmVybGF5T2Zmc2V0KCk7XG4gICAgICBvdmVybGF5Um9vdC5zdHlsZS5ib3R0b20gPSBgJHtvdmVybGF5UG9zaXRpb259cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdmVybGF5UG9zaXRpb24gPSB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICB0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uQ2hhbmdlZCA9IHRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKG92ZXJsYXlQb3NpdGlvbik7XG4gICAgdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICByZXR1cm4gcG9zaXRpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGJvdHRvbSBvdmVybGF5IHBvc2l0aW9uLlxuICAgKi9cbiAgcmVwb3NpdGlvbk92ZXJsYXkoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZSxcbiAgICAgIHd0Vmlld3BvcnRcbiAgICB9ID0gdGhpcy53b3Q7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG4gICAgY29uc3QgY2xvbmVSb290ID0gdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO1xuICAgIGxldCBib3R0b21PZmZzZXQgPSAwO1xuICAgIGlmICghd3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpKSB7XG4gICAgICBib3R0b21PZmZzZXQgKz0gd3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKSAtIHd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtcbiAgICB9XG4gICAgaWYgKHd0Vmlld3BvcnQuaGFzVmVydGljYWxTY3JvbGwoKSAmJiB3dFZpZXdwb3J0Lmhhc0hvcml6b250YWxTY3JvbGwoKSkge1xuICAgICAgYm90dG9tT2Zmc2V0ICs9ICgwLCBfZWxlbWVudC5nZXRTY3JvbGxiYXJXaWR0aCkocm9vdERvY3VtZW50KTtcbiAgICB9XG4gICAgY2xvbmVSb290LnN0eWxlLmJvdHRvbSA9IGAke2JvdHRvbU9mZnNldH1weGA7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbWFpbiBvdmVybGF5J3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zIFRoZSBzY3JvbGwgcG9zaXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9PT0gcm9vdFdpbmRvdykge1xuICAgICAgcm9vdFdpbmRvdy5zY3JvbGxUbygoMCwgX2VsZW1lbnQuZ2V0V2luZG93U2Nyb2xsTGVmdCkocm9vdFdpbmRvdyksIHBvcyk7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgIT09IHBvcykge1xuICAgICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgPSBwb3M7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG9uU2Nyb2xsIGhvb2sgY2FsbGJhY2suXG4gICAqL1xuICBvblNjcm9sbCgpIHtcbiAgICB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnb25TY3JvbGxIb3Jpem9udGFsbHknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRvdGFsIHN1bSBjZWxscyBoZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIFJvdyBpbmRleCB3aGljaCBjYWxjdWxhdGVzIHN0YXJ0ZWQgZnJvbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIFJvdyBpbmRleCB3aGVyZSBjYWxjdWxhdGlvbiBpcyBmaW5pc2hlZC5cbiAgICogQHJldHVybnMge251bWJlcn0gSGVpZ2h0IHN1bS5cbiAgICovXG4gIHN1bUNlbGxTaXplcyhmcm9tLCB0bykge1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGUsXG4gICAgICB3dFNldHRpbmdzXG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IGRlZmF1bHRSb3dIZWlnaHQgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2RlZmF1bHRSb3dIZWlnaHQnKTtcbiAgICBsZXQgcm93ID0gZnJvbTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICB3aGlsZSAocm93IDwgdG8pIHtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHd0VGFibGUuZ2V0Um93SGVpZ2h0KHJvdyk7XG4gICAgICBzdW0gKz0gaGVpZ2h0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0Um93SGVpZ2h0IDogaGVpZ2h0O1xuICAgICAgcm93ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IG92ZXJsYXkgcm9vdCBlbGVtZW50LCBjaGlsZHJlbiBhbmQgbWFzdGVyIHRhYmxlIGVsZW1lbnQgc2l6ZXMgKHdpZHRoLCBoZWlnaHQpLlxuICAgKi9cbiAgYWRqdXN0RWxlbWVudHNTaXplKCkge1xuICAgIHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKTtcbiAgICBpZiAodGhpcy5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgdGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKTtcbiAgICAgIHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgb3ZlcmxheSByb290IGVsZW1lbnQgc2l6ZSAod2lkdGggYW5kIGhlaWdodCkuXG4gICAqL1xuICBhZGp1c3RSb290RWxlbWVudFNpemUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZSxcbiAgICAgIHd0Vmlld3BvcnRcbiAgICB9ID0gdGhpcy53b3Q7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50LFxuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKShyb290RG9jdW1lbnQpO1xuICAgIGNvbnN0IG92ZXJsYXlSb290ID0gdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO1xuICAgIGNvbnN0IG92ZXJsYXlSb290U3R5bGUgPSBvdmVybGF5Um9vdC5zdHlsZTtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgIT09IHJvb3RXaW5kb3cgfHwgcHJldmVudE92ZXJmbG93ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgIGxldCB3aWR0aCA9IHd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTtcbiAgICAgIGlmICh0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhclJpZ2h0KSB7XG4gICAgICAgIHdpZHRoIC09IHNjcm9sbGJhcldpZHRoO1xuICAgICAgfVxuICAgICAgd2lkdGggPSBNYXRoLm1pbih3aWR0aCwgd3RUYWJsZS53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKTtcbiAgICAgIG92ZXJsYXlSb290U3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG92ZXJsYXlSb290U3R5bGUud2lkdGggPSAnJztcbiAgICB9XG4gICAgdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aCA9IG92ZXJsYXlSb290U3R5bGUud2lkdGg7XG4gICAgbGV0IHRhYmxlSGVpZ2h0ID0gKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO1xuICAgIGlmICghdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpKSB7XG4gICAgICB0YWJsZUhlaWdodCA9IDA7XG4gICAgfVxuICAgIG92ZXJsYXlSb290U3R5bGUuaGVpZ2h0ID0gYCR7dGFibGVIZWlnaHR9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCBvdmVybGF5IHJvb3QgY2hpbGRzIHNpemUuXG4gICAqL1xuICBhZGp1c3RSb290Q2hpbGRyZW5TaXplKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhvbGRlclxuICAgIH0gPSB0aGlzLmNsb25lLnd0VGFibGU7XG4gICAgdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoID0gdGhpcy5oaWRlci5zdHlsZS53aWR0aDtcbiAgICBob2xkZXIuc3R5bGUud2lkdGggPSBob2xkZXIucGFyZW50Tm9kZS5zdHlsZS53aWR0aDtcbiAgICBob2xkZXIuc3R5bGUuaGVpZ2h0ID0gaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCB0aGUgb3ZlcmxheSBkaW1lbnNpb25zIGFuZCBwb3NpdGlvbi5cbiAgICovXG4gIGFwcGx5VG9ET00oKSB7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxSb3dzJyk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcCA9IGAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7XG4gICAgfSBlbHNlIGlmICh0b3RhbCA9PT0gMCkge1xuICAgICAgLy8gY2FuIGhhcHBlbiBpZiB0aGVyZSBhcmUgMCByb3dzXG4gICAgICB0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcCA9ICcwJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yJyk7XG4gICAgfVxuICAgIHRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tID0gJyc7XG4gICAgaWYgKHRoaXMubmVlZEZ1bGxSZW5kZXIpIHtcbiAgICAgIHRoaXMuc3luY092ZXJsYXlPZmZzZXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemUgY2FsY3VsYXRlZCBsZWZ0IHBvc2l0aW9uIHRvIGFuIGVsZW1lbnQuXG4gICAqL1xuICBzeW5jT3ZlcmxheU9mZnNldCgpIHtcbiAgICBjb25zdCBzdHlsZVByb3BlcnR5ID0gdGhpcy5pc1J0bCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICBjb25zdCB7XG4gICAgICBzcHJlYWRlclxuICAgIH0gPSB0aGlzLmNsb25lLnd0VGFibGU7XG4gICAgaWYgKHR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgICBzcHJlYWRlci5zdHlsZVtzdHlsZVByb3BlcnR5XSA9IGAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNwcmVhZGVyLnN0eWxlW3N0eWxlUHJvcGVydHldID0gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdmVydGljYWxseSB0byBhIHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZVJvdyBSb3cgaW5kZXggd2hpY2ggeW91IHdhbnQgdG8gc2Nyb2xsIHRvLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtib3R0b21FZGdlPWZhbHNlXSBJZiBgdHJ1ZWAsIHNjcm9sbHMgYWNjb3JkaW5nIHRvIHRoZSBib3R0b20gZWRnZSAodG9wIGVkZ2UgaXMgYnkgZGVmYXVsdCkuXG4gICAqL1xuICBzY3JvbGxUbyhzb3VyY2VSb3csIGJvdHRvbUVkZ2UpIHtcbiAgICBsZXQgbmV3WSA9IHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtcbiAgICBjb25zdCBzb3VyY2VJbnN0YW5jZSA9IHRoaXMud290LmNsb25lU291cmNlID8gdGhpcy53b3QuY2xvbmVTb3VyY2UgOiB0aGlzLndvdDtcbiAgICBjb25zdCBtYWluSG9sZGVyID0gc291cmNlSW5zdGFuY2Uud3RUYWJsZS5ob2xkZXI7XG4gICAgbGV0IHNjcm9sbGJhckNvbXBlbnNhdGlvbiA9IDA7XG4gICAgaWYgKGJvdHRvbUVkZ2UgJiYgbWFpbkhvbGRlci5vZmZzZXRIZWlnaHQgIT09IG1haW5Ib2xkZXIuY2xpZW50SGVpZ2h0KSB7XG4gICAgICBzY3JvbGxiYXJDb21wZW5zYXRpb24gPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KTtcbiAgICB9XG4gICAgaWYgKGJvdHRvbUVkZ2UpIHtcbiAgICAgIG5ld1kgKz0gdGhpcy5zdW1DZWxsU2l6ZXMoMCwgc291cmNlUm93ICsgMSk7XG4gICAgICBuZXdZIC09IHRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKTtcbiAgICAgIC8vIEZpeCAxIHBpeGVsIG9mZnNldCB3aGVuIGNlbGwgaXMgc2VsZWN0ZWRcbiAgICAgIG5ld1kgKz0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3WSArPSB0aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJyksIHNvdXJjZVJvdyk7XG4gICAgfVxuICAgIG5ld1kgKz0gc2Nyb2xsYmFyQ29tcGVuc2F0aW9uO1xuICAgIHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24obmV3WSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0YWJsZSBwYXJlbnQgdG9wIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQgPT09IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykge1xuICAgICAgcmV0dXJuIHRoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWFpbiBvdmVybGF5J3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBNYWluIHRhYmxlJ3MgdmVydGljYWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKi9cbiAgZ2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgcmV0dXJuICgwLCBfZWxlbWVudC5nZXRTY3JvbGxUb3ApKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsIHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWFpbiBvdmVybGF5J3MgdmVydGljYWwgb3ZlcmxheSBvZmZzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IE1haW4gdGFibGUncyB2ZXJ0aWNhbCBvdmVybGF5IG9mZnNldC5cbiAgICovXG4gIGdldE92ZXJsYXlPZmZzZXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IHByZXZlbnRPdmVyZmxvdyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdwcmV2ZW50T3ZlcmZsb3cnKTtcbiAgICBsZXQgb3ZlcmxheU9mZnNldCA9IDA7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgPT09IHJvb3RXaW5kb3cgJiYgKCFwcmV2ZW50T3ZlcmZsb3cgfHwgcHJldmVudE92ZXJmbG93ICE9PSAndmVydGljYWwnKSkge1xuICAgICAgY29uc3Qgcm9vdEhlaWdodCA9IHRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtcbiAgICAgIGNvbnN0IG92ZXJsYXlSb290SGVpZ2h0ID0gdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7XG4gICAgICBjb25zdCBtYXhPZmZzZXQgPSByb290SGVpZ2h0IC0gb3ZlcmxheVJvb3RIZWlnaHQ7XG4gICAgICBjb25zdCBkb2NDbGllbnRIZWlnaHQgPSB0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgb3ZlcmxheU9mZnNldCA9IE1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSAtIHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSAtIGRvY0NsaWVudEhlaWdodCArIHJvb3RIZWlnaHQsIDApO1xuICAgICAgaWYgKG92ZXJsYXlPZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgb3ZlcmxheU9mZnNldCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdmVybGF5T2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY3NzIGNsYXNzZXMgdG8gaGlkZSB0aGUgaGVhZGVyIGJvcmRlcidzIGhlYWRlciAoY2VsbC1zZWxlY3Rpb24gYm9yZGVyIGhpZGluZyBpc3N1ZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3NpdGlvbiBIZWFkZXIgWSBwb3NpdGlvbiBpZiB0cmltbWluZyBjb250YWluZXIgaXMgd2luZG93IG9yIHNjcm9sbCB0b3AgaWYgbm90LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihwb3NpdGlvbikge1xuICAgIGNvbnN0IGZpeGVkUm93c0JvdHRvbSA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NCb3R0b20nKTtcbiAgICBjb25zdCBhcmVGaXhlZFJvd3NCb3R0b21DaGFuZ2VkID0gdGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20gIT09IGZpeGVkUm93c0JvdHRvbTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICBsZXQgcG9zaXRpb25DaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKChhcmVGaXhlZFJvd3NCb3R0b21DaGFuZ2VkIHx8IGZpeGVkUm93c0JvdHRvbSA9PT0gMCkgJiYgY29sdW1uSGVhZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXN0ZXJQYXJlbnQgPSB0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9ICgwLCBfZWxlbWVudC5oYXNDbGFzcykobWFzdGVyUGFyZW50LCAnaW5uZXJCb3JkZXJCb3R0b20nKTtcbiAgICAgIHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c0JvdHRvbScpO1xuICAgICAgaWYgKHBvc2l0aW9uIHx8IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKSA9PT0gMCkge1xuICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKG1hc3RlclBhcmVudCwgJ2lubmVyQm9yZGVyQm90dG9tJyk7XG4gICAgICAgIHBvc2l0aW9uQ2hhbmdlZCA9ICFwcmV2aW91c1N0YXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShtYXN0ZXJQYXJlbnQsICdpbm5lckJvcmRlckJvdHRvbScpO1xuICAgICAgICBwb3NpdGlvbkNoYW5nZWQgPSBwcmV2aW91c1N0YXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zaXRpb25DaGFuZ2VkO1xuICB9XG59XG5leHBvcnRzLkJvdHRvbU92ZXJsYXkgPSBCb3R0b21PdmVybGF5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2JvdHRvbUlubGluZVN0YXJ0Q29ybmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGUvYm90dG9tSW5saW5lU3RhcnRDb3JuZXJcIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIEBjbGFzcyBCb3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXlcbiAqL1xuY2xhc3MgQm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IGV4dGVuZHMgX2Jhc2UuT3ZlcmxheSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlfSB3b3RJbnN0YW5jZSBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuIEBUT0RPIHJlZmFjdG9yaW5nOiBjaGVjayBpZiBjYW4gYmUgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtGYWNhZGVHZXR0ZXJ9IGZhY2FkZUdldHRlciBGdW5jdGlvbiB3aGljaCByZXR1cm4gcHJvcGVyIGZhY2FkZS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIERvbSBlbGVtZW50cyBib3VuZCB0byB0aGUgY3VycmVudCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtCb3R0b21PdmVybGF5fSBib3R0b21PdmVybGF5IFRoZSBpbnN0YW5jZSBvZiB0aGUgVG9wIG92ZXJsYXkuXG4gICAqIEBwYXJhbSB7SW5saW5lU3RhcnRPdmVybGF5fSBpbmxpbmVTdGFydE92ZXJsYXkgVGhlIGluc3RhbmNlIG9mIHRoZSBJbmxpbmVTdGFydCBvdmVybGF5LlxuICAgKi9cbiAgY29uc3RydWN0b3Iod290SW5zdGFuY2UsIGZhY2FkZUdldHRlciwgd3RTZXR0aW5ncywgZG9tQmluZGluZ3MsIGJvdHRvbU92ZXJsYXksIGlubGluZVN0YXJ0T3ZlcmxheSkge1xuICAgIHN1cGVyKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIF9jb25zdGFudHMuQ0xPTkVfQk9UVE9NX0lOTElORV9TVEFSVF9DT1JORVIsIHd0U2V0dGluZ3MsIGRvbUJpbmRpbmdzKTtcbiAgICB0aGlzLmJvdHRvbU92ZXJsYXkgPSBib3R0b21PdmVybGF5O1xuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5ID0gaW5saW5lU3RhcnRPdmVybGF5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIHN1YmNsYXNzIG9mIGBUYWJsZWAgdGhhdCBpcyByZWxldmFudCB0byB0aGlzIG92ZXJsYXkuXG4gICAqXG4gICAqIEBzZWUgVGFibGUjY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHsuLi4qfSBhcmdzIFBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGZvcndhcmRlZCB0byB0aGUgYFRhYmxlYCBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybnMge0JvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVRhYmxlfVxuICAgKi9cbiAgY3JlYXRlVGFibGUoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9ib3R0b21JbmxpbmVTdGFydENvcm5lci5kZWZhdWx0KC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBvdmVybGF5IHNob3VsZCBiZSBmdWxseSByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzaG91bGRCZVJlbmRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheScpICYmIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb3JuZXIgb3ZlcmxheSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXNldEZpeGVkUG9zaXRpb24oKSB7XG4gICAgY29uc3Qge1xuICAgICAgd290XG4gICAgfSA9IHRoaXM7XG4gICAgdGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpO1xuICAgIGlmICghd290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpIHtcbiAgICAgIC8vIHJlbW92ZWQgZnJvbSBET01cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmxheVJvb3QgPSB0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7XG4gICAgb3ZlcmxheVJvb3Quc3R5bGUudG9wID0gJyc7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgPT09IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykge1xuICAgICAgY29uc3QgaW5saW5lU3RhcnRPZmZzZXQgPSB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7XG4gICAgICBjb25zdCBib3R0b20gPSB0aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO1xuICAgICAgb3ZlcmxheVJvb3Quc3R5bGVbdGhpcy5pc1J0bCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSBgJHtpbmxpbmVTdGFydE9mZnNldH1weGA7XG4gICAgICBvdmVybGF5Um9vdC5zdHlsZS5ib3R0b20gPSBgJHtib3R0b219cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2VsZW1lbnQucmVzZXRDc3NUcmFuc2Zvcm0pKG92ZXJsYXlSb290KTtcbiAgICAgIHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtcbiAgICB9XG4gICAgbGV0IHRhYmxlSGVpZ2h0ID0gKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO1xuICAgIGNvbnN0IHRhYmxlV2lkdGggPSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtcbiAgICBpZiAoIXRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKSkge1xuICAgICAgdGFibGVIZWlnaHQgPSAwO1xuICAgIH1cbiAgICBvdmVybGF5Um9vdC5zdHlsZS5oZWlnaHQgPSBgJHt0YWJsZUhlaWdodH1weGA7XG4gICAgb3ZlcmxheVJvb3Quc3R5bGUud2lkdGggPSBgJHt0YWJsZVdpZHRofXB4YDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVwb3NpdGlvbiB0aGUgb3ZlcmxheS5cbiAgICovXG4gIHJlcG9zaXRpb25PdmVybGF5KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGUsXG4gICAgICB3dFZpZXdwb3J0XG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3REb2N1bWVudFxuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IGNsb25lUm9vdCA9IHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBsZXQgYm90dG9tT2Zmc2V0ID0gMDtcbiAgICBpZiAoIXd0Vmlld3BvcnQuaGFzVmVydGljYWxTY3JvbGwoKSkge1xuICAgICAgYm90dG9tT2Zmc2V0ICs9IHd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCkgLSB3dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7XG4gICAgfVxuICAgIGlmICh3dFZpZXdwb3J0Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkgJiYgd3RWaWV3cG9ydC5oYXNIb3Jpem9udGFsU2Nyb2xsKCkpIHtcbiAgICAgIGJvdHRvbU9mZnNldCArPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKHJvb3REb2N1bWVudCk7XG4gICAgfVxuICAgIGNsb25lUm9vdC5zdHlsZS5ib3R0b20gPSBgJHtib3R0b21PZmZzZXR9cHhgO1xuICB9XG59XG5leHBvcnRzLkJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSA9IEJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8qKlxuICogQHR5cGVkZWYgeyd0b3AnfCdib3R0b20nfCdpbmxpbmVfc3RhcnQnfCd0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lcid8J2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyJ30gQ0xPTkVfVFlQRVNfRU5VTVxuICovXG5jb25zdCBDTE9ORV9UT1AgPSBleHBvcnRzLkNMT05FX1RPUCA9ICd0b3AnO1xuY29uc3QgQ0xPTkVfQk9UVE9NID0gZXhwb3J0cy5DTE9ORV9CT1RUT00gPSAnYm90dG9tJztcbmNvbnN0IENMT05FX0lOTElORV9TVEFSVCA9IGV4cG9ydHMuQ0xPTkVfSU5MSU5FX1NUQVJUID0gJ2lubGluZV9zdGFydCc7XG5jb25zdCBDTE9ORV9UT1BfSU5MSU5FX1NUQVJUX0NPUk5FUiA9IGV4cG9ydHMuQ0xPTkVfVE9QX0lOTElORV9TVEFSVF9DT1JORVIgPSAndG9wX2lubGluZV9zdGFydF9jb3JuZXInO1xuY29uc3QgQ0xPTkVfQk9UVE9NX0lOTElORV9TVEFSVF9DT1JORVIgPSBleHBvcnRzLkNMT05FX0JPVFRPTV9JTkxJTkVfU1RBUlRfQ09STkVSID0gJ2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyJztcbmNvbnN0IENMT05FX1RZUEVTID0gZXhwb3J0cy5DTE9ORV9UWVBFUyA9IFtDTE9ORV9UT1AsIENMT05FX0JPVFRPTSwgQ0xPTkVfSU5MSU5FX1NUQVJULCBDTE9ORV9UT1BfSU5MSU5FX1NUQVJUX0NPUk5FUiwgQ0xPTkVfQk9UVE9NX0lOTElORV9TVEFSVF9DT1JORVJdO1xuY29uc3QgQ0xPTkVfQ0xBU1NfTkFNRVMgPSBleHBvcnRzLkNMT05FX0NMQVNTX05BTUVTID0gbmV3IE1hcChbW0NMT05FX1RPUCwgYGh0X2Nsb25lXyR7Q0xPTkVfVE9QfWBdLCBbQ0xPTkVfQk9UVE9NLCBgaHRfY2xvbmVfJHtDTE9ORV9CT1RUT019YF0sIFtDTE9ORV9JTkxJTkVfU1RBUlQsIGBodF9jbG9uZV8ke0NMT05FX0lOTElORV9TVEFSVH0gaHRfY2xvbmVfbGVmdGBdLCBbQ0xPTkVfVE9QX0lOTElORV9TVEFSVF9DT1JORVIsIGBodF9jbG9uZV8ke0NMT05FX1RPUF9JTkxJTkVfU1RBUlRfQ09STkVSfSBodF9jbG9uZV90b3BfbGVmdF9jb3JuZXJgXSwgW0NMT05FX0JPVFRPTV9JTkxJTkVfU1RBUlRfQ09STkVSLCBgaHRfY2xvbmVfJHtDTE9ORV9CT1RUT01fSU5MSU5FX1NUQVJUX0NPUk5FUn0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7XG4gIEJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTogdHJ1ZSxcbiAgQm90dG9tT3ZlcmxheTogdHJ1ZSxcbiAgSW5saW5lU3RhcnRPdmVybGF5OiB0cnVlLFxuICBPdmVybGF5OiB0cnVlLFxuICBUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6IHRydWUsXG4gIFRvcE92ZXJsYXk6IHRydWVcbn07XG52YXIgX2JvdHRvbUlubGluZVN0YXJ0Q29ybmVyID0gcmVxdWlyZShcIi4vYm90dG9tSW5saW5lU3RhcnRDb3JuZXJcIik7XG5leHBvcnRzLkJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSA9IF9ib3R0b21JbmxpbmVTdGFydENvcm5lci5Cb3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk7XG52YXIgX2JvdHRvbSA9IHJlcXVpcmUoXCIuL2JvdHRvbVwiKTtcbmV4cG9ydHMuQm90dG9tT3ZlcmxheSA9IF9ib3R0b20uQm90dG9tT3ZlcmxheTtcbnZhciBfaW5saW5lU3RhcnQgPSByZXF1aXJlKFwiLi9pbmxpbmVTdGFydFwiKTtcbmV4cG9ydHMuSW5saW5lU3RhcnRPdmVybGF5ID0gX2lubGluZVN0YXJ0LklubGluZVN0YXJ0T3ZlcmxheTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL19iYXNlXCIpO1xuZXhwb3J0cy5PdmVybGF5ID0gX2Jhc2UuT3ZlcmxheTtcbnZhciBfdG9wSW5saW5lU3RhcnRDb3JuZXIgPSByZXF1aXJlKFwiLi90b3BJbmxpbmVTdGFydENvcm5lclwiKTtcbmV4cG9ydHMuVG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ID0gX3RvcElubGluZVN0YXJ0Q29ybmVyLlRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTtcbnZhciBfdG9wID0gcmVxdWlyZShcIi4vdG9wXCIpO1xuZXhwb3J0cy5Ub3BPdmVybGF5ID0gX3RvcC5Ub3BPdmVybGF5O1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5PYmplY3Qua2V5cyhfY29uc3RhbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY29uc3RhbnRzW2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX2NvbnN0YW50c1trZXldO1xufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2lubGluZVN0YXJ0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGUvaW5saW5lU3RhcnRcIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX3NlbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi9zZWxlY3Rpb25cIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIEBjbGFzcyBJbmxpbmVTdGFydE92ZXJsYXlcbiAqL1xuY2xhc3MgSW5saW5lU3RhcnRPdmVybGF5IGV4dGVuZHMgX2Jhc2UuT3ZlcmxheSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlfSB3b3RJbnN0YW5jZSBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuIEBUT0RPIHJlZmFjdG9yaW5nOiBjaGVjayBpZiBjYW4gYmUgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtGYWNhZGVHZXR0ZXJ9IGZhY2FkZUdldHRlciBGdW5jdGlvbiB3aGljaCByZXR1cm4gcHJvcGVyIGZhY2FkZS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIERvbSBlbGVtZW50cyBib3VuZCB0byB0aGUgY3VycmVudCBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIHd0U2V0dGluZ3MsIGRvbUJpbmRpbmdzKSB7XG4gICAgc3VwZXIod290SW5zdGFuY2UsIGZhY2FkZUdldHRlciwgX2NvbnN0YW50cy5DTE9ORV9JTkxJTkVfU1RBUlQsIHd0U2V0dGluZ3MsIGRvbUJpbmRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBgVGFibGVgIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBvdmVybGF5LlxuICAgKlxuICAgKiBAc2VlIFRhYmxlI2NvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Li4uKn0gYXJncyBQYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIGBUYWJsZWAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtJbmxpbmVTdGFydE92ZXJsYXlUYWJsZX1cbiAgICovXG4gIGNyZWF0ZVRhYmxlKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfaW5saW5lU3RhcnQuZGVmYXVsdCguLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgb3ZlcmxheSBzaG91bGQgYmUgZnVsbHkgcmVuZGVyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2hvdWxkQmVSZW5kZXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3Nob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGxlZnQgb3ZlcmxheSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICByZXNldEZpeGVkUG9zaXRpb24oKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSB0aGlzLndvdDtcbiAgICBpZiAoIXRoaXMubmVlZEZ1bGxSZW5kZXIgfHwgIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpIHx8ICF3dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSB7XG4gICAgICAvLyByZW1vdmVkIGZyb20gRE9NXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCBvdmVybGF5Um9vdCA9IHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgbGV0IG92ZXJsYXlQb3NpdGlvbiA9IDA7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgPT09IHJvb3RXaW5kb3cgJiYgKCFwcmV2ZW50T3ZlcmZsb3cgfHwgcHJldmVudE92ZXJmbG93ICE9PSAnaG9yaXpvbnRhbCcpKSB7XG4gICAgICBvdmVybGF5UG9zaXRpb24gPSB0aGlzLmdldE92ZXJsYXlPZmZzZXQoKSAqICh0aGlzLmlzUnRsKCkgPyAtMSA6IDEpO1xuICAgICAgKDAsIF9lbGVtZW50LnNldE92ZXJsYXlQb3NpdGlvbikob3ZlcmxheVJvb3QsIGAke292ZXJsYXlQb3NpdGlvbn1weGAsICcwcHgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxheVBvc2l0aW9uID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgKDAsIF9lbGVtZW50LnJlc2V0Q3NzVHJhbnNmb3JtKShvdmVybGF5Um9vdCk7XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uQ2hhbmdlZCA9IHRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKG92ZXJsYXlQb3NpdGlvbik7XG4gICAgdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICByZXR1cm4gcG9zaXRpb25DaGFuZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1haW4gb3ZlcmxheSdzIGhvcml6b250YWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zIFRoZSBzY3JvbGwgcG9zaXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2V0U2Nyb2xsUG9zaXRpb24ocG9zKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1J0bCgpKSB7XG4gICAgICBwb3MgPSAtcG9zO1xuICAgIH1cbiAgICBpZiAodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9PT0gcm9vdFdpbmRvdyAmJiByb290V2luZG93LnNjcm9sbFggIT09IHBvcykge1xuICAgICAgcm9vdFdpbmRvdy5zY3JvbGxUbyhwb3MsICgwLCBfZWxlbWVudC5nZXRXaW5kb3dTY3JvbGxUb3ApKHJvb3RXaW5kb3cpKTtcbiAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQgIT09IHBvcykge1xuICAgICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0ID0gcG9zO1xuICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBvblNjcm9sbCBob29rIGNhbGxiYWNrLlxuICAgKi9cbiAgb25TY3JvbGwoKSB7XG4gICAgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uU2Nyb2xsVmVydGljYWxseScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdG90YWwgc3VtIGNlbGxzIHdpZHRoLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbSBDb2x1bW4gaW5kZXggd2hpY2ggY2FsY3VsYXRlcyBzdGFydGVkIGZyb20uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0byBDb2x1bW4gaW5kZXggd2hlcmUgY2FsY3VsYXRpb24gaXMgZmluaXNoZWQuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFdpZHRoIHN1bS5cbiAgICovXG4gIHN1bUNlbGxTaXplcyhmcm9tLCB0bykge1xuICAgIGNvbnN0IGRlZmF1bHRDb2x1bW5XaWR0aCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0Q29sdW1uV2lkdGgnKTtcbiAgICBsZXQgY29sdW1uID0gZnJvbTtcbiAgICBsZXQgc3VtID0gMDtcbiAgICB3aGlsZSAoY29sdW1uIDwgdG8pIHtcbiAgICAgIHN1bSArPSB0aGlzLndvdC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGNvbHVtbikgfHwgZGVmYXVsdENvbHVtbldpZHRoO1xuICAgICAgY29sdW1uICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IG92ZXJsYXkgcm9vdCBlbGVtZW50LCBjaGlsZHJlbiBhbmQgbWFzdGVyIHRhYmxlIGVsZW1lbnQgc2l6ZXMgKHdpZHRoLCBoZWlnaHQpLlxuICAgKi9cbiAgYWRqdXN0RWxlbWVudHNTaXplKCkge1xuICAgIHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKTtcbiAgICBpZiAodGhpcy5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgdGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKTtcbiAgICAgIHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgb3ZlcmxheSByb290IGVsZW1lbnQgc2l6ZSAod2lkdGggYW5kIGhlaWdodCkuXG4gICAqL1xuICBhZGp1c3RSb290RWxlbWVudFNpemUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSB0aGlzLndvdDtcbiAgICBjb25zdCB7XG4gICAgICByb290RG9jdW1lbnQsXG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG4gICAgY29uc3Qgc2Nyb2xsYmFySGVpZ2h0ID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKShyb290RG9jdW1lbnQpO1xuICAgIGNvbnN0IG92ZXJsYXlSb290ID0gdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO1xuICAgIGNvbnN0IG92ZXJsYXlSb290U3R5bGUgPSBvdmVybGF5Um9vdC5zdHlsZTtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgIT09IHJvb3RXaW5kb3cgfHwgcHJldmVudE92ZXJmbG93ID09PSAndmVydGljYWwnKSB7XG4gICAgICBsZXQgaGVpZ2h0ID0gdGhpcy53b3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtcbiAgICAgIGlmICh0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhckJvdHRvbSkge1xuICAgICAgICBoZWlnaHQgLT0gc2Nyb2xsYmFySGVpZ2h0O1xuICAgICAgfVxuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCB3dFRhYmxlLnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTtcbiAgICAgIG92ZXJsYXlSb290U3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3ZlcmxheVJvb3RTdHlsZS5oZWlnaHQgPSAnJztcbiAgICB9XG4gICAgdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQgPSBvdmVybGF5Um9vdFN0eWxlLmhlaWdodDtcbiAgICBjb25zdCB0YWJsZVdpZHRoID0gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7XG4gICAgb3ZlcmxheVJvb3RTdHlsZS53aWR0aCA9IGAke3RhYmxlV2lkdGh9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCBvdmVybGF5IHJvb3QgY2hpbGRzIHNpemUuXG4gICAqL1xuICBhZGp1c3RSb290Q2hpbGRyZW5TaXplKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhvbGRlclxuICAgIH0gPSB0aGlzLmNsb25lLnd0VGFibGU7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29ybmVyT2Zmc2V0ID0gdGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpID8gcGFyc2VJbnQoX3NlbGVjdGlvbi5DT1JORVJfREVGQVVMVF9TVFlMRS53aWR0aCwgMTApIC8gMiA6IDA7XG4gICAgdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLmhlaWdodCA9IHRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0O1xuICAgIGhvbGRlci5zdHlsZS5oZWlnaHQgPSBob2xkZXIucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQ7XG4gICAgLy8gQWRkIHNlbGVjdGlvbiBjb3JuZXIgcHJvdHJ1ZGluZyBwYXJ0IHRvIHRoZSBob2xkZXIgdG90YWwgd2lkdGggdG8gbWFrZSBzdXJlIHRoYXRcbiAgICAvLyBib3JkZXJzJyBjb3JuZXIgd29uJ3QgYmUgY3V0IGFmdGVyIGhvcml6b250YWwgc2Nyb2xsICgjNjkzNykuXG4gICAgaG9sZGVyLnN0eWxlLndpZHRoID0gYCR7cGFyc2VJbnQoaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsIDEwKSArIHNlbGVjdGlvbkNvcm5lck9mZnNldH1weGA7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0IHRoZSBvdmVybGF5IGRpbWVuc2lvbnMgYW5kIHBvc2l0aW9uLlxuICAgKi9cbiAgYXBwbHlUb0RPTSgpIHtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKTtcbiAgICBjb25zdCBzdHlsZVByb3BlcnR5ID0gdGhpcy5pc1J0bCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICBpZiAodHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuc3ByZWFkZXIuc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSBgJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO1xuICAgIH0gZWxzZSBpZiAodG90YWwgPT09IDApIHtcbiAgICAgIHRoaXMuc3ByZWFkZXIuc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSAnMCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1J0bCgpKSB7XG4gICAgICB0aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodCA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZSBjYWxjdWxhdGVkIHRvcCBwb3NpdGlvbiB0byBhbiBlbGVtZW50LlxuICAgKi9cbiAgc3luY092ZXJsYXlPZmZzZXQoKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24gPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wID0gYCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIGhvcml6b250YWxseSB0byBhIGNvbHVtbiBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZUNvbCAgQ29sdW1uIGluZGV4IHdoaWNoIHlvdSB3YW50IHRvIHNjcm9sbCB0by5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYmV5b25kUmVuZGVyZWRdICBJZiBgdHJ1ZWAsIHNjcm9sbHMgYWNjb3JkaW5nIHRvIHRoZSByaWdodFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgKGxlZnQgZWRnZSBpcyBieSBkZWZhdWx0KS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzY3JvbGxUbyhzb3VyY2VDb2wsIGJleW9uZFJlbmRlcmVkKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5nc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IHJvd0hlYWRlcnMgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3Jvd0hlYWRlcnMnKTtcbiAgICBjb25zdCBmaXhlZENvbHVtbnNTdGFydCA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKTtcbiAgICBjb25zdCBzb3VyY2VJbnN0YW5jZSA9IHRoaXMud290LmNsb25lU291cmNlID8gdGhpcy53b3QuY2xvbmVTb3VyY2UgOiB0aGlzLndvdDtcbiAgICBjb25zdCBtYWluSG9sZGVyID0gc291cmNlSW5zdGFuY2Uud3RUYWJsZS5ob2xkZXI7XG4gICAgY29uc3Qgcm93SGVhZGVyQm9yZGVyQ29tcGVuc2F0aW9uID0gZml4ZWRDb2x1bW5zU3RhcnQgPT09IDAgJiYgcm93SGVhZGVycy5sZW5ndGggPiAwICYmICEoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKG1haW5Ib2xkZXIucGFyZW50Tm9kZSwgJ2lubmVyQm9yZGVySW5saW5lU3RhcnQnKSA/IDEgOiAwO1xuICAgIGxldCBuZXdYID0gdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO1xuICAgIGxldCBzY3JvbGxiYXJDb21wZW5zYXRpb24gPSAwO1xuICAgIGlmIChiZXlvbmRSZW5kZXJlZCkge1xuICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKHNvdXJjZUNvbCk7XG4gICAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gdGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCk7XG4gICAgICBpZiAoY29sdW1uV2lkdGggPiB2aWV3cG9ydFdpZHRoKSB7XG4gICAgICAgIGJleW9uZFJlbmRlcmVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChiZXlvbmRSZW5kZXJlZCAmJiBtYWluSG9sZGVyLm9mZnNldFdpZHRoICE9PSBtYWluSG9sZGVyLmNsaWVudFdpZHRoKSB7XG4gICAgICBzY3JvbGxiYXJDb21wZW5zYXRpb24gPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KTtcbiAgICB9XG4gICAgaWYgKGJleW9uZFJlbmRlcmVkKSB7XG4gICAgICBuZXdYICs9IHRoaXMuc3VtQ2VsbFNpemVzKDAsIHNvdXJjZUNvbCArIDEpO1xuICAgICAgbmV3WCAtPSB0aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgICAgIC8vIENvbXBlbnNhdGUgZm9yIHRoZSByaWdodCBoZWFkZXIgYm9yZGVyIGlmIHNjcm9sbGVkIGZyb20gdGhlIGFic29sdXRlIGxlZnQuXG4gICAgICBuZXdYICs9IHJvd0hlYWRlckJvcmRlckNvbXBlbnNhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3WCArPSB0aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKSwgc291cmNlQ29sKTtcbiAgICB9XG4gICAgbmV3WCArPSBzY3JvbGxiYXJDb21wZW5zYXRpb247XG5cbiAgICAvLyBJZiB0aGUgdGFibGUgaXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgbGVmdCB3aGVuIHN0YXJ0aW5nIHRoZSBzY3JvbGwgYW5kIGdvaW5nIHRvIGJlIHNjcm9sbGVkIHRvIHRoZSBmYXIgcmlnaHQsXG4gICAgLy8gd2UgbmVlZCB0byBjb21wZW5zYXRlIGZvciB0aGUgcG90ZW50aWFsIGhlYWRlciBib3JkZXIgd2lkdGguXG4gICAgaWYgKCgwLCBfZWxlbWVudC5nZXRNYXhpbXVtU2Nyb2xsTGVmdCkodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCkgPT09IG5ld1ggLSByb3dIZWFkZXJCb3JkZXJDb21wZW5zYXRpb24gJiYgcm93SGVhZGVyQm9yZGVyQ29tcGVuc2F0aW9uID4gMCkge1xuICAgICAgdGhpcy53b3Qud3RPdmVybGF5cy5leHBhbmRIaWRlckhvcml6b250YWxseUJ5KHJvd0hlYWRlckJvcmRlckNvbXBlbnNhdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG5ld1gpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGFibGUgcGFyZW50IGxlZnQgcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRUYWJsZVBhcmVudE9mZnNldCgpIHtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgaWYgKCFwcmV2ZW50T3ZlcmZsb3cgJiYgdGhpcy50cmltbWluZ0NvbnRhaW5lciA9PT0gdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KSB7XG4gICAgICBvZmZzZXQgPSB0aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1haW4gb3ZlcmxheSdzIGhvcml6b250YWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBNYWluIHRhYmxlJ3MgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAqL1xuICBnZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoKDAsIF9lbGVtZW50LmdldFNjcm9sbExlZnQpKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsIHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1haW4gb3ZlcmxheSdzIGhvcml6b250YWwgb3ZlcmxheSBvZmZzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IE1haW4gdGFibGUncyBob3Jpem9udGFsIG92ZXJsYXkgb2Zmc2V0LlxuICAgKi9cbiAgZ2V0T3ZlcmxheU9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG4gICAgY29uc3QgcHJldmVudE92ZXJmbG93ID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRPdmVyZmxvdycpO1xuICAgIGxldCBvdmVybGF5T2Zmc2V0ID0gMDtcbiAgICBpZiAodGhpcy50cmltbWluZ0NvbnRhaW5lciA9PT0gcm9vdFdpbmRvdyAmJiAoIXByZXZlbnRPdmVyZmxvdyB8fCBwcmV2ZW50T3ZlcmZsb3cgIT09ICdob3Jpem9udGFsJykpIHtcbiAgICAgIGlmICh0aGlzLmlzUnRsKCkpIHtcbiAgICAgICAgb3ZlcmxheU9mZnNldCA9IE1hdGguYWJzKE1hdGgubWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSAtIHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwgMCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3ZlcmxheU9mZnNldCA9IE1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSAtIHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCByb290V2lkdGggPSB0aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKTtcbiAgICAgIGNvbnN0IG92ZXJsYXlSb290V2lkdGggPSB0aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpO1xuICAgICAgY29uc3QgbWF4T2Zmc2V0ID0gcm9vdFdpZHRoIC0gb3ZlcmxheVJvb3RXaWR0aDtcbiAgICAgIGlmIChvdmVybGF5T2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgIG92ZXJsYXlPZmZzZXQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3ZlcmxheU9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNzcyBjbGFzc2VzIHRvIGhpZGUgdGhlIGhlYWRlciBib3JkZXIncyBoZWFkZXIgKGNlbGwtc2VsZWN0aW9uIGJvcmRlciBoaWRpbmcgaXNzdWUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gSGVhZGVyIFggcG9zaXRpb24gaWYgdHJpbW1pbmcgY29udGFpbmVyIGlzIHdpbmRvdyBvciBzY3JvbGwgdG9wIGlmIG5vdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBhZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFNldHRpbmdzXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgbWFzdGVyUGFyZW50ID0gdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBjb25zdCByb3dIZWFkZXJzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJyk7XG4gICAgY29uc3QgZml4ZWRDb2x1bW5zU3RhcnQgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0Jyk7XG4gICAgY29uc3QgdG90YWxSb3dzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICBjb25zdCBwcmV2ZW50VmVydGljYWxPdmVyZmxvdyA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93JykgPT09ICd2ZXJ0aWNhbCc7XG4gICAgaWYgKHRvdGFsUm93cykge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShtYXN0ZXJQYXJlbnQsICdlbXB0eVJvd3MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShtYXN0ZXJQYXJlbnQsICdlbXB0eVJvd3MnKTtcbiAgICB9XG4gICAgbGV0IHBvc2l0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmICghcHJldmVudFZlcnRpY2FsT3ZlcmZsb3cpIHtcbiAgICAgIGlmIChmaXhlZENvbHVtbnNTdGFydCAmJiAhcm93SGVhZGVycy5sZW5ndGgpIHtcbiAgICAgICAgLy8gXCJpbm5lckJvcmRlckxlZnRcIiBpcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKG1hc3RlclBhcmVudCwgJ2lubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFmaXhlZENvbHVtbnNTdGFydCAmJiByb3dIZWFkZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShtYXN0ZXJQYXJlbnQsICdpbm5lckJvcmRlcklubGluZVN0YXJ0Jyk7XG4gICAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykobWFzdGVyUGFyZW50LCAnaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQnKTtcbiAgICAgICAgICBwb3NpdGlvbkNoYW5nZWQgPSAhcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKG1hc3RlclBhcmVudCwgJ2lubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Jyk7XG4gICAgICAgICAgcG9zaXRpb25DaGFuZ2VkID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zaXRpb25DaGFuZ2VkO1xuICB9XG59XG5leHBvcnRzLklubGluZVN0YXJ0T3ZlcmxheSA9IElubGluZVN0YXJ0T3ZlcmxheTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfdG9wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi8uLi90YWJsZS90b3BcIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX3NlbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi9zZWxlY3Rpb25cIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQGNsYXNzIFRvcE92ZXJsYXlcbiAqL1xuY2xhc3MgVG9wT3ZlcmxheSBleHRlbmRzIF9iYXNlLk92ZXJsYXkge1xuICAvKipcbiAgICogQHBhcmFtIHtXYWxrb250YWJsZX0gd290SW5zdGFuY2UgVGhlIFdhbGtvbnRhYmxlIGluc3RhbmNlLiBAVE9ETyByZWZhY3RvcmluZzogY2hlY2sgaWYgY2FuIGJlIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7RmFjYWRlR2V0dGVyfSBmYWNhZGVHZXR0ZXIgRnVuY3Rpb24gd2hpY2ggcmV0dXJuIHByb3BlciBmYWNhZGUuXG4gICAqIEBwYXJhbSB7U2V0dGluZ3N9IHd0U2V0dGluZ3MgVGhlIFdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBEb20gZWxlbWVudHMgYm91bmQgdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih3b3RJbnN0YW5jZSwgZmFjYWRlR2V0dGVyLCB3dFNldHRpbmdzLCBkb21CaW5kaW5ncykge1xuICAgIHN1cGVyKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIF9jb25zdGFudHMuQ0xPTkVfVE9QLCB3dFNldHRpbmdzLCBkb21CaW5kaW5ncyk7XG4gICAgLyoqXG4gICAgICogQ2FjaGVkIHZhbHVlIHdoaWNoIGhvbGRzIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYGZpeGVkUm93c1RvcGAgb3B0aW9uLlxuICAgICAqIEl0IGlzIHVzZWQgYXMgYSBjb21wYXJpc29uIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IGNoYW5nZXMgaW4gdGhpcyB2YWx1ZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FjaGVkRml4ZWRSb3dzVG9wXCIsIC0xKTtcbiAgICB0aGlzLmNhY2hlZEZpeGVkUm93c1RvcCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NUb3AnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBgVGFibGVgIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBvdmVybGF5LlxuICAgKlxuICAgKiBAc2VlIFRhYmxlI2NvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Li4uKn0gYXJncyBQYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIGBUYWJsZWAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtUb3BPdmVybGF5VGFibGV9XG4gICAqL1xuICBjcmVhdGVUYWJsZSgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHJldHVybiBuZXcgX3RvcC5kZWZhdWx0KC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBvdmVybGF5IHNob3VsZCBiZSBmdWxseSByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzaG91bGRCZVJlbmRlcmVkKCkge1xuICAgIHJldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnc2hvdWxkUmVuZGVyVG9wT3ZlcmxheScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRvcCBvdmVybGF5IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHJlc2V0Rml4ZWRQb3NpdGlvbigpIHtcbiAgICBpZiAoIXRoaXMubmVlZEZ1bGxSZW5kZXIgfHwgIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpIHx8ICF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSB7XG4gICAgICAvLyByZW1vdmVkIGZyb20gRE9NXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXlSb290ID0gdGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgbGV0IG92ZXJsYXlQb3NpdGlvbiA9IDA7XG4gICAgbGV0IHNraXBJbm5lckJvcmRlckFkanVzdGluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRyaW1taW5nQ29udGFpbmVyID09PSByb290V2luZG93ICYmICghcHJldmVudE92ZXJmbG93IHx8IHByZXZlbnRPdmVyZmxvdyAhPT0gJ3ZlcnRpY2FsJykpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd3RUYWJsZVxuICAgICAgfSA9IHRoaXMud290O1xuICAgICAgY29uc3QgaGlkZXJSZWN0ID0gd3RUYWJsZS5oaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGJvdHRvbSA9IE1hdGguY2VpbChoaWRlclJlY3QuYm90dG9tKTtcbiAgICAgIGNvbnN0IHJvb3RIZWlnaHQgPSBvdmVybGF5Um9vdC5vZmZzZXRIZWlnaHQ7XG5cbiAgICAgIC8vIFRoaXMgY2hlY2tzIGlmIHRoZSBvdmVybGF5IGlzIGdvaW5nIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IGFkZGVkIChvciByZW1vdmVkKVxuICAgICAgLy8gYGlubmVyQm9yZGVyVG9wYCBjbGFzcyBuYW1lLiBUb2dnbGluZyB0aGUgY2xhc3MgbmFtZSBzaGlmdHMgdGhlIHZpZXdwb3J0IGJ5IDFweCBhbmRcbiAgICAgIC8vIHRyaWdnZXJzIHRoZSBgc2Nyb2xsYCBldmVudC4gSXQgY2F1c2VzIHRoZSB0YWJsZSB0byByZW5kZXIuIFRoZSBuZXcgcmVuZGVyIGN5Y2xlIHRha2VzIGludG8sXG4gICAgICAvLyBhY2NvdW50IHRoZSBzaGlmdCBhbmQgdG9nZ2xlcyB0aGUgY2xhc3MgbmFtZSBhZ2Fpbi4gVGhpcyBjYXVzZXMgdGhlIG5leHQgbG9vcHMuIFRoaXNcbiAgICAgIC8vIGhhcHBlbnMgb25seSBvbiBDaHJvbWUgKCM3MjU2KS5cbiAgICAgIC8vXG4gICAgICAvLyBXaGVuIHdlIGRldGVjdCB0aGF0IHRoZSB0YWJsZSBib3R0b20gcG9zaXRpb24gaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJsYXkgYm90dG9tLFxuICAgICAgLy8gZG8gbm90IHRvZ2dsZSB0aGUgY2xhc3MgbmFtZS5cbiAgICAgIC8vXG4gICAgICAvLyBUaGlzIHdvcmthcm91bmQgd2lsbCBiZSBhYmxlIHRvIGJlIGNsZWFyZWQgYWZ0ZXIgbWVyZ2luZyB0aGUgU1ZHIGJvcmRlcnMsIHdoaWNoIGludHJvZHVjZXNcbiAgICAgIC8vIGZyb3plbiBsaW5lcyAobm8gbW9yZSBgaW5uZXJCb3JkZXJUb3BgIHdvcmthcm91bmQpLlxuICAgICAgc2tpcElubmVyQm9yZGVyQWRqdXN0aW5nID0gYm90dG9tID09PSByb290SGVpZ2h0O1xuICAgICAgb3ZlcmxheVBvc2l0aW9uID0gdGhpcy5nZXRPdmVybGF5T2Zmc2V0KCk7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0T3ZlcmxheVBvc2l0aW9uKShvdmVybGF5Um9vdCwgJzBweCcsIGAke292ZXJsYXlQb3NpdGlvbn1weGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdmVybGF5UG9zaXRpb24gPSB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAoMCwgX2VsZW1lbnQucmVzZXRDc3NUcmFuc2Zvcm0pKG92ZXJsYXlSb290KTtcbiAgICB9XG4gICAgY29uc3QgcG9zaXRpb25DaGFuZ2VkID0gdGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24ob3ZlcmxheVBvc2l0aW9uLCBza2lwSW5uZXJCb3JkZXJBZGp1c3RpbmcpO1xuICAgIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgcmV0dXJuIHBvc2l0aW9uQ2hhbmdlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBtYWluIG92ZXJsYXkncyB2ZXJ0aWNhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZXRTY3JvbGxQb3NpdGlvbihwb3MpIHtcbiAgICBjb25zdCByb290V2luZG93ID0gdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93O1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCA9PT0gcm9vdFdpbmRvdyAmJiByb290V2luZG93LnNjcm9sbFkgIT09IHBvcykge1xuICAgICAgcm9vdFdpbmRvdy5zY3JvbGxUbygoMCwgX2VsZW1lbnQuZ2V0V2luZG93U2Nyb2xsTGVmdCkocm9vdFdpbmRvdyksIHBvcyk7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgIT09IHBvcykge1xuICAgICAgdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgPSBwb3M7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG9uU2Nyb2xsIGhvb2sgY2FsbGJhY2suXG4gICAqL1xuICBvblNjcm9sbCgpIHtcbiAgICB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnb25TY3JvbGxIb3Jpem9udGFsbHknKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRvdGFsIHN1bSBjZWxscyBoZWlnaHQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tIFJvdyBpbmRleCB3aGljaCBjYWxjdWxhdGVzIHN0YXJ0ZWQgZnJvbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvIFJvdyBpbmRleCB3aGVyZSBjYWxjdWxhdGlvbiBpcyBmaW5pc2hlZC5cbiAgICogQHJldHVybnMge251bWJlcn0gSGVpZ2h0IHN1bS5cbiAgICovXG4gIHN1bUNlbGxTaXplcyhmcm9tLCB0bykge1xuICAgIGNvbnN0IGRlZmF1bHRSb3dIZWlnaHQgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZGVmYXVsdFJvd0hlaWdodCcpO1xuICAgIGxldCByb3cgPSBmcm9tO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIHdoaWxlIChyb3cgPCB0bykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQocm93KTtcbiAgICAgIHN1bSArPSBoZWlnaHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRSb3dIZWlnaHQgOiBoZWlnaHQ7XG4gICAgICByb3cgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgb3ZlcmxheSByb290IGVsZW1lbnQsIGNoaWxkcmVuIGFuZCBtYXN0ZXIgdGFibGUgZWxlbWVudCBzaXplcyAod2lkdGgsIGhlaWdodCkuXG4gICAqL1xuICBhZGp1c3RFbGVtZW50c1NpemUoKSB7XG4gICAgdGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpO1xuICAgIGlmICh0aGlzLm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgpO1xuICAgICAgdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCBvdmVybGF5IHJvb3QgZWxlbWVudCBzaXplICh3aWR0aCBhbmQgaGVpZ2h0KS5cbiAgICovXG4gIGFkanVzdFJvb3RFbGVtZW50U2l6ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlXG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3REb2N1bWVudCxcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9ICgwLCBfZWxlbWVudC5nZXRTY3JvbGxiYXJXaWR0aCkocm9vdERvY3VtZW50KTtcbiAgICBjb25zdCBvdmVybGF5Um9vdCA9IHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBjb25zdCBvdmVybGF5Um9vdFN0eWxlID0gb3ZlcmxheVJvb3Quc3R5bGU7XG4gICAgY29uc3QgcHJldmVudE92ZXJmbG93ID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRPdmVyZmxvdycpO1xuICAgIGlmICh0aGlzLnRyaW1taW5nQ29udGFpbmVyICE9PSByb290V2luZG93IHx8IHByZXZlbnRPdmVyZmxvdyA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICBsZXQgd2lkdGggPSB0aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCk7XG4gICAgICBpZiAodGhpcy53b3Qud3RPdmVybGF5cy5oYXNTY3JvbGxiYXJSaWdodCkge1xuICAgICAgICB3aWR0aCAtPSBzY3JvbGxiYXJXaWR0aDtcbiAgICAgIH1cbiAgICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIHd0VGFibGUud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCk7XG4gICAgICBvdmVybGF5Um9vdFN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdmVybGF5Um9vdFN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICAgIHRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGggPSBvdmVybGF5Um9vdFN0eWxlLndpZHRoO1xuICAgIGxldCB0YWJsZUhlaWdodCA9ICgwLCBfZWxlbWVudC5vdXRlckhlaWdodCkodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtcbiAgICBpZiAoIXRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKSkge1xuICAgICAgdGFibGVIZWlnaHQgPSAwO1xuICAgIH1cbiAgICBvdmVybGF5Um9vdFN0eWxlLmhlaWdodCA9IGAke3RhYmxlSGVpZ2h0fXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgb3ZlcmxheSByb290IGNoaWxkcyBzaXplLlxuICAgKi9cbiAgYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBob2xkZXJcbiAgICB9ID0gdGhpcy5jbG9uZS53dFRhYmxlO1xuICAgIGNvbnN0IHNlbGVjdGlvbkNvcm5lck9mZnNldCA9IHRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKSA/IHBhcnNlSW50KF9zZWxlY3Rpb24uQ09STkVSX0RFRkFVTFRfU1RZTEUuaGVpZ2h0LCAxMCkgLyAyIDogMDtcbiAgICB0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGggPSB0aGlzLmhpZGVyLnN0eWxlLndpZHRoO1xuICAgIGhvbGRlci5zdHlsZS53aWR0aCA9IGhvbGRlci5wYXJlbnROb2RlLnN0eWxlLndpZHRoO1xuICAgIC8vIEFkZCBzZWxlY3Rpb24gY29ybmVyIHByb3RydWRpbmcgcGFydCB0byB0aGUgaG9sZGVyIHRvdGFsIGhlaWdodCB0byBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIGJvcmRlcnMnIGNvcm5lciB3b24ndCBiZSBjdXQgYWZ0ZXIgdmVydGljYWwgc2Nyb2xsICgjNjkzNykuXG4gICAgaG9sZGVyLnN0eWxlLmhlaWdodCA9IGAke3BhcnNlSW50KGhvbGRlci5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwgMTApICsgc2VsZWN0aW9uQ29ybmVyT2Zmc2V0fXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3QgdGhlIG92ZXJsYXkgZGltZW5zaW9ucyBhbmQgcG9zaXRpb24uXG4gICAqL1xuICBhcHBseVRvRE9NKCkge1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpO1xuICAgIGlmICh0eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5zcHJlYWRlci5zdHlsZS50b3AgPSBgJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO1xuICAgIH0gZWxzZSBpZiAodG90YWwgPT09IDApIHtcbiAgICAgIC8vIGNhbiBoYXBwZW4gaWYgdGhlcmUgYXJlIDAgcm93c1xuICAgICAgdGhpcy5zcHJlYWRlci5zdHlsZS50b3AgPSAnMCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvcicpO1xuICAgIH1cbiAgICB0aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbSA9ICcnO1xuICAgIGlmICh0aGlzLm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIGNhbGN1bGF0ZWQgbGVmdCBwb3NpdGlvbiB0byBhbiBlbGVtZW50LlxuICAgKi9cbiAgc3luY092ZXJsYXlPZmZzZXQoKSB7XG4gICAgY29uc3Qgc3R5bGVQcm9wZXJ0eSA9IHRoaXMuaXNSdGwoKSA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgY29uc3Qge1xuICAgICAgc3ByZWFkZXJcbiAgICB9ID0gdGhpcy5jbG9uZS53dFRhYmxlO1xuICAgIGlmICh0eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgc3ByZWFkZXIuc3R5bGVbc3R5bGVQcm9wZXJ0eV0gPSBgJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICBzcHJlYWRlci5zdHlsZVtzdHlsZVByb3BlcnR5XSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHZlcnRpY2FsbHkgdG8gYSByb3cuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VSb3cgUm93IGluZGV4IHdoaWNoIHlvdSB3YW50IHRvIHNjcm9sbCB0by5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYm90dG9tRWRnZV0gSWYgYHRydWVgLCBzY3JvbGxzIGFjY29yZGluZyB0byB0aGUgYm90dG9tIGVkZ2UgKHRvcCBlZGdlIGlzIGJ5IGRlZmF1bHQpLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjcm9sbFRvKHNvdXJjZVJvdywgYm90dG9tRWRnZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHdvdCxcbiAgICAgIHd0U2V0dGluZ3NcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBzb3VyY2VJbnN0YW5jZSA9IHdvdC5jbG9uZVNvdXJjZSA/IHdvdC5jbG9uZVNvdXJjZSA6IHdvdDtcbiAgICBjb25zdCBtYWluSG9sZGVyID0gc291cmNlSW5zdGFuY2Uud3RUYWJsZS5ob2xkZXI7XG4gICAgY29uc3QgY29sdW1uSGVhZGVycyA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnY29sdW1uSGVhZGVycycpO1xuICAgIGNvbnN0IGZpeGVkUm93c1RvcCA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzVG9wJyk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyQm9yZGVyQ29tcGVuc2F0aW9uID0gZml4ZWRSb3dzVG9wID09PSAwICYmIGNvbHVtbkhlYWRlcnMubGVuZ3RoID4gMCAmJiAhKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShtYWluSG9sZGVyLnBhcmVudE5vZGUsICdpbm5lckJvcmRlclRvcCcpID8gMSA6IDA7XG4gICAgbGV0IG5ld1kgPSB0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7XG4gICAgbGV0IHNjcm9sbGJhckNvbXBlbnNhdGlvbiA9IDA7XG4gICAgaWYgKGJvdHRvbUVkZ2UpIHtcbiAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KHNvdXJjZVJvdyk7XG4gICAgICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKTtcbiAgICAgIGlmIChyb3dIZWlnaHQgPiB2aWV3cG9ydEhlaWdodCkge1xuICAgICAgICBib3R0b21FZGdlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChib3R0b21FZGdlICYmIG1haW5Ib2xkZXIub2Zmc2V0SGVpZ2h0ICE9PSBtYWluSG9sZGVyLmNsaWVudEhlaWdodCkge1xuICAgICAgc2Nyb2xsYmFyQ29tcGVuc2F0aW9uID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCk7XG4gICAgfVxuICAgIGlmIChib3R0b21FZGdlKSB7XG4gICAgICBjb25zdCBmaXhlZFJvd3NCb3R0b20gPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c0JvdHRvbScpO1xuICAgICAgY29uc3QgdG90YWxSb3dzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICAgIG5ld1kgKz0gdGhpcy5zdW1DZWxsU2l6ZXMoMCwgc291cmNlUm93ICsgMSk7XG4gICAgICBuZXdZIC09IHdvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkgLSB0aGlzLnN1bUNlbGxTaXplcyh0b3RhbFJvd3MgLSBmaXhlZFJvd3NCb3R0b20sIHRvdGFsUm93cyk7XG4gICAgICAvLyBGaXggMSBwaXhlbCBvZmZzZXQgd2hlbiBjZWxsIGlzIHNlbGVjdGVkXG4gICAgICBuZXdZICs9IDE7XG4gICAgICAvLyBDb21wZW5zYXRlIGZvciB0aGUgYm90dG9tIGhlYWRlciBib3JkZXIgaWYgc2Nyb2xsZWQgZnJvbSB0aGUgYWJzb2x1dGUgdG9wLlxuICAgICAgbmV3WSArPSBjb2x1bW5IZWFkZXJCb3JkZXJDb21wZW5zYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1kgKz0gdGhpcy5zdW1DZWxsU2l6ZXMod3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NUb3AnKSwgc291cmNlUm93KTtcbiAgICB9XG4gICAgbmV3WSArPSBzY3JvbGxiYXJDb21wZW5zYXRpb247XG5cbiAgICAvLyBJZiB0aGUgdGFibGUgaXMgc2Nyb2xsZWQgYWxsIHRoZSB3YXkgdXAgd2hlbiBzdGFydGluZyB0aGUgc2Nyb2xsIGFuZCBnb2luZyB0byBiZSBzY3JvbGxlZCB0byB0aGUgYm90dG9tLFxuICAgIC8vIHdlIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHBvdGVudGlhbCBoZWFkZXIgYm90dG9tIGJvcmRlciBoZWlnaHQuXG4gICAgaWYgKCgwLCBfZWxlbWVudC5nZXRNYXhpbXVtU2Nyb2xsVG9wKSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KSA9PT0gbmV3WSAtIGNvbHVtbkhlYWRlckJvcmRlckNvbXBlbnNhdGlvbiAmJiBjb2x1bW5IZWFkZXJCb3JkZXJDb21wZW5zYXRpb24gPiAwKSB7XG4gICAgICB0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGNvbHVtbkhlYWRlckJvcmRlckNvbXBlbnNhdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG5ld1kpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGFibGUgcGFyZW50IHRvcCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFRhYmxlUGFyZW50T2Zmc2V0KCkge1xuICAgIGlmICh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50ID09PSB0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpIHtcbiAgICAgIHJldHVybiB0aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1haW4gb3ZlcmxheSdzIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gTWFpbiB0YWJsZSdzIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbi5cbiAgICovXG4gIGdldFNjcm9sbFBvc2l0aW9uKCkge1xuICAgIHJldHVybiAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsVG9wKSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LCB0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG1haW4gb3ZlcmxheSdzIHZlcnRpY2FsIG92ZXJsYXkgb2Zmc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBNYWluIHRhYmxlJ3MgdmVydGljYWwgb3ZlcmxheSBvZmZzZXQuXG4gICAqL1xuICBnZXRPdmVybGF5T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncHJldmVudE92ZXJmbG93Jyk7XG4gICAgbGV0IG92ZXJsYXlPZmZzZXQgPSAwO1xuICAgIGlmICh0aGlzLnRyaW1taW5nQ29udGFpbmVyID09PSByb290V2luZG93ICYmICghcHJldmVudE92ZXJmbG93IHx8IHByZXZlbnRPdmVyZmxvdyAhPT0gJ3ZlcnRpY2FsJykpIHtcbiAgICAgIGNvbnN0IHJvb3RIZWlnaHQgPSB0aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7XG4gICAgICBjb25zdCBvdmVybGF5Um9vdEhlaWdodCA9IHRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpO1xuICAgICAgY29uc3QgbWF4T2Zmc2V0ID0gcm9vdEhlaWdodCAtIG92ZXJsYXlSb290SGVpZ2h0O1xuICAgICAgb3ZlcmxheU9mZnNldCA9IE1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSAtIHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwgMCk7XG4gICAgICBpZiAob3ZlcmxheU9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICBvdmVybGF5T2Zmc2V0ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG92ZXJsYXlPZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBjc3MgY2xhc3NlcyB0byBoaWRlIHRoZSBoZWFkZXIgYm9yZGVyJ3MgaGVhZGVyIChjZWxsLXNlbGVjdGlvbiBib3JkZXIgaGlkaW5nIGlzc3VlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBvc2l0aW9uIEhlYWRlciBZIHBvc2l0aW9uIGlmIHRyaW1taW5nIGNvbnRhaW5lciBpcyB3aW5kb3cgb3Igc2Nyb2xsIHRvcCBpZiBub3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBJbm5lckJvcmRlckFkanVzdGluZz1mYWxzZV0gSWYgYHRydWVgIHRoZSBpbm5lciBib3JkZXIgYWRqdXN0aW5nIHdpbGwgYmUgc2tpcHBlZC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBhZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICBsZXQgc2tpcElubmVyQm9yZGVyQWRqdXN0aW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICBjb25zdCB7XG4gICAgICB3dFNldHRpbmdzXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgbWFzdGVyUGFyZW50ID0gdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtcbiAgICBjb25zdCB0b3RhbENvbHVtbnMgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsQ29sdW1ucycpO1xuICAgIGNvbnN0IHByZXZlbnRIb3Jpem9udGFsT3ZlcmZsb3cgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRPdmVyZmxvdycpID09PSAnaG9yaXpvbnRhbCc7XG4gICAgaWYgKHRvdGFsQ29sdW1ucykge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShtYXN0ZXJQYXJlbnQsICdlbXB0eUNvbHVtbnMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShtYXN0ZXJQYXJlbnQsICdlbXB0eUNvbHVtbnMnKTtcbiAgICB9XG4gICAgbGV0IHBvc2l0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgIGlmICghc2tpcElubmVyQm9yZGVyQWRqdXN0aW5nICYmICFwcmV2ZW50SG9yaXpvbnRhbE92ZXJmbG93KSB7XG4gICAgICBjb25zdCBmaXhlZFJvd3NUb3AgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpO1xuICAgICAgY29uc3QgYXJlRml4ZWRSb3dzVG9wQ2hhbmdlZCA9IHRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wICE9PSBmaXhlZFJvd3NUb3A7XG4gICAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdjb2x1bW5IZWFkZXJzJyk7XG4gICAgICBpZiAoKGFyZUZpeGVkUm93c1RvcENoYW5nZWQgfHwgZml4ZWRSb3dzVG9wID09PSAwKSAmJiBjb2x1bW5IZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9ICgwLCBfZWxlbWVudC5oYXNDbGFzcykobWFzdGVyUGFyZW50LCAnaW5uZXJCb3JkZXJUb3AnKTtcbiAgICAgICAgdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3AgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpO1xuICAgICAgICBpZiAocG9zaXRpb24gfHwgd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKSA9PT0gMCkge1xuICAgICAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykobWFzdGVyUGFyZW50LCAnaW5uZXJCb3JkZXJUb3AnKTtcbiAgICAgICAgICBwb3NpdGlvbkNoYW5nZWQgPSAhcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKG1hc3RlclBhcmVudCwgJ2lubmVyQm9yZGVyVG9wJyk7XG4gICAgICAgICAgcG9zaXRpb25DaGFuZ2VkID0gcHJldmlvdXNTdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9zaXRpb25DaGFuZ2VkO1xuICB9XG59XG5leHBvcnRzLlRvcE92ZXJsYXkgPSBUb3BPdmVybGF5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF90b3BJbmxpbmVTdGFydENvcm5lciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3RhYmxlL3RvcElubGluZVN0YXJ0Q29ybmVyXCIpKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL19iYXNlXCIpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBjbGFzcyBUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlcbiAqL1xuY2xhc3MgVG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IGV4dGVuZHMgX2Jhc2UuT3ZlcmxheSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlfSB3b3RJbnN0YW5jZSBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuIEBUT0RPIHJlZmFjdG9yaW5nOiBjaGVjayBpZiBjYW4gYmUgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtGYWNhZGVHZXR0ZXJ9IGZhY2FkZUdldHRlciBGdW5jdGlvbiB3aGljaCByZXR1cm4gcHJvcGVyIGZhY2FkZS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIERvbSBlbGVtZW50cyBib3VuZCB0byB0aGUgY3VycmVudCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtUb3BPdmVybGF5fSB0b3BPdmVybGF5IFRoZSBpbnN0YW5jZSBvZiB0aGUgVG9wIG92ZXJsYXkuXG4gICAqIEBwYXJhbSB7SW5saW5lU3RhcnRPdmVybGF5fSBpbmxpbmVTdGFydE92ZXJsYXkgVGhlIGluc3RhbmNlIG9mIHRoZSBJbmxpbmVTdGFydCBvdmVybGF5LlxuICAgKi9cbiAgY29uc3RydWN0b3Iod290SW5zdGFuY2UsIGZhY2FkZUdldHRlciwgd3RTZXR0aW5ncywgZG9tQmluZGluZ3MsIHRvcE92ZXJsYXksIGlubGluZVN0YXJ0T3ZlcmxheSkge1xuICAgIHN1cGVyKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIF9jb25zdGFudHMuQ0xPTkVfVE9QX0lOTElORV9TVEFSVF9DT1JORVIsIHd0U2V0dGluZ3MsIGRvbUJpbmRpbmdzKTtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIFRvcCBvdmVybGF5LlxuICAgICAqXG4gICAgICogQHR5cGUge1RvcE92ZXJsYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG9wT3ZlcmxheVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgSW5saW5lU3RhcnQgb3ZlcmxheS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtJbmxpbmVTdGFydE92ZXJsYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5saW5lU3RhcnRPdmVybGF5XCIsIHZvaWQgMCk7XG4gICAgdGhpcy50b3BPdmVybGF5ID0gdG9wT3ZlcmxheTtcbiAgICB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSA9IGlubGluZVN0YXJ0T3ZlcmxheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBgVGFibGVgIHRoYXQgaXMgcmVsZXZhbnQgdG8gdGhpcyBvdmVybGF5LlxuICAgKlxuICAgKiBAc2VlIFRhYmxlI2NvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Li4uKn0gYXJncyBQYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhlIGBUYWJsZWAgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlUYWJsZX1cbiAgICovXG4gIGNyZWF0ZVRhYmxlKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfdG9wSW5saW5lU3RhcnRDb3JuZXIuZGVmYXVsdCguLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgb3ZlcmxheSBzaG91bGQgYmUgZnVsbHkgcmVuZGVyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2hvdWxkQmVSZW5kZXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3Nob3VsZFJlbmRlclRvcE92ZXJsYXknKSAmJiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Jyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgY29ybmVyIG92ZXJsYXkgcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcmVzZXRGaXhlZFBvc2l0aW9uKCkge1xuICAgIHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKTtcbiAgICBpZiAoIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpIHtcbiAgICAgIC8vIHJlbW92ZWQgZnJvbSBET01cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmxheVJvb3QgPSB0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7XG4gICAgaWYgKHRoaXMudHJpbW1pbmdDb250YWluZXIgPT09IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykge1xuICAgICAgY29uc3QgbGVmdCA9IHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSAqICh0aGlzLmlzUnRsKCkgPyAtMSA6IDEpO1xuICAgICAgY29uc3QgdG9wID0gdGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRPdmVybGF5UG9zaXRpb24pKG92ZXJsYXlSb290LCBgJHtsZWZ0fXB4YCwgYCR7dG9wfXB4YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfZWxlbWVudC5yZXNldENzc1RyYW5zZm9ybSkob3ZlcmxheVJvb3QpO1xuICAgIH1cbiAgICBsZXQgdGFibGVIZWlnaHQgPSAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7XG4gICAgY29uc3QgdGFibGVXaWR0aCA9ICgwLCBfZWxlbWVudC5vdXRlcldpZHRoKSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO1xuICAgIGlmICghdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpKSB7XG4gICAgICB0YWJsZUhlaWdodCA9IDA7XG4gICAgfVxuICAgIG92ZXJsYXlSb290LnN0eWxlLmhlaWdodCA9IGAke3RhYmxlSGVpZ2h0fXB4YDtcbiAgICBvdmVybGF5Um9vdC5zdHlsZS53aWR0aCA9IGAke3RhYmxlV2lkdGh9cHhgO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZXhwb3J0cy5Ub3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkgPSBUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2ZlYXR1cmUgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9mZWF0dXJlXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF91bmljb2RlID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdW5pY29kZVwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2Jyb3dzZXJcIik7XG52YXIgX292ZXJsYXkgPSByZXF1aXJlKFwiLi9vdmVybGF5XCIpO1xuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAY2xhc3MgT3ZlcmxheXNcbiAqL1xudmFyIF9vdmVybGF5cyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIE92ZXJsYXlzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7V2Fsa29udGFibGV9IHdvdEluc3RhbmNlIFRoZSBXYWxrb250YWJsZSBpbnN0YW5jZS4gQHRvZG8gcmVmYWN0b3JpbmcgcmVtb3ZlLlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEZ1bmN0aW9uIHdoaWNoIHJldHVybiBwcm9wZXIgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RXZlbnRNYW5hZ2VyfSBldmVudE1hbmFnZXIgVGhlIHdhbGtvbnRhYmxlIGV2ZW50IG1hbmFnZXIuXG4gICAqIEBwYXJhbSB7TWFzdGVyVGFibGV9IHd0VGFibGUgVGhlIG1hc3RlciB0YWJsZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHdvdEluc3RhbmNlLCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzLCBldmVudE1hbmFnZXIsIHd0VGFibGUpIHtcbiAgICAvKipcbiAgICAgKiBXYWxrb250YWJsZSBpbnN0YW5jZSdzIHJlZmVyZW5jZS5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAdHlwZSB7V2Fsa29udGFibGV9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid290XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHRoZSBhbGwgb3ZlcmxheXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7T3ZlcmxheVtdfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9vdmVybGF5cywgW10pO1xuICAgIC8qKlxuICAgICAqIFJlZmVyIHRvIHRoZSBUb3BPdmVybGF5IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEB0eXBlIHtUb3BPdmVybGF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvcE92ZXJsYXlcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUmVmZXIgdG8gdGhlIEJvdHRvbU92ZXJsYXkgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQHR5cGUge0JvdHRvbU92ZXJsYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYm90dG9tT3ZlcmxheVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBSZWZlciB0byB0aGUgSW5saW5lU3RhcnRPdmVybGF5IG9yIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEB0eXBlIHtJbmxpbmVTdGFydE92ZXJsYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5saW5lU3RhcnRPdmVybGF5XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFJlZmVyIHRvIHRoZSBUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQHR5cGUge1RvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUmVmZXIgdG8gdGhlIEJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAdHlwZSB7Qm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBCcm93c2VyIGxpbmUgaGVpZ2h0IGZvciBwdXJwb3NlcyBvZiB0cmFuc2xhdGluZyBtb3VzZSB3aGVlbC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJicm93c2VyTGluZUhlaWdodFwiLCB1bmRlZmluZWQpO1xuICAgIC8qKlxuICAgICAqIFRoZSB3YWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICAgKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAdHlwZSB7U2V0dGluZ3N9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwid3RTZXR0aW5nc1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVuZGVyaW5nIHN0YXRlIGhhcyBjaGFuZ2VkIGZvciBvbmUgb2YgdGhlIG92ZXJsYXlzLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2hhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgUmVzaXplT2JzZXJ2ZXIgdGhhdCBvYnNlcnZlcyB0aGUgc2l6ZSBvZiB0aGUgV2Fsa29udGFibGUgd3JhcHBlciBlbGVtZW50LlxuICAgICAqIEluIGNhc2Ugb2YgdGhlIHNpemUgY2hhbmdlIGRldGVjdGlvbiB0aGUgYG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZWAgaXMgZmlyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtSZXNpemVPYnNlcnZlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZXNpemVPYnNlcnZlclwiLCBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICAoMCwgX2ZlYXR1cmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSgoKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlbnRyaWVzKSB8fCAhZW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uQ29udGFpbmVyRWxlbWVudFJlc2l6ZScpO1xuICAgICAgfSk7XG4gICAgfSkpO1xuICAgIHRoaXMud290ID0gd290SW5zdGFuY2U7XG4gICAgdGhpcy53dFNldHRpbmdzID0gd3RTZXR0aW5ncztcbiAgICB0aGlzLmRvbUJpbmRpbmdzID0gZG9tQmluZGluZ3M7XG4gICAgdGhpcy5mYWNhZGVHZXR0ZXIgPSBmYWNhZGVHZXR0ZXI7XG4gICAgdGhpcy53dFRhYmxlID0gd3RUYWJsZTtcbiAgICBjb25zdCB7XG4gICAgICByb290RG9jdW1lbnQsXG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG5cbiAgICAvLyBsZWdhY3kgc3VwcG9ydFxuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLndvdDsgLy8gdG9kbyByZWZhY3RvcmluZzogbW92ZSB0byBmYWNhZGVcbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcblxuICAgIC8vIFRPRE8gcmVmYWN0b3Jpbmc6IHByb2JhYmx5IGludmFsaWQgcGxhY2UgdG8gdGhpcyBsb2dpY1xuICAgIHRoaXMuc2Nyb2xsYmFyU2l6ZSA9ICgwLCBfZWxlbWVudC5nZXRTY3JvbGxiYXJXaWR0aCkocm9vdERvY3VtZW50KTtcbiAgICBjb25zdCBpc092ZXJmbG93SGlkZGVuID0gcm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdycpID09PSAnaGlkZGVuJztcbiAgICB0aGlzLnNjcm9sbGFibGVFbGVtZW50ID0gaXNPdmVyZmxvd0hpZGRlbiA/IHd0VGFibGUuaG9sZGVyIDogKDAsIF9lbGVtZW50LmdldFNjcm9sbGFibGVFbGVtZW50KSh3dFRhYmxlLlRBQkxFKTtcbiAgICB0aGlzLmluaXRPdmVybGF5cygpO1xuICAgIHRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tID0gZmFsc2U7XG4gICAgdGhpcy5oYXNTY3JvbGxiYXJSaWdodCA9IGZhbHNlO1xuICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgdGhpcy5rZXlQcmVzc2VkID0gZmFsc2U7XG4gICAgdGhpcy5zcHJlYWRlckxhc3RTaXplID0ge1xuICAgICAgd2lkdGg6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9O1xuICAgIHRoaXMudmVydGljYWxTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmhvcml6b250YWxTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpO1xuICAgIHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmxhc3RTY3JvbGxYID0gcm9vdFdpbmRvdy5zY3JvbGxYO1xuICAgIHRoaXMubGFzdFNjcm9sbFkgPSByb290V2luZG93LnNjcm9sbFk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gYWxsIG92ZXJsYXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlTWFzdGVyID0gZmFsc2VdIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBsaXN0IHdpbGwgY29udGFpbiB0aGUgbWFzdGVyIHRhYmxlIGFzIHRoZSBsYXN0XG4gICAqIGVsZW1lbnQuXG4gICAqIEByZXR1cm5zIHsoVG9wT3ZlcmxheXxUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXl8SW5saW5lU3RhcnRPdmVybGF5fEJvdHRvbU92ZXJsYXl8Qm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KVtdfVxuICAgKi9cbiAgZ2V0T3ZlcmxheXMoKSB7XG4gICAgbGV0IGluY2x1ZGVNYXN0ZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGNvbnN0IG92ZXJsYXlzID0gWy4uLl9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3ZlcmxheXMsIHRoaXMpXTtcbiAgICBpZiAoaW5jbHVkZU1hc3Rlcikge1xuICAgICAgb3ZlcmxheXMucHVzaCh0aGlzLnd0VGFibGUpO1xuICAgIH1cbiAgICByZXR1cm4gb3ZlcmxheXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYnJvd3NlciBsaW5lIGhlaWdodCBhbmQgYXBwbHkgaXRzIHZhbHVlIHRvIGBicm93c2VyTGluZUhlaWdodGAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0QnJvd3NlckxpbmVIZWlnaHQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvdyxcbiAgICAgIHJvb3REb2N1bWVudFxuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSByb290V2luZG93LmdldENvbXB1dGVkU3R5bGUocm9vdERvY3VtZW50LmJvZHkpO1xuICAgIC8qKlxuICAgICAqIFNvbWV0aW1lcyBgbGluZS1oZWlnaHRgIG1pZ2h0IGJlIHNldCB0byAnbm9ybWFsJy4gSW4gdGhhdCBjYXNlLCBhIGRlZmF1bHQgYGZvbnQtc2l6ZWAgc2hvdWxkIGJlIG11bHRpcGxpZWQgYnkgcm91Z2hseSAxLjIuXG4gICAgICogSHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvcGwvZG9jcy9XZWIvQ1NTL2xpbmUtaGVpZ2h0I1ZhbHVlcy5cbiAgICAgKi9cbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5saW5lSGVpZ2h0LCAxMCk7XG4gICAgY29uc3QgbGluZUhlaWdodEZhbGJhY2sgPSBwYXJzZUludChjb21wdXRlZFN0eWxlLmZvbnRTaXplLCAxMCkgKiAxLjI7XG4gICAgdGhpcy5icm93c2VyTGluZUhlaWdodCA9IGxpbmVIZWlnaHQgfHwgbGluZUhlaWdodEZhbGJhY2s7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBvdmVybGF5cyBiYXNlZCBvbiB1c2VyIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdE92ZXJsYXlzKCkge1xuICAgIGNvbnN0IGFyZ3MgPSBbdGhpcy53b3QsIHRoaXMuZmFjYWRlR2V0dGVyLCB0aGlzLnd0U2V0dGluZ3MsIHRoaXMuZG9tQmluZGluZ3NdO1xuXG4gICAgLy8gdG9kbyByZWZhY3RvcmluZzogSU9DLCBjb2xsZWN0aW9uIG9yIGZhY3Rvcmllcy5cbiAgICAvLyBUT0RPIHJlZmFjdG9yaW5nLCBjb25jZWl2ZSBhYm91dCB1c2luZyBnZW5lcmljIGNvbGxlY3Rpb24gb2Ygb3ZlcmxheXMuXG4gICAgdGhpcy50b3BPdmVybGF5ID0gbmV3IF9vdmVybGF5LlRvcE92ZXJsYXkoLi4uYXJncyk7XG4gICAgdGhpcy5ib3R0b21PdmVybGF5ID0gbmV3IF9vdmVybGF5LkJvdHRvbU92ZXJsYXkoLi4uYXJncyk7XG4gICAgdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkgPSBuZXcgX292ZXJsYXkuSW5saW5lU3RhcnRPdmVybGF5KC4uLmFyZ3MpO1xuXG4gICAgLy8gVE9ETyBkaXNjdXNzLCB0aGUgY29udHJvdmVyc2lhbCBoZXJlIHdvdWxkIGJlIHJlbW92aW5nIHRoZSBsYXp5IGNyZWF0aW9uIG1lY2hhbmlzbSBmb3IgY29ybmVycy5cbiAgICAvLyBUT0RPIGNvbmQuIEhhcyBubyBhbnkgdmlzdWFsIGltcGFjdC4gVGhleSdyZSBpbml0aWFsbHkgaGlkZGVuIGluIHNhbWUgd2F5IGxpa2UgbGVmdCwgdG9wLCBhbmQgYm90dG9tIG92ZXJsYXlzLlxuICAgIHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ID0gbmV3IF9vdmVybGF5LlRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSguLi5hcmdzLCB0aGlzLnRvcE92ZXJsYXksIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KTtcbiAgICB0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSA9IG5ldyBfb3ZlcmxheS5Cb3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkoLi4uYXJncywgdGhpcy5ib3R0b21PdmVybGF5LCB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9vdmVybGF5cywgdGhpcywgW3RoaXMudG9wT3ZlcmxheSwgdGhpcy5ib3R0b21PdmVybGF5LCB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSwgdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksIHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBsb2dpYyBmb3IgdGhlIG92ZXJsYXlzIGJlZm9yZSB0aGUgdGFibGUgaXMgZHJhd24uXG4gICAqL1xuICBiZWZvcmVEcmF3KCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX292ZXJsYXlzLCB0aGlzKS5yZWR1Y2UoKGFjYywgb3ZlcmxheSkgPT4ge1xuICAgICAgcmV0dXJuIG92ZXJsYXkuaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCkgfHwgYWNjO1xuICAgIH0sIGZhbHNlKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vdmVybGF5cywgdGhpcykuZm9yRWFjaChvdmVybGF5ID0+IG92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygnYmVmb3JlJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgbG9naWMgZm9yIHRoZSBvdmVybGF5cyBhZnRlciB0aGUgdGFibGUgaXMgZHJhd24uXG4gICAqL1xuICBhZnRlckRyYXcoKSB7XG4gICAgdGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3ZlcmxheXMsIHRoaXMpLmZvckVhY2gob3ZlcmxheSA9PiB7XG4gICAgICBjb25zdCBoYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQgPSBvdmVybGF5Lmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpO1xuICAgICAgb3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCdhZnRlcicpO1xuICAgICAgaWYgKGhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCAmJiAhb3ZlcmxheS5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgICBvdmVybGF5LnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBhbmQgcmVkcmF3IHRhYmxlLlxuICAgKi9cbiAgcmVmcmVzaEFsbCgpIHtcbiAgICBpZiAoIXRoaXMud290LmRyYXduKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSB7XG4gICAgICAvLyBXYWxrb250YWJsZSB3YXMgZGV0YWNoZWQgZnJvbSBET00sIGJ1dCB0aGlzIGhhbmRsZXIgd2FzIG5vdCByZW1vdmVkXG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy53b3QuZHJhdyh0cnVlKTtcbiAgICBpZiAodGhpcy52ZXJ0aWNhbFNjcm9sbGluZykge1xuICAgICAgdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkub25TY3JvbGwoKTsgLy8gdG9kbyB0aGUgaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCkgZmlyZXMgaG9vay4gV2h5IGlzIGl0IG5lZWRlZCB0aGVyZSwgbm90IGluIGFueSBhbm90aGVyIHBsYWNlP1xuICAgIH1cbiAgICBpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nKSB7XG4gICAgICB0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKTtcbiAgICB9XG4gICAgdGhpcy52ZXJ0aWNhbFNjcm9sbGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFsbCBuZWNlc3NhcnkgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcmVnaXN0ZXJMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50LFxuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IHtcbiAgICAgIG1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OiB0b3BPdmVybGF5U2Nyb2xsYWJsZUVsZW1lbnRcbiAgICB9ID0gdGhpcy50b3BPdmVybGF5O1xuICAgIGNvbnN0IHtcbiAgICAgIG1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OiBpbmxpbmVTdGFydE92ZXJsYXlTY3JvbGxhYmxlRWxlbWVudFxuICAgIH0gPSB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdrZXlkb3duJywgZXZlbnQgPT4gdGhpcy5vbktleURvd24oZXZlbnQpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdrZXl1cCcsICgpID0+IHRoaXMub25LZXlVcCgpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3REb2N1bWVudCwgJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB0aGlzLm9uS2V5VXAoKSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0b3BPdmVybGF5U2Nyb2xsYWJsZUVsZW1lbnQsICdzY3JvbGwnLCBldmVudCA9PiB0aGlzLm9uVGFibGVTY3JvbGwoZXZlbnQpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgaWYgKHRvcE92ZXJsYXlTY3JvbGxhYmxlRWxlbWVudCAhPT0gaW5saW5lU3RhcnRPdmVybGF5U2Nyb2xsYWJsZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaW5saW5lU3RhcnRPdmVybGF5U2Nyb2xsYWJsZUVsZW1lbnQsICdzY3JvbGwnLCBldmVudCA9PiB0aGlzLm9uVGFibGVTY3JvbGwoZXZlbnQpLCB7XG4gICAgICAgIHBhc3NpdmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc0hpZ2hQaXhlbFJhdGlvID0gcm9vdFdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvICYmIHJvb3RXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA+IDE7XG4gICAgY29uc3QgaXNTY3JvbGxPbldpbmRvdyA9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgPT09IHJvb3RXaW5kb3c7XG4gICAgY29uc3QgcHJldmVudFdoZWVsID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRXaGVlbCcpO1xuICAgIGNvbnN0IHdoZWVsRXZlbnRPcHRpb25zID0ge1xuICAgICAgcGFzc2l2ZTogaXNTY3JvbGxPbldpbmRvd1xuICAgIH07XG4gICAgaWYgKHByZXZlbnRXaGVlbCB8fCBpc0hpZ2hQaXhlbFJhdGlvIHx8ICEoMCwgX2Jyb3dzZXIuaXNDaHJvbWUpKCkpIHtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQsICd3aGVlbCcsIGV2ZW50ID0+IHRoaXMub25DbG9uZVdoZWVsKGV2ZW50LCBwcmV2ZW50V2hlZWwpLCB3aGVlbEV2ZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXlzID0gW3RoaXMudG9wT3ZlcmxheSwgdGhpcy5ib3R0b21PdmVybGF5LCB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSwgdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksIHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XTtcbiAgICBvdmVybGF5cy5mb3JFYWNoKG92ZXJsYXkgPT4ge1xuICAgICAgaWYgKG92ZXJsYXkgJiYgb3ZlcmxheS5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaG9sZGVyXG4gICAgICAgIH0gPSBvdmVybGF5LmNsb25lLnd0VGFibGU7IC8vIHRvZG8gcmV0aGluaywgbWF5YmU6IG92ZXJsYXkuZ2V0SG9sZGVyKClcblxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGhvbGRlciwgJ3doZWVsJywgZXZlbnQgPT4gdGhpcy5vbkNsb25lV2hlZWwoZXZlbnQsIHByZXZlbnRXaGVlbCksIHdoZWVsRXZlbnRPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgcmVzaXplVGltZW91dDtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RXaW5kb3csICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQocmVzaXplVGltZW91dCk7XG4gICAgICByZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdvbldpbmRvd1Jlc2l6ZScpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9KTtcbiAgICBpZiAoIWlzU2Nyb2xsT25XaW5kb3cpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVyZWdpc3RlciBhbGwgcHJldmlvdXNseSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAgICovXG4gIGRlcmVnaXN0ZXJMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHModHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb25UYWJsZVNjcm9sbChldmVudCkge1xuICAgIC8vIFRoZXJlIHdhcyBpZiBzdGF0ZW1lbnQgd2hpY2ggY29udHJvbGxlZCBmbG93IG9mIHRoaXMgZnVuY3Rpb24uIEl0IGF2b2lkZWQgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgbmV4dCBsaW5lc1xuICAgIC8vIG9uIG1vYmlsZSBkZXZpY2VzLiBJdCB3YXMgY2hhbmdlZC4gQnJvYWRlciBkZXNjcmlwdGlvbiBvZiB0aGlzIGNhc2UgaXMgaW5jbHVkZWQgd2l0aGluIGlzc3VlICM0ODU2LlxuICAgIGNvbnN0IHJvb3RXaW5kb3cgPSB0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c7XG4gICAgY29uc3QgbWFzdGVySG9yaXpvbnRhbCA9IHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O1xuICAgIGNvbnN0IG1hc3RlclZlcnRpY2FsID0gdGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgIC8vIEZvciBrZXkgcHJlc3MsIHN5bmMgb25seSBtYXN0ZXIgLT4gb3ZlcmxheSBwb3NpdGlvbiBiZWNhdXNlIHdoaWxlIHByZXNzaW5nIFdhbGtvbnRhYmxlLnJlbmRlciBpcyB0cmlnZ2VyZWRcbiAgICAvLyBieSBob3QucmVmcmVzaEJvcmRlclxuICAgIGlmICh0aGlzLmtleVByZXNzZWQpIHtcbiAgICAgIGlmIChtYXN0ZXJWZXJ0aWNhbCAhPT0gcm9vdFdpbmRvdyAmJiB0YXJnZXQgIT09IHJvb3RXaW5kb3cgJiYgIWV2ZW50LnRhcmdldC5jb250YWlucyhtYXN0ZXJWZXJ0aWNhbCkgfHwgbWFzdGVySG9yaXpvbnRhbCAhPT0gcm9vdFdpbmRvdyAmJiB0YXJnZXQgIT09IHJvb3RXaW5kb3cgJiYgIWV2ZW50LnRhcmdldC5jb250YWlucyhtYXN0ZXJIb3Jpem9udGFsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlZWwgbGlzdGVuZXIgZm9yIGNsb25lZCBvdmVybGF5cy5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBwcmV2ZW50RGVmYXVsdCBJZiBgdHJ1ZWAsIHRoZSBgcHJldmVudERlZmF1bHRgIHdpbGwgYmUgY2FsbGVkIG9uIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIG9uQ2xvbmVXaGVlbChldmVudCwgcHJldmVudERlZmF1bHQpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG5cbiAgICAvLyBUaGVyZSB3YXMgaWYgc3RhdGVtZW50IHdoaWNoIGNvbnRyb2xsZWQgZmxvdyBvZiB0aGlzIGZ1bmN0aW9uLiBJdCBhdm9pZGVkIHRoZSBleGVjdXRpb24gb2YgdGhlIG5leHQgbGluZXNcbiAgICAvLyBvbiBtb2JpbGUgZGV2aWNlcy4gSXQgd2FzIGNoYW5nZWQuIEJyb2FkZXIgZGVzY3JpcHRpb24gb2YgdGhpcyBjYXNlIGlzIGluY2x1ZGVkIHdpdGhpbiBpc3N1ZSAjNDg1Ni5cblxuICAgIGNvbnN0IG1hc3Rlckhvcml6b250YWwgPSB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtcbiAgICBjb25zdCBtYXN0ZXJWZXJ0aWNhbCA9IHRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAvLyBGb3Iga2V5IHByZXNzLCBzeW5jIG9ubHkgbWFzdGVyIC0+IG92ZXJsYXkgcG9zaXRpb24gYmVjYXVzZSB3aGlsZSBwcmVzc2luZyBXYWxrb250YWJsZS5yZW5kZXIgaXMgdHJpZ2dlcmVkXG4gICAgLy8gYnkgaG90LnJlZnJlc2hCb3JkZXJcbiAgICBjb25zdCBzaG91bGROb3RXaGVlbFZlcnRpY2FsbHkgPSBtYXN0ZXJWZXJ0aWNhbCAhPT0gcm9vdFdpbmRvdyAmJiB0YXJnZXQgIT09IHJvb3RXaW5kb3cgJiYgIXRhcmdldC5jb250YWlucyhtYXN0ZXJWZXJ0aWNhbCk7XG4gICAgY29uc3Qgc2hvdWxkTm90V2hlZWxIb3Jpem9udGFsbHkgPSBtYXN0ZXJIb3Jpem9udGFsICE9PSByb290V2luZG93ICYmIHRhcmdldCAhPT0gcm9vdFdpbmRvdyAmJiAhdGFyZ2V0LmNvbnRhaW5zKG1hc3Rlckhvcml6b250YWwpO1xuICAgIGlmICh0aGlzLmtleVByZXNzZWQgJiYgKHNob3VsZE5vdFdoZWVsVmVydGljYWxseSB8fCBzaG91bGROb3RXaGVlbEhvcml6b250YWxseSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNTY3JvbGxQb3NzaWJsZSA9IHRoaXMudHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGV2ZW50KTtcbiAgICBpZiAocHJldmVudERlZmF1bHQgfHwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudCAhPT0gcm9vdFdpbmRvdyAmJiBpc1Njcm9sbFBvc3NpYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBLZXkgZG93biBsaXN0ZW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIG9uS2V5RG93bihldmVudCkge1xuICAgIHRoaXMua2V5UHJlc3NlZCA9ICgwLCBfdW5pY29kZS5pc0tleSkoZXZlbnQua2V5Q29kZSwgJ0FSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1dfTEVGVCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEtleSB1cCBsaXN0ZW5lci5cbiAgICovXG4gIG9uS2V5VXAoKSB7XG4gICAgdGhpcy5rZXlQcmVzc2VkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHdoZWVsIGV2ZW50IGludG8gc2Nyb2xsIGV2ZW50IGFuZCBzeW5jIHNjcm9sbCBvdmVybGF5cyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB0cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwoZXZlbnQpIHtcbiAgICBsZXQgZGVsdGFZID0gaXNOYU4oZXZlbnQuZGVsdGFZKSA/IC0xICogZXZlbnQud2hlZWxEZWx0YVkgOiBldmVudC5kZWx0YVk7XG4gICAgbGV0IGRlbHRhWCA9IGlzTmFOKGV2ZW50LmRlbHRhWCkgPyAtMSAqIGV2ZW50LndoZWVsRGVsdGFYIDogZXZlbnQuZGVsdGFYO1xuICAgIGlmIChldmVudC5kZWx0YU1vZGUgPT09IDEpIHtcbiAgICAgIGRlbHRhWCArPSBkZWx0YVggKiB0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0O1xuICAgICAgZGVsdGFZICs9IGRlbHRhWSAqIHRoaXMuYnJvd3NlckxpbmVIZWlnaHQ7XG4gICAgfVxuICAgIGNvbnN0IGlzU2Nyb2xsVmVydGljYWxseVBvc3NpYmxlID0gdGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGRlbHRhWSk7XG4gICAgY29uc3QgaXNTY3JvbGxIb3Jpem9udGFsbHlQb3NzaWJsZSA9IHRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGRlbHRhWCk7XG4gICAgcmV0dXJuIGlzU2Nyb2xsVmVydGljYWxseVBvc3NpYmxlIHx8IGlzU2Nyb2xsSG9yaXpvbnRhbGx5UG9zc2libGU7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xscyBtYWluIHNjcm9sbGFibGUgZWxlbWVudCBob3Jpem9udGFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWx0YSBSZWxhdGl2ZSB2YWx1ZSB0byBzY3JvbGwuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgc2Nyb2xsVmVydGljYWxseShkZWx0YSkge1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsID0gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AgKz0gZGVsdGE7XG4gICAgcmV0dXJuIHByZXZpb3VzU2Nyb2xsICE9PSB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIG1haW4gc2Nyb2xsYWJsZSBlbGVtZW50IGhvcml6b250YWxseS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIFJlbGF0aXZlIHZhbHVlIHRvIHNjcm9sbC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzY3JvbGxIb3Jpem9udGFsbHkoZGVsdGEpIHtcbiAgICBjb25zdCBwcmV2aW91c1Njcm9sbCA9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQgKz0gZGVsdGE7XG4gICAgcmV0dXJuIHByZXZpb3VzU2Nyb2xsICE9PSB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemUgc2Nyb2xsIHBvc2l0aW9uIGJldHdlZW4gbWFzdGVyIHRhYmxlIGFuZCBvdmVybGF5IHRhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc3luY1Njcm9sbFBvc2l0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGNvbnN0IHRvcEhvbGRlciA9IHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjsgLy8gdG9kbyByZXRoaW5rXG4gICAgY29uc3QgbGVmdEhvbGRlciA9IHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyOyAvLyB0b2RvIHJldGhpbmtcblxuICAgIGNvbnN0IFtzY3JvbGxMZWZ0LCBzY3JvbGxUb3BdID0gW3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3BdO1xuICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyA9IHRvcEhvbGRlci5zY3JvbGxMZWZ0ICE9PSBzY3JvbGxMZWZ0IHx8IHRoaXMubGFzdFNjcm9sbFggIT09IHJvb3RXaW5kb3cuc2Nyb2xsWDtcbiAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nID0gbGVmdEhvbGRlci5zY3JvbGxUb3AgIT09IHNjcm9sbFRvcCB8fCB0aGlzLmxhc3RTY3JvbGxZICE9PSByb290V2luZG93LnNjcm9sbFk7XG4gICAgdGhpcy5sYXN0U2Nyb2xsWCA9IHJvb3RXaW5kb3cuc2Nyb2xsWDtcbiAgICB0aGlzLmxhc3RTY3JvbGxZID0gcm9vdFdpbmRvdy5zY3JvbGxZO1xuICAgIGlmICh0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpIHtcbiAgICAgIHRvcEhvbGRlci5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgIGNvbnN0IGJvdHRvbUhvbGRlciA9IHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciA/IHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlciA6IG51bGw7IC8vIHRvZG8gcmV0aGlua1xuXG4gICAgICBpZiAoYm90dG9tSG9sZGVyKSB7XG4gICAgICAgIGJvdHRvbUhvbGRlci5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmVydGljYWxTY3JvbGxpbmcpIHtcbiAgICAgIGxlZnRIb2xkZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgIH1cbiAgICB0aGlzLnJlZnJlc2hBbGwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZSBvdmVybGF5IHNjcm9sbGJhcnMgd2l0aCB0aGUgbWFzdGVyIHNjcm9sbGJhci5cbiAgICovXG4gIHN5bmNTY3JvbGxXaXRoTWFzdGVyKCkge1xuICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQsIHRoaXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1hc3RlciA9IHRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtcbiAgICBjb25zdCB7XG4gICAgICBzY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wXG4gICAgfSA9IG1hc3RlcjtcbiAgICBpZiAodGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7IC8vIHRvZG8gcmV0aGluaywgKm92ZXJsYXkuc2V0U2Nyb2xsKigpXG4gICAgfVxuICAgIGlmICh0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXIpIHtcbiAgICAgIHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDsgLy8gdG9kbyByZXRoaW5rLCAqb3ZlcmxheS5zZXRTY3JvbGwqKClcbiAgICB9XG4gICAgaWYgKHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7IC8vIHRvZG8gcmV0aGluaywgKm92ZXJsYXkuc2V0U2Nyb2xsKigpXG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkLCB0aGlzLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBtYWluIHNjcm9sbGFibGUgZWxlbWVudHMgZm9yIGFsbCB0aGUgb3ZlcmxheXMuXG4gICAqL1xuICB1cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRzKCkge1xuICAgIHRoaXMuZGVyZWdpc3Rlckxpc3RlbmVycygpO1xuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpO1xuICAgIHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtcbiAgICBpZiAodGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyKSB7XG4gICAgICB0aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCk7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG4gICAgaWYgKHJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh3dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgnb3ZlcmZsb3cnKSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgPSB3dFRhYmxlLmhvbGRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxhYmxlRWxlbWVudCA9ICgwLCBfZWxlbWVudC5nZXRTY3JvbGxhYmxlRWxlbWVudCkod3RUYWJsZS5UQUJMRSk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7XG4gICAgLy8gdG9kbywgcHJvYmFibHkgYWxsIGJlbG93IGBkZXN0b3J5YCBjYWxscyBoYXMgbm8gc2Vuc2UuIFRvIGFuYWx5emVcbiAgICB0aGlzLnRvcE92ZXJsYXkuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpIHtcbiAgICAgIHRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkpIHtcbiAgICAgIHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ICYmIHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKSB7XG4gICAgICB0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmYXN0RHJhdz1mYWxzZV0gV2hlbiBgdHJ1ZWAsIHRyeSB0byByZWZyZXNoIG9ubHkgdGhlIHBvc2l0aW9ucyBvZiBib3JkZXJzIHdpdGhvdXQgcmVyZW5kZXJpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkYXRhLiBJdCB3aWxsIG9ubHkgd29yayBpZiBUYWJsZS5kcmF3KCkgZG9lcyBub3QgZm9yY2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZyBhbnl3YXkuXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIGxldCBmYXN0RHJhdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgY29uc3Qgd2FzU3ByZWFkZXJTaXplVXBkYXRlZCA9IHRoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpO1xuICAgIGlmICh3YXNTcHJlYWRlclNpemVVcGRhdGVkKSB7XG4gICAgICB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3R0b21PdmVybGF5LmNsb25lKSB7XG4gICAgICB0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChmYXN0RHJhdyk7XG4gICAgfVxuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnJlZnJlc2goZmFzdERyYXcpO1xuICAgIHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGZhc3REcmF3KTtcbiAgICBpZiAodGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkpIHtcbiAgICAgIHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2goZmFzdERyYXcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkgJiYgdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpIHtcbiAgICAgIHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2goZmFzdERyYXcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxhc3QgY2FjaGVkIHNwcmVhZGVyIHNpemUgd2l0aCB0aGUgY3VycmVudCBzaXplLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBsYXN0U3ByZWFkZXJTaXplIGNhY2hlIHdhcyB1cGRhdGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSB7XG4gICAgY29uc3Qgc3ByZWFkZXIgPSB0aGlzLnd0VGFibGUuc3ByZWFkZXI7XG4gICAgY29uc3Qgd2lkdGggPSBzcHJlYWRlci5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBzcHJlYWRlci5jbGllbnRIZWlnaHQ7XG4gICAgY29uc3QgbmVlZHNVcGRhdGluZyA9IHdpZHRoICE9PSB0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGggfHwgaGVpZ2h0ICE9PSB0aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O1xuICAgIGlmIChuZWVkc1VwZGF0aW5nKSB7XG4gICAgICB0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGggPSB3aWR0aDtcbiAgICAgIHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBuZWVkc1VwZGF0aW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdCBvdmVybGF5cyBlbGVtZW50cyBzaXplIGFuZCBtYXN0ZXIgdGFibGUgc2l6ZS5cbiAgICovXG4gIGFkanVzdEVsZW1lbnRzU2l6ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFZpZXdwb3J0XG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuZG9tQmluZGluZ3M7XG4gICAgY29uc3QgaXNXaW5kb3dTY3JvbGxlZCA9IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQgPT09IHJvb3RXaW5kb3c7XG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsQ29sdW1ucycpO1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICBjb25zdCBoZWFkZXJSb3dTaXplID0gd3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpO1xuICAgIGNvbnN0IGhlYWRlckNvbHVtblNpemUgPSB3dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpO1xuICAgIGNvbnN0IHByb3Bvc2VkSGlkZXJIZWlnaHQgPSBoZWFkZXJDb2x1bW5TaXplICsgdGhpcy50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLCB0b3RhbFJvd3MpICsgMTtcbiAgICBjb25zdCBwcm9wb3NlZEhpZGVyV2lkdGggPSBoZWFkZXJSb3dTaXplICsgdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsIHRvdGFsQ29sdW1ucyk7XG4gICAgY29uc3QgaGlkZXJFbGVtZW50ID0gd3RUYWJsZS5oaWRlcjtcbiAgICBjb25zdCBoaWRlclN0eWxlID0gaGlkZXJFbGVtZW50LnN0eWxlO1xuICAgIGNvbnN0IGlzU2Nyb2xsZWRCZXlvbmRIaWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHJldHVybiBpc1dpbmRvd1Njcm9sbGVkID8gZmFsc2UgOiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCA+IE1hdGgubWF4KDAsIHByb3Bvc2VkSGlkZXJIZWlnaHQgLSB3dFRhYmxlLmhvbGRlci5jbGllbnRIZWlnaHQpO1xuICAgIH07XG4gICAgY29uc3QgaXNTY3JvbGxlZEJleW9uZEhpZGVyV2lkdGggPSAoKSA9PiB7XG4gICAgICByZXR1cm4gaXNXaW5kb3dTY3JvbGxlZCA/IGZhbHNlIDogdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0ID4gTWF0aC5tYXgoMCwgcHJvcG9zZWRIaWRlcldpZHRoIC0gd3RUYWJsZS5ob2xkZXIuY2xpZW50V2lkdGgpO1xuICAgIH07XG4gICAgY29uc3QgY29sdW1uSGVhZGVyQm9yZGVyQ29tcGVuc2F0aW9uID0gaXNTY3JvbGxlZEJleW9uZEhpZGVySGVpZ2h0KCkgPyAxIDogMDtcbiAgICBjb25zdCByb3dIZWFkZXJCb3JkZXJDb21wZW5zYXRpb24gPSBpc1Njcm9sbGVkQmV5b25kSGlkZXJXaWR0aCgpID8gMSA6IDA7XG5cbiAgICAvLyBJZiB0aGUgZWxlbWVudHMgYXJlIGJlaW5nIGFkanVzdGVkIGFmdGVyIHNjcm9sbGluZyB0aGUgdGFibGUgZnJvbSB0aGUgdmVyeSBiZWdpbm5pbmcgdG8gdGhlIHZlcnkgZW5kLFxuICAgIC8vIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSBoaWRlciBkaW1lbnNpb25zIGJ5IHRoZSBoZWFkZXIgYm9yZGVyIHNpemUuIChodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2Rldi1oYW5kc29udGFibGUvaXNzdWVzLzE3NzIpXG4gICAgaGlkZXJTdHlsZS53aWR0aCA9IGAke3Byb3Bvc2VkSGlkZXJXaWR0aCArIHJvd0hlYWRlckJvcmRlckNvbXBlbnNhdGlvbn1weGA7XG4gICAgaGlkZXJTdHlsZS5oZWlnaHQgPSBgJHtwcm9wb3NlZEhpZGVySGVpZ2h0ICsgY29sdW1uSGVhZGVyQm9yZGVyQ29tcGVuc2F0aW9ufXB4YDtcbiAgICBpZiAodGhpcy5zY3JvbGxiYXJTaXplID4gMCkge1xuICAgICAgLy8gdG9kbyByZWZhY3RvcmluZywgbG9va2luZyBhcyBhIHBhcnQgb2YgbG9naWMgd2hpY2ggc2hvdWxkIGJlIG1vdmVkIG91dHNpZGUgdGhlIGNsYXNzXG4gICAgICBjb25zdCB7XG4gICAgICAgIHNjcm9sbEhlaWdodDogcm9vdEVsZW1TY3JvbGxIZWlnaHQsXG4gICAgICAgIHNjcm9sbFdpZHRoOiByb290RWxlbVNjcm9sbFdpZHRoXG4gICAgICB9ID0gd3RUYWJsZS53dFJvb3RFbGVtZW50O1xuICAgICAgY29uc3Qge1xuICAgICAgICBzY3JvbGxIZWlnaHQ6IGhvbGRlclNjcm9sbEhlaWdodCxcbiAgICAgICAgc2Nyb2xsV2lkdGg6IGhvbGRlclNjcm9sbFdpZHRoXG4gICAgICB9ID0gd3RUYWJsZS5ob2xkZXI7XG4gICAgICB0aGlzLmhhc1Njcm9sbGJhclJpZ2h0ID0gcm9vdEVsZW1TY3JvbGxIZWlnaHQgPCBob2xkZXJTY3JvbGxIZWlnaHQ7XG4gICAgICB0aGlzLmhhc1Njcm9sbGJhckJvdHRvbSA9IHJvb3RFbGVtU2Nyb2xsV2lkdGggPCBob2xkZXJTY3JvbGxXaWR0aDtcbiAgICAgIGlmICh0aGlzLmhhc1Njcm9sbGJhclJpZ2h0ICYmIHd0VGFibGUuaGlkZXIuc2Nyb2xsV2lkdGggKyB0aGlzLnNjcm9sbGJhclNpemUgPiByb290RWxlbVNjcm9sbFdpZHRoKSB7XG4gICAgICAgIHRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNTY3JvbGxiYXJCb3R0b20gJiYgd3RUYWJsZS5oaWRlci5zY3JvbGxIZWlnaHQgKyB0aGlzLnNjcm9sbGJhclNpemUgPiByb290RWxlbVNjcm9sbEhlaWdodCkge1xuICAgICAgICB0aGlzLmhhc1Njcm9sbGJhclJpZ2h0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50b3BPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIHRoaXMuYm90dG9tT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIGhpZGVyIHZlcnRpY2FsbHkgZWxlbWVudCBieSB0aGUgcHJvdmlkZWQgZGVsdGEgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHREZWx0YSBUaGUgZGVsdGEgdmFsdWUgdG8gZXhwYW5kIHRoZSBoaWRlciBlbGVtZW50IGJ5LlxuICAgKi9cbiAgZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoaGVpZ2h0RGVsdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlXG4gICAgfSA9IHRoaXM7XG4gICAgd3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQgPSBgJHtwYXJzZUludCh3dFRhYmxlLmhpZGVyLnN0eWxlLmhlaWdodCwgMTApICsgaGVpZ2h0RGVsdGF9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCB0aGUgaGlkZXIgaG9yaXpvbnRhbGx5IGVsZW1lbnQgYnkgdGhlIHByb3ZpZGVkIGRlbHRhIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhEZWx0YSBUaGUgZGVsdGEgdmFsdWUgdG8gZXhwYW5kIHRoZSBoaWRlciBlbGVtZW50IGJ5LlxuICAgKi9cbiAgZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeSh3aWR0aERlbHRhKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSB0aGlzO1xuICAgIHd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGggPSBgJHtwYXJzZUludCh3dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoLCAxMCkgKyB3aWR0aERlbHRhfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgYXBwbHlUb0RPTSgpIHtcbiAgICBpZiAoIXRoaXMud3RUYWJsZS5pc1Zpc2libGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpO1xuICAgIGlmICh0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpIHtcbiAgICAgIHRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCk7XG4gICAgfVxuICAgIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFwcGx5VG9ET00oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBhcmVudCBvdmVybGF5IG9mIHRoZSBwcm92aWRlZCBlbGVtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfVxuICAgKi9cbiAgZ2V0UGFyZW50T3ZlcmxheShlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgb3ZlcmxheXMgPSBbdGhpcy50b3BPdmVybGF5LCB0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSwgdGhpcy5ib3R0b21PdmVybGF5LCB0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSwgdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldO1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShvdmVybGF5cywgb3ZlcmxheSA9PiB7XG4gICAgICBpZiAoIW92ZXJsYXkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKG92ZXJsYXkuY2xvbmUgJiYgb3ZlcmxheS5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGVsZW1lbnQpKSB7XG4gICAgICAgIC8vIHRvZG8gZGVtZXRlclxuICAgICAgICByZXN1bHQgPSBvdmVybGF5LmNsb25lO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemUgdGhlIGNsYXNzIG5hbWVzIGJldHdlZW4gdGhlIG1haW4gb3ZlcmxheSB0YWJsZSBhbmQgdGhlIHRhYmxlcyBvbiB0aGUgb3RoZXIgb3ZlcmxheXMuXG4gICAqXG4gICAqL1xuICBzeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpIHtcbiAgICBjb25zdCBtYXN0ZXJUYWJsZSA9IHRoaXMud3RUYWJsZS5UQUJMRTtcbiAgICBjb25zdCBvdmVybGF5cyA9IFt0aGlzLnRvcE92ZXJsYXksIHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LCB0aGlzLmJvdHRvbU92ZXJsYXksIHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LCB0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV07XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG92ZXJsYXlzLCBlbGVtID0+IHtcbiAgICAgIGlmICghZWxlbSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lID0gbWFzdGVyVGFibGUuY2xhc3NOYW1lOyAvLyB0b2RvIGRlbWV0ZXJcbiAgICB9KTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gT3ZlcmxheXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9ub2Rlc1Bvb2wgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLy4uL3V0aWxzL25vZGVzUG9vbFwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEJhc2UgcmVuZGVyZXIgY2xhc3MsIGFic3RyYWN0IGxvZ2ljIGZvciBzcGVjaWFsaXplZCByZW5kZXJlcnMuXG4gKlxuICogQGNsYXNzIEJhc2VSZW5kZXJlclxuICovXG5jbGFzcyBCYXNlUmVuZGVyZXIge1xuICBjb25zdHJ1Y3Rvcihub2RlVHlwZSwgcm9vdE5vZGUpIHtcbiAgICAvKipcbiAgICAgKiBGYWN0b3J5IGZvciBuZXdseSBjcmVhdGVkIERPTSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIE5vZGVQb29sIHNob3VsZCBiZSB1c2VkIGZvciBlYWNoIHJlbmRlcmVyLiBGb3IgdGhlIGZpcnN0IHN0YWdlIG9mIHRoZSByZWZhY3RvcmluZ1xuICAgICAqIHByb2Nlc3MsIG9ubHkgc29tZSBvZiB0aGUgcmVuZGVyZXJzIGFyZSBpbXBsZW1lbnRlZCBhIG5ldyBhcHByb2FjaC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtOb2Rlc1Bvb2x8bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJub2Rlc1Bvb2xcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogTm9kZSB0eXBlIHdoaWNoIHRoZSByZW5kZXJlciB3aWxsIG1hbmFnZSB3aGlsZSBidWlsZGluZyB0aGUgdGFibGUgKGVnLiAnVEQnLCAnVFInLCAnVEgnKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibm9kZVR5cGVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBub2RlIHRvIHdoaWNoIG5ld2x5IGNyZWF0ZWQgZWxlbWVudHMgd2lsbCBiZSBpbnNlcnRlZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb290Tm9kZVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgVGFibGUgY2xhc3MsIGEgd3JhcHBlciBmb3IgYWxsIHJlbmRlcmVycyBhbmQgaG9sZGVyIGZvciBwcm9wZXJ0aWVzIGRlc2NyaWJlIHRhYmxlIHN0YXRlLlxuICAgICAqXG4gICAgICogQHR5cGUge1RhYmxlUmVuZGVyZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidGFibGVcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ291bnRlciBvZiBub2RlcyBhbHJlYWR5IGFkZGVkLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyZW5kZXJlZE5vZGVzXCIsIDApO1xuICAgIHRoaXMubm9kZXNQb29sID0gdHlwZW9mIG5vZGVUeXBlID09PSAnc3RyaW5nJyA/IG5ldyBfbm9kZXNQb29sLmRlZmF1bHQobm9kZVR5cGUpIDogbnVsbDtcbiAgICB0aGlzLm5vZGVUeXBlID0gbm9kZVR5cGU7XG4gICAgdGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRhYmxlIHJlbmRlcmVyIGluc3RhbmNlIHRvIHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1RhYmxlUmVuZGVyZXJ9IHRhYmxlIFRoZSBUYWJsZVJlbmRlcmVyIGluc3RhbmNlLlxuICAgKi9cbiAgc2V0VGFibGUodGFibGUpIHtcbiAgICBpZiAodGhpcy5ub2Rlc1Bvb2wpIHtcbiAgICAgIHRoaXMubm9kZXNQb29sLnNldFJvb3REb2N1bWVudCh0YWJsZS5yb290RG9jdW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlID0gdGFibGU7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIG5vZGVzLlxuICAgKi9cbiAgYWRqdXN0KCkge31cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgY29udGVudHMgdG8gdGhlIGVsZW1lbnRzLlxuICAgKi9cbiAgcmVuZGVyKCkge31cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IEJhc2VSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9vcmRlclZpZXcgPSByZXF1aXJlKFwiLi8uLi91dGlscy9vcmRlclZpZXdcIik7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIENlbGwgcmVuZGVyZXIgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIChpbnNlcnRpbmcsIHRyYWNraW5nLCByZW5kZXJpbmcpIFREIGVsZW1lbnRzLlxuICpcbiAqICAgPHRyPiAocm9vdCBub2RlKVxuICogICAgIOKUnCA8dGg+ICAgLS0tIFJvd0hlYWRlcnNSZW5kZXJlclxuICogICAgIOKUnCA8dGQ+ICAgXFxcbiAqICAgICDilJwgPHRkPiAgICBcXFxuICogICAgIOKUnCA8dGQ+ICAgICAtIENlbGxzUmVuZGVyZXJcbiAqICAgICDilJwgPHRkPiAgICAvXG4gKiAgICAg4pSUIDx0ZD4gICAvLlxuICpcbiAqIEBjbGFzcyB7Q2VsbHNSZW5kZXJlcn1cbiAqL1xuY2xhc3MgQ2VsbHNSZW5kZXJlciBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignVEQnKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgT3JkZXJWaWV3IGNsYXNzZXMgY29ubmVjdGVkIHRvIHNwZWNpZmllZCBub2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge1dlYWtNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwib3JkZXJWaWV3c1wiLCBuZXcgV2Vha01hcCgpKTtcbiAgICAvKipcbiAgICAgKiBSb3cgaW5kZXggd2hpY2ggc3BlY2lmaWVzIHRoZSByb3cgcG9zaXRpb24gb2YgdGhlIHByb2Nlc3NlZCBjZWxsLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzb3VyY2VSb3dJbmRleFwiLCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW5zIHRoZSBpbnN0YW5jZSBvZiB0aGUgU2hhcmVkT3JkZXJWaWV3IGNsYXNzIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcgdGhlIG5vZGVzIHRvIHRoZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTFRhYmxlUm93RWxlbWVudH0gcm9vdE5vZGUgVGhlIFRSIGVsZW1lbnQsIHdoaWNoIGlzIHJvb3QgZWxlbWVudCBmb3IgY2VsbHMgKFREKS5cbiAgICogQHJldHVybnMge1NoYXJlZE9yZGVyVmlld31cbiAgICovXG4gIG9idGFpbk9yZGVyVmlldyhyb290Tm9kZSkge1xuICAgIGxldCBvcmRlclZpZXc7XG4gICAgaWYgKHRoaXMub3JkZXJWaWV3cy5oYXMocm9vdE5vZGUpKSB7XG4gICAgICBvcmRlclZpZXcgPSB0aGlzLm9yZGVyVmlld3MuZ2V0KHJvb3ROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3JkZXJWaWV3ID0gbmV3IF9vcmRlclZpZXcuU2hhcmVkT3JkZXJWaWV3KHJvb3ROb2RlLCBzb3VyY2VDb2x1bW5JbmRleCA9PiB0aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCwgc291cmNlQ29sdW1uSW5kZXgpLCB0aGlzLm5vZGVUeXBlKTtcbiAgICAgIHRoaXMub3JkZXJWaWV3cy5zZXQocm9vdE5vZGUsIG9yZGVyVmlldyk7XG4gICAgfVxuICAgIHJldHVybiBvcmRlclZpZXc7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgY2VsbHMuXG4gICAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93c1RvUmVuZGVyLFxuICAgICAgY29sdW1uc1RvUmVuZGVyLFxuICAgICAgcm93cyxcbiAgICAgIHJvd0hlYWRlcnNcbiAgICB9ID0gdGhpcy50YWJsZTtcbiAgICBmb3IgKGxldCB2aXNpYmxlUm93SW5kZXggPSAwOyB2aXNpYmxlUm93SW5kZXggPCByb3dzVG9SZW5kZXI7IHZpc2libGVSb3dJbmRleCsrKSB7XG4gICAgICBjb25zdCBzb3VyY2VSb3dJbmRleCA9IHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSh2aXNpYmxlUm93SW5kZXgpO1xuICAgICAgY29uc3QgVFIgPSByb3dzLmdldFJlbmRlcmVkTm9kZSh2aXNpYmxlUm93SW5kZXgpO1xuICAgICAgdGhpcy5zb3VyY2VSb3dJbmRleCA9IHNvdXJjZVJvd0luZGV4O1xuICAgICAgY29uc3Qgb3JkZXJWaWV3ID0gdGhpcy5vYnRhaW5PcmRlclZpZXcoVFIpO1xuICAgICAgY29uc3Qgcm93SGVhZGVyc1ZpZXcgPSByb3dIZWFkZXJzLm9idGFpbk9yZGVyVmlldyhUUik7XG5cbiAgICAgIC8vIEBUT0RPKHBlcmYtdGlwKTogRm9yIGNlbGxzIG90aGVyIHRoYW4gXCJ2aXN1YWwgMFwiIGdlbmVyYXRpbmcgZGlmZiBsZWFkcy9jb21tYW5kcyBjYW4gYmUgc2tpcHBlZC4gTmV3IG9yZGVyIHZpZXdcbiAgICAgIC8vIHNob3VsZCBzaGFyZSBzdGF0ZSBiZXR3ZWVuIG5leHQgb3JkZXJWaWV3cy5cbiAgICAgIG9yZGVyVmlldy5wcmVwZW5kVmlldyhyb3dIZWFkZXJzVmlldykuc2V0U2l6ZShjb2x1bW5zVG9SZW5kZXIpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0YXJ0KCk7XG4gICAgICBmb3IgKGxldCB2aXNpYmxlQ29sdW1uSW5kZXggPSAwOyB2aXNpYmxlQ29sdW1uSW5kZXggPCBjb2x1bW5zVG9SZW5kZXI7IHZpc2libGVDb2x1bW5JbmRleCsrKSB7XG4gICAgICAgIG9yZGVyVmlldy5yZW5kZXIoKTtcbiAgICAgICAgY29uc3QgVEQgPSBvcmRlclZpZXcuZ2V0Q3VycmVudE5vZGUoKTtcbiAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uSW5kZXggPSB0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UodmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgaWYgKCEoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKFRELCAnaGlkZScpKSB7XG4gICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaGlkZGVuIGNvbHVtbnMgcGx1Z2luXG4gICAgICAgICAgVEQuY2xhc3NOYW1lID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgVEQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICBURC5yZW1vdmVBdHRyaWJ1dGUoJ2RpcicpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgYWNjZXNzaWJpbGl0eS1yZWxhdGVkIGF0dHJpYnV0ZXMgZm9yIHRoZSBjZWxsIHRvIHN0YXJ0IGZyZXNoLlxuICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKShURCwgW25ldyBSZWdFeHAoJ2FyaWEtKC4qKScpLCBuZXcgUmVnRXhwKCdyb2xlJyldKTtcbiAgICAgICAgdGhpcy50YWJsZS5jZWxsUmVuZGVyZXIoc291cmNlUm93SW5kZXgsIHNvdXJjZUNvbHVtbkluZGV4LCBURCk7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSkge1xuICAgICAgICAgIHZhciBfdGhpcyR0YWJsZSRyb3dVdGlscyQsIF90aGlzJHRhYmxlJHJvd1V0aWxzO1xuICAgICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRELCBbLi4uKFRELmhhc0F0dHJpYnV0ZSgncm9sZScpID8gW10gOiBbKDAsIF9hMTF5LkExMVlfR1JJRENFTEwpKCldKSwgKDAsIF9hMTF5LkExMVlfVEFCSU5ERVgpKC0xKSxcbiAgICAgICAgICAvLyBgYXJpYS1jb2xpbmRleGAgaXMgaW5jcmVtZW50ZWQgYnkgYm90aCB0Ym9keSBhbmQgdGhlYWQgcm93cy5cbiAgICAgICAgICAoMCwgX2ExMXkuQTExWV9DT0xJTkRFWCkoc291cmNlQ29sdW1uSW5kZXggKyAoKF90aGlzJHRhYmxlJHJvd1V0aWxzJCA9IChfdGhpcyR0YWJsZSRyb3dVdGlscyA9IHRoaXMudGFibGUucm93VXRpbHMpID09PSBudWxsIHx8IF90aGlzJHRhYmxlJHJvd1V0aWxzID09PSB2b2lkIDAgfHwgKF90aGlzJHRhYmxlJHJvd1V0aWxzID0gX3RoaXMkdGFibGUkcm93VXRpbHMuZGF0YUFjY2Vzc09iamVjdCkgPT09IG51bGwgfHwgX3RoaXMkdGFibGUkcm93VXRpbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHRhYmxlJHJvd1V0aWxzLnJvd0hlYWRlcnMubGVuZ3RoKSAhPT0gbnVsbCAmJiBfdGhpcyR0YWJsZSRyb3dVdGlscyQgIT09IHZvaWQgMCA/IF90aGlzJHRhYmxlJHJvd1V0aWxzJCA6IDApICsgMSldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3JkZXJWaWV3LmVuZCgpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2VsbHNSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4vLi4vLi4vLi4vLi4vaGVscGVycy9jb25zb2xlXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9oZWxwZXJzL3RlbXBsYXRlTGl0ZXJhbFRhZ1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLy4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxubGV0IHBlcmZvcm1hbmNlV2FybmluZ0FwcGVhcmVkID0gZmFsc2U7XG5cbi8qKlxuICogQ29sZ3JvdXAgcmVuZGVyZXIgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIChpbnNlcnRpbmcsIHRyYWNraW5nLCByZW5kZXJpbmcpIENPTCBlbGVtZW50cy5cbiAqXG4gKiAgIDxjb2xncm91cD4gKHJvb3Qgbm9kZSlcbiAqICAgICDilJwgPGNvbD4gICBcXFxuICogICAgIOKUnCA8Y29sPiAgICBcXFxuICogICAgIOKUnCA8Y29sPiAgICAgLSBDb2xHcm91cFJlbmRlcmVyXG4gKiAgICAg4pScIDxjb2w+ICAgIC9cbiAqICAgICDilJQgPGNvbD4gICAvLlxuICpcbiAqIEBjbGFzcyB7Q29sR3JvdXBSZW5kZXJlcn1cbiAqL1xuY2xhc3MgQ29sR3JvdXBSZW5kZXJlciBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICBjb25zdHJ1Y3Rvcihyb290Tm9kZSkge1xuICAgIHN1cGVyKG51bGwsIHJvb3ROb2RlKTsgLy8gTm9kZVBvb2wgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHJlbmRlcmVyIHlldFxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIG51bWJlciBvZiB0aGUgcmVuZGVyZWQgZWxlbWVudHMuXG4gICAqL1xuICBhZGp1c3QoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1uc1RvUmVuZGVyLFxuICAgICAgcm93SGVhZGVyc0NvdW50XG4gICAgfSA9IHRoaXMudGFibGU7XG4gICAgY29uc3QgYWxsQ29sdW1uc1RvUmVuZGVyID0gY29sdW1uc1RvUmVuZGVyICsgcm93SGVhZGVyc0NvdW50O1xuICAgIHdoaWxlICh0aGlzLnJlbmRlcmVkTm9kZXMgPCBhbGxDb2x1bW5zVG9SZW5kZXIpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sJykpO1xuICAgICAgdGhpcy5yZW5kZXJlZE5vZGVzICs9IDE7XG4gICAgfVxuICAgIHdoaWxlICh0aGlzLnJlbmRlcmVkTm9kZXMgPiBhbGxDb2x1bW5zVG9SZW5kZXIpIHtcbiAgICAgIHRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpO1xuICAgICAgdGhpcy5yZW5kZXJlZE5vZGVzIC09IDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGNvbCBncm91cCBlbGVtZW50cy5cbiAgICovXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmFkanVzdCgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbHVtbnNUb1JlbmRlcixcbiAgICAgIHJvd0hlYWRlcnNDb3VudFxuICAgIH0gPSB0aGlzLnRhYmxlO1xuICAgIGlmICghcGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQgJiYgY29sdW1uc1RvUmVuZGVyID4gMTAwMCkge1xuICAgICAgcGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQgPSB0cnVlO1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSBjb2x1bW5zLlxceDIwXG4gICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSB3aWR0aCBhbmQvb3JcXHgyMFxuICAgICAgICB0dXJuaW5nIG9mZiB0aGUgXCJyZW5kZXJBbGxDb2x1bW5zXCIgb3B0aW9uLmApO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBjb2x1bW4gbm9kZXMgZm9yIHJvdyBoZWFkZXJzXG4gICAgZm9yIChsZXQgdmlzaWJsZUNvbHVtbkluZGV4ID0gMDsgdmlzaWJsZUNvbHVtbkluZGV4IDwgcm93SGVhZGVyc0NvdW50OyB2aXNpYmxlQ29sdW1uSW5kZXgrKykge1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uSW5kZXggPSB0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UodmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChzb3VyY2VDb2x1bW5JbmRleCk7XG4gICAgICB0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbdmlzaWJsZUNvbHVtbkluZGV4XS5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgY29sdW1uIG5vZGVzIGZvciBjZWxsc1xuICAgIGZvciAobGV0IHZpc2libGVDb2x1bW5JbmRleCA9IDA7IHZpc2libGVDb2x1bW5JbmRleCA8IGNvbHVtbnNUb1JlbmRlcjsgdmlzaWJsZUNvbHVtbkluZGV4KyspIHtcbiAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbkluZGV4ID0gdGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgdGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW3Zpc2libGVDb2x1bW5JbmRleCArIHJvd0hlYWRlcnNDb3VudF0uc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoZmlyc3RDaGlsZCwgJ3Jvd0hlYWRlcicpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ29sR3JvdXBSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLy4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDb2x1bW4gaGVhZGVycyByZW5kZXJlciByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgKGluc2VydGluZywgdHJhY2tpbmcsIHJlbmRlcmluZykgVFIgYW5kIFRIIGVsZW1lbnRzLlxuICpcbiAqICAgPHRoZWFkPiAocm9vdCBub2RlKVxuICogICAgIOKUnCA8dHI+ICAgXFxcbiAqICAgICDilJwgPHRyPiAgICBcXFxuICogICAgIOKUnCA8dHI+ICAgICAtIENvbHVtbkhlYWRlcnNSZW5kZXJlclxuICogICAgIOKUnCA8dHI+ICAgIC9cbiAqICAgICDilJQgPHRyPiAgIC8uXG4gKlxuICogQGNsYXNzIHtDb2x1bW5IZWFkZXJzUmVuZGVyZXJ9XG4gKi9cbmNsYXNzIENvbHVtbkhlYWRlcnNSZW5kZXJlciBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICBjb25zdHJ1Y3Rvcihyb290Tm9kZSkge1xuICAgIHN1cGVyKG51bGwsIHJvb3ROb2RlKTsgLy8gTm9kZVBvb2wgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIHJlbmRlcmVyIHlldFxuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIG51bWJlciBvZiB0aGUgcmVuZGVyZWQgZWxlbWVudHMuXG4gICAqL1xuICBhZGp1c3QoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sdW1uSGVhZGVyc0NvdW50LFxuICAgICAgcm93SGVhZGVyc0NvdW50XG4gICAgfSA9IHRoaXMudGFibGU7XG4gICAgbGV0IFRSID0gdGhpcy5yb290Tm9kZS5maXJzdENoaWxkO1xuICAgIGlmIChjb2x1bW5IZWFkZXJzQ291bnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uc1RvUmVuZGVyXG4gICAgICB9ID0gdGhpcy50YWJsZTtcbiAgICAgIGNvbnN0IGFsbENvbHVtbnNUb1JlbmRlciA9IGNvbHVtbnNUb1JlbmRlciArIHJvd0hlYWRlcnNDb3VudDtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2x1bW5IZWFkZXJzQ291bnQ7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBUUiA9IHRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tpXTtcbiAgICAgICAgaWYgKCFUUikge1xuICAgICAgICAgIFRSID0gdGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICAgICAgICB0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKFRSKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVkTm9kZXMgPSBUUi5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKHRoaXMucmVuZGVyZWROb2RlcyA8IGFsbENvbHVtbnNUb1JlbmRlcikge1xuICAgICAgICAgIFRSLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJykpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWROb2RlcyArPSAxO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnJlbmRlcmVkTm9kZXMgPiBhbGxDb2x1bW5zVG9SZW5kZXIpIHtcbiAgICAgICAgICBUUi5yZW1vdmVDaGlsZChUUi5sYXN0Q2hpbGQpO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWROb2RlcyAtPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB0aGVhZENoaWxkcmVuTGVuZ3RoID0gdGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGlmICh0aGVhZENoaWxkcmVuTGVuZ3RoID4gY29sdW1uSGVhZGVyc0NvdW50KSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBjb2x1bW5IZWFkZXJzQ291bnQ7IGkgPCB0aGVhZENoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoVFIpIHtcbiAgICAgICgwLCBfZWxlbWVudC5lbXB0eSkoVFIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBUSCBlbGVtZW50cy5cbiAgICovXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2x1bW5IZWFkZXJzQ291bnRcbiAgICB9ID0gdGhpcy50YWJsZTtcbiAgICBpZiAodGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMucm9vdE5vZGUsIFsoMCwgX2ExMXkuQTExWV9ST1dHUk9VUCkoKV0pO1xuICAgIH1cbiAgICBmb3IgKGxldCByb3dIZWFkZXJJbmRleCA9IDA7IHJvd0hlYWRlckluZGV4IDwgY29sdW1uSGVhZGVyc0NvdW50OyByb3dIZWFkZXJJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHVtbkhlYWRlckZ1bmN0aW9ucyxcbiAgICAgICAgY29sdW1uc1RvUmVuZGVyLFxuICAgICAgICByb3dIZWFkZXJzQ291bnRcbiAgICAgIH0gPSB0aGlzLnRhYmxlO1xuICAgICAgY29uc3QgVFIgPSB0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbcm93SGVhZGVySW5kZXhdO1xuICAgICAgaWYgKHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpKSB7XG4gICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRSLCBbKDAsIF9hMTF5LkExMVlfUk9XKSgpLCAoMCwgX2ExMXkuQTExWV9ST1dJTkRFWCkocm93SGVhZGVySW5kZXggKyAxKV0pO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgcmVuZGVyZWRDb2x1bW5JbmRleCA9IC0xICogcm93SGVhZGVyc0NvdW50OyByZW5kZXJlZENvbHVtbkluZGV4IDwgY29sdW1uc1RvUmVuZGVyOyByZW5kZXJlZENvbHVtbkluZGV4ICs9IDEpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbkluZGV4ID0gdGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKHJlbmRlcmVkQ29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCBUSCA9IFRSLmNoaWxkTm9kZXNbcmVuZGVyZWRDb2x1bW5JbmRleCArIHJvd0hlYWRlcnNDb3VudF07XG4gICAgICAgIFRILmNsYXNzTmFtZSA9ICcnO1xuICAgICAgICBUSC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBhY2Nlc3NpYmlsaXR5LXJlbGF0ZWQgYXR0cmlidXRlcyBmb3IgdGhlIGhlYWRlciB0byBzdGFydCBmcmVzaC5cbiAgICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSkoVEgsIFtuZXcgUmVnRXhwKCdhcmlhLSguKiknKSwgbmV3IFJlZ0V4cCgncm9sZScpXSk7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSkge1xuICAgICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRILCBbKDAsIF9hMTF5LkExMVlfQ09MSU5ERVgpKHJlbmRlcmVkQ29sdW1uSW5kZXggKyAxICsgdGhpcy50YWJsZS5yb3dIZWFkZXJzQ291bnQpLCAoMCwgX2ExMXkuQTExWV9UQUJJTkRFWCkoLTEpLCAoMCwgX2ExMXkuQTExWV9DT0xVTU5IRUFERVIpKCksIC4uLihyZW5kZXJlZENvbHVtbkluZGV4ID49IDAgPyBbKDAsIF9hMTF5LkExMVlfU0NPUEVfQ09MKSgpXSA6IFtcbiAgICAgICAgICAvLyBBZGRpbmcgYHJvbGU9cm93YCB0byB0aGUgY29ybmVyIGhlYWRlcnMgdG8gcHJldmVudFxuICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvZGV2LWhhbmRzb250YWJsZS9pc3N1ZXMvMTU3NFxuICAgICAgICAgICgwLCBfYTExeS5BMTFZX1JPVykoKV0pXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29sdW1uSGVhZGVyRnVuY3Rpb25zW3Jvd0hlYWRlckluZGV4XShzb3VyY2VDb2x1bW5JbmRleCwgVEgsIHJvd0hlYWRlckluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IENvbHVtbkhlYWRlcnNSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfcm93SGVhZGVycyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm93SGVhZGVyc1wiKSk7XG5leHBvcnRzLlJvd0hlYWRlcnNSZW5kZXJlciA9IF9yb3dIZWFkZXJzLmRlZmF1bHQ7XG52YXIgX2NvbHVtbkhlYWRlcnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbHVtbkhlYWRlcnNcIikpO1xuZXhwb3J0cy5Db2x1bW5IZWFkZXJzUmVuZGVyZXIgPSBfY29sdW1uSGVhZGVycy5kZWZhdWx0O1xudmFyIF9jb2xHcm91cCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29sR3JvdXBcIikpO1xuZXhwb3J0cy5Db2xHcm91cFJlbmRlcmVyID0gX2NvbEdyb3VwLmRlZmF1bHQ7XG52YXIgX3Jvd3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Jvd3NcIikpO1xuZXhwb3J0cy5Sb3dzUmVuZGVyZXIgPSBfcm93cy5kZWZhdWx0O1xudmFyIF9jZWxscyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2VsbHNcIikpO1xuZXhwb3J0cy5DZWxsc1JlbmRlcmVyID0gX2NlbGxzLmRlZmF1bHQ7XG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90YWJsZVwiKSk7XG5leHBvcnRzLlRhYmxlUmVuZGVyZXIgPSBfdGFibGUuZGVmYXVsdDtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIENvbnRlbnQgcmVuZGVyZXIuXG4gKlxuICogQGNsYXNzIFJlbmRlcmVyXG4gKi9cbmNsYXNzIFJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbGV0IHtcbiAgICAgIFRBQkxFLFxuICAgICAgVEhFQUQsXG4gICAgICBDT0xHUk9VUCxcbiAgICAgIFRCT0RZLFxuICAgICAgcm93VXRpbHMsXG4gICAgICBjb2x1bW5VdGlscyxcbiAgICAgIGNlbGxSZW5kZXJlclxuICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIC8qKlxuICAgICAqIEdlbmVyYWwgcmVuZGVyZXIgY2xhc3MgdXNlZCB0byByZW5kZXIgV2Fsa29udGFibGUgY29udGVudCBvbiBzY3JlZW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7VGFibGVSZW5kZXJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IF90YWJsZS5kZWZhdWx0KFRBQkxFLCB7XG4gICAgICBjZWxsUmVuZGVyZXJcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlcmVycyh7XG4gICAgICByb3dIZWFkZXJzOiBuZXcgX3Jvd0hlYWRlcnMuZGVmYXVsdCgpLFxuICAgICAgY29sdW1uSGVhZGVyczogbmV3IF9jb2x1bW5IZWFkZXJzLmRlZmF1bHQoVEhFQUQpLFxuICAgICAgY29sR3JvdXA6IG5ldyBfY29sR3JvdXAuZGVmYXVsdChDT0xHUk9VUCksXG4gICAgICByb3dzOiBuZXcgX3Jvd3MuZGVmYXVsdChUQk9EWSksXG4gICAgICBjZWxsczogbmV3IF9jZWxscy5kZWZhdWx0KClcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhyb3dVdGlscywgY29sdW1uVXRpbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZmlsdGVyIGNhbGN1bGF0b3JzIGZvciBuZXdseSBjYWxjdWxhdGVkIHJvdyBhbmQgY29sdW1uIHBvc2l0aW9uLiBUaGUgZmlsdGVycyBhcmUgdXNlZCB0byB0cmFuc2Zvcm0gdmlzdWFsXG4gICAqIGluZGV4ZXMgKDAgdG8gTikgdG8gc291cmNlIGluZGV4ZXMgcHJvdmlkZWQgYnkgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1Jvd0ZpbHRlcn0gcm93RmlsdGVyIFRoZSByb3cgZmlsdGVyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0NvbHVtbkZpbHRlcn0gY29sdW1uRmlsdGVyIFRoZSBjb2x1bW4gZmlsdGVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7UmVuZGVyZXJ9XG4gICAqL1xuICBzZXRGaWx0ZXJzKHJvd0ZpbHRlciwgY29sdW1uRmlsdGVyKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRGaWx0ZXJzKHJvd0ZpbHRlciwgY29sdW1uRmlsdGVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2aWV3cG9ydCBzaXplIG9mIHRoZSByZW5kZXJlZCB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3NDb3VudCBBbiBhbW91bnQgb2Ygcm93cyB0byByZW5kZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zQ291bnQgQW4gYW1vdW50IG9mIGNvbHVtbnMgdG8gcmVuZGVyLlxuICAgKiBAcmV0dXJucyB7UmVuZGVyZXJ9XG4gICAqL1xuICBzZXRWaWV3cG9ydFNpemUocm93c0NvdW50LCBjb2x1bW5zQ291bnQpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShyb3dzQ291bnQsIGNvbHVtbnNDb3VudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyByb3cgYW5kIGNvbHVtbiBoZWFkZXIgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uW119IHJvd0hlYWRlcnMgUm93IGhlYWRlciBmdW5jdGlvbnMuIEZhY3RvcmllcyBmb3IgY3JlYXRpbmcgY29udGVudCBmb3Igcm93IGhlYWRlcnMuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb25bXX0gY29sdW1uSGVhZGVycyBDb2x1bW4gaGVhZGVyIGZ1bmN0aW9ucy4gRmFjdG9yaWVzIGZvciBjcmVhdGluZyBjb250ZW50IGZvciBjb2x1bW4gaGVhZGVycy5cbiAgICogQHJldHVybnMge1JlbmRlcmVyfVxuICAgKi9cbiAgc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhyb3dIZWFkZXJzLCBjb2x1bW5IZWFkZXJzKSB7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKHJvd0hlYWRlcnMsIGNvbHVtbkhlYWRlcnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkanVzdHMgdGhlIHRhYmxlIChwcmVwYXJpbmcgZm9yIHJlbmRlcikuXG4gICAqL1xuICBhZGp1c3QoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5hZGp1c3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSB0YWJsZS5cbiAgICovXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcigpO1xuICB9XG59XG5leHBvcnRzLlJlbmRlcmVyID0gUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vcmRlclZpZXcgPSByZXF1aXJlKFwiLi8uLi91dGlscy9vcmRlclZpZXdcIik7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogUm93IGhlYWRlcnMgcmVuZGVyZXIgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIChpbnNlcnRpbmcsIHRyYWNraW5nLCByZW5kZXJpbmcpIFRSIGVsZW1lbnRzIGJlbG9uZ3MgdG8gVFIuXG4gKlxuICogICA8dHI+IChyb290IG5vZGUpXG4gKiAgICAg4pScIDx0aD4gICAtLS0gUm93SGVhZGVyc1JlbmRlcmVyXG4gKiAgICAg4pScIDx0ZD4gICBcXFxuICogICAgIOKUnCA8dGQ+ICAgIFxcXG4gKiAgICAg4pScIDx0ZD4gICAgIC0gQ2VsbHNSZW5kZXJlclxuICogICAgIOKUnCA8dGQ+ICAgIC9cbiAqICAgICDilJQgPHRkPiAgIC8uXG4gKlxuICogQGNsYXNzIHtDZWxsc1JlbmRlcmVyfVxuICovXG5jbGFzcyBSb3dIZWFkZXJzUmVuZGVyZXIgZXh0ZW5kcyBfYmFzZS5kZWZhdWx0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ1RIJyk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIE9yZGVyVmlldyBjbGFzc2VzIGNvbm5lY3RlZCB0byBzcGVjaWZpZWQgbm9kZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtXZWFrTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9yZGVyVmlld3NcIiwgbmV3IFdlYWtNYXAoKSk7XG4gICAgLyoqXG4gICAgICogUm93IGluZGV4IHdoaWNoIHNwZWNpZmllcyB0aGUgcm93IHBvc2l0aW9uIG9mIHRoZSBwcm9jZXNzZWQgcm93IGhlYWRlci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic291cmNlUm93SW5kZXhcIiwgMCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0YWlucyB0aGUgaW5zdGFuY2Ugb2YgdGhlIFNoYXJlZE9yZGVyVmlldyBjbGFzcyB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHRoZSBub2RlcyB0byB0aGUgcm9vdCBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZVJvd0VsZW1lbnR9IHJvb3ROb2RlIFRoZSBUUiBlbGVtZW50LCB3aGljaCBpcyByb290IGVsZW1lbnQgZm9yIHJvdyBoZWFkZXJzIChUSCkuXG4gICAqIEByZXR1cm5zIHtTaGFyZWRPcmRlclZpZXd9XG4gICAqL1xuICBvYnRhaW5PcmRlclZpZXcocm9vdE5vZGUpIHtcbiAgICBsZXQgb3JkZXJWaWV3O1xuICAgIGlmICh0aGlzLm9yZGVyVmlld3MuaGFzKHJvb3ROb2RlKSkge1xuICAgICAgb3JkZXJWaWV3ID0gdGhpcy5vcmRlclZpZXdzLmdldChyb290Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZGVyVmlldyA9IG5ldyBfb3JkZXJWaWV3LlNoYXJlZE9yZGVyVmlldyhyb290Tm9kZSwgc291cmNlQ29sdW1uSW5kZXggPT4gdGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsIHNvdXJjZUNvbHVtbkluZGV4KSwgdGhpcy5ub2RlVHlwZSk7XG4gICAgICB0aGlzLm9yZGVyVmlld3Muc2V0KHJvb3ROb2RlLCBvcmRlclZpZXcpO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXJWaWV3O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGNlbGxzLlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd3NUb1JlbmRlcixcbiAgICAgIHJvd0hlYWRlckZ1bmN0aW9ucyxcbiAgICAgIHJvd0hlYWRlcnNDb3VudCxcbiAgICAgIHJvd3MsXG4gICAgICBjZWxsc1xuICAgIH0gPSB0aGlzLnRhYmxlO1xuICAgIGZvciAobGV0IHZpc2libGVSb3dJbmRleCA9IDA7IHZpc2libGVSb3dJbmRleCA8IHJvd3NUb1JlbmRlcjsgdmlzaWJsZVJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IHNvdXJjZVJvd0luZGV4ID0gdGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHZpc2libGVSb3dJbmRleCk7XG4gICAgICBjb25zdCBUUiA9IHJvd3MuZ2V0UmVuZGVyZWROb2RlKHZpc2libGVSb3dJbmRleCk7XG4gICAgICB0aGlzLnNvdXJjZVJvd0luZGV4ID0gc291cmNlUm93SW5kZXg7XG4gICAgICBjb25zdCBvcmRlclZpZXcgPSB0aGlzLm9idGFpbk9yZGVyVmlldyhUUik7XG4gICAgICBjb25zdCBjZWxsc1ZpZXcgPSBjZWxscy5vYnRhaW5PcmRlclZpZXcoVFIpO1xuICAgICAgb3JkZXJWaWV3LmFwcGVuZFZpZXcoY2VsbHNWaWV3KS5zZXRTaXplKHJvd0hlYWRlcnNDb3VudCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtcbiAgICAgIGZvciAobGV0IHZpc2libGVDb2x1bW5JbmRleCA9IDA7IHZpc2libGVDb2x1bW5JbmRleCA8IHJvd0hlYWRlcnNDb3VudDsgdmlzaWJsZUNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgb3JkZXJWaWV3LnJlbmRlcigpO1xuICAgICAgICBjb25zdCBUSCA9IG9yZGVyVmlldy5nZXRDdXJyZW50Tm9kZSgpO1xuICAgICAgICBUSC5jbGFzc05hbWUgPSAnJztcbiAgICAgICAgVEgucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuXG4gICAgICAgIC8vIFJlbW92ZSBhbGwgYWNjZXNzaWJpbGl0eS1yZWxhdGVkIGF0dHJpYnV0ZXMgZm9yIHRoZSBoZWFkZXIgdG8gc3RhcnQgZnJlc2guXG4gICAgICAgICgwLCBfZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUpKFRILCBbbmV3IFJlZ0V4cCgnYXJpYS0oLiopJyksIG5ldyBSZWdFeHAoJ3JvbGUnKV0pO1xuICAgICAgICBpZiAodGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkpIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShUSCwgWygwLCBfYTExeS5BMTFZX1JPV0hFQURFUikoKSwgKDAsIF9hMTF5LkExMVlfU0NPUEVfUk9XKSgpLCAoMCwgX2ExMXkuQTExWV9DT0xJTkRFWCkodmlzaWJsZUNvbHVtbkluZGV4ICsgMSksICgwLCBfYTExeS5BMTFZX1RBQklOREVYKSgtMSldKTtcbiAgICAgICAgfVxuICAgICAgICByb3dIZWFkZXJGdW5jdGlvbnNbdmlzaWJsZUNvbHVtbkluZGV4XShzb3VyY2VSb3dJbmRleCwgVEgsIHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICB9XG4gICAgICBvcmRlclZpZXcuZW5kKCk7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSb3dIZWFkZXJzUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9iYXNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9fYmFzZVwiKSk7XG52YXIgX2NvbnNvbGUgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9oZWxwZXJzL2NvbnNvbGVcIik7XG52YXIgX3RlbXBsYXRlTGl0ZXJhbFRhZyA9IHJlcXVpcmUoXCIuLy4uLy4uLy4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9vcmRlclZpZXcgPSByZXF1aXJlKFwiLi8uLi91dGlscy9vcmRlclZpZXdcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5sZXQgcGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQgPSBmYWxzZTtcblxuLyoqXG4gKiBSb3dzIHJlbmRlcmVyIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyAoaW5zZXJ0aW5nLCB0cmFja2luZywgcmVuZGVyaW5nKSBUUiBlbGVtZW50cyBiZWxvbmdzIHRvIFRCT0RZLlxuICpcbiAqICAgPHRib2R5PiAocm9vdCBub2RlKVxuICogICAgIOKUnCA8dHI+ICAgXFxcbiAqICAgICDilJwgPHRyPiAgICBcXFxuICogICAgIOKUnCA8dHI+ICAgICAtIFJvd3NSZW5kZXJlclxuICogICAgIOKUnCA8dHI+ICAgIC9cbiAqICAgICDilJQgPHRyPiAgIC8uXG4gKlxuICogQGNsYXNzIHtSb3dzUmVuZGVyZXJ9XG4gKi9cbmNsYXNzIFJvd3NSZW5kZXJlciBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICBjb25zdHJ1Y3Rvcihyb290Tm9kZSkge1xuICAgIHN1cGVyKCdUUicsIHJvb3ROb2RlKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgT3JkZXJWaWV3IGNsYXNzZXMgY29ubmVjdGVkIHRvIHNwZWNpZmllZCBub2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge1dlYWtNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwib3JkZXJWaWV3XCIsIHZvaWQgMCk7XG4gICAgdGhpcy5vcmRlclZpZXcgPSBuZXcgX29yZGVyVmlldy5PcmRlclZpZXcocm9vdE5vZGUsIHNvdXJjZVJvd0luZGV4ID0+IHRoaXMubm9kZXNQb29sLm9idGFpbihzb3VyY2VSb3dJbmRleCksIHRoaXMubm9kZVR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudGx5IHJlbmRlcmVkIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2aXN1YWxJbmRleCBWaXN1YWwgaW5kZXggb2YgdGhlIHJlbmRlcmVkIG5vZGUgKGl0IGFsd2F5cyBnb2VhcyBmcm9tIDAgdG8gTikuXG4gICAqIEByZXR1cm5zIHtIVE1MVGFibGVSb3dFbGVtZW50fVxuICAgKi9cbiAgZ2V0UmVuZGVyZWROb2RlKHZpc3VhbEluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUodmlzdWFsSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGNlbGxzLlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd3NUb1JlbmRlclxuICAgIH0gPSB0aGlzLnRhYmxlO1xuICAgIGlmICghcGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQgJiYgcm93c1RvUmVuZGVyID4gMTAwMCkge1xuICAgICAgcGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQgPSB0cnVlO1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLlxceDIwXG4gICAgICAgIENvbnNpZGVyIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBieSBzcGVjaWZ5aW5nIHRoZSB0YWJsZSBoZWlnaHQgYW5kL29yXFx4MjBcbiAgICAgICAgdHVybmluZyBvZmYgdGhlIFwicmVuZGVyQWxsUm93c1wiIG9wdGlvbi5gKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKSh0aGlzLnJvb3ROb2RlLCBbKDAsIF9hMTF5LkExMVlfUk9XR1JPVVApKCldKTtcbiAgICB9XG4gICAgdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShyb3dzVG9SZW5kZXIpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoMCkpLnN0YXJ0KCk7XG4gICAgZm9yIChsZXQgdmlzaWJsZVJvd0luZGV4ID0gMDsgdmlzaWJsZVJvd0luZGV4IDwgcm93c1RvUmVuZGVyOyB2aXNpYmxlUm93SW5kZXgrKykge1xuICAgICAgdGhpcy5vcmRlclZpZXcucmVuZGVyKCk7XG4gICAgICBjb25zdCBUUiA9IHRoaXMub3JkZXJWaWV3LmdldEN1cnJlbnROb2RlKCk7XG4gICAgICBjb25zdCBzb3VyY2VSb3dJbmRleCA9IHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSh2aXNpYmxlUm93SW5kZXgpO1xuICAgICAgaWYgKHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpKSB7XG4gICAgICAgIHZhciBfdGhpcyR0YWJsZSRyb3dVdGlscyQsIF90aGlzJHRhYmxlJHJvd1V0aWxzO1xuICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShUUiwgWygwLCBfYTExeS5BMTFZX1JPVykoKSxcbiAgICAgICAgLy8gYGFyaWEtcm93aW5kZXhgIGlzIGluY3JlbWVudGVkIGJ5IGJvdGggdGJvZHkgYW5kIHRoZWFkIHJvd3MuXG4gICAgICAgICgwLCBfYTExeS5BMTFZX1JPV0lOREVYKShzb3VyY2VSb3dJbmRleCArICgoX3RoaXMkdGFibGUkcm93VXRpbHMkID0gKF90aGlzJHRhYmxlJHJvd1V0aWxzID0gdGhpcy50YWJsZS5yb3dVdGlscykgPT09IG51bGwgfHwgX3RoaXMkdGFibGUkcm93VXRpbHMgPT09IHZvaWQgMCB8fCAoX3RoaXMkdGFibGUkcm93VXRpbHMgPSBfdGhpcyR0YWJsZSRyb3dVdGlscy5kYXRhQWNjZXNzT2JqZWN0KSA9PT0gbnVsbCB8fCBfdGhpcyR0YWJsZSRyb3dVdGlscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkdGFibGUkcm93VXRpbHMuY29sdW1uSGVhZGVycy5sZW5ndGgpICE9PSBudWxsICYmIF90aGlzJHRhYmxlJHJvd1V0aWxzJCAhPT0gdm9pZCAwID8gX3RoaXMkdGFibGUkcm93VXRpbHMkIDogMCkgKyAxKV0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9yZGVyVmlldy5lbmQoKTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUm93c1JlbmRlcmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBUYWJsZVJlbmRlcmVyIGNsYXNzIGNvbGxlY3RzIGFsbCByZW5kZXJlcnMgYW5kIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciB0YWJsZSBjcmVhdGlvbi4gSXQnc1xuICogcmVzcG9uc2libGUgZm9yIGFkanVzdGluZyBhbmQgcmVuZGVyaW5nIGVhY2ggcmVuZGVyZXIuXG4gKlxuICogQmVsb3cgaXMgYSBkaWFncmFtIG9mIHRoZSByZW5kZXJlcnMgdG9nZXRoZXIgd2l0aCBhbiBpbmRpY2F0aW9uIG9mIHdoYXQgdGhleSBhcmUgcmVzcG9uaXNibGUgZm9yLlxuICogICA8dGFibGU+XG4gKiAgICAgPGNvbGdyb3VwPiAgXFwgKHJvb3Qgbm9kZSlcbiAqICAgICAgIDxjb2w+ICAgICAgXFxcbiAqICAgICAgIDxjb2w+ICAgICAgIFxcX19fIENvbEdyb3VwUmVuZGVyZXJcbiAqICAgICAgIDxjb2w+ICAgICAgIC9cbiAqICAgICAgIDxjb2w+ICAgICAgL1xuICogICAgIDwvY29sZ3JvdXA+IC9cbiAqICAgICA8dGhlYWQ+ICAgICBcXCAocm9vdCBub2RlKVxuICogICAgICAgPHRyPiAgICAgICBcXFxuICogICAgICAgICA8dGg+ICAgICAgXFxcbiAqICAgICAgICAgPHRoPiAgICAgICBcXF9fX18gQ29sdW1uSGVhZGVyc1JlbmRlcmVyXG4gKiAgICAgICAgIDx0aD4gICAgICAgL1xuICogICAgICAgICA8dGg+ICAgICAgL1xuICogICAgICAgPC90cj4gICAgICAvXG4gKiAgICAgPC90aGVhZD4gICAgL1xuICogICAgIDx0Ym9keT4gICDCr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr8Kvwq/Cr1xcIChyb290IG5vZGUpXG4gKiAgICAgICA8dHI+ICAgKHJvb3Qgbm9kZSkgICAgICAgICAgXFxcbiAqICAgICAgICAgPHRoPiAgLS0tIFJvd0hlYWRlcnNSZW5kZXJlclxuICogICAgICAgICA8dGQ+ICBcXCAgICAgICAgICAgICAgICAgICAgIFxcXG4gKiAgICAgICAgIDx0ZD4gICAtLSBDZWxsc1JlbmRlcmVyICAgICAgXFxcbiAqICAgICAgICAgPHRkPiAgLyAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAqICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gKiAgICAgICA8dHI+ICAgKHJvb3Qgbm9kZSkgICAgICAgICAgICAgICAgXFxcbiAqICAgICAgICAgPHRoPiAgLS0tIFJvd0hlYWRlcnNSZW5kZXJlciAgICAgXFxcbiAqICAgICAgICAgPHRkPiAgXFwgICAgICAgICAgICAgICAgICAgICAgICAgICBcXF9fXyBSb3dzUmVuZGVyZXJcbiAqICAgICAgICAgPHRkPiAgIC0tIENlbGxzUmVuZGVyZXIgICAgICAgICAgIC9cbiAqICAgICAgICAgPHRkPiAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgL1xuICogICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9cbiAqICAgICAgIDx0cj4gICAocm9vdCBub2RlKSAgICAgICAgICAgICAgIC9cbiAqICAgICAgICAgPHRoPiAgLS0tIFJvd0hlYWRlcnNSZW5kZXJlciAgL1xuICogICAgICAgICA8dGQ+ICBcXCAgICAgICAgICAgICAgICAgICAgICAvXG4gKiAgICAgICAgIDx0ZD4gICAtLSBDZWxsc1JlbmRlcmVyICAgICAvXG4gKiAgICAgICAgIDx0ZD4gIC8gICAgICAgICAgICAgICAgICAgIC9cbiAqICAgICAgIDwvdHI+ICAgICAgICAgICAgICAgICAgICAgICAvXG4gKiAgICAgPC90Ym9keT4gIF9fX19fX19fX19fX19fX19fX18vXG4gKiAgIDwvdGFibGU+LlxuICpcbiAqIEBjbGFzcyB7Um93c1JlbmRlcmVyfVxuICovXG5jbGFzcyBUYWJsZVJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3Iocm9vdE5vZGUpIHtcbiAgICBsZXQge1xuICAgICAgY2VsbFJlbmRlcmVyXG4gICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgLyoqXG4gICAgICogVGFibGUgZWxlbWVudCB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBjaGlsZHJlbiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0hUTUxUYWJsZUVsZW1lbnR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm9vdE5vZGVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBEb2N1bWVudCBvd25lciBvZiB0aGUgcm9vdCBub2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge0hUTUxEb2N1bWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb290RG9jdW1lbnRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZW5kZXJlciBjbGFzcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHJvdyBoZWFkZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge1Jvd3NSZW5kZXJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dIZWFkZXJzXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFJlbmRlcmVyIGNsYXNzIHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcgY29sdW1uIGhlYWRlcnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29sdW1uSGVhZGVyc1JlbmRlcmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbHVtbkhlYWRlcnNcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUmVuZGVyZXIgY2xhc3MgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyBjb2wgaW4gY29sZ3JvdXAuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29sR3JvdXBSZW5kZXJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2xHcm91cFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBSZW5kZXJlciBjbGFzcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIHJvd3MgaW4gdGJvZHkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Um93c1JlbmRlcmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd3NcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUmVuZGVyZXIgY2xhc3MgcmVzcG9uc2libGUgZm9yIHJlbmRlcmluZyBjZWxscy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDZWxsc1JlbmRlcmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNlbGxzXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFJvdyBmaWx0ZXIgd2hpY2ggY29udGFpbnMgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCByb3cgaW5kZXggdHJhbnNmb3JtYXRpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Um93RmlsdGVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd0ZpbHRlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBDb2x1bW4gZmlsdGVyIHdoaWNoIGNvbnRhaW5zIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgY29sdW1uIGluZGV4IHRyYW5zZm9ybWF0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge0NvbHVtbkZpbHRlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2x1bW5GaWx0ZXJcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUm93IHV0aWxzIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgc2l6ZXMgb2YgdGhlIHJvd3MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Um93VXRpbHN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm93VXRpbHNcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ29sdW1uIHV0aWxzIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgc2l6ZXMgb2YgdGhlIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29sdW1uVXRpbHN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uVXRpbHNcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGhvdyBtdWNoIHJvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIHRvIGZpbGwgd2hvbGUgdGFibGUgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd3NUb1JlbmRlclwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgaG93IG11Y2ggY29sdW1ucyBzaG91bGQgYmUgcmVuZGVyZWQgdG8gZmlsbCB3aG9sZSB0YWJsZSB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uc1RvUmVuZGVyXCIsIDApO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGZ1bmN0aW9ucyB0byBiZSB1c2VkIGFzIGEgY29udGVudCBmYWN0b3J5IHRvIHJvdyBoZWFkZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge0Z1bmN0aW9uW119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm93SGVhZGVyRnVuY3Rpb25zXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBDb3VudCBvZiB0aGUgZnVuY3Rpb24gdXNlZCB0byByZW5kZXIgcm93IGhlYWRlcnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd0hlYWRlcnNDb3VudFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBmdW5jdGlvbnMgdG8gYmUgdXNlZCBhcyBhIGNvbnRlbnQgZmFjdG9yeSB0byBjb2x1bW4gaGVhZGVycy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbltdfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbHVtbkhlYWRlckZ1bmN0aW9uc1wiLCBbXSk7XG4gICAgLyoqXG4gICAgICogQ291bnQgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGNvbHVtbiBoZWFkZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2x1bW5IZWFkZXJzQ291bnRcIiwgMCk7XG4gICAgLyoqXG4gICAgICogQ2VsbCByZW5kZXJlciB1c2VkIHRvIHJlbmRlciBjZWxscyBjb250ZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNlbGxSZW5kZXJlclwiLCB2b2lkIDApO1xuICAgIHRoaXMucm9vdE5vZGUgPSByb290Tm9kZTtcbiAgICB0aGlzLnJvb3REb2N1bWVudCA9IHRoaXMucm9vdE5vZGUub3duZXJEb2N1bWVudDtcbiAgICB0aGlzLmNlbGxSZW5kZXJlciA9IGNlbGxSZW5kZXJlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcm93IGFuZCBjb2x1bW4gdXRpbCBjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge1Jvd1V0aWxzfSByb3dVdGlscyBSb3dVdGlscyBpbnN0YW5jZSB3aGljaCBwcm92aWRlcyB1c2VmdWwgbWV0aG9kcyByZWxhdGVkIHRvIHJvdyBzaXplcy5cbiAgICogQHBhcmFtIHtDb2x1bW5VdGlsc30gY29sdW1uVXRpbHMgQ29sdW1uVXRpbHMgaW5zdGFuY2Ugd2hpY2ggcHJvdmlkZXMgdXNlZnVsIG1ldGhvZHMgcmVsYXRlZCB0byByb3cgc2l6ZXMuXG4gICAqL1xuICBzZXRBeGlzVXRpbHMocm93VXRpbHMsIGNvbHVtblV0aWxzKSB7XG4gICAgdGhpcy5yb3dVdGlscyA9IHJvd1V0aWxzO1xuICAgIHRoaXMuY29sdW1uVXRpbHMgPSBjb2x1bW5VdGlscztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHZpZXdwb3J0IHNpemUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93c0NvdW50IEFuIGFtb3VudCBvZiByb3dzIHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnNDb3VudCBBbiBhbW91bnQgb2YgY29sdW1ucyB0byByZW5kZXIuXG4gICAqL1xuICBzZXRWaWV3cG9ydFNpemUocm93c0NvdW50LCBjb2x1bW5zQ291bnQpIHtcbiAgICB0aGlzLnJvd3NUb1JlbmRlciA9IHJvd3NDb3VudDtcbiAgICB0aGlzLmNvbHVtbnNUb1JlbmRlciA9IGNvbHVtbnNDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHJvdyBhbmQgY29sdW1uIGZpbHRlciBpbnN0YW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Um93RmlsdGVyfSByb3dGaWx0ZXIgUm93IGZpbHRlciBpbnN0YW5jZSB3aGljaCBjb250YWlucyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGFib3V0IHJvdyBpbmRleCB0cmFuc2Zvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtDb2x1bW5GaWx0ZXJ9IGNvbHVtbkZpbHRlciBDb2x1bW4gZmlsdGVyIGluc3RhbmNlIHdoaWNoIGNvbnRhaW5zIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb24gYWJvdXQgcm93XG4gICAqIGluZGV4IHRyYW5zZm9ybWF0aW9uLlxuICAgKi9cbiAgc2V0RmlsdGVycyhyb3dGaWx0ZXIsIGNvbHVtbkZpbHRlcikge1xuICAgIHRoaXMucm93RmlsdGVyID0gcm93RmlsdGVyO1xuICAgIHRoaXMuY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcm93IGFuZCBjb2x1bW4gaGVhZGVyIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbltdfSByb3dIZWFkZXJzIFJvdyBoZWFkZXIgZnVuY3Rpb25zLiBGYWN0b3JpZXMgZm9yIGNyZWF0aW5nIGNvbnRlbnQgZm9yIHJvdyBoZWFkZXJzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uW119IGNvbHVtbkhlYWRlcnMgQ29sdW1uIGhlYWRlciBmdW5jdGlvbnMuIEZhY3RvcmllcyBmb3IgY3JlYXRpbmcgY29udGVudCBmb3IgY29sdW1uIGhlYWRlcnMuXG4gICAqL1xuICBzZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKHJvd0hlYWRlcnMsIGNvbHVtbkhlYWRlcnMpIHtcbiAgICB0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucyA9IHJvd0hlYWRlcnM7XG4gICAgdGhpcy5yb3dIZWFkZXJzQ291bnQgPSByb3dIZWFkZXJzLmxlbmd0aDtcbiAgICB0aGlzLmNvbHVtbkhlYWRlckZ1bmN0aW9ucyA9IGNvbHVtbkhlYWRlcnM7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzQ291bnQgPSBjb2x1bW5IZWFkZXJzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRhYmxlIHJlbmRlcmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtyZW5kZXJlcnN9IHJlbmRlcmVycyBUaGUgcmVuZGVyZXIgdW5pdHMuXG4gICAqIEBwYXJhbSB7Um93SGVhZGVyc1JlbmRlcmVyfSByZW5kZXJlcnMucm93SGVhZGVycyBSb3cgaGVhZGVycyByZW5kZXJlci5cbiAgICogQHBhcmFtIHtDb2x1bW5IZWFkZXJzUmVuZGVyZXJ9IHJlbmRlcmVycy5jb2x1bW5IZWFkZXJzIENvbHVtbiBoZWFkZXJzIHJlbmRlcmVyLlxuICAgKiBAcGFyYW0ge0NvbEdyb3VwUmVuZGVyZXJ9IHJlbmRlcmVycy5jb2xHcm91cCBDb2wgZ3JvdXAgcmVuZGVyZXIuXG4gICAqIEBwYXJhbSB7Um93c1JlbmRlcmVyfSByZW5kZXJlcnMucm93cyBSb3dzIHJlbmRlcmVyLlxuICAgKiBAcGFyYW0ge0NlbGxzUmVuZGVyZXJ9IHJlbmRlcmVycy5jZWxscyBDZWxscyByZW5kZXJlci5cbiAgICovXG4gIHNldFJlbmRlcmVycygpIHtcbiAgICBsZXQge1xuICAgICAgcm93SGVhZGVycyxcbiAgICAgIGNvbHVtbkhlYWRlcnMsXG4gICAgICBjb2xHcm91cCxcbiAgICAgIHJvd3MsXG4gICAgICBjZWxsc1xuICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgIHJvd0hlYWRlcnMuc2V0VGFibGUodGhpcyk7XG4gICAgY29sdW1uSGVhZGVycy5zZXRUYWJsZSh0aGlzKTtcbiAgICBjb2xHcm91cC5zZXRUYWJsZSh0aGlzKTtcbiAgICByb3dzLnNldFRhYmxlKHRoaXMpO1xuICAgIGNlbGxzLnNldFRhYmxlKHRoaXMpO1xuICAgIHRoaXMucm93SGVhZGVycyA9IHJvd0hlYWRlcnM7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gY29sdW1uSGVhZGVycztcbiAgICB0aGlzLmNvbEdyb3VwID0gY29sR3JvdXA7XG4gICAgdGhpcy5yb3dzID0gcm93cztcbiAgICB0aGlzLmNlbGxzID0gY2VsbHM7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB2aXN1YWwvcmVuZGVyZWQgcm93IGluZGV4IHRvIHNvdXJjZSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IFJlbmRlcmVkIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgcmVuZGVyZWRSb3dUb1NvdXJjZShyb3dJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJvd0luZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHZpc3VhbC9yZW5kZXJlZCBjb2x1bW4gaW5kZXggdG8gc291cmNlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggUmVuZGVyZWQgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICByZW5kZXJlZENvbHVtblRvU291cmNlKGNvbHVtbkluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBhY2Nlc3NpYmlsaXR5LXJlbGF0ZWQgQVJJQSB0YWdzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgdGFibGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQXJpYUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucm93VXRpbHMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdhcmlhVGFncycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29sR3JvdXAuYWRqdXN0KCk7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzLmFkanVzdCgpO1xuICAgIHRoaXMucm93cy5hZGp1c3QoKTtcbiAgICB0aGlzLnJvd0hlYWRlcnMuYWRqdXN0KCk7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzLnJlbmRlcigpO1xuICAgIHRoaXMucm93cy5yZW5kZXIoKTtcbiAgICB0aGlzLnJvd0hlYWRlcnMucmVuZGVyKCk7XG4gICAgdGhpcy5jZWxscy5yZW5kZXIoKTtcblxuICAgIC8vIEFmdGVyIHRoZSBjZWxscyBhcmUgcmVuZGVyZWQgY2FsY3VsYXRlIGNvbHVtbnMgd2lkdGggKG9yIGNvbHVtbnMgc3RyZXRjaCB3aWR0aCkgdG8gcHJlcGFyZSBwcm9wZXIgdmFsdWVzXG4gICAgLy8gZm9yIGNvbEdyb3VwIHJlbmRlcmVyICh3aGljaCByZW5kZXJzIENPTCBlbGVtZW50cykuXG4gICAgdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKTtcbiAgICB0aGlzLmNvbEdyb3VwLnJlbmRlcigpO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd3NUb1JlbmRlcixcbiAgICAgIHJvd3NcbiAgICB9ID0gdGhpcztcblxuICAgIC8vIEZpeCBmb3IgbXVsdGktbGluZSBjb250ZW50IGFuZCBmb3Igc3VwcG9ydGluZyBgcm93SGVpZ2h0c2Agb3B0aW9uLlxuICAgIGZvciAobGV0IHZpc2libGVSb3dJbmRleCA9IDA7IHZpc2libGVSb3dJbmRleCA8IHJvd3NUb1JlbmRlcjsgdmlzaWJsZVJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IFRSID0gcm93cy5nZXRSZW5kZXJlZE5vZGUodmlzaWJsZVJvd0luZGV4KTtcbiAgICAgIGlmIChUUi5maXJzdENoaWxkKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVJvd0luZGV4ID0gdGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKHZpc2libGVSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KHNvdXJjZVJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvd0hlaWdodCkge1xuICAgICAgICAgIC8vIERlY3JlYXNlIGhlaWdodC4gMSBwaXhlbCB3aWxsIGJlIFwicmVwbGFjZWRcIiBieSAxcHggYm9yZGVyIHRvcFxuICAgICAgICAgIFRSLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0ID0gYCR7cm93SGVpZ2h0IC0gMX1weGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgVFIuZmlyc3RDaGlsZC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gVGFibGVSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAY2xhc3MgU2Nyb2xsXG4gKi9cbnZhciBfU2Nyb2xsX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBTY3JvbGwge1xuICAvKipcbiAgICogQHBhcmFtIHtTY3JvbGxEYW99IGRhdGFBY2Nlc3NPYmplY3QgVGhhIGRhdGEgYWNjZXNzIG9iamVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGFBY2Nlc3NPYmplY3QpIHtcbiAgICAvKipcbiAgICAgKiBHZXQgbGFzdCB2aXNpYmxlIGNvbHVtbiBiYXNlZCBvbiB2aXJ0dWFsIGRvbSBhbmQgaG93IHRhYmxlIGlzIHZpc2libGUgaW4gYnJvd3NlciB3aW5kb3cgdmlld3BvcnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGFzdENvbHVtbkluZGV4IFRoZSBsYXN0IHZpc2libGUgY29sdW1uIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9TY3JvbGxfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGFjY2VzcyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQHR5cGUge1Njcm9sbERhb31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhQWNjZXNzT2JqZWN0XCIsIHZvaWQgMCk7XG4gICAgdGhpcy5kYXRhQWNjZXNzT2JqZWN0ID0gZGF0YUFjY2Vzc09iamVjdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHZpZXdwb3J0IHRvIGEgY2VsbC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVGhlIGNlbGwgY29vcmRpbmF0ZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb1RvcF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSB0b3Agb2YgdGhlIHRhYmxlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9SaWdodF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSByaWdodCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0JvdHRvbV0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9MZWZ0XSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIGxlZnQgb2YgdGhlIHRhYmxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjcm9sbFZpZXdwb3J0KGNvb3Jkcywgc25hcFRvVG9wLCBzbmFwVG9SaWdodCwgc25hcFRvQm90dG9tLCBzbmFwVG9MZWZ0KSB7XG4gICAgY29uc3Qgc2Nyb2xsZWRIb3Jpem9udGFsbHkgPSB0aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGNvb3Jkcy5jb2wsIHNuYXBUb1JpZ2h0LCBzbmFwVG9MZWZ0KTtcbiAgICBjb25zdCBzY3JvbGxlZFZlcnRpY2FsbHkgPSB0aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShjb29yZHMucm93LCBzbmFwVG9Ub3AsIHNuYXBUb0JvdHRvbSk7XG4gICAgcmV0dXJuIHNjcm9sbGVkSG9yaXpvbnRhbGx5IHx8IHNjcm9sbGVkVmVydGljYWxseTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTY3JvbGxzIHZpZXdwb3J0IHRvIGEgY29sdW1uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb1JpZ2h0XSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIHJpZ2h0IG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvTGVmdF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSBsZWZ0IG9mIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShjb2x1bW4sIHNuYXBUb1JpZ2h0LCBzbmFwVG9MZWZ0KSB7XG4gICAgY29uc3Qge1xuICAgICAgZHJhd24sXG4gICAgICB0b3RhbENvbHVtbnNcbiAgICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuXG4gICAgLy8gZG8gbm90IHNjcm9sbCB0aGUgdmlld3BvcnQgd2hlbiB0aGUgY29sdW1uIHBvaW50cyB0byBhIHJhbmdlIG91dHNpZGUgb2YgdGhlIGRhdGFzZXRcbiAgICBpZiAoIWRyYXduIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbikgfHwgY29sdW1uIDwgMCB8fCBjb2x1bW4gPiB0b3RhbENvbHVtbnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXV0b1NuYXBwaW5nID0gc25hcFRvUmlnaHQgPT09IHVuZGVmaW5lZCAmJiBzbmFwVG9MZWZ0ID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qge1xuICAgICAgZml4ZWRDb2x1bW5zU3RhcnQsXG4gICAgICBpbmxpbmVTdGFydE92ZXJsYXlcbiAgICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuXG4gICAgLy8gZm9yIGF1dG8tc25hcHBpbmcgKGJvdGggc25hcCogYXJndW1lbnRzIGFyZSB1bmRlZmluZWQpIGRvIG5vdCBzY3JvbGwgdGhlIHZpZXdwb3J0XG4gICAgLy8gd2hlbiB0aGUgY29sdW1ucyBwb2ludHMgdG8gdGhlIG92ZXJsYXlzXG4gICAgaWYgKGF1dG9TbmFwcGluZyAmJiBjb2x1bW4gPCBmaXhlZENvbHVtbnNTdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb2x1bW4gPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5JywgY29sdW1uKTtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoY29sdW1uKSB8fCBjb2x1bW4gPCAwIHx8IGNvbHVtbiA+IHRvdGFsQ29sdW1ucykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdENvbHVtbiA9IHRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7XG4gICAgY29uc3QgbGFzdENvbHVtbiA9IHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gICAgaWYgKGF1dG9TbmFwcGluZyAmJiAoY29sdW1uIDwgZmlyc3RDb2x1bW4gfHwgY29sdW1uID4gbGFzdENvbHVtbikgfHwgIWF1dG9TbmFwcGluZykge1xuICAgICAgLy8gaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZ1bGx5IHZpc2libGUgY29sdW1uIGRldGVybWluZSB0aGUgc25hcHBpbmcgZGlyZWN0aW9uIGJhc2VkIG9uXG4gICAgICAvLyB0aGF0IGNvbHVtbnMgb3IgYnkgc25hcFRvUmlnaHQvc25hcFRvTGVmdCBmbGFncywgaWYgcHJvdmlkZWQuXG4gICAgICByZXN1bHQgPSBpbmxpbmVTdGFydE92ZXJsYXkuc2Nyb2xsVG8oY29sdW1uLCBhdXRvU25hcHBpbmcgPyBjb2x1bW4gPj0gdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpIDogc25hcFRvUmlnaHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbHMgdmlld3BvcnQgdG8gYSByb3cuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvVG9wXSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIHRvcCBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0JvdHRvbV0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjcm9sbFZpZXdwb3J0VmVydGljYWxseShyb3csIHNuYXBUb1RvcCwgc25hcFRvQm90dG9tKSB7XG4gICAgY29uc3Qge1xuICAgICAgZHJhd24sXG4gICAgICB0b3RhbFJvd3NcbiAgICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuXG4gICAgLy8gZG8gbm90IHNjcm9sbCB0aGUgdmlld3BvcnQgd2hlbiB0aGUgcm93IHBvaW50cyB0byBhIHJhbmdlIG91dHNpZGUgb2YgdGhlIGRhdGFzZXRcbiAgICBpZiAoIWRyYXduIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJvdykgfHwgcm93IDwgMCB8fCByb3cgPiB0b3RhbFJvd3MpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYXV0b1NuYXBwaW5nID0gc25hcFRvVG9wID09PSB1bmRlZmluZWQgJiYgc25hcFRvQm90dG9tID09PSB1bmRlZmluZWQ7XG4gICAgY29uc3Qge1xuICAgICAgZml4ZWRSb3dzQm90dG9tLFxuICAgICAgZml4ZWRSb3dzVG9wLFxuICAgICAgdG9wT3ZlcmxheVxuICAgIH0gPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Q7XG5cbiAgICAvLyBmb3IgYXV0by1zbmFwcGluZyAoYm90aCBzbmFwKiBhcmd1bWVudHMgYXJlIHVuZGVmaW5lZCkgZG8gbm90IHNjcm9sbCB0aGUgdmlld3BvcnRcbiAgICAvLyB3aGVuIHRoZSByb3dzIHBvaW50cyB0byB0aGUgb3ZlcmxheXNcbiAgICBpZiAoYXV0b1NuYXBwaW5nICYmIChyb3cgPCBmaXhlZFJvd3NUb3AgfHwgcm93ID4gdG90YWxSb3dzIC0gZml4ZWRSb3dzQm90dG9tIC0gMSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcm93ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHknLCByb3cpO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihyb3cpIHx8IHJvdyA8IDAgfHwgcm93ID4gdG90YWxSb3dzKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0Um93ID0gdGhpcy5nZXRGaXJzdFZpc2libGVSb3coKTtcbiAgICBjb25zdCBsYXN0Um93ID0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICBpZiAoYXV0b1NuYXBwaW5nICYmIChyb3cgPCBmaXJzdFJvdyB8fCByb3cgPiBsYXN0Um93KSB8fCAhYXV0b1NuYXBwaW5nKSB7XG4gICAgICAvLyBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgZnVsbHkgdmlzaWJsZSByb3cgZGV0ZXJtaW5lIHRoZSBzbmFwcGluZyBkaXJlY3Rpb24gYmFzZWQgb25cbiAgICAgIC8vIHRoYXQgcm93cyBvciBieSBzbmFwVG9Ub3Avc25hcFRvQm90dG9tIGZsYWdzLCBpZiBwcm92aWRlZC5cbiAgICAgIHJlc3VsdCA9IHRvcE92ZXJsYXkuc2Nyb2xsVG8ocm93LCBhdXRvU25hcHBpbmcgPyByb3cgPj0gdGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpIDogc25hcFRvQm90dG9tKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlyc3QgdmlzaWJsZSByb3cgYmFzZWQgb24gdmlydHVhbCBkb20gYW5kIGhvdyB0YWJsZSBpcyB2aXNpYmxlIGluIGJyb3dzZXIgd2luZG93IHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Rmlyc3RWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGFzdCB2aXNpYmxlIHJvdyBiYXNlZCBvbiB2aXJ0dWFsIGRvbSBhbmQgaG93IHRhYmxlIGlzIHZpc2libGUgaW4gYnJvd3NlciB3aW5kb3cgdmlld3BvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMYXN0VmlzaWJsZVJvdygpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX1Njcm9sbF9icmFuZCwgdGhpcywgX2dldExhc3RSb3dJbmRleCkuY2FsbCh0aGlzLCB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZmlyc3QgcGFydGlhbGx5IHZpc2libGUgcm93IGJhc2VkIG9uIHZpcnR1YWwgZG9tIGFuZCBob3cgdGFibGUgaXMgdmlzaWJsZSBpbiBicm93c2VyIHdpbmRvdyB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxhc3QgdmlzaWJsZSByb3cgYmFzZWQgb24gdmlydHVhbCBkb20gYW5kIGhvdyB0YWJsZSBpcyB2aXNpYmxlIGluIGJyb3dzZXIgd2luZG93IHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSB7XG4gICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9TY3JvbGxfYnJhbmQsIHRoaXMsIF9nZXRMYXN0Um93SW5kZXgpLmNhbGwodGhpcywgdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpcnN0IHZpc2libGUgY29sdW1uIGJhc2VkIG9uIHZpcnR1YWwgZG9tIGFuZCBob3cgdGFibGUgaXMgdmlzaWJsZSBpbiBicm93c2VyIHdpbmRvdyB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEZpcnN0VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxhc3QgdmlzaWJsZSBjb2x1bW4gYmFzZWQgb24gdmlydHVhbCBkb20gYW5kIGhvdyB0YWJsZSBpcyB2aXNpYmxlIGluIGJyb3dzZXIgd2luZG93IHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGFzdFZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9TY3JvbGxfYnJhbmQsIHRoaXMsIF9nZXRMYXN0Q29sdW1uSW5kZXgpLmNhbGwodGhpcywgdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZpcnN0IHBhcnRpYWxseSB2aXNpYmxlIGNvbHVtbiBiYXNlZCBvbiB2aXJ0dWFsIGRvbSBhbmQgaG93IHRhYmxlIGlzIHZpc2libGUgaW4gYnJvd3NlciB3aW5kb3cgdmlld3BvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsYXN0IHBhcnRpYWxseSB2aXNpYmxlIGNvbHVtbiBiYXNlZCBvbiB2aXJ0dWFsIGRvbSBhbmQgaG93IHRhYmxlIGlzIHZpc2libGUgaW4gYnJvd3NlciB3aW5kb3cgdmlld3BvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX1Njcm9sbF9icmFuZCwgdGhpcywgX2dldExhc3RDb2x1bW5JbmRleCkuY2FsbCh0aGlzLCB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtcbiAgfVxufVxuZnVuY3Rpb24gX2dldExhc3RDb2x1bW5JbmRleChsYXN0Q29sdW1uSW5kZXgpIHtcbiAgY29uc3Qge1xuICAgIHd0U2V0dGluZ3MsXG4gICAgaW5saW5lU3RhcnRPdmVybGF5LFxuICAgIHd0VGFibGUsXG4gICAgd3RWaWV3cG9ydCxcbiAgICB0b3RhbENvbHVtbnMsXG4gICAgcm9vdFdpbmRvd1xuICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuICBpZiAoaW5saW5lU3RhcnRPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50ID09PSByb290V2luZG93KSB7XG4gICAgY29uc3QgaXNSdGwgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3J0bE1vZGUnKTtcbiAgICBsZXQgaW5saW5lU3RhcnRSb290RWxlbWVudE9mZnNldCA9IG51bGw7XG4gICAgaWYgKGlzUnRsKSB7XG4gICAgICBjb25zdCB0YWJsZVJlY3QgPSB3dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3Qgcm9vdERvY3VtZW50ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQ7XG4gICAgICBjb25zdCBkb2NPZmZzZXRXaWR0aCA9IHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBpbmxpbmVTdGFydFJvb3RFbGVtZW50T2Zmc2V0ID0gTWF0aC5hYnModGFibGVSZWN0LnJpZ2h0IC0gZG9jT2Zmc2V0V2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb290RWxlbWVudE9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHd0VGFibGUud3RSb290RWxlbWVudCk7XG4gICAgICBpbmxpbmVTdGFydFJvb3RFbGVtZW50T2Zmc2V0ID0gcm9vdEVsZW1lbnRPZmZzZXQubGVmdDtcbiAgICB9XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsTGVmdCA9IE1hdGguYWJzKCgwLCBfZWxlbWVudC5nZXRTY3JvbGxMZWZ0KShyb290V2luZG93LCByb290V2luZG93KSk7XG5cbiAgICAvLyBPbmx5IGNhbGN1bGF0ZSBsYXN0Q29sdW1uSW5kZXggd2hlbiB0YWJsZSBkaWRuJ3QgZmlsbGVkIChmcm9tIHJpZ2h0KSB3aG9sZSB2aWV3cG9ydCBzcGFjZVxuICAgIGlmIChpbmxpbmVTdGFydFJvb3RFbGVtZW50T2Zmc2V0ID4gd2luZG93U2Nyb2xsTGVmdCkge1xuICAgICAgY29uc3Qgd2luZG93V2lkdGggPSAoMCwgX2VsZW1lbnQuaW5uZXJXaWR0aCkocm9vdFdpbmRvdyk7XG4gICAgICBsZXQgY29sdW1uc1dpZHRoID0gd3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpO1xuICAgICAgZm9yIChsZXQgY29sdW1uID0gMTsgY29sdW1uIDw9IHRvdGFsQ29sdW1uczsgY29sdW1uKyspIHtcbiAgICAgICAgY29sdW1uc1dpZHRoICs9IGlubGluZVN0YXJ0T3ZlcmxheS5zdW1DZWxsU2l6ZXMoY29sdW1uIC0gMSwgY29sdW1uKTtcbiAgICAgICAgaWYgKGlubGluZVN0YXJ0Um9vdEVsZW1lbnRPZmZzZXQgKyBjb2x1bW5zV2lkdGggLSB3aW5kb3dTY3JvbGxMZWZ0ID49IHdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgLy8gUmV0dXJuIHBoeXNpY2FsIGNvbHVtbiAtIDEgKC0yIGJlY2F1c2UgcmFuZ2VFYWNoIGdpdmVzIGNvbHVtbiBpbmRleCArIDEgLSBzdW1DZWxsU2l6ZXMgcmVxdWlyZW1lbnRzKVxuICAgICAgICAgIGxhc3RDb2x1bW5JbmRleCA9IGNvbHVtbiAtIDI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhc3RDb2x1bW5JbmRleDtcbn1cbi8qKlxuICogR2V0IGxhc3QgdmlzaWJsZSByb3cgYmFzZWQgb24gdmlydHVhbCBkb20gYW5kIGhvdyB0YWJsZSBpcyB2aXNpYmxlIGluIGJyb3dzZXIgd2luZG93IHZpZXdwb3J0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXN0Um93SW5kZXggVGhlIGxhc3QgdmlzaWJsZSByb3cgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBfZ2V0TGFzdFJvd0luZGV4KGxhc3RSb3dJbmRleCkge1xuICBjb25zdCB7XG4gICAgdG9wT3ZlcmxheSxcbiAgICB3dFRhYmxlLFxuICAgIHd0Vmlld3BvcnQsXG4gICAgdG90YWxSb3dzLFxuICAgIHJvb3RXaW5kb3dcbiAgfSA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdDtcbiAgaWYgKHRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQgPT09IHJvb3RXaW5kb3cpIHtcbiAgICBjb25zdCByb290RWxlbWVudE9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHd0VGFibGUud3RSb290RWxlbWVudCk7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsVG9wID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbFRvcCkocm9vdFdpbmRvdywgcm9vdFdpbmRvdyk7XG5cbiAgICAvLyBPbmx5IGNhbGN1bGF0ZSBsYXN0Um93SW5kZXggd2hlbiB0YWJsZSBkaWRuJ3QgZmlsbGVkIChmcm9tIGJvdHRvbSkgd2hvbGUgdmlld3BvcnQgc3BhY2VcbiAgICBpZiAocm9vdEVsZW1lbnRPZmZzZXQudG9wID4gd2luZG93U2Nyb2xsVG9wKSB7XG4gICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSAoMCwgX2VsZW1lbnQuaW5uZXJIZWlnaHQpKHJvb3RXaW5kb3cpO1xuICAgICAgbGV0IHJvd3NIZWlnaHQgPSB3dFZpZXdwb3J0LmdldENvbHVtbkhlYWRlckhlaWdodCgpO1xuICAgICAgZm9yIChsZXQgcm93ID0gMTsgcm93IDw9IHRvdGFsUm93czsgcm93KyspIHtcbiAgICAgICAgcm93c0hlaWdodCArPSB0b3BPdmVybGF5LnN1bUNlbGxTaXplcyhyb3cgLSAxLCByb3cpO1xuICAgICAgICBpZiAocm9vdEVsZW1lbnRPZmZzZXQudG9wICsgcm93c0hlaWdodCAtIHdpbmRvd1Njcm9sbFRvcCA+PSB3aW5kb3dIZWlnaHQpIHtcbiAgICAgICAgICAvLyBSZXR1cm4gcGh5c2ljYWwgcm93IC0gMSAoLTIgYmVjYXVzZSByYW5nZUVhY2ggZ2l2ZXMgcm93IGluZGV4ICsgMSAtIHN1bUNlbGxTaXplcyByZXF1aXJlbWVudHMpXG4gICAgICAgICAgbGFzdFJvd0luZGV4ID0gcm93IC0gMjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbGFzdFJvd0luZGV4O1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gU2Nyb2xsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2Jyb3dzZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vaGVscGVycy9icm93c2VyXCIpO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG4vKipcbiAqXG4gKi9cbmNsYXNzIEJvcmRlciB7XG4gIC8vIFRPRE8gQXMgdGhpcyBpcyBhbiBpbnRlcm5hbCBjbGFzcywgc2hvdWxkIGJlIGRlc2lnbmVkIGZvciB1c2luZyB7V2Fsa29udGFibGV9LiBJdCB1c2VzIHRoZSBmYWNhZGUsXG4gIC8vIFRPRE8gQ29uLiBCZWNhdXNlIHRoZSBjbGFzcyBpcyBjcmVhdGVkIG9uIHBsYWNlIHdoZXJlIHRoZSBpbnN0YW5jZSByZWZlcmVuY2UgY29tZXMgZnJvbSBleHRlcm5hbCBvcmlnaW4uXG4gIC8vIFRPRE8gSW1obywgdGhlIGRpc2NyaW1pbmF0aW9uIGZvciBoYW5kbGluZyBib3RoLCBmYWNhZGUgYW5kIG5vbi1mYWNhZGUgc2hvdWxkIGJlIGhhbmRsZWQuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlRmFjYWRlfSB3b3RJbnN0YW5jZSBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBUaGUgYm9yZGVyIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3Iod290SW5zdGFuY2UsIHNldHRpbmdzKSB7XG4gICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IHdvdEluc3RhbmNlLmV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmluc3RhbmNlID0gd290SW5zdGFuY2U7XG4gICAgdGhpcy53b3QgPSB3b3RJbnN0YW5jZTtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5tb3VzZURvd24gPSBmYWxzZTtcbiAgICB0aGlzLm1haW4gPSBudWxsO1xuICAgIHRoaXMudG9wID0gbnVsbDtcbiAgICB0aGlzLmJvdHRvbSA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IG51bGw7XG4gICAgdGhpcy5lbmQgPSBudWxsO1xuICAgIHRoaXMudG9wU3R5bGUgPSBudWxsO1xuICAgIHRoaXMuYm90dG9tU3R5bGUgPSBudWxsO1xuICAgIHRoaXMuc3RhcnRTdHlsZSA9IG51bGw7XG4gICAgdGhpcy5lbmRTdHlsZSA9IG51bGw7XG4gICAgdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUgPSBfY29uc3RhbnRzLkNPUk5FUl9ERUZBVUxUX1NUWUxFO1xuICAgIC8vIE9mZnNldCB0byBtb3ZpbmcgdGhlIGNvcm5lciB0byBiZSBjZW50ZXJlZCByZWxhdGl2ZSB0byB0aGUgZ3JpZC5cbiAgICB0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0ID0gLShwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwgMTApIC8gMik7XG4gICAgdGhpcy5jb3JuZXIgPSBudWxsO1xuICAgIHRoaXMuY29ybmVyU3R5bGUgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRlQm9yZGVycyhzZXR0aW5ncyk7XG4gICAgdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFsbCBuZWNlc3NhcnkgZXZlbnRzLlxuICAgKi9cbiAgcmVnaXN0ZXJMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgZG9jdW1lbnRCb2R5ID0gdGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudEJvZHksICdtb3VzZWRvd24nLCAoKSA9PiB0aGlzLm9uTW91c2VEb3duKCkpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnRCb2R5LCAnbW91c2V1cCcsICgpID0+IHRoaXMub25Nb3VzZVVwKCkpO1xuICAgIGZvciAobGV0IGMgPSAwLCBsZW4gPSB0aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7IGMgPCBsZW47IGMrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMubWFpbi5jaGlsZE5vZGVzW2NdO1xuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCAnbW91c2VlbnRlcicsIGV2ZW50ID0+IHRoaXMub25Nb3VzZUVudGVyKGV2ZW50LCB0aGlzLm1haW4uY2hpbGROb2Rlc1tjXSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3VzZSBkb3duIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZURvd24oKSB7XG4gICAgdGhpcy5tb3VzZURvd24gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdXNlIHVwIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Nb3VzZVVwKCkge1xuICAgIHRoaXMubW91c2VEb3duID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgZW50ZXIgbGlzdGVuZXIgZm9yIGZyYWdtZW50IHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBEb20gZXZlbnQuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBhcmVudEVsZW1lbnQgUGFydCBvZiBib3JkZXIgZWxlbWVudC5cbiAgICovXG4gIG9uTW91c2VFbnRlcihldmVudCwgcGFyZW50RWxlbWVudCkge1xuICAgIGlmICghdGhpcy5tb3VzZURvd24gfHwgIXRoaXMud290LmdldFNldHRpbmcoJ2hpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXInKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgIGNvbnN0IGRvY3VtZW50Qm9keSA9IHRoaXMud290LnJvb3REb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IGJvdW5kcyA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAvLyBIaWRlIGJvcmRlciB0byBwcmV2ZW50cyBzZWxlY3Rpb24ganVtcGluZyB3aGVuIGZyYWdtZW50U2VsZWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgcGFyZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtFdmVudH0gbW91c2VFdmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzT3V0c2lkZShtb3VzZUV2ZW50KSB7XG4gICAgICBpZiAobW91c2VFdmVudC5jbGllbnRZIDwgTWF0aC5mbG9vcihib3VuZHMudG9wKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChtb3VzZUV2ZW50LmNsaWVudFkgPiBNYXRoLmNlaWwoYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1vdXNlRXZlbnQuY2xpZW50WCA8IE1hdGguZmxvb3IoYm91bmRzLmxlZnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG1vdXNlRXZlbnQuY2xpZW50WCA+IE1hdGguY2VpbChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtFdmVudH0gaGFuZGxlckV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFuZGxlcihoYW5kbGVyRXZlbnQpIHtcbiAgICAgIGlmIChpc091dHNpZGUoaGFuZGxlckV2ZW50KSkge1xuICAgICAgICBfdGhpcy5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihkb2N1bWVudEJvZHksICdtb3VzZW1vdmUnLCBoYW5kbGVyKTtcbiAgICAgICAgcGFyZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudEJvZHksICdtb3VzZW1vdmUnLCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYm9yZGVyIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgVGhlIGJvcmRlciBzZXR0aW5ncy5cbiAgICovXG4gIGNyZWF0ZUJvcmRlcnMoc2V0dGluZ3MpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290RG9jdW1lbnRcbiAgICB9ID0gdGhpcy53b3Q7XG4gICAgdGhpcy5tYWluID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGJvcmRlckRpdnMgPSBbJ3RvcCcsICdzdGFydCcsICdib3R0b20nLCAnZW5kJywgJ2Nvcm5lciddO1xuICAgIGxldCBzdHlsZSA9IHRoaXMubWFpbi5zdHlsZTtcbiAgICBzdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgc3R5bGUudG9wID0gMDtcbiAgICBzdHlsZS5sZWZ0ID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBib3JkZXJEaXZzW2ldO1xuICAgICAgY29uc3QgZGl2ID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9IGB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lIHx8ICcnfWA7IC8vICsgYm9yZGVyRGl2c1tpXTtcblxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dICYmIHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dLmhpZGUpIHtcbiAgICAgICAgZGl2LmNsYXNzTmFtZSArPSAnIGhpZGRlbic7XG4gICAgICB9XG4gICAgICBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dICYmIHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dLmNvbG9yID8gdGhpcy5zZXR0aW5nc1twb3NpdGlvbl0uY29sb3IgOiBzZXR0aW5ncy5ib3JkZXIuY29sb3I7XG4gICAgICBzdHlsZS5oZWlnaHQgPSB0aGlzLnNldHRpbmdzW3Bvc2l0aW9uXSAmJiB0aGlzLnNldHRpbmdzW3Bvc2l0aW9uXS53aWR0aCA/IGAke3RoaXMuc2V0dGluZ3NbcG9zaXRpb25dLndpZHRofXB4YCA6IGAke3NldHRpbmdzLmJvcmRlci53aWR0aH1weGA7XG4gICAgICBzdHlsZS53aWR0aCA9IHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dICYmIHRoaXMuc2V0dGluZ3NbcG9zaXRpb25dLndpZHRoID8gYCR7dGhpcy5zZXR0aW5nc1twb3NpdGlvbl0ud2lkdGh9cHhgIDogYCR7c2V0dGluZ3MuYm9yZGVyLndpZHRofXB4YDtcbiAgICAgIHRoaXMubWFpbi5hcHBlbmRDaGlsZChkaXYpO1xuICAgIH1cbiAgICB0aGlzLnRvcCA9IHRoaXMubWFpbi5jaGlsZE5vZGVzWzBdO1xuICAgIHRoaXMuc3RhcnQgPSB0aGlzLm1haW4uY2hpbGROb2Rlc1sxXTtcbiAgICB0aGlzLmJvdHRvbSA9IHRoaXMubWFpbi5jaGlsZE5vZGVzWzJdO1xuICAgIHRoaXMuZW5kID0gdGhpcy5tYWluLmNoaWxkTm9kZXNbM107XG4gICAgdGhpcy50b3BTdHlsZSA9IHRoaXMudG9wLnN0eWxlO1xuICAgIHRoaXMuc3RhcnRTdHlsZSA9IHRoaXMuc3RhcnQuc3R5bGU7XG4gICAgdGhpcy5ib3R0b21TdHlsZSA9IHRoaXMuYm90dG9tLnN0eWxlO1xuICAgIHRoaXMuZW5kU3R5bGUgPSB0aGlzLmVuZC5zdHlsZTtcbiAgICB0aGlzLmNvcm5lciA9IHRoaXMubWFpbi5jaGlsZE5vZGVzWzRdO1xuICAgIHRoaXMuY29ybmVyLmNsYXNzTmFtZSArPSAnIGNvcm5lcic7XG4gICAgdGhpcy5jb3JuZXJTdHlsZSA9IHRoaXMuY29ybmVyLnN0eWxlO1xuICAgIHRoaXMuY29ybmVyU3R5bGUud2lkdGggPSB0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aDtcbiAgICB0aGlzLmNvcm5lclN0eWxlLmhlaWdodCA9IHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodDtcbiAgICB0aGlzLmNvcm5lclN0eWxlLmJvcmRlciA9IFt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCwgdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyU3R5bGUsIHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCcgJyk7XG4gICAgaWYgKCgwLCBfYnJvd3Nlci5pc01vYmlsZUJyb3dzZXIpKCkgJiYgdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCdpc0RhdGFWaWV3SW5zdGFuY2UnKSkge1xuICAgICAgdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpO1xuICAgIH1cbiAgICB0aGlzLmRpc2FwcGVhcigpO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gdGhpcy53b3Q7XG4gICAgbGV0IGJvcmRlcnNIb2xkZXIgPSB3dFRhYmxlLmJvcmRlcnNIb2xkZXI7XG4gICAgaWYgKCFib3JkZXJzSG9sZGVyKSB7XG4gICAgICBib3JkZXJzSG9sZGVyID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYm9yZGVyc0hvbGRlci5jbGFzc05hbWUgPSAnaHRCb3JkZXJzJztcbiAgICAgIHd0VGFibGUuYm9yZGVyc0hvbGRlciA9IGJvcmRlcnNIb2xkZXI7XG4gICAgICB3dFRhYmxlLnNwcmVhZGVyLmFwcGVuZENoaWxkKGJvcmRlcnNIb2xkZXIpO1xuICAgIH1cbiAgICBib3JkZXJzSG9sZGVyLmFwcGVuZENoaWxkKHRoaXMubWFpbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG11bHRpcGxlIHNlbGVjdG9yIGhhbmRsZXIgZm9yIG1vYmlsZSBkZXZpY2VzLlxuICAgKi9cbiAgY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMud290O1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcyA9IHtcbiAgICAgIHRvcDogcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpLFxuICAgICAgdG9wSGl0QXJlYTogcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpLFxuICAgICAgYm90dG9tOiByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyksXG4gICAgICBib3R0b21IaXRBcmVhOiByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJylcbiAgICB9O1xuICAgIGNvbnN0IHdpZHRoID0gMTA7XG4gICAgY29uc3QgaGl0QXJlYVdpZHRoID0gNDA7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWUgPSAndG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUnO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLmNsYXNzTmFtZSA9ICd0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEnO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uY2xhc3NOYW1lID0gJ2JvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSc7XG4gICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lID0gJ2JvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEnO1xuICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMgPSB7XG4gICAgICB0b3A6IHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3Auc3R5bGUsXG4gICAgICB0b3BIaXRBcmVhOiB0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5zdHlsZSxcbiAgICAgIGJvdHRvbTogdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5zdHlsZSxcbiAgICAgIGJvdHRvbUhpdEFyZWE6IHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLnN0eWxlXG4gICAgfTtcbiAgICBjb25zdCBoaXRBcmVhU3R5bGUgPSB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGhlaWdodDogYCR7aGl0QXJlYVdpZHRofXB4YCxcbiAgICAgIHdpZHRoOiBgJHtoaXRBcmVhV2lkdGh9cHhgLFxuICAgICAgJ2JvcmRlci1yYWRpdXMnOiBgJHtwYXJzZUludChoaXRBcmVhV2lkdGggLyAxLjUsIDEwKX1weGBcbiAgICB9O1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKGhpdEFyZWFTdHlsZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYVtrZXldID0gdmFsdWU7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFba2V5XSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVN0eWxlID0ge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBoZWlnaHQ6IGAke3dpZHRofXB4YCxcbiAgICAgIHdpZHRoOiBgJHt3aWR0aH1weGAsXG4gICAgICAnYm9yZGVyLXJhZGl1cyc6IGAke3BhcnNlSW50KHdpZHRoIC8gMS41LCAxMCl9cHhgLFxuICAgICAgYmFja2dyb3VuZDogJyNGNUY1RkYnLFxuICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkICM0Mjg1YzgnXG4gICAgfTtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShoYW5kbGVTdHlsZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW2tleV0gPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wW2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCk7XG4gICAgdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pO1xuICAgIHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSk7XG4gICAgdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUGFydFJhbmdlKHJvdywgY29sKSB7XG4gICAgY29uc3QgYXJlYVNlbGVjdGlvbiA9IHRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0QXJlYVNlbGVjdGlvbigpO1xuICAgIGlmIChhcmVhU2VsZWN0aW9uLmNlbGxSYW5nZSkge1xuICAgICAgaWYgKHJvdyAhPT0gYXJlYVNlbGVjdGlvbi5jZWxsUmFuZ2UudG8ucm93IHx8IGNvbCAhPT0gYXJlYVNlbGVjdGlvbi5jZWxsUmFuZ2UudG8uY29sKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvcCBUaGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBoYW5kbGVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVmdCBUaGUgbGVmdCBwb3NpdGlvbiBvZiB0aGUgaGFuZGxlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgaGFuZGxlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgdXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24ocm93LCBjb2wsIHRvcCwgbGVmdCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGlzUnRsID0gdGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdydGxNb2RlJyk7XG4gICAgY29uc3QgaW5saW5lUG9zUHJvcGVydHkgPSBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgY29uc3Qge1xuICAgICAgdG9wOiB0b3BTdHlsZXMsXG4gICAgICB0b3BIaXRBcmVhOiB0b3BIaXRBcmVhU3R5bGVzLFxuICAgICAgYm90dG9tOiBib3R0b21TdHlsZXMsXG4gICAgICBib3R0b21IaXRBcmVhOiBib3R0b21IaXRBcmVhU3R5bGVzXG4gICAgfSA9IHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM7XG4gICAgY29uc3QgaGFuZGxlQm9yZGVyU2l6ZSA9IHBhcnNlSW50KHRvcFN0eWxlcy5ib3JkZXJXaWR0aCwgMTApO1xuICAgIGNvbnN0IGhhbmRsZVNpemUgPSBwYXJzZUludCh0b3BTdHlsZXMud2lkdGgsIDEwKTtcbiAgICBjb25zdCBoaXRBcmVhU2l6ZSA9IHBhcnNlSW50KHRvcEhpdEFyZWFTdHlsZXMud2lkdGgsIDEwKTtcbiAgICBjb25zdCB0b3RhbFRhYmxlV2lkdGggPSB0aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCk7XG4gICAgY29uc3QgdG90YWxUYWJsZUhlaWdodCA9IHRoaXMud290Lnd0VGFibGUuZ2V0SGVpZ2h0KCk7XG4gICAgdG9wU3R5bGVzLnRvcCA9IGAke3BhcnNlSW50KHRvcCAtIGhhbmRsZVNpemUgLSAxLCAxMCl9cHhgO1xuICAgIHRvcFN0eWxlc1tpbmxpbmVQb3NQcm9wZXJ0eV0gPSBgJHtwYXJzZUludChsZWZ0IC0gaGFuZGxlU2l6ZSAtIDEsIDEwKX1weGA7XG4gICAgdG9wSGl0QXJlYVN0eWxlcy50b3AgPSBgJHtwYXJzZUludCh0b3AgLSBoaXRBcmVhU2l6ZSAvIDQgKiAzLCAxMCl9cHhgO1xuICAgIHRvcEhpdEFyZWFTdHlsZXNbaW5saW5lUG9zUHJvcGVydHldID0gYCR7cGFyc2VJbnQobGVmdCAtIGhpdEFyZWFTaXplIC8gNCAqIDMsIDEwKX1weGA7XG4gICAgY29uc3QgYm90dG9tSGFuZGxlcklubGluZSA9IE1hdGgubWluKHBhcnNlSW50KGxlZnQgKyB3aWR0aCwgMTApLCB0b3RhbFRhYmxlV2lkdGggLSBoYW5kbGVTaXplIC0gaGFuZGxlQm9yZGVyU2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJvdHRvbUhhbmRsZXJBcmVhSW5saW5lID0gTWF0aC5taW4ocGFyc2VJbnQobGVmdCArIHdpZHRoIC0gaGl0QXJlYVNpemUgLyA0LCAxMCksIHRvdGFsVGFibGVXaWR0aCAtIGhpdEFyZWFTaXplIC0gaGFuZGxlQm9yZGVyU2l6ZSAqIDIpO1xuICAgIGJvdHRvbVN0eWxlc1tpbmxpbmVQb3NQcm9wZXJ0eV0gPSBgJHtib3R0b21IYW5kbGVySW5saW5lfXB4YDtcbiAgICBib3R0b21IaXRBcmVhU3R5bGVzW2lubGluZVBvc1Byb3BlcnR5XSA9IGAke2JvdHRvbUhhbmRsZXJBcmVhSW5saW5lfXB4YDtcbiAgICBjb25zdCBib3R0b21IYW5kbGVyVG9wID0gTWF0aC5taW4ocGFyc2VJbnQodG9wICsgaGVpZ2h0LCAxMCksIHRvdGFsVGFibGVIZWlnaHQgLSBoYW5kbGVTaXplIC0gaGFuZGxlQm9yZGVyU2l6ZSAqIDIpO1xuICAgIGNvbnN0IGJvdHRvbUhhbmRsZXJBcmVhVG9wID0gTWF0aC5taW4ocGFyc2VJbnQodG9wICsgaGVpZ2h0IC0gaGl0QXJlYVNpemUgLyA0LCAxMCksIHRvdGFsVGFibGVIZWlnaHQgLSBoaXRBcmVhU2l6ZSAtIGhhbmRsZUJvcmRlclNpemUgKiAyKTtcbiAgICBib3R0b21TdHlsZXMudG9wID0gYCR7Ym90dG9tSGFuZGxlclRvcH1weGA7XG4gICAgYm90dG9tSGl0QXJlYVN0eWxlcy50b3AgPSBgJHtib3R0b21IYW5kbGVyQXJlYVRvcH1weGA7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUgJiYgdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpKSB7XG4gICAgICB0b3BTdHlsZXMuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB0b3BIaXRBcmVhU3R5bGVzLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgaWYgKHRoaXMuaXNQYXJ0UmFuZ2Uocm93LCBjb2wpKSB7XG4gICAgICAgIGJvdHRvbVN0eWxlcy5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICBib3R0b21IaXRBcmVhU3R5bGVzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib3R0b21TdHlsZXMuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgIGJvdHRvbUhpdEFyZWFTdHlsZXMuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvcFN0eWxlcy5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgYm90dG9tU3R5bGVzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0b3BIaXRBcmVhU3R5bGVzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBib3R0b21IaXRBcmVhU3R5bGVzLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIGlmIChyb3cgPT09IHRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzVG9wJykgfHwgY29sID09PSB0aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0JykpIHtcbiAgICAgIHRvcFN0eWxlcy56SW5kZXggPSAnOTk5OSc7XG4gICAgICB0b3BIaXRBcmVhU3R5bGVzLnpJbmRleCA9ICc5OTk5JztcbiAgICB9IGVsc2Uge1xuICAgICAgdG9wU3R5bGVzLnpJbmRleCA9ICcnO1xuICAgICAgdG9wSGl0QXJlYVN0eWxlcy56SW5kZXggPSAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBib3JkZXIgYXJvdW5kIG9uZSBvciBtYW55IGNlbGxzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjb3JuZXJzIFRoZSBjb3JuZXIgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBhcHBlYXIoY29ybmVycykge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGUsXG4gICAgICByb290RG9jdW1lbnQsXG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMud290OyAvLyB0b2RvIHJlZmFjdG9yaW5nOiBjb25zaWRlciBhYm91dCB1c2luZyBpbnRlcm5hbCBmYWNhZGUgKGl0IGlzIGdpdmVuIGJ5IGV4dGVybmFsIGNvZGUpXG4gICAgbGV0IGZyb21Sb3c7XG4gICAgbGV0IHRvUm93O1xuICAgIGxldCBmcm9tQ29sdW1uO1xuICAgIGxldCB0b0NvbHVtbjtcbiAgICBsZXQgcm93SGVhZGVyO1xuICAgIGxldCBjb2x1bW5IZWFkZXI7XG4gICAgY29uc3Qgcm93c0NvdW50ID0gd3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93c0NvdW50OyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHMgPSB3dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGkpO1xuICAgICAgaWYgKHMgPj0gY29ybmVyc1swXSAmJiBzIDw9IGNvcm5lcnNbMl0pIHtcbiAgICAgICAgZnJvbVJvdyA9IHM7XG4gICAgICAgIHJvd0hlYWRlciA9IGNvcm5lcnNbMF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gcm93c0NvdW50IC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIGNvbnN0IHMgPSB3dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGkpO1xuICAgICAgaWYgKHMgPj0gY29ybmVyc1swXSAmJiBzIDw9IGNvcm5lcnNbMl0pIHtcbiAgICAgICAgdG9Sb3cgPSBzO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uc0NvdW50ID0gd3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0NvdW50OyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHMgPSB3dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGkpO1xuICAgICAgaWYgKHMgPj0gY29ybmVyc1sxXSAmJiBzIDw9IGNvcm5lcnNbM10pIHtcbiAgICAgICAgZnJvbUNvbHVtbiA9IHM7XG4gICAgICAgIGNvbHVtbkhlYWRlciA9IGNvcm5lcnNbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gY29sdW1uc0NvdW50IC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIGNvbnN0IHMgPSB3dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGkpO1xuICAgICAgaWYgKHMgPj0gY29ybmVyc1sxXSAmJiBzIDw9IGNvcm5lcnNbM10pIHtcbiAgICAgICAgdG9Db2x1bW4gPSBzO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZyb21Sb3cgPT09IHVuZGVmaW5lZCB8fCBmcm9tQ29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGlzYXBwZWFyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmcm9tVEQgPSB3dFRhYmxlLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3Jkcyhmcm9tUm93LCBmcm9tQ29sdW1uKSk7XG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IGZyb21Sb3cgIT09IHRvUm93IHx8IGZyb21Db2x1bW4gIT09IHRvQ29sdW1uO1xuICAgIGNvbnN0IHRvVEQgPSBpc011bHRpcGxlID8gd3RUYWJsZS5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHModG9Sb3csIHRvQ29sdW1uKSkgOiBmcm9tVEQ7XG4gICAgY29uc3QgZnJvbU9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKGZyb21URCk7XG4gICAgY29uc3QgdG9PZmZzZXQgPSBpc011bHRpcGxlID8gKDAsIF9lbGVtZW50Lm9mZnNldCkodG9URCkgOiBmcm9tT2Zmc2V0O1xuICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHd0VGFibGUuVEFCTEUpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHd0VGFibGUuVEFCTEUpO1xuICAgIGNvbnN0IG1pblRvcCA9IGZyb21PZmZzZXQudG9wO1xuICAgIGNvbnN0IG1pbkxlZnQgPSBmcm9tT2Zmc2V0LmxlZnQ7XG4gICAgY29uc3QgaXNSdGwgPSB0aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoJ3J0bE1vZGUnKTtcbiAgICBsZXQgaW5saW5lU3RhcnRQb3MgPSAwO1xuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgaWYgKGlzUnRsKSB7XG4gICAgICBjb25zdCBmcm9tV2lkdGggPSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkoZnJvbVREKTtcbiAgICAgIGNvbnN0IGdyaWRSaWdodFBvcyA9IHJvb3RXaW5kb3cuaW5uZXJXaWR0aCAtIGNvbnRhaW5lck9mZnNldC5sZWZ0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgICB3aWR0aCA9IG1pbkxlZnQgKyBmcm9tV2lkdGggLSB0b09mZnNldC5sZWZ0O1xuICAgICAgaW5saW5lU3RhcnRQb3MgPSByb290V2luZG93LmlubmVyV2lkdGggLSBtaW5MZWZ0IC0gZnJvbVdpZHRoIC0gZ3JpZFJpZ2h0UG9zIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSB0b09mZnNldC5sZWZ0ICsgKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHRvVEQpIC0gbWluTGVmdDtcbiAgICAgIGlubGluZVN0YXJ0UG9zID0gbWluTGVmdCAtIGNvbnRhaW5lck9mZnNldC5sZWZ0IC0gMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChmcm9tUm93LCB0b1JvdykpIHtcbiAgICAgIGNvbnN0IG1vZGlmaWVkVmFsdWVzID0gdGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcignY29sdW1ucycsIGZyb21Db2x1bW4sIHRvQ29sdW1uLCByb3dIZWFkZXIsIGNvbnRhaW5lck9mZnNldCk7XG4gICAgICBsZXQgZnJvbVRIID0gbnVsbDtcbiAgICAgIGlmIChtb2RpZmllZFZhbHVlcykge1xuICAgICAgICBbZnJvbVRILCBpbmxpbmVTdGFydFBvcywgd2lkdGhdID0gbW9kaWZpZWRWYWx1ZXM7XG4gICAgICB9XG4gICAgICBpZiAoZnJvbVRIKSB7XG4gICAgICAgIGZyb21URCA9IGZyb21USDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHRvcCA9IG1pblRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgLSAxO1xuICAgIGxldCBoZWlnaHQgPSB0b09mZnNldC50b3AgKyAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRvVEQpIC0gbWluVG9wO1xuICAgIGlmICh0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoZnJvbUNvbHVtbiwgdG9Db2x1bW4pKSB7XG4gICAgICBjb25zdCBtb2RpZmllZFZhbHVlcyA9IHRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoJ3Jvd3MnLCBmcm9tUm93LCB0b1JvdywgY29sdW1uSGVhZGVyLCBjb250YWluZXJPZmZzZXQpO1xuICAgICAgbGV0IGZyb21USCA9IG51bGw7XG4gICAgICBpZiAobW9kaWZpZWRWYWx1ZXMpIHtcbiAgICAgICAgW2Zyb21USCwgdG9wLCBoZWlnaHRdID0gbW9kaWZpZWRWYWx1ZXM7XG4gICAgICB9XG4gICAgICBpZiAoZnJvbVRIKSB7XG4gICAgICAgIGZyb21URCA9IGZyb21USDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2VsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSkoZnJvbVRELCByb290V2luZG93KTtcbiAgICBpZiAocGFyc2VJbnQoc3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwKSA+IDApIHtcbiAgICAgIHRvcCArPSAxO1xuICAgICAgaGVpZ2h0ID0gaGVpZ2h0ID4gMCA/IGhlaWdodCAtIDEgOiAwO1xuICAgIH1cbiAgICBpZiAocGFyc2VJbnQoc3R5bGVbaXNSdGwgPyAnYm9yZGVyUmlnaHRXaWR0aCcgOiAnYm9yZGVyTGVmdFdpZHRoJ10sIDEwKSA+IDApIHtcbiAgICAgIGlubGluZVN0YXJ0UG9zICs9IDE7XG4gICAgICB3aWR0aCA9IHdpZHRoID4gMCA/IHdpZHRoIC0gMSA6IDA7XG4gICAgfVxuICAgIGNvbnN0IGlubGluZVBvc1Byb3BlcnR5ID0gaXNSdGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgIHRoaXMudG9wU3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICB0aGlzLnRvcFN0eWxlW2lubGluZVBvc1Byb3BlcnR5XSA9IGAke2lubGluZVN0YXJ0UG9zfXB4YDtcbiAgICB0aGlzLnRvcFN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHRoaXMudG9wU3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgdGhpcy5zdGFydFN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgdGhpcy5zdGFydFN0eWxlW2lubGluZVBvc1Byb3BlcnR5XSA9IGAke2lubGluZVN0YXJ0UG9zfXB4YDtcbiAgICB0aGlzLnN0YXJ0U3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICB0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgY29uc3QgZGVsdGEgPSBNYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoIC8gMik7XG4gICAgdGhpcy5ib3R0b21TdHlsZS50b3AgPSBgJHt0b3AgKyBoZWlnaHQgLSBkZWx0YX1weGA7XG4gICAgdGhpcy5ib3R0b21TdHlsZVtpbmxpbmVQb3NQcm9wZXJ0eV0gPSBgJHtpbmxpbmVTdGFydFBvc31weGA7XG4gICAgdGhpcy5ib3R0b21TdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuZW5kU3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICB0aGlzLmVuZFN0eWxlW2lubGluZVBvc1Byb3BlcnR5XSA9IGAke2lubGluZVN0YXJ0UG9zICsgd2lkdGggLSBkZWx0YX1weGA7XG4gICAgdGhpcy5lbmRTdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHQgKyAxfXB4YDtcbiAgICB0aGlzLmVuZFN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGxldCBjb3JuZXJWaXNpYmxlU2V0dGluZyA9IHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGU7XG4gICAgY29ybmVyVmlzaWJsZVNldHRpbmcgPSB0eXBlb2YgY29ybmVyVmlzaWJsZVNldHRpbmcgPT09ICdmdW5jdGlvbicgPyBjb3JuZXJWaXNpYmxlU2V0dGluZyh0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpIDogY29ybmVyVmlzaWJsZVNldHRpbmc7XG4gICAgY29uc3QgaG9va1Jlc3VsdCA9IHRoaXMud290LmdldFNldHRpbmcoJ29uTW9kaWZ5R2V0Q2VsbENvb3JkcycsIHRvUm93LCB0b0NvbHVtbik7XG4gICAgbGV0IFtjaGVja1JvdywgY2hlY2tDb2xdID0gW3RvUm93LCB0b0NvbHVtbl07XG4gICAgaWYgKGhvb2tSZXN1bHQgJiYgQXJyYXkuaXNBcnJheShob29rUmVzdWx0KSkge1xuICAgICAgWywsIGNoZWNrUm93LCBjaGVja0NvbF0gPSBob29rUmVzdWx0O1xuICAgIH1cbiAgICBpZiAoKDAsIF9icm93c2VyLmlzTW9iaWxlQnJvd3NlcikoKSB8fCAhY29ybmVyVmlzaWJsZVNldHRpbmcgfHwgdGhpcy5pc1BhcnRSYW5nZShjaGVja1JvdywgY2hlY2tDb2wpKSB7XG4gICAgICB0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29ybmVyU3R5bGUudG9wID0gYCR7dG9wICsgaGVpZ2h0ICsgdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldCAtIDF9cHhgO1xuICAgICAgdGhpcy5jb3JuZXJTdHlsZVtpbmxpbmVQb3NQcm9wZXJ0eV0gPSBgJHtpbmxpbmVTdGFydFBvcyArIHdpZHRoICsgdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldCAtIDF9cHhgO1xuICAgICAgdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoID0gdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGg7XG4gICAgICB0aGlzLmNvcm5lclN0eWxlLndpZHRoID0gdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGg7XG5cbiAgICAgIC8vIEhpZGUgdGhlIGZpbGwgaGFuZGxlLCBzbyB0aGUgcG9zc2libGUgZnVydGhlciBhZGp1c3RtZW50cyB3b24ndCBmb3JjZSB1bm5lZWRlZCBzY3JvbGxiYXJzLlxuICAgICAgdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgbGV0IHRyaW1taW5nQ29udGFpbmVyID0gKDAsIF9lbGVtZW50LmdldFRyaW1taW5nQ29udGFpbmVyKSh3dFRhYmxlLlRBQkxFKTtcbiAgICAgIGNvbnN0IHRyaW1Ub1dpbmRvdyA9IHRyaW1taW5nQ29udGFpbmVyID09PSByb290V2luZG93O1xuICAgICAgaWYgKHRyaW1Ub1dpbmRvdykge1xuICAgICAgICB0cmltbWluZ0NvbnRhaW5lciA9IHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjb3JuZXJIYWxmV2lkdGggPSBwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwgMTApIC8gMjtcbiAgICAgIGNvbnN0IGNvcm5lckhhbGZIZWlnaHQgPSBwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsIDEwKSAvIDI7XG4gICAgICBpZiAodG9Db2x1bW4gPT09IHRoaXMud290LmdldFNldHRpbmcoJ3RvdGFsQ29sdW1ucycpIC0gMSkge1xuICAgICAgICBjb25zdCB0b1RkT2Zmc2V0TGVmdCA9IHRyaW1Ub1dpbmRvdyA/IHRvVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCA6IHRvVEQub2Zmc2V0TGVmdDtcbiAgICAgICAgbGV0IGNvcm5lck92ZXJsYXBwaW5nQ29udGFpbmVyID0gZmFsc2U7XG4gICAgICAgIGxldCBjb3JuZXJFZGdlID0gMDtcbiAgICAgICAgaWYgKGlzUnRsKSB7XG4gICAgICAgICAgY29ybmVyRWRnZSA9IHRvVGRPZmZzZXRMZWZ0IC0gcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsIDEwKSAvIDI7XG4gICAgICAgICAgY29ybmVyT3ZlcmxhcHBpbmdDb250YWluZXIgPSBjb3JuZXJFZGdlIDwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3JuZXJFZGdlID0gdG9UZE9mZnNldExlZnQgKyAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodG9URCkgKyBwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwgMTApIC8gMjtcbiAgICAgICAgICBjb3JuZXJPdmVybGFwcGluZ0NvbnRhaW5lciA9IGNvcm5lckVkZ2UgPj0gKDAsIF9lbGVtZW50LmlubmVyV2lkdGgpKHRyaW1taW5nQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29ybmVyT3ZlcmxhcHBpbmdDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmNvcm5lclN0eWxlW2lubGluZVBvc1Byb3BlcnR5XSA9IGAke01hdGguZmxvb3IoaW5saW5lU3RhcnRQb3MgKyB3aWR0aCArIHRoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQgLSBjb3JuZXJIYWxmV2lkdGgpfXB4YDtcbiAgICAgICAgICB0aGlzLmNvcm5lclN0eWxlW2lzUnRsID8gJ2JvcmRlckxlZnRXaWR0aCcgOiAnYm9yZGVyUmlnaHRXaWR0aCddID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRvUm93ID09PSB0aGlzLndvdC5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKSAtIDEpIHtcbiAgICAgICAgY29uc3QgdG9UZE9mZnNldFRvcCA9IHRyaW1Ub1dpbmRvdyA/IHRvVEQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDogdG9URC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGNvcm5lckJvdHRvbUVkZ2UgPSB0b1RkT2Zmc2V0VG9wICsgKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0b1REKSArIHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwgMTApIC8gMjtcbiAgICAgICAgY29uc3QgY29ybmVyT3ZlcmxhcHBpbmdDb250YWluZXIgPSBjb3JuZXJCb3R0b21FZGdlID49ICgwLCBfZWxlbWVudC5pbm5lckhlaWdodCkodHJpbW1pbmdDb250YWluZXIpO1xuICAgICAgICBpZiAoY29ybmVyT3ZlcmxhcHBpbmdDb250YWluZXIpIHtcbiAgICAgICAgICB0aGlzLmNvcm5lclN0eWxlLnRvcCA9IGAke01hdGguZmxvb3IodG9wICsgaGVpZ2h0ICsgdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldCAtIGNvcm5lckhhbGZIZWlnaHQpfXB4YDtcbiAgICAgICAgICB0aGlzLmNvcm5lclN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG4gICAgaWYgKCgwLCBfYnJvd3Nlci5pc01vYmlsZUJyb3dzZXIpKCkgJiYgdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCdpc0RhdGFWaWV3SW5zdGFuY2UnKSkge1xuICAgICAgdGhpcy51cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQb3NpdGlvbih0b1JvdywgdG9Db2x1bW4sIHRvcCwgaW5saW5lU3RhcnRQb3MsIHdpZHRoLCBoZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGFuIGVudGlyZSBjb2x1bW4gb2YgY2VsbHMgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFJvd0luZGV4IFN0YXJ0IHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFJvd0luZGV4IEVuZCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChzdGFydFJvd0luZGV4LCBlbmRSb3dJbmRleCkge1xuICAgIHJldHVybiBzdGFydFJvd0luZGV4ID09PSB0aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKSAmJiBlbmRSb3dJbmRleCA9PT0gdGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGFuIGVudGlyZSByb3cgb2YgY2VsbHMgaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydENvbHVtbkluZGV4IFN0YXJ0IGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZENvbHVtbkluZGV4IEVuZCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbnRpcmVSb3dTZWxlY3RlZChzdGFydENvbHVtbkluZGV4LCBlbmRDb2x1bW5JbmRleCkge1xuICAgIHJldHVybiBzdGFydENvbHVtbkluZGV4ID09PSB0aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSAmJiBlbmRDb2x1bW5JbmRleCA9PT0gdGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGVmdC90b3AgaW5kZXggYW5kIHdpZHRoL2hlaWdodCBkZXBlbmRpbmcgb24gdGhlIGBkaXJlY3Rpb25gIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIGByb3dzYCBvciBgY29sdW1uc2AsIGRlZmluZXMgaWYgYW4gZW50aXJlIGNvbHVtbiBvciByb3cgaXMgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU3RhcnQgaW5kZXggb2YgdGhlIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRW5kIGluZGV4IG9mIHRoZSBzZWxlY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJJbmRleCBUaGUgaGVhZGVyIGluZGV4IGFzIG5lZ2F0aXZlIHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29udGFpbmVyT2Zmc2V0IE9mZnNldCBvZiB0aGUgY29udGFpbmVyLlxuICAgKiBAcmV0dXJucyB7QXJyYXl8Ym9vbGVhbn0gUmV0dXJucyBhbiBhcnJheSBvZiBbaGVhZGVyRWxlbWVudCwgbGVmdCwgd2lkdGhdIG9yIFtoZWFkZXJFbGVtZW50LCB0b3AsIGhlaWdodF0sIGRlcGVuZGluZyBvbiBgZGlyZWN0aW9uYCAoYGZhbHNlYCBpbiBjYXNlIG9mIGFuIGVycm9yIGdldHRpbmcgdGhlIGhlYWRlcnMpLlxuICAgKi9cbiAgZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoZGlyZWN0aW9uLCBmcm9tSW5kZXgsIHRvSW5kZXgsIGhlYWRlckluZGV4LCBjb250YWluZXJPZmZzZXQpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlXG4gICAgfSA9IHRoaXMud290O1xuICAgIGNvbnN0IHJvb3RIb3RFbGVtZW50ID0gd3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgbGV0IGdldEhlYWRlckZuID0gbnVsbDtcbiAgICBsZXQgZGltZW5zaW9uRm4gPSBudWxsO1xuICAgIGxldCBlbnRpcmVTZWxlY3Rpb25DbGFzc25hbWUgPSBudWxsO1xuICAgIGxldCBpbmRleCA9IG51bGw7XG4gICAgbGV0IGRpbWVuc2lvbiA9IG51bGw7XG4gICAgbGV0IGRpbWVuc2lvblByb3BlcnR5ID0gbnVsbDtcbiAgICBsZXQgc3RhcnRIZWFkZXIgPSBudWxsO1xuICAgIGxldCBlbmRIZWFkZXIgPSBudWxsO1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdyb3dzJzpcbiAgICAgICAgZ2V0SGVhZGVyRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHd0VGFibGUuZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICAgIGRpbWVuc2lvbkZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICAgIGVudGlyZVNlbGVjdGlvbkNsYXNzbmFtZSA9ICdodF9fc2VsZWN0aW9uLS1yb3dzJztcbiAgICAgICAgZGltZW5zaW9uUHJvcGVydHkgPSAndG9wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgZ2V0SGVhZGVyRm4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICAgIGRpbWVuc2lvbkZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgICAgZW50aXJlU2VsZWN0aW9uQ2xhc3NuYW1lID0gJ2h0X19zZWxlY3Rpb24tLWNvbHVtbnMnO1xuICAgICAgICBkaW1lbnNpb25Qcm9wZXJ0eSA9ICdsZWZ0JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICBpZiAocm9vdEhvdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGVudGlyZVNlbGVjdGlvbkNsYXNzbmFtZSkpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkhlYWRlckxldmVsQ291bnQgPSB0aGlzLndvdC5nZXRTZXR0aW5nKCdjb2x1bW5IZWFkZXJzJykubGVuZ3RoO1xuICAgICAgc3RhcnRIZWFkZXIgPSBnZXRIZWFkZXJGbihmcm9tSW5kZXgsIGNvbHVtbkhlYWRlckxldmVsQ291bnQgLSBoZWFkZXJJbmRleCk7XG4gICAgICBlbmRIZWFkZXIgPSBnZXRIZWFkZXJGbih0b0luZGV4LCBjb2x1bW5IZWFkZXJMZXZlbENvdW50IC0gaGVhZGVySW5kZXgpO1xuICAgICAgaWYgKCFzdGFydEhlYWRlciB8fCAhZW5kSGVhZGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0SGVhZGVyT2Zmc2V0ID0gKDAsIF9lbGVtZW50Lm9mZnNldCkoc3RhcnRIZWFkZXIpO1xuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gKDAsIF9lbGVtZW50Lm9mZnNldCkoZW5kSGVhZGVyKTtcbiAgICAgIGlmIChzdGFydEhlYWRlciAmJiBlbmRIZWFkZXIpIHtcbiAgICAgICAgaW5kZXggPSBzdGFydEhlYWRlck9mZnNldFtkaW1lbnNpb25Qcm9wZXJ0eV0gLSBjb250YWluZXJPZmZzZXRbZGltZW5zaW9uUHJvcGVydHldIC0gMTtcbiAgICAgICAgZGltZW5zaW9uID0gZW5kT2Zmc2V0W2RpbWVuc2lvblByb3BlcnR5XSArIGRpbWVuc2lvbkZuKGVuZEhlYWRlcikgLSBzdGFydEhlYWRlck9mZnNldFtkaW1lbnNpb25Qcm9wZXJ0eV07XG4gICAgICB9XG4gICAgICByZXR1cm4gW3N0YXJ0SGVhZGVyLCBpbmRleCwgZGltZW5zaW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBib3JkZXIgc3R5bGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib3JkZXJFbGVtZW50IENvb3JkaW5hdGUgd2hlcmUgYWRkL3JlbW92ZSBib3JkZXI6IHRvcCwgYm90dG9tLCBzdGFydCwgZW5kLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9yZGVyIFRoZSBib3JkZXIgb2JqZWN0IGRlc2NyaXB0b3IuXG4gICAqL1xuICBjaGFuZ2VCb3JkZXJTdHlsZShib3JkZXJFbGVtZW50LCBib3JkZXIpIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXNbYm9yZGVyRWxlbWVudF0uc3R5bGU7XG4gICAgY29uc3QgYm9yZGVyU3R5bGUgPSBib3JkZXJbYm9yZGVyRWxlbWVudF07XG4gICAgaWYgKCFib3JkZXJTdHlsZSB8fCBib3JkZXJTdHlsZS5oaWRlKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXNbYm9yZGVyRWxlbWVudF0sICdoaWRkZW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykodGhpc1tib3JkZXJFbGVtZW50XSwgJ2hpZGRlbicpKSB7XG4gICAgICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpc1tib3JkZXJFbGVtZW50XSwgJ2hpZGRlbicpO1xuICAgICAgfVxuICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYm9yZGVyU3R5bGUuY29sb3I7XG4gICAgICBpZiAoYm9yZGVyRWxlbWVudCA9PT0gJ3RvcCcgfHwgYm9yZGVyRWxlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgc3R5bGUuaGVpZ2h0ID0gYCR7Ym9yZGVyU3R5bGUud2lkdGh9cHhgO1xuICAgICAgfVxuICAgICAgaWYgKGJvcmRlckVsZW1lbnQgPT09ICdzdGFydCcgfHwgYm9yZGVyRWxlbWVudCA9PT0gJ2VuZCcpIHtcbiAgICAgICAgc3R5bGUud2lkdGggPSBgJHtib3JkZXJTdHlsZS53aWR0aH1weGA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBib3JkZXIgc3R5bGUgdG8gZGVmYXVsdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBvc2l0aW9uIFRoZSBwb3NpdGlvbiB0eXBlIChcInRvcFwiLCBcImJvdHRvbVwiLCBcInN0YXJ0XCIsIFwiZW5kXCIpIHRvIGNoYW5nZS5cbiAgICovXG4gIGNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKHBvc2l0aW9uKSB7XG4gICAgY29uc3QgZGVmYXVsdEJvcmRlciA9IHtcbiAgICAgIHdpZHRoOiAxLFxuICAgICAgY29sb3I6ICcjMDAwJ1xuICAgIH07XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzW3Bvc2l0aW9uXS5zdHlsZTtcbiAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBkZWZhdWx0Qm9yZGVyLmNvbG9yO1xuICAgIHN0eWxlLndpZHRoID0gYCR7ZGVmYXVsdEJvcmRlci53aWR0aH1weGA7XG4gICAgc3R5bGUuaGVpZ2h0ID0gYCR7ZGVmYXVsdEJvcmRlci53aWR0aH1weGA7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIGNsYXNzICdoaWRkZW4nIHRvIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib3JkZXJFbGVtZW50IENvb3JkaW5hdGUgd2hlcmUgYWRkL3JlbW92ZSBib3JkZXI6IHRvcCwgYm90dG9tLCBzdGFydCwgZW5kLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW1vdmVdIERlZmluZXMgdHlwZSBvZiB0aGUgYWN0aW9uIHRvIHBlcmZvcm0uXG4gICAqL1xuICB0b2dnbGVIaWRkZW5DbGFzcyhib3JkZXJFbGVtZW50LCByZW1vdmUpIHtcbiAgICB0aGlzLmNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGJvcmRlckVsZW1lbnQpO1xuICAgIGlmIChyZW1vdmUpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpc1tib3JkZXJFbGVtZW50XSwgJ2hpZGRlbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXNbYm9yZGVyRWxlbWVudF0sICdoaWRkZW4nKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBib3JkZXIuXG4gICAqL1xuICBkaXNhcHBlYXIoKSB7XG4gICAgdGhpcy50b3BTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLmVuZFN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIGlmICgoMCwgX2Jyb3dzZXIuaXNNb2JpbGVCcm93c2VyKSgpICYmIHRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygnaXNEYXRhVmlld0luc3RhbmNlJykpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWEuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIGFsbCB0aGUgRE9NIHN0YXRlIHJlbGF0ZWQgdG8gYSBCb3JkZXIgaW5zdGFuY2UuIENhbGwgdGhpcyBwcmlvciB0byBkZWxldGluZyBhIEJvcmRlciBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCk7XG4gICAgdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQm9yZGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuLyoqXG4gKiBEZWZhdWx0IGJvcmRlciBjb3JuZXIgc3R5bGUuXG4gKlxuICogQHR5cGUge29iamVjdH1cbiAqL1xuY29uc3QgQ09STkVSX0RFRkFVTFRfU1RZTEUgPSBleHBvcnRzLkNPUk5FUl9ERUZBVUxUX1NUWUxFID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdpZHRoOiAnNnB4JyxcbiAgaGVpZ2h0OiAnNnB4JyxcbiAgYm9yZGVyV2lkdGg6ICcxcHgnLFxuICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgYm9yZGVyQ29sb3I6ICcjRkZGJ1xufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vKipcbiAqIFNlbGVjdGlvbiB0eXBlIHRoYXQgaXMgdmlzaWJsZSBvbmx5IGlmIHRoZSByb3cgb3IgY29sdW1uIGhlYWRlciBpcyBjbGlja2VkLiBJZiB0aGF0IGhhcHBlbmVkXG4gKiBhbGwgcm93IG9yIGNvbHVtbiBoZWFkZXIgbGF5ZXJzIGFyZSBoaWdobGlnaHRlZC5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBQ1RJVkVfSEVBREVSX1RZUEUgPSBleHBvcnRzLkFDVElWRV9IRUFERVJfVFlQRSA9ICdhY3RpdmUtaGVhZGVyJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgdGhhdCBpcyB2aXNpYmxlIG9ubHkgaWYgdGhlIGEgY2VsbCBvciBjZWxscyBhcmUgY2xpY2tlZC4gSWYgdGhhdCBoYXBwZW5lZFxuICogb25seSB0aGUgbW9zdCBjbG9zZXN0IHRvIHRoZSBjZWxscyByb3cgb3IgY29sdW1uIGhlYWRlciBpcyBoaWdobGlnaHRlZC5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBIRUFERVJfVFlQRSA9IGV4cG9ydHMuSEVBREVSX1RZUEUgPSAnaGVhZGVyJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgdGhhdCBpcyB2aXNpYmxlIHdoZW4gYSBjZWxsIG9yIGNlbGxzIGFyZSBjbGlja2VkLiBUaGUgc2VsZWN0ZWQgY2VsbHMgYXJlXG4gKiBoaWdobGlnaHRlZC5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBUkVBX1RZUEUgPSBleHBvcnRzLkFSRUFfVFlQRSA9ICdhcmVhJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgZGVmaW5lcyBhIGNlbGwgdGhhdCBmb2xsb3dzIHRoZSB1c2VyIChrZXlib2FyZCBuYXZpZ2F0aW9uKS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGT0NVU19UWVBFID0gZXhwb3J0cy5GT0NVU19UWVBFID0gJ2ZvY3VzJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgZGVmaW5lcyBib3JkZXJzIGZvciB0aGUgYXV0b2ZpbGwgZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxMX1RZUEUgPSBleHBvcnRzLkZJTExfVFlQRSA9ICdmaWxsJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgZGVmaW5lcyBoaWdobGlnaHRzIGZvciB0aGUgYGN1cnJlbnRSb3dDbGFzc05hbWVgIG9wdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBST1dfVFlQRSA9IGV4cG9ydHMuUk9XX1RZUEUgPSAncm93Jztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgZGVmaW5lcyBoaWdobGlnaHRzIGZvciB0aGUgYGN1cnJlbnRDb2x1bW5DbGFzc05hbWVgIG9wdGlvbi5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBDT0xVTU5fVFlQRSA9IGV4cG9ydHMuQ09MVU1OX1RZUEUgPSAnY29sdW1uJztcbi8qKlxuICogU2VsZWN0aW9uIHR5cGUgZGVmaW5lcyBoaWdobGlnaHRzIG1hbmFnZWQgYnkgdGhlIEN1c3RvbUJvcmRlcnMgcGx1Z2luLlxuICpcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IENVU1RPTV9TRUxFQ1RJT05fVFlQRSA9IGV4cG9ydHMuQ1VTVE9NX1NFTEVDVElPTl9UWVBFID0gJ2N1c3RvbS1zZWxlY3Rpb24nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgU2VsZWN0aW9uTWFuYWdlcjogdHJ1ZSxcbiAgU2VsZWN0aW9uOiB0cnVlXG59O1xudmFyIF9zZWxlY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NlbGVjdGlvblwiKSk7XG5leHBvcnRzLlNlbGVjdGlvbiA9IF9zZWxlY3Rpb24uZGVmYXVsdDtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuT2JqZWN0LmtleXMoX2NvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2NvbnN0YW50c1trZXldKSByZXR1cm47XG4gIGV4cG9ydHNba2V5XSA9IF9jb25zdGFudHNba2V5XTtcbn0pO1xudmFyIF9jb25zdGFudHMyID0gcmVxdWlyZShcIi4vYm9yZGVyL2NvbnN0YW50c1wiKTtcbk9iamVjdC5rZXlzKF9jb25zdGFudHMyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfY29uc3RhbnRzMltrZXldKSByZXR1cm47XG4gIGV4cG9ydHNba2V5XSA9IF9jb25zdGFudHMyW2tleV07XG59KTtcbnZhciBfbWFuYWdlciA9IHJlcXVpcmUoXCIuL21hbmFnZXJcIik7XG5leHBvcnRzLlNlbGVjdGlvbk1hbmFnZXIgPSBfbWFuYWdlci5TZWxlY3Rpb25NYW5hZ2VyO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfc2Nhbm5lcjIgPSByZXF1aXJlKFwiLi9zY2FubmVyXCIpO1xudmFyIF9ib3JkZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JvcmRlci9ib3JkZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogTW9kdWxlIHJlc3BvbnNpYmxlIGZvciByZW5kZXJpbmcgc2VsZWN0aW9ucyAoQ1NTIGNsYXNzZXMpIGFuZCBib3JkZXJzIGJhc2VkIG9uIHRoZVxuICogY29sbGVjdGlvbiBvZiB0aGUgU2VsZWN0aW9uIGluc3RhbmNlcyBwcm92aWRlZCB0aHJvdWdob3V0IHRoZSBgc2VsZWN0aW9uc2AgV2Fsa29udGFibGVcbiAqIHNldHRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIF9hY3RpdmVPdmVybGF5c1dvdCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9zZWxlY3Rpb25zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3NjYW5uZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfYXBwbGllZENsYXNzZXMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZGVzdHJveUxpc3RlbmVycyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9zZWxlY3Rpb25Cb3JkZXJzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX1NlbGVjdGlvbk1hbmFnZXJfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIFNlbGVjdGlvbk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcihzZWxlY3Rpb25zKSB7XG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBlbGVtZW50cyB0byB0aGVpciBpbml0aWFsIHN0YXRlIChyZW1vdmUgdGhlIENTUyBjbGFzc2VzIHRoYXQgYXJlIGFkZGVkIGluIHRoZVxuICAgICAqIHByZXZpb3VzIHJlbmRlciBjeWNsZSkuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9TZWxlY3Rpb25NYW5hZ2VyX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgb3ZlcmxheSdzIFdhbGtvbnRhYmxlIGluc3RhbmNlIHRoYXQgYXJlIGN1cnJlbnRseSBwcm9jZXNzZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7V2Fsa29udGFibGV9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2FjdGl2ZU92ZXJsYXlzV290LCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBIaWdobGlnaHQgaW5zdGFuY2UgdGhhdCBob2xkcyBTZWxlY3Rpb25zIGluc3RhbmNlcyB3aXRoaW4gaXQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SGlnaGxpZ2h0fG51bGx9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NlbGVjdGlvbnMsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIFNlbGVjdGlvblNjYW5uZXIgYWxsb3dzIHRvIHNjYW4gYW5kIGNvbGxlY3QgdGhlIGNlbGwgYW5kIGhlYWRlciBlbGVtZW50cyB0aGF0IG1hdGNoZXNcbiAgICAgKiB0byB0aGUgY29vcmRzIGRlZmluZWQgaW4gdGhlIHNlbGVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2VsZWN0aW9uU2Nhbm5lcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2Nhbm5lciwgbmV3IF9zY2FubmVyMi5TZWxlY3Rpb25TY2FubmVyKCkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBNYXAgdHJhY2tzIGFwcGxpZWQgQ1NTIGNsYXNzZXMuIEl0J3MgdXNlZCB0byByZXNldCB0aGUgZWxlbWVudHMgc3RhdGUgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtXZWFrTWFwfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9hcHBsaWVkQ2xhc3NlcywgbmV3IFdlYWtNYXAoKSk7XG4gICAgLyoqXG4gICAgICogVGhlIE1hcCB0cmFja3MgYXBwbGllZCBcImRlc3Ryb3lcIiBsaXN0ZW5lcnMgZm9yIFNlbGVjdGlvbiBpbnN0YW5jZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7V2Vha01hcH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGVzdHJveUxpc3RlbmVycywgbmV3IFdlYWtTZXQoKSk7XG4gICAgLyoqXG4gICAgICogVGhlIE1hcCBob2xkcyByZWZlcmVuY2VzIHRvIEJvcmRlciBjbGFzc2VzIGZvciBTZWxlY3Rpb24gaW5zdGFuY2VzIHdoaWNoIHJlcXVpcmVzIHRoYXQgd2hlblxuICAgICAqIHRoZSBcImJvcmRlclwiIHNldHRpbmcgaXMgZGVmaW5lZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXB9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NlbGVjdGlvbkJvcmRlcnMsIG5ldyBNYXAoKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3Rpb25zLCB0aGlzLCBzZWxlY3Rpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhY3RpdmUgV2Fsa29udGFibGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7V2Fsa29udGFibGV9IGFjdGl2ZVdvdCBUaGUgb3ZlcmxheXMgb3IgbWFzdGVyIFdhbGtvbnRhYmxlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uTWFuYWdlcn1cbiAgICovXG4gIHNldEFjdGl2ZU92ZXJsYXkoYWN0aXZlV290KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcywgYWN0aXZlV290KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NjYW5uZXIsIHRoaXMpLnNldEFjdGl2ZU92ZXJsYXkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcykpO1xuICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hcHBsaWVkQ2xhc3NlcywgdGhpcykuaGFzKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hcHBsaWVkQ2xhc3NlcywgdGhpcykuc2V0KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLCBuZXcgU2V0KCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBTZWxlY3Rpb24gaW5zdGFuY2Ugb2YgdGhlIFwiZm9jdXNcIiB0eXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufG51bGx9XG4gICAqL1xuICBnZXRGb2N1c1NlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKSAhPT0gbnVsbCA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9ucywgdGhpcykuZ2V0Rm9jdXMoKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgU2VsZWN0aW9uIGluc3RhbmNlIG9mIHRoZSBcImFyZWFcIiB0eXBlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufG51bGx9XG4gICAqL1xuICBnZXRBcmVhU2VsZWN0aW9uKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbnMsIHRoaXMpICE9PSBudWxsID8gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBCb3JkZXIgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIFNlbGVjdGlvbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvbiBUaGUgc2VsZWN0aW9uIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7Qm9yZGVyfG51bGx9IFJldHVybnMgdGhlIEJvcmRlciBpbnN0YW5jZSAobmV3IGZvciBlYWNoIG92ZXJsYXkgV2Fsa29udGFibGUgaW5zdGFuY2UpLlxuICAgKi9cbiAgZ2V0Qm9yZGVySW5zdGFuY2Uoc2VsZWN0aW9uKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24uc2V0dGluZ3MuYm9yZGVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9uQm9yZGVycywgdGhpcykuaGFzKHNlbGVjdGlvbikpIHtcbiAgICAgIGNvbnN0IGJvcmRlcnMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbkJvcmRlcnMsIHRoaXMpLmdldChzZWxlY3Rpb24pO1xuICAgICAgaWYgKGJvcmRlcnMuaGFzKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpKSkge1xuICAgICAgICByZXR1cm4gYm9yZGVycy5nZXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcykpO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9yZGVyID0gbmV3IF9ib3JkZXIuZGVmYXVsdChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKSwgc2VsZWN0aW9uLnNldHRpbmdzKTtcbiAgICAgIGJvcmRlcnMuc2V0KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLCBib3JkZXIpO1xuICAgICAgcmV0dXJuIGJvcmRlcjtcbiAgICB9XG4gICAgY29uc3QgYm9yZGVyID0gbmV3IF9ib3JkZXIuZGVmYXVsdChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKSwgc2VsZWN0aW9uLnNldHRpbmdzKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbkJvcmRlcnMsIHRoaXMpLnNldChzZWxlY3Rpb24sIG5ldyBNYXAoW1tfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKSwgYm9yZGVyXV0pKTtcbiAgICByZXR1cm4gYm9yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIEJvcmRlciBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIFNlbGVjdGlvbiBpbnN0YW5jZSBmb3IgYWxsIG92ZXJsYXlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsZWN0aW9uIFRoZSBzZWxlY3Rpb24gaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtCb3JkZXJbXX1cbiAgICovXG4gIGdldEJvcmRlckluc3RhbmNlcyhzZWxlY3Rpb24pIHtcbiAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MztcbiAgICByZXR1cm4gQXJyYXkuZnJvbSgoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA9IChfY2xhc3NQcml2YXRlRmllbGRHZXQzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25Cb3JkZXJzLCB0aGlzKS5nZXQoc2VsZWN0aW9uKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0My52YWx1ZXMoKSkgIT09IG51bGwgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiAhPT0gdm9pZCAwID8gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA6IFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgQm9yZGVyIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCBTZWxlY3Rpb24gaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWxlY3Rpb24gVGhlIHNlbGVjdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3lCb3JkZXJzKHNlbGVjdGlvbikge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9uQm9yZGVycywgdGhpcykuZ2V0KHNlbGVjdGlvbikuZm9yRWFjaChib3JkZXIgPT4gYm9yZGVyLmRlc3Ryb3koKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25Cb3JkZXJzLCB0aGlzKS5kZWxldGUoc2VsZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGFsbCB0aGUgc2VsZWN0aW9ucyAoYWRkIENTUyBjbGFzc2VzIHRvIGNlbGxzIGFuZCBkcmF3IGJvcmRlcnMpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZhc3REcmF3IEluZGljYXRlcyB0aGUgcmVuZGVyIGN5Y2xlIHR5cGUgKGZhc3Qvc2xvdykuXG4gICAqL1xuICByZW5kZXIoZmFzdERyYXcpIHtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmFzdERyYXcpIHtcbiAgICAgIC8vIHRoZXJlIHdhcyBubyByZXJlbmRlciwgc28gd2UgbmVlZCB0byByZW1vdmUgY2xhc3NOYW1lcyBieSBvdXJzZWx2ZXNcbiAgICAgIF9hc3NlcnRDbGFzc0JyYW5kKF9TZWxlY3Rpb25NYW5hZ2VyX2JyYW5kLCB0aGlzLCBfcmVzZXRDZWxscykuY2FsbCh0aGlzKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0aW9ucyA9IEFycmF5LmZyb20oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKSk7XG4gICAgY29uc3QgY2xhc3NOYW1lc01hcCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBoZWFkZXJBdHRyaWJ1dGVzTWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gc2VsZWN0aW9uc1tpXTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBoZWFkZXJBdHRyaWJ1dGVzLFxuICAgICAgICBjcmVhdGVMYXllcnMsXG4gICAgICAgIHNlbGVjdGlvblR5cGVcbiAgICAgIH0gPSBzZWxlY3Rpb24uc2V0dGluZ3M7XG4gICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGVzdHJveUxpc3RlbmVycywgdGhpcykuaGFzKHNlbGVjdGlvbikpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kZXN0cm95TGlzdGVuZXJzLCB0aGlzKS5hZGQoc2VsZWN0aW9uKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZExvY2FsSG9vaygnZGVzdHJveScsICgpID0+IHRoaXMuZGVzdHJveUJvcmRlcnMoc2VsZWN0aW9uKSk7XG4gICAgICB9XG4gICAgICBjb25zdCBib3JkZXJJbnN0YW5jZSA9IHRoaXMuZ2V0Qm9yZGVySW5zdGFuY2Uoc2VsZWN0aW9uKTtcbiAgICAgIGlmIChzZWxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIGJvcmRlckluc3RhbmNlID09PSBudWxsIHx8IGJvcmRlckluc3RhbmNlID09PSB2b2lkIDAgfHwgYm9yZGVySW5zdGFuY2UuZGlzYXBwZWFyKCk7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zY2FubmVyLCB0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24oc2VsZWN0aW9uKS5zY2FuKCk7XG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGNsYXNzTmFtZXNNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWVzTGF5ZXJzID0gY2xhc3NOYW1lc01hcC5nZXQoZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lc0xheWVycy5oYXMoY2xhc3NOYW1lKSAmJiBjcmVhdGVMYXllcnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lc0xheWVycy5zZXQoY2xhc3NOYW1lLCBjbGFzc05hbWVzTGF5ZXJzLmdldChjbGFzc05hbWUpICsgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbGFzc05hbWVzTGF5ZXJzLnNldChjbGFzc05hbWUsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjbGFzc05hbWVzTWFwLnNldChlbGVtZW50LCBuZXcgTWFwKFtbY2xhc3NOYW1lLCAxXV0pKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhlYWRlckF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgIGlmICghaGVhZGVyQXR0cmlidXRlc01hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgaGVhZGVyQXR0cmlidXRlc01hcC5zZXQoZWxlbWVudCwgW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgICAgICAgaGVhZGVyQXR0cmlidXRlc01hcC5nZXQoZWxlbWVudCkucHVzaCguLi5oZWFkZXJBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgY29ybmVycyA9IHNlbGVjdGlvbi5nZXRDb3JuZXJzKCk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKS5nZXRTZXR0aW5nKCdvbkJlZm9yZURyYXdCb3JkZXJzJywgY29ybmVycywgc2VsZWN0aW9uVHlwZSk7XG4gICAgICBib3JkZXJJbnN0YW5jZSA9PT0gbnVsbCB8fCBib3JkZXJJbnN0YW5jZSA9PT0gdm9pZCAwIHx8IGJvcmRlckluc3RhbmNlLmFwcGVhcihjb3JuZXJzKTtcbiAgICB9XG4gICAgY2xhc3NOYW1lc01hcC5mb3JFYWNoKChjbGFzc05hbWVzTGF5ZXJzLCBlbGVtZW50KSA9PiB7XG4gICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NDtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBBcnJheS5mcm9tKGNsYXNzTmFtZXNMYXllcnMpLm1hcChfcmVmID0+IHtcbiAgICAgICAgbGV0IFtjbGFzc05hbWUsIG9jY3VycmVuY2VDb3VudF0gPSBfcmVmO1xuICAgICAgICBpZiAob2NjdXJyZW5jZUNvdW50ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2NsYXNzTmFtZSwgLi4uQXJyYXkuZnJvbSh7XG4gICAgICAgICAgbGVuZ3RoOiBvY2N1cnJlbmNlQ291bnQgLSAxXG4gICAgICAgIH0sIChfLCBpKSA9PiBgJHtjbGFzc05hbWV9LSR7aSArIDF9YCldO1xuICAgICAgfSkuZmxhdCgpO1xuICAgICAgY2xhc3NOYW1lcy5mb3JFYWNoKGNsYXNzTmFtZSA9PiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FwcGxpZWRDbGFzc2VzLCB0aGlzKS5nZXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcykpLmFkZChjbGFzc05hbWUpKTtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoZWxlbWVudCwgY2xhc3NOYW1lcyk7XG4gICAgICBpZiAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyAmJiBBcnJheS5pc0FycmF5KChfY2xhc3NQcml2YXRlRmllbGRHZXQ0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQ0LmNlbGxBdHRyaWJ1dGVzKSkge1xuICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShlbGVtZW50LCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbnMsIHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRoZSBhdHRyaWJ1dGVzIGZvciB0aGUgaGVhZGVycyBpZiB0aGV5J3JlIGZvY3VzZWQuXG4gICAgQXJyYXkuZnJvbShoZWFkZXJBdHRyaWJ1dGVzTWFwLmtleXMoKSkuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKGVsZW1lbnQsIFsuLi5oZWFkZXJBdHRyaWJ1dGVzTWFwLmdldChlbGVtZW50KV0pO1xuICAgIH0pO1xuICB9XG59XG5leHBvcnRzLlNlbGVjdGlvbk1hbmFnZXIgPSBTZWxlY3Rpb25NYW5hZ2VyO1xuZnVuY3Rpb24gX3Jlc2V0Q2VsbHMoKSB7XG4gIGNvbnN0IGFwcGxpZWRPdmVybGF5c0NsYXNzZXMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FwcGxpZWRDbGFzc2VzLCB0aGlzKS5nZXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcykpO1xuICBjb25zdCBjbGFzc2VzVG9SZW1vdmUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKS53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMnKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY2xhc3Nlc1RvUmVtb3ZlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xhc3Nlc1RvUmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcHBsaWVkT3ZlcmxheXNDbGFzc2VzLmFkZChjbGFzc2VzVG9SZW1vdmVbaV0pO1xuICAgIH1cbiAgfVxuICBhcHBsaWVkT3ZlcmxheXNDbGFzc2VzLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NSwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NjtcbiAgICBjb25zdCBub2RlcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvckFsbChgLiR7Y2xhc3NOYW1lfWApO1xuICAgIGxldCBjZWxsQXR0cmlidXRlcyA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KChfY2xhc3NQcml2YXRlRmllbGRHZXQ1ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb25zLCB0aGlzKS5vcHRpb25zKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQ1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQ1LmNlbGxBdHRyaWJ1dGVzKSkge1xuICAgICAgY2VsbEF0dHJpYnV0ZXMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbnMsIHRoaXMpLm9wdGlvbnMuY2VsbEF0dHJpYnV0ZXMubWFwKGVsID0+IGVsWzBdKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoKF9jbGFzc1ByaXZhdGVGaWVsZEdldDYgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbnMsIHRoaXMpLm9wdGlvbnMpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDYuaGVhZGVyQXR0cmlidXRlcykpIHtcbiAgICAgIGNlbGxBdHRyaWJ1dGVzID0gWy4uLmNlbGxBdHRyaWJ1dGVzLCAuLi5fY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbnMsIHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAoZWwgPT4gZWxbMF0pXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKG5vZGVzW2ldLCBjbGFzc05hbWUpO1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSkobm9kZXNbaV0sIGNlbGxBdHRyaWJ1dGVzKTtcbiAgICB9XG4gIH0pO1xuICBhcHBsaWVkT3ZlcmxheXNDbGFzc2VzLmNsZWFyKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9IC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKipcbiAqIFNlbGVjdGlvbiBzY2FubmVyIG1vZHVsZSBzY2FucyB0aGUgcmVuZGVyZWQgY2VsbHMgYW5kIGhlYWRlcnMgYW5kIGlmIGl0IGZpbmRzIGFuIGludGVyc2VjdGlvbiB3aXRoXG4gKiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIFNlbGVjdGlvbiBjbGFzcyAoaGlnaGxpZ2h0KSBpdCByZXR1cm5zIHRoZSBET00gZWxlbWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIF9zZWxlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfYWN0aXZlT3ZlcmxheXNXb3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfU2VsZWN0aW9uU2Nhbm5lcl9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgU2VsZWN0aW9uU2Nhbm5lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFRoZSBtZXRob2QgdHJpZ2dlcnMgYSBjYWxsYmFjayBmb3IgZWFjaCByZW5kZXJlZCBjZWxsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIsIG51bWJlcik6IHZvaWR9IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byB0cmlnZ2VyLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfU2VsZWN0aW9uU2Nhbm5lcl9icmFuZCk7XG4gICAgLyoqXG4gICAgICogQWN0aXZlIFNlbGVjdGlvbiBpbnN0YW5jZSB0byBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHR5cGUge1NlbGVjdGlvbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2VsZWN0aW9uLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBXYWxrb250YWJsZSBpbnN0YW5jZSB0aGF0IHRoZSBzY2FucyBkZXBlbmRzIG9uLlxuICAgICAqXG4gICAgICogQHR5cGUge1dhbGtvbnRhYmxlfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9hY3RpdmVPdmVybGF5c1dvdCwgdm9pZCAwKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyB0aGUgV2Fsa29udGFibGUgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIHRha2luZyBpbnRvIGFjY291bnQgd2hpbGUgc2Nhbm5pbmcgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge1dhbGtvbnRhYmxlfSBhY3RpdmVPdmVybGF5c1dvdCBUaGUgV2Fsa29udGFibGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25TY2FubmVyfVxuICAgKi9cbiAgc2V0QWN0aXZlT3ZlcmxheShhY3RpdmVPdmVybGF5c1dvdCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMsIGFjdGl2ZU92ZXJsYXlzV290KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBTZWxlY3Rpb24gaW5zdGFuY2UgdG8gcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvbiBUaGUgU2VsZWN0aW9uIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uU2Nhbm5lcn1cbiAgICovXG4gIHNldEFjdGl2ZVNlbGVjdGlvbihzZWxlY3Rpb24pIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NlbGVjdGlvbiwgdGhpcywgc2VsZWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTY2FucyB0aGUgcmVuZGVyZWQgdGFibGUgd2l0aCBzZWxlY3Rpb24gYW5kIHJldHVybnMgZWxlbWVudHMgdGhhdCBpbnRlcnNlY3RzXG4gICAqIHdpdGggc2VsZWN0aW9uIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTFRhYmxlRWxlbWVudFtdfVxuICAgKi9cbiAgc2NhbigpIHtcbiAgICBjb25zdCBzZWxlY3Rpb25UeXBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb24sIHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGU7XG4gICAgY29uc3QgZWxlbWVudHMgPSBuZXcgU2V0KCk7XG5cbiAgICAvLyBUT0RPKGltcHJvdmVtZW50KTogdXNlIGhldXJpc3RpY3MgZnJvbSBjb29yZHMgdG8gZGV0ZWN0IHdoYXQgdHlwZSBvZiBzY2FuXG4gICAgLy8gdGhlIFNlbGVjdGlvbiBuZWVkcyBpbnN0ZWFkIG9mIHVzaW5nIGBzZWxlY3Rpb25UeXBlYCBwcm9wZXJ0eS5cbiAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ2FjdGl2ZS1oZWFkZXInKSB7XG4gICAgICB0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgICAgdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGVsZW1lbnQgPT4gZWxlbWVudHMuYWRkKGVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblR5cGUgPT09ICdhcmVhJykge1xuICAgICAgdGhpcy5zY2FuQ2VsbHNSYW5nZShlbGVtZW50ID0+IGVsZW1lbnRzLmFkZChlbGVtZW50KSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25UeXBlID09PSAnZm9jdXMnKSB7XG4gICAgICB0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgICAgdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGVsZW1lbnQgPT4gZWxlbWVudHMuYWRkKGVsZW1lbnQpKTtcbiAgICAgIHRoaXMuc2NhbkNlbGxzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gJ2ZpbGwnKSB7XG4gICAgICB0aGlzLnNjYW5DZWxsc1JhbmdlKGVsZW1lbnQgPT4gZWxlbWVudHMuYWRkKGVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblR5cGUgPT09ICdoZWFkZXInKSB7XG4gICAgICB0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgICAgdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGVsZW1lbnQgPT4gZWxlbWVudHMuYWRkKGVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblR5cGUgPT09ICdyb3cnKSB7XG4gICAgICB0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgICAgdGhpcy5zY2FuUm93c0luQ2VsbHNSYW5nZShlbGVtZW50ID0+IGVsZW1lbnRzLmFkZChlbGVtZW50KSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgdGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGVsZW1lbnQgPT4gZWxlbWVudHMuYWRkKGVsZW1lbnQpKTtcbiAgICAgIHRoaXMuc2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UoZWxlbWVudCA9PiBlbGVtZW50cy5hZGQoZWxlbWVudCkpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHM7XG4gIH1cblxuICAvKipcbiAgICogU2NhbnMgdGhlIHRhYmxlIChvbmx5IHJlbmRlcmVkIGhlYWRlcnMpIGFuZCBjb2xsZWN0IGFsbCBjb2x1bW4gaGVhZGVycyAoVEgpIHRoYXQgbWF0Y2hcbiAgICogdGhlIGNvb3JkaW5hdGVzIHBhc3NlZCBpbiB0aGUgU2VsZWN0aW9uIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKEhUTUxUYWJsZUVsZW1lbnQpOiB2b2lkfSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdHJpZ2dlci5cbiAgICovXG4gIHNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoY2FsbGJhY2spIHtcbiAgICBjb25zdCBbdG9wUm93LCB0b3BDb2x1bW4sIGJvdHRvbVJvdywgYm90dG9tQ29sdW1uXSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9uLCB0aGlzKS5nZXRDb3JuZXJzKCk7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKTtcbiAgICBjb25zdCByZW5kZXJlZENvbHVtbnNDb3VudCA9IHd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzQ291bnQgPSB3dFRhYmxlLmdldENvbHVtbkhlYWRlcnNDb3VudCgpO1xuICAgIGxldCBjdXJzb3IgPSAwO1xuICAgIGZvciAobGV0IGNvbHVtbiA9IC13dFRhYmxlLmdldFJvd0hlYWRlcnNDb3VudCgpOyBjb2x1bW4gPCByZW5kZXJlZENvbHVtbnNDb3VudDsgY29sdW1uKyspIHtcbiAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbiA9IHd0VGFibGUuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoY29sdW1uKTtcbiAgICAgIGlmIChzb3VyY2VDb2x1bW4gPCB0b3BDb2x1bW4gfHwgc291cmNlQ29sdW1uID4gYm90dG9tQ29sdW1uKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaGVhZGVyTGV2ZWwgPSAtY29sdW1uSGVhZGVyc0NvdW50OyBoZWFkZXJMZXZlbCA8IDA7IGhlYWRlckxldmVsKyspIHtcbiAgICAgICAgaWYgKGhlYWRlckxldmVsIDwgdG9wUm93IHx8IGhlYWRlckxldmVsID4gYm90dG9tUm93KSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpdmVCYXNlZEhlYWRlckxldmVsID0gaGVhZGVyTGV2ZWwgKyBjb2x1bW5IZWFkZXJzQ291bnQ7XG4gICAgICAgIGxldCBUSCA9IHd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKHNvdXJjZUNvbHVtbiwgcG9zaXRpdmVCYXNlZEhlYWRlckxldmVsKTtcbiAgICAgICAgY29uc3QgbmV3U291cmNlQ29sID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcykuZ2V0U2V0dGluZygnb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXInLCBzb3VyY2VDb2x1bW4sIHBvc2l0aXZlQmFzZWRIZWFkZXJMZXZlbCwge1xuICAgICAgICAgIHNlbGVjdGlvblR5cGU6IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9uLCB0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLFxuICAgICAgICAgIGNvbHVtbkN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgIHNlbGVjdGlvbldpZHRoOiBib3R0b21Db2x1bW4gLSB0b3BDb2x1bW4gKyAxXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobmV3U291cmNlQ29sID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1NvdXJjZUNvbCAhPT0gc291cmNlQ29sdW1uKSB7XG4gICAgICAgICAgVEggPSB3dFRhYmxlLmdldENvbHVtbkhlYWRlcihuZXdTb3VyY2VDb2wsIHBvc2l0aXZlQmFzZWRIZWFkZXJMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soVEgpO1xuICAgICAgfVxuICAgICAgY3Vyc29yICs9IDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHRoZSB0YWJsZSAob25seSByZW5kZXJlZCBoZWFkZXJzKSBhbmQgY29sbGVjdCBhbGwgcm93IGhlYWRlcnMgKFRIKSB0aGF0IG1hdGNoXG4gICAqIHRoZSBjb29yZGluYXRlcyBwYXNzZWQgaW4gdGhlIFNlbGVjdGlvbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihIVE1MVGFibGVFbGVtZW50KTogdm9pZH0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRyaWdnZXIuXG4gICAqL1xuICBzY2FuUm93c0luSGVhZGVyc1JhbmdlKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgW3RvcFJvdywgdG9wQ29sdW1uLCBib3R0b21Sb3csIGJvdHRvbUNvbHVtbl0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbiwgdGhpcykuZ2V0Q29ybmVycygpO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcyk7XG4gICAgY29uc3QgcmVuZGVyZWRSb3dzQ291bnQgPSB3dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk7XG4gICAgY29uc3Qgcm93SGVhZGVyc0NvdW50ID0gd3RUYWJsZS5nZXRSb3dIZWFkZXJzQ291bnQoKTtcbiAgICBsZXQgY3Vyc29yID0gMDtcbiAgICBmb3IgKGxldCByb3cgPSAtd3RUYWJsZS5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTsgcm93IDwgcmVuZGVyZWRSb3dzQ291bnQ7IHJvdysrKSB7XG4gICAgICBjb25zdCBzb3VyY2VSb3cgPSB3dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJvdyk7XG4gICAgICBpZiAoc291cmNlUm93IDwgdG9wUm93IHx8IHNvdXJjZVJvdyA+IGJvdHRvbVJvdykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGhlYWRlckxldmVsID0gLXJvd0hlYWRlcnNDb3VudDsgaGVhZGVyTGV2ZWwgPCAwOyBoZWFkZXJMZXZlbCsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJMZXZlbCA8IHRvcENvbHVtbiB8fCBoZWFkZXJMZXZlbCA+IGJvdHRvbUNvbHVtbikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aXZlQmFzZWRIZWFkZXJMZXZlbCA9IGhlYWRlckxldmVsICsgcm93SGVhZGVyc0NvdW50O1xuICAgICAgICBsZXQgVEggPSB3dFRhYmxlLmdldFJvd0hlYWRlcihzb3VyY2VSb3csIHBvc2l0aXZlQmFzZWRIZWFkZXJMZXZlbCk7XG4gICAgICAgIGNvbnN0IG5ld1NvdXJjZVJvdyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLmdldFNldHRpbmcoJ29uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyJywgc291cmNlUm93LCBwb3NpdGl2ZUJhc2VkSGVhZGVyTGV2ZWwsIHtcbiAgICAgICAgICBzZWxlY3Rpb25UeXBlOiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbiwgdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxcbiAgICAgICAgICByb3dDdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICBzZWxlY3Rpb25IZWlnaHQ6IGJvdHRvbVJvdyAtIHRvcFJvdyArIDFcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZXdTb3VyY2VSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3U291cmNlUm93ICE9PSBzb3VyY2VSb3cpIHtcbiAgICAgICAgICBUSCA9IHd0VGFibGUuZ2V0Um93SGVhZGVyKG5ld1NvdXJjZVJvdywgcG9zaXRpdmVCYXNlZEhlYWRlckxldmVsKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhUSCk7XG4gICAgICB9XG4gICAgICBjdXJzb3IgKz0gMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2NhbnMgdGhlIHRhYmxlIChvbmx5IHJlbmRlcmVkIGNlbGxzKSBhbmQgY29sbGVjdCBhbGwgY2VsbHMgKFRSKSB0aGF0IG1hdGNoXG4gICAqIHRoZSBjb29yZGluYXRlcyBwYXNzZWQgaW4gdGhlIFNlbGVjdGlvbiBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihIVE1MVGFibGVFbGVtZW50KTogdm9pZH0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRyaWdnZXIuXG4gICAqL1xuICBzY2FuQ2VsbHNSYW5nZShjYWxsYmFjaykge1xuICAgIGNvbnN0IFt0b3BSb3csIHRvcENvbHVtbiwgYm90dG9tUm93LCBib3R0b21Db2x1bW5dID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3Rpb24sIHRoaXMpLmdldENvcm5lcnMoKTtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlXG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpO1xuICAgIF9hc3NlcnRDbGFzc0JyYW5kKF9TZWxlY3Rpb25TY2FubmVyX2JyYW5kLCB0aGlzLCBfc2NhbkNlbGxzUmFuZ2UpLmNhbGwodGhpcywgKHNvdXJjZVJvdywgc291cmNlQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoc291cmNlUm93ID49IHRvcFJvdyAmJiBzb3VyY2VSb3cgPD0gYm90dG9tUm93ICYmIHNvdXJjZUNvbHVtbiA+PSB0b3BDb2x1bW4gJiYgc291cmNlQ29sdW1uIDw9IGJvdHRvbUNvbHVtbikge1xuICAgICAgICBjb25zdCBjZWxsID0gd3RUYWJsZS5nZXRDZWxsKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoc291cmNlUm93LCBzb3VyY2VDb2x1bW4pKTtcblxuICAgICAgICAvLyBzdXBwb3J0IGZvciBvbGQgQVBJXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxTZWxlY3Rpb25DbGFzcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWN0aXZlT3ZlcmxheXNXb3QsIHRoaXMpLmdldFNldHRpbmcoJ29uQWZ0ZXJEcmF3U2VsZWN0aW9uJywgc291cmNlUm93LCBzb3VyY2VDb2x1bW4sIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0aW9uLCB0aGlzKS5zZXR0aW5ncy5sYXllckxldmVsKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGRpdGlvbmFsU2VsZWN0aW9uQ2xhc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShjZWxsLCBhZGRpdGlvbmFsU2VsZWN0aW9uQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKGNlbGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHRoZSB0YWJsZSAob25seSByZW5kZXJlZCBjZWxscykgYW5kIGNvbGxlY3RzIGFsbCBjZWxscyAoVFIpIHRoYXQgbWF0Y2ggdGhlIGNvb3JkaW5hdGVzXG4gICAqIHBhc3NlZCBpbiB0aGUgU2VsZWN0aW9uIGluc3RhbmNlIGJ1dCBvbmx5IGZvciB0aGUgWCBheGlzIChyb3dzKS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihIVE1MVGFibGVFbGVtZW50KTogdm9pZH0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRyaWdnZXIuXG4gICAqL1xuICBzY2FuUm93c0luQ2VsbHNSYW5nZShjYWxsYmFjaykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21tYS1zcGFjaW5nXG4gICAgY29uc3QgW3RvcFJvdywsIGJvdHRvbVJvd10gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbiwgdGhpcykuZ2V0Q29ybmVycygpO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcyk7XG4gICAgX2Fzc2VydENsYXNzQnJhbmQoX1NlbGVjdGlvblNjYW5uZXJfYnJhbmQsIHRoaXMsIF9zY2FuQ2VsbHNSYW5nZSkuY2FsbCh0aGlzLCAoc291cmNlUm93LCBzb3VyY2VDb2x1bW4pID0+IHtcbiAgICAgIGlmIChzb3VyY2VSb3cgPj0gdG9wUm93ICYmIHNvdXJjZVJvdyA8PSBib3R0b21Sb3cpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHd0VGFibGUuZ2V0Q2VsbChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHNvdXJjZVJvdywgc291cmNlQ29sdW1uKSk7XG4gICAgICAgIGNhbGxiYWNrKGNlbGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNjYW5zIHRoZSB0YWJsZSAob25seSByZW5kZXJlZCBjZWxscykgYW5kIGNvbGxlY3RzIGFsbCBjZWxscyAoVFIpIHRoYXQgbWF0Y2ggdGhlIGNvb3JkaW5hdGVzXG4gICAqIHBhc3NlZCBpbiB0aGUgU2VsZWN0aW9uIGluc3RhbmNlIGJ1dCBvbmx5IGZvciB0aGUgWSBheGlzIChjb2x1bW5zKS5cbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihIVE1MVGFibGVFbGVtZW50KTogdm9pZH0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRyaWdnZXIuXG4gICAqL1xuICBzY2FuQ29sdW1uc0luQ2VsbHNSYW5nZShjYWxsYmFjaykge1xuICAgIGNvbnN0IFssIHRvcENvbHVtbiwsIGJvdHRvbUNvbHVtbl0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbiwgdGhpcykuZ2V0Q29ybmVycygpO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hY3RpdmVPdmVybGF5c1dvdCwgdGhpcyk7XG4gICAgX2Fzc2VydENsYXNzQnJhbmQoX1NlbGVjdGlvblNjYW5uZXJfYnJhbmQsIHRoaXMsIF9zY2FuQ2VsbHNSYW5nZSkuY2FsbCh0aGlzLCAoc291cmNlUm93LCBzb3VyY2VDb2x1bW4pID0+IHtcbiAgICAgIGlmIChzb3VyY2VDb2x1bW4gPj0gdG9wQ29sdW1uICYmIHNvdXJjZUNvbHVtbiA8PSBib3R0b21Db2x1bW4pIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHd0VGFibGUuZ2V0Q2VsbChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHNvdXJjZVJvdywgc291cmNlQ29sdW1uKSk7XG4gICAgICAgIGNhbGxiYWNrKGNlbGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5leHBvcnRzLlNlbGVjdGlvblNjYW5uZXIgPSBTZWxlY3Rpb25TY2FubmVyO1xuZnVuY3Rpb24gX3NjYW5DZWxsc1JhbmdlKGNhbGxiYWNrKSB7XG4gIGNvbnN0IHtcbiAgICB3dFRhYmxlXG4gIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FjdGl2ZU92ZXJsYXlzV290LCB0aGlzKTtcbiAgY29uc3QgcmVuZGVyZWRSb3dzQ291bnQgPSB3dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk7XG4gIGNvbnN0IHJlbmRlcmVkQ29sdW1uc0NvdW50ID0gd3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO1xuICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCByZW5kZXJlZFJvd3NDb3VudDsgcm93ICs9IDEpIHtcbiAgICBjb25zdCBzb3VyY2VSb3cgPSB3dFRhYmxlLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHJvdyk7XG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVuZGVyZWRDb2x1bW5zQ291bnQ7IGNvbHVtbiArPSAxKSB7XG4gICAgICBjYWxsYmFjayhzb3VyY2VSb3csIHd0VGFibGUuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoY29sdW1uKSk7XG4gICAgfVxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFRoZSBTZWxlY3Rpb24gY2xhc3MgYWxsb3dzIGhpZ2hsaWdodGluZyAoYnkgYXBwbHlpbmcgQ1NTIGNsYXNzKSB0aGUgdGFibGUncyBjZWxscyBvciBoZWFkZXJzXG4gKiBhbmQgc2V0dGluZyB1cCB0aGUgYm9yZGVycyBpZiBkZWZpbmVkIGluIHRoZSBzZXR0aW5ncy5cbiAqXG4gKiBUaGUgU2VsZWN0aW9uIGNvb3JkaW5hdGVzIG1heSBwb2ludCB0byB0aGUgY2VsbHMgKHBvc2l0aXZlIG51bWJlcnMpIG9yIGhlYWRlcnMgKG5lZ2F0aXZlIG51bWJlcnMpLlxuICpcbiAqIEBjbGFzcyBTZWxlY3Rpb25cbiAqL1xuY2xhc3MgU2VsZWN0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBUaGUgc2VsZWN0aW9uIHNldHRpbmdzIG9iamVjdC4gQHRvZG8gdHlwZS5cbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBUaGUgY2VsbCByYW5nZSBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBjZWxsUmFuZ2UpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgdGhpcy5jZWxsUmFuZ2UgPSBjZWxsUmFuZ2UgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgc2VsZWN0aW9uIGlzIGVtcHR5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbFJhbmdlID09PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjZWxsIGNvb3JkcyB0byB0aGUgc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBUaGUgY2VsbCBjb29yZGluYXRlcyB0byBhZGQuXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb259XG4gICAqL1xuICBhZGQoY29vcmRzKSB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLmNlbGxSYW5nZSA9IHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGNvb3Jkcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2VsbFJhbmdlLmV4cGFuZChjb29yZHMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBzZWxlY3Rpb24gcmFuZ2UgZnJvbSBvciB0byBwcm9wZXJ0eSBlcXVhbHMgb2xkQ29vcmRzLCByZXBsYWNlIGl0IHdpdGggbmV3Q29vcmRzLiBSZXR1cm4gYm9vbGVhblxuICAgKiBpbmZvcm1hdGlvbiBhYm91dCBzdWNjZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IG9sZENvb3JkcyBBbiBvbGQgY2VsbCBjb29yZGluYXRlcyB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IG5ld0Nvb3JkcyBUaGUgbmV3IGNlbGwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcmVwbGFjZShvbGRDb29yZHMsIG5ld0Nvb3Jkcykge1xuICAgIGlmICghdGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgIGlmICh0aGlzLmNlbGxSYW5nZS5mcm9tLmlzRXF1YWwob2xkQ29vcmRzKSkge1xuICAgICAgICB0aGlzLmNlbGxSYW5nZS5mcm9tID0gbmV3Q29vcmRzO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKG9sZENvb3JkcykpIHtcbiAgICAgICAgdGhpcy5jZWxsUmFuZ2UudG8gPSBuZXdDb29yZHM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuY2VsbFJhbmdlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3AgbGVmdCAob3IgdG9wIHJpZ2h0IGluIFJUTCkgYW5kIGJvdHRvbSByaWdodCAob3IgYm90dG9tIGxlZnQgaW4gUlRMKSBzZWxlY3Rpb24gY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gUmV0dXJucyBhcnJheSBvZiBjb29yZGluYXRlcyBmb3IgZXhhbXBsZSBgWzEsIDEsIDUsIDVdYC5cbiAgICovXG4gIGdldENvcm5lcnMoKSB7XG4gICAgY29uc3QgdG9wU3RhcnQgPSB0aGlzLmNlbGxSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kID0gdGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtcbiAgICByZXR1cm4gW3RvcFN0YXJ0LnJvdywgdG9wU3RhcnQuY29sLCBib3R0b21FbmQucm93LCBib3R0b21FbmQuY29sXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnZGVzdHJveScpO1xuICB9XG59XG4oMCwgX29iamVjdC5taXhpbikoU2VsZWN0aW9uLCBfbG9jYWxIb29rcy5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEB0b2RvIERlc2NyaWJlIG9wdGlvbnMuXG4gKiBAdHlwZWRlZiBTZXR0aW5nc1B1cmVcbiAqXG4gKiBAcHJvcGVydHkge09wdGlvbn0gZmFjYWRlIEB0b2RvIGRlc2MuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gYXJpYVRhZ3MgT3B0aW9uIGBhcmlhVGFnc2AuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gY2VsbFJlbmRlcmVyIE9wdGlvbiBgY2VsbFJlbmRlcmVyYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBjb2x1bW5IZWFkZXJzIE9wdGlvbiBgY29sdW1uSGVhZGVyc2AuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gY29sdW1uV2lkdGggT3B0aW9uIGBjb2x1bW5XaWR0aGAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gY3VycmVudFJvd0NsYXNzTmFtZSBPcHRpb24gYGN1cnJlbnRSb3dDbGFzc05hbWVgLlxuICogQHByb3BlcnR5IHtPcHRpb259IGRhdGEgT3B0aW9uIGBkYXRhYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBkZWZhdWx0Q29sdW1uV2lkdGggT3B0aW9uIGBkZWZhdWx0Q29sdW1uV2lkdGhgLlxuICogQHByb3BlcnR5IHtPcHRpb259IGRlZmF1bHRSb3dIZWlnaHQgT3B0aW9uIGBkZWZhdWx0Um93SGVpZ2h0YC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBleHRlcm5hbFJvd0NhbGN1bGF0b3IgT3B0aW9uIGBleHRlcm5hbFJvd0NhbGN1bGF0b3JgLlxuICogQHByb3BlcnR5IHtPcHRpb259IGZpeGVkQ29sdW1uc1N0YXJ0IE9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLlxuICogQHByb3BlcnR5IHtPcHRpb259IGZpeGVkUm93c0JvdHRvbSBPcHRpb24gYGZpeGVkUm93c0JvdHRvbWAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gZml4ZWRSb3dzVG9wIE9wdGlvbiBgZml4ZWRSb3dzVG9wYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBmcmVlemVPdmVybGF5cyBPcHRpb24gYGZyZWV6ZU92ZXJsYXlzYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBncm91cHMgT3B0aW9uIGBncm91cHNgLlxuICogQHByb3BlcnR5IHtPcHRpb259IGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXIgT3B0aW9uIGBoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBpc1J0bCBPcHRpb24gYGlzUnRsYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBpc0RhdGFWaWV3SW5zdGFuY2UgT3B0aW9uIGBpc0RhdGFWaWV3SW5zdGFuY2VgLlxuICogQHByb3BlcnR5IHtPcHRpb259IG1pblNwYXJlUm93cyBPcHRpb24gYG1pblNwYXJlUm93c2AuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIgT3B0aW9uIGBvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcmAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIgT3B0aW9uIGBvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcmAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyBPcHRpb24gYG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXNgLlxuICogQHByb3BlcnR5IHtPcHRpb259IG9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIE9wdGlvbiBgb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGhgLlxuICogQHByb3BlcnR5IHtPcHRpb259IHByZXZlbnRPdmVyZmxvdyBPcHRpb24gYHByZXZlbnRPdmVyZmxvd2AuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gcHJldmVudFdoZWVsIE9wdGlvbiBgcHJldmVudFdoZWVsYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSByZW5kZXJBbGxDb2x1bW5zIE9wdGlvbiBgcmVuZGVyQWxsQ29sdW1uc2AuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gcmVuZGVyQWxsUm93cyBPcHRpb24gYHJlbmRlckFsbFJvd3NgLlxuICogQHByb3BlcnR5IHtPcHRpb259IHJvd0hlYWRlcnMgT3B0aW9uIGByb3dIZWFkZXJzYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSByb3dIZWlnaHQgT3B0aW9uIGAsYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IE9wdGlvbiBgc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheWAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5IE9wdGlvbiBgc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5YC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSBzaG91bGRSZW5kZXJUb3BPdmVybGF5IE9wdGlvbiBgc2hvdWxkUmVuZGVyVG9wT3ZlcmxheWAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gc3RyZXRjaEggT3B0aW9uIGBzdHJldGNoSGAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gdGFibGUgT3B0aW9uIGB0YWJsZWAuXG4gKiBAcHJvcGVydHkge09wdGlvbn0gdG90YWxDb2x1bW5zIE9wdGlvbiBgdG90YWxDb2x1bW5zYC5cbiAqIEBwcm9wZXJ0eSB7T3B0aW9ufSB0b3RhbFJvd3MgT3B0aW9uIGB0b3RhbFJvd3NgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBiZWZvcmVEcmF3IE9wdGlvbiBgYmVmb3JlRHJhd2AuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IGNvbHVtbkhlYWRlckhlaWdodCBPcHRpb24gYGNvbHVtbkhlYWRlckhlaWdodGAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IGN1cnJlbnRDb2x1bW5DbGFzc05hbWUgT3B0aW9uIGBjdXJyZW50Q29sdW1uQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gaGVhZGVyQ2xhc3NOYW1lIE9wdGlvbiBgaGVhZGVyQ2xhc3NOYW1lYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25BZnRlckRyYXdTZWxlY3Rpb24gT3B0aW9uIGBvbkFmdGVyRHJhd1NlbGVjdGlvbmAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uQWZ0ZXJNb21lbnR1bVNjcm9sbCBPcHRpb24gYG9uQWZ0ZXJNb21lbnR1bVNjcm9sbGAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uQmVmb3JlRHJhd0JvcmRlcnMgT3B0aW9uIGBvbkJlZm9yZURyYXdCb3JkZXJzYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25CZWZvcmVUb3VjaFNjcm9sbCBPcHRpb24gYG9uQmVmb3JlVG91Y2hTY3JvbGxgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbkNlbGxDb250ZXh0TWVudSBPcHRpb24gYG9uQ2VsbENvbnRleHRNZW51YC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25DZWxsQ29ybmVyRGJsQ2xpY2sgT3B0aW9uIGBvbkNlbGxDb3JuZXJEYmxDbGlja2AuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uQ2VsbENvcm5lck1vdXNlRG93biBPcHRpb24gYG9uQ2VsbENvcm5lck1vdXNlRG93bmAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uQ2VsbERibENsaWNrIE9wdGlvbiBgb25DZWxsRGJsQ2xpY2tgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbkNlbGxNb3VzZURvd24gT3B0aW9uIGBvbkNlbGxNb3VzZURvd25gLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbkNlbGxNb3VzZU91dCBPcHRpb24gYG9uQ2VsbE1vdXNlT3V0YC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25DZWxsTW91c2VPdmVyIE9wdGlvbiBgb25DZWxsTW91c2VPdmVyYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25DZWxsTW91c2VVcCBPcHRpb24gYG9uQ2VsbE1vdXNlVXBgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbkRyYXcgT3B0aW9uIGBvbkRyYXdgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbk1vZGlmeUdldENlbGxDb29yZHMgT3B0aW9uIGBvbk1vZGlmeUdldENlbGxDb29yZHNgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbk1vZGlmeVJvd0hlYWRlcldpZHRoIE9wdGlvbiBgb25Nb2RpZnlSb3dIZWFkZXJXaWR0aGAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkgT3B0aW9uIGBvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5YC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkgT3B0aW9uIGBvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseWAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IG9uU2Nyb2xsSG9yaXpvbnRhbGx5IE9wdGlvbiBgb25TY3JvbGxIb3Jpem9udGFsbHlgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvblNjcm9sbFZlcnRpY2FsbHkgT3B0aW9uIGBvblNjcm9sbFZlcnRpY2FsbHlgLlxuICogQHByb3BlcnR5IHs/T3B0aW9ufSBvbldpbmRvd1Jlc2l6ZSBPcHRpb24gYG9uV2luZG93UmVzaXplYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gcm93SGVhZGVyV2lkdGggT3B0aW9uIGByb3dIZWFkZXJXaWR0aGAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IHNlbGVjdGlvbnMgT3B0aW9uIGBzZWxlY3Rpb25zYC5cbiAqIEBwcm9wZXJ0eSB7P09wdGlvbn0gdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUgT3B0aW9uIGB2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZWAuXG4gKiBAcHJvcGVydHkgez9PcHRpb259IHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIE9wdGlvbiBgdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGVgLlxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRWYWx1ZS5cbiAqIEB0eXBlZGVmIHsgVFZhbHVlIHwgQXJyYXkuPFRWYWx1ZT4gfCAoZnVuY3Rpb24oLi4uKik6IFRWYWx1ZSkgfSBPcHRpb25cbiAqL1xuXG4vKipcbiAqIEBjbGFzcyBTZXR0aW5nc1xuICovXG5jbGFzcyBTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NldHRpbmdzUHVyZX0gc2V0dGluZ3MgVGhlIHVzZXIgZGVmaW5lZCBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEB0eXBlIHtTZXR0aW5nc1B1cmV9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0dGluZ3NcIiwge30pO1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWZhdWx0cyB2YWx1ZXMgb2Ygc2V0dGluZ3MuXG4gICAgICogVm9pZCAwIG1lYW5zIGl0IGlzIHJlcXVpcmVkLCBudWxsIG1lYW5zIGl0IGNhbiBiZSBlbXB0eS5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKiBAdHlwZSB7UmVhZG9ubHk8U2V0dGluZ3NQdXJlPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZWZhdWx0c1wiLCBPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHRoaXMuZGVmYXVsdHMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAoc2V0dGluZ3Nba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3Nba2V5XSA9IHNldHRpbmdzW2tleV07XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgXCIke2tleX1cIiB3YXMgbm90IHByb3ZpZGVkYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldHRpbmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBkZWZhdWx0cyBmb3IgYSBzZXR0aW5ncy5cbiAgICogVm9pZCAwIG1lYW5zIGl0IGlzIHJlcXVpcmVkLCBudWxsIG1lYW5zIGl0IGNhbiBiZSBlbXB0eS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1NldHRpbmdzUHVyZX1cbiAgICovXG4gIGdldERlZmF1bHRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmYWNhZGU6IHVuZGVmaW5lZCxcbiAgICAgIHRhYmxlOiB1bmRlZmluZWQsXG4gICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIFdhbGtvbnRhYmxlIGluc3RhbmNlIGlzIHVzZWQgYXMgZGF0YXNldCB2aWV3ZXIuIFdoZW4gaXRzIGluc3RhbmNlIGlzIHVzZWQgYXNcbiAgICAgIC8vIGEgY29udGV4dCBtZW51LCBhdXRvY29tcGxldGUgbGlzdCwgZXRjLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgIGlzRGF0YVZpZXdJbnN0YW5jZTogdHJ1ZSxcbiAgICAgIC8vIHByZXNlbnRhdGlvbiBtb2RlXG4gICAgICBleHRlcm5hbFJvd0NhbGN1bGF0b3I6IGZhbHNlLFxuICAgICAgc3RyZXRjaEg6ICdub25lJyxcbiAgICAgIC8vIHZhbHVlczogYWxsLCBsYXN0LCBub25lXG4gICAgICBjdXJyZW50Um93Q2xhc3NOYW1lOiBudWxsLFxuICAgICAgY3VycmVudENvbHVtbkNsYXNzTmFtZTogbnVsbCxcbiAgICAgIHByZXZlbnRPdmVyZmxvdygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHByZXZlbnRXaGVlbDogZmFsc2UsXG4gICAgICAvLyBkYXRhIHNvdXJjZVxuICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgZnJlZXplT3ZlcmxheXM6IGZhbHNlLFxuICAgICAgLy8gTnVtYmVyIG9mIHJlbmRlcmFibGUgY29sdW1ucyBmb3IgdGhlIGxlZnQgb3ZlcmxheS5cbiAgICAgIGZpeGVkQ29sdW1uc1N0YXJ0OiAwLFxuICAgICAgLy8gTnVtYmVyIG9mIHJlbmRlcmFibGUgcm93cyBmb3IgdGhlIHRvcCBvdmVybGF5LlxuICAgICAgZml4ZWRSb3dzVG9wOiAwLFxuICAgICAgLy8gTnVtYmVyIG9mIHJlbmRlcmFibGUgcm93cyBmb3IgdGhlIGJvdHRvbSBvdmVybGF5LlxuICAgICAgZml4ZWRSb3dzQm90dG9tOiAwLFxuICAgICAgLy8gRW5hYmxlIHRoZSBpbmxpbmUgc3RhcnQgb3ZlcmxheSB3aGVuIGNvbmRpdGlvbnMgYXJlIG1ldCAobGVmdCBmb3IgTFRSIGFuZCByaWdodCBmb3IgUlRMIGRvY3VtZW50IG1vZGUpLlxuICAgICAgc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0JykgPiAwIHx8IHRoaXMuZ2V0U2V0dGluZygncm93SGVhZGVycycpLmxlbmd0aCA+IDA7XG4gICAgICB9LFxuICAgICAgLy8gRW5hYmxlIHRoZSB0b3Agb3ZlcmxheSB3aGVuIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICAgIHNob3VsZFJlbmRlclRvcE92ZXJsYXk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZygnZml4ZWRSb3dzVG9wJykgPiAwIHx8IHRoaXMuZ2V0U2V0dGluZygnY29sdW1uSGVhZGVycycpLmxlbmd0aCA+IDA7XG4gICAgICB9LFxuICAgICAgLy8gRW5hYmxlIHRoZSBib3R0b20gb3ZlcmxheSB3aGVuIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICAgIHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJykgPiAwO1xuICAgICAgfSxcbiAgICAgIG1pblNwYXJlUm93czogMCxcbiAgICAgIC8vIHRoaXMgbXVzdCBiZSBhcnJheSBvZiBmdW5jdGlvbnM6IFtmdW5jdGlvbiAocm93LCBUSCkge31dXG4gICAgICByb3dIZWFkZXJzKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9LFxuICAgICAgLy8gdGhpcyBtdXN0IGJlIGFycmF5IG9mIGZ1bmN0aW9uczogW2Z1bmN0aW9uIChjb2x1bW4sIFRIKSB7fV1cbiAgICAgIGNvbHVtbkhlYWRlcnMoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0sXG4gICAgICB0b3RhbFJvd3M6IHVuZGVmaW5lZCxcbiAgICAgIHRvdGFsQ29sdW1uczogdW5kZWZpbmVkLFxuICAgICAgY2VsbFJlbmRlcmVyOiAocm93LCBjb2x1bW4sIFREKSA9PiB7XG4gICAgICAgIGNvbnN0IGNlbGxEYXRhID0gdGhpcy5nZXRTZXR0aW5nKCdkYXRhJywgcm93LCBjb2x1bW4pO1xuICAgICAgICAoMCwgX2VsZW1lbnQuZmFzdElubmVyVGV4dCkoVEQsIGNlbGxEYXRhID09PSB1bmRlZmluZWQgfHwgY2VsbERhdGEgPT09IG51bGwgPyAnJyA6IGNlbGxEYXRhKTtcbiAgICAgIH0sXG4gICAgICAvLyBjb2x1bW5XaWR0aDogNTAsXG4gICAgICBjb2x1bW5XaWR0aCgpIHtcbiAgICAgICAgLy8gcmV0dXJuIHVuZGVmaW5lZCBtZWFucyB1c2UgZGVmYXVsdCBzaXplIGZvciB0aGUgcmVuZGVyZWQgY2VsbCBjb250ZW50XG4gICAgICB9LFxuICAgICAgcm93SGVpZ2h0KCkge1xuICAgICAgICAvLyByZXR1cm4gdW5kZWZpbmVkIG1lYW5zIHVzZSBkZWZhdWx0IHNpemUgZm9yIHRoZSByZW5kZXJlZCBjZWxsIGNvbnRlbnRcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0Um93SGVpZ2h0OiAyMyxcbiAgICAgIGRlZmF1bHRDb2x1bW5XaWR0aDogNTAsXG4gICAgICBzZWxlY3Rpb25zOiBudWxsLFxuICAgICAgaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjogZmFsc2UsXG4gICAgICB2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTogbnVsbCxcbiAgICAgIHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiBudWxsLFxuICAgICAgLy8gY2FsbGJhY2tzXG4gICAgICBvbkNlbGxNb3VzZURvd246IG51bGwsXG4gICAgICBvbkNlbGxDb250ZXh0TWVudTogbnVsbCxcbiAgICAgIG9uQ2VsbE1vdXNlT3ZlcjogbnVsbCxcbiAgICAgIG9uQ2VsbE1vdXNlT3V0OiBudWxsLFxuICAgICAgb25DZWxsTW91c2VVcDogbnVsbCxcbiAgICAgIC8vIG9uQ2VsbE1vdXNlT3V0OiBudWxsLFxuICAgICAgb25DZWxsRGJsQ2xpY2s6IG51bGwsXG4gICAgICBvbkNlbGxDb3JuZXJNb3VzZURvd246IG51bGwsXG4gICAgICBvbkNlbGxDb3JuZXJEYmxDbGljazogbnVsbCxcbiAgICAgIGJlZm9yZURyYXc6IG51bGwsXG4gICAgICBvbkRyYXc6IG51bGwsXG4gICAgICBvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiBudWxsLFxuICAgICAgb25BZnRlckRyYXdTZWxlY3Rpb246IG51bGwsXG4gICAgICBvbkJlZm9yZURyYXdCb3JkZXJzOiBudWxsLFxuICAgICAgLy8gdmlld3BvcnQgc2Nyb2xsIGhvb2tzXG4gICAgICBvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OiBjb2x1bW4gPT4gY29sdW1uLFxuICAgICAgb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6IHJvdyA9PiByb3csXG4gICAgICAvLyBuYXRpdmUgc2Nyb2xsIGhvb2tzXG4gICAgICBvblNjcm9sbEhvcml6b250YWxseTogbnVsbCxcbiAgICAgIG9uU2Nyb2xsVmVydGljYWxseTogbnVsbCxcbiAgICAgIC8vXG4gICAgICBvbkJlZm9yZVRvdWNoU2Nyb2xsOiBudWxsLFxuICAgICAgb25BZnRlck1vbWVudHVtU2Nyb2xsOiBudWxsLFxuICAgICAgb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6IHdpZHRoID0+IHdpZHRoLFxuICAgICAgb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDogbnVsbCxcbiAgICAgIG9uTW9kaWZ5R2V0Q2VsbENvb3JkczogbnVsbCxcbiAgICAgIG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOiBzb3VyY2VSb3cgPT4gc291cmNlUm93LFxuICAgICAgb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6IHNvdXJjZUNvbCA9PiBzb3VyY2VDb2wsXG4gICAgICBvbldpbmRvd1Jlc2l6ZTogbnVsbCxcbiAgICAgIG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTogbnVsbCxcbiAgICAgIHJlbmRlckFsbENvbHVtbnM6IGZhbHNlLFxuICAgICAgcmVuZGVyQWxsUm93czogZmFsc2UsXG4gICAgICBncm91cHM6IGZhbHNlLFxuICAgICAgcm93SGVhZGVyV2lkdGg6IG51bGwsXG4gICAgICBjb2x1bW5IZWFkZXJIZWlnaHQ6IG51bGwsXG4gICAgICBoZWFkZXJDbGFzc05hbWU6IG51bGwsXG4gICAgICBydGxNb2RlOiBmYWxzZSxcbiAgICAgIGFyaWFUYWdzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gc2V0dGluZ3MgVGhlIHNpbmd1bGFyIHNldHRpbmdzIHRvIHVwZGF0ZSBvciBpZiBwYXNzZWQgYXMgb2JqZWN0IHRvIG1lcmdlIHdpdGguXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgcGFzc2VkIGFzIHN0cmluZy5cbiAgICogQHJldHVybnMge1NldHRpbmdzfVxuICAgKi9cbiAgdXBkYXRlKHNldHRpbmdzLCB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzZXR0aW5ncyBpcyBvYmplY3RcbiAgICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHNldHRpbmdzLCAoc2V0dGluZ1ZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgdGhpcy5zZXR0aW5nc1trZXldID0gc2V0dGluZ1ZhbHVlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlmIHZhbHVlIGlzIGRlZmluZWQgdGhlbiBzZXR0aW5ncyBpcyB0aGUga2V5XG4gICAgICB0aGlzLnNldHRpbmdzW3NldHRpbmdzXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2V0dGluZyBieSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0geyRLZXlzPFNldHRpbmdzUHVyZT59IGtleSBUaGUgc2V0dGluZ3Mga2V5IHRvIHJldHJpZXZlLlxuICAgKiBAcGFyYW0geyp9IFtwYXJhbTFdIEFkZGl0aW9uYWwgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgb3B0aW9ucyBkZWZpbmVkIGFzIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyp9IFtwYXJhbTJdIEFkZGl0aW9uYWwgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgb3B0aW9ucyBkZWZpbmVkIGFzIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyp9IFtwYXJhbTNdIEFkZGl0aW9uYWwgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgb3B0aW9ucyBkZWZpbmVkIGFzIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyp9IFtwYXJhbTRdIEFkZGl0aW9uYWwgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgb3B0aW9ucyBkZWZpbmVkIGFzIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldFNldHRpbmcoa2V5LCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3Nba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Nba2V5XShwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW0xICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2tleV0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXR0aW5nc1trZXldW3BhcmFtMV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzW2tleV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2V0dGluZyB2YWx1ZSB3aXRob3V0IGFueSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBzZXR0aW5ncyBrZXkgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0U2V0dGluZ1B1cmUoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3Nba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgc2V0dGluZyBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0ga2V5IFRoZSBzZXR0aW5ncyBrZXkgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzKGtleSkge1xuICAgIHJldHVybiAhIXRoaXMuc2V0dGluZ3Nba2V5XTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2V0dGluZ3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG52YXIgX2NvbHVtbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZmlsdGVyL2NvbHVtblwiKSk7XG52YXIgX3JvdyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZmlsdGVyL3Jvd1wiKSk7XG52YXIgX3JlbmRlcmVyID0gcmVxdWlyZShcIi4vcmVuZGVyZXJcIik7XG52YXIgX2NvbHVtbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2NvbHVtblwiKSk7XG52YXIgX3JvdzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL3Jvd1wiKSk7XG52YXIgX292ZXJsYXkgPSByZXF1aXJlKFwiLi9vdmVybGF5XCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQHRvZG8gVGhlc2UgbWl4ZXMgYXJlIG5ldmVyIGFkZGVkIHRvIHRoZSBjbGFzcyBUYWJsZSwgaG93ZXZlciB0aGVpciBtZW1iZXJzIGFyZSB1c2VkIGhlcmUuXG4gKiBAdG9kbyBDb250aW51ZTogUG90ZW50aWFsbHkgaXQgd29ya3Mgb25seSwgYmVjYXVzZSBzb21lIG9mIHRoZXNlIG1peGVzIGFyZSBhZGRlZCB0byBldmVyeSBpbmhlcml0ZWQgY2xhc3MuXG4gKiBAdG9kbyBSZWZhY3RvcmluZywgbW92ZSBjb2RlIGZyb20gYGlmKHRoaXMuaXNNYXN0ZXIpYCBpbnRvIE1hc3RlclRhYmxlLCBhbmQgb3RoZXJzIGxpa2UgdGhhdC5cbiAqIEBtaXhlcyBzdGlja3lDb2x1bW5zU3RhcnRcbiAqIEBtaXhlcyBzdGlja3lSb3dzQm90dG9tXG4gKiBAbWl4ZXMgc3RpY2t5Um93c1RvcFxuICogQG1peGVzIGNhbGN1bGF0ZWRSb3dzXG4gKiBAbWl4ZXMgY2FsY3VsYXRlZENvbHVtbnNcbiAqIEBhYnN0cmFjdFxuICovXG5jbGFzcyBUYWJsZSB7XG4gIC8qKlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHBhcmFtIHtUYWJsZURhb30gZGF0YUFjY2Vzc09iamVjdCBUaGUgZGF0YSBhY2Nlc3Mgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEZ1bmN0aW9uIHdoaWNoIHJldHVybiBwcm9wZXIgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7J21hc3Rlcid8Q0xPTkVfVFlQRVNfRU5VTX0gbmFtZSBPdmVybGF5IG5hbWUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzLCBuYW1lKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEB0eXBlIHtTZXR0aW5nc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3dFNldHRpbmdzXCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRvbUJpbmRpbmdzXCIsIHZvaWQgMCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiVEJPRFlcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiVEhFQURcIiwgbnVsbCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiQ09MR1JPVVBcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBoYXMgaGVpZ2h0IGJpZ2dlciB0aGFuIDBweC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhhc1RhYmxlSGVpZ2h0XCIsIHRydWUpO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGUgdGFibGUgaGFzIHdpZHRoIGJpZ2dlciB0aGFuIDBweC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhhc1RhYmxlV2lkdGhcIiwgdHJ1ZSk7XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIGlmIHRoZSB0YWJsZSBpcyB2aXNpYmxlLiBCeSB2aXNpYmxlLCBpdCBtZWFucyB0aGF0IHRoZSBob2xkZXJcbiAgICAgKiBlbGVtZW50IGhhcyBDU1MgJ2Rpc3BsYXknIHByb3BlcnR5IGRpZmZlcmVudCB0aGFuICdub25lJy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzVGFibGVWaXNpYmxlXCIsIGZhbHNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0YWJsZU9mZnNldFwiLCAwKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob2xkZXJPZmZzZXRcIiwgMCk7XG4gICAgdGhpcy5kb21CaW5kaW5ncyA9IGRvbUJpbmRpbmdzO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyBpZiB0aGlzIGluc3RhbmNlIGlzIG9mIHR5cGUgYE1hc3RlclRhYmxlYCAoaS5lLiBJdCBpcyBOT1QgYW4gb3ZlcmxheSkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmlzTWFzdGVyID0gbmFtZSA9PT0gJ21hc3Rlcic7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3QgPSBkYXRhQWNjZXNzT2JqZWN0O1xuICAgIHRoaXMuZmFjYWRlR2V0dGVyID0gZmFjYWRlR2V0dGVyO1xuICAgIHRoaXMud3RTZXR0aW5ncyA9IHd0U2V0dGluZ3M7XG5cbiAgICAvLyBsZWdhY3kgc3VwcG9ydFxuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290OyAvLyBUT0RPIHJlZmFjdG9yaW5nOiBpdCBtaWdodCBiZSByZW1vdmVkIGhlcmUsIGFuZCBwcm92aWRlcyBsZWdhY3kgc3VwcG9ydCB0aHJvdWdoIGZhY2FkZS5cbiAgICB0aGlzLndvdCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3Q7XG4gICAgdGhpcy5UQUJMRSA9IGRvbUJpbmRpbmdzLnJvb3RUYWJsZTtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlVGV4dE5vZGVzKSh0aGlzLlRBQkxFKTtcblxuICAgIC8vIFRPRE8gcmVmYWN0b3JpbmcsIHRvIHJlY29nbml6ZSB0aGUgbGVnaXRpbWFjeSBvZiBtb3ZpbmcgdGhlbSBpbnRvIGRvbUJpZGluZ3NcbiAgICB0aGlzLnNwcmVhZGVyID0gdGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKTtcbiAgICB0aGlzLmhpZGVyID0gdGhpcy5jcmVhdGVIaWRlcih0aGlzLnNwcmVhZGVyKTtcbiAgICB0aGlzLmhvbGRlciA9IHRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpO1xuICAgIHRoaXMud3RSb290RWxlbWVudCA9IHRoaXMuaG9sZGVyLnBhcmVudE5vZGU7XG4gICAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICAgIHRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpOyAvLyB0b2RvIHdvdywgSXQgY2FsbHMgbWV0aG9kIGZyb20gY2hpbGQgY2xhc3MgKE1hc3RlclRhYmxlKS5cbiAgICB9XG4gICAgdGhpcy5maXhUYWJsZURvbVRyZWUoKTtcbiAgICB0aGlzLnJvd0ZpbHRlciA9IG51bGw7IC8vIFRPRE8gcmVmYWN0b3JpbmcsIGVsaW1pbmF0ZSBhbGwgKHJlKWNyZWF0aW9ucyBvZiB0aGlzIG9iamVjdCwgdGhlbiB1cGRhdGVzIHN0YXRlIHdoZW4gbmVlZGVkLlxuICAgIHRoaXMuY29sdW1uRmlsdGVyID0gbnVsbDsgLy8gVE9ETyByZWZhY3RvcmluZywgZWxpbWluYXRlIGFsbCAocmUpY3JlYXRpb25zIG9mIHRoaXMgb2JqZWN0LCB0aGVuIHVwZGF0ZXMgc3RhdGUgd2hlbiBuZWVkZWQuXG4gICAgdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGggPSBmYWxzZTtcbiAgICBjb25zdCBvcmlnUm93SGVhZGVyV2lkdGggPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoJ3Jvd0hlYWRlcldpZHRoJyk7XG5cbiAgICAvLyBGaXggZm9yIGp1bXBpbmcgcm93IGhlYWRlcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL2lzc3Vlcy8zODUwKVxuICAgIHRoaXMud3RTZXR0aW5ncy51cGRhdGUoJ3Jvd0hlYWRlcldpZHRoJywgKCkgPT4gdGhpcy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgob3JpZ1Jvd0hlYWRlcldpZHRoKSk7XG4gICAgdGhpcy5yb3dVdGlscyA9IG5ldyBfcm93Mi5kZWZhdWx0KHRoaXMuZGF0YUFjY2Vzc09iamVjdCwgdGhpcy53dFNldHRpbmdzKTsgLy8gVE9ETyByZWZhY3RvcmluZywgSXQgY2FuIGJlIHBhc3NlZCB0aHJvdWdoIElPQy5cbiAgICB0aGlzLmNvbHVtblV0aWxzID0gbmV3IF9jb2x1bW4yLmRlZmF1bHQodGhpcy5kYXRhQWNjZXNzT2JqZWN0LCB0aGlzLnd0U2V0dGluZ3MpOyAvLyBUT0RPIHJlZmFjdG9yaW5nLCBJdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggSU9DLlxuXG4gICAgdGhpcy50YWJsZVJlbmRlcmVyID0gbmV3IF9yZW5kZXJlci5SZW5kZXJlcih7XG4gICAgICAvLyBUT0RPIHJlZmFjdG9yaW5nLCBJdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggSU9DLlxuICAgICAgVEFCTEU6IHRoaXMuVEFCTEUsXG4gICAgICBUSEVBRDogdGhpcy5USEVBRCxcbiAgICAgIENPTEdST1VQOiB0aGlzLkNPTEdST1VQLFxuICAgICAgVEJPRFk6IHRoaXMuVEJPRFksXG4gICAgICByb3dVdGlsczogdGhpcy5yb3dVdGlscyxcbiAgICAgIGNvbHVtblV0aWxzOiB0aGlzLmNvbHVtblV0aWxzLFxuICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoJ2NlbGxSZW5kZXJlcicpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gdGhhdCBpcyB0cnVlIGlmIHRoaXMgVGFibGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIG92ZXJsYXksIGlkZW50aWZpZWQgYnkgdGhlIG92ZXJsYXkgbmFtZS5cbiAgICogRm9yIE1hc3RlclRhYmxlLCBpdCByZXR1cm5zIGZhbHNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3ZlcmxheVR5cGVOYW1lIFRoZSBvdmVybGF5IHR5cGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXMob3ZlcmxheVR5cGVOYW1lKSB7XG4gICAgLy8gdG9kbyByZWZhY3RvcmluZzogZWxpbWluYXRlIGFsbCBwcm90ZWN0ZWQgYW5kIHByaXZhdGUgdXNhZ2VzXG4gICAgcmV0dXJuIHRoaXMubmFtZSA9PT0gb3ZlcmxheVR5cGVOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBmaXhUYWJsZURvbVRyZWUoKSB7XG4gICAgY29uc3Qgcm9vdERvY3VtZW50ID0gdGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQ7XG4gICAgdGhpcy5UQk9EWSA9IHRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcbiAgICBpZiAoIXRoaXMuVEJPRFkpIHtcbiAgICAgIHRoaXMuVEJPRFkgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcbiAgICAgIHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSk7XG4gICAgfVxuICAgIHRoaXMuVEhFQUQgPSB0aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgaWYgKCF0aGlzLlRIRUFEKSB7XG4gICAgICB0aGlzLlRIRUFEID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoZWFkJyk7XG4gICAgICB0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELCB0aGlzLlRCT0RZKTtcbiAgICB9XG4gICAgdGhpcy5DT0xHUk9VUCA9IHRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcignY29sZ3JvdXAnKTtcbiAgICBpZiAoIXRoaXMuQ09MR1JPVVApIHtcbiAgICAgIHRoaXMuQ09MR1JPVVAgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY29sZ3JvdXAnKTtcbiAgICAgIHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09MR1JPVVAsIHRoaXMuVEhFQUQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUVsZW1lbnR9IHRhYmxlIEFuIGVsZW1lbnQgdG8gcHJvY2Vzcy5cbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgY3JlYXRlU3ByZWFkZXIodGFibGUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0YWJsZS5wYXJlbnROb2RlO1xuICAgIGxldCBzcHJlYWRlcjtcbiAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8ICEoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKHBhcmVudCwgJ3d0SG9sZGVyJykpIHtcbiAgICAgIHNwcmVhZGVyID0gdGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBzcHJlYWRlci5jbGFzc05hbWUgPSAnd3RTcHJlYWRlcic7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIC8vIGlmIFRBQkxFIGlzIGRldGFjaGVkIChlLmcuIGluIEphc21pbmUgdGVzdCksIGl0IGhhcyBubyBwYXJlbnROb2RlIHNvIHdlIGNhbm5vdCBhdHRhY2ggaG9sZGVyIHRvIGl0XG4gICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoc3ByZWFkZXIsIHRhYmxlKTtcbiAgICAgIH1cbiAgICAgIHNwcmVhZGVyLmFwcGVuZENoaWxkKHRhYmxlKTtcbiAgICB9XG4gICAgc3ByZWFkZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgIGlmICh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnYXJpYVRhZ3MnKSkge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoc3ByZWFkZXIsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCldKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwcmVhZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHNwcmVhZGVyIEFuIGVsZW1lbnQgdG8gdGhlIGhpZGVyIGVsZW1lbnQgaXMgaW5qZWN0ZWQuXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGNyZWF0ZUhpZGVyKHNwcmVhZGVyKSB7XG4gICAgY29uc3QgcGFyZW50ID0gc3ByZWFkZXIucGFyZW50Tm9kZTtcbiAgICBsZXQgaGlkZXI7XG4gICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShwYXJlbnQsICd3dEhvbGRlcicpKSB7XG4gICAgICBoaWRlciA9IHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgaGlkZXIuY2xhc3NOYW1lID0gJ3d0SGlkZXInO1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAvLyBpZiBUQUJMRSBpcyBkZXRhY2hlZCAoZS5nLiBpbiBKYXNtaW5lIHRlc3QpLCBpdCBoYXMgbm8gcGFyZW50Tm9kZSBzbyB3ZSBjYW5ub3QgYXR0YWNoIGhvbGRlciB0byBpdFxuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGhpZGVyLCBzcHJlYWRlcik7XG4gICAgICB9XG4gICAgICBoaWRlci5hcHBlbmRDaGlsZChzcHJlYWRlcik7XG4gICAgfVxuICAgIGlmICh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnYXJpYVRhZ3MnKSkge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoaGlkZXIsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCldKTtcbiAgICB9XG4gICAgcmV0dXJuIGhpZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGhpZGVyIEFuIGVsZW1lbnQgdG8gdGhlIGhvbGRlciBlbGVtZW50IGlzIGluamVjdGVkLlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBjcmVhdGVIb2xkZXIoaGlkZXIpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBoaWRlci5wYXJlbnROb2RlO1xuICAgIGxldCBob2xkZXI7XG4gICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSB8fCAhKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShwYXJlbnQsICd3dEhvbGRlcicpKSB7XG4gICAgICBob2xkZXIgPSB0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGhvbGRlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgICBob2xkZXIuY2xhc3NOYW1lID0gJ3d0SG9sZGVyJztcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gaWYgVEFCTEUgaXMgZGV0YWNoZWQgKGUuZy4gaW4gSmFzbWluZSB0ZXN0KSwgaXQgaGFzIG5vIHBhcmVudE5vZGUgc28gd2UgY2Fubm90IGF0dGFjaCBob2xkZXIgdG8gaXRcbiAgICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShob2xkZXIsIGhpZGVyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTWFzdGVyKSB7XG4gICAgICAgIGhvbGRlci5wYXJlbnROb2RlLmNsYXNzTmFtZSArPSAnaHRfbWFzdGVyIGhhbmRzb250YWJsZSc7XG4gICAgICAgIGhvbGRlci5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgnZGlyJywgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCdydGxNb2RlJykgPyAncnRsJyA6ICdsdHInKTtcbiAgICAgICAgaWYgKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdhcmlhVGFncycpKSB7XG4gICAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoaG9sZGVyLnBhcmVudE5vZGUsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaG9sZGVyLmFwcGVuZENoaWxkKGhpZGVyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdhcmlhVGFncycpKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShob2xkZXIsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCldKTtcbiAgICB9XG4gICAgcmV0dXJuIGhvbGRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXdzIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZmFzdERyYXc9ZmFsc2VdIElmIFRSVUUsIHdpbGwgdHJ5IHRvIGF2b2lkIGZ1bGwgcmVkcmF3IGFuZCBvbmx5IHVwZGF0ZSB0aGUgYm9yZGVyIHBvc2l0aW9ucy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIEZBTFNFIG9yIFVOREVGSU5FRCwgd2lsbCBwZXJmb3JtIGEgZnVsbCByZWRyYXcuXG4gICAqIEByZXR1cm5zIHtUYWJsZX1cbiAgICovXG4gIGRyYXcoKSB7XG4gICAgbGV0IGZhc3REcmF3ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBjb25zdCB7XG4gICAgICB3dFNldHRpbmdzXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgd3RPdmVybGF5cyxcbiAgICAgIHd0Vmlld3BvcnRcbiAgICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxSb3dzJyk7XG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKTtcbiAgICBjb25zdCByb3dIZWFkZXJzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJyk7XG4gICAgY29uc3Qgcm93SGVhZGVyc0NvdW50ID0gcm93SGVhZGVycy5sZW5ndGg7XG4gICAgY29uc3QgY29sdW1uSGVhZGVycyA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnY29sdW1uSGVhZGVycycpO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnNDb3VudCA9IGNvbHVtbkhlYWRlcnMubGVuZ3RoO1xuICAgIGxldCBydW5GYXN0RHJhdyA9IGZhc3REcmF3O1xuICAgIGlmICh0aGlzLmlzTWFzdGVyKSB7XG4gICAgICB0aGlzLmhvbGRlck9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHRoaXMuaG9sZGVyKTtcbiAgICAgIHJ1bkZhc3REcmF3ID0gd3RWaWV3cG9ydC5jcmVhdGVSZW5kZXJDYWxjdWxhdG9ycyhydW5GYXN0RHJhdyk7XG4gICAgICBpZiAocm93SGVhZGVyc0NvdW50ICYmICF3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0JykpIHtcbiAgICAgICAgY29uc3QgbGVmdFNjcm9sbFBvcyA9IHd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSB0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDtcbiAgICAgICAgdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGggPSBsZWZ0U2Nyb2xsUG9zICE9PSAwO1xuICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgpIHtcbiAgICAgICAgICBydW5GYXN0RHJhdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWFzdGVyKSB7XG4gICAgICB3dE92ZXJsYXlzLmJlZm9yZURyYXcoKTtcbiAgICB9XG4gICAgaWYgKHJ1bkZhc3REcmF3KSB7XG4gICAgICBpZiAodGhpcy5pc01hc3Rlcikge1xuICAgICAgICAvLyBpbiBjYXNlIHdlIG9ubHkgc2Nyb2xsZWQgd2l0aG91dCByZWRyYXcsIHVwZGF0ZSB2aXNpYmxlIHJvd3MgaW5mb3JtYXRpb24gaW4gb2xkUm93c0NhbGN1bGF0b3JcbiAgICAgICAgd3RWaWV3cG9ydC5jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKTtcbiAgICAgICAgd3RWaWV3cG9ydC5jcmVhdGVQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcnMoKTtcbiAgICAgIH1cbiAgICAgIGlmICh3dE92ZXJsYXlzKSB7XG4gICAgICAgIHd0T3ZlcmxheXMucmVmcmVzaCh0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICAgICAgdGhpcy50YWJsZU9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHRoaXMuVEFCTEUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZU9mZnNldCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5wYXJlbnRUYWJsZU9mZnNldDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0Um93ID0gdG90YWxSb3dzID4gMCA/IHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpIDogMDtcbiAgICAgIGNvbnN0IHN0YXJ0Q29sdW1uID0gdG90YWxDb2x1bW5zID4gMCA/IHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpIDogMDtcbiAgICAgIHRoaXMucm93RmlsdGVyID0gbmV3IF9yb3cuZGVmYXVsdChzdGFydFJvdywgdG90YWxSb3dzLCBjb2x1bW5IZWFkZXJzQ291bnQpO1xuICAgICAgdGhpcy5jb2x1bW5GaWx0ZXIgPSBuZXcgX2NvbHVtbi5kZWZhdWx0KHN0YXJ0Q29sdW1uLCB0b3RhbENvbHVtbnMsIHJvd0hlYWRlcnNDb3VudCk7XG4gICAgICBsZXQgcGVyZm9ybVJlZHJhdyA9IHRydWU7XG5cbiAgICAgIC8vIE9ubHkgbWFzdGVyIHRhYmxlIHJlbmRlcmluZyBjYW4gYmUgc2tpcHBlZFxuICAgICAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICAgICAgdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCk7IC8vIHRvZG8gSXQgY2FsbHMgbWV0aG9kIGZyb20gY2hpbGQgY2xhc3MgKE1hc3RlclRhYmxlKS5cbiAgICAgICAgY29uc3Qgc2tpcFJlbmRlciA9IHt9O1xuICAgICAgICB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnYmVmb3JlRHJhdycsIHRydWUsIHNraXBSZW5kZXIpO1xuICAgICAgICBwZXJmb3JtUmVkcmF3ID0gc2tpcFJlbmRlci5za2lwUmVuZGVyICE9PSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHBlcmZvcm1SZWRyYXcpIHtcbiAgICAgICAgdGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMocm93SGVhZGVycywgY29sdW1uSGVhZGVycyk7XG4gICAgICAgIGlmICh0aGlzLmlzKF9vdmVybGF5LkNMT05FX0JPVFRPTSkgfHwgdGhpcy5pcyhfb3ZlcmxheS5DTE9ORV9CT1RUT01fSU5MSU5FX1NUQVJUX0NPUk5FUikpIHtcbiAgICAgICAgICAvLyBkbyBOT1QgcmVuZGVyIGhlYWRlcnMgb24gdGhlIGJvdHRvbSBvciBib3R0b20tbGVmdCBjb3JuZXIgb3ZlcmxheVxuICAgICAgICAgIHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKHJvd0hlYWRlcnMsIFtdKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0T3ZlcnNpemVkUm93cygpO1xuICAgICAgICB0aGlzLnRhYmxlUmVuZGVyZXIuc2V0Vmlld3BvcnRTaXplKHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSwgdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLCB0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCk7XG4gICAgICAgIGxldCB3b3Jrc3BhY2VXaWR0aDtcbiAgICAgICAgaWYgKHRoaXMuaXNNYXN0ZXIpIHtcbiAgICAgICAgICB3b3Jrc3BhY2VXaWR0aCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3Jrc3BhY2VXaWR0aDtcbiAgICAgICAgICB3dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoID0gbnVsbDtcbiAgICAgICAgICB0aGlzLm1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzKCk7XG4gICAgICAgIGlmICh0aGlzLmlzTWFzdGVyIHx8IHRoaXMuaXMoX292ZXJsYXkuQ0xPTkVfQk9UVE9NKSkge1xuICAgICAgICAgIHRoaXMubWFya092ZXJzaXplZFJvd3MoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc01hc3Rlcikge1xuICAgICAgICAgIHd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCk7XG4gICAgICAgICAgd3RWaWV3cG9ydC5jcmVhdGVQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcnMoKTtcbiAgICAgICAgICB3dE92ZXJsYXlzLnJlZnJlc2goZmFsc2UpO1xuICAgICAgICAgIHd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO1xuICAgICAgICAgIGNvbnN0IGhpZGVyV2lkdGggPSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5oaWRlcik7XG4gICAgICAgICAgY29uc3QgdGFibGVXaWR0aCA9ICgwLCBfZWxlbWVudC5vdXRlcldpZHRoKSh0aGlzLlRBQkxFKTtcbiAgICAgICAgICBpZiAoaGlkZXJXaWR0aCAhPT0gMCAmJiB0YWJsZVdpZHRoICE9PSBoaWRlcldpZHRoKSB7XG4gICAgICAgICAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgY29sdW1uIHdpZHRocywgaWYgd2lkdGggY2hhbmdlcyBtYWRlIGluIHRoZSBvdmVybGF5cyByZW1vdmVkIHRoZSBzY3JvbGxiYXIsIHRodXMgY2hhbmdpbmcgdGhlIHZpZXdwb3J0IHdpZHRoLlxuICAgICAgICAgICAgdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKTtcbiAgICAgICAgICAgIHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHdvcmtzcGFjZVdpZHRoICE9PSB3dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCkpIHtcbiAgICAgICAgICAgIC8vIHdvcmtzcGFjZSB3aWR0aCBjaGFuZ2VkIHRob3VnaCB0byBzaG93bi9oaWRkZW4gdmVydGljYWwgc2Nyb2xsYmFyLiBMZXQncyByZWFwcGx5IHN0cmV0Y2hpbmdcbiAgICAgICAgICAgIHd0Vmlld3BvcnQuY29udGFpbmVyV2lkdGggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKTtcbiAgICAgICAgICAgIHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uRHJhdycsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXMoX292ZXJsYXkuQ0xPTkVfQk9UVE9NKSkge1xuICAgICAgICAgIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNvdXJjZS53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBwb3NpdGlvbkNoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc01hc3Rlcikge1xuICAgICAgcG9zaXRpb25DaGFuZ2VkID0gd3RPdmVybGF5cy50b3BPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpO1xuICAgICAgaWYgKHd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZSkge1xuICAgICAgICBwb3NpdGlvbkNoYW5nZWQgPSB3dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkgfHwgcG9zaXRpb25DaGFuZ2VkO1xuICAgICAgfVxuICAgICAgcG9zaXRpb25DaGFuZ2VkID0gd3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkgfHwgcG9zaXRpb25DaGFuZ2VkO1xuICAgICAgaWYgKHd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KSB7XG4gICAgICAgIHd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpO1xuICAgICAgfVxuICAgICAgaWYgKHd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ICYmIHd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKSB7XG4gICAgICAgIHd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocG9zaXRpb25DaGFuZ2VkKSB7XG4gICAgICAvLyBJdCByZWZyZXNoZXMgdGhlIGNlbGxzIGJvcmRlcnMgY2F1c2VkIGJ5IGEgMXB4IHNoaWZ0IChpbnRyb2R1Y2VkIGJ5IG92ZXJsYXlzIHdoaWNoIGFkZCBvclxuICAgICAgLy8gcmVtb3ZlIGBpbm5lckJvcmRlclRvcGAgYW5kIGBpbm5lckJvcmRlcklubGluZVN0YXJ0YCBDU1MgY2xhc3NlcyB0byB0aGUgRE9NIGVsZW1lbnQuIFRoaXMgaGFwcGVuc1xuICAgICAgLy8gd2hlbiB0aGVyZSBpcyBhIHN3aXRjaCBiZXR3ZWVuIHJlbmRlcmluZyBmcm9tIDAgdG8gTiByb3dzL2NvbHVtbnMgYW5kIHZpY2UgdmVyc2EpLlxuICAgICAgd3RPdmVybGF5cy5yZWZyZXNoQWxsKCk7IC8vIGByZWZyZXNoQWxsKClgIGludGVybmFsbHkgYWxyZWFkeSBjYWxscyBgcmVmcmVzaFNlbGVjdGlvbnMoKWAgbWV0aG9kXG4gICAgICB3dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc2VsZWN0aW9uTWFuYWdlci5zZXRBY3RpdmVPdmVybGF5KHRoaXMuZmFjYWRlR2V0dGVyKCkpLnJlbmRlcihydW5GYXN0RHJhdyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWFzdGVyKSB7XG4gICAgICB3dE92ZXJsYXlzLmFmdGVyRHJhdygpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICBtYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIoY29sKSB7XG4gICAgY29uc3Qgc291cmNlQ29sSW5kZXggPSB0aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGNvbCk7XG4gICAgbGV0IGxldmVsID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKS5sZW5ndGg7XG4gICAgY29uc3QgZGVmYXVsdFJvd0hlaWdodCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0Um93SGVpZ2h0Jyk7XG4gICAgbGV0IHByZXZpb3VzQ29sSGVhZGVySGVpZ2h0O1xuICAgIGxldCBjdXJyZW50SGVhZGVyO1xuICAgIGxldCBjdXJyZW50SGVhZGVySGVpZ2h0O1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlckhlaWdodFNldHRpbmcgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnY29sdW1uSGVhZGVySGVpZ2h0JykgfHwgW107XG4gICAgd2hpbGUgKGxldmVsKSB7XG4gICAgICBsZXZlbCAtPSAxO1xuICAgICAgcHJldmlvdXNDb2xIZWFkZXJIZWlnaHQgPSB0aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChsZXZlbCk7XG4gICAgICBjdXJyZW50SGVhZGVyID0gdGhpcy5nZXRDb2x1bW5IZWFkZXIoc291cmNlQ29sSW5kZXgsIGxldmVsKTtcbiAgICAgIGlmICghY3VycmVudEhlYWRlcikge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRIZWFkZXJIZWlnaHQgPSAoMCwgX2VsZW1lbnQuaW5uZXJIZWlnaHQpKGN1cnJlbnRIZWFkZXIpO1xuICAgICAgaWYgKCFwcmV2aW91c0NvbEhlYWRlckhlaWdodCAmJiBkZWZhdWx0Um93SGVpZ2h0IDwgY3VycmVudEhlYWRlckhlaWdodCB8fCBwcmV2aW91c0NvbEhlYWRlckhlaWdodCA8IGN1cnJlbnRIZWFkZXJIZWlnaHQpIHtcbiAgICAgICAgdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsZXZlbF0gPSBjdXJyZW50SGVhZGVySGVpZ2h0O1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uSGVhZGVySGVpZ2h0U2V0dGluZykpIHtcbiAgICAgICAgaWYgKGNvbHVtbkhlYWRlckhlaWdodFNldHRpbmdbbGV2ZWxdICE9PSBudWxsICYmIGNvbHVtbkhlYWRlckhlaWdodFNldHRpbmdbbGV2ZWxdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xldmVsXSA9IGNvbHVtbkhlYWRlckhlaWdodFNldHRpbmdbbGV2ZWxdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpc05hTihjb2x1bW5IZWFkZXJIZWlnaHRTZXR0aW5nKSkge1xuICAgICAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xldmVsXSA9IGNvbHVtbkhlYWRlckhlaWdodFNldHRpbmc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsZXZlbF0gPCAoY29sdW1uSGVhZGVySGVpZ2h0U2V0dGluZ1tsZXZlbF0gfHwgY29sdW1uSGVhZGVySGVpZ2h0U2V0dGluZykpIHtcbiAgICAgICAgdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsZXZlbF0gPSBjb2x1bW5IZWFkZXJIZWlnaHRTZXR0aW5nW2xldmVsXSB8fCBjb2x1bW5IZWFkZXJIZWlnaHRTZXR0aW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIGFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5nc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5USEVBRC5jaGlsZE5vZGVzO1xuICAgIGNvbnN0IG92ZXJzaXplZENvbHVtbkhlYWRlcnMgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnMgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sdW1uSGVhZGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKG92ZXJzaXplZENvbHVtbkhlYWRlcnNbaV0pIHtcbiAgICAgICAgaWYgKCFjaGlsZHJlbltpXSB8fCBjaGlsZHJlbltpXS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZHJlbltpXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodCA9IGAke292ZXJzaXplZENvbHVtbkhlYWRlcnNbaV19cHhgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgY2FjaGUgb2Ygcm93IGhlaWdodHMuIFRoZSBjYWNoZSBzaG91bGQgYmUgY2FjaGVkIGZvciBlYWNoIHJlbmRlciBjeWNsZSBpbiBhIGNhc2VcbiAgICogd2hlbiBuZXcgY2VsbCB2YWx1ZXMgaGF2ZSBjb250ZW50IHdoaWNoIGluY3JlYXNlcy9kZWNyZWFzZXMgY2VsbCBoZWlnaHQuXG4gICAqL1xuICByZXNldE92ZXJzaXplZFJvd3MoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5nc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0Vmlld3BvcnRcbiAgICB9ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0O1xuICAgIGlmICghdGhpcy5pc01hc3RlciAmJiAhdGhpcy5pcyhfb3ZlcmxheS5DTE9ORV9CT1RUT00pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdleHRlcm5hbFJvd0NhbGN1bGF0b3InKSkge1xuICAgICAgY29uc3Qgcm93c1RvUmVuZGVyID0gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO1xuXG4gICAgICAvLyBSZXNldCB0aGUgb3ZlcnNpemVkIHJvdyBjYWNoZSBmb3IgcmVuZGVyZWQgcm93c1xuICAgICAgZm9yIChsZXQgdmlzaWJsZVJvd0luZGV4ID0gMDsgdmlzaWJsZVJvd0luZGV4IDwgcm93c1RvUmVuZGVyOyB2aXNpYmxlUm93SW5kZXgrKykge1xuICAgICAgICBjb25zdCBzb3VyY2VSb3cgPSB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHZpc2libGVSb3dJbmRleCk7XG4gICAgICAgIGlmICh3dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3MgJiYgd3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW3NvdXJjZVJvd10pIHtcbiAgICAgICAgICB3dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3Nbc291cmNlUm93XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2VsbCBlbGVtZW50IGF0IGNvb3Jkcy5cbiAgICogTmVnYXRpdmUgY29vcmRzLnJvdyBvciBjb29yZHMuY29sIGFyZSB1c2VkIHRvIHJldHJpZXZlIGhlYWRlciBjZWxscy4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGhlYWRlciBsZXZlbHMsIHRoZVxuICAgKiBuZWdhdGl2ZSB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgd29ya2luZyBhcmVhLiBGb3IgZXhhbXBsZSwgd2hlbiB0aGVyZSBhcmUgMyBsZXZlbHMgb2YgY29sdW1uXG4gICAqIGhlYWRlcnMsIGNvb3Jkcy5jb2w9LTEgY29ycmVzcG9uZHMgdG8gdGhlIG1vc3QgaW5uZXIgaGVhZGVyIGVsZW1lbnQsIHdoaWxlIGNvb3Jkcy5jb2w9LTMgY29ycmVzcG9uZHMgdG8gdGhlXG4gICAqIG91dG1vc3QgaGVhZGVyIGVsZW1lbnQuXG4gICAqXG4gICAqIEluIGNhc2UgYW4gZWxlbWVudCBmb3IgdGhlIGNvb3JkcyBpcyBub3QgcmVuZGVyZWQsIHRoZSBtZXRob2QgcmV0dXJucyBhbiBlcnJvciBjb2RlLlxuICAgKiBUbyBwcm9kdWNlIHRoZSBlcnJvciBjb2RlLCB0aGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgdmFsaWRhdGVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5XG4gICAqIGFyZSBnaXZlbi4gVGh1cywgaWYgYm90aCB0aGUgcm93IGFuZCB0aGUgY29sdW1uIGNvb3JkcyBhcmUgb3V0IG9mIHRoZSByZW5kZXJlZCBib3VuZHMsXG4gICAqIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgZXJyb3IgY29kZSBmb3IgdGhlIHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVGhlIGNlbGwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudW1iZXJ9IEhUTUxFbGVtZW50IG9uIHN1Y2Nlc3Mgb3IgTnVtYmVyIG9uZSBvZiB0aGUgZXhpdCBjb2RlcyBvbiBlcnJvcjpcbiAgICogIC0xIHJvdyBiZWZvcmUgdmlld3BvcnRcbiAgICogIC0yIHJvdyBhZnRlciB2aWV3cG9ydFxuICAgKiAgLTMgY29sdW1uIGJlZm9yZSB2aWV3cG9ydFxuICAgKiAgLTQgY29sdW1uIGFmdGVyIHZpZXdwb3J0LlxuICAgKi9cbiAgZ2V0Q2VsbChjb29yZHMpIHtcbiAgICBsZXQgcm93ID0gY29vcmRzLnJvdztcbiAgICBsZXQgY29sdW1uID0gY29vcmRzLmNvbDtcbiAgICBjb25zdCBob29rUmVzdWx0ID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uTW9kaWZ5R2V0Q2VsbENvb3JkcycsIHJvdywgY29sdW1uKTtcbiAgICBpZiAoaG9va1Jlc3VsdCAmJiBBcnJheS5pc0FycmF5KGhvb2tSZXN1bHQpKSB7XG4gICAgICBbcm93LCBjb2x1bW5dID0gaG9va1Jlc3VsdDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3Mocm93KSkge1xuICAgICAgLy8gcm93IGJlZm9yZSByZW5kZXJlZCByb3dzXG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3Mocm93KSkge1xuICAgICAgLy8gcm93IGFmdGVyIHJlbmRlcmVkIHJvd3NcbiAgICAgIHJldHVybiAtMjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoY29sdW1uKSkge1xuICAgICAgLy8gY29sdW1uIGJlZm9yZSByZW5kZXJlZCBjb2x1bW5zXG4gICAgICByZXR1cm4gLTM7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoY29sdW1uKSkge1xuICAgICAgLy8gY29sdW1uIGFmdGVyIHJlbmRlcmVkIGNvbHVtbnNcbiAgICAgIHJldHVybiAtNDtcbiAgICB9XG4gICAgY29uc3QgVFIgPSB0aGlzLmdldFJvdyhyb3cpO1xuICAgIGlmICghVFIgJiYgcm93ID49IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVFIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QnKTtcbiAgICB9XG4gICAgY29uc3QgVEQgPSBUUi5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihjb2x1bW4pXTtcbiAgICBpZiAoIVREICYmIGNvbHVtbiA+PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1REIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Jyk7XG4gICAgfVxuICAgIHJldHVybiBURDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIERPTSBlbGVtZW50IG9mIHRoZSByb3cgd2l0aCB0aGUgcHJvdmlkZWQgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dJbmRleCBSb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtIVE1MVGFibGVSb3dFbGVtZW50fGJvb2xlYW59IFJldHVybiB0aGUgcm93J3MgRE9NIGVsZW1lbnQgb3IgYGZhbHNlYCBpZiB0aGUgcm93IHdpdGggdGhlIHByb3ZpZGVkXG4gICAqIGluZGV4IGRvZXNuJ3QgZXhpc3QuXG4gICAqL1xuICBnZXRSb3cocm93SW5kZXgpIHtcbiAgICBsZXQgcmVuZGVyZWRSb3dJbmRleCA9IG51bGw7XG4gICAgbGV0IHBhcmVudEVsZW1lbnQgPSBudWxsO1xuICAgIGlmIChyb3dJbmRleCA8IDApIHtcbiAgICAgIHZhciBfdGhpcyRyb3dGaWx0ZXI7XG4gICAgICByZW5kZXJlZFJvd0luZGV4ID0gKF90aGlzJHJvd0ZpbHRlciA9IHRoaXMucm93RmlsdGVyKSA9PT0gbnVsbCB8fCBfdGhpcyRyb3dGaWx0ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cocm93SW5kZXgpO1xuICAgICAgcGFyZW50RWxlbWVudCA9IHRoaXMuVEhFQUQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfdGhpcyRyb3dGaWx0ZXIyO1xuICAgICAgcmVuZGVyZWRSb3dJbmRleCA9IChfdGhpcyRyb3dGaWx0ZXIyID0gdGhpcy5yb3dGaWx0ZXIpID09PSBudWxsIHx8IF90aGlzJHJvd0ZpbHRlcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHJvd0ZpbHRlcjIuc291cmNlVG9SZW5kZXJlZChyb3dJbmRleCk7XG4gICAgICBwYXJlbnRFbGVtZW50ID0gdGhpcy5UQk9EWTtcbiAgICB9XG4gICAgaWYgKHJlbmRlcmVkUm93SW5kZXggIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRFbGVtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwYXJlbnRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIDwgcmVuZGVyZWRSb3dJbmRleCArIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1tyZW5kZXJlZFJvd0luZGV4XTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRDb2x1bW5IZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgQ29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsPTBdIEhlYWRlciBsZXZlbCAoMCA9IG1vc3QgZGlzdGFudCB0byB0aGUgdGFibGUpLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBIVE1MRWxlbWVudCBvbiBzdWNjZXNzIG9yIHVuZGVmaW5lZCBvbiBlcnJvci5cbiAgICovXG4gIGdldENvbHVtbkhlYWRlcihjb2wpIHtcbiAgICBsZXQgbGV2ZWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgY29uc3QgVFIgPSB0aGlzLlRIRUFELmNoaWxkTm9kZXNbbGV2ZWxdO1xuICAgIHJldHVybiBUUiA9PT0gbnVsbCB8fCBUUiA9PT0gdm9pZCAwID8gdm9pZCAwIDogVFIuY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oY29sKV07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbGwgY29sdW1ucyBoZWFkZXJzIChUSCBlbGVtZW50cykgZnJvbSB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gQSBzb3VyY2UgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7SFRNTFRhYmxlQ2VsbEVsZW1lbnRbXX1cbiAgICovXG4gIGdldENvbHVtbkhlYWRlcnMoY29sdW1uKSB7XG4gICAgY29uc3QgVEhzID0gW107XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbiA9IHRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihjb2x1bW4pO1xuICAgIHRoaXMuVEhFQUQuY2hpbGROb2Rlcy5mb3JFYWNoKFRSID0+IHtcbiAgICAgIGNvbnN0IFRIID0gVFIuY2hpbGROb2Rlc1t2aXNpYmxlQ29sdW1uXTtcbiAgICAgIGlmIChUSCkge1xuICAgICAgICBUSHMucHVzaChUSCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIFRIcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRSb3dIZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsPTBdIEhlYWRlciBsZXZlbCAoMCA9IG1vc3QgZGlzdGFudCB0byB0aGUgdGFibGUpLlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IEhUTUxFbGVtZW50IG9uIHN1Y2Nlc3Mgb3IgTnVtYmVyIG9uZSBvZiB0aGUgZXhpdCBjb2RlcyBvbiBlcnJvcjogYG51bGwgdGFibGUgZG9lc24ndCBoYXZlXG4gICAqICAgcm93IGhlYWRlcnNgLlxuICAgKi9cbiAgZ2V0Um93SGVhZGVyKHJvdykge1xuICAgIGxldCBsZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgICBjb25zdCByb3dIZWFkZXJzQ291bnQgPSB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygncm93SGVhZGVycycpLmxlbmd0aDtcbiAgICBpZiAobGV2ZWwgPj0gcm93SGVhZGVyc0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmVkUm93ID0gdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChyb3cpO1xuICAgIGNvbnN0IHZpc2libGVSb3cgPSByZW5kZXJlZFJvdyA8IDAgPyB0aGlzLnJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cocm93KSA6IHJlbmRlcmVkUm93O1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSByZW5kZXJlZFJvdyA8IDAgPyB0aGlzLlRIRUFEIDogdGhpcy5UQk9EWTtcbiAgICBjb25zdCBUUiA9IHBhcmVudEVsZW1lbnQuY2hpbGROb2Rlc1t2aXNpYmxlUm93XTtcbiAgICByZXR1cm4gVFIgPT09IG51bGwgfHwgVFIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IFRSLmNoaWxkTm9kZXNbbGV2ZWxdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJvd3MgaGVhZGVycyAoVEggZWxlbWVudHMpIGZyb20gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEEgc291cmNlIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge0hUTUxUYWJsZUNlbGxFbGVtZW50W119XG4gICAqL1xuICBnZXRSb3dIZWFkZXJzKHJvdykge1xuICAgIGNvbnN0IFRIcyA9IFtdO1xuICAgIGNvbnN0IHJvd0hlYWRlcnNDb3VudCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJykubGVuZ3RoO1xuICAgIGZvciAobGV0IHJlbmRlcmVkUm93SW5kZXggPSAwOyByZW5kZXJlZFJvd0luZGV4IDwgcm93SGVhZGVyc0NvdW50OyByZW5kZXJlZFJvd0luZGV4KyspIHtcbiAgICAgIGNvbnN0IFRSID0gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQocm93KV07XG4gICAgICBjb25zdCBUSCA9IFRSID09PSBudWxsIHx8IFRSID09PSB2b2lkIDAgPyB2b2lkIDAgOiBUUi5jaGlsZE5vZGVzW3JlbmRlcmVkUm93SW5kZXhdO1xuICAgICAgaWYgKFRIKSB7XG4gICAgICAgIFRIcy5wdXNoKFRIKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFRIcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNlbGwgY29vcmRzIG9iamVjdCBmb3IgYSBnaXZlbiBURCAob3IgYSBjaGlsZCBlbGVtZW50IG9mIGEgVEQgZWxlbWVudCkuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIEEgY2VsbCBET00gZWxlbWVudCAob3IgYSBjaGlsZCBvZiBvbmUpLlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc3xudWxsfSBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHByb3ZpZGVkIFREIGVsZW1lbnQgKG9yIHRoZSBjbG9zZXN0IFREIGVsZW1lbnQpIG9yIG51bGwsIGlmIHRoZVxuICAgKiAgIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGFwcGxpY2FibGUuXG4gICAqL1xuICBnZXRDb29yZHMoVEQpIHtcbiAgICBsZXQgY2VsbEVsZW1lbnQgPSBURDtcbiAgICBpZiAoY2VsbEVsZW1lbnQubm9kZU5hbWUgIT09ICdURCcgJiYgY2VsbEVsZW1lbnQubm9kZU5hbWUgIT09ICdUSCcpIHtcbiAgICAgIGNlbGxFbGVtZW50ID0gKDAsIF9lbGVtZW50LmNsb3Nlc3QpKGNlbGxFbGVtZW50LCBbJ1REJywgJ1RIJ10pO1xuICAgIH1cbiAgICBpZiAoY2VsbEVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBUUiA9IGNlbGxFbGVtZW50LnBhcmVudE5vZGU7XG4gICAgY29uc3QgQ09OVEFJTkVSID0gVFIucGFyZW50Tm9kZTtcbiAgICBsZXQgcm93ID0gKDAsIF9lbGVtZW50LmluZGV4KShUUik7XG4gICAgbGV0IGNvbCA9IGNlbGxFbGVtZW50LmNlbGxJbmRleDtcbiAgICBpZiAoKDAsIF9lbGVtZW50Lm92ZXJsYXlDb250YWluc0VsZW1lbnQpKF9vdmVybGF5LkNMT05FX1RPUF9JTkxJTkVfU1RBUlRfQ09STkVSLCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSB8fCAoMCwgX2VsZW1lbnQub3ZlcmxheUNvbnRhaW5zRWxlbWVudCkoX292ZXJsYXkuQ0xPTkVfVE9QLCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSkge1xuICAgICAgaWYgKENPTlRBSU5FUi5ub2RlTmFtZSA9PT0gJ1RIRUFEJykge1xuICAgICAgICByb3cgLT0gQ09OVEFJTkVSLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9lbGVtZW50Lm92ZXJsYXlDb250YWluc0VsZW1lbnQpKF9vdmVybGF5LkNMT05FX0JPVFRPTV9JTkxJTkVfU1RBUlRfQ09STkVSLCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSB8fCAoMCwgX2VsZW1lbnQub3ZlcmxheUNvbnRhaW5zRWxlbWVudCkoX292ZXJsYXkuQ0xPTkVfQk9UVE9NLCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSkge1xuICAgICAgY29uc3QgdG90YWxSb3dzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpO1xuICAgICAgcm93ID0gdG90YWxSb3dzIC0gQ09OVEFJTkVSLmNoaWxkTm9kZXMubGVuZ3RoICsgcm93O1xuICAgIH0gZWxzZSBpZiAoQ09OVEFJTkVSID09PSB0aGlzLlRIRUFEKSB7XG4gICAgICByb3cgPSB0aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cocm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93ID0gdGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShyb3cpO1xuICAgIH1cbiAgICBpZiAoKDAsIF9lbGVtZW50Lm92ZXJsYXlDb250YWluc0VsZW1lbnQpKF9vdmVybGF5LkNMT05FX1RPUF9JTkxJTkVfU1RBUlRfQ09STkVSLCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSB8fCAoMCwgX2VsZW1lbnQub3ZlcmxheUNvbnRhaW5zRWxlbWVudCkoX292ZXJsYXkuQ0xPTkVfSU5MSU5FX1NUQVJULCBjZWxsRWxlbWVudCwgdGhpcy53dFJvb3RFbGVtZW50KSB8fCAoMCwgX2VsZW1lbnQub3ZlcmxheUNvbnRhaW5zRWxlbWVudCkoX292ZXJsYXkuQ0xPTkVfQk9UVE9NX0lOTElORV9TVEFSVF9DT1JORVIsIGNlbGxFbGVtZW50LCB0aGlzLnd0Um9vdEVsZW1lbnQpKSB7XG4gICAgICBjb2wgPSB0aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSChjb2wpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2wgPSB0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4oY29sKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMocm93LCBjb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFueSBvZiB0aGUgcmVuZGVyZWQgcm93cyBpcyBoaWdoZXIgdGhhbiBleHBlY3RlZCwgYW5kIGlmIHNvLCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgbWFya092ZXJzaXplZFJvd3MoKSB7XG4gICAgaWYgKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdleHRlcm5hbFJvd0NhbGN1bGF0b3InKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcm93Q291bnQgPSB0aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGVjdGVkVGFibGVIZWlnaHQgPSByb3dDb3VudCAqIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0Um93SGVpZ2h0Jyk7XG4gICAgY29uc3QgYWN0dWFsVGFibGVIZWlnaHQgPSAoMCwgX2VsZW1lbnQuaW5uZXJIZWlnaHQpKHRoaXMuVEJPRFkpIC0gMTtcbiAgICBsZXQgcHJldmlvdXNSb3dIZWlnaHQ7XG4gICAgbGV0IHJvd0lubmVySGVpZ2h0O1xuICAgIGxldCBzb3VyY2VSb3dJbmRleDtcbiAgICBsZXQgY3VycmVudFRyO1xuICAgIGxldCByb3dIZWFkZXI7XG4gICAgaWYgKGV4cGVjdGVkVGFibGVIZWlnaHQgPT09IGFjdHVhbFRhYmxlSGVpZ2h0ICYmICF0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJykpIHtcbiAgICAgIC8vIElmIHRoZSBhY3R1YWwgdGFibGUgaGVpZ2h0IGVxdWFscyByb3dDb3VudCAqIGRlZmF1bHQgc2luZ2xlIHJvdyBoZWlnaHQsIG5vIHJvdyBpcyBvdmVyc2l6ZWQgLT4gbm8gbmVlZCB0byBpdGVyYXRlIG92ZXIgdGhlbVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aGlsZSAocm93Q291bnQpIHtcbiAgICAgIHJvd0NvdW50IC09IDE7XG4gICAgICBzb3VyY2VSb3dJbmRleCA9IHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2Uocm93Q291bnQpO1xuICAgICAgcHJldmlvdXNSb3dIZWlnaHQgPSB0aGlzLmdldFJvd0hlaWdodChzb3VyY2VSb3dJbmRleCk7XG4gICAgICBjdXJyZW50VHIgPSB0aGlzLmdldFRyRm9yUm93KHNvdXJjZVJvd0luZGV4KTtcbiAgICAgIHJvd0hlYWRlciA9IGN1cnJlbnRUci5xdWVyeVNlbGVjdG9yKCd0aCcpO1xuICAgICAgaWYgKHJvd0hlYWRlcikge1xuICAgICAgICByb3dJbm5lckhlaWdodCA9ICgwLCBfZWxlbWVudC5pbm5lckhlaWdodCkocm93SGVhZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd0lubmVySGVpZ2h0ID0gKDAsIF9lbGVtZW50LmlubmVySGVpZ2h0KShjdXJyZW50VHIpIC0gMTtcbiAgICAgIH1cbiAgICAgIGlmICghcHJldmlvdXNSb3dIZWlnaHQgJiYgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2RlZmF1bHRSb3dIZWlnaHQnKSA8IHJvd0lubmVySGVpZ2h0IHx8IHByZXZpb3VzUm93SGVpZ2h0IDwgcm93SW5uZXJIZWlnaHQpIHtcbiAgICAgICAgcm93SW5uZXJIZWlnaHQgKz0gMTtcbiAgICAgICAgdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tzb3VyY2VSb3dJbmRleF0gPSByb3dJbm5lckhlaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge0hUTUxUYWJsZUVsZW1lbnR9XG4gICAqL1xuICBnZXRUckZvclJvdyhyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQocm93KV07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjb2x1bW4gaW5kZXggKG5lZ2F0aXZlIHZhbHVlIGZyb20gLTEgdG8gTikgaXMgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIGNvbHVtbiBpbmRleCAobmVnYXRpdmUgdmFsdWUgZnJvbSAtMSB0byBOKS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0NvbHVtbkhlYWRlclJlbmRlcmVkKGNvbHVtbikge1xuICAgIGlmIChjb2x1bW4gPj0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCByb3dIZWFkZXJzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3Jvd0hlYWRlcnMnKTtcbiAgICBjb25zdCByb3dIZWFkZXJzQ291bnQgPSByb3dIZWFkZXJzLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5hYnMoY29sdW1uKSA8PSByb3dIZWFkZXJzQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSByb3cgaW5kZXggKG5lZ2F0aXZlIHZhbHVlIGZyb20gLTEgdG8gTikgaXMgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleCAobmVnYXRpdmUgdmFsdWUgZnJvbSAtMSB0byBOKS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1Jvd0hlYWRlclJlbmRlcmVkKHJvdykge1xuICAgIGlmIChyb3cgPj0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzQ291bnQgPSBjb2x1bW5IZWFkZXJzLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5hYnMocm93KSA8PSBjb2x1bW5IZWFkZXJzQ291bnQ7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gcm93IGluZGV4IGlzIGxvd2VyIHRoYW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCByb3cgdGhhdFxuICAgKiBpcyBjdXJyZW50bHkgcmVuZGVyZWQgYW5kIHJldHVybiBUUlVFIGluIHRoYXQgY2FzZSwgb3IgRkFMU0Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOZWdhdGl2ZSByb3cgaW5kZXggaXMgdXNlZCB0byBjaGVjayB0aGUgY29sdW1ucycgaGVhZGVycy5cbiAgICpcbiAgICogIEhlYWRlcnNcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqICAgICAgIC0zICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAtMiAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBUUlVFXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAtMSAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgQ2VsbHMgICs9PT09PT09PT09PT09PT09PT0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICogICAgICAgIDAgIOKUhyAgICDilIcgICAg4pSHICAgIOKUhyA8LS0tIEZvciBmaXhlZFJvd3NUb3A6IDEgICAgICAgICAgICDilIJcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICB0aGUgbWFzdGVyIG92ZXJsYXkgZG8gICAgICAgLS0tKyBmaXJzdCByZW5kZXJlZCByb3cgKGluZGV4IDEpXG4gICAqICAgICAgICAxICDilIIgQTIg4pSCIEIyIOKUgiBDMiDilIIgICAgICBub3QgcmVuZGVyIHRoZSBmaXJzdCByb3cuICAgICAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBGQUxTRVxuICAgKiAgICAgICAgMiAg4pSCIEEzIOKUgiBCMyDilIIgQzMg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0rIGxhc3QgcmVuZGVyZWQgcm93XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgRkFMU0VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQG1lbWJlcm9mIFRhYmxlI1xuICAgKiBAZnVuY3Rpb24gaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3NcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3Mocm93KSB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcblxuICAgIC8vIENoZWNrIHRoZSBoZWFkZXJzIG9ubHkgaW4gY2FzZSB3aGVuIHRoZSBmaXJzdCByZW5kZXJlZCByb3cgaXMgLTEgb3IgMC5cbiAgICAvLyBUaGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgb3ZlcmxheSBpcyBwbGFjZWQgb24gdGhlIG1vc3QgdG9wIHBvc2l0aW9uLlxuICAgIGlmIChyb3cgPCAwICYmIGZpcnN0IDw9IDApIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc1Jvd0hlYWRlclJlbmRlcmVkKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiByb3cgPCBmaXJzdDtcbiAgfVxuXG4gIC8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggaXMgZ3JlYXRlciB0aGFuIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjb2x1bW4gdGhhdFxuICAgKiBpcyBjdXJyZW50bHkgcmVuZGVyZWQgYW5kIHJldHVybiBUUlVFIGluIHRoYXQgY2FzZSwgb3IgRkFMU0Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBUaGUgbmVnYXRpdmUgcm93IGluZGV4IGlzIHVzZWQgdG8gY2hlY2sgdGhlIGNvbHVtbnMnIGhlYWRlcnMuIEhvd2V2ZXIsXG4gICAqIGtlZXAgaW4gbWluZCB0aGF0IGZvciBuZWdhdGl2ZSBpbmRleGVzLCB0aGUgbWV0aG9kIGFsd2F5cyByZXR1cm5zIEZBTFNFIGFzXG4gICAqIGl0IGlzIG5vdCBwb3NzaWJsZSB0byByZW5kZXIgaGVhZGVycyBwYXJ0aWFsbHkuIFRoZSBcImFmdGVyXCIgaW5kZXggY2FuIG5vdCBiZVxuICAgKiBsb3dlciB0aGFuIC0xLlxuICAgKlxuICAgKiAgSGVhZGVyc1xuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICogICAgICAgLTMgIOKUgiAgICDilIIgICAg4pSCICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gICAqICAgICAgIC0yICDilIIgICAg4pSCICAgIOKUgiAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCIEZBTFNFXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAtMSAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgQ2VsbHMgICs9PT09PT09PT09PT09PT09PT0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAgICogICAgICAgIDAgIOKUhyAgICDilIcgICAg4pSHICAgIOKUhyA8LS0tIEZvciBmaXhlZFJvd3NUb3A6IDEgICAgICAgICAgICDilIJcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICB0aGUgbWFzdGVyIG92ZXJsYXkgZG8gICAgICAgLS0tKyBmaXJzdCByZW5kZXJlZCByb3cgKGluZGV4IDEpXG4gICAqICAgICAgICAxICDilIIgQTIg4pSCIEIyIOKUgiBDMiDilIIgICAgICBub3QgcmVuZGVyIHRoZSBmaXJzdCByb3dzICAgICAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUgiBGQUxTRVxuICAgKiAgICAgICAgMiAg4pSCIEEzIOKUgiBCMyDilIIgQzMg4pSCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0rIGxhc3QgcmVuZGVyZWQgcm93XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilIIgVFJVRVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAbWVtYmVyb2YgVGFibGUjXG4gICAqIEBmdW5jdGlvbiBpc1Jvd0FmdGVyUmVuZGVyZWRSb3dzXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIGlzUm93QWZ0ZXJSZW5kZXJlZFJvd3Mocm93KSB7XG4gICAgcmV0dXJuIHJvdyA+IHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4IGlzIGxvd2VyIHRoYW4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gdGhhdFxuICAgKiBpcyBjdXJyZW50bHkgcmVuZGVyZWQgYW5kIHJldHVybiBUUlVFIGluIHRoYXQgY2FzZSwgb3IgRkFMU0Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOZWdhdGl2ZSBjb2x1bW4gaW5kZXggaXMgdXNlZCB0byBjaGVjayB0aGUgcm93cycgaGVhZGVycy5cbiAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGZpeGVkQ29sdW1uc1N0YXJ0OiAxIHRoZSBtYXN0ZXIgb3ZlcmxheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVuZGVyIHRoaXMgZmlyc3QgY29sdW1ucy5cbiAgICogIEhlYWRlcnMgICAgLTMgICAtMiAgIC0xICAgIHxcbiAgICogICAgICAgICAgICstLS0tKy0tLS0rLS0tLeKVkeKUhCDilIQgKy0tLS0tLSstLS0tLS0rXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMSAg4pSCICBDMSAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS3ilZHilIQg4pSEIC0tLS0tLS0tLS0tLS0t4pSCXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMiAg4pSCICBDMiAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS3ilZHilIQg4pSEIC0tLS0tLS0tLS0tLS0t4pSCXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMyAg4pSCICBDMyAg4pSCXG4gICAqICAgICAgICAgICArLS0tLSstLS0tKy0tLS3ilZHilIQg4pSEICstLS0tLS0rLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilbcgICAgICAgICAgICAg4pW3XG4gICAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0+XG4gICAqICAgICAgICAgIFRSVUUgICAgICAgICAgICAgZmlyc3QgICAgRkFMU0UgICBsYXN0ICAgICAgICAgRkFMU0VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCAgICAgICAgIHJlbmRlcmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICAgICAgICAgICBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQG1lbWJlcm9mIFRhYmxlI1xuICAgKiBAZnVuY3Rpb24gaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMoY29sdW1uKSB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtcblxuICAgIC8vIENoZWNrIHRoZSBoZWFkZXJzIG9ubHkgaW4gY2FzZSB3aGVuIHRoZSBmaXJzdCByZW5kZXJlZCBjb2x1bW4gaXMgLTEgb3IgMC5cbiAgICAvLyBUaGlzIGlzIGFuIGluZGljYXRpb24gdGhhdCB0aGUgb3ZlcmxheSBpcyBwbGFjZWQgb24gdGhlIG1vc3QgbGVmdCBwb3NpdGlvbi5cbiAgICBpZiAoY29sdW1uIDwgMCAmJiBmaXJzdCA8PSAwKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb2x1bW5IZWFkZXJSZW5kZXJlZChjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uIDwgZmlyc3Q7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgY29sdW1uIHRoYXRcbiAgICogaXMgY3VycmVudGx5IHJlbmRlcmVkIGFuZCByZXR1cm4gVFJVRSBpbiB0aGF0IGNhc2UsIG9yIEZBTFNFIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIG5lZ2F0aXZlIGNvbHVtbiBpbmRleCBpcyB1c2VkIHRvIGNoZWNrIHRoZSByb3dzJyBoZWFkZXJzLiBIb3dldmVyLFxuICAgKiBrZWVwIGluIG1pbmQgdGhhdCBmb3IgbmVnYXRpdmUgaW5kZXhlcywgdGhlIG1ldGhvZCBhbHdheXMgcmV0dXJucyBGQUxTRSBhc1xuICAgKiBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVuZGVyIGhlYWRlcnMgcGFydGlhbGx5LiBUaGUgXCJhZnRlclwiIGluZGV4IGNhbiBub3QgYmVcbiAgICogbG93ZXIgdGhhbiAtMS5cbiAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGZpeGVkQ29sdW1uc1N0YXJ0OiAxIHRoZSBtYXN0ZXIgb3ZlcmxheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVuZGVyIHRoaXMgZmlyc3QgY29sdW1ucy5cbiAgICogIEhlYWRlcnMgICAgLTMgICAtMiAgIC0xICAgIHxcbiAgICogICAgICAgICAgICstLS0tKy0tLS0rLS0tLeKVkeKUhCDilIQgKy0tLS0tLSstLS0tLS0rXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMSAg4pSCICBDMSAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS3ilZHilIQg4pSEIC0tLS0tLS0tLS0tLS0t4pSCXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMiAg4pSCICBDMiAg4pSCXG4gICAqICAgICAgICAgICArLS0tLS0tLS0tLS0tLS3ilZHilIQg4pSEIC0tLS0tLS0tLS0tLS0t4pSCXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilZEgICAg4pSCICBCMyAg4pSCICBDMyAg4pSCXG4gICAqICAgICAgICAgICArLS0tLSstLS0tKy0tLS3ilZHilIQg4pSEICstLS0tLS0rLS0tLS0tK1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilbcgICAgICAgICAgICAg4pW3XG4gICAqICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0+XG4gICAqICAgICAgICAgIEZBTFNFICAgICAgICAgICAgIGZpcnN0ICAgIEZBTFNFICAgbGFzdCAgICAgICAgIFRSVUVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlZCAgICAgICAgIHJlbmRlcmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uICAgICAgICAgICBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQG1lbWJlcm9mIFRhYmxlI1xuICAgKiBAZnVuY3Rpb24gaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIC8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuICBpc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkZpbHRlciAmJiBjb2x1bW4gPiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpO1xuICB9XG4gIGlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChjb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIgJiYgY29sdW1uID4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO1xuICB9XG4gIGlzUm93QWZ0ZXJWaWV3cG9ydChyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5yb3dGaWx0ZXIgJiYgcm93ID4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICB9XG4gIGlzQ29sdW1uQmVmb3JlVmlld3BvcnQoY29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyICYmIHRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoY29sdW1uKSA8IDAgJiYgY29sdW1uID49IDA7XG4gIH1cbiAgaXNMYXN0Um93RnVsbHlWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RWaXNpYmxlUm93KCkgPT09IHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCk7XG4gIH1cbiAgaXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCkgPT09IHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7XG4gIH1cbiAgYWxsUm93c0luVmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKSA9PT0gdGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCk7XG4gIH1cbiAgYWxsQ29sdW1uc0luVmlld3BvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKSA9PT0gdGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGFueSBvZiB0aGUgcm93J3MgY2VsbHMgY29udGVudCBleGNlZWRzIGl0cyBpbml0aWFsIGhlaWdodCwgYW5kIGlmIHNvLCByZXR1cm5zIHRoZSBvdmVyc2l6ZWQgaGVpZ2h0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc291cmNlUm93IFRoZSBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRSb3dIZWlnaHQoc291cmNlUm93KSB7XG4gICAgcmV0dXJuIHRoaXMucm93VXRpbHMuZ2V0SGVpZ2h0KHNvdXJjZVJvdyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsIFRoZSBjb2x1bW4gbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJIZWlnaHQobGV2ZWwpIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQobGV2ZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENvbHVtbldpZHRoKHNvdXJjZUNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKHNvdXJjZUNvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZUNvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoc291cmNlQ29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoc291cmNlQ29sdW1uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIHNpemUuIEl0IHJldHVybnMgYHRydWVgIHdoZW4gdGhlIHRhYmxlIGhhcyB3aWR0aCBhbmQgaGVpZ2h0XG4gICAqIHNldCBiaWdnZXIgdGhhbiBgMHB4YC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNEZWZpbmVkU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNUYWJsZUhlaWdodCAmJiB0aGlzLmhhc1RhYmxlV2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0YWJsZSdzIHdpZHRoLiBUaGUgcmV0dXJuZWQgd2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSByZW5kZXJlZCBjZWxscyB0aGF0IGZpdCBpbiB0aGVcbiAgICogY3VycmVudCB2aWV3cG9ydC4gVGhlIHZhbHVlIG1heSBjaGFuZ2UgZGVwZW5kcyBvbiB0aGUgdmlld3BvcnQgcG9zaXRpb24gKHNjcm9sbCBwb3NpdGlvbikuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRXaWR0aCgpIHtcbiAgICByZXR1cm4gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHRoaXMuVEFCTEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGFibGUncyBoZWlnaHQuIFRoZSByZXR1cm5lZCBoZWlnaHQgaXMgdGhlIGhlaWdodCBvZiB0aGUgcmVuZGVyZWQgY2VsbHMgdGhhdCBmaXQgaW4gdGhlXG4gICAqIGN1cnJlbnQgdmlld3BvcnQuIFRoZSB2YWx1ZSBtYXkgY2hhbmdlIGRlcGVuZHMgb24gdGhlIHZpZXdwb3J0IHBvc2l0aW9uIChzY3JvbGwgcG9zaXRpb24pLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SGVpZ2h0KCkge1xuICAgIHJldHVybiAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuVEFCTEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGFibGUncyB0b3RhbCB3aWR0aC4gVGhlIHJldHVybmVkIHdpZHRoIGlzIHRoZSB3aWR0aCBvZiBhbGwgcmVuZGVyZWQgY2VsbHMgKGluY2x1ZGluZyBoZWFkZXJzKVxuICAgKiB0aGF0IGNhbiBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0VG90YWxXaWR0aCgpIHtcbiAgICBjb25zdCB3aWR0aCA9ICgwLCBfZWxlbWVudC5vdXRlcldpZHRoKSh0aGlzLmhpZGVyKTtcblxuICAgIC8vIHdoZW4gdGhlIG92ZXJsYXkncyB0YWJsZSBkb2VzIG5vdCBoYXZlIGFueSBjZWxscyB0aGUgaGlkZXIgcmV0dXJucyAwLCBnZXQgdGhlbiB3aWR0aCBmcm9tIHRoZSB0YWJsZSBlbGVtZW50XG4gICAgcmV0dXJuIHdpZHRoICE9PSAwID8gd2lkdGggOiB0aGlzLmdldFdpZHRoKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0YWJsZSdzIHRvdGFsIGhlaWdodC4gVGhlIHJldHVybmVkIGhlaWdodCBpcyB0aGUgaGVpZ2h0IG9mIGFsbCByZW5kZXJlZCBjZWxscyAoaW5jbHVkaW5nIGhlYWRlcnMpXG4gICAqIHRoYXQgY2FuIGJlIGRpc3BsYXllZCBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRUb3RhbEhlaWdodCgpIHtcbiAgICBjb25zdCBoZWlnaHQgPSAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuaGlkZXIpO1xuXG4gICAgLy8gd2hlbiB0aGUgb3ZlcmxheSdzIHRhYmxlIGRvZXMgbm90IGhhdmUgYW55IGNlbGxzIHRoZSBoaWRlciByZXR1cm5zIDAsIGdldCB0aGVuIGhlaWdodCBmcm9tIHRoZSB0YWJsZSBlbGVtZW50XG4gICAgcmV0dXJuIGhlaWdodCAhPT0gMCA/IGhlaWdodCA6IHRoaXMuZ2V0SGVpZ2h0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB0YWJsZSBpcyB2aXNpYmxlLiBJdCByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBob2xkZXIgZWxlbWVudCAob3IgaXRzIHBhcmVudHMpXG4gICAqIGhhcyBDU1MgJ2Rpc3BsYXknIHByb3BlcnR5IGRpZmZlcmVudCB0aGFuICdub25lJy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuICgwLCBfZWxlbWVudC5pc1Zpc2libGUpKHRoaXMuVEFCTEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSByb3cgaGVhZGVyIHdpZHRocyBwcm92aWRlZCBieSB1c2VyIGluIGNsYXNzIGNvbnRydWN0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJvd0hlYWRlcldpZHRoRmFjdG9yeSBUaGUgZnVuY3Rpb24gd2hpY2ggY2FuIHByb3ZpZGUgZGVmYXVsdCB3aWR0aCB2YWx1ZXMgZm9yIHJvd3MuLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgX21vZGlmeVJvd0hlYWRlcldpZHRoKHJvd0hlYWRlcldpZHRoRmFjdG9yeSkge1xuICAgIGxldCB3aWR0aHMgPSAoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKHJvd0hlYWRlcldpZHRoRmFjdG9yeSkgPyByb3dIZWFkZXJXaWR0aEZhY3RvcnkoKSA6IG51bGw7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkod2lkdGhzKSkge1xuICAgICAgd2lkdGhzID0gWy4uLndpZHRoc107XG4gICAgICB3aWR0aHNbd2lkdGhzLmxlbmd0aCAtIDFdID0gdGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKHdpZHRoc1t3aWR0aHMubGVuZ3RoIC0gMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aHMgPSB0aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgod2lkdGhzKTtcbiAgICB9XG4gICAgcmV0dXJuIHdpZHRocztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3JyZWN0IHJvdyBoZWFkZXIgd2lkdGggaWYgbmVjZXNzYXJ5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIHdpZHRoIHRvIHByb2Nlc3MuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBfY29ycmVjdFJvd0hlYWRlcldpZHRoKHdpZHRoKSB7XG4gICAgbGV0IHJvd0hlYWRlcldpZHRoID0gd2lkdGg7XG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJvd0hlYWRlcldpZHRoID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2RlZmF1bHRDb2x1bW5XaWR0aCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgpIHtcbiAgICAgIHJvd0hlYWRlcldpZHRoICs9IDE7XG4gICAgfVxuICAgIHJldHVybiByb3dIZWFkZXJXaWR0aDtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gVGFibGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGVcIikpO1xudmFyIF9zdGlja3lSb3dzQm90dG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9taXhpbi9zdGlja3lSb3dzQm90dG9tXCIpKTtcbnZhciBfY2FsY3VsYXRlZENvbHVtbnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21peGluL2NhbGN1bGF0ZWRDb2x1bW5zXCIpKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9vdmVybGF5ID0gcmVxdWlyZShcIi4uL292ZXJsYXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBTdWJjbGFzcyBvZiBgVGFibGVgIHRoYXQgcHJvdmlkZXMgdGhlIGhlbHBlciBtZXRob2RzIHJlbGV2YW50IHRvIEJvdHRvbU92ZXJsYXksIGltcGxlbWVudGVkIHRocm91Z2ggbWl4aW5zLlxuICpcbiAqIEBtaXhlcyBzdGlja3lSb3dzQm90dG9tXG4gKiBAbWl4ZXMgY2FsY3VsYXRlZENvbHVtbnNcbiAqL1xuY2xhc3MgQm90dG9tT3ZlcmxheVRhYmxlIGV4dGVuZHMgX3RhYmxlLmRlZmF1bHQge1xuICAvKipcbiAgICogQHBhcmFtIHtUYWJsZURhb30gZGF0YUFjY2Vzc09iamVjdCBUaGUgZGF0YSBhY2Nlc3Mgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEZ1bmN0aW9uIHdoaWNoIHJldHVybiBwcm9wZXIgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzKSB7XG4gICAgc3VwZXIoZGF0YUFjY2Vzc09iamVjdCwgZmFjYWRlR2V0dGVyLCBkb21CaW5kaW5ncywgd3RTZXR0aW5ncywgX292ZXJsYXkuQ0xPTkVfQk9UVE9NKTtcbiAgfVxufVxuKDAsIF9vYmplY3QubWl4aW4pKEJvdHRvbU92ZXJsYXlUYWJsZSwgX3N0aWNreVJvd3NCb3R0b20uZGVmYXVsdCk7XG4oMCwgX29iamVjdC5taXhpbikoQm90dG9tT3ZlcmxheVRhYmxlLCBfY2FsY3VsYXRlZENvbHVtbnMuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBCb3R0b21PdmVybGF5VGFibGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGVcIikpO1xudmFyIF9zdGlja3lSb3dzQm90dG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9taXhpbi9zdGlja3lSb3dzQm90dG9tXCIpKTtcbnZhciBfc3RpY2t5Q29sdW1uc1N0YXJ0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9taXhpbi9zdGlja3lDb2x1bW5zU3RhcnRcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX292ZXJsYXkgPSByZXF1aXJlKFwiLi4vb3ZlcmxheVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFN1YmNsYXNzIG9mIGBUYWJsZWAgdGhhdCBwcm92aWRlcyB0aGUgaGVscGVyIG1ldGhvZHMgcmVsZXZhbnQgdG8gYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XG4gKiAoaW4gUlRMIG1vZGUgdGhlIG92ZXJsYXkgc2l0cyBvbiB0aGUgcmlnaHQgb2YgdGhlIHNjcmVlbiksIGltcGxlbWVudGVkIHRocm91Z2ggbWl4aW5zLlxuICpcbiAqIEBtaXhlcyBzdGlja3lSb3dzQm90dG9tXG4gKiBAbWl4ZXMgc3RpY2t5Q29sdW1uc1N0YXJ0XG4gKi9cbmNsYXNzIEJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVRhYmxlIGV4dGVuZHMgX3RhYmxlLmRlZmF1bHQge1xuICAvKipcbiAgICogQHBhcmFtIHtUYWJsZURhb30gZGF0YUFjY2Vzc09iamVjdCBUaGUgZGF0YSBhY2Nlc3Mgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEZ1bmN0aW9uIHdoaWNoIHJldHVybiBwcm9wZXIgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzKSB7XG4gICAgc3VwZXIoZGF0YUFjY2Vzc09iamVjdCwgZmFjYWRlR2V0dGVyLCBkb21CaW5kaW5ncywgd3RTZXR0aW5ncywgX292ZXJsYXkuQ0xPTkVfQk9UVE9NX0lOTElORV9TVEFSVF9DT1JORVIpO1xuICB9XG59XG4oMCwgX29iamVjdC5taXhpbikoQm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5VGFibGUsIF9zdGlja3lSb3dzQm90dG9tLmRlZmF1bHQpO1xuKDAsIF9vYmplY3QubWl4aW4pKEJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVRhYmxlLCBfc3RpY2t5Q29sdW1uc1N0YXJ0LmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5VGFibGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGVcIikpO1xudmFyIF9jYWxjdWxhdGVkUm93cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWl4aW4vY2FsY3VsYXRlZFJvd3NcIikpO1xudmFyIF9zdGlja3lDb2x1bW5zU3RhcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21peGluL3N0aWNreUNvbHVtbnNTdGFydFwiKSk7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfb3ZlcmxheSA9IHJlcXVpcmUoXCIuLi9vdmVybGF5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogU3ViY2xhc3Mgb2YgYFRhYmxlYCB0aGF0IHByb3ZpZGVzIHRoZSBoZWxwZXIgbWV0aG9kcyByZWxldmFudCB0byBJbmxpbmVTdGFydE92ZXJsYXlUYWJsZSwgaW1wbGVtZW50ZWQgdGhyb3VnaCBtaXhpbnMuXG4gKi9cbmNsYXNzIElubGluZVN0YXJ0T3ZlcmxheVRhYmxlIGV4dGVuZHMgX3RhYmxlLmRlZmF1bHQge1xuICAvKipcbiAgICogQHBhcmFtIHtUYWJsZURhb30gZGF0YUFjY2Vzc09iamVjdCBUaGUgZGF0YSBhY2Nlc3Mgb2JqZWN0LlxuICAgKiBAcGFyYW0ge0ZhY2FkZUdldHRlcn0gZmFjYWRlR2V0dGVyIEZ1bmN0aW9uIHdoaWNoIHJldHVybiBwcm9wZXIgZmFjYWRlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzKSB7XG4gICAgc3VwZXIoZGF0YUFjY2Vzc09iamVjdCwgZmFjYWRlR2V0dGVyLCBkb21CaW5kaW5ncywgd3RTZXR0aW5ncywgX292ZXJsYXkuQ0xPTkVfSU5MSU5FX1NUQVJUKTtcbiAgfVxufVxuKDAsIF9vYmplY3QubWl4aW4pKElubGluZVN0YXJ0T3ZlcmxheVRhYmxlLCBfY2FsY3VsYXRlZFJvd3MuZGVmYXVsdCk7XG4oMCwgX29iamVjdC5taXhpbikoSW5saW5lU3RhcnRPdmVybGF5VGFibGUsIF9zdGlja3lDb2x1bW5zU3RhcnQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBJbmxpbmVTdGFydE92ZXJsYXlUYWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLy4uLy4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX3RhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdGFibGVcIikpO1xudmFyIF9jYWxjdWxhdGVkUm93cyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWl4aW4vY2FsY3VsYXRlZFJvd3NcIikpO1xudmFyIF9jYWxjdWxhdGVkQ29sdW1ucyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWl4aW4vY2FsY3VsYXRlZENvbHVtbnNcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFN1YmNsYXNzIG9mIGBUYWJsZWAgdGhhdCBwcm92aWRlcyB0aGUgaGVscGVyIG1ldGhvZHMgcmVsZXZhbnQgdG8gdGhlIG1hc3RlciB0YWJsZSAobm90IG92ZXJsYXlzKSwgaW1wbGVtZW50ZWQgdGhyb3VnaCBtaXhpbnMuXG4gKlxuICogQG1peGVzIGNhbGN1bGF0ZWRSb3dzXG4gKiBAbWl4ZXMgY2FsY3VsYXRlZENvbHVtbnNcbiAqL1xuY2xhc3MgTWFzdGVyVGFibGUgZXh0ZW5kcyBfdGFibGUuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlRGFvfSBkYXRhQWNjZXNzT2JqZWN0IFRoZSBkYXRhIGFjY2VzcyBvYmplY3QuXG4gICAqIEBwYXJhbSB7RmFjYWRlR2V0dGVyfSBmYWNhZGVHZXR0ZXIgRnVuY3Rpb24gd2hpY2ggcmV0dXJuIHByb3BlciBmYWNhZGUuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIEJpbmRpbmdzIGludG8gRE9NLlxuICAgKiBAcGFyYW0ge1NldHRpbmdzfSB3dFNldHRpbmdzIFRoZSBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGFBY2Nlc3NPYmplY3QsIGZhY2FkZUdldHRlciwgZG9tQmluZGluZ3MsIHd0U2V0dGluZ3MpIHtcbiAgICBzdXBlcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzLCAnbWFzdGVyJyk7XG4gIH1cbiAgYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpIHtcbiAgICBjb25zdCB0cmltbWluZ0VsZW1lbnQgPSAoMCwgX2VsZW1lbnQuZ2V0VHJpbW1pbmdDb250YWluZXIpKHRoaXMud3RSb290RWxlbWVudCk7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdFdpbmRvd1xuICAgIH0gPSB0aGlzLmRvbUJpbmRpbmdzO1xuICAgIGlmICh0cmltbWluZ0VsZW1lbnQgPT09IHJvb3RXaW5kb3cpIHtcbiAgICAgIGNvbnN0IHByZXZlbnRPdmVyZmxvdyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdwcmV2ZW50T3ZlcmZsb3cnKTtcbiAgICAgIGlmICghcHJldmVudE92ZXJmbG93KSB7XG4gICAgICAgIHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93ID0gJ3Zpc2libGUnO1xuICAgICAgICB0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAndmlzaWJsZSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyaW1taW5nRWxlbWVudFBhcmVudCA9IHRyaW1taW5nRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgY29uc3QgdHJpbW1pbmdIZWlnaHQgPSAoMCwgX2VsZW1lbnQuZ2V0U3R5bGUpKHRyaW1taW5nRWxlbWVudCwgJ2hlaWdodCcsIHJvb3RXaW5kb3cpO1xuICAgICAgY29uc3QgdHJpbW1pbmdPdmVyZmxvdyA9ICgwLCBfZWxlbWVudC5nZXRTdHlsZSkodHJpbW1pbmdFbGVtZW50LCAnb3ZlcmZsb3cnLCByb290V2luZG93KTtcbiAgICAgIGNvbnN0IGhvbGRlclN0eWxlID0gdGhpcy5ob2xkZXIuc3R5bGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNjcm9sbFdpZHRoLFxuICAgICAgICBzY3JvbGxIZWlnaHRcbiAgICAgIH0gPSB0cmltbWluZ0VsZW1lbnQ7XG4gICAgICBsZXQgd2lkdGggPSB0cmltbWluZ0VsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICBsZXQgaGVpZ2h0ID0gdHJpbW1pbmdFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gWydhdXRvJywgJ2hpZGRlbicsICdzY3JvbGwnXTtcbiAgICAgIGlmICh0cmltbWluZ0VsZW1lbnRQYXJlbnQgJiYgb3ZlcmZsb3cuaW5jbHVkZXModHJpbW1pbmdPdmVyZmxvdykpIHtcbiAgICAgICAgY29uc3QgY2xvbmVOb2RlID0gdHJpbW1pbmdFbGVtZW50LmNsb25lTm9kZShmYWxzZSk7XG5cbiAgICAgICAgLy8gQmVmb3JlIGNhbGN1bGF0aW5nIHRoZSBoZWlnaHQgb2YgdGhlIHRyaW1taW5nIGVsZW1lbnQsIHNldCBvdmVyZmxvdzogYXV0byB0byBoaWRlIHNjcm9sbGJhcnMuXG4gICAgICAgIC8vIEFuIGlzc3VlIG9jY3VycmVkIG9uIEZpcmVmb3gsIHdoZXJlIGFuIGVtcHR5IGVsZW1lbnQgd2l0aCBvdmVyZmxvdzogc2Nyb2xsIHJldHVybnMgYW4gZWxlbWVudCBoZWlnaHQgaGlnaGVyIHRoYW4gMHB4XG4gICAgICAgIC8vIGRlc3BpdGUgYW4gZW1wdHkgY29udGVudCB3aXRoaW4uXG4gICAgICAgIGNsb25lTm9kZS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgLy8gSXNzdWUgIzk1NDUgc2hvd3MgcHJvYmxlbSB3aXRoIGNhbGN1bGF0aW5nIGhlaWdodCBmb3IgSE9UIG9uIEZpcmVmb3ggd2hpbGUgcGxhY2luZyBpbnN0YW5jZSBpbiBzb21lXG4gICAgICAgIC8vIGZsZXggY29udGFpbmVycyBhbmQgc2V0dGluZyBvdmVyZmxvdyBmb3Igc29tZSBgZGl2YCBzZWN0aW9uLlxuICAgICAgICBjbG9uZU5vZGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBpZiAodHJpbW1pbmdFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgIHRyaW1taW5nRWxlbWVudFBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmVOb2RlLCB0cmltbWluZ0VsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmltbWluZ0VsZW1lbnRQYXJlbnQuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbG9uZUhlaWdodCA9IHBhcnNlSW50KCgwLCBfZWxlbWVudC5nZXRDb21wdXRlZFN0eWxlKShjbG9uZU5vZGUsIHJvb3RXaW5kb3cpLmhlaWdodCwgMTApO1xuICAgICAgICB0cmltbWluZ0VsZW1lbnRQYXJlbnQucmVtb3ZlQ2hpbGQoY2xvbmVOb2RlKTtcbiAgICAgICAgaWYgKGNsb25lSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oaGVpZ2h0LCBzY3JvbGxIZWlnaHQpO1xuICAgICAgaG9sZGVyU3R5bGUuaGVpZ2h0ID0gdHJpbW1pbmdIZWlnaHQgPT09ICdhdXRvJyA/ICdhdXRvJyA6IGAke2hlaWdodH1weGA7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHdpZHRoLCBzY3JvbGxXaWR0aCk7XG4gICAgICBob2xkZXJTdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgIGhvbGRlclN0eWxlLm92ZXJmbG93ID0gJyc7XG4gICAgICB0aGlzLmhhc1RhYmxlSGVpZ2h0ID0gaG9sZGVyU3R5bGUuaGVpZ2h0ID09PSAnYXV0bycgPyB0cnVlIDogaGVpZ2h0ID4gMDtcbiAgICAgIHRoaXMuaGFzVGFibGVXaWR0aCA9IHdpZHRoID4gMDtcbiAgICB9XG4gICAgdGhpcy5pc1RhYmxlVmlzaWJsZSA9ICgwLCBfZWxlbWVudC5pc1Zpc2libGUpKHRoaXMuVEFCTEUpO1xuICB9XG4gIG1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHd0U2V0dGluZ3NcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICB3dFZpZXdwb3J0XG4gICAgfSA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdDtcbiAgICBjb25zdCBvdmVybGF5TmFtZSA9ICdtYXN0ZXInO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnMgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzQ291bnQgPSBjb2x1bW5IZWFkZXJzLmxlbmd0aDtcbiAgICBpZiAoY29sdW1uSGVhZGVyc0NvdW50ICYmICF3dFZpZXdwb3J0Lmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbb3ZlcmxheU5hbWVdKSB7XG4gICAgICBjb25zdCByb3dIZWFkZXJzID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJyk7XG4gICAgICBjb25zdCByb3dIZWFkZXJDb3VudCA9IHJvd0hlYWRlcnMubGVuZ3RoO1xuICAgICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbkhlYWRlcnNDb3VudDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IHJlbmRlcmVkQ29sdW1uSW5kZXggPSAtMSAqIHJvd0hlYWRlckNvdW50OyByZW5kZXJlZENvbHVtbkluZGV4IDwgY29sdW1uQ291bnQ7IHJlbmRlcmVkQ29sdW1uSW5kZXgrKykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxlblxuICAgICAgICAgIHRoaXMubWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKHJlbmRlcmVkQ29sdW1uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3dFZpZXdwb3J0Lmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbb3ZlcmxheU5hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbigwLCBfb2JqZWN0Lm1peGluKShNYXN0ZXJUYWJsZSwgX2NhbGN1bGF0ZWRSb3dzLmRlZmF1bHQpO1xuKDAsIF9vYmplY3QubWl4aW4pKE1hc3RlclRhYmxlLCBfY2FsY3VsYXRlZENvbHVtbnMuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBNYXN0ZXJUYWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xuY29uc3QgTUlYSU5fTkFNRSA9ICdjYWxjdWxhdGVkQ29sdW1ucyc7XG5cbi8qKlxuICogTWl4aW4gZm9yIHRoZSBzdWJjbGFzc2VzIG9mIGBUYWJsZWAgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2ZcbiAqIGhlbHBlciBtZXRob2RzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gY29sdW1ucy5cbiAqIFRoaXMgbWl4aW4gaXMgbWVhbnQgdG8gYmUgYXBwbGllZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBgVGFibGVgXG4gKiB0aGF0IHVzZSB2aXJ0dWFsIHJlbmRlcmluZyBpbiB0aGUgaG9yaXpvbnRhbCBheGlzLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKi9cbmNvbnN0IGNhbGN1bGF0ZWRDb2x1bW5zID0ge1xuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJlbmRlcmVkIGNvbHVtbi4gSWYgbm8gY29sdW1ucyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkge1xuICAgIGNvbnN0IHN0YXJ0Q29sdW1uID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7XG4gICAgaWYgKHN0YXJ0Q29sdW1uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBzdGFydENvbHVtbjtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIGNvbHVtbnMgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFZpc2libGVDb2x1bW4oKSB7XG4gICAgY29uc3Qgc3RhcnRDb2x1bW4gPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRDb2x1bW47XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgZmlyc3QgY29sdW1uIHBhcnRpYWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gY29sdW1ucyBhcmUgcGFydGlhbGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSB7XG4gICAgY29uc3Qgc3RhcnRDb2x1bW4gPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO1xuICAgIGlmIChzdGFydENvbHVtbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRDb2x1bW47XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByZW5kZXJlZCBjb2x1bW4uIElmIG5vIGNvbHVtbnMgYXJlIHJlbmRlcmVkLCByZXR1cm5zIGFuIGVycm9yIGNvZGU6IC0xLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkge1xuICAgIGNvbnN0IGVuZENvbHVtbiA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5kZXJlZDtcbiAgICBpZiAoZW5kQ29sdW1uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBlbmRDb2x1bW47XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCBjb2x1bW4gZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIGNvbHVtbnMgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRMYXN0VmlzaWJsZUNvbHVtbigpIHtcbiAgICBjb25zdCBlbmRDb2x1bW4gPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtcbiAgICBpZiAoZW5kQ29sdW1uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBlbmRDb2x1bW47XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCBjb2x1bW4gcGFydGlhbGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LiBJZiBubyBjb2x1bW5zIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkge1xuICAgIGNvbnN0IGVuZENvbHVtbiA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO1xuICAgIGlmIChlbmRDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZENvbHVtbjtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIGNvbHVtbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbHkgdmlzaWJsZSBjb2x1bW5zIGluIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFZpc2libGVDb2x1bW5zQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93IGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRSb3dIZWFkZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb3dIZWFkZXJzLmxlbmd0aDtcbiAgfVxufTtcbigwLCBfb2JqZWN0LmRlZmluZUdldHRlcikoY2FsY3VsYXRlZENvbHVtbnMsICdNSVhJTl9OQU1FJywgTUlYSU5fTkFNRSwge1xuICB3cml0YWJsZTogZmFsc2UsXG4gIGVudW1lcmFibGU6IGZhbHNlXG59KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNhbGN1bGF0ZWRDb2x1bW5zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG5jb25zdCBNSVhJTl9OQU1FID0gJ2NhbGN1bGF0ZWRSb3dzJztcblxuLyoqXG4gKiBNaXhpbiBmb3IgdGhlIHN1YmNsYXNzZXMgb2YgYFRhYmxlYCB3aXRoIGltcGxlbWVudGF0aW9ucyBvZlxuICogaGVscGVyIG1ldGhvZHMgdGhhdCBhcmUgcmVsYXRlZCB0byByb3dzLlxuICogVGhpcyBtaXhpbiBpcyBtZWFudCB0byBiZSBhcHBsaWVkIGluIHRoZSBzdWJjbGFzc2VzIG9mIGBUYWJsZWBcbiAqIHRoYXQgdXNlIHZpcnR1YWwgcmVuZGVyaW5nIGluIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKi9cbmNvbnN0IGNhbGN1bGF0ZWRSb3dzID0ge1xuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJlbmRlcmVkIHJvdy4gSWYgbm8gcm93cyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFJlbmRlcmVkUm93KCkge1xuICAgIGNvbnN0IHN0YXJ0Um93ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UmVuZGVyZWQ7XG4gICAgaWYgKHN0YXJ0Um93ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBzdGFydFJvdztcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBmaXJzdCByb3cgZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIHJvd3MgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFZpc2libGVSb3coKSB7XG4gICAgY29uc3Qgc3RhcnRSb3cgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO1xuICAgIGlmIChzdGFydFJvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRSb3c7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgZmlyc3Qgcm93IHBhcnRpYWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gcm93cyBhcmUgcGFydGlhbGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSB7XG4gICAgY29uc3Qgc3RhcnRSb3cgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlO1xuICAgIGlmIChzdGFydFJvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnRSb3c7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByZW5kZXJlZCByb3cuIElmIG5vIHJvd3MgYXJlIHJlbmRlcmVkLCByZXR1cm5zIGFuIGVycm9yIGNvZGU6IC0xLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0TGFzdFJlbmRlcmVkUm93KCkge1xuICAgIGNvbnN0IGVuZFJvdyA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDtcbiAgICBpZiAoZW5kUm93ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBlbmRSb3c7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByb3cgZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIHJvd3MgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRMYXN0VmlzaWJsZVJvdygpIHtcbiAgICBjb25zdCBlbmRSb3cgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJsZTtcbiAgICBpZiAoZW5kUm93ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiBlbmRSb3c7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByb3cgcGFydGlhbGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LiBJZiBubyByb3dzIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkge1xuICAgIGNvbnN0IGVuZFJvdyA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dQYXJ0aWFsbHlWaXNpYmxlO1xuICAgIGlmIChlbmRSb3cgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZFJvdztcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRSZW5kZXJlZFJvd3NDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbHkgdmlzaWJsZSByb3dzIGluIHRoZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFZpc2libGVSb3dzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1uIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aDtcbiAgfVxufTtcbigwLCBfb2JqZWN0LmRlZmluZUdldHRlcikoY2FsY3VsYXRlZFJvd3MsICdNSVhJTl9OQU1FJywgTUlYSU5fTkFNRSwge1xuICB3cml0YWJsZTogZmFsc2UsXG4gIGVudW1lcmFibGU6IGZhbHNlXG59KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IGNhbGN1bGF0ZWRSb3dzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG5jb25zdCBNSVhJTl9OQU1FID0gJ3N0aWNreUNvbHVtbnNTdGFydCc7XG5cbi8qKlxuICogTWl4aW4gZm9yIHRoZSBzdWJjbGFzc2VzIG9mIGBUYWJsZWAgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2ZcbiAqIGhlbHBlciBtZXRob2RzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gY29sdW1ucy5cbiAqIFRoaXMgbWl4aW4gaXMgbWVhbnQgdG8gYmUgYXBwbGllZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBgVGFibGVgXG4gKiB0aGF0IHVzZSBzdGlja3kgcmVuZGVyaW5nIG9mIHRoZSBmaXJzdCBjb2x1bW5zIGluIHRoZSBob3Jpem9udGFsIGF4aXMuXG4gKlxuICogQHR5cGUge29iamVjdH1cbiAqL1xuY29uc3Qgc3RpY2t5Q29sdW1uc1N0YXJ0ID0ge1xuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJlbmRlcmVkIGNvbHVtbi4gSWYgbm8gY29sdW1ucyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkge1xuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKTtcbiAgICBpZiAodG90YWxDb2x1bW5zID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IGNvbHVtbiBmdWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gY29sdW1ucyBhcmUgZnVsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCBjb2x1bW5zIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gcGFydGlhbGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LiBJZiBubyBjb2x1bW5zIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCBjb2x1bW5zIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkIGNvbHVtbi4gSWYgbm8gY29sdW1ucyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSAtIDE7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCBjb2x1bW4gZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIGNvbHVtbnMgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgY29sdW1ucyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGxhc3QgY29sdW1uIHBhcnRpYWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gY29sdW1ucyBhcmUgcGFydGlhbGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgY29sdW1ucyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKTtcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0JyksIHRvdGFsQ29sdW1ucyk7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiBmdWxseSB2aXNpYmxlIGNvbHVtbnMgaW4gdGhlIHZpZXdwb3J0LlxuICAgKiBBc3N1bWVzIHRoYXQgYWxsIHJlbmRlcmVkIGNvbHVtbnMgYXJlIGZ1bGx5IHZpc2libGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3cgaGVhZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFJvd0hlYWRlcnNDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RoO1xuICB9XG59O1xuKDAsIF9vYmplY3QuZGVmaW5lR2V0dGVyKShzdGlja3lDb2x1bW5zU3RhcnQsICdNSVhJTl9OQU1FJywgTUlYSU5fTkFNRSwge1xuICB3cml0YWJsZTogZmFsc2UsXG4gIGVudW1lcmFibGU6IGZhbHNlXG59KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0aWNreUNvbHVtbnNTdGFydDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xuY29uc3QgTUlYSU5fTkFNRSA9ICdzdGlja3lSb3dzQm90dG9tJztcblxuLyoqXG4gKiBNaXhpbiBmb3IgdGhlIHN1YmNsYXNzZXMgb2YgYFRhYmxlYCB3aXRoIGltcGxlbWVudGF0aW9ucyBvZlxuICogaGVscGVyIG1ldGhvZHMgdGhhdCBhcmUgcmVsYXRlZCB0byByb3dzLlxuICogVGhpcyBtaXhpbiBpcyBtZWFudCB0byBiZSBhcHBsaWVkIGluIHRoZSBzdWJjbGFzc2VzIG9mIGBUYWJsZWBcbiAqIHRoYXQgdXNlIHN0aWNreSByZW5kZXJpbmcgb2YgdGhlIGJvdHRvbSByb3dzIGluIHRoZSB2ZXJ0aWNhbCBheGlzLlxuICpcbiAqIEB0eXBlIHtvYmplY3R9XG4gKi9cbmNvbnN0IHN0aWNreVJvd3NCb3R0b20gPSB7XG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVuZGVyZWQgcm93LiBJZiBubyByb3dzIGFyZSByZW5kZXJlZCwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldEZpcnN0UmVuZGVyZWRSb3coKSB7XG4gICAgY29uc3QgdG90YWxSb3dzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpO1xuICAgIGNvbnN0IGZpeGVkUm93c0JvdHRvbSA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NCb3R0b20nKTtcbiAgICBjb25zdCBpbmRleCA9IHRvdGFsUm93cyAtIGZpeGVkUm93c0JvdHRvbTtcbiAgICBpZiAodG90YWxSb3dzID09PSAwIHx8IGZpeGVkUm93c0JvdHRvbSA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJvdyBmdWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gcm93cyBhcmUgZnVsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBmaXJzdCByb3cgcGFydGlhbGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LiBJZiBubyByb3dzIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkIHJvdy4gSWYgbm8gcm93cyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRMYXN0UmVuZGVyZWRSb3coKSB7XG4gICAgcmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKSAtIDE7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByb3cgZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIHJvd3MgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgcm93cyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGxhc3Qgcm93IHBhcnRpYWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gcm93cyBhcmUgcGFydGlhbGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgcm93cyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFJlbmRlcmVkUm93c0NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c0JvdHRvbScpLCB0b3RhbFJvd3MpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbHkgdmlzaWJsZSByb3dzIGluIHRoZSB2aWV3cG9ydC5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0VmlzaWJsZVJvd3NDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1uIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG4oMCwgX29iamVjdC5kZWZpbmVHZXR0ZXIpKHN0aWNreVJvd3NCb3R0b20sICdNSVhJTl9OQU1FJywgTUlYSU5fTkFNRSwge1xuICB3cml0YWJsZTogZmFsc2UsXG4gIGVudW1lcmFibGU6IGZhbHNlXG59KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHN0aWNreVJvd3NCb3R0b207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbmNvbnN0IE1JWElOX05BTUUgPSAnc3RpY2t5Um93c1RvcCc7XG5cbi8qKlxuICogTWl4aW4gZm9yIHRoZSBzdWJjbGFzc2VzIG9mIGBUYWJsZWAgd2l0aCBpbXBsZW1lbnRhdGlvbnMgb2ZcbiAqIGhlbHBlciBtZXRob2RzIHRoYXQgYXJlIHJlbGF0ZWQgdG8gcm93cy5cbiAqIFRoaXMgbWl4aW4gaXMgbWVhbnQgdG8gYmUgYXBwbGllZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBgVGFibGVgXG4gKiB0aGF0IHVzZSBzdGlja3kgcmVuZGVyaW5nIG9mIHRoZSB0b3Agcm93cyBpbiB0aGUgdmVydGljYWwgYXhpcy5cbiAqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICovXG5jb25zdCBzdGlja3lSb3dzVG9wID0ge1xuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJlbmRlcmVkIHJvdy4gSWYgbm8gcm93cyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRGaXJzdFJlbmRlcmVkUm93KCkge1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICBpZiAodG90YWxSb3dzID09PSAwKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGZpcnN0IHJvdyBmdWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gcm93cyBhcmUgZnVsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBmaXJzdCByb3cgcGFydGlhbGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0LiBJZiBubyByb3dzIGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSwgcmV0dXJucyBhbiBlcnJvciBjb2RlOiAtMS5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcbiAgfSxcbiAgLyoqXG4gICAqIEdldCB0aGUgc291cmNlIGluZGV4IG9mIHRoZSBsYXN0IHJlbmRlcmVkIHJvdy4gSWYgbm8gcm93cyBhcmUgcmVuZGVyZWQsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRMYXN0UmVuZGVyZWRSb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSAtIDE7XG4gIH0sXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNvdXJjZSBpbmRleCBvZiB0aGUgbGFzdCByb3cgZnVsbHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQuIElmIG5vIHJvd3MgYXJlIGZ1bGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgcm93cyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBzb3VyY2UgaW5kZXggb2YgdGhlIGxhc3Qgcm93IHBhcnRpYWxseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydC4gSWYgbm8gcm93cyBhcmUgcGFydGlhbGx5IHZpc2libGUsIHJldHVybnMgYW4gZXJyb3IgY29kZTogLTEuXG4gICAqIEFzc3VtZXMgdGhhdCBhbGwgcmVuZGVyZWQgcm93cyBhcmUgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICogQHRoaXMgVGFibGVcbiAgICovXG4gIGdldFJlbmRlcmVkUm93c0NvdW50KCkge1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbFJvd3MnKTtcbiAgICByZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpLCB0b3RhbFJvd3MpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgZnVsbHkgdmlzaWJsZSByb3dzIGluIHRoZSB2aWV3cG9ydC5cbiAgICogQXNzdW1lcyB0aGF0IGFsbCByZW5kZXJlZCByb3dzIGFyZSBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAdGhpcyBUYWJsZVxuICAgKi9cbiAgZ2V0VmlzaWJsZVJvd3NDb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO1xuICB9LFxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1uIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEB0aGlzIFRhYmxlXG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aDtcbiAgfVxufTtcbigwLCBfb2JqZWN0LmRlZmluZUdldHRlcikoc3RpY2t5Um93c1RvcCwgJ01JWElOX05BTUUnLCBNSVhJTl9OQU1FLCB7XG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgZW51bWVyYWJsZTogZmFsc2Vcbn0pO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc3RpY2t5Um93c1RvcDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90YWJsZVwiKSk7XG52YXIgX3N0aWNreVJvd3NUb3AgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21peGluL3N0aWNreVJvd3NUb3BcIikpO1xudmFyIF9jYWxjdWxhdGVkQ29sdW1ucyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWl4aW4vY2FsY3VsYXRlZENvbHVtbnNcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX292ZXJsYXkgPSByZXF1aXJlKFwiLi4vb3ZlcmxheVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFN1YmNsYXNzIG9mIGBUYWJsZWAgdGhhdCBwcm92aWRlcyB0aGUgaGVscGVyIG1ldGhvZHMgcmVsZXZhbnQgdG8gVG9wT3ZlcmxheSwgaW1wbGVtZW50ZWQgdGhyb3VnaCBtaXhpbnMuXG4gKlxuICogQG1peGVzIHN0aWNreVJvd3NUb3BcbiAqIEBtaXhlcyBjYWxjdWxhdGVkQ29sdW1uc1xuICovXG5jbGFzcyBUb3BPdmVybGF5VGFibGUgZXh0ZW5kcyBfdGFibGUuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlRGFvfSBkYXRhQWNjZXNzT2JqZWN0IFRoZSBkYXRhIGFjY2VzcyBvYmplY3QuXG4gICAqIEBwYXJhbSB7RmFjYWRlR2V0dGVyfSBmYWNhZGVHZXR0ZXIgRnVuY3Rpb24gd2hpY2ggcmV0dXJuIHByb3BlciBmYWNhZGUuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIEJpbmRpbmdzIGludG8gRE9NLlxuICAgKiBAcGFyYW0ge1NldHRpbmdzfSB3dFNldHRpbmdzIFRoZSBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGFBY2Nlc3NPYmplY3QsIGZhY2FkZUdldHRlciwgZG9tQmluZGluZ3MsIHd0U2V0dGluZ3MpIHtcbiAgICBzdXBlcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzLCBfb3ZlcmxheS5DTE9ORV9UT1ApO1xuICB9XG59XG4oMCwgX29iamVjdC5taXhpbikoVG9wT3ZlcmxheVRhYmxlLCBfc3RpY2t5Um93c1RvcC5kZWZhdWx0KTtcbigwLCBfb2JqZWN0Lm1peGluKShUb3BPdmVybGF5VGFibGUsIF9jYWxjdWxhdGVkQ29sdW1ucy5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFRvcE92ZXJsYXlUYWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi90YWJsZVwiKSk7XG52YXIgX3N0aWNreVJvd3NUb3AgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21peGluL3N0aWNreVJvd3NUb3BcIikpO1xudmFyIF9zdGlja3lDb2x1bW5zU3RhcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21peGluL3N0aWNreUNvbHVtbnNTdGFydFwiKSk7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfb3ZlcmxheSA9IHJlcXVpcmUoXCIuLi9vdmVybGF5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogU3ViY2xhc3Mgb2YgYFRhYmxlYCB0aGF0IHByb3ZpZGVzIHRoZSBoZWxwZXIgbWV0aG9kcyByZWxldmFudCB0byB0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlcbiAqIChpbiBSVEwgbW9kZSB0aGUgb3ZlcmxheSBzaXRzIG9uIHRoZSByaWdodCBvZiB0aGUgc2NyZWVuKSwgaW1wbGVtZW50ZWQgdGhyb3VnaCBtaXhpbnMuXG4gKlxuICogQG1peGVzIHN0aWNreVJvd3NUb3BcbiAqIEBtaXhlcyBzdGlja3lDb2x1bW5zU3RhcnRcbiAqL1xuY2xhc3MgVG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5VGFibGUgZXh0ZW5kcyBfdGFibGUuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlRGFvfSBkYXRhQWNjZXNzT2JqZWN0IFRoZSBkYXRhIGFjY2VzcyBvYmplY3QuXG4gICAqIEBwYXJhbSB7RmFjYWRlR2V0dGVyfSBmYWNhZGVHZXR0ZXIgRnVuY3Rpb24gd2hpY2ggcmV0dXJuIHByb3BlciBmYWNhZGUuXG4gICAqIEBwYXJhbSB7RG9tQmluZGluZ3N9IGRvbUJpbmRpbmdzIEJpbmRpbmdzIGludG8gRE9NLlxuICAgKiBAcGFyYW0ge1NldHRpbmdzfSB3dFNldHRpbmdzIFRoZSBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGRhdGFBY2Nlc3NPYmplY3QsIGZhY2FkZUdldHRlciwgZG9tQmluZGluZ3MsIHd0U2V0dGluZ3MpIHtcbiAgICBzdXBlcihkYXRhQWNjZXNzT2JqZWN0LCBmYWNhZGVHZXR0ZXIsIGRvbUJpbmRpbmdzLCB3dFNldHRpbmdzLCBfb3ZlcmxheS5DTE9ORV9UT1BfSU5MSU5FX1NUQVJUX0NPUk5FUik7XG4gIH1cbn1cbigwLCBfb2JqZWN0Lm1peGluKShUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlUYWJsZSwgX3N0aWNreVJvd3NUb3AuZGVmYXVsdCk7XG4oMCwgX29iamVjdC5taXhpbikoVG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5VGFibGUsIF9zdGlja3lDb2x1bW5zU3RhcnQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBUb3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXlUYWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi8uLi8uLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9jb2x1bW5TdHJldGNoaW5nID0gcmVxdWlyZShcIi4vY29sdW1uU3RyZXRjaGluZ1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBDb2x1bW4gdXRpbHMgY2xhc3MgY29udGFpbnMgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCBzaXplcyBvZiB0aGUgY29sdW1ucy5cbiAqXG4gKiBAY2xhc3Mge0NvbHVtblV0aWxzfVxuICovXG5jbGFzcyBDb2x1bW5VdGlscyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlRGFvfSBkYXRhQWNjZXNzT2JqZWN0IFRoZSB0YWJsZSBEYXRhIEFjY2VzcyBPYmplY3QuXG4gICAqIEBwYXJhbSB7U2V0dGluZ3N9IHd0U2V0dGluZ3MgVGhlIHdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YUFjY2Vzc09iamVjdCwgd3RTZXR0aW5ncykge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUYWJsZURhb31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhQWNjZXNzT2JqZWN0XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NldHRpbmdzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInd0U2V0dGluZ3NcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7TWFwPG51bWJlciwgbnVtYmVyPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWFkZXJXaWR0aHNcIiwgbmV3IE1hcCgpKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q29sdW1uU3RyZXRjaGluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdHJldGNoaW5nXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5kYXRhQWNjZXNzT2JqZWN0ID0gZGF0YUFjY2Vzc09iamVjdDtcbiAgICB0aGlzLnd0U2V0dGluZ3MgPSB3dFNldHRpbmdzO1xuICAgIHRoaXMuc3RyZXRjaGluZyA9IG5ldyBfY29sdW1uU3RyZXRjaGluZy5Db2x1bW5TdHJldGNoaW5nKHtcbiAgICAgIHRvdGFsQ29sdW1uczogKCkgPT4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsQ29sdW1ucycpLFxuICAgICAgc3RyZXRjaE1vZGU6ICgpID0+IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdzdHJldGNoSCcpLFxuICAgICAgc3RyZXRjaGluZ0NvbHVtbldpZHRoRm46IChzdHJldGNoZWRXaWR0aCwgY29sdW1uKSA9PiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgnLCBzdHJldGNoZWRXaWR0aCwgY29sdW1uKSxcbiAgICAgIGNvbHVtbldpZHRoRm46IHNvdXJjZUNvbCA9PiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChzb3VyY2VDb2wpXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjb2x1bW4gd2lkdGggYmFzZWQgb24gcGFzc2VkIHNvdXJjZSBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNvdXJjZUluZGV4IENvbHVtbiBzb3VyY2UgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRXaWR0aChzb3VyY2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygnY29sdW1uV2lkdGgnLCBzb3VyY2VJbmRleCkgfHwgdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2RlZmF1bHRDb2x1bW5XaWR0aCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3RyZXRjaGVkIGNvbHVtbiB3aWR0aCBiYXNlZCBvbiBwYXNzZWQgc291cmNlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc291cmNlSW5kZXggQ29sdW1uIHNvdXJjZSBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFN0cmV0Y2hlZENvbHVtbldpZHRoKHNvdXJjZUluZGV4KSB7XG4gICAgbGV0IHdpZHRoID0gdGhpcy5nZXRXaWR0aChzb3VyY2VJbmRleCk7XG4gICAgY29uc3Qgc3RyZXRjaGVkV2lkdGggPSB0aGlzLnN0cmV0Y2hpbmcuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoc291cmNlSW5kZXgsIHdpZHRoKTtcbiAgICBpZiAoc3RyZXRjaGVkV2lkdGgpIHtcbiAgICAgIHdpZHRoID0gc3RyZXRjaGVkV2lkdGg7XG4gICAgfVxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNvbHVtbiBoZWFkZXIgaGVpZ2h0IGJhc2VkIG9uIHBhc3NlZCBoZWFkZXIgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBDb2x1bW4gaGVhZGVyIGxldmVsLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SGVhZGVySGVpZ2h0KGxldmVsKSB7XG4gICAgbGV0IGhlaWdodCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0Um93SGVpZ2h0Jyk7XG4gICAgY29uc3Qgb3ZlcnNpemVkSGVpZ2h0ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsZXZlbF07XG4gICAgaWYgKG92ZXJzaXplZEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWlnaHQgPSBoZWlnaHQgPyBNYXRoLm1heChoZWlnaHQsIG92ZXJzaXplZEhlaWdodCkgOiBvdmVyc2l6ZWRIZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjb2x1bW4gaGVhZGVyIHdpZHRoIGJhc2VkIG9uIHBhc3NlZCBzb3VyY2UgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VJbmRleCBDb2x1bW4gc291cmNlIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SGVhZGVyV2lkdGgoc291cmNlSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKHNvdXJjZUluZGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBzdHJldGNoaW5nIGNvbHVtbiB3aWR0aCBieSByZWNhbGN1bGF0aW5nIHRoZSB3aWR0aHMgb2YgdGhlIGNvbHVtbnMuXG4gICAqL1xuICByZWZyZXNoU3RyZXRjaGluZygpIHtcbiAgICBjb25zdCB7XG4gICAgICB3dFRhYmxlLFxuICAgICAgd3RWaWV3cG9ydCxcbiAgICAgIGNsb25lU291cmNlXG4gICAgfSA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdDtcbiAgICBjb25zdCBtYWluSG9sZGVyID0gY2xvbmVTb3VyY2UgPyBjbG9uZVNvdXJjZS53dFRhYmxlLmhvbGRlciA6IHd0VGFibGUuaG9sZGVyO1xuICAgIGNvbnN0IHNjcm9sbGJhckNvbXBlbnNhdGlvbiA9IG1haW5Ib2xkZXIub2Zmc2V0SGVpZ2h0IDwgbWFpbkhvbGRlci5zY3JvbGxIZWlnaHQgPyAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKCkgOiAwO1xuICAgIHRoaXMuc3RyZXRjaGluZy5yZWZyZXNoU3RyZXRjaGluZyh3dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSAtIHNjcm9sbGJhckNvbXBlbnNhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb2x1bW4gaGVhZGVyIHdpZHRocyB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgY2FjaGUuXG4gICAqL1xuICBjYWxjdWxhdGVXaWR0aHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5nc1xuICAgIH0gPSB0aGlzO1xuICAgIGxldCByb3dIZWFkZXJXaWR0aFNldHRpbmcgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3Jvd0hlYWRlcldpZHRoJyk7XG4gICAgdGhpcy5yZWZyZXNoU3RyZXRjaGluZygpO1xuICAgIHJvd0hlYWRlcldpZHRoU2V0dGluZyA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnb25Nb2RpZnlSb3dIZWFkZXJXaWR0aCcsIHJvd0hlYWRlcldpZHRoU2V0dGluZyk7XG4gICAgaWYgKHJvd0hlYWRlcldpZHRoU2V0dGluZyAhPT0gbnVsbCAmJiByb3dIZWFkZXJXaWR0aFNldHRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgcm93SGVhZGVyc0NvdW50ID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJykubGVuZ3RoO1xuICAgICAgY29uc3QgZGVmYXVsdENvbHVtbldpZHRoID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdkZWZhdWx0Q29sdW1uV2lkdGgnKTtcbiAgICAgIGZvciAobGV0IHZpc2libGVDb2x1bW5JbmRleCA9IDA7IHZpc2libGVDb2x1bW5JbmRleCA8IHJvd0hlYWRlcnNDb3VudDsgdmlzaWJsZUNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgbGV0IHdpZHRoID0gQXJyYXkuaXNBcnJheShyb3dIZWFkZXJXaWR0aFNldHRpbmcpID8gcm93SGVhZGVyV2lkdGhTZXR0aW5nW3Zpc2libGVDb2x1bW5JbmRleF0gOiByb3dIZWFkZXJXaWR0aFNldHRpbmc7XG4gICAgICAgIHdpZHRoID0gd2lkdGggPT09IG51bGwgfHwgd2lkdGggPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb2x1bW5XaWR0aCA6IHdpZHRoO1xuICAgICAgICB0aGlzLmhlYWRlcldpZHRocy5zZXQodmlzaWJsZUNvbHVtbkluZGV4LCB3aWR0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb2x1bW5VdGlsczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG52YXIgX3RvdGFsVGFyZ2V0V2lkdGggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfdG90YWxDb2x1bW5zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3N0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvbHVtbldpZHRoRm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc3RyZXRjaE1vZGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQ29sdW1uU3RyZXRjaGluZ09wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0b3RhbENvbHVtbnMgVG90YWwgbnVtYmVyIG9mIGNvbHVtbnMuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBjb2x1bW5XaWR0aEZuIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBhdCBhIGdpdmVuIGluZGV4IChpbiBweCkuXG4gKiBAcHJvcGVydHkgeydhbGwnIHwgJ2xhc3QnIHwgJ25vbmUnfSBzdHJldGNoTW9kZSBTdHJldGNoIG1vZGUgJ2FsbCcsICdsYXN0JyBvciAnbm9uZScuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBzdHJldGNoaW5nQ29sdW1uV2lkdGhGbiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5ldyB3aWR0aCBvZiB0aGUgc3RyZXRjaGVkIGNvbHVtbi5cbiAqL1xuLyoqXG4gKiBAY2xhc3MgQ29sdW1uU3RyZXRjaGluZ1xuICovXG5jbGFzcyBDb2x1bW5TdHJldGNoaW5nIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgY29sdW1uIHdpZHRoLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldCBERUZBVUxUX1dJRFRIKCkge1xuICAgIHJldHVybiA1MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtDb2x1bW5TdHJldGNoaW5nT3B0aW9uc30gb3B0aW9ucyBPYmplY3Qgd2l0aCBhbGwgb3B0aW9ucyBzcGVjaWZpZWQgZm9yIGNvbHVtbiB2aWV3cG9ydCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIGNvbnN0cnVjdG9yKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgdG90YWxDb2x1bW5zLFxuICAgICAgc3RyZXRjaE1vZGUsXG4gICAgICBzdHJldGNoaW5nQ29sdW1uV2lkdGhGbixcbiAgICAgIGNvbHVtbldpZHRoRm5cbiAgICB9ID0gX3JlZjtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdHJldGNoQWxsUmF0aW9cIiwgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdHJldGNoTGFzdFdpZHRoXCIsIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdHJldGNoQWxsQ29sdW1uc1dpZHRoXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90b3RhbFRhcmdldFdpZHRoLCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoXCIsIHRydWUpO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbigpOiBudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3RvdGFsQ29sdW1ucywgKCkgPT4gMCk7XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgc3RyZXRjaGVkIGNvbHVtbiBhdCBhIGdpdmVuIGluZGV4IChpbiBweCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKTogbnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdHJldGNoaW5nQ29sdW1uV2lkdGhGbiwgd2lkdGggPT4gd2lkdGgpO1xuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiBhdCBhIGdpdmVuIGluZGV4IChpbiBweCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKTogbnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb2x1bW5XaWR0aEZuLCB3aWR0aCA9PiB3aWR0aCk7XG4gICAgLyoqXG4gICAgICogU3RyZXRjaCBtb2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge2Z1bmN0aW9uKCk6ICdhbGwnIHwgJ2xhc3QnIHwgJ25vbmUnfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdHJldGNoTW9kZSwgKCkgPT4gJ25vbmUnKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3RvdGFsQ29sdW1ucywgdGhpcywgdG90YWxDb2x1bW5zKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3N0cmV0Y2hNb2RlLCB0aGlzLCBzdHJldGNoTW9kZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdHJldGNoaW5nQ29sdW1uV2lkdGhGbiwgdGhpcywgc3RyZXRjaGluZ0NvbHVtbldpZHRoRm4gIT09IG51bGwgJiYgc3RyZXRjaGluZ0NvbHVtbldpZHRoRm4gIT09IHZvaWQgMCA/IHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdHJldGNoaW5nQ29sdW1uV2lkdGhGbiwgdGhpcykpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29sdW1uV2lkdGhGbiwgdGhpcywgY29sdW1uV2lkdGhGbiAhPT0gbnVsbCAmJiBjb2x1bW5XaWR0aEZuICE9PSB2b2lkIDAgPyBjb2x1bW5XaWR0aEZuIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5XaWR0aEZuLCB0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGUgY29sdW1ucyBzdHJldGNoaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG90YWxXaWR0aCBUaGUgdG90YWwgd2lkdGggb2YgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVmcmVzaFN0cmV0Y2hpbmcodG90YWxXaWR0aCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0cmV0Y2hNb2RlLCB0aGlzKS5jYWxsKHRoaXMpID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdHJldGNoQWxsUmF0aW8gPSAwO1xuICAgIHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aCA9IFtdO1xuICAgIHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aCA9IHRydWU7XG4gICAgdGhpcy5zdHJldGNoTGFzdFdpZHRoID0gMDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3RvdGFsVGFyZ2V0V2lkdGgsIHRoaXMsIHRvdGFsV2lkdGgpO1xuICAgIGxldCBzdW1BbGwgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90b3RhbENvbHVtbnMsIHRoaXMpLmNhbGwodGhpcyk7IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB0aGlzLl9nZXRDb2x1bW5XaWR0aChpKTtcbiAgICAgIGNvbnN0IHBlcm1hbmVudENvbHVtbldpZHRoID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdHJldGNoaW5nQ29sdW1uV2lkdGhGbiwgdGhpcykuY2FsbCh0aGlzLCB1bmRlZmluZWQsIGkpO1xuICAgICAgaWYgKHR5cGVvZiBwZXJtYW5lbnRDb2x1bW5XaWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdG90YWxXaWR0aCAtPSBwZXJtYW5lbnRDb2x1bW5XaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1bUFsbCArPSBjb2x1bW5XaWR0aDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVtYWluaW5nU2l6ZSA9IHRvdGFsV2lkdGggLSBzdW1BbGw7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RyZXRjaE1vZGUsIHRoaXMpLmNhbGwodGhpcykgPT09ICdhbGwnICYmIHJlbWFpbmluZ1NpemUgPiAwKSB7XG4gICAgICB0aGlzLnN0cmV0Y2hBbGxSYXRpbyA9IHRvdGFsV2lkdGggLyBzdW1BbGw7XG4gICAgICB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGggPSBbXTtcbiAgICAgIHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0cmV0Y2hNb2RlLCB0aGlzKS5jYWxsKHRoaXMpID09PSAnbGFzdCcgJiYgdG90YWxXaWR0aCAhPT0gSW5maW5pdHkpIHtcbiAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdGhpcy5fZ2V0Q29sdW1uV2lkdGgoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90b3RhbENvbHVtbnMsIHRoaXMpLmNhbGwodGhpcykgLSAxKTtcbiAgICAgIGNvbnN0IGxhc3RDb2x1bW5XaWR0aCA9IHJlbWFpbmluZ1NpemUgKyBjb2x1bW5XaWR0aDtcbiAgICAgIHRoaXMuc3RyZXRjaExhc3RXaWR0aCA9IGxhc3RDb2x1bW5XaWR0aCA+PSAwID8gbGFzdENvbHVtbldpZHRoIDogY29sdW1uV2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdHJldGNoZWQgY29sdW1uIHdpZHRoIGJhc2VkIG9uIHN0cmV0Y2hIIChhbGwgb3IgbGFzdCkgc2V0dGluZyBwYXNzZWQgaW4gaGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVdpZHRoIFRoZSBkZWZhdWx0IGNvbHVtbiB3aWR0aC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgoY29sdW1uLCBiYXNlV2lkdGgpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdHJldGNoTW9kZSwgdGhpcykuY2FsbCh0aGlzKSA9PT0gJ2FsbCcgJiYgdGhpcy5zdHJldGNoQWxsUmF0aW8gIT09IDApIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2dldFN0cmV0Y2hlZEFsbENvbHVtbldpZHRoKGNvbHVtbiwgYmFzZVdpZHRoKTtcbiAgICB9IGVsc2UgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RyZXRjaE1vZGUsIHRoaXMpLmNhbGwodGhpcykgPT09ICdsYXN0JyAmJiB0aGlzLnN0cmV0Y2hMYXN0V2lkdGggIT09IDApIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2dldFN0cmV0Y2hlZExhc3RDb2x1bW5XaWR0aChjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlV2lkdGggVGhlIGRlZmF1bHQgY29sdW1uIHdpZHRoLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFN0cmV0Y2hlZEFsbENvbHVtbldpZHRoKGNvbHVtbiwgYmFzZVdpZHRoKSB7XG4gICAgbGV0IHN1bVJhdGlvV2lkdGggPSAwO1xuICAgIGlmICghdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2NvbHVtbl0pIHtcbiAgICAgIGNvbnN0IHN0cmV0Y2hlZFdpZHRoID0gTWF0aC5yb3VuZChiYXNlV2lkdGggKiB0aGlzLnN0cmV0Y2hBbGxSYXRpbyk7XG4gICAgICBjb25zdCBuZXdTdHJldGNoZWRXaWR0aCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RyZXRjaGluZ0NvbHVtbldpZHRoRm4sIHRoaXMpLmNhbGwodGhpcywgc3RyZXRjaGVkV2lkdGgsIGNvbHVtbik7XG4gICAgICBpZiAobmV3U3RyZXRjaGVkV2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbY29sdW1uXSA9IHN0cmV0Y2hlZFdpZHRoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2NvbHVtbl0gPSBpc05hTihuZXdTdHJldGNoZWRXaWR0aCkgPyB0aGlzLl9nZXRDb2x1bW5XaWR0aChjb2x1bW4pIDogbmV3U3RyZXRjaGVkV2lkdGg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RvdGFsQ29sdW1ucywgdGhpcykuY2FsbCh0aGlzKSAmJiB0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGgpIHtcbiAgICAgIHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3VtUmF0aW9XaWR0aCArPSB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbaV07XG4gICAgICB9XG4gICAgICBpZiAoc3VtUmF0aW9XaWR0aCAhPT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90b3RhbFRhcmdldFdpZHRoLCB0aGlzKSkge1xuICAgICAgICB0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoLmxlbmd0aCAtIDFdICs9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdG90YWxUYXJnZXRXaWR0aCwgdGhpcykgLSBzdW1SYXRpb1dpZHRoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2NvbHVtbl07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFN0cmV0Y2hlZExhc3RDb2x1bW5XaWR0aChjb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RvdGFsQ29sdW1ucywgdGhpcykuY2FsbCh0aGlzKSAtIDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmV0Y2hMYXN0V2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfZ2V0Q29sdW1uV2lkdGgoY29sdW1uKSB7XG4gICAgbGV0IHdpZHRoID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5XaWR0aEZuLCB0aGlzKS5jYWxsKHRoaXMsIGNvbHVtbik7XG4gICAgaWYgKGlzTmFOKHdpZHRoKSkge1xuICAgICAgd2lkdGggPSBDb2x1bW5TdHJldGNoaW5nLkRFRkFVTFRfV0lEVEg7XG4gICAgfVxuICAgIHJldHVybiB3aWR0aDtcbiAgfVxufVxuZXhwb3J0cy5Db2x1bW5TdHJldGNoaW5nID0gQ29sdW1uU3RyZXRjaGluZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogRmFjdG9yeSBmb3IgbmV3bHkgY3JlYXRlZCBET00gZWxlbWVudHMuXG4gKlxuICogQGNsYXNzIHtOb2Rlc1Bvb2x9XG4gKi9cbmNsYXNzIE5vZGVzUG9vbCB7XG4gIGNvbnN0cnVjdG9yKG5vZGVUeXBlKSB7XG4gICAgLyoqXG4gICAgICogTm9kZSB0eXBlIHRvIGdlbmVyYXRlIChldyAndGgnLCAndGQnKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibm9kZVR5cGVcIiwgdm9pZCAwKTtcbiAgICB0aGlzLm5vZGVUeXBlID0gbm9kZVR5cGUudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZG9jdW1lbnQgb3duZXIgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTERvY3VtZW50fSByb290RG9jdW1lbnQgVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAgICovXG4gIHNldFJvb3REb2N1bWVudChyb290RG9jdW1lbnQpIHtcbiAgICB0aGlzLnJvb3REb2N1bWVudCA9IHJvb3REb2N1bWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRhaW5zIGFuIGVsZW1lbnQuIFRoZSByZXR1cm5lZCBlbGVtZW50cyBpbiB0aGUgZmVhdHVyZSBjYW4gYmUgY2FjaGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBvYnRhaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSk7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IE5vZGVzUG9vbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8qKlxuICogRGVzY3JpYmVzIHRoYXQgVmlld1NpemVTZXQgaW5zdGFuY2UgZG9lc24ndCBzaGFyZSBzaXplcyB3aXRoIGFub3RoZXJcbiAqIGluc3RhbmNlIChyb290IG5vZGUgY2FuIGNvbnRhaW4gb25seSBvbmUgdHlwZSBvZiBjaGlsZHJlbiBub2RlcykuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgV09SS0lOR19TUEFDRV9BTEwgPSBleHBvcnRzLldPUktJTkdfU1BBQ0VfQUxMID0gMDtcbi8qKlxuICogRGVzY3JpYmVzIHRoYXQgVmlld1NpemVTZXQgaW5zdGFuY2Ugc2hhcmUgc2l6ZXMgd2l0aCBhbm90aGVyIGluc3RhbmNlIGFuZFxuICogc2V0IHdvcmtpbmcgc3BhY2UgZm9yIHRoaXMgaW5zdGFuY2UgdG8gJ3RvcCcgKHJvb3Qgbm9kZSBjYW4gY29udGFpbiBtdWx0aXBsZVxuICogdHlwZXMgb2YgY2hpbGRyZW4gYW5kIHRoaXMgaW5zdGFuY2Ugd2lsbCBiZSBvY2N1cGllZCB0b3Agc3BhY2Ugb2YgdGhlIHJvb3Qgbm9kZSkuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgV09SS0lOR19TUEFDRV9UT1AgPSBleHBvcnRzLldPUktJTkdfU1BBQ0VfVE9QID0gMTtcbi8qKlxuICogRGVzY3JpYmVzIHRoYXQgVmlld1NpemVTZXQgaW5zdGFuY2Ugc2hhcmUgc2l6ZXMgd2l0aCBhbm90aGVyIGluc3RhbmNlIGFuZFxuICogc2V0IHdvcmtpbmcgc3BhY2UgZm9yIHRoaXMgaW5zdGFuY2UgdG8gJ2JvdHRvbScgKHJvb3Qgbm9kZSBjYW4gY29udGFpbiBtdWx0aXBsZVxuICogdHlwZXMgb2YgY2hpbGRyZW4gYW5kIHRoaXMgaW5zdGFuY2Ugd2lsbCBiZSBvY2N1cGllZCBib3R0b20gc3BhY2Ugb2YgdGhlIHJvb3Qgbm9kZSkuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgV09SS0lOR19TUEFDRV9CT1RUT00gPSBleHBvcnRzLldPUktJTkdfU1BBQ0VfQk9UVE9NID0gMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdmlldyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmlld1wiKSk7XG5leHBvcnRzLk9yZGVyVmlldyA9IF92aWV3LmRlZmF1bHQ7XG52YXIgX3NoYXJlZFZpZXcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXJlZFZpZXdcIikpO1xuZXhwb3J0cy5TaGFyZWRPcmRlclZpZXcgPSBfc2hhcmVkVmlldy5kZWZhdWx0O1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdmlldyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmlld1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBFeGVjdXRpdmUgbW9kZWwgZm9yIFRSIHJvb3Qgbm9kZXMuXG4gKlxuICogQGNsYXNzIHtTaGFyZWRPcmRlclZpZXd9XG4gKi9cbmNsYXNzIFNoYXJlZE9yZGVyVmlldyBleHRlbmRzIF92aWV3LmRlZmF1bHQge1xuICAvKipcbiAgICogVGhlIG1ldGhvZCByZXN1bHRzIGluIG1lcmdpbmcgZXh0ZXJuYWwgb3JkZXIgdmlldyBpbnRvIHRoZSBjdXJyZW50IG9yZGVyLiBUaGlzIGhhcHBlbnMgb25seSBmb3Igb3JkZXIgdmlld3Mgd2hpY2hcbiAgICogb3BlcmF0ZSBvbiB0aGUgc2FtZSByb290IG5vZGUuXG4gICAqXG4gICAqIEluIHRoZSB0YWJsZSwgdGhlcmUgaXMgb25seSBvbmUgc2NlbmFyaW8gd2hlbiB0aGlzIGhhcHBlbnMuIFRSIHJvb3QgZWxlbWVudFxuICAgKiBoYXMgYSBjb21tb24gcm9vdCBub2RlIHdpdGggY2VsbHMgb3JkZXIgdmlldyBhbmQgcm93IGhlYWRlcnMgb3JkZXIgdmlldy4gQm90aCBjbGFzc2VzIGhhdmUgdG8gc2hhcmVcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgb3JkZXIgc2l6ZXMgdG8gbWFrZSBwcm9wZXIgZGlmZiBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3JkZXJWaWV3fSBvcmRlclZpZXcgVGhlIG9yZGVyIHZpZXcgdG8gbWVyZ2luZyB3aXRoLiBUaGUgdmlldyB3aWxsIGJlIGFkZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAqIEByZXR1cm5zIHtTaGFyZWRPcmRlclZpZXd9XG4gICAqL1xuICBwcmVwZW5kVmlldyhvcmRlclZpZXcpIHtcbiAgICB0aGlzLnNpemVTZXQucHJlcGVuZChvcmRlclZpZXcuc2l6ZVNldCk7XG4gICAgb3JkZXJWaWV3LnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGhvZCByZXN1bHRzIGluIG1lcmdpbmcgZXh0ZXJuYWwgb3JkZXIgdmlldyBpbnRvIHRoZSBjdXJyZW50IG9yZGVyLiBUaGlzIGhhcHBlbnMgb25seSBmb3Igb3JkZXIgdmlld3Mgd2hpY2hcbiAgICogb3BlcmF0ZSBvbiB0aGUgc2FtZSByb290IG5vZGUuXG4gICAqXG4gICAqIEluIHRoZSB0YWJsZSwgdGhlcmUgaXMgb25seSBvbmUgc2NlbmFyaW8gd2hlbiB0aGlzIGhhcHBlbnMuIFRSIHJvb3QgZWxlbWVudFxuICAgKiBoYXMgYSBjb21tb24gcm9vdCBub2RlIHdpdGggY2VsbHMgb3JkZXIgdmlldyBhbmQgcm93IGhlYWRlcnMgb3JkZXIgdmlldy4gQm90aCBjbGFzc2VzIGhhdmUgdG8gc2hhcmVcbiAgICogaW5mb3JtYXRpb24gYWJvdXQgdGhlaXIgb3JkZXIgc2l6ZXMgdG8gbWFrZSBwcm9wZXIgZGlmZiBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3JkZXJWaWV3fSBvcmRlclZpZXcgVGhlIG9yZGVyIHZpZXcgdG8gbWVyZ2luZyB3aXRoLiBUaGUgdmlldyB3aWxsIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAqIEByZXR1cm5zIHtTaGFyZWRPcmRlclZpZXd9XG4gICAqL1xuICBhcHBlbmRWaWV3KG9yZGVyVmlldykge1xuICAgIHRoaXMuc2l6ZVNldC5hcHBlbmQob3JkZXJWaWV3LnNpemVTZXQpO1xuICAgIG9yZGVyVmlldy5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU2hhcmVkT3JkZXJWaWV3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xudmFyIF92aWV3U2l6ZVNldCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmlld1NpemVTZXRcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBFeGVjdXRpdmUgbW9kZWwgZm9yIGVhY2ggdGFibGUgcmVuZGVyZXIuIEl0J3MgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyBET00gbm9kZXMgaW4gYVxuICogc3BlY2lmaWVkIG9yZGVyIGFuZCBhZGp1c3RpbmcgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcm9vdCBub2RlLlxuICpcbiAqIE9ubHkgdGhpcyBjbGFzcyBoYXZlIHJpZ2h0cyB0byBqdWdnbGluZyBET00gZWxlbWVudHMgd2l0aGluIHRoZSByb290IG5vZGUgKHNlZSByZW5kZXIgbWV0aG9kKS5cbiAqXG4gKiBAY2xhc3Mge09yZGVyVmlld31cbiAqL1xuY2xhc3MgT3JkZXJWaWV3IHtcbiAgY29uc3RydWN0b3Iocm9vdE5vZGUsIG5vZGVzUG9vbCwgY2hpbGROb2RlVHlwZSkge1xuICAgIC8qKlxuICAgICAqIFRoZSByb290IG5vZGUgdG8gbWFuYWdlIHdpdGguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm9vdE5vZGVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBGYWN0b3J5IGZvciBuZXdseSBjcmVhdGVkIERPTSBlbGVtZW50cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJub2Rlc1Bvb2xcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBIb2xkZXIgZm9yIHNpemluZyBhbmQgcG9zaXRpb25pbmcgb2YgdGhlIHZpZXcuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Vmlld1NpemVTZXR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2l6ZVNldFwiLCBuZXcgX3ZpZXdTaXplU2V0LmRlZmF1bHQoKSk7XG4gICAgLyoqXG4gICAgICogTm9kZSB0eXBlIHdoaWNoIHRoZSBvcmRlciB2aWV3IHdpbGwgbWFuYWdlIHdoaWxlIHJlbmRlcmluZyB0aGUgRE9NIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjaGlsZE5vZGVUeXBlXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIHZpc3VhbCBpbmRleCBvZiBjdXJyZW50bHkgcHJvY2Vzc2VkIHJvdy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidmlzdWFsSW5kZXhcIiwgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgRE9NIGVsZW1lbnRzIHdoaWNoIGFyZSByZW5kZXJlZCBmb3IgdGhpcyByZW5kZXIgY3ljbGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnRbXX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2xsZWN0ZWROb2Rlc1wiLCBbXSk7XG4gICAgdGhpcy5yb290Tm9kZSA9IHJvb3ROb2RlO1xuICAgIHRoaXMubm9kZXNQb29sID0gbm9kZXNQb29sO1xuICAgIHRoaXMuY2hpbGROb2RlVHlwZSA9IGNoaWxkTm9kZVR5cGUudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzaXplIGZvciByZW5kZXJlZCBlbGVtZW50cy4gSXQgY2FuIGJlIGEgc2l6ZSBmb3Igcm93cywgY2VsbHMgb3Igc2l6ZSBmb3Igcm93XG4gICAqIGhlYWRlcnMgZXRjLiBJdCBkZXBlbmRzIGZvciB3aGF0IHRhYmxlIHJlbmRlcmVyIHRoaXMgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplIFRoZSBzaXplLlxuICAgKiBAcmV0dXJucyB7T3JkZXJWaWV3fVxuICAgKi9cbiAgc2V0U2l6ZShzaXplKSB7XG4gICAgdGhpcy5zaXplU2V0LnNldFNpemUoc2l6ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgb2Zmc2V0IGZvciByZW5kZXJlZCBlbGVtZW50cy4gVGhlIG9mZnNldCBkZXNjcmliZXMgdGhlIHNoaWZ0IGJldHdlZW4gMCBhbmRcbiAgICogdGhlIGZpcnN0IHJlbmRlcmVkIGVsZW1lbnQgYWNjb3JkaW5nIHRvIHRoZSBzY3JvbGwgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIG9mZnNldC5cbiAgICogQHJldHVybnMge09yZGVyVmlld31cbiAgICovXG4gIHNldE9mZnNldChvZmZzZXQpIHtcbiAgICB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KG9mZnNldCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIHZpZXcgc2hhcmVzIHRoZSByb290IG5vZGUgd2l0aCBhbm90aGVyIGluc3RhbmNlLiBUaGlzIGhhcHBlbnMgb25seSBvbmNlIHdoZW5cbiAgICogYSByb3cgKFRSKSBhcyBhIHJvb3Qgbm9kZSBpcyBtYW5hZ2VkIGJ5IHR3byBPcmRlclZpZXcgaW5zdGFuY2VzLiBJZiB0aGlzIGhhcHBlbnMgYW5vdGhlciBET00gaW5qZWN0aW9uXG4gICAqIGFsZ29yaXRobSBpcyBwZXJmb3JtZWQgdG8gYWNoaWV2ZSBjb25zaXN0ZW50IG9yZGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2hhcmVkVmlld1NldCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByZW5kZXJlZCBET00gZWxlbWVudCBiYXNlZCBvbiB2aXN1YWwgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxJbmRleCBUaGUgdmlzdWFsIGluZGV4LlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXROb2RlKHZpc3VhbEluZGV4KSB7XG4gICAgcmV0dXJuIHZpc3VhbEluZGV4IDwgdGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGggPyB0aGlzLmNvbGxlY3RlZE5vZGVzW3Zpc3VhbEluZGV4XSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50bHkgcHJvY2Vzc2VkIERPTSBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRDdXJyZW50Tm9kZSgpIHtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtcbiAgICByZXR1cm4gbGVuZ3RoID4gMCA/IHRoaXMuY29sbGVjdGVkTm9kZXNbbGVuZ3RoIC0gMV0gOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcmVuZGVyZWQgY2hpbGQgY291bnQgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRSZW5kZXJlZENoaWxkQ291bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdE5vZGUsXG4gICAgICBzaXplU2V0XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IGNoaWxkRWxlbWVudENvdW50ID0gMDtcbiAgICBpZiAodGhpcy5pc1NoYXJlZFZpZXdTZXQoKSkge1xuICAgICAgbGV0IGVsZW1lbnQgPSByb290Tm9kZS5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgIHdoaWxlIChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuY2hpbGROb2RlVHlwZSkge1xuICAgICAgICAgIGNoaWxkRWxlbWVudENvdW50ICs9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZVNldC5pc1BsYWNlT24oX2NvbnN0YW50cy5XT1JLSU5HX1NQQUNFX1RPUCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkRWxlbWVudENvdW50ID0gcm9vdE5vZGUuY2hpbGRFbGVtZW50Q291bnQ7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZEVsZW1lbnRDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cHMgYW5kIHByZXBhcmVzIGFsbCBuZWNlc3NhcnkgcHJvcGVydGllcyBhbmQgc3RhcnQgdGhlIHJlbmRlcmluZyBwcm9jZXNzLlxuICAgKiBUaGlzIG1ldGhvZCBoYXMgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSAoYXQgdGhlIHN0YXJ0KSBmb3IgdGhlIHJlbmRlciBjeWNsZS5cbiAgICovXG4gIHN0YXJ0KCkge1xuICAgIHRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnZpc3VhbEluZGV4ID0gMDtcbiAgICBjb25zdCB7XG4gICAgICByb290Tm9kZSxcbiAgICAgIHNpemVTZXRcbiAgICB9ID0gdGhpcztcbiAgICBjb25zdCBpc1NoYXJlZCA9IHRoaXMuaXNTaGFyZWRWaWV3U2V0KCk7XG4gICAgY29uc3Qge1xuICAgICAgbmV4dFNpemVcbiAgICB9ID0gc2l6ZVNldC5nZXRWaWV3U2l6ZSgpO1xuICAgIGxldCBjaGlsZEVsZW1lbnRDb3VudCA9IHRoaXMuZ2V0UmVuZGVyZWRDaGlsZENvdW50KCk7XG4gICAgd2hpbGUgKGNoaWxkRWxlbWVudENvdW50IDwgbmV4dFNpemUpIHtcbiAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLm5vZGVzUG9vbCgpO1xuICAgICAgaWYgKCFpc1NoYXJlZCB8fCBpc1NoYXJlZCAmJiBzaXplU2V0LmlzUGxhY2VPbihfY29uc3RhbnRzLldPUktJTkdfU1BBQ0VfQk9UVE9NKSkge1xuICAgICAgICByb290Tm9kZS5hcHBlbmRDaGlsZChuZXdOb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3ROb2RlLmluc2VydEJlZm9yZShuZXdOb2RlLCByb290Tm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIGNoaWxkRWxlbWVudENvdW50ICs9IDE7XG4gICAgfVxuICAgIGNvbnN0IGlzU2hhcmVkUGxhY2VkT25Ub3AgPSBpc1NoYXJlZCAmJiBzaXplU2V0LmlzUGxhY2VPbihfY29uc3RhbnRzLldPUktJTkdfU1BBQ0VfVE9QKTtcbiAgICB3aGlsZSAoY2hpbGRFbGVtZW50Q291bnQgPiBuZXh0U2l6ZSkge1xuICAgICAgcm9vdE5vZGUucmVtb3ZlQ2hpbGQoaXNTaGFyZWRQbGFjZWRPblRvcCA/IHJvb3ROb2RlLmZpcnN0Q2hpbGQgOiByb290Tm9kZS5sYXN0Q2hpbGQpO1xuICAgICAgY2hpbGRFbGVtZW50Q291bnQgLT0gMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgRE9NIGVsZW1lbnQgYmFzZWQgb24gdmlzdWFsIGluZGV4ICh3aGljaCBpcyBjYWxjdWxhdGVkIGludGVybmFsbHkpLlxuICAgKiBUaGlzIG1ldGhvZCBoYXMgdG8gYmUgY2FsbGVkIGFzIG1hbnkgdGltZXMgYXMgdGhlIHNpemUgY291bnQgaXMgbWV0ICh0byBjb3ZlciBhbGwgcHJldmlvdXNseSByZW5kZXJlZCBET00gZWxlbWVudHMpLlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3ROb2RlLFxuICAgICAgc2l6ZVNldFxuICAgIH0gPSB0aGlzO1xuICAgIGxldCB2aXN1YWxJbmRleCA9IHRoaXMudmlzdWFsSW5kZXg7XG4gICAgaWYgKHRoaXMuaXNTaGFyZWRWaWV3U2V0KCkgJiYgc2l6ZVNldC5pc1BsYWNlT24oX2NvbnN0YW50cy5XT1JLSU5HX1NQQUNFX0JPVFRPTSkpIHtcbiAgICAgIHZpc3VhbEluZGV4ICs9IHNpemVTZXQuc2hhcmVkU2l6ZS5uZXh0U2l6ZTtcbiAgICB9XG4gICAgbGV0IG5vZGUgPSByb290Tm9kZS5jaGlsZE5vZGVzW3Zpc3VhbEluZGV4XTtcbiAgICBpZiAobm9kZS50YWdOYW1lICE9PSB0aGlzLmNoaWxkTm9kZVR5cGUpIHtcbiAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLm5vZGVzUG9vbCgpO1xuICAgICAgcm9vdE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsIG5vZGUpO1xuICAgICAgbm9kZSA9IG5ld05vZGU7XG4gICAgfVxuICAgIHRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChub2RlKTtcbiAgICB0aGlzLnZpc3VhbEluZGV4ICs9IDE7XG4gIH1cblxuICAvKipcbiAgICogRW5kcyB0aGUgcmVuZGVyIHByb2Nlc3MuXG4gICAqIFRoaXMgbWV0aG9kIGhhcyB0byBiZSBjYWxsZWQgb25seSBvbmNlIChhdCB0aGUgZW5kKSBmb3IgdGhlIHJlbmRlciBjeWNsZS5cbiAgICovXG4gIGVuZCgpIHt9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBPcmRlclZpZXc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEhvbGRlciBmb3IgY3VycmVudCBhbmQgbmV4dCBzaXplIChjb3VudCBvZiByZW5kZXJlZCBhbmQgdG8gcmVuZGVyIERPTSBlbGVtZW50cykgYW5kIG9mZnNldC5cbiAqXG4gKiBAY2xhc3Mge1ZpZXdTaXplfVxuICovXG5jbGFzcyBWaWV3U2l6ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIEN1cnJlbnQgc2l6ZSBvZiB0aGUgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjdXJyZW50U2l6ZVwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBOZXh0IHNpemUgb2YgdGhlIHJlbmRlcmVkIERPTSBlbGVtZW50cyB3aGljaCBzaG91bGQgYmUgZnVsZmlsbGVkLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuZXh0U2l6ZVwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBDdXJyZW50IG9mZnNldC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY3VycmVudE9mZnNldFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBOZXh0IG9mZnNldC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibmV4dE9mZnNldFwiLCAwKTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBuZXcgc2l6ZSBvZiB0aGUgcmVuZGVyZWQgRE9NIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBUaGUgc2l6ZS5cbiAgICovXG4gIHNldFNpemUoc2l6ZSkge1xuICAgIHRoaXMuY3VycmVudFNpemUgPSB0aGlzLm5leHRTaXplO1xuICAgIHRoaXMubmV4dFNpemUgPSBzaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbmV3IG9mZnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgb2Zmc2V0LlxuICAgKi9cbiAgc2V0T2Zmc2V0KG9mZnNldCkge1xuICAgIHRoaXMuY3VycmVudE9mZnNldCA9IHRoaXMubmV4dE9mZnNldDtcbiAgICB0aGlzLm5leHRPZmZzZXQgPSBvZmZzZXQ7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZpZXdTaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfdmlld1NpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZpZXdTaXplXCIpKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBUaGUgY2xhc3MgaXMgYSBzb3VyY2Ugb2YgdGhlIHRydXRoIG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFuZFxuICogbmV4dCBzaXplIG9mIHRoZSByZW5kZXJlZCBET00gZWxlbWVudHMgYW5kIGN1cnJlbnQgYW5kIG5leHQgb2Zmc2V0IG9mXG4gKiB0aGUgdmlldy4gVGhhdCBpbmZvcm1hdGlvbiBhbGxvd3MgdXMgdG8gY2FsY3VsYXRlIGRpZmYgYmV0d2VlbiBjdXJyZW50XG4gKiBET00gb3JkZXIgYW5kIHRoaXMgd2hpY2ggc2hvdWxkIGJlIHJlbmRlcmVkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTSBBUEkgYXQgYWxsLlxuICpcbiAqIE1vc3RseSB0aGUgVmlld1NpemVTZXQgaXMgY3JlYXRlZCBmb3IgZWFjaCBpbmRpdmlkdWFsIHJlbmRlcmVyLiBCdXQgaW5cbiAqIHRoZSB0YWJsZSwgdGhlcmUgaXMgb25lIGNhc2Ugd2hlcmUgdGhpcyBzaXplIGluZm9ybWF0aW9uIHNob3VsZCBiZSBzaGFyZWRcbiAqIGJldHdlZW4gdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgKGRpZmZlcmVudCB0YWJsZSByZW5kZXJlcnMpLiBUaGlzIGlzIGEgVFJcbiAqIGVsZW1lbnQgd2hpY2ggY2FuIGNvbnRhaW4gVEggZWxlbWVudHMgLSBtYW5hZ2VkIGJ5IG93biByZW5kZXJlciBhbmRcbiAqIFREIGVsZW1lbnRzIC0gbWFuYWdlZCBieSBhbm90aGVyIHJlbmRlcmVyLiBUbyBnZW5lcmF0ZSBjb3JyZWN0IERPTSBvcmRlclxuICogZm9yIHRoZW0gaXQgaXMgcmVxdWlyZWQgdG8gY29ubmVjdCB0aGVzZSB0d28gaW5zdGFuY2VzIGJ5IHJlZmVyZW5jZVxuICogdGhyb3VnaCBgc2hhcmVkU2l6ZWAuXG4gKlxuICogQGNsYXNzIHtWaWV3U2l6ZVNldH1cbiAqL1xuY2xhc3MgVmlld1NpemVTZXQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBIb2xkZXIgZm9yIGN1cnJlbnQgYW5kIG5leHQgdmlldyBzaXplIGFuZCBvZmZzZXQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Vmlld1NpemV9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2l6ZVwiLCBuZXcgX3ZpZXdTaXplLmRlZmF1bHQoKSk7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGlzIGluc3RhbmNlIHNoYXJlcyBpdHMgc2l6ZSB3aXRoIGFub3RoZXIgaW5zdGFuY2UuIElmIGl0J3MgaW4gdGhlIHNoYXJlZFxuICAgICAqIG1vZGUgaXQgZGVmaW5lcyB3aGF0IHNwYWNlIGl0IG9jY3VwaWVzICgndG9wJyBvciAnYm90dG9tJykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIndvcmtpbmdTcGFjZVwiLCBfY29uc3RhbnRzLldPUktJTkdfU1BBQ0VfQUxMKTtcbiAgICAvKipcbiAgICAgKiBTaGFyZWQgU2l6ZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtWaWV3U2l6ZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzaGFyZWRTaXplXCIsIG51bGwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzaXplIGZvciByZW5kZXJlZCBlbGVtZW50cy4gSXQgY2FuIGJlIGEgc2l6ZSBmb3Igcm93cywgY2VsbHMgb3Igc2l6ZSBmb3Igcm93XG4gICAqIGhlYWRlcnMgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBUaGUgc2l6ZS5cbiAgICovXG4gIHNldFNpemUoc2l6ZSkge1xuICAgIHRoaXMuc2l6ZS5zZXRTaXplKHNpemUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG9mZnNldCBmb3IgcmVuZGVyZWQgZWxlbWVudHMuIFRoZSBvZmZzZXQgZGVzY3JpYmVzIHRoZSBzaGlmdCBiZXR3ZWVuIDAgYW5kXG4gICAqIHRoZSBmaXJzdCByZW5kZXJlZCBlbGVtZW50IGFjY29yZGluZyB0byB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IFRoZSBvZmZzZXQuXG4gICAqL1xuICBzZXRPZmZzZXQob2Zmc2V0KSB7XG4gICAgdGhpcy5zaXplLnNldE9mZnNldChvZmZzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgVmlld1NpemUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtWaWV3U2l6ZX1cbiAgICovXG4gIGdldFZpZXdTaXplKCkge1xuICAgIHJldHVybiB0aGlzLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoaXMgVmlld1NpemVTZXQgaXMgc2hhcmluZyB0aGUgc2l6ZSB3aXRoIGFub3RoZXIgaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTaGFyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVkU2l6ZSBpbnN0YW5jZW9mIF92aWV3U2l6ZS5kZWZhdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGF0IHdvcmtpbmcgc3BhY2UgZGVzY3JpYmVzIHRoaXMgc2l6ZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdvcmtpbmdTcGFjZSBUaGUgbnVtYmVyIHdoaWNoIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgd29ya2luZyBzcGFjZSAoc2VlIGNvbnN0YW50cy5qcykuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNQbGFjZU9uKHdvcmtpbmdTcGFjZSkge1xuICAgIHJldHVybiB0aGlzLndvcmtpbmdTcGFjZSA9PT0gd29ya2luZ1NwYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZHMgdGhlIFZpZXdTaXplU2V0IGluc3RhbmNlIHRvIHRoaXMgaW5zdGFuY2UgdGhhdCB0dXJucyBpdCBpbnRvIGEgc2hhcmVkIG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Vmlld1NpemVTZXR9IHZpZXdTaXplIFRoZSBpbnN0YW5jZSBvZiB0aGUgVmlld1NpemVTZXQgY2xhc3MuXG4gICAqL1xuICBhcHBlbmQodmlld1NpemUpIHtcbiAgICB0aGlzLndvcmtpbmdTcGFjZSA9IF9jb25zdGFudHMuV09SS0lOR19TUEFDRV9UT1A7XG4gICAgdmlld1NpemUud29ya2luZ1NwYWNlID0gX2NvbnN0YW50cy5XT1JLSU5HX1NQQUNFX0JPVFRPTTtcbiAgICB0aGlzLnNoYXJlZFNpemUgPSB2aWV3U2l6ZS5nZXRWaWV3U2l6ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBlbmRzIHRoZSBWaWV3U2l6ZSBpbnN0YW5jZSB0byB0aGlzIGluc3RhbmNlIHRoYXQgdHVybnMgaXQgaW50byBhIHNoYXJlZCBtb2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZpZXdTaXplU2V0fSB2aWV3U2l6ZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIFZpZXdTaXplU2V0IGNsYXNzLlxuICAgKi9cbiAgcHJlcGVuZCh2aWV3U2l6ZSkge1xuICAgIHRoaXMud29ya2luZ1NwYWNlID0gX2NvbnN0YW50cy5XT1JLSU5HX1NQQUNFX0JPVFRPTTtcbiAgICB2aWV3U2l6ZS53b3JraW5nU3BhY2UgPSBfY29uc3RhbnRzLldPUktJTkdfU1BBQ0VfVE9QO1xuICAgIHRoaXMuc2hhcmVkU2l6ZSA9IHZpZXdTaXplLmdldFZpZXdTaXplKCk7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFZpZXdTaXplU2V0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBSb3cgdXRpbHMgY2xhc3MgY29udGFpbnMgYWxsIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBhYm91dCBzaXplcyBvZiB0aGUgcm93cy5cbiAqXG4gKiBAY2xhc3Mge1Jvd1V0aWxzfVxuICovXG5jbGFzcyBSb3dVdGlscyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1RhYmxlRGFvfSBkYXRhQWNjZXNzT2JqZWN0IFRoZSB0YWJsZSBEYXRhIEFjY2VzcyBPYmplY3QuXG4gICAqIEBwYXJhbSB7U2V0dGluZ3N9IHd0U2V0dGluZ3MgVGhlIHdhbGtvbnRhYmxlIHNldHRpbmdzLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YUFjY2Vzc09iamVjdCwgd3RTZXR0aW5ncykge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUYWJsZURhb31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhQWNjZXNzT2JqZWN0XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NldHRpbmdzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInd0U2V0dGluZ3NcIiwgdm9pZCAwKTtcbiAgICB0aGlzLmRhdGFBY2Nlc3NPYmplY3QgPSBkYXRhQWNjZXNzT2JqZWN0O1xuICAgIHRoaXMud3RTZXR0aW5ncyA9IHd0U2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyByb3cgaGVpZ2h0IGJhc2VkIG9uIHBhc3NlZCBzb3VyY2UgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzb3VyY2VJbmRleCBSb3cgc291cmNlIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SGVpZ2h0KHNvdXJjZUluZGV4KSB7XG4gICAgbGV0IGhlaWdodCA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWlnaHQnLCBzb3VyY2VJbmRleCk7XG4gICAgY29uc3Qgb3ZlcnNpemVkSGVpZ2h0ID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tzb3VyY2VJbmRleF07XG4gICAgaWYgKG92ZXJzaXplZEhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWlnaHQgPSBoZWlnaHQgPT09IHVuZGVmaW5lZCA/IG92ZXJzaXplZEhlaWdodCA6IE1hdGgubWF4KGhlaWdodCwgb3ZlcnNpemVkSGVpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUm93VXRpbHM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9jYWxjdWxhdG9yID0gcmVxdWlyZShcIi4vY2FsY3VsYXRvclwiKTtcbi8qKlxuICogQGNsYXNzIFZpZXdwb3J0XG4gKi9cbmNsYXNzIFZpZXdwb3J0IHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Vmlld3BvcnREYW99IGRhdGFBY2Nlc3NPYmplY3QgVGhlIFdhbGtvbnRhYmxlIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge0RvbUJpbmRpbmdzfSBkb21CaW5kaW5ncyBCaW5kaW5ncyBpbnRvIERPTS5cbiAgICogQHBhcmFtIHtTZXR0aW5nc30gd3RTZXR0aW5ncyBUaGUgV2Fsa29udGFibGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7RXZlbnRNYW5hZ2VyfSBldmVudE1hbmFnZXIgVGhlIGluc3RhbmNlIGV2ZW50IG1hbmFnZXIuXG4gICAqIEBwYXJhbSB7VGFibGV9IHd0VGFibGUgVGhlIHRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YUFjY2Vzc09iamVjdCwgZG9tQmluZGluZ3MsIHd0U2V0dGluZ3MsIGV2ZW50TWFuYWdlciwgd3RUYWJsZSkge1xuICAgIHRoaXMuZGF0YUFjY2Vzc09iamVjdCA9IGRhdGFBY2Nlc3NPYmplY3Q7XG4gICAgLy8gbGVnYWN5IHN1cHBvcnRcbiAgICB0aGlzLndvdCA9IGRhdGFBY2Nlc3NPYmplY3Qud290O1xuICAgIHRoaXMuaW5zdGFuY2UgPSB0aGlzLndvdDtcbiAgICB0aGlzLmRvbUJpbmRpbmdzID0gZG9tQmluZGluZ3M7XG4gICAgdGhpcy53dFNldHRpbmdzID0gd3RTZXR0aW5ncztcbiAgICB0aGlzLnd0VGFibGUgPSB3dFRhYmxlO1xuICAgIHRoaXMub3ZlcnNpemVkUm93cyA9IFtdO1xuICAgIHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycyA9IFtdO1xuICAgIHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCA9IHt9O1xuICAgIHRoaXMuY2xpZW50SGVpZ2h0ID0gMDtcbiAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gTmFOO1xuICAgIHRoaXMucm93SGVhZGVyV2lkdGggPSBOYU47XG4gICAgdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IgPSBudWxsO1xuICAgIHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yID0gbnVsbDtcbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IGV2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMuY2xpZW50SGVpZ2h0ID0gdGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0V29ya3NwYWNlSGVpZ2h0KCkge1xuICAgIGNvbnN0IGN1cnJlbnREb2N1bWVudCA9IHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O1xuICAgIGNvbnN0IHRyaW1taW5nQ29udGFpbmVyID0gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtcbiAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICBpZiAodHJpbW1pbmdDb250YWluZXIgPT09IHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykge1xuICAgICAgaGVpZ2h0ID0gY3VycmVudERvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVsZW1IZWlnaHQgPSAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRyaW1taW5nQ29udGFpbmVyKTtcblxuICAgICAgLy8gcmV0dXJucyBoZWlnaHQgd2l0aG91dCBESVYgc2Nyb2xsYmFyXG4gICAgICBoZWlnaHQgPSBlbGVtSGVpZ2h0ID4gMCAmJiB0cmltbWluZ0NvbnRhaW5lci5jbGllbnRIZWlnaHQgPiAwID8gdHJpbW1pbmdDb250YWluZXIuY2xpZW50SGVpZ2h0IDogSW5maW5pdHk7XG4gICAgfVxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cbiAgZ2V0V29ya3NwYWNlV2lkdGgoKSB7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5nc1xuICAgIH0gPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3REb2N1bWVudCxcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5kb21CaW5kaW5ncztcbiAgICBjb25zdCB0cmltbWluZ0NvbnRhaW5lciA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtcbiAgICBjb25zdCBkb2NPZmZzZXRXaWR0aCA9IHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgdG90YWxDb2x1bW5zID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKTtcbiAgICBjb25zdCBwcmV2ZW50T3ZlcmZsb3cgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3ByZXZlbnRPdmVyZmxvdycpO1xuICAgIGNvbnN0IGlzUnRsID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdydGxNb2RlJyk7XG4gICAgY29uc3QgdGFibGVSZWN0ID0gdGhpcy53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGlubGluZVN0YXJ0ID0gaXNSdGwgPyB0YWJsZVJlY3QucmlnaHQgLSBkb2NPZmZzZXRXaWR0aCA6IHRhYmxlUmVjdC5sZWZ0O1xuICAgIGNvbnN0IHRhYmxlT2Zmc2V0ID0gZG9jT2Zmc2V0V2lkdGggLSBpbmxpbmVTdGFydDtcbiAgICBsZXQgd2lkdGg7XG4gICAgbGV0IG92ZXJmbG93O1xuICAgIGlmIChwcmV2ZW50T3ZlcmZsb3cpIHtcbiAgICAgIHJldHVybiAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAod3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmcmVlemVPdmVybGF5cycpKSB7XG4gICAgICB3aWR0aCA9IE1hdGgubWluKHRhYmxlT2Zmc2V0LCBkb2NPZmZzZXRXaWR0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gTWF0aC5taW4odGhpcy5nZXRDb250YWluZXJGaWxsV2lkdGgoKSwgdGFibGVPZmZzZXQsIGRvY09mZnNldFdpZHRoKTtcbiAgICB9XG4gICAgaWYgKHRyaW1taW5nQ29udGFpbmVyID09PSByb290V2luZG93ICYmIHRvdGFsQ29sdW1ucyA+IDAgJiYgdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCwgdG90YWxDb2x1bW5zIC0gMSkgPiB3aWR0aCkge1xuICAgICAgLy8gaW4gY2FzZSBzdW0gb2YgY29sdW1uIHdpZHRocyBpcyBoaWdoZXIgdGhhbiBhdmFpbGFibGUgc3R5bGVzaGVldCB3aWR0aCwgbGV0J3MgYXNzdW1lIHVzaW5nIHRoZSB3aG9sZSB3aW5kb3dcbiAgICAgIC8vIG90aGVyd2lzZSBjb250aW51ZSBiZWxvdywgd2hpY2ggd2lsbCBhbGxvdyBzdHJldGNoaW5nXG4gICAgICAvLyB0aGlzIGlzIHVzZWQgaW4gYHNjcm9sbF93aW5kb3cuaHRtbGBcbiAgICAgIC8vIFRPRE8gdGVzdCBtZVxuICAgICAgcmV0dXJuIHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgfVxuICAgIGlmICh0cmltbWluZ0NvbnRhaW5lciAhPT0gcm9vdFdpbmRvdykge1xuICAgICAgb3ZlcmZsb3cgPSAoMCwgX2VsZW1lbnQuZ2V0U3R5bGUpKHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lciwgJ292ZXJmbG93Jywgcm9vdFdpbmRvdyk7XG4gICAgICBpZiAob3ZlcmZsb3cgPT09ICdzY3JvbGwnIHx8IG92ZXJmbG93ID09PSAnaGlkZGVuJyB8fCBvdmVyZmxvdyA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdXNlZCBpbiBgc2Nyb2xsLmh0bWxgXG4gICAgICAgIC8vIFRPRE8gdGVzdCBtZVxuICAgICAgICByZXR1cm4gTWF0aC5tYXgod2lkdGgsIHRyaW1taW5nQ29udGFpbmVyLmNsaWVudFdpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3RyZXRjaFNldHRpbmcgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3N0cmV0Y2hIJyk7XG4gICAgaWYgKHN0cmV0Y2hTZXR0aW5nID09PSAnbm9uZScgfHwgIXN0cmV0Y2hTZXR0aW5nKSB7XG4gICAgICAvLyBpZiBubyBzdHJldGNoaW5nIGlzIHVzZWQsIHJldHVybiB0aGUgbWF4aW11bSB1c2VkIHdvcmtzcGFjZSB3aWR0aFxuICAgICAgcmV0dXJuIE1hdGgubWF4KHdpZHRoLCAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy53dFRhYmxlLlRBQkxFKSk7XG4gICAgfVxuXG4gICAgLy8gaWYgc3RyZXRjaGluZyBpcyB1c2VkLCByZXR1cm4gdGhlIGFjdHVhbCBjb250YWluZXIgd2lkdGgsIHNvIHRoZSBjb2x1bW5zIGNhbiBmaXQgaW5zaWRlIGl0XG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB2aWV3cG9ydCBoYXMgdmVydGljYWwgc2Nyb2xsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1ZlcnRpY2FsU2Nyb2xsKCkge1xuICAgIHJldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0SGVpZ2h0ID4gdGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdmlld3BvcnQgaGFzIGhvcml6b250YWwgc2Nyb2xsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0hvcml6b250YWxTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMud3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aCA+IHRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbSBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleCBmcm9tIHRoZSB3aWR0aCBzdW0gaXMgc3RhcnQgY2FsY3VsYXRlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW4gdG8gdHJhdmVyc2UuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBzdW1Db2x1bW5XaWR0aHMoZnJvbSwgbGVuZ3RoKSB7XG4gICAgbGV0IHN1bSA9IDA7XG4gICAgbGV0IGNvbHVtbiA9IGZyb207XG4gICAgd2hpbGUgKGNvbHVtbiA8IGxlbmd0aCkge1xuICAgICAgc3VtICs9IHRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChjb2x1bW4pO1xuICAgICAgY29sdW1uICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENvbnRhaW5lckZpbGxXaWR0aCgpIHtcbiAgICBpZiAodGhpcy5jb250YWluZXJXaWR0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyV2lkdGg7XG4gICAgfVxuICAgIGNvbnN0IG1haW5Db250YWluZXIgPSB0aGlzLnd0VGFibGUuaG9sZGVyO1xuICAgIGNvbnN0IGR1bW15RWxlbWVudCA9IHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGR1bW15RWxlbWVudC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICBkdW1teUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJzFweCc7XG4gICAgbWFpbkNvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teUVsZW1lbnQpO1xuICAgIGNvbnN0IGZpbGxXaWR0aCA9IGR1bW15RWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gZmlsbFdpZHRoO1xuICAgIG1haW5Db250YWluZXIucmVtb3ZlQ2hpbGQoZHVtbXlFbGVtZW50KTtcbiAgICByZXR1cm4gZmlsbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRXb3Jrc3BhY2VPZmZzZXQoKSB7XG4gICAgcmV0dXJuICgwLCBfZWxlbWVudC5vZmZzZXQpKHRoaXMud3RUYWJsZS5UQUJMRSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENvbHVtbkhlYWRlckhlaWdodCgpIHtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKTtcbiAgICBpZiAoIWNvbHVtbkhlYWRlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNvbHVtbkhlYWRlckhlaWdodCA9IDA7XG4gICAgfSBlbHNlIGlmIChpc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkpIHtcbiAgICAgIHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0ID0gKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0aGlzLnd0VGFibGUuVEhFQUQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgIGxldCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO1xuICAgIGlmIChjb250YWluZXJIZWlnaHQgPT09IEluZmluaXR5KSB7XG4gICAgICByZXR1cm4gY29udGFpbmVySGVpZ2h0O1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5IZWFkZXJIZWlnaHQgPSB0aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpO1xuICAgIGlmIChjb2x1bW5IZWFkZXJIZWlnaHQgPiAwKSB7XG4gICAgICBjb250YWluZXJIZWlnaHQgLT0gY29sdW1uSGVhZGVySGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVySGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRSb3dIZWFkZXJXaWR0aCgpIHtcbiAgICBjb25zdCByb3dIZWFkZXJzV2lkdGhTZXR0aW5nID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ3Jvd0hlYWRlcldpZHRoJyk7XG4gICAgY29uc3Qgcm93SGVhZGVycyA9IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyb3dIZWFkZXJzJyk7XG4gICAgaWYgKHJvd0hlYWRlcnNXaWR0aFNldHRpbmcpIHtcbiAgICAgIHRoaXMucm93SGVhZGVyV2lkdGggPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJvd0hlYWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdGhpcy5yb3dIZWFkZXJXaWR0aCArPSByb3dIZWFkZXJzV2lkdGhTZXR0aW5nW2ldIHx8IHJvd0hlYWRlcnNXaWR0aFNldHRpbmc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSkge1xuICAgICAgaWYgKHJvd0hlYWRlcnMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBUSCA9IHRoaXMud3RUYWJsZS5UQUJMRS5xdWVyeVNlbGVjdG9yKCdUSCcpO1xuICAgICAgICB0aGlzLnJvd0hlYWRlcldpZHRoID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHJvd0hlYWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAoVEgpIHtcbiAgICAgICAgICAgIHRoaXMucm93SGVhZGVyV2lkdGggKz0gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKFRIKTtcbiAgICAgICAgICAgIFRIID0gVEgubmV4dFNpYmxpbmc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHllcyB0aGlzIGlzIGEgY2hlYXQgYnV0IGl0IHdvcmtlZCBsaWtlIHRoYXQgYmVmb3JlLCBqdXN0IHRha2luZyBhc3N1bXB0aW9uIGZyb20gQ1NTIGluc3RlYWQgb2YgbWVhc3VyaW5nLlxuICAgICAgICAgICAgLy8gVE9ETzogcHJvcGVyIGZpeFxuICAgICAgICAgICAgdGhpcy5yb3dIZWFkZXJXaWR0aCArPSA1MDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm93SGVhZGVyV2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJvd0hlYWRlcldpZHRoID0gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoJ29uTW9kaWZ5Um93SGVhZGVyV2lkdGgnLCB0aGlzLnJvd0hlYWRlcldpZHRoKSB8fCB0aGlzLnJvd0hlYWRlcldpZHRoO1xuICAgIHJldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRWaWV3cG9ydFdpZHRoKCkge1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpO1xuICAgIGlmIChjb250YWluZXJXaWR0aCA9PT0gSW5maW5pdHkpIHtcbiAgICAgIHJldHVybiBjb250YWluZXJXaWR0aDtcbiAgICB9XG4gICAgY29uc3Qgcm93SGVhZGVyV2lkdGggPSB0aGlzLmdldFJvd0hlYWRlcldpZHRoKCk7XG4gICAgaWYgKHJvd0hlYWRlcldpZHRoID4gMCkge1xuICAgICAgcmV0dXJuIGNvbnRhaW5lcldpZHRoIC0gcm93SGVhZGVyV2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXJXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzOlxuICAgKiAtIHJvd3NSZW5kZXJDYWxjdWxhdG9yIChiZWZvcmUgZHJhdywgdG8gcXVhbGlmeSByb3dzIGZvciByZW5kZXJpbmcpXG4gICAqIC0gcm93c1Zpc2libGVDYWxjdWxhdG9yIChhZnRlciBkcmF3LCB0byBtZWFzdXJlIHdoaWNoIHJvd3MgYXJlIGFjdHVhbGx5IHZpc2libGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY2FsY3VsYXRpb25UeXBlIFRoZSByZW5kZXIgdHlwZSBJRCwgd2hpY2ggZGV0ZXJtaW5lcyBmb3Igd2hhdCB0eXBlIG9mXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRpb24gY2FsY3VsYXRvciBpcyBjcmVhdGVkLlxuICAgKiBAcmV0dXJucyB7Vmlld3BvcnRSb3dzQ2FsY3VsYXRvcn1cbiAgICovXG4gIGNyZWF0ZVJvd3NDYWxjdWxhdG9yKCkge1xuICAgIGxldCBjYWxjdWxhdGlvblR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IF9jYWxjdWxhdG9yLlJFTkRFUl9UWVBFO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0U2V0dGluZ3MsXG4gICAgICB3dFRhYmxlXG4gICAgfSA9IHRoaXM7XG4gICAgaWYgKHd0U2V0dGluZ3MuZ2V0U2V0dGluZygncmVuZGVyQWxsUm93cycpICYmIGNhbGN1bGF0aW9uVHlwZSA9PT0gX2NhbGN1bGF0b3IuUkVOREVSX1RZUEUpIHtcbiAgICAgIHJldHVybiBuZXcgX2NhbGN1bGF0b3IuUmVuZGVyQWxsUm93c0NhbGN1bGF0b3Ioe1xuICAgICAgICB0b3RhbFJvd3M6IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxSb3dzJylcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgaGVpZ2h0ID0gdGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO1xuICAgIGxldCBzY3JvbGxiYXJIZWlnaHQ7XG4gICAgbGV0IGZpeGVkUm93c0hlaWdodDtcbiAgICB0aGlzLnJvd0hlYWRlcldpZHRoID0gTmFOO1xuICAgIGxldCBwb3MgPSB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wU2Nyb2xsUG9zaXRpb24gLSB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O1xuICAgIGNvbnN0IGZpeGVkUm93c1RvcCA9IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygnZml4ZWRSb3dzVG9wJyk7XG4gICAgY29uc3QgZml4ZWRSb3dzQm90dG9tID0gd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdmaXhlZFJvd3NCb3R0b20nKTtcbiAgICBjb25zdCB0b3RhbFJvd3MgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpO1xuICAgIGlmIChmaXhlZFJvd3NUb3AgJiYgcG9zID49IDApIHtcbiAgICAgIGZpeGVkUm93c0hlaWdodCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLCBmaXhlZFJvd3NUb3ApO1xuICAgICAgcG9zICs9IGZpeGVkUm93c0hlaWdodDtcbiAgICAgIGhlaWdodCAtPSBmaXhlZFJvd3NIZWlnaHQ7XG4gICAgfVxuICAgIGlmIChmaXhlZFJvd3NCb3R0b20gJiYgdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuY2xvbmUpIHtcbiAgICAgIGZpeGVkUm93c0hlaWdodCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LnN1bUNlbGxTaXplcyh0b3RhbFJvd3MgLSBmaXhlZFJvd3NCb3R0b20sIHRvdGFsUm93cyk7XG4gICAgICBoZWlnaHQgLT0gZml4ZWRSb3dzSGVpZ2h0O1xuICAgIH1cbiAgICBpZiAod3RUYWJsZS5ob2xkZXIuY2xpZW50SGVpZ2h0ID09PSB3dFRhYmxlLmhvbGRlci5vZmZzZXRIZWlnaHQpIHtcbiAgICAgIHNjcm9sbGJhckhlaWdodCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjcm9sbGJhckhlaWdodCA9ICgwLCBfZWxlbWVudC5nZXRTY3JvbGxiYXJXaWR0aCkodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IF9jYWxjdWxhdG9yLlZpZXdwb3J0Um93c0NhbGN1bGF0b3Ioe1xuICAgICAgdmlld3BvcnRIZWlnaHQ6IGhlaWdodCxcbiAgICAgIHNjcm9sbE9mZnNldDogcG9zLFxuICAgICAgdG90YWxSb3dzOiB3dFNldHRpbmdzLmdldFNldHRpbmcoJ3RvdGFsUm93cycpLFxuICAgICAgcm93SGVpZ2h0Rm46IHNvdXJjZVJvdyA9PiB3dFRhYmxlLmdldFJvd0hlaWdodChzb3VyY2VSb3cpLFxuICAgICAgb3ZlcnJpZGVGbjogd3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgndmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUnKSxcbiAgICAgIGNhbGN1bGF0aW9uVHlwZSxcbiAgICAgIGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6IHNjcm9sbGJhckhlaWdodFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXM6XG4gICAqIC0gY29sdW1uc1JlbmRlckNhbGN1bGF0b3IgKGJlZm9yZSBkcmF3LCB0byBxdWFsaWZ5IGNvbHVtbnMgZm9yIHJlbmRlcmluZylcbiAgICogLSBjb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IgKGFmdGVyIGRyYXcsIHRvIG1lYXN1cmUgd2hpY2ggY29sdW1ucyBhcmUgYWN0dWFsbHkgdmlzaWJsZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjYWxjdWxhdGlvblR5cGUgVGhlIHJlbmRlciB0eXBlIElELCB3aGljaCBkZXRlcm1pbmVzIGZvciB3aGF0IHR5cGUgb2ZcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGlvbiBjYWxjdWxhdG9yIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm5zIHtWaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yfVxuICAgKi9cbiAgY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKSB7XG4gICAgbGV0IGNhbGN1bGF0aW9uVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX2NhbGN1bGF0b3IuUkVOREVSX1RZUEU7XG4gICAgY29uc3Qge1xuICAgICAgd3RTZXR0aW5ncyxcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gdGhpcztcbiAgICBpZiAod3RTZXR0aW5ncy5nZXRTZXR0aW5nKCdyZW5kZXJBbGxDb2x1bW5zJykgJiYgY2FsY3VsYXRpb25UeXBlID09PSBfY2FsY3VsYXRvci5SRU5ERVJfVFlQRSkge1xuICAgICAgcmV0dXJuIG5ldyBfY2FsY3VsYXRvci5SZW5kZXJBbGxDb2x1bW5zQ2FsY3VsYXRvcih7XG4gICAgICAgIHRvdGFsQ29sdW1uczogd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGxldCB3aWR0aCA9IHRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpO1xuICAgIGxldCBwb3MgPSBNYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbikgLSB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXQ7XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQgPSBOYU47XG4gICAgY29uc3QgZml4ZWRDb2x1bW5zU3RhcnQgPSB3dFNldHRpbmdzLmdldFNldHRpbmcoJ2ZpeGVkQ29sdW1uc1N0YXJ0Jyk7XG4gICAgaWYgKGZpeGVkQ29sdW1uc1N0YXJ0ICYmIHBvcyA+PSAwKSB7XG4gICAgICBjb25zdCBmaXhlZENvbHVtbnNXaWR0aCA9IHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsIGZpeGVkQ29sdW1uc1N0YXJ0KTtcbiAgICAgIHBvcyArPSBmaXhlZENvbHVtbnNXaWR0aDtcbiAgICAgIHdpZHRoIC09IGZpeGVkQ29sdW1uc1dpZHRoO1xuICAgIH1cbiAgICBpZiAod3RUYWJsZS5ob2xkZXIuY2xpZW50V2lkdGggIT09IHd0VGFibGUuaG9sZGVyLm9mZnNldFdpZHRoKSB7XG4gICAgICB3aWR0aCAtPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBfY2FsY3VsYXRvci5WaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yKHtcbiAgICAgIHZpZXdwb3J0V2lkdGg6IHdpZHRoLFxuICAgICAgc2Nyb2xsT2Zmc2V0OiBwb3MsXG4gICAgICB0b3RhbENvbHVtbnM6IHd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxDb2x1bW5zJyksXG4gICAgICBjb2x1bW5XaWR0aEZuOiBzb3VyY2VDb2wgPT4gd3RUYWJsZS5nZXRDb2x1bW5XaWR0aChzb3VyY2VDb2wpLFxuICAgICAgb3ZlcnJpZGVGbjogd3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgndmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUnKSxcbiAgICAgIGNhbGN1bGF0aW9uVHlwZSxcbiAgICAgIGlubGluZVN0YXJ0T2Zmc2V0OiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHJvd3NSZW5kZXJDYWxjdWxhdG9yIGFuZCBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciAoYmVmb3JlIGRyYXcsIHRvIGRldGVybWluZSB3aGF0IHJvd3MgYW5kXG4gICAqIGNvbHMgc2hvdWxkIGJlIHJlbmRlcmVkKS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBmYXN0RHJhdyBJZiBgdHJ1ZWAsIHdpbGwgdHJ5IHRvIGF2b2lkIGZ1bGwgcmVkcmF3IGFuZCBvbmx5IHVwZGF0ZSB0aGUgYm9yZGVyIHBvc2l0aW9ucy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBgZmFsc2VgIG9yIGB1bmRlZmluZWRgLCB3aWxsIHBlcmZvcm0gYSBmdWxsIHJlZHJhdy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRoZSBmYXN0RHJhdyB2YWx1ZSwgcG9zc2libHkgbW9kaWZpZWQuXG4gICAqL1xuICBjcmVhdGVSZW5kZXJDYWxjdWxhdG9ycygpIHtcbiAgICBsZXQgZmFzdERyYXcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHd0U2V0dGluZ3NcbiAgICB9ID0gdGhpcztcbiAgICBpZiAoZmFzdERyYXcgJiYgIXd0U2V0dGluZ3MuZ2V0U2V0dGluZygncmVuZGVyQWxsUm93cycpKSB7XG4gICAgICBjb25zdCBwcm9wb3NlZFJvd3NWaXNpYmxlQ2FsY3VsYXRvciA9IHRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoX2NhbGN1bGF0b3IuRlVMTFlfVklTSUJMRV9UWVBFKTtcbiAgICAgIGZhc3REcmF3ID0gdGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKHByb3Bvc2VkUm93c1Zpc2libGVDYWxjdWxhdG9yKTtcbiAgICB9XG4gICAgaWYgKGZhc3REcmF3ICYmICF3dFNldHRpbmdzLmdldFNldHRpbmcoJ3JlbmRlckFsbENvbHVtbnMnKSkge1xuICAgICAgY29uc3QgcHJvcG9zZWRDb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLkZVTExZX1ZJU0lCTEVfVFlQRSk7XG4gICAgICBmYXN0RHJhdyA9IHRoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChwcm9wb3NlZENvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcik7XG4gICAgfVxuICAgIGlmICghZmFzdERyYXcpIHtcbiAgICAgIHRoaXMucm93c1JlbmRlckNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLlJFTkRFUl9UWVBFKTtcbiAgICAgIHRoaXMuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLlJFTkRFUl9UWVBFKTtcbiAgICB9XG5cbiAgICAvLyBkZWxldGUgdGVtcG9yYXJpbHkgdG8gbWFrZSBzdXJlIHRoYXQgcmVuZGVyZXJzIGFsd2F5cyB1c2Ugcm93c1JlbmRlckNhbGN1bGF0b3IsIG5vdCByb3dzVmlzaWJsZUNhbGN1bGF0b3JcbiAgICB0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvciA9IG51bGw7XG4gICAgdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IgPSBudWxsO1xuICAgIHJldHVybiBmYXN0RHJhdztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHJvd3NWaXNpYmxlQ2FsY3VsYXRvciBhbmQgY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yIChhZnRlciBkcmF3LCB0byBkZXRlcm1pbmUgd2hhdCBhcmVcbiAgICogdGhlIGFjdHVhbGx5IGZ1bGx5IHZpc2libGUgcm93cyBhbmQgY29sdW1ucykuXG4gICAqL1xuICBjcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKSB7XG4gICAgdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLkZVTExZX1ZJU0lCTEVfVFlQRSk7XG4gICAgdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLkZVTExZX1ZJU0lCTEVfVFlQRSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyByb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IgYW5kIGNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvciAoYWZ0ZXIgZHJhdywgdG8gZGV0ZXJtaW5lIHdoYXQgYXJlXG4gICAqIHRoZSBhY3R1YWxseSBwYXJ0aWFsbHkgdmlzaWJsZSByb3dzIGFuZCBjb2x1bW5zKS5cbiAgICovXG4gIGNyZWF0ZVBhcnRpYWxseVZpc2libGVDYWxjdWxhdG9ycygpIHtcbiAgICB0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvciA9IHRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoX2NhbGN1bGF0b3IuUEFSVElBTExZX1ZJU0lCTEVfVFlQRSk7XG4gICAgdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IgPSB0aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKF9jYWxjdWxhdG9yLlBBUlRJQUxMWV9WSVNJQkxFX1RZUEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gd2hldGhlciBwcm9wb3NlZFJvd3NWaXNpYmxlQ2FsY3VsYXRvciB2aWV3cG9ydFxuICAgKiBpcyBjb250YWluZWQgaW5zaWRlIHJvd3MgcmVuZGVyZWQgaW4gcHJldmlvdXMgZHJhdyAoY2FjaGVkIGluIHJvd3NSZW5kZXJDYWxjdWxhdG9yKS5cbiAgICpcbiAgICogQHBhcmFtIHtWaWV3cG9ydFJvd3NDYWxjdWxhdG9yfSBwcm9wb3NlZFJvd3NWaXNpYmxlQ2FsY3VsYXRvciBUaGUgaW5zdGFuY2Ugb2YgdGhlIHZpZXdwb3J0IGNhbGN1bGF0b3IgdG8gY29tcGFyZSB3aXRoLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYWxsIHByb3Bvc2VkIHZpc2libGUgcm93cyBhcmUgYWxyZWFkeSByZW5kZXJlZCAobWVhbmluZzogcmVkcmF3IGlzIG5vdCBuZWVkZWQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgUmV0dXJucyBgZmFsc2VgIGlmIGF0IGxlYXN0IG9uZSBwcm9wb3NlZCB2aXNpYmxlIHJvdyBpcyBub3QgYWxyZWFkeSByZW5kZXJlZCAobWVhbmluZzogcmVkcmF3IGlzIG5lZWRlZCkuXG4gICAqL1xuICBhcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKHByb3Bvc2VkUm93c1Zpc2libGVDYWxjdWxhdG9yKSB7XG4gICAgaWYgKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQge1xuICAgICAgc3RhcnRSb3csXG4gICAgICBlbmRSb3dcbiAgICB9ID0gcHJvcG9zZWRSb3dzVmlzaWJsZUNhbGN1bGF0b3I7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgbm8gZnVsbHkgdmlzaWJsZSByb3dzIGF0IGFsbC4uLlxuICAgIGlmIChzdGFydFJvdyA9PT0gbnVsbCAmJiBlbmRSb3cgPT09IG51bGwpIHtcbiAgICAgIGlmICghcHJvcG9zZWRSb3dzVmlzaWJsZUNhbGN1bGF0b3IuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8vIC4uLnVzZSBwYXJ0aWFsbHkgdmlzaWJsZSByb3dzIGNhbGN1bGF0b3IgdG8gZGV0ZXJtaW5lIHdoYXQgcmVuZGVyIHR5cGUgaXMgbmVlZGVkXG4gICAgICBzdGFydFJvdyA9IHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93O1xuICAgICAgZW5kUm93ID0gdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93O1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBzdGFydFJvdzogcmVuZGVyZWRTdGFydFJvdyxcbiAgICAgIGVuZFJvdzogcmVuZGVyZWRFbmRSb3dcbiAgICB9ID0gdGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcjtcbiAgICBpZiAoc3RhcnRSb3cgPCByZW5kZXJlZFN0YXJ0Um93IHx8IHN0YXJ0Um93ID09PSByZW5kZXJlZFN0YXJ0Um93ICYmIHN0YXJ0Um93ID4gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZW5kUm93ID4gcmVuZGVyZWRFbmRSb3cgfHwgZW5kUm93ID09PSByZW5kZXJlZEVuZFJvdyAmJiBlbmRSb3cgPCB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygndG90YWxSb3dzJykgLSAxKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gd2hldGhlciBwcm9wb3NlZENvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvciB2aWV3cG9ydFxuICAgKiBpcyBjb250YWluZWQgaW5zaWRlIGNvbHVtbiByZW5kZXJlZCBpbiBwcmV2aW91cyBkcmF3IChjYWNoZWQgaW4gY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZpZXdwb3J0Um93c0NhbGN1bGF0b3J9IHByb3Bvc2VkQ29sdW1uc1Zpc2libGVDYWxjdWxhdG9yIFRoZSBpbnN0YW5jZSBvZiB0aGUgdmlld3BvcnQgY2FsY3VsYXRvciB0byBjb21wYXJlIHdpdGguXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgcHJvcG9zZWQgdmlzaWJsZSBjb2x1bW5zIGFyZSBhbHJlYWR5IHJlbmRlcmVkIChtZWFuaW5nOiByZWRyYXcgaXMgbm90IG5lZWRlZCkuXG4gICAqICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGBmYWxzZWAgaWYgYXQgbGVhc3Qgb25lIHByb3Bvc2VkIHZpc2libGUgY29sdW1uIGlzIG5vdCBhbHJlYWR5IHJlbmRlcmVkIChtZWFuaW5nOiByZWRyYXcgaXMgbmVlZGVkKS5cbiAgICovXG4gIGFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQocHJvcG9zZWRDb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCB7XG4gICAgICBzdGFydENvbHVtbixcbiAgICAgIGVuZENvbHVtblxuICAgIH0gPSBwcm9wb3NlZENvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcjtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBmdWxseSB2aXNpYmxlIGNvbHVtbnMgYXQgYWxsLi4uXG4gICAgaWYgKHN0YXJ0Q29sdW1uID09PSBudWxsICYmIGVuZENvbHVtbiA9PT0gbnVsbCkge1xuICAgICAgaWYgKCFwcm9wb3NlZENvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gLi4udXNlIHBhcnRpYWxseSB2aXNpYmxlIGNvbHVtbnMgY2FsY3VsYXRvciB0byBkZXRlcm1pbmUgd2hhdCByZW5kZXIgdHlwZSBpcyBuZWVkZWRcbiAgICAgIHN0YXJ0Q29sdW1uID0gdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW47XG4gICAgICBlbmRDb2x1bW4gPSB0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHN0YXJ0Q29sdW1uOiByZW5kZXJlZFN0YXJ0Q29sdW1uLFxuICAgICAgZW5kQ29sdW1uOiByZW5kZXJlZEVuZENvbHVtblxuICAgIH0gPSB0aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO1xuICAgIGlmIChzdGFydENvbHVtbiA8IHJlbmRlcmVkU3RhcnRDb2x1bW4gfHwgc3RhcnRDb2x1bW4gPT09IHJlbmRlcmVkU3RhcnRDb2x1bW4gJiYgc3RhcnRDb2x1bW4gPiAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChlbmRDb2x1bW4gPiByZW5kZXJlZEVuZENvbHVtbiB8fCBlbmRDb2x1bW4gPT09IHJlbmRlcmVkRW5kQ29sdW1uICYmIGVuZENvbHVtbiA8IHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCd0b3RhbENvbHVtbnMnKSAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHZhbHVlcyBpbiBrZXlzIG9mIHRoZSBoYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkIG9iamVjdCBhZnRlciB1cGRhdGVTZXR0aW5ncy5cbiAgICovXG4gIHJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpIHtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsICh2YWx1ZSwga2V5LCBvYmplY3QpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBWaWV3cG9ydDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfY29yZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29yZVwiKSk7XG52YXIgX3Jvb3RJbnN0YW5jZSA9IHJlcXVpcmUoXCIuL3V0aWxzL3Jvb3RJbnN0YW5jZVwiKTtcbnZhciBfZGF0YU1hcCA9IHJlcXVpcmUoXCIuL2RhdGFNYXBcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vaTE4bi9yZWdpc3RyeVwiKTtcbnZhciBfcmVnaXN0cnkyID0gcmVxdWlyZShcIi4vY2VsbFR5cGVzL3JlZ2lzdHJ5XCIpO1xudmFyIF90ZXh0VHlwZSA9IHJlcXVpcmUoXCIuL2NlbGxUeXBlcy90ZXh0VHlwZVwiKTtcbnZhciBfYmFzZUVkaXRvciA9IHJlcXVpcmUoXCIuL2VkaXRvcnMvYmFzZUVkaXRvclwiKTtcbnZhciBfc3JjID0gcmVxdWlyZShcIi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpO1xuZXhwb3J0cy5DZWxsQ29vcmRzID0gX3NyYy5DZWxsQ29vcmRzO1xuZXhwb3J0cy5DZWxsUmFuZ2UgPSBfc3JjLkNlbGxSYW5nZTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vLyBGSVhNRTogQnVnIGluIGVzbGludC1wbHVnaW4taW1wb3J0OiBodHRwczovL2dpdGh1Yi5jb20vYmVubW9zaGVyL2VzbGludC1wbHVnaW4taW1wb3J0L2lzc3Vlcy8xODgzXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbmFtZWQgKi9cblxuLyogZXNsaW50LWVuYWJsZSBpbXBvcnQvbmFtZWQgKi9cblxuLy8gcmVnaXN0ZXIgZGVmYXVsdCBtYW5kYXRvcnkgY2VsbCB0eXBlIGZvciB0aGUgQmFzZSBwYWNrYWdlXG4oMCwgX3JlZ2lzdHJ5Mi5yZWdpc3RlckNlbGxUeXBlKShfdGV4dFR5cGUuVGV4dENlbGxUeXBlKTtcblxuLy8gZXhwb3J0IHRoZSBgQmFzZUVkaXRvcmAgY2xhc3MgdG8gdGhlIEhhbmRzb250YWJsZSBnbG9iYWwgbmFtZXNwYWNlXG5IYW5kc29udGFibGUuZWRpdG9ycyA9IHtcbiAgQmFzZUVkaXRvcjogX2Jhc2VFZGl0b3IuQmFzZUVkaXRvclxufTtcblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByb290RWxlbWVudCBUaGUgZWxlbWVudCB0byB3aGljaCB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGlzIGluamVjdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHVzZXJTZXR0aW5ncyBUaGUgdXNlciBkZWZpbmVkIG9wdGlvbnMuXG4gKiBAcmV0dXJucyB7Q29yZX1cbiAqL1xuZnVuY3Rpb24gSGFuZHNvbnRhYmxlKHJvb3RFbGVtZW50LCB1c2VyU2V0dGluZ3MpIHtcbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgX2NvcmUuZGVmYXVsdChyb290RWxlbWVudCwgdXNlclNldHRpbmdzIHx8IHt9LCBfcm9vdEluc3RhbmNlLnJvb3RJbnN0YW5jZVN5bWJvbCk7XG4gIGluc3RhbmNlLmluaXQoKTtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuSGFuZHNvbnRhYmxlLkNvcmUgPSBmdW5jdGlvbiAocm9vdEVsZW1lbnQpIHtcbiAgbGV0IHVzZXJTZXR0aW5ncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gIHJldHVybiBuZXcgX2NvcmUuZGVmYXVsdChyb290RWxlbWVudCwgdXNlclNldHRpbmdzLCBfcm9vdEluc3RhbmNlLnJvb3RJbnN0YW5jZVN5bWJvbCk7XG59O1xuSGFuZHNvbnRhYmxlLkRlZmF1bHRTZXR0aW5ncyA9ICgwLCBfZGF0YU1hcC5tZXRhU2NoZW1hRmFjdG9yeSkoKTtcbkhhbmRzb250YWJsZS5ob29rcyA9IF9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpO1xuSGFuZHNvbnRhYmxlLkNlbGxDb29yZHMgPSBfc3JjLkNlbGxDb29yZHM7XG5IYW5kc29udGFibGUuQ2VsbFJhbmdlID0gX3NyYy5DZWxsUmFuZ2U7XG5IYW5kc29udGFibGUucGFja2FnZU5hbWUgPSAnaGFuZHNvbnRhYmxlJztcbkhhbmRzb250YWJsZS5idWlsZERhdGUgPSBcIjExLzA2LzIwMjQgMDk6NTE6MzBcIjtcbkhhbmRzb250YWJsZS52ZXJzaW9uID0gXCIxNC40LjBcIjtcbkhhbmRzb250YWJsZS5sYW5ndWFnZXMgPSB7XG4gIGRpY3Rpb25hcnlLZXlzOiBfcmVnaXN0cnkuZGljdGlvbmFyeUtleXMsXG4gIGdldExhbmd1YWdlRGljdGlvbmFyeTogX3JlZ2lzdHJ5LmdldExhbmd1YWdlRGljdGlvbmFyeSxcbiAgZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOiBfcmVnaXN0cnkuZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzLFxuICByZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTogX3JlZ2lzdHJ5LnJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9uYXJ5LFxuICBnZXRUcmFuc2xhdGVkUGhyYXNlOiBfcmVnaXN0cnkuZ2V0VHJhbnNsYXRlZFBocmFzZVxufTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEhhbmRzb250YWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXV0b2NvbXBsZXRlRWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvYXV0b2NvbXBsZXRlRWRpdG9yXCIpO1xudmFyIF9hdXRvY29tcGxldGVSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9yZW5kZXJlcnMvYXV0b2NvbXBsZXRlUmVuZGVyZXJcIik7XG52YXIgX2F1dG9jb21wbGV0ZVZhbGlkYXRvciA9IHJlcXVpcmUoXCIuLi8uLi92YWxpZGF0b3JzL2F1dG9jb21wbGV0ZVZhbGlkYXRvclwiKTtcbmNvbnN0IENFTExfVFlQRSA9IGV4cG9ydHMuQ0VMTF9UWVBFID0gJ2F1dG9jb21wbGV0ZSc7XG5jb25zdCBBdXRvY29tcGxldGVDZWxsVHlwZSA9IGV4cG9ydHMuQXV0b2NvbXBsZXRlQ2VsbFR5cGUgPSB7XG4gIENFTExfVFlQRSxcbiAgZWRpdG9yOiBfYXV0b2NvbXBsZXRlRWRpdG9yLkF1dG9jb21wbGV0ZUVkaXRvcixcbiAgcmVuZGVyZXI6IF9hdXRvY29tcGxldGVSZW5kZXJlci5hdXRvY29tcGxldGVSZW5kZXJlcixcbiAgdmFsaWRhdG9yOiBfYXV0b2NvbXBsZXRlVmFsaWRhdG9yLmF1dG9jb21wbGV0ZVZhbGlkYXRvclxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXV0b2NvbXBsZXRlVHlwZSA9IHJlcXVpcmUoXCIuL2F1dG9jb21wbGV0ZVR5cGVcIik7XG5leHBvcnRzLkF1dG9jb21wbGV0ZUNlbGxUeXBlID0gX2F1dG9jb21wbGV0ZVR5cGUuQXV0b2NvbXBsZXRlQ2VsbFR5cGU7XG5leHBvcnRzLkNFTExfVFlQRSA9IF9hdXRvY29tcGxldGVUeXBlLkNFTExfVFlQRTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfY2hlY2tib3hFZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vZWRpdG9ycy9jaGVja2JveEVkaXRvclwiKTtcbnZhciBfY2hlY2tib3hSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9yZW5kZXJlcnMvY2hlY2tib3hSZW5kZXJlclwiKTtcbmNvbnN0IENFTExfVFlQRSA9IGV4cG9ydHMuQ0VMTF9UWVBFID0gJ2NoZWNrYm94JztcbmNvbnN0IENoZWNrYm94Q2VsbFR5cGUgPSBleHBvcnRzLkNoZWNrYm94Q2VsbFR5cGUgPSB7XG4gIENFTExfVFlQRSxcbiAgZWRpdG9yOiBfY2hlY2tib3hFZGl0b3IuQ2hlY2tib3hFZGl0b3IsXG4gIHJlbmRlcmVyOiBfY2hlY2tib3hSZW5kZXJlci5jaGVja2JveFJlbmRlcmVyXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jaGVja2JveFR5cGUgPSByZXF1aXJlKFwiLi9jaGVja2JveFR5cGVcIik7XG5leHBvcnRzLkNFTExfVFlQRSA9IF9jaGVja2JveFR5cGUuQ0VMTF9UWVBFO1xuZXhwb3J0cy5DaGVja2JveENlbGxUeXBlID0gX2NoZWNrYm94VHlwZS5DaGVja2JveENlbGxUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9kYXRlRWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvZGF0ZUVkaXRvclwiKTtcbnZhciBfZGF0ZVJlbmRlcmVyID0gcmVxdWlyZShcIi4uLy4uL3JlbmRlcmVycy9kYXRlUmVuZGVyZXJcIik7XG52YXIgX2RhdGVWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi4vLi4vdmFsaWRhdG9ycy9kYXRlVmFsaWRhdG9yXCIpO1xuY29uc3QgQ0VMTF9UWVBFID0gZXhwb3J0cy5DRUxMX1RZUEUgPSAnZGF0ZSc7XG5jb25zdCBEYXRlQ2VsbFR5cGUgPSBleHBvcnRzLkRhdGVDZWxsVHlwZSA9IHtcbiAgQ0VMTF9UWVBFLFxuICBlZGl0b3I6IF9kYXRlRWRpdG9yLkRhdGVFZGl0b3IsXG4gIC8vIGRpc3BsYXlzIHNtYWxsIGdyYXkgYXJyb3cgb24gcmlnaHQgc2lkZSBvZiB0aGUgY2VsbFxuICByZW5kZXJlcjogX2RhdGVSZW5kZXJlci5kYXRlUmVuZGVyZXIsXG4gIHZhbGlkYXRvcjogX2RhdGVWYWxpZGF0b3IuZGF0ZVZhbGlkYXRvclxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfZGF0ZVR5cGUgPSByZXF1aXJlKFwiLi9kYXRlVHlwZVwiKTtcbmV4cG9ydHMuQ0VMTF9UWVBFID0gX2RhdGVUeXBlLkNFTExfVFlQRTtcbmV4cG9ydHMuRGF0ZUNlbGxUeXBlID0gX2RhdGVUeXBlLkRhdGVDZWxsVHlwZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfZHJvcGRvd25FZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vZWRpdG9ycy9kcm9wZG93bkVkaXRvclwiKTtcbnZhciBfZHJvcGRvd25SZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9yZW5kZXJlcnMvZHJvcGRvd25SZW5kZXJlclwiKTtcbnZhciBfZHJvcGRvd25WYWxpZGF0b3IgPSByZXF1aXJlKFwiLi4vLi4vdmFsaWRhdG9ycy9kcm9wZG93blZhbGlkYXRvclwiKTtcbmNvbnN0IENFTExfVFlQRSA9IGV4cG9ydHMuQ0VMTF9UWVBFID0gJ2Ryb3Bkb3duJztcbmNvbnN0IERyb3Bkb3duQ2VsbFR5cGUgPSBleHBvcnRzLkRyb3Bkb3duQ2VsbFR5cGUgPSB7XG4gIENFTExfVFlQRSxcbiAgZWRpdG9yOiBfZHJvcGRvd25FZGl0b3IuRHJvcGRvd25FZGl0b3IsXG4gIC8vIGRpc3BsYXlzIHNtYWxsIGdyYXkgYXJyb3cgb24gcmlnaHQgc2lkZSBvZiB0aGUgY2VsbFxuICByZW5kZXJlcjogX2Ryb3Bkb3duUmVuZGVyZXIuZHJvcGRvd25SZW5kZXJlcixcbiAgdmFsaWRhdG9yOiBfZHJvcGRvd25WYWxpZGF0b3IuZHJvcGRvd25WYWxpZGF0b3Jcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Ryb3Bkb3duVHlwZSA9IHJlcXVpcmUoXCIuL2Ryb3Bkb3duVHlwZVwiKTtcbmV4cG9ydHMuQ0VMTF9UWVBFID0gX2Ryb3Bkb3duVHlwZS5DRUxMX1RZUEU7XG5leHBvcnRzLkRyb3Bkb3duQ2VsbFR5cGUgPSBfZHJvcGRvd25UeXBlLkRyb3Bkb3duQ2VsbFR5cGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2hhbmRzb250YWJsZUVkaXRvciA9IHJlcXVpcmUoXCIuLi8uLi9lZGl0b3JzL2hhbmRzb250YWJsZUVkaXRvclwiKTtcbnZhciBfaGFuZHNvbnRhYmxlUmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vcmVuZGVyZXJzL2hhbmRzb250YWJsZVJlbmRlcmVyXCIpO1xuY29uc3QgQ0VMTF9UWVBFID0gZXhwb3J0cy5DRUxMX1RZUEUgPSAnaGFuZHNvbnRhYmxlJztcbmNvbnN0IEhhbmRzb250YWJsZUNlbGxUeXBlID0gZXhwb3J0cy5IYW5kc29udGFibGVDZWxsVHlwZSA9IHtcbiAgQ0VMTF9UWVBFLFxuICBlZGl0b3I6IF9oYW5kc29udGFibGVFZGl0b3IuSGFuZHNvbnRhYmxlRWRpdG9yLFxuICAvLyBkaXNwbGF5cyBzbWFsbCBncmF5IGFycm93IG9uIHJpZ2h0IHNpZGUgb2YgdGhlIGNlbGxcbiAgcmVuZGVyZXI6IF9oYW5kc29udGFibGVSZW5kZXJlci5oYW5kc29udGFibGVSZW5kZXJlclxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfaGFuZHNvbnRhYmxlVHlwZSA9IHJlcXVpcmUoXCIuL2hhbmRzb250YWJsZVR5cGVcIik7XG5leHBvcnRzLkNFTExfVFlQRSA9IF9oYW5kc29udGFibGVUeXBlLkNFTExfVFlQRTtcbmV4cG9ydHMuSGFuZHNvbnRhYmxlQ2VsbFR5cGUgPSBfaGFuZHNvbnRhYmxlVHlwZS5IYW5kc29udGFibGVDZWxsVHlwZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucmVnaXN0ZXJBbGxDZWxsVHlwZXMgPSByZWdpc3RlckFsbENlbGxUeXBlcztcbnZhciBfYXV0b2NvbXBsZXRlVHlwZSA9IHJlcXVpcmUoXCIuL2F1dG9jb21wbGV0ZVR5cGVcIik7XG5leHBvcnRzLkF1dG9jb21wbGV0ZUNlbGxUeXBlID0gX2F1dG9jb21wbGV0ZVR5cGUuQXV0b2NvbXBsZXRlQ2VsbFR5cGU7XG5leHBvcnRzLkFVVE9DT01QTEVURV9UWVBFID0gX2F1dG9jb21wbGV0ZVR5cGUuQ0VMTF9UWVBFO1xudmFyIF9jaGVja2JveFR5cGUgPSByZXF1aXJlKFwiLi9jaGVja2JveFR5cGVcIik7XG5leHBvcnRzLkNoZWNrYm94Q2VsbFR5cGUgPSBfY2hlY2tib3hUeXBlLkNoZWNrYm94Q2VsbFR5cGU7XG5leHBvcnRzLkNIRUNLQk9YX1RZUEUgPSBfY2hlY2tib3hUeXBlLkNFTExfVFlQRTtcbnZhciBfZGF0ZVR5cGUgPSByZXF1aXJlKFwiLi9kYXRlVHlwZVwiKTtcbmV4cG9ydHMuRGF0ZUNlbGxUeXBlID0gX2RhdGVUeXBlLkRhdGVDZWxsVHlwZTtcbmV4cG9ydHMuREFURV9UWVBFID0gX2RhdGVUeXBlLkNFTExfVFlQRTtcbnZhciBfZHJvcGRvd25UeXBlID0gcmVxdWlyZShcIi4vZHJvcGRvd25UeXBlXCIpO1xuZXhwb3J0cy5Ecm9wZG93bkNlbGxUeXBlID0gX2Ryb3Bkb3duVHlwZS5Ecm9wZG93bkNlbGxUeXBlO1xuZXhwb3J0cy5EUk9QRE9XTl9UWVBFID0gX2Ryb3Bkb3duVHlwZS5DRUxMX1RZUEU7XG52YXIgX2hhbmRzb250YWJsZVR5cGUgPSByZXF1aXJlKFwiLi9oYW5kc29udGFibGVUeXBlXCIpO1xuZXhwb3J0cy5IYW5kc29udGFibGVDZWxsVHlwZSA9IF9oYW5kc29udGFibGVUeXBlLkhhbmRzb250YWJsZUNlbGxUeXBlO1xuZXhwb3J0cy5IQU5EU09OVEFCTEVfVFlQRSA9IF9oYW5kc29udGFibGVUeXBlLkNFTExfVFlQRTtcbnZhciBfbnVtZXJpY1R5cGUgPSByZXF1aXJlKFwiLi9udW1lcmljVHlwZVwiKTtcbmV4cG9ydHMuTnVtZXJpY0NlbGxUeXBlID0gX251bWVyaWNUeXBlLk51bWVyaWNDZWxsVHlwZTtcbmV4cG9ydHMuTlVNRVJJQ19UWVBFID0gX251bWVyaWNUeXBlLkNFTExfVFlQRTtcbnZhciBfcGFzc3dvcmRUeXBlID0gcmVxdWlyZShcIi4vcGFzc3dvcmRUeXBlXCIpO1xuZXhwb3J0cy5QYXNzd29yZENlbGxUeXBlID0gX3Bhc3N3b3JkVHlwZS5QYXNzd29yZENlbGxUeXBlO1xuZXhwb3J0cy5QQVNTV09SRF9UWVBFID0gX3Bhc3N3b3JkVHlwZS5DRUxMX1RZUEU7XG52YXIgX3NlbGVjdFR5cGUgPSByZXF1aXJlKFwiLi9zZWxlY3RUeXBlXCIpO1xuZXhwb3J0cy5TZWxlY3RDZWxsVHlwZSA9IF9zZWxlY3RUeXBlLlNlbGVjdENlbGxUeXBlO1xuZXhwb3J0cy5TRUxFQ1RfVFlQRSA9IF9zZWxlY3RUeXBlLkNFTExfVFlQRTtcbnZhciBfdGV4dFR5cGUgPSByZXF1aXJlKFwiLi90ZXh0VHlwZVwiKTtcbmV4cG9ydHMuVGV4dENlbGxUeXBlID0gX3RleHRUeXBlLlRleHRDZWxsVHlwZTtcbmV4cG9ydHMuVEVYVF9UWVBFID0gX3RleHRUeXBlLkNFTExfVFlQRTtcbnZhciBfdGltZVR5cGUgPSByZXF1aXJlKFwiLi90aW1lVHlwZVwiKTtcbmV4cG9ydHMuVGltZUNlbGxUeXBlID0gX3RpbWVUeXBlLlRpbWVDZWxsVHlwZTtcbmV4cG9ydHMuVElNRV9UWVBFID0gX3RpbWVUeXBlLkNFTExfVFlQRTtcbnZhciBfcmVnaXN0cnkgPSByZXF1aXJlKFwiLi9yZWdpc3RyeVwiKTtcbmV4cG9ydHMucmVnaXN0ZXJDZWxsVHlwZSA9IF9yZWdpc3RyeS5yZWdpc3RlckNlbGxUeXBlO1xuZXhwb3J0cy5nZXRDZWxsVHlwZSA9IF9yZWdpc3RyeS5nZXRDZWxsVHlwZTtcbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZENlbGxUeXBlTmFtZXMgPSBfcmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZENlbGxUeXBlTmFtZXM7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRDZWxsVHlwZXMgPSBfcmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZENlbGxUeXBlcztcbmV4cG9ydHMuaGFzQ2VsbFR5cGUgPSBfcmVnaXN0cnkuaGFzQ2VsbFR5cGU7XG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgYXZhaWxhYmxlIGNlbGwgdHlwZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQWxsQ2VsbFR5cGVzKCkge1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF9hdXRvY29tcGxldGVUeXBlLkF1dG9jb21wbGV0ZUNlbGxUeXBlKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckNlbGxUeXBlKShfY2hlY2tib3hUeXBlLkNoZWNrYm94Q2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF9kYXRlVHlwZS5EYXRlQ2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF9kcm9wZG93blR5cGUuRHJvcGRvd25DZWxsVHlwZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJDZWxsVHlwZSkoX2hhbmRzb250YWJsZVR5cGUuSGFuZHNvbnRhYmxlQ2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF9udW1lcmljVHlwZS5OdW1lcmljQ2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF9wYXNzd29yZFR5cGUuUGFzc3dvcmRDZWxsVHlwZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJDZWxsVHlwZSkoX3NlbGVjdFR5cGUuU2VsZWN0Q2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF90ZXh0VHlwZS5UZXh0Q2VsbFR5cGUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ2VsbFR5cGUpKF90aW1lVHlwZS5UaW1lQ2VsbFR5cGUpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9udW1lcmljVHlwZSA9IHJlcXVpcmUoXCIuL251bWVyaWNUeXBlXCIpO1xuZXhwb3J0cy5DRUxMX1RZUEUgPSBfbnVtZXJpY1R5cGUuQ0VMTF9UWVBFO1xuZXhwb3J0cy5OdW1lcmljQ2VsbFR5cGUgPSBfbnVtZXJpY1R5cGUuTnVtZXJpY0NlbGxUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9udW1lcmljRWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvbnVtZXJpY0VkaXRvclwiKTtcbnZhciBfbnVtZXJpY1JlbmRlcmVyID0gcmVxdWlyZShcIi4uLy4uL3JlbmRlcmVycy9udW1lcmljUmVuZGVyZXJcIik7XG52YXIgX251bWVyaWNWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi4vLi4vdmFsaWRhdG9ycy9udW1lcmljVmFsaWRhdG9yXCIpO1xuY29uc3QgQ0VMTF9UWVBFID0gZXhwb3J0cy5DRUxMX1RZUEUgPSAnbnVtZXJpYyc7XG5jb25zdCBOdW1lcmljQ2VsbFR5cGUgPSBleHBvcnRzLk51bWVyaWNDZWxsVHlwZSA9IHtcbiAgQ0VMTF9UWVBFLFxuICBlZGl0b3I6IF9udW1lcmljRWRpdG9yLk51bWVyaWNFZGl0b3IsXG4gIHJlbmRlcmVyOiBfbnVtZXJpY1JlbmRlcmVyLm51bWVyaWNSZW5kZXJlcixcbiAgdmFsaWRhdG9yOiBfbnVtZXJpY1ZhbGlkYXRvci5udW1lcmljVmFsaWRhdG9yLFxuICBkYXRhVHlwZTogJ251bWJlcidcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3Bhc3N3b3JkVHlwZSA9IHJlcXVpcmUoXCIuL3Bhc3N3b3JkVHlwZVwiKTtcbmV4cG9ydHMuQ0VMTF9UWVBFID0gX3Bhc3N3b3JkVHlwZS5DRUxMX1RZUEU7XG5leHBvcnRzLlBhc3N3b3JkQ2VsbFR5cGUgPSBfcGFzc3dvcmRUeXBlLlBhc3N3b3JkQ2VsbFR5cGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3Bhc3N3b3JkRWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvcGFzc3dvcmRFZGl0b3JcIik7XG52YXIgX3Bhc3N3b3JkUmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vcmVuZGVyZXJzL3Bhc3N3b3JkUmVuZGVyZXJcIik7XG5jb25zdCBDRUxMX1RZUEUgPSBleHBvcnRzLkNFTExfVFlQRSA9ICdwYXNzd29yZCc7XG5jb25zdCBQYXNzd29yZENlbGxUeXBlID0gZXhwb3J0cy5QYXNzd29yZENlbGxUeXBlID0ge1xuICBDRUxMX1RZUEUsXG4gIGVkaXRvcjogX3Bhc3N3b3JkRWRpdG9yLlBhc3N3b3JkRWRpdG9yLFxuICByZW5kZXJlcjogX3Bhc3N3b3JkUmVuZGVyZXIucGFzc3dvcmRSZW5kZXJlcixcbiAgY29weWFibGU6IGZhbHNlXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRDZWxsVHlwZSA9IF9nZXRJdGVtO1xuZXhwb3J0cy5yZWdpc3RlckNlbGxUeXBlID0gX3JlZ2lzdGVyO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfc3RhdGljUmVnaXN0ZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi91dGlscy9zdGF0aWNSZWdpc3RlclwiKSk7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4uL2VkaXRvcnMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5MiA9IHJlcXVpcmUoXCIuLi9yZW5kZXJlcnMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5MyA9IHJlcXVpcmUoXCIuLi92YWxpZGF0b3JzL3JlZ2lzdHJ5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IHtcbiAgcmVnaXN0ZXIsXG4gIGdldEl0ZW0sXG4gIGhhc0l0ZW0sXG4gIGdldE5hbWVzLFxuICBnZXRWYWx1ZXNcbn0gPSAoMCwgX3N0YXRpY1JlZ2lzdGVyLmRlZmF1bHQpKCdjZWxsVHlwZXMnKTtcblxuLyoqXG4gKiBSZXRyaWV2ZSBjZWxsIHR5cGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENlbGwgdHlwZSBpZGVudGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgY2VsbCB0eXBlIG9iamVjdC5cbiAqL1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkQ2VsbFR5cGVzID0gZ2V0VmFsdWVzO1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkQ2VsbFR5cGVOYW1lcyA9IGdldE5hbWVzO1xuZXhwb3J0cy5oYXNDZWxsVHlwZSA9IGhhc0l0ZW07XG5mdW5jdGlvbiBfZ2V0SXRlbShuYW1lKSB7XG4gIGlmICghaGFzSXRlbShuYW1lKSkge1xuICAgIHRocm93IEVycm9yKGBZb3UgZGVjbGFyZWQgY2VsbCB0eXBlIFwiJHtuYW1lfVwiIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3duIG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVnaXN0ZXJlZCBieVxuICAgICAgICAgICAgICAgICBcIkhhbmRzb250YWJsZS5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZVwiIG1ldGhvZGApO1xuICB9XG4gIHJldHVybiBnZXRJdGVtKG5hbWUpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGNlbGwgdHlwZSB1bmRlciBzcGVjaWZpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDZWxsIHR5cGUgaWRlbnRpZmljYXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZSBBbiBvYmplY3Qgd2l0aCBjb250YWlucyBrZXlzIChlcTogYGVkaXRvcmAsIGByZW5kZXJlcmAsIGB2YWxpZGF0b3JgKSB3aGljaCBkZXNjcmliZXMgc3BlY2lmaWVkIGJlaGF2aW91ciBvZiB0aGUgY2VsbC5cbiAqL1xuZnVuY3Rpb24gX3JlZ2lzdGVyKG5hbWUsIHR5cGUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHR5cGUgPSBuYW1lO1xuICAgIG5hbWUgPSB0eXBlLkNFTExfVFlQRTtcbiAgfVxuICBjb25zdCB7XG4gICAgZWRpdG9yLFxuICAgIHJlbmRlcmVyLFxuICAgIHZhbGlkYXRvclxuICB9ID0gdHlwZTtcbiAgaWYgKGVkaXRvcikge1xuICAgICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKG5hbWUsIGVkaXRvcik7XG4gIH1cbiAgaWYgKHJlbmRlcmVyKSB7XG4gICAgKDAsIF9yZWdpc3RyeTIucmVnaXN0ZXJSZW5kZXJlcikobmFtZSwgcmVuZGVyZXIpO1xuICB9XG4gIGlmICh2YWxpZGF0b3IpIHtcbiAgICAoMCwgX3JlZ2lzdHJ5My5yZWdpc3RlclZhbGlkYXRvcikobmFtZSwgdmFsaWRhdG9yKTtcbiAgfVxuICByZWdpc3RlcihuYW1lLCB0eXBlKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfc2VsZWN0VHlwZSA9IHJlcXVpcmUoXCIuL3NlbGVjdFR5cGVcIik7XG5leHBvcnRzLkNFTExfVFlQRSA9IF9zZWxlY3RUeXBlLkNFTExfVFlQRTtcbmV4cG9ydHMuU2VsZWN0Q2VsbFR5cGUgPSBfc2VsZWN0VHlwZS5TZWxlY3RDZWxsVHlwZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfc2VsZWN0RWRpdG9yID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvc2VsZWN0RWRpdG9yXCIpO1xudmFyIF9zZWxlY3RSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9yZW5kZXJlcnMvc2VsZWN0UmVuZGVyZXJcIik7XG5jb25zdCBDRUxMX1RZUEUgPSBleHBvcnRzLkNFTExfVFlQRSA9ICdzZWxlY3QnO1xuY29uc3QgU2VsZWN0Q2VsbFR5cGUgPSBleHBvcnRzLlNlbGVjdENlbGxUeXBlID0ge1xuICBDRUxMX1RZUEUsXG4gIGVkaXRvcjogX3NlbGVjdEVkaXRvci5TZWxlY3RFZGl0b3IsXG4gIHJlbmRlcmVyOiBfc2VsZWN0UmVuZGVyZXIuc2VsZWN0UmVuZGVyZXJcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RleHRUeXBlID0gcmVxdWlyZShcIi4vdGV4dFR5cGVcIik7XG5leHBvcnRzLkNFTExfVFlQRSA9IF90ZXh0VHlwZS5DRUxMX1RZUEU7XG5leHBvcnRzLlRleHRDZWxsVHlwZSA9IF90ZXh0VHlwZS5UZXh0Q2VsbFR5cGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RleHRFZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vZWRpdG9ycy90ZXh0RWRpdG9yXCIpO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vcmVuZGVyZXJzL3RleHRSZW5kZXJlclwiKTtcbmNvbnN0IENFTExfVFlQRSA9IGV4cG9ydHMuQ0VMTF9UWVBFID0gJ3RleHQnO1xuY29uc3QgVGV4dENlbGxUeXBlID0gZXhwb3J0cy5UZXh0Q2VsbFR5cGUgPSB7XG4gIENFTExfVFlQRSxcbiAgZWRpdG9yOiBfdGV4dEVkaXRvci5UZXh0RWRpdG9yLFxuICByZW5kZXJlcjogX3RleHRSZW5kZXJlci50ZXh0UmVuZGVyZXJcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RpbWVUeXBlID0gcmVxdWlyZShcIi4vdGltZVR5cGVcIik7XG5leHBvcnRzLkNFTExfVFlQRSA9IF90aW1lVHlwZS5DRUxMX1RZUEU7XG5leHBvcnRzLlRpbWVDZWxsVHlwZSA9IF90aW1lVHlwZS5UaW1lQ2VsbFR5cGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RpbWVFZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vZWRpdG9ycy90aW1lRWRpdG9yXCIpO1xudmFyIF90aW1lUmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vcmVuZGVyZXJzL3RpbWVSZW5kZXJlclwiKTtcbnZhciBfdGltZVZhbGlkYXRvciA9IHJlcXVpcmUoXCIuLi8uLi92YWxpZGF0b3JzL3RpbWVWYWxpZGF0b3JcIik7XG5jb25zdCBDRUxMX1RZUEUgPSBleHBvcnRzLkNFTExfVFlQRSA9ICd0aW1lJztcbmNvbnN0IFRpbWVDZWxsVHlwZSA9IGV4cG9ydHMuVGltZUNlbGxUeXBlID0ge1xuICBDRUxMX1RZUEUsXG4gIGVkaXRvcjogX3RpbWVFZGl0b3IuVGltZUVkaXRvcixcbiAgcmVuZGVyZXI6IF90aW1lUmVuZGVyZXIudGltZVJlbmRlcmVyLFxuICB2YWxpZGF0b3I6IF90aW1lVmFsaWRhdG9yLnRpbWVWYWxpZGF0b3Jcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBDb3JlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4vaGVscGVycy9mdW5jdGlvblwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9icm93c2VyID0gcmVxdWlyZShcIi4vaGVscGVycy9icm93c2VyXCIpO1xudmFyIF9lZGl0b3JNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9lZGl0b3JNYW5hZ2VyXCIpKTtcbnZhciBfZXZlbnRNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ldmVudE1hbmFnZXJcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfZm9jdXNNYW5hZ2VyID0gcmVxdWlyZShcIi4vZm9jdXNNYW5hZ2VyXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX3BhcnNlVGFibGUgPSByZXF1aXJlKFwiLi91dGlscy9wYXJzZVRhYmxlXCIpO1xudmFyIF9yZWdpc3RyeSA9IHJlcXVpcmUoXCIuL3BsdWdpbnMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5MiA9IHJlcXVpcmUoXCIuL3JlbmRlcmVycy9yZWdpc3RyeVwiKTtcbnZhciBfcmVnaXN0cnkzID0gcmVxdWlyZShcIi4vZWRpdG9ycy9yZWdpc3RyeVwiKTtcbnZhciBfcmVnaXN0cnk0ID0gcmVxdWlyZShcIi4vdmFsaWRhdG9ycy9yZWdpc3RyeVwiKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4vaGVscGVycy9zdHJpbmdcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF90YWJsZVZpZXcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3RhYmxlVmlld1wiKSk7XG52YXIgX2RhdGFTb3VyY2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhdGFNYXAvZGF0YVNvdXJjZVwiKSk7XG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi9oZWxwZXJzL2RhdGFcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuL3RyYW5zbGF0aW9uc1wiKTtcbnZhciBfcm9vdEluc3RhbmNlID0gcmVxdWlyZShcIi4vdXRpbHMvcm9vdEluc3RhbmNlXCIpO1xudmFyIF9zcmMgPSByZXF1aXJlKFwiLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX3JlZ2lzdHJ5NSA9IHJlcXVpcmUoXCIuL2kxOG4vcmVnaXN0cnlcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vaTE4bi91dGlsc1wiKTtcbnZhciBfc2VsZWN0aW9uID0gcmVxdWlyZShcIi4vc2VsZWN0aW9uXCIpO1xudmFyIF9kYXRhTWFwID0gcmVxdWlyZShcIi4vZGF0YU1hcFwiKTtcbnZhciBfaW5kZXgzID0gcmVxdWlyZShcIi4vY29yZS9pbmRleFwiKTtcbnZhciBfdW5pcXVlTWFwID0gcmVxdWlyZShcIi4vdXRpbHMvZGF0YVN0cnVjdHVyZXMvdW5pcXVlTWFwXCIpO1xudmFyIF9zaG9ydGN1dHMgPSByZXF1aXJlKFwiLi9zaG9ydGN1dHNcIik7XG52YXIgX3Nob3J0Y3V0Q29udGV4dHMgPSByZXF1aXJlKFwiLi9zaG9ydGN1dENvbnRleHRzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmxldCBhY3RpdmVHdWlkID0gbnVsbDtcblxuLyoqXG4gKiBLZWVwcyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgYWxsIEhhbmRzb250YWJsZSBpbnN0YW5jZXMgY3JlYXRlZCBvbiB0aGUgc2FtZSBwYWdlLiBUaGVcbiAqIGxpc3QgaXMgdGhlbiB1c2VkIHRvIHRyaWdnZXIgdGhlIFwiYWZ0ZXJVbmxpc3RlblwiIGhvb2sgd2hlbiB0aGUgXCJsaXN0ZW4oKVwiIG1ldGhvZCB3YXNcbiAqIGNhbGxlZCBvbiBhbm90aGVyIGluc3RhbmNlLlxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBDb3JlPn1cbiAqL1xuY29uc3QgZm9yZWlnbkhvdEluc3RhbmNlcyA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBBIHNldCBvZiBkZXByZWNhdGVkIGZlYXR1cmUgbmFtZXMuXG4gKlxuICogQHR5cGUge1NldDxzdHJpbmc+fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmNvbnN0IGRlcHJlY2F0aW9uV2FybnMgPSBuZXcgU2V0KCk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogSGFuZHNvbnRhYmxlIGNvbnN0cnVjdG9yLlxuICpcbiAqIEBjb3JlXG4gKiBAY2xhc3MgQ29yZVxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogVGhlIGBIYW5kc29udGFibGVgIGNsYXNzIChrbm93biBhcyB0aGUgYENvcmVgKSBsZXRzIHlvdSBtb2RpZnkgdGhlIGdyaWQncyBiZWhhdmlvciBieSB1c2luZyBIYW5kc29udGFibGUncyBwdWJsaWMgQVBJIG1ldGhvZHMuXG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBUbyB1c2UgdGhlc2UgbWV0aG9kcywgYXNzb2NpYXRlIGEgSGFuZHNvbnRhYmxlIGluc3RhbmNlIHdpdGggeW91ciBpbnN0YW5jZVxuICogb2YgdGhlIFtgSG90VGFibGVgIGNvbXBvbmVudF0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2luc3RhbGxhdGlvbi9pbnN0YWxsYXRpb24ubWQjXzQtdXNlLXRoZS1ob3R0YWJsZS1jb21wb25lbnQpLFxuICogYnkgdXNpbmcgUmVhY3QncyBgcmVmYCBmZWF0dXJlIChyZWFkIG1vcmUgb24gdGhlIFtJbnN0YW5jZSBtZXRob2RzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvcmVhY3QtbWV0aG9kcy9yZWFjdC1tZXRob2RzLm1kKSBwYWdlKS5cbiAqIDo6OlxuICpcbiAqICMjIEhvdyB0byBjYWxsIGEgbWV0aG9kXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiAvLyBjcmVhdGUgYSBIYW5kc29udGFibGUgaW5zdGFuY2VcbiAqIGNvbnN0IGhvdCA9IG5ldyBIYW5kc29udGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUnKSwgb3B0aW9ucyk7XG4gKlxuICogLy8gY2FsbCBhIG1ldGhvZFxuICogaG90LnNldERhdGFBdENlbGwoMCwgMCwgJ25ldyB2YWx1ZScpO1xuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuICpcbiAqIGNvbnN0IGhvdFRhYmxlQ29tcG9uZW50ID0gdXNlUmVmKG51bGwpO1xuICpcbiAqIDxIb3RUYWJsZVxuICogICAvLyBhc3NvY2lhdGUgeW91ciBgSG90VGFibGVgIGNvbXBvbmVudCB3aXRoIGEgSGFuZHNvbnRhYmxlIGluc3RhbmNlXG4gKiAgIHJlZj17aG90VGFibGVDb21wb25lbnR9XG4gKiAgIHNldHRpbmdzPXtvcHRpb25zfVxuICogLz5cbiAqXG4gKiAvLyBhY2Nlc3MgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSwgdW5kZXIgdGhlIGAuY3VycmVudC5ob3RJbnN0YW5jZWAgcHJvcGVydHlcbiAqIC8vIGNhbGwgYSBtZXRob2RcbiAqIGhvdFRhYmxlQ29tcG9uZW50LmN1cnJlbnQuaG90SW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCgwLCAwLCAnbmV3IHZhbHVlJyk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3RFbGVtZW50IFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgaXMgaW5qZWN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gdXNlclNldHRpbmdzIFRoZSB1c2VyIGRlZmluZWQgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Jvb3RJbnN0YW5jZVN5bWJvbD1mYWxzZV0gSW5kaWNhdGVzIGlmIHRoZSBpbnN0YW5jZSBpcyByb290IG9mIGFsbCBsYXRlciBpbnN0YW5jZXMgY3JlYXRlZC5cbiAqL1xuZnVuY3Rpb24gQ29yZShyb290RWxlbWVudCwgdXNlclNldHRpbmdzKSB7XG4gIHZhciBfdXNlclNldHRpbmdzJGxheW91dEQsXG4gICAgX3RoaXMgPSB0aGlzO1xuICBsZXQgcm9vdEluc3RhbmNlU3ltYm9sID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgbGV0IGluc3RhbmNlID0gdGhpcztcbiAgY29uc3QgZXZlbnRNYW5hZ2VyID0gbmV3IF9ldmVudE1hbmFnZXIuZGVmYXVsdChpbnN0YW5jZSk7XG4gIGxldCBkYXRhbWFwO1xuICBsZXQgZGF0YVNvdXJjZTtcbiAgbGV0IGdyaWQ7XG4gIGxldCBlZGl0b3JNYW5hZ2VyO1xuICBsZXQgZm9jdXNNYW5hZ2VyO1xuICBsZXQgdmlld3BvcnRTY3JvbGxlcjtcbiAgbGV0IGZpcnN0UnVuID0gdHJ1ZTtcbiAgaWYgKCgwLCBfcm9vdEluc3RhbmNlLmhhc1ZhbGlkUGFyYW1ldGVyKShyb290SW5zdGFuY2VTeW1ib2wpKSB7XG4gICAgKDAsIF9yb290SW5zdGFuY2UucmVnaXN0ZXJBc1Jvb3RJbnN0YW5jZSkodGhpcyk7XG4gIH1cblxuICAvLyBUT0RPOiBjaGVjayBpZiByZWZlcmVuY2VzIHRvIERPTSBlbGVtZW50cyBzaG91bGQgYmUgbW92ZSB0byBVSSBsYXllciAoV2Fsa29udGFibGUpXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICB0aGlzLnJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG4gIC8qKlxuICAgKiBUaGUgbmVhcmVzdCBkb2N1bWVudCBvdmVyIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge0RvY3VtZW50fVxuICAgKi9cbiAgdGhpcy5yb290RG9jdW1lbnQgPSByb290RWxlbWVudC5vd25lckRvY3VtZW50O1xuICAvKipcbiAgICogV2luZG93IG9iamVjdCBvdmVyIGNvbnRhaW5lcidzIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7V2luZG93fVxuICAgKi9cbiAgdGhpcy5yb290V2luZG93ID0gdGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIC8qKlxuICAgKiBBIGJvb2xlYW4gdG8gdGVsbCBpZiB0aGUgSGFuZHNvbnRhYmxlIGhhcyBiZWVuIGZ1bGx5IGRlc3Ryb3llZC4gVGhpcyBpcyBzZXQgdG8gYHRydWVgXG4gICAqIGFmdGVyIGBhZnRlckRlc3Ryb3lgIGhvb2sgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQG1lbWJlciBpc0Rlc3Ryb3llZFxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIHRoaXMuaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBjb3VudGVyIGRldGVybWluZXMgaG93IG1hbnkgdGltZXMgdGhlIHJlbmRlciBzdXNwZW5kaW5nIHdhcyBjYWxsZWQuIEl0IGFsbG93c1xuICAgKiB0cmFja2luZyB0aGUgbmVzdGVkIHN1c3BlbmRpbmcgY2FsbHMuIEZvciBlYWNoIHJlbmRlciBzdXNwZW5kIHJlc3VtaW5nIGNhbGwgdGhlXG4gICAqIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQuIFRoZSB2YWx1ZSBlcXVhbCB0byAwIG1lYW5zIHRoZSByZW5kZXIgc3VzcGVuZGluZyBmZWF0dXJlXG4gICAqIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyID0gMDtcbiAgLyoqXG4gICAqIFRoZSBjb3VudGVyIGRldGVybWluZXMgaG93IG1hbnkgdGltZXMgdGhlIGV4ZWN1dGlvbiBzdXNwZW5kaW5nIHdhcyBjYWxsZWQuIEl0IGFsbG93c1xuICAgKiB0cmFja2luZyB0aGUgbmVzdGVkIHN1c3BlbmRpbmcgY2FsbHMuIEZvciBlYWNoIGV4ZWN1dGlvbiBzdXNwZW5kIHJlc3VtaW5nIGNhbGwgdGhlXG4gICAqIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQuIFRoZSB2YWx1ZSBlcXVhbCB0byAwIG1lYW5zIHRoZSBleGVjdXRpb24gc3VzcGVuZGluZyBmZWF0dXJlXG4gICAqIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyID0gMDtcbiAgY29uc3QgbGF5b3V0RGlyZWN0aW9uID0gKF91c2VyU2V0dGluZ3MkbGF5b3V0RCA9IHVzZXJTZXR0aW5ncyA9PT0gbnVsbCB8fCB1c2VyU2V0dGluZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXJTZXR0aW5ncy5sYXlvdXREaXJlY3Rpb24pICE9PSBudWxsICYmIF91c2VyU2V0dGluZ3MkbGF5b3V0RCAhPT0gdm9pZCAwID8gX3VzZXJTZXR0aW5ncyRsYXlvdXREIDogJ2luaGVyaXQnO1xuICBjb25zdCByb290RWxlbWVudERpcmVjdGlvbiA9IFsncnRsJywgJ2x0ciddLmluY2x1ZGVzKGxheW91dERpcmVjdGlvbikgPyBsYXlvdXREaXJlY3Rpb24gOiB0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247XG4gIHRoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXInLCByb290RWxlbWVudERpcmVjdGlvbik7XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZ3JpZCBpcyByZW5kZXJlZCB1c2luZyB0aGUgcmlnaHQtdG8tbGVmdCBsYXlvdXQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAc2luY2UgMTIuMC4wXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaXNSdGxcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgUlRMLlxuICAgKi9cbiAgdGhpcy5pc1J0bCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcm9vdEVsZW1lbnREaXJlY3Rpb24gPT09ICdydGwnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdyaWQgaXMgcmVuZGVyZWQgdXNpbmcgdGhlIGxlZnQtdG8tcmlnaHQgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHNpbmNlIDEyLjAuMFxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGlzTHRyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIExUUi5cbiAgICovXG4gIHRoaXMuaXNMdHIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICFpbnN0YW5jZS5pc1J0bCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIDEgZm9yIExUUjsgLTEgZm9yIFJUTC4gVXNlZnVsIGZvciBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEBzaW5jZSAxMi4wLjBcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXREaXJlY3Rpb25GYWN0b3JcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyAxIGZvciBMVFI7IC0xIGZvciBSVEwuXG4gICAqL1xuICB0aGlzLmdldERpcmVjdGlvbkZhY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuaXNMdHIoKSA/IDEgOiAtMTtcbiAgfTtcbiAgdXNlclNldHRpbmdzLmxhbmd1YWdlID0gKDAsIF9yZWdpc3RyeTUuZ2V0VmFsaWRMYW5ndWFnZUNvZGUpKHVzZXJTZXR0aW5ncy5sYW5ndWFnZSk7XG4gIGNvbnN0IG1ldGFNYW5hZ2VyID0gbmV3IF9kYXRhTWFwLk1ldGFNYW5hZ2VyKGluc3RhbmNlLCB1c2VyU2V0dGluZ3MsIFtfZGF0YU1hcC5EeW5hbWljQ2VsbE1ldGFNb2QsIF9kYXRhTWFwLkV4dGVuZE1ldGFQcm9wZXJ0aWVzTW9kXSk7XG4gIGNvbnN0IHRhYmxlTWV0YSA9IG1ldGFNYW5hZ2VyLmdldFRhYmxlTWV0YSgpO1xuICBjb25zdCBnbG9iYWxNZXRhID0gbWV0YU1hbmFnZXIuZ2V0R2xvYmFsTWV0YSgpO1xuICBjb25zdCBwbHVnaW5zUmVnaXN0cnkgPSAoMCwgX3VuaXF1ZU1hcC5jcmVhdGVVbmlxdWVNYXApKCk7XG4gIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHRoaXMucmVuZGVyQ2FsbCA9IGZhbHNlO1xuICByb290RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsIHJvb3RFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICBpZiAoKDAsIF9yb290SW5zdGFuY2UuaXNSb290SW5zdGFuY2UpKHRoaXMpKSB7XG4gICAgKDAsIF9taXhlZC5faW5qZWN0UHJvZHVjdEluZm8pKHVzZXJTZXR0aW5ncy5saWNlbnNlS2V5LCByb290RWxlbWVudCk7XG4gIH1cbiAgdGhpcy5ndWlkID0gYGh0XyR7KDAsIF9zdHJpbmcucmFuZG9tU3RyaW5nKSgpfWA7IC8vIHRoaXMgaXMgdGhlIG5hbWVzcGFjZSBmb3IgZ2xvYmFsIGV2ZW50c1xuXG4gIGZvcmVpZ25Ib3RJbnN0YW5jZXMuc2V0KHRoaXMuZ3VpZCwgdGhpcyk7XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIGluZGV4IG1hcHBlciB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIGNvbHVtbiBpbmRleGVzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQG1lbWJlciBjb2x1bW5JbmRleE1hcHBlclxuICAgKiBAdHlwZSB7SW5kZXhNYXBwZXJ9XG4gICAqL1xuICB0aGlzLmNvbHVtbkluZGV4TWFwcGVyID0gbmV3IF90cmFuc2xhdGlvbnMuSW5kZXhNYXBwZXIoKTtcbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIGluZGV4IG1hcHBlciB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHJvdyBpbmRleGVzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQG1lbWJlciByb3dJbmRleE1hcHBlclxuICAgKiBAdHlwZSB7SW5kZXhNYXBwZXJ9XG4gICAqL1xuICB0aGlzLnJvd0luZGV4TWFwcGVyID0gbmV3IF90cmFuc2xhdGlvbnMuSW5kZXhNYXBwZXIoKTtcbiAgdGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soJ2luZGV4ZXNTZXF1ZW5jZUNoYW5nZScsIHNvdXJjZSA9PiB7XG4gICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UnLCBzb3VyY2UpO1xuICB9KTtcbiAgdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soJ2luZGV4ZXNTZXF1ZW5jZUNoYW5nZScsIHNvdXJjZSA9PiB7XG4gICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyUm93U2VxdWVuY2VDaGFuZ2UnLCBzb3VyY2UpO1xuICB9KTtcbiAgZGF0YVNvdXJjZSA9IG5ldyBfZGF0YVNvdXJjZS5kZWZhdWx0KGluc3RhbmNlKTtcbiAgaWYgKCF0aGlzLnJvb3RFbGVtZW50LmlkIHx8IHRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsIDMpID09PSAnaHRfJykge1xuICAgIHRoaXMucm9vdEVsZW1lbnQuaWQgPSB0aGlzLmd1aWQ7IC8vIGlmIHJvb3QgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFuIGlkLCBhc3NpZ24gYSByYW5kb20gaWRcbiAgfVxuICBjb25zdCB2aXN1YWxUb1JlbmRlcmFibGVDb29yZHMgPSBjb29yZHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdzogdmlzdWFsUm93LFxuICAgICAgY29sOiB2aXN1YWxDb2x1bW5cbiAgICB9ID0gY29vcmRzO1xuICAgIHJldHVybiBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhcbiAgICAvLyBXZSBqdXN0IHN0b3JlIGluZGV4ZXMgZm9yIHJvd3MgYW5kIGNvbHVtbnMgd2l0aG91dCBoZWFkZXJzLlxuICAgIHZpc3VhbFJvdyA+PSAwID8gaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2aXN1YWxSb3cpIDogdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4gPj0gMCA/IGluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsQ29sdW1uKSA6IHZpc3VhbENvbHVtbik7XG4gIH07XG4gIGNvbnN0IHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyA9IGNvb3JkcyA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiByZW5kZXJhYmxlUm93LFxuICAgICAgY29sOiByZW5kZXJhYmxlQ29sdW1uXG4gICAgfSA9IGNvb3JkcztcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoXG4gICAgLy8gV2UganVzdCBzdG9yZSBpbmRleGVzIGZvciByb3dzIGFuZCBjb2x1bW5zIHdpdGhvdXQgaGVhZGVycy5cbiAgICByZW5kZXJhYmxlUm93ID49IDAgPyBpbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmFibGVSb3cpIDogcmVuZGVyYWJsZVJvdywgcmVuZGVyYWJsZUNvbHVtbiA+PSAwID8gaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlQ29sdW1uKSA6IHJlbmRlcmFibGVDb2x1bW4gLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgKTtcbiAgfTtcbiAgY29uc3QgZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyA9ICh2aXN1YWxSb3dGcm9tLCB2aXN1YWxSb3dUbykgPT4ge1xuICAgIGNvbnN0IGRpciA9IHZpc3VhbFJvd1RvID4gdmlzdWFsUm93RnJvbSA/IDEgOiAtMTtcbiAgICBjb25zdCBtaW5JbmRleCA9IE1hdGgubWluKHZpc3VhbFJvd0Zyb20sIHZpc3VhbFJvd1RvKTtcbiAgICBjb25zdCBtYXhJbmRleCA9IE1hdGgubWF4KHZpc3VhbFJvd0Zyb20sIHZpc3VhbFJvd1RvKTtcbiAgICBjb25zdCByb3dJbmRleCA9IGluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxSb3dGcm9tLCBkaXIpO1xuICAgIGlmIChyb3dJbmRleCA9PT0gbnVsbCB8fCBkaXIgPT09IDEgJiYgcm93SW5kZXggPiBtYXhJbmRleCB8fCBkaXIgPT09IC0xICYmIHJvd0luZGV4IDwgbWluSW5kZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcm93SW5kZXggPj0gMCA/IGluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocm93SW5kZXgpIDogcm93SW5kZXg7XG4gIH07XG4gIGNvbnN0IGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4gPSAodmlzdWFsQ29sdW1uRnJvbSwgdmlzdWFsQ29sdW1uVG8pID0+IHtcbiAgICBjb25zdCBkaXIgPSB2aXN1YWxDb2x1bW5UbyA+IHZpc3VhbENvbHVtbkZyb20gPyAxIDogLTE7XG4gICAgY29uc3QgbWluSW5kZXggPSBNYXRoLm1pbih2aXN1YWxDb2x1bW5Gcm9tLCB2aXN1YWxDb2x1bW5Ubyk7XG4gICAgY29uc3QgbWF4SW5kZXggPSBNYXRoLm1heCh2aXN1YWxDb2x1bW5Gcm9tLCB2aXN1YWxDb2x1bW5Ubyk7XG4gICAgY29uc3QgY29sdW1uSW5kZXggPSBpbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmlzdWFsQ29sdW1uRnJvbSwgZGlyKTtcbiAgICBpZiAoY29sdW1uSW5kZXggPT09IG51bGwgfHwgZGlyID09PSAxICYmIGNvbHVtbkluZGV4ID4gbWF4SW5kZXggfHwgZGlyID09PSAtMSAmJiBjb2x1bW5JbmRleCA8IG1pbkluZGV4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbkluZGV4ID49IDAgPyBpbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGNvbHVtbkluZGV4KSA6IGNvbHVtbkluZGV4O1xuICB9O1xuICBsZXQgc2VsZWN0aW9uID0gbmV3IF9zZWxlY3Rpb24uU2VsZWN0aW9uKHRhYmxlTWV0YSwge1xuICAgIHJvd0luZGV4TWFwcGVyOiBpbnN0YW5jZS5yb3dJbmRleE1hcHBlcixcbiAgICBjb2x1bW5JbmRleE1hcHBlcjogaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIsXG4gICAgY291bnRDb2xzOiAoKSA9PiBpbnN0YW5jZS5jb3VudENvbHMoKSxcbiAgICBjb3VudFJvd3M6ICgpID0+IGluc3RhbmNlLmNvdW50Um93cygpLFxuICAgIHByb3BUb0NvbDogcHJvcCA9PiBkYXRhbWFwLnByb3BUb0NvbChwcm9wKSxcbiAgICBpc0VkaXRvck9wZW5lZDogKCkgPT4gaW5zdGFuY2UuZ2V0QWN0aXZlRWRpdG9yKCkgPyBpbnN0YW5jZS5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpIDogZmFsc2UsXG4gICAgY291bnRSZW5kZXJhYmxlQ29sdW1uczogKCkgPT4gdGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxcbiAgICBjb3VudFJlbmRlcmFibGVSb3dzOiAoKSA9PiB0aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpLFxuICAgIGNvdW50Um93SGVhZGVyczogKCkgPT4gdGhpcy5jb3VudFJvd0hlYWRlcnMoKSxcbiAgICBjb3VudENvbEhlYWRlcnM6ICgpID0+IHRoaXMuY291bnRDb2xIZWFkZXJzKCksXG4gICAgY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKC4uLmFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBjb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoLi4uYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGdldFNob3J0Y3V0TWFuYWdlcjogKCkgPT4gaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksXG4gICAgY3JlYXRlQ2VsbENvb3JkczogKHJvdywgY29sdW1uKSA9PiBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbiksXG4gICAgY3JlYXRlQ2VsbFJhbmdlOiAoaGlnaGxpZ2h0LCBmcm9tLCB0bykgPT4gaW5zdGFuY2UuX2NyZWF0ZUNlbGxSYW5nZShoaWdobGlnaHQsIGZyb20sIHRvKSxcbiAgICB2aXN1YWxUb1JlbmRlcmFibGVDb29yZHMsXG4gICAgcmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzLFxuICAgIGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3csXG4gICAgZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbixcbiAgICBpc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbjogKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKSA9PiB7XG4gICAgICBpZiAodmlzdWFsUm93IDwgMCB8fCB2aXN1YWxDb2x1bW4gPCAwKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5nZXRTZXR0aW5ncygpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2UuZ2V0Q2VsbE1ldGEodmlzdWFsUm93LCB2aXN1YWxDb2x1bW4pLmRpc2FibGVWaXN1YWxTZWxlY3Rpb247XG4gICAgfVxuICB9KTtcbiAgdGhpcy5zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gIGNvbnN0IG9uSW5kZXhNYXBwZXJDYWNoZVVwZGF0ZSA9IF9yZWYgPT4ge1xuICAgIGxldCB7XG4gICAgICBoaWRkZW5JbmRleGVzQ2hhbmdlZFxuICAgIH0gPSBfcmVmO1xuICAgIGlmIChoaWRkZW5JbmRleGVzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY29tbWl0KCk7XG4gICAgfVxuICB9O1xuICB0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygnY2FjaGVVcGRhdGVkJywgb25JbmRleE1hcHBlckNhY2hlVXBkYXRlKTtcbiAgdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soJ2NhY2hlVXBkYXRlZCcsIG9uSW5kZXhNYXBwZXJDYWNoZVVwZGF0ZSk7XG4gIHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygnYWZ0ZXJTZXRSYW5nZUVuZCcsIChjZWxsQ29vcmRzLCBpc0xhc3RTZWxlY3Rpb25MYXllcikgPT4ge1xuICAgIGNvbnN0IHByZXZlbnRTY3JvbGxpbmcgPSAoMCwgX29iamVjdC5jcmVhdGVPYmplY3RQcm9wTGlzdGVuZXIpKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25SYW5nZSA9IHRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICBjb25zdCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gc2VsZWN0aW9uUmFuZ2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkxheWVyTGV2ZWwgPSBzZWxlY3Rpb25SYW5nZS5zaXplKCkgLSAxO1xuICAgIHRoaXMucnVuSG9va3MoJ2FmdGVyU2VsZWN0aW9uJywgZnJvbS5yb3csIGZyb20uY29sLCB0by5yb3csIHRvLmNvbCwgcHJldmVudFNjcm9sbGluZywgc2VsZWN0aW9uTGF5ZXJMZXZlbCk7XG4gICAgdGhpcy5ydW5Ib29rcygnYWZ0ZXJTZWxlY3Rpb25CeVByb3AnLCBmcm9tLnJvdywgaW5zdGFuY2UuY29sVG9Qcm9wKGZyb20uY29sKSwgdG8ucm93LCBpbnN0YW5jZS5jb2xUb1Byb3AodG8uY29sKSwgcHJldmVudFNjcm9sbGluZywgc2VsZWN0aW9uTGF5ZXJMZXZlbCk7XG4gICAgaWYgKGlzTGFzdFNlbGVjdGlvbkxheWVyICYmICghcHJldmVudFNjcm9sbGluZy5pc1RvdWNoZWQoKSB8fCBwcmV2ZW50U2Nyb2xsaW5nLmlzVG91Y2hlZCgpICYmICFwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlKSkge1xuICAgICAgdmlld3BvcnRTY3JvbGxlci5zY3JvbGxUbyhjZWxsQ29vcmRzKTtcbiAgICB9XG4gICAgY29uc3QgaXNTZWxlY3RlZEJ5Um93SGVhZGVyID0gc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO1xuICAgIGNvbnN0IGlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlciA9IHNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtcblxuICAgIC8vIEBUT0RPOiBUaGVzZSBDU1MgY2xhc3NlcyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBhbnltb3JlLiBUaGV5IGFyZSB1c2VkIG9ubHkgYXMgYSBpbmRpY2F0b3Igb2YgdGhlIHNlbGVjdGVkXG4gICAgLy8gcm93cy9jb2x1bW5zIGluIHRoZSBNZXJnZWRDZWxscyBwbHVnaW4gKHZpYSBib3JkZXIuanMjTDUyMCBpbiB0aGUgd2Fsa29udGFibGUgbW9kdWxlKS4gQWZ0ZXIgZml4aW5nXG4gICAgLy8gdGhlIEJvcmRlciBjbGFzcyB0aGlzIHNob3VsZCBiZSByZW1vdmVkLlxuICAgIGlmIChpc1NlbGVjdGVkQnlSb3dIZWFkZXIgJiYgaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMucm9vdEVsZW1lbnQsIFsnaHRfX3NlbGVjdGlvbi0tcm93cycsICdodF9fc2VsZWN0aW9uLS1jb2x1bW5zJ10pO1xuICAgIH0gZWxzZSBpZiAoaXNTZWxlY3RlZEJ5Um93SGVhZGVyKSB7XG4gICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMucm9vdEVsZW1lbnQsICdodF9fc2VsZWN0aW9uLS1jb2x1bW5zJyk7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMucm9vdEVsZW1lbnQsICdodF9fc2VsZWN0aW9uLS1yb3dzJyk7XG4gICAgfSBlbHNlIGlmIChpc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpcy5yb290RWxlbWVudCwgJ2h0X19zZWxlY3Rpb24tLXJvd3MnKTtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5yb290RWxlbWVudCwgJ2h0X19zZWxlY3Rpb24tLWNvbHVtbnMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKSh0aGlzLnJvb3RFbGVtZW50LCBbJ2h0X19zZWxlY3Rpb24tLXJvd3MnLCAnaHRfX3NlbGVjdGlvbi0tY29sdW1ucyddKTtcbiAgICB9XG4gICAgaWYgKHNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ3NoaWZ0Jykge1xuICAgICAgZWRpdG9yTWFuYWdlci5jbG9zZUVkaXRvcihudWxsKTtcbiAgICB9XG4gICAgaW5zdGFuY2Uudmlldy5yZW5kZXIoKTtcbiAgICBlZGl0b3JNYW5hZ2VyLnByZXBhcmVFZGl0b3IoKTtcbiAgfSk7XG4gIHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygnYmVmb3JlU2V0Rm9jdXMnLCBjZWxsQ29vcmRzID0+IHtcbiAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCcsIGNlbGxDb29yZHMucm93LCBjZWxsQ29vcmRzLmNvbCk7XG4gIH0pO1xuICB0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soJ2FmdGVyU2V0Rm9jdXMnLCBjZWxsQ29vcmRzID0+IHtcbiAgICBjb25zdCBwcmV2ZW50U2Nyb2xsaW5nID0gKDAsIF9vYmplY3QuY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKShmYWxzZSk7XG4gICAgdGhpcy5ydW5Ib29rcygnYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCcsIGNlbGxDb29yZHMucm93LCBjZWxsQ29vcmRzLmNvbCwgcHJldmVudFNjcm9sbGluZyk7XG4gICAgaWYgKCFwcmV2ZW50U2Nyb2xsaW5nLmlzVG91Y2hlZCgpIHx8IHByZXZlbnRTY3JvbGxpbmcuaXNUb3VjaGVkKCkgJiYgIXByZXZlbnRTY3JvbGxpbmcudmFsdWUpIHtcbiAgICAgIHZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG8oY2VsbENvb3Jkcyk7XG4gICAgfVxuICAgIGVkaXRvck1hbmFnZXIuY2xvc2VFZGl0b3IoKTtcbiAgICBpbnN0YW5jZS52aWV3LnJlbmRlcigpO1xuICAgIGVkaXRvck1hbmFnZXIucHJlcGFyZUVkaXRvcigpO1xuICB9KTtcbiAgdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCdhZnRlclNlbGVjdGlvbkZpbmlzaGVkJywgY2VsbFJhbmdlcyA9PiB7XG4gICAgY29uc3Qgc2VsZWN0aW9uTGF5ZXJMZXZlbCA9IGNlbGxSYW5nZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gY2VsbFJhbmdlc1tzZWxlY3Rpb25MYXllckxldmVsXTtcbiAgICB0aGlzLnJ1bkhvb2tzKCdhZnRlclNlbGVjdGlvbkVuZCcsIGZyb20ucm93LCBmcm9tLmNvbCwgdG8ucm93LCB0by5jb2wsIHNlbGVjdGlvbkxheWVyTGV2ZWwpO1xuICAgIHRoaXMucnVuSG9va3MoJ2FmdGVyU2VsZWN0aW9uRW5kQnlQcm9wJywgZnJvbS5yb3csIGluc3RhbmNlLmNvbFRvUHJvcChmcm9tLmNvbCksIHRvLnJvdywgaW5zdGFuY2UuY29sVG9Qcm9wKHRvLmNvbCksIHNlbGVjdGlvbkxheWVyTGV2ZWwpO1xuICB9KTtcbiAgdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCdhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24nLCBpc011bHRpcGxlID0+IHtcbiAgICBjb25zdCBjaGFuZ2VkSXNNdWx0aXBsZSA9IHRoaXMucnVuSG9va3MoJ2FmdGVySXNNdWx0aXBsZVNlbGVjdGlvbicsIGlzTXVsdGlwbGUudmFsdWUpO1xuICAgIGlmIChpc011bHRpcGxlLnZhbHVlKSB7XG4gICAgICBpc011bHRpcGxlLnZhbHVlID0gY2hhbmdlZElzTXVsdGlwbGU7XG4gICAgfVxuICB9KTtcbiAgdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCdhZnRlckRlc2VsZWN0JywgKCkgPT4ge1xuICAgIGVkaXRvck1hbmFnZXIuY2xvc2VFZGl0b3IoKTtcbiAgICBpbnN0YW5jZS52aWV3LnJlbmRlcigpO1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpcy5yb290RWxlbWVudCwgWydodF9fc2VsZWN0aW9uLS1yb3dzJywgJ2h0X19zZWxlY3Rpb24tLWNvbHVtbnMnXSk7XG4gICAgdGhpcy5ydW5Ib29rcygnYWZ0ZXJEZXNlbGVjdCcpO1xuICB9KTtcbiAgdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCdiZWZvcmVIaWdobGlnaHRTZXQnLCAoKSA9PiB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQnKSkuYWRkTG9jYWxIb29rKCdiZWZvcmVTZXRSYW5nZVN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzLnJ1bkhvb2tzKCdiZWZvcmVTZXRSYW5nZVN0YXJ0JywgLi4uYXJncyk7XG4gIH0pLmFkZExvY2FsSG9vaygnYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHknLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5ydW5Ib29rcygnYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHknLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdiZWZvcmVTZXRSYW5nZUVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzLnJ1bkhvb2tzKCdiZWZvcmVTZXRSYW5nZUVuZCcsIC4uLmFyZ3MpO1xuICB9KS5hZGRMb2NhbEhvb2soJ2JlZm9yZVNlbGVjdENvbHVtbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5ydW5Ib29rcygnYmVmb3JlU2VsZWN0Q29sdW1ucycsIC4uLmFyZ3MpO1xuICB9KS5hZGRMb2NhbEhvb2soJ2FmdGVyU2VsZWN0Q29sdW1ucycsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzLnJ1bkhvb2tzKCdhZnRlclNlbGVjdENvbHVtbnMnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdiZWZvcmVTZWxlY3RSb3dzJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ2JlZm9yZVNlbGVjdFJvd3MnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdhZnRlclNlbGVjdFJvd3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5ydW5Ib29rcygnYWZ0ZXJTZWxlY3RSb3dzJywgLi4uYXJncyk7XG4gIH0pLmFkZExvY2FsSG9vaygnYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG4gICAgICBhcmdzW19rZXk4XSA9IGFyZ3VtZW50c1tfa2V5OF07XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5ydW5Ib29rcygnbW9kaWZ5VHJhbnNmb3JtU3RhcnQnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMTAgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMCksIF9rZXkxMCA9IDA7IF9rZXkxMCA8IF9sZW4xMDsgX2tleTEwKyspIHtcbiAgICAgIGFyZ3NbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ21vZGlmeVRyYW5zZm9ybUZvY3VzJywgLi4uYXJncyk7XG4gIH0pLmFkZExvY2FsSG9vaygnYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMTEgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMSksIF9rZXkxMSA9IDA7IF9rZXkxMSA8IF9sZW4xMTsgX2tleTExKyspIHtcbiAgICAgIGFyZ3NbX2tleTExXSA9IGFyZ3VtZW50c1tfa2V5MTFdO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2xlbjEyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTIpLCBfa2V5MTIgPSAwOyBfa2V5MTIgPCBfbGVuMTI7IF9rZXkxMisrKSB7XG4gICAgICBhcmdzW19rZXkxMl0gPSBhcmd1bWVudHNbX2tleTEyXTtcbiAgICB9XG4gICAgcmV0dXJuIF90aGlzLnJ1bkhvb2tzKCdtb2RpZnlUcmFuc2Zvcm1FbmQnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMTMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMyksIF9rZXkxMyA9IDA7IF9rZXkxMyA8IF9sZW4xMzsgX2tleTEzKyspIHtcbiAgICAgIGFyZ3NbX2tleTEzXSA9IGFyZ3VtZW50c1tfa2V5MTNdO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kJywgLi4uYXJncyk7XG4gIH0pLmFkZExvY2FsSG9vaygnYmVmb3JlUm93V3JhcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbGVuMTQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xNCksIF9rZXkxNCA9IDA7IF9rZXkxNCA8IF9sZW4xNDsgX2tleTE0KyspIHtcbiAgICAgIGFyZ3NbX2tleTE0XSA9IGFyZ3VtZW50c1tfa2V5MTRdO1xuICAgIH1cbiAgICByZXR1cm4gX3RoaXMucnVuSG9va3MoJ2JlZm9yZVJvd1dyYXAnLCAuLi5hcmdzKTtcbiAgfSkuYWRkTG9jYWxIb29rKCdiZWZvcmVDb2x1bW5XcmFwJywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9sZW4xNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE1KSwgX2tleTE1ID0gMDsgX2tleTE1IDwgX2xlbjE1OyBfa2V5MTUrKykge1xuICAgICAgYXJnc1tfa2V5MTVdID0gYXJndW1lbnRzW19rZXkxNV07XG4gICAgfVxuICAgIHJldHVybiBfdGhpcy5ydW5Ib29rcygnYmVmb3JlQ29sdW1uV3JhcCcsIC4uLmFyZ3MpO1xuICB9KS5hZGRMb2NhbEhvb2soJ2luc2VydFJvd1JlcXVpcmUnLCB0b3RhbFJvd3MgPT4gdGhpcy5hbHRlcignaW5zZXJ0X3Jvd19hYm92ZScsIHRvdGFsUm93cywgMSwgJ2F1dG8nKSkuYWRkTG9jYWxIb29rKCdpbnNlcnRDb2xSZXF1aXJlJywgdG90YWxDb2xzID0+IHRoaXMuYWx0ZXIoJ2luc2VydF9jb2xfc3RhcnQnLCB0b3RhbENvbHMsIDEsICdhdXRvJykpO1xuICBncmlkID0ge1xuICAgIC8qKlxuICAgICAqIEluc2VydHMgb3IgcmVtb3ZlcyByb3dzIGFuZCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIFBvc3NpYmxlIHZhbHVlczogXCJpbnNlcnRfcm93X2Fib3ZlXCIsIFwiaW5zZXJ0X3Jvd19iZWxvd1wiLCBcImluc2VydF9jb2xfc3RhcnRcIiwgXCJpbnNlcnRfY29sX2VuZFwiLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW1vdmVfcm93XCIsIFwicmVtb3ZlX2NvbFwiLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfEFycmF5fSBpbmRleCBSb3cgb3IgY29sdW1uIHZpc3VhbCBpbmRleCB3aGljaCBmcm9tIHRoZSBhbHRlciBhY3Rpb24gd2lsbCBiZSB0cmlnZ2VyZWQuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsdGVyIGFjdGlvbnMgc3VjaCBhcyBcInJlbW92ZV9yb3dcIiBhbmQgXCJyZW1vdmVfY29sXCIgc3VwcG9ydCBhcnJheSBpbmRleGVzIGluIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgYFtbaW5kZXgsIGFtb3VudF0sIFtpbmRleCwgYW1vdW50XS4uLl1gIHRoaXMgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1jb25zZWN1dGl2ZSBjb2x1bW5zIG9yIHJvd3MgaW4gb25lIGNhbGwuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFthbW91bnQ9MV0gQW1vdW50IG9mIHJvd3Mgb3IgY29sdW1ucyB0byByZW1vdmUuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIE9wdGlvbmFsLiBTb3VyY2Ugb2YgaG9vayBydW5uZXIuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBba2VlcEVtcHR5Um93c10gT3B0aW9uYWwuIEZsYWcgZm9yIHByZXZlbnRpbmcgZGVsZXRpb24gb2YgZW1wdHkgcm93cy5cbiAgICAgKi9cbiAgICBhbHRlcihhY3Rpb24sIGluZGV4KSB7XG4gICAgICB2YXIgX2luZGV4LCBfaW5kZXgyO1xuICAgICAgbGV0IGFtb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcbiAgICAgIGxldCBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICAgIGxldCBrZWVwRW1wdHlSb3dzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgPyBhcmd1bWVudHNbNF0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBub3JtYWxpemVJbmRleGVzR3JvdXAgPSBpbmRleGVzID0+IHtcbiAgICAgICAgaWYgKGluZGV4ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNvcnRlZEluZGV4ZXMgPSBbLi4uaW5kZXhlc107XG5cbiAgICAgICAgLy8gU29ydCB0aGUgaW5kZXhlcyBpbiBhc2NlbmRpbmcgb3JkZXIuXG4gICAgICAgIHNvcnRlZEluZGV4ZXMuc29ydCgoX3JlZjIsIF9yZWYzKSA9PiB7XG4gICAgICAgICAgbGV0IFtpbmRleEFdID0gX3JlZjI7XG4gICAgICAgICAgbGV0IFtpbmRleEJdID0gX3JlZjM7XG4gICAgICAgICAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluZGV4QSA+IGluZGV4QiA/IDEgOiAtMTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTm9ybWFsaXplIHRoZSB7aW5kZXgsIGFtb3VudH0gZ3JvdXBzIGludG8gYmlnZ2VyIGdyb3Vwcy5cbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEluZGV4ZXMgPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKShzb3J0ZWRJbmRleGVzLCAoYWNjLCBfcmVmNCkgPT4ge1xuICAgICAgICAgIGxldCBbZ3JvdXBJbmRleCwgZ3JvdXBBbW91bnRdID0gX3JlZjQ7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNJdGVtID0gYWNjW2FjYy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBjb25zdCBbcHJldkluZGV4LCBwcmV2QW1vdW50XSA9IHByZXZpb3VzSXRlbTtcbiAgICAgICAgICBjb25zdCBwcmV2TGFzdEluZGV4ID0gcHJldkluZGV4ICsgcHJldkFtb3VudDtcbiAgICAgICAgICBpZiAoZ3JvdXBJbmRleCA8PSBwcmV2TGFzdEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBhbW91bnRUb0FkZCA9IE1hdGgubWF4KGdyb3VwQW1vdW50IC0gKHByZXZMYXN0SW5kZXggLSBncm91cEluZGV4KSwgMCk7XG4gICAgICAgICAgICBwcmV2aW91c0l0ZW1bMV0gKz0gYW1vdW50VG9BZGQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKFtncm91cEluZGV4LCBncm91cEFtb3VudF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbc29ydGVkSW5kZXhlc1swXV0pO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZEluZGV4ZXM7XG4gICAgICB9O1xuXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnaW5zZXJ0X3Jvd19iZWxvdyc6XG4gICAgICAgIGNhc2UgJ2luc2VydF9yb3dfYWJvdmUnOlxuICAgICAgICAgIGNvbnN0IG51bWJlck9mU291cmNlUm93cyA9IGluc3RhbmNlLmNvdW50U291cmNlUm93cygpO1xuICAgICAgICAgIGlmICh0YWJsZU1ldGEubWF4Um93cyA9PT0gbnVtYmVyT2ZTb3VyY2VSb3dzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gYGFib3ZlYCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgY3JlYXRpbmcgbmV3IHJvd3NcbiAgICAgICAgICBjb25zdCBpbnNlcnRSb3dNb2RlID0gYWN0aW9uID09PSAnaW5zZXJ0X3Jvd19iZWxvdycgPyAnYmVsb3cnIDogJ2Fib3ZlJztcblxuICAgICAgICAgIC8vIENhbGxpbmcgdGhlIGBpbnNlcnRfcm93X2Fib3ZlYCBhY3Rpb24gYWRkcyBhIG5ldyByb3cgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YSBzZXQuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgaW5kZXggPSAoX2luZGV4ID0gaW5kZXgpICE9PSBudWxsICYmIF9pbmRleCAhPT0gdm9pZCAwID8gX2luZGV4IDogaW5zZXJ0Um93TW9kZSA9PT0gJ2JlbG93JyA/IG51bWJlck9mU291cmNlUm93cyA6IDA7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZGVsdGE6IHJvd0RlbHRhLFxuICAgICAgICAgICAgc3RhcnRQaHlzaWNhbEluZGV4OiBzdGFydFJvd1BoeXNpY2FsSW5kZXhcbiAgICAgICAgICB9ID0gZGF0YW1hcC5jcmVhdGVSb3coaW5kZXgsIGFtb3VudCwge1xuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgbW9kZTogaW5zZXJ0Um93TW9kZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlbGVjdGlvbi5zaGlmdFJvd3MoaW5zdGFuY2UudG9WaXN1YWxSb3coc3RhcnRSb3dQaHlzaWNhbEluZGV4KSwgcm93RGVsdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpbnNlcnRfY29sX3N0YXJ0JzpcbiAgICAgICAgY2FzZSAnaW5zZXJ0X2NvbF9lbmQnOlxuICAgICAgICAgIC8vIFwic3RhcnRcIiBpcyBhIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGNyZWF0aW5nIG5ldyBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgaW5zZXJ0Q29sdW1uTW9kZSA9IGFjdGlvbiA9PT0gJ2luc2VydF9jb2xfZW5kJyA/ICdlbmQnIDogJ3N0YXJ0JztcblxuICAgICAgICAgIC8vIENhbGxpbmcgdGhlIGBpbnNlcnRfY29sX3N0YXJ0YCBhY3Rpb24gYWRkcyBhIG5ldyBjb2x1bW4gdG8gdGhlIGxlZnQgb2YgdGhlIGRhdGEgc2V0LlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIGluZGV4ID0gKF9pbmRleDIgPSBpbmRleCkgIT09IG51bGwgJiYgX2luZGV4MiAhPT0gdm9pZCAwID8gX2luZGV4MiA6IGluc2VydENvbHVtbk1vZGUgPT09ICdlbmQnID8gaW5zdGFuY2UuY291bnRTb3VyY2VDb2xzKCkgOiAwO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGRlbHRhOiBjb2xEZWx0YSxcbiAgICAgICAgICAgIHN0YXJ0UGh5c2ljYWxJbmRleDogc3RhcnRDb2x1bW5QaHlzaWNhbEluZGV4XG4gICAgICAgICAgfSA9IGRhdGFtYXAuY3JlYXRlQ29sKGluZGV4LCBhbW91bnQsIHtcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgIG1vZGU6IGluc2VydENvbHVtbk1vZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sRGVsdGEpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRhYmxlTWV0YS5jb2xIZWFkZXJzKSkge1xuICAgICAgICAgICAgICBjb25zdCBzcGxpY2VBcnJheSA9IFtpbnN0YW5jZS50b1Zpc3VhbENvbHVtbihzdGFydENvbHVtblBoeXNpY2FsSW5kZXgpLCAwXTtcbiAgICAgICAgICAgICAgc3BsaWNlQXJyYXkubGVuZ3RoICs9IGNvbERlbHRhOyAvLyBpbnNlcnRzIGVtcHR5ICh1bmRlZmluZWQpIGVsZW1lbnRzIGF0IHRoZSBlbmQgb2YgYW4gYXJyYXlcbiAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseSh0YWJsZU1ldGEuY29sSGVhZGVycywgc3BsaWNlQXJyYXkpOyAvLyBpbnNlcnRzIGVtcHR5ICh1bmRlZmluZWQpIGVsZW1lbnRzIGludG8gdGhlIGNvbEhlYWRlciBhcnJheVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNoaWZ0Q29sdW1ucyhpbnN0YW5jZS50b1Zpc3VhbENvbHVtbihzdGFydENvbHVtblBoeXNpY2FsSW5kZXgpLCBjb2xEZWx0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdyZW1vdmVfcm93JzpcbiAgICAgICAgICBjb25zdCByZW1vdmVSb3cgPSBpbmRleGVzID0+IHtcbiAgICAgICAgICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAvLyBOb3JtYWxpemUgdGhlIHtpbmRleCwgYW1vdW50fSBncm91cHMgaW50byBiaWdnZXIgZ3JvdXBzLlxuICAgICAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGluZGV4ZXMsIF9yZWY1ID0+IHtcbiAgICAgICAgICAgICAgbGV0IFtncm91cEluZGV4LCBncm91cEFtb3VudF0gPSBfcmVmNTtcbiAgICAgICAgICAgICAgY29uc3QgY2FsY0luZGV4ID0gKDAsIF9taXhlZC5pc0VtcHR5KShncm91cEluZGV4KSA/IGluc3RhbmNlLmNvdW50Um93cygpIC0gMSA6IE1hdGgubWF4KGdyb3VwSW5kZXggLSBvZmZzZXQsIDApO1xuXG4gICAgICAgICAgICAgIC8vIElmIHRoZSAnaW5kZXgnIGlzIGFuIGludGVnZXIgZGVjcmVhc2UgaXQgYnkgJ29mZnNldCcgb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaCB0byBtYWtlIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggZGF0YW1hcC5yZW1vdmVDb2wgbWV0aG9kLlxuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihncm91cEluZGV4KSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGdyb3VwSW5kZXggPSBNYXRoLm1heChncm91cEluZGV4IC0gb2Zmc2V0LCAwKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFRPRE86IGZvciBkYXRhbWFwLnJlbW92ZVJvdyBpbmRleCBzaG91bGQgYmUgcGFzc2VkIGFzIGl0IGlzICh3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMpLiBJZiBub3QsIHRoZSBsb2dpY1xuICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIGRhdGFtYXAucmVtb3ZlUm93IGJyZWFrcyB0aGUgcmVtb3ZpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICAgICAgICAgICAgY29uc3Qgd2FzUmVtb3ZlZCA9IGRhdGFtYXAucmVtb3ZlUm93KGdyb3VwSW5kZXgsIGdyb3VwQW1vdW50LCBzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAoIXdhc1JlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICByb3dcbiAgICAgICAgICAgICAgICB9ID0gaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKHJvdyA+PSBncm91cEluZGV4ICYmIHJvdyA8PSBncm91cEluZGV4ICsgZ3JvdXBBbW91bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICBlZGl0b3JNYW5hZ2VyLmNsb3NlRWRpdG9yKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCB0b3RhbFJvd3MgPSBpbnN0YW5jZS5jb3VudFJvd3MoKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsUm93cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZSA9PT0gJ0NvbnRleHRNZW51LnJlbW92ZVJvdycpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucmVmcmVzaCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zaGlmdFJvd3MoZ3JvdXBJbmRleCwgLWdyb3VwQW1vdW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBmaXhlZFJvd3NUb3AgPSB0YWJsZU1ldGEuZml4ZWRSb3dzVG9wO1xuICAgICAgICAgICAgICBpZiAoZml4ZWRSb3dzVG9wID49IGNhbGNJbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICB0YWJsZU1ldGEuZml4ZWRSb3dzVG9wIC09IE1hdGgubWluKGdyb3VwQW1vdW50LCBmaXhlZFJvd3NUb3AgLSBjYWxjSW5kZXgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGZpeGVkUm93c0JvdHRvbSA9IHRhYmxlTWV0YS5maXhlZFJvd3NCb3R0b207XG4gICAgICAgICAgICAgIGlmIChmaXhlZFJvd3NCb3R0b20gJiYgY2FsY0luZGV4ID49IHRvdGFsUm93cyAtIGZpeGVkUm93c0JvdHRvbSkge1xuICAgICAgICAgICAgICAgIHRhYmxlTWV0YS5maXhlZFJvd3NCb3R0b20gLT0gTWF0aC5taW4oZ3JvdXBBbW91bnQsIGZpeGVkUm93c0JvdHRvbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2Zmc2V0ICs9IGdyb3VwQW1vdW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmRleCkpIHtcbiAgICAgICAgICAgIHJlbW92ZVJvdyhub3JtYWxpemVJbmRleGVzR3JvdXAoaW5kZXgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlUm93KFtbaW5kZXgsIGFtb3VudF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlbW92ZV9jb2wnOlxuICAgICAgICAgIGNvbnN0IHJlbW92ZUNvbCA9IGluZGV4ZXMgPT4ge1xuICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUge2luZGV4LCBhbW91bnR9IGdyb3VwcyBpbnRvIGJpZ2dlciBncm91cHMuXG4gICAgICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoaW5kZXhlcywgX3JlZjYgPT4ge1xuICAgICAgICAgICAgICBsZXQgW2dyb3VwSW5kZXgsIGdyb3VwQW1vdW50XSA9IF9yZWY2O1xuICAgICAgICAgICAgICBjb25zdCBjYWxjSW5kZXggPSAoMCwgX21peGVkLmlzRW1wdHkpKGdyb3VwSW5kZXgpID8gaW5zdGFuY2UuY291bnRDb2xzKCkgLSAxIDogTWF0aC5tYXgoZ3JvdXBJbmRleCAtIG9mZnNldCwgMCk7XG4gICAgICAgICAgICAgIGxldCBwaHlzaWNhbENvbHVtbkluZGV4ID0gaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihjYWxjSW5kZXgpO1xuXG4gICAgICAgICAgICAgIC8vIElmIHRoZSAnaW5kZXgnIGlzIGFuIGludGVnZXIgZGVjcmVhc2UgaXQgYnkgJ29mZnNldCcgb3RoZXJ3aXNlIHBhc3MgaXQgdGhyb3VnaCB0byBtYWtlIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAvLyBjb21wYXRpYmxlIHdpdGggZGF0YW1hcC5yZW1vdmVDb2wgbWV0aG9kLlxuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihncm91cEluZGV4KSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgICAgIGdyb3VwSW5kZXggPSBNYXRoLm1heChncm91cEluZGV4IC0gb2Zmc2V0LCAwKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFRPRE86IGZvciBkYXRhbWFwLnJlbW92ZUNvbCBpbmRleCBzaG91bGQgYmUgcGFzc2VkIGFzIGl0IGlzICh3aXRoIHVuZGVmaW5lZCBhbmQgbnVsbCB2YWx1ZXMpLiBJZiBub3QsIHRoZSBsb2dpY1xuICAgICAgICAgICAgICAvLyBpbnNpZGUgdGhlIGRhdGFtYXAucmVtb3ZlQ29sIGJyZWFrcyB0aGUgcmVtb3ZpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICAgICAgICAgICAgY29uc3Qgd2FzUmVtb3ZlZCA9IGRhdGFtYXAucmVtb3ZlQ29sKGdyb3VwSW5kZXgsIGdyb3VwQW1vdW50LCBzb3VyY2UpO1xuICAgICAgICAgICAgICBpZiAoIXdhc1JlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICBjb2xcbiAgICAgICAgICAgICAgICB9ID0gaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKGNvbCA+PSBncm91cEluZGV4ICYmIGNvbCA8PSBncm91cEluZGV4ICsgZ3JvdXBBbW91bnQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICBlZGl0b3JNYW5hZ2VyLmNsb3NlRWRpdG9yKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCB0b3RhbENvbHVtbnMgPSBpbnN0YW5jZS5jb3VudENvbHMoKTtcbiAgICAgICAgICAgICAgaWYgKHRvdGFsQ29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5kZXNlbGVjdCgpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZSA9PT0gJ0NvbnRleHRNZW51LnJlbW92ZUNvbHVtbicpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24ucmVmcmVzaCgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zaGlmdENvbHVtbnMoZ3JvdXBJbmRleCwgLWdyb3VwQW1vdW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBmaXhlZENvbHVtbnNTdGFydCA9IHRhYmxlTWV0YS5maXhlZENvbHVtbnNTdGFydDtcbiAgICAgICAgICAgICAgaWYgKGZpeGVkQ29sdW1uc1N0YXJ0ID49IGNhbGNJbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICB0YWJsZU1ldGEuZml4ZWRDb2x1bW5zU3RhcnQgLT0gTWF0aC5taW4oZ3JvdXBBbW91bnQsIGZpeGVkQ29sdW1uc1N0YXJ0IC0gY2FsY0luZGV4KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZU1ldGEuY29sSGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBoeXNpY2FsQ29sdW1uSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBwaHlzaWNhbENvbHVtbkluZGV4ID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRhYmxlTWV0YS5jb2xIZWFkZXJzLnNwbGljZShwaHlzaWNhbENvbHVtbkluZGV4LCBncm91cEFtb3VudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2Zmc2V0ICs9IGdyb3VwQW1vdW50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmRleCkpIHtcbiAgICAgICAgICAgIHJlbW92ZUNvbChub3JtYWxpemVJbmRleGVzR3JvdXAoaW5kZXgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVtb3ZlQ29sKFtbaW5kZXgsIGFtb3VudF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBubyBzdWNoIGFjdGlvbiBcIiR7YWN0aW9ufVwiYCk7XG4gICAgICB9XG4gICAgICBpbnN0YW5jZS52aWV3LnJlbmRlcigpO1xuICAgICAgaWYgKCFrZWVwRW1wdHlSb3dzKSB7XG4gICAgICAgIGdyaWQuYWRqdXN0Um93c0FuZENvbHMoKTsgLy8gbWFrZXMgc3VyZSB0aGF0IHdlIGRpZCBub3QgYWRkIHJvd3MgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCByZWZyZXNoXG4gICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBNYWtlcyBzdXJlIHRoZXJlIGFyZSBlbXB0eSByb3dzIGF0IHRoZSBib3R0b20gb2YgdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBhZGp1c3RSb3dzQW5kQ29scygpIHtcbiAgICAgIGNvbnN0IG1pblJvd3MgPSB0YWJsZU1ldGEubWluUm93cztcbiAgICAgIGNvbnN0IG1pblNwYXJlUm93cyA9IHRhYmxlTWV0YS5taW5TcGFyZVJvd3M7XG4gICAgICBjb25zdCBtaW5Db2xzID0gdGFibGVNZXRhLm1pbkNvbHM7XG4gICAgICBjb25zdCBtaW5TcGFyZUNvbHMgPSB0YWJsZU1ldGEubWluU3BhcmVDb2xzO1xuICAgICAgaWYgKG1pblJvd3MpIHtcbiAgICAgICAgLy8gc2hvdWxkIEkgYWRkIGVtcHR5IHJvd3MgdG8gZGF0YSBzb3VyY2UgdG8gbWVldCBtaW5Sb3dzP1xuICAgICAgICBjb25zdCBuck9mUm93cyA9IGluc3RhbmNlLmNvdW50Um93cygpO1xuICAgICAgICBpZiAobnJPZlJvd3MgPCBtaW5Sb3dzKSB7XG4gICAgICAgICAgLy8gVGhlIHN5bmNocm9uaXphdGlvbiB3aXRoIGNlbGwgbWV0YSBpcyBub3QgZGVzaXJlZCBoZXJlLiBGb3IgYG1pblJvd3NgIG9wdGlvbixcbiAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHRvdWNoL3NoaWZ0IGNlbGwgbWV0YSBvYmplY3RzLlxuICAgICAgICAgIGRhdGFtYXAuY3JlYXRlUm93KG5yT2ZSb3dzLCBtaW5Sb3dzIC0gbnJPZlJvd3MsIHtcbiAgICAgICAgICAgIHNvdXJjZTogJ2F1dG8nXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtaW5TcGFyZVJvd3MpIHtcbiAgICAgICAgY29uc3QgZW1wdHlSb3dzID0gaW5zdGFuY2UuY291bnRFbXB0eVJvd3ModHJ1ZSk7XG5cbiAgICAgICAgLy8gc2hvdWxkIEkgYWRkIGVtcHR5IHJvd3MgdG8gbWVldCBtaW5TcGFyZVJvd3M/XG4gICAgICAgIGlmIChlbXB0eVJvd3MgPCBtaW5TcGFyZVJvd3MpIHtcbiAgICAgICAgICBjb25zdCBlbXB0eVJvd3NNaXNzaW5nID0gbWluU3BhcmVSb3dzIC0gZW1wdHlSb3dzO1xuICAgICAgICAgIGNvbnN0IHJvd3NUb0NyZWF0ZSA9IE1hdGgubWluKGVtcHR5Um93c01pc3NpbmcsIHRhYmxlTWV0YS5tYXhSb3dzIC0gaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCkpO1xuXG4gICAgICAgICAgLy8gVGhlIHN5bmNocm9uaXphdGlvbiB3aXRoIGNlbGwgbWV0YSBpcyBub3QgZGVzaXJlZCBoZXJlLiBGb3IgYG1pblNwYXJlUm93c2Agb3B0aW9uLFxuICAgICAgICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gdG91Y2gvc2hpZnQgY2VsbCBtZXRhIG9iamVjdHMuXG4gICAgICAgICAgZGF0YW1hcC5jcmVhdGVSb3coaW5zdGFuY2UuY291bnRSb3dzKCksIHJvd3NUb0NyZWF0ZSwge1xuICAgICAgICAgICAgc291cmNlOiAnYXV0bydcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAge1xuICAgICAgICBsZXQgZW1wdHlDb2xzO1xuXG4gICAgICAgIC8vIGNvdW50IGN1cnJlbnRseSBlbXB0eSBjb2xzXG4gICAgICAgIGlmIChtaW5Db2xzIHx8IG1pblNwYXJlQ29scykge1xuICAgICAgICAgIGVtcHR5Q29scyA9IGluc3RhbmNlLmNvdW50RW1wdHlDb2xzKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuck9mQ29sdW1ucyA9IGluc3RhbmNlLmNvdW50Q29scygpO1xuXG4gICAgICAgIC8vIHNob3VsZCBJIGFkZCBlbXB0eSBjb2xzIHRvIG1lZXQgbWluQ29scz9cbiAgICAgICAgaWYgKG1pbkNvbHMgJiYgIXRhYmxlTWV0YS5jb2x1bW5zICYmIG5yT2ZDb2x1bW5zIDwgbWluQ29scykge1xuICAgICAgICAgIC8vIFRoZSBzeW5jaHJvbml6YXRpb24gd2l0aCBjZWxsIG1ldGEgaXMgbm90IGRlc2lyZWQgaGVyZS4gRm9yIGBtaW5TcGFyZVJvd3NgIG9wdGlvbixcbiAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHRvdWNoL3NoaWZ0IGNlbGwgbWV0YSBvYmplY3RzLlxuICAgICAgICAgIGNvbnN0IGNvbHNUb0NyZWF0ZSA9IG1pbkNvbHMgLSBuck9mQ29sdW1ucztcbiAgICAgICAgICBlbXB0eUNvbHMgKz0gY29sc1RvQ3JlYXRlO1xuICAgICAgICAgIGRhdGFtYXAuY3JlYXRlQ29sKG5yT2ZDb2x1bW5zLCBjb2xzVG9DcmVhdGUsIHtcbiAgICAgICAgICAgIHNvdXJjZTogJ2F1dG8nXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvdWxkIEkgYWRkIGVtcHR5IGNvbHMgdG8gbWVldCBtaW5TcGFyZUNvbHM/XG4gICAgICAgIGlmIChtaW5TcGFyZUNvbHMgJiYgIXRhYmxlTWV0YS5jb2x1bW5zICYmIGluc3RhbmNlLmRhdGFUeXBlID09PSAnYXJyYXknICYmIGVtcHR5Q29scyA8IG1pblNwYXJlQ29scykge1xuICAgICAgICAgIG5yT2ZDb2x1bW5zID0gaW5zdGFuY2UuY291bnRDb2xzKCk7XG4gICAgICAgICAgY29uc3QgZW1wdHlDb2xzTWlzc2luZyA9IG1pblNwYXJlQ29scyAtIGVtcHR5Q29scztcbiAgICAgICAgICBjb25zdCBjb2xzVG9DcmVhdGUgPSBNYXRoLm1pbihlbXB0eUNvbHNNaXNzaW5nLCB0YWJsZU1ldGEubWF4Q29scyAtIG5yT2ZDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIFRoZSBzeW5jaHJvbml6YXRpb24gd2l0aCBjZWxsIG1ldGEgaXMgbm90IGRlc2lyZWQgaGVyZS4gRm9yIGBtaW5TcGFyZVJvd3NgIG9wdGlvbixcbiAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIHRvdWNoL3NoaWZ0IGNlbGwgbWV0YSBvYmplY3RzLlxuICAgICAgICAgIGRhdGFtYXAuY3JlYXRlQ29sKG5yT2ZDb2x1bW5zLCBjb2xzVG9DcmVhdGUsIHtcbiAgICAgICAgICAgIHNvdXJjZTogJ2F1dG8nXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZS52aWV3KSB7XG4gICAgICAgIGluc3RhbmNlLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBQb3B1bGF0ZSB0aGUgZGF0YSBmcm9tIHRoZSBwcm92aWRlZCAyZCBhcnJheSBmcm9tIHRoZSBnaXZlbiBjZWxsIGNvb3JkaW5hdGVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gc3RhcnQgU3RhcnQgc2VsZWN0aW9uIHBvc2l0aW9uLiBWaXN1YWwgaW5kZXhlcy5cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBpbnB1dCAyZCBkYXRhIGFycmF5LlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbZW5kXSBFbmQgc2VsZWN0aW9uIHBvc2l0aW9uIChvbmx5IGZvciBkcmFnLWRvd24gbW9kZSkuIFZpc3VhbCBpbmRleGVzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlPVwicG9wdWxhdGVGcm9tQXJyYXlcIl0gU291cmNlIGluZm9ybWF0aW9uIHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW21ldGhvZD1cIm92ZXJ3cml0ZVwiXSBQb3B1bGF0ZSBtZXRob2QuIFBvc3NpYmxlIG9wdGlvbnM6IGBzaGlmdF9kb3duYCwgYHNoaWZ0X3JpZ2h0YCwgYG92ZXJ3cml0ZWAuXG4gICAgICogQHJldHVybnMge29iamVjdHx1bmRlZmluZWR9IEVuZGluZyB0ZCBpbiBwYXN0ZWQgYXJlYSAob25seSBpZiBhbnkgY2VsbCB3YXMgY2hhbmdlZCkuXG4gICAgICovXG4gICAgcG9wdWxhdGVGcm9tQXJyYXkoc3RhcnQsIGlucHV0LCBlbmQsIHNvdXJjZSwgbWV0aG9kKSB7XG4gICAgICBsZXQgcjtcbiAgICAgIGxldCBybGVuO1xuICAgICAgbGV0IGM7XG4gICAgICBsZXQgY2xlbjtcbiAgICAgIGNvbnN0IHNldERhdGEgPSBbXTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB7fTtcbiAgICAgIGNvbnN0IG5ld0RhdGFCeUNvbHVtbnMgPSBbXTtcbiAgICAgIGNvbnN0IHN0YXJ0Um93ID0gc3RhcnQucm93O1xuICAgICAgY29uc3Qgc3RhcnRDb2x1bW4gPSBzdGFydC5jb2w7XG4gICAgICBybGVuID0gaW5wdXQubGVuZ3RoO1xuICAgICAgaWYgKHJsZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgbGV0IGNvbHVtbnNQb3B1bGF0aW9uRW5kID0gMDtcbiAgICAgIGxldCByb3dzUG9wdWxhdGlvbkVuZCA9IDA7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKGVuZCkpIHtcbiAgICAgICAgY29sdW1uc1BvcHVsYXRpb25FbmQgPSBlbmQuY29sIC0gc3RhcnRDb2x1bW4gKyAxO1xuICAgICAgICByb3dzUG9wdWxhdGlvbkVuZCA9IGVuZC5yb3cgLSBzdGFydFJvdyArIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIGluc2VydCBkYXRhIHdpdGggc3BlY2lmaWVkIHBhc3RlTW9kZSBtZXRob2RcbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgJ3NoaWZ0X2Rvd24nOlxuICAgICAgICAgIC8vIHRyYW5zbGF0ZSBkYXRhIGZyb20gYSBsaXN0IG9mIHJvd3MgdG8gYSBsaXN0IG9mIGNvbHVtbnNcbiAgICAgICAgICBjb25zdCBwb3B1bGF0ZWREYXRhQnlDb2x1bW5zID0gKDAsIF9hcnJheS5waXZvdCkoaW5wdXQpO1xuICAgICAgICAgIGNvbnN0IG51bWJlck9mRGF0YUNvbHVtbnMgPSBwb3B1bGF0ZWREYXRhQnlDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAvLyBtZXRob2QncyBhcmd1bWVudCBjYW4gZXh0ZW5kIHRoZSByYW5nZSBvZiBkYXRhIHBvcHVsYXRpb24gKGRhdGEgd291bGQgYmUgcmVwZWF0ZWQpXG4gICAgICAgICAgY29uc3QgbnVtYmVyT2ZDb2x1bW5zVG9Qb3B1bGF0ZSA9IE1hdGgubWF4KG51bWJlck9mRGF0YUNvbHVtbnMsIGNvbHVtbnNQb3B1bGF0aW9uRW5kKTtcbiAgICAgICAgICBjb25zdCBwdXNoZWREb3duRGF0YUJ5Um93cyA9IGluc3RhbmNlLmdldERhdGEoKS5zbGljZShzdGFydFJvdyk7XG5cbiAgICAgICAgICAvLyB0cmFuc2xhdGUgZGF0YSBmcm9tIGEgbGlzdCBvZiByb3dzIHRvIGEgbGlzdCBvZiBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgcHVzaGVkRG93bkRhdGFCeUNvbHVtbnMgPSAoMCwgX2FycmF5LnBpdm90KShwdXNoZWREb3duRGF0YUJ5Um93cykuc2xpY2Uoc3RhcnRDb2x1bW4sIHN0YXJ0Q29sdW1uICsgbnVtYmVyT2ZDb2x1bW5zVG9Qb3B1bGF0ZSk7XG4gICAgICAgICAgZm9yIChjID0gMDsgYyA8IG51bWJlck9mQ29sdW1uc1RvUG9wdWxhdGU7IGMgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGMgPCBudW1iZXJPZkRhdGFDb2x1bW5zKSB7XG4gICAgICAgICAgICAgIGZvciAociA9IDAsIHJsZW4gPSBwb3B1bGF0ZWREYXRhQnlDb2x1bW5zW2NdLmxlbmd0aDsgciA8IHJvd3NQb3B1bGF0aW9uRW5kIC0gcmxlbjsgciArPSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwZWF0aW5nIGRhdGEgZm9yIHJvd3NcbiAgICAgICAgICAgICAgICBwb3B1bGF0ZWREYXRhQnlDb2x1bW5zW2NdLnB1c2gocG9wdWxhdGVkRGF0YUJ5Q29sdW1uc1tjXVtyICUgcmxlbl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjIDwgcHVzaGVkRG93bkRhdGFCeUNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbmV3RGF0YUJ5Q29sdW1ucy5wdXNoKHBvcHVsYXRlZERhdGFCeUNvbHVtbnNbY10uY29uY2F0KHB1c2hlZERvd25EYXRhQnlDb2x1bW5zW2NdKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgYmVmb3JlIGRhdGEgcG9wdWxhdGlvbiwgdGhlcmUgd2FzIG5vIGRhdGEgaW4gdGhlIGNvbHVtblxuICAgICAgICAgICAgICAgIC8vIHdlIGZpbGwgdGhlIHJlcXVpcmVkIHJvd3MnIG5ld2x5LWNyZWF0ZWQgY2VsbHMgd2l0aCBgbnVsbGAgdmFsdWVzXG4gICAgICAgICAgICAgICAgbmV3RGF0YUJ5Q29sdW1ucy5wdXNoKHBvcHVsYXRlZERhdGFCeUNvbHVtbnNbY10uY29uY2F0KG5ldyBBcnJheShwdXNoZWREb3duRGF0YUJ5Um93cy5sZW5ndGgpLmZpbGwobnVsbCkpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVwZWF0aW5nIGRhdGEgZm9yIGNvbHVtbnMuXG4gICAgICAgICAgICAgIG5ld0RhdGFCeUNvbHVtbnMucHVzaChwb3B1bGF0ZWREYXRhQnlDb2x1bW5zW2MgJSBudW1iZXJPZkRhdGFDb2x1bW5zXS5jb25jYXQocHVzaGVkRG93bkRhdGFCeUNvbHVtbnNbY10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCAoMCwgX2FycmF5LnBpdm90KShuZXdEYXRhQnlDb2x1bW5zKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NoaWZ0X3JpZ2h0JzpcbiAgICAgICAgICBjb25zdCBudW1iZXJPZkRhdGFSb3dzID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICAgIC8vIG1ldGhvZCdzIGFyZ3VtZW50IGNhbiBleHRlbmQgdGhlIHJhbmdlIG9mIGRhdGEgcG9wdWxhdGlvbiAoZGF0YSB3b3VsZCBiZSByZXBlYXRlZClcbiAgICAgICAgICBjb25zdCBudW1iZXJPZlJvd3NUb1BvcHVsYXRlID0gTWF0aC5tYXgobnVtYmVyT2ZEYXRhUm93cywgcm93c1BvcHVsYXRpb25FbmQpO1xuICAgICAgICAgIGNvbnN0IHB1c2hlZFJpZ2h0RGF0YUJ5Um93cyA9IGluc3RhbmNlLmdldERhdGEoKS5zbGljZShzdGFydFJvdykubWFwKHJvd0RhdGEgPT4gcm93RGF0YS5zbGljZShzdGFydENvbHVtbikpO1xuICAgICAgICAgIGZvciAociA9IDA7IHIgPCBudW1iZXJPZlJvd3NUb1BvcHVsYXRlOyByICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChyIDwgbnVtYmVyT2ZEYXRhUm93cykge1xuICAgICAgICAgICAgICBmb3IgKGMgPSAwLCBjbGVuID0gaW5wdXRbcl0ubGVuZ3RoOyBjIDwgY29sdW1uc1BvcHVsYXRpb25FbmQgLSBjbGVuOyBjICs9IDEpIHtcbiAgICAgICAgICAgICAgICAvLyByZXBlYXRpbmcgZGF0YSBmb3Igcm93c1xuICAgICAgICAgICAgICAgIGlucHV0W3JdLnB1c2goaW5wdXRbcl1bYyAlIGNsZW5dKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAociA8IHB1c2hlZFJpZ2h0RGF0YUJ5Um93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHB1c2hlZFJpZ2h0RGF0YUJ5Um93c1tyXS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgaW5wdXRbcl0ucHVzaChwdXNoZWRSaWdodERhdGFCeVJvd3Nbcl1baV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBiZWZvcmUgZGF0YSBwb3B1bGF0aW9uLCB0aGVyZSB3YXMgbm8gZGF0YSBpbiB0aGUgcm93XG4gICAgICAgICAgICAgICAgLy8gd2UgZmlsbCB0aGUgcmVxdWlyZWQgY29sdW1ucycgbmV3bHktY3JlYXRlZCBjZWxscyB3aXRoIGBudWxsYCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBpbnB1dFtyXS5wdXNoKC4uLm5ldyBBcnJheShwdXNoZWRSaWdodERhdGFCeVJvd3NbMF0ubGVuZ3RoKS5maWxsKG51bGwpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUmVwZWF0aW5nIGRhdGEgZm9yIGNvbHVtbnMuXG4gICAgICAgICAgICAgIGlucHV0LnB1c2goaW5wdXRbciAlIHJsZW5dLnNsaWNlKDAsIG51bWJlck9mUm93c1RvUG9wdWxhdGUpLmNvbmNhdChwdXNoZWRSaWdodERhdGFCeVJvd3Nbcl0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBpbnB1dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ292ZXJ3cml0ZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gb3ZlcndyaXRlIGFuZCBvdGhlciBub3Qgc3BlY2lmaWVkIG9wdGlvbnNcbiAgICAgICAgICBjdXJyZW50LnJvdyA9IHN0YXJ0LnJvdztcbiAgICAgICAgICBjdXJyZW50LmNvbCA9IHN0YXJ0LmNvbDtcbiAgICAgICAgICBsZXQgc2tpcHBlZFJvdyA9IDA7XG4gICAgICAgICAgbGV0IHNraXBwZWRDb2x1bW4gPSAwO1xuICAgICAgICAgIGxldCBwdXNoRGF0YSA9IHRydWU7XG4gICAgICAgICAgbGV0IGNlbGxNZXRhO1xuICAgICAgICAgIGNvbnN0IGdldElucHV0VmFsdWUgPSBmdW5jdGlvbiBnZXRJbnB1dFZhbHVlKHJvdykge1xuICAgICAgICAgICAgbGV0IGNvbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHJvd1ZhbHVlID0gaW5wdXRbcm93ICUgaW5wdXQubGVuZ3RoXTtcbiAgICAgICAgICAgIGlmIChjb2wgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJvd1ZhbHVlW2NvbCAlIHJvd1ZhbHVlLmxlbmd0aF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcm93VmFsdWU7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCByb3dJbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgICBjb25zdCByb3dTZWxlY3Rpb25MZW5ndGggPSBlbmQgPyBlbmQucm93IC0gc3RhcnQucm93ICsgMSA6IDA7XG4gICAgICAgICAgaWYgKGVuZCkge1xuICAgICAgICAgICAgcmxlbiA9IHJvd1NlbGVjdGlvbkxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmxlbiA9IE1hdGgubWF4KHJvd0lucHV0TGVuZ3RoLCByb3dTZWxlY3Rpb25MZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmb3IgKHIgPSAwOyByIDwgcmxlbjsgcisrKSB7XG4gICAgICAgICAgICBpZiAoZW5kICYmIGN1cnJlbnQucm93ID4gZW5kLnJvdyAmJiByb3dTZWxlY3Rpb25MZW5ndGggPiByb3dJbnB1dExlbmd0aCB8fCAhdGFibGVNZXRhLmFsbG93SW5zZXJ0Um93ICYmIGN1cnJlbnQucm93ID4gaW5zdGFuY2UuY291bnRSb3dzKCkgLSAxIHx8IGN1cnJlbnQucm93ID49IHRhYmxlTWV0YS5tYXhSb3dzKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmlzdWFsUm93ID0gciAtIHNraXBwZWRSb3c7XG4gICAgICAgICAgICBjb25zdCBjb2xJbnB1dExlbmd0aCA9IGdldElucHV0VmFsdWUodmlzdWFsUm93KS5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjb2xTZWxlY3Rpb25MZW5ndGggPSBlbmQgPyBlbmQuY29sIC0gc3RhcnQuY29sICsgMSA6IDA7XG4gICAgICAgICAgICBpZiAoZW5kKSB7XG4gICAgICAgICAgICAgIGNsZW4gPSBjb2xTZWxlY3Rpb25MZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjbGVuID0gTWF0aC5tYXgoY29sSW5wdXRMZW5ndGgsIGNvbFNlbGVjdGlvbkxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50LmNvbCA9IHN0YXJ0LmNvbDtcbiAgICAgICAgICAgIGNlbGxNZXRhID0gaW5zdGFuY2UuZ2V0Q2VsbE1ldGEoY3VycmVudC5yb3csIGN1cnJlbnQuY29sKTtcbiAgICAgICAgICAgIGlmICgoc291cmNlID09PSAnQ29weVBhc3RlLnBhc3RlJyB8fCBzb3VyY2UgPT09ICdBdXRvZmlsbC5maWxsJykgJiYgY2VsbE1ldGEuc2tpcFJvd09uUGFzdGUpIHtcbiAgICAgICAgICAgICAgc2tpcHBlZFJvdyArPSAxO1xuICAgICAgICAgICAgICBjdXJyZW50LnJvdyArPSAxO1xuICAgICAgICAgICAgICBybGVuICs9IDE7XG4gICAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2tpcHBlZENvbHVtbiA9IDA7XG4gICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2xlbjsgYysrKSB7XG4gICAgICAgICAgICAgIGlmIChlbmQgJiYgY3VycmVudC5jb2wgPiBlbmQuY29sICYmIGNvbFNlbGVjdGlvbkxlbmd0aCA+IGNvbElucHV0TGVuZ3RoIHx8ICF0YWJsZU1ldGEuYWxsb3dJbnNlcnRDb2x1bW4gJiYgY3VycmVudC5jb2wgPiBpbnN0YW5jZS5jb3VudENvbHMoKSAtIDEgfHwgY3VycmVudC5jb2wgPj0gdGFibGVNZXRhLm1heENvbHMpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjZWxsTWV0YSA9IGluc3RhbmNlLmdldENlbGxNZXRhKGN1cnJlbnQucm93LCBjdXJyZW50LmNvbCk7XG4gICAgICAgICAgICAgIGlmICgoc291cmNlID09PSAnQ29weVBhc3RlLnBhc3RlJyB8fCBzb3VyY2UgPT09ICdBdXRvZmlsbC5maWxsJykgJiYgY2VsbE1ldGEuc2tpcENvbHVtbk9uUGFzdGUpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkQ29sdW1uICs9IDE7XG4gICAgICAgICAgICAgICAgY3VycmVudC5jb2wgKz0gMTtcbiAgICAgICAgICAgICAgICBjbGVuICs9IDE7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNlbGxNZXRhLnJlYWRPbmx5ICYmIHNvdXJjZSAhPT0gJ1VuZG9SZWRvLnVuZG8nKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC5jb2wgKz0gMTtcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHZpc3VhbENvbHVtbiA9IGMgLSBza2lwcGVkQ29sdW1uO1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBnZXRJbnB1dFZhbHVlKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgICAgICAgICAgICAgbGV0IG9yZ1ZhbHVlID0gaW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChjdXJyZW50LnJvdywgY3VycmVudC5jb2wpO1xuICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gJ3ZhbHVlJyBpcyBhcnJheSBhbmQgJ29yZ1ZhbHVlJyBpcyBudWxsLCBzZXQgJ29yZ1ZhbHVlJyB0b1xuICAgICAgICAgICAgICAgIC8vIGFuIGVtcHR5IGFycmF5IHNvIHRoYXQgdGhlIG51bGwgdmFsdWUgY2FuIGJlIGNvbXBhcmVkIHRvICd2YWx1ZSdcbiAgICAgICAgICAgICAgICAvLyBhcyBhbiBlbXB0eSB2YWx1ZSBmb3IgdGhlIGFycmF5IGNvbnRleHRcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgb3JnVmFsdWUgPT09IG51bGwpIG9yZ1ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKG9yZ1ZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBvcmdWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgIHB1c2hEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG9yZ1ZhbHVlU2NoZW1hID0gKDAsIF9vYmplY3QuZHVja1NjaGVtYSkoQXJyYXkuaXNBcnJheShvcmdWYWx1ZSkgPyBvcmdWYWx1ZSA6IG9yZ1ZhbHVlWzBdIHx8IG9yZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2NoZW1hID0gKDAsIF9vYmplY3QuZHVja1NjaGVtYSkoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlWzBdIHx8IHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgb3ZlcndyaXRpbmcgdmFsdWVzIHdpdGggdGhlIHNhbWUgb2JqZWN0LWJhc2VkIHNjaGVtYSBvciBhbnkgYXJyYXktYmFzZWQgc2NoZW1hLlxuICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0RXF1YWwpKG9yZ1ZhbHVlU2NoZW1hLCB2YWx1ZVNjaGVtYSkgfHwgQXJyYXkuaXNBcnJheShvcmdWYWx1ZVNjaGVtYSkgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZVNjaGVtYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoMCwgX29iamVjdC5kZWVwQ2xvbmUpKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hEYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yZ1ZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBvcmdWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBwdXNoRGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoRGF0YSkge1xuICAgICAgICAgICAgICAgIHNldERhdGEucHVzaChbY3VycmVudC5yb3csIGN1cnJlbnQuY29sLCB2YWx1ZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHB1c2hEYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3VycmVudC5jb2wgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQucm93ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluc3RhbmNlLnNldERhdGFBdENlbGwoc2V0RGF0YSwgbnVsbCwgbnVsbCwgc291cmNlIHx8ICdwb3B1bGF0ZUZyb21BcnJheScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IGBsYW5ndWFnZWAga2V5IG9mIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VDb2RlIExhbmd1YWdlIGNvZGUgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGkuZS4gJ2VuLVVTJywgJ3B0LUJSJywgJ2RlLURFJy5cbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyTGFuZ3VhZ2VDaGFuZ2VcbiAgICovXG4gIGZ1bmN0aW9uIHNldExhbmd1YWdlKGxhbmd1YWdlQ29kZSkge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRMYW5ndWFnZUNvZGUgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUxhbmd1YWdlQ29kZSkobGFuZ3VhZ2VDb2RlKTtcbiAgICBpZiAoKDAsIF9yZWdpc3RyeTUuaGFzTGFuZ3VhZ2VEaWN0aW9uYXJ5KShub3JtYWxpemVkTGFuZ3VhZ2VDb2RlKSkge1xuICAgICAgaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZUxhbmd1YWdlQ2hhbmdlJywgbm9ybWFsaXplZExhbmd1YWdlQ29kZSk7XG4gICAgICBnbG9iYWxNZXRhLmxhbmd1YWdlID0gbm9ybWFsaXplZExhbmd1YWdlQ29kZTtcbiAgICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlckxhbmd1YWdlQ2hhbmdlJywgbm9ybWFsaXplZExhbmd1YWdlQ29kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbHMud2FyblVzZXJBYm91dExhbmd1YWdlUmVnaXN0cmF0aW9uKShsYW5ndWFnZUNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZXQgYGNsYXNzTmFtZWAgb3IgYHRhYmxlQ2xhc3NOYW1lYCwgZGVwZW5kaW5nIG9uIHRoZSBrZXkgZnJvbSB0aGUgc2V0dGluZ3Mgb2JqZWN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIGBjbGFzc05hbWVgIG9yIGB0YWJsZUNsYXNzTmFtZWAgZnJvbSB0aGUga2V5IGluIHRoZSBzZXR0aW5ncyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBjbGFzc1NldHRpbmdzIFN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBDb250YWlucyBjbGFzcyBuYW1lKHMpIGZyb20gc2V0dGluZ3Mgb2JqZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gc2V0Q2xhc3NOYW1lKGNsYXNzTmFtZSwgY2xhc3NTZXR0aW5ncykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjbGFzc05hbWUgPT09ICdjbGFzc05hbWUnID8gaW5zdGFuY2Uucm9vdEVsZW1lbnQgOiBpbnN0YW5jZS50YWJsZTtcbiAgICBpZiAoZmlyc3RSdW4pIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoZWxlbWVudCwgY2xhc3NTZXR0aW5ncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBnbG9iYWxNZXRhU2V0dGluZ3NBcnJheSA9IFtdO1xuICAgICAgbGV0IHNldHRpbmdzQXJyYXkgPSBbXTtcbiAgICAgIGlmIChnbG9iYWxNZXRhW2NsYXNzTmFtZV0pIHtcbiAgICAgICAgZ2xvYmFsTWV0YVNldHRpbmdzQXJyYXkgPSBBcnJheS5pc0FycmF5KGdsb2JhbE1ldGFbY2xhc3NOYW1lXSkgPyBnbG9iYWxNZXRhW2NsYXNzTmFtZV0gOiAoMCwgX2FycmF5LnN0cmluZ1RvQXJyYXkpKGdsb2JhbE1ldGFbY2xhc3NOYW1lXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2xhc3NTZXR0aW5ncykge1xuICAgICAgICBzZXR0aW5nc0FycmF5ID0gQXJyYXkuaXNBcnJheShjbGFzc1NldHRpbmdzKSA/IGNsYXNzU2V0dGluZ3MgOiAoMCwgX2FycmF5LnN0cmluZ1RvQXJyYXkpKGNsYXNzU2V0dGluZ3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xhc3NOYW1lVG9SZW1vdmUgPSAoMCwgX2FycmF5LmdldERpZmZlcmVuY2VPZkFycmF5cykoZ2xvYmFsTWV0YVNldHRpbmdzQXJyYXksIHNldHRpbmdzQXJyYXkpO1xuICAgICAgY29uc3QgY2xhc3NOYW1lVG9BZGQgPSAoMCwgX2FycmF5LmdldERpZmZlcmVuY2VPZkFycmF5cykoc2V0dGluZ3NBcnJheSwgZ2xvYmFsTWV0YVNldHRpbmdzQXJyYXkpO1xuICAgICAgaWYgKGNsYXNzTmFtZVRvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKGVsZW1lbnQsIGNsYXNzTmFtZVRvUmVtb3ZlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjbGFzc05hbWVUb0FkZC5sZW5ndGgpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShlbGVtZW50LCBjbGFzc05hbWVUb0FkZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbE1ldGFbY2xhc3NOYW1lXSA9IGNsYXNzU2V0dGluZ3M7XG4gIH1cbiAgdGhpcy5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIGRhdGFTb3VyY2Uuc2V0RGF0YSh0YWJsZU1ldGEuZGF0YSk7XG4gICAgaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZUluaXQnKTtcbiAgICBpZiAoKDAsIF9icm93c2VyLmlzTW9iaWxlQnJvd3NlcikoKSB8fCAoMCwgX2Jyb3dzZXIuaXNJcGFkT1MpKCkpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoaW5zdGFuY2Uucm9vdEVsZW1lbnQsICdtb2JpbGUnKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyh0YWJsZU1ldGEsIHRydWUpO1xuICAgIHRoaXMudmlldyA9IG5ldyBfdGFibGVWaWV3LmRlZmF1bHQodGhpcyk7XG4gICAgZWRpdG9yTWFuYWdlciA9IF9lZGl0b3JNYW5hZ2VyLmRlZmF1bHQuZ2V0SW5zdGFuY2UoaW5zdGFuY2UsIHRhYmxlTWV0YSwgc2VsZWN0aW9uKTtcbiAgICB2aWV3cG9ydFNjcm9sbGVyID0gKDAsIF9pbmRleDMuY3JlYXRlVmlld3BvcnRTY3JvbGxlcikoaW5zdGFuY2UpO1xuICAgIGZvY3VzTWFuYWdlciA9IG5ldyBfZm9jdXNNYW5hZ2VyLkZvY3VzTWFuYWdlcihpbnN0YW5jZSk7XG4gICAgaWYgKCgwLCBfcm9vdEluc3RhbmNlLmlzUm9vdEluc3RhbmNlKSh0aGlzKSkge1xuICAgICAgKDAsIF9pbmRleDMuaW5zdGFsbEZvY3VzQ2F0Y2hlcikoaW5zdGFuY2UpO1xuICAgIH1cbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnaW5pdCcpO1xuICAgIHRoaXMuZm9yY2VGdWxsUmVuZGVyID0gdHJ1ZTsgLy8gdXNlZCB3aGVuIGRhdGEgd2FzIGNoYW5nZWRcbiAgICB0aGlzLnZpZXcucmVuZGVyKCk7XG5cbiAgICAvLyBSdW4gdGhlIGxvZ2ljIG9ubHkgaWYgaXQncyB0aGUgdGFibGUncyBpbml0aWFsaXphdGlvbiBhbmQgdGhlIHJvb3QgZWxlbWVudCBpcyBub3QgdmlzaWJsZS5cbiAgICBpZiAoISFmaXJzdFJ1biAmJiBpbnN0YW5jZS5yb290RWxlbWVudC5vZmZzZXRQYXJlbnQgPT09IG51bGwpIHtcbiAgICAgICgwLCBfZWxlbWVudC5vYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2UpKGluc3RhbmNlLnJvb3RFbGVtZW50LCAoKSA9PiB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3ByZWFkZXIgc2l6ZSBjYWNoZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAgICBpbnN0YW5jZS52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKTtcbiAgICAgICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgIGluc3RhbmNlLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmaXJzdFJ1biA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlckNoYW5nZScsIGZpcnN0UnVuWzBdLCBmaXJzdFJ1blsxXSk7XG4gICAgICBmaXJzdFJ1biA9IGZhbHNlO1xuICAgIH1cbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJJbml0Jyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIFZhbGlkYXRvcnNRdWV1ZSgpIHtcbiAgICAvLyBtb3ZlZCB0aGlzIG9uZSBsZXZlbCB1cCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgZnVuY3Rpb24gaGVyZS4gUHJvYmFibHkgdGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gYSBzZXBhcmF0ZSBmaWxlXG4gICAgbGV0IHJlc29sdmVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkYXRvcnNJblF1ZXVlOiAwLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICBhZGRWYWxpZGF0b3JUb1F1ZXVlKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRvcnNJblF1ZXVlICs9IDE7XG4gICAgICAgIHJlc29sdmVkID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgcmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRvcnNJblF1ZXVlID0gdGhpcy52YWxpZGF0b3JzSW5RdWV1ZSAtIDEgPCAwID8gMCA6IHRoaXMudmFsaWRhdG9yc0luUXVldWUgLSAxO1xuICAgICAgICB0aGlzLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKTtcbiAgICAgIH0sXG4gICAgICBvblF1ZXVlRW1wdHkoKSB7fSxcbiAgICAgIGNoZWNrSWZRdWV1ZUlzRW1wdHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRvcnNJblF1ZXVlID09PSAwICYmIHJlc29sdmVkID09PSBmYWxzZSkge1xuICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm9uUXVldWVFbXB0eSh0aGlzLnZhbGlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhcnNlZCBudW1iZXIgZnJvbSBudW1lcmljIHN0cmluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG51bWVyaWNEYXRhIEZsb2F0IChzZXBhcmF0ZWQgYnkgYSBkb3Qgb3IgYSBjb21tYSkgb3IgaW50ZWdlci5cbiAgICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIGlmIHdlIGdldCBkYXRhIGluIHBhcnNhYmxlIGZvcm1hdCwgbm90IGNoYW5nZWQgdmFsdWUgb3RoZXJ3aXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UGFyc2VkTnVtYmVyKG51bWVyaWNEYXRhKSB7XG4gICAgLy8gVW5pZnlpbmcgXCJmbG9hdCBsaWtlXCIgc3RyaW5nLiBDaGFuZ2UgZnJvbSB2YWx1ZSB3aXRoIGNvbW1hIGRldGVybWluZXIgdG8gdmFsdWUgd2l0aCBkb3QgZGV0ZXJtaW5lcixcbiAgICAvLyBmb3IgZXhhbXBsZSBmcm9tIGA0NTAsNjVgIHRvIGA0NTAuNjVgLlxuICAgIGNvbnN0IHVuaWZpZWROdW1lcmljRGF0YSA9IG51bWVyaWNEYXRhLnJlcGxhY2UoJywnLCAnLicpO1xuICAgIGlmIChpc05hTihwYXJzZUZsb2F0KHVuaWZpZWROdW1lcmljRGF0YSkpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodW5pZmllZE51bWVyaWNEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bWVyaWNEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgMkQgYXJyYXkgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBlZGl0ZWQgY2VsbHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIHZhbGlkYXRpb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3QgYXN5bmMgdmFsaWRhdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIHZhbGlkYXRlQ2hhbmdlcyhjaGFuZ2VzLCBzb3VyY2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFjaGFuZ2VzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSBpbnN0YW5jZS5nZXRBY3RpdmVFZGl0b3IoKTtcbiAgICBjb25zdCB3YWl0aW5nRm9yVmFsaWRhdG9yID0gbmV3IFZhbGlkYXRvcnNRdWV1ZSgpO1xuICAgIGxldCBzaG91bGRCZUNhbmNlbGVkID0gdHJ1ZTtcbiAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLm9uUXVldWVFbXB0eSA9IGlzVmFsaWQgPT4ge1xuICAgICAgaWYgKGFjdGl2ZUVkaXRvciAmJiBzaG91bGRCZUNhbmNlbGVkKSB7XG4gICAgICAgIGFjdGl2ZUVkaXRvci5jYW5jZWxDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhpc1ZhbGlkKTsgLy8gY2FsbGVkIHdoZW4gYXN5bmMgdmFsaWRhdG9ycyBhcmUgcmVzb2x2ZWQgYW5kIGJlZm9yZUNoYW5nZSB3YXMgbm90IGFzeW5jXG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gY2hhbmdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgW3JvdywgcHJvcCwsIG5ld1ZhbHVlXSA9IGNoYW5nZXNbaV07XG4gICAgICBjb25zdCB2aXN1YWxDb2wgPSBkYXRhbWFwLnByb3BUb0NvbChwcm9wKTtcbiAgICAgIGxldCBjZWxsUHJvcGVydGllcztcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZpc3VhbENvbCkpIHtcbiAgICAgICAgY2VsbFByb3BlcnRpZXMgPSBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3csIHZpc3VhbENvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHJlcXVlc3RlZCB2aXN1YWwgY29sdW1uLCB3ZSBjYW4gdXNlIHRoZSB0YWJsZSBtZXRhIGFzIHRoZSBjZWxsIHByb3BlcnRpZXMgd2hlbiByZXRyaWV2aW5nXG4gICAgICAgIC8vIHRoZSBjZWxsIHZhbGlkYXRvci5cbiAgICAgICAgY2VsbFByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgLi4uT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhYmxlTWV0YSksXG4gICAgICAgICAgLi4udGFibGVNZXRhXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoY2VsbFByb3BlcnRpZXMudHlwZSA9PT0gJ251bWVyaWMnICYmIHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ3N0cmluZycgJiYgKDAsIF9udW1iZXIuaXNOdW1lcmljTGlrZSkobmV3VmFsdWUpKSB7XG4gICAgICAgIGNoYW5nZXNbaV1bM10gPSBnZXRQYXJzZWROdW1iZXIobmV3VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIGlmIChpbnN0YW5jZS5nZXRDZWxsVmFsaWRhdG9yKGNlbGxQcm9wZXJ0aWVzKSkge1xuICAgICAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLmFkZFZhbGlkYXRvclRvUXVldWUoKTtcbiAgICAgICAgaW5zdGFuY2UudmFsaWRhdGVDZWxsKGNoYW5nZXNbaV1bM10sIGNlbGxQcm9wZXJ0aWVzLCBmdW5jdGlvbiAoaW5kZXgsIGNlbGxQcm9wZXJ0aWVzUmVmZXJlbmNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlICYmIGNlbGxQcm9wZXJ0aWVzUmVmZXJlbmNlLmFsbG93SW52YWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgc2hvdWxkQmVDYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjaGFuZ2VzLnNwbGljZShpbmRleCwgMSk7IC8vIGNhbmNlbCB0aGUgY2hhbmdlXG4gICAgICAgICAgICAgIGNlbGxQcm9wZXJ0aWVzUmVmZXJlbmNlLnZhbGlkID0gdHJ1ZTsgLy8gd2UgY2FuY2VsbGVkIHRoZSBjaGFuZ2UsIHNvIGNlbGwgdmFsdWUgaXMgc3RpbGwgdmFsaWRcblxuICAgICAgICAgICAgICBjb25zdCBjZWxsID0gaW5zdGFuY2UuZ2V0Q2VsbChjZWxsUHJvcGVydGllc1JlZmVyZW5jZS52aXN1YWxSb3csIGNlbGxQcm9wZXJ0aWVzUmVmZXJlbmNlLnZpc3VhbENvbCk7XG4gICAgICAgICAgICAgIGlmIChjZWxsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShjZWxsLCB0YWJsZU1ldGEuaW52YWxpZENlbGxDbGFzc05hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0oaSwgY2VsbFByb3BlcnRpZXMpLCBzb3VyY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBhcHBseSBjaGFuZ2VzLiBDYWxsZWQgYWZ0ZXIgdmFsaWRhdGVDaGFuZ2VzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VzIEFycmF5IGluIGZvcm0gb2YgW3JvdywgcHJvcCwgb2xkVmFsdWUsIG5ld1ZhbHVlXS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIGhvdyB0aGlzIGNoYW5nZSB3aWxsIGJlIGRlc2NyaWJlZCBpbiBjaGFuZ2VzIGFycmF5ICh1c2VmdWwgaW4gb25DaGFuZ2UgY2FsbGJhY2spLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ2hhbmdlUmVuZGVyXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNoYW5nZVxuICAgKi9cbiAgZnVuY3Rpb24gYXBwbHlDaGFuZ2VzKGNoYW5nZXMsIHNvdXJjZSkge1xuICAgIGxldCBpID0gY2hhbmdlcy5sZW5ndGggLSAxO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBza2lwVGhpc0NoYW5nZSA9IGZhbHNlO1xuICAgICAgaWYgKGNoYW5nZXNbaV0gPT09IG51bGwpIHtcbiAgICAgICAgY2hhbmdlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKChjaGFuZ2VzW2ldWzJdID09PSBudWxsIHx8IGNoYW5nZXNbaV1bMl0gPT09IHVuZGVmaW5lZCkgJiYgKGNoYW5nZXNbaV1bM10gPT09IG51bGwgfHwgY2hhbmdlc1tpXVszXSA9PT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YWJsZU1ldGEuYWxsb3dJbnNlcnRSb3cpIHtcbiAgICAgICAgd2hpbGUgKGNoYW5nZXNbaV1bMF0gPiBpbnN0YW5jZS5jb3VudFJvd3MoKSAtIDEpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBkZWx0YTogbnVtYmVyT2ZDcmVhdGVkUm93c1xuICAgICAgICAgIH0gPSBkYXRhbWFwLmNyZWF0ZVJvdyh1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKG51bWJlck9mQ3JlYXRlZFJvd3MgPT09IDApIHtcbiAgICAgICAgICAgIHNraXBUaGlzQ2hhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmRhdGFUeXBlID09PSAnYXJyYXknICYmICghdGFibGVNZXRhLmNvbHVtbnMgfHwgdGFibGVNZXRhLmNvbHVtbnMubGVuZ3RoID09PSAwKSAmJiB0YWJsZU1ldGEuYWxsb3dJbnNlcnRDb2x1bW4pIHtcbiAgICAgICAgd2hpbGUgKGRhdGFtYXAucHJvcFRvQ29sKGNoYW5nZXNbaV1bMV0pID4gaW5zdGFuY2UuY291bnRDb2xzKCkgLSAxKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZGVsdGE6IG51bWJlck9mQ3JlYXRlZENvbHVtbnNcbiAgICAgICAgICB9ID0gZGF0YW1hcC5jcmVhdGVDb2wodW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChudW1iZXJPZkNyZWF0ZWRDb2x1bW5zID09PSAwKSB7XG4gICAgICAgICAgICBza2lwVGhpc0NoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChza2lwVGhpc0NoYW5nZSkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGRhdGFtYXAuc2V0KGNoYW5nZXNbaV1bMF0sIGNoYW5nZXNbaV1bMV0sIGNoYW5nZXNbaV1bM10pO1xuICAgIH1cbiAgICBpbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlOyAvLyB1c2VkIHdoZW4gZGF0YSB3YXMgY2hhbmdlZFxuICAgIGdyaWQuYWRqdXN0Um93c0FuZENvbHMoKTtcbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnYmVmb3JlQ2hhbmdlUmVuZGVyJywgY2hhbmdlcywgc291cmNlKTtcbiAgICBlZGl0b3JNYW5hZ2VyLmNsb3NlRWRpdG9yKCk7XG4gICAgaW5zdGFuY2Uudmlldy5yZW5kZXIoKTtcbiAgICBlZGl0b3JNYW5hZ2VyLnByZXBhcmVFZGl0b3IoKTtcbiAgICBpbnN0YW5jZS52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlckNoYW5nZScsIGNoYW5nZXMsIHNvdXJjZSB8fCAnZWRpdCcpO1xuICAgIGNvbnN0IGFjdGl2ZUVkaXRvciA9IGluc3RhbmNlLmdldEFjdGl2ZUVkaXRvcigpO1xuICAgIGlmIChhY3RpdmVFZGl0b3IgJiYgKDAsIF9taXhlZC5pc0RlZmluZWQpKGFjdGl2ZUVkaXRvci5yZWZyZXNoVmFsdWUpKSB7XG4gICAgICBhY3RpdmVFZGl0b3IucmVmcmVzaFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIENlbGxDb29yZHMgb2JqZWN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIF9jcmVhdGVDZWxsQ29vcmRzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gaW5zdGFuY2Uudmlldy5fd3QuY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIENlbGxSYW5nZSBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gX2NyZWF0ZUNlbGxSYW5nZVxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGhpZ2hsaWdodCBEZWZpbmVzIHRoZSBib3JkZXIgYXJvdW5kIGEgY2VsbCB3aGVyZSBzZWxlY3Rpb24gd2FzIHN0YXJ0ZWQgYW5kIHRvIGVkaXQgdGhlIGNlbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB5b3UgcHJlc3MgRW50ZXIuIFRoZSBoaWdobGlnaHQgY2Fubm90IHBvaW50IHRvIGhlYWRlcnMgKG5lZ2F0aXZlIHZhbHVlcykuXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gZnJvbSBJbml0aWFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRvIEZpbmFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlfVxuICAgKi9cbiAgdGhpcy5fY3JlYXRlQ2VsbFJhbmdlID0gZnVuY3Rpb24gKGhpZ2hsaWdodCwgZnJvbSwgdG8pIHtcbiAgICByZXR1cm4gaW5zdGFuY2Uudmlldy5fd3QuY3JlYXRlQ2VsbFJhbmdlKGhpZ2hsaWdodCwgZnJvbSwgdG8pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIHNpbmdsZSBjZWxsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHZhbGlkYXRlQ2VsbFxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHZhbHVlIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgd2hpY2ggY29ycmVzcG9uZHMgd2l0aCB0aGUgdmFsdWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgdGhlIHZhbGlkYXRpb24uXG4gICAqL1xuICB0aGlzLnZhbGlkYXRlQ2VsbCA9IGZ1bmN0aW9uICh2YWx1ZSwgY2VsbFByb3BlcnRpZXMsIGNhbGxiYWNrLCBzb3VyY2UpIHtcbiAgICBsZXQgdmFsaWRhdG9yID0gaW5zdGFuY2UuZ2V0Q2VsbFZhbGlkYXRvcihjZWxsUHJvcGVydGllcyk7XG5cbiAgICAvLyB0aGUgYGNhbkJlVmFsaWRhdGVkID0gZmFsc2VgIGFyZ3VtZW50IHN1Z2dlc3RzLCB0aGF0IHRoZSBjZWxsIHBhc3NlcyB2YWxpZGF0aW9uIGJ5IGRlZmF1bHQuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAZnVuY3Rpb24gZG9uZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsaWQgSW5kaWNhdGVzIGlmIHRoZSB2YWxpZGF0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NhbkJlVmFsaWRhdGVkPXRydWVdIEZsYWcgd2hpY2ggY29udHJvbHMgdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBkb25lKHZhbGlkKSB7XG4gICAgICBsZXQgY2FuQmVWYWxpZGF0ZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgICAvLyBGaXhlcyBHSCMzOTAzXG4gICAgICBpZiAoIWNhbkJlVmFsaWRhdGVkIHx8IGNlbGxQcm9wZXJ0aWVzLmhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBjYWxsYmFjayh2YWxpZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbCA9IGNlbGxQcm9wZXJ0aWVzLnZpc3VhbENvbDtcbiAgICAgIGNvbnN0IHJvdyA9IGNlbGxQcm9wZXJ0aWVzLnZpc3VhbFJvdztcbiAgICAgIGNvbnN0IHRkID0gaW5zdGFuY2UuZ2V0Q2VsbChyb3csIGNvbCwgdHJ1ZSk7XG4gICAgICBpZiAodGQgJiYgdGQubm9kZU5hbWUgIT09ICdUSCcpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZVJvdyA9IGluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocm93KTtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZUNvbHVtbiA9IGluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY29sKTtcbiAgICAgICAgaW5zdGFuY2Uudmlldy5fd3QuZ2V0U2V0dGluZygnY2VsbFJlbmRlcmVyJywgcmVuZGVyYWJsZVJvdywgcmVuZGVyYWJsZUNvbHVtbiwgdGQpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2sodmFsaWQpO1xuICAgIH1cbiAgICBpZiAoKDAsIF9taXhlZC5pc1JlZ0V4cCkodmFsaWRhdG9yKSkge1xuICAgICAgdmFsaWRhdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjZWxsVmFsdWUsIHZhbGlkYXRvckNhbGxiYWNrKSB7XG4gICAgICAgICAgdmFsaWRhdG9yQ2FsbGJhY2soZXhwcmVzc2lvbi50ZXN0KGNlbGxWYWx1ZSkpO1xuICAgICAgICB9O1xuICAgICAgfSh2YWxpZGF0b3IpO1xuICAgIH1cbiAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKSh2YWxpZGF0b3IpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIHZhbHVlID0gaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVZhbGlkYXRlJywgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzLnZpc3VhbFJvdywgY2VsbFByb3BlcnRpZXMucHJvcCwgc291cmNlKTtcblxuICAgICAgLy8gVG8gcHJvdmlkZSBjb25zaXN0ZW50IGJlaGF2aW91ciwgdmFsaWRhdGlvbiBzaG91bGQgYmUgYWx3YXlzIGFzeW5jaHJvbm91c1xuICAgICAgaW5zdGFuY2UuX3JlZ2lzdGVySW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgdmFsaWRhdG9yLmNhbGwoY2VsbFByb3BlcnRpZXMsIHZhbHVlLCB2YWxpZCA9PiB7XG4gICAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICB2YWxpZCA9IGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclZhbGlkYXRlJywgdmFsaWQsIHZhbHVlLCBjZWxsUHJvcGVydGllcy52aXN1YWxSb3csIGNlbGxQcm9wZXJ0aWVzLnByb3AsIHNvdXJjZSk7XG4gICAgICAgICAgY2VsbFByb3BlcnRpZXMudmFsaWQgPSB2YWxpZDtcbiAgICAgICAgICBkb25lKHZhbGlkKTtcbiAgICAgICAgICBpbnN0YW5jZS5ydW5Ib29rcygncG9zdEFmdGVyVmFsaWRhdGUnLCB2YWxpZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzLnZpc3VhbFJvdywgY2VsbFByb3BlcnRpZXMucHJvcCwgc291cmNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVzb2x2ZSBjYWxsYmFjayBldmVuIGlmIHZhbGlkYXRvciBmdW5jdGlvbiB3YXMgbm90IGZvdW5kXG4gICAgICBpbnN0YW5jZS5fcmVnaXN0ZXJJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBjZWxsUHJvcGVydGllcy52YWxpZCA9IHRydWU7XG4gICAgICAgIGRvbmUoY2VsbFByb3BlcnRpZXMudmFsaWQsIGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHByb3BPckNvbCBUaGUgdmlzdWFsIHByb3Agb3IgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBjZWxsIHZhbHVlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmdW5jdGlvbiBzZXREYXRhSW5wdXRUb0FycmF5KHJvdywgcHJvcE9yQ29sLCB2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJvdykpIHtcbiAgICAgIC8vIGl0J3MgYW4gYXJyYXkgb2YgY2hhbmdlc1xuICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG4gICAgcmV0dXJuIFtbcm93LCBwcm9wT3JDb2wsIHZhbHVlXV07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBjaGFuZ2VzIHByZXBhcmVkIGZvciBhcHBseWluZyB0byB0aGUgZGF0YXNldCAodW5pZnlpbmcgbGlzdCBvZiBjaGFuZ2VzLCBjbG9zaW5nIGFuIGVkaXRvciAtIHdoZW4gbmVlZGVkLFxuICAgKiBjYWxsaW5nIGEgaG9vaykuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBjb2wsIHZhbHVlXSwuLi5dYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgaG93IHRoaXMgY2hhbmdlIHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBjaGFuZ2VzIGFycmF5ICh1c2VmdWwgaW4gYWZ0ZXJDaGFuZ2Ugb3IgYmVmb3JlQ2hhbmdlIGNhbGxiYWNrKS4gU2V0IHRvICdlZGl0JyBpZiBsZWZ0IGVtcHR5LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IExpc3Qgb2YgY2hhbmdlcyBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIGRhdGFzZXQuXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzQ2hhbmdlcyhjaGFuZ2VzLCBzb3VyY2UpIHtcbiAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSBpbnN0YW5jZS5nZXRBY3RpdmVFZGl0b3IoKTtcbiAgICBjb25zdCBiZWZvcmVDaGFuZ2VSZXN1bHQgPSBpbnN0YW5jZS5ydW5Ib29rcygnYmVmb3JlQ2hhbmdlJywgY2hhbmdlcywgc291cmNlIHx8ICdlZGl0Jyk7XG4gICAgLy8gVGhlIGBiZWZvcmVDaGFuZ2VgIGhvb2sgY291bGQgYWRkIGEgYG51bGxgIGZvciBwdXJwb3NlIG9mIGNhbmNlbGxpbmcgc29tZSBkYXRhc2V0J3MgY2hhbmdlLlxuICAgIGNvbnN0IGZpbHRlcmVkQ2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKGNoYW5nZSA9PiBjaGFuZ2UgIT09IG51bGwpO1xuICAgIGlmIChiZWZvcmVDaGFuZ2VSZXN1bHQgPT09IGZhbHNlIHx8IGZpbHRlcmVkQ2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChhY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgYWN0aXZlRWRpdG9yLmNhbmNlbENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkQ2hhbmdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0IG5ldyB2YWx1ZSB0byBhIGNlbGwuIFRvIGNoYW5nZSBtYW55IGNlbGxzIGF0IG9uY2UgKHJlY29tbWVuZGVkIHdheSksIHBhc3MgYW4gYXJyYXkgb2YgYGNoYW5nZXNgIGluIGZvcm1hdFxuICAgKiBgW1tyb3csIGNvbCwgdmFsdWVdLC4uLl1gIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBzZXREYXRhQXRDZWxsXG4gICAqIEBwYXJhbSB7bnVtYmVyfEFycmF5fSByb3cgVmlzdWFsIHJvdyBpbmRleCBvciBhcnJheSBvZiBjaGFuZ2VzIGluIGZvcm1hdCBgW1tyb3csIGNvbCwgdmFsdWVdLC4uLl1gLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbl0gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gTmV3IHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBob3cgdGhpcyBjaGFuZ2Ugd2lsbCBiZSBkZXNjcmliZWQgaW4gdGhlIGNoYW5nZXMgYXJyYXkgKHVzZWZ1bCBpbiBhZnRlckNoYW5nZSBvciBiZWZvcmVDaGFuZ2UgY2FsbGJhY2spLiBTZXQgdG8gJ2VkaXQnIGlmIGxlZnQgZW1wdHkuXG4gICAqL1xuICB0aGlzLnNldERhdGFBdENlbGwgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4sIHZhbHVlLCBzb3VyY2UpIHtcbiAgICBjb25zdCBpbnB1dCA9IHNldERhdGFJbnB1dFRvQXJyYXkocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICBjb25zdCBjaGFuZ2VzID0gW107XG4gICAgbGV0IGNoYW5nZVNvdXJjZSA9IHNvdXJjZTtcbiAgICBsZXQgaTtcbiAgICBsZXQgaWxlbjtcbiAgICBsZXQgcHJvcDtcbiAgICBmb3IgKGkgPSAwLCBpbGVuID0gaW5wdXQubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIGlucHV0W2ldICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBgc2V0RGF0YUF0Q2VsbGAgYWNjZXB0cyByb3cgbnVtYmVyIG9yIGNoYW5nZXMgYXJyYXkgb2YgYXJyYXlzIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgaW5wdXRbaV1bMV0gIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICAgIH1cbiAgICAgIGlmIChpbnB1dFtpXVsxXSA+PSB0aGlzLmNvdW50Q29scygpKSB7XG4gICAgICAgIHByb3AgPSBpbnB1dFtpXVsxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb3AgPSBkYXRhbWFwLmNvbFRvUHJvcChpbnB1dFtpXVsxXSk7XG4gICAgICB9XG4gICAgICBjaGFuZ2VzLnB1c2goW2lucHV0W2ldWzBdLCBwcm9wLCBkYXRhU291cmNlLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coaW5wdXRbaV1bMF0pLCBpbnB1dFtpXVsxXSksIGlucHV0W2ldWzJdXSk7XG4gICAgfVxuICAgIGlmICghY2hhbmdlU291cmNlICYmIHR5cGVvZiByb3cgPT09ICdvYmplY3QnKSB7XG4gICAgICBjaGFuZ2VTb3VyY2UgPSBjb2x1bW47XG4gICAgfVxuICAgIGNvbnN0IHByb2Nlc3NlZENoYW5nZXMgPSBwcm9jZXNzQ2hhbmdlcyhjaGFuZ2VzLCBzb3VyY2UpO1xuICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclNldERhdGFBdENlbGwnLCBwcm9jZXNzZWRDaGFuZ2VzLCBjaGFuZ2VTb3VyY2UpO1xuICAgIHZhbGlkYXRlQ2hhbmdlcyhwcm9jZXNzZWRDaGFuZ2VzLCBjaGFuZ2VTb3VyY2UsICgpID0+IHtcbiAgICAgIGFwcGx5Q2hhbmdlcyhwcm9jZXNzZWRDaGFuZ2VzLCBjaGFuZ2VTb3VyY2UpO1xuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogU2V0IG5ldyB2YWx1ZSB0byBhIGNlbGwuIFRvIGNoYW5nZSBtYW55IGNlbGxzIGF0IG9uY2UgKHJlY29tbWVuZGVkIHdheSksIHBhc3MgYW4gYXJyYXkgb2YgYGNoYW5nZXNgIGluIGZvcm1hdFxuICAgKiBgW1tyb3csIHByb3AsIHZhbHVlXSwuLi5dYCBhcyB0aGUgZmlyc3QgYXJndW1lbnQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gc2V0RGF0YUF0Um93UHJvcFxuICAgKiBAcGFyYW0ge251bWJlcnxBcnJheX0gcm93IFZpc3VhbCByb3cgaW5kZXggb3IgYXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBwcm9wLCB2YWx1ZV0sIC4uLl1gLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lIG9yIHRoZSBzb3VyY2Ugc3RyaW5nIChlLmcuIGAnZmlyc3QubmFtZSdgIG9yIGAnMCdgKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFZhbHVlIHRvIGJlIHNldC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgaG93IHRoaXMgY2hhbmdlIHdpbGwgYmUgZGVzY3JpYmVkIGluIGNoYW5nZXMgYXJyYXkgKHVzZWZ1bCBpbiBvbkNoYW5nZSBjYWxsYmFjaykuXG4gICAqL1xuICB0aGlzLnNldERhdGFBdFJvd1Byb3AgPSBmdW5jdGlvbiAocm93LCBwcm9wLCB2YWx1ZSwgc291cmNlKSB7XG4gICAgY29uc3QgaW5wdXQgPSBzZXREYXRhSW5wdXRUb0FycmF5KHJvdywgcHJvcCwgdmFsdWUpO1xuICAgIGNvbnN0IGNoYW5nZXMgPSBbXTtcbiAgICBsZXQgY2hhbmdlU291cmNlID0gc291cmNlO1xuICAgIGxldCBpO1xuICAgIGxldCBpbGVuO1xuICAgIGZvciAoaSA9IDAsIGlsZW4gPSBpbnB1dC5sZW5ndGg7IGkgPCBpbGVuOyBpKyspIHtcbiAgICAgIGNoYW5nZXMucHVzaChbaW5wdXRbaV1bMF0sIGlucHV0W2ldWzFdLCBkYXRhU291cmNlLmdldEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coaW5wdXRbaV1bMF0pLCBpbnB1dFtpXVsxXSksIGlucHV0W2ldWzJdXSk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogSSBkb24ndCB0aGluayBgcHJvcGAgc2hvdWxkIGJlIHVzZWQgYXMgYGNoYW5nZVNvdXJjZWAgaGVyZSwgYnV0IHJlbW92aW5nIGl0IHdvdWxkIGJlIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgIC8vIFdlIHNob3VsZCByZW1vdmUgaXQgd2l0aCB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuICAgIGlmICghY2hhbmdlU291cmNlICYmIHR5cGVvZiByb3cgPT09ICdvYmplY3QnKSB7XG4gICAgICBjaGFuZ2VTb3VyY2UgPSBwcm9wO1xuICAgIH1cbiAgICBjb25zdCBwcm9jZXNzZWRDaGFuZ2VzID0gcHJvY2Vzc0NoYW5nZXMoY2hhbmdlcywgc291cmNlKTtcbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJTZXREYXRhQXRSb3dQcm9wJywgcHJvY2Vzc2VkQ2hhbmdlcywgY2hhbmdlU291cmNlKTtcbiAgICB2YWxpZGF0ZUNoYW5nZXMocHJvY2Vzc2VkQ2hhbmdlcywgY2hhbmdlU291cmNlLCAoKSA9PiB7XG4gICAgICBhcHBseUNoYW5nZXMocHJvY2Vzc2VkQ2hhbmdlcywgY2hhbmdlU291cmNlKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBrZXlib2FyZCBpbnB1dCBvbiBkb2N1bWVudCBib2R5LiBUaGlzIGFsbG93cyBIYW5kc29udGFibGUgdG8gY2FwdHVyZSBrZXlib2FyZCBldmVudHMgYW5kIHJlc3BvbmRcbiAgICogaW4gdGhlIHJpZ2h0IHdheS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBsaXN0ZW5cbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyTGlzdGVuXG4gICAqL1xuICB0aGlzLmxpc3RlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW5zdGFuY2UgJiYgIWluc3RhbmNlLmlzTGlzdGVuaW5nKCkpIHtcbiAgICAgIGZvcmVpZ25Ib3RJbnN0YW5jZXMuZm9yRWFjaChmb3JlaWduSG90ID0+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBmb3JlaWduSG90KSB7XG4gICAgICAgICAgZm9yZWlnbkhvdC51bmxpc3RlbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFjdGl2ZUd1aWQgPSBpbnN0YW5jZS5ndWlkO1xuICAgICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyTGlzdGVuJyk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBTdG9wIGxpc3RlbmluZyB0byBrZXlib2FyZCBpbnB1dCBvbiB0aGUgZG9jdW1lbnQgYm9keS4gQ2FsbGluZyB0aGlzIG1ldGhvZCBtYWtlcyB0aGUgSGFuZHNvbnRhYmxlIGluYWN0aXZlIGZvclxuICAgKiBhbnkga2V5Ym9hcmQgZXZlbnRzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHVubGlzdGVuXG4gICAqL1xuICB0aGlzLnVubGlzdGVuID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzTGlzdGVuaW5nKCkpIHtcbiAgICAgIGFjdGl2ZUd1aWQgPSBudWxsO1xuICAgICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyVW5saXN0ZW4nKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBjdXJyZW50IEhhbmRzb250YWJsZSBpbnN0YW5jZSBpcyBsaXN0ZW5pbmcgdG8ga2V5Ym9hcmQgaW5wdXQgb24gZG9jdW1lbnQgYm9keS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBpc0xpc3RlbmluZ1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBpcyBsaXN0ZW5pbmcsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdGhpcy5pc0xpc3RlbmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYWN0aXZlR3VpZCA9PT0gaW5zdGFuY2UuZ3VpZDtcbiAgfTtcblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGN1cnJlbnQgZWRpdG9yLCByZW5kZXIgdGhlIHRhYmxlIGFuZCBwcmVwYXJlcyB0aGUgZWRpdG9yIG9mIHRoZSBuZXdseSBzZWxlY3RlZCBjZWxsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGRlc3Ryb3lFZGl0b3JcbiAgICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJ0T3JpZ2luYWw9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIHByZXZpb3VzIHZhbHVlIHdpbGwgYmUgcmVzdG9yZWQuIE90aGVyd2lzZSwgdGhlIGVkaXRlZCB2YWx1ZSB3aWxsIGJlIHNhdmVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwcmVwYXJlRWRpdG9ySWZOZWVkZWQ9dHJ1ZV0gSWYgYHRydWVgIHRoZSBlZGl0b3IgdW5kZXIgdGhlIHNlbGVjdGVkIGNlbGwgd2lsbCBiZSBwcmVwYXJlZCB0byBvcGVuLlxuICAgKi9cbiAgdGhpcy5kZXN0cm95RWRpdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCByZXZlcnRPcmlnaW5hbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgbGV0IHByZXBhcmVFZGl0b3JJZk5lZWRlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICBlZGl0b3JNYW5hZ2VyLmNsb3NlRWRpdG9yKHJldmVydE9yaWdpbmFsKTtcbiAgICBpbnN0YW5jZS52aWV3LnJlbmRlcigpO1xuICAgIGlmIChwcmVwYXJlRWRpdG9ySWZOZWVkZWQgJiYgc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgZWRpdG9yTWFuYWdlci5wcmVwYXJlRWRpdG9yKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZXMgY2VsbHMgYXQgcG9zaXRpb24gd2l0aCAyRCBpbnB1dCBhcnJheSAoZS5nLiBgW1sxLCAyXSwgWzMsIDRdXWApLiBVc2UgYGVuZFJvd2AsIGBlbmRDb2xgIHdoZW4geW91XG4gICAqIHdhbnQgdG8gY3V0IGlucHV0IHdoZW4gYSBjZXJ0YWluIHJvdyBpcyByZWFjaGVkLlxuICAgKlxuICAgKiBUaGUgYHBvcHVsYXRlRnJvbUFycmF5KClgIG1ldGhvZCBjYW4ndCBjaGFuZ2UgW2ByZWFkT25seWBdKEAvYXBpL29wdGlvbnMubWQjcmVhZG9ubHkpIGNlbGxzLlxuICAgKlxuICAgKiBPcHRpb25hbCBgbWV0aG9kYCBhcmd1bWVudCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHBhc3RlTW9kZSBvcHRpb24gKHNlZSB7QGxpbmsgT3B0aW9ucyNwYXN0ZU1vZGV9KS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBwb3B1bGF0ZUZyb21BcnJheVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFN0YXJ0IHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gU3RhcnQgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtBcnJheX0gaW5wdXQgMmQgYXJyYXkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kUm93XSBFbmQgdmlzdWFsIHJvdyBpbmRleCAodXNlIHdoZW4geW91IHdhbnQgdG8gY3V0IGlucHV0IHdoZW4gY2VydGFpbiByb3cgaXMgcmVhY2hlZCkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kQ29sXSBFbmQgdmlzdWFsIGNvbHVtbiBpbmRleCAodXNlIHdoZW4geW91IHdhbnQgdG8gY3V0IGlucHV0IHdoZW4gY2VydGFpbiBjb2x1bW4gaXMgcmVhY2hlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlPXBvcHVsYXRlRnJvbUFycmF5XSBVc2VkIHRvIGlkZW50aWZ5IHRoaXMgY2FsbCBpbiB0aGUgcmVzdWx0aW5nIGV2ZW50cyAoYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWV0aG9kPW92ZXJ3cml0ZV0gUG9wdWxhdGUgbWV0aG9kLCBwb3NzaWJsZSB2YWx1ZXM6IGAnc2hpZnRfZG93bidgLCBgJ3NoaWZ0X3JpZ2h0J2AsIGAnb3ZlcndyaXRlJ2AuXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfSBFbmRpbmcgdGQgaW4gcGFzdGVkIGFyZWEgKG9ubHkgaWYgYW55IGNlbGwgd2FzIGNoYW5nZWQpLlxuICAgKi9cbiAgdGhpcy5wb3B1bGF0ZUZyb21BcnJheSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgaW5wdXQsIGVuZFJvdywgZW5kQ29sLCBzb3VyY2UsIG1ldGhvZCkge1xuICAgIGlmICghKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGlucHV0WzBdID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBvZiBhcnJheXMnKTsgLy8gQVBJIGNoYW5nZWQgaW4gMC45LWJldGEyLCBsZXQncyBjaGVjayBpZiB5b3UgdXNlIGl0IGNvcnJlY3RseVxuICAgIH1cbiAgICBjb25zdCBjID0gdHlwZW9mIGVuZFJvdyA9PT0gJ251bWJlcicgPyBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhlbmRSb3csIGVuZENvbCkgOiBudWxsO1xuICAgIHJldHVybiBncmlkLnBvcHVsYXRlRnJvbUFycmF5KGluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKSwgaW5wdXQsIGMsIHNvdXJjZSwgbWV0aG9kKTtcbiAgfTtcblxuICAvKipcbiAgICogQWRkcy9yZW1vdmVzIGRhdGEgZnJvbSB0aGUgY29sdW1uLiBUaGlzIG1ldGhvZCB3b3JrcyB0aGUgc2FtZSBhcyBBcnJheS5zcGxpY2UgZm9yIGFycmF5cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBzcGxpY2VDb2xcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBJbmRleCBvZiB0aGUgY29sdW1uIGluIHdoaWNoIGRvIHlvdSB3YW50IHRvIGRvIHNwbGljZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIHN0YXJ0IGNoYW5naW5nIHRoZSBhcnJheS4gSWYgbmVnYXRpdmUsIHdpbGwgYmVnaW4gdGhhdCBtYW55IGVsZW1lbnRzIGZyb20gdGhlIGVuZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBvbGQgYXJyYXkgZWxlbWVudHMgdG8gcmVtb3ZlLiBJZiBhbW91bnQgaXMgMCwgbm8gZWxlbWVudHMgYXJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyfSBbZWxlbWVudHNdIFRoZSBlbGVtZW50cyB0byBhZGQgdG8gdGhlIGFycmF5LiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSBhbnkgZWxlbWVudHMsIHNwbGljZUNvbCBzaW1wbHkgcmVtb3ZlcyBlbGVtZW50cyBmcm9tIHRoZSBhcnJheS5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHJlbW92ZWQgcG9ydGlvbiBvZiBjb2x1bW5zLlxuICAgKi9cbiAgdGhpcy5zcGxpY2VDb2wgPSBmdW5jdGlvbiAoY29sdW1uLCBpbmRleCwgYW1vdW50KSB7XG4gICAgZm9yICh2YXIgX2xlbjE2ID0gYXJndW1lbnRzLmxlbmd0aCwgZWxlbWVudHMgPSBuZXcgQXJyYXkoX2xlbjE2ID4gMyA/IF9sZW4xNiAtIDMgOiAwKSwgX2tleTE2ID0gMzsgX2tleTE2IDwgX2xlbjE2OyBfa2V5MTYrKykge1xuICAgICAgZWxlbWVudHNbX2tleTE2IC0gM10gPSBhcmd1bWVudHNbX2tleTE2XTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFtYXAuc3BsaWNlQ29sKGNvbHVtbiwgaW5kZXgsIGFtb3VudCwgLi4uZWxlbWVudHMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzL3JlbW92ZXMgZGF0YSBmcm9tIHRoZSByb3cuIFRoaXMgbWV0aG9kIHdvcmtzIHRoZSBzYW1lIGFzIEFycmF5LnNwbGljZSBmb3IgYXJyYXlzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHNwbGljZVJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEluZGV4IG9mIGNvbHVtbiBpbiB3aGljaCBkbyB5b3Ugd2FudCB0byBkbyBzcGxpY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBzdGFydCBjaGFuZ2luZyB0aGUgYXJyYXkuIElmIG5lZ2F0aXZlLCB3aWxsIGJlZ2luIHRoYXQgbWFueSBlbGVtZW50cyBmcm9tIHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygb2xkIGFycmF5IGVsZW1lbnRzIHRvIHJlbW92ZS4gSWYgYW1vdW50IGlzIDAsIG5vIGVsZW1lbnRzIGFyZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gey4uLm51bWJlcn0gW2VsZW1lbnRzXSBUaGUgZWxlbWVudHMgdG8gYWRkIHRvIHRoZSBhcnJheS4gSWYgeW91IGRvbid0IHNwZWNpZnkgYW55IGVsZW1lbnRzLCBzcGxpY2VDb2wgc2ltcGx5IHJlbW92ZXMgZWxlbWVudHMgZnJvbSB0aGUgYXJyYXkuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyByZW1vdmVkIHBvcnRpb24gb2Ygcm93cy5cbiAgICovXG4gIHRoaXMuc3BsaWNlUm93ID0gZnVuY3Rpb24gKHJvdywgaW5kZXgsIGFtb3VudCkge1xuICAgIGZvciAodmFyIF9sZW4xNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGVsZW1lbnRzID0gbmV3IEFycmF5KF9sZW4xNyA+IDMgPyBfbGVuMTcgLSAzIDogMCksIF9rZXkxNyA9IDM7IF9rZXkxNyA8IF9sZW4xNzsgX2tleTE3KyspIHtcbiAgICAgIGVsZW1lbnRzW19rZXkxNyAtIDNdID0gYXJndW1lbnRzW19rZXkxN107XG4gICAgfVxuICAgIHJldHVybiBkYXRhbWFwLnNwbGljZVJvdyhyb3csIGluZGV4LCBhbW91bnQsIC4uLmVsZW1lbnRzKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBpbmRleGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2VsbHMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGBbW3N0YXJ0Um93LCBzdGFydENvbCwgZW5kUm93LCBlbmRDb2xdLC4uLl1gLlxuICAgKlxuICAgKiBTdGFydCByb3cgYW5kIHN0YXJ0IGNvbHVtbiBhcmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBhY3RpdmUgY2VsbCAod2hlcmUgdGhlIHNlbGVjdGlvbiB3YXMgc3RhcnRlZCkuXG4gICAqXG4gICAqIFRoZSB2ZXJzaW9uIDAuMzYuMCBhZGRzIGEgbm9uLWNvbnNlY3V0aXZlIHNlbGVjdGlvbiBmZWF0dXJlLiBTaW5jZSB0aGlzIHZlcnNpb24sIHRoZSBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBhcnJheXMuXG4gICAqIEFkZGl0aW9uYWxseSB0byBjb2xsZWN0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGFyZWEgKGFzIGl0IHdhcyBwcmV2aW91c2x5IGRvbmUgYnkgdGhlIG1ldGhvZClcbiAgICogeW91IG5lZWQgdG8gdXNlIGBnZXRTZWxlY3RlZExhc3RgIG1ldGhvZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRTZWxlY3RlZFxuICAgKiBAcmV0dXJucyB7QXJyYXlbXXx1bmRlZmluZWR9IEFuIGFycmF5IG9mIGFycmF5cyBvZiB0aGUgc2VsZWN0aW9uJ3MgY29vcmRpbmF0ZXMuXG4gICAqL1xuICB0aGlzLmdldFNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL2lzc3Vlcy80NCAgLy9jamxcbiAgICBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlNYXApKHNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksIF9yZWY3ID0+IHtcbiAgICAgICAgbGV0IHtcbiAgICAgICAgICBmcm9tLFxuICAgICAgICAgIHRvXG4gICAgICAgIH0gPSBfcmVmNztcbiAgICAgICAgcmV0dXJuIFtmcm9tLnJvdywgZnJvbS5jb2wsIHRvLnJvdywgdG8uY29sXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBjb29yZGluYXRlcyBhcHBsaWVkIHRvIHRoZSB0YWJsZSBhcyBhIGFuIGFycmF5IGBbc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbF1gLlxuICAgKlxuICAgKiBAc2luY2UgMC4zNi4wXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0U2VsZWN0ZWRMYXN0XG4gICAqIEByZXR1cm5zIHtBcnJheXx1bmRlZmluZWR9IEFuIGFycmF5IG9mIHRoZSBzZWxlY3Rpb24ncyBjb29yZGluYXRlcy5cbiAgICovXG4gIHRoaXMuZ2V0U2VsZWN0ZWRMYXN0ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZCgpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHNlbGVjdGVkICYmIHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkW3NlbGVjdGVkLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5cbiAgICpcbiAgICogVGhlIHZlcnNpb24gMC4zNi4wIGFkZHMgYSBub24tY29uc2VjdXRpdmUgc2VsZWN0aW9uIGZlYXR1cmUuIFNpbmNlIHRoaXMgdmVyc2lvbiwgdGhlIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGFycmF5cy5cbiAgICogQWRkaXRpb25hbGx5IHRvIGNvbGxlY3QgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYXJlYSAoYXMgaXQgd2FzIHByZXZpb3VzbHkgZG9uZSBieSB0aGUgbWV0aG9kKVxuICAgKiB5b3UgbmVlZCB0byB1c2UgYGdldFNlbGVjdGVkUmFuZ2VMYXN0YCBtZXRob2QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0U2VsZWN0ZWRSYW5nZVxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlW118dW5kZWZpbmVkfSBTZWxlY3RlZCByYW5nZSBvYmplY3Qgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbi5cbiAgICovXG4gIHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9pc3N1ZXMvNDQgIC8vY2psXG4gICAgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKHNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCkpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBjb29yZGluYXRlcyBhcHBsaWVkIHRvIHRoZSB0YWJsZSBhcyBhIENlbGxSYW5nZSBvYmplY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0U2VsZWN0ZWRSYW5nZUxhc3RcbiAgICogQHNpbmNlIDAuMzYuMFxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlfHVuZGVmaW5lZH0gU2VsZWN0ZWQgcmFuZ2Ugb2JqZWN0IG9yIHVuZGVmaW5lZGAgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLlxuICAgKi9cbiAgdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZSAmJiBzZWxlY3RlZFJhbmdlLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2Vbc2VsZWN0ZWRSYW5nZS5sZW5ndGggLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogRXJhc2VzIGNvbnRlbnQgZnJvbSBjZWxscyB0aGF0IGhhdmUgYmVlbiBzZWxlY3RlZCBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZW1wdHlTZWxlY3RlZENlbGxzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIGhvdyB0aGlzIGNoYW5nZSB3aWxsIGJlIGRlc2NyaWJlZCBpbiB0aGUgY2hhbmdlcyBhcnJheSAodXNlZnVsIGluIGFmdGVyQ2hhbmdlIG9yIGJlZm9yZUNoYW5nZSBjYWxsYmFjaykuIFNldCB0byAnZWRpdCcgaWYgbGVmdCBlbXB0eS5cbiAgICogQHNpbmNlIDAuMzYuMFxuICAgKi9cbiAgdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgaWYgKCFzZWxlY3Rpb24uaXNTZWxlY3RlZCgpIHx8IHRoaXMuY291bnRSb3dzKCkgPT09IDAgfHwgdGhpcy5jb3VudENvbHMoKSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGFuZ2VzID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksIGNlbGxSYW5nZSA9PiB7XG4gICAgICBpZiAoY2VsbFJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdG9wU3RhcnQgPSBjZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IGJvdHRvbUVuZCA9IGNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkodG9wU3RhcnQucm93LCBib3R0b21FbmQucm93LCByb3cgPT4ge1xuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHRvcFN0YXJ0LmNvbCwgYm90dG9tRW5kLmNvbCwgY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2x1bW4pLnJlYWRPbmx5KSB7XG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goW3JvdywgY29sdW1uLCBudWxsXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2V0RGF0YUF0Q2VsbChjaGFuZ2VzLCBzb3VyY2UpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB0YWJsZSByZW5kZXJpbmcgcHJvY2VzcyB3YXMgc3VzcGVuZGVkLiBTZWUgZXhwbGFuYXRpb24gaW4ge0BsaW5rIENvcmUjc3VzcGVuZFJlbmRlcn0uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaXNSZW5kZXJTdXNwZW5kZWRcbiAgICogQHNpbmNlIDguMy4wXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdGhpcy5pc1JlbmRlclN1c3BlbmRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyID4gMDtcbiAgfTtcblxuICAvKipcbiAgICogU3VzcGVuZHMgdGhlIHJlbmRlcmluZyBwcm9jZXNzLiBJdCdzIGhlbHBmdWwgdG8gd3JhcCB0aGUgdGFibGUgcmVuZGVyXG4gICAqIGN5Y2xlcyB0cmlnZ2VyZWQgYnkgQVBJIGNhbGxzIG9yIFVJIGFjdGlvbnMgKG9yIGJvdGgpIGFuZCBjYWxsIHRoZSBcInJlbmRlclwiXG4gICAqIG9uY2UgaW4gdGhlIGVuZC4gQXMgYSByZXN1bHQsIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiB3cmFwcGVkIG9wZXJhdGlvbnMuXG4gICAqIFdoZW4gdGhlIHRhYmxlIGlzIGluIHRoZSBzdXNwZW5kIHN0YXRlLCBtb3N0IG9wZXJhdGlvbnMgd2lsbCBoYXZlIG5vIHZpc3VhbFxuICAgKiBlZmZlY3QgdW50aWwgdGhlIHJlbmRlcmluZyBzdGF0ZSBpcyByZXN1bWVkLiBSZXN1bWluZyB0aGUgc3RhdGUgYXV0b21hdGljYWxseVxuICAgKiBpbnZva2VzIHRoZSB0YWJsZSByZW5kZXJpbmcuIFRvIG1ha2Ugc3VyZSB0aGF0IGFmdGVyIGV4ZWN1dGluZyBhbGwgb3BlcmF0aW9ucyxcbiAgICogdGhlIHRhYmxlIHdpbGwgYmUgcmVuZGVyZWQsIGl0J3MgaGlnaGx5IHJlY29tbWVuZGVkIHRvIHVzZSB0aGUge0BsaW5rIENvcmUjYmF0Y2hSZW5kZXJ9XG4gICAqIG1ldGhvZCBvciB7QGxpbmsgQ29yZSNiYXRjaH0sIHdoaWNoIGFkZGl0aW9uYWxseSBhZ2dyZWdhdGVzIHRoZSBsb2dpYyBleGVjdXRpb25cbiAgICogdGhhdCBoYXBwZW5zIGJlaGluZCB0aGUgdGFibGUuXG4gICAqXG4gICAqIFRoZSBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhZHZhbmNlZCB1c2Vycy4gU3VzcGVuZGluZyB0aGUgcmVuZGVyaW5nXG4gICAqIHByb2Nlc3MgY291bGQgY2F1c2UgdmlzdWFsIGdsaXRjaGVzIHdoZW4gd3JvbmdseSBpbXBsZW1lbnRlZC5cbiAgICpcbiAgICogRXZlcnkgW2BzdXNwZW5kUmVuZGVyKClgXShAL2FwaS9jb3JlLm1kI3N1c3BlbmRyZW5kZXIpIGNhbGwgbmVlZHMgdG8gY29ycmVzcG9uZCB3aXRoIG9uZSBbYHJlc3VtZVJlbmRlcigpYF0oQC9hcGkvY29yZS5tZCNyZXN1bWVyZW5kZXIpIGNhbGwuXG4gICAqIEZvciBleGFtcGxlLCBpZiB5b3UgY2FsbCBbYHN1c3BlbmRSZW5kZXIoKWBdKEAvYXBpL2NvcmUubWQjc3VzcGVuZHJlbmRlcikgNSB0aW1lcywgeW91IG5lZWQgdG8gY2FsbCBbYHJlc3VtZVJlbmRlcigpYF0oQC9hcGkvY29yZS5tZCNyZXN1bWVyZW5kZXIpIDUgdGltZXMgYXMgd2VsbC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBzdXNwZW5kUmVuZGVyXG4gICAqIEBzaW5jZSA4LjMuMFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBob3Quc3VzcGVuZFJlbmRlcigpO1xuICAgKiBob3QuYWx0ZXIoJ2luc2VydF9yb3dfYWJvdmUnLCA1LCA0NSk7XG4gICAqIGhvdC5hbHRlcignaW5zZXJ0X2NvbF9zdGFydCcsIDEwLCA0MCk7XG4gICAqIGhvdC5zZXREYXRhQXRDZWxsKDEsIDEsICdKb2huJyk7XG4gICAqIGhvdC5zZXREYXRhQXRDZWxsKDIsIDIsICdNYXJrJyk7XG4gICAqIGhvdC5zZXREYXRhQXRDZWxsKDMsIDMsICdBbm4nKTtcbiAgICogaG90LnNldERhdGFBdENlbGwoNCwgNCwgJ1NvcGhpYScpO1xuICAgKiBob3Quc2V0RGF0YUF0Q2VsbCg1LCA1LCAnTWlhJyk7XG4gICAqIGhvdC5zZWxlY3RDZWxsKDAsIDApO1xuICAgKiBob3QucmVzdW1lUmVuZGVyKCk7IC8vIEl0IHJlLXJlbmRlcnMgdGhlIHRhYmxlIGludGVybmFsbHlcbiAgICogYGBgXG4gICAqL1xuICB0aGlzLnN1c3BlbmRSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyICs9IDE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlc3VtZXMgdGhlIHJlbmRlcmluZyBwcm9jZXNzLiBJbiBjb21iaW5hdGlvbiB3aXRoIHRoZSB7QGxpbmsgQ29yZSNzdXNwZW5kUmVuZGVyfVxuICAgKiBtZXRob2QgaXQgYWxsb3dzIGFnZ3JlZ2F0aW5nIHRoZSB0YWJsZSByZW5kZXIgY3ljbGVzIHRyaWdnZXJlZCBieSBBUEkgY2FsbHMgb3IgVUlcbiAgICogYWN0aW9ucyAob3IgYm90aCkgYW5kIGNhbGxzIHRoZSBcInJlbmRlclwiIG9uY2UgaW4gdGhlIGVuZC4gV2hlbiB0aGUgdGFibGUgaXMgaW5cbiAgICogdGhlIHN1c3BlbmQgc3RhdGUsIG1vc3Qgb3BlcmF0aW9ucyB3aWxsIGhhdmUgbm8gdmlzdWFsIGVmZmVjdCB1bnRpbCB0aGUgcmVuZGVyaW5nXG4gICAqIHN0YXRlIGlzIHJlc3VtZWQuIFJlc3VtaW5nIHRoZSBzdGF0ZSBhdXRvbWF0aWNhbGx5IGludm9rZXMgdGhlIHRhYmxlIHJlbmRlcmluZy5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGFkdmFuY2VkIHVzZXJzLiBTdXNwZW5kaW5nIHRoZSByZW5kZXJpbmdcbiAgICogcHJvY2VzcyBjb3VsZCBjYXVzZSB2aXN1YWwgZ2xpdGNoZXMgd2hlbiB3cm9uZ2x5IGltcGxlbWVudGVkLlxuICAgKlxuICAgKiBFdmVyeSBbYHN1c3BlbmRSZW5kZXIoKWBdKEAvYXBpL2NvcmUubWQjc3VzcGVuZHJlbmRlcikgY2FsbCBuZWVkcyB0byBjb3JyZXNwb25kIHdpdGggb25lIFtgcmVzdW1lUmVuZGVyKClgXShAL2FwaS9jb3JlLm1kI3Jlc3VtZXJlbmRlcikgY2FsbC5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBjYWxsIFtgc3VzcGVuZFJlbmRlcigpYF0oQC9hcGkvY29yZS5tZCNzdXNwZW5kcmVuZGVyKSA1IHRpbWVzLCB5b3UgbmVlZCB0byBjYWxsIFtgcmVzdW1lUmVuZGVyKClgXShAL2FwaS9jb3JlLm1kI3Jlc3VtZXJlbmRlcikgNSB0aW1lcyBhcyB3ZWxsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHJlc3VtZVJlbmRlclxuICAgKiBAc2luY2UgOC4zLjBcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LnN1c3BlbmRSZW5kZXIoKTtcbiAgICogaG90LmFsdGVyKCdpbnNlcnRfcm93X2Fib3ZlJywgNSwgNDUpO1xuICAgKiBob3QuYWx0ZXIoJ2luc2VydF9jb2xfc3RhcnQnLCAxMCwgNDApO1xuICAgKiBob3Quc2V0RGF0YUF0Q2VsbCgxLCAxLCAnSm9obicpO1xuICAgKiBob3Quc2V0RGF0YUF0Q2VsbCgyLCAyLCAnTWFyaycpO1xuICAgKiBob3Quc2V0RGF0YUF0Q2VsbCgzLCAzLCAnQW5uJyk7XG4gICAqIGhvdC5zZXREYXRhQXRDZWxsKDQsIDQsICdTb3BoaWEnKTtcbiAgICogaG90LnNldERhdGFBdENlbGwoNSwgNSwgJ01pYScpO1xuICAgKiBob3Quc2VsZWN0Q2VsbCgwLCAwKTtcbiAgICogaG90LnJlc3VtZVJlbmRlcigpOyAvLyBJdCByZS1yZW5kZXJzIHRoZSB0YWJsZSBpbnRlcm5hbGx5XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5yZXN1bWVSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyIC0gMTtcbiAgICB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIgPSBNYXRoLm1heChuZXh0VmFsdWUsIDApO1xuICAgIGlmICghdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpICYmIG5leHRWYWx1ZSA9PT0gdGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKSB7XG4gICAgICBpZiAodGhpcy5yZW5kZXJDYWxsKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZS52aWV3LnJlbmRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVyZW5kZXIgdGhlIHRhYmxlLiBDYWxsaW5nIHRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgcHJvY2VzcyBvZiByZWNhbGN1bGF0aW5nLCByZWRyYXdpbmcgYW5kIGFwcGx5aW5nIHRoZSBjaGFuZ2VzXG4gICAqIHRvIHRoZSBET00uIFdoaWxlIHJlbmRlcmluZyB0aGUgdGFibGUgYWxsIGNlbGwgcmVuZGVyZXJzIGFyZSByZWNhbGxlZC5cbiAgICpcbiAgICogQ2FsbGluZyB0aGlzIG1ldGhvZCBtYW51YWxseSBpcyBub3QgcmVjb21tZW5kZWQuIEhhbmRzb250YWJsZSB0cmllcyB0byByZW5kZXIgaXRzZWxmIGJ5IGNob29zaW5nIHRoZSBtb3N0XG4gICAqIG9wdGltYWwgbW9tZW50cyBpbiBpdHMgbGlmZWN5Y2xlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHJlbmRlclxuICAgKi9cbiAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudmlldykge1xuICAgICAgdGhpcy5yZW5kZXJDYWxsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZm9yY2VGdWxsUmVuZGVyID0gdHJ1ZTsgLy8gdXNlZCB3aGVuIGRhdGEgd2FzIGNoYW5nZWRcblxuICAgICAgaWYgKCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkpIHtcbiAgICAgICAgaW5zdGFuY2Uudmlldy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgYWdncmVnYXRlcyBtdWx0aS1saW5lIEFQSSBjYWxscyBpbnRvIGEgY2FsbGJhY2sgYW5kIHBvc3Rwb25lcyB0aGVcbiAgICogdGFibGUgcmVuZGVyaW5nIHByb2Nlc3MuIEFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIG9wZXJhdGlvbnMsIHRoZSB0YWJsZSBpc1xuICAgKiByZW5kZXJlZCBvbmNlLiBBcyBhIHJlc3VsdCwgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHdyYXBwZWQgb3BlcmF0aW9ucy5cbiAgICogV2l0aG91dCBiYXRjaGluZywgYSBzaW1pbGFyIGNhc2UgY291bGQgdHJpZ2dlciBtdWx0aXBsZSB0YWJsZSByZW5kZXIgY2FsbHMuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gYmF0Y2hSZW5kZXJcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlZE9wZXJhdGlvbnMgQmF0Y2hlZCBvcGVyYXRpb25zIHdyYXBwZWQgaW4gYSBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgcmVzdWx0IGZyb20gdGhlIHdyYXBwZWRPcGVyYXRpb25zIGNhbGxiYWNrLlxuICAgKiBAc2luY2UgOC4zLjBcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LmJhdGNoUmVuZGVyKCgpID0+IHtcbiAgICogICBob3QuYWx0ZXIoJ2luc2VydF9yb3dfYWJvdmUnLCA1LCA0NSk7XG4gICAqICAgaG90LmFsdGVyKCdpbnNlcnRfY29sX3N0YXJ0JywgMTAsIDQwKTtcbiAgICogICBob3Quc2V0RGF0YUF0Q2VsbCgxLCAxLCAnSm9obicpO1xuICAgKiAgIGhvdC5zZXREYXRhQXRDZWxsKDIsIDIsICdNYXJrJyk7XG4gICAqICAgaG90LnNldERhdGFBdENlbGwoMywgMywgJ0FubicpO1xuICAgKiAgIGhvdC5zZXREYXRhQXRDZWxsKDQsIDQsICdTb3BoaWEnKTtcbiAgICogICBob3Quc2V0RGF0YUF0Q2VsbCg1LCA1LCAnTWlhJyk7XG4gICAqICAgaG90LnNlbGVjdENlbGwoMCwgMCk7XG4gICAqICAgLy8gVGhlIHRhYmxlIHdpbGwgYmUgcmVuZGVyZWQgb25jZSBhZnRlciBleGVjdXRpbmcgdGhlIGNhbGxiYWNrXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuYmF0Y2hSZW5kZXIgPSBmdW5jdGlvbiAod3JhcHBlZE9wZXJhdGlvbnMpIHtcbiAgICB0aGlzLnN1c3BlbmRSZW5kZXIoKTtcbiAgICBjb25zdCByZXN1bHQgPSB3cmFwcGVkT3BlcmF0aW9ucygpO1xuICAgIHRoaXMucmVzdW1lUmVuZGVyKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSB0YWJsZSBpbmRleGVzIHJlY2FsY3VsYXRpb24gcHJvY2VzcyB3YXMgc3VzcGVuZGVkLiBTZWUgZXhwbGFuYXRpb25cbiAgICogaW4ge0BsaW5rIENvcmUjc3VzcGVuZEV4ZWN1dGlvbn0uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaXNFeGVjdXRpb25TdXNwZW5kZWRcbiAgICogQHNpbmNlIDguMy4wXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyID4gMDtcbiAgfTtcblxuICAvKipcbiAgICogU3VzcGVuZHMgdGhlIGV4ZWN1dGlvbiBwcm9jZXNzLiBJdCdzIGhlbHBmdWwgdG8gd3JhcCB0aGUgdGFibGUgbG9naWMgY2hhbmdlc1xuICAgKiBzdWNoIGFzIGluZGV4IGNoYW5nZXMgaW50byBvbmUgY2FsbCBhZnRlciB3aGljaCB0aGUgY2FjaGUgaXMgdXBkYXRlZC4gQXMgYSByZXN1bHQsXG4gICAqIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiB3cmFwcGVkIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIFRoZSBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBhZHZhbmNlZCB1c2Vycy4gU3VzcGVuZGluZyB0aGUgZXhlY3V0aW9uXG4gICAqIHByb2Nlc3MgY291bGQgY2F1c2UgdmlzdWFsIGdsaXRjaGVzIGNhdXNlZCBieSBub3QgdXBkYXRlZCB0aGUgaW50ZXJuYWwgdGFibGUgY2FjaGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gc3VzcGVuZEV4ZWN1dGlvblxuICAgKiBAc2luY2UgOC4zLjBcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LnN1c3BlbmRFeGVjdXRpb24oKTtcbiAgICogY29uc3QgZmlsdGVycyA9IGhvdC5nZXRQbHVnaW4oJ2ZpbHRlcnMnKTtcbiAgICpcbiAgICogZmlsdGVycy5hZGRDb25kaXRpb24oMiwgJ2NvbnRhaW5zJywgWyczJ10pO1xuICAgKiBmaWx0ZXJzLmZpbHRlcigpO1xuICAgKiBob3QuZ2V0UGx1Z2luKCdjb2x1bW5Tb3J0aW5nJykuc29ydCh7IGNvbHVtbjogMSwgc29ydE9yZGVyOiAnZGVzYycgfSk7XG4gICAqIGhvdC5yZXN1bWVFeGVjdXRpb24oKTsgLy8gSXQgdXBkYXRlcyB0aGUgY2FjaGUgaW50ZXJuYWxseVxuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuc3VzcGVuZEV4ZWN1dGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIgKz0gMTtcbiAgICB0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBleGVjdXRpb24gcHJvY2Vzcy4gSW4gY29tYmluYXRpb24gd2l0aCB0aGUge0BsaW5rIENvcmUjc3VzcGVuZEV4ZWN1dGlvbn1cbiAgICogbWV0aG9kIGl0IGFsbG93cyBhZ2dyZWdhdGluZyB0aGUgdGFibGUgbG9naWMgY2hhbmdlcyBhZnRlciB3aGljaCB0aGUgY2FjaGUgaXNcbiAgICogdXBkYXRlZC4gUmVzdW1pbmcgdGhlIHN0YXRlIGF1dG9tYXRpY2FsbHkgaW52b2tlcyB0aGUgdGFibGUgY2FjaGUgdXBkYXRpbmcgcHJvY2Vzcy5cbiAgICpcbiAgICogVGhlIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IGFkdmFuY2VkIHVzZXJzLiBTdXNwZW5kaW5nIHRoZSBleGVjdXRpb25cbiAgICogcHJvY2VzcyBjb3VsZCBjYXVzZSB2aXN1YWwgZ2xpdGNoZXMgY2F1c2VkIGJ5IG5vdCB1cGRhdGVkIHRoZSBpbnRlcm5hbCB0YWJsZSBjYWNoZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiByZXN1bWVFeGVjdXRpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VGbHVzaENoYW5nZXM9ZmFsc2VdIElmIGB0cnVlYCwgdGhlIHRhYmxlIGludGVybmFsIGRhdGEgY2FjaGVcbiAgICogaXMgcmVjYWxjdWxhdGVkIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIGJhdGNoZWQgb3BlcmF0aW9ucy4gRm9yIG5lc3RlZFxuICAgKiB7QGxpbmsgQ29yZSNiYXRjaEV4ZWN1dGlvbn0gY2FsbHMsIGl0IGNhbiBiZSBkZXNpcmUgdG8gcmVjYWxjdWxhdGUgdGhlIHRhYmxlXG4gICAqIGFmdGVyIGVhY2ggYmF0Y2guXG4gICAqIEBzaW5jZSA4LjMuMFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBob3Quc3VzcGVuZEV4ZWN1dGlvbigpO1xuICAgKiBjb25zdCBmaWx0ZXJzID0gaG90LmdldFBsdWdpbignZmlsdGVycycpO1xuICAgKlxuICAgKiBmaWx0ZXJzLmFkZENvbmRpdGlvbigyLCAnY29udGFpbnMnLCBbJzMnXSk7XG4gICAqIGZpbHRlcnMuZmlsdGVyKCk7XG4gICAqIGhvdC5nZXRQbHVnaW4oJ2NvbHVtblNvcnRpbmcnKS5zb3J0KHsgY29sdW1uOiAxLCBzb3J0T3JkZXI6ICdkZXNjJyB9KTtcbiAgICogaG90LnJlc3VtZUV4ZWN1dGlvbigpOyAvLyBJdCB1cGRhdGVzIHRoZSBjYWNoZSBpbnRlcm5hbGx5XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5yZXN1bWVFeGVjdXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IGZvcmNlRmx1c2hDaGFuZ2VzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIgLSAxO1xuICAgIHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlciA9IE1hdGgubWF4KG5leHRWYWx1ZSwgMCk7XG4gICAgaWYgKCF0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkKCkgJiYgbmV4dFZhbHVlID09PSB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXIgfHwgZm9yY2VGbHVzaENoYW5nZXMpIHtcbiAgICAgIHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpO1xuICAgICAgdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGFnZ3JlZ2F0ZXMgbXVsdGktbGluZSBBUEkgY2FsbHMgaW50byBhIGNhbGxiYWNrIGFuZCBwb3N0cG9uZXMgdGhlXG4gICAqIHRhYmxlIGV4ZWN1dGlvbiBwcm9jZXNzLiBBZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBvcGVyYXRpb25zLCB0aGUgaW50ZXJuYWwgdGFibGVcbiAgICogY2FjaGUgaXMgcmVjYWxjdWxhdGVkIG9uY2UuIEFzIGEgcmVzdWx0LCBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2Ygd3JhcHBlZFxuICAgKiBvcGVyYXRpb25zLiBXaXRob3V0IGJhdGNoaW5nLCBhIHNpbWlsYXIgY2FzZSBjb3VsZCB0cmlnZ2VyIG11bHRpcGxlIHRhYmxlIGNhY2hlIHJlYnVpbGRzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGJhdGNoRXhlY3V0aW9uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZWRPcGVyYXRpb25zIEJhdGNoZWQgb3BlcmF0aW9ucyB3cmFwcGVkIGluIGEgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlRmx1c2hDaGFuZ2VzPWZhbHNlXSBJZiBgdHJ1ZWAsIHRoZSB0YWJsZSBpbnRlcm5hbCBkYXRhIGNhY2hlXG4gICAqIGlzIHJlY2FsY3VsYXRlZCBhZnRlciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBiYXRjaGVkIG9wZXJhdGlvbnMuIEZvciBuZXN0ZWQgY2FsbHMsXG4gICAqIGl0IGNhbiBiZSBhIGRlc2lyZSB0byByZWNhbGN1bGF0ZSB0aGUgdGFibGUgYWZ0ZXIgZWFjaCBiYXRjaC5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgcmVzdWx0IGZyb20gdGhlIHdyYXBwZWRPcGVyYXRpb25zIGNhbGxiYWNrLlxuICAgKiBAc2luY2UgOC4zLjBcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LmJhdGNoRXhlY3V0aW9uKCgpID0+IHtcbiAgICogICBjb25zdCBmaWx0ZXJzID0gaG90LmdldFBsdWdpbignZmlsdGVycycpO1xuICAgKlxuICAgKiAgIGZpbHRlcnMuYWRkQ29uZGl0aW9uKDIsICdjb250YWlucycsIFsnMyddKTtcbiAgICogICBmaWx0ZXJzLmZpbHRlcigpO1xuICAgKiAgIGhvdC5nZXRQbHVnaW4oJ2NvbHVtblNvcnRpbmcnKS5zb3J0KHsgY29sdW1uOiAxLCBzb3J0T3JkZXI6ICdkZXNjJyB9KTtcbiAgICogICAvLyBUaGUgdGFibGUgY2FjaGUgd2lsbCBiZSByZWNhbGN1bGF0ZWQgb25jZSBhZnRlciBleGVjdXRpbmcgdGhlIGNhbGxiYWNrXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuYmF0Y2hFeGVjdXRpb24gPSBmdW5jdGlvbiAod3JhcHBlZE9wZXJhdGlvbnMpIHtcbiAgICBsZXQgZm9yY2VGbHVzaENoYW5nZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHdyYXBwZWRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5yZXN1bWVFeGVjdXRpb24oZm9yY2VGbHVzaENoYW5nZXMpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIEl0IGJhdGNoZXMgdGhlIHJlbmRlcmluZyBwcm9jZXNzIGFuZCBpbmRleCByZWNhbGN1bGF0aW9ucy4gVGhlIG1ldGhvZCBhZ2dyZWdhdGVzXG4gICAqIG11bHRpLWxpbmUgQVBJIGNhbGxzIGludG8gYSBjYWxsYmFjayBhbmQgcG9zdHBvbmVzIHRoZSB0YWJsZSByZW5kZXJpbmcgcHJvY2Vzc1xuICAgKiBhcyB3ZWxsIGFnZ3JlZ2F0ZXMgdGhlIHRhYmxlIGxvZ2ljIGNoYW5nZXMgc3VjaCBhcyBpbmRleCBjaGFuZ2VzIGludG8gb25lIGNhbGxcbiAgICogYWZ0ZXIgd2hpY2ggdGhlIGNhY2hlIGlzIHVwZGF0ZWQuIEFmdGVyIHRoZSBleGVjdXRpb24gb2YgdGhlIG9wZXJhdGlvbnMsIHRoZVxuICAgKiB0YWJsZSBpcyByZW5kZXJlZCwgYW5kIHRoZSBjYWNoZSBpcyB1cGRhdGVkIG9uY2UuIEFzIGEgcmVzdWx0LCBpdCBpbXByb3ZlcyB0aGVcbiAgICogcGVyZm9ybWFuY2Ugb2Ygd3JhcHBlZCBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGJhdGNoXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZWRPcGVyYXRpb25zIEJhdGNoZWQgb3BlcmF0aW9ucyB3cmFwcGVkIGluIGEgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHJlc3VsdCBmcm9tIHRoZSB3cmFwcGVkT3BlcmF0aW9ucyBjYWxsYmFjay5cbiAgICogQHNpbmNlIDguMy4wXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGhvdC5iYXRjaCgoKSA9PiB7XG4gICAqICAgaG90LmFsdGVyKCdpbnNlcnRfcm93X2Fib3ZlJywgNSwgNDUpO1xuICAgKiAgIGhvdC5hbHRlcignaW5zZXJ0X2NvbF9zdGFydCcsIDEwLCA0MCk7XG4gICAqICAgaG90LnNldERhdGFBdENlbGwoMSwgMSwgJ3gnKTtcbiAgICogICBob3Quc2V0RGF0YUF0Q2VsbCgyLCAyLCAnYycpO1xuICAgKiAgIGhvdC5zZXREYXRhQXRDZWxsKDMsIDMsICd2Jyk7XG4gICAqICAgaG90LnNldERhdGFBdENlbGwoNCwgNCwgJ2InKTtcbiAgICogICBob3Quc2V0RGF0YUF0Q2VsbCg1LCA1LCAnbicpO1xuICAgKiAgIGhvdC5zZWxlY3RDZWxsKDAsIDApO1xuICAgKlxuICAgKiAgIGNvbnN0IGZpbHRlcnMgPSBob3QuZ2V0UGx1Z2luKCdmaWx0ZXJzJyk7XG4gICAqXG4gICAqICAgZmlsdGVycy5hZGRDb25kaXRpb24oMiwgJ2NvbnRhaW5zJywgWyczJ10pO1xuICAgKiAgIGZpbHRlcnMuZmlsdGVyKCk7XG4gICAqICAgaG90LmdldFBsdWdpbignY29sdW1uU29ydGluZycpLnNvcnQoeyBjb2x1bW46IDEsIHNvcnRPcmRlcjogJ2Rlc2MnIH0pO1xuICAgKiAgIC8vIFRoZSB0YWJsZSB3aWxsIGJlIHJlLXJlbmRlcmVkIGFuZCBjYWNoZSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBvbmNlIGFmdGVyIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2tcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5iYXRjaCA9IGZ1bmN0aW9uICh3cmFwcGVkT3BlcmF0aW9ucykge1xuICAgIHRoaXMuc3VzcGVuZFJlbmRlcigpO1xuICAgIHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHdyYXBwZWRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5yZXN1bWVFeGVjdXRpb24oKTtcbiAgICB0aGlzLnJlc3VtZVJlbmRlcigpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgZGltZW5zaW9ucyBvZiB0aGUgdGFibGUuIFRoZSBtZXRob2QgY29tcGFyZXMgcHJldmlvdXMgZGltZW5zaW9ucyB3aXRoIHRoZSBjdXJyZW50IG9uZXMgYW5kIHVwZGF0ZXMgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gcmVmcmVzaERpbWVuc2lvbnNcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVJlZnJlc2hEaW1lbnNpb25zXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlclJlZnJlc2hEaW1lbnNpb25zXG4gICAqL1xuICB0aGlzLnJlZnJlc2hEaW1lbnNpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghaW5zdGFuY2Uudmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB3aWR0aDogbGFzdFdpZHRoLFxuICAgICAgaGVpZ2h0OiBsYXN0SGVpZ2h0XG4gICAgfSA9IGluc3RhbmNlLnZpZXcuZ2V0TGFzdFNpemUoKTtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0gPSBpbnN0YW5jZS5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBpc1NpemVDaGFuZ2VkID0gd2lkdGggIT09IGxhc3RXaWR0aCB8fCBoZWlnaHQgIT09IGxhc3RIZWlnaHQ7XG4gICAgY29uc3QgaXNSZXNpemVCbG9ja2VkID0gaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVJlZnJlc2hEaW1lbnNpb25zJywge1xuICAgICAgd2lkdGg6IGxhc3RXaWR0aCxcbiAgICAgIGhlaWdodDogbGFzdEhlaWdodFxuICAgIH0sIHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSwgaXNTaXplQ2hhbmdlZCkgPT09IGZhbHNlO1xuICAgIGlmIChpc1Jlc2l6ZUJsb2NrZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzU2l6ZUNoYW5nZWQgfHwgaW5zdGFuY2Uudmlldy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudCA9PT0gaW5zdGFuY2Uucm9vdFdpbmRvdykge1xuICAgICAgaW5zdGFuY2Uudmlldy5zZXRMYXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICAgIH1cbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucycsIHtcbiAgICAgIHdpZHRoOiBsYXN0V2lkdGgsXG4gICAgICBoZWlnaHQ6IGxhc3RIZWlnaHRcbiAgICB9LCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH0sIGlzU2l6ZUNoYW5nZWQpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYHVwZGF0ZURhdGEoKWAgbWV0aG9kIHJlcGxhY2VzIEhhbmRzb250YWJsZSdzIFtgZGF0YWBdKEAvYXBpL29wdGlvbnMubWQjZGF0YSkgd2l0aCBhIG5ldyBkYXRhc2V0LlxuICAgKlxuICAgKiBUaGUgYHVwZGF0ZURhdGEoKWAgbWV0aG9kOlxuICAgKiAtIEtlZXBzIGNlbGxzJyBzdGF0ZXMgKGUuZy4gY2VsbHMnIFtmb3JtYXR0aW5nXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2Zvcm1hdHRpbmctY2VsbHMvZm9ybWF0dGluZy1jZWxscy5tZCkgYW5kIGNlbGxzJyBbYHJlYWRPbmx5YF0oQC9hcGkvb3B0aW9ucy5tZCNyZWFkb25seSkgc3RhdGVzKVxuICAgKiAtIEtlZXBzIHJvd3MnIHN0YXRlcyAoZS5nLiByb3cgb3JkZXIpXG4gICAqIC0gS2VlcHMgY29sdW1ucycgc3RhdGVzIChlLmcuIGNvbHVtbiBvcmRlcilcbiAgICpcbiAgICogVG8gcmVwbGFjZSBIYW5kc29udGFibGUncyBbYGRhdGFgXShAL2FwaS9vcHRpb25zLm1kI2RhdGEpIGFuZCByZXNldCBzdGF0ZXMsIHVzZSB0aGUgW2Bsb2FkRGF0YSgpYF0oI2xvYWRkYXRhKSBtZXRob2QuXG4gICAqXG4gICAqIFJlYWQgbW9yZTpcbiAgICogLSBbQmluZGluZyB0byBkYXRhXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZClcbiAgICogLSBbU2F2aW5nIGRhdGFdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9zYXZpbmctZGF0YS9zYXZpbmctZGF0YS5tZClcbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB1cGRhdGVEYXRhXG4gICAqIEBzaW5jZSAxMS4xLjBcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBBbiBbYXJyYXkgb2YgYXJyYXlzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNhcnJheS1vZi1hcnJheXMpLCBvciBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cyksIHRoYXQgY29udGFpbnMgSGFuZHNvbnRhYmxlJ3MgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gVGhlIHNvdXJjZSBvZiB0aGUgYHVwZGF0ZURhdGEoKWAgY2FsbFxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlVXBkYXRlRGF0YVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJVcGRhdGVEYXRhXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNoYW5nZVxuICAgKi9cbiAgdGhpcy51cGRhdGVEYXRhID0gZnVuY3Rpb24gKGRhdGEsIHNvdXJjZSkge1xuICAgICgwLCBfZGF0YU1hcC5yZXBsYWNlRGF0YSkoZGF0YSwgbmV3RGF0YU1hcCA9PiB7XG4gICAgICBkYXRhbWFwID0gbmV3RGF0YU1hcDtcbiAgICB9LCBuZXdEYXRhTWFwID0+IHtcbiAgICAgIGRhdGFtYXAgPSBuZXdEYXRhTWFwO1xuICAgICAgaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSk7XG4gICAgICBpbnN0YW5jZS5yb3dJbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKTtcbiAgICAgIGdyaWQuYWRqdXN0Um93c0FuZENvbHMoKTtcbiAgICAgIHNlbGVjdGlvbi5yZWZyZXNoKCk7XG4gICAgfSwge1xuICAgICAgaG90SW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgZGF0YU1hcDogZGF0YW1hcCxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICBpbnRlcm5hbFNvdXJjZTogJ3VwZGF0ZURhdGEnLFxuICAgICAgc291cmNlLFxuICAgICAgbWV0YU1hbmFnZXIsXG4gICAgICBmaXJzdFJ1blxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYGxvYWREYXRhKClgIG1ldGhvZCByZXBsYWNlcyBIYW5kc29udGFibGUncyBbYGRhdGFgXShAL2FwaS9vcHRpb25zLm1kI2RhdGEpIHdpdGggYSBuZXcgZGF0YXNldC5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCB0aGUgYGxvYWREYXRhKClgIG1ldGhvZDpcbiAgICogLSBSZXNldHMgY2VsbHMnIHN0YXRlcyAoZS5nLiBjZWxscycgW2Zvcm1hdHRpbmddKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvZm9ybWF0dGluZy1jZWxscy9mb3JtYXR0aW5nLWNlbGxzLm1kKSBhbmQgY2VsbHMnIFtgcmVhZE9ubHlgXShAL2FwaS9vcHRpb25zLm1kI3JlYWRvbmx5KSBzdGF0ZXMpXG4gICAqIC0gUmVzZXRzIHJvd3MnIHN0YXRlcyAoZS5nLiByb3cgb3JkZXIpXG4gICAqIC0gUmVzZXRzIGNvbHVtbnMnIHN0YXRlcyAoZS5nLiBjb2x1bW4gb3JkZXIpXG4gICAqXG4gICAqIFRvIHJlcGxhY2UgSGFuZHNvbnRhYmxlJ3MgW2BkYXRhYF0oQC9hcGkvb3B0aW9ucy5tZCNkYXRhKSB3aXRob3V0IHJlc2V0dGluZyBzdGF0ZXMsIHVzZSB0aGUgW2B1cGRhdGVEYXRhKClgXSgjdXBkYXRlZGF0YSkgbWV0aG9kLlxuICAgKlxuICAgKiBSZWFkIG1vcmU6XG4gICAqIC0gW0JpbmRpbmcgdG8gZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQpXG4gICAqIC0gW1NhdmluZyBkYXRhXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvc2F2aW5nLWRhdGEvc2F2aW5nLWRhdGEubWQpXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gbG9hZERhdGFcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBBbiBbYXJyYXkgb2YgYXJyYXlzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNhcnJheS1vZi1hcnJheXMpLCBvciBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cyksIHRoYXQgY29udGFpbnMgSGFuZHNvbnRhYmxlJ3MgZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gVGhlIHNvdXJjZSBvZiB0aGUgYGxvYWREYXRhKClgIGNhbGxcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZUxvYWREYXRhXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckxvYWREYXRhXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNoYW5nZVxuICAgKi9cbiAgdGhpcy5sb2FkRGF0YSA9IGZ1bmN0aW9uIChkYXRhLCBzb3VyY2UpIHtcbiAgICAoMCwgX2RhdGFNYXAucmVwbGFjZURhdGEpKGRhdGEsIG5ld0RhdGFNYXAgPT4ge1xuICAgICAgZGF0YW1hcCA9IG5ld0RhdGFNYXA7XG4gICAgfSwgKCkgPT4ge1xuICAgICAgbWV0YU1hbmFnZXIuY2xlYXJDZWxsc0NhY2hlKCk7XG4gICAgICBpbnN0YW5jZS5pbml0SW5kZXhNYXBwZXJzKCk7XG4gICAgICBncmlkLmFkanVzdFJvd3NBbmRDb2xzKCk7XG4gICAgICBzZWxlY3Rpb24ucmVmcmVzaCgpO1xuICAgICAgaWYgKGZpcnN0UnVuKSB7XG4gICAgICAgIGZpcnN0UnVuID0gW251bGwsICdsb2FkRGF0YSddO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGhvdEluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgIGRhdGFNYXA6IGRhdGFtYXAsXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgaW50ZXJuYWxTb3VyY2U6ICdsb2FkRGF0YScsXG4gICAgICBzb3VyY2UsXG4gICAgICBtZXRhTWFuYWdlcixcbiAgICAgIGZpcnN0UnVuXG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluaXRpYWwgY29sdW1uIGNvdW50LCBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBgY29sdW1uc2Agc2V0dGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge251bWJlcn0gVGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAqL1xuICB0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBjb2x1bW5zU2V0dGluZ3MgPSB0YWJsZU1ldGEuY29sdW1ucztcbiAgICBsZXQgZmluYWxOck9mQ29sdW1ucyA9IDA7XG5cbiAgICAvLyBXZSB3aWxsIGNoZWNrIG51bWJlciBvZiBjb2x1bW5zIHdoZW4gdGhlIGBjb2x1bW5zYCBwcm9wZXJ0eSB3YXMgZGVmaW5lZCBhcyBhbiBhcnJheS4gQ29sdW1ucyBvcHRpb24gbWF5XG4gICAgLy8gbmFycm93IGRvd24gb3IgZXhwYW5kIGRpc3BsYXllZCBkYXRhc2V0IGluIHRoYXQgY2FzZS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb2x1bW5zU2V0dGluZ3MpKSB7XG4gICAgICBmaW5hbE5yT2ZDb2x1bW5zID0gY29sdW1uc1NldHRpbmdzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikoY29sdW1uc1NldHRpbmdzKSkge1xuICAgICAgaWYgKGluc3RhbmNlLmRhdGFUeXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgIGNvbnN0IG5yT2ZTb3VyY2VDb2x1bW5zID0gdGhpcy5jb3VudFNvdXJjZUNvbHMoKTtcbiAgICAgICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IG5yT2ZTb3VyY2VDb2x1bW5zOyBjb2x1bW5JbmRleCArPSAxKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTZXR0aW5ncyhjb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIGZpbmFsTnJPZkNvbHVtbnMgKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHRlbmRlZCBkYXRhc2V0IGJ5IHRoZSBgY29sdW1uc2AgcHJvcGVydHk/IE1vdmVkIGNvZGUgcmlnaHQgZnJvbSB0aGUgcmVmYWN0b3JlZCBgY291bnRDb2xzYCBtZXRob2QuXG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmRhdGFUeXBlID09PSAnb2JqZWN0JyB8fCBpbnN0YW5jZS5kYXRhVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmaW5hbE5yT2ZDb2x1bW5zID0gZGF0YW1hcC5jb2xUb1Byb3BDYWNoZS5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgbmVlZCB0byBjaGVjayBjb2x1bW5zIGxlbmd0aCBmcm9tIHRoZSBzY2hlbWEsIGkuZS4gYGRhdGFgIG1heSBiZSBlbXB0eS5cbiAgICB9IGVsc2UgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKSh0YWJsZU1ldGEuZGF0YVNjaGVtYSkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IGRhdGFtYXAuZ2V0U2NoZW1hKCk7XG5cbiAgICAgIC8vIFNjaGVtYSBtYXkgYmUgZGVmaW5lZCBhcyBhbiBhcnJheSBvZiBvYmplY3RzLiBFYWNoIG9iamVjdCB3aWxsIGRlZmluZSBjb2x1bW4uXG4gICAgICBmaW5hbE5yT2ZDb2x1bW5zID0gQXJyYXkuaXNBcnJheShzY2hlbWEpID8gc2NoZW1hLmxlbmd0aCA6ICgwLCBfb2JqZWN0LmRlZXBPYmplY3RTaXplKShzY2hlbWEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSBpbml0IGluZGV4IG1hcHBlcnMgYnkgbGVuZ3RoIG9mIHNvdXJjZSBkYXRhIHRvIHByb3ZpZGUgaW5kZXhlcyBhbHNvIGZvciBza2lwcGVkIGluZGV4ZXMuXG4gICAgICBmaW5hbE5yT2ZDb2x1bW5zID0gdGhpcy5jb3VudFNvdXJjZUNvbHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsTnJPZkNvbHVtbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEluaXQgaW5kZXggbWFwcGVyIHdoaWNoIG1hbmFnZSBpbmRleGVzIGFzc2lnbmVkIHRvIHRoZSBkYXRhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGhpcy5pbml0SW5kZXhNYXBwZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpO1xuICAgIHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGRhdGEgb2JqZWN0ICh0aGUgc2FtZSBvbmUgdGhhdCB3YXMgcGFzc2VkIGJ5IGBkYXRhYCBjb25maWd1cmF0aW9uIG9wdGlvbiBvciBgbG9hZERhdGFgIG1ldGhvZCxcbiAgICogdW5sZXNzIHNvbWUgbW9kaWZpY2F0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCAoaS5lLiBTZXF1ZW5jZSBvZiByb3dzL2NvbHVtbnMgd2FzIGNoYW5nZWQsIHNvbWUgcm93L2NvbHVtbiB3YXMgc2tpcHBlZCkuXG4gICAqIElmIHRoYXQncyB0aGUgY2FzZSAtIHVzZSB0aGUge0BsaW5rIENvcmUjZ2V0U291cmNlRGF0YX0gbWV0aG9kLikuXG4gICAqXG4gICAqIE9wdGlvbmFsbHkgeW91IGNhbiBwcm92aWRlIGNlbGwgcmFuZ2UgYnkgZGVmaW5pbmcgYHJvd2AsIGBjb2x1bW5gLCBgcm93MmAsIGBjb2x1bW4yYCB0byBnZXQgb25seSBhIGZyYWdtZW50IG9mIHRhYmxlIGRhdGEuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0RGF0YVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3Jvd10gRnJvbSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbl0gRnJvbSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3JvdzJdIFRvIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sdW1uMl0gVG8gdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge0FycmF5W119IEFycmF5IHdpdGggdGhlIGRhdGEuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIC8vIEdldCBhbGwgZGF0YSAoaW4gb3JkZXIgaG93IGl0IGlzIHJlbmRlcmVkIGluIHRoZSB0YWJsZSkuXG4gICAqIGhvdC5nZXREYXRhKCk7XG4gICAqIC8vIEdldCBkYXRhIGZyYWdtZW50IChmcm9tIHRvcC1sZWZ0IDAsIDAgdG8gYm90dG9tLXJpZ2h0IDMsIDMpLlxuICAgKiBob3QuZ2V0RGF0YSgzLCAzKTtcbiAgICogLy8gR2V0IGRhdGEgZnJhZ21lbnQgKGZyb20gdG9wLWxlZnQgMiwgMSB0byBib3R0b20tcmlnaHQgMywgMykuXG4gICAqIGhvdC5nZXREYXRhKDIsIDEsIDMsIDMpO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuZ2V0RGF0YSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgcm93MiwgY29sdW1uMikge1xuICAgIGlmICgoMCwgX21peGVkLmlzVW5kZWZpbmVkKShyb3cpKSB7XG4gICAgICByZXR1cm4gZGF0YW1hcC5nZXRBbGwoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFtYXAuZ2V0UmFuZ2UoaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pLCBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3Jkcyhyb3cyLCBjb2x1bW4yKSwgZGF0YW1hcC5ERVNUSU5BVElPTl9SRU5ERVJFUik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIHJhbmdlLiBFYWNoIGNvbHVtbiBpcyBzZXBhcmF0ZWQgYnkgdGFiLCBlYWNoIHJvdyBpcyBzZXBhcmF0ZWQgYnkgYSBuZXdcbiAgICogbGluZSBjaGFyYWN0ZXIuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0Q29weWFibGVUZXh0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFJvdyBGcm9tIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydENvbCBGcm9tIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRSb3cgVG8gdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZENvbCBUbyB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgdGhpcy5nZXRDb3B5YWJsZVRleHQgPSBmdW5jdGlvbiAoc3RhcnRSb3csIHN0YXJ0Q29sLCBlbmRSb3csIGVuZENvbCkge1xuICAgIHJldHVybiBkYXRhbWFwLmdldENvcHlhYmxlVGV4dChpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhzdGFydFJvdywgc3RhcnRDb2wpLCBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhlbmRSb3csIGVuZENvbCkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBkYXRhJ3MgY29weWFibGUgdmFsdWUgYXQgc3BlY2lmaWVkIGByb3dgIGFuZCBgY29sdW1uYCBpbmRleC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDb3B5YWJsZURhdGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0aGlzLmdldENvcHlhYmxlRGF0YSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgIHJldHVybiBkYXRhbWFwLmdldENvcHlhYmxlKHJvdywgZGF0YW1hcC5jb2xUb1Byb3AoY29sdW1uKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc2NoZW1hIHByb3ZpZGVkIGJ5IGNvbnN0cnVjdG9yIHNldHRpbmdzLiBJZiBpdCBkb2Vzbid0IGV4aXN0IHRoZW4gaXQgcmV0dXJucyB0aGUgc2NoZW1hIGJhc2VkIG9uIHRoZSBkYXRhXG4gICAqIHN0cnVjdHVyZSBpbiB0aGUgZmlyc3Qgcm93LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldFNjaGVtYVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBTY2hlbWEgb2JqZWN0LlxuICAgKi9cbiAgdGhpcy5nZXRTY2hlbWEgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRhdGFtYXAuZ2V0U2NoZW1hKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVzZSBpdCBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgY29uZmlndXJhdGlvbiBhZnRlciBpbml0aWFsaXphdGlvbi4gVGhlIGBzZXR0aW5nc2AgYXJndW1lbnQgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYW5nZWRcbiAgICogc2V0dGluZ3MsIGRlY2xhcmVkIHRoZSBzYW1lIHdheSBhcyBpbiB0aGUgaW5pdGlhbCBzZXR0aW5ncyBvYmplY3QuXG4gICAqXG4gICAqIF9fTm90ZV9fLCB0aGF0IGFsdGhvdWdoIHRoZSBgdXBkYXRlU2V0dGluZ3NgIG1ldGhvZCBkb2Vzbid0IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXNseSBkZWNsYXJlZCBzZXR0aW5ncywgaXQgbWlnaHQgcmVzZXRcbiAgICogdGhlIHNldHRpbmdzIG1hZGUgcG9zdC1pbml0aWFsaXphdGlvbi4gKGZvciBleGFtcGxlIC0gaWdub3JlIGNoYW5nZXMgbWFkZSB1c2luZyB0aGUgY29sdW1uUmVzaXplIGZlYXR1cmUpLlxuICAgKlxuICAgKiBTaW5jZSA4LjAuMCBwYXNzaW5nIGBjb2x1bW5zYCBvciBgZGF0YWAgaW5zaWRlIGBzZXR0aW5nc2Agb2JqZWN0cyB3aWxsIHJlc3VsdCBpbiByZXNldHRpbmcgc3RhdGVzIGNvcnJlc3BvbmRpbmcgdG8gcm93cyBhbmQgY29sdW1uc1xuICAgKiAoZm9yIGV4YW1wbGUsIHJvdy9jb2x1bW4gc2VxdWVuY2UsIGNvbHVtbiB3aWR0aCwgcm93IGhlaWdodCwgZnJvemVuIGNvbHVtbnMgZXRjLikuXG4gICAqXG4gICAqIFNpbmNlIDEyLjAuMCBwYXNzaW5nIGBkYXRhYCBpbnNpZGUgYHNldHRpbmdzYCBvYmplY3RzIG5vIGxvbmdlciByZXN1bHRzIGluIHJlc2V0dGluZyBzdGF0ZXMgY29ycmVzcG9uZGluZyB0byByb3dzIGFuZCBjb2x1bW5zXG4gICAqIChmb3IgZXhhbXBsZSwgcm93L2NvbHVtbiBzZXF1ZW5jZSwgY29sdW1uIHdpZHRoLCByb3cgaGVpZ2h0LCBmcm96ZW4gY29sdW1ucyBldGMuKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB1cGRhdGVTZXR0aW5nc1xuICAgKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgQSBzZXR0aW5ncyBvYmplY3QgKHNlZSB7QGxpbmsgT3B0aW9uc30pLiBPbmx5IHByb3ZpZGUgdGhlIHNldHRpbmdzIHRoYXQgYXJlIGNoYW5nZWQsIG5vdCB0aGUgd2hvbGUgc2V0dGluZ3Mgb2JqZWN0IHRoYXQgd2FzIHVzZWQgZm9yIGluaXRpYWxpemF0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0PWZhbHNlXSBJbnRlcm5hbGx5IHVzZWQgZm9yIGluIGluaXRpYWxpemF0aW9uIG1vZGUuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGhvdC51cGRhdGVTZXR0aW5ncyh7XG4gICAqICAgIGNvbnRleHRNZW51OiB0cnVlLFxuICAgKiAgICBjb2xIZWFkZXJzOiB0cnVlLFxuICAgKiAgICBmaXhlZFJvd3NUb3A6IDJcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJDZWxsTWV0YVJlc2V0XG4gICAqIEBmaXJlcyBIb29rcyNhZnRlclVwZGF0ZVNldHRpbmdzXG4gICAqL1xuICB0aGlzLnVwZGF0ZVNldHRpbmdzID0gZnVuY3Rpb24gKHNldHRpbmdzKSB7XG4gICAgbGV0IGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIGNvbnN0IGRhdGFVcGRhdGVGdW5jdGlvbiA9IChmaXJzdFJ1biA/IGluc3RhbmNlLmxvYWREYXRhIDogaW5zdGFuY2UudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtcbiAgICBsZXQgY29sdW1uc0FzRnVuYyA9IGZhbHNlO1xuICAgIGxldCBpO1xuICAgIGxldCBqO1xuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoc2V0dGluZ3Mucm93cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwicm93c1wiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoc2V0dGluZ3MuY29scykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwiY29sc1wiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/Jyk7XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoc2V0dGluZ3MuZ2FudHRDaGFydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlIFwiZ2FudHRDaGFydFwiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICBmb3IgKGkgaW4gc2V0dGluZ3MpIHtcbiAgICAgIGlmIChpID09PSAnZGF0YScpIHtcbiAgICAgICAgLy8gRG8gbm90aGluZy4gbG9hZERhdGEgd2lsbCBiZSB0cmlnZ2VyZWQgbGF0ZXJcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gJ2xhbmd1YWdlJykge1xuICAgICAgICBzZXRMYW5ndWFnZShzZXR0aW5ncy5sYW5ndWFnZSk7XG4gICAgICB9IGVsc2UgaWYgKGkgPT09ICdjbGFzc05hbWUnKSB7XG4gICAgICAgIHNldENsYXNzTmFtZSgnY2xhc3NOYW1lJywgc2V0dGluZ3MuY2xhc3NOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gJ3RhYmxlQ2xhc3NOYW1lJyAmJiBpbnN0YW5jZS50YWJsZSkge1xuICAgICAgICBzZXRDbGFzc05hbWUoJ3RhYmxlQ2xhc3NOYW1lJywgc2V0dGluZ3MudGFibGVDbGFzc05hbWUpO1xuICAgICAgICBpbnN0YW5jZS52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7XG4gICAgICB9IGVsc2UgaWYgKF9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZChpKSB8fCBfcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoaSkpIHtcbiAgICAgICAgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikoc2V0dGluZ3NbaV0pIHx8IEFycmF5LmlzQXJyYXkoc2V0dGluZ3NbaV0pKSB7XG4gICAgICAgICAgc2V0dGluZ3NbaV0uaW5pdGlhbEhvb2sgPSB0cnVlO1xuICAgICAgICAgIGluc3RhbmNlLmFkZEhvb2soaSwgc2V0dGluZ3NbaV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbml0ICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzZXR0aW5ncywgaSkpIHtcbiAgICAgICAgLy8gVXBkYXRlIHNldHRpbmdzXG4gICAgICAgIGdsb2JhbE1ldGFbaV0gPSBzZXR0aW5nc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2FkIGRhdGEgb3IgY3JlYXRlIGRhdGEgbWFwXG4gICAgaWYgKHNldHRpbmdzLmRhdGEgPT09IHVuZGVmaW5lZCAmJiB0YWJsZU1ldGEuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhVXBkYXRlRnVuY3Rpb24obnVsbCwgJ3VwZGF0ZVNldHRpbmdzJyk7IC8vIGRhdGEgc291cmNlIGNyZWF0ZWQganVzdCBub3dcbiAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YVVwZGF0ZUZ1bmN0aW9uKHNldHRpbmdzLmRhdGEsICd1cGRhdGVTZXR0aW5ncycpOyAvLyBkYXRhIHNvdXJjZSBnaXZlbiBhcyBvcHRpb25cbiAgICB9IGVsc2UgaWYgKHNldHRpbmdzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YW1hcC5jcmVhdGVNYXAoKTtcblxuICAgICAgLy8gVGhlIGBjb2x1bW5gIHByb3BlcnR5IGhhcyBjaGFuZ2VkIC0gZGF0YXNldCBtYXkgYmUgZXhwYW5kZWQgb3IgbmFycm93ZWQgZG93bi4gVGhlIGBsb2FkRGF0YWAgZG8gdGhlIHNhbWUuXG4gICAgICBpbnN0YW5jZS5pbml0SW5kZXhNYXBwZXJzKCk7XG4gICAgfVxuICAgIGNvbnN0IGNsZW4gPSBpbnN0YW5jZS5jb3VudENvbHMoKTtcbiAgICBjb25zdCBjb2x1bW5TZXR0aW5nID0gdGFibGVNZXRhLmNvbHVtbnM7XG5cbiAgICAvLyBJbml0IGNvbHVtbnMgY29uc3RydWN0b3JzIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAoY29sdW1uU2V0dGluZyAmJiAoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKGNvbHVtblNldHRpbmcpKSB7XG4gICAgICBjb2x1bW5zQXNGdW5jID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBjZWxsIG1ldGEgY2FjaGVcbiAgICBpZiAoc2V0dGluZ3MuY2VsbCAhPT0gdW5kZWZpbmVkIHx8IHNldHRpbmdzLmNlbGxzICE9PSB1bmRlZmluZWQgfHwgc2V0dGluZ3MuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtZXRhTWFuYWdlci5jbGVhckNhY2hlKCk7XG4gICAgfVxuICAgIGlmIChjbGVuID4gMCkge1xuICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjbGVuOyBpKyspIHtcbiAgICAgICAgLy8gVXNlIHNldHRpbmdzIHByb3ZpZGVkIGJ5IHVzZXJcbiAgICAgICAgaWYgKGNvbHVtblNldHRpbmcpIHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zQXNGdW5jID8gY29sdW1uU2V0dGluZyhpKSA6IGNvbHVtblNldHRpbmdbal07XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgbWV0YU1hbmFnZXIudXBkYXRlQ29sdW1uTWV0YShqLCBjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBqICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoc2V0dGluZ3MuY2VsbCkpIHtcbiAgICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHNldHRpbmdzLmNlbGwsIGNlbGwgPT4ge1xuICAgICAgICBpbnN0YW5jZS5zZXRDZWxsTWV0YU9iamVjdChjZWxsLnJvdywgY2VsbC5jb2wsIGNlbGwpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlckNlbGxNZXRhUmVzZXQnKTtcbiAgICBsZXQgY3VycmVudEhlaWdodCA9IGluc3RhbmNlLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodDtcbiAgICBpZiAoY3VycmVudEhlaWdodCAhPT0gJycpIHtcbiAgICAgIGN1cnJlbnRIZWlnaHQgPSBwYXJzZUludChpbnN0YW5jZS5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQsIDEwKTtcbiAgICB9XG4gICAgbGV0IGhlaWdodCA9IHNldHRpbmdzLmhlaWdodDtcbiAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShoZWlnaHQpKSB7XG4gICAgICBoZWlnaHQgPSBoZWlnaHQoKTtcbiAgICB9XG4gICAgaWYgKGluaXQpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdHlsZSA9IGluc3RhbmNlLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIGlmIChpbml0aWFsU3R5bGUpIHtcbiAgICAgICAgaW5zdGFuY2Uucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWluaXRpYWxzdHlsZScsIGluc3RhbmNlLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoZWlnaHQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxTdHlsZSA9IGluc3RhbmNlLnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pbml0aWFsc3R5bGUnKTtcbiAgICAgIGlmIChpbml0aWFsU3R5bGUgJiYgKGluaXRpYWxTdHlsZS5pbmRleE9mKCdoZWlnaHQnKSA+IC0xIHx8IGluaXRpYWxTdHlsZS5pbmRleE9mKCdvdmVyZmxvdycpID4gLTEpKSB7XG4gICAgICAgIGluc3RhbmNlLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBpbml0aWFsU3R5bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdGFuY2Uucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgIGluc3RhbmNlLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2Uucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gaXNOYU4oaGVpZ2h0KSA/IGAke2hlaWdodH1gIDogYCR7aGVpZ2h0fXB4YDtcbiAgICAgIGluc3RhbmNlLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3Mud2lkdGggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgd2lkdGggPSBzZXR0aW5ncy53aWR0aDtcbiAgICAgIGlmICgoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKHdpZHRoKSkge1xuICAgICAgICB3aWR0aCA9IHdpZHRoKCk7XG4gICAgICB9XG4gICAgICBpbnN0YW5jZS5yb290RWxlbWVudC5zdHlsZS53aWR0aCA9IGlzTmFOKHdpZHRoKSA/IGAke3dpZHRofWAgOiBgJHt3aWR0aH1weGA7XG4gICAgfVxuICAgIGlmICghaW5pdCkge1xuICAgICAgaWYgKGluc3RhbmNlLnZpZXcpIHtcbiAgICAgICAgaW5zdGFuY2Uudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKTtcbiAgICAgICAgaW5zdGFuY2Uudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKTtcbiAgICAgIH1cbiAgICAgIGluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclVwZGF0ZVNldHRpbmdzJywgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBncmlkLmFkanVzdFJvd3NBbmRDb2xzKCk7XG4gICAgaWYgKGluc3RhbmNlLnZpZXcgJiYgIWZpcnN0UnVuKSB7XG4gICAgICBpbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlOyAvLyB1c2VkIHdoZW4gZGF0YSB3YXMgY2hhbmdlZFxuICAgICAgaW5zdGFuY2Uudmlldy5yZW5kZXIoKTtcbiAgICAgIGluc3RhbmNlLnZpZXcuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgfVxuICAgIGlmICghaW5pdCAmJiBpbnN0YW5jZS52aWV3ICYmIChjdXJyZW50SGVpZ2h0ID09PSAnJyB8fCBoZWlnaHQgPT09ICcnIHx8IGhlaWdodCA9PT0gdW5kZWZpbmVkKSAmJiBjdXJyZW50SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgIGluc3RhbmNlLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGNlbGwuXG4gICAqXG4gICAqIEZvciBjb2x1bW4gaGVhZGVycyBhbmQgcm93IGhlYWRlcnMsIHJldHVybnMgYG51bGxgLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldFZhbHVlXG4gICAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgb2YgdGhlIGZvY3VzZWQgY2VsbC5cbiAgICovXG4gIHRoaXMuZ2V0VmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VsID0gaW5zdGFuY2UuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgaWYgKHRhYmxlTWV0YS5nZXRWYWx1ZSkge1xuICAgICAgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikodGFibGVNZXRhLmdldFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdGFibGVNZXRhLmdldFZhbHVlLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgfSBlbHNlIGlmIChzZWwpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmdldERhdGEoKVtzZWxbMF1bMF1dW3RhYmxlTWV0YS5nZXRWYWx1ZV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWwpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5nZXREYXRhQXRDZWxsKHNlbFswXSwgc2VsWzFdKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBzZXR0aW5ncy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRTZXR0aW5nc1xuICAgKiBAcmV0dXJucyB7VGFibGVNZXRhfSBPYmplY3QgY29udGFpbmluZyB0aGUgY3VycmVudCB0YWJsZSBzZXR0aW5ncy5cbiAgICovXG4gIHRoaXMuZ2V0U2V0dGluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRhYmxlTWV0YTtcbiAgfTtcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBkYXRhIGZyb20gdGhlIHRhYmxlICh0aGUgdGFibGUgc2V0dGluZ3MgcmVtYWluIGludGFjdCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY2xlYXJcbiAgICovXG4gIHRoaXMuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICB0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgYGFsdGVyKClgIG1ldGhvZCBsZXRzIHlvdSBhbHRlciB0aGUgZ3JpZCdzIHN0cnVjdHVyZVxuICAgKiBieSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm93cyBhbmQgY29sdW1ucyBhdCBzcGVjaWZpZWQgcG9zaXRpb25zLlxuICAgKlxuICAgKiA6OjogdGlwXG4gICAqIFRoZSBgYWx0ZXIoKWAgbWV0aG9kIHdvcmtzIG9ubHkgd2hlbiB5b3VyIFtgZGF0YWBdKEAvYXBpL29wdGlvbnMubWQjZGF0YSlcbiAgICogaXMgYW4gW2FycmF5IG9mIGFycmF5c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2YtYXJyYXlzKS5cbiAgICogOjo6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGFib3ZlIHJvdyAxMCAoYnkgdmlzdWFsIGluZGV4KSwgaW5zZXJ0IDEgbmV3IHJvd1xuICAgKiBob3QuYWx0ZXIoJ2luc2VydF9yb3dfYWJvdmUnLCAxMCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiAgfCBBY3Rpb24gICAgICAgICAgICAgICB8IFdpdGggYGluZGV4YCB8IFdpdGhvdXQgYGluZGV4YCB8XG4gICAqICB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHxcbiAgICogIHwgYCdpbnNlcnRfcm93X2Fib3ZlJ2AgfCBJbnNlcnRzIHJvd3MgYWJvdmUgdGhlIGBpbmRleGAgcm93LiB8IEluc2VydHMgcm93cyBhYm92ZSB0aGUgZmlyc3Qgcm93LiB8XG4gICAqICB8IGAnaW5zZXJ0X3Jvd19iZWxvdydgIHwgSW5zZXJ0cyByb3dzIGJlbG93IHRoZSBgaW5kZXhgIHJvdy4gfCBJbnNlcnRzIHJvd3MgYmVsb3cgdGhlIGxhc3Qgcm93LiB8XG4gICAqICB8IGAncmVtb3ZlX3JvdydgICAgICAgIHwgUmVtb3ZlcyByb3dzLCBzdGFydGluZyBmcm9tIHRoZSBgaW5kZXhgIHJvdy4gfCBSZW1vdmVzIHJvd3MsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3Qgcm93LiB8XG4gICAqICB8IGAnaW5zZXJ0X2NvbF9zdGFydCdgIHwgSW5zZXJ0cyBjb2x1bW5zIGJlZm9yZSB0aGUgYGluZGV4YCBjb2x1bW4uIHwgSW5zZXJ0cyBjb2x1bW5zIGJlZm9yZSB0aGUgZmlyc3QgY29sdW1uLiB8XG4gICAqICB8IGAnaW5zZXJ0X2NvbF9lbmQnYCAgIHwgSW5zZXJ0cyBjb2x1bW5zIGFmdGVyIHRoZSBgaW5kZXhgIGNvbHVtbi4gfCBJbnNlcnRzIGNvbHVtbnMgYWZ0ZXIgdGhlIGxhc3QgY29sdW1uLiB8XG4gICAqICB8IGAncmVtb3ZlX2NvbCdgICAgICAgIHwgUmVtb3ZlcyBjb2x1bW5zLCBzdGFydGluZyBmcm9tIHRoZSBgaW5kZXhgIGNvbHVtbi4gfCBSZW1vdmVzIGNvbHVtbnMsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QgY29sdW1uLiB8XG4gICAqXG4gICAqIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYCdpbnNlcnRfY29sX3N0YXJ0J2AgYW5kIGAnaW5zZXJ0X2NvbF9lbmQnYDpcbiAgICogLSBUaGVpciBiZWhhdmlvciBkZXBlbmRzIG9uIHlvdXIgW2BsYXlvdXREaXJlY3Rpb25gXShAL2FwaS9vcHRpb25zLm1kI2xheW91dGRpcmVjdGlvbikuXG4gICAqIC0gSWYgdGhlIHByb3ZpZGVkIGBpbmRleGAgaXMgaGlnaGVyIHRoYW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgY29sdW1ucywgSGFuZHNvbnRhYmxlIGRvZXNuJ3QgZ2VuZXJhdGVcbiAgICogdGhlIGNvbHVtbnMgbWlzc2luZyBpbiBiZXR3ZWVuLiBJbnN0ZWFkLCB0aGUgbmV3IGNvbHVtbnMgYXJlIGluc2VydGVkIG5leHQgdG8gdGhlIGxhc3QgY29sdW1uLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGFsdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gQXZhaWxhYmxlIG9wZXJhdGlvbnM6XG4gICAqIDx1bD5cbiAgICogICAgPGxpPiBgJ2luc2VydF9yb3dfYWJvdmUnYCA8L2xpPlxuICAgKiAgICA8bGk+IGAnaW5zZXJ0X3Jvd19iZWxvdydgIDwvbGk+XG4gICAqICAgIDxsaT4gYCdyZW1vdmVfcm93J2AgPC9saT4gPC9saT5cbiAgICogICAgPGxpPiBgJ2luc2VydF9jb2xfc3RhcnQnYCA8L2xpPlxuICAgKiAgICA8bGk+IGAnaW5zZXJ0X2NvbF9lbmQnYCA8L2xpPlxuICAgKiAgICA8bGk+IGAncmVtb3ZlX2NvbCdgIDwvbGk+XG4gICAqIDwvdWw+XG4gICAqIEBwYXJhbSB7bnVtYmVyfG51bWJlcltdfSBbaW5kZXhdIEEgdmlzdWFsIGluZGV4IG9mIHRoZSByb3cvY29sdW1uIGJlZm9yZSBvciBhZnRlciB3aGljaCB0aGUgbmV3IHJvdy9jb2x1bW4gd2lsbCBiZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4gQ2FuIGFsc28gYmUgYW4gYXJyYXkgb2YgYXJyYXlzLCBpbiBmb3JtYXQgYFtbaW5kZXgsIGFtb3VudF0sLi4uXWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50XSBUaGUgYW1vdW50IG9mIHJvd3Mgb3IgY29sdW1ucyB0byBiZSBpbnNlcnRlZCBvciByZW1vdmVkIChkZWZhdWx0OiBgMWApLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU291cmNlIGluZGljYXRvci5cbiAgICogQHBhcmFtIHtib29sZWFufSBba2VlcEVtcHR5Um93c10gSWYgc2V0IHRvIGB0cnVlYDogcHJldmVudHMgcmVtb3ZpbmcgZW1wdHkgcm93cy5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gYWJvdmUgcm93IDEwIChieSB2aXN1YWwgaW5kZXgpLCBpbnNlcnQgMSBuZXcgcm93XG4gICAqIGhvdC5hbHRlcignaW5zZXJ0X3Jvd19hYm92ZScsIDEwKTtcbiAgICpcbiAgICogLy8gYmVsb3cgcm93IDEwIChieSB2aXN1YWwgaW5kZXgpLCBpbnNlcnQgMyBuZXcgcm93c1xuICAgKiBob3QuYWx0ZXIoJ2luc2VydF9yb3dfYmVsb3cnLCAxMCwgMyk7XG4gICAqXG4gICAqIC8vIGluIHRoZSBMVFIgbGF5b3V0IGRpcmVjdGlvbjogdG8gdGhlIGxlZnQgb2YgY29sdW1uIDEwIChieSB2aXN1YWwgaW5kZXgpLCBpbnNlcnQgMyBuZXcgY29sdW1uc1xuICAgKiAvLyBpbiB0aGUgUlRMIGxheW91dCBkaXJlY3Rpb246IHRvIHRoZSByaWdodCBvZiBjb2x1bW4gMTAgKGJ5IHZpc3VhbCBpbmRleCksIGluc2VydCAzIG5ldyBjb2x1bW5zXG4gICAqIGhvdC5hbHRlcignaW5zZXJ0X2NvbF9zdGFydCcsIDEwLCAzKTtcbiAgICpcbiAgICogLy8gaW4gdGhlIExUUiBsYXlvdXQgZGlyZWN0aW9uOiB0byB0aGUgcmlnaHQgb2YgY29sdW1uIDEwIChieSB2aXN1YWwgaW5kZXgpLCBpbnNlcnQgMSBuZXcgY29sdW1uXG4gICAqIC8vIGluIHRoZSBSVEwgbGF5b3V0IGRpcmVjdGlvbjogdG8gdGhlIGxlZnQgb2YgY29sdW1uIDEwIChieSB2aXN1YWwgaW5kZXgpLCBpbnNlcnQgMSBuZXcgY29sdW1uXG4gICAqIGhvdC5hbHRlcignaW5zZXJ0X2NvbF9lbmQnLCAxMCk7XG4gICAqXG4gICAqIC8vIHJlbW92ZSAyIHJvd3MsIHN0YXJ0aW5nIGZyb20gcm93IDEwIChieSB2aXN1YWwgaW5kZXgpXG4gICAqIGhvdC5hbHRlcigncmVtb3ZlX3JvdycsIDEwLCAyKTtcbiAgICpcbiAgICogLy8gcmVtb3ZlIDMgcm93cywgc3RhcnRpbmcgZnJvbSByb3cgMSAoYnkgdmlzdWFsIGluZGV4KVxuICAgKiAvLyByZW1vdmUgMiByb3dzLCBzdGFydGluZyBmcm9tIHJvdyA1IChieSB2aXN1YWwgaW5kZXgpXG4gICAqIGhvdC5hbHRlcigncmVtb3ZlX3JvdycsIFtbMSwgM10sIFs1LCAyXV0pO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuYWx0ZXIgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbmRleCwgYW1vdW50LCBzb3VyY2UsIGtlZXBFbXB0eVJvd3MpIHtcbiAgICBncmlkLmFsdGVyKGFjdGlvbiwgaW5kZXgsIGFtb3VudCwgc291cmNlLCBrZWVwRW1wdHlSb3dzKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIFREIGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBgcm93YCBhbmQgYGNvbHVtbmAgYXJndW1lbnRzLCBpZiBpdCBpcyByZW5kZXJlZCBvbiBzY3JlZW4uXG4gICAqIFJldHVybnMgYG51bGxgIGlmIHRoZSBURCBpcyBub3QgcmVuZGVyZWQgb24gc2NyZWVuIChwcm9iYWJseSBiZWNhdXNlIHRoYXQgcGFydCBvZiB0aGUgdGFibGUgaXMgbm90IHZpc2libGUpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldENlbGxcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RvcG1vc3Q9ZmFsc2VdIElmIHNldCB0byBgdHJ1ZWAsIGl0IHJldHVybnMgdGhlIFREIGVsZW1lbnQgZnJvbSB0aGUgdG9wbW9zdCBvdmVybGF5LiBGb3IgZXhhbXBsZSxcbiAgICogaWYgdGhlIHdhbnRlZCBjZWxsIGlzIGluIHRoZSByYW5nZSBvZiBmaXhlZCByb3dzLCBpdCB3aWxsIHJldHVybiBhIFREIGVsZW1lbnQgZnJvbSB0aGUgYHRvcGAgb3ZlcmxheS5cbiAgICogQHJldHVybnMge0hUTUxUYWJsZUNlbGxFbGVtZW50fG51bGx9IFRoZSBjZWxsJ3MgVEQgZWxlbWVudC5cbiAgICovXG4gIHRoaXMuZ2V0Q2VsbCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgIGxldCB0b3Btb3N0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICBsZXQgcmVuZGVyYWJsZUNvbHVtbkluZGV4ID0gY29sdW1uOyAvLyBIYW5kbGluZyBhbHNvIGNvbHVtbiBoZWFkZXJzLlxuICAgIGxldCByZW5kZXJhYmxlUm93SW5kZXggPSByb3c7IC8vIEhhbmRsaW5nIGFsc28gcm93IGhlYWRlcnMuXG5cbiAgICBpZiAoY29sdW1uID49IDApIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJlbmRlcmFibGVDb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjb2x1bW4pO1xuICAgIH1cbiAgICBpZiAocm93ID49IDApIHtcbiAgICAgIGlmICh0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbFJvdyhyb3cpKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJlbmRlcmFibGVSb3dJbmRleCA9IHRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyb3cpO1xuICAgIH1cbiAgICBpZiAocmVuZGVyYWJsZVJvd0luZGV4ID09PSBudWxsIHx8IHJlbmRlcmFibGVDb2x1bW5JbmRleCA9PT0gbnVsbCB8fCByZW5kZXJhYmxlUm93SW5kZXggPT09IHVuZGVmaW5lZCB8fCByZW5kZXJhYmxlQ29sdW1uSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS52aWV3LmdldENlbGxBdENvb3JkcyhpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhyZW5kZXJhYmxlUm93SW5kZXgsIHJlbmRlcmFibGVDb2x1bW5JbmRleCksIHRvcG1vc3QpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgY2VsbCwgcHJvdmlkZWQgYXMgYSBIVE1MIHRhYmxlIGNlbGwgZWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDb29yZHNcbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gZWxlbWVudCBUaGUgSFRNTCBFbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY2VsbC5cbiAgICogQHJldHVybnMge0NlbGxDb29yZHN8bnVsbH0gVmlzdWFsIGNvb3JkaW5hdGVzIG9iamVjdC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LmdldENvb3Jkcyhob3QuZ2V0Q2VsbCgxLCAxKSk7XG4gICAqIC8vIGl0IHJldHVybnMgQ2VsbENvb3JkcyBvYmplY3QgaW5zdGFuY2Ugd2l0aCBwcm9wcyByb3c6IDEgYW5kIGNvbDogMS5cbiAgICogYGBgXG4gICAqL1xuICB0aGlzLmdldENvb3JkcyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29uc3QgcmVuZGVyYWJsZUNvb3JkcyA9IHRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHMoZWxlbWVudCk7XG4gICAgaWYgKHJlbmRlcmFibGVDb29yZHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICByb3c6IHJlbmRlcmFibGVSb3csXG4gICAgICBjb2w6IHJlbmRlcmFibGVDb2x1bW5cbiAgICB9ID0gcmVuZGVyYWJsZUNvb3JkcztcbiAgICBsZXQgdmlzdWFsUm93ID0gcmVuZGVyYWJsZVJvdztcbiAgICBsZXQgdmlzdWFsQ29sdW1uID0gcmVuZGVyYWJsZUNvbHVtbjtcbiAgICBpZiAocmVuZGVyYWJsZVJvdyA+PSAwKSB7XG4gICAgICB2aXN1YWxSb3cgPSB0aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZVJvdyk7XG4gICAgfVxuICAgIGlmIChyZW5kZXJhYmxlQ29sdW1uID49IDApIHtcbiAgICAgIHZpc3VhbENvbHVtbiA9IHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlQ29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgbmFtZSB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGdpdmVuIGNvbHVtbiBpbmRleC5cbiAgICogSWYgdGhlIGRhdGEgc291cmNlIGlzIGFuIGFycmF5IG9mIGFycmF5cywgaXQgcmV0dXJucyB0aGUgY29sdW1ucyBpbmRleC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBjb2xUb1Byb3BcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bWJlcn0gQ29sdW1uIHByb3BlcnR5IG9yIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIHRoaXMuY29sVG9Qcm9wID0gZnVuY3Rpb24gKGNvbHVtbikge1xuICAgIHJldHVybiBkYXRhbWFwLmNvbFRvUHJvcChjb2x1bW4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGNvbHVtbiBpbmRleCB0aGF0IGNvcnJlc3BvbmRzIHdpdGggdGhlIGdpdmVuIHByb3BlcnR5LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHByb3BUb0NvbFxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHByb3AgUHJvcGVydHkgbmFtZSBvciBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICB0aGlzLnByb3BUb0NvbCA9IGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuIGRhdGFtYXAucHJvcFRvQ29sKHByb3ApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGUgcGh5c2ljYWwgcm93IGluZGV4IGludG8gdmlzdWFsLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byByZXRyaWV2ZSB2aXN1YWwgcm93IGluZGV4IHdoaWNoIGNhbiBiZSByZW9yZGVyZWQsIG1vdmVkIG9yIHRyaW1tZWRcbiAgICogYmFzZWQgb24gYSBwaHlzaWNhbCBpbmRleC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB0b1Zpc3VhbFJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB2aXN1YWwgcm93IGluZGV4LlxuICAgKi9cbiAgdGhpcy50b1Zpc3VhbFJvdyA9IHJvdyA9PiB0aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHJvdyk7XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggaW50byB2aXN1YWwuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHJldHJpZXZlIHZpc3VhbCBjb2x1bW4gaW5kZXggd2hpY2ggY2FuIGJlIHJlb3JkZXJlZCwgbW92ZWQgb3IgdHJpbW1lZFxuICAgKiBiYXNlZCBvbiBhIHBoeXNpY2FsIGluZGV4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHRvVmlzdWFsQ29sdW1uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gUGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICB0aGlzLnRvVmlzdWFsQ29sdW1uID0gY29sdW1uID0+IHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoY29sdW1uKTtcblxuICAvKipcbiAgICogVHJhbnNsYXRlIHZpc3VhbCByb3cgaW5kZXggaW50byBwaHlzaWNhbC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmV0cmlldmUgcGh5c2ljYWwgcm93IGluZGV4IGJhc2VkIG9uIGEgdmlzdWFsIGluZGV4IHdoaWNoIGNhbiBiZVxuICAgKiByZW9yZGVyZWQsIG1vdmVkIG9yIHRyaW1tZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gdG9QaHlzaWNhbFJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgcGh5c2ljYWwgcm93IGluZGV4LlxuICAgKi9cbiAgdGhpcy50b1BoeXNpY2FsUm93ID0gcm93ID0+IHRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgocm93KTtcblxuICAvKipcbiAgICogVHJhbnNsYXRlIHZpc3VhbCBjb2x1bW4gaW5kZXggaW50byBwaHlzaWNhbC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gcmV0cmlldmUgcGh5c2ljYWwgY29sdW1uIGluZGV4IGJhc2VkIG9uIGEgdmlzdWFsIGluZGV4IHdoaWNoIGNhbiBiZVxuICAgKiByZW9yZGVyZWQsIG1vdmVkIG9yIHRyaW1tZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gdG9QaHlzaWNhbENvbHVtblxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKi9cbiAgdGhpcy50b1BoeXNpY2FsQ29sdW1uID0gY29sdW1uID0+IHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoY29sdW1uKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHVybnMgdGhlIGNlbGwgdmFsdWUgYXQgYHJvd2AsIGBjb2x1bW5gLlxuICAgKlxuICAgKiBfX05vdGVfXzogSWYgZGF0YSBpcyByZW9yZGVyZWQsIHNvcnRlZCBvciB0cmltbWVkLCB0aGUgY3VycmVudGx5IHZpc2libGUgb3JkZXIgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERhdGFBdENlbGxcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHsqfSBEYXRhIGF0IGNlbGwuXG4gICAqL1xuICB0aGlzLmdldERhdGFBdENlbGwgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gZGF0YW1hcC5nZXQocm93LCBkYXRhbWFwLmNvbFRvUHJvcChjb2x1bW4pKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB2YWx1ZSBhdCB2aXN1YWwgYHJvd2AgYW5kIGBwcm9wYCBpbmRleGVzLlxuICAgKlxuICAgKiBfX05vdGVfXzogSWYgZGF0YSBpcyByZW9yZGVyZWQsIHNvcnRlZCBvciB0cmltbWVkLCB0aGUgY3VycmVudGx5IHZpc2libGUgb3JkZXIgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERhdGFBdFJvd1Byb3BcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wZXJ0eSBuYW1lLlxuICAgKiBAcmV0dXJucyB7Kn0gQ2VsbCB2YWx1ZS5cbiAgICovXG4gIHRoaXMuZ2V0RGF0YUF0Um93UHJvcCA9IGZ1bmN0aW9uIChyb3csIHByb3ApIHtcbiAgICByZXR1cm4gZGF0YW1hcC5nZXQocm93LCBwcm9wKTtcbiAgfTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFJldHVybnMgYXJyYXkgb2YgY29sdW1uIHZhbHVlcyBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogX19Ob3RlX186IElmIGNvbHVtbnMgd2VyZSByZW9yZGVyZWQgb3Igc29ydGVkLCB0aGUgY3VycmVudGx5IHZpc2libGUgb3JkZXIgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERhdGFBdENvbFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2YgY2VsbCB2YWx1ZXMuXG4gICAqL1xuICB0aGlzLmdldERhdGFBdENvbCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gW107XG4gICAgY29uc3QgZGF0YUJ5Um93cyA9IGRhdGFtYXAuZ2V0UmFuZ2UoaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoMCwgY29sdW1uKSwgaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHModGFibGVNZXRhLmRhdGEubGVuZ3RoIC0gMSwgY29sdW1uKSwgZGF0YW1hcC5ERVNUSU5BVElPTl9SRU5ERVJFUik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQnlSb3dzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGFCeVJvd3NbaV0ubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgY29sdW1uRGF0YS5wdXNoKGRhdGFCeVJvd3NbaV1bal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogR2l2ZW4gdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIChlLmcuIGAnZmlyc3QubmFtZSdgIG9yIGAnMCdgKSwgcmV0dXJucyBhbiBhcnJheSBvZiBjb2x1bW4ncyB2YWx1ZXMgZnJvbSB0aGUgdGFibGUgZGF0YS5cbiAgICogWW91IGNhbiBhbHNvIHByb3ZpZGUgYSBjb2x1bW4gaW5kZXggYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERhdGFBdFByb3BcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwcm9wIFByb3BlcnR5IG5hbWUgb3IgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIGNlbGwgdmFsdWVzLlxuICAgKi9cbiAgLy8gVE9ETzogR2V0dGluZyBkYXRhIGZyb20gYGRhdGFtYXBgIHNob3VsZCB3b3JrIG9uIHZpc3VhbCBpbmRleGVzLlxuICB0aGlzLmdldERhdGFBdFByb3AgPSBmdW5jdGlvbiAocHJvcCkge1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBbXTtcbiAgICBjb25zdCBkYXRhQnlSb3dzID0gZGF0YW1hcC5nZXRSYW5nZShpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcygwLCBkYXRhbWFwLnByb3BUb0NvbChwcm9wKSksIGluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHRhYmxlTWV0YS5kYXRhLmxlbmd0aCAtIDEsIGRhdGFtYXAucHJvcFRvQ29sKHByb3ApKSwgZGF0YW1hcC5ERVNUSU5BVElPTl9SRU5ERVJFUik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQnlSb3dzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGFCeVJvd3NbaV0ubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgY29sdW1uRGF0YS5wdXNoKGRhdGFCeVJvd3NbaV1bal0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGF0YTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIGNsb25lIG9mIHRoZSBzb3VyY2UgZGF0YSBvYmplY3QuXG4gICAqIE9wdGlvbmFsbHkgeW91IGNhbiBwcm92aWRlIGEgY2VsbCByYW5nZSBieSB1c2luZyB0aGUgYHJvd2AsIGBjb2x1bW5gLCBgcm93MmAsIGBjb2x1bW4yYCBhcmd1bWVudHMsIHRvIGdldCBvbmx5IGFcbiAgICogZnJhZ21lbnQgb2YgdGhlIHRhYmxlIGRhdGEuXG4gICAqXG4gICAqIF9fTm90ZV9fOiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwYXJ0aWNpcGF0ZSBpbiBkYXRhIHRyYW5zZm9ybWF0aW9uLiBJZiB0aGUgdmlzdWFsIGRhdGEgb2YgdGhlIHRhYmxlIGlzIHJlb3JkZXJlZCxcbiAgICogc29ydGVkIG9yIHRyaW1tZWQgb25seSBwaHlzaWNhbCBpbmRleGVzIGFyZSBjb3JyZWN0LlxuICAgKlxuICAgKiBfX05vdGVfXzogVGhpcyBtZXRob2QgbWF5IHJldHVybiBpbmNvcnJlY3QgdmFsdWVzIGZvciBjZWxscyB0aGF0IGNvbnRhaW5cbiAgICogW2Zvcm11bGFzXShAL2d1aWRlcy9mb3JtdWxhcy9mb3JtdWxhLWNhbGN1bGF0aW9uL2Zvcm11bGEtY2FsY3VsYXRpb24ubWQpLiBUaGlzIGlzIGJlY2F1c2UgYGdldFNvdXJjZURhdGEoKWBcbiAgICogb3BlcmF0ZXMgb24gc291cmNlIGRhdGEgKFtwaHlzaWNhbCBpbmRleGVzXShAL2FwaS9pbmRleE1hcHBlci5tZCkpLFxuICAgKiB3aGVyZWFzIGZvcm11bGFzIG9wZXJhdGUgb24gdmlzdWFsIGRhdGEgKHZpc3VhbCBpbmRleGVzKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRTb3VyY2VEYXRhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcm93XSBGcm9tIHBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIEZyb20gcGh5c2ljYWwgY29sdW1uIGluZGV4IChvciB2aXN1YWwgaW5kZXgsIGlmIGRhdGEgdHlwZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyb3cyXSBUbyBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sdW1uMl0gVG8gcGh5c2ljYWwgY29sdW1uIGluZGV4IChvciB2aXN1YWwgaW5kZXgsIGlmIGRhdGEgdHlwZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHJldHVybnMge0FycmF5W118b2JqZWN0W119IFRoZSB0YWJsZSBkYXRhLlxuICAgKi9cbiAgdGhpcy5nZXRTb3VyY2VEYXRhID0gZnVuY3Rpb24gKHJvdywgY29sdW1uLCByb3cyLCBjb2x1bW4yKSB7XG4gICAgbGV0IGRhdGE7XG4gICAgaWYgKHJvdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhID0gZGF0YVNvdXJjZS5nZXREYXRhKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEgPSBkYXRhU291cmNlLmdldEJ5UmFuZ2UoaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pLCBpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3Jkcyhyb3cyLCBjb2x1bW4yKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzb3VyY2UgZGF0YSBvYmplY3QgYXMgYW4gYXJyYXlzIG9mIGFycmF5cyBmb3JtYXQgZXZlbiB3aGVuIHNvdXJjZSBkYXRhIHdhcyBwcm92aWRlZCBpbiBhbm90aGVyIGZvcm1hdC5cbiAgICogT3B0aW9uYWxseSB5b3UgY2FuIHByb3ZpZGUgYSBjZWxsIHJhbmdlIGJ5IHVzaW5nIHRoZSBgcm93YCwgYGNvbHVtbmAsIGByb3cyYCwgYGNvbHVtbjJgIGFyZ3VtZW50cywgdG8gZ2V0IG9ubHkgYVxuICAgKiBmcmFnbWVudCBvZiB0aGUgdGFibGUgZGF0YS5cbiAgICpcbiAgICogX19Ob3RlX186IFRoaXMgbWV0aG9kIGRvZXMgbm90IHBhcnRpY2lwYXRlIGluIGRhdGEgdHJhbnNmb3JtYXRpb24uIElmIHRoZSB2aXN1YWwgZGF0YSBvZiB0aGUgdGFibGUgaXMgcmVvcmRlcmVkLFxuICAgKiBzb3J0ZWQgb3IgdHJpbW1lZCBvbmx5IHBoeXNpY2FsIGluZGV4ZXMgYXJlIGNvcnJlY3QuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0U291cmNlRGF0YUFycmF5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcm93XSBGcm9tIHBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIEZyb20gcGh5c2ljYWwgY29sdW1uIGluZGV4IChvciB2aXN1YWwgaW5kZXgsIGlmIGRhdGEgdHlwZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtyb3cyXSBUbyBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sdW1uMl0gVG8gcGh5c2ljYWwgY29sdW1uIGluZGV4IChvciB2aXN1YWwgaW5kZXgsIGlmIGRhdGEgdHlwZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiBhcnJheXMuXG4gICAqL1xuICB0aGlzLmdldFNvdXJjZURhdGFBcnJheSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgcm93MiwgY29sdW1uMikge1xuICAgIGxldCBkYXRhO1xuICAgIGlmIChyb3cgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YSA9IGRhdGFTb3VyY2UuZ2V0RGF0YSh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IGRhdGFTb3VyY2UuZ2V0QnlSYW5nZShpbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbiksIGluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHJvdzIsIGNvbHVtbjIpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgY29sdW1uIHZhbHVlcyBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRTb3VyY2VEYXRhQXRDb2xcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIHRoZSBjb2x1bW4ncyBjZWxsIHZhbHVlcy5cbiAgICovXG4gIC8vIFRPRE86IEdldHRpbmcgZGF0YSBmcm9tIGBzb3VyY2VEYXRhYCBzaG91bGQgd29yayBhbHdheXMgb24gcGh5c2ljYWwgaW5kZXhlcy5cbiAgdGhpcy5nZXRTb3VyY2VEYXRhQXRDb2wgPSBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgcmV0dXJuIGRhdGFTb3VyY2UuZ2V0QXRDb2x1bW4oY29sdW1uKTtcbiAgfTtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXBhcmFtICovXG4gIC8qKlxuICAgKiBTZXQgdGhlIHByb3ZpZGVkIHZhbHVlIGluIHRoZSBzb3VyY2UgZGF0YSBzZXQgYXQgdGhlIHByb3ZpZGVkIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHNldFNvdXJjZURhdGFBdENlbGxcbiAgICogQHBhcmFtIHtudW1iZXJ8QXJyYXl9IHJvdyBQaHlzaWNhbCByb3cgaW5kZXggb3IgYXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBwcm9wLCB2YWx1ZV0sIC4uLl1gLlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGNvbHVtbiBQaHlzaWNhbCBjb2x1bW4gaW5kZXggLyBwcm9wIG5hbWUuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIHNldCBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTb3VyY2Ugb2YgdGhlIGNoYW5nZSBhcyBhIHN0cmluZy5cbiAgICovXG4gIC8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1wYXJhbSAqL1xuICB0aGlzLnNldFNvdXJjZURhdGFBdENlbGwgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4sIHZhbHVlLCBzb3VyY2UpIHtcbiAgICBjb25zdCBpbnB1dCA9IHNldERhdGFJbnB1dFRvQXJyYXkocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgICBjb25zdCBpc1RoZXJlQW55U2V0U291cmNlTGlzdGVuZXIgPSB0aGlzLmhhc0hvb2soJ2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCcpO1xuICAgIGNvbnN0IGNoYW5nZXNGb3JIb29rID0gW107XG4gICAgaWYgKGlzVGhlcmVBbnlTZXRTb3VyY2VMaXN0ZW5lcikge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGlucHV0LCBfcmVmOCA9PiB7XG4gICAgICAgIGxldCBbY2hhbmdlUm93LCBjaGFuZ2VQcm9wLCBjaGFuZ2VWYWx1ZV0gPSBfcmVmODtcbiAgICAgICAgY2hhbmdlc0Zvckhvb2sucHVzaChbY2hhbmdlUm93LCBjaGFuZ2VQcm9wLCBkYXRhU291cmNlLmdldEF0Q2VsbChjaGFuZ2VSb3csIGNoYW5nZVByb3ApLFxuICAgICAgICAvLyBUaGUgcHJldmlvdXMgdmFsdWUuXG4gICAgICAgIGNoYW5nZVZhbHVlXSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGlucHV0LCBfcmVmOSA9PiB7XG4gICAgICBsZXQgW2NoYW5nZVJvdywgY2hhbmdlUHJvcCwgY2hhbmdlVmFsdWVdID0gX3JlZjk7XG4gICAgICBkYXRhU291cmNlLnNldEF0Q2VsbChjaGFuZ2VSb3csIGNoYW5nZVByb3AsIGNoYW5nZVZhbHVlKTtcbiAgICB9KTtcbiAgICBpZiAoaXNUaGVyZUFueVNldFNvdXJjZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLnJ1bkhvb2tzKCdhZnRlclNldFNvdXJjZURhdGFBdENlbGwnLCBjaGFuZ2VzRm9ySG9vaywgc291cmNlKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSBpbnN0YW5jZS5nZXRBY3RpdmVFZGl0b3IoKTtcbiAgICBpZiAoYWN0aXZlRWRpdG9yICYmICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShhY3RpdmVFZGl0b3IucmVmcmVzaFZhbHVlKSkge1xuICAgICAgYWN0aXZlRWRpdG9yLnJlZnJlc2hWYWx1ZSgpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbmdsZSByb3cgb2YgdGhlIGRhdGEgKGFycmF5IG9yIG9iamVjdCwgZGVwZW5kaW5nIG9uIHdoYXQgZGF0YSBmb3JtYXQgeW91IHVzZSkuXG4gICAqXG4gICAqIF9fTm90ZV9fOiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBwYXJ0aWNpcGF0ZSBpbiBkYXRhIHRyYW5zZm9ybWF0aW9uLiBJZiB0aGUgdmlzdWFsIGRhdGEgb2YgdGhlIHRhYmxlIGlzIHJlb3JkZXJlZCxcbiAgICogc29ydGVkIG9yIHRyaW1tZWQgb25seSBwaHlzaWNhbCBpbmRleGVzIGFyZSBjb3JyZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldFNvdXJjZURhdGFBdFJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge0FycmF5fG9iamVjdH0gU2luZ2xlIHJvdyBvZiBkYXRhLlxuICAgKi9cbiAgdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3cgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIGRhdGFTb3VyY2UuZ2V0QXRSb3cocm93KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbmdsZSB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRTb3VyY2VEYXRhQXRDZWxsXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHsqfSBDZWxsIGRhdGEuXG4gICAqL1xuICAvLyBUT0RPOiBHZXR0aW5nIGRhdGEgZnJvbSBgc291cmNlRGF0YWAgc2hvdWxkIHdvcmsgYWx3YXlzIG9uIHBoeXNpY2FsIGluZGV4ZXMuXG4gIHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgIHJldHVybiBkYXRhU291cmNlLmdldEF0Q2VsbChyb3csIGNvbHVtbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm5zIGEgc2luZ2xlIHJvdyBvZiB0aGUgZGF0YS5cbiAgICpcbiAgICogX19Ob3RlX186IElmIHJvd3Mgd2VyZSByZW9yZGVyZWQsIHNvcnRlZCBvciB0cmltbWVkLCB0aGUgY3VycmVudGx5IHZpc2libGUgb3JkZXIgd2lsbCBiZSB1c2VkLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERhdGFBdFJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQXJyYXkgb2Ygcm93J3MgY2VsbCBkYXRhLlxuICAgKi9cbiAgdGhpcy5nZXREYXRhQXRSb3cgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgY29uc3QgZGF0YSA9IGRhdGFtYXAuZ2V0UmFuZ2UoaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMocm93LCAwKSwgaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMocm93LCB0aGlzLmNvdW50Q29scygpIC0gMSksIGRhdGFtYXAuREVTVElOQVRJT05fUkVOREVSRVIpO1xuICAgIHJldHVybiBkYXRhWzBdIHx8IFtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmV0dXJucyBhIGRhdGEgdHlwZSBkZWZpbmVkIGluIHRoZSBIYW5kc29udGFibGUgc2V0dGluZ3MgdW5kZXIgdGhlIGB0eXBlYCBrZXkgKHtAbGluayBPcHRpb25zI3R5cGV9KS5cbiAgICogSWYgdGhlcmUgYXJlIGNlbGxzIHdpdGggZGlmZmVyZW50IHR5cGVzIGluIHRoZSBzZWxlY3RlZCByYW5nZSwgaXQgcmV0dXJucyBgJ21peGVkJ2AuXG4gICAqXG4gICAqIF9fTm90ZV9fOiBJZiBkYXRhIGlzIHJlb3JkZXJlZCwgc29ydGVkIG9yIHRyaW1tZWQsIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBvcmRlciB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0RGF0YVR5cGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0Zyb20gRnJvbSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uRnJvbSBGcm9tIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dUbyBUbyB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uVG8gVG8gdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge3N0cmluZ30gQ2VsbCB0eXBlIChlLnE6IGAnbWl4ZWQnYCwgYCd0ZXh0J2AsIGAnbnVtZXJpYydgLCBgJ2F1dG9jb21wbGV0ZSdgKS5cbiAgICovXG4gIHRoaXMuZ2V0RGF0YVR5cGUgPSBmdW5jdGlvbiAocm93RnJvbSwgY29sdW1uRnJvbSwgcm93VG8sIGNvbHVtblRvKSB7XG4gICAgY29uc3QgY29vcmRzID0gcm93RnJvbSA9PT0gdW5kZWZpbmVkID8gWzAsIDAsIHRoaXMuY291bnRSb3dzKCksIHRoaXMuY291bnRDb2xzKCldIDogW3Jvd0Zyb20sIGNvbHVtbkZyb20sIHJvd1RvLCBjb2x1bW5Ub107XG4gICAgY29uc3QgW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydF0gPSBjb29yZHM7XG4gICAgbGV0IFssLCByb3dFbmQsIGNvbHVtbkVuZF0gPSBjb29yZHM7XG4gICAgbGV0IHByZXZpb3VzVHlwZSA9IG51bGw7XG4gICAgbGV0IGN1cnJlbnRUeXBlID0gbnVsbDtcbiAgICBpZiAocm93RW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJvd0VuZCA9IHJvd1N0YXJ0O1xuICAgIH1cbiAgICBpZiAoY29sdW1uRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbHVtbkVuZCA9IGNvbHVtblN0YXJ0O1xuICAgIH1cbiAgICBsZXQgdHlwZSA9ICdtaXhlZCc7XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShNYXRoLm1heChNYXRoLm1pbihyb3dTdGFydCwgcm93RW5kKSwgMCksIE1hdGgubWF4KHJvd1N0YXJ0LCByb3dFbmQpLCByb3cgPT4ge1xuICAgICAgbGV0IGlzVHlwZUVxdWFsID0gdHJ1ZTtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoTWF0aC5tYXgoTWF0aC5taW4oY29sdW1uU3RhcnQsIGNvbHVtbkVuZCksIDApLCBNYXRoLm1heChjb2x1bW5TdGFydCwgY29sdW1uRW5kKSwgY29sdW1uID0+IHtcbiAgICAgICAgY29uc3QgY2VsbFR5cGUgPSB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICAgICAgY3VycmVudFR5cGUgPSBjZWxsVHlwZS50eXBlO1xuICAgICAgICBpZiAocHJldmlvdXNUeXBlKSB7XG4gICAgICAgICAgaXNUeXBlRXF1YWwgPSBwcmV2aW91c1R5cGUgPT09IGN1cnJlbnRUeXBlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzVHlwZSA9IGN1cnJlbnRUeXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1R5cGVFcXVhbDtcbiAgICAgIH0pO1xuICAgICAgdHlwZSA9IGlzVHlwZUVxdWFsID8gY3VycmVudFR5cGUgOiAnbWl4ZWQnO1xuICAgICAgcmV0dXJuIGlzVHlwZUVxdWFsO1xuICAgIH0pO1xuICAgIHJldHVybiB0eXBlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBwcm9wZXJ0eSBkZWZpbmVkIGJ5IHRoZSBga2V5YCBhcmd1bWVudCBmcm9tIHRoZSBjZWxsIG1ldGEgb2JqZWN0IGZvciB0aGUgcHJvdmlkZWQgYHJvd2AgYW5kIGBjb2x1bW5gIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHJlbW92ZUNlbGxNZXRhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFByb3BlcnR5IG5hbWUuXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVSZW1vdmVDZWxsTWV0YVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSZW1vdmVDZWxsTWV0YVxuICAgKi9cbiAgdGhpcy5yZW1vdmVDZWxsTWV0YSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwga2V5KSB7XG4gICAgY29uc3QgW3BoeXNpY2FsUm93LCBwaHlzaWNhbENvbHVtbl0gPSBbdGhpcy50b1BoeXNpY2FsUm93KHJvdyksIHRoaXMudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pXTtcbiAgICBsZXQgY2FjaGVkVmFsdWUgPSBtZXRhTWFuYWdlci5nZXRDZWxsTWV0YUtleVZhbHVlKHBoeXNpY2FsUm93LCBwaHlzaWNhbENvbHVtbiwga2V5KTtcbiAgICBjb25zdCBob29rUmVzdWx0ID0gaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVJlbW92ZUNlbGxNZXRhJywgcm93LCBjb2x1bW4sIGtleSwgY2FjaGVkVmFsdWUpO1xuICAgIGlmIChob29rUmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgbWV0YU1hbmFnZXIucmVtb3ZlQ2VsbE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXkpO1xuICAgICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyUmVtb3ZlQ2VsbE1ldGEnLCByb3csIGNvbHVtbiwga2V5LCBjYWNoZWRWYWx1ZSk7XG4gICAgfVxuICAgIGNhY2hlZFZhbHVlID0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlcyBvciBhZGRzIG9uZSBvciBtb3JlIHJvd3Mgb2YgdGhlIGNlbGwgbWV0YSBvYmplY3RzIHRvIHRoZSBjZWxsIG1ldGEgY29sbGVjdGlvbnMuXG4gICAqXG4gICAqIEBzaW5jZSAwLjMwLjBcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBzcGxpY2VDZWxsc01ldGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEluZGV4IEEgdmlzdWFsIGluZGV4IHRoYXQgc3BlY2lmaWVzIGF0IHdoYXQgcG9zaXRpb24gdG8gYWRkL3JlbW92ZSBpdGVtcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWxldGVBbW91bnQ9MF0gVGhlIG51bWJlciBvZiBpdGVtcyB0byBiZSByZW1vdmVkLiBJZiBzZXQgdG8gMCwgbm8gY2VsbCBtZXRhIG9iamVjdHMgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0gey4uLm9iamVjdH0gW2NlbGxNZXRhUm93c10gVGhlIG5ldyBjZWxsIG1ldGEgcm93IG9iamVjdHMgdG8gYmUgYWRkZWQgdG8gdGhlIGNlbGwgbWV0YSBjb2xsZWN0aW9uLlxuICAgKi9cbiAgdGhpcy5zcGxpY2VDZWxsc01ldGEgPSBmdW5jdGlvbiAodmlzdWFsSW5kZXgpIHtcbiAgICBsZXQgZGVsZXRlQW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgIGZvciAodmFyIF9sZW4xOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGNlbGxNZXRhUm93cyA9IG5ldyBBcnJheShfbGVuMTggPiAyID8gX2xlbjE4IC0gMiA6IDApLCBfa2V5MTggPSAyOyBfa2V5MTggPCBfbGVuMTg7IF9rZXkxOCsrKSB7XG4gICAgICBjZWxsTWV0YVJvd3NbX2tleTE4IC0gMl0gPSBhcmd1bWVudHNbX2tleTE4XTtcbiAgICB9XG4gICAgaWYgKGNlbGxNZXRhUm93cy5sZW5ndGggPiAwICYmICFBcnJheS5pc0FycmF5KGNlbGxNZXRhUm93c1swXSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LicpO1xuICAgIH1cbiAgICBpZiAoZGVsZXRlQW1vdW50ID4gMCkge1xuICAgICAgbWV0YU1hbmFnZXIucmVtb3ZlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2aXN1YWxJbmRleCksIGRlbGV0ZUFtb3VudCk7XG4gICAgfVxuICAgIGlmIChjZWxsTWV0YVJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGNlbGxNZXRhUm93cy5yZXZlcnNlKCksIGNlbGxNZXRhUm93ID0+IHtcbiAgICAgICAgbWV0YU1hbmFnZXIuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2aXN1YWxJbmRleCkpO1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2VsbE1ldGFSb3csIChjZWxsTWV0YSwgY29sdW1uSW5kZXgpID0+IHRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodmlzdWFsSW5kZXgsIGNvbHVtbkluZGV4LCBjZWxsTWV0YSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGluc3RhbmNlLnJlbmRlcigpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZXQgY2VsbCBtZXRhIGRhdGEgb2JqZWN0IGRlZmluZWQgYnkgYHByb3BgIHRvIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtcyBgcm93YCBhbmQgYGNvbHVtbmAuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gc2V0Q2VsbE1ldGFPYmplY3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wIE1ldGEgb2JqZWN0LlxuICAgKi9cbiAgdGhpcy5zZXRDZWxsTWV0YU9iamVjdCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgcHJvcCkge1xuICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHByb3AsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0Q2VsbE1ldGEocm93LCBjb2x1bW4sIGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBTZXRzIGEgcHJvcGVydHkgZGVmaW5lZCBieSB0aGUgYGtleWAgcHJvcGVydHkgdG8gdGhlIG1ldGEgb2JqZWN0IG9mIGEgY2VsbCBjb3JyZXNwb25kaW5nIHRvIHBhcmFtcyBgcm93YCBhbmQgYGNvbHVtbmAuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gc2V0Q2VsbE1ldGFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgUHJvcGVydHkgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFByb3BlcnR5IHZhbHVlLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlU2V0Q2VsbE1ldGFcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyU2V0Q2VsbE1ldGFcbiAgICovXG4gIHRoaXMuc2V0Q2VsbE1ldGEgPSBmdW5jdGlvbiAocm93LCBjb2x1bW4sIGtleSwgdmFsdWUpIHtcbiAgICBjb25zdCBhbGxvd1NldENlbGxNZXRhID0gaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVNldENlbGxNZXRhJywgcm93LCBjb2x1bW4sIGtleSwgdmFsdWUpO1xuICAgIGlmIChhbGxvd1NldENlbGxNZXRhID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcGh5c2ljYWxSb3cgPSByb3c7XG4gICAgbGV0IHBoeXNpY2FsQ29sdW1uID0gY29sdW1uO1xuICAgIGlmIChyb3cgPCB0aGlzLmNvdW50Um93cygpKSB7XG4gICAgICBwaHlzaWNhbFJvdyA9IHRoaXMudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uIDwgdGhpcy5jb3VudENvbHMoKSkge1xuICAgICAgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLnRvUGh5c2ljYWxDb2x1bW4oY29sdW1uKTtcbiAgICB9XG4gICAgbWV0YU1hbmFnZXIuc2V0Q2VsbE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXksIHZhbHVlKTtcbiAgICBpbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJTZXRDZWxsTWV0YScsIHJvdywgY29sdW1uLCBrZXksIHZhbHVlKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGFsbCB0aGUgY2VsbHMgbWV0YSBzZXR0aW5ncyBhdCBsZWFzdCBvbmNlIGdlbmVyYXRlZCBpbiB0aGUgdGFibGUgKGluIG9yZGVyIG9mIGNlbGwgaW5pdGlhbGl6YXRpb24pLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldENlbGxzTWV0YVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2YgQ29sdW1uU2V0dGluZ3Mgb2JqZWN0IGluc3RhbmNlcy5cbiAgICovXG4gIHRoaXMuZ2V0Q2VsbHNNZXRhID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtZXRhTWFuYWdlci5nZXRDZWxsc01ldGEoKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2VsbCBwcm9wZXJ0aWVzIG9iamVjdCBmb3IgdGhlIGdpdmVuIGByb3dgIGFuZCBgY29sdW1uYCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDZWxsTWV0YVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGNlbGwgcHJvcGVydGllcyBvYmplY3QuXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVHZXRDZWxsTWV0YVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJHZXRDZWxsTWV0YVxuICAgKi9cbiAgdGhpcy5nZXRDZWxsTWV0YSA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbikge1xuICAgIGxldCBwaHlzaWNhbFJvdyA9IHRoaXMudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgIGxldCBwaHlzaWNhbENvbHVtbiA9IHRoaXMudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pO1xuICAgIGlmIChwaHlzaWNhbFJvdyA9PT0gbnVsbCkge1xuICAgICAgcGh5c2ljYWxSb3cgPSByb3c7XG4gICAgfVxuICAgIGlmIChwaHlzaWNhbENvbHVtbiA9PT0gbnVsbCkge1xuICAgICAgcGh5c2ljYWxDb2x1bW4gPSBjb2x1bW47XG4gICAgfVxuICAgIHJldHVybiBtZXRhTWFuYWdlci5nZXRDZWxsTWV0YShwaHlzaWNhbFJvdywgcGh5c2ljYWxDb2x1bW4sIHtcbiAgICAgIHZpc3VhbFJvdzogcm93LFxuICAgICAgdmlzdWFsQ29sdW1uOiBjb2x1bW5cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBmb3Igc3BlY2lmaWVkIHBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDZWxsTWV0YUF0Um93XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICB0aGlzLmdldENlbGxNZXRhQXRSb3cgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIG1ldGFNYW5hZ2VyLmdldENlbGxzTWV0YUF0Um93KHJvdyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB5b3VyIFtkYXRhIGZvcm1hdF0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjY29tcGF0aWJsZS1kYXRhLXR5cGVzKVxuICAgKiBhbmQgW2NvbmZpZ3VyYXRpb24gb3B0aW9uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQpXG4gICAqIGFsbG93IGZvciBjaGFuZ2luZyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAqXG4gICAqIFJldHVybnMgYGZhbHNlYCB3aGVuIHlvdXIgZGF0YSBpcyBhbiBhcnJheSBvZiBvYmplY3RzLFxuICAgKiBvciB3aGVuIHlvdSB1c2UgdGhlIFtgY29sdW1uc2BdKEAvYXBpL29wdGlvbnMubWQjY29sdW1ucykgb3B0aW9uLlxuICAgKiBPdGhlcndpc2UsIHJldHVybnMgYHRydWVgLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhKGluc3RhbmNlLmRhdGFUeXBlID09PSAnb2JqZWN0JyB8fCB0YWJsZU1ldGEuY29sdW1ucyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNlbGwgcmVuZGVyZXIgZnVuY3Rpb24gYnkgZ2l2ZW4gYHJvd2AgYW5kIGBjb2x1bW5gIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDZWxsUmVuZGVyZXJcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSByb3dPck1ldGEgVmlzdWFsIHJvdyBpbmRleCBvciBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIHJlbmRlcmVyIGZ1bmN0aW9uLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiAvLyBHZXQgY2VsbCByZW5kZXJlciB1c2luZyBgcm93YCBhbmQgYGNvbHVtbmAgY29vcmRpbmF0ZXMuXG4gICAqIGhvdC5nZXRDZWxsUmVuZGVyZXIoMSwgMSk7XG4gICAqIC8vIEdldCBjZWxsIHJlbmRlcmVyIHVzaW5nIGNlbGwgbWV0YSBvYmplY3QuXG4gICAqIGhvdC5nZXRDZWxsUmVuZGVyZXIoaG90LmdldENlbGxNZXRhKDEsIDEpKTtcbiAgICogYGBgXG4gICAqL1xuICB0aGlzLmdldENlbGxSZW5kZXJlciA9IGZ1bmN0aW9uIChyb3dPck1ldGEsIGNvbHVtbikge1xuICAgIGNvbnN0IGNlbGxSZW5kZXJlciA9IHR5cGVvZiByb3dPck1ldGEgPT09ICdudW1iZXInID8gaW5zdGFuY2UuZ2V0Q2VsbE1ldGEocm93T3JNZXRhLCBjb2x1bW4pLnJlbmRlcmVyIDogcm93T3JNZXRhLnJlbmRlcmVyO1xuICAgIGlmICh0eXBlb2YgY2VsbFJlbmRlcmVyID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuICgwLCBfcmVnaXN0cnkyLmdldFJlbmRlcmVyKShjZWxsUmVuZGVyZXIpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkoY2VsbFJlbmRlcmVyKSA/ICgwLCBfcmVnaXN0cnkyLmdldFJlbmRlcmVyKSgndGV4dCcpIDogY2VsbFJlbmRlcmVyO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjZWxsIGVkaXRvciBjbGFzcyBieSB0aGUgcHJvdmlkZWQgYHJvd2AgYW5kIGBjb2x1bW5gIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRDZWxsRWRpdG9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dPck1ldGEgVmlzdWFsIHJvdyBpbmRleCBvciBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb258Ym9vbGVhbn0gUmV0dXJucyB0aGUgZWRpdG9yIGNsYXNzIG9yIGBmYWxzZWAgaXMgY2VsbCBlZGl0b3IgaXMgZGlzYWJsZWQuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIC8vIEdldCBjZWxsIGVkaXRvciBjbGFzcyB1c2luZyBgcm93YCBhbmQgYGNvbHVtbmAgY29vcmRpbmF0ZXMuXG4gICAqIGhvdC5nZXRDZWxsRWRpdG9yKDEsIDEpO1xuICAgKiAvLyBHZXQgY2VsbCBlZGl0b3IgY2xhc3MgdXNpbmcgY2VsbCBtZXRhIG9iamVjdC5cbiAgICogaG90LmdldENlbGxFZGl0b3IoaG90LmdldENlbGxNZXRhKDEsIDEpKTtcbiAgICogYGBgXG4gICAqL1xuICB0aGlzLmdldENlbGxFZGl0b3IgPSBmdW5jdGlvbiAocm93T3JNZXRhLCBjb2x1bW4pIHtcbiAgICBjb25zdCBjZWxsRWRpdG9yID0gdHlwZW9mIHJvd09yTWV0YSA9PT0gJ251bWJlcicgPyBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3dPck1ldGEsIGNvbHVtbikuZWRpdG9yIDogcm93T3JNZXRhLmVkaXRvcjtcbiAgICBpZiAodHlwZW9mIGNlbGxFZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gKDAsIF9yZWdpc3RyeTMuZ2V0RWRpdG9yKShjZWxsRWRpdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKGNlbGxFZGl0b3IpID8gKDAsIF9yZWdpc3RyeTMuZ2V0RWRpdG9yKSgndGV4dCcpIDogY2VsbEVkaXRvcjtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY2VsbCB2YWxpZGF0b3IgYnkgYHJvd2AgYW5kIGBjb2x1bW5gLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldENlbGxWYWxpZGF0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSByb3dPck1ldGEgVmlzdWFsIHJvdyBpbmRleCBvciBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb258UmVnRXhwfHVuZGVmaW5lZH0gVGhlIHZhbGlkYXRvciBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gR2V0IGNlbGwgdmFsaWRhdG9yIHVzaW5nIGByb3dgIGFuZCBgY29sdW1uYCBjb29yZGluYXRlcy5cbiAgICogaG90LmdldENlbGxWYWxpZGF0b3IoMSwgMSk7XG4gICAqIC8vIEdldCBjZWxsIHZhbGlkYXRvciB1c2luZyBjZWxsIG1ldGEgb2JqZWN0LlxuICAgKiBob3QuZ2V0Q2VsbFZhbGlkYXRvcihob3QuZ2V0Q2VsbE1ldGEoMSwgMSkpO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuZ2V0Q2VsbFZhbGlkYXRvciA9IGZ1bmN0aW9uIChyb3dPck1ldGEsIGNvbHVtbikge1xuICAgIGNvbnN0IGNlbGxWYWxpZGF0b3IgPSB0eXBlb2Ygcm93T3JNZXRhID09PSAnbnVtYmVyJyA/IGluc3RhbmNlLmdldENlbGxNZXRhKHJvd09yTWV0YSwgY29sdW1uKS52YWxpZGF0b3IgOiByb3dPck1ldGEudmFsaWRhdG9yO1xuICAgIGlmICh0eXBlb2YgY2VsbFZhbGlkYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoMCwgX3JlZ2lzdHJ5NC5nZXRWYWxpZGF0b3IpKGNlbGxWYWxpZGF0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbFZhbGlkYXRvcjtcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIGV2ZXJ5IGNlbGwgaW4gdGhlIGRhdGEgc2V0LFxuICAgKiB1c2luZyBhIFt2YWxpZGF0b3IgZnVuY3Rpb25dKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtdmFsaWRhdG9yL2NlbGwtdmFsaWRhdG9yLm1kKSBjb25maWd1cmVkIGZvciBlYWNoIGNlbGwuXG4gICAqXG4gICAqIERvZXNuJ3QgdmFsaWRhdGUgY2VsbHMgdGhhdCBhcmUgY3VycmVudGx5IFt0cmltbWVkXShAL2d1aWRlcy9yb3dzL3Jvdy10cmltbWluZy9yb3ctdHJpbW1pbmcubWQpLFxuICAgKiBbaGlkZGVuXShAL2d1aWRlcy9yb3dzL3Jvdy1oaWRpbmcvcm93LWhpZGluZy5tZCksIG9yIFtmaWx0ZXJlZF0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIubWQpLFxuICAgKiBhcyBzdWNoIGNlbGxzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGRhdGEgc2V0IHVudGlsIHlvdSBicmluZyB0aGVtIGJhY2sgYWdhaW4uXG4gICAqXG4gICAqIEFmdGVyIHRoZSB2YWxpZGF0aW9uLCB0aGUgYGNhbGxiYWNrYCBmdW5jdGlvbiBpcyBmaXJlZCwgd2l0aCB0aGUgYHZhbGlkYCBhcmd1bWVudCBzZXQgdG86XG4gICAqIC0gYHRydWVgIGZvciB2YWxpZCBjZWxsc1xuICAgKiAtIGBmYWxzZWAgZm9yIGludmFsaWQgY2VsbHNcbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB2YWxpZGF0ZUNlbGxzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBob3QudmFsaWRhdGVDZWxscygodmFsaWQpID0+IHtcbiAgICogICBpZiAodmFsaWQpIHtcbiAgICogICAgIC8vIC4uLiBjb2RlIGZvciB2YWxpZGF0ZWQgY2VsbHNcbiAgICogICB9XG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy52YWxpZGF0ZUNlbGxzID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fdmFsaWRhdGVDZWxscyhjYWxsYmFjayk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyByb3dzIHVzaW5nIHRoZWlyIHZhbGlkYXRvciBmdW5jdGlvbnMgYW5kIGNhbGxzIGNhbGxiYWNrIHdoZW4gZmluaXNoZWQuXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgY2VsbHMgaXMgaW52YWxpZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQgd2l0aCBgJ3ZhbGlkJ2AgYXJndW1lbnRzIGFzIGBmYWxzZWAgLSBvdGhlcndpc2UgaXRcbiAgICogIHdvdWxkIGVxdWFsIGB0cnVlYC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB2YWxpZGF0ZVJvd3NcbiAgICogQHBhcmFtIHtBcnJheX0gW3Jvd3NdIEFycmF5IG9mIHZhbGlkYXRpb24gdGFyZ2V0IHZpc3VhbCByb3cgaW5kZXhlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGhvdC52YWxpZGF0ZVJvd3MoWzMsIDQsIDVdLCAodmFsaWQpID0+IHtcbiAgICogICBpZiAodmFsaWQpIHtcbiAgICogICAgIC8vIC4uLiBjb2RlIGZvciB2YWxpZGF0ZWQgcm93c1xuICAgKiAgIH1cbiAgICogfSlcbiAgICogYGBgXG4gICAqL1xuICB0aGlzLnZhbGlkYXRlUm93cyA9IGZ1bmN0aW9uIChyb3dzLCBjYWxsYmFjaykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgfVxuICAgIHRoaXMuX3ZhbGlkYXRlQ2VsbHMoY2FsbGJhY2ssIHJvd3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgY29sdW1ucyB1c2luZyB0aGVpciB2YWxpZGF0b3IgZnVuY3Rpb25zIGFuZCBjYWxscyBjYWxsYmFjayB3aGVuIGZpbmlzaGVkLlxuICAgKlxuICAgKiBJZiBvbmUgb2YgdGhlIGNlbGxzIGlzIGludmFsaWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGZpcmVkIHdpdGggYCd2YWxpZCdgIGFyZ3VtZW50cyBhcyBgZmFsc2VgIC0gb3RoZXJ3aXNlIGl0XG4gICAqICB3b3VsZCBlcXVhbCBgdHJ1ZWAuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gdmFsaWRhdGVDb2x1bW5zXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtjb2x1bW5zXSBBcnJheSBvZiB2YWxpZGF0aW9uIHRhcmdldCB2aXN1YWwgY29sdW1ucyBpbmRleGVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY2FsbGJhY2tdIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LnZhbGlkYXRlQ29sdW1ucyhbMywgNCwgNV0sICh2YWxpZCkgPT4ge1xuICAgKiAgIGlmICh2YWxpZCkge1xuICAgKiAgICAgLy8gLi4uIGNvZGUgZm9yIHZhbGlkYXRlZCBjb2x1bW5zXG4gICAqICAgfVxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovXG4gIHRoaXMudmFsaWRhdGVDb2x1bW5zID0gZnVuY3Rpb24gKGNvbHVtbnMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbHVtbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhbGlkYXRlQ29sdW1ucyBwYXJhbWV0ZXIgYGNvbHVtbnNgIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICB9XG4gICAgdGhpcy5fdmFsaWRhdGVDZWxscyhjYWxsYmFjaywgdW5kZWZpbmVkLCBjb2x1bW5zKTtcbiAgfTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFsbCBjZWxscyB1c2luZyB0aGVpciB2YWxpZGF0b3IgZnVuY3Rpb25zIGFuZCBjYWxscyBjYWxsYmFjayB3aGVuIGZpbmlzaGVkLlxuICAgKlxuICAgKiBJZiBvbmUgb2YgdGhlIGNlbGxzIGlzIGludmFsaWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGZpcmVkIHdpdGggYCd2YWxpZCdgIGFyZ3VtZW50cyBhcyBgZmFsc2VgIC0gb3RoZXJ3aXNlIGl0IHdvdWxkIGVxdWFsIGB0cnVlYC5cbiAgICpcbiAgICogUHJpdmF0ZSB1c2UgaW50ZW5kZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gX3ZhbGlkYXRlQ2VsbHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtyb3dzXSBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIHRhcmdldCB2aXN1YWwgcm93IGluZGV4ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtjb2x1bW5zXSBBbiBhcnJheSBvZiB2YWxpZGF0aW9uIHRhcmdldCB2aXN1YWwgY29sdW1uIGluZGV4ZXMuXG4gICAqL1xuICB0aGlzLl92YWxpZGF0ZUNlbGxzID0gZnVuY3Rpb24gKGNhbGxiYWNrLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgY29uc3Qgd2FpdGluZ0ZvclZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JzUXVldWUoKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHdhaXRpbmdGb3JWYWxpZGF0b3Iub25RdWV1ZUVtcHR5ID0gY2FsbGJhY2s7XG4gICAgfVxuICAgIGxldCBpID0gaW5zdGFuY2UuY291bnRSb3dzKCkgLSAxO1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgIGlmIChyb3dzICE9PSB1bmRlZmluZWQgJiYgcm93cy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICBpIC09IDE7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGogPSBpbnN0YW5jZS5jb3VudENvbHMoKSAtIDE7XG4gICAgICB3aGlsZSAoaiA+PSAwKSB7XG4gICAgICAgIGlmIChjb2x1bW5zICE9PSB1bmRlZmluZWQgJiYgY29sdW1ucy5pbmRleE9mKGopID09PSAtMSkge1xuICAgICAgICAgIGogLT0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLmFkZFZhbGlkYXRvclRvUXVldWUoKTtcbiAgICAgICAgaW5zdGFuY2UudmFsaWRhdGVDZWxsKGluc3RhbmNlLmdldERhdGFBdENlbGwoaSwgaiksIGluc3RhbmNlLmdldENlbGxNZXRhKGksIGopLCByZXN1bHQgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB3YWl0aW5nRm9yVmFsaWRhdG9yLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHdhaXRpbmdGb3JWYWxpZGF0b3IucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCk7XG4gICAgICAgIH0sICd2YWxpZGF0ZUNlbGxzJyk7XG4gICAgICAgIGogLT0gMTtcbiAgICAgIH1cbiAgICAgIGkgLT0gMTtcbiAgICB9XG4gICAgd2FpdGluZ0ZvclZhbGlkYXRvci5jaGVja0lmUXVldWVJc0VtcHR5KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2Ygcm93IGhlYWRlcnMnIHZhbHVlcyAoaWYgdGhleSBhcmUgZW5hYmxlZCkuIElmIHBhcmFtIGByb3dgIHdhcyBnaXZlbiwgaXQgcmV0dXJucyB0aGUgaGVhZGVyIG9mIHRoZSBnaXZlbiByb3cgYXMgYSBzdHJpbmcuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0Um93SGVhZGVyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcm93XSBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAZmlyZXMgSG9va3MjbW9kaWZ5Um93SGVhZGVyXG4gICAqIEByZXR1cm5zIHtBcnJheXxzdHJpbmd8bnVtYmVyfSBBcnJheSBvZiBoZWFkZXIgdmFsdWVzIC8gc2luZ2xlIGhlYWRlciB2YWx1ZS5cbiAgICovXG4gIHRoaXMuZ2V0Um93SGVhZGVyID0gZnVuY3Rpb24gKHJvdykge1xuICAgIGxldCByb3dIZWFkZXIgPSB0YWJsZU1ldGEucm93SGVhZGVycztcbiAgICBsZXQgcGh5c2ljYWxSb3cgPSByb3c7XG4gICAgaWYgKHBoeXNpY2FsUm93ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBoeXNpY2FsUm93ID0gaW5zdGFuY2UucnVuSG9va3MoJ21vZGlmeVJvd0hlYWRlcicsIHBoeXNpY2FsUm93KTtcbiAgICB9XG4gICAgaWYgKHBoeXNpY2FsUm93ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJvd0hlYWRlciA9IFtdO1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShpbnN0YW5jZS5jb3VudFJvd3MoKSAtIDEsIGkgPT4ge1xuICAgICAgICByb3dIZWFkZXIucHVzaChpbnN0YW5jZS5nZXRSb3dIZWFkZXIoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJvd0hlYWRlcikgJiYgcm93SGVhZGVyW3BoeXNpY2FsUm93XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByb3dIZWFkZXIgPSByb3dIZWFkZXJbcGh5c2ljYWxSb3ddO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShyb3dIZWFkZXIpKSB7XG4gICAgICByb3dIZWFkZXIgPSByb3dIZWFkZXIocGh5c2ljYWxSb3cpO1xuICAgIH0gZWxzZSBpZiAocm93SGVhZGVyICYmIHR5cGVvZiByb3dIZWFkZXIgIT09ICdzdHJpbmcnICYmIHR5cGVvZiByb3dIZWFkZXIgIT09ICdudW1iZXInKSB7XG4gICAgICByb3dIZWFkZXIgPSBwaHlzaWNhbFJvdyArIDE7XG4gICAgfVxuICAgIHJldHVybiByb3dIZWFkZXI7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgaWYgdGhpcyB0YWJsZSBpcyBjb25maWd1cmVkIHRvIGRpc3BsYXkgcm93IGhlYWRlcnMuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaGFzUm93SGVhZGVyc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnN0YW5jZSBoYXMgdGhlIHJvdyBoZWFkZXJzIGVuYWJsZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdGhpcy5oYXNSb3dIZWFkZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXRhYmxlTWV0YS5yb3dIZWFkZXJzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGlmIHRoaXMgdGFibGUgaXMgY29uZmlndXJlZCB0byBkaXNwbGF5IGNvbHVtbiBoZWFkZXJzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGhhc0NvbEhlYWRlcnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW5zdGFuY2UgaGFzIHRoZSBjb2x1bW4gaGVhZGVycyBlbmFibGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHRoaXMuaGFzQ29sSGVhZGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGFibGVNZXRhLmNvbEhlYWRlcnMgIT09IHVuZGVmaW5lZCAmJiB0YWJsZU1ldGEuY29sSGVhZGVycyAhPT0gbnVsbCkge1xuICAgICAgLy8gUG9seW1lciBoYXMgZW1wdHkgdmFsdWUgPSBudWxsXG4gICAgICByZXR1cm4gISF0YWJsZU1ldGEuY29sSGVhZGVycztcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBpbnN0YW5jZS5jb3VudENvbHMoKTsgaSA8IGlsZW47IGkrKykge1xuICAgICAgaWYgKGluc3RhbmNlLmdldENvbEhlYWRlcihpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgY29sdW1uIGhlYWRlcnMgKGlmIGNvbHVtbiBoZWFkZXJzIGFyZSBbZW5hYmxlZF0oQC9hcGkvb3B0aW9ucy5tZCNjb2xoZWFkZXJzKSkuXG4gICAqXG4gICAqIFRvIGdldCBhbiBhcnJheSB3aXRoIHRoZSB2YWx1ZXMgb2YgYWxsXG4gICAqIFtib3R0b20tbW9zdF0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9jbGlwYm9hcmQvY2xpcGJvYXJkLm1kI2NvcHktd2l0aC1oZWFkZXJzKSBjb2x1bW4gaGVhZGVycyxcbiAgICogY2FsbCBgZ2V0Q29sSGVhZGVyKClgIHdpdGggbm8gYXJndW1lbnRzLlxuICAgKlxuICAgKiBUbyBnZXQgdGhlIHZhbHVlIG9mIHRoZSBib3R0b20tbW9zdCBoZWFkZXIgb2YgYSBzcGVjaWZpYyBjb2x1bW4sIHVzZSB0aGUgYGNvbHVtbmAgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBUbyBnZXQgdGhlIHZhbHVlIG9mIGEgW3NwZWNpZmljLWxldmVsXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1ncm91cHMvY29sdW1uLWdyb3Vwcy5tZCkgaGVhZGVyXG4gICAqIG9mIGEgc3BlY2lmaWMgY29sdW1uLCB1c2UgdGhlIGBjb2x1bW5gIGFuZCBgaGVhZGVyTGV2ZWxgIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFJlYWQgbW9yZTpcbiAgICogLSBbR3VpZGVzOiBDb2x1bW4gZ3JvdXBzXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1ncm91cHMvY29sdW1uLWdyb3Vwcy5tZClcbiAgICogLSBbT3B0aW9uczogYGNvbEhlYWRlcnNgXShAL2FwaS9vcHRpb25zLm1kI2NvbGhlYWRlcnMpXG4gICAqIC0gW0d1aWRlczogQ29weSB3aXRoIGhlYWRlcnNdKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvY2xpcGJvYXJkL2NsaXBib2FyZC5tZCNjb3B5LXdpdGgtaGVhZGVycylcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gZ2V0IHRoZSBjb250ZW50cyBvZiBhbGwgYm90dG9tLW1vc3QgY29sdW1uIGhlYWRlcnNcbiAgICogaG90LmdldENvbEhlYWRlcigpO1xuICAgKlxuICAgKiAvLyBnZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBib3R0b20tbW9zdCBoZWFkZXIgb2YgYSBzcGVjaWZpYyBjb2x1bW5cbiAgICogaG90LmdldENvbEhlYWRlcig1KTtcbiAgICpcbiAgICogLy8gZ2V0IHRoZSBjb250ZW50cyBvZiBhIHNwZWNpZmljIGNvbHVtbiBoZWFkZXIgYXQgYSBzcGVjaWZpYyBsZXZlbFxuICAgKiBob3QuZ2V0Q29sSGVhZGVyKDUsIC0yKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0Q29sSGVhZGVyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sdW1uXSBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVhZGVyTGV2ZWw9LTFdIChTaW5jZSAxMi4zLjApIEhlYWRlciBsZXZlbCBpbmRleC4gQWNjZXB0cyBwb3NpdGl2ZSAoMCB0byBuKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmUgKC0xIHRvIC1uKSB2YWx1ZXMuIEZvciBwb3NpdGl2ZSB2YWx1ZXMsIDAgcG9pbnRzIHRvIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Btb3N0IGhlYWRlci4gRm9yIG5lZ2F0aXZlIHZhbHVlcywgLTEgcG9pbnRzIHRvIHRoZSBib3R0b20tbW9zdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKHRoZSBoZWFkZXIgY2xvc2VzdCB0byB0aGUgY2VsbHMpLlxuICAgKiBAZmlyZXMgSG9va3MjbW9kaWZ5Q29sSGVhZGVyXG4gICAqIEBmaXJlcyBIb29rcyNtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZVxuICAgKiBAcmV0dXJucyB7QXJyYXl8c3RyaW5nfG51bWJlcn0gQ29sdW1uIGhlYWRlciB2YWx1ZXMuXG4gICAqL1xuICB0aGlzLmdldENvbEhlYWRlciA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBsZXQgaGVhZGVyTGV2ZWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IC0xO1xuICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gaW5zdGFuY2UucnVuSG9va3MoJ21vZGlmeUNvbEhlYWRlcicsIGNvbHVtbik7XG4gICAgaWYgKGNvbHVtbkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG91dCA9IFtdO1xuICAgICAgY29uc3QgaWxlbiA9IGluc3RhbmNlLmNvdW50Q29scygpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbGVuOyBpKyspIHtcbiAgICAgICAgb3V0LnB1c2goaW5zdGFuY2UuZ2V0Q29sSGVhZGVyKGkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGxldCByZXN1bHQgPSB0YWJsZU1ldGEuY29sSGVhZGVycztcbiAgICBjb25zdCB0cmFuc2xhdGVWaXN1YWxJbmRleFRvQ29sdW1ucyA9IGZ1bmN0aW9uICh2aXN1YWxDb2x1bW5JbmRleCkge1xuICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICBjb25zdCBjb2x1bW5zTGVuID0gaW5zdGFuY2UuY291bnRDb2xzKCk7XG4gICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgZm9yICg7IGluZGV4IDwgY29sdW1uc0xlbjsgaW5kZXgrKykge1xuICAgICAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKSh0YWJsZU1ldGEuY29sdW1ucykgJiYgdGFibGVNZXRhLmNvbHVtbnMoaW5kZXgpKSB7XG4gICAgICAgICAgYXJyLnB1c2goaW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyW3Zpc3VhbENvbHVtbkluZGV4XTtcbiAgICB9O1xuICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1uID0gaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihjb2x1bW5JbmRleCk7XG4gICAgY29uc3QgcHJvcCA9IHRyYW5zbGF0ZVZpc3VhbEluZGV4VG9Db2x1bW5zKHBoeXNpY2FsQ29sdW1uKTtcbiAgICBpZiAodGFibGVNZXRhLmNvbEhlYWRlcnMgPT09IGZhbHNlKSB7XG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGFibGVNZXRhLmNvbHVtbnMgJiYgKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKSh0YWJsZU1ldGEuY29sdW1ucykgJiYgdGFibGVNZXRhLmNvbHVtbnMocHJvcCkgJiYgdGFibGVNZXRhLmNvbHVtbnMocHJvcCkudGl0bGUpIHtcbiAgICAgIHJlc3VsdCA9IHRhYmxlTWV0YS5jb2x1bW5zKHByb3ApLnRpdGxlO1xuICAgIH0gZWxzZSBpZiAodGFibGVNZXRhLmNvbHVtbnMgJiYgdGFibGVNZXRhLmNvbHVtbnNbcGh5c2ljYWxDb2x1bW5dICYmIHRhYmxlTWV0YS5jb2x1bW5zW3BoeXNpY2FsQ29sdW1uXS50aXRsZSkge1xuICAgICAgcmVzdWx0ID0gdGFibGVNZXRhLmNvbHVtbnNbcGh5c2ljYWxDb2x1bW5dLnRpdGxlO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0YWJsZU1ldGEuY29sSGVhZGVycykgJiYgdGFibGVNZXRhLmNvbEhlYWRlcnNbcGh5c2ljYWxDb2x1bW5dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHRhYmxlTWV0YS5jb2xIZWFkZXJzW3BoeXNpY2FsQ29sdW1uXTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikodGFibGVNZXRhLmNvbEhlYWRlcnMpKSB7XG4gICAgICByZXN1bHQgPSB0YWJsZU1ldGEuY29sSGVhZGVycyhwaHlzaWNhbENvbHVtbik7XG4gICAgfSBlbHNlIGlmICh0YWJsZU1ldGEuY29sSGVhZGVycyAmJiB0eXBlb2YgdGFibGVNZXRhLmNvbEhlYWRlcnMgIT09ICdzdHJpbmcnICYmIHR5cGVvZiB0YWJsZU1ldGEuY29sSGVhZGVycyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJlc3VsdCA9ICgwLCBfZGF0YS5zcHJlYWRzaGVldENvbHVtbkxhYmVsKShjb2x1bW5JbmRleCk7IC8vIHNlZSAjMTQ1OFxuICAgIH1cbiAgICByZXN1bHQgPSBpbnN0YW5jZS5ydW5Ib29rcygnbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUnLCByZXN1bHQsIGNvbHVtbiwgaGVhZGVyTGV2ZWwpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiBjb2x1bW4gd2lkdGggZnJvbSBzZXR0aW5ncyAobm8gZ3Vlc3NpbmcpLiBQcml2YXRlIHVzZSBpbnRlbmRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBfZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBWaXN1YWwgY29sIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiAoY29sKSB7XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgY2VsbCBtZXRhIG9iamVjdHMgZm9yIGhlYWRlcnMgKG5lZ2F0aXZlIHZhbHVlcylcbiAgICBpZiAoY29sID49IDApIHtcbiAgICAgIGNvbnN0IGNlbGxQcm9wZXJ0aWVzID0gaW5zdGFuY2UuZ2V0Q2VsbE1ldGEoMCwgY29sKTtcbiAgICAgIHdpZHRoID0gY2VsbFByb3BlcnRpZXMud2lkdGg7XG4gICAgfVxuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkIHx8IHdpZHRoID09PSB0YWJsZU1ldGEud2lkdGgpIHtcbiAgICAgIHdpZHRoID0gdGFibGVNZXRhLmNvbFdpZHRocztcbiAgICB9XG4gICAgaWYgKHdpZHRoICE9PSB1bmRlZmluZWQgJiYgd2lkdGggIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAodHlwZW9mIHdpZHRoKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgLy8gYXJyYXlcbiAgICAgICAgICB3aWR0aCA9IHdpZHRoW2NvbF07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICB3aWR0aCA9IHdpZHRoKGNvbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnc3RyaW5nJykge1xuICAgICAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoLCAxMCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aWR0aDtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGhlIHJlcXVlc3RlZCBjb2x1bW4uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0Q29sV2lkdGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBDb2x1bW4gd2lkdGguXG4gICAqIEBmaXJlcyBIb29rcyNtb2RpZnlDb2xXaWR0aFxuICAgKi9cbiAgdGhpcy5nZXRDb2xXaWR0aCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBsZXQgd2lkdGggPSBpbnN0YW5jZS5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoY29sdW1uKTtcbiAgICB3aWR0aCA9IGluc3RhbmNlLnJ1bkhvb2tzKCdtb2RpZnlDb2xXaWR0aCcsIHdpZHRoLCBjb2x1bW4pO1xuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB3aWR0aCA9IF9zcmMuVmlld3BvcnRDb2x1bW5zQ2FsY3VsYXRvci5ERUZBVUxUX1dJRFRIO1xuICAgIH1cbiAgICByZXR1cm4gd2lkdGg7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiByb3cgaGVpZ2h0IGZyb20gc2V0dGluZ3MgKG5vIGd1ZXNzaW5nKS4gUHJpdmF0ZSB1c2UgaW50ZW5kZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gX2dldFJvd0hlaWdodEZyb21TZXR0aW5nc1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICB0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3MgPSBmdW5jdGlvbiAocm93KSB7XG4gICAgLy8gbGV0IGNlbGxQcm9wZXJ0aWVzID0gaW5zdGFuY2UuZ2V0Q2VsbE1ldGEocm93LCAwKTtcbiAgICAvLyBsZXQgaGVpZ2h0ID0gY2VsbFByb3BlcnRpZXMuaGVpZ2h0O1xuICAgIC8vXG4gICAgLy8gaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IGhlaWdodCA9PT0gdGFibGVNZXRhLmhlaWdodCkge1xuICAgIC8vICBoZWlnaHQgPSBjZWxsUHJvcGVydGllcy5yb3dIZWlnaHRzO1xuICAgIC8vIH1cbiAgICBsZXQgaGVpZ2h0ID0gdGFibGVNZXRhLnJvd0hlaWdodHM7XG4gICAgaWYgKGhlaWdodCAhPT0gdW5kZWZpbmVkICYmIGhlaWdodCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgaGVpZ2h0KSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgLy8gYXJyYXlcbiAgICAgICAgICBoZWlnaHQgPSBoZWlnaHRbcm93XTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGhlaWdodCA9IGhlaWdodChyb3cpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBoZWlnaHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGhlaWdodCA9IHBhcnNlSW50KGhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcm93J3MgaGVpZ2h0LCBhcyByZWNvZ25pemVkIGJ5IEhhbmRzb250YWJsZS5cbiAgICpcbiAgICogRGVwZW5kaW5nIG9uIHlvdXIgY29uZmlndXJhdGlvbiwgdGhlIG1ldGhvZCByZXR1cm5zIChpbiBvcmRlciBvZiBwcmlvcml0eSk6XG4gICAqICAgMS4gVGhlIHJvdyBoZWlnaHQgc2V0IGJ5IHRoZSBbYE1hbnVhbFJvd1Jlc2l6ZWBdKEAvYXBpL21hbnVhbFJvd1Jlc2l6ZS5tZCkgcGx1Z2luXG4gICAqICAgICAoaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkKS5cbiAgICogICAyLiBUaGUgcm93IGhlaWdodCBzZXQgYnkgdGhlIFtgcm93SGVpZ2h0c2BdKEAvYXBpL29wdGlvbnMubWQjcm93aGVpZ2h0cykgY29uZmlndXJhdGlvbiBvcHRpb25cbiAgICogICAgIChpZiB0aGUgb3B0aW9uIGlzIHNldCkuXG4gICAqICAgMy4gVGhlIHJvdyBoZWlnaHQgYXMgbWVhc3VyZWQgaW4gdGhlIERPTSBieSB0aGUgW2BBdXRvUm93U2l6ZWBdKEAvYXBpL2F1dG9Sb3dTaXplLm1kKSBwbHVnaW5cbiAgICogICAgIChpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQpLlxuICAgKiAgIDQuIGB1bmRlZmluZWRgLCBpZiBuZWl0aGVyIFtgTWFudWFsUm93UmVzaXplYF0oQC9hcGkvbWFudWFsUm93UmVzaXplLm1kKSxcbiAgICogICAgIG5vciBbYHJvd0hlaWdodHNgXShAL2FwaS9vcHRpb25zLm1kI3Jvd2hlaWdodHMpLFxuICAgKiAgICAgbm9yIFtgQXV0b1Jvd1NpemVgXShAL2FwaS9hdXRvUm93U2l6ZS5tZCkgaXMgdXNlZC5cbiAgICpcbiAgICogVGhlIGhlaWdodCByZXR1cm5lZCBpbmNsdWRlcyAxIHB4IG9mIHRoZSByb3cncyBib3R0b20gYm9yZGVyLlxuICAgKlxuICAgKiBNaW5kIHRoYXQgdGhpcyBtZXRob2QgaXMgZGlmZmVyZW50IGZyb20gdGhlXG4gICAqIFtgZ2V0Um93SGVpZ2h0KClgXShAL2FwaS9hdXRvUm93U2l6ZS5tZCNnZXRyb3doZWlnaHQpIG1ldGhvZFxuICAgKiBvZiB0aGUgW2BBdXRvUm93U2l6ZWBdKEAvYXBpL2F1dG9Sb3dTaXplLm1kKSBwbHVnaW4uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0Um93SGVpZ2h0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgQSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfHVuZGVmaW5lZH0gVGhlIGhlaWdodCBvZiB0aGUgc3BlY2lmaWVkIHJvdywgaW4gcGl4ZWxzLlxuICAgKiBAZmlyZXMgSG9va3MjbW9kaWZ5Um93SGVpZ2h0XG4gICAqL1xuICB0aGlzLmdldFJvd0hlaWdodCA9IGZ1bmN0aW9uIChyb3cpIHtcbiAgICBsZXQgaGVpZ2h0ID0gaW5zdGFuY2UuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyhyb3cpO1xuICAgIGhlaWdodCA9IGluc3RhbmNlLnJ1bkhvb2tzKCdtb2RpZnlSb3dIZWlnaHQnLCBoZWlnaHQsIHJvdyk7XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIGRhdGEgc291cmNlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGNvdW50U291cmNlUm93c1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUb3RhbCBudW1iZXIgb2Ygcm93cy5cbiAgICovXG4gIHRoaXMuY291bnRTb3VyY2VSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkYXRhU291cmNlLmNvdW50Um93cygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY291bnRTb3VyY2VDb2xzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRvdGFsIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKi9cbiAgdGhpcy5jb3VudFNvdXJjZUNvbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGRhdGFTb3VyY2UuY291bnRGaXJzdFJvd0tleXMoKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHZpc3VhbCByb3dzIGluIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBjb3VudFJvd3NcbiAgICogQHJldHVybnMge251bWJlcn0gVG90YWwgbnVtYmVyIG9mIHJvd3MuXG4gICAqL1xuICB0aGlzLmNvdW50Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGF0YW1hcC5nZXRMZW5ndGgoKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIHZpc2libGUgY29sdW1ucyBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY291bnRDb2xzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRvdGFsIG51bWJlciBvZiBjb2x1bW5zLlxuICAgKi9cbiAgdGhpcy5jb3VudENvbHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbWF4Q29scyA9IHRhYmxlTWV0YS5tYXhDb2xzO1xuICAgIGNvbnN0IGRhdGFMZW4gPSB0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7XG4gICAgcmV0dXJuIE1hdGgubWluKG1heENvbHMsIGRhdGFMZW4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgcm93cyBpbmNsdWRpbmcgcm93cyB0aGF0IGFyZSBwYXJ0aWFsbHkgb3IgZnVsbHkgcmVuZGVyZWRcbiAgICogb3V0c2lkZSB0aGUgdGFibGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY291bnRSZW5kZXJlZFJvd3NcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyAtMSBpZiB0YWJsZSBpcyBub3QgdmlzaWJsZS5cbiAgICovXG4gIHRoaXMuY291bnRSZW5kZXJlZFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnZpZXcuX3d0LmRyYXduID8gaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpIDogLTE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3dzIHRoYXQgYXJlIG9ubHkgdmlzaWJsZSBpbiB0aGUgdGFibGUgdmlld3BvcnQuXG4gICAqIFRoZSByb3dzIHRoYXQgYXJlIHBhcnRpYWxseSB2aXNpYmxlIGFyZSBub3QgY291bnRlZC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBjb3VudFZpc2libGVSb3dzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWJlciBvZiB2aXNpYmxlIHJvd3Mgb3IgLTEuXG4gICAqL1xuICB0aGlzLmNvdW50VmlzaWJsZVJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnZpZXcuX3d0LmRyYXduID8gaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93c0NvdW50KCkgOiAtMTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgaW5jbHVkaW5nIGNvbHVtbnMgdGhhdCBhcmUgcGFydGlhbGx5IG9yIGZ1bGx5IHJlbmRlcmVkXG4gICAqIG91dHNpZGUgdGhlIHRhYmxlIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGNvdW50UmVuZGVyZWRDb2xzXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgLTEgaWYgdGFibGUgaXMgbm90IHZpc2libGUuXG4gICAqL1xuICB0aGlzLmNvdW50UmVuZGVyZWRDb2xzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnN0YW5jZS52aWV3Ll93dC5kcmF3biA/IGluc3RhbmNlLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSA6IC0xO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucyB0aGF0IGFyZSBvbmx5IHZpc2libGUgaW4gdGhlIHRhYmxlIHZpZXdwb3J0LlxuICAgKiBUaGUgY29sdW1ucyB0aGF0IGFyZSBwYXJ0aWFsbHkgdmlzaWJsZSBhcmUgbm90IGNvdW50ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY291bnRWaXNpYmxlQ29sc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2YgdmlzaWJsZSBjb2x1bW5zIG9yIC0xLlxuICAgKi9cbiAgdGhpcy5jb3VudFZpc2libGVDb2xzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnN0YW5jZS52aWV3Ll93dC5kcmF3biA/IGluc3RhbmNlLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpIDogLTE7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3cgaGVhZGVycy5cbiAgICpcbiAgICogQHNpbmNlIDE0LjAuMFxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGNvdW50Um93SGVhZGVyc1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2Ygcm93IGhlYWRlcnMuXG4gICAqL1xuICB0aGlzLmNvdW50Um93SGVhZGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52aWV3LmdldFJvd0hlYWRlcnNDb3VudCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgY29sdW1uIGhlYWRlcnMuXG4gICAqXG4gICAqIEBzaW5jZSAxNC4wLjBcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBjb3VudENvbEhlYWRlcnNcbiAgICogQHJldHVybnMge251bWJlcn0gTnVtYmVyIG9mIGNvbHVtbiBoZWFkZXJzLlxuICAgKi9cbiAgdGhpcy5jb3VudENvbEhlYWRlcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVtcHR5IHJvd3MuIElmIHRoZSBvcHRpb25hbCBlbmRpbmcgcGFyYW1ldGVyIGlzIGB0cnVlYCwgcmV0dXJucyB0aGVcbiAgICogbnVtYmVyIG9mIGVtcHR5IHJvd3MgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gY291bnRFbXB0eVJvd3NcbiAgICogQHBhcmFtIHtib29sZWFufSBbZW5kaW5nPWZhbHNlXSBJZiBgdHJ1ZWAsIHdpbGwgb25seSBjb3VudCBlbXB0eSByb3dzIGF0IHRoZSBlbmQgb2YgdGhlIGRhdGEgc291cmNlLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBDb3VudCBlbXB0eSByb3dzLlxuICAgKi9cbiAgdGhpcy5jb3VudEVtcHR5Um93cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgZW5kaW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBsZXQgZW1wdHlSb3dzID0gMDtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2hSZXZlcnNlKShpbnN0YW5jZS5jb3VudFJvd3MoKSAtIDEsIHZpc3VhbEluZGV4ID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZS5pc0VtcHR5Um93KHZpc3VhbEluZGV4KSkge1xuICAgICAgICBlbXB0eVJvd3MgKz0gMTtcbiAgICAgIH0gZWxzZSBpZiAoZW5kaW5nID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZW1wdHlSb3dzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZW1wdHkgY29sdW1ucy4gSWYgdGhlIG9wdGlvbmFsIGVuZGluZyBwYXJhbWV0ZXIgaXMgYHRydWVgLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZW1wdHlcbiAgICogY29sdW1ucyBhdCByaWdodCBoYW5kIGVkZ2Ugb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGNvdW50RW1wdHlDb2xzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2VuZGluZz1mYWxzZV0gSWYgYHRydWVgLCB3aWxsIG9ubHkgY291bnQgZW1wdHkgY29sdW1ucyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIHNvdXJjZSByb3cuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IENvdW50IGVtcHR5IGNvbHMuXG4gICAqL1xuICB0aGlzLmNvdW50RW1wdHlDb2xzID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBlbmRpbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGxldCBlbXB0eUNvbHVtbnMgPSAwO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaFJldmVyc2UpKGluc3RhbmNlLmNvdW50Q29scygpIC0gMSwgdmlzdWFsSW5kZXggPT4ge1xuICAgICAgaWYgKGluc3RhbmNlLmlzRW1wdHlDb2wodmlzdWFsSW5kZXgpKSB7XG4gICAgICAgIGVtcHR5Q29sdW1ucyArPSAxO1xuICAgICAgfSBlbHNlIGlmIChlbmRpbmcgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBlbXB0eUNvbHVtbnM7XG4gIH07XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFsbCBjZWxscyBpbiB0aGUgcm93IGRlY2xhcmVkIGJ5IHRoZSBgcm93YCBhcmd1bWVudCBhcmUgZW1wdHkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaXNFbXB0eVJvd1xuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJvdyBhdCB0aGUgZ2l2ZW4gYHJvd2AgaXMgZW1wdHksIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdGhpcy5pc0VtcHR5Um93ID0gZnVuY3Rpb24gKHJvdykge1xuICAgIHJldHVybiB0YWJsZU1ldGEuaXNFbXB0eVJvdy5jYWxsKGluc3RhbmNlLCByb3cpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbGwgY2VsbHMgaW4gdGhlIHRoZSBjb2x1bW4gZGVjbGFyZWQgYnkgdGhlIGBjb2x1bW5gIGFyZ3VtZW50IGFyZSBlbXB0eS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBpc0VtcHR5Q29sXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gQ29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjb2x1bW4gYXQgdGhlIGdpdmVuIGBjb2xgIGlzIGVtcHR5LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHRoaXMuaXNFbXB0eUNvbCA9IGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICByZXR1cm4gdGFibGVNZXRhLmlzRW1wdHlDb2wuY2FsbChpbnN0YW5jZSwgY29sdW1uKTtcbiAgfTtcblxuICAvKipcbiAgICogU2VsZWN0IGEgc2luZ2xlIGNlbGwsIG9yIGEgc2luZ2xlIHJhbmdlIG9mIGFkamFjZW50IGNlbGxzLlxuICAgKlxuICAgKiBUbyBzZWxlY3QgYSBjZWxsLCBwYXNzIGl0cyB2aXN1YWwgcm93IGFuZCBjb2x1bW4gaW5kZXhlcywgZm9yIGV4YW1wbGU6IGBzZWxlY3RDZWxsKDIsIDQpYC5cbiAgICpcbiAgICogVG8gc2VsZWN0IGEgcmFuZ2UsIHBhc3MgdGhlIHZpc3VhbCBpbmRleGVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBjZWxsIGluIHRoZSByYW5nZSwgZm9yIGV4YW1wbGU6IGBzZWxlY3RDZWxsKDIsIDQsIDMsIDUpYC5cbiAgICpcbiAgICogSWYgeW91ciBjb2x1bW5zIGhhdmUgcHJvcGVydGllcywgeW91IGNhbiBwYXNzIHRob3NlIHByb3BlcnRpZXMnIHZhbHVlcyBpbnN0ZWFkIG9mIGNvbHVtbiBpbmRleGVzLCBmb3IgZXhhbXBsZTogYHNlbGVjdENlbGwoMiwgJ2ZpcnN0X25hbWUnKWAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGBzZWxlY3RDZWxsKClgIGFsc286XG4gICAqICAtIFNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIHRoZSBuZXdseS1zZWxlY3RlZCBjZWxscy5cbiAgICogIC0gU3dpdGNoZXMgdGhlIGtleWJvYXJkIGZvY3VzIHRvIEhhbmRzb250YWJsZSAoYnkgY2FsbGluZyBIYW5kc29udGFibGUncyBbYGxpc3RlbigpYF0oI2xpc3RlbikgbWV0aG9kKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gc2VsZWN0IGEgc2luZ2xlIGNlbGxcbiAgICogaG90LnNlbGVjdENlbGwoMiwgNCk7XG4gICAqXG4gICAqIC8vIHNlbGVjdCBhIHJhbmdlIG9mIGNlbGxzXG4gICAqIGhvdC5zZWxlY3RDZWxsKDIsIDQsIDMsIDUpO1xuICAgKlxuICAgKiAvLyBzZWxlY3QgYSBzaW5nbGUgY2VsbCwgdXNpbmcgYSBjb2x1bW4gcHJvcGVydHlcbiAgICogaG90LnNlbGVjdENlbGwoMiwgJ2ZpcnN0X25hbWUnKTtcbiAgICpcbiAgICogLy8gc2VsZWN0IGEgcmFuZ2Ugb2YgY2VsbHMsIHVzaW5nIGNvbHVtbiBwcm9wZXJ0aWVzXG4gICAqIGhvdC5zZWxlY3RDZWxsKDIsICdmaXJzdF9uYW1lJywgMywgJ2xhc3RfbmFtZScpO1xuICAgKlxuICAgKiAvLyBzZWxlY3QgYSByYW5nZSBvZiBjZWxscywgd2l0aG91dCBzY3JvbGxpbmcgdG8gdGhlbVxuICAgKiBob3Quc2VsZWN0Q2VsbCgyLCA0LCAzLCA1LCBmYWxzZSk7XG4gICAqXG4gICAqIC8vIHNlbGVjdCBhIHJhbmdlIG9mIGNlbGxzLCB3aXRob3V0IHN3aXRjaGluZyB0aGUga2V5Ym9hcmQgZm9jdXMgdG8gSGFuZHNvbnRhYmxlXG4gICAqIGhvdC5zZWxlY3RDZWxsKDIsIDQsIDMsIDUsIG51bGwsIGZhbHNlKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gc2VsZWN0Q2VsbFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEEgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBjb2x1bW4gQSB2aXN1YWwgY29sdW1uIGluZGV4IChgbnVtYmVyYCksIG9yIGEgY29sdW1uIHByb3BlcnR5J3MgdmFsdWUgKGBzdHJpbmdgKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmRSb3ddIElmIHNlbGVjdGluZyBhIHJhbmdlOiB0aGUgdmlzdWFsIHJvdyBpbmRleCBvZiB0aGUgbGFzdCBjZWxsIGluIHRoZSByYW5nZS5cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbZW5kQ29sdW1uXSBJZiBzZWxlY3RpbmcgYSByYW5nZTogdGhlIHZpc3VhbCBjb2x1bW4gaW5kZXggKG9yIGEgY29sdW1uIHByb3BlcnR5J3MgdmFsdWUpIG9mIHRoZSBsYXN0IGNlbGwgaW4gdGhlIHJhbmdlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzY3JvbGxUb0NlbGw9dHJ1ZV0gYHRydWVgOiBzY3JvbGwgdGhlIHZpZXdwb3J0IHRvIHRoZSBuZXdseS1zZWxlY3RlZCBjZWxscy4gYGZhbHNlYDoga2VlcCB0aGUgcHJldmlvdXMgdmlld3BvcnQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYW5nZUxpc3RlbmVyPXRydWVdIGB0cnVlYDogc3dpdGNoIHRoZSBrZXlib2FyZCBmb2N1cyB0byBIYW5kc29udGFibGUuIGBmYWxzZWA6IGtlZXAgdGhlIHByZXZpb3VzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgOiB0aGUgc2VsZWN0aW9uIHdhcyBzdWNjZXNzZnVsLCBgZmFsc2VgOiB0aGUgc2VsZWN0aW9uIGZhaWxlZC5cbiAgICovXG4gIHRoaXMuc2VsZWN0Q2VsbCA9IGZ1bmN0aW9uIChyb3csIGNvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW4pIHtcbiAgICBsZXQgc2Nyb2xsVG9DZWxsID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiB0cnVlO1xuICAgIGxldCBjaGFuZ2VMaXN0ZW5lciA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogdHJ1ZTtcbiAgICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkocm93KSB8fCAoMCwgX21peGVkLmlzVW5kZWZpbmVkKShjb2x1bW4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdENlbGxzKFtbcm93LCBjb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uXV0sIHNjcm9sbFRvQ2VsbCwgY2hhbmdlTGlzdGVuZXIpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgbXVsdGlwbGUgY2VsbHMgb3IgcmFuZ2VzIG9mIGNlbGxzLCBhZGphY2VudCBvciBub24tYWRqYWNlbnQuXG4gICAqXG4gICAqIFlvdSBjYW4gcGFzcyBvbmUgb2YgdGhlIGJlbG93OlxuICAgKiAtIEFuIGFycmF5IG9mIGFycmF5cyAod2hpY2ggbWF0Y2hlcyB0aGUgb3V0cHV0IG9mIEhhbmRzb250YWJsZSdzIFtgZ2V0U2VsZWN0ZWQoKWBdKCNnZXRzZWxlY3RlZCkgbWV0aG9kKS5cbiAgICogLSBBbiBhcnJheSBvZiBbYENlbGxSYW5nZWBdKEAvYXBpL2NlbGxSYW5nZS5tZCkgb2JqZWN0cyAod2hpY2ggbWF0Y2hlcyB0aGUgb3V0cHV0IG9mIEhhbmRzb250YWJsZSdzIFtgZ2V0U2VsZWN0ZWRSYW5nZSgpYF0oI2dldHNlbGVjdGVkcmFuZ2UpIG1ldGhvZCkuXG4gICAqXG4gICAqIFRvIHNlbGVjdCBtdWx0aXBsZSBjZWxscywgcGFzcyB0aGUgdmlzdWFsIHJvdyBhbmQgY29sdW1uIGluZGV4ZXMgb2YgZWFjaCBjZWxsLCBmb3IgZXhhbXBsZTogYGhvdC5zZWxlY3RDZWxscyhbWzEsIDFdLCBbNSwgNV1dKWAuXG4gICAqXG4gICAqIFRvIHNlbGVjdCBtdWx0aXBsZSByYW5nZXMsIHBhc3MgdGhlIHZpc3VhbCBpbmRleGVzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBjZWxsIGluIGVhY2ggcmFuZ2UsIGZvciBleGFtcGxlOiBgaG90LnNlbGVjdENlbGxzKFtbMSwgMSwgMiwgMl0sIFs2LCAyLCAwLCAyXV0pYC5cbiAgICpcbiAgICogSWYgeW91ciBjb2x1bW5zIGhhdmUgcHJvcGVydGllcywgeW91IGNhbiBwYXNzIHRob3NlIHByb3BlcnRpZXMnIHZhbHVlcyBpbnN0ZWFkIG9mIGNvbHVtbiBpbmRleGVzLCBmb3IgZXhhbXBsZTogYGhvdC5zZWxlY3RDZWxscyhbWzEsICdmaXJzdF9uYW1lJ10sIFs1LCAnbGFzdF9uYW1lJ11dKWAuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGBzZWxlY3RDZWxsKClgIGFsc286XG4gICAqICAtIFNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIHRoZSBuZXdseS1zZWxlY3RlZCBjZWxscy5cbiAgICogIC0gU3dpdGNoZXMgdGhlIGtleWJvYXJkIGZvY3VzIHRvIEhhbmRzb250YWJsZSAoYnkgY2FsbGluZyBIYW5kc29udGFibGUncyBbYGxpc3RlbigpYF0oI2xpc3RlbikgbWV0aG9kKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gc2VsZWN0IG5vbi1hZGphY2VudCBjZWxsc1xuICAgKiBob3Quc2VsZWN0Q2VsbHMoW1sxLCAxXSwgWzUsIDVdLCBbMTAsIDEwXV0pO1xuICAgKlxuICAgKiAvLyBzZWxlY3Qgbm9uLWFkamFjZW50IHJhbmdlcyBvZiBjZWxsc1xuICAgKiBob3Quc2VsZWN0Q2VsbHMoW1sxLCAxLCAyLCAyXSwgWzEwLCAxMCwgMjAsIDIwXV0pO1xuICAgKlxuICAgKiAvLyBzZWxlY3QgY2VsbHMgYW5kIHJhbmdlcyBvZiBjZWxsc1xuICAgKiBob3Quc2VsZWN0Q2VsbHMoW1sxLCAxLCAyLCAyXSwgWzMsIDNdLCBbNiwgMiwgMCwgMl1dKTtcbiAgICpcbiAgICogLy8gc2VsZWN0IGNlbGxzLCB1c2luZyBjb2x1bW4gcHJvcGVydGllc1xuICAgKiBob3Quc2VsZWN0Q2VsbHMoW1sxLCAnaWQnLCAyLCAnZmlyc3RfbmFtZSddLCBbMywgJ2Z1bGxfbmFtZSddLCBbNiwgJ2xhc3RfbmFtZScsIDAsICdmaXJzdF9uYW1lJ11dKTtcbiAgICpcbiAgICogLy8gc2VsZWN0IG11bHRpcGxlIHJhbmdlcywgdXNpbmcgYW4gYXJyYXkgb2YgYENlbGxSYW5nZWAgb2JqZWN0c1xuICAgKiBjb25zdCBzZWxlY3RlZCA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAqXG4gICAqIHNlbGVjdGVkWzBdLmZyb20ucm93ID0gMDtcbiAgICogc2VsZWN0ZWRbMF0uZnJvbS5jb2wgPSAwO1xuICAgKiBzZWxlY3RlZFswXS50by5yb3cgPSA1O1xuICAgKiBzZWxlY3RlZFswXS50by5jb2wgPSA1O1xuICAgKlxuICAgKiBzZWxlY3RlZFsxXS5mcm9tLnJvdyA9IDEwO1xuICAgKiBzZWxlY3RlZFsxXS5mcm9tLmNvbCA9IDEwO1xuICAgKiBzZWxlY3RlZFsxXS50by5yb3cgPSAyMDtcbiAgICogc2VsZWN0ZWRbMV0udG8uY29sID0gMjA7XG4gICAqXG4gICAqIGhvdC5zZWxlY3RDZWxscyhzZWxlY3RlZCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQHNpbmNlIDAuMzguMFxuICAgKiBAZnVuY3Rpb24gc2VsZWN0Q2VsbHNcbiAgICogQHBhcmFtIHtBcnJheVtdfENlbGxSYW5nZVtdfSBjb29yZHMgVmlzdWFsIGNvb3JkaW5hdGVzLFxuICAgKiBwYXNzZWQgZWl0aGVyIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoYFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0LCByb3dFbmQsIGNvbHVtbkVuZF0sIC4uLl1gKVxuICAgKiBvciBhcyBhbiBhcnJheSBvZiBbYENlbGxSYW5nZWBdKEAvYXBpL2NlbGxSYW5nZS5tZCkgb2JqZWN0cy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2Nyb2xsVG9DZWxsPXRydWVdIGB0cnVlYDogc2Nyb2xsIHRoZSB2aWV3cG9ydCB0byB0aGUgbmV3bHktc2VsZWN0ZWQgY2VsbHMuIGBmYWxzZWA6IGtlZXAgdGhlIHByZXZpb3VzIHZpZXdwb3J0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFuZ2VMaXN0ZW5lcj10cnVlXSBgdHJ1ZWA6IHN3aXRjaCB0aGUga2V5Ym9hcmQgZm9jdXMgdG8gSGFuZHNvbnRhYmxlLiBgZmFsc2VgOiBrZWVwIHRoZSBwcmV2aW91cyBrZXlib2FyZCBmb2N1cy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYDogdGhlIHNlbGVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgYGZhbHNlYDogdGhlIHNlbGVjdGlvbiBmYWlsZWQuXG4gICAqL1xuICB0aGlzLnNlbGVjdENlbGxzID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjb29yZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtbXV07XG4gICAgbGV0IHNjcm9sbFRvQ2VsbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICBsZXQgY2hhbmdlTGlzdGVuZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgaWYgKHNjcm9sbFRvQ2VsbCA9PT0gZmFsc2UpIHtcbiAgICAgIHZpZXdwb3J0U2Nyb2xsZXIuc3VzcGVuZCgpO1xuICAgIH1cbiAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHNlbGVjdGlvbi5zZWxlY3RDZWxscyhjb29yZHMpO1xuICAgIGlmICh3YXNTZWxlY3RlZCAmJiBjaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgaW5zdGFuY2UubGlzdGVuKCk7XG4gICAgfVxuICAgIHZpZXdwb3J0U2Nyb2xsZXIucmVzdW1lKCk7XG4gICAgcmV0dXJuIHdhc1NlbGVjdGVkO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTZWxlY3QgY29sdW1uIHNwZWNpZmllZCBieSBgc3RhcnRDb2x1bW5gIHZpc3VhbCBpbmRleCwgY29sdW1uIHByb3BlcnR5IG9yIGEgcmFuZ2Ugb2YgY29sdW1ucyBmaW5pc2hpbmcgYXQgYGVuZENvbHVtbmAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIC8vIFNlbGVjdCBjb2x1bW4gdXNpbmcgdmlzdWFsIGluZGV4LlxuICAgKiBob3Quc2VsZWN0Q29sdW1ucygxKTtcbiAgICogLy8gU2VsZWN0IGNvbHVtbiB1c2luZyBjb2x1bW4gcHJvcGVydHkuXG4gICAqIGhvdC5zZWxlY3RDb2x1bW5zKCdpZCcpO1xuICAgKiAvLyBTZWxlY3QgcmFuZ2Ugb2YgY29sdW1ucyB1c2luZyB2aXN1YWwgaW5kZXhlcy5cbiAgICogaG90LnNlbGVjdENvbHVtbnMoMSwgNCk7XG4gICAqIC8vIFNlbGVjdCByYW5nZSBvZiBjb2x1bW5zIHVzaW5nIHZpc3VhbCBpbmRleGVzIGFuZCBtYXJrIHRoZSBmaXJzdCBoZWFkZXIgYXMgaGlnaGxpZ2h0ZWQuXG4gICAqIGhvdC5zZWxlY3RDb2x1bW5zKDEsIDIsIC0xKTtcbiAgICogLy8gU2VsZWN0IHJhbmdlIG9mIGNvbHVtbnMgdXNpbmcgdmlzdWFsIGluZGV4ZXMgYW5kIG1hcmsgdGhlIHNlY29uZCBjZWxsIGFzIGhpZ2hsaWdodGVkLlxuICAgKiBob3Quc2VsZWN0Q29sdW1ucygyLCAxLCAxKTtcbiAgICogLy8gU2VsZWN0IHJhbmdlIG9mIGNvbHVtbnMgdXNpbmcgdmlzdWFsIGluZGV4ZXMgYW5kIG1vdmUgdGhlIGZvY3VzIHBvc2l0aW9uIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSByYW5nZS5cbiAgICogaG90LnNlbGVjdENvbHVtbnMoMiwgNSwgeyByb3c6IDIsIGNvbDogMyB9KTtcbiAgICogLy8gU2VsZWN0IHJhbmdlIG9mIGNvbHVtbnMgdXNpbmcgY29sdW1uIHByb3BlcnRpZXMuXG4gICAqIGhvdC5zZWxlY3RDb2x1bW5zKCdpZCcsICdsYXN0X25hbWUnKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAc2luY2UgMC4zOC4wXG4gICAqIEBmdW5jdGlvbiBzZWxlY3RDb2x1bW5zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydENvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleCBmcm9tIHdoaWNoIHRoZSBzZWxlY3Rpb24gc3RhcnRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZENvbHVtbj1zdGFydENvbHVtbl0gVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXggdG8gd2hpY2ggdGhlIHNlbGVjdGlvbiBmaW5pc2hlcy4gSWYgYGVuZENvbHVtbmBcbiAgICogaXMgbm90IGRlZmluZWQgdGhlIGNvbHVtbiBkZWZpbmVkIGJ5IGBzdGFydENvbHVtbmAgd2lsbCBiZSBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCB7IHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciB9IHwgQ2VsbENvb3Jkc30gW2ZvY3VzUG9zaXRpb249MF0gVGhlIGFyZ3VtZW50IGFsbG93cyBjaGFuZ2luZyB0aGUgY2VsbC9oZWFkZXIgZm9jdXNcbiAgICogcG9zaXRpb24uIFRoZSB2YWx1ZSBjYW4gdGFrZSB2aXN1YWwgcm93IGluZGV4IGZyb20gLU4gdG8gTiwgd2hlcmUgbmVnYXRpdmUgdmFsdWVzIHBvaW50IHRvIHRoZSBoZWFkZXJzIGFuZCBwb3NpdGl2ZVxuICAgKiB2YWx1ZXMgcG9pbnQgdG8gdGhlIGNlbGwgcmFuZ2UuIEFuIG9iamVjdCB3aXRoIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzIGFsc28gY2FuIGJlIHBhc3NlZCB0byBjaGFuZ2UgdGhlIGZvY3VzXG4gICAqIHBvc2l0aW9uIGhvcml6b250YWxseS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBzZWxlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdGhpcy5zZWxlY3RDb2x1bW5zID0gZnVuY3Rpb24gKHN0YXJ0Q29sdW1uKSB7XG4gICAgbGV0IGVuZENvbHVtbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogc3RhcnRDb2x1bW47XG4gICAgbGV0IGZvY3VzUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoc3RhcnRDb2x1bW4sIGVuZENvbHVtbiwgZm9jdXNQb3NpdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIFNlbGVjdCByb3cgc3BlY2lmaWVkIGJ5IGBzdGFydFJvd2AgdmlzdWFsIGluZGV4IG9yIGEgcmFuZ2Ugb2Ygcm93cyBmaW5pc2hpbmcgYXQgYGVuZFJvd2AuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIC8vIFNlbGVjdCByb3cgdXNpbmcgdmlzdWFsIGluZGV4LlxuICAgKiBob3Quc2VsZWN0Um93cygxKTtcbiAgICogLy8gc2VsZWN0IGEgcmFuZ2Ugb2Ygcm93cywgdXNpbmcgdmlzdWFsIGluZGV4ZXMuXG4gICAqIGhvdC5zZWxlY3RSb3dzKDEsIDQpO1xuICAgKiAvLyBzZWxlY3QgYSByYW5nZSBvZiByb3dzLCB1c2luZyB2aXN1YWwgaW5kZXhlcywgYW5kIG1hcmsgdGhlIGhlYWRlciBhcyBoaWdobGlnaHRlZC5cbiAgICogaG90LnNlbGVjdFJvd3MoMSwgMiwgLTEpO1xuICAgKiAvLyBTZWxlY3QgcmFuZ2Ugb2Ygcm93cyB1c2luZyB2aXN1YWwgaW5kZXhlcyBhbmQgbWFyayB0aGUgc2Vjb25kIGNlbGwgYXMgaGlnaGxpZ2h0ZWQuXG4gICAqIGhvdC5zZWxlY3RSb3dzKDIsIDEsIDEpO1xuICAgKiAvLyBTZWxlY3QgcmFuZ2Ugb2Ygcm93cyB1c2luZyB2aXN1YWwgaW5kZXhlcyBhbmQgbW92ZSB0aGUgZm9jdXMgcG9zaXRpb24gc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIHJhbmdlLlxuICAgKiBob3Quc2VsZWN0Um93cygyLCA1LCB7IHJvdzogMiwgY29sOiAzIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBzaW5jZSAwLjM4LjBcbiAgICogQGZ1bmN0aW9uIHNlbGVjdFJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0Um93IFRoZSB2aXN1YWwgcm93IGluZGV4IGZyb20gd2hpY2ggdGhlIHNlbGVjdGlvbiBzdGFydHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kUm93PXN0YXJ0Um93XSBUaGUgdmlzdWFsIHJvdyBpbmRleCB0byB3aGljaCB0aGUgc2VsZWN0aW9uIGZpbmlzaGVzLiBJZiBgZW5kUm93YFxuICAgKiBpcyBub3QgZGVmaW5lZCB0aGUgcm93IGRlZmluZWQgYnkgYHN0YXJ0Um93YCB3aWxsIGJlIHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge251bWJlciB8IHsgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyIH0gfCBDZWxsQ29vcmRzfSBbZm9jdXNQb3NpdGlvbj0wXSBUaGUgYXJndW1lbnQgYWxsb3dzIGNoYW5naW5nIHRoZSBjZWxsL2hlYWRlciBmb2N1c1xuICAgKiBwb3NpdGlvbi4gVGhlIHZhbHVlIGNhbiB0YWtlIHZpc3VhbCByb3cgaW5kZXggZnJvbSAtTiB0byBOLCB3aGVyZSBuZWdhdGl2ZSB2YWx1ZXMgcG9pbnQgdG8gdGhlIGhlYWRlcnMgYW5kIHBvc2l0aXZlXG4gICAqIHZhbHVlcyBwb2ludCB0byB0aGUgY2VsbCByYW5nZS4gQW4gb2JqZWN0IHdpdGggYHJvd2AgYW5kIGBjb2xgIHByb3BlcnRpZXMgYWxzbyBjYW4gYmUgcGFzc2VkIHRvIGNoYW5nZSB0aGUgZm9jdXNcbiAgICogcG9zaXRpb24gdmVydGljYWxseS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBzZWxlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgdGhpcy5zZWxlY3RSb3dzID0gZnVuY3Rpb24gKHN0YXJ0Um93KSB7XG4gICAgbGV0IGVuZFJvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogc3RhcnRSb3c7XG4gICAgbGV0IGZvY3VzUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2VsZWN0aW9uLnNlbGVjdFJvd3Moc3RhcnRSb3csIGVuZFJvdywgZm9jdXNQb3NpdGlvbik7XG4gIH07XG5cbiAgLyoqXG4gICAqIERlc2VsZWN0cyB0aGUgY3VycmVudCBjZWxsIHNlbGVjdGlvbiBvbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZGVzZWxlY3RDZWxsXG4gICAqL1xuICB0aGlzLmRlc2VsZWN0Q2VsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICBzZWxlY3Rpb24uZGVzZWxlY3QoKTtcbiAgfTtcblxuICAvKipcbiAgICogU2VsZWN0IGFsbCBjZWxscyBpbiB0aGUgdGFibGUgZXhjbHVkaW5nIGhlYWRlcnMgYW5kIGNvcm5lciBlbGVtZW50cy5cbiAgICpcbiAgICogVGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpcyBvdmVyd3JpdHRlbi5cbiAgICpcbiAgICogYGBganNcbiAgICogLy8gU2VsZWN0IGFsbCBjZWxscyBpbiB0aGUgdGFibGUgYWxvbmcgd2l0aCByb3cgaGVhZGVycywgaW5jbHVkaW5nIGFsbCBoZWFkZXJzIGFuZCB0aGUgY29ybmVyIGNlbGwuXG4gICAqIC8vIERvZXNuJ3Qgc2VsZWN0IGNvbHVtbiBoZWFkZXJzIGFuZCBjb3JuZXIgZWxlbWVudHMuXG4gICAqIGhvdC5zZWxlY3RBbGwoKTtcbiAgICpcbiAgICogLy8gU2VsZWN0IGFsbCBjZWxscyBpbiB0aGUgdGFibGUsIGluY2x1ZGluZyByb3cgaGVhZGVycyBidXQgZXhjbHVkaW5nIHRoZSBjb3JuZXIgY2VsbCBhbmQgY29sdW1uIGhlYWRlcnMuXG4gICAqIGhvdC5zZWxlY3RBbGwodHJ1ZSwgZmFsc2UpO1xuICAgKlxuICAgKiAvLyBTZWxlY3QgYWxsIGNlbGxzIGluIHRoZSB0YWJsZSwgaW5jbHVkaW5nIGFsbCBoZWFkZXJzIGFuZCB0aGUgY29ybmVyIGNlbGwsIGJ1dCBtb3ZlIHRoZSBmb2N1cy5cbiAgICogLy8gaGlnaGxpZ2h0IHRvIHBvc2l0aW9uIDIsIDFcbiAgICogaG90LnNlbGVjdEFsbCgtMiwgLTEsIHtcbiAgICogICAgZm9jdXNQb3NpdGlvbjogeyByb3c6IDIsIGNvbDogMSB9XG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBTZWxlY3QgYWxsIGNlbGxzIGluIHRoZSB0YWJsZSwgd2l0aG91dCBoZWFkZXJzIGFuZCBjb3JuZXIgZWxlbWVudHMuXG4gICAqIGhvdC5zZWxlY3RBbGwoZmFsc2UpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHNpbmNlIDAuMzguMlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHNlbGVjdEFsbFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUm93SGVhZGVycz1mYWxzZV0gYHRydWVgIElmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGluY2x1ZGUgdGhlIHJvdyBoZWFkZXJzLFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUNvbHVtbkhlYWRlcnM9ZmFsc2VdIGB0cnVlYCBJZiB0aGUgc2VsZWN0aW9uIHNob3VsZCBpbmNsdWRlIHRoZSBjb2x1bW5cbiAgICogaGVhZGVycywgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gQWRkaXRpb25hbCBvYmplY3Qgd2l0aCBvcHRpb25zLiBTaW5jZSAxNC4wLjBcbiAgICogQHBhcmFtIHt7cm93OiBudW1iZXIsIGNvbDogbnVtYmVyfSB8IGJvb2xlYW59IFtvcHRpb25zLmZvY3VzUG9zaXRpb25dIFRoZSBhcmd1bWVudCBhbGxvd3MgY2hhbmdpbmcgdGhlIGNlbGwvaGVhZGVyXG4gICAqIGZvY3VzIHBvc2l0aW9uLiBUaGUgdmFsdWUgdGFrZXMgYW4gb2JqZWN0IHdpdGggYSBgcm93YCBhbmQgYGNvbGAgcHJvcGVydGllcyBmcm9tIC1OIHRvIE4sIHdoZXJlXG4gICAqIG5lZ2F0aXZlIHZhbHVlcyBwb2ludCB0byB0aGUgaGVhZGVycyBhbmQgcG9zaXRpdmUgdmFsdWVzIHBvaW50IHRvIHRoZSBjZWxsIHJhbmdlLiBJZiBgZmFsc2VgLCB0aGUgZm9jdXNcbiAgICogcG9zaXRpb24gd29uJ3QgYmUgY2hhbmdlZC4gRXhhbXBsZTpcbiAgICogYGBganNcbiAgICogaG90LnNlbGVjdEFsbCgwLCAwLCB7XG4gICAqIGZvY3VzUG9zaXRpb246IHsgcm93OiAwLCBjb2w6IDEgfSxcbiAgICogZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6IHRydWVcbiAgICogfSlcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZGlzYWJsZUhlYWRlcnNIaWdobGlnaHRdIElmIGB0cnVlYCwgZGlzYWJsZXMgaGlnaGxpZ2h0aW5nIHRoZSBoZWFkZXJzIGV2ZW4gd2hlblxuICAgKiB0aGUgbG9naWNhbCBjb29yZGluYXRlcyBwb2ludHMgb24gdGhlbS5cbiAgICovXG4gIHRoaXMuc2VsZWN0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBpbmNsdWRlUm93SGVhZGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICBsZXQgaW5jbHVkZUNvbHVtbkhlYWRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGluY2x1ZGVSb3dIZWFkZXJzO1xuICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgdmlld3BvcnRTY3JvbGxlci5za2lwTmV4dFNjcm9sbEN5Y2xlKCk7XG4gICAgc2VsZWN0aW9uLnNlbGVjdEFsbChpbmNsdWRlUm93SGVhZGVycywgaW5jbHVkZUNvbHVtbkhlYWRlcnMsIG9wdGlvbnMpO1xuICB9O1xuICBjb25zdCBnZXRJbmRleFRvU2Nyb2xsID0gKGluZGV4TWFwcGVyLCB2aXN1YWxJbmRleCkgPT4ge1xuICAgIC8vIExvb2tpbmcgZm9yIGEgdmlzdWFsIGluZGV4IG9uIHRoZSByaWdodCBhbmQgdGhlbiAod2hlbiBub3QgZm91bmQpIG9uIHRoZSBsZWZ0LlxuICAgIHJldHVybiBpbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmlzdWFsSW5kZXgsIDEsIHRydWUpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBTY3JvbGwgdmlld3BvcnQgdG8gY29vcmRpbmF0ZXMgc3BlY2lmaWVkIGJ5IHRoZSBgcm93YCBhbmQvb3IgYGNvbGAgb2JqZWN0IHByb3BlcnRpZXMuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIHNjcm9sbCB0aGUgdmlld3BvcnQgdG8gdGhlIHZpc3VhbCByb3cgaW5kZXggKGxlYXZlIHRoZSBob3Jpem9udGFsIHNjcm9sbCB1bnRvdWNoZWQpXG4gICAqIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHsgcm93OiA1MCB9KTtcbiAgICpcbiAgICogLy8gc2Nyb2xsIHRoZSB2aWV3cG9ydCB0byB0aGUgcGFzc2VkIGNvb3JkaW5hdGVzIHNvIHRoYXQgdGhlIGNlbGwgYXQgNTAsIDUwIHdpbGwgYmUgc25hcHBlZCB0b1xuICAgKiAvLyB0aGUgYm90dG9tLWVuZCB0YWJsZSdzIGVkZ2UuXG4gICAqIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICogICByb3c6IDUwLFxuICAgKiAgIGNvbDogNTAsXG4gICAqICAgdmVydGljYWxTbmFwOiAnYm90dG9tJyxcbiAgICogICBob3Jpem9udGFsU25hcDogJ2VuZCcsXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBzY3JvbGxWaWV3cG9ydFRvXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnJvd10gU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdmlzdWFsIHJvd3MgYWxvbmcgdGhlIFkgYXhpcyB0byBzY3JvbGwgdGhlIHZpZXdwb3J0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuY29sXSBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB2aXN1YWwgY29sdW1ucyBhbG9uZyB0aGUgWCBheGlzIHRvIHNjcm9sbCB0aGUgdmlld3BvcnQuXG4gICAqIEBwYXJhbSB7J3RvcCcgfCAnYm90dG9tJ30gW29wdGlvbnMudmVydGljYWxTbmFwXSBEZXRlcm1pbmVzIHRvIHdoaWNoIGVkZ2Ugb2YgdGhlIHRhYmxlIHRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkIGJhc2VkIG9uIHRoZSBwYXNzZWQgY29vcmRpbmF0ZXMuXG4gICAqIFRoaXMgb3B0aW9uIGlzIGEgc3RyaW5nIHdoaWNoIG11c3QgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqIC0gYHRvcGA6IFRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkIHRvIGEgcm93IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlIHRvcCBvZiB0aGUgdmlld3BvcnQ7XG4gICAqIC0gYGJvdHRvbWA6IFRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkIHRvIGEgcm93IGluIHN1Y2ggYSB3YXkgdGhhdCBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlIGJvdHRvbSBvZiB0aGUgdmlld3BvcnQ7XG4gICAqIC0gSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIHRoZSB2ZXJ0aWNhbCBhdXRvLXNuYXBwaW5nIGlzIGVuYWJsZWQuIERlcGVuZGluZyBvbiB3aGVyZSB0aGUgdmlld3BvcnQgaXMgc2Nyb2xsZWQgZnJvbSwgYSByb3cgd2lsbFxuICAgKiBiZSBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSB2aWV3cG9ydC5cbiAgICogQHBhcmFtIHsnc3RhcnQnIHwgJ2VuZCd9IFtvcHRpb25zLmhvcml6b250YWxTbmFwXSBEZXRlcm1pbmVzIHRvIHdoaWNoIGVkZ2Ugb2YgdGhlIHRhYmxlIHRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkIGJhc2VkIG9uIHRoZSBwYXNzZWQgY29vcmRpbmF0ZXMuXG4gICAqIFRoaXMgb3B0aW9uIGlzIGEgc3RyaW5nIHdoaWNoIG11c3QgdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqIC0gYHN0YXJ0YDogVGhlIHZpZXdwb3J0IHdpbGwgYmUgc2Nyb2xsZWQgdG8gYSBjb2x1bW4gaW4gc3VjaCBhIHdheSB0aGF0IGl0IHdpbGwgYmUgcG9zaXRpb25lZCBvbiB0aGUgc3RhcnQgKGxlZnQgZWRnZSBvciByaWdodCwgaWYgdGhlIGxheW91dCBkaXJlY3Rpb24gaXMgc2V0IHRvIGBydGxgKSBvZiB0aGUgdmlld3BvcnQ7XG4gICAqIC0gYGVuZGA6IFRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkIHRvIGEgY29sdW1uIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCB3aWxsIGJlIHBvc2l0aW9uZWQgb24gdGhlIGVuZCAocmlnaHQgZWRnZSBvciBsZWZ0LCBpZiB0aGUgbGF5b3V0IGRpcmVjdGlvbiBpcyBzZXQgdG8gYHJ0bGApIG9mIHRoZSB2aWV3cG9ydDtcbiAgICogLSBJZiB0aGUgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgdGhlIGhvcml6b250YWwgYXV0by1zbmFwcGluZyBpcyBlbmFibGVkLiBEZXBlbmRpbmcgb24gd2hlcmUgdGhlIHZpZXdwb3J0IGlzIHNjcm9sbGVkIGZyb20sIGEgY29sdW1uIHdpbGxcbiAgICogYmUgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSB2aWV3cG9ydC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5jb25zaWRlckhpZGRlbkluZGV4ZXM9dHJ1ZV0gSWYgYHRydWVgLCB3ZSBoYW5kbGUgdmlzdWFsIGluZGV4ZXMsIG90aGVyd2lzZSB3ZSBoYW5kbGUgb25seSBpbmRleGVzIHdoaWNoXG4gICAqIG1heSBiZSByZW5kZXJlZCB3aGVuIHRoZXkgYXJlIGluIHRoZSB2aWV3cG9ydCAod2UgZG9uJ3QgY29uc2lkZXIgaGlkZGVuIGluZGV4ZXMgYXMgdGhleSBhcmVuJ3QgcmVuZGVyZWQpLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHZpZXdwb3J0IHdhcyBzY3JvbGxlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICB0aGlzLnNjcm9sbFZpZXdwb3J0VG8gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBfb3B0aW9ucztcbiAgICAvLyBTdXBwb3J0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFyZ3VtZW50czogKHJvdywgY29sLCBzbmFwVG9Cb3R0b20sIHNuYXBUb1JpZ2h0LCBjb25zaWRlckhpZGRlbkluZGV4ZXMpXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIF9hcmd1bWVudHMkO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLXJlc3QtcGFyYW1zICovXG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICByb3c6IGFyZ3VtZW50c1swXSxcbiAgICAgICAgY29sOiBhcmd1bWVudHNbMV0sXG4gICAgICAgIHZlcnRpY2FsU25hcDogYXJndW1lbnRzWzJdID8gJ2JvdHRvbScgOiAndG9wJyxcbiAgICAgICAgaG9yaXpvbnRhbFNuYXA6IGFyZ3VtZW50c1szXSA/ICdlbmQnIDogJ3N0YXJ0JyxcbiAgICAgICAgY29uc2lkZXJIaWRkZW5JbmRleGVzOiAoX2FyZ3VtZW50cyQgPSBhcmd1bWVudHNbNF0pICE9PSBudWxsICYmIF9hcmd1bWVudHMkICE9PSB2b2lkIDAgPyBfYXJndW1lbnRzJCA6IHRydWVcbiAgICAgIH07XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHByZWZlci1yZXN0LXBhcmFtcyAqL1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICByb3csXG4gICAgICBjb2wsXG4gICAgICB2ZXJ0aWNhbFNuYXAsXG4gICAgICBob3Jpem9udGFsU25hcCxcbiAgICAgIGNvbnNpZGVySGlkZGVuSW5kZXhlc1xuICAgIH0gPSAoX29wdGlvbnMgPSBvcHRpb25zKSAhPT0gbnVsbCAmJiBfb3B0aW9ucyAhPT0gdm9pZCAwID8gX29wdGlvbnMgOiB7fTtcbiAgICBsZXQgc25hcFRvVG9wO1xuICAgIGxldCBzbmFwVG9Cb3R0b207XG4gICAgbGV0IHNuYXBUb0lubGluZVN0YXJ0O1xuICAgIGxldCBzbmFwVG9JbmxpbmVFbmQ7XG4gICAgaWYgKHZlcnRpY2FsU25hcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzbmFwVG9Ub3AgPSB2ZXJ0aWNhbFNuYXAgPT09ICd0b3AnO1xuICAgICAgc25hcFRvQm90dG9tID0gIXNuYXBUb1RvcDtcbiAgICB9XG4gICAgaWYgKGhvcml6b250YWxTbmFwICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNuYXBUb0lubGluZVN0YXJ0ID0gaG9yaXpvbnRhbFNuYXAgPT09ICdzdGFydCc7XG4gICAgICBzbmFwVG9JbmxpbmVFbmQgPSAhc25hcFRvSW5saW5lU3RhcnQ7XG4gICAgfVxuICAgIGxldCByZW5kZXJhYmxlUm93ID0gcm93O1xuICAgIGxldCByZW5kZXJhYmxlQ29sdW1uID0gY29sO1xuICAgIGlmIChjb25zaWRlckhpZGRlbkluZGV4ZXMgPT09IHVuZGVmaW5lZCB8fCBjb25zaWRlckhpZGRlbkluZGV4ZXMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRSb3dHcmlkID0gTnVtYmVyLmlzSW50ZWdlcihyb3cpICYmIHJvdyA+PSAwO1xuICAgICAgY29uc3QgaXNWYWxpZENvbHVtbkdyaWQgPSBOdW1iZXIuaXNJbnRlZ2VyKGNvbCkgJiYgY29sID49IDA7XG4gICAgICBjb25zdCB2aXN1YWxSb3dUb1Njcm9sbCA9IGlzVmFsaWRSb3dHcmlkID8gZ2V0SW5kZXhUb1Njcm9sbCh0aGlzLnJvd0luZGV4TWFwcGVyLCByb3cpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgdmlzdWFsQ29sdW1uVG9TY3JvbGwgPSBpc1ZhbGlkQ29sdW1uR3JpZCA/IGdldEluZGV4VG9TY3JvbGwodGhpcy5jb2x1bW5JbmRleE1hcHBlciwgY29sKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2aXN1YWxSb3dUb1Njcm9sbCA9PT0gbnVsbCB8fCB2aXN1YWxDb2x1bW5Ub1Njcm9sbCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZW5kZXJhYmxlUm93ID0gaXNWYWxpZFJvd0dyaWQgPyBpbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbFJvd1RvU2Nyb2xsKSA6IHJvdztcbiAgICAgIHJlbmRlcmFibGVDb2x1bW4gPSBpc1ZhbGlkQ29sdW1uR3JpZCA/IGluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsQ29sdW1uVG9TY3JvbGwpIDogY29sO1xuICAgIH1cbiAgICBjb25zdCBpc1Jvd0ludGVnZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKHJlbmRlcmFibGVSb3cpO1xuICAgIGNvbnN0IGlzQ29sdW1uSW50ZWdlciA9IE51bWJlci5pc0ludGVnZXIocmVuZGVyYWJsZUNvbHVtbik7XG4gICAgaWYgKGlzUm93SW50ZWdlciAmJiByZW5kZXJhYmxlUm93ID49IDAgJiYgaXNDb2x1bW5JbnRlZ2VyICYmIHJlbmRlcmFibGVDb2x1bW4gPj0gMCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnQoaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMocmVuZGVyYWJsZVJvdywgcmVuZGVyYWJsZUNvbHVtbiksIHNuYXBUb1RvcCwgc25hcFRvSW5saW5lRW5kLCBzbmFwVG9Cb3R0b20sIHNuYXBUb0lubGluZVN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKGlzUm93SW50ZWdlciAmJiByZW5kZXJhYmxlUm93ID49IDAgJiYgKGlzQ29sdW1uSW50ZWdlciAmJiByZW5kZXJhYmxlQ29sdW1uIDwgMCB8fCAhaXNDb2x1bW5JbnRlZ2VyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KHJlbmRlcmFibGVSb3csIHNuYXBUb1RvcCwgc25hcFRvQm90dG9tKTtcbiAgICB9XG4gICAgaWYgKGlzQ29sdW1uSW50ZWdlciAmJiByZW5kZXJhYmxlQ29sdW1uID49IDAgJiYgKGlzUm93SW50ZWdlciAmJiByZW5kZXJhYmxlUm93IDwgMCB8fCAhaXNSb3dJbnRlZ2VyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkocmVuZGVyYWJsZUNvbHVtbiwgc25hcFRvSW5saW5lRW5kLCBzbmFwVG9JbmxpbmVTdGFydCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogU2Nyb2xscyB0aGUgdmlld3BvcnQgdG8gY29vcmRpbmF0ZXMgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBjZWxsLlxuICAgKlxuICAgKiBAc2luY2UgMTQuMC4wXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJTY3JvbGxcbiAgICogQGZ1bmN0aW9uIHNjcm9sbFRvRm9jdXNlZENlbGxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgdGhlIHZpZXdwb3J0IGlzIHNjcm9sbGVkLlxuICAgKi9cbiAgdGhpcy5zY3JvbGxUb0ZvY3VzZWRDZWxsID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogKCkgPT4ge307XG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hZGRIb29rT25jZSgnYWZ0ZXJTY3JvbGwnLCBjYWxsYmFjayk7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0XG4gICAgfSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBpc1Njcm9sbGVkID0gdGhpcy5zY3JvbGxWaWV3cG9ydFRvKGhpZ2hsaWdodC50b09iamVjdCgpKTtcbiAgICBpZiAoaXNTY3JvbGxlZCkge1xuICAgICAgdGhpcy52aWV3LnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUhvb2soJ2FmdGVyU2Nyb2xsJywgY2FsbGJhY2spO1xuICAgICAgdGhpcy5fcmVnaXN0ZXJJbW1lZGlhdGUoKCkgPT4gY2FsbGJhY2soKSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSB0YWJsZSBmcm9tIHRoZSBET00gYW5kIGRlc3Ryb3lzIHRoZSBpbnN0YW5jZSBvZiB0aGUgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGRlc3Ryb3lcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyRGVzdHJveVxuICAgKi9cbiAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgIGluc3RhbmNlLl9jbGVhclRpbWVvdXRzKCk7XG4gICAgaW5zdGFuY2UuX2NsZWFySW1tZWRpYXRlcygpO1xuICAgIGlmIChpbnN0YW5jZS52aWV3KSB7XG4gICAgICAvLyBpbiBjYXNlIEhUIGlzIGRlc3Ryb3llZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gaGFzIGZpbmlzaGVkXG4gICAgICBpbnN0YW5jZS52aWV3LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKGRhdGFTb3VyY2UpIHtcbiAgICAgIGRhdGFTb3VyY2UuZGVzdHJveSgpO1xuICAgIH1cbiAgICBkYXRhU291cmNlID0gbnVsbDtcbiAgICB0aGlzLmdldFNob3J0Y3V0TWFuYWdlcigpLmRlc3Ryb3koKTtcbiAgICBtZXRhTWFuYWdlci5jbGVhckNhY2hlKCk7XG4gICAgZm9yZWlnbkhvdEluc3RhbmNlcy5kZWxldGUodGhpcy5ndWlkKTtcbiAgICBpZiAoKDAsIF9yb290SW5zdGFuY2UuaXNSb290SW5zdGFuY2UpKGluc3RhbmNlKSkge1xuICAgICAgY29uc3QgbGljZW5zZUluZm8gPSB0aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvJyk7XG4gICAgICBpZiAobGljZW5zZUluZm8pIHtcbiAgICAgICAgbGljZW5zZUluZm8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsaWNlbnNlSW5mbyk7XG4gICAgICB9XG4gICAgfVxuICAgICgwLCBfZWxlbWVudC5lbXB0eSkoaW5zdGFuY2Uucm9vdEVsZW1lbnQpO1xuICAgIGV2ZW50TWFuYWdlci5kZXN0cm95KCk7XG4gICAgaWYgKGVkaXRvck1hbmFnZXIpIHtcbiAgICAgIGVkaXRvck1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8vIFRoZSBwbHVnaW4ncyBgZGVzdHJveWAgbWV0aG9kIGlzIGNhbGxlZCBhcyBhIGNvbnNlcXVlbmNlIGFuZCBpdCBzaG91bGQgaGFuZGxlXG4gICAgLy8gdW5yZWdpc3RyYXRpb24gb2YgcGx1Z2luJ3MgbWFwcy4gU29tZSB1bnJlZ2lzdGVyZWQgbWFwcyByZXNldCB0aGUgY2FjaGUuXG4gICAgaW5zdGFuY2UuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpO1xuICAgICAgaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpO1xuICAgICAgcGx1Z2luc1JlZ2lzdHJ5LmdldEl0ZW1zKCkuZm9yRWFjaChfcmVmMTAgPT4ge1xuICAgICAgICBsZXQgWywgcGx1Z2luXSA9IF9yZWYxMDtcbiAgICAgICAgcGx1Z2luLmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgcGx1Z2luc1JlZ2lzdHJ5LmNsZWFyKCk7XG4gICAgICBpbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJEZXN0cm95Jyk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkuZGVzdHJveShpbnN0YW5jZSk7XG4gICAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoaW5zdGFuY2UsIChwcm9wZXJ0eSwga2V5LCBvYmopID0+IHtcbiAgICAgIC8vIHJlcGxhY2UgaW5zdGFuY2UgbWV0aG9kcyB3aXRoIHBvc3QgbW9ydGVtXG4gICAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShwcm9wZXJ0eSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBwb3N0TW9ydGVtKGtleSk7XG4gICAgICB9IGVsc2UgaWYgKGtleSAhPT0gJ2d1aWQnKSB7XG4gICAgICAgIC8vIHJlcGxhY2UgaW5zdGFuY2UgcHJvcGVydGllcyB3aXRoIG51bGwgKHJlc3RvcmVzIG1lbW9yeSlcbiAgICAgICAgLy8gaXQgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IHRoaXMgcHJldmVudHMgYSBtZW1vcnkgbGVhayBzaWRlIGVmZmVjdHMgdGhhdCBzaG93IGl0c2VsZiBpbiBKYXNtaW5lIHRlc3RzXG4gICAgICAgIG9ialtrZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0YW5jZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAvLyByZXBsYWNlIHByaXZhdGUgcHJvcGVydGllcyB3aXRoIG51bGwgKHJlc3RvcmVzIG1lbW9yeSlcbiAgICAvLyBpdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSBidXQgdGhpcyBwcmV2ZW50cyBhIG1lbW9yeSBsZWFrIHNpZGUgZWZmZWN0cyB0aGF0IHNob3cgaXRzZWxmIGluIEphc21pbmUgdGVzdHNcbiAgICBpZiAoZGF0YW1hcCkge1xuICAgICAgZGF0YW1hcC5kZXN0cm95KCk7XG4gICAgfVxuICAgIGRhdGFtYXAgPSBudWxsO1xuICAgIGdyaWQgPSBudWxsO1xuICAgIHNlbGVjdGlvbiA9IG51bGw7XG4gICAgZWRpdG9yTWFuYWdlciA9IG51bGw7XG4gICAgaW5zdGFuY2UgPSBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlbWVudCBmb3IgYWxsIG1ldGhvZHMgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSB3YXMgZGVzdHJveWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIFRoZSBtZXRob2QgbmFtZS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gcG9zdE1vcnRlbShtZXRob2QpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke21ldGhvZH1cIiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYWN0aXZlIGVkaXRvciBjbGFzcyBpbnN0YW5jZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBnZXRBY3RpdmVFZGl0b3JcbiAgICogQHJldHVybnMge0Jhc2VFZGl0b3J9IFRoZSBhY3RpdmUgZWRpdG9yIGluc3RhbmNlLlxuICAgKi9cbiAgdGhpcy5nZXRBY3RpdmVFZGl0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVkaXRvck1hbmFnZXIuZ2V0QWN0aXZlRWRpdG9yKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGx1Z2luIGluc3RhbmNlIGJ5IHByb3ZpZGVkIGl0cyBuYW1lLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldFBsdWdpblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2luTmFtZSBUaGUgcGx1Z2luIG5hbWUuXG4gICAqIEByZXR1cm5zIHtCYXNlUGx1Z2lufHVuZGVmaW5lZH0gVGhlIHBsdWdpbiBpbnN0YW5jZSBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm8gcGx1Z2luLlxuICAgKi9cbiAgdGhpcy5nZXRQbHVnaW4gPSBmdW5jdGlvbiAocGx1Z2luTmFtZSkge1xuICAgIGNvbnN0IHVuaWZpZWRQbHVnaW5OYW1lID0gKDAsIF9zdHJpbmcudG9VcHBlckNhc2VGaXJzdCkocGx1Z2luTmFtZSk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGUgVW5kb1JlZG8gcGx1Z2luIHdoaWNoLCBjdXJyZW50bHkgZG9lc24ndCBmb2xsb3cgdGhlIHBsdWdpbiBhcmNoaXRlY3R1cmUuXG4gICAgaWYgKHVuaWZpZWRQbHVnaW5OYW1lID09PSAnVW5kb1JlZG8nKSB7XG4gICAgICByZXR1cm4gdGhpcy51bmRvUmVkbztcbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbnNSZWdpc3RyeS5nZXRJdGVtKHVuaWZpZWRQbHVnaW5OYW1lKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBuYW1lIG9mIHRoZSBwYXNzZWQgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQHBhcmFtIHtCYXNlUGx1Z2lufSBwbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRoaXMuZ2V0UGx1Z2luTmFtZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciB0aGUgVW5kb1JlZG8gcGx1Z2luIHdoaWNoLCBjdXJyZW50bHkgZG9lc24ndCBmb2xsb3cgdGhlIHBsdWdpbiBhcmNoaXRlY3R1cmUuXG4gICAgaWYgKHBsdWdpbiA9PT0gdGhpcy51bmRvUmVkbykge1xuICAgICAgcmV0dXJuIHRoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTtcbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbnNSZWdpc3RyeS5nZXRJZChwbHVnaW4pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0SW5zdGFuY2VcbiAgICogQHJldHVybnMge0hhbmRzb250YWJsZX0gVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIHRoaXMuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGxpc3RlbmVyIHRvIHRoZSBzcGVjaWZpZWQgaG9vayBuYW1lIChvbmx5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gYWRkSG9va1xuICAgKiBAc2VlIEhvb2tzI2FkZFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEhvb2sgbmFtZSAoc2VlIHtAbGluayBIb29rc30pLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBjYWxsYmFjayBGdW5jdGlvbiBvciBhcnJheSBvZiBmdW5jdGlvbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3JkZXJJbmRleF0gT3JkZXIgaW5kZXggb2YgdGhlIGNhbGxiYWNrLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmID4gMCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIG90aGVycywgZm9yIGV4YW1wbGUsIHdpdGggYW4gaW5kZXggb2YgMSwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYmVmb3JlIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMiwgMywgZXRjLiwgYnV0IGFmdGVyIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMCBhbmQgbG93ZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPCAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG90aGVycywgZm9yIGV4YW1wbGUsIHdpdGggYW4gaW5kZXggb2YgLTEsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGFmdGVyIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgLTIsIC0zLCBldGMuLCBidXQgYmVmb3JlIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMCBhbmQgaGlnaGVyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIDAgb3Igbm8gb3JkZXIgaW5kZXggaXMgcHJvdmlkZWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGJldHdlZW4gdGhlIFwibmVnYXRpdmVcIiBhbmQgXCJwb3NpdGl2ZVwiIGluZGV4ZXMuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGhvdC5hZGRIb29rKCdiZWZvcmVJbml0JywgbXlDYWxsYmFjayk7XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5hZGRIb29rID0gZnVuY3Rpb24gKGtleSwgY2FsbGJhY2ssIG9yZGVySW5kZXgpIHtcbiAgICBfcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5hZGQoa2V5LCBjYWxsYmFjaywgaW5zdGFuY2UsIG9yZGVySW5kZXgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBmb3IgYSBzcGVjaWZpZWQgaG9vayBuYW1lIHRoZXJlIGFyZSBhZGRlZCBsaXN0ZW5lcnMgKG9ubHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlKS4gQWxsIGF2YWlsYWJsZVxuICAgKiBob29rcyB5b3Ugd2lsbCBmaW5kIHtAbGluayBIb29rc30uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaGFzSG9va1xuICAgKiBAc2VlIEhvb2tzI2hhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEhvb2sgbmFtZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGhhc0JlZm9yZUluaXRMaXN0ZW5lcnMgPSBob3QuaGFzSG9vaygnYmVmb3JlSW5pdCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMuaGFzSG9vayA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkuaGFzKGtleSwgaW5zdGFuY2UpIHx8IF9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLmhhcyhrZXkpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGxpc3RlbmVyIHRvIHNwZWNpZmllZCBob29rIG5hbWUgKG9ubHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlKS4gQWZ0ZXIgdGhlIGxpc3RlbmVyIGlzIHRyaWdnZXJlZCxcbiAgICogaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gYWRkSG9va09uY2VcbiAgICogQHNlZSBIb29rcyNvbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lIChzZWUge0BsaW5rIEhvb2tzfSkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IGNhbGxiYWNrIEZ1bmN0aW9uIG9yIGFycmF5IG9mIGZ1bmN0aW9ucy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlckluZGV4XSBPcmRlciBpbmRleCBvZiB0aGUgY2FsbGJhY2suXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPiAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBhZnRlciB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAxLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAyLCAzLCBldGMuLCBidXQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBsb3dlci5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8IDAsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGJlZm9yZSB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAtMSwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAtMiwgLTMsIGV0Yy4sIGJ1dCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBoaWdoZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgMCBvciBubyBvcmRlciBpbmRleCBpcyBwcm92aWRlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiB0aGUgXCJuZWdhdGl2ZVwiIGFuZCBcInBvc2l0aXZlXCIgaW5kZXhlcy5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogaG90LmFkZEhvb2tPbmNlKCdiZWZvcmVJbml0JywgbXlDYWxsYmFjayk7XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5hZGRIb29rT25jZSA9IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrLCBvcmRlckluZGV4KSB7XG4gICAgX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkub25jZShrZXksIGNhbGxiYWNrLCBpbnN0YW5jZSwgb3JkZXJJbmRleCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGhvb2sgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHdpdGgge0BsaW5rIENvcmUjYWRkSG9va30uXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gcmVtb3ZlSG9va1xuICAgKiBAc2VlIEhvb2tzI3JlbW92ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEhvb2sgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgUmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB3aGljaCBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIHtAbGluayBDb3JlI2FkZEhvb2t9LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBob3QucmVtb3ZlSG9vaygnYmVmb3JlSW5pdCcsIG15Q2FsbGJhY2spO1xuICAgKiBgYGBcbiAgICovXG4gIHRoaXMucmVtb3ZlSG9vayA9IGZ1bmN0aW9uIChrZXksIGNhbGxiYWNrKSB7XG4gICAgX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVtb3ZlKGtleSwgY2FsbGJhY2ssIGluc3RhbmNlKTtcbiAgfTtcblxuICAvKipcbiAgICogUnVuIHRoZSBjYWxsYmFja3MgZm9yIHRoZSBob29rIHByb3ZpZGVkIGluIHRoZSBga2V5YCBhcmd1bWVudCB1c2luZyB0aGUgcGFyYW1ldGVycyBnaXZlbiBpbiB0aGUgb3RoZXIgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIHJ1bkhvb2tzXG4gICAqIEBzZWUgSG9va3MjcnVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lLlxuICAgKiBAcGFyYW0geyp9IFtwMV0gQXJndW1lbnQgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHsqfSBbcDJdIEFyZ3VtZW50IHBhc3NlZCB0byB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Kn0gW3AzXSBBcmd1bWVudCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0geyp9IFtwNF0gQXJndW1lbnQgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay5cbiAgICogQHBhcmFtIHsqfSBbcDVdIEFyZ3VtZW50IHBhc3NlZCB0byB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7Kn0gW3A2XSBBcmd1bWVudCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gUnVuIGJ1aWx0LWluIGhvb2tcbiAgICogaG90LnJ1bkhvb2tzKCdiZWZvcmVJbml0Jyk7XG4gICAqIC8vIFJ1biBjdXN0b20gaG9va1xuICAgKiBob3QucnVuSG9va3MoJ2N1c3RvbUFjdGlvbicsIDEwLCAnZm9vJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgdGhpcy5ydW5Ib29rcyA9IGZ1bmN0aW9uIChrZXksIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpIHtcbiAgICByZXR1cm4gX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucnVuKGluc3RhbmNlLCBrZXksIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgbGFuZ3VhZ2UgcGhyYXNlIGZvciBzcGVjaWZpZWQgZGljdGlvbmFyeSBrZXkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gZ2V0VHJhbnNsYXRlZFBocmFzZVxuICAgKiBAc2luY2UgMC4zNS4wXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkaWN0aW9uYXJ5S2V5IENvbnN0YW50IHdoaWNoIGlzIGRpY3Rpb25hcnkga2V5LlxuICAgKiBAcGFyYW0geyp9IGV4dHJhQXJndW1lbnRzIEFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIGhhbmRsZWQgYnkgZm9ybWF0dGVycy5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSA9IGZ1bmN0aW9uIChkaWN0aW9uYXJ5S2V5LCBleHRyYUFyZ3VtZW50cykge1xuICAgIHJldHVybiAoMCwgX3JlZ2lzdHJ5NS5nZXRUcmFuc2xhdGVkUGhyYXNlKSh0YWJsZU1ldGEubGFuZ3VhZ2UsIGRpY3Rpb25hcnlLZXksIGV4dHJhQXJndW1lbnRzKTtcbiAgfTtcblxuICAvKipcbiAgICogQ29udmVydHMgaW5zdGFuY2UgaW50byBvdXRlckhUTUwgb2YgSFRNTFRhYmxlRWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB0b0hUTUxcbiAgICogQHNpbmNlIDcuMS4wXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICB0aGlzLnRvSFRNTCA9ICgpID0+ICgwLCBfcGFyc2VUYWJsZS5pbnN0YW5jZVRvSFRNTCkodGhpcyk7XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGluc3RhbmNlIGludG8gSFRNTFRhYmxlRWxlbWVudC5cbiAgICpcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiB0b1RhYmxlRWxlbWVudFxuICAgKiBAc2luY2UgNy4xLjBcbiAgICogQHJldHVybnMge0hUTUxUYWJsZUVsZW1lbnR9XG4gICAqL1xuICB0aGlzLnRvVGFibGVFbGVtZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRlbXBFbGVtZW50ID0gdGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcEVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmJlZ2luJywgKDAsIF9wYXJzZVRhYmxlLmluc3RhbmNlVG9IVE1MKSh0aGlzKSk7XG4gICAgcmV0dXJuIHRlbXBFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICB9O1xuICB0aGlzLnRpbWVvdXRzID0gW107XG5cbiAgLyoqXG4gICAqIFNldHMgdGltZW91dC4gUHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBjbGVhciBhbGwga25vd24gdGltZW91dHMgd2hlbiBgZGVzdHJveWAgbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8RnVuY3Rpb259IGhhbmRsZSBIYW5kbGVyIHJldHVybmVkIGZyb20gc2V0VGltZW91dCBvciBmdW5jdGlvbiB0byBleGVjdXRlIChpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgd3JhcGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgc2V0VGltZW91dCBmdW5jdGlvbikuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsYXk9MF0gSWYgZmlyc3QgYXJndW1lbnQgaXMgcGFzc2VkIGFzIGEgZnVuY3Rpb24gdGhpcyBhcmd1bWVudCBzZXQgZGVsYXkgb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGF0IGZ1bmN0aW9uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGhpcy5fcmVnaXN0ZXJUaW1lb3V0ID0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgIGxldCBkZWxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgICBsZXQgaGFuZGxlRnVuYyA9IGhhbmRsZTtcbiAgICBpZiAodHlwZW9mIGhhbmRsZUZ1bmMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZUZ1bmMgPSBzZXRUaW1lb3V0KGhhbmRsZUZ1bmMsIGRlbGF5KTtcbiAgICB9XG4gICAgdGhpcy50aW1lb3V0cy5wdXNoKGhhbmRsZUZ1bmMpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGtub3duIHRpbWVvdXRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdGhpcy5fY2xlYXJUaW1lb3V0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy50aW1lb3V0cywgaGFuZGxlciA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoaGFuZGxlcik7XG4gICAgfSk7XG4gIH07XG4gIHRoaXMuaW1tZWRpYXRlcyA9IFtdO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGZ1bmN0aW9uIGV4ZWN1dGlvbiB0byB0aGUgbmV4dCBldmVudCBsb29wIGN5Y2xlLiBQdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIGNsZWFyIGFsbCBrbm93biB0aW1lb3V0cyB3aGVuIGBkZXN0cm95YCBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiB0byBiZSBkZWxheWVkIGluIGV4ZWN1dGlvbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwga25vd24gdGltZW91dHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0aGlzLl9jbGVhckltbWVkaWF0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaW1tZWRpYXRlcywgaGFuZGxlciA9PiB7XG4gICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGVyKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIEVkaXRvck1hbmFnZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtFZGl0b3JNYW5hZ2VyfVxuICAgKi9cbiAgdGhpcy5fZ2V0RWRpdG9yTWFuYWdlciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZWRpdG9yTWFuYWdlcjtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgY3VycmVudGx5IGl0IGlzIFJUTCBkaXJlY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAZnVuY3Rpb24gaXNSdGxcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgUlRMLlxuICAgKi9cbiAgdGhpcy5pc1J0bCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zdGFuY2Uucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGluc3RhbmNlLnJvb3RFbGVtZW50KS5kaXJlY3Rpb24gPT09ICdydGwnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjdXJyZW50bHkgaXQgaXMgTFRSIGRpcmVjdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlcm9mIENvcmUjXG4gICAqIEBmdW5jdGlvbiBpc0x0clxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBMVFIuXG4gICAqL1xuICB0aGlzLmlzTHRyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhaW5zdGFuY2UuaXNSdGwoKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyAxIGZvciBMVFI7IC0xIGZvciBSVEwuIFVzZWZ1bCBmb3IgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAbWVtYmVyb2YgQ29yZSNcbiAgICogQGZ1bmN0aW9uIGdldERpcmVjdGlvbkZhY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIDEgZm9yIExUUjsgLTEgZm9yIFJUTC5cbiAgICovXG4gIHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnN0YW5jZS5pc0x0cigpID8gMSA6IC0xO1xuICB9O1xuICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSAoMCwgX3Nob3J0Y3V0cy5jcmVhdGVTaG9ydGN1dE1hbmFnZXIpKHtcbiAgICBoYW5kbGVFdmVudCgpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5pc0xpc3RlbmluZygpO1xuICAgIH0sXG4gICAgYmVmb3JlS2V5RG93bjogZXZlbnQgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucnVuSG9va3MoJ2JlZm9yZUtleURvd24nLCBldmVudCk7XG4gICAgfSxcbiAgICBhZnRlcktleURvd246IGV2ZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgIC8vIEhhbmRzb250YWJsZSBjb3VsZCBiZSBkZXN0cm95ZWQgYWZ0ZXIgcGVyZm9ybWluZyBhY3Rpb24gKGV4ZWN1dGluZyBhIGNhbGxiYWNrKS5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5zdGFuY2UucnVuSG9va3MoJ2FmdGVyRG9jdW1lbnRLZXlEb3duJywgZXZlbnQpO1xuICAgIH0sXG4gICAgb3duZXJXaW5kb3c6IHRoaXMucm9vdFdpbmRvd1xuICB9KTtcbiAgdGhpcy5hZGRIb29rKCdiZWZvcmVPbkNlbGxNb3VzZURvd24nLCBldmVudCA9PiB7XG4gICAgLy8gUmVsZWFzaW5nIGtleXMgYXMgc29tZSBicm93c2VyL3N5c3RlbSBzaG9ydGN1dHMgYnJlYWsgZXZlbnRzIHNlcXVlbmNlICh0aHVzIHRoZSBga2V5dXBgIGV2ZW50IGlzbid0IHRyaWdnZXJlZCkuXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgPT09IGZhbHNlICYmIGV2ZW50Lm1ldGFLZXkgPT09IGZhbHNlKSB7XG4gICAgICBzaG9ydGN1dE1hbmFnZXIucmVsZWFzZVByZXNzZWRLZXlzKCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogUmV0dXJucyBpbnN0YW5jZSBvZiBhIG1hbmFnZXIgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHNob3J0Y3V0cyBzdG9yZWQgaW4gc29tZSBjb250ZXh0cy4gSXQgcnVuIGFjdGlvbnMgYWZ0ZXJcbiAgICogcHJlc3Npbmcga2V5IGNvbWJpbmF0aW9uIGluIGFjdGl2ZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAc2luY2UgMTIuMC4wXG4gICAqIEBmdW5jdGlvbiBnZXRTaG9ydGN1dE1hbmFnZXJcbiAgICogQHJldHVybnMge1Nob3J0Y3V0TWFuYWdlcn0gSW5zdGFuY2Ugb2Yge0BsaW5rIFNob3J0Y3V0TWFuYWdlcn1cbiAgICovXG4gIHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzaG9ydGN1dE1hbmFnZXI7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgRm9jdXMgTWFuYWdlciByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIGJyb3dzZXIncyBmb2N1cyBpbiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBDb3JlI1xuICAgKiBAc2luY2UgMTQuMC4wXG4gICAqIEBmdW5jdGlvbiBnZXRGb2N1c01hbmFnZXJcbiAgICogQHJldHVybnMge0ZvY3VzTWFuYWdlcn1cbiAgICovXG4gIHRoaXMuZ2V0Rm9jdXNNYW5hZ2VyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmb2N1c01hbmFnZXI7XG4gIH07XG4gICgwLCBfcmVnaXN0cnkuZ2V0UGx1Z2luc05hbWVzKSgpLmZvckVhY2gocGx1Z2luTmFtZSA9PiB7XG4gICAgY29uc3QgUGx1Z2luQ2xhc3MgPSAoMCwgX3JlZ2lzdHJ5LmdldFBsdWdpbikocGx1Z2luTmFtZSk7XG4gICAgcGx1Z2luc1JlZ2lzdHJ5LmFkZEl0ZW0ocGx1Z2luTmFtZSwgbmV3IFBsdWdpbkNsYXNzKHRoaXMpKTtcbiAgfSk7XG4gICgwLCBfc2hvcnRjdXRDb250ZXh0cy5yZWdpc3RlckFsbFNob3J0Y3V0Q29udGV4dHMpKGluc3RhbmNlKTtcbiAgc2hvcnRjdXRNYW5hZ2VyLnNldEFjdGl2ZUNvbnRleHROYW1lKCdncmlkJyk7XG4gIF9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJ1bihpbnN0YW5jZSwgJ2NvbnN0cnVjdCcpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pbnN0YWxsRm9jdXNEZXRlY3RvciA9IGluc3RhbGxGb2N1c0RldGVjdG9yO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2ExMXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hMTF5XCIpO1xuLyoqXG4gKiBJbnN0YWxscyBhIGZvY3VzIGRldGVjdG9yIG1vZHVsZS4gVGhlIG1vZHVsZSBhcHBlbmRzIHR3byBpbnB1dCBlbGVtZW50cyBpbnRvIHRoZSBET00gc2lkZSBieSBzaWRlLlxuICogV2hlbiB0aGUgZmlyc3QgaW5wdXQgaXMgZm9jdXNlZCwgdGhlbiBpdCBtZWFucyB0aGF0IGEgdXNlciBlbnRlcmVkIHRvIHRoZSBjb21wb25lbnQgdXNpbmcgdGhlIFRBQiBrZXlcbiAqIGZyb20gdGhlIGVsZW1lbnQgYWJvdmUuIFdoZW4gdGhlIHNlY29uZCBpbnB1dCBpcyBmb2N1c2VkLCBhIHVzZXIgZW50ZXJzIHRvIHRoZSBjb21wb25lbnQgZnJvbVxuICogdGhlIGVsZW1lbnQgYmVsb3cgdGhlIHRhYmxlLiBFYWNoIGFjdGlvbiwgb25jZSBkZXRlY3RlZCwgdHJpZ2dlcnMgdGhlIHNwZWNpZmljIGhvb2suXG4gKlxuICogQHBhcmFtIHtIYW5kc29udGFibGV9IGhvdCBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHt7IG9uRm9jdXNGcm9tVG9wOiBGdW5jdGlvbiwgb25Gb2N1c0Zyb21Cb3R0b206IEZ1bmN0aW9uIH19IGhvb2tzIEFuIG9iamVjdCB3aXRoIGRlZmluZWQgY2FsbGJhY2tzIHRvIGNhbGwuXG4gKiBAcmV0dXJucyB7eyBhY3RpdmF0ZTogRnVuY3Rpb24sIGRlYWN0aXZhdGU6IEZ1bmN0aW9uIH19XG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxGb2N1c0RldGVjdG9yKGhvdCkge1xuICBsZXQgaG9va3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBjb25zdCByb290RWxlbWVudCA9IGhvdC5yb290RWxlbWVudDtcbiAgY29uc3QgaW5wdXRUcmFwVG9wID0gY3JlYXRlSW5wdXRFbGVtZW50KGhvdCk7XG4gIGNvbnN0IGlucHV0VHJhcEJvdHRvbSA9IGNyZWF0ZUlucHV0RWxlbWVudChob3QpO1xuICBpbnB1dFRyYXBUb3AuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiBob29rcyA9PT0gbnVsbCB8fCBob29rcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogaG9va3Mub25Gb2N1c0Zyb21Ub3AoKSk7XG4gIGlucHV0VHJhcEJvdHRvbS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IGhvb2tzID09PSBudWxsIHx8IGhvb2tzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBob29rcy5vbkZvY3VzRnJvbUJvdHRvbSgpKTtcbiAgcm9vdEVsZW1lbnQuZmlyc3RDaGlsZC5iZWZvcmUoaW5wdXRUcmFwVG9wKTtcbiAgcm9vdEVsZW1lbnQubGFzdENoaWxkLmFmdGVyKGlucHV0VHJhcEJvdHRvbSk7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIHRoZSBkZXRlY3RvciBieSByZXNldHRpbmcgdGhlIHRhYkluZGV4IG9mIHRoZSBpbnB1dCBlbGVtZW50cy5cbiAgICAgKi9cbiAgICBhY3RpdmF0ZSgpIHtcbiAgICAgIGhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaW5wdXRUcmFwVG9wLnRhYkluZGV4ID0gMDtcbiAgICAgICAgaW5wdXRUcmFwQm90dG9tLnRhYkluZGV4ID0gMDtcbiAgICAgIH0sIDEwKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIHRoZSBkZXRlY3RvciBieSBzZXR0aW5nIHRhYkluZGV4IHRvIC0xLlxuICAgICAqL1xuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICBob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlucHV0VHJhcFRvcC50YWJJbmRleCA9IC0xO1xuICAgICAgICBpbnB1dFRyYXBCb3R0b20udGFiSW5kZXggPSAtMTtcbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBIVE1MIGlucHV0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIYW5kc29udGFibGV9IGhvdCBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge0hUTUxJbnB1dEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0RWxlbWVudChob3QpIHtcbiAgY29uc3Qgcm9vdERvY3VtZW50ID0gaG90LnJvb3REb2N1bWVudDtcbiAgY29uc3QgaW5wdXQgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgaW5wdXQudHlwZSA9ICd0ZXh0JztcbiAgaW5wdXQuY2xhc3NMaXN0LmFkZCgnaHRGb2N1c0NhdGNoZXInKTtcbiAgaWYgKGhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKSB7XG4gICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoaW5wdXQsIFsoMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCksICgwLCBfYTExeS5BMTFZX0hJRERFTikoKV0pO1xuICB9XG4gIHJldHVybiBpbnB1dDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaW5zdGFsbEZvY3VzQ2F0Y2hlciA9IGluc3RhbGxGb2N1c0NhdGNoZXI7XG52YXIgX3Nob3J0Y3V0Q29udGV4dHMgPSByZXF1aXJlKFwiLi4vLi4vc2hvcnRjdXRDb250ZXh0c1wiKTtcbnZhciBfZm9jdXNEZXRlY3RvciA9IHJlcXVpcmUoXCIuL2ZvY3VzRGV0ZWN0b3JcIik7XG4vKipcbiAqIEluc3RhbGxzIGEgZm9jdXMgY2F0Y2hlciBtb2R1bGUuIFRoZSBtb2R1bGUgb2JzZXJ2ZXMgd2hlbiB0aGUgdGFibGUgaXMgZm9jdXNlZCBhbmQgZGVwZW5kaW5nIG9uXG4gKiBmcm9tIHRoZSB3aGljaCBzaWRlIGl0IHdhcyBmb2N1c2VkIG9uIGl0IHNlbGVjdHMgYSBzcGVjaWZpZWQgY2VsbCBvciByZWxlYXNlcyB0aGUgVEFCIG5hdmlnYXRpb25cbiAqIHRvIHRoZSBicm93c2VyLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGluc3RhbGxGb2N1c0NhdGNoZXIoaG90KSB7XG4gIGNvbnN0IGNsYW1wQ29vcmRzSWZOZWVkZWQgPSBub3JtYWxpemVDb29yZHNJZk5lZWRlZChob3QpO1xuICBsZXQgcmVjZW50bHlBZGRlZEZvY3VzQ29vcmRzO1xuICBjb25zdCB7XG4gICAgYWN0aXZhdGUsXG4gICAgZGVhY3RpdmF0ZVxuICB9ID0gKDAsIF9mb2N1c0RldGVjdG9yLmluc3RhbGxGb2N1c0RldGVjdG9yKShob3QsIHtcbiAgICBvbkZvY3VzRnJvbVRvcCgpIHtcbiAgICAgIHZhciBfY2xhbXBDb29yZHNJZk5lZWRlZDtcbiAgICAgIGNvbnN0IG1vc3RUb3BTdGFydENvb3JkcyA9IChfY2xhbXBDb29yZHNJZk5lZWRlZCA9IGNsYW1wQ29vcmRzSWZOZWVkZWQocmVjZW50bHlBZGRlZEZvY3VzQ29vcmRzKSkgIT09IG51bGwgJiYgX2NsYW1wQ29vcmRzSWZOZWVkZWQgIT09IHZvaWQgMCA/IF9jbGFtcENvb3Jkc0lmTmVlZGVkIDogZ2V0TW9zdFRvcFN0YXJ0UG9zaXRpb24oaG90KTtcbiAgICAgIGlmIChtb3N0VG9wU3RhcnRDb29yZHMpIHtcbiAgICAgICAgaG90LnJ1bkhvb2tzKCdtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbicsICdmcm9tX2Fib3ZlJywgbW9zdFRvcFN0YXJ0Q29vcmRzKTtcbiAgICAgICAgaG90LnNlbGVjdENlbGwobW9zdFRvcFN0YXJ0Q29vcmRzLnJvdywgbW9zdFRvcFN0YXJ0Q29vcmRzLmNvbCk7XG4gICAgICB9XG4gICAgICBob3QubGlzdGVuKCk7XG4gICAgfSxcbiAgICBvbkZvY3VzRnJvbUJvdHRvbSgpIHtcbiAgICAgIHZhciBfY2xhbXBDb29yZHNJZk5lZWRlZDI7XG4gICAgICBjb25zdCBtb3N0Qm90dG9tRW5kQ29vcmRzID0gKF9jbGFtcENvb3Jkc0lmTmVlZGVkMiA9IGNsYW1wQ29vcmRzSWZOZWVkZWQocmVjZW50bHlBZGRlZEZvY3VzQ29vcmRzKSkgIT09IG51bGwgJiYgX2NsYW1wQ29vcmRzSWZOZWVkZWQyICE9PSB2b2lkIDAgPyBfY2xhbXBDb29yZHNJZk5lZWRlZDIgOiBnZXRNb3N0Qm90dG9tRW5kUG9zaXRpb24oaG90KTtcbiAgICAgIGlmIChtb3N0Qm90dG9tRW5kQ29vcmRzKSB7XG4gICAgICAgIGhvdC5ydW5Ib29rcygnbW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24nLCAnZnJvbV9iZWxvdycsIG1vc3RCb3R0b21FbmRDb29yZHMpO1xuICAgICAgICBob3Quc2VsZWN0Q2VsbChtb3N0Qm90dG9tRW5kQ29vcmRzLnJvdywgbW9zdEJvdHRvbUVuZENvb3Jkcy5jb2wpO1xuICAgICAgfVxuICAgICAgaG90Lmxpc3RlbigpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHJvd1dyYXBTdGF0ZSA9IHtcbiAgICB3cmFwcGVkOiBmYWxzZSxcbiAgICBmbGlwcGVkOiBmYWxzZVxuICB9O1xuICBsZXQgaXNTYXZpbmdDb29yZHNFbmFibGVkID0gdHJ1ZTtcbiAgbGV0IGlzVGFiT3JTaGlmdFRhYlByZXNzZWQgPSBmYWxzZTtcbiAgbGV0IHByZXZlbnRWaWV3cG9ydFNjcm9sbCA9IGZhbHNlO1xuICBob3QuYWRkSG9vaygnYWZ0ZXJMaXN0ZW4nLCAoKSA9PiBkZWFjdGl2YXRlKCkpO1xuICBob3QuYWRkSG9vaygnYWZ0ZXJVbmxpc3RlbicsICgpID0+IGFjdGl2YXRlKCkpO1xuICBob3QuYWRkSG9vaygnYWZ0ZXJTZWxlY3Rpb24nLCAocm93LCBjb2x1bW4sIHJvdzIsIGNvbHVtbjIsIHByZXZlbnRTY3JvbGxpbmcpID0+IHtcbiAgICBpZiAoaXNUYWJPclNoaWZ0VGFiUHJlc3NlZCAmJiAocm93V3JhcFN0YXRlLndyYXBwZWQgJiYgcm93V3JhcFN0YXRlLmZsaXBwZWQgfHwgcHJldmVudFZpZXdwb3J0U2Nyb2xsKSkge1xuICAgICAgcHJldmVudFZpZXdwb3J0U2Nyb2xsID0gZmFsc2U7XG4gICAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGlzU2F2aW5nQ29vcmRzRW5hYmxlZCkge1xuICAgICAgdmFyIF9ob3QkZ2V0U2VsZWN0ZWRSYW5nZTtcbiAgICAgIHJlY2VudGx5QWRkZWRGb2N1c0Nvb3JkcyA9IChfaG90JGdldFNlbGVjdGVkUmFuZ2UgPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX2hvdCRnZXRTZWxlY3RlZFJhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG90JGdldFNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0O1xuICAgIH1cbiAgfSk7XG4gIGhvdC5hZGRIb29rKCdiZWZvcmVSb3dXcmFwJywgKGludGVycnVwdGVkQnlBdXRvSW5zZXJ0TW9kZSwgbmV3Q29vcmRzLCBpc0ZsaXBwZWQpID0+IHtcbiAgICByb3dXcmFwU3RhdGUud3JhcHBlZCA9IHRydWU7XG4gICAgcm93V3JhcFN0YXRlLmZsaXBwZWQgPSBpc0ZsaXBwZWQ7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIGNlbGwgYW5kIGRlYWN0aXZhdGVzIHRoZSB0YWJsZS5cbiAgICovXG4gIGZ1bmN0aW9uIGRlYWN0aXZhdGVUYWJsZSgpIHtcbiAgICByb3dXcmFwU3RhdGUud3JhcHBlZCA9IGZhbHNlO1xuICAgIHJvd1dyYXBTdGF0ZS5mbGlwcGVkID0gZmFsc2U7XG4gICAgaG90LmRlc2VsZWN0Q2VsbCgpO1xuICAgIGhvdC51bmxpc3RlbigpO1xuICB9XG4gIGNvbnN0IHNob3J0Y3V0T3B0aW9ucyA9IHtcbiAgICBrZXlzOiBbWydUYWInXSwgWydTaGlmdCcsICdUYWInXV0sXG4gICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICAgIHN0b3BQcm9wYWdhdGlvbjogZmFsc2UsXG4gICAgcmVsYXRpdmVUb0dyb3VwOiBfc2hvcnRjdXRDb250ZXh0cy5HUklEX0dST1VQLFxuICAgIGdyb3VwOiAnZm9jdXNDYXRjaGVyJ1xuICB9O1xuICBob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgnZ3JpZCcpLmFkZFNob3J0Y3V0cyhbe1xuICAgIC4uLnNob3J0Y3V0T3B0aW9ucyxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICB0YWJOYXZpZ2F0aW9uXG4gICAgICB9ID0gaG90LmdldFNldHRpbmdzKCk7XG4gICAgICBpc1RhYk9yU2hpZnRUYWJQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIGlmIChob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSAmJiAhdGFiTmF2aWdhdGlvbikge1xuICAgICAgICBpc1NhdmluZ0Nvb3Jkc0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGFiTmF2aWdhdGlvbikge1xuICAgICAgICBwcmV2ZW50Vmlld3BvcnRTY3JvbGwgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgcG9zaXRpb246ICdiZWZvcmUnXG4gIH0sIHtcbiAgICAuLi5zaG9ydGN1dE9wdGlvbnMsXG4gICAgY2FsbGJhY2s6IGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdGFiTmF2aWdhdGlvbixcbiAgICAgICAgYXV0b1dyYXBSb3dcbiAgICAgIH0gPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICAgIGlzVGFiT3JTaGlmdFRhYlByZXNzZWQgPSBmYWxzZTtcbiAgICAgIGlzU2F2aW5nQ29vcmRzRW5hYmxlZCA9IHRydWU7XG4gICAgICBpZiAoIXRhYk5hdmlnYXRpb24gfHwgIWhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpIHx8IGF1dG9XcmFwUm93ICYmIHJvd1dyYXBTdGF0ZS53cmFwcGVkICYmIHJvd1dyYXBTdGF0ZS5mbGlwcGVkIHx8ICFhdXRvV3JhcFJvdyAmJiByb3dXcmFwU3RhdGUud3JhcHBlZCkge1xuICAgICAgICBpZiAoYXV0b1dyYXBSb3cgJiYgcm93V3JhcFN0YXRlLndyYXBwZWQgJiYgcm93V3JhcFN0YXRlLmZsaXBwZWQpIHtcbiAgICAgICAgICByZWNlbnRseUFkZGVkRm9jdXNDb29yZHMgPSBldmVudC5zaGlmdEtleSA/IGdldE1vc3RUb3BTdGFydFBvc2l0aW9uKGhvdCkgOiBnZXRNb3N0Qm90dG9tRW5kUG9zaXRpb24oaG90KTtcbiAgICAgICAgfVxuICAgICAgICBkZWFjdGl2YXRlVGFibGUoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgc2VsZWN0aW9uIGlzIHN0aWxsIHdpdGhpbiB0aGUgdGFibGUncyByYW5nZSB0aGVuIHByZXZlbnQgZGVmYXVsdCBhY3Rpb25cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBwb3NpdGlvbjogJ2FmdGVyJ1xuICB9XSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIG1vc3QgdG9wLXN0YXJ0IGNlbGwgb3IgaGVhZGVyIChkZXBlbmRzIG9uIHRoZSB0YWJsZSBzZXR0aW5ncyBhbmQgaXRzIHNpemUpLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7Q2VsbENvb3Jkc3xudWxsfVxuICovXG5mdW5jdGlvbiBnZXRNb3N0VG9wU3RhcnRQb3NpdGlvbihob3QpIHtcbiAgY29uc3Qge1xuICAgIHJvd0luZGV4TWFwcGVyLFxuICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gIH0gPSBob3Q7XG4gIGNvbnN0IHtcbiAgICBuYXZpZ2FibGVIZWFkZXJzXG4gIH0gPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgbGV0IHRvcFJvdyA9IG5hdmlnYWJsZUhlYWRlcnMgJiYgaG90LmNvdW50Q29sSGVhZGVycygpID4gMCA/IC1ob3QuY291bnRDb2xIZWFkZXJzKCkgOiAwO1xuICBsZXQgc3RhcnRDb2x1bW4gPSBuYXZpZ2FibGVIZWFkZXJzICYmIGhvdC5jb3VudFJvd0hlYWRlcnMoKSA+IDAgPyAtaG90LmNvdW50Um93SGVhZGVycygpIDogMDtcbiAgaWYgKHRvcFJvdyA9PT0gMCkge1xuICAgIHRvcFJvdyA9IHJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodG9wUm93KTtcbiAgfVxuICBpZiAoc3RhcnRDb2x1bW4gPT09IDApIHtcbiAgICBzdGFydENvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoc3RhcnRDb2x1bW4pO1xuICB9XG4gIGlmICh0b3BSb3cgPT09IG51bGwgfHwgc3RhcnRDb2x1bW4gPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHRvcFJvdywgc3RhcnRDb2x1bW4pO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBtb3N0IGJvdHRvbS1lbmQgY2VsbCBvciBoZWFkZXIgKGRlcGVuZHMgb24gdGhlIHRhYmxlIHNldHRpbmdzIGFuZCBpdHMgc2l6ZSkuXG4gKlxuICogQHBhcmFtIHtDb3JlfSBob3QgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfG51bGx9XG4gKi9cbmZ1bmN0aW9uIGdldE1vc3RCb3R0b21FbmRQb3NpdGlvbihob3QpIHtcbiAgdmFyIF9yb3dJbmRleE1hcHBlciRnZXRWaSwgX2NvbHVtbkluZGV4TWFwcGVyJGdlO1xuICBjb25zdCB7XG4gICAgcm93SW5kZXhNYXBwZXIsXG4gICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgfSA9IGhvdDtcbiAgY29uc3Qge1xuICAgIG5hdmlnYWJsZUhlYWRlcnNcbiAgfSA9IGhvdC5nZXRTZXR0aW5ncygpO1xuICBsZXQgYm90dG9tUm93ID0gcm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKSAtIDE7XG4gIGxldCBlbmRDb2x1bW4gPSBjb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpIC0gMTtcbiAgaWYgKGJvdHRvbVJvdyA8IDApIHtcbiAgICBpZiAoIW5hdmlnYWJsZUhlYWRlcnMgfHwgaG90LmNvdW50Q29sSGVhZGVycygpID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgYm90dG9tUm93ID0gLTE7XG4gIH1cbiAgaWYgKGVuZENvbHVtbiA8IDApIHtcbiAgICBpZiAoIW5hdmlnYWJsZUhlYWRlcnMgfHwgaG90LmNvdW50Q29sSGVhZGVycygpID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZW5kQ29sdW1uID0gLTE7XG4gIH1cbiAgcmV0dXJuIGhvdC5fY3JlYXRlQ2VsbENvb3JkcygoX3Jvd0luZGV4TWFwcGVyJGdldFZpID0gcm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChib3R0b21Sb3cpKSAhPT0gbnVsbCAmJiBfcm93SW5kZXhNYXBwZXIkZ2V0VmkgIT09IHZvaWQgMCA/IF9yb3dJbmRleE1hcHBlciRnZXRWaSA6IGJvdHRvbVJvdywgKF9jb2x1bW5JbmRleE1hcHBlciRnZSA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZW5kQ29sdW1uKSkgIT09IG51bGwgJiYgX2NvbHVtbkluZGV4TWFwcGVyJGdlICE9PSB2b2lkIDAgPyBfY29sdW1uSW5kZXhNYXBwZXIkZ2UgOiBlbmRDb2x1bW4pO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgdGhlIGNvb3JkaW5hdGVzIChjbGFtcHMgdG8gbmVhcmVzdCB2aXNpYmxlIGNlbGwgcG9zaXRpb24gd2l0aGluIGRhdGFzZXQgcmFuZ2UpLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oQ29vcmRzIHwgdW5kZWZpbmVkKTogQ29vcmRzIHwgbnVsbH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQ29vcmRzSWZOZWVkZWQoaG90KSB7XG4gIHJldHVybiBjb29yZHMgPT4ge1xuICAgIGlmICghY29vcmRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbW9zdFRvcFN0YXJ0Q29vcmRzID0gZ2V0TW9zdFRvcFN0YXJ0UG9zaXRpb24oaG90KTtcbiAgICBjb25zdCBtb3N0Qm90dG9tRW5kQ29vcmRzID0gZ2V0TW9zdEJvdHRvbUVuZFBvc2l0aW9uKGhvdCk7XG4gICAgaWYgKGNvb3Jkcy5jb2wgPCBtb3N0VG9wU3RhcnRDb29yZHMuY29sKSB7XG4gICAgICBjb29yZHMuY29sID0gbW9zdFRvcFN0YXJ0Q29vcmRzLmNvbDtcbiAgICB9XG4gICAgaWYgKGNvb3Jkcy5jb2wgPiBtb3N0Qm90dG9tRW5kQ29vcmRzLmNvbCkge1xuICAgICAgY29vcmRzLmNvbCA9IG1vc3RCb3R0b21FbmRDb29yZHMuY29sO1xuICAgIH1cbiAgICBpZiAoY29vcmRzLnJvdyA8IG1vc3RUb3BTdGFydENvb3Jkcy5yb3cpIHtcbiAgICAgIGNvb3Jkcy5yb3cgPSBtb3N0VG9wU3RhcnRDb29yZHMucm93O1xuICAgIH1cbiAgICBpZiAoY29vcmRzLnJvdyA+IG1vc3RCb3R0b21FbmRDb29yZHMucm93KSB7XG4gICAgICBjb29yZHMucm93ID0gbW9zdEJvdHRvbUVuZENvb3Jkcy5yb3c7XG4gICAgfVxuICAgIHJldHVybiBjb29yZHM7XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2ZvY3VzQ2F0Y2hlciA9IHJlcXVpcmUoXCIuL2ZvY3VzQ2F0Y2hlclwiKTtcbk9iamVjdC5rZXlzKF9mb2N1c0NhdGNoZXIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9mb2N1c0NhdGNoZXJba2V5XSkgcmV0dXJuO1xuICBleHBvcnRzW2tleV0gPSBfZm9jdXNDYXRjaGVyW2tleV07XG59KTtcbnZhciBfdmlld3BvcnRTY3JvbGwgPSByZXF1aXJlKFwiLi92aWV3cG9ydFNjcm9sbFwiKTtcbk9iamVjdC5rZXlzKF92aWV3cG9ydFNjcm9sbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX3ZpZXdwb3J0U2Nyb2xsW2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX3ZpZXdwb3J0U2Nyb2xsW2tleV07XG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlVmlld3BvcnRTY3JvbGxlciA9IGNyZWF0ZVZpZXdwb3J0U2Nyb2xsZXI7XG52YXIgX2NvbHVtbkhlYWRlclNjcm9sbCA9IHJlcXVpcmUoXCIuL3Njcm9sbFN0cmF0ZWdpZXMvY29sdW1uSGVhZGVyU2Nyb2xsXCIpO1xudmFyIF9jb3JuZXJIZWFkZXJTY3JvbGwgPSByZXF1aXJlKFwiLi9zY3JvbGxTdHJhdGVnaWVzL2Nvcm5lckhlYWRlclNjcm9sbFwiKTtcbnZhciBfZm9jdXNTY3JvbGwgPSByZXF1aXJlKFwiLi9zY3JvbGxTdHJhdGVnaWVzL2ZvY3VzU2Nyb2xsXCIpO1xudmFyIF9tdWx0aXBsZVNjcm9sbCA9IHJlcXVpcmUoXCIuL3Njcm9sbFN0cmF0ZWdpZXMvbXVsdGlwbGVTY3JvbGxcIik7XG52YXIgX25vbmNvbnRpZ3VvdXNTY3JvbGwgPSByZXF1aXJlKFwiLi9zY3JvbGxTdHJhdGVnaWVzL25vbmNvbnRpZ3VvdXNTY3JvbGxcIik7XG52YXIgX3Jvd0hlYWRlclNjcm9sbCA9IHJlcXVpcmUoXCIuL3Njcm9sbFN0cmF0ZWdpZXMvcm93SGVhZGVyU2Nyb2xsXCIpO1xudmFyIF9zaW5nbGVTY3JvbGwgPSByZXF1aXJlKFwiLi9zY3JvbGxTdHJhdGVnaWVzL3NpbmdsZVNjcm9sbFwiKTtcbi8qKlxuICogQHR5cGVkZWYgVmlld3BvcnRTY3JvbGxlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSByZXN1bWUgUmVzdW1lcyB0aGUgdmlld3BvcnQgc2Nyb2xsZXIuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHN1c3BlbmQgU3VzcGVuZHMgdGhlIHZpZXdwb3J0IHNjcm9sbGVyIHVudGlsIHRoZSBgcmVzdW1lYCBtZXRob2QgaXMgY2FsbGVkLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSBza2lwTmV4dFNjcm9sbEN5Y2xlIFNraXAgdGhlIG5leHQgc2Nyb2xsIGN5Y2xlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihDZWxsQ29vcmRzKTogdm9pZH0gc2Nyb2xsVG8gU2Nyb2xsIHRoZSB2aWV3cG9ydCB0byBhIGdpdmVuIGNlbGwuXG4gKi9cbi8qKlxuICogSW5zdGFsbHMgYSB2aWV3cG9ydCBzY3JvbGxlciBtb2R1bGUuIFRoZSBtb2R1bGUgaXMgcmVzcG9uc2libGUgZm9yIHNjcm9sbGluZyB0aGUgdmlld3BvcnQgdG8gYSBnaXZlbiBjZWxsXG4gKiBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIHR5cGUgKHNpbmdsZSBjZWxsIHNlbGVjdGlvbiwgbXVsdGlwbGUgY2VsbHMgc2VsZWN0aW9uLCBoZWFkZXIgc2VsZWN0aW9uIGV0Yy4pLlxuICogSXQncyB0cmlnZ2VyZWQgYnkgdGhlIHNlbGVjdGlvbiBtb2R1bGUgdmlhIHRoZSBgYWZ0ZXJTZXRSYW5nZUVuZGAgaG9vayBldmVyeSB0aW1lIHRoZSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge1ZpZXdwb3J0U2Nyb2xsZXJ9IFRoZSB2aWV3cG9ydCBzY3JvbGxlciBtb2R1bGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVZpZXdwb3J0U2Nyb2xsZXIoaG90KSB7XG4gIGNvbnN0IHtcbiAgICBzZWxlY3Rpb25cbiAgfSA9IGhvdDtcbiAgbGV0IHNraXBOZXh0Q2FsbCA9IGZhbHNlO1xuICBsZXQgaXNTdXNwZW5kZWQgPSBmYWxzZTtcbiAgcmV0dXJuIHtcbiAgICByZXN1bWUoKSB7XG4gICAgICBpc1N1c3BlbmRlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgc3VzcGVuZCgpIHtcbiAgICAgIGlzU3VzcGVuZGVkID0gdHJ1ZTtcbiAgICB9LFxuICAgIHNraXBOZXh0U2Nyb2xsQ3ljbGUoKSB7XG4gICAgICBza2lwTmV4dENhbGwgPSB0cnVlO1xuICAgIH0sXG4gICAgc2Nyb2xsVG8oY2VsbENvb3Jkcykge1xuICAgICAgdmFyIF9zY3JvbGxTdHJhdGVneTtcbiAgICAgIGlmIChza2lwTmV4dENhbGwgfHwgaXNTdXNwZW5kZWQpIHtcbiAgICAgICAgc2tpcE5leHRDYWxsID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBzY3JvbGxTdHJhdGVneTtcbiAgICAgIGlmIChzZWxlY3Rpb24uaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKSkge1xuICAgICAgICBzY3JvbGxTdHJhdGVneSA9ICgwLCBfZm9jdXNTY3JvbGwuZm9jdXNTY3JvbGxTdHJhdGVneSkoaG90KTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5ID0gKDAsIF9jb3JuZXJIZWFkZXJTY3JvbGwuY29ybmVySGVhZGVyU2Nyb2xsU3RyYXRlZ3kpKGhvdCk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkge1xuICAgICAgICBzY3JvbGxTdHJhdGVneSA9ICgwLCBfcm93SGVhZGVyU2Nyb2xsLnJvd0hlYWRlclNjcm9sbFN0cmF0ZWd5KShob3QpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpIHtcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3kgPSAoMCwgX2NvbHVtbkhlYWRlclNjcm9sbC5jb2x1bW5IZWFkZXJTY3JvbGxTdHJhdGVneSkoaG90KTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCkgPT09IDEgJiYgc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSkge1xuICAgICAgICBzY3JvbGxTdHJhdGVneSA9ICgwLCBfbXVsdGlwbGVTY3JvbGwubXVsdGlwbGVTY3JvbGxTdHJhdGVneSkoaG90KTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCkgPT09IDEgJiYgIXNlbGVjdGlvbi5pc011bHRpcGxlKCkpIHtcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3kgPSAoMCwgX3NpbmdsZVNjcm9sbC5zaW5nbGVTY3JvbGxTdHJhdGVneSkoaG90KTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCkgPiAxKSB7XG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5ID0gKDAsIF9ub25jb250aWd1b3VzU2Nyb2xsLm5vbmNvbnRpZ3VvdXNTY3JvbGxTdHJhdGVneSkoaG90KTtcbiAgICAgIH1cbiAgICAgIChfc2Nyb2xsU3RyYXRlZ3kgPSBzY3JvbGxTdHJhdGVneSkgPT09IG51bGwgfHwgX3Njcm9sbFN0cmF0ZWd5ID09PSB2b2lkIDAgfHwgX3Njcm9sbFN0cmF0ZWd5KGNlbGxDb29yZHMpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29sdW1uSGVhZGVyU2Nyb2xsU3RyYXRlZ3kgPSBjb2x1bW5IZWFkZXJTY3JvbGxTdHJhdGVneTtcbi8qKlxuICogU2Nyb2xsIHN0cmF0ZWd5IGZvciBjb2x1bW4gaGVhZGVyIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogZnVuY3Rpb24oQ2VsbENvb3Jkcyk6IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIGNvbHVtbkhlYWRlclNjcm9sbFN0cmF0ZWd5KGhvdCkge1xuICByZXR1cm4gX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGNvbFxuICAgIH0gPSBfcmVmO1xuICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgIGNvbFxuICAgIH0pO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb3JuZXJIZWFkZXJTY3JvbGxTdHJhdGVneSA9IGNvcm5lckhlYWRlclNjcm9sbFN0cmF0ZWd5O1xuLyoqXG4gKiBTY3JvbGwgc3RyYXRlZ3kgZm9yIGNvcm5lciBoZWFkZXIgc2VsZWN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbigpOiBmdW5jdGlvbihDZWxsQ29vcmRzKTogdm9pZH1cbiAqL1xuZnVuY3Rpb24gY29ybmVySGVhZGVyU2Nyb2xsU3RyYXRlZ3koKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgLy8gZG8gbm90IHNjcm9sbCB0aGUgdmlld3BvcnQgd2hlbiB0aGUgY29ybmVyIGlzIGNsaWNrZWRcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZm9jdXNTY3JvbGxTdHJhdGVneSA9IGZvY3VzU2Nyb2xsU3RyYXRlZ3k7XG4vKipcbiAqIFNjcm9sbCBzdHJhdGVneSBmb3IgY2hhbmdlZCB0aGUgZm9jdXMgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogZnVuY3Rpb24oQ2VsbENvb3Jkcyk6IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIGZvY3VzU2Nyb2xsU3RyYXRlZ3koaG90KSB7XG4gIHJldHVybiBjZWxsQ29vcmRzID0+IHtcbiAgICBob3Quc2Nyb2xsVmlld3BvcnRUbyhjZWxsQ29vcmRzLnRvT2JqZWN0KCkpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5tdWx0aXBsZVNjcm9sbFN0cmF0ZWd5ID0gbXVsdGlwbGVTY3JvbGxTdHJhdGVneTtcbi8qKlxuICogU2Nyb2xsIHN0cmF0ZWd5IGZvciBtdWx0aXBsZSBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90IEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbigpOiBmdW5jdGlvbihDZWxsQ29vcmRzKTogdm9pZH1cbiAqL1xuZnVuY3Rpb24gbXVsdGlwbGVTY3JvbGxTdHJhdGVneShob3QpIHtcbiAgcmV0dXJuIGNlbGxDb29yZHMgPT4ge1xuICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKGNlbGxDb29yZHMudG9PYmplY3QoKSk7XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLm5vbmNvbnRpZ3VvdXNTY3JvbGxTdHJhdGVneSA9IG5vbmNvbnRpZ3VvdXNTY3JvbGxTdHJhdGVneTtcbi8qKlxuICogU2Nyb2xsIHN0cmF0ZWd5IGZvciBub24tY29udGlndW91cyBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90IEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbigpOiBmdW5jdGlvbihDZWxsQ29vcmRzKTogdm9pZH1cbiAqL1xuZnVuY3Rpb24gbm9uY29udGlndW91c1Njcm9sbFN0cmF0ZWd5KGhvdCkge1xuICByZXR1cm4gY2VsbENvb3JkcyA9PiB7XG4gICAgaG90LnNjcm9sbFZpZXdwb3J0VG8oY2VsbENvb3Jkcy50b09iamVjdCgpKTtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucm93SGVhZGVyU2Nyb2xsU3RyYXRlZ3kgPSByb3dIZWFkZXJTY3JvbGxTdHJhdGVneTtcbi8qKlxuICogU2Nyb2xsIHN0cmF0ZWd5IGZvciByb3cgaGVhZGVyIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogZnVuY3Rpb24oQ2VsbENvb3Jkcyk6IHZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJvd0hlYWRlclNjcm9sbFN0cmF0ZWd5KGhvdCkge1xuICByZXR1cm4gX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIHJvd1xuICAgIH0gPSBfcmVmO1xuICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgIHJvd1xuICAgIH0pO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5zaW5nbGVTY3JvbGxTdHJhdGVneSA9IHNpbmdsZVNjcm9sbFN0cmF0ZWd5O1xuLyoqXG4gKiBTY3JvbGwgc3RyYXRlZ3kgZm9yIHNpbmdsZSBjZWxsIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogZnVuY3Rpb24oQ2VsbENvb3Jkcyk6IHsgcm93OiBudW1iZXIsIGNvbDogbnVtYmVyIH0gfCB2b2lkIH1cbiAqL1xuZnVuY3Rpb24gc2luZ2xlU2Nyb2xsU3RyYXRlZ3koaG90KSB7XG4gIHJldHVybiBjZWxsQ29vcmRzID0+IHtcbiAgICBjb25zdCBzZWxlY3Rpb25Tb3VyY2UgPSBob3Quc2VsZWN0aW9uLmdldFNlbGVjdGlvblNvdXJjZSgpO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbFxuICAgIH0gPSBjZWxsQ29vcmRzO1xuXG4gICAgLy8gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBjb2x1bW4gaGVhZGVycyAod2hlbiBgbmF2aWdhYmxlSGVhZGVyc2AgaXMgZW5hYmxlZClcbiAgICAvLyBzY3JvbGxzIHRoZSB2aWV3cG9ydCBob3Jpem9udGFsbHkgb25seVxuICAgIGlmIChyb3cgPCAwICYmIGNvbCA+PSAwKSB7XG4gICAgICBob3Quc2Nyb2xsVmlld3BvcnRUbyh7XG4gICAgICAgIGNvbFxuICAgICAgfSk7XG5cbiAgICAgIC8vIG5hdmlnYXRpbmcgdGhyb3VnaCB0aGUgcm93IGhlYWRlcnMgKHdoZW4gYG5hdmlnYWJsZUhlYWRlcnNgIGlzIGVuYWJsZWQpXG4gICAgICAvLyBzY3JvbGxzIHRoZSB2aWV3cG9ydCB2ZXJ0aWNhbGx5IG9ubHlcbiAgICB9IGVsc2UgaWYgKGNvbCA8IDAgJiYgcm93ID49IDApIHtcbiAgICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgICAgcm93XG4gICAgICB9KTtcblxuICAgICAgLy8gbmF2aWdhdGluZyB0aHJvdWdoIHRoZSBjZWxsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc2VsZWN0aW9uU291cmNlID09PSAnbW91c2UnKSB7XG4gICAgICAgIGlmIChjb2wgPT09IGhvdC52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkgfHwgcm93ID09PSBob3Qudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBob3Quc2Nyb2xsVmlld3BvcnRUbyh7XG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9TaGVldENsaXAgPSByZXF1aXJlKFwiLi4vM3JkcGFydHkvU2hlZXRDbGlwXCIpO1xudmFyIF9kYXRhID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZGF0YVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbWl4ZWRcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qXG5UaGlzIGNsYXNzIGNvbnRhaW5zIG9wZW4tc291cmNlIGNvbnRyaWJ1dGlvbnMgY292ZXJlZCBieSB0aGUgTUlUIGxpY2Vuc2UuXG5cbjEpIEluIHRoZSBgY3JlYXRlUm93YCBtZXRob2Q6IFJvdyBjcmVhdGlvbiB1c2luZyBmdW5jdGlvbmFsIGBkYXRhU2NoZW1hYCB2YWx1ZVxuMikgSW4gdGhlIGBzZXRgIG1ldGhvZDogRGF0YSBzZXR0aW5nIHVzaW5nIGZ1bmN0aW9uYWwgYHByb3BgIHZhbHVlXG4zKSBpbiB0aGUgYGdldGAgbWV0aG9kOiBEYXRhIGdldHRpbmcgdXNpbmcgZnVuY3Rpb25hbCBgcHJvcGAgdmFsdWVcblxuVGhlIHJlbWFpbmluZyBwYXJ0IG9mIHRoaXMgY29kZSBjb21tZW50IGNvbnRhaW5zIHRoZSBmdWxsIGxpY2Vuc2UgdGV4dCBvZiB0aGVzZSBjb250cmlidXRpb25zLlxuXG49PT09PT1cblxuVGhlIE1JVCBMaWNlbnNlXG5cbkNvcHlyaWdodCAyMDEzIE5pY2hvbGFzIEJvbGx3ZWdcblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cblxuLyoqXG4gKiBVdGlsaXR5IGNsYXNzIHRoYXQgZ2V0cyBhbmQgc2F2ZXMgZGF0YSBmcm9tL3RvIHRoZSBkYXRhIHNvdXJjZSB1c2luZyBtYXBwaW5nIG9mIGNvbHVtbnMgbnVtYmVycyB0byBvYmplY3QgcHJvcGVydHkgbmFtZXMuXG4gKlxuICogQHRvZG8gUmVmYWN0b3IgYXJndW1lbnRzIG9mIG1ldGhvZHMgZ2V0UmFuZ2UsIGdldFRleHQgdG8gYmUgbnVtYmVycyAobm90IG9iamVjdHMpLlxuICogQHRvZG8gUmVtb3ZlIHByaXYsIEdyaWRTZXR0aW5ncyBmcm9tIG9iamVjdCBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAY2xhc3MgRGF0YU1hcFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgRGF0YU1hcCB7XG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgc3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCkge1xuICAgIHJldHVybiAyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHtAbGluayBIYW5kc29udGFibGV9LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7SGFuZHNvbnRhYmxlfVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGhvdEluc3RhbmNlIEluc3RhbmNlIG9mIEhhbmRzb250YWJsZS5cbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBBcnJheSBvZiBhcnJheXMgb3IgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGRhdGEuXG4gICAqIEBwYXJhbSB7TWV0YU1hbmFnZXJ9IG1ldGFNYW5hZ2VyIFRoZSBtZXRhIG1hbmFnZXIgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSwgZGF0YSwgbWV0YU1hbmFnZXIpIHtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgTWV0YU1hbmFnZXJ9LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7TWV0YU1hbmFnZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWV0YU1hbmFnZXJcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgVGFibGVNZXRhfS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge1RhYmxlTWV0YX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0YWJsZU1ldGFcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGRhdGFzZXQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhU291cmNlXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVkIHNjaGVtYSBiYXNlZCBvbiB0aGUgZmlyc3Qgcm93IGZyb20gdGhlIHNvdXJjZSBkYXRhLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkdWNrU2NoZW1hXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGVkIGFycmF5IG9mIHByb3BlcnRpZXMgdG8gY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2xUb1Byb3BDYWNoZVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIENhY2hlZCBtYXAgb2YgcHJvcGVydGllcyB0byBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHR5cGUge01hcH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwcm9wVG9Db2xDYWNoZVwiLCB2b2lkIDApO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gICAgdGhpcy5tZXRhTWFuYWdlciA9IG1ldGFNYW5hZ2VyO1xuICAgIHRoaXMudGFibGVNZXRhID0gbWV0YU1hbmFnZXIuZ2V0VGFibGVNZXRhKCk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YTtcbiAgICB0aGlzLmR1Y2tTY2hlbWEgPSB0aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKTtcbiAgICB0aGlzLmNyZWF0ZU1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBjYWNoZSBmb3IgcHJvcGVydHkgdG8gYW5kIGZyb20gY29sdW1uIGFkZHJlc3NhdGlvbi5cbiAgICovXG4gIGNyZWF0ZU1hcCgpIHtcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldFNjaGVtYSgpO1xuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkblxcJ3QgcHJvdmlkZSBgc2NoZW1hYCBub3IgYGRhdGFgJyk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnRhYmxlTWV0YS5jb2x1bW5zO1xuICAgIGxldCBpO1xuICAgIHRoaXMuY29sVG9Qcm9wQ2FjaGUgPSBbXTtcbiAgICB0aGlzLnByb3BUb0NvbENhY2hlID0gbmV3IE1hcCgpO1xuICAgIGlmIChjb2x1bW5zKSB7XG4gICAgICBsZXQgY29sdW1uc0xlbiA9IDA7XG4gICAgICBsZXQgZmlsdGVyZWRJbmRleCA9IDA7XG4gICAgICBsZXQgY29sdW1uc0FzRnVuYyA9IGZhbHNlO1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYUxlbiA9ICgwLCBfb2JqZWN0LmRlZXBPYmplY3RTaXplKShzY2hlbWEpO1xuICAgICAgICBjb2x1bW5zTGVuID0gc2NoZW1hTGVuID4gMCA/IHNjaGVtYUxlbiA6IHRoaXMuY291bnRGaXJzdFJvd0tleXMoKTtcbiAgICAgICAgY29sdW1uc0FzRnVuYyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtYXhDb2xzID0gdGhpcy50YWJsZU1ldGEubWF4Q29scztcbiAgICAgICAgY29sdW1uc0xlbiA9IE1hdGgubWluKG1heENvbHMsIGNvbHVtbnMubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zTGVuOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc0FzRnVuYyA/IGNvbHVtbnMoaSkgOiBjb2x1bW5zW2ldO1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKGNvbHVtbikpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGNvbHVtbi5kYXRhICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb2x1bW5zQXNGdW5jID8gZmlsdGVyZWRJbmRleCA6IGk7XG4gICAgICAgICAgICB0aGlzLmNvbFRvUHJvcENhY2hlW2luZGV4XSA9IGNvbHVtbi5kYXRhO1xuICAgICAgICAgICAgdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoY29sdW1uLmRhdGEsIGluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsdGVyZWRJbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMoc2NoZW1hKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhbW91bnQgb2YgcGh5c2ljYWwgY29sdW1ucyBpbiB0aGUgZmlyc3QgZGF0YSByb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IEFtb3VudCBvZiBwaHlzaWNhbCBjb2x1bW5zIGluIHRoZSBmaXJzdCBkYXRhIHJvdy5cbiAgICovXG4gIGNvdW50Rmlyc3RSb3dLZXlzKCkge1xuICAgIHJldHVybiAoMCwgX2RhdGEuY291bnRGaXJzdFJvd0tleXMpKHRoaXMuZGF0YVNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGNvbHVtbnMnIHRyYW5zbGF0aW9uIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hIEFuIG9iamVjdCB0byBnZW5lcmF0ZSBzY2hlbWEgZnJvbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxhc3RDb2wgVGhlIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhcmVudCBUaGUgcHJvcGVydHkgY2FjaGUgZm9yIHJlY3Vyc2l2ZSBjYWxscy5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKHNjaGVtYSwgbGFzdENvbCwgcGFyZW50KSB7XG4gICAgbGV0IGxhc3RDb2x1bW4gPSBsYXN0Q29sO1xuICAgIGxldCBwcm9wZXJ0eVBhcmVudCA9IHBhcmVudDtcbiAgICBsZXQgcHJvcDtcbiAgICBpZiAodHlwZW9mIGxhc3RDb2x1bW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsYXN0Q29sdW1uID0gMDtcbiAgICAgIHByb3BlcnR5UGFyZW50ID0gJyc7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc2NoZW1hID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShzY2hlbWEsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHByb3AgPSBwcm9wZXJ0eVBhcmVudCArIGtleTtcbiAgICAgICAgICB0aGlzLmNvbFRvUHJvcENhY2hlLnB1c2gocHJvcCk7XG4gICAgICAgICAgdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQocHJvcCwgbGFzdENvbHVtbik7XG4gICAgICAgICAgbGFzdENvbHVtbiArPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RDb2x1bW4gPSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKHZhbHVlLCBsYXN0Q29sdW1uLCBgJHtrZXl9LmApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxhc3RDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBwcm9wZXJ0eSBuYW1lIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4IG9yIGFub3RoZXIgcGFzc2VkIGFyZ3VtZW50LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfG51bWJlcn0gQ29sdW1uIHByb3BlcnR5LCBwaHlzaWNhbCBjb2x1bW4gaW5kZXggb3IgcGFzc2VkIGFyZ3VtZW50LlxuICAgKi9cbiAgY29sVG9Qcm9wKGNvbHVtbikge1xuICAgIC8vIFRPRE86IFNob3VsZCBpdCB3b3JrPyBQbGVhc2UsIGxvb2sgYXQgdGhlIHRlc3Q6XG4gICAgLy8gXCJpdCBzaG91bGQgcmV0dXJuIHRoZSBwcm92aWRlZCBwcm9wZXJ0eSBuYW1lLCB3aGVuIHRoZSB1c2VyIHBhc3NlcyBhIHByb3BlcnR5IG5hbWUgYXMgYSBjb2x1bW4gbnVtYmVyXCIuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29sdW1uKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pO1xuXG4gICAgLy8gT3V0IG9mIHJhbmdlLCBub3QgdmlzaWJsZSBjb2x1bW4gaW5kZXguXG4gICAgaWYgKHBoeXNpY2FsQ29sdW1uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH1cblxuICAgIC8vIENhY2hlZCBwcm9wZXJ0eS5cbiAgICBpZiAodGhpcy5jb2xUb1Byb3BDYWNoZSAmJiAoMCwgX21peGVkLmlzRGVmaW5lZCkodGhpcy5jb2xUb1Byb3BDYWNoZVtwaHlzaWNhbENvbHVtbl0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xUb1Byb3BDYWNoZVtwaHlzaWNhbENvbHVtbl07XG4gICAgfVxuICAgIHJldHVybiBwaHlzaWNhbENvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIHByb3BlcnR5IGludG8gdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwcm9wIENvbHVtbiBwcm9wZXJ0eSB3aGljaCBtYXkgYmUgYWxzbyBhIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge3N0cmluZ3xudW1iZXJ9IFZpc3VhbCBjb2x1bW4gaW5kZXggb3IgcGFzc2VkIGFyZ3VtZW50LlxuICAgKi9cbiAgcHJvcFRvQ29sKHByb3ApIHtcbiAgICBjb25zdCBjYWNoZWRQaHlzaWNhbEluZGV4ID0gdGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQocHJvcCk7XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShjYWNoZWRQaHlzaWNhbEluZGV4KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGNhY2hlZFBoeXNpY2FsSW5kZXgpO1xuICAgIH1cblxuICAgIC8vIFByb3BlcnR5IG1heSBiZSBhIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICBjb25zdCB2aXN1YWxDb2x1bW4gPSB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihwcm9wKTtcbiAgICBpZiAodmlzdWFsQ29sdW1uID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gcHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHZpc3VhbENvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRhdGEncyBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRTY2hlbWEoKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gc2NoZW1hKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kdWNrU2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGR1Y2sgc2NoZW1hIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRhdGFzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheXxvYmplY3R9XG4gICAqL1xuICBjcmVhdGVEdWNrU2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlWzBdID8gKDAsIF9vYmplY3QuZHVja1NjaGVtYSkodGhpcy5kYXRhU291cmNlWzBdKSA6IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIGRhdGEgc2NoZW1hLlxuICAgKi9cbiAgcmVmcmVzaER1Y2tTY2hlbWEoKSB7XG4gICAgdGhpcy5kdWNrU2NoZW1hID0gdGhpcy5jcmVhdGVEdWNrU2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyByb3cgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZGF0YSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtpbmRleF0gUGh5c2ljYWwgaW5kZXggb2YgdGhlIHJvdyBiZWZvcmUgd2hpY2ggdGhlIG5ldyByb3cgd2lsbCBiZSBpbnNlcnRlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthbW91bnQ9MV0gQW4gYW1vdW50IG9mIHJvd3MgdG8gYWRkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIEFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgY3JlYXRlZCByb3dzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc291cmNlXSBTb3VyY2Ugb2YgbWV0aG9kIGNhbGwuXG4gICAqIEBwYXJhbSB7J2Fib3ZlJ3wnYmVsb3cnfSBbb3B0aW9ucy5tb2RlXSBTZXRzIHdoZXJlIHRoZSByb3cgaXMgaW5zZXJ0ZWQ6IGFib3ZlIG9yIGJlbG93IHRoZSBwYXNzZWQgaW5kZXguXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNyZWF0ZVJvd1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIG51bWJlciBvZiBjcmVhdGVkIHJvd3MuXG4gICAqL1xuICBjcmVhdGVSb3coaW5kZXgpIHtcbiAgICBsZXQgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgIGxldCB7XG4gICAgICBzb3VyY2UsXG4gICAgICBtb2RlID0gJ2Fib3ZlJ1xuICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHt9O1xuICAgIGNvbnN0IHNvdXJjZVJvd3NDb3VudCA9IHRoaXMuaG90LmNvdW50U291cmNlUm93cygpO1xuICAgIGxldCBwaHlzaWNhbFJvd0luZGV4ID0gc291cmNlUm93c0NvdW50O1xuICAgIGxldCBudW1iZXJPZkNyZWF0ZWRSb3dzID0gMDtcbiAgICBsZXQgcm93SW5kZXggPSBpbmRleDtcbiAgICBpZiAodHlwZW9mIHJvd0luZGV4ICE9PSAnbnVtYmVyJyB8fCByb3dJbmRleCA+PSBzb3VyY2VSb3dzQ291bnQpIHtcbiAgICAgIHJvd0luZGV4ID0gc291cmNlUm93c0NvdW50O1xuICAgIH1cbiAgICBpZiAocm93SW5kZXggPCB0aGlzLmhvdC5jb3VudFJvd3MoKSkge1xuICAgICAgcGh5c2ljYWxSb3dJbmRleCA9IHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocm93SW5kZXgpO1xuICAgIH1cbiAgICBjb25zdCBjb250aW51ZVByb2Nlc3MgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ3JlYXRlUm93Jywgcm93SW5kZXgsIGFtb3VudCwgc291cmNlKTtcbiAgICBpZiAoY29udGludWVQcm9jZXNzID09PSBmYWxzZSB8fCBwaHlzaWNhbFJvd0luZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWx0YTogMFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbWF4Um93cyA9IHRoaXMudGFibGVNZXRhLm1heFJvd3M7XG4gICAgY29uc3QgY29sdW1uQ291bnQgPSB0aGlzLmdldFNjaGVtYSgpLmxlbmd0aDtcbiAgICBjb25zdCByb3dzVG9BZGQgPSBbXTtcbiAgICB3aGlsZSAobnVtYmVyT2ZDcmVhdGVkUm93cyA8IGFtb3VudCAmJiBzb3VyY2VSb3dzQ291bnQgKyBudW1iZXJPZkNyZWF0ZWRSb3dzIDwgbWF4Um93cykge1xuICAgICAgbGV0IHJvdyA9IG51bGw7XG4gICAgICBpZiAodGhpcy5ob3QuZGF0YVR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpIHtcbiAgICAgICAgICAvLyBDbG9uZSB0ZW1wbGF0ZSBhcnJheVxuICAgICAgICAgIHJvdyA9ICgwLCBfb2JqZWN0LmRlZXBDbG9uZSkodGhpcy5nZXRTY2hlbWEoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcm93ID0gW107XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG4gICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShjb2x1bW5Db3VudCAtIDEsICgpID0+IHJvdy5wdXNoKG51bGwpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmhvdC5kYXRhVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByb3cgPSB0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKHJvd0luZGV4ICsgbnVtYmVyT2ZDcmVhdGVkUm93cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3cgPSB7fTtcbiAgICAgICAgKDAsIF9vYmplY3QuZGVlcEV4dGVuZCkocm93LCB0aGlzLmdldFNjaGVtYSgpKTtcbiAgICAgIH1cbiAgICAgIHJvd3NUb0FkZC5wdXNoKHJvdyk7XG4gICAgICBudW1iZXJPZkNyZWF0ZWRSb3dzICs9IDE7XG4gICAgfVxuICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMocm93SW5kZXgsIG51bWJlck9mQ3JlYXRlZFJvd3MpO1xuICAgIGlmIChtb2RlID09PSAnYmVsb3cnKSB7XG4gICAgICBwaHlzaWNhbFJvd0luZGV4ID0gTWF0aC5taW4ocGh5c2ljYWxSb3dJbmRleCArIDEsIHNvdXJjZVJvd3NDb3VudCk7XG4gICAgfVxuICAgIHRoaXMuc3BsaWNlRGF0YShwaHlzaWNhbFJvd0luZGV4LCAwLCByb3dzVG9BZGQpO1xuICAgIGNvbnN0IG5ld1Zpc3VhbFJvd0luZGV4ID0gdGhpcy5ob3QudG9WaXN1YWxSb3cocGh5c2ljYWxSb3dJbmRleCk7XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBjcmVhdGVkIHJvd3MgYXJlIHRoZSBvbmx5IG9uZXMgaW4gdGhlIHRhYmxlLCB0aGUgY29sdW1uIGluZGV4IG1hcHBlcnMgbmVlZCB0byBiZSByZWJ1aWx0IGJhc2VkIG9uXG4gICAgLy8gdGhlIG51bWJlciBvZiBjb2x1bW5zIGNyZWF0ZWQgaW4gdGhlIHJvdyBvciB0aGUgc2NoZW1hLlxuICAgIGlmICh0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSA9PT0gcm93c1RvQWRkLmxlbmd0aCkge1xuICAgICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaG90LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKTtcbiAgICB9XG4gICAgaWYgKG51bWJlck9mQ3JlYXRlZFJvd3MgPiAwKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBDcmVhdGVzIHRoZSBtZXRhIHJvd3MgYXQgdGhlIGVuZCBvZiB0aGUgcm93cyBjb2xsZWN0aW9uIHdpdGhvdXQgc2hpZnRpbmcgdGhlIGNlbGxzXG4gICAgICAgIC8vIHRoYXQgd2VyZSBkZWZpbmVkIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRhdGFzZXQuXG4gICAgICAgIHRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KG51bGwsIG51bWJlck9mQ3JlYXRlZFJvd3MpO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2UgIT09ICdhdXRvJykge1xuICAgICAgICB0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhwaHlzaWNhbFJvd0luZGV4LCBhbW91bnQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDcmVhdGVSb3cnLCBuZXdWaXN1YWxSb3dJbmRleCwgbnVtYmVyT2ZDcmVhdGVkUm93cywgc291cmNlKTtcbiAgICB0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlOyAvLyB1c2VkIHdoZW4gZGF0YSB3YXMgY2hhbmdlZFxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlbHRhOiBudW1iZXJPZkNyZWF0ZWRSb3dzLFxuICAgICAgc3RhcnRQaHlzaWNhbEluZGV4OiBwaHlzaWNhbFJvd0luZGV4XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGNvbHVtbiBhdCB0aGUgcmlnaHQgb2YgdGhlIGRhdGEgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXhdIFZpc3VhbCBpbmRleCBvZiB0aGUgY29sdW1uIGJlZm9yZSB3aGljaCB0aGUgbmV3IGNvbHVtbiB3aWxsIGJlIGluc2VydGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbiBhbW91bnQgb2YgY29sdW1ucyB0byBhZGQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gQWRkaXRpb25hbCBvcHRpb25zIGZvciBjcmVhdGVkIGNvbHVtbnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5zb3VyY2VdIFNvdXJjZSBvZiBtZXRob2QgY2FsbC5cbiAgICogQHBhcmFtIHsnc3RhcnQnfCdlbmQnfSBbb3B0aW9ucy5tb2RlXSBTZXRzIHdoZXJlIHRoZSBjb2x1bW4gaXMgaW5zZXJ0ZWQ6IGF0IHRoZSBzdGFydCAobGVmdCBpbiBbTFRSXShAL2FwaS9vcHRpb25zLm1kI2xheW91dGRpcmVjdGlvbiksIHJpZ2h0IGluIFtSVExdKEAvYXBpL29wdGlvbnMubWQjbGF5b3V0ZGlyZWN0aW9uKSkgb3IgYXQgdGhlIGVuZCAocmlnaHQgaW4gTFRSLCBsZWZ0IGluIExUUilcbiAgICogdGhlIHBhc3NlZCBpbmRleC5cbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyQ3JlYXRlQ29sXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgbnVtYmVyIG9mIGNyZWF0ZWQgY29sdW1ucy5cbiAgICovXG4gIGNyZWF0ZUNvbChpbmRleCkge1xuICAgIGxldCBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG4gICAgbGV0IHtcbiAgICAgIHNvdXJjZSxcbiAgICAgIG1vZGUgPSAnc3RhcnQnXG4gICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgaWYgKCF0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCAnICsgJ3lvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgXFwnY29sdW1uc1xcJyBzZXR0aW5nLicgKyAnSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLicpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy5kYXRhU291cmNlO1xuICAgIGNvbnN0IG1heENvbHMgPSB0aGlzLnRhYmxlTWV0YS5tYXhDb2xzO1xuICAgIGNvbnN0IGNvdW50U291cmNlQ29scyA9IHRoaXMuaG90LmNvdW50U291cmNlQ29scygpO1xuICAgIGxldCBjb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggIT09ICdudW1iZXInIHx8IGNvbHVtbkluZGV4ID49IGNvdW50U291cmNlQ29scykge1xuICAgICAgY29sdW1uSW5kZXggPSBjb3VudFNvdXJjZUNvbHM7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRpbnVlUHJvY2VzcyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDcmVhdGVDb2wnLCBjb2x1bW5JbmRleCwgYW1vdW50LCBzb3VyY2UpO1xuICAgIGlmIChjb250aW51ZVByb2Nlc3MgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWx0YTogMFxuICAgICAgfTtcbiAgICB9XG4gICAgbGV0IHBoeXNpY2FsQ29sdW1uSW5kZXggPSBjb3VudFNvdXJjZUNvbHM7XG4gICAgaWYgKGNvbHVtbkluZGV4IDwgdGhpcy5ob3QuY291bnRDb2xzKCkpIHtcbiAgICAgIHBoeXNpY2FsQ29sdW1uSW5kZXggPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbkluZGV4KTtcbiAgICB9XG4gICAgY29uc3QgbnVtYmVyT2ZTb3VyY2VSb3dzID0gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7XG4gICAgbGV0IG5yT2ZDb2x1bW5zID0gdGhpcy5ob3QuY291bnRDb2xzKCk7XG4gICAgbGV0IG51bWJlck9mQ3JlYXRlZENvbHMgPSAwO1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBwaHlzaWNhbENvbHVtbkluZGV4O1xuICAgIGlmIChtb2RlID09PSAnZW5kJykge1xuICAgICAgY3VycmVudEluZGV4ID0gTWF0aC5taW4oY3VycmVudEluZGV4ICsgMSwgY291bnRTb3VyY2VDb2xzKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnRQaHlzaWNhbEluZGV4ID0gY3VycmVudEluZGV4O1xuICAgIHdoaWxlIChudW1iZXJPZkNyZWF0ZWRDb2xzIDwgYW1vdW50ICYmIG5yT2ZDb2x1bW5zIDwgbWF4Q29scykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCAhPT0gJ251bWJlcicgfHwgY29sdW1uSW5kZXggPj0gbnJPZkNvbHVtbnMpIHtcbiAgICAgICAgaWYgKG51bWJlck9mU291cmNlUm93cyA+IDApIHtcbiAgICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCBudW1iZXJPZlNvdXJjZVJvd3M7IHJvdyArPSAxKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFTb3VyY2Vbcm93XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZVtyb3ddID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhU291cmNlW3Jvd10ucHVzaChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKFtudWxsXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IG51bWJlck9mU291cmNlUm93czsgcm93KyspIHtcbiAgICAgICAgICBkYXRhU291cmNlW3Jvd10uc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bWJlck9mQ3JlYXRlZENvbHMgKz0gMTtcbiAgICAgIGN1cnJlbnRJbmRleCArPSAxO1xuICAgICAgbnJPZkNvbHVtbnMgKz0gMTtcbiAgICB9XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhjb2x1bW5JbmRleCwgbnVtYmVyT2ZDcmVhdGVkQ29scyk7XG4gICAgaWYgKG51bWJlck9mQ3JlYXRlZENvbHMgPiAwKSB7XG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCB8fCBpbmRleCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBDcmVhdGVzIHRoZSBtZXRhIGNvbHVtbnMgYXQgdGhlIGVuZCBvZiB0aGUgY29sdW1ucyBjb2xsZWN0aW9uIHdpdGhvdXQgc2hpZnRpbmcgdGhlIGNlbGxzXG4gICAgICAgIC8vIHRoYXQgd2VyZSBkZWZpbmVkIG91dCBvZiB0aGUgcmFuZ2Ugb2YgdGhlIGRhdGFzZXQuXG4gICAgICAgIHRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsIG51bWJlck9mQ3JlYXRlZENvbHMpO1xuICAgICAgfSBlbHNlIGlmIChzb3VyY2UgIT09ICdhdXRvJykge1xuICAgICAgICB0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZUNvbHVtbihzdGFydFBoeXNpY2FsSW5kZXgsIGFtb3VudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5ld1Zpc3VhbENvbHVtbkluZGV4ID0gdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oc3RhcnRQaHlzaWNhbEluZGV4KTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDcmVhdGVDb2wnLCBuZXdWaXN1YWxDb2x1bW5JbmRleCwgbnVtYmVyT2ZDcmVhdGVkQ29scywgc291cmNlKTtcbiAgICB0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlOyAvLyB1c2VkIHdoZW4gZGF0YSB3YXMgY2hhbmdlZFxuXG4gICAgdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpO1xuICAgIHJldHVybiB7XG4gICAgICBkZWx0YTogbnVtYmVyT2ZDcmVhdGVkQ29scyxcbiAgICAgIHN0YXJ0UGh5c2ljYWxJbmRleFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyByb3cgZnJvbSB0aGUgZGF0YSBhcnJheS5cbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVJlbW92ZVJvd1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSZW1vdmVSb3dcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtpbmRleF0gVmlzdWFsIGluZGV4IG9mIHRoZSByb3cgdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbGFzdCByb3cgd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbW91bnQgb2YgdGhlIHJvd3MgdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgcm93IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFNvdXJjZSBvZiBtZXRob2QgY2FsbC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYCB3aGVuIGFjdGlvbiB3YXMgY2FuY2VsbGVkLCBvdGhlcndpc2UgYHRydWVgLlxuICAgKi9cbiAgcmVtb3ZlUm93KGluZGV4KSB7XG4gICAgbGV0IGFtb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICBsZXQgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgbGV0IHJvd0luZGV4ID0gTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IC1hbW91bnQ7IC8vIC1hbW91bnQgPSB0YWtpbmcgaW5kZXhlcyBmcm9tIHRoZSBlbmQuXG4gICAgY29uc3QgcmVtb3ZlZFBoeXNpY2FsSW5kZXhlcyA9IHRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwocm93SW5kZXgsIGFtb3VudCk7XG4gICAgY29uc3Qgc291cmNlUm93c0xlbmd0aCA9IHRoaXMuaG90LmNvdW50U291cmNlUm93cygpO1xuICAgIHJvd0luZGV4ID0gKHNvdXJjZVJvd3NMZW5ndGggKyByb3dJbmRleCkgJSBzb3VyY2VSb3dzTGVuZ3RoO1xuXG4gICAgLy8gSXQgaGFuZGxlIGFsc28gY2FsbGJhY2sgZnJvbSB0aGUgYE5lc3RlZFJvd3NgIHBsdWdpbi4gUmVtb3ZpbmcgcGFyZW50IG5vZGUgaGFzIGVmZmVjdCBpbiByZW1vdmluZyBjaGlsZHJlbiBub2Rlcy5cbiAgICBjb25zdCBhY3Rpb25XYXNOb3RDYW5jZWxsZWQgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlUmVtb3ZlUm93Jywgcm93SW5kZXgsIHJlbW92ZWRQaHlzaWNhbEluZGV4ZXMubGVuZ3RoLCByZW1vdmVkUGh5c2ljYWxJbmRleGVzLCBzb3VyY2UpO1xuICAgIGlmIChhY3Rpb25XYXNOb3RDYW5jZWxsZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gTGlzdCBvZiByZW1vdmVkIGluZGV4ZXMgbWlnaHQgYmUgY2hhbmdlZCBpbiB0aGUgYGJlZm9yZVJlbW92ZVJvd2AgaG9vay4gVGhlcmUgbWF5IGJlIG5ldyB2YWx1ZXMuXG4gICAgY29uc3QgbnVtYmVyT2ZSZW1vdmVkSW5kZXhlcyA9IHJlbW92ZWRQaHlzaWNhbEluZGV4ZXMubGVuZ3RoO1xuICAgIHRoaXMuZmlsdGVyRGF0YShyb3dJbmRleCwgbnVtYmVyT2ZSZW1vdmVkSW5kZXhlcywgcmVtb3ZlZFBoeXNpY2FsSW5kZXhlcyk7XG5cbiAgICAvLyBUT0RPOiBGdW5jdGlvbiBgcmVtb3ZlUm93YCBzaG91bGQgdmFsaWRhdGUgZnVsbHksIHByb2JhYmx5IGFib3ZlLlxuICAgIGlmIChyb3dJbmRleCA8IHRoaXMuaG90LmNvdW50Um93cygpKSB7XG4gICAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKHJlbW92ZWRQaHlzaWNhbEluZGV4ZXMpO1xuICAgICAgY29uc3QgY3VzdG9tRGVmaW5lZENvbHVtbnMgPSAoMCwgX21peGVkLmlzRGVmaW5lZCkodGhpcy50YWJsZU1ldGEuY29sdW1ucykgfHwgKDAsIF9taXhlZC5pc0RlZmluZWQpKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpO1xuXG4gICAgICAvLyBBbGwgcm93cyBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhlcmUgc2hvdWxkbid0IGJlIGFueSBjb2x1bW5zLlxuICAgICAgaWYgKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkgPT09IDAgJiYgY3VzdG9tRGVmaW5lZENvbHVtbnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlc2NlbmRpbmdQaHlzaWNhbFJvd3MgPSByZW1vdmVkUGh5c2ljYWxJbmRleGVzLnNsaWNlKDApLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgICBkZXNjZW5kaW5nUGh5c2ljYWxSb3dzLmZvckVhY2gocm93UGh5c2ljYWxJbmRleCA9PiB7XG4gICAgICB0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyhyb3dQaHlzaWNhbEluZGV4LCAxKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJSZW1vdmVSb3cnLCByb3dJbmRleCwgbnVtYmVyT2ZSZW1vdmVkSW5kZXhlcywgcmVtb3ZlZFBoeXNpY2FsSW5kZXhlcywgc291cmNlKTtcbiAgICB0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlOyAvLyB1c2VkIHdoZW4gZGF0YSB3YXMgY2hhbmdlZFxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBjb2x1bW4gZnJvbSB0aGUgZGF0YSBhcnJheS5cbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVJlbW92ZUNvbFxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSZW1vdmVDb2xcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtpbmRleF0gVmlzdWFsIGluZGV4IG9mIHRoZSBjb2x1bW4gdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbGFzdCBjb2x1bW4gd2lsbCBiZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbW91bnQgb2YgdGhlIGNvbHVtbnMgdG8gYmUgcmVtb3ZlZC4gSWYgbm90IHByb3ZpZGVkLCBvbmUgY29sdW1uIHdpbGwgYmUgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFNvdXJjZSBvZiBtZXRob2QgY2FsbC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYCB3aGVuIGFjdGlvbiB3YXMgY2FuY2VsbGVkLCBvdGhlcndpc2UgYHRydWVgLlxuICAgKi9cbiAgcmVtb3ZlQ29sKGluZGV4KSB7XG4gICAgbGV0IGFtb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICBsZXQgc291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuaG90LmRhdGFUeXBlID09PSAnb2JqZWN0JyB8fCB0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVtbnMgb3B0aW9uIHNwZWNpZmllZCcpO1xuICAgIH1cbiAgICBsZXQgY29sdW1uSW5kZXggPSB0eXBlb2YgaW5kZXggIT09ICdudW1iZXInID8gLWFtb3VudCA6IGluZGV4O1xuICAgIGNvbHVtbkluZGV4ID0gKHRoaXMuaG90LmNvdW50Q29scygpICsgY29sdW1uSW5kZXgpICUgdGhpcy5ob3QuY291bnRDb2xzKCk7XG4gICAgY29uc3QgcmVtb3ZlZFBoeXNpY2FsSW5kZXhlcyA9IHRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoY29sdW1uSW5kZXgsIGFtb3VudCk7XG4gICAgY29uc3QgZGVzY2VuZGluZ1BoeXNpY2FsQ29sdW1ucyA9IHJlbW92ZWRQaHlzaWNhbEluZGV4ZXMuc2xpY2UoMCkuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgIGNvbnN0IGFjdGlvbldhc05vdENhbmNlbGxlZCA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVSZW1vdmVDb2wnLCBjb2x1bW5JbmRleCwgYW1vdW50LCByZW1vdmVkUGh5c2ljYWxJbmRleGVzLCBzb3VyY2UpO1xuICAgIGlmIChhY3Rpb25XYXNOb3RDYW5jZWxsZWQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGxldCBpc1RhYmxlVW5pZm9ybSA9IHRydWU7XG4gICAgY29uc3QgcmVtb3ZlZENvbHVtbnNDb3VudCA9IGRlc2NlbmRpbmdQaHlzaWNhbENvbHVtbnMubGVuZ3RoO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgZm9yIChsZXQgYyA9IDA7IGMgPCByZW1vdmVkQ29sdW1uc0NvdW50OyBjKyspIHtcbiAgICAgIGlmIChpc1RhYmxlVW5pZm9ybSAmJiByZW1vdmVkUGh5c2ljYWxJbmRleGVzWzBdICE9PSByZW1vdmVkUGh5c2ljYWxJbmRleGVzW2NdIC0gYykge1xuICAgICAgICBpc1RhYmxlVW5pZm9ybSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNUYWJsZVVuaWZvcm0pIHtcbiAgICAgIGZvciAobGV0IHIgPSAwLCBybGVuID0gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7IHIgPCBybGVuOyByKyspIHtcbiAgICAgICAgZGF0YVtyXS5zcGxpY2UocmVtb3ZlZFBoeXNpY2FsSW5kZXhlc1swXSwgYW1vdW50KTtcbiAgICAgICAgaWYgKHIgPT09IDApIHtcbiAgICAgICAgICB0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihyZW1vdmVkUGh5c2ljYWxJbmRleGVzWzBdLCBhbW91bnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IHIgPSAwLCBybGVuID0gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7IHIgPCBybGVuOyByKyspIHtcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByZW1vdmVkQ29sdW1uc0NvdW50OyBjKyspIHtcbiAgICAgICAgICBkYXRhW3JdLnNwbGljZShkZXNjZW5kaW5nUGh5c2ljYWxDb2x1bW5zW2NdLCAxKTtcbiAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZGVzY2VuZGluZ1BoeXNpY2FsQ29sdW1uc1tjXSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogRnVuY3Rpb24gYHJlbW92ZUNvbGAgc2hvdWxkIHZhbGlkYXRlIGZ1bGx5LCBwcm9iYWJseSBhYm92ZS5cbiAgICBpZiAoY29sdW1uSW5kZXggPCB0aGlzLmhvdC5jb3VudENvbHMoKSkge1xuICAgICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhyZW1vdmVkUGh5c2ljYWxJbmRleGVzKTtcblxuICAgICAgLy8gQWxsIGNvbHVtbnMgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgcm93cy5cbiAgICAgIGlmICh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpID09PSAwKSB7XG4gICAgICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclJlbW92ZUNvbCcsIGNvbHVtbkluZGV4LCBhbW91bnQsIHJlbW92ZWRQaHlzaWNhbEluZGV4ZXMsIHNvdXJjZSk7XG4gICAgdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyID0gdHJ1ZTsgLy8gdXNlZCB3aGVuIGRhdGEgd2FzIGNoYW5nZWRcbiAgICB0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkL1JlbW92ZXMgZGF0YSBmcm9tIHRoZSBjb2x1bW4uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgUGh5c2ljYWwgaW5kZXggb2YgY29sdW1uIGluIHdoaWNoIGRvIHlvdSB3YW50IHRvIGRvIHNwbGljZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGF0IHdoaWNoIHRvIHN0YXJ0IGNoYW5naW5nIHRoZSBhcnJheS4gSWYgbmVnYXRpdmUsIHdpbGwgYmVnaW4gdGhhdCBtYW55IGVsZW1lbnRzIGZyb20gdGhlIGVuZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIG51bWJlciBvZiBvbGQgYXJyYXkgZWxlbWVudHMgdG8gcmVtb3ZlLiBJZiBhbW91bnQgaXMgMCwgbm8gZWxlbWVudHMgYXJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtlbGVtZW50c10gVGhlIG5ldyBjb2x1bW5zIHRvIGFkZC5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHJlbW92ZWQgcG9ydGlvbiBvZiBjb2x1bW5zLlxuICAgKi9cbiAgc3BsaWNlQ29sKGNvbCwgaW5kZXgsIGFtb3VudCkge1xuICAgIGNvbnN0IGNvbERhdGEgPSB0aGlzLmhvdC5nZXREYXRhQXRDb2woY29sKTtcbiAgICBjb25zdCByZW1vdmVkID0gY29sRGF0YS5zbGljZShpbmRleCwgaW5kZXggKyBhbW91bnQpO1xuICAgIGNvbnN0IGFmdGVyID0gY29sRGF0YS5zbGljZShpbmRleCArIGFtb3VudCk7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGVsZW1lbnRzID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGVsZW1lbnRzW19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgKDAsIF9hcnJheS5leHRlbmRBcnJheSkoZWxlbWVudHMsIGFmdGVyKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhbW91bnQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2gobnVsbCk7IC8vIGFkZCBudWxsIGluIHBsYWNlIG9mIHJlbW92ZWQgZWxlbWVudHNcbiAgICAgIGkgKz0gMTtcbiAgICB9XG4gICAgKDAsIF9hcnJheS50bzJkQXJyYXkpKGVsZW1lbnRzKTtcbiAgICB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShpbmRleCwgY29sLCBlbGVtZW50cywgbnVsbCwgbnVsbCwgJ3NwbGljZUNvbCcpO1xuICAgIHJldHVybiByZW1vdmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZC9SZW1vdmVzIGRhdGEgZnJvbSB0aGUgcm93LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIGluZGV4IG9mIHJvdyBpbiB3aGljaCBkbyB5b3Ugd2FudCB0byBkbyBzcGxpY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhdCB3aGljaCB0byBzdGFydCBjaGFuZ2luZyB0aGUgYXJyYXkuIElmIG5lZ2F0aXZlLCB3aWxsIGJlZ2luIHRoYXQgbWFueSBlbGVtZW50cyBmcm9tIHRoZSBlbmQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygb2xkIGFycmF5IGVsZW1lbnRzIHRvIHJlbW92ZS4gSWYgYW1vdW50IGlzIDAsIG5vIGVsZW1lbnRzIGFyZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBbZWxlbWVudHNdIFRoZSBuZXcgcm93cyB0byBhZGQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyByZW1vdmVkIHBvcnRpb24gb2Ygcm93cy5cbiAgICovXG4gIHNwbGljZVJvdyhyb3csIGluZGV4LCBhbW91bnQpIHtcbiAgICBjb25zdCByb3dEYXRhID0gdGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Um93KHJvdyk7XG4gICAgY29uc3QgcmVtb3ZlZCA9IHJvd0RhdGEuc2xpY2UoaW5kZXgsIGluZGV4ICsgYW1vdW50KTtcbiAgICBjb25zdCBhZnRlciA9IHJvd0RhdGEuc2xpY2UoaW5kZXggKyBhbW91bnQpO1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZWxlbWVudHMgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgZWxlbWVudHNbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuICAgICgwLCBfYXJyYXkuZXh0ZW5kQXJyYXkpKGVsZW1lbnRzLCBhZnRlcik7XG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYW1vdW50KSB7XG4gICAgICBlbGVtZW50cy5wdXNoKG51bGwpOyAvLyBhZGQgbnVsbCBpbiBwbGFjZSBvZiByZW1vdmVkIGVsZW1lbnRzXG4gICAgICBpICs9IDE7XG4gICAgfVxuICAgIHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHJvdywgaW5kZXgsIFtlbGVtZW50c10sIG51bGwsIG51bGwsICdzcGxpY2VSb3cnKTtcbiAgICByZXR1cm4gcmVtb3ZlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQvcmVtb3ZlIHJvdyhzKSB0by9mcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFBoeXNpY2FsIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGFkZC9yZW1vdmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxldGVDb3VudCBOdW1iZXIgb2Ygcm93cyB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gZWxlbWVudHMgUm93IGVsZW1lbnRzIHRvIGJlIGFkZGVkLlxuICAgKi9cbiAgc3BsaWNlRGF0YShpbmRleCwgZGVsZXRlQ291bnQsIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgY29udGludWVTcGxpY2luZyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVEYXRhU3BsaWNlJywgaW5kZXgsIGRlbGV0ZUNvdW50LCBlbGVtZW50cyk7XG4gICAgaWYgKGNvbnRpbnVlU3BsaWNpbmcgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBuZXdEYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLCBpbmRleCksIC4uLmVsZW1lbnRzLCAuLi50aGlzLmRhdGFTb3VyY2Uuc2xpY2UoaW5kZXgpXTtcblxuICAgICAgLy8gV2UgdHJ5IG5vdCB0byBjaGFuZ2UgdGhlIHJlZmVyZW5jZS5cbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPSAwO1xuXG4gICAgICAvLyBQdXNoaW5nIHRvIGFycmF5IGluc3RlYWQgb2YgdXNpbmcgYHNwbGljZWAsIGJlY2F1c2UgQmFiZWwgY2hhbmdlcyB0aGUgY29kZSB0byBvbmUgdGhhdCB1c2VzIHRoZSBgYXBwbHlgIG1ldGhvZC5cbiAgICAgIC8vIFRoZSB1c2VkIG1ldGhvZCB3YXMgY2F1c2Ugb2YgdGhlIHByb2JsZW0gZGVzY3JpYmVkIHdpdGhpbiAjNzg0MC5cbiAgICAgIG5ld0RhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5kYXRhU291cmNlLnB1c2gocm93KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciB1bndhbnRlZCBkYXRhIGVsZW1lbnRzIGZyb20gdGhlIGRhdGEgc291cmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVmlzdWFsIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBOdW1iZXIgb2Ygcm93cyB0byBhZGQvcmVtb3ZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3dzIFBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICAgKi9cbiAgZmlsdGVyRGF0YShpbmRleCwgYW1vdW50LCBwaHlzaWNhbFJvd3MpIHtcbiAgICAvLyBDdXN0b20gZGF0YSBmaWx0ZXJpbmcgKHJ1biBhcyBhIGNvbnNlcXVlbmNlIG9mIGNhbGxpbmcgdGhlIGJlbG93IGhvb2spIHByb3ZpZGUgYW4gYXJyYXkgY29udGFpbmluZyBuZXcgZGF0YS5cbiAgICBsZXQgZGF0YSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdmaWx0ZXJEYXRhJywgaW5kZXgsIGFtb3VudCwgcGh5c2ljYWxSb3dzKTtcblxuICAgIC8vIEhvb2tzIGJ5IGRlZmF1bHQgcmV0dXJucyBmaXJzdCBhcmd1bWVudCAod2hlbiB0aGVyZSBpcyBubyBjYWxsYmFjayBjaGFuZ2luZyBleGVjdXRpb24gcmVzdWx0KS5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSA9PT0gZmFsc2UpIHtcbiAgICAgIGRhdGEgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKChyb3csIHJvd0luZGV4KSA9PiBwaHlzaWNhbFJvd3MuaW5kZXhPZihyb3dJbmRleCkgPT09IC0xKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA9IDA7XG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291cmNlLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNpbmdsZSB2YWx1ZSBmcm9tIHRoZSBkYXRhIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0KHJvdywgcHJvcCkge1xuICAgIGNvbnN0IHBoeXNpY2FsUm93ID0gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgIGxldCBkYXRhUm93ID0gdGhpcy5kYXRhU291cmNlW3BoeXNpY2FsUm93XTtcbiAgICAvLyBUT0RPOiBUbyByZW1vdmUsIHVzZSAnbW9kaWZ5RGF0YScgaG9vayBpbnN0ZWFkIChzZWUgYmVsb3cpXG4gICAgY29uc3QgbW9kaWZpZWRSb3dEYXRhID0gdGhpcy5ob3QucnVuSG9va3MoJ21vZGlmeVJvd0RhdGEnLCBwaHlzaWNhbFJvdyk7XG4gICAgZGF0YVJvdyA9IGlzTmFOKG1vZGlmaWVkUm93RGF0YSkgPyBtb2RpZmllZFJvd0RhdGEgOiBkYXRhUm93O1xuICAgIC8vXG5cbiAgICBjb25zdCB7XG4gICAgICBkYXRhRG90Tm90YXRpb25cbiAgICB9ID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBsZXQgdmFsdWUgPSBudWxsO1xuXG4gICAgLy8gdHJ5IHRvIGdldCB2YWx1ZSB1bmRlciBwcm9wZXJ0eSBgcHJvcGAgKGluY2x1ZGVzIGRvdClcbiAgICBpZiAoZGF0YVJvdyAmJiBkYXRhUm93Lmhhc093blByb3BlcnR5ICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShkYXRhUm93LCBwcm9wKSkge1xuICAgICAgdmFsdWUgPSBkYXRhUm93W3Byb3BdO1xuICAgIH0gZWxzZSBpZiAoZGF0YURvdE5vdGF0aW9uICYmIHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJyAmJiBwcm9wLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICBsZXQgb3V0ID0gZGF0YVJvdztcbiAgICAgIGlmICghb3V0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2xpY2VkID0gcHJvcC5zcGxpdCgnLicpO1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlsZW4gPSBzbGljZWQubGVuZ3RoOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICAgIG91dCA9IG91dFtzbGljZWRbaV1dO1xuICAgICAgICBpZiAodHlwZW9mIG91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFsdWUgPSBvdXQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFsdWUgPSBwcm9wKHRoaXMuZGF0YVNvdXJjZS5zbGljZShwaHlzaWNhbFJvdywgcGh5c2ljYWxSb3cgKyAxKVswXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhvdC5oYXNIb29rKCdtb2RpZnlEYXRhJykpIHtcbiAgICAgIGNvbnN0IHZhbHVlSG9sZGVyID0gKDAsIF9vYmplY3QuY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKSh2YWx1ZSk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5RGF0YScsIHBoeXNpY2FsUm93LCB0aGlzLnByb3BUb0NvbChwcm9wKSwgdmFsdWVIb2xkZXIsICdnZXQnKTtcbiAgICAgIGlmICh2YWx1ZUhvbGRlci5pc1RvdWNoZWQoKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlSG9sZGVyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzaW5nbGUgdmFsdWUgZnJvbSB0aGUgZGF0YSBhcnJheSAoaW50ZW5kZWQgZm9yIGNsaXBib2FyZCBjb3B5IHRvIGFuIGV4dGVybmFsIGFwcGxpY2F0aW9uKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBQaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRDb3B5YWJsZShyb3csIHByb3ApIHtcbiAgICBpZiAodGhpcy5ob3QuZ2V0Q2VsbE1ldGEocm93LCB0aGlzLnByb3BUb0NvbChwcm9wKSkuY29weWFibGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldChyb3csIHByb3ApO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgc2luZ2xlIHZhbHVlIHRvIHRoZSBkYXRhIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICAgKi9cbiAgc2V0KHJvdywgcHJvcCwgdmFsdWUpIHtcbiAgICBjb25zdCBwaHlzaWNhbFJvdyA9IHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocm93KTtcbiAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZTtcbiAgICBsZXQgZGF0YVJvdyA9IHRoaXMuZGF0YVNvdXJjZVtwaHlzaWNhbFJvd107XG4gICAgLy8gVE9ETzogVG8gcmVtb3ZlLCB1c2UgJ21vZGlmeURhdGEnIGhvb2sgaW5zdGVhZCAoc2VlIGJlbG93KVxuICAgIGNvbnN0IG1vZGlmaWVkUm93RGF0YSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlSb3dEYXRhJywgcGh5c2ljYWxSb3cpO1xuICAgIGRhdGFSb3cgPSBpc05hTihtb2RpZmllZFJvd0RhdGEpID8gbW9kaWZpZWRSb3dEYXRhIDogZGF0YVJvdztcbiAgICAvL1xuXG4gICAgaWYgKHRoaXMuaG90Lmhhc0hvb2soJ21vZGlmeURhdGEnKSkge1xuICAgICAgY29uc3QgdmFsdWVIb2xkZXIgPSAoMCwgX29iamVjdC5jcmVhdGVPYmplY3RQcm9wTGlzdGVuZXIpKG5ld1ZhbHVlKTtcbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlEYXRhJywgcGh5c2ljYWxSb3csIHRoaXMucHJvcFRvQ29sKHByb3ApLCB2YWx1ZUhvbGRlciwgJ3NldCcpO1xuICAgICAgaWYgKHZhbHVlSG9sZGVyLmlzVG91Y2hlZCgpKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gdmFsdWVIb2xkZXIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGRhdGFEb3ROb3RhdGlvblxuICAgIH0gPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpO1xuXG4gICAgLy8gdHJ5IHRvIHNldCB2YWx1ZSB1bmRlciBwcm9wZXJ0eSBgcHJvcGAgKGluY2x1ZGVzIGRvdClcbiAgICBpZiAoZGF0YVJvdyAmJiBkYXRhUm93Lmhhc093blByb3BlcnR5ICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShkYXRhUm93LCBwcm9wKSkge1xuICAgICAgZGF0YVJvd1twcm9wXSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZGF0YURvdE5vdGF0aW9uICYmIHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJyAmJiBwcm9wLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICBsZXQgb3V0ID0gZGF0YVJvdztcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGxldCBpbGVuO1xuICAgICAgY29uc3Qgc2xpY2VkID0gcHJvcC5zcGxpdCgnLicpO1xuICAgICAgZm9yIChpID0gMCwgaWxlbiA9IHNsaWNlZC5sZW5ndGggLSAxOyBpIDwgaWxlbjsgaSsrKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3V0W3NsaWNlZFtpXV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgb3V0W3NsaWNlZFtpXV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgPSBvdXRbc2xpY2VkW2ldXTtcbiAgICAgIH1cbiAgICAgIG91dFtzbGljZWRbaV1dID0gbmV3VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcCh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UocGh5c2ljYWxSb3csIHBoeXNpY2FsUm93ICsgMSlbMF0sIG5ld1ZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVJvd1twcm9wXSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHJpZGljdWxvdXMgcGllY2Ugb2YgY29kZSBtYXBzIHJvd3MgSWQgdGhhdCBhcmUgcHJlc2VudCBpbiB0YWJsZSBkYXRhIHRvIHRob3NlIGRpc3BsYXllZCBmb3IgdXNlci5cbiAgICogVGhlIHRyaWNrIGlzLCB0aGUgcGh5c2ljYWwgcm93IGlkIChzdG9yZWQgaW4gc2V0dGluZ3MuZGF0YSkgaXMgbm90IG5lY2Vzc2FyeSB0aGUgc2FtZVxuICAgKiBhcyB0aGUgdmlzdWFsIChkaXNwbGF5ZWQpIHJvdyBpZCAoZS5nLiBXaGVuIHNvcnRpbmcgaXMgYXBwbGllZCkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiByb3dzIHRvIHRyYW5zbGF0ZS5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHZpc3VhbFJvd3NUb1BoeXNpY2FsKGluZGV4LCBhbW91bnQpIHtcbiAgICBjb25zdCB0b3RhbFJvd3MgPSB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtcbiAgICBjb25zdCBsb2dpY1Jvd3MgPSBbXTtcbiAgICBsZXQgcGh5c2ljUm93ID0gKHRvdGFsUm93cyArIGluZGV4KSAlIHRvdGFsUm93cztcbiAgICBsZXQgcm93c1RvUmVtb3ZlID0gYW1vdW50O1xuICAgIGxldCByb3c7XG4gICAgd2hpbGUgKHBoeXNpY1JvdyA8IHRvdGFsUm93cyAmJiByb3dzVG9SZW1vdmUpIHtcbiAgICAgIHJvdyA9IHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocGh5c2ljUm93KTtcbiAgICAgIGxvZ2ljUm93cy5wdXNoKHJvdyk7XG4gICAgICByb3dzVG9SZW1vdmUgLT0gMTtcbiAgICAgIHBoeXNpY1JvdyArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbG9naWNSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiByb3dzIHRvIHRyYW5zbGF0ZS5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgdmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaW5kZXgsIGFtb3VudCkge1xuICAgIGNvbnN0IHRvdGFsQ29scyA9IHRoaXMuaG90LmNvdW50Q29scygpO1xuICAgIGNvbnN0IHZpc3VhbENvbHMgPSBbXTtcbiAgICBsZXQgcGh5c2ljYWxDb2wgPSAodG90YWxDb2xzICsgaW5kZXgpICUgdG90YWxDb2xzO1xuICAgIGxldCBjb2xzVG9SZW1vdmUgPSBhbW91bnQ7XG4gICAgd2hpbGUgKHBoeXNpY2FsQ29sIDwgdG90YWxDb2xzICYmIGNvbHNUb1JlbW92ZSkge1xuICAgICAgY29uc3QgY29sID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihwaHlzaWNhbENvbCk7XG4gICAgICB2aXN1YWxDb2xzLnB1c2goY29sKTtcbiAgICAgIGNvbHNUb1JlbW92ZSAtPSAxO1xuICAgICAgcGh5c2ljYWxDb2wgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc3VhbENvbHM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBkYXRhIGFycmF5LlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgZm9yIChsZXQgciA9IDA7IHIgPCB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTsgcisrKSB7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHRoaXMuaG90LmNvdW50Q29scygpOyBjKyspIHtcbiAgICAgICAgdGhpcy5zZXQociwgdGhpcy5jb2xUb1Byb3AoYyksICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRhdGEgbGVuZ3RoLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGVuZ3RoKCkge1xuICAgIGNvbnN0IG1heFJvd3NGcm9tU2V0dGluZ3MgPSB0aGlzLnRhYmxlTWV0YS5tYXhSb3dzO1xuICAgIGxldCBtYXhSb3dzO1xuICAgIGlmIChtYXhSb3dzRnJvbVNldHRpbmdzIDwgMCB8fCBtYXhSb3dzRnJvbVNldHRpbmdzID09PSAwKSB7XG4gICAgICBtYXhSb3dzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF4Um93cyA9IG1heFJvd3NGcm9tU2V0dGluZ3MgfHwgSW5maW5pdHk7XG4gICAgfVxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7XG4gICAgcmV0dXJuIE1hdGgubWluKGxlbmd0aCwgbWF4Um93cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGF0YSBhcnJheS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0QWxsKCkge1xuICAgIGNvbnN0IHN0YXJ0ID0ge1xuICAgICAgcm93OiAwLFxuICAgICAgY29sOiAwXG4gICAgfTtcbiAgICBjb25zdCBlbmQgPSB7XG4gICAgICByb3c6IE1hdGgubWF4KHRoaXMuaG90LmNvdW50Um93cygpIC0gMSwgMCksXG4gICAgICBjb2w6IE1hdGgubWF4KHRoaXMuaG90LmNvdW50Q29scygpIC0gMSwgMClcbiAgICB9O1xuICAgIGlmIChzdGFydC5yb3cgLSBlbmQucm93ID09PSAwICYmICF0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRSYW5nZShzdGFydCwgZW5kLCBEYXRhTWFwLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgY2FjaGVkIGluIHRoZSBgY29sVG9Qcm9wYCBjYWNoZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gQW1vdW50IG9mIGNhY2hlZCBjb2x1bW5zLlxuICAgKi9cbiAgY291bnRDYWNoZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbFRvUHJvcENhY2hlLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGRhdGEgcmFuZ2UgYXMgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbc3RhcnRdIFN0YXJ0IHNlbGVjdGlvbiBwb3NpdGlvbi4gVmlzdWFsIGluZGV4ZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZW5kXSBFbmQgc2VsZWN0aW9uIHBvc2l0aW9uLiBWaXN1YWwgaW5kZXhlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlc3RpbmF0aW9uIERlc3RpbmF0aW9uIG9mIGRhdGFtYXAuZ2V0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRSYW5nZShzdGFydCwgZW5kLCBkZXN0aW5hdGlvbikge1xuICAgIGNvbnN0IG91dHB1dCA9IFtdO1xuICAgIGxldCByO1xuICAgIGxldCBjO1xuICAgIGxldCByb3c7XG4gICAgY29uc3QgbWF4Um93cyA9IHRoaXMudGFibGVNZXRhLm1heFJvd3M7XG4gICAgY29uc3QgbWF4Q29scyA9IHRoaXMudGFibGVNZXRhLm1heENvbHM7XG4gICAgaWYgKG1heFJvd3MgPT09IDAgfHwgbWF4Q29scyA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBnZXRGbiA9IGRlc3RpbmF0aW9uID09PSBEYXRhTWFwLkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IgPyB0aGlzLmdldENvcHlhYmxlIDogdGhpcy5nZXQ7XG4gICAgY29uc3QgcmxlbiA9IE1hdGgubWluKE1hdGgubWF4KG1heFJvd3MgLSAxLCAwKSwgTWF0aC5tYXgoc3RhcnQucm93LCBlbmQucm93KSk7XG4gICAgY29uc3QgY2xlbiA9IE1hdGgubWluKE1hdGgubWF4KG1heENvbHMgLSAxLCAwKSwgTWF0aC5tYXgoc3RhcnQuY29sLCBlbmQuY29sKSk7XG4gICAgZm9yIChyID0gTWF0aC5taW4oc3RhcnQucm93LCBlbmQucm93KTsgciA8PSBybGVuOyByKyspIHtcbiAgICAgIHJvdyA9IFtdO1xuICAgICAgLy8gV2UganVzdCBzdG9yZSBpbmRleGVzIGZvciByb3dzIHdpdGhvdXQgaGVhZGVycy5cbiAgICAgIGNvbnN0IHBoeXNpY2FsUm93ID0gciA+PSAwID8gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyKSA6IHI7XG4gICAgICBmb3IgKGMgPSBNYXRoLm1pbihzdGFydC5jb2wsIGVuZC5jb2wpOyBjIDw9IGNsZW47IGMrKykge1xuICAgICAgICBpZiAocGh5c2ljYWxSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByb3cucHVzaChnZXRGbi5jYWxsKHRoaXMsIHIsIHRoaXMuY29sVG9Qcm9wKGMpKSk7XG4gICAgICB9XG4gICAgICBpZiAocGh5c2ljYWxSb3cgIT09IG51bGwpIHtcbiAgICAgICAgb3V0cHV0LnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGF0YSBhcyB0ZXh0ICh0YWIgc2VwYXJhdGVkIGNvbHVtbnMpLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW3N0YXJ0XSBTdGFydCBzZWxlY3Rpb24gcG9zaXRpb24uIFZpc3VhbCBpbmRleGVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2VuZF0gRW5kIHNlbGVjdGlvbiBwb3NpdGlvbi4gVmlzdWFsIGluZGV4ZXMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRUZXh0KHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKDAsIF9TaGVldENsaXAuc3RyaW5naWZ5KSh0aGlzLmdldFJhbmdlKHN0YXJ0LCBlbmQsIERhdGFNYXAuREVTVElOQVRJT05fUkVOREVSRVIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGF0YSBhcyBjb3B5YWJsZSB0ZXh0ICh0YWIgc2VwYXJhdGVkIGNvbHVtbnMgaW50ZW5kZWQgZm9yIGNsaXBib2FyZCBjb3B5IHRvIGFuIGV4dGVybmFsIGFwcGxpY2F0aW9uKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtzdGFydF0gU3RhcnQgc2VsZWN0aW9uIHBvc2l0aW9uLiBWaXN1YWwgaW5kZXhlcy5cbiAgICogQHBhcmFtIHtvYmplY3R9IFtlbmRdIEVuZCBzZWxlY3Rpb24gcG9zaXRpb24uIFZpc3VhbCBpbmRleGVzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0Q29weWFibGVUZXh0KHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gKDAsIF9TaGVldENsaXAuc3RyaW5naWZ5KSh0aGlzLmdldFJhbmdlKHN0YXJ0LCBlbmQsIERhdGFNYXAuREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUikpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuaG90ID0gbnVsbDtcbiAgICB0aGlzLm1ldGFNYW5hZ2VyID0gbnVsbDtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuZHVja1NjaGVtYSA9IG51bGw7XG4gICAgdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucHJvcFRvQ29sQ2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnByb3BUb0NvbENhY2hlID0gdW5kZWZpbmVkO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBEYXRhTWFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9kYXRhID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZGF0YVwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBjbGFzcyBEYXRhU291cmNlXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEYXRhU291cmNlIHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICBsZXQgZGF0YVNvdXJjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgSGFuZHNvbnRhYmxlLlxuICAgICAqXG4gICAgICogQHR5cGUge0hhbmRzb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBEYXRhIHNvdXJjZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVHlwZSBvZiBkYXRhIHNvdXJjZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2FycmF5J1xuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRhdGFUeXBlXCIsICdhcnJheScpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbFRvUHJvcFwiLCAoKSA9PiB7fSk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvcFRvQ29sXCIsICgpID0+IHt9KTtcbiAgICB0aGlzLmhvdCA9IGhvdEluc3RhbmNlO1xuICAgIHRoaXMuZGF0YSA9IGRhdGFTb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSBgbW9kaWZ5Um93RGF0YWAgaG9vayBhbmQgcmV0dXJuIGVpdGhlciB0aGUgbW9kaWZpZWQgb3IgdGhlIHNvdXJjZSBkYXRhIGZvciB0aGUgcHJvdmlkZWQgcm93LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93SW5kZXggUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl8b2JqZWN0fSBTb3VyY2Ugb3IgbW9kaWZpZWQgcm93IG9mIGRhdGEuXG4gICAqL1xuICBtb2RpZnlSb3dEYXRhKHJvd0luZGV4KSB7XG4gICAgbGV0IG1vZGlmeVJvd0RhdGE7XG4gICAgaWYgKHRoaXMuaG90Lmhhc0hvb2soJ21vZGlmeVJvd0RhdGEnKSkge1xuICAgICAgbW9kaWZ5Um93RGF0YSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlSb3dEYXRhJywgcm93SW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZ5Um93RGF0YSAhPT0gdW5kZWZpbmVkICYmICFOdW1iZXIuaXNJbnRlZ2VyKG1vZGlmeVJvd0RhdGEpID8gbW9kaWZ5Um93RGF0YSA6IHRoaXMuZGF0YVtyb3dJbmRleF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0FycmF5PWZhbHNlXSBJZiBgdHJ1ZWAgcmV0dXJuIHNvdXJjZSBkYXRhIGFzIGFuIGFycmF5IG9mIGFycmF5cyBldmVuIHdoZW4gc291cmNlIGRhdGEgd2FzIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGFub3RoZXIgZm9ybWF0LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXREYXRhKCkge1xuICAgIGxldCB0b0FycmF5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRCeVJhbmdlKG51bGwsIG51bGwsIHRvQXJyYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBuZXcgZGF0YSBzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIG5ldyBkYXRhLlxuICAgKi9cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFycmF5IG9mIGNvbHVtbiB2YWx1ZXMgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIGBjb2x1bW5gIGlzIHRoZSBpbmRleCBvZiB0aGUgcm93IGluIHRoZSBkYXRhIHNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRBdENvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5kYXRhLCAocm93LCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldEF0Q2VsbChyb3dJbmRleCwgY29sdW1uKTtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzaW5nbGUgcm93IG9mIHRoZSBkYXRhIG9yIGEgc3Vic2V0IG9mIGl0cyBjb2x1bW5zLiBJZiBhIGNvbHVtbiByYW5nZSBvciBgdG9BcnJheWAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgaXRcbiAgICogb3BlcmF0ZXMgb25seSBvbiB0aGUgY29sdW1ucyBkZWNsYXJlZCBieSB0aGUgYGNvbHVtbnNgIHNldHRpbmcgb3IgdGhlIGRhdGEgc2NoZW1hLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydENvbHVtbl0gU3RhcnRpbmcgaW5kZXggZm9yIHRoZSBjb2x1bW4gcmFuZ2UgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtlbmRDb2x1bW5dIEVuZGluZyBpbmRleCBmb3IgdGhlIGNvbHVtbiByYW5nZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0FycmF5PWZhbHNlXSBgdHJ1ZWAgaWYgdGhlIHJldHVybmVkIHZhbHVlIHNob3VsZCBiZSBmb3JjZWQgdG8gYmUgcHJlc2VudGVkIGFzIGFuIGFycmF5LlxuICAgKiBAcmV0dXJucyB7QXJyYXl8b2JqZWN0fVxuICAgKi9cbiAgZ2V0QXRSb3cocm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gICAgbGV0IHRvQXJyYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuICAgIGNvbnN0IGdldEFsbFByb3BzID0gc3RhcnRDb2x1bW4gPT09IHVuZGVmaW5lZCAmJiBlbmRDb2x1bW4gPT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhRG90Tm90YXRpb25cbiAgICB9ID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBsZXQgZGF0YVJvdyA9IG51bGw7XG4gICAgbGV0IG5ld0RhdGFSb3cgPSBudWxsO1xuICAgIGRhdGFSb3cgPSB0aGlzLm1vZGlmeVJvd0RhdGEocm93KTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhUm93KSkge1xuICAgICAgbmV3RGF0YVJvdyA9IFtdO1xuICAgICAgaWYgKGdldEFsbFByb3BzKSB7XG4gICAgICAgIGRhdGFSb3cuZm9yRWFjaCgoY2VsbCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgbmV3RGF0YVJvd1tjb2x1bW5dID0gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChyb3csIGNvbHVtbiwgZGF0YVJvdyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT25seSB0aGUgY29sdW1ucyBmcm9tIHRoZSBwcm92aWRlZCByYW5nZVxuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHN0YXJ0Q29sdW1uLCBlbmRDb2x1bW4sIGNvbHVtbiA9PiB7XG4gICAgICAgICAgbmV3RGF0YVJvd1tjb2x1bW4gLSBzdGFydENvbHVtbl0gPSB0aGlzLmdldEF0UGh5c2ljYWxDZWxsKHJvdywgY29sdW1uLCBkYXRhUm93KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX29iamVjdC5pc09iamVjdCkoZGF0YVJvdykgfHwgKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShkYXRhUm93KSkge1xuICAgICAgaWYgKHRvQXJyYXkpIHtcbiAgICAgICAgbmV3RGF0YVJvdyA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RGF0YVJvdyA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKCFnZXRBbGxQcm9wcyB8fCB0b0FycmF5KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlU3RhcnQgPSAwO1xuICAgICAgICBjb25zdCByYW5nZUVuZCA9IHRoaXMuY291bnRGaXJzdFJvd0tleXMoKSAtIDE7XG4gICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkocmFuZ2VTdGFydCwgcmFuZ2VFbmQsIGNvbHVtbiA9PiB7XG4gICAgICAgICAgY29uc3QgcHJvcCA9IHRoaXMuY29sVG9Qcm9wKGNvbHVtbik7XG4gICAgICAgICAgaWYgKGNvbHVtbiA+PSAoc3RhcnRDb2x1bW4gfHwgcmFuZ2VTdGFydCkgJiYgY29sdW1uIDw9IChlbmRDb2x1bW4gfHwgcmFuZ2VFbmQpICYmICFOdW1iZXIuaXNJbnRlZ2VyKHByb3ApKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB0aGlzLmdldEF0UGh5c2ljYWxDZWxsKHJvdywgcHJvcCwgZGF0YVJvdyk7XG4gICAgICAgICAgICBpZiAodG9BcnJheSkge1xuICAgICAgICAgICAgICBuZXdEYXRhUm93LnB1c2goY2VsbFZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YURvdE5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICgwLCBfb2JqZWN0LnNldFByb3BlcnR5KShuZXdEYXRhUm93LCBwcm9wLCBjZWxsVmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3RGF0YVJvd1twcm9wXSA9IGNlbGxWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoZGF0YVJvdywgKHZhbHVlLCBwcm9wKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChyb3csIHByb3AsIGRhdGFSb3cpO1xuICAgICAgICAgIGlmIChkYXRhRG90Tm90YXRpb24pIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LnNldFByb3BlcnR5KShuZXdEYXRhUm93LCBwcm9wLCBjZWxsVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdEYXRhUm93W3Byb3BdID0gY2VsbFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdEYXRhUm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcHJvdmlkZWQgdmFsdWUgaW4gdGhlIHNvdXJjZSBkYXRhIHNldCBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IGNvbHVtbiBQcm9wZXJ0eSBuYW1lIC8gcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBiZSBzZXQgYXQgdGhlIHByb3ZpZGVkIGNvb3JkaW5hdGVzLlxuICAgKi9cbiAgc2V0QXRDZWxsKHJvdywgY29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChyb3cgPj0gdGhpcy5jb3VudFJvd3MoKSB8fCBjb2x1bW4gPj0gdGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSB7XG4gICAgICAvLyBOb3QgZW5vdWdoIHJvd3MgYW5kL29yIGNvbHVtbnMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhvdC5oYXNIb29rKCdtb2RpZnlTb3VyY2VEYXRhJykpIHtcbiAgICAgIGNvbnN0IHZhbHVlSG9sZGVyID0gKDAsIF9vYmplY3QuY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKSh2YWx1ZSk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5U291cmNlRGF0YScsIHJvdywgY29sdW1uLCB2YWx1ZUhvbGRlciwgJ3NldCcpO1xuICAgICAgaWYgKHZhbHVlSG9sZGVyLmlzVG91Y2hlZCgpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWVIb2xkZXIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb2x1bW4pKSB7XG4gICAgICAvLyBjb2x1bW4gYXJndW1lbnQgaXMgdGhlIHByb3AgbmFtZVxuICAgICAgKDAsIF9vYmplY3Quc2V0UHJvcGVydHkpKHRoaXMuZGF0YVtyb3ddLCBjb2x1bW4sIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhW3Jvd11bY29sdW1uXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBmcm9tIHRoZSBzb3VyY2UgZGF0YSBzZXQgdXNpbmcgdGhlIHBoeXNpY2FsIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8RnVuY3Rpb259IGNvbHVtbiBQaHlzaWNhbCBjb2x1bW4gaW5kZXggLyBwcm9wZXJ0eSAvIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge0FycmF5fG9iamVjdH0gZGF0YVJvdyBBIHJlcHJlc2VudGF0aW9uIG9mIGEgZGF0YSByb3cuXG4gICAqIEByZXR1cm5zIHsqfSBWYWx1ZSBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBnZXRBdFBoeXNpY2FsQ2VsbChyb3csIGNvbHVtbiwgZGF0YVJvdykge1xuICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgIGlmIChkYXRhUm93KSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGRhdGFEb3ROb3RhdGlvblxuICAgICAgICB9ID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICAgICAgcmVzdWx0ID0gZGF0YURvdE5vdGF0aW9uID8gKDAsIF9vYmplY3QuZ2V0UHJvcGVydHkpKGRhdGFSb3csIGNvbHVtbikgOiBkYXRhUm93W2NvbHVtbl07XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0ID0gY29sdW1uKGRhdGFSb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZGF0YVJvd1tjb2x1bW5dO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5ob3QuaGFzSG9vaygnbW9kaWZ5U291cmNlRGF0YScpKSB7XG4gICAgICBjb25zdCB2YWx1ZUhvbGRlciA9ICgwLCBfb2JqZWN0LmNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcikocmVzdWx0KTtcbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlTb3VyY2VEYXRhJywgcm93LCBjb2x1bW4sIHZhbHVlSG9sZGVyLCAnZ2V0Jyk7XG4gICAgICBpZiAodmFsdWVIb2xkZXIuaXNUb3VjaGVkKCkpIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWVIb2xkZXIudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbmdsZSB2YWx1ZSBmcm9tIHRoZSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbk9yUHJvcCBWaXN1YWwgY29sdW1uIGluZGV4IG9yIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldEF0Q2VsbChyb3csIGNvbHVtbk9yUHJvcCkge1xuICAgIGNvbnN0IGRhdGFSb3cgPSB0aGlzLm1vZGlmeVJvd0RhdGEocm93KTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChyb3csIHRoaXMuY29sVG9Qcm9wKGNvbHVtbk9yUHJvcCksIGRhdGFSb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc291cmNlIGRhdGEgYnkgcGFzc2VkIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW3N0YXJ0XSBPYmplY3Qgd2l0aCBwaHlzaWNhbCBgcm93YCBhbmQgYGNvbGAga2V5cyAob3IgdmlzdWFsIGNvbHVtbiBpbmRleCwgaWYgZGF0YSB0eXBlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2VuZF0gT2JqZWN0IHdpdGggcGh5c2ljYWwgYHJvd2AgYW5kIGBjb2xgIGtleXMgKG9yIHZpc3VhbCBjb2x1bW4gaW5kZXgsIGlmIGRhdGEgdHlwZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9BcnJheT1mYWxzZV0gSWYgYHRydWVgIHJldHVybiBzb3VyY2UgZGF0YSBhcyBhbiBhcnJheSBvZiBhcnJheXMgZXZlbiB3aGVuIHNvdXJjZSBkYXRhIHdhcyBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBhbm90aGVyIGZvcm1hdC5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0QnlSYW5nZSgpIHtcbiAgICBsZXQgc3RhcnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgbGV0IGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICBsZXQgdG9BcnJheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgbGV0IGdldEFsbFByb3BzID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0Um93ID0gbnVsbDtcbiAgICBsZXQgc3RhcnRDb2wgPSBudWxsO1xuICAgIGxldCBlbmRSb3cgPSBudWxsO1xuICAgIGxldCBlbmRDb2wgPSBudWxsO1xuICAgIGlmIChzdGFydCA9PT0gbnVsbCB8fCBlbmQgPT09IG51bGwpIHtcbiAgICAgIGdldEFsbFByb3BzID0gdHJ1ZTtcbiAgICAgIHN0YXJ0Um93ID0gMDtcbiAgICAgIGVuZFJvdyA9IHRoaXMuY291bnRSb3dzKCkgLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydFJvdyA9IE1hdGgubWluKHN0YXJ0LnJvdywgZW5kLnJvdyk7XG4gICAgICBzdGFydENvbCA9IE1hdGgubWluKHN0YXJ0LmNvbCwgZW5kLmNvbCk7XG4gICAgICBlbmRSb3cgPSBNYXRoLm1heChzdGFydC5yb3csIGVuZC5yb3cpO1xuICAgICAgZW5kQ29sID0gTWF0aC5tYXgoc3RhcnQuY29sLCBlbmQuY29sKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydFJvdywgZW5kUm93LCBjdXJyZW50Um93ID0+IHtcbiAgICAgIHJlc3VsdC5wdXNoKGdldEFsbFByb3BzID8gdGhpcy5nZXRBdFJvdyhjdXJyZW50Um93LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdG9BcnJheSkgOiB0aGlzLmdldEF0Um93KGN1cnJlbnRSb3csIHN0YXJ0Q29sLCBlbmRDb2wsIHRvQXJyYXkpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IG51bWJlciBvZiByb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnRSb3dzKCkge1xuICAgIGlmICh0aGlzLmhvdC5oYXNIb29rKCdtb2RpZnlTb3VyY2VMZW5ndGgnKSkge1xuICAgICAgY29uc3QgbW9kaWZpZWRTb3VyY2VMZW5ndGggPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5U291cmNlTGVuZ3RoJyk7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihtb2RpZmllZFNvdXJjZUxlbmd0aCkpIHtcbiAgICAgICAgcmV0dXJuIG1vZGlmaWVkU291cmNlTGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBudW1iZXIgb2YgY29sdW1ucy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvdW50Rmlyc3RSb3dLZXlzKCkge1xuICAgIHJldHVybiAoMCwgX2RhdGEuY291bnRGaXJzdFJvd0tleXMpKHRoaXMuZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLmhvdCA9IG51bGw7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IERhdGFTb3VyY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2RhdGFNYXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhdGFNYXBcIikpO1xuZXhwb3J0cy5EYXRhTWFwID0gX2RhdGFNYXAuZGVmYXVsdDtcbnZhciBfbWV0YU1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21ldGFNYW5hZ2VyXCIpKTtcbmV4cG9ydHMuTWV0YU1hbmFnZXIgPSBfbWV0YU1hbmFnZXIuZGVmYXVsdDtcbnZhciBfbWV0YVNjaGVtYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWV0YU1hbmFnZXIvbWV0YVNjaGVtYVwiKSk7XG5leHBvcnRzLm1ldGFTY2hlbWFGYWN0b3J5ID0gX21ldGFTY2hlbWEuZGVmYXVsdDtcbnZhciBfcmVwbGFjZURhdGEgPSByZXF1aXJlKFwiLi9yZXBsYWNlRGF0YVwiKTtcbmV4cG9ydHMucmVwbGFjZURhdGEgPSBfcmVwbGFjZURhdGEucmVwbGFjZURhdGE7XG52YXIgX2R5bmFtaWNDZWxsTWV0YSA9IHJlcXVpcmUoXCIuL21ldGFNYW5hZ2VyL21vZHMvZHluYW1pY0NlbGxNZXRhXCIpO1xuZXhwb3J0cy5EeW5hbWljQ2VsbE1ldGFNb2QgPSBfZHluYW1pY0NlbGxNZXRhLkR5bmFtaWNDZWxsTWV0YU1vZDtcbnZhciBfZXh0ZW5kTWV0YVByb3BlcnRpZXMgPSByZXF1aXJlKFwiLi9tZXRhTWFuYWdlci9tb2RzL2V4dGVuZE1ldGFQcm9wZXJ0aWVzXCIpO1xuZXhwb3J0cy5FeHRlbmRNZXRhUHJvcGVydGllc01vZCA9IF9leHRlbmRNZXRhUHJvcGVydGllcy5FeHRlbmRNZXRhUHJvcGVydGllc01vZDtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9nbG9iYWxNZXRhID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZXRhTGF5ZXJzL2dsb2JhbE1ldGFcIikpO1xudmFyIF90YWJsZU1ldGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21ldGFMYXllcnMvdGFibGVNZXRhXCIpKTtcbnZhciBfY29sdW1uTWV0YSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWV0YUxheWVycy9jb2x1bW5NZXRhXCIpKTtcbnZhciBfY2VsbE1ldGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21ldGFMYXllcnMvY2VsbE1ldGFcIikpO1xudmFyIF9sb2NhbEhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbWl4aW5zL2xvY2FsSG9va3NcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBXaXRoIHRoZSBNZXRhIE1hbmFnZXIgY2xhc3MsIGl0IGNhbiBiZSBwb3NzaWJsZSB0byBtYW5hZ2Ugd2l0aCBtZXRhIG9iamVjdHMgZm9yIGRpZmZlcmVudCBsYXllcnMgaW5cbiAqIG9uZSBwbGFjZS4gQWxsIGNvb3JkaW5hdGVzIHVzZWQgdG8gZmV0Y2gsIHVwZGF0aW5nLCByZW1vdmluZywgb3IgY3JlYXRpbmcgcm93cyBvciBjb2x1bW5zIGhhdmUgdG9cbiAqIGJlIHBhc3NlZCBhcyBwaHlzaWNhbCB2YWx1ZXMuXG4gKlxuICogVGhlIGRpYWdyYW0gb2YgdGhlIG1ldGEgbGF5ZXJzOlxuICogKy0tLS0tLS0tLS0tLS0rLlxuICog4pSCIEdsb2JhbE1ldGEgIOKUglxuICog4pSCIChwcm90b3R5cGUpIOKUglxuICogKy0tLS0tLS0tLS0tLS0rXFxcbiAqICAgICAgIOKUgiAgICAgICAgIFxcXG4gKiAgICAgICDilIIgICAgICAgICAgXFxcbiAqICAgICAgXFzilIIvICAgICAgICAgX1xcfFxuICogKy0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0tKy5cbiAqIOKUgiBUYWJsZU1ldGEgICDilIIgICAg4pSCIENvbHVtbk1ldGEgIOKUglxuICog4pSCIChpbnN0YW5jZSkgIOKUgiAgICDilIIgKHByb3RvdHlwZSkg4pSCXG4gKiArLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLS0rLlxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXFzilIIvXG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rLlxuICogICAgICAgICAgICAgICAgICAgIOKUgiAgQ2VsbE1ldGEgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICDilIIgKGluc3RhbmNlKSAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rLlxuICpcbiAqIEEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgc3BlY2lmaWMgbGF5ZXJzIGNhbiBiZSBmb3VuZCBpbiB0aGUgXCJtZXRhTGF5ZXJzL1wiIG1vZHVsZXMgZGVzY3JpcHRpb24uXG4gKi9cbmNsYXNzIE1ldGFNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoaG90KSB7XG4gICAgbGV0IGN1c3RvbVNldHRpbmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBsZXQgbWV0YU1vZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IFtdO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtIYW5kc29udGFibGV9XG4gICAgICovXG4gICAgdGhpcy5ob3QgPSBob3Q7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0dsb2JhbE1ldGF9XG4gICAgICovXG4gICAgdGhpcy5nbG9iYWxNZXRhID0gbmV3IF9nbG9iYWxNZXRhLmRlZmF1bHQoaG90KTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7VGFibGVNZXRhfVxuICAgICAqL1xuICAgIHRoaXMudGFibGVNZXRhID0gbmV3IF90YWJsZU1ldGEuZGVmYXVsdCh0aGlzLmdsb2JhbE1ldGEpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtDb2x1bW5NZXRhfVxuICAgICAqL1xuICAgIHRoaXMuY29sdW1uTWV0YSA9IG5ldyBfY29sdW1uTWV0YS5kZWZhdWx0KHRoaXMuZ2xvYmFsTWV0YSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0NlbGxNZXRhfVxuICAgICAqL1xuICAgIHRoaXMuY2VsbE1ldGEgPSBuZXcgX2NlbGxNZXRhLmRlZmF1bHQodGhpcy5jb2x1bW5NZXRhKTtcbiAgICBtZXRhTW9kcy5mb3JFYWNoKE1vZGlmaWVyQ2xhc3MgPT4gbmV3IE1vZGlmaWVyQ2xhc3ModGhpcykpO1xuICAgIHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGN1c3RvbVNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBnbG9iYWwgbWV0YSBvYmplY3QgdGhhdCBpcyBhIHJvb3Qgb2YgYWxsIGRlZmF1bHQgc2V0dGluZ3MsIHdoaWNoIGFyZSByZWNvZ25pemFibGUgYnkgSGFuZHNvbnRhYmxlLlxuICAgKiBPdGhlciBsYXllcnMgaW5oZXJpdGVzIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhpcy4gQWRkaW5nLCByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdFxuICAgKiBvYmplY3QgaGFzIGEgZGlyZWN0IHJlZmxlY3Rpb24gdG8gYWxsIGxheWVycy5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldEdsb2JhbE1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBnbG9iYWwgc2V0dGluZ3Mgb2JqZWN0IGJ5IG1lcmdpbmcgc2V0dGluZ3Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIEFuIG9iamVjdCB0byBtZXJnZSB3aXRoLlxuICAgKi9cbiAgdXBkYXRlR2xvYmFsTWV0YShzZXR0aW5ncykge1xuICAgIHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKHNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNldHRpbmdzIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4gdGhlIEhhbmRzb250YWJsZSBjb25zdHJ1Y3Rvci4gVGhhdCBsYXllciBjb250YWlucyBhbGxcbiAgICogZGVmYXVsdCBzZXR0aW5ncyBpbmhlcml0ZWQgZnJvbSB0aGUgR2xvYmFsTWV0YSBsYXllciBtZXJnZWQgd2l0aCBzZXR0aW5ncyBwYXNzZWQgYnkgdGhlIGRldmVsb3Blci5cbiAgICogQWRkaW5nLCByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdCBvYmplY3QgaGFzIG5vIGRpcmVjdCByZWZsZWN0aW9uIG9uIGFueSBvdGhlciBsYXllcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUYWJsZU1ldGF9XG4gICAqL1xuICBnZXRUYWJsZU1ldGEoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVNZXRhLmdldE1ldGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRhYmxlIHNldHRpbmdzIG9iamVjdCBieSBtZXJnaW5nIHNldHRpbmdzIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBBbiBvYmplY3QgdG8gbWVyZ2Ugd2l0aC5cbiAgICovXG4gIHVwZGF0ZVRhYmxlTWV0YShzZXR0aW5ncykge1xuICAgIHRoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29sdW1uIG1ldGEgb2JqZWN0IHRoYXQgaXMgYSByb290IG9mIGFsbCBzZXR0aW5ncyBkZWZpbmVkIGluIHRoZSBjb2x1bW4gcHJvcGVydHkgb2YgdGhlIEhhbmRzb250YWJsZVxuICAgKiBzZXR0aW5ncy4gRWFjaCBjb2x1bW4gaW4gdGhlIEhhbmRzb250YWJsZSBpcyBhc3NvY2lhdGVkIHdpdGggYSB1bmlxdWUgbWV0YSBvYmplY3Qgd2hpY2ggaWRlbnRpZmllZCBieVxuICAgKiB0aGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LiBBZGRpbmcsIHJlbW92aW5nLCBvciBjaGFuZ2luZyBwcm9wZXJ0eSBpbiB0aGF0IG9iamVjdCBoYXMgYSBkaXJlY3QgcmVmbGVjdGlvblxuICAgKiBvbmx5IGZvciB0aGUgQ2VsbE1ldGEgbGF5ZXIuIFRoZSByZWZsZWN0aW9uIHdpbGwgYmUgdmlzaWJsZSBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IGluIHRoZSBsb3dlclxuICAgKiBsYXllcnMgKHByb3RvdHlwZSBsb29rdXApLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldENvbHVtbk1ldGEocGh5c2ljYWxDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEocGh5c2ljYWxDb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgY29sdW1uIG1ldGEgb2JqZWN0IGJ5IG1lcmdpbmcgc2V0dGluZ3Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggd2hpY2ggcG9pbnRzIHdoYXQgY29sdW1uIG1ldGEgb2JqZWN0IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBBbiBvYmplY3QgdG8gbWVyZ2Ugd2l0aC5cbiAgICovXG4gIHVwZGF0ZUNvbHVtbk1ldGEocGh5c2ljYWxDb2x1bW4sIHNldHRpbmdzKSB7XG4gICAgdGhpcy5jb2x1bW5NZXRhLnVwZGF0ZU1ldGEocGh5c2ljYWxDb2x1bW4sIHNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjZWxsIG1ldGEgb2JqZWN0IHRoYXQgaXMgYSByb290IG9mIGFsbCBzZXR0aW5ncyBkZWZpbmVkIGZvciB0aGUgc3BlY2lmaWMgY2VsbCByZW5kZXJlZCBieVxuICAgKiB0aGUgSGFuZHNvbnRhYmxlLiBFYWNoIGNlbGwgbWV0YSBpbmhlcml0cyBzZXR0aW5ncyBmcm9tIGhpZ2hlciBsYXllcnMuIFdoZW4gYSBwcm9wZXJ0eSBkb2Vzbid0XG4gICAqIGV4aXN0IGluIHRoYXQgbGF5ZXIsIGl0IGlzIGxvb2tlZCB1cCB0aHJvdWdoIGEgcHJvdG90eXBlIHRvIHRoZSBoaWdoZXN0IGxheWVyLiBTdGFydGluZ1xuICAgKiBmcm9tIENlbGxNZXRhIC0+IENvbHVtbk1ldGEgYW5kIGVuZGluZyB0byBHbG9iYWxNZXRhLCB3aGljaCBzdG9yZXMgZGVmYXVsdCBzZXR0aW5ncy4gQWRkaW5nLFxuICAgKiByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdCBvYmplY3QgaGFzIG5vIGRpcmVjdCByZWZsZWN0aW9uIG9uIGFueSBvdGhlciBsYXllcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgYXJlIHVzZWQgdG8gZXh0ZW5kIHRoZSBjZWxsIG1ldGEgb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3B0aW9ucy52aXN1YWxSb3cgVGhlIHZpc3VhbCByb3cgaW5kZXggb2YgdGhlIGN1cnJlbnRseSByZXF1ZXN0ZWQgY2VsbCBtZXRhIG9iamVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9wdGlvbnMudmlzdWFsQ29sdW1uIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgcmVxdWVzdGVkIGNlbGwgbWV0YSBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRDZWxsTWV0YShwaHlzaWNhbFJvdywgcGh5c2ljYWxDb2x1bW4sIF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgdmlzdWFsUm93LFxuICAgICAgdmlzdWFsQ29sdW1uXG4gICAgfSA9IF9yZWY7XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmNlbGxNZXRhLmdldE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uKTtcbiAgICBjZWxsTWV0YS52aXN1YWxSb3cgPSB2aXN1YWxSb3c7XG4gICAgY2VsbE1ldGEudmlzdWFsQ29sID0gdmlzdWFsQ29sdW1uO1xuICAgIGNlbGxNZXRhLnJvdyA9IHBoeXNpY2FsUm93O1xuICAgIGNlbGxNZXRhLmNvbCA9IHBoeXNpY2FsQ29sdW1uO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJHZXRDZWxsTWV0YScsIGNlbGxNZXRhKTtcbiAgICByZXR1cm4gY2VsbE1ldGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHZhbHVlIChkZWZpbmVkIGJ5IHRoZSBga2V5YCBwcm9wZXJ0eSkgZnJvbSB0aGUgY2VsbCBtZXRhIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93IFRoZSBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IERlZmluZXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCBmcm9tIHRoZSBjZWxsIG1ldGEgb2JqZWN0LlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldENlbGxNZXRhS2V5VmFsdWUocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXkpIHtcbiAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YShwaHlzaWNhbFJvdywgcGh5c2ljYWxDb2x1bW4sIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZXR0aW5ncyBvYmplY3QgZm9yIGNlbGwgbWV0YSBvYmplY3QgZGVmaW5lZCBieSBcImtleVwiIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgVGhlIHBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHByb3BlcnR5IG5hbWUgdG8gc2V0LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHNhdmUuXG4gICAqL1xuICBzZXRDZWxsTWV0YShwaHlzaWNhbFJvdywgcGh5c2ljYWxDb2x1bW4sIGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLmNlbGxNZXRhLnNldE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGNlbGwgbWV0YSBvYmplY3QgYnkgbWVyZ2luZyBzZXR0aW5ncyB3aXRoIHRoZSBjdXJyZW50IHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgVGhlIHBoeXNpY2FsIHJvdyBpbmRleCB3aGljaCBwb2ludHMgd2hhdCBjZWxsIG1ldGEgb2JqZWN0IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4IHdoaWNoIHBvaW50cyB3aGF0IGNlbGwgbWV0YSBvYmplY3QgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIEFuIG9iamVjdCB0byBtZXJnZSB3aXRoLlxuICAgKi9cbiAgdXBkYXRlQ2VsbE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBzZXR0aW5ncykge1xuICAgIHRoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShwaHlzaWNhbFJvdywgcGh5c2ljYWxDb2x1bW4sIHNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcHJvcGVydHkgZGVmaW5lZCBieSB0aGUgXCJrZXlcIiBhcmd1bWVudCBmcm9tIHRoZSBjZWxsIG1ldGEgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgVGhlIHBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHByb3BlcnR5IG5hbWUgdG8gcmVtb3ZlLlxuICAgKi9cbiAgcmVtb3ZlQ2VsbE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXkpIHtcbiAgICB0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGNlbGwgbWV0YSBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkIGR1cmluZyB0aGUgSGFuZHNvbnRhYmxlIG9wZXJhdGlvbi4gQXMgY2VsbCBtZXRhXG4gICAqIG9iamVjdHMgYXJlIGNyZWF0ZWQgbGF6eSwgdGhlIGxlbmd0aCBvZiB0aGUgcmV0dXJuZWQgY29sbGVjdGlvbiBkZXBlbmRzIG9uIGhvdyBhbmQgd2hlbiB0aGVcbiAgICogdGFibGUgaGFzIGFza2VkIGZvciBhY2Nlc3MgdG8gdGhhdCBtZXRhIG9iamVjdHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAgICovXG4gIGdldENlbGxzTWV0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIGNlbGwgbWV0YSBvYmplY3RzIHRoYXQgd2VyZSBjcmVhdGVkIGR1cmluZyB0aGUgSGFuZHNvbnRhYmxlIG9wZXJhdGlvbiBidXQgZm9yXG4gICAqIHNwZWNpZmljIHJvdyBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93IFRoZSBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAgICovXG4gIGdldENlbGxzTWV0YUF0Um93KHBoeXNpY2FsUm93KSB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhwaHlzaWNhbFJvdyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvbmUgb3IgbW9yZSByb3dzIGF0IHNwZWNpZmljIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgVGhlIHBoeXNpY2FsIHJvdyBpbmRleCB3aGljaCBwb2ludHMgZnJvbSB3aGF0IHBvc2l0aW9uIHRoZSByb3cgaXMgYWRkZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbYW1vdW50PTFdIEFuIGFtb3VudCBvZiByb3dzIHRvIGFkZC5cbiAgICovXG4gIGNyZWF0ZVJvdyhwaHlzaWNhbFJvdykge1xuICAgIGxldCBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG4gICAgdGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cocGh5c2ljYWxSb3csIGFtb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBvbmUgb3IgbW9yZSByb3dzIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4IHdoaWNoIHBvaW50cyBmcm9tIHdoYXQgcG9zaXRpb24gdGhlIHJvdyBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbiBhbW91bnQgcm93cyB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmVSb3cocGh5c2ljYWxSb3cpIHtcbiAgICBsZXQgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgIHRoaXMuY2VsbE1ldGEucmVtb3ZlUm93KHBoeXNpY2FsUm93LCBhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhdCBzcGVjaWZpYyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggd2hpY2ggcG9pbnRzIGZyb20gd2hhdCBwb3NpdGlvbiB0aGUgY29sdW1uIGlzIGFkZGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbiBhbW91bnQgb2YgY29sdW1ucyB0byBhZGQuXG4gICAqL1xuICBjcmVhdGVDb2x1bW4ocGh5c2ljYWxDb2x1bW4pIHtcbiAgICBsZXQgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgIHRoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKHBoeXNpY2FsQ29sdW1uLCBhbW91bnQpO1xuICAgIHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4ocGh5c2ljYWxDb2x1bW4sIGFtb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBvbmUgb3IgbW9yZSBjb2x1bW5zIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4IHdoaWNoIHBvaW50cyBmcm9tIHdoYXQgcG9zaXRpb24gdGhlIGNvbHVtbiBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbiBhbW91bnQgb2YgY29sdW1ucyB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmVDb2x1bW4ocGh5c2ljYWxDb2x1bW4pIHtcbiAgICBsZXQgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgIHRoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKHBoeXNpY2FsQ29sdW1uLCBhbW91bnQpO1xuICAgIHRoaXMuY29sdW1uTWV0YS5yZW1vdmVDb2x1bW4ocGh5c2ljYWxDb2x1bW4sIGFtb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBzYXZlZCBjZWxsIG1ldGEgb2JqZWN0cy4gSXQga2VlcHMgY29sdW1uIG1ldGEsIHRhYmxlIG1ldGEsIGFuZCBnbG9iYWwgbWV0YSBpbnRhY3QuXG4gICAqL1xuICBjbGVhckNlbGxzQ2FjaGUoKSB7XG4gICAgdGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBzYXZlZCBjZWxsIGFuZCBjb2x1bW5zIG1ldGEgb2JqZWN0cy5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCk7XG4gICAgdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gTWV0YU1hbmFnZXI7XG4oMCwgX29iamVjdC5taXhpbikoTWV0YU1hbmFnZXIsIF9sb2NhbEhvb2tzLmRlZmF1bHQpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBAY2xhc3MgTGF6eUZhY3RvcnlNYXBcbiAqXG4gKiBUaGUgTGF6eUZhY3RvcnlNYXAgb2JqZWN0IGhvbGRzIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgc3RydWN0dXJlIHNpbWlsYXIgdG8gdGhlXG4gKiByZWd1bGFyIE1hcC4gT25jZSBjcmVhdGVkLCBpdGVtcyBjYW4gYmUgbW92ZWQgYXJvdW5kIGEgZ3JpZCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdGlvbnNcbiAqIHBlcmZvcm1lZCBvbiB0aGF0IGdyaWQgLSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm93cy4gVGhlIGNvbGxlY3Rpb24gcmVxdWlyZXMgXCJrZXlcIlxuICogdG8gYmUgYSB6ZXJvLWJhc2VkIGluZGV4LlxuICpcbiAqIEl0J3MgZXNzZW50aWFsIHRvIG5vdGljZSB0aGF0IHRoZSBcImtleVwiIGluZGV4IHVuZGVyIHdoaWNoIHRoZSBpdGVtIHdhcyBjcmVhdGVkXG4gKiBpcyB2b2xhdGlsZS4gQWZ0ZXIgYWx0ZXJpbmcgdGhlIGdyaWQsIHRoZSBcImtleVwiIGluZGV4IGNhbiBjaGFuZ2UuXG4gKlxuICogSGF2aW5nIGNyZWF0ZWQgTiBpdGVtcyB3aXRoIGNvcnJlc3BvbmRpbmcgZXhhbXBsZSBkYXRhIHdoZXJlIHRoZSBkYXRhIGhhcyAxMFxuICogaG9sZXMgKGB1bmRlZmluZWRgIHZhbHVlcykgd2l0aGluICh0aGF0J3Mgd2h5IGludGVybmFsIHN0b3JhZ2UgaW5kZXggY291bnRzIGZyb20gMTApLlxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLlxuICogfCAwLzEwIHwgMS8xMSB8IDIvMTIgfCAzLzEzIHwgNC8xNCB8ICBLZXlzICh2b2xhdGlsZSB6ZXJvLWJhc2VkIGluZGV4IC8gaW50ZXJuYWwgc3RvcmFnZSBpbmRleClcbiAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy5cbiAqICAgIOKUgiAgICAgIOKUgiAgICAgIOKUgiAgICAgIOKUgiAgICAgIOKUglxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLlxuICogfCBBQUEgIHwgQkJCICB8IENDQyAgfCBEREQgIHwgRUVFICB8ICBEYXRhXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsuXG4gKlxuICogTWFwLm9idGFpbigwKSAvLyByZXR1cm5zIFwiQUFBXCJcbiAqIG1hcC5vYnRhaW4oMikgLy8gcmV0dXJucyBcIkNDQ1wiLlxuICpcbiAqIEFmdGVyIGluc2VydGluZyAyIG5ldyByb3dzLCBrZXlzIHRoYXQgaG9sZCB0aGUgZGF0YSBwb3NpdGlvbmVkIGFmdGVyIHRoZSBwbGFjZVxuICogd2hlcmUgdGhlIG5ldyByb3dzIGFyZSBhZGRlZCBhcmUgdXBzaGlmdGVkIGJ5IDIuXG4gKiAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICDilIIgSW5zZXJ0IDIgcm93c1xuICogICAgICAgICAgICAgIFxc4pSCL1xuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLlxuICogfCAwLzEwIHwgMS8xMSB8IDIvMTIgfCAzLzEzIHwgNC8xNCB8ICBLZXlzIGJlZm9yZVxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLlxuICpcbiAqICAgICAgICAgICAgICAgIC8gMiBuZXcgcm93cyBcXFxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsuXG4gKiB8IDAvMTAgfCAxLzExIHwgMi8xNSB8IDMvMTYgfCA0LzEyIHwgNS8xMyB8IDYvMTQgfCAgS2V5cyBhZnRlclxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSsuXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICDilIJcbiAqICAgIOKUgiAgICAgICDilIIgICAgICDilJTilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilLzilJAgICAg4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUvOKUgOKUgOKUgOKUgOKUvOKUkFxuICogICAg4pSCICAgICAgIOKUgiAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgIOKUguKUgiAgICDilILilIJcbiAqICAgIOKUgiAgICAgICDilIIgICAgICDilIIgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJjilIIgICAg4pSC4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSY4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAgIOKUgiAgICAg4pSCXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy5cbiAqIHwgQUFBICB8IEJCQiAgfCBDQ0MgIHwgREREICB8IEVFRSAgfCBGRkYgIHwgR0dHICB8ICBEYXRhXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICpcbiAqIE5vdyBhdCBpbmRleCAyIGFuZCAzIHdlIGhhdmUgYWNjZXNzIHRvIG5ldyBpdGVtcy5cbiAqXG4gKiBtYXAub2J0YWluKDIpIC8vIHJldHVybnMgbmV3IHZhbHVlIFwiRkZGXCIgZm9yIG5ld2x5IGNyZWF0ZWQgcm93LlxuICogbWFwLm9idGFpbig0KSAvLyBpbmRleCBzaGlmdGVkIGJ5IDIgaGFzIGFjY2VzcyB0byB0aGUgb2xkIFwiQ0NDXCIgdmFsdWUsIGFzIGJlZm9yZSBpbnNlcnRpbmcuXG4gKlxuICogYWZ0ZXIgcmVtb3ZpbmcgNCByb3dzLCBrZXlzIHRoYXQgaG9sZCB0aGUgZGF0YSBwb3NpdGlvbmVkIGFmdGVyIHRoZSBwbGFjZSB3aGVyZSB0aGVcbiAqIHJvd3MgYXJlIHJlbW92ZWQgYXJlIGRvd25zaGlmdGVkIGJ5IDQuXG4gKiAgICAgICAg4pSCXG4gKiAgICAgICAg4pSCIFJlbW92ZSA0IHJvd3NcbiAqICAgICAgICDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAqICAgICAgIFxc4pSCLyAgICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICogfCAwLzEwIHwgMS8xMSB8IDIvMTUgfCAzLzE2IHwgNC8xMiB8IDUvMTMgfCA2LzE0IHwgIEtleXMgYWZ0ZXJcbiAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICDilIJcbiAqICAgIOKUgiAgICAgICDilIIgICAgICDilJTilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilLzilJAgICAg4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUvOKUgOKUgOKUgOKUgOKUvOKUkFxuICogICAg4pSCICAgICAgIOKUgiAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgIOKUguKUgiAgICDilILilIJcbiAqICAgIOKUgiAgICAgICDilIIgICAgICDilIIgICAgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJjilIIgICAg4pSC4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSY4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAg4pSCICAgICAgIOKUgiAgICAg4pSCXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICogfCBBQUEgIHwgQkJCICB8IENDQyAgfCBEREQgIHwgRUVFICB8IEZGRiAgfCBHR0cgIHwgIERhdGFcbiAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rXG4gKlxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICogfCAwLzEwIHwgMS8xMyB8IDIvMTQgfCAgS2V5cyBhZnRlclxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICogICAg4pSCICAgICAgIOKUgiAgICAgIOKUglxuICogICAg4pSCICAgICAgIOKUgiAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICogICAg4pSCICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkCAgICAgICDilIJcbiAqICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgIOKUglxuICogICAg4pSCICAgICAgICAgICAgICAgICAgICDilIIgICAgICAg4pSCXG4gKiAgICDilIIgICAgICAgICAgICAgICAgICAgIOKUgiAgICAgICDilIJcbiAqICAgIOKUgiAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgIOKUglxuICogKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLStcbiAqIHwgQUFBICB8IEJCQiAgfCBDQ0MgIHwgREREICB8IEVFRSAgfCBGRkYgIHwgR0dHICB8ICBEYXRhXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tK1xuICogICAgICAgICAgIC/ilIJcXCAgIC/ilIJcXCAgICAgICAgICAgICAgICAgICAv4pSCXFwgICAv4pSCXFxcbiAqICAgICAgICAgICAg4pSU4pSA4pSA4pSs4pSA4pSA4pSYICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSs4pSA4pSA4pSYXG4gKiAgICAgICAgICAgVGhpcyBkYXRhIGlzIG1hcmtlZCBhcyBcImhvbGVcIiB3aGljaFxuICogICAgICAgICAgIG1lYW5zIHRoYXQgY2FuIGJlIHJlcGxhY2VkIGJ5IG5ldyBpdGVtXG4gKiAgICAgICAgICAgd2hlbiB0aGF0IHdpbGwgYmUgY3JlYXRlZC5cbiAqXG4gKiBtYXAub2J0YWluKDIpIC8vIHJldHVybnMgdGhlIHZhbHVlIChcIkVFRVwiKSBhcyBpdCBzaG91bGQuIEFjY2VzcyB0byB0aGUgdmFsdWUgaXNcbiAqICAgICAgICAgICAgICAgLy8gY2hhbmdlZCAodGhlIGtleSB3YXMgZG93bnNoaWZ0ZWQpLiBIb3dldmVyLCB0aGUgaW50ZXJuYWwgaW5kZXggaGFzIG5vdCBjaGFuZ2VkLFxuICogICAgICAgICAgICAgICAvLyB3aGljaCBtZWFucyB0aGF0IHRoZSBkYXRhIGRvZXMgbm90IG5lZWQgdG8gYmUgY2hhbmdlZCAoc3BsaWNlZCkgdG9vLlxuICpcbiAqIEFmdGVyIHByZXZpb3VzIHJlbW92ZSBvcGVyYXRpb24gd2hpY2ggY3JlYXRlcyBzb21lIFwiaG9sZXNcIiBvYnRhaW5pbmcgbmV3XG4gKiBpdGVtcyByZXBsYWNlcyB0aGF0IFwiaG9sZXNcIiBhcyBmb2xsb3dzOlxuICpcbiAqIC8vIE9idGFpbnMgbmV3IGl0ZW1cbiAqIG1hcC5vYnRhaW4oOTApIC8vIFJldHVybnMgXCJORVdcIiB2YWx1ZVxuICpcbiAqICstLS0tLS0rLS0tLS0tKy0tLS0tLSsuLi4rLS0tLS0tK1xuICogfCAwLzEwIHwgMS8xMyB8IDIvMTQgfCAgIHwgOTAvMCB8ICBLZXlzIGFmdGVyXG4gKiArLS0tLS0tKy0tLS0tLSstLS0tLS0rLi4uKy0tLS0tLStcbiAqICAgIOKUgiAgICAgICDilIIgICAgICDilIIgICAgICAgICAg4pSCXG4gKiAgICDilIIgICAgICAg4pSCICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gKiAgICDilIIgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSQICAgICAg4pSCXG4gKiAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgIOKUgiAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICDilIJcbiAqICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgICAg4pSCXG4gKiAgICDilIIgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICDilIIgICAgICDilIJcbiAqICstLS0tLS0rLi4uKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0rXG4gKiB8IE5FVyAgfCAgIHwgQUFBICB8IEJCQiAgfCBDQ0MgIHwgREREICB8IEVFRSAgfCBGRkYgfCAgRGF0YVxuICogKy0tLS0tLSsuLi4rLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLStcbiAqICAgL+KUglxcXG4gKiAgICDilIJcbiAqIFRoZSBmaXJzdCBcImhvbGVcIiAoYXQgaW5kZXggMCkgaXRlbSBpcyBwZXJtYW5lbnRseSByZW1vdmVkIGFuZCByZXBsYWNlZCBieSBhIG5ldyBpdGVtLlxuICogVGhlIGhvbGUgaW5kZXggaXMgdGFrZW4gZnJvbSB0aGUgaG9sZSBjb2xsZWN0aW9uIHdoaWNoIGFjdCBhcyBGSUZPIChGaXJzdCBJbiBGaXJzdCBPdXQpLlxuICovXG4vKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbmNsYXNzIExhenlGYWN0b3J5TWFwIHtcbiAgY29uc3RydWN0b3IodmFsdWVGYWN0b3J5KSB7XG4gICAgLyoqXG4gICAgICogVGhlIGRhdGEgZmFjdG9yeSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ2YWx1ZUZhY3RvcnlcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSB3aGljaCBjb250YWlucyBkYXRhLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRhdGFcIiwgW10pO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGluZGV4ZXMgd2hlcmUgdGhlIGtleSBvZiB0aGUgYXJyYXkgaXMgbWFwcGVkIHRvIHRoZSB2YWx1ZSB3aGljaCBwb2ludHMgdG8gdGhlXG4gICAgICogc3BlY2lmaWMgcG9zaXRpb24gb2YgdGhlIGRhdGEgYXJyYXkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5kZXhcIiwgW10pO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGluZGV4ZXMgdGhhdCBwb2ludHMgdG8gdGhlIGRhdGEgaXRlbXMgd2hpY2ggY2FuIGJlIHJlcGxhY2VkIGJ5IG9idGFpbmluZyBuZXdcbiAgICAgKiBvbmVzLiBUaGUgXCJob2xlc1wiIGFyZSBhbiBpbnRlbmRlZCBlZmZlY3Qgb2YgZGVsZXRpbmcgZW50cmllcy5cbiAgICAgKlxuICAgICAqIFRoZSBpZGVhIG9mIFwiaG9sZXNcIiBnZW5lcmFsbHkgYWxsb3dzIHVzIHRvIG5vdCBtb2RpZnkgdGhlIFwiZGF0YVwiIHN0cnVjdHVyZSB3aGlsZSByZW1vdmluZ1xuICAgICAqIGl0ZW1zIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2V0PG51bWJlcj59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaG9sZXNcIiwgbmV3IFNldCgpKTtcbiAgICB0aGlzLnZhbHVlRmFjdG9yeSA9IHZhbHVlRmFjdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIGlmIGRhdGEgbm90IGV4aXN0IGNyZWF0ZXMgYW5kIHJldHVybnMgbmV3IGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBrZXkgVGhlIGl0ZW0ga2V5IGFzIHplcm8tYmFzZWQgaW5kZXguXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgb2J0YWluKGtleSkge1xuICAgICgwLCBfdXRpbHMuYXNzZXJ0KSgoKSA9PiAoMCwgX3V0aWxzLmlzVW5zaWduZWROdW1iZXIpKGtleSksICdFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyLicpO1xuICAgIGNvbnN0IGRhdGFJbmRleCA9IHRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5S2V5KGtleSk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoZGF0YUluZGV4ID49IDApIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZGF0YVtkYXRhSW5kZXhdO1xuICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVGYWN0b3J5KGtleSk7XG4gICAgICAgIHRoaXMuZGF0YVtkYXRhSW5kZXhdID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnZhbHVlRmFjdG9yeShrZXkpO1xuICAgICAgaWYgKHRoaXMuaG9sZXMuc2l6ZSA+IDApIHtcbiAgICAgICAgY29uc3QgcmV1c2VJbmRleCA9IHRoaXMuaG9sZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlOyAvLyBHZXRzIGZpcnN0IGl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvblxuXG4gICAgICAgIHRoaXMuaG9sZXMuZGVsZXRlKHJldXNlSW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGFbcmV1c2VJbmRleF0gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuaW5kZXhba2V5XSA9IHJldXNlSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGEucHVzaChyZXN1bHQpO1xuICAgICAgICB0aGlzLmluZGV4W2tleV0gPSB0aGlzLmRhdGEubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGFuIGVtcHR5IGRhdGEgdG8gdGhlIG1hcC4gVGhpcyBtZXRob2QgY3JlYXRlcyBhbiBlbXB0eSBzcGFjZSBmb3Igb2J0YWluaW5nXG4gICAqIG5ldyBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0ga2V5IFRoZSBrZXkgYXMgdm9sYXRpbGUgemVyby1iYXNlZCBpbmRleCBhdCB3aGljaCB0byBiZWdpbiBpbnNlcnRpbmcgc3BhY2UgZm9yIG5ldyBkYXRhLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Ftb3VudD0xXSBBbW1vdW50IG9mIGRhdGEgdG8gaW5zZXJ0LlxuICAgKi9cbiAgaW5zZXJ0KGtleSkge1xuICAgIGxldCBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG4gICAgKDAsIF91dGlscy5hc3NlcnQpKCgpID0+ICgwLCBfdXRpbHMuaXNVbnNpZ25lZE51bWJlcikoa2V5KSB8fCAoMCwgX3V0aWxzLmlzTnVsbGlzaCkoa2V5KSwgJ0V4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuJyk7XG4gICAgY29uc3QgbmV3SW5kZXhlcyA9IFtdO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW1vdW50OyBpKyspIHtcbiAgICAgIG5ld0luZGV4ZXMucHVzaChkYXRhTGVuZ3RoICsgaSk7XG4gICAgICB0aGlzLmRhdGEucHVzaCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRpb25JbmRleCA9ICgwLCBfdXRpbHMuaXNOdWxsaXNoKShrZXkpID8gdGhpcy5pbmRleC5sZW5ndGggOiBrZXk7XG4gICAgdGhpcy5pbmRleCA9IFsuLi50aGlzLmluZGV4LnNsaWNlKDAsIGluc2VydGlvbkluZGV4KSwgLi4ubmV3SW5kZXhlcywgLi4udGhpcy5pbmRleC5zbGljZShpbnNlcnRpb25JbmRleCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgKHNvZnQgcmVtb3ZlKSBkYXRhIGZyb20gXCJpbmRleFwiIGFuZCBhY2NvcmRpbmcgdG8gdGhlIGFtb3VudCBvZiBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0ga2V5IFRoZSBrZXkgYXMgdm9sYXRpbGUgemVyby1iYXNlZCBpbmRleCBhdCB3aGljaCB0byBiZWdpbiByZW1vdmluZyB0aGUgZGF0YS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFthbW91bnQ9MV0gQW1tb3VudCBkYXRhIHRvIHJlbW92ZS5cbiAgICovXG4gIHJlbW92ZShrZXkpIHtcbiAgICBsZXQgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICAgICgwLCBfdXRpbHMuYXNzZXJ0KSgoKSA9PiAoMCwgX3V0aWxzLmlzVW5zaWduZWROdW1iZXIpKGtleSkgfHwgKDAsIF91dGlscy5pc051bGxpc2gpKGtleSksICdFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LicpO1xuICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmluZGV4LnNwbGljZSgoMCwgX3V0aWxzLmlzTnVsbGlzaCkoa2V5KSA/IHRoaXMuaW5kZXgubGVuZ3RoIC0gYW1vdW50IDoga2V5LCBhbW91bnQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVtb3ZlZC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVtb3ZlZEluZGV4ID0gcmVtb3ZlZFtpXTtcbiAgICAgIGlmICh0eXBlb2YgcmVtb3ZlZEluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLmhvbGVzLmFkZChyZW1vdmVkSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBkYXRhIHdoaWNoIHRoaXMgbWFwIGhvbGRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCAtIHRoaXMuaG9sZXMuc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IEl0ZXJhdG9yIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB2YWx1ZXMgZm9yIGVhY2ggaXRlbSBpbiB0aGUgTGF6eU1hcCBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtJdGVyYXRvcn1cbiAgICovXG4gIHZhbHVlcygpIHtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheUZpbHRlcikodGhpcy5kYXRhLCAoXywgaW5kZXgpID0+ICF0aGlzLmhvbGVzLmhhcyhpbmRleCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IEl0ZXJhdG9yIG9iamVjdCB0aGF0IGNvbnRhaW5zIGFuIGFycmF5IG9mIGBbaW5kZXgsIHZhbHVlXWAgZm9yIGVhY2ggaXRlbSBpbiB0aGUgTGF6eU1hcCBvYmplY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtJdGVyYXRvcn1cbiAgICovXG4gIGVudHJpZXMoKSB7XG4gICAgY29uc3QgdmFsaWRFbnRyaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleUluZGV4ID0gdGhpcy5fZ2V0S2V5QnlTdG9yYWdlSW5kZXgoaSk7XG4gICAgICBpZiAoa2V5SW5kZXggIT09IC0xKSB7XG4gICAgICAgIHZhbGlkRW50cmllcy5wdXNoKFtrZXlJbmRleCwgdGhpcy5kYXRhW2ldXSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBkYXRhSW5kZXggPSAwO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGlmIChkYXRhSW5kZXggPCB2YWxpZEVudHJpZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWxpZEVudHJpZXNbZGF0YUluZGV4XTtcbiAgICAgICAgICBkYXRhSW5kZXggKz0gMTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIG1hcC5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIHRoaXMuaW5kZXggPSBbXTtcbiAgICB0aGlzLmhvbGVzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yYWdlIGluZGV4IGNhbGN1bGF0ZWQgZnJvbSB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0ga2V5IFZvbGF0aWxlIHplcm8tYmFzZWQgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgaW5kZXggMC1OIG9yIC0xIGlmIG5vIHN0b3JhZ2UgaW5kZXggZm91bmQuXG4gICAqL1xuICBfZ2V0U3RvcmFnZUluZGV4QnlLZXkoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXgubGVuZ3RoID4ga2V5ID8gdGhpcy5pbmRleFtrZXldIDogLTE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHZhbHVlIGNhbGN1bGF0ZWQgZnJvbSBzdG9yYWdlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGF0YUluZGV4IFplcm8tYmFzZWQgc3RvcmFnZSBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBpbmRleCAwLU4gb3IgLTEgaWYgbm8ga2V5IGZvdW5kLlxuICAgKi9cbiAgX2dldEtleUJ5U3RvcmFnZUluZGV4KGRhdGFJbmRleCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4LmluZGV4T2YoZGF0YUluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyB0aGlzIG9iamVjdCBpdGVyYWJsZS5cbiAgICpcbiAgICogQHJldHVybnMge0l0ZXJhdG9yfVxuICAgKi9cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcygpO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBMYXp5RmFjdG9yeU1hcDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG52YXIgX2xhenlGYWN0b3J5TWFwID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vbGF6eUZhY3RvcnlNYXBcIikpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBAY2xhc3MgQ2VsbE1ldGFcbiAqXG4gKiBUaGUgY2VsbCBtZXRhIG9iamVjdCBpcyBhIHJvb3Qgb2YgYWxsIHNldHRpbmdzIGRlZmluZWQgZm9yIHRoZSBzcGVjaWZpYyBjZWxsIHJlbmRlcmVkIGJ5IHRoZVxuICogSGFuZHNvbnRhYmxlLiBFYWNoIGNlbGwgbWV0YSBpbmhlcml0cyBzZXR0aW5ncyBmcm9tIGhpZ2hlciBsYXllcnMuIFdoZW4gYSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBleGlzdCBpbiB0aGF0IGxheWVyLCBpdCBpcyBsb29rZWQgdXAgdGhyb3VnaCBhIHByb3RvdHlwZSB0byB0aGUgaGlnaGVzdCBsYXllci4gU3RhcnRpbmdcbiAqIGZyb20gQ2VsbE1ldGEgLT4gQ29sdW1uTWV0YSBhbmQgZW5kaW5nIHRvIEdsb2JhbE1ldGEsIHdoaWNoIHN0b3JlcyBkZWZhdWx0IHNldHRpbmdzLiBBZGRpbmcsXG4gKiByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdCBvYmplY3QgaGFzIG5vIGRpcmVjdCByZWZsZWN0aW9uIG9uIGFueSBvdGhlciBsYXllcnMuXG4gKlxuICogKy0tLS0tLS0tLS0tLS0rXG4gKiDilIIgR2xvYmFsTWV0YSAg4pSCXG4gKiDilIIgKHByb3RvdHlwZSkg4pSCXG4gKiArLS0tLS0tLS0tLS0tLStcXFxuICogICAgICAg4pSCICAgICAgICAgXFxcbiAqICAgICAgIOKUgiAgICAgICAgICBcXFxuICogICAgICBcXOKUgi8gICAgICAgICBfXFx8XG4gKiArLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLS0rXG4gKiDilIIgVGFibGVNZXRhICAg4pSCICAgIOKUgiBDb2x1bW5NZXRhICDilIJcbiAqIOKUgiAoaW5zdGFuY2UpICDilIIgICAg4pSCIChwcm90b3R5cGUpIOKUglxuICogKy0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgXFzilIIvXG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgICAgICAgICAg4pSCICBDZWxsTWV0YSAgIOKUglxuICogICAgICAgICAgICAgICAgICAgIOKUgiAoaW5zdGFuY2UpICDilIJcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLStcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5jbGFzcyBDZWxsTWV0YSB7XG4gIGNvbnN0cnVjdG9yKGNvbHVtbk1ldGEpIHtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIENvbHVtbk1ldGEgbGF5ZXIuIFdoaWxlIGNyZWF0aW5nIG5ldyBjZWxsIG1ldGEgb2JqZWN0cywgYWxsIG5ldyBvYmplY3RzXG4gICAgICogaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gdGhlIENvbHVtbk1ldGEgbGF5ZXIuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29sdW1uTWV0YX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2x1bW5NZXRhXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSG9sZGVyIGZvciBjZWxsIG1ldGEgb2JqZWN0cywgb3JnYW5pemVkIGFzIGEgZ3JpZCBvZiBMYXp5RmFjdG9yeU1hcCBvZiBMYXp5RmFjdG9yeU1hcHMuXG4gICAgICogVGhlIGFjY2VzcyB0byB0aGUgY2VsbCBtZXRhIG9iamVjdCBpcyBkb25lIHRocm91Z2ggYWNjZXNzIHRvIHRoZSByb3cgZGVmaW5lZCBieSB0aGUgcGh5c2ljYWxcbiAgICAgKiByb3cgaW5kZXggYW5kIHRoZW4gYnkgYWNjZXNzaW5nIHRoZSBzZWNvbmQgTGF6eUZhY3RvcnkgTWFwIHVuZGVyIHRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TGF6eUZhY3RvcnlNYXA8bnVtYmVyLCBMYXp5RmFjdG9yeU1hcDxudW1iZXIsIG9iamVjdD4+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFzXCIsIG5ldyBfbGF6eUZhY3RvcnlNYXAuZGVmYXVsdCgoKSA9PiB0aGlzLl9jcmVhdGVSb3coKSkpO1xuICAgIHRoaXMuY29sdW1uTWV0YSA9IGNvbHVtbk1ldGE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBjZWxsIG1ldGEgb2JqZWN0IGJ5IG1lcmdpbmcgc2V0dGluZ3Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93IFRoZSBwaHlzaWNhbCByb3cgaW5kZXggd2hpY2ggcG9pbnRzIHdoYXQgY2VsbCBtZXRhIG9iamVjdCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleCB3aGljaCBwb2ludHMgd2hhdCBjZWxsIG1ldGEgb2JqZWN0IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBBbiBvYmplY3QgdG8gbWVyZ2Ugd2l0aC5cbiAgICovXG4gIHVwZGF0ZU1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBzZXR0aW5ncykge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uKTtcbiAgICAoMCwgX29iamVjdC5leHRlbmQpKG1ldGEsIHNldHRpbmdzKTtcbiAgICAoMCwgX3V0aWxzLmV4dGVuZEJ5TWV0YVR5cGUpKG1ldGEsIHNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG9uZSBvciBtb3JlIHJvd3MgYXQgc3BlY2lmaWMgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4IHdoaWNoIHBvaW50cyBmcm9tIHdoYXQgcG9zaXRpb24gdGhlIHJvdyBpcyBhZGRlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2Ygcm93cyB0byBhZGQuXG4gICAqL1xuICBjcmVhdGVSb3cocGh5c2ljYWxSb3csIGFtb3VudCkge1xuICAgIHRoaXMubWV0YXMuaW5zZXJ0KHBoeXNpY2FsUm93LCBhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhdCBzcGVjaWZpYyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggd2hpY2ggcG9pbnRzIGZyb20gd2hhdCBwb3NpdGlvbiB0aGUgY29sdW1uIGlzIGFkZGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiBjb2x1bW5zIHRvIGFkZC5cbiAgICovXG4gIGNyZWF0ZUNvbHVtbihwaHlzaWNhbENvbHVtbiwgYW1vdW50KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1ldGFzLnNpemUoKTsgaSsrKSB7XG4gICAgICB0aGlzLm1ldGFzLm9idGFpbihpKS5pbnNlcnQocGh5c2ljYWxDb2x1bW4sIGFtb3VudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb25lIG9yIG1vcmUgcm93cyBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgVGhlIHBoeXNpY2FsIHJvdyBpbmRleCB3aGljaCBwb2ludHMgZnJvbSB3aGF0IHBvc2l0aW9uIHRoZSByb3cgaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2Ygcm93cyB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmVSb3cocGh5c2ljYWxSb3csIGFtb3VudCkge1xuICAgIHRoaXMubWV0YXMucmVtb3ZlKHBoeXNpY2FsUm93LCBhbW91bnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleCB3aGljaCBwb2ludHMgZnJvbSB3aGF0IHBvc2l0aW9uIHRoZSBjb2x1bW4gaXMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2YgY29sdW1ucyB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmVDb2x1bW4ocGh5c2ljYWxDb2x1bW4sIGFtb3VudCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZXRhcy5zaXplKCk7IGkrKykge1xuICAgICAgdGhpcy5tZXRhcy5vYnRhaW4oaSkucmVtb3ZlKHBoeXNpY2FsQ29sdW1uLCBhbW91bnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNldHRpbmdzIG9iamVjdCBmb3IgdGhpcyBsYXllci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93IFRoZSBwaHlzaWNhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gSWYgdGhlIGtleSBleGlzdHMgaXRzIHZhbHVlIHdpbGwgYmUgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgd2hvbGUgY2VsbCBtZXRhIG9iamVjdC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXkpIHtcbiAgICBjb25zdCBjZWxsTWV0YSA9IHRoaXMubWV0YXMub2J0YWluKHBoeXNpY2FsUm93KS5vYnRhaW4ocGh5c2ljYWxDb2x1bW4pO1xuICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNlbGxNZXRhO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbE1ldGFba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNldHRpbmdzIG9iamVjdCBmb3IgdGhpcyBsYXllciBkZWZpbmVkIGJ5IFwia2V5XCIgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcHJvcGVydHkgbmFtZSB0byBzZXQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gc2F2ZS5cbiAgICovXG4gIHNldE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIF9jZWxsTWV0YSRfYXV0b21hdGljYTtcbiAgICBjb25zdCBjZWxsTWV0YSA9IHRoaXMubWV0YXMub2J0YWluKHBoeXNpY2FsUm93KS5vYnRhaW4ocGh5c2ljYWxDb2x1bW4pO1xuICAgIChfY2VsbE1ldGEkX2F1dG9tYXRpY2EgPSBjZWxsTWV0YS5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKSA9PT0gbnVsbCB8fCBfY2VsbE1ldGEkX2F1dG9tYXRpY2EgPT09IHZvaWQgMCB8fCBfY2VsbE1ldGEkX2F1dG9tYXRpY2EuZGVsZXRlKGtleSk7XG4gICAgY2VsbE1ldGFba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBwcm9wZXJ0eSBkZWZpbmVkIGJ5IHRoZSBcImtleVwiIGFyZ3VtZW50IGZyb20gdGhlIGNlbGwgbWV0YSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcHJvcGVydHkgbmFtZSB0byByZW1vdmUuXG4gICAqL1xuICByZW1vdmVNZXRhKHBoeXNpY2FsUm93LCBwaHlzaWNhbENvbHVtbiwga2V5KSB7XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLm1ldGFzLm9idGFpbihwaHlzaWNhbFJvdykub2J0YWluKHBoeXNpY2FsQ29sdW1uKTtcbiAgICBkZWxldGUgY2VsbE1ldGFba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjZWxsIG1ldGEgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBkdXJpbmcgdGhlIEhhbmRzb250YWJsZSBvcGVyYXRpb24uIEFzIGNlbGwgbWV0YVxuICAgKiBvYmplY3RzIGFyZSBjcmVhdGVkIGxhenksIHRoZSBsZW5ndGggb2YgdGhlIHJldHVybmVkIGNvbGxlY3Rpb24gZGVwZW5kcyBvbiBob3cgYW5kIHdoZW4gdGhlXG4gICAqIHRhYmxlIGhhcyBhc2tlZCBmb3IgYWNjZXNzIHRvIHRoYXQgbWV0YSBvYmplY3RzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119XG4gICAqL1xuICBnZXRNZXRhcygpIHtcbiAgICBjb25zdCBtZXRhcyA9IFtdO1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMubWV0YXMudmFsdWVzKCkpO1xuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHJvd3MubGVuZ3RoOyByb3crKykge1xuICAgICAgLy8gR2V0dGluZyBhIG1ldGEgZm9yIGFscmVhZHkgYWRkZWQgcm93IChuZXcgcm93IGFscmVhZHkgZXhpc3QgLSBpdCBoYXMgYmVlbiBhZGRlZCB1c2luZyBgY3JlYXRlUm93YCBtZXRob2QpLlxuICAgICAgLy8gSG93ZXZlciwgaXMgbm90IHJlYWR5IHVudGlsIHRoZSBmaXJzdCBgZ2V0TWV0YWAgY2FsbCAobGF6eSBsb2FkaW5nKS5cbiAgICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkocm93c1tyb3ddKSkge1xuICAgICAgICBtZXRhcy5wdXNoKC4uLnJvd3Nbcm93XS52YWx1ZXMoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXRhcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBjZWxsIG1ldGEgb2JqZWN0cyB0aGF0IHdlcmUgY3JlYXRlZCBkdXJpbmcgdGhlIEhhbmRzb250YWJsZSBvcGVyYXRpb24gYnV0IGZvclxuICAgKiBzcGVjaWZpYyByb3cgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbFJvdyBUaGUgcGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119XG4gICAqL1xuICBnZXRNZXRhc0F0Um93KHBoeXNpY2FsUm93KSB7XG4gICAgKDAsIF91dGlscy5hc3NlcnQpKCgpID0+ICgwLCBfdXRpbHMuaXNVbnNpZ25lZE51bWJlcikocGh5c2ljYWxSb3cpLCAnRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4nKTtcbiAgICBjb25zdCByb3dzTWV0YSA9IG5ldyBNYXAodGhpcy5tZXRhcyk7XG4gICAgcmV0dXJuIHJvd3NNZXRhLmhhcyhwaHlzaWNhbFJvdykgPyBBcnJheS5mcm9tKHJvd3NNZXRhLmdldChwaHlzaWNhbFJvdykudmFsdWVzKCkpIDogW107XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBzYXZlZCBjZWxsIG1ldGEgb2JqZWN0cy5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5tZXRhcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgbmV3IHN0cnVjdHVyZSBmb3IgY2VsbCBtZXRhIG9iamVjdHMgc3RvcmVkIGluIGNvbHVtbmFyIGF4aXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBfY3JlYXRlUm93KCkge1xuICAgIHJldHVybiBuZXcgX2xhenlGYWN0b3J5TWFwLmRlZmF1bHQocGh5c2ljYWxDb2x1bW4gPT4gdGhpcy5fY3JlYXRlTWV0YShwaHlzaWNhbENvbHVtbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgbmV3IGNlbGwgbWV0YSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGluaGVyaXRlZCBmcm9tIHRoZSBjb2x1bW4gbWV0YSBsYXllci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBfY3JlYXRlTWV0YShwaHlzaWNhbENvbHVtbikge1xuICAgIGNvbnN0IENvbHVtbk1ldGEgPSB0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKHBoeXNpY2FsQ29sdW1uKTtcbiAgICByZXR1cm4gbmV3IENvbHVtbk1ldGEoKTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2VsbE1ldGE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xudmFyIF9sYXp5RmFjdG9yeU1hcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2xhenlGYWN0b3J5TWFwXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogTGlzdCBvZiBwcm9wcyB3aGljaCBoYXZlIHRvIGJlIGNsZWFyZWQgaW4gdGhlIGNvbHVtbiBtZXRhLWxheWVyLiBUaGF0IHByb3BzIGhhdmUgYVxuICogZGlmZmVyZW50IG1lYW5pbmcgd2hlbiB1c2luZyBpbiBjb2x1bW4gbWV0YS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nW119XG4gKi9cbmNvbnN0IENPTFVNTlNfUFJPUFNfQ09ORkxJQ1RTID0gWydkYXRhJywgJ3dpZHRoJ107XG5cbi8qKlxuICogVGhlIGNvbHVtbiBtZXRhIG9iamVjdCBpcyBhIHJvb3Qgb2YgYWxsIHNldHRpbmdzIGRlZmluZWQgaW4gdGhlIGNvbHVtbiBwcm9wZXJ0eSBvZiB0aGUgSGFuZHNvbnRhYmxlXG4gKiBzZXR0aW5ncy4gRWFjaCBjb2x1bW4gaW4gdGhlIEhhbmRzb250YWJsZSBpcyBhc3NvY2lhdGVkIHdpdGggYSB1bmlxdWUgbWV0YSBvYmplY3Qgd2hpY2ggaXMgbWFuYWdlZCBieVxuICogdGhpcyBsYXllci4gQWRkaW5nLCByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdCBvYmplY3QgaGFzIGEgZGlyZWN0IHJlZmxlY3Rpb24gb25seSBmb3JcbiAqIHRoZSBDZWxsTWV0YSBsYXllci4gVGhlIHJlZmxlY3Rpb24gd2lsbCBiZSB2aXNpYmxlIG9ubHkgaWYgdGhlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxvd2VyXG4gKiBsYXllcnMgKHByb3RvdHlwZSBsb29rdXApLlxuICpcbiAqICstLS0tLS0tLS0tLS0tKy5cbiAqIOKUgiBHbG9iYWxNZXRhICDilIJcbiAqIOKUgiAocHJvdG90eXBlKSDilIJcbiAqICstLS0tLS0tLS0tLS0tK1xcXG4gKiAgICAgICDilIIgICAgICAgICBcXFxuICogICAgICAg4pSCICAgICAgICAgIFxcXG4gKiAgICAgIFxc4pSCLyAgICAgICAgIF9cXHxcbiAqICstLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLSsuXG4gKiDilIIgVGFibGVNZXRhICAg4pSCICAgIOKUgiBDb2x1bW5NZXRhICDilIJcbiAqIOKUgiAoaW5zdGFuY2UpICDilIIgICAg4pSCIChwcm90b3R5cGUpIOKUglxuICogKy0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0tKy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFxc4pSCL1xuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy5cbiAqICAgICAgICAgICAgICAgICAgICDilIIgIENlbGxNZXRhICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAg4pSCIChpbnN0YW5jZSkgIOKUglxuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy5cbiAqL1xuY2xhc3MgQ29sdW1uTWV0YSB7XG4gIGNvbnN0cnVjdG9yKGdsb2JhbE1ldGEpIHtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIEdsb2JhbE1ldGEgbGF5ZXIuIFdoaWxlIGNyZWF0aW5nIG5ldyBjb2x1bW4gbWV0YSBvYmplY3RzLCBhbGwgbmV3IG9iamVjdHNcbiAgICAgKiBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSB0aGUgR2xvYmFsTWV0YSBsYXllci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtHbG9iYWxNZXRhfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdsb2JhbE1ldGFcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgTGF6eUZhY3RvcnlNYXAgc3RydWN0dXJlLCBob2xkZXIgZm9yIGNvbHVtbiBtZXRhIG9iamVjdHMgd2hlcmUgZWFjaCBjb2x1bW4gbWV0YSBpc1xuICAgICAqIHN0b3JlZCB1bmRlciB0aGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgICAqXG4gICAgICogQHR5cGUge0xhenlGYWN0b3J5TWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFzXCIsIG5ldyBfbGF6eUZhY3RvcnlNYXAuZGVmYXVsdCgoKSA9PiB0aGlzLl9jcmVhdGVNZXRhKCkpKTtcbiAgICB0aGlzLmdsb2JhbE1ldGEgPSBnbG9iYWxNZXRhO1xuICAgIHRoaXMubWV0YXMgPSBuZXcgX2xhenlGYWN0b3J5TWFwLmRlZmF1bHQoKCkgPT4gdGhpcy5fY3JlYXRlTWV0YSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGNvbHVtbiBtZXRhIG9iamVjdCBieSBtZXJnaW5nIHNldHRpbmdzIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4IHdoaWNoIHBvaW50cyB3aGF0IGNvbHVtbiBtZXRhIG9iamVjdCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgQW4gb2JqZWN0IHRvIG1lcmdlIHdpdGguXG4gICAqL1xuICB1cGRhdGVNZXRhKHBoeXNpY2FsQ29sdW1uLCBzZXR0aW5ncykge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLmdldE1ldGEocGh5c2ljYWxDb2x1bW4pO1xuICAgICgwLCBfb2JqZWN0LmV4dGVuZCkobWV0YSwgc2V0dGluZ3MpO1xuICAgICgwLCBfdXRpbHMuZXh0ZW5kQnlNZXRhVHlwZSkobWV0YSwgc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb25lIG9yIG1vcmUgY29sdW1ucyBhdCBzcGVjaWZpYyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsQ29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggd2hpY2ggcG9pbnRzIGZyb20gd2hhdCBwb3NpdGlvbiB0aGUgY29sdW1uIGlzIGFkZGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiBjb2x1bW5zIHRvIGFkZC5cbiAgICovXG4gIGNyZWF0ZUNvbHVtbihwaHlzaWNhbENvbHVtbiwgYW1vdW50KSB7XG4gICAgdGhpcy5tZXRhcy5pbnNlcnQocGh5c2ljYWxDb2x1bW4sIGFtb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBvbmUgb3IgbW9yZSBjb2x1bW5zIGZyb20gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4IHdoaWNoIHBvaW50cyBmcm9tIHdoYXQgcG9zaXRpb24gdGhlIGNvbHVtbiBpcyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBjb2x1bW5zIHRvIHJlbW92ZS5cbiAgICovXG4gIHJlbW92ZUNvbHVtbihwaHlzaWNhbENvbHVtbiwgYW1vdW50KSB7XG4gICAgdGhpcy5tZXRhcy5yZW1vdmUocGh5c2ljYWxDb2x1bW4sIGFtb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoaXMgbGF5ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0TWV0YShwaHlzaWNhbENvbHVtbikge1xuICAgIHJldHVybiB0aGlzLm1ldGFzLm9idGFpbihwaHlzaWNhbENvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb25zdHJ1Y3RvciBvZiB0aGUgY29sdW1uIG1ldGEgb2JqZWN0LiBOZWNlc3NhcnkgZm9yIGluaGVyaXRhbmNlIC0gY3JlYXRpbmcgdGhlIG5leHQgbWV0YSBsYXllcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbENvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuICBnZXRNZXRhQ29uc3RydWN0b3IocGh5c2ljYWxDb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4ocGh5c2ljYWxDb2x1bW4pLmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgc2F2ZWQgY29sdW1uIG1ldGEgb2JqZWN0cy5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5tZXRhcy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgbmV3IGNvbHVtbiBtZXRhIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgaW5oZXJpdGVkIGZyb20gdGhlIGdsb2JhbCBtZXRhIGxheWVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgX2NyZWF0ZU1ldGEoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbHMuY29sdW1uRmFjdG9yeSkodGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLCBDT0xVTU5TX1BST1BTX0NPTkZMSUNUUykucHJvdG90eXBlO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBDb2x1bW5NZXRhOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbnZhciBfbWV0YVNjaGVtYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL21ldGFTY2hlbWFcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAdHlwZWRlZiB7T3B0aW9uc30gVGFibGVNZXRhXG4gKi9cbi8qKlxuICogQHJldHVybnMge1RhYmxlTWV0YX0gUmV0dXJucyBhbiBlbXB0eSBvYmplY3QuIFRoZSBob2xkZXIgZm9yIGdsb2JhbCBtZXRhIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVGFibGVNZXRhRW1wdHlDbGFzcygpIHtcbiAgcmV0dXJuIGNsYXNzIFRhYmxlTWV0YSB7fTtcbn1cblxuLyoqXG4gKiBUaGUgZ2xvYmFsIG1ldGEgb2JqZWN0IGlzIGEgcm9vdCBvZiBhbGwgZGVmYXVsdCBzZXR0aW5ncywgd2hpY2ggYXJlIHJlY29nbml6YWJsZSBieSBIYW5kc29udGFibGUuXG4gKiBPdGhlciBsYXllcnMgYXJlIGluaGVyaXRlZCBmcm9tIHRoaXMgb2JqZWN0LiBBZGRpbmcsIHJlbW92aW5nLCBvciBjaGFuZ2luZyBwcm9wZXJ0eSBpbiB0aGF0XG4gKiBvYmplY3QgaGFzIGEgZGlyZWN0IHJlZmxlY3Rpb24gdG8gYWxsIGxheWVycyBzdWNoIGFzOiBUYWJsZU1ldGEsIENvbHVtbk1ldGEsIG9yIENlbGxNZXRhIGxheWVycy5cbiAqXG4gKiArLS0tLS0tLS0tLS0tLSsuXG4gKiDilIIgR2xvYmFsTWV0YSAg4pSCXG4gKiDilIIgKHByb3RvdHlwZSkg4pSCXG4gKiArLS0tLS0tLS0tLS0tLStcXFxuICogICAgICAg4pSCICAgICAgICAgXFxcbiAqICAgICAgIOKUgiAgICAgICAgICBcXFxuICogICAgICBcXOKUgi8gICAgICAgICBfXFx8XG4gKiArLS0tLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLS0tLS0rLlxuICog4pSCIFRhYmxlTWV0YSAgIOKUgiAgICDilIIgQ29sdW1uTWV0YSAg4pSCXG4gKiDilIIgKGluc3RhbmNlKSAg4pSCICAgIOKUgiAocHJvdG90eXBlKSDilIJcbiAqICstLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLSsuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICBcXOKUgi9cbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsuXG4gKiAgICAgICAgICAgICAgICAgICAg4pSCICBDZWxsTWV0YSAgIOKUglxuICogICAgICAgICAgICAgICAgICAgIOKUgiAoaW5zdGFuY2UpICDilIJcbiAqICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLSsuXG4gKi9cbmNsYXNzIEdsb2JhbE1ldGEge1xuICBjb25zdHJ1Y3Rvcihob3QpIHtcbiAgICAvKipcbiAgICAgKiBBbiBhbGlhcyBmb3IgdGhlIGNvbnN0cnVjdG9yLiBOZWNlc3NhcnkgZm9yIGluaGVyaXRhbmNlIGZvciBjcmVhdGluZyBuZXcgbGF5ZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge1RhYmxlTWV0YX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXRhQ3RvclwiLCBjcmVhdGVUYWJsZU1ldGFFbXB0eUNsYXNzKCkpO1xuICAgIC8qKlxuICAgICAqIE1haW4gb2JqZWN0IChwcm90b3R5cGUgb2YgdGhlIGludGVybmFsIFRhYmxlTWV0YSBjbGFzcyksIGhvbGRlciBmb3IgYWxsIGRlZmF1bHQgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFcIiwgdm9pZCAwKTtcbiAgICB0aGlzLm1ldGEgPSB0aGlzLm1ldGFDdG9yLnByb3RvdHlwZTtcbiAgICAoMCwgX29iamVjdC5leHRlbmQpKHRoaXMubWV0YSwgKDAsIF9tZXRhU2NoZW1hLmRlZmF1bHQpKCkpO1xuICAgIHRoaXMubWV0YS5pbnN0YW5jZSA9IGhvdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbnN0cnVjdG9yIG9mIHRoZSBnbG9iYWwgbWV0YSBvYmplY3QuIE5lY2Vzc2FyeSBmb3IgaW5oZXJpdGFuY2UgZm9yIGNyZWF0aW5nIHRoZSBuZXh0IG1ldGEgbGF5ZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuICBnZXRNZXRhQ29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YUN0b3I7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzZXR0aW5ncyBvYmplY3QgZm9yIHRoaXMgbGF5ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRNZXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBnbG9iYWwgc2V0dGluZ3Mgb2JqZWN0IGJ5IG1lcmdpbmcgc2V0dGluZ3Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIEFuIG9iamVjdCB0byBtZXJnZSB3aXRoLlxuICAgKi9cbiAgdXBkYXRlTWV0YShzZXR0aW5ncykge1xuICAgIHZhciBfc2V0dGluZ3MkdHlwZTtcbiAgICAoMCwgX29iamVjdC5leHRlbmQpKHRoaXMubWV0YSwgc2V0dGluZ3MpO1xuICAgICgwLCBfdXRpbHMuZXh0ZW5kQnlNZXRhVHlwZSkodGhpcy5tZXRhLCB7XG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICAgIHR5cGU6IChfc2V0dGluZ3MkdHlwZSA9IHNldHRpbmdzLnR5cGUpICE9PSBudWxsICYmIF9zZXR0aW5ncyR0eXBlICE9PSB2b2lkIDAgPyBfc2V0dGluZ3MkdHlwZSA6IHRoaXMubWV0YS50eXBlXG4gICAgfSwgc2V0dGluZ3MpO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBHbG9iYWxNZXRhOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBUaGUgdGFibGUgbWV0YSBvYmplY3QgaXMgYSBsYXllciB0aGF0IGtlZXBzIGFsbCBzZXR0aW5ncyBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoYXQgd2FzIHBhc3NlZCBpblxuICogdGhlIGNvbnN0cnVjdG9yLiBUaGF0IGxheWVyIGNvbnRhaW5zIGFsbCBkZWZhdWx0IHNldHRpbmdzIGluaGVyaXRlZCBmcm9tIHRoZSBHbG9iYWxNZXRhIGxheWVyXG4gKiBtZXJnZWQgd2l0aCBzZXR0aW5ncyBwYXNzZWQgYnkgdGhlIGRldmVsb3Blci4gQWRkaW5nLCByZW1vdmluZywgb3IgY2hhbmdpbmcgcHJvcGVydHkgaW4gdGhhdFxuICogb2JqZWN0IGhhcyBubyBkaXJlY3QgcmVmbGVjdGlvbiBvbiBhbnkgb3RoZXIgbGF5ZXJzLlxuICpcbiAqICstLS0tLS0tLS0tLS0tKy5cbiAqIOKUgiBHbG9iYWxNZXRhICDilIJcbiAqIOKUgiAocHJvdG90eXBlKSDilIJcbiAqICstLS0tLS0tLS0tLS0tK1xcXG4gKiAgICAgICDilIIgICAgICAgICBcXFxuICogICAgICAg4pSCICAgICAgICAgIFxcXG4gKiAgICAgIFxc4pSCLyAgICAgICAgIF9cXHxcbiAqICstLS0tLS0tLS0tLS0tKyAgICArLS0tLS0tLS0tLS0tLSsuXG4gKiDilIIgVGFibGVNZXRhICAg4pSCICAgIOKUgiBDb2x1bW5NZXRhICDilIJcbiAqIOKUgiAoaW5zdGFuY2UpICDilIIgICAg4pSCIChwcm90b3R5cGUpIOKUglxuICogKy0tLS0tLS0tLS0tLS0rICAgICstLS0tLS0tLS0tLS0tKy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIOKUglxuICogICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFxc4pSCL1xuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy5cbiAqICAgICAgICAgICAgICAgICAgICDilIIgIENlbGxNZXRhICAg4pSCXG4gKiAgICAgICAgICAgICAgICAgICAg4pSCIChpbnN0YW5jZSkgIOKUglxuICogICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tKy5cbiAqL1xuY2xhc3MgVGFibGVNZXRhIHtcbiAgY29uc3RydWN0b3IoZ2xvYmFsTWV0YSkge1xuICAgIC8qKlxuICAgICAqIE1haW4gb2JqZWN0IChpbnN0YW5jZSBvZiB0aGUgaW50ZXJuYWwgVGFibGVNZXRhIGNsYXNzIGZyb20gR2xvYmFsTWV0YSksIGhvbGRlciBmb3IgYWxsIHNldHRpbmdzIGRlZmluZWQgaW4gdGhlIHRhYmxlIHNjb3BlLlxuICAgICAqXG4gICAgICogQHR5cGUge1RhYmxlTWV0YX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXRhXCIsIHZvaWQgMCk7XG4gICAgY29uc3QgTWV0YUN0b3IgPSBnbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpO1xuICAgIHRoaXMubWV0YSA9IG5ldyBNZXRhQ3RvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc2V0dGluZ3Mgb2JqZWN0IGZvciB0aGlzIGxheWVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7VGFibGVNZXRhfVxuICAgKi9cbiAgZ2V0TWV0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGFibGUgc2V0dGluZ3Mgb2JqZWN0IGJ5IG1lcmdpbmcgc2V0dGluZ3Mgd2l0aCB0aGUgY3VycmVudCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIEFuIG9iamVjdCB0byBtZXJnZSB3aXRoLlxuICAgKi9cbiAgdXBkYXRlTWV0YShzZXR0aW5ncykge1xuICAgICgwLCBfb2JqZWN0LmV4dGVuZCkodGhpcy5tZXRhLCBzZXR0aW5ncyk7XG4gICAgKDAsIF91dGlscy5leHRlbmRCeU1ldGFUeXBlKSh0aGlzLm1ldGEsIHNldHRpbmdzLCBzZXR0aW5ncyk7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFRhYmxlTWV0YTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBAYWxpYXMgT3B0aW9uc1xuICogQGNsYXNzIE9wdGlvbnNcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIFtDb25maWd1cmF0aW9uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kKSBsZXQgeW91IGhlYXZpbHkgY3VzdG9taXplIHlvdXIgSGFuZHNvbnRhYmxlIGluc3RhbmNlLiBGb3IgZXhhbXBsZSwgeW91IGNhbjpcbiAqXG4gKiAtIEVuYWJsZSBhbmQgZGlzYWJsZSBidWlsdC1pbiBmZWF0dXJlc1xuICogLSBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhZGRpdGlvbmFsIFtwbHVnaW5zXShAL2FwaS9wbHVnaW5zLm1kKVxuICogLSBQZXJzb25hbGl6ZSBIYW5kc29udGFibGUncyBsb29rXG4gKiAtIEFkanVzdCBIYW5kc29udGFibGUncyBiZWhhdmlvclxuICogLSBJbXBsZW1lbnQgeW91ciBvd24gY3VzdG9tIGZlYXR1cmVzXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqXG4gKiBUbyBhcHBseSBbY29uZmlndXJhdGlvbiBvcHRpb25zXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCksIHBhc3MgdGhlbSBhc1xuICogYSBzZWNvbmQgYXJndW1lbnQgb2YgdGhlIFtIYW5kc29udGFibGUgY29uc3RydWN0b3JdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9pbnN0YWxsYXRpb24vaW5zdGFsbGF0aW9uLm1kI2luaXRpYWxpemUtaGFuZHNvbnRhYmxlKSxcbiAqIHVzaW5nIHRoZSBbb2JqZWN0IGxpdGVyYWwgbm90YXRpb25dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9PYmplY3RfaW5pdGlhbGl6ZXIpOlxuICpcbiAqIFJlYWQgbW9yZSBvbiB0aGUgW0NvbmZpZ3VyYXRpb24gb3B0aW9uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQpIHBhZ2UuXG4gKlxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKlxuICogY29uc3QgaG90ID0gbmV3IEhhbmRzb250YWJsZShjb250YWluZXIsIHtcbiAqICAgLy8gY29uZmlndXJhdGlvbiBvcHRpb25zLCBpbiB0aGUgb2JqZWN0IGxpdGVyYWwgbm90YXRpb25cbiAqICAgbGljZW5zZUtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJyxcbiAqICAgZGF0YTogW1xuICogICAgIFsnQTEnLCAnQjEnLCAnQzEnLCAnRDEnLCAnRTEnXSxcbiAqICAgICBbJ0EyJywgJ0IyJywgJ0MyJywgJ0QyJywgJ0UyJ10sXG4gKiAgICAgWydBMycsICdCMycsICdDMycsICdEMycsICdFMyddLFxuICogICAgIFsnQTQnLCAnQjQnLCAnQzQnLCAnRDQnLCAnRTQnXSxcbiAqICAgICBbJ0E1JywgJ0I1JywgJ0M1JywgJ0Q1JywgJ0U1J10sXG4gKiAgIF0sXG4gKiAgIHdpZHRoOiA0MDAsXG4gKiAgIGhlaWdodDogMzAwLFxuICogICBjb2xIZWFkZXJzOiB0cnVlLFxuICogICByb3dIZWFkZXJzOiB0cnVlLFxuICogICBjdXN0b21Cb3JkZXJzOiB0cnVlLFxuICogICBkcm9wZG93bk1lbnU6IHRydWUsXG4gKiAgIG11bHRpQ29sdW1uU29ydGluZzogdHJ1ZSxcbiAqICAgZmlsdGVyczogdHJ1ZSxcbiAqICAgbWFudWFsUm93TW92ZTogdHJ1ZSxcbiAqIH0pO1xuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqXG4gKiBUbyBhcHBseSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBhc3MgdGhlbSBhcyBpbmRpdmlkdWFsIHByb3BzXG4gKiBvZiB0aGUgW2BIb3RUYWJsZWBdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9pbnN0YWxsYXRpb24vaW5zdGFsbGF0aW9uLm1kI180LXVzZS10aGUtaG90dGFibGUtY29tcG9uZW50KVxuICogb3IgW2BIb3RDb2x1bW5gXShAL2d1aWRlcy9jb2x1bW5zL3JlYWN0LWhvdC1jb2x1bW4vcmVhY3QtaG90LWNvbHVtbi5tZCkgY29tcG9uZW50cy5cbiAqXG4gKiBSZWFkIG1vcmUgb24gdGhlIFtDb25maWd1cmF0aW9uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kKSBwYWdlLlxuICpcbiAqIGBgYGpzeFxuICogPEhvdFRhYmxlXG4gKiAgIC8vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgaW4gdGhlIG9iamVjdCBsaXRlcmFsIG5vdGF0aW9uXG4gKiAgIGxpY2Vuc2VLZXk9J25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJ1xuICogICBkYXRhPXtbXG4gKiAgICAgWydBMScsICdCMScsICdDMScsICdEMScsICdFMSddLFxuICogICAgIFsnQTInLCAnQjInLCAnQzInLCAnRDInLCAnRTInXSxcbiAqICAgICBbJ0EzJywgJ0IzJywgJ0MzJywgJ0QzJywgJ0UzJ10sXG4gKiAgICAgWydBNCcsICdCNCcsICdDNCcsICdENCcsICdFNCddLFxuICogICAgIFsnQTUnLCAnQjUnLCAnQzUnLCAnRDUnLCAnRTUnXSxcbiAqICAgXX1cbiAqICAgd2lkdGg9ezQwMH1cbiAqICAgaGVpZ2h0PXszMDB9XG4gKiAgIGNvbEhlYWRlcnM9e3RydWV9XG4gKiAgIHJvd0hlYWRlcnM9e3RydWV9XG4gKiAgIGN1c3RvbUJvcmRlcnM9e3RydWV9XG4gKiAgIGRyb3Bkb3duTWVudT17dHJ1ZX1cbiAqICAgbXVsdGlDb2x1bW5Tb3J0aW5nPXt0cnVlfVxuICogICBmaWx0ZXJzPXt0cnVlfVxuICogICBtYW51YWxSb3dNb3ZlPXt0cnVlfVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKlxuICogRGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMsIHlvdSBjYW4gYXBwbHkgW2NvbmZpZ3VyYXRpb24gb3B0aW9uc10oQC9hcGkvb3B0aW9ucy5tZCkgdG8gZGlmZmVyZW50IGVsZW1lbnRzIG9mIHlvdXIgZ3JpZDpcbiAqIC0gW1RoZSBlbnRpcmUgZ3JpZF0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LWdyaWQtb3B0aW9ucylcbiAqIC0gW0luZGl2aWR1YWwgY29sdW1uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LWNvbHVtbi1vcHRpb25zKVxuICogLSBbSW5kaXZpZHVhbCByb3dzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNzZXQtcm93LW9wdGlvbnMpXG4gKiAtIFtJbmRpdmlkdWFsIGNlbGxzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNzZXQtY2VsbC1vcHRpb25zKVxuICogLSBbSW5kaXZpZHVhbCBncmlkIGVsZW1lbnRzLCBiYXNlZCBvbiBhbnkgbG9naWMgeW91IGltcGxlbWVudF0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjaW1wbGVtZW50aW5nLWN1c3RvbS1sb2dpYylcbiAqXG4gKiBSZWFkIG1vcmU6XG4gKiAtIFtDb25maWd1cmF0aW9uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kKVxuICovXG52YXIgX2RlZmF1bHQgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4gICAgLyoqXG4gICAgICogSW5mb3JtYXRpb24gb24gd2hpY2ggb2YgdGhlIG1ldGEgcHJvcGVydGllcyB3ZXJlIGFkZGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICogRm9yIGV4YW1wbGU6IHNldHRpbmcgdGhlIGByZW5kZXJlcmAgcHJvcGVydHkgZGlyZWN0bHkgd29uJ3QgZXh0ZW5kIHRoZSBgX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wc2BcbiAgICAgKiBlbnRyeSwgYnV0IHNldHRpbmcgYSBgdHlwZWAgd2lsbCBtb2RpZnkgaXQgdG8gYFNldCgzKSB7J3JlbmRlcmVyJywgJ2VkaXRvcicsICd2YWxpZGF0b3InLCAuLi59YC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge1NldH1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICBfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBhY3RpdmVIZWFkZXJDbGFzc05hbWVgIG9wdGlvbiBsZXRzIHlvdSBhZGQgYSBDU1MgY2xhc3MgbmFtZVxuICAgICAqIHRvIGV2ZXJ5IGN1cnJlbnRseS1hY3RpdmUsIGN1cnJlbnRseS1zZWxlY3RlZCBoZWFkZXIgKHdoZW4gYSB3aG9sZSBjb2x1bW4gb3Igcm93IGlzIHNlbGVjdGVkKS5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgY3VycmVudFJvd0NsYXNzTmFtZWBdKCNjdXJyZW50Um93Q2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50Q29sQ2xhc3NOYW1lYF0oI2N1cnJlbnRDb2xDbGFzc05hbWUpXG4gICAgICogLSBbYGN1cnJlbnRIZWFkZXJDbGFzc05hbWVgXSgjY3VycmVudEhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgaW52YWxpZENlbGxDbGFzc05hbWVgXSgjaW52YWxpZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWBdKCNyZWFkT25seUNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYGNvbW1lbnRlZENlbGxDbGFzc05hbWVgXSgjY29tbWVudGVkQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgbm9Xb3JkV3JhcENsYXNzTmFtZWBdKCNub1dvcmRXcmFwQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BUYWJsZUNsYXNzTmFtZWBdKCNUYWJsZUNsYXNzTmFtZSlcbiAgICAgKiAtIFtgY2xhc3NOYW1lYF0oI2NsYXNzTmFtZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQHNpbmNlIDAuMzguMlxuICAgICAqIEBkZWZhdWx0ICdodF9fYWN0aXZlX2hpZ2hsaWdodCdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhbiBgaHRfX2FjdGl2ZV9oaWdobGlnaHRgIENTUyBjbGFzcyBuYW1lXG4gICAgICogLy8gdG8gZXZlcnkgY3VycmVudGx5LWFjdGl2ZSwgY3VycmVudGx5LXNlbGVjdGVkIGhlYWRlclxuICAgICAqIGFjdGl2ZUhlYWRlckNsYXNzTmFtZTogJ2h0X19hY3RpdmVfaGlnaGxpZ2h0JyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhY3RpdmVIZWFkZXJDbGFzc05hbWU6ICdodF9fYWN0aXZlX2hpZ2hsaWdodCcsXG4gICAgLyoqXG4gICAgICogVGhlIGBhbGxvd0VtcHR5YCBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIEhhbmRzb250YWJsZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgICAqIC0gYG51bGxgXG4gICAgICogLSBgdW5kZWZpbmVkYFxuICAgICAqIC0gYCcnYFxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBhbGxvd0VtcHR5YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgKGRlZmF1bHQpIHwgLSBBY2NlcHQgYG51bGxgLCBgdW5kZWZpbmVkYCBhbmQgYCcnYCB2YWx1ZXM8YnI+LSBNYXJrIGNlbGxzIHRoYXQgY29udGFpbiBgbnVsbGAsIGB1bmRlZmluZWRgIG9yIGAnJ2AgdmFsdWVzIGFzIGB2YWxpZGAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgICAgICAgfCAtIERvbid0IGFjY2VwdCBgbnVsbGAsIGB1bmRlZmluZWRgIGFuZCBgJydgIHZhbHVlczxicj4tIE1hcmsgY2VsbHMgdGhhdCBjb250YWluIGBudWxsYCwgYHVuZGVmaW5lZGAgb3IgYCcnYCB2YWx1ZXMgd2l0aCBhcyBgaW52YWxpZGAgfFxuICAgICAqXG4gICAgICogOjo6IHRpcFxuICAgICAqIFRvIHVzZSB0aGUgW2BhbGxvd0VtcHR5YF0oI2FsbG93ZW1wdHkpIG9wdGlvbiwgeW91IG5lZWQgdG8gc2V0IHRoZSBbYHZhbGlkYXRvcmBdKCN2YWxpZGF0b3IpIG9wdGlvbiAob3IgdGhlIFtgdHlwZWBdKCN0eXBlKSBvcHRpb24pLlxuICAgICAqIDo6OlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gYWxsb3cgZW1wdHkgdmFsdWVzIGluIGVhY2ggY2VsbCBvZiB0aGUgZW50aXJlIGdyaWRcbiAgICAgKiBhbGxvd0VtcHR5OiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gb3JcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgKiAgICAgZGF0ZUZvcm1hdDogJ0REL01NL1lZWVknLFxuICAgICAqICAgICAvLyBhbGxvdyBlbXB0eSB2YWx1ZXMgaW4gZWFjaCBjZWxsIG9mIHRoZSAnZGF0ZScgY29sdW1uXG4gICAgICogICAgIGFsbG93RW1wdHk6IHRydWVcbiAgICAgKiAgIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFsbG93RW1wdHk6IHRydWUsXG4gICAgLyoqXG4gICAgICogVGhlIGBhbGxvd0h0bWxgIG9wdGlvbiBjb25maWd1cmVzIHdoZXRoZXIgW2BhdXRvY29tcGxldGVgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZClcbiAgICAgKiBhbmQgW2Bkcm9wZG93bmBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvZHJvcGRvd24tY2VsbC10eXBlL2Ryb3Bkb3duLWNlbGwtdHlwZS5tZCkgY2VsbHMnIFtgc291cmNlYF0oI3NvdXJjZSkgZGF0YVxuICAgICAqIGlzIHRyZWF0ZWQgYXMgSFRNTC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgYWxsb3dIdG1sYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgKGRlZmF1bHQpIHwgVGhlIFtgc291cmNlYF0oI3NvdXJjZSkgZGF0YSBpcyBub3QgdHJlYXRlZCBhcyBIVE1MIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgIHwgVGhlIFtgc291cmNlYF0oI3NvdXJjZSkgZGF0YSBpcyB0cmVhdGVkIGFzIEhUTUwgICAgIHxcbiAgICAgKlxuICAgICAqIF9fV2FybmluZzpfXyBTZXR0aW5nIHRoZSBgYWxsb3dIdG1sYCBvcHRpb24gdG8gYHRydWVgIGNhbiBjYXVzZSBzZXJpb3VzIFhTUyB2dWxuZXJhYmlsaXRpZXMuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbRHJvcGRvd24gY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2Ryb3Bkb3duLWNlbGwtdHlwZS9kcm9wZG93bi1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbYHNvdXJjZWBdKCNzb3VyY2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBhdXRvY29tcGxldGVgXG4gICAgICogICB0eXBlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAgKiAgIC8vIHNldCBvcHRpb25zIGF2YWlsYWJsZSBpbiBldmVyeSBgYXV0b2NvbXBsZXRlYCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICBzb3VyY2U6IFsnPHN0cm9uZz5mb288L3N0cm9uZz4nLCAnPHN0cm9uZz5iYXI8L3N0cm9uZz4nXVxuICAgICAqICAgLy8gdXNlIEhUTUwgaW4gdGhlIGBzb3VyY2VgIGxpc3RcbiAgICAgKiAgIGFsbG93SHRtbDogdHJ1ZSxcbiAgICAgKiAgIH0sXG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhbGxvd0h0bWw6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgYWxsb3dJbnNlcnRDb2x1bW5gIG9wdGlvbiBhZGRzIHRoZSBmb2xsb3dpbmcgbWVudSBpdGVtcyB0byB0aGUgW2NvbnRleHQgbWVudV0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQpOlxuICAgICAqIC0gKipJbnNlcnQgY29sdW1uIGxlZnQqKlxuICAgICAqIC0gKipJbnNlcnQgY29sdW1uIHJpZ2h0KipcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGhpZGUgdGhlICdJbnNlcnQgY29sdW1uIGxlZnQnIGFuZCAnSW5zZXJ0IGNvbHVtbiByaWdodCcgbWVudSBpdGVtcyBmcm9tIHRoZSBjb250ZXh0IG1lbnVcbiAgICAgKiBhbGxvd0luc2VydENvbHVtbjogZmFsc2UsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWxsb3dJbnNlcnRDb2x1bW46IHRydWUsXG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGBhbGxvd0luc2VydFJvd2Agb3B0aW9uIGFkZHMgdGhlIGZvbGxvd2luZyBtZW51IGl0ZW1zIHRvIHRoZSBbY29udGV4dCBtZW51XShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCk6XG4gICAgICogLSAqKkluc2VydCByb3cgYWJvdmUqKlxuICAgICAqIC0gKipJbnNlcnQgcm93IGJlbG93KipcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGhpZGUgdGhlICdJbnNlcnQgcm93IGFib3ZlJyBhbmQgJ0luc2VydCByb3cgYmVsb3cnIG1lbnUgaXRlbXMgZnJvbSB0aGUgY29udGV4dCBtZW51XG4gICAgICogYWxsb3dJbnNlcnRSb3c6IGZhbHNlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFsbG93SW5zZXJ0Um93OiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgYWxsb3dJbnZhbGlkYCBvcHRpb24gZGV0ZXJtaW5lcyB3aGV0aGVyIEhhbmRzb250YWJsZSBhY2NlcHRzIHZhbHVlc1xuICAgICAqIHRoYXQgd2VyZSBtYXJrZWQgYXMgYGludmFsaWRgIGJ5IHRoZSBbY2VsbCB2YWxpZGF0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtdmFsaWRhdG9yL2NlbGwtdmFsaWRhdG9yLm1kKS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgYWxsb3dJbnZhbGlkYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgfCAtIEFjY2VwdCBgaW52YWxpZGAgdmFsdWVzPGJyPi0gQWxsb3cgdGhlIHVzZXIgdG8gY2xvc2UgdGhlIFtjZWxsIGVkaXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC1lZGl0b3IvY2VsbC1lZGl0b3IubWQpIHdpdGggYGludmFsaWRgIHZhbHVlczxicj4tIFNhdmUgYGludmFsaWRgIHZhbHVlcyBpbnRvIHRoZSBkYXRhIHNvdXJjZSAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICAgICAgICAgIHwgLSBEb24ndCBhY2NlcHQgYGludmFsaWRgIHZhbHVlczxicj4tIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIGNsb3NlIHRoZSBbY2VsbCBlZGl0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKSB3aXRoIGBpbnZhbGlkYCB2YWx1ZXM8YnI+LSBEb24ndCBzYXZlIGBpbnZhbGlkYCB2YWx1ZXMgaW50byB0aGUgZGF0YSBzb3VyY2UgfFxuICAgICAqXG4gICAgICogU2V0dGluZyB0aGUgYGFsbG93SW52YWxpZGAgb3B0aW9uIHRvIGBmYWxzZWAgY2FuIGJlIHVzZWZ1bCB3aGVuIHVzZWQgd2l0aCB0aGUgW0F1dG9jb21wbGV0ZSBzdHJpY3QgbW9kZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQjYXV0b2NvbXBsZXRlLXN0cmljdC1tb2RlKS5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDZWxsIHZhbGlkYXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpXG4gICAgICogLSBbQ2VsbCBlZGl0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKVxuICAgICAqIC0gW0F1dG9jb21wbGV0ZSBzdHJpY3QgbW9kZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQjYXV0b2NvbXBsZXRlLXN0cmljdC1tb2RlKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZG9uJ3QgYWNjZXB0IGBpbnZhbGlkYCB2YWx1ZXNcbiAgICAgKiAvLyBkb24ndCBhbGxvdyB0aGUgdXNlciB0byBjbG9zZSB0aGUgY2VsbCBlZGl0b3JcbiAgICAgKiAvLyBkb24ndCBzYXZlIGBpbnZhbGlkYCB2YWx1ZXMgaW50byB0aGUgZGF0YSBzb3VyY2VcbiAgICAgKiBhbGxvd0ludmFsaWQ6IGZhbHNlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFsbG93SW52YWxpZDogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgYGFsbG93UmVtb3ZlQ29sdW1uYCBvcHRpb24gYWRkcyB0aGUgZm9sbG93aW5nIG1lbnUgaXRlbXMgdG8gdGhlIFtjb250ZXh0IG1lbnVdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kKTpcbiAgICAgKiAtICoqUmVtb3ZlIGNvbHVtbioqXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29udGV4dCBtZW51XShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGhpZGUgdGhlICdSZW1vdmUgY29sdW1uJyBtZW51IGl0ZW0gZnJvbSB0aGUgY29udGV4dCBtZW51XG4gICAgICogYWxsb3dSZW1vdmVDb2x1bW46IGZhbHNlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFsbG93UmVtb3ZlQ29sdW1uOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBgYWxsb3dSZW1vdmVSb3dgIG9wdGlvbiBhZGRzIHRoZSBmb2xsb3dpbmcgbWVudSBpdGVtcyB0byB0aGUgW2NvbnRleHQgbWVudV0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQpOlxuICAgICAqIC0gKipSZW1vdmUgcm93KipcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDb250ZXh0IG1lbnVdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gaGlkZSB0aGUgJ1JlbW92ZSByb3cnIG1lbnUgaXRlbSBmcm9tIHRoZSBjb250ZXh0IG1lbnVcbiAgICAgKiBhbGxvd1JlbW92ZVJvdzogZmFsc2UsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWxsb3dSZW1vdmVSb3c6IHRydWUsXG4gICAgLyoqXG4gICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIGFjY2Vzc2liaWxpdHktcmVsYXRlZCBBUklBIHRhZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgdGFibGUuIElmIHNldCB0byBgZmFsc2VgLCB0aGV5XG4gICAgICogd2lsbCBiZSBvbWl0dGVkLlxuICAgICAqIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqIEBzaW5jZSAxNC4wLjBcbiAgICAgKi9cbiAgICBhcmlhVGFnczogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYGF1dG9Db2x1bW5TaXplYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BBdXRvQ29sdW1uU2l6ZWBdKEAvYXBpL2F1dG9Db2x1bW5TaXplLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGF1dG9Db2x1bW5TaXplYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgICB8IERpc2FibGUgdGhlIFtgQXV0b0NvbHVtblNpemVgXShAL2FwaS9hdXRvQ29sdW1uU2l6ZS5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICB8IEVuYWJsZSB0aGUgW2BBdXRvQ29sdW1uU2l6ZWBdKEAvYXBpL2F1dG9Db2x1bW5TaXplLm1kKSBwbHVnaW4gd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHxcbiAgICAgKiB8IEFuIG9iamVjdCB8IEVuYWJsZSB0aGUgW2BBdXRvQ29sdW1uU2l6ZWBdKEAvYXBpL2F1dG9Db2x1bW5TaXplLm1kKSBwbHVnaW4gYW5kIG1vZGlmeSB0aGUgcGx1Z2luIG9wdGlvbnMgIHxcbiAgICAgKlxuICAgICAqIElmIHlvdSBzZXQgdGhlIGBhdXRvQ29sdW1uU2l6ZWAgb3B0aW9uIHRvIGFuIG9iamVjdCwgeW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBbYEF1dG9Db2x1bW5TaXplYF0oQC9hcGkvYXV0b0NvbHVtblNpemUubWQpIHBsdWdpbiBvcHRpb25zOlxuICAgICAqXG4gICAgICogfCBQcm9wZXJ0eSAgICAgICAgICAgICAgICB8IFBvc3NpYmxlIHZhbHVlcyAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgc3luY0xpbWl0YCAgICAgICAgICAgICB8IEEgbnVtYmVyIFxcfCBBIHBlcmNlbnRhZ2Ugc3RyaW5nIHwgVGhlIG51bWJlci9wZXJjZW50YWdlIG9mIGNvbHVtbnMgdG8ga2VlcCBpbiBzeW5jPGJyPihkZWZhdWx0OiBgNTBgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHVzZUhlYWRlcnNgICAgICAgICAgICAgfCBgdHJ1ZWAgXFx8IGBmYWxzZWAgICAgICAgICAgICAgICB8IFdoZW4gY2FsY3VsYXRpbmcgY29sdW1uIHdpZHRoczo8YnI+YHRydWVgOiB1c2UgY29sdW1uIGhlYWRlcnM8YnI+YGZhbHNlYDogZG9uJ3QgdXNlIGNvbHVtbiBoZWFkZXJzICAgICAgICAgIHxcbiAgICAgKiB8IGBzYW1wbGluZ1JhdGlvYCAgICAgICAgIHwgQSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSBudW1iZXIgb2Ygc2FtcGxlcyBvZiB0aGUgc2FtZSBsZW5ndGggdG8gYmUgdXNlZCBpbiBjb2x1bW4gd2lkdGggY2FsY3VsYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBhbGxvd1NhbXBsZUR1cGxpY2F0ZXNgIHwgYHRydWVgIFxcfCBgZmFsc2VgICAgICAgICAgICAgICAgfCBXaGVuIGNhbGN1bGF0aW5nIGNvbHVtbiB3aWR0aHM6PGJyPmB0cnVlYDogQWxsb3cgZHVwbGljYXRlIHNhbXBsZXM8YnI+YGZhbHNlYDogRG9uJ3QgYWxsb3cgZHVwbGljYXRlIHNhbXBsZXMgfFxuICAgICAqXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBhdXRvQ29sdW1uU2l6ZWAgb3B0aW9uIGlzIHNldCB0byBgdW5kZWZpbmVkYCxcbiAgICAgKiBidXQgdGhlIFtgQXV0b0NvbHVtblNpemVgXShAL2FwaS9hdXRvQ29sdW1uU2l6ZS5tZCkgcGx1Z2luIGFjdHMgYXMgZW5hYmxlZC5cbiAgICAgKiBUbyBkaXNhYmxlIHRoZSBbYEF1dG9Db2x1bW5TaXplYF0oQC9hcGkvYXV0b0NvbHVtblNpemUubWQpIHBsdWdpbiBjb21wbGV0ZWx5LFxuICAgICAqIHNldCB0aGUgYGF1dG9Db2x1bW5TaXplYCBvcHRpb24gdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoZSBbYGNvbFdpZHRoc2BdKCNjb2xXaWR0aHMpIG9wdGlvbiBmb3JjaWJseSBkaXNhYmxlcyB0aGUgW2BBdXRvQ29sdW1uU2l6ZWBdKEAvYXBpL2F1dG9Db2x1bW5TaXplLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbUGx1Z2luczogYEF1dG9Db2x1bW5TaXplYF0oQC9hcGkvYXV0b0NvbHVtblNpemUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7b2JqZWN0fGJvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IEF1dG9Db2x1bW5TaXplXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogYXV0b0NvbHVtblNpemU6IHtcbiAgICAgKiAgIC8vIGtlZXAgNDAlIG9mIGNvbHVtbnMgaW4gc3luYyAodGhlIHJlc3Qgb2YgY29sdW1uczogYXN5bmMpXG4gICAgICogICBzeW5jTGltaXQ6ICc0MCUnLFxuICAgICAqICAgLy8gd2hlbiBjYWxjdWxhdGluZyBjb2x1bW4gd2lkdGhzLCB1c2UgY29sdW1uIGhlYWRlcnNcbiAgICAgKiAgIHVzZUhlYWRlcnM6IHRydWUsXG4gICAgICogICAvLyB3aGVuIGNhbGN1bGF0aW5nIGNvbHVtbiB3aWR0aHMsIHVzZSAxMCBzYW1wbGVzIG9mIHRoZSBzYW1lIGxlbmd0aFxuICAgICAqICAgc2FtcGxpbmdSYXRpbzogMTAsXG4gICAgICogICAvLyB3aGVuIGNhbGN1bGF0aW5nIGNvbHVtbiB3aWR0aHMsIGFsbG93IGR1cGxpY2F0ZSBzYW1wbGVzXG4gICAgICogICBhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6IHRydWVcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGF1dG9Db2x1bW5TaXplOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBhdXRvUm93U2l6ZWAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgQXV0b1Jvd1NpemVgXShAL2FwaS9hdXRvUm93U2l6ZS5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBhdXRvUm93U2l6ZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgICAgfCBEaXNhYmxlIHRoZSBbYEF1dG9Sb3dTaXplYF0oQC9hcGkvYXV0b1Jvd1NpemUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgdHJ1ZWAgICAgfCBFbmFibGUgdGhlIFtgQXV0b1Jvd1NpemVgXShAL2FwaS9hdXRvUm93U2l6ZS5tZCkgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB8XG4gICAgICogfCBBbiBvYmplY3QgfCBFbmFibGUgdGhlIFtgQXV0b1Jvd1NpemVgXShAL2FwaS9hdXRvUm93U2l6ZS5tZCkgcGx1Z2luIGFuZCBtb2RpZnkgdGhlIHBsdWdpbiBvcHRpb25zICB8XG4gICAgICpcbiAgICAgKiBUbyBnaXZlIEhhbmRzb250YWJsZSdzIFtzY3JvbGxiYXJdKGh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzLzguMC4wL2RlbW8tc2Nyb2xsaW5nLmh0bWwpXG4gICAgICogYSBwcm9wZXIgc2l6ZSwgc2V0IHRoZSBgYXV0b1Jvd1NpemVgIG9wdGlvbiB0byBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBgYXV0b1Jvd1NpemVgIG9wdGlvbiB0byBhbiBvYmplY3QsIHlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgW2BBdXRvUm93U2l6ZWBdKEAvYXBpL2F1dG9Sb3dTaXplLm1kKSBwbHVnaW4gb3B0aW9uczpcbiAgICAgKlxuICAgICAqIHwgUHJvcGVydHkgICAgfCBQb3NzaWJsZSB2YWx1ZXMgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHN5bmNMaW1pdGAgfCBBIG51bWJlciBcXHwgQSBwZXJjZW50YWdlIHN0cmluZyB8IFRoZSBudW1iZXIvcGVyY2VudGFnZSBvZiByb3dzIHRvIGtlZXAgaW4gc3luYzxicj4oZGVmYXVsdDogYDUwMGApIHxcbiAgICAgKlxuICAgICAqIFVzaW5nIHRoZSBbYHJvd0hlaWdodHNgXSgjcm93SGVpZ2h0cykgb3B0aW9uIGZvcmNpYmx5IGRpc2FibGVzIHRoZSBbYEF1dG9Sb3dTaXplYF0oQC9hcGkvYXV0b1Jvd1NpemUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgQXV0b1Jvd1NpemVgXShAL2FwaS9hdXRvUm93U2l6ZS5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtvYmplY3R8Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQXV0b1Jvd1NpemVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBhdXRvUm93U2l6ZToge1xuICAgICAqICAgLy8ga2VlcCA0MCUgb2Ygcm93cyBpbiBzeW5jICh0aGUgcmVzdCBvZiByb3dzOiBhc3luYylcbiAgICAgKiAgIHN5bmNMaW1pdDogJzQwJSdcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGF1dG9Sb3dTaXplOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBXaGVuIHlvdSBzZWxlY3QgYSBib3R0b20tbW9zdCBjZWxsLCBwcmVzc2luZyA8a2JkPioq4oaTKio8L2tiZD4gZG9lc24ndCBkbyBhbnl0aGluZy48YnI+PGJyPldoZW4geW91IHNlbGVjdCBhIHRvcC1tb3N0IGNlbGwsIHByZXNzaW5nIDxrYmQ+KirihpEqKjwva2JkPiBkb2Vzbid0IGRvIGFueXRoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBXaGVuIHlvdSBzZWxlY3QgYSBib3R0b20tbW9zdCBjZWxsLCBwcmVzc2luZyA8a2JkPioq4oaTKio8L2tiZD4gdGFrZXMgeW91IHRvIHRoZSB0b3AtbW9zdCBjZWxsIG9mIHRoZSBuZXh0IGNvbHVtbi48YnI+PGJyPldoZW4geW91IHNlbGVjdCBhIHRvcC1tb3N0IGNlbGwsIHByZXNzaW5nIDxrYmQ+KirihpEqKjwva2JkPiB0YWtlcyB5b3UgdG8gdGhlIGJvdHRvbS1tb3N0IGNlbGwgb2YgdGhlIHByZXZpb3VzIGNvbHVtbi4gfFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHdoZW4geW91IHNlbGVjdCBhIGJvdHRvbS1tb3N0IGNlbGwsIHByZXNzaW5nIOKshyBkb2Vzbid0IGRvIGFueXRoaW5nXG4gICAgICogLy8gd2hlbiB5b3Ugc2VsZWN0IGEgdG9wLW1vc3QgY2VsbCwgcHJlc3Npbmcg4qyGIGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAgICAgKiBhdXRvV3JhcENvbDogZmFsc2UsIC8vIGRlZmF1bHQgc2V0dGluZ1xuICAgICAqXG4gICAgICogLy8gd2hlbiB5b3Ugc2VsZWN0IGEgYm90dG9tLW1vc3QgY2VsbCwgcHJlc3Npbmcg4qyHIHRha2VzIHlvdSB0byB0aGUgdG9wLW1vc3QgY2VsbCBvZiB0aGUgbmV4dCBjb2x1bW5cbiAgICAgKiAvLyB3aGVuIHlvdSBzZWxlY3QgYSB0b3AtbW9zdCBjZWxsLCBwcmVzc2luZyDirIYgdGFrZXMgeW91IHRvIHRoZSBib3R0b20tbW9zdCBjZWxsIG9mIHRoZSBwcmV2aW91cyBjb2x1bW5cbiAgICAgKiBhdXRvV3JhcENvbDogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhdXRvV3JhcENvbDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IFdoZW4geW91IHNlbGVjdCB0aGUgZmlyc3QgY2VsbCBvZiBhIHJvdywgcHJlc3NpbmcgPGtiZD4qKuKGkCoqPC9rYmQ+KiAob3IgPGtiZD4qKlNoaWZ0Kio8L2tiZD4rPGtiZD4qKlRhYioqPC9rYmQ+XFwqXFwqKSBkb2Vzbid0IGRvIGFueXRoaW5nLjxicj48YnI+V2hlbiB5b3Ugc2VsZWN0IHRoZSBsYXN0IGNlbGwgb2YgYSByb3csIHByZXNzaW5nIDxrYmQ+KirihpIqKjwva2JkPiogKG9yIDxrYmQ+KipUYWIqKjwva2JkPioqKSBkb2Vzbid0IGRvIGFueXRoaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBXaGVuIHlvdSBzZWxlY3QgdGhlIGZpcnN0IGNlbGwgb2YgYSByb3csIHByZXNzaW5nIDxrYmQ+KirihpAqKjwva2JkPiogKG9yIDxrYmQ+KipTaGlmdCoqPC9rYmQ+KzxrYmQ+KipUYWIqKjwva2JkPlxcKlxcKikgdGFrZXMgeW91IHRvIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHJvdyBhYm92ZS48YnI+PGJyPldoZW4geW91IHNlbGVjdCB0aGUgbGFzdCBjZWxsIG9mIGEgcm93LCBwcmVzc2luZyA8a2JkPioq4oaSKio8L2tiZD4qIChvciA8a2JkPioqVGFiKio8L2tiZD4qKikgdGFrZXMgeW91IHRvIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSByb3cgYmVsb3cuIHxcbiAgICAgKlxuICAgICAqIFxcKiBUaGUgZXhhY3Qga2V5IGRlcGVuZHMgb24geW91ciBbYGxheW91dERpcmVjdGlvbmBdKCNsYXlvdXRkaXJlY3Rpb24pIGNvbmZpZ3VyYXRpb24uPGJyPlxuICAgICAqIFxcKlxcKiBVbmxlc3MgW2B0YWJOYXZpZ2F0aW9uYF0oI3RhYm5hdmlnYXRpb24pIGlzIHNldCB0byBgZmFsc2VgLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHdoZW4geW91IHNlbGVjdCB0aGUgZmlyc3QgY2VsbCBvZiBhIHJvdywgcHJlc3Npbmcg4qyFIChvciBTaGlmdCtUYWIpIGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAgICAgKiAvLyB3aGVuIHlvdSBzZWxlY3QgdGhlIGxhc3QgY2VsbCBvZiBhIHJvdywgcHJlc3Npbmcg4p6hIChvciBUYWIpIGRvZXNuJ3QgZG8gYW55dGhpbmdcbiAgICAgKiBhdXRvV3JhcFJvdzogZmFsc2UsIC8vIGRlZmF1bHQgc2V0dGluZ1xuICAgICAqXG4gICAgICogLy8gd2hlbiB5b3Ugc2VsZWN0IHRoZSBmaXJzdCBjZWxsIG9mIGEgcm93LCBwcmVzc2luZyDirIUgKG9yIFNoaWZ0K1RhYikgdGFrZXMgeW91IHRvIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHJvdyBhYm92ZVxuICAgICAqIC8vIHdoZW4geW91IHNlbGVjdCB0aGUgbGFzdCBjZWxsIG9mIGEgcm93LCBwcmVzc2luZyDinqEgKG9yIFRhYikgdGFrZXMgeW91IHRvIHRoZSBmaXJzdCBjZWxsIG9mIHRoZSByb3cgYmVsb3dcbiAgICAgKiBhdXRvV3JhcFJvdzogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhdXRvV3JhcFJvdzogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBiaW5kUm93c1dpdGhIZWFkZXJzYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BCaW5kUm93c1dpdGhIZWFkZXJzYF0oQC9hcGkvYmluZFJvd3NXaXRoSGVhZGVycy5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBiaW5kUm93c1dpdGhIZWFkZXJzYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgfCBEaXNhYmxlIHRoZSB0aGUgW2BCaW5kUm93c1dpdGhIZWFkZXJzYF0oQC9hcGkvYmluZFJvd3NXaXRoSGVhZGVycy5tZCkgcGx1Z2luIHxcbiAgICAgKiB8IGB0cnVlYCAgfCBFbmFibGUgdGhlIHRoZSBbYEJpbmRSb3dzV2l0aEhlYWRlcnNgXShAL2FwaS9iaW5kUm93c1dpdGhIZWFkZXJzLm1kKSBwbHVnaW4gIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgQmluZFJvd3NXaXRoSGVhZGVyc2BdKEAvYXBpL2JpbmRSb3dzV2l0aEhlYWRlcnMubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IEJpbmRSb3dzV2l0aEhlYWRlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBCaW5kUm93c1dpdGhIZWFkZXJzYCBwbHVnaW5cbiAgICAgKiBiaW5kUm93c1dpdGhIZWFkZXJzOiB0cnVlXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYmluZFJvd3NXaXRoSGVhZGVyczogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY2VsbGAgb3B0aW9uIGxldHMgeW91IGFwcGx5IFtjb25maWd1cmF0aW9uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kKSB0byBpbmRpdmlkdWFsIGNlbGxzLlxuICAgICAqXG4gICAgICogVGhlIGBjZWxsYCBvcHRpb24gb3ZlcndyaXRlcyB0aGUgW3RvcC1sZXZlbCBncmlkIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI3NldC1ncmlkLW9wdGlvbnMpLFxuICAgICAqIGFuZCB0aGUgW2Bjb2x1bW5zYF0oI2NvbHVtbnMpIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29uZmlndXJhdGlvbiBvcHRpb25zOiBTZXR0aW5nIGNlbGwgb3B0aW9uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LWNlbGwtb3B0aW9ucylcbiAgICAgKiAtIFtgY29sdW1uc2BdKCNjb2x1bW5zKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge0FycmF5W119XG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgYGNlbGxgIG9wdGlvbiB0byBhbiBhcnJheSBvZiBvYmplY3RzXG4gICAgICogY2VsbDogW1xuICAgICAqICAgLy8gbWFrZSB0aGUgY2VsbCB3aXRoIGNvb3JkaW5hdGVzICgwLCAwKSByZWFkLW9ubHlcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgcm93OiAwLFxuICAgICAqICAgICBjb2w6IDAsXG4gICAgICogICAgIHJlYWRPbmx5OiB0cnVlXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjZWxsOiBbXSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYGNlbGxzYCBvcHRpb24gbGV0cyB5b3UgYXBwbHkgYW55IG90aGVyIFtjb25maWd1cmF0aW9uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kKSB0b1xuICAgICAqIGluZGl2aWR1YWwgZ3JpZCBlbGVtZW50cyAoY29sdW1ucywgcm93cywgY2VsbHMpLCBiYXNlZCBvbiBhbnkgbG9naWMgeW91IGltcGxlbWVudC5cbiAgICAgKlxuICAgICAqIFRoZSBgY2VsbHNgIG9wdGlvbiBvdmVyd3JpdGVzIGFsbCBvdGhlciBvcHRpb25zIChpbmNsdWRpbmcgb3B0aW9ucyBzZXQgYnkgW2Bjb2x1bW5zYF0oI2NvbHVtbnMpIGFuZCBbYGNlbGxgXSgjY2VsbCkpLlxuICAgICAqIEl0IHRha2VzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAgICAgKlxuICAgICAqIHwgUGFyYW1ldGVyIHwgUmVxdWlyZWQgfCBUeXBlICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgcm93YCAgICAgfCBZZXMgICAgICB8IE51bWJlciAgICAgICAgICAgfCBBIHBoeXNpY2FsIHJvdyBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGNvbHVtbmAgIHwgWWVzICAgICAgfCBOdW1iZXIgICAgICAgICAgIHwgQSBwaHlzaWNhbCBjb2x1bW4gaW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBwcm9wYCAgICB8IE5vICAgICAgIHwgU3RyaW5nIFxcfCBOdW1iZXIgfCBJZiBbYGRhdGFgXSgjZGF0YSkgaXMgc2V0IHRvIGFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cyksIGBwcm9wYCBpcyB0aGUgc2FtZSBudW1iZXIgYXMgYGNvbHVtbmAuPGJyPjxicj5JZiBbYGRhdGFgXSgjZGF0YSkgaXMgc2V0IHRvIGFuIFthcnJheSBvZiBvYmplY3RzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNhcnJheS1vZi1vYmplY3RzKSwgYHByb3BgIGlzIGEgcHJvcGVydHkgbmFtZSBmb3IgdGhlIGNvbHVtbidzIGRhdGEgb2JqZWN0LiB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29uZmlndXJhdGlvbiBvcHRpb25zOiBJbXBsZW1lbnRpbmcgY3VzdG9tIGxvZ2ljXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNpbXBsZW1lbnQtY3VzdG9tLWxvZ2ljKVxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogU2V0dGluZyByb3cgb3B0aW9uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LXJvdy1vcHRpb25zKVxuICAgICAqIC0gW2Bjb2x1bW5zYF0oI2NvbHVtbnMpXG4gICAgICogLSBbYGNlbGxgXSgjY2VsbClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgYGNlbGxzYCBvcHRpb24gdG8geW91ciBjdXN0b20gZnVuY3Rpb25cbiAgICAgKiBjZWxscyhyb3csIGNvbHVtbiwgcHJvcCkge1xuICAgICAqICAgY29uc3QgY2VsbFByb3BlcnRpZXMgPSB7IHJlYWRPbmx5OiBmYWxzZSB9O1xuICAgICAqICAgY29uc3QgdmlzdWFsUm93SW5kZXggPSB0aGlzLmluc3RhbmNlLnRvVmlzdWFsUm93KHJvdyk7XG4gICAgICogICBjb25zdCB2aXN1YWxDb2xJbmRleCA9IHRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oY29sdW1uKTtcbiAgICAgKlxuICAgICAqICAgaWYgKHZpc3VhbFJvd0luZGV4ID09PSAwICYmIHZpc3VhbENvbEluZGV4ID09PSAwKSB7XG4gICAgICogICAgIGNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqICAgcmV0dXJuIGNlbGxQcm9wZXJ0aWVzO1xuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2VsbHM6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGNoZWNrZWRUZW1wbGF0ZWAgb3B0aW9uIGxldHMgeW91IGNvbmZpZ3VyZSB3aGF0IHZhbHVlXG4gICAgICogYSBjaGVja2VkIFtgY2hlY2tib3hgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NoZWNrYm94LWNlbGwtdHlwZS9jaGVja2JveC1jZWxsLXR5cGUubWQpIGNlbGwgaGFzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBjaGVja2VkVGVtcGxhdGVgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgIChkZWZhdWx0KSB8IElmIGEgW2BjaGVja2JveGBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvY2hlY2tib3gtY2VsbC10eXBlL2NoZWNrYm94LWNlbGwtdHlwZS5tZCkgY2VsbCBpcyBjaGVja2VkLDxicj50aGUgW2BnZXREYXRhQXRDZWxsYF0oQC9hcGkvY29yZS5tZCNnZXREYXRhQXRDZWxsKSBtZXRob2QgZm9yIHRoaXMgY2VsbCByZXR1cm5zIGB0cnVlYCAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEEgc3RyaW5nICAgICAgICAgfCBJZiBhIFtgY2hlY2tib3hgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NoZWNrYm94LWNlbGwtdHlwZS9jaGVja2JveC1jZWxsLXR5cGUubWQpIGNlbGwgaXMgY2hlY2tlZCw8YnI+dGhlIFtgZ2V0RGF0YUF0Q2VsbGBdKEAvYXBpL2NvcmUubWQjZ2V0RGF0YUF0Q2VsbCkgbWV0aG9kIGZvciB0aGlzIGNlbGwgcmV0dXJucyBhIHN0cmluZyBvZiB5b3VyIGNob2ljZSB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2hlY2tib3ggY2VsbCB0eXBlOiBDaGVja2JveCB0ZW1wbGF0ZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9jaGVja2JveC1jZWxsLXR5cGUvY2hlY2tib3gtY2VsbC10eXBlLm1kI2NoZWNrYm94LXRlbXBsYXRlKVxuICAgICAqIC0gW2BnZXREYXRhQXRDZWxsKClgXShAL2FwaS9jb3JlLm1kI2dldERhdGFBdENlbGwpXG4gICAgICogLSBbYHVuY2hlY2tlZFRlbXBsYXRlYF0oI3VuY2hlY2tlZFRlbXBsYXRlKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58c3RyaW5nfG51bWJlcn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIC8vIHNldCB0aGUgYHR5cGVgIG9mIGVhY2ggY2VsbCBpbiB0aGlzIGNvbHVtbiB0byBgY2hlY2tib3hgXG4gICAgICogICAgIC8vIHdoZW4gY2hlY2tlZCwgdGhlIGNlbGwncyB2YWx1ZSBpcyBgdHJ1ZWBcbiAgICAgKiAgICAgLy8gd2hlbiB1bmNoZWNrZWQsIHRoZSBjZWxsJ3MgdmFsdWUgaXMgYGZhbHNlYFxuICAgICAqICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBjaGVja2JveGBcbiAgICAgKiAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgKiAgICAgLy8gd2hlbiBjaGVja2VkLCB0aGUgY2VsbCdzIHZhbHVlIGlzIGAnWWVzJ2BcbiAgICAgKiAgICAgY2hlY2tlZFRlbXBsYXRlOiAnWWVzJyxcbiAgICAgKiAgICAgLy8gd2hlbiB1bmNoZWNrZWQsIHRoZSBjZWxsJ3MgdmFsdWUgaXMgYCdObydgXG4gICAgICogICAgIHVuY2hlY2tlZFRlbXBsYXRlOiAnTm8nXG4gICAgICogIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNoZWNrZWRUZW1wbGF0ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY2xhc3NOYW1lYCBvcHRpb24gbGV0cyB5b3UgYWRkIENTUyBjbGFzcyBuYW1lcyB0byBldmVyeSBjdXJyZW50bHktc2VsZWN0ZWQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgY2xhc3NOYW1lYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IEEgc3RyaW5nICAgICAgICAgICAgfCBBZGQgYSBzaW5nbGUgQ1NTIGNsYXNzIG5hbWUgdG8gZXZlcnkgY3VycmVudGx5LXNlbGVjdGVkIGVsZW1lbnQgIHxcbiAgICAgKiB8IEFuIGFycmF5IG9mIHN0cmluZ3MgfCBBZGQgbXVsdGlwbGUgQ1NTIGNsYXNzIG5hbWVzIHRvIGV2ZXJ5IGN1cnJlbnRseS1zZWxlY3RlZCBlbGVtZW50IHxcbiAgICAgKlxuICAgICAqIDo6OiB0aXBcbiAgICAgKiBEb24ndCBjaGFuZ2UgdGhlIGBjbGFzc05hbWVgIG1ldGFkYXRhIG9mIHRoZSBbY29sdW1uIHN1bW1hcnldKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQpIHJvdy5cbiAgICAgKiBUbyBzdHlsZSB0aGUgc3VtbWFyeSByb3csIHVzZSB0aGUgY2xhc3MgbmFtZSBhc3NpZ25lZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBbYENvbHVtblN1bW1hcnlgXShAL2FwaS9jb2x1bW5TdW1tYXJ5Lm1kKSBwbHVnaW46IGBjb2x1bW5TdW1tYXJ5UmVzdWx0YC5cbiAgICAgKiA6OjpcbiAgICAgKlxuICAgICAqIFRvIGFwcGx5IGRpZmZlcmVudCBDU1MgY2xhc3MgbmFtZXMgb24gZGlmZmVyZW50IGxldmVscywgdXNlIEhhbmRzb250YWJsZSdzIFtjYXNjYWRpbmcgY29uZmlndXJhdGlvbl0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjY2FzY2FkaW5nLWNvbmZpZ3VyYXRpb24pLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogQ2FzY2FkaW5nIGNvbmZpZ3VyYXRpb25dKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI2Nhc2NhZGluZy1jb25maWd1cmF0aW9uKVxuICAgICAqIC0gW2BjdXJyZW50Um93Q2xhc3NOYW1lYF0oI2N1cnJlbnRSb3dDbGFzc05hbWUpXG4gICAgICogLSBbYGN1cnJlbnRDb2xDbGFzc05hbWVgXSgjY3VycmVudENvbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudEhlYWRlckNsYXNzTmFtZWBdKCNjdXJyZW50SGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BhY3RpdmVIZWFkZXJDbGFzc05hbWVgXSgjYWN0aXZlSGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BpbnZhbGlkQ2VsbENsYXNzTmFtZWBdKCNpbnZhbGlkQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lYF0oI3BsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgY29tbWVudGVkQ2VsbENsYXNzTmFtZWBdKCNjb21tZW50ZWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bub1dvcmRXcmFwQ2xhc3NOYW1lYF0oI25vV29yZFdyYXBDbGFzc05hbWUpXG4gICAgICogLSBbYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWBdKCNyZWFkT25seUNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYFRhYmxlQ2xhc3NOYW1lYF0oI1RhYmxlQ2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ3xzdHJpbmdbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhIGB5b3VyLWNsYXNzLW5hbWVgIENTUyBjbGFzcyBuYW1lXG4gICAgICogLy8gdG8gZXZlcnkgY3VycmVudGx5LXNlbGVjdGVkIGVsZW1lbnRcbiAgICAgKiBjbGFzc05hbWU6ICd5b3VyLWNsYXNzLW5hbWUnLFxuICAgICAqXG4gICAgICogLy8gYWRkIGBmaXJzdC1jbGFzcy1uYW1lYCBhbmQgYHNlY29uZC1jbGFzcy1uYW1lYCBDU1MgY2xhc3MgbmFtZXNcbiAgICAgKiAvLyB0byBldmVyeSBjdXJyZW50bHktc2VsZWN0ZWQgZWxlbWVudFxuICAgICAqIGNsYXNzTmFtZTogWydmaXJzdC1jbGFzcy1uYW1lJywgJ3NlY29uZC1jbGFzcy1uYW1lJ10sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBjb2xIZWFkZXJzYCBvcHRpb24gY29uZmlndXJlcyB5b3VyIGdyaWQncyBjb2x1bW4gaGVhZGVycy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgY29sSGVhZGVyc2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgfCBFbmFibGUgdGhlIGRlZmF1bHQgY29sdW1uIGhlYWRlcnMgKCdBJywgJ0InLCAnQycsIC4uLikgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICB8IERpc2FibGUgY29sdW1uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IHwgRGVmaW5lIHlvdXIgb3duIGNvbHVtbiBoZWFkZXJzIChlLmcuIGBbJ09uZScsICdUd28nLCAnVGhyZWUnLCAuLi5dYCkgfFxuICAgICAqIHwgQSBmdW5jdGlvbiB8IERlZmluZSB5b3VyIG93biBjb2x1bW4gaGVhZGVycywgdXNpbmcgYSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDb2x1bW4gaGVhZGVyXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1oZWFkZXIvY29sdW1uLWhlYWRlci5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufHN0cmluZ1tdfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgZGVmYXVsdCBjb2x1bW4gaGVhZGVyc1xuICAgICAqIGNvbEhlYWRlcnM6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgeW91ciBvd24gY29sdW1uIGhlYWRlcnNcbiAgICAgKiBjb2xIZWFkZXJzOiBbJ09uZScsICdUd28nLCAnVGhyZWUnXSxcbiAgICAgKlxuICAgICAqIC8vIHNldCB5b3VyIG93biBjb2x1bW4gaGVhZGVycywgdXNpbmcgYSBmdW5jdGlvblxuICAgICAqIGNvbEhlYWRlcnM6IGZ1bmN0aW9uKHZpc3VhbENvbHVtbkluZGV4KSB7XG4gICAgICogICByZXR1cm4gYCR7dmlzdWFsQ29sdW1uSW5kZXh9ICsgOiBBQmA7XG4gICAgICogfSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2xIZWFkZXJzOiBudWxsLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgY29sbGFwc2libGVDb2x1bW5zYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BDb2xsYXBzaWJsZUNvbHVtbnNgXShAL2FwaS9jb2xsYXBzaWJsZUNvbHVtbnMubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgY29sbGFwc2libGVDb2x1bW5zYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAgICAgICAgICAgICAgfCBEaXNhYmxlIHRoZSBbYENvbGxhcHNpYmxlQ29sdW1uc2BdKEAvYXBpL2NvbGxhcHNpYmxlQ29sdW1ucy5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgICAgIHwgRW5hYmxlIHRoZSBbYENvbGxhcHNpYmxlQ29sdW1uc2BdKEAvYXBpL2NvbGxhcHNpYmxlQ29sdW1ucy5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSBvZiBvYmplY3RzICB8IEVuYWJsZSB0aGUgW2BDb2xsYXBzaWJsZUNvbHVtbnNgXShAL2FwaS9jb2xsYXBzaWJsZUNvbHVtbnMubWQpIHBsdWdpbiBmb3Igc2VsZWN0ZWQgY29sdW1uIGhlYWRlcnMgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1BsdWdpbnM6IGBDb2xsYXBzaWJsZUNvbHVtbnNgXShAL2FwaS9jb2xsYXBzaWJsZUNvbHVtbnMubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxvYmplY3RbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29sbGFwc2libGVDb2x1bW5zXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIGNvbHVtbiBjb2xsYXBzaW5nIGZvciBhbGwgaGVhZGVyc1xuICAgICAqIGNvbGxhcHNpYmxlQ29sdW1uczogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSBjb2x1bW4gY29sbGFwc2luZyBmb3Igc2VsZWN0ZWQgaGVhZGVyc1xuICAgICAqIGNvbGxhcHNpYmxlQ29sdW1uczogW1xuICAgICAqICAge3JvdzogLTQsIGNvbDogMSwgY29sbGFwc2libGU6IHRydWV9LFxuICAgICAqICAge3JvdzogLTMsIGNvbDogNSwgY29sbGFwc2libGU6IHRydWV9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2xsYXBzaWJsZUNvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYGNvbHVtbkhlYWRlckhlaWdodGAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIGhlaWdodCBvZiBjb2x1bW4gaGVhZGVycy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgY29sdW1uSGVhZGVySGVpZ2h0YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IEEgbnVtYmVyIHwgU2V0IHRoZSBzYW1lIGhlaWdodCBmb3IgZXZlcnkgY29sdW1uIGhlYWRlciAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IHwgU2V0IGRpZmZlcmVudCBoZWlnaHRzIGZvciBpbmRpdmlkdWFsIGNvbHVtbiBoZWFkZXJzIHxcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ8bnVtYmVyW119XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzZXQgdGhlIHNhbWUgaGVpZ2h0IGZvciBldmVyeSBjb2x1bW4gaGVhZGVyXG4gICAgICogY29sdW1uSGVhZGVySGVpZ2h0OiAyNSxcbiAgICAgKlxuICAgICAqIC8vIHNldCBkaWZmZXJlbnQgaGVpZ2h0cyBmb3IgaW5kaXZpZHVhbCBjb2x1bW4gaGVhZGVyc1xuICAgICAqIGNvbHVtbkhlYWRlckhlaWdodDogWzI1LCAzMCwgNTVdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbkhlYWRlckhlaWdodDogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgY29sdW1uc2Agb3B0aW9uIGxldHMgeW91IGFwcGx5IGFueSBvdGhlciBbY29uZmlndXJhdGlvbiBvcHRpb25zXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCkgdG8gaW5kaXZpZHVhbCBjb2x1bW5zIChvciByYW5nZXMgb2YgY29sdW1ucykuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGNvbHVtbnNgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKiAtIEFuIGFycmF5IG9mIG9iamVjdHMgKGVhY2ggb2JqZWN0IHJlcHJlc2VudHMgb25lIGNvbHVtbilcbiAgICAgKiAtIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHNcbiAgICAgKlxuICAgICAqIFRoZSBgY29sdW1uc2Agb3B0aW9uIG92ZXJ3cml0ZXMgdGhlIFt0b3AtbGV2ZWwgZ3JpZCBvcHRpb25zXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNzZXQtZ3JpZC1vcHRpb25zKS5cbiAgICAgKlxuICAgICAqIFdoZW4geW91IHVzZSBgY29sdW1uc2AsIHRoZSBbYHN0YXJ0Q29sc2BdKCNzdGFydENvbHMpLCBbYG1pbkNvbHNgXSgjbWluQ29scyksIGFuZCBbYG1heENvbHNgXSgjbWF4Q29scykgb3B0aW9ucyBhcmUgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDb25maWd1cmF0aW9uIG9wdGlvbnM6IFNldHRpbmcgY29sdW1uIG9wdGlvbnNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI3NldC1jb2x1bW4tb3B0aW9ucylcbiAgICAgKiAtIFtgc3RhcnRDb2xzYF0oI3N0YXJ0Q29scylcbiAgICAgKiAtIFtgbWluQ29sc2BdKCNtaW5Db2xzKVxuICAgICAqIC0gW2BtYXhDb2xzYF0oI21heENvbHMpXG4gICAgICogLSBbYGRhdGFgXSgjZGF0YSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtvYmplY3RbXXxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgYGNvbHVtbnNgIG9wdGlvbiB0byBhbiBhcnJheSBvZiBvYmplY3RzXG4gICAgICogLy8gZWFjaCBvYmplY3QgcmVwcmVzZW50cyBvbmUgY29sdW1uXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyBjb2x1bW4gb3B0aW9ucyBmb3IgdGhlIGZpcnN0IChieSBwaHlzaWNhbCBpbmRleCkgY29sdW1uXG4gICAgICogICAgIHR5cGU6ICdudW1lcmljJyxcbiAgICAgKiAgICAgbnVtZXJpY0Zvcm1hdDoge1xuICAgICAqICAgICAgIHBhdHRlcm46ICcwLDAuMDAgJCdcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gY29sdW1uIG9wdGlvbnMgZm9yIHRoZSBzZWNvbmQgKGJ5IHBoeXNpY2FsIGluZGV4KSBjb2x1bW5cbiAgICAgKiAgICAgdHlwZTogJ3RleHQnLFxuICAgICAqICAgICByZWFkT25seTogdHJ1ZVxuICAgICAqICAgfVxuICAgICAqIF0sXG4gICAgICpcbiAgICAgKiAvLyBvciBzZXQgdGhlIGBjb2x1bW5zYCBvcHRpb24gdG8gYSBmdW5jdGlvbiwgYmFzZWQgb24gcGh5c2ljYWwgaW5kZXhlc1xuICAgICAqIGNvbHVtbnMoaW5kZXgpIHtcbiAgICAgKiAgIHJldHVybiB7XG4gICAgICogICAgIHR5cGU6IGluZGV4ID4gMCA/ICdudW1lcmljJyA6ICd0ZXh0JyxcbiAgICAgKiAgICAgcmVhZE9ubHk6IGluZGV4IDwgMVxuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBjb2x1bW5Tb3J0aW5nYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BDb2x1bW5Tb3J0aW5nYF0oQC9hcGkvY29sdW1uU29ydGluZy5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBjb2x1bW5Tb3J0aW5nYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgICB8IEVuYWJsZSB0aGUgW2BDb2x1bW5Tb3J0aW5nYF0oQC9hcGkvY29sdW1uU29ydGluZy5tZCkgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgfCBEaXNhYmxlIHRoZSBbYENvbHVtblNvcnRpbmdgXShAL2FwaS9jb2x1bW5Tb3J0aW5nLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBvYmplY3QgIHwgLSBFbmFibGUgdGhlIFtgQ29sdW1uU29ydGluZ2BdKEAvYXBpL2NvbHVtblNvcnRpbmcubWQpIHBsdWdpbjxicj4tIE1vZGlmeSB0aGUgW2BDb2x1bW5Tb3J0aW5nYF0oQC9hcGkvY29sdW1uU29ydGluZy5tZCkgcGx1Z2luIG9wdGlvbnMgfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYGNvbHVtblNvcnRpbmdgIG9wdGlvbiB0byBhbiBvYmplY3QsXG4gICAgICogeW91IGNhbiBzZXQgdGhlIGZvbGxvd2luZyBbYENvbHVtblNvcnRpbmdgXShAL2FwaS9jb2x1bW5Tb3J0aW5nLm1kKSBwbHVnaW4gb3B0aW9uczpcbiAgICAgKlxuICAgICAqIHwgT3B0aW9uICAgICAgICAgICAgICAgICAgIHwgUG9zc2libGUgc2V0dGluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgaW5kaWNhdG9yYCAgICAgICAgICAgICAgfCBgdHJ1ZWA6IERpc3BsYXkgdGhlIGFycm93IGljb24gaW4gdGhlIGNvbHVtbiBoZWFkZXIsIHRvIGluZGljYXRlIGEgc29ydGFibGUgY29sdW1uPGJyPmBmYWxzZWA6IERvbid0IGRpc3BsYXkgdGhlIGFycm93IGljb24gaW4gdGhlIGNvbHVtbiBoZWFkZXIgIHxcbiAgICAgKiB8IGBoZWFkZXJBY3Rpb25gICAgICAgICAgICB8IGB0cnVlYDogRW5hYmxlIGNsaWNraW5nIG9uIHRoZSBjb2x1bW4gaGVhZGVyIHRvIHNvcnQgdGhlIGNvbHVtbjxicj5gZmFsc2VgOiBEaXNhYmxlIGNsaWNraW5nIG9uIHRoZSBjb2x1bW4gaGVhZGVyIHRvIHNvcnQgdGhlIGNvbHVtbiAgICAgICAgICAgICB8XG4gICAgICogfCBgc29ydEVtcHR5Q2VsbHNgICAgICAgICAgfCBgdHJ1ZWA6IFNvcnQgZW1wdHkgY2VsbHMgYXMgd2VsbDxicj5gZmFsc2VgOiBQbGFjZSBlbXB0eSBjZWxscyBhdCB0aGUgZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGNvbXBhcmVGdW5jdGlvbkZhY3RvcnlgIHwgQSBbY3VzdG9tIGNvbXBhcmUgZnVuY3Rpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93cy1zb3J0aW5nL3Jvd3Mtc29ydGluZy5tZCNhZGQtYS1jdXN0b20tY29tcGFyYXRvcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYGNvbHVtblNvcnRpbmdgIG9wdGlvbiB0byBhbiBvYmplY3QsXG4gICAgICogeW91IGNhbiBhbHNvIHNvcnQgaW5kaXZpZHVhbCBjb2x1bW5zIGF0IEhhbmRzb250YWJsZSdzIGluaXRpYWxpemF0aW9uLlxuICAgICAqIEluIHRoZSBgY29sdW1uU29ydGluZ2Agb2JqZWN0LCBhZGQgYW4gb2JqZWN0IG5hbWVkIGBpbml0aWFsQ29uZmlnYCxcbiAgICAgKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIHwgT3B0aW9uICAgICAgfCBQb3NzaWJsZSBzZXR0aW5ncyAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBjb2x1bW5gICAgIHwgQSBudW1iZXIgICAgICAgICAgICB8IFRoZSBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgeW91IHdhbnQgdG8gc29ydCBhdCBpbml0aWFsaXphdGlvbiAgfFxuICAgICAqIHwgYHNvcnRPcmRlcmAgfCBgJ2FzYydgIFxcfCBgJ2Rlc2MnYCB8IFRoZSBzb3J0aW5nIG9yZGVyOjxicj5gJ2FzYydgOiBhc2NlbmRpbmc8YnI+YCdkZXNjJ2A6IGRlc2NlbmRpbmcgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1Jvd3Mgc29ydGluZ10oQC9ndWlkZXMvcm93cy9yb3dzLXNvcnRpbmcvcm93cy1zb3J0aW5nLm1kKVxuICAgICAqIC0gW1Jvd3Mgc29ydGluZzogQ3VzdG9tIGNvbXBhcmUgZnVuY3Rpb25zXShAL2d1aWRlcy9yb3dzL3Jvd3Mtc29ydGluZy9yb3dzLXNvcnRpbmcubWQjYWRkLWEtY3VzdG9tLWNvbXBhcmF0b3IpXG4gICAgICogLSBbYG11bHRpQ29sdW1uU29ydGluZ2BdKCNtdWx0aUNvbHVtblNvcnRpbmcpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxvYmplY3R9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvbHVtblNvcnRpbmdcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBDb2x1bW5Tb3J0aW5nYCBwbHVnaW5cbiAgICAgKiBjb2x1bW5Tb3J0aW5nOiB0cnVlXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBDb2x1bW5Tb3J0aW5nYCBwbHVnaW4gd2l0aCBjdXN0b20gY29uZmlndXJhdGlvblxuICAgICAqIGNvbHVtblNvcnRpbmc6IHtcbiAgICAgKiAgIC8vIHNvcnQgZW1wdHkgY2VsbHMgYXMgd2VsbFxuICAgICAqICAgc29ydEVtcHR5Q2VsbHM6IHRydWUsXG4gICAgICogICAvLyBkaXNwbGF5IHRoZSBhcnJvdyBpY29uIGluIHRoZSBjb2x1bW4gaGVhZGVyXG4gICAgICogICBpbmRpY2F0b3I6IHRydWUsXG4gICAgICogICAvLyBkaXNhYmxlIGNsaWNraW5nIG9uIHRoZSBjb2x1bW4gaGVhZGVyIHRvIHNvcnQgdGhlIGNvbHVtblxuICAgICAqICAgaGVhZGVyQWN0aW9uOiBmYWxzZSxcbiAgICAgKiAgIC8vIGFkZCBhIGN1c3RvbSBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICogICBjb21wYXJlRnVuY3Rpb25GYWN0b3J5KHNvcnRPcmRlciwgY29sdW1uTWV0YSkge1xuICAgICAqICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG5leHRWYWx1ZSkge1xuICAgICAqICAgICAgIC8vIHNvbWUgdmFsdWUgY29tcGFyaXNvbnMgd2hpY2ggd2lsbCByZXR1cm4gLTEsIDAgb3IgMS4uLlxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIHRoZSBgQ29sdW1uU29ydGluZ2AgcGx1Z2luXG4gICAgICogY29sdW1uU29ydGluZzoge1xuICAgICAqICAgLy8gYXQgaW5pdGlhbGl6YXRpb24sIHNvcnQgY29sdW1uIDEgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgICogICBpbml0aWFsQ29uZmlnOiB7XG4gICAgICogICAgIGNvbHVtbjogMSxcbiAgICAgKiAgICAgc29ydE9yZGVyOiAnYXNjJ1xuICAgICAqICAgfSxcbiAgICAgKiAgIC8vIGF0IGluaXRpYWxpemF0aW9uLCBzb3J0IGNvbHVtbiAyIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgKiAgIGluaXRpYWxDb25maWc6IHtcbiAgICAgKiAgICAgY29sdW1uOiAyLFxuICAgICAqICAgICBzb3J0T3JkZXI6ICdkZXNjJ1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2x1bW5Tb3J0aW5nOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBjb2x1bW5TdW1tYXJ5YCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BDb2x1bW5TdW1tYXJ5YF0oQC9hcGkvY29sdW1uU3VtbWFyeS5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBjb2x1bW5TdW1tYXJ5YCBvcHRpb24gdG8gYW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAgICAgKiBFYWNoIG9iamVjdCBjb25maWd1cmVzIGEgc2luZ2xlIGNvbHVtbiBzdW1tYXJ5LCB1c2luZyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiB8IFByb3BlcnR5ICAgICAgICAgICAgICAgICB8IFBvc3NpYmxlIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHNvdXJjZUNvbHVtbmAgICAgICAgICAgIHwgQSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbQ29sdW1uIHRvIHN1bW1hcml6ZV0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTItc2VsZWN0LWNlbGxzLXRoYXQteW91LXdhbnQtdG8tc3VtbWFyaXplKSAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGByYW5nZXNgICAgICAgICAgICAgICAgICB8IEFuIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1JhbmdlcyBvZiByb3dzIHRvIHN1bW1hcml6ZV0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTItc2VsZWN0LWNlbGxzLXRoYXQteW91LXdhbnQtdG8tc3VtbWFyaXplKSAgICAgICAgICAgICB8XG4gICAgICogfCBgdHlwZWAgICAgICAgICAgICAgICAgICAgfCBgJ3N1bSdgIFxcfCBgJ21pbidgIFxcfCBgJ21heCdgIFxcfCBgJ2NvdW50J2AgXFx8IGAnYXZlcmFnZSdgIFxcfCBgJ2N1c3RvbSdgIHwgW1N1bW1hcnkgZnVuY3Rpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjc3RlcC0zLWNhbGN1bGF0ZS15b3VyLXN1bW1hcnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZGVzdGluYXRpb25Sb3dgICAgICAgICAgfCBBIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtEZXN0aW5hdGlvbiBjZWxsJ3Mgcm93IGNvb3JkaW5hdGVdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjc3RlcC00LXByb3ZpZGUtdGhlLWRlc3RpbmF0aW9uLWNlbGwtcy1jb29yZGluYXRlcykgICAgfFxuICAgICAqIHwgYGRlc3RpbmF0aW9uQ29sdW1uYCAgICAgIHwgQSBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbRGVzdGluYXRpb24gY2VsbCdzIGNvbHVtbiBjb29yZGluYXRlXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI3N0ZXAtNC1wcm92aWRlLXRoZS1kZXN0aW5hdGlvbi1jZWxsLXMtY29vcmRpbmF0ZXMpIHxcbiAgICAgKiB8IGBmb3JjZU51bWVyaWNgICAgICAgICAgICB8IGB0cnVlYCAgXFx8IGBmYWxzZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtUcmVhdCBub24tbnVtZXJpY3MgYXMgbnVtZXJpY3NdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjZm9yY2UtbnVtZXJpYy12YWx1ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGByZXZlcnNlZFJvd0Nvb3Jkc2AgICAgICB8IGB0cnVlYCAgXFx8IGBmYWxzZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFtSZXZlcnNlIHJvdyBjb29yZGluYXRlc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTUtbWFrZS1yb29tLWZvci10aGUtZGVzdGluYXRpb24tY2VsbCkgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHN1cHByZXNzRGF0YVR5cGVFcnJvcnNgIHwgYHRydWVgICBcXHwgYGZhbHNlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW1N1cHByZXNzIGRhdGEgdHlwZSBlcnJvcnNdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjdGhyb3ctZGF0YS10eXBlLWVycm9ycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgcmVhZE9ubHlgICAgICAgICAgICAgICAgfCBgdHJ1ZWAgIFxcfCBgZmFsc2VgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNYWtlIHN1bW1hcnkgY2VsbCByZWFkLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGByb3VuZEZsb2F0YCAgICAgICAgICAgICB8IGB0cnVlYCAgXFx8IGBmYWxzZWAgIFxcfCBBIG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbUm91bmQgc3VtbWFyeSByZXN1bHRdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjcm91bmQtYS1jb2x1bW4tc3VtbWFyeS1yZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBjdXN0b21GdW5jdGlvbmAgICAgICAgICB8IEEgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW0N1c3RvbSBzdW1tYXJ5IGZ1bmN0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI2ltcGxlbWVudC1hLWN1c3RvbS1zdW1tYXJ5LWZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29sdW1uIHN1bW1hcnldKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQpXG4gICAgICogLSBbUGx1Z2luczogYENvbHVtblN1bW1hcnlgXShAL2FwaS9jb2x1bW5TdW1tYXJ5Lm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge29iamVjdFtdfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb2x1bW5TdW1tYXJ5XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uU3VtbWFyeTogW1xuICAgICAqICAge1xuICAgICAqICAgICBzb3VyY2VDb2x1bW46IDAsXG4gICAgICogICAgIHJhbmdlczogW1xuICAgICAqICAgICAgIFswLCAyXSwgWzRdLCBbNiwgOF1cbiAgICAgKiAgICAgXSxcbiAgICAgKiAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICogICAgIGRlc3RpbmF0aW9uUm93OiA0LFxuICAgICAqICAgICBkZXN0aW5hdGlvbkNvbHVtbjogMSxcbiAgICAgKiAgICAgZm9yY2VOdW1lcmljOiB0cnVlLFxuICAgICAqICAgICByZXZlcnNlZFJvd0Nvb3JkczogdHJ1ZSxcbiAgICAgKiAgICAgc3VwcHJlc3NEYXRhVHlwZUVycm9yczogZmFsc2UsXG4gICAgICogICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAqICAgICByb3VuZEZsb2F0OiBmYWxzZSxcbiAgICAgKiAgICAgY3VzdG9tRnVuY3Rpb24oZW5kcG9pbnQpIHtcbiAgICAgKiAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29sdW1uU3VtbWFyeTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY29sV2lkdGhzYCBvcHRpb24gc2V0cyBjb2x1bW5zJyB3aWR0aHMsIGluIHBpeGVscy5cbiAgICAgKlxuICAgICAqIFRoZSBkZWZhdWx0IGNvbHVtbiB3aWR0aCBpcyA1MHB4LiBUbyBjaGFuZ2UgaXQsIHNldCB0aGUgYGNvbFdpZHRoc2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeGFtcGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIG51bWJlciAgICB8IFNldCB0aGUgc2FtZSB3aWR0aCBmb3IgZXZlcnkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgY29sV2lkdGhzOiAxMDBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBIHN0cmluZyAgICB8IFNldCB0aGUgc2FtZSB3aWR0aCBmb3IgZXZlcnkgY29sdW1uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgY29sV2lkdGhzOiAnMTAwcHgnYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSAgICB8IFNldCB3aWR0aHMgc2VwYXJhdGVseSBmb3IgZWFjaCBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgY29sV2lkdGhzOiBbMTAwLCAxMjAsIHVuZGVmaW5lZF1gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBIGZ1bmN0aW9uICB8IFNldCBjb2x1bW4gd2lkdGhzIGR5bmFtaWNhbGx5LDxicj5vbiBlYWNoIHJlbmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgY29sV2lkdGhzKHZpc3VhbENvbHVtbkluZGV4KSB7IHJldHVybiB2aXN1YWxDb2x1bW5JbmRleCAqIDEwOyB9YCB8XG4gICAgICogfCBgdW5kZWZpbmVkYCB8IFVzZWQgYnkgdGhlIFttb2RpZnlDb2xXaWR0aF0oQC9hcGkvaG9va3MubWQjbW9kaWZ5Q29sV2lkdGgpIGhvb2ssPGJyPnRvIGRldGVjdCBjb2x1bW4gd2lkdGggY2hhbmdlcy4gfCBgY29sV2lkdGhzOiB1bmRlZmluZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBTZXR0aW5nIGBjb2xXaWR0aHNgIGV2ZW4gZm9yIGEgc2luZ2xlIGNvbHVtbiBkaXNhYmxlcyB0aGUge0BsaW5rIEF1dG9Db2x1bW5TaXplfSBwbHVnaW5cbiAgICAgKiBmb3IgYWxsIGNvbHVtbnMuIEZvciB0aGlzIHJlYXNvbiwgaWYgeW91IHVzZSBgY29sV2lkdGhzYCwgd2UgcmVjb21tZW5kIHlvdSBzZXQgYSB3aWR0aCBmb3IgZWFjaCBvbmVcbiAgICAgKiBvZiB5b3VyIGNvbHVtbnMuIE90aGVyd2lzZSwgZXZlcnkgY29sdW1uIHdpdGggYW4gdW5kZWZpbmVkIHdpZHRoIGRlZmF1bHRzIGJhY2sgdG8gNTBweCxcbiAgICAgKiB3aGljaCBtYXkgY3V0IGxvbmdlciBjb2x1bW5zIG5hbWVzLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbHVtbiB3aWR0aF0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4td2lkdGgvY29sdW1uLXdpZHRoLm1kKVxuICAgICAqIC0gW0hvb2tzOiBgbW9kaWZ5Q29sV2lkdGhgXShAL2FwaS9ob29rcy5tZCNtb2RpZnlDb2xXaWR0aClcbiAgICAgKiAtIFtgYXV0b0NvbHVtblNpemVgXSgjYXV0b0NvbHVtblNpemUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfG51bWJlcltdfHN0cmluZ3xzdHJpbmdbXXxBcnJheTx1bmRlZmluZWQ+fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc2V0IGV2ZXJ5IGNvbHVtbidzIHdpZHRoIHRvIDEwMHB4XG4gICAgICogY29sV2lkdGhzOiAxMDAsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgZXZlcnkgY29sdW1uJ3Mgd2lkdGggdG8gMTAwcHhcbiAgICAgKiBjb2xXaWR0aHM6ICcxMDBweCcsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgdGhlIGZpcnN0IChieSB2aXN1YWwgaW5kZXgpIGNvbHVtbidzIHdpZHRoIHRvIDEwMFxuICAgICAqIC8vIHNldCB0aGUgc2Vjb25kIChieSB2aXN1YWwgaW5kZXgpIGNvbHVtbidzIHdpZHRoIHRvIDEyMFxuICAgICAqIC8vIHNldCB0aGUgdGhpcmQgKGJ5IHZpc3VhbCBpbmRleCkgY29sdW1uJ3Mgd2lkdGggdG8gYHVuZGVmaW5lZGAsIHNvIHRoYXQgaXQgZGVmYXVsdHMgdG8gNTBweFxuICAgICAqIC8vIHNldCBhbnkgb3RoZXIgY29sdW1uJ3Mgd2lkdGggdG8gdGhlIGRlZmF1bHQgNTBweCAobm90ZSB0aGF0IGxvbmdlciBjZWxsIHZhbHVlcyBhbmQgY29sdW1uIG5hbWVzIGNhbiBnZXQgY3V0KVxuICAgICAqIGNvbFdpZHRoczogWzEwMCwgMTIwLCB1bmRlZmluZWRdLFxuICAgICAqXG4gICAgICogLy8gc2V0IGVhY2ggY29sdW1uJ3Mgd2lkdGggaW5kaXZpZHVhbGx5LCB1c2luZyBhIGZ1bmN0aW9uXG4gICAgICogY29sV2lkdGhzKHZpc3VhbENvbHVtbkluZGV4KSB7XG4gICAgICogICByZXR1cm4gdmlzdWFsQ29sdW1uSW5kZXggKiAxMDtcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbFdpZHRoczogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY29tbWVudGVkQ2VsbENsYXNzTmFtZWAgb3B0aW9uIGxldHMgeW91IGFkZCBhIENTUyBjbGFzcyBuYW1lIHRvIGNlbGxzXG4gICAgICogdGhhdCBoYXZlIGNvbW1lbnRzLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbW1lbnRzXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NvbW1lbnRzL2NvbW1lbnRzLm1kKVxuICAgICAqIC0gW2Bjb21tZW50c2BdKCNjb21tZW50cylcbiAgICAgKiAtIFtgcmVhZE9ubHlDZWxsQ2xhc3NOYW1lYF0oI3JlYWRPbmx5Q2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudFJvd0NsYXNzTmFtZWBdKCNjdXJyZW50Um93Q2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50SGVhZGVyQ2xhc3NOYW1lYF0oI2N1cnJlbnRIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGFjdGl2ZUhlYWRlckNsYXNzTmFtZWBdKCNhY3RpdmVIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGludmFsaWRDZWxsQ2xhc3NOYW1lYF0oI2ludmFsaWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BwbGFjZWhvbGRlckNlbGxDbGFzc05hbWVgXSgjcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2ByZWFkT25seUNlbGxDbGFzc05hbWVgXSgjcmVhZE9ubHlDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bub1dvcmRXcmFwQ2xhc3NOYW1lYF0oI25vV29yZFdyYXBDbGFzc05hbWUpXG4gICAgICogLSBbYFRhYmxlQ2xhc3NOYW1lYF0oI1RhYmxlQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjbGFzc05hbWVgXSgjY2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnaHRDb21tZW50Q2VsbCdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhIGBoYXMtY29tbWVudGAgQ1NTIGNsYXNzIG5hbWVcbiAgICAgKiAvLyB0byBlYWNoIGNlbGwgdGhhdCBoYXMgYSBjb21tZW50XG4gICAgICogY29tbWVudGVkQ2VsbENsYXNzTmFtZTogJ2hhcy1jb21tZW50JyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiAnaHRDb21tZW50Q2VsbCcsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBjb21tZW50c2Agb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgQ29tbWVudHNgXShAL2FwaS9jb21tZW50cy5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBjb21tZW50c2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgIHwgLSBFbmFibGUgdGhlIFtgQ29tbWVudHNgXShAL2FwaS9jb21tZW50cy5tZCkgcGx1Z2luPGJyPi0gQWRkIGNvbW1lbnQgbWVudSBpdGVtcyB0byB0aGUgW2NvbnRleHQgbWVudV0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGZhbHNlYCAgIHwgRGlzYWJsZSB0aGUgW2BDb21tZW50c2BdKEAvYXBpL2NvbW1lbnRzLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBvYmplY3QgfCAtIEVuYWJsZSB0aGUgW2BDb21tZW50c2BdKEAvYXBpL2NvbW1lbnRzLm1kKSBwbHVnaW48YnI+LSBBZGQgY29tbWVudCBtZW51IGl0ZW1zIHRvIHRoZSBbY29udGV4dCBtZW51XShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCk8YnI+LSBDb25maWd1cmUgY29tbWVudCBzZXR0aW5ncyB8XG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBgY29tbWVudHNgIG9wdGlvbiB0byBhbiBvYmplY3QsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgY29tbWVudCBvcHRpb25zOlxuICAgICAqXG4gICAgICogfCBPcHRpb24gICAgICAgICB8IFBvc3NpYmxlIHNldHRpbmdzICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZGlzcGxheURlbGF5YCB8IEEgbnVtYmVyIChkZWZhdWx0OiBgMjUwYCkgICB8IERpc3BsYXkgY29tbWVudHMgYWZ0ZXIgYSBkZWxheSAoaW4gbWlsbGlzZWNvbmRzKSAgICB8XG4gICAgICogfCBgcmVhZE9ubHlgICAgICB8IGB0cnVlYCBcXHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBgdHJ1ZWA6IE1ha2UgY29tbWVudHMgcmVhZC1vbmx5ICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHN0eWxlYCAgICAgICAgfCBBbiBvYmplY3QgICAgICAgICAgICAgICAgICAgfCBTZXQgY29tbWVudCBib3hlcycgYHdpZHRoYCBhbmQgYGhlaWdodGAgKGluIHBpeGVscykgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbW1lbnRzXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NvbW1lbnRzL2NvbW1lbnRzLm1kKVxuICAgICAqIC0gW0NvbnRleHQgbWVudV0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQpXG4gICAgICogLSBbYHdpZHRoYF0oI3dpZHRoKVxuICAgICAqIC0gW2BoZWlnaHRgXSgjaGVpZ2h0KVxuICAgICAqIC0gW2ByZWFkT25seWBdKCNyZWFkT25seSlcbiAgICAgKiAtIFtgY29tbWVudGVkQ2VsbENsYXNzTmFtZWBdKCNjb21tZW50ZWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58b2JqZWN0W119XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29tbWVudHNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBDb21tZW50c2AgcGx1Z2luXG4gICAgICogY29tbWVudHM6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBDb21tZW50c2AgcGx1Z2luXG4gICAgICogLy8gYW5kIGNvbmZpZ3VyZSBpdHMgc2V0dGluZ3NcbiAgICAgKiBjb21tZW50czoge1xuICAgICAqICAgLy8gZGlzcGxheSBhbGwgY29tbWVudHMgd2l0aCBhIDEtc2Vjb25kIGRlbGF5XG4gICAgICogICBkaXNwbGF5RGVsYXk6IDEwMDAsXG4gICAgICogICAvLyBtYWtlIGFsbCBjb21tZW50cyByZWFkLW9ubHlcbiAgICAgKiAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAqICAgLy8gc2V0IHRoZSBkZWZhdWx0IHNpemUgb2YgYWxsIGNvbW1lbnQgYm94ZXNcbiAgICAgKiAgIHN0eWxlOiB7XG4gICAgICogICAgIHdpZHRoOiAzMDAsXG4gICAgICogICAgIGhlaWdodDogMTAwXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbW1lbnRzOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYGNvbnRleHRNZW51YCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BDb250ZXh0TWVudWBdKEAvYXBpL2NvbnRleHRNZW51Lm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGNvbnRleHRNZW51YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgICAgfCBEaXNhYmxlIHRoZSBbYENvbnRleHRNZW51YF0oQC9hcGkvY29udGV4dE1lbnUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICB8IC0gRW5hYmxlIHRoZSBbYENvbnRleHRNZW51YF0oQC9hcGkvY29udGV4dE1lbnUubWQpIHBsdWdpbjxicj4tIFVzZSB0aGUgW2RlZmF1bHQgY29udGV4dCBtZW51IG9wdGlvbnNdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kI2NvbnRleHQtbWVudS13aXRoLWRlZmF1bHQtb3B0aW9ucykgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5ICB8IC0gRW5hYmxlIHRoZSBbYENvbnRleHRNZW51YF0oQC9hcGkvY29udGV4dE1lbnUubWQpIHBsdWdpbjxicj4tIE1vZGlmeSBbaW5kaXZpZHVhbCBjb250ZXh0IG1lbnUgb3B0aW9uc10oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQjY29udGV4dC1tZW51LXdpdGgtc3BlY2lmaWMtb3B0aW9ucykgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIG9iamVjdCB8IC0gRW5hYmxlIHRoZSBbYENvbnRleHRNZW51YF0oQC9hcGkvY29udGV4dE1lbnUubWQpIHBsdWdpbjxicj4tIEFwcGx5IGEgW2N1c3RvbSBjb250ZXh0IG1lbnUgY29uZmlndXJhdGlvbl0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQjY29udGV4dC1tZW51LXdpdGgtYS1mdWxseS1jdXN0b20tY29uZmlndXJhdGlvbikgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbnRleHQgbWVudV0oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQpXG4gICAgICogLSBbQ29udGV4dCBtZW51OiBDb250ZXh0IG1lbnUgd2l0aCBkZWZhdWx0IG9wdGlvbnNdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kI2NvbnRleHQtbWVudS13aXRoLWRlZmF1bHQtb3B0aW9ucylcbiAgICAgKiAtIFtDb250ZXh0IG1lbnU6IENvbnRleHQgbWVudSB3aXRoIHNwZWNpZmljIG9wdGlvbnNdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kI2NvbnRleHQtbWVudS13aXRoLXNwZWNpZmljLW9wdGlvbnMpXG4gICAgICogLSBbQ29udGV4dCBtZW51OiBDb250ZXh0IG1lbnUgd2l0aCBmdWxseSBjdXN0b20gY29uZmlndXJhdGlvbiBvcHRpb25zXShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCNjb250ZXh0LW1lbnUtd2l0aC1hLWZ1bGx5LWN1c3RvbS1jb25maWd1cmF0aW9uKVxuICAgICAqIC0gW1BsdWdpbnM6IGBDb250ZXh0TWVudWBdKEAvYXBpL2NvbnRleHRNZW51Lm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58c3RyaW5nW118b2JqZWN0fVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb250ZXh0TWVudVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYENvbnRleHRNZW51YCBwbHVnaW5cbiAgICAgKiAvLyB1c2UgdGhlIGRlZmF1bHQgY29udGV4dCBtZW51IG9wdGlvbnNcbiAgICAgKiBjb250ZXh0TWVudTogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYENvbnRleHRNZW51YCBwbHVnaW5cbiAgICAgKiAvLyBhbmQgbW9kaWZ5IGluZGl2aWR1YWwgY29udGV4dCBtZW51IG9wdGlvbnNcbiAgICAgKiBjb250ZXh0TWVudTogWydyb3dfYWJvdmUnLCAncm93X2JlbG93JywgJy0tLS0tLS0tLScsICd1bmRvJywgJ3JlZG8nXSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYENvbnRleHRNZW51YCBwbHVnaW5cbiAgICAgKiAvLyBhbmQgYXBwbHkgYSBjdXN0b20gY29udGV4dCBtZW51IGNvbmZpZ3VyYXRpb25cbiAgICAgKiBjb250ZXh0TWVudToge1xuICAgICAqICAgaXRlbXM6IHtcbiAgICAgKiAgICAgJ29wdGlvbjEnOiB7XG4gICAgICogICAgICAgbmFtZTogJ09wdGlvbiAxJ1xuICAgICAqICAgICB9LFxuICAgICAqICAgICAnb3B0aW9uMic6IHtcbiAgICAgKiAgICAgICBuYW1lOiAnT3B0aW9uIDInLFxuICAgICAqICAgICAgIHN1Ym1lbnU6IHtcbiAgICAgKiAgICAgICAgIGl0ZW1zOiBbXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBrZXk6ICdvcHRpb24yOnN1Ym9wdGlvbjEnLFxuICAgICAqICAgICAgICAgICAgIG5hbWU6ICdTdWJvcHRpb24gMScsXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGtleSwgb3B0aW9ucykge1xuICAgICAqICAgICAgICAgICAgICAgLi4uXG4gICAgICogICAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAuLi5cbiAgICAgKiAgICAgICAgIF1cbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbnRleHRNZW51OiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBjb3B5YWJsZWAgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciBhIGNlbGwncyB2YWx1ZSBjYW4gYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQgb3Igbm90LlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBjb3B5YWJsZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLSBPbiBwcmVzc2luZyA8a2JkPioqQ3RybCoqPC9rYmQ+LzxrYmQ+KipDbWQqKjwva2JkPis8a2JkPioqQyoqPC9rYmQ+LCBhZGQgdGhlIGNlbGwncyB2YWx1ZSB0byB0aGUgY2xpcGJvYXJkICAgICAgICAgfFxuICAgICAqIHwgYGZhbHNlYDxicj4oZGVmYXVsdCBmb3IgdGhlIFtgcGFzc3dvcmRgXShAL2d1aWRlcy9jZWxsLXR5cGVzL3Bhc3N3b3JkLWNlbGwtdHlwZS9wYXNzd29yZC1jZWxsLXR5cGUubWQpIFtjZWxsIHR5cGVdKCN0eXBlKSkgICAgICAgIHwgLSBPbiBwcmVzc2luZyA8a2JkPioqQ3RybCoqPC9rYmQ+LzxrYmQ+KipDbWQqKjwva2JkPis8a2JkPioqQyoqPC9rYmQ+LCBhZGQgYW4gZW1wdHkgc3RyaW5nIChgXCJcImApIHRvIHRoZSBjbGlwYm9hcmQgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2xpcGJvYXJkXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NsaXBib2FyZC9jbGlwYm9hcmQubWQpXG4gICAgICogLSBbQ29uZmlndXJhdGlvbiBvcHRpb25zOiBDYXNjYWRpbmcgY29uZmlndXJhdGlvbl0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjY2FzY2FkaW5nLWNvbmZpZ3VyYXRpb24pXG4gICAgICogLSBbUGFzc3dvcmQgY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL3Bhc3N3b3JkLWNlbGwtdHlwZS9wYXNzd29yZC1jZWxsLXR5cGUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgY29weWluZyBmb3IgZWFjaCBjZWxsIG9mIHRoZSBlbnRpcmUgZ3JpZFxuICAgICAqIGNvcHlhYmxlOiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIGNvcHlpbmcgZm9yIGluZGl2aWR1YWwgY29sdW1uc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gZW5hYmxlIGNvcHlpbmcgZm9yIGVhY2ggY2VsbCBvZiB0aGlzIGNvbHVtblxuICAgICAqICAgICBjb3B5YWJsZTogdHJ1ZVxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gZGlzYWJsZSBjb3B5aW5nIGZvciBlYWNoIGNlbGwgb2YgdGhpcyBjb2x1bW5cbiAgICAgKiAgICAgY29weWFibGU6IGZhbHNlXG4gICAgICogICB9XG4gICAgICogXVxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIGNvcHlpbmcgZm9yIHNwZWNpZmljIGNlbGxzXG4gICAgICogY2VsbDogW1xuICAgICAqICAge1xuICAgICAqICAgICBjb2w6IDAsXG4gICAgICogICAgIHJvdzogMCxcbiAgICAgKiAgICAgLy8gZGlzYWJsZSBjb3B5aW5nIGZvciBjZWxsICgwLCAwKVxuICAgICAqICAgICBjb3B5YWJsZTogZmFsc2UsXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb3B5YWJsZTogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYGNvcHlQYXN0ZWAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgQ29weVBhc3RlYF0oQC9hcGkvY29weVBhc3RlLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGNvcHlQYXN0ZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgIHwgRW5hYmxlIHRoZSBbYENvcHlQYXN0ZWBdKEAvYXBpL2NvcHlQYXN0ZS5tZCkgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICAgICAgICAgICB8IERpc2FibGUgdGhlIFtgQ29weVBhc3RlYF0oQC9hcGkvY29weVBhc3RlLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgQW4gb2JqZWN0ICAgICAgICAgfCAtIEVuYWJsZSB0aGUgW2BDb3B5UGFzdGVgXShAL2FwaS9jb3B5UGFzdGUubWQpIHBsdWdpbjxicj4tIE1vZGlmeSB0aGUgW2BDb3B5UGFzdGVgXShAL2FwaS9jb3B5UGFzdGUubWQpIHBsdWdpbiBvcHRpb25zIHxcbiAgICAgKlxuICAgICAqICMjIyMjIGNvcHlQYXN0ZTogQWRkaXRpb25hbCBvcHRpb25zXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBgY29weVBhc3RlYCBvcHRpb24gdG8gYW4gb2JqZWN0LCB5b3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIGBDb3B5UGFzdGVgIHBsdWdpbiBvcHRpb25zOlxuICAgICAqXG4gICAgICogfCBPcHRpb24gICAgICAgICAgICAgICAgICAgfCBQb3NzaWJsZSBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgY29sdW1uc0xpbWl0YCAgICAgICAgICAgfCBBIG51bWJlciAoZGVmYXVsdDogYEluZmluaXR5YCkgICAgICAgICAgICAgICAgICAgICB8IFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIGNvcGllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgcm93c0xpbWl0YCAgICAgICAgICAgICAgfCBBIG51bWJlciAoZGVmYXVsdDogYEluZmluaXR5YCkgICAgICAgICAgICAgICAgICAgICB8IFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIGNvcGllZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgcGFzdGVNb2RlYCAgICAgICAgICAgICAgfCBgJ292ZXJ3cml0ZSdgIFxcfCBgJ3NoaWZ0X2Rvd24nYCBcXHwgYCdzaGlmdF9yaWdodCdgIHwgV2hlbiBwYXN0aW5nOjxicj5gJ292ZXJ3cml0ZSdgOiBvdmVyd3JpdGUgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBjZWxsczxicj5gJ3NoaWZ0X2Rvd24nYDogbW92ZSB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGNlbGxzIGRvd248YnI+YCdzaGlmdF9yaWdodCdgOiBtb3ZlIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgY2VsbHMgdG8gdGhlIHJpZ2h0IHxcbiAgICAgKiB8IGBjb3B5Q29sdW1uSGVhZGVyc2AgICAgICB8IEJvb2xlYW4gKGRlZmF1bHQ6IGBmYWxzZWApICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHRydWVgOiBhZGQgYSBjb250ZXh0IG1lbnUgb3B0aW9uIGZvciBjb3B5aW5nIGNlbGxzIGFsb25nIHdpdGggdGhlaXIgbmVhcmVzdCBjb2x1bW4gaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBjb3B5Q29sdW1uR3JvdXBIZWFkZXJzYCB8IEJvb2xlYW4gKGRlZmF1bHQ6IGBmYWxzZWApICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHRydWVgOiBhZGQgYSBjb250ZXh0IG1lbnUgb3B0aW9uIGZvciBjb3B5aW5nIGNlbGxzIGFsb25nIHdpdGggYWxsIHRoZWlyIHJlbGF0ZWQgY29sdW1ucyBoZWFkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBjb3B5Q29sdW1uSGVhZGVyc09ubHlgICB8IEJvb2xlYW4gKGRlZmF1bHQ6IGBmYWxzZWApICAgICAgICAgICAgICAgICAgICAgICAgIHwgYHRydWVgOiBhZGQgYSBjb250ZXh0IG1lbnUgb3B0aW9uIGZvciBjb3B5aW5nIGNvbHVtbiBoZWFkZXJzIG5lYXJlc3QgdG8gdGhlIHNlbGVjdGVkIGNlbGxzICh3aXRob3V0IGNvcHlpbmcgY2VsbHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgdWlDb250YWluZXJgICAgICAgICAgICAgfCBBbiBIVE1MIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSBVSSBjb250YWluZXIgZm9yIHRoZSBzZWNvbmRhcnkgZm9jdXNhYmxlIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbUGx1Z2luczogYENvcHlQYXN0ZWBdKEAvYXBpL2NvcHlQYXN0ZS5tZClcbiAgICAgKiAtIFtHdWlkZXM6IENsaXBib2FyZF0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9jbGlwYm9hcmQvY2xpcGJvYXJkLm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge29iamVjdHxib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29weVBhc3RlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBwbHVnaW4gd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICogY29weVBhc3RlOiB0cnVlIC8vIHNldCBieSBkZWZhdWx0XG4gICAgICpcbiAgICAgKiAvLyBkaXNhYmxlIHRoZSBwbHVnaW5cbiAgICAgKiBjb3B5UGFzdGU6IGZhbHNlLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIHRoZSBwbHVnaW4gd2l0aCBhIGN1c3RvbSBjb25maWd1cmF0aW9uXG4gICAgICogY29weVBhc3RlOiB7XG4gICAgICogICAvLyBzZXQgYSBtYXhpbXVtIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGJlIGNvcGllZFxuICAgICAqICAgY29sdW1uc0xpbWl0OiAyNSxcbiAgICAgKlxuICAgICAqICAgLy8gc2V0IGEgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0aGF0IGNhbiBiZSBjb3BpZWRcbiAgICAgKiAgIHJvd3NMaW1pdDogNTAsXG4gICAgICpcbiAgICAgKiAgIC8vIHNldCB0aGUgcGFzdGUgYmVoYXZpb3JcbiAgICAgKiAgIHBhc3RlTW9kZTogJ3NoaWZ0X2Rvd24nLFxuICAgICAqXG4gICAgICogICAvLyBhZGQgdGhlIG9wdGlvbiB0byBjb3B5IGNlbGxzIGFsb25nIHdpdGggdGhlaXIgbmVhcmVzdCBjb2x1bW4gaGVhZGVyc1xuICAgICAqICAgY29weUNvbHVtbkhlYWRlcnM6IHRydWUsXG4gICAgICpcbiAgICAgKiAgIC8vIGFkZCB0aGUgb3B0aW9uIHRvIGNvcHkgY2VsbHMgYWxvbmcgd2l0aCBhbGwgdGhlaXIgcmVsYXRlZCBjb2x1bW5zIGhlYWRlcnNcbiAgICAgKiAgIGNvcHlDb2x1bW5Hcm91cEhlYWRlcnM6IHRydWUsXG4gICAgICpcbiAgICAgKiAgIC8vIGFkZCB0aGUgb3B0aW9uIHRvIGNvcHkganVzdCBjb2x1bW4gaGVhZGVycyAod2l0aG91dCBjb3B5aW5nIGNlbGxzKVxuICAgICAqICAgY29weUNvbHVtbkhlYWRlcnNPbmx5OiB0cnVlLFxuICAgICAqXG4gICAgICogICAvLyBzZXQgYSBVSSBjb250YWluZXJcbiAgICAgKiAgIHVpQ29udGFpbmVyOiBkb2N1bWVudC5ib2R5LFxuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29weVBhc3RlOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY29ycmVjdEZvcm1hdGAgb3B0aW9uIGNvbmZpZ3VyZXMgd2hldGhlciBpbmNvcnJlY3RseS1mb3JtYXR0ZWQgdGltZXMgYW5kIGRhdGVzIGFyZSBhbWVuZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIHVzZXIgZW50ZXJzIGRhdGVzIGFuZCB0aW1lcywgSGFuZHNvbnRhYmxlIGNhbiBhdXRvbWF0aWNhbGx5IGFkanVzdCB0aGVpciBmb3JtYXRcbiAgICAgKiB0byBtYXRjaCB0aGUgW2BkYXRlRm9ybWF0YF0oI2RhdGVGb3JtYXQpIGFuZCBbYHRpbWVGb3JtYXRgXShAL2d1aWRlcy9jZWxsLXR5cGVzL3RpbWUtY2VsbC10eXBlL3RpbWUtY2VsbC10eXBlLm1kKSBzZXR0aW5ncy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgY29ycmVjdEZvcm1hdGAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IERvbid0IGNvcnJlY3QgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBkYXRlIG9yIHRpbWUgKHRyZWF0IHRoZSBlbnRlcmVkIGRhdGUgb3IgdGltZSBhcyBpbnZhbGlkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgdHJ1ZWAgICAgICAgICAgICB8IENvcnJlY3QgdGhlIGZvcm1hdCBvZiB0aGUgZW50ZXJlZCBkYXRlIG9yIHRpbWUgdG8gbWF0Y2ggdGhlIFtgZGF0ZUZvcm1hdGBdKCNkYXRlRm9ybWF0KSBvciBbYHRpbWVGb3JtYXRgXShAL2d1aWRlcy9jZWxsLXR5cGVzL3RpbWUtY2VsbC10eXBlL3RpbWUtY2VsbC10eXBlLm1kKSBzZXR0aW5ncyB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbRGF0ZSBjZWxsIHR5cGVdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvZGF0ZS1jZWxsLXR5cGUvZGF0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbVGltZSBjZWxsIHR5cGVdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvdGltZS1jZWxsLXR5cGUvdGltZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbYGRhdGVGb3JtYXRgXSgjZGF0ZUZvcm1hdClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYGRhdGVgXG4gICAgICogICB0eXBlOiAnZGF0ZScsXG4gICAgICogICAvLyBmb3IgZXZlcnkgYGRhdGVgIGNlbGwgb2YgdGhpcyBjb2x1bW4sIHNldCB0aGUgZGF0ZSBmb3JtYXQgdG8gYFlZWVktTU0tRERgXG4gICAgICogICBkYXRlRm9ybWF0OiAnWVlZWS1NTS1ERCcsXG4gICAgICogICAvLyBlbmZvcmNlIHRoZSBgWVlZWS1NTS1ERGAgZGF0ZSBmb3JtYXRcbiAgICAgKiAgIGNvcnJlY3RGb3JtYXQ6IHRydWVcbiAgICAgKiAgIH0sXG4gICAgICpcbiAgICAgKiAgIHtcbiAgICAgKiAgIC8vIHNldCB0aGUgYHR5cGVgIG9mIGVhY2ggY2VsbCBpbiB0aGlzIGNvbHVtbiB0byBgdGltZWBcbiAgICAgKiAgIHR5cGU6ICd0aW1lJyxcbiAgICAgKiAgIC8vIGZvciBldmVyeSBgdGltZWAgY2VsbCBvZiB0aGlzIGNvbHVtbiwgc2V0IHRoZSB0aW1lIGZvcm1hdCB0byBgaDptbTpzcyBhYFxuICAgICAqICAgdGltZUZvcm1hdDogJ2g6bW06c3MgYScsXG4gICAgICogICAvLyBlbmZvcmNlIHRoZSBgaDptbTpzcyBhYCB0aW1lIGZvcm1hdFxuICAgICAqICAgY29ycmVjdEZvcm1hdDogdHJ1ZVxuICAgICAqICAgfSxcbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvcnJlY3RGb3JtYXQ6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgY3VycmVudENvbENsYXNzTmFtZWAgb3B0aW9uIGxldHMgeW91IGFkZCBhIENTUyBjbGFzcyBuYW1lXG4gICAgICogdG8gZWFjaCBjZWxsIG9mIHRoZSBjdXJyZW50bHktdmlzaWJsZSwgY3VycmVudGx5LXNlbGVjdGVkIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbYGN1cnJlbnRSb3dDbGFzc05hbWVgXSgjY3VycmVudFJvd0NsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudEhlYWRlckNsYXNzTmFtZWBdKCNjdXJyZW50SGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BhY3RpdmVIZWFkZXJDbGFzc05hbWVgXSgjYWN0aXZlSGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BpbnZhbGlkQ2VsbENsYXNzTmFtZWBdKCNpbnZhbGlkQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lYF0oI3BsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgcmVhZE9ubHlDZWxsQ2xhc3NOYW1lYF0oI3JlYWRPbmx5Q2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgY29tbWVudGVkQ2VsbENsYXNzTmFtZWBdKCNjb21tZW50ZWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bub1dvcmRXcmFwQ2xhc3NOYW1lYF0oI25vV29yZFdyYXBDbGFzc05hbWUpXG4gICAgICogLSBbYFRhYmxlQ2xhc3NOYW1lYF0oI1RhYmxlQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjbGFzc05hbWVgXSgjY2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhIGB5b3VyLWNsYXNzLW5hbWVgIENTUyBjbGFzcyBuYW1lXG4gICAgICogLy8gdG8gZWFjaCBjZWxsIG9mIHRoZSBjdXJyZW50bHktdmlzaWJsZSwgY3VycmVudGx5LXNlbGVjdGVkIGNvbHVtbnNcbiAgICAgKiBjdXJyZW50Q29sQ2xhc3NOYW1lOiAneW91ci1jbGFzcy1uYW1lJyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjdXJyZW50Q29sQ2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBjdXJyZW50SGVhZGVyQ2xhc3NOYW1lYCBvcHRpb24gbGV0cyB5b3UgYWRkIGEgQ1NTIGNsYXNzIG5hbWVcbiAgICAgKiB0byBldmVyeSBjdXJyZW50bHktdmlzaWJsZSwgY3VycmVudGx5LXNlbGVjdGVkIGhlYWRlci5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgY3VycmVudFJvd0NsYXNzTmFtZWBdKCNjdXJyZW50Um93Q2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50Q29sQ2xhc3NOYW1lYF0oI2N1cnJlbnRDb2xDbGFzc05hbWUpXG4gICAgICogLSBbYGFjdGl2ZUhlYWRlckNsYXNzTmFtZWBdKCNhY3RpdmVIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGludmFsaWRDZWxsQ2xhc3NOYW1lYF0oI2ludmFsaWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2ByZWFkT25seUNlbGxDbGFzc05hbWVgXSgjcmVhZE9ubHlDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bjb21tZW50ZWRDZWxsQ2xhc3NOYW1lYF0oI2NvbW1lbnRlZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYG5vV29yZFdyYXBDbGFzc05hbWVgXSgjbm9Xb3JkV3JhcENsYXNzTmFtZSlcbiAgICAgKiAtIFtgVGFibGVDbGFzc05hbWVgXSgjVGFibGVDbGFzc05hbWUpXG4gICAgICogLSBbYGNsYXNzTmFtZWBdKCNjbGFzc05hbWUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdodF9faGlnaGxpZ2h0J1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gYWRkIGFuIGBodF9faGlnaGxpZ2h0YCBDU1MgY2xhc3MgbmFtZVxuICAgICAqIC8vIHRvIGV2ZXJ5IGN1cnJlbnRseS12aXNpYmxlLCBjdXJyZW50bHktc2VsZWN0ZWQgaGVhZGVyXG4gICAgICogY3VycmVudEhlYWRlckNsYXNzTmFtZTogJ2h0X19oaWdobGlnaHQnLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ICdodF9faGlnaGxpZ2h0JyxcbiAgICAvKipcbiAgICAgKiBUaGUgYGN1cnJlbnRSb3dDbGFzc05hbWVgIG9wdGlvbiBsZXRzIHlvdSBhZGQgYSBDU1MgY2xhc3MgbmFtZVxuICAgICAqIHRvIGVhY2ggY2VsbCBvZiB0aGUgY3VycmVudGx5LXZpc2libGUsIGN1cnJlbnRseS1zZWxlY3RlZCByb3dzLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW2BjdXJyZW50Q29sQ2xhc3NOYW1lYF0oI2N1cnJlbnRDb2xDbGFzc05hbWUpXG4gICAgICogLSBbYGN1cnJlbnRIZWFkZXJDbGFzc05hbWVgXSgjY3VycmVudEhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgYWN0aXZlSGVhZGVyQ2xhc3NOYW1lYF0oI2FjdGl2ZUhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgaW52YWxpZENlbGxDbGFzc05hbWVgXSgjaW52YWxpZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZWBdKCNwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWBdKCNyZWFkT25seUNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYGNvbW1lbnRlZENlbGxDbGFzc05hbWVgXSgjY29tbWVudGVkQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgbm9Xb3JkV3JhcENsYXNzTmFtZWBdKCNub1dvcmRXcmFwQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BUYWJsZUNsYXNzTmFtZWBdKCNUYWJsZUNsYXNzTmFtZSlcbiAgICAgKiAtIFtgY2xhc3NOYW1lYF0oI2NsYXNzTmFtZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBhZGQgYSBgeW91ci1jbGFzcy1uYW1lYCBDU1MgY2xhc3MgbmFtZVxuICAgICAqIC8vIHRvIGVhY2ggY2VsbCBvZiB0aGUgY3VycmVudGx5LXZpc2libGUsIGN1cnJlbnRseS1zZWxlY3RlZCByb3dzXG4gICAgICogY3VycmVudFJvd0NsYXNzTmFtZTogJ3lvdXItY2xhc3MtbmFtZScsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY3VycmVudFJvd0NsYXNzTmFtZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgY3VzdG9tQm9yZGVyc2Agb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgQ3VzdG9tQm9yZGVyc2BdKEAvYXBpL2N1c3RvbUJvcmRlcnMubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFRvIGVuYWJsZSB0aGUgW2BDdXN0b21Cb3JkZXJzYF0oQC9hcGkvY3VzdG9tQm9yZGVycy5tZCkgcGx1Z2luXG4gICAgICogKGFuZCBhZGQgaXRzIG1lbnUgaXRlbXMgdG8gdGhlIFtjb250ZXh0IG1lbnVdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kKSksXG4gICAgICogc2V0IHRoZSBgY3VzdG9tQm9yZGVyc2Agb3B0aW9uIHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIFRvIGVuYWJsZSB0aGUgW2BDdXN0b21Cb3JkZXJzYF0oQC9hcGkvY3VzdG9tQm9yZGVycy5tZCkgcGx1Z2luXG4gICAgICogYW5kIGFkZCBhIHByZWRlZmluZWQgYm9yZGVyIGFyb3VuZCBhIHBhcnRpY3VsYXIgY2VsbCxcbiAgICAgKiBzZXQgdGhlIGBjdXN0b21Cb3JkZXJzYCBvcHRpb24gdG8gYW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAgICAgKiBFYWNoIG9iamVjdCByZXByZXNlbnRzIGEgYm9yZGVyIGNvbmZpZ3VyYXRpb24gZm9yIG9uZSBjZWxsLCBhbmQgaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIHwgUHJvcGVydHkgfCBTdWItcHJvcGVydGllcyAgICAgfCBUeXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHJvd2AgICAgfCAtICAgICAgICAgICAgICAgICAgfCBgcm93YDogTnVtYmVyICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGNlbGwncyByb3cgY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGNvbGAgICAgfCAtICAgICAgICAgICAgICAgICAgfCBgY29sYDogTnVtYmVyICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGNlbGwncyBjb2x1bW4gY29vcmRpbmF0ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHN0YXJ0YCAgfCBgd2lkdGhgPGJyPmBjb2xvcmAgfCBgd2lkdGhgOiBOdW1iZXI8YnI+YGNvbG9yYDogU3RyaW5nIHwgSWYgdGhlIFtsYXlvdXQgZGlyZWN0aW9uXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sYXlvdXQtZGlyZWN0aW9uL2xheW91dC1kaXJlY3Rpb24ubWQpIGlzIExUUiAoZGVmYXVsdCk6IGBzdGFydGAgc2V0cyB0aGUgd2lkdGggKGB3aWR0aGApIGFuZCBjb2xvciAoYGNvbG9yYCkgb2YgdGhlIGxlZnQtaGFuZCBib3JkZXIuPGJyPjxicj5JZiB0aGUgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgUlRMOiBgc3RhcnRgIHNldHMgdGhlIHdpZHRoIChgd2lkdGhgKSBhbmQgY29sb3IgKGBjb2xvcmApIG9mIHRoZSByaWdodC1oYW5kIGJvcmRlci4gfFxuICAgICAqIHwgYGVuZGAgICAgfCBgd2lkdGhgPGJyPmBjb2xvcmAgfCBgd2lkdGhgOiBOdW1iZXI8YnI+YGNvbG9yYDogU3RyaW5nIHwgSWYgdGhlIFtsYXlvdXQgZGlyZWN0aW9uXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sYXlvdXQtZGlyZWN0aW9uL2xheW91dC1kaXJlY3Rpb24ubWQpIGlzIExUUiAoZGVmYXVsdCk6IGBlbmRgIHNldHMgdGhlIHdpZHRoIChgd2lkdGhgKSBhbmQgY29sb3IgKGBjb2xvcmApIG9mIHRoZSByaWdodC1oYW5kIGJvcmRlci48YnI+PGJyPklmIHRoZSBbbGF5b3V0IGRpcmVjdGlvbl0oQC9ndWlkZXMvaW50ZXJuYXRpb25hbGl6YXRpb24vbGF5b3V0LWRpcmVjdGlvbi9sYXlvdXQtZGlyZWN0aW9uLm1kKSBpcyBSVEw6IGBlbmRgIHNldHMgdGhlIHdpZHRoIChgd2lkdGhgKSBhbmQgY29sb3IgKGBjb2xvcmApIG9mIHRoZSBsZWZ0LWhhbmQgYm9yZGVyLiB8XG4gICAgICogfCBgdG9wYCAgICB8IGB3aWR0aGA8YnI+YGNvbG9yYCB8IGB3aWR0aGA6IE51bWJlcjxicj5gY29sb3JgOiBTdHJpbmcgfCBTZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgdG9wIGJvcmRlci4gfFxuICAgICAqIHwgYGJvdHRvbWAgfCBgd2lkdGhgPGJyPmBjb2xvcmAgfCBgd2lkdGhgOiBOdW1iZXI8YnI+YGNvbG9yYDogU3RyaW5nIHwgU2V0cyB0aGUgd2lkdGggKGB3aWR0aGApIGFuZCBjb2xvciAoYGNvbG9yYCkgb2YgdGhlIGJvdHRvbSBib3JkZXIuIHxcbiAgICAgKlxuICAgICAqIFRvIGVuYWJsZSB0aGUgW2BDdXN0b21Cb3JkZXJzYF0oQC9hcGkvY3VzdG9tQm9yZGVycy5tZCkgcGx1Z2luXG4gICAgICogYW5kIGFkZCBhIHByZWRlZmluZWQgYm9yZGVyIGFyb3VuZCBhIHJhbmdlIG9mIGNlbGxzLFxuICAgICAqIHNldCB0aGUgYGN1c3RvbUJvcmRlcnNgIG9wdGlvbiB0byBhbiBhcnJheSBvZiBvYmplY3RzLlxuICAgICAqIEVhY2ggb2JqZWN0IHJlcHJlc2VudHMgYSBib3JkZXIgY29uZmlndXJhdGlvbiBmb3IgYSBzaW5nbGUgcmFuZ2Ugb2YgY2VsbHMsIGFuZCBoYXMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogfCBQcm9wZXJ0eSB8IFN1Yi1wcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHJhbmdlYCAgfCBgZnJvbWAge2Byb3dgLCBgY29sYH08YnI+YHRvYCB7YHJvd2AsIGBjb2xgfSB8IGBmcm9tYDogT2JqZWN0PGJyPmB0b2A6IE9iamVjdDxicj5gcm93YDogTnVtYmVyPGJyPmBjb2xgOiBOdW1iZXIgfCBJZiB0aGUgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgTFRSIChkZWZhdWx0KTo8YnI+LSBgZnJvbWAgc2VsZWN0cyB0aGUgcmFuZ2UncyB0b3AtbGVmdCBjb3JuZXIuPGJyPi0gYHRvYCBzZWxlY3RzIHRoZSByYW5nZSdzIGJvdHRvbS1yaWdodCBjb3JuZXIuPGJyPjxicj5JZiB0aGUgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgUlRMOiA8YnI+LSBgZnJvbWAgc2VsZWN0cyB0aGUgcmFuZ2UncyB0b3AtcmlnaHQgY29ybmVyLjxicj4tIGB0b2Agc2VsZWN0cyB0aGUgcmFuZ2UncyBib3R0b20tbGVmdCBjb3JuZXIuIHxcbiAgICAgKiB8IGBzdGFydGAgIHwgYHdpZHRoYDxicj5gY29sb3JgIHwgYHdpZHRoYDogTnVtYmVyPGJyPmBjb2xvcmA6IFN0cmluZyB8IElmIHRoZSBbbGF5b3V0IGRpcmVjdGlvbl0oQC9ndWlkZXMvaW50ZXJuYXRpb25hbGl6YXRpb24vbGF5b3V0LWRpcmVjdGlvbi9sYXlvdXQtZGlyZWN0aW9uLm1kKSBpcyBMVFIgKGRlZmF1bHQpOiBgc3RhcnRgIHNldHMgdGhlIHdpZHRoIChgd2lkdGhgKSBhbmQgY29sb3IgKGBjb2xvcmApIG9mIHRoZSBsZWZ0LWhhbmQgYm9yZGVyLjxicj48YnI+SWYgdGhlIFtsYXlvdXQgZGlyZWN0aW9uXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sYXlvdXQtZGlyZWN0aW9uL2xheW91dC1kaXJlY3Rpb24ubWQpIGlzIFJUTDogYHN0YXJ0YCBzZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgcmlnaHQtaGFuZCBib3JkZXIuIHxcbiAgICAgKiB8IGBlbmRgICAgIHwgYHdpZHRoYDxicj5gY29sb3JgIHwgYHdpZHRoYDogTnVtYmVyPGJyPmBjb2xvcmA6IFN0cmluZyB8IElmIHRoZSBbbGF5b3V0IGRpcmVjdGlvbl0oQC9ndWlkZXMvaW50ZXJuYXRpb25hbGl6YXRpb24vbGF5b3V0LWRpcmVjdGlvbi9sYXlvdXQtZGlyZWN0aW9uLm1kKSBpcyBMVFIgKGRlZmF1bHQpOiBgZW5kYCBzZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgcmlnaHQtaGFuZCBib3JkZXIuPGJyPjxicj5JZiB0aGUgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgUlRMOiBgZW5kYCBzZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgbGVmdC1oYW5kIGJvcmRlci4gfFxuICAgICAqIHwgYHRvcGAgICAgfCBgd2lkdGhgPGJyPmBjb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB3aWR0aGA6IE51bWJlcjxicj5gY29sb3JgOiBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgdG9wIGJvcmRlci4gfFxuICAgICAqIHwgYGJvdHRvbWAgfCBgd2lkdGhgPGJyPmBjb2xvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB3aWR0aGA6IE51bWJlcjxicj5gY29sb3JgOiBTdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZXRzIHRoZSB3aWR0aCAoYHdpZHRoYCkgYW5kIGNvbG9yIChgY29sb3JgKSBvZiB0aGUgYm90dG9tIGJvcmRlci4gfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0Zvcm1hdHRpbmcgY2VsbHM6IEN1c3RvbSBjZWxsIGJvcmRlcnNdKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvZm9ybWF0dGluZy1jZWxscy9mb3JtYXR0aW5nLWNlbGxzLm1kI2N1c3RvbS1jZWxsLWJvcmRlcnMpXG4gICAgICogLSBbQ29udGV4dCBtZW51XShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZClcbiAgICAgKiAtIFtQbHVnaW5zOiBgQ3VzdG9tQm9yZGVyc2BdKEAvYXBpL2N1c3RvbUJvcmRlcnMubWQpXG4gICAgICogLSBbTGF5b3V0IGRpcmVjdGlvbl0oQC9ndWlkZXMvaW50ZXJuYXRpb25hbGl6YXRpb24vbGF5b3V0LWRpcmVjdGlvbi9sYXlvdXQtZGlyZWN0aW9uLm1kKVxuICAgICAqIC0gW2BsYXlvdXREaXJlY3Rpb25gXSgjbGF5b3V0RGlyZWN0aW9uKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58b2JqZWN0W119XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ3VzdG9tQm9yZGVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYEN1c3RvbUJvcmRlcnNgIHBsdWdpblxuICAgICAqIGN1c3RvbUJvcmRlcnM6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBDdXN0b21Cb3JkZXJzYCBwbHVnaW5cbiAgICAgKiAvLyBhbmQgYWRkIGEgcHJlZGVmaW5lZCBib3JkZXIgZm9yIGEgcGFydGljdWxhciBjZWxsXG4gICAgICogY3VzdG9tQm9yZGVyczogW1xuICAgICAqICAgLy8gYWRkIGFuIG9iamVjdCB3aXRoIGEgYm9yZGVyIGNvbmZpZ3VyYXRpb24gZm9yIG9uZSBjZWxsXG4gICAgICogICB7XG4gICAgICogICAgIC8vIHNldCB0aGUgY2VsbCdzIHJvdyBjb29yZGluYXRlXG4gICAgICogICAgIHJvdzogMixcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBjZWxsJ3MgY29sdW1uIGNvb3JkaW5hdGVcbiAgICAgKiAgICAgY29sOiAyLFxuICAgICAqICAgICAvLyBzZXQgdGhlIGxlZnQvcmlnaHQgYm9yZGVyJ3Mgd2lkdGggYW5kIGNvbG9yXG4gICAgICogICAgIHN0YXJ0OiB7XG4gICAgICogICAgICAgd2lkdGg6IDIsXG4gICAgICogICAgICAgY29sb3I6ICdyZWQnXG4gICAgICogICAgIH0sXG4gICAgICogICAgIC8vIHNldCB0aGUgcmlnaHQvbGVmdCBib3JkZXIncyB3aWR0aCBhbmQgY29sb3JcbiAgICAgKiAgICAgZW5kOiB7XG4gICAgICogICAgICAgd2lkdGg6IDEsXG4gICAgICogICAgICAgY29sb3I6ICdncmVlbidcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgLy8gc2V0IHRoZSB0b3AgYm9yZGVyJ3Mgd2lkdGggYW5kIGNvbG9yXG4gICAgICogICAgIHRvcDogJycsXG4gICAgICogICAgIC8vIHNldCB0aGUgYm90dG9tIGJvcmRlcidzIHdpZHRoIGFuZCBjb2xvclxuICAgICAqICAgICBib3R0b206ICcnXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYEN1c3RvbUJvcmRlcnNgIHBsdWdpblxuICAgICAqIC8vIGFuZCBhZGQgYSBwcmVkZWZpbmVkIGJvcmRlciBmb3IgYSByYW5nZSBvZiBjZWxsc1xuICAgICAqIGN1c3RvbUJvcmRlcnM6IFtcbiAgICAgKiAgIC8vIGFkZCBhbiBvYmplY3Qgd2l0aCBhIGJvcmRlciBjb25maWd1cmF0aW9uIGZvciBvbmUgcmFuZ2Ugb2YgY2VsbHNcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2VsZWN0IGEgcmFuZ2Ugb2YgY2VsbHNcbiAgICAgKiAgICAgcmFuZ2U6IHtcbiAgICAgKiAgICAgICAvLyBzZXQgdGhlIHJhbmdlJ3MgdG9wLWxlZnQgY29ybmVyXG4gICAgICogICAgICAgZnJvbToge1xuICAgICAqICAgICAgICAgcm93OiAxLFxuICAgICAqICAgICAgICAgY29sOiAxXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICAvLyBzZXQgdGhlIHJhbmdlJ3MgYm90dG9tLXJpZ2h0IGNvcm5lclxuICAgICAqICAgICAgIHRvOiB7XG4gICAgICogICAgICAgICByb3c6IDMsXG4gICAgICogICAgICAgICBjb2w6IDRcbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH0sXG4gICAgICogICAgIC8vIHNldCB0aGUgbGVmdC9yaWdodCBib3JkZXIncyB3aWR0aCBhbmQgY29sb3JcbiAgICAgKiAgICAgc3RhcnQ6IHtcbiAgICAgKiAgICAgICB3aWR0aDogMixcbiAgICAgKiAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgLy8gc2V0IHRoZSByaWdodC9sZWZ0IGJvcmRlcidzIHdpZHRoIGFuZCBjb2xvclxuICAgICAqICAgICBlbmQ6IHt9LFxuICAgICAqICAgICAvLyBzZXQgdGhlIHRvcCBib3JkZXIncyB3aWR0aCBhbmQgY29sb3JcbiAgICAgKiAgICAgdG9wOiB7fSxcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBib3R0b20gYm9yZGVyJ3Mgd2lkdGggYW5kIGNvbG9yXG4gICAgICogICAgIGJvdHRvbToge31cbiAgICAgKiAgIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGN1c3RvbUJvcmRlcnM6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgZGF0YWAgb3B0aW9uIHNldHMgdGhlIGluaXRpYWwgW2RhdGFdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kKSBvZiB5b3VyIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEhhbmRzb250YWJsZSdzIGRhdGEgaXMgYm91bmQgdG8geW91ciBzb3VyY2UgZGF0YSBieSByZWZlcmVuY2UgKGkuZS4gd2hlbiB5b3UgZWRpdCBIYW5kc29udGFibGUncyBkYXRhLCB5b3VyIHNvdXJjZSBkYXRhIGFsdGVycyBhcyB3ZWxsKS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZGF0YWAgb3B0aW9uOlxuICAgICAqIC0gRWl0aGVyIHRvIGFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cykuXG4gICAgICogLSBPciB0byBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cykuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgZG9uJ3Qgc2V0IHRoZSBgZGF0YWAgb3B0aW9uIChvciBzZXQgaXQgdG8gYG51bGxgKSwgSGFuZHNvbnRhYmxlIHJlbmRlcnMgYXMgYW4gZW1wdHkgNXg1IGdyaWQgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtCaW5kaW5nIHRvIGRhdGFdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kKVxuICAgICAqIC0gW2BkYXRhU2NoZW1hYF0oI2RhdGFTY2hlbWEpXG4gICAgICogLSBbYHN0YXJ0Um93c2BdKCNzdGFydFJvd3MpXG4gICAgICogLSBbYHN0YXJ0Q29sc2BdKCNzdGFydENvbHMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7QXJyYXlbXXxvYmplY3RbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFzIGFuIGFycmF5IG9mIGFycmF5c1xuICAgICAqIGRhdGE6IFtcbiAgICAgKiAgIFsnQScsICdCJywgJ0MnXSxcbiAgICAgKiAgIFsnRCcsICdFJywgJ0YnXSxcbiAgICAgKiAgIFsnRycsICdIJywgJ0onXVxuICAgICAqIF1cbiAgICAgKlxuICAgICAqIC8vIGFzIGFuIGFycmF5IG9mIG9iamVjdHNcbiAgICAgKiBkYXRhOiBbXG4gICAgICogICB7aWQ6IDEsIG5hbWU6ICdUZWQgUmlnaHQnfSxcbiAgICAgKiAgIHtpZDogMiwgbmFtZTogJ0ZyYW5rIEhvbmVzdCd9LFxuICAgICAqICAge2lkOiAzLCBuYW1lOiAnSm9hbiBXZWxsJ30sXG4gICAgICogICB7aWQ6IDQsIG5hbWU6ICdHYWlsIFBvbGl0ZSd9LFxuICAgICAqICAge2lkOiA1LCBuYW1lOiAnTWljaGFlbCBGYWlyJ30sXG4gICAgICogXVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBJZiBgdHJ1ZWAsIEhhbmRzb250YWJsZSB3aWxsIGludGVycHJldCB0aGUgZG90cyBpbiB0aGUgY29sdW1ucyBtYXBwaW5nIGFzIGEgbmVzdGVkIG9iamVjdCBwYXRoLiBJZiB5b3VyIGRhdGFzZXQgY29udGFpbnNcbiAgICAgKiB0aGUgZG90cyBpbiB0aGUgb2JqZWN0IGtleXMgYW5kIHlvdSBkb24ndCB3YW50IEhhbmRzb250YWJsZSB0byBpbnRlcnByZXQgdGhlbSBhcyBhIG5lc3RlZCBvYmplY3QgcGF0aCwgc2V0IHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBUaGUgb3B0aW9uIG9ubHkgd29ya3Mgd2hlbiBkZWZpbmVkIGluIHRoZSBnbG9iYWwgdGFibGUgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAc2luY2UgMTQuNC4wXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gQWxsIGRvdHMgYXJlIGludGVycHJldGVkIGFzIG5lc3RlZCBvYmplY3QgcGF0aHNcbiAgICAgKiBkYXRhRG90Tm90YXRpb246IHRydWUsXG4gICAgICogZGF0YTogW1xuICAgICAqICAgeyBpZDogMSwgbmFtZTogeyBmaXJzdDogJ1RlZCcsIGxhc3Q6ICdSaWdodCcgfSwgdXNlcjogeyBhZGRyZXNzOiAnMTIzNCBBbnkgU3RyZWV0JyB9IH0sXG4gICAgICogXSxcbiAgICAgKiBjb2x1bW5zPXtbXG4gICAgICogICB7IGRhdGE6ICduYW1lLmZpcnN0JyB9LFxuICAgICAqICAgeyBkYXRhOiAndXNlci5hZGRyZXNzJyB9LFxuICAgICAqIF19LFxuICAgICAqIGBgYFxuICAgICAqIGBgYGpzXG4gICAgICogLy8gQWxsIGRvdHMgYXJlIGludGVycHJldGVkIGFzIHNpbXBsZSBvYmplY3Qga2V5c1xuICAgICAqIGRhdGFEb3ROb3RhdGlvbjogZmFsc2UsXG4gICAgICogZGF0YTogW1xuICAgICAqICAgeyBpZDogMSwgJ25hbWUuZmlyc3QnOiAnVGVkJywgJ3VzZXIuYWRkcmVzcyc6ICcxMjM0IEFueSBTdHJlZXQnIH0sXG4gICAgICogXSxcbiAgICAgKiBjb2x1bW5zPXtbXG4gICAgICogICB7IGRhdGE6ICduYW1lLmZpcnN0JyB9LFxuICAgICAqICAgeyBkYXRhOiAndXNlci5hZGRyZXNzJyB9LFxuICAgICAqIF19LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRhdGFEb3ROb3RhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBXaGVuIHRoZSBbYGRhdGFgXSgjZGF0YSkgb3B0aW9uIGlzIHNldCB0byBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cylcbiAgICAgKiAob3IgaXMgZW1wdHkpLCB0aGUgYGRhdGFTY2hlbWFgIG9wdGlvbiBkZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgbmV3IHJvd3MuXG4gICAgICpcbiAgICAgKiBVc2luZyB0aGUgYGRhdGFTY2hlbWFgIG9wdGlvbiwgeW91IGNhbiBzdGFydCBvdXQgd2l0aCBhbiBlbXB0eSBncmlkLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBkYXRhU2NoZW1hYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICogLSBBbiBvYmplY3RcbiAgICAgKiAtIEEgZnVuY3Rpb25cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtCaW5kaW5nIHRvIGRhdGE6IEFycmF5IG9mIG9iamVjdHMgd2l0aCBjdXN0b20gZGF0YSBzY2hlbWFdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLW9iamVjdHMtd2l0aC1jdXN0b20tZGF0YS1zY2hlbWEpXG4gICAgICogLSBbQmluZGluZyB0byBkYXRhOiBGdW5jdGlvbiBkYXRhIHNvdXJjZSBhbmQgc2NoZW1hXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNmdW5jdGlvbi1kYXRhLXNvdXJjZS1hbmQtc2NoZW1hKVxuICAgICAqIC0gW2BkYXRhYF0oI2RhdGEpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7b2JqZWN0fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gd2l0aCBgZGF0YVNjaGVtYWAsIHlvdSBjYW4gc3RhcnQgd2l0aCBhbiBlbXB0eSBncmlkXG4gICAgICogZGF0YTogbnVsbCxcbiAgICAgKiBkYXRhU2NoZW1hOiB7aWQ6IG51bGwsIG5hbWU6IHtmaXJzdDogbnVsbCwgbGFzdDogbnVsbH0sIGFkZHJlc3M6IG51bGx9LFxuICAgICAqIGNvbEhlYWRlcnM6IFsnSUQnLCAnRmlyc3QgTmFtZScsICdMYXN0IE5hbWUnLCAnQWRkcmVzcyddLFxuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtkYXRhOiAnaWQnfSxcbiAgICAgKiAgIHtkYXRhOiAnbmFtZS5maXJzdCd9LFxuICAgICAqICAge2RhdGE6ICduYW1lLmxhc3QnfSxcbiAgICAgKiAgIHtkYXRhOiAnYWRkcmVzcyd9XG4gICAgICogXSxcbiAgICAgKiBzdGFydFJvd3M6IDUsXG4gICAgICogbWluU3BhcmVSb3dzOiAxXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZGF0YVNjaGVtYTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgZGF0ZUZvcm1hdGAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIGRhdGUgZm9ybWF0IGFjY2VwdGVkIGJ5IFtgZGF0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvZGF0ZS1jZWxsLXR5cGUvZGF0ZS1jZWxsLXR5cGUubWQpIGNlbGxzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBkYXRlRm9ybWF0YCBvcHRpb24gdG8gYSBzdHJpbmcgd2l0aCBhIHByb3BlciBkYXRlIGZvcm1hdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXM6IGAnREQvTU0vWVlZWSdgLlxuICAgICAqXG4gICAgICogVG8gYXV0b21hdGljYWxseSBjb3JyZWN0IGRhdGVzIHdob3NlIGZvcm1hdCBkb2Vzbid0IG1hdGNoIHRoZSBgZGF0ZUZvcm1hdGAgc2V0dGluZywgdXNlIHRoZSBbYGNvcnJlY3RGb3JtYXRgXSgjY29ycmVjdEZvcm1hdCkgb3B0aW9uLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0RhdGUgY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2RhdGUtY2VsbC10eXBlL2RhdGUtY2VsbC10eXBlLm1kKVxuICAgICAqIC0gW2Bjb3JyZWN0Rm9ybWF0YF0oI2NvcnJlY3RGb3JtYXQpXG4gICAgICogLSBbYGRlZmF1bHREYXRlYF0oI2RlZmF1bHREYXRlKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnREQvTU0vWVlZWSdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgIC8vIHNldCB0aGUgYHR5cGVgIG9mIGVhY2ggY2VsbCBpbiB0aGlzIGNvbHVtbiB0byBgZGF0ZWBcbiAgICAgKiAgIHR5cGU6ICdkYXRlJyxcbiAgICAgKiAgIC8vIGZvciBldmVyeSBgZGF0ZWAgY2VsbCBvZiB0aGlzIGNvbHVtbiwgc2V0IHRoZSBkYXRlIGZvcm1hdCB0byBgWVlZWS1NTS1ERGBcbiAgICAgKiAgIGRhdGVGb3JtYXQ6ICdZWVlZLU1NLUREJyxcbiAgICAgKiAgIH0sXG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkYXRlRm9ybWF0OiAnREQvTU0vWVlZWScsXG4gICAgLyoqXG4gICAgICogVGhlIGB0aW1lRm9ybWF0YCBvcHRpb24gY29uZmlndXJlcyB0aGUgdGltZSBmb3JtYXQgYWNjZXB0ZWQgYnkgW2B0aW1lYF0oQC9ndWlkZXMvY2VsbC10eXBlcy90aW1lLWNlbGwtdHlwZS90aW1lLWNlbGwtdHlwZS5tZCkgY2VsbHMuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHRpbWVGb3JtYXRgIG9wdGlvbiB0byBhIHN0cmluZyB3aXRoIGEgcHJvcGVyIHRpbWUgZm9ybWF0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpczogYCdoOm1tOnNzIGEnYC5cbiAgICAgKlxuICAgICAqIFRvIGF1dG9tYXRpY2FsbHkgY29ycmVjdCB0aW1lcyB3aG9zZSBmb3JtYXQgZG9lc24ndCBtYXRjaCB0aGUgYHRpbWVGb3JtYXRgIHNldHRpbmcsIHVzZSB0aGUgW2Bjb3JyZWN0Rm9ybWF0YF0oI2NvcnJlY3RGb3JtYXQpIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtUaW1lIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy90aW1lLWNlbGwtdHlwZS90aW1lLWNlbGwtdHlwZS5tZClcbiAgICAgKiAtIFtgY29ycmVjdEZvcm1hdGBdKCNjb3JyZWN0Rm9ybWF0KVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnaDptbTpzcyBhJ1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGB0aW1lYFxuICAgICAqICAgdHlwZTogJ3RpbWUnLFxuICAgICAqICAgLy8gZm9yIGV2ZXJ5IGB0aW1lYCBjZWxsIG9mIHRoaXMgY29sdW1uLCBzZXQgdGhlIHRpbWUgZm9ybWF0IHRvIGBoOm1tOnNzIGFgXG4gICAgICogICB0aW1lRm9ybWF0OiAnaDptbTpzcyBhJyxcbiAgICAgKiAgIH0sXG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0aW1lRm9ybWF0OiAnaDptbTpzcyBhJyxcbiAgICAvKipcbiAgICAgKiBUaGUgYGRhdGVQaWNrZXJDb25maWdgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBgZGF0ZWAgW2NlbGwgZWRpdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLWVkaXRvci9jZWxsLWVkaXRvci5tZCkncyBkYXRlIHBpY2tlciwgd2hpY2ggdXNlcyBhbiBleHRlcm5hbCBkZXBlbmRlbmN5OiBbUGlrYWRheV0oaHR0cHM6Ly9naXRodWIuY29tL1Bpa2FkYXkvUGlrYWRheS90cmVlLzEuOC4yKS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZGF0ZVBpY2tlckNvbmZpZ2Agb3B0aW9uIHRvIGFuIG9iamVjdCB3aXRoIGFueSBvZiB0aGUgYXZhaWxhYmxlIFtQaWthZGF5IG9wdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXkvdHJlZS8xLjguMiNjb25maWd1cmF0aW9uKSxcbiAgICAgKiBleGNlcHQgZm9yIHRoZSBmb2xsb3dpbmcsIHdoaWNoIGFyZSBhbHdheXMgb3ZlcndyaXR0ZW4gYnkgdGhlIGBkYXRlYCBbY2VsbCBlZGl0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKTpcbiAgICAgKiAtIGBib3VuZGBcbiAgICAgKiAtIGBjb250YWluZXJgXG4gICAgICogLSBgZmllbGRgXG4gICAgICogLSBgdHJpZ2dlcmBcbiAgICAgKlxuICAgICAqIElmIHRoZSBgZGF0ZVBpY2tlckNvbmZpZ2Agb3B0aW9uIGlzIG5vdCBkZWZpbmVkLCB0aGUgYGRhdGVgIFtjZWxsIGVkaXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC1lZGl0b3IvY2VsbC1lZGl0b3IubWQpIG92ZXJ3cml0ZXMgdGhlIGZvbGxvd2luZyBbUGlrYWRheSBvcHRpb25zXShodHRwczovL2dpdGh1Yi5jb20vUGlrYWRheS9QaWthZGF5L3RyZWUvMS44LjIjY29uZmlndXJhdGlvbikgYXMgd2VsbDpcbiAgICAgKlxuICAgICAqIHwgUGlrYWRheSBvcHRpb24gICAgICAgfCBIYW5kc29udGFibGUncyBzZXR0aW5nIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZm9ybWF0YCAgICAgICAgICAgICB8IGAnREQvTU0vWVlZWSdgICAgICAgICAgfFxuICAgICAqIHwgYHJlcG9zaXRpb25gICAgICAgICAgfCBgZmFsc2VgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgZWRpdG9yYF0oI2VkaXRvcilcbiAgICAgKiAtIFtgZGF0ZUZvcm1hdGBdKCNkYXRlRm9ybWF0KVxuICAgICAqIC0gW0NlbGwgZWRpdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLWVkaXRvci9jZWxsLWVkaXRvci5tZClcbiAgICAgKiAtIFtBbGwgUGlrYWRheSBvcHRpb25zICYjODU5NDtdKGh0dHBzOi8vZ2l0aHViLmNvbS9QaWthZGF5L1Bpa2FkYXkvdHJlZS8xLjguMiNjb25maWd1cmF0aW9uKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqL1xuICAgIGRhdGVQaWNrZXJDb25maWc6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGRlZmF1bHREYXRlYCBvcHRpb24gY29uZmlndXJlcyB0aGUgZGF0ZSBkaXNwbGF5ZWRcbiAgICAgKiBpbiBlbXB0eSBbYGRhdGVgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2RhdGUtY2VsbC10eXBlL2RhdGUtY2VsbC10eXBlLm1kKSBjZWxscy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZGVmYXVsdERhdGVgIG9wdGlvbiB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtEYXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9kYXRlLWNlbGwtdHlwZS9kYXRlLWNlbGwtdHlwZS5tZClcbiAgICAgKiAtIFtgZGF0ZUZvcm1hdGBdKCNkYXRlRm9ybWF0KVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBkYXRlYFxuICAgICAqICAgICB0eXBlOiAnZGF0ZScsXG4gICAgICogICAgIC8vIGluIGV2ZXJ5IGVtcHR5IGBkYXRlYCBjZWxsIG9mIHRoaXMgY29sdW1uLCBkaXNwbGF5IGAyMDE1LTAyLTAyYFxuICAgICAqICAgICBkZWZhdWx0RGF0ZTogJzIwMTUtMDItMDInXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWZhdWx0RGF0ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgZGlzYWJsZVZpc3VhbFNlbGVjdGlvbmAgb3B0aW9uIGNvbmZpZ3VyZXMgaG93XG4gICAgICogW3NlbGVjdGlvbl0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLm1kKSBpcyBzaG93bi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZGlzYWJsZVZpc3VhbFNlbGVjdGlvbmAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IC0gU2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb248YnI+LSBTaG93IHJhbmdlIHNlbGVjdGlvbjxicj4tIFNob3cgaGVhZGVyIHNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgdHJ1ZWAgICAgICAgICAgICB8IC0gRG9uJ3Qgc2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb248YnI+LSBEb24ndCBzaG93IHJhbmdlIHNlbGVjdGlvbjxicj4tIERvbid0IHNob3cgaGVhZGVyIHNlbGVjdGlvbiB8XG4gICAgICogfCBgJ2N1cnJlbnQnYCAgICAgICB8IC0gRG9uJ3Qgc2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb248YnI+LSBTaG93IHJhbmdlIHNlbGVjdGlvbjxicj4tIFNob3cgaGVhZGVyIHNlbGVjdGlvbiAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2FyZWEnYCAgICAgICAgICB8IC0gU2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb248YnI+LSBEb24ndCBzaG93IHJhbmdlIHNlbGVjdGlvbjxicj4tIFNob3cgaGVhZGVyIHNlbGVjdGlvbiAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2hlYWRlcidgICAgICAgICB8IC0gU2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb248YnI+LSBTaG93IHJhbmdlIHNlbGVjdGlvbjxicj4tIERvbid0IHNob3cgaGVhZGVyIHNlbGVjdGlvbiAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSAgICAgICAgICB8IEEgY29tYmluYXRpb24gb2YgYCdjdXJyZW50J2AsIGAnYXJlYSdgLCBhbmQvb3IgYCdoZWFkZXInYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbU2VsZWN0aW9uXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL3NlbGVjdGlvbi9zZWxlY3Rpb24ubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxzdHJpbmd8c3RyaW5nW119XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGRvbid0IHNob3cgc2luZ2xlLWNlbGwgc2VsZWN0aW9uXG4gICAgICogLy8gZG9uJ3Qgc2hvdyByYW5nZSBzZWxlY3Rpb25cbiAgICAgKiAvLyBkb24ndCBzaG93IGhlYWRlciBzZWxlY3Rpb25cbiAgICAgKiBkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gZG9uJ3Qgc2hvdyBzaW5nbGUtY2VsbCBzZWxlY3Rpb25cbiAgICAgKiAvLyBzaG93IHJhbmdlIHNlbGVjdGlvblxuICAgICAqIC8vIHNob3cgaGVhZGVyIHNlbGVjdGlvblxuICAgICAqIGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ICdjdXJyZW50JyxcbiAgICAgKlxuICAgICAqIC8vIGRvbid0IHNob3cgc2luZ2xlLWNlbGwgc2VsZWN0aW9uXG4gICAgICogLy8gZG9uJ3Qgc2hvdyByYW5nZSBzZWxlY3Rpb25cbiAgICAgKiAvLyBzaG93IGhlYWRlciBzZWxlY3Rpb25cbiAgICAgKiBkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiBbJ2N1cnJlbnQnLCAnYXJlYSddLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRpc2FibGVWaXN1YWxTZWxlY3Rpb246IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgZHJhZ1RvU2Nyb2xsYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BEcmFnVG9TY3JvbGxgXShAL2FwaS9kcmFnVG9TY3JvbGwubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZHJhZ1RvU2Nyb2xsYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgKGRlZmF1bHQpIHwgV2hlbiBzZWxlY3Rpb24gcmVhY2hlcyB0aGUgZWRnZSBvZiB0aGUgZ3JpZCdzIHZpZXdwb3J0LCBzY3JvbGwgdGhlIHZpZXdwb3J0IHxcbiAgICAgKiB8IGBmYWxzZWAgICAgICAgICAgfCBEb24ndCBzY3JvbGwgdGhlIHZpZXdwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1BsdWdpbnM6IGBEcmFnVG9TY3JvbGxgXShAL2FwaS9kcmFnVG9TY3JvbGwubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IERyYWdUb1Njcm9sbFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHdoZW4gc2VsZWN0aW9uIHJlYWNoZXMgdGhlIGVkZ2Ugb2YgdGhlIGdyaWQncyB2aWV3cG9ydCwgc2Nyb2xsIHRoZSB2aWV3cG9ydFxuICAgICAqIGRyYWdUb1Njcm9sbDogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcmFnVG9TY3JvbGw6IHRydWUsXG4gICAgLyoqXG4gICAgICogVGhlIGBkcm9wZG93bk1lbnVgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBbYERyb3Bkb3duTWVudWBdKEAvYXBpL2Ryb3Bkb3duTWVudS5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBkcm9wZG93bk1lbnVgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAgIHwgRGlzYWJsZSB0aGUgW2BEcm9wZG93bk1lbnVgXShAL2FwaS9kcm9wZG93bk1lbnUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgIHwgLSBFbmFibGUgdGhlIFtgRHJvcGRvd25NZW51YF0oQC9hcGkvZHJvcGRvd25NZW51Lm1kKSBwbHVnaW48YnI+LSBVc2UgdGhlIFtkZWZhdWx0IGNvbnRleHQgbWVudSBvcHRpb25zXShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCNjb250ZXh0LW1lbnUtd2l0aC1kZWZhdWx0LW9wdGlvbnMpICAgIHxcbiAgICAgKiB8IEFuIGFycmF5ICB8IC0gRW5hYmxlIHRoZSBbYERyb3Bkb3duTWVudWBdKEAvYXBpL2Ryb3Bkb3duTWVudS5tZCkgcGx1Z2luPGJyPi0gTW9kaWZ5IFtpbmRpdmlkdWFsIGNvbnRleHQgbWVudSBvcHRpb25zXShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCNjb250ZXh0LW1lbnUtd2l0aC1zcGVjaWZpYy1vcHRpb25zKSB8XG4gICAgICogfCBBbiBvYmplY3QgfCAtIEVuYWJsZSB0aGUgW2BEcm9wZG93bk1lbnVgXShAL2FwaS9kcm9wZG93bk1lbnUubWQpIHBsdWdpbjxicj4tIEFwcGx5IGEgY3VzdG9tIGRyb3Bkb3duIG1lbnUgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29udGV4dCBtZW51XShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZClcbiAgICAgKiAtIFtQbHVnaW5zOiBgRHJvcGRvd25NZW51YF0oQC9hcGkvZHJvcGRvd25NZW51Lm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58b2JqZWN0fHN0cmluZ1tdfVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBEcm9wZG93bk1lbnVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBEcm9wZG93bk1lbnVgIHBsdWdpblxuICAgICAqIC8vIHVzZSB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgb3B0aW9uc1xuICAgICAqIGRyb3Bkb3duTWVudTogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYERyb3Bkb3duTWVudWAgcGx1Z2luXG4gICAgICogLy8gYW5kIG1vZGlmeSBpbmRpdmlkdWFsIGNvbnRleHQgbWVudSBvcHRpb25zXG4gICAgICogZHJvcGRvd25NZW51OiBbJy0tLS0tLS0tLScsICd1bmRvJywgJ3JlZG8nXSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYERyb3Bkb3duTWVudWAgcGx1Z2luXG4gICAgICogLy8gYW5kIGFwcGx5IGEgY3VzdG9tIGRyb3Bkb3duIG1lbnUgY29uZmlndXJhdGlvblxuICAgICAqIGRyb3Bkb3duTWVudToge1xuICAgICAqICAgaXRlbXM6IHtcbiAgICAgKiAgICAgJ29wdGlvbjEnOiB7XG4gICAgICogICAgICAgbmFtZTogJ09wdGlvbiAxJ1xuICAgICAqICAgICB9LFxuICAgICAqICAgICAnb3B0aW9uMic6IHtcbiAgICAgKiAgICAgICBuYW1lOiAnT3B0aW9uIDInLFxuICAgICAqICAgICAgIHN1Ym1lbnU6IHtcbiAgICAgKiAgICAgICAgIGl0ZW1zOiBbXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBrZXk6ICdvcHRpb24yOnN1Ym9wdGlvbjEnLFxuICAgICAqICAgICAgICAgICAgIG5hbWU6ICdTdWJvcHRpb24gMScsXG4gICAgICogICAgICAgICAgICAgY2FsbGJhY2soa2V5LCBvcHRpb25zKSB7XG4gICAgICogICAgICAgICAgICAgICAuLi5cbiAgICAgKiAgICAgICAgICAgICB9XG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIC4uLlxuICAgICAqICAgICAgICAgXVxuICAgICAqICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZHJvcGRvd25NZW51OiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBlZGl0b3JgIG9wdGlvbiBzZXRzIGEgW2NlbGwgZWRpdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLWVkaXRvci9jZWxsLWVkaXRvci5tZCkgZm9yIGEgY2VsbC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZWRpdG9yYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgW2NlbGwgZWRpdG9yIGFsaWFzZXNdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKTpcbiAgICAgKlxuICAgICAqIHwgQWxpYXMgICAgICAgICAgICAgICB8IENlbGwgZWRpdG9yIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIGN1c3RvbSBhbGlhcyAgICAgIHwgWW91ciBbY3VzdG9tIGNlbGwgZWRpdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLWVkaXRvci9jZWxsLWVkaXRvci5tZCkgZnVuY3Rpb24gfFxuICAgICAqIHwgYCdhdXRvY29tcGxldGUnYCAgICB8IGBBdXRvY29tcGxldGVFZGl0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnYmFzZSdgICAgICAgICAgICAgfCBgQmFzZUVkaXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2NoZWNrYm94J2AgICAgICAgIHwgYENoZWNrYm94RWRpdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdkYXRlJ2AgICAgICAgICAgICB8IGBEYXRlRWRpdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnZHJvcGRvd24nYCAgICAgICAgfCBgRHJvcGRvd25FZGl0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2hhbmRzb250YWJsZSdgICAgIHwgYEhhbmRzb250YWJsZUVkaXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdudW1lcmljJ2AgICAgICAgICB8IGBOdW1lcmljRWRpdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAncGFzc3dvcmQnYCAgICAgICAgfCBgUGFzc3dvcmRFZGl0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ3NlbGVjdCdgICAgICAgICAgIHwgYFNlbGVjdEVkaXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCd0ZXh0J2AgICAgICAgICAgICB8IGBUZXh0RWRpdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAndGltZSdgICAgICAgICAgICAgfCBgVGltZUVkaXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBUbyBkaXNhYmxlIGVkaXRpbmcgY2VsbHMgdGhyb3VnaCBjZWxsIGVkaXRvcnMsXG4gICAgICogc2V0IHRoZSBgZWRpdG9yYCBvcHRpb24gdG8gYGZhbHNlYC5cbiAgICAgKiBZb3UnbGwgc3RpbGwgYmUgYWJsZSB0byBjaGFuZ2UgY2VsbHMnIGNvbnRlbnQgdGhyb3VnaCBIYW5kc29udGFibGUncyBBUElcbiAgICAgKiBvciB0aHJvdWdoIHBsdWdpbnMgKGUuZy4gW2BDb3B5UGFzdGVgXShAL2FwaS9jb3B5UGFzdGUubWQpKSwgdGhvdWdoLlxuICAgICAqXG4gICAgICogVG8gc2V0IHRoZSBbYGVkaXRvcmBdKCNlZGl0b3IpLCBbYHJlbmRlcmVyYF0oI3JlbmRlcmVyKSwgYW5kIFtgdmFsaWRhdG9yYF0oI3ZhbGlkYXRvcilcbiAgICAgKiBvcHRpb25zIGFsbCBhdCBvbmNlLCB1c2UgdGhlIFtgdHlwZWBdKCN0eXBlKSBvcHRpb24uXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2VsbCBlZGl0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKVxuICAgICAqIC0gW0NlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9jZWxsLXR5cGUvY2VsbC10eXBlLm1kKVxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogQ2FzY2FkaW5nIGNvbmZpZ3VyYXRpb25dKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI2Nhc2NhZGluZy1jb25maWd1cmF0aW9uKVxuICAgICAqIC0gW2B0eXBlYF0oI3R5cGUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfEZ1bmN0aW9ufGJvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyB1c2UgdGhlIGBudW1lcmljYCBlZGl0b3IgZm9yIGVhY2ggY2VsbCBvZiB0aGUgZW50aXJlIGdyaWRcbiAgICAgKiBlZGl0b3I6ICdudW1lcmljJyxcbiAgICAgKlxuICAgICAqIC8vIGFwcGx5IHRoZSBgZWRpdG9yYCBvcHRpb24gdG8gaW5kaXZpZHVhbCBjb2x1bW5zXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyB1c2UgdGhlIGBhdXRvY29tcGxldGVgIGVkaXRvciBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIGVkaXRvcjogJ2F1dG9jb21wbGV0ZSdcbiAgICAgKiAgIH0sXG4gICAgICogICB7XG4gICAgICogICAgIC8vIGRpc2FibGUgZWRpdGluZyBjZWxscyB0aHJvdWdoIGNlbGwgZWRpdG9ycyBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIGVkaXRvcjogZmFsc2VcbiAgICAgKiAgIH1cbiAgICAgKiBdXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZWRpdG9yOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBlbnRlckJlZ2luc0VkaXRpbmdgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBhY3Rpb24gb2YgdGhlIDxrYmQ+KipFbnRlcioqPC9rYmQ+IGtleS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZW50ZXJCZWdpbnNFZGl0aW5nYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgKGRlZmF1bHQpIHwgLSBPbiBwcmVzc2luZyA8a2JkPioqRW50ZXIqKjwva2JkPiBvbmNlLCBlbnRlciB0aGUgZWRpdGluZyBtb2RlIG9mIHRoZSBhY3RpdmUgY2VsbDxicj4tIE9uIHByZXNzaW5nIDxrYmQ+KipFbnRlcioqPC9rYmQ+IHR3aWNlLCBtb3ZlIHRvIGFub3RoZXIgY2VsbCw8YnI+YXMgY29uZmlndXJlZCBieSB0aGUgW2BlbnRlck1vdmVzYF0oI2VudGVyTW92ZXMpIHNldHRpbmcgfFxuICAgICAqIHwgYGZhbHNlYCAgICAgICAgICB8IC0gT24gcHJlc3NpbmcgPGtiZD4qKkVudGVyKio8L2tiZD4gb25jZSwgbW92ZSB0byBhbm90aGVyIGNlbGwsPGJyPmFzIGNvbmZpZ3VyZWQgYnkgdGhlIFtgZW50ZXJNb3Zlc2BdKCNlbnRlck1vdmVzKSBzZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW2BlbnRlck1vdmVzYF0oI2VudGVyTW92ZXMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBwcmVzcyBFbnRlciBvbmNlIHRvIHN0YXJ0IGVkaXRpbmdcbiAgICAgKiAvLyBwcmVzcyBFbnRlciB0d2ljZSB0byBtb3ZlIHRvIGFub3RoZXIgY2VsbFxuICAgICAqIGVudGVyQmVnaW5zRWRpdGluZzogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIHByZXNzIEVudGVyIG9uY2UgdG8gbW92ZSB0byBhbm90aGVyIGNlbGxcbiAgICAgKiBlbnRlckJlZ2luc0VkaXRpbmc6IGZhbHNlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGVudGVyQmVnaW5zRWRpdGluZzogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYGVudGVyTW92ZXNgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBhY3Rpb24gb2YgdGhlIDxrYmQ+KipFbnRlcioqPC9rYmQ+IGtleS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBbYGVudGVyQmVnaW5zRWRpdGluZ2BdKCNlbnRlckJlZ2luc0VkaXRpbmcpIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLFxuICAgICAqIHRoZSBgZW50ZXJNb3Zlc2Agc2V0dGluZyBhcHBsaWVzIHRvIHRoZSAqKnNlY29uZCoqIHByZXNzaW5nIG9mIHRoZSA8a2JkPioqRW50ZXIqKjwva2JkPiBrZXkuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgW2BlbnRlckJlZ2luc0VkaXRpbmdgXSgjZW50ZXJCZWdpbnNFZGl0aW5nKSBvcHRpb24gaXMgc2V0IHRvIGBmYWxzZWAsXG4gICAgICogdGhlIGBlbnRlck1vdmVzYCBzZXR0aW5nIGFwcGxpZXMgdG8gdGhlICoqZmlyc3QqKiBwcmVzc2luZyBvZiB0aGUgPGtiZD4qKkVudGVyKio8L2tiZD4ga2V5LlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBlbnRlck1vdmVzYCBvcHRpb24gdG8gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzXG4gICAgICogKG9yIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHN1Y2ggYW4gb2JqZWN0KTpcbiAgICAgKlxuICAgICAqIHwgUHJvcGVydHkgfCBUeXBlICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBjb2xgICAgIHwgTnVtYmVyIHwgLSBPbiBwcmVzc2luZyA8a2JkPioqRW50ZXIqKjwva2JkPiwgbW92ZSBzZWxlY3Rpb24gYGNvbGAgY29sdW1ucyByaWdodDxicj4tIE9uIHByZXNzaW5nIDxrYmQ+KipTaGlmdCoqPC9rYmQ+KzxrYmQ+KipFbnRlcioqPC9rYmQ+LCBtb3ZlIHNlbGVjdGlvbiBgY29sYCBjb2x1bW5zIGxlZnQgfFxuICAgICAqIHwgYHJvd2AgICAgfCBOdW1iZXIgfCAtIE9uIHByZXNzaW5nIDxrYmQ+KipFbnRlcioqPC9rYmQ+LCBtb3ZlIHNlbGVjdGlvbiBgcm93YCByb3dzIGRvd248YnI+LSBPbiBwcmVzc2luZyA8a2JkPioqU2hpZnQqKjwva2JkPis8a2JkPioqRW50ZXIqKjwva2JkPiwgbW92ZSBzZWxlY3Rpb24gYHJvd2Agcm93cyB1cCAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbYGVudGVyQmVnaW5zRWRpdGluZ2BdKCNlbnRlckJlZ2luc0VkaXRpbmcpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7b2JqZWN0fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHtjb2w6IDAsIHJvdzogMX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIG9uIHByZXNzaW5nIEVudGVyLCBtb3ZlIHNlbGVjdGlvbiAxIGNvbHVtbiByaWdodCBhbmQgMSByb3cgZG93blxuICAgICAqIC8vIG9uIHByZXNzaW5nIFNoaWZ0K0VudGVyLCBtb3ZlIHNlbGVjdGlvbiAxIGNvbHVtbiBsZWZ0IGFuZCAxIHJvdyB1cFxuICAgICAqIGVudGVyTW92ZXM6IHtjb2w6IDEsIHJvdzogMX0sXG4gICAgICpcbiAgICAgKiAvLyB0aGUgc2FtZSBzZXR0aW5nLCBhcyBhIGZ1bmN0aW9uXG4gICAgICogLy8gYGV2ZW50YCBpcyBhIERPTSBFdmVudCBvYmplY3QgcmVjZWl2ZWQgb24gcHJlc3NpbmcgRW50ZXJcbiAgICAgKiAvLyB5b3UgY2FuIHVzZSBpdCB0byBjaGVjayB3aGV0aGVyIHRoZSB1c2VyIHByZXNzZWQgRW50ZXIgb3IgU2hpZnQrRW50ZXJcbiAgICAgKiBlbnRlck1vdmVzKGV2ZW50KSB7XG4gICAgICogICByZXR1cm4ge2NvbDogMSwgcm93OiAxfTtcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGVudGVyTW92ZXM6IHtcbiAgICAgIGNvbDogMCxcbiAgICAgIHJvdzogMVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGhlIGBmaWxsSGFuZGxlYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW0F1dG9maWxsXShAL2FwaS9hdXRvZmlsbC5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBmaWxsSGFuZGxlYCBvcHRpb24gdG8gb25lIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgICAgICAgICB8IC0gRW5hYmxlIGF1dG9maWxsIGluIGFsbCBkaXJlY3Rpb25zPGJyPi0gQWRkIHRoZSBmaWxsIGhhbmRsZSAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgICAgIHwgRGlzYWJsZSBhdXRvZmlsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCd2ZXJ0aWNhbCdgICAgfCAtIEVuYWJsZSB2ZXJ0aWNhbCBhdXRvZmlsbDxicj4tIEFkZCB0aGUgZmlsbCBoYW5kbGUgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2hvcml6b250YWwnYCB8IC0gRW5hYmxlIGhvcml6b250YWwgYXV0b2ZpbGw8YnI+LSBBZGQgdGhlIGZpbGwgaGFuZGxlICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIG9iamVjdCAgICAgIHwgLSBFbmFibGUgYXV0b2ZpbGw8YnI+LSBBZGQgdGhlIGZpbGwgaGFuZGxlPGJyPi0gQ29uZmlndXJlIGF1dG9maWxsIG9wdGlvbnMgfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYGZpbGxIYW5kbGVgIG9wdGlvbiB0byBhbiBvYmplY3QsIHlvdSBjYW4gY29uZmlndXJlIHRoZSBmb2xsb3dpbmcgYXV0b2ZpbGwgb3B0aW9uczpcbiAgICAgKlxuICAgICAqIHwgT3B0aW9uICAgICAgICAgIHwgUG9zc2libGUgc2V0dGluZ3MgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgYXV0b0luc2VydFJvd2AgfCBgdHJ1ZWAgKGRlZmF1bHQpIFxcfCBgZmFsc2VgICAgIHwgYHRydWVgOiBXaGVuIHlvdSByZWFjaCB0aGUgZ3JpZCdzIGJvdHRvbSwgYWRkIG5ldyByb3dzPGJyPmBmYWxzZWA6IFdoZW4geW91IHJlYWNoIHRoZSBncmlkJ3MgYm90dG9tLCBzdG9wIHxcbiAgICAgKiB8IGBkaXJlY3Rpb25gICAgICB8IGAndmVydGljYWwnYCBcXHwgYCdob3Jpem9udGFsJ2AgfCBgJ3ZlcnRpY2FsJ2A6IEVuYWJsZSB2ZXJ0aWNhbCBhdXRvZmlsbDxicj5gJ2hvcml6b250YWwnYDogRW5hYmxlIGhvcml6b250YWwgYXV0b2ZpbGwgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0F1dG9GaWxsIHZhbHVlc10oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9hdXRvZmlsbC12YWx1ZXMvYXV0b2ZpbGwtdmFsdWVzLm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58c3RyaW5nfG9iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgYXV0b2ZpbGwgaW4gYWxsIGRpcmVjdGlvbnNcbiAgICAgKiAvLyB3aXRoIGBhdXRvSW5zZXJ0Um93YCBlbmFibGVkXG4gICAgICogZmlsbEhhbmRsZTogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB2ZXJ0aWNhbCBhdXRvZmlsbFxuICAgICAqIC8vIHdpdGggYGF1dG9JbnNlcnRSb3dgIGVuYWJsZWRcbiAgICAgKiBmaWxsSGFuZGxlOiAndmVydGljYWwnLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIGhvcml6b250YWwgYXV0b2ZpbGxcbiAgICAgKiAvLyB3aXRoIGBhdXRvSW5zZXJ0Um93YCBlbmFibGVkXG4gICAgICogZmlsbEhhbmRsZTogJ2hvcml6b250YWwnLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIGF1dG9maWxsIGluIGFsbCBkaXJlY3Rpb25zXG4gICAgICogLy8gd2l0aCBgYXV0b0luc2VydFJvd2AgZGlzYWJsZWRcbiAgICAgKiBmaWxsSGFuZGxlOiB7XG4gICAgICogICBhdXRvSW5zZXJ0Um93OiBmYWxzZSxcbiAgICAgKiB9LFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIHZlcnRpY2FsIGF1dG9maWxsXG4gICAgICogLy8gd2l0aCBgYXV0b0luc2VydFJvd2AgZGlzYWJsZWRcbiAgICAgKiBmaWxsSGFuZGxlOiB7XG4gICAgICogICBhdXRvSW5zZXJ0Um93OiBmYWxzZSxcbiAgICAgKiAgIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJ1xuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZmlsbEhhbmRsZToge1xuICAgICAgYXV0b0luc2VydFJvdzogZmFsc2VcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFRoZSBgZmlsdGVyYCBvcHRpb24gY29uZmlndXJlcyB3aGV0aGVyIFtgYXV0b2NvbXBsZXRlYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpIGNlbGxzJ1xuICAgICAqIGxpc3RzIGFyZSB1cGRhdGVkIGJ5IHRoZSBlbmQgdXNlcidzIGlucHV0LlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBmaWx0ZXJgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgfCBXaGVuIHRoZSBlbmQgdXNlciB0eXBlcyBpbnRvIHRoZSBpbnB1dCBhcmVhLCBvbmx5IG9wdGlvbnMgbWF0Y2hpbmcgdGhlIGlucHV0IGFyZSBkaXNwbGF5ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGZhbHNlYCAgICAgICAgICB8IFdoZW4gdGhlIGVuZCB1c2VyIHR5cGVzIGludG8gdGhlIGlucHV0IGFyZWEsIGFsbCBvcHRpb25zIGFyZSBkaXNwbGF5ZWQ8YnI+KG9wdGlvbnMgbWF0Y2hpbmcgdGhlIGlucHV0IGFyZSBwdXQgaW4gYm9sZCB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbYHNvdXJjZWBdKCNzb3VyY2UpXG4gICAgICogLSBbYGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmVgXSgjZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFt7XG4gICAgICogICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYGF1dG9jb21wbGV0ZWBcbiAgICAgKiAgIHR5cGU6ICdhdXRvY29tcGxldGUnLFxuICAgICAqICAgLy8gc2V0IG9wdGlvbnMgYXZhaWxhYmxlIGluIGV2ZXJ5IGBhdXRvY29tcGxldGVgIGNlbGwgb2YgdGhpcyBjb2x1bW5cbiAgICAgKiAgIHNvdXJjZTogWydBJywgJ0InLCAnQyddLFxuICAgICAqICAgLy8gd2hlbiB0aGUgZW5kIHVzZXIgdHlwZXMgaW4gYEFgLCBkaXNwbGF5IG9ubHkgdGhlIEEgb3B0aW9uXG4gICAgICogICAvLyB3aGVuIHRoZSBlbmQgdXNlciB0eXBlcyBpbiBgQmAsIGRpc3BsYXkgb25seSB0aGUgQiBvcHRpb25cbiAgICAgKiAgIC8vIHdoZW4gdGhlIGVuZCB1c2VyIHR5cGVzIGluIGBDYCwgZGlzcGxheSBvbmx5IHRoZSBDIG9wdGlvblxuICAgICAqICAgZmlsdGVyOiB0cnVlXG4gICAgICogfV0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZmlsdGVyOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZWAgb3B0aW9uIGNvbmZpZ3VyZXMgd2hldGhlciBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKSBjZWxscydcbiAgICAgKiBpbnB1dCBpcyBjYXNlLXNlbnNpdGl2ZS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKSBjZWxscycgaW5wdXQgaXMgbm90IGNhc2Utc2Vuc2l0aXZlIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgIHwgW2BhdXRvY29tcGxldGVgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZCkgY2VsbHMnIGlucHV0IGlzIGNhc2Utc2Vuc2l0aXZlICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbYHNvdXJjZWBdKCNzb3VyY2UpXG4gICAgICogLSBbYGZpbHRlcmBdKCNmaWx0ZXIpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICB0eXBlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAgKiAgICAgc291cmNlOiBbIC4uLiBdLFxuICAgICAqICAgICAvLyBtYXRjaCBjYXNlIHdoaWxlIHNlYXJjaGluZyBhdXRvY29tcGxldGUgb3B0aW9uc1xuICAgICAqICAgICBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiB0cnVlXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYGZpbHRlcnNgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBbYEZpbHRlcnNgXShAL2FwaS9maWx0ZXJzLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGZpbHRlcnNgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgfCBEaXNhYmxlIHRoZSBbYEZpbHRlcnNgXShAL2FwaS9maWx0ZXJzLm1kKSBwbHVnaW4gfFxuICAgICAqIHwgYHRydWVgICB8IEVuYWJsZSB0aGUgW2BGaWx0ZXJzYF0oQC9hcGkvZmlsdGVycy5tZCkgcGx1Z2luICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29sdW1uIGZpbHRlcl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIubWQpXG4gICAgICogLSBbUGx1Z2luczogYEZpbHRlcnNgXShAL2FwaS9maWx0ZXJzLm1kKVxuICAgICAqIC0gW2Bkcm9wZG93bk1lbnVgXSgjZHJvcGRvd25NZW51KVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IEZpbHRlcnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBGaWx0ZXJzYCBwbHVnaW5cbiAgICAgKiBmaWx0ZXJzOiB0cnVlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZpbHRlcnM6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgYSBsZWdhY3kgb3B0aW9uLlxuICAgICAqXG4gICAgICogSWYgeW91ciBncmlkJ3MgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgTFRSIChkZWZhdWx0KSwgYGZpeGVkQ29sdW1uc0xlZnRgIGFjdHMgbGlrZSB0aGUgW2BmaXhlZENvbHVtbnNTdGFydGBdKCNmaXhlZENvbHVtbnNTdGFydCkgb3B0aW9uLlxuICAgICAqXG4gICAgICogSWYgeW91ciBncmlkJ3MgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgUlRMLCB1c2luZyBgZml4ZWRDb2x1bW5zTGVmdGAgdGhyb3dzIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogVXNlIFtgZml4ZWRDb2x1bW5zU3RhcnRgXSgjZml4ZWRDb2x1bW5zU3RhcnQpLCB3aGljaCB3b3JrcyBpbiBhbnkgbGF5b3V0IGRpcmVjdGlvbi5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgZml4ZWRDb2x1bW5zU3RhcnRgXSgjZml4ZWRjb2x1bW5zc3RhcnQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGZyZWV6ZSB0aGUgZmlyc3QgMyBjb2x1bW5zIGZyb20gdGhlIGxlZnRcbiAgICAgKiBmaXhlZENvbHVtbnNMZWZ0OiAzLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZpeGVkQ29sdW1uc0xlZnQ6IDAsXG4gICAgLyoqXG4gICAgICogSWYgeW91ciBncmlkJ3MgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgTFRSIChkZWZhdWx0KSwgdGhlIGBmaXhlZENvbHVtbnNTdGFydGAgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBbZnJvemVuIGNvbHVtbnNdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLWZyZWV6aW5nL2NvbHVtbi1mcmVlemluZy5tZCkgYXQgdGhlIGxlZnQtaGFuZCBlZGdlIG9mIHRoZSBncmlkLlxuICAgICAqXG4gICAgICogSWYgeW91ciBncmlkJ3MgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgaXMgUlRMLCB0aGUgYGZpeGVkQ29sdW1uc1N0YXJ0YCBvcHRpb24gc2V0cyB0aGUgbnVtYmVyIG9mIFtmcm96ZW4gY29sdW1uc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZnJlZXppbmcvY29sdW1uLWZyZWV6aW5nLm1kKSBhdCB0aGUgcmlnaHQtaGFuZCBlZGdlIG9mIHRoZSBncmlkLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbHVtbiBmcmVlemluZ10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZnJlZXppbmcvY29sdW1uLWZyZWV6aW5nLm1kKVxuICAgICAqIC0gW0xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZClcbiAgICAgKiAtIFtgZml4ZWRDb2x1bW5zTGVmdGBdKCNmaXhlZGNvbHVtbnNsZWZ0KVxuICAgICAqIC0gW2BsYXlvdXREaXJlY3Rpb25gXSgjbGF5b3V0RGlyZWN0aW9uKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyB3aGVuIGBsYXlvdXREaXJlY3Rpb25gIGlzIHNldCB0byBgaW5oZXJpdGAgKGRlZmF1bHQpXG4gICAgICogLy8gZnJlZXplIHRoZSBmaXJzdCAzIGNvbHVtbnMgZnJvbSB0aGUgbGVmdCBvciBmcm9tIHRoZSByaWdodFxuICAgICAqIC8vIGRlcGVuZGluZyBvbiB5b3VyIEhUTUwgZG9jdW1lbnQncyBgZGlyYCBhdHRyaWJ1dGVcbiAgICAgKiBsYXlvdXREaXJlY3Rpb246ICdpbmhlcml0JyxcbiAgICAgKiBmaXhlZENvbHVtbnNTdGFydDogMyxcbiAgICAgKlxuICAgICAqIC8vIHdoZW4gYGxheW91dERpcmVjdGlvbmAgaXMgc2V0IHRvIGBydGxgXG4gICAgICogLy8gZnJlZXplIHRoZSBmaXJzdCAzIGNvbHVtbnMgZnJvbSB0aGUgcmlnaHRcbiAgICAgKiAvLyByZWdhcmRsZXNzIG9mIHlvdXIgSFRNTCBkb2N1bWVudCdzIGBkaXJgIGF0dHJpYnV0ZVxuICAgICAqIGxheW91dERpcmVjdGlvbjogJ3J0bCcsXG4gICAgICogZml4ZWRDb2x1bW5zU3RhcnQ6IDMsXG4gICAgICpcbiAgICAgKiAvLyB3aGVuIGBsYXlvdXREaXJlY3Rpb25gIGlzIHNldCB0byBgbHRyYFxuICAgICAqIC8vIGZyZWV6ZSB0aGUgZmlyc3QgMyBjb2x1bW5zIGZyb20gdGhlIGxlZnRcbiAgICAgKiAvLyByZWdhcmRsZXNzIG9mIHlvdXIgSFRNTCBkb2N1bWVudCdzIGBkaXJgIGF0dHJpYnV0ZVxuICAgICAqIGxheW91dERpcmVjdGlvbjogJ2x0cicsXG4gICAgICogZml4ZWRDb2x1bW5zU3RhcnQ6IDMsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZml4ZWRDb2x1bW5zU3RhcnQ6IDAsXG4gICAgLyoqXG4gICAgICogVGhlIGBmaXhlZFJvd3NCb3R0b21gIG9wdGlvbiBzZXRzIHRoZSBudW1iZXIgb2YgW2Zyb3plbiByb3dzXShAL2d1aWRlcy9yb3dzL3Jvdy1mcmVlemluZy9yb3ctZnJlZXppbmcubWQpXG4gICAgICogYXQgdGhlIGJvdHRvbSBvZiB0aGUgZ3JpZC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtSb3cgZnJlZXppbmddKEAvZ3VpZGVzL3Jvd3Mvcm93LWZyZWV6aW5nL3Jvdy1mcmVlemluZy5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZnJlZXplIHRoZSBib3R0b20gMyByb3dzXG4gICAgICogZml4ZWRSb3dzQm90dG9tOiAzLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZpeGVkUm93c0JvdHRvbTogMCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGZpeGVkUm93c1RvcGAgb3B0aW9uIHNldHMgdGhlIG51bWJlciBvZiBbZnJvemVuIHJvd3NdKEAvZ3VpZGVzL3Jvd3Mvcm93LWZyZWV6aW5nL3Jvdy1mcmVlemluZy5tZCkgYXQgdGhlIHRvcCBvZiB0aGUgZ3JpZC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtSb3cgZnJlZXppbmddKEAvZ3VpZGVzL3Jvd3Mvcm93LWZyZWV6aW5nL3Jvdy1mcmVlemluZy5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZnJlZXplIHRoZSB0b3AgMyByb3dzXG4gICAgICogZml4ZWRSb3dzVG9wOiAzLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZpeGVkUm93c1RvcDogMCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGZvcm11bGFzYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BGb3JtdWxhc2BdKEAvYXBpL2Zvcm11bGFzLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBUaGUgW2BGb3JtdWxhc2BdKEAvYXBpL2Zvcm11bGFzLm1kKSBwbHVnaW4gdXNlcyB0aGUgW0h5cGVyRm9ybXVsYV0oaHR0cHM6Ly9oYW5kc29udGFibGUuZ2l0aHViLmlvL2h5cGVyZm9ybXVsYS8pIGNhbGN1bGF0aW9uIGVuZ2luZS5cbiAgICAgKiBUbyBpbnN0YWxsIFtIeXBlckZvcm11bGFdKGh0dHBzOi8vaGFuZHNvbnRhYmxlLmdpdGh1Yi5pby9oeXBlcmZvcm11bGEvKSwgcmVhZCB0aGUgZm9sbG93aW5nOlxuICAgICAqIC0gW0Zvcm11bGEgY2FsY3VsYXRpb246IEluaXRpYWxpemF0aW9uIG1ldGhvZHNdKEAvZ3VpZGVzL2Zvcm11bGFzL2Zvcm11bGEtY2FsY3VsYXRpb24vZm9ybXVsYS1jYWxjdWxhdGlvbi5tZCNpbml0aWFsaXphdGlvbi1tZXRob2RzKVxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBmb3JtdWxhc2Agb3B0aW9uIHRvIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICAgKlxuICAgICAqIHwgUHJvcGVydHkgICAgfCBQb3NzaWJsZSB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZW5naW5lYCAgICB8IGBIeXBlckZvcm11bGFgIFxcfDxicj5BIFtIeXBlckZvcm11bGFdKGh0dHBzOi8vaGFuZHNvbnRhYmxlLmdpdGh1Yi5pby9oeXBlcmZvcm11bGEvKSBpbnN0YW5jZSBcXHw8YnI+QSBbSHlwZXJGb3JtdWxhIGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vaGFuZHNvbnRhYmxlLmdpdGh1Yi5pby9oeXBlcmZvcm11bGEvYXBpL2ludGVyZmFjZXMvY29uZmlncGFyYW1zLmh0bWwpIG9iamVjdCB8XG4gICAgICogfCBgc2hlZXRJZGAgICB8IEEgbnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHNoZWV0TmFtZWAgfCBBIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgRm9ybXVsYXNgXShAL2FwaS9mb3JtdWxhcy5tZClcbiAgICAgKiAtIFtGb3JtdWxhIGNhbGN1bGF0aW9uXShAL2d1aWRlcy9mb3JtdWxhcy9mb3JtdWxhLWNhbGN1bGF0aW9uL2Zvcm11bGEtY2FsY3VsYXRpb24ubWQpXG4gICAgICogLSBbSHlwZXJGb3JtdWxhIGRvY3VtZW50YXRpb246IENsaWVudC1zaWRlIGluc3RhbGxhdGlvbl0oaHR0cHM6Ly9oYW5kc29udGFibGUuZ2l0aHViLmlvL2h5cGVyZm9ybXVsYS9ndWlkZS9jbGllbnQtc2lkZS1pbnN0YWxsYXRpb24pXG4gICAgICogLSBbSHlwZXJGb3JtdWxhIGRvY3VtZW50YXRpb246IENvbmZpZ3VyYXRpb24gb3B0aW9uc10oaHR0cHM6Ly9oYW5kc29udGFibGUuZ2l0aHViLmlvL2h5cGVyZm9ybXVsYS9hcGkvaW50ZXJmYWNlcy9jb25maWdwYXJhbXMuaHRtbClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IEZvcm11bGFzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZWl0aGVyIGFkZCB0aGUgYEh5cGVyRm9ybXVsYWAgY2xhc3NcbiAgICAgKiBmb3JtdWxhczoge1xuICAgICAqICAgLy8gc2V0IGBlbmdpbmVgIHRvIGBIeXBlckZvcm11bGFgXG4gICAgICogICBlbmdpbmU6IEh5cGVyRm9ybXVsYSxcbiAgICAgKiAgIHNoZWV0SWQ6IDEsXG4gICAgICogICBzaGVldE5hbWU6ICdTaGVldCAxJ1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIG9yLCBhZGQgYSBIeXBlckZvcm11bGEgaW5zdGFuY2VcbiAgICAgKiAvLyBpbml0aWFsaXplZCB3aXRoIHRoZSBgJ2ludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUnYCBsaWNlbnNlIGtleVxuICAgICAqIGNvbnN0IGh5cGVyZm9ybXVsYUluc3RhbmNlID0gSHlwZXJGb3JtdWxhLmJ1aWxkRW1wdHkoe1xuICAgICAqICAgbGljZW5zZUtleTogJ2ludGVybmFsLXVzZS1pbi1oYW5kc29udGFibGUnLFxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogZm9ybXVsYXM6IHtcbiAgICAgKiAgIC8vIHNldCBgZW5naW5lYCB0byBhIEh5cGVyRm9ybXVsYSBpbnN0YW5jZVxuICAgICAqICAgZW5naW5lOiBoeXBlcmZvcm11bGFJbnN0YW5jZSxcbiAgICAgKiAgIHNoZWV0SWQ6IDEsXG4gICAgICogICBzaGVldE5hbWU6ICdTaGVldCAxJ1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIG9yLCBhZGQgYSBIeXBlckZvcm11bGEgY29uZmlndXJhdGlvbiBvYmplY3RcbiAgICAgKiBmb3JtdWxhczoge1xuICAgICAqICAgLy8gc2V0IGBlbmdpbmVgIHRvIGEgSHlwZXJGb3JtdWxhIGNvbmZpZ3VyYXRpb24gb2JqZWN0XG4gICAgICogICBlbmdpbmU6IHtcbiAgICAgKiAgICAgaHlwZXJmb3JtdWxhOiBIeXBlckZvcm11bGEgLy8gb3IgYGVuZ2luZTogaHlwZXJmb3JtdWxhSW5zdGFuY2VgXG4gICAgICogICAgIGxlYXBZZWFyMTkwMDogZmFsc2UsICAgICAgIC8vIHRoaXMgb3B0aW9uIGNvbWVzIGZyb20gSHlwZXJGb3JtdWxhXG4gICAgICogICAgIC8vIGFkZCBtb3JlIEh5cGVyRm9ybXVsYSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICAgKiAgIH0sXG4gICAgICogICBzaGVldElkOiAxLFxuICAgICAqICAgc2hlZXROYW1lOiAnU2hlZXQgMSdcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyB1c2UgdGhlIHNhbWUgSHlwZXJGb3JtdWxhIGluc3RhbmNlIGluIG11bHRpcGxlIEhhbmRzb250YWJsZSBpbnN0YW5jZXNcbiAgICAgKlxuICAgICAqIC8vIGEgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGBob3QxYFxuICAgICAqIGZvcm11bGFzOiB7XG4gICAgICogICBlbmdpbmU6IEh5cGVyRm9ybXVsYSxcbiAgICAgKiAgIHNoZWV0SWQ6IDEsXG4gICAgICogICBzaGVldE5hbWU6ICdTaGVldCAxJ1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIC8vIGEgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGBob3QyYFxuICAgICAqIGZvcm11bGFzOiB7XG4gICAgICogICBlbmdpbmU6IGhvdDEuZ2V0UGx1Z2luKCdmb3JtdWxhcycpLmVuZ2luZSxcbiAgICAgKiAgIHNoZWV0SWQ6IDEsXG4gICAgICogICBzaGVldE5hbWU6ICdTaGVldCAxJ1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb3JtdWxhczogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgZnJhZ21lbnRTZWxlY3Rpb25gIG9wdGlvbiBjb25maWd1cmVzIHRleHQgc2VsZWN0aW9uIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBmcmFnbWVudFNlbGVjdGlvbmAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IERpc2FibGUgdGV4dCBzZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBFbmFibGUgdGV4dCBzZWxlY3Rpb24gaW4gbXVsdGlwbGUgY2VsbHMgYXQgYSB0aW1lIHxcbiAgICAgKiB8IGAnY2VsbCdgICAgICAgICAgIHwgRW5hYmxlIHRleHQgc2VsZWN0aW9uIGluIG9uZSBjZWxsIGF0IGEgdGltZSAgICAgICB8XG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0ZXh0IHNlbGVjdGlvbiBpbiBtdWx0aXBsZSBjZWxscyBhdCBhIHRpbWVcbiAgICAgKiBmcmFnbWVudFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0ZXh0IHNlbGVjdGlvbiBpbiBvbmUgY2VsbCBhIHRpbWVcbiAgICAgKiBmcmFnbWVudFNlbGVjdGlvbjogJ2NlbGwnLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZyYWdtZW50U2VsZWN0aW9uOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYGhlaWdodGAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIGhlaWdodCBvZiB5b3VyIGdyaWQuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCBgaGVpZ2h0YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhhbXBsZSAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIG51bWJlciBvZiBwaXhlbHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBoZWlnaHQ6IDUwMGAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEEgc3RyaW5nIHdpdGggYSBbQ1NTIHVuaXRdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY3NzcmVmL2Nzc191bml0cy5hc3ApIHwgYGhlaWdodDogJzc1dncnYCAgICAgICAgICAgfFxuICAgICAqIHwgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWxpZCBudW1iZXIgb3Igc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgaGVpZ2h0KCkgeyByZXR1cm4gNTAwOyB9YCB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbR3JpZCBzaXplXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZ3JpZC1zaXplL2dyaWQtc2l6ZS5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ8c3RyaW5nfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc2V0IHRoZSBncmlkJ3MgaGVpZ2h0IHRvIDUwMHB4XG4gICAgICogaGVpZ2h0OiA1MDAsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgdGhlIGdyaWQncyBoZWlnaHQgdG8gNzV2aFxuICAgICAqIGhlaWdodDogJzc1dmgnLFxuICAgICAqXG4gICAgICogLy8gc2V0IHRoZSBncmlkJ3MgaGVpZ2h0IHRvIDUwMHB4LCB1c2luZyBhIGZ1bmN0aW9uXG4gICAgICogaGVpZ2h0KCkge1xuICAgICAqICAgcmV0dXJuIDUwMDtcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgaGlkZGVuQ29sdW1uc2Agb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgSGlkZGVuQ29sdW1uc2BdKEAvYXBpL2hpZGRlbkNvbHVtbnMubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgaGlkZGVuQ29sdW1uc2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgICAgfCBEaXNhYmxlIHRoZSBbYEhpZGRlbkNvbHVtbnNgXShAL2FwaS9oaWRkZW5Db2x1bW5zLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgdHJ1ZWAgICAgfCBFbmFibGUgdGhlIFtgSGlkZGVuQ29sdW1uc2BdKEAvYXBpL2hpZGRlbkNvbHVtbnMubWQpIHBsdWdpbiB3aXRoIHRoZSBkZWZhdWx0IHBsdWdpbiBvcHRpb25zICB8XG4gICAgICogfCBBbiBvYmplY3QgfCAtIEVuYWJsZSB0aGUgW2BIaWRkZW5Db2x1bW5zYF0oQC9hcGkvaGlkZGVuQ29sdW1ucy5tZCkgcGx1Z2luPGJyPi0gTW9kaWZ5IHRoZSBwbHVnaW4gb3B0aW9ucyB8XG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBgaGlkZGVuQ29sdW1uc2AgdG8gYW4gb2JqZWN0LCB5b3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIFtgSGlkZGVuQ29sdW1uc2BdKEAvYXBpL2hpZGRlbkNvbHVtbnMubWQpIHBsdWdpbiBvcHRpb25zOlxuICAgICAqXG4gICAgICogfCBQcm9wZXJ0eSAgICAgICAgICAgfCBQb3NzaWJsZSB2YWx1ZXMgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgY29sdW1uc2AgICAgICAgICAgfCBBbiBhcnJheSBvZiBpbmRleGVzIHwgQW4gYXJyYXkgb2YgaW5kZXhlcyBvZiBjb2x1bW5zIHRoYXQgYXJlIGhpZGRlbiBhdCBpbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgY29weVBhc3RlRW5hYmxlZGAgfCBgdHJ1ZWAgXFx8IGBmYWxzZWAgICB8IGB0cnVlYDogd2hlbiBjb3B5aW5nIG9yIHBhc3RpbmcgZGF0YSwgdGFrZSBoaWRkZW4gY29sdW1ucyBpbnRvIGFjY291bnQ8YnI+YGZhbHNlYDogd2hlbiBjb3B5aW5nIG9yIHBhc3RpbmcgZGF0YSwgZG9uJ3QgdGFrZSBoaWRkZW4gY29sdW1ucyBpbnRvIGFjY291bnQgfFxuICAgICAqIHwgYGluZGljYXRvcnNgICAgICAgIHwgYHRydWVgIFxcfCBgZmFsc2VgICAgfCBgdHJ1ZWA6IGRpc3BsYXkgVUkgbWFya2VycyB0byBpbmRpY2F0ZSB0aGUgcHJlc2VuY2Ugb2YgaGlkZGVuIGNvbHVtbnM8YnI+YGZhbHNlYDogZGlzcGxheSBVSSBtYXJrZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgSGlkZGVuQ29sdW1uc2BdKEAvYXBpL2hpZGRlbkNvbHVtbnMubWQpXG4gICAgICogLSBbQ29sdW1uIGhpZGluZ10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4taGlkaW5nL2NvbHVtbi1oaWRpbmcubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxvYmplY3R9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IEhpZGRlbkNvbHVtbnNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBIaWRkZW5Db2x1bW5zYCBwbHVnaW5cbiAgICAgKiBoaWRkZW5Db2x1bW5zOiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIGBIaWRkZW5Db2x1bW5zYCBwbHVnaW4sIGFuZCBtb2RpZnkgdGhlIHBsdWdpbiBvcHRpb25zXG4gICAgICogaGlkZGVuQ29sdW1uczoge1xuICAgICAqICAgLy8gc2V0IGNvbHVtbnMgdGhhdCBhcmUgaGlkZGVuIGJ5IGRlZmF1bHRcbiAgICAgKiAgIGNvbHVtbnM6IFs1LCAxMCwgMTVdLFxuICAgICAqICAgLy8gd2hlbiBjb3B5aW5nIG9yIHBhc3RpbmcgZGF0YSwgdGFrZSBoaWRkZW4gY29sdW1ucyBpbnRvIGFjY291bnRcbiAgICAgKiAgIGNvcHlQYXN0ZUVuYWJsZWQ6IHRydWUsXG4gICAgICogICAvLyBzaG93IHdoZXJlIGhpZGRlbiBjb2x1bW5zIGFyZVxuICAgICAqICAgaW5kaWNhdG9yczogdHJ1ZVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBoaWRkZW5Db2x1bW5zOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBoaWRkZW5Sb3dzYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BIaWRkZW5Sb3dzYF0oQC9hcGkvaGlkZGVuUm93cy5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBoaWRkZW5Sb3dzYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgICB8IERpc2FibGUgdGhlIFtgSGlkZGVuUm93c2BdKEAvYXBpL2hpZGRlblJvd3MubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICB8IEVuYWJsZSB0aGUgW2BIaWRkZW5Sb3dzYF0oQC9hcGkvaGlkZGVuUm93cy5tZCkgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgcGx1Z2luIG9wdGlvbnMgIHxcbiAgICAgKiB8IEFuIG9iamVjdCB8IC0gRW5hYmxlIHRoZSBbYEhpZGRlblJvd3NgXShAL2FwaS9oaWRkZW5Sb3dzLm1kKSBwbHVnaW48YnI+LSBNb2RpZnkgdGhlIHBsdWdpbiBvcHRpb25zIHxcbiAgICAgKlxuICAgICAqIElmIHlvdSBzZXQgdGhlIGBoaWRkZW5Sb3dzYCB0byBhbiBvYmplY3QsIHlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgW2BIaWRkZW5Sb3dzYF0oQC9hcGkvaGlkZGVuUm93cy5tZCkgcGx1Z2luIG9wdGlvbnM6XG4gICAgICpcbiAgICAgKiB8IFByb3BlcnR5ICAgICAgICAgICB8IFBvc3NpYmxlIHZhbHVlcyAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGByb3dzICAgYCAgICAgICAgICB8IEFuIGFycmF5IG9mIGluZGV4ZXMgfCBBbiBhcnJheSBvZiBpbmRleGVzIG9mIHJvd3MgdGhhdCBhcmUgaGlkZGVuIGF0IGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBjb3B5UGFzdGVFbmFibGVkYCB8IGB0cnVlYCBcXHwgYGZhbHNlYCAgIHwgYHRydWVgOiB3aGVuIGNvcHlpbmcgb3IgcGFzdGluZyBkYXRhLCB0YWtlIGhpZGRlbiByb3dzIGludG8gYWNjb3VudDxicj5gZmFsc2VgOiB3aGVuIGNvcHlpbmcgb3IgcGFzdGluZyBkYXRhLCBkb24ndCB0YWtlIGhpZGRlbiByb3dzIGludG8gYWNjb3VudCB8XG4gICAgICogfCBgaW5kaWNhdG9yc2AgICAgICAgfCBgdHJ1ZWAgXFx8IGBmYWxzZWAgICB8IGB0cnVlYDogZGlzcGxheSBVSSBtYXJrZXJzIHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZiBoaWRkZW4gcm93czxicj5gZmFsc2VgOiBkaXNwbGF5IFVJIG1hcmtlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1BsdWdpbnM6IGBIaWRkZW5Sb3dzYF0oQC9hcGkvaGlkZGVuUm93cy5tZClcbiAgICAgKiAtIFtSb3cgaGlkaW5nXShAL2d1aWRlcy9yb3dzL3Jvdy1oaWRpbmcvcm93LWhpZGluZy5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufG9iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgSGlkZGVuUm93c1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYEhpZGRlblJvd3NgIHBsdWdpblxuICAgICAqIGhpZGRlblJvd3M6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgYEhpZGRlblJvd3NgIHBsdWdpbiwgYW5kIG1vZGlmeSB0aGUgcGx1Z2luIG9wdGlvbnNcbiAgICAgKiBoaWRkZW5Sb3dzOiB7XG4gICAgICogICAvLyBzZXQgcm93cyB0aGF0IGFyZSBoaWRkZW4gYnkgZGVmYXVsdFxuICAgICAqICAgcm93czogWzUsIDEwLCAxNV0sXG4gICAgICogICAvLyB3aGVuIGNvcHlpbmcgb3IgcGFzdGluZyBkYXRhLCB0YWtlIGhpZGRlbiByb3dzIGludG8gYWNjb3VudFxuICAgICAqICAgY29weVBhc3RlRW5hYmxlZDogdHJ1ZSxcbiAgICAgKiAgIC8vIHNob3cgd2hlcmUgaGlkZGVuIHJvd3MgYXJlXG4gICAgICogICBpbmRpY2F0b3JzOiB0cnVlXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGhpZGRlblJvd3M6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGludmFsaWRDZWxsQ2xhc3NOYW1lYCBvcHRpb24gbGV0cyB5b3UgYWRkIGEgQ1NTIGNsYXNzIG5hbWUgdG8gY2VsbHNcbiAgICAgKiB0aGF0IHdlcmUgbWFya2VkIGFzIGBpbnZhbGlkYCBieSB0aGUgW2NlbGwgdmFsaWRhdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLXZhbGlkYXRvci9jZWxsLXZhbGlkYXRvci5tZCkuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2VsbCB2YWxpZGF0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtdmFsaWRhdG9yL2NlbGwtdmFsaWRhdG9yLm1kKVxuICAgICAqIC0gW2BjdXJyZW50Um93Q2xhc3NOYW1lYF0oI2N1cnJlbnRSb3dDbGFzc05hbWUpXG4gICAgICogLSBbYGN1cnJlbnRIZWFkZXJDbGFzc05hbWVgXSgjY3VycmVudEhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgYWN0aXZlSGVhZGVyQ2xhc3NOYW1lYF0oI2FjdGl2ZUhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudENvbENsYXNzTmFtZWBdKCNjdXJyZW50Q29sQ2xhc3NOYW1lKVxuICAgICAqIC0gW2ByZWFkT25seUNlbGxDbGFzc05hbWVgXSgjcmVhZE9ubHlDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bjb21tZW50ZWRDZWxsQ2xhc3NOYW1lYF0oI2NvbW1lbnRlZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYG5vV29yZFdyYXBDbGFzc05hbWVgXSgjbm9Xb3JkV3JhcENsYXNzTmFtZSlcbiAgICAgKiAtIFtgVGFibGVDbGFzc05hbWVgXSgjVGFibGVDbGFzc05hbWUpXG4gICAgICogLSBbYGNsYXNzTmFtZWBdKCNjbGFzc05hbWUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdodEludmFsaWQnXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBhZGQgYSBgaGlnaGxpZ2h0LWVycm9yYCBDU1MgY2xhc3MgbmFtZVxuICAgICAqIC8vIHRvIGV2ZXJ5IGBpbnZhbGlkYCBjZWxsYFxuICAgICAqIGludmFsaWRDZWxsQ2xhc3NOYW1lOiAnaGlnaGxpZ2h0LWVycm9yJyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpbnZhbGlkQ2VsbENsYXNzTmFtZTogJ2h0SW52YWxpZCcsXG4gICAgLyoqXG4gICAgICogVGhlIGBpbWVGYXN0RWRpdGAgb3B0aW9uIGFsbG93cyB1c2luZyB0aGUgXCJmYXN0IGVkaXRcIiBmZWF0dXJlIGZvciB0aGUgSU1FIHVzZXJzLiBJdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHRcbiAgICAgKiBiZWNhdXNlIG9mIGl0cyBpbmNvbXBhdGliaWxpdHkgd2l0aCBzb21lIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzLlxuICAgICAqXG4gICAgICogRW5hYmxpbmcgdGhpcyBvcHRpb24gY2FuIG1ha2UgYSBuZWdhdGl2ZSBpbXBhY3Qgb24gaG93IHNvbWUgc2NyZWVuIHJlYWRlcnMgaGFuZGxlIHJlYWRpbmcgdGhlIHRhYmxlIGNlbGxzLlxuICAgICAqXG4gICAgICogQHNpbmNlIDE0LjAuMFxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICovXG4gICAgaW1lRmFzdEVkaXQ6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgaXNFbXB0eUNvbGAgb3B0aW9uIGxldHMgeW91IGRlZmluZSB5b3VyIG93biBjdXN0b20gbWV0aG9kXG4gICAgICogZm9yIGNoZWNraW5nIGlmIGEgY29sdW1uIGF0IGEgZ2l2ZW4gdmlzdWFsIGluZGV4IGlzIGVtcHR5LlxuICAgICAqXG4gICAgICogVGhlIGBpc0VtcHR5Q29sYCBzZXR0aW5nIG92ZXJ3cml0ZXMgdGhlIGJ1aWx0LWluIFtgaXNFbXB0eUNvbGBdKEAvYXBpL2NvcmUubWQjaXNFbXB0eUNvbCkgbWV0aG9kLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIG92ZXJ3cml0ZSB0aGUgYnVpbHQtaW4gYGlzRW1wdHlDb2xgIG1ldGhvZFxuICAgICAqIGlzRW1wdHlDb2wodmlzdWFsQ29sdW1uSW5kZXgpIHtcbiAgICAgKiAgICAvLyB5b3VyIGN1c3RvbSBtZXRob2RcbiAgICAgKiAgICAuLi5cbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGlzRW1wdHlDb2woY29sKSB7XG4gICAgICBsZXQgcm93O1xuICAgICAgbGV0IHJvd0xlbjtcbiAgICAgIGxldCB2YWx1ZTtcbiAgICAgIGZvciAocm93ID0gMCwgcm93TGVuID0gdGhpcy5jb3VudFJvd3MoKTsgcm93IDwgcm93TGVuOyByb3crKykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0RGF0YUF0Q2VsbChyb3csIGNvbCk7XG4gICAgICAgIGlmICgoMCwgX21peGVkLmlzRW1wdHkpKHZhbHVlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVGhlIGBpc0VtcHR5Um93YCBvcHRpb24gbGV0cyB5b3UgZGVmaW5lIHlvdXIgb3duIGN1c3RvbSBtZXRob2RcbiAgICAgKiBmb3IgY2hlY2tpbmcgaWYgYSByb3cgYXQgYSBnaXZlbiB2aXN1YWwgaW5kZXggaXMgZW1wdHkuXG4gICAgICpcbiAgICAgKiBUaGUgYGlzRW1wdHlSb3dgIHNldHRpbmcgb3ZlcndyaXRlcyB0aGUgYnVpbHQtaW4gW2Bpc0VtcHR5Um93YF0oQC9hcGkvY29yZS5tZCNpc0VtcHR5Um93KSBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gb3ZlcndyaXRlIHRoZSBidWlsdC1pbiBgaXNFbXB0eVJvd2AgbWV0aG9kXG4gICAgICogaXNFbXB0eVJvdyh2aXN1YWxSb3dJbmRleCkge1xuICAgICAqICAgIC8vIHlvdXIgY3VzdG9tIG1ldGhvZFxuICAgICAqICAgIC4uLlxuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgaXNFbXB0eVJvdyhyb3cpIHtcbiAgICAgIGxldCBjb2w7XG4gICAgICBsZXQgY29sTGVuO1xuICAgICAgbGV0IHZhbHVlO1xuICAgICAgbGV0IG1ldGE7XG4gICAgICBmb3IgKGNvbCA9IDAsIGNvbExlbiA9IHRoaXMuY291bnRDb2xzKCk7IGNvbCA8IGNvbExlbjsgY29sKyspIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmdldERhdGFBdENlbGwocm93LCBjb2wpO1xuICAgICAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KSh2YWx1ZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIG1ldGEgPSB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKTtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX29iamVjdC5pc09iamVjdEVxdWFsKSh0aGlzLmdldFNjaGVtYSgpW21ldGEucHJvcF0sIHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbGFiZWxgIG9wdGlvbiBjb25maWd1cmVzIFtgY2hlY2tib3hgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NoZWNrYm94LWNlbGwtdHlwZS9jaGVja2JveC1jZWxsLXR5cGUubWQpIGNlbGxzYCBsYWJlbHMuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYGxhYmVsYCBvcHRpb24gdG8gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogfCBQcm9wZXJ0eSAgICB8IFBvc3NpYmxlIHZhbHVlcyAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHBvc2l0aW9uYCAgfCBgJ2FmdGVyJ2AgKGRlZmF1bHQpIFxcfCBgJ2JlZm9yZSdgIHwgYCdhZnRlcidgOiBwbGFjZSB0aGUgbGFiZWwgdG8gdGhlIHJpZ2h0IG9mIHRoZSBjaGVja2JveDxicj5gJ2JlZm9yZSdgOiBwbGFjZSB0aGUgbGFiZWwgdG8gdGhlIGxlZnQgb2YgdGhlIGNoZWNrYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHZhbHVlYCAgICAgfCBBIHN0cmluZyBcXHwgQSBmdW5jdGlvbiAgICAgICAgICAgIHwgVGhlIGxhYmVsJ3MgdGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHNlcGFyYXRlZGAgfCBgZmFsc2VgIChkZWZhdWx0KSBcXHwgYHRydWVgICAgICAgIHwgYGZhbHNlYDogZG9uJ3Qgc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gdGhlIGNoZWNrYm94PGJyPmB0cnVlYDogc2VwYXJhdGUgdGhlIGxhYmVsIGZyb20gdGhlIGNoZWNrYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHByb3BlcnR5YCAgfCBBIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtIEEgW2BkYXRhYF0oI2RhdGEpIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHRoYXQncyB1c2VkIGFzIHRoZSBsYWJlbCdzIHRleHQgPGJyPi0gV29ya3Mgb25seSB3aGVuIHRoZSBbYGRhdGFgXSgjZGF0YSkgb3B0aW9uIGlzIHNldCB0byBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cykgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NoZWNrYm94IGNlbGwgdHlwZTogQ2hlY2tib3ggbGFiZWxzXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NoZWNrYm94LWNlbGwtdHlwZS9jaGVja2JveC1jZWxsLXR5cGUubWQjY2hlY2tib3gtbGFiZWxzKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFt7XG4gICAgICogICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAqICAgLy8gYWRkICdNeSBsYWJlbDonIGFmdGVyIHRoZSBjaGVja2JveFxuICAgICAqICAgbGFiZWw6IHsgcG9zaXRpb246ICdhZnRlcicsIHZhbHVlOiAnTXkgbGFiZWw6ICcsIHNlcGFyYXRlZDogdHJ1ZSB9XG4gICAgICogfV0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbGFiZWw6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYGxhbmd1YWdlYCBvcHRpb24gY29uZmlndXJlcyBIYW5kc29udGFibGUncyBbbGFuZ3VhZ2VdKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xhbmd1YWdlL2xhbmd1YWdlLm1kKSBzZXR0aW5ncy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbGFuZ3VhZ2VgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGAnZW4tVVMnYCAoZGVmYXVsdCkgfCBFbmdsaXNoIC0gVW5pdGVkIFN0YXRlcyAgICAgfFxuICAgICAqIHwgYCdhci1BUidgICAgICAgICAgICB8IEFyYWJpYyAtIEdsb2JhbDxicj48YnI+VG8gcHJvcGVybHkgcmVuZGVyIHRoaXMgbGFuZ3VhZ2UsIHNldCB0aGUgW2xheW91dCBkaXJlY3Rpb25dKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xheW91dC1kaXJlY3Rpb24vbGF5b3V0LWRpcmVjdGlvbi5tZCkgdG8gUlRMLiB8XG4gICAgICogfCBgJ2NzLUNaJ2AgICAgICAgICAgIHwgQ3plY2ggLSBDemVjaCBSZXB1YmxpYyAgICAgIHxcbiAgICAgKiB8IGAnZGUtQ0gnYCAgICAgICAgICAgfCBHZXJtYW4gLSBTd2l0emVybGFuZCAgICAgICAgfFxuICAgICAqIHwgYCdkZS1ERSdgICAgICAgICAgICB8IEdlcm1hbiAtIEdlcm1hbnkgICAgICAgICAgICB8XG4gICAgICogfCBgJ2VzLU1YJ2AgICAgICAgICAgIHwgU3BhbmlzaCAtIE1leGljbyAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnZnItRlInYCAgICAgICAgICAgfCBGcmVuY2ggLSBGcmFuY2UgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdoci1IUidgICAgICAgICAgICB8IENyb2F0aWFuIC0gQ3JvYXRpYSAgICAgICAgICB8XG4gICAgICogfCBgJ2l0LUlUJ2AgICAgICAgICAgIHwgSXRhbGlhbiAtIEl0YWx5ICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnamEtSlAnYCAgICAgICAgICAgfCBKYXBhbmVzZSAtIEphcGFuICAgICAgICAgICAgfFxuICAgICAqIHwgYCdrby1LUidgICAgICAgICAgICB8IEtvcmVhbiAtIEtvcmVhICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2x2LUxWJ2AgICAgICAgICAgIHwgTGF0dmlhbiAtIExhdHZpYSAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnbmItTk8nYCAgICAgICAgICAgfCBOb3J3ZWdpYW4gKEJva23DpWwpIC0gTm9yd2F5IHxcbiAgICAgKiB8IGAnbmwtTkwnYCAgICAgICAgICAgfCBEdXRjaCAtIE5ldGhlcmxhbmRzICAgICAgICAgfFxuICAgICAqIHwgYCdwbC1QTCdgICAgICAgICAgICB8IFBvbGlzaCAtIFBvbGFuZCAgICAgICAgICAgICB8XG4gICAgICogfCBgJ3B0LUJSJ2AgICAgICAgICAgIHwgUG9ydHVndWVzZSAtIEJyYXppbCAgICAgICAgIHxcbiAgICAgKiB8IGAncnUtUlUnYCAgICAgICAgICAgfCBSdXNzaWFuIC0gUnVzc2lhICAgICAgICAgICAgfFxuICAgICAqIHwgYCdzci1TUCdgICAgICAgICAgICB8IFNlcmJpYW4gKExhdGluKSAtIFNlcmJpYSAgICB8XG4gICAgICogfCBgJ3poLUNOJ2AgICAgICAgICAgIHwgQ2hpbmVzZSAtIENoaW5hICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnemgtVFcnYCAgICAgICAgICAgfCBDaGluZXNlIC0gVGFpd2FuICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0xhbmd1YWdlXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sYW5ndWFnZS9sYW5ndWFnZS5tZClcbiAgICAgKiAtIFtgbG9jYWxlYF0oI2xvY2FsZSlcbiAgICAgKiAtIFtgbGF5b3V0RGlyZWN0aW9uYF0oI2xheW91dGRpcmVjdGlvbilcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2VuLVVTJ1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc2V0IEhhbmRzb250YWJsZSdzIGxhbmd1YWdlIHRvIFBvbGlzaFxuICAgICAqIGxhbmd1YWdlOiAncGwtUEwnLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGxhbmd1YWdlOiAnZW4tVVMnLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbGF5b3V0RGlyZWN0aW9uYCBvcHRpb24gY29uZmlndXJlcyB3aGV0aGVyIEhhbmRzb250YWJsZSByZW5kZXJzIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0LCBvciBmcm9tIHRoZSByaWdodCB0byB0aGUgbGVmdC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBsYXlvdXQgZGlyZWN0aW9uIG9ubHkgYXQgSGFuZHNvbnRhYmxlJ3MgW2luaXRpYWxpemF0aW9uXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbGF0aW9uL2luc3RhbGxhdGlvbi5tZCNpbml0aWFsaXplLWhhbmRzb250YWJsZSkuIEFueSBjaGFuZ2Ugb2YgdGhlIGBsYXlvdXREaXJlY3Rpb25gIG9wdGlvbiBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gKGUuZy4gdXNpbmcgdGhlIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIG1ldGhvZCkgaXMgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbGF5b3V0RGlyZWN0aW9uYCBvcHRpb24gb25seSBbZm9yIHRoZSBlbnRpcmUgZ3JpZF0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LWdyaWQtb3B0aW9ucykuXG4gICAgICogWW91IGNhbid0IHNldCBpdCBmb3IgaW5kaXZpZHVhbCBjb2x1bW5zLCByb3dzLCBvciBjZWxscy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbGF5b3V0RGlyZWN0aW9uYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgaW5oZXJpdGAgKGRlZmF1bHQpIHwgU2V0IEhhbmRzb250YWJsZSdzIGxheW91dCBkaXJlY3Rpb24gYXV0b21hdGljYWxseSw8YnI+YmFzZWQgb24gdGhlIHZhbHVlIG9mIHlvdXIgSFRNTCBkb2N1bWVudCdzIFtgZGlyYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy9kaXIpIGF0dHJpYnV0ZSAgfFxuICAgICAqIHwgYHJ0bGAgICAgICAgICAgICAgICB8IFJlbmRlciBIYW5kc29udGFibGUgZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQsPGJyPmV2ZW4gd2hlbiB5b3VyIEhUTUwgZG9jdW1lbnQncyBbYGRpcmBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvZGlyKSBhdHRyaWJ1dGUgaXMgc2V0IHRvIGBsdHJgIHxcbiAgICAgKiB8IGBsdHJgICAgICAgICAgICAgICAgfCBSZW5kZXIgSGFuZHNvbnRhYmxlIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0LDxicj5ldmVuIHdoZW4geW91ciBIVE1MIGRvY3VtZW50J3MgW2BkaXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL2RpcikgYXR0cmlidXRlIGlzIHNldCB0byBgcnRsYCB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbTGF5b3V0IGRpcmVjdGlvbl0oQC9ndWlkZXMvaW50ZXJuYXRpb25hbGl6YXRpb24vbGF5b3V0LWRpcmVjdGlvbi9sYXlvdXQtZGlyZWN0aW9uLm1kKVxuICAgICAqIC0gW0xhbmd1YWdlXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sYW5ndWFnZS9sYW5ndWFnZS5tZClcbiAgICAgKiAtIFtgbGFuZ3VhZ2VgXSgjbGFuZ3VhZ2UpXG4gICAgICogLSBbYGxvY2FsZWBdKCNsb2NhbGUpXG4gICAgICogLSBbYGZpeGVkQ29sdW1uc1N0YXJ0YF0oI2ZpeGVkY29sdW1uc3N0YXJ0KVxuICAgICAqIC0gW2BjdXN0b21Cb3JkZXJzYF0oI2N1c3RvbUJvcmRlcnMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdpbmhlcml0J1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gaW5oZXJpdCBIYW5kc29udGFibGUncyBsYXlvdXQgZGlyZWN0aW9uXG4gICAgICogLy8gZnJvbSB0aGUgdmFsdWUgb2YgeW91ciBIVE1MIGRvY3VtZW50J3MgYGRpcmAgYXR0cmlidXRlXG4gICAgICogbGF5b3V0RGlyZWN0aW9uOiAnaW5oZXJpdCcsXG4gICAgICpcbiAgICAgKiAvLyByZW5kZXIgSGFuZHNvbnRhYmxlIGZyb20gdGhlIHJpZ2h0IHRvIHRoZSBsZWZ0XG4gICAgICogLy8gcmVnYXJkbGVzcyBvZiB5b3VyIEhUTUwgZG9jdW1lbnQncyBgZGlyYFxuICAgICAqIGxheW91dERpcmVjdGlvbjogJ3J0bCcsXG4gICAgICpcbiAgICAgKiAvLyByZW5kZXIgSGFuZHNvbnRhYmxlIGZyb20gdGhlIGxlZnQgdG8gdGhlIHJpZ2h0XG4gICAgICogLy8gcmVnYXJkbGVzcyBvZiB5b3VyIEhUTUwgZG9jdW1lbnQncyBgZGlyYFxuICAgICAqIGxheW91dERpcmVjdGlvbjogJ2x0cicsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbGF5b3V0RGlyZWN0aW9uOiAnaW5oZXJpdCcsXG4gICAgLyoqXG4gICAgICogVGhlIGBsaWNlbnNlS2V5YCBvcHRpb24gc2V0cyB5b3VyIEhhbmRzb250YWJsZSBsaWNlbnNlIGtleS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbGljZW5zZUtleWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIHN0cmluZyB3aXRoIHlvdXIgW2NvbW1lcmNpYWwgbGljZW5zZSBrZXldKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9saWNlbnNlLWtleS9saWNlbnNlLWtleS5tZCNjb21tZXJjaWFsLWxpY2Vuc2UpIHwgRm9yIFtjb21tZXJjaWFsIHVzZV0oQC9ndWlkZXMvdGVjaG5pY2FsLXNwZWNpZmljYXRpb24vc29mdHdhcmUtbGljZW5zZS9zb2Z0d2FyZS1saWNlbnNlLm1kI2NvbW1lcmNpYWwtdXNlKSAgICAgICAgIHxcbiAgICAgKiB8IGAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGb3IgW25vbi1jb21tZXJjaWFsIHVzZV0oQC9ndWlkZXMvdGVjaG5pY2FsLXNwZWNpZmljYXRpb24vc29mdHdhcmUtbGljZW5zZS9zb2Z0d2FyZS1saWNlbnNlLm1kI25vbi1jb21tZXJjaWFsLXVzZSkgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0xpY2Vuc2Uga2V5XShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvbGljZW5zZS1rZXkvbGljZW5zZS1rZXkubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZm9yIGNvbW1lcmNpYWwgdXNlXG4gICAgICogbGljZW5zZUtleTogJ3h4eHh4LXh4eHh4LXh4eHh4LXh4eHh4LXh4eHh4JywgLy8geW91ciBjb21tZXJjaWFsIGxpY2Vuc2Uga2V5XG4gICAgICpcbiAgICAgKiAvLyBmb3Igbm9uLWNvbW1lcmNpYWwgdXNlXG4gICAgICogbGljZW5zZUtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBsaWNlbnNlS2V5OiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBsb2NhbGVgIG9wdGlvbiBjb25maWd1cmVzIEhhbmRzb250YWJsZSdzIFtsb2NhbGVdKEAvZ3VpZGVzL2ludGVybmF0aW9uYWxpemF0aW9uL2xvY2FsZS9sb2NhbGUubWQpIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBsb2NhbGVgIG9wdGlvbiB0byBhbnkgdmFsaWQgYW5kIGNhbm9uaWNhbGl6ZWQgVW5pY29kZSBCQ1AgNDcgbG9jYWxlIHRhZyxcbiAgICAgKiBib3RoIGZvciB0aGUgW2VudGlyZSBncmlkXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sb2NhbGUvbG9jYWxlLm1kI3NldC10aGUtZ3JpZC1zLWxvY2FsZSksXG4gICAgICogYW5kIGZvciBbaW5kaXZpZHVhbCBjb2x1bW5zXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sb2NhbGUvbG9jYWxlLm1kI3NldC1hLWNvbHVtbi1zLWxvY2FsZSkuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbTG9jYWxlXShAL2d1aWRlcy9pbnRlcm5hdGlvbmFsaXphdGlvbi9sb2NhbGUvbG9jYWxlLm1kKVxuICAgICAqIC0gW2BsYW5ndWFnZWBdKCNsYW5ndWFnZSlcbiAgICAgKiAtIFtgbGF5b3V0RGlyZWN0aW9uYF0oI2xheW91dGRpcmVjdGlvbilcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2VuLVVTJ1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc2V0IHRoZSBlbnRpcmUgZ3JpZCdzIGxvY2FsZSB0byBQb2xpc2hcbiAgICAgKiBsb2NhbGU6ICdwbC1QTCcsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgaW5kaXZpZHVhbCBjb2x1bW5zJyBsb2NhbGVzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGZpcnN0IGNvbHVtbidzIGxvY2FsZSB0byBQb2xpc2hcbiAgICAgKiAgICAgbG9jYWxlOiAncGwtUEwnLFxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBzZWNvbmQgY29sdW1uJ3MgbG9jYWxlIHRvIEdlcm1hblxuICAgICAqICAgICBsb2NhbGU6ICdkZS1ERScsXG4gICAgICogICB9LFxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbG9jYWxlOiAnZW4tVVMnLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbWFudWFsQ29sdW1uRnJlZXplYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BNYW51YWxDb2x1bW5GcmVlemVgXShAL2FwaS9tYW51YWxDb2x1bW5GcmVlemUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWFudWFsQ29sdW1uRnJlZXplYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgfCBFbmFibGUgdGhlIFtgTWFudWFsQ29sdW1uRnJlZXplYF0oQC9hcGkvbWFudWFsQ29sdW1uRnJlZXplLm1kKSBwbHVnaW4gIHxcbiAgICAgKiB8IGBmYWxzZWAgIHwgRGlzYWJsZSB0aGUgW2BNYW51YWxDb2x1bW5GcmVlemVgXShAL2FwaS9tYW51YWxDb2x1bW5GcmVlemUubWQpIHBsdWdpbiB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29sdW1uIGZyZWV6aW5nXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1mcmVlemluZy9jb2x1bW4tZnJlZXppbmcubWQjdXNlci10cmlnZ2VyZWQtZnJlZXplKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IE1hbnVhbENvbHVtbkZyZWV6ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYE1hbnVhbENvbHVtbkZyZWV6ZWAgcGx1Z2luXG4gICAgICogbWFudWFsQ29sdW1uRnJlZXplOiB0cnVlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1hbnVhbENvbHVtbkZyZWV6ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbWFudWFsQ29sdW1uTW92ZWAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgTWFudWFsQ29sdW1uTW92ZWBdKEAvYXBpL21hbnVhbENvbHVtbk1vdmUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWFudWFsQ29sdW1uTW92ZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgICB8IEVuYWJsZSB0aGUgW2BNYW51YWxDb2x1bW5Nb3ZlYF0oQC9hcGkvbWFudWFsQ29sdW1uTW92ZS5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICB8IERpc2FibGUgdGhlIFtgTWFudWFsQ29sdW1uTW92ZWBdKEAvYXBpL21hbnVhbENvbHVtbk1vdmUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSB8IC0gRW5hYmxlIHRoZSBbYE1hbnVhbENvbHVtbk1vdmVgXShAL2FwaS9tYW51YWxDb2x1bW5Nb3ZlLm1kKSBwbHVnaW48YnI+LSBNb3ZlIGluZGl2aWR1YWwgY29sdW1ucyBhdCBpbml0aWFsaXphdGlvbiB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29sdW1uIG1vdmluZ10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tbW92aW5nL2NvbHVtbi1tb3ZpbmcubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxudW1iZXJbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgTWFudWFsQ29sdW1uTW92ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYE1hbnVhbENvbHVtbk1vdmVgIHBsdWdpblxuICAgICAqIG1hbnVhbENvbHVtbk1vdmU6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBNYW51YWxDb2x1bW5Nb3ZlYCBwbHVnaW5cbiAgICAgKiAvLyBhdCBpbml0aWFsaXphdGlvbiwgbW92ZSBjb2x1bW4gMCB0byAxXG4gICAgICogLy8gYXQgaW5pdGlhbGl6YXRpb24sIG1vdmUgY29sdW1uIDEgdG8gNFxuICAgICAqIC8vIGF0IGluaXRpYWxpemF0aW9uLCBtb3ZlIGNvbHVtbiAyIHRvIDZcbiAgICAgKiBtYW51YWxDb2x1bW5Nb3ZlOiBbMSwgNCwgNl0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWFudWFsQ29sdW1uTW92ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbWFudWFsQ29sdW1uUmVzaXplYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BNYW51YWxDb2x1bW5SZXNpemVgXShAL2FwaS9tYW51YWxDb2x1bW5SZXNpemUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWFudWFsQ29sdW1uUmVzaXplYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAgIHwgRW5hYmxlIHRoZSBbYE1hbnVhbENvbHVtblJlc2l6ZWBdKEAvYXBpL21hbnVhbENvbHVtblJlc2l6ZS5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgIHwgRGlzYWJsZSB0aGUgW2BNYW51YWxDb2x1bW5SZXNpemVgXShAL2FwaS9tYW51YWxDb2x1bW5SZXNpemUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IHwgLSBFbmFibGUgdGhlIFtgTWFudWFsQ29sdW1uUmVzaXplYF0oQC9hcGkvbWFudWFsQ29sdW1uUmVzaXplLm1kKSBwbHVnaW48YnI+LSBTZXQgaW5pdGlhbCB3aWR0aHMgb2YgaW5kaXZpZHVhbCBjb2x1bW5zIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDb2x1bW4gd2lkdGg6IENvbHVtbiBzdHJldGNoaW5nXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi13aWR0aC9jb2x1bW4td2lkdGgubWQjY29sdW1uLXN0cmV0Y2hpbmcpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxudW1iZXJbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgTWFudWFsQ29sdW1uUmVzaXplXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBgbWFudWFsQ29sdW1uUmVzaXplYCBwbHVnaW5cbiAgICAgKiBtYW51YWxDb2x1bW5SZXNpemU6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBtYW51YWxDb2x1bW5SZXNpemVgIHBsdWdpblxuICAgICAqIC8vIHNldCB0aGUgaW5pdGlhbCB3aWR0aCBvZiBjb2x1bW4gMCB0byA0MCBwaXhlbHNcbiAgICAgKiAvLyBzZXQgdGhlIGluaXRpYWwgd2lkdGggb2YgY29sdW1uIDEgdG8gNTAgcGl4ZWxzXG4gICAgICogLy8gc2V0IHRoZSBpbml0aWFsIHdpZHRoIG9mIGNvbHVtbiAyIHRvIDYwIHBpeGVsc1xuICAgICAqIG1hbnVhbENvbHVtblJlc2l6ZTogWzQwLCA1MCwgNjBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1hbnVhbENvbHVtblJlc2l6ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbWFudWFsUm93TW92ZWAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgTWFudWFsUm93TW92ZWBdKEAvYXBpL21hbnVhbFJvd01vdmUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWFudWFsUm93TW92ZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgICB8IEVuYWJsZSB0aGUgW2BNYW51YWxSb3dNb3ZlYF0oQC9hcGkvbWFudWFsUm93TW92ZS5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICB8IERpc2FibGUgdGhlIFtgTWFudWFsUm93TW92ZWBdKEAvYXBpL21hbnVhbFJvd01vdmUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSB8IC0gRW5hYmxlIHRoZSBbYE1hbnVhbFJvd01vdmVgXShAL2FwaS9tYW51YWxSb3dNb3ZlLm1kKSBwbHVnaW48YnI+LSBNb3ZlIGluZGl2aWR1YWwgcm93cyBhdCBpbml0aWFsaXphdGlvbiB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbUm93IG1vdmluZ10oQC9ndWlkZXMvcm93cy9yb3ctbW92aW5nL3Jvdy1tb3ZpbmcubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxudW1iZXJbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgTWFudWFsUm93TW92ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYE1hbnVhbFJvd01vdmVgIHBsdWdpblxuICAgICAqIG1hbnVhbFJvd01vdmU6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBNYW51YWxSb3dNb3ZlYCBwbHVnaW5cbiAgICAgKiAvLyBhdCBpbml0aWFsaXphdGlvbiwgbW92ZSByb3cgMCB0byAxXG4gICAgICogLy8gYXQgaW5pdGlhbGl6YXRpb24sIG1vdmUgcm93IDEgdG8gNFxuICAgICAqIC8vIGF0IGluaXRpYWxpemF0aW9uLCBtb3ZlIHJvdyAyIHRvIDZcbiAgICAgKiBtYW51YWxDb2x1bW5Nb3ZlOiBbMSwgNCwgNl0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWFudWFsUm93TW92ZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbWFudWFsUm93UmVzaXplYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BNYW51YWxSb3dSZXNpemVgXShAL2FwaS9tYW51YWxSb3dSZXNpemUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWFudWFsUm93UmVzaXplYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgfCBFbmFibGUgdGhlIFtgTWFudWFsUm93UmVzaXplYF0oQC9hcGkvbWFudWFsUm93UmVzaXplLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgIHwgRGlzYWJsZSB0aGUgW2BNYW51YWxSb3dSZXNpemVgXShAL2FwaS9tYW51YWxSb3dSZXNpemUubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSB8IC0gRW5hYmxlIHRoZSBbYE1hbnVhbFJvd1Jlc2l6ZWBdKEAvYXBpL21hbnVhbFJvd1Jlc2l6ZS5tZCkgcGx1Z2luPGJyPi0gU2V0IGluaXRpYWwgaGVpZ2h0cyBvZiBpbmRpdmlkdWFsIHJvd3MgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1JvdyBoZWlnaHQ6IEFkanVzdCB0aGUgcm93IGhlaWdodCBtYW51YWxseV0oQC9ndWlkZXMvcm93cy9yb3ctaGVpZ2h0L3Jvdy1oZWlnaHQubWQjYWRqdXN0LXRoZS1yb3ctaGVpZ2h0LW1hbnVhbGx5KVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58bnVtYmVyW119XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IE1hbnVhbFJvd1Jlc2l6ZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYE1hbnVhbFJvd1Jlc2l6ZWAgcGx1Z2luXG4gICAgICogbWFudWFsUm93UmVzaXplOiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIHRoZSBgTWFudWFsUm93UmVzaXplYCBwbHVnaW5cbiAgICAgKiAvLyBzZXQgdGhlIGluaXRpYWwgaGVpZ2h0IG9mIHJvdyAwIHRvIDQwIHBpeGVsc1xuICAgICAqIC8vIHNldCB0aGUgaW5pdGlhbCBoZWlnaHQgb2Ygcm93IDEgdG8gNTAgcGl4ZWxzXG4gICAgICogLy8gc2V0IHRoZSBpbml0aWFsIGhlaWdodCBvZiByb3cgMiB0byA2MCBwaXhlbHNcbiAgICAgKiBtYW51YWxSb3dSZXNpemU6IFs0MCwgNTAsIDYwXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtYW51YWxSb3dSZXNpemU6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYG1heENvbHNgIG9wdGlvbiBzZXRzIGEgbWF4aW11bSBudW1iZXIgb2YgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIFRoZSBgbWF4Q29sc2Agb3B0aW9uIGlzIHVzZWQ6XG4gICAgICogLSBBdCBpbml0aWFsaXphdGlvbjogaWYgdGhlIGBtYXhDb2xzYCB2YWx1ZSBpcyBsb3dlciB0aGFuIHRoZSBpbml0aWFsIG51bWJlciBvZiBjb2x1bW5zLFxuICAgICAqIEhhbmRzb250YWJsZSB0cmltcyBjb2x1bW5zIGZyb20gdGhlIHJpZ2h0LlxuICAgICAqIC0gQXQgcnVudGltZTogZm9yIGV4YW1wbGUsIHdoZW4gaW5zZXJ0aW5nIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IEluZmluaXR5XG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdG8gMzAwXG4gICAgICogbWF4Q29sczogMzAwLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1heENvbHM6IEluZmluaXR5LFxuICAgIC8qKlxuICAgICAqIFRoZSBgbWF4Um93c2Agb3B0aW9uIHNldHMgYSBtYXhpbXVtIG51bWJlciBvZiByb3dzLlxuICAgICAqXG4gICAgICogVGhlIGBtYXhSb3dzYCBvcHRpb24gaXMgdXNlZDpcbiAgICAgKiAtIEF0IGluaXRpYWxpemF0aW9uOiBpZiB0aGUgYG1heFJvd3NgIHZhbHVlIGlzIGxvd2VyIHRoYW4gdGhlIGluaXRpYWwgbnVtYmVyIG9mIHJvd3MsXG4gICAgICogSGFuZHNvbnRhYmxlIHRyaW1zIHJvd3MgZnJvbSB0aGUgYm90dG9tLlxuICAgICAqIC0gQXQgcnVudGltZTogZm9yIGV4YW1wbGUsIHdoZW4gaW5zZXJ0aW5nIHJvd3MuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IEluZmluaXR5XG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gMzAwXG4gICAgICogbWF4Um93czogMzAwLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1heFJvd3M6IEluZmluaXR5LFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbWVyZ2VDZWxsc2Agb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIFtgTWVyZ2VDZWxsc2BdKEAvYXBpL21lcmdlQ2VsbHMubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgbWVyZ2VDZWxsc2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgICB8IEVuYWJsZSB0aGUgW2BNZXJnZUNlbGxzYF0oQC9hcGkvbWVyZ2VDZWxscy5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICAgICAgICAgICAgIHwgRGlzYWJsZSB0aGUgW2BNZXJnZUNlbGxzYF0oQC9hcGkvbWVyZ2VDZWxscy5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IG9mIG9iamVjdHMgfCAtIEVuYWJsZSB0aGUgW2BNZXJnZUNlbGxzYF0oQC9hcGkvbWVyZ2VDZWxscy5tZCkgcGx1Z2luPGJyPi0gTWVyZ2Ugc3BlY2lmaWMgY2VsbHMgYXQgaW5pdGlhbGl6YXRpb24gfFxuICAgICAqXG4gICAgICogVG8gbWVyZ2Ugc3BlY2lmaWMgY2VsbHMgYXQgSGFuZHNvbnRhYmxlJ3MgaW5pdGlhbGl6YXRpb24sXG4gICAgICogc2V0IHRoZSBgbWVyZ2VDZWxsc2Agb3B0aW9uIHRvIGFuIGFycmF5IG9mIG9iamVjdHMsIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgICAqXG4gICAgICogfCBQcm9wZXJ0eSAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHJvd2AgICAgIHwgVGhlIHJvdyBpbmRleCBvZiB0aGUgbWVyZ2VkIHNlY3Rpb24ncyBiZWdpbm5pbmcgICAgICAgICAgICB8XG4gICAgICogfCBgY29sYCAgICAgfCBUaGUgY29sdW1uIGluZGV4IG9mIHRoZSBtZXJnZWQgc2VjdGlvbidzIGJlZ2lubmluZyAgICAgICAgIHxcbiAgICAgKiB8IGByb3dzcGFuYCB8IFRoZSB3aWR0aCAoYXMgYSBudW1iZXIgb2Ygcm93cykgb2YgdGhlIG1lcmdlZCBzZWN0aW9uICAgICAgfFxuICAgICAqIHwgYGNvbHNwYW5gIHwgVGhlIGhlaWdodCAoYXMgYSBudW1iZXIgb2YgY29sdW1ucyApIG9mIHRoZSBtZXJnZWQgc2VjdGlvbiB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbTWVyZ2UgY2VsbHNdKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvbWVyZ2UtY2VsbHMvbWVyZ2UtY2VsbHMubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxvYmplY3RbXX1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBNZXJnZUNlbGxzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBgTWVyZ2VDZWxsc2AgcGx1Z2luXG4gICAgICogbWVyZ2VDZWxsczogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYE1lcmdlQ2VsbHNgIHBsdWdpblxuICAgICAqIC8vIGFuZCBtZXJnZSBzcGVjaWZpYyBjZWxscyBhdCBpbml0aWFsaXphdGlvblxuICAgICAqIG1lcmdlQ2VsbHM6IFtcbiAgICAgKiAgIC8vIG1lcmdlIGNlbGxzIGZyb20gY2VsbCAoMSwxKSB0byBjZWxsICgzLDMpXG4gICAgICogICB7cm93OiAxLCBjb2w6IDEsIHJvd3NwYW46IDMsIGNvbHNwYW46IDN9LFxuICAgICAqICAgLy8gbWVyZ2UgY2VsbHMgZnJvbSBjZWxsICgzLDQpIHRvIGNlbGwgKDIsMilcbiAgICAgKiAgIHtyb3c6IDMsIGNvbDogNCwgcm93c3BhbjogMiwgY29sc3BhbjogMn0sXG4gICAgICogICAvLyBtZXJnZSBjZWxscyBmcm9tIGNlbGwgKDUsNikgdG8gY2VsbCAoMywzKVxuICAgICAqICAge3JvdzogNSwgY29sOiA2LCByb3dzcGFuOiAzLCBjb2xzcGFuOiAzfVxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWVyZ2VDZWxsczogZmFsc2UsXG4gICAgLyoqXG4gICAgICogVGhlIGBtaW5Db2xzYCBvcHRpb24gc2V0cyBhIG1pbmltdW0gbnVtYmVyIG9mIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBUaGUgYG1pbkNvbHNgIG9wdGlvbiBpcyB1c2VkOlxuICAgICAqIC0gQXQgaW5pdGlhbGl6YXRpb246IGlmIHRoZSBgbWluQ29sc2AgdmFsdWUgaXMgaGlnaGVyIHRoYW4gdGhlIGluaXRpYWwgbnVtYmVyIG9mIGNvbHVtbnMsXG4gICAgICogSGFuZHNvbnRhYmxlIGFkZHMgZW1wdHkgY29sdW1ucyB0byB0aGUgcmlnaHQuXG4gICAgICogLSBBdCBydW50aW1lOiBmb3IgZXhhbXBsZSwgd2hlbiByZW1vdmluZyBjb2x1bW5zLlxuICAgICAqXG4gICAgICogVGhlIGBtaW5Db2xzYCBvcHRpb24gd29ya3Mgb25seSB3aGVuIHlvdXIgW2BkYXRhYF0oI2RhdGEpIGlzIGFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cykuXG4gICAgICogV2hlbiB5b3VyIFtgZGF0YWBdKCNkYXRhKSBpcyBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cyksXG4gICAgICogeW91IGNhbiBvbmx5IGhhdmUgYXMgbWFueSBjb2x1bW5zIGFzIGRlZmluZWQgaW46XG4gICAgICogLSBUaGUgZmlyc3QgZGF0YSByb3dcbiAgICAgKiAtIFRoZSBbYGRhdGFTY2hlbWFgXSgjZGF0YVNjaGVtYSkgb3B0aW9uXG4gICAgICogLSBUaGUgW2Bjb2x1bW5zYF0oI2NvbHVtbnMpIG9wdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdG8gMTBcbiAgICAgKiBtaW5Db2xzOiAxMCxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtaW5Db2xzOiAwLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbWluUm93c2Agb3B0aW9uIHNldHMgYSBtaW5pbXVtIG51bWJlciBvZiByb3dzLlxuICAgICAqXG4gICAgICogVGhlIGBtaW5Sb3dzYCBvcHRpb24gaXMgdXNlZDpcbiAgICAgKiAtIEF0IGluaXRpYWxpemF0aW9uOiBpZiB0aGUgYG1pblJvd3NgIHZhbHVlIGlzIGhpZ2hlciB0aGFuIHRoZSBpbml0aWFsIG51bWJlciBvZiByb3dzLFxuICAgICAqIEhhbmRzb250YWJsZSBhZGRzIGVtcHR5IHJvd3MgYXQgdGhlIGJvdHRvbS5cbiAgICAgKiAtIEF0IHJ1bnRpbWU6IGZvciBleGFtcGxlLCB3aGVuIHJlbW92aW5nIHJvd3MuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgbWluaW11bSBudW1iZXIgb2Ygcm93cyB0byAxMFxuICAgICAqIG1pblJvd3M6IDEwLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1pblJvd3M6IDAsXG4gICAgLyoqXG4gICAgICogVGhlIGBtaW5TcGFyZUNvbHNgIG9wdGlvbiBzZXRzIGEgbWluaW11bSBudW1iZXIgb2YgZW1wdHkgY29sdW1uc1xuICAgICAqIGF0IHRoZSBncmlkJ3MgcmlnaHQtaGFuZCBlbmQuXG4gICAgICpcbiAgICAgKiBJZiB0aGVyZSBhbHJlYWR5IGFyZSBvdGhlciBlbXB0eSBjb2x1bW5zIGF0IHRoZSBncmlkJ3MgcmlnaHQtaGFuZCBlbmQsXG4gICAgICogdGhleSBhcmUgY291bnRlZCBpbnRvIHRoZSBgbWluU3BhcmVDb2xzYCB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBjYW4ndCBleGNlZWQgdGhlIFtgbWF4Q29sc2BdKCNtYXhDb2xzKSB2YWx1ZS5cbiAgICAgKlxuICAgICAqIFRoZSBgbWluU3BhcmVDb2xzYCBvcHRpb24gd29ya3Mgb25seSB3aGVuIHlvdXIgW2BkYXRhYF0oI2RhdGEpIGlzIGFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cykuXG4gICAgICogV2hlbiB5b3VyIFtgZGF0YWBdKCNkYXRhKSBpcyBhbiBbYXJyYXkgb2Ygb2JqZWN0c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2Ytb2JqZWN0cyksXG4gICAgICogeW91IGNhbiBvbmx5IGhhdmUgYXMgbWFueSBjb2x1bW5zIGFzIGRlZmluZWQgaW46XG4gICAgICogLSBUaGUgZmlyc3QgZGF0YSByb3dcbiAgICAgKiAtIFRoZSBbYGRhdGFTY2hlbWFgXSgjZGF0YVNjaGVtYSkgb3B0aW9uXG4gICAgICogLSBUaGUgW2Bjb2x1bW5zYF0oI2NvbHVtbnMpIG9wdGlvblxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBhdCBIYW5kc29udGFibGUncyBpbml0aWFsaXphdGlvbiwgYWRkIGF0IGxlYXN0IDMgZW1wdHkgY29sdW1ucyBvbiB0aGUgcmlnaHRcbiAgICAgKiBtaW5TcGFyZUNvbHM6IDMsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWluU3BhcmVDb2xzOiAwLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbWluU3BhcmVSb3dzYCBvcHRpb24gc2V0cyBhIG1pbmltdW0gbnVtYmVyIG9mIGVtcHR5IHJvd3NcbiAgICAgKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBncmlkLlxuICAgICAqXG4gICAgICogSWYgdGhlcmUgYWxyZWFkeSBhcmUgb3RoZXIgZW1wdHkgcm93cyBhdCB0aGUgYm90dG9tLFxuICAgICAqIHRoZXkgYXJlIGNvdW50ZWQgaW50byB0aGUgYG1pblNwYXJlUm93c2AgdmFsdWUuXG4gICAgICpcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgY2FuJ3QgZXhjZWVkIHRoZSBbYG1heFJvd3NgXSgjbWF4Um93cykgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGF0IEhhbmRzb250YWJsZSdzIGluaXRpYWxpemF0aW9uLCBhZGQgYXQgbGVhc3QgMyBlbXB0eSByb3dzIGF0IHRoZSBib3R0b21cbiAgICAgKiBtaW5TcGFyZVJvd3M6IDMsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbWluU3BhcmVSb3dzOiAwLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgbXVsdGlDb2x1bW5Tb3J0aW5nYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BNdWx0aUNvbHVtblNvcnRpbmdgXShAL2FwaS9jb2x1bW5Tb3J0aW5nLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYG11bHRpQ29sdW1uU29ydGluZ2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgICAgIHwgRW5hYmxlIHRoZSBbYE11bHRpQ29sdW1uU29ydGluZ2BdKEAvYXBpL211bHRpQ29sdW1uU29ydGluZy5tZCkgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgZmFsc2VgICAgIHwgRGlzYWJsZSB0aGUgW2BNdWx0aUNvbHVtblNvcnRpbmdgXShAL2FwaS9tdWx0aUNvbHVtblNvcnRpbmcubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBvYmplY3QgIHwgLSBFbmFibGUgdGhlIFtgTXVsdGlDb2x1bW5Tb3J0aW5nYF0oQC9hcGkvbXVsdGlDb2x1bW5Tb3J0aW5nLm1kKSBwbHVnaW48YnI+LSBNb2RpZnkgdGhlIFtgTXVsdGlDb2x1bW5Tb3J0aW5nYF0oQC9hcGkvbXVsdGlDb2x1bW5Tb3J0aW5nLm1kKSBwbHVnaW4gb3B0aW9ucyB8XG4gICAgICpcbiAgICAgKiBJZiB5b3Ugc2V0IHRoZSBgbXVsdGlDb2x1bW5Tb3J0aW5nYCBvcHRpb24gdG8gYW4gb2JqZWN0LFxuICAgICAqIHlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgW2BNdWx0aUNvbHVtblNvcnRpbmdgXShAL2FwaS9tdWx0aUNvbHVtblNvcnRpbmcubWQpIHBsdWdpbiBvcHRpb25zOlxuICAgICAqXG4gICAgICogfCBPcHRpb24gICAgICAgICAgICAgICAgICAgfCBQb3NzaWJsZSBzZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBpbmRpY2F0b3JgICAgICAgICAgICAgICB8IGB0cnVlYDogRGlzcGxheSB0aGUgYXJyb3cgaWNvbiBpbiB0aGUgY29sdW1uIGhlYWRlciwgdG8gaW5kaWNhdGUgYSBzb3J0YWJsZSBjb2x1bW48YnI+YGZhbHNlYDogRG9uJ3QgZGlzcGxheSB0aGUgYXJyb3cgaWNvbiBpbiB0aGUgY29sdW1uIGhlYWRlciB8XG4gICAgICogfCBgaGVhZGVyQWN0aW9uYCAgICAgICAgICAgfCBgdHJ1ZWA6IEVuYWJsZSBjbGlja2luZyBvbiB0aGUgY29sdW1uIGhlYWRlciB0byBzb3J0IHRoZSBjb2x1bW48YnI+YGZhbHNlYDogRGlzYWJsZSBjbGlja2luZyBvbiB0aGUgY29sdW1uIGhlYWRlciB0byBzb3J0IHRoZSBjb2x1bW4gICAgICAgICAgICAgfFxuICAgICAqIHwgYHNvcnRFbXB0eUNlbGxzYCAgICAgICAgIHwgYHRydWVgOiBTb3J0IGVtcHR5IGNlbGxzIGFzIHdlbGw8YnI+YGZhbHNlYDogUGxhY2UgZW1wdHkgY2VsbHMgYXQgdGhlIGVuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBjb21wYXJlRnVuY3Rpb25GYWN0b3J5YCB8IEEgW2N1c3RvbSBjb21wYXJlIGZ1bmN0aW9uXShAL2d1aWRlcy9yb3dzL3Jvd3Mtc29ydGluZy9yb3dzLXNvcnRpbmcubWQjYWRkLWEtY3VzdG9tLWNvbXBhcmF0b3IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYG11bHRpQ29sdW1uU29ydGluZ2Agb3B0aW9uIHRvIGFuIG9iamVjdCxcbiAgICAgKiB5b3UgY2FuIGFsc28gc29ydCBpbmRpdmlkdWFsIGNvbHVtbnMgYXQgSGFuZHNvbnRhYmxlJ3MgaW5pdGlhbGl6YXRpb24uXG4gICAgICogSW4gdGhlIGBtdWx0aUNvbHVtblNvcnRpbmdgIG9iamVjdCwgYWRkIGFuIG9iamVjdCBuYW1lZCBgaW5pdGlhbENvbmZpZ2AsXG4gICAgICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiB8IE9wdGlvbiAgICAgIHwgUG9zc2libGUgc2V0dGluZ3MgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgY29sdW1uYCAgICB8IEEgbnVtYmVyICAgICAgICAgICAgfCBUaGUgaW5kZXggb2YgdGhlIGNvbHVtbiB0aGF0IHlvdSB3YW50IHRvIHNvcnQgYXQgaW5pdGlhbGl6YXRpb24gIHxcbiAgICAgKiB8IGBzb3J0T3JkZXJgIHwgYCdhc2MnYCBcXHwgYCdkZXNjJ2AgfCBUaGUgc29ydGluZyBvcmRlcjo8YnI+YCdhc2MnYDogYXNjZW5kaW5nPGJyPmAnZGVzYydgOiBkZXNjZW5kaW5nIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtSb3dzIHNvcnRpbmddKEAvZ3VpZGVzL3Jvd3Mvcm93cy1zb3J0aW5nL3Jvd3Mtc29ydGluZy5tZClcbiAgICAgKiAtIFtgY29sdW1uU29ydGluZ2BdKCNjb2x1bW5Tb3J0aW5nKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58b2JqZWN0fVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBNdWx0aUNvbHVtblNvcnRpbmdcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBNdWx0aUNvbHVtblNvcnRpbmdgIHBsdWdpblxuICAgICAqIG11bHRpQ29sdW1uU29ydGluZzogdHJ1ZVxuICAgICAqXG4gICAgICogLy8gZW5hYmxlIHRoZSBgTXVsdGlDb2x1bW5Tb3J0aW5nYCBwbHVnaW4gd2l0aCBjdXN0b20gY29uZmlndXJhdGlvblxuICAgICAqIG11bHRpQ29sdW1uU29ydGluZzoge1xuICAgICAqICAgLy8gc29ydCBlbXB0eSBjZWxscyBhcyB3ZWxsXG4gICAgICogICBzb3J0RW1wdHlDZWxsczogdHJ1ZSxcbiAgICAgKiAgIC8vIGRpc3BsYXkgdGhlIGFycm93IGljb24gaW4gdGhlIGNvbHVtbiBoZWFkZXJcbiAgICAgKiAgIGluZGljYXRvcjogdHJ1ZSxcbiAgICAgKiAgIC8vIGRpc2FibGUgY2xpY2tpbmcgb24gdGhlIGNvbHVtbiBoZWFkZXIgdG8gc29ydCB0aGUgY29sdW1uXG4gICAgICogICBoZWFkZXJBY3Rpb246IGZhbHNlLFxuICAgICAqICAgLy8gYWRkIGEgY3VzdG9tIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgKiAgIGNvbXBhcmVGdW5jdGlvbkZhY3Rvcnkoc29ydE9yZGVyLCBjb2x1bW5NZXRhKSB7XG4gICAgICogICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgbmV4dFZhbHVlKSB7XG4gICAgICogICAgICAgLy8gc29tZSB2YWx1ZSBjb21wYXJpc29ucyB3aGljaCB3aWxsIHJldHVybiAtMSwgMCBvciAxLi4uXG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBNdWx0aUNvbHVtblNvcnRpbmdgIHBsdWdpblxuICAgICAqIG11bHRpQ29sdW1uU29ydGluZzoge1xuICAgICAqICAgLy8gYXQgaW5pdGlhbGl6YXRpb24sIHNvcnQgY29sdW1uIDEgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAgICogICBpbml0aWFsQ29uZmlnOiB7XG4gICAgICogICAgIGNvbHVtbjogMSxcbiAgICAgKiAgICAgc29ydE9yZGVyOiAnYXNjJ1xuICAgICAqICAgfSxcbiAgICAgKiAgIC8vIGF0IGluaXRpYWxpemF0aW9uLCBzb3J0IGNvbHVtbiAyIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgKiAgIGluaXRpYWxDb25maWc6IHtcbiAgICAgKiAgICAgY29sdW1uOiAyLFxuICAgICAqICAgICBzb3J0T3JkZXI6ICdkZXNjJ1xuICAgICAqICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtdWx0aUNvbHVtblNvcnRpbmc6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBgbmF2aWdhYmxlSGVhZGVyc2Agb3B0aW9uIGxldHMgeW91IG5hdmlnYXRlIFtyb3cgaGVhZGVyc10oQC9ndWlkZXMvcm93cy9yb3ctaGVhZGVyL3Jvdy1oZWFkZXIubWQpIGFuZCBbY29sdW1uIGhlYWRlcnNdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLWhlYWRlci9jb2x1bW4taGVhZGVyLm1kKSwgdXNpbmcgdGhlIGFycm93IGtleXMgb3IgdGhlIDxrYmQ+KipUYWIqKjwva2JkPiBrZXkgKGlmIHRoZSBbYHRhYk5hdmlnYXRpb25gXSgjdGFiTmF2aWdhdGlvbikgb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWApLlxuICAgICAqXG4gICAgICogQHNpbmNlIDE0LjAuMFxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyB5b3UgY2FuIG5hdmlnYXRlIHJvdyBhbmQgY29sdW1uIGhlYWRlcnMgd2l0aCB0aGUga2V5Ym9hcmRcbiAgICAgKiBuYXZpZ2FibGVIZWFkZXJzOiB0cnVlLFxuICAgICAqXG4gICAgICogLy8gZGVmYXVsdCBiZWhhdmlvcjogeW91IGNhbid0IG5hdmlnYXRlIHJvdyBhbmQgY29sdW1uIGhlYWRlcnMgd2l0aCB0aGUga2V5Ym9hcmRcbiAgICAgKiBuYXZpZ2FibGVIZWFkZXJzOiBmYWxzZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBuYXZpZ2FibGVIZWFkZXJzOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBgZmFsc2VgLCB0aGUgYHRhYk5hdmlnYXRpb25gIG9wdGlvbiBjaGFuZ2VzIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAgICAgKiA8a2JkPlRhYjwva2JkPiBhbmQgPGtiZD5TaGlmdDwva2JkPis8a2JkPlRhYjwva2JkPiBrZXlib2FyZCBzaG9ydGN1dHMuIFRoZSBIYW5kc29udGFibGVcbiAgICAgKiBubyBtb3JlIGNhcHR1cmVzIHRoYXQgc2hvcnRjdXRzIHRvIG1ha2UgdGhlIGdyaWQgbmF2aWdhdGlvbiBhdmFpbGFibGUgKGB0YWJOYXZpZ2F0aW9uOiB0cnVlYClcbiAgICAgKiBidXQgcmV0dXJucyBjb250cm9sIHRvIHRoZSBicm93c2VyIHNvIHRoZSBuYXRpdmUgcGFnZSBuYXZpZ2F0aW9uIGlzIHBvc3NpYmxlLlxuICAgICAqXG4gICAgICogQHNpbmNlIDE0LjAuMFxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHlvdSBjYW4ndCBuYXZpZ2F0ZSByb3cgYW5kIGNvbHVtbiBoZWFkZXJzIHVzaW5nIDxrYmQ+VGFiPC9rYmQ+IG9yIDxrYmQ+U2hpZnQ8L2tiZD4rPGtiZD5UYWI8L2tiZD4ga2V5Ym9hcmQgc2hvcnRjdXRzXG4gICAgICogdGFiTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICpcbiAgICAgKiAvLyBkZWZhdWx0IGJlaGF2aW9yOiB5b3UgY2FuIG5hdmlnYXRlIHJvdyBhbmQgY29sdW1uIGhlYWRlcnMgdXNpbmcgPGtiZD5UYWI8L2tiZD4gb3IgPGtiZD5TaGlmdDwva2JkPis8a2JkPlRhYjwva2JkPiBrZXlib2FyZCBzaG9ydGN1dHNcbiAgICAgKiB0YWJOYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRhYk5hdmlnYXRpb246IHRydWUsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBuZXN0ZWRIZWFkZXJzYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BOZXN0ZWRIZWFkZXJzYF0oQC9hcGkvbmVzdGVkSGVhZGVycy5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBuZXN0ZWRIZWFkZXJzYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBEaXNhYmxlIHRoZSBbYE5lc3RlZEhlYWRlcnNgXShAL2FwaS9uZXN0ZWRIZWFkZXJzLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgIHwgLSBFbmFibGUgdGhlIFtgTmVzdGVkSGVhZGVyc2BdKEAvYXBpL25lc3RlZEhlYWRlcnMubWQpIHBsdWdpbjxicj4tIERvbid0IGNvbmZpZ3VyZSBhbnkgbmVzdGVkIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBcnJheSBvZiBhcnJheXMgICB8IC0gRW5hYmxlIHRoZSBbYE5lc3RlZEhlYWRlcnNgXShAL2FwaS9uZXN0ZWRIZWFkZXJzLm1kKSBwbHVnaW48YnI+LSBDb25maWd1cmUgaGVhZGVycyB0aGF0IGFyZSBuZXN0ZWQgb24gSGFuZHNvbnRhYmxlJ3MgaW5pdGlhbGl6YXRpb24gfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYG5lc3RlZEhlYWRlcnNgIG9wdGlvbiB0byBhbiBhcnJheSBvZiBhcnJheXMsIGVhY2ggYXJyYXkgY29uZmlndXJlcyBvbmUgc2V0IG9mIG5lc3RlZCBoZWFkZXJzLlxuICAgICAqXG4gICAgICogRWFjaCBhcnJheSBlbGVtZW50IGNvbmZpZ3VyZXMgb25lIGhlYWRlciwgYW5kIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgQXJyYXkgZWxlbWVudCB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIHN0cmluZyAgICAgIHwgVGhlIGhlYWRlcidzIGxhYmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgQW4gb2JqZWN0ICAgICB8IFByb3BlcnRpZXM6PGJyPmBsYWJlbGAgKHN0cmluZyk6IHRoZSBoZWFkZXIncyBsYWJlbDxicj5gY29sc3BhbmAgKGludGVnZXIpOiB0aGUgY29sdW1uIHdpZHRoIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgTmVzdGVkSGVhZGVyc2BdKEAvYXBpL25lc3RlZEhlYWRlcnMubWQpXG4gICAgICogLSBbQ29sdW1uIGdyb3VwczogTmVzdGVkIGhlYWRlcnNdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLWdyb3Vwcy9jb2x1bW4tZ3JvdXBzLm1kI25lc3RlZC1oZWFkZXJzKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58QXJyYXlbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgTmVzdGVkSGVhZGVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIG5lc3RlZEhlYWRlcnM6IFtcbiAgICAgKiAgIFsnQScsIHtsYWJlbDogJ0InLCBjb2xzcGFuOiA4fSwgJ0MnXSxcbiAgICAgKiAgIFsnRCcsIHtsYWJlbDogJ0UnLCBjb2xzcGFuOiA0fSwge2xhYmVsOiAnRicsIGNvbHNwYW46IDR9LCAnRyddLFxuICAgICAqICAgWydIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ1InLCAnUycsICdUJ11cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG5lc3RlZEhlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYG5lc3RlZFJvd3NgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBbYE5lc3RlZFJvd3NgXShAL2FwaS9uZXN0ZWRSb3dzLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYG5lc3RlZFJvd3NgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBEaXNhYmxlIHRoZSBbYE5lc3RlZFJvd3NgXShAL2FwaS9uZXN0ZWRSb3dzLm1kKSBwbHVnaW4gfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBFbmFibGUgdGhlIFtgTmVzdGVkUm93c2BdKEAvYXBpL25lc3RlZFJvd3MubWQpIHBsdWdpbiAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1BsdWdpbnM6IGBOZXN0ZWRSb3dzYF0oQC9ndWlkZXMvcm93cy9yb3ctcGFyZW50LWNoaWxkL3Jvdy1wYXJlbnQtY2hpbGQubWQpXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBgTmVzdGVkUm93c2AgcGx1Z2luXG4gICAgICogbmVzdGVkUm93czogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGNhdGVnb3J5IE5lc3RlZFJvd3NcbiAgICAgKi9cbiAgICBuZXN0ZWRSb3dzOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBub1dvcmRXcmFwQ2xhc3NOYW1lYCBvcHRpb24gbGV0cyB5b3UgYWRkIGEgQ1NTIGNsYXNzIG5hbWVcbiAgICAgKiB0byBlYWNoIGNlbGwgdGhhdCBoYXMgdGhlIFtgd29yZFdyYXBgXSgjd29yZFdyYXApIG9wdGlvbiBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgd29yZFdyYXBgXSgjd29yZFdyYXApXG4gICAgICogLSBbYGN1cnJlbnRSb3dDbGFzc05hbWVgXSgjY3VycmVudFJvd0NsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudENvbENsYXNzTmFtZWBdKCNjdXJyZW50Q29sQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50SGVhZGVyQ2xhc3NOYW1lYF0oI2N1cnJlbnRIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGludmFsaWRDZWxsQ2xhc3NOYW1lYF0oI2ludmFsaWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2ByZWFkT25seUNlbGxDbGFzc05hbWVgXSgjcmVhZE9ubHlDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bjb21tZW50ZWRDZWxsQ2xhc3NOYW1lYF0oI2NvbW1lbnRlZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYG5vV29yZFdyYXBDbGFzc05hbWVgXSgjbm9Xb3JkV3JhcENsYXNzTmFtZSlcbiAgICAgKiAtIFtgVGFibGVDbGFzc05hbWVgXSgjVGFibGVDbGFzc05hbWUpXG4gICAgICogLSBbYGNsYXNzTmFtZWBdKCNjbGFzc05hbWUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdodE5vV3JhcCdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhbiBgaXMtbm9XcmFwQ2VsbGAgQ1NTIGNsYXNzIG5hbWVcbiAgICAgKiAvLyB0byBlYWNoIGNlbGwgdGhhdCBkb2Vzbid0IHdyYXAgY29udGVudFxuICAgICAqIG5vV29yZFdyYXBDbGFzc05hbWU6ICdpcy1ub1dyYXBDZWxsJyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBub1dvcmRXcmFwQ2xhc3NOYW1lOiAnaHROb1dyYXAnLFxuICAgIC8qKlxuICAgICAqIFRoZSBgbnVtZXJpY0Zvcm1hdGAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIG51bWJlciBmb3JtYXQgYW5kIHRoZSBjdXJyZW5jeSBmb3JtYXRcbiAgICAgKiBvZiBbYG51bWVyaWNgXShAL2d1aWRlcy9jZWxsLXR5cGVzL251bWVyaWMtY2VsbC10eXBlL251bWVyaWMtY2VsbC10eXBlLm1kKSBjZWxsc2AgZGlzcGxheWVkIG91dHB1dFxuICAgICAqIGluIHRoZSBudW1lcmljIGNlbGwgcmVuZGVyZXIuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYG51bWVyaWNGb3JtYXRgIG9wdGlvbiB0byBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgICpcbiAgICAgKiB8IFByb3BlcnR5ICAgIHwgUG9zc2libGUgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgcGF0dGVybmAgICB8IEFsbCBbYG51bWJyby5qc2AgbnVtYmVyIGZvcm1hdHNdKGh0dHBzOi8vbnVtYnJvanMuY29tL2Zvcm1hdC5odG1sI251bWJlcnMpICAgIHwgTnVtYmVyIGZvcm1hdCAgIHxcbiAgICAgKiB8IGBjdWx0dXJlYCAgIHwgQWxsIFtgbnVtYnJvLmpzYCBjdXJyZW5jeSBmb3JtYXRzXShodHRwczovL251bWJyb2pzLmNvbS9mb3JtYXQuaHRtbCNjdXJyZW5jeSkgfCBDdXJyZW5jeSBmb3JtYXQgfFxuICAgICAqXG4gICAgICogVGhlIGBudW1lcmljRm9ybWF0YCBvcHRpb24gYXMgbm8gZWZmZWN0IG9uIHRoZSBudW1lcmljIGNlbGwgZWRpdG9yLlxuICAgICAqXG4gICAgICogSW4gdGhlIHNvdXJjZSBkYXRhLCBudW1lcmljIGRhdGEgaXMgc3RvcmVkIGFzIEphdmFTY3JpcHQgbnVtYmVycy5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtOdW1lcmljIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9udW1lcmljLWNlbGwtdHlwZS9udW1lcmljLWNlbGwtdHlwZS5tZClcbiAgICAgKiAtIFtUaGlyZC1wYXJ0eSBsaWNlbnNlc10oQC9ndWlkZXMvdGVjaG5pY2FsLXNwZWNpZmljYXRpb24vdGhpcmQtcGFydHktbGljZW5zZXMvdGhpcmQtcGFydHktbGljZW5zZXMubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAc2luY2UgMC4zNS4wXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBudW1lcmljYFxuICAgICAqICAgICB0eXBlOiAnbnVtZXJpYycsXG4gICAgICogICAgIC8vIHNldCB0aGUgYG51bWVyaWNGb3JtYXRgIG9wdGlvbiBmb3IgZXZlcnkgYG51bWVyaWNgIGNlbGwgb2YgdGhpcyBjb2x1bW5cbiAgICAgKiAgICAgbnVtZXJpY0Zvcm1hdDoge1xuICAgICAqICAgICAgIC8vIHNldCB0aGUgbnVtYmVyIGZvcm1hdFxuICAgICAqICAgICAgIHBhdHRlcm46ICcwLDAwJyxcbiAgICAgKiAgICAgICAvLyBzZXQgdGhlIGN1cnJlbmN5IGZvcm1hdFxuICAgICAqICAgICAgIGN1bHR1cmU6ICdlbi1VUydcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbnVtZXJpY0Zvcm1hdDogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIElmIHRoZSBgb2JzZXJ2ZURPTVZpc2liaWxpdHlgIG9wdGlvbiBpcyBzZXQgdG8gYHRydWVgLFxuICAgICAqIEhhbmRzb250YWJsZSByZXJlbmRlcnMgZXZlcnkgdGltZSBpdCBkZXRlY3RzIHRoYXQgdGhlIGdyaWQgd2FzIG1hZGUgdmlzaWJsZSBpbiB0aGUgRE9NLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZG9uJ3QgcmVyZW5kZXIgdGhlIGdyaWQgb24gdmlzaWJpbGl0eSBjaGFuZ2VzXG4gICAgICogb2JzZXJ2ZURPTVZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9ic2VydmVET01WaXNpYmlsaXR5OiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgb3V0c2lkZUNsaWNrRGVzZWxlY3RzYCBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgdG8gdGhlIGN1cnJlbnQgW3NlbGVjdGlvbl0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLm1kKVxuICAgICAqIHdoZW4geW91IGNsaWNrIG91dHNpZGUgb2YgdGhlIGdyaWQuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYG91dHNpZGVDbGlja0Rlc2VsZWN0c2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgfCBPbiBhIG1vdXNlIGNsaWNrIG91dHNpZGUgb2YgdGhlIGdyaWQsIGNsZWFyIHRoZSBjdXJyZW50IFtzZWxlY3Rpb25dKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvc2VsZWN0aW9uL3NlbGVjdGlvbi5tZCkgfFxuICAgICAqIHwgYGZhbHNlYCAgICAgICAgICB8IE9uIGEgbW91c2UgY2xpY2sgb3V0c2lkZSBvZiB0aGUgZ3JpZCwga2VlcCB0aGUgY3VycmVudCBbc2VsZWN0aW9uXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL3NlbGVjdGlvbi9zZWxlY3Rpb24ubWQpICB8XG4gICAgICogfCBBIGZ1bmN0aW9uICAgICAgIHwgQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjbGljayBldmVudCB0YXJnZXQgYW5kIHJldHVybnMgYSBib29sZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58RnVuY3Rpb259XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gb24gYSBtb3VzZSBjbGljayBvdXRzaWRlIG9mIHRoZSBncmlkLCBjbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgKiBvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6IHRydWUsXG4gICAgICpcbiAgICAgKiAvLyBvbiBhIG1vdXNlIGNsaWNrIG91dHNpZGUgb2YgdGhlIGdyaWQsIGtlZXAgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICogb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiBmYWxzZSxcbiAgICAgKlxuICAgICAqIC8vIHRha2UgdGhlIGNsaWNrIGV2ZW50IHRhcmdldCBhbmQgcmV0dXJuIGBmYWxzZWBcbiAgICAgKiBvdXRzaWRlQ2xpY2tEZXNlbGVjdHMoZXZlbnQpIHtcbiAgICAgKiAgIHJldHVybiBmYWxzZTtcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyB0YWtlIHRoZSBjbGljayBldmVudCB0YXJnZXQgYW5kIHJldHVybiBgdHJ1ZWBcbiAgICAgKiBvdXRzaWRlQ2xpY2tEZXNlbGVjdHMoZXZlbnQpIHtcbiAgICAgKiAgIHJldHVybiBmYWxzZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgcGVyc2lzdGVudFN0YXRlYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BQZXJzaXN0ZW50U3RhdGVgXShAL2FwaS9wZXJzaXN0ZW50U3RhdGUubWQpIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgcGVyc2lzdGVudFN0YXRlYCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IERpc2FibGUgdGhlIFtgUGVyc2lzdGVudFN0YXRlYF0oQC9hcGkvcGVyc2lzdGVudFN0YXRlLm1kKSBwbHVnaW4gfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBFbmFibGUgdGhlIFtgUGVyc2lzdGVudFN0YXRlYF0oQC9hcGkvcGVyc2lzdGVudFN0YXRlLm1kKSBwbHVnaW4gIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtTYXZpbmcgZGF0YTogU2F2aW5nIGRhdGEgbG9jYWxseV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL3NhdmluZy1kYXRhL3NhdmluZy1kYXRhLm1kI3NhdmUtZGF0YS1sb2NhbGx5KVxuICAgICAqIC0gW1BsdWdpbnM6IGBQZXJzaXN0ZW50U3RhdGVgXShAL2FwaS9wZXJzaXN0ZW50U3RhdGUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBQZXJzaXN0ZW50U3RhdGVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBlbmFibGUgdGhlIGBQZXJzaXN0ZW50U3RhdGVgIHBsdWdpblxuICAgICAqIHBlcnNpc3RlbnRTdGF0ZTogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwZXJzaXN0ZW50U3RhdGU6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYHBsYWNlaG9sZGVyYCBvcHRpb24gbGV0cyB5b3UgZGlzcGxheSBwbGFjZWhvbGRlciB0ZXh0IGluIGV2ZXJ5IGVtcHR5IGNlbGwuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHBsYWNlaG9sZGVyYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICB8IEV4YW1wbGUgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IEEgbm9uLWVtcHR5IHN0cmluZyB8IGAnRW1wdHkgY2VsbCdgIHwgRGlzcGxheSBgRW1wdHkgY2VsbGAgdGV4dCBpbiBlbXB0eSBjZWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEEgbm9uLXN0cmluZyB2YWx1ZSB8IGAwMDBgICAgICAgICAgIHwgRGlzcGxheSBgMDAwYCB0ZXh0IGluIGVtcHR5IGNlbGxzIChub24tc3RyaW5nIHZhbHVlcyBnZXQgc3RyaW5naWZpZWQpIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lYF0oI3BsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBkaXNwbGF5ICdFbXB0eSBjZWxsJyB0ZXh0XG4gICAgICogLy8gaW4gZXZlcnkgZW1wdHkgY2VsbCBvZiB0aGUgZW50aXJlIGdyaWRcbiAgICAgKiBwbGFjZWhvbGRlcjogJ0VtcHR5IGNlbGwnLFxuICAgICAqXG4gICAgICogLy8gb3JcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIGRhdGE6ICdkYXRlJyxcbiAgICAgKiAgICAgZGF0ZUZvcm1hdDogJ0REL01NL1lZWVknLFxuICAgICAqICAgICAvLyBkaXNwbGF5ICdFbXB0eSBkYXRlIGNlbGwnIHRleHRcbiAgICAgKiAgICAgLy8gaW4gZXZlcnkgZW1wdHkgY2VsbCBvZiB0aGUgYGRhdGVgIGNvbHVtblxuICAgICAqICAgICBwbGFjZWhvbGRlcjogJ0VtcHR5IGRhdGUgY2VsbCdcbiAgICAgKiAgIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGBwbGFjZWhvbGRlckNlbGxDbGFzc05hbWVgIG9wdGlvbiBsZXRzIHlvdSBhZGQgYSBDU1MgY2xhc3MgbmFtZSB0byBjZWxsc1xuICAgICAqIHRoYXQgY29udGFpbiBbYHBsYWNlaG9sZGVyYF0oI3BsYWNlaG9sZGVyKSB0ZXh0LlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NlbGwgdmFsaWRhdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLXZhbGlkYXRvci9jZWxsLXZhbGlkYXRvci5tZClcbiAgICAgKiAtIFtgcGxhY2Vob2xkZXJgXSgjcGxhY2Vob2xkZXIpXG4gICAgICogLSBbYGN1cnJlbnRSb3dDbGFzc05hbWVgXSgjY3VycmVudFJvd0NsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudEhlYWRlckNsYXNzTmFtZWBdKCNjdXJyZW50SGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BhY3RpdmVIZWFkZXJDbGFzc05hbWVgXSgjYWN0aXZlSGVhZGVyQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50Q29sQ2xhc3NOYW1lYF0oI2N1cnJlbnRDb2xDbGFzc05hbWUpXG4gICAgICogLSBbYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWBdKCNyZWFkT25seUNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYGNvbW1lbnRlZENlbGxDbGFzc05hbWVgXSgjY29tbWVudGVkQ2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgbm9Xb3JkV3JhcENsYXNzTmFtZWBdKCNub1dvcmRXcmFwQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BUYWJsZUNsYXNzTmFtZWBdKCNUYWJsZUNsYXNzTmFtZSlcbiAgICAgKiAtIFtgY2xhc3NOYW1lYF0oI2NsYXNzTmFtZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2h0UGxhY2Vob2xkZXInXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBhZGQgYSBgaGFzLXBsYWNlaG9sZGVyYCBDU1MgY2xhc3MgbmFtZVxuICAgICAqIC8vIHRvIGVhY2ggY2VsbCB0aGF0IGNvbnRhaW5zIGBwbGFjZWhvbGRlcmAgdGV4dFxuICAgICAqIHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZTogJ2hhcy1wbGFjZWhvbGRlcicsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiAnaHRQbGFjZWhvbGRlcicsXG4gICAgLyoqXG4gICAgICogVGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG9wdGlvbiBjb25maWd1cmVzIHByZXZlbnRpbmcgSGFuZHNvbnRhYmxlXG4gICAgICogZnJvbSBvdmVyZmxvd2luZyBvdXRzaWRlIG9mIGl0cyBwYXJlbnQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgcHJldmVudE92ZXJmbG93YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IERvbid0IHByZXZlbnQgb3ZlcmZsb3dpbmcgICAgICAgIHxcbiAgICAgKiB8IGAnaG9yaXpvbnRhbCdgICAgICAgfCBQcmV2ZW50IGhvcml6b250YWwgb3ZlcmZsb3dpbmcgfFxuICAgICAqIHwgYCd2ZXJ0aWNhbCdgICAgICAgICB8IFByZXZlbnQgdmVydGljYWwgb3ZlcmZsb3dpbmcgICB8XG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfGJvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHByZXZlbnQgaG9yaXpvbnRhbCBvdmVyZmxvd2luZ1xuICAgICAqIHByZXZlbnRPdmVyZmxvdzogJ2hvcml6b250YWwnLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHByZXZlbnRPdmVyZmxvdzogZmFsc2UsXG4gICAgLyoqXG4gICAgICogVGhlIGBwcmV2ZW50V2hlZWxgIG9wdGlvbiBjb25maWd1cmVzIHByZXZlbnRpbmcgdGhlIGB3aGVlbGAgZXZlbnQncyBkZWZhdWx0IGFjdGlvblxuICAgICAqIG9uIG92ZXJsYXlzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBwcmV2ZW50V2hlZWxgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBEb24ndCBwcmV2ZW50IHRoZSBgd2hlZWxgIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBQcmV2ZW50IHRoZSBgd2hlZWxgIGV2ZW50J3MgZGVmYXVsdCBhY3Rpb24gICAgICAgfFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZG9uJ3QgcHJldmVudCB0aGUgYHdoZWVsYCBldmVudCdzIGRlZmF1bHQgYWN0aW9uXG4gICAgICogcHJldmVudFdoZWVsOiBmYWxzZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcmV2ZW50V2hlZWw6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgcmVhZE9ubHlgIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBbY2VsbF0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9kaXNhYmxlZC1jZWxscy9kaXNhYmxlZC1jZWxscy5tZCNyZWFkLW9ubHktc3BlY2lmaWMtY2VsbHMpLFxuICAgICAqIFtjb21tZW50XShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NvbW1lbnRzL2NvbW1lbnRzLm1kI21ha2UtYS1jb21tZW50LXJlYWQtb25seSksIFtjb2x1bW5dKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvZGlzYWJsZWQtY2VsbHMvZGlzYWJsZWQtY2VsbHMubWQjcmVhZC1vbmx5LWNvbHVtbnMpXG4gICAgICogb3IgdGhlIFtlbnRpcmUgZ3JpZF0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9kaXNhYmxlZC1jZWxscy9kaXNhYmxlZC1jZWxscy5tZCNyZWFkLW9ubHktZ3JpZCkgaXMgZWRpdGFibGUgb3Igbm90LiBZb3UgY2FuIGNvbmZpZ3VyZSBpdCBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IFNldCBhcyBlZGl0YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCAtIFNldCBhcyByZWFkLW9ubHk8YnI+LSBBZGQgdGhlIFtgcmVhZE9ubHlDZWxsQ2xhc3NOYW1lYF0oI3JlYWRPbmx5Q2VsbENsYXNzTmFtZSkgQ1NTIGNsYXNzIG5hbWUgKGJ5IGRlZmF1bHQ6IGBodERpbW1lZGApIHxcbiAgICAgKlxuICAgICAqIGByZWFkT25seWAgY2VsbHMgY2FuJ3QgYmUgY2hhbmdlZCBieSB0aGUgW2Bwb3B1bGF0ZUZyb21BcnJheSgpYF0oQC9hcGkvY29yZS5tZCNwb3B1bGF0ZWZyb21hcnJheSkgbWV0aG9kLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0Rpc2FibGVkIGNlbGxzXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2Rpc2FibGVkLWNlbGxzL2Rpc2FibGVkLWNlbGxzLm1kKVxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogQ2FzY2FkaW5nIGNvbmZpZ3VyYXRpb25dKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI2Nhc2NhZGluZy1jb25maWd1cmF0aW9uKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIG1ha2UgdGhlIGVudGlyZSBncmlkIHJlYWQtb25seVxuICAgICAqIGNvbnN0IGNvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICAgICAqICAgY29sdW1uU29ydGluZzogdHJ1ZSxcbiAgICAgKiB9O1xuICAgICAqXG4gICAgICogLy8gbWFrZSB0aGUgdGhpcmQgY29sdW1uIHJlYWQtb25seVxuICAgICAqIGNvbnN0IGNvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICAgICAqICAgY29sdW1uczogW1xuICAgICAqICAgICB7fSxcbiAgICAgKiAgICAge30sXG4gICAgICogICAgIHtcbiAgICAgKiAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgIF0sXG4gICAgICogfTtcbiAgICAgKlxuICAgICAqIC8vIG1ha2UgYSBzcGVjaWZpYyBjZWxsIHJlYWQtb25seVxuICAgICAqIGNvbnN0IGNvbmZpZ3VyYXRpb25PcHRpb25zID0ge1xuICAgICAqICAgY2VsbDogW1xuICAgICAqICAgICB7XG4gICAgICogICAgICAgcm93OiAwLFxuICAgICAqICAgICAgIGNvbDogMCxcbiAgICAgKiAgICAgICByZWFkT25seTogdHJ1ZSxcbiAgICAgKiAgICAgfSxcbiAgICAgKiB9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlYWRPbmx5OiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWAgb3B0aW9uIGxldHMgeW91IGFkZCBhIENTUyBjbGFzcyBuYW1lIHRvIFtyZWFkLW9ubHldKCNyZWFkT25seSkgY2VsbHMuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbYGN1cnJlbnRSb3dDbGFzc05hbWVgXSgjY3VycmVudFJvd0NsYXNzTmFtZSlcbiAgICAgKiAtIFtgY3VycmVudENvbENsYXNzTmFtZWBdKCNjdXJyZW50Q29sQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50SGVhZGVyQ2xhc3NOYW1lYF0oI2N1cnJlbnRIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGFjdGl2ZUhlYWRlckNsYXNzTmFtZWBdKCNhY3RpdmVIZWFkZXJDbGFzc05hbWUpXG4gICAgICogLSBbYGludmFsaWRDZWxsQ2xhc3NOYW1lYF0oI2ludmFsaWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BwbGFjZWhvbGRlckNlbGxDbGFzc05hbWVgXSgjcGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2Bjb21tZW50ZWRDZWxsQ2xhc3NOYW1lYF0oI2NvbW1lbnRlZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYG5vV29yZFdyYXBDbGFzc05hbWVgXSgjbm9Xb3JkV3JhcENsYXNzTmFtZSlcbiAgICAgKiAtIFtgcmVhZE9ubHlDZWxsQ2xhc3NOYW1lYF0oI3JlYWRPbmx5Q2VsbENsYXNzTmFtZSlcbiAgICAgKiAtIFtgVGFibGVDbGFzc05hbWVgXSgjVGFibGVDbGFzc05hbWUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdodERpbW1lZCdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhIGBpcy1yZWFkT25seWAgQ1NTIGNsYXNzIG5hbWVcbiAgICAgKiAvLyB0byBldmVyeSByZWFkLW9ubHkgY2VsbFxuICAgICAqIHJlYWRPbmx5Q2VsbENsYXNzTmFtZTogJ2lzLXJlYWRPbmx5JyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWFkT25seUNlbGxDbGFzc05hbWU6ICdodERpbW1lZCcsXG4gICAgLyoqXG4gICAgICogVGhlIGByZW5kZXJBbGxSb3dzYCBvcHRpb24gY29udHJvbHMgSGFuZHNvbnRhYmxlJ3MgW3JvdyB2aXJ0dWFsaXphdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctdmlydHVhbGl6YXRpb24vcm93LXZpcnR1YWxpemF0aW9uLm1kKS5cbiAgICAgKiBZb3UgY2FuIGNvbmZpZ3VyZSBpdCBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBFbmFibGUgW3JvdyB2aXJ0dWFsaXphdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctdmlydHVhbGl6YXRpb24vcm93LXZpcnR1YWxpemF0aW9uLm1kKSwgcmVuZGVyaW5nIG9ubHkgdGhlIHZpc2libGUgcm93cyBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSB3aXRoIGxhcmdlIGRhdGFzZXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBEaXNhYmxlIFtyb3cgdmlydHVhbGl6YXRpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93LXZpcnR1YWxpemF0aW9uL3Jvdy12aXJ0dWFsaXphdGlvbi5tZCk8YnI+KHJlbmRlciBhbGwgcm93cyBvZiB0aGUgZ3JpZCksIHJlbmRlcmluZyBhbGwgcm93cyBpbiB0aGUgZGF0YXNldCBmb3IgY29uc2lzdGVudCByZW5kZXJpbmcgYW5kIHNjcmVlbiByZWFkZXIgYWNjZXNzaWJpbGl0eS4gfFxuICAgICAqXG4gICAgICogU2V0dGluZyBgcmVuZGVyQWxsUm93c2AgdG8gYHRydWVgIG92ZXJ3cml0ZXMgdGhlIFtgdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXRgXSgjdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQpIHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbUm93IHZpcnR1YWxpemF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy12aXJ0dWFsaXphdGlvbi9yb3ctdmlydHVhbGl6YXRpb24ubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZGlzYWJsZSByb3cgdmlydHVhbGl6YXRpb25cbiAgICAgKiByZW5kZXJBbGxSb3dzOiB0cnVlLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlbmRlckFsbFJvd3M6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgcmVuZGVyQWxsQ29sdW1uc2Agb3B0aW9uIGNvbmZpZ3VyZXMgSGFuZHNvbnRhYmxlJ3MgW2NvbHVtbiB2aXJ0dWFsaXphdGlvbl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tdmlydHVhbGl6YXRpb24vY29sdW1uLXZpcnR1YWxpemF0aW9uLm1kKS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgcmVuZGVyQWxsQ29sdW1uc2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBFbmFibGUgW2NvbHVtbiB2aXJ0dWFsaXphdGlvbl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tdmlydHVhbGl6YXRpb24vY29sdW1uLXZpcnR1YWxpemF0aW9uLm1kKSwgcmVuZGVyaW5nIG9ubHkgdmlzaWJsZSBjb2x1bW5zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Ugd2l0aCBtYW55IGNvbHVtbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBEaXNhYmxlIFtjb2x1bW4gdmlydHVhbGl6YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXZpcnR1YWxpemF0aW9uL2NvbHVtbi12aXJ0dWFsaXphdGlvbi5tZCk8YnI+KHJlbmRlciBhbGwgY29sdW1ucyBvZiB0aGUgZ3JpZCksIHJlbmRlcmluZyBhbGwgY29sdW1ucyBpbiB0aGUgZGF0YXNldCwgYW5kIGVuc3VyaW5nIGFsbCBjb2x1bW5zIGFyZSBhdmFpbGFibGUgcmVnYXJkbGVzcyBvZiBob3Jpem9udGFsIHNjcm9sbGluZy4gfFxuICAgICAqXG4gICAgICogU2V0dGluZyBgcmVuZGVyQWxsQ29sdW1uc2AgdG8gYHRydWVgIG92ZXJ3cml0ZXMgdGhlIFtgdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXRgXSgjdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQpIHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29sdW1uIHZpcnR1YWxpemF0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi12aXJ0dWFsaXphdGlvbi9jb2x1bW4tdmlydHVhbGl6YXRpb24ubWQpXG4gICAgICpcbiAgICAgKiBAc2luY2UgMTQuMS4wXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGRpc2FibGUgY29sdW1uIHZpcnR1YWxpemF0aW9uXG4gICAgICogcmVuZGVyQWxsQ29sdW1uczogdHJ1ZSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZW5kZXJBbGxDb2x1bW5zOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYHJlbmRlcmVyYCBvcHRpb24gc2V0cyBhIFtjZWxsIHJlbmRlcmVyXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLXJlbmRlcmVyL2NlbGwtcmVuZGVyZXIubWQpIGZvciBhIGNlbGwuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHJlbmRlcmVyYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICogLSBBIGN1c3RvbSByZW5kZXJlciBmdW5jdGlvblxuICAgICAqIC0gT25lIG9mIHRoZSBmb2xsb3dpbmcgW2NlbGwgcmVuZGVyZXIgYWxpYXNlc10oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC1yZW5kZXJlci9jZWxsLXJlbmRlcmVyLm1kKTpcbiAgICAgKlxuICAgICAqIHwgQWxpYXMgICAgICAgICAgICAgICB8IENlbGwgcmVuZGVyZXIgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IEEgY3VzdG9tIGFsaWFzICAgICAgfCBZb3VyIFtjdXN0b20gY2VsbCByZW5kZXJlcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC1yZW5kZXJlci9jZWxsLXJlbmRlcmVyLm1kKSBmdW5jdGlvbiB8XG4gICAgICogfCBgJ2F1dG9jb21wbGV0ZSdgICAgIHwgYEF1dG9jb21wbGV0ZVJlbmRlcmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnYmFzZSdgICAgICAgICAgICAgfCBgQmFzZVJlbmRlcmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdjaGVja2JveCdgICAgICAgICB8IGBDaGVja2JveFJlbmRlcmVyYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2RhdGUnYCAgICAgICAgICAgIHwgYERhdGVSZW5kZXJlcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnZHJvcGRvd24nYCAgICAgICAgfCBgRHJvcGRvd25SZW5kZXJlcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdodG1sJ2AgICAgICAgICAgICB8IGBIdG1sUmVuZGVyZXJgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ251bWVyaWMnYCAgICAgICAgIHwgYE51bWVyaWNSZW5kZXJlcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAncGFzc3dvcmQnYCAgICAgICAgfCBgUGFzc3dvcmRSZW5kZXJlcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCd0ZXh0J2AgICAgICAgICAgICB8IGBUZXh0UmVuZGVyZXJgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ3RpbWUnYCAgICAgICAgICAgIHwgYFRpbWVSZW5kZXJlcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFRvIHNldCB0aGUgW2ByZW5kZXJlcmBdKCNyZW5kZXJlciksIFtgZWRpdG9yYF0oI2VkaXRvciksIGFuZCBbYHZhbGlkYXRvcmBdKCN2YWxpZGF0b3IpXG4gICAgICogb3B0aW9ucyBhbGwgYXQgb25jZSwgdXNlIHRoZSBbYHR5cGVgXSgjdHlwZSkgb3B0aW9uLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NlbGwgcmVuZGVyZXJdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtcmVuZGVyZXIvY2VsbC1yZW5kZXJlci5tZClcbiAgICAgKiAtIFtDZWxsIHR5cGVdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvY2VsbC10eXBlL2NlbGwtdHlwZS5tZClcbiAgICAgKiAtIFtDb25maWd1cmF0aW9uIG9wdGlvbnM6IENhc2NhZGluZyBjb25maWd1cmF0aW9uXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNjYXNjYWRpbmctY29uZmlndXJhdGlvbilcbiAgICAgKiAtIFtgdHlwZWBdKCN0eXBlKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ3xGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHVzZSB0aGUgYG51bWVyaWNgIHJlbmRlcmVyIGZvciBlYWNoIGNlbGwgb2YgdGhlIGVudGlyZSBncmlkXG4gICAgICogcmVuZGVyZXI6IGAnbnVtZXJpYydgLFxuICAgICAqXG4gICAgICogLy8gYWRkIGEgY3VzdG9tIHJlbmRlcmVyIGZ1bmN0aW9uXG4gICAgICogcmVuZGVyZXIoaG90SW5zdGFuY2UsIHRkLCByb3csIGNvbHVtbiwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gICAgICogICAvLyB5b3VyIGN1c3RvbSByZW5kZXJlcidzIGxvZ2ljXG4gICAgICogICAuLi5cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiAvLyBhcHBseSB0aGUgYHJlbmRlcmVyYCBvcHRpb24gdG8gaW5kaXZpZHVhbCBjb2x1bW5zXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyB1c2UgdGhlIGBhdXRvY29tcGxldGVgIHJlbmRlcmVyIGZvciBlYWNoIGNlbGwgb2YgdGhpcyBjb2x1bW5cbiAgICAgKiAgICAgcmVuZGVyZXI6ICdhdXRvY29tcGxldGUnXG4gICAgICogICB9LFxuICAgICAqICAge1xuICAgICAqICAgICAvLyB1c2UgdGhlIGBteUN1c3RvbVJlbmRlcmVyYCByZW5kZXJlciBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIHJlbmRlcmVyOiAnbXlDdXN0b21SZW5kZXJlcidcbiAgICAgKiAgIH1cbiAgICAgKiBdXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcmVuZGVyZXI6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYHJvd0hlYWRlcnNgIG9wdGlvbiBjb25maWd1cmVzIHlvdXIgZ3JpZCdzIHJvdyBoZWFkZXJzLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGByb3dIZWFkZXJzYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgICAgICB8IEVuYWJsZSB0aGUgZGVmYXVsdCByb3cgaGVhZGVycyAoJzEnLCAnMicsICczJywgLi4uKSAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgfCBEaXNhYmxlIHJvdyBoZWFkZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSAgIHwgRGVmaW5lIHlvdXIgb3duIHJvdyBoZWFkZXJzIChlLmcuIGBbJ09uZScsICdUd28nLCAnVGhyZWUnLCAuLi5dYCkgfFxuICAgICAqIHwgQSBmdW5jdGlvbiB8IERlZmluZSB5b3VyIG93biByb3cgaGVhZGVycywgdXNpbmcgYSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtSb3cgaGVhZGVyXShAL2d1aWRlcy9yb3dzL3Jvdy1oZWFkZXIvcm93LWhlYWRlci5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufHN0cmluZ1tdfEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBkZWZhdWx0IHJvdyBoZWFkZXJzXG4gICAgICogcm93SGVhZGVyczogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIHNldCB5b3VyIG93biByb3cgaGVhZGVyc1xuICAgICAqIHJvd0hlYWRlcnM6IFsnT25lJywgJ1R3bycsICdUaHJlZSddLFxuICAgICAqXG4gICAgICogLy8gc2V0IHlvdXIgb3duIHJvdyBoZWFkZXJzLCB1c2luZyBhIGZ1bmN0aW9uXG4gICAgICogcm93SGVhZGVyczogZnVuY3Rpb24odmlzdWFsUm93SW5kZXgpIHtcbiAgICAgKiAgIHJldHVybiBgJHt2aXN1YWxSb3dJbmRleH06IEFCYDtcbiAgICAgKiB9LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJvd0hlYWRlcnM6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYHJvd0hlYWRlcldpZHRoYCBvcHRpb24gY29uZmlndXJlcyB0aGUgd2lkdGggb2Ygcm93IGhlYWRlcnMuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHJvd0hlYWRlcldpZHRoYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIG51bWJlciB8IFNldCB0aGUgc2FtZSB3aWR0aCBmb3IgZXZlcnkgcm93IGhlYWRlciAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IHwgU2V0IGRpZmZlcmVudCB3aWR0aHMgZm9yIGluZGl2aWR1YWwgcm93IGhlYWRlcnMgfFxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcnxudW1iZXJbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgc2FtZSB3aWR0aCBmb3IgZXZlcnkgcm93IGhlYWRlclxuICAgICAqIHJvd0hlYWRlcldpZHRoOiAyNSxcbiAgICAgKlxuICAgICAqIC8vIHNldCBkaWZmZXJlbnQgd2lkdGhzIGZvciBpbmRpdmlkdWFsIHJvdyBoZWFkZXJzXG4gICAgICogcm93SGVhZGVyV2lkdGg6IFsyNSwgMzAsIDU1XSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByb3dIZWFkZXJXaWR0aDogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgcm93SGVpZ2h0c2Agb3B0aW9uIHNldHMgcm93cycgaGVpZ2h0cywgaW4gcGl4ZWxzLlxuICAgICAqXG4gICAgICogSW4gdGhlIHJlbmRlcmluZyBwcm9jZXNzLCB0aGUgZGVmYXVsdCByb3cgaGVpZ2h0IGlzIDIzIHB4ICgyMiBweCArIDEgcHggb2YgdGhlIHJvdydzIGJvdHRvbSBib3JkZXIpLlxuICAgICAqIFlvdSBjYW4gY2hhbmdlIGl0IHRvIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAyM3B4LCBieSBzZXR0aW5nIHRoZSBgcm93SGVpZ2h0c2Agb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4YW1wbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIG51bWJlciAgICB8IFNldCB0aGUgc2FtZSBoZWlnaHQgZm9yIGV2ZXJ5IHJvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGByb3dIZWlnaHRzOiAxMDBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBIHN0cmluZyAgICB8IFNldCB0aGUgc2FtZSBoZWlnaHQgZm9yIGV2ZXJ5IHJvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGByb3dIZWlnaHRzOiAnMTAwcHgnYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBbiBhcnJheSAgICB8IFNldCBoZWlnaHRzIHNlcGFyYXRlbHkgZm9yIGVhY2ggcm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGByb3dIZWlnaHRzOiBbMTAwLCAxMjAsIHVuZGVmaW5lZF1gICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBBIGZ1bmN0aW9uICB8IFNldCByb3cgaGVpZ2h0cyBkeW5hbWljYWxseSw8YnI+b24gZWFjaCByZW5kZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGByb3dIZWlnaHRzKHZpc3VhbFJvd0luZGV4KSB7IHJldHVybiB2aXN1YWxSb3dJbmRleCAqIDEwOyB9YCB8XG4gICAgICogfCBgdW5kZWZpbmVkYCB8IFVzZWQgYnkgdGhlIFttb2RpZnlSb3dIZWlnaHRdKEAvYXBpL2hvb2tzLm1kI21vZGlmeVJvd0hlaWdodCkgaG9vayw8YnI+dG8gZGV0ZWN0IHJvdyBoZWlnaHQgY2hhbmdlcyB8IGByb3dIZWlnaHRzOiB1bmRlZmluZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBUaGUgYHJvd0hlaWdodHNgIG9wdGlvbiBhbHNvIHNldHMgdGhlIG1pbmltdW0gcm93IGhlaWdodCB0aGF0IGNhbiBiZSBzZXRcbiAgICAgKiB2aWEgdGhlIHtAbGluayBNYW51YWxSb3dSZXNpemV9IGFuZCB7QGxpbmsgQXV0b1Jvd1NpemV9IHBsdWdpbnMgKGlmIHRoZXkgYXJlIGVuYWJsZWQpLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1JvdyBoZWlnaHRdKEAvZ3VpZGVzL3Jvd3Mvcm93LWhlaWdodC9yb3ctaGVpZ2h0Lm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcnxudW1iZXJbXXxzdHJpbmd8c3RyaW5nW118QXJyYXk8dW5kZWZpbmVkPnxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCBldmVyeSByb3cncyBoZWlnaHQgdG8gMTAwcHhcbiAgICAgKiByb3dIZWlnaHRzOiAxMDAsXG4gICAgICpcbiAgICAgKiAvLyBzZXQgZXZlcnkgcm93J3MgaGVpZ2h0IHRvIDEwMHB4XG4gICAgICogcm93SGVpZ2h0czogJzEwMHB4JyxcbiAgICAgKlxuICAgICAqIC8vIHNldCB0aGUgZmlyc3QgKGJ5IHZpc3VhbCBpbmRleCkgcm93J3MgaGVpZ2h0IHRvIDEwMFxuICAgICAqIC8vIHNldCB0aGUgc2Vjb25kIChieSB2aXN1YWwgaW5kZXgpIHJvdydzIGhlaWdodCB0byAxMjBcbiAgICAgKiAvLyBzZXQgdGhlIHRoaXJkIChieSB2aXN1YWwgaW5kZXgpIHJvdydzIGhlaWdodCB0byBgdW5kZWZpbmVkYFxuICAgICAqIC8vIHNldCBhbnkgb3RoZXIgcm93J3MgaGVpZ2h0IHRvIHRoZSBkZWZhdWx0IDIzcHhcbiAgICAgKiByb3dIZWlnaHRzOiBbMTAwLCAxMjAsIHVuZGVmaW5lZF0sXG4gICAgICpcbiAgICAgKiAvLyBzZXQgZWFjaCByb3cncyBoZWlnaHQgaW5kaXZpZHVhbGx5LCB1c2luZyBhIGZ1bmN0aW9uXG4gICAgICogcm93SGVpZ2h0cyh2aXN1YWxSb3dJbmRleCkge1xuICAgICAqICAgcmV0dXJuIHZpc3VhbFJvd0luZGV4ICogMTA7XG4gICAgICogfSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByb3dIZWlnaHRzOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBzZWFyY2hgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBbYFNlYXJjaGBdKEAvYXBpL3NlYXJjaC5tZCkgcGx1Z2luLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGBzZWFyY2hgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBEaXNhYmxlIHRoZSBbYFNlYXJjaGBdKEAvYXBpL3NlYXJjaC5tZCkgcGx1Z2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCBFbmFibGUgdGhlIFtgU2VhcmNoYF0oQC9hcGkvc2VhcmNoLm1kKSBwbHVnaW4gd2l0aCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICAgICAgICAgfFxuICAgICAqIHwgQW4gb2JqZWN0ICAgICAgICAgfCAtIEVuYWJsZSB0aGUgW2BTZWFyY2hgXShAL2FwaS9zZWFyY2gubWQpIHBsdWdpbjxicj4tIEFwcGx5IHlvdXIgY3VzdG9tIGNvbmZpZ3VyYXRpb24gfFxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUgYHNlYXJjaGAgb3B0aW9uIHRvIGFuIG9iamVjdCwgeW91IGNhbiBjb25maWd1cmUgdGhlIGZvbGxvd2luZyBzZWFyY2ggb3B0aW9uczpcbiAgICAgKlxuICAgICAqIHwgT3B0aW9uICAgICAgICAgICAgICB8IFBvc3NpYmxlIHNldHRpbmdzIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBzZWFyY2hSZXN1bHRDbGFzc2AgfCBBIHN0cmluZyAgICAgICAgICB8IEFkZCBhIGN1c3RvbSBDU1MgY2xhc3MgbmFtZSB0byBzZWFyY2ggcmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHF1ZXJ5TWV0aG9kYCAgICAgICB8IEEgZnVuY3Rpb24gICAgICAgIHwgQWRkIGEgW2N1c3RvbSBxdWVyeSBtZXRob2RdKEAvZ3VpZGVzL25hdmlnYXRpb24vc2VhcmNoaW5nLXZhbHVlcy9zZWFyY2hpbmctdmFsdWVzLm1kI2N1c3RvbS1xdWVyeS1tZXRob2QpICB8XG4gICAgICogfCBgY2FsbGJhY2tgICAgICAgICAgIHwgQSBmdW5jdGlvbiAgICAgICAgfCBBZGQgYSBbY3VzdG9tIGNhbGxiYWNrIGZ1bmN0aW9uXShAL2d1aWRlcy9uYXZpZ2F0aW9uL3NlYXJjaGluZy12YWx1ZXMvc2VhcmNoaW5nLXZhbHVlcy5tZCNjdXN0b20tY2FsbGJhY2spIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtTZWFyY2hpbmcgdmFsdWVzXShAL2d1aWRlcy9uYXZpZ2F0aW9uL3NlYXJjaGluZy12YWx1ZXMvc2VhcmNoaW5nLXZhbHVlcy5tZClcbiAgICAgKiAtIFtTZWFyY2hpbmcgdmFsdWVzOiBDdXN0b20gcXVlcnkgbWV0aG9kXShAL2d1aWRlcy9uYXZpZ2F0aW9uL3NlYXJjaGluZy12YWx1ZXMvc2VhcmNoaW5nLXZhbHVlcy5tZCNjdXN0b20tcXVlcnktbWV0aG9kKVxuICAgICAqIC0gW1NlYXJjaGluZyB2YWx1ZXM6IEN1c3RvbSBjYWxsYmFja10oQC9ndWlkZXMvbmF2aWdhdGlvbi9zZWFyY2hpbmctdmFsdWVzL3NlYXJjaGluZy12YWx1ZXMubWQjY3VzdG9tLWNhbGxiYWNrKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW58b2JqZWN0fVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGNhdGVnb3J5IFNlYXJjaFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYFNlYXJjaGAgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgICAqIHNlYXJjaDogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYFNlYXJjaGAgcGx1Z2luIHdpdGggYSBjdXN0b20gY29uZmlndXJhdGlvblxuICAgICAqIHNlYXJjaDoge1xuICAgICAqICAgLy8gYWRkIGEgYGN1c3RvbUNsYXNzYCBDU1MgY2xhc3MgbmFtZSB0byBzZWFyY2ggcmVzdWx0c1xuICAgICAqICAgc2VhcmNoUmVzdWx0Q2xhc3M6ICdjdXN0b21DbGFzcycsXG4gICAgICogICAvLyBhZGQgYSBjdXN0b20gcXVlcnkgbWV0aG9kXG4gICAgICogICBxdWVyeU1ldGhvZChxdWVyeVN0ciwgdmFsdWUpIHtcbiAgICAgKiAgICAgLi4uXG4gICAgICogICB9LFxuICAgICAqICAgLy8gYWRkIGEgY3VzdG9tIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAgICogICBjYWxsYmFjayhpbnN0YW5jZSwgcm93LCBjb2x1bW4sIHZhbHVlLCByZXN1bHQpIHtcbiAgICAgKiAgICAgLi4uXG4gICAgICogICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNlYXJjaDogZmFsc2UsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBzZWxlY3Rpb25Nb2RlYCBvcHRpb24gY29uZmlndXJlcyBob3cgW3NlbGVjdGlvbl0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9zZWxlY3Rpb24vc2VsZWN0aW9uLm1kKSB3b3Jrcy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc2VsZWN0aW9uTW9kZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGAnc2luZ2xlJ2AgICB8IEFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBvbmx5IG9uZSBjZWxsIGF0IGEgdGltZS4gICAgICAgICAgICB8XG4gICAgICogfCBgJ3JhbmdlJ2AgICAgfCBBbGxvdyB0aGUgdXNlciB0byBzZWxlY3Qgb25lIHJhbmdlIG9mIGNlbGxzIGF0IGEgdGltZS4gICAgICAgfFxuICAgICAqIHwgYCdtdWx0aXBsZSdgIHwgQWxsb3cgdGhlIHVzZXIgdG8gc2VsZWN0IG11bHRpcGxlIHJhbmdlcyBvZiBjZWxscyBhdCBhIHRpbWUuIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtTZWxlY3Rpb246IFNlbGVjdGluZyByYW5nZXNdKEAvZ3VpZGVzL2NlbGwtZmVhdHVyZXMvc2VsZWN0aW9uL3NlbGVjdGlvbi5tZCNzZWxlY3QtcmFuZ2VzKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAnbXVsdGlwbGUnXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyB5b3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjZWxsIGF0IGF0IGEgdGltZVxuICAgICAqIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnLFxuICAgICAqXG4gICAgICogLy8geW91IGNhbiBzZWxlY3Qgb25lIHJhbmdlIG9mIGNlbGxzIGF0IGEgdGltZVxuICAgICAqIHNlbGVjdGlvbk1vZGU6ICdyYW5nZScsXG4gICAgICpcbiAgICAgKiAvLyB5b3UgY2FuIHNlbGVjdCBtdWx0aXBsZSByYW5nZXMgb2YgY2VsbHMgYXQgYSB0aW1lXG4gICAgICogc2VsZWN0aW9uTW9kZTogJ211bHRpcGxlJyxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZWxlY3Rpb25Nb2RlOiAnbXVsdGlwbGUnLFxuICAgIC8qKlxuICAgICAqIFRoZSBgc2VsZWN0T3B0aW9uc2Agb3B0aW9uIGNvbmZpZ3VyZXMgb3B0aW9ucyB0aGF0IHRoZSBlbmQgdXNlciBjYW4gY2hvb3NlIGZyb20gaW4gW2BzZWxlY3RgXShAL2d1aWRlcy9jZWxsLXR5cGVzL3NlbGVjdC1jZWxsLXR5cGUvc2VsZWN0LWNlbGwtdHlwZS5tZCkgY2VsbHMuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHNlbGVjdE9wdGlvbnNgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBbiBhcnJheSBvZiBzdHJpbmdzICAgICAgICAgICAgIHwgRWFjaCBzdHJpbmcgaXMgb25lIG9wdGlvbidzIHZhbHVlIGFuZCBsYWJlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgQW4gb2JqZWN0IHdpdGgga2V5LXN0cmluZyBwYWlycyB8IC0gRWFjaCBrZXkgaXMgb25lIG9wdGlvbidzIHZhbHVlPGJyPi0gVGhlIGtleSdzIHN0cmluZyBpcyB0aGF0IG9wdGlvbidzIGxhYmVsIHxcbiAgICAgKiB8IEEgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfCBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBrZXktc3RyaW5nIHBhaXJzICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbU2VsZWN0IGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9zZWxlY3QtY2VsbC10eXBlL3NlbGVjdC1jZWxsLXR5cGUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7c3RyaW5nW118b2JqZWN0fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYHNlbGVjdGBcbiAgICAgKiAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICogICAgIC8vIHNldCB0aGUgZmlyc3Qgb3B0aW9uJ3MgdmFsdWUgYW5kIGxhYmVsIHRvIGBBYFxuICAgICAqICAgICAvLyBzZXQgdGhlIHNlY29uZCBvcHRpb24ncyB2YWx1ZSBhbmQgbGFiZWwgdG8gYEJgXG4gICAgICogICAgIC8vIHNldCB0aGUgdGhpcmQgb3B0aW9uJ3MgdmFsdWUgYW5kIGxhYmVsIHRvIGBDYFxuICAgICAqICAgICBzZWxlY3RPcHRpb25zOiBbJ0EnLCAnQicsICdDJ10sXG4gICAgICogICB9LFxuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYHNlbGVjdGBcbiAgICAgKiAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICogICAgIHNlbGVjdE9wdGlvbnM6IHtcbiAgICAgKiAgICAgICAvLyBzZXQgdGhlIGZpcnN0IG9wdGlvbidzIHZhbHVlIHRvIGB2YWx1ZTFgIGFuZCBsYWJlbCB0byBgTGFiZWwgMWBcbiAgICAgKiAgICAgICB2YWx1ZTE6ICdMYWJlbCAxJyxcbiAgICAgKiAgICAgICAvLyBzZXQgdGhlIHNlY29uZCBvcHRpb24ncyB2YWx1ZSB0byBgdmFsdWUyYCBhbmQgbGFiZWwgdG8gYExhYmVsIDJgXG4gICAgICogICAgICAgdmFsdWUyOiAnTGFiZWwgMicsXG4gICAgICogICAgICAgLy8gc2V0IHRoZSB0aGlyZCBvcHRpb24ncyB2YWx1ZSB0byBgdmFsdWUzYCBhbmQgbGFiZWwgdG8gYExhYmVsIDNgXG4gICAgICogICAgICAgdmFsdWUzOiAnTGFiZWwgMycsXG4gICAgICogICAgIH0sXG4gICAgICogICB9LFxuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYHNlbGVjdGBcbiAgICAgKiAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICogICAgIC8vIHNldCBgc2VsZWN0T3B0aW9uYCB0byBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhdmFpbGFibGUgb3B0aW9ucyBhcyBhbiBvYmplY3RcbiAgICAgKiAgICAgc2VsZWN0T3B0aW9ucyh2aXN1YWxSb3csIHZpc3VhbENvbHVtbiwgcHJvcCkge1xuICAgICAqICAgICAgIHJldHVybiB7XG4gICAgICogICAgICAgICB2YWx1ZTE6ICdMYWJlbCAxJyxcbiAgICAgKiAgICAgICAgIHZhbHVlMjogJ0xhYmVsIDInLFxuICAgICAqICAgICAgICAgdmFsdWUzOiAnTGFiZWwgMycsXG4gICAgICogICAgICAgfTtcbiAgICAgKiAgIH0sXG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZWxlY3RPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGBza2lwQ29sdW1uT25QYXN0ZWAgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciB5b3UgY2FuIHBhc3RlIGRhdGEgaW50byBhIGdpdmVuIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gb25seSBhcHBseSB0aGUgYHNraXBDb2x1bW5PblBhc3RlYCBvcHRpb24gdG8gYW4gZW50aXJlIGNvbHVtbiwgdXNpbmcgdGhlIFtgY29sdW1uc2BdKCNjb2x1bW5zKSBvcHRpb24uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHNraXBDb2x1bW5PblBhc3RlYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgZmFsc2VgIChkZWZhdWx0KSB8IEVuYWJsZSBwYXN0aW5nIGRhdGEgaW50byB0aGlzIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgIHwgLSBEaXNhYmxlIHBhc3RpbmcgZGF0YSBpbnRvIHRoaXMgY29sdW1uPGJyPi0gT24gcGFzdGluZywgcGFzdGUgZGF0YSBpbnRvIHRoZSBuZXh0IGNvbHVtbiB0byB0aGUgcmlnaHQgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogU2V0dGluZyBjb2x1bW4gb3B0aW9uc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjc2V0LWNvbHVtbi1vcHRpb25zKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gZGlzYWJsZSBwYXN0aW5nIGRhdGEgaW50byB0aGlzIGNvbHVtblxuICAgICAqICAgICBza2lwQ29sdW1uT25QYXN0ZTogdHJ1ZVxuICAgICAqICAgfVxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgc2tpcENvbHVtbk9uUGFzdGU6IGZhbHNlLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqXG4gICAgICogVGhlIGBza2lwUm93T25QYXN0ZWAgb3B0aW9uIGRldGVybWluZXMgd2hldGhlciB5b3UgY2FuIHBhc3RlIGRhdGEgaW50byBhIGdpdmVuIHJvdy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gb25seSBhcHBseSB0aGUgYHNraXBSb3dPblBhc3RlYCBvcHRpb24gdG8gYW4gZW50aXJlIHJvdywgdXNpbmcgdGhlIFtgY2VsbHNgXSgjY2VsbHMpIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc2tpcFJvd09uUGFzdGVgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgKGRlZmF1bHQpIHwgRW5hYmxlIHBhc3RpbmcgZGF0YSBpbnRvIHRoaXMgcm93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYHRydWVgICAgICAgICAgICAgfCAtIERpc2FibGUgcGFzdGluZyBkYXRhIGludG8gdGhpcyByb3c8YnI+LSBPbiBwYXN0aW5nLCBwYXN0ZSBkYXRhIGludG8gdGhlIHJvdyBiZWxvdyB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ29uZmlndXJhdGlvbiBvcHRpb25zOiBTZXR0aW5nIHJvdyBvcHRpb25zXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvY29uZmlndXJhdGlvbi1vcHRpb25zL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy5tZCNzZXQtcm93LW9wdGlvbnMpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY2VsbHMocm93LCBjb2x1bW4pIHtcbiAgICAgKiAgY29uc3QgY2VsbFByb3BlcnRpZXMgPSB7fTtcbiAgICAgKlxuICAgICAqICAvLyBkaXNhYmxlIHBhc3RpbmcgZGF0YSBpbnRvIHJvdyAxXG4gICAgICogIGlmIChyb3cgPT09IDEpIHtcbiAgICAgKiAgICBjZWxsUHJvcGVydGllcy5za2lwUm93T25QYXN0ZSA9IHRydWU7XG4gICAgICogIH1cbiAgICAgKlxuICAgICAqICByZXR1cm4gY2VsbFByb3BlcnRpZXM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNraXBSb3dPblBhc3RlOiBmYWxzZSxcbiAgICAvKipcbiAgICAgKiBUaGUgYHNvcnRCeVJlbGV2YW5jZWAgb3B0aW9uIGNvbmZpZ3VyZXMgd2hldGhlciBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKSBjZWxscydcbiAgICAgKiBsaXN0cyBhcmUgc29ydGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHByb3ZpZGVkIGluIHRoZSBbYHNvdXJjZWBdKCNzb3VyY2UpIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc29ydEJ5UmVsZXZhbmNlYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgfCBTb3J0IG9wdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIgYXMgcHJvdmlkZWQgaW4gdGhlIFtgc291cmNlYF0oI3NvdXJjZSkgb3B0aW9uIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgICAgICAgfCBTb3J0IG9wdGlvbnMgYWxwaGFiZXRpY2FsbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgc291cmNlYF0oI3NvdXJjZSlcbiAgICAgKiAtIFtBdXRvY29tcGxldGUgY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFt7XG4gICAgICogICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYGF1dG9jb21wbGV0ZWBcbiAgICAgKiAgIHR5cGU6ICdhdXRvY29tcGxldGUnLFxuICAgICAqICAgLy8gc2V0IG9wdGlvbnMgYXZhaWxhYmxlIGluIGV2ZXJ5IGBhdXRvY29tcGxldGVgIGNlbGwgb2YgdGhpcyBjb2x1bW5cbiAgICAgKiAgIHNvdXJjZTogWydEJywgJ0MnLCAnQicsICdBJ10sXG4gICAgICogICAvLyBzb3J0IHRoZSBgYXV0b2NvbXBsZXRlYCBvcHRpb24gaW4gdGhpcyBvcmRlcjogRCwgQywgQiwgQVxuICAgICAqICAgc29ydEJ5UmVsZXZhbmNlOiB0cnVlXG4gICAgICogfV0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgc29ydEJ5UmVsZXZhbmNlOiB0cnVlLFxuICAgIC8qKlxuICAgICAqIFRoZSBgc291cmNlYCBvcHRpb24gc2V0cyBvcHRpb25zIGF2YWlsYWJsZSBpbiBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKVxuICAgICAqIGFuZCBbYGRyb3Bkb3duYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9kcm9wZG93bi1jZWxsLXR5cGUvZHJvcGRvd24tY2VsbC10eXBlLm1kKSBjZWxscy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc291cmNlYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiAtIEFuIGFycmF5XG4gICAgICogLSBBIGZ1bmN0aW9uXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbRHJvcGRvd24gY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2Ryb3Bkb3duLWNlbGwtdHlwZS9kcm9wZG93bi1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbYHN0cmljdGBdKCNzdHJpY3QpXG4gICAgICogLSBbYGFsbG93SHRtbGBdKCNhbGxvd0h0bWwpXG4gICAgICogLSBbYGZpbHRlcmBdKCNmaWx0ZXIpXG4gICAgICogLSBbYHNvcnRCeVJlbGV2YW5jZWBdKCNzb3J0QnlSZWxldmFuY2UpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7QXJyYXl8RnVuY3Rpb259XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzZXQgYHNvdXJjZWAgdG8gYW4gYXJyYXlcbiAgICAgKiBjb2x1bW5zOiBbe1xuICAgICAqICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBhdXRvY29tcGxldGVgXG4gICAgICogICB0eXBlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAgKiAgIC8vIHNldCBvcHRpb25zIGF2YWlsYWJsZSBpbiBldmVyeSBgYXV0b2NvbXBsZXRlYCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICBzb3VyY2U6IFsnQScsICdCJywgJ0MnLCAnRCddXG4gICAgICogfV0sXG4gICAgICpcbiAgICAgKiAvLyBzZXQgYHNvdXJjZWAgdG8gYSBmdW5jdGlvblxuICAgICAqIGNvbHVtbnM6IFt7XG4gICAgICogICAvLyBzZXQgdGhlIGB0eXBlYCBvZiBlYWNoIGNlbGwgaW4gdGhpcyBjb2x1bW4gdG8gYGF1dG9jb21wbGV0ZWBcbiAgICAgKiAgIHR5cGU6ICdhdXRvY29tcGxldGUnLFxuICAgICAqICAgLy8gZm9yIGV2ZXJ5IGBhdXRvY29tcGxldGVgIGNlbGwgaW4gdGhpcyBjb2x1bW4sIGZldGNoIGRhdGEgZnJvbSBhbiBleHRlcm5hbCBzb3VyY2VcbiAgICAgKiAgIHNvdXJjZShxdWVyeSwgY2FsbGJhY2spIHtcbiAgICAgKiAgICAgZmV0Y2goJ2h0dHBzOi8vZXhhbXBsZS5jb20vcXVlcnk/cT0nICsgcXVlcnksIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICogICAgICAgY2FsbGJhY2socmVzcG9uc2UuaXRlbXMpO1xuICAgICAqICAgICB9KVxuICAgICAqICAgfVxuICAgICAqIH1dLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNvdXJjZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIElmIHRoZSBbYGRhdGFgXSgjZGF0YSkgb3B0aW9uIGlzIG5vdCBzZXQsIHRoZSBgc3RhcnRDb2xzYCBvcHRpb24gc2V0cyB0aGUgaW5pdGlhbCBudW1iZXIgb2YgZW1wdHkgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIFRoZSBgc3RhcnRDb2xzYCBvcHRpb24gd29ya3Mgb25seSBpbiBIYW5kc29udGFibGUncyBjb25zdHJ1Y3Rvci5cbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgNVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc3RhcnQgd2l0aCAxNSBlbXB0eSBjb2x1bW5zXG4gICAgICogc3RhcnRDb2xzOiAxNSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdGFydENvbHM6IDUsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogSWYgdGhlIFtgZGF0YWBdKCNkYXRhKSBvcHRpb24gaXMgbm90IHNldCwgdGhlIGBzdGFydFJvd3NgIG9wdGlvbiBzZXRzIHRoZSBpbml0aWFsIG51bWJlciBvZiBlbXB0eSByb3dzLlxuICAgICAqXG4gICAgICogVGhlIGBzdGFydFJvd3NgIG9wdGlvbiB3b3JrcyBvbmx5IGluIEhhbmRzb250YWJsZSdzIGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCA1XG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBzdGFydCB3aXRoIDE1IGVtcHR5IHJvd3NcbiAgICAgKiBzdGFydFJvd3M6IDE1LFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHN0YXJ0Um93czogNSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYHN0cmV0Y2hIYCBvcHRpb24gZGV0ZXJtaW5lcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgZGVjbGFyZWQgZ3JpZCB3aWR0aFxuICAgICAqIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjYWxjdWxhdGVkIHN1bSBvZiBhbGwgY29sdW1uIHdpZHRocy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc3RyZXRjaEhgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYCdub25lJ2AgKGRlZmF1bHQpIHwgRG9uJ3QgZml0IHRoZSBncmlkIHRvIHRoZSBjb250YWluZXIgKGRpc2FibGUgY29sdW1uIHN0cmV0Y2hpbmcpICAgfFxuICAgICAqIHwgYCdsYXN0J2AgICAgICAgICAgIHwgRml0IHRoZSBncmlkIHRvIHRoZSBjb250YWluZXIsIGJ5IHN0cmV0Y2hpbmcgb25seSB0aGUgbGFzdCBjb2x1bW4gfFxuICAgICAqIHwgYCdhbGwnYCAgICAgICAgICAgIHwgRml0IHRoZSBncmlkIHRvIHRoZSBjb250YWluZXIsIGJ5IHN0cmV0Y2hpbmcgYWxsIGNvbHVtbnMgZXZlbmx5ICAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0NvbHVtbiB3aWR0aDogQ29sdW1uIHN0cmV0Y2hpbmddKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXdpZHRoL2NvbHVtbi13aWR0aC5tZCNjb2x1bW4tc3RyZXRjaGluZylcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyBmaXQgdGhlIGdyaWQgdG8gdGhlIGNvbnRhaW5lclxuICAgICAqIC8vIGJ5IHN0cmV0Y2hpbmcgYWxsIGNvbHVtbnMgZXZlbmx5XG4gICAgICogc3RyZXRjaEg6ICdhbGwnLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHN0cmV0Y2hIOiAnbm9uZScsXG4gICAgLyoqXG4gICAgICogVGhlIGBzdHJpY3RgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBiZWhhdmlvciBvZiBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKSBjZWxscy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgc3RyaWN0YCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgfCBNb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgIHwgW1N0cmljdCBtb2RlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZCNhdXRvY29tcGxldGUtc3RyaWN0LW1vZGUpICAgICAgICAgfCBUaGUgZW5kIHVzZXI6PGJyPi0gQ2FuIG9ubHkgY2hvb3NlIG9uZSBvZiBzdWdnZXN0ZWQgdmFsdWVzPGJyPi0gQ2FuJ3QgZW50ZXIgYSBjdXN0b20gdmFsdWUgfFxuICAgICAqIHwgYGZhbHNlYCB8IFtGbGV4aWJsZSBtb2RlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZCNhdXRvY29tcGxldGUtZmxleGlibGUtbW9kZSkgICAgIHwgVGhlIGVuZCB1c2VyOjxicj4tIENhbiBjaG9vc2Ugb25lIG9mIHN1Z2dlc3RlZCB2YWx1ZXM8YnI+LSBDYW4gZW50ZXIgYSBjdXN0b20gdmFsdWUgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtBdXRvY29tcGxldGUgY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZClcbiAgICAgKiAtIFtgc291cmNlYF0oI3NvdXJjZSlcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBhdXRvY29tcGxldGVgXG4gICAgICogICB0eXBlOiAnYXV0b2NvbXBsZXRlJyxcbiAgICAgKiAgIC8vIHNldCBvcHRpb25zIGF2YWlsYWJsZSBpbiBldmVyeSBgYXV0b2NvbXBsZXRlYCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICBzb3VyY2U6IFsnQScsICdCJywgJ0MnXSxcbiAgICAgKiAgIC8vIHZhbHVlcyBlbnRlcmVkIG11c3QgbWF0Y2ggYEFgLCBgQmAsIG9yIGBDYFxuICAgICAqICAgc3RyaWN0OiB0cnVlXG4gICAgICogICB9LFxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgc3RyaWN0OiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGB0YWJsZUNsYXNzTmFtZWAgb3B0aW9uIGxldHMgeW91IGFkZCBDU1MgY2xhc3MgbmFtZXNcbiAgICAgKiB0byBldmVyeSBIYW5kc29udGFibGUgaW5zdGFuY2UgaW5zaWRlIHRoZSBgY29udGFpbmVyYCBlbGVtZW50LlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGB0YWJsZUNsYXNzTmFtZWAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgQSBzdHJpbmcgICAgICAgICAgICB8IEFkZCBhIHNpbmdsZSBDU1MgY2xhc3MgbmFtZSB0byBldmVyeSBIYW5kc29udGFibGUgaW5zdGFuY2UgaW5zaWRlIHRoZSBgY29udGFpbmVyYCBlbGVtZW50ICB8XG4gICAgICogfCBBbiBhcnJheSBvZiBzdHJpbmdzIHwgQWRkIG11bHRpcGxlIENTUyBjbGFzcyBuYW1lcyB0byBldmVyeSBIYW5kc29udGFibGUgaW5zdGFuY2UgaW5zaWRlIHRoZSBgY29udGFpbmVyYCBlbGVtZW50IHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgY3VycmVudFJvd0NsYXNzTmFtZWBdKCNjdXJyZW50Um93Q2xhc3NOYW1lKVxuICAgICAqIC0gW2BjdXJyZW50Q29sQ2xhc3NOYW1lYF0oI2N1cnJlbnRDb2xDbGFzc05hbWUpXG4gICAgICogLSBbYGN1cnJlbnRIZWFkZXJDbGFzc05hbWVgXSgjY3VycmVudEhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgYWN0aXZlSGVhZGVyQ2xhc3NOYW1lYF0oI2FjdGl2ZUhlYWRlckNsYXNzTmFtZSlcbiAgICAgKiAtIFtgaW52YWxpZENlbGxDbGFzc05hbWVgXSgjaW52YWxpZENlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZWBdKCNwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYHJlYWRPbmx5Q2VsbENsYXNzTmFtZWBdKCNyZWFkT25seUNlbGxDbGFzc05hbWUpXG4gICAgICogLSBbYG5vV29yZFdyYXBDbGFzc05hbWVgXSgjbm9Xb3JkV3JhcENsYXNzTmFtZSlcbiAgICAgKiAtIFtgY29tbWVudGVkQ2VsbENsYXNzTmFtZWBdKCNjb21tZW50ZWRDZWxsQ2xhc3NOYW1lKVxuICAgICAqIC0gW2BjbGFzc05hbWVgXSgjY2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ3xzdHJpbmdbXX1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGFkZCBhIGB5b3VyLWNsYXNzLW5hbWVgIENTUyBjbGFzcyBuYW1lXG4gICAgICogLy8gdG8gZXZlcnkgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGluc2lkZSB0aGUgYGNvbnRhaW5lcmAgZWxlbWVudFxuICAgICAqIHRhYmxlQ2xhc3NOYW1lOiAneW91ci1jbGFzcy1uYW1lJyxcbiAgICAgKlxuICAgICAqIC8vIGFkZCBgZmlyc3QtY2xhc3MtbmFtZWAgYW5kIGBzZWNvbmQtY2xhc3MtbmFtZWAgQ1NTIGNsYXNzIG5hbWVzXG4gICAgICogLy8gdG8gZXZlcnkgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGluc2lkZSB0aGUgYGNvbnRhaW5lcmAgZWxlbWVudFxuICAgICAqIHRhYmxlQ2xhc3NOYW1lOiBbJ2ZpcnN0LWNsYXNzLW5hbWUnLCAnc2Vjb25kLWNsYXNzLW5hbWUnXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0YWJsZUNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgdGFiTW92ZXNgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBhY3Rpb24gb2YgdGhlIDxrYmQ+KipUYWIqKjwva2JkPiBrZXkuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHRhYk1vdmVzYCBvcHRpb24gdG8gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzXG4gICAgICogKG9yIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHN1Y2ggYW4gb2JqZWN0KTpcbiAgICAgKlxuICAgICAqIHwgUHJvcGVydHkgfCBUeXBlICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGByb3dgICAgIHwgTnVtYmVyIHwgLSBPbiBwcmVzc2luZyA8a2JkPioqVGFiKio8L2tiZD4sIG1vdmUgc2VsZWN0aW9uIGByb3dgIHJvd3MgZG93bjxicj4tIE9uIHByZXNzaW5nIDxrYmQ+KipTaGlmdCoqPC9rYmQ+KzxrYmQ+KipUYWIqKjwva2JkPiwgbW92ZSBzZWxlY3Rpb24gYHJvd2Agcm93cyB1cCAgICAgICAgICAgICAgfFxuICAgICAqIHwgYGNvbGAgICAgfCBOdW1iZXIgfCAtIE9uIHByZXNzaW5nIDxrYmQ+KipUYWIqKjwva2JkPiwgbW92ZSBzZWxlY3Rpb24gYGNvbGAgY29sdW1ucyByaWdodDxicj4tIE9uIHByZXNzaW5nIDxrYmQ+KipTaGlmdCoqPC9rYmQ+KzxrYmQ+KipUYWIqKjwva2JkPiwgbW92ZSBzZWxlY3Rpb24gYGNvbGAgY29sdW1ucyBsZWZ0ICAgICB8XG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7b2JqZWN0fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IHtyb3c6IDAsIGNvbDogMX1cbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIG9uIHByZXNzaW5nIFRhYiwgbW92ZSBzZWxlY3Rpb24gMiByb3dzIGRvd24gYW5kIDIgY29sdW1ucyByaWdodFxuICAgICAqIC8vIG9uIHByZXNzaW5nIFNoaWZ0K1RhYiwgbW92ZSBzZWxlY3Rpb24gMiByb3dzIHVwIGFuZCAyIGNvbHVtbnMgbGVmdFxuICAgICAqIHRhYk1vdmVzOiB7cm93OiAyLCBjb2w6IDJ9LFxuICAgICAqXG4gICAgICogLy8gdGhlIHNhbWUgc2V0dGluZywgYXMgYSBmdW5jdGlvblxuICAgICAqIC8vIGBldmVudGAgaXMgYSBET00gRXZlbnQgb2JqZWN0IHJlY2VpdmVkIG9uIHByZXNzaW5nIFRhYlxuICAgICAqIC8vIHlvdSBjYW4gdXNlIGl0IHRvIGNoZWNrIHdoZXRoZXIgdGhlIHVzZXIgcHJlc3NlZCBUYWIgb3IgU2hpZnQrVGFiXG4gICAgICogdGFiTW92ZXMoZXZlbnQpIHtcbiAgICAgKiAgIHJldHVybiB7cm93OiAyLCBjb2w6IDJ9O1xuICAgICAqIH0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdGFiTW92ZXM6IHtcbiAgICAgIHJvdzogMCxcbiAgICAgIGNvbDogMVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGB0aXRsZWAgb3B0aW9uIGNvbmZpZ3VyZXMgW2NvbHVtbiBoZWFkZXJdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLWhlYWRlci9jb2x1bW4taGVhZGVyLm1kKSBuYW1lcy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgdGl0bGVgIG9wdGlvbiB0byBhIHN0cmluZy5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtDb2x1bW4gaGVhZGVyXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1oZWFkZXIvY29sdW1uLWhlYWRlci5tZClcbiAgICAgKiAtIFtgY29sdW1uc2BdKCNjb2x1bW5zKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBmaXJzdCBjb2x1bW4gaGVhZGVyIG5hbWUgdG8gYEZpcnN0IG5hbWVgXG4gICAgICogICAgIHRpdGxlOiAnRmlyc3QgbmFtZScsXG4gICAgICogICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgKiAgIH0sXG4gICAgICogICB7XG4gICAgICogICAgIC8vIHNldCB0aGUgc2Vjb25kIGNvbHVtbiBoZWFkZXIgbmFtZSB0byBgTGFzdCBuYW1lYFxuICAgICAqICAgICB0aXRsZTogJ0xhc3QgbmFtZScsXG4gICAgICogICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgKiAgIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGB0cmltRHJvcGRvd25gIG9wdGlvbiBjb25maWd1cmVzIHRoZSB3aWR0aCBvZiB0aGUgW2BhdXRvY29tcGxldGVgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZClcbiAgICAgKiBhbmQgW2Bkcm9wZG93bmBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvZHJvcGRvd24tY2VsbC10eXBlL2Ryb3Bkb3duLWNlbGwtdHlwZS5tZCkgbGlzdHMuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHRyaW1Ecm9wZG93bmAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgKGRlZmF1bHQpIHwgTWFrZSB0aGUgZHJvcGRvd24vYXV0b2NvbXBsZXRlIGxpc3QncyB3aWR0aCB0aGUgc2FtZSBhcyB0aGUgZWRpdGVkIGNlbGwncyB3aWR0aCB8XG4gICAgICogfCBgZmFsc2VgICAgICAgICAgIHwgU2NhbGUgdGhlIGRyb3Bkb3duL2F1dG9jb21wbGV0ZSBsaXN0J3Mgd2lkdGggdG8gdGhlIGxpc3QncyBjb250ZW50ICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbRHJvcGRvd24gY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2Ryb3Bkb3duLWNlbGwtdHlwZS9kcm9wZG93bi1jZWxsLXR5cGUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIHR5cGU6ICdhdXRvY29tcGxldGUnLFxuICAgICAqICAgICAvLyBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIC8vIG1ha2UgdGhlIGBhdXRvY29tcGxldGVgIGxpc3QncyB3aWR0aCB0aGUgc2FtZSBhcyB0aGUgZWRpdGVkIGNlbGwncyB3aWR0aFxuICAgICAqICAgICB0cmltRHJvcGRvd246IHRydWUsXG4gICAgICogICB9LFxuICAgICAqICAge1xuICAgICAqICAgICB0eXBlOiAnZHJvcGRvd24nLFxuICAgICAqICAgICAvLyBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIC8vIHNjYWxlIHRoZSBgZHJvcGRvd25gIGxpc3QncyB3aWR0aCB0byB0aGUgbGlzdCdzIGNvbnRlbnRcbiAgICAgKiAgICAgdHJpbURyb3Bkb3duOiBmYWxzZSxcbiAgICAgKiAgIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRyaW1Ecm9wZG93bjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBUaGUgYHRyaW1Sb3dzYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BUcmltUm93c2BdKEAvYXBpL3RyaW1Sb3dzLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHRyaW1Sb3dzYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBmYWxzZWAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGlzYWJsZSB0aGUgW2BUcmltUm93c2BdKEAvYXBpL3RyaW1Sb3dzLm1kKSBwbHVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGB0cnVlYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRW5hYmxlIHRoZSBbYFRyaW1Sb3dzYF0oQC9hcGkvdHJpbVJvd3MubWQpIHBsdWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEFuIGFycmF5IG9mIHBoeXNpY2FsIHJvdyBpbmRleGVzIHwgLSBFbmFibGUgdGhlIFtgVHJpbVJvd3NgXShAL2FwaS90cmltUm93cy5tZCkgcGx1Z2luPGJyPi0gVHJpbSBzZWxlY3RlZCByb3dzIGF0IGluaXRpYWxpemF0aW9uIHxcbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQbHVnaW5zOiBgVHJpbVJvd3NgXShAL2FwaS90cmltUm93cy5tZClcbiAgICAgKiAtIFtSb3cgdHJpbW1pbmddKEAvZ3VpZGVzL3Jvd3Mvcm93LXRyaW1taW5nL3Jvdy10cmltbWluZy5tZClcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufG51bWJlcltdfVxuICAgICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgICAqIEBjYXRlZ29yeSBUcmltUm93c1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIGVuYWJsZSB0aGUgYFRyaW1Sb3dzYCBwbHVnaW5cbiAgICAgKiB0cmltUm93czogdHJ1ZSxcbiAgICAgKlxuICAgICAqIC8vIGVuYWJsZSB0aGUgYFRyaW1Sb3dzYCBwbHVnaW5cbiAgICAgKiAvLyBhdCBIYW5kc29udGFibGUncyBpbml0aWFsaXphdGlvbiwgdHJpbSByb3dzIDUsIDEwLCBhbmQgMTVcbiAgICAgKiB0cmltUm93czogWzUsIDEwLCAxNV0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdHJpbVJvd3M6IHVuZGVmaW5lZCxcbiAgICAvKipcbiAgICAgKiBUaGUgYHRyaW1XaGl0ZXNwYWNlYCBvcHRpb24gY29uZmlndXJlcyBhdXRvbWF0aWMgd2hpdGVzcGFjZSByZW1vdmFsLiBUaGlzIG9wdGlvblxuICAgICAqIGFmZmVjdHMgdGhlIGNlbGwgcmVuZGVyZXIgYW5kIHRoZSBjZWxsIGVkaXRvci5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgdHJpbVdoaXRlc3BhY2VgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGB0cnVlYCAoZGVmYXVsdCkgfCBSZW1vdmUgd2hpdGVzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBhdCB0aGUgZW5kIG9mIGVhY2ggY2VsbCB8XG4gICAgICogfCBgZmFsc2VgICAgICAgICAgIHwgRG9uJ3QgcmVtb3ZlIHdoaXRlc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gZG9uJ3QgcmVtb3ZlIHdoaXRlc3BhY2VcbiAgICAgKiAgICAgLy8gZnJvbSBhbnkgY2VsbCBvZiB0aGlzIGNvbHVtblxuICAgICAqICAgICB0cmltV2hpdGVzcGFjZTogZmFsc2VcbiAgICAgKiAgIH1cbiAgICAgKiBdXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdHJpbVdoaXRlc3BhY2U6IHRydWUsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGB0eXBlYCBvcHRpb24gbGV0cyB5b3Ugc2V0IHRoZSBbYHJlbmRlcmVyYF0oI3JlbmRlcmVyKSwgW2BlZGl0b3JgXSgjZWRpdG9yKSwgYW5kIFtgdmFsaWRhdG9yYF0oI3ZhbGlkYXRvcilcbiAgICAgKiBvcHRpb25zIGFsbCBhdCBvbmNlLCBieSBzZWxlY3RpbmcgYSBbY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NlbGwtdHlwZS9jZWxsLXR5cGUubWQpLlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGB0eXBlYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IENlbGwgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUmVuZGVyZXIsIGVkaXRvciAmIHZhbGlkYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBBIFtjdXN0b20gY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NlbGwtdHlwZS9jZWxsLXR5cGUubWQpICAgICAgICAgICAgfCBSZW5kZXJlcjogeW91ciBbY3VzdG9tIGNlbGwgcmVuZGVyZXJdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtcmVuZGVyZXIvY2VsbC1yZW5kZXJlci5tZCk8YnI+RWRpdG9yOiB5b3VyIFtjdXN0b20gY2VsbCBlZGl0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtZWRpdG9yL2NlbGwtZWRpdG9yLm1kKTxicj5WYWxpZGF0b3I6IHlvdXIgW2N1c3RvbSBjZWxsIHZhbGlkYXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpIHxcbiAgICAgKiB8IFtgJ2F1dG9jb21wbGV0ZSdgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS5tZCkgfCBSZW5kZXJlcjogYEF1dG9jb21wbGV0ZVJlbmRlcmVyYDxicj5FZGl0b3I6IGBBdXRvY29tcGxldGVFZGl0b3JgPGJyPlZhbGlkYXRvcjogYEF1dG9jb21wbGV0ZVZhbGlkYXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgW2AnY2hlY2tib3gnYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9jaGVja2JveC1jZWxsLXR5cGUvY2hlY2tib3gtY2VsbC10eXBlLm1kKSAgICAgICAgIHwgUmVuZGVyZXI6IGBDaGVja2JveFJlbmRlcmVyYDxicj5FZGl0b3I6IGBDaGVja2JveEVkaXRvcmA8YnI+VmFsaWRhdG9yOiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgJ2RhdGUnYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9kYXRlLWNlbGwtdHlwZS9kYXRlLWNlbGwtdHlwZS5tZCkgICAgICAgICAgICAgICAgIHwgUmVuZGVyZXI6IGBEYXRlUmVuZGVyZXJgPGJyPkVkaXRvcjogYERhdGVFZGl0b3JgPGJyPlZhbGlkYXRvcjogYERhdGVWYWxpZGF0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgJ2Ryb3Bkb3duJ2BdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvZHJvcGRvd24tY2VsbC10eXBlL2Ryb3Bkb3duLWNlbGwtdHlwZS5tZCkgICAgICAgICB8IFJlbmRlcmVyOiBgRHJvcGRvd25SZW5kZXJlcmA8YnI+RWRpdG9yOiBgRHJvcGRvd25FZGl0b3JgPGJyPlZhbGlkYXRvcjogYERyb3Bkb3duVmFsaWRhdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYCdoYW5kc29udGFibGUnYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9oYW5kc29udGFibGUtY2VsbC10eXBlL2hhbmRzb250YWJsZS1jZWxsLXR5cGUubWQpIHwgUmVuZGVyZXI6IGBBdXRvY29tcGxldGVSZW5kZXJlcmA8YnI+RWRpdG9yOiBgSGFuZHNvbnRhYmxlRWRpdG9yYDxicj5WYWxpZGF0b3I6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgJ251bWVyaWMnYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9udW1lcmljLWNlbGwtdHlwZS9udW1lcmljLWNlbGwtdHlwZS5tZCkgICAgICAgICAgIHwgUmVuZGVyZXI6IGBOdW1lcmljUmVuZGVyZXJgPGJyPkVkaXRvcjogYE51bWVyaWNFZGl0b3JgPGJyPlZhbGlkYXRvcjogYE51bWVyaWNWYWxpZGF0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IFtgJ3Bhc3N3b3JkJ2BdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvcGFzc3dvcmQtY2VsbC10eXBlL3Bhc3N3b3JkLWNlbGwtdHlwZS5tZCkgICAgICAgICB8IFJlbmRlcmVyOiBgUGFzc3dvcmRSZW5kZXJlcmA8YnI+RWRpdG9yOiBgUGFzc3dvcmRFZGl0b3JgPGJyPlZhbGlkYXRvcjogLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ3RleHQnYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJlbmRlcmVyOiBgVGV4dFJlbmRlcmVyYDxicj5FZGl0b3I6IGBUZXh0RWRpdG9yYDxicj5WYWxpZGF0b3I6IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBbYCd0aW1lYCddKEAvZ3VpZGVzL2NlbGwtdHlwZXMvdGltZS1jZWxsLXR5cGUvdGltZS1jZWxsLXR5cGUubWQpICAgICAgICAgICAgICAgICB8IFJlbmRlcmVyOiBgVGltZVJlbmRlcmVyYDxicj5FZGl0b3I6IGBUaW1lRWRpdG9yYDxicj5WYWxpZGF0b3I6IGBUaW1lVmFsaWRhdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NlbGwtdHlwZS9jZWxsLXR5cGUubWQpXG4gICAgICogLSBbQ2VsbCByZW5kZXJlcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC1yZW5kZXJlci9jZWxsLXJlbmRlcmVyLm1kKVxuICAgICAqIC0gW0NlbGwgZWRpdG9yXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLWVkaXRvci9jZWxsLWVkaXRvci5tZClcbiAgICAgKiAtIFtDZWxsIHZhbGlkYXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpXG4gICAgICogLSBbQ29uZmlndXJhdGlvbiBvcHRpb25zOiBDYXNjYWRpbmcgY29uZmlndXJhdGlvbl0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy9jb25maWd1cmF0aW9uLW9wdGlvbnMubWQjY2FzY2FkaW5nLWNvbmZpZ3VyYXRpb24pXG4gICAgICogLSBbYHJlbmRlcmVyYF0oI3JlbmRlcmVyKVxuICAgICAqIC0gW2BlZGl0b3JgXSgjZWRpdG9yKVxuICAgICAqIC0gW2B2YWxpZGF0b3JgXSgjdmFsaWRhdG9yKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCAndGV4dCdcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgYG51bWVyaWNgIGNlbGwgdHlwZSBmb3IgZWFjaCBjZWxsIG9mIHRoZSBlbnRpcmUgZ3JpZFxuICAgICAqIHR5cGU6IGAnbnVtZXJpYydgLFxuICAgICAqXG4gICAgICogLy8gYXBwbHkgdGhlIGB0eXBlYCBvcHRpb24gdG8gaW5kaXZpZHVhbCBjb2x1bW5zXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGBhdXRvY29tcGxldGVgIGNlbGwgdHlwZSBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIHR5cGU6ICdhdXRvY29tcGxldGUnXG4gICAgICogICB9LFxuICAgICAqICAge1xuICAgICAqICAgICAvLyBzZXQgdGhlIGBteUN1c3RvbUNlbGxUeXBlYCBjZWxsIHR5cGUgZm9yIGVhY2ggY2VsbCBvZiB0aGlzIGNvbHVtblxuICAgICAqICAgICB0eXBlOiAnbXlDdXN0b21DZWxsVHlwZSdcbiAgICAgKiAgIH1cbiAgICAgKiBdXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdHlwZTogJ3RleHQnLFxuICAgIC8qKlxuICAgICAqIFRoZSBgdW5jaGVja2VkVGVtcGxhdGVgIG9wdGlvbiBsZXRzIHlvdSBjb25maWd1cmUgd2hhdCB2YWx1ZVxuICAgICAqIGFuIHVuY2hlY2tlZCBbYGNoZWNrYm94YF0oQC9ndWlkZXMvY2VsbC10eXBlcy9jaGVja2JveC1jZWxsLXR5cGUvY2hlY2tib3gtY2VsbC10eXBlLm1kKSBjZWxsIGhhcy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgdW5jaGVja2VkVGVtcGxhdGVgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGZhbHNlYCAoZGVmYXVsdCkgfCBJZiBhIFtgY2hlY2tib3hgXShAL2d1aWRlcy9jZWxsLXR5cGVzL2NoZWNrYm94LWNlbGwtdHlwZS9jaGVja2JveC1jZWxsLXR5cGUubWQpIGNlbGwgaXMgdW5jaGVja2VkLDxicj50aGUgW2BnZXREYXRhQXRDZWxsYF0oQC9hcGkvY29yZS5tZCNnZXREYXRhQXRDZWxsKSBtZXRob2QgZm9yIHRoaXMgY2VsbCByZXR1cm5zIGBmYWxzZWAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEEgc3RyaW5nICAgICAgICAgIHwgSWYgYSBbYGNoZWNrYm94YF0oQC9ndWlkZXMvY2VsbC10eXBlcy9jaGVja2JveC1jZWxsLXR5cGUvY2hlY2tib3gtY2VsbC10eXBlLm1kKSBjZWxsIGlzIHVuY2hlY2tlZCw8YnI+dGhlIFtgZ2V0RGF0YUF0Q2VsbGBdKEAvYXBpL2NvcmUubWQjZ2V0RGF0YUF0Q2VsbCkgbWV0aG9kIGZvciB0aGlzIGNlbGwgcmV0dXJucyBhIHN0cmluZyBvZiB5b3VyIGNob2ljZSB8XG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2hlY2tib3ggY2VsbCB0eXBlOiBDaGVja2JveCB0ZW1wbGF0ZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9jaGVja2JveC1jZWxsLXR5cGUvY2hlY2tib3gtY2VsbC10eXBlLm1kI2NoZWNrYm94LXRlbXBsYXRlKVxuICAgICAqIC0gW2BnZXREYXRhQXRDZWxsKClgXShAL2FwaS9jb3JlLm1kI2dldERhdGFBdENlbGwpXG4gICAgICogLSBbYGNoZWNrZWRUZW1wbGF0ZWBdKCNjaGVja2VkVGVtcGxhdGUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbnxzdHJpbmd8bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIC8vIHNldCB0aGUgYHR5cGVgIG9mIGVhY2ggY2VsbCBpbiB0aGlzIGNvbHVtbiB0byBgY2hlY2tib3hgXG4gICAgICogICAgIC8vIHdoZW4gdW5jaGVja2VkLCB0aGUgY2VsbCdzIHZhbHVlIGlzIGBmYWxzZWBcbiAgICAgKiAgICAgLy8gd2hlbiBjaGVja2VkLCB0aGUgY2VsbCdzIHZhbHVlIGlzIGB0cnVlYFxuICAgICAqICAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gc2V0IHRoZSBgdHlwZWAgb2YgZWFjaCBjZWxsIGluIHRoaXMgY29sdW1uIHRvIGBjaGVja2JveGBcbiAgICAgKiAgICAgLy8gd2hlbiB1bmNoZWNrZWQsIHRoZSBjZWxsJ3MgdmFsdWUgaXMgYCdObydgXG4gICAgICogICAgIC8vIHdoZW4gY2hlY2tlZCwgdGhlIGNlbGwncyB2YWx1ZSBpcyBgJ1llcydgXG4gICAgICogICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICogICAgIHVuY2hlY2tlZFRlbXBsYXRlOiAnTm8nXG4gICAgICogICAgIGNoZWNrZWRUZW1wbGF0ZTogJ1llcycsXG4gICAgICogIH1cbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVuY2hlY2tlZFRlbXBsYXRlOiB1bmRlZmluZWQsXG4gICAgLyoqXG4gICAgICogVGhlIGB1bmRvYCBvcHRpb24gY29uZmlndXJlcyB0aGUgW2BVbmRvUmVkb2BdKEAvYXBpL3VuZG9SZWRvLm1kKSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHVuZG9gIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAgICogfCBgdHJ1ZWAgIHwgRW5hYmxlIHRoZSBbYFVuZG9SZWRvYF0oQC9hcGkvdW5kb1JlZG8ubWQpIHBsdWdpbiAgfFxuICAgICAqIHwgYGZhbHNlYCB8IERpc2FibGUgdGhlIFtgVW5kb1JlZG9gXShAL2FwaS91bmRvUmVkby5tZCkgcGx1Z2luIHxcbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgdW5kb2Agb3B0aW9uIGlzIHNldCB0byBgdW5kZWZpbmVkYCxcbiAgICAgKiBidXQgdGhlIFtgVW5kb1JlZG9gXShAL2FwaS91bmRvUmVkby5tZCkgcGx1Z2luIGFjdHMgYXMgZW5hYmxlZC5cbiAgICAgKiBUbyBkaXNhYmxlIHRoZSBbYFVuZG9SZWRvYF0oQC9hcGkvdW5kb1JlZG8ubWQpIHBsdWdpbiBjb21wbGV0ZWx5LFxuICAgICAqIHNldCB0aGUgYHVuZG9gIG9wdGlvbiB0byBgZmFsc2VgLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1VuZG8gYW5kIHJlZG9dKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy91bmRvLXJlZG8vdW5kby1yZWRvLm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICogQGNhdGVnb3J5IFVuZG9SZWRvXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gZW5hYmxlIHRoZSBgVW5kb1JlZG9gIHBsdWdpblxuICAgICAqIHVuZG86IHRydWUsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdW5kbzogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgdmFsaWRhdG9yYCBvcHRpb24gc2V0cyBhIFtjZWxsIHZhbGlkYXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpIGZvciBhIGNlbGwuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHZhbGlkYXRvcmAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgQSBzdHJpbmcgICAgICAgICAgICAgfCBBIFtjZWxsIHZhbGlkYXRvciBhbGlhc10oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpICAgICAgICAgICAgICB8XG4gICAgICogfCBBIGZ1bmN0aW9uICAgICAgICAgICB8IFlvdXIgW2N1c3RvbSBjZWxsIHZhbGlkYXRvciBmdW5jdGlvbl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpIHxcbiAgICAgKiB8IEEgcmVndWxhciBleHByZXNzaW9uIHwgQSByZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBmb3IgY2VsbCB2YWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogQnkgc2V0dGluZyB0aGUgYHZhbGlkYXRvcmAgb3B0aW9uIHRvIGEgc3RyaW5nLFxuICAgICAqIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIFtjZWxsIHZhbGlkYXRvciBhbGlhc2VzXShAL2d1aWRlcy9jZWxsLWZ1bmN0aW9ucy9jZWxsLXZhbGlkYXRvci9jZWxsLXZhbGlkYXRvci5tZCk6XG4gICAgICpcbiAgICAgKiB8IEFsaWFzICAgICAgICAgICAgICAgfCBDZWxsIHZhbGlkYXRvciBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgQSBjdXN0b20gYWxpYXMgICAgICB8IFlvdXIgW2N1c3RvbSBjZWxsIHZhbGlkYXRvcl0oQC9ndWlkZXMvY2VsbC1mdW5jdGlvbnMvY2VsbC12YWxpZGF0b3IvY2VsbC12YWxpZGF0b3IubWQpIHxcbiAgICAgKiB8IGAnYXV0b2NvbXBsZXRlJ2AgICAgfCBgQXV0b2NvbXBsZXRlVmFsaWRhdG9yYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ2RhdGUnYCAgICAgICAgICAgIHwgYERhdGVWYWxpZGF0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgYCdkcm9wZG93bidgICAgICAgICB8IGBEcm9wZG93blZhbGlkYXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IGAnbnVtZXJpYydgICAgICAgICAgfCBgTnVtZXJpY1ZhbGlkYXRvcmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCBgJ3RpbWUnYCAgICAgICAgICAgIHwgYFRpbWVWYWxpZGF0b3JgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogVG8gc2V0IHRoZSBbYGVkaXRvcmBdKCNlZGl0b3IpLCBbYHJlbmRlcmVyYF0oI3JlbmRlcmVyKSwgYW5kIFtgdmFsaWRhdG9yYF0oI3ZhbGlkYXRvcilcbiAgICAgKiBvcHRpb25zIGFsbCBhdCBvbmNlLCB1c2UgdGhlIFtgdHlwZWBdKCN0eXBlKSBvcHRpb24uXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQ2VsbCB2YWxpZGF0b3JdKEAvZ3VpZGVzL2NlbGwtZnVuY3Rpb25zL2NlbGwtdmFsaWRhdG9yL2NlbGwtdmFsaWRhdG9yLm1kKVxuICAgICAqIC0gW0NlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9jZWxsLXR5cGUvY2VsbC10eXBlLm1kKVxuICAgICAqIC0gW0NvbmZpZ3VyYXRpb24gb3B0aW9uczogQ2FzY2FkaW5nIGNvbmZpZ3VyYXRpb25dKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9jb25maWd1cmF0aW9uLW9wdGlvbnMvY29uZmlndXJhdGlvbi1vcHRpb25zLm1kI2Nhc2NhZGluZy1jb25maWd1cmF0aW9uKVxuICAgICAqIC0gW2B0eXBlYF0oI3R5cGUpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb258UmVnRXhwfHN0cmluZ31cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbHVtbnM6IFtcbiAgICAgKiAgICB7XG4gICAgICogICAgICAvLyB1c2UgYSBidWlsdC1pbiBgbnVtZXJpY2AgY2VsbCB2YWxpZGF0b3JcbiAgICAgKiAgICAgIHZhbGlkYXRvcjogJ251bWVyaWMnXG4gICAgICogICAgfSxcbiAgICAgKiAgICB7XG4gICAgICogICAgICAvLyB2YWxpZGF0ZSBhZ2FpbnN0IGEgcmVndWxhciBleHByZXNzaW9uXG4gICAgICogICAgICB2YWxpZGF0b3I6IC9eWzAtOV0kL1xuICAgICAqICAgIH0sXG4gICAgICogICAge1xuICAgICAqICAgICAgLy8gYWRkIGEgY3VzdG9tIGNlbGwgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gICAgICogICAgICB2YWxpZGF0b3IodmFsdWUsIGNhbGxiYWNrKSB7XG4gICAgICogICAgICAgICAgLi4uXG4gICAgICogICAgICB9XG4gICAgICogICAgfSxcbiAgICAgKiBdLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHZhbGlkYXRvcjogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIFRoZSBgdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXRgIG9wdGlvbiBjb25maWd1cmVzIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuICAgICAqIHRvIGJlIHJlbmRlcmVkIG91dHNpZGUgb2YgdGhlIGdyaWQncyB2aWV3cG9ydC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXRgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAgICAgKiB8IGBhdXRvYCAoZGVmYXVsdCkgICB8IFVzZSB0aGUgb2Zmc2V0IGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseSBieSBIYW5kc29udGFibGUgfFxuICAgICAqIHwgQSBudW1iZXIgICAgICAgICAgIHwgU2V0IHRoZSBvZmZzZXQgbWFudWFsbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICAgICpcbiAgICAgKiBUaGUgYHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0YCBzZXR0aW5nIGlzIGlnbm9yZWQgd2hlbiBbYHJlbmRlckFsbENvbHVtbnNgXSgjcmVuZGVyQWxsQ29sdW1ucykgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtQZXJmb3JtYW5jZTogRGVmaW5lIHRoZSBudW1iZXIgb2YgcHJlLXJlbmRlcmVkIHJvd3MgYW5kIGNvbHVtbnNdKEAvZ3VpZGVzL29wdGltaXphdGlvbi9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS5tZCNkZWZpbmUtdGhlLW51bWJlci1vZi1wcmUtcmVuZGVyZWQtcm93cy1hbmQtY29sdW1ucylcbiAgICAgKlxuICAgICAqIEBtZW1iZXJvZiBPcHRpb25zI1xuICAgICAqIEB0eXBlIHtudW1iZXJ8c3RyaW5nfVxuICAgICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gcmVuZGVyIDcwIGNvbHVtbnMgb3V0c2lkZSBvZiB0aGUgZ3JpZCdzIHZpZXdwb3J0XG4gICAgICogdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6IDcwLFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiAnYXV0bycsXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogVGhlIGB2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldGAgb3B0aW9uIGNvbmZpZ3VyZXMgdGhlIG51bWJlciBvZiByb3dzXG4gICAgICogdG8gYmUgcmVuZGVyZWQgb3V0c2lkZSBvZiB0aGUgZ3JpZCdzIHZpZXdwb3J0LlxuICAgICAqXG4gICAgICogWW91IGNhbiBzZXQgdGhlIGB2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldGAgb3B0aW9uIHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuICAgICAqXG4gICAgICogfCBTZXR0aW5nICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYGF1dG9gIChkZWZhdWx0KSAgIHwgVXNlIHRoZSBvZmZzZXQgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IEhhbmRzb250YWJsZSB8XG4gICAgICogfCBBIG51bWJlciAgICAgICAgICAgfCBTZXQgdGhlIG9mZnNldCBtYW51YWxseSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICAgKlxuICAgICAqIFRoZSBgdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXRgIHNldHRpbmcgaXMgaWdub3JlZCB3aGVuIFtgcmVuZGVyQWxsUm93c2BdKCNyZW5kZXJBbGxSb3dzKSBpcyBzZXQgdG8gYHRydWVgLlxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW1BlcmZvcm1hbmNlOiBEZWZpbmUgdGhlIG51bWJlciBvZiBwcmUtcmVuZGVyZWQgcm93cyBhbmQgY29sdW1uc10oQC9ndWlkZXMvb3B0aW1pemF0aW9uL3BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLm1kI2RlZmluZS10aGUtbnVtYmVyLW9mLXByZS1yZW5kZXJlZC1yb3dzLWFuZC1jb2x1bW5zKVxuICAgICAqIC0gW0NvbHVtbiB2aXJ0dWFsaXphdGlvbl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tdmlydHVhbGl6YXRpb24vY29sdW1uLXZpcnR1YWxpemF0aW9uLm1kKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge251bWJlcnxzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiAvLyByZW5kZXIgNzAgcm93cyBvdXRzaWRlIG9mIHRoZSBncmlkJ3Mgdmlld3BvcnRcbiAgICAgKiB2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDogNzAsXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6ICdhdXRvJyxcbiAgICAvKipcbiAgICAgKiBUaGUgYHZpc2libGVSb3dzYCBvcHRpb24gc2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBbYGF1dG9jb21wbGV0ZWBdKEAvZ3VpZGVzL2NlbGwtdHlwZXMvYXV0b2NvbXBsZXRlLWNlbGwtdHlwZS9hdXRvY29tcGxldGUtY2VsbC10eXBlLm1kKVxuICAgICAqIGFuZCBbYGRyb3Bkb3duYF0oQC9ndWlkZXMvY2VsbC10eXBlcy9kcm9wZG93bi1jZWxsLXR5cGUvZHJvcGRvd24tY2VsbC10eXBlLm1kKSBsaXN0cy5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIG51bWJlciBvZiBsaXN0IG9wdGlvbnMgZXhjZWVkcyB0aGUgYHZpc2libGVSb3dzYCBudW1iZXIsIGEgc2Nyb2xsYmFyIGFwcGVhcnMuXG4gICAgICpcbiAgICAgKiBSZWFkIG1vcmU6XG4gICAgICogLSBbQXV0b2NvbXBsZXRlIGNlbGwgdHlwZV0oQC9ndWlkZXMvY2VsbC10eXBlcy9hdXRvY29tcGxldGUtY2VsbC10eXBlL2F1dG9jb21wbGV0ZS1jZWxsLXR5cGUubWQpXG4gICAgICogLSBbRHJvcGRvd24gY2VsbCB0eXBlXShAL2d1aWRlcy9jZWxsLXR5cGVzL2Ryb3Bkb3duLWNlbGwtdHlwZS9kcm9wZG93bi1jZWxsLXR5cGUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IDEwXG4gICAgICogQGNhdGVnb3J5IENvcmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBganNcbiAgICAgKiBjb2x1bW5zOiBbXG4gICAgICogICB7XG4gICAgICogICAgIHR5cGU6ICdhdXRvY29tcGxldGUnLFxuICAgICAqICAgICAvLyBzZXQgdGhlIGBhdXRvY29tcGxldGVgIGxpc3QncyBoZWlnaHQgdG8gMTUgb3B0aW9uc1xuICAgICAqICAgICAvLyBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIHZpc2libGVSb3dzOiAxNSxcbiAgICAgKiAgIH0sXG4gICAgICogICB7XG4gICAgICogICAgIHR5cGU6ICdkcm9wZG93bicsXG4gICAgICogICAgIC8vIHNldCB0aGUgYGRyb3Bkb3duYCBsaXN0J3MgaGVpZ2h0IHRvIDUgb3B0aW9uc1xuICAgICAqICAgICAvLyBmb3IgZWFjaCBjZWxsIG9mIHRoaXMgY29sdW1uXG4gICAgICogICAgIHZpc2libGVSb3dzOiA1LFxuICAgICAqICAgfVxuICAgICAqIF0sXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdmlzaWJsZVJvd3M6IDEwLFxuICAgIC8qKlxuICAgICAqIFRoZSBgd2lkdGhgIG9wdGlvbiBjb25maWd1cmVzIHRoZSB3aWR0aCBvZiB5b3VyIGdyaWQuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHNldCB0aGUgYHdpZHRoYCBvcHRpb24gdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6XG4gICAgICpcbiAgICAgKiB8IFNldHRpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRXhhbXBsZSAgICAgICAgICAgICAgICAgICB8XG4gICAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgQSBudW1iZXIgb2YgcGl4ZWxzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgd2lkdGg6IDUwMGAgICAgICAgICAgICAgIHxcbiAgICAgKiB8IEEgc3RyaW5nIHdpdGggYSBbQ1NTIHVuaXRdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vY3NzcmVmL2Nzc191bml0cy5hc3ApIHwgYHdpZHRoOiAnNzV2dydgICAgICAgICAgICB8XG4gICAgICogfCBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZhbGlkIG51bWJlciBvciBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGB3aWR0aCgpIHsgcmV0dXJuIDUwMDsgfWAgfFxuICAgICAqXG4gICAgICogUmVhZCBtb3JlOlxuICAgICAqIC0gW0dyaWQgc2l6ZV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2dyaWQtc2l6ZS9ncmlkLXNpemUubWQpXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgT3B0aW9ucyNcbiAgICAgKiBAdHlwZSB7bnVtYmVyfHN0cmluZ3xGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKiBAY2F0ZWdvcnkgQ29yZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIHNldCB0aGUgZ3JpZCdzIHdpZHRoIHRvIDUwMHB4XG4gICAgICogd2lkdGg6IDUwMCxcbiAgICAgKlxuICAgICAqIC8vIHNldCB0aGUgZ3JpZCdzIHdpZHRoIHRvIDc1dndcbiAgICAgKiB3aWR0aDogJzc1dncnLFxuICAgICAqXG4gICAgICogLy8gc2V0IHRoZSBncmlkJ3Mgd2lkdGggdG8gNTAwcHgsIHVzaW5nIGEgZnVuY3Rpb25cbiAgICAgKiB3aWR0aCgpIHtcbiAgICAgKiAgIHJldHVybiA1MDA7XG4gICAgICogfSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIC8qKlxuICAgICAqIFRoZSBgd29yZFdyYXBgIG9wdGlvbiBjb25maWd1cmVzIHdoZXRoZXIgY29udGVudCB0aGF0IGV4Y2VlZHMgYSBjb2x1bW4ncyB3aWR0aCBpcyB3cmFwcGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gc2V0IHRoZSBgd29yZFdyYXBgIG9wdGlvbiB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICAgKlxuICAgICAqIHwgU2V0dGluZyAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfFxuICAgICAqIHwgYHRydWVgIChkZWZhdWx0KSB8IElmIGNvbnRlbnQgZXhjZWVkcyB0aGUgY29sdW1uJ3Mgd2lkdGgsIHdyYXAgdGhlIGNvbnRlbnQgfFxuICAgICAqIHwgYGZhbHNlYCAgICAgICAgICB8IERvbid0IHdyYXAgY29udGVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgICAqXG4gICAgICogVG8gc3R5bGUgY2VsbHMgdGhhdCBkb24ndCB3cmFwIGNvbnRlbnQsIHVzZSB0aGUgW2Bub1dvcmRXcmFwQ2xhc3NOYW1lYF0oI25vV29yZFdyYXBDbGFzc05hbWUpIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIFJlYWQgbW9yZTpcbiAgICAgKiAtIFtgbm9Xb3JkV3JhcENsYXNzTmFtZWBdKCNub1dvcmRXcmFwQ2xhc3NOYW1lKVxuICAgICAqXG4gICAgICogQG1lbWJlcm9mIE9wdGlvbnMjXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqIEBjYXRlZ29yeSBDb3JlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGpzXG4gICAgICogLy8gc2V0IGNvbHVtbiB3aWR0aCBmb3IgZXZlcnkgY29sdW1uIG9mIHRoZSBlbnRpcmUgZ3JpZFxuICAgICAqIGNvbFdpZHRoczogMTAwLFxuICAgICAqXG4gICAgICogY29sdW1uczogW1xuICAgICAqICAge1xuICAgICAqICAgICAvLyBkb24ndCB3cmFwIGNvbnRlbnQgaW4gdGhpcyBjb2x1bW5cbiAgICAgKiAgICAgd29yZFdyYXA6IGZhbHNlLFxuICAgICAqICAgfSxcbiAgICAgKiAgIHtcbiAgICAgKiAgICAgLy8gaWYgY29udGVudCBleGNlZWRzIHRoaXMgY29sdW1uJ3Mgd2lkdGgsIHdyYXAgdGhlIGNvbnRlbnRcbiAgICAgKiAgICAgd29yZFdyYXA6IHRydWUsXG4gICAgICogICB9XG4gICAgICogXSxcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3b3JkV3JhcDogdHJ1ZVxuXG4gICAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIH07XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9wbHVnaW5Ib29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL3BsdWdpbkhvb2tzXCIpKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAY2xhc3MgRHluYW1pY0NlbGxNZXRhTW9kXG4gKlxuICogVGhlIGBEeW5hbWljQ2VsbE1ldGFNb2RgIG1vZGlmaWVyIGFsbG93cyBmb3IgZXh0ZW5kaW5nIGNlbGwgbWV0YSBvYmplY3RzXG4gKiAocmV0dXJuZWQgYnkgYGdldENlbGxNZXRhKClgIGZyb20gYE1ldGFNYW5hZ2VyYClcbiAqIGJ5IHVzZXItc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqXG4gKiBUaGUgdXNlci1zcGVjaWZpYyBwcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBhbmQgY2hhbmdlZCBkeW5hbWljYWxseSxcbiAqIGVpdGhlciBieSBIYW5kc29udGFibGUncyBob29rcyAoYGJlZm9yZUdldENlbGxNZXRhYCBhbmRgYWZ0ZXJHZXRDZWxsTWV0YWApLFxuICogb3IgYnkgSGFuZHNvbnRhYmxlJ3MgYGNlbGxzYCBvcHRpb24uXG4gKlxuICogVGhlIGBnZXRDZWxsTWV0YSgpYCBtZXRob2QgaXMgdXNlZCB3aWRlbHkgdGhyb3VnaG91dCB0aGUgc291cmNlIGNvZGUuXG4gKiBUbyBib29zdCB0aGUgbWV0aG9kJ3MgZXhlY3V0aW9uIHRpbWUsXG4gKiB0aGUgbG9naWMgaXMgdHJpZ2dlcmVkIG9ubHkgb25jZSBwZXIgb25lIEhhbmRzb250YWJsZSBzbG93IHJlbmRlciBjeWNsZS5cbiAqL1xuY2xhc3MgRHluYW1pY0NlbGxNZXRhTW9kIHtcbiAgY29uc3RydWN0b3IobWV0YU1hbmFnZXIpIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7TWV0YU1hbmFnZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWV0YU1hbmFnZXJcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7TWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1ldGFTeW5jTWVtb1wiLCBuZXcgTWFwKCkpO1xuICAgIHRoaXMubWV0YU1hbmFnZXIgPSBtZXRhTWFuYWdlcjtcbiAgICBtZXRhTWFuYWdlci5hZGRMb2NhbEhvb2soJ2FmdGVyR2V0Q2VsbE1ldGEnLCBjZWxsTWV0YSA9PiB0aGlzLmV4dGVuZENlbGxNZXRhKGNlbGxNZXRhKSk7XG4gICAgX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkuYWRkKCdiZWZvcmVSZW5kZXInLCBmb3JjZUZ1bGxSZW5kZXIgPT4ge1xuICAgICAgaWYgKGZvcmNlRnVsbFJlbmRlcikge1xuICAgICAgICB0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpO1xuICAgICAgfVxuICAgIH0sIHRoaXMubWV0YU1hbmFnZXIuaG90KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmRzIHRoZSBjZWxsIG1ldGEgb2JqZWN0IGJ5IHVzZXItc3BlY2lmaWMgcHJvcGVydGllcy5cbiAgICpcbiAgICogVGhlIGNlbGwgbWV0YSBvYmplY3QgY2FuIGJlIGV4dGVuZGVkIGR5bmFtaWNhbGx5LFxuICAgKiBlaXRoZXIgYnkgSGFuZHNvbnRhYmxlJ3MgaG9va3MgKGBiZWZvcmVHZXRDZWxsTWV0YWAgYW5kYGFmdGVyR2V0Q2VsbE1ldGFgKSxcbiAgICogb3IgYnkgSGFuZHNvbnRhYmxlJ3MgYGNlbGxzYCBvcHRpb24uXG4gICAqXG4gICAqIFRvIGJvb3N0IHBlcmZvcm1hbmNlLCB0aGUgZXh0ZW5kaW5nIHByb2Nlc3MgaXMgdHJpZ2dlcmVkIG9ubHkgb25jZSBwZXIgb25lIHNsb3cgSGFuZHNvbnRhYmxlIHJlbmRlciBjeWNsZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNlbGxNZXRhIFRoZSBjZWxsIG1ldGEgb2JqZWN0LlxuICAgKi9cbiAgZXh0ZW5kQ2VsbE1ldGEoY2VsbE1ldGEpIHtcbiAgICB2YXIgX3RoaXMkbWV0YVN5bmNNZW1vJGdlO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdzogcGh5c2ljYWxSb3csXG4gICAgICBjb2w6IHBoeXNpY2FsQ29sdW1uXG4gICAgfSA9IGNlbGxNZXRhO1xuICAgIGlmICgoX3RoaXMkbWV0YVN5bmNNZW1vJGdlID0gdGhpcy5tZXRhU3luY01lbW8uZ2V0KHBoeXNpY2FsUm93KSkgIT09IG51bGwgJiYgX3RoaXMkbWV0YVN5bmNNZW1vJGdlICE9PSB2b2lkIDAgJiYgX3RoaXMkbWV0YVN5bmNNZW1vJGdlLmhhcyhwaHlzaWNhbENvbHVtbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgdmlzdWFsUm93LFxuICAgICAgdmlzdWFsQ29sXG4gICAgfSA9IGNlbGxNZXRhO1xuICAgIGNvbnN0IGhvdCA9IHRoaXMubWV0YU1hbmFnZXIuaG90O1xuICAgIGNvbnN0IHByb3AgPSBob3QuY29sVG9Qcm9wKHZpc3VhbENvbCk7XG4gICAgY2VsbE1ldGEucHJvcCA9IHByb3A7XG4gICAgaG90LnJ1bkhvb2tzKCdiZWZvcmVHZXRDZWxsTWV0YScsIHZpc3VhbFJvdywgdmlzdWFsQ29sLCBjZWxsTWV0YSk7XG5cbiAgICAvLyBleHRlbmQgYSBgdHlwZWAgdmFsdWUsIGFkZGVkIG9yIGNoYW5nZWQgaW4gdGhlIGBiZWZvcmVHZXRDZWxsTWV0YWAgaG9va1xuICAgIGNvbnN0IGNlbGxUeXBlID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNlbGxNZXRhLCAndHlwZScpID8gY2VsbE1ldGEudHlwZSA6IG51bGw7XG4gICAgbGV0IGNlbGxTZXR0aW5ncyA9ICgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikoY2VsbE1ldGEuY2VsbHMpID8gY2VsbE1ldGEuY2VsbHMocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBwcm9wKSA6IG51bGw7XG4gICAgaWYgKGNlbGxUeXBlKSB7XG4gICAgICBpZiAoY2VsbFNldHRpbmdzKSB7XG4gICAgICAgIHZhciBfY2VsbFNldHRpbmdzJHR5cGU7XG4gICAgICAgIGNlbGxTZXR0aW5ncy50eXBlID0gKF9jZWxsU2V0dGluZ3MkdHlwZSA9IGNlbGxTZXR0aW5ncy50eXBlKSAhPT0gbnVsbCAmJiBfY2VsbFNldHRpbmdzJHR5cGUgIT09IHZvaWQgMCA/IF9jZWxsU2V0dGluZ3MkdHlwZSA6IGNlbGxUeXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbFNldHRpbmdzID0ge1xuICAgICAgICAgIHR5cGU6IGNlbGxUeXBlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjZWxsU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMubWV0YU1hbmFnZXIudXBkYXRlQ2VsbE1ldGEocGh5c2ljYWxSb3csIHBoeXNpY2FsQ29sdW1uLCBjZWxsU2V0dGluZ3MpO1xuICAgIH1cbiAgICBob3QucnVuSG9va3MoJ2FmdGVyR2V0Q2VsbE1ldGEnLCB2aXN1YWxSb3csIHZpc3VhbENvbCwgY2VsbE1ldGEpO1xuICAgIGlmICghdGhpcy5tZXRhU3luY01lbW8uaGFzKHBoeXNpY2FsUm93KSkge1xuICAgICAgdGhpcy5tZXRhU3luY01lbW8uc2V0KHBoeXNpY2FsUm93LCBuZXcgU2V0KCkpO1xuICAgIH1cbiAgICB0aGlzLm1ldGFTeW5jTWVtby5nZXQocGh5c2ljYWxSb3cpLmFkZChwaHlzaWNhbENvbHVtbik7XG4gIH1cbn1cbmV4cG9ydHMuRHluYW1pY0NlbGxNZXRhTW9kID0gRHluYW1pY0NlbGxNZXRhTW9kOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbnZhciBfaW5pdE9ubHlDYWxsYmFjayA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBAY2xhc3MgRXh0ZW5kTWV0YVByb3BlcnRpZXNNb2RcbiAqL1xuY2xhc3MgRXh0ZW5kTWV0YVByb3BlcnRpZXNNb2Qge1xuICBjb25zdHJ1Y3RvcihtZXRhTWFuYWdlcikge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtNZXRhTWFuYWdlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXRhTWFuYWdlclwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtTZXR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidXNhZ2VUcmFja2VyXCIsIG5ldyBTZXQoKSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge01hcH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwcm9wRGVzY3JpcHRvcnNcIiwgbmV3IE1hcChbWydhcmlhVGFncycsIHtcbiAgICAgIGluaXRPbmx5OiB0cnVlXG4gICAgfV0sIFsnZml4ZWRDb2x1bW5zTGVmdCcsIHtcbiAgICAgIHRhcmdldDogJ2ZpeGVkQ29sdW1uc1N0YXJ0JyxcbiAgICAgIG9uQ2hhbmdlKHByb3BOYW1lKSB7XG4gICAgICAgIGNvbnN0IGlzUnRsID0gdGhpcy5tZXRhTWFuYWdlci5ob3QuaXNSdGwoKTtcbiAgICAgICAgaWYgKGlzUnRsICYmIHByb3BOYW1lID09PSAnZml4ZWRDb2x1bW5zTGVmdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgZml4ZWRDb2x1bW5zTGVmdGAgaXMgbm90IHN1cHBvcnRlZCBmb3IgUlRMLiBQbGVhc2UgdXNlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnVzYWdlVHJhY2tlci5oYXMoJ2ZpeGVkQ29sdW1uc0xlZnQnKSAmJiB0aGlzLnVzYWdlVHJhY2tlci5oYXMoJ2ZpeGVkQ29sdW1uc1N0YXJ0JykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgZml4ZWRDb2x1bW5zTGVmdGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiAnICsgJ1BsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XSwgWydsYXlvdXREaXJlY3Rpb24nLCB7XG4gICAgICBpbml0T25seTogdHJ1ZVxuICAgIH1dLCBbJ3JlbmRlckFsbENvbHVtbnMnLCB7XG4gICAgICBpbml0T25seTogdHJ1ZVxuICAgIH1dLCBbJ3JlbmRlckFsbFJvd3MnLCB7XG4gICAgICBpbml0T25seTogdHJ1ZVxuICAgIH1dXSkpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwcm9wIGlzIG1hcmtlZCBhcyBgaW5pdE9ubHlgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BOYW1lIFRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIG5ldyB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzSW5pdGlhbENoYW5nZSBJcyB0aGUgY2hhbmdlIGluaXRpYWwuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2luaXRPbmx5Q2FsbGJhY2ssIChwcm9wTmFtZSwgdmFsdWUsIGlzSW5pdGlhbENoYW5nZSkgPT4ge1xuICAgICAgaWYgKCFpc0luaXRpYWxDaGFuZ2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXFxgJHtwcm9wTmFtZX1cXGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubWV0YU1hbmFnZXIgPSBtZXRhTWFuYWdlcjtcbiAgICB0aGlzLmV4dGVuZE1ldGFQcm9wcygpO1xuICB9XG4gIC8qKlxuICAgKiBFeHRlbmRzIHRoZSBtZXRhIG9wdGlvbnMgYmFzZWQgb24gdGhlIG9iamVjdCBkZXNjcmlwdG9ycyBmcm9tIHRoZSBgcHJvcERlc2NyaXB0b3JzYCBsaXN0LlxuICAgKi9cbiAgZXh0ZW5kTWV0YVByb3BzKCkge1xuICAgIHRoaXMucHJvcERlc2NyaXB0b3JzLmZvckVhY2goKGRlc2NyaXB0b3IsIGFsaWFzKSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluaXRPbmx5LFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIG9uQ2hhbmdlXG4gICAgICB9ID0gZGVzY3JpcHRvcjtcbiAgICAgIGNvbnN0IGhhc1RhcmdldCA9IHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnO1xuICAgICAgY29uc3QgdGFyZ2V0UHJvcCA9IGhhc1RhcmdldCA/IHRhcmdldCA6IGFsaWFzO1xuICAgICAgY29uc3Qgb3JpZ1Byb3AgPSBgXyR7dGFyZ2V0UHJvcH1gO1xuICAgICAgdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbb3JpZ1Byb3BdID0gdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbdGFyZ2V0UHJvcF07XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYWxpYXMsIG9yaWdQcm9wLCBvbkNoYW5nZSk7XG4gICAgICAgIGlmIChoYXNUYXJnZXQpIHtcbiAgICAgICAgICB0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcih0YXJnZXQsIG9yaWdQcm9wLCBvbkNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5pdE9ubHkpIHtcbiAgICAgICAgdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYWxpYXMsIG9yaWdQcm9wLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luaXRPbmx5Q2FsbGJhY2ssIHRoaXMpKTtcbiAgICAgICAgaWYgKCF0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncykge1xuICAgICAgICAgIHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3MucHVzaChhbGlhcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgdGhlIHByb3BlcnR5IHdhdGNoZXIgdG8gdGhlIGBwcm9wTmFtZWAgb3B0aW9uIGFuZCBmb3J3YXJkcyBnZXR0ZXIgYW5kIHNldHRlciB0b1xuICAgKiB0aGUgbmV3IG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BOYW1lIFRoZSBwcm9wZXJ0eSB0byB3YXRjaC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yaWdQcm9wIFRoZSBwcm9wZXJ0eSBmcm9tL3RvIHRoZSB2YWx1ZSBpcyBmb3J3YXJkZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG9uQ2hhbmdlIFRoZSBjYWxsYmFjay5cbiAgICovXG4gIGluc3RhbGxQcm9wV2F0Y2hlcihwcm9wTmFtZSwgb3JpZ1Byb3AsIG9uQ2hhbmdlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLCBwcm9wTmFtZSwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpc1tvcmlnUHJvcF07XG4gICAgICB9LFxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlzSW5pdGlhbENoYW5nZSA9ICFzZWxmLnVzYWdlVHJhY2tlci5oYXMocHJvcE5hbWUpO1xuICAgICAgICBzZWxmLnVzYWdlVHJhY2tlci5hZGQocHJvcE5hbWUpO1xuICAgICAgICBvbkNoYW5nZS5jYWxsKHNlbGYsIHByb3BOYW1lLCB2YWx1ZSwgaXNJbml0aWFsQ2hhbmdlKTtcbiAgICAgICAgdGhpc1tvcmlnUHJvcF0gPSB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydHMuRXh0ZW5kTWV0YVByb3BlcnRpZXNNb2QgPSBFeHRlbmRNZXRhUHJvcGVydGllc01vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuZXhwb3J0cy5jb2x1bW5GYWN0b3J5ID0gY29sdW1uRmFjdG9yeTtcbmV4cG9ydHMuZXh0ZW5kQnlNZXRhVHlwZSA9IGV4dGVuZEJ5TWV0YVR5cGU7XG5leHBvcnRzLmlzTnVsbGlzaCA9IGlzTnVsbGlzaDtcbmV4cG9ydHMuaXNVbnNpZ25lZE51bWJlciA9IGlzVW5zaWduZWROdW1iZXI7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4uLy4uL2NlbGxUeXBlcy9yZWdpc3RyeVwiKTtcbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBwcm9wZXJ0eSBjYW4gYmUgb3ZlcndyaXR0ZW4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXRhT2JqZWN0IFRoZSBjdXJyZW50IG9iamVjdCBtZXRhIHNldHRpbmdzLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNhbkJlT3ZlcndyaXR0ZW4ocHJvcGVydHlOYW1lLCBtZXRhT2JqZWN0KSB7XG4gIHZhciBfbWV0YU9iamVjdCRfYXV0b21hdGk7XG4gIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdDRUxMX1RZUEUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAoKF9tZXRhT2JqZWN0JF9hdXRvbWF0aSA9IG1ldGFPYmplY3QuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcykgPT09IG51bGwgfHwgX21ldGFPYmplY3QkX2F1dG9tYXRpID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbWV0YU9iamVjdCRfYXV0b21hdGkuaGFzKHByb3BlcnR5TmFtZSkpIHx8ICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWV0YU9iamVjdCwgcHJvcGVydHlOYW1lKTtcbn1cblxuLyoqXG4gKiBFeHBhbmRzIFwidHlwZVwiIHByb3BlcnR5IG9mIHRoZSBtZXRhIG9iamVjdCB0byBzaW5nbGUgdmFsdWVzLiBGb3IgZXhhbXBsZSBgdHlwZTogJ251bWVyaWMnYCBzZXRzXG4gKiBcInJlbmRlcmVyXCIsIFwiZWRpdG9yXCIsIFwidmFsaWRhdG9yXCIgcHJvcGVydGllcyB0byBzcGVjaWZpYyBmdW5jdGlvbnMgZGVzaWduZWQgZm9yIG51bWVyaWMgdmFsdWVzLlxuICogSWYgXCJ0eXBlXCIgaXMgcGFzc2VkIGFzIGFuIG9iamVjdCB0aGF0IG9iamVjdCB3aWxsIGJlIHJldHVybmVkLCBleGNsdWRpbmcgcHJvcGVydGllcyB0aGF0XG4gKiBhbHJlYWR5IGV4aXN0IGluIHRoZSBcIm1ldGFPYmplY3RcIi5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdXRpbGl6ZXMgYF9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHNgIG1ldGEgcHJvcGVydHkgdGhhdCBhbGxvd3MgdHJhY2tpbmcgd2hhdFxuICogcHJvcGVydGllcyBhcmUgY2hhbmdlZCBieSB0aGUgXCJ0eXBlXCIgZXhwYW5kaW5nIGZlYXR1cmUuIFRoYXQgcHJvcGVydGllcyBjYW4gYmUgYWx3YXlzIG92ZXJ3cml0dGVuIGJ5XG4gKiB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YU9iamVjdCBUaGUgbWV0YSBvYmplY3QuXG4gKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZ3MgVGhlIHNldHRpbmdzIG9iamVjdCB3aXRoIHRoZSBcInR5cGVcIiBzZXR0aW5nLlxuICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzVG9Db21wYXJlV2l0aCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUgd2hpY2ggcHJvcGVydGllcyBuZWVkIHRvIGJlIHVwZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZEJ5TWV0YVR5cGUobWV0YU9iamVjdCwgc2V0dGluZ3MpIHtcbiAgbGV0IHNldHRpbmdzVG9Db21wYXJlV2l0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbWV0YU9iamVjdDtcbiAgY29uc3QgdmFsaWRUeXBlID0gdHlwZW9mIHNldHRpbmdzLnR5cGUgPT09ICdzdHJpbmcnID8gKDAsIF9yZWdpc3RyeS5nZXRDZWxsVHlwZSkoc2V0dGluZ3MudHlwZSkgOiBzZXR0aW5ncy50eXBlO1xuICBpZiAobWV0YU9iamVjdC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKSB7XG4gICAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoc2V0dGluZ3MsICh2YWx1ZSwga2V5KSA9PiB2b2lkIG1ldGFPYmplY3QuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUoa2V5KSk7XG4gIH1cbiAgaWYgKCEoMCwgX29iamVjdC5pc09iamVjdCkodmFsaWRUeXBlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoc2V0dGluZ3NUb0NvbXBhcmVXaXRoID09PSBtZXRhT2JqZWN0ICYmICFtZXRhT2JqZWN0Ll9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpIHtcbiAgICBtZXRhT2JqZWN0Ll9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMgPSBuZXcgU2V0KCk7XG4gIH1cbiAgY29uc3QgZXhwYW5kZWRUeXBlID0ge307XG4gICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHZhbGlkVHlwZSwgKHZhbHVlLCBwcm9wZXJ0eSkgPT4ge1xuICAgIGlmIChjYW5CZU92ZXJ3cml0dGVuKHByb3BlcnR5LCBzZXR0aW5nc1RvQ29tcGFyZVdpdGgpKSB7XG4gICAgICB2YXIgX21ldGFPYmplY3QkX2F1dG9tYXRpMjtcbiAgICAgIGV4cGFuZGVkVHlwZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgIChfbWV0YU9iamVjdCRfYXV0b21hdGkyID0gbWV0YU9iamVjdC5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKSA9PT0gbnVsbCB8fCBfbWV0YU9iamVjdCRfYXV0b21hdGkyID09PSB2b2lkIDAgfHwgX21ldGFPYmplY3QkX2F1dG9tYXRpMi5hZGQocHJvcGVydHkpO1xuICAgIH1cbiAgfSk7XG4gICgwLCBfb2JqZWN0LmV4dGVuZCkobWV0YU9iamVjdCwgZXhwYW5kZWRUeXBlKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIG5ldyBjbGFzcyB3aGljaCBleHRlbmRzIHByb3BlcnRpZXMgZnJvbSBUYWJsZU1ldGEgbGF5ZXIgY2xhc3MuXG4gKlxuICogQHBhcmFtIHtUYWJsZU1ldGF9IFRhYmxlTWV0YSBUaGUgVGFibGVNZXRhIHdoaWNoIHRoZSBuZXcgQ29sdW1uTWV0YSBpcyBjcmVhdGVkIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbY29uZmxpY3RMaXN0XSBMaXN0IG9mIHRoZSBwcm9wZXJ0aWVzIHdoaWNoIGFyZSBjb25mbGljdGVkIHdpdGggdGhlIGNvbHVtbiBtZXRhIGxheWVyLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmxpY3RlZCBwcm9wZXJ0aWVzIGFyZSBvdmVyd3JpdHRlbiBieSBgdW5kZWZpbmVkYCB2YWx1ZSwgdG8gc2VwYXJhdGUgdGhlbVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgVGFibGVNZXRhIGxheWVyLlxuICogQHJldHVybnMge0NvbHVtbk1ldGF9IFJldHVybnMgY29uc3RydWN0b3IgcmVhZHkgdG8gaW5pdGlhbGl6ZSB3aXRoIGBuZXdgIG9wZXJhdG9yLlxuICovXG5mdW5jdGlvbiBjb2x1bW5GYWN0b3J5KFRhYmxlTWV0YSkge1xuICBsZXQgY29uZmxpY3RMaXN0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgLy8gRG8gbm90IHVzZSBFUzYgXCJjbGFzcyBleHRlbmRzXCIgc3ludGF4IGhlcmUuIEl0IHNlZW1zIHRoYXQgdGhlIGJhYmVsIHByb2R1Y2VzIGNvZGVcbiAgLy8gd2hpY2ggZHJhc3RpY2FsbHkgZGVjcmVhc2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgQ29sdW1uTWV0YSBjbGFzcyBjcmVhdGlvbi5cblxuICAvKipcbiAgICogQmFzZSBcImNsYXNzXCIgZm9yIGNvbHVtbiBtZXRhLlxuICAgKi9cbiAgZnVuY3Rpb24gQ29sdW1uTWV0YSgpIHt9XG4gICgwLCBfb2JqZWN0LmluaGVyaXQpKENvbHVtbk1ldGEsIFRhYmxlTWV0YSk7XG5cbiAgLy8gQ2xlYXIgY29uZmxpY3Qgc2V0dGluZ3NcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25mbGljdExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBDb2x1bW5NZXRhLnByb3RvdHlwZVtjb25mbGljdExpc3RbaV1dID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBDb2x1bW5NZXRhO1xufVxuXG4vKipcbiAqIEhlbHBlciB3aGljaCBjaGVja3MgaWYgdGhlIHByb3ZpZGVkIGFyZ3VtZW50IGlzIGFuIHVuc2lnbmVkIG51bWJlci5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVW5zaWduZWROdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gd2hpY2ggbWFrZXMgYXNzZXJ0aW9uIGJ5IGN1c3RvbSBjb25kaXRpb24uIEZ1bmN0aW9uIHRocm93cyBhbiBlcnJvciB3aGVuIGFzc2VydGlvbiBkb2Vzbid0IG1lZXQgdGhlIHNwZWMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZGl0aW9uIEZ1bmN0aW9uIHdpdGggY3VzdG9tIGxvZ2ljLiBUaGUgY29uZGl0aW9uIGhhcyB0byByZXR1cm4gYm9vbGVhbiB2YWx1ZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNZXNzYWdlIFN0cmluZyB3aGljaCBkZXNjcmliZXMgYXNzZXJ0aW9uIGVycm9yLlxuICovXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBlcnJvck1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kaXRpb24oKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogJHtlcnJvck1lc3NhZ2V9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiB2YXJpYWJsZSBpcyBudWxsIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhcmlhYmxlIFZhcmlhYmxlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTnVsbGlzaCh2YXJpYWJsZSkge1xuICByZXR1cm4gdmFyaWFibGUgPT09IG51bGwgfHwgdmFyaWFibGUgPT09IHVuZGVmaW5lZDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucmVwbGFjZURhdGEgPSByZXBsYWNlRGF0YTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3N0cmluZ1wiKTtcbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vaGVscGVycy9mdW5jdGlvblwiKTtcbnZhciBfZGF0YU1hcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGF0YU1hcFwiKSk7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIExvYWRzIG5ldyBkYXRhIHRvIEhhbmRzb250YWJsZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBBcnJheSBvZiBhcnJheXMgb3IgYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGRhdGEuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzZXREYXRhTWFwRnVuY3Rpb24gRnVuY3Rpb24gdGhhdCB1cGRhdGVzIHRoZSBkYXRhbWFwIGluc3RhbmNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tGdW5jdGlvbiBGdW5jdGlvbiB0aGF0IHRha2VzIGNhcmUgb2YgdXBkYXRpbmcgSGFuZHNvbnRhYmxlIHRvIHRoZSBuZXcgZGF0YXNldC4gQ2FsbGVkXG4gKiByaWdodCBiZWZvcmUgdGhlIGBhZnRlci1gIGhvb2tzLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbmluZyBhbGwgdGhlIG5lZWRlZCBkZXBlbmRlbmN5IHJlZmVyZW5jZXMgYW5kIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHtIYW5kc29udGFibGUuQ29yZX0gY29uZmlnLmhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0RhdGFNYXB9IGNvbmZpZy5kYXRhTWFwIFRoZSBjdXJyZW50IGBkYXRhTWFwYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7RGF0YVNvdXJjZX0gY29uZmlnLmRhdGFTb3VyY2UgVGhlIGN1cnJlbnQgYGRhdGFTb3VyY2VgIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5pbnRlcm5hbFNvdXJjZSBUaGUgaW1tZWRpYXRlIGludGVybmFsIHNvdXJjZSBvZiB0aGUgYHJlcGxhY2VEYXRhYCBjYWxsLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpZy5zb3VyY2UgVGhlIHNvdXJjZSBvZiB0aGUgY2FsbC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY29uZmlnLmZpcnN0UnVuIGB0cnVlYCBpZiBpdCdzIGEgZmlyc3QgY2FsbCBpbiB0aGUgSGFuZHNvbnRhYmxlIGxpZmVjeWNsZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAZmlyZXMgSG9va3MjYmVmb3JlTG9hZERhdGFcbiAqIEBmaXJlcyBIb29rcyNiZWZvcmVVcGRhdGVEYXRhXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJMb2FkRGF0YVxuICogQGZpcmVzIEhvb2tzI2FmdGVyVXBkYXRlRGF0YVxuICogQGZpcmVzIEhvb2tzI2FmdGVyQ2hhbmdlXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VEYXRhKGRhdGEsIHNldERhdGFNYXBGdW5jdGlvbiwgY2FsbGJhY2tGdW5jdGlvbiwgY29uZmlnKSB7XG4gIGNvbnN0IHtcbiAgICBob3RJbnN0YW5jZSxcbiAgICBkYXRhTWFwLFxuICAgIGRhdGFTb3VyY2UsXG4gICAgaW50ZXJuYWxTb3VyY2UsXG4gICAgc291cmNlLFxuICAgIG1ldGFNYW5hZ2VyLFxuICAgIGZpcnN0UnVuXG4gIH0gPSBjb25maWc7XG4gIGNvbnN0IGNhcGl0YWxpemVkSW50ZXJuYWxTb3VyY2UgPSAoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KShpbnRlcm5hbFNvdXJjZSk7XG4gIGNvbnN0IHRhYmxlTWV0YSA9IGhvdEluc3RhbmNlLmdldFNldHRpbmdzKCk7XG4gIGlmIChBcnJheS5pc0FycmF5KHRhYmxlTWV0YS5kYXRhU2NoZW1hKSkge1xuICAgIGhvdEluc3RhbmNlLmRhdGFUeXBlID0gJ2FycmF5JztcbiAgfSBlbHNlIGlmICgoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKHRhYmxlTWV0YS5kYXRhU2NoZW1hKSkge1xuICAgIGhvdEluc3RhbmNlLmRhdGFUeXBlID0gJ2Z1bmN0aW9uJztcbiAgfSBlbHNlIHtcbiAgICBob3RJbnN0YW5jZS5kYXRhVHlwZSA9ICdvYmplY3QnO1xuICB9XG4gIGlmIChkYXRhTWFwKSB7XG4gICAgZGF0YU1hcC5kZXN0cm95KCk7XG4gIH1cbiAgZGF0YSA9IGhvdEluc3RhbmNlLnJ1bkhvb2tzKGBiZWZvcmUke2NhcGl0YWxpemVkSW50ZXJuYWxTb3VyY2V9YCwgZGF0YSwgZmlyc3RSdW4sIHNvdXJjZSk7XG4gIGNvbnN0IG5ld0RhdGFNYXAgPSBuZXcgX2RhdGFNYXAuZGVmYXVsdChob3RJbnN0YW5jZSwgZGF0YSwgbWV0YU1hbmFnZXIpO1xuXG4gIC8vIFdlIG5lZWQgdG8gYXBwbHkgdGhlIG5ldyBkYXRhTWFwIGltbWVkaWF0ZWx5LCBiZWNhdXNlIG9mIHNvbWUgYXN5bmNocm9ub3VzIGxvZ2ljIGluIHRoZVxuICAvLyBgYXV0b1Jvd1NpemVgL2BhdXRvQ29sdW1uU2l6ZWAgcGx1Z2lucy5cbiAgc2V0RGF0YU1hcEZ1bmN0aW9uKG5ld0RhdGFNYXApO1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgIT09IG51bGwpIHtcbiAgICBpZiAoIShkYXRhLnB1c2ggJiYgZGF0YS5zcGxpY2UpKSB7XG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGFycmF5LiBNdXN0IHVzZSBkdWNrLXR5cGUgY2hlY2sgc28gQmFja2JvbmUgQ29sbGVjdGlvbnMgYWxzbyBwYXNzIGl0XG4gICAgICAvLyB3aGVuIGRhdGEgaXMgbm90IGFuIGFycmF5LCBhdHRlbXB0IHRvIG1ha2UgYSBzaW5nbGUtcm93IGFycmF5IG9mIGl0XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgfVxuICB9IGVsc2UgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICBjb25zdCBkYXRhU2NoZW1hID0gbmV3RGF0YU1hcC5nZXRTY2hlbWEoKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIGRhdGEgPSBbXTtcbiAgICBsZXQgcm93O1xuICAgIGxldCByID0gMDtcbiAgICBsZXQgcmxlbiA9IDA7XG4gICAgZm9yIChyID0gMCwgcmxlbiA9IHRhYmxlTWV0YS5zdGFydFJvd3M7IHIgPCBybGVuOyByKyspIHtcbiAgICAgIGlmICgoaG90SW5zdGFuY2UuZGF0YVR5cGUgPT09ICdvYmplY3QnIHx8IGhvdEluc3RhbmNlLmRhdGFUeXBlID09PSAnZnVuY3Rpb24nKSAmJiB0YWJsZU1ldGEuZGF0YVNjaGVtYSkge1xuICAgICAgICByb3cgPSAoMCwgX29iamVjdC5kZWVwQ2xvbmUpKGRhdGFTY2hlbWEpO1xuICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgIH0gZWxzZSBpZiAoaG90SW5zdGFuY2UuZGF0YVR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgICAgcm93ID0gKDAsIF9vYmplY3QuZGVlcENsb25lKShkYXRhU2NoZW1hWzBdKTtcbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3cgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSB0YWJsZU1ldGEuc3RhcnRDb2xzOyBjIDwgY2xlbjsgYysrKSB7XG4gICAgICAgICAgcm93LnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtpbnRlcm5hbFNvdXJjZX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBkYXRhfSBnaXZlbilgKTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhWzBdKSkge1xuICAgIGhvdEluc3RhbmNlLmRhdGFUeXBlID0gJ2FycmF5JztcbiAgfVxuICB0YWJsZU1ldGEuZGF0YSA9IGRhdGE7XG4gIG5ld0RhdGFNYXAuZGF0YVNvdXJjZSA9IGRhdGE7XG4gIGRhdGFTb3VyY2UuZGF0YSA9IGRhdGE7XG4gIGRhdGFTb3VyY2UuZGF0YVR5cGUgPSBob3RJbnN0YW5jZS5kYXRhVHlwZTtcbiAgZGF0YVNvdXJjZS5jb2xUb1Byb3AgPSBuZXdEYXRhTWFwLmNvbFRvUHJvcC5iaW5kKG5ld0RhdGFNYXApO1xuICBkYXRhU291cmNlLnByb3BUb0NvbCA9IG5ld0RhdGFNYXAucHJvcFRvQ29sLmJpbmQobmV3RGF0YU1hcCk7XG4gIGRhdGFTb3VyY2UuY291bnRDYWNoZWRDb2x1bW5zID0gbmV3RGF0YU1hcC5jb3VudENhY2hlZENvbHVtbnMuYmluZChuZXdEYXRhTWFwKTtcblxuICAvLyBSdW4gdGhlIGxvZ2ljIGZvciByZWFzc3VyaW5nIHRoYXQgdGhlIHRhYmxlIHN0cnVjdHVyZSBmaXRzIHRoZSBuZXcgZGF0YXNldC5cbiAgY2FsbGJhY2tGdW5jdGlvbihuZXdEYXRhTWFwKTtcbiAgaG90SW5zdGFuY2UucnVuSG9va3MoYGFmdGVyJHtjYXBpdGFsaXplZEludGVybmFsU291cmNlfWAsIGRhdGEsIGZpcnN0UnVuLCBzb3VyY2UpO1xuXG4gIC8vIFRPRE86IHJldGhpbmsgdGhlIHdheSB0aGUgYGFmdGVyQ2hhbmdlYCBob29rIGlzIGJlaW5nIHJ1biBoZXJlIGluIHRoZSBjb3JlIGBpbml0YCBtZXRob2QuXG4gIGlmICghZmlyc3RSdW4pIHtcbiAgICBob3RJbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJDaGFuZ2UnLCBudWxsLCBpbnRlcm5hbFNvdXJjZSk7XG4gICAgaG90SW5zdGFuY2UucmVuZGVyKCk7XG4gIH1cbiAgaWYgKGhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShob3RJbnN0YW5jZS5yb290RWxlbWVudCwgWygwLCBfYTExeS5BMTFZX1JPV0NPVU5UKSgtMSksXG4gICAgLy8gSWYgcnVuIGFmdGVyIGluaXRpYWxpemF0aW9uLCBhZGQgdGhlIG51bWJlciBvZiByb3cgaGVhZGVycy5cbiAgICAoMCwgX2ExMXkuQTExWV9DT0xDT1VOVCkoaG90SW5zdGFuY2UuY291bnRDb2xzKCkgKyAoaG90SW5zdGFuY2UudmlldyA/IGhvdEluc3RhbmNlLmNvdW50Um93SGVhZGVycygpIDogMCkpXSk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX3VuaWNvZGUgPSByZXF1aXJlKFwiLi9oZWxwZXJzL3VuaWNvZGVcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4vaGVscGVycy9kb20vZXZlbnRcIik7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vZWRpdG9ycy9yZWdpc3RyeVwiKTtcbnZhciBfZXZlbnRNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ldmVudE1hbmFnZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxudmFyIF9FZGl0b3JNYW5hZ2VyX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBFZGl0b3JNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtUYWJsZU1ldGF9IHRhYmxlTWV0YSBUaGUgdGFibGUgbWV0YSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtTZWxlY3Rpb259IHNlbGVjdGlvbiBUaGUgc2VsZWN0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIHRhYmxlTWV0YSwgX3NlbGVjdGlvbikge1xuICAgIC8qKlxuICAgICAqIE9uQWZ0ZXJEb2N1bWVudEtleURvd24gY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IFRoZSBrZXlib2FyZCBldmVudCBvYmplY3QuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9FZGl0b3JNYW5hZ2VyX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgSGFuZHNvbnRhYmxlfS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hhbmRzb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gYW4gaW5zdGFuY2UncyBwcml2YXRlIEdyaWRTZXR0aW5ncyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtHcmlkU2V0dGluZ3N9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidGFibGVNZXRhXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIFNlbGVjdGlvbn0uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtTZWxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2VsZWN0aW9uXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIEV2ZW50TWFuYWdlcn0uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtFdmVudE1hbmFnZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZXZlbnRNYW5hZ2VyXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiBFZGl0b3JNYW5hZ2VyIGlzIGRlc3Ryb3llZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGVzdHJveWVkXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byBhbiBpbnN0YW5jZSBvZiB0aGUgYWN0aXZlRWRpdG9yLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QmFzZUVkaXRvcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhY3RpdmVFZGl0b3JcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBLZWVwcyBhIHJlZmVyZW5jZSB0byB0aGUgY2VsbCdzIHByb3BlcnRpZXMgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjZWxsUHJvcGVydGllc1wiLCB2b2lkIDApO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gICAgdGhpcy50YWJsZU1ldGEgPSB0YWJsZU1ldGE7XG4gICAgdGhpcy5zZWxlY3Rpb24gPSBfc2VsZWN0aW9uO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyID0gbmV3IF9ldmVudE1hbmFnZXIuZGVmYXVsdChob3RJbnN0YW5jZSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYWZ0ZXJEb2N1bWVudEtleURvd24nLCBldmVudCA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRWRpdG9yTWFuYWdlcl9icmFuZCwgdGhpcywgX29uQWZ0ZXJEb2N1bWVudEtleURvd24pLmNhbGwodGhpcywgZXZlbnQpKTtcblxuICAgIC8vIE9wZW4gZWRpdG9yIHdoZW4gdGV4dCBjb21wb3NpdGlvbiBpcyBzdGFydGVkIChJTUUgZWRpdG9yKVxuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgJ2NvbXBvc2l0aW9uc3RhcnQnLCBldmVudCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkICYmIHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuRWRpdG9yKCcnLCBldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ob3Qudmlldy5fd3QudXBkYXRlKCdvbkNlbGxEYmxDbGljaycsIChldmVudCwgY29vcmRzLCBlbGVtKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRWRpdG9yTWFuYWdlcl9icmFuZCwgdGhpcywgX29uQ2VsbERibENsaWNrKS5jYWxsKHRoaXMsIGV2ZW50LCBjb29yZHMsIGVsZW0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIGVkaXRvci5cbiAgICpcbiAgICogQHJldHVybnMge0Jhc2VFZGl0b3J9XG4gICAqL1xuICBnZXRBY3RpdmVFZGl0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgdGV4dCBpbnB1dCB0byBiZSBkaXNwbGF5ZWQgYXQgZ2l2ZW4gZ3JpZCBjZWxsLlxuICAgKi9cbiAgcHJlcGFyZUVkaXRvcigpIHtcbiAgICB2YXIgX3RoaXMkaG90JGdldFNlbGVjdGVkO1xuICAgIGlmICh0aGlzLmFjdGl2ZUVkaXRvciAmJiB0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSkge1xuICAgICAgdGhpcy5jbG9zZUVkaXRvcihmYWxzZSwgZmFsc2UsIGRhdGFTYXZlZCA9PiB7XG4gICAgICAgIGlmIChkYXRhU2F2ZWQpIHtcbiAgICAgICAgICB0aGlzLnByZXBhcmVFZGl0b3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZ2hsaWdodCA9IChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRTZWxlY3RlZC5oaWdobGlnaHQ7XG4gICAgaWYgKCFoaWdobGlnaHQgfHwgaGlnaGxpZ2h0LmlzSGVhZGVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgY29sXG4gICAgfSA9IGhpZ2hsaWdodDtcbiAgICBjb25zdCBtb2RpZmllZENlbGxDb29yZHMgPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5R2V0Q2VsbENvb3JkcycsIHJvdywgY29sKTtcbiAgICBsZXQgdmlzdWFsUm93VG9DaGVjayA9IHJvdztcbiAgICBsZXQgdmlzdWFsQ29sdW1uVG9DaGVjayA9IGNvbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RpZmllZENlbGxDb29yZHMpKSB7XG4gICAgICBbdmlzdWFsUm93VG9DaGVjaywgdmlzdWFsQ29sdW1uVG9DaGVja10gPSBtb2RpZmllZENlbGxDb29yZHM7XG4gICAgfVxuXG4gICAgLy8gR2V0dGluZyB2YWx1ZXMgdXNpbmcgdGhlIG1vZGlmaWVkIGNvb3JkaW5hdGVzLlxuICAgIHRoaXMuY2VsbFByb3BlcnRpZXMgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSh2aXN1YWxSb3dUb0NoZWNrLCB2aXN1YWxDb2x1bW5Ub0NoZWNrKTtcbiAgICBpZiAoIXRoaXMuaXNDZWxsRWRpdGFibGUoKSkge1xuICAgICAgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ZCA9IHRoaXMuaG90LmdldENlbGwocm93LCBjb2wsIHRydWUpO1xuXG4gICAgLy8gU2tpcCB0aGUgcHJlcGFyYXRpb24gd2hlbiB0aGUgY2VsbCBpcyBub3QgcmVuZGVyZWQgaW4gdGhlIERPTS4gVGhlIGNlbGwgaXMgc2Nyb2xsZWQgb3V0IG9mXG4gICAgLy8gdGhlIHRhYmxlJ3Mgdmlld3BvcnQuXG4gICAgaWYgKHRkKSB7XG4gICAgICBjb25zdCBlZGl0b3JDbGFzcyA9IHRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcyk7XG4gICAgICBjb25zdCBwcm9wID0gdGhpcy5ob3QuY29sVG9Qcm9wKHZpc3VhbENvbHVtblRvQ2hlY2spO1xuICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2aXN1YWxSb3dUb0NoZWNrKSwgdmlzdWFsQ29sdW1uVG9DaGVjayk7XG4gICAgICB0aGlzLmFjdGl2ZUVkaXRvciA9ICgwLCBfcmVnaXN0cnkuZ2V0RWRpdG9ySW5zdGFuY2UpKGVkaXRvckNsYXNzLCB0aGlzLmhvdCk7XG4gICAgICAvLyBVc2luZyBub3QgbW9kaWZpZWQgY29vcmRpbmF0ZXMsIGFzIHdlIG5lZWQgdG8gZ2V0IHRoZSB0YWJsZSBlbGVtZW50IHVzaW5nIHNlbGVjdGlvbiBjb29yZGluYXRlcy5cbiAgICAgIC8vIFRoZXJlIGlzIGFuIGV4dHJhIHRyYW5zbGF0aW9uIGluIHRoZSBlZGl0b3IgZm9yIHNhdmluZyB2YWx1ZS5cbiAgICAgIHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUocm93LCBjb2wsIHByb3AsIHRkLCBvcmlnaW5hbFZhbHVlLCB0aGlzLmNlbGxQcm9wZXJ0aWVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaXMgZWRpdG9yIGlzIG9wZW5lZC9zaG93ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFZGl0b3JPcGVuZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yICYmIHRoaXMuYWN0aXZlRWRpdG9yLmlzT3BlbmVkKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBlZGl0b3Igd2l0aCBpbml0aWFsIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bGx8c3RyaW5nfSBuZXdJbml0aWFsVmFsdWUgTmV3IHZhbHVlIGZyb20gd2hpY2ggZWRpdG9yIHdpbGwgc3RhcnQgaWYgaGFuZGxlZCBwcm9wZXJ0eSBpdCdzIG5vdCB0aGUgYG51bGxgLlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtlbmFibGVGdWxsRWRpdE1vZGU9ZmFsc2VdIFdoZW4gdHJ1ZSwgYW4gZWRpdG9yIHdvcmtzIGluIGZ1bGwgZWRpdGluZyBtb2RlLiBNb2RlIGRpc2FsbG93cyBjbG9zaW5nIGFuIGVkaXRvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYXJyb3cga2V5cyBhcmUgcHJlc3NlZC5cbiAgICovXG4gIG9wZW5FZGl0b3IobmV3SW5pdGlhbFZhbHVlLCBldmVudCkge1xuICAgIGxldCBlbmFibGVGdWxsRWRpdE1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIGlmICghdGhpcy5pc0NlbGxFZGl0YWJsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgbGV0IGFsbG93T3BlbmluZyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVCZWdpbkVkaXRpbmcnLCBzZWxlY3Rpb24uaGlnaGxpZ2h0LnJvdywgc2VsZWN0aW9uLmhpZ2hsaWdodC5jb2wsIG5ld0luaXRpYWxWYWx1ZSwgZXZlbnQsIGVuYWJsZUZ1bGxFZGl0TW9kZSk7XG5cbiAgICAvLyBJZiB0aGUgYWJvdmUgaG9vayBkb2VzIG5vdCByZXR1cm4gYm9vbGVhbiBhcHBseSBkZWZhdWx0IGJlaGF2aW9yIHdoaWNoIGRpc2FsbG93cyBvcGVuaW5nXG4gICAgLy8gYW4gZWRpdG9yIGFmdGVyIGRvdWJsZSBtb3VzZSBjbGljayBmb3Igbm9uLWNvbnRpZ3VvdXMgc2VsZWN0aW9uICh3aGlsZSBwcmVzc2luZyBDdHJsL0NtZCkgYW5kXG4gICAgLy8gZm9yIG11bHRpcGxlIHNlbGVjdGVkIGNlbGxzICh3aGlsZSBwcmVzc2luZyBTSElGVCkuXG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCAmJiB0eXBlb2YgYWxsb3dPcGVuaW5nICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIGFsbG93T3BlbmluZyA9IHRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkgPT09IDAgJiYgc2VsZWN0aW9uLmlzU2luZ2xlKCk7XG4gICAgfVxuICAgIGlmIChhbGxvd09wZW5pbmcgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5hY3RpdmVFZGl0b3IpIHtcbiAgICAgIHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtcbiAgICAgIHRoaXMucHJlcGFyZUVkaXRvcigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hY3RpdmVFZGl0b3IpIHtcbiAgICAgIGlmIChlbmFibGVGdWxsRWRpdE1vZGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobmV3SW5pdGlhbFZhbHVlLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGVkaXRvciwgZmluaXNoIGVkaXRpbmcgY2VsbC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSByZXN0b3JlT3JpZ2luYWxWYWx1ZSBJZiBgdHJ1ZWAsIHRoZW4gY2xvc2VzIGVkaXRvciB3aXRob3V0IHNhdmluZyB2YWx1ZSBmcm9tIHRoZSBlZGl0b3IgaW50byBhIGNlbGwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNDdHJsUHJlc3NlZCBJZiBgdHJ1ZWAsIHRoZW4gZWRpdG9yIHdpbGwgc2F2ZSB2YWx1ZSB0byBlYWNoIGNlbGwgaW4gdGhlIGxhc3Qgc2VsZWN0ZWQgcmFuZ2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiwgZmlyZWQgYWZ0ZXIgZWRpdG9yIGNsb3NpbmcuXG4gICAqL1xuICBjbG9zZUVkaXRvcihyZXN0b3JlT3JpZ2luYWxWYWx1ZSwgaXNDdHJsUHJlc3NlZCwgY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5hY3RpdmVFZGl0b3IpIHtcbiAgICAgIHRoaXMuYWN0aXZlRWRpdG9yLmZpbmlzaEVkaXRpbmcocmVzdG9yZU9yaWdpbmFsVmFsdWUsIGlzQ3RybFByZXNzZWQsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2UgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGVkaXRvciBhbmQgc2F2ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQ3RybFByZXNzZWQgSWYgYHRydWVgLCB0aGVuIGVkaXRvciB3aWxsIHNhdmUgdmFsdWUgdG8gZWFjaCBjZWxsIGluIHRoZSBsYXN0IHNlbGVjdGVkIHJhbmdlLlxuICAgKi9cbiAgY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhpc0N0cmxQcmVzc2VkKSB7XG4gICAgdGhpcy5jbG9zZUVkaXRvcihmYWxzZSwgaXNDdHJsUHJlc3NlZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZWRpdG9yIGFuZCByZXN0b3JlIG9yaWdpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzQ3RybFByZXNzZWQgSW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBDVFJMIGJ1dHRvbiBpcyBwcmVzc2VkLlxuICAgKi9cbiAgY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShpc0N0cmxQcmVzc2VkKSB7XG4gICAgdGhpcy5jbG9zZUVkaXRvcih0cnVlLCBpc0N0cmxQcmVzc2VkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgcmVmZXJlbmNlIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBhY3RpdmUgZWRpdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJBY3RpdmVFZGl0b3IoKSB7XG4gICAgdGhpcy5hY3RpdmVFZGl0b3IgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2VsbCAocG9pbnRlZCBieSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGNvb3JkcykgaXMgZWRpdGFibGUuXG4gICAqIEVkaXRhYmxlIGNlbGwgaXMgd2hlbjpcbiAgICogICAtIHRoZSBjZWxsIGhhcyBkZWZpbmVkIGFuIGVkaXRvciB0eXBlO1xuICAgKiAgIC0gdGhlIGNlbGwgaXMgbm90IG1hcmtlZCBhcyByZWFkLW9ubHk7XG4gICAqICAgLSB0aGUgY2VsbCBpcyBub3QgaGlkZGVuLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ2VsbEVkaXRhYmxlKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWRpdG9yQ2xhc3MgPSB0aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdyxcbiAgICAgIGNvbFxuICAgIH0gPSBzZWxlY3Rpb24uaGlnaGxpZ2h0O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd0luZGV4TWFwcGVyLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgY29uc3QgaXNDZWxsSGlkZGVuID0gcm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyb3cpKSB8fCBjb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbCkpO1xuICAgIGlmICh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5IHx8ICFlZGl0b3JDbGFzcyB8fCBpc0NlbGxIaWRkZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ29udHJvbHMgc2VsZWN0aW9uJ3MgYmVoYXZpb3IgYWZ0ZXIgY2xpY2tpbmcgYEVudGVyYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCBUaGUga2V5Ym9hcmQgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgbW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoZXZlbnQpIHtcbiAgICBjb25zdCBlbnRlck1vdmVzID0ge1xuICAgICAgLi4uKHR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzID09PSAnZnVuY3Rpb24nID8gdGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhldmVudCkgOiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzKVxuICAgIH07XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBlbnRlck1vdmVzLnJvdyA9IC1lbnRlck1vdmVzLnJvdztcbiAgICAgIGVudGVyTW92ZXMuY29sID0gLWVudGVyTW92ZXMuY29sO1xuICAgIH1cbiAgICBpZiAodGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoZW50ZXJNb3Zlcy5yb3csIGVudGVyTW92ZXMuY29sKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoZW50ZXJNb3Zlcy5yb3csIGVudGVyTW92ZXMuY29sLCB0cnVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICB9XG59XG5mdW5jdGlvbiBfb25BZnRlckRvY3VtZW50S2V5RG93bihldmVudCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBpZiAoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkgfHwgIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24uaGlnaGxpZ2h0LmlzSGVhZGVyKCkgfHwgKDAsIF9ldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkoZXZlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICBrZXlDb2RlXG4gIH0gPSBldmVudDtcblxuICAvLyBjYXRjaCBDVFJMIGJ1dCBub3QgcmlnaHQgQUxUICh3aGljaCBpbiBzb21lIHN5c3RlbXMgdHJpZ2dlcnMgQUxUK0NUUkwpXG4gIGNvbnN0IGlzQ3RybFByZXNzZWQgPSAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAhZXZlbnQuYWx0S2V5O1xuICBpZiAoIXRoaXMuYWN0aXZlRWRpdG9yIHx8IHRoaXMuYWN0aXZlRWRpdG9yICYmICF0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSkge1xuICAgIGlmICghKDAsIF91bmljb2RlLmlzRnVuY3Rpb25LZXkpKGtleUNvZGUpICYmICEoMCwgX3VuaWNvZGUuaXNDdHJsTWV0YUtleSkoa2V5Q29kZSkgJiYgIWlzQ3RybFByZXNzZWQgJiYgIXRoaXMuaXNFZGl0b3JPcGVuZWQoKSkge1xuICAgICAgdGhpcy5vcGVuRWRpdG9yKCcnLCBldmVudCk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIE9uQ2VsbERibENsaWNrIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb29yZHMgVGhlIGNlbGwgY29vcmRpbmF0ZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkNlbGxEYmxDbGljayhldmVudCwgY29vcmRzKSB7XG4gIGlmIChjb29yZHMuaXNDZWxsKCkpIHtcbiAgICB0aGlzLm9wZW5FZGl0b3IobnVsbCwgZXZlbnQsIHRydWUpO1xuICB9XG59XG5jb25zdCBpbnN0YW5jZXMgPSBuZXcgV2Vha01hcCgpO1xuXG4vKipcbiAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7VGFibGVNZXRhfSB0YWJsZU1ldGEgVGhlIHRhYmxlIG1ldGEgY2xhc3MgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gc2VsZWN0aW9uIFRoZSBzZWxlY3Rpb24gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7RWRpdG9yTWFuYWdlcn1cbiAqL1xuRWRpdG9yTWFuYWdlci5nZXRJbnN0YW5jZSA9IGZ1bmN0aW9uIChob3RJbnN0YW5jZSwgdGFibGVNZXRhLCBzZWxlY3Rpb24pIHtcbiAgbGV0IGVkaXRvck1hbmFnZXIgPSBpbnN0YW5jZXMuZ2V0KGhvdEluc3RhbmNlKTtcbiAgaWYgKCFlZGl0b3JNYW5hZ2VyKSB7XG4gICAgZWRpdG9yTWFuYWdlciA9IG5ldyBFZGl0b3JNYW5hZ2VyKGhvdEluc3RhbmNlLCB0YWJsZU1ldGEsIHNlbGVjdGlvbik7XG4gICAgaW5zdGFuY2VzLnNldChob3RJbnN0YW5jZSwgZWRpdG9yTWFuYWdlcik7XG4gIH1cbiAgcmV0dXJuIGVkaXRvck1hbmFnZXI7XG59O1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gRWRpdG9yTWFuYWdlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2hhbmRzb250YWJsZUVkaXRvciA9IHJlcXVpcmUoXCIuLi9oYW5kc29udGFibGVFZGl0b3JcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvc3RyaW5nXCIpO1xudmFyIF91bmljb2RlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdW5pY29kZVwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Jyb3dzZXJcIik7XG52YXIgX3RleHRSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9yZW5kZXJlcnMvdGV4dFJlbmRlcmVyXCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IEVESVRPUl9UWVBFID0gZXhwb3J0cy5FRElUT1JfVFlQRSA9ICdhdXRvY29tcGxldGUnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgQXV0b2NvbXBsZXRlRWRpdG9yXG4gKi9cbnZhciBfaWRQcmVmaXggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIEF1dG9jb21wbGV0ZUVkaXRvciBleHRlbmRzIF9oYW5kc29udGFibGVFZGl0b3IuSGFuZHNvbnRhYmxlRWRpdG9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBRdWVyeSBzdHJpbmcgdG8gdHVybiBhdmFpbGFibGUgdmFsdWVzIG92ZXIuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInF1ZXJ5XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIENvbnRhaW5zIHN0cmlwcGVkIGNob2ljZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nW119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RyaXBwZWRDaG9pY2VzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBDb250YWlucyByYXcgY2hvaWNlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyYXdDaG9pY2VzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBIb2xkcyB0aGUgcHJlZml4IG9mIHRoZSBlZGl0b3IncyBpZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2lkUHJlZml4LCB0aGlzLmhvdC5ndWlkLnNsaWNlKDAsIDkpKTtcbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIGFuZCBzb3J0cyBieSByZWxldmFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBjaG9pY2VzIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjaG9pY2VzLlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2FzZVNlbnNpdGl2ZSBJbmRpY2F0ZXMgaWYgaXQncyBzb3J0ZWQgYnkgY2FzZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyW119IEFycmF5IG9mIGluZGV4ZXMgaW4gb3JpZ2luYWwgY2hvaWNlcyBhcnJheS5cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzb3J0QnlSZWxldmFuY2VcIiwgZnVuY3Rpb24gKHZhbHVlLCBjaG9pY2VzLCBjYXNlU2Vuc2l0aXZlKSB7XG4gICAgICBjb25zdCBjaG9pY2VzUmVsZXZhbmNlID0gW107XG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICAgICAgbGV0IGNob2ljZXNDb3VudCA9IGNob2ljZXMubGVuZ3RoO1xuICAgICAgbGV0IGNoYXJzTGVmdDtcbiAgICAgIGxldCBjdXJyZW50SXRlbTtcbiAgICAgIGxldCBpO1xuICAgICAgbGV0IHZhbHVlSW5kZXg7XG4gICAgICBpZiAodmFsdWVMZW5ndGggPT09IDApIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNob2ljZXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjaG9pY2VzQ291bnQ7IGkrKykge1xuICAgICAgICBjdXJyZW50SXRlbSA9ICgwLCBfc3RyaW5nLnN0cmlwVGFncykoKDAsIF9taXhlZC5zdHJpbmdpZnkpKGNob2ljZXNbaV0pKTtcbiAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICB2YWx1ZUluZGV4ID0gY3VycmVudEl0ZW0uaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbG9jYWxlID0gdGhpcy5jZWxsUHJvcGVydGllcy5sb2NhbGU7XG4gICAgICAgICAgdmFsdWVJbmRleCA9IGN1cnJlbnRJdGVtLnRvTG9jYWxlTG93ZXJDYXNlKGxvY2FsZSkuaW5kZXhPZih2YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZShsb2NhbGUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBjaGFyc0xlZnQgPSBjdXJyZW50SXRlbS5sZW5ndGggLSB2YWx1ZUluZGV4IC0gdmFsdWVMZW5ndGg7XG4gICAgICAgICAgY2hvaWNlc1JlbGV2YW5jZS5wdXNoKHtcbiAgICAgICAgICAgIGJhc2VJbmRleDogaSxcbiAgICAgICAgICAgIGluZGV4OiB2YWx1ZUluZGV4LFxuICAgICAgICAgICAgY2hhcnNMZWZ0LFxuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnRJdGVtXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNob2ljZXNSZWxldmFuY2Uuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBpZiAoYi5pbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEuaW5kZXggPCBiLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9IGVsc2UgaWYgKGIuaW5kZXggPCBhLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoYS5pbmRleCA9PT0gYi5pbmRleCkge1xuICAgICAgICAgIGlmIChhLmNoYXJzTGVmdCA8IGIuY2hhcnNMZWZ0KSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChhLmNoYXJzTGVmdCA+IGIuY2hhcnNMZWZ0KSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIGZvciAoaSA9IDAsIGNob2ljZXNDb3VudCA9IGNob2ljZXNSZWxldmFuY2UubGVuZ3RoOyBpIDwgY2hvaWNlc0NvdW50OyBpKyspIHtcbiAgICAgICAgcmVzdWx0LnB1c2goY2hvaWNlc1JlbGV2YW5jZVtpXS5iYXNlSW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICBzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCkge1xuICAgIHJldHVybiBFRElUT1JfVFlQRTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBjdXJyZW50IHZhbHVlIGZyb20gZWRpdGFibGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnJhd0Nob2ljZXMuZmluZCh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBzdHJpcHBlZFZhbHVlID0gdGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodmFsdWUpO1xuICAgICAgcmV0dXJuIHN0cmlwcGVkVmFsdWUgPT09IHRoaXMuVEVYVEFSRUEudmFsdWU7XG4gICAgfSk7XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShzZWxlY3RlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLlRFWFRBUkVBLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZWRpdG9yJ3MgZWxlbWVudHMgYW5kIGFkZHMgbmVjZXNzYXJ5IENTUyBjbGFzc25hbWVzLlxuICAgKi9cbiAgY3JlYXRlRWxlbWVudHMoKSB7XG4gICAgc3VwZXIuY3JlYXRlRWxlbWVudHMoKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuaHRDb250YWluZXIsICdhdXRvY29tcGxldGVFZGl0b3InKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuaHRDb250YWluZXIsIHRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoJ01hYycpID09PSAtMSA/ICcnIDogJ2h0TWFjU2Nyb2xsJyk7XG4gICAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIFsoMCwgX2ExMXkuQTExWV9URVhUKSgpLCAoMCwgX2ExMXkuQTExWV9DT01CT0JPWCkoKSwgKDAsIF9hMTF5LkExMVlfSEFTUE9QVVApKCdsaXN0Ym94JyksICgwLCBfYTExeS5BMTFZX0FVVE9DT01QTEVURSkoKV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBlZGl0b3IncyBtZXRhZGF0YSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgaW50ZXJuYWwgSGFuZHNvbnRhYmxlJ3MgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSB0ZCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICovXG4gIHByZXBhcmUocm93LCBjb2wsIHByb3AsIHRkLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgICBzdXBlci5wcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKTtcbiAgICBpZiAodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncykge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkodGhpcy5URVhUQVJFQSwgWygwLCBfYTExeS5BMTFZX0VYUEFOREVEKSgnZmFsc2UnKSwgKDAsIF9hMTF5LkExMVlfQ09OVFJPTFMpKGAke19jbGFzc1ByaXZhdGVGaWVsZEdldChfaWRQcmVmaXgsIHRoaXMpfS1saXN0Ym94LSR7cm93fS0ke2NvbH1gKV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZWRpdG9yIGFuZCBhZGp1c3QgaXRzIHNpemUgYW5kIGludGVybmFsIEhhbmRzb250YWJsZSdzIGluc3RhbmNlLlxuICAgKi9cbiAgb3BlbigpIHtcbiAgICBzdXBlci5vcGVuKCk7XG4gICAgY29uc3QgdHJpbURyb3Bkb3duID0gdGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd24gPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9wZG93bjtcbiAgICBjb25zdCByb290SW5zdGFuY2VBcmlhVGFnc0VuYWJsZWQgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO1xuICAgIGNvbnN0IHNvdXJjZUFycmF5ID0gQXJyYXkuaXNBcnJheSh0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZSkgPyB0aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZSA6IG51bGw7XG4gICAgY29uc3Qgc291cmNlU2l6ZSA9IHNvdXJjZUFycmF5ID09PSBudWxsIHx8IHNvdXJjZUFycmF5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2VBcnJheS5sZW5ndGg7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgIGNvbDogY29sSW5kZXhcbiAgICB9ID0gdGhpcztcbiAgICB0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgbGV0IHNjcm9sbGJhcldpZHRoID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKSgpO1xuICAgIGlmIChzY3JvbGxiYXJXaWR0aCA9PT0gMCAmJiAoMCwgX2Jyb3dzZXIuaXNNYWNPUykoKSkge1xuICAgICAgc2Nyb2xsYmFyV2lkdGggKz0gMTU7IC8vIGRlZmF1bHQgc2Nyb2xsIGJhciB3aWR0aCBpZiBzY3JvbGwgYmFycyBhcmUgdmlzaWJsZSBvbmx5IHdoZW4gc2Nyb2xsaW5nXG4gICAgfVxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlS2V5RG93bicsIGV2ZW50ID0+IHRoaXMub25CZWZvcmVLZXlEb3duKGV2ZW50KSk7XG4gICAgdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7XG4gICAgICBjb2xXaWR0aHM6IHRyaW1Ecm9wZG93biA/IFsoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5URVhUQVJFQSkgLSAyXSA6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoOiB0cmltRHJvcGRvd24gPyAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5URVhUQVJFQSkgKyBzY3JvbGxiYXJXaWR0aCA6IHVuZGVmaW5lZCxcbiAgICAgIGF1dG9Db2x1bW5TaXplOiB0cnVlLFxuICAgICAgcmVuZGVyZXI6IChob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgKDAsIF90ZXh0UmVuZGVyZXIudGV4dFJlbmRlcmVyKShob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSxcbiAgICAgICAgICBhbGxvd0h0bWwsXG4gICAgICAgICAgbG9jYWxlXG4gICAgICAgIH0gPSB0aGlzLmNlbGxQcm9wZXJ0aWVzO1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICAgIGxldCBjZWxsVmFsdWUgPSAoMCwgX21peGVkLnN0cmluZ2lmeSkodmFsdWUpO1xuICAgICAgICBsZXQgaW5kZXhPZk1hdGNoO1xuICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgIGlmIChjZWxsVmFsdWUgJiYgIWFsbG93SHRtbCkge1xuICAgICAgICAgIGluZGV4T2ZNYXRjaCA9IGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUgPT09IHRydWUgPyBjZWxsVmFsdWUuaW5kZXhPZihxdWVyeSkgOiBjZWxsVmFsdWUudG9Mb2NhbGVMb3dlckNhc2UobG9jYWxlKS5pbmRleE9mKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKGxvY2FsZSkpO1xuICAgICAgICAgIGlmIChpbmRleE9mTWF0Y2ggIT09IC0xKSB7XG4gICAgICAgICAgICBtYXRjaCA9IGNlbGxWYWx1ZS5zdWJzdHIoaW5kZXhPZk1hdGNoLCBxdWVyeS5sZW5ndGgpO1xuICAgICAgICAgICAgY2VsbFZhbHVlID0gY2VsbFZhbHVlLnJlcGxhY2UobWF0Y2gsIGA8c3Ryb25nPiR7bWF0Y2h9PC9zdHJvbmc+YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyb290SW5zdGFuY2VBcmlhVGFnc0VuYWJsZWQpIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShURCwgWygwLCBfYTExeS5BMTFZX09QVElPTikoKSxcbiAgICAgICAgICAvLyBBZGQgYHNldHNpemVgIGFuZCBgcG9zaW5zZXRgIG9ubHkgaWYgdGhlIHNvdXJjZSBpcyBhbiBhcnJheS5cbiAgICAgICAgICAuLi4oc291cmNlQXJyYXkgPyBbKDAsIF9hMTF5LkExMVlfU0VUU0laRSkoc291cmNlU2l6ZSldIDogW10pLCAuLi4oc291cmNlQXJyYXkgPyBbKDAsIF9hMTF5LkExMVlfUE9TSU5TRVQpKHNvdXJjZUFycmF5LmluZGV4T2YodmFsdWUpICsgMSldIDogW10pLCBbJ2lkJywgYCR7dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5pZH1fJHtyb3d9LSR7Y29sfWBdXSk7XG4gICAgICAgIH1cbiAgICAgICAgVEQuaW5uZXJIVE1MID0gY2VsbFZhbHVlO1xuICAgICAgfSxcbiAgICAgIGFmdGVyU2VsZWN0aW9uRW5kOiAoc3RhcnRSb3csIHN0YXJ0Q29sKSA9PiB7XG4gICAgICAgIGlmIChyb290SW5zdGFuY2VBcmlhVGFnc0VuYWJsZWQpIHtcbiAgICAgICAgICBjb25zdCBURCA9IHRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChzdGFydFJvdywgc3RhcnRDb2wsIHRydWUpO1xuICAgICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRELCBbKDAsIF9hMTF5LkExMVlfU0VMRUNURUQpKCldKTtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKSh0aGlzLlRFWFRBUkVBLCAuLi4oMCwgX2ExMXkuQTExWV9BQ1RJVkVERVNDRU5EQU5UKShURC5pZCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJvb3RJbnN0YW5jZUFyaWFUYWdzRW5hYmxlZCkge1xuICAgICAgLy8gQWRkIGByb2xlPXByZXNlbnRhdGlvbmAgdG8gdGhlIG1haW4gdGFibGUgdG8gcHJldmVudCB0aGUgcmVhZGVycyBmcm9tIHRyZWF0aW5nIHRoZSBvcHRpb24gbGlzdCBhcyBhIHRhYmxlLlxuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkodGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsIC4uLigwLCBfYTExeS5BMTFZX1BSRVNFTlRBVElPTikoKSk7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKSh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LCBbKDAsIF9hMTF5LkExMVlfTElTVEJPWCkoKSwgKDAsIF9hMTF5LkExMVlfTElWRSkoJ3BvbGl0ZScpLCAoMCwgX2ExMXkuQTExWV9SRUxFVkFOVCkoJ3RleHQnKSwgWydpZCcsIGAke19jbGFzc1ByaXZhdGVGaWVsZEdldChfaWRQcmVmaXgsIHRoaXMpfS1saXN0Ym94LSR7cm93SW5kZXh9LSR7Y29sSW5kZXh9YF1dKTtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIC4uLigwLCBfYTExeS5BMTFZX0VYUEFOREVEKSgndHJ1ZScpKTtcbiAgICB9XG4gICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGVkaXRvci5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMucmVtb3ZlSG9va3NCeUtleSgnYmVmb3JlS2V5RG93bicpO1xuICAgIHN1cGVyLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIFsoMCwgX2ExMXkuQTExWV9FWFBBTkRFRCkoJ2ZhbHNlJyldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgcmVzdWx0IG9mIHZhbGlkYXRpb24gb3IgY2xvc2VzIGVkaXRvciBpZiB1c2VyJ3MgY2FuY2VsbGVkIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IHJlc3VsdCBJZiBgZmFsc2VgIGFuZCB0aGUgY2VsbCB1c2luZyBhbGxvd0ludmFsaWQgb3B0aW9uLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBhbiBlZGl0b3Igd29uJ3QgYmUgY2xvc2VkIHVudGlsIHZhbGlkYXRpb24gaXMgcGFzc2VkLlxuICAgKi9cbiAgZGlzY2FyZEVkaXRvcihyZXN1bHQpIHtcbiAgICBzdXBlci5kaXNjYXJkRWRpdG9yKHJlc3VsdCk7XG4gICAgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBjaG9pY2VzIGxpc3QgYmFzZWQgb24gYXBwbGllZCBhcmd1bWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5IFRoZSBxdWVyeS5cbiAgICovXG4gIHF1ZXJ5Q2hvaWNlcyhxdWVyeSkge1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY2VsbFByb3BlcnRpZXMuc291cmNlO1xuICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc291cmNlLmNhbGwodGhpcy5jZWxsUHJvcGVydGllcywgcXVlcnksIGNob2ljZXMgPT4ge1xuICAgICAgICB0aGlzLnJhd0Nob2ljZXMgPSBjaG9pY2VzO1xuICAgICAgICB0aGlzLnVwZGF0ZUNob2ljZXNMaXN0KHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChjaG9pY2VzKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgdGhpcy5yYXdDaG9pY2VzID0gc291cmNlO1xuICAgICAgdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoc291cmNlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGxpc3Qgb2YgdGhlIHBvc3NpYmxlIGNvbXBsZXRpb25zIHRvIGNob29zZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gY2hvaWNlc0xpc3QgVGhlIGNob2ljZXMgbGlzdCB0byBwcm9jZXNzLlxuICAgKi9cbiAgdXBkYXRlQ2hvaWNlc0xpc3QoY2hvaWNlc0xpc3QpIHtcbiAgICBjb25zdCBwb3MgPSAoMCwgX2VsZW1lbnQuZ2V0Q2FyZXRQb3NpdGlvbikodGhpcy5URVhUQVJFQSk7XG4gICAgY29uc3QgZW5kUG9zID0gKDAsIF9lbGVtZW50LmdldFNlbGVjdGlvbkVuZFBvc2l0aW9uKSh0aGlzLlRFWFRBUkVBKTtcbiAgICBjb25zdCBzb3J0QnlSZWxldmFuY2VTZXR0aW5nID0gdGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2U7XG4gICAgY29uc3QgZmlsdGVyU2V0dGluZyA9IHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyO1xuICAgIGxldCBvcmRlckJ5UmVsZXZhbmNlID0gbnVsbDtcbiAgICBsZXQgaGlnaGxpZ2h0SW5kZXggPSBudWxsO1xuICAgIGxldCBjaG9pY2VzID0gY2hvaWNlc0xpc3Q7XG4gICAgaWYgKHNvcnRCeVJlbGV2YW5jZVNldHRpbmcpIHtcbiAgICAgIG9yZGVyQnlSZWxldmFuY2UgPSB0aGlzLnNvcnRCeVJlbGV2YW5jZSh0aGlzLnN0cmlwVmFsdWVJZk5lZWRlZCh0aGlzLmdldFZhbHVlKCkpLCBjaG9pY2VzLCB0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpO1xuICAgIH1cbiAgICBjb25zdCBvcmRlckJ5UmVsZXZhbmNlTGVuZ3RoID0gQXJyYXkuaXNBcnJheShvcmRlckJ5UmVsZXZhbmNlKSA/IG9yZGVyQnlSZWxldmFuY2UubGVuZ3RoIDogMDtcbiAgICBpZiAoZmlsdGVyU2V0dGluZyA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChvcmRlckJ5UmVsZXZhbmNlTGVuZ3RoKSB7XG4gICAgICAgIGhpZ2hsaWdodEluZGV4ID0gb3JkZXJCeVJlbGV2YW5jZVswXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc29ydGVkID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMCwgY2hvaWNlc0NvdW50ID0gY2hvaWNlcy5sZW5ndGg7IGkgPCBjaG9pY2VzQ291bnQ7IGkrKykge1xuICAgICAgICBpZiAoc29ydEJ5UmVsZXZhbmNlU2V0dGluZyAmJiBvcmRlckJ5UmVsZXZhbmNlTGVuZ3RoIDw9IGkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkZXJCeVJlbGV2YW5jZUxlbmd0aCkge1xuICAgICAgICAgIHNvcnRlZC5wdXNoKGNob2ljZXNbb3JkZXJCeVJlbGV2YW5jZVtpXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNvcnRlZC5wdXNoKGNob2ljZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBoaWdobGlnaHRJbmRleCA9IDA7XG4gICAgICBjaG9pY2VzID0gc29ydGVkO1xuICAgIH1cbiAgICB0aGlzLnN0cmlwcGVkQ2hvaWNlcyA9IGNob2ljZXM7XG4gICAgaWYgKGNob2ljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmh0RWRpdG9yLmxvYWREYXRhKCgwLCBfYXJyYXkucGl2b3QpKFtjaG9pY2VzXSkpO1xuICAgIGlmIChjaG9pY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCk7XG4gICAgICB0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCk7XG4gICAgICBpZiAodGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoaGlnaGxpZ2h0SW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmhvdC5saXN0ZW4oKTtcbiAgICAoMCwgX2VsZW1lbnQuc2V0Q2FyZXRQb3NpdGlvbikodGhpcy5URVhUQVJFQSwgcG9zLCBwb3MgPT09IGVuZFBvcyA/IHVuZGVmaW5lZCA6IGVuZFBvcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHdoZXJlIGlzIGVub3VnaCBwbGFjZSB0byBvcGVuIGVkaXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmbGlwRHJvcGRvd25JZk5lZWRlZCgpIHtcbiAgICBjb25zdCB0cmltbWluZ0NvbnRhaW5lciA9ICgwLCBfZWxlbWVudC5nZXRUcmltbWluZ0NvbnRhaW5lcikodGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5UQUJMRSk7XG4gICAgY29uc3QgaXNXaW5kb3dBc1Njcm9sbGFibGVFbGVtZW50ID0gdHJpbW1pbmdDb250YWluZXIgPT09IHRoaXMuaG90LnJvb3RXaW5kb3c7XG4gICAgY29uc3QgcHJldmVudE92ZXJmbG93ID0gdGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7XG4gICAgaWYgKGlzV2luZG93QXNTY3JvbGxhYmxlRWxlbWVudCB8fCAhaXNXaW5kb3dBc1Njcm9sbGFibGVFbGVtZW50ICYmIChwcmV2ZW50T3ZlcmZsb3cgfHwgcHJldmVudE92ZXJmbG93ID09PSAnaG9yaXpvbnRhbCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHRleHRhcmVhT2Zmc2V0ID0gKDAsIF9lbGVtZW50Lm9mZnNldCkodGhpcy5URVhUQVJFQSk7XG4gICAgY29uc3QgdGV4dGFyZWFIZWlnaHQgPSAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuVEVYVEFSRUEpO1xuICAgIGNvbnN0IGRyb3Bkb3duSGVpZ2h0ID0gdGhpcy5nZXREcm9wZG93bkhlaWdodCgpO1xuICAgIGNvbnN0IHRyaW1taW5nQ29udGFpbmVyU2Nyb2xsVG9wID0gdHJpbW1pbmdDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IGhlYWRlcnNIZWlnaHQgPSAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpO1xuICAgIGNvbnN0IGNvbnRhaW5lck9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHRyaW1taW5nQ29udGFpbmVyKTtcbiAgICBjb25zdCBzcGFjZUFib3ZlID0gdGV4dGFyZWFPZmZzZXQudG9wIC0gY29udGFpbmVyT2Zmc2V0LnRvcCAtIGhlYWRlcnNIZWlnaHQgKyB0cmltbWluZ0NvbnRhaW5lclNjcm9sbFRvcDtcbiAgICBjb25zdCBzcGFjZUJlbG93ID0gdHJpbW1pbmdDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gc3BhY2VBYm92ZSAtIGhlYWRlcnNIZWlnaHQgLSB0ZXh0YXJlYUhlaWdodDtcbiAgICBjb25zdCBmbGlwTmVlZGVkID0gZHJvcGRvd25IZWlnaHQgPiBzcGFjZUJlbG93ICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93O1xuICAgIGlmIChmbGlwTmVlZGVkKSB7XG4gICAgICB0aGlzLmZsaXBEcm9wZG93bihkcm9wZG93bkhlaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudW5mbGlwRHJvcGRvd24oKTtcbiAgICB9XG4gICAgdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoZmxpcE5lZWRlZCA/IHNwYWNlQWJvdmUgOiBzcGFjZUJlbG93LCBkcm9wZG93bkhlaWdodCk7XG4gICAgcmV0dXJuIGZsaXBOZWVkZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBpbnRlcm5hbCB0YWJsZSBzaG91bGQgZ2VuZXJhdGUgc2Nyb2xsYmFyIG9yIGNvdWxkIGJlIHJlbmRlcmVkIHdpdGhvdXQgaXQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzcGFjZUF2YWlsYWJsZSBUaGUgZnJlZSBzcGFjZSBhcyBoZWlnaHQgZGVmaW5lZCBpbiBweCBhdmFpbGFibGUgZm9yIGRyb3Bkb3duIGxpc3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkcm9wZG93bkhlaWdodCBUaGUgZHJvcGRvd24gaGVpZ2h0LlxuICAgKi9cbiAgbGltaXREcm9wZG93bklmTmVlZGVkKHNwYWNlQXZhaWxhYmxlLCBkcm9wZG93bkhlaWdodCkge1xuICAgIGlmIChkcm9wZG93bkhlaWdodCA+IHNwYWNlQXZhaWxhYmxlKSB7XG4gICAgICBsZXQgdGVtcEhlaWdodCA9IDA7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBsZXQgbGFzdFJvd0hlaWdodCA9IDA7XG4gICAgICBsZXQgaGVpZ2h0ID0gbnVsbDtcbiAgICAgIGRvIHtcbiAgICAgICAgbGFzdFJvd0hlaWdodCA9IHRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KGkpIHx8IHRoaXMuaHRFZGl0b3Iudmlldy5fd3QuZ2V0U2V0dGluZygnZGVmYXVsdFJvd0hlaWdodCcpO1xuICAgICAgICB0ZW1wSGVpZ2h0ICs9IGxhc3RSb3dIZWlnaHQ7XG4gICAgICAgIGkgKz0gMTtcbiAgICAgIH0gd2hpbGUgKHRlbXBIZWlnaHQgPCBzcGFjZUF2YWlsYWJsZSk7XG4gICAgICBoZWlnaHQgPSB0ZW1wSGVpZ2h0IC0gbGFzdFJvd0hlaWdodDtcbiAgICAgIGlmICh0aGlzLmh0RWRpdG9yLmZsaXBwZWQpIHtcbiAgICAgICAgdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3AgPSBgJHtwYXJzZUludCh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcCwgMTApICsgZHJvcGRvd25IZWlnaHQgLSBoZWlnaHR9cHhgO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXREcm9wZG93bkhlaWdodCh0ZW1wSGVpZ2h0IC0gbGFzdFJvd0hlaWdodCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZXMgZWRpdG9yIHRvIG9wZW4gaXQgYXQgdGhlIHRvcC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRyb3Bkb3duSGVpZ2h0IFRoZSBkcm9wZG93biBoZWlnaHQuXG4gICAqL1xuICBmbGlwRHJvcGRvd24oZHJvcGRvd25IZWlnaHQpIHtcbiAgICBjb25zdCBkcm9wZG93blN0eWxlID0gdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtcbiAgICBkcm9wZG93blN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkcm9wZG93blN0eWxlLnRvcCA9IGAkey1kcm9wZG93bkhlaWdodH1weGA7XG4gICAgdGhpcy5odEVkaXRvci5mbGlwcGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIGVkaXRvciB0byBvcGVuIGl0IGF0IHRoZSBib3R0b20uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bmZsaXBEcm9wZG93bigpIHtcbiAgICBjb25zdCBkcm9wZG93blN0eWxlID0gdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtcbiAgICBkcm9wZG93blN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBkcm9wZG93blN0eWxlLnRvcCA9ICcnO1xuICAgIHRoaXMuaHRFZGl0b3IuZmxpcHBlZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGludGVybmFsIEhhbmRzb250YWJsZSdzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnREcm9wZG93bldpZHRoID0gdGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKSArICgwLCBfZWxlbWVudC5nZXRTY3JvbGxiYXJXaWR0aCkodGhpcy5ob3Qucm9vdERvY3VtZW50KSArIDI7XG4gICAgY29uc3QgdHJpbURyb3Bkb3duID0gdGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247XG4gICAgdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7XG4gICAgICBoZWlnaHQ6IHRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSxcbiAgICAgIHdpZHRoOiB0cmltRHJvcGRvd24gPyB1bmRlZmluZWQgOiBjdXJyZW50RHJvcGRvd25XaWR0aFxuICAgIH0pO1xuICAgIHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBuZXcgaGVpZ2h0IG9mIHRoZSBpbnRlcm5hbCBIYW5kc29udGFibGUncyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBUaGUgbmV3IGRyb3Bkb3duIGhlaWdodC5cbiAgICovXG4gIHNldERyb3Bkb3duSGVpZ2h0KGhlaWdodCkge1xuICAgIHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe1xuICAgICAgaGVpZ2h0XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBuZXcgc2VsZWN0aW9uIG9uIHNwZWNpZmllZCByb3cgaW5kZXgsIG9yIGRlc2VsZWN0cyBzZWxlY3RlZCBjZWxscy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBpbmRleCBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICovXG4gIGhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShpbmRleCkge1xuICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwoaW5kZXgsIDAsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhbmQgcmV0dXJuIHRoZSBpbnRlcm5hbCBIYW5kc29udGFibGUncyBoZWlnaHQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXREcm9wZG93bkhlaWdodCgpIHtcbiAgICBjb25zdCBmaXJzdFJvd0hlaWdodCA9IHRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KDApIHx8IDIzO1xuICAgIGNvbnN0IHZpc2libGVSb3dzID0gdGhpcy5jZWxsUHJvcGVydGllcy52aXNpYmxlUm93cztcbiAgICByZXR1cm4gdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoID49IHZpc2libGVSb3dzID8gdmlzaWJsZVJvd3MgKiBmaXJzdFJvd0hlaWdodCA6IHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0aCAqIGZpcnN0Um93SGVpZ2h0ICsgODsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIHZhbHVlIGZyb20gcG90ZW50aWFsIGRhbmdlcm91cyB0YWdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIHRvIHNhbml0aXplLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RyaXBWYWx1ZUlmTmVlZGVkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbdmFsdWVdKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcyBmcm9tIHBvdGVudGlhbCBkYW5nZXJvdXMgdGFncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzIFRoZSB2YWx1ZSB0byBzYW5pdGl6ZS5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgc3RyaXBWYWx1ZXNJZk5lZWRlZCh2YWx1ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBhbGxvd0h0bWxcbiAgICB9ID0gdGhpcy5jZWxsUHJvcGVydGllcztcbiAgICBjb25zdCBzdHJpbmdpZmllZFZhbHVlcyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKHZhbHVlcywgdmFsdWUgPT4gKDAsIF9taXhlZC5zdHJpbmdpZnkpKHZhbHVlKSk7XG4gICAgY29uc3Qgc3RyaXBwZWRWYWx1ZXMgPSAoMCwgX2FycmF5LmFycmF5TWFwKShzdHJpbmdpZmllZFZhbHVlcywgdmFsdWUgPT4gYWxsb3dIdG1sID8gdmFsdWUgOiAoMCwgX3N0cmluZy5zdHJpcFRhZ3MpKHZhbHVlKSk7XG4gICAgcmV0dXJuIHN0cmlwcGVkVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmVzIHVzZSBvZiBhcnJvdyBkb3duIGFuZCB1cCB0byBjb250cm9sIHRoZWlyIGJlaGF2aW91ci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtleUNvZGUgVGhlIGtleWJvYXJkIGtleWNvZGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgYWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKGtleUNvZGUpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5odEVkaXRvci5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IHNlbGVjdGVkID0ge1xuICAgICAgcm93OiBzZWxlY3RlZFJhbmdlID8gc2VsZWN0ZWRSYW5nZS5mcm9tLnJvdyA6IC0xXG4gICAgfTtcbiAgICBsZXQgYWxsb3dlZCA9IGZhbHNlO1xuICAgIGlmIChrZXlDb2RlID09PSBfdW5pY29kZS5LRVlfQ09ERVMuQVJST1dfRE9XTiAmJiBzZWxlY3RlZC5yb3cgPiAwICYmIHNlbGVjdGVkLnJvdyA8IHRoaXMuaHRFZGl0b3IuY291bnRSb3dzKCkgLSAxKSB7XG4gICAgICBhbGxvd2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGtleUNvZGUgPT09IF91bmljb2RlLktFWV9DT0RFUy5BUlJPV19VUCAmJiBzZWxlY3RlZC5yb3cgPiAtMSkge1xuICAgICAgYWxsb3dlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBhbGxvd2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uQmVmb3JlS2V5RG93biBjYWxsYmFjay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCBUaGUga2V5Ym9hcmQgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb25CZWZvcmVLZXlEb3duKGV2ZW50KSB7XG4gICAgaWYgKCgwLCBfdW5pY29kZS5pc1ByaW50YWJsZUNoYXIpKGV2ZW50LmtleUNvZGUpIHx8IGV2ZW50LmtleUNvZGUgPT09IF91bmljb2RlLktFWV9DT0RFUy5CQUNLU1BBQ0UgfHwgZXZlbnQua2V5Q29kZSA9PT0gX3VuaWNvZGUuS0VZX0NPREVTLkRFTEVURSB8fCBldmVudC5rZXlDb2RlID09PSBfdW5pY29kZS5LRVlfQ09ERVMuSU5TRVJUKSB7XG4gICAgICAvLyBmb3IgV2luZG93cyAxMCArIEZGODYgdGhlcmUgaXMgbmVlZCB0byBhZGQgZGVsYXkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIHRha2VuIGZyb21cbiAgICAgIC8vIHRoZSB0ZXh0YXJlYSBpcyB0aGUgZnJlc2hlc3QgdmFsdWUuIE90aGVyd2lzZSB0aGUgbGlzdCBvZiBjaG9pY2VzIGRvZXMgbm90IHVwZGF0ZSBjb3JyZWN0bHkgKHNlZSAjNzU3MCkuXG4gICAgICAvLyBPbiB0aGUgbW9yZSBtb2Rlcm4gdmVyc2lvbiBvZiB0aGUgRkYgKH4gPj05MSkgaXQgc2VlbXMgdGhhdCB0aGUgaXNzdWUgaXMgbm90IHByZXNlbnQgb3IgaXQgaXNcbiAgICAgIC8vIG1vcmUgZGlmZmljdWx0IHRvIGluZHVjZS5cbiAgICAgIGxldCB0aW1lT2Zmc2V0ID0gMTA7XG5cbiAgICAgIC8vIG9uIGN0bCtjIC8gY21kK2MgZG9uJ3QgdXBkYXRlIHN1Z2dlc3Rpb24gbGlzdFxuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IF91bmljb2RlLktFWV9DT0RFUy5DICYmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5pc09wZW5lZCgpKSB7XG4gICAgICAgIHRpbWVPZmZzZXQgKz0gMTA7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5odEVkaXRvcikge1xuICAgICAgICB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKTtcbiAgICAgICAgfSwgdGltZU9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkF1dG9jb21wbGV0ZUVkaXRvciA9IEF1dG9jb21wbGV0ZUVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXV0b2NvbXBsZXRlRWRpdG9yID0gcmVxdWlyZShcIi4vYXV0b2NvbXBsZXRlRWRpdG9yXCIpO1xuZXhwb3J0cy5FRElUT1JfVFlQRSA9IF9hdXRvY29tcGxldGVFZGl0b3IuRURJVE9SX1RZUEU7XG5leHBvcnRzLkF1dG9jb21wbGV0ZUVkaXRvciA9IF9hdXRvY29tcGxldGVFZGl0b3IuQXV0b2NvbXBsZXRlRWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9ob29rc1JlZlJlZ2lzdGVyZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9taXhpbnMvaG9va3NSZWZSZWdpc3RlcmVyXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgRURJVE9SX1RZUEUgPSBleHBvcnRzLkVESVRPUl9UWVBFID0gJ2Jhc2UnO1xuY29uc3QgRURJVE9SX1NUQVRFID0gZXhwb3J0cy5FRElUT1JfU1RBVEUgPSBPYmplY3QuZnJlZXplKHtcbiAgVklSR0lOOiAnU1RBVEVfVklSR0lOJyxcbiAgLy8gYmVmb3JlIGVkaXRpbmdcbiAgRURJVElORzogJ1NUQVRFX0VESVRJTkcnLFxuICBXQUlUSU5HOiAnU1RBVEVfV0FJVElORycsXG4gIC8vIHdhaXRpbmcgZm9yIGFzeW5jIHZhbGlkYXRpb25cbiAgRklOSVNIRUQ6ICdTVEFURV9GSU5JU0hFRCdcbn0pO1xuXG4vKipcbiAqIEBjbGFzcyBCYXNlRWRpdG9yXG4gKi9cbmNsYXNzIEJhc2VFZGl0b3Ige1xuICBzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCkge1xuICAgIHJldHVybiBFRElUT1JfVFlQRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgc291cmNlIGluc3RhbmNlIG9mIHRoZSBIYW5kc29udGFibGUuXG4gICAqXG4gICAqIEB0eXBlIHtIYW5kc29udGFibGV9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0hhbmRzb250YWJsZX0gaG90SW5zdGFuY2UgQSByZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBpbnN0YW5jZSBvZiB0aGUgSGFuZHNvbnRhYmxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBFZGl0b3IncyBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdGVcIiwgRURJVE9SX1NUQVRFLlZJUkdJTik7XG4gICAgLyoqXG4gICAgICogRmxhZyB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBlZGl0b3IncyBvcGVuaW5nIHN0YXR1cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfb3BlbmVkXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBlZGl0b3IncyBlZGl0aW5nIG1vZGUuIFdoZW4gZmFsc2UsIHRoZW4gYW4gZWRpdG9yIHdvcmtzIGluIGZhc3QgZWRpdGluZyBtb2RlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9mdWxsRWRpdE1vZGVcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGNhbGwgYWZ0ZXIgY2xvc2luZyBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiX2Nsb3NlQ2FsbGJhY2tcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ3VycmVudGx5IHJlbmRlcmVkIGNlbGwncyBURCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0hUTUxUYWJsZUNlbGxFbGVtZW50fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIlREXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFZpc3VhbCByb3cgaW5kZXguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvd1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2xcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ29sdW1uIHByb3BlcnR5IG5hbWUgb3IgYSBjb2x1bW4gaW5kZXgsIGlmIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2YgYXJyYXlzLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcnxzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJvcFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBPcmlnaW5hbCBjZWxsJ3MgdmFsdWUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Kn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJvcmlnaW5hbFZhbHVlXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIE9iamVjdCBjb250YWluaW5nIHRoZSBjZWxsJ3MgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2VsbFByb3BlcnRpZXNcIiwgbnVsbCk7XG4gICAgdGhpcy5ob3QgPSBob3RJbnN0YW5jZTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyBjYWxsYmFjayBhZnRlciBjbG9zaW5nIGVkaXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtib29sZWFufSByZXN1bHQgVGhlIGVkaXRvciB2YWx1ZS5cbiAgICovXG4gIF9maXJlQ2FsbGJhY2tzKHJlc3VsdCkge1xuICAgIGlmICh0aGlzLl9jbG9zZUNhbGxiYWNrKSB7XG4gICAgICB0aGlzLl9jbG9zZUNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICB0aGlzLl9jbG9zZUNhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgYW4gZWRpdG9yJ3MgaW50YW5jZS5cbiAgICovXG4gIGluaXQoKSB7fVxuXG4gIC8qKlxuICAgKiBSZXF1aXJlZCBtZXRob2QgdG8gZ2V0IGN1cnJlbnQgdmFsdWUgZnJvbSBlZGl0YWJsZSBlbGVtZW50LlxuICAgKi9cbiAgZ2V0VmFsdWUoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0VkaXRvciBnZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZWQgbWV0aG9kIHRvIHNldCBuZXcgdmFsdWUgaW50byBlZGl0YWJsZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0VmFsdWUoKSB7XG4gICAgdGhyb3cgRXJyb3IoJ0VkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWlyZWQgbWV0aG9kIHRvIG9wZW4gZWRpdG9yLlxuICAgKi9cbiAgb3BlbigpIHtcbiAgICB0aHJvdyBFcnJvcignRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIG1ldGhvZCB0byBjbG9zZSBlZGl0b3IuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB0aHJvdyBFcnJvcignRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBlZGl0b3IncyBtZXRhIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSB0ZCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICovXG4gIHByZXBhcmUocm93LCBjb2wsIHByb3AsIHRkLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgICB0aGlzLlREID0gdGQ7XG4gICAgdGhpcy5yb3cgPSByb3c7XG4gICAgdGhpcy5jb2wgPSBjb2w7XG4gICAgdGhpcy5wcm9wID0gcHJvcDtcbiAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNlbGxQcm9wZXJ0aWVzID0gY2VsbFByb3BlcnRpZXM7XG4gICAgdGhpcy5zdGF0ZSA9IHRoaXMuaXNPcGVuZWQoKSA/IHRoaXMuc3RhdGUgOiBFRElUT1JfU1RBVEUuVklSR0lOO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIG1ldGhvZCB0byBwcm92aWRlIGV4dGVuZGFibGUgZWRpdG9ycyBpbiBFUzUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAgICovXG4gIGV4dGVuZCgpIHtcbiAgICByZXR1cm4gY2xhc3MgRWRpdG9yIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3RvciB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB2YWx1ZSBmcm9tIGVkaXRvciBpbnRvIGRhdGEgc3RvcmFnZS5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgZWRpdG9yIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGN0cmxEb3duIElmIGB0cnVlYCwgYXBwbGllcyB2YWx1ZSB0byBlYWNoIGNlbGwgaW4gdGhlIGxhc3Qgc2VsZWN0ZWQgcmFuZ2UuXG4gICAqL1xuICBzYXZlVmFsdWUodmFsdWUsIGN0cmxEb3duKSB7XG4gICAgbGV0IHZpc3VhbFJvd0Zyb207XG4gICAgbGV0IHZpc3VhbENvbHVtbkZyb207XG4gICAgbGV0IHZpc3VhbFJvd1RvO1xuICAgIGxldCB2aXN1YWxDb2x1bW5UbztcblxuICAgIC8vIGlmIGN0cmwrZW50ZXIgYW5kIG11bHRpcGxlIGNlbGxzIHNlbGVjdGVkLCBiZWhhdmUgbGlrZSBFeGNlbCAoZmluaXNoIGVkaXRpbmcgYW5kIGFwcGx5IHRvIGFsbCBjZWxscylcbiAgICBpZiAoY3RybERvd24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTGFzdCA9IHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO1xuICAgICAgdmlzdWFsUm93RnJvbSA9IE1hdGgubWF4KE1hdGgubWluKHNlbGVjdGVkTGFzdFswXSwgc2VsZWN0ZWRMYXN0WzJdKSwgMCk7IC8vIE1hdGgubWF4IGVsaW1pbmF0ZSBoZWFkZXJzIGNvb3Jkcy5cbiAgICAgIHZpc3VhbENvbHVtbkZyb20gPSBNYXRoLm1heChNYXRoLm1pbihzZWxlY3RlZExhc3RbMV0sIHNlbGVjdGVkTGFzdFszXSksIDApOyAvLyBNYXRoLm1heCBlbGltaW5hdGUgaGVhZGVycyBjb29yZHMuXG4gICAgICB2aXN1YWxSb3dUbyA9IE1hdGgubWF4KHNlbGVjdGVkTGFzdFswXSwgc2VsZWN0ZWRMYXN0WzJdKTtcbiAgICAgIHZpc3VhbENvbHVtblRvID0gTWF0aC5tYXgoc2VsZWN0ZWRMYXN0WzFdLCBzZWxlY3RlZExhc3RbM10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBbdmlzdWFsUm93RnJvbSwgdmlzdWFsQ29sdW1uRnJvbSwgdmlzdWFsUm93VG8sIHZpc3VhbENvbHVtblRvXSA9IFt0aGlzLnJvdywgdGhpcy5jb2wsIG51bGwsIG51bGxdO1xuICAgIH1cbiAgICBjb25zdCBtb2RpZmllZENlbGxDb29yZHMgPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5R2V0Q2VsbENvb3JkcycsIHZpc3VhbFJvd0Zyb20sIHZpc3VhbENvbHVtbkZyb20pO1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGlmaWVkQ2VsbENvb3JkcykpIHtcbiAgICAgIFt2aXN1YWxSb3dGcm9tLCB2aXN1YWxDb2x1bW5Gcm9tXSA9IG1vZGlmaWVkQ2VsbENvb3JkcztcbiAgICB9XG5cbiAgICAvLyBTYXZpbmcgdmFsdWVzIHVzaW5nIHRoZSBtb2RpZmllZCBjb29yZGluYXRlcy5cbiAgICB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2aXN1YWxSb3dGcm9tLCB2aXN1YWxDb2x1bW5Gcm9tLCB2YWx1ZSwgdmlzdWFsUm93VG8sIHZpc3VhbENvbHVtblRvLCAnZWRpdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyBlZGl0aW5nIG9uIGEgaGlnaGxpZ2h0ZWQgY2VsbCBhbmQgaGlkZXMgZmlsbEhhbmRsZSBjb3JuZXIgaWYgd2FzIHByZXNlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gbmV3SW5pdGlhbFZhbHVlIFRoZSBpbml0aWFsIGVkaXRvciB2YWx1ZS5cbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIGJlZ2luRWRpdGluZyhuZXdJbml0aWFsVmFsdWUsIGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IEVESVRPUl9TVEFURS5WSVJHSU4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaG90SW5zdGFuY2UgPSB0aGlzLmhvdDtcbiAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgdmlzdWFsIGluZGV4ZXMgaW50byByZW5kZXJhYmxlIGluZGV4ZXNcbiAgICAvLyBkdWUgdG8gaGlkZGVuIGNvbHVtbnMgZG9uJ3QgcGFydGljaXBhdGUgaW4gdGhlIHJlbmRlcmluZyBwcm9jZXNzXG4gICAgY29uc3QgcmVuZGVyYWJsZVJvd0luZGV4ID0gaG90SW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyk7XG4gICAgY29uc3QgcmVuZGVyYWJsZUNvbHVtbkluZGV4ID0gaG90SW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCk7XG4gICAgaG90SW5zdGFuY2Uudmlldy5zY3JvbGxWaWV3cG9ydChob3RJbnN0YW5jZS5fY3JlYXRlQ2VsbENvb3JkcyhyZW5kZXJhYmxlUm93SW5kZXgsIHJlbmRlcmFibGVDb2x1bW5JbmRleCkpO1xuICAgIHRoaXMuc3RhdGUgPSBFRElUT1JfU1RBVEUuRURJVElORztcblxuICAgIC8vIFNldCB0aGUgZWRpdG9yIHZhbHVlIG9ubHkgaW4gdGhlIGZ1bGwgZWRpdCBtb2RlLiBJbiBvdGhlciBtb2RlIHRoZSBmb2N1c2FibGUgZWxlbWVudCBoYXMgdG8gYmUgZW1wdHksXG4gICAgLy8gb3RoZXJ3aXNlIElNRSAoZWRpdG9yIGZvciBBc2lhIHVzZXJzKSBkb2Vzbid0IHdvcmsuXG4gICAgaWYgKHRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpKSB7XG4gICAgICBjb25zdCBzdHJpbmdpZmllZEluaXRpYWxWYWx1ZSA9IHR5cGVvZiBuZXdJbml0aWFsVmFsdWUgPT09ICdzdHJpbmcnID8gbmV3SW5pdGlhbFZhbHVlIDogKDAsIF9taXhlZC5zdHJpbmdpZnkpKHRoaXMub3JpZ2luYWxWYWx1ZSk7XG4gICAgICB0aGlzLnNldFZhbHVlKHN0cmluZ2lmaWVkSW5pdGlhbFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5vcGVuKGV2ZW50KTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICAgIHRoaXMuZm9jdXMoKTtcblxuICAgIC8vIG9ubHkgcmVyZW5kZXIgdGhlIHNlbGVjdGlvbnMgKEZpbGxIYW5kbGUgc2hvdWxkIGRpc2FwcGVhciB3aGVuIGJlZ2luRWRpdGluZyBpcyB0cmlnZ2VyZWQpXG4gICAgaG90SW5zdGFuY2Uudmlldy5yZW5kZXIoKTtcbiAgICBob3RJbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJCZWdpbkVkaXRpbmcnLCB0aGlzLnJvdywgdGhpcy5jb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmlzaGVzIGVkaXRpbmcgYW5kIHN0YXJ0IHNhdmluZyBvciByZXN0b3JpbmcgcHJvY2VzcyBmb3IgZWRpdGluZyBjZWxsIG9yIGxhc3Qgc2VsZWN0ZWQgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzdG9yZU9yaWdpbmFsVmFsdWUgSWYgdHJ1ZSwgdGhlbiBjbG9zZXMgZWRpdG9yIHdpdGhvdXQgc2F2aW5nIHZhbHVlIGZyb20gdGhlIGVkaXRvciBpbnRvIGEgY2VsbC5cbiAgICogQHBhcmFtIHtib29sZWFufSBjdHJsRG93biBJZiB0cnVlLCB0aGVuIHNhdmVWYWx1ZSB3aWxsIHNhdmUgZWRpdG9yJ3MgdmFsdWUgdG8gZWFjaCBjZWxsIGluIHRoZSBsYXN0IHNlbGVjdGVkIHJhbmdlLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZpcmVkIGFmdGVyIGVkaXRvciBjbG9zaW5nLlxuICAgKi9cbiAgZmluaXNoRWRpdGluZyhyZXN0b3JlT3JpZ2luYWxWYWx1ZSwgY3RybERvd24sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHZhbDtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzQ2xvc2VDYWxsYmFjayA9IHRoaXMuX2Nsb3NlQ2FsbGJhY2s7XG4gICAgICB0aGlzLl9jbG9zZUNhbGxiYWNrID0gcmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHByZXZpb3VzQ2xvc2VDYWxsYmFjaykge1xuICAgICAgICAgIHByZXZpb3VzQ2xvc2VDYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XG4gICAgICAgIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1dhaXRpbmcoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gRURJVE9SX1NUQVRFLlZJUkdJTikge1xuICAgICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2ZpcmVDYWxsYmFja3ModHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IEVESVRPUl9TVEFURS5FRElUSU5HKSB7XG4gICAgICBpZiAocmVzdG9yZU9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jYW5jZWxDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuICAgICAgaWYgKHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2UpIHtcbiAgICAgICAgLy8gV2UgdHJpbSBvbmx5IHN0cmluZyB2YWx1ZXNcbiAgICAgICAgdmFsID0gW1t0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gU3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwodmFsdWUgfHwgJycpIDogdmFsdWVdXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbCA9IFtbdmFsdWVdXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdGUgPSBFRElUT1JfU1RBVEUuV0FJVElORztcbiAgICAgIHRoaXMuc2F2ZVZhbHVlKHZhbCwgY3RybERvd24pO1xuICAgICAgaWYgKHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcykpIHtcbiAgICAgICAgdGhpcy5ob3QuYWRkSG9va09uY2UoJ3Bvc3RBZnRlclZhbGlkYXRlJywgcmVzdWx0ID0+IHtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gRURJVE9SX1NUQVRFLkZJTklTSEVEO1xuICAgICAgICAgIHRoaXMuZGlzY2FyZEVkaXRvcihyZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBFRElUT1JfU1RBVEUuRklOSVNIRUQ7XG4gICAgICAgIHRoaXMuZGlzY2FyZEVkaXRvcih0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluaXNoZXMgZWRpdGluZyB3aXRob3V0IHNpbmdvdXQgc2F2aW5nIHZhbHVlLlxuICAgKi9cbiAgY2FuY2VsQ2hhbmdlcygpIHtcbiAgICB0aGlzLnN0YXRlID0gRURJVE9SX1NUQVRFLkZJTklTSEVEO1xuICAgIHRoaXMuZGlzY2FyZEVkaXRvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHJlc3VsdCBvZiB2YWxpZGF0aW9uIG9yIGNsb3NlcyBlZGl0b3IgaWYgdXNlcidzIGNhbmNlbGxlZCBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSByZXN1bHQgSWYgYGZhbHNlYCBhbmQgdGhlIGNlbGwgdXNpbmcgYWxsb3dJbnZhbGlkIG9wdGlvbixcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gYW4gZWRpdG9yIHdvbid0IGJlIGNsb3NlZCB1bnRpbCB2YWxpZGF0aW9uIGlzIHBhc3NlZC5cbiAgICovXG4gIGRpc2NhcmRFZGl0b3IocmVzdWx0KSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09IEVESVRPUl9TVEFURS5GSU5JU0hFRCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRvciB3YXMgZGVmaW5lZCBhbmQgZmFpbGVkXG4gICAgaWYgKHJlc3VsdCA9PT0gZmFsc2UgJiYgdGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQgIT09IHRydWUpIHtcbiAgICAgIHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csIHRoaXMuY29sKTtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBFRElUT1JfU1RBVEUuRURJVElORztcbiAgICAgIHRoaXMuX2ZpcmVDYWxsYmFja3MoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB0aGlzLl9vcGVuZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2Z1bGxFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGF0ZSA9IEVESVRPUl9TVEFURS5WSVJHSU47XG4gICAgICB0aGlzLl9maXJlQ2FsbGJhY2tzKHRydWUpO1xuICAgICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgICBzaG9ydGN1dE1hbmFnZXIuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2dyaWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIGVkaXRvciBpbnRvIGZ1bGwgZWRpdCBtb2RlLiBJbiB0aGlzIHN0YXRlIG5hdmlnYXRpb24ga2V5cyBkb24ndCBjbG9zZSBlZGl0b3IuIFRoaXMgbW9kZSBpcyBhY3RpdmF0ZWRcbiAgICogYXV0b21hdGljYWxseSBhZnRlciBoaXQgRU5URVIgb3IgRjIga2V5IG9uIHRoZSBjZWxsIG9yIHdoaWxlIGVkaXRpbmcgY2VsbCBwcmVzcyBGMiBrZXkuXG4gICAqL1xuICBlbmFibGVGdWxsRWRpdE1vZGUoKSB7XG4gICAgdGhpcy5fZnVsbEVkaXRNb2RlID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZWRpdG9yIGlzIGluIGZ1bGwgZWRpdCBtb2RlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzSW5GdWxsRWRpdE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIHdoZXRoZXIgdGhlIGVkaXRvciBpcyBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzT3BlbmVkKCkge1xuICAgIHJldHVybiB0aGlzLl9vcGVuZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpbmZvcm1hdGlvbiB3aGV0aGVyIHRoZSBlZGl0b3IgaXMgd2FpdGluZywgZWcuOiBmb3IgYXN5bmMgdmFsaWRhdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1dhaXRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IEVESVRPUl9TVEFURS5XQUlUSU5HO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuICAvKipcbiAgICogR2V0cyB0aGUgb2JqZWN0IHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVkaXRlZCBjZWxsIHNpemUgYW5kIGl0cyBwb3NpdGlvblxuICAgKiByZWxhdGl2ZSB0byB0aGUgdGFibGUgdmlld3BvcnQuXG4gICAqXG4gICAqIFRoZSByZWN0YW5nbGUgaGFzIHNpeCBpbnRlZ2VyIHByb3BlcnRpZXM6XG4gICAqICAtIGB0b3BgIFRoZSB0b3AgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRhYmxlIHZpZXdwb3J0XG4gICAqICAtIGBzdGFydGAgVGhlIGxlZnQgKG9yIHJpZ2h0IGluIFJUTCkgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHRhYmxlIHZpZXdwb3J0XG4gICAqICAtIGB3aWR0aGAgVGhlIGNlbGwncyBjdXJyZW50IHdpZHRoO1xuICAgKiAgLSBgbWF4V2lkdGhgIFRoZSBtYXhpbXVtIGNlbGwncyB3aWR0aCBhZnRlciB3aGljaCB0aGUgZWRpdG9yIGdvZXMgb3V0IG9mIHRoZSB0YWJsZSB2aWV3cG9ydFxuICAgKiAgLSBgaGVpZ2h0YCBUaGUgY2VsbCdzIGN1cnJlbnQgaGVpZ2h0O1xuICAgKiAgLSBgbWF4SGVpZ2h0YCBUaGUgbWF4aW11bSBjZWxsJ3MgaGVpZ2h0IGFmdGVyIHdoaWNoIHRoZSBlZGl0b3IgZ29lcyBvdXQgb2YgdGhlIHRhYmxlIHZpZXdwb3J0XG4gICAqXG4gICAqIEByZXR1cm5zIHt7dG9wOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIG1heFdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBtYXhIZWlnaHQ6IG51bWJlcn0gfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRFZGl0ZWRDZWxsUmVjdCgpIHtcbiAgICB2YXIgX3d0T3ZlcmxheXMkZ2V0UGFyZW50O1xuICAgIGNvbnN0IFREID0gdGhpcy5nZXRFZGl0ZWRDZWxsKCk7XG5cbiAgICAvLyBURCBpcyBvdXRzaWRlIG9mIHRoZSB2aWV3cG9ydC5cbiAgICBpZiAoIVREKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHd0T3ZlcmxheXMsXG4gICAgICB3dFZpZXdwb3J0XG4gICAgfSA9IHRoaXMuaG90LnZpZXcuX3d0O1xuICAgIGNvbnN0IHJvb3RXaW5kb3cgPSB0aGlzLmhvdC5yb290V2luZG93O1xuICAgIGNvbnN0IGN1cnJlbnRPZmZzZXQgPSAoMCwgX2VsZW1lbnQub2Zmc2V0KShURCk7XG4gICAgY29uc3QgY2VsbFdpZHRoID0gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKFREKTtcbiAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSAoMCwgX2VsZW1lbnQub2Zmc2V0KSh0aGlzLmhvdC5yb290RWxlbWVudCk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5ob3Qucm9vdEVsZW1lbnQpO1xuICAgIGNvbnN0IHNjcm9sbGFibGVDb250YWluZXJUb3AgPSB3dE92ZXJsYXlzLnRvcE92ZXJsYXkuaG9sZGVyO1xuICAgIGNvbnN0IHNjcm9sbGFibGVDb250YWluZXJMZWZ0ID0gd3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyO1xuICAgIGNvbnN0IGNvbnRhaW5lclNjcm9sbFRvcCA9IHNjcm9sbGFibGVDb250YWluZXJUb3AgIT09IHJvb3RXaW5kb3cgPyBzY3JvbGxhYmxlQ29udGFpbmVyVG9wLnNjcm9sbFRvcCA6IDA7XG4gICAgY29uc3QgY29udGFpbmVyU2Nyb2xsTGVmdCA9IHNjcm9sbGFibGVDb250YWluZXJMZWZ0ICE9PSByb290V2luZG93ID8gc2Nyb2xsYWJsZUNvbnRhaW5lckxlZnQuc2Nyb2xsTGVmdCA6IDA7XG4gICAgY29uc3QgZ3JpZE1vc3RSaWdodFBvcyA9IHJvb3RXaW5kb3cuaW5uZXJXaWR0aCAtIGNvbnRhaW5lck9mZnNldC5sZWZ0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZTogb3ZlcmxheVRhYmxlXG4gICAgfSA9IChfd3RPdmVybGF5cyRnZXRQYXJlbnQgPSB3dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkoVEQpKSAhPT0gbnVsbCAmJiBfd3RPdmVybGF5cyRnZXRQYXJlbnQgIT09IHZvaWQgMCA/IF93dE92ZXJsYXlzJGdldFBhcmVudCA6IHRoaXMuaG90LnZpZXcuX3d0O1xuICAgIGNvbnN0IG92ZXJsYXlOYW1lID0gb3ZlcmxheVRhYmxlLm5hbWU7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gWydtYXN0ZXInLCAnaW5saW5lX3N0YXJ0J10uaW5jbHVkZXMob3ZlcmxheU5hbWUpID8gY29udGFpbmVyU2Nyb2xsVG9wIDogMDtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gWydtYXN0ZXInLCAndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKG92ZXJsYXlOYW1lKSA/IGNvbnRhaW5lclNjcm9sbExlZnQgOiAwO1xuXG4gICAgLy8gSWYgY29sSGVhZGVycyBpcyBkaXNhYmxlZCwgY2VsbHMgaW4gdGhlIGZpcnN0IHJvdyBoYXZlIGJvcmRlci10b3BcbiAgICBjb25zdCBlZGl0VG9wTW9kaWZpZXIgPSBjdXJyZW50T2Zmc2V0LnRvcCA9PT0gY29udGFpbmVyT2Zmc2V0LnRvcCA/IDAgOiAxO1xuICAgIGxldCB0b3BQb3MgPSBjdXJyZW50T2Zmc2V0LnRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgLSBlZGl0VG9wTW9kaWZpZXIgLSBzY3JvbGxUb3A7XG4gICAgbGV0IGlubGluZVN0YXJ0UG9zID0gMDtcbiAgICBpZiAodGhpcy5ob3QuaXNSdGwoKSkge1xuICAgICAgaW5saW5lU3RhcnRQb3MgPSByb290V2luZG93LmlubmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0LmxlZnQgLSBjZWxsV2lkdGggLSBncmlkTW9zdFJpZ2h0UG9zIC0gMSArIHNjcm9sbExlZnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlubGluZVN0YXJ0UG9zID0gY3VycmVudE9mZnNldC5sZWZ0IC0gY29udGFpbmVyT2Zmc2V0LmxlZnQgLSAxIC0gc2Nyb2xsTGVmdDtcbiAgICB9XG5cbiAgICAvLyBXaGVuIHRoZSBzY3JvbGxhYmxlIGVsZW1lbnQgaXMgV2luZG93IG9iamVjdCB0aGVuIHRoZSBlZGl0b3IgcG9zaXRpb24gbmVlZHMgdG8gYmUgY29tcGVuc2F0ZWRcbiAgICAvLyBieSB0aGUgb3ZlcmxheXMnIHBvc2l0aW9uIChwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgdGFibGUgdmlld3BvcnQpLiBJbiBvdGhlciBjYXNlcywgdGhlIG92ZXJsYXknc1xuICAgIC8vIHBvc2l0aW9uIGFsd2F5cyByZXR1cm5zIDAuXG4gICAgaWYgKFsndG9wJywgJ3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyJ10uaW5jbHVkZXMob3ZlcmxheU5hbWUpKSB7XG4gICAgICB0b3BQb3MgKz0gd3RPdmVybGF5cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTtcbiAgICB9XG4gICAgaWYgKFsnaW5saW5lX3N0YXJ0JywgJ3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyJ10uaW5jbHVkZXMob3ZlcmxheU5hbWUpKSB7XG4gICAgICBpbmxpbmVTdGFydFBvcyArPSBNYXRoLmFicyh3dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpO1xuICAgIH1cbiAgICBjb25zdCBoYXNDb2x1bW5IZWFkZXJzID0gdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpO1xuICAgIGNvbnN0IHJlbmRlcmFibGVSb3cgPSB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KTtcbiAgICBjb25zdCByZW5kZXJhYmxlQ29sdW1uID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCk7XG4gICAgY29uc3QgbnJPZlJlbmRlcmFibGVSb3dJbmRleGVzID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTtcbiAgICBjb25zdCBmaXJzdFJvd0luZGV4T2ZUaGVCb3R0b21PdmVybGF5ID0gbnJPZlJlbmRlcmFibGVSb3dJbmRleGVzIC0gdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJyk7XG4gICAgaWYgKGhhc0NvbHVtbkhlYWRlcnMgJiYgcmVuZGVyYWJsZVJvdyA8PSAwIHx8IHJlbmRlcmFibGVSb3cgPT09IGZpcnN0Um93SW5kZXhPZlRoZUJvdHRvbU92ZXJsYXkpIHtcbiAgICAgIHRvcFBvcyArPSAxO1xuICAgIH1cbiAgICBpZiAocmVuZGVyYWJsZUNvbHVtbiA8PSAwKSB7XG4gICAgICBpbmxpbmVTdGFydFBvcyArPSAxO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFJvd09mZnNldCA9IHd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbjtcbiAgICBjb25zdCBmaXJzdENvbHVtbk9mZnNldCA9IHd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbjtcbiAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsUG9zaXRpb24gPSBNYXRoLmFicyh3dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKTtcbiAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbFBvc2l0aW9uID0gd3RPdmVybGF5cy50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCk7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSAoMCwgX2VsZW1lbnQuZ2V0U2Nyb2xsYmFyV2lkdGgpKHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gICAgbGV0IGNlbGxUb3BPZmZzZXQgPSBURC5vZmZzZXRUb3A7XG4gICAgaWYgKFsnaW5saW5lX3N0YXJ0JywgJ21hc3RlciddLmluY2x1ZGVzKG92ZXJsYXlOYW1lKSkge1xuICAgICAgY2VsbFRvcE9mZnNldCArPSBmaXJzdFJvd09mZnNldCAtIHZlcnRpY2FsU2Nyb2xsUG9zaXRpb247XG4gICAgfVxuICAgIGlmIChbJ2JvdHRvbScsICdib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciddLmluY2x1ZGVzKG92ZXJsYXlOYW1lKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB3dFZpZXdwb3J0OiBib3R0b21XdFZpZXdwb3J0LFxuICAgICAgICB3dFRhYmxlOiBib3R0b21XdFRhYmxlXG4gICAgICB9ID0gd3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lO1xuICAgICAgY2VsbFRvcE9mZnNldCArPSBib3R0b21XdFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpIC0gYm90dG9tV3RUYWJsZS5nZXRIZWlnaHQoKSAtIHNjcm9sbGJhcldpZHRoO1xuICAgIH1cbiAgICBsZXQgY2VsbFN0YXJ0T2Zmc2V0ID0gVEQub2Zmc2V0TGVmdDtcbiAgICBpZiAodGhpcy5ob3QuaXNSdGwoKSkge1xuICAgICAgaWYgKGNlbGxTdGFydE9mZnNldCA+PSAwKSB7XG4gICAgICAgIGNlbGxTdGFydE9mZnNldCA9IG92ZXJsYXlUYWJsZS5nZXRXaWR0aCgpIC0gVEQub2Zmc2V0TGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZSBgb2Zmc2V0TGVmdGAgcmV0dXJucyBuZWdhdGl2ZSB2YWx1ZXMgd2hlbiB0aGUgcGFyZW50IG9mZnNldCBlbGVtZW50IGhhcyBwb3NpdGlvbiByZWxhdGl2ZVxuICAgICAgICAvLyAoaXQgaGFwcGVucyB3aGVuIG9uIHRoZSBjZWxsIHRoZSBzZWxlY3Rpb24gaXMgYXBwbGllZCAtIHRoZSBgYXJlYWAgQ1NTIGNsYXNzKS5cbiAgICAgICAgLy8gV2hlbiBpdCBoYXBwZW5zIHRoZSBgb2Zmc2V0TGVmdGAgdmFsdWUgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSByaWdodCBlZGdlIG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgY2VsbFN0YXJ0T2Zmc2V0ID0gTWF0aC5hYnMoY2VsbFN0YXJ0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIGNlbGxTdGFydE9mZnNldCArPSBmaXJzdENvbHVtbk9mZnNldCAtIGhvcml6b250YWxTY3JvbGxQb3NpdGlvbiAtIGNlbGxXaWR0aDtcbiAgICB9IGVsc2UgaWYgKFsndG9wJywgJ21hc3RlcicsICdib3R0b20nXS5pbmNsdWRlcyhvdmVybGF5TmFtZSkpIHtcbiAgICAgIGNlbGxTdGFydE9mZnNldCArPSBmaXJzdENvbHVtbk9mZnNldCAtIGhvcml6b250YWxTY3JvbGxQb3NpdGlvbjtcbiAgICB9XG4gICAgY29uc3QgY2VsbENvbXB1dGVkU3R5bGUgPSAoMCwgX2VsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSkodGhpcy5URCwgdGhpcy5ob3Qucm9vdFdpbmRvdyk7XG4gICAgY29uc3QgYm9yZGVyUGh5c2ljYWxXaWR0aFByb3AgPSB0aGlzLmhvdC5pc1J0bCgpID8gJ2JvcmRlclJpZ2h0V2lkdGgnIDogJ2JvcmRlckxlZnRXaWR0aCc7XG4gICAgY29uc3QgaW5saW5lU3RhcnRCb3JkZXJDb21wZW5zYXRpb24gPSBwYXJzZUludChjZWxsQ29tcHV0ZWRTdHlsZVtib3JkZXJQaHlzaWNhbFdpZHRoUHJvcF0sIDEwKSA+IDAgPyAwIDogMTtcbiAgICBjb25zdCB0b3BCb3JkZXJDb21wZW5zYXRpb24gPSBwYXJzZUludChjZWxsQ29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTApID4gMCA/IDAgOiAxO1xuICAgIGNvbnN0IHdpZHRoID0gKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKFREKSArIGlubGluZVN0YXJ0Qm9yZGVyQ29tcGVuc2F0aW9uO1xuICAgIGNvbnN0IGhlaWdodCA9ICgwLCBfZWxlbWVudC5vdXRlckhlaWdodCkoVEQpICsgdG9wQm9yZGVyQ29tcGVuc2F0aW9uO1xuICAgIGNvbnN0IGFjdHVhbFZlcnRpY2FsU2Nyb2xsYmFyV2lkdGggPSAoMCwgX2VsZW1lbnQuaGFzVmVydGljYWxTY3JvbGxiYXIpKHNjcm9sbGFibGVDb250YWluZXJUb3ApID8gc2Nyb2xsYmFyV2lkdGggOiAwO1xuICAgIGNvbnN0IGFjdHVhbEhvcml6b250YWxTY3JvbGxiYXJXaWR0aCA9ICgwLCBfZWxlbWVudC5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyKShzY3JvbGxhYmxlQ29udGFpbmVyTGVmdCkgPyBzY3JvbGxiYXJXaWR0aCA6IDA7XG4gICAgY29uc3QgbWF4V2lkdGggPSB0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGNlbGxTdGFydE9mZnNldCkgLSBhY3R1YWxWZXJ0aWNhbFNjcm9sbGJhcldpZHRoICsgaW5saW5lU3RhcnRCb3JkZXJDb21wZW5zYXRpb247XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoY2VsbFRvcE9mZnNldCkgLSBhY3R1YWxIb3Jpem9udGFsU2Nyb2xsYmFyV2lkdGggKyB0b3BCb3JkZXJDb21wZW5zYXRpb24sIDIzKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiB0b3BQb3MsXG4gICAgICBzdGFydDogaW5saW5lU3RhcnRQb3MsXG4gICAgICBoZWlnaHQsXG4gICAgICBtYXhIZWlnaHQsXG4gICAgICB3aWR0aCxcbiAgICAgIG1heFdpZHRoXG4gICAgfTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuICAvKipcbiAgICogR2V0cyBjbGFzc05hbWUgb2YgdGhlIGVkaXRlZCBjZWxsIGlmIGV4aXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCkge1xuICAgIGNvbnN0IGVkaXRvclNlY3Rpb24gPSB0aGlzLmNoZWNrRWRpdG9yU2VjdGlvbigpO1xuICAgIHN3aXRjaCAoZWRpdG9yU2VjdGlvbikge1xuICAgICAgY2FzZSAnaW5saW5lLXN0YXJ0JzpcbiAgICAgICAgcmV0dXJuICdodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCc7XG4gICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICByZXR1cm4gJ2h0X2Nsb25lX2JvdHRvbSc7XG4gICAgICBjYXNlICdib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lcic6XG4gICAgICAgIHJldHVybiAnaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyJztcbiAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgIHJldHVybiAnaHRfY2xvbmVfdG9wJztcbiAgICAgIGNhc2UgJ3RvcC1pbmxpbmUtc3RhcnQtY29ybmVyJzpcbiAgICAgICAgcmV0dXJuICdodF9jbG9uZV90b3BfbGVmdF9jb3JuZXIgaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXInO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdodF9jbG9uZV9tYXN0ZXInO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIEhUTUxUYWJsZUNlbGxFbGVtZW50IG9mIHRoZSBlZGl0ZWQgY2VsbCBpZiBleGlzdC5cbiAgICpcbiAgICogQHJldHVybnMge0hUTUxUYWJsZUNlbGxFbGVtZW50fG51bGx9XG4gICAqL1xuICBnZXRFZGl0ZWRDZWxsKCkge1xuICAgIHJldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LCB0aGlzLmNvbCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBuYW1lIG9mIHRoZSBvdmVybGF5LCB3aGVyZSBlZGl0b3IgaXMgcGxhY2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY2hlY2tFZGl0b3JTZWN0aW9uKCkge1xuICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMuaG90LmNvdW50Um93cygpO1xuICAgIGxldCBzZWN0aW9uID0gJyc7XG4gICAgaWYgKHRoaXMucm93IDwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3ApIHtcbiAgICAgIGlmICh0aGlzLmNvbCA8IHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpIHtcbiAgICAgICAgc2VjdGlvbiA9ICd0b3AtaW5saW5lLXN0YXJ0LWNvcm5lcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWN0aW9uID0gJ3RvcCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSAmJiB0aGlzLnJvdyA+PSB0b3RhbFJvd3MgLSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSkge1xuICAgICAgaWYgKHRoaXMuY29sIDwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkge1xuICAgICAgICBzZWN0aW9uID0gJ2JvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY3Rpb24gPSAnYm90dG9tJztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuY29sIDwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkge1xuICAgICAgc2VjdGlvbiA9ICdpbmxpbmUtc3RhcnQnO1xuICAgIH1cbiAgICByZXR1cm4gc2VjdGlvbjtcbiAgfVxufVxuZXhwb3J0cy5CYXNlRWRpdG9yID0gQmFzZUVkaXRvcjtcbigwLCBfb2JqZWN0Lm1peGluKShCYXNlRWRpdG9yLCBfaG9va3NSZWZSZWdpc3RlcmVyLmRlZmF1bHQpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9iYXNlRWRpdG9yID0gcmVxdWlyZShcIi4vYmFzZUVkaXRvclwiKTtcbmV4cG9ydHMuRURJVE9SX1NUQVRFID0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFO1xuZXhwb3J0cy5FRElUT1JfVFlQRSA9IF9iYXNlRWRpdG9yLkVESVRPUl9UWVBFO1xuZXhwb3J0cy5CYXNlRWRpdG9yID0gX2Jhc2VFZGl0b3IuQmFzZUVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYmFzZUVkaXRvciA9IHJlcXVpcmUoXCIuLi9iYXNlRWRpdG9yXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5jb25zdCBFRElUT1JfVFlQRSA9IGV4cG9ydHMuRURJVE9SX1RZUEUgPSAnY2hlY2tib3gnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgQ2hlY2tib3hFZGl0b3JcbiAqL1xuY2xhc3MgQ2hlY2tib3hFZGl0b3IgZXh0ZW5kcyBfYmFzZUVkaXRvci5CYXNlRWRpdG9yIHtcbiAgc3RhdGljIGdldCBFRElUT1JfVFlQRSgpIHtcbiAgICByZXR1cm4gRURJVE9SX1RZUEU7XG4gIH1cbiAgYmVnaW5FZGl0aW5nKGluaXRpYWxWYWx1ZSwgZXZlbnQpIHtcbiAgICAvLyBKdXN0IHNvbWUgZXZlbnRzIGNvbm5lY3RlZCB3aXRoIHRoZSBjaGVja2JveCBlZGl0b3IgYXJlIGRlbGVnYXRlZCBoZXJlLiBTb21lIGBrZXlkb3duYCBldmVudHMgbGlrZSBgZW50ZXJgIGFuZFxuICAgIC8vIGBzcGFjZWAga2V5IHByZXNzZXMgYXJlIGhhbmRsZWQgaW5zaWRlIGBjaGVja2JveFJlbmRlcmVyYC4gU29tZSBldmVudHMgY29tZSBoZXJlIGZyb20gYGVkaXRvck1hbmFnZXJgLiBUaGUgYmVsb3dcbiAgICAvLyBgaWZgIHN0YXRlbWVudCB3YXMgY3JlYXRlZCBieSB0aGUgYXV0aG9yIGZvciB0aGUgcHVycG9zZSBvZiBoYW5kbGluZyBvbmx5IHRoZSBgZG91YmxlY2xpY2tgIGV2ZW50IG9uIHRoZSBURFxuICAgIC8vIGVsZW1lbnQgd2l0aCBhIGNoZWNrYm94LlxuXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZXVwJyAmJiBldmVudC50YXJnZXQubm9kZU5hbWUgPT09ICdURCcpIHtcbiAgICAgIGNvbnN0IGNoZWNrYm94ID0gdGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgIGlmICghKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShjaGVja2JveCwgJ2h0QmFkVmFsdWUnKSkge1xuICAgICAgICBjaGVja2JveC5jbGljaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmaW5pc2hFZGl0aW5nKCkge31cbiAgaW5pdCgpIHt9XG4gIG9wZW4oKSB7fVxuICBjbG9zZSgpIHt9XG4gIGdldFZhbHVlKCkge31cbiAgc2V0VmFsdWUoKSB7fVxuICBmb2N1cygpIHt9XG59XG5leHBvcnRzLkNoZWNrYm94RWRpdG9yID0gQ2hlY2tib3hFZGl0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2NoZWNrYm94RWRpdG9yID0gcmVxdWlyZShcIi4vY2hlY2tib3hFZGl0b3JcIik7XG5leHBvcnRzLkVESVRPUl9UWVBFID0gX2NoZWNrYm94RWRpdG9yLkVESVRPUl9UWVBFO1xuZXhwb3J0cy5DaGVja2JveEVkaXRvciA9IF9jaGVja2JveEVkaXRvci5DaGVja2JveEVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgX3Bpa2FkYXkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAaGFuZHNvbnRhYmxlL3Bpa2FkYXlcIikpO1xudmFyIF9iYXNlRWRpdG9yID0gcmVxdWlyZShcIi4uL2Jhc2VFZGl0b3JcIik7XG52YXIgX3RleHRFZGl0b3IgPSByZXF1aXJlKFwiLi4vdGV4dEVkaXRvclwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3VuaWNvZGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy91bmljb2RlXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgRURJVE9SX1RZUEUgPSBleHBvcnRzLkVESVRPUl9UWVBFID0gJ2RhdGUnO1xuY29uc3QgU0hPUlRDVVRTX0dST1VQX0VESVRPUiA9ICdkYXRlRWRpdG9yJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIERhdGVFZGl0b3JcbiAqL1xuY2xhc3MgRGF0ZUVkaXRvciBleHRlbmRzIF90ZXh0RWRpdG9yLlRleHRFZGl0b3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvcHRpb24gdG8gZ2VuZXJhbCBzZXR0aW5nc1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGVmYXVsdERhdGVGb3JtYXRcIiwgJ0REL01NL1lZWVknKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwYXJlbnREZXN0cm95ZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtQaWthZGF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIiRkYXRlUGlja2VyXCIsIG51bGwpO1xuICB9XG4gIHN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKSB7XG4gICAgcmV0dXJuIEVESVRPUl9UWVBFO1xuICB9XG4gIGluaXQoKSB7XG4gICAgaWYgKHR5cGVvZiBfbW9tZW50LmRlZmF1bHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gaW5jbHVkZSBtb21lbnQuanMgdG8geW91ciBwcm9qZWN0LicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIF9waWthZGF5LmRlZmF1bHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gaW5jbHVkZSBQaWthZGF5IHRvIHlvdXIgcHJvamVjdC4nKTtcbiAgICB9XG4gICAgc3VwZXIuaW5pdCgpO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyRGVzdHJveScsICgpID0+IHtcbiAgICAgIHRoaXMucGFyZW50RGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGVzdHJveUVsZW1lbnRzKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGRhdGEgcGlja2VyIGluc3RhbmNlLlxuICAgKi9cbiAgY3JlYXRlRWxlbWVudHMoKSB7XG4gICAgc3VwZXIuY3JlYXRlRWxlbWVudHMoKTtcbiAgICB0aGlzLmRhdGVQaWNrZXIgPSB0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgdGhpcy5kYXRlUGlja2VyU3R5bGUgPSB0aGlzLmRhdGVQaWNrZXIuc3R5bGU7XG4gICAgdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcCA9IDA7XG4gICAgdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdCA9IDA7XG4gICAgdGhpcy5kYXRlUGlja2VyU3R5bGUuekluZGV4ID0gOTk5OTtcbiAgICB0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCdkaXInLCB0aGlzLmhvdC5pc1J0bCgpID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLmRhdGVQaWNrZXIsICdodERhdGVwaWNrZXJIb2xkZXInKTtcbiAgICB0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmRhdGVQaWNrZXIpO1xuXG4gICAgLyoqXG4gICAgICogUHJldmVudCByZWNvZ25pemluZyBjbGlja2luZyBvbiBkYXRlcGlja2VyIGFzIGNsaWNraW5nIG91dHNpZGUgb2YgdGFibGUuXG4gICAgICovXG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQaWNrZXIsICdtb3VzZWRvd24nLCBldmVudCA9PiB7XG4gICAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICdwaWthLWRheScpKSB7XG4gICAgICAgIHRoaXMuaGlkZURhdGVwaWNrZXIoKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgZGF0YSBwaWNrZXIgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95RWxlbWVudHMoKSB7XG4gICAgY29uc3QgZGF0ZVBpY2tlclBhcmVudEVsZW1lbnQgPSB0aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTtcbiAgICBpZiAodGhpcy4kZGF0ZVBpY2tlcikge1xuICAgICAgdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIGlmIChkYXRlUGlja2VyUGFyZW50RWxlbWVudCkge1xuICAgICAgZGF0ZVBpY2tlclBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5kYXRlUGlja2VyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZSBlZGl0b3IgdG8gYXBwZWFyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gdGQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gICAqL1xuICBwcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gICAgc3VwZXIucHJlcGFyZShyb3csIGNvbCwgcHJvcCwgdGQsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBlZGl0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IFtldmVudD1udWxsXSBUaGUgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb3BlbigpIHtcbiAgICBsZXQgZXZlbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdlZGl0b3InKTtcbiAgICB0aGlzLnNob3dEYXRlcGlja2VyKGV2ZW50KTtcbiAgICBzdXBlci5vcGVuKCk7XG4gICAgZWRpdG9yQ29udGV4dC5hZGRTaG9ydGN1dHMoW3tcbiAgICAgIGtleXM6IFtbJ0Fycm93TGVmdCddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgnc3VidHJhY3QnLCAxKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydBcnJvd1JpZ2h0J11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCdhZGQnLCAxKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydBcnJvd1VwJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCdzdWJ0cmFjdCcsIDcpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleXM6IFtbJ0Fycm93RG93biddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgnYWRkJywgNyk7XG4gICAgICB9XG4gICAgfV0sIHtcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBfRURJVE9SXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgZWRpdG9yLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgdmFyIF90aGlzJCRkYXRlUGlja2VyO1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuXG4gICAgLy8gSWYgdGhlIGRhdGUgcGlja2VyIHdhcyBuZXZlciBpbml0aWFsaXplZCAoZS5nLiBkdXJpbmcgYXV0b2ZpbGwpLCB0aGVyZSdzIG5vdGhpbmcgdG8gZGVzdHJveS5cbiAgICBpZiAoKF90aGlzJCRkYXRlUGlja2VyID0gdGhpcy4kZGF0ZVBpY2tlcikgIT09IG51bGwgJiYgX3RoaXMkJGRhdGVQaWNrZXIgIT09IHZvaWQgMCAmJiBfdGhpcyQkZGF0ZVBpY2tlci5kZXN0cm95KSB7XG4gICAgICB0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3JNYW5hZ2VyID0gdGhpcy5ob3QuX2dldEVkaXRvck1hbmFnZXIoKTtcbiAgICAgIGVkaXRvck1hbmFnZXIuY2xvc2VFZGl0b3IoKTtcbiAgICAgIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7XG4gICAgICBlZGl0b3JNYW5hZ2VyLnByZXBhcmVFZGl0b3IoKTtcbiAgICB9KTtcbiAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZXh0ID0gc2hvcnRjdXRNYW5hZ2VyLmdldENvbnRleHQoJ2VkaXRvcicpO1xuICAgIGVkaXRvckNvbnRleHQucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTSE9SVENVVFNfR1JPVVBfRURJVE9SKTtcbiAgICBzdXBlci5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmlzaGVzIGVkaXRpbmcgYW5kIHN0YXJ0IHNhdmluZyBvciByZXN0b3JpbmcgcHJvY2VzcyBmb3IgZWRpdGluZyBjZWxsIG9yIGxhc3Qgc2VsZWN0ZWQgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzdG9yZU9yaWdpbmFsVmFsdWUgSWYgdHJ1ZSwgdGhlbiBjbG9zZXMgZWRpdG9yIHdpdGhvdXQgc2F2aW5nIHZhbHVlIGZyb20gdGhlIGVkaXRvciBpbnRvIGEgY2VsbC5cbiAgICogQHBhcmFtIHtib29sZWFufSBjdHJsRG93biBJZiB0cnVlLCB0aGVuIHNhdmVWYWx1ZSB3aWxsIHNhdmUgZWRpdG9yJ3MgdmFsdWUgdG8gZWFjaCBjZWxsIGluIHRoZSBsYXN0IHNlbGVjdGVkIHJhbmdlLlxuICAgKi9cbiAgZmluaXNoRWRpdGluZygpIHtcbiAgICBsZXQgcmVzdG9yZU9yaWdpbmFsVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGxldCBjdHJsRG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgc3VwZXIuZmluaXNoRWRpdGluZyhyZXN0b3JlT3JpZ2luYWxWYWx1ZSwgY3RybERvd24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgZGF0YSBwaWNrZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG4gICAqL1xuICBzaG93RGF0ZXBpY2tlcihldmVudCkge1xuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXQgfHwgdGhpcy5kZWZhdWx0RGF0ZUZvcm1hdDtcbiAgICBjb25zdCBpc01vdXNlRG93biA9IHRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKTtcbiAgICBjb25zdCBpc01ldGEgPSBldmVudCA/ICgwLCBfdW5pY29kZS5pc0Z1bmN0aW9uS2V5KShldmVudC5rZXlDb2RlKSA6IGZhbHNlO1xuICAgIGxldCBkYXRlU3RyO1xuICAgIHRoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLiRkYXRlUGlja2VyID0gbmV3IF9waWthZGF5LmRlZmF1bHQodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpO1xuICAgIGlmICh0eXBlb2YgdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuJGRhdGVQaWNrZXIudXNlTW9tZW50KF9tb21lbnQuZGVmYXVsdCk7XG4gICAgfVxuICAgIHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uICgpIHt9O1xuICAgIGlmICh0aGlzLm9yaWdpbmFsVmFsdWUpIHtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLm9yaWdpbmFsVmFsdWU7XG4gICAgICBpZiAoKDAsIF9tb21lbnQuZGVmYXVsdCkoZGF0ZVN0ciwgZGF0ZUZvcm1hdCwgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgIHRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KCgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGVTdHIsIGRhdGVGb3JtYXQpLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgZGF0ZS90aW1lIGNlbGxzIC0gcGlrYWRheSByZXNldHMgdGhlIGNlbGwgdmFsdWUgdG8gMTI6MDAgQU0gYnkgZGVmYXVsdCwgdGhpcyB3aWxsIG92ZXJ3cml0ZSB0aGUgdmFsdWUuXG4gICAgICBpZiAodGhpcy5nZXRWYWx1ZSgpICE9PSB0aGlzLm9yaWdpbmFsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc01ldGEgJiYgIWlzTW91c2VEb3duKSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUoJycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZSkge1xuICAgICAgZGF0ZVN0ciA9IHRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGU7XG4gICAgICBpZiAoKDAsIF9tb21lbnQuZGVmYXVsdCkoZGF0ZVN0ciwgZGF0ZUZvcm1hdCwgdHJ1ZSkuaXNWYWxpZCgpKSB7XG4gICAgICAgIHRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KCgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGVTdHIsIGRhdGVGb3JtYXQpLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNNZXRhICYmICFpc01vdXNlRG93bikge1xuICAgICAgICB0aGlzLnNldFZhbHVlKCcnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgYSBkZWZhdWx0IGRhdGUgaXMgbm90IGRlZmluZWQsIHNldCBhIHNvZnQtZGVmYXVsdC1kYXRlOiBkaXNwbGF5IHRoZSBjdXJyZW50IGRheSBhbmQgbW9udGggaW4gdGhlXG4gICAgICAvLyBkYXRlcGlja2VyLCBidXQgZG9uJ3QgZmlsbCB0aGUgZWRpdG9yIGlucHV0XG4gICAgICB0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIGRhdGEgcGlja2VyLlxuICAgKi9cbiAgaGlkZURhdGVwaWNrZXIoKSB7XG4gICAgdGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB0aGlzLiRkYXRlUGlja2VyLmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0ZSBwaWNrZXIgb3B0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldERhdGVQaWNrZXJDb25maWcoKSB7XG4gICAgY29uc3QgaHRJbnB1dCA9IHRoaXMuVEVYVEFSRUE7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgIGlmICh0aGlzLmNlbGxQcm9wZXJ0aWVzICYmIHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZykge1xuICAgICAgKDAsIF9vYmplY3QuZGVlcEV4dGVuZCkob3B0aW9ucywgdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnKTtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ09uU2VsZWN0ID0gb3B0aW9ucy5vblNlbGVjdDtcbiAgICBjb25zdCBvcmlnT25DbG9zZSA9IG9wdGlvbnMub25DbG9zZTtcbiAgICBvcHRpb25zLmZpZWxkID0gaHRJbnB1dDtcbiAgICBvcHRpb25zLnRyaWdnZXIgPSBodElucHV0O1xuICAgIG9wdGlvbnMuY29udGFpbmVyID0gdGhpcy5kYXRlUGlja2VyO1xuICAgIG9wdGlvbnMuYm91bmQgPSBmYWxzZTtcbiAgICBvcHRpb25zLmtleWJvYXJkSW5wdXQgPSBmYWxzZTtcbiAgICBvcHRpb25zLmZvcm1hdCA9IG9wdGlvbnMuZm9ybWF0IHx8IHRoaXMuZGVmYXVsdERhdGVGb3JtYXQ7XG4gICAgb3B0aW9ucy5yZXBvc2l0aW9uID0gb3B0aW9ucy5yZXBvc2l0aW9uIHx8IGZhbHNlO1xuICAgIC8vIFNldCB0aGUgUlRMIHRvIGBmYWxzZWAuIER1ZSB0byB0aGUgaHR0cHM6Ly9naXRodWIuY29tL1Bpa2FkYXkvUGlrYWRheS9pc3N1ZXMvNjQ3IGJ1ZywgdGhlIGxheW91dCBkaXJlY3Rpb25cbiAgICAvLyBvZiB0aGUgZGF0ZSBwaWNrZXIgaXMgY29udHJvbGxlZCBieSBqdWdnbGluZyB0aGUgXCJkaXJcIiBhdHRyaWJ1dGUgb2YgdGhlIHJvb3QgZGF0ZSBwaWNrZXIgZWxlbWVudC5cbiAgICAvLyBTZWUgbGluZSBANjQgb2YgdGhpcyBmaWxlLlxuICAgIG9wdGlvbnMuaXNSVEwgPSBmYWxzZTtcbiAgICBvcHRpb25zLm9uU2VsZWN0ID0gdmFsdWUgPT4ge1xuICAgICAgbGV0IGRhdGVTdHIgPSB2YWx1ZTtcbiAgICAgIGlmICghaXNOYU4oZGF0ZVN0ci5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGVTdHIgPSAoMCwgX21vbWVudC5kZWZhdWx0KShkYXRlU3RyKS5mb3JtYXQodGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0IHx8IHRoaXMuZGVmYXVsdERhdGVGb3JtYXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRWYWx1ZShkYXRlU3RyKTtcbiAgICAgIGlmIChvcmlnT25TZWxlY3QpIHtcbiAgICAgICAgb3JpZ09uU2VsZWN0KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBvcHRpb25zLm9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucGFyZW50RGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuZmluaXNoRWRpdGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgICBpZiAob3JpZ09uQ2xvc2UpIHtcbiAgICAgICAgb3JpZ09uQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBkYXRlcGlja2VyJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uIFRoZSBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlIEluZGljYXRlcyBpZiB0aGUgcmVmcmVzaGluZyBlZGl0b3IgZGltZW5zaW9ucyBzaG91bGQgYmUgdHJpZ2dlcmVkLlxuICAgKi9cbiAgcmVmcmVzaERpbWVuc2lvbnMoZm9yY2UpIHtcbiAgICB2YXIgX3d0T3ZlcmxheXMkZ2V0UGFyZW50O1xuICAgIHN1cGVyLnJlZnJlc2hEaW1lbnNpb25zKGZvcmNlKTtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFLkVESVRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5URCA9IHRoaXMuZ2V0RWRpdGVkQ2VsbCgpO1xuICAgIGlmICghdGhpcy5URCkge1xuICAgICAgdGhpcy5oaWRlRGF0ZXBpY2tlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICByb3dJbmRleE1hcHBlcixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIHd0T3ZlcmxheXNcbiAgICB9ID0gdGhpcy5ob3Qudmlldy5fd3Q7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSAoX3d0T3ZlcmxheXMkZ2V0UGFyZW50ID0gd3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KHRoaXMuVEQpKSAhPT0gbnVsbCAmJiBfd3RPdmVybGF5cyRnZXRQYXJlbnQgIT09IHZvaWQgMCA/IF93dE92ZXJsYXlzJGdldFBhcmVudCA6IHRoaXMuaG90LnZpZXcuX3d0O1xuICAgIGNvbnN0IGZpcnN0VmlzaWJsZVJvdyA9IHJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgod3RUYWJsZS5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSk7XG4gICAgY29uc3QgbGFzdFZpc2libGVSb3cgPSByb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlQ29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh3dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtcbiAgICBjb25zdCBsYXN0VmlzaWJsZUNvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgod3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKTtcbiAgICBpZiAodGhpcy5yb3cgPj0gZmlyc3RWaXNpYmxlUm93ICYmIHRoaXMucm93IDw9IGxhc3RWaXNpYmxlUm93ICYmIHRoaXMuY29sID49IGZpcnN0VmlzaWJsZUNvbHVtbiAmJiB0aGlzLmNvbCA8PSBsYXN0VmlzaWJsZUNvbHVtbikge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5URC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcCA9IGAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQgKyBvZmZzZXQudG9wICsgKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0aGlzLlREKX1weGA7XG4gICAgICBsZXQgcGlja2VyTGVmdFBvc2l0aW9uID0gdGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldDtcbiAgICAgIGlmICh0aGlzLmhvdC5pc1J0bCgpKSB7XG4gICAgICAgIHBpY2tlckxlZnRQb3NpdGlvbiArPSBvZmZzZXQucmlnaHQgLSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkodGhpcy5kYXRlUGlja2VyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpY2tlckxlZnRQb3NpdGlvbiArPSBvZmZzZXQubGVmdDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQgPSBgJHtwaWNrZXJMZWZ0UG9zaXRpb259cHhgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhpZGVEYXRlcGlja2VyKCk7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkRhdGVFZGl0b3IgPSBEYXRlRWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9kYXRlRWRpdG9yID0gcmVxdWlyZShcIi4vZGF0ZUVkaXRvclwiKTtcbmV4cG9ydHMuRURJVE9SX1RZUEUgPSBfZGF0ZUVkaXRvci5FRElUT1JfVFlQRTtcbmV4cG9ydHMuRGF0ZUVkaXRvciA9IF9kYXRlRWRpdG9yLkRhdGVFZGl0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2F1dG9jb21wbGV0ZUVkaXRvciA9IHJlcXVpcmUoXCIuLi9hdXRvY29tcGxldGVFZGl0b3JcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IEVESVRPUl9UWVBFID0gZXhwb3J0cy5FRElUT1JfVFlQRSA9ICdkcm9wZG93bic7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBEcm9wZG93bkVkaXRvclxuICovXG5jbGFzcyBEcm9wZG93bkVkaXRvciBleHRlbmRzIF9hdXRvY29tcGxldGVFZGl0b3IuQXV0b2NvbXBsZXRlRWRpdG9yIHtcbiAgc3RhdGljIGdldCBFRElUT1JfVFlQRSgpIHtcbiAgICByZXR1cm4gRURJVE9SX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkgKHBhc3NlZCB3aGVuIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cykuXG4gICAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IHRkIFRoZSByZW5kZXJlZCBjZWxsIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIGNlbGwgbWV0YSBvYmplY3QgKHNlZSB7QGxpbmsgQ29yZSNnZXRDZWxsTWV0YX0pLlxuICAgKi9cbiAgcHJlcGFyZShyb3csIGNvbCwgcHJvcCwgdGQsIHZhbHVlLCBjZWxsUHJvcGVydGllcykge1xuICAgIHN1cGVyLnByZXBhcmUocm93LCBjb2wsIHByb3AsIHRkLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgIHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyID0gZmFsc2U7XG4gICAgdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QgPSB0cnVlO1xuICB9XG59XG5leHBvcnRzLkRyb3Bkb3duRWRpdG9yID0gRHJvcGRvd25FZGl0b3I7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5hZGQoJ2JlZm9yZVZhbGlkYXRlJywgZnVuY3Rpb24gKHZhbHVlLCByb3csIGNvbCkge1xuICBjb25zdCB2aXN1YWxDb2x1bW5JbmRleCA9IHRoaXMucHJvcFRvQ29sKGNvbCk7XG4gIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZpc3VhbENvbHVtbkluZGV4KSkge1xuICAgIGNvbnN0IGNlbGxNZXRhID0gdGhpcy5nZXRDZWxsTWV0YShyb3csIHZpc3VhbENvbHVtbkluZGV4KTtcbiAgICBpZiAoY2VsbE1ldGEuZWRpdG9yID09PSBEcm9wZG93bkVkaXRvcikge1xuICAgICAgaWYgKGNlbGxNZXRhLnN0cmljdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNlbGxNZXRhLmZpbHRlciA9IGZhbHNlO1xuICAgICAgICBjZWxsTWV0YS5zdHJpY3QgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Ryb3Bkb3duRWRpdG9yID0gcmVxdWlyZShcIi4vZHJvcGRvd25FZGl0b3JcIik7XG5leHBvcnRzLkVESVRPUl9UWVBFID0gX2Ryb3Bkb3duRWRpdG9yLkVESVRPUl9UWVBFO1xuZXhwb3J0cy5Ecm9wZG93bkVkaXRvciA9IF9kcm9wZG93bkVkaXRvci5Ecm9wZG93bkVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdGV4dEVkaXRvciA9IHJlcXVpcmUoXCIuLi90ZXh0RWRpdG9yXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3Nob3J0Y3V0Q29udGV4dHMgPSByZXF1aXJlKFwiLi4vLi4vc2hvcnRjdXRDb250ZXh0c1wiKTtcbmNvbnN0IFNIT1JUQ1VUU19HUk9VUCA9ICdoYW5kc29udGFibGVFZGl0b3InO1xuY29uc3QgRURJVE9SX1RZUEUgPSBleHBvcnRzLkVESVRPUl9UWVBFID0gJ2hhbmRzb250YWJsZSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBIYW5kc29udGFibGVFZGl0b3JcbiAqL1xuY2xhc3MgSGFuZHNvbnRhYmxlRWRpdG9yIGV4dGVuZHMgX3RleHRFZGl0b3IuVGV4dEVkaXRvciB7XG4gIHN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKSB7XG4gICAgcmV0dXJuIEVESVRPUl9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBlZGl0b3IgYW5kIGFkanVzdCBpdHMgc2l6ZS5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgc3VwZXIub3BlbigpO1xuICAgIGlmICh0aGlzLmh0RWRpdG9yKSB7XG4gICAgICB0aGlzLmh0RWRpdG9yLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaHRDb250YWluZXIuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aGlzLmh0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3RzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBIYW5kc29udGFibGUgaW5zdGFuY2VcbiAgICB0aGlzLmh0RWRpdG9yID0gbmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuaHRDb250YWluZXIsIHRoaXMuaHRPcHRpb25zKTtcbiAgICB0aGlzLmh0RWRpdG9yLmluaXQoKTtcbiAgICB0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICBpZiAodGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QpIHtcbiAgICAgIHRoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKTtcbiAgICB9XG4gICAgKDAsIF9lbGVtZW50LnNldENhcmV0UG9zaXRpb24pKHRoaXMuVEVYVEFSRUEsIDAsIHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBlZGl0b3IuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5odEVkaXRvcikge1xuICAgICAgdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUhvb2tzQnlLZXkoJ2JlZm9yZUtleURvd24nKTtcbiAgICBzdXBlci5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGVkaXRvcidzIG1ldGEgZGF0YSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgaW50ZXJuYWwgSGFuZHNvbnRhYmxlJ3MgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSB0ZCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAgICovXG4gIHByZXBhcmUocm93LCBjb2wsIHByb3AsIHRkLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgICBzdXBlci5wcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBzdGFydFJvd3M6IDAsXG4gICAgICBzdGFydENvbHM6IDAsXG4gICAgICBtaW5Sb3dzOiAwLFxuICAgICAgbWluQ29sczogMCxcbiAgICAgIGNsYXNzTmFtZTogJ2xpc3Rib3gnLFxuICAgICAgY29weVBhc3RlOiBmYWxzZSxcbiAgICAgIGF1dG9Db2x1bW5TaXplOiBmYWxzZSxcbiAgICAgIGF1dG9Sb3dTaXplOiBmYWxzZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgZmlsbEhhbmRsZTogZmFsc2UsXG4gICAgICBhdXRvV3JhcENvbDogZmFsc2UsXG4gICAgICBhdXRvV3JhcFJvdzogZmFsc2UsXG4gICAgICBhcmlhVGFnczogZmFsc2UsXG4gICAgICBhZnRlck9uQ2VsbE1vdXNlRG93bihfLCBjb29yZHMpIHtcbiAgICAgICAgY29uc3Qgc291cmNlVmFsdWUgPSB0aGlzLmdldFNvdXJjZURhdGEoY29vcmRzLnJvdywgY29vcmRzLmNvbCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCB0aGVuIGl0IG1lYW5zIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZVxuICAgICAgICBpZiAoc291cmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmVudC5zZXRWYWx1ZShzb3VyY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LmhvdC5kZXN0cm95RWRpdG9yKCk7XG4gICAgICB9LFxuICAgICAgcHJldmVudFdoZWVsOiB0cnVlLFxuICAgICAgbGF5b3V0RGlyZWN0aW9uOiB0aGlzLmhvdC5pc1J0bCgpID8gJ3J0bCcgOiAnbHRyJ1xuICAgIH07XG4gICAgaWYgKHRoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlKSB7XG4gICAgICAoMCwgX29iamVjdC5leHRlbmQpKG9wdGlvbnMsIGNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSk7XG4gICAgfVxuICAgIHRoaXMuaHRPcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgZWRpdGluZyBvbiBhIGhpZ2hsaWdodGVkIGNlbGwgYW5kIGhpZGVzIGZpbGxIYW5kbGUgY29ybmVyIGlmIHdhcyBwcmVzZW50LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG5ld0luaXRpYWxWYWx1ZSBUaGUgZWRpdG9yIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7Kn0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIGJlZ2luRWRpdGluZyhuZXdJbml0aWFsVmFsdWUsIGV2ZW50KSB7XG4gICAgY29uc3Qgb25CZWdpbkVkaXRpbmcgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO1xuICAgIGlmIChvbkJlZ2luRWRpdGluZyAmJiBvbkJlZ2luRWRpdGluZygpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5iZWdpbkVkaXRpbmcobmV3SW5pdGlhbFZhbHVlLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlZGl0b3IncyBlbGVtZW50cyBhbmQgYWRkcyBuZWNlc3NhcnkgQ1NTIGNsYXNzbmFtZXMuXG4gICAqL1xuICBjcmVhdGVFbGVtZW50cygpIHtcbiAgICBzdXBlci5jcmVhdGVFbGVtZW50cygpO1xuICAgIGNvbnN0IERJViA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICBESVYuY2xhc3NOYW1lID0gJ2hhbmRzb250YWJsZUVkaXRvcic7XG4gICAgdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQoRElWKTtcbiAgICB0aGlzLmh0Q29udGFpbmVyID0gRElWO1xuICAgIHRoaXMuYXNzaWduSG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2hlcyBlZGl0aW5nIGFuZCBzdGFydCBzYXZpbmcgb3IgcmVzdG9yaW5nIHByb2Nlc3MgZm9yIGVkaXRpbmcgY2VsbCBvciBsYXN0IHNlbGVjdGVkIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlc3RvcmVPcmlnaW5hbFZhbHVlIElmIHRydWUsIHRoZW4gY2xvc2VzIGVkaXRvciB3aXRob3V0IHNhdmluZyB2YWx1ZSBmcm9tIHRoZSBlZGl0b3IgaW50byBhIGNlbGwuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gY3RybERvd24gSWYgdHJ1ZSwgdGhlbiBzYXZlVmFsdWUgd2lsbCBzYXZlIGVkaXRvcidzIHZhbHVlIHRvIGVhY2ggY2VsbCBpbiB0aGUgbGFzdCBzZWxlY3RlZCByYW5nZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCBmaXJlZCBhZnRlciBlZGl0b3IgY2xvc2luZy5cbiAgICovXG4gIGZpbmlzaEVkaXRpbmcocmVzdG9yZU9yaWdpbmFsVmFsdWUsIGN0cmxEb3duLCBjYWxsYmFjaykge1xuICAgIGlmICh0aGlzLmh0RWRpdG9yICYmIHRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmcoKSkge1xuICAgICAgLy8gaWYgZm9jdXMgaXMgc3RpbGwgaW4gdGhlIEhPVCBlZGl0b3JcbiAgICAgIHRoaXMuaG90Lmxpc3RlbigpOyAvLyByZXR1cm4gdGhlIGZvY3VzIHRvIHRoZSBwYXJlbnQgSE9UIGluc3RhbmNlXG4gICAgfVxuICAgIGlmICh0aGlzLmh0RWRpdG9yICYmIHRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCB0aGVuIGl0IG1lYW5zIHdlIGRvbid0IHdhbnQgdG8gc2V0IHRoZSB2YWx1ZVxuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIuZmluaXNoRWRpdGluZyhyZXN0b3JlT3JpZ2luYWxWYWx1ZSwgY3RybERvd24sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25zIGFmdGVyRGVzdHJveSBjYWxsYmFjayB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFzc2lnbkhvb2tzKCkge1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyRGVzdHJveScsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmh0RWRpdG9yKSB7XG4gICAgICAgIHRoaXMuaHRFZGl0b3IuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZWRpdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdlZGl0b3InKTtcbiAgICBzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIGNvbnN0IGNvbnRleHRDb25maWcgPSB7XG4gICAgICBncm91cDogU0hPUlRDVVRTX0dST1VQLFxuICAgICAgcmVsYXRpdmVUb0dyb3VwOiBfc2hvcnRjdXRDb250ZXh0cy5FRElUT1JfRURJVF9HUk9VUCxcbiAgICAgIHBvc2l0aW9uOiAnYmVmb3JlJ1xuICAgIH07XG4gICAgY29uc3QgYWN0aW9uID0gKHJvd1RvU2VsZWN0LCBldmVudCkgPT4ge1xuICAgICAgY29uc3QgaW5uZXJIT1QgPSB0aGlzLmh0RWRpdG9yO1xuICAgICAgaWYgKHJvd1RvU2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHJvd1RvU2VsZWN0IDwgMCB8fCBpbm5lckhPVC5mbGlwcGVkICYmIHJvd1RvU2VsZWN0ID4gaW5uZXJIT1QuY291bnRSb3dzKCkgLSAxKSB7XG4gICAgICAgICAgaW5uZXJIT1QuZGVzZWxlY3RDZWxsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5uZXJIT1Quc2VsZWN0Q2VsbChyb3dUb1NlbGVjdCwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlubmVySE9ULmdldERhdGEoKS5sZW5ndGgpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gICAgICAgICAgdGhpcy5ob3QubGlzdGVuKCk7XG4gICAgICAgICAgdGhpcy5URVhUQVJFQS5mb2N1cygpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgZWRpdG9yQ29udGV4dC5hZGRTaG9ydGN1dHMoW3tcbiAgICAgIGtleXM6IFtbJ0Fycm93VXAnXV0sXG4gICAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBpbm5lckhPVCA9IHRoaXMuaHRFZGl0b3I7XG4gICAgICAgIGxldCByb3dUb1NlbGVjdDtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93O1xuICAgICAgICBpZiAoIWlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpICYmIGlubmVySE9ULmZsaXBwZWQpIHtcbiAgICAgICAgICByb3dUb1NlbGVjdCA9IGlubmVySE9ULmNvdW50Um93cygpIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChpbm5lckhPVC5nZXRTZWxlY3RlZExhc3QoKSkge1xuICAgICAgICAgIGlmIChpbm5lckhPVC5mbGlwcGVkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvdyA9IGlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpWzBdO1xuICAgICAgICAgICAgcm93VG9TZWxlY3QgPSBNYXRoLm1heCgwLCBzZWxlY3RlZFJvdyAtIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvdyA9IGlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpWzBdO1xuICAgICAgICAgICAgcm93VG9TZWxlY3QgPSBzZWxlY3RlZFJvdyAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb24ocm93VG9TZWxlY3QsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UgLy8gRG9lc24ndCBibG9jayBkZWZhdWx0IGJlaGF2aW91ciAobmF2aWdhdGlvbikgZm9yIGEgYHRleHRBcmVhYCBIVE1MRWxlbWVudC5cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydBcnJvd0Rvd24nXV0sXG4gICAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBpbm5lckhPVCA9IHRoaXMuaHRFZGl0b3I7XG4gICAgICAgIGxldCByb3dUb1NlbGVjdDtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93O1xuICAgICAgICBpZiAoIWlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpICYmICFpbm5lckhPVC5mbGlwcGVkKSB7XG4gICAgICAgICAgcm93VG9TZWxlY3QgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpKSB7XG4gICAgICAgICAgaWYgKGlubmVySE9ULmZsaXBwZWQpIHtcbiAgICAgICAgICAgIHJvd1RvU2VsZWN0ID0gaW5uZXJIT1QuZ2V0U2VsZWN0ZWRMYXN0KClbMF0gKyAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWlubmVySE9ULmZsaXBwZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSb3cgPSBpbm5lckhPVC5jb3VudFJvd3MoKSAtIDE7XG4gICAgICAgICAgICBzZWxlY3RlZFJvdyA9IGlubmVySE9ULmdldFNlbGVjdGVkTGFzdCgpWzBdO1xuICAgICAgICAgICAgcm93VG9TZWxlY3QgPSBNYXRoLm1pbihsYXN0Um93LCBzZWxlY3RlZFJvdyArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWN0aW9uKHJvd1RvU2VsZWN0LCBldmVudCk7XG4gICAgICB9LFxuICAgICAgcHJldmVudERlZmF1bHQ6IGZhbHNlIC8vIERvZXNuJ3QgYmxvY2sgZGVmYXVsdCBiZWhhdmlvdXIgKG5hdmlnYXRpb24pIGZvciBhIGB0ZXh0QXJlYWAgSFRNTEVsZW1lbnQuXG4gICAgfV0sIGNvbnRleHRDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgc2hvcnRjdXRzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBlZGl0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIHN1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZXh0ID0gc2hvcnRjdXRNYW5hZ2VyLmdldENvbnRleHQoJ2VkaXRvcicpO1xuICAgIGVkaXRvckNvbnRleHQucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTSE9SVENVVFNfR1JPVVApO1xuICB9XG59XG5leHBvcnRzLkhhbmRzb250YWJsZUVkaXRvciA9IEhhbmRzb250YWJsZUVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfaGFuZHNvbnRhYmxlRWRpdG9yID0gcmVxdWlyZShcIi4vaGFuZHNvbnRhYmxlRWRpdG9yXCIpO1xuZXhwb3J0cy5FRElUT1JfVFlQRSA9IF9oYW5kc29udGFibGVFZGl0b3IuRURJVE9SX1RZUEU7XG5leHBvcnRzLkhhbmRzb250YWJsZUVkaXRvciA9IF9oYW5kc29udGFibGVFZGl0b3IuSGFuZHNvbnRhYmxlRWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yZWdpc3RlckFsbEVkaXRvcnMgPSByZWdpc3RlckFsbEVkaXRvcnM7XG52YXIgX2F1dG9jb21wbGV0ZUVkaXRvciA9IHJlcXVpcmUoXCIuL2F1dG9jb21wbGV0ZUVkaXRvclwiKTtcbmV4cG9ydHMuQXV0b2NvbXBsZXRlRWRpdG9yID0gX2F1dG9jb21wbGV0ZUVkaXRvci5BdXRvY29tcGxldGVFZGl0b3I7XG5leHBvcnRzLkFVVE9DT01QTEVURV9FRElUT1IgPSBfYXV0b2NvbXBsZXRlRWRpdG9yLkVESVRPUl9UWVBFO1xudmFyIF9iYXNlRWRpdG9yID0gcmVxdWlyZShcIi4vYmFzZUVkaXRvclwiKTtcbmV4cG9ydHMuQmFzZUVkaXRvciA9IF9iYXNlRWRpdG9yLkJhc2VFZGl0b3I7XG5leHBvcnRzLkJBU0VfRURJVE9SID0gX2Jhc2VFZGl0b3IuRURJVE9SX1RZUEU7XG52YXIgX2NoZWNrYm94RWRpdG9yID0gcmVxdWlyZShcIi4vY2hlY2tib3hFZGl0b3JcIik7XG5leHBvcnRzLkNoZWNrYm94RWRpdG9yID0gX2NoZWNrYm94RWRpdG9yLkNoZWNrYm94RWRpdG9yO1xuZXhwb3J0cy5DSEVDS0JPWF9FRElUT1IgPSBfY2hlY2tib3hFZGl0b3IuRURJVE9SX1RZUEU7XG52YXIgX2RhdGVFZGl0b3IgPSByZXF1aXJlKFwiLi9kYXRlRWRpdG9yXCIpO1xuZXhwb3J0cy5EYXRlRWRpdG9yID0gX2RhdGVFZGl0b3IuRGF0ZUVkaXRvcjtcbmV4cG9ydHMuREFURV9FRElUT1IgPSBfZGF0ZUVkaXRvci5FRElUT1JfVFlQRTtcbnZhciBfZHJvcGRvd25FZGl0b3IgPSByZXF1aXJlKFwiLi9kcm9wZG93bkVkaXRvclwiKTtcbmV4cG9ydHMuRHJvcGRvd25FZGl0b3IgPSBfZHJvcGRvd25FZGl0b3IuRHJvcGRvd25FZGl0b3I7XG5leHBvcnRzLkRST1BET1dOX0VESVRPUiA9IF9kcm9wZG93bkVkaXRvci5FRElUT1JfVFlQRTtcbnZhciBfaGFuZHNvbnRhYmxlRWRpdG9yID0gcmVxdWlyZShcIi4vaGFuZHNvbnRhYmxlRWRpdG9yXCIpO1xuZXhwb3J0cy5IYW5kc29udGFibGVFZGl0b3IgPSBfaGFuZHNvbnRhYmxlRWRpdG9yLkhhbmRzb250YWJsZUVkaXRvcjtcbmV4cG9ydHMuSEFORFNPTlRBQkxFX0VESVRPUiA9IF9oYW5kc29udGFibGVFZGl0b3IuRURJVE9SX1RZUEU7XG52YXIgX251bWVyaWNFZGl0b3IgPSByZXF1aXJlKFwiLi9udW1lcmljRWRpdG9yXCIpO1xuZXhwb3J0cy5OdW1lcmljRWRpdG9yID0gX251bWVyaWNFZGl0b3IuTnVtZXJpY0VkaXRvcjtcbmV4cG9ydHMuTlVNRVJJQ19FRElUT1IgPSBfbnVtZXJpY0VkaXRvci5FRElUT1JfVFlQRTtcbnZhciBfcGFzc3dvcmRFZGl0b3IgPSByZXF1aXJlKFwiLi9wYXNzd29yZEVkaXRvclwiKTtcbmV4cG9ydHMuUGFzc3dvcmRFZGl0b3IgPSBfcGFzc3dvcmRFZGl0b3IuUGFzc3dvcmRFZGl0b3I7XG5leHBvcnRzLlBBU1NXT1JEX0VESVRPUiA9IF9wYXNzd29yZEVkaXRvci5FRElUT1JfVFlQRTtcbnZhciBfc2VsZWN0RWRpdG9yID0gcmVxdWlyZShcIi4vc2VsZWN0RWRpdG9yXCIpO1xuZXhwb3J0cy5TZWxlY3RFZGl0b3IgPSBfc2VsZWN0RWRpdG9yLlNlbGVjdEVkaXRvcjtcbmV4cG9ydHMuU0VMRUNUX0VESVRPUiA9IF9zZWxlY3RFZGl0b3IuRURJVE9SX1RZUEU7XG52YXIgX3RleHRFZGl0b3IgPSByZXF1aXJlKFwiLi90ZXh0RWRpdG9yXCIpO1xuZXhwb3J0cy5UZXh0RWRpdG9yID0gX3RleHRFZGl0b3IuVGV4dEVkaXRvcjtcbmV4cG9ydHMuVEVYVF9FRElUT1IgPSBfdGV4dEVkaXRvci5FRElUT1JfVFlQRTtcbnZhciBfdGltZUVkaXRvciA9IHJlcXVpcmUoXCIuL3RpbWVFZGl0b3JcIik7XG5leHBvcnRzLlRpbWVFZGl0b3IgPSBfdGltZUVkaXRvci5UaW1lRWRpdG9yO1xuZXhwb3J0cy5USU1FX0VESVRPUiA9IF90aW1lRWRpdG9yLkVESVRPUl9UWVBFO1xudmFyIF9yZWdpc3RyeSA9IHJlcXVpcmUoXCIuL3JlZ2lzdHJ5XCIpO1xuZXhwb3J0cy5yZWdpc3RlckVkaXRvciA9IF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcjtcbmV4cG9ydHMuUmVnaXN0ZXJlZEVkaXRvciA9IF9yZWdpc3RyeS5SZWdpc3RlcmVkRWRpdG9yO1xuZXhwb3J0cy5fZ2V0RWRpdG9ySW5zdGFuY2UgPSBfcmVnaXN0cnkuX2dldEVkaXRvckluc3RhbmNlO1xuZXhwb3J0cy5nZXRFZGl0b3IgPSBfcmVnaXN0cnkuZ2V0RWRpdG9yO1xuZXhwb3J0cy5nZXRFZGl0b3JJbnN0YW5jZSA9IF9yZWdpc3RyeS5nZXRFZGl0b3JJbnN0YW5jZTtcbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZEVkaXRvck5hbWVzID0gX3JlZ2lzdHJ5LmdldFJlZ2lzdGVyZWRFZGl0b3JOYW1lcztcbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZEVkaXRvcnMgPSBfcmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZEVkaXRvcnM7XG5leHBvcnRzLmhhc0VkaXRvciA9IF9yZWdpc3RyeS5oYXNFZGl0b3I7XG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgYXZhaWxhYmxlIGVkaXRvcnMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQWxsRWRpdG9ycygpIHtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcikoX2Jhc2VFZGl0b3IuQmFzZUVkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF9hdXRvY29tcGxldGVFZGl0b3IuQXV0b2NvbXBsZXRlRWRpdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcikoX2NoZWNrYm94RWRpdG9yLkNoZWNrYm94RWRpdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcikoX2RhdGVFZGl0b3IuRGF0ZUVkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF9kcm9wZG93bkVkaXRvci5Ecm9wZG93bkVkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF9oYW5kc29udGFibGVFZGl0b3IuSGFuZHNvbnRhYmxlRWRpdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcikoX251bWVyaWNFZGl0b3IuTnVtZXJpY0VkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF9wYXNzd29yZEVkaXRvci5QYXNzd29yZEVkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF9zZWxlY3RFZGl0b3IuU2VsZWN0RWRpdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlckVkaXRvcikoX3RleHRFZGl0b3IuVGV4dEVkaXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJFZGl0b3IpKF90aW1lRWRpdG9yLlRpbWVFZGl0b3IpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9udW1lcmljRWRpdG9yID0gcmVxdWlyZShcIi4vbnVtZXJpY0VkaXRvclwiKTtcbmV4cG9ydHMuRURJVE9SX1RZUEUgPSBfbnVtZXJpY0VkaXRvci5FRElUT1JfVFlQRTtcbmV4cG9ydHMuTnVtZXJpY0VkaXRvciA9IF9udW1lcmljRWRpdG9yLk51bWVyaWNFZGl0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RleHRFZGl0b3IgPSByZXF1aXJlKFwiLi4vdGV4dEVkaXRvclwiKTtcbmNvbnN0IEVESVRPUl9UWVBFID0gZXhwb3J0cy5FRElUT1JfVFlQRSA9ICdudW1lcmljJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIE51bWVyaWNFZGl0b3JcbiAqL1xuY2xhc3MgTnVtZXJpY0VkaXRvciBleHRlbmRzIF90ZXh0RWRpdG9yLlRleHRFZGl0b3Ige1xuICBzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCkge1xuICAgIHJldHVybiBFRElUT1JfVFlQRTtcbiAgfVxufVxuZXhwb3J0cy5OdW1lcmljRWRpdG9yID0gTnVtZXJpY0VkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfcGFzc3dvcmRFZGl0b3IgPSByZXF1aXJlKFwiLi9wYXNzd29yZEVkaXRvclwiKTtcbmV4cG9ydHMuRURJVE9SX1RZUEUgPSBfcGFzc3dvcmRFZGl0b3IuRURJVE9SX1RZUEU7XG5leHBvcnRzLlBhc3N3b3JkRWRpdG9yID0gX3Bhc3N3b3JkRWRpdG9yLlBhc3N3b3JkRWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF90ZXh0RWRpdG9yID0gcmVxdWlyZShcIi4uL3RleHRFZGl0b3JcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5jb25zdCBFRElUT1JfVFlQRSA9IGV4cG9ydHMuRURJVE9SX1RZUEUgPSAncGFzc3dvcmQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgUGFzc3dvcmRFZGl0b3JcbiAqL1xuY2xhc3MgUGFzc3dvcmRFZGl0b3IgZXh0ZW5kcyBfdGV4dEVkaXRvci5UZXh0RWRpdG9yIHtcbiAgc3RhdGljIGdldCBFRElUT1JfVFlQRSgpIHtcbiAgICByZXR1cm4gRURJVE9SX1RZUEU7XG4gIH1cbiAgY3JlYXRlRWxlbWVudHMoKSB7XG4gICAgc3VwZXIuY3JlYXRlRWxlbWVudHMoKTtcbiAgICB0aGlzLlRFWFRBUkVBID0gdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAncGFzc3dvcmQnKTtcbiAgICB0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgnZGF0YS1ob3QtaW5wdXQnLCAnJyk7IC8vIE1ha2VzIHRoZSBlbGVtZW50IHJlY29nbml6YWJsZSBieSBIb3QgYXMgaXRzIG93biBjb21wb25lbnQncyBlbGVtZW50LlxuICAgIHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lID0gJ2hhbmRzb250YWJsZUlucHV0JztcbiAgICB0aGlzLnRleHRhcmVhU3R5bGUgPSB0aGlzLlRFWFRBUkVBLnN0eWxlO1xuICAgIHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aCA9IDA7XG4gICAgdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIFsoMCwgX2ExMXkuQTExWV9ISURERU4pKCldKTtcbiAgICB9XG4gICAgKDAsIF9lbGVtZW50LmVtcHR5KSh0aGlzLlRFWFRBUkVBX1BBUkVOVCk7XG4gICAgdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSk7XG4gIH1cbn1cbmV4cG9ydHMuUGFzc3dvcmRFZGl0b3IgPSBQYXNzd29yZEVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuUmVnaXN0ZXJlZEVkaXRvciA9IFJlZ2lzdGVyZWRFZGl0b3I7XG5leHBvcnRzLmdldEVkaXRvckluc3RhbmNlID0gZXhwb3J0cy5fZ2V0RWRpdG9ySW5zdGFuY2UgPSBfZ2V0RWRpdG9ySW5zdGFuY2U7XG5leHBvcnRzLmdldEVkaXRvciA9IF9nZXRJdGVtO1xuZXhwb3J0cy5yZWdpc3RlckVkaXRvciA9IF9yZWdpc3RlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9zdGF0aWNSZWdpc3RlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3V0aWxzL3N0YXRpY1JlZ2lzdGVyXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFV0aWxpdHkgdG8gcmVnaXN0ZXIgZWRpdG9ycyBhbmQgY29tbW9uIG5hbWVzcGFjZSBmb3Iga2VlcGluZyByZWZlcmVuY2UgdG8gYWxsIGVkaXRvciBjbGFzc2VzLlxuICovXG5cbmNvbnN0IHJlZ2lzdGVyZWRFZGl0b3JDbGFzc2VzID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHtcbiAgcmVnaXN0ZXIsXG4gIGdldEl0ZW0sXG4gIGhhc0l0ZW0sXG4gIGdldE5hbWVzLFxuICBnZXRWYWx1ZXNcbn0gPSAoMCwgX3N0YXRpY1JlZ2lzdGVyLmRlZmF1bHQpKCdlZGl0b3JzJyk7XG5cbi8qKlxuICogQHBhcmFtIHtCYXNlRWRpdG9yfSBlZGl0b3JDbGFzcyBUaGUgZWRpdG9yIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnRzLmdldFJlZ2lzdGVyZWRFZGl0b3JzID0gZ2V0VmFsdWVzO1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkRWRpdG9yTmFtZXMgPSBnZXROYW1lcztcbmV4cG9ydHMuaGFzRWRpdG9yID0gaGFzSXRlbTtcbmZ1bmN0aW9uIFJlZ2lzdGVyZWRFZGl0b3IoZWRpdG9yQ2xhc3MpIHtcbiAgY29uc3QgaW5zdGFuY2VzID0ge307XG4gIGNvbnN0IENsYXp6ID0gZWRpdG9yQ2xhc3M7XG4gIHRoaXMuZ2V0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGVkaXRvckNsYXNzO1xuICB9O1xuICB0aGlzLmdldEluc3RhbmNlID0gZnVuY3Rpb24gKGhvdEluc3RhbmNlKSB7XG4gICAgaWYgKCEoaG90SW5zdGFuY2UuZ3VpZCBpbiBpbnN0YW5jZXMpKSB7XG4gICAgICBpbnN0YW5jZXNbaG90SW5zdGFuY2UuZ3VpZF0gPSBuZXcgQ2xhenooaG90SW5zdGFuY2UpO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2VzW2hvdEluc3RhbmNlLmd1aWRdO1xuICB9O1xuICBfcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5hZGQoJ2FmdGVyRGVzdHJveScsIGZ1bmN0aW9uICgpIHtcbiAgICBpbnN0YW5jZXNbdGhpcy5ndWlkXSA9IG51bGw7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgaW5zdGFuY2UgKHNpbmdsZXRvbikgb2YgZWRpdG9yIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgYW4gZWRpdG9yIHVuZGVyIHdoaWNoIGl0IGhhcyBiZWVuIHN0b3JlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBob3RJbnN0YW5jZSBJbnN0YW5jZSBvZiBIYW5kc29udGFibGUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgaW5zdGFuY2Ugb2YgZWRpdG9yLlxuICovXG5mdW5jdGlvbiBfZ2V0RWRpdG9ySW5zdGFuY2UobmFtZSwgaG90SW5zdGFuY2UpIHtcbiAgbGV0IGVkaXRvcjtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKCFyZWdpc3RlcmVkRWRpdG9yQ2xhc3Nlcy5nZXQobmFtZSkpIHtcbiAgICAgIF9yZWdpc3RlcihudWxsLCBuYW1lKTtcbiAgICB9XG4gICAgZWRpdG9yID0gcmVnaXN0ZXJlZEVkaXRvckNsYXNzZXMuZ2V0KG5hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVkaXRvciA9IGdldEl0ZW0obmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgXCJlZGl0b3JcIiBwYXJhbWV0ZXInKTtcbiAgfVxuICBpZiAoIWVkaXRvcikge1xuICAgIHRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lIFwiJHtuYW1lfVwiYCk7XG4gIH1cbiAgcmV0dXJuIGVkaXRvci5nZXRJbnN0YW5jZShob3RJbnN0YW5jZSk7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZWRpdG9yIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEVkaXRvciBpZGVudGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBlZGl0b3IgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIF9nZXRJdGVtKG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cbiAgaWYgKCFoYXNJdGVtKG5hbWUpKSB7XG4gICAgdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyIFwiJHtuYW1lfVwiIG5hbWVgKTtcbiAgfVxuICByZXR1cm4gZ2V0SXRlbShuYW1lKS5nZXRDb25zdHJ1Y3RvcigpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIGVkaXRvciBjbGFzcyB1bmRlciBzcGVjaWZpZWQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBFZGl0b3IgaWRlbnRpZmljYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlZGl0b3JDbGFzcyBFZGl0b3IgY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIF9yZWdpc3RlcihuYW1lLCBlZGl0b3JDbGFzcykge1xuICBpZiAobmFtZSAmJiB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBlZGl0b3JDbGFzcyA9IG5hbWU7XG4gICAgbmFtZSA9IGVkaXRvckNsYXNzLkVESVRPUl9UWVBFO1xuICB9XG4gIGNvbnN0IGVkaXRvcldyYXBwZXIgPSBuZXcgUmVnaXN0ZXJlZEVkaXRvcihlZGl0b3JDbGFzcyk7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZWdpc3RlcihuYW1lLCBlZGl0b3JXcmFwcGVyKTtcbiAgfVxuICByZWdpc3RlcmVkRWRpdG9yQ2xhc3Nlcy5zZXQoZWRpdG9yQ2xhc3MsIGVkaXRvcldyYXBwZXIpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9zZWxlY3RFZGl0b3IgPSByZXF1aXJlKFwiLi9zZWxlY3RFZGl0b3JcIik7XG5leHBvcnRzLkVESVRPUl9UWVBFID0gX3NlbGVjdEVkaXRvci5FRElUT1JfVFlQRTtcbmV4cG9ydHMuU2VsZWN0RWRpdG9yID0gX3NlbGVjdEVkaXRvci5TZWxlY3RFZGl0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Jhc2VFZGl0b3IgPSByZXF1aXJlKFwiLi4vYmFzZUVkaXRvclwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG5jb25zdCBFRElUT1JfVklTSUJMRV9DTEFTU19OQU1FID0gJ2h0X2VkaXRvcl92aXNpYmxlJztcbmNvbnN0IFNIT1JUQ1VUU19HUk9VUCA9ICdzZWxlY3RFZGl0b3InO1xuY29uc3QgRURJVE9SX1RZUEUgPSBleHBvcnRzLkVESVRPUl9UWVBFID0gJ3NlbGVjdCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBTZWxlY3RFZGl0b3JcbiAqL1xuY2xhc3MgU2VsZWN0RWRpdG9yIGV4dGVuZHMgX2Jhc2VFZGl0b3IuQmFzZUVkaXRvciB7XG4gIHN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKSB7XG4gICAgcmV0dXJuIEVESVRPUl9UWVBFO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIGVkaXRvciBpbnN0YW5jZSwgRE9NIEVsZW1lbnQgYW5kIG1vdW50IGhvb2tzLlxuICAgKi9cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICB0aGlzLnNlbGVjdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaG90LWlucHV0JywgJ3RydWUnKTtcbiAgICB0aGlzLnNlbGVjdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5zZWxlY3QsICdodFNlbGVjdEVkaXRvcicpO1xuICAgIHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KTtcbiAgICB0aGlzLnJlZ2lzdGVySG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHNlbGVjdCdzIHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHZhbHVlIGluIHRoZSBzZWxlY3QgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBBIG5ldyBzZWxlY3QncyB2YWx1ZS5cbiAgICovXG4gIHNldFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5zZWxlY3QudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZWRpdG9yIGFuZCBhZGp1c3QgaXRzIHNpemUuXG4gICAqL1xuICBvcGVuKCkge1xuICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBzaG9ydGN1dE1hbmFnZXIuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2VkaXRvcicpO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGVkaXRvci5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykodGhpcy5zZWxlY3QsIEVESVRPUl9WSVNJQkxFX0NMQVNTX05BTUUpKSB7XG4gICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuc2VsZWN0LCBFRElUT1JfVklTSUJMRV9DTEFTU19OQU1FKTtcbiAgICB9XG4gICAgdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gICAgdGhpcy5jbGVhckhvb2tzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmb2N1cyBzdGF0ZSBvbiB0aGUgc2VsZWN0IGVsZW1lbnQuXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICB0aGlzLnNlbGVjdC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIGhvb2tzIHRvIHJlZnJlc2ggZWRpdG9yJ3Mgc2l6ZSBhZnRlciBzY3JvbGxpbmcgb2YgdGhlIHZpZXdwb3J0IG9yIHJlc2l6aW5nIG9mIGNvbHVtbnMvcm93cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVySG9va3MoKSB7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNjcm9sbEhvcml6b250YWxseScsICgpID0+IHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNjcm9sbFZlcnRpY2FsbHknLCAoKSA9PiB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDb2x1bW5SZXNpemUnLCAoKSA9PiB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSb3dSZXNpemUnLCAoKSA9PiB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGVkaXRvcidzIG1ldGEgZGF0YSBhbmQgYSBsaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gdGQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gICAqL1xuICBwcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gICAgc3VwZXIucHJlcGFyZShyb3csIGNvbCwgcHJvcCwgdGQsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IHRoaXMuY2VsbFByb3BlcnRpZXMuc2VsZWN0T3B0aW9ucztcbiAgICBsZXQgb3B0aW9ucztcbiAgICBpZiAodHlwZW9mIHNlbGVjdE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnByZXBhcmVPcHRpb25zKHNlbGVjdE9wdGlvbnModGhpcy5yb3csIHRoaXMuY29sLCB0aGlzLnByb3ApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9ucyA9IHRoaXMucHJlcGFyZU9wdGlvbnMoc2VsZWN0T3B0aW9ucyk7XG4gICAgfVxuICAgICgwLCBfZWxlbWVudC5lbXB0eSkodGhpcy5zZWxlY3QpO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKG9wdGlvbnMsIChvcHRpb25WYWx1ZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ09QVElPTicpO1xuICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IGtleTtcbiAgICAgICgwLCBfZWxlbWVudC5mYXN0SW5uZXJIVE1MKShvcHRpb25FbGVtZW50LCBvcHRpb25WYWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGNvbnNpc3RlbnQgbGlzdCBvZiBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheXxvYmplY3R9IG9wdGlvbnNUb1ByZXBhcmUgVGhlIGxpc3Qgb2YgdGhlIHZhbHVlcyB0byByZW5kZXIgaW4gdGhlIHNlbGVjdCBlbGVlbW50LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgcHJlcGFyZU9wdGlvbnMob3B0aW9uc1RvUHJlcGFyZSkge1xuICAgIGxldCBwcmVwYXJlZE9wdGlvbnMgPSB7fTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zVG9QcmVwYXJlKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9wdGlvbnNUb1ByZXBhcmUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgcHJlcGFyZWRPcHRpb25zW29wdGlvbnNUb1ByZXBhcmVbaV1dID0gb3B0aW9uc1RvUHJlcGFyZVtpXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zVG9QcmVwYXJlID09PSAnb2JqZWN0Jykge1xuICAgICAgcHJlcGFyZWRPcHRpb25zID0gb3B0aW9uc1RvUHJlcGFyZTtcbiAgICB9XG4gICAgcmV0dXJuIHByZXBhcmVkT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgZWRpdG9yJ3MgdmFsdWUgdXNpbmcgc291cmNlIGRhdGEuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoVmFsdWUoKSB7XG4gICAgY29uc3Qgc291cmNlRGF0YSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csIHRoaXMucHJvcCk7XG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gc291cmNlRGF0YTtcbiAgICB0aGlzLnNldFZhbHVlKHNvdXJjZURhdGEpO1xuICAgIHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgZWRpdG9yJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoRGltZW5zaW9ucygpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFLkVESVRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5URCA9IHRoaXMuZ2V0RWRpdGVkQ2VsbCgpO1xuXG4gICAgLy8gVEQgaXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgaWYgKCF0aGlzLlREKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHRvcCxcbiAgICAgIHN0YXJ0LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gdGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO1xuICAgIGNvbnN0IHNlbGVjdFN0eWxlID0gdGhpcy5zZWxlY3Quc3R5bGU7XG4gICAgc2VsZWN0U3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICBzZWxlY3RTdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBzZWxlY3RTdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIHNlbGVjdFN0eWxlW3RoaXMuaG90LmlzUnRsKCkgPyAncmlnaHQnIDogJ2xlZnQnXSA9IGAke3N0YXJ0fXB4YDtcbiAgICBzZWxlY3RTdHlsZS5tYXJnaW4gPSAnMHB4JztcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuc2VsZWN0LCBFRElUT1JfVklTSUJMRV9DTEFTU19OQU1FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGVkaXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIGNvbnN0IHNob3J0Y3V0TWFuYWdlciA9IHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpO1xuICAgIGNvbnN0IGVkaXRvckNvbnRleHQgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0Q29udGV4dCgnZWRpdG9yJyk7XG4gICAgY29uc3QgY29udGV4dENvbmZpZyA9IHtcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9O1xuICAgIGlmICh0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSkge1xuICAgICAgLy8gVGhlIGFycm93LXJlbGF0ZWQgc2hvcnRjdXRzIHNob3VsZCB3b3JrIG9ubHkgaW4gZnVsbCBlZGl0IG1vZGUuXG4gICAgICBlZGl0b3JDb250ZXh0LmFkZFNob3J0Y3V0cyhbe1xuICAgICAgICBrZXlzOiBbWydBcnJvd1VwJ11dLFxuICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzT3B0aW9uSW5kZXggPSB0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4IC0gMTtcbiAgICAgICAgICBpZiAocHJldmlvdXNPcHRpb25JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFtwcmV2aW91c09wdGlvbkluZGV4XS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIGtleXM6IFtbJ0Fycm93RG93biddXSxcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0T3B0aW9uSW5kZXggPSB0aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4ICsgMTtcbiAgICAgICAgICBpZiAobmV4dE9wdGlvbkluZGV4IDw9IHRoaXMuc2VsZWN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0W25leHRPcHRpb25JbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfV0sIGNvbnRleHRDb25maWcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZWRpdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5yZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBjb25zdCBlZGl0b3JDb250ZXh0ID0gc2hvcnRjdXRNYW5hZ2VyLmdldENvbnRleHQoJ2VkaXRvcicpO1xuICAgIGVkaXRvckNvbnRleHQucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTSE9SVENVVFNfR1JPVVApO1xuICB9XG59XG5leHBvcnRzLlNlbGVjdEVkaXRvciA9IFNlbGVjdEVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudXBkYXRlQ2FyZXRQb3NpdGlvbiA9IHVwZGF0ZUNhcmV0UG9zaXRpb247XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbi8qKlxuICogVXBkYXRlcyB0aGUgdGV4dGFyZWEgY2FyZXQgcG9zaXRpb24gZGVwZW5kcyBvbiB0aGUgYWN0aW9uIGV4ZWN1dGVkIG9uIHRoYXQgZWxlbWVudC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGFjdGlvbnMgYXJlIHN1cHBvcnRlZDpcbiAqICAtICdob21lJzogTW92ZSB0aGUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBsaW5lO1xuICogIC0gJ2VuZCc6IE1vdmUgdGhlIGNhcmV0IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS5cbiAqXG4gKiBAcGFyYW0geydob21lJ3wnZW5kJ30gYWN0aW9uTmFtZSBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gdGhhdCBtb2RpZmllcyB0aGUgY2FyZXQgYmVoYXZpb3IuXG4gKiBAcGFyYW0ge0hUTUxUZXh0QXJlYUVsZW1lbnR9IHRleHRhcmVhRWxlbWVudCBUaGUgdGV4dGFyZWEgZWxlbWVudCB3aGVyZSB0aGUgYWN0aW9uIGlzIHN1cHBvc2VkIHRvIGhhcHBlbi5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlQ2FyZXRQb3NpdGlvbihhY3Rpb25OYW1lLCB0ZXh0YXJlYUVsZW1lbnQpIHtcbiAgY29uc3QgY2FyZXRQb3NpdGlvbiA9ICgwLCBfZWxlbWVudC5nZXRDYXJldFBvc2l0aW9uKSh0ZXh0YXJlYUVsZW1lbnQpO1xuICBjb25zdCB0ZXh0TGluZXMgPSB0ZXh0YXJlYUVsZW1lbnQudmFsdWUuc3BsaXQoJ1xcbicpO1xuICBsZXQgbmV3Q2FyZXRQb3NpdGlvbiA9IGNhcmV0UG9zaXRpb247XG4gIGxldCBsaW5lU3RhcnRJbmRleCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dExpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdGV4dExpbmUgPSB0ZXh0TGluZXNbaV07XG4gICAgaWYgKGkgIT09IDApIHtcbiAgICAgIGxpbmVTdGFydEluZGV4ICs9IHRleHRMaW5lc1tpIC0gMV0ubGVuZ3RoICsgMTtcbiAgICB9XG4gICAgY29uc3QgbGluZUVuZEluZGV4ID0gbGluZVN0YXJ0SW5kZXggKyB0ZXh0TGluZS5sZW5ndGg7XG4gICAgaWYgKGFjdGlvbk5hbWUgPT09ICdob21lJykge1xuICAgICAgbmV3Q2FyZXRQb3NpdGlvbiA9IGxpbmVTdGFydEluZGV4O1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uTmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgIG5ld0NhcmV0UG9zaXRpb24gPSBsaW5lRW5kSW5kZXg7XG4gICAgfVxuICAgIGlmIChjYXJldFBvc2l0aW9uIDw9IGxpbmVFbmRJbmRleCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gICgwLCBfZWxlbWVudC5zZXRDYXJldFBvc2l0aW9uKSh0ZXh0YXJlYUVsZW1lbnQsIG5ld0NhcmV0UG9zaXRpb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF90ZXh0RWRpdG9yID0gcmVxdWlyZShcIi4vdGV4dEVkaXRvclwiKTtcbmV4cG9ydHMuRURJVE9SX1RZUEUgPSBfdGV4dEVkaXRvci5FRElUT1JfVFlQRTtcbmV4cG9ydHMuVGV4dEVkaXRvciA9IF90ZXh0RWRpdG9yLlRleHRFZGl0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9iYXNlRWRpdG9yID0gcmVxdWlyZShcIi4uL2Jhc2VFZGl0b3JcIik7XG52YXIgX2V2ZW50TWFuYWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL2V2ZW50TWFuYWdlclwiKSk7XG52YXIgX2Jyb3dzZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9icm93c2VyXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbnZhciBfYXV0b1Jlc2l6ZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hdXRvUmVzaXplXCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9jYXJldFBvc2l0aW9uZXIgPSByZXF1aXJlKFwiLi9jYXJldFBvc2l0aW9uZXJcIik7XG52YXIgX2ExMXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hMTF5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgRURJVE9SX1ZJU0lCTEVfQ0xBU1NfTkFNRSA9ICdodF9lZGl0b3JfdmlzaWJsZSc7XG5jb25zdCBFRElUT1JfSElEREVOX0NMQVNTX05BTUUgPSAnaHRfZWRpdG9yX2hpZGRlbic7XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSAndGV4dEVkaXRvcic7XG5jb25zdCBFRElUT1JfVFlQRSA9IGV4cG9ydHMuRURJVE9SX1RZUEUgPSAndGV4dCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBUZXh0RWRpdG9yXG4gKi9cbmNsYXNzIFRleHRFZGl0b3IgZXh0ZW5kcyBfYmFzZUVkaXRvci5CYXNlRWRpdG9yIHtcbiAgc3RhdGljIGdldCBFRElUT1JfVFlQRSgpIHtcbiAgICByZXR1cm4gRURJVE9SX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIEV2ZW50TWFuYWdlcn0uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtFdmVudE1hbmFnZXJ9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSkge1xuICAgIHN1cGVyKGhvdEluc3RhbmNlKTtcbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJldmVudE1hbmFnZXJcIiwgbmV3IF9ldmVudE1hbmFnZXIuZGVmYXVsdCh0aGlzKSk7XG4gICAgLyoqXG4gICAgICogQXV0b3Jlc2l6ZSBpbnN0YW5jZS4gQXV0b21hZ2ljYWxseSByZXNpemVzIGVkaXRvciBhZnRlciBjaGFuZ2VzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYXV0b1Jlc2l6ZVwiLCAoMCwgX2F1dG9SZXNpemUuY3JlYXRlSW5wdXRFbGVtZW50UmVzaXplcikodGhpcy5ob3Qucm9vdERvY3VtZW50KSk7XG4gICAgLyoqXG4gICAgICogQW4gVEVYVEFSRUEgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hUTUxUZXh0QXJlYUVsZW1lbnR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiVEVYVEFSRUFcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBkZWNsYXJhdGlvbiBvYmplY3Qgb2YgdGhlIFRFWFRBUkVBIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtDU1NTdHlsZURlY2xhcmF0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRleHRhcmVhU3R5bGVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBQYXJlbnQgZWxlbWVudCBvZiB0aGUgVEVYVEFSRUEuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtIVE1MRGl2RWxlbWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJURVhUQVJFQV9QQVJFTlRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBkZWNsYXJhdGlvbiBvYmplY3Qgb2YgdGhlIFRFWFRBUkVBX1BBUkVOVCBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0ZXh0YXJlYVBhcmVudFN0eWxlXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogWi1pbmRleCBjbGFzcyBzdHlsZSBmb3IgdGhlIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJsYXllckNsYXNzXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBuZXcgX2V2ZW50TWFuYWdlci5kZWZhdWx0KHRoaXMpO1xuICAgIHRoaXMuY3JlYXRlRWxlbWVudHMoKTtcbiAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICB0aGlzLmhvdC5hZGRIb29rT25jZSgnYWZ0ZXJEZXN0cm95JywgKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3VycmVudCB2YWx1ZSBmcm9tIGVkaXRhYmxlIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG5ldyB2YWx1ZSBpbnRvIGVkaXRhYmxlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gbmV3VmFsdWUgVGhlIGVkaXRvciB2YWx1ZS5cbiAgICovXG4gIHNldFZhbHVlKG5ld1ZhbHVlKSB7XG4gICAgdGhpcy5URVhUQVJFQS52YWx1ZSA9IG5ld1ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBlZGl0b3IgYW5kIGFkanVzdCBpdHMgc2l6ZS5cbiAgICovXG4gIG9wZW4oKSB7XG4gICAgdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpOyAvLyBuZWVkIGl0IGluc3RhbnRseSwgdG8gcHJldmVudCBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9pc3N1ZXMvMzQ4XG4gICAgdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7XG4gICAgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2VkaXRvcicpO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGVkaXRvci5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKTtcbiAgICBpZiAoKDAsIF9lbGVtZW50LmlzVGhpc0hvdENoaWxkKSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCwgdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSB7XG4gICAgICB0aGlzLmhvdC5saXN0ZW4oKTsgLy8gZG9uJ3QgcmVmb2N1cyB0aGUgdGFibGUgaWYgdXNlciBmb2N1c2VkIHNvbWUgY2VsbCBvdXRzaWRlIG9mIEhUIG9uIHB1cnBvc2VcbiAgICB9XG4gICAgdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCk7XG4gICAgdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgZWRpdG9yJ3MgbWV0YSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gdGQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gICAqL1xuICBwcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgc3VwZXIucHJlcGFyZShyb3csIGNvbCwgcHJvcCwgdGQsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgaWYgKCFjZWxsUHJvcGVydGllcy5yZWFkT25seSkge1xuICAgICAgdGhpcy5yZWZyZXNoRGltZW5zaW9ucyh0cnVlKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWxsb3dJbnZhbGlkXG4gICAgICB9ID0gY2VsbFByb3BlcnRpZXM7XG4gICAgICBpZiAoYWxsb3dJbnZhbGlkICYmICF0aGlzLmlzT3BlbmVkKCkpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFuIGVtcHR5IHNwYWNlIGZyb20gdGV4dGFyZWEgKGFkZGVkIGJ5IGNvcHlQYXN0ZSBwbHVnaW4gdG8gbWFrZSBjb3B5L3Bhc3RlXG4gICAgICAgIC8vIGZ1bmN0aW9uYWxpdHkgd29yayB3aXRoIElNRSlcbiAgICAgICAgdGhpcy5URVhUQVJFQS52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZpb3VzU3RhdGUgIT09IF9iYXNlRWRpdG9yLkVESVRPUl9TVEFURS5GSU5JU0hFRCAmJiAhdGhpcy5pc09wZW5lZCgpKSB7XG4gICAgICAgIHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgZWRpdGluZyBvbiBhIGhpZ2hsaWdodGVkIGNlbGwgYW5kIGhpZGVzIGZpbGxIYW5kbGUgY29ybmVyIGlmIHdhcyBwcmVzZW50LlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG5ld0luaXRpYWxWYWx1ZSBUaGUgZWRpdG9yIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBrZXlib2FyZCBldmVudCBvYmplY3QuXG4gICAqL1xuICBiZWdpbkVkaXRpbmcobmV3SW5pdGlhbFZhbHVlLCBldmVudCkge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBfYmFzZUVkaXRvci5FRElUT1JfU1RBVEUuVklSR0lOKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuVEVYVEFSRUEudmFsdWUgPSAnJzsgLy8gUmVtb3ZlIGFuIGVtcHR5IHNwYWNlIGZyb20gdGV4dGFyZWEgKGFkZGVkIGJ5IGNvcHlQYXN0ZSBwbHVnaW4gdG8gbWFrZSBjb3B5L3Bhc3RlIGZ1bmN0aW9uYWxpdHkgd29yayB3aXRoIElNRSkuXG4gICAgc3VwZXIuYmVnaW5FZGl0aW5nKG5ld0luaXRpYWxWYWx1ZSwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZm9jdXMgc3RhdGUgb24gdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXMoKSB7XG4gICAgLy8gRm9yIElNRSBlZGl0b3IgdGV4dGFyZWEgZWxlbWVudCBtdXN0IGJlIGZvY3VzZWQgdXNpbmcgXCIuc2VsZWN0XCIgbWV0aG9kLlxuICAgIC8vIFVzaW5nIFwiLmZvY3VzXCIgYnJvd3NlciBhdXRvbWF0aWNhbGx5IHNjcm9sbCBpbnRvIHRoZSBmb2N1c2VkIGVsZW1lbnQgd2hpY2hcbiAgICAvLyBpcyB1bmRlc2lyZWQgZWZmZWN0LlxuICAgIHRoaXMuVEVYVEFSRUEuc2VsZWN0KCk7XG4gICAgKDAsIF9lbGVtZW50LnNldENhcmV0UG9zaXRpb24pKHRoaXMuVEVYVEFSRUEsIHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVkaXRvcidzIGVsZW1lbnRzIGFuZCBhZGRzIG5lY2Vzc2FyeSBDU1MgY2xhc3NuYW1lcy5cbiAgICovXG4gIGNyZWF0ZUVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3REb2N1bWVudFxuICAgIH0gPSB0aGlzLmhvdDtcbiAgICB0aGlzLlRFWFRBUkVBID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RFWFRBUkVBJyk7XG5cbiAgICAvLyBNYWtlcyB0aGUgZWxlbWVudCByZWNvZ25pemFibGUgYnkgSG90IGFzIGl0cyBvd25cbiAgICAvLyBjb21wb25lbnQncyBlbGVtZW50LlxuICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIFtbJ2RhdGEtaG90LWlucHV0JywgJyddLCAoMCwgX2ExMXkuQTExWV9UQUJJTkRFWCkoLTEpXSk7XG4gICAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuVEVYVEFSRUEsIFsoMCwgX2ExMXkuQTExWV9ISURERU4pKCldKTtcbiAgICB9XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLlRFWFRBUkVBLCAnaGFuZHNvbnRhYmxlSW5wdXQnKTtcbiAgICB0aGlzLnRleHRhcmVhU3R5bGUgPSB0aGlzLlRFWFRBUkVBLnN0eWxlO1xuICAgIHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aCA9IDA7XG4gICAgdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodCA9IDA7XG4gICAgdGhpcy50ZXh0YXJlYVN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJztcbiAgICB0aGlzLlRFWFRBUkVBX1BBUkVOVCA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCAnaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXInKTtcbiAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgdGhpcy5sYXllckNsYXNzKSkge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgdGhpcy5sYXllckNsYXNzKTtcbiAgICB9XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgRURJVE9SX0hJRERFTl9DTEFTU19OQU1FKTtcbiAgICB0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUgPSB0aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZTtcbiAgICB0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKTtcbiAgICB0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYW4gZWRpdGFibGUgZWxlbWVudCBvdXQgb2YgdGhlIHZpZXdwb3J0LCBidXQgZWxlbWVudCBtdXN0IGJlIGFibGUgdG8gaG9sZCBmb2N1cyBmb3IgSU1FIHN1cHBvcnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoaWRlRWRpdGFibGVFbGVtZW50KCkge1xuICAgIGlmICgoMCwgX2Jyb3dzZXIuaXNFZGdlKSgpKSB7XG4gICAgICB0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudCA9ICctOTk5OTlweCc7XG4gICAgfVxuICAgIHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1kgPSAndmlzaWJsZSc7XG4gICAgdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodCA9ICcxcHgnO1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpcy5URVhUQVJFQV9QQVJFTlQsIHRoaXMubGF5ZXJDbGFzcyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgRURJVE9SX0hJRERFTl9DTEFTU19OQU1FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYW4gZWRpdGFibGUgZWxlbWVudCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3dFZGl0YWJsZUVsZW1lbnQoKSB7XG4gICAgdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodCA9ICcnO1xuICAgIHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vdmVyZmxvdyA9ICcnO1xuICAgIHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbiA9ICcnO1xuICAgIHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpID8gJ2xlZnQnIDogJ3JpZ2h0J10gPSAnYXV0byc7XG4gICAgdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHkgPSAnMSc7XG4gICAgdGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQgPSAnJztcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpcy5URVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztcbiAgICBsZXQgaGFzQ2xhc3NIYW5kc29udGFibGVFZGl0b3IgPSBmYWxzZTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgaW5kZXggPT4ge1xuICAgICAgY29uc3QgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpbmRleF07XG4gICAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShjaGlsZE5vZGUsICdoYW5kc29udGFibGVFZGl0b3InKSkge1xuICAgICAgICBoYXNDbGFzc0hhbmRzb250YWJsZUVkaXRvciA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgRURJVE9SX0hJRERFTl9DTEFTU19OQU1FKSkge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgRURJVE9SX0hJRERFTl9DTEFTU19OQU1FKTtcbiAgICB9XG4gICAgaWYgKGhhc0NsYXNzSGFuZHNvbnRhYmxlRWRpdG9yKSB7XG4gICAgICB0aGlzLmxheWVyQ2xhc3MgPSBFRElUT1JfVklTSUJMRV9DTEFTU19OQU1FO1xuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLlRFWFRBUkVBX1BBUkVOVCwgdGhpcy5sYXllckNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sYXllckNsYXNzID0gdGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKTtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5URVhUQVJFQV9QQVJFTlQsIHRoaXMubGF5ZXJDbGFzcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBlZGl0b3IncyB2YWx1ZSB1c2luZyBzb3VyY2UgZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hWYWx1ZSgpIHtcbiAgICBjb25zdCBwaHlzaWNhbFJvdyA9IHRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpO1xuICAgIGNvbnN0IHNvdXJjZURhdGEgPSB0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHBoeXNpY2FsUm93LCB0aGlzLmNvbCk7XG4gICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gc291cmNlRGF0YTtcbiAgICB0aGlzLnNldFZhbHVlKHNvdXJjZURhdGEpO1xuICAgIHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgZWRpdG9yJ3Mgc2l6ZSBhbmQgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgSW5kaWNhdGVzIGlmIHRoZSByZWZyZXNoaW5nIGVkaXRvciBkaW1lbnNpb25zIHNob3VsZCBiZSB0cmlnZ2VyZWQuXG4gICAqL1xuICByZWZyZXNoRGltZW5zaW9ucygpIHtcbiAgICBsZXQgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSBfYmFzZUVkaXRvci5FRElUT1JfU1RBVEUuRURJVElORyAmJiAhZm9yY2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5URCA9IHRoaXMuZ2V0RWRpdGVkQ2VsbCgpO1xuXG4gICAgLy8gVEQgaXMgb3V0c2lkZSBvZiB0aGUgdmlld3BvcnQuXG4gICAgaWYgKCF0aGlzLlREKSB7XG4gICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTsgLy8gVE9ETyBzaG91bGRuJ3QgaXQgYmUgdGhpcy5maW5pc2hFZGl0aW5nKCkgP1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB0b3AsXG4gICAgICBzdGFydCxcbiAgICAgIHdpZHRoLFxuICAgICAgbWF4V2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBtYXhIZWlnaHRcbiAgICB9ID0gdGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO1xuICAgIHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSBgJHtzdGFydH1weGA7XG4gICAgdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCk7XG4gICAgY29uc3QgY2VsbENvbXB1dGVkU3R5bGUgPSAoMCwgX2VsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSkodGhpcy5URCwgdGhpcy5ob3Qucm9vdFdpbmRvdyk7XG4gICAgdGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZSA9IGNlbGxDb21wdXRlZFN0eWxlLmZvbnRTaXplO1xuICAgIHRoaXMuVEVYVEFSRUEuc3R5bGUuZm9udEZhbWlseSA9IGNlbGxDb21wdXRlZFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICBjb25zdCB0ZXh0YXJlYUNvbXB1dGVkU3R5bGUgPSAoMCwgX2VsZW1lbnQuZ2V0Q29tcHV0ZWRTdHlsZSkodGhpcy5URVhUQVJFQSk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSBwYXJzZUludCh0ZXh0YXJlYUNvbXB1dGVkU3R5bGUucGFkZGluZ0xlZnQsIDEwKSArIHBhcnNlSW50KHRleHRhcmVhQ29tcHV0ZWRTdHlsZS5wYWRkaW5nUmlnaHQsIDEwKTtcbiAgICBjb25zdCB2ZXJ0aWNhbFBhZGRpbmcgPSBwYXJzZUludCh0ZXh0YXJlYUNvbXB1dGVkU3R5bGUucGFkZGluZ1RvcCwgMTApICsgcGFyc2VJbnQodGV4dGFyZWFDb21wdXRlZFN0eWxlLnBhZGRpbmdCb3R0b20sIDEwKTtcbiAgICBjb25zdCBmaW5hbFdpZHRoID0gd2lkdGggLSBob3Jpem9udGFsUGFkZGluZztcbiAgICBjb25zdCBmaW5hbEhlaWdodCA9IGhlaWdodCAtIHZlcnRpY2FsUGFkZGluZztcbiAgICBjb25zdCBmaW5hbE1heFdpZHRoID0gbWF4V2lkdGggLSBob3Jpem9udGFsUGFkZGluZztcbiAgICBjb25zdCBmaW5hbE1heEhlaWdodCA9IG1heEhlaWdodCAtIHZlcnRpY2FsUGFkZGluZztcbiAgICB0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLCB7XG4gICAgICBtaW5XaWR0aDogTWF0aC5taW4oZmluYWxXaWR0aCwgZmluYWxNYXhXaWR0aCksXG4gICAgICBtaW5IZWlnaHQ6IE1hdGgubWluKGZpbmFsSGVpZ2h0LCBmaW5hbE1heEhlaWdodCksXG4gICAgICAvLyBURVhUQVJFQSBzaG91bGQgbmV2ZXIgYmUgd2lkZXIgdGhhbiB2aXNpYmxlIHBhcnQgb2YgdGhlIHZpZXdwb3J0IChzaG91bGQgbm90IGNvdmVyIHRoZSBzY3JvbGxiYXIpXG4gICAgICBtYXhXaWR0aDogZmluYWxNYXhXaWR0aCxcbiAgICAgIG1heEhlaWdodDogZmluYWxNYXhIZWlnaHRcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBldmVudHMgYW5kIGhvb2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYmluZEV2ZW50cygpIHtcbiAgICBpZiAoKDAsIF9icm93c2VyLmlzSU9TKSgpKSB7XG4gICAgICAvLyBvbiBpT1MgYWZ0ZXIgY2xpY2sgXCJEb25lXCIgdGhlIGVkaXQgaXNuJ3QgaGlkZGVuIGJ5IGRlZmF1bHQsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIGl0IG1hbnVhbGx5LlxuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCAnZm9jdXNvdXQnLCAoKSA9PiB0aGlzLmZpbmlzaEVkaXRpbmcoZmFsc2UpKTtcbiAgICB9XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNjcm9sbEhvcml6b250YWxseScsICgpID0+IHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNjcm9sbFZlcnRpY2FsbHknLCAoKSA9PiB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDb2x1bW5SZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCk7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFLkVESVRJTkcpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSb3dSZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCk7XG4gICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFLkVESVRJTkcpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVnbHkgaGFjayBmb3IgYXV0b2NvbXBsZXRlRWRpdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKCkge31cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGludGVybmFsIGV2ZW50IG1hbmFnZXIgYW5kIGNsZWFycyBhdHRhY2hlZCBob29rcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY2xlYXJIb29rcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgZWRpdG9yLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdlZGl0b3InKTtcbiAgICBjb25zdCBjb250ZXh0Q29uZmlnID0ge1xuICAgICAgcnVuT25seUlmOiAoKSA9PiAoMCwgX21peGVkLmlzRGVmaW5lZCkodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksXG4gICAgICBncm91cDogU0hPUlRDVVRTX0dST1VQXG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnROZXdMaW5lID0gKCkgPT4ge1xuICAgICAgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdcXG4nKTtcbiAgICB9O1xuICAgIGVkaXRvckNvbnRleHQuYWRkU2hvcnRjdXRzKFt7XG4gICAgICBrZXlzOiBbWydDb250cm9sJywgJ0VudGVyJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgaW5zZXJ0TmV3TGluZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdpbGwgYmxvY2sgY2xvc2luZyBlZGl0b3IuXG4gICAgICB9LFxuICAgICAgcnVuT25seUlmOiBldmVudCA9PiAhdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSAmJlxuICAgICAgLy8gV2UgdHJpZ2dlciBhIGRhdGEgcG9wdWxhdGlvbiBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uLlxuICAgICAgLy8gY2F0Y2ggQ1RSTCBidXQgbm90IHJpZ2h0IEFMVCAod2hpY2ggaW4gc29tZSBzeXN0ZW1zIHRyaWdnZXJzIEFMVCtDVFJMKVxuICAgICAgIWV2ZW50LmFsdEtleVxuICAgIH0sIHtcbiAgICAgIGtleXM6IFtbJ01ldGEnLCAnRW50ZXInXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBpbnNlcnROZXdMaW5lKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2lsbCBibG9jayBjbG9zaW5nIGVkaXRvci5cbiAgICAgIH0sXG4gICAgICBydW5Pbmx5SWY6ICgpID0+ICF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpIC8vIFdlIHRyaWdnZXIgYSBkYXRhIHBvcHVsYXRpb24gZm9yIG11bHRpcGxlIHNlbGVjdGlvbi5cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydBbHQnLCAnRW50ZXInXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBpbnNlcnROZXdMaW5lKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2lsbCBibG9jayBjbG9zaW5nIGVkaXRvci5cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydIb21lJ11dLFxuICAgICAgY2FsbGJhY2s6IChldmVudCwgX3JlZikgPT4ge1xuICAgICAgICBsZXQgW2tleU5hbWVdID0gX3JlZjtcbiAgICAgICAgKDAsIF9jYXJldFBvc2l0aW9uZXIudXBkYXRlQ2FyZXRQb3NpdGlvbikoa2V5TmFtZSwgdGhpcy5URVhUQVJFQSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5czogW1snRW5kJ11dLFxuICAgICAgY2FsbGJhY2s6IChldmVudCwgX3JlZjIpID0+IHtcbiAgICAgICAgbGV0IFtrZXlOYW1lXSA9IF9yZWYyO1xuICAgICAgICAoMCwgX2NhcmV0UG9zaXRpb25lci51cGRhdGVDYXJldFBvc2l0aW9uKShrZXlOYW1lLCB0aGlzLlRFWFRBUkVBKTtcbiAgICAgIH1cbiAgICB9XSwgY29udGV4dENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGVkaXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZWRpdG9yQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdlZGl0b3InKTtcbiAgICBlZGl0b3JDb250ZXh0LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU0hPUlRDVVRTX0dST1VQKTtcbiAgfVxufVxuZXhwb3J0cy5UZXh0RWRpdG9yID0gVGV4dEVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdGltZUVkaXRvciA9IHJlcXVpcmUoXCIuL3RpbWVFZGl0b3JcIik7XG5leHBvcnRzLkVESVRPUl9UWVBFID0gX3RpbWVFZGl0b3IuRURJVE9SX1RZUEU7XG5leHBvcnRzLlRpbWVFZGl0b3IgPSBfdGltZUVkaXRvci5UaW1lRWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF90ZXh0RWRpdG9yID0gcmVxdWlyZShcIi4uL3RleHRFZGl0b3JcIik7XG5jb25zdCBFRElUT1JfVFlQRSA9IGV4cG9ydHMuRURJVE9SX1RZUEUgPSAndGltZSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBUaW1lRWRpdG9yXG4gKi9cbmNsYXNzIFRpbWVFZGl0b3IgZXh0ZW5kcyBfdGV4dEVkaXRvci5UZXh0RWRpdG9yIHtcbiAgc3RhdGljIGdldCBFRElUT1JfVFlQRSgpIHtcbiAgICByZXR1cm4gRURJVE9SX1RZUEU7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgZWRpdG9yJ3MgbWV0YSBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gdGQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gICAqL1xuICBwcmVwYXJlKHJvdywgY29sLCBwcm9wLCB0ZCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gICAgc3VwZXIucHJlcGFyZShyb3csIGNvbCwgcHJvcCwgdGQsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgdGhpcy5URVhUQVJFQS5kaXIgPSAnbHRyJztcbiAgfVxufVxuZXhwb3J0cy5UaW1lRWRpdG9yID0gVGltZUVkaXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0TGlzdGVuZXJzQ291bnRlciA9IGdldExpc3RlbmVyc0NvdW50ZXI7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIENvdW50ZXIgd2hpY2ggdHJhY2tzIHVucmVnaXN0ZXJlZCBsaXN0ZW5lcnMgKHVzZWZ1bCBmb3IgZGV0ZWN0aW5nIG1lbW9yeSBsZWFrcykuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqL1xubGV0IGxpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEV2ZW50IERPTSBtYW5hZ2VyIGZvciBpbnRlcm5hbCB1c2UgaW4gSGFuZHNvbnRhYmxlLlxuICpcbiAqIEBjbGFzcyBFdmVudE1hbmFnZXJcbiAqL1xuY2xhc3MgRXZlbnRNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dD1udWxsXSBBbiBvYmplY3QgdG8gd2hpY2ggZXZlbnQgbGlzdGVuZXJzIHdpbGwgYmUgc3RvcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbGV0IGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgLyoqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb250ZXh0XCIsIHZvaWQgMCk7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB0aGlzO1xuXG4gICAgLy8gVE9ETyBpdCBtb2RpZnkgZXh0ZXJuYWwgb2JqZWN0LiBSZXRoaW5rIHRoYXQuXG4gICAgaWYgKCF0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycyA9IFtdOyAvLyBUT0RPIHBlcmYgSXQgd291bGQgYmUgbW9yZSBwZXJmb3JtYW50IGlmIGV2ZXJ5IGluc3RhbmNlIG9mIEV2ZW50TWFuYWdlciB0cmFja2VkIGl0cyBvd24gbGlzdGVuZXJzIG9ubHlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgc3BlY2lmaWVkIGxpc3RlbmVyIChgZXZlbnROYW1lYCkgdG8gdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBhZnRlciBldmVudCBvY2N1ci5cbiAgICogQHBhcmFtIHtBZGRFdmVudExpc3RlbmVyT3B0aW9uc3xib29sZWFufSBbb3B0aW9uc10gTGlzdGVuZXIgb3B0aW9ucyBpZiBvYmplY3Qgb3IgdXNlQ2FwdHVyZSBpZiBib29sZWFuLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgZnVuY3Rpb24gd2hpY2ggeW91IGNhbiBlYXNpbHkgY2FsbCB0byByZW1vdmUgdGhhdCBldmVudC5cbiAgICovXG4gIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2FsbGJhY2tQcm94eShldmVudCkge1xuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCBleHRlbmRFdmVudChldmVudCkpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7XG4gICAgICBlbGVtZW50LFxuICAgICAgZXZlbnQ6IGV2ZW50TmFtZSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgY2FsbGJhY2tQcm94eSxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBldmVudE1hbmFnZXI6IHRoaXNcbiAgICB9KTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBjYWxsYmFja1Byb3h5LCBvcHRpb25zKTtcbiAgICBsaXN0ZW5lcnNDb3VudGVyICs9IDE7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZXZlbnQgbGlzdGVuZXIgcHJldmlvdXNseSByZWdpc3RlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGFyZ2V0IGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIGV2ZW50IHRhcmdldC4gSXQgbXVzdCBiZSB0aGUgc2FtZSBhcyBkdXJpbmcgcmVnaXN0cmF0aW9uIGxpc3RlbmVyLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvbmx5T3duRXZlbnRzXSBXaGV0aGVyIHdob3VsZCByZW1vdmUgb25seSBldmVudHMgcmVnaXN0ZXJlZCB1c2luZyB0aGlzIGluc3RhbmNlIG9mIEV2ZW50TWFuYWdlci5cbiAgICovXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIGxldCBvbmx5T3duRXZlbnRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgICBsZXQgbGVuID0gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtcbiAgICBsZXQgdG1wRXZlbnQ7XG4gICAgd2hpbGUgKGxlbikge1xuICAgICAgbGVuIC09IDE7XG4gICAgICB0bXBFdmVudCA9IHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tsZW5dO1xuICAgICAgaWYgKHRtcEV2ZW50LmV2ZW50ID09PSBldmVudE5hbWUgJiYgdG1wRXZlbnQuZWxlbWVudCA9PT0gZWxlbWVudCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgY2FsbGJhY2sgIT09IHRtcEV2ZW50LmNhbGxiYWNrKSB7XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPIHJldGhpbmsgdGhhdCwgbWFpbiBidWxrIGlzIHRoYXQgaXQgbmVlZHMgbXVsdGkgaW5zdGFuY2VzIHRvIGhhbmRsZSBzYW1lIGNvbnRleHQsIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHNjb3Blcy5cbiAgICAgICAgLy8gVE9ETyBJIHN1cHBvc2UgbXVjaCBtb3JlIGVmZmljaWVudCB3YXkgd2lsbCBiZSBjb21wYXJpbmcgc3RyaW5nIHdpdGggc2NvcGUgaWQsIG9yIGFueSBzaW1pbGFyIGFwcHJvYWNoLlxuICAgICAgICBpZiAob25seU93bkV2ZW50cyAmJiB0bXBFdmVudC5ldmVudE1hbmFnZXIgIT09IHRoaXMpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGxlbiwgMSk7XG4gICAgICAgIHRtcEV2ZW50LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0bXBFdmVudC5ldmVudCwgdG1wRXZlbnQuY2FsbGJhY2tQcm94eSwgdG1wRXZlbnQub3B0aW9ucyk7XG4gICAgICAgIGxpc3RlbmVyc0NvdW50ZXIgLT0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzaW5jZSAwLjE1LjAtYmV0YTNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb25seU93bkV2ZW50c10gV2hldGhlciB3aG91bGQgcmVtb3ZlIG9ubHkgZXZlbnRzIHJlZ2lzdGVyZWQgdXNpbmcgdGhpcyBpbnN0YW5jZSBvZiBFdmVudE1hbmFnZXIuXG4gICAqL1xuICBjbGVhckV2ZW50cygpIHtcbiAgICBsZXQgb25seU93bkV2ZW50cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGxlbiA9IHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGxlbikge1xuICAgICAgbGVuIC09IDE7XG4gICAgICBjb25zdCBldmVudCA9IHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tsZW5dO1xuICAgICAgaWYgKG9ubHlPd25FdmVudHMgJiYgZXZlbnQuZXZlbnRNYW5hZ2VyICE9PSB0aGlzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShsZW4sIDEpO1xuICAgICAgZXZlbnQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LmV2ZW50LCBldmVudC5jYWxsYmFja1Byb3h5LCBldmVudC5vcHRpb25zKTtcbiAgICAgIGxpc3RlbmVyc0NvdW50ZXIgLT0gMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBldmVudHMuXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLmNsZWFyRXZlbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBpbnN0YW5jZSBvZiBFdmVudE1hbmFnZXIsIGNsZWFyaW5nIGFsbCBldmVudHMgb2YgdGhlIGNvbnRleHQuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJFdmVudHMoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgaW5zdGFuY2Ugb2YgRXZlbnRNYW5hZ2VyLCBjbGVhcmluZyBvbmx5IHRoZSBvd24gZXZlbnRzLlxuICAgKi9cbiAgZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCkge1xuICAgIHRoaXMuY2xlYXJFdmVudHModHJ1ZSk7XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VyIGV2ZW50IGF0IHRoZSBzcGVjaWZpZWQgdGFyZ2V0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUYXJnZXQgZWxlbWVudC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBFdmVudCBuYW1lLlxuICAgKi9cbiAgZmlyZUV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSkge1xuICAgIGxldCByb290RG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50O1xuICAgIGxldCByb290V2luZG93ID0gZWxlbWVudDtcbiAgICBpZiAoIXJvb3REb2N1bWVudCkge1xuICAgICAgcm9vdERvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50ID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogZWxlbWVudDtcbiAgICAgIHJvb3RXaW5kb3cgPSByb290RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgY2FuY2VsYWJsZTogZXZlbnROYW1lICE9PSAnbW91c2Vtb3ZlJyxcbiAgICAgIHZpZXc6IHJvb3RXaW5kb3csXG4gICAgICBkZXRhaWw6IDAsXG4gICAgICBzY3JlZW5YOiAwLFxuICAgICAgc2NyZWVuWTogMCxcbiAgICAgIGNsaWVudFg6IDEsXG4gICAgICBjbGllbnRZOiAxLFxuICAgICAgY3RybEtleTogZmFsc2UsXG4gICAgICBhbHRLZXk6IGZhbHNlLFxuICAgICAgc2hpZnRLZXk6IGZhbHNlLFxuICAgICAgbWV0YUtleTogZmFsc2UsXG4gICAgICBidXR0b246IDAsXG4gICAgICByZWxhdGVkVGFyZ2V0OiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGxldCBldmVudDtcbiAgICBpZiAocm9vdERvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG4gICAgICBldmVudCA9IHJvb3REb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcbiAgICAgIGV2ZW50LmluaXRNb3VzZUV2ZW50KGV2ZW50TmFtZSwgb3B0aW9ucy5idWJibGVzLCBvcHRpb25zLmNhbmNlbGFibGUsIG9wdGlvbnMudmlldywgb3B0aW9ucy5kZXRhaWwsIG9wdGlvbnMuc2NyZWVuWCwgb3B0aW9ucy5zY3JlZW5ZLCBvcHRpb25zLmNsaWVudFgsIG9wdGlvbnMuY2xpZW50WSwgb3B0aW9ucy5jdHJsS2V5LCBvcHRpb25zLmFsdEtleSwgb3B0aW9ucy5zaGlmdEtleSwgb3B0aW9ucy5tZXRhS2V5LCBvcHRpb25zLmJ1dHRvbiwgb3B0aW9ucy5yZWxhdGVkVGFyZ2V0IHx8IHJvb3REb2N1bWVudC5ib2R5LnBhcmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudCA9IHJvb3REb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudC5kaXNwYXRjaEV2ZW50KSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LmZpcmVFdmVudChgb24ke2V2ZW50TmFtZX1gLCBldmVudCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBldmVudCBvYmplY3QuXG4gKiBAcmV0dXJucyB7RXZlbnR9XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZEV2ZW50KGV2ZW50KSB7XG4gIGNvbnN0IG5hdGl2ZVN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgIG5hdGl2ZVN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5hcHBseSh0aGlzKTtcbiAgICAoMCwgX2V2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbikodGhpcyk7XG4gIH07XG4gIHJldHVybiBldmVudDtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEV2ZW50TWFuYWdlcjtcbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldExpc3RlbmVyc0NvdW50ZXIoKSB7XG4gIHJldHVybiBsaXN0ZW5lcnNDb3VudGVyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfY29uc29sZSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4vaGVscGVycy9mdW5jdGlvblwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogUG9zc2libGUgZm9jdXMgbW9kZXMuXG4gKiAtIENFTEwgLSBUaGUgYnJvd3NlcidzIGZvY3VzIHN0YXlzIG9uIHRoZSBsYXN0bHkgc2VsZWN0ZWQgY2VsbCBlbGVtZW50LlxuICogLSBNSVhFRCAtIFRoZSBicm93c2VyJ3MgZm9jdXMgc3dpdGNoZXMgZnJvbSB0aGUgbGFzdGx5IHNlbGVjdGVkIGNlbGwgZWxlbWVudCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBlZGl0b3Inc1xuICogYFRFWFRBUkVBYCBlbGVtZW50IGFmdGVyIGEgZGVsYXkgZGVmaW5lZCBpbiB0aGUgbWFuYWdlci5cbiAqXG4gKiBAdHlwZSB7e0NFTEw6IHN0cmluZywgTUlYRUQ6IHN0cmluZ319XG4gKi9cbmNvbnN0IEZPQ1VTX01PREVTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIENFTEw6ICdjZWxsJyxcbiAgTUlYRUQ6ICdtaXhlZCdcbn0pO1xuXG4vKipcbiAqIE1hbmFnZXMgdGhlIGJyb3dzZXIncyBmb2N1cyBpbiB0aGUgdGFibGUuXG4gKi9cbnZhciBfaG90ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2ZvY3VzTW9kZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9yZWZvY3VzRGVsYXkgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcmVmb2N1c0VsZW1lbnRHZXR0ZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZGVib3VuY2VkU2VsZWN0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX0ZvY3VzTWFuYWdlcl9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgRm9jdXNNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8qKlxuICAgICAqIEdldCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYW5kIGhpZ2hsaWdodGVkIGNlbGwvaGVhZGVyIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGNlbGwgZWxlbWVudCBpcyByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Gb2N1c01hbmFnZXJfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2hvdCwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IGVuYWJsZWQgZm9jdXMgbW9kZS5cbiAgICAgKiBDYW4gYmUgZWl0aGVyOlxuICAgICAqXG4gICAgICogLSAnY2VsbCcgLSBUaGUgYnJvd3NlcidzIGZvY3VzIHN0YXlzIG9uIHRoZSBsYXN0bHkgc2VsZWN0ZWQgY2VsbCBlbGVtZW50LlxuICAgICAqIC0gJ21peGVkJyAtIFRoZSBicm93c2VyJ3MgZm9jdXMgc3dpdGNoZXMgZnJvbSB0aGUgbGFzdGx5IHNlbGVjdGVkIGNlbGwgZWxlbWVudCB0byB0aGUgY3VycmVudGx5IGFjdGl2ZSBlZGl0b3Inc1xuICAgICAqIGBURVhUQVJFQWAgZWxlbWVudCBhZnRlciBhIGRlbGF5IGRlZmluZWQgaW4gdGhlIG1hbmFnZXIuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7J2NlbGwnIHwgJ21peGVkJ31cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZm9jdXNNb2RlLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBkZWxheSBhZnRlciB3aGljaCB0aGUgZm9jdXMgc3dpdGNoZXMgZnJvbSB0aGUgbGFzdGx5IHNlbGVjdGVkIGNlbGwgdG8gdGhlIGFjdGl2ZSBlZGl0b3IncyBgVEVYVEFSRUFgXG4gICAgICogZWxlbWVudCBpZiB0aGUgZm9jdXMgbW9kZSBpcyBzZXQgdG8gJ21peGVkJy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3JlZm9jdXNEZWxheSwgMSk7XG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZ1bmN0aW9uIGZvciB0aGUgZWxlbWVudCB0byBiZSB1c2VkIHdoZW4gcmVmb2N1c2luZyB0aGUgYnJvd3NlciBhZnRlciBhIGRlbGF5LiBJZiBgbnVsbGAsIHRoZSBhY3RpdmVcbiAgICAgKiBlZGl0b3IncyBgVEVYVEFSRUFgIGVsZW1lbnQgd2lsbCBiZSB1c2VkLlxuICAgICAqXG4gICAgICogQHR5cGUge251bGx8RnVuY3Rpb259XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3JlZm9jdXNFbGVtZW50R2V0dGVyLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBNYXAgb2YgdGhlIGRlYm91bmNlZCBgc2VsZWN0YCBmdW5jdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWFwPG51bWJlciwgRnVuY3Rpb24+fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9kZWJvdW5jZWRTZWxlY3QsIG5ldyBNYXAoKSk7XG4gICAgY29uc3QgaG90U2V0dGluZ3MgPSBob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaG90LCB0aGlzLCBob3RJbnN0YW5jZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9mb2N1c01vZGUsIHRoaXMsIGhvdFNldHRpbmdzLmltZUZhc3RFZGl0ID8gRk9DVVNfTU9ERVMuTUlYRUQgOiBGT0NVU19NT0RFUy5DRUxMKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdCwgdGhpcykuYWRkSG9vaygnYWZ0ZXJVcGRhdGVTZXR0aW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb2N1c01hbmFnZXJfYnJhbmQsIF90aGlzLCBfb25VcGRhdGVTZXR0aW5ncykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLmFkZEhvb2soJ2FmdGVyU2VsZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9jdXNNYW5hZ2VyX2JyYW5kLCBfdGhpcywgX2ZvY3VzQ2VsbCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLmFkZEhvb2soJ2FmdGVyU2VsZWN0aW9uRm9jdXNTZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb2N1c01hbmFnZXJfYnJhbmQsIF90aGlzLCBfZm9jdXNDZWxsKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdCwgdGhpcykuYWRkSG9vaygnYWZ0ZXJTZWxlY3Rpb25FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb2N1c01hbmFnZXJfYnJhbmQsIF90aGlzLCBfZm9jdXNFZGl0b3JFbGVtZW50KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgZm9jdXMgbW9kZS5cbiAgICpcbiAgICogQHJldHVybnMgeydjZWxsJyB8ICdtaXhlZCd9XG4gICAqL1xuICBnZXRGb2N1c01vZGUoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZm9jdXNNb2RlLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvY3VzIG1vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7J2NlbGwnIHwgJ21peGVkJ30gZm9jdXNNb2RlIFRoZSBuZXcgZm9jdXMgbW9kZS5cbiAgICovXG4gIHNldEZvY3VzTW9kZShmb2N1c01vZGUpIHtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyhGT0NVU19NT0RFUykuaW5jbHVkZXMoZm9jdXNNb2RlKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9mb2N1c01vZGUsIHRoaXMsIGZvY3VzTW9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShgXCIke2ZvY3VzTW9kZX1cIiBpcyBub3QgYSB2YWxpZCBmb2N1cyBtb2RlLmApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlbGF5IGFmdGVyIHdoaWNoIHRoZSBmb2N1cyB3aWxsIGNoYW5nZSBmcm9tIHRoZSBjZWxsIGVsZW1lbnRzIHRvIHRoZSBhY3RpdmUgZWRpdG9yJ3MgYFRFWFRBUkVBYFxuICAgKiBlbGVtZW50IGlmIHRoZSBmb2N1cyBtb2RlIGlzIHNldCB0byAnbWl4ZWQnLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBEZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBnZXRSZWZvY3VzRGVsYXkoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcmVmb2N1c0RlbGF5LCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlbGF5IGFmdGVyIHdoaWNoIHRoZSBmb2N1cyB3aWxsIGNoYW5nZSBmcm9tIHRoZSBjZWxsIGVsZW1lbnRzIHRvIHRoZSBhY3RpdmUgZWRpdG9yJ3MgYFRFWFRBUkVBYFxuICAgKiBlbGVtZW50IGlmIHRoZSBmb2N1cyBtb2RlIGlzIHNldCB0byAnbWl4ZWQnLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgRGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgc2V0UmVmb2N1c0RlbGF5KGRlbGF5KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9yZWZvY3VzRGVsYXksIHRoaXMsIGRlbGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXMgdGhlIFwicmVmb2N1cyBlbGVtZW50XCIgZ2V0dGVyLiBJdCBzaG91bGQgcmV0dXJuIGEgZm9jdXNhYmxlIEhUTUwgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0UmVmb2N1c0VsZW1lbnRGdW5jdGlvbiBUaGUgcmVmb2N1cyBlbGVtZW50IGdldHRlci5cbiAgICovXG4gIHNldFJlZm9jdXNFbGVtZW50R2V0dGVyKGdldFJlZm9jdXNFbGVtZW50RnVuY3Rpb24pIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3JlZm9jdXNFbGVtZW50R2V0dGVyLCB0aGlzLCBnZXRSZWZvY3VzRWxlbWVudEZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVsZW1lbnQgdG8gYmUgdXNlZCB3aGVuIHJlZm9jdXNpbmcgdGhlIGJyb3dzZXIgYWZ0ZXIgYSBkZWxheSBpbiBjYXNlIG9mIHRoZSBmb2N1cyBtb2RlIGJlaW5nICdtaXhlZCcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MVGV4dEFyZWFFbGVtZW50fEhUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAgICovXG4gIGdldFJlZm9jdXNFbGVtZW50KCkge1xuICAgIGlmICh0eXBlb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yZWZvY3VzRWxlbWVudEdldHRlciwgdGhpcykgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3JlZm9jdXNFbGVtZW50R2V0dGVyLCB0aGlzKS5jYWxsKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MjtcbiAgICAgIHJldHVybiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Mi5URVhUQVJFQTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBicm93c2VyJ3MgZm9jdXMgdG8gdGhlIGhpZ2hsaWdodGVkIGNlbGwgb2YgdGhlIGxhc3Qgc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBbc2VsZWN0ZWRDZWxsXSBUaGUgaGlnaGxpZ2h0ZWQgY2VsbC9oZWFkZXIgZWxlbWVudC5cbiAgICovXG4gIGZvY3VzT25IaWdobGlnaHRlZENlbGwoc2VsZWN0ZWRDZWxsKSB7XG4gICAgY29uc3QgZm9jdXNFbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NDtcbiAgICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHRDb29yZHMgPSAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQzLmhpZ2hsaWdodDtcbiAgICAgIGlmICghY3VycmVudEhpZ2hsaWdodENvb3Jkcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZWxlbWVudFRvQmVGb2N1c2VkID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLnJ1bkhvb2tzKCdtb2RpZnlGb2N1c2VkRWxlbWVudCcsIGN1cnJlbnRIaWdobGlnaHRDb29yZHMucm93LCBjdXJyZW50SGlnaGxpZ2h0Q29vcmRzLmNvbCwgZWxlbWVudCk7XG4gICAgICBpZiAoIShlbGVtZW50VG9CZUZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudFRvQmVGb2N1c2VkID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICAgIGlmIChlbGVtZW50VG9CZUZvY3VzZWQgJiYgISgoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5nZXRBY3RpdmVFZGl0b3IoKSkgIT09IG51bGwgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NCAhPT0gdm9pZCAwICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldDQuaXNPcGVuZWQoKSkpIHtcbiAgICAgICAgZWxlbWVudFRvQmVGb2N1c2VkLmZvY3VzKHtcbiAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHNlbGVjdGVkQ2VsbCkge1xuICAgICAgZm9jdXNFbGVtZW50KHNlbGVjdGVkQ2VsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb2N1c01hbmFnZXJfYnJhbmQsIHRoaXMsIF9nZXRTZWxlY3RlZENlbGwpLmNhbGwodGhpcywgZWxlbWVudCA9PiBmb2N1c0VsZW1lbnQoZWxlbWVudCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGZvY3VzIHRvIHRoZSBhY3RpdmUgZWRpdG9yJ3MgYFRFWFRBUkVBYCBlbGVtZW50IGFmdGVyIHRoZSBwcm92aWRlZCBkZWxheS4gSWYgbm8gZGVsYXkgaXMgcHJvdmlkZWQsIGl0XG4gICAqIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgbWFuYWdlcidzIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsYXldIERlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCkge1xuICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ1O1xuICAgIGxldCBkZWxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yZWZvY3VzRGVsYXksIHRoaXMpO1xuICAgIGNvbnN0IHJlZm9jdXNFbGVtZW50ID0gdGhpcy5nZXRSZWZvY3VzRWxlbWVudCgpO1xuXG4gICAgLy8gUmUtZm9jdXMgb24gdGhlIGVkaXRvcidzIGBURVhUQVJFQWAgZWxlbWVudCAob3IgYSBwcmVkZWZpbmVkIGVsZW1lbnQpIGlmIHRoZSBgaW1lRmFzdEVkaXRgIG9wdGlvbiBpcyBlbmFibGVkLlxuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdCwgdGhpcykuZ2V0U2V0dGluZ3MoKS5pbWVGYXN0RWRpdCAmJiAhKChfY2xhc3NQcml2YXRlRmllbGRHZXQ1ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKSAhPT0gbnVsbCAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQ1ICE9PSB2b2lkIDAgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NS5pc09wZW5lZCgpKSAmJiAhIXJlZm9jdXNFbGVtZW50KSB7XG4gICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGVib3VuY2VkU2VsZWN0LCB0aGlzKS5oYXMoZGVsYXkpKSB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGVib3VuY2VkU2VsZWN0LCB0aGlzKS5zZXQoZGVsYXksICgwLCBfZnVuY3Rpb24uZGVib3VuY2UpKCgpID0+IHtcbiAgICAgICAgICByZWZvY3VzRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfSwgZGVsYXkpKTtcbiAgICAgIH1cbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGVib3VuY2VkU2VsZWN0LCB0aGlzKS5nZXQoZGVsYXkpKCk7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLkZvY3VzTWFuYWdlciA9IEZvY3VzTWFuYWdlcjtcbmZ1bmN0aW9uIF9nZXRTZWxlY3RlZENlbGwoY2FsbGJhY2spIHtcbiAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDY7XG4gIGNvbnN0IGhpZ2hsaWdodCA9IChfY2xhc3NQcml2YXRlRmllbGRHZXQ2ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDYuaGlnaGxpZ2h0O1xuICBpZiAoIWhpZ2hsaWdodCB8fCAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3QsIHRoaXMpLnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGhpZ2hsaWdodCkpIHtcbiAgICBjYWxsYmFjayhudWxsKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2VsbCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5nZXRDZWxsKGhpZ2hsaWdodC5yb3csIGhpZ2hsaWdodC5jb2wsIHRydWUpO1xuICBpZiAoY2VsbCA9PT0gbnVsbCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5hZGRIb29rT25jZSgnYWZ0ZXJTY3JvbGwnLCAoKSA9PiB7XG4gICAgICBjYWxsYmFjayhfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdCwgdGhpcykuZ2V0Q2VsbChoaWdobGlnaHQucm93LCBoaWdobGlnaHQuY29sLCB0cnVlKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soY2VsbCk7XG4gIH1cbn1cbi8qKlxuICogTWFuYWdlIHRoZSBicm93c2VyJ3MgZm9jdXMgYWZ0ZXIgZWFjaCBjZWxsIHNlbGVjdGlvbiBjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIF9mb2N1c0NlbGwoKSB7XG4gIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb2N1c01hbmFnZXJfYnJhbmQsIHRoaXMsIF9nZXRTZWxlY3RlZENlbGwpLmNhbGwodGhpcywgc2VsZWN0ZWRDZWxsID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBhY3RpdmVFbGVtZW50XG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90LCB0aGlzKS5yb290RG9jdW1lbnQ7XG5cbiAgICAvLyBCbHVycmluZyB0aGUgYGFjdGl2ZUVsZW1lbnRgIHJlbW92ZXMgdGhlIHVud2FudGVkIGJvcmRlciBhcm91bmQgdGhlIGZvY3VzYWJsZSBlbGVtZW50ICgjNjg3NylcbiAgICAvLyBhbmQgcmVzZXRzIHRoZSBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgcHJvcGVydHkuIFRoZSBibHVycmluZyBzaG91bGQgaGFwcGVuIG9ubHkgd2hlbiB0aGVcbiAgICAvLyBwcmV2aW91c2x5IHNlbGVjdGVkIGlucHV0IGVsZW1lbnQgaGFzIG5vdCBiZWxvbmdlZCB0byB0aGUgSGFuZHNvbnRhYmxlIGVkaXRvci4gSWYgYmx1cnJpbmcgaXNcbiAgICAvLyB0cmlnZ2VyZWQgZm9yIGFsbCBlbGVtZW50cywgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGRpc2FwcGVhcmluZyBJTUUgZWRpdG9yICgjOTY3MikuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQgJiYgKDAsIF9lbGVtZW50LmlzT3V0c2lkZUlucHV0KShhY3RpdmVFbGVtZW50KSkge1xuICAgICAgYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuICAgIHRoaXMuZm9jdXNPbkhpZ2hsaWdodGVkQ2VsbChzZWxlY3RlZENlbGwpO1xuICB9KTtcbn1cbi8qKlxuICogTWFuYWdlIHRoZSBicm93c2VyJ3MgZm9jdXMgYWZ0ZXIgY2VsbCBzZWxlY3Rpb24gZW5kLlxuICovXG5mdW5jdGlvbiBfZm9jdXNFZGl0b3JFbGVtZW50KCkge1xuICBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9jdXNNYW5hZ2VyX2JyYW5kLCB0aGlzLCBfZ2V0U2VsZWN0ZWRDZWxsKS5jYWxsKHRoaXMsIHNlbGVjdGVkQ2VsbCA9PiB7XG4gICAgaWYgKHRoaXMuZ2V0Rm9jdXNNb2RlKCkgPT09IEZPQ1VTX01PREVTLk1JWEVEICYmIHNlbGVjdGVkQ2VsbC5ub2RlTmFtZSA9PT0gJ1REJykge1xuICAgICAgdGhpcy5yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpO1xuICAgIH1cbiAgfSk7XG59XG4vKipcbiAqIFVwZGF0ZSB0aGUgbWFuYWdlciBjb25maWd1cmF0aW9uIGFmdGVyIGNhbGxpbmcgYHVwZGF0ZVNldHRpbmdzYC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmV3U2V0dGluZ3MgVGhlIG5ldyBzZXR0aW5ncyBwYXNzZWQgdG8gdGhlIGB1cGRhdGVTZXR0aW5nc2AgbWV0aG9kLlxuICovXG5mdW5jdGlvbiBfb25VcGRhdGVTZXR0aW5ncyhuZXdTZXR0aW5ncykge1xuICBpZiAodHlwZW9mIG5ld1NldHRpbmdzLmltZUZhc3RFZGl0ID09PSAnYm9vbGVhbicpIHtcbiAgICB0aGlzLnNldEZvY3VzTW9kZShuZXdTZXR0aW5ncy5pbWVGYXN0RWRpdCA/IEZPQ1VTX01PREVTLk1JWEVEIDogRk9DVVNfTU9ERVMuQ0VMTCk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IEExMVlfVEFCSU5ERVggPSB2YWwgPT4gWyd0YWJpbmRleCcsIHZhbF07XG5leHBvcnRzLkExMVlfVEFCSU5ERVggPSBBMTFZX1RBQklOREVYO1xuY29uc3QgQTExWV9UUkVFR1JJRCA9ICgpID0+IFsncm9sZScsICd0cmVlZ3JpZCddO1xuZXhwb3J0cy5BMTFZX1RSRUVHUklEID0gQTExWV9UUkVFR1JJRDtcbmNvbnN0IEExMVlfUFJFU0VOVEFUSU9OID0gKCkgPT4gWydyb2xlJywgJ3ByZXNlbnRhdGlvbiddO1xuZXhwb3J0cy5BMTFZX1BSRVNFTlRBVElPTiA9IEExMVlfUFJFU0VOVEFUSU9OO1xuY29uc3QgQTExWV9HUklEQ0VMTCA9ICgpID0+IFsncm9sZScsICdncmlkY2VsbCddO1xuZXhwb3J0cy5BMTFZX0dSSURDRUxMID0gQTExWV9HUklEQ0VMTDtcbmNvbnN0IEExMVlfUk9XSEVBREVSID0gKCkgPT4gWydyb2xlJywgJ3Jvd2hlYWRlciddO1xuZXhwb3J0cy5BMTFZX1JPV0hFQURFUiA9IEExMVlfUk9XSEVBREVSO1xuY29uc3QgQTExWV9ST1dHUk9VUCA9ICgpID0+IFsncm9sZScsICdyb3dncm91cCddO1xuZXhwb3J0cy5BMTFZX1JPV0dST1VQID0gQTExWV9ST1dHUk9VUDtcbmNvbnN0IEExMVlfQ09MVU1OSEVBREVSID0gKCkgPT4gWydyb2xlJywgJ2NvbHVtbmhlYWRlciddO1xuZXhwb3J0cy5BMTFZX0NPTFVNTkhFQURFUiA9IEExMVlfQ09MVU1OSEVBREVSO1xuY29uc3QgQTExWV9ST1cgPSAoKSA9PiBbJ3JvbGUnLCAncm93J107XG5leHBvcnRzLkExMVlfUk9XID0gQTExWV9ST1c7XG5jb25zdCBBMTFZX01FTlUgPSAoKSA9PiBbJ3JvbGUnLCAnbWVudSddO1xuZXhwb3J0cy5BMTFZX01FTlUgPSBBMTFZX01FTlU7XG5jb25zdCBBMTFZX01FTlVfSVRFTSA9ICgpID0+IFsncm9sZScsICdtZW51aXRlbSddO1xuZXhwb3J0cy5BMTFZX01FTlVfSVRFTSA9IEExMVlfTUVOVV9JVEVNO1xuY29uc3QgQTExWV9DT01CT0JPWCA9ICgpID0+IFsncm9sZScsICdjb21ib2JveCddO1xuZXhwb3J0cy5BMTFZX0NPTUJPQk9YID0gQTExWV9DT01CT0JPWDtcbmNvbnN0IEExMVlfTElTVEJPWCA9ICgpID0+IFsncm9sZScsICdsaXN0Ym94J107XG5leHBvcnRzLkExMVlfTElTVEJPWCA9IEExMVlfTElTVEJPWDtcbmNvbnN0IEExMVlfT1BUSU9OID0gKCkgPT4gWydyb2xlJywgJ29wdGlvbiddO1xuZXhwb3J0cy5BMTFZX09QVElPTiA9IEExMVlfT1BUSU9OO1xuY29uc3QgQTExWV9DSEVDS0JPWCA9ICgpID0+IFsncm9sZScsICdjaGVja2JveCddO1xuZXhwb3J0cy5BMTFZX0NIRUNLQk9YID0gQTExWV9DSEVDS0JPWDtcbmNvbnN0IEExMVlfU0NPUEVfQ09MID0gKCkgPT4gWydzY29wZScsICdjb2wnXTtcbmV4cG9ydHMuQTExWV9TQ09QRV9DT0wgPSBBMTFZX1NDT1BFX0NPTDtcbmNvbnN0IEExMVlfU0NPUEVfUk9XID0gKCkgPT4gWydzY29wZScsICdyb3cnXTtcbmV4cG9ydHMuQTExWV9TQ09QRV9ST1cgPSBBMTFZX1NDT1BFX1JPVztcbmNvbnN0IEExMVlfVEVYVCA9ICgpID0+IFsndHlwZScsICd0ZXh0J107XG5leHBvcnRzLkExMVlfVEVYVCA9IEExMVlfVEVYVDtcbmNvbnN0IEExMVlfTEFCRUwgPSB2YWwgPT4gWydhcmlhLWxhYmVsJywgdmFsXTtcbmV4cG9ydHMuQTExWV9MQUJFTCA9IEExMVlfTEFCRUw7XG5jb25zdCBBMTFZX0hJRERFTiA9ICgpID0+IFsnYXJpYS1oaWRkZW4nLCAndHJ1ZSddO1xuZXhwb3J0cy5BMTFZX0hJRERFTiA9IEExMVlfSElEREVOO1xuY29uc3QgQTExWV9ESVNBQkxFRCA9ICgpID0+IFsnYXJpYS1kaXNhYmxlZCcsICd0cnVlJ107XG5leHBvcnRzLkExMVlfRElTQUJMRUQgPSBBMTFZX0RJU0FCTEVEO1xuY29uc3QgQTExWV9NVUxUSVNFTEVDVEFCTEUgPSAoKSA9PiBbJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnXTtcbmV4cG9ydHMuQTExWV9NVUxUSVNFTEVDVEFCTEUgPSBBMTFZX01VTFRJU0VMRUNUQUJMRTtcbmNvbnN0IEExMVlfSEFTUE9QVVAgPSB2YWwgPT4gWydhcmlhLWhhc3BvcHVwJywgdmFsXTtcbmV4cG9ydHMuQTExWV9IQVNQT1BVUCA9IEExMVlfSEFTUE9QVVA7XG5jb25zdCBBMTFZX1JPV0NPVU5UID0gdmFsID0+IFsnYXJpYS1yb3djb3VudCcsIHZhbF07XG5leHBvcnRzLkExMVlfUk9XQ09VTlQgPSBBMTFZX1JPV0NPVU5UO1xuY29uc3QgQTExWV9DT0xDT1VOVCA9IHZhbCA9PiBbJ2FyaWEtY29sY291bnQnLCB2YWxdO1xuZXhwb3J0cy5BMTFZX0NPTENPVU5UID0gQTExWV9DT0xDT1VOVDtcbmNvbnN0IEExMVlfUk9XSU5ERVggPSB2YWwgPT4gWydhcmlhLXJvd2luZGV4JywgdmFsXTtcbmV4cG9ydHMuQTExWV9ST1dJTkRFWCA9IEExMVlfUk9XSU5ERVg7XG5jb25zdCBBMTFZX0NPTElOREVYID0gdmFsID0+IFsnYXJpYS1jb2xpbmRleCcsIHZhbF07XG5leHBvcnRzLkExMVlfQ09MSU5ERVggPSBBMTFZX0NPTElOREVYO1xuY29uc3QgQTExWV9FWFBBTkRFRCA9IHZhbCA9PiBbJ2FyaWEtZXhwYW5kZWQnLCB2YWxdO1xuZXhwb3J0cy5BMTFZX0VYUEFOREVEID0gQTExWV9FWFBBTkRFRDtcbmNvbnN0IEExMVlfU09SVCA9IHZhbCA9PiBbJ2FyaWEtc29ydCcsIHZhbF07XG5leHBvcnRzLkExMVlfU09SVCA9IEExMVlfU09SVDtcbmNvbnN0IEExMVlfUkVBRE9OTFkgPSAoKSA9PiBbJ2FyaWEtcmVhZG9ubHknLCAndHJ1ZSddO1xuZXhwb3J0cy5BMTFZX1JFQURPTkxZID0gQTExWV9SRUFET05MWTtcbmNvbnN0IEExMVlfSU5WQUxJRCA9ICgpID0+IFsnYXJpYS1pbnZhbGlkJywgJ3RydWUnXTtcbmV4cG9ydHMuQTExWV9JTlZBTElEID0gQTExWV9JTlZBTElEO1xuY29uc3QgQTExWV9DSEVDS0VEID0gdmFsID0+IFsnYXJpYS1jaGVja2VkJywgdmFsXTtcbmV4cG9ydHMuQTExWV9DSEVDS0VEID0gQTExWV9DSEVDS0VEO1xuY29uc3QgQTExWV9TRUxFQ1RFRCA9ICgpID0+IFsnYXJpYS1zZWxlY3RlZCcsICd0cnVlJ107XG5leHBvcnRzLkExMVlfU0VMRUNURUQgPSBBMTFZX1NFTEVDVEVEO1xuY29uc3QgQTExWV9BVVRPQ09NUExFVEUgPSAoKSA9PiBbJ2FyaWEtYXV0b2NvbXBsZXRlJywgJ2xpc3QnXTtcbmV4cG9ydHMuQTExWV9BVVRPQ09NUExFVEUgPSBBMTFZX0FVVE9DT01QTEVURTtcbmNvbnN0IEExMVlfQ09OVFJPTFMgPSB2YWwgPT4gWydhcmlhLWNvbnRyb2xzJywgdmFsXTtcbmV4cG9ydHMuQTExWV9DT05UUk9MUyA9IEExMVlfQ09OVFJPTFM7XG5jb25zdCBBMTFZX0FDVElWRURFU0NFTkRBTlQgPSB2YWwgPT4gWydhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLCB2YWxdO1xuZXhwb3J0cy5BMTFZX0FDVElWRURFU0NFTkRBTlQgPSBBMTFZX0FDVElWRURFU0NFTkRBTlQ7XG5jb25zdCBBMTFZX0xJVkUgPSB2YWwgPT4gWydhcmlhLWxpdmUnLCB2YWxdO1xuZXhwb3J0cy5BMTFZX0xJVkUgPSBBMTFZX0xJVkU7XG5jb25zdCBBMTFZX1JFTEVWQU5UID0gdmFsID0+IFsnYXJpYS1yZWxldmFudCcsIHZhbF07XG5leHBvcnRzLkExMVlfUkVMRVZBTlQgPSBBMTFZX1JFTEVWQU5UO1xuY29uc3QgQTExWV9TRVRTSVpFID0gdmFsID0+IFsnYXJpYS1zZXRzaXplJywgdmFsXTtcbmV4cG9ydHMuQTExWV9TRVRTSVpFID0gQTExWV9TRVRTSVpFO1xuY29uc3QgQTExWV9QT1NJTlNFVCA9IHZhbCA9PiBbJ2FyaWEtcG9zaW5zZXQnLCB2YWxdO1xuZXhwb3J0cy5BMTFZX1BPU0lOU0VUID0gQTExWV9QT1NJTlNFVDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYXJyYXlBdmcgPSBhcnJheUF2ZztcbmV4cG9ydHMuYXJyYXlFYWNoID0gYXJyYXlFYWNoO1xuZXhwb3J0cy5hcnJheUZpbHRlciA9IGFycmF5RmlsdGVyO1xuZXhwb3J0cy5hcnJheUZsYXR0ZW4gPSBhcnJheUZsYXR0ZW47XG5leHBvcnRzLmFycmF5TWFwID0gYXJyYXlNYXA7XG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XG5leHBvcnRzLmFycmF5TWluID0gYXJyYXlNaW47XG5leHBvcnRzLmFycmF5UmVkdWNlID0gYXJyYXlSZWR1Y2U7XG5leHBvcnRzLmFycmF5U3VtID0gYXJyYXlTdW07XG5leHBvcnRzLmFycmF5VW5pcXVlID0gYXJyYXlVbmlxdWU7XG5leHBvcnRzLmV4dGVuZEFycmF5ID0gZXh0ZW5kQXJyYXk7XG5leHBvcnRzLmdldERpZmZlcmVuY2VPZkFycmF5cyA9IGdldERpZmZlcmVuY2VPZkFycmF5cztcbmV4cG9ydHMuZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXMgPSBnZXRJbnRlcnNlY3Rpb25PZkFycmF5cztcbmV4cG9ydHMuZ2V0VW5pb25PZkFycmF5cyA9IGdldFVuaW9uT2ZBcnJheXM7XG5leHBvcnRzLnBpdm90ID0gcGl2b3Q7XG5leHBvcnRzLnN0cmluZ1RvQXJyYXkgPSBzdHJpbmdUb0FycmF5O1xuZXhwb3J0cy50bzJkQXJyYXkgPSB0bzJkQXJyYXk7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFyciBBbiBhcnJheSB0byBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiB0bzJkQXJyYXkoYXJyKSB7XG4gIGNvbnN0IGlsZW4gPSBhcnIubGVuZ3RoO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgaWxlbikge1xuICAgIGFycltpXSA9IFthcnJbaV1dO1xuICAgIGkgKz0gMTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7QXJyYXl9IGFyciBBbiBhcnJheSB0byBleHRlbmQuXG4gKiBAcGFyYW0ge0FycmF5fSBleHRlbnNpb24gVGhlIGRhdGEgdG8gZXh0ZW5kIGZyb20uXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZEFycmF5KGFyciwgZXh0ZW5zaW9uKSB7XG4gIGNvbnN0IGlsZW4gPSBleHRlbnNpb24ubGVuZ3RoO1xuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgaWxlbikge1xuICAgIGFyci5wdXNoKGV4dGVuc2lvbltpXSk7XG4gICAgaSArPSAxO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gYXJyIEFuIGFycmF5IHRvIHBpdm90LlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiBwaXZvdChhcnIpIHtcbiAgY29uc3QgcGl2b3RlZEFyciA9IFtdO1xuICBpZiAoIWFyciB8fCBhcnIubGVuZ3RoID09PSAwIHx8ICFhcnJbMF0gfHwgYXJyWzBdLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBwaXZvdGVkQXJyO1xuICB9XG4gIGNvbnN0IHJvd0NvdW50ID0gYXJyLmxlbmd0aDtcbiAgY29uc3QgY29sQ291bnQgPSBhcnJbMF0ubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcbiAgICAgIGlmICghcGl2b3RlZEFycltqXSkge1xuICAgICAgICBwaXZvdGVkQXJyW2pdID0gW107XG4gICAgICB9XG4gICAgICBwaXZvdGVkQXJyW2pdW2ldID0gYXJyW2ldW2pdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGl2b3RlZEFycjtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYC5yZWR1Y2VgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL2xvZGFzaC5qc30uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0geyp9IFthY2N1bXVsYXRvcl0gVGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbml0RnJvbUFycmF5XSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXMgdGhlIGluaXRpYWwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UmVkdWNlKGFycmF5LCBpdGVyYXRlZSwgYWNjdW11bGF0b3IsIGluaXRGcm9tQXJyYXkpIHtcbiAgbGV0IGluZGV4ID0gLTE7XG4gIGxldCBpdGVyYWJsZSA9IGFycmF5O1xuICBsZXQgcmVzdWx0ID0gYWNjdW11bGF0b3I7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICBpdGVyYWJsZSA9IEFycmF5LmZyb20oYXJyYXkpO1xuICB9XG4gIGNvbnN0IGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgaWYgKGluaXRGcm9tQXJyYXkgJiYgbGVuZ3RoKSB7XG4gICAgaW5kZXggKz0gMTtcbiAgICByZXN1bHQgPSBpdGVyYWJsZVtpbmRleF07XG4gIH1cbiAgaW5kZXggKz0gMTtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gaXRlcmF0ZWUocmVzdWx0LCBpdGVyYWJsZVtpbmRleF0sIGluZGV4LCBpdGVyYWJsZSk7XG4gICAgaW5kZXggKz0gMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGNhbGxiYWNrXG4gKiBzaG9ydGhhbmRzIGFuZCBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvbG9kYXNoLmpzfS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICBsZXQgaW5kZXggPSAwO1xuICBsZXQgaXRlcmFibGUgPSBhcnJheTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgIGl0ZXJhYmxlID0gQXJyYXkuZnJvbShhcnJheSk7XG4gIH1cbiAgY29uc3QgbGVuZ3RoID0gaXRlcmFibGUubGVuZ3RoO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IHJlc0luZGV4ID0gLTE7XG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gaXRlcmFibGVbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBpdGVyYWJsZSkpIHtcbiAgICAgIHJlc0luZGV4ICs9IDE7XG4gICAgICByZXN1bHRbcmVzSW5kZXhdID0gdmFsdWU7XG4gICAgfVxuICAgIGluZGV4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYC5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCBpdGVyYWJsZSA9IGFycmF5O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgaXRlcmFibGUgPSBBcnJheS5mcm9tKGFycmF5KTtcbiAgfVxuICBjb25zdCBsZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgcmVzSW5kZXggPSAtMTtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVyYWJsZVtpbmRleF07XG4gICAgcmVzSW5kZXggKz0gMTtcbiAgICByZXN1bHRbcmVzSW5kZXhdID0gaXRlcmF0ZWUodmFsdWUsIGluZGV4LCBpdGVyYWJsZSk7XG4gICAgaW5kZXggKz0gMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgLmZvckVhY2hgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBjYWxsYmFja1xuICogc2hvcnRoYW5kcyBhbmQgYHRoaXNgIGJpbmRpbmcuXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL2xvZGFzaC5qc30uXG4gKlxuICogQHBhcmFtIHtBcnJheXwqfSBhcnJheSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyIG9yIGFuIGFueSBlbGVtZW50IHdpdGggaW1wbGVtZW50ZWQgaXRlcmF0b3IgcHJvdG9jb2wuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RWFjaChhcnJheSwgaXRlcmF0ZWUpIHtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGl0ZXJhYmxlID0gYXJyYXk7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICBpdGVyYWJsZSA9IEFycmF5LmZyb20oYXJyYXkpO1xuICB9XG4gIGNvbnN0IGxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSAxO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgc3VtIHZhbHVlIGZvciBlYWNoIGl0ZW0gb2YgdGhlIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBjYWxjdWxhdGVkIHN1bSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTdW0oYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCAoYSwgYikgPT4gYSArIGIsIDApO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGhpZ2hlc3QgdmFsdWUgZnJvbSBhbiBhcnJheS4gQ2FuIGJlIGFycmF5IG9mIG51bWJlcnMgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIE5PVElDRTogTWl4ZWQgdmFsdWVzIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBoaWdoZXN0IHZhbHVlIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWF4KGFycmF5KSB7XG4gIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgKGEsIGIpID0+IGEgPiBiID8gYSA6IGIsIEFycmF5LmlzQXJyYXkoYXJyYXkpID8gYXJyYXlbMF0gOiB1bmRlZmluZWQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGxvd2VzdCB2YWx1ZSBmcm9tIGFuIGFycmF5LiBDYW4gYmUgYXJyYXkgb2YgbnVtYmVycyBvciBhcnJheSBvZiBzdHJpbmdzLlxuICogTk9USUNFOiBNaXhlZCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGxvd2VzdCB2YWx1ZSBmcm9tIGFuIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheU1pbihhcnJheSkge1xuICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIChhLCBiKSA9PiBhIDwgYiA/IGEgOiBiLCBBcnJheS5pc0FycmF5KGFycmF5KSA/IGFycmF5WzBdIDogdW5kZWZpbmVkKTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgYXZlcmFnZSB2YWx1ZSBmb3IgZWFjaCBpdGVtIG9mIHRoZSBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgY2FsY3VsYXRlZCBhdmVyYWdlIHZhbHVlLlxuICovXG5mdW5jdGlvbiBhcnJheUF2ZyhhcnJheSkge1xuICBpZiAoIWFycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIHJldHVybiBhcnJheVN1bShhcnJheSkgLyBhcnJheS5sZW5ndGg7XG59XG5cbi8qKlxuICogRmxhdHRlbiBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IEFycmF5IG9mIEFycmF5cy5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYXJyYXlGbGF0dGVuKGFycmF5KSB7XG4gIHJldHVybiBhcnJheVJlZHVjZShhcnJheSwgKGluaXRpYWwsIHZhbHVlKSA9PiBpbml0aWFsLmNvbmNhdChBcnJheS5pc0FycmF5KHZhbHVlKSA/IGFycmF5RmxhdHRlbih2YWx1ZSkgOiB2YWx1ZSksIFtdKTtcbn1cblxuLyoqXG4gKiBVbmlxdWUgdmFsdWVzIGluIHRoZSBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYXJyYXlVbmlxdWUoYXJyYXkpIHtcbiAgY29uc3QgdW5pcXVlID0gW107XG4gIGFycmF5RWFjaChhcnJheSwgdmFsdWUgPT4ge1xuICAgIGlmICh1bmlxdWUuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICB1bmlxdWUucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuaXF1ZTtcbn1cblxuLyoqXG4gKiBEaWZmZXJlbmNlcyBmcm9tIHR3byBvciBtb3JlIGFycmF5cy5cbiAqXG4gKiBAcGFyYW0gey4uLkFycmF5fSBhcnJheXMgQXJyYXkgb2Ygc3RyaW5ncyBvciBhcnJheSBvZiBudW1iZXJzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYXJyYXlzLlxuICovXG5mdW5jdGlvbiBnZXREaWZmZXJlbmNlT2ZBcnJheXMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcnJheXMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJyYXlzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBbLi4uYXJyYXlzXTtcbiAgbGV0IGZpbHRlcmVkRmlyc3RBcnJheSA9IGZpcnN0O1xuICBhcnJheUVhY2gocmVzdCwgYXJyYXkgPT4ge1xuICAgIGZpbHRlcmVkRmlyc3RBcnJheSA9IGZpbHRlcmVkRmlyc3RBcnJheS5maWx0ZXIodmFsdWUgPT4gIWFycmF5LmluY2x1ZGVzKHZhbHVlKSk7XG4gIH0pO1xuICByZXR1cm4gZmlsdGVyZWRGaXJzdEFycmF5O1xufVxuXG4vKipcbiAqIEludGVyc2VjdGlvbiBvZiB0d28gb3IgbW9yZSBhcnJheXMuXG4gKlxuICogQHBhcmFtIHsuLi5BcnJheX0gYXJyYXlzIEFycmF5IG9mIHN0cmluZ3Mgb3IgYXJyYXkgb2YgbnVtYmVycy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBlbGVtZW50cyB0aGF0IGV4aXN0cyBpbiBldmVyeSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXMoKSB7XG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJyYXlzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgYXJyYXlzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IFsuLi5hcnJheXNdO1xuICBsZXQgZmlsdGVyZWRGaXJzdEFycmF5ID0gZmlyc3Q7XG4gIGFycmF5RWFjaChyZXN0LCBhcnJheSA9PiB7XG4gICAgZmlsdGVyZWRGaXJzdEFycmF5ID0gZmlsdGVyZWRGaXJzdEFycmF5LmZpbHRlcih2YWx1ZSA9PiBhcnJheS5pbmNsdWRlcyh2YWx1ZSkpO1xuICB9KTtcbiAgcmV0dXJuIGZpbHRlcmVkRmlyc3RBcnJheTtcbn1cblxuLyoqXG4gKiBVbmlvbiBvZiB0d28gb3IgbW9yZSBhcnJheXMuXG4gKlxuICogQHBhcmFtIHsuLi5BcnJheX0gYXJyYXlzIEFycmF5IG9mIHN0cmluZ3Mgb3IgYXJyYXkgb2YgbnVtYmVycy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgZWxlbWVudHMgdGhhdCBleGlzdCBpbiBhbnkgb2YgdGhlIGFycmF5cywgd2l0aG91dCBkdXBsaWNhdGVzLlxuICovXG5mdW5jdGlvbiBnZXRVbmlvbk9mQXJyYXlzKCkge1xuICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFycmF5cyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgIGFycmF5c1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICB9XG4gIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBbLi4uYXJyYXlzXTtcbiAgY29uc3Qgc2V0ID0gbmV3IFNldChmaXJzdCk7XG4gIGFycmF5RWFjaChyZXN0LCBhcnJheSA9PiB7XG4gICAgYXJyYXlFYWNoKGFycmF5LCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXNldC5oYXModmFsdWUpKSB7XG4gICAgICAgIHNldC5hZGQodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIEFycmF5LmZyb20oc2V0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgc2VwYXJhdGVkIHN0cmluZ3MgdG8gYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgQSBzdHJpbmcgb2YgY2xhc3MgbmFtZShzKS5cbiAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gZGVsaW1pdGVyIFRoZSBwYXR0ZXJuIGRlc2NyaWJpbmcgd2hlcmUgZWFjaCBzcGxpdCBzaG91bGQgb2NjdXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IFJldHVybnMgYXJyYXkgb2Ygc3RyaW5nIG9yIGVtcHR5IGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHZhbHVlKSB7XG4gIGxldCBkZWxpbWl0ZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcgJztcbiAgcmV0dXJuIHZhbHVlLnNwbGl0KGRlbGltaXRlcik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzQ2hyb21lID0gaXNDaHJvbWU7XG5leHBvcnRzLmlzQ2hyb21lV2ViS2l0ID0gaXNDaHJvbWVXZWJLaXQ7XG5leHBvcnRzLmlzRWRnZSA9IGlzRWRnZTtcbmV4cG9ydHMuaXNFZGdlV2ViS2l0ID0gaXNFZGdlV2ViS2l0O1xuZXhwb3J0cy5pc0ZpcmVmb3ggPSBpc0ZpcmVmb3g7XG5leHBvcnRzLmlzRmlyZWZveFdlYktpdCA9IGlzRmlyZWZveFdlYktpdDtcbmV4cG9ydHMuaXNJT1MgPSBpc0lPUztcbmV4cG9ydHMuaXNJcGFkT1MgPSBpc0lwYWRPUztcbmV4cG9ydHMuaXNMaW51eE9TID0gaXNMaW51eE9TO1xuZXhwb3J0cy5pc01hY09TID0gaXNNYWNPUztcbmV4cG9ydHMuaXNNb2JpbGVCcm93c2VyID0gaXNNb2JpbGVCcm93c2VyO1xuZXhwb3J0cy5pc1NhZmFyaSA9IGlzU2FmYXJpO1xuZXhwb3J0cy5pc1dpbmRvd3NPUyA9IGlzV2luZG93c09TO1xuZXhwb3J0cy5zZXRCcm93c2VyTWV0YSA9IHNldEJyb3dzZXJNZXRhO1xuZXhwb3J0cy5zZXRQbGF0Zm9ybU1ldGEgPSBzZXRQbGF0Zm9ybU1ldGE7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcbnZhciBfZmVhdHVyZSA9IHJlcXVpcmUoXCIuL2ZlYXR1cmVcIik7XG5jb25zdCB0ZXN0ZXIgPSB0ZXN0ZXJGdW5jID0+IHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHZhbHVlOiBmYWxzZVxuICB9O1xuICByZXN1bHQudGVzdCA9ICh1YSwgdmVuZG9yKSA9PiB7XG4gICAgcmVzdWx0LnZhbHVlID0gdGVzdGVyRnVuYyh1YSwgdmVuZG9yKTtcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBicm93c2VycyA9IHtcbiAgY2hyb21lOiB0ZXN0ZXIoKHVhLCB2ZW5kb3IpID0+IC9DaHJvbWUvLnRlc3QodWEpICYmIC9Hb29nbGUvLnRlc3QodmVuZG9yKSksXG4gIGNocm9tZVdlYktpdDogdGVzdGVyKHVhID0+IC9DcmlPUy8udGVzdCh1YSkpLFxuICBlZGdlOiB0ZXN0ZXIodWEgPT4gL0VkZ2UvLnRlc3QodWEpKSxcbiAgZWRnZVdlYktpdDogdGVzdGVyKHVhID0+IC9FZGdpT1MvLnRlc3QodWEpKSxcbiAgZmlyZWZveDogdGVzdGVyKHVhID0+IC9GaXJlZm94Ly50ZXN0KHVhKSksXG4gIGZpcmVmb3hXZWJLaXQ6IHRlc3Rlcih1YSA9PiAvRnhpT1MvLnRlc3QodWEpKSxcbiAgbW9iaWxlOiB0ZXN0ZXIodWEgPT4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KHVhKSksXG4gIHNhZmFyaTogdGVzdGVyKCh1YSwgdmVuZG9yKSA9PiAvU2FmYXJpLy50ZXN0KHVhKSAmJiAvQXBwbGUgQ29tcHV0ZXIvLnRlc3QodmVuZG9yKSlcbn07XG5jb25zdCBwbGF0Zm9ybXMgPSB7XG4gIG1hYzogdGVzdGVyKHBsYXRmb3JtID0+IC9eTWFjLy50ZXN0KHBsYXRmb3JtKSksXG4gIHdpbjogdGVzdGVyKHBsYXRmb3JtID0+IC9eV2luLy50ZXN0KHBsYXRmb3JtKSksXG4gIGxpbnV4OiB0ZXN0ZXIocGxhdGZvcm0gPT4gL15MaW51eC8udGVzdChwbGF0Zm9ybSkpLFxuICBpb3M6IHRlc3Rlcih1YSA9PiAvaVBob25lfGlQYWR8aVBvZC9pLnRlc3QodWEpKVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gW21ldGFPYmplY3RdIFRoZSBicm93c2VyIGlkZW50aXR5IGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gW21ldGFPYmplY3QudXNlckFnZW50XSBUaGUgdXNlciBhZ2VudCByZXBvcnRlZCBieSBicm93c2VyLlxuICogQHBhcmFtIHtvYmplY3R9IFttZXRhT2JqZWN0LnZlbmRvcl0gVGhlIHZlbmRvciBuYW1lIHJlcG9ydGVkIGJ5IGJyb3dzZXIuXG4gKi9cbmZ1bmN0aW9uIHNldEJyb3dzZXJNZXRhKCkge1xuICBsZXQge1xuICAgIHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQsXG4gICAgdmVuZG9yID0gbmF2aWdhdG9yLnZlbmRvclxuICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoYnJvd3NlcnMsIF9yZWYgPT4ge1xuICAgIGxldCB7XG4gICAgICB0ZXN0XG4gICAgfSA9IF9yZWY7XG4gICAgcmV0dXJuIHZvaWQgdGVzdCh1c2VyQWdlbnQsIHZlbmRvcik7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBbbWV0YU9iamVjdF0gVGhlIHBsYXRmb3JtIGlkZW50aXR5IGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gW21ldGFPYmplY3QucGxhdGZvcm1dIFRoZSBwbGF0Zm9ybSBJRC5cbiAqL1xuZnVuY3Rpb24gc2V0UGxhdGZvcm1NZXRhKCkge1xuICBsZXQge1xuICAgIHBsYXRmb3JtID0gbmF2aWdhdG9yLnBsYXRmb3JtXG4gIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShwbGF0Zm9ybXMsIF9yZWYyID0+IHtcbiAgICBsZXQge1xuICAgICAgdGVzdFxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4gdm9pZCB0ZXN0KHBsYXRmb3JtKTtcbiAgfSk7XG59XG5pZiAoKDAsIF9mZWF0dXJlLmlzQ1NSKSgpKSB7XG4gIHNldEJyb3dzZXJNZXRhKCk7XG4gIHNldFBsYXRmb3JtTWV0YSgpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nocm9tZSgpIHtcbiAgcmV0dXJuIGJyb3dzZXJzLmNocm9tZS52YWx1ZTtcbn1cblxuLyoqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDaHJvbWVXZWJLaXQoKSB7XG4gIHJldHVybiBicm93c2Vycy5jaHJvbWVXZWJLaXQudmFsdWU7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmlyZWZveCgpIHtcbiAgcmV0dXJuIGJyb3dzZXJzLmZpcmVmb3gudmFsdWU7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmlyZWZveFdlYktpdCgpIHtcbiAgcmV0dXJuIGJyb3dzZXJzLmZpcmVmb3hXZWJLaXQudmFsdWU7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICByZXR1cm4gYnJvd3NlcnMuc2FmYXJpLnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0VkZ2UoKSB7XG4gIHJldHVybiBicm93c2Vycy5lZGdlLnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0VkZ2VXZWJLaXQoKSB7XG4gIHJldHVybiBicm93c2Vycy5lZGdlV2ViS2l0LnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc01vYmlsZUJyb3dzZXIoKSB7XG4gIHJldHVybiBicm93c2Vycy5tb2JpbGUudmFsdWU7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSU9TKCkge1xuICByZXR1cm4gcGxhdGZvcm1zLmlvcy52YWx1ZTtcbn1cblxuLyoqXG4gKiBBIGhhY2t5IHdheSB0byByZWNvZ25pemUgdGhlIGlQYWQuIFNpbmNlIGlPUyAxMywgdGhlIGlQYWQgb24gU2FmYXJpIG1pbWljcyBtYWNPUyBiZWhhdmlvciBhbmQgdXNlciBhZ2VudC5cbiAqXG4gKiBAc2VlIHtAaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU3ODM4Mzg1fVxuICogQHBhcmFtIHtvYmplY3R9IFttZXRhT2JqZWN0XSBUaGUgYnJvd3NlciBpZGVudGl0eSBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFttZXRhT2JqZWN0Lm1heFRvdWNoUG9pbnRzXSBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2ltdWx0YW5vdXMgdG91Y2ggcG9pbnRzLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSXBhZE9TKCkge1xuICBsZXQge1xuICAgIG1heFRvdWNoUG9pbnRzXG4gIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG5hdmlnYXRvcjtcbiAgcmV0dXJuIG1heFRvdWNoUG9pbnRzID4gMiAmJiBwbGF0Zm9ybXMubWFjLnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1dpbmRvd3NPUygpIHtcbiAgcmV0dXJuIHBsYXRmb3Jtcy53aW4udmFsdWU7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTWFjT1MoKSB7XG4gIHJldHVybiBwbGF0Zm9ybXMubWFjLnZhbHVlO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0xpbnV4T1MoKSB7XG4gIHJldHVybiBwbGF0Zm9ybXMubGludXgudmFsdWU7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmVycm9yID0gZXJyb3I7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLndhcm4gPSB3YXJuO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuL21peGVkXCIpO1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzICovXG5cbi8qKlxuICogXCJJbiBJbnRlcm5ldCBFeHBsb3JlciA5IChhbmQgOCksIHRoZSBjb25zb2xlIG9iamVjdCBpcyBvbmx5IGV4cG9zZWQgd2hlbiB0aGUgZGV2ZWxvcGVyIHRvb2xzIGFyZSBvcGVuZWRcbiAqIGZvciBhIHBhcnRpY3VsYXIgdGFiLlwiLlxuICpcbiAqIFNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU0NzMxOTMuXG4gKi9cblxuLyoqXG4gKiBMb2dzIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGBjb25zb2xlYCBvYmplY3QgaXMgZXhwb3NlZC5cbiAqXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgVmFsdWVzIHdoaWNoIHdpbGwgYmUgbG9nZ2VkLlxuICovXG5mdW5jdGlvbiBsb2coKSB7XG4gIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoY29uc29sZSkpIHtcbiAgICBjb25zb2xlLmxvZyguLi5hcmd1bWVudHMpO1xuICB9XG59XG5cbi8qKlxuICogTG9ncyB3YXJuIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBgY29uc29sZWAgb2JqZWN0IGlzIGV4cG9zZWQuXG4gKlxuICogQHBhcmFtIHsuLi4qfSBhcmdzIFZhbHVlcyB3aGljaCB3aWxsIGJlIGxvZ2dlZC5cbiAqL1xuZnVuY3Rpb24gd2FybigpIHtcbiAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShjb25zb2xlKSkge1xuICAgIGNvbnNvbGUud2FybiguLi5hcmd1bWVudHMpO1xuICB9XG59XG5cbi8qKlxuICogTG9ncyBpbmZvIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBgY29uc29sZWAgb2JqZWN0IGlzIGV4cG9zZWQuXG4gKlxuICogQHBhcmFtIHsuLi4qfSBhcmdzIFZhbHVlcyB3aGljaCB3aWxsIGJlIGxvZ2dlZC5cbiAqL1xuZnVuY3Rpb24gaW5mbygpIHtcbiAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShjb25zb2xlKSkge1xuICAgIGNvbnNvbGUuaW5mbyguLi5hcmd1bWVudHMpO1xuICB9XG59XG5cbi8qKlxuICogTG9ncyBlcnJvciB0byB0aGUgY29uc29sZSBpZiB0aGUgYGNvbnNvbGVgIG9iamVjdCBpcyBleHBvc2VkLlxuICpcbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBWYWx1ZXMgd2hpY2ggd2lsbCBiZSBsb2dnZWQuXG4gKi9cbmZ1bmN0aW9uIGVycm9yKCkge1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGNvbnNvbGUpKSB7XG4gICAgY29uc29sZS5lcnJvciguLi5hcmd1bWVudHMpO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvdW50Rmlyc3RSb3dLZXlzID0gY291bnRGaXJzdFJvd0tleXM7XG5leHBvcnRzLmNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhID0gY3JlYXRlRW1wdHlTcHJlYWRzaGVldERhdGE7XG5leHBvcnRzLmNyZWF0ZVNwcmVhZHNoZWV0RGF0YSA9IGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTtcbmV4cG9ydHMuY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhID0gY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhO1xuZXhwb3J0cy5kYXRhUm93VG9DaGFuZ2VzQXJyYXkgPSBkYXRhUm93VG9DaGFuZ2VzQXJyYXk7XG5leHBvcnRzLmlzQXJyYXlPZkFycmF5cyA9IGlzQXJyYXlPZkFycmF5cztcbmV4cG9ydHMuaXNBcnJheU9mT2JqZWN0cyA9IGlzQXJyYXlPZk9iamVjdHM7XG5leHBvcnRzLnNwcmVhZHNoZWV0Q29sdW1uSW5kZXggPSBzcHJlYWRzaGVldENvbHVtbkluZGV4O1xuZXhwb3J0cy5zcHJlYWRzaGVldENvbHVtbkxhYmVsID0gc3ByZWFkc2hlZXRDb2x1bW5MYWJlbDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuY29uc3QgQ09MVU1OX0xBQkVMX0JBU0UgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuY29uc3QgQ09MVU1OX0xBQkVMX0JBU0VfTEVOR1RIID0gQ09MVU1OX0xBQkVMX0JBU0UubGVuZ3RoO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBzcHJlYWRzaGVldC1saWtlIGNvbHVtbiBuYW1lczogQSwgQiwgQywgLi4uLCBaLCBBQSwgQUIsIGV0Yy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggQ29sdW1uIGluZGV4LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3ByZWFkc2hlZXRDb2x1bW5MYWJlbChpbmRleCkge1xuICBsZXQgZGl2aWRlbmQgPSBpbmRleCArIDE7XG4gIGxldCBjb2x1bW5MYWJlbCA9ICcnO1xuICBsZXQgbW9kdWxvO1xuICB3aGlsZSAoZGl2aWRlbmQgPiAwKSB7XG4gICAgbW9kdWxvID0gKGRpdmlkZW5kIC0gMSkgJSBDT0xVTU5fTEFCRUxfQkFTRV9MRU5HVEg7XG4gICAgY29sdW1uTGFiZWwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgbW9kdWxvKSArIGNvbHVtbkxhYmVsO1xuICAgIGRpdmlkZW5kID0gcGFyc2VJbnQoKGRpdmlkZW5kIC0gbW9kdWxvKSAvIENPTFVNTl9MQUJFTF9CQVNFX0xFTkdUSCwgMTApO1xuICB9XG4gIHJldHVybiBjb2x1bW5MYWJlbDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgc3ByZWFkc2hlZXQtbGlrZSBjb2x1bW4gaW5kZXggZnJvbSB0aGVpcnMgbGFiZWxzOiBBLCBCLCBDIC4uLi4sIFosIEFBLCBBQiwgZXRjLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBDb2x1bW4gbGFiZWwuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBzcHJlYWRzaGVldENvbHVtbkluZGV4KGxhYmVsKSB7XG4gIGxldCByZXN1bHQgPSAwO1xuICBpZiAobGFiZWwpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IGxhYmVsLmxlbmd0aCAtIDE7IGkgPCBsYWJlbC5sZW5ndGg7IGkgKz0gMSwgaiAtPSAxKSB7XG4gICAgICByZXN1bHQgKz0gQ09MVU1OX0xBQkVMX0JBU0VfTEVOR1RIICoqIGogKiAoQ09MVU1OX0xBQkVMX0JBU0UuaW5kZXhPZihsYWJlbFtpXSkgKyAxKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0IC09IDE7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyAyRCBhcnJheSBvZiBFeGNlbC1saWtlIHZhbHVlcyBcIkExXCIsIFwiQTJcIiwgLi4uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgTnVtYmVyIG9mIHJvd3MgdG8gZ2VuZXJhdGUuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1ucyBOdW1iZXIgb2YgY29sdW1ucyB0byBnZW5lcmF0ZS5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU3ByZWFkc2hlZXREYXRhKCkge1xuICBsZXQgcm93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMTAwO1xuICBsZXQgY29sdW1ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogNDtcbiAgY29uc3QgX3Jvd3MgPSBbXTtcbiAgbGV0IGk7XG4gIGxldCBqO1xuICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgY29uc3Qgcm93ID0gW107XG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgcm93LnB1c2goc3ByZWFkc2hlZXRDb2x1bW5MYWJlbChqKSArIChpICsgMSkpO1xuICAgIH1cbiAgICBfcm93cy5wdXNoKHJvdyk7XG4gIH1cbiAgcmV0dXJuIF9yb3dzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgMkQgYXJyYXkgb2YgRXhjZWwtbGlrZSB2YWx1ZXMgXCJBMVwiLCBcIkEyXCIsIGFzIGFuIGFycmF5IG9mIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgTnVtYmVyIG9mIHJvd3MgdG8gZ2VuZXJhdGUuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sQ291bnQgTnVtYmVyIG9mIGNvbHVtbnMgdG8gZ2VuZXJhdGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YSgpIHtcbiAgbGV0IHJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IDEwMDtcbiAgbGV0IGNvbENvdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiA0O1xuICBjb25zdCBfcm93cyA9IFtdO1xuICBsZXQgaTtcbiAgbGV0IGo7XG4gIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICBjb25zdCByb3cgPSB7fTtcbiAgICBmb3IgKGogPSAwOyBqIDwgY29sQ291bnQ7IGorKykge1xuICAgICAgcm93W2Bwcm9wJHtqfWBdID0gc3ByZWFkc2hlZXRDb2x1bW5MYWJlbChqKSArIChpICsgMSk7XG4gICAgfVxuICAgIF9yb3dzLnB1c2gocm93KTtcbiAgfVxuICByZXR1cm4gX3Jvd3M7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGFuIGVtcHR5IGRhdGEgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dzIE51bWJlciBvZiByb3dzIHRvIGdlbmVyYXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgTnVtYmVyIG9mIGNvbHVtbnMgdG8gZ2VuZXJhdGUuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhKHJvd3MsIGNvbHVtbnMpIHtcbiAgY29uc3QgZGF0YSA9IFtdO1xuICBsZXQgcm93O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgIHJvdyA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICByb3cucHVzaCgnJyk7XG4gICAgfVxuICAgIGRhdGEucHVzaChyb3cpO1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhIGRhdGEgcm93IChlaXRoZXIgYW4gYXJyYXkgb3IgYW4gb2JqZWN0KSBvciBhbiBhcnJheSBvZiBkYXRhIHJvd3MgdG8gYXJyYXkgb2YgY2hhbmdlcyBpbiBhIGZvcm0gb2YgYFtyb3csXG4gKiBwcm9wL2NvbCwgdmFsdWVdYC4gQ29udmVuaWVudCB0byB1c2Ugd2l0aCBgc2V0RGF0YUF0Um93UHJvcGAgYW5kIGBzZXRTb3VyY2VEYXRhQXRDZWxsYCBtZXRob2RzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl8b2JqZWN0fSBkYXRhUm93IE9iamVjdCBvZiByb3cgZGF0YSwgYXJyYXkgb2Ygcm93IGRhdGEgb3IgYW4gYXJyYXkgb2YgZWl0aGVyLlxuICogQHBhcmFtIHtudW1iZXJ9IHJvd09mZnNldCBSb3cgb2Zmc2V0IHRvIGJlIHBhc3NlZCB0byB0aGUgcmVzdWx0aW5nIGNoYW5nZSBsaXN0LiBEZWZhdWx0cyB0byBgMGAuXG4gKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIGNoYW5nZXMgKGluIGEgZm9ybSBvZiBhbiBhcnJheSkuXG4gKi9cbmZ1bmN0aW9uIGRhdGFSb3dUb0NoYW5nZXNBcnJheShkYXRhUm93KSB7XG4gIGxldCByb3dPZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIGxldCBkYXRhUm93cyA9IGRhdGFSb3c7XG4gIGNvbnN0IGNoYW5nZXNBcnJheSA9IFtdO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YVJvdykgfHwgIUFycmF5LmlzQXJyYXkoZGF0YVJvd1swXSkpIHtcbiAgICBkYXRhUm93cyA9IFtkYXRhUm93XTtcbiAgfVxuICBkYXRhUm93cy5mb3JFYWNoKChyb3csIHJvd0luZGV4KSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93KSkge1xuICAgICAgcm93LmZvckVhY2goKHZhbHVlLCBjb2x1bW4pID0+IHtcbiAgICAgICAgY2hhbmdlc0FycmF5LnB1c2goW3Jvd0luZGV4ICsgcm93T2Zmc2V0LCBjb2x1bW4sIHZhbHVlXSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMocm93KS5mb3JFYWNoKHByb3BOYW1lID0+IHtcbiAgICAgICAgY2hhbmdlc0FycmF5LnB1c2goW3Jvd0luZGV4ICsgcm93T2Zmc2V0LCBwcm9wTmFtZSwgcm93W3Byb3BOYW1lXV0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoYW5nZXNBcnJheTtcbn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGtleXMgKG9yLCBiYXNpY2FsbHksIGNvbHVtbnMgd2hlbiB0aGUgZGF0YSBpcyBhbiBhcnJheSBvciBhcnJheXMpIGluIHRoZSBmaXJzdCByb3cgb2YgdGhlXG4gKiBwcm92aWRlZCBkYXRhc2V0LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGRhdGFzZXQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBOdW1iZXIgb2Yga2V5cyBpbiB0aGUgZmlyc3Qgcm93IG9mIHRoZSBkYXRhc2V0LlxuICovXG5mdW5jdGlvbiBjb3VudEZpcnN0Um93S2V5cyhkYXRhKSB7XG4gIGxldCByZXN1bHQgPSAwO1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgIGlmIChkYXRhWzBdICYmIEFycmF5LmlzQXJyYXkoZGF0YVswXSkpIHtcbiAgICAgIHJlc3VsdCA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoZGF0YVswXSAmJiAoMCwgX29iamVjdC5pc09iamVjdCkoZGF0YVswXSkpIHtcbiAgICAgIHJlc3VsdCA9ICgwLCBfb2JqZWN0LmRlZXBPYmplY3RTaXplKShkYXRhWzBdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBkYXRhc2V0IGlzIGEgKm5vbi1lbXB0eSogYXJyYXkgb2YgYXJyYXlzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgRGF0YXNldCB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiBkYXRhIGlzIGFuIGFycmF5IG9mIGFycmF5cywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlPZkFycmF5cyhkYXRhKSB7XG4gIHJldHVybiAhIShBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoICYmIGRhdGEuZXZlcnkoZWwgPT4gQXJyYXkuaXNBcnJheShlbCkpKTtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBkYXRhc2V0IGlzIGEgKm5vbi1lbXB0eSogYXJyYXkgb2Ygb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIERhdGFzZXQgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgZGF0YSBpcyBhbiBhcnJheSBvZiBvYmplY3RzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNBcnJheU9mT2JqZWN0cyhkYXRhKSB7XG4gIHJldHVybiAhIShBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoICYmIGRhdGEuZXZlcnkoZWwgPT4gdHlwZW9mIGVsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShlbCkgJiYgZWwgIT09IG51bGwpKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0Tm9ybWFsaXplZERhdGUgPSBnZXROb3JtYWxpemVkRGF0ZTtcbi8qKlxuICogR2V0IG5vcm1hbGl6ZWQgRGF0ZSBvYmplY3QgZm9yIHRoZSBJU08gZm9ybWF0dGVkIGRhdGUgc3RyaW5ncy5cbiAqIE5hdGl2ZWx5LCB0aGUgZGF0ZSBvYmplY3QgcGFyc2VkIGZyb20gYSBJU08gODYwMSBzdHJpbmcgd2lsbCBiZSBvZmZzZXR0ZWQgYnkgdGhlIHRpbWV6b25lIGRpZmZlcmVuY2UsIHdoaWNoIG1heSByZXN1bHQgaW4gcmV0dXJuaW5nIGEgd3JvbmcgZGF0ZS5cbiAqIFNlZTogR2l0aHViIGlzc3VlICMzMzM4LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlU3RyaW5nIFN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGUuXG4gKiBAcmV0dXJucyB7RGF0ZX0gVGhlIHByb3BlciBEYXRlIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZERhdGUoZGF0ZVN0cmluZykge1xuICBjb25zdCBuYXRpdmVEYXRlID0gbmV3IERhdGUoZGF0ZVN0cmluZyk7XG5cbiAgLy8gTmFOIGlmIGRhdGVTdHJpbmcgaXMgbm90IGluIElTTyBmb3JtYXRcbiAgaWYgKCFpc05hTihuZXcgRGF0ZShgJHtkYXRlU3RyaW5nfVQwMDowMGApLmdldERhdGUoKSkpIHtcbiAgICAvLyBDb21wZW5zYXRlIHRpbWV6b25lIG9mZnNldFxuICAgIHJldHVybiBuZXcgRGF0ZShuYXRpdmVEYXRlLmdldFRpbWUoKSArIG5hdGl2ZURhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKTtcbiAgfVxuICByZXR1cm4gbmF0aXZlRGF0ZTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYWRkQ2xhc3MgPSBhZGRDbGFzcztcbmV4cG9ydHMuYWRkRXZlbnQgPSBhZGRFdmVudDtcbmV4cG9ydHMuY2xlYXJUZXh0U2VsZWN0aW9uID0gY2xlYXJUZXh0U2VsZWN0aW9uO1xuZXhwb3J0cy5jbG9zZXN0ID0gY2xvc2VzdDtcbmV4cG9ydHMuY2xvc2VzdERvd24gPSBjbG9zZXN0RG93bjtcbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmV4cG9ydHMuZmFzdElubmVySFRNTCA9IGZhc3RJbm5lckhUTUw7XG5leHBvcnRzLmZhc3RJbm5lclRleHQgPSBmYXN0SW5uZXJUZXh0O1xuZXhwb3J0cy5nZXRDYXJldFBvc2l0aW9uID0gZ2V0Q2FyZXRQb3NpdGlvbjtcbmV4cG9ydHMuZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGU7XG5leHBvcnRzLmdldENzc1RyYW5zZm9ybSA9IGdldENzc1RyYW5zZm9ybTtcbmV4cG9ydHMuZ2V0RnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50O1xuZXhwb3J0cy5nZXRNYXhpbXVtU2Nyb2xsTGVmdCA9IGdldE1heGltdW1TY3JvbGxMZWZ0O1xuZXhwb3J0cy5nZXRNYXhpbXVtU2Nyb2xsVG9wID0gZ2V0TWF4aW11bVNjcm9sbFRvcDtcbmV4cG9ydHMuZ2V0UGFyZW50ID0gZ2V0UGFyZW50O1xuZXhwb3J0cy5nZXRQYXJlbnRXaW5kb3cgPSBnZXRQYXJlbnRXaW5kb3c7XG5leHBvcnRzLmdldFNjcm9sbExlZnQgPSBnZXRTY3JvbGxMZWZ0O1xuZXhwb3J0cy5nZXRTY3JvbGxUb3AgPSBnZXRTY3JvbGxUb3A7XG5leHBvcnRzLmdldFNjcm9sbGFibGVFbGVtZW50ID0gZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ7XG5leHBvcnRzLmdldFNjcm9sbGJhcldpZHRoID0gZ2V0U2Nyb2xsYmFyV2lkdGg7XG5leHBvcnRzLmdldFNlbGVjdGlvbkVuZFBvc2l0aW9uID0gZ2V0U2VsZWN0aW9uRW5kUG9zaXRpb247XG5leHBvcnRzLmdldFNlbGVjdGlvblRleHQgPSBnZXRTZWxlY3Rpb25UZXh0O1xuZXhwb3J0cy5nZXRTdHlsZSA9IGdldFN0eWxlO1xuZXhwb3J0cy5nZXRUcmltbWluZ0NvbnRhaW5lciA9IGdldFRyaW1taW5nQ29udGFpbmVyO1xuZXhwb3J0cy5nZXRXaW5kb3dTY3JvbGxMZWZ0ID0gZ2V0V2luZG93U2Nyb2xsTGVmdDtcbmV4cG9ydHMuZ2V0V2luZG93U2Nyb2xsVG9wID0gZ2V0V2luZG93U2Nyb2xsVG9wO1xuZXhwb3J0cy5oYXNBY2Nlc3NUb1BhcmVudFdpbmRvdyA9IGhhc0FjY2Vzc1RvUGFyZW50V2luZG93O1xuZXhwb3J0cy5oYXNDbGFzcyA9IGhhc0NsYXNzO1xuZXhwb3J0cy5oYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjtcbmV4cG9ydHMuaGFzVmVydGljYWxTY3JvbGxiYXIgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbmV4cG9ydHMuaW5uZXJIZWlnaHQgPSBpbm5lckhlaWdodDtcbmV4cG9ydHMuaW5uZXJXaWR0aCA9IGlubmVyV2lkdGg7XG5leHBvcnRzLmlzQ2hpbGRPZiA9IGlzQ2hpbGRPZjtcbmV4cG9ydHMuaXNEZXRhY2hlZCA9IGlzRGV0YWNoZWQ7XG5leHBvcnRzLmlzSW5wdXQgPSBpc0lucHV0O1xuZXhwb3J0cy5pc091dHNpZGVJbnB1dCA9IGlzT3V0c2lkZUlucHV0O1xuZXhwb3J0cy5pc1RoaXNIb3RDaGlsZCA9IGlzVGhpc0hvdENoaWxkO1xuZXhwb3J0cy5pc1Zpc2libGUgPSBpc1Zpc2libGU7XG5leHBvcnRzLm1ha2VFbGVtZW50Q29udGVudEVkaXRhYmxlQW5kU2VsZWN0SXRzQ29udGVudCA9IG1ha2VFbGVtZW50Q29udGVudEVkaXRhYmxlQW5kU2VsZWN0SXRzQ29udGVudDtcbmV4cG9ydHMubWF0Y2hlc0NTU1J1bGVzID0gbWF0Y2hlc0NTU1J1bGVzO1xuZXhwb3J0cy5vYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2UgPSBvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U7XG5leHBvcnRzLm9mZnNldCA9IG9mZnNldDtcbmV4cG9ydHMub3V0ZXJIZWlnaHQgPSBvdXRlckhlaWdodDtcbmV4cG9ydHMub3V0ZXJXaWR0aCA9IG91dGVyV2lkdGg7XG5leHBvcnRzLm92ZXJsYXlDb250YWluc0VsZW1lbnQgPSBvdmVybGF5Q29udGFpbnNFbGVtZW50O1xuZXhwb3J0cy5yZW1vdmVBdHRyaWJ1dGUgPSByZW1vdmVBdHRyaWJ1dGU7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3M7XG5leHBvcnRzLnJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3QgPSByZW1vdmVDb250ZW50RWRpdGFibGVGcm9tRWxlbWVudEFuZERlc2VsZWN0O1xuZXhwb3J0cy5yZW1vdmVFdmVudCA9IHJlbW92ZUV2ZW50O1xuZXhwb3J0cy5yZW1vdmVUZXh0Tm9kZXMgPSByZW1vdmVUZXh0Tm9kZXM7XG5leHBvcnRzLnJlc2V0Q3NzVHJhbnNmb3JtID0gcmVzZXRDc3NUcmFuc2Zvcm07XG5leHBvcnRzLnJ1bldpdGhTZWxlY3RlZENvbnRlbmRFZGl0YWJsZUVsZW1lbnQgPSBydW5XaXRoU2VsZWN0ZWRDb250ZW5kRWRpdGFibGVFbGVtZW50O1xuZXhwb3J0cy5zZWxlY3RFbGVtZW50SWZBbGxvd2VkID0gc2VsZWN0RWxlbWVudElmQWxsb3dlZDtcbmV4cG9ydHMuc2V0QXR0cmlidXRlID0gc2V0QXR0cmlidXRlO1xuZXhwb3J0cy5zZXRDYXJldFBvc2l0aW9uID0gc2V0Q2FyZXRQb3NpdGlvbjtcbmV4cG9ydHMuc2V0T3ZlcmxheVBvc2l0aW9uID0gc2V0T3ZlcmxheVBvc2l0aW9uO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uL3N0cmluZ1wiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi9hMTF5XCIpO1xuLyoqXG4gKiBHZXQgdGhlIHBhcmVudCBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgaW4gdGhlIERPTSB0cmVlLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCBmcm9tIHdoaWNoIHRyYXZlcnNpbmcgaXMgc3RhcnRlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGV2ZWw9MF0gVHJhdmVyc2luZyBkZWVwIGxldmVsLlxuICogQHJldHVybnMge0hUTUxFbGVtZW50fG51bGx9XG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudChlbGVtZW50KSB7XG4gIGxldCBsZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgbGV0IGl0ZXJhdGlvbiA9IC0xO1xuICBsZXQgcGFyZW50ID0gbnVsbDtcbiAgbGV0IGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudDtcbiAgd2hpbGUgKGVsZW1lbnRUb0NoZWNrICE9PSBudWxsKSB7XG4gICAgaWYgKGl0ZXJhdGlvbiA9PT0gbGV2ZWwpIHtcbiAgICAgIHBhcmVudCA9IGVsZW1lbnRUb0NoZWNrO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChlbGVtZW50VG9DaGVjay5ob3N0ICYmIGVsZW1lbnRUb0NoZWNrLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHtcbiAgICAgIGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudFRvQ2hlY2suaG9zdDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0aW9uICs9IDE7XG4gICAgICBlbGVtZW50VG9DaGVjayA9IGVsZW1lbnRUb0NoZWNrLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJlbnQ7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgYSBjaGlsZCBvZiB0aGUgcHJvdmlkZWQgSGFuZHNvbnRhYmxlIGNvbnRhaW5lci5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gYmUgYW5hbHl6ZWQuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0aGlzSG90Q29udGFpbmVyIFRoZSBIYW5kc29udGFibGUgY29udGFpbmVyLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVGhpc0hvdENoaWxkKGVsZW1lbnQsIHRoaXNIb3RDb250YWluZXIpIHtcbiAgY29uc3QgY2xvc2VzdEhhbmRzb250YWJsZUNvbnRhaW5lciA9IGVsZW1lbnQuY2xvc2VzdCgnLmhhbmRzb250YWJsZScpO1xuICByZXR1cm4gISFjbG9zZXN0SGFuZHNvbnRhYmxlQ29udGFpbmVyICYmIChjbG9zZXN0SGFuZHNvbnRhYmxlQ29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRoaXNIb3RDb250YWluZXIgfHwgY2xvc2VzdEhhbmRzb250YWJsZUNvbnRhaW5lciA9PT0gdGhpc0hvdENvbnRhaW5lcik7XG59XG5cbi8qKlxuICogR2V0cyBgZnJhbWVFbGVtZW50YCBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lLiBSZXR1cm5zIG51bGwgaWYgaXQgaXMgYSB0b3AgZnJhbWUgb3IgaWYgc2NyaXB0IGhhcyBubyBhY2Nlc3MgdG8gcmVhZCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge1dpbmRvd30gZnJhbWUgRnJhbWUgZnJvbSB3aGljaCBzaG91bGQgYmUgZ2V0IGZyYW1lRWxlbWVudCBpbiBzYWZlIHdheS5cbiAqIEByZXR1cm5zIHtIVE1MSUZyYW1lRWxlbWVudHxudWxsfVxuICovXG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQoZnJhbWUpIHtcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihmcmFtZS5wYXJlbnQpICYmIGZyYW1lLmZyYW1lRWxlbWVudDtcbn1cblxuLyoqXG4gKiBHZXRzIHBhcmVudCBmcmFtZSBvZiB0aGUgc3BlY2lmaWVkIGZyYW1lLiBSZXR1cm5zIG51bGwgaWYgaXQgaXMgYSB0b3AgZnJhbWUgb3IgaWYgc2NyaXB0IGhhcyBubyBhY2Nlc3MgdG8gcmVhZCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge1dpbmRvd30gZnJhbWUgRnJhbWUgZnJvbSB3aGljaCBzaG91bGQgZ2V0IGZyYW1lRWxlbWVudCBpbiBhIHNhZmUgd2F5LlxuICogQHJldHVybnMge1dpbmRvd3xudWxsfVxuICovXG5mdW5jdGlvbiBnZXRQYXJlbnRXaW5kb3coZnJhbWUpIHtcbiAgcmV0dXJuIGdldEZyYW1lRWxlbWVudChmcmFtZSkgJiYgZnJhbWUucGFyZW50O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBzY3JpcHQgaGFzIGFjY2VzcyB0byByZWFkIGZyb20gcGFyZW50IGZyYW1lIG9mIHNwZWNpZmllZCBmcmFtZS5cbiAqXG4gKiBAcGFyYW0ge1dpbmRvd30gZnJhbWUgRnJhbWUgZnJvbSB3aGljaCBzaG91bGQgZ2V0IGZyYW1lRWxlbWVudCBpbiBhIHNhZmUgd2F5LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0FjY2Vzc1RvUGFyZW50V2luZG93KGZyYW1lKSB7XG4gIHJldHVybiAhIU9iamVjdC5nZXRQcm90b3R5cGVPZihmcmFtZS5wYXJlbnQpO1xufVxuXG4vKipcbiAqIEdvZXMgdXAgdGhlIERPTSB0cmVlIChpbmNsdWRpbmcgZ2l2ZW4gZWxlbWVudCkgdW50aWwgaXQgZmluZHMgYW4gcGFyZW50IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBub2RlcyBvciBub2RlcyBuYW1lLlxuICogVGhpcyBtZXRob2QgZ29lcyB1cCB0aHJvdWdoIHdlYiBjb21wb25lbnRzLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBFbGVtZW50IGZyb20gd2hpY2ggdHJhdmVyc2luZyBpcyBzdGFydGVkLlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmd8Tm9kZT59IFtub2Rlc10gQXJyYXkgb2YgZWxlbWVudHMgb3IgQXJyYXkgb2YgZWxlbWVudHMgbmFtZSAoaW4gdXBwZXJjYXNlIGZvcm0pLlxuICogQHBhcmFtIHtOb2RlfSBbdW50aWxdIFRoZSBlbGVtZW50IHVudGlsIHRoZSB0cmF2ZXJzaW5nIGVuZHMuXG4gKiBAcmV0dXJucyB7Tm9kZXxudWxsfVxuICovXG5mdW5jdGlvbiBjbG9zZXN0KGVsZW1lbnQpIHtcbiAgbGV0IG5vZGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgbGV0IHVudGlsID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHtcbiAgICBFTEVNRU5UX05PREUsXG4gICAgRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuICB9ID0gTm9kZTtcbiAgbGV0IGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudDtcbiAgd2hpbGUgKGVsZW1lbnRUb0NoZWNrICE9PSBudWxsICYmIGVsZW1lbnRUb0NoZWNrICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudFRvQ2hlY2sgIT09IHVudGlsKSB7XG4gICAgY29uc3Qge1xuICAgICAgbm9kZVR5cGUsXG4gICAgICBub2RlTmFtZVxuICAgIH0gPSBlbGVtZW50VG9DaGVjaztcbiAgICBpZiAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiAobm9kZXMuaW5jbHVkZXMobm9kZU5hbWUpIHx8IG5vZGVzLmluY2x1ZGVzKGVsZW1lbnRUb0NoZWNrKSkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50VG9DaGVjaztcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgaG9zdFxuICAgIH0gPSBlbGVtZW50VG9DaGVjaztcbiAgICBpZiAoaG9zdCAmJiBub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuICAgICAgZWxlbWVudFRvQ2hlY2sgPSBob3N0O1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50VG9DaGVjayA9IGVsZW1lbnRUb0NoZWNrLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdvZXMgXCJkb3duXCIgdGhlIERPTSB0cmVlIChpbmNsdWRpbmcgZ2l2ZW4gZWxlbWVudCkgdW50aWwgaXQgZmluZHMgYW4gZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIG5vZGVzIG9yIG5vZGVzIG5hbWUuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBFbGVtZW50IGZyb20gd2hpY2ggdHJhdmVyc2luZyBpcyBzdGFydGVkLlxuICogQHBhcmFtIHtBcnJheX0gbm9kZXMgQXJyYXkgb2YgZWxlbWVudHMgb3IgQXJyYXkgb2YgZWxlbWVudHMgbmFtZS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFt1bnRpbF0gVGhlIGxpc3Qgb2YgZWxlbWVudHMgdW50aWwgdGhlIHRyYXZlcnNpbmcgZW5kcy5cbiAqIEByZXR1cm5zIHtIVE1MRWxlbWVudHxudWxsfVxuICovXG5mdW5jdGlvbiBjbG9zZXN0RG93bihlbGVtZW50LCBub2RlcywgdW50aWwpIHtcbiAgY29uc3QgbWF0Y2hlZCA9IFtdO1xuICBsZXQgZWxlbWVudFRvQ2hlY2sgPSBlbGVtZW50O1xuICB3aGlsZSAoZWxlbWVudFRvQ2hlY2spIHtcbiAgICBlbGVtZW50VG9DaGVjayA9IGNsb3Nlc3QoZWxlbWVudFRvQ2hlY2ssIG5vZGVzLCB1bnRpbCk7XG4gICAgaWYgKCFlbGVtZW50VG9DaGVjayB8fCB1bnRpbCAmJiAhdW50aWwuY29udGFpbnMoZWxlbWVudFRvQ2hlY2spKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgbWF0Y2hlZC5wdXNoKGVsZW1lbnRUb0NoZWNrKTtcbiAgICBpZiAoZWxlbWVudFRvQ2hlY2suaG9zdCAmJiBlbGVtZW50VG9DaGVjay5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG4gICAgICBlbGVtZW50VG9DaGVjayA9IGVsZW1lbnRUb0NoZWNrLmhvc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudFRvQ2hlY2sucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbGVuZ3RoID0gbWF0Y2hlZC5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBtYXRjaGVkW2xlbmd0aCAtIDFdIDogbnVsbDtcbn1cblxuLyoqXG4gKiBHb2VzIHVwIHRoZSBET00gdHJlZSBhbmQgY2hlY2tzIGlmIGVsZW1lbnQgaXMgY2hpbGQgb2YgYW5vdGhlciBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNoaWxkIENoaWxkIGVsZW1lbnQgQW4gZWxlbWVudCB0byBjaGVjay5cbiAqIEBwYXJhbSB7b2JqZWN0fHN0cmluZ30gcGFyZW50IFBhcmVudCBlbGVtZW50IE9SIHNlbGVjdG9yIG9mIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHN0cmluZyBwcm92aWRlZCwgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAgZm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVsZW1lbnQgd2l0aCB0aGF0IGNsYXNzLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ2hpbGRPZihjaGlsZCwgcGFyZW50KSB7XG4gIGxldCBub2RlID0gY2hpbGQucGFyZW50Tm9kZTtcbiAgbGV0IHF1ZXJpZWRQYXJlbnRzID0gW107XG4gIGlmICh0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJykge1xuICAgIGlmIChjaGlsZC5kZWZhdWx0Vmlldykge1xuICAgICAgcXVlcmllZFBhcmVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjaGlsZC5xdWVyeVNlbGVjdG9yQWxsKHBhcmVudCksIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyaWVkUGFyZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGNoaWxkLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJlbnQpLCAwKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcXVlcmllZFBhcmVudHMucHVzaChwYXJlbnQpO1xuICB9XG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKHF1ZXJpZWRQYXJlbnRzLmluZGV4T2Yobm9kZSkgPiAtMSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENvdW50cyBpbmRleCBvZiBlbGVtZW50IHdpdGhpbiBpdHMgcGFyZW50LlxuICogV0FSTklORzogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFzc3VtZXMgdGhlcmUgYXJlIG9ubHkgZWxlbWVudCBub2RlcyAobm8gdGV4dCBub2RlcykuIFRoaXMgaXMgdHJ1ZVxuICogZm9yIFdhbGtvdG5hYmxlLCBvdGhlcndpc2Ugd291bGQgbmVlZCB0byBjaGVjayBmb3Igbm9kZVR5cGUgb3IgdXNlIHByZXZpb3VzRWxlbWVudFNpYmxpbmcuXG4gKlxuICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9zaWJsaW5nLWluZGV4LzEwXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBpbmRleChlbGVtZW50KSB7XG4gIGxldCBpID0gMDtcbiAgbGV0IGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudDtcbiAgaWYgKGVsZW1lbnRUb0NoZWNrLnByZXZpb3VzU2libGluZykge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG4gICAgd2hpbGUgKGVsZW1lbnRUb0NoZWNrID0gZWxlbWVudFRvQ2hlY2sucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBpICs9IDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBvdmVybGF5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdmVybGF5VHlwZSBUaGUgdHlwZSBvZiB0aGUgb3ZlcmxheS5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBjaGVjay5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJvb3QgVGhlIHJvb3QgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBvdmVybGF5Q29udGFpbnNFbGVtZW50KG92ZXJsYXlUeXBlLCBlbGVtZW50LCByb290KSB7XG4gIGNvbnN0IG92ZXJsYXlFbGVtZW50ID0gcm9vdC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5odF9jbG9uZV8ke292ZXJsYXlUeXBlfWApO1xuICByZXR1cm4gb3ZlcmxheUVsZW1lbnQgPyBvdmVybGF5RWxlbWVudC5jb250YWlucyhlbGVtZW50KSA6IG51bGw7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2xhc3NOYW1lcyBUaGUgZWxlbWVudCBcImNsYXNzXCIgYXR0cmlidXRlIHN0cmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZmlsdGVyRW1wdHlDbGFzc05hbWVzKGNsYXNzTmFtZXMpIHtcbiAgaWYgKCFjbGFzc05hbWVzIHx8ICFjbGFzc05hbWVzLmxlbmd0aCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoeCA9PiAhIXgpO1xufVxuXG4vKipcbiAqIEZpbHRlciBvdXQgdGhlIFJlZ0V4cCBlbnRyaWVzIGZyb20gYW4gYXJyYXkuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cClbXX0gbGlzdCBBcnJheSBvZiBlaXRoZXIgc3RyaW5ncywgUmVnZXhlcyBvciBhIG1peCBvZiBib3RoLlxuICogQHBhcmFtIHtib29sZWFufSBbcmV0dXJuQm90aF0gSWYgYHRydWVgLCBib3RoIHRoZSBhcnJheSB3aXRob3V0IHJlZ2V4ZXMgYW5kIGFuIGFycmF5IG9mIHJlZ2V4ZXMgd2lsbCBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXXx7cmVnZXhGcmVlOiBzdHJpbmdbXSwgcmVnZXhlczogUmVnRXhwW119fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJSZWdleGVzKGxpc3QsIHJldHVybkJvdGgpIHtcbiAgaWYgKCFsaXN0IHx8ICFsaXN0Lmxlbmd0aCkge1xuICAgIHJldHVybiByZXR1cm5Cb3RoID8ge1xuICAgICAgcmVnZXhGcmVlOiBbXSxcbiAgICAgIHJlZ2V4ZXM6IFtdXG4gICAgfSA6IFtdO1xuICB9XG4gIGNvbnN0IHJlZ2V4ZXMgPSBbXTtcbiAgY29uc3QgcmVnZXhGcmVlID0gW107XG4gIHJlZ2V4RnJlZS5wdXNoKC4uLmxpc3QuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICBjb25zdCBpc1JlZ2V4ID0gZW50cnkgaW5zdGFuY2VvZiBSZWdFeHA7XG4gICAgaWYgKGlzUmVnZXggJiYgcmV0dXJuQm90aCkge1xuICAgICAgcmVnZXhlcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuICFpc1JlZ2V4O1xuICB9KSk7XG4gIHJldHVybiByZXR1cm5Cb3RoID8ge1xuICAgIHJlZ2V4RnJlZSxcbiAgICByZWdleGVzXG4gIH0gOiByZWdleEZyZWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGVsZW1lbnQgaGFzIGNsYXNzIG5hbWUuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIGNoZWNrLlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBDbGFzcyBuYW1lIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgY2xhc3NOYW1lICE9PSAnc3RyaW5nJyB8fCBjbGFzc05hbWUgPT09ICcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xufVxuXG4vKipcbiAqIEFkZCBjbGFzcyBuYW1lIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0gY2xhc3NOYW1lIENsYXNzIG5hbWUgYXMgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAodHlwZW9mIGNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgfVxuICBjbGFzc05hbWUgPSBmaWx0ZXJFbXB0eUNsYXNzTmFtZXMoY2xhc3NOYW1lKTtcbiAgaWYgKGNsYXNzTmFtZS5sZW5ndGggPiAwKSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2xhc3MgbmFtZSBmcm9tIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge3N0cmluZ3xBcnJheTxzdHJpbmd8UmVnRXhwPn0gY2xhc3NOYW1lIENsYXNzIG5hbWUgYXMgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAodHlwZW9mIGNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgfSBlbHNlIGlmIChjbGFzc05hbWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICBjbGFzc05hbWUgPSBbY2xhc3NOYW1lXTtcbiAgfVxuICBsZXQge1xuICAgIHJlZ2V4RnJlZTogc3RyaW5nQ2xhc3NlcyxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgcmVnZXhlczogcmVnZXhDbGFzc2VzXG4gIH0gPSBmaWx0ZXJSZWdleGVzKGNsYXNzTmFtZSwgdHJ1ZSk7XG4gIHN0cmluZ0NsYXNzZXMgPSBmaWx0ZXJFbXB0eUNsYXNzTmFtZXMoc3RyaW5nQ2xhc3Nlcyk7XG4gIGlmIChzdHJpbmdDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uc3RyaW5nQ2xhc3Nlcyk7XG4gIH1cbiAgcmVnZXhDbGFzc2VzLmZvckVhY2gocmVnZXhDbGFzc05hbWUgPT4ge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmZvckVhY2goY3VycmVudENsYXNzTmFtZSA9PiB7XG4gICAgICBpZiAocmVnZXhDbGFzc05hbWUudGVzdChjdXJyZW50Q2xhc3NOYW1lKSkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY3VycmVudENsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCBhIHNpbmdsZSBhdHRyaWJ1dGUgb3IgbXVsdGlwbGUgYXR0cmlidXRlcyBhdCBvbmNlLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGRvbUVsZW1lbnQgVGhlIEhUTUwgZWxlbWVudCB0byBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSB7QXJyYXlbXXxzdHJpbmd9IGF0dHJpYnV0ZXMgSWYgc2V0dGluZyBtdWx0aXBsZSBhdHRyaWJ1dGVzIGF0IG9uY2UsIGBhdHRyaWJ1dGVzYCBob2xkcyBhbiBhcnJheSBjb250YWluaW5nIHRoZVxuICogYXR0cmlidXRlcyB0byBiZSBhZGRlZC4gRWFjaCBlbGVtZW50IG9mIHRoZSBhcnJheSBzaG91bGQgYmUgYW4gYXJyYXkgaW4gYSBmb3JtIG9mIGBbYXR0cmlidXRlTmFtZSxcbiAqIGF0dHJpYnV0ZVZhbHVlXWAuIElmIHNldHRpbmcgYSBzaW5nbGUgYXR0cmlidXRlLCBgYXR0cmlidXRlc2AgaG9sZHMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnx1bmRlZmluZWR9IFthdHRyaWJ1dGVWYWx1ZV0gSWYgc2V0dGluZyBhIHNpbmdsZSBhdHRyaWJ1dGUsIGBhdHRyaWJ1dGVWYWx1ZWAgaG9sZHMgdGhlIGF0dHJpYnV0ZVxuICogdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShkb21FbGVtZW50KSB7XG4gIGxldCBhdHRyaWJ1dGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIGlmICghQXJyYXkuaXNBcnJheShhdHRyaWJ1dGVzKSkge1xuICAgIGF0dHJpYnV0ZXMgPSBbW2F0dHJpYnV0ZXMsIGF0dHJpYnV0ZVZhbHVlXV07XG4gIH1cbiAgYXR0cmlidXRlcy5mb3JFYWNoKGF0dHJpYnV0ZUluZm8gPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHJpYnV0ZUluZm8pICYmIGF0dHJpYnV0ZUluZm9bMF0gIT09ICcnKSB7XG4gICAgICBkb21FbGVtZW50LnNldEF0dHJpYnV0ZSguLi5hdHRyaWJ1dGVJbmZvKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbW92ZSBhIHNpbmdsZSBhdHRyaWJ1dGUgb3IgbXVsdGlwbGUgYXR0cmlidXRlcyBmcm9tIHRoZSBwcm92aWRlZCBlbGVtZW50IGF0IG9uY2UuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZG9tRWxlbWVudCBUaGUgSFRNTCBlbGVtZW50IHRvIGJlIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nfFJlZ0V4cD58c3RyaW5nfSBhdHRyaWJ1dGVzVG9SZW1vdmUgSWYgcmVtb3ZpbmcgbXVsdGlwbGUgYXR0cmlidXRlcywgYGF0dHJpYnV0ZXNUb1JlbW92ZWBcbiAqIGhvbGRzIGFuIGFycmF5IG9mIGF0dHJpYnV0ZSBuYW1lcyB0byBiZSByZW1vdmVkIGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQuIElmIHJlbW92aW5nIGEgc2luZ2xlIGF0dHJpYnV0ZSwgaXRcbiAqIGhvbGRzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKGRvbUVsZW1lbnQpIHtcbiAgbGV0IGF0dHJpYnV0ZXNUb1JlbW92ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gIGlmICh0eXBlb2YgYXR0cmlidXRlc1RvUmVtb3ZlID09PSAnc3RyaW5nJykge1xuICAgIGF0dHJpYnV0ZXNUb1JlbW92ZSA9IGF0dHJpYnV0ZXNUb1JlbW92ZS5zcGxpdCgnICcpO1xuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXNUb1JlbW92ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIGF0dHJpYnV0ZXNUb1JlbW92ZSA9IFthdHRyaWJ1dGVzVG9SZW1vdmVdO1xuICB9XG4gIGNvbnN0IHtcbiAgICByZWdleEZyZWU6IHN0cmluZ0F0dHJpYnV0ZXMsXG4gICAgcmVnZXhlczogcmVnZXhBdHRyaWJ1dGVzXG4gIH0gPSBmaWx0ZXJSZWdleGVzKGF0dHJpYnV0ZXNUb1JlbW92ZSwgdHJ1ZSk7XG4gIHN0cmluZ0F0dHJpYnV0ZXMuZm9yRWFjaChhdHRyaWJ1dGVOYW1lVG9SZW1vdmUgPT4ge1xuICAgIGlmIChhdHRyaWJ1dGVOYW1lVG9SZW1vdmUgIT09ICcnKSB7XG4gICAgICBkb21FbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lVG9SZW1vdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJlZ2V4QXR0cmlidXRlcy5mb3JFYWNoKGF0dHJpYnV0ZVJlZ2V4ID0+IHtcbiAgICBkb21FbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCkuZm9yRWFjaChhdHRyaWJ1dGVOYW1lID0+IHtcbiAgICAgIGlmIChhdHRyaWJ1dGVSZWdleC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGRvbUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgZnJvbSB0aGUgdGV4dCBpcyByZW1vdmVkLlxuICovXG5mdW5jdGlvbiByZW1vdmVUZXh0Tm9kZXMoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC5ub2RlVHlwZSA9PT0gMykge1xuICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsgLy8gYnllIHRleHQgbm9kZXMhXG4gIH0gZWxzZSBpZiAoWydUQUJMRScsICdUSEVBRCcsICdUQk9EWScsICdURk9PVCcsICdUUiddLmluZGV4T2YoZWxlbWVudC5ub2RlTmFtZSkgPiAtMSkge1xuICAgIGNvbnN0IGNoaWxkcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcbiAgICBmb3IgKGxldCBpID0gY2hpbGRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICByZW1vdmVUZXh0Tm9kZXMoY2hpbGRzW2ldKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmUgY2hpbGRyZW4gZnVuY3Rpb25cbiAqIFdBUk5JTkcgLSB0aGlzIGRvZXNuJ3QgdW5sb2FkIGV2ZW50cyBhbmQgZGF0YSBhdHRhY2hlZCBieSBqUXVlcnlcbiAqIGh0dHA6Ly9qc3BlcmYuY29tL2pxdWVyeS1odG1sLXZzLWVtcHR5LXZzLWlubmVyaHRtbC85XG4gKiBodHRwOi8vanNwZXJmLmNvbS9qcXVlcnktaHRtbC12cy1lbXB0eS12cy1pbm5lcmh0bWwvMTEgLSBubyBzaWdpbmlmaWNhbnQgaW1wcm92ZW1lbnQgd2l0aCBDaHJvbWUgcmVtb3ZlKCkgbWV0aG9kLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBjbGVhci5cbiAqL1xuZnVuY3Rpb24gZW1wdHkoZWxlbWVudCkge1xuICBsZXQgY2hpbGQ7XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cbiAgd2hpbGUgKGNoaWxkID0gZWxlbWVudC5sYXN0Q2hpbGQpIHtcbiAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuY29uc3QgSFRNTF9DSEFSQUNURVJTID0gZXhwb3J0cy5IVE1MX0NIQVJBQ1RFUlMgPSAvKDwoLiopPnwmKC4qKTspLztcblxuLyoqXG4gKiBJbnNlcnQgY29udGVudCBpbnRvIGVsZW1lbnQgdHJ5aW5nIHRvIGF2b2lkIGlubmVySFRNTCBtZXRob2QuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIHdyaXRlIGludG8uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgdGV4dCB0byB3cml0ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Nhbml0aXplQ29udGVudD10cnVlXSBJZiBgdHJ1ZWAsIHRoZSBjb250ZW50IHdpbGwgYmUgc2FuaXRpemVkIGJlZm9yZSB3cml0aW5nIHRvIHRoZSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmYXN0SW5uZXJIVE1MKGVsZW1lbnQsIGNvbnRlbnQpIHtcbiAgbGV0IHNhbml0aXplQ29udGVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgaWYgKEhUTUxfQ0hBUkFDVEVSUy50ZXN0KGNvbnRlbnQpKSB7XG4gICAgZWxlbWVudC5pbm5lckhUTUwgPSBzYW5pdGl6ZUNvbnRlbnQgPyAoMCwgX3N0cmluZy5zYW5pdGl6ZSkoY29udGVudCkgOiBjb250ZW50O1xuICB9IGVsc2Uge1xuICAgIGZhc3RJbm5lclRleHQoZWxlbWVudCwgY29udGVudCk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnNlcnQgdGV4dCBjb250ZW50IGludG8gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gd3JpdGUgaW50by5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSB0ZXh0IHRvIHdyaXRlLlxuICovXG5mdW5jdGlvbiBmYXN0SW5uZXJUZXh0KGVsZW1lbnQsIGNvbnRlbnQpIHtcbiAgY29uc3QgY2hpbGQgPSBlbGVtZW50LmZpcnN0Q2hpbGQ7XG4gIGlmIChjaGlsZCAmJiBjaGlsZC5ub2RlVHlwZSA9PT0gMyAmJiBjaGlsZC5uZXh0U2libGluZyA9PT0gbnVsbCkge1xuICAgIC8vIGZhc3QgbGFuZSAtIHJlcGxhY2UgZXhpc3RpbmcgdGV4dCBub2RlXG4gICAgY2hpbGQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9IGVsc2Uge1xuICAgIC8vIHNsb3cgbGFuZSAtIGVtcHR5IGVsZW1lbnQgYW5kIGluc2VydCBhIHRleHQgbm9kZVxuICAgIGVtcHR5KGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBlbGVtZW50IGlzIGF0dGFjaGVkIHRvIHRoZSBET00gYW5kIHZpc2libGUsIGZhbHNlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpYmxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgbGV0IG5leHQgPSBlbGVtZW50O1xuICB3aGlsZSAobmV4dCAhPT0gZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgLy8gdW50aWwgPGh0bWw+IHJlYWNoZWRcbiAgICBpZiAobmV4dCA9PT0gbnVsbCkge1xuICAgICAgLy8gcGFyZW50IGRldGFjaGVkIGZyb20gRE9NXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChuZXh0Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpIHtcbiAgICAgIGlmIChuZXh0Lmhvc3QpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBXZWIgQ29tcG9uZW50cyBTaGFkb3cgRE9NXG4gICAgICAgIC8vIHNlZTogaHR0cDovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL3NoYWRvdy8jZW5jYXBzdWxhdGlvblxuICAgICAgICAvLyBhY2NvcmRpbmcgdG8gc3BlYywgc2hvdWxkIGJlIGlmIChuZXh0Lm93bmVyRG9jdW1lbnQgIT09IHdpbmRvdy5kb2N1bWVudCksIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayB5ZXRcbiAgICAgICAgaWYgKG5leHQuaG9zdC5pbXBsKSB7XG4gICAgICAgICAgLy8gQ2hyb21lIDMzLjAuMTcyMy4wIGNhbmFyeSAoMjAxMy0xMS0yOSkgV2ViIFBsYXRmb3JtIGZlYXR1cmVzIGRpc2FibGVkXG4gICAgICAgICAgcmV0dXJuIGlzVmlzaWJsZShuZXh0Lmhvc3QuaW1wbCk7XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dC5ob3N0KSB7XG4gICAgICAgICAgLy8gQ2hyb21lIDMzLjAuMTcyMy4wIGNhbmFyeSAoMjAxMy0xMS0yOSkgV2ViIFBsYXRmb3JtIGZlYXR1cmVzIGVuYWJsZWRcbiAgICAgICAgICByZXR1cm4gaXNWaXNpYmxlKG5leHQuaG9zdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHRoaXMgaXMgYSBub2RlIGRldGFjaGVkIGZyb20gZG9jdW1lbnQgaW4gSUU4XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChnZXRDb21wdXRlZFN0eWxlKG5leHQpLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIFJldHVybnMgZWxlbWVudHMgdG9wIGFuZCBsZWZ0IG9mZnNldCByZWxhdGl2ZSB0byB0aGUgZG9jdW1lbnQuIEZ1bmN0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggalF1ZXJ5IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gZ2V0IHRoZSBvZmZzZXQgcG9zaXRpb24gZnJvbS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgb2JqZWN0IHdpdGggYHRvcGAgYW5kIGBsZWZ0YCBwcm9wcy5cbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGVsZW1lbnQpIHtcbiAgY29uc3Qgcm9vdERvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICBjb25zdCByb290V2luZG93ID0gcm9vdERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICBjb25zdCBkb2N1bWVudEVsZW1lbnQgPSByb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICBsZXQgZWxlbWVudFRvQ2hlY2sgPSBlbGVtZW50O1xuICBsZXQgb2Zmc2V0TGVmdDtcbiAgbGV0IG9mZnNldFRvcDtcbiAgbGV0IGxhc3RFbGVtO1xuICBvZmZzZXRMZWZ0ID0gZWxlbWVudFRvQ2hlY2sub2Zmc2V0TGVmdDtcbiAgb2Zmc2V0VG9wID0gZWxlbWVudFRvQ2hlY2sub2Zmc2V0VG9wO1xuICBsYXN0RWxlbSA9IGVsZW1lbnRUb0NoZWNrO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG4gIHdoaWxlIChlbGVtZW50VG9DaGVjayA9IGVsZW1lbnRUb0NoZWNrLm9mZnNldFBhcmVudCkge1xuICAgIC8vIGZyb20gbXkgb2JzZXJ2YXRpb24sIGRvY3VtZW50LmJvZHkgYWx3YXlzIGhhcyBzY3JvbGxMZWZ0L3Njcm9sbFRvcCA9PSAwXG4gICAgaWYgKGVsZW1lbnRUb0NoZWNrID09PSByb290RG9jdW1lbnQuYm9keSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluc2lkZSBhbiBTVkcgY29udGV4dCwgdGhlIGBvZmZzZXRQYXJlbnRgIGNhbiBiZVxuICAgIC8vIGEgPGZvcmVpZ25PYmplY3Q+IHRoYXQgZG9lcyBub3QgaGF2ZSBwcm9wZXJ0aWVzIGBvZmZzZXRMZWZ0YCBhbmQgYG9mZnNldFRvcGAgZGVmaW5lZC5cbiAgICBpZiAoISgnb2Zmc2V0TGVmdCcgaW4gZWxlbWVudFRvQ2hlY2spKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2Zmc2V0TGVmdCArPSBlbGVtZW50VG9DaGVjay5vZmZzZXRMZWZ0O1xuICAgIG9mZnNldFRvcCArPSBlbGVtZW50VG9DaGVjay5vZmZzZXRUb3A7XG4gICAgbGFzdEVsZW0gPSBlbGVtZW50VG9DaGVjaztcbiAgfVxuXG4gIC8vIHNsb3cgLSBodHRwOi8vanNwZXJmLmNvbS9vZmZzZXQtdnMtZ2V0Ym91bmRpbmdjbGllbnRyZWN0LzZcbiAgaWYgKGxhc3RFbGVtICYmIGxhc3RFbGVtLnN0eWxlLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgLy8gaWYobGFzdEVsZW0gIT09IGRvY3VtZW50LmJvZHkpIHsgLy9mYXN0ZXIgYnV0IGRvZXMgZ2l2ZXMgZmFsc2UgcG9zaXRpdmUgaW4gRmlyZWZveFxuICAgIG9mZnNldExlZnQgKz0gcm9vdFdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICBvZmZzZXRUb3AgKz0gcm9vdFdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICB9XG4gIHJldHVybiB7XG4gICAgbGVmdDogb2Zmc2V0TGVmdCxcbiAgICB0b3A6IG9mZnNldFRvcFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGRvY3VtZW50J3Mgc2Nyb2xsVG9wIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7V2luZG93fSBbcm9vdFdpbmRvd10gVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbmZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbFRvcCgpIHtcbiAgbGV0IHJvb3RXaW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHdpbmRvdztcbiAgcmV0dXJuIHJvb3RXaW5kb3cuc2Nyb2xsWTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkb2N1bWVudCdzIHNjcm9sbExlZnQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtXaW5kb3d9IFtyb290V2luZG93XSBUaGUgZG9jdW1lbnQgd2luZG93IG93bmVyLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsTGVmdCgpIHtcbiAgbGV0IHJvb3RXaW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHdpbmRvdztcbiAgcmV0dXJuIHJvb3RXaW5kb3cuc2Nyb2xsWDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwcm92aWRlZCBlbGVtZW50J3Mgc2Nyb2xsVG9wIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBnZXQgdGhlIHNjcm9sbCB0b3AgcG9zaXRpb24gZnJvbS5cbiAqIEBwYXJhbSB7V2luZG93fSBbcm9vdFdpbmRvd10gVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbmZ1bmN0aW9uIGdldFNjcm9sbFRvcChlbGVtZW50KSB7XG4gIGxldCByb290V2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB3aW5kb3c7XG4gIGlmIChlbGVtZW50ID09PSByb290V2luZG93KSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbFRvcChyb290V2luZG93KTtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5zY3JvbGxUb3A7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcHJvdmlkZWQgZWxlbWVudCdzIHNjcm9sbExlZnQgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIGdldCB0aGUgc2Nyb2xsIGxlZnQgcG9zaXRpb24gZnJvbS5cbiAqIEBwYXJhbSB7V2luZG93fSBbcm9vdFdpbmRvd10gVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbmZ1bmN0aW9uIGdldFNjcm9sbExlZnQoZWxlbWVudCkge1xuICBsZXQgcm9vdFdpbmRvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogd2luZG93O1xuICBpZiAoZWxlbWVudCA9PT0gcm9vdFdpbmRvdykge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGxMZWZ0KHJvb3RXaW5kb3cpO1xuICB9XG4gIHJldHVybiBlbGVtZW50LnNjcm9sbExlZnQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIERPTSBlbGVtZW50IHJlc3BvbnNpYmxlIGZvciBzY3JvbGxpbmcgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIGdldCB0aGUgc2Nyb2xsYWJsZSBlbGVtZW50IGZyb20uXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IEVsZW1lbnQncyBzY3JvbGxhYmxlIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0U2Nyb2xsYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICBsZXQgcm9vdERvY3VtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50O1xuICBsZXQgcm9vdFdpbmRvdyA9IHJvb3REb2N1bWVudCA/IHJvb3REb2N1bWVudC5kZWZhdWx0VmlldyA6IHVuZGVmaW5lZDtcbiAgaWYgKCFyb290RG9jdW1lbnQpIHtcbiAgICByb290RG9jdW1lbnQgPSBlbGVtZW50LmRvY3VtZW50ID8gZWxlbWVudC5kb2N1bWVudCA6IGVsZW1lbnQ7XG4gICAgcm9vdFdpbmRvdyA9IHJvb3REb2N1bWVudC5kZWZhdWx0VmlldztcbiAgfVxuICBjb25zdCBwcm9wcyA9IFsnYXV0bycsICdzY3JvbGwnXTtcbiAgbGV0IGVsID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICB3aGlsZSAoZWwgJiYgZWwuc3R5bGUgJiYgcm9vdERvY3VtZW50LmJvZHkgIT09IGVsKSB7XG4gICAgbGV0IHtcbiAgICAgIG92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZXG4gICAgfSA9IGVsLnN0eWxlO1xuICAgIGlmIChbb3ZlcmZsb3csIG92ZXJmbG93WCwgb3ZlcmZsb3dZXS5pbmNsdWRlcygnc2Nyb2xsJykpIHtcbiAgICAgIHJldHVybiBlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgKHtcbiAgICAgICAgb3ZlcmZsb3csXG4gICAgICAgIG92ZXJmbG93WCxcbiAgICAgICAgb3ZlcmZsb3dZXG4gICAgICB9ID0gcm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKSk7XG4gICAgICBpZiAocHJvcHMuaW5jbHVkZXMob3ZlcmZsb3cpIHx8IHByb3BzLmluY2x1ZGVzKG92ZXJmbG93WCkgfHwgcHJvcHMuaW5jbHVkZXMob3ZlcmZsb3dZKSkge1xuICAgICAgICByZXR1cm4gZWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlICcrIDEnIGFmdGVyIHRoZSBzY3JvbGxIZWlnaHQvc2Nyb2xsV2lkdGggaXMgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoIHpvb21lZCBvdXQgQ2hyb21lLlxuICAgIGlmIChlbC5jbGllbnRIZWlnaHQgPD0gZWwuc2Nyb2xsSGVpZ2h0ICsgMSAmJiAocHJvcHMuaW5jbHVkZXMob3ZlcmZsb3dZKSB8fCBwcm9wcy5pbmNsdWRlcyhvdmVyZmxvdykpKSB7XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICAgIGlmIChlbC5jbGllbnRXaWR0aCA8PSBlbC5zY3JvbGxXaWR0aCArIDEgJiYgKHByb3BzLmluY2x1ZGVzKG92ZXJmbG93WCkgfHwgcHJvcHMuaW5jbHVkZXMob3ZlcmZsb3cpKSkge1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cbiAgICBlbCA9IGVsLnBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIHJvb3RXaW5kb3c7XG59XG5cbi8qKlxuICogR2V0IHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBgc2Nyb2xsVG9wYCB2YWx1ZSBmb3IgdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBnZXQgdGhlIG1heGltdW0gc2Nyb2xsIHRvcCB2YWx1ZSBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gVGhlIG1heGltdW0gc2Nyb2xsIHRvcCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF4aW11bVNjcm9sbFRvcChlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50LnNjcm9sbEhlaWdodCAtIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgbWF4aW11bSBhdmFpbGFibGUgYHNjcm9sbExlZnRgIHZhbHVlIGZvciB0aGUgcHJvdmlkZWQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGdldCB0aGUgbWF4aW11bSBzY3JvbGwgbGVmdCB2YWx1ZSBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gVGhlIG1heGltdW0gc2Nyb2xsIGxlZnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldE1heGltdW1TY3JvbGxMZWZ0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuc2Nyb2xsV2lkdGggLSBlbGVtZW50LmNsaWVudFdpZHRoO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBET00gZWxlbWVudCByZXNwb25zaWJsZSBmb3IgdHJpbW1pbmcgdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gYmFzZSBCYXNlIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IEJhc2UgZWxlbWVudCdzIHRyaW1taW5nIHBhcmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0VHJpbW1pbmdDb250YWluZXIoYmFzZSkge1xuICBjb25zdCByb290RG9jdW1lbnQgPSBiYXNlLm93bmVyRG9jdW1lbnQ7XG4gIGNvbnN0IHJvb3RXaW5kb3cgPSByb290RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gIGxldCBlbCA9IGJhc2UucGFyZW50Tm9kZTtcbiAgd2hpbGUgKGVsICYmIGVsLnN0eWxlICYmIHJvb3REb2N1bWVudC5ib2R5ICE9PSBlbCkge1xuICAgIGlmIChlbC5zdHlsZS5vdmVyZmxvdyAhPT0gJ3Zpc2libGUnICYmIGVsLnN0eWxlLm92ZXJmbG93ICE9PSAnJykge1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCwgcm9vdFdpbmRvdyk7XG4gICAgY29uc3QgYWxsb3dlZFByb3BlcnRpZXMgPSBbJ3Njcm9sbCcsICdoaWRkZW4nLCAnYXV0byddO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdvdmVyZmxvdycpO1xuICAgIGNvbnN0IHByb3BlcnR5WSA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnb3ZlcmZsb3cteScpO1xuICAgIGNvbnN0IHByb3BlcnR5WCA9IGNvbXB1dGVkU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnb3ZlcmZsb3cteCcpO1xuICAgIGlmIChhbGxvd2VkUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wZXJ0eSkgfHwgYWxsb3dlZFByb3BlcnRpZXMuaW5jbHVkZXMocHJvcGVydHlZKSB8fCBhbGxvd2VkUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wZXJ0eVgpKSB7XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICAgIGVsID0gZWwucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gcm9vdFdpbmRvdztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc3R5bGUgcHJvcGVydHkgZm9yIHRoZSBwcm92aWRlZCBlbGVtZW50LiAoQmUgaXQgYW4gaW5saW5lIG9yIGV4dGVybmFsIHN0eWxlKS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gZ2V0IHRoZSBzdHlsZSBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgV2FudGVkIHByb3BlcnR5LlxuICogQHBhcmFtIHtXaW5kb3d9IFtyb290V2luZG93XSBUaGUgZG9jdW1lbnQgd2luZG93IG93bmVyLlxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IEVsZW1lbnQncyBzdHlsZSBwcm9wZXJ0eS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gZ2V0U3R5bGUoZWxlbWVudCwgcHJvcCkge1xuICBsZXQgcm9vdFdpbmRvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogd2luZG93O1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gcm9vdFdpbmRvdykge1xuICAgIGlmIChwcm9wID09PSAnd2lkdGgnKSB7XG4gICAgICByZXR1cm4gYCR7cm9vdFdpbmRvdy5pbm5lcldpZHRofXB4YDtcbiAgICB9IGVsc2UgaWYgKHByb3AgPT09ICdoZWlnaHQnKSB7XG4gICAgICByZXR1cm4gYCR7cm9vdFdpbmRvdy5pbm5lckhlaWdodH1weGA7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzdHlsZVByb3AgPSBlbGVtZW50LnN0eWxlW3Byb3BdO1xuICBpZiAoc3R5bGVQcm9wICE9PSAnJyAmJiBzdHlsZVByb3AgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBzdHlsZVByb3A7XG4gIH1cbiAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgcm9vdFdpbmRvdyk7XG4gIGlmIChjb21wdXRlZFN0eWxlW3Byb3BdICE9PSAnJyAmJiBjb21wdXRlZFN0eWxlW3Byb3BdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY29tcHV0ZWRTdHlsZVtwcm9wXTtcbiAgfVxufVxuXG4vKipcbiAqIFZlcmlmaWVzIGlmIGVsZW1lbnQgZml0IHRvIHByb3ZpZGVkIENTU1J1bGUuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gdmVyaWZ5IHdpdGggc2VsZWN0b3IgdGV4dC5cbiAqIEBwYXJhbSB7Q1NTUnVsZX0gcnVsZSBTZWxlY3RvciB0ZXh0IGZyb20gQ1NTUnVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBtYXRjaGVzQ1NTUnVsZXMoZWxlbWVudCwgcnVsZSkge1xuICBjb25zdCB7XG4gICAgc2VsZWN0b3JUZXh0XG4gIH0gPSBydWxlO1xuICBsZXQgcmVzdWx0ID0gZmFsc2U7XG4gIGlmIChydWxlLnR5cGUgPT09IENTU1J1bGUuU1RZTEVfUlVMRSAmJiBzZWxlY3RvclRleHQpIHtcbiAgICBpZiAoZWxlbWVudC5tc01hdGNoZXNTZWxlY3Rvcikge1xuICAgICAgcmVzdWx0ID0gZWxlbWVudC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3RvclRleHQpO1xuICAgIH0gZWxzZSBpZiAoZWxlbWVudC5tYXRjaGVzKSB7XG4gICAgICByZXN1bHQgPSBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3JUZXh0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcHV0ZWQgc3R5bGUgb2JqZWN0IGZvciB0aGUgcHJvdmlkZWQgZWxlbWVudC4gKE5lZWRlZCBpZiBzdHlsZSBpcyBkZWNsYXJlZCBpbiBleHRlcm5hbCBzdHlsZXNoZWV0KS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gZ2V0IHN0eWxlIGZyb20uXG4gKiBAcGFyYW0ge1dpbmRvd30gW3Jvb3RXaW5kb3ddIFRoZSBkb2N1bWVudCB3aW5kb3cgb3duZXIuXG4gKiBAcmV0dXJucyB7SUVFbGVtZW50U3R5bGV8Q3NzU3R5bGV9IEVsZW1lbnRzIGNvbXB1dGVkIHN0eWxlIG9iamVjdC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIGxldCByb290V2luZG93ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB3aW5kb3c7XG4gIHJldHVybiBlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCByb290V2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCdzIG91dGVyIHdpZHRoLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBnZXQgdGhlIHdpZHRoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBFbGVtZW50J3Mgb3V0ZXIgd2lkdGguXG4gKi9cbmZ1bmN0aW9uIG91dGVyV2lkdGgoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vZmZzZXRXaWR0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50J3Mgb3V0ZXIgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBnZXQgdGhlIGhlaWdodCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gRWxlbWVudCdzIG91dGVyIGhlaWdodC5cbiAqL1xuZnVuY3Rpb24gb3V0ZXJIZWlnaHQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCdzIGlubmVyIGhlaWdodC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gZ2V0IHRoZSBoZWlnaHQgZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IEVsZW1lbnQncyBpbm5lciBoZWlnaHQuXG4gKi9cbmZ1bmN0aW9uIGlubmVySGVpZ2h0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGVsZW1lbnQuaW5uZXJIZWlnaHQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZWxlbWVudCdzIGlubmVyIHdpZHRoLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBnZXQgdGhlIHdpZHRoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBFbGVtZW50J3MgaW5uZXIgd2lkdGguXG4gKi9cbmZ1bmN0aW9uIGlubmVyV2lkdGgoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5jbGllbnRXaWR0aCB8fCBlbGVtZW50LmlubmVyV2lkdGg7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBhZGQuXG4gKi9cbmZ1bmN0aW9uIGFkZEV2ZW50KGVsZW1lbnQsIGV2ZW50LCBjYWxsYmFjaykge1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCBmYWxzZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IGZyb20gd2hpY2ggdGhlIGV2ZW50IGlzIHJlbW92ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gcmVmZXJlbmNlIHRvIHJlbW92ZS5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnQoZWxlbWVudCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGNhcmV0IHBvc2l0aW9uIGluIHRleHQgaW5wdXQuXG4gKlxuICogQGF1dGhvciBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yNjM3NDMvaG93LXRvLWdldC1jYXJldC1wb3NpdGlvbi1pbi10ZXh0YXJlYVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgQW4gZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldENhcmV0UG9zaXRpb24oZWwpIHtcbiAgaWYgKGVsLnNlbGVjdGlvblN0YXJ0KSB7XG4gICAgcmV0dXJuIGVsLnNlbGVjdGlvblN0YXJ0O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIFJldHVybnMgZW5kIG9mIHRoZSBzZWxlY3Rpb24gaW4gdGV4dCBpbnB1dC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCBBbiBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uRW5kUG9zaXRpb24oZWwpIHtcbiAgaWYgKGVsLnNlbGVjdGlvbkVuZCkge1xuICAgIHJldHVybiBlbC5zZWxlY3Rpb25FbmQ7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0ZXh0IHVuZGVyIHNlbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1dpbmRvd30gW3Jvb3RXaW5kb3ddIFRoZSBkb2N1bWVudCB3aW5kb3cgb3duZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZXh0KCkge1xuICBsZXQgcm9vdFdpbmRvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogd2luZG93O1xuICBjb25zdCByb290RG9jdW1lbnQgPSByb290V2luZG93LmRvY3VtZW50O1xuICBsZXQgdGV4dCA9ICcnO1xuICBpZiAocm9vdFdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICB0ZXh0ID0gcm9vdFdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpO1xuICB9IGVsc2UgaWYgKHJvb3REb2N1bWVudC5zZWxlY3Rpb24gJiYgcm9vdERvY3VtZW50LnNlbGVjdGlvbi50eXBlICE9PSAnQ29udHJvbCcpIHtcbiAgICB0ZXh0ID0gcm9vdERvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQ7XG4gIH1cbiAgcmV0dXJuIHRleHQ7XG59XG5cbi8qKlxuICogQ3Jvc3MtcGxhdGZvcm0gaGVscGVyIHRvIGNsZWFyIHRleHQgc2VsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7V2luZG93fSBbcm9vdFdpbmRvd10gVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gY2xlYXJUZXh0U2VsZWN0aW9uKCkge1xuICBsZXQgcm9vdFdpbmRvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogd2luZG93O1xuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxNjk3ODYvY2xlYXItdGV4dC1zZWxlY3Rpb24td2l0aC1qYXZhc2NyaXB0XG4gIGlmIChyb290V2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIGlmIChyb290V2luZG93LmdldFNlbGVjdGlvbigpLmVtcHR5KSB7XG4gICAgICAvLyBDaHJvbWVcbiAgICAgIHJvb3RXaW5kb3cuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTtcbiAgICB9IGVsc2UgaWYgKHJvb3RXaW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKSB7XG4gICAgICAvLyBGaXJlZm94XG4gICAgICByb290V2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNldHMgY2FyZXQgcG9zaXRpb24gaW4gdGV4dCBpbnB1dC5cbiAqXG4gKiBAYXV0aG9yIGh0dHA6Ly9ibG9nLnZpc2hhbG9uLm5ldC9pbmRleC5waHAvamF2YXNjcmlwdC1nZXR0aW5nLWFuZC1zZXR0aW5nLWNhcmV0LXBvc2l0aW9uLWluLXRleHRhcmVhL1xuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gcHJvY2Vzcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3MgVGhlIHNlbGVjdGlvbiBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRQb3MgVGhlIHNlbGVjdGlvbiBlbmQgcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIHNldENhcmV0UG9zaXRpb24oZWxlbWVudCwgcG9zLCBlbmRQb3MpIHtcbiAgaWYgKGVuZFBvcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kUG9zID0gcG9zO1xuICB9XG4gIGlmIChlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgZWxlbWVudC5mb2N1cygpO1xuICAgIHRyeSB7XG4gICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvcywgZW5kUG9zKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRQYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG4gICAgICBjb25zdCBwYXJlbnREaXNwbGF5VmFsdWUgPSBlbGVtZW50UGFyZW50LnN0eWxlLmRpc3BsYXk7XG4gICAgICBlbGVtZW50UGFyZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgZWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIGVuZFBvcyk7XG4gICAgICBlbGVtZW50UGFyZW50LnN0eWxlLmRpc3BsYXkgPSBwYXJlbnREaXNwbGF5VmFsdWU7XG4gICAgfVxuICB9XG59XG5sZXQgY2FjaGVkU2Nyb2xsYmFyV2lkdGg7XG5cbi8qKlxuICogSGVscGVyIHRvIGNhbGN1bGF0ZSBzY3JvbGxiYXIgd2lkdGguXG4gKiBTb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzk4NjkzNy9ob3ctY2FuLWktZ2V0LXRoZS1icm93c2Vycy1zY3JvbGxiYXItc2l6ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IHJvb3REb2N1bWVudCBUaGUgb253ZXIgb2YgdGhlIGRvY3VtZW50LlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gd2Fsa29udGFibGVDYWxjdWxhdGVTY3JvbGxiYXJXaWR0aCgpIHtcbiAgbGV0IHJvb3REb2N1bWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZG9jdW1lbnQ7XG4gIGNvbnN0IGlubmVyID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBpbm5lci5zdHlsZS5oZWlnaHQgPSAnMjAwcHgnO1xuICBpbm5lci5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgY29uc3Qgb3V0ZXIgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIG91dGVyLnN0eWxlLmJveFNpemluZyA9ICdjb250ZW50LWJveCc7XG4gIG91dGVyLnN0eWxlLmhlaWdodCA9ICcxNTBweCc7XG4gIG91dGVyLnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgb3V0ZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBvdXRlci5zdHlsZS50b3AgPSAnMHB4JztcbiAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMjAwcHgnO1xuICBvdXRlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcbiAgKHJvb3REb2N1bWVudC5ib2R5IHx8IHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKG91dGVyKTtcbiAgY29uc3QgdzEgPSBpbm5lci5vZmZzZXRXaWR0aDtcbiAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgbGV0IHcyID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gIGlmICh3MSA9PT0gdzIpIHtcbiAgICB3MiA9IG91dGVyLmNsaWVudFdpZHRoO1xuICB9XG4gIChyb290RG9jdW1lbnQuYm9keSB8fCByb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChvdXRlcik7XG4gIHJldHVybiB3MSAtIHcyO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHdpZHRoIG9mIHRoZSBuYXRpdmUgYnJvd3NlciBzY3JvbGwgYmFyLlxuICpcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IFtyb290RG9jdW1lbnRdIFRoZSBvd25lciBvZiB0aGUgZG9jdW1lbnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBXaWR0aC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7XG4gIGxldCByb290RG9jdW1lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGRvY3VtZW50O1xuICBpZiAoY2FjaGVkU2Nyb2xsYmFyV2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZFNjcm9sbGJhcldpZHRoID0gd2Fsa29udGFibGVDYWxjdWxhdGVTY3JvbGxiYXJXaWR0aChyb290RG9jdW1lbnQpO1xuICB9XG4gIHJldHVybiBjYWNoZWRTY3JvbGxiYXJXaWR0aDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGVsZW1lbnQgaGFzIGEgdmVydGljYWwgc2Nyb2xsYmFyLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNWZXJ0aWNhbFNjcm9sbGJhcihlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFdpZHRoICE9PSBlbGVtZW50LmNsaWVudFdpZHRoO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZWxlbWVudCBoYXMgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBBbiBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0hvcml6b250YWxTY3JvbGxiYXIoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vZmZzZXRIZWlnaHQgIT09IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xufVxuXG4vKipcbiAqIFNldHMgb3ZlcmxheSBwb3NpdGlvbiBkZXBlbmRpbmcgb24gaXQncyB0eXBlIGFuZCB1c2VkIGJyb3dzZXIuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gb3ZlcmxheUVsZW0gQW4gZWxlbWVudCB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBsZWZ0IFRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5LlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSB0b3AgVGhlIHRvcCBwb3NpdGlvbiBvZiB0aGUgb3ZlcmxheS5cbiAqL1xuZnVuY3Rpb24gc2V0T3ZlcmxheVBvc2l0aW9uKG92ZXJsYXlFbGVtLCBsZWZ0LCB0b3ApIHtcbiAgb3ZlcmxheUVsZW0uc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7bGVmdH0sJHt0b3B9LDApYDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtudW1iZXJ8QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGdldENzc1RyYW5zZm9ybShlbGVtZW50KSB7XG4gIGxldCB0cmFuc2Zvcm07XG4gIGlmIChlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSAmJiAodHJhbnNmb3JtID0gZWxlbWVudC5zdHlsZS50cmFuc2Zvcm0pICE9PSAnJykge1xuICAgIHJldHVybiBbJ3RyYW5zZm9ybScsIHRyYW5zZm9ybV07XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQW4gZWxlbWVudCB0byBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiByZXNldENzc1RyYW5zZm9ybShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSAmJiBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSAhPT0gJycpIHtcbiAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICcnO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gRE9NIGVsZW1lbnQgaXMgYW4gaW5wdXQgZmllbGQuXG4gKiBOb3RpY2U6IEJ5ICdpbnB1dCcgd2UgbWVhbiBpbnB1dCwgdGV4dGFyZWEgYW5kIHNlbGVjdCBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRE9NIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJbnB1dChlbGVtZW50KSB7XG4gIGNvbnN0IGlucHV0cyA9IFsnSU5QVVQnLCAnU0VMRUNUJywgJ1RFWFRBUkVBJ107XG4gIHJldHVybiBlbGVtZW50ICYmIChpbnB1dHMuaW5kZXhPZihlbGVtZW50Lm5vZGVOYW1lKSA+IC0xIHx8IGVsZW1lbnQuY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIERPTSBlbGVtZW50IGlzIGFuIGlucHV0IGZpZWxkIHBsYWNlZCBPVVRTSURFIG9mIEhPVC5cbiAqIE5vdGljZTogQnkgJ2lucHV0JyB3ZSBtZWFuIGlucHV0LCB0ZXh0YXJlYSBhbmQgc2VsZWN0IG5vZGVzIHdoaWNoIGhhdmUgZGVmaW5lZCAnZGF0YS1ob3QtaW5wdXQnIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gRE9NIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNPdXRzaWRlSW5wdXQoZWxlbWVudCkge1xuICByZXR1cm4gaXNJbnB1dChlbGVtZW50KSAmJiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1ob3QtaW5wdXQnKSA9PT0gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIERPTSBlbGVtZW50IGNhbiBiZSBmb2N1c2VkIChieSB1c2luZyBcInNlbGVjdFwiIG1ldGhvZCkuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCAtIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBzZWxlY3RFbGVtZW50SWZBbGxvd2VkKGVsZW1lbnQpIHtcbiAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICBpZiAoIWlzT3V0c2lkZUlucHV0KGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgZWxlbWVudC5zZWxlY3QoKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBlbGVtZW50IGlzIGRldGFjaGVkIGZyb20gRE9NLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgSFRNTCBlbGVtZW50IHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGRldGFjaGVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gaXNEZXRhY2hlZChlbGVtZW50KSB7XG4gIHJldHVybiAhZWxlbWVudC5wYXJlbnROb2RlO1xufVxuXG4vKipcbiAqIFNldCB1cCBhbiBvYnNlcnZlciB0byByZWNvZ25pemUgd2hlbiB0aGUgcHJvdmlkZWQgZWxlbWVudCBmaXJzdCBiZWNvbWVzIHZpc2libGUgYW5kIHRyaWdnZXIgYSBjYWxsYmFjayB3aGVuIGl0XG4gKiBoYXBwZW5zLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRUb0JlT2JzZXJ2ZWQgRWxlbWVudCB0byBiZSBvYnNlcnZlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZVZpc2liaWxpdHlDaGFuZ2VPbmNlKGVsZW1lbnRUb0JlT2JzZXJ2ZWQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHZpc2liaWxpdHlPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcywgb2JzZXJ2ZXIpID0+IHtcbiAgICBlbnRyaWVzLmZvckVhY2goZW50cnkgPT4ge1xuICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIGVsZW1lbnRUb0JlT2JzZXJ2ZWQub2Zmc2V0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50VG9CZU9ic2VydmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwge1xuICAgIHJvb3Q6IGVsZW1lbnRUb0JlT2JzZXJ2ZWQub3duZXJEb2N1bWVudC5ib2R5XG4gIH0pO1xuICB2aXNpYmlsaXR5T2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50VG9CZU9ic2VydmVkKTtcbn1cblxuLyoqXG4gKiBBZGQgYSBgY29udGVudGVkaXRhYmxlYCBhdHRyaWJ1dGUsIHNlbGVjdCB0aGUgY29udGVudHMgYW5kIG9wdGlvbmFsbHkgYWRkIHRoZSBgaW52aXNpYmxlU2VsZWN0aW9uYFxuICogY2xhc3MgdG8gdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRvIGJlIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ludmlzaWJsZVNlbGVjdGlvbj10cnVlXSBgdHJ1ZWAgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgZWxlbWVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyaWFIaWRkZW49dHJ1ZV0gYHRydWVgIGlmIHRoZSBgYXJpYS1oaWRkZW5gIGF0dHJpYnV0ZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHByb2Nlc3NlZCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQoZWxlbWVudCkge1xuICBsZXQgaW52aXNpYmxlU2VsZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICBsZXQgYXJpYUhpZGRlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcbiAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgY29uc3QgcmFuZ2UgPSBvd25lckRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gIGNvbnN0IHNlbCA9IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7XG4gIHNldEF0dHJpYnV0ZShlbGVtZW50LCAnY29udGVudGVkaXRhYmxlJywgdHJ1ZSk7XG4gIGlmIChhcmlhSGlkZGVuKSB7XG4gICAgc2V0QXR0cmlidXRlKGVsZW1lbnQsIC4uLigwLCBfYTExeS5BMTFZX0hJRERFTikoKSk7XG4gIH1cbiAgaWYgKGludmlzaWJsZVNlbGVjdGlvbikge1xuICAgIGFkZENsYXNzKGVsZW1lbnQsICdpbnZpc2libGVTZWxlY3Rpb24nKTtcbiAgfVxuICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIGBjb250ZW50ZWRpdGFibGVgIGF0dHJpYnV0ZSwgZGVzZWxlY3QgdGhlIGNvbnRlbnRzIGFuZCBvcHRpb25hbGx5IHJlbW92ZSB0aGUgYGludmlzaWJsZVNlbGVjdGlvbmBcbiAqIGNsYXNzIGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gc2VsZWN0ZWRFbGVtZW50IFRoZSBlbGVtZW50IHRvIGJlIGRlc2VsZWN0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW1vdmVJbnZpc2libGVTZWxlY3Rpb25DbGFzcz10cnVlXSBgdHJ1ZWAgaWYgdGhlIGNsYXNzIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Qoc2VsZWN0ZWRFbGVtZW50KSB7XG4gIGxldCByZW1vdmVJbnZpc2libGVTZWxlY3Rpb25DbGFzcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgY29uc3Qgc2VsID0gc2VsZWN0ZWRFbGVtZW50Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7XG4gIGlmIChzZWxlY3RlZEVsZW1lbnQuaGFzQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpKSB7XG4gICAgc2VsZWN0ZWRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgfVxuICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gIGlmIChyZW1vdmVJbnZpc2libGVTZWxlY3Rpb25DbGFzcykge1xuICAgIHJlbW92ZUNsYXNzKHNlbGVjdGVkRWxlbWVudCwgJ2ludmlzaWJsZVNlbGVjdGlvbicpO1xuICB9XG4gIHNlbGVjdGVkRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScpO1xufVxuXG4vKipcbiAqIFJ1biB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgd2hpbGUgdGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgc2VsZWN0ZWQgYW5kIG1vZGlmaWVkIHRvIGhhdmUgdGhlIGBjb250ZW50ZWRpdGFibGVgXG4gKiBhdHRyaWJ1dGUgYWRkZWQuIE9wdGlvbmFsbHksIHRoZSBzZWxlY3Rpb24gY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgaW52aXNpYmxlLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0byBiZSBzZWxlY3RlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHRvIGJlIGNhbGxlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ludmlzaWJsZVNlbGVjdGlvbj10cnVlXSBgdHJ1ZWAgaWYgdGhlIHNlbGVjdGlvbiBzaG91bGQgYmUgaW52aXNpYmxlLlxuICovXG5mdW5jdGlvbiBydW5XaXRoU2VsZWN0ZWRDb250ZW5kRWRpdGFibGVFbGVtZW50KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gIGxldCBpbnZpc2libGVTZWxlY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gIG1ha2VFbGVtZW50Q29udGVudEVkaXRhYmxlQW5kU2VsZWN0SXRzQ29udGVudChlbGVtZW50LCBpbnZpc2libGVTZWxlY3Rpb24pO1xuICBjYWxsYmFjaygpO1xuICByZW1vdmVDb250ZW50RWRpdGFibGVGcm9tRWxlbWVudEFuZERlc2VsZWN0KGVsZW1lbnQsIGludmlzaWJsZVNlbGVjdGlvbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ7XG5leHBvcnRzLmlzTGVmdENsaWNrID0gaXNMZWZ0Q2xpY2s7XG5leHBvcnRzLmlzUmlnaHRDbGljayA9IGlzUmlnaHRDbGljaztcbmV4cG9ydHMub2Zmc2V0UmVsYXRpdmVUbyA9IG9mZnNldFJlbGF0aXZlVG87XG5leHBvcnRzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtcbi8qKlxuICogUHJldmVudCBvdGhlciBsaXN0ZW5lcnMgb2YgdGhlIHNhbWUgZXZlbnQgZnJvbSBiZWluZyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKGV2ZW50KSB7XG4gIGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkID0gZmFsc2U7XG4gIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZXZlbnQgd2FzIHN0b3BwZWQgYnkgYHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbmAuXG4gKlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZChldmVudCkge1xuICByZXR1cm4gZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHByb3ZpZGVkIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgY2xpY2tpbmcgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzUmlnaHRDbGljayhldmVudCkge1xuICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAyO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHByb3ZpZGVkIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgY2xpY2tpbmcgdGhlIGxlZnQgbW91c2UgYnV0dG9uLlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNMZWZ0Q2xpY2soZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gMDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBldmVudCBvZmZzZXQgdW50aWwgcmVhY2hpbmcgdGhlIGVsZW1lbnQgZGVmaW5lZCBieSBgcmVsYXRpdmVFbGVtZW50YCBhcmd1bWVudC5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9IFt1bnRpbEVsZW1lbnRdIFRoZSBlbGVtZW50IHRvIHdoaWNoIHRoZSBvZmZzZXQgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICogQHJldHVybnMge3sgeDogbnVtYmVyLCB5OiBudW1iZXIgfX1cbiAqL1xuZnVuY3Rpb24gb2Zmc2V0UmVsYXRpdmVUbyhldmVudCwgdW50aWxFbGVtZW50KSB7XG4gIGNvbnN0IG9mZnNldCA9IHtcbiAgICB4OiBldmVudC5vZmZzZXRYLFxuICAgIHk6IGV2ZW50Lm9mZnNldFlcbiAgfTtcbiAgbGV0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XG4gIGlmICghKHVudGlsRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCBlbGVtZW50ICE9PSB1bnRpbEVsZW1lbnQgJiYgZWxlbWVudC5jb250YWlucyh1bnRpbEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICB3aGlsZSAoZWxlbWVudCAhPT0gdW50aWxFbGVtZW50KSB7XG4gICAgb2Zmc2V0LnggKz0gZWxlbWVudC5vZmZzZXRMZWZ0O1xuICAgIG9mZnNldC55ICs9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgIGVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuZXhwb3J0cy5nZXRDb21wYXJpc29uRnVuY3Rpb24gPSBnZXRDb21wYXJpc29uRnVuY3Rpb247XG5leHBvcnRzLmlzQ1NSID0gaXNDU1I7XG5leHBvcnRzLmlzVG91Y2hTdXBwb3J0ZWQgPSBpc1RvdWNoU3VwcG9ydGVkO1xuZXhwb3J0cy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgKi9cbi8qKlxuICogUG9seWZpbGwgZm9yIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIGl0J3MgdGltZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjaykge1xuICByZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG59XG5cbi8qKlxuICogUG9seWZpbGwgZm9yIGNhbmNlbEFuaW1hdGlvbkZyYW1lLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZCBUaGUgcmVxdWVzdCBJZCwgZ2VuZXJhdGVkIGJ5IGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxuICovXG5mdW5jdGlvbiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkge1xuICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1RvdWNoU3VwcG9ydGVkKCkge1xuICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gd2luZG93O1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZW52aXJvbm1lbnQgdGhhdCB0aGUgY29kZSBydW5zIGluIGlzIGEgYnJvd3Nlci5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDU1IoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmxldCBjb21wYXJpc29uRnVuY3Rpb247XG5cbi8qKlxuICogR2V0IHN0cmluZyBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBzb3J0aW5nIHB1cnBvc2VzLiBJdCBzdXBwb3J0cyBtdWx0aWxpbmd1YWwgc3RyaW5nIGNvbXBhcmlzb24gYmFzZSBvbiBJbnRlcm5hdGlvbmFsaXphdGlvbiBBUEkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtsYW5ndWFnZV0gVGhlIGxhbmd1YWdlIGNvZGUgdXNlZCBmb3IgcGhyYXNlcyBzb3J0aW5nLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSBBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNvcnQgY29tcGFyYXRvci5cbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBnZXRDb21wYXJpc29uRnVuY3Rpb24obGFuZ3VhZ2UpIHtcbiAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBpZiAoY29tcGFyaXNvbkZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGNvbXBhcmlzb25GdW5jdGlvbjtcbiAgfVxuICBpZiAodHlwZW9mIEludGwgPT09ICdvYmplY3QnKSB7XG4gICAgY29tcGFyaXNvbkZ1bmN0aW9uID0gbmV3IEludGwuQ29sbGF0b3IobGFuZ3VhZ2UsIG9wdGlvbnMpLmNvbXBhcmU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbXBhcmlzb25GdW5jdGlvbiA9IChhLCBiKSA9PiBgJHthfWAubG9jYWxlQ29tcGFyZShiKTtcbiAgfSBlbHNlIHtcbiAgICBjb21wYXJpc29uRnVuY3Rpb24gPSAoYSwgYikgPT4ge1xuICAgICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYSA+IGIgPyAtMSA6IDE7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gY29tcGFyaXNvbkZ1bmN0aW9uO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jdXJyeSA9IGN1cnJ5O1xuZXhwb3J0cy5jdXJyeVJpZ2h0ID0gY3VycnlSaWdodDtcbmV4cG9ydHMuZGVib3VuY2UgPSBkZWJvdW5jZTtcbmV4cG9ydHMuZmFzdENhbGwgPSBmYXN0Q2FsbDtcbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5leHBvcnRzLnBhcnRpYWwgPSBwYXJ0aWFsO1xuZXhwb3J0cy5waXBlID0gcGlwZTtcbmV4cG9ydHMudGhyb3R0bGUgPSB0aHJvdHRsZTtcbmV4cG9ydHMudGhyb3R0bGVBZnRlckhpdHMgPSB0aHJvdHRsZUFmdGVySGl0cztcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi9taXhlZFwiKTtcbi8qKlxuICogQ2hlY2tzIGlmIGdpdmVuIHZhcmlhYmxlIGlzIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Kn0gZnVuYyBWYXJpYWJsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGZ1bmMpIHtcbiAgcmV0dXJuIHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhyb3R0bGUgZnVuY3Rpb24gdGhhdCBlbmZvcmNlcyBhIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIGEgZnVuY3Rpb24gKGBmdW5jYCkgY2FuIGJlIGNhbGxlZCBvdmVyIHRpbWUgKGB3YWl0YCkuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBGdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0ge251bWJlcn0gd2FpdCBEZWxheSBpbiBtaWxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZnVuYykge1xuICBsZXQgd2FpdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjAwO1xuICBsZXQgbGFzdENhbGxlZCA9IDA7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBsYXN0Q2FsbFRocm90dGxlZDogdHJ1ZVxuICB9O1xuICBsZXQgbGFzdFRpbWVyID0gbnVsbDtcblxuICAvKipcbiAgICogQHBhcmFtIHsuLi4qfSBhcmdzIFRoZSBsaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgZHVyaW5nIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gX3Rocm90dGxlKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgY29uc3Qgc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGxldCBuZWVkQ2FsbCA9IGZhbHNlO1xuICAgIHJlc3VsdC5sYXN0Q2FsbFRocm90dGxlZCA9IHRydWU7XG4gICAgaWYgKCFsYXN0Q2FsbGVkKSB7XG4gICAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgICBuZWVkQ2FsbCA9IHRydWU7XG4gICAgfVxuICAgIGNvbnN0IHJlbWFpbmluZyA9IHdhaXQgLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcbiAgICBpZiAobmVlZENhbGwpIHtcbiAgICAgIHJlc3VsdC5sYXN0Q2FsbFRocm90dGxlZCA9IGZhbHNlO1xuICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGxhc3RUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQobGFzdFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGxhc3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXN1bHQubGFzdENhbGxUaHJvdHRsZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgbGFzdENhbGxlZCA9IDA7XG4gICAgICAgIGxhc3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIH0sIHJlbWFpbmluZyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIF90aHJvdHRsZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRocm90dGxlIGZ1bmN0aW9uIHRoYXQgZW5mb3JjZXMgYSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyBhIGZ1bmN0aW9uIChgZnVuY2ApIGNhbiBiZSBjYWxsZWQgb3ZlclxuICogdGltZSAoYHdhaXRgKSBhZnRlciBzcGVjaWZpZWQgaGl0cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB3YWl0IERlbGF5IGluIG1pbGlzZWNvbmRzLlxuICogQHBhcmFtIHtudW1iZXJ9IGhpdHMgTnVtYmVyIG9mIGhpdHMgYWZ0ZXIgdGhyb3R0bGluZyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlQWZ0ZXJIaXRzKGZ1bmMpIHtcbiAgbGV0IHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDIwMDtcbiAgbGV0IGhpdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDEwO1xuICBjb25zdCBmdW5jVGhyb3R0bGUgPSB0aHJvdHRsZShmdW5jLCB3YWl0KTtcbiAgbGV0IHJlbWFpbkhpdHMgPSBoaXRzO1xuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gX2NsZWFySGl0cygpIHtcbiAgICByZW1haW5IaXRzID0gaGl0cztcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHsqfSBhcmdzIFRoZSBsaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgZHVyaW5nIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGZ1bmN0aW9uIF90aHJvdHRsZUFmdGVySGl0cygpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG4gICAgaWYgKHJlbWFpbkhpdHMpIHtcbiAgICAgIHJlbWFpbkhpdHMgLT0gMTtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY1Rocm90dGxlLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICB9XG4gIF90aHJvdHRsZUFmdGVySGl0cy5jbGVhckhpdHMgPSBfY2xlYXJIaXRzO1xuICByZXR1cm4gX3Rocm90dGxlQWZ0ZXJIaXRzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgZGVib3VuY2UgZnVuY3Rpb24gdGhhdCBlbmZvcmNlcyBhIGZ1bmN0aW9uIChgZnVuY2ApIG5vdCBiZSBjYWxsZWQgYWdhaW4gdW50aWwgYSBjZXJ0YWluIGFtb3VudCBvZiB0aW1lIChgd2FpdGApXG4gKiBoYXMgcGFzc2VkIHdpdGhvdXQgaXQgYmVpbmcgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gaW52b2tlLlxuICogQHBhcmFtIHtudW1iZXJ9IHdhaXQgRGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBkZWJvdW5jZShmdW5jKSB7XG4gIGxldCB3YWl0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAyMDA7XG4gIGxldCBsYXN0VGltZXIgPSBudWxsO1xuICBsZXQgcmVzdWx0O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MgVGhlIGxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCBkdXJpbmcgdGhlIGZ1bmN0aW9uIGludm9jYXRpb24uXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZnVuY3Rpb24gX2RlYm91bmNlKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cbiAgICBpZiAobGFzdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQobGFzdFRpbWVyKTtcbiAgICB9XG4gICAgbGFzdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIF9kZWJvdW5jZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBnaXZlbiBmdW5jdGlvbnMuIFJlc3VsdCBvZiB0aGUgZmlyc3QgZnVuY3Rpb24gaXMgcGFzc2VkIHRvXG4gKiB0aGUgc2Vjb25kIGFzIGFuIGFyZ3VtZW50IGFuZCBzbyBvbi4gT25seSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gY2FuIGhhbmRsZSBtdWx0aXBsZSBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuY3Rpb25zIEZ1bmN0aW9ucyB0byBjb21wb3NlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwaXBlKCkge1xuICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmN0aW9ucyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgIGZ1bmN0aW9uc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICB9XG4gIGNvbnN0IFtmaXJzdEZ1bmMsIC4uLnJlc3RGdW5jXSA9IGZ1bmN0aW9ucztcbiAgcmV0dXJuIGZ1bmN0aW9uIF9waXBlKCkge1xuICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheVJlZHVjZSkocmVzdEZ1bmMsIChhY2MsIGZuKSA9PiBmbihhY2MpLCBmaXJzdEZ1bmMuYXBwbHkodGhpcywgYXJncykpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgZnVuY3Rpb24gd2l0aCBjYWNoZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gcGFydGlhbGl6YXRpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXMgRnVuY3Rpb24gYXJndW1lbnRzIHRvIGNhY2hlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBwYXJ0aWFsKGZ1bmMpIHtcbiAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBwYXJhbXMgPSBuZXcgQXJyYXkoX2xlbjYgPiAxID8gX2xlbjYgLSAxIDogMCksIF9rZXk2ID0gMTsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgIHBhcmFtc1tfa2V5NiAtIDFdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gX3BhcnRpYWwoKSB7XG4gICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0UGFyYW1zID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICByZXN0UGFyYW1zW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIHBhcmFtcy5jb25jYXQocmVzdFBhcmFtcykpO1xuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IHJldHVybnMgdGhlIGZ1bmN0aW9uIHdpdGggY2FjaGVkIGFyZ3VtZW50cy4gSWYgY291bnQgaWYgcGFzc2VkIGFyZ3VtZW50cyB3aWxsIGJlIG1hdGNoZWRcbiAqIHRvIHRoZSBhcmd1bWVudHMgZGVmaW5lZCBpbiBgZnVuY2AgdGhlbiBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQuXG4gKiBBcmd1bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBzdGFjayBpbiBkaXJlY3Rpb24gZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogdmFyIHJlcGxhY2UgPSBjdXJyeShmdW5jdGlvbihmaW5kLCByZXBsYWNlLCBzdHJpbmcpIHtcbiAqICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGZpbmQsIHJlcGxhY2UpO1xuICogfSk7XG4gKlxuICogLy8gcmV0dXJucyBmdW5jdGlvbiB3aXRoIGJvdW5kZWQgZmlyc3QgYXJndW1lbnRcbiAqIHZhciByZXBsYWNlID0gcmVwbGFjZSgnZm9vJylcbiAqXG4gKiAvLyByZXR1cm5zIHJlcGxhY2VkIHN0cmluZyAtIGFsbCBhcmd1bWVudHMgd2FzIHBhc3NlZCBzbyBmdW5jdGlvbiB3YXMgaW52b2tlZFxuICogcmVwbGFjZSgnYmFyJywgJ1NvbWUgdGVzdCB3aXRoIGZvby4uLicpO1xuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gY3VycnlpbmcuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGN1cnJ5KGZ1bmMpIHtcbiAgY29uc3QgYXJnc0xlbmd0aCA9IGZ1bmMubGVuZ3RoO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0geyp9IGFyZ3NTb0ZhciBUaGUgbGlzdCBvZiBhcmd1bWVudHMgcGFzc2VkIGR1cmluZyB0aGUgZnVuY3Rpb24gaW52b2NhdGlvbi5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2l2ZW4oYXJnc1NvRmFyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIF9jdXJyeSgpIHtcbiAgICAgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgcGFyYW1zID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG4gICAgICAgIHBhcmFtc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFzc2VkQXJnc1NvRmFyID0gYXJnc1NvRmFyLmNvbmNhdChwYXJhbXMpO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGlmIChwYXNzZWRBcmdzU29GYXIubGVuZ3RoID49IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBwYXNzZWRBcmdzU29GYXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZ2l2ZW4ocGFzc2VkQXJnc1NvRmFyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZ2l2ZW4oW10pO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGZ1bmN0aW9ucyB0aGF0IHJldHVybnMgdGhlIGZ1bmN0aW9uIHdpdGggY2FjaGVkIGFyZ3VtZW50cy4gSWYgY291bnQgaWYgcGFzc2VkIGFyZ3VtZW50cyB3aWxsIGJlIG1hdGNoZWRcbiAqIHRvIHRoZSBhcmd1bWVudHMgZGVmaW5lZCBpbiBgZnVuY2AgdGhlbiBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQuXG4gKiBBcmd1bWVudHMgYXJlIGFkZGVkIHRvIHRoZSBzdGFjayBpbiBkaXJlY3Rpb24gZnJvbSB0aGUgcmlnaHQgdG8gdGhlIGxlZnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogdmFyIHJlcGxhY2UgPSBjdXJyeShmdW5jdGlvbihmaW5kLCByZXBsYWNlLCBzdHJpbmcpIHtcbiAqICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGZpbmQsIHJlcGxhY2UpO1xuICogfSk7XG4gKlxuICogLy8gcmV0dXJucyBmdW5jdGlvbiB3aXRoIGJvdW5kZWQgZmlyc3QgYXJndW1lbnRcbiAqIHZhciByZXBsYWNlID0gcmVwbGFjZSgnU29tZSB0ZXN0IHdpdGggZm9vLi4uJylcbiAqXG4gKiAvLyByZXR1cm5zIHJlcGxhY2VkIHN0cmluZyAtIGFsbCBhcmd1bWVudHMgd2FzIHBhc3NlZCBzbyBmdW5jdGlvbiB3YXMgaW52b2tlZFxuICogcmVwbGFjZSgnYmFyJywgJ2ZvbycpO1xuICpcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgRnVuY3Rpb24gdG8gY3VycnlpbmcuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGN1cnJ5UmlnaHQoZnVuYykge1xuICBjb25zdCBhcmdzTGVuZ3RoID0gZnVuYy5sZW5ndGg7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gYXJnc1NvRmFyIFRoZSBsaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgZHVyaW5nIHRoZSBmdW5jdGlvbiBpbnZvY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnaXZlbihhcmdzU29GYXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gX2N1cnJ5KCkge1xuICAgICAgZm9yICh2YXIgX2xlbjkgPSBhcmd1bWVudHMubGVuZ3RoLCBwYXJhbXMgPSBuZXcgQXJyYXkoX2xlbjkpLCBfa2V5OSA9IDA7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcbiAgICAgICAgcGFyYW1zW19rZXk5XSA9IGFyZ3VtZW50c1tfa2V5OV07XG4gICAgICB9XG4gICAgICBjb25zdCBwYXNzZWRBcmdzU29GYXIgPSBhcmdzU29GYXIuY29uY2F0KHBhcmFtcy5yZXZlcnNlKCkpO1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIGlmIChwYXNzZWRBcmdzU29GYXIubGVuZ3RoID49IGFyZ3NMZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBwYXNzZWRBcmdzU29GYXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gZ2l2ZW4ocGFzc2VkQXJnc1NvRmFyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZ2l2ZW4oW10pO1xufVxuXG4vKipcbiAqIENhbGxzIGEgZnVuY3Rpb24gaW4gdGhlIHF1aWNrZXN0IHdheSBhdmFpbGFibGUuXG4gKlxuICogSW4gY29udHJhc3QgdG8gdGhlIGBhcHBseSgpYCBtZXRob2QgdGhhdCBwYXNzZXMgYXJndW1lbnRzIGFzIGFuIGFycmF5LFxuICogdGhlIGBjYWxsKClgIG1ldGhvZCBwYXNzZXMgYXJndW1lbnRzIGRpcmVjdGx5LCB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gY29zdHMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FsbC5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgdmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGNhbGxpbmcgdGhlIGBmdW5jYCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FyZzFdIEFuIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYGZ1bmNgIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbYXJnMl0gQW4gYXJndW1lbnQgcGFzc2VkIHRvIGBmdW5jYCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FyZzNdIEFuIGFyZ3VtZW50IHBhc3NlZCB0byBgZnVuY2AgZnVuY3Rpb24uXG4gKiBAcGFyYW0geyp9IFthcmc0XSBBbiBhcmd1bWVudCBwYXNzZWQgdG8gYGZ1bmNgIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbYXJnNV0gQW4gYXJndW1lbnQgcGFzc2VkIHRvIGBmdW5jYCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2FyZzZdIEFuIGFyZ3VtZW50IHBhc3NlZCB0byBgZnVuY2AgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gZmFzdENhbGwoZnVuYywgY29udGV4dCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikge1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGFyZzYpKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTtcbiAgfSBlbHNlIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoYXJnNSkpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpO1xuICB9IGVsc2UgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShhcmc0KSkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7XG4gIH0gZWxzZSBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGFyZzMpKSB7XG4gICAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfSBlbHNlIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoYXJnMikpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFyZzEsIGFyZzIpO1xuICB9IGVsc2UgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShhcmcxKSkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgYXJnMSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuY2FsbChjb250ZXh0KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuX2luamVjdFByb2R1Y3RJbmZvID0gX2luamVjdFByb2R1Y3RJbmZvO1xuZXhwb3J0cy5pc0RlZmluZWQgPSBpc0RlZmluZWQ7XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgX3RlbXBsYXRlTGl0ZXJhbFRhZyA9IHJlcXVpcmUoXCIuL3RlbXBsYXRlTGl0ZXJhbFRhZ1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIENvbnZlcnRzIGFueSB2YWx1ZSB0byBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIGxldCByZXN1bHQ7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgcmVzdWx0ID0gYCR7dmFsdWV9YDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXN1bHQgPSB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXN1bHQgPSAnJztcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXN1bHQgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gdmFyaWFibGUgaXMgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhcmlhYmxlIFZhcmlhYmxlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YXJpYWJsZSkge1xuICByZXR1cm4gdHlwZW9mIHZhcmlhYmxlICE9PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgZ2l2ZW4gdmFyaWFibGUgaXMgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFyaWFibGUgVmFyaWFibGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFyaWFibGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YXJpYWJsZSA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFyaWFibGUgaXMgbnVsbCwgZW1wdHkgc3RyaW5nIG9yIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhcmlhYmxlIFZhcmlhYmxlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFyaWFibGUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlID09PSBudWxsIHx8IHZhcmlhYmxlID09PSAnJyB8fCBpc1VuZGVmaW5lZCh2YXJpYWJsZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgZ2l2ZW4gdmFyaWFibGUgaXMgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQHBhcmFtIHsqfSB2YXJpYWJsZSBWYXJpYWJsZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1JlZ0V4cCh2YXJpYWJsZSkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5jb25zdCBfbSA9ICdcXHg2Q1xceDY1XFx4NkVcXHg2N1xceDc0XFx4NjgnO1xuY29uc3QgX2hkID0gdiA9PiBwYXJzZUludCh2LCAxNik7XG5jb25zdCBfcGkgPSB2ID0+IHBhcnNlSW50KHYsIDEwKTtcbmNvbnN0IF9zcyA9ICh2LCBzLCBsKSA9PiB2WydcXHg3M1xceDc1XFx4NjJcXHg3M1xceDc0XFx4NzInXShzLCBsKTtcbmNvbnN0IF9jcCA9IHYgPT4gdlsnXFx4NjNcXHg2RlxceDY0XFx4NjVcXHg1MFxceDZGXFx4NjlcXHg2RVxceDc0XFx4NDFcXHg3NCddKDApIC0gNjU7XG5jb25zdCBfbm9ybSA9IHYgPT4gYCR7dn1gLnJlcGxhY2UoL1xcLS9nLCAnJyk7XG5jb25zdCBfZXh0cmFjdFRpbWUgPSB2ID0+IF9oZChfc3MoX25vcm0odiksIF9oZCgnMTInKSwgX2NwKCdcXHg0NicpKSkgLyAoX2hkKF9zcyhfbm9ybSh2KSwgX2NwKCdcXHg0MicpLCB+fiFbXVtfbV0pKSB8fCA5KTtcbmNvbnN0IF9pZ25vcmVkID0gKCkgPT4gdHlwZW9mIGxvY2F0aW9uICE9PSAndW5kZWZpbmVkJyAmJiAvXihbYS16MC05XFwtXStcXC4pP1xceDY4XFx4NjFcXHg2RVxceDY0XFx4NzNcXHg2RlxceDZFXFx4NzRcXHg2MVxceDYyXFx4NkNcXHg2NVxceDJFXFx4NjNcXHg2RlxceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7XG5sZXQgX25vdGlmaWVkID0gZmFsc2U7XG5jb25zdCBjb25zb2xlTWVzc2FnZXMgPSB7XG4gIGludmFsaWQ6ICgpID0+ICgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgXG4gICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5cXHgyMFxuICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLFxuICBleHBpcmVkOiBfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAga2V5VmFsaWRpdHlEYXRlLFxuICAgICAgaG90VmVyc2lvblxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtrZXlWYWxpZGl0eURhdGV9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXFx4MjBcbiAgICB2ZXJzaW9uICR7aG90VmVyc2lvbn0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXFx4MjBcbiAgICB0byAke2tleVZhbGlkaXR5RGF0ZX0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYDtcbiAgfSxcbiAgbWlzc2luZzogKCkgPT4gKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBcbiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0LlxceDIwXG4gICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVxceDIwXG4gICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFxceDIwXG4gICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsXG4gIG5vbl9jb21tZXJjaWFsOiAoKSA9PiAnJ1xufTtcbmNvbnN0IGRvbU1lc3NhZ2VzID0ge1xuICBpbnZhbGlkOiAoKSA9PiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXFx4MjBcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXFx4MjBcbiAgICBpbnN0YWxsIGl0IHByb3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj1cIm1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb21cIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsXG4gIGV4cGlyZWQ6IF9yZWYyID0+IHtcbiAgICBsZXQge1xuICAgICAga2V5VmFsaWRpdHlEYXRlLFxuICAgICAgaG90VmVyc2lvblxuICAgIH0gPSBfcmVmMjtcbiAgICByZXR1cm4gKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBcbiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7a2V5VmFsaWRpdHlEYXRlfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFxceDIwXG4gICAgdmVyc2lvbiAke2hvdFZlcnNpb259LiA8YSBocmVmPVwiaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5SZW5ldzwvYT4geW91clxceDIwXG4gICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2tleVZhbGlkaXR5RGF0ZX0uIElmIHlvdSBuZWVkIGFueVxceDIwXG4gICAgaGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPVwibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb21cIj5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gO1xuICB9LFxuICBtaXNzaW5nOiAoKSA9PiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFxuICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXFx4MjBcbiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XFx4MjBcbiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuXFx4MjBcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5cXHgyMFxuICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj1cIm1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb21cIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsXG4gIG5vbl9jb21tZXJjaWFsOiAoKSA9PiAnJ1xufTtcbmZ1bmN0aW9uIF9pbmplY3RQcm9kdWN0SW5mbyhrZXksIGVsZW1lbnQpIHtcbiAgY29uc3QgaGFzVmFsaWRUeXBlID0gIWlzRW1wdHkoa2V5KTtcbiAgY29uc3QgaXNOb25Db21tZXJjaWFsID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbic7XG4gIGNvbnN0IGhvdFZlcnNpb24gPSBcIjE0LjQuMFwiO1xuICBsZXQga2V5VmFsaWRpdHlEYXRlO1xuICBsZXQgY29uc29sZU1lc3NhZ2VTdGF0ZSA9ICdpbnZhbGlkJztcbiAgbGV0IGRvbU1lc3NhZ2VTdGF0ZSA9ICdpbnZhbGlkJztcbiAga2V5ID0gX25vcm0oa2V5IHx8ICcnKTtcbiAgY29uc3Qgc2NoZW1hVmFsaWRpdHkgPSBfY2hlY2tLZXlTY2hlbWEoa2V5KTtcbiAgaWYgKGhhc1ZhbGlkVHlwZSB8fCBpc05vbkNvbW1lcmNpYWwgfHwgc2NoZW1hVmFsaWRpdHkpIHtcbiAgICBpZiAoc2NoZW1hVmFsaWRpdHkpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VEYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkoXCIxMS8wNi8yMDI0XCIsICdERC9NTS9ZWVlZJyk7XG4gICAgICBjb25zdCByZWxlYXNlRGF5cyA9IE1hdGguZmxvb3IocmVsZWFzZURhdGUudG9EYXRlKCkuZ2V0VGltZSgpIC8gOC42NGU3KTtcbiAgICAgIGNvbnN0IGtleVZhbGlkaXR5RGF5cyA9IF9leHRyYWN0VGltZShrZXkpO1xuICAgICAga2V5VmFsaWRpdHlEYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkoKGtleVZhbGlkaXR5RGF5cyArIDEpICogOC42NGU3LCAneCcpLmZvcm1hdCgnTU1NTSBERCwgWVlZWScpO1xuICAgICAgaWYgKHJlbGVhc2VEYXlzID4ga2V5VmFsaWRpdHlEYXlzKSB7XG4gICAgICAgIGNvbnNvbGVNZXNzYWdlU3RhdGUgPSAnZXhwaXJlZCc7XG4gICAgICAgIGRvbU1lc3NhZ2VTdGF0ZSA9ICdleHBpcmVkJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGVNZXNzYWdlU3RhdGUgPSAndmFsaWQnO1xuICAgICAgICBkb21NZXNzYWdlU3RhdGUgPSAndmFsaWQnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNOb25Db21tZXJjaWFsKSB7XG4gICAgICBjb25zb2xlTWVzc2FnZVN0YXRlID0gJ25vbl9jb21tZXJjaWFsJztcbiAgICAgIGRvbU1lc3NhZ2VTdGF0ZSA9ICd2YWxpZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGVNZXNzYWdlU3RhdGUgPSAnaW52YWxpZCc7XG4gICAgICBkb21NZXNzYWdlU3RhdGUgPSAnaW52YWxpZCc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGVNZXNzYWdlU3RhdGUgPSAnbWlzc2luZyc7XG4gICAgZG9tTWVzc2FnZVN0YXRlID0gJ21pc3NpbmcnO1xuICB9XG4gIGlmIChfaWdub3JlZCgpKSB7XG4gICAgY29uc29sZU1lc3NhZ2VTdGF0ZSA9ICd2YWxpZCc7XG4gICAgZG9tTWVzc2FnZVN0YXRlID0gJ3ZhbGlkJztcbiAgfVxuICBpZiAoIV9ub3RpZmllZCAmJiBjb25zb2xlTWVzc2FnZVN0YXRlICE9PSAndmFsaWQnKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGNvbnNvbGVNZXNzYWdlc1tjb25zb2xlTWVzc2FnZVN0YXRlXSh7XG4gICAgICBrZXlWYWxpZGl0eURhdGUsXG4gICAgICBob3RWZXJzaW9uXG4gICAgfSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnNvbGVbY29uc29sZU1lc3NhZ2VTdGF0ZSA9PT0gJ25vbl9jb21tZXJjaWFsJyA/ICdpbmZvJyA6ICd3YXJuJ10oY29uc29sZU1lc3NhZ2VzW2NvbnNvbGVNZXNzYWdlU3RhdGVdKHtcbiAgICAgICAga2V5VmFsaWRpdHlEYXRlLFxuICAgICAgICBob3RWZXJzaW9uXG4gICAgICB9KSk7XG4gICAgfVxuICAgIF9ub3RpZmllZCA9IHRydWU7XG4gIH1cbiAgaWYgKGRvbU1lc3NhZ2VTdGF0ZSAhPT0gJ3ZhbGlkJyAmJiBlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gZG9tTWVzc2FnZXNbZG9tTWVzc2FnZVN0YXRlXSh7XG4gICAgICBrZXlWYWxpZGl0eURhdGUsXG4gICAgICBob3RWZXJzaW9uXG4gICAgfSk7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBtZXNzYWdlTm9kZS5jbGFzc05hbWUgPSAnaG90LWRpc3BsYXktbGljZW5zZS1pbmZvJztcbiAgICAgIG1lc3NhZ2VOb2RlLmlubmVySFRNTCA9IGRvbU1lc3NhZ2VzW2RvbU1lc3NhZ2VTdGF0ZV0oe1xuICAgICAgICBrZXlWYWxpZGl0eURhdGUsXG4gICAgICAgIGhvdFZlcnNpb25cbiAgICAgIH0pO1xuICAgICAgZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShtZXNzYWdlTm9kZSwgZWxlbWVudC5uZXh0U2libGluZyk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfY2hlY2tLZXlTY2hlbWEodikge1xuICBsZXQgeiA9IFtdW19tXTtcbiAgbGV0IHAgPSB6O1xuICBpZiAodltfbV0gIT09IF9jcCgnXFx4NUEnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGxldCBjID0gJycsIGkgPSAnXFx4NDJcXHgzQ1xceDQ4XFx4MzRcXHg1MFxceDJCJy5zcGxpdCgnJyksIGogPSBfY3AoaS5zaGlmdCgpKTsgajsgaiA9IF9jcChpLnNoaWZ0KCkgfHwgJ0EnKSkge1xuICAgIC0taiA8ICcnW19tXSA/IHAgPSBwIHwgKF9waShgJHtfcGkoX2hkKGMpICsgKF9oZChfc3ModiwgTWF0aC5hYnMoaiksIDIpKSArIFtdKS5wYWRTdGFydCgyLCAnMCcpKX1gKSAlIDk3IHx8IDIpID4+IDEgOiBjID0gX3NzKHYsIGosICFqID8gNiA6IGlbX21dID09PSAxID8gOSA6IDgpO1xuICB9XG4gIHJldHVybiBwID09PSB6O1xufVxuLyogZXNsaW50LWVuYWJsZSAqLyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRNb3ZlcyA9IGdldE1vdmVzO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xuLyoqXG4gKiBHZXRzIGZpcnN0IHBvc2l0aW9uIHdoZXJlIHRvIG1vdmUgZWxlbWVudCAocmVzcGVjdGluZyB0aGUgZmFjdCB0aGF0IHNvbWUgZWxlbWVudCB3aWxsIGJlIHNvb25lciBvciBsYXRlclxuICogdGFrZW4gb3V0IG9mIHRoZSBkYXRhc2V0IGluIG9yZGVyIHRvIG1vdmUgdGhlbSkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtb3ZlZEluZGV4ZXMgU2VxdWVuY2Ugb2YgbW92ZWQgaW5kZXhlcyBmb3IgY2VydGFpbiBheGlzLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggRmluYWwgcGxhY2Ugd2hlcmUgdG8gbW92ZSByb3dzLlxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mSW5kZXhlcyBOdW1iZXIgb2YgaW5kZXhlcyBpbiBhIGRhdGFzZXQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBJbmRleCBpbmZvcm1pbmcgd2hlcmUgdG8gbW92ZSB0aGUgZmlyc3QgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0TW92ZUxpbmUobW92ZWRJbmRleGVzLCBmaW5hbEluZGV4LCBudW1iZXJPZkluZGV4ZXMpIHtcbiAgY29uc3Qgbm90TW92ZWRFbGVtZW50cyA9IEFycmF5LmZyb20oQXJyYXkobnVtYmVyT2ZJbmRleGVzKS5rZXlzKCkpLmZpbHRlcihpbmRleCA9PiBtb3ZlZEluZGV4ZXMuaW5jbHVkZXMoaW5kZXgpID09PSBmYWxzZSk7XG4gIGlmIChmaW5hbEluZGV4ID09PSAwKSB7XG4gICAgdmFyIF9ub3RNb3ZlZEVsZW1lbnRzJGZpbjtcbiAgICByZXR1cm4gKF9ub3RNb3ZlZEVsZW1lbnRzJGZpbiA9IG5vdE1vdmVkRWxlbWVudHNbZmluYWxJbmRleF0pICE9PSBudWxsICYmIF9ub3RNb3ZlZEVsZW1lbnRzJGZpbiAhPT0gdm9pZCAwID8gX25vdE1vdmVkRWxlbWVudHMkZmluIDogMDsgLy8gTW92aW5nIGJlZm9yZSB0aGUgZmlyc3QgZGF0YXNldCdzIGVsZW1lbnQuXG4gIH1cbiAgcmV0dXJuIG5vdE1vdmVkRWxlbWVudHNbZmluYWxJbmRleCAtIDFdICsgMTsgLy8gTW92aW5nIGJlZm9yZSBhbm90aGVyIGVsZW1lbnQuXG59XG5cbi8qKlxuICogR2V0cyBpbml0aWFsbHkgY2FsY3VsYXRlZCBtb3ZlIHBvc2l0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IG1vdmVkSW5kZXhlcyBTZXF1ZW5jZSBvZiBtb3ZlZCBpbmRleGVzIGZvciBjZXJ0YWluIGF4aXMuXG4gKiBAcGFyYW0ge251bWJlcn0gbW92ZUxpbmUgRmluYWwgcGxhY2Ugd2hlcmUgdG8gbW92ZSByb3dzLlxuICogQHJldHVybnMge0FycmF5PHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9Pn0gSW5pdGlhbGx5IGNhbGN1bGF0ZWQgbW92ZSBwb3NpdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3Zlcyhtb3ZlZEluZGV4ZXMsIG1vdmVMaW5lKSB7XG4gIGNvbnN0IG1vdmVzID0gW107XG4gIG1vdmVkSW5kZXhlcy5mb3JFYWNoKG1vdmVkSW5kZXggPT4ge1xuICAgIGNvbnN0IG1vdmUgPSB7XG4gICAgICBmcm9tOiBtb3ZlZEluZGV4LFxuICAgICAgdG86IG1vdmVMaW5lXG4gICAgfTtcbiAgICBtb3Zlcy5mb3JFYWNoKHByZXZpb3VzbHlNb3ZlZEluZGV4ID0+IHtcbiAgICAgIGNvbnN0IGlzTW92aW5nRnJvbUVuZFRvU3RhcnQgPSBwcmV2aW91c2x5TW92ZWRJbmRleC5mcm9tID4gcHJldmlvdXNseU1vdmVkSW5kZXgudG87XG4gICAgICBjb25zdCBpc01vdmluZ0VsZW1lbnRCZWZvcmUgPSBwcmV2aW91c2x5TW92ZWRJbmRleC50byA8PSBtb3ZlLmZyb207XG4gICAgICBjb25zdCBpc01vdmluZ0FmdGVyRWxlbWVudCA9IHByZXZpb3VzbHlNb3ZlZEluZGV4LmZyb20gPiBtb3ZlLmZyb207XG4gICAgICBpZiAoaXNNb3ZpbmdBZnRlckVsZW1lbnQgJiYgaXNNb3ZpbmdFbGVtZW50QmVmb3JlICYmIGlzTW92aW5nRnJvbUVuZFRvU3RhcnQpIHtcbiAgICAgICAgbW92ZS5mcm9tICs9IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBNb3ZlZCBlbGVtZW50IGZyb20gcmlnaHQgdG8gbGVmdCAob3IgYm90dG9tIHRvIHRvcCkuXG4gICAgaWYgKG1vdmUuZnJvbSA+PSBtb3ZlTGluZSkge1xuICAgICAgbW92ZUxpbmUgKz0gMTtcbiAgICB9XG4gICAgbW92ZXMucHVzaChtb3ZlKTtcbiAgfSk7XG4gIHJldHVybiBtb3Zlcztcbn1cblxuLyoqXG4gKiBHZXRzIGZpbmFsbHkgY2FsY3VsYXRlZCBtb3ZlIHBvc2l0aW9ucyAoYWZ0ZXIgYWRqdXN0aW5nKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9Pn0gbW92ZXMgSW5pdGlhbGx5IGNhbGN1bGF0ZWQgbW92ZSBwb3NpdGlvbnMuXG4gKiBAcmV0dXJucyB7QXJyYXk8e2Zyb206IG51bWJlciwgdG86IG51bWJlcn0+fSBGaW5hbGx5IGNhbGN1bGF0ZWQgbW92ZSBwb3NpdGlvbnMgKGFmdGVyIGFkanVzdGluZykuXG4gKi9cbmZ1bmN0aW9uIGFkanVzdGVkQ2FsY3VsYXRlZE1vdmVzKG1vdmVzKSB7XG4gIG1vdmVzLmZvckVhY2goKG1vdmUsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbmV4dE1vdmVkID0gbW92ZXMuc2xpY2UoaW5kZXggKyAxKTtcbiAgICBuZXh0TW92ZWQuZm9yRWFjaChuZXh0TW92ZWRJbmRleCA9PiB7XG4gICAgICBjb25zdCBpc01vdmluZ0Zyb21TdGFydFRvRW5kID0gbmV4dE1vdmVkSW5kZXguZnJvbSA8IG5leHRNb3ZlZEluZGV4LnRvO1xuICAgICAgaWYgKG5leHRNb3ZlZEluZGV4LmZyb20gPiBtb3ZlLmZyb20gJiYgaXNNb3ZpbmdGcm9tU3RhcnRUb0VuZCkge1xuICAgICAgICBuZXh0TW92ZWRJbmRleC5mcm9tIC09IDE7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbW92ZXM7XG59XG5cbi8qKlxuICogR2V0IGxpc3Qgb2YgbW92ZSBwb3NpdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtb3ZlZEluZGV4ZXMgU2VxdWVuY2Ugb2YgbW92ZWQgaW5kZXhlcyBmb3IgY2VydGFpbiBheGlzLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggRmluYWwgcGxhY2Ugd2hlcmUgdG8gbW92ZSByb3dzLlxuICogQHBhcmFtIHtudW1iZXJ9IG51bWJlck9mSW5kZXhlcyBOdW1iZXIgb2YgaW5kZXhlcyBpbiBhIGRhdGFzZXQuXG4gKiBAcmV0dXJucyB7QXJyYXk8e2Zyb206IG51bWJlciwgdG86IG51bWJlcn0+fVxuICovXG5mdW5jdGlvbiBnZXRNb3Zlcyhtb3ZlZEluZGV4ZXMsIGZpbmFsSW5kZXgsIG51bWJlck9mSW5kZXhlcykge1xuICBjb25zdCBtb3ZlcyA9IGdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3Zlcyhtb3ZlZEluZGV4ZXMsIGdldE1vdmVMaW5lKG1vdmVkSW5kZXhlcywgZmluYWxJbmRleCwgbnVtYmVyT2ZJbmRleGVzKSk7XG4gIHJldHVybiBhZGp1c3RlZENhbGN1bGF0ZWRNb3Zlcyhtb3Zlcyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNsYW1wID0gY2xhbXA7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbmV4cG9ydHMuaXNOdW1lcmljTGlrZSA9IGlzTnVtZXJpY0xpa2U7XG5leHBvcnRzLnJhbmdlRWFjaCA9IHJhbmdlRWFjaDtcbmV4cG9ydHMucmFuZ2VFYWNoUmV2ZXJzZSA9IHJhbmdlRWFjaFJldmVyc2U7XG5leHBvcnRzLnZhbHVlQWNjb3JkaW5nUGVyY2VudCA9IHZhbHVlQWNjb3JkaW5nUGVyY2VudDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwYXNzZWQgdmFsdWUgaXMgbnVtZXJpYyBvbmUuIEZvciBleGFtcGxlIHRoZXNlIHZhbHVlcyAocGFzc2VkIGFzIHN0cmluZyBvciBudW1iZXIpXG4gKiBhcmUgY29uc2lkZXJlZCBhcyBudW1lcmljIHZhbHVlczpcbiAqICAtIDAuMDAxXG4gKiAgLSAuMDAxXG4gKiAgLSAxMDAwMFxuICogIC0gMWUrMjZcbiAqICAtIDIyZS0yNlxuICogIC0gLjQ1ZSsyNlxuICogIC0gMHhhYmNkZWYgKGhleClcbiAqICAtIDB4MSAoaGV4KVxuICpcbiAqIHRoZXNlIHZhbHVlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXMgbnVtZXJpYzpcbiAqICAtIC0gMTAwMFxuICogIC0gMTAwIDAwMFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYWRkaXRpb25hbERlbGltaXRlcnMgQW4gYWRkaXRpb25hbCBkZWxpbWl0ZXJzIHRvIGJlIHVzZWQgd2hpbGUgY2hlY2tpbmcgdGhlIG51bWVyaWMgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKHZhbHVlKSB7XG4gIGxldCBhZGRpdGlvbmFsRGVsaW1pdGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAhaXNOYU4odmFsdWUpICYmIGlzRmluaXRlKHZhbHVlKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIC9cXGQvLnRlc3QodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBkZWxpbWl0ZXIgPSBBcnJheS5mcm9tKG5ldyBTZXQoWycuJywgLi4uYWRkaXRpb25hbERlbGltaXRlcnNdKSkubWFwKGQgPT4gYFxcXFwke2R9YCkuam9pbignfCcpO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWystXT8oKCgke2RlbGltaXRlcn0pP1xcXFxkKygoJHtkZWxpbWl0ZXJ9KVxcXFxkKyk/KGVbKy1dP1xcXFxkKyk/KXwoMHhbYS1mXFxcXGRdKykpJGAsICdpJykudGVzdCh2YWx1ZS50cmltKCkpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnZhbHVlT2YoKSA9PT0gJ251bWJlcicgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcGFzc2VkIHZhbHVlIGlzIG51bWVyaWMtbGlrZSB2YWx1ZS4gVGhlIGhlbHBlciByZXR1cm5zIGB0cnVlYCBmb3IgdGhlIHNhbWVcbiAqIHZhbHVlcyBhcyBmb3IgdGhlIGBpc051bWVyaWNgIGZ1bmN0aW9uIHBsdXMgYHRydWVgIGZvciBudW1iZXJzIGRlbGltaXRlZCBieSBjb21tYS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bWVyaWNMaWtlKHZhbHVlKSB7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUsIFsnLCddKTtcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYC5mb3JFYWNoYCBkZWZpbmVkIGJ5IHJhbmdlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VGcm9tIFRoZSBudW1iZXIgZnJvbSBzdGFydCBpdGVyYXRlLlxuICogQHBhcmFtIHtudW1iZXJ8RnVuY3Rpb259IHJhbmdlVG8gVGhlIG51bWJlciB3aGVyZSBmaW5pc2ggaXRlcmF0ZSBvciBmdW5jdGlvbiBhcyBhIGl0ZXJhdGVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICovXG5mdW5jdGlvbiByYW5nZUVhY2gocmFuZ2VGcm9tLCByYW5nZVRvLCBpdGVyYXRlZSkge1xuICBsZXQgaW5kZXggPSAtMTtcbiAgaWYgKHR5cGVvZiByYW5nZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaXRlcmF0ZWUgPSByYW5nZVRvO1xuICAgIHJhbmdlVG8gPSByYW5nZUZyb207XG4gIH0gZWxzZSB7XG4gICAgaW5kZXggPSByYW5nZUZyb20gLSAxO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBsdXNwbHVzICovXG4gIHdoaWxlICgrK2luZGV4IDw9IHJhbmdlVG8pIHtcbiAgICBpZiAoaXRlcmF0ZWUoaW5kZXgpID09PSBmYWxzZSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGAuZm9yRWFjaGAgZGVmaW5lZCBieSByYW5nZXMgaXRlcmFibGUgaW4gcmV2ZXJzZSBvcmRlci5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VGcm9tIFRoZSBudW1iZXIgZnJvbSBzdGFydCBpdGVyYXRlLlxuICogQHBhcmFtIHtudW1iZXJ8RnVuY3Rpb259IHJhbmdlVG8gVGhlIG51bWJlciB3aGVyZSBmaW5pc2ggaXRlcmF0ZSBvciBmdW5jdGlvbiBhcyBhIGl0ZXJhdGVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICovXG5mdW5jdGlvbiByYW5nZUVhY2hSZXZlcnNlKHJhbmdlRnJvbSwgcmFuZ2VUbywgaXRlcmF0ZWUpIHtcbiAgbGV0IGluZGV4ID0gcmFuZ2VGcm9tICsgMTtcbiAgaWYgKHR5cGVvZiByYW5nZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaXRlcmF0ZWUgPSByYW5nZVRvO1xuICAgIHJhbmdlVG8gPSAwO1xuICB9XG4gIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1cyAqL1xuICB3aGlsZSAoLS1pbmRleCA+PSByYW5nZVRvKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGluZGV4KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB2YWx1ZSBmcm9tIHBlcmNlbnQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIEJhc2UgdmFsdWUgZnJvbSBwZXJjZW50IHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcGVyY2VudCBDYW4gYmUgbnVtYmVyIG9yIHN0cmluZyAoZXEuIGAnMzMlJ2ApLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gdmFsdWVBY2NvcmRpbmdQZXJjZW50KHZhbHVlLCBwZXJjZW50KSB7XG4gIHBlcmNlbnQgPSBwYXJzZUludChwZXJjZW50LnRvU3RyaW5nKCkucmVwbGFjZSgnJScsICcnKSwgMTApO1xuICBwZXJjZW50ID0gaXNOYU4ocGVyY2VudCkgPyAwIDogcGVyY2VudDtcbiAgcmV0dXJuIHBhcnNlSW50KHZhbHVlICogcGVyY2VudCAvIDEwMCwgMTApO1xufVxuXG4vKipcbiAqIENsYW1wcyB0aGUgdmFsdWUgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIGJhc2UgbnVtYmVyIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IG1pblZhbHVlIFRoZSBtYXggbnVtYmVyIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IG1heFZhbHVlIFRoZSBtaW4gbnVtYmVyIHZhbHVlLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSkge1xuICBpZiAoTWF0aC5taW4odmFsdWUsIG1pblZhbHVlKSA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm4gbWluVmFsdWU7XG4gIH0gZWxzZSBpZiAoTWF0aC5tYXgodmFsdWUsIG1heFZhbHVlKSA9PT0gdmFsdWUpIHtcbiAgICByZXR1cm4gbWF4VmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xuZXhwb3J0cy5jcmVhdGVPYmplY3RQcm9wTGlzdGVuZXIgPSBjcmVhdGVPYmplY3RQcm9wTGlzdGVuZXI7XG5leHBvcnRzLmRlZXBDbG9uZSA9IGRlZXBDbG9uZTtcbmV4cG9ydHMuZGVlcEV4dGVuZCA9IGRlZXBFeHRlbmQ7XG5leHBvcnRzLmRlZXBPYmplY3RTaXplID0gZGVlcE9iamVjdFNpemU7XG5leHBvcnRzLmRlZmluZUdldHRlciA9IGRlZmluZUdldHRlcjtcbmV4cG9ydHMuZHVja1NjaGVtYSA9IGR1Y2tTY2hlbWE7XG5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbmV4cG9ydHMuZ2V0UHJvcGVydHkgPSBnZXRQcm9wZXJ0eTtcbmV4cG9ydHMuaGFzT3duUHJvcGVydHkgPSBoYXNPd25Qcm9wZXJ0eTtcbmV4cG9ydHMuaW5oZXJpdCA9IGluaGVyaXQ7XG5leHBvcnRzLmlzT2JqZWN0ID0gaXNPYmplY3Q7XG5leHBvcnRzLmlzT2JqZWN0RXF1YWwgPSBpc09iamVjdEVxdWFsO1xuZXhwb3J0cy5taXhpbiA9IG1peGluO1xuZXhwb3J0cy5vYmplY3RFYWNoID0gb2JqZWN0RWFjaDtcbmV4cG9ydHMuc2V0UHJvcGVydHkgPSBzZXRQcm9wZXJ0eTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuLyoqXG4gKiBHZW5lcmF0ZSBzY2hlbWEgZm9yIHBhc3NlZCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheXxvYmplY3R9IG9iamVjdCBBbiBvYmplY3QgdG8gYW5hbHl6ZS5cbiAqIEByZXR1cm5zIHtBcnJheXxvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGR1Y2tTY2hlbWEob2JqZWN0KSB7XG4gIGxldCBzY2hlbWE7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICBzY2hlbWEgPSBvYmplY3QubGVuZ3RoID8gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpLmZpbGwobnVsbCkgOiBbXTtcbiAgfSBlbHNlIHtcbiAgICBzY2hlbWEgPSB7fTtcbiAgICBvYmplY3RFYWNoKG9iamVjdCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdfX2NoaWxkcmVuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2NoZW1hW2tleV0gPSBkdWNrU2NoZW1hKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlWzBdKSkge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gW2R1Y2tTY2hlbWEodmFsdWVbMF0pXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFba2V5XSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHNjaGVtYTtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHdpdGhvdXQgd2l0aG91dCBjYWxsaW5nIHBhcmVudCBjb25zdHJ1Y3RvciwgYW5kIHNldHRpbmcgYENoaWxkLnByb3RvdHlwZS5jb25zdHJ1Y3RvcmAgdG8gYENoaWxkYCBpbnN0ZWFkIG9mIGBQYXJlbnRgLlxuICogQ3JlYXRlcyB0ZW1wb3JhcnkgZHVtbXkgZnVuY3Rpb24gdG8gY2FsbCBpdCBhcyBjb25zdHJ1Y3Rvci5cbiAqIERlc2NyaWJlZCBpbiB0aWNrZXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3B1bGwvNTE2LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBDaGlsZCBUaGUgY2hpbGQgY2xhc3MuXG4gKiBAcGFyYW0ge29iamVjdH0gUGFyZW50IFRoZSBwYXJlbnQgY2xhc3MuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBpbmhlcml0KENoaWxkLCBQYXJlbnQpIHtcbiAgUGFyZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcmVudDtcbiAgQ2hpbGQucHJvdG90eXBlID0gbmV3IFBhcmVudCgpO1xuICBDaGlsZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDaGlsZDtcbiAgcmV0dXJuIENoaWxkO1xufVxuXG4vKipcbiAqIFBlcmZvcm0gc2hhbGxvdyBleHRlbmQgb2YgYSB0YXJnZXQgb2JqZWN0IHdpdGggZXh0ZW5zaW9uJ3Mgb3duIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCBBbiBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG5ldyBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtvYmplY3R9IGV4dGVuc2lvbiBBbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW50byB0aGUgdGFyZ2V0LlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW3dyaXRhYmxlS2V5c10gQW4gYXJyYXkgb2Yga2V5cyB0aGF0IGFyZSB3cml0YWJsZSB0byB0YXJnZXQgb2JqZWN0LlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCwgZXh0ZW5zaW9uLCB3cml0YWJsZUtleXMpIHtcbiAgY29uc3QgaGFzV3JpdGFibGVLZXlzID0gQXJyYXkuaXNBcnJheSh3cml0YWJsZUtleXMpO1xuICBvYmplY3RFYWNoKGV4dGVuc2lvbiwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAoaGFzV3JpdGFibGVLZXlzID09PSBmYWxzZSB8fCB3cml0YWJsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIFBlcmZvcm0gZGVlcCBleHRlbmQgb2YgYSB0YXJnZXQgb2JqZWN0IHdpdGggZXh0ZW5zaW9uJ3Mgb3duIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCBBbiBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG5ldyBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtvYmplY3R9IGV4dGVuc2lvbiBBbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW50byB0aGUgdGFyZ2V0LlxuICovXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKHRhcmdldCwgZXh0ZW5zaW9uKSB7XG4gIG9iamVjdEVhY2goZXh0ZW5zaW9uLCAodmFsdWUsIGtleSkgPT4ge1xuICAgIGlmIChleHRlbnNpb25ba2V5XSAmJiB0eXBlb2YgZXh0ZW5zaW9uW2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoIXRhcmdldFtrZXldKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4dGVuc2lvbltrZXldKSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV4dGVuc2lvbltrZXldKSA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBleHRlbnNpb25ba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHt9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWVwRXh0ZW5kKHRhcmdldFtrZXldLCBleHRlbnNpb25ba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldFtrZXldID0gZXh0ZW5zaW9uW2tleV07XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGRlZXAgY2xvbmUgb2YgYW4gb2JqZWN0LlxuICogV0FSTklORyEgT25seSBjbG9uZXMgSlNPTiBwcm9wZXJ0aWVzLiBXaWxsIGNhdXNlIGVycm9yIHdoZW4gYG9iamAgY29udGFpbnMgYSBmdW5jdGlvbiwgRGF0ZSwgZXRjLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmogQW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBjbG9uZWQuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBkZWVwQ2xvbmUob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogU2hhbGxvdyBjbG9uZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBBbiBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBjbG9uZShvYmplY3QpIHtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIG9iamVjdEVhY2gob2JqZWN0LCAodmFsdWUsIGtleSkgPT4ge1xuICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZCB0aGUgQmFzZSBvYmplY3QgKHVzdWFsbHkgcHJvdG90eXBlKSBvZiB0aGUgZnVuY3Rpb25hbGl0eSB0aGUgYG1peGluc2Agb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gQmFzZSBCYXNlIG9iamVjdCB3aGljaCB3aWxsIGJlIGV4dGVuZGVkLlxuICogQHBhcmFtIHtvYmplY3R9IG1peGlucyBUaGUgb2JqZWN0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgXCJjb3BpZWRcIi5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG1peGluKEJhc2UpIHtcbiAgaWYgKCFCYXNlLk1JWElOUykge1xuICAgIEJhc2UuTUlYSU5TID0gW107XG4gIH1cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1peGlucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbWl4aW5zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWl4aW5zLCBtaXhpbkl0ZW0gPT4ge1xuICAgIEJhc2UuTUlYSU5TLnB1c2gobWl4aW5JdGVtLk1JWElOX05BTUUpO1xuICAgIG9iamVjdEVhY2gobWl4aW5JdGVtLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKEJhc2UucHJvdG90eXBlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1peGluIGNvbmZsaWN0LiBQcm9wZXJ0eSAnJHtrZXl9JyBhbHJlYWR5IGV4aXN0IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEJhc2UucHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGZ1bmN0aW9uIF9nZXR0ZXIocHJvcGVydHksIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGBfJHtwcm9wZXJ0eX1gO1xuICAgICAgICAgIGNvbnN0IGluaXRWYWx1ZSA9IG5ld1ZhbHVlID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkgfHwgaXNPYmplY3QocmVzdWx0KSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBkZWVwQ2xvbmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXNbcHJvcGVydHlOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IGluaXRWYWx1ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSBmdW5jdGlvbiBfc2V0dGVyKHByb3BlcnR5KSB7XG4gICAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gYF8ke3Byb3BlcnR5fWA7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbmV3VmFsdWU7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2UucHJvdG90eXBlLCBrZXksIHtcbiAgICAgICAgICBnZXQ6IGdldHRlcihrZXksIHZhbHVlKSxcbiAgICAgICAgICBzZXQ6IHNldHRlcihrZXkpLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBCYXNlO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0d28gb2JqZWN0cyBvciBhcnJheXMgYXJlIChkZWVwKSBlcXVhbC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxBcnJheX0gb2JqZWN0MSBUaGUgZmlyc3Qgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge29iamVjdHxBcnJheX0gb2JqZWN0MiBUaGUgc2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0RXF1YWwob2JqZWN0MSwgb2JqZWN0Mikge1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0MSkgPT09IEpTT04uc3RyaW5naWZ5KG9iamVjdDIpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSBwbGFpbiBPYmplY3QuXG4gKiBOb3RlOiBTdHJpbmcgYW5kIEFycmF5IGFyZSBub3QgcGxhaW4gT2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBBbiBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNPYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IG9uIHdoaWNoIHRvIGRlZmluZSB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGJlIGRlZmluZWQgb3IgbW9kaWZpZWQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgVGhlIGRlc2NyaXB0b3IgZm9yIHRoZSBwcm9wZXJ0eSBiZWluZyBkZWZpbmVkIG9yIG1vZGlmaWVkLlxuICovXG5mdW5jdGlvbiBkZWZpbmVHZXR0ZXIob2JqZWN0LCBwcm9wZXJ0eSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy52YWx1ZSA9IHZhbHVlO1xuICBvcHRpb25zLndyaXRhYmxlID0gb3B0aW9ucy53cml0YWJsZSAhPT0gZmFsc2U7XG4gIG9wdGlvbnMuZW51bWVyYWJsZSA9IG9wdGlvbnMuZW51bWVyYWJsZSAhPT0gZmFsc2U7XG4gIG9wdGlvbnMuY29uZmlndXJhYmxlID0gb3B0aW9ucy5jb25maWd1cmFibGUgIT09IGZhbHNlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGAuZm9yRWFjaGAgZm9yIG9iamVjdHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBvYmplY3RFYWNoKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gIGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0Lmhhc093blByb3BlcnR5IHx8IG9iamVjdC5oYXNPd25Qcm9wZXJ0eSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUob2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbi8qKlxuICogR2V0IG9iamVjdCBwcm9wZXJ0eSBieSBpdHMgbmFtZS4gQWNjZXNzIHRvIHN1YiBwcm9wZXJ0aWVzIGNhbiBiZSBhY2hpZXZlZCBieSBkb3Qgbm90YXRpb24gKGUucS4gYCdmb28uYmFyLmJheidgKS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IE9iamVjdCB3aGljaCB2YWx1ZSB3aWxsIGJlIGV4cG9ydGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgT2JqZWN0IHByb3BlcnR5IG5hbWUuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkob2JqZWN0LCBuYW1lKSB7XG4gIGNvbnN0IG5hbWVzID0gbmFtZS5zcGxpdCgnLicpO1xuICBsZXQgcmVzdWx0ID0gb2JqZWN0O1xuICBvYmplY3RFYWNoKG5hbWVzLCBuYW1lSXRlbSA9PiB7XG4gICAgcmVzdWx0ID0gcmVzdWx0W25hbWVJdGVtXTtcbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFNldCBhIHByb3BlcnR5IHZhbHVlIG9uIHRoZSBwcm92aWRlZCBvYmplY3QuIFdvcmtzIG9uIG5lc3RlZCBvYmplY3QgcHJvcCBuYW1lcyBhcyB3ZWxsIChlLmcuIGBmaXJzdC5uYW1lYCkuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBPYmplY3QgdG8gd29yayBvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFByb3AgbmFtZS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgdG8gYmUgYXNzaWduZWQgYXQgdGhlIHByb3ZpZGVkIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBzZXRQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHZhbHVlKSB7XG4gIGNvbnN0IG5hbWVzID0gbmFtZS5zcGxpdCgnLicpO1xuICBsZXQgd29ya2luZ09iamVjdCA9IG9iamVjdDtcbiAgbmFtZXMuZm9yRWFjaCgocHJvcE5hbWUsIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ICE9PSBuYW1lcy5sZW5ndGggLSAxKSB7XG4gICAgICBpZiAoIWhhc093blByb3BlcnR5KHdvcmtpbmdPYmplY3QsIHByb3BOYW1lKSkge1xuICAgICAgICB3b3JraW5nT2JqZWN0W3Byb3BOYW1lXSA9IHt9O1xuICAgICAgfVxuICAgICAgd29ya2luZ09iamVjdCA9IHdvcmtpbmdPYmplY3RbcHJvcE5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB3b3JraW5nT2JqZWN0W3Byb3BOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIG9iamVjdCBsZW5ndGggKHJlY3Vyc2l2ZWx5KS5cbiAqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBPYmplY3QgZm9yIHdoaWNoIHdlIHdhbnQgZ2V0IGxlbmd0aC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGRlZXBPYmplY3RTaXplKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCByZWN1cnNPYmpMZW4gPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICAgIG9iamVjdEVhY2gob2JqLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSAnX19jaGlsZHJlbicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9IHJlY3Vyc09iakxlbih2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiByZWN1cnNPYmpMZW4ob2JqZWN0KTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgb2JqZWN0IHdpdGggcHJvcGVydHkgd2hlcmUgaXRzIHZhbHVlIGNoYW5nZSB3aWxsIGJlIG9ic2VydmVkLlxuICpcbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdIERlZmF1bHQgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BlcnR5VG9MaXN0ZW49J3ZhbHVlJ10gUHJvcGVydHkgdG8gbGlzdGVuLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKGRlZmF1bHRWYWx1ZSkge1xuICBsZXQgcHJvcGVydHlUb0xpc3RlbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ3ZhbHVlJztcbiAgY29uc3QgcHJpdmF0ZVByb3BlcnR5ID0gYF8ke3Byb3BlcnR5VG9MaXN0ZW59YDtcbiAgY29uc3QgaG9sZGVyID0ge1xuICAgIF90b3VjaGVkOiBmYWxzZSxcbiAgICBbcHJpdmF0ZVByb3BlcnR5XTogZGVmYXVsdFZhbHVlLFxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xuICAgIH1cbiAgfTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGhvbGRlciwgcHJvcGVydHlUb0xpc3Rlbiwge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzW3ByaXZhdGVQcm9wZXJ0eV07XG4gICAgfSxcbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xuICAgICAgdGhpc1twcml2YXRlUHJvcGVydHldID0gdmFsdWU7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIGhvbGRlcjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhdCBzcGVjaWZpZWQgYGtleWAgdGhlcmUgaXMgYW55IHZhbHVlIGZvciBgb2JqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IE9iamVjdCB0byBzZWFyY2ggdmFsdWUgYXQgc3BlY2lmaWMga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBTdHJpbmcga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5lcXVhbHNJZ25vcmVDYXNlID0gZXF1YWxzSWdub3JlQ2FzZTtcbmV4cG9ydHMuaXNQZXJjZW50VmFsdWUgPSBpc1BlcmNlbnRWYWx1ZTtcbmV4cG9ydHMucmFuZG9tU3RyaW5nID0gcmFuZG9tU3RyaW5nO1xuZXhwb3J0cy5zYW5pdGl6ZSA9IHNhbml0aXplO1xuZXhwb3J0cy5zdHJpcFRhZ3MgPSBzdHJpcFRhZ3M7XG5leHBvcnRzLnN1YnN0aXR1dGUgPSBzdWJzdGl0dXRlO1xuZXhwb3J0cy50b1VwcGVyQ2FzZUZpcnN0ID0gdG9VcHBlckNhc2VGaXJzdDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZG9tcHVyaWZ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZG9tcHVyaWZ5XCIpKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi9taXhlZFwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIENvbnZlcnQgc3RyaW5nIHRvIHVwcGVyIGNhc2UgZmlyc3QgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB0b1VwcGVyQ2FzZUZpcnN0KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHJpbmcuc3Vic3RyKDEpO1xufVxuXG4vKipcbiAqIENvbXBhcmUgc3RyaW5ncyBjYXNlIGluc2Vuc2l0aXZlbHkuXG4gKlxuICogQHBhcmFtIHsuLi5zdHJpbmd9IHN0cmluZ3MgU3RyaW5ncyB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGVxdWFsc0lnbm9yZUNhc2UoKSB7XG4gIGNvbnN0IHVuaXF1ZSA9IFtdO1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc3RyaW5ncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBzdHJpbmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG4gIGxldCBsZW5ndGggPSBzdHJpbmdzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aCkge1xuICAgIGxlbmd0aCAtPSAxO1xuICAgIGNvbnN0IHN0cmluZyA9ICgwLCBfbWl4ZWQuc3RyaW5naWZ5KShzdHJpbmdzW2xlbmd0aF0pLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHVuaXF1ZS5pbmRleE9mKHN0cmluZykgPT09IC0xKSB7XG4gICAgICB1bmlxdWUucHVzaChzdHJpbmcpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5pcXVlLmxlbmd0aCA9PT0gMTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByYW5kb20gaGV4IHN0cmluZy4gVXNlZCBhcyBuYW1lc3BhY2UgZm9yIEhhbmRzb250YWJsZSBpbnN0YW5jZSBldmVudHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyAxNi1sb25nIGNoYXJhY3RlciByYW5kb20gc3RyaW5nIChlcS4gYCc5MmIxYmZjNzRlYzQnYCkuXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbVN0cmluZygpIHtcbiAgLyoqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBzNCgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbiAgfVxuICByZXR1cm4gczQoKSArIHM0KCkgKyBzNCgpICsgczQoKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdmFsdWUgaXMgdmFsaWQgcGVyY2VudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzUGVyY2VudFZhbHVlKHZhbHVlKSB7XG4gIHJldHVybiAvXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdCh2YWx1ZSk7XG59XG5cbi8qKlxuICogU3Vic3RpdHV0ZSBzdHJpbmdzIHBsYWNlZCBiZWV0d2VuIHNxdWFyZSBicmFja2V0cyBpbnRvIHZhbHVlIGRlZmluZWQgaW4gYHZhcmlhYmxlc2Agb2JqZWN0LiBTdHJpbmcgbmFtZXMgZGVmaW5lZCBpblxuICogc3F1YXJlIGJyYWNrZXRzIG11c3QgYmUgdGhlIHNhbWUgYXMgcHJvcGVydHkgbmFtZSBvZiBgdmFyaWFibGVzYCBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlIFRlbXBsYXRlIHN0cmluZy5cbiAqIEBwYXJhbSB7b2JqZWN0fSB2YXJpYWJsZXMgT2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBhdmFpbGFibGUgdmFsdWVzIHdoaWNoIGNhbiBiZSBpbmplY3RlZCBpbnRvIHRlbXBsYXRlLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3Vic3RpdHV0ZSh0ZW1wbGF0ZSkge1xuICBsZXQgdmFyaWFibGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgcmV0dXJuIGAke3RlbXBsYXRlfWAucmVwbGFjZSgvKD86XFxcXCk/XFxbKFteW1xcXV0rKV0vZywgKG1hdGNoLCBuYW1lKSA9PiB7XG4gICAgaWYgKG1hdGNoLmNoYXJBdCgwKSA9PT0gJ1xcXFwnKSB7XG4gICAgICByZXR1cm4gbWF0Y2guc3Vic3RyKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdmFyaWFibGVzW25hbWVdID09PSB1bmRlZmluZWQgPyAnJyA6IHZhcmlhYmxlc1tuYW1lXTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3RyaXAgYW55IEhUTUwgdGFnIGZyb20gdGhlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFN0cmluZyB0byBjdXQgSFRNTCBmcm9tLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gc3RyaXBUYWdzKHN0cmluZykge1xuICByZXR1cm4gc2FuaXRpemUoYCR7c3RyaW5nfWAsIHtcbiAgICBBTExPV0VEX1RBR1M6IFtdXG4gIH0pO1xufVxuXG4vKipcbiAqIFNhbml0aXplcyBzdHJpbmcgZnJvbSBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgU3RyaW5nIHRvIHNhbml0aXplLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSBET01QdXJpZnkncyBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHNhbml0aXplKHN0cmluZywgb3B0aW9ucykge1xuICByZXR1cm4gX2RvbXB1cmlmeS5kZWZhdWx0LnNhbml0aXplKHN0cmluZywgb3B0aW9ucyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnRvU2luZ2xlTGluZSA9IHRvU2luZ2xlTGluZTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vaGVscGVycy9hcnJheVwiKTtcbi8qKlxuICogVGFncyBhIG11bHRpbGluZSBzdHJpbmcgYW5kIHJldHVybiBuZXcgb25lIHdpdGhvdXQgbGluZSBicmVhayBjaGFyYWN0ZXJzIGFuZCBmb2xsb3dpbmcgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHN0cmluZ3MgUGFydHMgb2YgdGhlIGVudGlyZSBzdHJpbmcgd2l0aG91dCBleHByZXNzaW9ucy5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBleHByZXNzaW9ucyBFeHByZXNzaW9ucyBjb252ZXJ0ZWQgdG8gc3RyaW5ncywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBlbnRpcmUgc3RyaW5nLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9TaW5nbGVMaW5lKHN0cmluZ3MpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4cHJlc3Npb25zID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBleHByZXNzaW9uc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gKDAsIF9hcnJheS5hcnJheVJlZHVjZSkoc3RyaW5ncywgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB2YWx1ZVdpdGhvdXRXaGl0ZVNwYWNlcyA9IGN1cnJlbnRWYWx1ZS5yZXBsYWNlKC9cXHI/XFxuXFxzKi9nLCAnJyk7XG4gICAgY29uc3QgZXhwcmVzc2lvbkZvckluZGV4ID0gZXhwcmVzc2lvbnNbaW5kZXhdID8gZXhwcmVzc2lvbnNbaW5kZXhdIDogJyc7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWUgKyB2YWx1ZVdpdGhvdXRXaGl0ZVNwYWNlcyArIGV4cHJlc3Npb25Gb3JJbmRleDtcbiAgfSwgJycpO1xuICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaXNDdHJsS2V5ID0gaXNDdHJsS2V5O1xuZXhwb3J0cy5pc0N0cmxNZXRhS2V5ID0gaXNDdHJsTWV0YUtleTtcbmV4cG9ydHMuaXNGdW5jdGlvbktleSA9IGlzRnVuY3Rpb25LZXk7XG5leHBvcnRzLmlzS2V5ID0gaXNLZXk7XG5leHBvcnRzLmlzUHJpbnRhYmxlQ2hhciA9IGlzUHJpbnRhYmxlQ2hhcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuL2Jyb3dzZXJcIik7XG5jb25zdCBLRVlfQ09ERVMgPSBleHBvcnRzLktFWV9DT0RFUyA9IHtcbiAgQUxUOiAxOCxcbiAgQVJST1dfRE9XTjogNDAsXG4gIEFSUk9XX0xFRlQ6IDM3LFxuICBBUlJPV19SSUdIVDogMzksXG4gIEFSUk9XX1VQOiAzOCxcbiAgQVVESU9fRE9XTjogKDAsIF9icm93c2VyLmlzRmlyZWZveCkoKSA/IDE4MiA6IDE3NCxcbiAgQVVESU9fTVVURTogKDAsIF9icm93c2VyLmlzRmlyZWZveCkoKSA/IDE4MSA6IDE3MyxcbiAgQVVESU9fVVA6ICgwLCBfYnJvd3Nlci5pc0ZpcmVmb3gpKCkgPyAxODMgOiAxNzUsXG4gIEJBQ0tTUEFDRTogOCxcbiAgQ0FQU19MT0NLOiAyMCxcbiAgQ09NTUE6IDE4OCxcbiAgQ09NTUFORF9MRUZUOiA5MSxcbiAgQ09NTUFORF9SSUdIVDogOTMsXG4gIENPTU1BTkRfRklSRUZPWDogMjI0LFxuICBDT05UUk9MOiAxNyxcbiAgREVMRVRFOiA0NixcbiAgRU5EOiAzNSxcbiAgRU5URVI6IDEzLFxuICBFU0NBUEU6IDI3LFxuICBGMTogMTEyLFxuICBGMjogMTEzLFxuICBGMzogMTE0LFxuICBGNDogMTE1LFxuICBGNTogMTE2LFxuICBGNjogMTE3LFxuICBGNzogMTE4LFxuICBGODogMTE5LFxuICBGOTogMTIwLFxuICBGMTA6IDEyMSxcbiAgRjExOiAxMjIsXG4gIEYxMjogMTIzLFxuICBGMTM6IDEyNCxcbiAgRjE0OiAxMjUsXG4gIEYxNTogMTI2LFxuICBGMTY6IDEyNyxcbiAgRjE3OiAxMjgsXG4gIEYxODogMTI5LFxuICBGMTk6IDEzMCxcbiAgSE9NRTogMzYsXG4gIElOU0VSVDogNDUsXG4gIE1FRElBX05FWFQ6IDE3NixcbiAgTUVESUFfUExBWV9QQVVTRTogMTc5LFxuICBNRURJQV9QUkVWOiAxNzcsXG4gIE1FRElBX1NUT1A6IDE3OCxcbiAgTlVMTDogMCxcbiAgTlVNX0xPQ0s6IDE0NCxcbiAgUEFHRV9ET1dOOiAzNCxcbiAgUEFHRV9VUDogMzMsXG4gIFBBVVNFOiAxOSxcbiAgUEVSSU9EOiAxOTAsXG4gIFNDUk9MTF9MT0NLOiAxNDUsXG4gIFNISUZUOiAxNixcbiAgU1BBQ0U6IDMyLFxuICBUQUI6IDksXG4gIEE6IDY1LFxuICBDOiA2NyxcbiAgRDogNjgsXG4gIEY6IDcwLFxuICBMOiA3NixcbiAgTzogNzksXG4gIFA6IDgwLFxuICBTOiA4MyxcbiAgVjogODYsXG4gIFg6IDg4LFxuICBZOiA4OSxcbiAgWjogOTBcbn07XG5jb25zdCBGVU5DVElPTl9LRVlTID0gW0tFWV9DT0RFUy5BTFQsIEtFWV9DT0RFUy5BUlJPV19ET1dOLCBLRVlfQ09ERVMuQVJST1dfTEVGVCwgS0VZX0NPREVTLkFSUk9XX1JJR0hULCBLRVlfQ09ERVMuQVJST1dfVVAsIEtFWV9DT0RFUy5BVURJT19ET1dOLCBLRVlfQ09ERVMuQVVESU9fTVVURSwgS0VZX0NPREVTLkFVRElPX1VQLCBLRVlfQ09ERVMuQkFDS1NQQUNFLCBLRVlfQ09ERVMuQ0FQU19MT0NLLCBLRVlfQ09ERVMuREVMRVRFLCBLRVlfQ09ERVMuRU5ELCBLRVlfQ09ERVMuRU5URVIsIEtFWV9DT0RFUy5FU0NBUEUsIEtFWV9DT0RFUy5GMSwgS0VZX0NPREVTLkYyLCBLRVlfQ09ERVMuRjMsIEtFWV9DT0RFUy5GNCwgS0VZX0NPREVTLkY1LCBLRVlfQ09ERVMuRjYsIEtFWV9DT0RFUy5GNywgS0VZX0NPREVTLkY4LCBLRVlfQ09ERVMuRjksIEtFWV9DT0RFUy5GMTAsIEtFWV9DT0RFUy5GMTEsIEtFWV9DT0RFUy5GMTIsIEtFWV9DT0RFUy5GMTMsIEtFWV9DT0RFUy5GMTQsIEtFWV9DT0RFUy5GMTUsIEtFWV9DT0RFUy5GMTYsIEtFWV9DT0RFUy5GMTcsIEtFWV9DT0RFUy5GMTgsIEtFWV9DT0RFUy5GMTksIEtFWV9DT0RFUy5IT01FLCBLRVlfQ09ERVMuSU5TRVJULCBLRVlfQ09ERVMuTUVESUFfTkVYVCwgS0VZX0NPREVTLk1FRElBX1BMQVlfUEFVU0UsIEtFWV9DT0RFUy5NRURJQV9QUkVWLCBLRVlfQ09ERVMuTUVESUFfU1RPUCwgS0VZX0NPREVTLk5VTEwsIEtFWV9DT0RFUy5OVU1fTE9DSywgS0VZX0NPREVTLlBBR0VfRE9XTiwgS0VZX0NPREVTLlBBR0VfVVAsIEtFWV9DT0RFUy5QQVVTRSwgS0VZX0NPREVTLlNDUk9MTF9MT0NLLCBLRVlfQ09ERVMuU0hJRlQsIEtFWV9DT0RFUy5UQUJdO1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBrZXlDb2RlIHJlcHJlc2VudHMgYSBwcmludGFibGUgY2hhcmFjdGVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBrZXlDb2RlIFRoZSBrZXlib2FyZCBrZXkgY29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1ByaW50YWJsZUNoYXIoa2V5Q29kZSkge1xuICByZXR1cm4ga2V5Q29kZSA9PT0gMzIgfHxcbiAgLy8gc3BhY2VcbiAga2V5Q29kZSA+PSA0OCAmJiBrZXlDb2RlIDw9IDU3IHx8XG4gIC8vIDAtOVxuICBrZXlDb2RlID49IDk2ICYmIGtleUNvZGUgPD0gMTExIHx8XG4gIC8vIG51bXBhZFxuICBrZXlDb2RlID49IDE4NiAmJiBrZXlDb2RlIDw9IDE5MiB8fFxuICAvLyA7PSwtLi9gXG4gIGtleUNvZGUgPj0gMjE5ICYmIGtleUNvZGUgPD0gMjIyIHx8XG4gIC8vIFtde31cXHxcIidcbiAga2V5Q29kZSA+PSAyMjYgfHxcbiAgLy8gc3BlY2lhbCBjaGFycyAoMjI5IGZvciBBc2lhbiBjaGFycylcbiAga2V5Q29kZSA+PSA2NSAmJiBrZXlDb2RlIDw9IDkwOyAvLyBhLXpcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0ga2V5Q29kZSBUaGUga2V5Ym9hcmQga2V5IGNvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbktleShrZXlDb2RlKSB7XG4gIHJldHVybiBGVU5DVElPTl9LRVlTLmluY2x1ZGVzKGtleUNvZGUpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBwYXNzZWQga2V5IGNvZGUgaXMgY3RybCBvciBjbWQga2V5LiBEZXBlbmRzIG9uIHdoYXQgT1MgdGhlIGNvZGUgcnVucyBpdCBjaGVjayBrZXkgY29kZSBiYXNlZCBvblxuICogZGlmZmVyZW50IG1ldGEga2V5IGNvZGVzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBrZXlDb2RlIFRoZSBrZXlib2FyZCBrZXkgY29kZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0N0cmxLZXkoa2V5Q29kZSkge1xuICBjb25zdCBrZXlzID0gW107XG4gIGlmICgoMCwgX2Jyb3dzZXIuaXNNYWNPUykoKSkge1xuICAgIGtleXMucHVzaChLRVlfQ09ERVMuQ09NTUFORF9MRUZULCBLRVlfQ09ERVMuQ09NTUFORF9SSUdIVCwgS0VZX0NPREVTLkNPTU1BTkRfRklSRUZPWCk7XG4gIH0gZWxzZSB7XG4gICAga2V5cy5wdXNoKEtFWV9DT0RFUy5DT05UUk9MKTtcbiAgfVxuICByZXR1cm4ga2V5cy5pbmNsdWRlcyhrZXlDb2RlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcGFzc2VkIGtleSBjb2RlIGlzIGN0cmwgb3IgY21kIGtleS4gVGhpcyBoZWxwZXIgY2hlY2tzIGlmIHRoZSBrZXkgY29kZSBtYXRjaGVzIHRvIG1ldGEga2V5c1xuICogcmVnYXJkbGVzcyBvZiB0aGUgT1Mgb24gd2hpY2ggaXQgaXMgcnVubmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0ga2V5Q29kZSBUaGUga2V5Ym9hcmQga2V5IGNvZGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDdHJsTWV0YUtleShrZXlDb2RlKSB7XG4gIHJldHVybiBbS0VZX0NPREVTLkNPTlRST0wsIEtFWV9DT0RFUy5DT01NQU5EX0xFRlQsIEtFWV9DT0RFUy5DT01NQU5EX1JJR0hULCBLRVlfQ09ERVMuQ09NTUFORF9GSVJFRk9YXS5pbmNsdWRlcyhrZXlDb2RlKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0ga2V5Q29kZSBUaGUga2V5Ym9hcmQga2V5IGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZUNvZGUgVGhlIGxpc3Qgb2YgdGhlIGtleSBjb2RlcyB0byBjb21wYXJlIHdpdGguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNLZXkoa2V5Q29kZSwgYmFzZUNvZGUpIHtcbiAgY29uc3Qga2V5cyA9IGJhc2VDb2RlLnNwbGl0KCd8Jyk7XG4gIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGtleXMsIGtleSA9PiB7XG4gICAgaWYgKGtleUNvZGUgPT09IEtFWV9DT0RFU1trZXldKSB7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBqUXVlcnlXcmFwcGVyO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbi8qKlxuICogQHBhcmFtIHtDb3JlfSBIYW5kc29udGFibGUgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24galF1ZXJ5V3JhcHBlcihIYW5kc29udGFibGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IGpRdWVyeSA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiB3aW5kb3cualF1ZXJ5O1xuICBpZiAoIWpRdWVyeSkge1xuICAgIHJldHVybjtcbiAgfVxuICBqUXVlcnkuZm4uaGFuZHNvbnRhYmxlID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgIGNvbnN0ICR0aGlzID0gdGhpcy5maXJzdCgpOyAvLyBVc2Ugb25seSBmaXJzdCBlbGVtZW50IGZyb20gbGlzdFxuICAgIGxldCBpbnN0YW5jZSA9ICR0aGlzLmRhdGEoJ2hhbmRzb250YWJsZScpO1xuXG4gICAgLy8gSW5pdCBjYXNlXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB1c2VyU2V0dGluZ3MgPSBhY3Rpb24gfHwge307XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModXNlclNldHRpbmdzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gbmV3IEhhbmRzb250YWJsZS5Db3JlKCR0aGlzWzBdLCB1c2VyU2V0dGluZ3MpO1xuICAgICAgICAkdGhpcy5kYXRhKCdoYW5kc29udGFibGUnLCBpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLmluaXQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkdGhpcztcbiAgICB9XG4gICAgbGV0IG91dHB1dDtcblxuICAgIC8vIEFjdGlvbiBjYXNlXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlW2FjdGlvbl0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSBpbnN0YW5jZVthY3Rpb25dLmNhbGwoaW5zdGFuY2UsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoYWN0aW9uID09PSAnZGVzdHJveScpIHtcbiAgICAgICAgICAkdGhpcy5yZW1vdmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSGFuZHNvbnRhYmxlIGRvIG5vdCBwcm92aWRlIGFjdGlvbjogJHthY3Rpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vKipcbiAqIENvbnN0YW50cyBmb3IgcGFydHMgb2YgdHJhbnNsYXRpb24uXG4gKi9cblxuY29uc3QgQ09OVEVYVF9NRU5VX0lURU1TX05BTUVTUEFDRSA9IGV4cG9ydHMuQ09OVEVYVF9NRU5VX0lURU1TX05BTUVTUEFDRSA9ICdDb250ZXh0TWVudTppdGVtcyc7XG5jb25zdCBDTV9BTElBUyA9IENPTlRFWFRfTUVOVV9JVEVNU19OQU1FU1BBQ0U7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUyA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVMgPSBgJHtDTV9BTElBU30ubm9JdGVtc2A7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkUgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JPV19BQk9WRSA9IGAke0NNX0FMSUFTfS5pbnNlcnRSb3dBYm92ZWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1cgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPVyA9IGAke0NNX0FMSUFTfS5pbnNlcnRSb3dCZWxvd2A7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfTEVGVCA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX0xFRlQgPSBgJHtDTV9BTElBU30uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVCA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX1JJR0hUID0gYCR7Q01fQUxJQVN9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVyA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVyA9IGAke0NNX0FMSUFTfS5yZW1vdmVSb3dgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTFVNTiA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTFVNTiA9IGAke0NNX0FMSUFTfS5yZW1vdmVDb2x1bW5gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfVU5ETyA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfVU5ETyA9IGAke0NNX0FMSUFTfS51bmRvYDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX1JFRE8gPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JFRE8gPSBgJHtDTV9BTElBU30ucmVkb2A7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFkgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWSA9IGAke0NNX0FMSUFTfS5yZWFkT25seWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU4gPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NPTFVNTiA9IGAke0NNX0FMSUFTfS5jbGVhckNvbHVtbmA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19DT1BZID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19DT1BZID0gYCR7Q01fQUxJQVN9LmNvcHlgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlMgPSBgJHtDTV9BTElBU30uY29weVdpdGhIZWFkZXJzYDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBfSEVBREVSUyA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9HUk9VUF9IRUFERVJTID0gYCR7Q01fQUxJQVN9LmNvcHlXaXRoR3JvdXBIZWFkZXJzYDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWSA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZID0gYCR7Q01fQUxJQVN9LmNvcHlIZWFkZXJzT25seWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19DVVQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0NVVCA9IGAke0NNX0FMSUFTfS5jdXRgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTiA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTiA9IGAke0NNX0FMSUFTfS5mcmVlemVDb2x1bW5gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19VTkZSRUVaRV9DT0xVTU4gPSBgJHtDTV9BTElBU30udW5mcmVlemVDb2x1bW5gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfTUVSR0VfQ0VMTFMgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTID0gYCR7Q01fQUxJQVN9Lm1lcmdlQ2VsbHNgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfVU5NRVJHRV9DRUxMUyA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfVU5NRVJHRV9DRUxMUyA9IGAke0NNX0FMSUFTfS51bm1lcmdlQ2VsbHNgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0FERF9DT01NRU5UID0gYCR7Q01fQUxJQVN9LmFkZENvbW1lbnRgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19FRElUX0NPTU1FTlQgPSBgJHtDTV9BTElBU30uZWRpdENvbW1lbnRgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT01NRU5UID0gYCR7Q01fQUxJQVN9LnJlbW92ZUNvbW1lbnRgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWV9DT01NRU5UID0gYCR7Q01fQUxJQVN9LnJlYWRPbmx5Q29tbWVudGA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVCA9IGAke0NNX0FMSUFTfS5hbGlnbmA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTEVGVCA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0xFRlQgPSBgJHtDTV9BTElBU30uYWxpZ24ubGVmdGA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSID0gYCR7Q01fQUxJQVN9LmFsaWduLmNlbnRlcmA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9SSUdIVCA9IGAke0NNX0FMSUFTfS5hbGlnbi5yaWdodGA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfSlVTVElGWSA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlkgPSBgJHtDTV9BTElBU30uYWxpZ24uanVzdGlmeWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfVE9QID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfVE9QID0gYCR7Q01fQUxJQVN9LmFsaWduLnRvcGA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFID0gYCR7Q01fQUxJQVN9LmFsaWduLm1pZGRsZWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NID0gYCR7Q01fQUxJQVN9LmFsaWduLmJvdHRvbWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19CT1JERVJTID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTID0gYCR7Q01fQUxJQVN9LmJvcmRlcnNgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19UT1AgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfVE9QID0gYCR7Q01fQUxJQVN9LmJvcmRlcnMudG9wYDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQgPSBgJHtDTV9BTElBU30uYm9yZGVycy5yaWdodGA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0JPVFRPTSA9IGV4cG9ydHMuQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19CT1RUT00gPSBgJHtDTV9BTElBU30uYm9yZGVycy5ib3R0b21gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19MRUZUID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQgPSBgJHtDTV9BTElBU30uYm9yZGVycy5sZWZ0YDtcbmNvbnN0IENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTID0gZXhwb3J0cy5DT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQk9SREVSUyA9IGAke0NNX0FMSUFTfS5ib3JkZXJzLnJlbW92ZWA7XG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRCA9IGAke0NNX0FMSUFTfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG5jb25zdCBDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0RFVEFDSF9DSElMRCA9IGAke0NNX0FMSUFTfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cblxuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU4gPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0hJREVfQ09MVU1OID0gYCR7Q01fQUxJQVN9LmhpZGVDb2x1bW5gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19DT0xVTU4gPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OID0gYCR7Q01fQUxJQVN9LnNob3dDb2x1bW5gO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1cgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX0hJREVfUk9XID0gYCR7Q01fQUxJQVN9LmhpZGVSb3dgO1xuY29uc3QgQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19ST1cgPSBleHBvcnRzLkNPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XID0gYCR7Q01fQUxJQVN9LnNob3dSb3dgO1xuY29uc3QgRklMVEVSU19OQU1FU1BBQ0UgPSBleHBvcnRzLkZJTFRFUlNfTkFNRVNQQUNFID0gJ0ZpbHRlcnM6JztcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0UgPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0UgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1jb25kaXRpb25zYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19OT05FID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfTk9ORSA9IGAke0ZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0V9Lm5vbmVgO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX0VNUFRZID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfRU1QVFkgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5pc0VtcHR5YDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFkgPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFkgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5pc05vdEVtcHR5YDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTCA9IGV4cG9ydHMuRklMVEVSU19DT05ESVRJT05TX0VRVUFMID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0uaXNFcXVhbFRvYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUwgPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUwgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5pc05vdEVxdWFsVG9gO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEggPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5iZWdpbnNXaXRoYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEggPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEggPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5lbmRzV2l0aGA7XG5jb25zdCBGSUxURVJTX0NPTkRJVElPTlNfQ09OVEFJTlMgPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19DT05UQUlOUyA9IGAke0ZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0V9LmNvbnRhaW5zYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQ09OVEFJTiA9IGV4cG9ydHMuRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0uZG9lc05vdENvbnRhaW5gO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfQllfVkFMVUUgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5ieVZhbHVlYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU4gPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU4gPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5ncmVhdGVyVGhhbmA7XG5jb25zdCBGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0uZ3JlYXRlclRoYW5PckVxdWFsVG9gO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTiA9IGV4cG9ydHMuRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTiA9IGAke0ZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0V9Lmxlc3NUaGFuYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUwgPSBleHBvcnRzLkZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUwgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5sZXNzVGhhbk9yRXF1YWxUb2A7XG5jb25zdCBGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTiA9IGV4cG9ydHMuRklMVEVSU19DT05ESVRJT05TX0JFVFdFRU4gPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5pc0JldHdlZW5gO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfTk9UX0JFVFdFRU4gPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5pc05vdEJldHdlZW5gO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX0FGVEVSID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfQUZURVIgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS5hZnRlcmA7XG5jb25zdCBGSUxURVJTX0NPTkRJVElPTlNfQkVGT1JFID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfQkVGT1JFID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0uYmVmb3JlYDtcbmNvbnN0IEZJTFRFUlNfQ09ORElUSU9OU19UT0RBWSA9IGV4cG9ydHMuRklMVEVSU19DT05ESVRJT05TX1RPREFZID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0udG9kYXlgO1xuY29uc3QgRklMVEVSU19DT05ESVRJT05TX1RPTU9SUk9XID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1cgPSBgJHtGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFfS50b21vcnJvd2A7XG5jb25zdCBGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZID0gZXhwb3J0cy5GSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZID0gYCR7RklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRX0ueWVzdGVyZGF5YDtcbmNvbnN0IEZJTFRFUlNfRElWU19GSUxURVJfQllfQ09ORElUSU9OID0gZXhwb3J0cy5GSUxURVJTX0RJVlNfRklMVEVSX0JZX0NPTkRJVElPTiA9IGAke0ZJTFRFUlNfTkFNRVNQQUNFfWxhYmVscy5maWx0ZXJCeUNvbmRpdGlvbmA7XG5jb25zdCBGSUxURVJTX0RJVlNfRklMVEVSX0JZX1ZBTFVFID0gZXhwb3J0cy5GSUxURVJTX0RJVlNfRklMVEVSX0JZX1ZBTFVFID0gYCR7RklMVEVSU19OQU1FU1BBQ0V9bGFiZWxzLmZpbHRlckJ5VmFsdWVgO1xuY29uc3QgRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT04gPSBleHBvcnRzLkZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OID0gYCR7RklMVEVSU19OQU1FU1BBQ0V9bGFiZWxzLmNvbmp1bmN0aW9uYDtcbmNvbnN0IEZJTFRFUlNfTEFCRUxTX0RJU0pVTkNUSU9OID0gZXhwb3J0cy5GSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTiA9IGAke0ZJTFRFUlNfTkFNRVNQQUNFfWxhYmVscy5kaXNqdW5jdGlvbmA7XG5jb25zdCBGSUxURVJTX1ZBTFVFU19CTEFOS19DRUxMUyA9IGV4cG9ydHMuRklMVEVSU19WQUxVRVNfQkxBTktfQ0VMTFMgPSBgJHtGSUxURVJTX05BTUVTUEFDRX12YWx1ZXMuYmxhbmtDZWxsc2A7XG5jb25zdCBGSUxURVJTX0JVVFRPTlNfU0VMRUNUX0FMTCA9IGV4cG9ydHMuRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEwgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1idXR0b25zLnNlbGVjdEFsbGA7XG5jb25zdCBGSUxURVJTX0JVVFRPTlNfQ0xFQVIgPSBleHBvcnRzLkZJTFRFUlNfQlVUVE9OU19DTEVBUiA9IGAke0ZJTFRFUlNfTkFNRVNQQUNFfWJ1dHRvbnMuY2xlYXJgO1xuY29uc3QgRklMVEVSU19CVVRUT05TX09LID0gZXhwb3J0cy5GSUxURVJTX0JVVFRPTlNfT0sgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1idXR0b25zLm9rYDtcbmNvbnN0IEZJTFRFUlNfQlVUVE9OU19DQU5DRUwgPSBleHBvcnRzLkZJTFRFUlNfQlVUVE9OU19DQU5DRUwgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1idXR0b25zLmNhbmNlbGA7XG5jb25zdCBGSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIID0gZXhwb3J0cy5GSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIID0gYCR7RklMVEVSU19OQU1FU1BBQ0V9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWFyY2hgO1xuY29uc3QgRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1ZBTFVFID0gZXhwb3J0cy5GSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfVkFMVUUgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYDtcbmNvbnN0IEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUUgPSBleHBvcnRzLkZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUUgPSBgJHtGSUxURVJTX05BTUVTUEFDRX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYDtcbmNvbnN0IENIRUNLQk9YX1JFTkRFUkVSX05BTUVTUEFDRSA9IGV4cG9ydHMuQ0hFQ0tCT1hfUkVOREVSRVJfTkFNRVNQQUNFID0gJ0NoZWNrYm94UmVuZGVyZXI6JztcbmNvbnN0IENIRUNLQk9YX0NIRUNLRUQgPSBleHBvcnRzLkNIRUNLQk9YX0NIRUNLRUQgPSBgJHtDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0V9Y2hlY2tlZGA7XG5jb25zdCBDSEVDS0JPWF9VTkNIRUNLRUQgPSBleHBvcnRzLkNIRUNLQk9YX1VOQ0hFQ0tFRCA9IGAke0NIRUNLQk9YX1JFTkRFUkVSX05BTUVTUEFDRX11bmNoZWNrZWRgOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8qKlxuICogQHByZXNlcnZlXG4gKiBBdXRob3JzOiBIYW5kc29uY29kZVxuICogTGFzdCB1cGRhdGVkOiBOb3YgMTUsIDIwMTdcbiAqXG4gKiBEZXNjcmlwdGlvbjogRGVmaW5pdGlvbiBmaWxlIGZvciBFbmdsaXNoIC0gVW5pdGVkIFN0YXRlcyBsYW5ndWFnZS1jb3VudHJ5LlxuICovXG5cbmNvbnN0IGRpY3Rpb25hcnkgPSB7XG4gIGxhbmd1YWdlQ29kZTogJ2VuLVVTJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVNdOiAnTm8gYXZhaWxhYmxlIG9wdGlvbnMnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkVdOiAnSW5zZXJ0IHJvdyBhYm92ZScsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPV106ICdJbnNlcnQgcm93IGJlbG93JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX0xFRlRdOiAnSW5zZXJ0IGNvbHVtbiBsZWZ0JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX1JJR0hUXTogJ0luc2VydCBjb2x1bW4gcmlnaHQnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19SRU1PVkVfUk9XXTogWydSZW1vdmUgcm93JywgJ1JlbW92ZSByb3dzJ10sXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT0xVTU5dOiBbJ1JlbW92ZSBjb2x1bW4nLCAnUmVtb3ZlIGNvbHVtbnMnXSxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfVU5ET106ICdVbmRvJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfUkVET106ICdSZWRvJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZXTogJ1JlYWQgb25seScsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NPTFVNTl06ICdDbGVhciBjb2x1bW4nLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRdOiAnQWxpZ25tZW50JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0xFRlRdOiAnTGVmdCcsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9DRU5URVJdOiAnQ2VudGVyJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX1JJR0hUXTogJ1JpZ2h0JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlldOiAnSnVzdGlmeScsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1BdOiAnVG9wJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX01JRERMRV06ICdNaWRkbGUnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NXTogJ0JvdHRvbScsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU5dOiAnRnJlZXplIGNvbHVtbicsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX1VORlJFRVpFX0NPTFVNTl06ICdVbmZyZWV6ZSBjb2x1bW4nLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTXTogJ0JvcmRlcnMnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1RPUF06ICdUb3AnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1JJR0hUXTogJ1JpZ2h0JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19CT1RUT01dOiAnQm90dG9tJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19MRUZUXTogJ0xlZnQnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQk9SREVSU106ICdSZW1vdmUgYm9yZGVyKHMpJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlRdOiAnQWRkIGNvbW1lbnQnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19FRElUX0NPTU1FTlRdOiAnRWRpdCBjb21tZW50JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlRdOiAnRGVsZXRlIGNvbW1lbnQnLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVF06ICdSZWFkLW9ubHkgY29tbWVudCcsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTXTogJ01lcmdlIGNlbGxzJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfVU5NRVJHRV9DRUxMU106ICdVbm1lcmdlIGNlbGxzJyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV06ICdDb3B5JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTXTogWydDb3B5IHdpdGggaGVhZGVyJywgJ0NvcHkgd2l0aCBoZWFkZXJzJ10sXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fR1JPVVBfSEVBREVSU106IFsnQ29weSB3aXRoIGdyb3VwIGhlYWRlcicsICdDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyddLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19DT1BZX0NPTFVNTl9IRUFERVJTX09OTFldOiBbJ0NvcHkgaGVhZGVyIG9ubHknLCAnQ29weSBoZWFkZXJzIG9ubHknXSxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfQ1VUXTogJ0N1dCcsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRF06ICdJbnNlcnQgY2hpbGQgcm93JyxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfREVUQUNIX0NISUxEXTogJ0RldGFjaCBmcm9tIHBhcmVudCcsXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX0hJREVfQ09MVU1OXTogWydIaWRlIGNvbHVtbicsICdIaWRlIGNvbHVtbnMnXSxcbiAgW0MuQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19DT0xVTU5dOiBbJ1Nob3cgY29sdW1uJywgJ1Nob3cgY29sdW1ucyddLFxuICBbQy5DT05URVhUTUVOVV9JVEVNU19ISURFX1JPV106IFsnSGlkZSByb3cnLCAnSGlkZSByb3dzJ10sXG4gIFtDLkNPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XXTogWydTaG93IHJvdycsICdTaG93IHJvd3MnXSxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX05PTkVdOiAnTm9uZScsXG4gIFtDLkZJTFRFUlNfQ09ORElUSU9OU19FTVBUWV06ICdJcyBlbXB0eScsXG4gIFtDLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFldOiAnSXMgbm90IGVtcHR5JyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX0VRVUFMXTogJ0lzIGVxdWFsIHRvJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX05PVF9FUVVBTF06ICdJcyBub3QgZXF1YWwgdG8nLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEhdOiAnQmVnaW5zIHdpdGgnLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfRU5EU19XSVRIXTogJ0VuZHMgd2l0aCcsXG4gIFtDLkZJTFRFUlNfQ09ORElUSU9OU19DT05UQUlOU106ICdDb250YWlucycsXG4gIFtDLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfQ09OVEFJTl06ICdEb2VzIG5vdCBjb250YWluJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl06ICdHcmVhdGVyIHRoYW4nLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMXTogJ0dyZWF0ZXIgdGhhbiBvciBlcXVhbCB0bycsXG4gIFtDLkZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5dOiAnTGVzcyB0aGFuJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTF06ICdMZXNzIHRoYW4gb3IgZXF1YWwgdG8nLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTl06ICdJcyBiZXR3ZWVuJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOXTogJ0lzIG5vdCBiZXR3ZWVuJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX0FGVEVSXTogJ0FmdGVyJyxcbiAgW0MuRklMVEVSU19DT05ESVRJT05TX0JFRk9SRV06ICdCZWZvcmUnLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfVE9EQVldOiAnVG9kYXknLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1ddOiAnVG9tb3Jyb3cnLFxuICBbQy5GSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZXTogJ1llc3RlcmRheScsXG4gIFtDLkZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTXTogJ0JsYW5rIGNlbGxzJyxcbiAgW0MuRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT05dOiAnRmlsdGVyIGJ5IGNvbmRpdGlvbicsXG4gIFtDLkZJTFRFUlNfRElWU19GSUxURVJfQllfVkFMVUVdOiAnRmlsdGVyIGJ5IHZhbHVlJyxcbiAgW0MuRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT05dOiAnQW5kJyxcbiAgW0MuRklMVEVSU19MQUJFTFNfRElTSlVOQ1RJT05dOiAnT3InLFxuICBbQy5GSUxURVJTX0JVVFRPTlNfU0VMRUNUX0FMTF06ICdTZWxlY3QgYWxsJyxcbiAgW0MuRklMVEVSU19CVVRUT05TX0NMRUFSXTogJ0NsZWFyJyxcbiAgW0MuRklMVEVSU19CVVRUT05TX09LXTogJ09LJyxcbiAgW0MuRklMVEVSU19CVVRUT05TX0NBTkNFTF06ICdDYW5jZWwnLFxuICBbQy5GSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfU0VBUkNIXTogJ1NlYXJjaCcsXG4gIFtDLkZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRV06ICdWYWx1ZScsXG4gIFtDLkZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUVdOiAnU2Vjb25kIHZhbHVlJyxcbiAgW0MuQ0hFQ0tCT1hfQ0hFQ0tFRF06ICdDaGVja2VkJyxcbiAgW0MuQ0hFQ0tCT1hfVU5DSEVDS0VEXTogJ1VuY2hlY2tlZCdcbn07XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBkaWN0aW9uYXJ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRQaHJhc2VGb3JtYXR0ZXJzID0gZXhwb3J0cy5nZXRBbGwgPSBnZXRBbGw7XG5leHBvcnRzLnJlZ2lzdGVyUGhyYXNlRm9ybWF0dGVyID0gZXhwb3J0cy5yZWdpc3RlciA9IHJlZ2lzdGVyO1xudmFyIF9zdGF0aWNSZWdpc3RlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vLi4vLi4vdXRpbHMvc3RhdGljUmVnaXN0ZXJcIikpO1xudmFyIF9wbHVyYWxpemUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BsdXJhbGl6ZVwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuY29uc3Qge1xuICByZWdpc3RlcjogcmVnaXN0ZXJHbG9iYWxseVBocmFzZUZvcm1hdHRlcixcbiAgZ2V0VmFsdWVzOiBnZXRHbG9iYWxQaHJhc2VGb3JtYXR0ZXJzXG59ID0gKDAsIF9zdGF0aWNSZWdpc3Rlci5kZWZhdWx0KSgncGhyYXNlRm9ybWF0dGVycycpO1xuXG4vKipcbiAqIFJlZ2lzdGVyIHBocmFzZSBmb3JtYXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBmb3JtYXR0ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmb3JtYXR0ZXJGbiBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGFwcGxpZWQgb24gcGhyYXNlIHByb3Bvc2l0aW9ucy4gSXQgd2lsbCB0cmFuc2Zvcm0gdGhlbSBpZiBpdCdzIHBvc3NpYmxlLlxuICovXG5mdW5jdGlvbiByZWdpc3RlcihuYW1lLCBmb3JtYXR0ZXJGbikge1xuICByZWdpc3Rlckdsb2JhbGx5UGhyYXNlRm9ybWF0dGVyKG5hbWUsIGZvcm1hdHRlckZuKTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIHJlZ2lzdGVyZWQgcHJldmlvdXNseSBmb3JtYXR0ZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsUGhyYXNlRm9ybWF0dGVycygpO1xufVxucmVnaXN0ZXIoJ3BsdXJhbGl6ZScsIF9wbHVyYWxpemUuZGVmYXVsdCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBwbHVyYWxpemU7XG4vKipcbiAqIFRyeSB0byBjaG9vc2UgcGx1cmFsIGZvcm0gZnJvbSBhdmFpbGFibGUgcGhyYXNlIHByb3Bvc2l0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBwaHJhc2VQcm9wb3NpdGlvbnMgTGlzdCBvZiBwaHJhc2VzIHByb3Bvc2l0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwbHVyYWxGb3JtIE51bWJlciBkZXRlcm1pbmluZyB3aGljaCBwaHJhc2UgZm9ybSBzaG91bGQgYmUgdXNlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfEFycmF5fSBPbmUgcGFydGljdWxhciBwaHJhc2UgaWYgaXQncyBwb3NzaWJsZSwgbGlzdCBvZiB1bmNoYW5nZWQgcGhyYXNlIHByb3Bvc2l0aW9ucyBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIHBsdXJhbGl6ZShwaHJhc2VQcm9wb3NpdGlvbnMsIHBsdXJhbEZvcm0pIHtcbiAgY29uc3QgaXNQbHVyYWxpemFibGUgPSBBcnJheS5pc0FycmF5KHBocmFzZVByb3Bvc2l0aW9ucykgJiYgTnVtYmVyLmlzSW50ZWdlcihwbHVyYWxGb3JtKTtcbiAgaWYgKGlzUGx1cmFsaXphYmxlKSB7XG4gICAgcmV0dXJuIHBocmFzZVByb3Bvc2l0aW9uc1twbHVyYWxGb3JtXTtcbiAgfVxuICByZXR1cm4gcGhyYXNlUHJvcG9zaXRpb25zO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXREZWZhdWx0TGFuZ3VhZ2VEaWN0aW9uYXJ5ID0gZ2V0RGVmYXVsdExhbmd1YWdlRGljdGlvbmFyeTtcbmV4cG9ydHMuZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5ID0gZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5O1xuZXhwb3J0cy5nZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXMgPSBnZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXM7XG5leHBvcnRzLmdldFRyYW5zbGF0ZWRQaHJhc2UgPSBnZXRUcmFuc2xhdGVkUGhyYXNlO1xuZXhwb3J0cy5nZXRWYWxpZExhbmd1YWdlQ29kZSA9IGdldFZhbGlkTGFuZ3VhZ2VDb2RlO1xuZXhwb3J0cy5oYXNMYW5ndWFnZURpY3Rpb25hcnkgPSBoYXNMYW5ndWFnZURpY3Rpb25hcnk7XG5leHBvcnRzLnJlZ2lzdGVyTGFuZ3VhZ2VEaWN0aW9uYXJ5ID0gcmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9zdGF0aWNSZWdpc3RlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3V0aWxzL3N0YXRpY1JlZ2lzdGVyXCIpKTtcbnZhciBfcGhyYXNlRm9ybWF0dGVycyA9IHJlcXVpcmUoXCIuL3BocmFzZUZvcm1hdHRlcnNcIik7XG52YXIgX2VuVVMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2xhbmd1YWdlcy9lbi1VU1wiKSk7XG52YXIgX2RpY3Rpb25hcnlLZXlzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBkaWN0aW9uYXJ5S2V5cyA9IGV4cG9ydHMuZGljdGlvbmFyeUtleXMgPSBfZGljdGlvbmFyeUtleXM7XG5jb25zdCBERUZBVUxUX0xBTkdVQUdFX0NPREUgPSBleHBvcnRzLkRFRkFVTFRfTEFOR1VBR0VfQ09ERSA9IF9lblVTLmRlZmF1bHQubGFuZ3VhZ2VDb2RlO1xuY29uc3Qge1xuICByZWdpc3RlcjogcmVnaXN0ZXJHbG9iYWxseUxhbmd1YWdlRGljdGlvbmFyeSxcbiAgZ2V0SXRlbTogZ2V0R2xvYmFsTGFuZ3VhZ2VEaWN0aW9uYXJ5LFxuICBoYXNJdGVtOiBoYXNHbG9iYWxMYW5ndWFnZURpY3Rpb25hcnksXG4gIGdldFZhbHVlczogZ2V0R2xvYmFsTGFuZ3VhZ2VzRGljdGlvbmFyaWVzXG59ID0gKDAsIF9zdGF0aWNSZWdpc3Rlci5kZWZhdWx0KSgnbGFuZ3VhZ2VzRGljdGlvbmFyaWVzJyk7XG5cbi8qKlxuICogUmVnaXN0ZXIgYXV0b21hdGljYWxseSB0aGUgZGVmYXVsdCBsYW5ndWFnZSBkaWN0aW9uYXJ5LlxuICovXG5yZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeShfZW5VUy5kZWZhdWx0KTtcblxuLyoqXG4gKiBSZWdpc3RlciBsYW5ndWFnZSBkaWN0aW9uYXJ5IGZvciBzcGVjaWZpYyBsYW5ndWFnZSBjb2RlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gbGFuZ3VhZ2VDb2RlT3JEaWN0aW9uYXJ5IExhbmd1YWdlIGNvZGUgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGkuZS4gJ2VuLVVTJywgJ3B0LUJSJywgJ2RlLURFJyBvciBvYmplY3QgcmVwcmVzZW50aW5nIGRpY3Rpb25hcnkuXG4gKiBAcGFyYW0ge29iamVjdH0gZGljdGlvbmFyeSBEaWN0aW9uYXJ5IGZvciBzcGVjaWZpYyBsYW5ndWFnZSAob3B0aW9uYWwgaWYgZmlyc3QgcGFyYW1ldGVyIGhhcyBhbHJlYWR5IGRpY3Rpb25hcnkpLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnkobGFuZ3VhZ2VDb2RlT3JEaWN0aW9uYXJ5LCBkaWN0aW9uYXJ5KSB7XG4gIGxldCBsYW5ndWFnZUNvZGUgPSBsYW5ndWFnZUNvZGVPckRpY3Rpb25hcnk7XG4gIGxldCBkaWN0aW9uYXJ5T2JqZWN0ID0gZGljdGlvbmFyeTtcblxuICAvLyBEaWN0aW9uYXJ5IHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudC5cbiAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShsYW5ndWFnZUNvZGVPckRpY3Rpb25hcnkpKSB7XG4gICAgZGljdGlvbmFyeU9iamVjdCA9IGxhbmd1YWdlQ29kZU9yRGljdGlvbmFyeTtcbiAgICBsYW5ndWFnZUNvZGUgPSBkaWN0aW9uYXJ5T2JqZWN0Lmxhbmd1YWdlQ29kZTtcbiAgfVxuICBleHRlbmRMYW5ndWFnZURpY3Rpb25hcnkobGFuZ3VhZ2VDb2RlLCBkaWN0aW9uYXJ5T2JqZWN0KTtcbiAgcmVnaXN0ZXJHbG9iYWxseUxhbmd1YWdlRGljdGlvbmFyeShsYW5ndWFnZUNvZGUsICgwLCBfb2JqZWN0LmRlZXBDbG9uZSkoZGljdGlvbmFyeU9iamVjdCkpO1xuXG4gIC8vIFdlIGRvIG5vdCBhbGxvdyB1c2VyIHRvIHdvcmsgd2l0aCBkaWN0aW9uYXJ5IGJ5IHJlZmVyZW5jZSwgaXQgY2FuIGNhdXNlIGxvdCBvZiBidWdzLlxuICByZXR1cm4gKDAsIF9vYmplY3QuZGVlcENsb25lKShkaWN0aW9uYXJ5T2JqZWN0KTtcbn1cblxuLyoqXG4gKiBFeHRlbmQgaGFuZGxlZCBkaWN0aW9uYXJ5IGJ5IGRlZmF1bHQgbGFuZ3VhZ2UgZGljdGlvbmFyeS4gQXMgcmVzdWx0LCBpZiBhbnkgZGljdGlvbmFyeSBrZXkgaXNuJ3QgZGVmaW5lZCBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UsIGl0IHdpbGwgYmUgZmlsbGVkIHdpdGggZGVmYXVsdCBsYW5ndWFnZSB2YWx1ZSAoXCJkaWN0aW9uYXJ5IGdhcHNcIiBhcmUgc3VwcGxlbWVudGVkKS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlQ29kZSBMYW5ndWFnZSBjb2RlLlxuICogQHBhcmFtIHtvYmplY3R9IGRpY3Rpb25hcnkgRGljdGlvbmFyeSB3aGljaCBpcyBleHRlbmRlZC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kTGFuZ3VhZ2VEaWN0aW9uYXJ5KGxhbmd1YWdlQ29kZSwgZGljdGlvbmFyeSkge1xuICBpZiAobGFuZ3VhZ2VDb2RlICE9PSBERUZBVUxUX0xBTkdVQUdFX0NPREUpIHtcbiAgICAoMCwgX3V0aWxzLmV4dGVuZE5vdEV4aXN0aW5nS2V5cykoZGljdGlvbmFyeSwgZ2V0R2xvYmFsTGFuZ3VhZ2VEaWN0aW9uYXJ5KERFRkFVTFRfTEFOR1VBR0VfQ09ERSkpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IGxhbmd1YWdlIGRpY3Rpb25hcnkgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGNvZGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlQ29kZSBMYW5ndWFnZSBjb2RlLlxuICogQHJldHVybnMge29iamVjdH0gT2JqZWN0IHdpdGggY29uc3RhbnRzIHJlcHJlc2VudGluZyBpZGVudGlmaWVycyBmb3IgdHJhbnNsYXRpb24gKGFzIGtleXMpIGFuZCBjb3JyZXNwb25kaW5nIHRyYW5zbGF0aW9uIHBocmFzZXMgKGFzIHZhbHVlcykuXG4gKi9cbmZ1bmN0aW9uIGdldExhbmd1YWdlRGljdGlvbmFyeShsYW5ndWFnZUNvZGUpIHtcbiAgaWYgKCFoYXNMYW5ndWFnZURpY3Rpb25hcnkobGFuZ3VhZ2VDb2RlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAoMCwgX29iamVjdC5kZWVwQ2xvbmUpKGdldEdsb2JhbExhbmd1YWdlRGljdGlvbmFyeShsYW5ndWFnZUNvZGUpKTtcbn1cblxuLyoqXG4gKlxuICogR2V0IGlmIGxhbmd1YWdlIHdpdGggc3BlY2lmaWVkIGxhbmd1YWdlIGNvZGUgd2FzIHJlZ2lzdGVyZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlQ29kZSBMYW5ndWFnZSBjb2RlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBpLmUuICdlbi1VUycsICdwdC1CUicsICdkZS1ERScuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzTGFuZ3VhZ2VEaWN0aW9uYXJ5KGxhbmd1YWdlQ29kZSkge1xuICByZXR1cm4gaGFzR2xvYmFsTGFuZ3VhZ2VEaWN0aW9uYXJ5KGxhbmd1YWdlQ29kZSk7XG59XG5cbi8qKlxuICogR2V0IGRlZmF1bHQgbGFuZ3VhZ2UgZGljdGlvbmFyeS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCBjb25zdGFudHMgcmVwcmVzZW50aW5nIGlkZW50aWZpZXJzIGZvciB0cmFuc2xhdGlvbiAoYXMga2V5cykgYW5kIGNvcnJlc3BvbmRpbmcgdHJhbnNsYXRpb24gcGhyYXNlcyAoYXMgdmFsdWVzKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdExhbmd1YWdlRGljdGlvbmFyeSgpIHtcbiAgcmV0dXJuIF9lblVTLmRlZmF1bHQ7XG59XG5cbi8qKlxuICogR2V0IHJlZ2lzdGVyZWQgbGFuZ3VhZ2UgZGljdGlvbmFyaWVzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzKCkge1xuICByZXR1cm4gZ2V0R2xvYmFsTGFuZ3VhZ2VzRGljdGlvbmFyaWVzKCk7XG59XG5cbi8qKlxuICogR2V0IHBocmFzZSBmb3Igc3BlY2lmaWVkIGRpY3Rpb25hcnkga2V5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZUNvZGUgTGFuZ3VhZ2UgY29kZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgaS5lLiAnZW4tVVMnLCAncHQtQlInLCAnZGUtREUnLlxuICogQHBhcmFtIHtzdHJpbmd9IGRpY3Rpb25hcnlLZXkgQ29uc3RhbnQgd2hpY2ggaXMgZGljdGlvbmFyeSBrZXkuXG4gKiBAcGFyYW0geyp9IGFyZ3VtZW50c0ZvckZvcm1hdHRlcnMgQXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBieSBmb3JtYXR0ZXJzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRyYW5zbGF0ZWRQaHJhc2UobGFuZ3VhZ2VDb2RlLCBkaWN0aW9uYXJ5S2V5LCBhcmd1bWVudHNGb3JGb3JtYXR0ZXJzKSB7XG4gIGNvbnN0IGxhbmd1YWdlRGljdGlvbmFyeSA9IGdldExhbmd1YWdlRGljdGlvbmFyeShsYW5ndWFnZUNvZGUpO1xuICBpZiAobGFuZ3VhZ2VEaWN0aW9uYXJ5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcGhyYXNlUHJvcG9zaXRpb25zID0gbGFuZ3VhZ2VEaWN0aW9uYXJ5W2RpY3Rpb25hcnlLZXldO1xuICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkocGhyYXNlUHJvcG9zaXRpb25zKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGZvcm1hdHRlZFBocmFzZSA9IGdldEZvcm1hdHRlZFBocmFzZShwaHJhc2VQcm9wb3NpdGlvbnMsIGFyZ3VtZW50c0ZvckZvcm1hdHRlcnMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShmb3JtYXR0ZWRQaHJhc2UpKSB7XG4gICAgcmV0dXJuIGZvcm1hdHRlZFBocmFzZVswXTtcbiAgfVxuICByZXR1cm4gZm9ybWF0dGVkUGhyYXNlO1xufVxuXG4vKipcbiAqIEdldCBmb3JtYXR0ZWQgcGhyYXNlIGZyb20gcGhyYXNlcyBwcm9wb3NpdGlvbnMgZm9yIHNwZWNpZmllZCBkaWN0aW9uYXJ5IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBocmFzZVByb3Bvc2l0aW9ucyBMaXN0IG9mIHBocmFzZSBwcm9wb3NpdGlvbnMuXG4gKiBAcGFyYW0geyp9IGFyZ3VtZW50c0ZvckZvcm1hdHRlcnMgQXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgaGFuZGxlZCBieSBmb3JtYXR0ZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheXxzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZFBocmFzZShwaHJhc2VQcm9wb3NpdGlvbnMsIGFyZ3VtZW50c0ZvckZvcm1hdHRlcnMpIHtcbiAgbGV0IGZvcm1hdHRlZFBocmFzZVByb3Bvc2l0aW9ucyA9IHBocmFzZVByb3Bvc2l0aW9ucztcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKCgwLCBfcGhyYXNlRm9ybWF0dGVycy5nZXRQaHJhc2VGb3JtYXR0ZXJzKSgpLCBmb3JtYXR0ZXIgPT4ge1xuICAgIGZvcm1hdHRlZFBocmFzZVByb3Bvc2l0aW9ucyA9IGZvcm1hdHRlcihwaHJhc2VQcm9wb3NpdGlvbnMsIGFyZ3VtZW50c0ZvckZvcm1hdHRlcnMpO1xuICB9KTtcbiAgcmV0dXJuIGZvcm1hdHRlZFBocmFzZVByb3Bvc2l0aW9ucztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHZhbGlkIGxhbmd1YWdlIGNvZGUuIElmIHRoZSBwYXNzZWQgbGFuZ3VhZ2UgY29kZSBkb2Vzbid0IGV4aXN0IGRlZmF1bHQgb25lIHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VDb2RlIExhbmd1YWdlIGNvZGUgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGkuZS4gJ2VuLVVTJywgJ3B0LUJSJywgJ2RlLURFJy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFZhbGlkTGFuZ3VhZ2VDb2RlKGxhbmd1YWdlQ29kZSkge1xuICBsZXQgbm9ybWFsaXplZExhbmd1YWdlQ29kZSA9ICgwLCBfdXRpbHMubm9ybWFsaXplTGFuZ3VhZ2VDb2RlKShsYW5ndWFnZUNvZGUpO1xuICBpZiAoIWhhc0xhbmd1YWdlRGljdGlvbmFyeShub3JtYWxpemVkTGFuZ3VhZ2VDb2RlKSkge1xuICAgIG5vcm1hbGl6ZWRMYW5ndWFnZUNvZGUgPSBERUZBVUxUX0xBTkdVQUdFX0NPREU7XG4gICAgKDAsIF91dGlscy53YXJuVXNlckFib3V0TGFuZ3VhZ2VSZWdpc3RyYXRpb24pKGxhbmd1YWdlQ29kZSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRMYW5ndWFnZUNvZGU7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUNlbGxIZWFkZXJzUmFuZ2UgPSBjcmVhdGVDZWxsSGVhZGVyc1JhbmdlO1xuZXhwb3J0cy5leHRlbmROb3RFeGlzdGluZ0tleXMgPSBleHRlbmROb3RFeGlzdGluZ0tleXM7XG5leHBvcnRzLm5vcm1hbGl6ZUxhbmd1YWdlQ29kZSA9IG5vcm1hbGl6ZUxhbmd1YWdlQ29kZTtcbmV4cG9ydHMud2FyblVzZXJBYm91dExhbmd1YWdlUmVnaXN0cmF0aW9uID0gd2FyblVzZXJBYm91dExhbmd1YWdlUmVnaXN0cmF0aW9uO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4vLi4vaGVscGVycy9jb25zb2xlXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi8uLi9oZWxwZXJzL3RlbXBsYXRlTGl0ZXJhbFRhZ1wiKTtcbi8qKlxuICogUGVyZm9ybSBzaGFsbG93IGV4dGVuZCBvZiBhIHRhcmdldCBvYmplY3Qgd2l0aCBvbmx5IHRoaXMgZXh0ZW5zaW9uJ3MgcHJvcGVydGllcyB3aGljaCBkb2Vzbid0IGV4aXN0IGluIHRoZSB0YXJnZXQuXG4gKlxuICogVE9ETzogTWF5YmUgaXQgc2hvdWxkIGJlIG1vdmVkIHRvIGdsb2JhbCBoZWxwZXJzPyBJdCdzIGNoYW5nZWQgYGV4dGVuZGAgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCBBbiBvYmplY3QgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIG5ldyBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtvYmplY3R9IGV4dGVuc2lvbiBBbiBvYmplY3QgY29udGFpbmluZyBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gbWVyZ2UgaW50byB0aGUgdGFyZ2V0LlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kTm90RXhpc3RpbmdLZXlzKHRhcmdldCwgZXh0ZW5zaW9uKSB7XG4gICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKGV4dGVuc2lvbiwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkodGFyZ2V0W2tleV0pKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlIHJhbmdlIG9mIHZhbHVlcyBiYXNpbmcgb24gY2VsbCBpbmRleGVzLiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBjcmVhdGUgYmVsb3cgcmFuZ2VzIGZvciBzcGVjaWZpZWQgZnVuY3Rpb24gYXJndW1lbnRzOlxuICpcbiAqIGNyZWF0ZUNlbGxIZWFkZXJzUmFuZ2UoMiwgNykgPT4gYDItN2BcbiAqIGNyZWF0ZUNlbGxIZWFkZXJzUmFuZ2UoNywgMikgPT4gYDItN2BcbiAqIGNyZWF0ZUNlbGxIZWFkZXJzUmFuZ2UoMCwgNCwgJ0EnLCAnRCcpID0+IGBBLURgXG4gKiBjcmVhdGVDZWxsSGVhZGVyc1JhbmdlKDQsIDAsICdEJywgJ0EnKSA9PiBgQS1EYC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZmlyc3RSb3dJbmRleCBJbmRleCBvZiBcImZpcnN0XCIgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXh0Um93SW5kZXggSW5kZXggb2YgXCJuZXh0XCIgY2VsbC5cbiAqIEBwYXJhbSB7Kn0gZnJvbVZhbHVlIFZhbHVlIHdoaWNoIHdpbGwgcmVwcmVzZW50IFwiZmlyc3RcIiBjZWxsLlxuICogQHBhcmFtIHsqfSB0b1ZhbHVlIFZhbHVlIHdoaWNoIHdpbGwgcmVwcmVzZW50IFwibmV4dFwiIGNlbGwuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBWYWx1ZSByZXByZXNlbnRpbmcgcmFuZ2UgaS5lLiBBLVosIDExLTE1LlxuICovXG5mdW5jdGlvbiBjcmVhdGVDZWxsSGVhZGVyc1JhbmdlKGZpcnN0Um93SW5kZXgsIG5leHRSb3dJbmRleCkge1xuICBsZXQgZnJvbVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmaXJzdFJvd0luZGV4O1xuICBsZXQgdG9WYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbmV4dFJvd0luZGV4O1xuICAvLyBXaWxsIHN3YXAgYGZyb21WYWx1ZWAgd2l0aCBgdG9WYWx1ZWAgaWYgaXQncyBuZWNlc3NhcnkuXG4gIGxldCBbZnJvbSwgdG9dID0gW2Zyb21WYWx1ZSwgdG9WYWx1ZV07XG4gIGlmIChmaXJzdFJvd0luZGV4ID4gbmV4dFJvd0luZGV4KSB7XG4gICAgW2Zyb20sIHRvXSA9IFt0bywgZnJvbV07XG4gIH1cbiAgcmV0dXJuIGAke2Zyb219LSR7dG99YDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgbGFuZ3VhZ2UgY29kZS4gSXQgdGFrZXMgaGFuZGxlZCBsYW5ndWFnZUNvZGUgcHJvcG9zaXRpb24gYW5kIGNoYW5nZSBpdCB0byBwcm9wZXIgbGFuZ3VhZ2VDb2RlLlxuICogRm9yIGV4YW1wbGUsIHdoZW4gaXQgdGFrZXMgYGVOLXVzYCBhcyBwYXJhbWV0ZXIgaXQgcmV0dXJuIGBlbi1VU2AuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlQ29kZSBMYW5ndWFnZSBjb2RlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBpLmUuICdlbi1VUycsICdwdC1CUicsICdkZS1ERScuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVMYW5ndWFnZUNvZGUobGFuZ3VhZ2VDb2RlKSB7XG4gIGNvbnN0IGxhbmd1YWdlQ29kZVBhdHRlcm4gPSAvXihbYS16QS1aXXsyfSktKFthLXpBLVpdezJ9KSQvO1xuICBjb25zdCBwYXJ0c09mTGFuZ3VhZ2VDb2RlID0gbGFuZ3VhZ2VDb2RlUGF0dGVybi5leGVjKGxhbmd1YWdlQ29kZSk7XG4gIGlmIChwYXJ0c09mTGFuZ3VhZ2VDb2RlKSB7XG4gICAgcmV0dXJuIGAke3BhcnRzT2ZMYW5ndWFnZUNvZGVbMV0udG9Mb3dlckNhc2UoKX0tJHtwYXJ0c09mTGFuZ3VhZ2VDb2RlWzJdLnRvVXBwZXJDYXNlKCl9YDtcbiAgfVxuICByZXR1cm4gbGFuZ3VhZ2VDb2RlO1xufVxuXG4vKipcbiAqXG4gKiBXYXJuIHVzZXIgaWYgdGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBsYW5ndWFnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VDb2RlIExhbmd1YWdlIGNvZGUgZm9yIHNwZWNpZmljIGxhbmd1YWdlIGkuZS4gJ2VuLVVTJywgJ3B0LUJSJywgJ2RlLURFJy5cbiAqL1xuZnVuY3Rpb24gd2FyblVzZXJBYm91dExhbmd1YWdlUmVnaXN0cmF0aW9uKGxhbmd1YWdlQ29kZSkge1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGxhbmd1YWdlQ29kZSkpIHtcbiAgICAoMCwgX2NvbnNvbGUuZXJyb3IpKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgTGFuZ3VhZ2Ugd2l0aCBjb2RlIFwiJHtsYW5ndWFnZUNvZGV9XCIgd2FzIG5vdCBmb3VuZC4gWW91IHNob3VsZCByZWdpc3RlciBwYXJ0aWN1bGFyIGxhbmd1YWdlXFx4MjBcbiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9iYXNlID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vYmFzZVwiKSk7XG5leHBvcnRzLkNlbGxDb29yZHMgPSBfYmFzZS5DZWxsQ29vcmRzO1xuZXhwb3J0cy5DZWxsUmFuZ2UgPSBfYmFzZS5DZWxsUmFuZ2U7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vcmVnaXN0cnlcIik7XG52YXIgX2V2ZW50TWFuYWdlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2V2ZW50TWFuYWdlclwiKSk7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuL3RyYW5zbGF0aW9uc1wiKTtcbnZhciBfanF1ZXJ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBwZXJzL2pxdWVyeVwiKSk7XG52YXIgX2dob3N0VGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3V0aWxzL2dob3N0VGFibGVcIikpO1xudmFyIHBhcnNlVGFibGVIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vdXRpbHMvcGFyc2VUYWJsZVwiKSk7XG52YXIgYXJyYXlIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy9hcnJheVwiKSk7XG52YXIgYnJvd3NlckhlbHBlcnMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9oZWxwZXJzL2Jyb3dzZXJcIikpO1xudmFyIGRhdGFIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy9kYXRhXCIpKTtcbnZhciBkYXRlSGVscGVycyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2hlbHBlcnMvZGF0ZVwiKSk7XG52YXIgZmVhdHVyZUhlbHBlcnMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9oZWxwZXJzL2ZlYXR1cmVcIikpO1xudmFyIGZ1bmN0aW9uSGVscGVycyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2hlbHBlcnMvZnVuY3Rpb25cIikpO1xudmFyIG1peGVkSGVscGVycyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2hlbHBlcnMvbWl4ZWRcIikpO1xudmFyIG51bWJlckhlbHBlcnMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9oZWxwZXJzL251bWJlclwiKSk7XG52YXIgb2JqZWN0SGVscGVycyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL2hlbHBlcnMvb2JqZWN0XCIpKTtcbnZhciBzdHJpbmdIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy9zdHJpbmdcIikpO1xudmFyIHVuaWNvZGVIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy91bmljb2RlXCIpKTtcbnZhciBkb21IZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy9kb20vZWxlbWVudFwiKSk7XG52YXIgZG9tRXZlbnRIZWxwZXJzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGVscGVycy9kb20vZXZlbnRcIikpO1xudmFyIF9yZWdpc3RyeTIgPSByZXF1aXJlKFwiLi9lZGl0b3JzL3JlZ2lzdHJ5XCIpO1xudmFyIF9yZWdpc3RyeTMgPSByZXF1aXJlKFwiLi9yZW5kZXJlcnMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5NCA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRvcnMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5NSA9IHJlcXVpcmUoXCIuL2NlbGxUeXBlcy9yZWdpc3RyeVwiKTtcbnZhciBfcmVnaXN0cnk2ID0gcmVxdWlyZShcIi4vcGx1Z2lucy9yZWdpc3RyeVwiKTtcbnZhciBfYmFzZTIgPSByZXF1aXJlKFwiLi9wbHVnaW5zL2Jhc2VcIik7XG52YXIgX0hhbmRzb250YWJsZSRjZWxsVHlwLCBfSGFuZHNvbnRhYmxlJGVkaXRvcnMsIF9IYW5kc29udGFibGUkcmVuZGVyZSwgX0hhbmRzb250YWJsZSR2YWxpZGF0LCBfSGFuZHNvbnRhYmxlJHBsdWdpbnM7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuKDAsIF9yZWdpc3RyeS5yZWdpc3RlckFsbE1vZHVsZXMpKCk7XG4oMCwgX2pxdWVyeS5kZWZhdWx0KShfYmFzZS5kZWZhdWx0KTtcblxuLy8gVE9ETzogUmVtb3ZlIHRoaXMgZXhwb3J0cyBhZnRlciByZXdyaXRlIHRlc3RzIGFib3V0IHRoaXMgbW9kdWxlXG5fYmFzZS5kZWZhdWx0Ll9fR2hvc3RUYWJsZSA9IF9naG9zdFRhYmxlLmRlZmF1bHQ7XG5fYmFzZS5kZWZhdWx0Ll9nZXRMaXN0ZW5lcnNDb3VudGVyID0gX2V2ZW50TWFuYWdlci5nZXRMaXN0ZW5lcnNDb3VudGVyOyAvLyBGb3IgTWVtb3J5TGVhayB0ZXN0c1xuX2Jhc2UuZGVmYXVsdC5fZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyID0gX3RyYW5zbGF0aW9ucy5nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI7IC8vIEZvciBNZW1vcnlMZWFrIHRlc3RzXG5fYmFzZS5kZWZhdWx0LkV2ZW50TWFuYWdlciA9IF9ldmVudE1hbmFnZXIuZGVmYXVsdDtcblxuLy8gRXhwb3J0IGFsbCBoZWxwZXJzIHRvIHRoZSBIYW5kc29udGFibGUgb2JqZWN0XG5jb25zdCBIRUxQRVJTID0gW2FycmF5SGVscGVycywgYnJvd3NlckhlbHBlcnMsIGRhdGFIZWxwZXJzLCBkYXRlSGVscGVycywgZmVhdHVyZUhlbHBlcnMsIGZ1bmN0aW9uSGVscGVycywgbWl4ZWRIZWxwZXJzLCBudW1iZXJIZWxwZXJzLCBvYmplY3RIZWxwZXJzLCBzdHJpbmdIZWxwZXJzLCB1bmljb2RlSGVscGVycywgcGFyc2VUYWJsZUhlbHBlcnNdO1xuY29uc3QgRE9NID0gW2RvbUhlbHBlcnMsIGRvbUV2ZW50SGVscGVyc107XG5fYmFzZS5kZWZhdWx0LmhlbHBlciA9IHt9O1xuX2Jhc2UuZGVmYXVsdC5kb20gPSB7fTtcblxuLy8gRmlsbCBnZW5lcmFsIGhlbHBlcnMuXG5hcnJheUhlbHBlcnMuYXJyYXlFYWNoKEhFTFBFUlMsIGhlbHBlciA9PiB7XG4gIGFycmF5SGVscGVycy5hcnJheUVhY2goT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVscGVyKSwga2V5ID0+IHtcbiAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPT0gJ18nKSB7XG4gICAgICBfYmFzZS5kZWZhdWx0LmhlbHBlcltrZXldID0gaGVscGVyW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG4vLyBGaWxsIERPTSBoZWxwZXJzLlxuYXJyYXlIZWxwZXJzLmFycmF5RWFjaChET00sIGhlbHBlciA9PiB7XG4gIGFycmF5SGVscGVycy5hcnJheUVhY2goT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaGVscGVyKSwga2V5ID0+IHtcbiAgICBpZiAoa2V5LmNoYXJBdCgwKSAhPT0gJ18nKSB7XG4gICAgICBfYmFzZS5kZWZhdWx0LmRvbVtrZXldID0gaGVscGVyW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG4vLyBFeHBvcnQgY2VsbCB0eXBlcy5cbl9iYXNlLmRlZmF1bHQuY2VsbFR5cGVzID0gKF9IYW5kc29udGFibGUkY2VsbFR5cCA9IF9iYXNlLmRlZmF1bHQuY2VsbFR5cGVzKSAhPT0gbnVsbCAmJiBfSGFuZHNvbnRhYmxlJGNlbGxUeXAgIT09IHZvaWQgMCA/IF9IYW5kc29udGFibGUkY2VsbFR5cCA6IHt9O1xuYXJyYXlIZWxwZXJzLmFycmF5RWFjaCgoMCwgX3JlZ2lzdHJ5NS5nZXRSZWdpc3RlcmVkQ2VsbFR5cGVOYW1lcykoKSwgY2VsbFR5cGVOYW1lID0+IHtcbiAgX2Jhc2UuZGVmYXVsdC5jZWxsVHlwZXNbY2VsbFR5cGVOYW1lXSA9ICgwLCBfcmVnaXN0cnk1LmdldENlbGxUeXBlKShjZWxsVHlwZU5hbWUpO1xufSk7XG5fYmFzZS5kZWZhdWx0LmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlID0gX3JlZ2lzdHJ5NS5yZWdpc3RlckNlbGxUeXBlO1xuX2Jhc2UuZGVmYXVsdC5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGUgPSBfcmVnaXN0cnk1LmdldENlbGxUeXBlO1xuXG4vLyBFeHBvcnQgYWxsIHJlZ2lzdGVyZWQgZWRpdG9ycyBmcm9tIHRoZSBIYW5kc29udGFibGUuXG5fYmFzZS5kZWZhdWx0LmVkaXRvcnMgPSAoX0hhbmRzb250YWJsZSRlZGl0b3JzID0gX2Jhc2UuZGVmYXVsdC5lZGl0b3JzKSAhPT0gbnVsbCAmJiBfSGFuZHNvbnRhYmxlJGVkaXRvcnMgIT09IHZvaWQgMCA/IF9IYW5kc29udGFibGUkZWRpdG9ycyA6IHt9O1xuYXJyYXlIZWxwZXJzLmFycmF5RWFjaCgoMCwgX3JlZ2lzdHJ5Mi5nZXRSZWdpc3RlcmVkRWRpdG9yTmFtZXMpKCksIGVkaXRvck5hbWUgPT4ge1xuICBfYmFzZS5kZWZhdWx0LmVkaXRvcnNbYCR7c3RyaW5nSGVscGVycy50b1VwcGVyQ2FzZUZpcnN0KGVkaXRvck5hbWUpfUVkaXRvcmBdID0gKDAsIF9yZWdpc3RyeTIuZ2V0RWRpdG9yKShlZGl0b3JOYW1lKTtcbn0pO1xuX2Jhc2UuZGVmYXVsdC5lZGl0b3JzLnJlZ2lzdGVyRWRpdG9yID0gX3JlZ2lzdHJ5Mi5yZWdpc3RlckVkaXRvcjtcbl9iYXNlLmRlZmF1bHQuZWRpdG9ycy5nZXRFZGl0b3IgPSBfcmVnaXN0cnkyLmdldEVkaXRvcjtcblxuLy8gRXhwb3J0IGFsbCByZWdpc3RlcmVkIHJlbmRlcmVycyBmcm9tIHRoZSBIYW5kc29udGFibGUuXG5fYmFzZS5kZWZhdWx0LnJlbmRlcmVycyA9IChfSGFuZHNvbnRhYmxlJHJlbmRlcmUgPSBfYmFzZS5kZWZhdWx0LnJlbmRlcmVycykgIT09IG51bGwgJiYgX0hhbmRzb250YWJsZSRyZW5kZXJlICE9PSB2b2lkIDAgPyBfSGFuZHNvbnRhYmxlJHJlbmRlcmUgOiB7fTtcbmFycmF5SGVscGVycy5hcnJheUVhY2goKDAsIF9yZWdpc3RyeTMuZ2V0UmVnaXN0ZXJlZFJlbmRlcmVyTmFtZXMpKCksIHJlbmRlcmVyTmFtZSA9PiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gKDAsIF9yZWdpc3RyeTMuZ2V0UmVuZGVyZXIpKHJlbmRlcmVyTmFtZSk7XG4gIGlmIChyZW5kZXJlck5hbWUgPT09ICdiYXNlJykge1xuICAgIF9iYXNlLmRlZmF1bHQucmVuZGVyZXJzLmNlbGxEZWNvcmF0b3IgPSByZW5kZXJlcjtcbiAgfVxuICBfYmFzZS5kZWZhdWx0LnJlbmRlcmVyc1tgJHtzdHJpbmdIZWxwZXJzLnRvVXBwZXJDYXNlRmlyc3QocmVuZGVyZXJOYW1lKX1SZW5kZXJlcmBdID0gcmVuZGVyZXI7XG59KTtcbl9iYXNlLmRlZmF1bHQucmVuZGVyZXJzLnJlZ2lzdGVyUmVuZGVyZXIgPSBfcmVnaXN0cnkzLnJlZ2lzdGVyUmVuZGVyZXI7XG5fYmFzZS5kZWZhdWx0LnJlbmRlcmVycy5nZXRSZW5kZXJlciA9IF9yZWdpc3RyeTMuZ2V0UmVuZGVyZXI7XG5cbi8vIEV4cG9ydCBhbGwgcmVnaXN0ZXJlZCB2YWxpZGF0b3JzIGZyb20gdGhlIEhhbmRzb250YWJsZS5cbl9iYXNlLmRlZmF1bHQudmFsaWRhdG9ycyA9IChfSGFuZHNvbnRhYmxlJHZhbGlkYXQgPSBfYmFzZS5kZWZhdWx0LnZhbGlkYXRvcnMpICE9PSBudWxsICYmIF9IYW5kc29udGFibGUkdmFsaWRhdCAhPT0gdm9pZCAwID8gX0hhbmRzb250YWJsZSR2YWxpZGF0IDoge307XG5hcnJheUhlbHBlcnMuYXJyYXlFYWNoKCgwLCBfcmVnaXN0cnk0LmdldFJlZ2lzdGVyZWRWYWxpZGF0b3JOYW1lcykoKSwgdmFsaWRhdG9yTmFtZSA9PiB7XG4gIF9iYXNlLmRlZmF1bHQudmFsaWRhdG9yc1tgJHtzdHJpbmdIZWxwZXJzLnRvVXBwZXJDYXNlRmlyc3QodmFsaWRhdG9yTmFtZSl9VmFsaWRhdG9yYF0gPSAoMCwgX3JlZ2lzdHJ5NC5nZXRWYWxpZGF0b3IpKHZhbGlkYXRvck5hbWUpO1xufSk7XG5fYmFzZS5kZWZhdWx0LnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3IgPSBfcmVnaXN0cnk0LnJlZ2lzdGVyVmFsaWRhdG9yO1xuX2Jhc2UuZGVmYXVsdC52YWxpZGF0b3JzLmdldFZhbGlkYXRvciA9IF9yZWdpc3RyeTQuZ2V0VmFsaWRhdG9yO1xuXG4vLyBFeHBvcnQgYWxsIHJlZ2lzdGVyZWQgcGx1Z2lucyBmcm9tIHRoZSBIYW5kc29udGFibGUuXG4vLyBNYWtlIHN1cmUgdG8gaW5pdGlhbGl6ZSB0aGUgcGx1Z2luIGRpY3Rpb25hcnkgYXMgYW4gZW1wdHkgb2JqZWN0LiBPdGhlcndpc2UsIHdoaWxlXG4vLyB0cmFuc3BpbGluZyB0aGUgZmlsZXMgaW50byBFUyBhbmQgQ29tbW9uSlMgZm9ybWF0LCB0aGUgaW5qZWN0ZWQgQ29yZUpTIGhlbHBlclxuLy8gYGltcG9ydCBcImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lc1wiO2Agd29uJ3QgYmUgcHJvY2Vzc2VkXG4vLyBieSB0aGUgYC4vY29uZmlnL3BsdWdpbi9iYWJlbC9hZGQtaW1wb3J0LWV4dGVuc2lvbmAgYmFiZWwgcGx1Z2luLiBUaHVzLCB0aGUgZGlzdHJpYnV0aW9uXG4vLyBmaWxlcyB3aWxsIGJlIGJyb2tlbi4gVGhlIHJlYXNvbiBpcyBub3Qga25vd24gcmlnaHQgbm93IChwcm9iYWJseSBpdCdzIGNhdXNlZCBieSBidWcgaW5cbi8vIHRoZSBCYWJlbCBvciBtaXNzaW5nIHNvbWV0aGluZyBpbiB0aGUgcGx1Z2luKS5cbl9iYXNlLmRlZmF1bHQucGx1Z2lucyA9IChfSGFuZHNvbnRhYmxlJHBsdWdpbnMgPSBfYmFzZS5kZWZhdWx0LnBsdWdpbnMpICE9PSBudWxsICYmIF9IYW5kc29udGFibGUkcGx1Z2lucyAhPT0gdm9pZCAwID8gX0hhbmRzb250YWJsZSRwbHVnaW5zIDoge307XG5hcnJheUhlbHBlcnMuYXJyYXlFYWNoKCgwLCBfcmVnaXN0cnk2LmdldFBsdWdpbnNOYW1lcykoKSwgcGx1Z2luTmFtZSA9PiB7XG4gIF9iYXNlLmRlZmF1bHQucGx1Z2luc1twbHVnaW5OYW1lXSA9ICgwLCBfcmVnaXN0cnk2LmdldFBsdWdpbikocGx1Z2luTmFtZSk7XG59KTtcbl9iYXNlLmRlZmF1bHQucGx1Z2luc1tgJHtzdHJpbmdIZWxwZXJzLnRvVXBwZXJDYXNlRmlyc3QoX2Jhc2UyLkJhc2VQbHVnaW4uUExVR0lOX0tFWSl9UGx1Z2luYF0gPSBfYmFzZTIuQmFzZVBsdWdpbjtcbl9iYXNlLmRlZmF1bHQucGx1Z2lucy5yZWdpc3RlclBsdWdpbiA9IF9yZWdpc3RyeTYucmVnaXN0ZXJQbHVnaW47XG5fYmFzZS5kZWZhdWx0LnBsdWdpbnMuZ2V0UGx1Z2luID0gX3JlZ2lzdHJ5Ni5nZXRQbHVnaW47XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBfYmFzZS5kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xuY29uc3QgTUlYSU5fTkFNRSA9ICdob29rc1JlZlJlZ2lzdGVyZXInO1xuXG4vKipcbiAqIE1peGluIG9iamVjdCB0byBleHRlbmQgb2JqZWN0cyBmdW5jdGlvbmFsaXR5IGZvciBhdXRvIHJlZ2lzdGVyaW5nIGhvb2tzIGluIGFuIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICovXG5jb25zdCBob29rc1JlZlJlZ2lzdGVyZXIgPSB7XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBob29rcyBzdG9yYWdlLlxuICAgKi9cbiAgX2hvb2tzU3RvcmFnZTogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgLyoqXG4gICAqIEFkZCBob29rIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBob29rIG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBob29rIGNhbGxiYWNrLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgYWRkSG9vayhrZXksIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9ob29rc1N0b3JhZ2Vba2V5XSkge1xuICAgICAgdGhpcy5faG9va3NTdG9yYWdlW2tleV0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5ob3QuYWRkSG9vayhrZXksIGNhbGxiYWNrKTtcbiAgICB0aGlzLl9ob29rc1N0b3JhZ2Vba2V5XS5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgaG9va3MgbGlzdGVuZXJzIGJ5IGhvb2sgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgaG9vayBuYW1lLlxuICAgKi9cbiAgcmVtb3ZlSG9va3NCeUtleShrZXkpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5faG9va3NTdG9yYWdlW2tleV0gfHwgW10sIGNhbGxiYWNrID0+IHtcbiAgICAgIHRoaXMuaG90LnJlbW92ZUhvb2soa2V5LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH0sXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgYWRkZWQgaG9va3MuXG4gICAqL1xuICBjbGVhckhvb2tzKCkge1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHRoaXMuX2hvb2tzU3RvcmFnZSwgKGNhbGxiYWNrcywgbmFtZSkgPT4gdGhpcy5yZW1vdmVIb29rc0J5S2V5KG5hbWUpKTtcbiAgICB0aGlzLl9ob29rc1N0b3JhZ2UgPSB7fTtcbiAgfVxufTtcbigwLCBfb2JqZWN0LmRlZmluZUdldHRlcikoaG9va3NSZWZSZWdpc3RlcmVyLCAnTUlYSU5fTkFNRScsIE1JWElOX05BTUUsIHtcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBlbnVtZXJhYmxlOiBmYWxzZVxufSk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBob29rc1JlZlJlZ2lzdGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG5jb25zdCBNSVhJTl9OQU1FID0gJ2xvY2FsSG9va3MnO1xuXG4vKipcbiAqIE1peGluIG9iamVjdCB0byBleHRlbmQgb2JqZWN0cyBmdW5jdGlvbmFsaXR5IGZvciBsb2NhbCBob29rcy5cbiAqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICovXG5jb25zdCBsb2NhbEhvb2tzID0ge1xuICAvKipcbiAgICogSW50ZXJuYWwgaG9va3Mgc3RvcmFnZS5cbiAgICovXG4gIF9sb2NhbEhvb2tzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAvKipcbiAgICogQWRkIGhvb2sgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGhvb2sgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGhvb2sgY2FsbGJhY2suXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBhZGRMb2NhbEhvb2soa2V5LCBjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fbG9jYWxIb29rc1trZXldKSB7XG4gICAgICB0aGlzLl9sb2NhbEhvb2tzW2tleV0gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5fbG9jYWxIb29rc1trZXldLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICAvKipcbiAgICogUnVuIGhvb2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBuYW1lIG9mIHRoZSBob29rIHRvIHJ1bi5cbiAgICogQHBhcmFtIHsqfSBbYXJnMV0gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYXJnMl0gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYXJnM10gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYXJnNF0gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYXJnNV0gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbYXJnNl0gQW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIHJ1bkxvY2FsSG9va3Moa2V5LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KSB7XG4gICAgaWYgKHRoaXMuX2xvY2FsSG9va3Nba2V5XSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5fbG9jYWxIb29rc1trZXldLmxlbmd0aDtcblxuICAgICAgLy8gZG9uJ3Qgb3B0aW1pemUgdGhpcyBsb29wIHdpdGggdGhlIGBhcnJheUVhY2goKWAgbWV0aG9kIG9yIGFycm93IGZ1bmN0aW9uc1xuICAgICAgLy8gb3RoZXJ3aXNlLCBwZXJmb3JtYW5jZSB3aWxsIGRlY3JlYXNlIGJlY2F1c2Ugb2YgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAgICAvLyB1c2luZyB0aGUgYC4uLnJlc3RgIHN5bnRheCAoRVM2IGFuZCBsYXRlcikgd2lsbCBkZWNyZWFzZSBwZXJmb3JtYW5jZSBhcyB3ZWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICgwLCBfZnVuY3Rpb24uZmFzdENhbGwpKHRoaXMuX2xvY2FsSG9va3Nba2V5XVtpXSwgdGhpcywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogQ2xlYXIgYWxsIGFkZGVkIGhvb2tzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgY2xlYXJMb2NhbEhvb2tzKCkge1xuICAgIHRoaXMuX2xvY2FsSG9va3MgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcbigwLCBfb2JqZWN0LmRlZmluZUdldHRlcikobG9jYWxIb29rcywgJ01JWElOX05BTUUnLCBNSVhJTl9OQU1FLCB7XG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgZW51bWVyYWJsZTogZmFsc2Vcbn0pO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gbG9jYWxIb29rczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9oZWxwZXJzL3N0cmluZ1wiKTtcbnZhciBfY29uc29sZSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4vaGVscGVycy90ZW1wbGF0ZUxpdGVyYWxUYWdcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4vaGVscGVycy9mdW5jdGlvblwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogSGFuZHNvbnRhYmxlIGV2ZW50cyBhcmUgdGhlIGNvbW1vbiBpbnRlcmZhY2UgdGhhdCBmdW5jdGlvbiBpbiAyIHdheXM6IGFzIF9fY2FsbGJhY2tzX18gYW5kIGFzIF9faG9va3NfXy5cbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogVGhpcyBwYWdlIGxpc3RzIGFsbCB0aGUgKipIYW5kc29udGFibGUgaG9va3MqKiDigJMgY2FsbGJhY2tzIHRoYXQgbGV0IHlvdSByZWFjdCBiZWZvcmUgb3IgYWZ0ZXIgYW4gYWN0aW9uIG9jY3Vycy5cbiAqXG4gKiBSZWFkIG1vcmUgb24gdGhlIFtFdmVudHMgYW5kIGhvb2tzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kKSBwYWdlLlxuICogOjo6XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIC8vIHVzaW5nIGV2ZW50cyBhcyBjYWxsYmFja3NcbiAqIC4uLlxuICogY29uc3QgaG90MSA9IG5ldyBIYW5kc29udGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUxJyksIHtcbiAqICAgYWZ0ZXJDaGFuZ2U6IGZ1bmN0aW9uKGNoYW5nZXMsIHNvdXJjZSkge1xuICogICAgICQuYWpheCh7XG4gKiAgICAgICB1cmw6IFwic2F2ZS5waHAnLFxuICogICAgICAgZGF0YTogY2hhbmdlXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqIH0pO1xuICogLi4uXG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgYWZ0ZXJDaGFuZ2U9eyhjaGFuZ2VzLCBzb3VyY2UpID0+IHtcbiAqICAgICBmZXRjaCgnc2F2ZS5waHAnLCB7XG4gKiAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAqICAgICAgIGhlYWRlcnM6IHtcbiAqICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAqICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICogICAgICAgfSxcbiAqICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGNoYW5nZXMpXG4gKiAgICAgfSk7XG4gKiAgIH19XG4gKiAvPlxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiAvLyB1c2luZyBldmVudHMgYXMgcGx1Z2luIGhvb2tzXG4gKiAuLi5cbiAqIGNvbnN0IGhvdDEgPSBuZXcgSGFuZHNvbnRhYmxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlMScpLCB7XG4gKiAgIG15UGx1Z2luOiB0cnVlXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBob3QyID0gbmV3IEhhbmRzb250YWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZTInKSwge1xuICogICBteVBsdWdpbjogZmFsc2VcbiAqIH0pO1xuICpcbiAqIC8vIGdsb2JhbCBob29rXG4gKiBIYW5kc29udGFibGUuaG9va3MuYWRkKCdhZnRlckNoYW5nZScsIGZ1bmN0aW9uKCkge1xuICogICAvLyBGaXJlZCB0d2ljZSAtIGZvciBob3QxIGFuZCBob3QyXG4gKiAgIGlmICh0aGlzLmdldFNldHRpbmdzKCkubXlQbHVnaW4pIHtcbiAqICAgICAvLyBmdW5jdGlvbiBib2R5IC0gd2lsbCBvbmx5IHJ1biBmb3IgaG90MVxuICogICB9XG4gKiB9KTtcbiAqXG4gKiAvLyBsb2NhbCBob29rIChoYXMgc2FtZSBlZmZlY3QgYXMgYSBjYWxsYmFjaylcbiAqIGhvdDIuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAqICAgLy8gZnVuY3Rpb24gYm9keSAtIHdpbGwgb25seSBydW4gaW4gI2V4YW1wbGUyXG4gKiB9KTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIGNvbnN0IGhvdFJlZjEgPSB1c2VSZWYobnVsbCk7XG4gKiBjb25zdCBob3RSZWYyID0gdXNlUmVmKG51bGwpO1xuICpcbiAqIC8vIFVzaW5nIGV2ZW50cyBhcyBwbHVnaW4gaG9va3M6XG4gKiAuLi5cbiAqXG4gKiA8SG90VGFibGVcbiAqICAgcmVmPXtob3RSZWYxfVxuICogICBteVBsdWdpbj17dHJ1ZX1cbiAqIH0pO1xuICpcbiAqIDxIb3RUYWJsZVxuICogICByZWY9e2hvdFJlZjJ9XG4gKiAgIG15UGx1Z2luPXtmYWxzZX1cbiAqIH0pO1xuICpcbiAqIC4uLlxuICpcbiAqIGNvbnN0IGhvdDIgPSBob3RSZWYyLmN1cnJlbnQuaG90SW5zdGFuY2U7XG4gKiAvLyBsb2NhbCBob29rIChoYXMgc2FtZSBlZmZlY3QgYXMgYSBjYWxsYmFjaylcbiAqIGhvdDIuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAqICAgLy8gZnVuY3Rpb24gYm9keSAtIHdpbGwgb25seSBydW4gaW4gI2V4YW1wbGUyXG4gKiB9KTtcbiAqXG4gKiAvLyBnbG9iYWwgaG9va1xuICogSGFuZHNvbnRhYmxlLmhvb2tzLmFkZCgnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbigpIHtcbiAqICAgLy8gRmlyZWQgdHdpY2UgLSBmb3IgaG90MSBhbmQgaG90MlxuICogICBpZiAodGhpcy5nZXRTZXR0aW5ncygpLm15UGx1Z2luKSB7XG4gKiAgICAgLy8gZnVuY3Rpb24gYm9keSAtIHdpbGwgb25seSBydW4gZm9yIGZpcnN0IGluc3RhbmNlXG4gKiAgIH1cbiAqIH0pO1xuICogOjo6XG4gKiAuLi5cbiAqL1xuXG4vLyBAVE9ETzogTW92ZSBwbHVnaW4gZGVzY3JpcHRpb24gaG9va3MgdG8gcGx1Z2luP1xuY29uc3QgUkVHSVNURVJFRF9IT09LUyA9IFsvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4vKipcbiAqIEZpcmVkIGFmdGVyIHJlc2V0dGluZyBhIGNlbGwncyBtZXRhLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUge0BsaW5rIENvcmUjdXBkYXRlU2V0dGluZ3N9IG1ldGhvZCBpcyBjYWxsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ2VsbE1ldGFSZXNldFxuICovXG4nYWZ0ZXJDZWxsTWV0YVJlc2V0Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgb25lIG9yIG1vcmUgY2VsbHMgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIGNoYW5nZXMgYXJlIHRyaWdnZXJlZCBpbiBhbnkgc2l0dWF0aW9uIHdoZW4gdGhlXG4gKiB2YWx1ZSBpcyBlbnRlcmVkIHVzaW5nIGFuIGVkaXRvciBvciBjaGFuZ2VkIHVzaW5nIEFQSSAoZS5xIFtgc2V0RGF0YUF0Q2VsbGBdKEAvYXBpL2NvcmUubWQjc2V0ZGF0YWF0Y2VsbCkgbWV0aG9kKS5cbiAqXG4gKiBfX05vdGU6X18gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHRoZSBgY2hhbmdlc2AgYXJyYXkgaXMgbnVsbCBmb3IgYFwibG9hZERhdGFcImAgc291cmNlLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckNoYW5nZVxuICogQHBhcmFtIHtBcnJheVtdfSBjaGFuZ2VzIDJEIGFycmF5IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBvZiB0aGUgZWRpdGVkIGNlbGxzIGBbW3JvdywgcHJvcCwgb2xkVmFsLCBuZXdWYWxdLCAuLi5dYC4gYHJvd2AgaXMgYSB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbCAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogbmV3IEhhbmRzb250YWJsZShlbGVtZW50LCB7XG4gKiAgIGFmdGVyQ2hhbmdlOiAoY2hhbmdlcykgPT4ge1xuICogICAgIGNoYW5nZXM/LmZvckVhY2goKFtyb3csIHByb3AsIG9sZFZhbHVlLCBuZXdWYWx1ZV0pID0+IHtcbiAqICAgICAgIC8vIFNvbWUgbG9naWMuLi5cbiAqICAgICB9KTtcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBhZnRlckNoYW5nZT17KGNoYW5nZXMsIHNvdXJjZSkgPT4ge1xuICogICAgIGNoYW5nZXM/LmZvckVhY2goKFtyb3csIHByb3AsIG9sZFZhbHVlLCBuZXdWYWx1ZV0pID0+IHtcbiAqICAgICAgIC8vIFNvbWUgbG9naWMuLi5cbiAqICAgICB9KTtcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqIDo6OlxuICovXG4nYWZ0ZXJDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBlYWNoIHRpbWUgdXNlciBvcGVucyB7QGxpbmsgQ29udGV4dE1lbnV9IGFuZCBhZnRlciBzZXR0aW5nIHVwIHRoZSBDb250ZXh0IE1lbnUncyBkZWZhdWx0IG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgYXJlIGEgY29sbGVjdGlvblxuICogd2hpY2ggdXNlciBjYW4gc2VsZWN0IGJ5IHNldHRpbmcgYW4gYXJyYXkgb2Yga2V5cyBvciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHtAbGluayBPcHRpb25zI2NvbnRleHRNZW51fSBvcHRpb24uXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gcHJlZGVmaW5lZEl0ZW1zIEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJlLWRlZmluZWQgQ29udGV4dCBNZW51IGl0ZW1zLlxuICovXG4nYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zJyxcbi8qKlxuICogRmlyZWQgZWFjaCB0aW1lIHVzZXIgb3BlbnMge0BsaW5rIENvbnRleHRNZW51fSBwbHVnaW4gYmVmb3JlIHNldHRpbmcgdXAgdGhlIENvbnRleHQgTWVudSdzIGl0ZW1zIGJ1dCBhZnRlciBmaWx0ZXJpbmcgdGhlc2Ugb3B0aW9ucyBieVxuICogdXNlciAoW2Bjb250ZXh0TWVudWBdKEAvYXBpL29wdGlvbnMubWQjY29udGV4dG1lbnUpIG9wdGlvbikuIFRoaXMgaG9vayBjYW4gYnkgaGVscGZ1bCB0byBkZXRlcm1pbmUgaWYgdXNlciB1c2Ugc3BlY2lmaWVkIG1lbnUgaXRlbSBvciB0byBzZXQgdXBcbiAqIG9uZSBvZiB0aGUgbWVudSBpdGVtIHRvIGJ5IGFsd2F5cyB2aXNpYmxlLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zXG4gKiBAcGFyYW0ge29iamVjdFtdfSBtZW51SXRlbXMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRvIGdlbmVyYXRlZCBDb250ZXh0IE1lbnUgaXRlbXMuXG4gKi9cbidiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIERyb3Bkb3duTWVudX0gcGx1Z2luIGFmdGVyIHNldHRpbmcgdXAgdGhlIERyb3Bkb3duIE1lbnUncyBkZWZhdWx0IG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgYXJlIGFcbiAqIGNvbGxlY3Rpb24gd2hpY2ggdXNlciBjYW4gc2VsZWN0IGJ5IHNldHRpbmcgYW4gYXJyYXkgb2Yga2V5cyBvciBhbiBhcnJheSBvZiBvYmplY3RzIGluIHtAbGluayBPcHRpb25zI2Ryb3Bkb3duTWVudX1cbiAqIG9wdGlvbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3RbXX0gcHJlZGVmaW5lZEl0ZW1zIEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJlLWRlZmluZWQgQ29udGV4dCBNZW51IGl0ZW1zLlxuICovXG4nYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBEcm9wZG93bk1lbnV9IHBsdWdpbiBiZWZvcmUgc2V0dGluZyB1cCB0aGUgRHJvcGRvd24gTWVudSdzIGl0ZW1zIGJ1dCBhZnRlciBmaWx0ZXJpbmcgdGhlc2Ugb3B0aW9uc1xuICogYnkgdXNlciAoW2Bkcm9wZG93bk1lbnVgXShAL2FwaS9vcHRpb25zLm1kI2Ryb3Bkb3dubWVudSkgb3B0aW9uKS4gVGhpcyBob29rIGNhbiBieSBoZWxwZnVsIHRvIGRldGVybWluZSBpZiB1c2VyIHVzZSBzcGVjaWZpZWQgbWVudSBpdGVtIG9yIHRvIHNldFxuICogdXAgb25lIG9mIHRoZSBtZW51IGl0ZW0gdG8gYnkgYWx3YXlzIHZpc2libGUuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zXG4gKiBAcGFyYW0ge29iamVjdFtdfSBtZW51SXRlbXMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRvIGdlbmVyYXRlZCBEcm9wZG93biBNZW51IGl0ZW1zLlxuICovXG4nYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29udGV4dE1lbnV9IHBsdWdpbiBhZnRlciBoaWRpbmcgdGhlIENvbnRleHQgTWVudS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjY29udGV4dE1lbnV9XG4gKiBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJDb250ZXh0TWVudUhpZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IFRoZSBDb250ZXh0IE1lbnUgcGx1Z2luIGluc3RhbmNlLlxuICovXG4nYWZ0ZXJDb250ZXh0TWVudUhpZGUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29udGV4dE1lbnV9IHBsdWdpbiBiZWZvcmUgb3BlbmluZyB0aGUgQ29udGV4dCBNZW51LiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyNjb250ZXh0TWVudX1cbiAqIG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDb250ZXh0TWVudVNob3dcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0IFRoZSBDb250ZXh0IE1lbnUgaW5zdGFuY2UuXG4gKi9cbidiZWZvcmVDb250ZXh0TWVudVNob3cnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29udGV4dE1lbnV9IHBsdWdpbiBhZnRlciBvcGVuaW5nIHRoZSBDb250ZXh0IE1lbnUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvbnRleHRNZW51fVxuICogb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29udGV4dE1lbnVTaG93XG4gKiBAcGFyYW0ge29iamVjdH0gY29udGV4dCBUaGUgQ29udGV4dCBNZW51IHBsdWdpbiBpbnN0YW5jZS5cbiAqL1xuJ2FmdGVyQ29udGV4dE1lbnVTaG93Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIENvcHlQYXN0ZX0gcGx1Z2luIGFmdGVyIHJlYWNoaW5nIHRoZSBjb3B5IGxpbWl0IHdoaWxlIGNvcHlpbmcgZGF0YS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW5cbiAqIHtAbGluayBPcHRpb25zI2NvcHlQYXN0ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29weUxpbWl0XG4gKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRSb3dzIENvdW50IG9mIHNlbGVjdGVkIGNvcHlhYmxlIHJvd3MuXG4gKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0ZWRDb2x1bW5zIENvdW50IG9mIHNlbGVjdGVkIGNvcHlhYmxlIGNvbHVtbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gY29weVJvd3NMaW1pdCBDdXJyZW50IGNvcHkgcm93cyBsaW1pdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3B5Q29sdW1uc0xpbWl0IEN1cnJlbnQgY29weSBjb2x1bW5zIGxpbWl0LlxuICovXG4nYWZ0ZXJDb3B5TGltaXQnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgY3JlYXRlZCBhIG5ldyBjb2x1bW4uXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUNyZWF0ZUNvbFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFJlcHJlc2VudHMgdGhlIHZpc3VhbCBpbmRleCBvZiBmaXJzdCBuZXdseSBjcmVhdGVkIGNvbHVtbiBpbiB0aGUgZGF0YSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBvZiBuZXdseSBjcmVhdGVkIGNvbHVtbnMgaW4gdGhlIGRhdGEgc291cmNlIGFycmF5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9ldmVudHMtYW5kLWhvb2tzL2V2ZW50cy1hbmQtaG9va3MubWQjZGVmaW5pdGlvbi1mb3Itc291cmNlLWFyZ3VtZW50KSkuXG4gKiBAcmV0dXJucyB7Kn0gSWYgYGZhbHNlYCB0aGVuIGNyZWF0aW5nIGNvbHVtbnMgaXMgY2FuY2VsbGVkLlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogLy8gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIGNvbHVtbiBpbnNlcnRpbmcuXG4gKiBuZXcgSGFuZHNvbnRhYmxlKGVsZW1lbnQsIHtcbiAqICAgYmVmb3JlQ3JlYXRlQ29sOiBmdW5jdGlvbihkYXRhLCBjb29yZHMpIHtcbiAqICAgICByZXR1cm4gZmFsc2U7XG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqIGBgYGpzeFxuICogLy8gUmV0dXJuIGBmYWxzZWAgdG8gY2FuY2VsIGNvbHVtbiBpbnNlcnRpbmcuXG4gKiA8SG90VGFibGVcbiAqICAgYmVmb3JlQ3JlYXRlQ29sPXsoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9fVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbidiZWZvcmVDcmVhdGVDb2wnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgb3JkZXIgb2YgY29sdW1ucyBoYXMgY2hhbmdlZC5cbiAqIFRoaXMgaG9vayBpcyBmaXJlZCBieSBjaGFuZ2luZyBjb2x1bW4gaW5kZXhlcyBvZiBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIHtAbGluayBJbmRleE1hcHBlcn0uXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2VcbiAqIEBwYXJhbSB7J2luaXQnfCdyZW1vdmUnfCdpbnNlcnQnfCdtb3ZlJ3wndXBkYXRlJ30gW3NvdXJjZV0gQSBzdHJpbmcgdGhhdCBpbmRpY2F0ZXMgd2hhdCBjYXVzZWQgdGhlIGNoYW5nZSB0byB0aGUgb3JkZXIgb2YgY29sdW1ucy5cbiAqL1xuJ2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBjcmVhdGVkIGEgbmV3IGNvbHVtbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJDcmVhdGVDb2xcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBSZXByZXNlbnRzIHRoZSB2aXN1YWwgaW5kZXggb2YgZmlyc3QgbmV3bHkgY3JlYXRlZCBjb2x1bW4gaW4gdGhlIGRhdGEgc291cmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBOdW1iZXIgb2YgbmV3bHkgY3JlYXRlZCBjb2x1bW5zIGluIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICovXG4nYWZ0ZXJDcmVhdGVDb2wnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgY3JlYXRlZCBhIG5ldyByb3cuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUNyZWF0ZVJvd1xuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFJlcHJlc2VudHMgdGhlIHZpc3VhbCBpbmRleCBvZiBmaXJzdCBuZXdseSBjcmVhdGVkIHJvdyBpbiB0aGUgZGF0YSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBvZiBuZXdseSBjcmVhdGVkIHJvd3MgaW4gdGhlIGRhdGEgc291cmNlIGFycmF5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9ldmVudHMtYW5kLWhvb2tzL2V2ZW50cy1hbmQtaG9va3MubWQjZGVmaW5pdGlvbi1mb3Itc291cmNlLWFyZ3VtZW50KSkuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlQ3JlYXRlUm93Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY3JlYXRlZCBhIG5ldyByb3cuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ3JlYXRlUm93XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggUmVwcmVzZW50cyB0aGUgdmlzdWFsIGluZGV4IG9mIGZpcnN0IG5ld2x5IGNyZWF0ZWQgcm93IGluIHRoZSBkYXRhIHNvdXJjZSBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiB0aGUgZGF0YSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqL1xuJ2FmdGVyQ3JlYXRlUm93Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgYWxsIHNlbGVjdGVkIGNlbGxzIGFyZSBkZXNlbGVjdGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckRlc2VsZWN0XG4gKi9cbidhZnRlckRlc2VsZWN0Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgZGVzdHJveWluZyB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckRlc3Ryb3lcbiAqL1xuJ2FmdGVyRGVzdHJveScsXG4vKipcbiAqIEhvb2sgZmlyZWQgYWZ0ZXIgYGtleWRvd25gIGV2ZW50IGlzIGhhbmRsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyRG9jdW1lbnRLZXlEb3duXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBBIG5hdGl2ZSBga2V5ZG93bmAgZXZlbnQgb2JqZWN0LlxuICovXG4nYWZ0ZXJEb2N1bWVudEtleURvd24nLFxuLyoqXG4gKiBGaXJlZCBpbnNpZGUgdGhlIFdhbGtvbnRhYmxlJ3Mgc2VsZWN0aW9uIGBkcmF3YCBtZXRob2QuIENhbiBiZSB1c2VkIHRvIGFkZCBhZGRpdGlvbmFsIGNsYXNzIG5hbWVzIHRvIGNlbGxzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckRyYXdTZWxlY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50Um93IFJvdyBpbmRleCBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCBjZWxsLlxuICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRDb2x1bW4gQ29sdW1uIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGNvcm5lcnNPZlNlbGVjdGlvbiBBcnJheSBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW4gYSBmb3JtIG9mIGBbc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbl1gLlxuICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBsYXllckxldmVsIE51bWJlciBpbmRpY2F0aW5nIHdoaWNoIGxheWVyIG9mIHNlbGVjdGlvbiBpcyBjdXJyZW50bHkgcHJvY2Vzc2VkLlxuICogQHNpbmNlIDAuMzguMVxuICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IENhbiByZXR1cm4gYSBgU3RyaW5nYCwgd2hpY2ggd2lsbCBhY3QgYXMgYW4gYWRkaXRpb25hbCBgY2xhc3NOYW1lYCB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCBjZWxsLlxuICovXG4nYWZ0ZXJEcmF3U2VsZWN0aW9uJyxcbi8qKlxuICogRmlyZWQgaW5zaWRlIHRoZSBXYWxrb250YWJsZSdzIGByZWZyZXNoU2VsZWN0aW9uc2AgbWV0aG9kLiBDYW4gYmUgdXNlZCB0byByZW1vdmUgYWRkaXRpb25hbCBjbGFzcyBuYW1lcyBmcm9tIGFsbCBjZWxscyBpbiB0aGUgdGFibGUuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzXG4gKiBAc2luY2UgMC4zOC4xXG4gKiBAcmV0dXJucyB7c3RyaW5nW118dW5kZWZpbmVkfSBDYW4gcmV0dXJuIGFuIGBBcnJheWAgb2YgYFN0cmluZ2BzLiBFYWNoIG9mIHRoZXNlIHN0cmluZ3Mgd2lsbCBhY3QgbGlrZSBjbGFzcyBuYW1lcyB0byBiZSByZW1vdmVkIGZyb20gYWxsIHRoZSBjZWxscyBpbiB0aGUgdGFibGUuXG4gKi9cbidiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcycsXG4vKipcbiAqIEZpcmVkIGFmdGVyIGdldHRpbmcgdGhlIGNlbGwgc2V0dGluZ3MuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyR2V0Q2VsbE1ldGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBPYmplY3QgY29udGFpbmluZyB0aGUgY2VsbCBwcm9wZXJ0aWVzLlxuICovXG4nYWZ0ZXJHZXRDZWxsTWV0YScsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHJldHJpZXZpbmcgaW5mb3JtYXRpb24gYWJvdXQgYSBjb2x1bW4gaGVhZGVyIGFuZCBhcHBlbmRpbmcgaXQgdG8gdGhlIHRhYmxlIGhlYWRlci5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJHZXRDb2xIZWFkZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFRIIEhlYWRlcidzIFRIIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW2hlYWRlckxldmVsPTBdIChTaW5jZSAxMi4yLjApIEhlYWRlciBsZXZlbCBpbmRleC4gQWNjZXB0cyBwb3NpdGl2ZSAoMCB0byBuKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmUgKC0xIHRvIC1uKSB2YWx1ZXMuIEZvciBwb3NpdGl2ZSB2YWx1ZXMsIDAgcG9pbnRzIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Btb3N0IGhlYWRlci4gRm9yIG5lZ2F0aXZlIHZhbHVlcywgLTEgcG9pbnRzIHRvIHRoZSBib3R0b20tbW9zdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKHRoZSBoZWFkZXIgY2xvc2VzdCB0byB0aGUgY2VsbHMpLlxuICovXG4nYWZ0ZXJHZXRDb2xIZWFkZXInLFxuLyoqXG4gKiBGaXJlZCBhZnRlciByZXRyaWV2aW5nIGluZm9ybWF0aW9uIGFib3V0IGEgcm93IGhlYWRlciBhbmQgYXBwZW5kaW5nIGl0IHRvIHRoZSB0YWJsZSBoZWFkZXIuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyR2V0Um93SGVhZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBUSCBIZWFkZXIncyBUSCBlbGVtZW50LlxuICovXG4nYWZ0ZXJHZXRSb3dIZWFkZXInLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGlzIGluaXRpYXRlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJJbml0XG4gKi9cbidhZnRlckluaXQnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBIYW5kc29udGFibGUncyBbYGRhdGFgXShAL2FwaS9vcHRpb25zLm1kI2RhdGEpXG4gKiBnZXRzIG1vZGlmaWVkIGJ5IHRoZSBbYGxvYWREYXRhKClgXShAL2FwaS9jb3JlLm1kI2xvYWRkYXRhKSBtZXRob2RcbiAqIG9yIHRoZSBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBtZXRob2QuXG4gKlxuICogUmVhZCBtb3JlOlxuICogLSBbQmluZGluZyB0byBkYXRhXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZClcbiAqIC0gW1NhdmluZyBkYXRhXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvc2F2aW5nLWRhdGEvc2F2aW5nLWRhdGEubWQpXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyTG9hZERhdGFcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZURhdGEgQW4gW2FycmF5IG9mIGFycmF5c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2YtYXJyYXlzKSwgb3IgYW4gW2FycmF5IG9mIG9iamVjdHNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLW9iamVjdHMpLCB0aGF0IGNvbnRhaW5zIEhhbmRzb250YWJsZSdzIGRhdGFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgQSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgd2FzIGxvYWRlZCBhdCBIYW5kc29udGFibGUncyBpbml0aWFsaXphdGlvbiAoYHRydWVgKSBvciBsYXRlciAoYGZhbHNlYClcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSBvZiB0aGUgY2FsbFxuICovXG4nYWZ0ZXJMb2FkRGF0YScsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSBbYHVwZGF0ZURhdGEoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlZGF0YSkgbWV0aG9kXG4gKiBtb2RpZmllcyBIYW5kc29udGFibGUncyBbYGRhdGFgXShAL2FwaS9vcHRpb25zLm1kI2RhdGEpLlxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0JpbmRpbmcgdG8gZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQpXG4gKiAtIFtTYXZpbmcgZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL3NhdmluZy1kYXRhL3NhdmluZy1kYXRhLm1kKVxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclVwZGF0ZURhdGFcbiAqIEBzaW5jZSAxMS4xLjBcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZURhdGEgQW4gW2FycmF5IG9mIGFycmF5c10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQjYXJyYXktb2YtYXJyYXlzKSwgb3IgYW4gW2FycmF5IG9mIG9iamVjdHNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLW9iamVjdHMpLCB0aGF0IGNvbnRhaW5zIEhhbmRzb250YWJsZSdzIGRhdGFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgQSBmbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGRhdGEgd2FzIGxvYWRlZCBhdCBIYW5kc29udGFibGUncyBpbml0aWFsaXphdGlvbiAoYHRydWVgKSBvciBsYXRlciAoYGZhbHNlYClcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSBvZiB0aGUgY2FsbFxuICovXG4nYWZ0ZXJVcGRhdGVEYXRhJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgYSBzY3JvbGwgZXZlbnQsIHdoaWNoIGlzIGlkZW50aWZpZWQgYXMgYSBtb21lbnR1bSBzY3JvbGwgKGUuZy4gb24gYW4gaVBhZCkuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyTW9tZW50dW1TY3JvbGxcbiAqL1xuJ2FmdGVyTW9tZW50dW1TY3JvbGwnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBhIGBtb3VzZWRvd25gIGV2ZW50IGlzIHRyaWdnZXJlZCBvbiB0aGUgY2VsbCBjb3JuZXIgKHRoZSBkcmFnIGhhbmRsZSkuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBgbW91c2Vkb3duYCBldmVudCBvYmplY3QuXG4gKi9cbidhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bicsXG4vKipcbiAqIEZpcmVkIGFmdGVyIGEgYGRibGNsaWNrYCBldmVudCBpcyB0cmlnZ2VyZWQgb24gdGhlIGNlbGwgY29ybmVyICh0aGUgZHJhZyBoYW5kbGUpLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlck9uQ2VsbENvcm5lckRibENsaWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBgZGJsY2xpY2tgIGV2ZW50IG9iamVjdC5cbiAqL1xuJ2FmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2snLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBjbGlja2luZyBvbiBhIGNlbGwgb3Igcm93L2NvbHVtbiBoZWFkZXIuIEluIGNhc2UgdGhlIHJvdy9jb2x1bW4gaGVhZGVyIHdhcyBjbGlja2VkLCB0aGUgY29vcmRpbmF0ZVxuICogaW5kZXhlcyBhcmUgbmVnYXRpdmUuXG4gKlxuICogRm9yIGV4YW1wbGUgY2xpY2tpbmcgb24gdGhlIHJvdyBoZWFkZXIgb2YgY2VsbCAoMCwgMCkgcmVzdWx0cyB3aXRoIGBhZnRlck9uQ2VsbE1vdXNlRG93bmAgY2FsbGVkXG4gKiB3aXRoIGNvb3JkaW5hdGVzIGB7cm93OiAwLCBjb2w6IC0xfWAuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyT25DZWxsTW91c2VEb3duXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBgbW91c2Vkb3duYCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZGluYXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgdmlzdWFsIHJvdyBhbmQgdmlzdWFsIGNvbHVtbiBpbmRleGVzIG9mIHRoZSBjbGlja2VkIGNlbGwuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBDZWxsJ3MgVEQgKG9yIFRIKSBlbGVtZW50LlxuICovXG4nYWZ0ZXJPbkNlbGxNb3VzZURvd24nLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBjbGlja2luZyBvbiBhIGNlbGwgb3Igcm93L2NvbHVtbiBoZWFkZXIuIEluIGNhc2UgdGhlIHJvdy9jb2x1bW4gaGVhZGVyIHdhcyBjbGlja2VkLCB0aGUgY29vcmRpbmF0ZVxuICogaW5kZXhlcyBhcmUgbmVnYXRpdmUuXG4gKlxuICogRm9yIGV4YW1wbGUgY2xpY2tpbmcgb24gdGhlIHJvdyBoZWFkZXIgb2YgY2VsbCAoMCwgMCkgcmVzdWx0cyB3aXRoIGBhZnRlck9uQ2VsbE1vdXNlVXBgIGNhbGxlZFxuICogd2l0aCBjb29yZGluYXRlcyBge3JvdzogMCwgY29sOiAtMX1gLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlck9uQ2VsbE1vdXNlVXBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IGBtb3VzZXVwYCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZGluYXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgdmlzdWFsIHJvdyBhbmQgdmlzdWFsIGNvbHVtbiBpbmRleGVzIG9mIHRoZSBjbGlja2VkIGNlbGwuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBDZWxsJ3MgVEQgKG9yIFRIKSBlbGVtZW50LlxuICovXG4nYWZ0ZXJPbkNlbGxNb3VzZVVwJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY2xpY2tpbmcgcmlnaHQgbW91c2UgYnV0dG9uIG9uIGEgY2VsbCBvciByb3cvY29sdW1uIGhlYWRlci5cbiAqXG4gKiBGb3IgZXhhbXBsZSBjbGlja2luZyBvbiB0aGUgcm93IGhlYWRlciBvZiBjZWxsICgwLCAwKSByZXN1bHRzIHdpdGggYGFmdGVyT25DZWxsQ29udGV4dE1lbnVgIGNhbGxlZFxuICogd2l0aCBjb29yZGluYXRlcyBge3JvdzogMCwgY29sOiAtMX1gLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlck9uQ2VsbENvbnRleHRNZW51XG4gKiBAc2luY2UgNC4xLjBcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IGBjb250ZXh0bWVudWAgZXZlbnQgb2JqZWN0LlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgQ29vcmRpbmF0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZpc3VhbCByb3cgYW5kIHZpc3VhbCBjb2x1bW4gaW5kZXhlcyBvZiB0aGUgY2xpY2tlZCBjZWxsLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgQ2VsbCdzIFREIChvciBUSCkgZWxlbWVudC5cbiAqL1xuJ2FmdGVyT25DZWxsQ29udGV4dE1lbnUnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBob3ZlcmluZyBhIGNlbGwgb3Igcm93L2NvbHVtbiBoZWFkZXIgd2l0aCB0aGUgbW91c2UgY3Vyc29yLiBJbiBjYXNlIHRoZSByb3cvY29sdW1uIGhlYWRlciB3YXNcbiAqIGhvdmVyZWQsIHRoZSBpbmRleCBpcyBuZWdhdGl2ZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaG92ZXJpbmcgb3ZlciB0aGUgcm93IGhlYWRlciBvZiBjZWxsICgwLCAwKSByZXN1bHRzIHdpdGggYGFmdGVyT25DZWxsTW91c2VPdmVyYCBjYWxsZWRcbiAqIHdpdGggY29vcmRzIGB7cm93OiAwLCBjb2w6IC0xfWAuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyT25DZWxsTW91c2VPdmVyXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBgbW91c2VvdmVyYCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBIb3ZlcmVkIGNlbGwncyB2aXN1YWwgY29vcmRpbmF0ZSBvYmplY3QuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBDZWxsJ3MgVEQgKG9yIFRIKSBlbGVtZW50LlxuICovXG4nYWZ0ZXJPbkNlbGxNb3VzZU92ZXInLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBsZWF2aW5nIGEgY2VsbCBvciByb3cvY29sdW1uIGhlYWRlciB3aXRoIHRoZSBtb3VzZSBjdXJzb3IuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyT25DZWxsTW91c2VPdXRcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IGBtb3VzZW91dGAgZXZlbnQgb2JqZWN0LlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgTGVhdmVkIGNlbGwncyB2aXN1YWwgY29vcmRpbmF0ZSBvYmplY3QuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBDZWxsJ3MgVEQgKG9yIFRIKSBlbGVtZW50LlxuICovXG4nYWZ0ZXJPbkNlbGxNb3VzZU91dCcsXG4vKipcbiAqIEZpcmVkIGFmdGVyIG9uZSBvciBtb3JlIGNvbHVtbnMgYXJlIHJlbW92ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyUmVtb3ZlQ29sXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVmlzdWFsIGluZGV4IG9mIHN0YXJ0ZXIgY29sdW1uLlxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2YgcmVtb3ZlZCBjb2x1bW5zLlxuICogQHBhcmFtIHtudW1iZXJbXX0gcGh5c2ljYWxDb2x1bW5zIEFuIGFycmF5IG9mIHBoeXNpY2FsIGNvbHVtbnMgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICovXG4nYWZ0ZXJSZW1vdmVDb2wnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBvbmUgb3IgbW9yZSByb3dzIGFyZSByZW1vdmVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclJlbW92ZVJvd1xuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFZpc3VhbCBpbmRleCBvZiBzdGFydGVyIHJvdy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW4gYW1vdW50IG9mIHJlbW92ZWQgcm93cy5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBoeXNpY2FsUm93cyBBbiBhcnJheSBvZiBwaHlzaWNhbCByb3dzIHJlbW92ZWQgZnJvbSB0aGUgZGF0YSBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqL1xuJ2FmdGVyUmVtb3ZlUm93Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIHN0YXJ0aW5nIHJlbmRlcmluZyB0aGUgY2VsbC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlUmVuZGVyZXJcbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIEN1cnJlbnRseSByZW5kZXJlZCBjZWxsJ3MgVEQgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcHJvcCBDb2x1bW4gcHJvcGVydHkgbmFtZSBvciBhIGNvbHVtbiBpbmRleCwgaWYgZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBhcnJheXMuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIHRoZSByZW5kZXJlZCBjZWxsLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIE9iamVjdCBjb250YWluaW5nIHRoZSBjZWxsJ3MgcHJvcGVydGllcy5cbiAqL1xuJ2JlZm9yZVJlbmRlcmVyJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgZmluaXNoaW5nIHJlbmRlcmluZyB0aGUgY2VsbCAoYWZ0ZXIgdGhlIHJlbmRlcmVyIGZpbmlzaGVzKS5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJSZW5kZXJlclxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgQ3VycmVudGx5IHJlbmRlcmVkIGNlbGwncyBURCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwcm9wIENvbHVtbiBwcm9wZXJ0eSBuYW1lIG9yIGEgY29sdW1uIGluZGV4LCBpZiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIGFycmF5cy5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgdGhlIHJlbmRlcmVkIGNlbGwuXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNlbGwncyBwcm9wZXJ0aWVzLlxuICovXG4nYWZ0ZXJSZW5kZXJlcicsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSBvcmRlciBvZiByb3dzIGhhcyBjaGFuZ2VkLlxuICogVGhpcyBob29rIGlzIGZpcmVkIGJ5IGNoYW5naW5nIHJvdyBpbmRleGVzIG9mIGFueSB0eXBlIHN1cHBvcnRlZCBieSB0aGUge0BsaW5rIEluZGV4TWFwcGVyfS5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZVxuICogQHBhcmFtIHsnaW5pdCd8J3JlbW92ZSd8J2luc2VydCd8J21vdmUnfCd1cGRhdGUnfSBbc291cmNlXSBBIHN0cmluZyB0aGF0IGluZGljYXRlcyB3aGF0IGNhdXNlZCB0aGUgY2hhbmdlIHRvIHRoZSBvcmRlciBvZiByb3dzLlxuICovXG4nYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZScsXG4vKipcbiAqIEZpcmVkIGJlZm9yZSB0aGUgdmVydGljYWwgdmlld3BvcnQgc2Nyb2xsLiBUcmlnZ2VyZWQgYnkgdGhlIFtgc2Nyb2xsVmlld3BvcnRUbygpYF0oQC9hcGkvY29yZS5tZCNzY3JvbGx2aWV3cG9ydHRvKVxuICogbWV0aG9kIG9yIHRhYmxlIGludGVybmFscy5cbiAqXG4gKiBAc2luY2UgMTQuMC4wXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5XG4gKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsUm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyIHwgYm9vbGVhbn0gUmV0dXJucyBtb2RpZmllZCByb3cgaW5kZXggKG9yIHRoZSBzYW1lIGFzIHBhc3NlZCBpbiB0aGUgbWV0aG9kIGFyZ3VtZW50KSB0byB3aGljaFxuICogdGhlIHZpZXdwb3J0IHdpbGwgYmUgc2Nyb2xsZWQuIElmIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyBgZmFsc2VgLCB0aGUgc2Nyb2xsaW5nIHdpbGwgYmUgY2FuY2VsZWQuXG4gKi9cbidiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHknLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgdGhlIGhvcml6b250YWwgdmlld3BvcnQgc2Nyb2xsLiBUcmlnZ2VyZWQgYnkgdGhlIFtgc2Nyb2xsVmlld3BvcnRUbygpYF0oQC9hcGkvY29yZS5tZCNzY3JvbGx2aWV3cG9ydHRvKVxuICogbWV0aG9kIG9yIHRhYmxlIGludGVybmFscy5cbiAqXG4gKiBAc2luY2UgMTQuMC4wXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHlcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCBib29sZWFufSBSZXR1cm5zIG1vZGlmaWVkIGNvbHVtbiBpbmRleCAob3IgdGhlIHNhbWUgYXMgcGFzc2VkIGluIHRoZSBtZXRob2QgYXJndW1lbnQpIHRvIHdoaWNoXG4gKiB0aGUgdmlld3BvcnQgd2lsbCBiZSBzY3JvbGxlZC4gSWYgdGhlIHJldHVybmVkIHZhbHVlIGlzIGBmYWxzZWAsIHRoZSBzY3JvbGxpbmcgd2lsbCBiZSBjYW5jZWxlZC5cbiAqL1xuJ2JlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIHRoZSB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIHZpZXdwb3J0IHNjcm9sbC4gVHJpZ2dlcmVkIGJ5IHRoZSBbYHNjcm9sbFZpZXdwb3J0VG8oKWBdKEAvYXBpL2NvcmUubWQjc2Nyb2xsdmlld3BvcnR0bylcbiAqIG1ldGhvZCBvciB0YWJsZSBpbnRlcm5hbHMuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVZpZXdwb3J0U2Nyb2xsXG4gKi9cbidiZWZvcmVWaWV3cG9ydFNjcm9sbCcsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSBob3Jpem9udGFsIHNjcm9sbCBldmVudC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHlcbiAqL1xuJ2FmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHZlcnRpY2FsIHNjcm9sbCBldmVudC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5XG4gKi9cbidhZnRlclNjcm9sbFZlcnRpY2FsbHknLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgdmVydGljYWwgb3IgaG9yaXpvbnRhbCBzY3JvbGwgZXZlbnQuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2FmdGVyU2Nyb2xsXG4gKi9cbidhZnRlclNjcm9sbCcsXG4vKipcbiAqIEZpcmVkIGFmdGVyIG9uZSBvciBtb3JlIGNlbGxzIGFyZSBzZWxlY3RlZCAoZS5nLiBkdXJpbmcgbW91c2UgbW92ZSkuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyU2VsZWN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFNlbGVjdGlvbiBzdGFydCB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBTZWxlY3Rpb24gc3RhcnQgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cyIFNlbGVjdGlvbiBlbmQgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4yIFNlbGVjdGlvbiBlbmQgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2ZW50U2Nyb2xsaW5nIEEgcmVmZXJlbmNlIHRvIHRoZSBvYnNlcnZhYmxlIG9iamVjdCB3aXRoIHRoZSBgdmFsdWVgIHByb3BlcnR5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHkgYHByZXZlbnRTY3JvbGxpbmcudmFsdWVgIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHRoYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRzb250YWJsZSB1c2VzIHRvIGNvbnRyb2wgc2Nyb2xsIGJlaGF2aW9yIGFmdGVyIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2ZW50U2Nyb2xsaW5nIE9iamVjdCB3aXRoIGB2YWx1ZWAgcHJvcGVydHkgd2hlcmUgaXRzIHZhbHVlIGNoYW5nZSB3aWxsIGJlIG9ic2VydmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHNlbGVjdGlvbkxheWVyTGV2ZWwgVGhlIG51bWJlciB3aGljaCBpbmRpY2F0ZXMgd2hhdCBzZWxlY3Rpb24gbGF5ZXIgaXMgY3VycmVudGx5IG1vZGlmaWVkLlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogbmV3IEhhbmRzb250YWJsZShlbGVtZW50LCB7XG4gKiAgIGFmdGVyU2VsZWN0aW9uOiAocm93LCBjb2x1bW4sIHJvdzIsIGNvbHVtbjIsIHByZXZlbnRTY3JvbGxpbmcsIHNlbGVjdGlvbkxheWVyTGV2ZWwpID0+IHtcbiAqICAgICAvLyBJZiBzZXQgdG8gYGZhbHNlYCAoZGVmYXVsdCk6IHdoZW4gY2VsbCBzZWxlY3Rpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQsXG4gKiAgICAgLy8gSGFuZHNvbnRhYmxlIHNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIGNlbGwgc2VsZWN0aW9uJ3MgZW5kIGNvcm5lci5cbiAqICAgICAvLyBJZiBzZXQgdG8gYHRydWVgOiB3aGVuIGNlbGwgc2VsZWN0aW9uIGlzIG91dHNpZGUgdGhlIHZpZXdwb3J0LFxuICogICAgIC8vIEhhbmRzb250YWJsZSBkb2Vzbid0IHNjcm9sbCB0byBjZWxsIHNlbGVjdGlvbidzIGVuZCBjb3JuZXIuXG4gKiAgICAgcHJldmVudFNjcm9sbGluZy52YWx1ZSA9IHRydWU7XG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgYWZ0ZXJTZWxlY3Rpb249eyhyb3csIGNvbHVtbiwgcm93MiwgY29sdW1uMiwgcHJldmVudFNjcm9sbGluZywgc2VsZWN0aW9uTGF5ZXJMZXZlbCkgPT4ge1xuICogICAgIC8vIElmIHNldCB0byBgZmFsc2VgIChkZWZhdWx0KTogd2hlbiBjZWxsIHNlbGVjdGlvbiBpcyBvdXRzaWRlIHRoZSB2aWV3cG9ydCxcbiAqICAgICAvLyBIYW5kc29udGFibGUgc2Nyb2xscyB0aGUgdmlld3BvcnQgdG8gY2VsbCBzZWxlY3Rpb24ncyBlbmQgY29ybmVyLlxuICogICAgIC8vIElmIHNldCB0byBgdHJ1ZWA6IHdoZW4gY2VsbCBzZWxlY3Rpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQsXG4gKiAgICAgLy8gSGFuZHNvbnRhYmxlIGRvZXNuJ3Qgc2Nyb2xsIHRvIGNlbGwgc2VsZWN0aW9uJ3MgZW5kIGNvcm5lci5cbiAqICAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqIDo6OlxuICovXG4nYWZ0ZXJTZWxlY3Rpb24nLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBvbmUgb3IgbW9yZSBjZWxscyBhcmUgc2VsZWN0ZWQuXG4gKlxuICogVGhlIGBwcm9wYCBhbmQgYHByb3AyYCBhcmd1bWVudHMgcmVwcmVzZW50IHRoZSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUgaW5zdGVhZCBvZiB0aGUgY29sdW1uIG51bWJlci5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTZWxlY3Rpb25CeVByb3BcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgU2VsZWN0aW9uIHN0YXJ0IHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBTZWxlY3Rpb24gc3RhcnQgZGF0YSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93MiBTZWxlY3Rpb24gZW5kIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcDIgU2VsZWN0aW9uIGVuZCBkYXRhIHNvdXJjZSBvYmplY3QgcHJvcGVydHkgbmFtZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2ZW50U2Nyb2xsaW5nIEEgcmVmZXJlbmNlIHRvIHRoZSBvYnNlcnZhYmxlIG9iamVjdCB3aXRoIHRoZSBgdmFsdWVgIHByb3BlcnR5LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHkgYHByZXZlbnRTY3JvbGxpbmcudmFsdWVgIGV4cGVjdHMgYSBib29sZWFuIHZhbHVlIHRoYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRzb250YWJsZSB1c2VzIHRvIGNvbnRyb2wgc2Nyb2xsIGJlaGF2aW9yIGFmdGVyIHNlbGVjdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWxlY3Rpb25MYXllckxldmVsIFRoZSBudW1iZXIgd2hpY2ggaW5kaWNhdGVzIHdoYXQgc2VsZWN0aW9uIGxheWVyIGlzIGN1cnJlbnRseSBtb2RpZmllZC5cbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBhZnRlclNlbGVjdGlvbkJ5UHJvcDogKHJvdywgY29sdW1uLCByb3cyLCBjb2x1bW4yLCBwcmV2ZW50U2Nyb2xsaW5nLCBzZWxlY3Rpb25MYXllckxldmVsKSA9PiB7XG4gKiAgICAgLy8gc2V0dGluZyBpZiBwcmV2ZW50IHNjcm9sbGluZyBhZnRlciBzZWxlY3Rpb25cbiAqICAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBhZnRlclNlbGVjdGlvbkJ5UHJvcD17KHJvdywgY29sdW1uLCByb3cyLCBjb2x1bW4yLCBwcmV2ZW50U2Nyb2xsaW5nLCBzZWxlY3Rpb25MYXllckxldmVsKSA9PiB7XG4gKiAgICAgLy8gc2V0dGluZyBpZiBwcmV2ZW50IHNjcm9sbGluZyBhZnRlciBzZWxlY3Rpb25cbiAqICAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqIDo6OlxuICovXG4nYWZ0ZXJTZWxlY3Rpb25CeVByb3AnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBvbmUgb3IgbW9yZSBjZWxscyBhcmUgc2VsZWN0ZWQgKGUuZy4gb24gbW91c2UgdXApLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclNlbGVjdGlvbkVuZFxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBTZWxlY3Rpb24gc3RhcnQgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gU2VsZWN0aW9uIHN0YXJ0IHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gcm93MiBTZWxlY3Rpb24gZW5kIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uMiBTZWxlY3Rpb24gZW5kIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gc2VsZWN0aW9uTGF5ZXJMZXZlbCBUaGUgbnVtYmVyIHdoaWNoIGluZGljYXRlcyB3aGF0IHNlbGVjdGlvbiBsYXllciBpcyBjdXJyZW50bHkgbW9kaWZpZWQuXG4gKi9cbidhZnRlclNlbGVjdGlvbkVuZCcsXG4vKipcbiAqIEZpcmVkIGFmdGVyIG9uZSBvciBtb3JlIGNlbGxzIGFyZSBzZWxlY3RlZCAoZS5nLiBvbiBtb3VzZSB1cCkuXG4gKlxuICogVGhlIGBwcm9wYCBhbmQgYHByb3AyYCBhcmd1bWVudHMgcmVwcmVzZW50IHRoZSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUgaW5zdGVhZCBvZiB0aGUgY29sdW1uIG51bWJlci5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3BcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgU2VsZWN0aW9uIHN0YXJ0IHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBTZWxlY3Rpb24gc3RhcnQgZGF0YSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdzIgU2VsZWN0aW9uIGVuZCB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AyIFNlbGVjdGlvbiBlbmQgZGF0YSBzb3VyY2Ugb2JqZWN0IHByb3BlcnR5IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IHNlbGVjdGlvbkxheWVyTGV2ZWwgVGhlIG51bWJlciB3aGljaCBpbmRpY2F0ZXMgd2hhdCBzZWxlY3Rpb24gbGF5ZXIgaXMgY3VycmVudGx5IG1vZGlmaWVkLlxuICovXG4nYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgZm9jdXMgcG9zaXRpb24gd2l0aGluIGEgc2VsZWN0ZWQgcmFuZ2UgaXMgY2hhbmdlZC5cbiAqXG4gKiBAc2luY2UgMTQuMy4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldFxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgZm9jdXMgdmlzdWFsIHJvdyBpbmRleCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIGZvY3VzIHZpc3VhbCBjb2x1bW4gaW5kZXggcG9zaXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldmVudFNjcm9sbGluZyBBIHJlZmVyZW5jZSB0byB0aGUgb2JzZXJ2YWJsZSBvYmplY3Qgd2l0aCB0aGUgYHZhbHVlYCBwcm9wZXJ0eS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5IGBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlYCBleHBlY3RzIGEgYm9vbGVhbiB2YWx1ZSB0aGF0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kc29udGFibGUgdXNlcyB0byBjb250cm9sIHNjcm9sbCBiZWhhdmlvciBhZnRlciBzZWxlY3Rpb24uXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBuZXcgSGFuZHNvbnRhYmxlKGVsZW1lbnQsIHtcbiAqICAgYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldDogKHJvdywgY29sdW1uLCBwcmV2ZW50U2Nyb2xsaW5nKSA9PiB7XG4gKiAgICAgLy8gSWYgc2V0IHRvIGBmYWxzZWAgKGRlZmF1bHQpOiB3aGVuIGZvY3VzZWQgY2VsbCBzZWxlY3Rpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQsXG4gKiAgICAgLy8gSGFuZHNvbnRhYmxlIHNjcm9sbHMgdGhlIHZpZXdwb3J0IHRvIHRoYXQgY2VsbC5cbiAqICAgICAvLyBJZiBzZXQgdG8gYHRydWVgOiB3aGVuIGZvY3VzZWQgY2VsbCBzZWxlY3Rpb24gaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQsXG4gKiAgICAgLy8gSGFuZHNvbnRhYmxlIGRvZXNuJ3Qgc2Nyb2xsIHRoZSB2aWV3cG9ydC5cbiAqICAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAqICAgfVxuICogfSlcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBhZnRlclNlbGVjdGlvbkZvY3VzU2V0PXsocm93LCBjb2x1bW4sIHByZXZlbnRTY3JvbGxpbmcpID0+IHtcbiAqICAgICAvLyBJZiBzZXQgdG8gYGZhbHNlYCAoZGVmYXVsdCk6IHdoZW4gZm9jdXNlZCBjZWxsIHNlbGVjdGlvbiBpcyBvdXRzaWRlIHRoZSB2aWV3cG9ydCxcbiAqICAgICAvLyBIYW5kc29udGFibGUgc2Nyb2xscyB0aGUgdmlld3BvcnQgdG8gdGhhdCBjZWxsLlxuICogICAgIC8vIElmIHNldCB0byBgdHJ1ZWA6IHdoZW4gZm9jdXNlZCBjZWxsIHNlbGVjdGlvbiBpcyBvdXRzaWRlIHRoZSB2aWV3cG9ydCxcbiAqICAgICAvLyBIYW5kc29udGFibGUgZG9lc24ndCBzY3JvbGwgdGhlIHZpZXdwb3J0LlxuICogICAgIHByZXZlbnRTY3JvbGxpbmcudmFsdWUgPSB0cnVlO1xuICogICB9fVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbidhZnRlclNlbGVjdGlvbkZvY3VzU2V0Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIG9uZSBvciBtb3JlIGNvbHVtbnMgYXJlIHNlbGVjdGVkIChlLmcuIER1cmluZyBtb3VzZSBoZWFkZXIgY2xpY2sgb3Ige0BsaW5rIENvcmUjc2VsZWN0Q29sdW1uc30gQVBJIGNhbGwpLlxuICpcbiAqIEBzaW5jZSAxNC4wLjBcbiAqIEBldmVudCBIb29rcyNiZWZvcmVTZWxlY3RDb2x1bW5zXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGZyb20gU2VsZWN0aW9uIHN0YXJ0IGNvb3JkcyBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRvIFNlbGVjdGlvbiBlbmQgY29vcmRzIG9iamVjdC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gaGlnaGxpZ2h0IFNlbGVjdGlvbiBjZWxsIGZvY3VzIGNvb3JkcyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBuZXcgSGFuZHNvbnRhYmxlKGVsZW1lbnQsIHtcbiAqICAgYmVmb3JlU2VsZWN0Q29sdW1uczogKGZyb20sIHRvLCBoaWdobGlnaHQpID0+IHtcbiAqICAgICAvLyBFeHRlbmQgdGhlIGNvbHVtbiBzZWxlY3Rpb24gYnkgb25lIGNvbHVtbiBsZWZ0IGFuZCBvbmUgY29sdW1uIHJpZ2h0LlxuICogICAgIGZyb20uY29sID0gTWF0aC5tYXgoZnJvbS5jb2wgLSAxLCAwKTtcbiAqICAgICB0by5jb2wgPSBNYXRoLm1pbih0by5jb2wgKyAxLCB0aGlzLmNvdW50Q29scygpIC0gMSk7XG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgYmVmb3JlU2VsZWN0Q29sdW1ucz17KGZyb20sIHRvLCBoaWdobGlnaHQpID0+IHtcbiAqICAgICAvLyBFeHRlbmQgdGhlIGNvbHVtbiBzZWxlY3Rpb24gYnkgb25lIGNvbHVtbiBsZWZ0IGFuZCBvbmUgY29sdW1uIHJpZ2h0LlxuICogICAgIGZyb20uY29sID0gTWF0aC5tYXgoZnJvbS5jb2wgLSAxLCAwKTtcbiAqICAgICB0by5jb2wgPSBNYXRoLm1pbih0by5jb2wgKyAxLCB0aGlzLmNvdW50Q29scygpIC0gMSk7XG4gKiAgIH19XG4gKiAvPlxuICogYGBgXG4gKiA6OjpcbiAqL1xuJ2JlZm9yZVNlbGVjdENvbHVtbnMnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBvbmUgb3IgbW9yZSBjb2x1bW5zIGFyZSBzZWxlY3RlZCAoZS5nLiBkdXJpbmcgbW91c2UgaGVhZGVyIGNsaWNrIG9yIHtAbGluayBDb3JlI3NlbGVjdENvbHVtbnN9IEFQSSBjYWxsKS5cbiAqXG4gKiBAc2luY2UgMTQuMC4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTZWxlY3RDb2x1bW5zXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGZyb20gU2VsZWN0aW9uIHN0YXJ0IGNvb3JkcyBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRvIFNlbGVjdGlvbiBlbmQgY29vcmRzIG9iamVjdC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gaGlnaGxpZ2h0IFNlbGVjdGlvbiBjZWxsIGZvY3VzIGNvb3JkcyBvYmplY3QuXG4gKi9cbidhZnRlclNlbGVjdENvbHVtbnMnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgb25lIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQgKGUuZy4gZHVyaW5nIG1vdXNlIGhlYWRlciBjbGljayBvciB7QGxpbmsgQ29yZSNzZWxlY3RSb3dzfSBBUEkgY2FsbCkuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVNlbGVjdFJvd3NcbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gZnJvbSBTZWxlY3Rpb24gc3RhcnQgY29vcmRzIG9iamVjdC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gdG8gU2VsZWN0aW9uIGVuZCBjb29yZHMgb2JqZWN0LlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBoaWdobGlnaHQgU2VsZWN0aW9uIGNlbGwgZm9jdXMgY29vcmRzIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBiZWZvcmVTZWxlY3RSb3dzOiAoZnJvbSwgdG8sIGhpZ2hsaWdodCkgPT4ge1xuICogICAgIC8vIEV4dGVuZCB0aGUgcm93IHNlbGVjdGlvbiBieSBvbmUgcm93IHVwIGFuZCBvbmUgcm93IGJvdHRvbSBtb3JlLlxuICogICAgIGZyb20ucm93ID0gTWF0aC5tYXgoZnJvbS5yb3cgLSAxLCAwKTtcbiAqICAgICB0by5yb3cgPSBNYXRoLm1pbih0by5yb3cgKyAxLCB0aGlzLmNvdW50Um93cygpIC0gMSk7XG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgYmVmb3JlU2VsZWN0Um93cz17KGZyb20sIHRvLCBoaWdobGlnaHQpID0+IHtcbiAqICAgICAvLyBFeHRlbmQgdGhlIHJvdyBzZWxlY3Rpb24gYnkgb25lIHJvdyB1cCBhbmQgb25lIHJvdyBib3R0b20gbW9yZS5cbiAqICAgICBmcm9tLnJvdyA9IE1hdGgubWF4KGZyb20ucm93IC0gMSwgMCk7XG4gKiAgICAgdG8ucm93ID0gTWF0aC5taW4odG8ucm93ICsgMSwgdGhpcy5jb3VudFJvd3MoKSAtIDEpO1xuICogICB9fVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbidiZWZvcmVTZWxlY3RSb3dzJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgb25lIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQgKGUuZy4gZHVyaW5nIG1vdXNlIGhlYWRlciBjbGljayBvciB7QGxpbmsgQ29yZSNzZWxlY3RSb3dzfSBBUEkgY2FsbCkuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2FmdGVyU2VsZWN0Um93c1xuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBmcm9tIFNlbGVjdGlvbiBzdGFydCBjb29yZHMgb2JqZWN0LlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSB0byBTZWxlY3Rpb24gZW5kIGNvb3JkcyBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGhpZ2hsaWdodCBTZWxlY3Rpb24gY2VsbCBmb2N1cyBjb29yZHMgb2JqZWN0LlxuICovXG4nYWZ0ZXJTZWxlY3RSb3dzJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY2VsbCBtZXRhIGlzIGNoYW5nZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyU2V0Q2VsbE1ldGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHVwZGF0ZWQgbWV0YSBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB1cGRhdGVkIG1ldGEgdmFsdWUuXG4gKi9cbidhZnRlclNldENlbGxNZXRhJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY2VsbCBtZXRhIGlzIHJlbW92ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyUmVtb3ZlQ2VsbE1ldGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlbW92ZWQgbWV0YSBrZXkuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHdoaWNoIHdhcyB1bmRlciByZW1vdmVkIGtleSBvZiBjZWxsIG1ldGEuXG4gKi9cbidhZnRlclJlbW92ZUNlbGxNZXRhJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY2VsbCBkYXRhIHdhcyBjaGFuZ2VkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclNldERhdGFBdENlbGxcbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQW4gYXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBjb2x1bW4sIG9sZFZhbHVlLCB2YWx1ZV0sIC4uLl1gLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9ldmVudHMtYW5kLWhvb2tzL2V2ZW50cy1hbmQtaG9va3MubWQjZGVmaW5pdGlvbi1mb3Itc291cmNlLWFyZ3VtZW50KSkuXG4gKi9cbidhZnRlclNldERhdGFBdENlbGwnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBjZWxsIGRhdGEgd2FzIGNoYW5nZWQuXG4gKiBDYWxsZWQgb25seSB3aGVuIFtgc2V0RGF0YUF0Um93UHJvcGBdKEAvYXBpL2NvcmUubWQjc2V0ZGF0YWF0cm93cHJvcCkgd2FzIGV4ZWN1dGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclNldERhdGFBdFJvd1Byb3BcbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQW4gYXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBwcm9wLCBvbGRWYWx1ZSwgdmFsdWVdLCAuLi5dYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICovXG4nYWZ0ZXJTZXREYXRhQXRSb3dQcm9wJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgY2VsbCBzb3VyY2UgZGF0YSB3YXMgY2hhbmdlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsXG4gKiBAc2luY2UgOC4wLjBcbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQW4gYXJyYXkgb2YgY2hhbmdlcyBpbiBmb3JtYXQgYFtbcm93LCBjb2x1bW4sIG9sZFZhbHVlLCB2YWx1ZV0sIC4uLl1gLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbC5cbiAqL1xuJ2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCcsXG4vKipcbiAqIEZpcmVkIGFmdGVyIGNhbGxpbmcgdGhlIFtgdXBkYXRlU2V0dGluZ3NgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBtZXRob2QuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyVXBkYXRlU2V0dGluZ3NcbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyBOZXcgc2V0dGluZ3Mgb2JqZWN0LlxuICovXG4nYWZ0ZXJVcGRhdGVTZXR0aW5ncycsXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogQSBwbHVnaW4gaG9vayBleGVjdXRlZCBhZnRlciB2YWxpZGF0b3IgZnVuY3Rpb24sIG9ubHkgaWYgdmFsaWRhdG9yIGZ1bmN0aW9uIGlzIGRlZmluZWQuXG4gKiBWYWxpZGF0aW9uIHJlc3VsdCBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluYXRlIGlmIHZhbGlkYXRpb24gcGFzc2VkIHN1Y2Nlc3NmdWxseSBvciBub3QuXG4gKlxuICogX19SZXR1cm5pbmcgZmFsc2UgZnJvbSB0aGUgY2FsbGJhY2sgd2lsbCBtYXJrIHRoZSBjZWxsIGFzIGludmFsaWRfXy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJWYWxpZGF0ZVxuICogQHBhcmFtIHtib29sZWFufSBpc1ZhbGlkIGB0cnVlYCBpZiB2YWxpZCwgYGZhbHNlYCBpZiBub3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSBpbiBxdWVzdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gcHJvcCBQcm9wZXJ0eSBuYW1lIC8gdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICogQHJldHVybnMge3VuZGVmaW5lZCB8IGJvb2xlYW59IElmIGBmYWxzZWAgdGhlIGNlbGwgd2lsbCBiZSBtYXJrZWQgYXMgaW52YWxpZCwgYHRydWVgIG90aGVyd2lzZS5cbiAqL1xuJ2FmdGVyVmFsaWRhdGUnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgc3VjY2Vzc2Z1bCBjaGFuZ2Ugb2YgbGFuZ3VhZ2UgKHdoZW4gcHJvcGVyIGxhbmd1YWdlIGNvZGUgd2FzIHNldCkuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUxhbmd1YWdlQ2hhbmdlXG4gKiBAc2luY2UgMC4zNS4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2VDb2RlIE5ldyBsYW5ndWFnZSBjb2RlLlxuICovXG4nYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBzdWNjZXNzZnVsIGNoYW5nZSBvZiBsYW5ndWFnZSAod2hlbiBwcm9wZXIgbGFuZ3VhZ2UgY29kZSB3YXMgc2V0KS5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJMYW5ndWFnZUNoYW5nZVxuICogQHNpbmNlIDAuMzUuMFxuICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlQ29kZSBOZXcgbGFuZ3VhZ2UgY29kZS5cbiAqL1xuJ2FmdGVyTGFuZ3VhZ2VDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQXV0b2ZpbGx9IHBsdWdpbiBiZWZvcmUgcG9wdWxhdGluZyB0aGUgZGF0YSBpbiB0aGUgYXV0b2ZpbGwgZmVhdHVyZS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW5cbiAqIHtAbGluayBPcHRpb25zI2ZpbGxIYW5kbGV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVBdXRvZmlsbFxuICogQHBhcmFtIHtBcnJheVtdfSBzZWxlY3Rpb25EYXRhIERhdGEgdGhlIGF1dG9maWxsIG9wZXJhdGlvbiB3aWxsIHN0YXJ0IGZyb20uXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gc291cmNlUmFuZ2UgVGhlIHJhbmdlIHZhbHVlcyB3aWxsIGJlIGZpbGxlZCBmcm9tLlxuICogQHBhcmFtIHtDZWxsUmFuZ2V9IHRhcmdldFJhbmdlIFRoZSByYW5nZSBuZXcgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGludG8uXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIERlY2xhcmVzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGF1dG9maWxsLiBQb3NzaWJsZSB2YWx1ZXM6IGB1cGAsIGBkb3duYCwgYGxlZnRgLCBgcmlnaHRgLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufEFycmF5W119IElmIGZhbHNlLCB0aGUgb3BlcmF0aW9uIGlzIGNhbmNlbGxlZC4gSWYgYXJyYXkgb2YgYXJyYXlzLCB0aGUgcmV0dXJuZWQgZGF0YVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGJlIHBhc3NlZCBpbnRvIFtgcG9wdWxhdGVGcm9tQXJyYXlgXShAL2FwaS9jb3JlLm1kI3BvcHVsYXRlZnJvbWFycmF5KSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGF1dG9maWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ29yaXRobSdzIHJlc3VsdC5cbiAqL1xuJ2JlZm9yZUF1dG9maWxsJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIEF1dG9maWxsfSBwbHVnaW4gYWZ0ZXIgcG9wdWxhdGluZyB0aGUgZGF0YSBpbiB0aGUgYXV0b2ZpbGwgZmVhdHVyZS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW5cbiAqIHtAbGluayBPcHRpb25zI2ZpbGxIYW5kbGV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckF1dG9maWxsXG4gKiBAc2luY2UgOC4wLjBcbiAqIEBwYXJhbSB7QXJyYXlbXX0gZmlsbERhdGEgVGhlIGRhdGEgdGhhdCB3YXMgdXNlZCB0byBmaWxsIHRoZSBgdGFyZ2V0UmFuZ2VgLiBJZiBgYmVmb3JlQXV0b2ZpbGxgIHdhcyB1c2VkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmV0dXJuZWQgYFtbXV1gLCB0aGlzIHdpbGwgYmUgdGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGZyb20gYGJlZm9yZUF1dG9maWxsYC5cbiAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBzb3VyY2VSYW5nZSBUaGUgcmFuZ2UgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGZyb20uXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gdGFyZ2V0UmFuZ2UgVGhlIHJhbmdlIG5ldyB2YWx1ZXMgd2lsbCBiZSBmaWxsZWQgaW50by5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3Rpb24gRGVjbGFyZXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYXV0b2ZpbGwuIFBvc3NpYmxlIHZhbHVlczogYHVwYCwgYGRvd25gLCBgbGVmdGAsIGByaWdodGAuXG4gKi9cbidhZnRlckF1dG9maWxsJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIGFsaWduaW5nIHRoZSBjZWxsIGNvbnRlbnRzLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDZWxsQWxpZ25tZW50XG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGVCZWZvcmUgQW4gb2JqZWN0IHdpdGggY2xhc3MgbmFtZXMgZGVmaW5pbmcgdGhlIGNlbGwgYWxpZ25tZW50LlxuICogQHBhcmFtIHtDZWxsUmFuZ2VbXX0gcmFuZ2UgQW4gYXJyYXkgb2YgYENlbGxSYW5nZWAgY29vcmRpbmF0ZXMgd2hlcmUgdGhlIGFsaWdubWVudCB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUeXBlIG9mIHRoZSBhbGlnbm1lbnQgLSBlaXRoZXIgYGhvcml6b250YWxgIG9yIGB2ZXJ0aWNhbGAuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25tZW50Q2xhc3MgU3RyaW5nIGRlZmluaW5nIHRoZSBhbGlnbm1lbnQgY2xhc3MgYWRkZWQgdG8gdGhlIGNlbGwuXG4gKiBQb3NzaWJsZSB2YWx1ZXM6IGBodExlZnRgICwgYGh0Q2VudGVyYCwgYGh0UmlnaHRgLCBgaHRKdXN0aWZ5YCwgYGh0VG9wYCwgYGh0TWlkZGxlYCwgYGh0Qm90dG9tYC5cbiAqL1xuJ2JlZm9yZUNlbGxBbGlnbm1lbnQnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgb25lIG9yIG1vcmUgY2VsbHMgYXJlIGNoYW5nZWQuXG4gKlxuICogVXNlIHRoaXMgaG9vayB0byBzaWxlbnRseSBhbHRlciB0aGUgdXNlcidzIGNoYW5nZXMgYmVmb3JlIEhhbmRzb250YWJsZSByZS1yZW5kZXJzLlxuICpcbiAqIFRvIGlnbm9yZSB0aGUgdXNlcidzIGNoYW5nZXMsIHVzZSBhIG51bGxpZmllZCBhcnJheSBvciByZXR1cm4gYGZhbHNlYC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ2hhbmdlXG4gKiBAcGFyYW0ge0FycmF5W119IGNoYW5nZXMgMkQgYXJyYXkgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBlZGl0ZWQgY2VsbHMgYFtbcm93LCBwcm9wLCBvbGRWYWwsIG5ld1ZhbF0sIC4uLl1gLiBgcm93YCBpcyBhIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWQgfCBib29sZWFufSBJZiBgZmFsc2VgIGFsbCBjaGFuZ2VzIHdlcmUgY2FuY2VsbGVkLCBgdHJ1ZWAgb3RoZXJ3aXNlLlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogLy8gdG8gYWx0ZXIgYSBzaW5nbGUgY2hhbmdlLCBvdmVyd3JpdGUgdGhlIHZhbHVlIHdpdGggYGNoYW5nZXNbaV1bM11gXG4gKiBuZXcgSGFuZHNvbnRhYmxlKGVsZW1lbnQsIHtcbiAqICAgYmVmb3JlQ2hhbmdlOiAoY2hhbmdlcywgc291cmNlKSA9PiB7XG4gKiAgICAgLy8gW1tyb3csIHByb3AsIG9sZFZhbCwgbmV3VmFsXSwgLi4uXVxuICogICAgIGNoYW5nZXNbMF1bM10gPSAxMDtcbiAqICAgfVxuICogfSk7XG4gKlxuICogLy8gdG8gaWdub3JlIGEgc2luZ2xlIGNoYW5nZSwgc2V0IGBjaGFuZ2VzW2ldYCB0byBgbnVsbGBcbiAqIC8vIG9yIHJlbW92ZSBgY2hhbmdlc1tpXWAgZnJvbSB0aGUgYXJyYXksIGJ5IHVzaW5nIGBjaGFuZ2VzLnNwbGljZShpLCAxKWBcbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBiZWZvcmVDaGFuZ2U6IChjaGFuZ2VzLCBzb3VyY2UpID0+IHtcbiAqICAgICAvLyBbW3JvdywgcHJvcCwgb2xkVmFsLCBuZXdWYWxdLCAuLi5dXG4gKiAgICAgY2hhbmdlc1swXSA9IG51bGw7XG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIC8vIHRvIGlnbm9yZSBhbGwgY2hhbmdlcywgcmV0dXJuIGBmYWxzZWBcbiAqIC8vIG9yIHNldCB0aGUgYXJyYXkncyBsZW5ndGggdG8gMCwgYnkgdXNpbmcgYGNoYW5nZXMubGVuZ3RoID0gMGBcbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBiZWZvcmVDaGFuZ2U6IChjaGFuZ2VzLCBzb3VyY2UpID0+IHtcbiAqICAgICAvLyBbW3JvdywgcHJvcCwgb2xkVmFsLCBuZXdWYWxdLCAuLi5dXG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9XG4gKiB9KTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIC8vIHRvIGFsdGVyIGEgc2luZ2xlIGNoYW5nZSwgb3ZlcndyaXRlIHRoZSBkZXNpcmVkIHZhbHVlIHdpdGggYGNoYW5nZXNbaV1bM11gXG4gKiA8SG90VGFibGVcbiAqICAgYmVmb3JlQ2hhbmdlPXsoY2hhbmdlcywgc291cmNlKSA9PiB7XG4gKiAgICAgLy8gW1tyb3csIHByb3AsIG9sZFZhbCwgbmV3VmFsXSwgLi4uXVxuICogICAgIGNoYW5nZXNbMF1bM10gPSAxMDtcbiAqICAgfX1cbiAqIC8+XG4gKlxuICogLy8gdG8gaWdub3JlIGEgc2luZ2xlIGNoYW5nZSwgc2V0IGBjaGFuZ2VzW2ldYCB0byBgbnVsbGBcbiAqIC8vIG9yIHJlbW92ZSBgY2hhbmdlc1tpXWAgZnJvbSB0aGUgYXJyYXksIGJ5IHVzaW5nIGNoYW5nZXMuc3BsaWNlKGksIDEpLlxuICogPEhvdFRhYmxlXG4gKiAgIGJlZm9yZUNoYW5nZT17KGNoYW5nZXMsIHNvdXJjZSkgPT4ge1xuICogICAgIC8vIFtbcm93LCBwcm9wLCBvbGRWYWwsIG5ld1ZhbF0sIC4uLl1cbiAqICAgICBjaGFuZ2VzWzBdID0gbnVsbDtcbiAqICAgfX1cbiAqIC8+XG4gKlxuICogLy8gdG8gaWdub3JlIGFsbCBjaGFuZ2VzLCByZXR1cm4gYGZhbHNlYFxuICogLy8gb3Igc2V0IHRoZSBhcnJheSdzIGxlbmd0aCB0byAwIChgY2hhbmdlcy5sZW5ndGggPSAwYClcbiAqIDxIb3RUYWJsZVxuICogICBiZWZvcmVDaGFuZ2U9eyhjaGFuZ2VzLCBzb3VyY2UpID0+IHtcbiAqICAgICAvLyBbW3JvdywgcHJvcCwgb2xkVmFsLCBuZXdWYWxdLCAuLi5dXG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9fVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbidiZWZvcmVDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCByaWdodCBiZWZvcmUgcmVuZGVyaW5nIHRoZSBjaGFuZ2VzLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDaGFuZ2VSZW5kZXJcbiAqIEBwYXJhbSB7QXJyYXlbXX0gY2hhbmdlcyBBcnJheSBpbiBmb3JtIG9mIGBbcm93LCBwcm9wLCBvbGRWYWx1ZSwgbmV3VmFsdWVdYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvZXZlbnRzLWFuZC1ob29rcy9ldmVudHMtYW5kLWhvb2tzLm1kI2RlZmluaXRpb24tZm9yLXNvdXJjZS1hcmd1bWVudCkpLlxuICovXG4nYmVmb3JlQ2hhbmdlUmVuZGVyJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIGRyYXdpbmcgdGhlIGJvcmRlcnMuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZURyYXdCb3JkZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBjb3JuZXJzIEFycmF5IHNwZWNpZnlpbmcgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGJvcmRlcnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9yZGVyQ2xhc3NOYW1lIFNwZWNpZmllcyB0aGUgYm9yZGVyIGNsYXNzIG5hbWUuXG4gKi9cbidiZWZvcmVEcmF3Qm9yZGVycycsXG4vKipcbiAqIEZpcmVkIGJlZm9yZSBnZXR0aW5nIGNlbGwgc2V0dGluZ3MuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUdldENlbGxNZXRhXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNlbGwncyBwcm9wZXJ0aWVzLlxuICovXG4nYmVmb3JlR2V0Q2VsbE1ldGEnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgY2VsbCBtZXRhIGlzIHJlbW92ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJlbW92ZUNlbGxNZXRhXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZW1vdmVkIG1ldGEga2V5LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB3aGljaCBpcyB1bmRlciByZW1vdmVkIGtleSBvZiBjZWxsIG1ldGEuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlUmVtb3ZlQ2VsbE1ldGEnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBpcyBpbml0aWF0ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUluaXRcbiAqL1xuJ2JlZm9yZUluaXQnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgdGhlIFdhbGtvbnRhYmxlIGluc3RhbmNlIGlzIGluaXRpYXRlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlSW5pdFdhbGtvbnRhYmxlXG4gKiBAcGFyYW0ge29iamVjdH0gd2Fsa29udGFibGVDb25maWcgV2Fsa29udGFibGUgY29uZmlndXJhdGlvbiBvYmplY3QuXG4gKi9cbidiZWZvcmVJbml0V2Fsa29udGFibGUnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgSGFuZHNvbnRhYmxlJ3MgW2BkYXRhYF0oQC9hcGkvb3B0aW9ucy5tZCNkYXRhKVxuICogZ2V0cyBtb2RpZmllZCBieSB0aGUgW2Bsb2FkRGF0YSgpYF0oQC9hcGkvY29yZS5tZCNsb2FkZGF0YSkgbWV0aG9kXG4gKiBvciB0aGUgW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgbWV0aG9kLlxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0JpbmRpbmcgdG8gZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQpXG4gKiAtIFtTYXZpbmcgZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL3NhdmluZy1kYXRhL3NhdmluZy1kYXRhLm1kKVxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVMb2FkRGF0YVxuICogQHNpbmNlIDguMC4wXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2VEYXRhIEFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cyksIG9yIGFuIFthcnJheSBvZiBvYmplY3RzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNhcnJheS1vZi1vYmplY3RzKSwgdGhhdCBjb250YWlucyBIYW5kc29udGFibGUncyBkYXRhXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRpYWxMb2FkIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXRhIHdhcyBsb2FkZWQgYXQgSGFuZHNvbnRhYmxlJ3MgaW5pdGlhbGl6YXRpb24gKGB0cnVlYCkgb3IgbGF0ZXIgKGBmYWxzZWApXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2Ugb2YgdGhlIGNhbGxcbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgdXNlZCBhcyBIYW5kc29udGFibGUncyBuZXcgZGF0YXNldC5cbiAqL1xuJ2JlZm9yZUxvYWREYXRhJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIHRoZSBbYHVwZGF0ZURhdGEoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlZGF0YSkgbWV0aG9kXG4gKiBtb2RpZmllcyBIYW5kc29udGFibGUncyBbYGRhdGFgXShAL2FwaS9vcHRpb25zLm1kI2RhdGEpLlxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0JpbmRpbmcgdG8gZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2JpbmRpbmctdG8tZGF0YS9iaW5kaW5nLXRvLWRhdGEubWQpXG4gKiAtIFtTYXZpbmcgZGF0YV0oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL3NhdmluZy1kYXRhL3NhdmluZy1kYXRhLm1kKVxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVVcGRhdGVEYXRhXG4gKiBAc2luY2UgMTEuMS4wXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2VEYXRhIEFuIFthcnJheSBvZiBhcnJheXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9iaW5kaW5nLXRvLWRhdGEvYmluZGluZy10by1kYXRhLm1kI2FycmF5LW9mLWFycmF5cyksIG9yIGFuIFthcnJheSBvZiBvYmplY3RzXShAL2d1aWRlcy9nZXR0aW5nLXN0YXJ0ZWQvYmluZGluZy10by1kYXRhL2JpbmRpbmctdG8tZGF0YS5tZCNhcnJheS1vZi1vYmplY3RzKSwgdGhhdCBjb250YWlucyBIYW5kc29udGFibGUncyBkYXRhXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGluaXRpYWxMb2FkIEEgZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBkYXRhIHdhcyBsb2FkZWQgYXQgSGFuZHNvbnRhYmxlJ3MgaW5pdGlhbGl6YXRpb24gKGB0cnVlYCkgb3IgbGF0ZXIgKGBmYWxzZWApXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIFRoZSBzb3VyY2Ugb2YgdGhlIGNhbGxcbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgdXNlZCBhcyBIYW5kc29udGFibGUncyBuZXcgZGF0YXNldC5cbiAqL1xuJ2JlZm9yZVVwZGF0ZURhdGEnLFxuLyoqXG4gKiBIb29rIGZpcmVkIGJlZm9yZSBga2V5ZG93bmAgZXZlbnQgaXMgaGFuZGxlZC4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcCBkZWZhdWx0IGtleSBiaW5kaW5ncy5cbiAqXG4gKiBfX05vdGVfXzogVG8gcHJldmVudCBkZWZhdWx0IGJlaGF2aW9yIHlvdSBuZWVkIHRvIGNhbGwgYGZhbHNlYCBpbiB5b3VyIGBiZWZvcmVLZXlEb3duYCBoYW5kbGVyLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVLZXlEb3duXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBPcmlnaW5hbCBET00gZXZlbnQuXG4gKi9cbidiZWZvcmVLZXlEb3duJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHVzZXIgY2xpY2tlZCBhIGNlbGwsIGJ1dCBiZWZvcmUgYWxsIHRoZSBjYWxjdWxhdGlvbnMgcmVsYXRlZCB3aXRoIGl0LlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVPbkNlbGxNb3VzZURvd25cbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBgbW91c2Vkb3duYCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsIGNvb3JkcyBvYmplY3QgY29udGFpbmluZyB0aGUgdmlzdWFsIGNvb3JkaW5hdGVzIG9mIHRoZSBjbGlja2VkIGNlbGwuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBURCBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRyb2xsZXIgQW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBgcm93YCwgYGNvbHVtbmAgYW5kIGBjZWxsYC4gRWFjaCBwcm9wZXJ0eSBjb250YWluc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBib29sZWFuIHZhbHVlIHRoYXQgYWxsb3dzIG9yIGRpc2FsbG93cyBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIGZvciB0aGF0IHBhcnRpY3VsYXIgYXJlYS5cbiAqL1xuJ2JlZm9yZU9uQ2VsbE1vdXNlRG93bicsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSB1c2VyIGNsaWNrZWQgYSBjZWxsLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVPbkNlbGxNb3VzZVVwXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgYG1vdXNldXBgIGV2ZW50IG9iamVjdC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIENlbGwgY29vcmRzIG9iamVjdCBjb250YWluaW5nIHRoZSB2aXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNsaWNrZWQgY2VsbC5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFREIGVsZW1lbnQuXG4gKi9cbidiZWZvcmVPbkNlbGxNb3VzZVVwJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHVzZXIgY2xpY2tlZCBhIGNlbGwsIGJ1dCBiZWZvcmUgYWxsIHRoZSBjYWxjdWxhdGlvbnMgcmVsYXRlZCB3aXRoIGl0LlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVPbkNlbGxDb250ZXh0TWVudVxuICogQHNpbmNlIDQuMS4wXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgYGNvbnRleHRtZW51YCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsIGNvb3JkcyBvYmplY3QgY29udGFpbmluZyB0aGUgdmlzdWFsIGNvb3JkaW5hdGVzIG9mIHRoZSBjbGlja2VkIGNlbGwuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBURCBlbGVtZW50LlxuICovXG4nYmVmb3JlT25DZWxsQ29udGV4dE1lbnUnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgdXNlciBtb3ZlZCBjdXJzb3Igb3ZlciBhIGNlbGwsIGJ1dCBiZWZvcmUgYWxsIHRoZSBjYWxjdWxhdGlvbnMgcmVsYXRlZCB3aXRoIGl0LlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVPbkNlbGxNb3VzZU92ZXJcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBgbW91c2VvdmVyYCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsQ29vcmRzIG9iamVjdCBjb250YWluaW5nIHRoZSB2aXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNsaWNrZWQgY2VsbC5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFREIGVsZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBhbGxvd3Mgb3IgZGlzYWxsb3dzIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24gZm9yIHRoYXQgcGFydGljdWxhciBhcmVhLlxuICovXG4nYmVmb3JlT25DZWxsTW91c2VPdmVyJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHVzZXIgbW92ZWQgY3Vyc29yIG91dCBmcm9tIGEgY2VsbCwgYnV0IGJlZm9yZSBhbGwgdGhlIGNhbGN1bGF0aW9ucyByZWxhdGVkIHdpdGggaXQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZU9uQ2VsbE1vdXNlT3V0XG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgYG1vdXNlb3V0YCBldmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsQ29vcmRzIG9iamVjdCBjb250YWluaW5nIHRoZSB2aXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIGxlYXZlZCBjZWxsLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgVEQgZWxlbWVudC5cbiAqL1xuJ2JlZm9yZU9uQ2VsbE1vdXNlT3V0Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIG9uZSBvciBtb3JlIGNvbHVtbnMgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJlbW92ZUNvbFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFZpc3VhbCBpbmRleCBvZiBzdGFydGVyIGNvbHVtbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW1vdW50IG9mIGNvbHVtbnMgdG8gYmUgcmVtb3ZlZC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBoeXNpY2FsQ29sdW1ucyBBbiBhcnJheSBvZiBwaHlzaWNhbCBjb2x1bW5zIHJlbW92ZWQgZnJvbSB0aGUgZGF0YSBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqIEByZXR1cm5zIHsqfGJvb2xlYW59IElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSBhY3Rpb24gaXMgY2FuY2VsZWQuXG4gKi9cbidiZWZvcmVSZW1vdmVDb2wnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIG9uZSBvciBtb3JlIHJvd3MgYXJlIGFib3V0IHRvIGJlIHJlbW92ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJlbW92ZVJvd1xuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFZpc3VhbCBpbmRleCBvZiBzdGFydGVyIHJvdy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW1vdW50IG9mIHJvd3MgdG8gYmUgcmVtb3ZlZC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBoeXNpY2FsUm93cyBBbiBhcnJheSBvZiBwaHlzaWNhbCByb3dzIHJlbW92ZWQgZnJvbSB0aGUgZGF0YSBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqIEByZXR1cm5zIHsqfGJvb2xlYW59IElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSBhY3Rpb24gaXMgY2FuY2VsZWQuXG4gKi9cbidiZWZvcmVSZW1vdmVSb3cnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgSGFuZHNvbnRhYmxlJ3Mgdmlldy1yZW5kZXJpbmcgZW5naW5lIGlzIHJlbmRlcmVkLlxuICpcbiAqIF9fTm90ZTpfXyBJbiBIYW5kc29udGFibGUgOS54IGFuZCBlYXJsaWVyLCB0aGUgYGJlZm9yZVZpZXdSZW5kZXJgIGhvb2sgd2FzIG5hbWVkIGBiZWZvcmVSZW5kZXJgLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVWaWV3UmVuZGVyXG4gKiBAc2luY2UgMTAuMC4wXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yY2VkIElmIHNldCB0byBgdHJ1ZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgYSBjaGFuZ2Ugb2Ygc2V0dGluZ3MsIGEgY2hhbmdlIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIG9yIGEgbG9naWMgdGhhdCBuZWVkcyBhIGZ1bGwgSGFuZHNvbnRhYmxlIHJlbmRlciBjeWNsZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgc2Nyb2xsaW5nIG9yIG1vdmluZyB0aGUgc2VsZWN0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IHNraXBSZW5kZXIgT2JqZWN0IHdpdGggYHNraXBSZW5kZXJgIHByb3BlcnR5LCBpZiBpdCBpcyBzZXQgdG8gYHRydWUgYCB0aGUgbmV4dCByZW5kZXJpbmcgY3ljbGUgd2lsbCBiZSBza2lwcGVkLlxuICovXG4nYmVmb3JlVmlld1JlbmRlcicsXG4vKipcbiAqIEZpcmVkIGFmdGVyIEhhbmRzb250YWJsZSdzIHZpZXctcmVuZGVyaW5nIGVuZ2luZSBpcyByZW5kZXJlZCxcbiAqIGJ1dCBiZWZvcmUgcmVkcmF3aW5nIHRoZSBzZWxlY3Rpb24gYm9yZGVycyBhbmQgYmVmb3JlIHNjcm9sbCBzeW5jaW5nLlxuICpcbiAqIF9fTm90ZTpfXyBJbiBIYW5kc29udGFibGUgOS54IGFuZCBlYXJsaWVyLCB0aGUgYGFmdGVyVmlld1JlbmRlcmAgaG9vayB3YXMgbmFtZWQgYGFmdGVyUmVuZGVyYC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJWaWV3UmVuZGVyXG4gKiBAc2luY2UgMTAuMC4wXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yY2VkIElmIHNldCB0byBgdHJ1ZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgYSBjaGFuZ2Ugb2Ygc2V0dGluZ3MsIGEgY2hhbmdlIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIG9yIGEgbG9naWMgdGhhdCBuZWVkcyBhIGZ1bGwgSGFuZHNvbnRhYmxlIHJlbmRlciBjeWNsZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgc2Nyb2xsaW5nIG9yIG1vdmluZyB0aGUgc2VsZWN0aW9uLlxuICovXG4nYWZ0ZXJWaWV3UmVuZGVyJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIEhhbmRzb250YWJsZSdzIHZpZXctcmVuZGVyaW5nIGVuZ2luZSB1cGRhdGVzIHRoZSB2aWV3LlxuICpcbiAqIFRoZSBgYmVmb3JlUmVuZGVyYCBldmVudCBpcyBmaXJlZCByaWdodCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlXG4gKiBidXNpbmVzcyBsb2dpYyBpcyBleGVjdXRlZCBhbmQgcmlnaHQgYmVmb3JlIHRoZSByZW5kZXJpbmcgZW5naW5lIHN0YXJ0cyBjYWxsaW5nXG4gKiB0aGUgQ29yZSBsb2dpYywgcmVuZGVyZXJzLCBjZWxsIG1ldGEgb2JqZWN0cyBldGMuIHRvIHVwZGF0ZSB0aGUgdmlldy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlUmVuZGVyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yY2VkIElmIHNldCB0byBgdHJ1ZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgYSBjaGFuZ2Ugb2Ygc2V0dGluZ3MsIGEgY2hhbmdlIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIG9yIGEgbG9naWMgdGhhdCBuZWVkcyBhIGZ1bGwgSGFuZHNvbnRhYmxlIHJlbmRlciBjeWNsZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgc2Nyb2xsaW5nIG9yIG1vdmluZyB0aGUgc2VsZWN0aW9uLlxuICovXG4nYmVmb3JlUmVuZGVyJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgSGFuZHNvbnRhYmxlJ3Mgdmlldy1yZW5kZXJpbmcgZW5naW5lIHVwZGF0ZXMgdGhlIHZpZXcuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyUmVuZGVyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRm9yY2VkIElmIHNldCB0byBgdHJ1ZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgYSBjaGFuZ2Ugb2Ygc2V0dGluZ3MsIGEgY2hhbmdlIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsIG9yIGEgbG9naWMgdGhhdCBuZWVkcyBhIGZ1bGwgSGFuZHNvbnRhYmxlIHJlbmRlciBjeWNsZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc2V0IHRvIGBmYWxzZWAsIHRoZSByZW5kZXJpbmcgZ2V0cyB0cmlnZ2VyZWQgYnkgc2Nyb2xsaW5nIG9yIG1vdmluZyB0aGUgc2VsZWN0aW9uLlxuICovXG4nYWZ0ZXJSZW5kZXInLFxuLyoqXG4gKiBXaGVuIHRoZSBmb2N1cyBwb3NpdGlvbiBpcyBtb3ZlZCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyByb3cgY2F1c2VkIGJ5IHRoZSB7QGxpbmsgT3B0aW9ucyNhdXRvV3JhcFJvd30gb3B0aW9uXG4gKiB0aGUgaG9vayBpcyB0cmlnZ2VyZWQuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJvd1dyYXBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNXcmFwRW5hYmxlZCBUZWxscyB3aGV0aGVyIHRoZSByb3cgd3JhcHBpbmcgaXMgZ29pbmcgdG8gaGFwcGVuLlxuICogVGhlcmUgbWF5IGJlIHNpdHVhdGlvbnMgd2hlcmUgdGhlIG9wdGlvbiBkb2VzIG5vdCB3b3JrIGV2ZW4gdGhvdWdoIGl0IGlzIGVuYWJsZWQuXG4gKiBUaGlzIGlzIGR1ZSB0byB0aGUgcHJpb3JpdHkgb2Ygb3RoZXIgb3B0aW9ucyB0aGF0IG1heSBibG9jayB0aGUgZmVhdHVyZS5cbiAqIEZvciBleGFtcGxlLCB3aGVuIHRoZSB7QGxpbmsgT3B0aW9ucyNtaW5TcGFyZUNvbHN9IGlzIGRlZmluZWQsIHRoZSB7QGxpbmsgT3B0aW9ucyNhdXRvV3JhcFJvd30gb3B0aW9uIGlzIG5vdCBjaGVja2VkLlxuICogVGh1cywgcm93IHdyYXBwaW5nIGlzIG9mZi5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gbmV3Q29vcmRzIFRoZSBuZXcgZm9jdXMgcG9zaXRpb24uIEl0IGlzIGFuIG9iamVjdCB3aXRoIGtleXMgYHJvd2AgYW5kIGBjb2xgLCB3aGVyZSBhIHZhbHVlIG9mIGAtMWAgaW5kaWNhdGVzIGEgaGVhZGVyLlxuICogQHBhcmFtIHtib29sZWFufSBpc0ZsaXBwZWQgYHRydWVgIGlmIHRoZSByb3cgaW5kZXggd2FzIGZsaXBwZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogRmxpcHBlZCBpbmRleCBtZWFucyB0aGF0IHRoZSB1c2VyIHJlYWNoZWQgdGhlIGxhc3Qgcm93IGFuZCB0aGUgZm9jdXMgaXMgbW92ZWQgdG8gdGhlIGZpcnN0IHJvdyBvciB2aWNlIHZlcnNhLlxuICovXG4nYmVmb3JlUm93V3JhcCcsXG4vKipcbiAqIFdoZW4gdGhlIGZvY3VzIHBvc2l0aW9uIGlzIG1vdmVkIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGNvbHVtbiBjYXVzZWQgYnkgdGhlIHtAbGluayBPcHRpb25zI2F1dG9XcmFwQ29sfSBvcHRpb25cbiAqIHRoZSBob29rIGlzIHRyaWdnZXJlZC5cbiAqXG4gKiBAc2luY2UgMTQuMC4wXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ29sdW1uV3JhcFxuICogQHBhcmFtIHtib29sZWFufSBpc1dyYXBFbmFibGVkIFRlbGxzIHdoZXRoZXIgdGhlIGNvbHVtbiB3cmFwcGluZyBpcyBnb2luZyB0byBoYXBwZW4uXG4gKiBUaGVyZSBtYXkgYmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3B0aW9uIGRvZXMgbm90IHdvcmsgZXZlbiB0aG91Z2ggaXQgaXMgZW5hYmxlZC5cbiAqIFRoaXMgaXMgZHVlIHRvIHRoZSBwcmlvcml0eSBvZiBvdGhlciBvcHRpb25zIHRoYXQgbWF5IGJsb2NrIHRoZSBmZWF0dXJlLlxuICogRm9yIGV4YW1wbGUsIHdoZW4gdGhlIHtAbGluayBPcHRpb25zI21pblNwYXJlUm93c30gaXMgZGVmaW5lZCwgdGhlIHtAbGluayBPcHRpb25zI2F1dG9XcmFwQ29sfSBvcHRpb24gaXMgbm90IGNoZWNrZWQuXG4gKiBUaHVzLCBjb2x1bW4gd3JhcHBpbmcgaXMgb2ZmLlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBuZXdDb29yZHMgVGhlIG5ldyBmb2N1cyBwb3NpdGlvbi4gSXQgaXMgYW4gb2JqZWN0IHdpdGgga2V5cyBgcm93YCBhbmQgYGNvbGAsIHdoZXJlIGEgdmFsdWUgb2YgYC0xYCBpbmRpY2F0ZXMgYSBoZWFkZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRmxpcHBlZCBgdHJ1ZWAgaWYgdGhlIGNvbHVtbiBpbmRleCB3YXMgZmxpcHBlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBGbGlwcGVkIGluZGV4IG1lYW5zIHRoYXQgdGhlIHVzZXIgcmVhY2hlZCB0aGUgbGFzdCBjb2x1bW4gYW5kIHRoZSBmb2N1cyBpcyBtb3ZlZCB0byB0aGUgZmlyc3QgY29sdW1uIG9yIHZpY2UgdmVyc2EuXG4gKi9cbidiZWZvcmVDb2x1bW5XcmFwJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIGNlbGwgbWV0YSBpcyBjaGFuZ2VkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVTZXRDZWxsTWV0YVxuICogQHNpbmNlIDguMC4wXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSB1cGRhdGVkIG1ldGEga2V5LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdXBkYXRlZCBtZXRhIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW58dW5kZWZpbmVkfSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlU2V0Q2VsbE1ldGEnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgc2V0dGluZyBmb2N1cyBzZWxlY3Rpb24uXG4gKlxuICogQHNpbmNlIDE0LjMuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVNlbGVjdGlvbkZvY3VzU2V0XG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsQ29vcmRzIGluc3RhbmNlLlxuICovXG4nYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgc2V0dGluZyByYW5nZSBpcyBzdGFydGVkIGJ1dCBub3QgZmluaXNoZWQgeWV0LlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVTZXRSYW5nZVN0YXJ0T25seVxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgYENlbGxDb29yZHNgIGluc3RhbmNlLlxuICovXG4nYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHknLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgc2V0dGluZyByYW5nZSBpcyBzdGFydGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVTZXRSYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UuXG4gKi9cbidiZWZvcmVTZXRSYW5nZVN0YXJ0Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIHNldHRpbmcgcmFuZ2UgaXMgZW5kZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVNldFJhbmdlRW5kXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBgQ2VsbENvb3Jkc2AgaW5zdGFuY2UuXG4gKi9cbidiZWZvcmVTZXRSYW5nZUVuZCcsXG4vKipcbiAqIEZpcmVkIGJlZm9yZSBhcHBseWluZyBzZWxlY3Rpb24gY29vcmRpbmF0ZXMgdG8gdGhlIHJlbmRlcmFibGUgY29vcmRpbmF0ZXMgZm9yIFdhbGtvbnRhYmxlIChyZW5kZXJpbmcgZW5naW5lKS5cbiAqIEl0IG9jY3VycyBldmVuIHdoZW4gY2VsbCBjb29yZGluYXRlcyByZW1haW4gdW5jaGFuZ2VkIGFuZCBhY3RpdmF0ZXMgZHVyaW5nIGNlbGwgc2VsZWN0aW9uIGFuZCBkcmFnIHNlbGVjdGlvbi5cbiAqIFRoZSBiZWhhdmlvciBvZiBTaGlmdCtUYWIgZGlmZmVycyBmcm9tIEFycm93IExlZnQgd2hlbiB0aGVyZSdzIG5vIGZ1cnRoZXIgbW92ZW1lbnQgcG9zc2libGUuXG4gKlxuICogQHNpbmNlIDE0LjAuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldFxuICovXG4nYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0Jyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIHRoZSBsb2dpYyBvZiBoYW5kbGluZyBhIHRvdWNoIHNjcm9sbCwgd2hlbiB1c2VyIHN0YXJ0ZWQgc2Nyb2xsaW5nIG9uIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVRvdWNoU2Nyb2xsXG4gKi9cbidiZWZvcmVUb3VjaFNjcm9sbCcsXG4vKipcbiAqIEZpcmVkIGJlZm9yZSBjZWxsIHZhbGlkYXRpb24sIG9ubHkgaWYgdmFsaWRhdG9yIGZ1bmN0aW9uIGlzIGRlZmluZWQuIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgdmFsdWVcbiAqIG9mIGNoYW5nZWQgY2VsbCBiZWZvcmUgaXQgaXMgYXBwbGllZCB0byB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIF9fTm90ZTpfXyB0aGlzIHdpbGwgbm90IGFmZmVjdCB2YWx1ZXMgb2YgY2hhbmdlcy4gVGhpcyB3aWxsIGNoYW5nZSB2YWx1ZSAqT05MWSogZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVZhbGlkYXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIHRoZSBjZWxsLlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBwcm9wIFByb3BlcnR5IG5hbWUgLyBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCNkZWZpbml0aW9uLWZvci1zb3VyY2UtYXJndW1lbnQpKS5cbiAqL1xuJ2JlZm9yZVZhbGlkYXRlJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIGNlbGwgdmFsdWUgaXMgcmVuZGVyZWQgaW50byB0aGUgRE9NICh0aHJvdWdoIHJlbmRlcmVyIGZ1bmN0aW9uKS4gVGhpcyBjYW4gYmUgdXNlZCB0byBtYW5pcHVsYXRlIHRoZVxuICogdmFsdWUgd2hpY2ggaXMgcGFzc2VkIHRvIHRoZSByZW5kZXJlciB3aXRob3V0IG1vZGlmeWluZyB0aGUgcmVuZGVyZXIgaXRzZWxmLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVWYWx1ZVJlbmRlclxuICogQHBhcmFtIHsqfSB2YWx1ZSBDZWxsIHZhbHVlIHRvIHJlbmRlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY2VsbCBwcm9wZXJ0aWVzLlxuICovXG4nYmVmb3JlVmFsdWVSZW5kZXInLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBIYW5kc29udGFibGUgaW5zdGFuY2UgaXMgY29uc3RydWN0ZWQgKHVzaW5nIGBuZXdgIG9wZXJhdG9yKS5cbiAqXG4gKiBAZXZlbnQgSG9va3MjY29uc3RydWN0XG4gKi9cbidjb25zdHJ1Y3QnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBIYW5kc29udGFibGUgaW5zdGFuY2UgaXMgaW5pdGlhdGVkIGJ1dCBiZWZvcmUgdGFibGUgaXMgcmVuZGVyZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2luaXRcbiAqL1xuJ2luaXQnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgY29sdW1uIGhlYWRlciBpbmRleCBpcyBhYm91dCB0byBiZSBtb2RpZmllZCBieSBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlDb2xIZWFkZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBoZWFkZXIgaW5kZXguXG4gKi9cbidtb2RpZnlDb2xIZWFkZXInLFxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgY29sdW1uIHdpZHRoIGlzIGFib3V0IHRvIGJlIG1vZGlmaWVkIGJ5IGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKlxuICogQGV2ZW50IEhvb2tzI21vZGlmeUNvbFdpZHRoXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ3VycmVudCBjb2x1bW4gd2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKi9cbidtb2RpZnlDb2xXaWR0aCcsXG4vKipcbiAqIEZpcmVkIHdoZW4gcmVuZGVyaW5nIHRoZSBsaXN0IG9mIHZhbHVlcyBpbiB0aGUgbXVsdGlwbGUtc2VsZWN0aW9uIGNvbXBvbmVudCBvZiB0aGUgRmlsdGVycyBkcm9wZG93bi5cbiAqIFRoZSBob29rIGFsbG93cyBtb2RpZnlpbmcgdGhlIGRpc3BsYXllZCB2YWx1ZXMgaW4gdGhhdCBjb21wb25lbnQuXG4gKlxuICogQHNpbmNlIDE0LjIuMFxuICogQGV2ZW50IEhvb2tzI21vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gaXRlbSBUaGUgaXRlbSBpbiB0aGUgbGlzdCBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge29iamVjdH0gbWV0YSBUaGUgY2VsbCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuJ21vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlJyxcbi8qKlxuICogRmlyZWQgd2hlbiBmb2N1c2luZyBhIGNlbGwgb3IgYSBoZWFkZXIgZWxlbWVudC4gQWxsb3dzIHJlcGxhY2luZyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2VkIGJ5IHJldHVybmluZyBhXG4gKiBkaWZmZXJlbnQgSFRNTCBlbGVtZW50LlxuICpcbiAqIEBzaW5jZSAxNC4wLjBcbiAqIEBldmVudCBIb29rcyNtb2RpZnlGb2N1c2VkRWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIENvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfSBmb2N1c2VkRWxlbWVudCBUaGUgZWxlbWVudCB0byBiZSBmb2N1c2VkLiBgbnVsbGAgZm9yIGZvY3VzZWRFbGVtZW50IGlzIGludGVuZGVkIHdoZW4gZm9jdXNlZCBjZWxsIGlzIGhpZGRlbi5cbiAqL1xuJ21vZGlmeUZvY3VzZWRFbGVtZW50Jyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIHJvdyBoZWFkZXIgaW5kZXggaXMgYWJvdXQgdG8gYmUgbW9kaWZpZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjbW9kaWZ5Um93SGVhZGVyXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaGVhZGVyIGluZGV4LlxuICovXG4nbW9kaWZ5Um93SGVhZGVyJyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIHJvdyBoZWlnaHQgaXMgYWJvdXQgdG8gYmUgbW9kaWZpZWQgYnkgYSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjbW9kaWZ5Um93SGVpZ2h0XG4gKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IFJvdyBoZWlnaHQuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKi9cbidtb2RpZnlSb3dIZWlnaHQnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgZGF0YSB3YXMgcmV0cmlldmVkIG9yIG1vZGlmaWVkLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlEYXRhXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZUhvbGRlciBPYmplY3Qgd2hpY2ggY29udGFpbnMgb3JpZ2luYWwgdmFsdWUgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGJ5IG92ZXJ3cml0aW5nIGAudmFsdWVgIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGlvTW9kZSBTdHJpbmcgd2hpY2ggaW5kaWNhdGVzIGZvciB3aGF0IG9wZXJhdGlvbiBob29rIGlzIGZpcmVkIChgZ2V0YCBvciBgc2V0YCkuXG4gKi9cbidtb2RpZnlEYXRhJyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIGRhdGEgd2FzIHJldHJpZXZlZCBvciBtb2RpZmllZCBmcm9tIHRoZSBzb3VyY2UgZGF0YSBzZXQuXG4gKlxuICogQGV2ZW50IEhvb2tzI21vZGlmeVNvdXJjZURhdGFcbiAqIEBzaW5jZSA4LjAuMFxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBQaHlzaWNhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFBoeXNpY2FsIGNvbHVtbiBpbmRleCBvciBwcm9wZXJ0eSBuYW1lLlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlSG9sZGVyIE9iamVjdCB3aGljaCBjb250YWlucyBvcmlnaW5hbCB2YWx1ZSB3aGljaCBjYW4gYmUgbW9kaWZpZWQgYnkgb3ZlcndyaXRpbmcgYC52YWx1ZWAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW9Nb2RlIFN0cmluZyB3aGljaCBpbmRpY2F0ZXMgZm9yIHdoYXQgb3BlcmF0aW9uIGhvb2sgaXMgZmlyZWQgKGBnZXRgIG9yIGBzZXRgKS5cbiAqL1xuJ21vZGlmeVNvdXJjZURhdGEnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIGEgZGF0YSB3YXMgcmV0cmlldmVkIG9yIG1vZGlmaWVkLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlSb3dEYXRhXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAqL1xuJ21vZGlmeVJvd0RhdGEnLFxuLyoqXG4gKiBVc2VkIHRvIG1vZGlmeSB0aGUgY2VsbCBjb29yZGluYXRlcyB3aGVuIHVzaW5nIHRoZSBbYGdldENlbGxgXShAL2FwaS9jb3JlLm1kI2dldGNlbGwpIG1ldGhvZCwgb3BlbmluZyBlZGl0b3IsIGdldHRpbmcgdmFsdWUgZnJvbSB0aGUgZWRpdG9yXG4gKiBhbmQgc2F2aW5nIHZhbHVlcyBmcm9tIHRoZSBjbG9zZWQgZWRpdG9yLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlHZXRDZWxsQ29vcmRzXG4gKiBAc2luY2UgMC4zNi4wXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHRvcG1vc3QgSWYgc2V0IHRvIGB0cnVlYCwgaXQgcmV0dXJucyB0aGUgVEQgZWxlbWVudCBmcm9tIHRoZSB0b3Btb3N0IG92ZXJsYXkuIEZvciBleGFtcGxlLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSB3YW50ZWQgY2VsbCBpcyBpbiB0aGUgcmFuZ2Ugb2YgZml4ZWQgcm93cywgaXQgd2lsbCByZXR1cm4gYSBURCBlbGVtZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0aGUgYHRvcGAgb3ZlcmxheS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8bnVtYmVyW119XG4gKi9cbidtb2RpZnlHZXRDZWxsQ29vcmRzJyxcbi8qKlxuICogVXNlZCB0byBtb2RpZnkgdGhlIGNlbGwgY29vcmRpbmF0ZXMgd2hlbiB0aGUgdGFibGUgaXMgYWN0aXZhdGVkIChnb2luZyBpbnRvIHRoZSBsaXN0ZW4gbW9kZSkuXG4gKlxuICogQGV2ZW50IEhvb2tzI21vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uXG4gKiBAc2luY2UgMTQuMC4wXG4gKiBAcGFyYW0geydmcm9tX2Fib3ZlJyB8ICdmcm9tX2JlbG93J30gdGFiQWN0aXZhdGlvbkRpciBUaGUgYnJvd3NlcnMgVGFiIG5hdmlnYXRpb24gZGlyZWN0aW9uLiBEZXBlbmRpbmcgb25cbiAqIHdoZXRoZXIgdGhlIHVzZXIgYWN0aXZhdGVkIHRoZSB0YWJsZSBmcm9tIHRoZSBlbGVtZW50IGFib3ZlIG9yIGJlbG93LCBhbm90aGVyIGNlbGwgY2FuIGJlIHNlbGVjdGVkLlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSB2aXN1YWxDb29yZHMgVGhlIGNvb3JkcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBzZWxlY3QgYSBjZWxsLlxuICovXG4nbW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24nLFxuLyoqXG4gKiBBbGxvd3MgbW9kaWZ5IHRoZSB2aXN1YWwgcm93IGluZGV4IHRoYXQgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgcm93IGhlYWRlciBlbGVtZW50IChUSCkgYmVmb3JlIGl0J3NcbiAqIGhpZ2hsaWdodGVkIChwcm9wZXIgQ1NTIGNsYXNzIG5hbWVzIGFyZSBhZGRlZCkuIE1vZGlmeWluZyB0aGUgdmlzdWFsIHJvdyBpbmRleCBhbGxvd3MgYnVpbGRpbmcgYSBjdXN0b21cbiAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXN0ZWQgaGVhZGVycyBmZWF0dXJlIG9yIG90aGVyIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBoaWdobGlnaHRpbmcgb3RoZXIgRE9NXG4gKiBlbGVtZW50cyB0aGFuIHRoYXQgdGhlIHJlbmRlcmluZyBlbmdpbmUsIGJ5IGRlZmF1bHQsIHdvdWxkIGhhdmUgaGlnaGxpZ2h0ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlclxuICogQHNpbmNlIDguNC4wXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgQ29sdW1uIGhlYWRlciBsZXZlbCAoMCA9IG1vc3QgZGlzdGFudCB0byB0aGUgdGFibGUpLlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodE1ldGEgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZWQgc2VsZWN0aW9uLlxuICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9XG4gKi9cbidiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXInLFxuLyoqXG4gKiBBbGxvd3MgbW9kaWZ5IHRoZSB2aXN1YWwgY29sdW1uIGluZGV4IHRoYXQgaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29sdW1uIGhlYWRlciBlbGVtZW50IChUSCkgYmVmb3JlIGl0J3NcbiAqIGhpZ2hsaWdodGVkIChwcm9wZXIgQ1NTIGNsYXNzIG5hbWVzIGFyZSBhZGRlZCkuIE1vZGlmeWluZyB0aGUgdmlzdWFsIGNvbHVtbiBpbmRleCBhbGxvd3MgYnVpbGRpbmcgYSBjdXN0b21cbiAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBuZXN0ZWQgaGVhZGVycyBmZWF0dXJlIG9yIG90aGVyIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBoaWdobGlnaHRpbmcgb3RoZXIgRE9NXG4gKiBlbGVtZW50cyB0aGFuIHRoYXQgdGhlIHJlbmRlcmluZyBlbmdpbmUsIGJ5IGRlZmF1bHQsIHdvdWxkIGhhdmUgaGlnaGxpZ2h0ZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlclxuICogQHNpbmNlIDguNC4wXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgUm93IGhlYWRlciBsZXZlbCAoMCA9IG1vc3QgZGlzdGFudCB0byB0aGUgdGFibGUpLlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodE1ldGEgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBwcm9jZXNzZWQgc2VsZWN0aW9uLlxuICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9XG4gKi9cbidiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXInLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgUGVyc2lzdGVudFN0YXRlfSBwbHVnaW4sIGFmdGVyIGxvYWRpbmcgdmFsdWUsIHNhdmVkIHVuZGVyIGdpdmVuIGtleSwgZnJvbSBicm93c2VyIGxvY2FsIHN0b3JhZ2UuXG4gKlxuICogVGhlIGBwZXJzaXN0ZW50U3RhdGVMb2FkYCBob29rIGlzIGZpcmVkIGV2ZW4gd2hlbiB0aGUge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gaXMgZGlzYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI3BlcnNpc3RlbnRTdGF0ZUxvYWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5LlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlUGxhY2Vob2xkZXIgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGxvYWRlZCB2YWx1ZSB1bmRlciBgdmFsdWVQbGFjZWhvbGRlci52YWx1ZWAgKGlmIG5vIHZhbHVlIGhhdmUgYmVlbiBzYXZlZCwgYHZhbHVlYCBrZXkgd2lsbCBiZSB1bmRlZmluZWQpLlxuICovXG4ncGVyc2lzdGVudFN0YXRlTG9hZCcsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBQZXJzaXN0ZW50U3RhdGV9IHBsdWdpbiBhZnRlciByZXNldHRpbmcgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2UuIElmIG5vIGtleSBpcyBnaXZlbiwgYWxsIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggdGFibGUgd2lsbCBiZSBjbGVhcmVkLlxuICogVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjcGVyc2lzdGVudFN0YXRlUmVzZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBba2V5XSBLZXkuXG4gKi9cbidwZXJzaXN0ZW50U3RhdGVSZXNldCcsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBQZXJzaXN0ZW50U3RhdGV9IHBsdWdpbiwgYWZ0ZXIgc2F2aW5nIHZhbHVlIHVuZGVyIGdpdmVuIGtleSBpbiBicm93c2VyIGxvY2FsIHN0b3JhZ2UuXG4gKlxuICogVGhlIGBwZXJzaXN0ZW50U3RhdGVTYXZlYCBob29rIGlzIGZpcmVkIGV2ZW4gd2hlbiB0aGUge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gaXMgZGlzYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI3BlcnNpc3RlbnRTdGF0ZVNhdmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5LlxuICogQHBhcmFtIHtNaXhlZH0gdmFsdWUgVmFsdWUgdG8gc2F2ZS5cbiAqL1xuJ3BlcnNpc3RlbnRTdGF0ZVNhdmUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29sdW1uU29ydGluZ30gYW5kIHtAbGluayBNdWx0aUNvbHVtblNvcnRpbmd9IHBsdWdpbnMgYmVmb3JlIHNvcnRpbmcgdGhlIGNvbHVtbi4gSWYgeW91IHJldHVybiBgZmFsc2VgIHZhbHVlIGluc2lkZSBjYWxsYmFjayBmb3IgaG9vaywgdGhlbiBzb3J0aW5nXG4gKiB3aWxsIGJlIG5vdCBhcHBsaWVkIGJ5IHRoZSBIYW5kc29udGFibGUgKHVzZWZ1bCBmb3Igc2VydmVyLXNpZGUgc29ydGluZykuXG4gKlxuICogVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjY29sdW1uU29ydGluZ30gb3Ige0BsaW5rIE9wdGlvbnMjbXVsdGlDb2x1bW5Tb3J0aW5nfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ29sdW1uU29ydFxuICogQHBhcmFtIHtBcnJheX0gY3VycmVudFNvcnRDb25maWcgQ3VycmVudCBzb3J0IGNvbmZpZ3VyYXRpb24gKGZvciBhbGwgc29ydGVkIGNvbHVtbnMpLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25Tb3J0Q29uZmlncyBEZXN0aW5hdGlvbiBzb3J0IGNvbmZpZ3VyYXRpb24gKGZvciBhbGwgc29ydGVkIGNvbHVtbnMpLlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9IElmIGBmYWxzZWAgdGhlIGNvbHVtbiB3aWxsIG5vdCBiZSBzb3J0ZWQsIGB0cnVlYCBvdGhlcndpc2UuXG4gKi9cbidiZWZvcmVDb2x1bW5Tb3J0Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIENvbHVtblNvcnRpbmd9IGFuZCB7QGxpbmsgTXVsdGlDb2x1bW5Tb3J0aW5nfSBwbHVnaW5zIGFmdGVyIHNvcnRpbmcgdGhlIGNvbHVtbi4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjY29sdW1uU29ydGluZ31cbiAqIG9yIHtAbGluayBPcHRpb25zI211bHRpQ29sdW1uU29ydGluZ30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29sdW1uU29ydFxuICogQHBhcmFtIHtBcnJheX0gY3VycmVudFNvcnRDb25maWcgQ3VycmVudCBzb3J0IGNvbmZpZ3VyYXRpb24gKGZvciBhbGwgc29ydGVkIGNvbHVtbnMpLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25Tb3J0Q29uZmlncyBEZXN0aW5hdGlvbiBzb3J0IGNvbmZpZ3VyYXRpb24gKGZvciBhbGwgc29ydGVkIGNvbHVtbnMpLlxuICovXG4nYWZ0ZXJDb2x1bW5Tb3J0Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIEF1dG9maWxsfSBwbHVnaW4gYWZ0ZXIgc2V0dGluZyByYW5nZSBvZiBhdXRvZmlsbC4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjZmlsbEhhbmRsZX1cbiAqIG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlBdXRvZmlsbFJhbmdlXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydEFyZWEgQXJyYXkgb2YgdmlzdWFsIGNvb3JkaW5hdGVzIG9mIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGRyYWctZG93biBvcGVyYXRpb24gKGBbc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbl1gKS5cbiAqIEBwYXJhbSB7QXJyYXl9IGVudGlyZUFyZWEgQXJyYXkgb2YgdmlzdWFsIGNvb3JkaW5hdGVzIG9mIHRoZSBlbnRpcmUgYXJlYSBvZiB0aGUgZHJhZy1kb3duIG9wZXJhdGlvbiAoYFtzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uXWApLlxuICovXG4nbW9kaWZ5QXV0b2ZpbGxSYW5nZScsXG4vKipcbiAqIEZpcmVkIHRvIGFsbG93IG1vZGlmeWluZyB0aGUgY29weWFibGUgcmFuZ2Ugd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlDb3B5YWJsZVJhbmdlXG4gKiBAcGFyYW0ge0FycmF5W119IGNvcHlhYmxlUmFuZ2VzIEFycmF5IG9mIG9iamVjdHMgZGVmaW5pbmcgY29weWFibGUgY2VsbHMuXG4gKi9cbidtb2RpZnlDb3B5YWJsZVJhbmdlJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIENvcHlQYXN0ZX0gcGx1Z2luIGJlZm9yZSBjb3B5aW5nIHRoZSB2YWx1ZXMgdG8gdGhlIGNsaXBib2FyZCBhbmQgYmVmb3JlIGNsZWFyaW5nIHZhbHVlcyBvZlxuICogdGhlIHNlbGVjdGVkIGNlbGxzLiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyNjb3B5UGFzdGV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDdXRcbiAqIEBwYXJhbSB7QXJyYXlbXX0gZGF0YSBBbiBhcnJheSBvZiBhcnJheXMgd2hpY2ggY29udGFpbnMgZGF0YSB0byBjdXQuXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjb29yZHMgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHJhbmdlcyBvZiB0aGUgdmlzdWFsIGluZGV4ZXMgKGBzdGFydFJvd2AsIGBzdGFydENvbGAsIGBlbmRSb3dgLCBgZW5kQ29sYClcbiAqICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGJlIGN1dCBvdXQuXG4gKiBAcmV0dXJucyB7Kn0gSWYgcmV0dXJucyBgZmFsc2VgIHRoZW4gb3BlcmF0aW9uIG9mIHRoZSBjdXR0aW5nIG91dCBpcyBjYW5jZWxlZC5cbiAqIEBleGFtcGxlXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIC8vIFRvIGRpc3JlZ2FyZCBhIHNpbmdsZSByb3csIHJlbW92ZSBpdCBmcm9tIHRoZSBhcnJheSB1c2luZyBkYXRhLnNwbGljZShpLCAxKS5cbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBiZWZvcmVDdXQ6IGZ1bmN0aW9uKGRhdGEsIGNvb3Jkcykge1xuICogICAgIC8vIGRhdGEgLT4gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICogICAgIGRhdGEuc3BsaWNlKDAsIDEpO1xuICogICAgIC8vIGRhdGEgLT4gW1s0LCA1LCA2XV1cbiAqICAgICAvLyBjb29yZHMgLT4gW3tzdGFydFJvdzogMCwgc3RhcnRDb2w6IDAsIGVuZFJvdzogMSwgZW5kQ29sOiAyfV1cbiAqICAgfVxuICogfSk7XG4gKiAvLyBUbyBjYW5jZWwgYSBjdXR0aW5nIGFjdGlvbiwganVzdCByZXR1cm4gYGZhbHNlYC5cbiAqIG5ldyBIYW5kc29udGFibGUoZWxlbWVudCwge1xuICogICBiZWZvcmVDdXQ6IGZ1bmN0aW9uKGRhdGEsIGNvb3Jkcykge1xuICogICAgIHJldHVybiBmYWxzZTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiAvLyBUbyBkaXNyZWdhcmQgYSBzaW5nbGUgcm93LCByZW1vdmUgaXQgZnJvbSB0aGUgYXJyYXkgdXNpbmcgZGF0YS5zcGxpY2UoaSwgMSkuXG4gKiA8SG90VGFibGVcbiAqICAgYmVmb3JlQ3V0PXsoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gKiAgICAgZGF0YS5zcGxpY2UoMCwgMSk7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzQsIDUsIDZdXVxuICogICAgIC8vIGNvb3JkcyAtPiBbe3N0YXJ0Um93OiAwLCBzdGFydENvbDogMCwgZW5kUm93OiAxLCBlbmRDb2w6IDJ9XVxuICogICB9fVxuICogLz5cbiAqIC8vIFRvIGNhbmNlbCBhIGN1dHRpbmcgYWN0aW9uLCBqdXN0IHJldHVybiBgZmFsc2VgLlxuICogPEhvdFRhYmxlXG4gKiAgIGJlZm9yZUN1dD17KGRhdGEsIGNvb3JkcykgPT4ge1xuICogICAgIHJldHVybiBmYWxzZTtcbiAqICAgfX1cbiAqIC8+XG4gKiBgYGBcbiAqIDo6OlxuICovXG4nYmVmb3JlQ3V0Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIENvcHlQYXN0ZX0gcGx1Z2luIGFmdGVyIGRhdGEgd2FzIGN1dCBvdXQgZnJvbSB0aGUgdGFibGUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuXG4gKiB7QGxpbmsgT3B0aW9ucyNjb3B5UGFzdGV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckN1dFxuICogQHBhcmFtIHtBcnJheVtdfSBkYXRhIEFuIGFycmF5IG9mIGFycmF5cyB3aXRoIHRoZSBjdXQgZGF0YS5cbiAqIEBwYXJhbSB7b2JqZWN0W119IGNvb3JkcyBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcmFuZ2VzIG9mIHRoZSB2aXN1YWwgaW5kZXhlcyAoYHN0YXJ0Um93YCwgYHN0YXJ0Q29sYCwgYGVuZFJvd2AsIGBlbmRDb2xgKVxuICogICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdhcyBjdXQgb3V0LlxuICovXG4nYWZ0ZXJDdXQnLFxuLyoqXG4gKiBGaXJlZCBiZWZvcmUgdmFsdWVzIGFyZSBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ29weVxuICogQHBhcmFtIHtBcnJheVtdfSBkYXRhIEFuIGFycmF5IG9mIGFycmF5cyB3aGljaCBjb250YWlucyBkYXRhIHRvIGNvcGllZC5cbiAqIEBwYXJhbSB7b2JqZWN0W119IGNvb3JkcyBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcmFuZ2VzIG9mIHRoZSB2aXN1YWwgaW5kZXhlcyAoYHN0YXJ0Um93YCwgYHN0YXJ0Q29sYCwgYGVuZFJvd2AsIGBlbmRDb2xgKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBjb3BpZWQuXG4gKiBAcGFyYW0ge3sgY29sdW1uSGVhZGVyc0NvdW50OiBudW1iZXIgfX0gY29waWVkSGVhZGVyc0NvdW50IChTaW5jZSAxMi4zLjApIFRoZSBudW1iZXIgb2YgY29waWVkIGNvbHVtbiBoZWFkZXJzLlxuICogQHJldHVybnMgeyp9IElmIHJldHVybnMgYGZhbHNlYCB0aGVuIGNvcHlpbmcgaXMgY2FuY2VsZWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogLy8gVG8gZGlzcmVnYXJkIGEgc2luZ2xlIHJvdywgcmVtb3ZlIGl0IGZyb20gYXJyYXkgdXNpbmcgZGF0YS5zcGxpY2UoaSwgMSkuXG4gKiAuLi5cbiAqIG5ldyBIYW5kc29udGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUnKSwge1xuICogICBiZWZvcmVDb3B5OiAoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gKiAgICAgZGF0YS5zcGxpY2UoMCwgMSk7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzQsIDUsIDZdXVxuICogICAgIC8vIGNvb3JkcyAtPiBbe3N0YXJ0Um93OiAwLCBzdGFydENvbDogMCwgZW5kUm93OiAxLCBlbmRDb2w6IDJ9XVxuICogICB9XG4gKiB9KTtcbiAqIC4uLlxuICpcbiAqIC8vIFRvIGNhbmNlbCBjb3B5aW5nLCByZXR1cm4gZmFsc2UgZnJvbSB0aGUgY2FsbGJhY2suXG4gKiAuLi5cbiAqIG5ldyBIYW5kc29udGFibGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUnKSwge1xuICogICBiZWZvcmVDb3B5OiAoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9XG4gKiB9KTtcbiAqIC4uLlxuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqIGBgYGpzeFxuICogLy8gVG8gZGlzcmVnYXJkIGEgc2luZ2xlIHJvdywgcmVtb3ZlIGl0IGZyb20gYXJyYXkgdXNpbmcgZGF0YS5zcGxpY2UoaSwgMSkuXG4gKiAuLi5cbiAqIDxIb3RUYWJsZVxuICogICBiZWZvcmVDb3B5PXsoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gKiAgICAgZGF0YS5zcGxpY2UoMCwgMSk7XG4gKiAgICAgLy8gZGF0YSAtPiBbWzQsIDUsIDZdXVxuICogICAgIC8vIGNvb3JkcyAtPiBbe3N0YXJ0Um93OiAwLCBzdGFydENvbDogMCwgZW5kUm93OiAxLCBlbmRDb2w6IDJ9XVxuICogICB9fVxuICogLz5cbiAqIC4uLlxuICpcbiAqIC8vIFRvIGNhbmNlbCBjb3B5aW5nLCByZXR1cm4gZmFsc2UgZnJvbSB0aGUgY2FsbGJhY2suXG4gKiAuLi5cbiAqIDxIb3RUYWJsZVxuICogICBiZWZvcmVDb3B5PXsoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9fVxuICogLz5cbiAqIC4uLlxuICogYGBgXG4gKiA6OjpcbiAqL1xuJ2JlZm9yZUNvcHknLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29weVBhc3RlfSBwbHVnaW4gYWZ0ZXIgZGF0YSBhcmUgcGFzdGVkIGludG8gdGFibGUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvcHlQYXN0ZX1cbiAqIG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckNvcHlcbiAqIEBwYXJhbSB7QXJyYXlbXX0gZGF0YSBBbiBhcnJheSBvZiBhcnJheXMgd2hpY2ggY29udGFpbnMgdGhlIGNvcGllZCBkYXRhLlxuICogQHBhcmFtIHtvYmplY3RbXX0gY29vcmRzIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCByYW5nZXMgb2YgdGhlIHZpc3VhbCBpbmRleGVzIChgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCwgYGVuZENvbGApXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3YXMgY29waWVkLlxuICogQHBhcmFtIHt7IGNvbHVtbkhlYWRlcnNDb3VudDogbnVtYmVyIH19IGNvcGllZEhlYWRlcnNDb3VudCAoU2luY2UgMTIuMy4wKSBUaGUgbnVtYmVyIG9mIGNvcGllZCBjb2x1bW4gaGVhZGVycy5cbiAqL1xuJ2FmdGVyQ29weScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBDb3B5UGFzdGV9IHBsdWdpbiBiZWZvcmUgdmFsdWVzIGFyZSBwYXN0ZWQgaW50byB0YWJsZS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW5cbiAqIHtAbGluayBPcHRpb25zI2NvcHlQYXN0ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVBhc3RlXG4gKiBAcGFyYW0ge0FycmF5W119IGRhdGEgQW4gYXJyYXkgb2YgYXJyYXlzIHdoaWNoIGNvbnRhaW5zIGRhdGEgdG8gcGFzdGUuXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjb29yZHMgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHJhbmdlcyBvZiB0aGUgdmlzdWFsIGluZGV4ZXMgKGBzdGFydFJvd2AsIGBzdGFydENvbGAsIGBlbmRSb3dgLCBgZW5kQ29sYClcbiAqICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgYXJlYS5cbiAqIEByZXR1cm5zIHsqfSBJZiByZXR1cm5zIGBmYWxzZWAgdGhlbiBwYXN0aW5nIGlzIGNhbmNlbGVkLlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogLy8gVG8gZGlzcmVnYXJkIGEgc2luZ2xlIHJvdywgcmVtb3ZlIGl0IGZyb20gYXJyYXkgdXNpbmcgZGF0YS5zcGxpY2UoaSwgMSkuXG4gKiBuZXcgSGFuZHNvbnRhYmxlKGV4YW1wbGUsIHtcbiAqICAgYmVmb3JlUGFzdGU6IChkYXRhLCBjb29yZHMpID0+IHtcbiAqICAgICAvLyBkYXRhIC0+IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAqICAgICBkYXRhLnNwbGljZSgwLCAxKTtcbiAqICAgICAvLyBkYXRhIC0+IFtbNCwgNSwgNl1dXG4gKiAgICAgLy8gY29vcmRzIC0+IFt7c3RhcnRSb3c6IDAsIHN0YXJ0Q29sOiAwLCBlbmRSb3c6IDEsIGVuZENvbDogMn1dXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gVG8gY2FuY2VsIHBhc3RpbmcsIHJldHVybiBmYWxzZSBmcm9tIHRoZSBjYWxsYmFjay5cbiAqIG5ldyBIYW5kc29udGFibGUoZXhhbXBsZSwge1xuICogICBiZWZvcmVQYXN0ZTogKGRhdGEsIGNvb3JkcykgPT4ge1xuICogICAgIHJldHVybiBmYWxzZTtcbiAqICAgfVxuICogfSk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiAvLyBUbyBkaXNyZWdhcmQgYSBzaW5nbGUgcm93LCByZW1vdmUgaXQgZnJvbSBhcnJheSB1c2luZyBkYXRhLnNwbGljZShpLCAxKS5cbiAqIDxIb3RUYWJsZVxuICogICBiZWZvcmVQYXN0ZT17KGRhdGEsIGNvb3JkcykgPT4ge1xuICogICAgIC8vIGRhdGEgLT4gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICogICAgIGRhdGEuc3BsaWNlKDAsIDEpO1xuICogICAgIC8vIGRhdGEgLT4gW1s0LCA1LCA2XV1cbiAqICAgICAvLyBjb29yZHMgLT4gW3tzdGFydFJvdzogMCwgc3RhcnRDb2w6IDAsIGVuZFJvdzogMSwgZW5kQ29sOiAyfV1cbiAqICAgfX1cbiAqIC8+XG4gKiAvLyBUbyBjYW5jZWwgcGFzdGluZywgcmV0dXJuIGZhbHNlIGZyb20gdGhlIGNhbGxiYWNrLlxuICogPEhvdFRhYmxlXG4gKiAgIGJlZm9yZVBhc3RlPXsoZGF0YSwgY29vcmRzKSA9PiB7XG4gKiAgICAgcmV0dXJuIGZhbHNlO1xuICogICB9fVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbidiZWZvcmVQYXN0ZScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBDb3B5UGFzdGV9IHBsdWdpbiBhZnRlciB2YWx1ZXMgYXJlIHBhc3RlZCBpbnRvIHRhYmxlLiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlblxuICoge0BsaW5rIE9wdGlvbnMjY29weVBhc3RlfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJQYXN0ZVxuICogQHBhcmFtIHtBcnJheVtdfSBkYXRhIEFuIGFycmF5IG9mIGFycmF5cyB3aXRoIHRoZSBwYXN0ZWQgZGF0YS5cbiAqIEBwYXJhbSB7b2JqZWN0W119IGNvb3JkcyBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggcmFuZ2VzIG9mIHRoZSB2aXN1YWwgaW5kZXhlcyAoYHN0YXJ0Um93YCwgYHN0YXJ0Q29sYCwgYGVuZFJvd2AsIGBlbmRDb2xgKVxuICogICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBhcmVhLlxuICovXG4nYWZ0ZXJQYXN0ZScsXG4vKipcbiAqIEZpcmVkIGJ5IHRoZSB7QGxpbmsgTWFudWFsQ29sdW1uRnJlZXplfSBwbHVnaW4sIGJlZm9yZSBmcmVlemluZyBhIGNvbHVtbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ29sdW1uRnJlZXplXG4gKiBAc2luY2UgMTIuMS4wXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSB2aXN1YWwgaW5kZXggb2YgdGhlIGNvbHVtbiB0aGF0IGlzIGdvaW5nIHRvIGZyZWV6ZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJlZXplUGVyZm9ybWVkIElmIGB0cnVlYDogdGhlIGNvbHVtbiBpcyBnb2luZyB0byBmcmVlemUuIElmIGBmYWxzZWA6IHRoZSBjb2x1bW4gaXMgbm90IGdvaW5nIHRvIGZyZWV6ZSAod2hpY2ggbWlnaHQgaGFwcGVuIGlmIHRoZSBjb2x1bW4gaXMgYWxyZWFkeSBmcm96ZW4pLlxuICogQHJldHVybnMge2Jvb2xlYW58dW5kZWZpbmVkfSBJZiBgZmFsc2VgOiB0aGUgY29sdW1uIGlzIG5vdCBnb2luZyB0byBmcmVlemUsIGFuZCB0aGUgYGFmdGVyQ29sdW1uRnJlZXplYCBob29rIHdvbid0IGZpcmUuXG4gKi9cbidiZWZvcmVDb2x1bW5GcmVlemUnLFxuLyoqXG4gKiBGaXJlZCBieSB0aGUge0BsaW5rIE1hbnVhbENvbHVtbkZyZWV6ZX0gcGx1Z2luLCByaWdodCBhZnRlciBmcmVlemluZyBhIGNvbHVtbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJDb2x1bW5GcmVlemVcbiAqIEBzaW5jZSAxMi4xLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBpbmRleCBvZiB0aGUgZnJvemVuIGNvbHVtbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZnJlZXplUGVyZm9ybWVkIElmIGB0cnVlYDogdGhlIGNvbHVtbiBnb3Qgc3VjY2Vzc2Z1bGx5IGZyb3plbi4gSWYgYGZhbHNlYDogdGhlIGNvbHVtbiBkaWRuJ3QgZ2V0IGZyb3plbi5cbiAqL1xuJ2FmdGVyQ29sdW1uRnJlZXplJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIE1hbnVhbENvbHVtbk1vdmV9IHBsdWdpbiBiZWZvcmUgY2hhbmdlIG9yZGVyIG9mIHRoZSB2aXN1YWwgaW5kZXhlcy4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW5cbiAqIHtAbGluayBPcHRpb25zI21hbnVhbENvbHVtbk1vdmV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDb2x1bW5Nb3ZlXG4gKiBAcGFyYW0ge0FycmF5fSBtb3ZlZENvbHVtbnMgQXJyYXkgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHRvIGJlIG1vdmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIGNvbHVtbiBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIGNvbHVtbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gd2hlcmUgdGhlIGVsZW1lbnRzIHdpbGwgYmUgcGxhY2VkIGFmdGVyIHRoZSBtb3ZpbmcgYWN0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBmaW5hbCBpbmRleCBwbGVhc2UgdGFrZSBhIGxvb2sgYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1tb3ZpbmcvY29sdW1uLW1vdmluZy5tZCkuXG4gKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGRyb3BJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIGRyb3AgaW5kZXggZm9yIHRoZSBtb3ZlZCBjb2x1bW5zLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9pbnRzIHRvIHdoZXJlIHdlIGFyZSBnb2luZyB0byBkcm9wIHRoZSBtb3ZlZCBlbGVtZW50cy4gVG8gY2hlY2tcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc3VhbGl6YXRpb24gb2YgZHJvcCBpbmRleCBwbGVhc2UgdGFrZSBhIGxvb2sgYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1tb3ZpbmcvY29sdW1uLW1vdmluZy5tZCkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJdCdzIGB1bmRlZmluZWRgIHdoZW4gYGRyYWdDb2x1bW5zYCBmdW5jdGlvbiB3YXNuJ3QgY2FsbGVkLlxuICogQHBhcmFtIHtib29sZWFufSBtb3ZlUG9zc2libGUgSW5kaWNhdGVzIGlmIGl0J3MgcG9zc2libGUgdG8gbW92ZSByb3dzIHRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uLlxuICogQHJldHVybnMge3VuZGVmaW5lZCB8IGJvb2xlYW59IElmIGBmYWxzZWAgdGhlIGNvbHVtbiB3aWxsIG5vdCBiZSBtb3ZlZCwgYHRydWVgIG90aGVyd2lzZS5cbiAqL1xuJ2JlZm9yZUNvbHVtbk1vdmUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWFudWFsQ29sdW1uTW92ZX0gcGx1Z2luIGFmdGVyIGNoYW5naW5nIG9yZGVyIG9mIHRoZSB2aXN1YWwgaW5kZXhlcy5cbiAqIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21hbnVhbENvbHVtbk1vdmV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckNvbHVtbk1vdmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1vdmVkQ29sdW1ucyBBcnJheSBvZiB2aXN1YWwgY29sdW1uIGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBjaGVjayB2aXN1YWxpemF0aW9uIG9mIGZpbmFsIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kKS5cbiAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gZHJvcEluZGV4IFZpc3VhbCBjb2x1bW4gaW5kZXgsIGJlaW5nIGEgZHJvcCBpbmRleCBmb3IgdGhlIG1vdmVkIGNvbHVtbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGRyb3AgdGhlIG1vdmVkIGVsZW1lbnRzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBkcm9wIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0J3MgYHVuZGVmaW5lZGAgd2hlbiBgZHJhZ0NvbHVtbnNgIGZ1bmN0aW9uIHdhc24ndCBjYWxsZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQgd2FzIHBvc3NpYmxlIHRvIG1vdmUgY29sdW1ucyB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3JkZXJDaGFuZ2VkIEluZGljYXRlcyBpZiBvcmRlciBvZiBjb2x1bW5zIHdhcyBjaGFuZ2VkIGJ5IG1vdmUuXG4gKi9cbidhZnRlckNvbHVtbk1vdmUnLFxuLyoqXG4gKiBGaXJlZCBieSB0aGUge0BsaW5rIE1hbnVhbENvbHVtbkZyZWV6ZX0gcGx1Z2luLCBiZWZvcmUgdW5mcmVlemluZyBhIGNvbHVtbi5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQ29sdW1uVW5mcmVlemVcbiAqIEBzaW5jZSAxMi4xLjBcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBpbmRleCBvZiB0aGUgY29sdW1uIHRoYXQgaXMgZ29pbmcgdG8gdW5mcmVlemUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHVuZnJlZXplUGVyZm9ybWVkIElmIGB0cnVlYDogdGhlIGNvbHVtbiBpcyBnb2luZyB0byB1bmZyZWV6ZS4gSWYgYGZhbHNlYDogdGhlIGNvbHVtbiBpcyBub3QgZ29pbmcgdG8gdW5mcmVlemUgKHdoaWNoIG1pZ2h0IGhhcHBlbiBpZiB0aGUgY29sdW1uIGlzIGFscmVhZHkgdW5mcm96ZW4pLlxuICogQHJldHVybnMge2Jvb2xlYW58dW5kZWZpbmVkfSBJZiBgZmFsc2VgOiB0aGUgY29sdW1uIGlzIG5vdCBnb2luZyB0byB1bmZyZWV6ZSwgYW5kIHRoZSBgYWZ0ZXJDb2x1bW5VbmZyZWV6ZWAgaG9vayB3b24ndCBmaXJlLlxuICovXG4nYmVmb3JlQ29sdW1uVW5mcmVlemUnLFxuLyoqXG4gKiBGaXJlZCBieSB0aGUge0BsaW5rIE1hbnVhbENvbHVtbkZyZWV6ZX0gcGx1Z2luLCByaWdodCBhZnRlciB1bmZyZWV6aW5nIGEgY29sdW1uLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckNvbHVtblVuZnJlZXplXG4gKiBAc2luY2UgMTIuMS4wXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSB2aXN1YWwgaW5kZXggb2YgdGhlIHVuZnJvemVuIGNvbHVtbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdW5mcmVlemVQZXJmb3JtZWQgSWYgYHRydWVgOiB0aGUgY29sdW1uIGdvdCBzdWNjZXNzZnVsbHkgdW5mcm96ZW4uIElmIGBmYWxzZWA6IHRoZSBjb2x1bW4gZGlkbid0IGdldCB1bmZyb3plbi5cbiAqL1xuJ2FmdGVyQ29sdW1uVW5mcmVlemUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWFudWFsUm93TW92ZX0gcGx1Z2luIGJlZm9yZSBjaGFuZ2luZyB0aGUgb3JkZXIgb2YgdGhlIHZpc3VhbCBpbmRleGVzLiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlblxuICoge0BsaW5rIE9wdGlvbnMjbWFudWFsUm93TW92ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJvd01vdmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1vdmVkUm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBjaGVjayB2aXN1YWxpemF0aW9uIG9mIGZpbmFsIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93LW1vdmluZy9yb3ctbW92aW5nLm1kKS5cbiAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gZHJvcEluZGV4IFZpc3VhbCByb3cgaW5kZXgsIGJlaW5nIGEgZHJvcCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGRyb3AgdGhlIG1vdmVkIGVsZW1lbnRzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBkcm9wIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93LW1vdmluZy9yb3ctbW92aW5nLm1kKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0J3MgYHVuZGVmaW5lZGAgd2hlbiBgZHJhZ1Jvd3NgIGZ1bmN0aW9uIHdhc24ndCBjYWxsZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQncyBwb3NzaWJsZSB0byBtb3ZlIHJvd3MgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlUm93TW92ZScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBNYW51YWxSb3dNb3ZlfSBwbHVnaW4gYWZ0ZXIgY2hhbmdpbmcgdGhlIG9yZGVyIG9mIHRoZSB2aXN1YWwgaW5kZXhlcy5cbiAqIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21hbnVhbFJvd01vdmV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclJvd01vdmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1vdmVkUm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbyBjaGVjayB2aXN1YWxpemF0aW9uIG9mIGZpbmFsIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93LW1vdmluZy9yb3ctbW92aW5nLm1kKS5cbiAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gZHJvcEluZGV4IFZpc3VhbCByb3cgaW5kZXgsIGJlaW5nIGEgZHJvcCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGRyb3AgdGhlIG1vdmVkIGVsZW1lbnRzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBkcm9wIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL3Jvd3Mvcm93LW1vdmluZy9yb3ctbW92aW5nLm1kKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0J3MgYHVuZGVmaW5lZGAgd2hlbiBgZHJhZ1Jvd3NgIGZ1bmN0aW9uIHdhc24ndCBjYWxsZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQgd2FzIHBvc3NpYmxlIHRvIG1vdmUgcm93cyB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3JkZXJDaGFuZ2VkIEluZGljYXRlcyBpZiBvcmRlciBvZiByb3dzIHdhcyBjaGFuZ2VkIGJ5IG1vdmUuXG4gKi9cbidhZnRlclJvd01vdmUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWFudWFsQ29sdW1uUmVzaXplfSBwbHVnaW4gYmVmb3JlIHJlbmRlcmluZyB0aGUgdGFibGUgd2l0aCBtb2RpZmllZCBjb2x1bW4gc2l6ZXMuIFRoaXMgaG9vayBpc1xuICogZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyNtYW51YWxDb2x1bW5SZXNpemV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVDb2x1bW5SZXNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXdTaXplIENhbGN1bGF0ZWQgbmV3IGNvbHVtbiB3aWR0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGluZGV4IG9mIHRoZSByZXNpemVkIGNvbHVtbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEb3VibGVDbGljayBGbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIHdhcyBhIGRvdWJsZS1jbGljay5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYSBuZXcgY29sdW1uIHNpemUgb3IgYHVuZGVmaW5lZGAsIGlmIGNvbHVtbiBzaXplIHNob3VsZCBiZSBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkuXG4gKi9cbidiZWZvcmVDb2x1bW5SZXNpemUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWFudWFsQ29sdW1uUmVzaXplfSBwbHVnaW4gYWZ0ZXIgcmVuZGVyaW5nIHRoZSB0YWJsZSB3aXRoIG1vZGlmaWVkIGNvbHVtbiBzaXplcy4gVGhpcyBob29rIGlzXG4gKiBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21hbnVhbENvbHVtblJlc2l6ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29sdW1uUmVzaXplXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3U2l6ZSBDYWxjdWxhdGVkIG5ldyBjb2x1bW4gd2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBpbmRleCBvZiB0aGUgcmVzaXplZCBjb2x1bW4uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRG91YmxlQ2xpY2sgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGVyZSB3YXMgYSBkb3VibGUtY2xpY2suXG4gKi9cbidhZnRlckNvbHVtblJlc2l6ZScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBNYW51YWxSb3dSZXNpemV9IHBsdWdpbiBiZWZvcmUgcmVuZGVyaW5nIHRoZSB0YWJsZSB3aXRoIG1vZGlmaWVkIHJvdyBzaXplcy4gVGhpcyBob29rIGlzXG4gKiBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21hbnVhbFJvd1Jlc2l6ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJvd1Jlc2l6ZVxuICogQHBhcmFtIHtudW1iZXJ9IG5ld1NpemUgQ2FsY3VsYXRlZCBuZXcgcm93IGhlaWdodC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIGluZGV4IG9mIHRoZSByZXNpemVkIHJvdy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEb3VibGVDbGljayBGbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIHdhcyBhIGRvdWJsZS1jbGljay5cbiAqIEByZXR1cm5zIHtudW1iZXJ8dW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBuZXcgcm93IHNpemUgb3IgYHVuZGVmaW5lZGAgaWYgcm93IHNpemUgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgYXV0b21hdGljYWxseS5cbiAqL1xuJ2JlZm9yZVJvd1Jlc2l6ZScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBNYW51YWxSb3dSZXNpemV9IHBsdWdpbiBhZnRlciByZW5kZXJpbmcgdGhlIHRhYmxlIHdpdGggbW9kaWZpZWQgcm93IHNpemVzLiBUaGlzIGhvb2sgaXNcbiAqIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjbWFudWFsUm93UmVzaXplfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJSb3dSZXNpemVcbiAqIEBwYXJhbSB7bnVtYmVyfSBuZXdTaXplIENhbGN1bGF0ZWQgbmV3IHJvdyBoZWlnaHQuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCBpbmRleCBvZiB0aGUgcmVzaXplZCByb3cuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRG91YmxlQ2xpY2sgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGVyZSB3YXMgYSBkb3VibGUtY2xpY2suXG4gKi9cbidhZnRlclJvd1Jlc2l6ZScsXG4vKipcbiAqIEZpcmVkIGFmdGVyIGdldHRpbmcgdGhlIGNvbHVtbiBoZWFkZXIgcmVuZGVyZXJzLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyc1xuICogQHBhcmFtIHtGdW5jdGlvbltdfSByZW5kZXJlcnMgQW4gYXJyYXkgb2YgdGhlIGNvbHVtbiBoZWFkZXIgcmVuZGVyZXJzLlxuICovXG4nYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBnZXR0aW5nIHRoZSByb3cgaGVhZGVyIHJlbmRlcmVycy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnNcbiAqIEBwYXJhbSB7RnVuY3Rpb25bXX0gcmVuZGVyZXJzIEFuIGFycmF5IG9mIHRoZSByb3cgaGVhZGVyIHJlbmRlcmVycy5cbiAqL1xuJ2FmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzJyxcbi8qKlxuICogRmlyZWQgYmVmb3JlIGFwcGx5aW5nIHN0cmV0Y2hlZCBjb2x1bW4gd2lkdGggdG8gY29sdW1uLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdHJldGNoZWRXaWR0aCBDYWxjdWxhdGVkIHdpZHRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9IFJldHVybnMgbmV3IHdpZHRoIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgY29sdW1uIGVsZW1lbnQuXG4gKi9cbidiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgnLFxuLyoqXG4gKiBGaXJlZCBieSB0aGUgW2BGaWx0ZXJzYF0oQC9hcGkvZmlsdGVycy5tZCkgcGx1Z2luLFxuICogYmVmb3JlIGEgW2NvbHVtbiBmaWx0ZXJdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLWZpbHRlci9jb2x1bW4tZmlsdGVyLm1kKSBnZXRzIGFwcGxpZWQuXG4gKlxuICogW2BiZWZvcmVGaWx0ZXJgXSgjYmVmb3JlZmlsdGVyKSB0YWtlcyBvbmUgYXJndW1lbnQgKGBjb25kaXRpb25zU3RhY2tgKSwgd2hpY2ggaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy5cbiAqIEVhY2ggb2JqZWN0IHJlcHJlc2VudHMgb25lIG9mIHlvdXIgW2NvbHVtbiBmaWx0ZXJzXShAL2FwaS9maWx0ZXJzLm1kI2FkZGNvbmRpdGlvbiksXG4gKiBhbmQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqIHwgUHJvcGVydHkgICAgIHwgUG9zc2libGUgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAtLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gKiB8IGBjb2x1bW5gICAgICB8IE51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQSB2aXN1YWwgaW5kZXggb2YgdGhlIGNvbHVtbiB0byB3aGljaCB0aGUgZmlsdGVyIHdpbGwgYmUgYXBwbGllZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgYGNvbmRpdGlvbnNgIHwgQXJyYXkgb2Ygb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFYWNoIG9iamVjdCByZXByZXNlbnRzIG9uZSBjb25kaXRpb24uIEZvciBkZXRhaWxzLCBzZWUgW2BhZGRDb25kaXRpb24oKWBdKEAvYXBpL2ZpbHRlcnMubWQjYWRkY29uZGl0aW9uKS4gICAgICAgICAgICAgICAgfFxuICogfCBgb3BlcmF0aW9uYCAgfCBgJ2Nvbmp1bmN0aW9uJ2AgXFx8IGAnZGlzanVuY3Rpb24nYCBcXHwgYCdkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbidgIHwgQW4gb3BlcmF0aW9uIHRvIHBlcmZvcm0gb24geW91ciBzZXQgb2YgYGNvbmRpdGlvbnNgLiBGb3IgZGV0YWlscywgc2VlIFtgYWRkQ29uZGl0aW9uKClgXShAL2FwaS9maWx0ZXJzLm1kI2FkZGNvbmRpdGlvbikuIHxcbiAqXG4gKiBBbiBleGFtcGxlIG9mIHRoZSBmb3JtYXQgb2YgdGhlIGBjb25kaXRpb25zU3RhY2tgIGFyZ3VtZW50OlxuICpcbiAqIGBgYGpzXG4gKiBbXG4gKiAgIHtcbiAqICAgICBjb2x1bW46IDIsXG4gKiAgICAgY29uZGl0aW9uczogW1xuICogICAgICAge25hbWU6ICdiZWdpbnNfd2l0aCcsIGFyZ3M6IFtbJ1MnXV19XG4gKiAgICAgXSxcbiAqICAgICBvcGVyYXRpb246ICdjb25qdW5jdGlvbidcbiAqICAgfSxcbiAqICAge1xuICogICAgIGNvbHVtbjogNCxcbiAqICAgICBjb25kaXRpb25zOiBbXG4gKiAgICAgICB7bmFtZTogJ25vdF9lbXB0eScsIGFyZ3M6IFtdfVxuICogICAgIF0sXG4gKiAgICAgb3BlcmF0aW9uOiAnY29uanVuY3Rpb24nXG4gKiAgIH0sXG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBUbyBwZXJmb3JtIHNlcnZlci1zaWRlIGZpbHRlcmluZyAoaS5lLiwgdG8gbm90IGFwcGx5IGZpbHRlcmluZyB0byBIYW5kc29udGFibGUncyBVSSksXG4gKiBzZXQgW2BiZWZvcmVGaWx0ZXJgXSgjYmVmb3JlZmlsdGVyKSB0byByZXR1cm4gYGZhbHNlYDpcbiAqXG4gKiBgYGBqc1xuICogbmV3IEhhbmRzb250YWJsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZScpLCB7XG4gKiAgIGJlZm9yZUZpbHRlcjogKGNvbmRpdGlvbnNTdGFjaykgPT4ge1xuICogICAgIHJldHVybiBmYWxzZTtcbiAqICAgfVxuICogfSk7XG4gKmBgYFxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0d1aWRlczogQ29sdW1uIGZpbHRlcl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIubWQpXG4gKiAtIFtIb29rczogYGFmdGVyRmlsdGVyYF0oI2FmdGVyZmlsdGVyKVxuICogLSBbT3B0aW9uczogYGZpbHRlcnNgXShAL2FwaS9vcHRpb25zLm1kI2ZpbHRlcnMpXG4gKiAtIFtQbHVnaW5zOiBgRmlsdGVyc2BdKEAvYXBpL2ZpbHRlcnMubWQpXG4gKiDigJMgW1BsdWdpbiBtZXRob2RzOiBgYWRkQ29uZGl0aW9uKClgXShAL2FwaS9maWx0ZXJzLm1kI2FkZGNvbmRpdGlvbilcbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlRmlsdGVyXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjb25kaXRpb25zU3RhY2sgQW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHlvdXIgW2NvbHVtbiBmaWx0ZXJzXShAL2FwaS9maWx0ZXJzLm1kI2FkZGNvbmRpdGlvbikuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVG8gcGVyZm9ybSBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcgKGkuZS4sIHRvIG5vdCBhcHBseSBmaWx0ZXJpbmcgdG8gSGFuZHNvbnRhYmxlJ3MgVUkpLCByZXR1cm4gYGZhbHNlYC5cbiAqL1xuJ2JlZm9yZUZpbHRlcicsXG4vKipcbiAqIEZpcmVkIGJ5IHRoZSBbYEZpbHRlcnNgXShAL2FwaS9maWx0ZXJzLm1kKSBwbHVnaW4sXG4gKiBhZnRlciBhIFtjb2x1bW4gZmlsdGVyXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1maWx0ZXIvY29sdW1uLWZpbHRlci5tZCkgZ2V0cyBhcHBsaWVkLlxuICpcbiAqIFtgYWZ0ZXJGaWx0ZXJgXSgjYWZ0ZXJmaWx0ZXIpIHRha2VzIG9uZSBhcmd1bWVudCAoYGNvbmRpdGlvbnNTdGFja2ApLCB3aGljaCBpcyBhbiBhcnJheSBvZiBvYmplY3RzLlxuICogRWFjaCBvYmplY3QgcmVwcmVzZW50cyBvbmUgb2YgeW91ciBbY29sdW1uIGZpbHRlcnNdKEAvYXBpL2ZpbHRlcnMubWQjYWRkY29uZGl0aW9uKSxcbiAqIGFuZCBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogfCBQcm9wZXJ0eSAgICAgfCBQb3NzaWJsZSB2YWx1ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbiAqIHwgYGNvbHVtbmAgICAgIHwgTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBIHZpc3VhbCBpbmRleCBvZiB0aGUgY29sdW1uIHRvIHdoaWNoIHRoZSBmaWx0ZXIgd2FzIGFwcGxpZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCBgY29uZGl0aW9uc2AgfCBBcnJheSBvZiBvYmplY3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEVhY2ggb2JqZWN0IHJlcHJlc2VudHMgb25lIGNvbmRpdGlvbi4gRm9yIGRldGFpbHMsIHNlZSBbYGFkZENvbmRpdGlvbigpYF0oQC9hcGkvZmlsdGVycy5tZCNhZGRjb25kaXRpb24pLiAgICAgICAgICAgICAgICB8XG4gKiB8IGBvcGVyYXRpb25gICB8IGAnY29uanVuY3Rpb24nYCBcXHwgYCdkaXNqdW5jdGlvbidgIFxcfCBgJ2Rpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uJ2AgfCBBbiBvcGVyYXRpb24gdG8gcGVyZm9ybSBvbiB5b3VyIHNldCBvZiBgY29uZGl0aW9uc2AuIEZvciBkZXRhaWxzLCBzZWUgW2BhZGRDb25kaXRpb24oKWBdKEAvYXBpL2ZpbHRlcnMubWQjYWRkY29uZGl0aW9uKS4gfFxuICpcbiAqIEFuIGV4YW1wbGUgb2YgdGhlIGZvcm1hdCBvZiB0aGUgYGNvbmRpdGlvbnNTdGFja2AgYXJndW1lbnQ6XG4gKlxuICogYGBganNcbiAqIFtcbiAqICAge1xuICogICAgIGNvbHVtbjogMixcbiAqICAgICBjb25kaXRpb25zOiBbXG4gKiAgICAgICB7bmFtZTogJ2JlZ2luc193aXRoJywgYXJnczogW1snUyddXX1cbiAqICAgICBdLFxuICogICAgIG9wZXJhdGlvbjogJ2Nvbmp1bmN0aW9uJ1xuICogICB9LFxuICogICB7XG4gKiAgICAgY29sdW1uOiA0LFxuICogICAgIGNvbmRpdGlvbnM6IFtcbiAqICAgICAgIHtuYW1lOiAnbm90X2VtcHR5JywgYXJnczogW119XG4gKiAgICAgXSxcbiAqICAgICBvcGVyYXRpb246ICdjb25qdW5jdGlvbidcbiAqICAgfSxcbiAqIF1cbiAqIGBgYFxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0d1aWRlczogQ29sdW1uIGZpbHRlcl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIubWQpXG4gKiAtIFtIb29rczogYGJlZm9yZUZpbHRlcmBdKCNiZWZvcmVmaWx0ZXIpXG4gKiAtIFtPcHRpb25zOiBgZmlsdGVyc2BdKEAvYXBpL29wdGlvbnMubWQjZmlsdGVycylcbiAqIC0gW1BsdWdpbnM6IGBGaWx0ZXJzYF0oQC9hcGkvZmlsdGVycy5tZClcbiAqIOKAkyBbUGx1Z2luIG1ldGhvZHM6IGBhZGRDb25kaXRpb24oKWBdKEAvYXBpL2ZpbHRlcnMubWQjYWRkY29uZGl0aW9uKVxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckZpbHRlclxuICogQHBhcmFtIHtvYmplY3RbXX0gY29uZGl0aW9uc1N0YWNrIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB5b3VyIFtjb2x1bW4gZmlsdGVyc10oQC9hcGkvZmlsdGVycy5tZCNhZGRjb25kaXRpb24pLlxuICovXG4nYWZ0ZXJGaWx0ZXInLFxuLyoqXG4gKiBGaXJlZCBieSB0aGUge0BsaW5rIEZvcm11bGFzfSBwbHVnaW4sIHdoZW4gYW55IGNlbGwgdmFsdWUgY2hhbmdlcy5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IG9mIG9iamVjdHMgdGhhdCBjb250YWluczpcbiAqIC0gVGhlIGFkZHJlc3NlcyAoYHNoZWV0YCwgYHJvd2AsIGBjb2xgKSBhbmQgbmV3IHZhbHVlcyAoYG5ld1ZhbHVlYCkgb2YgdGhlIGNoYW5nZWQgY2VsbHMuXG4gKiAtIFRoZSBhZGRyZXNzZXMgYW5kIG5ldyB2YWx1ZXMgb2YgYW55IGNlbGxzIHRoYXQgaGFkIHRvIGJlIHJlY2FsY3VsYXRlZCAoYmVjYXVzZSB0aGVpciBmb3JtdWxhcyBkZXBlbmQgb24gdGhlIGNlbGxzIHRoYXQgY2hhbmdlZCkuXG4gKlxuICogVGhpcyBob29rIGdldHMgYWxzbyBmaXJlZCBvbiBIYW5kc29udGFibGUncyBpbml0aWFsaXphdGlvbiwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzZXMgYW5kIHZhbHVlcyBvZiBhbGwgY2VsbHMuXG4gKlxuICogUmVhZCBtb3JlOlxuICogLSBbR3VpZGVzOiBGb3JtdWxhIGNhbGN1bGF0aW9uXShAL2d1aWRlcy9mb3JtdWxhcy9mb3JtdWxhLWNhbGN1bGF0aW9uL2Zvcm11bGEtY2FsY3VsYXRpb24ubWQpXG4gKiAtIFtIeXBlckZvcm11bGEgZG9jdW1lbnRhdGlvbjogYHZhbHVlc1VwZGF0ZWRgXShodHRwczovL2h5cGVyZm9ybXVsYS5oYW5kc29udGFibGUuY29tL2FwaS9pbnRlcmZhY2VzL2xpc3RlbmVycy5odG1sI3ZhbHVlc3VwZGF0ZWQpXG4gKlxuICogQHNpbmNlIDkuMC4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZVxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgYWRkcmVzc2VzIGFuZCBuZXcgdmFsdWVzIG9mIGFsbCB0aGUgY2hhbmdlZCBhbmQgcmVjYWxjdWxhdGVkIGNlbGxzLlxuICovXG4nYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZScsXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBuYW1lZCBleHByZXNzaW9uIGlzIGFkZGVkIHRvIHRoZSBGb3JtdWxhcycgZW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEBzaW5jZSA5LjAuMFxuICogQGV2ZW50IEhvb2tzI2FmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lZEV4cHJlc3Npb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBhZGRlZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBvZiBhcHBsaWVkIGNoYW5nZXMuXG4gKi9cbidhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkJyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIG5hbWVkIGV4cHJlc3Npb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBGb3JtdWxhcycgZW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEBzaW5jZSA5LjAuMFxuICogQGV2ZW50IEhvb2tzI2FmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVkRXhwcmVzc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgVGhlIHZhbHVlcyBhbmQgbG9jYXRpb24gb2YgYXBwbGllZCBjaGFuZ2VzLlxuICovXG4nYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkJyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIG5ldyBzaGVldCBpcyBhZGRlZCB0byB0aGUgRm9ybXVsYXMnIGVuZ2luZSBpbnN0YW5jZS5cbiAqXG4gKiBAc2luY2UgOS4wLjBcbiAqIEBldmVudCBIb29rcyNhZnRlclNoZWV0QWRkZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRlZFNoZWV0RGlzcGxheU5hbWUgVGhlIG5hbWUgb2YgdGhlIGFkZGVkIHNoZWV0LlxuICovXG4nYWZ0ZXJTaGVldEFkZGVkJyxcbi8qKlxuICogRmlyZWQgd2hlbiBhIHNoZWV0IGluIHRoZSBGb3JtdWxhcycgZW5naW5lIGluc3RhbmNlIGlzIHJlbmFtZWQuXG4gKlxuICogQHNpbmNlIDkuMC4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTaGVldFJlbmFtZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvbGREaXNwbGF5TmFtZSBUaGUgb2xkIG5hbWUgb2YgdGhlIHNoZWV0LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0Rpc3BsYXlOYW1lIFRoZSBuZXcgbmFtZSBvZiB0aGUgc2hlZXQuXG4gKi9cbidhZnRlclNoZWV0UmVuYW1lZCcsXG4vKipcbiAqIEZpcmVkIHdoZW4gYSBzaGVldCBpcyByZW1vdmVkIGZyb20gdGhlIEZvcm11bGFzJyBlbmdpbmUgaW5zdGFuY2UuXG4gKlxuICogQHNpbmNlIDkuMC4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJTaGVldFJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdmVkU2hlZXREaXNwbGF5TmFtZSBUaGUgcmVtb3ZlZCBzaGVldCBuYW1lLlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBvZiBhcHBsaWVkIGNoYW5nZXMuXG4gKi9cbidhZnRlclNoZWV0UmVtb3ZlZCcsXG4vKipcbiAqIEZpcmVkIHdoaWxlIHJldHJpZXZpbmcgdGhlIGNvbHVtbiBoZWFkZXIgaGVpZ2h0LlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHRcbiAqL1xuJ21vZGlmeUNvbHVtbkhlYWRlckhlaWdodCcsXG4vKipcbiAqIEZpcmVkIHdoaWxlIHJldHJpZXZpbmcgYSBjb2x1bW4gaGVhZGVyJ3MgdmFsdWUuXG4gKlxuICogQHNpbmNlIDEyLjMuMFxuICogQGV2ZW50IEhvb2tzI21vZGlmeUNvbHVtbkhlYWRlclZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgQSBjb2x1bW4gaGVhZGVyIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbENvbHVtbkluZGV4IEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaGVhZGVyTGV2ZWw9MF0gSGVhZGVyIGxldmVsIGluZGV4LiBBY2NlcHRzIHBvc2l0aXZlIChgMGAgdG8gYG5gKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmUgKGAtMWAgdG8gYC1uYCkgdmFsdWVzLiBGb3IgcG9zaXRpdmUgdmFsdWVzLCBgMGAgcG9pbnRzIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3Btb3N0IGhlYWRlci4gRm9yIG5lZ2F0aXZlIHZhbHVlcywgYC0xYCBwb2ludHMgdG8gdGhlIGJvdHRvbS1tb3N0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciAodGhlIGhlYWRlciBjbG9zZXN0IHRvIHRoZSBjZWxscykuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29sdW1uIGhlYWRlciB2YWx1ZSB0byBiZSB1cGRhdGVkLlxuICovXG4nbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgVW5kb1JlZG99IHBsdWdpbiBiZWZvcmUgdGhlIHVuZG8gYWN0aW9uLiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIHRoYXQgaXMgYmVpbmcgdW5kb25lLlxuICogVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjdW5kb30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVVuZG9cbiAqIEBwYXJhbSB7b2JqZWN0fSBhY3Rpb24gVGhlIGFjdGlvbiBvYmplY3QuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24gYmVpbmcgdW5kb25lLiBUaGUgYGFjdGlvblR5cGVgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5IG9mIHRoZSBvYmplY3Qgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBhY3Rpb24gaW4gYSBTdHJpbmcgZm9ybWF0LiAoZS5nLiBgJ3JlbW92ZV9yb3cnYCkuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlVW5kbycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBVbmRvUmVkb30gcGx1Z2luIGJlZm9yZSBjaGFuZ2luZyB1bmRvIHN0YWNrLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVVbmRvU3RhY2tDaGFuZ2VcbiAqIEBzaW5jZSA4LjQuMFxuICogQHBhcmFtIHtBcnJheX0gZG9uZUFjdGlvbnMgU3RhY2sgb2YgYWN0aW9ucyB3aGljaCBtYXkgYmUgdW5kb25lLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGFjdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNdKEAvZ3VpZGVzL2dldHRpbmctc3RhcnRlZC9ldmVudHMtYW5kLWhvb2tzL2V2ZW50cy1hbmQtaG9va3MubWQjZGVmaW5pdGlvbi1mb3Itc291cmNlLWFyZ3VtZW50KSkuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIG9mIGNoYW5naW5nIHVuZG8gc3RhY2sgaXMgY2FuY2VsZWQuXG4gKi9cbidiZWZvcmVVbmRvU3RhY2tDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgVW5kb1JlZG99IHBsdWdpbiBhZnRlciB0aGUgdW5kbyBhY3Rpb24uIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24gdGhhdCBpcyBiZWluZyB1bmRvbmUuXG4gKiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyN1bmRvfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJVbmRvXG4gKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uIFRoZSBhY3Rpb24gb2JqZWN0LiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHVuZG9uZS4gVGhlIGBhY3Rpb25UeXBlYFxuICogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uIGluIGEgU3RyaW5nIGZvcm1hdC4gKGUuZy4gYCdyZW1vdmVfcm93J2ApLlxuICovXG4nYWZ0ZXJVbmRvJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIFVuZG9SZWRvfSBwbHVnaW4gYWZ0ZXIgY2hhbmdpbmcgdW5kbyBzdGFjay5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJVbmRvU3RhY2tDaGFuZ2VcbiAqIEBzaW5jZSA4LjQuMFxuICogQHBhcmFtIHtBcnJheX0gZG9uZUFjdGlvbnNCZWZvcmUgU3RhY2sgb2YgYWN0aW9ucyB3aGljaCBjb3VsZCBiZSB1bmRvbmUgYmVmb3JlIHBlcmZvcm1pbmcgbmV3IGFjdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IGRvbmVBY3Rpb25zQWZ0ZXIgU3RhY2sgb2YgYWN0aW9ucyB3aGljaCBjYW4gYmUgdW5kb25lIGFmdGVyIHBlcmZvcm1pbmcgbmV3IGFjdGlvbi5cbiAqL1xuJ2FmdGVyVW5kb1N0YWNrQ2hhbmdlJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIFVuZG9SZWRvfSBwbHVnaW4gYmVmb3JlIHRoZSByZWRvIGFjdGlvbi4gQ29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbiB0aGF0IGlzIGJlaW5nIHJlZG9uZS5cbiAqIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI3VuZG99IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVSZWRvXG4gKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uIFRoZSBhY3Rpb24gb2JqZWN0LiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHJlZG9uZS4gVGhlIGBhY3Rpb25UeXBlYFxuICogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uIGluIGEgU3RyaW5nIGZvcm1hdCAoZS5nLiBgJ3JlbW92ZV9yb3cnYCkuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG4nYmVmb3JlUmVkbycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBVbmRvUmVkb30gcGx1Z2luIGJlZm9yZSBjaGFuZ2luZyByZWRvIHN0YWNrLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVSZWRvU3RhY2tDaGFuZ2VcbiAqIEBzaW5jZSA4LjQuMFxuICogQHBhcmFtIHtBcnJheX0gdW5kb25lQWN0aW9ucyBTdGFjayBvZiBhY3Rpb25zIHdoaWNoIG1heSBiZSByZWRvbmUuXG4gKi9cbidiZWZvcmVSZWRvU3RhY2tDaGFuZ2UnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgVW5kb1JlZG99IHBsdWdpbiBhZnRlciB0aGUgcmVkbyBhY3Rpb24uIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhY3Rpb24gdGhhdCBpcyBiZWluZyByZWRvbmUuXG4gKiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyN1bmRvfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJSZWRvXG4gKiBAcGFyYW0ge29iamVjdH0gYWN0aW9uIFRoZSBhY3Rpb24gb2JqZWN0LiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHJlZG9uZS4gVGhlIGBhY3Rpb25UeXBlYFxuICogICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgb2JqZWN0IHNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uIGluIGEgU3RyaW5nIGZvcm1hdCAoZS5nLiBgJ3JlbW92ZV9yb3cnYCkuXG4gKi9cbidhZnRlclJlZG8nLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgVW5kb1JlZG99IHBsdWdpbiBhZnRlciBjaGFuZ2luZyByZWRvIHN0YWNrLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclJlZG9TdGFja0NoYW5nZVxuICogQHNpbmNlIDguNC4wXG4gKiBAcGFyYW0ge0FycmF5fSB1bmRvbmVBY3Rpb25zQmVmb3JlIFN0YWNrIG9mIGFjdGlvbnMgd2hpY2ggY291bGQgYmUgcmVkb25lIGJlZm9yZSBwZXJmb3JtaW5nIG5ldyBhY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSB1bmRvbmVBY3Rpb25zQWZ0ZXIgU3RhY2sgb2YgYWN0aW9ucyB3aGljaCBjYW4gYmUgcmVkb25lIGFmdGVyIHBlcmZvcm1pbmcgbmV3IGFjdGlvbi5cbiAqL1xuJ2FmdGVyUmVkb1N0YWNrQ2hhbmdlJyxcbi8qKlxuICogRmlyZWQgd2hpbGUgcmV0cmlldmluZyB0aGUgcm93IGhlYWRlciB3aWR0aC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjbW9kaWZ5Um93SGVhZGVyV2lkdGhcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dIZWFkZXJXaWR0aCBSb3cgaGVhZGVyIHdpZHRoLlxuICovXG4nbW9kaWZ5Um93SGVhZGVyV2lkdGgnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBmb2N1cyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIChlLmcuIE1vdmluZyB0aGUgZm9jdXMgd2l0aCB0aGUgZW50ZXIvdGFiIGtleXMpLlxuICpcbiAqIEBzaW5jZSAxNC4zLjBcbiAqIEBldmVudCBIb29rcyNtb2RpZnlUcmFuc2Zvcm1Gb2N1c1xuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBkZWx0YSBDZWxsIGNvb3JkcyBvYmplY3QgZGVjbGFyaW5nIHRoZSBkZWx0YSBvZiB0aGUgbmV3IHNlbGVjdGlvbiByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLlxuICovXG4nbW9kaWZ5VHJhbnNmb3JtRm9jdXMnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIChlLmcuIE1vdmluZyB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGFycm93IGtleXMpLlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlUcmFuc2Zvcm1TdGFydFxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBkZWx0YSBDZWxsIGNvb3JkcyBvYmplY3QgZGVjbGFyaW5nIHRoZSBkZWx0YSBvZiB0aGUgbmV3IHNlbGVjdGlvbiByZWxhdGl2ZSB0byB0aGUgcHJldmlvdXMgb25lLlxuICovXG4nbW9kaWZ5VHJhbnNmb3JtU3RhcnQnLFxuLyoqXG4gKiBGaXJlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWluZyBtb2RpZmllZCAoZS5nLiBNb3ZpbmcgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBhcnJvdyBrZXlzKS5cbiAqXG4gKiBAZXZlbnQgSG9va3MjbW9kaWZ5VHJhbnNmb3JtRW5kXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGRlbHRhIENlbGwgY29vcmRzIG9iamVjdCBkZWNsYXJpbmcgdGhlIGRlbHRhIG9mIHRoZSBuZXcgc2VsZWN0aW9uIHJlbGF0aXZlIHRvIHRoZSBwcmV2aW91cyBvbmUuXG4gKi9cbidtb2RpZnlUcmFuc2Zvcm1FbmQnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciB0aGUgZm9jdXMgb2YgdGhlIHNlbGVjdGlvbiBpcyBiZWluZyBtb2RpZmllZCAoZS5nLiBNb3ZpbmcgdGhlIGZvY3VzIHdpdGggdGhlIGVudGVyL3RhYiBrZXlzKS5cbiAqXG4gKiBAc2luY2UgMTQuMy4wXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1c1xuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgQ29vcmRzIG9mIHRoZSBmcmVzaGx5IGZvY3VzZWQgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dUcmFuc2Zvcm1EaXIgYC0xYCBpZiB0cnlpbmcgdG8gZm9jdXMgYSBjZWxsIHdpdGggYSBuZWdhdGl2ZSByb3cgaW5kZXguIGAwYCBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sVHJhbnNmb3JtRGlyIGAtMWAgaWYgdHJ5aW5nIHRvIGZvY3VzIGEgY2VsbCB3aXRoIGEgbmVnYXRpdmUgY29sdW1uIGluZGV4LiBgMGAgb3RoZXJ3aXNlLlxuICovXG4nYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cycsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIChlLmcuIE1vdmluZyB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGFycm93IGtleXMpLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0XG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDb29yZHMgb2YgdGhlIGZyZXNobHkgc2VsZWN0ZWQgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3dUcmFuc2Zvcm1EaXIgYC0xYCBpZiB0cnlpbmcgdG8gc2VsZWN0IGEgY2VsbCB3aXRoIGEgbmVnYXRpdmUgcm93IGluZGV4LiBgMGAgb3RoZXJ3aXNlLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbFRyYW5zZm9ybURpciBgLTFgIGlmIHRyeWluZyB0byBzZWxlY3QgYSBjZWxsIHdpdGggYSBuZWdhdGl2ZSBjb2x1bW4gaW5kZXguIGAwYCBvdGhlcndpc2UuXG4gKi9cbidhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0Jyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlaW5nIG1vZGlmaWVkIChlLmcuIE1vdmluZyB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGFycm93IGtleXMpLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlck1vZGlmeVRyYW5zZm9ybUVuZFxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVmlzdWFsIGNvb3JkcyBvZiB0aGUgZnJlc2hseSBzZWxlY3RlZCBjZWxsLlxuICogQHBhcmFtIHtudW1iZXJ9IHJvd1RyYW5zZm9ybURpciBgLTFgIGlmIHRyeWluZyB0byBzZWxlY3QgYSBjZWxsIHdpdGggYSBuZWdhdGl2ZSByb3cgaW5kZXguIGAwYCBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sVHJhbnNmb3JtRGlyIGAtMWAgaWYgdHJ5aW5nIHRvIHNlbGVjdCBhIGNlbGwgd2l0aCBhIG5lZ2F0aXZlIGNvbHVtbiBpbmRleC4gYDBgIG90aGVyd2lzZS5cbiAqL1xuJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kJyxcbi8qKlxuICogRmlyZWQgaW5zaWRlIHRoZSBgdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGVgIG1ldGhvZC4gQWxsb3dzIG1vZGlmeWluZyB0aGUgcm93IGNhbGN1bGF0b3IgcGFyYW1ldGVycy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZVxuICogQHBhcmFtIHtvYmplY3R9IGNhbGMgVGhlIHJvdyBjYWxjdWxhdG9yLlxuICovXG4nYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZScsXG4vKipcbiAqIEZpcmVkIGluc2lkZSB0aGUgYHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlYCBtZXRob2QuIEFsbG93cyBtb2RpZnlpbmcgdGhlIHJvdyBjYWxjdWxhdG9yIHBhcmFtZXRlcnMuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBjYWxjIFRoZSByb3cgY2FsY3VsYXRvci5cbiAqL1xuJ2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUnLFxuLyoqXG4gKiBGaXJlZCBhZnRlciBpbml0aWFsaXppbmcgYWxsIHRoZSBwbHVnaW5zLlxuICogVGhpcyBob29rIHNob3VsZCBiZSBhZGRlZCBiZWZvcmUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclBsdWdpbnNJbml0aWFsaXplZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogSGFuZHNvbnRhYmxlLmhvb2tzLmFkZCgnYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQnLCBteUNhbGxiYWNrKTtcbiAqIGBgYFxuICovXG4nYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgSGlkZGVuUm93c30gcGx1Z2luIGJlZm9yZSBtYXJraW5nIHRoZSByb3dzIGFzIGhpZGRlbi4gRmlyZWQgb25seSBpZiB0aGUge0BsaW5rIE9wdGlvbnMjaGlkZGVuUm93c30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKiBSZXR1cm5pbmcgYGZhbHNlYCBpbiB0aGUgY2FsbGJhY2sgd2lsbCBwcmV2ZW50IHRoZSBoaWRpbmcgYWN0aW9uIGZyb20gY29tcGxldGluZy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlSGlkZVJvd3NcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRIaWRlQ29uZmlnIEN1cnJlbnQgaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uSGlkZUNvbmZpZyBEZXN0aW5hdGlvbiBoaWRlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgaGlkZGVuIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBhY3Rpb25Qb3NzaWJsZSBgdHJ1ZWAsIGlmIHByb3ZpZGVkIHJvdyBpbmRleGVzIGFyZSB2YWxpZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAsIHRoZSBoaWRpbmcgYWN0aW9uIHdpbGwgbm90IGJlIGNvbXBsZXRlZC5cbiAqL1xuJ2JlZm9yZUhpZGVSb3dzJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIEhpZGRlblJvd3N9IHBsdWdpbiBhZnRlciBtYXJraW5nIHRoZSByb3dzIGFzIGhpZGRlbi4gRmlyZWQgb25seSBpZiB0aGUge0BsaW5rIE9wdGlvbnMjaGlkZGVuUm93c30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVySGlkZVJvd3NcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRIaWRlQ29uZmlnIEN1cnJlbnQgaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uSGlkZUNvbmZpZyBEZXN0aW5hdGlvbiBoaWRlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgaGlkZGVuIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBhY3Rpb25Qb3NzaWJsZSBgdHJ1ZWAsIGlmIHByb3ZpZGVkIHJvdyBpbmRleGVzIGFyZSB2YWxpZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlQ2hhbmdlZCBgdHJ1ZWAsIGlmIHRoZSBhY3Rpb24gYWZmZWN0ZWQgYW55IG5vbi1oaWRkZW4gcm93cywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbidhZnRlckhpZGVSb3dzJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIEhpZGRlblJvd3N9IHBsdWdpbiBiZWZvcmUgbWFya2luZyB0aGUgcm93cyBhcyBub3QgaGlkZGVuLiBGaXJlZCBvbmx5IGlmIHRoZSB7QGxpbmsgT3B0aW9ucyNoaWRkZW5Sb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqIFJldHVybmluZyBgZmFsc2VgIGluIHRoZSBjYWxsYmFjayB3aWxsIHByZXZlbnQgdGhlIHJvdyByZXZlYWxpbmcgYWN0aW9uIGZyb20gY29tcGxldGluZy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVW5oaWRlUm93c1xuICogQHBhcmFtIHtBcnJheX0gY3VycmVudEhpZGVDb25maWcgQ3VycmVudCBoaWRlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgaGlkZGVuIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25IaWRlQ29uZmlnIERlc3RpbmF0aW9uIGhpZGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBoaWRkZW4gcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFjdGlvblBvc3NpYmxlIGB0cnVlYCwgaWYgcHJvdmlkZWQgcm93IGluZGV4ZXMgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8Ym9vbGVhbn0gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYGZhbHNlYCwgdGhlIHJldmVhbGluZyBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYmVmb3JlVW5oaWRlUm93cycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBIaWRkZW5Sb3dzfSBwbHVnaW4gYWZ0ZXIgbWFya2luZyB0aGUgcm93cyBhcyBub3QgaGlkZGVuLiBGaXJlZCBvbmx5IGlmIHRoZSB7QGxpbmsgT3B0aW9ucyNoaWRkZW5Sb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJVbmhpZGVSb3dzXG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50SGlkZUNvbmZpZyBDdXJyZW50IGhpZGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBoaWRkZW4gcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkhpZGVDb25maWcgRGVzdGluYXRpb24gaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiBwcm92aWRlZCByb3cgaW5kZXhlcyBhcmUgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHBhcmFtIHtib29sZWFufSBzdGF0ZUNoYW5nZWQgYHRydWVgLCBpZiB0aGUgYWN0aW9uIGFmZmVjdGVkIGFueSBoaWRkZW4gcm93cywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbidhZnRlclVuaGlkZVJvd3MnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgSGlkZGVuQ29sdW1uc30gcGx1Z2luIGJlZm9yZSBtYXJraW5nIHRoZSBjb2x1bW5zIGFzIGhpZGRlbi4gRmlyZWQgb25seSBpZiB0aGUge0BsaW5rIE9wdGlvbnMjaGlkZGVuQ29sdW1uc30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKiBSZXR1cm5pbmcgYGZhbHNlYCBpbiB0aGUgY2FsbGJhY2sgd2lsbCBwcmV2ZW50IHRoZSBoaWRpbmcgYWN0aW9uIGZyb20gY29tcGxldGluZy5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlSGlkZUNvbHVtbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRIaWRlQ29uZmlnIEN1cnJlbnQgaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uSGlkZUNvbmZpZyBEZXN0aW5hdGlvbiBoaWRlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgaGlkZGVuIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBhY3Rpb25Qb3NzaWJsZSBgdHJ1ZWAsIGlmIHRoZSBwcm92aWRlZCBjb2x1bW4gaW5kZXhlcyBhcmUgdmFsaWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgaGlkaW5nIGFjdGlvbiB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuXG4gKi9cbidiZWZvcmVIaWRlQ29sdW1ucycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBIaWRkZW5Db2x1bW5zfSBwbHVnaW4gYWZ0ZXIgbWFya2luZyB0aGUgY29sdW1ucyBhcyBoaWRkZW4uIEZpcmVkIG9ubHkgaWYgdGhlIHtAbGluayBPcHRpb25zI2hpZGRlbkNvbHVtbnN9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlckhpZGVDb2x1bW5zXG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50SGlkZUNvbmZpZyBDdXJyZW50IGhpZGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBoaWRkZW4gcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkhpZGVDb25maWcgRGVzdGluYXRpb24gaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiB0aGUgcHJvdmlkZWQgY29sdW1uIGluZGV4ZXMgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGVDaGFuZ2VkIGB0cnVlYCwgaWYgdGhlIGFjdGlvbiBhZmZlY3RlZCBhbnkgbm9uLWhpZGRlbiBjb2x1bW5zLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuJ2FmdGVySGlkZUNvbHVtbnMnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgSGlkZGVuQ29sdW1uc30gcGx1Z2luIGJlZm9yZSBtYXJraW5nIHRoZSBjb2x1bW5zIGFzIG5vdCBoaWRkZW4uIEZpcmVkIG9ubHkgaWYgdGhlIHtAbGluayBPcHRpb25zI2hpZGRlbkNvbHVtbnN9IG9wdGlvbiBpcyBlbmFibGVkLlxuICogUmV0dXJuaW5nIGBmYWxzZWAgaW4gdGhlIGNhbGxiYWNrIHdpbGwgcHJldmVudCB0aGUgY29sdW1uIHJldmVhbGluZyBhY3Rpb24gZnJvbSBjb21wbGV0aW5nLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVVbmhpZGVDb2x1bW5zXG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50SGlkZUNvbmZpZyBDdXJyZW50IGhpZGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBoaWRkZW4gcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkhpZGVDb25maWcgRGVzdGluYXRpb24gaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiB0aGUgcHJvdmlkZWQgY29sdW1uIGluZGV4ZXMgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8Ym9vbGVhbn0gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYGZhbHNlYCwgdGhlIGhpZGluZyBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYmVmb3JlVW5oaWRlQ29sdW1ucycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBIaWRkZW5Db2x1bW5zfSBwbHVnaW4gYWZ0ZXIgbWFya2luZyB0aGUgY29sdW1ucyBhcyBub3QgaGlkZGVuLiBGaXJlZCBvbmx5IGlmIHRoZSB7QGxpbmsgT3B0aW9ucyNoaWRkZW5Db2x1bW5zfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJVbmhpZGVDb2x1bW5zXG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50SGlkZUNvbmZpZyBDdXJyZW50IGhpZGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBoaWRkZW4gcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkhpZGVDb25maWcgRGVzdGluYXRpb24gaGlkZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGhpZGRlbiBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiB0aGUgcHJvdmlkZWQgY29sdW1uIGluZGV4ZXMgYXJlIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGVDaGFuZ2VkIGB0cnVlYCwgaWYgdGhlIGFjdGlvbiBhZmZlY3RlZCBhbnkgaGlkZGVuIGNvbHVtbnMsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG4nYWZ0ZXJVbmhpZGVDb2x1bW5zJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIFRyaW1Sb3dzfSBwbHVnaW4gYmVmb3JlIHRyaW1taW5nIHJvd3MuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI3RyaW1Sb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVHJpbVJvd1xuICogQHBhcmFtIHtBcnJheX0gY3VycmVudFRyaW1Db25maWcgQ3VycmVudCB0cmltIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgdHJpbW1lZCBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uVHJpbUNvbmZpZyBEZXN0aW5hdGlvbiB0cmltIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgdHJpbW1lZCBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiBhbGwgb2YgdGhlIHJvdyBpbmRleGVzIGFyZSB3aXRoaW5nIHRoZSBib3VuZHMgb2YgdGhlIHRhYmxlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8Ym9vbGVhbn0gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYGZhbHNlYCwgdGhlIHRyaW1taW5nIGFjdGlvbiB3aWxsIG5vdCBiZSBjb21wbGV0ZWQuXG4gKi9cbidiZWZvcmVUcmltUm93Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIFRyaW1Sb3dzfSBwbHVnaW4gYWZ0ZXIgdHJpbW1pbmcgcm93cy4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjdHJpbVJvd3N9IG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclRyaW1Sb3dcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRUcmltQ29uZmlnIEN1cnJlbnQgdHJpbSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIHRyaW1tZWQgcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvblRyaW1Db25maWcgRGVzdGluYXRpb24gdHJpbSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIHRyaW1tZWQgcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGFjdGlvblBvc3NpYmxlIGB0cnVlYCwgaWYgYWxsIG9mIHRoZSByb3cgaW5kZXhlcyBhcmUgd2l0aGluZyB0aGUgYm91bmRzIG9mIHRoZSB0YWJsZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlQ2hhbmdlZCBgdHJ1ZWAsIGlmIHRoZSBhY3Rpb24gYWZmZWN0ZWQgYW55IG5vbi10cmltbWVkIHJvd3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgdHJpbW1pbmcgYWN0aW9uIHdpbGwgbm90IGJlIGNvbXBsZXRlZC5cbiAqL1xuJ2FmdGVyVHJpbVJvdycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBUcmltUm93c30gcGx1Z2luIGJlZm9yZSB1bnRyaW1taW5nIHJvd3MuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI3RyaW1Sb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVW50cmltUm93XG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50VHJpbUNvbmZpZyBDdXJyZW50IHRyaW0gY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiB0cmltbWVkIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25UcmltQ29uZmlnIERlc3RpbmF0aW9uIHRyaW0gY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiB0cmltbWVkIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBhY3Rpb25Qb3NzaWJsZSBgdHJ1ZWAsIGlmIGFsbCBvZiB0aGUgcm93IGluZGV4ZXMgYXJlIHdpdGhpbmcgdGhlIGJvdW5kcyBvZiB0aGUgdGFibGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgdW50cmltbWluZyBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYmVmb3JlVW50cmltUm93Jyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIFRyaW1Sb3dzfSBwbHVnaW4gYWZ0ZXIgdW50cmltbWluZyByb3dzLiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyN0cmltUm93c30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyVW50cmltUm93XG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50VHJpbUNvbmZpZyBDdXJyZW50IHRyaW0gY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiB0cmltbWVkIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25UcmltQ29uZmlnIERlc3RpbmF0aW9uIHRyaW0gY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiB0cmltbWVkIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBhY3Rpb25Qb3NzaWJsZSBgdHJ1ZWAsIGlmIGFsbCBvZiB0aGUgcm93IGluZGV4ZXMgYXJlIHdpdGhpbmcgdGhlIGJvdW5kcyBvZiB0aGUgdGFibGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHBhcmFtIHtib29sZWFufSBzdGF0ZUNoYW5nZWQgYHRydWVgLCBpZiB0aGUgYWN0aW9uIGFmZmVjdGVkIGFueSB0cmltbWVkIHJvd3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgdW50cmltbWluZyBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYWZ0ZXJVbnRyaW1Sb3cnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgRHJvcGRvd25NZW51fSBwbHVnaW4gYmVmb3JlIG9wZW5pbmcgdGhlIGRyb3Bkb3duIG1lbnUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2Ryb3Bkb3duTWVudX1cbiAqIG9wdGlvbiBpcyBlbmFibGVkLlxuICpcbiAqIEBldmVudCBIb29rcyNiZWZvcmVEcm9wZG93bk1lbnVTaG93XG4gKiBAcGFyYW0ge0Ryb3Bkb3duTWVudX0gZHJvcGRvd25NZW51IFRoZSBgRHJvcGRvd25NZW51YCBpbnN0YW5jZS5cbiAqL1xuJ2JlZm9yZURyb3Bkb3duTWVudVNob3cnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgRHJvcGRvd25NZW51fSBwbHVnaW4gYWZ0ZXIgb3BlbmluZyB0aGUgRHJvcGRvd24gTWVudS4gVGhpcyBob29rIGlzIGZpcmVkIHdoZW4ge0BsaW5rIE9wdGlvbnMjZHJvcGRvd25NZW51fVxuICogb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyRHJvcGRvd25NZW51U2hvd1xuICogQHBhcmFtIHtEcm9wZG93bk1lbnV9IGRyb3Bkb3duTWVudSBUaGUgYERyb3Bkb3duTWVudWAgaW5zdGFuY2UuXG4gKi9cbidhZnRlckRyb3Bkb3duTWVudVNob3cnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgRHJvcGRvd25NZW51fSBwbHVnaW4gYWZ0ZXIgaGlkaW5nIHRoZSBEcm9wZG93biBNZW51LiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyNkcm9wZG93bk1lbnV9XG4gKiBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJEcm9wZG93bk1lbnVIaWRlXG4gKiBAcGFyYW0ge0Ryb3Bkb3duTWVudX0gaW5zdGFuY2UgVGhlIGBEcm9wZG93bk1lbnVgIGluc3RhbmNlLlxuICovXG4nYWZ0ZXJEcm9wZG93bk1lbnVIaWRlJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIE5lc3RlZFJvd3N9IHBsdWdpbiBiZWZvcmUgYWRkaW5nIGEgY2hpbGRyZW4gdG8gdGhlIGBOZXN0ZWRSb3dzYCBzdHJ1Y3R1cmUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuXG4gKiB7QGxpbmsgT3B0aW9ucyNuZXN0ZWRSb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlQWRkQ2hpbGRcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnQgVGhlIHBhcmVudCBvYmplY3QuXG4gKiBAcGFyYW0ge29iamVjdHx1bmRlZmluZWR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgYWRkZWQgYXMgYSBjaGlsZC4gSWYgYHVuZGVmaW5lZGAsIGEgYmxhbmsgY2hpbGQgd2FzIGFkZGVkLlxuICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBpbmRleCBUaGUgaW5kZXggd2l0aGluIHRoZSBwYXJlbnQgd2hlcmUgdGhlIG5ldyBjaGlsZCB3YXMgYWRkZWQuIElmIGB1bmRlZmluZWRgLCB0aGUgZWxlbWVudCB3YXMgYWRkZWQgYXMgdGhlIGxhc3QgY2hpbGQuXG4gKi9cbidiZWZvcmVBZGRDaGlsZCcsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBOZXN0ZWRSb3dzfSBwbHVnaW4gYWZ0ZXIgYWRkaW5nIGEgY2hpbGRyZW4gdG8gdGhlIGBOZXN0ZWRSb3dzYCBzdHJ1Y3R1cmUuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuXG4gKiB7QGxpbmsgT3B0aW9ucyNuZXN0ZWRSb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJBZGRDaGlsZFxuICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBUaGUgcGFyZW50IG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fHVuZGVmaW5lZH0gZWxlbWVudCBUaGUgZWxlbWVudCBhZGRlZCBhcyBhIGNoaWxkLiBJZiBgdW5kZWZpbmVkYCwgYSBibGFuayBjaGlsZCB3YXMgYWRkZWQuXG4gKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGluZGV4IFRoZSBpbmRleCB3aXRoaW4gdGhlIHBhcmVudCB3aGVyZSB0aGUgbmV3IGNoaWxkIHdhcyBhZGRlZC4gSWYgYHVuZGVmaW5lZGAsIHRoZSBlbGVtZW50IHdhcyBhZGRlZCBhcyB0aGUgbGFzdCBjaGlsZC5cbiAqL1xuJ2FmdGVyQWRkQ2hpbGQnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTmVzdGVkUm93c30gcGx1Z2luIGJlZm9yZSBkZXRhY2hpbmcgYSBjaGlsZCBmcm9tIGl0cyBwYXJlbnQuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuXG4gKiB7QGxpbmsgT3B0aW9ucyNuZXN0ZWRSb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlRGV0YWNoQ2hpbGRcbiAqIEBwYXJhbSB7b2JqZWN0fSBwYXJlbnQgQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGZyb20gd2hpY2ggdGhlIGVsZW1lbnQgaXMgdG8gYmUgZGV0YWNoZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudCBUaGUgZGV0YWNoZWQgZWxlbWVudC5cbiAqL1xuJ2JlZm9yZURldGFjaENoaWxkJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIE5lc3RlZFJvd3N9IHBsdWdpbiBhZnRlciBkZXRhY2hpbmcgYSBjaGlsZCBmcm9tIGl0cyBwYXJlbnQuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuXG4gKiB7QGxpbmsgT3B0aW9ucyNuZXN0ZWRSb3dzfSBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJEZXRhY2hDaGlsZFxuICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJlbnQgZnJvbSB3aGljaCB0aGUgZWxlbWVudCB3YXMgZGV0YWNoZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudCBUaGUgZGV0YWNoZWQgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmaW5hbEVsZW1lbnRQb3NpdGlvbiBUaGUgZmluYWwgcm93IGluZGV4IG9mIHRoZSBkZXRhY2hlZCBlbGVtZW50LlxuICovXG4nYWZ0ZXJEZXRhY2hDaGlsZCcsXG4vKipcbiAqIEZpcmVkIGJlZm9yZSB0aGUgZWRpdG9yIGlzIG9wZW5lZCBhbmQgcmVuZGVyZWQuXG4gKlxuICogQHNpbmNlIDE0LjIuMFxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUJlZ2luRWRpdGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4IG9mIHRoZSBlZGl0ZWQgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleCBvZiB0aGUgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0geyp9IGluaXRpYWxWYWx1ZSBUaGUgaW5pdGlhbCBlZGl0b3IgdmFsdWUuXG4gKiBAcGFyYW0ge01vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50fSBldmVudCBUaGUgZXZlbnQgd2hpY2ggd2FzIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIHRoZSBlZGl0b3IuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGZ1bGxFZGl0TW9kZSBgdHJ1ZWAgaWYgdGhlIGVkaXRvciBpcyBvcGVuZWQgaW4gZnVsbCBlZGl0IG1vZGUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogRWRpdG9yIG9wZW5lZCBpbiBmdWxsIGVkaXQgbW9kZSBkb2VzIG5vdCBjbG9zZSBhZnRlciBwcmVzc2luZyBBcnJvdyBrZXlzLlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9IElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGBmYWxzZSxgIHRoZSBlZGl0b3Igd29uJ3QgYmUgb3BlbmVkIGFmdGVyXG4gKiB0aGUgbW91c2UgZG91YmxlIGNsaWNrIG9yIGFmdGVyIHByZXNzaW5nIHRoZSBFbnRlciBrZXkuIFJldHVybmluZyBgdW5kZWZpbmVkYCAob3Igb3RoZXIgdmFsdWVcbiAqIHRoYW4gYm9vbGVhbikgd2lsbCByZXN1bHQgaW4gZGVmYXVsdCBiZWhhdmlvciwgd2hpY2ggZGlzYWxsb3dzIG9wZW5pbmcgYW4gZWRpdG9yIGZvciBub24tY29udGlndW91c1xuICogc2VsZWN0aW9uICh3aGlsZSBwcmVzc2luZyBDdHJsL0NtZCkgYW5kIGZvciBtdWx0aXBsZSBzZWxlY3RlZCBjZWxscyAod2hpbGUgcHJlc3NpbmcgU0hJRlQpLlxuICogUmV0dXJuaW5nIGB0cnVlYCByZW1vdmVzIHRob3NlIHJlc3RyaWN0aW9ucy5cbiAqL1xuJ2JlZm9yZUJlZ2luRWRpdGluZycsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSBlZGl0b3IgaXMgb3BlbmVkIGFuZCByZW5kZXJlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJCZWdpbkVkaXRpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleCBvZiB0aGUgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXggb2YgdGhlIGVkaXRlZCBjZWxsLlxuICovXG4nYWZ0ZXJCZWdpbkVkaXRpbmcnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWVyZ2VDZWxsc30gcGx1Z2luIGJlZm9yZSBjZWxsIG1lcmdpbmcuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21lcmdlQ2VsbHN9XG4gKiBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlTWVyZ2VDZWxsc1xuICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBTZWxlY3Rpb24gY2VsbCByYW5nZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG89ZmFsc2VdIGB0cnVlYCBpZiBjYWxsZWQgYXV0b21hdGljYWxseSBieSB0aGUgcGx1Z2luLlxuICovXG4nYmVmb3JlTWVyZ2VDZWxscycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBNZXJnZUNlbGxzfSBwbHVnaW4gYWZ0ZXIgY2VsbCBtZXJnaW5nLiBUaGlzIGhvb2sgaXMgZmlyZWQgd2hlbiB7QGxpbmsgT3B0aW9ucyNtZXJnZUNlbGxzfVxuICogb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyTWVyZ2VDZWxsc1xuICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBTZWxlY3Rpb24gY2VsbCByYW5nZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBtZXJnZVBhcmVudCBUaGUgcGFyZW50IGNvbGxlY3Rpb24gb2YgdGhlIHByb3ZpZGVkIGNlbGwgcmFuZ2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvPWZhbHNlXSBgdHJ1ZWAgaWYgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHBsdWdpbi5cbiAqL1xuJ2FmdGVyTWVyZ2VDZWxscycsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBNZXJnZUNlbGxzfSBwbHVnaW4gYmVmb3JlIHVubWVyZ2luZyB0aGUgY2VsbHMuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21lcmdlQ2VsbHN9XG4gKiBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYmVmb3JlVW5tZXJnZUNlbGxzXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gY2VsbFJhbmdlIFNlbGVjdGlvbiBjZWxsIHJhbmdlLlxuICogQHBhcmFtIHtib29sZWFufSBbYXV0bz1mYWxzZV0gYHRydWVgIGlmIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBwbHVnaW4uXG4gKi9cbidiZWZvcmVVbm1lcmdlQ2VsbHMnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgTWVyZ2VDZWxsc30gcGx1Z2luIGFmdGVyIHVubWVyZ2luZyB0aGUgY2VsbHMuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI21lcmdlQ2VsbHN9XG4gKiBvcHRpb24gaXMgZW5hYmxlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJVbm1lcmdlQ2VsbHNcbiAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBjZWxsUmFuZ2UgU2VsZWN0aW9uIGNlbGwgcmFuZ2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthdXRvPWZhbHNlXSBgdHJ1ZWAgaWYgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIHBsdWdpbi5cbiAqL1xuJ2FmdGVyVW5tZXJnZUNlbGxzJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHRhYmxlIHdhcyBzd2l0Y2hlZCBpbnRvIGxpc3RlbmluZyBtb2RlLiBUaGlzIGFsbG93cyBIYW5kc29udGFibGUgdG8gY2FwdHVyZSBrZXlib2FyZCBldmVudHMgYW5kXG4gKiByZXNwb25kIGluIHRoZSByaWdodCB3YXkuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyTGlzdGVuXG4gKi9cbidhZnRlckxpc3RlbicsXG4vKipcbiAqIEZpcmVkIGFmdGVyIHRoZSB0YWJsZSB3YXMgc3dpdGNoZWQgb2ZmIGZyb20gdGhlIGxpc3RlbmluZyBtb2RlLiBUaGlzIG1ha2VzIHRoZSBIYW5kc29udGFibGUgaW5lcnQgZm9yIGFueVxuICoga2V5Ym9hcmQgZXZlbnRzLlxuICpcbiAqIEBldmVudCBIb29rcyNhZnRlclVubGlzdGVuXG4gKi9cbidhZnRlclVubGlzdGVuJyxcbi8qKlxuICogRmlyZWQgYWZ0ZXIgdGhlIHdpbmRvdyB3YXMgcmVzaXplZCBvciB0aGUgc2l6ZSBvZiB0aGUgSGFuZHNvbnRhYmxlIHJvb3QgZWxlbWVudCB3YXMgY2hhbmdlZC5cbiAqXG4gKiBAZXZlbnQgSG9va3MjYWZ0ZXJSZWZyZXNoRGltZW5zaW9uc1xuICogQHBhcmFtIHt7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH19IHByZXZpb3VzRGltZW5zaW9ucyBQcmV2aW91cyBkaW1lbnNpb25zIG9mIHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge3sgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfX0gY3VycmVudERpbWVuc2lvbnMgQ3VycmVudCBkaW1lbnNpb25zIG9mIHRoZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN0YXRlQ2hhbmdlZCBgdHJ1ZWAsIGlmIHRoZSBjb250YWluZXIgd2FzIHJlLXJlbmRlciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbidhZnRlclJlZnJlc2hEaW1lbnNpb25zJyxcbi8qKlxuICogQ2FuY2VsbGFibGUgaG9vaywgY2FsbGVkIGFmdGVyIHJlc2l6aW5nIGEgd2luZG93IG9yIGFmdGVyIGRldGVjdGluZyBzaXplIGNoYW5nZSBvZiB0aGVcbiAqIEhhbmRzb250YWJsZSByb290IGVsZW1lbnQsIGJ1dCBiZWZvcmUgcmVkcmF3aW5nIGEgdGFibGUuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZVJlZnJlc2hEaW1lbnNpb25zXG4gKiBAcGFyYW0ge3sgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIgfX0gcHJldmlvdXNEaW1lbnNpb25zIFByZXZpb3VzIGRpbWVuc2lvbnMgb2YgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7eyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9fSBjdXJyZW50RGltZW5zaW9ucyBDdXJyZW50IGRpbWVuc2lvbnMgb2YgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWN0aW9uUG9zc2libGUgYHRydWVgLCBpZiBjdXJyZW50IGFuZCBwcmV2aW91cyBkaW1lbnNpb25zIGFyZSBkaWZmZXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgcmVmcmVzaCBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29sbGFwc2libGVDb2x1bW5zfSBwbHVnaW4gYmVmb3JlIGNvbHVtbnMgY29sbGFwc2UuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvbGxhcHNpYmxlQ29sdW1uc30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUNvbHVtbkNvbGxhcHNlXG4gKiBAc2luY2UgOC4wLjBcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRDb2xsYXBzZWRDb2x1bW5zIEN1cnJlbnQgY29sbGFwc2libGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBjb2xsYXBzaWJsZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uQ29sbGFwc2VkQ29sdW1ucyBEZXN0aW5hdGlvbiBjb2xsYXBzaWJsZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGNvbGxhcHNpYmxlIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBjb2xsYXBzZVBvc3NpYmxlIGB0cnVlYCwgaWYgYWxsIG9mIHRoZSBjb2x1bW4gaW5kZXhlcyBhcmUgd2l0aGluZyB0aGUgYm91bmRzIG9mIHRoZSBjb2xsYXBzZWQgc2VjdGlvbnMsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQHJldHVybnMge3VuZGVmaW5lZHxib29sZWFufSBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBgZmFsc2VgLCB0aGUgY29sbGFwc2luZyBhY3Rpb24gd2lsbCBub3QgYmUgY29tcGxldGVkLlxuICovXG4nYmVmb3JlQ29sdW1uQ29sbGFwc2UnLFxuLyoqXG4gKiBGaXJlZCBieSB7QGxpbmsgQ29sbGFwc2libGVDb2x1bW5zfSBwbHVnaW4gYmVmb3JlIGNvbHVtbnMgY29sbGFwc2UuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvbGxhcHNpYmxlQ29sdW1uc30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29sdW1uQ29sbGFwc2VcbiAqIEBzaW5jZSA4LjAuMFxuICogQHBhcmFtIHtBcnJheX0gY3VycmVudENvbGxhcHNlZENvbHVtbnMgQ3VycmVudCBjb2xsYXBzaWJsZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGNvbGxhcHNpYmxlIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gZGVzdGluYXRpb25Db2xsYXBzZWRDb2x1bW5zIERlc3RpbmF0aW9uIGNvbGxhcHNpYmxlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgY29sbGFwc2libGUgcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNvbGxhcHNlUG9zc2libGUgYHRydWVgLCBpZiBhbGwgb2YgdGhlIGNvbHVtbiBpbmRleGVzIGFyZSB3aXRoaW5nIHRoZSBib3VuZHMgb2YgdGhlIGNvbGxhcHNlZCBzZWN0aW9ucywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHN1Y2Nlc3NmdWxseUNvbGxhcHNlZCBgdHJ1ZWAsIGlmIHRoZSBhY3Rpb24gYWZmZWN0ZWQgYW55IG5vbi1jb2xsYXBzaWJsZSBjb2x1bW4sIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG4nYWZ0ZXJDb2x1bW5Db2xsYXBzZScsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBDb2xsYXBzaWJsZUNvbHVtbnN9IHBsdWdpbiBiZWZvcmUgY29sdW1ucyBleHBhbmQuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvbGxhcHNpYmxlQ29sdW1uc30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2JlZm9yZUNvbHVtbkV4cGFuZFxuICogQHNpbmNlIDguMC4wXG4gKiBAcGFyYW0ge0FycmF5fSBjdXJyZW50Q29sbGFwc2VkQ29sdW1ucyBDdXJyZW50IGNvbGxhcHNpYmxlIGNvbmZpZ3VyYXRpb24gLSBhIGxpc3Qgb2YgY29sbGFwc2libGUgcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBkZXN0aW5hdGlvbkNvbGxhcHNlZENvbHVtbnMgRGVzdGluYXRpb24gY29sbGFwc2libGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBjb2xsYXBzaWJsZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhwYW5kUG9zc2libGUgYHRydWVgLCBpZiBhbGwgb2YgdGhlIGNvbHVtbiBpbmRleGVzIGFyZSB3aXRoaW5nIHRoZSBib3VuZHMgb2YgdGhlIGNvbGxhcHNlZCBzZWN0aW9ucywgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfGJvb2xlYW59IElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGBmYWxzZWAsIHRoZSBleHBhbmRpbmcgYWN0aW9uIHdpbGwgbm90IGJlIGNvbXBsZXRlZC5cbiAqL1xuJ2JlZm9yZUNvbHVtbkV4cGFuZCcsXG4vKipcbiAqIEZpcmVkIGJ5IHtAbGluayBDb2xsYXBzaWJsZUNvbHVtbnN9IHBsdWdpbiBiZWZvcmUgY29sdW1ucyBleHBhbmQuIFRoaXMgaG9vayBpcyBmaXJlZCB3aGVuIHtAbGluayBPcHRpb25zI2NvbGxhcHNpYmxlQ29sdW1uc30gb3B0aW9uIGlzIGVuYWJsZWQuXG4gKlxuICogQGV2ZW50IEhvb2tzI2FmdGVyQ29sdW1uRXhwYW5kXG4gKiBAc2luY2UgOC4wLjBcbiAqIEBwYXJhbSB7QXJyYXl9IGN1cnJlbnRDb2xsYXBzZWRDb2x1bW5zIEN1cnJlbnQgY29sbGFwc2libGUgY29uZmlndXJhdGlvbiAtIGEgbGlzdCBvZiBjb2xsYXBzaWJsZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRlc3RpbmF0aW9uQ29sbGFwc2VkQ29sdW1ucyBEZXN0aW5hdGlvbiBjb2xsYXBzaWJsZSBjb25maWd1cmF0aW9uIC0gYSBsaXN0IG9mIGNvbGxhcHNpYmxlIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzLlxuICogQHBhcmFtIHtib29sZWFufSBleHBhbmRQb3NzaWJsZSBgdHJ1ZWAsIGlmIGFsbCBvZiB0aGUgY29sdW1uIGluZGV4ZXMgYXJlIHdpdGhpbmcgdGhlIGJvdW5kcyBvZiB0aGUgY29sbGFwc2VkIHNlY3Rpb25zLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc3VjY2Vzc2Z1bGx5RXhwYW5kZWQgYHRydWVgLCBpZiB0aGUgYWN0aW9uIGFmZmVjdGVkIGFueSBub24tY29sbGFwc2libGUgY29sdW1uLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuJ2FmdGVyQ29sdW1uRXhwYW5kJyxcbi8qKlxuICogRmlyZWQgYnkge0BsaW5rIEF1dG9Db2x1bW5TaXplfSBwbHVnaW4gd2l0aGluIFNhbXBsZUdlbmVyYXRvciB1dGlsaXR5LlxuICpcbiAqIEBldmVudCBIb29rcyNtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWRcbiAqIEBzaW5jZSA4LjQuMFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBzZWVkIFNlZWQgSUQsIHVuaXF1ZSBuYW1lIHRvIGNhdGVnb3JpemUgc2FtcGxlcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBPYmplY3QgY29udGFpbmluZyB0aGUgY2VsbCBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHsqfSBjZWxsVmFsdWUgVmFsdWUgb2YgdGhlIGNlbGwuXG4gKi9cbidtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQnXTtcblxuLyoqXG4gKiBUZW1wbGF0ZSB3YXJuaW5nIG1lc3NhZ2UgZm9yIHJlbW92ZWQgaG9va3MuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgUkVNT1ZFRF9NRVNTQUdFID0gKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBUaGUgcGx1Z2luIGhvb2sgXCJbaG9va05hbWVdXCIgd2FzIHJlbW92ZWQgaW4gSGFuZHNvbnRhYmxlIFtyZW1vdmVkSW5WZXJzaW9uXS5cXHgyMFxuICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0gdG9cXHgyMFxuICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYDtcblxuLyoqXG4gKiBUaGUgbGlzdCBvZiB0aGUgaG9va3Mgd2hpY2ggYXJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJLiBUaGUgd2FybmluZyBtZXNzYWdlIGlzIHByaW50ZWQgb3V0IGluXG4gKiB0aGUgZGV2ZWxvcGVyIGNvbnNvbGUgd2hlbiB0aGUgaG9vayBpcyB1c2VkLlxuICpcbiAqIFRoZSBNYXAga2V5IGlzIHJlcHJlc2VudGVkIGJ5IGhvb2sgbmFtZSBhbmQgaXRzIHZhbHVlIHBvaW50cyB0byB0aGUgSGFuZHNvbnRhYmxlIHZlcnNpb25cbiAqIGluIHdoaWNoIGl0IHdhcyByZW1vdmVkLlxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5jb25zdCBSRU1PVkVEX0hPT0tTID0gbmV3IE1hcChbWydtb2RpZnlSb3cnLCAnOC4wLjAnXSwgWydtb2RpZnlDb2wnLCAnOC4wLjAnXSwgWyd1bm1vZGlmeVJvdycsICc4LjAuMCddLCBbJ3VubW9kaWZ5Q29sJywgJzguMC4wJ10sIFsnc2tpcExlbmd0aENhY2hlJywgJzguMC4wJ10sIFsnaGlkZGVuQ29sdW1uJywgJzguMC4wJ10sIFsnaGlkZGVuUm93JywgJzguMC4wJ11dKTtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBUaGUgbGlzdCBvZiB0aGUgaG9va3Mgd2hpY2ggYXJlIGRlcHJlY2F0ZWQuIFRoZSB3YXJuaW5nIG1lc3NhZ2UgaXMgcHJpbnRlZCBvdXQgaW5cbiAqIHRoZSBkZXZlbG9wZXIgY29uc29sZSB3aGVuIHRoZSBob29rIGlzIHVzZWQuXG4gKlxuICogVGhlIE1hcCBrZXkgaXMgcmVwcmVzZW50ZWQgYnkgaG9vayBuYW1lIGFuZCBpdHMgdmFsdWUga2VlcHMgbWVzc2FnZSB3aGljaCB3aG91bGQgYmVcbiAqIHByaW50ZWQgb3V0IHdoZW4gdGhlIGhvb2sgaXMgdXNlZC5cbiAqXG4gKiBVc2FnZTpcbiAqIGBgYGpzXG4gKiAuLi5cbiAqIE5ldyBNYXAoW1xuICogICBbJ2JlZm9yZUNvbHVtbkV4cGFuZCcsICdUaGUgcGx1Z2luIGhvb2sgXCJiZWZvcmVDb2x1bW5FeHBhbmRcIiBpcyBkZXByZWNhdGVkLiBVc2UgXCJiZWZvcmVDb2x1bW5FeHBhbmQyXCIgaW5zdGVhZC4nXSxcbiAqIF0pXG4gKiAuLi5cbiAqIGBgYFxuICpcbiAqXG4gKiBAdHlwZSB7TWFwPHN0cmluZywgc3RyaW5nPn1cbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5jb25zdCBERVBSRUNBVEVEX0hPT0tTID0gbmV3IE1hcChbW11dKTtcbmNvbnN0IGNhbGxiYWNrT3JkZXIgPSBuZXcgV2Vha01hcCgpO1xuY2xhc3MgSG9va3Mge1xuICBzdGF0aWMgZ2V0U2luZ2xldG9uKCkge1xuICAgIHJldHVybiBnZXRHbG9iYWxTaW5nbGV0b24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKi9cblxuICAvKipcbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdsb2JhbEJ1Y2tldFwiLCB2b2lkIDApO1xuICAgIHRoaXMuZ2xvYmFsQnVja2V0ID0gdGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHdpdGggZW1wdHkgaGFuZGxlcnMgcmVsYXRlZCB0byBldmVyeSByZWdpc3RlcmVkIGhvb2sgbmFtZS5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gVGhlIGVtcHR5IGJ1Y2tldCBvYmplY3QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIEhhbmRzb250YWJsZS5ob29rcy5jcmVhdGVFbXB0eUJ1Y2tldCgpO1xuICAgKiAvLyBSZXN1bHRzOlxuICAgKiB7XG4gICAqIC4uLlxuICAgKiBhZnRlckNyZWF0ZUNvbDogW10sXG4gICAqIGFmdGVyQ3JlYXRlUm93OiBbXSxcbiAgICogYmVmb3JlSW5pdDogW10sXG4gICAqIC4uLlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgY3JlYXRlRW1wdHlCdWNrZXQoKSB7XG4gICAgY29uc3QgYnVja2V0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKFJFR0lTVEVSRURfSE9PS1MsIGhvb2sgPT4ge1xuICAgICAgYnVja2V0W2hvb2tdID0gW107XG4gICAgICB0aGlzLmluaXRPcmRlck1hcChidWNrZXQsIGhvb2spO1xuICAgIH0pO1xuICAgIHJldHVybiBidWNrZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGhvb2sgYnVja2V0IGJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHRoZSBvYmplY3Qgb3IgaWYgYXJndW1lbnQgaXMgYHVuZGVmaW5lZGAsIGdldCB0aGUgZ2xvYmFsIGhvb2sgYnVja2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9bnVsbF0gQSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgYSBnbG9iYWwgb3IgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJ1Y2tldC5cbiAgICovXG4gIGdldEJ1Y2tldCgpIHtcbiAgICBsZXQgY29udGV4dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaWYgKCFjb250ZXh0LnBsdWdpbkhvb2tCdWNrZXQpIHtcbiAgICAgICAgY29udGV4dC5wbHVnaW5Ib29rQnVja2V0ID0gdGhpcy5jcmVhdGVFbXB0eUJ1Y2tldCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRleHQucGx1Z2luSG9va0J1Y2tldDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsQnVja2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBsaXN0ZW5lciAoZ2xvYmFsbHkgb3IgbG9jYWxseSkgdG8gYSBzcGVjaWZpZWQgaG9vayBuYW1lLlxuICAgKiBJZiB0aGUgYGNvbnRleHRgIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgdGhlIGhvb2sgd2lsbCBiZSBhZGRlZCBvbmx5IHRvIHRoZSBpbnN0YW5jZSBpdCByZWZlcmVuY2VzLlxuICAgKiBPdGhlcndpc2UsIHRoZSBjYWxsYmFjayB3aWxsIGJlIHVzZWQgZXZlcnl0aW1lIHRoZSBob29rIGZpcmVzIG9uIGFueSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIFlvdSBjYW4gcHJvdmlkZSBhbiBhcnJheSBvZiBjYWxsYmFjayBmdW5jdGlvbnMgYXMgdGhlIGBjYWxsYmFja2AgYXJndW1lbnQsIHRoaXMgd2F5IHRoZXkgd2lsbCBhbGwgYmUgZmlyZWRcbiAgICogb25jZSB0aGUgaG9vayBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBzZWUgQ29yZSNhZGRIb29rXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufEFycmF5fSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiBvciBhbiBhcnJheSBvZiBmdW5jdGlvbnMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dD1udWxsXSBUaGUgY29udGV4dCBmb3IgdGhlIGhvb2sgY2FsbGJhY2sgdG8gYmUgYWRkZWQgLSBhIEhhbmRzb250YWJsZSBpbnN0YW5jZSBvciBsZWF2ZSBlbXB0eS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlckluZGV4XSBPcmRlciBpbmRleCBvZiB0aGUgY2FsbGJhY2suXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPiAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBhZnRlciB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAxLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAyLCAzLCBldGMuLCBidXQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBsb3dlci5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8IDAsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGJlZm9yZSB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAtMSwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAtMiwgLTMsIGV0Yy4sIGJ1dCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBoaWdoZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgMCBvciBubyBvcmRlciBpbmRleCBpcyBwcm92aWRlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiB0aGUgXCJuZWdhdGl2ZVwiIGFuZCBcInBvc2l0aXZlXCIgaW5kZXhlcy5cbiAgICogQHJldHVybnMge0hvb2tzfSBJbnN0YW5jZSBvZiBIb29rcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gc2luZ2xlIGNhbGxiYWNrLCBhZGRlZCBsb2NhbGx5XG4gICAqIEhhbmRzb250YWJsZS5ob29rcy5hZGQoJ2JlZm9yZUluaXQnLCBteUNhbGxiYWNrLCBob3RJbnN0YW5jZSk7XG4gICAqXG4gICAqIC8vIHNpbmdsZSBjYWxsYmFjaywgYWRkZWQgZ2xvYmFsbHlcbiAgICogSGFuZHNvbnRhYmxlLmhvb2tzLmFkZCgnYmVmb3JlSW5pdCcsIG15Q2FsbGJhY2spO1xuICAgKlxuICAgKiAvLyBtdWx0aXBsZSBjYWxsYmFja3MsIGFkZGVkIGxvY2FsbHlcbiAgICogSGFuZHNvbnRhYmxlLmhvb2tzLmFkZCgnYmVmb3JlSW5pdCcsIFtteUNhbGxiYWNrLCBhbm90aGVyQ2FsbGJhY2tdLCBob3RJbnN0YW5jZSk7XG4gICAqXG4gICAqIC8vIG11bHRpcGxlIGNhbGxiYWNrcywgYWRkZWQgZ2xvYmFsbHlcbiAgICogSGFuZHNvbnRhYmxlLmhvb2tzLmFkZCgnYmVmb3JlSW5pdCcsIFtteUNhbGxiYWNrLCBhbm90aGVyQ2FsbGJhY2tdKTtcbiAgICogYGBgXG4gICAqL1xuICBhZGQoa2V5LCBjYWxsYmFjaykge1xuICAgIGxldCBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgIGxldCBvcmRlckluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2FsbGJhY2ssIGMgPT4gdGhpcy5hZGQoa2V5LCBjLCBjb250ZXh0KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChSRU1PVkVEX0hPT0tTLmhhcyhrZXkpKSB7XG4gICAgICAgICgwLCBfY29uc29sZS53YXJuKSgoMCwgX3N0cmluZy5zdWJzdGl0dXRlKShSRU1PVkVEX01FU1NBR0UsIHtcbiAgICAgICAgICBob29rTmFtZToga2V5LFxuICAgICAgICAgIHJlbW92ZWRJblZlcnNpb246IFJFTU9WRURfSE9PS1MuZ2V0KGtleSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKERFUFJFQ0FURURfSE9PS1MuaGFzKGtleSkpIHtcbiAgICAgICAgKDAsIF9jb25zb2xlLndhcm4pKERFUFJFQ0FURURfSE9PS1MuZ2V0KGtleSkpO1xuICAgICAgfVxuICAgICAgY29uc3QgYnVja2V0ID0gdGhpcy5nZXRCdWNrZXQoY29udGV4dCk7XG4gICAgICBpZiAodHlwZW9mIGJ1Y2tldFtrZXldID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyKGtleSk7XG4gICAgICAgIGJ1Y2tldFtrZXldID0gW107XG4gICAgICAgIHRoaXMuaW5pdE9yZGVyTWFwKGJ1Y2tldCwga2V5KTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrLnNraXAgPSBmYWxzZTtcbiAgICAgIGlmIChidWNrZXRba2V5XS5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTEpIHtcbiAgICAgICAgLy8gb25seSBhZGQgYSBob29rIGlmIGl0IGhhcyBub3QgYWxyZWFkeSBiZWVuIGFkZGVkIChhZGRpbmcgdGhlIHNhbWUgaG9vayB0d2ljZSBpcyBub3cgc2lsZW50bHkgaWdub3JlZClcbiAgICAgICAgbGV0IGZvdW5kSW5pdGlhbEhvb2sgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNhbGxiYWNrLmluaXRpYWxIb29rKSB7XG4gICAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGJ1Y2tldFtrZXldLCAoY2IsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChjYi5pbml0aWFsSG9vaykge1xuICAgICAgICAgICAgICBidWNrZXRba2V5XVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICBmb3VuZEluaXRpYWxIb29rID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRJbml0aWFsSG9vaykge1xuICAgICAgICAgIGJ1Y2tldFtrZXldLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldENhbGxiYWNrT3JkZXJJbmRleChidWNrZXQsIGtleSwgY2FsbGJhY2ssIG9yZGVySW5kZXgpO1xuICAgICAgdGhpcy5vcmRlckJ1Y2tldEJ5T3JkZXJJbmRleChidWNrZXQsIGtleSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBsaXN0ZW5lciB0byBhIHNwZWNpZmllZCBob29rLiBBZnRlciB0aGUgaG9vayBydW5zIHRoaXMgbGlzdGVuZXIgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSB0aGUgYnVja2V0LlxuICAgKlxuICAgKiBAc2VlIENvcmUjYWRkSG9va09uY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBIb29rL0V2ZW50IG5hbWUuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb258QXJyYXl9IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9bnVsbF0gQSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3JkZXJJbmRleF0gT3JkZXIgaW5kZXggb2YgdGhlIGNhbGxiYWNrLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmID4gMCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIG90aGVycywgZm9yIGV4YW1wbGUsIHdpdGggYW4gaW5kZXggb2YgMSwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYmVmb3JlIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMiwgMywgZXRjLiwgYnV0IGFmdGVyIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMCBhbmQgbG93ZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPCAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG90aGVycywgZm9yIGV4YW1wbGUsIHdpdGggYW4gaW5kZXggb2YgLTEsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGFmdGVyIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgLTIsIC0zLCBldGMuLCBidXQgYmVmb3JlIHRoZSBvbmVzIHdpdGggYW4gaW5kZXggb2YgMCBhbmQgaGlnaGVyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIDAgb3Igbm8gb3JkZXIgaW5kZXggaXMgcHJvdmlkZWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGJldHdlZW4gdGhlIFwibmVnYXRpdmVcIiBhbmQgXCJwb3NpdGl2ZVwiIGluZGV4ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIEhhbmRzb250YWJsZS5ob29rcy5vbmNlKCdiZWZvcmVJbml0JywgbXlDYWxsYmFjaywgaG90SW5zdGFuY2UpO1xuICAgKiBgYGBcbiAgICovXG4gIG9uY2Uoa2V5LCBjYWxsYmFjaykge1xuICAgIGxldCBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICAgIGxldCBvcmRlckluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgPyBhcmd1bWVudHNbM10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2FsbGJhY2spKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2FsbGJhY2ssIGMgPT4gdGhpcy5vbmNlKGtleSwgYywgY29udGV4dCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjay5ydW5PbmNlID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWRkKGtleSwgY2FsbGJhY2ssIGNvbnRleHQsIG9yZGVySW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbGlzdGVuZXIgZnJvbSBhIGhvb2sgd2l0aCBhIGdpdmVuIG5hbWUuIElmIHRoZSBgY29udGV4dGAgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHJlbW92ZXMgYSBsaXN0ZW5lciBmcm9tIGEgbG9jYWwgaG9vayBhc3NpZ25lZCB0byB0aGUgZ2l2ZW4gSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAc2VlIENvcmUjcmVtb3ZlSG9va1xuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEhvb2svRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gKG5lZWRzIHRoZSBiZSB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgaG9vaykuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dD1udWxsXSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBob29rIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogSGFuZHNvbnRhYmxlLmhvb2tzLnJlbW92ZSgnYmVmb3JlSW5pdCcsIG15Q2FsbGJhY2spO1xuICAgKiBgYGBcbiAgICovXG4gIHJlbW92ZShrZXksIGNhbGxiYWNrKSB7XG4gICAgbGV0IGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgY29uc3QgYnVja2V0ID0gdGhpcy5nZXRCdWNrZXQoY29udGV4dCk7XG4gICAgaWYgKHR5cGVvZiBidWNrZXRba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChidWNrZXRba2V5XS5pbmRleE9mKGNhbGxiYWNrKSA+PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrLnNraXAgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgZm9yIHRoZSBwcm92aWRlZCBob29rIG5hbWUuXG4gICAqIElmIHRoZSBgY29udGV4dGAgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCBvbmx5IGNoZWNrcyBmb3IgbGlzdGVuZXJzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lLlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9bnVsbF0gQSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgZm9yIHN1Y2Nlc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgaGFzKGtleSkge1xuICAgIGxldCBjb250ZXh0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgIGNvbnN0IGJ1Y2tldCA9IHRoaXMuZ2V0QnVja2V0KGNvbnRleHQpO1xuICAgIHJldHVybiAhIShidWNrZXRba2V5XSAhPT0gdW5kZWZpbmVkICYmIGJ1Y2tldFtrZXldLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhbGwgbG9jYWwgYW5kIGdsb2JhbCBjYWxsYmFja3MgYXNzaWduZWQgdG8gdGhlIGhvb2sgaWRlbnRpZmllZCBieSB0aGUgYGtleWAgcGFyYW1ldGVyLlxuICAgKiBJdCByZXR1cm5zIGVpdGhlciBhIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBsYXN0IGNhbGxlZCBjYWxsYmFjayBvciB0aGUgZmlyc3QgcGFyYW1ldGVyIChgcDFgKSBwYXNzZWQgdG8gdGhlIGBydW5gIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAc2VlIENvcmUjcnVuSG9va3NcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IEhvb2svRXZlbnQgbmFtZS5cbiAgICogQHBhcmFtIHsqfSBbcDFdIFBhcmFtZXRlciB0byBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyp9IFtwMl0gUGFyYW1ldGVyIHRvIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7Kn0gW3AzXSBQYXJhbWV0ZXIgdG8gYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHsqfSBbcDRdIFBhcmFtZXRlciB0byBiZSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0geyp9IFtwNV0gUGFyYW1ldGVyIHRvIGJlIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7Kn0gW3A2XSBQYXJhbWV0ZXIgdG8gYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHJldHVybnMgeyp9IEVpdGhlciBhIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBsYXN0IGNhbGxlZCBjYWxsYmFjayBvciBgcDFgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBIYW5kc29udGFibGUuaG9va3MucnVuKGhvdCwgJ2JlZm9yZUluaXQnKTtcbiAgICogYGBgXG4gICAqL1xuICBydW4oY29udGV4dCwga2V5LCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2KSB7XG4gICAge1xuICAgICAgY29uc3QgZ2xvYmFsSGFuZGxlcnMgPSB0aGlzLmdsb2JhbEJ1Y2tldFtrZXldO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZ2xvYmFsSGFuZGxlcnMgPyBnbG9iYWxIYW5kbGVycy5sZW5ndGggOiAwO1xuICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgIGlmIChsZW5ndGgpIHtcbiAgICAgICAgLy8gRG8gbm90IG9wdGltaXNlIHRoaXMgbG9vcCB3aXRoIGFycmF5RWFjaCBvciBhcnJvdyBmdW5jdGlvbiEgSWYgeW91IGRvIFlvdSdsbCBkZWNyZWFzZSBwZXJmIGJlY2F1c2Ugb2YgR0MuXG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgICAgIGlmICghZ2xvYmFsSGFuZGxlcnNbaW5kZXhdIHx8IGdsb2JhbEhhbmRsZXJzW2luZGV4XS5za2lwKSB7XG4gICAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXMgPSAoMCwgX2Z1bmN0aW9uLmZhc3RDYWxsKShnbG9iYWxIYW5kbGVyc1tpbmRleF0sIGNvbnRleHQsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpO1xuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgICAgICBwMSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGdsb2JhbEhhbmRsZXJzW2luZGV4XSAmJiBnbG9iYWxIYW5kbGVyc1tpbmRleF0ucnVuT25jZSkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoa2V5LCBnbG9iYWxIYW5kbGVyc1tpbmRleF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHtcbiAgICAgIGNvbnN0IGxvY2FsSGFuZGxlcnMgPSB0aGlzLmdldEJ1Y2tldChjb250ZXh0KVtrZXldO1xuICAgICAgY29uc3QgbGVuZ3RoID0gbG9jYWxIYW5kbGVycyA/IGxvY2FsSGFuZGxlcnMubGVuZ3RoIDogMDtcbiAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIC8vIERvIG5vdCBvcHRpbWlzZSB0aGlzIGxvb3Agd2l0aCBhcnJheUVhY2ggb3IgYXJyb3cgZnVuY3Rpb24hIElmIHlvdSBkbyBZb3UnbGwgZGVjcmVhc2UgcGVyZiBiZWNhdXNlIG9mIEdDLlxuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICBpZiAoIWxvY2FsSGFuZGxlcnNbaW5kZXhdIHx8IGxvY2FsSGFuZGxlcnNbaW5kZXhdLnNraXApIHtcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcyA9ICgwLCBfZnVuY3Rpb24uZmFzdENhbGwpKGxvY2FsSGFuZGxlcnNbaW5kZXhdLCBjb250ZXh0LCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2KTtcbiAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgICAgcDEgPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsb2NhbEhhbmRsZXJzW2luZGV4XSAmJiBsb2NhbEhhbmRsZXJzW2luZGV4XS5ydW5PbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShrZXksIGxvY2FsSGFuZGxlcnNbaW5kZXhdLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcDE7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBhbGwgbGlzdGVuZXJzIGNvbm5lY3RlZCB0byB0aGUgY29udGV4dC4gSWYgbm8gY29udGV4dCBpcyBwcm92aWRlZCwgdGhlIGdsb2JhbCBsaXN0ZW5lcnMgd2lsbCBiZSBkZXN0cm95ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29udGV4dD1udWxsXSBBIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogLy8gZGVzdHJveSB0aGUgZ2xvYmFsIGxpc3RlbmVyc1xuICAgKiBIYW5kc29udGFibGUuaG9va3MuZGVzdHJveSgpO1xuICAgKlxuICAgKiAvLyBkZXN0cm95IHRoZSBsb2NhbCBsaXN0ZW5lcnNcbiAgICogSGFuZHNvbnRhYmxlLmhvb2tzLmRlc3Ryb3koaG90SW5zdGFuY2UpO1xuICAgKiBgYGBcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgbGV0IGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLmdldEJ1Y2tldChjb250ZXh0KSwgKHZhbHVlLCBrZXksIGJ1Y2tldCkgPT4gYnVja2V0W2tleV0ubGVuZ3RoID0gMCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgaG9vayBuYW1lIChhZGRzIGl0IHRvIHRoZSBsaXN0IG9mIHRoZSBrbm93biBob29rIG5hbWVzKS4gVXNlZCBieSBwbHVnaW5zLlxuICAgKiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgcmVnaXN0ZXIsIGJ1dCBpZiB5b3UgdXNlIGl0LCB5b3VyIHBsdWdpbiBob29rIHdpbGwgYmUgdXNlZCByZXR1cm5lZCBieVxuICAgKiB0aGUgYGdldFJlZ2lzdGVyZWRgIG1ldGhvZC4gKHdoaWNoIGl0c2VsZiBpcyB1c2VkIGluIHRoZSBbZGVtb10oQC9ndWlkZXMvZ2V0dGluZy1zdGFydGVkL2V2ZW50cy1hbmQtaG9va3MvZXZlbnRzLWFuZC1ob29rcy5tZCkpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBob29rIG5hbWUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIEhhbmRzb250YWJsZS5ob29rcy5yZWdpc3RlcignbXlIb29rJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXIoa2V5KSB7XG4gICAgaWYgKCF0aGlzLmlzUmVnaXN0ZXJlZChrZXkpKSB7XG4gICAgICBSRUdJU1RFUkVEX0hPT0tTLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVyZWdpc3RlcnMgYSBob29rIG5hbWUgKHJlbW92ZXMgaXQgZnJvbSB0aGUgbGlzdCBvZiBrbm93biBob29rIG5hbWVzKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgaG9vayBuYW1lLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBIYW5kc29udGFibGUuaG9va3MuZGVyZWdpc3RlcignbXlIb29rJyk7XG4gICAqIGBgYFxuICAgKi9cbiAgZGVyZWdpc3RlcihrZXkpIHtcbiAgICBpZiAodGhpcy5pc1JlZ2lzdGVyZWQoa2V5KSkge1xuICAgICAgUkVHSVNURVJFRF9IT09LUy5zcGxpY2UoUkVHSVNURVJFRF9IT09LUy5pbmRleE9mKGtleSksIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBkZXBlbmRpbmcgb24gaWYgYSBob29rIGJ5IHN1Y2ggbmFtZSBoYXMgYmVlbiByZW1vdmVkIG9yIGRlcHJlY2F0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob29rTmFtZSBUaGUgaG9vayBuYW1lIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3ZpZGVkIGhvb2sgbmFtZSB3YXMgbWFya2VkIGFzIGRlcHJlY2F0ZWQgb3JcbiAgICogcmVtb3ZlZCBmcm9tIEFQSSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIEhhbmRzb250YWJsZS5ob29rcy5pc0RlcHJlY2F0ZWQoJ3NraXBMZW5ndGhDYWNoZScpO1xuICAgKlxuICAgKiAvLyBSZXN1bHRzOlxuICAgKiB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaXNEZXByZWNhdGVkKGhvb2tOYW1lKSB7XG4gICAgcmV0dXJuIERFUFJFQ0FURURfSE9PS1MuaGFzKGhvb2tOYW1lKSB8fCBSRU1PVkVEX0hPT0tTLmhhcyhob29rTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gZGVwZW5kaW5nIG9uIGlmIGEgaG9vayBieSBzdWNoIG5hbWUgaGFzIGJlZW4gcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhvb2tOYW1lIFRoZSBob29rIG5hbWUgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgZm9yIHN1Y2Nlc3MsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBIYW5kc29udGFibGUuaG9va3MuaXNSZWdpc3RlcmVkKCdiZWZvcmVJbml0Jyk7XG4gICAqXG4gICAqIC8vIFJlc3VsdHM6XG4gICAqIHRydWVcbiAgICogYGBgXG4gICAqL1xuICBpc1JlZ2lzdGVyZWQoaG9va05hbWUpIHtcbiAgICByZXR1cm4gUkVHSVNURVJFRF9IT09LUy5pbmRleE9mKGhvb2tOYW1lKSA+PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgcmVnaXN0ZXJlZCBob29rcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBBbiBhcnJheSBvZiByZWdpc3RlcmVkIGhvb2tzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBIYW5kc29udGFibGUuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO1xuICAgKlxuICAgKiAvLyBSZXN1bHRzOlxuICAgKiBbXG4gICAqIC4uLlxuICAgKiAgICdiZWZvcmVJbml0JyxcbiAgICogICAnYmVmb3JlUmVuZGVyJyxcbiAgICogICAnYmVmb3JlU2V0UmFuZ2VFbmQnLFxuICAgKiAgICdiZWZvcmVEcmF3Qm9yZGVycycsXG4gICAqICAgJ2JlZm9yZUNoYW5nZScsXG4gICAqIC4uLlxuICAgKiBdXG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UmVnaXN0ZXJlZCgpIHtcbiAgICByZXR1cm4gUkVHSVNURVJFRF9IT09LUztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvcmRlciBpbmRleCBvZiB0aGUgY2FsbGJhY2sgaW4gdGhlIGJ1Y2tldCBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBidWNrZXQgVGhlIGJ1Y2tldCBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSBvcmRlckluZGV4IE9yZGVyIGluZGV4IG9mIHRoZSBjYWxsYmFjay5cbiAgICovXG4gIHNldENhbGxiYWNrT3JkZXJJbmRleChidWNrZXQsIGtleSwgY2FsbGJhY2ssIG9yZGVySW5kZXgpIHtcbiAgICBjb25zdCBub3JtYWxpemVkT3JkZXJJbmRleCA9IE51bWJlci5pc0ludGVnZXIob3JkZXJJbmRleCkgPyBvcmRlckluZGV4IDogMDtcbiAgICBjb25zdCBvcmRlck1hcCA9IHRoaXMuZ2V0Q2FsbGJhY2tPcmRlck1hcChidWNrZXQsIGtleSk7XG4gICAgb3JkZXJNYXAuc2V0KG5vcm1hbGl6ZWRPcmRlckluZGV4LCBbLi4uKG9yZGVyTWFwLmdldChub3JtYWxpemVkT3JkZXJJbmRleCkgfHwgW10pLCBjYWxsYmFja10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlb3JkZXJzIHRoZSBjYWxsYmFja3MgaW4gdGhlIGJ1Y2tldCBvYmplY3QgYnkgdGhlaXIgb3JkZXIgaW5kZXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqY2V0fSBidWNrZXQgVGhlIGJ1Y2tldCBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgSG9vayBuYW1lLlxuICAgKi9cbiAgb3JkZXJCdWNrZXRCeU9yZGVySW5kZXgoYnVja2V0LCBrZXkpIHtcbiAgICBjb25zdCBvcmRlck1hcCA9IHRoaXMuZ2V0Q2FsbGJhY2tPcmRlck1hcChidWNrZXQsIGtleSk7XG4gICAgaWYgKG9yZGVyTWFwID09PSB1bmRlZmluZWQgfHwgb3JkZXJNYXAuc2l6ZSA9PT0gMCB8fCBvcmRlck1hcC5zaXplID09PSAxICYmIG9yZGVyTWFwLmhhcygwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBidWNrZXRba2V5XSA9IFsuLi5vcmRlck1hcF0uc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pLmZsYXRNYXAoX3JlZiA9PiB7XG4gICAgICBsZXQgWywgY2FsbGJhY2tzXSA9IF9yZWY7XG4gICAgICByZXR1cm4gY2FsbGJhY2tzO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZHMgdGhlIGJ1Y2tldCBvYmplY3Qgd2l0aCB0aGUgb3JkZXIgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBidWNrZXQgVGhlIGJ1Y2tldCBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBob29rIFRoZSBob29rIG5hbWUuXG4gICAqL1xuICBpbml0T3JkZXJNYXAoYnVja2V0LCBob29rKSB7XG4gICAgaWYgKCFjYWxsYmFja09yZGVyLmhhcyhidWNrZXQpKSB7XG4gICAgICBjYWxsYmFja09yZGVyLnNldChidWNrZXQsIFtdKTtcbiAgICB9XG4gICAgY2FsbGJhY2tPcmRlci5nZXQoYnVja2V0KVtob29rXSA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcmRlciBtYXAgZm9yIHRoZSBwcm92aWRlZCBob29rLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gYnVja2V0IFRoZSBidWNrZXQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaG9vayBUaGUgaG9vayBuYW1lLlxuICAgKiBAcmV0dXJucyB7TWFwPG51bWJlciwgQXJyYXk8RnVuY3Rpb24+Pn0gUmV0dXJucyB0aGUgb3JkZXIgbWFwIGZvciB0aGUgcHJvdmlkZWQgaG9vay5cbiAgICovXG4gIGdldENhbGxiYWNrT3JkZXJNYXAoYnVja2V0LCBob29rKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrT3JkZXIuZ2V0KGJ1Y2tldClbaG9va107XG4gIH1cbn1cbmNvbnN0IGdsb2JhbFNpbmdsZXRvbiA9IG5ldyBIb29rcygpO1xuXG4vKipcbiAqIEByZXR1cm5zIHtIb29rc31cbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsU2luZ2xldG9uKCkge1xuICByZXR1cm4gZ2xvYmFsU2luZ2xldG9uO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gSG9va3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2ZlYXR1cmUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9mZWF0dXJlXCIpO1xudmFyIF9naG9zdFRhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vdXRpbHMvZ2hvc3RUYWJsZVwiKSk7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbnZhciBfc2FtcGxlc0dlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3V0aWxzL3NhbXBsZXNHZW5lcmF0b3JcIikpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9zdHJpbmdcIik7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2xhdGlvbnNcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2F1dG9Db2x1bW5TaXplJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMTA7XG5jb25zdCBDT0xVTU5fU0laRV9NQVBfTkFNRSA9ICdhdXRvQ29sdW1uU2l6ZSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQHBsdWdpbiBBdXRvQ29sdW1uU2l6ZVxuICogQGNsYXNzIEF1dG9Db2x1bW5TaXplXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3MgdG8gc2V0IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gdGhlaXIgd2lkZXN0IGNlbGxzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoZSBwbHVnaW4gaXMgZGVjbGFyZWQgYXMgYHVuZGVmaW5lZGAsIHdoaWNoIG1ha2VzIGl0IGVuYWJsZWQgKHNhbWUgYXMgaWYgaXQgd2FzIGRlY2xhcmVkIGFzIGB0cnVlYCkuXG4gKiBFbmFibGluZyB0aGlzIHBsdWdpbiBtYXkgZGVjcmVhc2UgdGhlIG92ZXJhbGwgdGFibGUgcGVyZm9ybWFuY2UsIGFzIGl0IG5lZWRzIHRvIGNhbGN1bGF0ZSB0aGUgd2lkdGhzIG9mIGFsbCBjZWxscyB0b1xuICogcmVzaXplIHRoZSBjb2x1bW5zIGFjY29yZGluZ2x5LlxuICogSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgd2l0aCB0aGUgcGVyZm9ybWFuY2UsIHRyeSB0dXJuaW5nIHRoaXMgZmVhdHVyZSBvZmYgYW5kIGRlY2xhcmluZyB0aGUgY29sdW1uIHdpZHRocyBtYW51YWxseS5cbiAqXG4gKiBDb2x1bW4gd2lkdGggY2FsY3VsYXRpb25zIGFyZSBkaXZpZGVkIGludG8gc3luYyBhbmQgYXN5bmMgcGFydC4gRWFjaCBvZiB0aGlzIHBhcnRzIGhhcyB0aGVpciBvd24gYWR2YW50YWdlcyBhbmRcbiAqIGRpc2FkdmFudGFnZXMuIFN5bmNocm9ub3VzIGNhbGN1bGF0aW9ucyBhcmUgZmFzdGVyIGJ1dCB0aGV5IGJsb2NrIHRoZSBicm93c2VyIFVJLCB3aGlsZSB0aGUgc2xvd2VyIGFzeW5jaHJvbm91c1xuICogb3BlcmF0aW9ucyBkb24ndCBibG9jayB0aGUgYnJvd3NlciBVSS5cbiAqXG4gKiBUbyBjb25maWd1cmUgdGhlIHN5bmMvYXN5bmMgZGlzdHJpYnV0aW9uLCB5b3UgY2FuIHBhc3MgYW4gYWJzb2x1dGUgdmFsdWUgKG51bWJlciBvZiBjb2x1bW5zKSBvciBhIHBlcmNlbnRhZ2UgdmFsdWUgdG8gYSBjb25maWcgb2JqZWN0OlxuICpcbiAqIGBgYGpzXG4gKiAvLyBhcyBhIG51bWJlciAoMzAwIGNvbHVtbnMgaW4gc3luYywgcmVzdCBhc3luYylcbiAqIGF1dG9Db2x1bW5TaXplOiB7c3luY0xpbWl0OiAzMDB9LFxuICpcbiAqIC8vIGFzIGEgc3RyaW5nIChwZXJjZW50KVxuICogYXV0b0NvbHVtblNpemU6IHtzeW5jTGltaXQ6ICc0MCUnfSxcbiAqIGBgYFxuICpcbiAqIFRoZSBwbHVnaW4gdXNlcyB7QGxpbmsgR2hvc3RUYWJsZX0gYW5kIHtAbGluayBTYW1wbGVzR2VuZXJhdG9yfSBmb3IgY2FsY3VsYXRpb25zLlxuICogRmlyc3QsIHtAbGluayBTYW1wbGVzR2VuZXJhdG9yfSBwcmVwYXJlcyBzYW1wbGVzIG9mIGRhdGEgd2l0aCBpdHMgY29vcmRpbmF0ZXMuXG4gKiBOZXh0IHtAbGluayBHaG9zdFRhYmxlfSB1c2VzIGNvb3JkaW5hdGVzIHRvIGdldCBjZWxscycgcmVuZGVyZXJzIGFuZCBhcHBlbmQgYWxsIHRvIHRoZSBET00gdGhyb3VnaCBEb2N1bWVudEZyYWdtZW50LlxuICpcbiAqIFNhbXBsaW5nIGFjY2VwdHMgYWRkaXRpb25hbCBvcHRpb25zOlxuICogLSAqc2FtcGxpbmdSYXRpbyogLSBEZWZpbmVzIGhvdyBtYW55IHNhbXBsZXMgZm9yIHRoZSBzYW1lIGxlbmd0aCB3aWxsIGJlIHVzZWQgdG8gY2FsY3VsYXRlLiBEZWZhdWx0IGlzIGAzYC5cbiAqXG4gKiBgYGBqc1xuICogICBhdXRvQ29sdW1uU2l6ZToge1xuICogICAgIHNhbXBsaW5nUmF0aW86IDEwLFxuICogICB9XG4gKiBgYGBcbiAqXG4gKiAtICphbGxvd1NhbXBsZUR1cGxpY2F0ZXMqIC0gRGVmaW5lcyBpZiBkdXBsaWNhdGVkIHZhbHVlcyBtaWdodCBiZSB1c2VkIGluIHNhbXBsaW5nLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gKlxuICogYGBganNcbiAqICAgYXV0b0NvbHVtblNpemU6IHtcbiAqICAgICBhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6IHRydWUsXG4gKiAgIH1cbiAqIGBgYFxuICpcbiAqIFRvIGNvbmZpZ3VyZSB0aGlzIHBsdWdpbiBzZWUge0BsaW5rIE9wdGlvbnMjYXV0b0NvbHVtblNpemV9LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyksIHtcbiAqICAgZGF0YTogZ2V0RGF0YSgpLFxuICogICBhdXRvQ29sdW1uU2l6ZTogdHJ1ZVxuICogfSk7XG4gKiAvLyBBY2Nlc3MgdG8gcGx1Z2luIGluc3RhbmNlOlxuICogY29uc3QgcGx1Z2luID0gaG90LmdldFBsdWdpbignYXV0b0NvbHVtblNpemUnKTtcbiAqXG4gKiBwbHVnaW4uZ2V0Q29sdW1uV2lkdGgoNCk7XG4gKlxuICogaWYgKHBsdWdpbi5pc0VuYWJsZWQoKSkge1xuICogICAvLyBjb2RlLi4uXG4gKiB9XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiBjb25zdCBob3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gKlxuICogLi4uXG4gKlxuICogLy8gRmlyc3QsIGxldCdzIGNvbnRydWN0IEhhbmRzb250YWJsZVxuICogPEhvdFRhYmxlXG4gKiAgIHJlZj17aG90UmVmfVxuICogICBkYXRhPXtnZXREYXRhKCl9XG4gKiAgIGF1dG9Db2x1bW5TaXplPXt0cnVlfVxuICogLz5cbiAqXG4gKiAuLi5cbiAqXG4gKiAvLyBBY2Nlc3MgdG8gcGx1Z2luIGluc3RhbmNlOlxuICogY29uc3QgaG90ID0gaG90UmVmLmN1cnJlbnQuaG90SW5zdGFuY2U7XG4gKiBjb25zdCBwbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCdhdXRvQ29sdW1uU2l6ZScpO1xuICpcbiAqIHBsdWdpbi5nZXRDb2x1bW5XaWR0aCg0KTtcbiAqXG4gKiBpZiAocGx1Z2luLmlzRW5hYmxlZCgpKSB7XG4gKiAgIC8vIGNvZGUuLi5cbiAqIH1cbiAqIGBgYFxuICogOjo6XG4gKi9cbi8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xudmFyIF9jYWNoZWRDb2x1bW5IZWFkZXJzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX0F1dG9Db2x1bW5TaXplX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBBdXRvQ29sdW1uU2l6ZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKSB7XG4gICAgcmV0dXJuIDUwO1xuICB9XG4gIHN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpIHtcbiAgICByZXR1cm4gNTA7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIEdob3N0VGFibGV9IGZvciByb3dzIGFuZCBjb2x1bW5zIHNpemUgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7R2hvc3RUYWJsZX1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSk7XG4gICAgLyoqXG4gICAgICogT24gYmVmb3JlIHZpZXcgcmVuZGVyIGxpc3RlbmVyLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQXV0b0NvbHVtblNpemVfYnJhbmQpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImdob3N0VGFibGVcIiwgbmV3IF9naG9zdFRhYmxlLmRlZmF1bHQodGhpcy5ob3QpKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgU2FtcGxlc0dlbmVyYXRvcn0gZm9yIGdlbmVyYXRpbmcgc2FtcGxlcyBuZWNlc3NhcnkgZm9yIGNvbHVtbnMgd2lkdGggY2FsY3VsYXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7U2FtcGxlc0dlbmVyYXRvcn1cbiAgICAgKiBAZmlyZXMgSG9va3MjbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2FtcGxlc0dlbmVyYXRvclwiLCBuZXcgX3NhbXBsZXNHZW5lcmF0b3IuZGVmYXVsdCgocm93LCBjb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IHBoeXNpY2FsUm93ID0gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgICAgY29uc3QgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbik7XG4gICAgICBpZiAodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4ocGh5c2ljYWxSb3cpIHx8IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHBoeXNpY2FsQ29sdW1uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCBjZWxsTWV0YSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICAgIGxldCBjZWxsVmFsdWUgPSAnJztcbiAgICAgIGlmICghY2VsbE1ldGEuc3Bhbm5lZCkge1xuICAgICAgICBjZWxsVmFsdWUgPSB0aGlzLmhvdC5nZXREYXRhQXRDZWxsKHJvdywgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIGxldCBidW5kbGVTZWVkID0gJyc7XG4gICAgICBpZiAodGhpcy5ob3QuaGFzSG9vaygnbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkJykpIHtcbiAgICAgICAgYnVuZGxlU2VlZCA9IHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQnLCBidW5kbGVTZWVkLCBjZWxsTWV0YSwgY2VsbFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjZWxsVmFsdWUsXG4gICAgICAgIGJ1bmRsZVNlZWRcbiAgICAgIH07XG4gICAgfSkpO1xuICAgIC8qKlxuICAgICAqIGB0cnVlYCBvbmx5IGlmIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiB3YXMgcGVyZm9ybWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJmaXJzdENhbGN1bGF0aW9uXCIsIHRydWUpO1xuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBpcyBpbiBwcm9ncmVzcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImluUHJvZ3Jlc3NcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBhbHJlYWR5IG1lYXN1cmVkIGNvbHVtbnMgKHdlIGFscmVhZHkga25vdyB0aGVpciBzaXplcykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1lYXN1cmVkQ29sdW1uc1wiLCAwKTtcbiAgICAvKipcbiAgICAgKiBQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCB0byBrZWVwIGFuZCB0cmFjayB3aWR0aHMgZm9yIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7UGh5c2ljYWxJbmRleFRvVmFsdWVNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uV2lkdGhzTWFwXCIsIG5ldyBfdHJhbnNsYXRpb25zLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIENhY2hlZCBjb2x1bW4gaGVhZGVyIG5hbWVzLiBJdCBpcyB1c2VkIHRvIGRpZmYgY3VycmVudCBjb2x1bW4gaGVhZGVycyB3aXRoIHByZXZpb3VzIHN0YXRlIGFuZCBkZXRlY3Qgd2hpY2hcbiAgICAgKiBjb2x1bW5zIHdpZHRoIHNob3VsZCBiZSB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jYWNoZWRDb2x1bW5IZWFkZXJzLCBbXSk7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoQ09MVU1OX1NJWkVfTUFQX05BTUUsIHRoaXMuY29sdW1uV2lkdGhzTWFwKTtcblxuICAgIC8vIExlYXZlIHRoZSBsaXN0ZW5lciBhY3RpdmUgdG8gYWxsb3cgYXV0by1zaXppbmcgdGhlIGNvbHVtbnMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB3aWR0aCByZWNhbGN1bGF0aW9uIGZvciByZXNpemUgaGFuZGxlciBkb3VibGVjbGljayAoTWFudWFsQ29sdW1uUmVzaXplKS5cbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNvbHVtblJlc2l6ZScsIChzaXplLCBjb2x1bW4sIGlzRGJsQ2xpY2spID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvQ29sdW1uU2l6ZV9icmFuZCwgdGhpcywgX29uQmVmb3JlQ29sdW1uUmVzaXplKS5jYWxsKHRoaXMsIHNpemUsIGNvbHVtbiwgaXNEYmxDbGljaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayAjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXSAhPT0gZmFsc2UgJiYgIXRoaXMuaG90LmdldFNldHRpbmdzKCkuY29sV2lkdGhzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgaWYgKHNldHRpbmcgJiYgc2V0dGluZy51c2VIZWFkZXJzICE9PSBudWxsICYmIHNldHRpbmcudXNlSGVhZGVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygndXNlSGVhZGVycycsIHNldHRpbmcudXNlSGVhZGVycyk7XG4gICAgfVxuICAgIHRoaXMuc2V0U2FtcGxpbmdPcHRpb25zKCk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckxvYWREYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9Db2x1bW5TaXplX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJMb2FkRGF0YSkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVDaGFuZ2VSZW5kZXInLCBjaGFuZ2VzID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvQ29sdW1uU2l6ZV9icmFuZCwgdGhpcywgX29uQmVmb3JlQ2hhbmdlKS5jYWxsKHRoaXMsIGNoYW5nZXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUnLCBjaGFuZ2VzID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvQ29sdW1uU2l6ZV9icmFuZCwgdGhpcywgX29uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSkuY2FsbCh0aGlzLCBjaGFuZ2VzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVWaWV3UmVuZGVyJywgZm9yY2UgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9Db2x1bW5TaXplX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVWaWV3UmVuZGVyKS5jYWxsKHRoaXMsIGZvcmNlKSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb2xXaWR0aCcsICh3aWR0aCwgY29sKSA9PiB0aGlzLmdldENvbHVtbldpZHRoKGNvbCwgd2lkdGgpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVySW5pdCcsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvQ29sdW1uU2l6ZV9icmFuZCwgdGhpcywgX29uQWZ0ZXJJbml0KS5jYWxsKHRoaXMpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiB7QGxpbmsgQ29yZSN1cGRhdGVTZXR0aW5nc30gaXMgaW52b2tlZC5cbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICBjb25zdCBjaGFuZ2VkQ29sdW1ucyA9IHRoaXMuZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKTtcbiAgICBpZiAoY2hhbmdlZENvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmNsZWFyQ2FjaGUoY2hhbmdlZENvbHVtbnMpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCk7XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcblxuICAgIC8vIExlYXZlIHRoZSBsaXN0ZW5lciBhY3RpdmUgdG8gYWxsb3cgYXV0by1zaXppbmcgdGhlIGNvbHVtbnMgd2hlbiB0aGUgcGx1Z2luIGlzIGRpc2FibGVkLlxuICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciB3aWR0aCByZWNhbGN1bGF0aW9uIGZvciByZXNpemUgaGFuZGxlciBkb3VibGVjbGljayAoTWFudWFsQ29sdW1uUmVzaXplKS5cbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNvbHVtblJlc2l6ZScsIChzaXplLCBjb2x1bW4sIGlzRGJsQ2xpY2spID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvQ29sdW1uU2l6ZV9icmFuZCwgdGhpcywgX29uQmVmb3JlQ29sdW1uUmVzaXplKS5jYWxsKHRoaXMsIHNpemUsIGNvbHVtbiwgaXNEYmxDbGljaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdmlzaWJsZSBjb2x1bW5zIHdpZHRoLlxuICAgKi9cbiAgY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpIHtcbiAgICBjb25zdCByb3dzQ291bnQgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcblxuICAgIC8vIEtlZXAgbGFzdCBjb2x1bW4gd2lkdGhzIHVuY2hhbmdlZCBmb3Igc2l0dWF0aW9uIHdoZW4gYWxsIHJvd3Mgd2FzIGRlbGV0ZWQgb3IgdHJpbW1lZCAocHJvICM2KVxuICAgIGlmICghcm93c0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvcmNlID0gdGhpcy5ob3QucmVuZGVyQ2FsbDtcbiAgICBjb25zdCBmaXJzdFZpc2libGVDb2x1bW4gPSB0aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpO1xuICAgIGNvbnN0IGxhc3RWaXNpYmxlQ29sdW1uID0gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO1xuICAgIGlmIChmaXJzdFZpc2libGVDb2x1bW4gPT09IC0xIHx8IGxhc3RWaXNpYmxlQ29sdW1uID09PSAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7XG4gICAgICBmcm9tOiBmaXJzdFZpc2libGVDb2x1bW4sXG4gICAgICB0bzogbGFzdFZpc2libGVDb2x1bW5cbiAgICB9LCB1bmRlZmluZWQsIGZvcmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIGEgY29sdW1ucyB3aWR0aC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSBjb2xSYW5nZSBWaXN1YWwgY29sdW1uIGluZGV4IG9yIGFuIG9iamVjdCB3aXRoIGBmcm9tYCBhbmQgYHRvYCB2aXN1YWwgaW5kZXhlcyBhcyBhIHJhbmdlLlxuICAgKiBAcGFyYW0ge251bWJlcnxvYmplY3R9IHJvd1JhbmdlIFZpc3VhbCByb3cgaW5kZXggb3IgYW4gb2JqZWN0IHdpdGggYGZyb21gIGFuZCBgdG9gIHZpc3VhbCBpbmRleGVzIGFzIGEgcmFuZ2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSBJZiBgdHJ1ZWAgdGhlIGNhbGN1bGF0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgd2lkdGggZXhpc3RzIGluIHRoZSBjYWNoZS5cbiAgICovXG4gIGNhbGN1bGF0ZUNvbHVtbnNXaWR0aCgpIHtcbiAgICBsZXQgY29sUmFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHtcbiAgICAgIGZyb206IDAsXG4gICAgICB0bzogdGhpcy5ob3QuY291bnRDb2xzKCkgLSAxXG4gICAgfTtcbiAgICBsZXQgcm93UmFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgIGZyb206IDAsXG4gICAgICB0bzogdGhpcy5ob3QuY291bnRSb3dzKCkgLSAxXG4gICAgfTtcbiAgICBsZXQgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxlblxuICAgIGNvbnN0IGNvbHVtbnNSYW5nZSA9IHR5cGVvZiBjb2xSYW5nZSA9PT0gJ251bWJlcicgPyB7XG4gICAgICBmcm9tOiBjb2xSYW5nZSxcbiAgICAgIHRvOiBjb2xSYW5nZVxuICAgIH0gOiBjb2xSYW5nZTtcbiAgICBjb25zdCByb3dzUmFuZ2UgPSB0eXBlb2Ygcm93UmFuZ2UgPT09ICdudW1iZXInID8ge1xuICAgICAgZnJvbTogcm93UmFuZ2UsXG4gICAgICB0bzogcm93UmFuZ2VcbiAgICB9IDogcm93UmFuZ2U7XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShjb2x1bW5zUmFuZ2UuZnJvbSwgY29sdW1uc1JhbmdlLnRvLCB2aXN1YWxDb2x1bW4gPT4ge1xuICAgICAgbGV0IHBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2aXN1YWxDb2x1bW4pO1xuICAgICAgaWYgKHBoeXNpY2FsQ29sdW1uID09PSBudWxsKSB7XG4gICAgICAgIHBoeXNpY2FsQ29sdW1uID0gdmlzdWFsQ29sdW1uO1xuICAgICAgfVxuICAgICAgaWYgKGZvcmNlIHx8IHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChwaHlzaWNhbENvbHVtbikgPT09IG51bGwgJiYgIXRoaXMuaG90Ll9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyhwaHlzaWNhbENvbHVtbikpIHtcbiAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXModmlzdWFsQ29sdW1uLCByb3dzUmFuZ2UpO1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2FtcGxlcywgX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IFtjb2x1bW4sIHNhbXBsZV0gPSBfcmVmO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGNvbHVtbiwgc2FtcGxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgICB0aGlzLmdob3N0VGFibGUuZ2V0V2lkdGhzKCh2aXN1YWxDb2x1bW4sIHdpZHRoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHZpc3VhbENvbHVtbik7XG4gICAgICAgICAgdGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsQ29sdW1uLCB3aWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICB0aGlzLm1lYXN1cmVkQ29sdW1ucyA9IGNvbHVtbnNSYW5nZS50byArIDE7XG4gICAgICB0aGlzLmdob3N0VGFibGUuY2xlYW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBhbGwgY29sdW1ucyB3aWR0aC4gVGhlIGNhbGN1bGF0ZWQgY29sdW1uIHdpbGwgYmUgY2FjaGVkIGluIHRoZSB7QGxpbmsgQXV0b0NvbHVtblNpemUjd2lkdGhzfSBwcm9wZXJ0eS5cbiAgICogVG8gcmV0cmlldmUgd2lkdGggZm9yIHNwZWNpZmllZCBjb2x1bW4gdXNlIHtAbGluayBBdXRvQ29sdW1uU2l6ZSNnZXRDb2x1bW5XaWR0aH0gbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdHxudW1iZXJ9IHJvd1JhbmdlIFJvdyBpbmRleCBvciBhbiBvYmplY3Qgd2l0aCBgZnJvbWAgYW5kIGB0b2AgcHJvcGVydGllcyB3aGljaCBkZWZpbmUgcm93IHJhbmdlLlxuICAgKi9cbiAgY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCkge1xuICAgIGxldCByb3dSYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge1xuICAgICAgZnJvbTogMCxcbiAgICAgIHRvOiB0aGlzLmhvdC5jb3VudFJvd3MoKSAtIDFcbiAgICB9O1xuICAgIGxldCBjdXJyZW50ID0gMDtcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLmhvdC5jb3VudENvbHMoKSAtIDE7XG4gICAgbGV0IHRpbWVyID0gbnVsbDtcbiAgICB0aGlzLmluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGxvb3AgPSAoKSA9PiB7XG4gICAgICAvLyBXaGVuIGhvdCB3YXMgZGVzdHJveWVkIGFmdGVyIGNhbGN1bGF0aW5nIGZpbmlzaGVkIGNhbmNlbCBmcmFtZVxuICAgICAgaWYgKCF0aGlzLmhvdCkge1xuICAgICAgICAoMCwgX2ZlYXR1cmUuY2FuY2VsQW5pbWF0aW9uRnJhbWUpKHRpbWVyKTtcbiAgICAgICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtcbiAgICAgICAgZnJvbTogY3VycmVudCxcbiAgICAgICAgdG86IE1hdGgubWluKGN1cnJlbnQgKyBBdXRvQ29sdW1uU2l6ZS5DQUxDVUxBVElPTl9TVEVQLCBsZW5ndGgpXG4gICAgICB9LCByb3dSYW5nZSk7XG4gICAgICBjdXJyZW50ID0gY3VycmVudCArIEF1dG9Db2x1bW5TaXplLkNBTENVTEFUSU9OX1NURVAgKyAxO1xuICAgICAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcbiAgICAgICAgdGltZXIgPSAoMCwgX2ZlYXR1cmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKShsb29wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfZmVhdHVyZS5jYW5jZWxBbmltYXRpb25GcmFtZSkodGltZXIpO1xuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgICAgICAvLyBAVE9ETyBTaG91bGQgY2FsbCBvbmNlIHBlciByZW5kZXIgY3ljbGUsIGN1cnJlbnRseSBmaXJlZCBzZXBhcmF0ZWx5IGluIGRpZmZlcmVudCBwbHVnaW5zXG4gICAgICAgIHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzeW5jTGltaXQgPSB0aGlzLmdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCk7XG5cbiAgICAvLyBzeW5jXG4gICAgaWYgKHRoaXMuZmlyc3RDYWxjdWxhdGlvbiAmJiBzeW5jTGltaXQgPj0gMCkge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe1xuICAgICAgICBmcm9tOiAwLFxuICAgICAgICB0bzogc3luY0xpbWl0XG4gICAgICB9LCByb3dSYW5nZSk7XG4gICAgICB0aGlzLmZpcnN0Q2FsY3VsYXRpb24gPSBmYWxzZTtcbiAgICAgIGN1cnJlbnQgPSBzeW5jTGltaXQgKyAxO1xuICAgIH1cbiAgICAvLyBhc3luY1xuICAgIGlmIChjdXJyZW50IDwgbGVuZ3RoKSB7XG4gICAgICBsb29wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzYW1wbGluZyBvcHRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0U2FtcGxpbmdPcHRpb25zKCkge1xuICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGNvbnN0IHNhbXBsaW5nUmF0aW8gPSBzZXR0aW5nICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzZXR0aW5nLCAnc2FtcGxpbmdSYXRpbycpID8gc2V0dGluZy5zYW1wbGluZ1JhdGlvIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFsbG93U2FtcGxlRHVwbGljYXRlcyA9IHNldHRpbmcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNldHRpbmcsICdhbGxvd1NhbXBsZUR1cGxpY2F0ZXMnKSA/IHNldHRpbmcuYWxsb3dTYW1wbGVEdXBsaWNhdGVzIDogdW5kZWZpbmVkO1xuICAgIGlmIChzYW1wbGluZ1JhdGlvICYmICFpc05hTihzYW1wbGluZ1JhdGlvKSkge1xuICAgICAgdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KHNhbXBsaW5nUmF0aW8sIDEwKSk7XG4gICAgfVxuICAgIGlmIChhbGxvd1NhbXBsZUR1cGxpY2F0ZXMpIHtcbiAgICAgIHRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMoYWxsb3dTYW1wbGVEdXBsaWNhdGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGVzIGFsbCBjb2x1bW5zIHdpZHRoIChvdmVyd3JpdGUgY2FjaGUgdmFsdWVzKS5cbiAgICovXG4gIHJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCkge1xuICAgIGlmICh0aGlzLmhvdC52aWV3ICYmIHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICAgICAgdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB2YWx1ZSB3aGljaCB0ZWxscyBob3cgbWFueSBjb2x1bW5zIHNob3VsZCBiZSBjYWxjdWxhdGVkIHN5bmNocm9ub3VzbHkgKHJlc3Qgb2YgdGhlIGNvbHVtbnMgd2lsbCBiZSBjYWxjdWxhdGVkXG4gICAqIGFzeW5jaHJvbm91c2x5KS4gVGhlIGxpbWl0IGlzIGNhbGN1bGF0ZWQgYmFzZWQgb24gYHN5bmNMaW1pdGAgc2V0IHRvIGBhdXRvQ29sdW1uU2l6ZWAgb3B0aW9uIChzZWUge0BsaW5rIE9wdGlvbnMjYXV0b0NvbHVtblNpemV9KS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4gICAgbGV0IGxpbWl0ID0gQXV0b0NvbHVtblNpemUuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtcbiAgICBjb25zdCBjb2xzTGltaXQgPSB0aGlzLmhvdC5jb3VudENvbHMoKSAtIDE7XG4gICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShzZXR0aW5ncykpIHtcbiAgICAgIGxpbWl0ID0gc2V0dGluZ3Muc3luY0xpbWl0O1xuICAgICAgaWYgKCgwLCBfc3RyaW5nLmlzUGVyY2VudFZhbHVlKShsaW1pdCkpIHtcbiAgICAgICAgbGltaXQgPSAoMCwgX251bWJlci52YWx1ZUFjY29yZGluZ1BlcmNlbnQpKGNvbHNMaW1pdCwgbGltaXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgdG8gTnVtYmVyXG4gICAgICAgIGxpbWl0ID4+PSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTWF0aC5taW4obGltaXQsIGNvbHNMaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gd2lkdGguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0V2lkdGhdIERlZmF1bHQgY29sdW1uIHdpZHRoLiBJdCB3aWxsIGJlIHBpY2tlZCB1cCBpZiBubyBjYWxjdWxhdGVkIHdpZHRoIGZvdW5kLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtrZWVwTWluaW11bT10cnVlXSBJZiBgdHJ1ZWAgdGhlbiByZXR1cm5lZCB2YWx1ZSB3b24ndCBiZSBzbWFsbGVyIHRoZW4gNTAgKGRlZmF1bHQgY29sdW1uIHdpZHRoKS5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENvbHVtbldpZHRoKGNvbHVtbikge1xuICAgIGxldCBkZWZhdWx0V2lkdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICBsZXQga2VlcE1pbmltdW0gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgbGV0IHdpZHRoID0gZGVmYXVsdFdpZHRoO1xuICAgIGlmICh3aWR0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB3aWR0aCA9IHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbikpO1xuICAgICAgaWYgKGtlZXBNaW5pbXVtICYmIHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgX3NyYy5WaWV3cG9ydENvbHVtbnNDYWxjdWxhdG9yLkRFRkFVTFRfV0lEVEgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZmlyc3QgdmlzaWJsZSBjb2x1bW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdmlzdWFsIGNvbHVtbiBpbmRleCwgLTEgaWYgdGFibGUgaXMgbm90IHJlbmRlcmVkIG9yIGlmIHRoZXJlIGFyZSBubyBjb2x1bW5zIHRvIGJhc2UgdGhlIHRoZSBjYWxjdWxhdGlvbnMgb24uXG4gICAqL1xuICBnZXRGaXJzdFZpc2libGVDb2x1bW4oKSB7XG4gICAgY29uc3Qgd290ID0gdGhpcy5ob3Qudmlldy5fd3Q7XG4gICAgaWYgKHdvdC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcikge1xuICAgICAgLy8gRmlzdCBmdWxseSB2aXNpYmxlIGNvbHVtbiBpcyBzdG9yZWQgYXMgcmVuZGVyYWJsZSBpbmRleC5cbiAgICAgIGNvbnN0IGZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uID0gd290Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7XG4gICAgICBpZiAoZmlyc3RGdWxseVZpc2libGVDb2x1bW4gIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKSB7XG4gICAgICBjb25zdCBmaXJzdFJlbmRlcmVkQ29sdW1uID0gd290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO1xuXG4gICAgICAvLyBUaGVyZSBhcmUgbm8gcmVuZGVyZWQgY29sdW1uLlxuICAgICAgaWYgKGZpcnN0UmVuZGVyZWRDb2x1bW4gIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGZpcnN0UmVuZGVyZWRDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFzdCB2aXNpYmxlIGNvbHVtbi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB2aXN1YWwgY29sdW1uIGluZGV4IG9yIC0xIGlmIHRhYmxlIGlzIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIGdldExhc3RWaXNpYmxlQ29sdW1uKCkge1xuICAgIGNvbnN0IHdvdCA9IHRoaXMuaG90LnZpZXcuX3d0O1xuICAgIGlmICh3b3Qud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IpIHtcbiAgICAgIC8vIExhc3QgZnVsbHkgdmlzaWJsZSBjb2x1bW4gaXMgc3RvcmVkIGFzIHJlbmRlcmFibGUgaW5kZXguXG4gICAgICBjb25zdCBsYXN0RnVsbHlWaXNpYmxlQ29sdW1uID0gd290Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtcbiAgICAgIGlmIChsYXN0RnVsbHlWaXNpYmxlQ29sdW1uICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsYXN0RnVsbHlWaXNpYmxlQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKSB7XG4gICAgICAvLyBMYXN0IGZ1bGx5IHZpc2libGUgY29sdW1uIGlzIHN0b3JlZCBhcyByZW5kZXJhYmxlIGluZGV4LlxuICAgICAgY29uc3QgbGFzdFJlbmRlcmVkQ29sdW1uID0gd290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBubyByZW5kZXJlZCBjb2x1bW5zLlxuICAgICAgaWYgKGxhc3RSZW5kZXJlZENvbHVtbiAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobGFzdFJlbmRlcmVkQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGFsbCBjb2x1bW5zIHdoaWNoIHRpdGxlcyBoYXMgYmVlbiBjaGFuZ2VkIGluIGNvbXBhcmlzb24gdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEl0IHJldHVybnMgYW4gYXJyYXkgb2YgcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gICAqL1xuICBmaW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpIHtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCk7XG4gICAgY29uc3QgY2hhbmdlZENvbHVtbnMgPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKShjb2x1bW5IZWFkZXJzLCAoYWNjLCBjb2x1bW5UaXRsZSwgcGh5c2ljYWxDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZENvbHVtbnNMZW5ndGggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NhY2hlZENvbHVtbkhlYWRlcnMsIHRoaXMpLmxlbmd0aDtcbiAgICAgIGlmIChjYWNoZWRDb2x1bW5zTGVuZ3RoIC0gMSA8IHBoeXNpY2FsQ29sdW1uIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2FjaGVkQ29sdW1uSGVhZGVycywgdGhpcylbcGh5c2ljYWxDb2x1bW5dICE9PSBjb2x1bW5UaXRsZSkge1xuICAgICAgICBhY2MucHVzaChwaHlzaWNhbENvbHVtbik7XG4gICAgICB9XG4gICAgICBpZiAoY2FjaGVkQ29sdW1uc0xlbmd0aCAtIDEgPCBwaHlzaWNhbENvbHVtbikge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NhY2hlZENvbHVtbkhlYWRlcnMsIHRoaXMpLnB1c2goY29sdW1uVGl0bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jYWNoZWRDb2x1bW5IZWFkZXJzLCB0aGlzKVtwaHlzaWNhbENvbHVtbl0gPSBjb2x1bW5UaXRsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjaGFuZ2VkQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgY2FjaGUgb2YgY2FsY3VsYXRlZCBjb2x1bW4gd2lkdGhzLiBJZiB5b3Ugd2FudCB0byBjbGVhciBvbmx5IHNlbGVjdGVkIGNvbHVtbnMgcGFzcyBhbiBhcnJheSB3aXRoIHRoZWlyIGluZGV4ZXMuXG4gICAqIE90aGVyd2lzZSB3aG9sZSBjYWNoZSB3aWxsIGJlIGNsZWFyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IFtjb2x1bW5zXSBMaXN0IG9mIHBoeXNpY2FsIGNvbHVtbiBpbmRleGVzIHRvIGNsZWFyLlxuICAgKi9cbiAgY2xlYXJDYWNoZSgpIHtcbiAgICBsZXQgY29sdW1ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgaWYgKGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShjb2x1bW5zLCBwaHlzaWNhbEluZGV4ID0+IHtcbiAgICAgICAgICB0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxJbmRleCwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgd2lkdGhzIHdlcmUgY2FsY3VsYXRlZC4gSWYgbm90IHRoZW4gcmV0dXJuIGB0cnVlYCAobmVlZCByZWNhbGN1bGF0ZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNOZWVkUmVjYWxjdWxhdGUoKSB7XG4gICAgcmV0dXJuICEhKDAsIF9hcnJheS5hcnJheUZpbHRlcikodGhpcy5jb2x1bW5XaWR0aHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCwgdGhpcy5tZWFzdXJlZENvbHVtbnMpLCBpdGVtID0+IGl0ZW0gPT09IG51bGwpLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5naG9zdFRhYmxlLmNsZWFuKCk7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkF1dG9Db2x1bW5TaXplID0gQXV0b0NvbHVtblNpemU7XG5mdW5jdGlvbiBfb25CZWZvcmVWaWV3UmVuZGVyKCkge1xuICB0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKTtcbiAgaWYgKHRoaXMuaXNOZWVkUmVjYWxjdWxhdGUoKSAmJiAhdGhpcy5pblByb2dyZXNzKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKTtcbiAgfVxufVxuLyoqXG4gKiBPbiBhZnRlciBsb2FkIGRhdGEgbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyTG9hZERhdGEoKSB7XG4gIGlmICh0aGlzLmhvdC52aWV3KSB7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpO1xuICB9IGVsc2Uge1xuICAgIC8vIGZpcnN0IGxvYWQgLSBpbml0aWFsaXphdGlvblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaG90KSB7XG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxufVxuLyoqXG4gKiBPbiBiZWZvcmUgY2hhbmdlIGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQW4gYXJyYXkgb2YgbW9kaWZpZWQgZGF0YS5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQ2hhbmdlKGNoYW5nZXMpIHtcbiAgY29uc3QgY2hhbmdlZENvbHVtbnMgPSAoMCwgX2FycmF5LmFycmF5TWFwKShjaGFuZ2VzLCBfcmVmMiA9PiB7XG4gICAgbGV0IFssIGNvbHVtblByb3BlcnR5XSA9IF9yZWYyO1xuICAgIHJldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHRoaXMuaG90LnByb3BUb0NvbChjb2x1bW5Qcm9wZXJ0eSkpO1xuICB9KTtcbiAgdGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChjaGFuZ2VkQ29sdW1ucykpKTtcbn1cbi8qKlxuICogT24gYmVmb3JlIGNvbHVtbiByZXNpemUgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgQ2FsY3VsYXRlZCBuZXcgY29sdW1uIHdpZHRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgaW5kZXggb2YgdGhlIHJlc2l6ZWQgY29sdW1uLlxuICogQHBhcmFtIHtib29sZWFufSBpc0RibENsaWNrICBGbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlIHdhcyBhIGRvdWJsZS1jbGljay5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZUNvbHVtblJlc2l6ZShzaXplLCBjb2x1bW4sIGlzRGJsQ2xpY2spIHtcbiAgbGV0IG5ld1NpemUgPSBzaXplO1xuICBpZiAoaXNEYmxDbGljaykge1xuICAgIHRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKGNvbHVtbiwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICBuZXdTaXplID0gdGhpcy5nZXRDb2x1bW5XaWR0aChjb2x1bW4sIHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG4gIHJldHVybiBuZXdTaXplO1xufVxuLyoqXG4gKiBPbiBhZnRlciBIYW5kc29udGFibGUgaW5pdCBmaWxsIHBsdWdpbiB3aXRoIGFsbCBuZWNlc3NhcnkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckluaXQoKSB7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY2FjaGVkQ29sdW1uSGVhZGVycywgdGhpcywgdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkpO1xufVxuLyoqXG4gKiBBZnRlciBmb3JtdWxhcyB2YWx1ZXMgdXBkYXRlZCBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VzIEFuIGFycmF5IG9mIG1vZGlmaWVkIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUoY2hhbmdlcykge1xuICBjb25zdCBmaWx0ZXJlZENoYW5nZXMgPSAoMCwgX2FycmF5LmFycmF5RmlsdGVyKShjaGFuZ2VzLCBjaGFuZ2UgPT4ge1xuICAgIHZhciBfY2hhbmdlJGFkZHJlc3M7XG4gICAgcmV0dXJuICgwLCBfbWl4ZWQuaXNEZWZpbmVkKSgoX2NoYW5nZSRhZGRyZXNzID0gY2hhbmdlLmFkZHJlc3MpID09PSBudWxsIHx8IF9jaGFuZ2UkYWRkcmVzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoYW5nZSRhZGRyZXNzLmNvbCk7XG4gIH0pO1xuICBjb25zdCBjaGFuZ2VkQ29sdW1ucyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKGZpbHRlcmVkQ2hhbmdlcywgY2hhbmdlID0+IGNoYW5nZS5hZGRyZXNzLmNvbCk7XG4gIHRoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9tKG5ldyBTZXQoY2hhbmdlZENvbHVtbnMpKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2F1dG9Db2x1bW5TaXplID0gcmVxdWlyZShcIi4vYXV0b0NvbHVtblNpemVcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfYXV0b0NvbHVtblNpemUuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2F1dG9Db2x1bW5TaXplLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuQXV0b0NvbHVtblNpemUgPSBfYXV0b0NvbHVtblNpemUuQXV0b0NvbHVtblNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2ZlYXR1cmUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9mZWF0dXJlXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2dob3N0VGFibGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi91dGlscy9naG9zdFRhYmxlXCIpKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX3NhbXBsZXNHZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi91dGlscy9zYW1wbGVzR2VuZXJhdG9yXCIpKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvc3RyaW5nXCIpO1xudmFyIF90cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNsYXRpb25zXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdhdXRvUm93U2l6ZSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDQwO1xuY29uc3QgUk9XX1dJRFRIU19NQVBfTkFNRSA9ICdhdXRvUm93U2l6ZSc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQHBsdWdpbiBBdXRvUm93U2l6ZVxuICogQGNsYXNzIEF1dG9Sb3dTaXplXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgQXV0b1Jvd1NpemVgIHBsdWdpbiBhbGxvd3MgeW91IHRvIHNldCByb3cgaGVpZ2h0cyBiYXNlZCBvbiB0aGVpciBoaWdoZXN0IGNlbGxzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoZSBwbHVnaW4gaXMgZGVjbGFyZWQgYXMgYHVuZGVmaW5lZGAsIHdoaWNoIG1ha2VzIGl0IGRpc2FibGVkIChzYW1lIGFzIGlmIGl0IHdhcyBkZWNsYXJlZCBhcyBgZmFsc2VgKS5cbiAqIEVuYWJsaW5nIHRoaXMgcGx1Z2luIG1heSBkZWNyZWFzZSB0aGUgb3ZlcmFsbCB0YWJsZSBwZXJmb3JtYW5jZSwgYXMgaXQgbmVlZHMgdG8gY2FsY3VsYXRlIHRoZSBoZWlnaHRzIG9mIGFsbCBjZWxscyB0b1xuICogcmVzaXplIHRoZSByb3dzIGFjY29yZGluZ2x5LlxuICogSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgd2l0aCB0aGUgcGVyZm9ybWFuY2UsIHRyeSB0dXJuaW5nIHRoaXMgZmVhdHVyZSBvZmYgYW5kIGRlY2xhcmluZyB0aGUgcm93IGhlaWdodHMgbWFudWFsbHkuXG4gKlxuICogQnV0LCB0byBkaXNwbGF5IEhhbmRzb250YWJsZSdzIFtzY3JvbGxiYXJdKGh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzLzguMC4wL2RlbW8tc2Nyb2xsaW5nLmh0bWwpXG4gKiBpbiBhIHByb3BlciBzaXplLCB5b3UgbmVlZCB0byBlbmFibGUgdGhlIGBBdXRvUm93U2l6ZWAgcGx1Z2luLFxuICogYnkgc2V0dGluZyB0aGUgW2BhdXRvUm93U2l6ZWBdKEAvYXBpL29wdGlvbnMubWQjYXV0b1Jvd1NpemUpIG9wdGlvbiB0byBgdHJ1ZWAuXG4gKlxuICogUm93IGhlaWdodCBjYWxjdWxhdGlvbnMgYXJlIGRpdmlkZWQgaW50byBzeW5jIGFuZCBhc3luYyBwYXJ0LiBFYWNoIG9mIHRoaXMgcGFydHMgaGFzIHRoZWlyIG93biBhZHZhbnRhZ2VzIGFuZFxuICogZGlzYWR2YW50YWdlcy4gU3luY2hyb25vdXMgY2FsY3VsYXRpb25zIGFyZSBmYXN0ZXIgYnV0IHRoZXkgYmxvY2sgdGhlIGJyb3dzZXIgVUksIHdoaWxlIHRoZSBzbG93ZXIgYXN5bmNocm9ub3VzXG4gKiBvcGVyYXRpb25zIGRvbid0IGJsb2NrIHRoZSBicm93c2VyIFVJLlxuICpcbiAqIFRvIGNvbmZpZ3VyZSB0aGUgc3luYy9hc3luYyBkaXN0cmlidXRpb24sIHlvdSBjYW4gcGFzcyBhbiBhYnNvbHV0ZSB2YWx1ZSAobnVtYmVyIG9mIHJvd3MpIG9yIGEgcGVyY2VudGFnZSB2YWx1ZSB0byBhIGNvbmZpZyBvYmplY3Q6XG4gKiBgYGBqc1xuICogLy8gYXMgYSBudW1iZXIgKDMwMCByb3dzIGluIHN5bmMsIHJlc3QgYXN5bmMpXG4gKiBhdXRvUm93U2l6ZToge3N5bmNMaW1pdDogMzAwfSxcbiAqXG4gKiAvLyBhcyBhIHN0cmluZyAocGVyY2VudClcbiAqIGF1dG9Sb3dTaXplOiB7c3luY0xpbWl0OiAnNDAlJ30sXG4gKlxuICogLy8gYWxsb3cgc2FtcGxlIGR1cGxpY2F0aW9uXG4gKiBhdXRvUm93U2l6ZToge3N5bmNMaW1pdDogJzQwJScsIGFsbG93U2FtcGxlRHVwbGljYXRlczogdHJ1ZX0sXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIGFsc28gdXNlIHRoZSBgYWxsb3dTYW1wbGVEdXBsaWNhdGVzYCBvcHRpb24gdG8gYWxsb3cgc2FtcGxpbmcgZHVwbGljYXRlIHZhbHVlcyB3aGVuIGNhbGN1bGF0aW5nIHRoZSByb3dcbiAqIGhlaWdodC4gX19Ob3RlX18sIHRoYXQgdGhpcyBtaWdodCBoYXZlIGEgbmVnYXRpdmUgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLlxuICpcbiAqIFRvIGNvbmZpZ3VyZSB0aGlzIHBsdWdpbiBzZWUge0BsaW5rIE9wdGlvbnMjYXV0b1Jvd1NpemV9LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyksIHtcbiAqICAgZGF0YTogZ2V0RGF0YSgpLFxuICogICBhdXRvUm93U2l6ZTogdHJ1ZVxuICogfSk7XG4gKiAvLyBBY2Nlc3MgdG8gcGx1Z2luIGluc3RhbmNlOlxuICogY29uc3QgcGx1Z2luID0gaG90LmdldFBsdWdpbignYXV0b1Jvd1NpemUnKTtcbiAqXG4gKiBwbHVnaW4uZ2V0Um93SGVpZ2h0KDQpO1xuICpcbiAqIGlmIChwbHVnaW4uaXNFbmFibGVkKCkpIHtcbiAqICAgLy8gY29kZS4uLlxuICogfVxuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqIGBgYGpzeFxuICogY29uc3QgaG90UmVmID0gdXNlUmVmKG51bGwpO1xuICpcbiAqIC4uLlxuICpcbiAqIC8vIEZpcnN0LCBsZXQncyBjb250cnVjdCBIYW5kc29udGFibGVcbiAqIDxIb3RUYWJsZVxuICogICByZWY9e2hvdFJlZn1cbiAqICAgZGF0YT17Z2V0RGF0YSgpfVxuICogICBhdXRvUm93U2l6ZT17dHJ1ZX1cbiAqIC8+XG4gKlxuICogLi4uXG4gKlxuICogLy8gQWNjZXNzIHRvIHBsdWdpbiBpbnN0YW5jZTpcbiAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICogY29uc3QgcGx1Z2luID0gaG90LmdldFBsdWdpbignYXV0b1Jvd1NpemUnKTtcbiAqXG4gKiBwbHVnaW4uZ2V0Um93SGVpZ2h0KDQpO1xuICpcbiAqIGlmIChwbHVnaW4uaXNFbmFibGVkKCkpIHtcbiAqICAgLy8gY29kZS4uLlxuICogfVxuICogYGBgXG4gKiA6OjpcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG52YXIgX0F1dG9Sb3dTaXplX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBBdXRvUm93U2l6ZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBzdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKSB7XG4gICAgcmV0dXJuIDUwO1xuICB9XG4gIHN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpIHtcbiAgICByZXR1cm4gNTAwO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbHVtbnMgaGVhZGVyJ3MgaGVpZ2h0IGNhY2hlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSkge1xuICAgIHN1cGVyKGhvdEluc3RhbmNlKTtcbiAgICAvKipcbiAgICAgKiBPbiBiZWZvcmUgdmlldyByZW5kZXIgbGlzdGVuZXIuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9BdXRvUm93U2l6ZV9icmFuZCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVySGVpZ2h0XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIHtAbGluayBHaG9zdFRhYmxlfSBmb3Igcm93cyBhbmQgY29sdW1ucyBzaXplIGNhbGN1bGF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0dob3N0VGFibGV9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2hvc3RUYWJsZVwiLCBuZXcgX2dob3N0VGFibGUuZGVmYXVsdCh0aGlzLmhvdCkpO1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIHtAbGluayBTYW1wbGVzR2VuZXJhdG9yfSBmb3IgZ2VuZXJhdGluZyBzYW1wbGVzIG5lY2Vzc2FyeSBmb3Igcm93cyBoZWlnaHQgY2FsY3VsYXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7U2FtcGxlc0dlbmVyYXRvcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzYW1wbGVzR2VuZXJhdG9yXCIsIG5ldyBfc2FtcGxlc0dlbmVyYXRvci5kZWZhdWx0KChyb3csIGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgcGh5c2ljYWxSb3cgPSB0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdyk7XG4gICAgICBjb25zdCBwaHlzaWNhbENvbHVtbiA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oY29sdW1uKTtcbiAgICAgIGlmICh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihwaHlzaWNhbFJvdykgfHwgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4ocGh5c2ljYWxDb2x1bW4pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChyb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCkge1xuICAgICAgICBjb25zdCBjZWxsTWV0YSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICAgICAgaWYgKGNlbGxNZXRhLmhpZGRlbikge1xuICAgICAgICAgIC8vIGRvIG5vdCBnZW5lcmF0ZSBzYW1wbGVzIGZvciBjZWxscyB0aGF0IGFyZSBjb3ZlcmVkIGJ5IG1lcmdlZCBjZWxsIChudWxsIHZhbHVlcylcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBjZWxsVmFsdWU7XG4gICAgICBpZiAocm93ID49IDApIHtcbiAgICAgICAgY2VsbFZhbHVlID0gdGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChyb3csIGNvbHVtbik7XG4gICAgICB9IGVsc2UgaWYgKHJvdyA9PT0gLTEpIHtcbiAgICAgICAgY2VsbFZhbHVlID0gdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGNvbHVtbik7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2VsbFZhbHVlXG4gICAgICB9O1xuICAgIH0pKTtcbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgb25seSB0aGUgZmlyc3QgY2FsY3VsYXRpb24gd2FzIHBlcmZvcm1lZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZmlyc3RDYWxjdWxhdGlvblwiLCB0cnVlKTtcbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgaWYgdGhlIHNpemUgY2FsY3VsYXRpb24gaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpblByb2dyZXNzXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBOdW1iZXIgb2YgYWxyZWFkeSBtZWFzdXJlZCByb3dzICh3ZSBhbHJlYWR5IGtub3cgdGhlaXIgc2l6ZXMpLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZWFzdXJlZFJvd3NcIiwgMCk7XG4gICAgLyoqXG4gICAgICogUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgdG8ga2VlcCBhbmQgdHJhY2sgaGVpZ2h0cyBmb3IgcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dIZWlnaHRzTWFwXCIsIG5ldyBfdHJhbnNsYXRpb25zLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwKCkpO1xuICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKFJPV19XSURUSFNfTUFQX05BTUUsIHRoaXMucm93SGVpZ2h0c01hcCk7XG5cbiAgICAvLyBMZWF2ZSB0aGUgbGlzdGVuZXIgYWN0aXZlIHRvIGFsbG93IGF1dG8tc2l6aW5nIHRoZSByb3dzIHdoZW4gdGhlIHBsdWdpbiBpcyBkaXNhYmxlZC5cbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgaGVpZ2h0IHJlY2FsY3VsYXRpb24gZm9yIHJlc2l6ZSBoYW5kbGVyIGRvdWJsZWNsaWNrIChNYW51YWxSb3dSZXNpemUpLlxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlUm93UmVzaXplJywgKHNpemUsIHJvdywgaXNEYmxDbGljaykgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9Sb3dTaXplX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVSb3dSZXNpemUpLmNhbGwodGhpcywgc2l6ZSwgcm93LCBpc0RibENsaWNrKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIEF1dG9Sb3dTaXplI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIHJldHVybiBzZXR0aW5ncyA9PT0gdHJ1ZSB8fCAoMCwgX29iamVjdC5pc09iamVjdCkoc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXRTYW1wbGluZ09wdGlvbnMoKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyTG9hZERhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfQXV0b1Jvd1NpemVfYnJhbmQsIF90aGlzLCBfb25BZnRlckxvYWREYXRhKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNoYW5nZVJlbmRlcicsIGNoYW5nZXMgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9Sb3dTaXplX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVDaGFuZ2UpLmNhbGwodGhpcywgY2hhbmdlcykpO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlQ29sdW1uUmVzaXplJywgKCkgPT4gdGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVWaWV3UmVuZGVyJywgZm9yY2UgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9Sb3dTaXplX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVWaWV3UmVuZGVyKS5jYWxsKHRoaXMsIGZvcmNlKSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlSb3dIZWlnaHQnLCAoaGVpZ2h0LCByb3cpID0+IHRoaXMuZ2V0Um93SGVpZ2h0KHJvdywgaGVpZ2h0KSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQnLCAoKSA9PiB0aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmhlYWRlckhlaWdodCA9IG51bGw7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuXG4gICAgLy8gTGVhdmUgdGhlIGxpc3RlbmVyIGFjdGl2ZSB0byBhbGxvdyBhdXRvLXNpemluZyB0aGUgcm93cyB3aGVuIHRoZSBwbHVnaW4gaXMgZGlzYWJsZWQuXG4gICAgLy8gVGhpcyBpcyBuZWNlc3NlYXJ5IGZvciBoZWlnaHQgcmVjYWxjdWxhdGlvbiBmb3IgcmVzaXplIGhhbmRsZXIgZG91YmxlY2xpY2sgKE1hbnVhbFJvd1Jlc2l6ZSkuXG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVSb3dSZXNpemUnLCAoc2l6ZSwgcm93LCBpc0RibENsaWNrKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQXV0b1Jvd1NpemVfYnJhbmQsIHRoaXMsIF9vbkJlZm9yZVJvd1Jlc2l6ZSkuY2FsbCh0aGlzLCBzaXplLCByb3csIGlzRGJsQ2xpY2spKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYSBnaXZlbiByb3dzIGhlaWdodC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSByb3dSYW5nZSBSb3cgaW5kZXggb3IgYW4gb2JqZWN0IHdpdGggYGZyb21gIGFuZCBgdG9gIGluZGV4ZXMgYXMgYSByYW5nZS5cbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSBjb2xSYW5nZSBDb2x1bW4gaW5kZXggb3IgYW4gb2JqZWN0IHdpdGggYGZyb21gIGFuZCBgdG9gIGluZGV4ZXMgYXMgYSByYW5nZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2U9ZmFsc2VdIElmIGB0cnVlYCB0aGUgY2FsY3VsYXRpb24gd2lsbCBiZSBwcm9jZXNzZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB3aWR0aCBleGlzdHMgaW4gdGhlIGNhY2hlLlxuICAgKi9cbiAgY2FsY3VsYXRlUm93c0hlaWdodCgpIHtcbiAgICBsZXQgcm93UmFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHtcbiAgICAgIGZyb206IDAsXG4gICAgICB0bzogdGhpcy5ob3QuY291bnRSb3dzKCkgLSAxXG4gICAgfTtcbiAgICBsZXQgY29sUmFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgIGZyb206IDAsXG4gICAgICB0bzogdGhpcy5ob3QuY291bnRDb2xzKCkgLSAxXG4gICAgfTtcbiAgICBsZXQgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxlblxuICAgIGNvbnN0IHJvd3NSYW5nZSA9IHR5cGVvZiByb3dSYW5nZSA9PT0gJ251bWJlcicgPyB7XG4gICAgICBmcm9tOiByb3dSYW5nZSxcbiAgICAgIHRvOiByb3dSYW5nZVxuICAgIH0gOiByb3dSYW5nZTtcbiAgICBjb25zdCBjb2x1bW5zUmFuZ2UgPSB0eXBlb2YgY29sUmFuZ2UgPT09ICdudW1iZXInID8ge1xuICAgICAgZnJvbTogY29sUmFuZ2UsXG4gICAgICB0bzogY29sUmFuZ2VcbiAgICB9IDogY29sUmFuZ2U7XG4gICAgaWYgKHRoaXMuaG90LmdldENvbEhlYWRlcigwKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoLTEsIGNvbHVtbnNSYW5nZSk7XG4gICAgICB0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uSGVhZGVyc1JvdyhzYW1wbGVzLmdldCgtMSkpO1xuICAgIH1cbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHJvd3NSYW5nZS5mcm9tLCByb3dzUmFuZ2UudG8sIHJvdyA9PiB7XG4gICAgICAvLyBGb3Igcm93cyB3ZSBtdXN0IGNhbGN1bGF0ZSByb3cgaGVpZ2h0IGV2ZW4gd2hlbiB1c2VyIGhhZCBzZXQgaGVpZ2h0IHZhbHVlIG1hbnVhbGx5LlxuICAgICAgLy8gV2UgY2FuIHNocmluayBjb2x1bW4gYnV0IGNhbm5vdCBzaHJpbmsgcm93cyFcbiAgICAgIGlmIChmb3JjZSB8fCB0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHJvdykgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMocm93LCBjb2x1bW5zUmFuZ2UpO1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2FtcGxlcywgX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IFtyb3dJbmRleCwgc2FtcGxlXSA9IF9yZWY7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2hvc3RUYWJsZS5hZGRSb3cocm93SW5kZXgsIHNhbXBsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpID0+IHtcbiAgICAgICAgdGhpcy5naG9zdFRhYmxlLmdldEhlaWdodHMoKHJvdywgaGVpZ2h0KSA9PiB7XG4gICAgICAgICAgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocm93KSwgaGVpZ2h0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgICB0aGlzLm1lYXN1cmVkUm93cyA9IHJvd3NSYW5nZS50byArIDE7XG4gICAgICB0aGlzLmdob3N0VGFibGUuY2xlYW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGFsbCByb3dzIGhlaWdodHMuIFRoZSBjYWxjdWxhdGVkIHJvdyB3aWxsIGJlIGNhY2hlZCBpbiB0aGUge0BsaW5rIEF1dG9Sb3dTaXplI2hlaWdodHN9IHByb3BlcnR5LlxuICAgKiBUbyByZXRyaWV2ZSBoZWlnaHQgZm9yIHNwZWNpZmllZCByb3cgdXNlIHtAbGluayBBdXRvUm93U2l6ZSNnZXRSb3dIZWlnaHR9IG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8bnVtYmVyfSBjb2xSYW5nZSBSb3cgaW5kZXggb3IgYW4gb2JqZWN0IHdpdGggYGZyb21gIGFuZCBgdG9gIHByb3BlcnRpZXMgd2hpY2ggZGVmaW5lIHJvdyByYW5nZS5cbiAgICovXG4gIGNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSB7XG4gICAgbGV0IGNvbFJhbmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7XG4gICAgICBmcm9tOiAwLFxuICAgICAgdG86IHRoaXMuaG90LmNvdW50Q29scygpIC0gMVxuICAgIH07XG4gICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaG90LmNvdW50Um93cygpIC0gMTtcbiAgICBsZXQgdGltZXIgPSBudWxsO1xuICAgIHRoaXMuaW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgY29uc3QgbG9vcCA9ICgpID0+IHtcbiAgICAgIC8vIFdoZW4gaG90IHdhcyBkZXN0cm95ZWQgYWZ0ZXIgY2FsY3VsYXRpbmcgZmluaXNoZWQgY2FuY2VsIGZyYW1lXG4gICAgICBpZiAoIXRoaXMuaG90KSB7XG4gICAgICAgICgwLCBfZmVhdHVyZS5jYW5jZWxBbmltYXRpb25GcmFtZSkodGltZXIpO1xuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtcbiAgICAgICAgZnJvbTogY3VycmVudCxcbiAgICAgICAgdG86IE1hdGgubWluKGN1cnJlbnQgKyBBdXRvUm93U2l6ZS5DQUxDVUxBVElPTl9TVEVQLCBsZW5ndGgpXG4gICAgICB9LCBjb2xSYW5nZSk7XG4gICAgICBjdXJyZW50ID0gY3VycmVudCArIEF1dG9Sb3dTaXplLkNBTENVTEFUSU9OX1NURVAgKyAxO1xuICAgICAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcbiAgICAgICAgdGltZXIgPSAoMCwgX2ZlYXR1cmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKShsb29wKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfZmVhdHVyZS5jYW5jZWxBbmltYXRpb25GcmFtZSkodGltZXIpO1xuICAgICAgICB0aGlzLmluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgICAgICAvLyBAVE9ETyBTaG91bGQgY2FsbCBvbmNlIHBlciByZW5kZXIgY3ljbGUsIGN1cnJlbnRseSBmaXJlZCBzZXBhcmF0ZWx5IGluIGRpZmZlcmVudCBwbHVnaW5zXG4gICAgICAgIHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG5cbiAgICAgICAgLy8gdG1wXG4gICAgICAgIGlmICh0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlcikge1xuICAgICAgICAgIHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLmRyYXcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3luY0xpbWl0ID0gdGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO1xuXG4gICAgLy8gc3luY1xuICAgIGlmICh0aGlzLmZpcnN0Q2FsY3VsYXRpb24gJiYgc3luY0xpbWl0ID49IDApIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7XG4gICAgICAgIGZyb206IDAsXG4gICAgICAgIHRvOiBzeW5jTGltaXRcbiAgICAgIH0sIGNvbFJhbmdlKTtcbiAgICAgIHRoaXMuZmlyc3RDYWxjdWxhdGlvbiA9IGZhbHNlO1xuICAgICAgY3VycmVudCA9IHN5bmNMaW1pdCArIDE7XG4gICAgfVxuICAgIC8vIGFzeW5jXG4gICAgaWYgKGN1cnJlbnQgPCBsZW5ndGgpIHtcbiAgICAgIGxvb3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzYW1wbGluZyBvcHRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0U2FtcGxpbmdPcHRpb25zKCkge1xuICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGNvbnN0IHNhbXBsaW5nUmF0aW8gPSBzZXR0aW5nICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzZXR0aW5nLCAnc2FtcGxpbmdSYXRpbycpID8gc2V0dGluZy5zYW1wbGluZ1JhdGlvIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFsbG93U2FtcGxlRHVwbGljYXRlcyA9IHNldHRpbmcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNldHRpbmcsICdhbGxvd1NhbXBsZUR1cGxpY2F0ZXMnKSA/IHNldHRpbmcuYWxsb3dTYW1wbGVEdXBsaWNhdGVzIDogdW5kZWZpbmVkO1xuICAgIGlmIChzYW1wbGluZ1JhdGlvICYmICFpc05hTihzYW1wbGluZ1JhdGlvKSkge1xuICAgICAgdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KHNhbXBsaW5nUmF0aW8sIDEwKSk7XG4gICAgfVxuICAgIGlmIChhbGxvd1NhbXBsZUR1cGxpY2F0ZXMpIHtcbiAgICAgIHRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMoYWxsb3dTYW1wbGVEdXBsaWNhdGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGVzIGFsbCByb3dzIGhlaWdodCAob3ZlcndyaXRlIGNhY2hlIHZhbHVlcykuXG4gICAqL1xuICByZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSB7XG4gICAgaWYgKCgwLCBfZWxlbWVudC5pc1Zpc2libGUpKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEFCTEUpKSB7XG4gICAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHZhbHVlIHdoaWNoIHRlbGxzIGhvdyBtYW55IHJvd3Mgc2hvdWxkIGJlIGNhbGN1bGF0ZWQgc3luY2hyb25vdXNseSAocmVzdCBvZiB0aGUgcm93cyB3aWxsIGJlIGNhbGN1bGF0ZWRcbiAgICogYXN5bmNocm9ub3VzbHkpLiBUaGUgbGltaXQgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiBgc3luY0xpbWl0YCBzZXQgdG8gYXV0b1Jvd1NpemUgb3B0aW9uIChzZWUge0BsaW5rIE9wdGlvbnMjYXV0b1Jvd1NpemV9KS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4gICAgbGV0IGxpbWl0ID0gQXV0b1Jvd1NpemUuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtcbiAgICBjb25zdCByb3dzTGltaXQgPSB0aGlzLmhvdC5jb3VudFJvd3MoKSAtIDE7XG4gICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShzZXR0aW5ncykpIHtcbiAgICAgIGxpbWl0ID0gc2V0dGluZ3Muc3luY0xpbWl0O1xuICAgICAgaWYgKCgwLCBfc3RyaW5nLmlzUGVyY2VudFZhbHVlKShsaW1pdCkpIHtcbiAgICAgICAgbGltaXQgPSAoMCwgX251bWJlci52YWx1ZUFjY29yZGluZ1BlcmNlbnQpKHJvd3NMaW1pdCwgbGltaXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgdG8gTnVtYmVyXG4gICAgICAgIGxpbWl0ID4+PSAwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gTWF0aC5taW4obGltaXQsIHJvd3NMaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcm93J3MgaGVpZ2h0LCBhcyBtZWFzdXJlZCBpbiB0aGUgRE9NLlxuICAgKlxuICAgKiBUaGUgaGVpZ2h0IHJldHVybmVkIGluY2x1ZGVzIDEgcHggb2YgdGhlIHJvdydzIGJvdHRvbSBib3JkZXIuXG4gICAqXG4gICAqIE1pbmQgdGhhdCB0aGlzIG1ldGhvZCBpcyBkaWZmZXJlbnQgZnJvbSB0aGVcbiAgICogW2BnZXRSb3dIZWlnaHQoKWBdKEAvYXBpL2NvcmUubWQjZ2V0cm93aGVpZ2h0KSBtZXRob2RcbiAgICogb2YgSGFuZHNvbnRhYmxlJ3MgW0NvcmVdKEAvYXBpL2NvcmUubWQpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEEgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0SGVpZ2h0XSBJZiBubyBoZWlnaHQgaXMgZm91bmQsIGBkZWZhdWx0SGVpZ2h0YCBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgaGVpZ2h0IG9mIHRoZSBzcGVjaWZpZWQgcm93LCBpbiBwaXhlbHMuXG4gICAqL1xuICBnZXRSb3dIZWlnaHQocm93KSB7XG4gICAgbGV0IGRlZmF1bHRIZWlnaHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjYWNoZWRIZWlnaHQgPSByb3cgPCAwID8gdGhpcy5oZWFkZXJIZWlnaHQgOiB0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocm93KSk7XG4gICAgbGV0IGhlaWdodCA9IGRlZmF1bHRIZWlnaHQ7XG4gICAgaWYgKGNhY2hlZEhlaWdodCAhPT0gbnVsbCAmJiBjYWNoZWRIZWlnaHQgPiAoZGVmYXVsdEhlaWdodCB8fCAwKSkge1xuICAgICAgaGVpZ2h0ID0gY2FjaGVkSGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gaGVhZGVyIGhlaWdodC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9XG4gICAqL1xuICBnZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZmlyc3QgdmlzaWJsZSByb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgcm93IGluZGV4LCAtMSBpZiB0YWJsZSBpcyBub3QgcmVuZGVyZWQgb3IgaWYgdGhlcmUgYXJlIG5vIHJvd3MgdG8gYmFzZSB0aGUgdGhlIGNhbGN1bGF0aW9ucyBvbi5cbiAgICovXG4gIGdldEZpcnN0VmlzaWJsZVJvdygpIHtcbiAgICBjb25zdCB3b3QgPSB0aGlzLmhvdC52aWV3Ll93dDtcbiAgICBpZiAod290Lnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yKSB7XG4gICAgICByZXR1cm4gd290Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7XG4gICAgfVxuICAgIGlmICh3b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcikge1xuICAgICAgcmV0dXJuIHdvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRSb3coKTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhc3QgdmlzaWJsZSByb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgcm93IGluZGV4IG9yIC0xIGlmIHRhYmxlIGlzIG5vdCByZW5kZXJlZC5cbiAgICovXG4gIGdldExhc3RWaXNpYmxlUm93KCkge1xuICAgIGNvbnN0IHdvdCA9IHRoaXMuaG90LnZpZXcuX3d0O1xuICAgIGlmICh3b3Qud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpIHtcbiAgICAgIHJldHVybiB3b3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICAgIH1cbiAgICBpZiAod290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpIHtcbiAgICAgIHJldHVybiB3b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKTtcbiAgICB9XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBjYWNoZWQgaGVpZ2h0cy5cbiAgICovXG4gIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHQgPSBudWxsO1xuICAgIHRoaXMucm93SGVpZ2h0c01hcC5pbml0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGNhY2hlIGJ5IHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdHxudW1iZXJ9IHJhbmdlIFJvdyBpbmRleCBvciBhbiBvYmplY3Qgd2l0aCBgZnJvbWAgYW5kIGB0b2AgcHJvcGVydGllcyB3aGljaCBkZWZpbmUgcm93IHJhbmdlLlxuICAgKi9cbiAgY2xlYXJDYWNoZUJ5UmFuZ2UocmFuZ2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gdHlwZW9mIHJhbmdlID09PSAnbnVtYmVyJyA/IHtcbiAgICAgIGZyb206IHJhbmdlLFxuICAgICAgdG86IHJhbmdlXG4gICAgfSA6IHJhbmdlO1xuICAgIHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpID0+IHtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoTWF0aC5taW4oZnJvbSwgdG8pLCBNYXRoLm1heChmcm9tLCB0byksIHJvdyA9PiB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgocm93LCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgaGVpZ2h0cyB3ZXJlIGNhbGN1bGF0ZWQuIElmIG5vdCB0aGVuIHJldHVybiBgdHJ1ZWAgKG5lZWQgcmVjYWxjdWxhdGUpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTmVlZFJlY2FsY3VsYXRlKCkge1xuICAgIHJldHVybiAhISgwLCBfYXJyYXkuYXJyYXlGaWx0ZXIpKHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLCB0aGlzLm1lYXN1cmVkUm93cyksIGl0ZW0gPT4gaXRlbSA9PT0gbnVsbCkubGVuZ3RoO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmdob3N0VGFibGUuY2xlYW4oKTtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuQXV0b1Jvd1NpemUgPSBBdXRvUm93U2l6ZTtcbmZ1bmN0aW9uIF9vbkJlZm9yZVZpZXdSZW5kZXIoKSB7XG4gIGNvbnN0IGZvcmNlID0gdGhpcy5ob3QucmVuZGVyQ2FsbDtcbiAgY29uc3QgZml4ZWRSb3dzQm90dG9tID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b207XG4gIGNvbnN0IGZpcnN0VmlzaWJsZVJvdyA9IHRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7XG4gIGNvbnN0IGxhc3RWaXNpYmxlUm93ID0gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO1xuICBpZiAoZmlyc3RWaXNpYmxlUm93ID09PSAtMSB8fCBsYXN0VmlzaWJsZVJvdyA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtcbiAgICBmcm9tOiBmaXJzdFZpc2libGVSb3csXG4gICAgdG86IGxhc3RWaXNpYmxlUm93XG4gIH0sIHVuZGVmaW5lZCwgZm9yY2UpO1xuXG4gIC8vIENhbGN1bGF0ZSByb3dzIGhlaWdodCBzeW5jaHJvbm91c2x5IGZvciBib3R0b20gb3ZlcmxheVxuICBpZiAoZml4ZWRSb3dzQm90dG9tKSB7XG4gICAgY29uc3QgdG90YWxSb3dzID0gdGhpcy5ob3QuY291bnRSb3dzKCkgLSAxO1xuICAgIHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7XG4gICAgICBmcm9tOiB0b3RhbFJvd3MgLSBmaXhlZFJvd3NCb3R0b20sXG4gICAgICB0bzogdG90YWxSb3dzXG4gICAgfSk7XG4gIH1cbiAgaWYgKHRoaXMuaXNOZWVkUmVjYWxjdWxhdGUoKSAmJiAhdGhpcy5pblByb2dyZXNzKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCk7XG4gIH1cbn1cbi8qKlxuICogT24gYmVmb3JlIHJvdyByZXNpemUgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHNpemUgVGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBDdXJyZW50IHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNEYmxDbGljayBJbmRpY2F0ZXMgaWYgdGhlIHJlc2l6ZSB3YXMgdHJpZ2dlcmVkIGJ5IGRvdWJsZWNsaWNrLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlUm93UmVzaXplKHNpemUsIHJvdywgaXNEYmxDbGljaykge1xuICBsZXQgbmV3U2l6ZSA9IHNpemU7XG4gIGlmIChpc0RibENsaWNrKSB7XG4gICAgdGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHJvdywgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICBuZXdTaXplID0gdGhpcy5nZXRSb3dIZWlnaHQocm93KTtcbiAgfVxuICByZXR1cm4gbmV3U2l6ZTtcbn1cbi8qKlxuICogT24gYWZ0ZXIgbG9hZCBkYXRhIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckxvYWREYXRhKCkge1xuICBpZiAodGhpcy5ob3Qudmlldykge1xuICAgIHRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZmlyc3QgbG9hZCAtIGluaXRpYWxpemF0aW9uXG4gICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ob3QpIHtcbiAgICAgICAgdGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBPbiBiZWZvcmUgY2hhbmdlIGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgMkQgYXJyYXkgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIG9mIHRoZSBlZGl0ZWQgY2VsbHMuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZUNoYW5nZShjaGFuZ2VzKSB7XG4gIGxldCByYW5nZSA9IG51bGw7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJhbmdlID0gY2hhbmdlc1swXVswXTtcbiAgfSBlbHNlIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDEpIHtcbiAgICByYW5nZSA9IHtcbiAgICAgIGZyb206IGNoYW5nZXNbMF1bMF0sXG4gICAgICB0bzogY2hhbmdlc1tjaGFuZ2VzLmxlbmd0aCAtIDFdWzBdXG4gICAgfTtcbiAgfVxuICBpZiAocmFuZ2UgIT09IG51bGwpIHtcbiAgICB0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKHJhbmdlKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9hdXRvUm93U2l6ZSA9IHJlcXVpcmUoXCIuL2F1dG9Sb3dTaXplXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2F1dG9Sb3dTaXplLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9hdXRvUm93U2l6ZS5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLkF1dG9Sb3dTaXplID0gX2F1dG9Sb3dTaXplLkF1dG9Sb3dTaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi9iYXNlXCIpO1xudmFyIF9wbHVnaW5Ib29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BsdWdpbkhvb2tzXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ21vZGlmeUF1dG9maWxsUmFuZ2UnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVBdXRvZmlsbCcpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyQXV0b2ZpbGwnKTtcbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnYXV0b2ZpbGwnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAyMDtcbmNvbnN0IFNFVFRJTkdfS0VZUyA9IFsnZmlsbEhhbmRsZSddO1xuY29uc3QgSU5TRVJUX1JPV19BTFRFUl9BQ1RJT05fTkFNRSA9ICdpbnNlcnRfcm93X2JlbG93JztcbmNvbnN0IElOVEVSVkFMX0ZPUl9BRERJTkdfUk9XID0gMjAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogVGhpcyBwbHVnaW4gcHJvdmlkZXMgXCJkcmFnLWRvd25cIiBhbmQgXCJjb3B5LWRvd25cIiBmdW5jdGlvbmFsaXRpZXMsIGJvdGggb3BlcmF0ZWQgdXNpbmcgdGhlIHNtYWxsIHNxdWFyZSBpbiB0aGUgcmlnaHRcbiAqIGJvdHRvbSBvZiB0aGUgY2VsbCBzZWxlY3Rpb24uXG4gKlxuICogXCJEcmFnLWRvd25cIiBleHBhbmRzIHRoZSB2YWx1ZSBvZiB0aGUgc2VsZWN0ZWQgY2VsbHMgdG8gdGhlIG5laWdoYm91cmluZyBjZWxscyB3aGVuIHlvdSBkcmFnIHRoZSBzbWFsbFxuICogc3F1YXJlIGluIHRoZSBjb3JuZXIuXG4gKlxuICogXCJDb3B5LWRvd25cIiBjb3BpZXMgdGhlIHZhbHVlIG9mIHRoZSBzZWxlY3Rpb24gdG8gYWxsIGVtcHR5IGNlbGxzIGJlbG93IHdoZW4geW91IGRvdWJsZSBjbGljayB0aGUgc21hbGwgc3F1YXJlLlxuICpcbiAqIEBjbGFzcyBBdXRvZmlsbFxuICogQHBsdWdpbiBBdXRvZmlsbFxuICovXG52YXIgX0F1dG9maWxsX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBBdXRvZmlsbCBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIE9uIGNlbGwgY29ybmVyIGRvdWJsZSBjbGljayBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9BdXRvZmlsbF9icmFuZCk7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIGFkZGluZyBuZXcgcm93IHN0YXJ0ZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFkZGluZ1N0YXJ0ZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBpZiB0aGVyZSB3YXMgbW91c2UgZG93biBvbiB0aGUgY2VsbCBjb3JuZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1vdXNlRG93bk9uQ2VsbENvcm5lclwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGlmIG1vdXNlIHdhcyBkcmFnZ2VkIG91dHNpZGUgSGFuZHNvbnRhYmxlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtb3VzZURyYWdPdXRzaWRlXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgaG93IG1hbnkgY2VsbCBsZXZlbHMgd2VyZSBkcmFnZ2VkIHVzaW5nIHRoZSBoYW5kbGUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhhbmRsZURyYWdnZWRDZWxsc1wiLCAwKTtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYWxsb3dlZCBkaXJlY3Rpb25zIG9mIGRyYWcgKGAnaG9yaXpvbnRhbCdgIG9yICdgdmVydGljYWxgJykuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkaXJlY3Rpb25zXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgaWYgY2FuIGluc2VydCBuZXcgcm93cyBpZiBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImF1dG9JbnNlcnRSb3dcIiwgZmFsc2UpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIHN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCkge1xuICAgIHJldHVybiBbUExVR0lOX0tFWSwgLi4uU0VUVElOR19LRVlTXTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgSGFuZHNvbnRhYmxlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubWFwU2V0dGluZ3MoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKCk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvZmlsbF9icmFuZCwgdGhpcywgX29uQWZ0ZXJDZWxsQ29ybmVyTW91c2VEb3duKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck9uQ2VsbENvcm5lckRibENsaWNrJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9maWxsX2JyYW5kLCB0aGlzLCBfb25DZWxsQ29ybmVyRGJsQ2xpY2spLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZU9uQ2VsbE1vdXNlT3ZlcicsIChfLCBjb29yZHMpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9BdXRvZmlsbF9icmFuZCwgdGhpcywgX29uQmVmb3JlQ2VsbE1vdXNlT3ZlcikuY2FsbCh0aGlzLCBjb29yZHMpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBpcyBpbnZva2VkIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICAgKiAgLSBgYXV0b2ZpbGxgXG4gICAqICAtIFtgZmlsbEhhbmRsZWBdKEAvYXBpL29wdGlvbnMubWQjZmlsbGhhbmRsZSlcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHRoaXMuY2xlYXJNYXBwZWRTZXR0aW5ncygpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNlbGVjdGlvbiBkYXRhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119IFJhbmdlcyBBcnJheSBvZiBvYmplY3RzIHdpdGggcHJvcGVydGllcyBgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCBhbmQgYGVuZENvbGAuXG4gICAqL1xuICBnZXRTZWxlY3Rpb25EYXRhKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiBzdGFydFJvdyxcbiAgICAgIGNvbDogc3RhcnRDb2xcbiAgICB9ID0gc2VsZWN0aW9uLmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiBlbmRSb3csXG4gICAgICBjb2w6IGVuZENvbFxuICAgIH0gPSBzZWxlY3Rpb24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7XG4gICAgY29uc3QgY29weWFibGVSYW5nZXMgPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5Q29weWFibGVSYW5nZScsIFt7XG4gICAgICBzdGFydFJvdyxcbiAgICAgIHN0YXJ0Q29sLFxuICAgICAgZW5kUm93LFxuICAgICAgZW5kQ29sXG4gICAgfV0pO1xuICAgIGNvbnN0IGNvcHlhYmxlUm93cyA9IFtdO1xuICAgIGNvbnN0IGNvcHlhYmxlQ29sdW1ucyA9IFtdO1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY29weWFibGVSYW5nZXMsIHJhbmdlID0+IHtcbiAgICAgIGZvciAobGV0IHZpc3VhbFJvdyA9IHJhbmdlLnN0YXJ0Um93OyB2aXN1YWxSb3cgPD0gcmFuZ2UuZW5kUm93OyB2aXN1YWxSb3cgKz0gMSkge1xuICAgICAgICBpZiAoY29weWFibGVSb3dzLmluZGV4T2YodmlzdWFsUm93KSA9PT0gLTEpIHtcbiAgICAgICAgICBjb3B5YWJsZVJvd3MucHVzaCh2aXN1YWxSb3cpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGxldCB2aXN1YWxDb2x1bW4gPSByYW5nZS5zdGFydENvbDsgdmlzdWFsQ29sdW1uIDw9IHJhbmdlLmVuZENvbDsgdmlzdWFsQ29sdW1uICs9IDEpIHtcbiAgICAgICAgaWYgKGNvcHlhYmxlQ29sdW1ucy5pbmRleE9mKHZpc3VhbENvbHVtbikgPT09IC0xKSB7XG4gICAgICAgICAgY29weWFibGVDb2x1bW5zLnB1c2godmlzdWFsQ29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShjb3B5YWJsZVJvd3MsIHJvdyA9PiB7XG4gICAgICBjb25zdCByb3dTZXQgPSBbXTtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShjb3B5YWJsZUNvbHVtbnMsIGNvbHVtbiA9PiB7XG4gICAgICAgIHJvd1NldC5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShyb3csIGNvbHVtbikpO1xuICAgICAgfSk7XG4gICAgICBkYXRhLnB1c2gocm93U2V0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gYXBwbHkgZmlsbCB2YWx1ZXMgdG8gdGhlIGFyZWEgaW4gZmlsbCBib3JkZXIsIG9taXR0aW5nIHRoZSBzZWxlY3Rpb24gYm9yZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmVwb3J0cyBpZiBmaWxsIHdhcyBhcHBsaWVkLlxuICAgKlxuICAgKiBAZmlyZXMgSG9va3MjbW9kaWZ5QXV0b2ZpbGxSYW5nZVxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQXV0b2ZpbGxcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyQXV0b2ZpbGxcbiAgICovXG4gIGZpbGxJbigpIHtcbiAgICBpZiAodGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRmlsbCBhcmVhIG1heSBzdGFydHMgb3IgZW5kcyB3aXRoIGludmlzaWJsZSBjZWxsLiBUaGVyZSB3b24ndCBiZSBhbnkgaW5mb3JtYXRpb24gYWJvdXQgaXQgYXMgaGlnaGxpZ2h0ZWRcbiAgICAvLyBzZWxlY3Rpb24gc3RvcmUganVzdCByZW5kZXJhYmxlIGluZGV4ZXMgKEl0J3MgcGFydCBvZiBXYWxrb250YWJsZSkuIEkgZXh0cmFwb2xhdGUgd2hlcmUgdGhlIHN0YXJ0IG9yL2FuZFxuICAgIC8vIHRoZSBlbmQgaXMuXG4gICAgY29uc3QgW2ZpbGxTdGFydFJvdywgZmlsbFN0YXJ0Q29sdW1uLCBmaWxsRW5kUm93LCBmaWxsRW5kQ29sdW1uXSA9IHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmdldFZpc3VhbENvcm5lcnMoKTtcbiAgICBjb25zdCBzZWxlY3Rpb25SYW5nZUxhc3QgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IHRvcFN0YXJ0Q29ybmVyID0gc2VsZWN0aW9uUmFuZ2VMYXN0LmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kQ29ybmVyID0gc2VsZWN0aW9uUmFuZ2VMYXN0LmdldEJvdHRvbUVuZENvcm5lcigpO1xuICAgIHRoaXMucmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCk7XG4gICAgY29uc3QgY29ybmVyc09mU2VsZWN0ZWRDZWxscyA9IFt0b3BTdGFydENvcm5lci5yb3csIHRvcFN0YXJ0Q29ybmVyLmNvbCwgYm90dG9tRW5kQ29ybmVyLnJvdywgYm90dG9tRW5kQ29ybmVyLmNvbF07XG4gICAgY29uc3QgY29ybmVyc09mU2VsZWN0aW9uQW5kRHJhZ0FyZWFzID0gdGhpcy5ob3QucnVuSG9va3MoJ21vZGlmeUF1dG9maWxsUmFuZ2UnLCBbTWF0aC5taW4odG9wU3RhcnRDb3JuZXIucm93LCBmaWxsU3RhcnRSb3cpLCBNYXRoLm1pbih0b3BTdGFydENvcm5lci5jb2wsIGZpbGxTdGFydENvbHVtbiksIE1hdGgubWF4KGJvdHRvbUVuZENvcm5lci5yb3csIGZpbGxFbmRSb3cpLCBNYXRoLm1heChib3R0b21FbmRDb3JuZXIuY29sLCBmaWxsRW5kQ29sdW1uKV0sIGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHMpO1xuICAgIGNvbnN0IHtcbiAgICAgIGRpcmVjdGlvbk9mRHJhZyxcbiAgICAgIHN0YXJ0T2ZEcmFnQ29vcmRzLFxuICAgICAgZW5kT2ZEcmFnQ29vcmRzXG4gICAgfSA9ICgwLCBfdXRpbHMuZ2V0RHJhZ0RpcmVjdGlvbkFuZFJhbmdlKShjb3JuZXJzT2ZTZWxlY3RlZENlbGxzLCBjb3JuZXJzT2ZTZWxlY3Rpb25BbmREcmFnQXJlYXMsIChyb3csIGNvbHVtbikgPT4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pKTtcbiAgICBpZiAoc3RhcnRPZkRyYWdDb29yZHMgJiYgc3RhcnRPZkRyYWdDb29yZHMucm93ID4gLTEgJiYgc3RhcnRPZkRyYWdDb29yZHMuY29sID4gLTEpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbkRhdGEgPSB0aGlzLmdldFNlbGVjdGlvbkRhdGEoKTtcbiAgICAgIGNvbnN0IHNvdXJjZVJhbmdlID0gc2VsZWN0aW9uUmFuZ2VMYXN0LmNsb25lKCk7XG4gICAgICBjb25zdCB0YXJnZXRSYW5nZSA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uoc3RhcnRPZkRyYWdDb29yZHMsIHN0YXJ0T2ZEcmFnQ29vcmRzLCBlbmRPZkRyYWdDb29yZHMpO1xuICAgICAgY29uc3QgYmVmb3JlQXV0b2ZpbGxIb29rUmVzdWx0ID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUF1dG9maWxsJywgc2VsZWN0aW9uRGF0YSwgc291cmNlUmFuZ2UsIHRhcmdldFJhbmdlLCBkaXJlY3Rpb25PZkRyYWcpO1xuICAgICAgaWYgKGJlZm9yZUF1dG9maWxsSG9va1Jlc3VsdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5ob3QucmVuZGVyKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGxldCBmaWxsRGF0YSA9IGJlZm9yZUF1dG9maWxsSG9va1Jlc3VsdDtcbiAgICAgIGNvbnN0IHJlcyA9IGJlZm9yZUF1dG9maWxsSG9va1Jlc3VsdDtcbiAgICAgIGlmIChbJ3VwJywgJ2xlZnQnXS5pbmRleE9mKGRpcmVjdGlvbk9mRHJhZykgPiAtMSAmJiAhKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgZmlsbERhdGEgPSBbXTtcbiAgICAgICAgaWYgKGRpcmVjdGlvbk9mRHJhZyA9PT0gJ3VwJykge1xuICAgICAgICAgIGNvbnN0IGRyYWdMZW5ndGggPSBlbmRPZkRyYWdDb29yZHMucm93IC0gc3RhcnRPZkRyYWdDb29yZHMucm93ICsgMTtcbiAgICAgICAgICBjb25zdCBmaWxsT2Zmc2V0ID0gZHJhZ0xlbmd0aCAlIHJlcy5sZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkcmFnTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZpbGxEYXRhLnB1c2gocmVzWyhpICsgKHJlcy5sZW5ndGggLSBmaWxsT2Zmc2V0KSkgJSByZXMubGVuZ3RoXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRyYWdMZW5ndGggPSBlbmRPZkRyYWdDb29yZHMuY29sIC0gc3RhcnRPZkRyYWdDb29yZHMuY29sICsgMTtcbiAgICAgICAgICBjb25zdCBmaWxsT2Zmc2V0ID0gZHJhZ0xlbmd0aCAlIHJlc1swXS5sZW5ndGg7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZpbGxEYXRhLnB1c2goW10pO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkcmFnTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgZmlsbERhdGFbaV0ucHVzaChyZXNbaV1bKGogKyAocmVzW2ldLmxlbmd0aCAtIGZpbGxPZmZzZXQpKSAlIHJlc1tpXS5sZW5ndGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHN0YXJ0T2ZEcmFnQ29vcmRzLnJvdywgc3RhcnRPZkRyYWdDb29yZHMuY29sLCBmaWxsRGF0YSwgZW5kT2ZEcmFnQ29vcmRzLnJvdywgZW5kT2ZEcmFnQ29vcmRzLmNvbCwgYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCwgbnVsbCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihjb3JuZXJzT2ZTZWxlY3Rpb25BbmREcmFnQXJlYXMpO1xuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQXV0b2ZpbGwnLCBmaWxsRGF0YSwgc291cmNlUmFuZ2UsIHRhcmdldFJhbmdlLCBkaXJlY3Rpb25PZkRyYWcpO1xuICAgICAgdGhpcy5ob3QucmVuZGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRvIGF2b2lkIHNvbWUgcmFuZ2UgYnVnXG4gICAgICB0aGlzLmhvdC52aWV3LnJlbmRlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWR1Y2VzIHRoZSBzZWxlY3Rpb24gYXJlYSBpZiB0aGUgaGFuZGxlIHdhcyBkcmFnZ2VkIG91dHNpZGUgb2YgdGhlIHRhYmxlIG9yIG9uIGhlYWRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIEluZGV4ZXMgb2Ygc2VsZWN0aW9uIGNvcm5lcnMuXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfVxuICAgKi9cbiAgcmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkKGNvb3Jkcykge1xuICAgIGlmIChjb29yZHMucm93IDwgMCkge1xuICAgICAgY29vcmRzLnJvdyA9IDA7XG4gICAgfVxuICAgIGlmIChjb29yZHMuY29sIDwgMCkge1xuICAgICAgY29vcmRzLmNvbCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBjb29yZHM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGRyYWcgJiBkcm9wIGJvcmRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzT2ZTZWxlY3Rpb24gYENlbGxDb29yZHNgIGNvb3JkIG9iamVjdC5cbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gICAqL1xuICBnZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhjb29yZHNPZlNlbGVjdGlvbikge1xuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0Q29ybmVyID0gY3VycmVudFNlbGVjdGlvbi5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBsZXQgY29vcmRzID0gY29vcmRzT2ZTZWxlY3Rpb247XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9ucy5pbmNsdWRlcyhfdXRpbHMuRElSRUNUSU9OUy52ZXJ0aWNhbCkgJiYgdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKF91dGlscy5ESVJFQ1RJT05TLmhvcml6b250YWwpKSB7XG4gICAgICBjb25zdCB0b3BTdGFydENvcm5lciA9IGN1cnJlbnRTZWxlY3Rpb24uZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGlmIChib3R0b21SaWdodENvcm5lci5jb2wgPD0gY29vcmRzT2ZTZWxlY3Rpb24uY29sIHx8IHRvcFN0YXJ0Q29ybmVyLmNvbCA+PSBjb29yZHNPZlNlbGVjdGlvbi5jb2wpIHtcbiAgICAgICAgY29vcmRzID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYm90dG9tUmlnaHRDb3JuZXIucm93LCBjb29yZHNPZlNlbGVjdGlvbi5jb2wpO1xuICAgICAgfVxuICAgICAgaWYgKGJvdHRvbVJpZ2h0Q29ybmVyLnJvdyA8IGNvb3Jkc09mU2VsZWN0aW9uLnJvdyB8fCB0b3BTdGFydENvcm5lci5yb3cgPiBjb29yZHNPZlNlbGVjdGlvbi5yb3cpIHtcbiAgICAgICAgY29vcmRzID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY29vcmRzT2ZTZWxlY3Rpb24ucm93LCBib3R0b21SaWdodENvcm5lci5jb2wpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKF91dGlscy5ESVJFQ1RJT05TLnZlcnRpY2FsKSkge1xuICAgICAgY29vcmRzID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY29vcmRzT2ZTZWxlY3Rpb24ucm93LCBib3R0b21SaWdodENvcm5lci5jb2wpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKF91dGlscy5ESVJFQ1RJT05TLmhvcml6b250YWwpKSB7XG4gICAgICBjb29yZHMgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhib3R0b21SaWdodENvcm5lci5yb3csIGNvb3Jkc09mU2VsZWN0aW9uLmNvbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdyb25nIGRpcmVjdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQoY29vcmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBmaWxsIGJvcmRlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHNPZlNlbGVjdGlvbiBgQ2VsbENvb3Jkc2AgY29vcmQgb2JqZWN0LlxuICAgKi9cbiAgc2hvd0JvcmRlcihjb29yZHNPZlNlbGVjdGlvbikge1xuICAgIGNvbnN0IGNvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzID0gdGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhjb29yZHNPZlNlbGVjdGlvbik7XG4gICAgaWYgKGNvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzKSB7XG4gICAgICB0aGlzLnJlZHJhd0JvcmRlcnMoY29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IHJvdy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGFkZFJvdygpIHtcbiAgICB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaG90LmFsdGVyKElOU0VSVF9ST1dfQUxURVJfQUNUSU9OX05BTUUsIHVuZGVmaW5lZCwgMSwgYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCk7XG4gICAgICB0aGlzLmFkZGluZ1N0YXJ0ZWQgPSBmYWxzZTtcbiAgICB9LCBJTlRFUlZBTF9GT1JfQURESU5HX1JPVyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyByb3dzIGlmIHRoZXkgYXJlIG5lZWRlZCB0byBjb250aW51ZSBhdXRvLWZpbGxpbmcgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYWRkTmV3Um93SWZOZWVkZWQoKSB7XG4gICAgaWYgKCF0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkgJiYgdGhpcy5hZGRpbmdTdGFydGVkID09PSBmYWxzZSAmJiB0aGlzLmF1dG9JbnNlcnRSb3cpIHtcbiAgICAgIGNvbnN0IGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHMgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtcbiAgICAgIGNvbnN0IGNvcm5lcnNPZlNlbGVjdGVkRHJhZ0FyZWEgPSB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCk7XG4gICAgICBjb25zdCBuck9mVGFibGVSb3dzID0gdGhpcy5ob3QuY291bnRSb3dzKCk7XG4gICAgICBpZiAoY29ybmVyc09mU2VsZWN0ZWRDZWxsc1syXSA8IG5yT2ZUYWJsZVJvd3MgLSAxICYmIGNvcm5lcnNPZlNlbGVjdGVkRHJhZ0FyZWFbMl0gPT09IG5yT2ZUYWJsZVJvd3MgLSAxKSB7XG4gICAgICAgIHRoaXMuYWRkaW5nU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRkUm93KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmRleCBvZiBsYXN0IGFkamFjZW50IGZpbGxlZCBpbiByb3cuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHMgSW5kZXhlcyBvZiBzZWxlY3Rpb24gY29ybmVycy5cbiAgICogQHJldHVybnMge251bWJlcn0gR2l2ZXMgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIHdoZW4gc2VsZWN0aW9uIGFkamFjZW50IGNhbiBiZSBhcHBsaWVkLlxuICAgKiAgICAgICAgICAgICAgICAgICBPciAtMSB3aGVuIHNlbGVjdGlvbiBhZGphY2VudCBjYW4ndCBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHMpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5ob3QuZ2V0RGF0YSgpO1xuICAgIGNvbnN0IG5yT2ZUYWJsZVJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBsZXQgbGFzdEZpbGxlZEluUm93SW5kZXg7XG4gICAgZm9yIChsZXQgcm93SW5kZXggPSBjb3JuZXJzT2ZTZWxlY3RlZENlbGxzWzJdICsgMTsgcm93SW5kZXggPCBuck9mVGFibGVSb3dzOyByb3dJbmRleCsrKSB7XG4gICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHNbMV07IGNvbHVtbkluZGV4IDw9IGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHNbM107IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgY29uc3QgZGF0YUluQ2VsbCA9IGRhdGFbcm93SW5kZXhdW2NvbHVtbkluZGV4XTtcbiAgICAgICAgaWYgKCEoMCwgX21peGVkLmlzRW1wdHkpKGRhdGFJbkNlbGwpKSB7XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhSW5OZXh0TGVmdENlbGwgPSBkYXRhW3Jvd0luZGV4XVtjb3JuZXJzT2ZTZWxlY3RlZENlbGxzWzFdIC0gMV07XG4gICAgICBjb25zdCBkYXRhSW5OZXh0UmlnaHRDZWxsID0gZGF0YVtyb3dJbmRleF1bY29ybmVyc09mU2VsZWN0ZWRDZWxsc1szXSArIDFdO1xuICAgICAgaWYgKCEoMCwgX21peGVkLmlzRW1wdHkpKGRhdGFJbk5leHRMZWZ0Q2VsbCkgfHwgISgwLCBfbWl4ZWQuaXNFbXB0eSkoZGF0YUluTmV4dFJpZ2h0Q2VsbCkpIHtcbiAgICAgICAgbGFzdEZpbGxlZEluUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxhc3RGaWxsZWRJblJvd0luZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgc3RhcnQgYXJlYSB0byB0aGUgc3BlY2lmaWMgcm93IGluZGV4LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3RTdGFydEFyZWEgU2VsZWN0aW9uIGFyZWEgZnJvbSB3aGljaCB3ZSBzdGFydCB0byBjcmVhdGUgbW9yZSBjb21wcmVoZW5zaXZlIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IFRoZSByb3cgaW5kZXggaW50byB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgYWRkZWQuXG4gICAqL1xuICBhZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KHNlbGVjdFN0YXJ0QXJlYSwgcm93SW5kZXgpIHtcbiAgICB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhzZWxlY3RTdGFydEFyZWFbMF0sIHNlbGVjdFN0YXJ0QXJlYVsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3dJbmRleCwgc2VsZWN0U3RhcnRBcmVhWzNdKSkuY29tbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBzZWxlY3Rpb24gYmFzZWQgb24gcGFzc2VkIGNvcm5lcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvcm5lcnNPZkFyZWEgQW4gYXJyYXkgd2l0Y2ggZGVmaW5lcyBzZWxlY3Rpb24uXG4gICAqL1xuICBzZXRTZWxlY3Rpb24oY29ybmVyc09mQXJlYSkge1xuICAgIHRoaXMuaG90LnNlbGVjdENlbGwoLi4uKDAsIF9hcnJheS5hcnJheU1hcCkoY29ybmVyc09mQXJlYSwgaW5kZXggPT4gTWF0aC5tYXgoaW5kZXgsIDApKSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcnkgdG8gc2VsZWN0IGNlbGxzIGRvd24gdG8gdGhlIGxhc3Qgcm93IGluIHRoZSBsZWZ0IGNvbHVtbiBhbmQgdGhlbiByZXR1cm5zIGlmIHNlbGVjdGlvbiB3YXMgYXBwbGllZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZWxlY3RBZGphY2VudCgpIHtcbiAgICBjb25zdCBjb3JuZXJzT2ZTZWxlY3RlZENlbGxzID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgY29uc3QgbGFzdEZpbGxlZEluUm93SW5kZXggPSB0aGlzLmdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhjb3JuZXJzT2ZTZWxlY3RlZENlbGxzKTtcbiAgICBpZiAobGFzdEZpbGxlZEluUm93SW5kZXggPT09IC0xIHx8IGxhc3RGaWxsZWRJblJvd0luZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0luZGV4KGNvcm5lcnNPZlNlbGVjdGVkQ2VsbHMsIGxhc3RGaWxsZWRJblJvd0luZGV4KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgc2VsZWN0aW9uIG9mIGRyYWdnZWQgYXJlYS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpIHtcbiAgICB0aGlzLmhhbmRsZURyYWdnZWRDZWxscyA9IDA7XG4gICAgdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRyYXdzIGJvcmRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIGBDZWxsQ29vcmRzYCBjb29yZCBvYmplY3QuXG4gICAqL1xuICByZWRyYXdCb3JkZXJzKGNvb3Jkcykge1xuICAgIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZnJvbSkuYWRkKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkudG8pLmFkZChjb29yZHMpLmNvbW1pdCgpO1xuICAgIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlmIG1vdXNlIHdhcyBkcmFnZ2VkIG91dHNpZGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgYG1vdXNlbW92ZWAgZXZlbnQgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBnZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoZXZlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICBkb2N1bWVudEVsZW1lbnRcbiAgICB9ID0gdGhpcy5ob3Qucm9vdERvY3VtZW50O1xuICAgIGNvbnN0IHRhYmxlQm90dG9tID0gKDAsIF9lbGVtZW50Lm9mZnNldCkodGhpcy5ob3QudGFibGUpLnRvcCAtICh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApICsgKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KSh0aGlzLmhvdC50YWJsZSk7XG4gICAgY29uc3QgdGFibGVSaWdodCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHRoaXMuaG90LnRhYmxlKS5sZWZ0IC0gKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpICsgKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHRoaXMuaG90LnRhYmxlKTtcbiAgICByZXR1cm4gZXZlbnQuY2xpZW50WSA+IHRhYmxlQm90dG9tICYmIGV2ZW50LmNsaWVudFggPD0gdGFibGVSaWdodDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kIHRoZSBldmVudHMgdXNlZCBieSB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZG9jdW1lbnRFbGVtZW50XG4gICAgfSA9IHRoaXMuaG90LnJvb3REb2N1bWVudDtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ21vdXNldXAnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQXV0b2ZpbGxfYnJhbmQsIHRoaXMsIF9vbk1vdXNlVXApLmNhbGwodGhpcykpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnRFbGVtZW50LCAnbW91c2Vtb3ZlJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0F1dG9maWxsX2JyYW5kLCB0aGlzLCBfb25Nb3VzZU1vdmUpLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIG1hcHBlZCBzZXR0aW5ncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyTWFwcGVkU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5kaXJlY3Rpb25zLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5hdXRvSW5zZXJ0Um93ID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogTWFwIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFwU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgbWFwcGVkU2V0dGluZ3MgPSAoMCwgX3V0aWxzLmdldE1hcHBlZEZpbGxIYW5kbGVTZXR0aW5nKSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpbGxIYW5kbGUpO1xuICAgIHRoaXMuZGlyZWN0aW9ucyA9IG1hcHBlZFNldHRpbmdzLmRpcmVjdGlvbnM7XG4gICAgdGhpcy5hdXRvSW5zZXJ0Um93ID0gbWFwcGVkU2V0dGluZ3MuYXV0b0luc2VydFJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuQXV0b2ZpbGwgPSBBdXRvZmlsbDtcbmZ1bmN0aW9uIF9vbkNlbGxDb3JuZXJEYmxDbGljaygpIHtcbiAgY29uc3Qgc2VsZWN0aW9uQXBwbGllZCA9IHRoaXMuc2VsZWN0QWRqYWNlbnQoKTtcbiAgaWYgKHNlbGVjdGlvbkFwcGxpZWQpIHtcbiAgICB0aGlzLmZpbGxJbigpO1xuICB9XG59XG4vKipcbiAqIE9uIGFmdGVyIGNlbGwgY29ybmVyIG1vdXNlIGRvd24gbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bigpIHtcbiAgdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMgPSAxO1xuICB0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciA9IHRydWU7XG59XG4vKipcbiAqIE9uIGJlZm9yZSBjZWxsIG1vdXNlIG92ZXIgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgYENlbGxDb29yZHNgIGNvb3JkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQ2VsbE1vdXNlT3Zlcihjb29yZHMpIHtcbiAgaWYgKHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyICYmICF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCkgJiYgdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMpIHtcbiAgICB0aGlzLmhhbmRsZURyYWdnZWRDZWxscyArPSAxO1xuICAgIHRoaXMuc2hvd0JvcmRlcihjb29yZHMpO1xuICAgIHRoaXMuYWRkTmV3Um93SWZOZWVkZWQoKTtcbiAgfVxufVxuLyoqXG4gKiBPbiBtb3VzZSB1cCBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gX29uTW91c2VVcCgpIHtcbiAgaWYgKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzID4gMSkge1xuICAgICAgdGhpcy5maWxsSW4oKTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMgPSAwO1xuICAgIHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyID0gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogT24gbW91c2UgbW92ZSBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IGBtb3VzZW1vdmVgIGV2ZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vdXNlTW92ZShldmVudCkge1xuICBjb25zdCBtb3VzZVdhc0RyYWdnZWRPdXRzaWRlID0gdGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoZXZlbnQpO1xuICBpZiAodGhpcy5hZGRpbmdTdGFydGVkID09PSBmYWxzZSAmJiB0aGlzLmhhbmRsZURyYWdnZWRDZWxscyA+IDAgJiYgbW91c2VXYXNEcmFnZ2VkT3V0c2lkZSkge1xuICAgIHRoaXMubW91c2VEcmFnT3V0c2lkZSA9IHRydWU7XG4gICAgdGhpcy5hZGRpbmdTdGFydGVkID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1vdXNlRHJhZ091dHNpZGUgPSBmYWxzZTtcbiAgfVxuICBpZiAodGhpcy5tb3VzZURyYWdPdXRzaWRlICYmIHRoaXMuYXV0b0luc2VydFJvdykge1xuICAgIHRoaXMuYWRkUm93KCk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXV0b2ZpbGwgPSByZXF1aXJlKFwiLi9hdXRvZmlsbFwiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9hdXRvZmlsbC5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfYXV0b2ZpbGwuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5BdXRvZmlsbCA9IF9hdXRvZmlsbC5BdXRvZmlsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0RHJhZ0RpcmVjdGlvbkFuZFJhbmdlID0gZ2V0RHJhZ0RpcmVjdGlvbkFuZFJhbmdlO1xuZXhwb3J0cy5nZXRNYXBwZWRGaWxsSGFuZGxlU2V0dGluZyA9IGdldE1hcHBlZEZpbGxIYW5kbGVTZXR0aW5nO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG5jb25zdCBESVJFQ1RJT05TID0gZXhwb3J0cy5ESVJFQ1RJT05TID0ge1xuICBob3Jpem9udGFsOiAnaG9yaXpvbnRhbCcsXG4gIHZlcnRpY2FsOiAndmVydGljYWwnXG59O1xuXG4vKipcbiAqIEdldCBkaXJlY3Rpb24gYmV0d2VlbiBwb3NpdGlvbnMgYW5kIGNvcmRzIG9mIHNlbGVjdGlvbnMgZGlmZmVyZW5jZSAoZHJhZyBhcmVhKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydFNlbGVjdGlvbiBUaGUgY29vcmRpbmF0ZXMgd2hlcmUgdGhlIHNlbGVjdGlvbiBzdGFydHMuXG4gKiBAcGFyYW0ge0FycmF5fSBlbmRTZWxlY3Rpb24gVGhlIGNvb3JkaW5hdGVzIHdoZXJlIHRoZSBzZWxlY3Rpb24gZW5kcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNlbGxDb29yZHNGYWN0b3J5IFRoZSBmdW5jdGlvbiBmYWN0b3J5IGZvciBDZWxsQ29vcmRzIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7e2RpcmVjdGlvbjogc3RyaW5nLCBzdGFydDogQ2VsbENvb3JkcywgZW5kOiBDZWxsQ29vcmRzfX1cbiAqL1xuZnVuY3Rpb24gZ2V0RHJhZ0RpcmVjdGlvbkFuZFJhbmdlKHN0YXJ0U2VsZWN0aW9uLCBlbmRTZWxlY3Rpb24sIGNlbGxDb29yZHNGYWN0b3J5KSB7XG4gIGxldCBzdGFydE9mRHJhZ0Nvb3JkcztcbiAgbGV0IGVuZE9mRHJhZ0Nvb3JkcztcbiAgbGV0IGRpcmVjdGlvbk9mRHJhZztcbiAgaWYgKGVuZFNlbGVjdGlvblswXSA9PT0gc3RhcnRTZWxlY3Rpb25bMF0gJiYgZW5kU2VsZWN0aW9uWzFdIDwgc3RhcnRTZWxlY3Rpb25bMV0pIHtcbiAgICBkaXJlY3Rpb25PZkRyYWcgPSAnbGVmdCc7XG4gICAgc3RhcnRPZkRyYWdDb29yZHMgPSBjZWxsQ29vcmRzRmFjdG9yeShlbmRTZWxlY3Rpb25bMF0sIGVuZFNlbGVjdGlvblsxXSk7XG4gICAgZW5kT2ZEcmFnQ29vcmRzID0gY2VsbENvb3Jkc0ZhY3RvcnkoZW5kU2VsZWN0aW9uWzJdLCBzdGFydFNlbGVjdGlvblsxXSAtIDEpO1xuICB9IGVsc2UgaWYgKGVuZFNlbGVjdGlvblsyXSA9PT0gc3RhcnRTZWxlY3Rpb25bMl0gJiYgZW5kU2VsZWN0aW9uWzBdID09PSBzdGFydFNlbGVjdGlvblswXSAmJiBlbmRTZWxlY3Rpb25bM10gPiBzdGFydFNlbGVjdGlvblszXSkge1xuICAgIGRpcmVjdGlvbk9mRHJhZyA9ICdyaWdodCc7XG4gICAgc3RhcnRPZkRyYWdDb29yZHMgPSBjZWxsQ29vcmRzRmFjdG9yeShlbmRTZWxlY3Rpb25bMF0sIHN0YXJ0U2VsZWN0aW9uWzNdICsgMSk7XG4gICAgZW5kT2ZEcmFnQ29vcmRzID0gY2VsbENvb3Jkc0ZhY3RvcnkoZW5kU2VsZWN0aW9uWzJdLCBlbmRTZWxlY3Rpb25bM10pO1xuICB9IGVsc2UgaWYgKGVuZFNlbGVjdGlvblswXSA8IHN0YXJ0U2VsZWN0aW9uWzBdICYmIGVuZFNlbGVjdGlvblsxXSA9PT0gc3RhcnRTZWxlY3Rpb25bMV0pIHtcbiAgICBkaXJlY3Rpb25PZkRyYWcgPSAndXAnO1xuICAgIHN0YXJ0T2ZEcmFnQ29vcmRzID0gY2VsbENvb3Jkc0ZhY3RvcnkoZW5kU2VsZWN0aW9uWzBdLCBlbmRTZWxlY3Rpb25bMV0pO1xuICAgIGVuZE9mRHJhZ0Nvb3JkcyA9IGNlbGxDb29yZHNGYWN0b3J5KHN0YXJ0U2VsZWN0aW9uWzBdIC0gMSwgZW5kU2VsZWN0aW9uWzNdKTtcbiAgfSBlbHNlIGlmIChlbmRTZWxlY3Rpb25bMl0gPiBzdGFydFNlbGVjdGlvblsyXSAmJiBlbmRTZWxlY3Rpb25bMV0gPT09IHN0YXJ0U2VsZWN0aW9uWzFdKSB7XG4gICAgZGlyZWN0aW9uT2ZEcmFnID0gJ2Rvd24nO1xuICAgIHN0YXJ0T2ZEcmFnQ29vcmRzID0gY2VsbENvb3Jkc0ZhY3Rvcnkoc3RhcnRTZWxlY3Rpb25bMl0gKyAxLCBlbmRTZWxlY3Rpb25bMV0pO1xuICAgIGVuZE9mRHJhZ0Nvb3JkcyA9IGNlbGxDb29yZHNGYWN0b3J5KGVuZFNlbGVjdGlvblsyXSwgZW5kU2VsZWN0aW9uWzNdKTtcbiAgfVxuICBpZiAoc3RhcnRPZkRyYWdDb29yZHMpIHtcbiAgICBzdGFydE9mRHJhZ0Nvb3Jkcy5ub3JtYWxpemUoKTtcbiAgfVxuICBpZiAoZW5kT2ZEcmFnQ29vcmRzKSB7XG4gICAgZW5kT2ZEcmFnQ29vcmRzLm5vcm1hbGl6ZSgpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGlyZWN0aW9uT2ZEcmFnLFxuICAgIHN0YXJ0T2ZEcmFnQ29vcmRzLFxuICAgIGVuZE9mRHJhZ0Nvb3Jkc1xuICB9O1xufVxuXG4vKipcbiAqIEdldCBtYXBwZWQgRmlsbEhhbmRsZSBzZXR0aW5nIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXRcbiAqIGFsbG93ZWQgRmlsbEhhbmRsZSBkaXJlY3Rpb25zIGFuZCBpZiBhbGxvd2VkIGlzIGF1dG9tYXRpYyBpbnNlcnRpb24gb2Ygcm93cyBvbiBkcmFnLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbnxvYmplY3R9IGZpbGxIYW5kbGUgUHJvcGVydHkgb2YgSGFuZHNvbnRhYmxlIHNldHRpbmdzLlxuICogQHJldHVybnMge3tkaXJlY3Rpb25zOiBBcnJheSwgYXV0b0luc2VydFJvdzogYm9vbGVhbn19IE9iamVjdCBhbGxvd2luZyBhY2Nlc3MgdG8gaW5mb3JtYXRpb25cbiAqIGFib3V0IEZpbGxIYW5kbGUgaW4gbW9yZSB1c2VmdWwgd2F5LlxuICovXG5mdW5jdGlvbiBnZXRNYXBwZWRGaWxsSGFuZGxlU2V0dGluZyhmaWxsSGFuZGxlKSB7XG4gIGNvbnN0IG1hcHBlZFNldHRpbmdzID0ge307XG4gIGlmIChmaWxsSGFuZGxlID09PSB0cnVlKSB7XG4gICAgbWFwcGVkU2V0dGluZ3MuZGlyZWN0aW9ucyA9IE9iamVjdC5rZXlzKERJUkVDVElPTlMpO1xuICAgIG1hcHBlZFNldHRpbmdzLmF1dG9JbnNlcnRSb3cgPSB0cnVlO1xuICB9IGVsc2UgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShmaWxsSGFuZGxlKSkge1xuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoZmlsbEhhbmRsZS5hdXRvSW5zZXJ0Um93KSkge1xuICAgICAgLy8gYXV0b0luc2VydFJvdyBmb3IgaG9yaXpvbnRhbCBkaXJlY3Rpb24gd2lsbCBiZSBhbHdheXMgZmFsc2VcblxuICAgICAgaWYgKGZpbGxIYW5kbGUuZGlyZWN0aW9uID09PSBESVJFQ1RJT05TLmhvcml6b250YWwpIHtcbiAgICAgICAgbWFwcGVkU2V0dGluZ3MuYXV0b0luc2VydFJvdyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFwcGVkU2V0dGluZ3MuYXV0b0luc2VydFJvdyA9IGZpbGxIYW5kbGUuYXV0b0luc2VydFJvdztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWFwcGVkU2V0dGluZ3MuYXV0b0luc2VydFJvdyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGZpbGxIYW5kbGUuZGlyZWN0aW9uKSkge1xuICAgICAgbWFwcGVkU2V0dGluZ3MuZGlyZWN0aW9ucyA9IFtmaWxsSGFuZGxlLmRpcmVjdGlvbl07XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcHBlZFNldHRpbmdzLmRpcmVjdGlvbnMgPSBPYmplY3Qua2V5cyhESVJFQ1RJT05TKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpbGxIYW5kbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgbWFwcGVkU2V0dGluZ3MuZGlyZWN0aW9ucyA9IFtmaWxsSGFuZGxlXTtcbiAgICBtYXBwZWRTZXR0aW5ncy5hdXRvSW5zZXJ0Um93ID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBtYXBwZWRTZXR0aW5ncy5kaXJlY3Rpb25zID0gW107XG4gICAgbWFwcGVkU2V0dGluZ3MuYXV0b0luc2VydFJvdyA9IGZhbHNlO1xuICB9XG4gIHJldHVybiBtYXBwZWRTZXR0aW5ncztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfcmVnaXN0cnkgPSByZXF1aXJlKFwiLi4vcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5MiA9IHJlcXVpcmUoXCIuLi8uLi9jZWxsVHlwZXMvcmVnaXN0cnlcIik7XG52YXIgX3JlZ2lzdHJ5MyA9IHJlcXVpcmUoXCIuLi8uLi9lZGl0b3JzL3JlZ2lzdHJ5XCIpO1xudmFyIF9yZWdpc3RyeTQgPSByZXF1aXJlKFwiLi4vLi4vcmVuZGVyZXJzL3JlZ2lzdHJ5XCIpO1xudmFyIF9yZWdpc3RyeTUgPSByZXF1aXJlKFwiLi4vLi4vdmFsaWRhdG9ycy9yZWdpc3RyeVwiKTtcbnZhciBfZXZlbnRNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vZXZlbnRNYW5hZ2VyXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IERFUFNfVFlQRV9DSEVDS0VSUyA9IG5ldyBNYXAoW1sncGx1Z2luJywgX3JlZ2lzdHJ5Lmhhc1BsdWdpbl0sIFsnY2VsbC10eXBlJywgX3JlZ2lzdHJ5Mi5oYXNDZWxsVHlwZV0sIFsnZWRpdG9yJywgX3JlZ2lzdHJ5My5oYXNFZGl0b3JdLCBbJ3JlbmRlcmVyJywgX3JlZ2lzdHJ5NC5oYXNSZW5kZXJlcl0sIFsndmFsaWRhdG9yJywgX3JlZ2lzdHJ5NS5oYXNWYWxpZGF0b3JdXSk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2Jhc2UnO1xuY29uc3QgbWlzc2luZ0RlcHNNc2dzID0gW107XG5sZXQgaW5pdGlhbGl6ZWRQbHVnaW5zID0gbnVsbDtcblxuLyoqXG4gKiBAdXRpbFxuICogQHByb3BlcnR5IHtDb3JlfSBob3QgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG52YXIgX2hvb2tzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX0Jhc2VQbHVnaW5fYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIEJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGBTRVRUSU5HX0tFWVNgIGdldHRlciBkZWZpbmVzIHRoZSBrZXlzIHRoYXQsIHdoZW4gcHJlc2VudCBpbiB0aGUgY29uZmlnIG9iamVjdCwgdHJpZ2dlciB0aGUgcGx1Z2luIHVwZGF0ZVxuICAgKiBhZnRlciB0aGUgYHVwZGF0ZVNldHRpbmdzYCBjYWxscy5cbiAgICogLSBXaGVuIGl0IHJldHVybnMgYHRydWVgLCB0aGUgcGx1Z2luIHVwZGF0ZXMgYWZ0ZXIgYWxsIGB1cGRhdGVTZXR0aW5nc2AgY2FsbHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZVxuICAgKiBjb25maWcgb2JqZWN0LlxuICAgKiAtIFdoZW4gaXQgcmV0dXJucyBgZmFsc2VgLCB0aGUgcGx1Z2luIG5ldmVyIHVwZGF0ZXMgb24gYHVwZGF0ZVNldHRpbmdzYCBjYWxscy5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ1tdIHwgYm9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCkge1xuICAgIHJldHVybiBbdGhpcy5QTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHtAbGluayBFdmVudE1hbmFnZXJ9IGNsYXNzLlxuICAgKlxuICAgKiBAdHlwZSB7RXZlbnRNYW5hZ2VyfVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGhvdEluc3RhbmNlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlKSB7XG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW55IG9mIHRoZSBrZXlzIGRlZmluZWQgaW4gYFNFVFRJTkdfS0VZU2AgY29uZmlndXJhdGlvbiBvZiB0aGUgcGx1Z2luIGlzIHByZXNlbnQgaW4gdGhlIHByb3ZpZGVkXG4gICAgICogY29uZmlnIG9iamVjdCwgb3IgaWYgdGhlIGBTRVRUSU5HX0tFWVNgIGNvbmZpZ3VyYXRpb24gc3RhdGVzIHRoYXQgdGhlIHBsdWdpbiBpcyByZWxldmFudCB0byB0aGUgY29uZmlnIG9iamVjdFxuICAgICAqIHJlZ2FyZGxlc3Mgb2YgaXRzIGNvbnRlbnRzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge0hhbmRzb250YWJsZS5EZWZhdWx0U2V0dGluZ3N9IHNldHRpbmdzIFRoZSBjb25maWcgb2JqZWN0IHBhc3NlZCB0byBgdXBkYXRlU2V0dGluZ3NgLlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQmFzZVBsdWdpbl9icmFuZCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZXZlbnRNYW5hZ2VyXCIsIG5ldyBfZXZlbnRNYW5hZ2VyLmRlZmF1bHQodGhpcykpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicGx1Z2luTmFtZVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb25bXX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3NcIiwgW10pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzUGx1Z2luc1JlYWR5XCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJlbmFibGVkXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbml0aWFsaXplZFwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwbHVnaW5zIGhvb2tzLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ob29rcywge30pO1xuICAgIC8qKlxuICAgICAqIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgICgwLCBfb2JqZWN0LmRlZmluZUdldHRlcikodGhpcywgJ2hvdCcsIGhvdEluc3RhbmNlLCB7XG4gICAgICB3cml0YWJsZTogZmFsc2VcbiAgICB9KTtcbiAgICBpbml0aWFsaXplZFBsdWdpbnMgPSBudWxsO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyUGx1Z2luc0luaXRpYWxpemVkJywgKCkgPT4gdGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyVXBkYXRlU2V0dGluZ3MnLCBuZXdTZXR0aW5ncyA9PiB0aGlzLm9uVXBkYXRlU2V0dGluZ3MobmV3U2V0dGluZ3MpKTtcbiAgICB0aGlzLmhvdC5hZGRIb29rKCdiZWZvcmVJbml0JywgKCkgPT4gdGhpcy5pbml0KCkpO1xuICB9XG4gIGluaXQoKSB7XG4gICAgdGhpcy5wbHVnaW5OYW1lID0gdGhpcy5ob3QuZ2V0UGx1Z2luTmFtZSh0aGlzKTtcbiAgICBjb25zdCBwbHVnaW5EZXBzID0gdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUztcbiAgICBjb25zdCBkZXBzID0gQXJyYXkuaXNBcnJheShwbHVnaW5EZXBzKSA/IHBsdWdpbkRlcHMgOiBbXTtcbiAgICBpZiAoZGVwcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtaXNzaW5nRGVwZW5kZW5jaWVzID0gW107XG4gICAgICBkZXBzLmZvckVhY2goZGVwZW5kZW5jeSA9PiB7XG4gICAgICAgIGNvbnN0IFt0eXBlLCBtb2R1bGVOYW1lXSA9IGRlcGVuZGVuY3kuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKCFERVBTX1RZUEVfQ0hFQ0tFUlMuaGFzKHR5cGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgXCIke3R5cGV9XCIgd2FzIGZvdW5kLmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghREVQU19UWVBFX0NIRUNLRVJTLmdldCh0eXBlKShtb2R1bGVOYW1lKSkge1xuICAgICAgICAgIG1pc3NpbmdEZXBlbmRlbmNpZXMucHVzaChgIC0gJHttb2R1bGVOYW1lfSAoJHt0eXBlfSlgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAobWlzc2luZ0RlcGVuZGVuY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gW2BUaGUgJHt0aGlzLnBsdWdpbk5hbWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XFxuYCwgYCR7bWlzc2luZ0RlcGVuZGVuY2llcy5qb2luKCdcXG4nKX1cXG5gXS5qb2luKCcnKTtcbiAgICAgICAgbWlzc2luZ0RlcHNNc2dzLnB1c2goZXJyb3JNc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWluaXRpYWxpemVkUGx1Z2lucykge1xuICAgICAgaW5pdGlhbGl6ZWRQbHVnaW5zID0gKDAsIF9yZWdpc3RyeS5nZXRQbHVnaW5zTmFtZXMpKCk7XG4gICAgfVxuXG4gICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhlIFVuZG9SZWRvIHBsdWdpbiB3aGljaCwgY3VycmVudGx5IGRvZXNuJ3QgZm9sbG93IHRoZSBwbHVnaW4gYXJjaGl0ZWN0dXJlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyBsaW5lIHRoZSBgY2FsbE9uUGx1Z2luc1JlYWR5YCBjYWxsYmFjayB3b24ndCBiZSB0cmlnZ2VyZWQgYWZ0ZXIgYWxsIHBsdWdpblxuICAgIC8vIGluaXRpYWxpemF0aW9uLlxuICAgIGlmIChpbml0aWFsaXplZFBsdWdpbnMuaW5kZXhPZignVW5kb1JlZG8nKSA+PSAwKSB7XG4gICAgICBpbml0aWFsaXplZFBsdWdpbnMuc3BsaWNlKGluaXRpYWxpemVkUGx1Z2lucy5pbmRleE9mKCdVbmRvUmVkbycpLCAxKTtcbiAgICB9XG4gICAgaWYgKGluaXRpYWxpemVkUGx1Z2lucy5pbmRleE9mKHRoaXMucGx1Z2luTmFtZSkgPj0gMCkge1xuICAgICAgaW5pdGlhbGl6ZWRQbHVnaW5zLnNwbGljZShpbml0aWFsaXplZFBsdWdpbnMuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpLCAxKTtcbiAgICB9XG4gICAgdGhpcy5ob3QuYWRkSG9va09uY2UoJ2FmdGVyUGx1Z2luc0luaXRpYWxpemVkJywgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNFbmFibGVkICYmIHRoaXMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgdGhpcy5lbmFibGVQbHVnaW4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpc0FsbFBsdWdpbnNBcmVJbml0aWFsaXplZCA9IGluaXRpYWxpemVkUGx1Z2lucy5sZW5ndGggPT09IDA7XG4gICAgaWYgKGlzQWxsUGx1Z2luc0FyZUluaXRpYWxpemVkKSB7XG4gICAgICBpZiAobWlzc2luZ0RlcHNNc2dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSBbYCR7bWlzc2luZ0RlcHNNc2dzLmpvaW4oJ1xcbicpfVxcbmAsICdZb3UgaGF2ZSB0byBpbXBvcnQgYW5kIHJlZ2lzdGVyIHRoZW0gbWFudWFsbHkuJ10uam9pbignJyk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1zZyk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHBsdWdpbiBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHBsdWdpbiBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyRldmVudE1hbmFnZXI7XG4gICAgKF90aGlzJGV2ZW50TWFuYWdlciA9IHRoaXMuZXZlbnRNYW5hZ2VyKSA9PT0gbnVsbCB8fCBfdGhpcyRldmVudE1hbmFnZXIgPT09IHZvaWQgMCB8fCBfdGhpcyRldmVudE1hbmFnZXIuY2xlYXIoKTtcbiAgICB0aGlzLmNsZWFySG9va3MoKTtcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbGlzdGVuZXIgdG8gcGx1Z2luIGhvb2tzIHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIGhvb2sgbmFtZS5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGFkZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlckluZGV4XSBPcmRlciBpbmRleCBvZiB0aGUgY2FsbGJhY2suXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgPiAwLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBhZnRlciB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAxLCB0aGUgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAyLCAzLCBldGMuLCBidXQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBsb3dlci5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiA8IDAsIHRoZSBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGJlZm9yZSB0aGUgb3RoZXJzLCBmb3IgZXhhbXBsZSwgd2l0aCBhbiBpbmRleCBvZiAtMSwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAtMiwgLTMsIGV0Yy4sIGJ1dCBiZWZvcmUgdGhlIG9uZXMgd2l0aCBhbiBpbmRleCBvZiAwIGFuZCBoaWdoZXIuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgMCBvciBubyBvcmRlciBpbmRleCBpcyBwcm92aWRlZCwgdGhlIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYmV0d2VlbiB0aGUgXCJuZWdhdGl2ZVwiIGFuZCBcInBvc2l0aXZlXCIgaW5kZXhlcy5cbiAgICovXG4gIGFkZEhvb2sobmFtZSwgY2FsbGJhY2ssIG9yZGVySW5kZXgpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvb2tzLCB0aGlzKVtuYW1lXSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG9va3MsIHRoaXMpW25hbWVdIHx8IFtdO1xuICAgIGNvbnN0IGhvb2tzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob29rcywgdGhpcylbbmFtZV07XG4gICAgdGhpcy5ob3QuYWRkSG9vayhuYW1lLCBjYWxsYmFjaywgb3JkZXJJbmRleCk7XG4gICAgaG9va3MucHVzaChjYWxsYmFjayk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob29rcywgdGhpcylbbmFtZV0gPSBob29rcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGhvb2tzIGxpc3RlbmVycyBieSBob29rIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBob29rIG5hbWUuXG4gICAqL1xuICByZW1vdmVIb29rcyhuYW1lKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG9va3MsIHRoaXMpW25hbWVdIHx8IFtdLCBjYWxsYmFjayA9PiB7XG4gICAgICB0aGlzLmhvdC5yZW1vdmVIb29rKG5hbWUsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaG9va3MuXG4gICAqL1xuICBjbGVhckhvb2tzKCkge1xuICAgIGNvbnN0IGhvb2tzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob29rcywgdGhpcyk7XG4gICAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoaG9va3MsIChjYWxsYmFja3MsIG5hbWUpID0+IHRoaXMucmVtb3ZlSG9va3MobmFtZSkpO1xuICAgIGhvb2tzLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBpbW1lZGlhdGVseSBjYWxsZWQgYWZ0ZXIgYWxsIHBsdWdpbnMgaW5pdGlhbGl6ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBsaXN0ZW5lciBmdW5jdGlvbiB0byBjYWxsLlxuICAgKi9cbiAgY2FsbE9uUGx1Z2luc1JlYWR5KGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuaXNQbHVnaW5zUmVhZHkpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogT24gYWZ0ZXIgcGx1Z2lucyBpbml0aWFsaXplZCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQoKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLCBjYWxsYmFjayA9PiBjYWxsYmFjaygpKTtcbiAgICB0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGggPSAwO1xuICAgIHRoaXMuaXNQbHVnaW5zUmVhZHkgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHVwZGF0ZSBzZXR0aW5ncyBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld1NldHRpbmdzIE5ldyBzZXQgb2Ygc2V0dGluZ3MgcGFzc2VkIHRvIHRoZSBgdXBkYXRlU2V0dGluZ3NgIG1ldGhvZC5cbiAgICovXG4gIG9uVXBkYXRlU2V0dGluZ3MobmV3U2V0dGluZ3MpIHtcbiAgICBjb25zdCByZWxldmFudFRvU2V0dGluZ3MgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfQmFzZVBsdWdpbl9icmFuZCwgdGhpcywgX2lzUmVsZXZhbnRUb1NldHRpbmdzKS5jYWxsKHRoaXMsIG5ld1NldHRpbmdzKTtcbiAgICBpZiAodGhpcy5pc0VuYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgJiYgIXRoaXMuaXNFbmFibGVkKCkpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlUGx1Z2luKCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuZW5hYmxlZCAmJiB0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5lbmFibGVkICYmIHRoaXMuaXNFbmFibGVkKCkgJiYgcmVsZXZhbnRUb1NldHRpbmdzKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUGx1Z2luKG5ld1NldHRpbmdzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luIHRvIHVzZSB0aGUgbGF0ZXN0IG9wdGlvbnMgeW91IGhhdmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge31cblxuICAvKipcbiAgICogRGVzdHJveSBwbHVnaW4uXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHZhciBfdGhpcyRldmVudE1hbmFnZXIyO1xuICAgIChfdGhpcyRldmVudE1hbmFnZXIyID0gdGhpcy5ldmVudE1hbmFnZXIpID09PSBudWxsIHx8IF90aGlzJGV2ZW50TWFuYWdlcjIgPT09IHZvaWQgMCB8fCBfdGhpcyRldmVudE1hbmFnZXIyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmNsZWFySG9va3MoKTtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLCAodmFsdWUsIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAocHJvcGVydHkgIT09ICdob3QnKSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHldID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBkZWxldGUgdGhpcy50O1xuICAgIGRlbGV0ZSB0aGlzLmhvdDtcbiAgfVxufVxuZXhwb3J0cy5CYXNlUGx1Z2luID0gQmFzZVBsdWdpbjtcbmZ1bmN0aW9uIF9pc1JlbGV2YW50VG9TZXR0aW5ncyhzZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHNldHRpbmdLZXlzID0gdGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7XG5cbiAgLy8gSWYgU0VUVElOR19LRVlTIGlzIGRlY2xhcmVkIGFzIGB0cnVlYCAtPiB1cGRhdGUgdGhlIHBsdWdpbiByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5ncyBkZWNsYXJlZCBpblxuICAvLyBgdXBkYXRlU2V0dGluZ3NgLlxuICAvLyBJZiBTRVRUSU5HX0tFWVMgaXMgZGVjbGFyZWQgYXMgYGZhbHNlYCAtPiBET04nVCB1cGRhdGUgdGhlIHBsdWdpbiByZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5ncyBkZWNsYXJlZCBpblxuICAvLyBgdXBkYXRlU2V0dGluZ3NgLlxuICBpZiAodHlwZW9mIHNldHRpbmdLZXlzID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gc2V0dGluZ0tleXM7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzZXR0aW5nc1tzZXR0aW5nS2V5c1tpXV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL2Jhc2VcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfYmFzZS5QTFVHSU5fS0VZO1xuZXhwb3J0cy5CYXNlUGx1Z2luID0gX2Jhc2UuQmFzZVBsdWdpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfbG9vc2VCaW5kc01hcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWFwcy9sb29zZUJpbmRzTWFwXCIpKTtcbnZhciBfc3RyaWN0QmluZHNNYXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21hcHMvc3RyaWN0QmluZHNNYXBcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdiaW5kUm93c1dpdGhIZWFkZXJzJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMjEwO1xuY29uc3QgREVGQVVMVF9CSU5EID0gJ2xvb3NlJztcbmNvbnN0IGJpbmRUeXBlVG9NYXBTdHJhdGVneSA9IG5ldyBNYXAoW1snbG9vc2UnLCBfbG9vc2VCaW5kc01hcC5kZWZhdWx0XSwgWydzdHJpY3QnLCBfc3RyaWN0QmluZHNNYXAuZGVmYXVsdF1dKTtcblxuLyoqXG4gKiBAcGx1Z2luIEJpbmRSb3dzV2l0aEhlYWRlcnNcbiAqIEBjbGFzcyBCaW5kUm93c1dpdGhIZWFkZXJzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQbHVnaW4gYWxsb3dzIGJpbmRpbmcgdGhlIHRhYmxlIHJvd3Mgd2l0aCB0aGVpciBoZWFkZXJzLlxuICpcbiAqIElmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCwgdGhlIHRhYmxlIHJvdyBoZWFkZXJzIHdpbGwgXCJzdGlja1wiIHRvIHRoZSByb3dzLCB3aGVuIHRoZXkgYXJlIGhpZGRlbi9tb3ZlZC4gQmFzaWNhbGx5LCBpZlxuICogYXQgdGhlIGluaXRpYWxpemF0aW9uIHJvdyAwIGhhcyBhIGhlYWRlciB0aXRsZWQgXCJBXCIsIGl0IHdpbGwgaGF2ZSBpdCBubyBtYXR0ZXIgd2hhdCB5b3UgZG8gd2l0aCB0aGUgdGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUnKTtcbiAqIGNvbnN0IGhvdCA9IG5ldyBIYW5kc29udGFibGUoY29udGFpbmVyLCB7XG4gKiAgIGRhdGE6IGdldERhdGEoKSxcbiAqICAgLy8gZW5hYmxlIHBsdWdpblxuICogICBiaW5kUm93c1dpdGhIZWFkZXJzOiB0cnVlXG4gKiB9KTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBkYXRhPXtnZXREYXRhKCl9XG4gKiAgIC8vIGVuYWJsZSBwbHVnaW5cbiAqICAgYmluZFJvd3NXaXRoSGVhZGVycz17dHJ1ZX1cbiAqIC8+XG4gKiBgYGBcbiAqIDo6OlxuICovXG52YXIgX0JpbmRSb3dzV2l0aEhlYWRlcnNfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIEJpbmRSb3dzV2l0aEhlYWRlcnMgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBPbiBtb2RpZnkgcm93IGhlYWRlciBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9CaW5kUm93c1dpdGhIZWFkZXJzX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gaW5kZXhlcyBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bGx8SW5kZXhNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVySW5kZXhlc1wiLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIEJpbmRSb3dzV2l0aEhlYWRlcnMjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBiaW5kVHlwZSA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgaWYgKHR5cGVvZiBiaW5kVHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGJpbmRUeXBlID0gREVGQVVMVF9CSU5EO1xuICAgIH1cbiAgICBjb25zdCBNYXBTdHJhdGVneSA9IGJpbmRUeXBlVG9NYXBTdHJhdGVneS5nZXQoYmluZFR5cGUpO1xuICAgIHRoaXMuaGVhZGVySW5kZXhlcyA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCdiaW5kUm93c1dpdGhIZWFkZXJzJywgbmV3IE1hcFN0cmF0ZWd5KCkpO1xuICAgIHRoaXMuYWRkSG9vaygnbW9kaWZ5Um93SGVhZGVyJywgcm93ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9CaW5kUm93c1dpdGhIZWFkZXJzX2JyYW5kLCB0aGlzLCBfb25Nb2RpZnlSb3dIZWFkZXIpLmNhbGwodGhpcywgcm93KSk7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgnYmluZFJvd3NXaXRoSGVhZGVycycpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkJpbmRSb3dzV2l0aEhlYWRlcnMgPSBCaW5kUm93c1dpdGhIZWFkZXJzO1xuZnVuY3Rpb24gX29uTW9kaWZ5Um93SGVhZGVyKHJvdykge1xuICByZXR1cm4gdGhpcy5oZWFkZXJJbmRleGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdykpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9iaW5kUm93c1dpdGhIZWFkZXJzID0gcmVxdWlyZShcIi4vYmluZFJvd3NXaXRoSGVhZGVyc1wiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9iaW5kUm93c1dpdGhIZWFkZXJzLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9iaW5kUm93c1dpdGhIZWFkZXJzLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuQmluZFJvd3NXaXRoSGVhZGVycyA9IF9iaW5kUm93c1dpdGhIZWFkZXJzLkJpbmRSb3dzV2l0aEhlYWRlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi8uLi90cmFuc2xhdGlvbnNcIik7XG5jb25zdCB7XG4gIGdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcyxcbiAgZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXNcbn0gPSAoMCwgX3RyYW5zbGF0aW9ucy5hbHRlclV0aWxzRmFjdG9yeSkoJ3BoeXNpY2FsbHlJbmRleGVkJyk7XG5cbi8qKlxuICogTWFwIGZyb20gcGh5c2ljYWwgaW5kZXggdG8gYW5vdGhlciBpbmRleC5cbiAqL1xuY2xhc3MgTG9vc2VCaW5kc01hcCBleHRlbmRzIF90cmFuc2xhdGlvbnMuSW5kZXhNYXAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihpbmRleCA9PiBpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHZhbHVlcyB0byBsaXN0IGFuZCByZW9yZ2FuaXplLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5zZXJ0aW9uSW5kZXggUG9zaXRpb24gaW5zaWRlIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnNlcnRlZEluZGV4ZXMgTGlzdCBvZiBpbnNlcnRlZCBpbmRleGVzLlxuICAgKi9cbiAgaW5zZXJ0KGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMpIHtcbiAgICBjb25zdCBsaXN0QWZ0ZXJVcGRhdGUgPSAoMCwgX3RyYW5zbGF0aW9ucy5nZXRJbmNyZWFzZWRJbmRleGVzKSh0aGlzLmluZGV4ZWRWYWx1ZXMsIGluc2VydGVkSW5kZXhlcyk7XG4gICAgdGhpcy5pbmRleGVkVmFsdWVzID0gZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zKGxpc3RBZnRlclVwZGF0ZSwgaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcywgdGhpcy5pbml0VmFsdWVPckZuKTtcbiAgICBzdXBlci5pbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBsaXN0IGFuZCByZW9yZ2FuaXplLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAgICovXG4gIHJlbW92ZShyZW1vdmVkSW5kZXhlcykge1xuICAgIGNvbnN0IGxpc3RBZnRlclVwZGF0ZSA9IGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKHRoaXMuaW5kZXhlZFZhbHVlcywgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHRoaXMuaW5kZXhlZFZhbHVlcyA9ICgwLCBfdHJhbnNsYXRpb25zLmdldERlY3JlYXNlZEluZGV4ZXMpKGxpc3RBZnRlclVwZGF0ZSwgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHN1cGVyLnJlbW92ZShyZW1vdmVkSW5kZXhlcyk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IExvb3NlQmluZHNNYXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi8uLi90cmFuc2xhdGlvbnNcIik7XG5jb25zdCB7XG4gIGdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcyxcbiAgZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXNcbn0gPSAoMCwgX3RyYW5zbGF0aW9ucy5hbHRlclV0aWxzRmFjdG9yeSkoJ3BoeXNpY2FsbHlJbmRleGVkJyk7XG5cbi8qKlxuICogTWFwIGZyb20gcGh5c2ljYWwgaW5kZXggdG8gYW5vdGhlciBpbmRleC5cbiAqL1xuY2xhc3MgU3RyaWN0QmluZHNNYXAgZXh0ZW5kcyBfdHJhbnNsYXRpb25zLkluZGV4TWFwIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoaW5kZXggPT4gaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB2YWx1ZXMgdG8gbGlzdCBhbmQgcmVvcmdhbml6ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluc2VydGlvbkluZGV4IFBvc2l0aW9uIGluc2lkZSB0aGUgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheX0gaW5zZXJ0ZWRJbmRleGVzIExpc3Qgb2YgaW5zZXJ0ZWQgaW5kZXhlcy5cbiAgICovXG4gIGluc2VydChpbnNlcnRpb25JbmRleCwgaW5zZXJ0ZWRJbmRleGVzKSB7XG4gICAgdGhpcy5pbmRleGVkVmFsdWVzID0gZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zKHRoaXMuaW5kZXhlZFZhbHVlcywgaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcywgKF8sIG9yZGluYWxOdW1iZXIpID0+IHRoaXMuZ2V0TmV4dFZhbHVlKG9yZGluYWxOdW1iZXIpKTtcbiAgICBzdXBlci5pbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBsaXN0IGFuZCByZW9yZ2FuaXplLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAgICovXG4gIHJlbW92ZShyZW1vdmVkSW5kZXhlcykge1xuICAgIHRoaXMuaW5kZXhlZFZhbHVlcyA9IGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKHRoaXMuaW5kZXhlZFZhbHVlcywgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHN1cGVyLnJlbW92ZShyZW1vdmVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5leHQgdmFsdWVzLCB3aGljaCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGFjdHVhbCBtYXhpbXVtIHZhbHVlIGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gb3JkaW5hbE51bWJlciBQb3NpdGlvbiBpbiB0aGUgbGlzdC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE5leHRWYWx1ZShvcmRpbmFsTnVtYmVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMuZ2V0VmFsdWVzKCkpICsgMSArIG9yZGluYWxOdW1iZXI7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFN0cmljdEJpbmRzTWFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi9iYXNlXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2NvbnNvbGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9jb25zb2xlXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9zaG9ydGN1dENvbnRleHRzID0gcmVxdWlyZShcIi4uLy4uL3Nob3J0Y3V0Q29udGV4dHNcIik7XG52YXIgX2ExMXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hMTF5XCIpO1xuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2NvbGxhcHNpYmxlQ29sdW1ucyc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDI5MDtcbmNvbnN0IFNFVFRJTkdfS0VZUyA9IFsnbmVzdGVkSGVhZGVycyddO1xuY29uc3QgQ09MTEFQU0lCTEVfRUxFTUVOVF9DTEFTUyA9ICdjb2xsYXBzaWJsZUluZGljYXRvcic7XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSBQTFVHSU5fS0VZO1xuY29uc3QgYWN0aW9uRGljdGlvbmFyeSA9IG5ldyBNYXAoW1snY29sbGFwc2UnLCB7XG4gIGhpZGVDb2x1bW46IHRydWUsXG4gIGJlZm9yZUhvb2s6ICdiZWZvcmVDb2x1bW5Db2xsYXBzZScsXG4gIGFmdGVySG9vazogJ2FmdGVyQ29sdW1uQ29sbGFwc2UnXG59XSwgWydleHBhbmQnLCB7XG4gIGhpZGVDb2x1bW46IGZhbHNlLFxuICBiZWZvcmVIb29rOiAnYmVmb3JlQ29sdW1uRXhwYW5kJyxcbiAgYWZ0ZXJIb29rOiAnYWZ0ZXJDb2x1bW5FeHBhbmQnXG59XV0pO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQHBsdWdpbiBDb2xsYXBzaWJsZUNvbHVtbnNcbiAqIEBjbGFzcyBDb2xsYXBzaWJsZUNvbHVtbnNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBfQ29sbGFwc2libGVDb2x1bW5zXyBwbHVnaW4gYWxsb3dzIGNvbGxhcHNpbmcgb2YgY29sdW1ucywgY292ZXJlZCBieSBhIGhlYWRlciB3aXRoIHRoZSBgY29sc3BhbmAgcHJvcGVydHkgZGVmaW5lZC5cbiAqXG4gKiBDbGlja2luZyB0aGUgXCJjb2xsYXBzZS9leHBhbmRcIiBidXR0b24gY29sbGFwc2VzIChvciBleHBhbmRzKSBhbGwgXCJjaGlsZFwiIGhlYWRlcnMgZXhjZXB0IHRoZSBmaXJzdCBvbmUuXG4gKlxuICogU2V0dGluZyB0aGUge0BsaW5rIE9wdGlvbnMjY29sbGFwc2libGVjb2x1bW5zfSBwcm9wZXJ0eSB0byBgdHJ1ZWAgd2lsbCBkaXNwbGF5IGEgXCJjb2xsYXBzZS9leHBhbmRcIiBidXR0b24gaW4gZXZlcnkgaGVhZGVyXG4gKiB3aXRoIGEgZGVmaW5lZCBgY29sc3BhbmAgcHJvcGVydHkuXG4gKlxuICogVG8gbGltaXQgdGhpcyBmdW5jdGlvbmFsaXR5IHRvIGEgc21hbGxlciBncm91cCBvZiBoZWFkZXJzLCBkZWZpbmUgdGhlIGBjb2xsYXBzaWJsZUNvbHVtbnNgIHByb3BlcnR5IGFzIGFuIGFycmF5XG4gKiBvZiBvYmplY3RzLCBhcyBpbiB0aGUgZXhhbXBsZSBiZWxvdy5cbiAqXG4gKiBAZXhhbXBsZVxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZScpO1xuICogY29uc3QgaG90ID0gbmV3IEhhbmRzb250YWJsZShjb250YWluZXIsIHtcbiAqICAgZGF0YTogZ2VuZXJhdGVEYXRhT2JqKCksXG4gKiAgIGNvbEhlYWRlcnM6IHRydWUsXG4gKiAgIHJvd0hlYWRlcnM6IHRydWUsXG4gKiAgIG5lc3RlZEhlYWRlcnM6IHRydWUsXG4gKiAgIC8vIGVuYWJsZSBwbHVnaW5cbiAqICAgY29sbGFwc2libGVDb2x1bW5zOiB0cnVlLFxuICogfSk7XG4gKlxuICogLy8gb3JcbiAqIGNvbnN0IGhvdCA9IG5ldyBIYW5kc29udGFibGUoY29udGFpbmVyLCB7XG4gKiAgIGRhdGE6IGdlbmVyYXRlRGF0YU9iaigpLFxuICogICBjb2xIZWFkZXJzOiB0cnVlLFxuICogICByb3dIZWFkZXJzOiB0cnVlLFxuICogICBuZXN0ZWRIZWFkZXJzOiB0cnVlLFxuICogICAvLyBlbmFibGUgYW5kIGNvbmZpZ3VyZSB3aGljaCBjb2x1bW5zIGNhbiBiZSBjb2xsYXBzZWRcbiAqICAgY29sbGFwc2libGVDb2x1bW5zOiBbXG4gKiAgICAge3JvdzogLTQsIGNvbDogMSwgY29sbGFwc2libGU6IHRydWV9LFxuICogICAgIHtyb3c6IC0zLCBjb2w6IDUsIGNvbGxhcHNpYmxlOiB0cnVlfVxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgZGF0YT17Z2VuZXJhdGVEYXRhT2JqKCl9XG4gKiAgIGNvbEhlYWRlcnM9e3RydWV9XG4gKiAgIHJvd0hlYWRlcnM9e3RydWV9XG4gKiAgIG5lc3RlZEhlYWRlcnM9e3RydWV9XG4gKiAgIC8vIGVuYWJsZSBwbHVnaW5cbiAqICAgY29sbGFwc2libGVDb2x1bW5zPXt0cnVlfVxuICogLz5cbiAqXG4gKiAvLyBvclxuICogPEhvdFRhYmxlXG4gKiAgIGRhdGE9e2dlbmVyYXRlRGF0YU9iaigpfVxuICogICBjb2xIZWFkZXJzPXt0cnVlfVxuICogICByb3dIZWFkZXJzPXt0cnVlfVxuICogICBuZXN0ZWRIZWFkZXJzPXt0cnVlfVxuICogICAvLyBlbmFibGUgYW5kIGNvbmZpZ3VyZSB3aGljaCBjb2x1bW5zIGNhbiBiZSBjb2xsYXBzZWRcbiAqICAgY29sbGFwc2libGVDb2x1bW5zPXtbXG4gKiAgICAge3JvdzogLTQsIGNvbDogMSwgY29sbGFwc2libGU6IHRydWV9LFxuICogICAgIHtyb3c6IC0zLCBjb2w6IDUsIGNvbGxhcHNpYmxlOiB0cnVlfVxuICogICBdfVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbnZhciBfY29sbGFwc2VkQ29sdW1uc01hcCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9Db2xsYXBzaWJsZUNvbHVtbnNfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIENvbGxhcHNpYmxlQ29sdW1ucyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGluZGljYXRvciB0byB0aGUgaGVhZGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gQ29sdW1uIGluZGV4LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFRIIFRIIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIFRoZSBpbmRleCBvZiBoZWFkZXIgbGV2ZWwgY291bnRpbmcgZnJvbSB0aGUgdG9wIChwb3NpdGl2ZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgY291bnRpbmcgZnJvbSAwIHRvIE4pLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQ29sbGFwc2libGVDb2x1bW5zX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgcmVmZXJlbmNlIHRvIHRoZSBOZXN0ZWRIZWFkZXJzIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge05lc3RlZEhlYWRlcnN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibmVzdGVkSGVhZGVyc1BsdWdpblwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBUaGUgTmVzdGVkSGVhZGVycyBwbHVnaW4gU3RhdGVNYW5hZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7U3RhdGVNYW5hZ2VyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhlYWRlclN0YXRlTWFuYWdlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBNYXAgb2YgY29sbGFwc2VkIGNvbHVtbnMgYnkgdGhlIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hpZGluZ01hcHxudWxsfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb2xsYXBzZWRDb2x1bW5zTWFwLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCkge1xuICAgIHJldHVybiBbJ3BsdWdpbjpOZXN0ZWRIZWFkZXJzJ107XG4gIH1cbiAgc3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKSB7XG4gICAgcmV0dXJuIFtQTFVHSU5fS0VZLCAuLi5TRVRUSU5HX0tFWVNdO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgQ29sbGFwc2libGVDb2x1bW5zI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIG5lc3RlZEhlYWRlcnNcbiAgICB9ID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBpZiAoIW5lc3RlZEhlYWRlcnMpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKSgnWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuJyk7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29sbGFwc2VkQ29sdW1uc01hcCwgdGhpcywgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsICdoaWRpbmcnKSk7XG4gICAgdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luID0gdGhpcy5ob3QuZ2V0UGx1Z2luKCduZXN0ZWRIZWFkZXJzJyk7XG4gICAgdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIgPSB0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0U3RhdGVNYW5hZ2VyKCk7XG4gICAgdGhpcy5hZGRIb29rKCdpbml0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbGxhcHNpYmxlQ29sdW1uc19icmFuZCwgdGhpcywgX29uSW5pdCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckxvYWREYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbGxhcHNpYmxlQ29sdW1uc19icmFuZCwgX3RoaXMsIF9vbkFmdGVyTG9hZERhdGEpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJHZXRDb2xIZWFkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Db2xsYXBzaWJsZUNvbHVtbnNfYnJhbmQsIF90aGlzLCBfb25BZnRlckdldENvbEhlYWRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVPbkNlbGxNb3VzZURvd24nLCAoZXZlbnQsIGNvb3JkcywgVEQpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db2xsYXBzaWJsZUNvbHVtbnNfYnJhbmQsIHRoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bikuY2FsbCh0aGlzLCBldmVudCwgY29vcmRzLCBURCkpO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgICAvLyBAVE9ETzogV29ya2Fyb3VuZCBmb3IgYnJva2VuIHBsdWdpbiBpbml0aWFsaXphdGlvbiBhYnN0cmFjdGlvbiAoIzY4MDYpLlxuICAgIHRoaXMudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogICAtIFtgY29sbGFwc2libGVDb2x1bW5zYF0oQC9hcGkvb3B0aW9ucy5tZCNjb2xsYXBzaWJsZWNvbHVtbnMpXG4gICAqICAgLSBbYG5lc3RlZEhlYWRlcnNgXShAL2FwaS9vcHRpb25zLm1kI25lc3RlZGhlYWRlcnMpXG4gICAqL1xuICB1cGRhdGVQbHVnaW4oKSB7XG4gICAgLy8gQFRPRE86IFdvcmthcm91bmQgZm9yIGJyb2tlbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24gYWJzdHJhY3Rpb24gKCM2ODA2KS5cbiAgICBpZiAoIXRoaXMuaG90LnZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb2xsYXBzaWJsZUNvbHVtbnNcbiAgICAgIH0gPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpO1xuICAgICAgaWYgKHR5cGVvZiBjb2xsYXBzaWJsZUNvbHVtbnMgPT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBBZGQgYGNvbGxhcHNpYmxlOiB0cnVlYCBhdHRyaWJ1dGUgdG8gYWxsIGhlYWRlcnMgd2l0aCBjb2xzcGFuIGhpZ2hlciB0aGFuIDEuXG4gICAgICAgIHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0YXRlKGhlYWRlclNldHRpbmdzID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29sbGFwc2libGU6IGhlYWRlclNldHRpbmdzLm9yaWdDb2xzcGFuID4gMVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbGxhcHNpYmxlQ29sdW1ucykpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xsYXBzaWJsZTogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgoY29sbGFwc2libGVDb2x1bW5zKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29sbGFwc2VkQ29sdW1uc01hcCwgdGhpcywgbnVsbCk7XG4gICAgdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luID0gbnVsbDtcbiAgICB0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICB0aGlzLmNsZWFyQnV0dG9ucygpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbGxhcHNpYmxlIGNvbHVtbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snRW50ZXInXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICB2YXIgX3RoaXMkaGVhZGVyU3RhdGVNYW5hO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcm93LFxuICAgICAgICAgIGNvbFxuICAgICAgICB9ID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb2xsYXBzaWJsZSxcbiAgICAgICAgICBpc0NvbGxhcHNlZCxcbiAgICAgICAgICBjb2x1bW5JbmRleFxuICAgICAgICB9ID0gKF90aGlzJGhlYWRlclN0YXRlTWFuYSA9IHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlRGF0YShyb3csIGNvbCkpICE9PSBudWxsICYmIF90aGlzJGhlYWRlclN0YXRlTWFuYSAhPT0gdm9pZCAwID8gX3RoaXMkaGVhZGVyU3RhdGVNYW5hIDoge307XG4gICAgICAgIGlmICghY29sbGFwc2libGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRTZWN0aW9uKHtcbiAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgIGNvbDogY29sdW1uSW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbGxhcHNlU2VjdGlvbih7XG4gICAgICAgICAgICByb3csXG4gICAgICAgICAgICBjb2w6IGNvbHVtbkluZGV4XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgRW50ZXIgYmVoYXZpb3IgKG1vdmUgdG8gdGhlIG5leHQgcm93IHdpdGhpbiBhIHNlbGVjdGlvbiByYW5nZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJ1bk9ubHlJZjogKCkgPT4ge1xuICAgICAgICB2YXIgX3RoaXMkaG90JGdldFNlbGVjdGVkLCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyO1xuICAgICAgICByZXR1cm4gKChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRTZWxlY3RlZC5pc1NpbmdsZSgpKSAmJiAoKF90aGlzJGhvdCRnZXRTZWxlY3RlZDIgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyLmhpZ2hsaWdodC5pc0hlYWRlcigpKTtcbiAgICAgIH0sXG4gICAgICBncm91cDogU0hPUlRDVVRTX0dST1VQLFxuICAgICAgcmVsYXRpdmVUb0dyb3VwOiBfc2hvcnRjdXRDb250ZXh0cy5FRElUT1JfRURJVF9HUk9VUCxcbiAgICAgIHBvc2l0aW9uOiAnYmVmb3JlJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgc2hvcnRjdXRzIHJlc3BvbnNpYmxlIGZvciB0b2dnbGluZyBjb2xsYXBzaWJsZSBjb2x1bW5zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5yZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTSE9SVENVVFNfR1JPVVApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgZXhwYW5kL2NvbGxhcHNlIGJ1dHRvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhckJ1dHRvbnMoKSB7XG4gICAgaWYgKCF0aGlzLmhvdC52aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlckxldmVscyA9IHRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKS5sZW5ndGg7XG4gICAgY29uc3QgbWFpbkhlYWRlcnMgPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFEO1xuICAgIGNvbnN0IHRvcEhlYWRlcnMgPSB0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDtcbiAgICBjb25zdCB0b3BMZWZ0Q29ybmVySGVhZGVycyA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ID8gdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCA6IG51bGw7XG4gICAgY29uc3QgcmVtb3ZlQnV0dG9uID0gZnVuY3Rpb24gKGJ1dHRvbikge1xuICAgICAgaWYgKGJ1dHRvbikge1xuICAgICAgICBidXR0b24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChidXR0b24pO1xuICAgICAgfVxuICAgIH07XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKSgwLCBoZWFkZXJMZXZlbHMgLSAxLCBpID0+IHtcbiAgICAgIGNvbnN0IG1hc3RlckxldmVsID0gbWFpbkhlYWRlcnMuY2hpbGROb2Rlc1tpXTtcbiAgICAgIGNvbnN0IHRvcExldmVsID0gdG9wSGVhZGVycy5jaGlsZE5vZGVzW2ldO1xuICAgICAgY29uc3QgdG9wTGVmdENvcm5lckxldmVsID0gdG9wTGVmdENvcm5lckhlYWRlcnMgPyB0b3BMZWZ0Q29ybmVySGVhZGVycy5jaGlsZE5vZGVzW2ldIDogbnVsbDtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgbWFzdGVyTGV2ZWwuY2hpbGROb2Rlcy5sZW5ndGggLSAxLCBqID0+IHtcbiAgICAgICAgbGV0IGJ1dHRvbiA9IG1hc3RlckxldmVsLmNoaWxkTm9kZXNbal0ucXVlcnlTZWxlY3RvcihgLiR7Q09MTEFQU0lCTEVfRUxFTUVOVF9DTEFTU31gKTtcbiAgICAgICAgcmVtb3ZlQnV0dG9uKGJ1dHRvbik7XG4gICAgICAgIGlmICh0b3BMZXZlbCAmJiB0b3BMZXZlbC5jaGlsZE5vZGVzW2pdKSB7XG4gICAgICAgICAgYnV0dG9uID0gdG9wTGV2ZWwuY2hpbGROb2Rlc1tqXS5xdWVyeVNlbGVjdG9yKGAuJHtDT0xMQVBTSUJMRV9FTEVNRU5UX0NMQVNTfWApO1xuICAgICAgICAgIHJlbW92ZUJ1dHRvbihidXR0b24pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BMZWZ0Q29ybmVySGVhZGVycyAmJiB0b3BMZWZ0Q29ybmVyTGV2ZWwgJiYgdG9wTGVmdENvcm5lckxldmVsLmNoaWxkTm9kZXNbal0pIHtcbiAgICAgICAgICBidXR0b24gPSB0b3BMZWZ0Q29ybmVyTGV2ZWwuY2hpbGROb2Rlc1tqXS5xdWVyeVNlbGVjdG9yKGAuJHtDT0xMQVBTSUJMRV9FTEVNRU5UX0NMQVNTfWApO1xuICAgICAgICAgIHJlbW92ZUJ1dHRvbihidXR0b24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIHNlY3Rpb24gYXQgdGhlIHByb3ZpZGVkIGNvb3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvb3JkcyBDb250YWlucyBjb29yZGluYXRlcyBpbmZvcm1hdGlvbi4gKGBjb29yZHMucm93YCwgYGNvb3Jkcy5jb2xgKS5cbiAgICovXG4gIGV4cGFuZFNlY3Rpb24oY29vcmRzKSB7XG4gICAgdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2Nvb3Jkc10sICdleHBhbmQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZXMgc2VjdGlvbiBhdCB0aGUgcHJvdmlkZWQgY29vcmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29vcmRzIENvbnRhaW5zIGNvb3JkaW5hdGVzIGluZm9ybWF0aW9uLiAoYGNvb3Jkcy5yb3dgLCBgY29vcmRzLmNvbGApLlxuICAgKi9cbiAgY29sbGFwc2VTZWN0aW9uKGNvb3Jkcykge1xuICAgIHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtjb29yZHNdLCAnY29sbGFwc2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZXMgb3IgZXhwYW5kIGFsbCBjb2xsYXBzaWJsZSBzZWN0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBhY3Rpb24gcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uICdjb2xsYXBzZScgb3IgJ2V4cGFuZCcuXG4gICAqL1xuICB0b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGFjdGlvbikge1xuICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcE5vZGVzKGhlYWRlclNldHRpbmdzID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sbGFwc2libGUsXG4gICAgICAgIG9yaWdDb2xzcGFuLFxuICAgICAgICBoZWFkZXJMZXZlbCxcbiAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgIGlzQ29sbGFwc2VkXG4gICAgICB9ID0gaGVhZGVyU2V0dGluZ3M7XG4gICAgICBpZiAoY29sbGFwc2libGUgPT09IHRydWUgJiYgb3JpZ0NvbHNwYW4gPiAxICYmIChpc0NvbGxhcHNlZCAmJiBhY3Rpb24gPT09ICdleHBhbmQnIHx8ICFpc0NvbGxhcHNlZCAmJiBhY3Rpb24gPT09ICdjb2xsYXBzZScpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiB0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5sZXZlbFRvUm93Q29vcmRzKGhlYWRlckxldmVsKSxcbiAgICAgICAgICBjb2w6IGNvbHVtbkluZGV4XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oY29vcmRzLCBhY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlcyBhbGwgY29sbGFwc2libGUgc2VjdGlvbnMuXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpIHtcbiAgICB0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoJ2NvbGxhcHNlJyk7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyBhbGwgY29sbGFwc2libGUgc2VjdGlvbnMuXG4gICAqL1xuICBleHBhbmRBbGwoKSB7XG4gICAgdGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCdleHBhbmQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZXMvRXhwYW5kcyBhIHNlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvb3JkcyBBcnJheSBvZiBjb29yZHMgLSBzZWN0aW9uIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FjdGlvbl0gQWN0aW9uIGRlZmluaXRpb24gKCdjb2xsYXBzZScgb3IgJ2V4cGFuZCcpLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29sdW1uQ29sbGFwc2VcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZUNvbHVtbkV4cGFuZFxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJDb2x1bW5Db2xsYXBzZVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJDb2x1bW5FeHBhbmRcbiAgICovXG4gIHRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihjb29yZHMsIGFjdGlvbikge1xuICAgIGlmICghYWN0aW9uRGljdGlvbmFyeS5oYXMoYWN0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2FjdGlvbn0pLmApO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElnbm9yZSBjb29yZGluYXRlcyB3aGljaCBwb2ludHMgdG8gdGhlIGNlbGxzIHJhbmdlLlxuICAgIGNvbnN0IGZpbHRlcmVkQ29vcmRzID0gKDAsIF9hcnJheS5hcnJheUZpbHRlcikoY29vcmRzLCBfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIHJvd1xuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gcm93IDwgMDtcbiAgICB9KTtcbiAgICBsZXQgaXNBY3Rpb25Qb3NzaWJsZSA9IGZpbHRlcmVkQ29vcmRzLmxlbmd0aCA+IDA7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGZpbHRlcmVkQ29vcmRzLCBfcmVmMiA9PiB7XG4gICAgICB2YXIgX3RoaXMkaGVhZGVyU3RhdGVNYW5hMjtcbiAgICAgIGxldCB7XG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sOiBjb2x1bW5cbiAgICAgIH0gPSBfcmVmMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sbGFwc2libGUsXG4gICAgICAgIGlzQ29sbGFwc2VkXG4gICAgICB9ID0gKF90aGlzJGhlYWRlclN0YXRlTWFuYTIgPSB0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhyb3csIGNvbHVtbikpICE9PSBudWxsICYmIF90aGlzJGhlYWRlclN0YXRlTWFuYTIgIT09IHZvaWQgMCA/IF90aGlzJGhlYWRlclN0YXRlTWFuYTIgOiB7fTtcbiAgICAgIGlmICghY29sbGFwc2libGUgfHwgaXNDb2xsYXBzZWQgJiYgYWN0aW9uID09PSAnY29sbGFwc2UnIHx8ICFpc0NvbGxhcHNlZCAmJiBhY3Rpb24gPT09ICdleHBhbmQnKSB7XG4gICAgICAgIGlzQWN0aW9uUG9zc2libGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG5vZGVNb2RSb2xsYmFja3MgPSBbXTtcbiAgICBjb25zdCBhZmZlY3RlZENvbHVtbnNJbmRleGVzID0gW107XG4gICAgaWYgKGlzQWN0aW9uUG9zc2libGUpIHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShmaWx0ZXJlZENvb3JkcywgX3JlZjMgPT4ge1xuICAgICAgICBsZXQge1xuICAgICAgICAgIHJvdyxcbiAgICAgICAgICBjb2w6IGNvbHVtblxuICAgICAgICB9ID0gX3JlZjM7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb2xzcGFuQ29tcGVuc2F0aW9uLFxuICAgICAgICAgIGFmZmVjdGVkQ29sdW1ucyxcbiAgICAgICAgICByb2xsYmFja01vZGlmaWNhdGlvblxuICAgICAgICB9ID0gdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYWN0aW9uLCByb3csIGNvbHVtbik7XG4gICAgICAgIGlmIChjb2xzcGFuQ29tcGVuc2F0aW9uID4gMCkge1xuICAgICAgICAgIGFmZmVjdGVkQ29sdW1uc0luZGV4ZXMucHVzaCguLi5hZmZlY3RlZENvbHVtbnMpO1xuICAgICAgICAgIG5vZGVNb2RSb2xsYmFja3MucHVzaChyb2xsYmFja01vZGlmaWNhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50Q29sbGFwc2VkQ29sdW1ucyA9IHRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO1xuICAgIGxldCBkZXN0aW5hdGlvbkNvbGxhcHNlZENvbHVtbnMgPSBbXTtcbiAgICBpZiAoYWN0aW9uID09PSAnY29sbGFwc2UnKSB7XG4gICAgICBkZXN0aW5hdGlvbkNvbGxhcHNlZENvbHVtbnMgPSAoMCwgX2FycmF5LmFycmF5VW5pcXVlKShbLi4uY3VycmVudENvbGxhcHNlZENvbHVtbnMsIC4uLmFmZmVjdGVkQ29sdW1uc0luZGV4ZXNdKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgIGRlc3RpbmF0aW9uQ29sbGFwc2VkQ29sdW1ucyA9ICgwLCBfYXJyYXkuYXJyYXlGaWx0ZXIpKGN1cnJlbnRDb2xsYXBzZWRDb2x1bW5zLCBpbmRleCA9PiAhYWZmZWN0ZWRDb2x1bW5zSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgIH1cbiAgICBjb25zdCBhY3Rpb25UcmFuc2xhdG9yID0gYWN0aW9uRGljdGlvbmFyeS5nZXQoYWN0aW9uKTtcbiAgICBjb25zdCBpc0FjdGlvbkFsbG93ZWQgPSB0aGlzLmhvdC5ydW5Ib29rcyhhY3Rpb25UcmFuc2xhdG9yLmJlZm9yZUhvb2ssIGN1cnJlbnRDb2xsYXBzZWRDb2x1bW5zLCBkZXN0aW5hdGlvbkNvbGxhcHNlZENvbHVtbnMsIGlzQWN0aW9uUG9zc2libGUpO1xuICAgIGlmIChpc0FjdGlvbkFsbG93ZWQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBSb2xsYmFjayBhbGwgaGVhZGVyIG5vZGVzIG1vZGlmaWNhdGlvbiAoY29sbGFwc2Ugb3IgZXhwYW5kKS5cbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShub2RlTW9kUm9sbGJhY2tzLCBub2RlTW9kUm9sbGJhY2sgPT4ge1xuICAgICAgICBub2RlTW9kUm9sbGJhY2soKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoYWZmZWN0ZWRDb2x1bW5zSW5kZXhlcywgdmlzdWFsQ29sdW1uID0+IHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2xsYXBzZWRDb2x1bW5zTWFwLCB0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2aXN1YWxDb2x1bW4pLCBhY3Rpb25UcmFuc2xhdG9yLmhpZGVDb2x1bW4pO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gICAgY29uc3QgaXNBY3Rpb25QZXJmb3JtZWQgPSB0aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGggIT09IGN1cnJlbnRDb2xsYXBzZWRDb2x1bW5zLmxlbmd0aDtcbiAgICBjb25zdCBzZWxlY3Rpb25SYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKGFjdGlvbiA9PT0gJ2NvbGxhcHNlJyAmJiBpc0FjdGlvblBlcmZvcm1lZCAmJiBzZWxlY3Rpb25SYW5nZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3csXG4gICAgICAgIGNvbFxuICAgICAgfSA9IHNlbGVjdGlvblJhbmdlLmhpZ2hsaWdodDtcbiAgICAgIGNvbnN0IGlzSGlkZGVuID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4ocm93KSB8fCB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihjb2wpO1xuICAgICAgaWYgKGlzSGlkZGVuICYmIGFmZmVjdGVkQ29sdW1uc0luZGV4ZXMuaW5jbHVkZXMoY29sKSkge1xuICAgICAgICBjb25zdCBuZXh0Um93ID0gcm93ID49IDAgPyB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocm93LCAxLCB0cnVlKSA6IHJvdztcbiAgICAgICAgY29uc3QgbmV4dENvbHVtbiA9IGNvbCA+PSAwID8gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNvbCwgMSwgdHJ1ZSkgOiBjb2w7XG4gICAgICAgIGlmIChuZXh0Um93ICE9PSBudWxsICYmIG5leHRDb2x1bW4gIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmhvdC5zZWxlY3RDZWxsKG5leHRSb3csIG5leHRDb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKGFjdGlvblRyYW5zbGF0b3IuYWZ0ZXJIb29rLCBjdXJyZW50Q29sbGFwc2VkQ29sdW1ucywgZGVzdGluYXRpb25Db2xsYXBzZWRDb2x1bW5zLCBpc0FjdGlvblBvc3NpYmxlLCBpc0FjdGlvblBlcmZvcm1lZCk7XG4gICAgdGhpcy5ob3QucmVuZGVyKCk7XG4gICAgdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIGFycmF5IG9mIHBoeXNpY2FsIGluZGV4ZXMgb2YgY29sbGFwc2VkIGNvbHVtbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICovXG4gIGdldENvbGxhcHNlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sbGFwc2VkQ29sdW1uc01hcCwgdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvbGxhcHNlZENvbHVtbnNNYXAsIHRoaXMsIG51bGwpO1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5Db2xsYXBzaWJsZUNvbHVtbnMgPSBDb2xsYXBzaWJsZUNvbHVtbnM7XG5mdW5jdGlvbiBfb25BZnRlckdldENvbEhlYWRlcihjb2x1bW4sIFRILCBoZWFkZXJMZXZlbCkge1xuICB2YXIgX3RoaXMkaGVhZGVyU3RhdGVNYW5hMztcbiAgY29uc3Qge1xuICAgIGNvbGxhcHNpYmxlLFxuICAgIG9yaWdDb2xzcGFuLFxuICAgIGlzQ29sbGFwc2VkXG4gIH0gPSAoX3RoaXMkaGVhZGVyU3RhdGVNYW5hMyA9IHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKGhlYWRlckxldmVsLCBjb2x1bW4pKSAhPT0gbnVsbCAmJiBfdGhpcyRoZWFkZXJTdGF0ZU1hbmEzICE9PSB2b2lkIDAgPyBfdGhpcyRoZWFkZXJTdGF0ZU1hbmEzIDoge307XG4gIGNvbnN0IGlzTm9kZUNvbGxhcHNpYmxlID0gY29sbGFwc2libGUgJiYgb3JpZ0NvbHNwYW4gPiAxICYmIGNvbHVtbiA+PSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O1xuICBjb25zdCBpc0FyaWFUYWdzRW5hYmxlZCA9IHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7XG4gIGxldCBjb2xsYXBzaWJsZUVsZW1lbnQgPSBUSC5xdWVyeVNlbGVjdG9yKGAuJHtDT0xMQVBTSUJMRV9FTEVNRU5UX0NMQVNTfWApO1xuICAoMCwgX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKShUSCwgWygwLCBfYTExeS5BMTFZX0VYUEFOREVEKSgnJylbMF1dKTtcbiAgaWYgKGlzTm9kZUNvbGxhcHNpYmxlKSB7XG4gICAgaWYgKCFjb2xsYXBzaWJsZUVsZW1lbnQpIHtcbiAgICAgIGNvbGxhcHNpYmxlRWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoY29sbGFwc2libGVFbGVtZW50LCBDT0xMQVBTSUJMRV9FTEVNRU5UX0NMQVNTKTtcbiAgICAgIFRILnF1ZXJ5U2VsZWN0b3IoJ2RpdjpmaXJzdC1jaGlsZCcpLmFwcGVuZENoaWxkKGNvbGxhcHNpYmxlRWxlbWVudCk7XG4gICAgfVxuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoY29sbGFwc2libGVFbGVtZW50LCBbJ2NvbGxhcHNlZCcsICdleHBhbmRlZCddKTtcbiAgICBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoY29sbGFwc2libGVFbGVtZW50LCAnY29sbGFwc2VkJyk7XG4gICAgICAoMCwgX2VsZW1lbnQuZmFzdElubmVyVGV4dCkoY29sbGFwc2libGVFbGVtZW50LCAnKycpO1xuXG4gICAgICAvLyBBZGQgQVJJQSB0YWdzXG4gICAgICBpZiAoaXNBcmlhVGFnc0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoVEgsIC4uLigwLCBfYTExeS5BMTFZX0VYUEFOREVEKShmYWxzZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKGNvbGxhcHNpYmxlRWxlbWVudCwgJ2V4cGFuZGVkJyk7XG4gICAgICAoMCwgX2VsZW1lbnQuZmFzdElubmVyVGV4dCkoY29sbGFwc2libGVFbGVtZW50LCAnLScpO1xuXG4gICAgICAvLyBBZGQgQVJJQSB0YWdzXG4gICAgICBpZiAoaXNBcmlhVGFnc0VuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoVEgsIC4uLigwLCBfYTExeS5BMTFZX0VYUEFOREVEKSh0cnVlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0FyaWFUYWdzRW5hYmxlZCkge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoY29sbGFwc2libGVFbGVtZW50LCAuLi4oMCwgX2ExMXkuQTExWV9ISURERU4pKCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX2NvbGxhcHNpYmxlRWxlbWVudDtcbiAgICAoX2NvbGxhcHNpYmxlRWxlbWVudCA9IGNvbGxhcHNpYmxlRWxlbWVudCkgPT09IG51bGwgfHwgX2NvbGxhcHNpYmxlRWxlbWVudCA9PT0gdm9pZCAwIHx8IF9jb2xsYXBzaWJsZUVsZW1lbnQucmVtb3ZlKCk7XG4gIH1cbn1cbi8qKlxuICogSW5kaWNhdG9yIG1vdXNlIGV2ZW50IGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBldmVudCBNb3VzZSBldmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb29yZHMgRXZlbnQgY29vcmRpbmF0ZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihldmVudCwgY29vcmRzKSB7XG4gIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGV2ZW50LnRhcmdldCwgQ09MTEFQU0lCTEVfRUxFTUVOVF9DTEFTUykpIHtcbiAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICdleHBhbmRlZCcpKSB7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnQudGFyZ2V0LCAnbW91c2V1cCcpO1xuICAgICAgdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2Nvb3Jkc10sICdjb2xsYXBzZScpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICdjb2xsYXBzZWQnKSkge1xuICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGV2ZW50LnRhcmdldCwgJ21vdXNldXAnKTtcbiAgICAgIHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtjb29yZHNdLCAnZXhwYW5kJyk7XG4gICAgfVxuICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gIH1cbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgcGx1Z2luIHN0YXRlIGFmdGVyIEhvVCBpbml0aWFsaXphdGlvbi5cbiAqL1xuZnVuY3Rpb24gX29uSW5pdCgpIHtcbiAgLy8gQFRPRE86IFdvcmthcm91bmQgZm9yIGJyb2tlbiBwbHVnaW4gaW5pdGlhbGl6YXRpb24gYWJzdHJhY3Rpb24gKCM2ODA2KS5cbiAgdGhpcy51cGRhdGVQbHVnaW4oKTtcbn1cbi8qKlxuICogVXBkYXRlcyB0aGUgcGx1Z2luIHN0YXRlIGFmdGVyIG5ldyBkYXRhc2V0IGxvYWQuXG4gKlxuICogQHBhcmFtIHtBcnJheVtdfSBzb3VyY2VEYXRhIEFycmF5IG9mIGFycmF5cyBvciBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZGF0YSBoYXMgYmVlbiBsb2FkZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJMb2FkRGF0YShzb3VyY2VEYXRhLCBpbml0aWFsTG9hZCkge1xuICBpZiAoIWluaXRpYWxMb2FkKSB7XG4gICAgdGhpcy51cGRhdGVQbHVnaW4oKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jb2xsYXBzaWJsZUNvbHVtbnMgPSByZXF1aXJlKFwiLi9jb2xsYXBzaWJsZUNvbHVtbnNcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfY29sbGFwc2libGVDb2x1bW5zLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9jb2xsYXBzaWJsZUNvbHVtbnMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5Db2xsYXBzaWJsZUNvbHVtbnMgPSBfY29sbGFwc2libGVDb2x1bW5zLkNvbGxhcHNpYmxlQ29sdW1uczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2xhdGlvbnNcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9jb2x1bW5TdGF0ZXNNYW5hZ2VyID0gcmVxdWlyZShcIi4vY29sdW1uU3RhdGVzTWFuYWdlclwiKTtcbnZhciBfc2hvcnRjdXRDb250ZXh0cyA9IHJlcXVpcmUoXCIuLi8uLi9zaG9ydGN1dENvbnRleHRzXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9kb21IZWxwZXJzID0gcmVxdWlyZShcIi4vZG9tSGVscGVyc1wiKTtcbnZhciBfcm9vdENvbXBhcmF0b3IgPSByZXF1aXJlKFwiLi9yb290Q29tcGFyYXRvclwiKTtcbnZhciBfc29ydFNlcnZpY2UgPSByZXF1aXJlKFwiLi9zb3J0U2VydmljZVwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2NvbHVtblNvcnRpbmcnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSA1MDtcbmNvbnN0IEFQUEVORF9DT0xVTU5fQ09ORklHX1NUUkFURUdZID0gZXhwb3J0cy5BUFBFTkRfQ09MVU1OX0NPTkZJR19TVFJBVEVHWSA9ICdhcHBlbmQnO1xuY29uc3QgUkVQTEFDRV9DT0xVTU5fQ09ORklHX1NUUkFURUdZID0gZXhwb3J0cy5SRVBMQUNFX0NPTFVNTl9DT05GSUdfU1RSQVRFR1kgPSAncmVwbGFjZSc7XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSBQTFVHSU5fS0VZO1xuKDAsIF9zb3J0U2VydmljZS5yZWdpc3RlclJvb3RDb21wYXJhdG9yKShQTFVHSU5fS0VZLCBfcm9vdENvbXBhcmF0b3Iucm9vdENvbXBhcmF0b3IpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2JlZm9yZUNvbHVtblNvcnQnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdhZnRlckNvbHVtblNvcnQnKTtcblxuLy8gRElGRiAtIE11bHRpQ29sdW1uU29ydGluZyAmIENvbHVtblNvcnRpbmc6IGNoYW5nZWQgY29uZmlndXJhdGlvbiBkb2N1bWVudGF0aW9uLlxuLyoqXG4gKiBAcGx1Z2luIENvbHVtblNvcnRpbmdcbiAqIEBjbGFzcyBDb2x1bW5Tb3J0aW5nXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBzb3J0cyB0aGUgdmlldyBieSBjb2x1bW5zIChidXQgZG9lcyBub3Qgc29ydCB0aGUgZGF0YSBzb3VyY2UhKS4gVG8gZW5hYmxlIHRoZSBwbHVnaW4sIHNldCB0aGVcbiAqIHtAbGluayBPcHRpb25zI2NvbHVtblNvcnRpbmd9IHByb3BlcnR5IHRvIHRoZSBjb3JyZWN0IHZhbHVlIChzZWUgdGhlIGV4YW1wbGVzIGJlbG93KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIC8vIGFzIGJvb2xlYW5cbiAqIGNvbHVtblNvcnRpbmc6IHRydWVcbiAqXG4gKiAvLyBhcyBhbiBvYmplY3Qgd2l0aCBpbml0aWFsIHNvcnQgY29uZmlnIChzb3J0IGFzY2VuZGluZyBmb3IgY29sdW1uIGF0IGluZGV4IDEpXG4gKiBjb2x1bW5Tb3J0aW5nOiB7XG4gKiAgIGluaXRpYWxDb25maWc6IHtcbiAqICAgICBjb2x1bW46IDEsXG4gKiAgICAgc29ydE9yZGVyOiAnYXNjJ1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gYXMgYW4gb2JqZWN0IHdoaWNoIGRlZmluZSBzcGVjaWZpYyBzb3J0aW5nIG9wdGlvbnMgZm9yIGFsbCBjb2x1bW5zXG4gKiBjb2x1bW5Tb3J0aW5nOiB7XG4gKiAgIHNvcnRFbXB0eUNlbGxzOiB0cnVlLCAvLyB0cnVlID0gdGhlIHRhYmxlIHNvcnRzIGVtcHR5IGNlbGxzLCBmYWxzZSA9IHRoZSB0YWJsZSBtb3ZlcyBhbGwgZW1wdHkgY2VsbHMgdG8gdGhlIGVuZCBvZiB0aGUgdGFibGUgKGJ5IGRlZmF1bHQpXG4gKiAgIGluZGljYXRvcjogdHJ1ZSwgLy8gdHJ1ZSA9IHNob3dzIGluZGljYXRvciBmb3IgYWxsIGNvbHVtbnMgKGJ5IGRlZmF1bHQpLCBmYWxzZSA9IGRvbid0IHNob3cgaW5kaWNhdG9yIGZvciBjb2x1bW5zXG4gKiAgIGhlYWRlckFjdGlvbjogdHJ1ZSwgLy8gdHJ1ZSA9IGFsbG93IHRvIGNsaWNrIG9uIHRoZSBoZWFkZXJzIHRvIHNvcnQgKGJ5IGRlZmF1bHQpLCBmYWxzZSA9IHR1cm4gb2ZmIHBvc3NpYmlsaXR5IHRvIGNsaWNrIG9uIHRoZSBoZWFkZXJzIHRvIHNvcnRcbiAqICAgY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTogZnVuY3Rpb24oc29ydE9yZGVyLCBjb2x1bW5NZXRhKSB7XG4gKiAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBuZXh0VmFsdWUpIHtcbiAqICAgICAgIC8vIFNvbWUgdmFsdWUgY29tcGFyaXNvbnMgd2hpY2ggd2lsbCByZXR1cm4gLTEsIDAgb3IgMS4uLlxuICogICAgIH1cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIGFzIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIGBjb2x1bW5gIHByb3BlcnR5LCBhbGxvd3Mgc3BlY2lmeWluZyBhIGN1c3RvbSBvcHRpb25zIGZvciB0aGUgZGVzaXJlZCBjb2x1bW4uXG4gKiAvLyBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgZG9jdW1lbnRhdGlvbiBvZiBgY29sdW1uYCBwcm9wZXJ0eTogaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvT3B0aW9ucy5odG1sI2NvbHVtbnNcbiAqIGNvbHVtbnM6IFt7XG4gKiAgIGNvbHVtblNvcnRpbmc6IHtcbiAqICAgICBpbmRpY2F0b3I6IGZhbHNlLCAvLyBkaXNhYmxlIGluZGljYXRvciBmb3IgdGhlIGZpcnN0IGNvbHVtbixcbiAqICAgICBzb3J0RW1wdHlDZWxsczogdHJ1ZSxcbiAqICAgICBoZWFkZXJBY3Rpb246IGZhbHNlLCAvLyBjbGlja3Mgb24gdGhlIGZpcnN0IGNvbHVtbiB3b24ndCBzb3J0XG4gKiAgICAgY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTogZnVuY3Rpb24oc29ydE9yZGVyLCBjb2x1bW5NZXRhKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG5leHRWYWx1ZSkge1xuICogICAgICAgICByZXR1cm4gMDsgLy8gQ3VzdG9tIGNvbXBhcmUgZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCBjb2x1bW4gKGRvbid0IHNvcnQpXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9XVxuICogYGBgXG4gKi9cbnZhciBfQ29sdW1uU29ydGluZ19icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgQ29sdW1uU29ydGluZyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIExvYWQgc2F2ZWQgc2V0dGluZ3Mgb3Igc29ydCBieSBwcmVkZWZpbmVkIHBsdWdpbiBjb25maWd1cmF0aW9uLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQ29sdW1uU29ydGluZ19icmFuZCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgY29sdW1uIHN0YXRlIG1hbmFnZXIuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtudWxsfENvbHVtblN0YXRlc01hbmFnZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uU3RhdGVzTWFuYWdlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgY29sdW1uIHByb3BlcnRpZXMgZnJvbSBwbHVnaW4gbGlrZSBpLmUuIGBpbmRpY2F0b3JgLCBgaGVhZGVyQWN0aW9uYC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bGx8UGh5c2ljYWxJbmRleFRvVmFsdWVNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uTWV0YUNhY2hlXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIE1haW4gc2V0dGluZ3Mga2V5IGRlc2lnbmVkIGZvciB0aGUgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBsdWdpbktleVwiLCBQTFVHSU5fS0VZKTtcbiAgICAvKipcbiAgICAgKiBQbHVnaW4gaW5kZXhlcyBjYWNoZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bGx8SW5kZXhlc1NlcXVlbmNlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImluZGV4ZXNTZXF1ZW5jZUNhY2hlXCIsIG51bGwpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBIYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgQ29sdW1uU29ydGluZyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyID0gbmV3IF9jb2x1bW5TdGF0ZXNNYW5hZ2VyLkNvbHVtblN0YXRlc01hbmFnZXIodGhpcy5ob3QsIGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCk7XG4gICAgdGhpcy5jb2x1bW5NZXRhQ2FjaGUgPSBuZXcgX3RyYW5zbGF0aW9ucy5QaHlzaWNhbEluZGV4VG9WYWx1ZU1hcChwaHlzaWNhbEluZGV4ID0+IHtcbiAgICAgIGxldCB2aXN1YWxJbmRleCA9IHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHBoeXNpY2FsSW5kZXgpO1xuICAgICAgaWYgKHZpc3VhbEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHZpc3VhbEluZGV4ID0gcGh5c2ljYWxJbmRleDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldE1lcmdlZFBsdWdpblNldHRpbmdzKHZpc3VhbEluZGV4KTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsIHRoaXMuY29sdW1uTWV0YUNhY2hlKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyR2V0Q29sSGVhZGVyJywgKGNvbHVtbiwgVEgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db2x1bW5Tb3J0aW5nX2JyYW5kLCB0aGlzLCBfb25BZnRlckdldENvbEhlYWRlcikuY2FsbCh0aGlzLCBjb2x1bW4sIFRIKSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVPbkNlbGxNb3VzZURvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29sdW1uU29ydGluZ19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck9uQ2VsbE1vdXNlRG93bicsIChldmVudCwgdGFyZ2V0KSA9PiB0aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oZXZlbnQsIHRhcmdldCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJJbml0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbHVtblNvcnRpbmdfYnJhbmQsIHRoaXMsIF9sb2FkT3JTb3J0QnlTZXR0aW5ncykuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckxvYWREYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29sdW1uU29ydGluZ19icmFuZCwgX3RoaXMsIF9vbkFmdGVyTG9hZERhdGEpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuXG4gICAgLy8gVE9ETzogV29ya2Fyb3VuZD8gSXQgc2hvdWxkIGJlIHJlZmFjdG9yZWQgLyBkZXNjcmliZWQuXG4gICAgaWYgKHRoaXMuaG90LnZpZXcpIHtcbiAgICAgIF9hc3NlcnRDbGFzc0JyYW5kKF9Db2x1bW5Tb3J0aW5nX2JyYW5kLCB0aGlzLCBfbG9hZE9yU29ydEJ5U2V0dGluZ3MpLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICBjb25zdCBjbGVhckNvbEhlYWRlciA9IChjb2x1bW4sIFRIKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJTcGFuRWxlbWVudCA9ICgwLCBfdXRpbHMuZ2V0SGVhZGVyU3BhbkVsZW1lbnQpKFRIKTtcbiAgICAgIGlmICgoMCwgX3V0aWxzLmlzRmlyc3RMZXZlbENvbHVtbkhlYWRlcikoY29sdW1uLCBUSCkgPT09IGZhbHNlIHx8IGhlYWRlclNwYW5FbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoZWFkZXJTcGFuRWxlbWVudCk7XG4gICAgfTtcblxuICAgIC8vIENoYW5naW5nIGhlYWRlciB3aWR0aCBhbmQgcmVtb3ZpbmcgaW5kaWNhdG9yLlxuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyR2V0Q29sSGVhZGVyJywgY2xlYXJDb2xIZWFkZXIpO1xuICAgIHRoaXMuaG90LmFkZEhvb2tPbmNlKCdhZnRlclZpZXdSZW5kZXInLCAoKSA9PiB7XG4gICAgICB0aGlzLmhvdC5yZW1vdmVIb29rKCdhZnRlckdldENvbEhlYWRlcicsIGNsZWFyQ29sSGVhZGVyKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5nZXRWYWx1ZXMoKSk7XG4gICAgICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpO1xuICAgICAgfVxuICAgIH0sIHRydWUpO1xuICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKTtcbiAgICB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpO1xuICAgIHRoaXMuY29sdW1uTWV0YUNhY2hlID0gbnVsbDtcbiAgICB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIgPSBudWxsO1xuICAgIHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbHVtbiBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snRW50ZXInXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGlnaGxpZ2h0XG4gICAgICAgIH0gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgICB0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGhpZ2hsaWdodC5jb2wpKTtcblxuICAgICAgICAvLyBwcmV2ZW50IGRlZmF1bHQgRW50ZXIgYmVoYXZpb3IgKG1vdmUgdG8gdGhlIG5leHQgcm93IHdpdGhpbiBhIHNlbGVjdGlvbiByYW5nZSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJ1bk9ubHlJZjogKCkgPT4ge1xuICAgICAgICB2YXIgX3RoaXMkaG90JGdldFNlbGVjdGVkLCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyO1xuICAgICAgICBjb25zdCBoaWdobGlnaHQgPSAoX3RoaXMkaG90JGdldFNlbGVjdGVkID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX3RoaXMkaG90JGdldFNlbGVjdGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQuaGlnaGxpZ2h0O1xuICAgICAgICByZXR1cm4gaGlnaGxpZ2h0ICYmICgoX3RoaXMkaG90JGdldFNlbGVjdGVkMiA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF90aGlzJGhvdCRnZXRTZWxlY3RlZDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRTZWxlY3RlZDIuaXNTaW5nbGUoKSkgJiYgdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaGlnaGxpZ2h0KSAmJiBoaWdobGlnaHQucm93ID09PSAtMSAmJiBoaWdobGlnaHQuY29sID49IDA7XG4gICAgICB9LFxuICAgICAgcmVsYXRpdmVUb0dyb3VwOiBfc2hvcnRjdXRDb250ZXh0cy5FRElUT1JfRURJVF9HUk9VUCxcbiAgICAgIHBvc2l0aW9uOiAnYmVmb3JlJyxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgY29sdW1uIHNvcnRpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgnZ3JpZCcpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU0hPUlRDVVRTX0dST1VQKTtcbiAgfVxuXG4gIC8vIERJRkYgLSBNdWx0aUNvbHVtblNvcnRpbmcgJiBDb2x1bW5Tb3J0aW5nOiBjaGFuZ2VkIGZ1bmN0aW9uIGRvY3VtZW50YXRpb24uXG4gIC8qKlxuICAgKiBTb3J0cyB0aGUgdGFibGUgYnkgY2hvc2VuIGNvbHVtbnMgYW5kIG9yZGVycy5cbiAgICpcbiAgICogQHBhcmFtIHt1bmRlZmluZWR8b2JqZWN0fSBzb3J0Q29uZmlnIFNpbmdsZSBjb2x1bW4gc29ydCBjb25maWd1cmF0aW9uLiBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgY29udGFpbnMgYGNvbHVtbmAgYW5kIGBzb3J0T3JkZXJgIHByb3BlcnRpZXMuXG4gICAqIEZpcnN0IG9mIHRoZW0gY29udGFpbnMgdmlzdWFsIGNvbHVtbiBpbmRleCwgdGhlIHNlY29uZCBvbmUgY29udGFpbnMgc29ydCBvcmRlciAoYGFzY2AgZm9yIGFzY2VuZGluZywgYGRlc2NgIGZvciBkZXNjZW5kaW5nKS5cbiAgICpcbiAgICogKipOb3RlKio6IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBldmVyeSBjYWxsIG9mIGBzb3J0YCBmdW5jdGlvbiBzZXQgYW4gZW50aXJlbHkgbmV3IHNvcnQgb3JkZXIuIFByZXZpb3VzIHNvcnQgY29uZmlncyBhcmVuJ3QgcHJlc2VydmVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiAvLyBzb3J0IGFzY2VuZGluZyBmaXJzdCB2aXN1YWwgY29sdW1uXG4gICAqIGhvdC5nZXRQbHVnaW4oJ2NvbHVtblNvcnRpbmcnKS5zb3J0KHsgY29sdW1uOiAwLCBzb3J0T3JkZXI6ICdhc2MnIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZUNvbHVtblNvcnRcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyQ29sdW1uU29ydFxuICAgKi9cbiAgc29ydChzb3J0Q29uZmlnKSB7XG4gICAgY29uc3QgY3VycmVudFNvcnRDb25maWcgPSB0aGlzLmdldFNvcnRDb25maWcoKTtcblxuICAgIC8vIFdlIGFsd2F5cyBwYXNzIGNvbmZpZ3MgZGVmaW5lZCBhcyBhbiBhcnJheSB0byBgYmVmb3JlQ29sdW1uU29ydGAgYW5kIGBhZnRlckNvbHVtblNvcnRgIGhvb2tzLlxuICAgIGNvbnN0IGRlc3RpbmF0aW9uU29ydENvbmZpZ3MgPSB0aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhzb3J0Q29uZmlnKTtcbiAgICBjb25zdCBzb3J0UG9zc2libGUgPSB0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoZGVzdGluYXRpb25Tb3J0Q29uZmlncyk7XG4gICAgY29uc3QgYWxsb3dTb3J0ID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUNvbHVtblNvcnQnLCBjdXJyZW50U29ydENvbmZpZywgZGVzdGluYXRpb25Tb3J0Q29uZmlncywgc29ydFBvc3NpYmxlKTtcbiAgICBpZiAoYWxsb3dTb3J0ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY3VycmVudFNvcnRDb25maWcubGVuZ3RoID09PSAwICYmIHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUgPSB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSwgbmV3IF90cmFuc2xhdGlvbnMuSW5kZXhlc1NlcXVlbmNlKCkpO1xuICAgICAgdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpO1xuICAgIH1cbiAgICBpZiAoc29ydFBvc3NpYmxlKSB7XG4gICAgICB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhkZXN0aW5hdGlvblNvcnRDb25maWdzKTtcbiAgICAgIHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkZXN0aW5hdGlvblNvcnRDb25maWdzKTtcbiAgICAgIHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkZXN0aW5hdGlvblNvcnRDb25maWdzKTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29sdW1uU29ydCcsIGN1cnJlbnRTb3J0Q29uZmlnLCBzb3J0UG9zc2libGUgPyBkZXN0aW5hdGlvblNvcnRDb25maWdzIDogY3VycmVudFNvcnRDb25maWcsIHNvcnRQb3NzaWJsZSk7XG4gICAgaWYgKHNvcnRQb3NzaWJsZSkge1xuICAgICAgdGhpcy5ob3QucmVuZGVyKCk7XG4gICAgICAvLyBUT0RPOiBXb3JrYXJvdW5kPyBUaGlzIHRyaWdnZXJzIGZhc3QgcmVkcmF3LiBPbmUgdGVzdCB3b24ndCBwYXNzIGFmdGVyIHJlbW92YWwuXG4gICAgICAvLyBJdCBzaG91bGQgYmUgcmVmYWN0b3JlZCAvIGRlc2NyaWJlZC5cbiAgICAgIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHNvcnQgcGVyZm9ybWVkIG9uIHRoZSB0YWJsZS5cbiAgICovXG4gIGNsZWFyU29ydCgpIHtcbiAgICB0aGlzLnNvcnQoW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdGFibGUgaXMgc29ydGVkIChhbnkgY29sdW1uIGhhdmUgdG8gYmUgc29ydGVkKS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVkICYmICF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc29ydCBjb25maWd1cmF0aW9uIGZvciBwYXJ0aWN1bGFyIGNvbHVtbiBvciBmb3IgYWxsIHNvcnRlZCBjb2x1bW5zLiBPYmplY3RzIGNvbnRhaW4gYGNvbHVtbmAgYW5kIGBzb3J0T3JkZXJgIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICoqTm90ZSoqOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBleHBvc2UgKip2aXN1YWwqKiBjb2x1bW4gaW5kZXggdW5kZXIgdGhlIGBjb2x1bW5gIGtleS4gVGhleSBhcmUgaGFuZGxlZCBieSB0aGUgYHNvcnRgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbl0gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge3VuZGVmaW5lZHxvYmplY3R8QXJyYXl9XG4gICAqL1xuICBnZXRTb3J0Q29uZmlnKGNvbHVtbikge1xuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkoY29sdW1uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRDb2x1bW5Tb3J0U3RhdGUoY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFdhcm46IFVzZWZ1bCBtYWlubHkgZm9yIHByb3ZpZGluZyBzZXJ2ZXIgc2lkZSBzb3J0IGltcGxlbWVudGF0aW9uIChzZWUgaW4gdGhlIGV4YW1wbGUgYmVsb3cpLiBJdCBkb2Vzbid0IHNvcnQgdGhlIGRhdGEgc2V0LiBJdCBqdXN0IHNldHMgc29ydCBjb25maWd1cmF0aW9uIGZvciBhbGwgc29ydGVkIGNvbHVtbnMuXG4gICAqIE5vdGU6IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIG1ldGhvZCBkb2Vzbid0IHJlLXJlbmRlciB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGJlZm9yZUNvbHVtblNvcnQ6IGZ1bmN0aW9uKGN1cnJlbnRTb3J0Q29uZmlnLCBkZXN0aW5hdGlvblNvcnRDb25maWdzKSB7XG4gICAqICAgY29uc3QgY29sdW1uU29ydFBsdWdpbiA9IHRoaXMuZ2V0UGx1Z2luKCdjb2x1bW5Tb3J0aW5nJyk7XG4gICAqXG4gICAqICAgY29sdW1uU29ydFBsdWdpbi5zZXRTb3J0Q29uZmlnKGRlc3RpbmF0aW9uU29ydENvbmZpZ3MpO1xuICAgKlxuICAgKiAgIC8vIGNvbnN0IG5ld0RhdGEgPSAuLi4gLy8gQ2FsY3VsYXRlZCBkYXRhIHNldCwgaWUuIGZyb20gYW4gQUpBWCBjYWxsLlxuICAgKlxuICAgKiAgIHRoaXMubG9hZERhdGEobmV3RGF0YSk7IC8vIExvYWQgbmV3IGRhdGEgc2V0IGFuZCByZS1yZW5kZXIgdGhlIHRhYmxlLlxuICAgKlxuICAgKiAgIHJldHVybiBmYWxzZTsgLy8gVGhlIGJsb2NrYWRlIGZvciB0aGUgZGVmYXVsdCBzb3J0IGFjdGlvbi5cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHt1bmRlZmluZWR8b2JqZWN0fEFycmF5fSBzb3J0Q29uZmlnIFNpbmdsZSBjb2x1bW4gc29ydCBjb25maWd1cmF0aW9uIG9yIGZ1bGwgc29ydCBjb25maWd1cmF0aW9uIChmb3IgYWxsIHNvcnRlZCBjb2x1bW5zKS5cbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGNvbnRhaW5zIGBjb2x1bW5gIGFuZCBgc29ydE9yZGVyYCBwcm9wZXJ0aWVzLiBGaXJzdCBvZiB0aGVtIGNvbnRhaW5zIHZpc3VhbCBjb2x1bW4gaW5kZXgsIHRoZSBzZWNvbmQgb25lIGNvbnRhaW5zXG4gICAqIHNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZykuXG4gICAqL1xuICBzZXRTb3J0Q29uZmlnKHNvcnRDb25maWcpIHtcbiAgICAvLyBXZSBhbHdheXMgc2V0IGNvbmZpZ3MgZGVmaW5lZCBhcyBhbiBhcnJheS5cbiAgICBjb25zdCBkZXN0aW5hdGlvblNvcnRDb25maWdzID0gdGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3Moc29ydENvbmZpZyk7XG4gICAgaWYgKHRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhkZXN0aW5hdGlvblNvcnRDb25maWdzKSkge1xuICAgICAgdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoZGVzdGluYXRpb25Tb3J0Q29uZmlncyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub3JtYWxpemVkIHNvcnQgY29uZmlncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IFtzb3J0Q29uZmlnPVtdXSBTaW5nbGUgY29sdW1uIHNvcnQgY29uZmlndXJhdGlvbiBvciBmdWxsIHNvcnQgY29uZmlndXJhdGlvbiAoZm9yIGFsbCBzb3J0ZWQgY29sdW1ucykuXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWlucyBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcy4gRmlyc3Qgb2YgdGhlbSBjb250YWlucyB2aXN1YWwgY29sdW1uIGluZGV4LCB0aGUgc2Vjb25kIG9uZSBjb250YWluc1xuICAgKiBzb3J0IG9yZGVyIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKSB7XG4gICAgbGV0IHNvcnRDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvcnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gc29ydENvbmZpZy5zbGljZSgwLCAxKTtcbiAgICB9XG4gICAgcmV0dXJuIFtzb3J0Q29uZmlnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaWYgc29ydCBjb25maWdzIGFyZSB2YWxpZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gc29ydENvbmZpZ3MgU29ydCBjb25maWd1cmF0aW9uIGZvciBhbGwgc29ydGVkIGNvbHVtbnMuIE9iamVjdHMgY29udGFpbiBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBhcmVWYWxpZFNvcnRDb25maWdzKHNvcnRDb25maWdzKSB7XG4gICAgY29uc3QgbnVtYmVyT2ZDb2x1bW5zID0gdGhpcy5ob3QuY291bnRDb2xzKCk7XG5cbiAgICAvLyBXZSBkb24ndCB0cmFuc2xhdGUgdmlzdWFsIGluZGV4ZXMgdG8gcGh5c2ljYWwgaW5kZXhlcy5cbiAgICByZXR1cm4gKDAsIF91dGlscy5hcmVWYWxpZFNvcnRTdGF0ZXMpKHNvcnRDb25maWdzKSAmJiBzb3J0Q29uZmlncy5ldmVyeShfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNvbHVtblxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4gY29sdW1uIDw9IG51bWJlck9mQ29sdW1ucyAmJiBjb2x1bW4gPj0gMDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyBhbGwgc29ydGluZyBzZXR0aW5ncy4gU2F2aW5nIHdvcmtzIG9ubHkgd2hlbiB7QGxpbmsgT3B0aW9ucyNwZXJzaXN0ZW50U3RhdGV9IG9wdGlvbiBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzb3J0Q29uZmlncyBTb3J0IGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBzb3J0ZWQgY29sdW1ucy4gT2JqZWN0cyBjb250YWluIGBjb2x1bW5gIGFuZCBgc29ydE9yZGVyYCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgSG9va3MjcGVyc2lzdGVudFN0YXRlU2F2ZVxuICAgKi9cbiAgc2F2ZUFsbFNvcnRTZXR0aW5ncyhzb3J0Q29uZmlncykge1xuICAgIGNvbnN0IGFsbFNvcnRTZXR0aW5ncyA9IHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpO1xuICAgIGNvbnN0IHRyYW5zbGF0ZUNvbHVtblRvUGh5c2ljYWwgPSBfcmVmMiA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICBjb2x1bW46IHZpc3VhbENvbHVtbixcbiAgICAgICAgLi4ucmVzdE9mUHJvcGVydGllc1xuICAgICAgfSA9IF9yZWYyO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uOiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHZpc3VhbENvbHVtbiksXG4gICAgICAgIC4uLnJlc3RPZlByb3BlcnRpZXNcbiAgICAgIH07XG4gICAgfTtcbiAgICBhbGxTb3J0U2V0dGluZ3MuaW5pdGlhbENvbmZpZyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKHNvcnRDb25maWdzLCB0cmFuc2xhdGVDb2x1bW5Ub1BoeXNpY2FsKTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygncGVyc2lzdGVudFN0YXRlU2F2ZScsICdjb2x1bW5Tb3J0aW5nJywgYWxsU29ydFNldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHNhdmVkIHNvcnRpbmcgc2V0dGluZ3MuIExvYWRpbmcgd29ya3Mgb25seSB3aGVuIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX0gb3B0aW9uIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFByZXZpb3VzbHkgc2F2ZWQgc29ydCBzZXR0aW5ncy5cbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZUxvYWRcbiAgICovXG4gIGdldEFsbFNhdmVkU29ydFNldHRpbmdzKCkge1xuICAgIGNvbnN0IHN0b3JlZEFsbFNvcnRTZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdwZXJzaXN0ZW50U3RhdGVMb2FkJywgJ2NvbHVtblNvcnRpbmcnLCBzdG9yZWRBbGxTb3J0U2V0dGluZ3MpO1xuICAgIGNvbnN0IGFsbFNvcnRTZXR0aW5ncyA9IHN0b3JlZEFsbFNvcnRTZXR0aW5ncy52YWx1ZTtcbiAgICBjb25zdCB0cmFuc2xhdGVDb2x1bW5Ub1Zpc3VhbCA9IF9yZWYzID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIGNvbHVtbjogcGh5c2ljYWxDb2x1bW4sXG4gICAgICAgIC4uLnJlc3RPZlByb3BlcnRpZXNcbiAgICAgIH0gPSBfcmVmMztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4ocGh5c2ljYWxDb2x1bW4pLFxuICAgICAgICAuLi5yZXN0T2ZQcm9wZXJ0aWVzXG4gICAgICB9O1xuICAgIH07XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShhbGxTb3J0U2V0dGluZ3MpICYmIEFycmF5LmlzQXJyYXkoYWxsU29ydFNldHRpbmdzLmluaXRpYWxDb25maWcpKSB7XG4gICAgICBhbGxTb3J0U2V0dGluZ3MuaW5pdGlhbENvbmZpZyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKGFsbFNvcnRTZXR0aW5ncy5pbml0aWFsQ29uZmlnLCB0cmFuc2xhdGVDb2x1bW5Ub1Zpc3VhbCk7XG4gICAgfVxuICAgIHJldHVybiBhbGxTb3J0U2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5leHQgc29ydCBjb25maWd1cmF0aW9uIGZvciBwYXJ0aWN1bGFyIGNvbHVtbi4gT2JqZWN0IGNvbnRhaW4gYGNvbHVtbmAgYW5kIGBzb3J0T3JkZXJgIHByb3BlcnRpZXMuXG4gICAqXG4gICAqICoqTm90ZSoqOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgcmV0dXJuZWQgb2JqZWN0IGV4cG9zZSAqKnZpc3VhbCoqIGNvbHVtbiBpbmRleCB1bmRlciB0aGUgYGNvbHVtbmAga2V5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR8b2JqZWN0fVxuICAgKi9cbiAgZ2V0Q29sdW1uTmV4dENvbmZpZyhjb2x1bW4pIHtcbiAgICBjb25zdCBzb3J0T3JkZXIgPSB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKHNvcnRPcmRlcikpIHtcbiAgICAgIGNvbnN0IG5leHRTb3J0T3JkZXIgPSAoMCwgX3V0aWxzLmdldE5leHRTb3J0T3JkZXIpKHNvcnRPcmRlcik7XG4gICAgICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKG5leHRTb3J0T3JkZXIpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sdW1uLFxuICAgICAgICAgIHNvcnRPcmRlcjogbmV4dFNvcnRPcmRlclxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuck9mQ29sdW1ucyA9IHRoaXMuaG90LmNvdW50Q29scygpO1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbikgJiYgY29sdW1uID49IDAgJiYgY29sdW1uIDwgbnJPZkNvbHVtbnMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgc29ydE9yZGVyOiAoMCwgX3V0aWxzLmdldE5leHRTb3J0T3JkZXIpKClcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3J0IGNvbmZpZ3VyYXRpb24gd2l0aCBcIm5leHQgb3JkZXJcIiBmb3IgcGFydGljdWxhciBjb2x1bW4uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5Ub0NoYW5nZSBWaXN1YWwgY29sdW1uIGluZGV4IG9mIGNvbHVtbiB3aGljaCBvcmRlciB3aWxsIGJlIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJhdGVneUlkIElEIG9mIHN0cmF0ZWd5LiBQb3NzaWJsZSB2YWx1ZXM6ICdhcHBlbmQnIGFuZCAncmVwbGFjZScuIFRoZSBmaXJzdCBvbmVcbiAgICogY2hhbmdlIG9yZGVyIG9mIHBhcnRpY3VsYXIgY29sdW1uIGFuZCBjaGFuZ2UgaXQncyBwb3NpdGlvbiBpbiB0aGUgc29ydCBxdWV1ZSB0byB0aGUgbGFzdCBvbmUuIFRoZSBzZWNvbmQgb25lXG4gICAqIGp1c3QgY2hhbmdlIG9yZGVyIG9mIHBhcnRpY3VsYXIgY29sdW1uLlxuICAgKlxuICAgKiAqKk5vdGUqKjogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHJldHVybmVkIG9iamVjdHMgZXhwb3NlICoqdmlzdWFsKiogY29sdW1uIGluZGV4IHVuZGVyIHRoZSBgY29sdW1uYCBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldE5leHRTb3J0Q29uZmlnKGNvbHVtblRvQ2hhbmdlKSB7XG4gICAgbGV0IHN0cmF0ZWd5SWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IEFQUEVORF9DT0xVTU5fQ09ORklHX1NUUkFURUdZO1xuICAgIGNvbnN0IGluZGV4T2ZDb2x1bW5Ub0NoYW5nZSA9IHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUoY29sdW1uVG9DaGFuZ2UpO1xuICAgIGNvbnN0IGlzQ29sdW1uU29ydGVkID0gaW5kZXhPZkNvbHVtblRvQ2hhbmdlICE9PSAtMTtcbiAgICBjb25zdCBjdXJyZW50U29ydENvbmZpZyA9IHRoaXMuZ2V0U29ydENvbmZpZygpO1xuICAgIGNvbnN0IG5leHRDb2x1bW5Db25maWcgPSB0aGlzLmdldENvbHVtbk5leHRDb25maWcoY29sdW1uVG9DaGFuZ2UpO1xuICAgIGlmIChpc0NvbHVtblNvcnRlZCkge1xuICAgICAgaWYgKCgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKG5leHRDb2x1bW5Db25maWcpKSB7XG4gICAgICAgIHJldHVybiBbLi4uY3VycmVudFNvcnRDb25maWcuc2xpY2UoMCwgaW5kZXhPZkNvbHVtblRvQ2hhbmdlKSwgLi4uY3VycmVudFNvcnRDb25maWcuc2xpY2UoaW5kZXhPZkNvbHVtblRvQ2hhbmdlICsgMSldO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmF0ZWd5SWQgPT09IEFQUEVORF9DT0xVTU5fQ09ORklHX1NUUkFURUdZKSB7XG4gICAgICAgIHJldHVybiBbLi4uY3VycmVudFNvcnRDb25maWcuc2xpY2UoMCwgaW5kZXhPZkNvbHVtblRvQ2hhbmdlKSwgLi4uY3VycmVudFNvcnRDb25maWcuc2xpY2UoaW5kZXhPZkNvbHVtblRvQ2hhbmdlICsgMSksIG5leHRDb2x1bW5Db25maWddO1xuICAgICAgfSBlbHNlIGlmIChzdHJhdGVneUlkID09PSBSRVBMQUNFX0NPTFVNTl9DT05GSUdfU1RSQVRFR1kpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5jdXJyZW50U29ydENvbmZpZy5zbGljZSgwLCBpbmRleE9mQ29sdW1uVG9DaGFuZ2UpLCBuZXh0Q29sdW1uQ29uZmlnLCAuLi5jdXJyZW50U29ydENvbmZpZy5zbGljZShpbmRleE9mQ29sdW1uVG9DaGFuZ2UgKyAxKV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkobmV4dENvbHVtbkNvbmZpZykpIHtcbiAgICAgIHJldHVybiBjdXJyZW50U29ydENvbmZpZy5jb25jYXQobmV4dENvbHVtbkNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50U29ydENvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGx1Z2luJ3MgY29sdW1uIGNvbmZpZyBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4gaW5kZXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5Db25maWcgQ29uZmlndXJhdGlvbiBpbnNpZGUgYGNvbHVtbnNgIHByb3BlcnR5IGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldFBsdWdpbkNvbHVtbkNvbmZpZyhjb2x1bW5Db25maWcpIHtcbiAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKGNvbHVtbkNvbmZpZykpIHtcbiAgICAgIGNvbnN0IHBsdWdpbkNvbHVtbkNvbmZpZyA9IGNvbHVtbkNvbmZpZ1t0aGlzLnBsdWdpbktleV07XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKHBsdWdpbkNvbHVtbkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIHBsdWdpbkNvbHVtbkNvbmZpZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwbHVnaW4gc2V0dGluZ3MgcmVsYXRlZCBwcm9wZXJ0aWVzLCBwcm9wZXJseSBtZXJnZWQgZnJvbSBjYXNjYWRlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhjb2x1bW4pIHtcbiAgICBjb25zdCBwbHVnaW5NYWluU2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTtcbiAgICBjb25zdCBzdG9yZWRDb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLCBjb2x1bW4pO1xuICAgIGNvbnN0IGNvbHVtbk1ldGEgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2VsbE1ldGEpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbHVtbk1ldGEuY29sdW1ucykpIHtcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHN0b3JlZENvbHVtblByb3BlcnRpZXMsIHBsdWdpbk1haW5TZXR0aW5ncywgdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoY29sdW1uTWV0YS5jb2x1bW5zW2NvbHVtbl0pKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikoY29sdW1uTWV0YS5jb2x1bW5zKSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oc3RvcmVkQ29sdW1uUHJvcGVydGllcywgcGx1Z2luTWFpblNldHRpbmdzLCB0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhjb2x1bW5NZXRhLmNvbHVtbnMoY29sdW1uKSkpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihzdG9yZWRDb2x1bW5Qcm9wZXJ0aWVzLCBwbHVnaW5NYWluU2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb3B5IG9mIHNldHRpbmdzIGZvciBmaXJzdCBjZWxsIGluIHRoZSBjb2x1bW4uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIC8vIFRPRE86IFdvcmthcm91bmQuIEluaGVyaXRpbmcgb2Ygbm9uLXByaW1pdGl2ZSBjZWxsIG1ldGEgdmFsdWVzIGRvZXNuJ3Qgd29yay4gSW5zdGVhZCBvZiBnZXR0aW5nIHByb3BlcnRpZXMgZnJvbSBjb2x1bW4gbWV0YSB3ZSBjYWxsIHRoaXMgZnVuY3Rpb24uXG4gIC8vIFRPRE86IFJlbW92ZSB0ZXN0IG5hbWVkOiBcInNob3VsZCBub3QgYnJlYWsgdGhlIGRhdGFzZXQgd2hlbiBpbnNlcnRlZCBuZXcgcm93XCIgKCM1NDMxKS5cbiAgZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoY29sdW1uKSB7XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLCBjb2x1bW4pO1xuICAgIGNvbnN0IGNlbGxNZXRhQ29weSA9IE9iamVjdC5jcmVhdGUoY2VsbE1ldGEpO1xuICAgIGNlbGxNZXRhQ29weVt0aGlzLnBsdWdpbktleV0gPSB0aGlzLmNvbHVtbk1ldGFDYWNoZS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pKTtcbiAgICByZXR1cm4gY2VsbE1ldGFDb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBudW1iZXIgb2Ygcm93cyB3aGljaCBzaG91bGQgYmUgc29ydGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZSb3dzIFRvdGFsIG51bWJlciBvZiBkaXNwbGF5ZWQgcm93cy5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE51bWJlck9mUm93c1RvU29ydChudW1iZXJPZlJvd3MpIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKCk7XG5cbiAgICAvLyBgbWF4Um93c2Agb3B0aW9uIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgYG1pblNwYXJlUm93c2Agb3B0aW9uIGluIHRoaXMgY2FzZS5cbiAgICBpZiAoc2V0dGluZ3MubWF4Um93cyA8PSBudW1iZXJPZlJvd3MpIHtcbiAgICAgIHJldHVybiBzZXR0aW5ncy5tYXhSb3dzO1xuICAgIH1cbiAgICByZXR1cm4gbnVtYmVyT2ZSb3dzIC0gc2V0dGluZ3MubWluU3BhcmVSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBzb3J0aW5nIHVzaW5nIGEgc3RhYmxlIHNvcnQgZnVuY3Rpb24gYmFzaW5nIG9uIGludGVybmFsIHN0YXRlIG9mIHNvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNvcnRDb25maWdzIFNvcnQgY29uZmlndXJhdGlvbiBmb3IgYWxsIHNvcnRlZCBjb2x1bW5zLiBPYmplY3RzIGNvbnRhaW4gYGNvbHVtbmAgYW5kIGBzb3J0T3JkZXJgIHByb3BlcnRpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzb3J0QnlQcmVzZXRTb3J0U3RhdGVzKHNvcnRDb25maWdzKSB7XG4gICAgaWYgKHNvcnRDb25maWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzV2l0aERhdGEgPSBbXTtcbiAgICBjb25zdCBudW1iZXJPZlJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBnZXREYXRhRm9yU29ydGVkQ29sdW1ucyA9IHZpc3VhbFJvd0luZGV4ID0+ICgwLCBfYXJyYXkuYXJyYXlNYXApKHNvcnRDb25maWdzLCBzb3J0Q29uZmlnID0+IHRoaXMuaG90LmdldERhdGFBdENlbGwodmlzdWFsUm93SW5kZXgsIHNvcnRDb25maWcuY29sdW1uKSk7XG4gICAgZm9yIChsZXQgdmlzdWFsUm93SW5kZXggPSAwOyB2aXN1YWxSb3dJbmRleCA8IHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KG51bWJlck9mUm93cyk7IHZpc3VhbFJvd0luZGV4ICs9IDEpIHtcbiAgICAgIGluZGV4ZXNXaXRoRGF0YS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KHZpc3VhbFJvd0luZGV4KV0uY29uY2F0KGdldERhdGFGb3JTb3J0ZWRDb2x1bW5zKHZpc3VhbFJvd0luZGV4KSkpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzQmVmb3JlID0gKDAsIF9hcnJheS5hcnJheU1hcCkoaW5kZXhlc1dpdGhEYXRhLCBpbmRleFdpdGhEYXRhID0+IGluZGV4V2l0aERhdGFbMF0pO1xuICAgICgwLCBfc29ydFNlcnZpY2Uuc29ydCkoaW5kZXhlc1dpdGhEYXRhLCB0aGlzLnBsdWdpbktleSwgKDAsIF9hcnJheS5hcnJheU1hcCkoc29ydENvbmZpZ3MsIHNvcnRDb25maWcgPT4gc29ydENvbmZpZy5zb3J0T3JkZXIpLCAoMCwgX2FycmF5LmFycmF5TWFwKShzb3J0Q29uZmlncywgc29ydENvbmZpZyA9PiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKHNvcnRDb25maWcuY29sdW1uKSkpO1xuXG4gICAgLy8gQXBwZW5kIHNwYXJlUm93c1xuICAgIGZvciAobGV0IHZpc3VhbFJvd0luZGV4ID0gaW5kZXhlc1dpdGhEYXRhLmxlbmd0aDsgdmlzdWFsUm93SW5kZXggPCBudW1iZXJPZlJvd3M7IHZpc3VhbFJvd0luZGV4ICs9IDEpIHtcbiAgICAgIGluZGV4ZXNXaXRoRGF0YS5wdXNoKFt2aXN1YWxSb3dJbmRleF0uY29uY2F0KGdldERhdGFGb3JTb3J0ZWRDb2x1bW5zKHZpc3VhbFJvd0luZGV4KSkpO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzQWZ0ZXIgPSAoMCwgX2FycmF5LmFycmF5TWFwKShpbmRleGVzV2l0aERhdGEsIGluZGV4V2l0aERhdGEgPT4gaW5kZXhXaXRoRGF0YVswXSk7XG4gICAgY29uc3QgaW5kZXhNYXBwaW5nID0gbmV3IE1hcCgoMCwgX2FycmF5LmFycmF5TWFwKShpbmRleGVzQmVmb3JlLCAoaW5kZXhCZWZvcmUsIGluZGV4SW5zaWRlQXJyYXkpID0+IFtpbmRleEJlZm9yZSwgaW5kZXhlc0FmdGVyW2luZGV4SW5zaWRlQXJyYXldXSkpO1xuICAgIGNvbnN0IG5ld0luZGV4ZXNTZXF1ZW5jZSA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLCBwaHlzaWNhbEluZGV4ID0+IHtcbiAgICAgIGlmIChpbmRleE1hcHBpbmcuaGFzKHBoeXNpY2FsSW5kZXgpKSB7XG4gICAgICAgIHJldHVybiBpbmRleE1hcHBpbmcuZ2V0KHBoeXNpY2FsSW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBoeXNpY2FsSW5kZXg7XG4gICAgfSk7XG4gICAgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKG5ld0luZGV4ZXNTZXF1ZW5jZSk7XG4gIH1cbiAgLyoqXG4gICAqIFNvcnQgdGhlIHRhYmxlIGJ5IHByb3ZpZGVkIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhbGxTb3J0U2V0dGluZ3MgQWxsIHNvcnQgY29uZmlnIHNldHRpbmdzLiBPYmplY3QgbWF5IGNvbnRhaW4gYGluaXRpYWxDb25maWdgLCBgaW5kaWNhdG9yYCxcbiAgICogYHNvcnRFbXB0eUNlbGxzYCwgYGhlYWRlckFjdGlvbmAgYW5kIGBjb21wYXJlRnVuY3Rpb25GYWN0b3J5YCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc29ydEJ5U2V0dGluZ3MoYWxsU29ydFNldHRpbmdzKSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShhbGxTb3J0U2V0dGluZ3MpKSB7XG4gICAgICB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMoYWxsU29ydFNldHRpbmdzKTtcbiAgICAgIGNvbnN0IGluaXRpYWxDb25maWcgPSBhbGxTb3J0U2V0dGluZ3MuaW5pdGlhbENvbmZpZztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGluaXRpYWxDb25maWcpIHx8ICgwLCBfb2JqZWN0LmlzT2JqZWN0KShpbml0aWFsQ29uZmlnKSkge1xuICAgICAgICB0aGlzLnNvcnQoaW5pdGlhbENvbmZpZyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV4dHJhIHJlbmRlciBmb3IgaGVhZGVycy4gVGhlaXIgd2lkdGggbWF5IGNoYW5nZS5cbiAgICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdGhlIGBvbkFmdGVyR2V0Q29sSGVhZGVyYCBob29rLiBBZGRzIGNvbHVtbiBzb3J0aW5nIENTUyBjbGFzc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gVEggVEggSFRNTCBlbGVtZW50LlxuICAgKi9cblxuICAvKipcbiAgICogVXBkYXRlIGhlYWRlciBjbGFzc2VzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBoZWFkZXJTcGFuRWxlbWVudCBIZWFkZXIgc3BhbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gey4uLip9IGFyZ3MgRXh0cmEgYXJndW1lbnRzIGZvciBoZWxwZXJzLlxuICAgKi9cbiAgdXBkYXRlSGVhZGVyQ2xhc3NlcyhoZWFkZXJTcGFuRWxlbWVudCkge1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoaGVhZGVyU3BhbkVsZW1lbnQsICgwLCBfZG9tSGVscGVycy5nZXRDbGFzc2VzVG9SZW1vdmUpKGhlYWRlclNwYW5FbGVtZW50KSk7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKGhlYWRlclNwYW5FbGVtZW50LCAoMCwgX2RvbUhlbHBlcnMuZ2V0Q2xhc3Nlc1RvQWRkKSguLi5hcmdzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJ3cml0aW5nIGJhc2UgcGx1Z2luJ3MgYG9uVXBkYXRlU2V0dGluZ3NgIG1ldGhvZC4gUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGBvbkFmdGVyVXBkYXRlU2V0dGluZ3NgIGlzbid0IGNhbGxlZFxuICAgKiBmb3IgYHVwZGF0ZVNldHRpbmdzYCBpbiBzcGVjaWZpYyBzaXR1YXRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U2V0dGluZ3MgTmV3IHNldHRpbmdzIG9iamVjdC5cbiAgICovXG4gIG9uVXBkYXRlU2V0dGluZ3MobmV3U2V0dGluZ3MpIHtcbiAgICBzdXBlci5vblVwZGF0ZVNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMuY29sdW1uTWV0YUNhY2hlICE9PSBudWxsKSB7XG4gICAgICAvLyBDb2x1bW4gbWV0YSBjYWNoZSBiYXNlIG9uIHNldHRpbmdzLCB0aHVzIHdlIHNob3VsZCByZS1pbml0IHRoZSBtYXAuXG4gICAgICB0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKTtcbiAgICB9XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShuZXdTZXR0aW5nc1t0aGlzLnBsdWdpbktleV0pKSB7XG4gICAgICB0aGlzLnNvcnRCeVNldHRpbmdzKG5ld1NldHRpbmdzW3RoaXMucGx1Z2luS2V5XSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZvciB0aGUgYGFmdGVyTG9hZERhdGFgIGhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi5cbiAgICovXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBjbGlja2FibGUgaGVhZGVyIHdhcyBjbGlja2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBgbW91c2Vkb3duYCBldmVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHdhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoZXZlbnQsIGNvbHVtbikge1xuICAgIGNvbnN0IHBsdWdpblNldHRpbmdzRm9yQ29sdW1uID0gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhjb2x1bW4pW3RoaXMucGx1Z2luS2V5XTtcbiAgICBjb25zdCBoZWFkZXJBY3Rpb25FbmFibGVkID0gcGx1Z2luU2V0dGluZ3NGb3JDb2x1bW4uaGVhZGVyQWN0aW9uO1xuICAgIHJldHVybiBoZWFkZXJBY3Rpb25FbmFibGVkICYmICgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCBfdXRpbHMuSEVBREVSX1NQQU5fQ0xBU1MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIGJlaGF2aW9yIG9mIHNlbGVjdGlvbiAvIGRyYWdnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBgbW91c2Vkb3duYCBldmVudC5cbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVmlzdWFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBURCBUaGUgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGFsbG93cyBvciBkaXNhbGxvd3MgY2hhbmdpbmcgdGhlIHNlbGVjdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGFyZWEuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmb3IgdGhlIGBvbkFmdGVyT25DZWxsTW91c2VEb3duYCBob29rLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBFdmVudCB3aGljaCBhcmUgcHJvdmlkZWQgYnkgaG9vay5cbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVmlzdWFsIGNvb3JkcyBvZiB0aGUgc2VsZWN0ZWQgY2VsbC5cbiAgICovXG4gIG9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oZXZlbnQsIGNvb3Jkcykge1xuICAgIGlmICgoMCwgX3V0aWxzLndhc0hlYWRlckNsaWNrZWRQcm9wZXJseSkoY29vcmRzLnJvdywgY29vcmRzLmNvbCwgZXZlbnQpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGV2ZW50LCBjb29yZHMuY29sKSkge1xuICAgICAgaWYgKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSkge1xuICAgICAgICB0aGlzLmhvdC5kZXNlbGVjdENlbGwoKTtcbiAgICAgICAgdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhjb29yZHMuY29sKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoY29vcmRzLmNvbCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB2YXIgX3RoaXMkY29sdW1uU3RhdGVzTWFuO1xuICAgIC8vIFRPRE86IFByb2JhYmx5IG5vdCBzdXBwb3J0ZWQgeWV0IGJ5IEVTTGludDogaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzExMDQ1XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgIChfdGhpcyRjb2x1bW5TdGF0ZXNNYW4gPSB0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIpID09PSBudWxsIHx8IF90aGlzJGNvbHVtblN0YXRlc01hbiA9PT0gdm9pZCAwIHx8IF90aGlzJGNvbHVtblN0YXRlc01hbi5kZXN0cm95KCk7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkNvbHVtblNvcnRpbmcgPSBDb2x1bW5Tb3J0aW5nO1xuZnVuY3Rpb24gX2xvYWRPclNvcnRCeVNldHRpbmdzKCkge1xuICBjb25zdCBzdG9yZWRBbGxTb3J0U2V0dGluZ3MgPSB0aGlzLmdldEFsbFNhdmVkU29ydFNldHRpbmdzKCk7XG4gIGlmICgoMCwgX29iamVjdC5pc09iamVjdCkoc3RvcmVkQWxsU29ydFNldHRpbmdzKSkge1xuICAgIHRoaXMuc29ydEJ5U2V0dGluZ3Moc3RvcmVkQWxsU29ydFNldHRpbmdzKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBhbGxTb3J0U2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTtcbiAgICB0aGlzLnNvcnRCeVNldHRpbmdzKGFsbFNvcnRTZXR0aW5ncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Q29sSGVhZGVyKGNvbHVtbiwgVEgpIHtcbiAgY29uc3QgaGVhZGVyU3BhbkVsZW1lbnQgPSAoMCwgX3V0aWxzLmdldEhlYWRlclNwYW5FbGVtZW50KShUSCk7XG4gIGlmICgoMCwgX3V0aWxzLmlzRmlyc3RMZXZlbENvbHVtbkhlYWRlcikoY29sdW1uLCBUSCkgPT09IGZhbHNlIHx8IGhlYWRlclNwYW5FbGVtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBsdWdpblNldHRpbmdzRm9yQ29sdW1uID0gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhjb2x1bW4pW3RoaXMucGx1Z2luS2V5XTtcbiAgY29uc3Qgc2hvd1NvcnRJbmRpY2F0b3IgPSBwbHVnaW5TZXR0aW5nc0ZvckNvbHVtbi5pbmRpY2F0b3I7XG4gIGNvbnN0IGhlYWRlckFjdGlvbkVuYWJsZWQgPSBwbHVnaW5TZXR0aW5nc0ZvckNvbHVtbi5oZWFkZXJBY3Rpb247XG4gIHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoZWFkZXJTcGFuRWxlbWVudCwgdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLCBjb2x1bW4sIHNob3dTb3J0SW5kaWNhdG9yLCBoZWFkZXJBY3Rpb25FbmFibGVkKTtcbiAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICBjb25zdCBjdXJyZW50U29ydFN0YXRlID0gdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldFNvcnRPcmRlck9mQ29sdW1uKGNvbHVtbik7XG4gICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoVEgsIC4uLigwLCBfYTExeS5BMTFZX1NPUlQpKGN1cnJlbnRTb3J0U3RhdGUgPyBgJHtjdXJyZW50U29ydFN0YXRlfWVuZGluZ2AgOiAnbm9uZScpKTtcbiAgfVxufVxuZnVuY3Rpb24gX29uQWZ0ZXJMb2FkRGF0YShpbml0aWFsTG9hZCkge1xuICBpZiAoaW5pdGlhbExvYWQgPT09IHRydWUpIHtcbiAgICAvLyBUT0RPOiBXb3JrYXJvdW5kPyBJdCBzaG91bGQgYmUgcmVmYWN0b3JlZCAvIGRlc2NyaWJlZC5cbiAgICBpZiAodGhpcy5ob3Qudmlldykge1xuICAgICAgX2Fzc2VydENsYXNzQnJhbmQoX0NvbHVtblNvcnRpbmdfYnJhbmQsIHRoaXMsIF9sb2FkT3JTb3J0QnlTZXR0aW5ncykuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIF9vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihldmVudCwgY29vcmRzLCBURCwgY29udHJvbGxlcikge1xuICBpZiAoKDAsIF91dGlscy53YXNIZWFkZXJDbGlja2VkUHJvcGVybHkpKGNvb3Jkcy5yb3csIGNvb3Jkcy5jb2wsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChldmVudCwgY29vcmRzLmNvbCkgJiYgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpKSB7XG4gICAgY29udHJvbGxlci5jb2x1bW4gPSB0cnVlO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2xhdGlvbnNcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmNvbnN0IGluaGVyaXRlZENvbHVtblByb3BlcnRpZXMgPSBbJ3NvcnRFbXB0eUNlbGxzJywgJ2luZGljYXRvcicsICdoZWFkZXJBY3Rpb24nLCAnY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSddO1xuY29uc3QgU09SVF9FTVBUWV9DRUxMU19ERUZBVUxUID0gZmFsc2U7XG5jb25zdCBTSE9XX1NPUlRfSU5ESUNBVE9SX0RFRkFVTFQgPSB0cnVlO1xuY29uc3QgSEVBREVSX0FDVElPTl9ERUZBVUxUID0gdHJ1ZTtcblxuLyoqXG4gKiBTdG9yZSBhbmQgbWFuYWdlcyBzdGF0ZXMgb2Ygc29ydGVkIGNvbHVtbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBDb2x1bW5TdGF0ZXNNYW5hZ2VyXG4gKi9cbmNsYXNzIENvbHVtblN0YXRlc01hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihob3QsIG1hcE5hbWUpIHtcbiAgICAvKipcbiAgICAgKiBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBtYXAgc3RvcmluZyBzb3J0aW5nIHN0YXRlcyBmb3IgZXZlcnkgY29sdW1uLiBDb2x1bW5TdGF0ZXNNYW5hZ2VyIHdyaXRlIGFuZCByZWFkIHRvL2Zyb20gdGhpcyBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNvcnRpbmdTdGF0ZXNcIiwgbmV3IF90cmFuc2xhdGlvbnMuTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAoKSk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHdlIHNob3VsZCBzb3J0IGVtcHR5IGNlbGxzLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic29ydEVtcHR5Q2VsbHNcIiwgU09SVF9FTVBUWV9DRUxMU19ERUZBVUxUKTtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgaW5kaWNhdG9yIHNob3VsZCBiZSB2aXNpYmxlIChmb3Igc29ydGVkIGNvbHVtbnMpLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5kaWNhdG9yXCIsIFNIT1dfU09SVF9JTkRJQ0FUT1JfREVGQVVMVCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGNsaWNrIG9uIHRoZSBoZWFkZXIgcGVyZm9ybSBzb3J0aW5nLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGVhZGVyQWN0aW9uXCIsIEhFQURFUl9BQ1RJT05fREVGQVVMVCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBjb21wYXJlIGZ1bmN0aW9uIGZhY3RvcnkuIE1ldGhvZCBnZXQgYXMgcGFyYW1ldGVycyBgc29ydE9kZXJgIGFuZCBgY29sdW1uTWV0YWAgYW5kIHJldHVybiBjb21wYXJlIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbXBhcmVGdW5jdGlvbkZhY3RvcnlcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBOYW1lIG9mIG1hcCBzdG9yaW5nIHNvcnRpbmcgc3RhdGVzLiBSZXF1aXJlZCBmb3IgdW5pcXVlIG5hbWUgKFBSICM3NDQwIGludHJvZHVjZWQgaXQpLiBJdCdzIG5lZWRlZCBhc1xuICAgICAqIGJvdGggQ29sdW1uU29ydGluZyBhbmQgTXVsdGlDb2x1bW5Tb3J0aW5nIHBsdWdpbnMgY3JlYXRlIHN0YXRlIG1hbmFnZXIgYW5kIGFzIGEgY29uc2VxdWVuY2UgcmVnaXN0ZXIgbWFwcy5cbiAgICAgKiBPYmplY3RzIGFyZSBkZXN0cm95ZWQgaW4gc3RyYW5nZSBvcmRlciBhcyB0aGUgdXBkYXRlU2V0dGluZ3MgZG9lc24ndCB3b3JrIHdlbGwuXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWFwTmFtZVwiLCB2b2lkIDApO1xuICAgIHRoaXMuaG90ID0gaG90O1xuICAgIHRoaXMubWFwTmFtZSA9IG1hcE5hbWU7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAobWFwTmFtZSwgdGhpcy5zb3J0aW5nU3RhdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY29sdW1uIHByb3BlcnRpZXMgd2hpY2ggYWZmZWN0IHRoZSBzb3J0aW5nIHJlc3VsdC5cbiAgICpcbiAgICogKipOb3RlKio6IEFsbCBjb2x1bW4gcHJvcGVydGllcyBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkge0BsaW5rIE9wdGlvbnMjY29sdW1uc30gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gYWxsU29ydFNldHRpbmdzIENvbHVtbiBzb3J0aW5nIHBsdWdpbidzIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKi9cbiAgdXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMoYWxsU29ydFNldHRpbmdzKSB7XG4gICAgaWYgKCEoMCwgX29iamVjdC5pc09iamVjdCkoYWxsU29ydFNldHRpbmdzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShhbGxTb3J0U2V0dGluZ3MsIChuZXdWYWx1ZSwgcHJvcGVydHlOYW1lKSA9PiB7XG4gICAgICBpZiAoaW5oZXJpdGVkQ29sdW1uUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgY29sdW1uIHByb3BlcnRpZXMgd2hpY2ggYWZmZWN0IHRoZSBzb3J0aW5nIHJlc3VsdC5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IGNvbHVtblByb3BlcnRpZXMgPSB7XG4gICAgICBzb3J0RW1wdHlDZWxsczogdGhpcy5zb3J0RW1wdHlDZWxscyxcbiAgICAgIGluZGljYXRvcjogdGhpcy5pbmRpY2F0b3IsXG4gICAgICBoZWFkZXJBY3Rpb246IHRoaXMuaGVhZGVyQWN0aW9uXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29sdW1uUHJvcGVydGllcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5ID0gdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5O1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uUHJvcGVydGllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc29ydCBvcmRlciBvZiBjb2x1bW4uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWFyY2hlZENvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gU29ydCBvcmRlciAoYGFzY2AgZm9yIGFzY2VuZGluZywgYGRlc2NgIGZvciBkZXNjZW5kaW5nIGFuZCB1bmRlZmluZWQgZm9yIG5vdCBzb3J0ZWQpLlxuICAgKi9cbiAgZ2V0U29ydE9yZGVyT2ZDb2x1bW4oc2VhcmNoZWRDb2x1bW4pIHtcbiAgICB2YXIgX3RoaXMkc29ydGluZ1N0YXRlcyRnO1xuICAgIHJldHVybiAoX3RoaXMkc29ydGluZ1N0YXRlcyRnID0gdGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHNlYXJjaGVkQ29sdW1uKSkpID09PSBudWxsIHx8IF90aGlzJHNvcnRpbmdTdGF0ZXMkZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkc29ydGluZ1N0YXRlcyRnLnNvcnRPcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3JkZXIgb2YgcGFydGljdWxhciBjb2x1bW4gaW4gdGhlIHN0YXRlcyBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGNvbHVtbikge1xuICAgIGNvbHVtbiA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oY29sdW1uKTtcbiAgICByZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoX3JlZiA9PiB7XG4gICAgICBsZXQgW3BoeXNpY2FsQ29sdW1uXSA9IF9yZWY7XG4gICAgICByZXR1cm4gcGh5c2ljYWxDb2x1bW4gPT09IGNvbHVtbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbnVtYmVyIG9mIHNvcnRlZCBjb2x1bW5zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlmIGxpc3Qgb2Ygc29ydGVkIGNvbHVtbnMgaXMgZW1wdHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCkgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlmIHBhcnRpY3VsYXIgY29sdW1uIGlzIHNvcnRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ29sdW1uU29ydGVkKGNvbHVtbikge1xuICAgIHJldHVybiAoMCwgX29iamVjdC5pc09iamVjdCkodGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWV1ZSBvZiBzb3J0IHN0YXRlcyBjb250YWluaW5nIHNvcnRlZCBjb2x1bW5zIGFuZCB0aGVpciBvcmRlcnMgKEFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcykuXG4gICAqXG4gICAqICoqTm90ZSoqOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBleHBvc2UgKip2aXN1YWwqKiBjb2x1bW4gaW5kZXggdW5kZXIgdGhlIGBjb2x1bW5gIGtleS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5PG9iamVjdD59XG4gICAqL1xuICBnZXRTb3J0U3RhdGVzKCkge1xuICAgIGlmICh0aGlzLnNvcnRpbmdTdGF0ZXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgc29ydGluZ1N0YXRlc1F1ZXVlID0gdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKTtcbiAgICByZXR1cm4gc29ydGluZ1N0YXRlc1F1ZXVlLm1hcChfcmVmMiA9PiB7XG4gICAgICBsZXQgW3BoeXNpY2FsQ29sdW1uLCB2YWx1ZV0gPSBfcmVmMjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbjogdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4ocGh5c2ljYWxDb2x1bW4pLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc29ydCBzdGF0ZSBmb3IgcGFydGljdWxhciBjb2x1bW4uIE9iamVjdCBjb250YWlucyBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcy5cbiAgICpcbiAgICogKipOb3RlKio6IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCByZXR1cm5lZCBvYmplY3RzIGV4cG9zZSAqKnZpc3VhbCoqIGNvbHVtbiBpbmRleCB1bmRlciB0aGUgYGNvbHVtbmAga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgZ2V0Q29sdW1uU29ydFN0YXRlKGNvbHVtbikge1xuICAgIGNvbnN0IHNvcnRPcmRlciA9IHRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oY29sdW1uKTtcbiAgICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKHNvcnRPcmRlcikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgc29ydE9yZGVyXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYWxsIGNvbHVtbiBzdGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNvcnRTdGF0ZXMgU29ydCBzdGF0ZXMuXG4gICAqL1xuICBzZXRTb3J0U3RhdGVzKHNvcnRTdGF0ZXMpIHtcbiAgICB0aGlzLnNvcnRpbmdTdGF0ZXMuY2xlYXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvcnRTdGF0ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihzb3J0U3RhdGVzW2ldLmNvbHVtbiksIHtcbiAgICAgICAgc29ydE9yZGVyOiBzb3J0U3RhdGVzW2ldLnNvcnRPcmRlclxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgdGhlIHN0YXRlIG1hbmFnZXIuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5tYXBOYW1lKTtcbiAgICB0aGlzLnNvcnRpbmdTdGF0ZXMgPSBudWxsO1xuICB9XG59XG5leHBvcnRzLkNvbHVtblN0YXRlc01hbmFnZXIgPSBDb2x1bW5TdGF0ZXNNYW5hZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRDbGFzc2VzVG9BZGQgPSBnZXRDbGFzc2VzVG9BZGQ7XG5leHBvcnRzLmdldENsYXNzZXNUb1JlbW92ZSA9IGdldENsYXNzZXNUb1JlbW92ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmNvbnN0IEhFQURFUl9DTEFTU19BU0NfU09SVCA9ICdhc2NlbmRpbmcnO1xuY29uc3QgSEVBREVSX0NMQVNTX0RFU0NfU09SVCA9ICdkZXNjZW5kaW5nJztcbmNvbnN0IEhFQURFUl9DTEFTU19JTkRJQ0FUT1JfRElTQUJMRUQgPSAnaW5kaWNhdG9yRGlzYWJsZWQnO1xuY29uc3QgSEVBREVSX1NPUlRfQ0xBU1MgPSAnY29sdW1uU29ydGluZyc7XG5jb25zdCBIRUFERVJfQUNUSU9OX0NMQVNTID0gJ3NvcnRBY3Rpb24nO1xuY29uc3Qgb3JkZXJUb0Nzc0NsYXNzID0gbmV3IE1hcChbW191dGlscy5BU0NfU09SVF9TVEFURSwgSEVBREVSX0NMQVNTX0FTQ19TT1JUXSwgW191dGlscy5ERVNDX1NPUlRfU1RBVEUsIEhFQURFUl9DTEFTU19ERVNDX1NPUlRdXSk7XG5cbi8qKlxuICogR2V0IENTUyBjbGFzc2VzIHdoaWNoIHNob3VsZCBiZSBhZGRlZCB0byBwYXJ0aWN1bGFyIGNvbHVtbiBoZWFkZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbHVtblN0YXRlc01hbmFnZXIgSW5zdGFuY2Ugb2YgY29sdW1uIHN0YXRlIG1hbmFnZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3dTb3J0SW5kaWNhdG9yIEluZGljYXRlcyBpZiBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duIGZvciB0aGUgcGFydGljdWxhciBjb2x1bW4uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGhlYWRlckFjdGlvbiBJbmRpY2F0ZXMgaWYgaGVhZGVyIGNsaWNrIHRvIHNvcnQgc2hvdWxkIGJlIHBvc3NpYmxlLlxuICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBDU1MgY2xhc3Nlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RvQWRkKGNvbHVtblN0YXRlc01hbmFnZXIsIGNvbHVtbiwgc2hvd1NvcnRJbmRpY2F0b3IsIGhlYWRlckFjdGlvbikge1xuICBjb25zdCBjc3NDbGFzc2VzID0gW0hFQURFUl9TT1JUX0NMQVNTXTtcbiAgaWYgKGhlYWRlckFjdGlvbikge1xuICAgIGNzc0NsYXNzZXMucHVzaChIRUFERVJfQUNUSU9OX0NMQVNTKTtcbiAgfVxuICBpZiAoc2hvd1NvcnRJbmRpY2F0b3IgPT09IGZhbHNlKSB7XG4gICAgY3NzQ2xhc3Nlcy5wdXNoKEhFQURFUl9DTEFTU19JTkRJQ0FUT1JfRElTQUJMRUQpO1xuICAgIHJldHVybiBjc3NDbGFzc2VzO1xuICB9XG4gIGNvbnN0IGNvbHVtbk9yZGVyID0gY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihjb2x1bW4pO1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGNvbHVtbk9yZGVyKSkge1xuICAgIGNzc0NsYXNzZXMucHVzaChvcmRlclRvQ3NzQ2xhc3MuZ2V0KGNvbHVtbk9yZGVyKSk7XG4gIH1cbiAgcmV0dXJuIGNzc0NsYXNzZXM7XG59XG5cbi8qKlxuICogR2V0IENTUyBjbGFzc2VzIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkIGZyb20gY29sdW1uIGhlYWRlci5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIENTUyBjbGFzc2VzLlxuICovXG5mdW5jdGlvbiBnZXRDbGFzc2VzVG9SZW1vdmUoKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKG9yZGVyVG9Dc3NDbGFzcy52YWx1ZXMoKSkuY29uY2F0KEhFQURFUl9BQ1RJT05fQ0xBU1MsIEhFQURFUl9DTEFTU19JTkRJQ0FUT1JfRElTQUJMRUQsIEhFQURFUl9TT1JUX0NMQVNTKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfY29sdW1uU29ydGluZyA9IHJlcXVpcmUoXCIuL2NvbHVtblNvcnRpbmdcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfY29sdW1uU29ydGluZy5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfY29sdW1uU29ydGluZy5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLkNvbHVtblNvcnRpbmcgPSBfY29sdW1uU29ydGluZy5Db2x1bW5Tb3J0aW5nO1xuZXhwb3J0cy5BUFBFTkRfQ09MVU1OX0NPTkZJR19TVFJBVEVHWSA9IF9jb2x1bW5Tb3J0aW5nLkFQUEVORF9DT0xVTU5fQ09ORklHX1NUUkFURUdZO1xuZXhwb3J0cy5SRVBMQUNFX0NPTFVNTl9DT05GSUdfU1RSQVRFR1kgPSBfY29sdW1uU29ydGluZy5SRVBMQUNFX0NPTFVNTl9DT05GSUdfU1RSQVRFR1k7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJvb3RDb21wYXJhdG9yID0gcm9vdENvbXBhcmF0b3I7XG52YXIgX3NvcnRTZXJ2aWNlID0gcmVxdWlyZShcIi4vc29ydFNlcnZpY2VcIik7XG4vKipcbiAqIFNvcnQgY29tcGFyYXRvciBoYW5kbGVkIGJ5IGNvbnZlbnRpb25hbCBzb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBzb3J0aW5nT3JkZXJzIFNvcnQgb3JkZXJzIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICogQHBhcmFtIHtBcnJheX0gY29sdW1uTWV0YXMgQ29sdW1uIG1ldGEgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gcm9vdENvbXBhcmF0b3Ioc29ydGluZ09yZGVycywgY29sdW1uTWV0YXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyb3dJbmRleFdpdGhWYWx1ZXMsIG5leHRSb3dJbmRleFdpdGhWYWx1ZXMpIHtcbiAgICAvLyBXZSBzb3J0IGFycmF5IG9mIGFycmF5cy4gU2luZ2xlIGFycmF5IGlzIGluIGZvcm0gW3Jvd0luZGV4LCAuLi52YWx1ZXNdLlxuICAgIC8vIFdlIGNvbXBhcmUganVzdCB2YWx1ZXMsIHN0b3JlZCBhdCBzZWNvbmQgaW5kZXggb2YgYXJyYXkuXG4gICAgY29uc3QgWywgLi4udmFsdWVzXSA9IHJvd0luZGV4V2l0aFZhbHVlcztcbiAgICBjb25zdCBbLCAuLi5uZXh0VmFsdWVzXSA9IG5leHRSb3dJbmRleFdpdGhWYWx1ZXM7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGdldENvbXBhcmVSZXN1bHQoY29sdW1uKSB7XG4gICAgICBjb25zdCBzb3J0aW5nT3JkZXIgPSBzb3J0aW5nT3JkZXJzW2NvbHVtbl07XG4gICAgICBjb25zdCBjb2x1bW5NZXRhID0gY29sdW1uTWV0YXNbY29sdW1uXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2NvbHVtbl07XG4gICAgICBjb25zdCBuZXh0VmFsdWUgPSBuZXh0VmFsdWVzW2NvbHVtbl07XG4gICAgICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IGNvbHVtbk1ldGEuY29sdW1uU29ydGluZztcbiAgICAgIGNvbnN0IGNvbXBhcmVGdW5jdGlvbkZhY3RvcnkgPSBwbHVnaW5TZXR0aW5ncy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5ID8gcGx1Z2luU2V0dGluZ3MuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSA6ICgwLCBfc29ydFNlcnZpY2UuZ2V0Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeSkoY29sdW1uTWV0YS50eXBlKTtcbiAgICAgIGNvbnN0IGNvbXBhcmVSZXN1bHQgPSBjb21wYXJlRnVuY3Rpb25GYWN0b3J5KHNvcnRpbmdPcmRlciwgY29sdW1uTWV0YSwgcGx1Z2luU2V0dGluZ3MpKHZhbHVlLCBuZXh0VmFsdWUpO1xuXG4gICAgICAvLyBESUZGIC0gTXVsdGlDb2x1bW5Tb3J0aW5nICYgQ29sdW1uU29ydGluZzogcmVtb3ZlZCBpdGVyYXRpb24gdGhyb3VnaCBuZXh0IHNvcnRlZCBjb2x1bW5zLlxuXG4gICAgICByZXR1cm4gY29tcGFyZVJlc3VsdDtcbiAgICB9KDApO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5ID0gY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTtcbnZhciBfc29ydFNlcnZpY2UgPSByZXF1aXJlKFwiLi4vc29ydFNlcnZpY2VcIik7XG52YXIgX2RlZmF1bHQgPSByZXF1aXJlKFwiLi4vc29ydEZ1bmN0aW9uL2RlZmF1bHRcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG4vKipcbiAqIENoZWNrYm94IHNvcnRpbmcgY29tcGFyZSBmdW5jdGlvbiBmYWN0b3J5LiBNZXRob2QgZ2V0IGFzIHBhcmFtZXRlcnMgYHNvcnRPcmRlcmAgYW5kIGBjb2x1bW5NZXRhYCBhbmQgcmV0dXJuIGNvbXBhcmUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvcnRPcmRlciBTb3J0IG9yZGVyIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbHVtbk1ldGEgQ29sdW1uIG1ldGEgb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IGNvbHVtblBsdWdpblNldHRpbmdzIFBsdWdpbiBzZXR0aW5ncyBmb3IgdGhlIGNvbHVtbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIGNvbXBhcmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVGdW5jdGlvbkZhY3Rvcnkoc29ydE9yZGVyLCBjb2x1bW5NZXRhLCBjb2x1bW5QbHVnaW5TZXR0aW5ncykge1xuICBjb25zdCBjaGVja2VkVGVtcGxhdGUgPSBjb2x1bW5NZXRhLmNoZWNrZWRUZW1wbGF0ZTtcbiAgY29uc3QgdW5jaGVja2VkVGVtcGxhdGUgPSBjb2x1bW5NZXRhLnVuY2hlY2tlZFRlbXBsYXRlO1xuICBjb25zdCB7XG4gICAgc29ydEVtcHR5Q2VsbHNcbiAgfSA9IGNvbHVtblBsdWdpblNldHRpbmdzO1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBuZXh0VmFsdWUpIHtcbiAgICBjb25zdCBpc0VtcHR5VmFsdWUgPSAoMCwgX21peGVkLmlzRW1wdHkpKHZhbHVlKTtcbiAgICBjb25zdCBpc0VtcHR5TmV4dFZhbHVlID0gKDAsIF9taXhlZC5pc0VtcHR5KShuZXh0VmFsdWUpO1xuICAgIGNvbnN0IHVuaWZpZWRWYWx1ZSA9IGlzRW1wdHlWYWx1ZSA/IHVuY2hlY2tlZFRlbXBsYXRlIDogdmFsdWU7XG4gICAgY29uc3QgdW5pZmllZE5leHRWYWx1ZSA9IGlzRW1wdHlOZXh0VmFsdWUgPyB1bmNoZWNrZWRUZW1wbGF0ZSA6IG5leHRWYWx1ZTtcbiAgICBjb25zdCBpc1ZhbHVlRnJvbVRlbXBsYXRlID0gdW5pZmllZFZhbHVlID09PSB1bmNoZWNrZWRUZW1wbGF0ZSB8fCB1bmlmaWVkVmFsdWUgPT09IGNoZWNrZWRUZW1wbGF0ZTtcbiAgICBjb25zdCBpc05leHRWYWx1ZUZyb21UZW1wbGF0ZSA9IHVuaWZpZWROZXh0VmFsdWUgPT09IHVuY2hlY2tlZFRlbXBsYXRlIHx8IHVuaWZpZWROZXh0VmFsdWUgPT09IGNoZWNrZWRUZW1wbGF0ZTtcblxuICAgIC8vIEFzIGFuIGVtcHR5IGNlbGwgd2UgcmVjb2duaXplIGNlbGxzIHdpdGggdW5kZWZpbmVkLCBudWxsIGFuZCAnJyB2YWx1ZXMuXG4gICAgaWYgKHNvcnRFbXB0eUNlbGxzID09PSBmYWxzZSkge1xuICAgICAgaWYgKGlzRW1wdHlWYWx1ZSAmJiBpc0VtcHR5TmV4dFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0VtcHR5VmFsdWUgPT09IGZhbHNlICYmIGlzRW1wdHlOZXh0VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDFzdCB2YWx1ZSA9PT0gI0JBRF9WQUxVRSNcbiAgICBpZiAoaXNWYWx1ZUZyb21UZW1wbGF0ZSA9PT0gZmFsc2UgJiYgaXNOZXh0VmFsdWVGcm9tVGVtcGxhdGUpIHtcbiAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2MnID8gX3NvcnRTZXJ2aWNlLkZJUlNUX0JFRk9SRV9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQUZURVJfU0VDT05EO1xuICAgIH1cblxuICAgIC8vIDJuZCB2YWx1ZSA9PT0gI0JBRF9WQUxVRSNcbiAgICBpZiAoaXNWYWx1ZUZyb21UZW1wbGF0ZSAmJiBpc05leHRWYWx1ZUZyb21UZW1wbGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2MnID8gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EO1xuICAgIH1cblxuICAgIC8vIDFzdCB2YWx1ZSA9PT0gI0JBRF9WQUxVRSMgJiYgMm5kIHZhbHVlID09PSAjQkFEX1ZBTFVFI1xuICAgIGlmIChpc1ZhbHVlRnJvbVRlbXBsYXRlID09PSBmYWxzZSAmJiBpc05leHRWYWx1ZUZyb21UZW1wbGF0ZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIFNvcnRpbmcgYnkgdmFsdWVzIChub3QganVzdCBieSB2aXN1YWwgcmVwcmVzZW50YXRpb24pLlxuICAgICAgcmV0dXJuICgwLCBfZGVmYXVsdC5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KShzb3J0T3JkZXIsIGNvbHVtbk1ldGEsIGNvbHVtblBsdWdpblNldHRpbmdzKSh2YWx1ZSwgbmV4dFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHVuaWZpZWRWYWx1ZSA9PT0gdW5jaGVja2VkVGVtcGxhdGUgJiYgdW5pZmllZE5leHRWYWx1ZSA9PT0gY2hlY2tlZFRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EIDogX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICB9XG4gICAgaWYgKHVuaWZpZWRWYWx1ZSA9PT0gY2hlY2tlZFRlbXBsYXRlICYmIHVuaWZpZWROZXh0VmFsdWUgPT09IHVuY2hlY2tlZFRlbXBsYXRlKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgfTtcbn1cbmNvbnN0IENPTFVNTl9EQVRBX1RZUEUgPSBleHBvcnRzLkNPTFVNTl9EQVRBX1RZUEUgPSAnY2hlY2tib3gnOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5ID0gY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG4vKipcbiAqIERhdGUgc29ydGluZyBjb21wYXJlIGZ1bmN0aW9uIGZhY3RvcnkuIE1ldGhvZCBnZXQgYXMgcGFyYW1ldGVycyBgc29ydE9yZGVyYCBhbmQgYGNvbHVtbk1ldGFgIGFuZCByZXR1cm4gY29tcGFyZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc29ydE9yZGVyIFNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZykuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sdW1uTWV0YSBDb2x1bW4gbWV0YSBvYmplY3QuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sdW1uUGx1Z2luU2V0dGluZ3MgUGx1Z2luIHNldHRpbmdzIGZvciB0aGUgY29sdW1uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgY29tcGFyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUZ1bmN0aW9uRmFjdG9yeShzb3J0T3JkZXIsIGNvbHVtbk1ldGEsIGNvbHVtblBsdWdpblNldHRpbmdzKSB7XG4gIHJldHVybiAoMCwgX3V0aWxzLmNyZWF0ZURhdGVUaW1lQ29tcGFyZUZ1bmN0aW9uKShzb3J0T3JkZXIsIGNvbHVtbk1ldGEuZGF0ZUZvcm1hdCwgY29sdW1uUGx1Z2luU2V0dGluZ3MpO1xufVxuY29uc3QgQ09MVU1OX0RBVEFfVFlQRSA9IGV4cG9ydHMuQ09MVU1OX0RBVEFfVFlQRSA9ICdkYXRlJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSA9IGNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX3NvcnRTZXJ2aWNlID0gcmVxdWlyZShcIi4uL3NvcnRTZXJ2aWNlXCIpO1xuLyoqXG4gKiBEZWZhdWx0IHNvcnRpbmcgY29tcGFyZSBmdW5jdGlvbiBmYWN0b3J5LiBNZXRob2QgZ2V0IGFzIHBhcmFtZXRlcnMgYHNvcnRPcmRlcmAgYW5kIGBjb2x1bW5NZXRhYCBhbmQgcmV0dXJuIGNvbXBhcmUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvcnRPcmRlciBTb3J0IG9yZGVyIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbHVtbk1ldGEgQ29sdW1uIG1ldGEgb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IGNvbHVtblBsdWdpblNldHRpbmdzIFBsdWdpbiBzZXR0aW5ncyBmb3IgdGhlIGNvbHVtbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gVGhlIGNvbXBhcmUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVGdW5jdGlvbkZhY3Rvcnkoc29ydE9yZGVyLCBjb2x1bW5NZXRhLCBjb2x1bW5QbHVnaW5TZXR0aW5ncykge1xuICBjb25zdCBsb2NhbGUgPSBjb2x1bW5NZXRhLmxvY2FsZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgbmV4dFZhbHVlKSB7XG4gICAgY29uc3Qge1xuICAgICAgc29ydEVtcHR5Q2VsbHNcbiAgICB9ID0gY29sdW1uUGx1Z2luU2V0dGluZ3M7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9Mb2NhbGVMb3dlckNhc2UobG9jYWxlKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBuZXh0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuZXh0VmFsdWUgPSBuZXh0VmFsdWUudG9Mb2NhbGVMb3dlckNhc2UobG9jYWxlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSBuZXh0VmFsdWUpIHtcbiAgICAgIHJldHVybiBfc29ydFNlcnZpY2UuRE9fTk9UX1NXQVA7XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzRW1wdHkpKHZhbHVlKSkge1xuICAgICAgaWYgKCgwLCBfbWl4ZWQuaXNFbXB0eSkobmV4dFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkRPX05PVF9TV0FQO1xuICAgICAgfVxuXG4gICAgICAvLyBKdXN0IGZpc3QgdmFsdWUgaXMgZW1wdHkgYW5kIGBzb3J0RW1wdHlDZWxsc2Agb3B0aW9uIHdhcyBzZXRcbiAgICAgIGlmIChzb3J0RW1wdHlDZWxscykge1xuICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EIDogX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfc29ydFNlcnZpY2UuRklSU1RfQUZURVJfU0VDT05EO1xuICAgIH1cbiAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KShuZXh0VmFsdWUpKSB7XG4gICAgICAvLyBKdXN0IHNlY29uZCB2YWx1ZSBpcyBlbXB0eSBhbmQgYHNvcnRFbXB0eUNlbGxzYCBvcHRpb24gd2FzIHNldFxuICAgICAgaWYgKHNvcnRFbXB0eUNlbGxzKSB7XG4gICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2MnID8gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EO1xuICAgIH1cbiAgICBpZiAoaXNOYU4odmFsdWUpICYmICFpc05hTihuZXh0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9IGVsc2UgaWYgKCFpc05hTih2YWx1ZSkgJiYgaXNOYU4obmV4dFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzYycgPyBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQ7XG4gICAgfSBlbHNlIGlmICghKGlzTmFOKHZhbHVlKSB8fCBpc05hTihuZXh0VmFsdWUpKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgIG5leHRWYWx1ZSA9IHBhcnNlRmxvYXQobmV4dFZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgbmV4dFZhbHVlKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EIDogX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICB9XG4gICAgaWYgKHZhbHVlID4gbmV4dFZhbHVlKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgfTtcbn1cbmNvbnN0IENPTFVNTl9EQVRBX1RZUEUgPSBleHBvcnRzLkNPTFVNTl9EQVRBX1RZUEUgPSAnZGVmYXVsdCc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkgPSBjb21wYXJlRnVuY3Rpb25GYWN0b3J5O1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9zb3J0U2VydmljZSA9IHJlcXVpcmUoXCIuLi9zb3J0U2VydmljZVwiKTtcbi8qKlxuICogTnVtZXJpYyBzb3J0aW5nIGNvbXBhcmUgZnVuY3Rpb24gZmFjdG9yeS4gTWV0aG9kIGdldCBhcyBwYXJhbWV0ZXJzIGBzb3J0T3JkZXJgIGFuZCBgY29sdW1uTWV0YWAgYW5kIHJldHVybiBjb21wYXJlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0T3JkZXIgU29ydCBvcmRlciAoYGFzY2AgZm9yIGFzY2VuZGluZywgYGRlc2NgIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5NZXRhIENvbHVtbiBtZXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5QbHVnaW5TZXR0aW5ncyBQbHVnaW4gc2V0dGluZ3MgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBjb21wYXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb25GYWN0b3J5KHNvcnRPcmRlciwgY29sdW1uTWV0YSwgY29sdW1uUGx1Z2luU2V0dGluZ3MpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSwgbmV4dFZhbHVlKSB7XG4gICAgY29uc3QgcGFyc2VkRmlyc3RWYWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIGNvbnN0IHBhcnNlZFNlY29uZFZhbHVlID0gcGFyc2VGbG9hdChuZXh0VmFsdWUpO1xuICAgIGNvbnN0IHtcbiAgICAgIHNvcnRFbXB0eUNlbGxzXG4gICAgfSA9IGNvbHVtblBsdWdpblNldHRpbmdzO1xuXG4gICAgLy8gV2F0Y2ggb3V0IHdoZW4gY2hhbmdpbmcgdGhpcyBwYXJ0IG9mIGNvZGUhIENoZWNrIGJlbG93IHJldHVybnMgMCAoYXMgZXhwZWN0ZWQpIHdoZW4gY29tcGFyaW5nIGVtcHR5IHN0cmluZywgbnVsbCwgdW5kZWZpbmVkXG4gICAgaWYgKHBhcnNlZEZpcnN0VmFsdWUgPT09IHBhcnNlZFNlY29uZFZhbHVlIHx8IGlzTmFOKHBhcnNlZEZpcnN0VmFsdWUpICYmIGlzTmFOKHBhcnNlZFNlY29uZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgICB9XG4gICAgaWYgKHNvcnRFbXB0eUNlbGxzKSB7XG4gICAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzYycgPyBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQ7XG4gICAgICB9XG4gICAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KShuZXh0VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2MnID8gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9CRUZPUkVfU0VDT05EO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNOYU4ocGFyc2VkRmlyc3RWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBfc29ydFNlcnZpY2UuRklSU1RfQUZURVJfU0VDT05EO1xuICAgIH1cbiAgICBpZiAoaXNOYU4ocGFyc2VkU2Vjb25kVmFsdWUpKSB7XG4gICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkZJUlNUX0JFRk9SRV9TRUNPTkQ7XG4gICAgfVxuICAgIGlmIChwYXJzZWRGaXJzdFZhbHVlIDwgcGFyc2VkU2Vjb25kVmFsdWUpIHtcbiAgICAgIHJldHVybiBzb3J0T3JkZXIgPT09ICdhc2MnID8gX3NvcnRTZXJ2aWNlLkZJUlNUX0JFRk9SRV9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQUZURVJfU0VDT05EO1xuICAgIH0gZWxzZSBpZiAocGFyc2VkRmlyc3RWYWx1ZSA+IHBhcnNlZFNlY29uZFZhbHVlKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgfTtcbn1cbmNvbnN0IENPTFVNTl9EQVRBX1RZUEUgPSBleHBvcnRzLkNPTFVNTl9EQVRBX1RZUEUgPSAnbnVtZXJpYyc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkgPSBjb21wYXJlRnVuY3Rpb25GYWN0b3J5O1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbi8qKlxuICogRGF0ZSBzb3J0aW5nIGNvbXBhcmUgZnVuY3Rpb24gZmFjdG9yeS4gTWV0aG9kIGdldCBhcyBwYXJhbWV0ZXJzIGBzb3J0T3JkZXJgIGFuZCBgY29sdW1uTWV0YWAgYW5kIHJldHVybiBjb21wYXJlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3J0T3JkZXIgU29ydCBvcmRlciAoYGFzY2AgZm9yIGFzY2VuZGluZywgYGRlc2NgIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5NZXRhIENvbHVtbiBtZXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5QbHVnaW5TZXR0aW5ncyBQbHVnaW4gc2V0dGluZ3MgZm9yIHRoZSBjb2x1bW4uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFRoZSBjb21wYXJlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb21wYXJlRnVuY3Rpb25GYWN0b3J5KHNvcnRPcmRlciwgY29sdW1uTWV0YSwgY29sdW1uUGx1Z2luU2V0dGluZ3MpIHtcbiAgcmV0dXJuICgwLCBfdXRpbHMuY3JlYXRlRGF0ZVRpbWVDb21wYXJlRnVuY3Rpb24pKHNvcnRPcmRlciwgY29sdW1uTWV0YS50aW1lRm9ybWF0LCBjb2x1bW5QbHVnaW5TZXR0aW5ncyk7XG59XG5jb25zdCBDT0xVTU5fREFUQV9UWVBFID0gZXhwb3J0cy5DT0xVTU5fREFUQV9UWVBFID0gJ3RpbWUnOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5zb3J0ID0gc29ydDtcbnZhciBfcmVnaXN0cnkgPSByZXF1aXJlKFwiLi9yZWdpc3RyeVwiKTtcbmNvbnN0IERPX05PVF9TV0FQID0gZXhwb3J0cy5ET19OT1RfU1dBUCA9IDA7XG5jb25zdCBGSVJTVF9CRUZPUkVfU0VDT05EID0gZXhwb3J0cy5GSVJTVF9CRUZPUkVfU0VDT05EID0gLTE7XG5jb25zdCBGSVJTVF9BRlRFUl9TRUNPTkQgPSBleHBvcnRzLkZJUlNUX0FGVEVSX1NFQ09ORCA9IDE7XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gaW5kZXhlc1dpdGhEYXRhIFRoZSBkYXRhIHRvIHNvcnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9vdENvbXBhcmF0b3JJZCBUaGUgY29tcGFyYXRvciBsb2dpYyB0byB1c2UuXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzRm9yUm9vdENvbXBhcmF0b3IgQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNvcnQoaW5kZXhlc1dpdGhEYXRhLCByb290Q29tcGFyYXRvcklkKSB7XG4gIGNvbnN0IHJvb3RDb21wYXJhdG9yID0gKDAsIF9yZWdpc3RyeS5nZXRSb290Q29tcGFyYXRvcikocm9vdENvbXBhcmF0b3JJZCk7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzRm9yUm9vdENvbXBhcmF0b3IgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NGb3JSb290Q29tcGFyYXRvcltfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cbiAgaW5kZXhlc1dpdGhEYXRhLnNvcnQocm9vdENvbXBhcmF0b3IoLi4uYXJnc0ZvclJvb3RDb21wYXJhdG9yKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vcmVnaXN0cnlcIik7XG5leHBvcnRzLnJlZ2lzdGVyUm9vdENvbXBhcmF0b3IgPSBfcmVnaXN0cnkucmVnaXN0ZXJSb290Q29tcGFyYXRvcjtcbmV4cG9ydHMuZ2V0Um9vdENvbXBhcmF0b3IgPSBfcmVnaXN0cnkuZ2V0Um9vdENvbXBhcmF0b3I7XG5leHBvcnRzLmdldENvbXBhcmVGdW5jdGlvbkZhY3RvcnkgPSBfcmVnaXN0cnkuZ2V0Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeTtcbnZhciBfZW5naW5lID0gcmVxdWlyZShcIi4vZW5naW5lXCIpO1xuZXhwb3J0cy5GSVJTVF9BRlRFUl9TRUNPTkQgPSBfZW5naW5lLkZJUlNUX0FGVEVSX1NFQ09ORDtcbmV4cG9ydHMuRklSU1RfQkVGT1JFX1NFQ09ORCA9IF9lbmdpbmUuRklSU1RfQkVGT1JFX1NFQ09ORDtcbmV4cG9ydHMuRE9fTk9UX1NXQVAgPSBfZW5naW5lLkRPX05PVF9TV0FQO1xuZXhwb3J0cy5zb3J0ID0gX2VuZ2luZS5zb3J0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRDb21wYXJlRnVuY3Rpb25GYWN0b3J5ID0gZ2V0Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeTtcbnZhciBfZGVmYXVsdCA9IHJlcXVpcmUoXCIuLi9zb3J0RnVuY3Rpb24vZGVmYXVsdFwiKTtcbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuLi9zb3J0RnVuY3Rpb24vbnVtZXJpY1wiKTtcbnZhciBfY2hlY2tib3ggPSByZXF1aXJlKFwiLi4vc29ydEZ1bmN0aW9uL2NoZWNrYm94XCIpO1xudmFyIF9kYXRlID0gcmVxdWlyZShcIi4uL3NvcnRGdW5jdGlvbi9kYXRlXCIpO1xudmFyIF90aW1lID0gcmVxdWlyZShcIi4uL3NvcnRGdW5jdGlvbi90aW1lXCIpO1xudmFyIF9zdGF0aWNSZWdpc3RlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL3N0YXRpY1JlZ2lzdGVyXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCB7XG4gIHJlZ2lzdGVyOiByZWdpc3RlckNvbXBhcmVGdW5jdGlvbkZhY3RvcnksXG4gIGdldEl0ZW06IGdldEdsb2JhbGx5Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeSxcbiAgaGFzSXRlbTogaGFzR2xvYmFsbHlDb21wYXJlRnVuY3Rpb25GYWN0b3J5XG59ID0gKDAsIF9zdGF0aWNSZWdpc3Rlci5kZWZhdWx0KSgnc29ydGluZy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5Jyk7XG5jb25zdCB7XG4gIHJlZ2lzdGVyOiByZWdpc3RlclJvb3RDb21wYXJhdG9yLFxuICBnZXRJdGVtOiBnZXRSb290Q29tcGFyYXRvclxufSA9ICgwLCBfc3RhdGljUmVnaXN0ZXIuZGVmYXVsdCkoJ3NvcnRpbmcubWFpblNvcnRDb21wYXJhdG9yJyk7XG5cbi8qKlxuICogR2V0cyBzb3J0IGZ1bmN0aW9uIGZvciB0aGUgcGFydGljdWxhciBjb2x1bW4gYmFzaW5nIG9uIGl0J3MgZGF0YSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBkYXRhIHR5cGUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydHMuZ2V0Um9vdENvbXBhcmF0b3IgPSBnZXRSb290Q29tcGFyYXRvcjtcbmV4cG9ydHMucmVnaXN0ZXJSb290Q29tcGFyYXRvciA9IHJlZ2lzdGVyUm9vdENvbXBhcmF0b3I7XG5mdW5jdGlvbiBnZXRDb21wYXJlRnVuY3Rpb25GYWN0b3J5KHR5cGUpIHtcbiAgaWYgKGhhc0dsb2JhbGx5Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeSh0eXBlKSkge1xuICAgIHJldHVybiBnZXRHbG9iYWxseUNvbXBhcmVGdW5jdGlvbkZhY3RvcnkodHlwZSk7XG4gIH1cbiAgcmV0dXJuIGdldEdsb2JhbGx5Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeShfZGVmYXVsdC5DT0xVTU5fREFUQV9UWVBFKTtcbn1cbnJlZ2lzdGVyQ29tcGFyZUZ1bmN0aW9uRmFjdG9yeShfY2hlY2tib3guQ09MVU1OX0RBVEFfVFlQRSwgX2NoZWNrYm94LmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpO1xucmVnaXN0ZXJDb21wYXJlRnVuY3Rpb25GYWN0b3J5KF9kYXRlLkNPTFVNTl9EQVRBX1RZUEUsIF9kYXRlLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpO1xucmVnaXN0ZXJDb21wYXJlRnVuY3Rpb25GYWN0b3J5KF9kZWZhdWx0LkNPTFVNTl9EQVRBX1RZUEUsIF9kZWZhdWx0LmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpO1xucmVnaXN0ZXJDb21wYXJlRnVuY3Rpb25GYWN0b3J5KF9udW1lcmljLkNPTFVNTl9EQVRBX1RZUEUsIF9udW1lcmljLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpO1xucmVnaXN0ZXJDb21wYXJlRnVuY3Rpb25GYWN0b3J5KF90aW1lLkNPTFVNTl9EQVRBX1RZUEUsIF90aW1lLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5hcmVWYWxpZFNvcnRTdGF0ZXMgPSBhcmVWYWxpZFNvcnRTdGF0ZXM7XG5leHBvcnRzLmNyZWF0ZURhdGVUaW1lQ29tcGFyZUZ1bmN0aW9uID0gY3JlYXRlRGF0ZVRpbWVDb21wYXJlRnVuY3Rpb247XG5leHBvcnRzLmdldEhlYWRlclNwYW5FbGVtZW50ID0gZ2V0SGVhZGVyU3BhbkVsZW1lbnQ7XG5leHBvcnRzLmdldE5leHRTb3J0T3JkZXIgPSBnZXROZXh0U29ydE9yZGVyO1xuZXhwb3J0cy5pc0ZpcnN0TGV2ZWxDb2x1bW5IZWFkZXIgPSBpc0ZpcnN0TGV2ZWxDb2x1bW5IZWFkZXI7XG5leHBvcnRzLndhc0hlYWRlckNsaWNrZWRQcm9wZXJseSA9IHdhc0hlYWRlckNsaWNrZWRQcm9wZXJseTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnZhciBfbW9tZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9ldmVudFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfc29ydFNlcnZpY2UgPSByZXF1aXJlKFwiLi9zb3J0U2VydmljZVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBBU0NfU09SVF9TVEFURSA9IGV4cG9ydHMuQVNDX1NPUlRfU1RBVEUgPSAnYXNjJztcbmNvbnN0IERFU0NfU09SVF9TVEFURSA9IGV4cG9ydHMuREVTQ19TT1JUX1NUQVRFID0gJ2Rlc2MnO1xuY29uc3QgSEVBREVSX1NQQU5fQ0xBU1MgPSBleHBvcnRzLkhFQURFUl9TUEFOX0NMQVNTID0gJ2NvbEhlYWRlcic7XG5cbi8qKlxuICogR2V0IGlmIGNvbHVtbiBzdGF0ZSBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uU3RhdGUgUGFydGljdWxhciBjb2x1bW4gc3RhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbHVtblN0YXRlKGNvbHVtblN0YXRlKSB7XG4gIGlmICgoMCwgX29iamVjdC5pc09iamVjdCkoY29sdW1uU3RhdGUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB7XG4gICAgY29sdW1uLFxuICAgIHNvcnRPcmRlclxuICB9ID0gY29sdW1uU3RhdGU7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtbikgJiYgW0FTQ19TT1JUX1NUQVRFLCBERVNDX1NPUlRfU1RBVEVdLmluY2x1ZGVzKHNvcnRPcmRlcik7XG59XG5cbi8qKlxuICogR2V0IGlmIGFsbCBzb3J0ZWQgY29sdW1ucyBzdGF0ZXMgYXJlIHZhbGlkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHNvcnRTdGF0ZXMgVGhlIHNvcnQgc3RhdGUgY29sbGVjdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBhcmVWYWxpZFNvcnRTdGF0ZXMoc29ydFN0YXRlcykge1xuICBpZiAoc29ydFN0YXRlcy5zb21lKGNvbHVtblN0YXRlID0+IGlzVmFsaWRDb2x1bW5TdGF0ZShjb2x1bW5TdGF0ZSkgPT09IGZhbHNlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBzb3J0ZWRDb2x1bW5zID0gc29ydFN0YXRlcy5tYXAoX3JlZiA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGNvbHVtblxuICAgIH0gPSBfcmVmO1xuICAgIHJldHVybiBjb2x1bW47XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgb2NjdXJzIG9ubHkgb25jZS5cbiAgcmV0dXJuIG5ldyBTZXQoc29ydGVkQ29sdW1ucykuc2l6ZSA9PT0gc29ydGVkQ29sdW1ucy5sZW5ndGg7XG59XG5cbi8qKlxuICogR2V0IG5leHQgc29ydCBvcmRlciBmb3IgcGFydGljdWxhciBjb2x1bW4uIFRoZSBvcmRlciBzZXF1ZW5jZSBsb29rcyBhcyBmb2xsb3dzOiAnYXNjJyAtPiAnZGVzYycgLT4gdW5kZWZpbmVkIC0+ICdhc2MnLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gc29ydE9yZGVyIFNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBhbmQgdW5kZWZpbmVkIGZvciBub3Qgc29ydGVkKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBOZXh0IHNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZyBhbmQgdW5kZWZpbmVkIGZvciBub3Qgc29ydGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0TmV4dFNvcnRPcmRlcihzb3J0T3JkZXIpIHtcbiAgaWYgKHNvcnRPcmRlciA9PT0gREVTQ19TT1JUX1NUQVRFKSB7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gQVNDX1NPUlRfU1RBVEUpIHtcbiAgICByZXR1cm4gREVTQ19TT1JUX1NUQVRFO1xuICB9XG4gIHJldHVybiBBU0NfU09SVF9TVEFURTtcbn1cblxuLyoqXG4gKiBHZXQgYHNwYW5gIERPTSBlbGVtZW50IGluc2lkZSBgdGhgIERPTSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gVEggVGggSFRNTCBlbGVtZW50LlxuICogQHJldHVybnMge0VsZW1lbnQgfCBudWxsfVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJTcGFuRWxlbWVudChUSCkge1xuICBjb25zdCBoZWFkZXJTcGFuRWxlbWVudCA9IFRILnF1ZXJ5U2VsZWN0b3IoYC4ke0hFQURFUl9TUEFOX0NMQVNTfWApO1xuICByZXR1cm4gaGVhZGVyU3BhbkVsZW1lbnQ7XG59XG5cbi8qKlxuICpcbiAqIEdldCBpZiBoYW5kbGVkIGhlYWRlciBpcyBmaXJzdCBsZXZlbCBjb2x1bW4gaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7RWxlbWVudH0gVEggVGggSFRNTCBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmlyc3RMZXZlbENvbHVtbkhlYWRlcihjb2x1bW4sIFRIKSB7XG4gIGlmIChjb2x1bW4gPCAwIHx8ICFUSC5wYXJlbnROb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IFRScyA9IFRILnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuICBjb25zdCBoZWFkZXJMZXZlbCA9IEFycmF5LmZyb20oVFJzKS5pbmRleE9mKFRILnBhcmVudE5vZGUpIC0gVFJzLmxlbmd0aDtcbiAgaWYgKGhlYWRlckxldmVsICE9PSAtMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiAgR2V0IGlmIGhlYWRlciB3YXMgY2xpY2tlZCBwcm9wZXJseS4gQ2xpY2sgb24gY29sdW1uIGhlYWRlciBhbmQgTk9UIGRvbmUgYnkgcmlnaHQgY2xpY2sgcmV0dXJuIGB0cnVlYC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge0V2ZW50fSBjbGlja0V2ZW50IENsaWNrIGV2ZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHdhc0hlYWRlckNsaWNrZWRQcm9wZXJseShyb3csIGNvbHVtbiwgY2xpY2tFdmVudCkge1xuICByZXR1cm4gcm93ID09PSAtMSAmJiBjb2x1bW4gPj0gMCAmJiAoMCwgX2V2ZW50LmlzUmlnaHRDbGljaykoY2xpY2tFdmVudCkgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgZGF0ZSBvciB0aW1lIHNvcnRpbmcgY29tcGFyZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc29ydE9yZGVyIFNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZykuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IERhdGUgb3IgdGltZSBmb3JtYXQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29sdW1uUGx1Z2luU2V0dGluZ3MgUGx1Z2luIHNldHRpbmdzIGZvciB0aGUgY29sdW1uLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBUaGUgY29tcGFyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGF0ZVRpbWVDb21wYXJlRnVuY3Rpb24oc29ydE9yZGVyLCBmb3JtYXQsIGNvbHVtblBsdWdpblNldHRpbmdzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIG5leHRWYWx1ZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNvcnRFbXB0eUNlbGxzXG4gICAgfSA9IGNvbHVtblBsdWdpblNldHRpbmdzO1xuICAgIGlmICh2YWx1ZSA9PT0gbmV4dFZhbHVlKSB7XG4gICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkRPX05PVF9TV0FQO1xuICAgIH1cbiAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KSh2YWx1ZSkpIHtcbiAgICAgIGlmICgoMCwgX21peGVkLmlzRW1wdHkpKG5leHRWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgICAgIH1cblxuICAgICAgLy8gSnVzdCBmaXN0IHZhbHVlIGlzIGVtcHR5IGFuZCBgc29ydEVtcHR5Q2VsbHNgIG9wdGlvbiB3YXMgc2V0XG4gICAgICBpZiAoc29ydEVtcHR5Q2VsbHMpIHtcbiAgICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzYycgPyBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICB9XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNFbXB0eSkobmV4dFZhbHVlKSkge1xuICAgICAgLy8gSnVzdCBzZWNvbmQgdmFsdWUgaXMgZW1wdHkgYW5kIGBzb3J0RW1wdHlDZWxsc2Agb3B0aW9uIHdhcyBzZXRcbiAgICAgIGlmIChzb3J0RW1wdHlDZWxscykge1xuICAgICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgY29uc3QgZmlyc3REYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkodmFsdWUsIGZvcm1hdCk7XG4gICAgY29uc3QgbmV4dERhdGUgPSAoMCwgX21vbWVudC5kZWZhdWx0KShuZXh0VmFsdWUsIGZvcm1hdCk7XG4gICAgaWYgKCFmaXJzdERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gX3NvcnRTZXJ2aWNlLkZJUlNUX0FGVEVSX1NFQ09ORDtcbiAgICB9XG4gICAgaWYgKCFuZXh0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgaWYgKG5leHREYXRlLmlzQWZ0ZXIoZmlyc3REYXRlKSkge1xuICAgICAgcmV0dXJuIHNvcnRPcmRlciA9PT0gJ2FzYycgPyBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORCA6IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQ7XG4gICAgfVxuICAgIGlmIChuZXh0RGF0ZS5pc0JlZm9yZShmaXJzdERhdGUpKSB7XG4gICAgICByZXR1cm4gc29ydE9yZGVyID09PSAnYXNjJyA/IF9zb3J0U2VydmljZS5GSVJTVF9BRlRFUl9TRUNPTkQgOiBfc29ydFNlcnZpY2UuRklSU1RfQkVGT1JFX1NFQ09ORDtcbiAgICB9XG4gICAgcmV0dXJuIF9zb3J0U2VydmljZS5ET19OT1RfU1dBUDtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9lbmRwb2ludHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2VuZHBvaW50c1wiKSk7XG52YXIgX3RlbXBsYXRlTGl0ZXJhbFRhZyA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL3RlbXBsYXRlTGl0ZXJhbFRhZ1wiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnY29sdW1uU3VtbWFyeSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDIyMDtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEBwbHVnaW4gQ29sdW1uU3VtbWFyeVxuICogQGNsYXNzIENvbHVtblN1bW1hcnlcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBgQ29sdW1uU3VtbWFyeWAgcGx1Z2luIGxldHMgeW91IFtlYXNpbHkgc3VtbWFyaXplIHlvdXIgY29sdW1uc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCkuXG4gKlxuICogWW91IGNhbiB1c2UgdGhlIFtidWlsdC1pbiBzdW1tYXJ5IGZ1bmN0aW9uc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNidWlsdC1pbi1zdW1tYXJ5LWZ1bmN0aW9ucyksXG4gKiBvciBpbXBsZW1lbnQgYSBbY3VzdG9tIHN1bW1hcnkgZnVuY3Rpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjaW1wbGVtZW50LWEtY3VzdG9tLXN1bW1hcnktZnVuY3Rpb24pLlxuICpcbiAqIEZvciBlYWNoIGNvbHVtbiBzdW1tYXJ5LCB5b3UgY2FuIHNldCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAqXG4gKiB8IE9wdGlvbiB8IFJlcXVpcmVkIHwgVHlwZSB8IERlZmF1bHQgfCBEZXNjcmlwdGlvbiB8XG4gKiB8LS0tfC0tLXwtLS18LS0tfC0tLXxcbiAqIHwgYHNvdXJjZUNvbHVtbmAgfCBObyB8IE51bWJlciB8IFNhbWUgYXMgYGRlc3RpbmF0aW9uQ29sdW1uYCB8IFtTZWxlY3RzIGEgY29sdW1uIHRvIHN1bW1hcml6ZV0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTItc2VsZWN0LWNlbGxzLXRoYXQteW91LXdhbnQtdG8tc3VtbWFyaXplKSB8XG4gKiB8IGByYW5nZXNgIHwgTm8gfCBBcnJheSB8IC0gfCBbU2VsZWN0cyByYW5nZXMgb2Ygcm93cyB0byBzdW1tYXJpemVdKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLXN1bW1hcnkvY29sdW1uLXN1bW1hcnkubWQjc3RlcC0yLXNlbGVjdC1jZWxscy10aGF0LXlvdS13YW50LXRvLXN1bW1hcml6ZSkgfFxuICogfCBgdHlwZWAgfCBZZXMgfCBTdHJpbmcgfCAtIHwgW1NldHMgYSBzdW1tYXJ5IGZ1bmN0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI3N0ZXAtMy1jYWxjdWxhdGUteW91ci1zdW1tYXJ5KSB8XG4gKiB8IGBkZXN0aW5hdGlvblJvd2AgfCBZZXMgfCBOdW1iZXIgfCAtIHwgW1NldHMgdGhlIGRlc3RpbmF0aW9uIGNlbGwncyByb3cgY29vcmRpbmF0ZV0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTQtcHJvdmlkZS10aGUtZGVzdGluYXRpb24tY2VsbC1zLWNvb3JkaW5hdGVzKSB8XG4gKiB8IGBkZXN0aW5hdGlvbkNvbHVtbmAgfCBZZXMgfCBOdW1iZXIgfCAtIHwgW1NldHMgdGhlIGRlc3RpbmF0aW9uIGNlbGwncyBjb2x1bW4gY29vcmRpbmF0ZV0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTQtcHJvdmlkZS10aGUtZGVzdGluYXRpb24tY2VsbC1zLWNvb3JkaW5hdGVzKSB8XG4gKiB8IGBmb3JjZU51bWVyaWNgIHwgTm8gfCBCb29sZWFuIHwgYGZhbHNlYCB8IFtGb3JjZXMgdGhlIHN1bW1hcnkgdG8gdHJlYXQgbm9uLW51bWVyaWNzIGFzIG51bWVyaWNzXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI2ZvcmNlLW51bWVyaWMtdmFsdWVzKSB8XG4gKiB8IGByZXZlcnNlZFJvd0Nvb3Jkc2AgfCBObyB8IEJvb2xlYW4gfCBgZmFsc2VgIHwgW1JldmVyc2VzIHJvdyBjb29yZGluYXRlc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNzdGVwLTUtbWFrZS1yb29tLWZvci10aGUtZGVzdGluYXRpb24tY2VsbCkgfFxuICogfCBgc3VwcHJlc3NEYXRhVHlwZUVycm9yc2AgfCBObyB8IEJvb2xlYW4gfCBgdHJ1ZWAgfCBbU3VwcHJlc3NlcyBkYXRhIHR5cGUgZXJyb3JzXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI3Rocm93LWRhdGEtdHlwZS1lcnJvcnMpIHxcbiAqIHwgYHJlYWRPbmx5YCB8IE5vIHwgQm9vbGVhbiB8IGB0cnVlYCB8IE1ha2VzIHN1bW1hcnkgY2VsbCByZWFkLW9ubHkgfFxuICogfCBgcm91bmRGbG9hdGAgfCBObyB8IE51bWJlci88YnI+Qm9vbGVhbiB8IC0gfCBbUm91bmRzIHN1bW1hcnkgcmVzdWx0XShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1zdW1tYXJ5L2NvbHVtbi1zdW1tYXJ5Lm1kI3JvdW5kLWEtY29sdW1uLXN1bW1hcnktcmVzdWx0KSB8XG4gKiB8IGBjdXN0b21GdW5jdGlvbmAgfCBObyB8IEZ1bmN0aW9uIHwgLSB8IFtMZXRzIHlvdSBhZGQgYSBjdXN0b20gc3VtbWFyeSBmdW5jdGlvbl0oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4tc3VtbWFyeS9jb2x1bW4tc3VtbWFyeS5tZCNpbXBsZW1lbnQtYS1jdXN0b20tc3VtbWFyeS1mdW5jdGlvbikgfFxuICpcbiAqIEBleGFtcGxlXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICogICBkYXRhOiBnZXREYXRhKCksXG4gKiAgIGNvbEhlYWRlcnM6IHRydWUsXG4gKiAgIHJvd0hlYWRlcnM6IHRydWUsXG4gKiAgIGNvbHVtblN1bW1hcnk6IFtcbiAqICAgICB7XG4gKiAgICAgICB0eXBlOiAnbWluJyxcbiAqICAgICAgIGRlc3RpbmF0aW9uUm93OiA0LFxuICogICAgICAgZGVzdGluYXRpb25Db2x1bW46IDEsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICB0eXBlOiAnbWF4JyxcbiAqICAgICAgIGRlc3RpbmF0aW9uUm93OiAwLFxuICogICAgICAgZGVzdGluYXRpb25Db2x1bW46IDMsXG4gKiAgICAgICByZXZlcnNlZFJvd0Nvb3JkczogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgdHlwZTogJ3N1bScsXG4gKiAgICAgICBkZXN0aW5hdGlvblJvdzogNCxcbiAqICAgICAgIGRlc3RpbmF0aW9uQ29sdW1uOiA1LFxuICogICAgICAgZm9yY2VOdW1lcmljOiB0cnVlXG4gKiAgICAgfVxuICogICBdXG4gKiB9KTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBkYXRhPXtnZXREYXRhKCl9XG4gKiAgIGNvbEhlYWRlcnM9e3RydWV9XG4gKiAgIHJvd0hlYWRlcnM9e3RydWV9XG4gKiAgIGNvbHVtblN1bW1hcnk9e1tcbiAqICAgICB7XG4gKiAgICAgICB0eXBlOiAnbWluJyxcbiAqICAgICAgIGRlc3RpbmF0aW9uUm93OiA0LFxuICogICAgICAgZGVzdGluYXRpb25Db2x1bW46IDEsXG4gKiAgICAgfSxcbiAqICAgICB7XG4gKiAgICAgICB0eXBlOiAnbWF4JyxcbiAqICAgICAgIGRlc3RpbmF0aW9uUm93OiAwLFxuICogICAgICAgZGVzdGluYXRpb25Db2x1bW46IDMsXG4gKiAgICAgICByZXZlcnNlZFJvd0Nvb3JkczogdHJ1ZVxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgdHlwZTogJ3N1bScsXG4gKiAgICAgICBkZXN0aW5hdGlvblJvdzogNCxcbiAqICAgICAgIGRlc3RpbmF0aW9uQ29sdW1uOiA1LFxuICogICAgICAgZm9yY2VOdW1lcmljOiB0cnVlXG4gKiAgICAgfVxuICogICBdfVxuICogLz5cbiAqIGBgYFxuICogOjo6XG4gKi9cbnZhciBfQ29sdW1uU3VtbWFyeV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgQ29sdW1uU3VtbWFyeSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIGBhZnRlckluaXRgIGhvb2sgY2FsbGJhY2suXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Db2x1bW5TdW1tYXJ5X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgRW5kcG9pbnRzIGNsYXNzIGluc3RhbmNlLiBVc2VkIHRvIG1ha2UgYWxsIGVuZHBvaW50LXJlbGF0ZWQgb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bGx8RW5kcG9pbnRzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVuZHBvaW50c1wiLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIENvbHVtblN1bW1hcnkjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgdGhpcy5lbmRwb2ludHMgPSBuZXcgX2VuZHBvaW50cy5kZWZhdWx0KHRoaXMsIHRoaXMuc2V0dGluZ3MpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJJbml0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbHVtblN1bW1hcnlfYnJhbmQsIF90aGlzLCBfb25BZnRlckluaXQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Db2x1bW5TdW1tYXJ5X2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJDaGFuZ2UpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJVcGRhdGVTZXR0aW5ncycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbHVtblN1bW1hcnlfYnJhbmQsIF90aGlzLCBfb25BZnRlclVwZGF0ZVNldHRpbmdzKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNyZWF0ZVJvdycsIChpbmRleCwgYW1vdW50LCBzb3VyY2UpID0+IHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCdpbnNlcnRfcm93JywgaW5kZXgsIGFtb3VudCwgbnVsbCwgc291cmNlKSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbWF4LWxlblxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlQ3JlYXRlQ29sJywgKGluZGV4LCBhbW91bnQsIHNvdXJjZSkgPT4gdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oJ2luc2VydF9jb2wnLCBpbmRleCwgYW1vdW50LCBudWxsLCBzb3VyY2UpKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVSZW1vdmVSb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigncmVtb3ZlX3JvdycsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlUmVtb3ZlQ29sJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oJ3JlbW92ZV9jb2wnLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ3JlYXRlUm93JywgKGluZGV4LCBhbW91bnQsIHNvdXJjZSkgPT4gdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbignaW5zZXJ0X3JvdycsIGluZGV4LCBhbW91bnQsIG51bGwsIHNvdXJjZSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ3JlYXRlQ29sJywgKGluZGV4LCBhbW91bnQsIHNvdXJjZSkgPT4gdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbignaW5zZXJ0X2NvbCcsIGluZGV4LCBhbW91bnQsIG51bGwsIHNvdXJjZSkpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyUmVtb3ZlUm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigncmVtb3ZlX3JvdycsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSZW1vdmVDb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCdyZW1vdmVfY29sJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclJvd01vdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcbiAgICAgICAgYXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Db2x1bW5TdW1tYXJ5X2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJSb3dNb3ZlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmVuZHBvaW50cyA9IG51bGw7XG4gICAgdGhpcy5zZXR0aW5ncyA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50RW5kcG9pbnQgPSBudWxsO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBpcyBpbnZva2VkIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICAgKiAgLSBbYGNvbHVtblN1bW1hcnlgXShAL2FwaS9vcHRpb25zLm1kI2NvbHVtbnN1bW1hcnkpXG4gICAqL1xuICB1cGRhdGVQbHVnaW4oKSB7XG4gICAgdGhpcy5kaXNhYmxlUGx1Z2luKCk7XG4gICAgdGhpcy5lbmFibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBtYXRoIGZvciBhIHNpbmdsZSBlbmRwb2ludC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGVuZHBvaW50IENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlbmRwb2ludC5cbiAgICovXG4gIGNhbGN1bGF0ZShlbmRwb2ludCkge1xuICAgIHN3aXRjaCAoZW5kcG9pbnQudHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdzdW0nOlxuICAgICAgICBlbmRwb2ludC5yZXN1bHQgPSB0aGlzLmNhbGN1bGF0ZVN1bShlbmRwb2ludCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgZW5kcG9pbnQucmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVNaW5NYXgoZW5kcG9pbnQsIGVuZHBvaW50LnR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgIGVuZHBvaW50LnJlc3VsdCA9IHRoaXMuY2FsY3VsYXRlTWluTWF4KGVuZHBvaW50LCBlbmRwb2ludC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgIGVuZHBvaW50LnJlc3VsdCA9IHRoaXMuY291bnRFbnRyaWVzKGVuZHBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhdmVyYWdlJzpcbiAgICAgICAgZW5kcG9pbnQucmVzdWx0ID0gdGhpcy5jYWxjdWxhdGVBdmVyYWdlKGVuZHBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjdXN0b20nOlxuICAgICAgICBlbmRwb2ludC5yZXN1bHQgPSBlbmRwb2ludC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsIGVuZHBvaW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBzdW0gb2YgdGhlIHZhbHVlcyBjb250YWluZWQgaW4gcmFuZ2VzIHByb3ZpZGVkIGluIHRoZSBwbHVnaW4gY29uZmlnLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgQ29udGFpbnMgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBTdW0gZm9yIHRoZSBzZWxlY3RlZCByYW5nZS5cbiAgICovXG4gIGNhbGN1bGF0ZVN1bShlbmRwb2ludCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKGVuZHBvaW50LnJhbmdlcywgcmFuZ2UgPT4ge1xuICAgICAgc3VtICs9IHRoaXMuZ2V0UGFydGlhbFN1bShyYW5nZSwgZW5kcG9pbnQuc291cmNlQ29sdW1uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3VtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcGFydGlhbCBzdW0gb2YgdmFsdWVzIGZyb20gYSBzaW5nbGUgcm93IHJhbmdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByb3dSYW5nZSBSYW5nZSBmb3IgdGhlIHN1bS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBDb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBwYXJ0aWFsIHN1bS5cbiAgICovXG4gIGdldFBhcnRpYWxTdW0ocm93UmFuZ2UsIGNvbCkge1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBpID0gcm93UmFuZ2VbMV0gfHwgcm93UmFuZ2VbMF07XG4gICAgbGV0IGNlbGxWYWx1ZSA9IG51bGw7XG4gICAgbGV0IGJpZ2dlc3REZWNpbWFsUGxhY2VzQ291bnQgPSAwO1xuICAgIGRvIHtcbiAgICAgIGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGksIGNvbCk7XG4gICAgICBjZWxsVmFsdWUgPSAoMCwgX3V0aWxzLmlzTnVsbGlzaE9yTmFOKShjZWxsVmFsdWUpID8gbnVsbCA6IGNlbGxWYWx1ZTtcbiAgICAgIGlmIChjZWxsVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IChgJHtjZWxsVmFsdWV9YC5zcGxpdCgnLicpWzFdIHx8IFtdKS5sZW5ndGggfHwgMTtcbiAgICAgICAgaWYgKGRlY2ltYWxQbGFjZXMgPiBiaWdnZXN0RGVjaW1hbFBsYWNlc0NvdW50KSB7XG4gICAgICAgICAgYmlnZ2VzdERlY2ltYWxQbGFjZXNDb3VudCA9IGRlY2ltYWxQbGFjZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN1bSArPSBjZWxsVmFsdWUgfHwgMDtcbiAgICAgIGkgLT0gMTtcbiAgICB9IHdoaWxlIChpID49IHJvd1JhbmdlWzBdKTtcblxuICAgIC8vIFdvcmthcm91bmQgZm9yIGUuZy4gODAyLjIgKyAxLjEgPSA4MDMuMzAwMDAwMDAwMDAwMVxuICAgIHJldHVybiBNYXRoLnJvdW5kKHN1bSAqIDEwICoqIGJpZ2dlc3REZWNpbWFsUGxhY2VzQ291bnQpIC8gMTAgKiogYmlnZ2VzdERlY2ltYWxQbGFjZXNDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtaW5pbWFsIHZhbHVlIGZvciB0aGUgc2VsZWN0ZWQgcmFuZ2VzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgQ29udGFpbnMgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBgJ21pbidgIG9yIGAnbWF4J2AuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IE1pbiBvciBNYXggdmFsdWUuXG4gICAqL1xuICBjYWxjdWxhdGVNaW5NYXgoZW5kcG9pbnQsIHR5cGUpIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShlbmRwb2ludC5yYW5nZXMsIHJhbmdlID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxSZXN1bHQgPSB0aGlzLmdldFBhcnRpYWxNaW5NYXgocmFuZ2UsIGVuZHBvaW50LnNvdXJjZUNvbHVtbiwgdHlwZSk7XG4gICAgICBpZiAocmVzdWx0ID09PSBudWxsICYmIHBhcnRpYWxSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0ID0gcGFydGlhbFJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJ0aWFsUmVzdWx0ICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1pbihyZXN1bHQsIHBhcnRpYWxSZXN1bHQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWF4KHJlc3VsdCwgcGFydGlhbFJlc3VsdCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gJ05vdCBlbm91Z2ggZGF0YScgOiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsIG1pbmltdW0gb2YgdGhlIHByb3ZpZGVkIHN1Yi1yYW5nZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gcm93UmFuZ2UgUmFuZ2UgZm9yIHRoZSBjYWxjdWxhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBDb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGAnbWluJ2Agb3IgYCdtYXgnYC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfSBNaW4gb3IgbWF4IHZhbHVlLlxuICAgKi9cbiAgZ2V0UGFydGlhbE1pbk1heChyb3dSYW5nZSwgY29sLCB0eXBlKSB7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgbGV0IGkgPSByb3dSYW5nZVsxXSB8fCByb3dSYW5nZVswXTtcbiAgICBsZXQgY2VsbFZhbHVlO1xuICAgIGRvIHtcbiAgICAgIGNlbGxWYWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKGksIGNvbCk7XG4gICAgICBjZWxsVmFsdWUgPSAoMCwgX3V0aWxzLmlzTnVsbGlzaE9yTmFOKShjZWxsVmFsdWUpID8gbnVsbCA6IGNlbGxWYWx1ZTtcbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0ID0gY2VsbFZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChjZWxsVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWluKHJlc3VsdCwgY2VsbFZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICByZXN1bHQgPSBNYXRoLm1heChyZXN1bHQsIGNlbGxWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgLT0gMTtcbiAgICB9IHdoaWxlIChpID49IHJvd1JhbmdlWzBdKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50cyBlbXB0eSBjZWxscyBpbiB0aGUgcHJvdmlkZWQgcm93IHJhbmdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByb3dSYW5nZSBSb3cgcmFuZ2UgZm9yIHRoZSBjYWxjdWxhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbCBDb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IEVtcHR5IGNlbGxzIGNvdW50LlxuICAgKi9cbiAgY291bnRFbXB0eShyb3dSYW5nZSwgY29sKSB7XG4gICAgbGV0IGNlbGxWYWx1ZTtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgbGV0IGkgPSByb3dSYW5nZVsxXSB8fCByb3dSYW5nZVswXTtcbiAgICBkbyB7XG4gICAgICBjZWxsVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShpLCBjb2wpO1xuICAgICAgY2VsbFZhbHVlID0gKDAsIF91dGlscy5pc051bGxpc2hPck5hTikoY2VsbFZhbHVlKSA/IG51bGwgOiBjZWxsVmFsdWU7XG4gICAgICBpZiAoY2VsbFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvdW50ZXIgKz0gMTtcbiAgICAgIH1cbiAgICAgIGkgLT0gMTtcbiAgICB9IHdoaWxlIChpID49IHJvd1JhbmdlWzBdKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgbm9uLWVtcHR5IGNlbGxzIGluIHRoZSBwcm92aWRlZCByb3cgcmFuZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbmRwb2ludCBDb250YWlucyB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IEVudHJ5IGNvdW50LlxuICAgKi9cbiAgY291bnRFbnRyaWVzKGVuZHBvaW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgY29uc3QgcmFuZ2VzID0gZW5kcG9pbnQucmFuZ2VzO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKHJhbmdlcywgcmFuZ2UgPT4ge1xuICAgICAgY29uc3QgcGFydGlhbCA9IHJhbmdlWzFdID09PSB1bmRlZmluZWQgPyAxIDogcmFuZ2VbMV0gLSByYW5nZVswXSArIDE7XG4gICAgICBjb25zdCBlbXB0eUNvdW50ID0gdGhpcy5jb3VudEVtcHR5KHJhbmdlLCBlbmRwb2ludC5zb3VyY2VDb2x1bW4pO1xuICAgICAgcmVzdWx0ICs9IHBhcnRpYWw7XG4gICAgICByZXN1bHQgLT0gZW1wdHlDb3VudDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGF2ZXJhZ2UgdmFsdWUgZnJvbSB0aGUgY2VsbHMgaW4gdGhlIHJhbmdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgQ29udGFpbnMgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBBdmFyYWdlIHZhbHVlLlxuICAgKi9cbiAgY2FsY3VsYXRlQXZlcmFnZShlbmRwb2ludCkge1xuICAgIGNvbnN0IHN1bSA9IHRoaXMuY2FsY3VsYXRlU3VtKGVuZHBvaW50KTtcbiAgICBjb25zdCBlbnRyaWVzQ291bnQgPSB0aGlzLmNvdW50RW50cmllcyhlbmRwb2ludCk7XG4gICAgcmV0dXJuIHN1bSAvIGVudHJpZXNDb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY2VsbCB2YWx1ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBhIGJhc2ljIHZhbGlkYXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sIENvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGNlbGwgdmFsdWUuXG4gICAqL1xuICBnZXRDZWxsVmFsdWUocm93LCBjb2wpIHtcbiAgICBjb25zdCB2aXN1YWxSb3dJbmRleCA9IHRoaXMuaG90LnRvVmlzdWFsUm93KHJvdyk7XG4gICAgY29uc3QgdmlzdWFsQ29sdW1uSW5kZXggPSB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihjb2wpO1xuICAgIGxldCBjZWxsVmFsdWUgPSB0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHJvdywgY29sKTtcbiAgICBsZXQgY2VsbENsYXNzTmFtZSA9ICcnO1xuICAgIGlmICh2aXN1YWxSb3dJbmRleCAhPT0gbnVsbCAmJiB2aXN1YWxDb2x1bW5JbmRleCAhPT0gbnVsbCkge1xuICAgICAgY2VsbENsYXNzTmFtZSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHZpc3VhbFJvd0luZGV4LCB2aXN1YWxDb2x1bW5JbmRleCkuY2xhc3NOYW1lIHx8ICcnO1xuICAgIH1cbiAgICBpZiAoY2VsbENsYXNzTmFtZS5pbmRleE9mKCdjb2x1bW5TdW1tYXJ5UmVzdWx0JykgPiAtMSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuZm9yY2VOdW1lcmljKSB7XG4gICAgICBpZiAodHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2VsbFZhbHVlID0gY2VsbFZhbHVlLnJlcGxhY2UoLywvLCAnLicpO1xuICAgICAgfVxuICAgICAgY2VsbFZhbHVlID0gcGFyc2VGbG9hdChjZWxsVmFsdWUpO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oY2VsbFZhbHVlKSkge1xuICAgICAgaWYgKCF0aGlzLmVuZHBvaW50cy5jdXJyZW50RW5kcG9pbnQuc3VwcHJlc3NEYXRhVHlwZUVycm9ycykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBDb2x1bW5TdW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtyb3d9LCAke2NvbH0pIGlzIG5vdCBpbiBhXFx4MjBcbiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNlbGxWYWx1ZTtcbiAgfVxufVxuZXhwb3J0cy5Db2x1bW5TdW1tYXJ5ID0gQ29sdW1uU3VtbWFyeTtcbmZ1bmN0aW9uIF9vbkFmdGVySW5pdCgpIHtcbiAgdGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpO1xufVxuLyoqXG4gKiBDYWxsZWQgYWZ0ZXIgdGhlIHNldHRpbmdzIHdlcmUgdXBkYXRlZC4gVGhlcmUgaXMgYSBuZWVkIHRvIHJlZnJlc2ggY2VsbCBtZXRhcyBhZnRlciB0aGUgc2V0dGluZ3MgdXBkYXRlIHdpdGhcbiAqIHRoZSBgY29sdW1uc2AgcHJvcGVydHkgYXMgdGhlIENvcmUgcmVzZXRzIHRoZSBjZWxsIG1ldGFzIHRvIHRoZWlyIGluaXRpYWwgc3RhdGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIFRoZSBzZXR0aW5ncyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyVXBkYXRlU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgaWYgKHNldHRpbmdzLmNvbHVtbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDZWxsTWV0YXMoKTtcbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJDaGFuZ2VgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyAyRCBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIGVkaXRlZCBjZWxscy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ2hhbmdlKGNoYW5nZXMsIHNvdXJjZSkge1xuICBpZiAoY2hhbmdlcyAmJiBzb3VyY2UgIT09ICdDb2x1bW5TdW1tYXJ5LnJlc2V0JyAmJiBzb3VyY2UgIT09ICdDb2x1bW5TdW1tYXJ5LnNldCcgJiYgc291cmNlICE9PSAnbG9hZERhdGEnKSB7XG4gICAgdGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMoY2hhbmdlcyk7XG4gIH1cbn1cbi8qKlxuICogYGJlZm9yZVJvd01vdmVgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAqIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCkuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyUm93TW92ZShyb3dzLCBmaW5hbEluZGV4KSB7XG4gIHRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCdtb3ZlX3JvdycsIHJvd3NbMF0sIHJvd3MubGVuZ3RoLCByb3dzLCB0aGlzLnBsdWdpbk5hbWUpO1xuICB0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCdtb3ZlX3JvdycsIGZpbmFsSW5kZXgsIHJvd3MubGVuZ3RoLCByb3dzLCB0aGlzLnBsdWdpbk5hbWUpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfY29uc29sZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2NvbnNvbGVcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQ2xhc3MgdXNlZCB0byBtYWtlIGFsbCBlbmRwb2ludC1yZWxhdGVkIG9wZXJhdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBFbmRwb2ludHNcbiAqL1xuY2xhc3MgRW5kcG9pbnRzIHtcbiAgY29uc3RydWN0b3IocGx1Z2luLCBzZXR0aW5ncykge1xuICAgIC8qKlxuICAgICAqIFRoZSBtYWluIHBsdWdpbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwbHVnaW5cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGRlY2xhcmVkIHBsdWdpbiBlbmRwb2ludHMgKGNhbGN1bGF0aW9uIGRlc3RpbmF0aW9uIHBvaW50cykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICogQGRlZmF1bHQge0FycmF5fSBFbXB0eSBhcnJheS5cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJlbmRwb2ludHNcIiwgW10pO1xuICAgIC8qKlxuICAgICAqIFRoZSBwbHVnaW4gc2V0dGluZ3MsIHRha2VuIGZyb20gSGFuZHNvbnRhYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fEZ1bmN0aW9ufVxuICAgICAqIEBkZWZhdWx0IG51bGxcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZXR0aW5nc1wiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFNldHRpbmdzIHR5cGUuIENhbiBiZSBlaXRoZXIgJ2FycmF5JyBvciAnZnVuY3Rpb24nLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKiBAZGVmYXVsdCB7J2FycmF5J31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzZXR0aW5nc1R5cGVcIiwgJ2FycmF5Jyk7XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZW5kcG9pbnQgKGNhbGN1bGF0aW9uIGRlc3RpbmF0aW9uIHBvaW50KSBpbiBxdWVzdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImN1cnJlbnRFbmRwb2ludFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBBcnJheSBjb250YWluaW5nIGEgbGlzdCBvZiBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKiBAZGVmYXVsdCB7W119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2VsbHNUb1NldENhY2hlXCIsIFtdKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLmhvdCA9IHRoaXMucGx1Z2luLmhvdDtcbiAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgZW5kcG9pbnRzIHByb3ZpZGVkIGluIHRoZSBzZXR0aW5ncy5cbiAgICovXG4gIGluaXRFbmRwb2ludHMoKSB7XG4gICAgdGhpcy5lbmRwb2ludHMgPSB0aGlzLnBhcnNlU2V0dGluZ3MoKTtcbiAgICB0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgZW5kcG9pbnQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggb2YgdGhlIGVuZHBvaW50LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0RW5kcG9pbnQoaW5kZXgpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5nc1R5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW5kcG9pbnRzW2luZGV4XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgd2l0aCBhbGwgdGhlIGVuZHBvaW50cy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0QWxsRW5kcG9pbnRzKCkge1xuICAgIGlmICh0aGlzLnNldHRpbmdzVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmVuZHBvaW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGZpbGwgdGhlIGJsYW5rcyBpbiB0aGUgZW5kcG9pbnQgZGF0YSBwcm92aWRlZCBieSBhIHNldHRpbmdzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bmN0aW9uIHByb3ZpZGVkIGluIHRoZSBIT1Qgc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gQW4gYXJyYXkgb2YgZW5kcG9pbnRzLlxuICAgKi9cbiAgZmlsbE1pc3NpbmdFbmRwb2ludERhdGEoZnVuYykge1xuICAgIHJldHVybiB0aGlzLnBhcnNlU2V0dGluZ3MoZnVuYy5jYWxsKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBwbHVnaW4ncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gc2V0dGluZ3MgVGhlIHNldHRpbmdzIGFycmF5LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119XG4gICAqL1xuICBwYXJzZVNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgY29uc3QgZW5kcG9pbnRzQXJyYXkgPSBbXTtcbiAgICBsZXQgc2V0dGluZ3NBcnJheSA9IHNldHRpbmdzO1xuICAgIGlmICghc2V0dGluZ3NBcnJheSAmJiB0eXBlb2YgdGhpcy5zZXR0aW5ncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5zZXR0aW5nc1R5cGUgPSAnZnVuY3Rpb24nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXNldHRpbmdzQXJyYXkpIHtcbiAgICAgIHNldHRpbmdzQXJyYXkgPSB0aGlzLnNldHRpbmdzO1xuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2V0dGluZ3NBcnJheSwgdmFsID0+IHtcbiAgICAgIGNvbnN0IG5ld0VuZHBvaW50ID0ge307XG4gICAgICB0aGlzLmFzc2lnblNldHRpbmcodmFsLCBuZXdFbmRwb2ludCwgJ3JhbmdlcycsIFtbMCwgdGhpcy5ob3QuY291bnRSb3dzKCkgLSAxXV0pO1xuICAgICAgdGhpcy5hc3NpZ25TZXR0aW5nKHZhbCwgbmV3RW5kcG9pbnQsICdyZXZlcnNlZFJvd0Nvb3JkcycsIGZhbHNlKTtcbiAgICAgIHRoaXMuYXNzaWduU2V0dGluZyh2YWwsIG5ld0VuZHBvaW50LCAnZGVzdGluYXRpb25Sb3cnLCBuZXcgRXJyb3IoYFxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gcm93IGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICBgKSk7XG4gICAgICB0aGlzLmFzc2lnblNldHRpbmcodmFsLCBuZXdFbmRwb2ludCwgJ2Rlc3RpbmF0aW9uQ29sdW1uJywgbmV3IEVycm9yKGBcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgYCkpO1xuICAgICAgdGhpcy5hc3NpZ25TZXR0aW5nKHZhbCwgbmV3RW5kcG9pbnQsICdzb3VyY2VDb2x1bW4nLCB2YWwuZGVzdGluYXRpb25Db2x1bW4pO1xuICAgICAgdGhpcy5hc3NpZ25TZXR0aW5nKHZhbCwgbmV3RW5kcG9pbnQsICd0eXBlJywgJ3N1bScpO1xuICAgICAgdGhpcy5hc3NpZ25TZXR0aW5nKHZhbCwgbmV3RW5kcG9pbnQsICdmb3JjZU51bWVyaWMnLCBmYWxzZSk7XG4gICAgICB0aGlzLmFzc2lnblNldHRpbmcodmFsLCBuZXdFbmRwb2ludCwgJ3N1cHByZXNzRGF0YVR5cGVFcnJvcnMnLCB0cnVlKTtcbiAgICAgIHRoaXMuYXNzaWduU2V0dGluZyh2YWwsIG5ld0VuZHBvaW50LCAnY3VzdG9tRnVuY3Rpb24nLCBudWxsKTtcbiAgICAgIHRoaXMuYXNzaWduU2V0dGluZyh2YWwsIG5ld0VuZHBvaW50LCAncmVhZE9ubHknLCB0cnVlKTtcbiAgICAgIHRoaXMuYXNzaWduU2V0dGluZyh2YWwsIG5ld0VuZHBvaW50LCAncm91bmRGbG9hdCcsIGZhbHNlKTtcbiAgICAgIGVuZHBvaW50c0FycmF5LnB1c2gobmV3RW5kcG9pbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludHNBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0ZXIgZm9yIHRoZSBpbnRlcm5hbCBzZXR0aW5nIG9iamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZXR0aW5ncyBPYmplY3Qgd2l0aCB0aGUgc2V0dGluZ3MuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbmRwb2ludCBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZW5kcG9pbnQgZm9yIHRoZSB0aGUgY2FsY3VsYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFNldHRpbmdzIG5hbWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0VmFsdWUgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHNldHRpbmdzLlxuICAgKi9cbiAgYXNzaWduU2V0dGluZyhzZXR0aW5ncywgZW5kcG9pbnQsIG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmIChuYW1lID09PSAncmFuZ2VzJyAmJiBzZXR0aW5nc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmRwb2ludFtuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyYW5nZXMnICYmIHNldHRpbmdzW25hbWVdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3NbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGVuZHBvaW50W25hbWVdID0gZGVmYXVsdFZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb25lbHktaWYgKi9cbiAgICAgIGlmIChuYW1lID09PSAnZGVzdGluYXRpb25Sb3cnICYmIGVuZHBvaW50LnJldmVyc2VkUm93Q29vcmRzKSB7XG4gICAgICAgIGVuZHBvaW50W25hbWVdID0gdGhpcy5ob3QuY291bnRSb3dzKCkgLSBzZXR0aW5nc1tuYW1lXSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmRwb2ludFtuYW1lXSA9IHNldHRpbmdzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGVuZHBvaW50IHNldHVwIGJlZm9yZSB0aGUgc3RydWN0dXJlIGFsdGVyYXRpb24gKGxpa2UgaW5zZXJ0aW5nIG9yIHJlbW92aW5nIHJvd3MvY29sdW1ucykuIFVzZWQgZm9yIHNldHRpbmdzIHByb3ZpZGVkIGFzIGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gVHlwZSBvZiB0aGUgYWN0aW9uIHBlcmZvcm1lZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFJvdy9jb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgTnVtYmVyIG9mIHJvd3MvY29sdW1ucyBhZGRlZC9yZW1vdmVkLlxuICAgKi9cbiAgcmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oYWN0aW9uLCBpbmRleCwgbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3NUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBhY3Rpb24uaW5kZXhPZigncm93JykgPiAtMSA/ICdyb3cnIDogJ2NvbCc7XG4gICAgY29uc3QgZW5kcG9pbnRzID0gdGhpcy5nZXRBbGxFbmRwb2ludHMoKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnRzLCB2YWwgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdyb3cnICYmIHZhbC5kZXN0aW5hdGlvblJvdyA+PSBpbmRleCkge1xuICAgICAgICBpZiAoYWN0aW9uID09PSAnaW5zZXJ0X3JvdycpIHtcbiAgICAgICAgICB2YWwuYWx0ZXJSb3dPZmZzZXQgPSBudW1iZXI7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncmVtb3ZlX3JvdycpIHtcbiAgICAgICAgICB2YWwuYWx0ZXJSb3dPZmZzZXQgPSAtMSAqIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdjb2wnICYmIHZhbC5kZXN0aW5hdGlvbkNvbHVtbiA+PSBpbmRleCkge1xuICAgICAgICBpZiAoYWN0aW9uID09PSAnaW5zZXJ0X2NvbCcpIHtcbiAgICAgICAgICB2YWwuYWx0ZXJDb2x1bW5PZmZzZXQgPSBudW1iZXI7XG4gICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncmVtb3ZlX2NvbCcpIHtcbiAgICAgICAgICB2YWwuYWx0ZXJDb2x1bW5PZmZzZXQgPSAtMSAqIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZW5kcG9pbnRzLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogQWZ0ZXJDcmVhdGVSb3cvYWZ0ZXJDcmVhdGVSb3cvYWZ0ZXJSZW1vdmVSb3cvYWZ0ZXJSZW1vdmVDb2wgaG9vayBjYWxsYmFjay4gUmVzZXQgYW5kIHJlZW5hYmxlcyB0aGUgc3VtbWFyeSBmdW5jdGlvbmFsaXR5XG4gICAqIGFmdGVyIGNoYW5naW5nIHRoZSB0YWJsZSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gVHlwZSBvZiB0aGUgYWN0aW9uIHBlcmZvcm1lZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFJvdy9jb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgTnVtYmVyIG9mIHJvd3MvY29sdW1ucyBhZGRlZC9yZW1vdmVkLlxuICAgKiBAcGFyYW0ge0FycmF5fSBbbG9naWNSb3dzXSBBcnJheSBvZiB0aGUgbG9naWNhbCBpbmRleGVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU291cmNlIG9mIGNoYW5nZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VSZWZyZXNoXSBgdHJ1ZWAgb2YgdGhlIGVuZHBvaW50cyBzaG91bGQgcmVmcmVzaCBhZnRlciBjb21wbGV0aW5nIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oYWN0aW9uLCBpbmRleCwgbnVtYmVyLCBsb2dpY1Jvd3MsIHNvdXJjZSkge1xuICAgIGxldCBmb3JjZVJlZnJlc2ggPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHRydWU7XG4gICAgaWYgKHRoaXMuc2V0dGluZ3NUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIHJ1biBpdCBvbiBhIG5leHQgYXZhaWFibGUgaG9vaywgYmVjYXVzZSB0aGUgVHJpbVJvd3MnIGBhZnRlckNyZWF0ZVJvd2AgaG9vayB0cmlnZ2VycyBhZnRlciB0aGlzIG9uZSxcbiAgICAgIC8vIGFuZCBpdCBuZWVkcyB0byBiZSBydW4gdG8gcHJvcGVybHkgY2FsY3VsYXRlIHRoZSBlbmRwb2ludCB2YWx1ZS5cbiAgICAgIGNvbnN0IGJlZm9yZVZpZXdSZW5kZXJDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ob3QucmVtb3ZlSG9vaygnYmVmb3JlVmlld1JlbmRlcicsIGJlZm9yZVZpZXdSZW5kZXJDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKTtcbiAgICAgIH07XG4gICAgICB0aGlzLmhvdC5hZGRIb29rT25jZSgnYmVmb3JlVmlld1JlbmRlcicsIGJlZm9yZVZpZXdSZW5kZXJDYWxsYmFjayk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBhY3Rpb24uaW5kZXhPZigncm93JykgPiAtMSA/ICdyb3cnIDogJ2NvbCc7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IGFjdGlvbi5pbmRleE9mKCdyZW1vdmUnKSA+IC0xID8gLTEgOiAxO1xuICAgIGNvbnN0IGVuZHBvaW50cyA9IHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7XG4gICAgY29uc3Qgcm93TW92aW5nID0gYWN0aW9uLmluZGV4T2YoJ21vdmVfcm93JykgPT09IDA7XG4gICAgY29uc3QgcGxhY2VPZkFsdGVyYXRpb24gPSBpbmRleDtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnRzLCB2YWwgPT4ge1xuICAgICAgaWYgKHR5cGUgPT09ICdyb3cnICYmIHZhbC5kZXN0aW5hdGlvblJvdyA+PSBwbGFjZU9mQWx0ZXJhdGlvbikge1xuICAgICAgICB2YWwuYWx0ZXJSb3dPZmZzZXQgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09ICdjb2wnICYmIHZhbC5kZXN0aW5hdGlvbkNvbHVtbiA+PSBwbGFjZU9mQWx0ZXJhdGlvbikge1xuICAgICAgICB2YWwuYWx0ZXJDb2x1bW5PZmZzZXQgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZW5kcG9pbnRzLCAhcm93TW92aW5nKTtcbiAgICBpZiAocm93TW92aW5nKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnRzLCBlbmRwb2ludCA9PiB7XG4gICAgICAgIHRoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXMoZW5kcG9pbnQsIHBsYWNlT2ZBbHRlcmF0aW9uLCBsb2dpY1Jvd3NbMF0sIGxvZ2ljUm93cy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoZW5kcG9pbnQpO1xuICAgICAgICB0aGlzLmNsZWFyT2Zmc2V0SW5mb3JtYXRpb24oZW5kcG9pbnQpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShlbmRwb2ludHMsIGVuZHBvaW50ID0+IHtcbiAgICAgICAgdGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoZW5kcG9pbnQsIHBsYWNlT2ZBbHRlcmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIG9mZnNldCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBlbmRwb2ludCBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbmRwb2ludCBBbmQgZW5kcG9pbnQgb2JqZWN0LlxuICAgKi9cbiAgY2xlYXJPZmZzZXRJbmZvcm1hdGlvbihlbmRwb2ludCkge1xuICAgIGVuZHBvaW50LmFsdGVyUm93T2Zmc2V0ID0gdW5kZWZpbmVkO1xuICAgIGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB0aGUgcm93IHJhbmdlcyBmb3IgdGhlIHByb3ZpZGVkIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgVGhlIGVuZHBvaW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBsYWNlT2ZBbHRlcmF0aW9uIEluZGV4IG9mIHRoZSByb3cgd2hlcmUgdGhlIGFsdGVyYXRpb24gdGFrZXMgcGxhY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwcmV2aW91c1Bvc2l0aW9uIFByZXZpb3VzIGVuZHBvaW50IHJlc3VsdCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBPZmZzZXQgZ2VuZXJhdGVkIGJ5IHRoZSBhbHRlcmF0aW9uLlxuICAgKi9cbiAgZXh0ZW5kRW5kcG9pbnRSYW5nZXMoZW5kcG9pbnQsIHBsYWNlT2ZBbHRlcmF0aW9uLCBwcmV2aW91c1Bvc2l0aW9uLCBvZmZzZXQpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnQucmFuZ2VzLCByYW5nZSA9PiB7XG4gICAgICAvLyBpcyBhIHJhbmdlLCBub3QgYSBzaW5nbGUgcm93XG4gICAgICBpZiAocmFuZ2VbMV0pIHtcbiAgICAgICAgaWYgKHBsYWNlT2ZBbHRlcmF0aW9uID49IHJhbmdlWzBdICYmIHBsYWNlT2ZBbHRlcmF0aW9uIDw9IHJhbmdlWzFdKSB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24gPiByYW5nZVsxXSkge1xuICAgICAgICAgICAgcmFuZ2VbMV0gKz0gb2Zmc2V0O1xuICAgICAgICAgIH0gZWxzZSBpZiAocHJldmlvdXNQb3NpdGlvbiA8IHJhbmdlWzBdKSB7XG4gICAgICAgICAgICByYW5nZVswXSAtPSBvZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByZXZpb3VzUG9zaXRpb24gPj0gcmFuZ2VbMF0gJiYgcHJldmlvdXNQb3NpdGlvbiA8PSByYW5nZVsxXSkge1xuICAgICAgICAgIHJhbmdlWzFdIC09IG9mZnNldDtcbiAgICAgICAgICBpZiAocGxhY2VPZkFsdGVyYXRpb24gPD0gcmFuZ2VbMF0pIHtcbiAgICAgICAgICAgIHJhbmdlWzBdICs9IDE7XG4gICAgICAgICAgICByYW5nZVsxXSArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIHRoZSBwaHlzaWNhbCByYW5nZXMgZm9yIHRoZSBwcm92aWRlZCBlbmRwb2ludC4gVXNlZCAoZm9yIGV4YW1wbGUpIHdoZW4gYSByb3cgZ2V0cyBtb3ZlZCBhbmQgZXh0ZW5kcyBhbiBleGlzdGluZyByYW5nZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGVuZHBvaW50IEFuIGVuZHBvaW50IG9iamVjdC5cbiAgICovXG4gIHJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoZW5kcG9pbnQpIHtcbiAgICBjb25zdCByYW5nZXMgPSBlbmRwb2ludC5yYW5nZXM7XG4gICAgY29uc3QgbmV3UmFuZ2VzID0gW107XG4gICAgY29uc3QgYWxsSW5kZXhlcyA9IFtdO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyYW5nZXMsIHJhbmdlID0+IHtcbiAgICAgIGNvbnN0IG5ld1JhbmdlID0gW107XG4gICAgICBpZiAocmFuZ2VbMV0pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJhbmdlWzBdOyBpIDw9IHJhbmdlWzFdOyBpKyspIHtcbiAgICAgICAgICBuZXdSYW5nZS5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coaSkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdSYW5nZS5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3cocmFuZ2VbMF0pKTtcbiAgICAgIH1cbiAgICAgIGFsbEluZGV4ZXMucHVzaChuZXdSYW5nZSk7XG4gICAgfSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGFsbEluZGV4ZXMsIHJhbmdlID0+IHtcbiAgICAgIGxldCBuZXdSYW5nZSA9IFtdO1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJhbmdlLCAoY29vcmQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgIG5ld1JhbmdlLnB1c2goY29vcmQpO1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlW2luZGV4XSAhPT0gcmFuZ2VbaW5kZXggLSAxXSArIDEpIHtcbiAgICAgICAgICBuZXdSYW5nZS5wdXNoKHJhbmdlW2luZGV4IC0gMV0pO1xuICAgICAgICAgIG5ld1Jhbmdlcy5wdXNoKG5ld1JhbmdlKTtcbiAgICAgICAgICBuZXdSYW5nZSA9IFtdO1xuICAgICAgICAgIG5ld1JhbmdlLnB1c2goY29vcmQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA9PT0gcmFuZ2UubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG5ld1JhbmdlLnB1c2goY29vcmQpO1xuICAgICAgICAgIG5ld1Jhbmdlcy5wdXNoKG5ld1JhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgZW5kcG9pbnQucmFuZ2VzID0gbmV3UmFuZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWZ0cyB0aGUgZW5kcG9pbnQgY29vcmRpbmF0ZXMgYnkgdGhlIGRlZmluZWQgb2Zmc2V0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgRW5kcG9pbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0U3RhcnRJbmRleCBJbmRleCBvZiB0aGUgcGVyZm9ybWVkIGNoYW5nZSAoaWYgdGhlIGNoYW5nZSBpcyBsb2NhdGVkIGFmdGVyIHRoZSBlbmRwb2ludCwgbm90aGluZyBhYm91dCB0aGUgZW5kcG9pbnQgaGFzIHRvIGJlIGNoYW5nZWQuXG4gICAqL1xuICBzaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoZW5kcG9pbnQsIG9mZnNldFN0YXJ0SW5kZXgpIHtcbiAgICBpZiAoZW5kcG9pbnQuYWx0ZXJSb3dPZmZzZXQgJiYgZW5kcG9pbnQuYWx0ZXJSb3dPZmZzZXQgIT09IDApIHtcbiAgICAgIGVuZHBvaW50LmRlc3RpbmF0aW9uUm93ICs9IGVuZHBvaW50LmFsdGVyUm93T2Zmc2V0IHx8IDA7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnQucmFuZ2VzLCBlbGVtZW50ID0+IHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGVsZW1lbnQsIChzdWJFbGVtZW50LCBqKSA9PiB7XG4gICAgICAgICAgaWYgKHN1YkVsZW1lbnQgPj0gb2Zmc2V0U3RhcnRJbmRleCkge1xuICAgICAgICAgICAgZWxlbWVudFtqXSArPSBlbmRwb2ludC5hbHRlclJvd09mZnNldCB8fCAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0ICYmIGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0ICE9PSAwKSB7XG4gICAgICBlbmRwb2ludC5kZXN0aW5hdGlvbkNvbHVtbiArPSBlbmRwb2ludC5hbHRlckNvbHVtbk9mZnNldCB8fCAwO1xuICAgICAgZW5kcG9pbnQuc291cmNlQ29sdW1uICs9IGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0IHx8IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyAocmVtb3ZlcykgdGhlIGVuZHBvaW50cyBmcm9tIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gW2VuZHBvaW50c10gQXJyYXkgY29udGFpbmluZyB0aGUgZW5kcG9pbnRzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1c2VPZmZzZXQ9dHJ1ZV0gVXNlIHRoZSBjZWxsIG9mZnNldCB2YWx1ZS5cbiAgICovXG4gIHJlc2V0QWxsRW5kcG9pbnRzKCkge1xuICAgIGxldCBlbmRwb2ludHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7XG4gICAgbGV0IHVzZU9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICBjb25zdCBhbnlFbmRwb2ludE91dE9mUmFuZ2UgPSBlbmRwb2ludHMuc29tZShlbmRwb2ludCA9PiB7XG4gICAgICBjb25zdCBhbHRlclJvd09mZnNldCA9IGVuZHBvaW50LmFsdGVyUm93T2Zmc2V0IHx8IDA7XG4gICAgICBjb25zdCBhbHRlckNvbE9mZnNldCA9IGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0IHx8IDA7XG4gICAgICBpZiAoZW5kcG9pbnQuZGVzdGluYXRpb25Sb3cgKyBhbHRlclJvd09mZnNldCA+PSB0aGlzLmhvdC5jb3VudFJvd3MoKSB8fCBlbmRwb2ludC5kZXN0aW5hdGlvbkNvbHVtbiArIGFsdGVyQ29sT2Zmc2V0ID49IHRoaXMuaG90LmNvdW50Q29scygpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGlmIChhbnlFbmRwb2ludE91dE9mUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jZWxsc1RvU2V0Q2FjaGUgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZW5kcG9pbnRzLCBlbmRwb2ludCA9PiB7XG4gICAgICB0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShlbmRwb2ludCwgdXNlT2Zmc2V0KTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCAnQ29sdW1uU3VtbWFyeS5yZXNldCcpO1xuICAgIHRoaXMuY2VsbHNUb1NldENhY2hlID0gW107XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGFuZCByZWZyZXNoIGFsbCBkZWZpbmVkIGVuZHBvaW50cy5cbiAgICovXG4gIHJlZnJlc2hBbGxFbmRwb2ludHMoKSB7XG4gICAgdGhpcy5jZWxsc1RvU2V0Q2FjaGUgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5nZXRBbGxFbmRwb2ludHMoKSwgdmFsdWUgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50RW5kcG9pbnQgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGx1Z2luLmNhbGN1bGF0ZSh2YWx1ZSk7XG4gICAgICB0aGlzLnNldEVuZHBvaW50VmFsdWUodmFsdWUsICdpbml0Jyk7XG4gICAgfSk7XG4gICAgdGhpcy5jdXJyZW50RW5kcG9pbnQgPSBudWxsO1xuICAgIHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsICdDb2x1bW5TdW1tYXJ5LnJlc2V0Jyk7XG4gICAgdGhpcy5jZWxsc1RvU2V0Q2FjaGUgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYW5kIHJlZnJlc2ggZW5kcG9pbnRzIG9ubHkgaW4gdGhlIGNoYW5nZWQgY29sdW1ucy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBBcnJheSBvZiBjaGFuZ2VzIGZyb20gdGhlIGBhZnRlckNoYW5nZWAgaG9vay5cbiAgICovXG4gIHJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGNoYW5nZXMpIHtcbiAgICBjb25zdCBuZWVkVG9SZWZyZXNoID0gW107XG4gICAgdGhpcy5jZWxsc1RvU2V0Q2FjaGUgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2hhbmdlcywgKHZhbHVlLCBrZXksIGNoYW5nZXNPYmopID0+IHtcbiAgICAgIC8vIGlmIG5vdGhpbmcgY2hhbmdlZCwgZG9udCB1cGRhdGUgYW55dGhpbmdcbiAgICAgIGlmIChgJHt2YWx1ZVsyXSB8fCAnJ31gID09PSBgJHt2YWx1ZVszXX1gKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmdldEFsbEVuZHBvaW50cygpLCAoZW5kcG9pbnQsIGopID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaG90LnByb3BUb0NvbChjaGFuZ2VzT2JqW2tleV1bMV0pID09PSBlbmRwb2ludC5zb3VyY2VDb2x1bW4gJiYgbmVlZFRvUmVmcmVzaC5pbmRleE9mKGopID09PSAtMSkge1xuICAgICAgICAgIG5lZWRUb1JlZnJlc2gucHVzaChqKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG5lZWRUb1JlZnJlc2gsIHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQodmFsdWUpKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCAnQ29sdW1uU3VtbWFyeS5yZXNldCcpO1xuICAgIHRoaXMuY2VsbHNUb1NldENhY2hlID0gW107XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSBjZWxsIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSBhbGwgZW5kcG9pbnRzIGFmdGVyIHRoZSBgdXBkYXRlU2V0dGluZ3NgIG1ldGhvZCBjYWxsIHdoaWNoIGluIHNvbWVcbiAgICogY2FzZXMgKGNhbGwgd2l0aCBgY29sdW1uc2Agb3B0aW9uKSBjYW4gcmVzZXQgdGhlIGNlbGwgbWV0YXMgdG8gdGhlIGluaXRpYWwgc3RhdGUuXG4gICAqL1xuICByZWZyZXNoQ2VsbE1ldGFzKCkge1xuICAgIHRoaXMuZW5kcG9pbnRzLmZvckVhY2goZW5kcG9pbnQgPT4ge1xuICAgICAgY29uc3QgZGVzdGluYXRpb25WaXN1YWxSb3cgPSB0aGlzLmhvdC50b1Zpc3VhbFJvdyhlbmRwb2ludC5kZXN0aW5hdGlvblJvdyk7XG4gICAgICBpZiAoZGVzdGluYXRpb25WaXN1YWxSb3cgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShkZXN0aW5hdGlvblZpc3VhbFJvdywgZW5kcG9pbnQuZGVzdGluYXRpb25Db2x1bW4pO1xuICAgICAgICBjZWxsTWV0YS5yZWFkT25seSA9IGVuZHBvaW50LnJlYWRPbmx5O1xuICAgICAgICBjZWxsTWV0YS5jbGFzc05hbWUgPSAnY29sdW1uU3VtbWFyeVJlc3VsdCc7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIGFuZCByZWZyZXNoIGEgc2luZ2xlIGVuZHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZW5kcG9pbnQgQ29udGFpbnMgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uLlxuICAgKi9cbiAgcmVmcmVzaEVuZHBvaW50KGVuZHBvaW50KSB7XG4gICAgdGhpcy5jdXJyZW50RW5kcG9pbnQgPSBlbmRwb2ludDtcbiAgICB0aGlzLnBsdWdpbi5jYWxjdWxhdGUoZW5kcG9pbnQpO1xuICAgIHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShlbmRwb2ludCk7XG4gICAgdGhpcy5jdXJyZW50RW5kcG9pbnQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBlbmRwb2ludCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGVuZHBvaW50IENvbnRhaW5zIHRoZSBlbmRwb2ludCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdXNlT2Zmc2V0PXRydWVdIFVzZSB0aGUgY2VsbCBvZmZzZXQgdmFsdWUuXG4gICAqL1xuICByZXNldEVuZHBvaW50VmFsdWUoZW5kcG9pbnQpIHtcbiAgICBsZXQgdXNlT2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIGNvbnN0IGFsdGVyUm93T2Zmc2V0ID0gZW5kcG9pbnQuYWx0ZXJSb3dPZmZzZXQgfHwgMDtcbiAgICBjb25zdCBhbHRlckNvbE9mZnNldCA9IGVuZHBvaW50LmFsdGVyQ29sdW1uT2Zmc2V0IHx8IDA7XG4gICAgdGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3coZW5kcG9pbnQuZGVzdGluYXRpb25Sb3cgKyAodXNlT2Zmc2V0ID8gYWx0ZXJSb3dPZmZzZXQgOiAwKSksIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGVuZHBvaW50LmRlc3RpbmF0aW9uQ29sdW1uICsgKHVzZU9mZnNldCA/IGFsdGVyQ29sT2Zmc2V0IDogMCkpLCAnJ10pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZW5kcG9pbnQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbmRwb2ludCBDb250YWlucyB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTb3VyY2Ugb2YgdGhlIGNhbGwgaW5mb3JtYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlbmRlcj1mYWxzZV0gYHRydWVgIGlmIGl0IG5lZWRzIHRvIHJlbmRlciB0aGUgdGFibGUgYWZ0ZXJ3YXJkcy5cbiAgICovXG4gIHNldEVuZHBvaW50VmFsdWUoZW5kcG9pbnQsIHNvdXJjZSkge1xuICAgIGxldCByZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIGNvbnN0IHZpc3VhbEVuZHBvaW50Um93SW5kZXggPSB0aGlzLmhvdC50b1Zpc3VhbFJvdyhlbmRwb2ludC5kZXN0aW5hdGlvblJvdyk7XG4gICAgaWYgKGVuZHBvaW50LmRlc3RpbmF0aW9uUm93ID49IHRoaXMuaG90LmNvdW50Um93cygpIHx8IGVuZHBvaW50LmRlc3RpbmF0aW9uQ29sdW1uID49IHRoaXMuaG90LmNvdW50Q29scygpKSB7XG4gICAgICB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlc3RpbmF0aW9uVmlzdWFsUm93ID0gdGhpcy5ob3QudG9WaXN1YWxSb3coZW5kcG9pbnQuZGVzdGluYXRpb25Sb3cpO1xuICAgIGlmIChkZXN0aW5hdGlvblZpc3VhbFJvdyAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShkZXN0aW5hdGlvblZpc3VhbFJvdywgZW5kcG9pbnQuZGVzdGluYXRpb25Db2x1bW4pO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gJ2luaXQnIHx8IGNlbGxNZXRhLnJlYWRPbmx5ICE9PSBlbmRwb2ludC5yZWFkT25seSkge1xuICAgICAgICBjZWxsTWV0YS5yZWFkT25seSA9IGVuZHBvaW50LnJlYWRPbmx5O1xuICAgICAgICBjZWxsTWV0YS5jbGFzc05hbWUgPSAnY29sdW1uU3VtbWFyeVJlc3VsdCc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgoZW5kcG9pbnQucm91bmRGbG9hdCA9PT0gdHJ1ZSB8fCBOdW1iZXIuaXNJbnRlZ2VyKGVuZHBvaW50LnJvdW5kRmxvYXQpKSAmJiAhaXNOYU4oZW5kcG9pbnQucmVzdWx0KSkge1xuICAgICAgY29uc3Qgcm91bmRGbG9hdFZhbHVlID0gZW5kcG9pbnQucm91bmRGbG9hdDtcbiAgICAgIGxldCBkZWNpbWFsUGxhY2VzQ291bnQgPSAwO1xuXG4gICAgICAvLyBgdG9GaXhlZGAgbWV0aG9kIGFjY2VwdHMgb25seSB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxMDBcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJvdW5kRmxvYXRWYWx1ZSkpIHtcbiAgICAgICAgZGVjaW1hbFBsYWNlc0NvdW50ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgcm91bmRGbG9hdFZhbHVlKSwgMTAwKTtcbiAgICAgIH1cbiAgICAgIGVuZHBvaW50LnJlc3VsdCA9IGVuZHBvaW50LnJlc3VsdC50b0ZpeGVkKGRlY2ltYWxQbGFjZXNDb3VudCk7XG4gICAgfVxuICAgIGlmIChyZW5kZXIpIHtcbiAgICAgIHRoaXMuaG90LnNldERhdGFBdENlbGwodmlzdWFsRW5kcG9pbnRSb3dJbmRleCwgZW5kcG9pbnQuZGVzdGluYXRpb25Db2x1bW4sIGVuZHBvaW50LnJlc3VsdCwgJ0NvbHVtblN1bW1hcnkuc2V0Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2VsbHNUb1NldENhY2hlLnB1c2goW3Zpc3VhbEVuZHBvaW50Um93SW5kZXgsIGVuZHBvaW50LmRlc3RpbmF0aW9uQ29sdW1uLCBlbmRwb2ludC5yZXN1bHRdKTtcbiAgICB9XG4gICAgZW5kcG9pbnQuYWx0ZXJSb3dPZmZzZXQgPSB1bmRlZmluZWQ7XG4gICAgZW5kcG9pbnQuYWx0ZXJDb2x1bW5PZmZzZXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBjYWxjdWxhdGlvbiByYW5nZSBiZWluZyBvdXQgb2YgYm91bmRhcmllcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCkge1xuICAgICgwLCBfY29uc29sZS53YXJuKSgnT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zXFwnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJsZSBib3VuZGFyaWVzIScpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBFbmRwb2ludHM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2NvbHVtblN1bW1hcnkgPSByZXF1aXJlKFwiLi9jb2x1bW5TdW1tYXJ5XCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2NvbHVtblN1bW1hcnkuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2NvbHVtblN1bW1hcnkuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5Db2x1bW5TdW1tYXJ5ID0gX2NvbHVtblN1bW1hcnkuQ29sdW1uU3VtbWFyeTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaXNOdWxsaXNoT3JOYU4gPSBpc051bGxpc2hPck5hTjtcbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIGlzIG9uZSBvZiB0aGUgdHlwZTogYG51bGxgLCBgdW5kZWZpbmVkYCBvciBgTmFOYC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc051bGxpc2hPck5hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpc05hTih2YWx1ZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQ29tbWVudCBlZGl0b3IgZm9yIHRoZSBDb21tZW50cyBwbHVnaW4uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBDb21tZW50RWRpdG9yXG4gKi9cbmNsYXNzIENvbW1lbnRFZGl0b3Ige1xuICBzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKSB7XG4gICAgcmV0dXJuICdodENvbW1lbnRzQ29udGFpbmVyJztcbiAgfVxuICBzdGF0aWMgZ2V0IENMQVNTX0VESVRPUigpIHtcbiAgICByZXR1cm4gJ2h0Q29tbWVudHMnO1xuICB9XG4gIHN0YXRpYyBnZXQgQ0xBU1NfSU5QVVQoKSB7XG4gICAgcmV0dXJuICdodENvbW1lbnRUZXh0QXJlYSc7XG4gIH1cbiAgc3RhdGljIGdldCBDTEFTU19DRUxMKCkge1xuICAgIHJldHVybiAnaHRDb21tZW50Q2VsbCc7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGUge0hUTUxEb2N1bWVudH1cbiAgICovXG5cbiAgY29uc3RydWN0b3Iocm9vdERvY3VtZW50LCBpc1J0bCkge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJvb3REb2N1bWVudFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzUnRsXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGFpbmVyXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJlZGl0b3JcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJlZGl0b3JTdHlsZVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhpZGRlblwiLCB0cnVlKTtcbiAgICB0aGlzLnJvb3REb2N1bWVudCA9IHJvb3REb2N1bWVudDtcbiAgICB0aGlzLmlzUnRsID0gaXNSdGw7XG4gICAgdGhpcy5lZGl0b3IgPSB0aGlzLmNyZWF0ZUVkaXRvcigpO1xuICAgIHRoaXMuZWRpdG9yU3R5bGUgPSB0aGlzLmVkaXRvci5zdHlsZTtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcG9zaXRpb24gb2YgdGhlIGNvbW1lbnRzIGVkaXRvciBhY2NvcmRpbmcgdG8gdGhlICBwcm92aWRlZCB4IGFuZCB5IGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCBYIHBvc2l0aW9uIChpbiBwaXhlbHMpLlxuICAgKiBAcGFyYW0ge251bWJlcn0geSBZIHBvc2l0aW9uIChpbiBwaXhlbHMpLlxuICAgKi9cbiAgc2V0UG9zaXRpb24oeCwgeSkge1xuICAgIHRoaXMuZWRpdG9yU3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgIHRoaXMuZWRpdG9yU3R5bGUudG9wID0gYCR7eX1weGA7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBlZGl0b3Igc2l6ZSBhY2NvcmRpbmcgdG8gdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIFdpZHRoIGluIHBpeGVscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBIZWlnaHQgaW4gcGl4ZWxzLlxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHdpZHRoICYmIGhlaWdodCkge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldElucHV0RWxlbWVudCgpO1xuICAgICAgaW5wdXQuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgICBpbnB1dC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb21tZW50cyBlZGl0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHt7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH19XG4gICAqL1xuICBnZXRTaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLFxuICAgICAgaGVpZ2h0OiAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgZWRpdG9yIHNpemUgdG8gaXRzIGluaXRpYWwgc3RhdGUuXG4gICAqL1xuICByZXNldFNpemUoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldElucHV0RWxlbWVudCgpO1xuICAgIGlucHV0LnN0eWxlLndpZHRoID0gJyc7XG4gICAgaW5wdXQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSByZWFkLW9ubHkgc3RhdGUgZm9yIHRoZSBjb21tZW50cyBlZGl0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhdGUgVGhlIG5ldyByZWFkIG9ubHkgc3RhdGUuXG4gICAqL1xuICBzZXRSZWFkT25seVN0YXRlKHN0YXRlKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldElucHV0RWxlbWVudCgpO1xuICAgIGlucHV0LnJlYWRPbmx5ID0gc3RhdGU7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tbWVudHMgZWRpdG9yLlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICB0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSB0aGUgY29tbWVudHMgZWRpdG9yLlxuICAgKi9cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuaGlkZGVuKSB7XG4gICAgICB0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGVkaXRvciBpcyB2aXNpYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3JTdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFt2YWx1ZV0gVGhlIHZhbHVlIHRvIHVzZS5cbiAgICovXG4gIHNldFZhbHVlKCkge1xuICAgIGxldCB2YWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgY29uc3QgY29tbWVudCA9IHZhbHVlIHx8ICcnO1xuICAgIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWUgPSBjb21tZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWVudCB2YWx1ZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY29tbWVudCBpbnB1dCBlbGVtZW50IGlzIGZvY3VzZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNGb2N1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmdldElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBjb21tZW50cyBpbnB1dCBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXMoKSB7XG4gICAgdGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgYHRleHRhcmVhYCB0byBiZSB1c2VkIGFzIGEgY29tbWVudHMgZWRpdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBjcmVhdGVFZGl0b3IoKSB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgdGV4dEFyZWEgPSB0aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGVkaXRvci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCdkaXInLCB0aGlzLmlzUnRsID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLmNvbnRhaW5lciwgQ29tbWVudEVkaXRvci5DTEFTU19FRElUT1JfQ09OVEFJTkVSKTtcbiAgICB0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKGVkaXRvciwgQ29tbWVudEVkaXRvci5DTEFTU19FRElUT1IpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGV4dEFyZWEsIENvbW1lbnRFZGl0b3IuQ0xBU1NfSU5QVVQpO1xuICAgIHRleHRBcmVhLnNldEF0dHJpYnV0ZSgnZGF0YS1ob3QtaW5wdXQnLCB0cnVlKTtcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dEFyZWEpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVkaXRvcik7XG4gICAgcmV0dXJuIGVkaXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtIVE1MRWxlbWVudH1cbiAgICovXG4gIGdldElucHV0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0b3IucXVlcnlTZWxlY3RvcihgLiR7Q29tbWVudEVkaXRvci5DTEFTU19JTlBVVH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95IHRoZSBjb21tZW50cyBlZGl0b3IuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IGNvbnRhaW5lclBhcmVudEVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lciA/IHRoaXMuY29udGFpbmVyLnBhcmVudE5vZGUgOiBudWxsO1xuICAgIHRoaXMuZWRpdG9yLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lZGl0b3IpO1xuICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB0aGlzLmVkaXRvclN0eWxlID0gbnVsbDtcbiAgICBpZiAoY29udGFpbmVyUGFyZW50RWxlbWVudCkge1xuICAgICAgY29udGFpbmVyUGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcik7XG4gICAgfVxuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBDb21tZW50RWRpdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9ldmVudFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX2NvbW1lbnRFZGl0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbW1lbnRFZGl0b3JcIikpO1xudmFyIF9kaXNwbGF5U3dpdGNoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGlzcGxheVN3aXRjaFwiKSk7XG52YXIgX3ByZWRlZmluZWRJdGVtcyA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXNcIik7XG52YXIgX2FkZEVkaXRDb21tZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb250ZXh0TWVudUl0ZW0vYWRkRWRpdENvbW1lbnRcIikpO1xudmFyIF9yZW1vdmVDb21tZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb250ZXh0TWVudUl0ZW0vcmVtb3ZlQ29tbWVudFwiKSk7XG52YXIgX3JlYWRPbmx5Q29tbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL3JlYWRPbmx5Q29tbWVudFwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2NvbW1lbnRzJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gNjA7XG5jb25zdCBNRVRBX0NPTU1FTlQgPSBleHBvcnRzLk1FVEFfQ09NTUVOVCA9ICdjb21tZW50JztcbmNvbnN0IE1FVEFfQ09NTUVOVF9WQUxVRSA9IGV4cG9ydHMuTUVUQV9DT01NRU5UX1ZBTFVFID0gJ3ZhbHVlJztcbmNvbnN0IE1FVEFfU1RZTEUgPSBleHBvcnRzLk1FVEFfU1RZTEUgPSAnc3R5bGUnO1xuY29uc3QgTUVUQV9SRUFET05MWSA9IGV4cG9ydHMuTUVUQV9SRUFET05MWSA9ICdyZWFkT25seSc7XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSBQTFVHSU5fS0VZO1xuY29uc3QgU0hPUlRDVVRTX0NPTlRFWFRfTkFNRSA9IGBwbHVnaW46JHtQTFVHSU5fS0VZfWA7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQHBsdWdpbiBDb21tZW50c1xuICogQGNsYXNzIENvbW1lbnRzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3Mgc2V0dGluZyBhbmQgbWFuYWdpbmcgY2VsbCBjb21tZW50cyBieSBlaXRoZXIgYW4gb3B0aW9uIGluIHRoZSBjb250ZXh0IG1lbnUgb3Igd2l0aCB0aGUgdXNlIG9mXG4gKiB0aGUgQVBJLlxuICpcbiAqIFRvIGVuYWJsZSB0aGUgcGx1Z2luLCB5b3UnbGwgbmVlZCB0byBzZXQgdGhlIGNvbW1lbnRzIHByb3BlcnR5IG9mIHRoZSBjb25maWcgb2JqZWN0IHRvIGB0cnVlYDpcbiAqIGBgYGpzXG4gKiBjb21tZW50czogdHJ1ZVxuICogYGBgXG4gKlxuICogb3IgYW4gb2JqZWN0IHdpdGggZXh0cmEgcHJlZGVmaW5lZCBwbHVnaW4gY29uZmlnOlxuICpcbiAqIGBgYGpzXG4gKiBjb21tZW50czoge1xuICogICBkaXNwbGF5RGVsYXk6IDEwMDAsXG4gKiAgIHJlYWRPbmx5OiB0cnVlLFxuICogICBzdHlsZToge1xuICogICAgIHdpZHRoOiAzMDAsXG4gKiAgICAgaGVpZ2h0OiAxMDBcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogVG8gYWRkIGNvbW1lbnRzIGF0IHRoZSB0YWJsZSBpbml0aWFsaXphdGlvbiwgZGVmaW5lIHRoZSBgY29tbWVudGAgcHJvcGVydHkgaW4gdGhlIGBjZWxsYCBjb25maWcgYXJyYXkgYXMgaW4gYW4gZXhhbXBsZSBiZWxvdy5cbiAqXG4gKiBAZXhhbXBsZVxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyksIHtcbiAqICAgZGF0YTogZ2V0RGF0YSgpLFxuICogICBjb21tZW50czogdHJ1ZSxcbiAqICAgY2VsbDogW1xuICogICAgIHtyb3c6IDEsIGNvbDogMSwgY29tbWVudDoge3ZhbHVlOiAnRm9vJ319LFxuICogICAgIHtyb3c6IDIsIGNvbDogMiwgY29tbWVudDoge3ZhbHVlOiAnQmFyJ319XG4gKiAgIF1cbiAqIH0pO1xuICpcbiAqIC8vIEFjY2VzcyB0byB0aGUgQ29tbWVudHMgcGx1Z2luIGluc3RhbmNlOlxuICogY29uc3QgY29tbWVudHNQbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCdjb21tZW50cycpO1xuICpcbiAqIC8vIE1hbmFnZSBjb21tZW50cyBwcm9ncmFtbWF0aWNhbGx5OlxuICogY29tbWVudHNQbHVnaW4uc2V0Q29tbWVudEF0Q2VsbCgxLCA2LCAnQ29tbWVudCBjb250ZW50cycpO1xuICogY29tbWVudHNQbHVnaW4uc2hvd0F0Q2VsbCgxLCA2KTtcbiAqIGNvbW1lbnRzUGx1Z2luLnJlbW92ZUNvbW1lbnRBdENlbGwoMSwgNik7XG4gKlxuICogLy8gWW91IGNhbiBhbHNvIHNldCByYW5nZSBvbmNlIGFuZCB1c2UgcHJvcGVyIG1ldGhvZHM6XG4gKiBjb21tZW50c1BsdWdpbi5zZXRSYW5nZSh7ZnJvbToge3JvdzogMSwgY29sOiA2fX0pO1xuICogY29tbWVudHNQbHVnaW4uc2V0Q29tbWVudCgnQ29tbWVudCBjb250ZW50cycpO1xuICogY29tbWVudHNQbHVnaW4uc2hvdygpO1xuICogY29tbWVudHNQbHVnaW4ucmVtb3ZlQ29tbWVudCgpO1xuICogYGBgXG4gKiA6OjpcbiAqXG4gKiA6Ojogb25seS1mb3IgcmVhY3RcbiAqIGBgYGpzeFxuICogY29uc3QgaG90UmVmID0gdXNlUmVmKG51bGwpO1xuICpcbiAqIC4uLlxuICpcbiAqIDxIb3RUYWJsZVxuICogICByZWY9e2hvdFJlZn1cbiAqICAgZGF0YT17Z2V0RGF0YSgpfVxuICogICBjb21tZW50cz17dHJ1ZX1cbiAqICAgY2VsbD17W1xuICogICAgIHtyb3c6IDEsIGNvbDogMSwgY29tbWVudDoge3ZhbHVlOiAnRm9vJ319LFxuICogICAgIHtyb3c6IDIsIGNvbDogMiwgY29tbWVudDoge3ZhbHVlOiAnQmFyJ319XG4gKiAgIF19XG4gKiAvPlxuICpcbiAqIC8vIEFjY2VzcyB0byB0aGUgQ29tbWVudHMgcGx1Z2luIGluc3RhbmNlOlxuICogY29uc3QgaG90ID0gaG90UmVmLmN1cnJlbnQuaG90SW5zdGFuY2U7XG4gKiBjb25zdCBjb21tZW50c1BsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2NvbW1lbnRzJyk7XG4gKlxuICogLy8gTWFuYWdlIGNvbW1lbnRzIHByb2dyYW1tYXRpY2FsbHk6XG4gKiBjb21tZW50c1BsdWdpbi5zZXRDb21tZW50QXRDZWxsKDEsIDYsICdDb21tZW50IGNvbnRlbnRzJyk7XG4gKiBjb21tZW50c1BsdWdpbi5zaG93QXRDZWxsKDEsIDYpO1xuICogY29tbWVudHNQbHVnaW4ucmVtb3ZlQ29tbWVudEF0Q2VsbCgxLCA2KTtcbiAqXG4gKiAvLyBZb3UgY2FuIGFsc28gc2V0IHJhbmdlIG9uY2UgYW5kIHVzZSBwcm9wZXIgbWV0aG9kczpcbiAqIGNvbW1lbnRzUGx1Z2luLnNldFJhbmdlKHtmcm9tOiB7cm93OiAxLCBjb2w6IDZ9fSk7XG4gKiBjb21tZW50c1BsdWdpbi5zZXRDb21tZW50KCdDb21tZW50IGNvbnRlbnRzJyk7XG4gKiBjb21tZW50c1BsdWdpbi5zaG93KCk7XG4gKiBjb21tZW50c1BsdWdpbi5yZW1vdmVDb21tZW50KCk7XG4gKiBgYGBcbiAqIDo6OlxuICovXG52YXIgX2VkaXRvciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9kaXNwbGF5U3dpdGNoID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3ByZXZlbnRFZGl0b3JBdXRvU3dpdGNoID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3ByZXZlbnRFZGl0b3JIaWRpbmcgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfdGVtcEVkaXRvckRpbWVuc2lvbnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY2VsbEJlbG93Q3Vyc29yID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvbW1lbnRWYWx1ZUJlZm9yZVNhdmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfQ29tbWVudHNfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIENvbW1lbnRzIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogYG1vdXNlZG93bmAgZXZlbnQgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBgbW91c2Vkb3duYCBldmVudC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0NvbW1lbnRzX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBDdXJyZW50IGNlbGwgcmFuZ2UsIGFuIG9iamVjdCB3aXRoIGBmcm9tYCBwcm9wZXJ0eSwgd2l0aCBgcm93YCBhbmQgYGNvbGAgcHJvcGVydGllcyAoZS5xLiBge2Zyb206IHtyb3c6IDEsIGNvbDogNn19YCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJhbmdlXCIsIHt9KTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgQ29tbWVudEVkaXRvcn0uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtDb21tZW50RWRpdG9yfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9lZGl0b3IsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIHtAbGluayBEaXNwbGF5U3dpdGNofS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Rpc3BsYXlTd2l0Y2h9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2Rpc3BsYXlTd2l0Y2gsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHNob3dpbmcvaGlkaW5nIGVkaXRvciB0aGF0IHJlYWN0cyBvbiB0aGUgbG9naWMgdHJpZ2dlcmVkIGJ5IHRoZSBcIm1vdXNlb3ZlclwiIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ByZXZlbnRFZGl0b3JBdXRvU3dpdGNoLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogUHJldmVudHMgaGlkaW5nIGVkaXRvciB3aGVuIHRoZSB0YWJsZSB2aWV3cG9ydCBpcyBzY3JvbGxlZCBhbmQgdGhhdCBzY3JvbGwgaXMgdHJpZ2dlcmVkIGJ5IHRoZVxuICAgICAqIGtleWJvYXJkIHNob3J0Y3V0IHRoYXQgaW5zZXJ0IG9yIGVkaXRzIHRoZSBjb21tZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcHJldmVudEVkaXRvckhpZGluZywgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBwcm9wZXJ0eSBmb3IgaG9sZGluZyBlZGl0b3IgZGltZW5zaW9ucyBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90ZW1wRWRpdG9yRGltZW5zaW9ucywge30pO1xuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHRoYXQgYWxsb3dzIHByb2Nlc3NpbmcgbW91c2Vkb3duIGV2ZW50IGNvcnJlY3RseSB3aGVuIGNvbW1lbnRzIGVkaXRvciBpcyB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jZWxsQmVsb3dDdXJzb3IsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEhvbGRzIHRoZSBjb21tZW50IHZhbHVlIGJlZm9yZSBpdCdzIGFjdHVhbGx5IHNhdmVkIHRvIHRoZSBjZWxsIG1ldGEuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvbW1lbnRWYWx1ZUJlZm9yZVNhdmUsICcnKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIENvbW1lbnRzI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9lZGl0b3IsIHRoaXMsIG5ldyBfY29tbWVudEVkaXRvci5kZWZhdWx0KHRoaXMuaG90LnJvb3REb2N1bWVudCwgdGhpcy5ob3QuaXNSdGwoKSkpO1xuICAgIH1cbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGlzcGxheVN3aXRjaCwgdGhpcykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZGlzcGxheVN3aXRjaCwgdGhpcywgbmV3IF9kaXNwbGF5U3dpdGNoMi5kZWZhdWx0KHRoaXMuZ2V0RGlzcGxheURlbGF5U2V0dGluZygpKSk7XG4gICAgfVxuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zJywgb3B0aW9ucyA9PiB0aGlzLmFkZFRvQ29udGV4dE1lbnUob3B0aW9ucykpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSZW5kZXJlcicsIChURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcykgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbW1lbnRzX2JyYW5kLCB0aGlzLCBfb25BZnRlclJlbmRlcmVyKS5jYWxsKHRoaXMsIFRELCBjZWxsUHJvcGVydGllcykpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJTY3JvbGwnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29tbWVudHNfYnJhbmQsIHRoaXMsIF9vbkFmdGVyU2Nyb2xsKS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQmVnaW5FZGl0aW5nJywgKCkgPT4gdGhpcy5oaWRlKCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJEb2N1bWVudEtleURvd24nLCBldmVudCA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29tbWVudHNfYnJhbmQsIHRoaXMsIF9vbkFmdGVyRG9jdW1lbnRLZXlEb3duKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kaXNwbGF5U3dpdGNoLCB0aGlzKS5hZGRMb2NhbEhvb2soJ2hpZGUnLCAoKSA9PiB0aGlzLmhpZGUoKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kaXNwbGF5U3dpdGNoLCB0aGlzKS5hZGRMb2NhbEhvb2soJ3Nob3cnLCAocm93LCBjb2wpID0+IHRoaXMuc2hvd0F0Q2VsbChyb3csIGNvbCkpO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCk7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogICAtIFtgY29tbWVudHNgXShAL2FwaS9vcHRpb25zLm1kI2NvbW1lbnRzKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGlzcGxheVN3aXRjaCwgdGhpcykudXBkYXRlRGVsYXkodGhpcy5nZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBjb25zdCBncmlkQ29udGV4dCA9IG1hbmFnZXIuZ2V0Q29udGV4dCgnZ3JpZCcpO1xuICAgIGNvbnN0IHBsdWdpbkNvbnRleHQgPSBtYW5hZ2VyLmFkZENvbnRleHQoU0hPUlRDVVRTX0NPTlRFWFRfTkFNRSk7XG4gICAgZ3JpZENvbnRleHQuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snQ29udHJvbCcsICdBbHQnLCAnTSddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wcmV2ZW50RWRpdG9ySGlkaW5nLCB0aGlzLCB0cnVlKTtcbiAgICAgICAgdGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0VkaXRvcigpO1xuICAgICAgICAgIG1hbmFnZXIuc2V0QWN0aXZlQ29udGV4dE5hbWUoU0hPUlRDVVRTX0NPTlRFWFRfTkFNRSk7XG4gICAgICAgICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXZlbnRFZGl0b3JIaWRpbmcsIHRoaXMsIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgc3RvcFByb3BhZ2F0aW9uOiB0cnVlLFxuICAgICAgcnVuT25seUlmOiAoKSA9PiB7XG4gICAgICAgIHZhciBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQ7XG4gICAgICAgIHJldHVybiAoKF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkLmhpZ2hsaWdodC5pc0NlbGwoKSkgJiYgIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5pc1Zpc2libGUoKTtcbiAgICAgIH0sXG4gICAgICBncm91cDogU0hPUlRDVVRTX0dST1VQXG4gICAgfSk7XG4gICAgcGx1Z2luQ29udGV4dC5hZGRTaG9ydGN1dCh7XG4gICAgICBrZXlzOiBbWydFc2NhcGUnXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuc2V0VmFsdWUoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb21tZW50VmFsdWVCZWZvcmVTYXZlLCB0aGlzKSk7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICBtYW5hZ2VyLnNldEFjdGl2ZUNvbnRleHROYW1lKCdncmlkJyk7XG4gICAgICB9LFxuICAgICAgcnVuT25seUlmOiAoKSA9PiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuaXNWaXNpYmxlKCkgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLmlzRm9jdXNlZCgpLFxuICAgICAgZ3JvdXA6IFNIT1JUQ1VUU19HUk9VUFxuICAgIH0pO1xuICAgIHBsdWdpbkNvbnRleHQuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snQ29udHJvbC9NZXRhJywgJ0VudGVyJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIG1hbmFnZXIuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2dyaWQnKTtcbiAgICAgIH0sXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5pc1Zpc2libGUoKSAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuaXNGb2N1c2VkKCksXG4gICAgICBncm91cDogU0hPUlRDVVRTX0dST1VQXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbnRleHQgbWVudS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgnZ3JpZCcpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU0hPUlRDVVRTX0dST1VQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYWxsIG5lY2Vzc2FyeSBET00gbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm9vdERvY3VtZW50LCAnbW91c2VvdmVyJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbW1lbnRzX2JyYW5kLCB0aGlzLCBfb25Nb3VzZU92ZXIpLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3REb2N1bWVudCwgJ21vdXNlZG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db21tZW50c19icmFuZCwgdGhpcywgX29uTW91c2VEb3duKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RG9jdW1lbnQsICdtb3VzZXVwJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbW1lbnRzX2JyYW5kLCB0aGlzLCBfb25Nb3VzZVVwKS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGVkaXRvckVsZW1lbnQsICdmb2N1cycsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db21tZW50c19icmFuZCwgdGhpcywgX29uRWRpdG9yRm9jdXMpLmNhbGwodGhpcykpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZWRpdG9yRWxlbWVudCwgJ2JsdXInLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29tbWVudHNfYnJhbmQsIHRoaXMsIF9vbkVkaXRvckJsdXIpLmNhbGwodGhpcykpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZWRpdG9yRWxlbWVudCwgJ21vdXNlZG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db21tZW50c19icmFuZCwgdGhpcywgX29uRWRpdG9yTW91c2VEb3duKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihlZGl0b3JFbGVtZW50LCAnbW91c2V1cCcsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db21tZW50c19icmFuZCwgdGhpcywgX29uRWRpdG9yTW91c2VVcCkuY2FsbCh0aGlzLCBldmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGN1cnJlbnQgY2VsbCByYW5nZSB0byBiZSBhYmxlIHRvIHVzZSBnZW5lcmFsIG1ldGhvZHMgbGlrZSB7QGxpbmsgQ29tbWVudHMjc2V0Q29tbWVudH0sIHtAbGluayBDb21tZW50cyNyZW1vdmVDb21tZW50fSwge0BsaW5rIENvbW1lbnRzI3Nob3d9LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcmFuZ2UgT2JqZWN0IHdpdGggYGZyb21gIHByb3BlcnR5LCBlYWNoIHdpdGggYHJvd2AgYW5kIGBjb2xgIHByb3BlcnRpZXMuXG4gICAqL1xuICBzZXRSYW5nZShyYW5nZSkge1xuICAgIHRoaXMucmFuZ2UgPSByYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjZWxsLlxuICAgKi9cbiAgY2xlYXJSYW5nZSgpIHtcbiAgICB0aGlzLnJhbmdlID0ge307XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBldmVudCB0YXJnZXQgaXMgYSBjZWxsIGNvbnRhaW5pbmcgYSBjb21tZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBET00gZXZlbnQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQoZXZlbnQpIHtcbiAgICBjb25zdCBjbG9zZXN0Q2VsbCA9ICgwLCBfZWxlbWVudC5jbG9zZXN0KShldmVudC50YXJnZXQsICdURCcsICdUQk9EWScpO1xuICAgIHJldHVybiAhIShjbG9zZXN0Q2VsbCAmJiAoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGNsb3Nlc3RDZWxsLCAnaHRDb21tZW50Q2VsbCcpICYmICgwLCBfZWxlbWVudC5jbG9zZXN0KShjbG9zZXN0Q2VsbCwgW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgZXZlbnQgdGFyZ2V0IGlzIGEgY29tbWVudCB0ZXh0YXJlYS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgRE9NIGV2ZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHRhcmdldElzQ29tbWVudFRleHRBcmVhKGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCkgPT09IGV2ZW50LnRhcmdldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgY29tbWVudCBmb3IgYSBjZWxsIGFjY29yZGluZyB0byB0aGUgcHJldmlvdXNseSBzZXQgcmFuZ2UgKHNlZSB7QGxpbmsgQ29tbWVudHMjc2V0UmFuZ2V9KS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIENvbW1lbnQgY29udGVudHMuXG4gICAqL1xuICBzZXRDb21tZW50KHZhbHVlKSB7XG4gICAgaWYgKCF0aGlzLnJhbmdlLmZyb20pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbihcImNvbW1lbnRcIikuc2V0UmFuZ2UoKSknKTtcbiAgICB9XG4gICAgY29uc3QgZWRpdG9yVmFsdWUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuZ2V0VmFsdWUoKTtcbiAgICBsZXQgY29tbWVudCA9ICcnO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21tZW50ID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChlZGl0b3JWYWx1ZSAhPT0gbnVsbCAmJiBlZGl0b3JWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb21tZW50ID0gZWRpdG9yVmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IHRoaXMucmFuZ2UuZnJvbS5yb3c7XG4gICAgY29uc3QgY29sID0gdGhpcy5yYW5nZS5mcm9tLmNvbDtcbiAgICB0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHJvdywgY29sLCB7XG4gICAgICBbTUVUQV9DT01NRU5UX1ZBTFVFXTogY29tbWVudFxuICAgIH0pO1xuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjb21tZW50IGZvciBhIHNwZWNpZmllZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIENvbW1lbnQgY29udGVudHMuXG4gICAqL1xuICBzZXRDb21tZW50QXRDZWxsKHJvdywgY29sdW1uLCB2YWx1ZSkge1xuICAgIHRoaXMuc2V0UmFuZ2Uoe1xuICAgICAgZnJvbTogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pXG4gICAgfSk7XG4gICAgdGhpcy5zZXRDb21tZW50KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29tbWVudCBmcm9tIGEgY2VsbCBhY2NvcmRpbmcgdG8gcHJldmlvdXNseSBzZXQgcmFuZ2UgKHNlZSB7QGxpbmsgQ29tbWVudHMjc2V0UmFuZ2V9KS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VSZW5kZXI9dHJ1ZV0gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHRhYmxlIHdpbGwgYmUgcmUtcmVuZGVyZWQgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVtb3ZlQ29tbWVudCgpIHtcbiAgICBsZXQgZm9yY2VSZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gICAgaWYgKCF0aGlzLnJhbmdlLmZyb20pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbihcImNvbW1lbnRcIikuc2V0UmFuZ2UoKSknKTtcbiAgICB9XG4gICAgdGhpcy5ob3Quc2V0Q2VsbE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdywgdGhpcy5yYW5nZS5mcm9tLmNvbCwgTUVUQV9DT01NRU5UKTtcbiAgICBpZiAoZm9yY2VSZW5kZXIpIHtcbiAgICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICAgIH1cbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgY29tbWVudCBmcm9tIGEgc3BlY2lmaWVkIGNlbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZVJlbmRlcj10cnVlXSBJZiBgdHJ1ZWAsIHRoZSB0YWJsZSB3aWxsIGJlIHJlLXJlbmRlcmVkIGF0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICovXG4gIHJlbW92ZUNvbW1lbnRBdENlbGwocm93LCBjb2x1bW4pIHtcbiAgICBsZXQgZm9yY2VSZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgdGhpcy5zZXRSYW5nZSh7XG4gICAgICBmcm9tOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbilcbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZUNvbW1lbnQoZm9yY2VSZW5kZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29tbWVudCBmcm9tIGEgY2VsbCBhY2NvcmRpbmcgdG8gcHJldmlvdXNseSBzZXQgcmFuZ2UgKHNlZSB7QGxpbmsgQ29tbWVudHMjc2V0UmFuZ2V9KS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IFJldHVybnMgYSBjb250ZW50IG9mIHRoZSBjb21tZW50LlxuICAgKi9cbiAgZ2V0Q29tbWVudCgpIHtcbiAgICBjb25zdCByb3cgPSB0aGlzLnJhbmdlLmZyb20ucm93O1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMucmFuZ2UuZnJvbS5jb2w7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEocm93LCBjb2x1bW4sIE1FVEFfQ09NTUVOVF9WQUxVRSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb21tZW50IGZyb20gYSBjZWxsIGF0IHRoZSBwcm92aWRlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSBSZXR1cm5zIGEgY29udGVudCBvZiB0aGUgY29tbWVudC5cbiAgICovXG4gIGdldENvbW1lbnRBdENlbGwocm93LCBjb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShyb3csIGNvbHVtbiwgTUVUQV9DT01NRU5UX1ZBTFVFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgY29tbWVudCBlZGl0b3IgYWNjb3JkaW5nbHkgdG8gdGhlIHByZXZpb3VzbHkgc2V0IHJhbmdlIChzZWUge0BsaW5rIENvbW1lbnRzI3NldFJhbmdlfSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBjb21tZW50IGVkaXRvciB3YXMgc2hvd24uXG4gICAqL1xuICBzaG93KCkge1xuICAgIHZhciBfcmVmO1xuICAgIGlmICghdGhpcy5yYW5nZS5mcm9tKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oXCJjb21tZW50XCIpLnNldFJhbmdlKCkpJyk7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH1cbiAgICB9ID0gdGhpcy5yYW5nZTtcbiAgICBpZiAocm93IDwgMCB8fCByb3cgPiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSAtIDEgfHwgY29sIDwgMCB8fCBjb2wgPiB0aGlzLmhvdC5jb3VudFNvdXJjZUNvbHMoKSAtIDEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csIHRoaXMucmFuZ2UuZnJvbS5jb2wpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGlzcGxheVN3aXRjaCwgdGhpcykuY2FuY2VsSGlkaW5nKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLnNldFZhbHVlKChfcmVmID0gbWV0YVtNRVRBX0NPTU1FTlRdID8gbWV0YVtNRVRBX0NPTU1FTlRdW01FVEFfQ09NTUVOVF9WQUxVRV0gOiBudWxsKSAhPT0gbnVsbCAmJiBfcmVmICE9PSB2b2lkIDAgPyBfcmVmIDogJycpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5zaG93KCk7XG4gICAgdGhpcy5yZWZyZXNoRWRpdG9yKHRydWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGNvbW1lbnQgZWRpdG9yIGFjY29yZGluZyB0byBjZWxsIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGNvbW1lbnQgZWRpdG9yIHdhcyBzaG93bi5cbiAgICovXG4gIHNob3dBdENlbGwocm93LCBjb2x1bW4pIHtcbiAgICB0aGlzLnNldFJhbmdlKHtcbiAgICAgIGZyb206IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnNob3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY29tbWVudCBlZGl0b3IuXG4gICAqL1xuICBoaWRlKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5oaWRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIGNvbW1lbnQgZWRpdG9yIHBvc2l0aW9uIGFuZCBzdHlsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gSWYgYHRydWVgIHRoZW4gcmVjYWxjdWxhdGlvbiB3aWxsIGJlIGZvcmNlZC5cbiAgICovXG4gIHJlZnJlc2hFZGl0b3IoKSB7XG4gICAgdmFyIF9yZW5kZXJhYmxlUm93LCBfcmVuZGVyYWJsZUNvbHVtbjtcbiAgICBsZXQgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGlmICghZm9yY2UgJiYgKCF0aGlzLnJhbmdlLmZyb20gfHwgIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5pc1Zpc2libGUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgcm93SW5kZXhNYXBwZXIsXG4gICAgICBjb2x1bW5JbmRleE1hcHBlclxuICAgIH0gPSB0aGlzLmhvdDtcbiAgICBjb25zdCB7XG4gICAgICByb3c6IHZpc3VhbFJvdyxcbiAgICAgIGNvbDogdmlzdWFsQ29sdW1uXG4gICAgfSA9IHRoaXMucmFuZ2UuZnJvbTtcbiAgICBsZXQgcmVuZGVyYWJsZVJvdyA9IHJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsUm93KTtcbiAgICBsZXQgcmVuZGVyYWJsZUNvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsQ29sdW1uKTtcbiAgICAvLyBVc2VkIHdoZW4gdGhlIHJlcXVlc3RlZCByb3cgaXMgaGlkZGVuLCBhbmQgdGhlIGVkaXRvciBuZWVkcyB0byBiZSBwb3NpdGlvbmVkIG9uIHRoZSBwcmV2aW91cyByb3cncyBjb29yZHMuXG4gICAgY29uc3QgdGFyZ2V0aW5nUHJldmlvdXNSb3cgPSByZW5kZXJhYmxlUm93ID09PSBudWxsO1xuXG4gICAgLy8gUmVzZXQgdGhlIGVkaXRvciBwb3NpdGlvbiB0byAoMCwgMCkgc28gdGhlIG9wZW5pbmcgZGlyZWN0aW9uIGNhbGN1bGF0aW9uIHdvdWxkbid0IGJlIGluZmx1ZW5jZWQgYnkgaXRzXG4gICAgLy8gcHJldmlvdXMgcG9zaXRpb25cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuc2V0UG9zaXRpb24oMCwgMCk7XG4gICAgaWYgKHJlbmRlcmFibGVSb3cgPT09IG51bGwpIHtcbiAgICAgIHJlbmRlcmFibGVSb3cgPSByb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxSb3csIC0xKSk7XG4gICAgfVxuICAgIGlmIChyZW5kZXJhYmxlQ29sdW1uID09PSBudWxsKSB7XG4gICAgICByZW5kZXJhYmxlQ29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmlzdWFsQ29sdW1uLCAtMSkpO1xuICAgIH1cbiAgICBjb25zdCBpc0JlZm9yZVJlbmRlcmVkUm93cyA9IHJlbmRlcmFibGVSb3cgPT09IG51bGw7XG4gICAgY29uc3QgaXNCZWZvcmVSZW5kZXJlZENvbHVtbnMgPSByZW5kZXJhYmxlQ29sdW1uID09PSBudWxsO1xuICAgIHJlbmRlcmFibGVSb3cgPSAoX3JlbmRlcmFibGVSb3cgPSByZW5kZXJhYmxlUm93KSAhPT0gbnVsbCAmJiBfcmVuZGVyYWJsZVJvdyAhPT0gdm9pZCAwID8gX3JlbmRlcmFibGVSb3cgOiAwO1xuICAgIHJlbmRlcmFibGVDb2x1bW4gPSAoX3JlbmRlcmFibGVDb2x1bW4gPSByZW5kZXJhYmxlQ29sdW1uKSAhPT0gbnVsbCAmJiBfcmVuZGVyYWJsZUNvbHVtbiAhPT0gdm9pZCAwID8gX3JlbmRlcmFibGVDb2x1bW4gOiAwO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3csXG4gICAgICB2aWV3OiB7XG4gICAgICAgIF93dDogd3RcbiAgICAgIH1cbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgY29uc3Qge1xuICAgICAgd3RUYWJsZVxuICAgIH0gPSB3dDtcbiAgICAvLyBUT0RPOiBQcm9iYWJseSB1c2luZyBgaG90LmdldENlbGxgIHdvdWxkIGJlIHRoZSBiZXN0LiBIb3dldmVyLCBjYXNlIGZvciBzaG93aW5nIGNvbW1lbnQgZWRpdG9yIGZvciBoaWRkZW4gY2VsbFxuICAgIC8vIHBvdGVudGlhbGx5IHNob3VsZCBiZSByZW1vdmVkIHdpdGggdGhhdCBjaGFuZ2UgKGN1cnJlbnRseSBhIHRlc3QgZm9yIGl0IGlzIHBhc3NpbmcpLlxuICAgIGNvbnN0IFREID0gd3QuZ2V0Q2VsbCh7XG4gICAgICByb3c6IHJlbmRlcmFibGVSb3csXG4gICAgICBjb2w6IHJlbmRlcmFibGVDb2x1bW5cbiAgICB9LCB0cnVlKTtcbiAgICBjb25zdCBjb21tZW50U3R5bGUgPSB0aGlzLmdldENvbW1lbnRNZXRhKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uLCBNRVRBX1NUWUxFKTtcbiAgICBpZiAoY29tbWVudFN0eWxlKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuc2V0U2l6ZShjb21tZW50U3R5bGUud2lkdGgsIGNvbW1lbnRTdHlsZS5oZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykucmVzZXRTaXplKCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RDb2xXaWR0aCA9IGlzQmVmb3JlUmVuZGVyZWRDb2x1bW5zID8gMCA6IHd0VGFibGUuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgocmVuZGVyYWJsZUNvbHVtbik7XG4gICAgY29uc3QgbGFzdFJvd0hlaWdodCA9IHRhcmdldGluZ1ByZXZpb3VzUm93ICYmICFpc0JlZm9yZVJlbmRlcmVkUm93cyA/ICgwLCBfZWxlbWVudC5vdXRlckhlaWdodCkoVEQpIDogMDtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGg6IGNlbGxXaWR0aCxcbiAgICAgIGhlaWdodDogY2VsbEhlaWdodFxuICAgIH0gPSBURC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aDogZWRpdG9yV2lkdGgsXG4gICAgICBoZWlnaHQ6IGVkaXRvckhlaWdodFxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuZ2V0U2l6ZSgpO1xuICAgIGNvbnN0IHtcbiAgICAgIGlubmVyV2lkdGgsXG4gICAgICBpbm5lckhlaWdodFxuICAgIH0gPSB0aGlzLmhvdC5yb290V2luZG93O1xuICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgbGV0IHggPSBsZWZ0ICsgcm9vdFdpbmRvdy5zY3JvbGxYICsgbGFzdENvbFdpZHRoO1xuICAgIGxldCB5ID0gdG9wICsgcm9vdFdpbmRvdy5zY3JvbGxZICsgbGFzdFJvd0hlaWdodDtcbiAgICBpZiAodGhpcy5ob3QuaXNSdGwoKSkge1xuICAgICAgeCAtPSBlZGl0b3JXaWR0aCArIGxhc3RDb2xXaWR0aDtcbiAgICB9XG5cbiAgICAvLyBmbGlwIHRvIHRoZSByaWdodCBvciBsZWZ0IHRoZSBjb21tZW50cyBlZGl0b3IgcG9zaXRpb24gd2hlbiBpdCBnb2VzIG91dCBvZiBicm93c2VyIHZpZXdwb3J0XG4gICAgaWYgKHRoaXMuaG90LmlzTHRyKCkgJiYgbGVmdCArIGNlbGxXaWR0aCArIGVkaXRvcldpZHRoID4gaW5uZXJXaWR0aCkge1xuICAgICAgeCA9IGxlZnQgKyByb290V2luZG93LnNjcm9sbFggLSBlZGl0b3JXaWR0aCAtIDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLmhvdC5pc1J0bCgpICYmIHggPCAtKGRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCAtIGRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkpIHtcbiAgICAgIHggPSBsZWZ0ICsgcm9vdFdpbmRvdy5zY3JvbGxYICsgbGFzdENvbFdpZHRoICsgMTtcbiAgICB9XG4gICAgaWYgKHRvcCArIGVkaXRvckhlaWdodCA+IGlubmVySGVpZ2h0KSB7XG4gICAgICB5IC09IGVkaXRvckhlaWdodCAtIGNlbGxIZWlnaHQgKyAxO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuc2V0UG9zaXRpb24oeCwgeSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLnNldFJlYWRPbmx5U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YSh2aXN1YWxSb3csIHZpc3VhbENvbHVtbiwgTUVUQV9SRUFET05MWSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGNvbW1lbnRzIGVkaXRvciBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXNFZGl0b3IoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLmZvY3VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvciB1cGRhdGUgdGhlIGNvbW1lbnQtcmVsYXRlZCBjZWxsIG1ldGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWV0YU9iamVjdCBPYmplY3QgZGVmaW5pbmcgYWxsIHRoZSBjb21tZW50LXJlbGF0ZWQgbWV0YSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHVwZGF0ZUNvbW1lbnRNZXRhKHJvdywgY29sdW1uLCBtZXRhT2JqZWN0KSB7XG4gICAgY29uc3Qgb2xkQ29tbWVudCA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKVtNRVRBX0NPTU1FTlRdO1xuICAgIGxldCBuZXdDb21tZW50O1xuICAgIGlmIChvbGRDb21tZW50KSB7XG4gICAgICBuZXdDb21tZW50ID0gKDAsIF9vYmplY3QuZGVlcENsb25lKShvbGRDb21tZW50KTtcbiAgICAgICgwLCBfb2JqZWN0LmRlZXBFeHRlbmQpKG5ld0NvbW1lbnQsIG1ldGFPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdDb21tZW50ID0gbWV0YU9iamVjdDtcbiAgICB9XG4gICAgdGhpcy5ob3Quc2V0Q2VsbE1ldGEocm93LCBjb2x1bW4sIE1FVEFfQ09NTUVOVCwgbmV3Q29tbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29tbWVudCByZWxhdGVkIG1ldGEgaW5mb3JtYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgQ2VsbCBtZXRhIHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7TWl4ZWR9XG4gICAqL1xuICBnZXRDb21tZW50TWV0YShyb3csIGNvbHVtbiwgcHJvcGVydHkpIHtcbiAgICBjb25zdCBjZWxsTWV0YSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICBpZiAoIWNlbGxNZXRhW01FVEFfQ09NTUVOVF0pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBjZWxsTWV0YVtNRVRBX0NPTU1FTlRdW3Byb3BlcnR5XTtcbiAgfVxuICAvKipcbiAgICogQWRkIENvbW1lbnRzIHBsdWdpbiBvcHRpb25zIHRvIHRoZSBDb250ZXh0IE1lbnUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFRoZSBtZW51IG9wdGlvbnMuXG4gICAqL1xuICBhZGRUb0NvbnRleHRNZW51KG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgICAgbmFtZTogX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1JcbiAgICB9LCAoMCwgX2FkZEVkaXRDb21tZW50LmRlZmF1bHQpKHRoaXMpLCAoMCwgX3JlbW92ZUNvbW1lbnQuZGVmYXVsdCkodGhpcyksICgwLCBfcmVhZE9ubHlDb21tZW50LmRlZmF1bHQpKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYGRpc3BsYXlEZWxheWAgc2V0dGluZyBvZiBjb21tZW50IHBsdWdpbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge251bWJlcnx1bmRlZmluZWR9XG4gICAqL1xuICBnZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkge1xuICAgIGNvbnN0IGNvbW1lbnRTZXR0aW5nID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKGNvbW1lbnRTZXR0aW5nKSkge1xuICAgICAgcmV0dXJuIGNvbW1lbnRTZXR0aW5nLmRpc3BsYXlEZWxheTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZWRpdG9ycyBpbnB1dCBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7SFRNTFRleHRBcmVhRWxlbWVudH1cbiAgICovXG4gIGdldEVkaXRvcklucHV0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLmdldElucHV0RWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZWRpdG9yLCB0aGlzKS5kZXN0cm95KCk7XG4gICAgfVxuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2Rpc3BsYXlTd2l0Y2gsIHRoaXMpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2Rpc3BsYXlTd2l0Y2gsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkNvbW1lbnRzID0gQ29tbWVudHM7XG5mdW5jdGlvbiBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgaWYgKCF0aGlzLmhvdC52aWV3IHx8ICF0aGlzLmhvdC52aWV3Ll93dCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJldmVudEVkaXRvckF1dG9Td2l0Y2gsIHRoaXMpICYmICF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGV2ZW50KSkge1xuICAgIGNvbnN0IGV2ZW50Q2VsbCA9ICgwLCBfZWxlbWVudC5jbG9zZXN0KShldmVudC50YXJnZXQsICdURCcsICdUQk9EWScpO1xuICAgIGxldCBjb29yZGluYXRlcyA9IG51bGw7XG4gICAgaWYgKGV2ZW50Q2VsbCkge1xuICAgICAgY29vcmRpbmF0ZXMgPSB0aGlzLmhvdC5nZXRDb29yZHMoZXZlbnRDZWxsKTtcbiAgICB9XG4gICAgaWYgKCFldmVudENlbGwgfHwgdGhpcy5yYW5nZS5mcm9tICYmIGNvb3JkaW5hdGVzICYmICh0aGlzLnJhbmdlLmZyb20ucm93ICE9PSBjb29yZGluYXRlcy5yb3cgfHwgdGhpcy5yYW5nZS5mcm9tLmNvbCAhPT0gY29vcmRpbmF0ZXMuY29sKSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIGBtb3VzZW92ZXJgIGV2ZW50IGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIGBtb3VzZW92ZXJgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBfb25Nb3VzZU92ZXIoZXZlbnQpIHtcbiAgY29uc3Qge1xuICAgIHJvb3REb2N1bWVudFxuICB9ID0gdGhpcy5ob3Q7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3ByZXZlbnRFZGl0b3JBdXRvU3dpdGNoLCB0aGlzKSB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykuaXNGb2N1c2VkKCkgfHwgKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICd3dEJvcmRlcicpIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbEJlbG93Q3Vyc29yLCB0aGlzKSA9PT0gZXZlbnQudGFyZ2V0IHx8ICFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VkaXRvciwgdGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jZWxsQmVsb3dDdXJzb3IsIHRoaXMsIHJvb3REb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpKTtcbiAgaWYgKHRoaXMudGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQoZXZlbnQpKSB7XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhldmVudC50YXJnZXQpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2Rpc3BsYXlTd2l0Y2gsIHRoaXMpLnNob3cocmFuZ2UpO1xuICB9IGVsc2UgaWYgKCgwLCBfZWxlbWVudC5pc0NoaWxkT2YpKGV2ZW50LnRhcmdldCwgcm9vdERvY3VtZW50KSAmJiAhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShldmVudCkpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2Rpc3BsYXlTd2l0Y2gsIHRoaXMpLmhpZGUoKTtcbiAgfVxufVxuLyoqXG4gKiBgbW91c2V1cGAgZXZlbnQgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIF9vbk1vdXNlVXAoKSB7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcHJldmVudEVkaXRvckF1dG9Td2l0Y2gsIHRoaXMsIGZhbHNlKTtcbn1cbi8qKlxuICogVGhlIGBhZnRlclJlbmRlcmVyYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFRoZSByZW5kZXJlZCBgVERgIGVsZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIHJlbmRlcmVkIGNlbGwncyBwcm9wZXJ0eSBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyUmVuZGVyZXIoVEQsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIGlmIChjZWxsUHJvcGVydGllc1tNRVRBX0NPTU1FTlRdICYmIGNlbGxQcm9wZXJ0aWVzW01FVEFfQ09NTUVOVF1bTUVUQV9DT01NRU5UX1ZBTFVFXSkge1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoVEQsIGNlbGxQcm9wZXJ0aWVzLmNvbW1lbnRlZENlbGxDbGFzc05hbWUpO1xuICB9XG59XG4vKipcbiAqIEhvb2sgb2JzZXJ2ZXIgdGhlIFwiYmx1clwiIGV2ZW50IGZyb20gdGhlIGNvbW1lbnRzIGVkaXRvciBlbGVtZW50LiBUaGUgaG9vayBjbGVhcnMgdGhlXG4gKiBlZGl0b3IgY29udGVudCBhbmQgZ2l2ZXMgYmFjayB0aGUga2V5Ym9hcmQgc2hvcnRjdXRzIGNvbnRyb2wgYnkgc3dpdGNoaW5nIHRvIHRoZSBcImdyaWRcIiBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBfb25FZGl0b3JCbHVyKCkge1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvbW1lbnRWYWx1ZUJlZm9yZVNhdmUsIHRoaXMsICcnKTtcbiAgdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoJ2dyaWQnKTtcbiAgdGhpcy5zZXRDb21tZW50KCk7XG59XG4vKipcbiAqIEhvb2sgb2JzZXJ2ZXIgdGhlIFwiZm9jdXNcIiBldmVudCBmcm9tIHRoZSBjb21tZW50cyBlZGl0b3IgZWxlbWVudC4gVGhlIGhvb2sgdGFrZXMgdGhlIGNvbnRyb2wgb2ZcbiAqIHRoZSBrZXlib2FyZCBzaG9ydGN1dHMgYnkgc3dpdGNoaW5nIHRoZSBjb250ZXh0IHRvIHBsdWdpbnMgb25lLlxuICovXG5mdW5jdGlvbiBfb25FZGl0b3JGb2N1cygpIHtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb21tZW50VmFsdWVCZWZvcmVTYXZlLCB0aGlzLCB0aGlzLmdldENvbW1lbnQoKSk7XG4gIHRoaXMuaG90Lmxpc3RlbigpO1xuICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZShTSE9SVENVVFNfQ09OVEVYVF9OQU1FKTtcbn1cbi8qKlxuICogYG1vdXNlZG93bmAgaG9vay4gQWxvbmcgd2l0aCBgb25FZGl0b3JNb3VzZVVwYCB1c2VkIHRvIHNpbXVsYXRlIHRoZSB0ZXh0YXJlYSByZXNpemluZyBldmVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBgbW91c2Vkb3duYCBldmVudC5cbiAqL1xuZnVuY3Rpb24gX29uRWRpdG9yTW91c2VEb3duKGV2ZW50KSB7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfdGVtcEVkaXRvckRpbWVuc2lvbnMsIHRoaXMsIHtcbiAgICB3aWR0aDogKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKGV2ZW50LnRhcmdldCksXG4gICAgaGVpZ2h0OiAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKGV2ZW50LnRhcmdldClcbiAgfSk7XG59XG4vKipcbiAqIGBtb3VzZXVwYCBob29rLiBBbG9uZyB3aXRoIGBvbkVkaXRvck1vdXNlRG93bmAgdXNlZCB0byBzaW11bGF0ZSB0aGUgdGV4dGFyZWEgcmVzaXppbmcgZXZlbnQuXG4gKlxuICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgYG1vdXNldXBgIGV2ZW50LlxuICovXG5mdW5jdGlvbiBfb25FZGl0b3JNb3VzZVVwKGV2ZW50KSB7XG4gIGNvbnN0IGN1cnJlbnRXaWR0aCA9ICgwLCBfZWxlbWVudC5vdXRlcldpZHRoKShldmVudC50YXJnZXQpO1xuICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KShldmVudC50YXJnZXQpO1xuICBpZiAoY3VycmVudFdpZHRoICE9PSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RlbXBFZGl0b3JEaW1lbnNpb25zLCB0aGlzKS53aWR0aCArIDEgfHwgY3VycmVudEhlaWdodCAhPT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90ZW1wRWRpdG9yRGltZW5zaW9ucywgdGhpcykuaGVpZ2h0ICsgMikge1xuICAgIHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdywgdGhpcy5yYW5nZS5mcm9tLmNvbCwge1xuICAgICAgW01FVEFfU1RZTEVdOiB7XG4gICAgICAgIHdpZHRoOiBjdXJyZW50V2lkdGgsXG4gICAgICAgIGhlaWdodDogY3VycmVudEhlaWdodFxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIE9ic2VydmVzIHRoZSBwcmVzc2VkIGtleXMgYW5kIGlmIHRoZXJlIGlzIGFscmVhZHkgb3BlbmVkIHRoZSBjb21tZW50IGVkaXRvciBwcmV2ZW50cyBvcGVuXG4gKiB0aGUgdGFibGUgZWRpdG9yIGludG8gdGhlIGZhc3QgZWRpdCBtb2RlLlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBrZXlkb3duIGV2ZW50LlxuICovXG5mdW5jdGlvbiBfb25BZnRlckRvY3VtZW50S2V5RG93bihldmVudCkge1xuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lZGl0b3IsIHRoaXMpLmlzVmlzaWJsZSgpKSB7XG4gICAgKDAsIF9ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pKGV2ZW50KTtcbiAgfVxufVxuLyoqXG4gKiBPYnNlcnZlcyB0aGUgY2hhbmdlcyBpbiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlmIHRyaWdnZXJlZCBpdCBoaWRlcyB0aGUgY29tbWVudCBlZGl0b3IuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyU2Nyb2xsKCkge1xuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJldmVudEVkaXRvckhpZGluZywgdGhpcykpIHtcbiAgICB0aGlzLmhpZGUoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gYWRkRWRpdENvbW1lbnRJdGVtO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0NvbW1lbnRzfSBwbHVnaW4gVGhlIENvbW1lbnRzIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGFkZEVkaXRDb21tZW50SXRlbShwbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdjb21tZW50c0FkZEVkaXQnLFxuICAgIG5hbWUoKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0U2VsZWN0ZWRSYW5nO1xuICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gKF90aGlzJGdldFNlbGVjdGVkUmFuZyA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX3RoaXMkZ2V0U2VsZWN0ZWRSYW5nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRnZXRTZWxlY3RlZFJhbmcuaGlnaGxpZ2h0O1xuICAgICAgaWYgKGhpZ2hsaWdodCAhPT0gbnVsbCAmJiBoaWdobGlnaHQgIT09IHZvaWQgMCAmJiBoaWdobGlnaHQuaXNDZWxsKCkgJiYgcGx1Z2luLmdldENvbW1lbnRBdENlbGwoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0VESVRfQ09NTUVOVCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQpO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIHBsdWdpbi5zZXRSYW5nZShyYW5nZSk7XG4gICAgICBwbHVnaW4uc2hvdygpO1xuICAgICAgcGx1Z2luLmZvY3VzRWRpdG9yKCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS5oaWdobGlnaHQuaXNIZWFkZXIoKSB8fCB0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkgJiYgdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpIHx8IHRoaXMuY291bnRSZW5kZXJlZFJvd3MoKSA9PT0gMCB8fCB0aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVhZE9ubHlDb21tZW50SXRlbTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vY29udGV4dE1lbnUvdXRpbHNcIik7XG52YXIgX2NvbW1lbnRzID0gcmVxdWlyZShcIi4uL2NvbW1lbnRzXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0NvbW1lbnRzfSBwbHVnaW4gVGhlIENvbW1lbnRzIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlYWRPbmx5Q29tbWVudEl0ZW0ocGx1Z2luKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiAnY29tbWVudHNSZWFkT25seScsXG4gICAgbmFtZSgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQpO1xuICAgICAgY29uc3QgYXJlUmVhZE9ubHkgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kpKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLCAocm93LCBjb2wpID0+IHtcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5nZXRDb21tZW50TWV0YShyb3csIGNvbCwgX2NvbW1lbnRzLk1FVEFfUkVBRE9OTFkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gYXJlUmVhZE9ubHkgPyAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKSA6IGxhYmVsO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIHJhbmdlLmZvckFsbCgocm93LCBjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKHJvdyA+PSAwICYmIGNvbHVtbiA+PSAwKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gISFwbHVnaW4uZ2V0Q29tbWVudE1ldGEocm93LCBjb2x1bW4sIF9jb21tZW50cy5NRVRBX1JFQURPTkxZKTtcbiAgICAgICAgICBwbHVnaW4udXBkYXRlQ29tbWVudE1ldGEocm93LCBjb2x1bW4sIHtcbiAgICAgICAgICAgIFtfY29tbWVudHMuTUVUQV9SRUFET05MWV06ICFjdXJyZW50U3RhdGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSB8fCByYW5nZS5oaWdobGlnaHQuaXNIZWFkZXIoKSB8fCAhcGx1Z2luLmdldENvbW1lbnRBdENlbGwocmFuZ2UuaGlnaGxpZ2h0LnJvdywgcmFuZ2UuaGlnaGxpZ2h0LmNvbCkgfHwgdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dTZWxlY3RlZCgpICYmIHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSB8fCB0aGlzLmNvdW50UmVuZGVyZWRSb3dzKCkgPT09IDAgfHwgdGhpcy5jb3VudFJlbmRlcmVkQ29scygpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJlbW92ZUNvbW1lbnRJdGVtO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0NvbW1lbnRzfSBwbHVnaW4gVGhlIENvbW1lbnRzIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnRJdGVtKHBsdWdpbikge1xuICByZXR1cm4ge1xuICAgIGtleTogJ2NvbW1lbnRzUmVtb3ZlJyxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT01NRU5UKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICByYW5nZS5mb3JBbGwoKHJvdywgY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChyb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCkge1xuICAgICAgICAgIHBsdWdpbi5yZW1vdmVDb21tZW50QXRDZWxsKHJvdywgY29sdW1uLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9LFxuICAgIGRpc2FibGVkKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLmhpZ2hsaWdodC5pc0hlYWRlcigpIHx8IHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSAmJiB0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCkgfHwgdGhpcy5jb3VudFJlbmRlcmVkUm93cygpID09PSAwIHx8IHRoaXMuY291bnRSZW5kZXJlZENvbHMoKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2xvY2FsSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9taXhpbnMvbG9jYWxIb29rc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5jb25zdCBERUZBVUxUX0RJU1BMQVlfREVMQVkgPSAyNTA7XG5jb25zdCBERUZBVUxUX0hJREVfREVMQVkgPSAyNTA7XG5cbi8qKlxuICogRGlzcGxheSBzd2l0Y2ggZm9yIHRoZSBDb21tZW50cyBwbHVnaW4uIE1hbmFnZXMgdGhlIHRpbWUgb2YgZGVsYXllZCBkaXNwbGF5aW5nIC8gaGlkaW5nIGNvbW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgRGlzcGxheVN3aXRjaFxuICovXG5jbGFzcyBEaXNwbGF5U3dpdGNoIHtcbiAgY29uc3RydWN0b3IoZGlzcGxheURlbGF5KSB7XG4gICAgLyoqXG4gICAgICogRmxhZyB0byBkZXRlcm1pbmUgaWYgY29tbWVudCBjYW4gYmUgc2hvd2VkIG9yIGhpZGRlbi4gU3RhdGUgYHRydWVgIG1lYW4gdGhhdCBsYXN0IHBlcmZvcm1lZCBhY3Rpb25cbiAgICAgKiB3YXMgYW4gYXR0ZW1wdCB0byBzaG93IGNvbW1lbnQgZWxlbWVudC4gU3RhdGUgYGZhbHNlYCBtZWFuIHRoYXQgaXQgd2FzIGF0dGVtcHQgdG8gaGlkZSBjb21tZW50IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ3YXNMYXN0QWN0aW9uU2hvd1wiLCB0cnVlKTtcbiAgICAvKipcbiAgICAgKiBTaG93IGNvbW1lbnQgYWZ0ZXIgcHJlZGVmaW5lZCBkZWxheS4gSXQga2VlcHMgcmVmZXJlbmNlIHRvIGltbXV0YWJsZSBgZGVib3VuY2VgIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNob3dEZWJvdW5jZWRcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRpbWVyLCBydW4gYnkgYHNldFRpbWVvdXRgLCB3aGljaCBpcyBoaWRpbmcgY29tbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGlkaW5nVGltZXJcIiwgbnVsbCk7XG4gICAgdGhpcy51cGRhdGVEZWxheShkaXNwbGF5RGVsYXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3BvbnNpYmxlIGZvciBoaWRpbmcgY29tbWVudCBhZnRlciBwcm9wZXIgZGVsYXkuXG4gICAqL1xuICBoaWRlKCkge1xuICAgIHRoaXMud2FzTGFzdEFjdGlvblNob3cgPSBmYWxzZTtcbiAgICB0aGlzLmhpZGluZ1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy53YXNMYXN0QWN0aW9uU2hvdyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdoaWRlJyk7XG4gICAgICB9XG4gICAgfSwgREVGQVVMVF9ISURFX0RFTEFZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNwb25zaWJsZSBmb3Igc2hvd2luZyBjb21tZW50IGFmdGVyIHByb3BlciBkZWxheS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlIENvb3JkaW5hdGVzIG9mIHNlbGVjdGVkIGNlbGwuXG4gICAqL1xuICBzaG93KHJhbmdlKSB7XG4gICAgdGhpcy53YXNMYXN0QWN0aW9uU2hvdyA9IHRydWU7XG4gICAgdGhpcy5zaG93RGVib3VuY2VkKHJhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgaGlkaW5nIGNvbW1lbnQuXG4gICAqL1xuICBjYW5jZWxIaWRpbmcoKSB7XG4gICAgdGhpcy53YXNMYXN0QWN0aW9uU2hvdyA9IHRydWU7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpO1xuICAgIHRoaXMuaGlkaW5nVGltZXIgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgc3dpdGNoIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGlzcGxheURlbGF5IERlbGF5IG9mIHNob3dpbmcgdGhlIGNvbW1lbnRzIChpbiBtaWxsaXNlY29uZHMpLlxuICAgKi9cbiAgdXBkYXRlRGVsYXkoKSB7XG4gICAgbGV0IGRpc3BsYXlEZWxheSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogREVGQVVMVF9ESVNQTEFZX0RFTEFZO1xuICAgIHRoaXMuc2hvd0RlYm91bmNlZCA9ICgwLCBfZnVuY3Rpb24uZGVib3VuY2UpKHJhbmdlID0+IHtcbiAgICAgIGlmICh0aGlzLndhc0xhc3RBY3Rpb25TaG93KSB7XG4gICAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnc2hvdycsIHJhbmdlLmZyb20ucm93LCByYW5nZS5mcm9tLmNvbCk7XG4gICAgICB9XG4gICAgfSwgZGlzcGxheURlbGF5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95IHRoZSBzd2l0Y2hlci5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckxvY2FsSG9va3MoKTtcbiAgfVxufVxuKDAsIF9vYmplY3QubWl4aW4pKERpc3BsYXlTd2l0Y2gsIF9sb2NhbEhvb2tzLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gRGlzcGxheVN3aXRjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfY29tbWVudHMgPSByZXF1aXJlKFwiLi9jb21tZW50c1wiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9jb21tZW50cy5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfY29tbWVudHMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5Db21tZW50cyA9IF9jb21tZW50cy5Db21tZW50czsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2hpZnQuanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBDb21tYW5kIGV4ZWN1dG9yIGZvciBDb250ZXh0TWVudS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIENvbW1hbmRFeGVjdXRvclxuICovXG5jbGFzcyBDb21tYW5kRXhlY3V0b3Ige1xuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29tbWFuZHNcIiwge30pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21tb25DYWxsYmFja1wiLCBudWxsKTtcbiAgICB0aGlzLmhvdCA9IGhvdEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENvbW1hbmQgbmFtZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbW1hbmREZXNjcmlwdG9yIENvbW1hbmQgZGVzY3JpcHRvciBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGxpa2UgYGtleWAgKGNvbW1hbmQgaWQpLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhbGxiYWNrYCAodGFzayB0byBleGVjdXRlKSwgYG5hbWVgIChjb21tYW5kIG5hbWUpLCBgZGlzYWJsZWRgIChjb21tYW5kIGF2YWlsYWJpbGl0eSkuXG4gICAqL1xuICByZWdpc3RlckNvbW1hbmQobmFtZSwgY29tbWFuZERlc2NyaXB0b3IpIHtcbiAgICB0aGlzLmNvbW1hbmRzW25hbWVdID0gY29tbWFuZERlc2NyaXB0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvbW1vbiBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHRyaWdnZXIgb24gZXZlcnkgZXhlY3V0ZWQgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgRnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBmaXJlZCBvbiBldmVyeSBjb21tYW5kIGV4ZWN1dGUuXG4gICAqL1xuICBzZXRDb21tb25DYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHRoaXMuY29tbW9uQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGNvbW1hbmQgYnkgaXRzIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kTmFtZSBDb21tYW5kIGlkLlxuICAgKiBAcGFyYW0geyp9IHBhcmFtcyBBcmd1bWVudHMgcGFzc2VkIHRvIGNvbW1hbmQgdGFzay5cbiAgICovXG4gIGV4ZWN1dGUoY29tbWFuZE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcGFyYW1zID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHBhcmFtc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIGNvbnN0IGNvbW1hbmRTcGxpdCA9IGNvbW1hbmROYW1lLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgY29tbWFuZE5hbWVQcmltYXJ5ID0gY29tbWFuZFNwbGl0WzBdO1xuICAgIGNvbnN0IHN1YkNvbW1hbmROYW1lID0gY29tbWFuZFNwbGl0Lmxlbmd0aCA9PT0gMiA/IGNvbW1hbmRTcGxpdFsxXSA6IG51bGw7XG4gICAgbGV0IGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lUHJpbWFyeV07XG4gICAgaWYgKCFjb21tYW5kKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHtjb21tYW5kTmFtZVByaW1hcnl9JyBub3QgZXhpc3RzLmApO1xuICAgIH1cbiAgICBpZiAoc3ViQ29tbWFuZE5hbWUgJiYgY29tbWFuZC5zdWJtZW51KSB7XG4gICAgICBjb21tYW5kID0gZmluZFN1YkNvbW1hbmQoc3ViQ29tbWFuZE5hbWUsIGNvbW1hbmQuc3VibWVudS5pdGVtcyk7XG4gICAgfVxuICAgIGlmIChjb21tYW5kLmRpc2FibGVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29tbWFuZC5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb21tYW5kLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpID09PSB0cnVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29tbWFuZCwgJ3N1Ym1lbnUnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjYWxsYmFja3MgPSBbXTtcbiAgICBpZiAodHlwZW9mIGNvbW1hbmQuY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNvbW1hbmQuY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29tbW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spO1xuICAgIH1cbiAgICBwYXJhbXMudW5zaGlmdChjb21tYW5kU3BsaXQuam9pbignOicpKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2FsbGJhY2tzLCBjYWxsYmFjayA9PiBjYWxsYmFjay5hcHBseSh0aGlzLmhvdCwgcGFyYW1zKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViQ29tbWFuZE5hbWUgVGhlIHN1YmNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nW119IHN1YkNvbW1hbmRzIFRoZSBjb2xsZWN0aW9uIG9mIHRoZSBjb21tYW5kcy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnRzLkNvbW1hbmRFeGVjdXRvciA9IENvbW1hbmRFeGVjdXRvcjtcbmZ1bmN0aW9uIGZpbmRTdWJDb21tYW5kKHN1YkNvbW1hbmROYW1lLCBzdWJDb21tYW5kcykge1xuICBsZXQgY29tbWFuZDtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHN1YkNvbW1hbmRzLCBjbWQgPT4ge1xuICAgIGNvbnN0IGNtZHMgPSBjbWQua2V5ID8gY21kLmtleS5zcGxpdCgnOicpIDogbnVsbDtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjbWRzKSAmJiBjbWRzWzFdID09PSBzdWJDb21tYW5kTmFtZSkge1xuICAgICAgY29tbWFuZCA9IGNtZDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tbWFuZDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfY29tbWFuZEV4ZWN1dG9yID0gcmVxdWlyZShcIi4vY29tbWFuZEV4ZWN1dG9yXCIpO1xudmFyIF9pdGVtc0ZhY3RvcnkgPSByZXF1aXJlKFwiLi9pdGVtc0ZhY3RvcnlcIik7XG52YXIgX21lbnUgPSByZXF1aXJlKFwiLi9tZW51XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX3ByZWRlZmluZWRJdGVtcyA9IHJlcXVpcmUoXCIuL3ByZWRlZmluZWRJdGVtc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnY29udGV4dE1lbnUnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSA3MDtcbmNvbnN0IFNIT1JUQ1VUU19HUk9VUCA9IFBMVUdJTl9LRVk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYmVmb3JlQ29udGV4dE1lbnVTaG93Jyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDb250ZXh0TWVudVNob3cnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdhZnRlckNvbnRleHRNZW51SGlkZScpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyQ29udGV4dE1lbnVFeGVjdXRlJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQGNsYXNzIENvbnRleHRNZW51XG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgdGhlIEhhbmRzb250YWJsZSBDb250ZXh0IE1lbnUuIEl0IGFsbG93cyB0byBjcmVhdGUgYSBuZXcgcm93IG9yIGNvbHVtbiBhdCBhbnkgcGxhY2UgaW4gdGhlXG4gKiBncmlkIGFtb25nIFtvdGhlciBmZWF0dXJlc10oQC9ndWlkZXMvYWNjZXNzb3JpZXMtYW5kLW1lbnVzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUubWQjY29udGV4dC1tZW51LXdpdGgtc3BlY2lmaWMtb3B0aW9ucykuXG4gKiBQb3NzaWJsZSB2YWx1ZXM6XG4gKiAqIGB0cnVlYCAodG8gZW5hYmxlIGRlZmF1bHQgb3B0aW9ucyksXG4gKiAqIGBmYWxzZWAgKHRvIGRpc2FibGUgY29tcGxldGVseSlcbiAqICogYHsgdWlDb250YWluZXI6IGNvbnRhaW5lckRvbUVsZW1lbnQgfWAgKHRvIGRlY2xhcmUgYSBjb250YWluZXIgZm9yIGFsbCBvZiB0aGUgQ29udGV4dCBNZW51J3MgZG9tIGVsZW1lbnRzIHRvIGJlIHBsYWNlZCBpbikuXG4gKiAqIEFuIGFycmF5IG9mIFt0aGUgYXZhaWxhYmxlIHN0cmluZ3NdKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kI2NvbnRleHQtbWVudS13aXRoLXNwZWNpZmljLW9wdGlvbnMpXG4gKlxuICogU2VlIFt0aGUgY29udGV4dCBtZW51IGRlbW9dKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51Lm1kKSBmb3IgZXhhbXBsZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiAvLyBhcyBhIGJvb2xlYW5cbiAqIGNvbnRleHRNZW51OiB0cnVlXG4gKiAvLyBhcyBhIGFycmF5XG4gKiBjb250ZXh0TWVudTogWydyb3dfYWJvdmUnLCAncm93X2JlbG93JywgJy0tLS0tLS0tLScsICd1bmRvJywgJ3JlZG8nXVxuICogYGBgXG4gKlxuICogQHBsdWdpbiBDb250ZXh0TWVudVxuICovXG52YXIgX0NvbnRleHRNZW51X2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBDb250ZXh0TWVudSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIE9uIGNvbnRleHRtZW51IGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0NvbnRleHRNZW51X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgQ29tbWFuZEV4ZWN1dG9yfS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0NvbW1hbmRFeGVjdXRvcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21tYW5kRXhlY3V0b3JcIiwgbmV3IF9jb21tYW5kRXhlY3V0b3IuQ29tbWFuZEV4ZWN1dG9yKHRoaXMuaG90KSk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIEl0ZW1zRmFjdG9yeX0uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtJdGVtc0ZhY3Rvcnl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaXRlbXNGYWN0b3J5XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIHtAbGluayBNZW51fS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge01lbnV9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWVudVwiLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCkge1xuICAgIHJldHVybiBbJ3BsdWdpbjpBdXRvQ29sdW1uU2l6ZSddO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnRleHQgbWVudSBkZWZhdWx0IGl0ZW1zIG9yZGVyIHdoZW4gYGNvbnRleHRNZW51YCBvcHRpb25zIGlzIHNldCBhcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIHN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpIHtcbiAgICByZXR1cm4gW19wcmVkZWZpbmVkSXRlbXMuUk9XX0FCT1ZFLCBfcHJlZGVmaW5lZEl0ZW1zLlJPV19CRUxPVywgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9wcmVkZWZpbmVkSXRlbXMuQ09MVU1OX0xFRlQsIF9wcmVkZWZpbmVkSXRlbXMuQ09MVU1OX1JJR0hULCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX3ByZWRlZmluZWRJdGVtcy5SRU1PVkVfUk9XLCBfcHJlZGVmaW5lZEl0ZW1zLlJFTU9WRV9DT0xVTU4sIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfcHJlZGVmaW5lZEl0ZW1zLlVORE8sIF9wcmVkZWZpbmVkSXRlbXMuUkVETywgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9wcmVkZWZpbmVkSXRlbXMuUkVBRF9PTkxZLCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX3ByZWRlZmluZWRJdGVtcy5BTElHTk1FTlRdO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgQ29udGV4dE1lbnUjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKHNldHRpbmdzLmNhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5tZW51ID0gbmV3IF9tZW51Lk1lbnUodGhpcy5ob3QsIHtcbiAgICAgIGNsYXNzTmFtZTogJ2h0Q29udGV4dE1lbnUnLFxuICAgICAga2VlcEluVmlld3BvcnQ6IHRydWUsXG4gICAgICBjb250YWluZXI6IHNldHRpbmdzLnVpQ29udGFpbmVyIHx8IHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5XG4gICAgfSk7XG4gICAgdGhpcy5tZW51LmFkZExvY2FsSG9vaygnYmVmb3JlT3BlbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db250ZXh0TWVudV9icmFuZCwgdGhpcywgX29uTWVudUJlZm9yZU9wZW4pLmNhbGwodGhpcykpO1xuICAgIHRoaXMubWVudS5hZGRMb2NhbEhvb2soJ2FmdGVyT3BlbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db250ZXh0TWVudV9icmFuZCwgdGhpcywgX29uTWVudUFmdGVyT3BlbikuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5tZW51LmFkZExvY2FsSG9vaygnYWZ0ZXJDbG9zZScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db250ZXh0TWVudV9icmFuZCwgdGhpcywgX29uTWVudUFmdGVyQ2xvc2UpLmNhbGwodGhpcykpO1xuICAgIHRoaXMubWVudS5hZGRMb2NhbEhvb2soJ2V4ZWN1dGVDb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhcmFtcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgcGFyYW1zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLmV4ZWN1dGVDb21tYW5kLmNhbGwoX3RoaXMsIC4uLnBhcmFtcyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck9uQ2VsbENvbnRleHRNZW51JywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbnRleHRNZW51X2JyYW5kLCB0aGlzLCBfb25BZnRlck9uQ2VsbENvbnRleHRNZW51KS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgY29udGV4dE1lbnVgXShAL2FwaS9vcHRpb25zLm1kI2NvbnRleHRtZW51KVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGlmICh0aGlzLm1lbnUpIHtcbiAgICAgIHRoaXMubWVudS5kZXN0cm95KCk7XG4gICAgICB0aGlzLm1lbnUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgc2hvcnRjdXRzIHJlc3BvbnNpYmxlIGZvciB0b2dnbGluZyBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snQ29udHJvbC9NZXRhJywgJ1NoaWZ0JywgJ0JhY2tzbGFzaCddLCBbJ1NoaWZ0JywgJ0YxMCddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoaWdobGlnaHRcbiAgICAgICAgfSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICAgIHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuaG90LmdldENlbGwoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbCwgdHJ1ZSkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9ICgwLCBfdXRpbHMuZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQpKHRoaXMubWVudS5jb250YWluZXIsIHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gICAgICAgIHRoaXMub3Blbih7XG4gICAgICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgb2Zmc2V0LmxlZnQsXG4gICAgICAgICAgdG9wOiByZWN0LnRvcCArIG9mZnNldC50b3AgLSAxICsgcmVjdC5oZWlnaHRcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxlZnQ6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IC1yZWN0LmhlaWdodFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBmaXJzdCBpdGVtIGlzIHNlbGVjdGVkIChyb2xlPW1lbnVpdGVtKS4gT3RoZXJ3aXNlLCBzY3JlZW4gcmVhZGVyc1xuICAgICAgICAvLyB3aWxsIGJsb2NrIHRoZSBFc2Mga2V5IGZvciB0aGUgd2hvbGUgbWVudS5cbiAgICAgICAgdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk7XG4gICAgICB9LFxuICAgICAgcnVuT25seUlmOiAoKSA9PiB7XG4gICAgICAgIHZhciBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQ7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9IChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRTZWxlY3RlZC5oaWdobGlnaHQ7XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQgJiYgdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaGlnaGxpZ2h0KSAmJiAhdGhpcy5tZW51LmlzT3BlbmVkKCk7XG4gICAgICB9LFxuICAgICAgZ3JvdXA6IFNIT1JUQ1VUU19HUk9VUFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgc2hvcnRjdXRzIHJlc3BvbnNpYmxlIGZvciB0b2dnbGluZyBjb250ZXh0IG1lbnUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFNIT1JUQ1VUU19HUk9VUCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgbWVudSBhbmQgcmUtcG9zaXRpb24gaXQgYmFzZWQgb24gdGhlIHBhc3NlZCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHt7IHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIgfXxFdmVudH0gcG9zaXRpb24gQW4gb2JqZWN0IHdpdGggYHRvcGAgYW5kIGBsZWZ0YCBwcm9wZXJ0aWVzXG4gICAqIHdoaWNoIGNvbnRhaW5zIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBicm93c2VycyB2aWV3cG9ydCAod2l0aG91dCBpbmNsdWRlZCBzY3JvbGwgb2Zmc2V0cykuXG4gICAqIE9yIGlmIHRoZSBuYXRpdmUgZXZlbnQgaXMgcGFzc2VkIHRoZSBtZW51IHdpbGwgYmUgcG9zaXRpb25lZCBiYXNlZCBvbiB0aGUgYHBhZ2VYYCBhbmQgYHBhZ2VZYFxuICAgKiBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHt7IGFib3ZlOiBudW1iZXIsIGJlbG93OiBudW1iZXIsIGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciB9fSBvZmZzZXQgQW4gb2JqZWN0IGFsbG93cyBhcHBseWluZ1xuICAgKiB0aGUgb2Zmc2V0IHRvIHRoZSBtZW51IHBvc2l0aW9uLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29udGV4dE1lbnVTaG93XG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbnRleHRNZW51U2hvd1xuICAgKi9cbiAgb3Blbihwb3NpdGlvbikge1xuICAgIHZhciBfdGhpcyRtZW51O1xuICAgIGxldCBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgIGFib3ZlOiAwLFxuICAgICAgYmVsb3c6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDBcbiAgICB9O1xuICAgIGlmICgoX3RoaXMkbWVudSA9IHRoaXMubWVudSkgIT09IG51bGwgJiYgX3RoaXMkbWVudSAhPT0gdm9pZCAwICYmIF90aGlzJG1lbnUuaXNPcGVuZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtcbiAgICB0aGlzLm1lbnUub3BlbigpO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKG9mZnNldCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMubWVudS5zZXRPZmZzZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5tZW51LnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG1lbnUuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICB2YXIgX3RoaXMkbWVudTI7XG4gICAgKF90aGlzJG1lbnUyID0gdGhpcy5tZW51KSA9PT0gbnVsbCB8fCBfdGhpcyRtZW51MiA9PT0gdm9pZCAwIHx8IF90aGlzJG1lbnUyLmNsb3NlKCk7XG4gICAgdGhpcy5pdGVtc0ZhY3RvcnkgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgY29udGV4dCBtZW51IGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZSBgZXhlY3V0ZUNvbW1hbmQoKWAgbWV0aG9kIHdvcmtzIG9ubHkgZm9yIHNlbGVjdGVkIGNlbGxzLlxuICAgKlxuICAgKiBXaGVuIG5vIGNlbGxzIGFyZSBzZWxlY3RlZCwgYGV4ZWN1dGVDb21tYW5kKClgIGRvZXNuJ3QgZG8gYW55dGhpbmcuXG4gICAqXG4gICAqIFlvdSBjYW4gZXhlY3V0ZSBhbGwgcHJlZGVmaW5lZCBjb21tYW5kczpcbiAgICogICogYCdyb3dfYWJvdmUnYCAtIEluc2VydCByb3cgYWJvdmVcbiAgICogICogYCdyb3dfYmVsb3cnYCAtIEluc2VydCByb3cgYmVsb3dcbiAgICogICogYCdjb2xfbGVmdCdgIC0gSW5zZXJ0IGNvbHVtbiBsZWZ0XG4gICAqICAqIGAnY29sX3JpZ2h0J2AgLSBJbnNlcnQgY29sdW1uIHJpZ2h0XG4gICAqICAqIGAnY2xlYXJfY29sdW1uJ2AgLSBDbGVhciBzZWxlY3RlZCBjb2x1bW5cbiAgICogICogYCdyZW1vdmVfcm93J2AgLSBSZW1vdmUgcm93XG4gICAqICAqIGAncmVtb3ZlX2NvbCdgIC0gUmVtb3ZlIGNvbHVtblxuICAgKiAgKiBgJ3VuZG8nYCAtIFVuZG8gbGFzdCBhY3Rpb25cbiAgICogICogYCdyZWRvJ2AgLSBSZWRvIGxhc3QgYWN0aW9uXG4gICAqICAqIGAnbWFrZV9yZWFkX29ubHknYCAtIE1ha2UgY2VsbCByZWFkIG9ubHlcbiAgICogICogYCdhbGlnbm1lbnQ6bGVmdCdgIC0gQWxpZ25tZW50IHRvIHRoZSBsZWZ0XG4gICAqICAqIGAnYWxpZ25tZW50OnRvcCdgIC0gQWxpZ25tZW50IHRvIHRoZSB0b3BcbiAgICogICogYCdhbGlnbm1lbnQ6cmlnaHQnYCAtIEFsaWdubWVudCB0byB0aGUgcmlnaHRcbiAgICogICogYCdhbGlnbm1lbnQ6Ym90dG9tJ2AgLSBBbGlnbm1lbnQgdG8gdGhlIGJvdHRvbVxuICAgKiAgKiBgJ2FsaWdubWVudDptaWRkbGUnYCAtIEFsaWdubWVudCB0byB0aGUgbWlkZGxlXG4gICAqICAqIGAnYWxpZ25tZW50OmNlbnRlcidgIC0gQWxpZ25tZW50IHRvIHRoZSBjZW50ZXIgKGp1c3RpZnkpLlxuICAgKlxuICAgKiBPciB5b3UgY2FuIGV4ZWN1dGUgY29tbWFuZCByZWdpc3RlcmVkIGluIHNldHRpbmdzIHdoZXJlIGBrZXlgIGlzIHlvdXIgY29tbWFuZCBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZE5hbWUgVGhlIGNvbW1hbmQgbmFtZSB0byBiZSBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBwYXJhbXMgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIHBhc3NlZCB0byBjb21tYW5kIGV4ZWN1dG9yIG1vZHVsZS5cbiAgICovXG4gIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmROYW1lKSB7XG4gICAgaWYgKHRoaXMuaXRlbXNGYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICB0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtcbiAgICB9XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBwYXJhbXMgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcGFyYW1zW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cbiAgICB0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGNvbW1hbmROYW1lLCAuLi5wYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGF2YWlsYWJsZSBjb250ZXh0TWVudSdzIGl0ZW1zIGxpc3QgYW5kIHJlZ2lzdGVycyB0aGVtIGluIGNvbW1hbmRFeGVjdXRvci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uc1xuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtc1xuICAgKi9cbiAgcHJlcGFyZU1lbnVJdGVtcygpIHtcbiAgICB0aGlzLml0ZW1zRmFjdG9yeSA9IG5ldyBfaXRlbXNGYWN0b3J5Lkl0ZW1zRmFjdG9yeSh0aGlzLmhvdCwgQ29udGV4dE1lbnUuREVGQVVMVF9JVEVNUyk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGNvbnN0IHByZWRlZmluZWRJdGVtcyA9IHtcbiAgICAgIGl0ZW1zOiB0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhzZXR0aW5ncylcbiAgICB9O1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMnLCBwcmVkZWZpbmVkSXRlbXMpO1xuICAgIHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhwcmVkZWZpbmVkSXRlbXMuaXRlbXMpO1xuICAgIGNvbnN0IG1lbnVJdGVtcyA9IHRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKHNldHRpbmdzKTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcycsIG1lbnVJdGVtcyk7XG4gICAgdGhpcy5tZW51LnNldE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYWxsIGNvbW1hbmRzLiBQcmVkZWZpbmVkIGFuZCBhZGRlZCBieSB1c2VyIG9yIGJ5IHBsdWdpbnNcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVudUl0ZW1zLCBjb21tYW5kID0+IHRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChjb21tYW5kLmtleSwgY29tbWFuZCkpO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgdGhpcy5tZW51LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkNvbnRleHRNZW51ID0gQ29udGV4dE1lbnU7XG5mdW5jdGlvbiBfb25BZnRlck9uQ2VsbENvbnRleHRNZW51KGV2ZW50KSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgY29uc3Qgc2hvd1Jvd0hlYWRlcnMgPSBzZXR0aW5ncy5yb3dIZWFkZXJzO1xuICBjb25zdCBzaG93Q29sSGVhZGVycyA9IHNldHRpbmdzLmNvbEhlYWRlcnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gdmFsaWRhdGUuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEQnIHx8IGVsZW1lbnQucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ1REJztcbiAgfVxuICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICB0aGlzLmNsb3NlKCk7XG4gIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGVsZW1lbnQsICdoYW5kc29udGFibGVJbnB1dCcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICBpZiAoIShzaG93Um93SGVhZGVycyB8fCBzaG93Q29sSGVhZGVycykpIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGVsZW1lbnQpICYmICEoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShlbGVtZW50LCAnY3VycmVudCcpICYmICgwLCBfZWxlbWVudC5oYXNDbGFzcykoZWxlbWVudCwgJ3d0Qm9yZGVyJykpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGNvbnN0IG9mZnNldCA9ICgwLCBfdXRpbHMuZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQpKHRoaXMubWVudS5jb250YWluZXIsIHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gIHRoaXMub3Blbih7XG4gICAgdG9wOiBldmVudC5jbGllbnRZICsgb2Zmc2V0LnRvcCxcbiAgICBsZWZ0OiBldmVudC5jbGllbnRYICsgb2Zmc2V0LmxlZnRcbiAgfSk7XG59XG4vKipcbiAqIE9uIG1lbnUgYmVmb3JlIG9wZW4gbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIF9vbk1lbnVCZWZvcmVPcGVuKCkge1xuICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ29udGV4dE1lbnVTaG93JywgdGhpcyk7XG59XG4vKipcbiAqIE9uIG1lbnUgYWZ0ZXIgb3BlbiBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gX29uTWVudUFmdGVyT3BlbigpIHtcbiAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29udGV4dE1lbnVTaG93JywgdGhpcyk7XG59XG4vKipcbiAqIE9uIG1lbnUgYWZ0ZXIgY2xvc2UgbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIF9vbk1lbnVBZnRlckNsb3NlKCkge1xuICB0aGlzLmhvdC5saXN0ZW4oKTtcbiAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29udGV4dE1lbnVIaWRlJywgdGhpcyk7XG59XG5Db250ZXh0TWVudS5TRVBBUkFUT1IgPSB7XG4gIG5hbWU6IF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jb250ZXh0TWVudSA9IHJlcXVpcmUoXCIuL2NvbnRleHRNZW51XCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2NvbnRleHRNZW51LlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9jb250ZXh0TWVudS5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLkNvbnRleHRNZW51ID0gX2NvbnRleHRNZW51LkNvbnRleHRNZW51OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9wcmVkZWZpbmVkSXRlbXMgPSByZXF1aXJlKFwiLi9wcmVkZWZpbmVkSXRlbXNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogUHJlZGVmaW5lZCBpdGVtcyBjbGFzcyBmYWN0b3J5IGZvciBtZW51IGl0ZW1zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgSXRlbXNGYWN0b3J5XG4gKi9cbmNsYXNzIEl0ZW1zRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlKSB7XG4gICAgbGV0IG9yZGVyUGF0dGVybiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInByZWRlZmluZWRJdGVtc1wiLCAoMCwgX3ByZWRlZmluZWRJdGVtcy5wcmVkZWZpbmVkSXRlbXMpKCkpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkZWZhdWx0T3JkZXJQYXR0ZXJuXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5ob3QgPSBob3RJbnN0YW5jZTtcbiAgICB0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4gPSBvcmRlclBhdHRlcm47XG4gIH1cblxuICAvKipcbiAgICogU2V0IHByZWRlZmluZWQgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHByZWRlZmluZWRJdGVtc0NvbGxlY3Rpb24gQXJyYXkgb2YgcHJlZGVmaW5lZCBpdGVtcy5cbiAgICovXG4gIHNldFByZWRlZmluZWRJdGVtcyhwcmVkZWZpbmVkSXRlbXNDb2xsZWN0aW9uKSB7XG4gICAgY29uc3QgaXRlbXMgPSB7fTtcbiAgICB0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoID0gMDtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShwcmVkZWZpbmVkSXRlbXNDb2xsZWN0aW9uLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgbGV0IG1lbnVJdGVtS2V5ID0gJyc7XG4gICAgICBpZiAodmFsdWUubmFtZSA9PT0gX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IpIHtcbiAgICAgICAgaXRlbXNbX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1JdID0gdmFsdWU7XG4gICAgICAgIG1lbnVJdGVtS2V5ID0gX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1I7XG5cbiAgICAgICAgLy8gTWVudSBpdGVtIGFkZGVkIGFzIGEgcHJvcGVydHkgdG8gYXJyYXlcbiAgICAgIH0gZWxzZSBpZiAoaXNOYU4ocGFyc2VJbnQoa2V5LCAxMCkpKSB7XG4gICAgICAgIHZhbHVlLmtleSA9IHZhbHVlLmtleSA9PT0gdW5kZWZpbmVkID8ga2V5IDogdmFsdWUua2V5O1xuICAgICAgICBpdGVtc1trZXldID0gdmFsdWU7XG4gICAgICAgIG1lbnVJdGVtS2V5ID0gdmFsdWUua2V5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXNbdmFsdWUua2V5XSA9IHZhbHVlO1xuICAgICAgICBtZW51SXRlbUtleSA9IHZhbHVlLmtleTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKG1lbnVJdGVtS2V5KTtcbiAgICB9KTtcbiAgICB0aGlzLnByZWRlZmluZWRJdGVtcyA9IGl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgbWVudSBpdGVtcyBiYXNlZCBvbiBwYXR0ZXJuLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fG9iamVjdHxib29sZWFufSBwYXR0ZXJuIFBhdHRlcm4gd2hpY2ggeW91IGNhbiBkZWZpbmUgYnkgZGlzcGxheWluZyBtZW51IGl0ZW1zIG9yZGVyLiBJZiBgdHJ1ZWAgZGVmYXVsdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gd2lsbCBiZSB1c2VkLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRJdGVtcygpIHtcbiAgICBsZXQgcGF0dGVybiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICByZXR1cm4gZ2V0SXRlbXMocGF0dGVybiwgdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLCB0aGlzLnByZWRlZmluZWRJdGVtcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpdGVtc1BhdHRlcm4gVGhlIHVzZXIgZGVmaW5lZCBtZW51IGl0ZW1zIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge29iamVjdFtdfSBkZWZhdWx0UGF0dGVybiBUaGUgbWVudSBkZWZhdWx0IGl0ZW1zIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaXRlbXMgQWRkaXRpb25hbCBvcHRpb25zLlxuICogQHJldHVybnMge29iamVjdFtdfSBSZXR1cm5zIHBhcnNlZCBhbmQgbWVyZ2VkIG1lbnUgaXRlbXMgY29sbGVjdGlvbiByZWFkeSB0byByZW5kZXIuXG4gKi9cbmV4cG9ydHMuSXRlbXNGYWN0b3J5ID0gSXRlbXNGYWN0b3J5O1xuZnVuY3Rpb24gZ2V0SXRlbXMoKSB7XG4gIGxldCBpdGVtc1BhdHRlcm4gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gIGxldCBkZWZhdWx0UGF0dGVybiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gIGxldCBpdGVtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBsZXQgcGF0dGVybiA9IGl0ZW1zUGF0dGVybjtcbiAgaWYgKHBhdHRlcm4gJiYgcGF0dGVybi5pdGVtcykge1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuLml0ZW1zO1xuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7XG4gICAgcGF0dGVybiA9IGRlZmF1bHRQYXR0ZXJuO1xuICB9XG4gIGlmICgoMCwgX29iamVjdC5pc09iamVjdCkocGF0dGVybikpIHtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKShwYXR0ZXJuLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgbGV0IGl0ZW0gPSBpdGVtc1t0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBrZXldO1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmICgoMCwgX29iamVjdC5pc09iamVjdCkodmFsdWUpKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmV4dGVuZCkoaXRlbSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaXRlbSA9IHtcbiAgICAgICAgICBuYW1lOiBpdGVtXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdGVtLmtleSA9IGtleTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShwYXR0ZXJuLCAobmFtZSwga2V5KSA9PiB7XG4gICAgICBsZXQgaXRlbSA9IGl0ZW1zW25hbWVdO1xuXG4gICAgICAvLyBJdGVtIGRlbGV0ZWQgZnJvbSBzZXR0aW5ncyBgYWxsb3dJbnNlcnRSb3c6IGZhbHNlYCBldGMuXG4gICAgICBpZiAoIWl0ZW0gJiYgX3ByZWRlZmluZWRJdGVtcy5JVEVNUy5pbmRleE9mKG5hbWUpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSB7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBrZXk6IGAke2tleX1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKG5hbWUpKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmV4dGVuZCkoaXRlbSwgbmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdGVtLmtleSA9IGtleTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgY2hlY2tpbmcgaWYgZWxlbWVudCB3aWxsIGZpdCBhdCB0aGUgZGVzaXJlZCBzaWRlIG9mIGN1cnNvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIEN1cnNvclxuICovXG5jbGFzcyBDdXJzb3Ige1xuICBjb25zdHJ1Y3RvcihvYmplY3QsIHJvb3RXaW5kb3cpIHtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRvcFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidG9wUmVsYXRpdmVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxlZnRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxlZnRSZWxhdGl2ZVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2Nyb2xsVG9wXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzY3JvbGxMZWZ0XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjZWxsSGVpZ2h0XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjZWxsV2lkdGhcIiwgdm9pZCAwKTtcbiAgICBjb25zdCB3aW5kb3dTY3JvbGxUb3AgPSByb290V2luZG93LnNjcm9sbFk7XG4gICAgY29uc3Qgd2luZG93U2Nyb2xsTGVmdCA9IHJvb3RXaW5kb3cuc2Nyb2xsWDtcbiAgICBsZXQgdG9wO1xuICAgIGxldCB0b3BSZWxhdGl2ZTtcbiAgICBsZXQgbGVmdDtcbiAgICBsZXQgbGVmdFJlbGF0aXZlO1xuICAgIGxldCBjZWxsSGVpZ2h0O1xuICAgIGxldCBjZWxsV2lkdGg7XG4gICAgdGhpcy5yb290V2luZG93ID0gcm9vdFdpbmRvdztcbiAgICB0aGlzLnR5cGUgPSB0aGlzLmdldFNvdXJjZVR5cGUob2JqZWN0KTtcbiAgICBpZiAodGhpcy50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgIHRvcCA9IHBhcnNlSW50KG9iamVjdC50b3AsIDEwKTtcbiAgICAgIGxlZnQgPSBwYXJzZUludChvYmplY3QubGVmdCwgMTApO1xuICAgICAgY2VsbEhlaWdodCA9IG9iamVjdC5oZWlnaHQgfHwgMDtcbiAgICAgIGNlbGxXaWR0aCA9IG9iamVjdC53aWR0aCB8fCAwO1xuICAgICAgdG9wUmVsYXRpdmUgPSB0b3A7XG4gICAgICBsZWZ0UmVsYXRpdmUgPSBsZWZ0O1xuICAgICAgdG9wICs9IHdpbmRvd1Njcm9sbFRvcDtcbiAgICAgIGxlZnQgKz0gd2luZG93U2Nyb2xsTGVmdDtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2V2ZW50Jykge1xuICAgICAgdG9wID0gcGFyc2VJbnQob2JqZWN0LnBhZ2VZLCAxMCk7XG4gICAgICBsZWZ0ID0gcGFyc2VJbnQob2JqZWN0LnBhZ2VYLCAxMCk7XG4gICAgICBjZWxsSGVpZ2h0ID0gb2JqZWN0LnRhcmdldC5jbGllbnRIZWlnaHQ7XG4gICAgICBjZWxsV2lkdGggPSBvYmplY3QudGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgICAgdG9wUmVsYXRpdmUgPSB0b3AgLSB3aW5kb3dTY3JvbGxUb3A7XG4gICAgICBsZWZ0UmVsYXRpdmUgPSBsZWZ0IC0gd2luZG93U2Nyb2xsTGVmdDtcbiAgICB9XG4gICAgdGhpcy50b3AgPSB0b3A7XG4gICAgdGhpcy50b3BSZWxhdGl2ZSA9IHRvcFJlbGF0aXZlO1xuICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgdGhpcy5sZWZ0UmVsYXRpdmUgPSBsZWZ0UmVsYXRpdmU7XG4gICAgdGhpcy5zY3JvbGxUb3AgPSB3aW5kb3dTY3JvbGxUb3A7XG4gICAgdGhpcy5zY3JvbGxMZWZ0ID0gd2luZG93U2Nyb2xsTGVmdDtcbiAgICB0aGlzLmNlbGxIZWlnaHQgPSBjZWxsSGVpZ2h0O1xuICAgIHRoaXMuY2VsbFdpZHRoID0gY2VsbFdpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2UgdHlwZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG9iamVjdCBFdmVudCBvciBPYmplY3Qgd2l0aCBjb29yZGluYXRlcy5cbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyBvbmUgb2YgdGhpcyB2YWx1ZXM6IGAnbGl0ZXJhbCdgLCBgJ2V2ZW50J2AuXG4gICAqL1xuICBnZXRTb3VyY2VUeXBlKG9iamVjdCkge1xuICAgIGxldCB0eXBlID0gJ2xpdGVyYWwnO1xuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBFdmVudCkge1xuICAgICAgdHlwZSA9ICdldmVudCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBlbGVtZW50IGNhbiBiZSBwbGFjZWQgYWJvdmUgdGhlIGN1cnNvci5cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRvIGNoZWNrIGlmIGl0J3Mgc2l6ZSB3aWxsIGZpdCBhYm92ZSB0aGUgY3Vyc29yLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZpdHNBYm92ZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMudG9wUmVsYXRpdmUgPj0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGVsZW1lbnQgY2FuIGJlIHBsYWNlZCBiZWxvdyB0aGUgY3Vyc29yLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2sgaWYgaXQncyBzaXplIHdpbGwgZml0IGJlbG93IHRoZSBjdXJzb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlld3BvcnRIZWlnaHRdIFRoZSB2aWV3cG9ydCBoZWlnaHQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZml0c0JlbG93KGVsZW1lbnQpIHtcbiAgICBsZXQgdmlld3BvcnRIZWlnaHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRoaXMucm9vdFdpbmRvdy5pbm5lckhlaWdodDtcbiAgICByZXR1cm4gdGhpcy50b3BSZWxhdGl2ZSArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IDw9IHZpZXdwb3J0SGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBlbGVtZW50IGNhbiBiZSBwbGFjZWQgb24gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0byBjaGVjayBpZiBpdCdzIHNpemUgd2lsbCBmaXQgb24gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3IuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbdmlld3BvcnRXaWR0aF0gVGhlIHZpZXdwb3J0IHdpZHRoLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZpdHNPblJpZ2h0KGVsZW1lbnQpIHtcbiAgICBsZXQgdmlld3BvcnRXaWR0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5yb290V2luZG93LmlubmVyV2lkdGg7XG4gICAgcmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlICsgdGhpcy5jZWxsV2lkdGggKyBlbGVtZW50Lm9mZnNldFdpZHRoIDw9IHZpZXdwb3J0V2lkdGg7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGVsZW1lbnQgY2FuIGJlIHBsYWNlZCBvbiB0aGUgbGVmdCBvbiB0aGUgY3Vyc29yLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gY2hlY2sgaWYgaXQncyBzaXplIHdpbGwgZml0IG9uIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZml0c09uTGVmdChlbGVtZW50KSB7XG4gICAgcmV0dXJuIHRoaXMubGVmdFJlbGF0aXZlID49IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIH1cbn1cbmV4cG9ydHMuQ3Vyc29yID0gQ3Vyc29yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0U2hvcnRjdXRzTGlzdCA9IGNyZWF0ZURlZmF1bHRTaG9ydGN1dHNMaXN0O1xuLyoqXG4gKiBDcmVhdGVzIGEga2V5Ym9hcmQgc2hvcnRjdXRzIGxpc3Qgd2l0aCBkZWZhdWx0IGtleWJvYXJkcyBiaW5kcy5cbiAqXG4gKiBAcGFyYW0ge01lbnV9IG1lbnUgVGhlIG1haW4gbWVudSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtLZXlib2FyZFNob3J0Y3V0W119XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRTaG9ydGN1dHNMaXN0KG1lbnUpIHtcbiAgY29uc3Qge1xuICAgIGhvdCxcbiAgICBob3RNZW51XG4gIH0gPSBtZW51O1xuICByZXR1cm4gW3tcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnQSddXSxcbiAgICBmb3J3YXJkVG9Db250ZXh0OiBob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgnZ3JpZCcpLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBtZW51LmNsb3NlKHRydWUpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydUYWInXSwgWydTaGlmdCcsICdUYWInXV0sXG4gICAgY2FsbGJhY2s6IChldmVudCwga2V5cykgPT4ge1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICAgIGNvbnN0IHRhYk1vdmVzID0gdHlwZW9mIHNldHRpbmdzLnRhYk1vdmVzID09PSAnZnVuY3Rpb24nID8gc2V0dGluZ3MudGFiTW92ZXMoZXZlbnQpIDogc2V0dGluZ3MudGFiTW92ZXM7XG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcygnc2hpZnQnKSkge1xuICAgICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10YWJNb3Zlcy5yb3csIC10YWJNb3Zlcy5jb2wpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0YWJNb3Zlcy5yb3csIHRhYk1vdmVzLmNvbCk7XG4gICAgICB9XG4gICAgICBtZW51LmNsb3NlKHRydWUpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleXM6IFtbJ0VzY2FwZSddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gbWVudS5jbG9zZSgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd0Rvd24nXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IG1lbnUuZ2V0TmF2aWdhdG9yKCkudG9OZXh0SXRlbSgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd1VwJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBtZW51LmdldE5hdmlnYXRvcigpLnRvUHJldmlvdXNJdGVtKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93UmlnaHQnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN1Yk1lbnUgPSBtZW51Lm9wZW5TdWJNZW51KHNlbGVjdGlvblswXSk7XG4gICAgICAgIGlmIChzdWJNZW51KSB7XG4gICAgICAgICAgc3ViTWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5czogW1snQXJyb3dMZWZ0J11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO1xuICAgICAgaWYgKHNlbGVjdGlvbiAmJiBtZW51LmlzU3ViTWVudSgpKSB7XG4gICAgICAgIG1lbnUuY2xvc2UoKTtcbiAgICAgICAgaWYgKG1lbnUuaXNTdWJNZW51KCkpIHtcbiAgICAgICAgICBtZW51LnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleXM6IFtbJ0NvbnRyb2wvTWV0YScsICdBcnJvd1VwJ10sIFsnSG9tZSddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gbWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnQXJyb3dEb3duJ10sIFsnRW5kJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBtZW51LmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKVxuICB9LCB7XG4gICAga2V5czogW1snRW50ZXInXSwgWydTcGFjZSddXSxcbiAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtcbiAgICAgIGlmICghc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhzZWxlY3Rpb25bMF0pLnN1Ym1lbnUpIHtcbiAgICAgICAgbWVudS5vcGVuU3ViTWVudShzZWxlY3Rpb25bMF0pLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZW51LmV4ZWN1dGVDb21tYW5kKGV2ZW50KTtcbiAgICAgICAgbWVudS5jbG9zZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXlzOiBbWydQYWdlVXAnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1ob3RNZW51LmNvdW50VmlzaWJsZVJvd3MoKSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5czogW1snUGFnZURvd24nXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgIGhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbnUuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpO1xuICAgICAgfVxuICAgIH1cbiAgfV07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX21lbnUgPSByZXF1aXJlKFwiLi9tZW51XCIpO1xuT2JqZWN0LmtleXMoX21lbnUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9tZW51W2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX21lbnVba2V5XTtcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfcG9zaXRpb25lciA9IHJlcXVpcmUoXCIuL3Bvc2l0aW9uZXJcIik7XG52YXIgX25hdmlnYXRvcjIgPSByZXF1aXJlKFwiLi9uYXZpZ2F0b3JcIik7XG52YXIgX3Nob3J0Y3V0cyA9IHJlcXVpcmUoXCIuL3Nob3J0Y3V0c1wiKTtcbnZhciBfcHJlZGVmaW5lZEl0ZW1zID0gcmVxdWlyZShcIi4vLi4vcHJlZGVmaW5lZEl0ZW1zXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9ldmVudE1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi8uLi9ldmVudE1hbmFnZXJcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9icm93c2VyID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYnJvd3NlclwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9ldmVudFwiKTtcbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9mdW5jdGlvblwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9sb2NhbEhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vbWl4aW5zL2xvY2FsSG9va3NcIikpO1xudmFyIF9tZW51SXRlbVJlbmRlcmVyID0gcmVxdWlyZShcIi4vbWVudUl0ZW1SZW5kZXJlclwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgTUlOX1dJRFRIID0gMjE1O1xuXG4vKipcbiAqIEB0eXBlZGVmIE1lbnVPcHRpb25zXG4gKiBAcHJvcGVydHkge01lbnV9IFtwYXJlbnQ9bnVsbF0gSW5zdGFuY2Ugb2Yge0BsaW5rIE1lbnV9LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lPW51bGxdIE5hbWUgb2YgdGhlIG1lbnUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NsYXNzTmFtZT0nJ10gQ3VzdG9tIGNsYXNzIG5hbWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtrZWVwSW5WaWV3cG9ydD10cnVlXSBEZXRlcm1pbmUgaWYgc2hvdWxkIGJlIGtlcHQgaW4gdmlld3BvcnQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzdGFuZGFsb25lXSBFbmFibGluZyBjbG9zaW5nIG1lbnUgd2hlbiBjbGlja2VkIGVsZW1lbnQgaXMgbm90IGJlbG9uZ3MgdG8gbWVudSBpdHNlbGYuXG4gKiBAcHJvcGVydHkge251bWJlcn0gW21pbldpZHRoPU1JTl9XSURUSF0gVGhlIG1pbmltdW0gd2lkdGguXG4gKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fSBbY29udGFpbmVyXSBUaGUgY29udGFpbmVyLlxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBNZW51XG4gKi9cbnZhciBfbmF2aWdhdG9yID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3Nob3J0Y3V0c0N0cmwgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIE1lbnUge1xuICAvKipcbiAgICogQHBhcmFtIHtDb3JlfSBob3RJbnN0YW5jZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7TWVudU9wdGlvbnN9IFtvcHRpb25zXSBNZW51IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgLyoqXG4gICAgICogVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBNZW51IG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdGlvbnNcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RXZlbnRNYW5hZ2VyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImV2ZW50TWFuYWdlclwiLCBuZXcgX2V2ZW50TWFuYWdlci5kZWZhdWx0KHRoaXMpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgTWVudSBjb250YWluZXIgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb250YWluZXJcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UG9zaXRpb25lcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwb3NpdGlvbmVyXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIGluc3RhbmNlIG9mIHRoZSBIYW5kc29udGFibGUgdGhhdCBpcyB1c2VkIGFzIGEgbWVudS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdE1lbnVcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZXMgdGhhdCBhcmUgdXNlZCBhcyBzdWItbWVudXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFN1Yk1lbnVzXCIsIHt9KTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgbWVudSBhY3RzIGFzIHRoZSBzdWItbWVudSB0aGVuIHRoaXMgcHJvcGVydHkgY29udGFpbnMgdGhlIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG1lbnUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWVudX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwYXJlbnRNZW51XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIG1lbnUgaXRlbXMgZW50cmllcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3RbXX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZW51SXRlbXNcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwib3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0c1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udHJvbGxlciBtb2R1bGUgdGhhdCBhbGxvd3MgbW9kaWZ5aW5nIHRoZSBtZW51IGl0ZW0gc2VsZWN0aW9uIHBvc2l0aW9ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtQYWdpbmF0b3J9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX25hdmlnYXRvciwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY29udHJvbGxlciBtb2R1bGUgdGhhdCBhbGxvd3MgZXh0ZW5kaW5nIHRoZSBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIHRoZSBtZW51LlxuICAgICAqXG4gICAgICogQHR5cGUge0tleWJvYXJkU2hvcnRjdXRzTWVudUNvbnRyb2xsZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3Nob3J0Y3V0c0N0cmwsIHZvaWQgMCk7XG4gICAgdGhpcy5ob3QgPSBob3RJbnN0YW5jZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHtcbiAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgIG5hbWU6IG51bGwsXG4gICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAga2VlcEluVmlld3BvcnQ6IHRydWUsXG4gICAgICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgICAgIG1pbldpZHRoOiBNSU5fV0lEVEgsXG4gICAgICBjb250YWluZXI6IHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICB9O1xuICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRpb25zLm5hbWUpO1xuICAgIHRoaXMucG9zaXRpb25lciA9IG5ldyBfcG9zaXRpb25lci5Qb3NpdGlvbmVyKHRoaXMub3B0aW9ucy5rZWVwSW5WaWV3cG9ydCk7XG4gICAgdGhpcy5wYXJlbnRNZW51ID0gdGhpcy5vcHRpb25zLnBhcmVudCB8fCBudWxsO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoKTtcbiAgICBpZiAodGhpcy5pc1N1Yk1lbnUoKSkge1xuICAgICAgdGhpcy5hZGRMb2NhbEhvb2soJ2FmdGVyU2VsZWN0aW9uQ2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoJ2FmdGVyU2VsZWN0aW9uQ2hhbmdlJywgLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgZXZlbnQgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgbGV0IGZyYW1lID0gdGhpcy5ob3Qucm9vdFdpbmRvdztcbiAgICB3aGlsZSAoZnJhbWUpIHtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZnJhbWUuZG9jdW1lbnQsICdtb3VzZWRvd24nLCBldmVudCA9PiB0aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oZXZlbnQpKTtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZnJhbWUuZG9jdW1lbnQsICdjb250ZXh0bWVudScsIGV2ZW50ID0+IHRoaXMub25Eb2N1bWVudENvbnRleHRNZW51KGV2ZW50KSk7XG4gICAgICBmcmFtZSA9ICgwLCBfZWxlbWVudC5nZXRQYXJlbnRXaW5kb3cpKGZyYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFycmF5IG9mIG9iamVjdHMgd2hpY2ggZGVmaW5lcyBtZW51IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBtZW51SXRlbXMgTWVudSBpdGVtcyB0byBkaXNwbGF5LlxuICAgKi9cbiAgc2V0TWVudUl0ZW1zKG1lbnVJdGVtcykge1xuICAgIHRoaXMubWVudUl0ZW1zID0gbWVudUl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGNvbnRyb2xsZXIgb2JqZWN0IHRoYXQgYWxsb3dzIG1vZGlmeWluZyB0aGUgdGhlIG1lbnUgaXRlbSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQYWdpbmF0b3IgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXROYXZpZ2F0b3IoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbmF2aWdhdG9yLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb250cm9sbGVyIG9iamVjdCB0aGF0IGFsbG93cyBleHRlbmRpbmcgdGhlIGtleWJvYXJkIHNob3J0Y3V0cyBvZiB0aGUgbWVudS5cbiAgICpcbiAgICogQHJldHVybnMge0tleWJvYXJkU2hvcnRjdXRzTWVudUNvbnRyb2xsZXIgfCB1bmRlZmluZWR9XG4gICAqL1xuICBnZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2hvcnRjdXRzQ3RybCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjdXJyZW50bHkgc2VsZWN0ZWQgbWVudSBpdGVtLiBSZXR1cm5zIGBudWxsYCBpZiBubyBpdGVtIHdhcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdHxudWxsfVxuICAgKi9cbiAgZ2V0U2VsZWN0ZWRJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpID8gdGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIG1lbnUgaGFzIHNlbGVjdGVkIChoaWdobGlnaHRlZCkgYW55IGl0ZW0gZnJvbSB0aGUgbWVudSBsaXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc1NlbGVjdGVkSXRlbSgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG1lbnUgaXMgdXNpbmcgYXMgc3ViLW1lbnUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTdWJNZW51KCkge1xuICAgIHJldHVybiB0aGlzLnBhcmVudE1lbnUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBtZW51LlxuICAgKlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29udGV4dE1lbnVTaG93XG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbnRleHRNZW51U2hvd1xuICAgKi9cbiAgb3BlbigpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZU9wZW4nKTtcbiAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgY29uc3QgZGVsYXllZE9wZW5TdWJNZW51ID0gKDAsIF9mdW5jdGlvbi5kZWJvdW5jZSkocm93ID0+IHRoaXMub3BlblN1Yk1lbnUocm93KSwgMzAwKTtcbiAgICBjb25zdCBtaW5XaWR0aE9mTWVudSA9IHRoaXMub3B0aW9ucy5taW5XaWR0aCB8fCBNSU5fV0lEVEg7XG4gICAgbGV0IG5vSXRlbXNEZWZpbmVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlcmVkSXRlbXMgPSAoMCwgX2FycmF5LmFycmF5RmlsdGVyKSh0aGlzLm1lbnVJdGVtcywgaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS5rZXkgPT09IF9wcmVkZWZpbmVkSXRlbXMuTk9fSVRFTVMpIHtcbiAgICAgICAgbm9JdGVtc0RlZmluZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuICgwLCBfdXRpbHMuaXNJdGVtSGlkZGVuKShpdGVtLCB0aGlzLmhvdCk7XG4gICAgfSk7XG4gICAgaWYgKGZpbHRlcmVkSXRlbXMubGVuZ3RoIDwgMSAmJiAhbm9JdGVtc0RlZmluZWQpIHtcbiAgICAgIGZpbHRlcmVkSXRlbXMucHVzaCgoMCwgX3ByZWRlZmluZWRJdGVtcy5wcmVkZWZpbmVkSXRlbXMpKClbX3ByZWRlZmluZWRJdGVtcy5OT19JVEVNU10pO1xuICAgIH0gZWxzZSBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsdGVyZWRJdGVtcyA9ICgwLCBfdXRpbHMuZmlsdGVyU2VwYXJhdG9ycykoZmlsdGVyZWRJdGVtcywgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IpO1xuICAgIGxldCBzaG91bGRBdXRvQ2xvc2VNZW51ID0gZmFsc2U7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICBkYXRhOiBmaWx0ZXJlZEl0ZW1zLFxuICAgICAgY29sSGVhZGVyczogZmFsc2UsXG4gICAgICBhdXRvQ29sdW1uU2l6ZTogdHJ1ZSxcbiAgICAgIGF1dG9XcmFwUm93OiBmYWxzZSxcbiAgICAgIG1vZGlmeUNvbFdpZHRoKHdpZHRoKSB7XG4gICAgICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkod2lkdGgpICYmIHdpZHRoIDwgbWluV2lkdGhPZk1lbnUpIHtcbiAgICAgICAgICByZXR1cm4gbWluV2lkdGhPZk1lbnU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgICAgfSxcbiAgICAgIGF1dG9Sb3dTaXplOiBmYWxzZSxcbiAgICAgIHJlYWRPbmx5OiB0cnVlLFxuICAgICAgZWRpdG9yOiBmYWxzZSxcbiAgICAgIGNvcHlQYXN0ZTogZmFsc2UsXG4gICAgICBoaWRkZW5Sb3dzOiB0cnVlLFxuICAgICAgbWF4Q29sczogMSxcbiAgICAgIGNvbHVtbnM6IFt7XG4gICAgICAgIGRhdGE6ICduYW1lJyxcbiAgICAgICAgcmVuZGVyZXI6ICgwLCBfbWVudUl0ZW1SZW5kZXJlci5jcmVhdGVNZW51SXRlbVJlbmRlcmVyKSh0aGlzLmhvdClcbiAgICAgIH1dLFxuICAgICAgcmVuZGVyQWxsUm93czogdHJ1ZSxcbiAgICAgIGZyYWdtZW50U2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIG91dHNpZGVDbGlja0Rlc2VsZWN0czogZmFsc2UsXG4gICAgICBkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiAnYXJlYScsXG4gICAgICBsYXlvdXREaXJlY3Rpb246IHRoaXMuaG90LmlzUnRsKCkgPyAncnRsJyA6ICdsdHInLFxuICAgICAgYXJpYVRhZ3M6IGZhbHNlLFxuICAgICAgYmVmb3JlT25DZWxsTW91c2VPdmVyOiAoZXZlbnQsIGNvb3JkcykgPT4ge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX25hdmlnYXRvciwgdGhpcykuc2V0Q3VycmVudFBhZ2UoY29vcmRzLnJvdyk7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6IChldmVudCwgY29vcmRzKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKSkge1xuICAgICAgICAgIGRlbGF5ZWRPcGVuU3ViTWVudShjb29yZHMucm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW5TdWJNZW51KGNvb3Jkcy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcm93SGVpZ2h0czogcm93ID0+IGZpbHRlcmVkSXRlbXNbcm93XS5uYW1lID09PSBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiA/IDEgOiAyMyxcbiAgICAgIGFmdGVyT25DZWxsQ29udGV4dE1lbnU6IGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAvLyBPbiB0aGUgV2luZG93cyBwbGF0Zm9ybSwgdGhlIFwiY29udGV4dG1lbnVcIiBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIFwibW91c2V1cFwiIHNvIHRoYXQnc1xuICAgICAgICAvLyB3aHkgdGhlIGNsb3NpbmcgbWVudSBpcyBoZXJlLiAoIzY1MDcjaXNzdWVjb21tZW50LTU4MjM5MjMwMSkuXG4gICAgICAgIGlmICgoMCwgX2Jyb3dzZXIuaXNXaW5kb3dzT1MpKCkgJiYgc2hvdWxkQXV0b0Nsb3NlTWVudSAmJiB0aGlzLmhhc1NlbGVjdGVkSXRlbSgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFmdGVyU2VsZWN0aW9uOiAocm93LCBjb2x1bW4sIHJvdzIsIGNvbHVtbjIsIHByZXZlbnRTY3JvbGxpbmcpID0+IHtcbiAgICAgICAgLy8gZG8gbm90IHNjcm9sbCB0aGUgdmlld3BvcnQgd2hlbiBtb3VzZSBjbGlja3Mgb24gcGFydGlhbGx5IHZpc2libGUgbWVudSBpdGVtXG4gICAgICAgIGlmICh0aGlzLmhvdE1lbnUudmlldy5pc01vdXNlRG93bigpKSB7XG4gICAgICAgICAgcHJldmVudFNjcm9sbGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdhZnRlclNlbGVjdGlvbkNoYW5nZScsIHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZU9uQ2VsbE1vdXNlVXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpIHtcbiAgICAgICAgICBzaG91bGRBdXRvQ2xvc2VNZW51ID0gIXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKTtcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFmdGVyT25DZWxsTW91c2VVcDogZXZlbnQgPT4ge1xuICAgICAgICAvLyBJZiB0aGUgY29kZSBydW5zIG9uIHRoZSBvdGhlciBwbGF0Zm9ybSB0aGFuIFdpbmRvd3MsIHRoZSBcIm1vdXNldXBcIiBpcyB0cmlnZ2VyZWRcbiAgICAgICAgLy8gYWZ0ZXIgdGhlIFwiY29udGV4dG1lbnVcIi4gU28gdGhlbiBcIm1vdXNldXBcIiBjbG9zZXMgdGhlIG1lbnUuIE90aGVyd2lzZSwgdGhlIGNsb3NpbmdcbiAgICAgICAgLy8gbWVudSByZXNwb25zaWJpbGl0eSBpcyBmb3J3YXJkZWQgdG8gXCJhZnRlck9uQ2VsbENvbnRleHRNZW51XCIgY2FsbGJhY2sgKCM2NTA3I2lzc3VlY29tbWVudC01ODIzOTIzMDEpLlxuICAgICAgICBpZiAoKCEoMCwgX2Jyb3dzZXIuaXNXaW5kb3dzT1MpKCkgfHwgISgwLCBfZXZlbnQuaXNSaWdodENsaWNrKShldmVudCkpICYmIHNob3VsZEF1dG9DbG9zZU1lbnUgJiYgdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSkge1xuICAgICAgICAgIC8vIFRoZSB0aW1lb3V0IGlzIG5lY2Vzc2FyeSBvbmx5IGZvciBtb2JpbGUgZGV2aWNlcy4gRm9yIGRlc2t0b3AsIHRoZSBjbGljayBldmVudCB0aGF0IGlzIGZpcmVkXG4gICAgICAgICAgLy8gcmlnaHQgYWZ0ZXIgdGhlIG1vdXNldXAgZXZlbnQgZ2V0cyB0aGUgZXZlbnQgZWxlbWVudCB0YXJnZXQgdGhlIHNhbWUgYXMgdGhlIG1vdXNldXAgZXZlbnQuXG4gICAgICAgICAgLy8gRm9yIG1vYmlsZSBkZXZpY2VzLCB0aGUgY2xpY2sgZXZlbnQgaXMgdHJpZ2dlcmVkIHdpdGggbmF0aXZlIGRlbGF5ICh+MzAwbXMpLCBzbyB3aGVuIHRoZSBtb3VzZXVwXG4gICAgICAgICAgLy8gZXZlbnQgaGlkZXMgdGhlIHRhcHBlZCBlbGVtZW50LCB0aGUgY2xpY2sgZXZlbnQgZ3JhYnMgdGhlIGVsZW1lbnQgYmVsb3cuIEFzIGEgcmVzdWx0LCB0aGUgZmlsdGVyXG4gICAgICAgICAgLy8gYnkgY29uZGl0aW9uIG1lbnUgaXMgY2xvc2VkIGFuZCBpbW1lZGlhdGVseSBvcGVuIG9uIHRhcHBpbmcgdGhlIFwiTm9uZVwiIGl0ZW0uXG4gICAgICAgICAgaWYgKCgwLCBfYnJvd3Nlci5pc01vYmlsZUJyb3dzZXIpKCkgfHwgKDAsIF9icm93c2VyLmlzSXBhZE9TKSgpKSB7XG4gICAgICAgICAgICB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UodHJ1ZSksIDMyNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYWZ0ZXJVbmxpc3RlbjogKCkgPT4ge1xuICAgICAgICAvLyBSZXN0b3JlIG1lbnUgZm9jdXMsIGZpeCBmb3IgYHRoaXMuaW5zdGFuY2UudW5saXN0ZW4oKTtgIGNhbGwgaW4gdGhlIHRhYmxlVmlldy5qc0AyNjAgZmlsZS5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBsb3NpbmcgdGFibGUgcmVzcG9uc2l2ZW5lc3MgZm9yIGtleWJvYXJkIGV2ZW50cyB3aGVuIGZpbHRlciBzZWxlY3QgbWVudSBpcyBjbG9zZWQgKCM2NDk3KS5cbiAgICAgICAgaWYgKCF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpICYmIHRoaXMuaXNPcGVuZWQoKSkge1xuICAgICAgICAgIHRoaXMuaG90TWVudS5saXN0ZW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM7XG4gICAgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMgPSBmYWxzZTtcbiAgICB0aGlzLmhvdE1lbnUgPSBuZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5jb250YWluZXIsIHNldHRpbmdzKTtcbiAgICB0aGlzLmhvdE1lbnUuYWRkSG9vaygnYWZ0ZXJJbml0JywgKCkgPT4gdGhpcy5vbkFmdGVySW5pdCgpKTtcbiAgICB0aGlzLmhvdE1lbnUuaW5pdCgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbmF2aWdhdG9yLCB0aGlzLCAoMCwgX25hdmlnYXRvcjIuY3JlYXRlTWVudU5hdmlnYXRvcikodGhpcy5ob3RNZW51KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zaG9ydGN1dHNDdHJsLCB0aGlzLCAoMCwgX3Nob3J0Y3V0cy5jcmVhdGVLZXlib2FyZFNob3J0Y3V0c0N0cmwpKHRoaXMpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Nob3J0Y3V0c0N0cmwsIHRoaXMpLmxpc3RlbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICBpZiAodGhpcy5pc1N1Yk1lbnUoKSkge1xuICAgICAgdGhpcy5hZGRMb2NhbEhvb2soJ2FmdGVyT3BlbicsICgpID0+IHRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCdhZnRlclN1Ym1lbnVPcGVuJywgdGhpcykpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyT3BlbicsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Nsb3NlUGFyZW50PWZhbHNlXSBJZiBgdHJ1ZWAgdHJ5IHRvIGNsb3NlIHBhcmVudCBtZW51IGlmIGV4aXN0cy5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIGxldCBjbG9zZVBhcmVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNsb3NlUGFyZW50ICYmIHRoaXMuaXNTdWJNZW51KCkpIHtcbiAgICAgIHRoaXMucGFyZW50TWVudS5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX25hdmlnYXRvciwgdGhpcykuY2xlYXIoKTtcbiAgICAgIHRoaXMuY2xvc2VBbGxTdWJNZW51cygpO1xuICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuaG90TWVudS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhvdE1lbnUgPSBudWxsO1xuICAgICAgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMgPSB0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM7XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyQ2xvc2UnKTtcbiAgICAgIGlmICh0aGlzLmlzU3ViTWVudSgpKSB7XG4gICAgICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMucGFyZW50TWVudS5ob3RNZW51LmdldENlbGwoc2VsZWN0aW9uWzBdLCAwKTtcbiAgICAgICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKGNlbGwsIFsoMCwgX2ExMXkuQTExWV9FWFBBTkRFRCkoZmFsc2UpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHN1YiBtZW51IGF0IHRoZSBwcm92aWRlZCByb3cgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7TWVudXxib29sZWFufSBSZXR1cm5zIGNyZWF0ZWQgbWVudSBvciBgZmFsc2VgIGlmIG5vIG9uZSBtZW51IHdhcyBjcmVhdGVkLlxuICAgKi9cbiAgb3BlblN1Yk1lbnUocm93KSB7XG4gICAgaWYgKCF0aGlzLmhvdE1lbnUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgY2VsbCA9IHRoaXMuaG90TWVudS5nZXRDZWxsKHJvdywgMCk7XG4gICAgdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCk7XG4gICAgaWYgKCFjZWxsIHx8ICEoMCwgX3V0aWxzLmhhc1N1Yk1lbnUpKGNlbGwpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFJdGVtID0gdGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhyb3cpO1xuICAgIGNvbnN0IHN1Yk1lbnUgPSBuZXcgTWVudSh0aGlzLmhvdCwge1xuICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgbmFtZTogZGF0YUl0ZW0ubmFtZSxcbiAgICAgIGNsYXNzTmFtZTogdGhpcy5vcHRpb25zLmNsYXNzTmFtZSxcbiAgICAgIGtlZXBJblZpZXdwb3J0OiB0cnVlLFxuICAgICAgY29udGFpbmVyOiB0aGlzLm9wdGlvbnMuY29udGFpbmVyXG4gICAgfSk7XG4gICAgc3ViTWVudS5zZXRNZW51SXRlbXMoZGF0YUl0ZW0uc3VibWVudS5pdGVtcyk7XG4gICAgc3ViTWVudS5vcGVuKCk7XG4gICAgc3ViTWVudS5zZXRQb3NpdGlvbihjZWxsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB0aGlzLmhvdFN1Yk1lbnVzW2RhdGFJdGVtLmtleV0gPSBzdWJNZW51O1xuXG4gICAgLy8gVXBkYXRlIHRoZSBhY2Nlc3NpYmlsaXR5IHRhZ3Mgb24gdGhlIGNlbGwgYmVpbmcgdGhlIGJhc2UgZm9yIHRoZSBzdWJtZW51LlxuICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShjZWxsLCBbKDAsIF9hMTF5LkExMVlfRVhQQU5ERUQpKHRydWUpXSk7XG4gICAgfVxuICAgIHJldHVybiBzdWJNZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHN1YiBtZW51IGF0IHJvdyBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gICAqL1xuICBjbG9zZVN1Yk1lbnUocm93KSB7XG4gICAgY29uc3QgZGF0YUl0ZW0gPSB0aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHJvdyk7XG4gICAgY29uc3QgbWVudXMgPSB0aGlzLmhvdFN1Yk1lbnVzW2RhdGFJdGVtLmtleV07XG4gICAgaWYgKG1lbnVzKSB7XG4gICAgICBtZW51cy5kZXN0cm95KCk7XG4gICAgICBkZWxldGUgdGhpcy5ob3RTdWJNZW51c1tkYXRhSXRlbS5rZXldO1xuICAgICAgY29uc3QgY2VsbCA9IHRoaXMuaG90TWVudS5nZXRDZWxsKHJvdywgMCk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgYWNjZXNzaWJpbGl0eSB0YWdzIG9uIHRoZSBjZWxsIGJlaW5nIHRoZSBiYXNlIGZvciB0aGUgc3VibWVudS5cbiAgICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKSB7XG4gICAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKGNlbGwsIFsoMCwgX2ExMXkuQTExWV9FWFBBTkRFRCkoZmFsc2UpXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGFsbCBvcGVuZWQgc3ViIG1lbnVzLlxuICAgKi9cbiAgY2xvc2VBbGxTdWJNZW51cygpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5ob3RNZW51LmdldERhdGEoKSwgKHZhbHVlLCByb3cpID0+IHRoaXMuY2xvc2VTdWJNZW51KHJvdykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgY3JlYXRlZCBhbmQgb3BlbmVkIHN1YiBtZW51cyBhcmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQWxsU3ViTWVudXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaG90U3ViTWVudXMpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgbWVudSBzbyBhbGwga2V5Ym9hcmQgc2hvcnRjdXRzIGJlY29tZSBhY3RpdmUuXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICBpZiAodGhpcy5pc09wZW5lZCgpKSB7XG4gICAgICB0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe1xuICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKCk7XG4gICAgICB0aGlzLmhvdE1lbnUubGlzdGVuKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IG1lbnVDb250YWluZXJQYXJlbnRFbGVtZW50ID0gdGhpcy5jb250YWluZXIucGFyZW50Tm9kZTtcbiAgICB0aGlzLmNsZWFyTG9jYWxIb29rcygpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgICB0aGlzLnBhcmVudE1lbnUgPSBudWxsO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICBpZiAobWVudUNvbnRhaW5lclBhcmVudEVsZW1lbnQpIHtcbiAgICAgIG1lbnVDb250YWluZXJQYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIG1lbnUgd2FzIG9wZW5lZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIG1lbnUgd2FzIG9wZW5lZC5cbiAgICovXG4gIGlzT3BlbmVkKCkge1xuICAgIHJldHVybiB0aGlzLmhvdE1lbnUgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBtZW51IGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZSBgZXhlY3V0ZUNvbW1hbmQoKWAgbWV0aG9kIHdvcmtzIG9ubHkgZm9yIHNlbGVjdGVkIGNlbGxzLlxuICAgKlxuICAgKiBXaGVuIG5vIGNlbGxzIGFyZSBzZWxlY3RlZCwgYGV4ZWN1dGVDb21tYW5kKClgIGRvZXNuJ3QgZG8gYW55dGhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IFtldmVudF0gVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIGV4ZWN1dGVDb21tYW5kKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKCkgfHwgIXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ3NlbGVjdCcsIHNlbGVjdGVkSXRlbSwgZXZlbnQpO1xuICAgIGlmICh0aGlzLmlzQ29tbWFuZFBhc3NpdmUoc2VsZWN0ZWRJdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxSYW5nZXMgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlbGVjdGlvbiA9IHNlbFJhbmdlcyA/ICgwLCBfdXRpbHMubm9ybWFsaXplU2VsZWN0aW9uKShzZWxSYW5nZXMpIDogW107XG4gICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdleGVjdXRlQ29tbWFuZCcsIHNlbGVjdGVkSXRlbS5rZXksIG5vcm1hbGl6ZWRTZWxlY3Rpb24sIGV2ZW50KTtcbiAgICBpZiAodGhpcy5pc1N1Yk1lbnUoKSkge1xuICAgICAgdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoJ2V4ZWN1dGVDb21tYW5kJywgc2VsZWN0ZWRJdGVtLmtleSwgbm9ybWFsaXplZFNlbGVjdGlvbiwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBhc3NlZCBjb21tYW5kIGlzIHBhc3NpdmUgb3Igbm90LiBUaGUgY29tbWFuZCBpcyBwYXNzaXZlIHdoZW4gaXQncyBtYXJrZWQgYXNcbiAgICogZGlzYWJsZWQsIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBjb250YWlucyBgaXNDb21tYW5kYCBwcm9wZXJ0eSBzZXQgdG8gYGZhbHNlYCwgY29tbWFuZFxuICAgKiBpcyBhIHNlcGFyYXRvciwgb3IgdGhlIGl0ZW0gaXMgcmVjb2duaXplZCBhcyBzdWJtZW51LiBGb3IgcGFzc2l2ZSBpdGVtcyB0aGUgbWVudSBpcyBub3RcbiAgICogY2xvc2VkIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdGhlIHVzZXIgdHJpZ2dlciB0aGUgY29tbWFuZCB0aHJvdWdoIHRoZSBVSS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbW1hbmREZXNjcmlwdG9yIFNlbGVjdGVkIG1lbnUgaXRlbSBmcm9tIHRoZSBtZW51IGRhdGEgc291cmNlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ29tbWFuZFBhc3NpdmUoY29tbWFuZERlc2NyaXB0b3IpIHtcbiAgICByZXR1cm4gY29tbWFuZERlc2NyaXB0b3IuaXNDb21tYW5kID09PSBmYWxzZSB8fCAoMCwgX3V0aWxzLmlzSXRlbVNlcGFyYXRvcikoY29tbWFuZERlc2NyaXB0b3IpIHx8ICgwLCBfdXRpbHMuaXNJdGVtRGlzYWJsZWQpKGNvbW1hbmREZXNjcmlwdG9yLCB0aGlzLmhvdCkgfHwgKDAsIF91dGlscy5pc0l0ZW1TdWJNZW51KShjb21tYW5kRGVzY3JpcHRvcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9mZnNldCBtZW51IHBvc2l0aW9uIGZvciBzcGVjaWZpZWQgYXJlYSAoYGFib3ZlYCwgYGJlbG93YCwgYGxlZnRgIG9yIGByaWdodGApLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJlYSBTcGVjaWZpZWQgYXJlYSBuYW1lIChgYWJvdmVgLCBgYmVsb3dgLCBgbGVmdGAgb3IgYHJpZ2h0YCkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgT2Zmc2V0IHZhbHVlLlxuICAgKi9cbiAgc2V0T2Zmc2V0KGFyZWEpIHtcbiAgICBsZXQgb2Zmc2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgIHRoaXMucG9zaXRpb25lci5zZXRPZmZzZXQoYXJlYSwgb2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWVudSBwb3NpdGlvbiBiYXNlZCBvbiBkb20gZXZlbnQgb3IgYmFzZWQgb24gbGl0ZXJhbCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR8b2JqZWN0fSBjb29yZHMgRXZlbnQgb3IgbGl0ZXJhbCBPYmplY3Qgd2l0aCBjb29yZGluYXRlcy5cbiAgICovXG4gIHNldFBvc2l0aW9uKGNvb3Jkcykge1xuICAgIGlmICh0aGlzLmlzU3ViTWVudSgpKSB7XG4gICAgICB0aGlzLnBvc2l0aW9uZXIuc2V0UGFyZW50RWxlbWVudCh0aGlzLnBhcmVudE1lbnUuY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5wb3NpdGlvbmVyLnNldEVsZW1lbnQodGhpcy5jb250YWluZXIpLnVwZGF0ZVBvc2l0aW9uKGNvb3Jkcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNvbnRhaW5lci93cmFwcGVyIGZvciBoYW5kc29udGFibGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gQ2xhc3MgbmFtZS5cbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgY3JlYXRlQ29udGFpbmVyKCkge1xuICAgIGxldCBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuICAgIGNvbnN0IGRvYyA9IHRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtcbiAgICBsZXQgY2xhc3NOYW1lID0gbmFtZTtcbiAgICBsZXQgY29udGFpbmVyO1xuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIGlmICgoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLmNhbGwodGhpcy5ob3QpO1xuICAgICAgICBpZiAoY2xhc3NOYW1lID09PSBudWxsIHx8ICgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKGNsYXNzTmFtZSkpIHtcbiAgICAgICAgICBjbGFzc05hbWUgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoL1teQS16MC05XS9nLCAnXycpO1xuICAgICAgY2xhc3NOYW1lID0gYCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtjbGFzc05hbWV9YDtcbiAgICAgIGNvbnRhaW5lciA9IGRvYy5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke2NsYXNzTmFtZX1gKTtcbiAgICB9XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lciA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoY29udGFpbmVyLCBgaHRNZW51ICR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1gKTtcbiAgICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShjb250YWluZXIsIGNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICAvKipcbiAgICogT24gYWZ0ZXIgaW5pdCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uQWZ0ZXJJbml0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHd0VGFibGVcbiAgICB9ID0gdGhpcy5ob3RNZW51LnZpZXcuX3d0O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhO1xuICAgIGNvbnN0IGhpZGVyU3R5bGUgPSB3dFRhYmxlLmhpZGVyLnN0eWxlO1xuICAgIGNvbnN0IGhvbGRlclN0eWxlID0gd3RUYWJsZS5ob2xkZXIuc3R5bGU7XG4gICAgY29uc3QgY3VycmVudEhpZGVyV2lkdGggPSBwYXJzZUludChoaWRlclN0eWxlLndpZHRoLCAxMCk7XG4gICAgY29uc3QgcmVhbEhlaWdodCA9ICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKGRhdGEsIChhY2N1bXVsYXRvciwgdmFsdWUpID0+IGFjY3VtdWxhdG9yICsgKHZhbHVlLm5hbWUgPT09IF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SID8gMSA6IDI2KSwgMCk7XG5cbiAgICAvLyBBZGRpdGlvbmFsIDNweCB0byBtZW51J3Mgc2l6ZSBiZWNhdXNlIG9mIGFkZGl0aW9uYWwgYm9yZGVyIGFyb3VuZCBpdHMgYHRhYmxlLmh0Q29yZWAuXG4gICAgaG9sZGVyU3R5bGUud2lkdGggPSBgJHtjdXJyZW50SGlkZXJXaWR0aCArIDN9cHhgO1xuICAgIGhvbGRlclN0eWxlLmhlaWdodCA9IGAke3JlYWxIZWlnaHQgKyAzfXB4YDtcbiAgICBoaWRlclN0eWxlLmhlaWdodCA9IGhvbGRlclN0eWxlLmhlaWdodDtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGRlZmF1bHQgYWNjZXNzaWJpbGl0eSB0YWdzIHdpdGggdGhlIGNvbnRleHQgbWVudSdzXG4gICAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKHRoaXMuaG90TWVudS5yb290RWxlbWVudCwgWygwLCBfYTExeS5BMTFZX01FTlUpKCksICgwLCBfYTExeS5BMTFZX1RBQklOREVYKSgtMSldKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG9jdW1lbnQgbW91c2UgZG93biBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICovXG4gIG9uRG9jdW1lbnRNb3VzZURvd24oZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaXNPcGVuZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsb3NlIG1lbnUgd2hlbiBjbGlja2VkIGVsZW1lbnQgaXMgbm90IGJlbG9uZ3MgdG8gbWVudSBpdHNlbGZcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUgJiYgdGhpcy5ob3RNZW51ICYmICEoMCwgX2VsZW1lbnQuaXNDaGlsZE9mKShldmVudC50YXJnZXQsIHRoaXMuaG90TWVudS5yb290RWxlbWVudCkpIHtcbiAgICAgIHRoaXMuY2xvc2UodHJ1ZSk7XG5cbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgY2xvc2UgbWVudSB3aGVuIGNsaWNrZWQgZWxlbWVudCBpcyBub3QgYmVsb25ncyB0byBtZW51IG9yIHN1Ym1lbnUgKG5vdCBuZWNlc3NhcmlseSB0byBpdHNlbGYpXG4gICAgfSBlbHNlIGlmICgodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCkgfHwgdGhpcy5pc1N1Yk1lbnUoKSkgJiYgISgwLCBfZWxlbWVudC5pc0NoaWxkT2YpKGV2ZW50LnRhcmdldCwgJy5odE1lbnUnKSkge1xuICAgICAgdGhpcy5jbG9zZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRG9jdW1lbnQncyBjb250ZXh0bWVudSBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgb25Eb2N1bWVudENvbnRleHRNZW51KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbmVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCAnaHRDb3JlJykgJiYgKDAsIF9lbGVtZW50LmlzQ2hpbGRPZikoZXZlbnQudGFyZ2V0LCB0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5NZW51ID0gTWVudTtcbigwLCBfb2JqZWN0Lm1peGluKShNZW51LCBfbG9jYWxIb29rcy5kZWZhdWx0KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlTWVudUl0ZW1SZW5kZXJlciA9IGNyZWF0ZU1lbnVJdGVtUmVuZGVyZXI7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG4vKipcbiAqIENyZWF0ZXMgdGhlIG1lbnUgcmVuZGVyZXIgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29yZX0gbWFpblRhYmxlSG90IFRoZSBtYWluIHRhYmxlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWVudUl0ZW1SZW5kZXJlcihtYWluVGFibGVIb3QpIHtcbiAgLyoqXG4gICAqIE1lbnUgaXRlbSByZW5kZXJlci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtDb3JlfSBtZW51SG90IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7SFRNTENlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSBpZiB1c2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVGhlIGNlbGwgdmFsdWUuXG4gICAqL1xuICByZXR1cm4gKG1lbnVIb3QsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAoVEQuaGFzQXR0cmlidXRlKCdnaG9zdC10YWJsZScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSBtZW51SG90LmdldFNvdXJjZURhdGFBdFJvdyhyb3cpO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBtYWluVGFibGVIb3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmNhbGwobWFpblRhYmxlSG90KSA6IHZhbHVlO1xuICAgICgwLCBfZWxlbWVudC5lbXB0eSkoVEQpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykod3JhcHBlciwgJ2h0SXRlbVdyYXBwZXInKTtcbiAgICBpZiAobWFpblRhYmxlSG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MpIHtcbiAgICAgIGNvbnN0IGlzRm9jdXNhYmxlID0gISgwLCBfdXRpbHMuaXNJdGVtRGlzYWJsZWQpKGl0ZW0sIG1haW5UYWJsZUhvdCkgJiYgISgwLCBfdXRpbHMuaXNJdGVtU2VsZWN0aW9uRGlzYWJsZWQpKGl0ZW0pICYmICEoMCwgX3V0aWxzLmlzSXRlbVNlcGFyYXRvcikoaXRlbSk7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShURCwgWygwLCBfYTExeS5BMTFZX01FTlVfSVRFTSkoKSwgKDAsIF9hMTF5LkExMVlfTEFCRUwpKGl0ZW1WYWx1ZSksIC4uLihpc0ZvY3VzYWJsZSA/IFsoMCwgX2ExMXkuQTExWV9UQUJJTkRFWCkoLTEpXSA6IFtdKSwgLi4uKCgwLCBfdXRpbHMuaXNJdGVtRGlzYWJsZWQpKGl0ZW0sIG1haW5UYWJsZUhvdCkgPyBbKDAsIF9hMTF5LkExMVlfRElTQUJMRUQpKCldIDogW10pLCAuLi4oKDAsIF91dGlscy5pc0l0ZW1TdWJNZW51KShpdGVtKSA/IFsoMCwgX2ExMXkuQTExWV9FWFBBTkRFRCkoZmFsc2UpXSA6IFtdKV0pO1xuICAgIH1cbiAgICBURC5jbGFzc05hbWUgPSAnJztcbiAgICBURC5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcbiAgICBpZiAoKDAsIF91dGlscy5pc0l0ZW1TZXBhcmF0b3IpKGl0ZW0pKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKFRELCAnaHRTZXBhcmF0b3InKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpdGVtLnJlbmRlcmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKFRELCAnaHRDdXN0b21NZW51UmVuZGVyZXInKTtcbiAgICAgIFRELmFwcGVuZENoaWxkKGl0ZW0ucmVuZGVyZXIobWVudUhvdCwgd3JhcHBlciwgcm93LCBjb2wsIHByb3AsIGl0ZW1WYWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2VsZW1lbnQuZmFzdElubmVySFRNTCkod3JhcHBlciwgaXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKCgwLCBfdXRpbHMuaXNJdGVtRGlzYWJsZWQpKGl0ZW0sIG1haW5UYWJsZUhvdCkpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoVEQsICdodERpc2FibGVkJyk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3V0aWxzLmlzSXRlbVNlbGVjdGlvbkRpc2FibGVkKShpdGVtKSkge1xuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShURCwgJ2h0U2VsZWN0aW9uRGlzYWJsZWQnKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbHMuaXNJdGVtU3ViTWVudSkoaXRlbSkpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoVEQsICdodFN1Ym1lbnUnKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZU1lbnVOYXZpZ2F0b3IgPSBjcmVhdGVNZW51TmF2aWdhdG9yO1xudmFyIF9wYWdpbmF0b3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvcGFnaW5hdG9yXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyoqXG4gKiBDcmVhdGVzIG5hdmlnYXRvciBmb3IgbWVudXMgYW5kIHN1Ym1lbnVzLlxuICpcbiAqIEBwYXJhbSB7SGFuZHNvbnRhYmxlfSBob3RNZW51IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2Ugb2YgdGhlIG1lbnUuXG4gKiBAcmV0dXJucyB7UGFnaW5hdG9yfVxuICovXG5mdW5jdGlvbiBjcmVhdGVNZW51TmF2aWdhdG9yKGhvdE1lbnUpIHtcbiAgcmV0dXJuICgwLCBfcGFnaW5hdG9yLmNyZWF0ZVBhZ2luYXRvcikoe1xuICAgIHNpemU6ICgpID0+IGhvdE1lbnUuY291bnRSb3dzKCksXG4gICAgb25JdGVtU2VsZWN0KGN1cnJlbnRJdGVtLCBkaXJlY3RJdGVtQ2hhbmdlKSB7XG4gICAgICBjb25zdCBjZWxsID0gaG90TWVudS5nZXRDZWxsKGN1cnJlbnRJdGVtLCAwKTtcbiAgICAgIGlmICghY2VsbCB8fCAoMCwgX3V0aWxzLmlzU2VwYXJhdG9yKShjZWxsKSB8fCAoMCwgX3V0aWxzLmlzRGlzYWJsZWQpKGNlbGwpIHx8ICgwLCBfdXRpbHMuaXNTZWxlY3Rpb25EaXNhYmxlZCkoY2VsbCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaG90TWVudS5zZWxlY3RDZWxsKGN1cnJlbnRJdGVtLCAwLCAuLi4oZGlyZWN0SXRlbUNoYW5nZSA/IFtjdXJyZW50SXRlbSwgMCwgZmFsc2UsIGZhbHNlXSA6IFtdKSk7XG4gICAgfSxcbiAgICBvbkNsZWFyKCkge1xuICAgICAgaG90TWVudS5kZXNlbGVjdENlbGwoKTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfY3Vyc29yMiA9IHJlcXVpcmUoXCIuL2N1cnNvclwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcG9zaXRpb25pbmcgdGhlIG1lbnUgYW5kIHN1Ym1lbnVzIGluIHRoZSBjb3JyZWN0IHBsYWNlIHJlbGF0aXZlIHRvIHRoZVxuICogY3Vyc29yIHBvc2l0aW9uIChET00gZWxlbWVudCBvciBtb3VzZSBjb29yZGluYXRlcykuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBQb3NpdGlvbmVyXG4gKi9cbnZhciBfY29udGFpbmVyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3BhcmVudENvbnRhaW5lciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jdXJzb3IgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfa2VlcEluVmlld3BvcnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfb2Zmc2V0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBQb3NpdGlvbmVyIHtcbiAgY29uc3RydWN0b3Ioa2VlcEluVmlld3BvcnQpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbWVudSBjb250YWluZXIgZWxlbWVudCB0aGUgcG9zaXRpb25pbmcgd2lsbCBiZSBhcHBsaWVkIHRvLlxuICAgICAqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb250YWluZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogRm9yIHBvc2l0aW9uaW5nIHRoZSBzdWJtZW51LCB0aGUgcGFyZW50IGVsZW1lbnQgaXMgdXNlZCB0byBjYWxjdWxhdGUgb2Zmc2V0cyB0byBlbnN1cmUgdGhhdCBzdWJtZW51XG4gICAgICogaXMgcG9zaXRpb25lZCByaWdodCBuZXh0IHRvIHRoZSBwYXJlbnQgbWVudS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcGFyZW50Q29udGFpbmVyLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbnN0YW5jZSBvZiB0aGUgQ3Vyc29yIGNsYXNzLlxuICAgICAqXG4gICAgICogQHR5cGUge0N1cnNvcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3Vyc29yLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEVuYWJsaW5nIHRoZSBvcHRpb24gYWxsb3dzIGNoYW5naW5nIHRoZSBwb3NpdGlvbiBjYWxjdWxhdGlvbiBzbyB0aGF0IHRoZSBtZW51cyAob3Igc3VibWVudXMpXG4gICAgICogYXJlIGFsd2F5cyBwbGFjZWQgd2l0aGluIHRoZSB2aXNpYmxlIHZpZXdwb3J0IG9mIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2tlZXBJblZpZXdwb3J0LCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQWxsb3dzIGFwcGx5IHRoZSBwb3NpdGlvbiBvZmZzZXQgZm9yIGRpcmVjdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7e2Fib3ZlOiBudW1iZXIsIGJlbG93OiBudW1iZXIsIGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlcn19XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX29mZnNldCwge1xuICAgICAgYWJvdmU6IDAsXG4gICAgICBiZWxvdzogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMFxuICAgIH0pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfa2VlcEluVmlld3BvcnQsIHRoaXMsIGtlZXBJblZpZXdwb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIG9mZnNldCBwb3NpdGlvbiBmb3Igc3BlY2lmaWVkIGRpcmVjdGlvbnMgKGBhYm92ZWAsIGBiZWxvd2AsIGBsZWZ0YCBvciBgcmlnaHRgKS5cbiAgICpcbiAgICogQHBhcmFtIHsnYWJvdmUnIHwgJ2JlbG93JyB8ICdsZWZ0JyB8ICdyaWdodCd9IGRpcmVjdGlvbiBBIGRpcmVjdGlvbiBuYW1lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXSBPZmZzZXQgdmFsdWUuXG4gICAqIEByZXR1cm5zIHtQb3NpdGlvbmVyfVxuICAgKi9cbiAgc2V0T2Zmc2V0KGRpcmVjdGlvbikge1xuICAgIGxldCBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpW2RpcmVjdGlvbl0gPSBvZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbWVudSBlbGVtZW50IHRvIHdvcmsgd2l0aC4gVGhlIGVsZW1lbnQgY2FuIGJlIG93bmVkIGJ5IHRoZSBtYWluIG1lbnUgb3IgdGhlIHN1Ym1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgbWVudSBjb250YWluZXIgZWxlbWVudC5cbiAgICogQHJldHVybnMge1Bvc2l0aW9uZXJ9XG4gICAqL1xuICBzZXRFbGVtZW50KGNvbnRhaW5lcikge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29udGFpbmVyLCB0aGlzLCBjb250YWluZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmVudCBtZW51IGVsZW1lbnQgdG8gd29yayB3aXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXIgVGhlIHBhcmVudCBtZW51IGNvbnRhaW5lciBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7UG9zaXRpb25lcn1cbiAgICovXG4gIHNldFBhcmVudEVsZW1lbnQoY29udGFpbmVyKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wYXJlbnRDb250YWluZXIsIHRoaXMsIGNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbWVudSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8TW91c2VFdmVudH0gY29vcmRzIFRoZSBsaXRlcmFsIG9iamVjdCB3aXRoIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BzIG9yIGFcbiAgICogbW91c2UgZXZlbnQgb2JqZWN0LlxuICAgKi9cbiAgdXBkYXRlUG9zaXRpb24oY29vcmRzKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jdXJzb3IsIHRoaXMsIG5ldyBfY3Vyc29yMi5DdXJzb3IoY29vcmRzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbnRhaW5lciwgdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpO1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2tlZXBJblZpZXdwb3J0LCB0aGlzKSkge1xuICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS5maXRzQmVsb3coX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb250YWluZXIsIHRoaXMpKSkge1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTtcbiAgICAgIH0gZWxzZSBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJzb3IsIHRoaXMpLmZpdHNBYm92ZShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbnRhaW5lciwgdGhpcykpKSB7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKTtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbWVudSBob3Jpem9udGFsIHBvc2l0aW9uLlxuICAgKi9cbiAgdXBkYXRlSG9yaXpvbnRhbFBvc2l0aW9uKCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbnRhaW5lciwgdGhpcykuZGlyID09PSAncnRsJykge1xuICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS5maXRzT25MZWZ0KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29udGFpbmVyLCB0aGlzKSkpIHtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnNvciwgdGhpcykuZml0c09uUmlnaHQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb250YWluZXIsIHRoaXMpKSkge1xuICAgICAgdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbWVudSBwb3NpdGlvbiBhYm92ZSB0aGUgY3Vyc29yIG9iamVjdC5cbiAgICovXG4gIHNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKSB7XG4gICAgbGV0IHRvcCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb2Zmc2V0LCB0aGlzKS5hYm92ZSArIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS50b3AgLSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbnRhaW5lciwgdGhpcykub2Zmc2V0SGVpZ2h0O1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3BhcmVudENvbnRhaW5lciwgdGhpcykpIHtcbiAgICAgIHRvcCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS50b3AgKyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnNvciwgdGhpcykuY2VsbEhlaWdodCAtIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29udGFpbmVyLCB0aGlzKS5vZmZzZXRIZWlnaHQgKyAzO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbnRhaW5lciwgdGhpcykuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBtZW51IHBvc2l0aW9uIGJlbG93IHRoZSBjdXJzb3Igb2JqZWN0LlxuICAgKi9cbiAgc2V0UG9zaXRpb25CZWxvd0N1cnNvcigpIHtcbiAgICBsZXQgdG9wID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpLmJlbG93ICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJzb3IsIHRoaXMpLnRvcCArIDE7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcGFyZW50Q29udGFpbmVyLCB0aGlzKSkge1xuICAgICAgdG9wID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJzb3IsIHRoaXMpLnRvcCAtIDE7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29udGFpbmVyLCB0aGlzKS5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1lbnUgcG9zaXRpb24gb24gdGhlIHJpZ2h0IG9mIHRoZSBjdXJzb3Igb2JqZWN0LlxuICAgKi9cbiAgc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKSB7XG4gICAgbGV0IGxlZnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnNvciwgdGhpcykubGVmdDtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wYXJlbnRDb250YWluZXIsIHRoaXMpKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJpZ2h0OiBwYXJlbnRNZW51UmlnaHRcbiAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3BhcmVudENvbnRhaW5lciwgdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIC8vIG1vdmUgdGhlIHN1YiBtZW51IGJ5IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50J3MgYm9yZGVyICh1c3VhbGx5IGJ5IDEtMiBwaXhlbHMpXG4gICAgICBsZWZ0ICs9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS5jZWxsV2lkdGggKyBwYXJlbnRNZW51UmlnaHQgLSAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJzb3IsIHRoaXMpLmxlZnQgKyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnNvciwgdGhpcykuY2VsbFdpZHRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVmdCArPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29mZnNldCwgdGhpcykucmlnaHQ7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29udGFpbmVyLCB0aGlzKS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbWVudSBwb3NpdGlvbiBvbiB0aGUgbGVmdCBvZiB0aGUgY3Vyc29yIG9iamVjdC5cbiAgICovXG4gIHNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKSB7XG4gICAgbGV0IGxlZnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29mZnNldCwgdGhpcykubGVmdCArIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS5sZWZ0IC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb250YWluZXIsIHRoaXMpLm9mZnNldFdpZHRoO1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3BhcmVudENvbnRhaW5lciwgdGhpcykpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbGVmdDogcGFyZW50TWVudUxlZnRcbiAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3BhcmVudENvbnRhaW5lciwgdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIC8vIG1vdmUgdGhlIHN1YiBtZW51IGJ5IHRoZSB3aWR0aCBvZiB0aGUgcGFyZW50J3MgYm9yZGVyICh1c3VhbGx5IGJ5IDEtMiBwaXhlbHMpXG4gICAgICBsZWZ0IC09IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3Vyc29yLCB0aGlzKS5sZWZ0IC0gcGFyZW50TWVudUxlZnQ7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29udGFpbmVyLCB0aGlzKS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gIH1cbn1cbmV4cG9ydHMuUG9zaXRpb25lciA9IFBvc2l0aW9uZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUtleWJvYXJkU2hvcnRjdXRzQ3RybCA9IGNyZWF0ZUtleWJvYXJkU2hvcnRjdXRzQ3RybDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZGVmYXVsdFNob3J0Y3V0c0xpc3QgPSByZXF1aXJlKFwiLi9kZWZhdWx0U2hvcnRjdXRzTGlzdFwiKTtcbmNvbnN0IFNIT1JUQ1VUU19DT05URVhUID0gJ21lbnUnO1xuY29uc3QgU0hPUlRDVVRTX0dST1VQID0gU0hPUlRDVVRTX0NPTlRFWFQ7XG5cbi8qKlxuICogQHR5cGVkZWYgS2V5Ym9hcmRTaG9ydGN1dHNNZW51Q29udHJvbGxlclxuICogQHByb3BlcnR5IHtmdW5jdGlvbihLZXlib2FyZFNob3J0Y3V0W10pOiB2b2lkfSBhZGRDdXN0b21TaG9ydGN1dHMgQWRkcyAoYnkgcmVwbGFjaW5nKSBuZXcga2V5Ym9hcmQgc2hvcnRjdXRzIHRvIHRoZSBtZW51LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbihzdHJpbmcpOiBudW1iZXJ9IGdldENvbnRleHQgR2V0cyB0aGUga2V5Ym9hcmQgc2hvcnRjdXRzIGNvbnRleHQgYnkgbmFtZS5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gbGlzdGVuIFNldHMgdGhlIGFjdGl2ZSBrZXlib2FyZCBzaG9ydGN1dHMgY29udGV4dCBvZiB0aGUgbWVudS5cbiAqL1xuLyoqXG4gKiBDcmVhdGVzIHRoZSBjb250cm9sbGVyIG9iamVjdCB0aGF0IGFsbG93cyBleHRlbmRpbmcgdGhlIGtleWJvYXJkIHNob3J0Y3V0cyBvZiB0aGUgbWVudS5cbiAqXG4gKiBAcGFyYW0ge01lbnV9IG1lbnUgVGhlIG1lbnUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0FycmF5PHsgc2hvcnRjdXRzOiBLZXlib2FyZFNob3J0Y3V0LCBjb250ZXh0TmFtZTogc3RyaW5nIH0+fSBbY3VzdG9tS2V5Ym9hcmRTaG9ydGN1dHNdIFRoZSBsaXN0IG9mIHRoZSBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICogQHJldHVybnMge0tleWJvYXJkU2hvcnRjdXRzTWVudUNvbnRyb2xsZXJ9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkU2hvcnRjdXRzQ3RybChtZW51KSB7XG4gIGxldCBjdXN0b21LZXlib2FyZFNob3J0Y3V0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gIGNvbnN0IGN1c3RvbVNob3J0Y3V0cyA9IFtdO1xuICBfYWRkU2hvcnRjdXRzKCgwLCBfZGVmYXVsdFNob3J0Y3V0c0xpc3QuY3JlYXRlRGVmYXVsdFNob3J0Y3V0c0xpc3QpKG1lbnUpKTtcbiAgY3VzdG9tS2V5Ym9hcmRTaG9ydGN1dHMuZm9yRWFjaChfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAgc2hvcnRjdXRzLFxuICAgICAgY29udGV4dE5hbWVcbiAgICB9ID0gX3JlZjtcbiAgICBhZGRDdXN0b21TaG9ydGN1dHMoc2hvcnRjdXRzLCBjb250ZXh0TmFtZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBZGRzIGtleWJvYXJkIHNob3J0Y3V0cyB0byB0aGUgbWVudS5cbiAgICpcbiAgICogQHBhcmFtIHtLZXlib2FyZFNob3J0Y3V0W119IHNob3J0Y3V0cyBLZXlib2FyZCBzaG9ydGN1dHMgdG8gYWRkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHROYW1lXSBUaGUgY29udGV4dCBuYW1lIHRvIGNyZWF0ZSBvciB1c2UuXG4gICAqL1xuICBmdW5jdGlvbiBfYWRkU2hvcnRjdXRzKHNob3J0Y3V0cywgY29udGV4dE5hbWUpIHtcbiAgICBnZXRDb250ZXh0KGNvbnRleHROYW1lKS5hZGRTaG9ydGN1dHMoc2hvcnRjdXRzLCB7XG4gICAgICBncm91cDogU0hPUlRDVVRTX0NPTlRFWFRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGN1c3RvbSBrZXlib2FyZCBzaG9ydGN1dHMgdG8gdGhlIG1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRTaG9ydGN1dFtdfSBzaG9ydGN1dHMgS2V5Ym9hcmQgc2hvcnRjdXRzIHRvIGFkZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0TmFtZV0gVGhlIGNvbnRleHQgbmFtZSB0byBjcmVhdGUgb3IgdXNlLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkQ3VzdG9tU2hvcnRjdXRzKHNob3J0Y3V0cywgY29udGV4dE5hbWUpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gZ2V0Q29udGV4dChjb250ZXh0TmFtZSk7XG4gICAgc2hvcnRjdXRzLmZvckVhY2goX3JlZjIgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAga2V5c1xuICAgICAgfSA9IF9yZWYyO1xuICAgICAga2V5cy5mb3JFYWNoKGsgPT4gY29udGV4dC5yZW1vdmVTaG9ydGN1dHNCeUtleXMoaykpO1xuICAgIH0pO1xuICAgIGN1c3RvbVNob3J0Y3V0cy5wdXNoKHtcbiAgICAgIHNob3J0Y3V0cyxcbiAgICAgIGNvbnRleHROYW1lXG4gICAgfSk7XG4gICAgX2FkZFNob3J0Y3V0cyhzaG9ydGN1dHMsIGNvbnRleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCByZWdpc3RlcmVkIGN1c3RvbSBrZXlib2FyZCBzaG9ydGN1dHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheTx7IHNob3J0Y3V0czogS2V5Ym9hcmRTaG9ydGN1dCwgY29udGV4dE5hbWU6IHN0cmluZyB9Pn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEN1c3RvbVNob3J0Y3V0cygpIHtcbiAgICByZXR1cm4gWy4uLmN1c3RvbVNob3J0Y3V0c107XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY29udGV4dCBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dE5hbWUgVGhlIGNvbnRleHQgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIF9nZXRDb250ZXh0TmFtZShjb250ZXh0TmFtZSkge1xuICAgIHJldHVybiBjb250ZXh0TmFtZSA/IGAke1NIT1JUQ1VUU19HUk9VUH06JHtjb250ZXh0TmFtZX1gIDogU0hPUlRDVVRTX0dST1VQO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGNvbnRleHQgYnkgaXRzIG5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0TmFtZSBUaGUgY29udGV4dCBuYW1lLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q29udGV4dChjb250ZXh0TmFtZSkge1xuICAgIHZhciBfbWFuYWdlciRnZXRDb250ZXh0O1xuICAgIGNvbnN0IG1hbmFnZXIgPSBtZW51LmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgbmFtZSA9IF9nZXRDb250ZXh0TmFtZShjb250ZXh0TmFtZSk7XG4gICAgcmV0dXJuIChfbWFuYWdlciRnZXRDb250ZXh0ID0gbWFuYWdlci5nZXRDb250ZXh0KG5hbWUpKSAhPT0gbnVsbCAmJiBfbWFuYWdlciRnZXRDb250ZXh0ICE9PSB2b2lkIDAgPyBfbWFuYWdlciRnZXRDb250ZXh0IDogbWFuYWdlci5hZGRDb250ZXh0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBzcGVjaWZpZWQgY29udGV4dCBhY3RpdmUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0TmFtZSBUaGUgY29udGV4dCBuYW1lLlxuICAgKi9cbiAgZnVuY3Rpb24gbGlzdGVuKGNvbnRleHROYW1lKSB7XG4gICAgbWVudS5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKF9nZXRDb250ZXh0TmFtZShjb250ZXh0TmFtZSkpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWRkQ3VzdG9tU2hvcnRjdXRzLFxuICAgIGdldEN1c3RvbVNob3J0Y3V0cyxcbiAgICBnZXRDb250ZXh0LFxuICAgIGxpc3RlblxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5maWx0ZXJTZXBhcmF0b3JzID0gZmlsdGVyU2VwYXJhdG9ycztcbmV4cG9ydHMuaGFzU3ViTWVudSA9IGhhc1N1Yk1lbnU7XG5leHBvcnRzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuZXhwb3J0cy5pc0l0ZW1EaXNhYmxlZCA9IGlzSXRlbURpc2FibGVkO1xuZXhwb3J0cy5pc0l0ZW1IaWRkZW4gPSBpc0l0ZW1IaWRkZW47XG5leHBvcnRzLmlzSXRlbVNlbGVjdGlvbkRpc2FibGVkID0gaXNJdGVtU2VsZWN0aW9uRGlzYWJsZWQ7XG5leHBvcnRzLmlzSXRlbVNlcGFyYXRvciA9IGlzSXRlbVNlcGFyYXRvcjtcbmV4cG9ydHMuaXNJdGVtU3ViTWVudSA9IGlzSXRlbVN1Yk1lbnU7XG5leHBvcnRzLmlzU2VsZWN0aW9uRGlzYWJsZWQgPSBpc1NlbGVjdGlvbkRpc2FibGVkO1xuZXhwb3J0cy5pc1NlcGFyYXRvciA9IGlzU2VwYXJhdG9yO1xuZXhwb3J0cy5ub3JtYWxpemVTZWxlY3Rpb24gPSBub3JtYWxpemVTZWxlY3Rpb247XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9wcmVkZWZpbmVkSXRlbXMgPSByZXF1aXJlKFwiLi8uLi9wcmVkZWZpbmVkSXRlbXNcIik7XG4vKipcbiAqIEBwYXJhbSB7Q2VsbFJhbmdlW119IHNlbFJhbmdlcyBBbiBhcnJheSBvZiB0aGUgY2VsbCByYW5nZXMuXG4gKiBAcmV0dXJucyB7b2JqZWN0W119XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdGlvbihzZWxSYW5nZXMpIHtcbiAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlNYXApKHNlbFJhbmdlcywgcmFuZ2UgPT4gKHtcbiAgICBzdGFydDogcmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSxcbiAgICBlbmQ6IHJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgZWxlbWVudCBpcyBhIHN1Ym1lbnUgb3BlbmVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtVG9UZXN0IEl0ZW0gZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0l0ZW1TdWJNZW51KGl0ZW1Ub1Rlc3QpIHtcbiAgcmV0dXJuICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShpdGVtVG9UZXN0LCAnc3VibWVudScpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBlbGVtZW50IGlzIGEgbWVudSBzZXBhcmF0b3IuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW1Ub1Rlc3QgSXRlbSBlbGVtZW50LlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSXRlbVNlcGFyYXRvcihpdGVtVG9UZXN0KSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCAnaScpLnRlc3QoaXRlbVRvVGVzdC5uYW1lKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgZWxlbWVudCBwcmVzZW50cyB0aGUgZGlzYWJsZWQgbWVudSBpdGVtLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtVG9UZXN0IEl0ZW0gZWxlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBob3QgVGhlIGNvbnRleHQgZm9yIHRoZSBpdGVtIGZ1bmN0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSXRlbURpc2FibGVkKGl0ZW1Ub1Rlc3QsIGhvdCkge1xuICByZXR1cm4gaXRlbVRvVGVzdC5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0eXBlb2YgaXRlbVRvVGVzdC5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJyAmJiBpdGVtVG9UZXN0LmRpc2FibGVkLmNhbGwoaG90KSA9PT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgZWxlbWVudCBwcmVzZW50cyB0aGUgZGlzYWJsZWQgc2VsZWN0aW9uIG1lbnUgaXRlbS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaXRlbVRvVGVzdCBJdGVtIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNJdGVtU2VsZWN0aW9uRGlzYWJsZWQoaXRlbVRvVGVzdCkge1xuICByZXR1cm4gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGl0ZW1Ub1Rlc3QsICdkaXNhYmxlU2VsZWN0aW9uJyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY2VsbCBUaGUgSFRNTCBjZWxsIGVsZW1lbnQgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTZXBhcmF0b3IoY2VsbCkge1xuICByZXR1cm4gKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShjZWxsLCAnaHRTZXBhcmF0b3InKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjZWxsIFRoZSBIVE1MIGNlbGwgZWxlbWVudCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNTdWJNZW51KGNlbGwpIHtcbiAgcmV0dXJuICgwLCBfZWxlbWVudC5oYXNDbGFzcykoY2VsbCwgJ2h0U3VibWVudScpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNlbGwgVGhlIEhUTUwgY2VsbCBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRGlzYWJsZWQoY2VsbCkge1xuICByZXR1cm4gKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShjZWxsLCAnaHREaXNhYmxlZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNlbGwgVGhlIEhUTUwgY2VsbCBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU2VsZWN0aW9uRGlzYWJsZWQoY2VsbCkge1xuICByZXR1cm4gKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShjZWxsLCAnaHRTZWxlY3Rpb25EaXNhYmxlZCcpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtIFRoZSBvYmplY3Qgd2hpY2ggZGVzY3JpYmVzIHRoZSBjb250ZXh0IG1lbnUgaXRlbSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzSXRlbUhpZGRlbihpdGVtLCBpbnN0YW5jZSkge1xuICByZXR1cm4gIWl0ZW0uaGlkZGVuIHx8ICEodHlwZW9mIGl0ZW0uaGlkZGVuID09PSAnZnVuY3Rpb24nICYmIGl0ZW0uaGlkZGVuLmNhbGwoaW5zdGFuY2UpKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpdGVtcyBUaGUgY29udGV4dCBtZW51IGl0ZW1zIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yIFRoZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgY29udGV4dCBtZW51IHNlcGFyYXRvciBpdGVtLlxuICogQHJldHVybnMge29iamVjdFtdfVxuICovXG5mdW5jdGlvbiBzaGlmdFNlcGFyYXRvcnMoaXRlbXMsIHNlcGFyYXRvcikge1xuICBjb25zdCByZXN1bHQgPSBpdGVtcy5zbGljZSgwKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOykge1xuICAgIGlmIChyZXN1bHRbaV0ubmFtZSA9PT0gc2VwYXJhdG9yKSB7XG4gICAgICByZXN1bHQuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gaXRlbXMgVGhlIGNvbnRleHQgbWVudSBpdGVtcyBjb2xsZWN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvciBUaGUgc3RyaW5nIHdoaWNoIGlkZW50aWZpZXMgdGhlIGNvbnRleHQgbWVudSBzZXBhcmF0b3IgaXRlbS5cbiAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gcG9wU2VwYXJhdG9ycyhpdGVtcywgc2VwYXJhdG9yKSB7XG4gIGxldCByZXN1bHQgPSBpdGVtcy5zbGljZSgwKTtcbiAgcmVzdWx0LnJldmVyc2UoKTtcbiAgcmVzdWx0ID0gc2hpZnRTZXBhcmF0b3JzKHJlc3VsdCwgc2VwYXJhdG9yKTtcbiAgcmVzdWx0LnJldmVyc2UoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGR1cGxpY2F0ZWQgbWVudSBzZXBhcmF0b3JzIGZyb20gdGhlIGNvbnRleHQgbWVudSBpdGVtcyBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0W119IGl0ZW1zIFRoZSBjb250ZXh0IG1lbnUgaXRlbXMgY29sbGVjdGlvbi5cbiAqIEByZXR1cm5zIHtvYmplY3RbXX1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRHVwbGljYXRlZFNlcGFyYXRvcnMoaXRlbXMpIHtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShpdGVtcywgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgIGlmIChyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLm5hbWUgIT09IHZhbHVlLm5hbWUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIG1lbnUgc2VwYXJhdG9ycyBmcm9tIHRoZSBjb250ZXh0IG1lbnUgaXRlbXMgY29sbGVjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge29iamVjdFtdfSBpdGVtcyBUaGUgY29udGV4dCBtZW51IGl0ZW1zIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yIFRoZSBzdHJpbmcgd2hpY2ggaWRlbnRpZmllcyB0aGUgY29udGV4dCBtZW51IHNlcGFyYXRvciBpdGVtLlxuICogQHJldHVybnMge29iamVjdFtdfVxuICovXG5mdW5jdGlvbiBmaWx0ZXJTZXBhcmF0b3JzKGl0ZW1zKSB7XG4gIGxldCBzZXBhcmF0b3IgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SO1xuICBsZXQgcmVzdWx0ID0gaXRlbXMuc2xpY2UoMCk7XG4gIHJlc3VsdCA9IHNoaWZ0U2VwYXJhdG9ycyhyZXN1bHQsIHNlcGFyYXRvcik7XG4gIHJlc3VsdCA9IHBvcFNlcGFyYXRvcnMocmVzdWx0LCBzZXBhcmF0b3IpO1xuICByZXN1bHQgPSByZW1vdmVEdXBsaWNhdGVkU2VwYXJhdG9ycyhyZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gYWxpZ25tZW50SXRlbTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG52YXIgX3NlcGFyYXRvciA9IHJlcXVpcmUoXCIuL3NlcGFyYXRvclwiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IEtFWSA9IGV4cG9ydHMuS0VZID0gJ2FsaWdubWVudCc7XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gYWxpZ25tZW50SXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGlmICh0aGlzLmNvdW50Um93cygpID09PSAwIHx8IHRoaXMuY291bnRDb2xzKCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpICYmICF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSk7XG4gICAgfSxcbiAgICBzdWJtZW51OiB7XG4gICAgICBpdGVtczogW3tcbiAgICAgICAga2V5OiBgJHtLRVl9OmxlZnRgLFxuICAgICAgICBuYW1lKCkge1xuICAgICAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUKTtcbiAgICAgICAgICBjb25zdCBoYXNDbGFzcyA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Db25zaXN0ZW5jeSkodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksIChyb3csIGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuaW5kZXhPZignaHRMZWZ0JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNDbGFzcykge1xuICAgICAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmUgPSAoMCwgX3V0aWxzLmdldEFsaWdubWVudENsYXNzZXMpKHNlbGVjdGVkUmFuZ2UsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9ICdodExlZnQnO1xuICAgICAgICAgIHRoaXMucnVuSG9va3MoJ2JlZm9yZUNlbGxBbGlnbm1lbnQnLCBzdGF0ZUJlZm9yZSwgc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50KTtcbiAgICAgICAgICAoMCwgX3V0aWxzLmFsaWduKShzZWxlY3RlZFJhbmdlLCB0eXBlLCBhbGlnbm1lbnQsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCksIChyb3csIGNvbCwga2V5LCB2YWx1ZSkgPT4gdGhpcy5zZXRDZWxsTWV0YShyb3csIGNvbCwga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IGAke0tFWX06Y2VudGVyYCxcbiAgICAgICAgbmFtZSgpIHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSKTtcbiAgICAgICAgICBjb25zdCBoYXNDbGFzcyA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Db25zaXN0ZW5jeSkodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksIChyb3csIGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuaW5kZXhPZignaHRDZW50ZXInKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGhhc0NsYXNzKSB7XG4gICAgICAgICAgICBsYWJlbCA9ICgwLCBfdXRpbHMubWFya0xhYmVsQXNTZWxlY3RlZCkobGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrKCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgICAgICBjb25zdCBzdGF0ZUJlZm9yZSA9ICgwLCBfdXRpbHMuZ2V0QWxpZ25tZW50Q2xhc3Nlcykoc2VsZWN0ZWRSYW5nZSwgKHJvdywgY29sKSA9PiB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKS5jbGFzc05hbWUpO1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSAnaG9yaXpvbnRhbCc7XG4gICAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gJ2h0Q2VudGVyJztcbiAgICAgICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVDZWxsQWxpZ25tZW50Jywgc3RhdGVCZWZvcmUsIHNlbGVjdGVkUmFuZ2UsIHR5cGUsIGFsaWdubWVudCk7XG4gICAgICAgICAgKDAsIF91dGlscy5hbGlnbikoc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50LCAocm93LCBjb2wpID0+IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLCAocm93LCBjb2wsIGtleSwgdmFsdWUpID0+IHRoaXMuc2V0Q2VsbE1ldGEocm93LCBjb2wsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBgJHtLRVl9OnJpZ2h0YCxcbiAgICAgICAgbmFtZSgpIHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQpO1xuICAgICAgICAgIGNvbnN0IGhhc0NsYXNzID0gKDAsIF91dGlscy5jaGVja1NlbGVjdGlvbkNvbnNpc3RlbmN5KSh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwgKHJvdywgY29sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5pbmRleE9mKCdodFJpZ2h0JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNDbGFzcykge1xuICAgICAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmUgPSAoMCwgX3V0aWxzLmdldEFsaWdubWVudENsYXNzZXMpKHNlbGVjdGVkUmFuZ2UsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9ICdodFJpZ2h0JztcbiAgICAgICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVDZWxsQWxpZ25tZW50Jywgc3RhdGVCZWZvcmUsIHNlbGVjdGVkUmFuZ2UsIHR5cGUsIGFsaWdubWVudCk7XG4gICAgICAgICAgKDAsIF91dGlscy5hbGlnbikoc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50LCAocm93LCBjb2wpID0+IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLCAocm93LCBjb2wsIGtleSwgdmFsdWUpID0+IHRoaXMuc2V0Q2VsbE1ldGEocm93LCBjb2wsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBgJHtLRVl9Omp1c3RpZnlgLFxuICAgICAgICBuYW1lKCkge1xuICAgICAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9KVVNUSUZZKTtcbiAgICAgICAgICBjb25zdCBoYXNDbGFzcyA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Db25zaXN0ZW5jeSkodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksIChyb3csIGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuaW5kZXhPZignaHRKdXN0aWZ5JykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNDbGFzcykge1xuICAgICAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmUgPSAoMCwgX3V0aWxzLmdldEFsaWdubWVudENsYXNzZXMpKHNlbGVjdGVkUmFuZ2UsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9ICdodEp1c3RpZnknO1xuICAgICAgICAgIHRoaXMucnVuSG9va3MoJ2JlZm9yZUNlbGxBbGlnbm1lbnQnLCBzdGF0ZUJlZm9yZSwgc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50KTtcbiAgICAgICAgICAoMCwgX3V0aWxzLmFsaWduKShzZWxlY3RlZFJhbmdlLCB0eXBlLCBhbGlnbm1lbnQsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCksIChyb3csIGNvbCwga2V5LCB2YWx1ZSkgPT4gdGhpcy5zZXRDZWxsTWV0YShyb3csIGNvbCwga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBfc2VwYXJhdG9yLktFWVxuICAgICAgfSwge1xuICAgICAgICBrZXk6IGAke0tFWX06dG9wYCxcbiAgICAgICAgbmFtZSgpIHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfVE9QKTtcbiAgICAgICAgICBjb25zdCBoYXNDbGFzcyA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Db25zaXN0ZW5jeSkodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksIChyb3csIGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lO1xuICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUuaW5kZXhPZignaHRUb3AnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGhhc0NsYXNzKSB7XG4gICAgICAgICAgICBsYWJlbCA9ICgwLCBfdXRpbHMubWFya0xhYmVsQXNTZWxlY3RlZCkobGFiZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrKCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgICAgICBjb25zdCBzdGF0ZUJlZm9yZSA9ICgwLCBfdXRpbHMuZ2V0QWxpZ25tZW50Q2xhc3Nlcykoc2VsZWN0ZWRSYW5nZSwgKHJvdywgY29sKSA9PiB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKS5jbGFzc05hbWUpO1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSAndmVydGljYWwnO1xuICAgICAgICAgIGNvbnN0IGFsaWdubWVudCA9ICdodFRvcCc7XG4gICAgICAgICAgdGhpcy5ydW5Ib29rcygnYmVmb3JlQ2VsbEFsaWdubWVudCcsIHN0YXRlQmVmb3JlLCBzZWxlY3RlZFJhbmdlLCB0eXBlLCBhbGlnbm1lbnQpO1xuICAgICAgICAgICgwLCBfdXRpbHMuYWxpZ24pKHNlbGVjdGVkUmFuZ2UsIHR5cGUsIGFsaWdubWVudCwgKHJvdywgY29sKSA9PiB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKSwgKHJvdywgY29sLCBrZXksIHZhbHVlKSA9PiB0aGlzLnNldENlbGxNZXRhKHJvdywgY29sLCBrZXksIHZhbHVlKSk7XG4gICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICB9LCB7XG4gICAgICAgIGtleTogYCR7S0VZfTptaWRkbGVgLFxuICAgICAgICBuYW1lKCkge1xuICAgICAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEUpO1xuICAgICAgICAgIGNvbnN0IGhhc0NsYXNzID0gKDAsIF91dGlscy5jaGVja1NlbGVjdGlvbkNvbnNpc3RlbmN5KSh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwgKHJvdywgY29sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKS5jbGFzc05hbWU7XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICYmIGNsYXNzTmFtZS5pbmRleE9mKCdodE1pZGRsZScpICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaGFzQ2xhc3MpIHtcbiAgICAgICAgICAgIGxhYmVsID0gKDAsIF91dGlscy5tYXJrTGFiZWxBc1NlbGVjdGVkKShsYWJlbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYWJlbDtcbiAgICAgICAgfSxcbiAgICAgICAgY2FsbGJhY2soKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO1xuICAgICAgICAgIGNvbnN0IHN0YXRlQmVmb3JlID0gKDAsIF91dGlscy5nZXRBbGlnbm1lbnRDbGFzc2VzKShzZWxlY3RlZFJhbmdlLCAocm93LCBjb2wpID0+IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLmNsYXNzTmFtZSk7XG4gICAgICAgICAgY29uc3QgdHlwZSA9ICd2ZXJ0aWNhbCc7XG4gICAgICAgICAgY29uc3QgYWxpZ25tZW50ID0gJ2h0TWlkZGxlJztcbiAgICAgICAgICB0aGlzLnJ1bkhvb2tzKCdiZWZvcmVDZWxsQWxpZ25tZW50Jywgc3RhdGVCZWZvcmUsIHNlbGVjdGVkUmFuZ2UsIHR5cGUsIGFsaWdubWVudCk7XG4gICAgICAgICAgKDAsIF91dGlscy5hbGlnbikoc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50LCAocm93LCBjb2wpID0+IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLCAocm93LCBjb2wsIGtleSwgdmFsdWUpID0+IHRoaXMuc2V0Q2VsbE1ldGEocm93LCBjb2wsIGtleSwgdmFsdWUpKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgIH0sIHtcbiAgICAgICAga2V5OiBgJHtLRVl9OmJvdHRvbWAsXG4gICAgICAgIG5hbWUoKSB7XG4gICAgICAgICAgbGV0IGxhYmVsID0gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTSk7XG4gICAgICAgICAgY29uc3QgaGFzQ2xhc3MgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kpKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLCAocm93LCBjb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLmNsYXNzTmFtZTtcbiAgICAgICAgICAgIGlmIChjbGFzc05hbWUgJiYgY2xhc3NOYW1lLmluZGV4T2YoJ2h0Qm90dG9tJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChoYXNDbGFzcykge1xuICAgICAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjaygpIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgICAgICAgY29uc3Qgc3RhdGVCZWZvcmUgPSAoMCwgX3V0aWxzLmdldEFsaWdubWVudENsYXNzZXMpKHNlbGVjdGVkUmFuZ2UsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCkuY2xhc3NOYW1lKTtcbiAgICAgICAgICBjb25zdCB0eXBlID0gJ3ZlcnRpY2FsJztcbiAgICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSAnaHRCb3R0b20nO1xuICAgICAgICAgIHRoaXMucnVuSG9va3MoJ2JlZm9yZUNlbGxBbGlnbm1lbnQnLCBzdGF0ZUJlZm9yZSwgc2VsZWN0ZWRSYW5nZSwgdHlwZSwgYWxpZ25tZW50KTtcbiAgICAgICAgICAoMCwgX3V0aWxzLmFsaWduKShzZWxlY3RlZFJhbmdlLCB0eXBlLCBhbGlnbm1lbnQsIChyb3csIGNvbCkgPT4gdGhpcy5nZXRDZWxsTWV0YShyb3csIGNvbCksIChyb3csIGNvbCwga2V5LCB2YWx1ZSkgPT4gdGhpcy5zZXRDZWxsTWV0YShyb3csIGNvbCwga2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgfV1cbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBjbGVhckNvbHVtbkl0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICdjbGVhcl9jb2x1bW4nO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNsZWFyQ29sdW1uSXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NPTFVNTik7XG4gICAgfSxcbiAgICBjYWxsYmFjayhrZXksIHNlbGVjdGlvbikge1xuICAgICAgY29uc3Qgc3RhcnRDb2x1bW4gPSBzZWxlY3Rpb25bMF0uc3RhcnQuY29sO1xuICAgICAgY29uc3QgZW5kQ29sdW1uID0gc2VsZWN0aW9uWzBdLmVuZC5jb2w7XG4gICAgICBpZiAodGhpcy5jb3VudFJvd3MoKSkge1xuICAgICAgICB0aGlzLnBvcHVsYXRlRnJvbUFycmF5KDAsIHN0YXJ0Q29sdW1uLCBbW251bGxdXSwgTWF0aC5tYXgoc2VsZWN0aW9uWzBdLnN0YXJ0LnJvdywgc2VsZWN0aW9uWzBdLmVuZC5yb3cpLCBlbmRDb2x1bW4sICdDb250ZXh0TWVudS5jbGVhckNvbHVtbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSAmJiByYW5nZS5oaWdobGlnaHQuY29sIDwgMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29sdW1uTGVmdEl0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICdjb2xfbGVmdCc7XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY29sdW1uTGVmdEl0ZW0oKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBLRVksXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19JTlNFUlRfTEVGVCk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvbnN0IGxhdGVzdFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7XG4gICAgICBjb25zdCBhbHRlckFjdGlvbiA9IHRoaXMuaXNSdGwoKSA/ICdpbnNlcnRfY29sX2VuZCcgOiAnaW5zZXJ0X2NvbF9zdGFydCc7XG4gICAgICB0aGlzLmFsdGVyKGFsdGVyQWN0aW9uLCBsYXRlc3RTZWxlY3Rpb24uY29sLCAxLCAnQ29udGV4dE1lbnUuY29sdW1uTGVmdCcpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSAmJiByYW5nZS5oaWdobGlnaHQuY29sIDwgMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSkge1xuICAgICAgICBjb25zdCB0b3RhbENvbHVtbnMgPSB0aGlzLmNvdW50Q29scygpO1xuXG4gICAgICAgIC8vIEVuYWJsZSBcIkluc2VydCBjb2x1bW4gbGVmdFwiIG9ubHkgd2hlbiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uLlxuICAgICAgICByZXR1cm4gdG90YWxDb2x1bW5zID09PSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpIHx8IHRoaXMuY291bnRDb2xzKCkgPj0gdGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHM7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydENvbHVtbjtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBjb2x1bW5SaWdodEl0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICdjb2xfcmlnaHQnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvbHVtblJpZ2h0SXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVCk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvbnN0IGxhdGVzdFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpO1xuICAgICAgY29uc3QgYWx0ZXJBY3Rpb24gPSB0aGlzLmlzUnRsKCkgPyAnaW5zZXJ0X2NvbF9zdGFydCcgOiAnaW5zZXJ0X2NvbF9lbmQnO1xuICAgICAgdGhpcy5hbHRlcihhbHRlckFjdGlvbiwgbGF0ZXN0U2VsZWN0aW9uLmNvbCwgMSwgJ0NvbnRleHRNZW51LmNvbHVtblJpZ2h0Jyk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGlmICghdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZS5pc1NpbmdsZUhlYWRlcigpICYmIHJhbmdlLmhpZ2hsaWdodC5jb2wgPCAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICAgIC8vIEVuYWJsZSBcIkluc2VydCBjb2x1bW4gcmlnaHRcIiBhbHdheXMgd2hlbiB0aGUgbWVudSBpcyB0cmlnZ2VyZWQgYnkgY29ybmVyIGNsaWNrLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkgfHwgdGhpcy5jb3VudENvbHMoKSA+PSB0aGlzLmdldFNldHRpbmdzKCkubWF4Q29scztcbiAgICB9LFxuICAgIGhpZGRlbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1uO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYWRkSXRlbSA9IGFkZEl0ZW07XG5leHBvcnRzLnByZWRlZmluZWRJdGVtcyA9IHByZWRlZmluZWRJdGVtcztcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9hbGlnbm1lbnQgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9hbGlnbm1lbnRcIikpO1xuZXhwb3J0cy5BTElHTk1FTlQgPSBfYWxpZ25tZW50LktFWTtcbnZhciBfY2xlYXJDb2x1bW4gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9jbGVhckNvbHVtblwiKSk7XG5leHBvcnRzLkNMRUFSX0NPTFVNTiA9IF9jbGVhckNvbHVtbi5LRVk7XG52YXIgX2NvbHVtbkxlZnQgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9jb2x1bW5MZWZ0XCIpKTtcbmV4cG9ydHMuQ09MVU1OX0xFRlQgPSBfY29sdW1uTGVmdC5LRVk7XG52YXIgX2NvbHVtblJpZ2h0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vY29sdW1uUmlnaHRcIikpO1xuZXhwb3J0cy5DT0xVTU5fUklHSFQgPSBfY29sdW1uUmlnaHQuS0VZO1xudmFyIF9yZWFkT25seSA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3JlYWRPbmx5XCIpKTtcbmV4cG9ydHMuUkVBRF9PTkxZID0gX3JlYWRPbmx5LktFWTtcbnZhciBfcmVkbyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3JlZG9cIikpO1xuZXhwb3J0cy5SRURPID0gX3JlZG8uS0VZO1xudmFyIF9yZW1vdmVDb2x1bW4gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9yZW1vdmVDb2x1bW5cIikpO1xuZXhwb3J0cy5SRU1PVkVfQ09MVU1OID0gX3JlbW92ZUNvbHVtbi5LRVk7XG52YXIgX3JlbW92ZVJvdyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3JlbW92ZVJvd1wiKSk7XG5leHBvcnRzLlJFTU9WRV9ST1cgPSBfcmVtb3ZlUm93LktFWTtcbnZhciBfcm93QWJvdmUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9yb3dBYm92ZVwiKSk7XG5leHBvcnRzLlJPV19BQk9WRSA9IF9yb3dBYm92ZS5LRVk7XG52YXIgX3Jvd0JlbG93ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vcm93QmVsb3dcIikpO1xuZXhwb3J0cy5ST1dfQkVMT1cgPSBfcm93QmVsb3cuS0VZO1xudmFyIF9zZXBhcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi9zZXBhcmF0b3JcIikpO1xuZXhwb3J0cy5TRVBBUkFUT1IgPSBfc2VwYXJhdG9yLktFWTtcbnZhciBfbm9JdGVtcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL25vSXRlbXNcIikpO1xuZXhwb3J0cy5OT19JVEVNUyA9IF9ub0l0ZW1zLktFWTtcbnZhciBfdW5kbyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuL3VuZG9cIikpO1xuZXhwb3J0cy5VTkRPID0gX3VuZG8uS0VZO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgSVRFTVMgPSBleHBvcnRzLklURU1TID0gW19yb3dBYm92ZS5LRVksIF9yb3dCZWxvdy5LRVksIF9jb2x1bW5MZWZ0LktFWSwgX2NvbHVtblJpZ2h0LktFWSwgX2NsZWFyQ29sdW1uLktFWSwgX3JlbW92ZVJvdy5LRVksIF9yZW1vdmVDb2x1bW4uS0VZLCBfdW5kby5LRVksIF9yZWRvLktFWSwgX3JlYWRPbmx5LktFWSwgX2FsaWdubWVudC5LRVksIF9zZXBhcmF0b3IuS0VZLCBfbm9JdGVtcy5LRVldO1xuY29uc3QgX3ByZWRlZmluZWRJdGVtcyA9IHtcbiAgW19zZXBhcmF0b3IuS0VZXTogX3NlcGFyYXRvci5kZWZhdWx0LFxuICBbX25vSXRlbXMuS0VZXTogX25vSXRlbXMuZGVmYXVsdCxcbiAgW19yb3dBYm92ZS5LRVldOiBfcm93QWJvdmUuZGVmYXVsdCxcbiAgW19yb3dCZWxvdy5LRVldOiBfcm93QmVsb3cuZGVmYXVsdCxcbiAgW19jb2x1bW5MZWZ0LktFWV06IF9jb2x1bW5MZWZ0LmRlZmF1bHQsXG4gIFtfY29sdW1uUmlnaHQuS0VZXTogX2NvbHVtblJpZ2h0LmRlZmF1bHQsXG4gIFtfY2xlYXJDb2x1bW4uS0VZXTogX2NsZWFyQ29sdW1uLmRlZmF1bHQsXG4gIFtfcmVtb3ZlUm93LktFWV06IF9yZW1vdmVSb3cuZGVmYXVsdCxcbiAgW19yZW1vdmVDb2x1bW4uS0VZXTogX3JlbW92ZUNvbHVtbi5kZWZhdWx0LFxuICBbX3VuZG8uS0VZXTogX3VuZG8uZGVmYXVsdCxcbiAgW19yZWRvLktFWV06IF9yZWRvLmRlZmF1bHQsXG4gIFtfcmVhZE9ubHkuS0VZXTogX3JlYWRPbmx5LmRlZmF1bHQsXG4gIFtfYWxpZ25tZW50LktFWV06IF9hbGlnbm1lbnQuZGVmYXVsdFxufTtcblxuLyoqXG4gKiBHZXRzIG5ldyBvYmplY3Qgd2l0aCBhbGwgcHJlZGVmaW5lZCBtZW51IGl0ZW1zLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHByZWRlZmluZWRJdGVtcygpIHtcbiAgY29uc3QgaXRlbXMgPSB7fTtcbiAgKDAsIF9vYmplY3Qub2JqZWN0RWFjaCkoX3ByZWRlZmluZWRJdGVtcywgKGl0ZW1GYWN0b3J5LCBrZXkpID0+IHtcbiAgICBpdGVtc1trZXldID0gaXRlbUZhY3RvcnkoKTtcbiAgfSk7XG4gIHJldHVybiBpdGVtcztcbn1cblxuLyoqXG4gKiBBZGQgbmV3IHByZWRlZmluZWQgbWVudSBpdGVtIHRvIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgTWVudSBjb21tYW5kIGlkLlxuICogQHBhcmFtIHtvYmplY3R9IGl0ZW0gT2JqZWN0IGNvbW1hbmQgZGVzY3JpcHRvci5cbiAqL1xuZnVuY3Rpb24gYWRkSXRlbShrZXksIGl0ZW0pIHtcbiAgaWYgKElURU1TLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICBfcHJlZGVmaW5lZEl0ZW1zW2tleV0gPSBpdGVtO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBub0l0ZW1zSXRlbTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpO1xuY29uc3QgS0VZID0gZXhwb3J0cy5LRVkgPSAnbm9faXRlbXMnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG5vSXRlbXNJdGVtKCkge1xuICByZXR1cm4ge1xuICAgIGtleTogS0VZLFxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9jb25zdGFudHMuQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVMpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgaXNDb21tYW5kOiBmYWxzZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVhZE9ubHlJdGVtO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi91dGlsc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IEtFWSA9IGV4cG9ydHMuS0VZID0gJ21ha2VfcmVhZF9vbmx5JztcblxuLyoqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiByZWFkT25seUl0ZW0oKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBLRVksXG4gICAgbmFtZSgpIHtcbiAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWSk7XG4gICAgICBjb25zdCBhdExlYXN0T25lUmVhZE9ubHkgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kpKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLCAocm93LCBjb2wpID0+IHRoaXMuZ2V0Q2VsbE1ldGEocm93LCBjb2wpLnJlYWRPbmx5KTtcbiAgICAgIGlmIChhdExlYXN0T25lUmVhZE9ubHkpIHtcbiAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtMYWJlbEFzU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgY29uc3QgcmFuZ2VzID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgICBjb25zdCBhdExlYXN0T25lUmVhZE9ubHkgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kpKHJhbmdlcywgKHJvdywgY29sKSA9PiB0aGlzLmdldENlbGxNZXRhKHJvdywgY29sKS5yZWFkT25seSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocmFuZ2VzLCByYW5nZSA9PiB7XG4gICAgICAgIHJhbmdlLmZvckFsbCgocm93LCBjb2wpID0+IHtcbiAgICAgICAgICBpZiAocm93ID49IDAgJiYgY29sID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2VsbE1ldGEocm93LCBjb2wsICdyZWFkT25seScsICFhdExlYXN0T25lUmVhZE9ubHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZS5pc1NpbmdsZUhlYWRlcigpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY291bnRSb3dzKCkgPT09IDAgfHwgdGhpcy5jb3VudENvbHMoKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkgfHwgdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJlZG9JdGVtO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgS0VZID0gZXhwb3J0cy5LRVkgPSAncmVkbyc7XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVkb0l0ZW0oKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBLRVksXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19SRURPKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgdGhpcy5yZWRvKCk7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICBjb25zdCB1bmRvUmVkbyA9IHRoaXMuZ2V0UGx1Z2luKCd1bmRvUmVkbycpO1xuICAgICAgcmV0dXJuICF1bmRvUmVkbyB8fCAhdW5kb1JlZG8uaXNFbmFibGVkKCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5nZXRQbHVnaW4oJ3VuZG9SZWRvJykuaXNSZWRvQXZhaWxhYmxlKCk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gcmVtb3ZlQ29sdW1uSXRlbTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vc2VsZWN0aW9uL3V0aWxzXCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgS0VZID0gZXhwb3J0cy5LRVkgPSAncmVtb3ZlX2NvbCc7XG5cbi8qKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ29sdW1uSXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZCgpO1xuICAgICAgbGV0IHBsdXJhbEZvcm0gPSAwO1xuICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBwbHVyYWxGb3JtID0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBbLCBmcm9tQ29sdW1uLCwgdG9Db2x1bW5dID0gc2VsZWN0aW9uWzBdO1xuICAgICAgICAgIGlmIChmcm9tQ29sdW1uIC0gdG9Db2x1bW4gIT09IDApIHtcbiAgICAgICAgICAgIHBsdXJhbEZvcm0gPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT0xVTU4sIHBsdXJhbEZvcm0pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLmFsdGVyKCdyZW1vdmVfY29sJywgKDAsIF91dGlscy50cmFuc2Zvcm1TZWxlY3Rpb25Ub0NvbHVtbkRpc3RhbmNlKSh0aGlzKSwgbnVsbCwgJ0NvbnRleHRNZW51LnJlbW92ZUNvbHVtbicpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSAmJiByYW5nZS5oaWdobGlnaHQuY29sIDwgMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvdGFsQ29sdW1ucyA9IHRoaXMuY291bnRDb2xzKCk7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpIHtcbiAgICAgICAgLy8gRW5hYmxlIFwiUmVtb3ZlIGNvbHVtblwiIG9ubHkgd2hlbiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uLlxuICAgICAgICByZXR1cm4gdG90YWxDb2x1bW5zID09PSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpIHx8IHRvdGFsQ29sdW1ucyA9PT0gMDtcbiAgICB9LFxuICAgIGhpZGRlbigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1uO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJlbW92ZVJvd0l0ZW07XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4uLy4uLy4uL3NlbGVjdGlvbi91dGlsc1wiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IEtFWSA9IGV4cG9ydHMuS0VZID0gJ3JlbW92ZV9yb3cnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZVJvd0l0ZW0oKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiBLRVksXG4gICAgbmFtZSgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWQoKTtcbiAgICAgIGxldCBwbHVyYWxGb3JtID0gMDtcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcGx1cmFsRm9ybSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgW2Zyb21Sb3csLCB0b1Jvd10gPSBzZWxlY3Rpb25bMF07XG4gICAgICAgICAgaWYgKGZyb21Sb3cgLSB0b1JvdyAhPT0gMCkge1xuICAgICAgICAgICAgcGx1cmFsRm9ybSA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVywgcGx1cmFsRm9ybSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIC8vIFRPRE86IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBiZWxvdyBgMWAgbWF5IGJlIGltcHJvcGVyLiBUaGUgdGFibGUncyB3YXkgb2Ygd29yaywgYmVmb3JlIGNoYW5nZSBgZjE3NDdiMzkxMmVhM2IyMWZlNDIzZmQxMDJjYTk0Yzg3ZGI4MTM3OWAgd2FzIHJlc3RvcmVkLlxuICAgICAgLy8gVGhlcmUgaXMgc3RpbGwgcHJvYmxlbSB3aGVuIHJlbW92aW5nIG1vcmUgdGhhbiBvbmUgcm93LlxuICAgICAgdGhpcy5hbHRlcigncmVtb3ZlX3JvdycsICgwLCBfdXRpbHMudHJhbnNmb3JtU2VsZWN0aW9uVG9Sb3dEaXN0YW5jZSkodGhpcyksIDEsICdDb250ZXh0TWVudS5yZW1vdmVSb3cnKTtcbiAgICB9LFxuICAgIGRpc2FibGVkKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJhbmdlLmlzU2luZ2xlSGVhZGVyKCkgJiYgcmFuZ2UuaGlnaGxpZ2h0LnJvdyA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0b3RhbFJvd3MgPSB0aGlzLmNvdW50Um93cygpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICAgIC8vIEVuYWJsZSBcIlJlbW92ZSByb3dcIiBvbmx5IHdoZW4gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHJvdy5cbiAgICAgICAgcmV0dXJuIHRvdGFsUm93cyA9PT0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSB8fCB0b3RhbFJvd3MgPT09IDA7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvdztcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSByb3dBYm92ZUl0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICdyb3dfYWJvdmUnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJvd0Fib3ZlSXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JPV19BQk9WRSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvbnN0IGxhdGVzdFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7XG4gICAgICB0aGlzLmFsdGVyKCdpbnNlcnRfcm93X2Fib3ZlJywgbGF0ZXN0U2VsZWN0aW9uLnJvdywgMSwgJ0NvbnRleHRNZW51LnJvd0Fib3ZlJyk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZS5pc1NpbmdsZUhlYWRlcigpICYmIHJhbmdlLmhpZ2hsaWdodC5yb3cgPCAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsUm93cyA9IHRoaXMuY291bnRSb3dzKCk7XG5cbiAgICAgICAgLy8gRW5hYmxlIFwiSW5zZXJ0IHJvdyBhYm92ZVwiIG9ubHkgd2hlbiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcm93LlxuICAgICAgICByZXR1cm4gdG90YWxSb3dzID09PSAwO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpIHx8IHRoaXMuY291bnRSb3dzKCkgPj0gdGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3M7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvdztcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSByb3dCZWxvd0l0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICdyb3dfYmVsb3cnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHJvd0JlbG93SXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPVyk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvbnN0IGxhdGVzdFNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO1xuICAgICAgdGhpcy5hbHRlcignaW5zZXJ0X3Jvd19iZWxvdycsIGxhdGVzdFNlbGVjdGlvbi5yb3csIDEsICdDb250ZXh0TWVudS5yb3dCZWxvdycpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSAmJiByYW5nZS5oaWdobGlnaHQucm93IDwgMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSkge1xuICAgICAgICAvLyBFbmFibGUgXCJJbnNlcnQgcm93IGJlbG93XCIgYWx3YXlzIHdoZW4gdGhlIG1lbnUgaXMgdHJpZ2dlcmVkIGJ5IGNvcm5lciBjbGljay5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpIHx8IHRoaXMuY291bnRSb3dzKCkgPj0gdGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3M7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvdztcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBzZXBhcmF0b3JJdGVtO1xuY29uc3QgS0VZID0gZXhwb3J0cy5LRVkgPSAnLS0tLS0tLS0tJztcblxuLyoqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBzZXBhcmF0b3JJdGVtKCkge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IEtFWVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gdW5kb0l0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBLRVkgPSBleHBvcnRzLktFWSA9ICd1bmRvJztcblxuLyoqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiB1bmRvSXRlbSgpIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6IEtFWSxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1VORE8pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICB0aGlzLnVuZG8oKTtcbiAgICB9LFxuICAgIGhpZGRlbigpIHtcbiAgICAgIGNvbnN0IHVuZG9SZWRvID0gdGhpcy5nZXRQbHVnaW4oJ3VuZG9SZWRvJyk7XG4gICAgICByZXR1cm4gIXVuZG9SZWRvIHx8ICF1bmRvUmVkby5pc0VuYWJsZWQoKTtcbiAgICB9LFxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmdldFBsdWdpbigndW5kb1JlZG8nKS5pc1VuZG9BdmFpbGFibGUoKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmFsaWduID0gYWxpZ247XG5leHBvcnRzLmNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kgPSBjaGVja1NlbGVjdGlvbkNvbnNpc3RlbmN5O1xuZXhwb3J0cy5nZXRBbGlnbm1lbnRDbGFzc2VzID0gZ2V0QWxpZ25tZW50Q2xhc3NlcztcbmV4cG9ydHMuZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQgPSBnZXREb2N1bWVudE9mZnNldEJ5RWxlbWVudDtcbmV4cG9ydHMubWFya0xhYmVsQXNTZWxlY3RlZCA9IG1hcmtMYWJlbEFzU2VsZWN0ZWQ7XG5leHBvcnRzLnByZXBhcmVIb3Jpem9udGFsQWxpZ25DbGFzcyA9IHByZXBhcmVIb3Jpem9udGFsQWxpZ25DbGFzcztcbmV4cG9ydHMucHJlcGFyZVZlcnRpY2FsQWxpZ25DbGFzcyA9IHByZXBhcmVWZXJ0aWNhbEFsaWduQ2xhc3M7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgVGhlIGZ1bGwgZWxlbWVudCBjbGFzcyBuYW1lIHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25tZW50IFRoZSBhbGlnbm1lbnQgY2xhc3MgbmFtZSB0byBjb21wYXJlIHdpdGguXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBwcmVwYXJlVmVydGljYWxBbGlnbkNsYXNzKGNsYXNzTmFtZSwgYWxpZ25tZW50KSB7XG4gIGlmIChjbGFzc05hbWUuaW5kZXhPZihhbGlnbm1lbnQpICE9PSAtMSkge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cbiAgY29uc3QgcmVwbGFjZWRDbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgnaHRUb3AnLCAnJykucmVwbGFjZSgnaHRNaWRkbGUnLCAnJykucmVwbGFjZSgnaHRCb3R0b20nLCAnJykucmVwbGFjZSgnICAnLCAnJyk7XG4gIHJldHVybiBgJHtyZXBsYWNlZENsYXNzTmFtZX0gJHthbGlnbm1lbnR9YDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIFRoZSBmdWxsIGVsZW1lbnQgY2xhc3MgbmFtZSB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWdubWVudCBUaGUgYWxpZ25tZW50IGNsYXNzIG5hbWUgdG8gY29tcGFyZSB3aXRoLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUhvcml6b250YWxBbGlnbkNsYXNzKGNsYXNzTmFtZSwgYWxpZ25tZW50KSB7XG4gIGlmIChjbGFzc05hbWUuaW5kZXhPZihhbGlnbm1lbnQpICE9PSAtMSkge1xuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cbiAgY29uc3QgcmVwbGFjZWRDbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgnaHRMZWZ0JywgJycpLnJlcGxhY2UoJ2h0Q2VudGVyJywgJycpLnJlcGxhY2UoJ2h0UmlnaHQnLCAnJykucmVwbGFjZSgnaHRKdXN0aWZ5JywgJycpLnJlcGxhY2UoJyAgJywgJycpO1xuICByZXR1cm4gYCR7cmVwbGFjZWRDbGFzc05hbWV9ICR7YWxpZ25tZW50fWA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtDZWxsUmFuZ2VbXX0gcmFuZ2VzIEFuIGFycmF5IG9mIHRoZSBjZWxsIHJhbmdlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldEFsaWdubWVudENsYXNzZXMocmFuZ2VzLCBjYWxsYmFjaykge1xuICBjb25zdCBjbGFzc2VzID0ge307XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyYW5nZXMsIHJhbmdlID0+IHtcbiAgICByYW5nZS5mb3JBbGwoKHJvdywgY29sKSA9PiB7XG4gICAgICAvLyBBbGlnbm1lbnQgY2xhc3NlcyBzaG91bGQgb25seSBjb2xsZWN0ZWQgd2l0aGluIGNlbGwgcmFuZ2VzLiBXZSBza2lwIGhlYWRlciBjb29yZGluYXRlcy5cbiAgICAgIGlmIChyb3cgPj0gMCAmJiBjb2wgPj0gMCkge1xuICAgICAgICBpZiAoIWNsYXNzZXNbcm93XSkge1xuICAgICAgICAgIGNsYXNzZXNbcm93XSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNsYXNzZXNbcm93XVtjb2xdID0gY2FsbGJhY2socm93LCBjb2wpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtDZWxsUmFuZ2VbXX0gcmFuZ2VzIEFuIGFycmF5IG9mIHRoZSBjZWxsIHJhbmdlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBhbGlnbm1lbnQgYXhpcyAoJ2hvcml6b250YWwnIG9yICd2ZXJ0aWNhbCcpLlxuICogQHBhcmFtIHtzdHJpbmd9IGFsaWdubWVudCBDU1MgY2xhc3MgbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjZWxsRGVzY3JpcHRvciBUaGUgZnVuY3Rpb24gd2hpY2ggZmV0Y2hlcyB0aGUgY2VsbCBtZXRhIG9iamVjdCBiYXNlZCBpbiBwYXNzZWQgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9wZXJ0eVNldHRlciBUaGUgZnVuY3Rpb24gd2hpY2ggY29udGFpbnMgbG9naWMgZm9yIGFkZGVkL3JlbW92ZWQgYWxpZ25tZW50LlxuICovXG5mdW5jdGlvbiBhbGlnbihyYW5nZXMsIHR5cGUsIGFsaWdubWVudCwgY2VsbERlc2NyaXB0b3IsIHByb3BlcnR5U2V0dGVyKSB7XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyYW5nZXMsIHJhbmdlID0+IHtcbiAgICByYW5nZS5mb3JBbGwoKHJvdywgY29sKSA9PiB7XG4gICAgICAvLyBBbGlnbm1lbnQgY2xhc3NlcyBzaG91bGQgb25seSBjb2xsZWN0ZWQgd2l0aGluIGNlbGwgcmFuZ2VzLiBXZSBza2lwIGhlYWRlciBjb29yZGluYXRlcy5cbiAgICAgIGlmIChyb3cgPj0gMCAmJiBjb2wgPj0gMCkge1xuICAgICAgICBhcHBseUFsaWduQ2xhc3NOYW1lKHJvdywgY29sLCB0eXBlLCBhbGlnbm1lbnQsIGNlbGxEZXNjcmlwdG9yLCBwcm9wZXJ0eVNldHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGFsaWdubWVudCBheGlzICgnaG9yaXpvbnRhbCcgb3IgJ3ZlcnRpY2FsJykuXG4gKiBAcGFyYW0ge3N0cmluZ30gYWxpZ25tZW50IENTUyBjbGFzcyBuYW1lIHRvIGFkZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNlbGxEZXNjcmlwdG9yIFRoZSBmdW5jdGlvbiB3aGljaCBmZXRjaGVzIHRoZSBjZWxsIG1ldGEgb2JqZWN0IGJhc2VkIGluIHBhc3NlZCBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByb3BlcnR5U2V0dGVyIFRoZSBmdW5jdGlvbiB3aGljaCBjb250YWlucyBsb2dpYyBmb3IgYWRkZWQvcmVtb3ZlZCBhbGlnbm1lbnQuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5QWxpZ25DbGFzc05hbWUocm93LCBjb2wsIHR5cGUsIGFsaWdubWVudCwgY2VsbERlc2NyaXB0b3IsIHByb3BlcnR5U2V0dGVyKSB7XG4gIGNvbnN0IGNlbGxNZXRhID0gY2VsbERlc2NyaXB0b3Iocm93LCBjb2wpO1xuICBsZXQgY2xhc3NOYW1lID0gYWxpZ25tZW50O1xuICBpZiAoY2VsbE1ldGEuY2xhc3NOYW1lKSB7XG4gICAgaWYgKHR5cGUgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIGNsYXNzTmFtZSA9IHByZXBhcmVWZXJ0aWNhbEFsaWduQ2xhc3MoY2VsbE1ldGEuY2xhc3NOYW1lLCBhbGlnbm1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWUgPSBwcmVwYXJlSG9yaXpvbnRhbEFsaWduQ2xhc3MoY2VsbE1ldGEuY2xhc3NOYW1lLCBhbGlnbm1lbnQpO1xuICAgIH1cbiAgfVxuICBwcm9wZXJ0eVNldHRlcihyb3csIGNvbCwgJ2NsYXNzTmFtZScsIGNsYXNzTmFtZSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIFRoZSBsYWJlbCB0ZXh0LlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbWFya0xhYmVsQXNTZWxlY3RlZChsYWJlbCkge1xuICAvLyB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9pc3N1ZXMvMTk0NlxuICByZXR1cm4gYDxzcGFuIGNsYXNzPVwic2VsZWN0ZWRcIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMpfTwvc3Bhbj4ke2xhYmVsfWA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtDZWxsUmFuZ2VbXX0gcmFuZ2VzIEFuIGFycmF5IG9mIHRoZSBjZWxsIHJhbmdlcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2hlY2tTZWxlY3Rpb25Db25zaXN0ZW5jeShyYW5nZXMsIGNvbXBhcmF0b3IpIHtcbiAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyYW5nZXMpKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJhbmdlcywgcmFuZ2UgPT4ge1xuICAgICAgcmFuZ2UuZm9yQWxsKChyb3csIGNvbCkgPT4ge1xuICAgICAgICAvLyBTZWxlY3Rpb24gY29uc2lzdGVuY3kgc2hvdWxkIG9ubHkgY2hlY2sgd2l0aGluIGNlbGwgcmFuZ2VzLiBXZSBza2lwIGhlYWRlciBjb29yZGluYXRlcy5cbiAgICAgICAgaWYgKHJvdyA+PSAwICYmIGNvbCA+PSAwICYmIGNvbXBhcmF0b3Iocm93LCBjb2wpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFJldHVybnMgZG9jdW1lbnQgb2Zmc2V0IGJhc2VkIG9uIHRoZSBwYXNzZWQgZWxlbWVudC4gSWYgdGhlIGRvY3VtZW50IG9iamVjdHMgYmV0d2VlbiBlbGVtZW50IGFuZCB0aGVcbiAqIGJhc2UgZG9jdW1lbnQgYXJlIG5vdCB0aGUgc2FtZSB0aGUgb2Zmc2V0IGFzIHRvcCBhbmQgbGVmdCBwcm9wZXJ0aWVzIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50VG9DaGVjayBUaGUgZWxlbWVudCB0byBjb21wYXJlIHdpdGggRG9jdW1lbnQgb2JqZWN0LlxuICogQHBhcmFtIHtEb2N1bWVudH0gYmFzZURvY3VtZW50IFRoZSBiYXNlIERvY3VtZW50IG9iamVjdC5cbiAqIEByZXR1cm5zIHt7IHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIgfX1cbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQoZWxlbWVudFRvQ2hlY2ssIGJhc2VEb2N1bWVudCkge1xuICBjb25zdCBvZmZzZXQgPSB7XG4gICAgdG9wOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbiAgaWYgKGJhc2VEb2N1bWVudCAhPT0gZWxlbWVudFRvQ2hlY2sub3duZXJEb2N1bWVudCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGZyYW1lRWxlbWVudFxuICAgIH0gPSBiYXNlRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgY29uc3Qge1xuICAgICAgdG9wLFxuICAgICAgbGVmdFxuICAgIH0gPSBmcmFtZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgb2Zmc2V0LnRvcCA9IHRvcDtcbiAgICBvZmZzZXQubGVmdCA9IGxlZnQ7XG4gIH1cbiAgcmV0dXJuIG9mZnNldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQ2xpcGJvYXJkRGF0YSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICB9XG4gIHNldERhdGEodHlwZSwgdmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdHlwZV0gPSB2YWx1ZTtcbiAgfVxuICBnZXREYXRhKHR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3R5cGVdIHx8IHZvaWQgMDtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gQ2xpcGJvYXJkRGF0YTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcHlJdGVtO1xudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIik7XG4vKipcbiAqIEBwYXJhbSB7Q29weVBhc3RlfSBjb3B5UGFzdGVQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvcHlJdGVtKGNvcHlQYXN0ZVBsdWdpbikge1xuICByZXR1cm4ge1xuICAgIGtleTogJ2NvcHknLFxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9jb25zdGFudHMuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvcHlQYXN0ZVBsdWdpbi5jb3B5Q2VsbHNPbmx5KCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGlmICh0aGlzLmNvdW50Um93cygpID09PSAwIHx8IHRoaXMuY291bnRDb2xzKCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZCgpO1xuXG4gICAgICAvLyBEaXNhYmxlIGZvciBubyBzZWxlY3Rpb24gb3IgZm9yIG5vbi1jb250aWd1b3VzIHNlbGVjdGlvbi5cbiAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGhpZGRlbjogZmFsc2VcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcHlDb2x1bW5IZWFkZXJzT25seUl0ZW07XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xuLyoqXG4gKiBAcGFyYW0ge0NvcHlQYXN0ZX0gY29weVBhc3RlUGx1Z2luIFRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb3B5Q29sdW1uSGVhZGVyc09ubHlJdGVtKGNvcHlQYXN0ZVBsdWdpbikge1xuICByZXR1cm4ge1xuICAgIGtleTogJ2NvcHlfY29sdW1uX2hlYWRlcnNfb25seScsXG4gICAgbmFtZSgpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICBjb25zdCBub3VuRm9ybSA9IHNlbGVjdGVkUmFuZ2UgPyAoMCwgX251bWJlci5jbGFtcCkoc2VsZWN0ZWRSYW5nZS5nZXRXaWR0aCgpIC0gMSwgMCwgMSkgOiAwO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfY29uc3RhbnRzLkNPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWSwgbm91bkZvcm0pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICBjb3B5UGFzdGVQbHVnaW4uY29weUNvbHVtbkhlYWRlcnNPbmx5KCk7XG4gICAgfSxcbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIGlmICghdGhpcy5oYXNDb2xIZWFkZXJzKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZCgpO1xuXG4gICAgICAvLyBEaXNhYmxlIGZvciBubyBzZWxlY3Rpb24gb3IgZm9yIG5vbi1jb250aWd1b3VzIHNlbGVjdGlvbi5cbiAgICAgIGlmICghc2VsZWN0ZWQgfHwgc2VsZWN0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGhpZGRlbjogZmFsc2VcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNvcHlXaXRoQ29sdW1uR3JvdXBIZWFkZXJzSXRlbTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG4vKipcbiAqIEBwYXJhbSB7Q29weVBhc3RlfSBjb3B5UGFzdGVQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvcHlXaXRoQ29sdW1uR3JvdXBIZWFkZXJzSXRlbShjb3B5UGFzdGVQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdjb3B5X3dpdGhfY29sdW1uX2dyb3VwX2hlYWRlcnMnLFxuICAgIG5hbWUoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgY29uc3Qgbm91bkZvcm0gPSBzZWxlY3RlZFJhbmdlID8gKDAsIF9udW1iZXIuY2xhbXApKHNlbGVjdGVkUmFuZ2UuZ2V0V2lkdGgoKSAtIDEsIDAsIDEpIDogMDtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX2NvbnN0YW50cy5DT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0dST1VQX0hFQURFUlMsIG5vdW5Gb3JtKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgY29weVBhc3RlUGx1Z2luLmNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuaGFzQ29sSGVhZGVycygpIHx8ICF0aGlzLmdldFNldHRpbmdzKCkubmVzdGVkSGVhZGVycykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZS5pc1NpbmdsZUhlYWRlcigpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkKCk7XG5cbiAgICAgIC8vIERpc2FibGUgZm9yIG5vIHNlbGVjdGlvbiBvciBmb3Igbm9uLWNvbnRpZ3VvdXMgc2VsZWN0aW9uLlxuICAgICAgaWYgKCFzZWxlY3RlZCB8fCBzZWxlY3RlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmYWxzZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gY29weVdpdGhDb2x1bW5IZWFkZXJzSXRlbTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG4vKipcbiAqIEBwYXJhbSB7Q29weVBhc3RlfSBjb3B5UGFzdGVQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGNvcHlXaXRoQ29sdW1uSGVhZGVyc0l0ZW0oY29weVBhc3RlUGx1Z2luKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiAnY29weV93aXRoX2NvbHVtbl9oZWFkZXJzJyxcbiAgICBuYW1lKCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGNvbnN0IG5vdW5Gb3JtID0gc2VsZWN0ZWRSYW5nZSA/ICgwLCBfbnVtYmVyLmNsYW1wKShzZWxlY3RlZFJhbmdlLmdldFdpZHRoKCkgLSAxLCAwLCAxKSA6IDA7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9jb25zdGFudHMuQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTLCBub3VuRm9ybSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIGNvcHlQYXN0ZVBsdWdpbi5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKTtcbiAgICB9LFxuICAgIGRpc2FibGVkKCkge1xuICAgICAgaWYgKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyYW5nZS5pc1NpbmdsZUhlYWRlcigpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkKCk7XG5cbiAgICAgIC8vIERpc2FibGUgZm9yIG5vIHNlbGVjdGlvbiBvciBmb3Igbm9uLWNvbnRpZ3VvdXMgc2VsZWN0aW9uLlxuICAgICAgaWYgKCFzZWxlY3RlZCB8fCBzZWxlY3RlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmYWxzZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gY3V0SXRlbTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8qKlxuICogQHBhcmFtIHtDb3B5UGFzdGV9IGNvcHlQYXN0ZVBsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3V0SXRlbShjb3B5UGFzdGVQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdjdXQnLFxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfQ1VUKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgY29weVBhc3RlUGx1Z2luLmN1dCgpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBpZiAodGhpcy5jb3VudFJvd3MoKSA9PT0gMCB8fCB0aGlzLmNvdW50Q29scygpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZ2V0U2VsZWN0ZWQoKTtcblxuICAgICAgLy8gRGlzYWJsZSBmb3Igbm8gc2VsZWN0aW9uIG9yIGZvciBub24tY29udGlxdW91cyBzZWxlY3Rpb24uXG4gICAgICBpZiAoIXNlbGVjdGVkIHx8IHNlbGVjdGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBoaWRkZW46IGZhbHNlXG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9TaGVldENsaXAgPSByZXF1aXJlKFwiLi4vLi4vM3JkcGFydHkvU2hlZXRDbGlwXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9zdHJpbmdcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Jyb3dzZXJcIik7XG52YXIgX2NvcHkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbS9jb3B5XCIpKTtcbnZhciBfY29weUNvbHVtbkhlYWRlcnNPbmx5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb250ZXh0TWVudUl0ZW0vY29weUNvbHVtbkhlYWRlcnNPbmx5XCIpKTtcbnZhciBfY29weVdpdGhDb2x1bW5Hcm91cEhlYWRlcnMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbS9jb3B5V2l0aENvbHVtbkdyb3VwSGVhZGVyc1wiKSk7XG52YXIgX2NvcHlXaXRoQ29sdW1uSGVhZGVycyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL2NvcHlXaXRoQ29sdW1uSGVhZGVyc1wiKSk7XG52YXIgX2N1dCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL2N1dFwiKSk7XG52YXIgX3Bhc3RlRXZlbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Bhc3RlRXZlbnRcIikpO1xudmFyIF9jb3B5YWJsZVJhbmdlcyA9IHJlcXVpcmUoXCIuL2NvcHlhYmxlUmFuZ2VzXCIpO1xudmFyIF9wYXJzZVRhYmxlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3BhcnNlVGFibGVcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDb3B5TGltaXQnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdtb2RpZnlDb3B5YWJsZVJhbmdlJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYmVmb3JlQ3V0Jyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDdXQnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVQYXN0ZScpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyUGFzdGUnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVDb3B5Jyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDb3B5Jyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2NvcHlQYXN0ZSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDgwO1xuY29uc3QgU0VUVElOR19LRVlTID0gWydmcmFnbWVudFNlbGVjdGlvbiddO1xuY29uc3QgTUVUQV9IRUFEID0gWyc8bWV0YSBuYW1lPVwiZ2VuZXJhdG9yXCIgY29udGVudD1cIkhhbmRzb250YWJsZVwiLz4nLCAnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPnRke3doaXRlLXNwYWNlOm5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbignJyk7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBDb3B5LCBjdXQsIGFuZCBwYXN0ZSBkYXRhIGJ5IHVzaW5nIHRoZSBgQ29weVBhc3RlYCBwbHVnaW4uXG4gKlxuICogQ29udHJvbCB0aGUgYENvcHlQYXN0ZWAgcGx1Z2luIHByb2dyYW1tYXRpY2FsbHkgdGhyb3VnaCBpdHMgW0FQSSBtZXRob2RzXSgjbWV0aG9kcykuXG4gKlxuICogVGhlIHVzZXIgY2FuIGFjY2VzcyB0aGUgY29weS1wYXN0ZSBmZWF0dXJlcyB0aHJvdWdoOlxuICogLSBUaGUgW2NvbnRleHQgbWVudV0oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9jbGlwYm9hcmQvY2xpcGJvYXJkLm1kI2NvbnRleHQtbWVudSkuXG4gKiAtIFRoZSBba2V5Ym9hcmQgc2hvcnRjdXRzXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NsaXBib2FyZC9jbGlwYm9hcmQubWQjcmVsYXRlZC1rZXlib2FyZC1zaG9ydGN1dHMpLlxuICogLSBUaGUgYnJvd3NlcidzIG1lbnUgYmFyLlxuICpcbiAqIFJlYWQgbW9yZTpcbiAqIC0gW0d1aWRlczogQ2xpcGJvYXJkXShAL2d1aWRlcy9jZWxsLWZlYXR1cmVzL2NsaXBib2FyZC9jbGlwYm9hcmQubWQpXG4gKiAtIFtDb25maWd1cmF0aW9uIG9wdGlvbnM6IGBjb3B5UGFzdGVgXShAL2FwaS9vcHRpb25zLm1kI2NvcHlwYXN0ZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBganNcbiAqIC8vIGVuYWJsZSB0aGUgcGx1Z2luIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICogY29weVBhc3RlOiB0cnVlLFxuICpcbiAqIC8vIG9yLCBlbmFibGUgdGhlIHBsdWdpbiB3aXRoIGEgY3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAqIGNvcHlQYXN0ZToge1xuICogICBjb2x1bW5zTGltaXQ6IDI1LFxuICogICByb3dzTGltaXQ6IDUwLFxuICogICBwYXN0ZU1vZGU6ICdzaGlmdF9kb3duJyxcbiAqICAgY29weUNvbHVtbkhlYWRlcnM6IHRydWUsXG4gKiAgIGNvcHlDb2x1bW5Hcm91cEhlYWRlcnM6IHRydWUsXG4gKiAgIGNvcHlDb2x1bW5IZWFkZXJzT25seTogdHJ1ZSxcbiAqICAgdWlDb250YWluZXI6IGRvY3VtZW50LmJvZHksXG4gKiB9LFxuICogYGBgXG4gKiBAY2xhc3MgQ29weVBhc3RlXG4gKiBAcGx1Z2luIENvcHlQYXN0ZVxuICovXG52YXIgX2VuYWJsZUNvcHlDb2x1bW5IZWFkZXJzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2VuYWJsZUNvcHlDb2x1bW5Hcm91cEhlYWRlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZW5hYmxlQ29weUNvbHVtbkhlYWRlcnNPbmx5ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvcHlNb2RlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2lzVHJpZ2dlcmVkQnlDb3B5ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2lzVHJpZ2dlcmVkQnlDdXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY29weWFibGVSYW5nZXNGYWN0b3J5ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3ByZXZlbnRWaWV3cG9ydFNjcm9sbE9uUGFzdGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfQ29weVBhc3RlX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBDb3B5UGFzdGUgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCB0aGUgYGNvcHlgL2BjdXRgIGV2ZW50cyBnZXQgdHJpZ2dlcmVkIHByb3Blcmx5IGluIFNhZmFyaS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgTmFtZSBvZiB0aGUgZXZlbnQgdG8gZ2V0IHRyaWdnZXJlZC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0NvcHlQYXN0ZV9icmFuZCk7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhbiBjYW4gYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IEluZmluaXR5XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uc0xpbWl0XCIsIEluZmluaXR5KTtcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0aGFuIGNhbiBiZSBjb3BpZWQgdG8gdGhlIGNsaXBib2FyZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQGRlZmF1bHQgSW5maW5pdHlcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dzTGltaXRcIiwgSW5maW5pdHkpO1xuICAgIC8qKlxuICAgICAqIFdoZW4gcGFzdGluZzpcbiAgICAgKiAtIGAnb3ZlcndyaXRlJ2AgLSBvdmVyd3JpdGUgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBjZWxsc1xuICAgICAqIC0gYCdzaGlmdF9kb3duJ2AgLSBtb3ZlIGN1cnJlbnRseS1zZWxlY3RlZCBjZWxscyBkb3duXG4gICAgICogLSBgJ3NoaWZ0X3JpZ2h0J2AgLSBtb3ZlIGN1cnJlbnRseS1zZWxlY3RlZCBjZWxscyB0byB0aGUgcmlnaHRcbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQGRlZmF1bHQgJ292ZXJ3cml0ZSdcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwYXN0ZU1vZGVcIiwgJ292ZXJ3cml0ZScpO1xuICAgIC8qKlxuICAgICAqIFRoZSBVSSBjb250YWluZXIgZm9yIHRoZSBzZWNvbmRhcnkgZm9jdXNhYmxlIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidWlDb250YWluZXJcIiwgdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpO1xuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBcIkNvcHkgd2l0aCBoZWFkZXJzXCIgaXRlbSBpbiB0aGUgY29udGV4dCBtZW51IGFuZCBleHRlbmRzIHRoZSBjb250ZXh0IG1lbnUgd2l0aCB0aGVcbiAgICAgKiBgJ2NvcHlfd2l0aF9jb2x1bW5faGVhZGVycydgIG9wdGlvbiB0aGF0IGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBjdXN0b20gbWVudXMgYXJyYW5nZW1lbnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZW5hYmxlQ29weUNvbHVtbkhlYWRlcnMsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgXCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVyc1wiIGl0ZW0gaW4gdGhlIGNvbnRleHQgbWVudSBhbmQgZXh0ZW5kcyB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlXG4gICAgICogYCdjb3B5X3dpdGhfY29sdW1uX2dyb3VwIGhlYWRlcnMnYCBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgY3VzdG9tIG1lbnVzIGFycmFuZ2VtZW50cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2VuYWJsZUNvcHlDb2x1bW5Hcm91cEhlYWRlcnMsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBTaG93cyB0aGUgXCJDb3B5IGhlYWRlcnMgb25seVwiIGl0ZW0gaW4gdGhlIGNvbnRleHQgbWVudSBhbmQgZXh0ZW5kcyB0aGUgY29udGV4dCBtZW51IHdpdGggdGhlXG4gICAgICogYCdjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHknYCBvcHRpb24gdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgY3VzdG9tIG1lbnVzIGFycmFuZ2VtZW50cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2VuYWJsZUNvcHlDb2x1bW5IZWFkZXJzT25seSwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIGRhdGEgcmFuZ2UgdG8gY29weS4gUG9zc2libGUgdmFsdWVzOlxuICAgICAqICAqIGAnY2VsbHMtb25seSdgIENvcHkgc2VsZWN0ZWQgY2VsbHMgb25seTtcbiAgICAgKiAgKiBgJ2NvbHVtbi1oZWFkZXJzLW9ubHknYCBDb3B5IGNvbHVtbiBoZWFkZXJzIG9ubHk7XG4gICAgICogICogYCd3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzJ2AgQ29weSBjZWxscyB3aXRoIGFsbCBjb2x1bW4gaGVhZGVycztcbiAgICAgKiAgKiBgJ3dpdGgtY29sdW1uLWhlYWRlcnMnYCBDb3B5IGNlbGxzIHdpdGggY29sdW1uIGhlYWRlcnM7XG4gICAgICpcbiAgICAgKiBAdHlwZSB7J2NlbGxzLW9ubHknIHwgJ2NvbHVtbi1oZWFkZXJzLW9ubHknIHwgJ3dpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMnIHwgJ3dpdGgtY29sdW1uLWhlYWRlcnMnfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb3B5TW9kZSwgJ2NlbGxzLW9ubHknKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaXMgdXNlZCB0byBwcmV2ZW50IGNvcHlpbmcgd2hlbiB0aGUgbmF0aXZlIHNob3J0Y3V0IHdhcyBub3QgcHJlc3NlZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pc1RyaWdnZXJlZEJ5Q29weSwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEZsYWcgdGhhdCBpcyB1c2VkIHRvIHByZXZlbnQgY3V0dGluZyB3aGVuIHRoZSBuYXRpdmUgc2hvcnRjdXQgd2FzIG5vdCBwcmVzc2VkLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2lzVHJpZ2dlcmVkQnlDdXQsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyB0aGF0IGhlbHBzIGdlbmVyYXRlIGNvcHlhYmxlIHJhbmdlcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gZm9yIGRpZmZlcmVudCBjb3B5IG1vZGVcbiAgICAgKiB0eXBlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3B5YWJsZVJhbmdlc0ZhY3Rvcnl9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvcHlhYmxlUmFuZ2VzRmFjdG9yeSwgbmV3IF9jb3B5YWJsZVJhbmdlcy5Db3B5YWJsZVJhbmdlc0ZhY3Rvcnkoe1xuICAgICAgY291bnRSb3dzOiAoKSA9PiB0aGlzLmhvdC5jb3VudFJvd3MoKSxcbiAgICAgIGNvdW50Q29sdW1uczogKCkgPT4gdGhpcy5ob3QuY291bnRDb2xzKCksXG4gICAgICByb3dzTGltaXQ6ICgpID0+IHRoaXMucm93c0xpbWl0LFxuICAgICAgY29sdW1uc0xpbWl0OiAoKSA9PiB0aGlzLmNvbHVtbnNMaW1pdCxcbiAgICAgIGNvdW50Q29sdW1uSGVhZGVyczogKCkgPT4gdGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKVxuICAgIH0pKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSB2aWV3cG9ydCBzY3JvbGwgc2hvdWxkIGJlIHByZXZlbnRlZCBhZnRlciBwYXN0aW5nIHRoZSBkYXRhLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ByZXZlbnRWaWV3cG9ydFNjcm9sbE9uUGFzdGUsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBSYW5nZXMgb2YgdGhlIGNlbGxzIGNvb3JkaW5hdGVzLCB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBjb3B5L2N1dC9wYXN0ZSBhY3Rpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXk8e3N0YXJ0Um93OiBudW1iZXIsIHN0YXJ0Q29sOiBudW1iZXIsIGVuZFJvdzogbnVtYmVyLCBlbmRDb2w6IG51bWJlcn0+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvcHlhYmxlUmFuZ2VzXCIsIFtdKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKSB7XG4gICAgcmV0dXJuIFtQTFVHSU5fS0VZLCAuLi5TRVRUSU5HX0tFWVNdO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgW2BDb3B5UGFzdGVgXSgjY29weXBhc3RlKSBwbHVnaW4gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgZ2V0cyBjYWxsZWQgYnkgSGFuZHNvbnRhYmxlJ3MgW2BiZWZvcmVJbml0YF0oQC9hcGkvaG9va3MubWQjYmVmb3JlaW5pdCkgaG9vay5cbiAgICogSWYgaXQgcmV0dXJucyBgdHJ1ZWAsIHRoZSBbYGVuYWJsZVBsdWdpbigpYF0oI2VuYWJsZXBsdWdpbikgbWV0aG9kIGdldHMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIFtgQ29weVBhc3RlYF0oI2NvcHlwYXN0ZSkgcGx1Z2luIGZvciB5b3VyIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgW1BMVUdJTl9LRVldOiBzZXR0aW5nc1xuICAgIH0gPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgX3NldHRpbmdzJHBhc3RlTW9kZSwgX3NldHRpbmdzJHVpQ29udGFpbmVyO1xuICAgICAgdGhpcy5wYXN0ZU1vZGUgPSAoX3NldHRpbmdzJHBhc3RlTW9kZSA9IHNldHRpbmdzLnBhc3RlTW9kZSkgIT09IG51bGwgJiYgX3NldHRpbmdzJHBhc3RlTW9kZSAhPT0gdm9pZCAwID8gX3NldHRpbmdzJHBhc3RlTW9kZSA6IHRoaXMucGFzdGVNb2RlO1xuICAgICAgdGhpcy5yb3dzTGltaXQgPSBpc05hTihzZXR0aW5ncy5yb3dzTGltaXQpID8gdGhpcy5yb3dzTGltaXQgOiBzZXR0aW5ncy5yb3dzTGltaXQ7XG4gICAgICB0aGlzLmNvbHVtbnNMaW1pdCA9IGlzTmFOKHNldHRpbmdzLmNvbHVtbnNMaW1pdCkgPyB0aGlzLmNvbHVtbnNMaW1pdCA6IHNldHRpbmdzLmNvbHVtbnNMaW1pdDtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZW5hYmxlQ29weUNvbHVtbkhlYWRlcnMsIHRoaXMsICEhc2V0dGluZ3MuY29weUNvbHVtbkhlYWRlcnMpO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9lbmFibGVDb3B5Q29sdW1uR3JvdXBIZWFkZXJzLCB0aGlzLCAhIXNldHRpbmdzLmNvcHlDb2x1bW5Hcm91cEhlYWRlcnMpO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9lbmFibGVDb3B5Q29sdW1uSGVhZGVyc09ubHksIHRoaXMsICEhc2V0dGluZ3MuY29weUNvbHVtbkhlYWRlcnNPbmx5KTtcbiAgICAgIHRoaXMudWlDb250YWluZXIgPSAoX3NldHRpbmdzJHVpQ29udGFpbmVyID0gc2V0dGluZ3MudWlDb250YWluZXIpICE9PSBudWxsICYmIF9zZXR0aW5ncyR1aUNvbnRhaW5lciAhPT0gdm9pZCAwID8gX3NldHRpbmdzJHVpQ29udGFpbmVyIDogdGhpcy51aUNvbnRhaW5lcjtcbiAgICB9XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMnLCBvcHRpb25zID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIHRoaXMsIF9vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucykuY2FsbCh0aGlzLCBvcHRpb25zKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNlbGVjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIF90aGlzLCBfb25BZnRlclNlbGVjdGlvbikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNlbGVjdGlvbkVuZCcsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIHRoaXMsIF9vbkFmdGVyU2VsZWN0aW9uRW5kKS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwgJ2NvcHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub25Db3B5KC4uLmFyZ3VtZW50cyk7XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsICdjdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub25DdXQoLi4uYXJndW1lbnRzKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwgJ3Bhc3RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLm9uUGFzdGUoLi4uYXJndW1lbnRzKTtcbiAgICB9KTtcblxuICAgIC8vIFdpdGhvdXQgdGhpcyB3b3JrYXJvdW5kIFNhZmFyaSAodGVzdGVkIG9uIFNhZmFyaUAxNi41LjIpIGRvZXMgYWxsb3cgY29weWluZy9jdXR0aW5nIGZyb20gdGhlIGJyb3dzZXIgbWVudS5cbiAgICBpZiAoKDAsIF9icm93c2VyLmlzU2FmYXJpKSgpKSB7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCAnbW91c2VlbnRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29weVBhc3RlX2JyYW5kLCBfdGhpcywgX29uU2FmYXJpTW91c2VFbnRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksICdtb3VzZWxlYXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIF90aGlzLCBfb25TYWZhcmlNb3VzZUxlYXZlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRIb29rKCdhZnRlclNlbGVjdGlvbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIHRoaXMsIF9vblNhZmFyaUFmdGVyU2VsZWN0aW9uKS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgb2YgdGhlIFtgQ29weVBhc3RlYF0oI2NvcHlwYXN0ZSkgcGx1Z2luLlxuICAgKlxuICAgKiBHZXRzIGNhbGxlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpXG4gICAqIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgY29weVBhc3RlYF0oQC9hcGkvb3B0aW9ucy5tZCNjb3B5cGFzdGUpXG4gICAqICAtIFtgZnJhZ21lbnRTZWxlY3Rpb25gXShAL2FwaS9vcHRpb25zLm1kI2ZyYWdtZW50c2VsZWN0aW9uKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIFtgQ29weVBhc3RlYF0oI2NvcHlwYXN0ZSkgcGx1Z2luIGZvciB5b3VyIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdGVkIGNlbGxzIChhbmQvb3IgdGhlaXIgcmVsYXRlZCBjb2x1bW4gaGVhZGVycykgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQuXG4gICAqXG4gICAqIFRha2VzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciAoYGNvcHlNb2RlYCkgdGhhdCBkZWZpbmVzIHRoZSBzY29wZSBvZiBjb3B5aW5nOlxuICAgKlxuICAgKiB8IGBjb3B5TW9kZWAgdmFsdWUgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gICAqIHwgYCdjZWxscy1vbmx5J2AgKGRlZmF1bHQpICAgICAgfCBDb3B5IHRoZSBzZWxlY3RlZCBjZWxscyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKiB8IGAnd2l0aC1jb2x1bW4taGVhZGVycydgICAgICAgIHwgLSBDb3B5IHRoZSBzZWxlY3RlZCBjZWxsczxicj4tIENvcHkgdGhlIG5lYXJlc3QgY29sdW1uIGhlYWRlcnMgIHxcbiAgICogfCBgJ3dpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMnYCB8IC0gQ29weSB0aGUgc2VsZWN0ZWQgY2VsbHM8YnI+LSBDb3B5IGFsbCByZWxhdGVkIGNvbHVtbnMgaGVhZGVycyB8XG4gICAqIHwgYCdjb2x1bW4taGVhZGVycy1vbmx5J2AgICAgICAgfCBDb3B5IHRoZSBuZWFyZXN0IGNvbHVtbiBoZWFkZXJzICh3aXRob3V0IGNvcHlpbmcgY2VsbHMpICAgICAgICAgfFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NvcHlNb2RlPSdjZWxscy1vbmx5J10gQ29weSBtb2RlLlxuICAgKi9cbiAgY29weSgpIHtcbiAgICBsZXQgY29weU1vZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdjZWxscy1vbmx5JztcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvcHlNb2RlLCB0aGlzLCBjb3B5TW9kZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1RyaWdnZXJlZEJ5Q29weSwgdGhpcywgdHJ1ZSk7XG4gICAgX2Fzc2VydENsYXNzQnJhbmQoX0NvcHlQYXN0ZV9icmFuZCwgdGhpcywgX2Vuc3VyZUNsaXBib2FyZEV2ZW50c0dldFRyaWdnZXJlZCkuY2FsbCh0aGlzLCAnY29weScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcGllcyB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdGVkIGNlbGxzLlxuICAgKi9cbiAgY29weUNlbGxzT25seSgpIHtcbiAgICB0aGlzLmNvcHkoJ2NlbGxzLW9ubHknKTtcbiAgfVxuICAvKipcbiAgICogQ29waWVzIHRoZSBjb250ZW50cyBvZiBjb2x1bW4gaGVhZGVycyB0aGF0IGFyZSBuZWFyZXN0IHRvIHRoZSBzZWxlY3RlZCBjZWxscy5cbiAgICovXG4gIGNvcHlDb2x1bW5IZWFkZXJzT25seSgpIHtcbiAgICB0aGlzLmNvcHkoJ2NvbHVtbi1oZWFkZXJzLW9ubHknKTtcbiAgfVxuICAvKipcbiAgICogQ29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VsZWN0ZWQgY2VsbHMgYW5kIGFsbCB0aGVpciByZWxhdGVkIGNvbHVtbiBoZWFkZXJzLlxuICAgKi9cbiAgY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCkge1xuICAgIHRoaXMuY29weSgnd2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycycpO1xuICB9XG4gIC8qKlxuICAgKiBDb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWxlY3RlZCBjZWxscyBhbmQgdGhlaXIgbmVhcmVzdCBjb2x1bW4gaGVhZGVycy5cbiAgICovXG4gIGNvcHlXaXRoQ29sdW1uSGVhZGVycygpIHtcbiAgICB0aGlzLmNvcHkoJ3dpdGgtY29sdW1uLWhlYWRlcnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXRzIHRoZSBjb250ZW50cyBvZiB0aGUgc2VsZWN0ZWQgY2VsbHMgdG8gdGhlIHN5c3RlbSBjbGlwYm9hcmQuXG4gICAqL1xuICBjdXQoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1RyaWdnZXJlZEJ5Q3V0LCB0aGlzLCB0cnVlKTtcbiAgICBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29weVBhc3RlX2JyYW5kLCB0aGlzLCBfZW5zdXJlQ2xpcGJvYXJkRXZlbnRzR2V0VHJpZ2dlcmVkKS5jYWxsKHRoaXMsICdjdXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgY29udGVudHMgb2YgbXVsdGlwbGUgcmFuZ2VzIChgcmFuZ2VzYCkgaW50byBhIHNpbmdsZSBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8e3N0YXJ0Um93OiBudW1iZXIsIHN0YXJ0Q29sOiBudW1iZXIsIGVuZFJvdzogbnVtYmVyLCBlbmRDb2w6IG51bWJlcn0+fSByYW5nZXMgQXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHByb3BlcnRpZXMgYHN0YXJ0Um93YCwgYGVuZFJvd2AsIGBzdGFydENvbGAgYW5kIGBlbmRDb2xgLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZyB0aGF0IHdpbGwgYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuXG4gICAqL1xuICBnZXRSYW5nZWRDb3B5YWJsZURhdGEocmFuZ2VzKSB7XG4gICAgcmV0dXJuICgwLCBfU2hlZXRDbGlwLnN0cmluZ2lmeSkodGhpcy5nZXRSYW5nZWREYXRhKHJhbmdlcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIHRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSByYW5nZXMgKGByYW5nZXNgKSBpbnRvIGFuIGFycmF5IG9mIGFycmF5cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTx7c3RhcnRSb3c6IG51bWJlciwgc3RhcnRDb2w6IG51bWJlciwgZW5kUm93OiBudW1iZXIsIGVuZENvbDogbnVtYmVyfT59IHJhbmdlcyBBcnJheSBvZiBvYmplY3RzIHdpdGggcHJvcGVydGllcyBgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCBhbmQgYGVuZENvbGAuXG4gICAqIEByZXR1cm5zIHtBcnJheVtdfSBBbiBhcnJheSBvZiBhcnJheXMgdGhhdCB3aWxsIGJlIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkLlxuICAgKi9cbiAgZ2V0UmFuZ2VkRGF0YShyYW5nZXMpIHtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnNcbiAgICB9ID0gKDAsIF9jb3B5YWJsZVJhbmdlcy5ub3JtYWxpemVSYW5nZXMpKHJhbmdlcyk7XG5cbiAgICAvLyBjb25jYXRlbmF0ZSBhbGwgcm93cyBhbmQgY29sdW1ucyBkYXRhIGRlZmluZWQgaW4gcmFuZ2VzIGludG8gb25lIGNvcHlhYmxlIHN0cmluZ1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyb3dzLCByb3cgPT4ge1xuICAgICAgY29uc3Qgcm93U2V0ID0gW107XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY29sdW1ucywgY29sdW1uID0+IHtcbiAgICAgICAgaWYgKHJvdyA8IDApIHtcbiAgICAgICAgICAvLyBgcm93YCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IGFjdHMgaGVyZSBhcyB0aGUgYGhlYWRlckxldmVsYCBhcmd1bWVudFxuICAgICAgICAgIHJvd1NldC5wdXNoKHRoaXMuaG90LmdldENvbEhlYWRlcihjb2x1bW4sIHJvdykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvd1NldC5wdXNoKHRoaXMuaG90LmdldENvcHlhYmxlRGF0YShyb3csIGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGRhdGEucHVzaChyb3dTZXQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlcyB0aGUgcGFzdGUgYWN0aW9uLlxuICAgKlxuICAgKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgbW9kZXJuIGJyb3dzZXJzIGRvbid0IGFsbG93IHJlYWRpbmcgZnJvbSB0aGUgc3lzdGVtIGNsaXBib2FyZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhc3RhYmxlVGV4dCBUaGUgdmFsdWUgdG8gcGFzdGUsIGFzIGEgcmF3IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXN0YWJsZUh0bWw9JyddIFRoZSB2YWx1ZSB0byBwYXN0ZSwgYXMgSFRNTC5cbiAgICovXG4gIHBhc3RlKCkge1xuICAgIGxldCBwYXN0YWJsZVRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnO1xuICAgIGxldCBwYXN0YWJsZUh0bWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHBhc3RhYmxlVGV4dDtcbiAgICBpZiAoIXBhc3RhYmxlVGV4dCAmJiAhcGFzdGFibGVIdG1sKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhc3RlRGF0YSA9IG5ldyBfcGFzdGVFdmVudC5kZWZhdWx0KCk7XG4gICAgaWYgKHBhc3RhYmxlVGV4dCkge1xuICAgICAgcGFzdGVEYXRhLmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIHBhc3RhYmxlVGV4dCk7XG4gICAgfVxuICAgIGlmIChwYXN0YWJsZUh0bWwpIHtcbiAgICAgIHBhc3RlRGF0YS5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvaHRtbCcsIHBhc3RhYmxlSHRtbCk7XG4gICAgfVxuICAgIHRoaXMub25QYXN0ZShwYXN0ZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGNvcHlhYmxlIHRleHQgZnJvbSB0aGUgY2VsbHMgc2VsZWN0aW9uIGluIHRoZSBpbnZpc2libGUgdGV4dGFyZWEuXG4gICAqL1xuICBzZXRDb3B5YWJsZVRleHQoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNlbGVjdGlvblJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgIHRoaXMuY29weWFibGVSYW5nZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3B5YWJsZVJhbmdlc0ZhY3RvcnksIHRoaXMpLnNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpO1xuICAgIGNvbnN0IGdyb3VwZWRSYW5nZXMgPSBuZXcgTWFwKFtbJ2hlYWRlcnMnLCBudWxsXSwgWydjZWxscycsIG51bGxdXSk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29weU1vZGUsIHRoaXMpID09PSAnY29sdW1uLWhlYWRlcnMtb25seScpIHtcbiAgICAgIGdyb3VwZWRSYW5nZXMuc2V0KCdoZWFkZXJzJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3B5YWJsZVJhbmdlc0ZhY3RvcnksIHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvcHlNb2RlLCB0aGlzKSA9PT0gJ3dpdGgtY29sdW1uLWhlYWRlcnMnKSB7XG4gICAgICAgIGdyb3VwZWRSYW5nZXMuc2V0KCdoZWFkZXJzJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3B5YWJsZVJhbmdlc0ZhY3RvcnksIHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk7XG4gICAgICB9IGVsc2UgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29weU1vZGUsIHRoaXMpID09PSAnd2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycycpIHtcbiAgICAgICAgZ3JvdXBlZFJhbmdlcy5zZXQoJ2hlYWRlcnMnLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvcHlhYmxlUmFuZ2VzRmFjdG9yeSwgdGhpcykuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpO1xuICAgICAgfVxuICAgICAgZ3JvdXBlZFJhbmdlcy5zZXQoJ2NlbGxzJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3B5YWJsZVJhbmdlc0ZhY3RvcnksIHRoaXMpLmdldENlbGxzUmFuZ2UoKSk7XG4gICAgfVxuICAgIHRoaXMuY29weWFibGVSYW5nZXMgPSBBcnJheS5mcm9tKGdyb3VwZWRSYW5nZXMudmFsdWVzKCkpLmZpbHRlcihyYW5nZSA9PiByYW5nZSAhPT0gbnVsbCkubWFwKF9yZWYgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgc3RhcnRSb3csXG4gICAgICAgIHN0YXJ0Q29sLFxuICAgICAgICBlbmRSb3csXG4gICAgICAgIGVuZENvbFxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFJvdyxcbiAgICAgICAgc3RhcnRDb2wsXG4gICAgICAgIGVuZFJvdyxcbiAgICAgICAgZW5kQ29sXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuY29weWFibGVSYW5nZXMgPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5Q29weWFibGVSYW5nZScsIHRoaXMuY29weWFibGVSYW5nZXMpO1xuICAgIGNvbnN0IGNlbGxzUmFuZ2UgPSBncm91cGVkUmFuZ2VzLmdldCgnY2VsbHMnKTtcbiAgICBpZiAoY2VsbHNSYW5nZSAhPT0gbnVsbCAmJiBjZWxsc1JhbmdlLmlzUmFuZ2VUcmltbWVkKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXJ0Um93LFxuICAgICAgICBzdGFydENvbCxcbiAgICAgICAgZW5kUm93LFxuICAgICAgICBlbmRDb2xcbiAgICAgIH0gPSBjZWxsc1JhbmdlO1xuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29weUxpbWl0JywgZW5kUm93IC0gc3RhcnRSb3cgKyAxLCBlbmRDb2wgLSBzdGFydENvbCArIDEsIHRoaXMucm93c0xpbWl0LCB0aGlzLmNvbHVtbnNMaW1pdCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIGVkaXRvciBleGlzdHMgYW5kIGlzIG9wZW4uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFZGl0b3JPcGVuZWQoKSB7XG4gICAgdmFyIF90aGlzJGhvdCRnZXRBY3RpdmVFZDtcbiAgICByZXR1cm4gKF90aGlzJGhvdCRnZXRBY3RpdmVFZCA9IHRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0QWN0aXZlRWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRBY3RpdmVFZC5pc09wZW5lZCgpO1xuICB9XG4gIC8qKlxuICAgKiBQcmVwYXJlcyBuZXcgdmFsdWVzIHRvIHBvcHVsYXRlIHRoZW0gaW50byBkYXRhc291cmNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnB1dEFycmF5IEFuIGFycmF5IG9mIHRoZSBkYXRhIHRvIHBvcHVsYXRlLlxuICAgKiBAcGFyYW0ge0FycmF5fSBbc2VsZWN0aW9uXSBUaGUgc2VsZWN0aW9uIHdoaWNoIGluZGljYXRlcyBmcm9tIHdoYXQgcG9zaXRpb24gdGhlIGRhdGEgd2lsbCBiZSBwb3B1bGF0ZWQuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmFuZ2UgY29vcmRpbmF0ZXMgYWZ0ZXIgcG9wdWxhdGUgZGF0YS5cbiAgICovXG4gIHBvcHVsYXRlVmFsdWVzKGlucHV0QXJyYXkpIHtcbiAgICBsZXQgc2VsZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmICghaW5wdXRBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcG9wdWxhdGVkUm93c0xlbmd0aCA9IGlucHV0QXJyYXkubGVuZ3RoO1xuICAgIGNvbnN0IHBvcHVsYXRlZENvbHVtbnNMZW5ndGggPSBpbnB1dEFycmF5WzBdLmxlbmd0aDtcbiAgICBjb25zdCBuZXdSb3dzID0gW107XG4gICAgY29uc3Qge1xuICAgICAgcm93OiBzdGFydFJvdyxcbiAgICAgIGNvbDogc3RhcnRDb2x1bW5cbiAgICB9ID0gc2VsZWN0aW9uLmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiBlbmRSb3dGcm9tU2VsZWN0aW9uLFxuICAgICAgY29sOiBlbmRDb2x1bW5Gcm9tU2VsZWN0aW9uXG4gICAgfSA9IHNlbGVjdGlvbi5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBsZXQgdmlzdWFsUm93Rm9yUG9wdWxhdGVkRGF0YSA9IHN0YXJ0Um93O1xuICAgIGxldCB2aXN1YWxDb2x1bW5Gb3JQb3B1bGF0ZWREYXRhID0gc3RhcnRDb2x1bW47XG4gICAgbGV0IGxhc3RWaXN1YWxSb3cgPSBzdGFydFJvdztcbiAgICBsZXQgbGFzdFZpc3VhbENvbHVtbiA9IHN0YXJ0Q29sdW1uO1xuXG4gICAgLy8gV2UgdHJ5IHRvIHBvcHVsYXRlIGp1c3QgYWxsIGNvcGllZCBkYXRhIG9yIHJlcGVhdCBjb3BpZWQgZGF0YSB3aXRoaW4gYSBzZWxlY3Rpb24uIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB3ZVxuICAgIC8vIGRvbid0IGtub3cgd2hldGhlciBwb3B1bGF0ZWQgZGF0YSBpcyBiaWdnZXIgdGhhbiBzZWxlY3Rpb24gb24gc3RhcnQgYXMgdGhlcmUgYXJlIHNvbWUgY2VsbHMgZm9yIHdoaWNoIHZhbHVlc1xuICAgIC8vIHNob3VsZCBiZSBub3QgaW5zZXJ0ZWQgKGl0J3Mga25vd24gcmlnaHQgYWZ0ZXIgZ2V0dGluZyBjZWxsIG1ldGEpLlxuICAgIHdoaWxlIChuZXdSb3dzLmxlbmd0aCA8IHBvcHVsYXRlZFJvd3NMZW5ndGggfHwgdmlzdWFsUm93Rm9yUG9wdWxhdGVkRGF0YSA8PSBlbmRSb3dGcm9tU2VsZWN0aW9uKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHNraXBSb3dPblBhc3RlLFxuICAgICAgICB2aXN1YWxSb3dcbiAgICAgIH0gPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSh2aXN1YWxSb3dGb3JQb3B1bGF0ZWREYXRhLCBzdGFydENvbHVtbik7XG4gICAgICB2aXN1YWxSb3dGb3JQb3B1bGF0ZWREYXRhID0gdmlzdWFsUm93ICsgMTtcbiAgICAgIGlmIChza2lwUm93T25QYXN0ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxhc3RWaXN1YWxSb3cgPSB2aXN1YWxSb3c7XG4gICAgICB2aXN1YWxDb2x1bW5Gb3JQb3B1bGF0ZWREYXRhID0gc3RhcnRDb2x1bW47XG4gICAgICBjb25zdCBuZXdSb3cgPSBbXTtcbiAgICAgIGNvbnN0IGluc2VydGVkUm93ID0gbmV3Um93cy5sZW5ndGggJSBwb3B1bGF0ZWRSb3dzTGVuZ3RoO1xuICAgICAgd2hpbGUgKG5ld1Jvdy5sZW5ndGggPCBwb3B1bGF0ZWRDb2x1bW5zTGVuZ3RoIHx8IHZpc3VhbENvbHVtbkZvclBvcHVsYXRlZERhdGEgPD0gZW5kQ29sdW1uRnJvbVNlbGVjdGlvbikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2tpcENvbHVtbk9uUGFzdGUsXG4gICAgICAgICAgdmlzdWFsQ29sXG4gICAgICAgIH0gPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShzdGFydFJvdywgdmlzdWFsQ29sdW1uRm9yUG9wdWxhdGVkRGF0YSk7XG4gICAgICAgIHZpc3VhbENvbHVtbkZvclBvcHVsYXRlZERhdGEgPSB2aXN1YWxDb2wgKyAxO1xuICAgICAgICBpZiAoc2tpcENvbHVtbk9uUGFzdGUgPT09IHRydWUpIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RWaXN1YWxDb2x1bW4gPSB2aXN1YWxDb2w7XG4gICAgICAgIGNvbnN0IGluc2VydGVkQ29sdW1uID0gbmV3Um93Lmxlbmd0aCAlIHBvcHVsYXRlZENvbHVtbnNMZW5ndGg7XG4gICAgICAgIG5ld1Jvdy5wdXNoKGlucHV0QXJyYXlbaW5zZXJ0ZWRSb3ddW2luc2VydGVkQ29sdW1uXSk7XG4gICAgICB9XG4gICAgICBuZXdSb3dzLnB1c2gobmV3Um93KTtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wcmV2ZW50Vmlld3BvcnRTY3JvbGxPblBhc3RlLCB0aGlzLCB0cnVlKTtcbiAgICB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShzdGFydFJvdywgc3RhcnRDb2x1bW4sIG5ld1Jvd3MsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnQ29weVBhc3RlLnBhc3RlJywgdGhpcy5wYXN0ZU1vZGUpO1xuICAgIHJldHVybiBbc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBsYXN0VmlzdWFsUm93LCBsYXN0VmlzdWFsQ29sdW1uXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdGhlIGBjb250ZW50ZWRpdGFibGVgIGF0dHJpYnV0ZSB0byB0aGUgaGlnaGxpZ2h0ZWQgY2VsbCBhbmQgc2VsZWN0IGl0cyBjb250ZW50LlxuICAgKi9cblxuICAvKipcbiAgICogYGNvcHlgIGV2ZW50IGNhbGxiYWNrIG9uIHRleHRhcmVhIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IENsaXBib2FyZEV2ZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25Db3B5KGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpICYmICFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzVHJpZ2dlcmVkQnlDb3B5LCB0aGlzKSB8fCB0aGlzLmlzRWRpdG9yT3BlbmVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cyAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0Q29weWFibGVUZXh0KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1RyaWdnZXJlZEJ5Q29weSwgdGhpcywgZmFsc2UpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyk7XG4gICAgY29uc3QgY29waWVkSGVhZGVyc0NvdW50ID0gX2Fzc2VydENsYXNzQnJhbmQoX0NvcHlQYXN0ZV9icmFuZCwgdGhpcywgX2NvdW50Q29waWVkSGVhZGVycykuY2FsbCh0aGlzLCB0aGlzLmNvcHlhYmxlUmFuZ2VzKTtcbiAgICBjb25zdCBhbGxvd0NvcHlpbmcgPSAhIXRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDb3B5JywgZGF0YSwgdGhpcy5jb3B5YWJsZVJhbmdlcywgY29waWVkSGVhZGVyc0NvdW50KTtcbiAgICBpZiAoYWxsb3dDb3B5aW5nKSB7XG4gICAgICBjb25zdCB0ZXh0UGxhaW4gPSAoMCwgX1NoZWV0Q2xpcC5zdHJpbmdpZnkpKGRhdGEpO1xuICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgY29uc3QgdGV4dEhUTUwgPSAoMCwgX3BhcnNlVGFibGUuX2RhdGFUb0hUTUwpKGRhdGEsIHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gICAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9wbGFpbicsIHRleHRQbGFpbik7XG4gICAgICAgIGV2ZW50LmNsaXBib2FyZERhdGEuc2V0RGF0YSgndGV4dC9odG1sJywgW01FVEFfSEVBRCwgdGV4dEhUTUxdLmpvaW4oJycpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIENsaXBib2FyZEV2ZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgnVGV4dCcsIHRleHRQbGFpbik7XG4gICAgICB9XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDb3B5JywgZGF0YSwgdGhpcy5jb3B5YWJsZVJhbmdlcywgY29waWVkSGVhZGVyc0NvdW50KTtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb3B5TW9kZSwgdGhpcywgJ2NlbGxzLW9ubHknKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIGBjdXRgIGV2ZW50IGNhbGxiYWNrIG9uIHRleHRhcmVhIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IENsaXBib2FyZEV2ZW50LlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgb25DdXQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkgJiYgIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNUcmlnZ2VyZWRCeUN1dCwgdGhpcykgfHwgdGhpcy5pc0VkaXRvck9wZW5lZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldENvcHlhYmxlVGV4dCgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaXNUcmlnZ2VyZWRCeUN1dCwgdGhpcywgZmFsc2UpO1xuICAgIGNvbnN0IHJhbmdlZERhdGEgPSB0aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5YWJsZVJhbmdlcyk7XG4gICAgY29uc3QgYWxsb3dDdXR0aW5nT3V0ID0gISF0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ3V0JywgcmFuZ2VkRGF0YSwgdGhpcy5jb3B5YWJsZVJhbmdlcyk7XG4gICAgaWYgKGFsbG93Q3V0dGluZ091dCkge1xuICAgICAgY29uc3QgdGV4dFBsYWluID0gKDAsIF9TaGVldENsaXAuc3RyaW5naWZ5KShyYW5nZWREYXRhKTtcbiAgICAgIGlmIChldmVudCAmJiBldmVudC5jbGlwYm9hcmREYXRhKSB7XG4gICAgICAgIGNvbnN0IHRleHRIVE1MID0gKDAsIF9wYXJzZVRhYmxlLl9kYXRhVG9IVE1MKShyYW5nZWREYXRhLCB0aGlzLmhvdC5yb290RG9jdW1lbnQpO1xuICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvcGxhaW4nLCB0ZXh0UGxhaW4pO1xuICAgICAgICBldmVudC5jbGlwYm9hcmREYXRhLnNldERhdGEoJ3RleHQvaHRtbCcsIFtNRVRBX0hFQUQsIHRleHRIVE1MXS5qb2luKCcnKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBDbGlwYm9hcmRFdmVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoJ1RleHQnLCB0ZXh0UGxhaW4pO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCdDb3B5UGFzdGUuY3V0Jyk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDdXQnLCByYW5nZWREYXRhLCB0aGlzLmNvcHlhYmxlUmFuZ2VzKTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgcGFzdGVgIGV2ZW50IGNhbGxiYWNrIG9uIHRleHRhcmVhIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IENsaXBib2FyZEV2ZW50IG9yIHBzZXVkbyBDbGlwYm9hcmRFdmVudCwgaWYgcGFzdGUgd2FzIGNhbGxlZCBtYW51YWxseS5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uUGFzdGUoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkgfHwgdGhpcy5pc0VkaXRvck9wZW5lZCgpIHx8ICF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMgJiYgZXZlbnQudGFyZ2V0ICE9PSB0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGxldCBwYXN0ZWREYXRhO1xuICAgIGlmIChldmVudCAmJiB0eXBlb2YgZXZlbnQuY2xpcGJvYXJkRGF0YSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHRleHRIVE1MID0gKDAsIF9zdHJpbmcuc2FuaXRpemUpKGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dC9odG1sJyksIHtcbiAgICAgICAgQUREX1RBR1M6IFsnbWV0YSddLFxuICAgICAgICBBRERfQVRUUjogWydjb250ZW50J10sXG4gICAgICAgIEZPUkNFX0JPRFk6IHRydWVcbiAgICAgIH0pO1xuICAgICAgaWYgKHRleHRIVE1MICYmIC8oPHRhYmxlKXwoPFRBQkxFKS9nLnRlc3QodGV4dEhUTUwpKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZENvbmZpZyA9ICgwLCBfcGFyc2VUYWJsZS5odG1sVG9HcmlkU2V0dGluZ3MpKHRleHRIVE1MLCB0aGlzLmhvdC5yb290RG9jdW1lbnQpO1xuICAgICAgICBwYXN0ZWREYXRhID0gcGFyc2VkQ29uZmlnLmRhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXN0ZWREYXRhID0gZXZlbnQuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0L3BsYWluJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgQ2xpcGJvYXJkRXZlbnQgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXN0ZWREYXRhID0gdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoJ1RleHQnKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXN0ZWREYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgcGFzdGVkRGF0YSA9ICgwLCBfU2hlZXRDbGlwLnBhcnNlKShwYXN0ZWREYXRhKTtcbiAgICB9XG4gICAgaWYgKHBhc3RlZERhdGEgPT09IHZvaWQgMCB8fCBwYXN0ZWREYXRhICYmIHBhc3RlZERhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlUGFzdGUnLCBwYXN0ZWREYXRhLCB0aGlzLmNvcHlhYmxlUmFuZ2VzKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW3N0YXJ0Um93LCBzdGFydENvbHVtbiwgZW5kUm93LCBlbmRDb2x1bW5dID0gdGhpcy5wb3B1bGF0ZVZhbHVlcyhwYXN0ZWREYXRhKTtcbiAgICB0aGlzLmhvdC5zZWxlY3RDZWxsKHN0YXJ0Um93LCBzdGFydENvbHVtbiwgTWF0aC5taW4odGhpcy5ob3QuY291bnRSb3dzKCkgLSAxLCBlbmRSb3cpLCBNYXRoLm1pbih0aGlzLmhvdC5jb3VudENvbHMoKSAtIDEsIGVuZENvbHVtbikpO1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclBhc3RlJywgcGFzdGVkRGF0YSwgdGhpcy5jb3B5YWJsZVJhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvcHkgYW5kIGN1dCBvcHRpb25zIHRvIHRoZSBDb250ZXh0IE1lbnUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIENvbnRhaW5zIGRlZmF1bHQgYWRkZWQgb3B0aW9ucyBvZiB0aGUgQ29udGV4dCBNZW51LlxuICAgKi9cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGBDb3B5UGFzdGVgIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkNvcHlQYXN0ZSA9IENvcHlQYXN0ZTtcbmZ1bmN0aW9uIF9lbnN1cmVDbGlwYm9hcmRFdmVudHNHZXRUcmlnZ2VyZWQoZXZlbnROYW1lKSB7XG4gIC8vIFdpdGhvdXQgdGhpcyB3b3JrYXJvdW5kIFNhZmFyaSAodGVzdGVkIG9uIFNhZmFyaUAxNi41LjIpIGRvZXMgbm90IHRyaWdnZXIgdGhlICdjb3B5JyBldmVudC5cbiAgaWYgKCgwLCBfYnJvd3Nlci5pc1NhZmFyaSkoKSkge1xuICAgIGNvbnN0IGxhc3RTZWxlY3RlZFJhbmdlID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBpZiAobGFzdFNlbGVjdGVkUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93OiBoaWdobGlnaHRSb3csXG4gICAgICAgIGNvbDogaGlnaGxpZ2h0Q29sdW1uXG4gICAgICB9ID0gbGFzdFNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0O1xuICAgICAgY29uc3QgY3VycmVudGx5U2VsZWN0ZWRDZWxsID0gdGhpcy5ob3QuZ2V0Q2VsbChoaWdobGlnaHRSb3csIGhpZ2hsaWdodENvbHVtbiwgdHJ1ZSk7XG4gICAgICBpZiAoY3VycmVudGx5U2VsZWN0ZWRDZWxsKSB7XG4gICAgICAgICgwLCBfZWxlbWVudC5ydW5XaXRoU2VsZWN0ZWRDb250ZW5kRWRpdGFibGVFbGVtZW50KShjdXJyZW50bHlTZWxlY3RlZENlbGwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoZXZlbnROYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChldmVudE5hbWUpO1xuICB9XG59XG4vKipcbiAqIENvdW50cyBob3cgbWFueSBjb2x1bW4gaGVhZGVycyB3aWxsIGJlIGNvcGllZCBiYXNlZCBvbiB0aGUgcGFzc2VkIHJhbmdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5PHtzdGFydFJvdzogbnVtYmVyLCBzdGFydENvbDogbnVtYmVyLCBlbmRSb3c6IG51bWJlciwgZW5kQ29sOiBudW1iZXJ9Pn0gcmFuZ2VzIEFycmF5IG9mIG9iamVjdHMgd2l0aCBwcm9wZXJ0aWVzIGBzdGFydFJvd2AsIGBzdGFydENvbGAsIGBlbmRSb3dgIGFuZCBgZW5kQ29sYC5cbiAqIEByZXR1cm5zIHt7IGNvbHVtbkhlYWRlcnNDb3VudDogbnVtYmVyIH19IFJldHVybnMgYW4gb2JqZWN0IHdpdGgga2V5cyB0aGF0IGhvbGRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIHRoZSBudW1iZXIgb2YgY29waWVkIGhlYWRlcnMuXG4gKi9cbmZ1bmN0aW9uIF9jb3VudENvcGllZEhlYWRlcnMocmFuZ2VzKSB7XG4gIGNvbnN0IHtcbiAgICByb3dzXG4gIH0gPSAoMCwgX2NvcHlhYmxlUmFuZ2VzLm5vcm1hbGl6ZVJhbmdlcykocmFuZ2VzKTtcbiAgbGV0IGNvbHVtbkhlYWRlcnNDb3VudCA9IDA7XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHJvd3MubGVuZ3RoOyByb3crKykge1xuICAgIGlmIChyb3dzW3Jvd10gPj0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbHVtbkhlYWRlcnNDb3VudCArPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgY29sdW1uSGVhZGVyc0NvdW50XG4gIH07XG59XG5mdW5jdGlvbiBfYWRkQ29udGVudEVkaXRhYmxlVG9IaWdobGlnaHRlZENlbGwoKSB7XG4gIGlmICh0aGlzLmhvdC5pc0xpc3RlbmluZygpKSB7XG4gICAgY29uc3QgbGFzdFNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmIChsYXN0U2VsZWN0ZWRSYW5nZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3c6IGhpZ2hsaWdodFJvdyxcbiAgICAgICAgY29sOiBoaWdobGlnaHRDb2x1bW5cbiAgICAgIH0gPSBsYXN0U2VsZWN0ZWRSYW5nZS5oaWdobGlnaHQ7XG4gICAgICBjb25zdCBjdXJyZW50bHlTZWxlY3RlZENlbGwgPSB0aGlzLmhvdC5nZXRDZWxsKGhpZ2hsaWdodFJvdywgaGlnaGxpZ2h0Q29sdW1uLCB0cnVlKTtcbiAgICAgIGlmIChjdXJyZW50bHlTZWxlY3RlZENlbGwpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50Lm1ha2VFbGVtZW50Q29udGVudEVkaXRhYmxlQW5kU2VsZWN0SXRzQ29udGVudCkoY3VycmVudGx5U2VsZWN0ZWRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBgY29udGVudGVkaXRhYmxlYCBhdHRyaWJ1dGUgZnJvbSB0aGUgaGlnaGxpZ2h0ZWQgY2VsbCBhbmQgZGVzZWxlY3QgaXRzIGNvbnRlbnQuXG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVDb250ZW50RWRpdGFibGVGcm9tSGlnaGxpZ2h0ZWRDZWxsKCkge1xuICAvLyBJZiB0aGUgaW5zdGFuY2UgaXMgbm90IGxpc3RlbmluZywgdGhlIHdvcmthcm91bmQgaXMgbm90IG5lZWRlZC5cbiAgaWYgKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpIHtcbiAgICBjb25zdCBsYXN0U2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKGxhc3RTZWxlY3RlZFJhbmdlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvdzogaGlnaGxpZ2h0Um93LFxuICAgICAgICBjb2w6IGhpZ2hsaWdodENvbHVtblxuICAgICAgfSA9IGxhc3RTZWxlY3RlZFJhbmdlLmhpZ2hsaWdodDtcbiAgICAgIGNvbnN0IGN1cnJlbnRseVNlbGVjdGVkQ2VsbCA9IHRoaXMuaG90LmdldENlbGwoaGlnaGxpZ2h0Um93LCBoaWdobGlnaHRDb2x1bW4sIHRydWUpO1xuICAgICAgaWYgKGN1cnJlbnRseVNlbGVjdGVkQ2VsbCAhPT0gbnVsbCAmJiBjdXJyZW50bHlTZWxlY3RlZENlbGwgIT09IHZvaWQgMCAmJiBjdXJyZW50bHlTZWxlY3RlZENlbGwuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkge1xuICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ29udGVudEVkaXRhYmxlRnJvbUVsZW1lbnRBbmREZXNlbGVjdCkoY3VycmVudGx5U2VsZWN0ZWRDZWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIF9vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgbmFtZTogJy0tLS0tLS0tLSdcbiAgfSwgKDAsIF9jb3B5LmRlZmF1bHQpKHRoaXMpKTtcbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZW5hYmxlQ29weUNvbHVtbkhlYWRlcnMsIHRoaXMpKSB7XG4gICAgb3B0aW9ucy5pdGVtcy5wdXNoKCgwLCBfY29weVdpdGhDb2x1bW5IZWFkZXJzLmRlZmF1bHQpKHRoaXMpKTtcbiAgfVxuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lbmFibGVDb3B5Q29sdW1uR3JvdXBIZWFkZXJzLCB0aGlzKSkge1xuICAgIG9wdGlvbnMuaXRlbXMucHVzaCgoMCwgX2NvcHlXaXRoQ29sdW1uR3JvdXBIZWFkZXJzLmRlZmF1bHQpKHRoaXMpKTtcbiAgfVxuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lbmFibGVDb3B5Q29sdW1uSGVhZGVyc09ubHksIHRoaXMpKSB7XG4gICAgb3B0aW9ucy5pdGVtcy5wdXNoKCgwLCBfY29weUNvbHVtbkhlYWRlcnNPbmx5LmRlZmF1bHQpKHRoaXMpKTtcbiAgfVxuICBvcHRpb25zLml0ZW1zLnB1c2goKDAsIF9jdXQuZGVmYXVsdCkodGhpcykpO1xufVxuLyoqXG4gKiBEaXNhYmxlcyB0aGUgdmlld3BvcnQgc2Nyb2xsIGFmdGVyIHBhc3RpbmcgdGhlIGRhdGEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21Sb3cgU2VsZWN0aW9uIHN0YXJ0IHJvdyB2aXN1YWwgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUNvbHVtbiBTZWxlY3Rpb24gc3RhcnQgY29sdW1uIHZpc3VhbCBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b1JvdyBTZWxlY3Rpb24gZW5kIHJvdyB2aXN1YWwgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gdG9Db2x1bW4gU2VsZWN0aW9uIGVuZCBjb2x1bW4gdmlzdWFsIGluZGV4LlxuICogQHBhcmFtIHtvYmplY3R9IHByZXZlbnRTY3JvbGxpbmcgT2JqZWN0IHdpdGggYHZhbHVlYCBwcm9wZXJ0eS4gSWYgYHRydWVgLCB0aGUgdmlld3BvcnQgc2Nyb2xsIHdpbGwgYmUgcHJldmVudGVkLlxuICovXG5mdW5jdGlvbiBfb25BZnRlclNlbGVjdGlvbihmcm9tUm93LCBmcm9tQ29sdW1uLCB0b1JvdywgdG9Db2x1bW4sIHByZXZlbnRTY3JvbGxpbmcpIHtcbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJldmVudFZpZXdwb3J0U2Nyb2xsT25QYXN0ZSwgdGhpcykpIHtcbiAgICBwcmV2ZW50U2Nyb2xsaW5nLnZhbHVlID0gdHJ1ZTtcbiAgfVxuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXZlbnRWaWV3cG9ydFNjcm9sbE9uUGFzdGUsIHRoaXMsIGZhbHNlKTtcbn1cbi8qKlxuICogRm9yY2UgZm9jdXMgb24gZm9jdXNhYmxlRWxlbWVudCBhZnRlciBlbmQgb2YgdGhlIHNlbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJTZWxlY3Rpb25FbmQoKSB7XG4gIGlmICh0aGlzLmlzRWRpdG9yT3BlbmVkKCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5zZXRDb3B5YWJsZVRleHQoKTtcbn1cbi8qKlxuICogYGRvY3VtZW50LmJvZHlgIGBtb3VzZWVudGVyYCBjYWxsYmFjayB1c2VkIHRvIHdvcmsgYXJvdW5kIGEgU2FmYXJpJ3MgcHJvYmxlbSB3aXRoIGNvcHlpbmcvY3V0dGluZyBmcm9tIHRoZVxuICogYnJvd3NlcidzIG1lbnUuXG4gKi9cbmZ1bmN0aW9uIF9vblNhZmFyaU1vdXNlRW50ZXIoKSB7XG4gIF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5UGFzdGVfYnJhbmQsIHRoaXMsIF9yZW1vdmVDb250ZW50RWRpdGFibGVGcm9tSGlnaGxpZ2h0ZWRDZWxsKS5jYWxsKHRoaXMpO1xufVxuLyoqXG4gKiBgZG9jdW1lbnQuYm9keWAgYG1vdXNlbGVhdmVgIGNhbGxiYWNrIHVzZWQgdG8gd29yayBhcm91bmQgYSBTYWZhcmkncyBwcm9ibGVtIHdpdGggY29weWluZy9jdXR0aW5nIGZyb20gdGhlXG4gKiBicm93c2VyJ3MgbWVudS5cbiAqL1xuZnVuY3Rpb24gX29uU2FmYXJpTW91c2VMZWF2ZSgpIHtcbiAgX2Fzc2VydENsYXNzQnJhbmQoX0NvcHlQYXN0ZV9icmFuZCwgdGhpcywgX2FkZENvbnRlbnRFZGl0YWJsZVRvSGlnaGxpZ2h0ZWRDZWxsKS5jYWxsKHRoaXMpO1xufVxuLyoqXG4gKiBgYWZ0ZXJTZWxlY3Rpb25gIGhvb2sgY2FsbGJhY2sgdHJpZ2dlcmVkIG9ubHkgb24gU2FmYXJpLlxuICovXG5mdW5jdGlvbiBfb25TYWZhcmlBZnRlclNlbGVjdGlvbigpIHtcbiAgX2Fzc2VydENsYXNzQnJhbmQoX0NvcHlQYXN0ZV9icmFuZCwgdGhpcywgX3JlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21IaWdobGlnaHRlZENlbGwpLmNhbGwodGhpcyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLm5vcm1hbGl6ZVJhbmdlcyA9IG5vcm1hbGl6ZVJhbmdlcztcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogVGhlIHV0aWxzIGNsYXNzIHByb2R1Y2VzIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIGluIHRoZSBge3N0YXJ0Um93LCBzdGFydENvbCwgZW5kUm93LCBlbmRDb2x9YCBmb3JtYXRcbiAqIGJhc2VkIG9uIHRoZSBjdXJyZW50IHRhYmxlIHNlbGVjdGlvbi4gVGhlIENvcHlQYXN0ZSBwbHVnaW4gY29uc3VtZXMgdGhhdCByYW5nZXMgdG8gZ2VuZXJhdGVcbiAqIGFwcHJvcHJpYXRlIGRhdGEgcmVhZHkgdG8gY29weSB0byB0aGUgY2xpcGJvYXJkLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbnZhciBfc2VsZWN0ZWRSYW5nZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jb3VudFJvd3MgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY291bnRDb2x1bW5zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3Jvd3NMaW1pdCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jb2x1bW5zTGltaXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY291bnRDb2x1bW5IZWFkZXJzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX0NvcHlhYmxlUmFuZ2VzRmFjdG9yeV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgQ29weWFibGVSYW5nZXNGYWN0b3J5IHtcbiAgLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuICAvKipcbiAgICogQHBhcmFtIHt7XG4gICAqICAgY291bnRSb3dzOiBmdW5jdGlvbigpOiBudW1iZXIsXG4gICAqICAgY291bnRDb2x1bW5zOiBmdW5jdGlvbigpOiBudW1iZXIsXG4gICAqICAgcm93c0xpbWl0OiBmdW5jdGlvbigpOiBudW1iZXIsXG4gICAqICAgY29sdW1uc0xpbWl0OiBmdW5jdGlvbigpOiBudW1iZXIsXG4gICAqICAgY291bnRDb2x1bW5IZWFkZXJzOiBmdW5jdGlvbigpOiBudW1iZXJcbiAgICogfX0gZGVwZW5kZW5jaWVzIFRoZSB1dGlscyBjbGFzcyBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihfcmVmKSB7XG4gICAgbGV0IHtcbiAgICAgIGNvdW50Um93cyxcbiAgICAgIGNvdW50Q29sdW1ucyxcbiAgICAgIHJvd3NMaW1pdCxcbiAgICAgIGNvbHVtbnNMaW1pdCxcbiAgICAgIGNvdW50Q29sdW1uSGVhZGVyc1xuICAgIH0gPSBfcmVmO1xuICAgIC8qKlxuICAgICAqIFRyaW1tZWQgdGhlIGNvbHVtbnMgcmFuZ2UgdG8gdGhlIGxpbWl0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHsqfSBzdGFydENvbHVtbiBUaGUgbG93ZXN0IGNvbHVtbiBpbmRleCBpbiB0aGUgcmFuZ2UuXG4gICAgICogQHBhcmFtIHsqfSBlbmRDb2x1bW4gVGhlIGhpZ2hlc3QgY29sdW1uIGluZGV4IGluIHRoZSByYW5nZS5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRyaW1tZWQgY29sdW1uIGluZGV4IGlmIGl0IGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQ29weWFibGVSYW5nZXNGYWN0b3J5X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Q2VsbFJhbmdlfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZWxlY3RlZFJhbmdlLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbigpOiBudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvdW50Um93cywgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKTogbnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb3VudENvbHVtbnMsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Z1bmN0aW9uKCk6IG51bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm93c0xpbWl0LCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbigpOiBudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvbHVtbnNMaW1pdCwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKTogbnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb3VudENvbHVtbkhlYWRlcnMsIHZvaWQgMCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb3VudFJvd3MsIHRoaXMsIGNvdW50Um93cyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb3VudENvbHVtbnMsIHRoaXMsIGNvdW50Q29sdW1ucyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9yb3dzTGltaXQsIHRoaXMsIHJvd3NMaW1pdCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb2x1bW5zTGltaXQsIHRoaXMsIGNvbHVtbnNMaW1pdCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb3VudENvbHVtbkhlYWRlcnMsIHRoaXMsIGNvdW50Q29sdW1uSGVhZGVycyk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdGlvbiByYW5nZSB0byBiZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBzZWxlY3RlZFJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgcmVwcmVzZW50ZWQgYnkgdGhlIENlbGxSYW5nZSBjbGFzcy5cbiAgICovXG4gIHNldFNlbGVjdGVkUmFuZ2Uoc2VsZWN0ZWRSYW5nZSkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VsZWN0ZWRSYW5nZSwgdGhpcywgc2VsZWN0ZWRSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBjb29yZHMgb2JqZWN0IHdpdGhpbiB0aGUgZGF0YXNldCByYW5nZSAoY2VsbHMpIHdpdGggYHN0YXJ0Um93YCwgYHN0YXJ0Q29sYCwgYGVuZFJvd2BcbiAgICogYW5kIGBlbmRDb2xgIGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHt7c3RhcnRSb3c6IG51bWJlciwgc3RhcnRDb2w6IG51bWJlciwgZW5kUm93OiBudW1iZXIsIGVuZENvbDogbnVtYmVyfSB8IG51bGx9XG4gICAqL1xuICBnZXRDZWxsc1JhbmdlKCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvdW50Um93cywgdGhpcykuY2FsbCh0aGlzKSA9PT0gMCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvdW50Q29sdW1ucywgdGhpcykuY2FsbCh0aGlzKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHJvdzogc3RhcnRSb3csXG4gICAgICBjb2w6IHN0YXJ0Q29sXG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSYW5nZSwgdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCB7XG4gICAgICByb3c6IGVuZFJvdyxcbiAgICAgIGNvbDogZW5kQ29sXG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSYW5nZSwgdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7XG4gICAgY29uc3QgZmluYWxFbmRSb3cgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29weWFibGVSYW5nZXNGYWN0b3J5X2JyYW5kLCB0aGlzLCBfdHJpbVJvd3NSYW5nZSkuY2FsbCh0aGlzLCBzdGFydFJvdywgZW5kUm93KTtcbiAgICBjb25zdCBmaW5hbEVuZENvbCA9IF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5YWJsZVJhbmdlc0ZhY3RvcnlfYnJhbmQsIHRoaXMsIF90cmltQ29sdW1uc1JhbmdlKS5jYWxsKHRoaXMsIHN0YXJ0Q29sLCBlbmRDb2wpO1xuICAgIGNvbnN0IGlzUmFuZ2VUcmltbWVkID0gZW5kUm93ICE9PSBmaW5hbEVuZFJvdyB8fCBlbmRDb2wgIT09IGZpbmFsRW5kQ29sO1xuICAgIHJldHVybiB7XG4gICAgICBpc1JhbmdlVHJpbW1lZCxcbiAgICAgIHN0YXJ0Um93LFxuICAgICAgc3RhcnRDb2wsXG4gICAgICBlbmRSb3c6IGZpbmFsRW5kUm93LFxuICAgICAgZW5kQ29sOiBmaW5hbEVuZENvbFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBjb29yZHMgb2JqZWN0IHdpdGhpbiB0aGUgbW9zdC1ib3R0b20gY29sdW1uIGhlYWRlcnMgcmFuZ2Ugd2l0aCBgc3RhcnRSb3dgLFxuICAgKiBgc3RhcnRDb2xgLCBgZW5kUm93YCBhbmQgYGVuZENvbGAga2V5cy5cbiAgICpcbiAgICogQHJldHVybnMge3tzdGFydFJvdzogbnVtYmVyLCBzdGFydENvbDogbnVtYmVyLCBlbmRSb3c6IG51bWJlciwgZW5kQ29sOiBudW1iZXJ9IHwgbnVsbH1cbiAgICovXG4gIGdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSB7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY291bnRDb2x1bW5zLCB0aGlzKS5jYWxsKHRoaXMpID09PSAwIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY291bnRDb2x1bW5IZWFkZXJzLCB0aGlzKS5jYWxsKHRoaXMpID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY29sOiBzdGFydENvbFxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkUmFuZ2UsIHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3Qge1xuICAgICAgY29sOiBlbmRDb2xcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZFJhbmdlLCB0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBjb25zdCBmaW5hbEVuZENvbCA9IF9hc3NlcnRDbGFzc0JyYW5kKF9Db3B5YWJsZVJhbmdlc0ZhY3RvcnlfYnJhbmQsIHRoaXMsIF90cmltQ29sdW1uc1JhbmdlKS5jYWxsKHRoaXMsIHN0YXJ0Q29sLCBlbmRDb2wpO1xuICAgIGNvbnN0IGlzUmFuZ2VUcmltbWVkID0gZW5kQ29sICE9PSBmaW5hbEVuZENvbDtcbiAgICByZXR1cm4ge1xuICAgICAgaXNSYW5nZVRyaW1tZWQsXG4gICAgICBzdGFydFJvdzogLTEsXG4gICAgICBzdGFydENvbCxcbiAgICAgIGVuZFJvdzogLTEsXG4gICAgICBlbmRDb2w6IGZpbmFsRW5kQ29sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IGNvb3JkcyBvYmplY3Qgd2l0aGluIGFsbCBjb2x1bW4gaGVhZGVycyBsYXllcnMgKGluY2x1ZGluZyBuZXN0ZWQgaGVhZGVycykgcmFuZ2Ugd2l0aFxuICAgKiBgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCBhbmQgYGVuZENvbGAga2V5cy5cbiAgICpcbiAgICogQHJldHVybnMge3tzdGFydFJvdzogbnVtYmVyLCBzdGFydENvbDogbnVtYmVyLCBlbmRSb3c6IG51bWJlciwgZW5kQ29sOiBudW1iZXJ9IHwgbnVsbH1cbiAgICovXG4gIGdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpIHtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3VudENvbHVtbnMsIHRoaXMpLmNhbGwodGhpcykgPT09IDAgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3VudENvbHVtbkhlYWRlcnMsIHRoaXMpLmNhbGwodGhpcykgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBjb2w6IHN0YXJ0Q29sXG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSYW5nZSwgdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCB7XG4gICAgICBjb2w6IGVuZENvbFxuICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkUmFuZ2UsIHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpO1xuICAgIGNvbnN0IGZpbmFsRW5kQ29sID0gX2Fzc2VydENsYXNzQnJhbmQoX0NvcHlhYmxlUmFuZ2VzRmFjdG9yeV9icmFuZCwgdGhpcywgX3RyaW1Db2x1bW5zUmFuZ2UpLmNhbGwodGhpcywgc3RhcnRDb2wsIGVuZENvbCk7XG4gICAgY29uc3QgaXNSYW5nZVRyaW1tZWQgPSBlbmRDb2wgIT09IGZpbmFsRW5kQ29sO1xuICAgIHJldHVybiB7XG4gICAgICBpc1JhbmdlVHJpbW1lZCxcbiAgICAgIHN0YXJ0Um93OiAtX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb3VudENvbHVtbkhlYWRlcnMsIHRoaXMpLmNhbGwodGhpcyksXG4gICAgICBzdGFydENvbCxcbiAgICAgIGVuZFJvdzogLTEsXG4gICAgICBlbmRDb2w6IGZpbmFsRW5kQ29sXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYHJvd3NgIGFuZCBgY29sdW1uc2Aga2V5cy4gVGhlIGFycmF5cyBjb250YWlucyBzb3J0ZWQgaW5kZXhlc1xuICogZ2VuZXJhdGVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gYHJhbmdlc2AgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTx7c3RhcnRSb3c6IG51bWJlciwgc3RhcnRDb2w6IG51bWJlciwgZW5kUm93OiBudW1iZXIsIGVuZENvbDogbnVtYmVyfT59IHJhbmdlcyBUaGUgcmFuZ2UgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHt7cm93czogbnVtYmVyW10sIGNvbHVtbnM6IG51bWJlcltdfX1cbiAqL1xuZXhwb3J0cy5Db3B5YWJsZVJhbmdlc0ZhY3RvcnkgPSBDb3B5YWJsZVJhbmdlc0ZhY3Rvcnk7XG5mdW5jdGlvbiBfdHJpbUNvbHVtbnNSYW5nZShzdGFydENvbHVtbiwgZW5kQ29sdW1uKSB7XG4gIHJldHVybiBNYXRoLm1pbihlbmRDb2x1bW4sIE1hdGgubWF4KHN0YXJ0Q29sdW1uICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5zTGltaXQsIHRoaXMpLmNhbGwodGhpcykgLSAxLCBzdGFydENvbHVtbikpO1xufVxuLyoqXG4gKiBUcmltbWVkIHRoZSByb3dzIHJhbmdlIHRvIHRoZSBsaW1pdC5cbiAqXG4gKiBAcGFyYW0geyp9IHN0YXJ0Um93IFRoZSBsb3dlc3Qgcm93IGluZGV4IGluIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7Kn0gZW5kUm93IFRoZSBoaWdoZXN0IHJvdyBpbmRleCBpbiB0aGUgcmFuZ2UuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRyaW1tZWQgcm93IGluZGV4IGlmIGl0IGV4Y2VlZHMgdGhlIGxpbWl0LlxuICovXG5mdW5jdGlvbiBfdHJpbVJvd3NSYW5nZShzdGFydFJvdywgZW5kUm93KSB7XG4gIHJldHVybiBNYXRoLm1pbihlbmRSb3csIE1hdGgubWF4KHN0YXJ0Um93ICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dzTGltaXQsIHRoaXMpLmNhbGwodGhpcykgLSAxLCBzdGFydFJvdykpO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplUmFuZ2VzKHJhbmdlcykge1xuICBjb25zdCByb3dzID0gW107XG4gIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJhbmdlcywgcmFuZ2UgPT4ge1xuICAgIGNvbnN0IG1pblJvdyA9IE1hdGgubWluKHJhbmdlLnN0YXJ0Um93LCByYW5nZS5lbmRSb3cpO1xuICAgIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Um93LCByYW5nZS5lbmRSb3cpO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkobWluUm93LCBtYXhSb3csIHJvdyA9PiB7XG4gICAgICBpZiAocm93cy5pbmRleE9mKHJvdykgPT09IC0xKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1pbkNvbHVtbiA9IE1hdGgubWluKHJhbmdlLnN0YXJ0Q29sLCByYW5nZS5lbmRDb2wpO1xuICAgIGNvbnN0IG1heENvbHVtbiA9IE1hdGgubWF4KHJhbmdlLnN0YXJ0Q29sLCByYW5nZS5lbmRDb2wpO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkobWluQ29sdW1uLCBtYXhDb2x1bW4sIGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1ucy5pbmRleE9mKGNvbHVtbikgPT09IC0xKSB7XG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByb3dzLFxuICAgIGNvbHVtbnNcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfY29weVBhc3RlID0gcmVxdWlyZShcIi4vY29weVBhc3RlXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2NvcHlQYXN0ZS5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfY29weVBhc3RlLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuQ29weVBhc3RlID0gX2NvcHlQYXN0ZS5Db3B5UGFzdGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2NsaXBib2FyZERhdGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NsaXBib2FyZERhdGFcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgUGFzdGVFdmVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY2xpcGJvYXJkRGF0YSA9IG5ldyBfY2xpcGJvYXJkRGF0YS5kZWZhdWx0KCk7XG4gIH1cbiAgcHJldmVudERlZmF1bHQoKSB7fVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gUGFzdGVFdmVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGJvdHRvbTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7Q3VzdG9tQm9yZGVyc30gY3VzdG9tQm9yZGVyc1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gYm90dG9tKGN1c3RvbUJvcmRlcnNQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdib3JkZXJzOmJvdHRvbScsXG4gICAgbmFtZSgpIHtcbiAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NKTtcbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzLCAnYm90dG9tJyk7XG4gICAgICBpZiAoaGFzQm9yZGVyKSB7XG4gICAgICAgIGxhYmVsID0gKDAsIF91dGlscy5tYXJrU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9LFxuICAgIGNhbGxiYWNrKGtleSwgc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzLCAnYm90dG9tJyk7XG4gICAgICBjdXN0b21Cb3JkZXJzUGx1Z2luLnByZXBhcmVCb3JkZXIoc2VsZWN0ZWQsICdib3R0b20nLCBoYXNCb3JkZXIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYm90dG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ib3R0b21cIikpO1xuZXhwb3J0cy5ib3R0b20gPSBfYm90dG9tLmRlZmF1bHQ7XG52YXIgX2xlZnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2xlZnRcIikpO1xuZXhwb3J0cy5sZWZ0ID0gX2xlZnQuZGVmYXVsdDtcbnZhciBfbm9Cb3JkZXJzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub0JvcmRlcnNcIikpO1xuZXhwb3J0cy5ub0JvcmRlcnMgPSBfbm9Cb3JkZXJzLmRlZmF1bHQ7XG52YXIgX3JpZ2h0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yaWdodFwiKSk7XG5leHBvcnRzLnJpZ2h0ID0gX3JpZ2h0LmRlZmF1bHQ7XG52YXIgX3RvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdG9wXCIpKTtcbmV4cG9ydHMudG9wID0gX3RvcC5kZWZhdWx0O1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGxlZnQ7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0N1c3RvbUJvcmRlcnN9IGN1c3RvbUJvcmRlcnNQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGxlZnQoY3VzdG9tQm9yZGVyc1BsdWdpbikge1xuICBjb25zdCBib3JkZXJEaXJlY3Rpb24gPSBjdXN0b21Cb3JkZXJzUGx1Z2luLmhvdC5pc1J0bCgpID8gJ2VuZCcgOiAnc3RhcnQnO1xuICByZXR1cm4ge1xuICAgIGtleTogJ2JvcmRlcnM6bGVmdCcsXG4gICAgbmFtZSgpIHtcbiAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfTEVGVCk7XG4gICAgICBjb25zdCBoYXNCb3JkZXIgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQm9yZGVycykodGhpcywgYm9yZGVyRGlyZWN0aW9uKTtcbiAgICAgIGlmIChoYXNCb3JkZXIpIHtcbiAgICAgICAgbGFiZWwgPSAoMCwgX3V0aWxzLm1hcmtTZWxlY3RlZCkobGFiZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0sXG4gICAgY2FsbGJhY2soa2V5LCBzZWxlY3RlZCkge1xuICAgICAgY29uc3QgaGFzQm9yZGVyID0gKDAsIF91dGlscy5jaGVja1NlbGVjdGlvbkJvcmRlcnMpKHRoaXMsIGJvcmRlckRpcmVjdGlvbik7XG4gICAgICBjdXN0b21Cb3JkZXJzUGx1Z2luLnByZXBhcmVCb3JkZXIoc2VsZWN0ZWQsIGJvcmRlckRpcmVjdGlvbiwgaGFzQm9yZGVyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSBub0JvcmRlcnM7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4uL3V0aWxzXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0N1c3RvbUJvcmRlcnN9IGN1c3RvbUJvcmRlcnNQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIG5vQm9yZGVycyhjdXN0b21Cb3JkZXJzUGx1Z2luKSB7XG4gIHJldHVybiB7XG4gICAga2V5OiAnYm9yZGVyczpub19ib3JkZXJzJyxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKGtleSwgc2VsZWN0ZWQpIHtcbiAgICAgIGN1c3RvbUJvcmRlcnNQbHVnaW4ucHJlcGFyZUJvcmRlcihzZWxlY3RlZCwgJ25vQm9yZGVycycpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gISgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSByaWdodDtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7Q3VzdG9tQm9yZGVyc30gY3VzdG9tQm9yZGVyc1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmlnaHQoY3VzdG9tQm9yZGVyc1BsdWdpbikge1xuICBjb25zdCBib3JkZXJEaXJlY3Rpb24gPSBjdXN0b21Cb3JkZXJzUGx1Z2luLmhvdC5pc1J0bCgpID8gJ3N0YXJ0JyA6ICdlbmQnO1xuICByZXR1cm4ge1xuICAgIGtleTogJ2JvcmRlcnM6cmlnaHQnLFxuICAgIG5hbWUoKSB7XG4gICAgICBsZXQgbGFiZWwgPSB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTX1JJR0hUKTtcbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzLCBib3JkZXJEaXJlY3Rpb24pO1xuICAgICAgaWYgKGhhc0JvcmRlcikge1xuICAgICAgICBsYWJlbCA9ICgwLCBfdXRpbHMubWFya1NlbGVjdGVkKShsYWJlbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGFiZWw7XG4gICAgfSxcbiAgICBjYWxsYmFjayhrZXksIHNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBoYXNCb3JkZXIgPSAoMCwgX3V0aWxzLmNoZWNrU2VsZWN0aW9uQm9yZGVycykodGhpcywgYm9yZGVyRGlyZWN0aW9uKTtcbiAgICAgIGN1c3RvbUJvcmRlcnNQbHVnaW4ucHJlcGFyZUJvcmRlcihzZWxlY3RlZCwgYm9yZGVyRGlyZWN0aW9uLCBoYXNCb3JkZXIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHRvcDtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7Q3VzdG9tQm9yZGVyc30gY3VzdG9tQm9yZGVyc1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gdG9wKGN1c3RvbUJvcmRlcnNQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdib3JkZXJzOnRvcCcsXG4gICAgbmFtZSgpIHtcbiAgICAgIGxldCBsYWJlbCA9IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfVE9QKTtcbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzLCAndG9wJyk7XG4gICAgICBpZiAoaGFzQm9yZGVyKSB7XG4gICAgICAgIGxhYmVsID0gKDAsIF91dGlscy5tYXJrU2VsZWN0ZWQpKGxhYmVsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsYWJlbDtcbiAgICB9LFxuICAgIGNhbGxiYWNrKGtleSwgc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgwLCBfdXRpbHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKSh0aGlzLCAndG9wJyk7XG4gICAgICBjdXN0b21Cb3JkZXJzUGx1Z2luLnByZXBhcmVCb3JkZXIoc2VsZWN0ZWQsICd0b3AnLCBoYXNCb3JkZXIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbnRleHRNZW51SXRlbSA9IHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbVwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbnZhciBfc2VsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3NlbGVjdGlvblwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdjdXN0b21Cb3JkZXJzJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gOTA7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIEN1c3RvbUJvcmRlcnNcbiAqIEBjbGFzcyBDdXN0b21Cb3JkZXJzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBlbmFibGVzIGFuIG9wdGlvbiB0byBhcHBseSBjdXN0b20gYm9yZGVycyB0aHJvdWdoIHRoZSBjb250ZXh0IG1lbnUgKGNvbmZpZ3VyYWJsZSB3aXRoIGNvbnRleHQgbWVudSBrZXlcbiAqIGBib3JkZXJzYCkuXG4gKlxuICogVG8gaW5pdGlhbGl6ZSBIYW5kc29udGFibGUgd2l0aCBwcmVkZWZpbmVkIGN1c3RvbSBib3JkZXJzLCBwcm92aWRlIGNlbGwgY29vcmRpbmF0ZXMgYW5kIGJvcmRlciBzdHlsZXMgaW4gYSBmb3JtXG4gKiBvZiBhbiBhcnJheS5cbiAqXG4gKiBTZWUgW2BjdXN0b21Cb3JkZXJzYCBjb25maWd1cmF0aW9uIG9wdGlvbl0oQC9hcGkvb3B0aW9ucy5tZCNjdXN0b21Cb3JkZXJzKSBvciBnbyB0b1xuICogW0N1c3RvbSBjZWxsIGJvcmRlcnMgZGVtb10oQC9ndWlkZXMvY2VsbC1mZWF0dXJlcy9mb3JtYXR0aW5nLWNlbGxzL2Zvcm1hdHRpbmctY2VsbHMubWQjY3VzdG9tLWNlbGwtYm9yZGVycykgZm9yIG1vcmUgZXhhbXBsZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiBjdXN0b21Cb3JkZXJzOiBbXG4gKiAgIHtcbiAqICAgIHJhbmdlOiB7XG4gKiAgICAgIGZyb206IHtcbiAqICAgICAgICByb3c6IDEsXG4gKiAgICAgICAgY29sOiAxXG4gKiAgICAgIH0sXG4gKiAgICAgIHRvOiB7XG4gKiAgICAgICAgcm93OiAzLFxuICogICAgICAgIGNvbDogNFxuICogICAgICB9LFxuICogICAgfSxcbiAqICAgIHN0YXJ0OiB7fSxcbiAqICAgIGVuZDoge30sXG4gKiAgICB0b3A6IHt9LFxuICogICAgYm90dG9tOiB7fSxcbiAqICAgfSxcbiAqIF0sXG4gKlxuICogLy8gb3JcbiAqIGN1c3RvbUJvcmRlcnM6IFtcbiAqICAgeyByb3c6IDIsXG4gKiAgICAgY29sOiAyLFxuICogICAgIHN0YXJ0OiB7XG4gKiAgICAgICB3aWR0aDogMixcbiAqICAgICAgIGNvbG9yOiAncmVkJyxcbiAqICAgICB9LFxuICogICAgIGVuZDoge1xuICogICAgICAgd2lkdGg6IDEsXG4gKiAgICAgICBjb2xvcjogJ2dyZWVuJyxcbiAqICAgICB9LFxuICogICAgIHRvcDogJycsXG4gKiAgICAgYm90dG9tOiAnJyxcbiAqICAgfVxuICogXSxcbiAqIGBgYFxuICovXG52YXIgX0N1c3RvbUJvcmRlcnNfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIEN1c3RvbUJvcmRlcnMgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBBZGQgYm9yZGVyIG9wdGlvbnMgdG8gY29udGV4dCBtZW51LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zIENvbnRleHQgbWVudSBpdGVtcy5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0N1c3RvbUJvcmRlcnNfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIFNhdmVkIGJvcmRlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzYXZlZEJvcmRlcnNcIiwgW10pO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgQ3VzdG9tQm9yZGVycyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMnLCBvcHRpb25zID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9DdXN0b21Cb3JkZXJzX2JyYW5kLCB0aGlzLCBfb25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMpLmNhbGwodGhpcywgb3B0aW9ucykpO1xuICAgIHRoaXMuYWRkSG9vaygnaW5pdCcsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9DdXN0b21Cb3JkZXJzX2JyYW5kLCB0aGlzLCBfb25BZnRlckluaXQpLmNhbGwodGhpcykpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHRoaXMuaGlkZUJvcmRlcnMoKTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BjdXN0b21Cb3JkZXJzYF0oQC9hcGkvb3B0aW9ucy5tZCNjdXN0b21ib3JkZXJzKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjdXN0b20gYm9yZGVycy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogY29uc3QgY3VzdG9tQm9yZGVyc1BsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2N1c3RvbUJvcmRlcnMnKTtcbiAgICpcbiAgICogLy8gVXNpbmcgYW4gYXJyYXkgb2YgYXJyYXlzIChwcm9kdWNlZCBieSBgLmdldFNlbGVjdGVkKClgIG1ldGhvZCkuXG4gICAqIGN1c3RvbUJvcmRlcnNQbHVnaW4uc2V0Qm9yZGVycyhbWzEsIDEsIDIsIDJdLCBbNiwgMiwgMCwgMl1dLCB7c3RhcnQ6IHt3aWR0aDogMiwgY29sb3I6ICdibHVlJ319KTtcbiAgICpcbiAgICogLy8gVXNpbmcgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMgKHByb2R1Y2VkIGJ5IGAuZ2V0U2VsZWN0ZWRSYW5nZSgpYCBtZXRob2QpLlxuICAgKiAvLyAgU2VsZWN0aW5nIGEgY2VsbCByYW5nZS5cbiAgICogaG90LnNlbGVjdENlbGwoMCwgMCwgMiwgMik7XG4gICAqIC8vIFJldHVybmluZyBzZWxlY3RlZCBjZWxscycgcmFuZ2Ugd2l0aCB0aGUgZ2V0U2VsZWN0ZWRSYW5nZSBtZXRob2QuXG4gICAqIGN1c3RvbUJvcmRlcnNQbHVnaW4uc2V0Qm9yZGVycyhob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLCB7c3RhcnQ6IHtoaWRlOiBmYWxzZSwgd2lkdGg6IDIsIGNvbG9yOiAnYmx1ZSd9fSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5W118Q2VsbFJhbmdlW119IHNlbGVjdGlvblJhbmdlcyBBcnJheSBvZiBzZWxlY3Rpb24gcmFuZ2VzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9yZGVyT2JqZWN0IE9iamVjdCB3aXRoIGB0b3BgLCBgcmlnaHRgLCBgYm90dG9tYCBhbmQgYHN0YXJ0YCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc2V0Qm9yZGVycyhzZWxlY3Rpb25SYW5nZXMsIGJvcmRlck9iamVjdCkge1xuICAgIGxldCBib3JkZXJLZXlzID0gWyd0b3AnLCAnYm90dG9tJywgJ3N0YXJ0JywgJ2VuZCddO1xuICAgIGxldCBub3JtQm9yZGVyID0gbnVsbDtcbiAgICBpZiAoYm9yZGVyT2JqZWN0KSB7XG4gICAgICB0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYm9yZGVyT2JqZWN0XSk7XG4gICAgICBib3JkZXJLZXlzID0gT2JqZWN0LmtleXMoYm9yZGVyT2JqZWN0KTtcbiAgICAgIG5vcm1Cb3JkZXIgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUJvcmRlcikoYm9yZGVyT2JqZWN0KTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9ICgwLCBfc2VsZWN0aW9uLmRldGVjdFNlbGVjdGlvblR5cGUpKHNlbGVjdGlvblJhbmdlcyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU2NoZW1hTm9ybWFsaXplciA9ICgwLCBfc2VsZWN0aW9uLm5vcm1hbGl6ZVNlbGVjdGlvbkZhY3RvcnkpKHNlbGVjdGlvblR5cGUsIHtcbiAgICAgIGNyZWF0ZUNlbGxDb29yZHM6IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLFxuICAgICAgY3JlYXRlQ2VsbFJhbmdlOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpXG4gICAgfSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHNlbGVjdGlvblJhbmdlcywgc2VsZWN0aW9uID0+IHtcbiAgICAgIHNlbGVjdGlvblNjaGVtYU5vcm1hbGl6ZXIoc2VsZWN0aW9uKS5mb3JBbGwoKHJvdywgY29sKSA9PiB7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShib3JkZXJLZXlzLCBib3JkZXJLZXkgPT4ge1xuICAgICAgICAgIHRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChyb3csIGNvbCwgbm9ybUJvcmRlciwgKDAsIF91dGlscy50b0lubGluZVByb3BOYW1lKShib3JkZXJLZXkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qXG4gICAgVGhlIGxpbmUgYmVsb3cgdHJpZ2dlcnMgYSByZS1yZW5kZXIgb2YgSGFuZHNvbnRhYmxlLiBUaGlzIHdpbGwgYmUgYSBcImZhc3REcmF3XCJcbiAgICByZW5kZXIsIGJlY2F1c2UgdGhhdCBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlIFRhYmxlVmlldyBjbGFzcy5cbiAgICAgVGhlIHJlLXJlbmRlciBpcyBuZWVkZWQgZm9yIGJvcmRlcnMgb24gY2VsbHMgdGhhdCBkaWQgbm90IGhhdmUgYSBib3JkZXIgYmVmb3JlLlxuICAgIFRoZSB3YXkgdGhpcyBjYWxsIHdvcmtzIGlzIHRoYXQgaXQgY2FsbHMgVGFibGUucmVmcmVzaFNlbGVjdGlvbnMsIHdoaWNoIGNhbGxzXG4gICAgU2VsZWN0aW9uLmdldEJvcmRlciwgd2hpY2ggY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBCb3JkZXIuXG4gICAgIFNlZW1zIHdpc2UgdG8ga2VlcCB0aGlzIHNpbmdsZS1kaXJlY3Rpb24gZmxvdyBvZiBjcmVhdGluZyBuZXcgQm9yZGVyc1xuICAgICovXG4gICAgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VzdG9tIGJvcmRlcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGN1c3RvbUJvcmRlcnNQbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCdjdXN0b21Cb3JkZXJzJyk7XG4gICAqXG4gICAqIC8vIFVzaW5nIGFuIGFycmF5IG9mIGFycmF5cyAocHJvZHVjZWQgYnkgYC5nZXRTZWxlY3RlZCgpYCBtZXRob2QpLlxuICAgKiBjdXN0b21Cb3JkZXJzUGx1Z2luLmdldEJvcmRlcnMoW1sxLCAxLCAyLCAyXSwgWzYsIDIsIDAsIDJdXSk7XG4gICAqIC8vIFVzaW5nIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzIChwcm9kdWNlZCBieSBgLmdldFNlbGVjdGVkUmFuZ2UoKWAgbWV0aG9kKS5cbiAgICogY3VzdG9tQm9yZGVyc1BsdWdpbi5nZXRCb3JkZXJzKGhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpO1xuICAgKiAvLyBVc2luZyB3aXRob3V0IHBhcmFtIC0gcmV0dXJuIGFsbCBjdXN0b21Cb3JkZXJzLlxuICAgKiBjdXN0b21Cb3JkZXJzUGx1Z2luLmdldEJvcmRlcnMoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXlbXXxDZWxsUmFuZ2VbXX0gc2VsZWN0aW9uUmFuZ2VzIEFycmF5IG9mIHNlbGVjdGlvbiByYW5nZXMuXG4gICAqIEByZXR1cm5zIHtvYmplY3RbXX0gUmV0dXJucyBhcnJheSBvZiBib3JkZXIgb2JqZWN0cy5cbiAgICovXG4gIGdldEJvcmRlcnMoc2VsZWN0aW9uUmFuZ2VzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlbGVjdGlvblJhbmdlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLnNhdmVkQm9yZGVycztcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9ICgwLCBfc2VsZWN0aW9uLmRldGVjdFNlbGVjdGlvblR5cGUpKHNlbGVjdGlvblJhbmdlcyk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU2NoZW1hTm9ybWFsaXplciA9ICgwLCBfc2VsZWN0aW9uLm5vcm1hbGl6ZVNlbGVjdGlvbkZhY3RvcnkpKHNlbGVjdGlvblR5cGUsIHtcbiAgICAgIGNyZWF0ZUNlbGxDb29yZHM6IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLFxuICAgICAgY3JlYXRlQ2VsbFJhbmdlOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpXG4gICAgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRCb3JkZXJzID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHNlbGVjdGlvblJhbmdlcywgc2VsZWN0aW9uID0+IHtcbiAgICAgIHNlbGVjdGlvblNjaGVtYU5vcm1hbGl6ZXIoc2VsZWN0aW9uKS5mb3JBbGwoKHJvdywgY29sKSA9PiB7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnNhdmVkQm9yZGVycywgYm9yZGVyID0+IHtcbiAgICAgICAgICBpZiAoYm9yZGVyLnJvdyA9PT0gcm93ICYmIGJvcmRlci5jb2wgPT09IGNvbCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRCb3JkZXJzLnB1c2goKDAsIF91dGlscy5kZW5vcm1hbGl6ZUJvcmRlcikoYm9yZGVyKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBzZWxlY3RlZEJvcmRlcnM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgY3VzdG9tIGJvcmRlcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IGN1c3RvbUJvcmRlcnNQbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCdjdXN0b21Cb3JkZXJzJyk7XG4gICAqXG4gICAqIC8vIFVzaW5nIGFuIGFycmF5IG9mIGFycmF5cyAocHJvZHVjZWQgYnkgYC5nZXRTZWxlY3RlZCgpYCBtZXRob2QpLlxuICAgKiBjdXN0b21Cb3JkZXJzUGx1Z2luLmNsZWFyQm9yZGVycyhbWzEsIDEsIDIsIDJdLCBbNiwgMiwgMCwgMl1dKTtcbiAgICogLy8gVXNpbmcgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMgKHByb2R1Y2VkIGJ5IGAuZ2V0U2VsZWN0ZWRSYW5nZSgpYCBtZXRob2QpLlxuICAgKiBjdXN0b21Cb3JkZXJzUGx1Z2luLmNsZWFyQm9yZGVycyhob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpKTtcbiAgICogLy8gVXNpbmcgd2l0aG91dCBwYXJhbSAtIGNsZWFyIGFsbCBjdXN0b21Cb3JkZXJzLlxuICAgKiBjdXN0b21Cb3JkZXJzUGx1Z2luLmNsZWFyQm9yZGVycygpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheVtdfENlbGxSYW5nZVtdfSBzZWxlY3Rpb25SYW5nZXMgQXJyYXkgb2Ygc2VsZWN0aW9uIHJhbmdlcy5cbiAgICovXG4gIGNsZWFyQm9yZGVycyhzZWxlY3Rpb25SYW5nZXMpIHtcbiAgICBpZiAoc2VsZWN0aW9uUmFuZ2VzKSB7XG4gICAgICB0aGlzLnNldEJvcmRlcnMoc2VsZWN0aW9uUmFuZ2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuc2F2ZWRCb3JkZXJzLCBib3JkZXIgPT4ge1xuICAgICAgICB0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhib3JkZXIuaWQpO1xuICAgICAgICB0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpO1xuICAgICAgICB0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShib3JkZXIucm93LCBib3JkZXIuY29sLCAnYm9yZGVycycpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNlcnQgV2Fsa29udGFibGVTZWxlY3Rpb24gaW5zdGFuY2UgaW50byBXYWxrb250YWJsZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvcmRlciBPYmplY3Qgd2l0aCBgcm93YCBhbmQgYGNvbGAsIGBzdGFydGAsIGBlbmRgLCBgdG9wYCBhbmQgYGJvdHRvbWAsIGBpZGAgYW5kIGBib3JkZXJgICh7T2JqZWN0fSB3aXRoIGBjb2xvcmAsIGB3aWR0aGAgYW5kIGBjb3JuZXJWaXNpYmxlYCBwcm9wZXJ0eSkgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwbGFjZV0gQ29vcmRpbmF0ZSB3aGVyZSBhZGQvcmVtb3ZlIGJvcmRlciAtIGB0b3BgLCBgYm90dG9tYCwgYHN0YXJ0YCwgYGVuZGAuXG4gICAqL1xuICBpbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoYm9yZGVyLCBwbGFjZSkge1xuICAgIGNvbnN0IGhhc1NhdmVkQm9yZGVycyA9IHRoaXMuY2hlY2tTYXZlZEJvcmRlcnMoYm9yZGVyKTtcbiAgICBpZiAoIWhhc1NhdmVkQm9yZGVycykge1xuICAgICAgdGhpcy5zYXZlZEJvcmRlcnMucHVzaChib3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCB2aXN1YWxDZWxsUmFuZ2UgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGJvcmRlci5yb3csIGJvcmRlci5jb2wpKTtcbiAgICBjb25zdCBoYXNDdXN0b21TZWxlY3Rpb25zID0gdGhpcy5jaGVja0N1c3RvbVNlbGVjdGlvbnMoYm9yZGVyLCB2aXN1YWxDZWxsUmFuZ2UsIHBsYWNlKTtcbiAgICBpZiAoIWhhc0N1c3RvbVNlbGVjdGlvbnMpIHtcbiAgICAgIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtcbiAgICAgICAgYm9yZGVyLFxuICAgICAgICB2aXN1YWxDZWxsUmFuZ2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGJvcmRlcnMgZnJvbSBzZXR0aW5nIChzaW5nbGUgY2VsbCkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9yZGVyRGVzY3JpcHRvciBPYmplY3Qgd2l0aCBgcm93YCBhbmQgYGNvbGAsIGBzdGFydGAsIGBlbmRgLCBgdG9wYCBhbmQgYGJvdHRvbWAgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwbGFjZV0gQ29vcmRpbmF0ZSB3aGVyZSBhZGQvcmVtb3ZlIGJvcmRlciAtIGB0b3BgLCBgYm90dG9tYCwgYHN0YXJ0YCwgYGVuZGAuXG4gICAqL1xuICBwcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKHJvdywgY29sdW1uLCBib3JkZXJEZXNjcmlwdG9yLCBwbGFjZSkge1xuICAgIGNvbnN0IG5yT2ZSb3dzID0gdGhpcy5ob3QuY291bnRSb3dzKCk7XG4gICAgY29uc3QgbnJPZkNvbHVtbnMgPSB0aGlzLmhvdC5jb3VudENvbHMoKTtcbiAgICBpZiAocm93ID49IG5yT2ZSb3dzIHx8IGNvbHVtbiA+PSBuck9mQ29sdW1ucykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYm9yZGVyID0gKDAsIF91dGlscy5jcmVhdGVFbXB0eUJvcmRlcnMpKHJvdywgY29sdW1uKTtcbiAgICBpZiAoYm9yZGVyRGVzY3JpcHRvcikge1xuICAgICAgYm9yZGVyID0gKDAsIF91dGlscy5leHRlbmREZWZhdWx0Qm9yZGVyKShib3JkZXIsIGJvcmRlckRlc2NyaXB0b3IpO1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywgY3VzdG9tU2VsZWN0aW9uID0+IHtcbiAgICAgICAgaWYgKGJvcmRlci5pZCA9PT0gY3VzdG9tU2VsZWN0aW9uLnNldHRpbmdzLmlkKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihjdXN0b21TZWxlY3Rpb24uc2V0dGluZ3MsIGJvcmRlckRlc2NyaXB0b3IpO1xuICAgICAgICAgIGJvcmRlci5pZCA9IGN1c3RvbVNlbGVjdGlvbi5zZXR0aW5ncy5pZDtcbiAgICAgICAgICBib3JkZXIudG9wID0gY3VzdG9tU2VsZWN0aW9uLnNldHRpbmdzLnRvcDtcbiAgICAgICAgICBib3JkZXIuYm90dG9tID0gY3VzdG9tU2VsZWN0aW9uLnNldHRpbmdzLmJvdHRvbTtcbiAgICAgICAgICBib3JkZXIuc3RhcnQgPSBjdXN0b21TZWxlY3Rpb24uc2V0dGluZ3Muc3RhcnQ7XG4gICAgICAgICAgYm9yZGVyLmVuZCA9IGN1c3RvbVNlbGVjdGlvbi5zZXR0aW5ncy5lbmQ7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBicmVha3MgZm9yQWxsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmhvdC5zZXRDZWxsTWV0YShyb3csIGNvbHVtbiwgJ2JvcmRlcnMnLCAoMCwgX3V0aWxzLmRlbm9ybWFsaXplQm9yZGVyKShib3JkZXIpKTtcbiAgICB0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhib3JkZXIsIHBsYWNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlIGJvcmRlcnMgZnJvbSBzZXR0aW5nIChvYmplY3QpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gcmFuZ2Uge0NlbGxSYW5nZX0gVGhlIENlbGxSYW5nZSBvYmplY3QuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjdXN0b21Cb3JkZXIgT2JqZWN0IHdpdGggYHN0YXJ0YCwgYGVuZGAsIGB0b3BgIGFuZCBgYm90dG9tYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKHJhbmdlLCBjdXN0b21Cb3JkZXIpIHtcbiAgICBjb25zdCBsYXN0Um93SW5kZXggPSBNYXRoLm1pbihyYW5nZS50by5yb3csIHRoaXMuaG90LmNvdW50Um93cygpIC0gMSk7XG4gICAgY29uc3QgbGFzdENvbHVtbkluZGV4ID0gTWF0aC5taW4ocmFuZ2UudG8uY29sLCB0aGlzLmhvdC5jb3VudENvbHMoKSAtIDEpO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkocmFuZ2UuZnJvbS5yb3csIGxhc3RSb3dJbmRleCwgcm93SW5kZXggPT4ge1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShyYW5nZS5mcm9tLmNvbCwgbGFzdENvbHVtbkluZGV4LCBjb2xJbmRleCA9PiB7XG4gICAgICAgIGNvbnN0IGJvcmRlciA9ICgwLCBfdXRpbHMuY3JlYXRlRW1wdHlCb3JkZXJzKShyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICBsZXQgYWRkID0gMDtcbiAgICAgICAgaWYgKHJvd0luZGV4ID09PSByYW5nZS5mcm9tLnJvdykge1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VzdG9tQm9yZGVyLCAndG9wJykpIHtcbiAgICAgICAgICAgIGFkZCArPSAxO1xuICAgICAgICAgICAgYm9yZGVyLnRvcCA9IGN1c3RvbUJvcmRlci50b3A7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGByYW5nZS50by5yb3dgIG1heSBiZSBiZXlvbmQgdGhlIHRhYmxlIGJvdW5kYXJpZXMuIFRoZSBib3JkZXIgd29uJ3QgYmUgcmVuZGVyZWQuXG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gcmFuZ2UudG8ucm93KSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXN0b21Cb3JkZXIsICdib3R0b20nKSkge1xuICAgICAgICAgICAgYWRkICs9IDE7XG4gICAgICAgICAgICBib3JkZXIuYm90dG9tID0gY3VzdG9tQm9yZGVyLmJvdHRvbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbEluZGV4ID09PSByYW5nZS5mcm9tLmNvbCkge1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VzdG9tQm9yZGVyLCAnc3RhcnQnKSkge1xuICAgICAgICAgICAgYWRkICs9IDE7XG4gICAgICAgICAgICBib3JkZXIuc3RhcnQgPSBjdXN0b21Cb3JkZXIuc3RhcnQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGByYW5nZS50by5jb2xgIG1heSBiZSBiZXlvbmQgdGhlIHRhYmxlIGJvdW5kYXJpZXMuIFRoZSBib3JkZXIgd29uJ3QgYmUgcmVuZGVyZWQuXG4gICAgICAgIGlmIChjb2xJbmRleCA9PT0gcmFuZ2UudG8uY29sKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXN0b21Cb3JkZXIsICdlbmQnKSkge1xuICAgICAgICAgICAgYWRkICs9IDE7XG4gICAgICAgICAgICBib3JkZXIuZW5kID0gY3VzdG9tQm9yZGVyLmVuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZCA+IDApIHtcbiAgICAgICAgICB0aGlzLmhvdC5zZXRDZWxsTWV0YShyb3dJbmRleCwgY29sSW5kZXgsICdib3JkZXJzJywgKDAsIF91dGlscy5kZW5vcm1hbGl6ZUJvcmRlcikoYm9yZGVyKSk7XG4gICAgICAgICAgdGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoYm9yZGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUT0RPIHNvbWV0aW1lcyBpdCBlbnRlcnMgaGVyZS4gV2h5P1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYm9yZGVyICh0cmlnZ2VyZWQgZnJvbSBjb250ZXh0IG1lbnUpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIHJlbW92ZUFsbEJvcmRlcnMocm93LCBjb2x1bW4pIHtcbiAgICBjb25zdCBib3JkZXJJZCA9ICgwLCBfdXRpbHMuY3JlYXRlSWQpKHJvdywgY29sdW1uKTtcbiAgICB0aGlzLnNwbGljZUJvcmRlcihib3JkZXJJZCk7XG4gICAgdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoYm9yZGVySWQpO1xuICAgIHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCk7XG4gICAgdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEocm93LCBjb2x1bW4sICdib3JkZXJzJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGJvcmRlcnMgZm9yIGVhY2ggY2VsbCByZS4gVG8gYm9yZGVyIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYWNlIENvb3JkaW5hdGUgd2hlcmUgYWRkL3JlbW92ZSBib3JkZXIgLSBgdG9wYCwgYGJvdHRvbWAsIGBzdGFydGAsIGBlbmRgIGFuZCBgbm9Cb3JkZXJzYC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZW1vdmUgVHJ1ZSB3aGVuIHJlbW92ZSBib3JkZXJzLCBhbmQgZmFsc2Ugd2hlbiBhZGQgYm9yZGVycy5cbiAgICovXG4gIHNldEJvcmRlcihyb3csIGNvbHVtbiwgcGxhY2UsIHJlbW92ZSkge1xuICAgIGxldCBib3JkZXJzTWV0YSA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKS5ib3JkZXJzO1xuICAgIGlmICghYm9yZGVyc01ldGEgfHwgYm9yZGVyc01ldGEuYm9yZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJvcmRlcnNNZXRhID0gKDAsIF91dGlscy5jcmVhdGVFbXB0eUJvcmRlcnMpKHJvdywgY29sdW1uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9yZGVyc01ldGEgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUJvcmRlcikoYm9yZGVyc01ldGEpO1xuICAgIH1cbiAgICBpZiAocmVtb3ZlKSB7XG4gICAgICBib3JkZXJzTWV0YVtwbGFjZV0gPSAoMCwgX3V0aWxzLmNyZWF0ZVNpbmdsZUVtcHR5Qm9yZGVyKSgpO1xuICAgICAgY29uc3QgaGlkZUNvdW50ID0gdGhpcy5jb3VudEhpZGUoYm9yZGVyc01ldGEpO1xuICAgICAgaWYgKGhpZGVDb3VudCA9PT0gNCkge1xuICAgICAgICB0aGlzLnJlbW92ZUFsbEJvcmRlcnMocm93LCBjb2x1bW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY3VzdG9tU2VsZWN0aW9uc0NoZWNrZXIgPSB0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShib3JkZXJzTWV0YSwgcGxhY2UsIHJlbW92ZSk7XG4gICAgICAgIGlmICghY3VzdG9tU2VsZWN0aW9uc0NoZWNrZXIpIHtcbiAgICAgICAgICB0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhib3JkZXJzTWV0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3Quc2V0Q2VsbE1ldGEocm93LCBjb2x1bW4sICdib3JkZXJzJywgKDAsIF91dGlscy5kZW5vcm1hbGl6ZUJvcmRlcikoYm9yZGVyc01ldGEpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYm9yZGVyc01ldGFbcGxhY2VdID0gKDAsIF91dGlscy5jcmVhdGVEZWZhdWx0Q3VzdG9tQm9yZGVyKSgpO1xuICAgICAgY29uc3QgY3VzdG9tU2VsZWN0aW9uc0NoZWNrZXIgPSB0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShib3JkZXJzTWV0YSwgcGxhY2UsIHJlbW92ZSk7XG4gICAgICBpZiAoIWN1c3RvbVNlbGVjdGlvbnNDaGVja2VyKSB7XG4gICAgICAgIHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGJvcmRlcnNNZXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG90LnNldENlbGxNZXRhKHJvdywgY29sdW1uLCAnYm9yZGVycycsICgwLCBfdXRpbHMuZGVub3JtYWxpemVCb3JkZXIpKGJvcmRlcnNNZXRhKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmUgYm9yZGVycyBiYXNlZCBvbiBjZWxsIGFuZCBib3JkZXIgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlW119IHNlbGVjdGVkIEFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGxhY2UgQ29vcmRpbmF0ZSB3aGVyZSBhZGQvcmVtb3ZlIGJvcmRlciAtIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgLCBgcmlnaHRgIGFuZCBgbm9Cb3JkZXJzYC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZW1vdmUgVHJ1ZSB3aGVuIHJlbW92ZSBib3JkZXJzLCBhbmQgZmFsc2Ugd2hlbiBhZGQgYm9yZGVycy5cbiAgICovXG4gIHByZXBhcmVCb3JkZXIoc2VsZWN0ZWQsIHBsYWNlLCByZW1vdmUpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2VsZWN0ZWQsIF9yZWYgPT4ge1xuICAgICAgbGV0IHtcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZFxuICAgICAgfSA9IF9yZWY7XG4gICAgICBpZiAoc3RhcnQucm93ID09PSBlbmQucm93ICYmIHN0YXJ0LmNvbCA9PT0gZW5kLmNvbCkge1xuICAgICAgICBpZiAocGxhY2UgPT09ICdub0JvcmRlcnMnKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxCb3JkZXJzKHN0YXJ0LnJvdywgc3RhcnQuY29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldEJvcmRlcihzdGFydC5yb3csIHN0YXJ0LmNvbCwgcGxhY2UsIHJlbW92ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAocGxhY2UpIHtcbiAgICAgICAgICBjYXNlICdub0JvcmRlcnMnOlxuICAgICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydC5jb2wsIGVuZC5jb2wsIGNvbEluZGV4ID0+IHtcbiAgICAgICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydC5yb3csIGVuZC5yb3csIHJvd0luZGV4ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUFsbEJvcmRlcnMocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHN0YXJ0LmNvbCwgZW5kLmNvbCwgdG9wQ29sID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRCb3JkZXIoc3RhcnQucm93LCB0b3BDb2wsIHBsYWNlLCByZW1vdmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydC5jb2wsIGVuZC5jb2wsIGJvdHRvbUNvbCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Qm9yZGVyKGVuZC5yb3csIGJvdHRvbUNvbCwgcGxhY2UsIHJlbW92ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoc3RhcnQucm93LCBlbmQucm93LCByb3dTdGFydCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Qm9yZGVyKHJvd1N0YXJ0LCBzdGFydC5jb2wsIHBsYWNlLCByZW1vdmUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydC5yb3csIGVuZC5yb3csIHJvd0VuZCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Qm9yZGVyKHJvd0VuZCwgZW5kLmNvbCwgcGxhY2UsIHJlbW92ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBib3JkZXJzIGZyb20gc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGN1c3RvbUJvcmRlcnMgT2JqZWN0IHdpdGggYHJvd2AgYW5kIGBjb2xgLCBgc3RhcnRgLCBgZW5kYCwgYHRvcGAgYW5kIGBib3R0b21gIHByb3BlcnRpZXMuXG4gICAqL1xuICBjcmVhdGVDdXN0b21Cb3JkZXJzKGN1c3RvbUJvcmRlcnMpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY3VzdG9tQm9yZGVycywgY3VzdG9tQm9yZGVyID0+IHtcbiAgICAgIGNvbnN0IG5vcm1DdXN0b21Cb3JkZXIgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUJvcmRlcikoY3VzdG9tQm9yZGVyKTtcbiAgICAgIGlmIChjdXN0b21Cb3JkZXIucmFuZ2UpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkUmFuZ2UoY3VzdG9tQm9yZGVyLnJhbmdlLCBub3JtQ3VzdG9tQm9yZGVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChjdXN0b21Cb3JkZXIucm93LCBjdXN0b21Cb3JkZXIuY29sLCBub3JtQ3VzdG9tQm9yZGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBoaWRlIHByb3BlcnR5IGluIGJvcmRlciBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib3JkZXIgT2JqZWN0IHdpdGggYHJvd2AgYW5kIGBjb2xgLCBgc3RhcnRgLCBgZW5kYCwgYHRvcGAgYW5kIGBib3R0b21gLCBgaWRgIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGBib3JkZXJgICh7T2JqZWN0fSB3aXRoIGBjb2xvcmAsIGB3aWR0aGAgYW5kIGBjb3JuZXJWaXNpYmxlYCBwcm9wZXJ0eSkgcHJvcGVydGllcy5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvdW50SGlkZShib3JkZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b3AsXG4gICAgICBib3R0b20sXG4gICAgICBzdGFydCxcbiAgICAgIGVuZFxuICAgIH0gPSBib3JkZXI7XG4gICAgY29uc3QgdmFsdWVzID0gW3RvcCwgYm90dG9tLCBzdGFydCwgZW5kXTtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheVJlZHVjZSkodmFsdWVzLCAoYWNjdW11bGF0b3IsIHZhbHVlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID0gYWNjdW11bGF0b3I7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaGlkZSkge1xuICAgICAgICByZXN1bHQgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYm9yZGVycyBzZXR0aW5ncyBmcm9tIGN1c3RvbSBzZWxlY3Rpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYm9yZGVySWQgQm9yZGVyIGlkIG5hbWUgYXMgc3RyaW5nLlxuICAgKi9cbiAgY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGJvcmRlcklkKSB7XG4gICAgY29uc3QgaW5kZXggPSAoMCwgX2FycmF5LmFycmF5TWFwKSh0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsIGN1c3RvbVNlbGVjdGlvbiA9PiBjdXN0b21TZWxlY3Rpb24uc2V0dGluZ3MuaWQpLmluZGV4T2YoYm9yZGVySWQpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbaW5kZXhdLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGNlbGxSYW5nZSB3aXRoIG51bGwgdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhck51bGxDZWxsUmFuZ2UoKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywgKGN1c3RvbVNlbGVjdGlvbiwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChjdXN0b21TZWxlY3Rpb24uY2VsbFJhbmdlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1tpbmRleF0uZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBicmVha3MgZm9yQWxsXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBjdXN0b20gYm9yZGVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhpZGVCb3JkZXJzKCkge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnNhdmVkQm9yZGVycywgYm9yZGVyID0+IHtcbiAgICAgIHRoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGJvcmRlci5pZCk7XG4gICAgICB0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGljZSBib3JkZXIgZnJvbSBzYXZlZEJvcmRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBib3JkZXJJZCBCb3JkZXIgaWQgbmFtZSBhcyBzdHJpbmcuXG4gICAqL1xuICBzcGxpY2VCb3JkZXIoYm9yZGVySWQpIHtcbiAgICBjb25zdCBpbmRleCA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKHRoaXMuc2F2ZWRCb3JkZXJzLCBib3JkZXIgPT4gYm9yZGVyLmlkKS5pbmRleE9mKGJvcmRlcklkKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5zYXZlZEJvcmRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYm9yZGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBzYXZlZEJvcmRlcnMgYXJyYXksIGFuZCBpZiB0cnVlIHVwZGF0ZSBib3JkZXIgaW4gc2F2ZWRCb3JkZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gYm9yZGVyIE9iamVjdCB3aXRoIGByb3dgIGFuZCBgY29sYCwgYHN0YXJ0YCwgYGVuZGAsIGB0b3BgIGFuZCBgYm90dG9tYCwgYGlkYCBhbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBgYm9yZGVyYCAoe09iamVjdH0gd2l0aCBgY29sb3JgLCBgd2lkdGhgIGFuZCBgY29ybmVyVmlzaWJsZWAgcHJvcGVydHkpIHByb3BlcnRpZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2hlY2tTYXZlZEJvcmRlcnMoYm9yZGVyKSB7XG4gICAgbGV0IGNoZWNrID0gZmFsc2U7XG4gICAgY29uc3QgaGlkZUNvdW50ID0gdGhpcy5jb3VudEhpZGUoYm9yZGVyKTtcbiAgICBpZiAoaGlkZUNvdW50ID09PSA0KSB7XG4gICAgICB0aGlzLnNwbGljZUJvcmRlcihib3JkZXIuaWQpO1xuICAgICAgY2hlY2sgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5zYXZlZEJvcmRlcnMsIChzYXZlZEJvcmRlciwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGJvcmRlci5pZCA9PT0gc2F2ZWRCb3JkZXIuaWQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVkQm9yZGVyc1tpbmRleF0gPSBib3JkZXI7XG4gICAgICAgICAgY2hlY2sgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWtzIGZvckFsbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGJvcmRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgY3VzdG9tU2VsZWN0aW9ucywgYW5kIGlmIHRydWUgY2FsbCB0b2dnbGVIaWRkZW5DbGFzcyBtZXRob2QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBib3JkZXIgT2JqZWN0IHdpdGggYHJvd2AgYW5kIGBjb2xgLCBgc3RhcnRgLCBgZW5kYCwgYHRvcGAgYW5kIGBib3R0b21gLCBgaWRgIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGBib3JkZXJgICh7T2JqZWN0fSB3aXRoIGBjb2xvcmAsIGB3aWR0aGAgYW5kIGBjb3JuZXJWaXNpYmxlYCBwcm9wZXJ0eSkgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBsYWNlIENvb3JkaW5hdGUgd2hlcmUgYWRkL3JlbW92ZSBib3JkZXIgLSBgdG9wYCwgYGJvdHRvbWAsIGBzdGFydGAsIGBlbmRgIGFuZCBgbm9Cb3JkZXJzYC5cbiAgICogQHBhcmFtIHtib29sZWFufSByZW1vdmUgVHJ1ZSB3aGVuIHJlbW92ZSBib3JkZXJzLCBhbmQgZmFsc2Ugd2hlbiBhZGQgYm9yZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUoYm9yZGVyLCBwbGFjZSwgcmVtb3ZlKSB7XG4gICAgbGV0IGNoZWNrID0gZmFsc2U7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywgY3VzdG9tU2VsZWN0aW9uID0+IHtcbiAgICAgIGlmIChib3JkZXIuaWQgPT09IGN1c3RvbVNlbGVjdGlvbi5zZXR0aW5ncy5pZCkge1xuICAgICAgICBjb25zdCBib3JkZXJzID0gdGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoY3VzdG9tU2VsZWN0aW9uKTtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGJvcmRlcnMsIGJvcmRlck9iamVjdCA9PiB7XG4gICAgICAgICAgYm9yZGVyT2JqZWN0LnRvZ2dsZUhpZGRlbkNsYXNzKHBsYWNlLCByZW1vdmUpOyAvLyBUT0RPIHRoaXMgYWxzbyBiYWQ/XG4gICAgICAgIH0pO1xuICAgICAgICBjaGVjayA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWtzIGZvckFsbFxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGVjaztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBib3JkZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGN1c3RvbVNlbGVjdGlvbnMsIGFuZCBpZiB0cnVlIHJlc2V0IGNlbGxSYW5nZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGJvcmRlciBPYmplY3Qgd2l0aCBgcm93YCBhbmQgYGNvbGAsIGBzdGFydGAsIGBlbmRgLCBgdG9wYCBhbmQgYGJvdHRvbWAsIGBpZGAgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgYGJvcmRlcmAgKHtPYmplY3R9IHdpdGggYGNvbG9yYCwgYHdpZHRoYCBhbmQgYGNvcm5lclZpc2libGVgIHByb3BlcnR5KSBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gY2VsbFJhbmdlIFRoZSBzZWxlY3Rpb24gcmFuZ2UgdG8gY2hlY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGxhY2VdIENvb3JkaW5hdGUgd2hlcmUgYWRkL3JlbW92ZSBib3JkZXIgLSBgdG9wYCwgYGJvdHRvbWAsIGBzdGFydGAsIGBlbmRgLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhib3JkZXIsIGNlbGxSYW5nZSwgcGxhY2UpIHtcbiAgICBjb25zdCBoaWRlQ291bnQgPSB0aGlzLmNvdW50SGlkZShib3JkZXIpO1xuICAgIGxldCBjaGVjayA9IGZhbHNlO1xuICAgIGlmIChoaWRlQ291bnQgPT09IDQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQWxsQm9yZGVycyhib3JkZXIucm93LCBib3JkZXIuY29sKTtcbiAgICAgIGNoZWNrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywgY3VzdG9tU2VsZWN0aW9uID0+IHtcbiAgICAgICAgaWYgKGJvcmRlci5pZCA9PT0gY3VzdG9tU2VsZWN0aW9uLnNldHRpbmdzLmlkKSB7XG4gICAgICAgICAgY3VzdG9tU2VsZWN0aW9uLnZpc3VhbENlbGxSYW5nZSA9IGNlbGxSYW5nZTtcbiAgICAgICAgICBjdXN0b21TZWxlY3Rpb24uY29tbWl0KCk7XG4gICAgICAgICAgaWYgKHBsYWNlKSB7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJzID0gdGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXMoY3VzdG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShib3JkZXJzLCBib3JkZXJPYmplY3QgPT4ge1xuICAgICAgICAgICAgICBib3JkZXJPYmplY3QuY2hhbmdlQm9yZGVyU3R5bGUocGxhY2UsIGJvcmRlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hlY2sgPSB0cnVlO1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWtzIGZvckFsbFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGNoZWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBib3JkZXJzIGZyb20gc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjaGFuZ2VCb3JkZXJTZXR0aW5ncygpIHtcbiAgICBjb25zdCBjdXN0b21Cb3JkZXJzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjdXN0b21Cb3JkZXJzKSkge1xuICAgICAgY29uc3QgYm9yZGVyc0Nsb25lID0gKDAsIF9vYmplY3QuZGVlcENsb25lKShjdXN0b21Cb3JkZXJzKTtcbiAgICAgIHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKGJvcmRlcnNDbG9uZSk7XG4gICAgICBpZiAoIWJvcmRlcnNDbG9uZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zYXZlZEJvcmRlcnMgPSBib3JkZXJzQ2xvbmU7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYm9yZGVyc0Nsb25lKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbUJvcmRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKHRoaXMuc2F2ZWRCb3JkZXJzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIHRoZSBzZXR0aW5ncyBjb2hlc2lvbi4gVGhlIHByb3BlcnRpZXMgc3VjaCBsaWtlIFwibGVmdFwiL1wicmlnaHRcIiBhcmUgc3VwcG9ydGVkIG9ubHlcbiAgICogaW4gdGhlIExUUiBtb2RlIGFuZCB0aGUgXCJsZWZ0XCIvXCJyaWdodFwiIG9wdGlvbnMgY2FuIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggXCJzdGFydFwiL1wiZW5kXCIgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3RbXX0gY3VzdG9tQm9yZGVycyBUaGUgdXNlciBkZWZpbmVkIGN1c3RvbSBib3JkZXIgb2JqZWN0cyBhcnJheS5cbiAgICovXG4gIGNoZWNrU2V0dGluZ3NDb2hlc2lvbihjdXN0b21Cb3JkZXJzKSB7XG4gICAgY29uc3QgaGFzTGVmdE9yUmlnaHQgPSAoMCwgX3V0aWxzLmhhc0xlZnRSaWdodFR5cGVPcHRpb25zKShjdXN0b21Cb3JkZXJzKTtcbiAgICBjb25zdCBoYXNTdGFydE9yRW5kID0gKDAsIF91dGlscy5oYXNTdGFydEVuZFR5cGVPcHRpb25zKShjdXN0b21Cb3JkZXJzKTtcbiAgICBpZiAoaGFzTGVmdE9yUmlnaHQgJiYgaGFzU3RhcnRPckVuZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJsZWZ0XCIvXCJyaWdodFwiIGFuZCBcInN0YXJ0XCIvXCJlbmRcIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gJyArICdQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBcInN0YXJ0XCIvXCJlbmRcIi4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG90LmlzUnRsKCkgJiYgaGFzTGVmdE9yUmlnaHQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFwibGVmdFwiL1wicmlnaHRcIiBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uIFwic3RhcnRcIi9cImVuZFwiLicpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkN1c3RvbUJvcmRlcnMgPSBDdXN0b21Cb3JkZXJzO1xuZnVuY3Rpb24gX29uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zKSB7XG4gIGlmICghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXSkge1xuICAgIHJldHVybjtcbiAgfVxuICBkZWZhdWx0T3B0aW9ucy5pdGVtcy5wdXNoKHtcbiAgICBuYW1lOiAnLS0tLS0tLS0tJ1xuICB9LCB7XG4gICAga2V5OiAnYm9yZGVycycsXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19CT1JERVJTKTtcbiAgICB9LFxuICAgIGRpc2FibGVkKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk7XG4gICAgfSxcbiAgICBzdWJtZW51OiB7XG4gICAgICBpdGVtczogWygwLCBfY29udGV4dE1lbnVJdGVtLnRvcCkodGhpcyksICgwLCBfY29udGV4dE1lbnVJdGVtLnJpZ2h0KSh0aGlzKSwgKDAsIF9jb250ZXh0TWVudUl0ZW0uYm90dG9tKSh0aGlzKSwgKDAsIF9jb250ZXh0TWVudUl0ZW0ubGVmdCkodGhpcyksICgwLCBfY29udGV4dE1lbnVJdGVtLm5vQm9yZGVycykodGhpcyldXG4gICAgfVxuICB9KTtcbn1cbi8qKlxuICogYGFmdGVySW5pdGAgaG9vayBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJJbml0KCkge1xuICB0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2N1c3RvbUJvcmRlcnMgPSByZXF1aXJlKFwiLi9jdXN0b21Cb3JkZXJzXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2N1c3RvbUJvcmRlcnMuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2N1c3RvbUJvcmRlcnMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5DdXN0b21Cb3JkZXJzID0gX2N1c3RvbUJvcmRlcnMuQ3VzdG9tQm9yZGVyczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY2hlY2tTZWxlY3Rpb25Cb3JkZXJzID0gY2hlY2tTZWxlY3Rpb25Cb3JkZXJzO1xuZXhwb3J0cy5jcmVhdGVEZWZhdWx0Q3VzdG9tQm9yZGVyID0gY3JlYXRlRGVmYXVsdEN1c3RvbUJvcmRlcjtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEh0Qm9yZGVyID0gY3JlYXRlRGVmYXVsdEh0Qm9yZGVyO1xuZXhwb3J0cy5jcmVhdGVFbXB0eUJvcmRlcnMgPSBjcmVhdGVFbXB0eUJvcmRlcnM7XG5leHBvcnRzLmNyZWF0ZUlkID0gY3JlYXRlSWQ7XG5leHBvcnRzLmNyZWF0ZVNpbmdsZUVtcHR5Qm9yZGVyID0gY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXI7XG5leHBvcnRzLmRlbm9ybWFsaXplQm9yZGVyID0gZGVub3JtYWxpemVCb3JkZXI7XG5leHBvcnRzLmV4dGVuZERlZmF1bHRCb3JkZXIgPSBleHRlbmREZWZhdWx0Qm9yZGVyO1xuZXhwb3J0cy5oYXNMZWZ0UmlnaHRUeXBlT3B0aW9ucyA9IGhhc0xlZnRSaWdodFR5cGVPcHRpb25zO1xuZXhwb3J0cy5oYXNTdGFydEVuZFR5cGVPcHRpb25zID0gaGFzU3RhcnRFbmRUeXBlT3B0aW9ucztcbmV4cG9ydHMubWFya1NlbGVjdGVkID0gbWFya1NlbGVjdGVkO1xuZXhwb3J0cy5ub3JtYWxpemVCb3JkZXIgPSBub3JtYWxpemVCb3JkZXI7XG5leHBvcnRzLnRvSW5saW5lUHJvcE5hbWUgPSB0b0lubGluZVByb3BOYW1lO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIENyZWF0ZSBzZXBhcmF0ZWQgaWQgZm9yIGJvcmRlcnMgZm9yIGVhY2ggY2VsbC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjcmVhdGVJZChyb3csIGNvbCkge1xuICByZXR1cm4gYGJvcmRlcl9yb3cke3Jvd31jb2wke2NvbH1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSBkZWZhdWx0IHNpbmdsZSBib3JkZXIgZm9yIGVhY2ggcG9zaXRpb24gKHRvcC9yaWdodC9ib3R0b20vbGVmdCkuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gYHt7d2lkdGg6IG51bWJlciwgY29sb3I6IHN0cmluZ319YC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEN1c3RvbUJvcmRlcigpIHtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogMSxcbiAgICBjb2xvcjogJyMwMDAnXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlIGRlZmF1bHQgb2JqZWN0IGZvciBlbXB0eSBib3JkZXIuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gYHt7aGlkZTogYm9vbGVhbn19YC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXIoKSB7XG4gIHJldHVybiB7XG4gICAgaGlkZTogdHJ1ZVxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZSBkZWZhdWx0IEhhbmRzb250YWJsZSBib3JkZXIgb2JqZWN0LlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IGB7e3dpZHRoOiBudW1iZXIsIGNvbG9yOiBzdHJpbmcsIGNvcm5lclZpc2libGU6IGJvb2xlYW59fWAuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRIdEJvcmRlcigpIHtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogMSxcbiAgICBjb2xvcjogJyMwMDAnLFxuICAgIGNvcm5lclZpc2libGU6IGZhbHNlXG4gIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyB0aGUgYm9yZGVyIG9iamVjdCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIEJvcmRlciBBUEkgZnJvbSB0aGUgV2Fsa29udGFibGUuXG4gKiBUaGUgZnVuY3Rpb24gdHJhbnNsYXRlcyB0aGUgXCJsZWZ0XCIvXCJyaWdodFwiIHByb3BlcnRpZXMgdG8gXCJzdGFydFwiL1wiZW5kXCIgcHJvcCBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gYm9yZGVyIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBvZiB0aGUgYm9yZGVyLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQm9yZGVyKGJvcmRlcikge1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGJvcmRlci5zdGFydCkgfHwgKDAsIF9taXhlZC5pc0RlZmluZWQpKGJvcmRlci5sZWZ0KSkge1xuICAgIHZhciBfYm9yZGVyJHN0YXJ0O1xuICAgIGJvcmRlci5zdGFydCA9IChfYm9yZGVyJHN0YXJ0ID0gYm9yZGVyLnN0YXJ0KSAhPT0gbnVsbCAmJiBfYm9yZGVyJHN0YXJ0ICE9PSB2b2lkIDAgPyBfYm9yZGVyJHN0YXJ0IDogYm9yZGVyLmxlZnQ7XG4gIH1cbiAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShib3JkZXIuZW5kKSB8fCAoMCwgX21peGVkLmlzRGVmaW5lZCkoYm9yZGVyLnJpZ2h0KSkge1xuICAgIHZhciBfYm9yZGVyJGVuZDtcbiAgICBib3JkZXIuZW5kID0gKF9ib3JkZXIkZW5kID0gYm9yZGVyLmVuZCkgIT09IG51bGwgJiYgX2JvcmRlciRlbmQgIT09IHZvaWQgMCA/IF9ib3JkZXIkZW5kIDogYm9yZGVyLnJpZ2h0O1xuICB9XG4gIGRlbGV0ZSBib3JkZXIubGVmdDtcbiAgZGVsZXRlIGJvcmRlci5yaWdodDtcbiAgcmV0dXJuIGJvcmRlcjtcbn1cblxuLyoqXG4gKiBEZW5vcm1hbGl6ZXMgdGhlIGJvcmRlciBvYmplY3QgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSB3aXRoIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBDdXN0b21Cb3JkZXJzXG4gKiBwbHVnaW4gQVBJLiBUaGUgZnVuY3Rpb24gZXh0ZW5kcyB0aGUgYm9yZGVyIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgYmFja3dhcmQgY29tcGF0aWJsZSBcImxlZnRcIi9cInJpZ2h0XCJcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGJvcmRlciBUaGUgY29uZmlndXJhdGlvbiBvYmplY3Qgb2YgdGhlIGJvcmRlci5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGRlbm9ybWFsaXplQm9yZGVyKGJvcmRlcikge1xuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGJvcmRlci5zdGFydCkpIHtcbiAgICBib3JkZXIubGVmdCA9IGJvcmRlci5zdGFydDtcbiAgfVxuICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKGJvcmRlci5lbmQpKSB7XG4gICAgYm9yZGVyLnJpZ2h0ID0gYm9yZGVyLmVuZDtcbiAgfVxuICByZXR1cm4gYm9yZGVyO1xufVxuXG4vKipcbiAqIFByZXBhcmUgZW1wdHkgYm9yZGVyIGZvciBlYWNoIGNlbGwgd2l0aCBhbGwgY3VzdG9tIGJvcmRlcnMgaGlkZGVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEByZXR1cm5zIHt7aWQ6IHN0cmluZywgYm9yZGVyOiBhbnksIHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgdG9wOiB7aGlkZTogYm9vbGVhbn0sIGJvdHRvbToge2hpZGU6IGJvb2xlYW59LCBzdGFydDoge2hpZGU6IGJvb2xlYW59LCBlbmQ6IHtoaWRlOiBib29sZWFufX19IFJldHVybnMgYm9yZGVyIGNvbmZpZ3VyYXRpb24gY29udGFpbmluZyB2aXN1YWwgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRW1wdHlCb3JkZXJzKHJvdywgY29sKSB7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNyZWF0ZUlkKHJvdywgY29sKSxcbiAgICBib3JkZXI6IGNyZWF0ZURlZmF1bHRIdEJvcmRlcigpLFxuICAgIHJvdyxcbiAgICBjb2wsXG4gICAgdG9wOiBjcmVhdGVTaW5nbGVFbXB0eUJvcmRlcigpLFxuICAgIGJvdHRvbTogY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXIoKSxcbiAgICBzdGFydDogY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXIoKSxcbiAgICBlbmQ6IGNyZWF0ZVNpbmdsZUVtcHR5Qm9yZGVyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdEJvcmRlciBUaGUgZGVmYXVsdCBib3JkZXIgb2JqZWN0LlxuICogQHBhcmFtIHtvYmplY3R9IGN1c3RvbUJvcmRlciBUaGUgYm9yZGVyIG9iamVjdCB3aXRoIGN1c3RvbSBzZXR0aW5ncy5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGV4dGVuZERlZmF1bHRCb3JkZXIoZGVmYXVsdEJvcmRlciwgY3VzdG9tQm9yZGVyKSB7XG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VzdG9tQm9yZGVyLCAnYm9yZGVyJykgJiYgY3VzdG9tQm9yZGVyLmJvcmRlcikge1xuICAgIGRlZmF1bHRCb3JkZXIuYm9yZGVyID0gY3VzdG9tQm9yZGVyLmJvcmRlcjtcbiAgfVxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGN1c3RvbUJvcmRlciwgJ3RvcCcpICYmICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShjdXN0b21Cb3JkZXIudG9wKSkge1xuICAgIGlmIChjdXN0b21Cb3JkZXIudG9wKSB7XG4gICAgICBpZiAoISgwLCBfb2JqZWN0LmlzT2JqZWN0KShjdXN0b21Cb3JkZXIudG9wKSkge1xuICAgICAgICBjdXN0b21Cb3JkZXIudG9wID0gY3JlYXRlRGVmYXVsdEN1c3RvbUJvcmRlcigpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdEJvcmRlci50b3AgPSBjdXN0b21Cb3JkZXIudG9wO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXN0b21Cb3JkZXIudG9wID0gY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXIoKTtcbiAgICAgIGRlZmF1bHRCb3JkZXIudG9wID0gY3VzdG9tQm9yZGVyLnRvcDtcbiAgICB9XG4gIH1cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXN0b21Cb3JkZXIsICdib3R0b20nKSAmJiAoMCwgX21peGVkLmlzRGVmaW5lZCkoY3VzdG9tQm9yZGVyLmJvdHRvbSkpIHtcbiAgICBpZiAoY3VzdG9tQm9yZGVyLmJvdHRvbSkge1xuICAgICAgaWYgKCEoMCwgX29iamVjdC5pc09iamVjdCkoY3VzdG9tQm9yZGVyLmJvdHRvbSkpIHtcbiAgICAgICAgY3VzdG9tQm9yZGVyLmJvdHRvbSA9IGNyZWF0ZURlZmF1bHRDdXN0b21Cb3JkZXIoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHRCb3JkZXIuYm90dG9tID0gY3VzdG9tQm9yZGVyLmJvdHRvbTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VzdG9tQm9yZGVyLmJvdHRvbSA9IGNyZWF0ZVNpbmdsZUVtcHR5Qm9yZGVyKCk7XG4gICAgICBkZWZhdWx0Qm9yZGVyLmJvdHRvbSA9IGN1c3RvbUJvcmRlci5ib3R0b207XG4gICAgfVxuICB9XG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VzdG9tQm9yZGVyLCAnc3RhcnQnKSAmJiAoMCwgX21peGVkLmlzRGVmaW5lZCkoY3VzdG9tQm9yZGVyLnN0YXJ0KSkge1xuICAgIGlmIChjdXN0b21Cb3JkZXIuc3RhcnQpIHtcbiAgICAgIGlmICghKDAsIF9vYmplY3QuaXNPYmplY3QpKGN1c3RvbUJvcmRlci5zdGFydCkpIHtcbiAgICAgICAgY3VzdG9tQm9yZGVyLnN0YXJ0ID0gY3JlYXRlRGVmYXVsdEN1c3RvbUJvcmRlcigpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdEJvcmRlci5zdGFydCA9IGN1c3RvbUJvcmRlci5zdGFydDtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VzdG9tQm9yZGVyLnN0YXJ0ID0gY3JlYXRlU2luZ2xlRW1wdHlCb3JkZXIoKTtcbiAgICAgIGRlZmF1bHRCb3JkZXIuc3RhcnQgPSBjdXN0b21Cb3JkZXIuc3RhcnQ7XG4gICAgfVxuICB9XG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VzdG9tQm9yZGVyLCAnZW5kJykgJiYgKDAsIF9taXhlZC5pc0RlZmluZWQpKGN1c3RvbUJvcmRlci5lbmQpKSB7XG4gICAgaWYgKGN1c3RvbUJvcmRlci5lbmQpIHtcbiAgICAgIGlmICghKDAsIF9vYmplY3QuaXNPYmplY3QpKGN1c3RvbUJvcmRlci5lbmQpKSB7XG4gICAgICAgIGN1c3RvbUJvcmRlci5lbmQgPSBjcmVhdGVEZWZhdWx0Q3VzdG9tQm9yZGVyKCk7XG4gICAgICB9XG4gICAgICBkZWZhdWx0Qm9yZGVyLmVuZCA9IGN1c3RvbUJvcmRlci5lbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1c3RvbUJvcmRlci5lbmQgPSBjcmVhdGVTaW5nbGVFbXB0eUJvcmRlcigpO1xuICAgICAgZGVmYXVsdEJvcmRlci5lbmQgPSBjdXN0b21Cb3JkZXIuZW5kO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmYXVsdEJvcmRlcjtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBzZWxlY3Rpb24gaGFzIGJvcmRlci5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdCBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtkaXJlY3Rpb25dIElmIHNldCAoJ2xlZnQnIG9yICd0b3AnKSB0aGVuIG9ubHkgdGhlIHNwZWNpZmllZCBib3JkZXIgc2lkZSB3aWxsIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY2hlY2tTZWxlY3Rpb25Cb3JkZXJzKGhvdCwgZGlyZWN0aW9uKSB7XG4gIGxldCBhdExlYXN0T25lSGFzQm9yZGVyID0gZmFsc2U7XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLCByYW5nZSA9PiB7XG4gICAgcmFuZ2UuZm9yQWxsKChyLCBjKSA9PiB7XG4gICAgICBpZiAociA8IDAgfHwgYyA8IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YUJvcmRlcnMgPSBob3QuZ2V0Q2VsbE1ldGEociwgYykuYm9yZGVycztcbiAgICAgIGlmIChtZXRhQm9yZGVycykge1xuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgaWYgKCEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWV0YUJvcmRlcnNbZGlyZWN0aW9uXSwgJ2hpZGUnKSB8fCBtZXRhQm9yZGVyc1tkaXJlY3Rpb25dLmhpZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBhdExlYXN0T25lSGFzQm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYnJlYWtzIGZvckFsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhdExlYXN0T25lSGFzQm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGJyZWFrcyBmb3JBbGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGF0TGVhc3RPbmVIYXNCb3JkZXI7XG59XG5cbi8qKlxuICogTWFyayBsYWJlbCBpbiBjb250ZXh0TWVudSBhcyBzZWxlY3RlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgVGhlIGxhYmVsIHRleHQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBtYXJrU2VsZWN0ZWQobGFiZWwpIHtcbiAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cInNlbGVjdGVkXCI+JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwMDAzKX08L3NwYW4+JHtsYWJlbH1gOyAvLyB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9pc3N1ZXMvMTk0NlxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBpbiB0aGUgYm9yZGVycyBjb25maWcgdGhlcmUgYXJlIGRlZmluZWQgXCJsZWZ0XCIgb3IgXCJyaWdodFwiIGJvcmRlciBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0W119IGJvcmRlcnMgVGhlIGN1c3RvbSBib3JkZXIgcGx1Z2luJ3Mgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNMZWZ0UmlnaHRUeXBlT3B0aW9ucyhib3JkZXJzKSB7XG4gIHJldHVybiBib3JkZXJzLnNvbWUoYm9yZGVyID0+ICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShib3JkZXIubGVmdCkgfHwgKDAsIF9taXhlZC5pc0RlZmluZWQpKGJvcmRlci5yaWdodCkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBpbiB0aGUgYm9yZGVycyBjb25maWcgdGhlcmUgYXJlIGRlZmluZWQgXCJzdGFydFwiIG9yIFwiZW5kXCIgYm9yZGVyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3RbXX0gYm9yZGVycyBUaGUgY3VzdG9tIGJvcmRlciBwbHVnaW4ncyBvcHRpb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc1N0YXJ0RW5kVHlwZU9wdGlvbnMoYm9yZGVycykge1xuICByZXR1cm4gYm9yZGVycy5zb21lKGJvcmRlciA9PiAoMCwgX21peGVkLmlzRGVmaW5lZCkoYm9yZGVyLnN0YXJ0KSB8fCAoMCwgX21peGVkLmlzRGVmaW5lZCkoYm9yZGVyLmVuZCkpO1xufVxuY29uc3QgcGh5c2ljYWxUb0lubGluZVByb3BOYW1lcyA9IG5ldyBNYXAoW1snbGVmdCcsICdzdGFydCddLCBbJ3JpZ2h0JywgJ2VuZCddXSk7XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgcGh5c2ljYWwgaG9yaXpvbnRhbCBkaXJlY3Rpb24gdG8gbG9naWNhbCBvbmVzLiBJZiBub3Qga25vd24gcHJvcGVydHkgbmFtZSBpc1xuICogcGFzc2VkIGl0IHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91dCBtb2RpZmljYXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BOYW1lIFRoZSBwaHlzaWNhbCBkaXJlY3Rpb24gcHJvcGVydHkgbmFtZSAoXCJsZWZ0XCIgb3IgXCJyaWdodFwiKS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvSW5saW5lUHJvcE5hbWUocHJvcE5hbWUpIHtcbiAgdmFyIF9waHlzaWNhbFRvSW5saW5lUHJvcDtcbiAgcmV0dXJuIChfcGh5c2ljYWxUb0lubGluZVByb3AgPSBwaHlzaWNhbFRvSW5saW5lUHJvcE5hbWVzLmdldChwcm9wTmFtZSkpICE9PSBudWxsICYmIF9waHlzaWNhbFRvSW5saW5lUHJvcCAhPT0gdm9pZCAwID8gX3BoeXNpY2FsVG9JbmxpbmVQcm9wIDogcHJvcE5hbWU7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnZHJhZ1RvU2Nyb2xsJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMTAwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBQbHVnaW4gdXNlZCB0byBzY3JvbGwgSGFuZHNvbnRhYmxlIGJ5IHNlbGVjdGluZyBhIGNlbGwgYW5kIGRyYWdnaW5nIG91dHNpZGUgb2YgdGhlIHZpc2libGUgdmlld3BvcnQuXG4gKlxuICpcbiAqIEBjbGFzcyBEcmFnVG9TY3JvbGxcbiAqIEBwbHVnaW4gRHJhZ1RvU2Nyb2xsXG4gKi9cbnZhciBfRHJhZ1RvU2Nyb2xsX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBEcmFnVG9TY3JvbGwgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBPbiBhZnRlciBvbiBjZWxsL2NlbGxDb3JuZXIgbW91c2UgZG93biBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0RyYWdUb1Njcm9sbF9icmFuZCk7XG4gICAgLyoqXG4gICAgICogU2l6ZSBvZiBhbiBlbGVtZW50IGFuZCBpdHMgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0LFxuICAgICAqIGUuZy4ge2JvdHRvbTogNDQ5LCBoZWlnaHQ6IDQ0MSwgbGVmdDogOCwgcmlnaHQ6IDgxNCwgdG9wOiA4LCB3aWR0aDogODA2LCB4OiA4LCB5Ojh9LlxuICAgICAqXG4gICAgICogQHR5cGUge0RPTVJlY3R9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYm91bmRhcmllc1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhbGxiYWNrXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEZsYWcgaW5kaWNhdGVzIG1vdXNlRG93bi9tb3VzZVVwLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJsaXN0ZW5pbmdcIiwgZmFsc2UpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgRHJhZ1RvU2Nyb2xsI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyT25DZWxsTW91c2VEb3duJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0RyYWdUb1Njcm9sbF9icmFuZCwgdGhpcywgX3NldHVwTGlzdGVuaW5nKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9EcmFnVG9TY3JvbGxfYnJhbmQsIHRoaXMsIF9zZXR1cExpc3RlbmluZykuY2FsbCh0aGlzLCBldmVudCkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBpcyBpbnZva2VkIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICAgKiAgLSBbYGRyYWdUb1Njcm9sbGBdKEAvYXBpL29wdGlvbnMubWQjZHJhZ3Rvc2Nyb2xsKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSB2aXNpYmxlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NUmVjdHx7bGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCB0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXJ9fSBbYm91bmRhcmllc10gQW4gb2JqZWN0IHdpdGhcbiAgICogY29vcmRpbmF0ZXMuIENvbnRhaW5zIHRoZSB3aW5kb3cgYm91bmRhcmllcyBieSBkZWZhdWx0LiBUaGUgb2JqZWN0IGlzIGNvbXBhdGlibGUgd2l0aCBET01SZWN0LlxuICAgKi9cbiAgc2V0Qm91bmRhcmllcygpIHtcbiAgICBsZXQgYm91bmRhcmllcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge1xuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiB0aGlzLmhvdC5yb290V2luZG93LmlubmVyV2lkdGgsXG4gICAgICB0b3A6IDAsXG4gICAgICBib3R0b206IHRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHRcbiAgICB9O1xuICAgIHRoaXMuYm91bmRhcmllcyA9IGJvdW5kYXJpZXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgc2V0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBtb3VzZSBwb3NpdGlvbiAoWCwgWSkgaXMgb3V0c2lkZSB0aGUgdmlld3BvcnQgYW5kIGZpcmVzIGEgY2FsbGJhY2sgd2l0aCBjYWxjdWxhdGVkIFggYW4gWSBkaWZmc1xuICAgKiBiZXR3ZWVuIHBhc3NlZCBib3VuZGFyaWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0geCBNb3VzZSBYIGNvb3JkaW5hdGUgdG8gY2hlY2suXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5IE1vdXNlIFkgY29vcmRpbmF0ZSB0byBjaGVjay5cbiAgICovXG4gIGNoZWNrKHgsIHkpIHtcbiAgICBsZXQgZGlmZlggPSAwO1xuICAgIGxldCBkaWZmWSA9IDA7XG4gICAgaWYgKHkgPCB0aGlzLmJvdW5kYXJpZXMudG9wKSB7XG4gICAgICAvLyB5IGlzIGxlc3MgdGhhbiB0b3BcbiAgICAgIGRpZmZZID0geSAtIHRoaXMuYm91bmRhcmllcy50b3A7XG4gICAgfSBlbHNlIGlmICh5ID4gdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSkge1xuICAgICAgLy8geSBpcyBtb3JlIHRoYW4gYm90dG9tXG4gICAgICBkaWZmWSA9IHkgLSB0aGlzLmJvdW5kYXJpZXMuYm90dG9tO1xuICAgIH1cbiAgICBpZiAoeCA8IHRoaXMuYm91bmRhcmllcy5sZWZ0KSB7XG4gICAgICAvLyB4IGlzIGxlc3MgdGhhbiBsZWZ0XG4gICAgICBkaWZmWCA9IHggLSB0aGlzLmJvdW5kYXJpZXMubGVmdDtcbiAgICB9IGVsc2UgaWYgKHggPiB0aGlzLmJvdW5kYXJpZXMucmlnaHQpIHtcbiAgICAgIC8vIHggaXMgbW9yZSB0aGFuIHJpZ2h0XG4gICAgICBkaWZmWCA9IHggLSB0aGlzLmJvdW5kYXJpZXMucmlnaHQ7XG4gICAgfVxuICAgIHRoaXMuY2FsbGJhY2soZGlmZlgsIGRpZmZZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGxpc3RlbmluZyBvbiBgbW91c2Vtb3ZlYCBldmVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxpc3RlbigpIHtcbiAgICB0aGlzLmxpc3RlbmluZyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgbGlzdGVuaW5nIG9uIGBtb3VzZW1vdmVgIGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdW5saXN0ZW4oKSB7XG4gICAgdGhpcy5saXN0ZW5pbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgb2YgbGlzdGVuaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTGlzdGVuaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgZG9tIGxpc3RlbmVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyRXZlbnRzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgbGV0IGZyYW1lID0gcm9vdFdpbmRvdztcbiAgICB3aGlsZSAoZnJhbWUpIHtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZnJhbWUuZG9jdW1lbnQsICdjb250ZXh0bWVudScsICgpID0+IHRoaXMudW5saXN0ZW4oKSk7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGZyYW1lLmRvY3VtZW50LCAnbW91c2V1cCcsICgpID0+IHRoaXMudW5saXN0ZW4oKSk7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGZyYW1lLmRvY3VtZW50LCAnbW91c2Vtb3ZlJywgZXZlbnQgPT4gdGhpcy5vbk1vdXNlTW92ZShldmVudCkpO1xuICAgICAgZnJhbWUgPSAoMCwgX2VsZW1lbnQuZ2V0UGFyZW50V2luZG93KShmcmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuYmluZHMgdGhlIGV2ZW50cyB1c2VkIGJ5IHRoZSBwbHVnaW4uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyRXZlbnRzKCkge1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCk7XG4gIH1cbiAgLyoqXG4gICAqICdtb3VzZU1vdmUnIGV2ZW50IGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IGBtb3VzZW1vdmVgIGV2ZW50IHByb3BlcnRpZXMuXG4gICAqL1xuICBvbk1vdXNlTW92ZShldmVudCkge1xuICAgIGlmICghdGhpcy5pc0xpc3RlbmluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hlY2soZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkRyYWdUb1Njcm9sbCA9IERyYWdUb1Njcm9sbDtcbmZ1bmN0aW9uIF9zZXR1cExpc3RlbmluZyhldmVudCkge1xuICBpZiAoKDAsIF9ldmVudC5pc1JpZ2h0Q2xpY2spKGV2ZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzY3JvbGxIYW5kbGVyID0gdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O1xuICB0aGlzLnNldEJvdW5kYXJpZXMoc2Nyb2xsSGFuZGxlciAhPT0gdGhpcy5ob3Qucm9vdFdpbmRvdyA/IHNjcm9sbEhhbmRsZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgOiB1bmRlZmluZWQpO1xuICB0aGlzLnNldENhbGxiYWNrKChzY3JvbGxYLCBzY3JvbGxZKSA9PiB7XG4gICAgdmFyIF9zY3JvbGxIYW5kbGVyJHNjcm9sbCwgX3Njcm9sbEhhbmRsZXIkc2Nyb2xsMjtcbiAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsVmFsdWUgPSAoX3Njcm9sbEhhbmRsZXIkc2Nyb2xsID0gc2Nyb2xsSGFuZGxlci5zY3JvbGxMZWZ0KSAhPT0gbnVsbCAmJiBfc2Nyb2xsSGFuZGxlciRzY3JvbGwgIT09IHZvaWQgMCA/IF9zY3JvbGxIYW5kbGVyJHNjcm9sbCA6IHNjcm9sbEhhbmRsZXIuc2Nyb2xsWDtcbiAgICBjb25zdCB2ZXJ0aWNhbFNjcm9sbFZhbHVlID0gKF9zY3JvbGxIYW5kbGVyJHNjcm9sbDIgPSBzY3JvbGxIYW5kbGVyLnNjcm9sbFRvcCkgIT09IG51bGwgJiYgX3Njcm9sbEhhbmRsZXIkc2Nyb2xsMiAhPT0gdm9pZCAwID8gX3Njcm9sbEhhbmRsZXIkc2Nyb2xsMiA6IHNjcm9sbEhhbmRsZXIuc2Nyb2xsWTtcbiAgICBzY3JvbGxIYW5kbGVyLnNjcm9sbChob3Jpem9udGFsU2Nyb2xsVmFsdWUgKyBNYXRoLnNpZ24oc2Nyb2xsWCkgKiA1MCwgdmVydGljYWxTY3JvbGxWYWx1ZSArIE1hdGguc2lnbihzY3JvbGxZKSAqIDIwKTtcbiAgfSk7XG4gIHRoaXMubGlzdGVuKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2RyYWdUb1Njcm9sbCA9IHJlcXVpcmUoXCIuL2RyYWdUb1Njcm9sbFwiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9kcmFnVG9TY3JvbGwuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2RyYWdUb1Njcm9sbC5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLkRyYWdUb1Njcm9sbCA9IF9kcmFnVG9TY3JvbGwuRHJhZ1RvU2Nyb2xsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi9iYXNlXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2NvbW1hbmRFeGVjdXRvciA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS9jb21tYW5kRXhlY3V0b3JcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4uL2NvbnRleHRNZW51L3V0aWxzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2l0ZW1zRmFjdG9yeSA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS9pdGVtc0ZhY3RvcnlcIik7XG52YXIgX21lbnUgPSByZXF1aXJlKFwiLi4vY29udGV4dE1lbnUvbWVudVwiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX3ByZWRlZmluZWRJdGVtcyA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXNcIik7XG52YXIgX2ExMXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hMTF5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVEcm9wZG93bk1lbnVTaG93Jyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJEcm9wZG93bk1lbnVTaG93Jyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJEcm9wZG93bk1lbnVIaWRlJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJEcm9wZG93bk1lbnVFeGVjdXRlJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2Ryb3Bkb3duTWVudSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDIzMDtcbmNvbnN0IEJVVFRPTl9DTEFTU19OQU1FID0gJ2NoYW5nZVR5cGUnO1xuY29uc3QgU0hPUlRDVVRTX0dST1VQID0gUExVR0lOX0tFWTtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBAcGx1Z2luIERyb3Bkb3duTWVudVxuICogQGNsYXNzIERyb3Bkb3duTWVudVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyB0aGUgSGFuZHNvbnRhYmxlIERyb3Bkb3duIE1lbnUuIEl0IGFsbG93cyB0byBjcmVhdGUgYSBuZXcgY29sdW1uIGF0IGFueSBwbGFjZSBpbiB0aGUgZ3JpZFxuICogYW1vbmcgW290aGVyIGZlYXR1cmVzXShAL2d1aWRlcy9hY2Nlc3Nvcmllcy1hbmQtbWVudXMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5tZCNjb250ZXh0LW1lbnUtd2l0aC1zcGVjaWZpYy1vcHRpb25zKS5cbiAqIFBvc3NpYmxlIHZhbHVlczpcbiAqICogYHRydWVgICh0byBlbmFibGUgZGVmYXVsdCBvcHRpb25zKSxcbiAqICogYGZhbHNlYCAodG8gZGlzYWJsZSBjb21wbGV0ZWx5KS5cbiAqXG4gKiBvciBhcnJheSBvZiBhbnkgYXZhaWxhYmxlIHN0cmluZ3M6XG4gKiAqIGBbXCJjb2xfbGVmdFwiLCBcImNvbF9yaWdodFwiLCBcInJlbW92ZV9jb2xcIiwgXCItLS0tLS0tLS1cIiwgXCJ1bmRvXCIsIFwicmVkb1wiXWAuXG4gKlxuICogU2VlIFt0aGUgZHJvcGRvd24gbWVudSBkZW1vXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1tZW51L2NvbHVtbi1tZW51Lm1kKSBmb3IgZXhhbXBsZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIDo6OiBvbmx5LWZvciBqYXZhc2NyaXB0XG4gKiBgYGBqc1xuICogY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2V4YW1wbGUnKTtcbiAqIGNvbnN0IGhvdCA9IG5ldyBIYW5kc29udGFibGUoY29udGFpbmVyLCB7XG4gKiAgIGRhdGE6IGRhdGEsXG4gKiAgIGNvbEhlYWRlcnM6IHRydWUsXG4gKiAgIC8vIGVuYWJsZSBkcm9wZG93biBtZW51XG4gKiAgIGRyb3Bkb3duTWVudTogdHJ1ZVxuICogfSk7XG4gKlxuICogLy8gb3JcbiAqIGNvbnN0IGhvdCA9IG5ldyBIYW5kc29udGFibGUoY29udGFpbmVyLCB7XG4gKiAgIGRhdGE6IGRhdGEsXG4gKiAgIGNvbEhlYWRlcnM6IHRydWUsXG4gKiAgIC8vIGVuYWJsZSBhbmQgY29uZmlndXJlIGRyb3Bkb3duIG1lbnVcbiAqICAgZHJvcGRvd25NZW51OiBbJ3JlbW92ZV9jb2wnLCAnLS0tLS0tLS0tJywgJ21ha2VfcmVhZF9vbmx5JywgJ2FsaWdubWVudCddXG4gKiB9KTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBkYXRhPXtkYXRhfVxuICogICBjb21tZW50cz17dHJ1ZX1cbiAqICAgLy8gZW5hYmxlIGFuZCBjb25maWd1cmUgZHJvcGRvd24gbWVudVxuICogICBkcm9wZG93bk1lbnU9e1sncmVtb3ZlX2NvbCcsICctLS0tLS0tLS0nLCAnbWFrZV9yZWFkX29ubHknLCAnYWxpZ25tZW50J119XG4gKiAvPlxuICogYGBgXG4gKiA6OjpcbiAqL1xudmFyIF9pc0J1dHRvbkNsaWNrZWQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfRHJvcGRvd25NZW51X2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBEcm9wZG93bk1lbnUgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgc3RhdGljIGdldCBQTFVHSU5fS0VZKCkge1xuICAgIHJldHVybiBQTFVHSU5fS0VZO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fREVQUygpIHtcbiAgICByZXR1cm4gWydwbHVnaW46QXV0b0NvbHVtblNpemUnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IG1lbnUgaXRlbXMgb3JkZXIgd2hlbiBgZHJvcGRvd25NZW51YCBpcyBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIGNvbmZpZyBpdGVtIHRvIGB0cnVlYC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgc3RhdGljIGdldCBERUZBVUxUX0lURU1TKCkge1xuICAgIHJldHVybiBbX3ByZWRlZmluZWRJdGVtcy5DT0xVTU5fTEVGVCwgX3ByZWRlZmluZWRJdGVtcy5DT0xVTU5fUklHSFQsIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfcHJlZGVmaW5lZEl0ZW1zLlJFTU9WRV9DT0xVTU4sIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfcHJlZGVmaW5lZEl0ZW1zLkNMRUFSX0NPTFVNTiwgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9wcmVkZWZpbmVkSXRlbXMuUkVBRF9PTkxZLCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX3ByZWRlZmluZWRJdGVtcy5BTElHTk1FTlRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIHtAbGluayBDb21tYW5kRXhlY3V0b3J9LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7Q29tbWFuZEV4ZWN1dG9yfVxuICAgKi9cblxuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSkge1xuICAgIHN1cGVyKGhvdEluc3RhbmNlKTtcblxuICAgIC8vIE9uZSBsaXN0ZW5lciBmb3IgZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0eVxuICAgIC8qKlxuICAgICAqIEFkZCBjdXN0b20gc2hvcnRjdXRzIHRvIHRoZSBwcm92aWRlZCBtZW51IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtNZW51fSBtZW51SW5zdGFuY2UgVGhlIG1lbnUgaW5zdGFuY2UuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Ecm9wZG93bk1lbnVfYnJhbmQpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbW1hbmRFeGVjdXRvclwiLCBuZXcgX2NvbW1hbmRFeGVjdXRvci5Db21tYW5kRXhlY3V0b3IodGhpcy5ob3QpKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgSXRlbXNGYWN0b3J5fS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0l0ZW1zRmFjdG9yeX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpdGVtc0ZhY3RvcnlcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIE1lbnV9LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7TWVudX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZW51XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEZsYWcgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIG1lbnUgd2FzIGNsaWNrZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaXNCdXR0b25DbGlja2VkLCBmYWxzZSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYWZ0ZXJHZXRDb2xIZWFkZXInLCAoY29sLCBUSCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0Ryb3Bkb3duTWVudV9icmFuZCwgdGhpcywgX29uQWZ0ZXJHZXRDb2xIZWFkZXIpLmNhbGwodGhpcywgY29sLCBUSCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBEcm9wZG93bk1lbnUjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtc1xuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLml0ZW1zRmFjdG9yeSA9IG5ldyBfaXRlbXNGYWN0b3J5Lkl0ZW1zRmFjdG9yeSh0aGlzLmhvdCwgRHJvcGRvd25NZW51LkRFRkFVTFRfSVRFTVMpO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlT25DZWxsTW91c2VEb3duJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Ryb3Bkb3duTWVudV9icmFuZCwgX3RoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Ryb3Bkb3duTWVudV9icmFuZCwgX3RoaXMsIF9vbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgY29uc3QgcHJlZGVmaW5lZEl0ZW1zID0ge1xuICAgICAgaXRlbXM6IHRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKHNldHRpbmdzKVxuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuY29tbWFuZEV4ZWN1dG9yLnNldENvbW1vbkNhbGxiYWNrKHNldHRpbmdzLmNhbGxiYWNrKTtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpID0+IHtcbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zJywgcHJlZGVmaW5lZEl0ZW1zKTtcbiAgICAgIHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhwcmVkZWZpbmVkSXRlbXMuaXRlbXMpO1xuICAgICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoc2V0dGluZ3MpO1xuICAgICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgICB0aGlzLm1lbnUuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5tZW51ID0gbmV3IF9tZW51Lk1lbnUodGhpcy5ob3QsIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnaHREcm9wZG93bk1lbnUnLFxuICAgICAgICBrZWVwSW5WaWV3cG9ydDogdHJ1ZSxcbiAgICAgICAgY29udGFpbmVyOiBzZXR0aW5ncy51aUNvbnRhaW5lciB8fCB0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keVxuICAgICAgfSk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMnLCBtZW51SXRlbXMpO1xuICAgICAgdGhpcy5tZW51LnNldE1lbnVJdGVtcyhtZW51SXRlbXMpO1xuICAgICAgdGhpcy5tZW51LmFkZExvY2FsSG9vaygnYmVmb3JlT3BlbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Ecm9wZG93bk1lbnVfYnJhbmQsIHRoaXMsIF9vbk1lbnVCZWZvcmVPcGVuKS5jYWxsKHRoaXMpKTtcbiAgICAgIHRoaXMubWVudS5hZGRMb2NhbEhvb2soJ2FmdGVyT3BlbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Ecm9wZG93bk1lbnVfYnJhbmQsIHRoaXMsIF9vbk1lbnVBZnRlck9wZW4pLmNhbGwodGhpcykpO1xuICAgICAgdGhpcy5tZW51LmFkZExvY2FsSG9vaygnYWZ0ZXJTdWJtZW51T3BlbicsIHN1Yk1lbnVJbnN0YW5jZSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRHJvcGRvd25NZW51X2JyYW5kLCB0aGlzLCBfb25TdWJNZW51QWZ0ZXJPcGVuKS5jYWxsKHRoaXMsIHN1Yk1lbnVJbnN0YW5jZSkpO1xuICAgICAgdGhpcy5tZW51LmFkZExvY2FsSG9vaygnYWZ0ZXJDbG9zZScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Ecm9wZG93bk1lbnVfYnJhbmQsIHRoaXMsIF9vbk1lbnVBZnRlckNsb3NlKS5jYWxsKHRoaXMpKTtcbiAgICAgIHRoaXMubWVudS5hZGRMb2NhbEhvb2soJ2V4ZWN1dGVDb21tYW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhcmFtcyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICAgIHBhcmFtc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcy5leGVjdXRlQ29tbWFuZC5jYWxsKF90aGlzLCAuLi5wYXJhbXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGFsbCBjb21tYW5kcy4gUHJlZGVmaW5lZCBhbmQgYWRkZWQgYnkgdXNlciBvciBieSBwbHVnaW5zXG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVudUl0ZW1zLCBjb21tYW5kID0+IHRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChjb21tYW5kLmtleSwgY29tbWFuZCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgZHJvcGRvd25NZW51YF0oQC9hcGkvb3B0aW9ucy5tZCNkcm9wZG93bm1lbnUpXG4gICAqL1xuICB1cGRhdGVQbHVnaW4oKSB7XG4gICAgdGhpcy5kaXNhYmxlUGx1Z2luKCk7XG4gICAgdGhpcy5lbmFibGVQbHVnaW4oKTtcbiAgICBzdXBlci51cGRhdGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgdGhpcy5tZW51LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgZHJvcGRvd24gbWVudS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIGNvbnN0IGdyaWRDb250ZXh0ID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgnZ3JpZCcpO1xuICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBoaWdobGlnaHRcbiAgICAgIH0gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKChoaWdobGlnaHQuaXNIZWFkZXIoKSAmJiBoaWdobGlnaHQucm93ID09PSAtMSB8fCBoaWdobGlnaHQuaXNDZWxsKCkpICYmIGhpZ2hsaWdodC5jb2wgPj0gMCkge1xuICAgICAgICB0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGhpZ2hsaWdodC5jb2wsIGhpZ2hsaWdodC5jb2wsIC0xKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGZyb21cbiAgICAgICAgfSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9ICgwLCBfdXRpbHMuZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQpKHRoaXMubWVudS5jb250YWluZXIsIHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuaG90LmdldENlbGwoLTEsIGZyb20uY29sLCB0cnVlKTtcbiAgICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5vcGVuKHtcbiAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyBvZmZzZXQubGVmdCxcbiAgICAgICAgICB0b3A6IHJlY3QudG9wICsgdGFyZ2V0Lm9mZnNldEhlaWdodCArIG9mZnNldC50b3BcbiAgICAgICAgfSwge1xuICAgICAgICAgIGxlZnQ6IHJlY3Qud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZmlyc3QgaXRlbSBpcyBzZWxlY3RlZCAocm9sZT1tZW51aXRlbSkuIE90aGVyd2lzZSwgc2NyZWVuIHJlYWRlcnNcbiAgICAgICAgLy8gd2lsbCBibG9jayB0aGUgRXNjIGtleSBmb3IgdGhlIHdob2xlIG1lbnUuXG4gICAgICAgIHRoaXMubWVudS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpO1xuICAgICAgfVxuICAgIH07XG4gICAgZ3JpZENvbnRleHQuYWRkU2hvcnRjdXRzKFt7XG4gICAgICBrZXlzOiBbWydTaGlmdCcsICdBbHQnLCAnQXJyb3dEb3duJ10sIFsnQ29udHJvbC9NZXRhJywgJ0VudGVyJ11dLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgICAgdmFyIF90aGlzJGhvdCRnZXRTZWxlY3RlZDtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gKF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkLmhpZ2hsaWdodDtcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodCAmJiB0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoaWdobGlnaHQpICYmIGhpZ2hsaWdodC5pc0hlYWRlcigpICYmICF0aGlzLm1lbnUuaXNPcGVuZWQoKTtcbiAgICAgIH0sXG4gICAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydTaGlmdCcsICdBbHQnLCAnQXJyb3dEb3duJ11dLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgICAgdmFyIF90aGlzJGhvdCRnZXRTZWxlY3RlZDI7XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9IChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX3RoaXMkaG90JGdldFNlbGVjdGVkMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkMi5oaWdobGlnaHQ7XG4gICAgICAgIHJldHVybiBoaWdobGlnaHQgJiYgdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaGlnaGxpZ2h0KSAmJiBoaWdobGlnaHQuaXNDZWxsKCkgJiYgIXRoaXMubWVudS5pc09wZW5lZCgpO1xuICAgICAgfSxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9XSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGRyb3Bkb3duIG1lbnUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFNIT1JUQ1VUU19HUk9VUCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHRoZSBET00gbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwgJ2NsaWNrJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0Ryb3Bkb3duTWVudV9icmFuZCwgdGhpcywgX29uVGFibGVDbGljaykuY2FsbCh0aGlzLCBldmVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIG1lbnUgYW5kIHJlLXBvc2l0aW9uIGl0IGJhc2VkIG9uIHRoZSBwYXNzZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7eyB0b3A6IG51bWJlciwgbGVmdDogbnVtYmVyIH18RXZlbnR9IHBvc2l0aW9uIEFuIG9iamVjdCB3aXRoIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllc1xuICAgKiB3aGljaCBjb250YWlucyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgYnJvd3NlcnMgdmlld3BvcnQgKHdpdGhvdXQgaW5jbHVkZWQgc2Nyb2xsIG9mZnNldHMpLlxuICAgKiBPciBpZiB0aGUgbmF0aXZlIGV2ZW50IGlzIHBhc3NlZCB0aGUgbWVudSB3aWxsIGJlIHBvc2l0aW9uZWQgYmFzZWQgb24gdGhlIGBwYWdlWGAgYW5kIGBwYWdlWWBcbiAgICogY29vcmRpbmF0ZXMuXG4gICAqIEBwYXJhbSB7eyBhYm92ZTogbnVtYmVyLCBiZWxvdzogbnVtYmVyLCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIgfX0gb2Zmc2V0IEFuIG9iamVjdCBhbGxvd3MgYXBwbHlpbmdcbiAgICogdGhlIG9mZnNldCB0byB0aGUgbWVudSBwb3NpdGlvbi5cbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZURyb3Bkb3duTWVudVNob3dcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyRHJvcGRvd25NZW51U2hvd1xuICAgKi9cbiAgb3Blbihwb3NpdGlvbikge1xuICAgIHZhciBfdGhpcyRtZW51O1xuICAgIGxldCBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgIGFib3ZlOiAwLFxuICAgICAgYmVsb3c6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDBcbiAgICB9O1xuICAgIGlmICgoX3RoaXMkbWVudSA9IHRoaXMubWVudSkgIT09IG51bGwgJiYgX3RoaXMkbWVudSAhPT0gdm9pZCAwICYmIF90aGlzJG1lbnUuaXNPcGVuZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lbnUub3BlbigpO1xuICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKG9mZnNldCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIHRoaXMubWVudS5zZXRPZmZzZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5tZW51LnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgZHJvcGRvd24gbWVudS5cbiAgICovXG4gIGNsb3NlKCkge1xuICAgIHZhciBfdGhpcyRtZW51MjtcbiAgICAoX3RoaXMkbWVudTIgPSB0aGlzLm1lbnUpID09PSBudWxsIHx8IF90aGlzJG1lbnUyID09PSB2b2lkIDAgfHwgX3RoaXMkbWVudTIuY2xvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBjb250ZXh0IG1lbnUgY29tbWFuZC5cbiAgICpcbiAgICogVGhlIGBleGVjdXRlQ29tbWFuZCgpYCBtZXRob2Qgd29ya3Mgb25seSBmb3Igc2VsZWN0ZWQgY2VsbHMuXG4gICAqXG4gICAqIFdoZW4gbm8gY2VsbHMgYXJlIHNlbGVjdGVkLCBgZXhlY3V0ZUNvbW1hbmQoKWAgZG9lc24ndCBkbyBhbnl0aGluZy5cbiAgICpcbiAgICogWW91IGNhbiBleGVjdXRlIGFsbCBwcmVkZWZpbmVkIGNvbW1hbmRzOlxuICAgKiAgKiBgJ2NvbF9sZWZ0J2AgLSBJbnNlcnQgY29sdW1uIGxlZnRcbiAgICogICogYCdjb2xfcmlnaHQnYCAtIEluc2VydCBjb2x1bW4gcmlnaHRcbiAgICogICogYCdjbGVhcl9jb2x1bW4nYCAtIENsZWFyIHNlbGVjdGVkIGNvbHVtblxuICAgKiAgKiBgJ3JlbW92ZV9jb2wnYCAtIFJlbW92ZSBjb2x1bW5cbiAgICogICogYCd1bmRvJ2AgLSBVbmRvIGxhc3QgYWN0aW9uXG4gICAqICAqIGAncmVkbydgIC0gUmVkbyBsYXN0IGFjdGlvblxuICAgKiAgKiBgJ21ha2VfcmVhZF9vbmx5J2AgLSBNYWtlIGNlbGwgcmVhZCBvbmx5XG4gICAqICAqIGAnYWxpZ25tZW50OmxlZnQnYCAtIEFsaWdubWVudCB0byB0aGUgbGVmdFxuICAgKiAgKiBgJ2FsaWdubWVudDp0b3AnYCAtIEFsaWdubWVudCB0byB0aGUgdG9wXG4gICAqICAqIGAnYWxpZ25tZW50OnJpZ2h0J2AgLSBBbGlnbm1lbnQgdG8gdGhlIHJpZ2h0XG4gICAqICAqIGAnYWxpZ25tZW50OmJvdHRvbSdgIC0gQWxpZ25tZW50IHRvIHRoZSBib3R0b21cbiAgICogICogYCdhbGlnbm1lbnQ6bWlkZGxlJ2AgLSBBbGlnbm1lbnQgdG8gdGhlIG1pZGRsZVxuICAgKiAgKiBgJ2FsaWdubWVudDpjZW50ZXInYCAtIEFsaWdubWVudCB0byB0aGUgY2VudGVyIChqdXN0aWZ5KS5cbiAgICpcbiAgICogT3IgeW91IGNhbiBleGVjdXRlIGNvbW1hbmQgcmVnaXN0ZXJlZCBpbiBzZXR0aW5ncyB3aGVyZSBga2V5YCBpcyB5b3VyIGNvbW1hbmQgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbW1hbmROYW1lIENvbW1hbmQgbmFtZSB0byBleGVjdXRlLlxuICAgKiBAcGFyYW0geyp9IHBhcmFtcyBBZGRpdGlvbmFsIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBjb21tYW5kIGV4ZWN1dG9yLlxuICAgKi9cbiAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIHBhcmFtcyA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBwYXJhbXNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuICAgIHRoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUoY29tbWFuZE5hbWUsIC4uLnBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVHVybnMgb24gLyBvZmYgbGlzdGVuaW5nIG9uIGRyb3Bkb3duIG1lbnUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGlzdGVuIFR1cm4gb24gbGlzdGVuaW5nIHdoZW4gdmFsdWUgaXMgc2V0IHRvIHRydWUsIG90aGVyd2lzZSB0dXJuIGl0IG9mZi5cbiAgICovXG4gIHNldExpc3RlbmluZygpIHtcbiAgICBsZXQgbGlzdGVuID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICAgIGlmICh0aGlzLm1lbnUuaXNPcGVuZWQoKSkge1xuICAgICAgaWYgKGxpc3Rlbikge1xuICAgICAgICB0aGlzLm1lbnUuaG90TWVudS5saXN0ZW4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVudS5ob3RNZW51LnVubGlzdGVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gICAgaWYgKHRoaXMubWVudSkge1xuICAgICAgdGhpcy5tZW51LmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLkRyb3Bkb3duTWVudSA9IERyb3Bkb3duTWVudTtcbmZ1bmN0aW9uIF9hZGRDdXN0b21TaG9ydGN1dHMobWVudUluc3RhbmNlKSB7XG4gIG1lbnVJbnN0YW5jZS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3tcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnQSddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gZmFsc2VcbiAgfV0pO1xufVxuLyoqXG4gKiBUYWJsZSBjbGljayBsaXN0ZW5lci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gX29uVGFibGVDbGljayhldmVudCkge1xuICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsIEJVVFRPTl9DTEFTU19OQU1FKSkge1xuICAgIGNvbnN0IG9mZnNldCA9ICgwLCBfdXRpbHMuZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQpKHRoaXMubWVudS5jb250YWluZXIsIHRoaXMuaG90LnJvb3REb2N1bWVudCk7XG4gICAgY29uc3QgcmVjdCA9IGV2ZW50LnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lzQnV0dG9uQ2xpY2tlZCwgdGhpcywgZmFsc2UpO1xuICAgIHRoaXMub3Blbih7XG4gICAgICBsZWZ0OiByZWN0LmxlZnQgKyBvZmZzZXQubGVmdCxcbiAgICAgIHRvcDogcmVjdC50b3AgKyBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0ICsgMyArIG9mZnNldC50b3BcbiAgICB9LCB7XG4gICAgICBsZWZ0OiByZWN0LndpZHRoXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogT24gYWZ0ZXIgZ2V0IGNvbHVtbiBoZWFkZXIgbGlzdGVuZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFRIIEhlYWRlcidzIFRIIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Q29sSGVhZGVyKGNvbCwgVEgpIHtcbiAgLy8gQ29ybmVyIG9yIGEgaGlnaGVyLWxldmVsIGhlYWRlclxuICBjb25zdCBoZWFkZXJSb3cgPSBUSC5wYXJlbnROb2RlO1xuICBpZiAoIWhlYWRlclJvdykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBoZWFkZXJSb3dMaXN0ID0gaGVhZGVyUm93LnBhcmVudE5vZGUuY2hpbGROb2RlcztcbiAgY29uc3QgbGV2ZWwgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGhlYWRlclJvd0xpc3QsIGhlYWRlclJvdyk7XG4gIGlmIChjb2wgPCAwIHx8IGxldmVsICE9PSBoZWFkZXJSb3dMaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdCdXR0b24gPSBUSC5xdWVyeVNlbGVjdG9yKGAuJHtCVVRUT05fQ0xBU1NfTkFNRX1gKTtcblxuICAvLyBQbHVnaW4gZW5hYmxlZCBhbmQgYnV0dG9ucyBhbHJlYWR5IGV4aXN0cywgcmV0dXJuLlxuICBpZiAodGhpcy5lbmFibGVkICYmIGV4aXN0aW5nQnV0dG9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFBsdWdpbiBkaXNhYmxlZCBhbmQgYnV0dG9ucyBzdGlsbCBleGlzdHMsIHNvIHJlbW92ZSB0aGVtLlxuICBpZiAoIXRoaXMuZW5hYmxlZCkge1xuICAgIGlmIChleGlzdGluZ0J1dHRvbikge1xuICAgICAgZXhpc3RpbmdCdXR0b24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChleGlzdGluZ0J1dHRvbik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBidXR0b24gPSB0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gIGJ1dHRvbi5jbGFzc05hbWUgPSBCVVRUT05fQ0xBU1NfTkFNRTtcbiAgYnV0dG9uLnR5cGUgPSAnYnV0dG9uJztcbiAgYnV0dG9uLnRhYkluZGV4ID0gLTE7XG4gIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKSB7XG4gICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoYnV0dG9uLCBbKDAsIF9hMTF5LkExMVlfSElEREVOKSgpLCAoMCwgX2ExMXkuQTExWV9MQUJFTCkoJyAnKV0pO1xuICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRILCBbKDAsIF9hMTF5LkExMVlfSEFTUE9QVVApKCdtZW51JyldKTtcbiAgfVxuXG4gIC8vIHByZXZlbnQgcGFnZSByZWxvYWQgb24gYnV0dG9uIGNsaWNrXG4gIGJ1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgVEguZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoYnV0dG9uLCBUSC5maXJzdENoaWxkLmZpcnN0Q2hpbGQpO1xufVxuLyoqXG4gKiBPbiBtZW51IGJlZm9yZSBvcGVuIGxpc3RlbmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZmlyZXMgSG9va3MjYmVmb3JlRHJvcGRvd25NZW51U2hvd1xuICovXG5mdW5jdGlvbiBfb25NZW51QmVmb3JlT3BlbigpIHtcbiAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZURyb3Bkb3duTWVudVNob3cnLCB0aGlzKTtcbn1cbi8qKlxuICogT24gbWVudSBhZnRlciBvcGVuIGxpc3RlbmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJEcm9wZG93bk1lbnVTaG93XG4gKi9cbmZ1bmN0aW9uIF9vbk1lbnVBZnRlck9wZW4oKSB7XG4gIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckRyb3Bkb3duTWVudVNob3cnLCB0aGlzKTtcbiAgX2Fzc2VydENsYXNzQnJhbmQoX0Ryb3Bkb3duTWVudV9icmFuZCwgdGhpcywgX2FkZEN1c3RvbVNob3J0Y3V0cykuY2FsbCh0aGlzLCB0aGlzLm1lbnUpO1xufVxuLyoqXG4gKiBMaXN0ZW5lciBmb3IgdGhlIGBhZnRlclN1Ym1lbnVPcGVuYCBob29rLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge01lbnV9IHN1Yk1lbnVJbnN0YW5jZSBUaGUgb3BlbmVkIHN1YiBtZW51IGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBfb25TdWJNZW51QWZ0ZXJPcGVuKHN1Yk1lbnVJbnN0YW5jZSkge1xuICBfYXNzZXJ0Q2xhc3NCcmFuZChfRHJvcGRvd25NZW51X2JyYW5kLCB0aGlzLCBfYWRkQ3VzdG9tU2hvcnRjdXRzKS5jYWxsKHRoaXMsIHN1Yk1lbnVJbnN0YW5jZSk7XG59XG4vKipcbiAqIE9uIG1lbnUgYWZ0ZXIgY2xvc2UgbGlzdGVuZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBmaXJlcyBIb29rcyNhZnRlckRyb3Bkb3duTWVudUhpZGVcbiAqL1xuZnVuY3Rpb24gX29uTWVudUFmdGVyQ2xvc2UoKSB7XG4gIHRoaXMuaG90Lmxpc3RlbigpO1xuICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJEcm9wZG93bk1lbnVIaWRlJywgdGhpcyk7XG59XG4vKipcbiAqIEhvb2sgYWxsb3dzIGJsb2NraW5nIGhvcml6b250YWwgc2Nyb2xsIHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkIGJ5IGNsaWNraW5nIG9uXG4gKiB0aGUgY29sdW1uIGhlYWRlciBidXR0b24uIFRoaXMgcHJldmVudHMgZnJvbSBzY3JvbGxpbmcgdGhlIHZpZXdwb3J0IChqdW1wIGVmZmVjdCkgd2hlblxuICogdGhlIGJ1dHRvbiBpcyBjbGlja2VkLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEByZXR1cm5zIHtudW1iZXIgfCBudWxsfVxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSh2aXN1YWxDb2x1bW4pIHtcbiAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNCdXR0b25DbGlja2VkLCB0aGlzKSA/IG51bGwgOiB2aXN1YWxDb2x1bW47XG59XG4vKipcbiAqIEhvb2sgc2V0cyB0aGUgaW50ZXJuYWwgZmxhZyB0byBgdHJ1ZWAgd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24oZXZlbnQpIHtcbiAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCBCVVRUT05fQ0xBU1NfTkFNRSkpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lzQnV0dG9uQ2xpY2tlZCwgdGhpcywgdHJ1ZSk7XG4gIH1cbn1cbkRyb3Bkb3duTWVudS5TRVBBUkFUT1IgPSB7XG4gIG5hbWU6IF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9kcm9wZG93bk1lbnUgPSByZXF1aXJlKFwiLi9kcm9wZG93bk1lbnVcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfZHJvcGRvd25NZW51LlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9kcm9wZG93bk1lbnUuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5Ecm9wZG93bk1lbnUgPSBfZHJvcGRvd25NZW51LkRyb3Bkb3duTWVudTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEYXRhUHJvdmlkZXIge1xuICBjb25zdHJ1Y3Rvcihob3RJbnN0YW5jZSkge1xuICAgIC8qKlxuICAgICAqIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEZvcm1hdCB0eXBlIGNsYXNzIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdGlvbnNcIiwge30pO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9wdGlvbnMgZm9yIGRhdGEgcHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9iamVjdCB3aXRoIHNwZWNpZmllZCBvcHRpb25zLlxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGFibGUgZGF0YSBiYXNlZCBvbiBwcm92aWRlZCBzZXR0aW5ncyB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldERhdGEoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RhcnRSb3csXG4gICAgICBzdGFydENvbCxcbiAgICAgIGVuZFJvdyxcbiAgICAgIGVuZENvbFxuICAgIH0gPSB0aGlzLl9nZXREYXRhUmFuZ2UoKTtcbiAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHN0YXJ0Um93LCBlbmRSb3csIHJvd0luZGV4ID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IFtdO1xuICAgICAgaWYgKCFvcHRpb25zLmV4cG9ydEhpZGRlblJvd3MgJiYgdGhpcy5faXNIaWRkZW5Sb3cocm93SW5kZXgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoc3RhcnRDb2wsIGVuZENvbCwgY29sSW5kZXggPT4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyAmJiB0aGlzLl9pc0hpZGRlbkNvbHVtbihjb2xJbmRleCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcm93LnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChyb3dJbmRleCwgY29sSW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBsaXN0IG9mIHJvdyBoZWFkZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRSb3dIZWFkZXJzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBbXTtcbiAgICBpZiAodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3RhcnRSb3csXG4gICAgICAgIGVuZFJvd1xuICAgICAgfSA9IHRoaXMuX2dldERhdGFSYW5nZSgpO1xuICAgICAgY29uc3Qgcm93SGVhZGVycyA9IHRoaXMuaG90LmdldFJvd0hlYWRlcigpO1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzdGFydFJvdywgZW5kUm93LCByb3cgPT4ge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzICYmIHRoaXMuX2lzSGlkZGVuUm93KHJvdykpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVycy5wdXNoKHJvd0hlYWRlcnNbcm93XSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBsaXN0IG9mIGNvbHVtbnMgaGVhZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0Q29sdW1uSGVhZGVycygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gW107XG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0YXJ0Q29sLFxuICAgICAgICBlbmRDb2xcbiAgICAgIH0gPSB0aGlzLl9nZXREYXRhUmFuZ2UoKTtcbiAgICAgIGNvbnN0IGNvbEhlYWRlcnMgPSB0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoc3RhcnRDb2wsIGVuZENvbCwgY29sdW1uID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyAmJiB0aGlzLl9pc0hpZGRlbkNvbHVtbihjb2x1bW4pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlcnMucHVzaChjb2xIZWFkZXJzW2NvbHVtbl0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkYXRhIHJhbmdlIG9iamVjdCBiYXNlZCBvbiBzZXR0aW5ncyBwcm92aWRlZCBpbiB0aGUgY2xhc3MgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgb2JqZWN0IHdpdGgga2V5cyBgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCBhbmQgYGVuZENvbGAuXG4gICAqL1xuICBfZ2V0RGF0YVJhbmdlKCkge1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLmhvdC5jb3VudENvbHMoKSAtIDE7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuaG90LmNvdW50Um93cygpIC0gMTtcbiAgICBsZXQgW3N0YXJ0Um93ID0gMCwgc3RhcnRDb2wgPSAwLCBlbmRSb3cgPSByb3dzLCBlbmRDb2wgPSBjb2xzXSA9IHRoaXMub3B0aW9ucy5yYW5nZTtcbiAgICBzdGFydFJvdyA9IE1hdGgubWF4KHN0YXJ0Um93LCAwKTtcbiAgICBzdGFydENvbCA9IE1hdGgubWF4KHN0YXJ0Q29sLCAwKTtcbiAgICBlbmRSb3cgPSBNYXRoLm1pbihlbmRSb3csIHJvd3MpO1xuICAgIGVuZENvbCA9IE1hdGgubWluKGVuZENvbCwgY29scyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0Um93LFxuICAgICAgc3RhcnRDb2wsXG4gICAgICBlbmRSb3csXG4gICAgICBlbmRDb2xcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHJvdyBhdCBzcGVjaWZpZWQgcm93IGluZGV4IGlzIGhpZGRlbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgX2lzSGlkZGVuUm93KHJvdykge1xuICAgIHJldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbHVtbiBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4IGlzIGhpZGRlbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIF9pc0hpZGRlbkNvbHVtbihjb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pKTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gRGF0YVByb3ZpZGVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi9iYXNlXCIpO1xudmFyIF9kYXRhUHJvdmlkZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhdGFQcm92aWRlclwiKSk7XG52YXIgX3R5cGVGYWN0b3J5ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vdHlwZUZhY3RvcnlcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnZXhwb3J0RmlsZSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDI0MDtcblxuLyoqXG4gKiBAcGx1Z2luIEV4cG9ydEZpbGVcbiAqIEBjbGFzcyBFeHBvcnRGaWxlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYEV4cG9ydEZpbGVgIHBsdWdpbiBsZXRzIHlvdSBleHBvcnQgdGFibGUgZGF0YSBhcyBhIHN0cmluZywgYmxvYiwgb3IgZG93bmxvYWRhYmxlIENTViBmaWxlLlxuICpcbiAqIFNlZSBbdGhlIGV4cG9ydCBmaWxlIGRlbW9dKEAvZ3VpZGVzL2FjY2Vzc29yaWVzLWFuZC1tZW51cy9leHBvcnQtdG8tY3N2L2V4cG9ydC10by1jc3YubWQpIGZvciBleGFtcGxlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZScpO1xuICogY29uc3QgaG90ID0gbmV3IEhhbmRzb250YWJsZShjb250YWluZXIsIHtcbiAqICAgZGF0YTogZ2V0RGF0YSgpXG4gKiB9KTtcbiAqXG4gKiAvLyBhY2Nlc3MgdG8gZXhwb3J0RmlsZSBwbHVnaW4gaW5zdGFuY2VcbiAqIGNvbnN0IGV4cG9ydFBsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2V4cG9ydEZpbGUnKTtcbiAqXG4gKiAvLyBleHBvcnQgYXMgYSBzdHJpbmdcbiAqIGV4cG9ydFBsdWdpbi5leHBvcnRBc1N0cmluZygnY3N2Jyk7XG4gKlxuICogLy8gZXhwb3J0IGFzIGEgYmxvYiBvYmplY3RcbiAqIGV4cG9ydFBsdWdpbi5leHBvcnRBc0Jsb2IoJ2NzdicpO1xuICpcbiAqIC8vIGV4cG9ydCB0byBkb3dubG9hZGFibGUgZmlsZSAobmFtZWQ6IE15RmlsZS5jc3YpXG4gKiBleHBvcnRQbHVnaW4uZG93bmxvYWRGaWxlKCdjc3YnLCB7ZmlsZW5hbWU6ICdNeUZpbGUnfSk7XG4gKlxuICogLy8gZXhwb3J0IGFzIGEgc3RyaW5nICh3aXRoIHNwZWNpZmllZCBkYXRhIHJhbmdlKTpcbiAqIGV4cG9ydFBsdWdpbi5leHBvcnRBc1N0cmluZygnY3N2Jywge1xuICogICBleHBvcnRIaWRkZW5Sb3dzOiB0cnVlLCAgICAgLy8gZGVmYXVsdCBmYWxzZVxuICogICBleHBvcnRIaWRkZW5Db2x1bW5zOiB0cnVlLCAgLy8gZGVmYXVsdCBmYWxzZVxuICogICBjb2x1bW5IZWFkZXJzOiB0cnVlLCAgICAgICAgLy8gZGVmYXVsdCBmYWxzZVxuICogICByb3dIZWFkZXJzOiB0cnVlLCAgICAgICAgICAgLy8gZGVmYXVsdCBmYWxzZVxuICogICBjb2x1bW5EZWxpbWl0ZXI6ICc7JywgICAgICAgLy8gZGVmYXVsdCAnLCdcbiAqICAgcmFuZ2U6IFsxLCAxLCA2LCA2XSAgICAgICAgIC8vIFtzdGFydFJvdywgZW5kUm93LCBzdGFydENvbHVtbiwgZW5kQ29sdW1uXVxuICogfSk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiBjb25zdCBob3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gKlxuICogLi4uXG4gKlxuICogPEhvdFRhYmxlXG4gKiAgIHJlZj17aG90UmVmfVxuICogICBkYXRhPXtnZXREYXRhKCl9XG4gKiAvPlxuICpcbiAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICogLy8gYWNjZXNzIHRvIGV4cG9ydEZpbGUgcGx1Z2luIGluc3RhbmNlXG4gKiBjb25zdCBleHBvcnRQbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCdleHBvcnRGaWxlJyk7XG4gKlxuICogLy8gZXhwb3J0IGFzIGEgc3RyaW5nXG4gKiBleHBvcnRQbHVnaW4uZXhwb3J0QXNTdHJpbmcoJ2NzdicpO1xuICpcbiAqIC8vIGV4cG9ydCBhcyBhIGJsb2Igb2JqZWN0XG4gKiBleHBvcnRQbHVnaW4uZXhwb3J0QXNCbG9iKCdjc3YnKTtcbiAqXG4gKiAvLyBleHBvcnQgdG8gZG93bmxvYWRhYmxlIGZpbGUgKG5hbWVkOiBNeUZpbGUuY3N2KVxuICogZXhwb3J0UGx1Z2luLmRvd25sb2FkRmlsZSgnY3N2Jywge2ZpbGVuYW1lOiAnTXlGaWxlJ30pO1xuICpcbiAqIC8vIGV4cG9ydCBhcyBhIHN0cmluZyAod2l0aCBzcGVjaWZpZWQgZGF0YSByYW5nZSk6XG4gKiBleHBvcnRQbHVnaW4uZXhwb3J0QXNTdHJpbmcoJ2NzdicsIHtcbiAqICAgZXhwb3J0SGlkZGVuUm93czogdHJ1ZSwgICAgIC8vIGRlZmF1bHQgZmFsc2VcbiAqICAgZXhwb3J0SGlkZGVuQ29sdW1uczogdHJ1ZSwgIC8vIGRlZmF1bHQgZmFsc2VcbiAqICAgY29sdW1uSGVhZGVyczogdHJ1ZSwgICAgICAgIC8vIGRlZmF1bHQgZmFsc2VcbiAqICAgcm93SGVhZGVyczogdHJ1ZSwgICAgICAgICAgIC8vIGRlZmF1bHQgZmFsc2VcbiAqICAgY29sdW1uRGVsaW1pdGVyOiAnOycsICAgICAgIC8vIGRlZmF1bHQgJywnXG4gKiAgIHJhbmdlOiBbMSwgMSwgNiwgNl0gICAgICAgICAvLyBbc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2x1bW4sIGVuZENvbHVtbl1cbiAqIH0pO1xuICogYGBgXG4gKiA6OjpcbiAqL1xuY2xhc3MgRXhwb3J0RmlsZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgRXhwb3J0RmlsZSNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIEV4cG9ydE9wdGlvbnNcbiAgICogQG1lbWJlcm9mIEV4cG9ydEZpbGVcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbZXhwb3J0SGlkZGVuUm93cz1mYWxzZV0gSW5jbHVkZSBoaWRkZW4gcm93cyBpbiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbZXhwb3J0SGlkZGVuQ29sdW1ucz1mYWxzZV0gSW5jbHVkZSBoaWRkZW4gY29sdW1ucyBpbiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbY29sdW1uSGVhZGVycz1mYWxzZV0gSW5jbHVkZSBjb2x1bW4gaGVhZGVycyBpbiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbcm93SGVhZGVycz1mYWxzZV0gSW5jbHVkZSByb3cgaGVhZGVycyBpbiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IFtjb2x1bW5EZWxpbWl0ZXI9JywnXSBDb2x1bW4gZGVsaW1pdGVyLlxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3JhbmdlPVtdXSBDZWxsIHJhbmdlIHRoYXQgd2lsbCBiZSBleHBvcnRlZCB0byBmaWxlLlxuICAgKi9cblxuICAvKipcbiAgICogRXhwb3J0cyB0YWJsZSBkYXRhIGFzIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IEV4cG9ydCBmb3JtYXQgdHlwZSBlcS4gYCdjc3YnYC5cbiAgICogQHBhcmFtIHtFeHBvcnRPcHRpb25zfSBvcHRpb25zIEV4cG9ydCBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZXhwb3J0QXNTdHJpbmcoZm9ybWF0KSB7XG4gICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGZvcm1hdCwgb3B0aW9ucykuZXhwb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0cyB0YWJsZSBkYXRhIGFzIGEgYmxvYiBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRXhwb3J0IGZvcm1hdCB0eXBlIGVxLiBgJ2NzdidgLlxuICAgKiBAcGFyYW0ge0V4cG9ydE9wdGlvbnN9IG9wdGlvbnMgRXhwb3J0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtCbG9ifVxuICAgKi9cbiAgZXhwb3J0QXNCbG9iKGZvcm1hdCkge1xuICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICByZXR1cm4gdGhpcy5fY3JlYXRlQmxvYih0aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGZvcm1hdCwgb3B0aW9ucykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGFibGUgZGF0YSBhcyBhIGRvd25sb2FkYWJsZSBmaWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IEV4cG9ydCBmb3JtYXQgdHlwZSBlcS4gYCdjc3YnYC5cbiAgICogQHBhcmFtIHtFeHBvcnRPcHRpb25zfSBvcHRpb25zIEV4cG9ydCBvcHRpb25zLlxuICAgKi9cbiAgZG93bmxvYWRGaWxlKGZvcm1hdCkge1xuICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBjb25zdCB7XG4gICAgICByb290RG9jdW1lbnQsXG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIoZm9ybWF0LCBvcHRpb25zKTtcbiAgICBjb25zdCBibG9iID0gdGhpcy5fY3JlYXRlQmxvYihmb3JtYXR0ZXIpO1xuICAgIGNvbnN0IFVSTCA9IHJvb3RXaW5kb3cuVVJMIHx8IHJvb3RXaW5kb3cud2Via2l0VVJMO1xuICAgIGNvbnN0IGEgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGNvbnN0IG5hbWUgPSBgJHtmb3JtYXR0ZXIub3B0aW9ucy5maWxlbmFtZX0uJHtmb3JtYXR0ZXIub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7XG4gICAgaWYgKGEuZG93bmxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGEuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgdXJsKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIG5hbWUpO1xuICAgICAgcm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICBhLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJykpO1xuICAgICAgcm9vdERvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2UgaWYgKG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKSB7XG4gICAgICAvLyBJRTEwK1xuICAgICAgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgbmFtZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgY2xhc3MgZm9ybWF0dGVyIGZvciBzcGVjaWZpZWQgZXhwb3J0IHR5cGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRXhwb3J0IGZvcm1hdCB0eXBlIGVxLiBgJ2NzdidgLlxuICAgKiBAcGFyYW0ge0V4cG9ydE9wdGlvbnN9IG9wdGlvbnMgRXhwb3J0IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtCYXNlVHlwZX1cbiAgICovXG4gIF9jcmVhdGVUeXBlRm9ybWF0dGVyKGZvcm1hdCkge1xuICAgIGxldCBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICBpZiAoIV90eXBlRmFjdG9yeS5FWFBPUlRfVFlQRVNbZm9ybWF0XSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF90eXBlRmFjdG9yeS5kZWZhdWx0KShmb3JtYXQsIG5ldyBfZGF0YVByb3ZpZGVyLmRlZmF1bHQodGhpcy5ob3QpLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGJsb2Igb2JqZWN0IGJhc2VkIG9uIHByb3ZpZGVkIHR5cGUgZm9ybWF0dGVyIGNsYXNzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0Jhc2VUeXBlfSB0eXBlRm9ybWF0dGVyIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3BlY3lmaWMgZm9ybWF0dGVyL2V4cG9ydGVyLlxuICAgKiBAcmV0dXJucyB7QmxvYn1cbiAgICovXG4gIF9jcmVhdGVCbG9iKHR5cGVGb3JtYXR0ZXIpIHtcbiAgICBsZXQgZm9ybWF0dGVyID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmb3JtYXR0ZXIgPSBuZXcgQmxvYihbdHlwZUZvcm1hdHRlci5leHBvcnQoKV0sIHtcbiAgICAgICAgdHlwZTogYCR7dHlwZUZvcm1hdHRlci5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7dHlwZUZvcm1hdHRlci5vcHRpb25zLmVuY29kaW5nfWBcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVyO1xuICB9XG59XG5leHBvcnRzLkV4cG9ydEZpbGUgPSBFeHBvcnRGaWxlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9leHBvcnRGaWxlID0gcmVxdWlyZShcIi4vZXhwb3J0RmlsZVwiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9leHBvcnRGaWxlLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9leHBvcnRGaWxlLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuRXhwb3J0RmlsZSA9IF9leHBvcnRGaWxlLkV4cG9ydEZpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSB0eXBlRmFjdG9yeTtcbnZhciBfY3N2ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90eXBlcy9jc3ZcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IFRZUEVfQ1NWID0gZXhwb3J0cy5UWVBFX0NTViA9ICdjc3YnO1xuY29uc3QgVFlQRV9FWENFTCA9IGV4cG9ydHMuVFlQRV9FWENFTCA9ICdleGNlbCc7IC8vIFRPRE9cbmNvbnN0IFRZUEVfUERGID0gZXhwb3J0cy5UWVBFX1BERiA9ICdwZGYnOyAvLyBUT0RPXG5cbmNvbnN0IEVYUE9SVF9UWVBFUyA9IGV4cG9ydHMuRVhQT1JUX1RZUEVTID0ge1xuICBbVFlQRV9DU1ZdOiBfY3N2LmRlZmF1bHRcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFRoZSBleHBvcnRlciB0eXBlLlxuICogQHBhcmFtIHtEYXRhUHJvdmlkZXJ9IGRhdGFQcm92aWRlciBUaGUgZGF0YSBwcm92aWRlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIENvbnN0cnVjdG9yIG9wdGlvbnMgZm9yIGV4cG9ydGVyIGNsYXNzLlxuICogQHJldHVybnMge0Jhc2VUeXBlfG51bGx9XG4gKi9cbmZ1bmN0aW9uIHR5cGVGYWN0b3J5KHR5cGUsIGRhdGFQcm92aWRlciwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIEVYUE9SVF9UWVBFU1t0eXBlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuZXcgRVhQT1JUX1RZUEVTW3R5cGVdKGRhdGFQcm92aWRlciwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL3N0cmluZ1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBCYXNlVHlwZSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IG9wdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWltZVR5cGU6ICd0ZXh0L3BsYWluJyxcbiAgICAgIGZpbGVFeHRlbnNpb246ICd0eHQnLFxuICAgICAgZmlsZW5hbWU6ICdIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXScsXG4gICAgICBlbmNvZGluZzogJ3V0Zi04JyxcbiAgICAgIGJvbTogZmFsc2UsXG4gICAgICBjb2x1bW5IZWFkZXJzOiBmYWxzZSxcbiAgICAgIHJvd0hlYWRlcnM6IGZhbHNlLFxuICAgICAgZXhwb3J0SGlkZGVuQ29sdW1uczogZmFsc2UsXG4gICAgICBleHBvcnRIaWRkZW5Sb3dzOiBmYWxzZSxcbiAgICAgIHJhbmdlOiBbXVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBwcm92aWRlci5cbiAgICpcbiAgICogQHR5cGUge0RhdGFQcm92aWRlcn1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoZGF0YVByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGF0YVByb3ZpZGVyXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogRm9ybWF0IHR5cGUgY2xhc3Mgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwib3B0aW9uc1wiLCB2b2lkIDApO1xuICAgIHRoaXMuZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX21lcmdlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2Ugb3B0aW9ucyBwcm92aWRlZCBieSB1c2VycyB3aXRoIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBvcHRpb25zIHRvIG1lcmdlIHdpdGguXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgbmV3IG9wdGlvbnMgb2JqZWN0LlxuICAgKi9cbiAgX21lcmdlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgbGV0IF9vcHRpb25zID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBfb3B0aW9ucyA9ICgwLCBfb2JqZWN0LmV4dGVuZCkoKDAsIF9vYmplY3QuY2xvbmUpKEJhc2VUeXBlLkRFRkFVTFRfT1BUSU9OUyksIF9vcHRpb25zKTtcbiAgICBfb3B0aW9ucyA9ICgwLCBfb2JqZWN0LmV4dGVuZCkoX29wdGlvbnMsIG9wdGlvbnMpO1xuICAgIF9vcHRpb25zLmZpbGVuYW1lID0gKDAsIF9zdHJpbmcuc3Vic3RpdHV0ZSkoX29wdGlvbnMuZmlsZW5hbWUsIHtcbiAgICAgIFlZWVk6IGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgIE1NOiBgJHtkYXRlLmdldE1vbnRoKCkgKyAxfWAucGFkU3RhcnQoMiwgJzAnKSxcbiAgICAgIEREOiBgJHtkYXRlLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsICcwJylcbiAgICB9KTtcbiAgICByZXR1cm4gX29wdGlvbnM7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEJhc2VUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9iYXNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9fYmFzZVwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuY29uc3QgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDEzKTtcbmNvbnN0IENIQVJfRE9VQkxFX1FVT1RFUyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMzQpO1xuY29uc3QgQ0hBUl9MSU5FX0ZFRUQgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDEwKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBDc3YgZXh0ZW5kcyBfYmFzZS5kZWZhdWx0IHtcbiAgLyoqXG4gICAqIERlZmF1bHQgb3B0aW9ucyBmb3IgZXhwb3J0aW5nIENTViBmb3JtYXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWltZVR5cGU6ICd0ZXh0L2NzdicsXG4gICAgICBmaWxlRXh0ZW5zaW9uOiAnY3N2JyxcbiAgICAgIGJvbTogdHJ1ZSxcbiAgICAgIGNvbHVtbkRlbGltaXRlcjogJywnLFxuICAgICAgcm93RGVsaW1pdGVyOiAnXFxyXFxuJ1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHN0cmluZyBib2R5IGluIGRlc2lyZWQgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZXhwb3J0KCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtcbiAgICBsZXQgY29sdW1uSGVhZGVycyA9IHRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtcbiAgICBjb25zdCBoYXNDb2x1bW5IZWFkZXJzID0gY29sdW1uSGVhZGVycy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHJvd0hlYWRlcnMgPSB0aGlzLmRhdGFQcm92aWRlci5nZXRSb3dIZWFkZXJzKCk7XG4gICAgY29uc3QgaGFzUm93SGVhZGVycyA9IHJvd0hlYWRlcnMubGVuZ3RoID4gMDtcbiAgICBsZXQgcmVzdWx0ID0gb3B0aW9ucy5ib20gPyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RkVGRikgOiAnJztcbiAgICBpZiAoaGFzQ29sdW1uSGVhZGVycykge1xuICAgICAgY29sdW1uSGVhZGVycyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKGNvbHVtbkhlYWRlcnMsIHZhbHVlID0+IHRoaXMuX2VzY2FwZUNlbGwodmFsdWUsIHRydWUpKTtcbiAgICAgIGlmIChoYXNSb3dIZWFkZXJzKSB7XG4gICAgICAgIHJlc3VsdCArPSBvcHRpb25zLmNvbHVtbkRlbGltaXRlcjtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSBjb2x1bW5IZWFkZXJzLmpvaW4ob3B0aW9ucy5jb2x1bW5EZWxpbWl0ZXIpO1xuICAgICAgcmVzdWx0ICs9IG9wdGlvbnMucm93RGVsaW1pdGVyO1xuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZGF0YSwgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICByZXN1bHQgKz0gb3B0aW9ucy5yb3dEZWxpbWl0ZXI7XG4gICAgICB9XG4gICAgICBpZiAoaGFzUm93SGVhZGVycykge1xuICAgICAgICByZXN1bHQgKz0gdGhpcy5fZXNjYXBlQ2VsbChyb3dIZWFkZXJzW2luZGV4XSkgKyBvcHRpb25zLmNvbHVtbkRlbGltaXRlcjtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSB2YWx1ZS5tYXAoY2VsbFZhbHVlID0+IHRoaXMuX2VzY2FwZUNlbGwoY2VsbFZhbHVlKSkuam9pbihvcHRpb25zLmNvbHVtbkRlbGltaXRlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFc2NhcGUgY2VsbCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBDZWxsIHZhbHVlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZT1mYWxzZV0gSW5kaWNhdGVzIGlmIGNlbGwgdmFsdWUgd2lsbCBiZSBlc2NhcGVkIGZvcmNlZnVsbHkuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBfZXNjYXBlQ2VsbCh2YWx1ZSkge1xuICAgIGxldCBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgbGV0IGVzY2FwZWRWYWx1ZSA9ICgwLCBfbWl4ZWQuc3RyaW5naWZ5KSh2YWx1ZSk7XG4gICAgaWYgKGVzY2FwZWRWYWx1ZSAhPT0gJycgJiYgKGZvcmNlIHx8IGVzY2FwZWRWYWx1ZS5pbmRleE9mKENIQVJfQ0FSUklBR0VfUkVUVVJOKSA+PSAwIHx8IGVzY2FwZWRWYWx1ZS5pbmRleE9mKENIQVJfRE9VQkxFX1FVT1RFUykgPj0gMCB8fCBlc2NhcGVkVmFsdWUuaW5kZXhPZihDSEFSX0xJTkVfRkVFRCkgPj0gMCB8fCBlc2NhcGVkVmFsdWUuaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKSA+PSAwKSkge1xuICAgICAgZXNjYXBlZFZhbHVlID0gZXNjYXBlZFZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgnXCInLCAnZycpLCAnXCJcIicpO1xuICAgICAgZXNjYXBlZFZhbHVlID0gYFwiJHtlc2NhcGVkVmFsdWV9XCJgO1xuICAgIH1cbiAgICByZXR1cm4gZXNjYXBlZFZhbHVlO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBDc3Y7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2xvY2FsSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi8uLi9taXhpbnMvbG9jYWxIb29rc1wiKSk7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi8uLi90cmFuc2xhdGlvbnNcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgQmFzZUNvbXBvbmVudFxuICovXG5jbGFzcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgaWQsXG4gICAgICBzdGF0ZWxlc3MgPSB0cnVlXG4gICAgfSA9IF9yZWY7XG4gICAgLyoqXG4gICAgICogVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb21wb25lbnQgdW5pcSBpZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaWRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50IFVJIGVsZW1lbnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVsZW1lbnRzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgaWYgZWxlbWVudCBpcyBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoaWRkZW5cIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb21wb25lbnQgc3RhdGVzIGlkLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzdGF0ZUlkXCIsICcnKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBtYXAgd2hpY2ggc3RvcmVzIGNvbXBvbmVudCBzdGF0ZXMgZm9yIGVhY2ggY29sdW1uLlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwfG51bGx9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdGVcIiwgdm9pZCAwKTtcbiAgICB0aGlzLmhvdCA9IGhvdEluc3RhbmNlO1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnN0YXRlSWQgPSBgRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWA7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlbGVzcyA/IG51bGwgOiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQsIG5ldyBfdHJhbnNsYXRpb25zLkxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgZWxlbWVudHMgZnJvbSB3aGljaCB0aGUgY29tcG9uZW50IGlzIGJ1aWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7QmFzZVVJW119XG4gICAqL1xuICBnZXRFbGVtZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBlbGVtZW50cyB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmVsZW1lbnRzLCB1aSA9PiB1aS5yZXNldCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIGNvbXBvbmVudC5cbiAgICovXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgY29tcG9uZW50LlxuICAgKi9cbiAgc2hvdygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNvbXBvbmVudCBpcyBoaWRkZW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNIaWRkZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90ID09PSBudWxsIHx8IHRoaXMuaGlkZGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIHRoZSBjb21wb25lbnQgc3RhdGUgZnJvbSB0aGUgZ2l2ZW4gcGh5c2ljYWwgY29sdW1uIGluZGV4LiBUaGUgbWV0aG9kXG4gICAqIGludGVybmFsbHkgY2FsbHMgdGhlIGBzZXRTdGF0ZWAgbWV0aG9kLiBUaGUgc3RhdGUgdGhlbiBpcyBpbmRpdmlkdWFsbHkgcHJvY2Vzc2VkXG4gICAqIGJ5IGVhY2ggY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIHJlc3RvcmVTdGF0ZShwaHlzaWNhbENvbHVtbikge1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsQ29sdW1uKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b20gbG9naWMgZm9yIGNvbXBvbmVudCBzdGF0ZSByZXN0b3JpbmcuXG4gICAqL1xuICBzZXRTdGF0ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzdGF0ZSBzZXR0aW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjb21wb25lbnQgc3RhdGUgdG8gdGhlIGdpdmVuIHBoeXNpY2FsIGNvbHVtbiBpbmRleC4gVGhlIG1ldGhvZFxuICAgKiBpbnRlcm5hbGx5IGNhbGxzIHRoZSBgZ2V0U3RhdGVgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZlxuICAgKiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxDb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIHNhdmVTdGF0ZShwaHlzaWNhbENvbHVtbikge1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbENvbHVtbiwgdGhpcy5nZXRTdGF0ZSgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGN1c3RvbSBsb2dpYyBmb3IgY29tcG9uZW50IHN0YXRlIGdhdGhlcmluZyAoZm9yIHN0YXRlZnVsIGNvbXBvbmVudHMpLlxuICAgKi9cbiAgZ2V0U3RhdGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc3RhdGUgZ2F0aGVyaW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgZWxlbWVudC5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpO1xuICAgIHRoaXMuY2xlYXJMb2NhbEhvb2tzKCk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuZWxlbWVudHMsIHVpID0+IHVpLmRlc3Ryb3koKSk7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5lbGVtZW50cyA9IG51bGw7XG4gICAgdGhpcy5ob3QgPSBudWxsO1xuICB9XG59XG5leHBvcnRzLkJhc2VDb21wb25lbnQgPSBCYXNlQ29tcG9uZW50O1xuKDAsIF9vYmplY3QubWl4aW4pKEJhc2VDb21wb25lbnQsIF9sb2NhbEhvb2tzLmRlZmF1bHQpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX2lucHV0ID0gcmVxdWlyZShcIi4uL3VpL2lucHV0XCIpO1xudmFyIF9BY3Rpb25CYXJDb21wb25lbnQ7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBBY3Rpb25CYXJDb21wb25lbnRcbiAqL1xudmFyIF9BY3Rpb25CYXJDb21wb25lbnRfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIEFjdGlvbkJhckNvbXBvbmVudCBleHRlbmRzIF9iYXNlLkJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZ2V0IEJVVFRPTl9PSygpIHtcbiAgICByZXR1cm4gJ29rJztcbiAgfVxuICBzdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKSB7XG4gICAgcmV0dXJuICdjYW5jZWwnO1xuICB9XG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIoaG90SW5zdGFuY2UsIHtcbiAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgc3RhdGVsZXNzOiB0cnVlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogT24gYnV0dG9uIGNsaWNrIGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgRE9NIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7SW5wdXRVSX0gYnV0dG9uIElucHV0VUkgb2JqZWN0LlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQWN0aW9uQmFyQ29tcG9uZW50X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsICcnKTtcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBfaW5wdXQuSW5wdXRVSSh0aGlzLmhvdCwge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB2YWx1ZTogQy5GSUxURVJTX0JVVFRPTlNfT0ssXG4gICAgICBjbGFzc05hbWU6ICdodFVJQnV0dG9uIGh0VUlCdXR0b25PSycsXG4gICAgICBpZGVudGlmaWVyOiBBY3Rpb25CYXJDb21wb25lbnQuQlVUVE9OX09LXG4gICAgfSkpO1xuICAgIHRoaXMuZWxlbWVudHMucHVzaChuZXcgX2lucHV0LklucHV0VUkodGhpcy5ob3QsIHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdmFsdWU6IEMuRklMVEVSU19CVVRUT05TX0NBTkNFTCxcbiAgICAgIGNsYXNzTmFtZTogJ2h0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCcsXG4gICAgICBpZGVudGlmaWVyOiBBY3Rpb25CYXJDb21wb25lbnQuQlVUVE9OX0NBTkNFTFxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVySG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbGwgbmVjZXNzYXJ5IGhvb2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJIb29rcygpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5lbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICBlbGVtZW50LmFkZExvY2FsSG9vaygnY2xpY2snLCAoZXZlbnQsIGJ1dHRvbikgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0FjdGlvbkJhckNvbXBvbmVudF9icmFuZCwgdGhpcywgX29uQnV0dG9uQ2xpY2spLmNhbGwodGhpcywgZXZlbnQsIGJ1dHRvbikpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtZW51IG9iamVjdCBkZXNjcmlwdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBpc0NvbW1hbmQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZVNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIGhpZGRlbjogKCkgPT4gdGhpcy5pc0hpZGRlbigpLFxuICAgICAgcmVuZGVyZXI6IChob3QsIHdyYXBwZXIpID0+IHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh3cmFwcGVyLnBhcmVudE5vZGUsICdodEZpbHRlcnNNZW51QWN0aW9uQmFyJyk7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmVsZW1lbnRzLCB1aSA9PiB3cmFwcGVyLmFwcGVuZENoaWxkKHVpLmVsZW1lbnQpKTtcbiAgICAgICAgcmV0dXJuIHdyYXBwZXI7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlIGFjY2VwdCBldmVudC5cbiAgICovXG4gIGFjY2VwdCgpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FjY2VwdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmUgY2FuY2VsIGV2ZW50LlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnY2FuY2VsJyk7XG4gIH1cbn1cbmV4cG9ydHMuQWN0aW9uQmFyQ29tcG9uZW50ID0gQWN0aW9uQmFyQ29tcG9uZW50O1xuX0FjdGlvbkJhckNvbXBvbmVudCA9IEFjdGlvbkJhckNvbXBvbmVudDtcbmZ1bmN0aW9uIF9vbkJ1dHRvbkNsaWNrKGV2ZW50LCBidXR0b24pIHtcbiAgaWYgKGJ1dHRvbi5vcHRpb25zLmlkZW50aWZpZXIgPT09IF9BY3Rpb25CYXJDb21wb25lbnQuQlVUVE9OX09LKSB7XG4gICAgdGhpcy5hY2NlcHQoKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmNhbmNlbCgpO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF91bmljb2RlID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdW5pY29kZVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX2NvbnN0YW50czIgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vY29uc3RhbnRzXCIpKTtcbnZhciBfaW5wdXQgPSByZXF1aXJlKFwiLi4vdWkvaW5wdXRcIik7XG52YXIgX3NlbGVjdCA9IHJlcXVpcmUoXCIuLi91aS9zZWxlY3RcIik7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIENvbmRpdGlvbkNvbXBvbmVudFxuICovXG52YXIgX0NvbmRpdGlvbkNvbXBvbmVudF9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgQ29uZGl0aW9uQ29tcG9uZW50IGV4dGVuZHMgX2Jhc2UuQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIoaG90SW5zdGFuY2UsIHtcbiAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgc3RhdGVsZXNzOiBmYWxzZVxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIE9uIGNvbmRpdGlvbiBzZWxlY3QgbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29tbWFuZCBNZW51IGl0ZW0gb2JqZWN0IChjb21tYW5kKS5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0NvbmRpdGlvbkNvbXBvbmVudF9icmFuZCk7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibmFtZVwiLCAnJyk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiYWRkU2VwYXJhdG9yXCIsIGZhbHNlKTtcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5hZGRTZXBhcmF0b3IgPSBvcHRpb25zLmFkZFNlcGFyYXRvcjtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3IF9zZWxlY3QuU2VsZWN0VUkodGhpcy5ob3QsIHtcbiAgICAgIG1lbnVDb250YWluZXI6IG9wdGlvbnMubWVudUNvbnRhaW5lclxuICAgIH0pKTtcbiAgICB0aGlzLmVsZW1lbnRzLnB1c2gobmV3IF9pbnB1dC5JbnB1dFVJKHRoaXMuaG90LCB7XG4gICAgICBwbGFjZWhvbGRlcjogQy5GSUxURVJTX0JVVFRPTlNfUExBQ0VIT0xERVJfVkFMVUVcbiAgICB9KSk7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBfaW5wdXQuSW5wdXRVSSh0aGlzLmhvdCwge1xuICAgICAgcGxhY2Vob2xkZXI6IEMuRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRVxuICAgIH0pKTtcbiAgICB0aGlzLnJlZ2lzdGVySG9va3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbGwgbmVjZXNzYXJ5IGhvb2tzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJIb29rcygpIHtcbiAgICB0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soJ3NlbGVjdCcsIGNvbW1hbmQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0NvbmRpdGlvbkNvbXBvbmVudF9icmFuZCwgdGhpcywgX29uQ29uZGl0aW9uU2VsZWN0KS5jYWxsKHRoaXMsIGNvbW1hbmQpKS5hZGRMb2NhbEhvb2soJ2FmdGVyQ2xvc2UnLCAoKSA9PiB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyQ2xvc2UnKSkuYWRkTG9jYWxIb29rKCd0YWJLZXlkb3duJywgZXZlbnQgPT4gdGhpcy5ydW5Mb2NhbEhvb2tzKCdzZWxlY3RUYWJLZXlkb3duJywgZXZlbnQpKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksIGlucHV0ID0+IHtcbiAgICAgIGlucHV0LmFkZExvY2FsSG9vaygna2V5ZG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db25kaXRpb25Db21wb25lbnRfYnJhbmQsIHRoaXMsIF9vbklucHV0S2V5RG93bikuY2FsbCh0aGlzLCBldmVudCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgU3RhdGUgdG8gcmVzdG9yZS5cbiAgICovXG4gIHNldFN0YXRlKHZhbHVlKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29weU9mQ29tbWFuZCA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZS5jb21tYW5kKTtcbiAgICBpZiAoY29weU9mQ29tbWFuZC5uYW1lLnN0YXJ0c1dpdGgoQy5GSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFKSkge1xuICAgICAgY29weU9mQ29tbWFuZC5uYW1lID0gdGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShjb3B5T2ZDb21tYW5kLm5hbWUpO1xuICAgIH1cbiAgICB0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShjb3B5T2ZDb21tYW5kKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodmFsdWUuYXJncywgKGFyZywgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IGNvcHlPZkNvbW1hbmQuaW5wdXRzQ291bnQgLSAxKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmdldElucHV0RWxlbWVudChpbmRleCk7XG4gICAgICBlbGVtZW50LnNldFZhbHVlKGFyZyk7XG4gICAgICBlbGVtZW50W2NvcHlPZkNvbW1hbmQuaW5wdXRzQ291bnQgPiBpbmRleCA/ICdzaG93JyA6ICdoaWRlJ10oKTtcbiAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiBlbGVtZW50LmZvY3VzKCksIDEwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudCAoZ2V0IHNlbGVjdGVkIGZpbHRlciBhbmQgZmlsdGVyIGFyZ3VtZW50cykuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgb2JqZWN0IHdoZXJlIGBjb21tYW5kYCBrZXkga2VlcHMgdXNlZCBjb25kaXRpb24gZmlsdGVyIGFuZCBgYXJnc2Aga2V5IGl0cyBhcmd1bWVudHMuXG4gICAqL1xuICBnZXRTdGF0ZSgpIHtcbiAgICBjb25zdCBjb21tYW5kID0gdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKSB8fCAoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uRGVzY3JpcHRvcikoX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpO1xuICAgIGNvbnN0IGFyZ3MgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGNvbW1hbmQuaW5wdXRzQ291bnQgPiBpbmRleCkge1xuICAgICAgICBhcmdzLnB1c2goZWxlbWVudC5nZXRWYWx1ZSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZCxcbiAgICAgIGFyZ3NcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBzdGF0ZSBvZiBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb24gVGhlIGNvbmRpdGlvbiBvYmplY3QuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb24uY29tbWFuZCBUaGUgY29tbWFuZCBvYmplY3Qgd2l0aCBjb25kaXRpb24gbmFtZSBhcyBga2V5YCBwcm9wZXJ0eS5cbiAgICogQHBhcmFtIHtBcnJheX0gY29uZGl0aW9uLmFyZ3MgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gUGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKi9cbiAgdXBkYXRlU3RhdGUoY29uZGl0aW9uLCBjb2x1bW4pIHtcbiAgICBjb25zdCBjb21tYW5kID0gY29uZGl0aW9uID8gKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLmdldENvbmRpdGlvbkRlc2NyaXB0b3IpKGNvbmRpdGlvbi5uYW1lKSA6ICgwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5nZXRDb25kaXRpb25EZXNjcmlwdG9yKShfY29uc3RhbnRzMi5DT05ESVRJT05fTk9ORSk7XG4gICAgdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoY29sdW1uLCB7XG4gICAgICBjb21tYW5kLFxuICAgICAgYXJnczogY29uZGl0aW9uID8gY29uZGl0aW9uLmFyZ3MgOiBbXVxuICAgIH0pO1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksIGVsZW1lbnQgPT4gZWxlbWVudC5zZXRWYWx1ZShudWxsKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3QgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdFVJfVxuICAgKi9cbiAgZ2V0U2VsZWN0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50IGluc3RhbmNlb2YgX3NlbGVjdC5TZWxlY3RVSSlbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlucHV0IGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBhbiBhcnJheSBvZiBlbGVtZW50cy5cbiAgICogQHJldHVybnMge0lucHV0VUl9XG4gICAqL1xuICBnZXRJbnB1dEVsZW1lbnQoKSB7XG4gICAgbGV0IGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgIHJldHVybiB0aGlzLmdldElucHV0RWxlbWVudHMoKVtpbmRleF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGlucHV0IGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRJbnB1dEVsZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgaW5zdGFuY2VvZiBfaW5wdXQuSW5wdXRVSSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lbnUgb2JqZWN0IGRlc2NyaXB0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRNZW51SXRlbURlc2NyaXB0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGlzQ29tbWFuZDogZmFsc2UsXG4gICAgICBkaXNhYmxlU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgaGlkZGVuOiAoKSA9PiB0aGlzLmlzSGlkZGVuKCksXG4gICAgICByZW5kZXJlcjogKGhvdCwgd3JhcHBlciwgcm93LCBjb2wsIHByb3AsIHZhbHVlKSA9PiB7XG4gICAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykod3JhcHBlci5wYXJlbnROb2RlLCAnaHRGaWx0ZXJzTWVudUNvbmRpdGlvbicpO1xuICAgICAgICBpZiAodGhpcy5hZGRTZXBhcmF0b3IpIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHdyYXBwZXIucGFyZW50Tm9kZSwgJ2JvcmRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKGxhYmVsLCAnaHRGaWx0ZXJzTWVudUxhYmVsJyk7XG4gICAgICAgIGxhYmVsLnRleHRDb250ZW50ID0gdmFsdWU7XG4gICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobGFiZWwpO1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5lbGVtZW50cywgdWkgPT4gd3JhcHBlci5hcHBlbmRDaGlsZCh1aS5lbGVtZW50KSk7XG4gICAgICAgIHJldHVybiB3cmFwcGVyO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgZWxlbWVudHMgdG8gdGhlaXIgaW5pdGlhbCBzdGF0ZS5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uID0gdGhpcy5ob3QuZ2V0UGx1Z2luKCdmaWx0ZXJzJykuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtcbiAgICBsZXQgaXRlbXMgPSBbKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLmdldENvbmRpdGlvbkRlc2NyaXB0b3IpKF9jb25zdGFudHMyLkNPTkRJVElPTl9OT05FKV07XG4gICAgaWYgKHNlbGVjdGVkQ29sdW1uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZpc3VhbEluZGV4XG4gICAgICB9ID0gc2VsZWN0ZWRDb2x1bW47XG4gICAgICBpdGVtcyA9ICgwLCBfY29uc3RhbnRzMi5kZWZhdWx0KSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLCB2aXN1YWxJbmRleCwgdGhpcy5ob3QuY291bnRSb3dzKCksIHZpc3VhbEluZGV4KSk7XG4gICAgfVxuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmdldElucHV0RWxlbWVudHMoKSwgZWxlbWVudCA9PiBlbGVtZW50LmhpZGUoKSk7XG4gICAgdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoaXRlbXMpO1xuICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgLy8gU2VsZWN0IGVsZW1lbnQgYXMgZGVmYXVsdCAnTm9uZSdcbiAgICB0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShpdGVtc1swXSk7XG4gIH1cbn1cbmV4cG9ydHMuQ29uZGl0aW9uQ29tcG9uZW50ID0gQ29uZGl0aW9uQ29tcG9uZW50O1xuZnVuY3Rpb24gX29uQ29uZGl0aW9uU2VsZWN0KGNvbW1hbmQpIHtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBlbGVtZW50W2NvbW1hbmQuaW5wdXRzQ291bnQgPiBpbmRleCA/ICdzaG93JyA6ICdoaWRlJ10oKTtcbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCkgPT4gZWxlbWVudC5mb2N1cygpLCAxMCk7XG4gICAgfVxuICB9KTtcbiAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCBjb21tYW5kKTtcbn1cbi8qKlxuICogS2V5IGRvd24gbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIERPTSBldmVudCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9vbklucHV0S2V5RG93bihldmVudCkge1xuICBpZiAoKDAsIF91bmljb2RlLmlzS2V5KShldmVudC5rZXlDb2RlLCAnRVNDQVBFJykpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NhbmNlbCcpO1xuICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG52YXIgX2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyXCIpO1xudmFyIF9jb25qdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi9sb2dpY2FsT3BlcmF0aW9ucy9jb25qdW5jdGlvblwiKTtcbnZhciBfZGlzanVuY3Rpb24gPSByZXF1aXJlKFwiLi4vbG9naWNhbE9wZXJhdGlvbnMvZGlzanVuY3Rpb25cIik7XG52YXIgX2Rpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uID0gcmVxdWlyZShcIi4uL2xvZ2ljYWxPcGVyYXRpb25zL2Rpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uXCIpO1xudmFyIF9yYWRpb0lucHV0ID0gcmVxdWlyZShcIi4uL3VpL3JhZGlvSW5wdXRcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFNFTEVDVEVEX0FUX1NUQVJUX0VMRU1FTlRfSU5ERVggPSAwO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgT3BlcmF0b3JzQ29tcG9uZW50XG4gKi9cbnZhciBfT3BlcmF0b3JzQ29tcG9uZW50X2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBPcGVyYXRvcnNDb21wb25lbnQgZXh0ZW5kcyBfYmFzZS5CYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwge1xuICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICBzdGF0ZWxlc3M6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogT25DaGFuZ2UgbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgRE9NIGV2ZW50IG9iamVjdC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX09wZXJhdG9yc0NvbXBvbmVudF9icmFuZCk7XG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibmFtZVwiLCAnJyk7XG4gICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lO1xuICAgIHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lbnUgb2JqZWN0IGRlc2NyaXB0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRNZW51SXRlbURlc2NyaXB0b3IoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleTogdGhpcy5pZCxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGlzQ29tbWFuZDogZmFsc2UsXG4gICAgICBkaXNhYmxlU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgaGlkZGVuOiAoKSA9PiB0aGlzLmlzSGlkZGVuKCksXG4gICAgICByZW5kZXJlcjogKGhvdCwgd3JhcHBlcikgPT4ge1xuICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHdyYXBwZXIucGFyZW50Tm9kZSwgJ2h0RmlsdGVyc01lbnVPcGVyYXRvcnMnKTtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuZWxlbWVudHMsIHVpID0+IHdyYXBwZXIuYXBwZW5kQ2hpbGQodWkuZWxlbWVudCkpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBSYWRpb0lucHV0VUkgZWxlbWVudHMgdG8gY29tcG9uZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYnVpbGRPcGVyYXRvcnNFbGVtZW50KCkge1xuICAgIGNvbnN0IG9wZXJhdGlvbktleXMgPSBbX2Nvbmp1bmN0aW9uLk9QRVJBVElPTl9JRCwgX2Rpc2p1bmN0aW9uLk9QRVJBVElPTl9JRF07XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG9wZXJhdGlvbktleXMsIG9wZXJhdGlvbiA9PiB7XG4gICAgICBjb25zdCByYWRpb0lucHV0ID0gbmV3IF9yYWRpb0lucHV0LlJhZGlvSW5wdXRVSSh0aGlzLmhvdCwge1xuICAgICAgICBuYW1lOiAnb3BlcmF0b3InLFxuICAgICAgICBsYWJlbDoge1xuICAgICAgICAgIGh0bWxGb3I6IG9wZXJhdGlvbixcbiAgICAgICAgICB0ZXh0Q29udGVudDogKDAsIF9sb2dpY2FsT3BlcmF0aW9uUmVnaXN0ZXJlci5nZXRPcGVyYXRpb25OYW1lKShvcGVyYXRpb24pXG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiBvcGVyYXRpb24sXG4gICAgICAgIGNoZWNrZWQ6IG9wZXJhdGlvbiA9PT0gb3BlcmF0aW9uS2V5c1tTRUxFQ1RFRF9BVF9TVEFSVF9FTEVNRU5UX0lOREVYXSxcbiAgICAgICAgaWQ6IG9wZXJhdGlvblxuICAgICAgfSk7XG4gICAgICByYWRpb0lucHV0LmFkZExvY2FsSG9vaygnY2hhbmdlJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX09wZXJhdG9yc0NvbXBvbmVudF9icmFuZCwgdGhpcywgX29uUmFkaW9JbnB1dENoYW5nZSkuY2FsbCh0aGlzLCBldmVudCkpO1xuICAgICAgdGhpcy5lbGVtZW50cy5wdXNoKHJhZGlvSW5wdXQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzdGF0ZSBvZiBvcGVyYXRvcnMgY29tcG9uZW50IHRvIGNoZWNrIHJhZGlvIGlucHV0IGF0IHNwZWNpZmljIGBpbmRleGAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWFyY2hlZEluZGV4IEluZGV4IG9mIHJhZGlvIGlucHV0IHRvIGNoZWNrLlxuICAgKi9cbiAgc2V0Q2hlY2tlZChzZWFyY2hlZEluZGV4KSB7XG4gICAgaWYgKHRoaXMuZWxlbWVudHMubGVuZ3RoIDwgc2VhcmNoZWRJbmRleCkge1xuICAgICAgdGhyb3cgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke3NlYXJjaGVkSW5kZXh9IGRvZXNuJ3QgZXhpc3QuYCk7XG4gICAgfVxuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmVsZW1lbnRzLCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGVsZW1lbnQuc2V0Q2hlY2tlZChpbmRleCA9PT0gc2VhcmNoZWRJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGBpZGAgb2YgYWN0aXZlIG9wZXJhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRWxlbWVudCA9IHRoaXMuZWxlbWVudHMuZmluZChlbGVtZW50ID0+IGVsZW1lbnQgaW5zdGFuY2VvZiBfcmFkaW9JbnB1dC5SYWRpb0lucHV0VUkgJiYgZWxlbWVudC5pc0NoZWNrZWQoKSk7XG4gICAgaWYgKG9wZXJhdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBvcGVyYXRpb25FbGVtZW50LmdldFZhbHVlKCk7XG4gICAgfVxuICAgIHJldHVybiBfY29uanVuY3Rpb24uT1BFUkFUSU9OX0lEO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50IChnZXQgc2VsZWN0ZWQgb3BlcmF0b3IpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIGBpZGAgb2Ygc2VsZWN0ZWQgb3BlcmF0b3IuXG4gICAqL1xuICBnZXRTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVyYXRpb25JZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgU3RhdGUgdG8gcmVzdG9yZS5cbiAgICovXG4gIHNldFN0YXRlKHZhbHVlKSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkgIT09IHZhbHVlKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5lbGVtZW50cywgZWxlbWVudCA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0Q2hlY2tlZChlbGVtZW50LmdldFZhbHVlKCkgPT09IHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3RhdGUgb2YgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wZXJhdGlvbklkPSdjb25qdW5jdGlvbiddIElkIG9mIHNlbGVjdGVkIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBQaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICB1cGRhdGVTdGF0ZSgpIHtcbiAgICBsZXQgb3BlcmF0aW9uSWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IF9jb25qdW5jdGlvbi5PUEVSQVRJT05fSUQ7XG4gICAgbGV0IGNvbHVtbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIGxldCBzZWxlY3RlZE9wZXJhdGlvbklkID0gb3BlcmF0aW9uSWQ7XG4gICAgaWYgKHNlbGVjdGVkT3BlcmF0aW9uSWQgPT09IF9kaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbi5PUEVSQVRJT05fSUQpIHtcbiAgICAgIHNlbGVjdGVkT3BlcmF0aW9uSWQgPSBfZGlzanVuY3Rpb24uT1BFUkFUSU9OX0lEO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChjb2x1bW4sIHNlbGVjdGVkT3BlcmF0aW9uSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGVsZW1lbnRzIHRvIHRoZWlyIGluaXRpYWwgc3RhdGUuXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnNldENoZWNrZWQoU0VMRUNURURfQVRfU1RBUlRfRUxFTUVOVF9JTkRFWCk7XG4gIH1cbn1cbmV4cG9ydHMuT3BlcmF0b3JzQ29tcG9uZW50ID0gT3BlcmF0b3JzQ29tcG9uZW50O1xuZnVuY3Rpb24gX29uUmFkaW9JbnB1dENoYW5nZShldmVudCkge1xuICB0aGlzLnNldFN0YXRlKGV2ZW50LnRhcmdldC52YWx1ZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF91bmljb2RlID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdW5pY29kZVwiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi9fYmFzZVwiKTtcbnZhciBfbXVsdGlwbGVTZWxlY3QgPSByZXF1aXJlKFwiLi4vdWkvbXVsdGlwbGVTZWxlY3RcIik7XG52YXIgX2NvbnN0YW50czIgPSByZXF1aXJlKFwiLi4vY29uc3RhbnRzXCIpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG52YXIgX251bWVyaWNSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9yZW5kZXJlcnMvbnVtZXJpY1JlbmRlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgVmFsdWVDb21wb25lbnRcbiAqL1xudmFyIF9WYWx1ZUNvbXBvbmVudF9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgVmFsdWVDb21wb25lbnQgZXh0ZW5kcyBfYmFzZS5CYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwge1xuICAgICAgaWQ6IG9wdGlvbnMuaWQsXG4gICAgICBzdGF0ZWxlc3M6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogS2V5IGRvd24gbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgRE9NIGV2ZW50IG9iamVjdC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX1ZhbHVlQ29tcG9uZW50X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuYW1lXCIsICcnKTtcbiAgICB0aGlzLm5hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBfbXVsdGlwbGVTZWxlY3QuTXVsdGlwbGVTZWxlY3RVSSh0aGlzLmhvdCkpO1xuICAgIHRoaXMucmVnaXN0ZXJIb29rcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFsbCBuZWNlc3NhcnkgaG9va3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3Rlckhvb2tzKCkge1xuICAgIHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCdrZXlkb3duJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1ZhbHVlQ29tcG9uZW50X2JyYW5kLCB0aGlzLCBfb25JbnB1dEtleURvd24pLmNhbGwodGhpcywgZXZlbnQpKS5hZGRMb2NhbEhvb2soJ2xpc3RUYWJLZXlkb3duJywgZXZlbnQgPT4gdGhpcy5ydW5Mb2NhbEhvb2tzKCdsaXN0VGFiS2V5ZG93bicsIGV2ZW50KSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnbW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUnLCAodmFsdWUsIG1ldGEpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9WYWx1ZUNvbXBvbmVudF9icmFuZCwgdGhpcywgX29uTW9kaWZ5RGlzcGxheWVkVmFsdWUpLmNhbGwodGhpcywgdmFsdWUsIG1ldGEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGVsZW1lbnRzIGZyb20gd2hpY2ggdGhlIGNvbXBvbmVudCBpcyBidWlsdC5cbiAgICpcbiAgICogQHJldHVybnMge0Jhc2VVSVtdfVxuICAgKi9cbiAgZ2V0RWxlbWVudHMoKSB7XG4gICAgY29uc3Qgc2VsZWN0RWxlbWVudCA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7XG4gICAgcmV0dXJuIFtzZWxlY3RFbGVtZW50LmdldFNlYXJjaElucHV0RWxlbWVudCgpLCBzZWxlY3RFbGVtZW50LmdldFNlbGVjdEFsbEVsZW1lbnQoKSwgc2VsZWN0RWxlbWVudC5nZXRDbGVhckFsbEVsZW1lbnQoKSwgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKV07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZSBUaGUgY29tcG9uZW50IHZhbHVlLlxuICAgKi9cbiAgc2V0U3RhdGUodmFsdWUpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLmNvbW1hbmQua2V5ID09PSBfY29uc3RhbnRzMi5DT05ESVRJT05fQllfVkFMVUUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7XG4gICAgICBzZWxlY3Quc2V0SXRlbXModmFsdWUuaXRlbXNTbmFwc2hvdCk7XG4gICAgICBzZWxlY3Quc2V0VmFsdWUodmFsdWUuYXJnc1swXSk7XG4gICAgICBzZWxlY3Quc2V0TG9jYWxlKHZhbHVlLmxvY2FsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50IChnZXQgc2VsZWN0ZWQgZmlsdGVyIGFuZCBmaWx0ZXIgYXJndW1lbnRzKS5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBvYmplY3Qgd2hlcmUgYGNvbW1hbmRgIGtleSBrZWVwcyB1c2VkIGNvbmRpdGlvbiBmaWx0ZXIgYW5kIGBhcmdzYCBrZXkgaXRzIGFyZ3VtZW50cy5cbiAgICovXG4gIGdldFN0YXRlKCkge1xuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7XG4gICAgY29uc3QgYXZhaWxhYmxlSXRlbXMgPSBzZWxlY3QuZ2V0SXRlbXMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY29tbWFuZDoge1xuICAgICAgICBrZXk6IHNlbGVjdC5pc1NlbGVjdGVkQWxsVmFsdWVzKCkgfHwgIWF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA/IF9jb25zdGFudHMyLkNPTkRJVElPTl9OT05FIDogX2NvbnN0YW50czIuQ09ORElUSU9OX0JZX1ZBTFVFXG4gICAgICB9LFxuICAgICAgYXJnczogW3NlbGVjdC5nZXRWYWx1ZSgpXSxcbiAgICAgIGl0ZW1zU25hcHNob3Q6IGF2YWlsYWJsZUl0ZW1zXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgc3RhdGUgb2YgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3RhdGVJbmZvIEluZm9ybWF0aW9uIGFib3V0IHN0YXRlIGNvbnRhaW5pbmcgc3RhY2sgb2YgZWRpdGVkIGNvbHVtbixcbiAgICogc3RhY2sgb2YgZGVwZW5kZW50IGNvbmRpdGlvbnMsIGRhdGEgZmFjdG9yeSBhbmQgb3B0aW9uYWwgY29uZGl0aW9uIGFyZ3VtZW50cyBjaGFuZ2UuIEl0J3MgZGVzY3JpYmVkIGJ5IG9iamVjdCBjb250YWluaW5nIGtleXM6XG4gICAqIGBlZGl0ZWRDb25kaXRpb25TdGFja2AsIGBkZXBlbmRlbnRDb25kaXRpb25TdGFja3NgLCBgdmlzaWJsZURhdGFGYWN0b3J5YCBhbmQgYGNvbmRpdGlvbkFyZ3NDaGFuZ2VgLlxuICAgKi9cbiAgdXBkYXRlU3RhdGUoc3RhdGVJbmZvKSB7XG4gICAgY29uc3QgdXBkYXRlQ29sdW1uU3RhdGUgPSAocGh5c2ljYWxDb2x1bW4sIGNvbmRpdGlvbnMsIGNvbmRpdGlvbkFyZ3NDaGFuZ2UsIGZpbHRlcmVkUm93c0ZhY3RvcnksIGNvbmRpdGlvbnNTdGFjaykgPT4ge1xuICAgICAgY29uc3QgW2ZpcnN0QnlWYWx1ZUNvbmRpdGlvbl0gPSAoMCwgX2FycmF5LmFycmF5RmlsdGVyKShjb25kaXRpb25zLCBjb25kaXRpb24gPT4gY29uZGl0aW9uLm5hbWUgPT09IF9jb25zdGFudHMyLkNPTkRJVElPTl9CWV9WQUxVRSk7XG4gICAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgICAgY29uc3QgZGVmYXVsdEJsYW5rQ2VsbFZhbHVlID0gdGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTKTtcbiAgICAgIGlmIChmaXJzdEJ5VmFsdWVDb25kaXRpb24pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZmlsdGVyZWRSb3dzRmFjdG9yeShwaHlzaWNhbENvbHVtbiwgY29uZGl0aW9uc1N0YWNrKTtcbiAgICAgICAgY29uc3Qgcm93VmFsdWVzID0gKDAsIF9hcnJheS5hcnJheU1hcCkoZmlsdGVyZWRSb3dzLCByb3cgPT4gcm93LnZhbHVlKTtcbiAgICAgICAgY29uc3Qgcm93TWV0YU1hcCA9IG5ldyBNYXAoZmlsdGVyZWRSb3dzLm1hcChyb3cgPT4gW3Jvdy52YWx1ZSwgdGhpcy5ob3QuZ2V0Q2VsbE1ldGEocm93Lm1ldGEudmlzdWFsUm93LCByb3cubWV0YS52aXN1YWxDb2wpXSkpO1xuICAgICAgICBjb25zdCB1bmlmaWVkUm93VmFsdWVzID0gKDAsIF91dGlscy51bmlmeUNvbHVtblZhbHVlcykocm93VmFsdWVzKTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbkFyZ3NDaGFuZ2UpIHtcbiAgICAgICAgICBmaXJzdEJ5VmFsdWVDb25kaXRpb24uYXJnc1swXSA9IGNvbmRpdGlvbkFyZ3NDaGFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlbXNTbmFwc2hvdCA9ICgwLCBfdXRpbHMuaW50ZXJzZWN0VmFsdWVzKSh1bmlmaWVkUm93VmFsdWVzLCBmaXJzdEJ5VmFsdWVDb25kaXRpb24uYXJnc1swXSwgZGVmYXVsdEJsYW5rQ2VsbFZhbHVlLCBpdGVtID0+IHtcbiAgICAgICAgICBpZiAoaXRlbS5jaGVja2VkKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFZhbHVlcy5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfYXNzZXJ0Q2xhc3NCcmFuZChfVmFsdWVDb21wb25lbnRfYnJhbmQsIHRoaXMsIF90cmlnZ2VyTW9kaWZ5TXVsdGlwbGVTZWxlY3Rpb25WYWx1ZUhvb2spLmNhbGwodGhpcywgaXRlbSwgcm93TWV0YU1hcCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBzdGF0ZUluZm8uZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uO1xuICAgICAgICBzdGF0ZS5sb2NhbGUgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLCBjb2x1bW4pLmxvY2FsZTtcbiAgICAgICAgc3RhdGUuYXJncyA9IFtzZWxlY3RlZFZhbHVlc107XG4gICAgICAgIHN0YXRlLmNvbW1hbmQgPSAoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uRGVzY3JpcHRvcikoX2NvbnN0YW50czIuQ09ORElUSU9OX0JZX1ZBTFVFKTtcbiAgICAgICAgc3RhdGUuaXRlbXNTbmFwc2hvdCA9IGl0ZW1zU25hcHNob3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5hcmdzID0gW107XG4gICAgICAgIHN0YXRlLmNvbW1hbmQgPSAoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uRGVzY3JpcHRvcikoX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxDb2x1bW4sIHN0YXRlKTtcbiAgICB9O1xuICAgIHVwZGF0ZUNvbHVtblN0YXRlKHN0YXRlSW5mby5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sIHN0YXRlSW5mby5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLCBzdGF0ZUluZm8uY29uZGl0aW9uQXJnc0NoYW5nZSwgc3RhdGVJbmZvLmZpbHRlcmVkUm93c0ZhY3RvcnkpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBuZXh0IFwiYnlfdmFsdWVcIiBjb21wb25lbnQgKGZpbHRlciBjb2x1bW4gY29uZGl0aW9ucyBhZGRlZCBhZnRlciB0aGlzIGNvbmRpdGlvbikuXG4gICAgLy8gSXRzIGxpc3Qgb2YgdmFsdWVzIGhhcyB0byBiZSB1cGRhdGVkLiBBcyB0aGUgbmV3IHZhbHVlcyBieSBkZWZhdWx0IGFyZSB1bmNoZWNrZWQsXG4gICAgLy8gdGhlIGZ1cnRoZXIgY29tcG9uZW50IHVwZGF0ZSBpcyB1bm5lY2Vzc2FyeS5cbiAgICBpZiAoc3RhdGVJbmZvLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgpIHtcbiAgICAgIHVwZGF0ZUNvbHVtblN0YXRlKHN0YXRlSW5mby5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLCBzdGF0ZUluZm8uZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsIHN0YXRlSW5mby5jb25kaXRpb25BcmdzQ2hhbmdlLCBzdGF0ZUluZm8uZmlsdGVyZWRSb3dzRmFjdG9yeSwgc3RhdGVJbmZvLmVkaXRlZENvbmRpdGlvblN0YWNrKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IG11bHRpcGxlIHNlbGVjdCBlbGVtZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TXVsdGlwbGVTZWxlY3RVSX1cbiAgICovXG4gIGdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50IGluc3RhbmNlb2YgX211bHRpcGxlU2VsZWN0Lk11bHRpcGxlU2VsZWN0VUkpWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvYmplY3QgZGVzY3JpcHRvciBmb3IgbWVudSBpdGVtIGVudHJ5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHRoaXMuaWQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBpc0NvbW1hbmQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZVNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgIGhpZGRlbjogKCkgPT4gdGhpcy5pc0hpZGRlbigpLFxuICAgICAgcmVuZGVyZXI6IChob3QsIHdyYXBwZXIsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSkgPT4ge1xuICAgICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHdyYXBwZXIucGFyZW50Tm9kZSwgJ2h0RmlsdGVyc01lbnVWYWx1ZScpO1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShsYWJlbCwgJ2h0RmlsdGVyc01lbnVMYWJlbCcpO1xuICAgICAgICBsYWJlbC50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuZWxlbWVudHMsIHVpID0+IHdyYXBwZXIuYXBwZW5kQ2hpbGQodWkuZWxlbWVudCkpO1xuICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IGVsZW1lbnRzIHRvIHRoZWlyIGluaXRpYWwgc3RhdGUuXG4gICAqL1xuICByZXNldCgpIHtcbiAgICBjb25zdCBkZWZhdWx0QmxhbmtDZWxsVmFsdWUgPSB0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuRklMVEVSU19WQUxVRVNfQkxBTktfQ0VMTFMpO1xuICAgIGNvbnN0IHJvd0VudHJpZXMgPSB0aGlzLl9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCk7XG4gICAgY29uc3Qgcm93VmFsdWVzID0gcm93RW50cmllcy5tYXAoZW50cnkgPT4gZW50cnkudmFsdWUpO1xuICAgIGNvbnN0IHJvd01ldGFNYXAgPSBuZXcgTWFwKHJvd0VudHJpZXMubWFwKHJvdyA9PiBbcm93LnZhbHVlLCByb3cubWV0YV0pKTtcbiAgICBjb25zdCB2YWx1ZXMgPSAoMCwgX3V0aWxzLnVuaWZ5Q29sdW1uVmFsdWVzKShyb3dWYWx1ZXMpO1xuICAgIGNvbnN0IGl0ZW1zID0gKDAsIF91dGlscy5pbnRlcnNlY3RWYWx1ZXMpKHZhbHVlcywgdmFsdWVzLCBkZWZhdWx0QmxhbmtDZWxsVmFsdWUsIGl0ZW0gPT4ge1xuICAgICAgX2Fzc2VydENsYXNzQnJhbmQoX1ZhbHVlQ29tcG9uZW50X2JyYW5kLCB0aGlzLCBfdHJpZ2dlck1vZGlmeU11bHRpcGxlU2VsZWN0aW9uVmFsdWVIb29rKS5jYWxsKHRoaXMsIGl0ZW0sIHJvd01ldGFNYXApO1xuICAgIH0pO1xuICAgIHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoaXRlbXMpO1xuICAgIHN1cGVyLnJlc2V0KCk7XG4gICAgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZSh2YWx1ZXMpO1xuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uID0gdGhpcy5ob3QuZ2V0UGx1Z2luKCdmaWx0ZXJzJykuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW4gIT09IG51bGwpIHtcbiAgICAgIHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRhKDAsIHNlbGVjdGVkQ29sdW1uLnZpc3VhbEluZGV4KS5sb2NhbGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IGRhdGEgZm9yIGN1cnJlbnRseSBzZWxlY3RlZCBjb2x1bW4uXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkQ29sdW1uID0gdGhpcy5ob3QuZ2V0UGx1Z2luKCdmaWx0ZXJzJykuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlNYXApKHRoaXMuaG90LmdldERhdGFBdENvbChzZWxlY3RlZENvbHVtbi52aXN1YWxJbmRleCksICh2LCByb3dJbmRleCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6ICgwLCBfdXRpbHMudG9FbXB0eVN0cmluZykodiksXG4gICAgICAgIG1ldGE6IHRoaXMuaG90LmdldENlbGxNZXRhKHJvd0luZGV4LCBzZWxlY3RlZENvbHVtbi52aXN1YWxJbmRleClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydHMuVmFsdWVDb21wb25lbnQgPSBWYWx1ZUNvbXBvbmVudDtcbmZ1bmN0aW9uIF9vbklucHV0S2V5RG93bihldmVudCkge1xuICBpZiAoKDAsIF91bmljb2RlLmlzS2V5KShldmVudC5rZXlDb2RlLCAnRVNDQVBFJykpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NhbmNlbCcpO1xuICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gIH1cbn1cbi8qKlxuICogVHJpZ2dlciB0aGUgYG1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlYCBob29rLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBpdGVtIEl0ZW0gZnJvbSB0aGUgbXVsdGlwbGUgc2VsZWN0IGxpc3QuXG4gKiBAcGFyYW0ge01hcH0gbWV0YU1hcCBNYXAgb2Ygcm93IG1ldGEgb2JqZWN0cy5cbiAqL1xuZnVuY3Rpb24gX3RyaWdnZXJNb2RpZnlNdWx0aXBsZVNlbGVjdGlvblZhbHVlSG9vayhpdGVtLCBtZXRhTWFwKSB7XG4gIGlmICh0aGlzLmhvdC5oYXNIb29rKCdtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZScpKSB7XG4gICAgaXRlbS52aXN1YWxWYWx1ZSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZScsIGl0ZW0udmlzdWFsVmFsdWUsIG1ldGFNYXAuZ2V0KGl0ZW0udmFsdWUpKTtcbiAgfVxufVxuLyoqXG4gKiBNb2RpZnkgdGhlIHZhbHVlIGRpc3BsYXllZCBpbiB0aGUgbXVsdGlwbGUgc2VsZWN0IGxpc3QuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDZWxsIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IG1ldGEgVGhlIGNlbGwgbWV0YSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbW9kaWZpZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeURpc3BsYXllZFZhbHVlKHZhbHVlLCBtZXRhKSB7XG4gIHN3aXRjaCAobWV0YS50eXBlKSB7XG4gICAgY2FzZSAnbnVtZXJpYyc6XG4gICAgICByZXR1cm4gKDAsIF9udW1lcmljUmVuZGVyZXIuZ2V0UmVuZGVyZWRWYWx1ZSkodmFsdWUsIG1ldGEpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnYmVnaW5zX3dpdGgnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHsqfSBpbnB1dFZhbHVlcy5cIjBcIiBWYWx1ZSB0byBjaGVjayBpZiBpdCBvY2N1cnMgYXQgdGhlIGJlZ2lubmluZy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgX3JlZikge1xuICBsZXQgW3ZhbHVlXSA9IF9yZWY7XG4gIHJldHVybiAoMCwgX21peGVkLnN0cmluZ2lmeSkoZGF0YVJvdy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoZGF0YVJvdy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aCgoMCwgX21peGVkLnN0cmluZ2lmeSkodmFsdWUpKTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19CRUdJTlNfV0lUSCxcbiAgaW5wdXRzQ291bnQ6IDEsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbnZhciBfYWZ0ZXIgPSByZXF1aXJlKFwiLi9kYXRlL2FmdGVyXCIpO1xudmFyIF9iZWZvcmUgPSByZXF1aXJlKFwiLi9kYXRlL2JlZm9yZVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IENPTkRJVElPTl9OQU1FID0gZXhwb3J0cy5DT05ESVRJT05fTkFNRSA9ICdiZXR3ZWVuJztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnB1dFZhbHVlcy5cIjBcIiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5wdXRWYWx1ZXMuXCIxXCIgVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIHJhbmdlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbihkYXRhUm93LCBfcmVmKSB7XG4gIGxldCBbZnJvbSwgdG9dID0gX3JlZjtcbiAgbGV0IGZyb21WYWx1ZSA9IGZyb207XG4gIGxldCB0b1ZhbHVlID0gdG87XG4gIGlmIChkYXRhUm93Lm1ldGEudHlwZSA9PT0gJ251bWVyaWMnKSB7XG4gICAgY29uc3QgX2Zyb20gPSBwYXJzZUZsb2F0KGZyb21WYWx1ZSwgMTApO1xuICAgIGNvbnN0IF90byA9IHBhcnNlRmxvYXQodG9WYWx1ZSwgMTApO1xuICAgIGZyb21WYWx1ZSA9IE1hdGgubWluKF9mcm9tLCBfdG8pO1xuICAgIHRvVmFsdWUgPSBNYXRoLm1heChfZnJvbSwgX3RvKTtcbiAgfSBlbHNlIGlmIChkYXRhUm93Lm1ldGEudHlwZSA9PT0gJ2RhdGUnKSB7XG4gICAgY29uc3QgZGF0ZUJlZm9yZSA9ICgwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5nZXRDb25kaXRpb24pKF9iZWZvcmUuQ09ORElUSU9OX05BTUUsIFt0b1ZhbHVlXSk7XG4gICAgY29uc3QgZGF0ZUFmdGVyID0gKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLmdldENvbmRpdGlvbikoX2FmdGVyLkNPTkRJVElPTl9OQU1FLCBbZnJvbVZhbHVlXSk7XG4gICAgcmV0dXJuIGRhdGVCZWZvcmUoZGF0YVJvdykgJiYgZGF0ZUFmdGVyKGRhdGFSb3cpO1xuICB9XG4gIHJldHVybiBkYXRhUm93LnZhbHVlID49IGZyb21WYWx1ZSAmJiBkYXRhUm93LnZhbHVlIDw9IHRvVmFsdWU7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTixcbiAgaW5wdXRzQ291bnQ6IDIsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnYnlfdmFsdWUnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW5wdXRWYWx1ZXMuXCIwXCIgQSBmdW5jdGlvbiB0byBjb21wYXJlIHJvdydzIGRhdGEuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3csIF9yZWYpIHtcbiAgbGV0IFt2YWx1ZV0gPSBfcmVmO1xuICByZXR1cm4gdmFsdWUoZGF0YVJvdy52YWx1ZSk7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogJ0J5IHZhbHVlJyxcbiAgaW5wdXRzQ291bnQ6IDAsXG4gIGlucHV0VmFsdWVzRGVjb3JhdG9yKF9yZWYyKSB7XG4gICAgbGV0IFtkYXRhXSA9IF9yZWYyO1xuICAgIHJldHVybiBbKDAsIF91dGlscy5jcmVhdGVBcnJheUFzc2VydGlvbikoZGF0YSldO1xuICB9LFxuICBzaG93T3BlcmF0b3JzOiBmYWxzZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ2NvbnRhaW5zJztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gaW5wdXRWYWx1ZXMuXCIwXCIgQSB2YWx1ZSB0byBjaGVjayBpZiBpdCBvY2N1cnMgaW4gdGhlIHJvdydzIGRhdGEuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3csIF9yZWYpIHtcbiAgbGV0IFt2YWx1ZV0gPSBfcmVmO1xuICByZXR1cm4gKDAsIF9taXhlZC5zdHJpbmdpZnkpKGRhdGFSb3cudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGRhdGFSb3cubWV0YS5sb2NhbGUpLmluZGV4T2YoKDAsIF9taXhlZC5zdHJpbmdpZnkpKHZhbHVlKSkgPj0gMDtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19DT05UQUlOUyxcbiAgaW5wdXRzQ291bnQ6IDEsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnZGF0ZV9hZnRlcic7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGFSb3cgVGhlIG9iamVjdCB3aGljaCBob2xkcyBhbmQgZGVzY3JpYmVzIHRoZSBzaW5nbGUgY2VsbCB2YWx1ZS5cbiAqIEBwYXJhbSB7QXJyYXl9IGlucHV0VmFsdWVzIEFuIGFycmF5IG9mIHZhbHVlcyB0byBjb21wYXJlIHdpdGguXG4gKiBAcGFyYW0geyp9IGlucHV0VmFsdWVzLlwiMFwiIE1pbmltdW0gZGF0ZSBvZiBhIHJhbmdlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbihkYXRhUm93LCBfcmVmKSB7XG4gIGxldCBbdmFsdWVdID0gX3JlZjtcbiAgY29uc3QgZGF0ZSA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGFSb3cudmFsdWUsIGRhdGFSb3cubWV0YS5kYXRlRm9ybWF0KTtcbiAgY29uc3QgaW5wdXREYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkodmFsdWUsIGRhdGFSb3cubWV0YS5kYXRlRm9ybWF0KTtcbiAgaWYgKCFkYXRlLmlzVmFsaWQoKSB8fCAhaW5wdXREYXRlLmlzVmFsaWQoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZGF0ZS5kaWZmKGlucHV0RGF0ZSkgPj0gMDtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19BRlRFUixcbiAgaW5wdXRzQ291bnQ6IDEsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnZGF0ZV9iZWZvcmUnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHsqfSBpbnB1dFZhbHVlcy5cIjBcIiBNYXhpbXVtIGRhdGUgb2YgYSByYW5nZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgX3JlZikge1xuICBsZXQgW3ZhbHVlXSA9IF9yZWY7XG4gIGNvbnN0IGRhdGUgPSAoMCwgX21vbWVudC5kZWZhdWx0KShkYXRhUm93LnZhbHVlLCBkYXRhUm93Lm1ldGEuZGF0ZUZvcm1hdCk7XG4gIGNvbnN0IGlucHV0RGF0ZSA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKHZhbHVlLCBkYXRhUm93Lm1ldGEuZGF0ZUZvcm1hdCk7XG4gIGlmICghZGF0ZS5pc1ZhbGlkKCkgfHwgIWlucHV0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRhdGUuZGlmZihpbnB1dERhdGUpIDw9IDA7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfQkVGT1JFLFxuICBpbnB1dHNDb3VudDogMSxcbiAgc2hvd09wZXJhdG9yczogdHJ1ZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBfbW9tZW50ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwibW9tZW50XCIpKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi8uLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IENPTkRJVElPTl9OQU1FID0gZXhwb3J0cy5DT05ESVRJT05fTkFNRSA9ICdkYXRlX3RvZGF5JztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbihkYXRhUm93KSB7XG4gIGNvbnN0IGRhdGUgPSAoMCwgX21vbWVudC5kZWZhdWx0KShkYXRhUm93LnZhbHVlLCBkYXRhUm93Lm1ldGEuZGF0ZUZvcm1hdCk7XG4gIGlmICghZGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGRhdGUuaXNTYW1lKCgwLCBfbW9tZW50LmRlZmF1bHQpKCkuc3RhcnRPZignZGF5JyksICdkJyk7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfVE9EQVksXG4gIGlucHV0c0NvdW50OiAwXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIF9tb21lbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uLy4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ2RhdGVfdG9tb3Jyb3cnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3cpIHtcbiAgY29uc3QgZGF0ZSA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGFSb3cudmFsdWUsIGRhdGFSb3cubWV0YS5kYXRlRm9ybWF0KTtcbiAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZGF0ZS5pc1NhbWUoKDAsIF9tb21lbnQuZGVmYXVsdCkoKS5zdWJ0cmFjdCgtMSwgJ2RheXMnKS5zdGFydE9mKCdkYXknKSwgJ2QnKTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVyxcbiAgaW5wdXRzQ291bnQ6IDBcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnZGF0ZV95ZXN0ZXJkYXknO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3cpIHtcbiAgY29uc3QgZGF0ZSA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGFSb3cudmFsdWUsIGRhdGFSb3cubWV0YS5kYXRlRm9ybWF0KTtcbiAgaWYgKCFkYXRlLmlzVmFsaWQoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZGF0ZS5pc1NhbWUoKDAsIF9tb21lbnQuZGVmYXVsdCkoKS5zdWJ0cmFjdCgxLCAnZGF5cycpLnN0YXJ0T2YoJ2RheScpLCAnZCcpO1xufVxuKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLnJlZ2lzdGVyQ29uZGl0aW9uKShDT05ESVRJT05fTkFNRSwgY29uZGl0aW9uLCB7XG4gIG5hbWU6IEMuRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWSxcbiAgaW5wdXRzQ291bnQ6IDBcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IENPTkRJVElPTl9OQU1FID0gZXhwb3J0cy5DT05ESVRJT05fTkFNRSA9ICdlbXB0eSc7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGFSb3cgVGhlIG9iamVjdCB3aGljaCBob2xkcyBhbmQgZGVzY3JpYmVzIHRoZSBzaW5nbGUgY2VsbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdykge1xuICByZXR1cm4gKDAsIF9taXhlZC5pc0VtcHR5KShkYXRhUm93LnZhbHVlKTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19FTVBUWSxcbiAgaW5wdXRzQ291bnQ6IDAsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IENPTkRJVElPTl9OQU1FID0gZXhwb3J0cy5DT05ESVRJT05fTkFNRSA9ICdlbmRzX3dpdGgnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHsqfSBpbnB1dFZhbHVlcy5cIjBcIiBWYWx1ZSB0byBjaGVjayBpZiBpdCBvY2N1cnMgYXQgdGhlIGVuZC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgX3JlZikge1xuICBsZXQgW3ZhbHVlXSA9IF9yZWY7XG4gIHJldHVybiAoMCwgX21peGVkLnN0cmluZ2lmeSkoZGF0YVJvdy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoZGF0YVJvdy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgoKDAsIF9taXhlZC5zdHJpbmdpZnkpKHZhbHVlKSk7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfRU5EU19XSVRILFxuICBpbnB1dHNDb3VudDogMSxcbiAgc2hvd09wZXJhdG9yczogdHJ1ZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ2VxJztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7QXJyYXl9IGlucHV0VmFsdWVzLlwiMFwiIFZhbHVlIHRvIGNoZWNrIGlmIGl0IHNhbWUgYXMgcm93J3MgZGF0YS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgX3JlZikge1xuICBsZXQgW3ZhbHVlXSA9IF9yZWY7XG4gIHJldHVybiAoMCwgX21peGVkLnN0cmluZ2lmeSkoZGF0YVJvdy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoZGF0YVJvdy5tZXRhLmxvY2FsZSkgPT09ICgwLCBfbWl4ZWQuc3RyaW5naWZ5KSh2YWx1ZSk7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfRVFVQUwsXG4gIGlucHV0c0NvdW50OiAxLFxuICBzaG93T3BlcmF0b3JzOiB0cnVlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnZmFsc2UnO1xuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiAnRmFsc2UnXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnZ3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHthbnl9IGlucHV0VmFsdWVzLlwiMFwiIENvbmRpdGlvbiB2YWx1ZSB0byBjb21wYXJlIG51bWJlcnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3csIF9yZWYpIHtcbiAgbGV0IFt2YWx1ZV0gPSBfcmVmO1xuICBsZXQgY29uZGl0aW9uVmFsdWUgPSB2YWx1ZTtcbiAgaWYgKGRhdGFSb3cubWV0YS50eXBlID09PSAnbnVtZXJpYycpIHtcbiAgICBjb25kaXRpb25WYWx1ZSA9IHBhcnNlRmxvYXQoY29uZGl0aW9uVmFsdWUsIDEwKTtcbiAgfVxuICByZXR1cm4gZGF0YVJvdy52YWx1ZSA+IGNvbmRpdGlvblZhbHVlO1xufVxuKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLnJlZ2lzdGVyQ29uZGl0aW9uKShDT05ESVRJT05fTkFNRSwgY29uZGl0aW9uLCB7XG4gIG5hbWU6IEMuRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTixcbiAgaW5wdXRzQ291bnQ6IDEsXG4gIHNob3dPcGVyYXRvcnM6IHRydWVcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb25kaXRpb24gPSBjb25kaXRpb247XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmNvbnN0IENPTkRJVElPTl9OQU1FID0gZXhwb3J0cy5DT05ESVRJT05fTkFNRSA9ICdndGUnO1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhUm93IFRoZSBvYmplY3Qgd2hpY2ggaG9sZHMgYW5kIGRlc2NyaWJlcyB0aGUgc2luZ2xlIGNlbGwgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnB1dFZhbHVlcyBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gY29tcGFyZSB3aXRoLlxuICogQHBhcmFtIHsqfSBpbnB1dFZhbHVlcy5cIjBcIiBDb25kaXRpb24gdmFsdWUgdG8gY29tcGFyZSBudW1iZXJzLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbihkYXRhUm93LCBfcmVmKSB7XG4gIGxldCBbdmFsdWVdID0gX3JlZjtcbiAgbGV0IGNvbmRpdGlvblZhbHVlID0gdmFsdWU7XG4gIGlmIChkYXRhUm93Lm1ldGEudHlwZSA9PT0gJ251bWVyaWMnKSB7XG4gICAgY29uZGl0aW9uVmFsdWUgPSBwYXJzZUZsb2F0KGNvbmRpdGlvblZhbHVlLCAxMCk7XG4gIH1cbiAgcmV0dXJuIGRhdGFSb3cudmFsdWUgPj0gY29uZGl0aW9uVmFsdWU7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMLFxuICBpbnB1dHNDb3VudDogMSxcbiAgc2hvd09wZXJhdG9yczogdHJ1ZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ2x0JztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gaW5wdXRWYWx1ZXMuXCIwXCIgQ29uZGl0aW9uIHZhbHVlIHRvIGNvbXBhcmUgbnVtYmVycy5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgX3JlZikge1xuICBsZXQgW3ZhbHVlXSA9IF9yZWY7XG4gIGxldCBjb25kaXRpb25WYWx1ZSA9IHZhbHVlO1xuICBpZiAoZGF0YVJvdy5tZXRhLnR5cGUgPT09ICdudW1lcmljJykge1xuICAgIGNvbmRpdGlvblZhbHVlID0gcGFyc2VGbG9hdChjb25kaXRpb25WYWx1ZSwgMTApO1xuICB9XG4gIHJldHVybiBkYXRhUm93LnZhbHVlIDwgY29uZGl0aW9uVmFsdWU7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOLFxuICBpbnB1dHNDb3VudDogMSxcbiAgc2hvd09wZXJhdG9yczogdHJ1ZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ2x0ZSc7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGFSb3cgVGhlIG9iamVjdCB3aGljaCBob2xkcyBhbmQgZGVzY3JpYmVzIHRoZSBzaW5nbGUgY2VsbCB2YWx1ZS5cbiAqIEBwYXJhbSB7QXJyYXl9IGlucHV0VmFsdWVzIEFuIGFycmF5IG9mIHZhbHVlcyB0byBjb21wYXJlIHdpdGguXG4gKiBAcGFyYW0geyp9IGlucHV0VmFsdWVzLlwiMFwiIENvbmRpdGlvbiB2YWx1ZSB0byBjb21wYXJlIG51bWJlcnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3csIF9yZWYpIHtcbiAgbGV0IFt2YWx1ZV0gPSBfcmVmO1xuICBsZXQgY29uZGl0aW9uVmFsdWUgPSB2YWx1ZTtcbiAgaWYgKGRhdGFSb3cubWV0YS50eXBlID09PSAnbnVtZXJpYycpIHtcbiAgICBjb25kaXRpb25WYWx1ZSA9IHBhcnNlRmxvYXQoY29uZGl0aW9uVmFsdWUsIDEwKTtcbiAgfVxuICByZXR1cm4gZGF0YVJvdy52YWx1ZSA8PSBjb25kaXRpb25WYWx1ZTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUwsXG4gIGlucHV0c0NvdW50OiAxLFxuICBzaG93T3BlcmF0b3JzOiB0cnVlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnbm9uZSc7XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbigpIHtcbiAgcmV0dXJuIHRydWU7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfTk9ORSxcbiAgaW5wdXRzQ291bnQ6IDAsXG4gIHNob3dPcGVyYXRvcnM6IGZhbHNlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG52YXIgX2JldHdlZW4gPSByZXF1aXJlKFwiLi9iZXR3ZWVuXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ25vdF9iZXR3ZWVuJztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgaW5wdXRWYWx1ZXMpIHtcbiAgcmV0dXJuICEoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uKShfYmV0d2Vlbi5DT05ESVRJT05fTkFNRSwgaW5wdXRWYWx1ZXMpKGRhdGFSb3cpO1xufVxuKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLnJlZ2lzdGVyQ29uZGl0aW9uKShDT05ESVRJT05fTkFNRSwgY29uZGl0aW9uLCB7XG4gIG5hbWU6IEMuRklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOLFxuICBpbnB1dHNDb3VudDogMixcbiAgc2hvd09wZXJhdG9yczogdHJ1ZVxufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfY29uZGl0aW9uUmVnaXN0ZXJlciA9IHJlcXVpcmUoXCIuLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xudmFyIF9jb250YWlucyA9IHJlcXVpcmUoXCIuL2NvbnRhaW5zXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgQ09ORElUSU9OX05BTUUgPSBleHBvcnRzLkNPTkRJVElPTl9OQU1FID0gJ25vdF9jb250YWlucyc7XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRhdGFSb3cgVGhlIG9iamVjdCB3aGljaCBob2xkcyBhbmQgZGVzY3JpYmVzIHRoZSBzaW5nbGUgY2VsbCB2YWx1ZS5cbiAqIEBwYXJhbSB7QXJyYXl9IGlucHV0VmFsdWVzIEFuIGFycmF5IG9mIHZhbHVlcyB0byBjb21wYXJlIHdpdGguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29uZGl0aW9uKGRhdGFSb3csIGlucHV0VmFsdWVzKSB7XG4gIHJldHVybiAhKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLmdldENvbmRpdGlvbikoX2NvbnRhaW5zLkNPTkRJVElPTl9OQU1FLCBpbnB1dFZhbHVlcykoZGF0YVJvdyk7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogQy5GSUxURVJTX0NPTkRJVElPTlNfTk9UX0NPTlRBSU4sXG4gIGlucHV0c0NvdW50OiAxLFxuICBzaG93T3BlcmF0b3JzOiB0cnVlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG52YXIgX2VtcHR5ID0gcmVxdWlyZShcIi4vZW1wdHlcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnbm90X2VtcHR5JztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgaW5wdXRWYWx1ZXMpIHtcbiAgcmV0dXJuICEoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uKShfZW1wdHkuQ09ORElUSU9OX05BTUUsIGlucHV0VmFsdWVzKShkYXRhUm93KTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFksXG4gIGlucHV0c0NvdW50OiAwLFxuICBzaG93T3BlcmF0b3JzOiB0cnVlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG52YXIgX2VxdWFsID0gcmVxdWlyZShcIi4vZXF1YWxcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAnbmVxJztcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGF0YVJvdyBUaGUgb2JqZWN0IHdoaWNoIGhvbGRzIGFuZCBkZXNjcmliZXMgdGhlIHNpbmdsZSBjZWxsIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXRWYWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzIHRvIGNvbXBhcmUgd2l0aC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb25kaXRpb24oZGF0YVJvdywgaW5wdXRWYWx1ZXMpIHtcbiAgcmV0dXJuICEoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uKShfZXF1YWwuQ09ORElUSU9OX05BTUUsIGlucHV0VmFsdWVzKShkYXRhUm93KTtcbn1cbigwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5yZWdpc3RlckNvbmRpdGlvbikoQ09ORElUSU9OX05BTUUsIGNvbmRpdGlvbiwge1xuICBuYW1lOiBDLkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUwsXG4gIGlucHV0c0NvdW50OiAxLFxuICBzaG93T3BlcmF0b3JzOiB0cnVlXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2NvbmRpdGlvblJlZ2lzdGVyZXJcIik7XG5jb25zdCBDT05ESVRJT05fTkFNRSA9IGV4cG9ydHMuQ09ORElUSU9OX05BTUUgPSAndHJ1ZSc7XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbmRpdGlvbigpIHtcbiAgcmV0dXJuIHRydWU7XG59XG4oMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJDb25kaXRpb24pKENPTkRJVElPTl9OQU1FLCBjb25kaXRpb24sIHtcbiAgbmFtZTogJ1RydWUnXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9sb2NhbEhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbWl4aW5zL2xvY2FsSG9va3NcIikpO1xudmFyIF9jb25kaXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4vY29uZGl0aW9uUmVnaXN0ZXJlclwiKTtcbnZhciBfY29uanVuY3Rpb24gPSByZXF1aXJlKFwiLi9sb2dpY2FsT3BlcmF0aW9ucy9jb25qdW5jdGlvblwiKTtcbnZhciBfbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi9sb2dpY2FsT3BlcmF0aW9uUmVnaXN0ZXJlclwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zbGF0aW9uc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmNvbnN0IE1BUF9OQU1FID0gJ0NvbmRpdGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIENvbmRpdGlvbkNvbGxlY3Rpb25cbiAqL1xuY2xhc3MgQ29uZGl0aW9uQ29sbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGhvdCkge1xuICAgIGxldCBpc01hcFJlZ2lzdHJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIC8qKlxuICAgICAqIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb3JlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnRlcm5hbCBJbmRleE1hcCBzaG91bGQgYmUgcmVnaXN0ZXJlZCBvciBub3QuIEdlbmVyYWxseSxcbiAgICAgKiByZWdpc3RlcmVkIE1hcHMgcmVzcG9uZHMgdG8gdGhlIGluZGV4IGNoYW5nZXMuIFdpdGhpbiB0aGF0IGNvbGxlY3Rpb24sIHNvbWV0aW1lc1xuICAgICAqIHRoaXMgaXMgbm90IG5lY2Vzc2FyeS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzTWFwUmVnaXN0cmFibGVcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBtYXAgc3RvcmluZyBmaWx0ZXJpbmcgc3RhdGVzIGZvciBldmVyeSBjb2x1bW4uIENvbmRpdGlvbkNvbGxlY3Rpb24gd3JpdGUgYW5kIHJlYWQgdG8vZnJvbSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpbHRlcmluZ1N0YXRlc1wiLCBuZXcgX3RyYW5zbGF0aW9ucy5MaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCgpKTtcbiAgICB0aGlzLmhvdCA9IGhvdDtcbiAgICB0aGlzLmlzTWFwUmVnaXN0cmFibGUgPSBpc01hcFJlZ2lzdHJhYmxlO1xuICAgIGlmICh0aGlzLmlzTWFwUmVnaXN0cmFibGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKE1BUF9OQU1FLCB0aGlzLmZpbHRlcmluZ1N0YXRlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjb25kaXRpb24gY29sbGVjdGlvbiBpcyBlbXB0eSAoc28gbm8gbmVlZGVkIHRvIGZpbHRlciBkYXRhKS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2YWx1ZSBpcyBtYXRjaGVkIHRvIHRoZSBjcml0ZXJpYSBvZiBjb25kaXRpb25zIGNoYWluLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgT2JqZWN0IHdpdGggYHZhbHVlYCBhbmQgYG1ldGFgIGtleXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc01hdGNoKHZhbHVlLCBjb2x1bW4pIHtcbiAgICB2YXIgX3N0YXRlRm9yQ29sdW1uJGNvbmRpO1xuICAgIGNvbnN0IHN0YXRlRm9yQ29sdW1uID0gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGNvbHVtbik7XG4gICAgY29uc3QgY29uZGl0aW9ucyA9IChfc3RhdGVGb3JDb2x1bW4kY29uZGkgPSBzdGF0ZUZvckNvbHVtbiA9PT0gbnVsbCB8fCBzdGF0ZUZvckNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGVGb3JDb2x1bW4uY29uZGl0aW9ucykgIT09IG51bGwgJiYgX3N0YXRlRm9yQ29sdW1uJGNvbmRpICE9PSB2b2lkIDAgPyBfc3RhdGVGb3JDb2x1bW4kY29uZGkgOiBbXTtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBzdGF0ZUZvckNvbHVtbiA9PT0gbnVsbCB8fCBzdGF0ZUZvckNvbHVtbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3RhdGVGb3JDb2x1bW4ub3BlcmF0aW9uO1xuICAgIHJldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoY29uZGl0aW9ucywgdmFsdWUsIG9wZXJhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHZhbHVlIGlzIG1hdGNoZXMgdGhlIGNvbmRpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvbmRpdGlvbnMgTGlzdCBvZiBjb25kaXRpb25zLlxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWUgT2JqZWN0IHdpdGggYHZhbHVlYCBhbmQgYG1ldGFgIGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3BlcmF0aW9uVHlwZT0nY29uanVuY3Rpb24nXSBUeXBlIG9mIGNvbmRpdGlvbnMgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTWF0Y2hJbkNvbmRpdGlvbnMoY29uZGl0aW9ucywgdmFsdWUpIHtcbiAgICBsZXQgb3BlcmF0aW9uVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogX2Nvbmp1bmN0aW9uLk9QRVJBVElPTl9JRDtcbiAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAoMCwgX2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyLmdldE9wZXJhdGlvbkZ1bmMpKG9wZXJhdGlvblR5cGUpKGNvbmRpdGlvbnMsIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvbmRpdGlvbiB0byB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZGl0aW9uRGVmaW5pdGlvbiBPYmplY3Qgd2l0aCBrZXlzOlxuICAgKiAgKiBgY29tbWFuZGAgT2JqZWN0LCBDb21tYW5kIG9iamVjdCB3aXRoIGNvbmRpdGlvbiBuYW1lIGFzIGBrZXlgIHByb3BlcnR5LlxuICAgKiAgKiBgYXJnc2AgQXJyYXksIENvbmRpdGlvbiBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3BlcmF0aW9uPSdjb25qdW5jdGlvbiddIFR5cGUgb2YgY29uZGl0aW9ucyBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcG9zaXRpb25dIFBvc2l0aW9uIHRvIHdoaWNoIGNvbmRpdGlvbiB3aWxsIGJlIGFkZGVkLiBXaGVuIGFyZ3VtZW50IGlzIHVuZGVmaW5lZFxuICAgKiB0aGUgY29uZGl0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkIGFzIHRoZSBsYXN0IGNvbmRpdGlvbi5cbiAgICogQGZpcmVzIENvbmRpdGlvbkNvbGxlY3Rpb24jYmVmb3JlQWRkXG4gICAqIEBmaXJlcyBDb25kaXRpb25Db2xsZWN0aW9uI2FmdGVyQWRkXG4gICAqL1xuICBhZGRDb25kaXRpb24oY29sdW1uLCBjb25kaXRpb25EZWZpbml0aW9uKSB7XG4gICAgbGV0IG9wZXJhdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogX2Nvbmp1bmN0aW9uLk9QRVJBVElPTl9JRDtcbiAgICBsZXQgcG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBsb2NhbGVGb3JDb2x1bW4gPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLCBjb2x1bW4pLmxvY2FsZTtcbiAgICBjb25zdCBhcmdzID0gKDAsIF9hcnJheS5hcnJheU1hcCkoY29uZGl0aW9uRGVmaW5pdGlvbi5hcmdzLCB2ID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYudG9Mb2NhbGVMb3dlckNhc2UobG9jYWxlRm9yQ29sdW1uKSA6IHYpO1xuICAgIGNvbnN0IG5hbWUgPSBjb25kaXRpb25EZWZpbml0aW9uLm5hbWUgfHwgY29uZGl0aW9uRGVmaW5pdGlvbi5jb21tYW5kLmtleTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZUFkZCcsIGNvbHVtbik7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IHRoaXMuZ2V0T3BlcmF0aW9uKGNvbHVtbik7XG4gICAgaWYgKGNvbHVtblR5cGUpIHtcbiAgICAgIGlmIChjb2x1bW5UeXBlICE9PSBvcGVyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBUaGUgY29sdW1uIG9mIGluZGV4ICR7Y29sdW1ufSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQgd2l0aCBhIFxcYCR7Y29sdW1uVHlwZX1cXGBcXHgyMFxuICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXFxgcmVtb3ZlQ29uZGl0aW9uc1xcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5cXHgyMFxuICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYgeW91IHVzZSBcXGBjb25qdW5jdGlvblxcYCxcXHgyMFxuICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKF9sb2dpY2FsT3BlcmF0aW9uUmVnaXN0ZXJlci5vcGVyYXRpb25zW29wZXJhdGlvbl0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBcXGAke29wZXJhdGlvbn1cXGAuIFBvc3NpYmxlIG9uZXMgYXJlXFx4MjBcbiAgICAgICAgXFxgZGlzanVuY3Rpb25cXGAgYW5kIFxcYGNvbmp1bmN0aW9uXFxgLmApO1xuICAgIH1cbiAgICBjb25zdCBjb25kaXRpb25zRm9yQ29sdW1uID0gdGhpcy5nZXRDb25kaXRpb25zKGNvbHVtbik7XG4gICAgaWYgKGNvbmRpdGlvbnNGb3JDb2x1bW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBDcmVhdGUgZmlyc3QgY29uZGl0aW9uIGZvciBwYXJ0aWN1bGFyIGNvbHVtbi5cbiAgICAgIHRoaXMuZmlsdGVyaW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChjb2x1bW4sIHtcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBjb25kaXRpb25zOiBbe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgYXJncyxcbiAgICAgICAgICBmdW5jOiAoMCwgX2NvbmRpdGlvblJlZ2lzdGVyZXIuZ2V0Q29uZGl0aW9uKShuYW1lLCBhcmdzKVxuICAgICAgICB9XVxuICAgICAgfSwgcG9zaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBZGQgbmV4dCBjb25kaXRpb24gZm9yIHBhcnRpY3VsYXIgY29sdW1uIChieSByZWZlcmVuY2UpLlxuICAgICAgY29uZGl0aW9uc0ZvckNvbHVtbi5wdXNoKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYXJncyxcbiAgICAgICAgZnVuYzogKDAsIF9jb25kaXRpb25SZWdpc3RlcmVyLmdldENvbmRpdGlvbikobmFtZSwgYXJncylcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyQWRkJywgY29sdW1uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIGFkZGVkIGNvbmRpdGlvbnMgZnJvbSB0aGUgY29sbGVjdGlvbiBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBjb25kaXRpb25zIGNvbGxlY3Rpb24gYXMgYW4gYXJyYXkuXG4gICAqL1xuICBnZXRDb25kaXRpb25zKGNvbHVtbikge1xuICAgIHZhciBfdGhpcyRmaWx0ZXJpbmdTdGF0ZXMsIF90aGlzJGZpbHRlcmluZ1N0YXRlczI7XG4gICAgcmV0dXJuIChfdGhpcyRmaWx0ZXJpbmdTdGF0ZXMgPSAoX3RoaXMkZmlsdGVyaW5nU3RhdGVzMiA9IHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChjb2x1bW4pKSA9PT0gbnVsbCB8fCBfdGhpcyRmaWx0ZXJpbmdTdGF0ZXMyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRmaWx0ZXJpbmdTdGF0ZXMyLmNvbmRpdGlvbnMpICE9PSBudWxsICYmIF90aGlzJGZpbHRlcmluZ1N0YXRlcyAhPT0gdm9pZCAwID8gX3RoaXMkZmlsdGVyaW5nU3RhdGVzIDogW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9wZXJhdGlvbiBmb3IgcGFydGljdWxhciBjb2x1bW4uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHBoeXNpY2FsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9XG4gICAqL1xuICBnZXRPcGVyYXRpb24oY29sdW1uKSB7XG4gICAgdmFyIF90aGlzJGZpbHRlcmluZ1N0YXRlczM7XG4gICAgcmV0dXJuIChfdGhpcyRmaWx0ZXJpbmdTdGF0ZXMzID0gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGNvbHVtbikpID09PSBudWxsIHx8IF90aGlzJGZpbHRlcmluZ1N0YXRlczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGZpbHRlcmluZ1N0YXRlczMub3BlcmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZmlsdGVyZWQgcGh5c2ljYWwgY29sdW1ucyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggYWN0aW9ucyBhcmUgcGVyZm9ybWVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRGaWx0ZXJlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoX3JlZiA9PiB7XG4gICAgICBsZXQgW3BoeXNpY2FsQ29sdW1uXSA9IF9yZWY7XG4gICAgICByZXR1cm4gcGh5c2ljYWxDb2x1bW47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBwb3NpdGlvbiBpbiB0aGUgZmlsdGVyaW5nIHN0YXRlcyBzdGFjayBmb3IgdGhlIHNwZWNpZmljIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIC0xIHdoZW4gdGhlIGNvbHVtbiBkb2Vzbid0IGV4aXN0IGluIHRoZSBzdGFjay5cbiAgICovXG4gIGdldENvbHVtblN0YWNrUG9zaXRpb24oY29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkuaW5kZXhPZihjb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBhbGwgcHJldmlvdXNseSBhZGRlZCBjb25kaXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBleHBvcnRBbGxDb25kaXRpb25zKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmFycmF5UmVkdWNlKSh0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCksIChhbGxDb25kaXRpb25zLCBfcmVmMikgPT4ge1xuICAgICAgbGV0IFtjb2x1bW4sIHtcbiAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICBjb25kaXRpb25zXG4gICAgICB9XSA9IF9yZWYyO1xuICAgICAgYWxsQ29uZGl0aW9ucy5wdXNoKHtcbiAgICAgICAgY29sdW1uLFxuICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgIGNvbmRpdGlvbnM6ICgwLCBfYXJyYXkuYXJyYXlNYXApKGNvbmRpdGlvbnMsIF9yZWYzID0+IHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFyZ3NcbiAgICAgICAgICB9ID0gX3JlZjM7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhcmdzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGFsbENvbmRpdGlvbnM7XG4gICAgfSwgW10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBjb25kaXRpb25zIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjb25kaXRpb25zIFRoZSBjb2xsZWN0aW9uIG9mIHRoZSBjb25kaXRpb25zLlxuICAgKi9cbiAgaW1wb3J0QWxsQ29uZGl0aW9ucyhjb25kaXRpb25zKSB7XG4gICAgdGhpcy5jbGVhbigpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShjb25kaXRpb25zLCBzdGFjayA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc3RhY2suY29uZGl0aW9ucywgY29uZGl0aW9uID0+IHRoaXMuYWRkQ29uZGl0aW9uKHN0YWNrLmNvbHVtbiwgY29uZGl0aW9uKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGNvbmRpdGlvbnMgYXQgZ2l2ZW4gY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBmaXJlcyBDb25kaXRpb25Db2xsZWN0aW9uI2JlZm9yZVJlbW92ZVxuICAgKiBAZmlyZXMgQ29uZGl0aW9uQ29sbGVjdGlvbiNhZnRlclJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlQ29uZGl0aW9ucyhjb2x1bW4pIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZVJlbW92ZScsIGNvbHVtbik7XG4gICAgdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShjb2x1bW4pO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJSZW1vdmUnLCBjb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFuIGFsbCBjb25kaXRpb25zIGNvbGxlY3Rpb24gYW5kIHJlc2V0IG9yZGVyIHN0YWNrLlxuICAgKlxuICAgKiBAZmlyZXMgQ29uZGl0aW9uQ29sbGVjdGlvbiNiZWZvcmVDbGVhblxuICAgKiBAZmlyZXMgQ29uZGl0aW9uQ29sbGVjdGlvbiNhZnRlckNsZWFuXG4gICAqL1xuICBjbGVhbigpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZUNsZWFuJyk7XG4gICAgdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyQ2xlYW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhdCBsZWFzdCBvbmUgY29uZGl0aW9uIHdhcyBhZGRlZCBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4LiBBbmQgaWYgc2Vjb25kIHBhcmFtZXRlciBpcyBwYXNzZWQgdGhlbiBhZGRpdGlvbmFsbHlcbiAgICogY2hlY2sgaWYgY29uZGl0aW9uIGV4aXN0cyB1bmRlciBpdHMgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdIENvbmRpdGlvbiBuYW1lLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0NvbmRpdGlvbnMoY29sdW1uLCBuYW1lKSB7XG4gICAgY29uc3QgY29uZGl0aW9ucyA9IHRoaXMuZ2V0Q29uZGl0aW9ucyhjb2x1bW4pO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gY29uZGl0aW9ucy5zb21lKGNvbmRpdGlvbiA9PiBjb25kaXRpb24ubmFtZSA9PT0gbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBjb25kaXRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveSBvYmplY3QuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmlzTWFwUmVnaXN0cmFibGUpIHtcbiAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoTUFQX05BTUUpO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcmluZ1N0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5jbGVhckxvY2FsSG9va3MoKTtcbiAgfVxufVxuKDAsIF9vYmplY3QubWl4aW4pKENvbmRpdGlvbkNvbGxlY3Rpb24sIF9sb2NhbEhvb2tzLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQ29uZGl0aW9uQ29sbGVjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0Q29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uO1xuZXhwb3J0cy5nZXRDb25kaXRpb25EZXNjcmlwdG9yID0gZ2V0Q29uZGl0aW9uRGVzY3JpcHRvcjtcbmV4cG9ydHMucmVnaXN0ZXJDb25kaXRpb24gPSByZWdpc3RlckNvbmRpdGlvbjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5jb25zdCBjb25kaXRpb25zID0gZXhwb3J0cy5jb25kaXRpb25zID0ge307XG5cbi8qKlxuICogR2V0IGNvbmRpdGlvbiBjbG9zdXJlIHdpdGggcHJlLWJvdW5kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDb25kaXRpb24gbmFtZS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgQ29uZGl0aW9uIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZGl0aW9uKG5hbWUsIGFyZ3MpIHtcbiAgaWYgKCFjb25kaXRpb25zW25hbWVdKSB7XG4gICAgdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gXCIke25hbWV9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cbiAgY29uc3Qge1xuICAgIGNvbmRpdGlvbixcbiAgICBkZXNjcmlwdG9yXG4gIH0gPSBjb25kaXRpb25zW25hbWVdO1xuICBsZXQgY29uZGl0aW9uQXJndW1lbnRzID0gYXJncztcbiAgaWYgKGRlc2NyaXB0b3IuaW5wdXRWYWx1ZXNEZWNvcmF0b3IpIHtcbiAgICBjb25kaXRpb25Bcmd1bWVudHMgPSBkZXNjcmlwdG9yLmlucHV0VmFsdWVzRGVjb3JhdG9yKGNvbmRpdGlvbkFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhUm93KSB7XG4gICAgcmV0dXJuIGNvbmRpdGlvbi5hcHBseShkYXRhUm93Lm1ldGEuaW5zdGFuY2UsIFtdLmNvbmNhdChbZGF0YVJvd10sIFtjb25kaXRpb25Bcmd1bWVudHNdKSk7XG4gIH07XG59XG5cbi8qKlxuICogR2V0IGNvbmRpdGlvbiBvYmplY3QgZGVzY3JpcHRvciB3aGljaCBkZWZpbmVzIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbnMgYWJvdXQgdGhpcyBjb25kaXRpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ29uZGl0aW9uIG5hbWUuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRDb25kaXRpb25EZXNjcmlwdG9yKG5hbWUpIHtcbiAgaWYgKCFjb25kaXRpb25zW25hbWVdKSB7XG4gICAgdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gXCIke25hbWV9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gIH1cbiAgcmV0dXJuIGNvbmRpdGlvbnNbbmFtZV0uZGVzY3JpcHRvcjtcbn1cblxuLyoqXG4gKiBDb25kaXRpb24gcmVnaXN0ZXJlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBDb25kaXRpb24gbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmRpdGlvbiBDb25kaXRpb24gZnVuY3Rpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gZGVzY3JpcHRvciBDb25kaXRpb24gZGVzY3JpcHRvci5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJDb25kaXRpb24obmFtZSwgY29uZGl0aW9uLCBkZXNjcmlwdG9yKSB7XG4gIGRlc2NyaXB0b3Iua2V5ID0gbmFtZTtcbiAgY29uZGl0aW9uc1tuYW1lXSA9IHtcbiAgICBjb25kaXRpb24sXG4gICAgZGVzY3JpcHRvclxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xudmFyIF9sb2NhbEhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vbWl4aW5zL2xvY2FsSG9va3NcIikpO1xudmFyIF9jb25kaXRpb25Db2xsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb25kaXRpb25Db2xsZWN0aW9uXCIpKTtcbnZhciBfZGF0YUZpbHRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGF0YUZpbHRlclwiKSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIENsYXNzIHdoaWNoIGlzIGRlc2lnbmVkIGZvciBvYnNlcnZpbmcgY2hhbmdlcyBpbiBjb25kaXRpb24gY29sbGVjdGlvbi4gV2hlbiBjb25kaXRpb24gaXMgY2hhbmdlZCBieSB1c2VyIGF0IHNwZWNpZmllZFxuICogY29sdW1uIGl0J3MgbmVjZXNzYXJ5IHRvIHVwZGF0ZSBhbGwgY29uZGl0aW9ucyBkZWZpbmVkIGFmdGVyIHRoaXMgZWRpdGVkIG9uZS5cbiAqXG4gKiBPYmplY3QgZmlyZXMgYHVwZGF0ZWAgaG9vayBmb3IgZXZlcnkgY29sdW1uIGNvbmRpdGlvbnMgY2hhbmdlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgQ29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJcbiAqL1xudmFyIF9Db25kaXRpb25VcGRhdGVPYnNlcnZlcl9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgQ29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3Rvcihob3QsIGNvbmRpdGlvbkNvbGxlY3Rpb24pIHtcbiAgICBsZXQgY29sdW1uRGF0YUZhY3RvcnkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICgpID0+IFtdO1xuICAgIC8qKlxuICAgICAqIE9uIGJlZm9yZSBtb2RpZnkgY29uZGl0aW9uIChhZGQgb3IgcmVtb3ZlIGZyb20gY29sbGVjdGlvbiksLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0NvbmRpdGlvblVwZGF0ZU9ic2VydmVyX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIGluc3RhbmNlIG9mIHtAbGluayBDb25kaXRpb25Db2xsZWN0aW9ufS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb25kaXRpb25Db2xsZWN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbmRpdGlvbkNvbGxlY3Rpb25cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB3aGljaCBwcm92aWRlIHNvdXJjZSBkYXRhIGZhY3RvcnkgZm9yIHNwZWNpZmllZCBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uRGF0YUZhY3RvcnlcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBDb2xsZWN0ZWQgY2hhbmdlcyB3aGVuIGdyb3VwaW5nIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICogQGRlZmF1bHQgW11cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjaGFuZ2VzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgaWYgZ3JvdXBpbmcgZXZlbnRzIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJncm91cGluZ1wiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogVGhlIGxhdGVzdCBrbm93biBwb3NpdGlvbiBvZiBlZGl0ZWQgY29uZGl0aW9ucyBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAtMVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uXCIsIC0xKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbGF0ZXN0IGtub3duIG9yZGVyIG9mIGNvbmRpdGlvbnMgc3RhY2suXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibGF0ZXN0T3JkZXJTdGFja1wiLCBbXSk7XG4gICAgdGhpcy5ob3QgPSBob3Q7XG4gICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uID0gY29uZGl0aW9uQ29sbGVjdGlvbjtcbiAgICB0aGlzLmNvbHVtbkRhdGFGYWN0b3J5ID0gY29sdW1uRGF0YUZhY3Rvcnk7XG4gICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygnYmVmb3JlUmVtb3ZlJywgY29sdW1uID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db25kaXRpb25VcGRhdGVPYnNlcnZlcl9icmFuZCwgdGhpcywgX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5KS5jYWxsKHRoaXMsIGNvbHVtbikpO1xuICAgIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soJ2FmdGVyUmVtb3ZlJywgY29sdW1uID0+IHRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oY29sdW1uKSk7XG4gICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygnYWZ0ZXJBZGQnLCBjb2x1bW4gPT4gdGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjb2x1bW4pKTtcbiAgICB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCdiZWZvcmVDbGVhbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9Db25kaXRpb25VcGRhdGVPYnNlcnZlcl9icmFuZCwgdGhpcywgX29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4pLmNhbGwodGhpcykpO1xuICAgIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soJ2FmdGVyQ2xlYW4nLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfQ29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJfYnJhbmQsIHRoaXMsIF9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4pLmNhbGwodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBncm91cGluZyBjaGFuZ2VzLiBHcm91cGluZyBpcyBoZWxwZnVsIGluIHNpdHVhdGlvbnMgd2hlbiBhIGxvdCBvZiBjb25kaXRpb25zIGlzIGFkZGVkIGluIG9uZSBtb21lbnQuIEluc3RlYWQgb2ZcbiAgICogdHJpZ2dlciBgdXBkYXRlYCBob29rIGZvciBldmVyeSBjb25kaXRpb24gYnkgYWRkaW5nL3JlbW92aW5nIHlvdSBjYW4gZ3JvdXAgdGhpcyBjaGFuZ2VzIGFuZCBjYWxsIGBmbHVzaGAgbWV0aG9kIHRvIHRyaWdnZXJcbiAgICogaXQgb25jZS5cbiAgICovXG4gIGdyb3VwQ2hhbmdlcygpIHtcbiAgICB0aGlzLmdyb3VwaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgY29sbGVjdGVkIGNoYW5nZXMuIFRoaXMgdHJpZ2dlciBgdXBkYXRlYCBob29rIGZvciBldmVyeSBwcmV2aW91c2x5IGNvbGxlY3RlZCBjaGFuZ2UgZnJvbSBjb25kaXRpb24gY29sbGVjdGlvbi5cbiAgICovXG4gIGZsdXNoKCkge1xuICAgIHRoaXMuZ3JvdXBpbmcgPSBmYWxzZTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5jaGFuZ2VzLCBjb2x1bW4gPT4ge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjb2x1bW4pO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlcy5sZW5ndGggPSAwO1xuICB9XG4gIC8qKlxuICAgKiBVcGRhdGUgYWxsIHJlbGF0ZWQgc3RhdGVzIHdoaWNoIHNob3VsZCBiZSBjaGFuZ2VkIGFmdGVyIGludm9raW5nIGNoYW5nZXMgYXBwbGllZCB0byBjdXJyZW50IGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29uZGl0aW9uQXJnc0NoYW5nZSBPYmplY3QgZGVzY3JpYmluZyBjb25kaXRpb24gY2hhbmdlcyB3aGljaCBjYW4gYmUgaGFuZGxlZCBieSBmaWx0ZXJzIG9uIGB1cGRhdGVgIGhvb2suXG4gICAqIEl0IGNvbnRhaW5zIGtleXMgYGNvbmRpdGlvbktleWAgYW5kIGBjb25kaXRpb25WYWx1ZWAgd2hpY2ggcmVmZXJzIHRvIGNoYW5nZSBzcGVjaWZpZWQga2V5IG9mIGNvbmRpdGlvbiB0byBzcGVjaWZpZWQgdmFsdWVcbiAgICogYmFzZWQgb24gcmVmZXJyZWQga2V5cy5cbiAgICovXG4gIHVwZGF0ZVN0YXRlc0F0Q29sdW1uKGNvbHVtbiwgY29uZGl0aW9uQXJnc0NoYW5nZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZ3JvdXBpbmcpIHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZXMuaW5kZXhPZihjb2x1bW4pID09PSAtMSkge1xuICAgICAgICB0aGlzLmNoYW5nZXMucHVzaChjb2x1bW4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhbGxDb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtcbiAgICBsZXQgZWRpdGVkQ29sdW1uUG9zaXRpb24gPSB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihjb2x1bW4pO1xuICAgIGlmIChlZGl0ZWRDb2x1bW5Qb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgIGVkaXRlZENvbHVtblBvc2l0aW9uID0gdGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBDb2xsZWN0aW9uIG9mIGFsbCBjb25kaXRpb25zIGRlZmluZWQgYmVmb3JlIGN1cnJlbnRseSBlZGl0ZWQgYGNvbHVtbmAgKHdpdGhvdXQgZWRpdGVkIG9uZSlcbiAgICBjb25zdCBjb25kaXRpb25zQmVmb3JlID0gYWxsQ29uZGl0aW9ucy5zbGljZSgwLCBlZGl0ZWRDb2x1bW5Qb3NpdGlvbik7XG4gICAgLy8gQ29sbGVjdGlvbiBvZiBhbGwgY29uZGl0aW9ucyBkZWZpbmVkIGFmdGVyIGN1cnJlbnRseSBlZGl0ZWQgYGNvbHVtbmAgKHdpdGggZWRpdGVkIG9uZSlcbiAgICBjb25zdCBjb25kaXRpb25zQWZ0ZXIgPSBhbGxDb25kaXRpb25zLnNsaWNlKGVkaXRlZENvbHVtblBvc2l0aW9uKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGNvbmRpdGlvbkFmdGVyIGRvZXNuJ3QgY29udGFpbiBlZGl0ZWQgY29sdW1uIGNvbmRpdGlvbnNcbiAgICBpZiAoY29uZGl0aW9uc0FmdGVyLmxlbmd0aCAmJiBjb25kaXRpb25zQWZ0ZXJbMF0uY29sdW1uID09PSBjb2x1bW4pIHtcbiAgICAgIGNvbmRpdGlvbnNBZnRlci5zaGlmdCgpO1xuICAgIH1cbiAgICBjb25zdCB2aXNpYmxlRGF0YUZhY3RvcnkgPSAoMCwgX2Z1bmN0aW9uLmN1cnJ5KShmdW5jdGlvbiAoY3VycmllZENvbmRpdGlvbnNCZWZvcmUsIGN1cnJpZWRDb2x1bW4pIHtcbiAgICAgIGxldCBjb25kaXRpb25zU3RhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IFtdO1xuICAgICAgY29uc3Qgc3BsaXRDb25kaXRpb25Db2xsZWN0aW9uID0gbmV3IF9jb25kaXRpb25Db2xsZWN0aW9uLmRlZmF1bHQoX3RoaXMuaG90LCBmYWxzZSk7XG4gICAgICBjb25zdCBjdXJyaWVkQ29uZGl0aW9uc0JlZm9yZUFycmF5ID0gW10uY29uY2F0KGN1cnJpZWRDb25kaXRpb25zQmVmb3JlLCBjb25kaXRpb25zU3RhY2spO1xuXG4gICAgICAvLyBDcmVhdGUgbmV3IGNvbmRpdGlvbiBjb2xsZWN0aW9uIHRvIGRldGVybWluZSB3aGF0IHJvd3Mgc2hvdWxkIGJlIHZpc2libGUgaW4gXCJmaWx0ZXIgYnkgdmFsdWVcIiBib3hcbiAgICAgIC8vIGluIHRoZSBuZXh0IGNvbmRpdGlvbnMgaW4gdGhlIGNoYWluXG4gICAgICBzcGxpdENvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyhjdXJyaWVkQ29uZGl0aW9uc0JlZm9yZUFycmF5KTtcbiAgICAgIGNvbnN0IGFsbFJvd3MgPSBfdGhpcy5jb2x1bW5EYXRhRmFjdG9yeShjdXJyaWVkQ29sdW1uKTtcbiAgICAgIGxldCB2aXNpYmxlUm93cztcbiAgICAgIGlmIChzcGxpdENvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpKSB7XG4gICAgICAgIHZpc2libGVSb3dzID0gYWxsUm93cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZpc2libGVSb3dzID0gbmV3IF9kYXRhRmlsdGVyLmRlZmF1bHQoc3BsaXRDb25kaXRpb25Db2xsZWN0aW9uLCBjb2x1bW5EYXRhID0+IF90aGlzLmNvbHVtbkRhdGFGYWN0b3J5KGNvbHVtbkRhdGEpKS5maWx0ZXIoKTtcbiAgICAgIH1cbiAgICAgIHZpc2libGVSb3dzID0gKDAsIF9hcnJheS5hcnJheU1hcCkodmlzaWJsZVJvd3MsIHJvd0RhdGEgPT4gcm93RGF0YS5tZXRhLnZpc3VhbFJvdyk7XG4gICAgICBjb25zdCB2aXNpYmxlUm93c0Fzc2VydGlvbiA9ICgwLCBfdXRpbHMuY3JlYXRlQXJyYXlBc3NlcnRpb24pKHZpc2libGVSb3dzKTtcbiAgICAgIHNwbGl0Q29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheUZpbHRlcikoYWxsUm93cywgcm93RGF0YSA9PiB2aXNpYmxlUm93c0Fzc2VydGlvbihyb3dEYXRhLm1ldGEudmlzdWFsUm93KSk7XG4gICAgfSkoY29uZGl0aW9uc0JlZm9yZSk7XG4gICAgY29uc3QgZWRpdGVkQ29uZGl0aW9ucyA9IFtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyhjb2x1bW4pKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ3VwZGF0ZScsIHtcbiAgICAgIGVkaXRlZENvbmRpdGlvblN0YWNrOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgY29uZGl0aW9uczogZWRpdGVkQ29uZGl0aW9uc1xuICAgICAgfSxcbiAgICAgIGRlcGVuZGVudENvbmRpdGlvblN0YWNrczogY29uZGl0aW9uc0FmdGVyLFxuICAgICAgZmlsdGVyZWRSb3dzRmFjdG9yeTogdmlzaWJsZURhdGFGYWN0b3J5LFxuICAgICAgY29uZGl0aW9uQXJnc0NoYW5nZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGJlZm9yZSBjb25kaXRpb25zIGNsZWFuIGxpc3RlbmVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKipcbiAgICogRGVzdHJveSBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhckxvY2FsSG9va3MoKTtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLCAodmFsdWUsIHByb3BlcnR5KSA9PiB7XG4gICAgICB0aGlzW3Byb3BlcnR5XSA9IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9vbkNvbmRpdGlvbkJlZm9yZU1vZGlmeShjb2x1bW4pIHtcbiAgdGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiA9IHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGNvbHVtbik7XG59XG5mdW5jdGlvbiBfb25Db25kaXRpb25CZWZvcmVDbGVhbigpIHtcbiAgdGhpcy5sYXRlc3RPcmRlclN0YWNrID0gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpO1xufVxuLyoqXG4gKiBPbiBhZnRlciBjb25kaXRpb25zIGNsZWFuIGxpc3RlbmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4oKSB7XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmxhdGVzdE9yZGVyU3RhY2ssIGNvbHVtbiA9PiB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihjb2x1bW4pO1xuICB9KTtcbn1cbigwLCBfb2JqZWN0Lm1peGluKShDb25kaXRpb25VcGRhdGVPYnNlcnZlciwgX2xvY2FsSG9va3MuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBDb25kaXRpb25VcGRhdGVPYnNlcnZlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGdldE9wdGlvbnNMaXN0O1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX3ByZWRlZmluZWRJdGVtcyA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS9wcmVkZWZpbmVkSXRlbXNcIik7XG52YXIgX2NvbmRpdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi9jb25kaXRpb25SZWdpc3RlcmVyXCIpO1xudmFyIF9ub25lID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL25vbmVcIik7XG5leHBvcnRzLkNPTkRJVElPTl9OT05FID0gX25vbmUuQ09ORElUSU9OX05BTUU7XG52YXIgX2VtcHR5ID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2VtcHR5XCIpO1xuZXhwb3J0cy5DT05ESVRJT05fRU1QVFkgPSBfZW1wdHkuQ09ORElUSU9OX05BTUU7XG52YXIgX25vdEVtcHR5ID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL25vdEVtcHR5XCIpO1xuZXhwb3J0cy5DT05ESVRJT05fTk9UX0VNUFRZID0gX25vdEVtcHR5LkNPTkRJVElPTl9OQU1FO1xudmFyIF9lcXVhbCA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9lcXVhbFwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX0VRVUFMID0gX2VxdWFsLkNPTkRJVElPTl9OQU1FO1xudmFyIF9ub3RFcXVhbCA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9ub3RFcXVhbFwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX05PVF9FUVVBTCA9IF9ub3RFcXVhbC5DT05ESVRJT05fTkFNRTtcbnZhciBfZ3JlYXRlclRoYW4gPSByZXF1aXJlKFwiLi9jb25kaXRpb24vZ3JlYXRlclRoYW5cIik7XG5leHBvcnRzLkNPTkRJVElPTl9HUkVBVEVSX1RIQU4gPSBfZ3JlYXRlclRoYW4uQ09ORElUSU9OX05BTUU7XG52YXIgX2dyZWF0ZXJUaGFuT3JFcXVhbCA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9ncmVhdGVyVGhhbk9yRXF1YWxcIik7XG5leHBvcnRzLkNPTkRJVElPTl9HUkVBVEVSX1RIQU5fT1JfRVFVQUwgPSBfZ3JlYXRlclRoYW5PckVxdWFsLkNPTkRJVElPTl9OQU1FO1xudmFyIF9sZXNzVGhhbiA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9sZXNzVGhhblwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX0xFU1NfVEhBTiA9IF9sZXNzVGhhbi5DT05ESVRJT05fTkFNRTtcbnZhciBfbGVzc1RoYW5PckVxdWFsID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2xlc3NUaGFuT3JFcXVhbFwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX0xFU1NfVEhBTl9PUl9FUVVBTCA9IF9sZXNzVGhhbk9yRXF1YWwuQ09ORElUSU9OX05BTUU7XG52YXIgX2JldHdlZW4gPSByZXF1aXJlKFwiLi9jb25kaXRpb24vYmV0d2VlblwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX0JFVFdFRU4gPSBfYmV0d2Vlbi5DT05ESVRJT05fTkFNRTtcbnZhciBfbm90QmV0d2VlbiA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9ub3RCZXR3ZWVuXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fTk9UX0JFVFdFRU4gPSBfbm90QmV0d2Vlbi5DT05ESVRJT05fTkFNRTtcbnZhciBfYmVnaW5zV2l0aCA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9iZWdpbnNXaXRoXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fQkVHSU5TX1dJVEggPSBfYmVnaW5zV2l0aC5DT05ESVRJT05fTkFNRTtcbnZhciBfZW5kc1dpdGggPSByZXF1aXJlKFwiLi9jb25kaXRpb24vZW5kc1dpdGhcIik7XG5leHBvcnRzLkNPTkRJVElPTl9FTkRTX1dJVEggPSBfZW5kc1dpdGguQ09ORElUSU9OX05BTUU7XG52YXIgX2NvbnRhaW5zID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2NvbnRhaW5zXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fQ09OVEFJTlMgPSBfY29udGFpbnMuQ09ORElUSU9OX05BTUU7XG52YXIgX25vdENvbnRhaW5zID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL25vdENvbnRhaW5zXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fTk9UX0NPTlRBSU5TID0gX25vdENvbnRhaW5zLkNPTkRJVElPTl9OQU1FO1xudmFyIF9iZWZvcmUgPSByZXF1aXJlKFwiLi9jb25kaXRpb24vZGF0ZS9iZWZvcmVcIik7XG5leHBvcnRzLkNPTkRJVElPTl9EQVRFX0JFRk9SRSA9IF9iZWZvcmUuQ09ORElUSU9OX05BTUU7XG52YXIgX2FmdGVyID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2RhdGUvYWZ0ZXJcIik7XG5leHBvcnRzLkNPTkRJVElPTl9EQVRFX0FGVEVSID0gX2FmdGVyLkNPTkRJVElPTl9OQU1FO1xudmFyIF90b21vcnJvdyA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9kYXRlL3RvbW9ycm93XCIpO1xuZXhwb3J0cy5DT05ESVRJT05fVE9NT1JST1cgPSBfdG9tb3Jyb3cuQ09ORElUSU9OX05BTUU7XG52YXIgX3RvZGF5ID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2RhdGUvdG9kYXlcIik7XG5leHBvcnRzLkNPTkRJVElPTl9UT0RBWSA9IF90b2RheS5DT05ESVRJT05fTkFNRTtcbnZhciBfeWVzdGVyZGF5ID0gcmVxdWlyZShcIi4vY29uZGl0aW9uL2RhdGUveWVzdGVyZGF5XCIpO1xuZXhwb3J0cy5DT05ESVRJT05fWUVTVEVSREFZID0gX3llc3RlcmRheS5DT05ESVRJT05fTkFNRTtcbnZhciBfYnlWYWx1ZSA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9ieVZhbHVlXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fQllfVkFMVUUgPSBfYnlWYWx1ZS5DT05ESVRJT05fTkFNRTtcbnZhciBfdHJ1ZSA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi90cnVlXCIpO1xuZXhwb3J0cy5DT05ESVRJT05fVFJVRSA9IF90cnVlLkNPTkRJVElPTl9OQU1FO1xudmFyIF9mYWxzZSA9IHJlcXVpcmUoXCIuL2NvbmRpdGlvbi9mYWxzZVwiKTtcbmV4cG9ydHMuQ09ORElUSU9OX0ZBTFNFID0gX2ZhbHNlLkNPTkRJVElPTl9OQU1FO1xudmFyIF9jb25qdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2xvZ2ljYWxPcGVyYXRpb25zL2Nvbmp1bmN0aW9uXCIpO1xuZXhwb3J0cy5PUEVSQVRJT05fQU5EID0gX2Nvbmp1bmN0aW9uLk9QRVJBVElPTl9JRDtcbnZhciBfZGlzanVuY3Rpb24gPSByZXF1aXJlKFwiLi9sb2dpY2FsT3BlcmF0aW9ucy9kaXNqdW5jdGlvblwiKTtcbmV4cG9ydHMuT1BFUkFUSU9OX09SID0gX2Rpc2p1bmN0aW9uLk9QRVJBVElPTl9JRDtcbnZhciBfZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24gPSByZXF1aXJlKFwiLi9sb2dpY2FsT3BlcmF0aW9ucy9kaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvblwiKTtcbmV4cG9ydHMuT1BFUkFUSU9OX09SX1RIRU5fVkFSSUFCTEUgPSBfZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24uT1BFUkFUSU9OX0lEO1xuY29uc3QgVFlQRV9OVU1FUklDID0gZXhwb3J0cy5UWVBFX05VTUVSSUMgPSAnbnVtZXJpYyc7XG5jb25zdCBUWVBFX1RFWFQgPSBleHBvcnRzLlRZUEVfVEVYVCA9ICd0ZXh0JztcbmNvbnN0IFRZUEVfREFURSA9IGV4cG9ydHMuVFlQRV9EQVRFID0gJ2RhdGUnO1xuLyoqXG4gKiBEZWZhdWx0IHR5cGVzIGFuZCBvcmRlciBmb3IgZmlsdGVyIGNvbmRpdGlvbnMuXG4gKlxuICogQHR5cGUge29iamVjdH1cbiAqL1xuY29uc3QgVFlQRVMgPSBleHBvcnRzLlRZUEVTID0ge1xuICBbVFlQRV9OVU1FUklDXTogW19ub25lLkNPTkRJVElPTl9OQU1FLCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX2VtcHR5LkNPTkRJVElPTl9OQU1FLCBfbm90RW1wdHkuQ09ORElUSU9OX05BTUUsIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfZXF1YWwuQ09ORElUSU9OX05BTUUsIF9ub3RFcXVhbC5DT05ESVRJT05fTkFNRSwgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9ncmVhdGVyVGhhbi5DT05ESVRJT05fTkFNRSwgX2dyZWF0ZXJUaGFuT3JFcXVhbC5DT05ESVRJT05fTkFNRSwgX2xlc3NUaGFuLkNPTkRJVElPTl9OQU1FLCBfbGVzc1RoYW5PckVxdWFsLkNPTkRJVElPTl9OQU1FLCBfYmV0d2Vlbi5DT05ESVRJT05fTkFNRSwgX25vdEJldHdlZW4uQ09ORElUSU9OX05BTUVdLFxuICBbVFlQRV9URVhUXTogW19ub25lLkNPTkRJVElPTl9OQU1FLCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX2VtcHR5LkNPTkRJVElPTl9OQU1FLCBfbm90RW1wdHkuQ09ORElUSU9OX05BTUUsIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfZXF1YWwuQ09ORElUSU9OX05BTUUsIF9ub3RFcXVhbC5DT05ESVRJT05fTkFNRSwgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9iZWdpbnNXaXRoLkNPTkRJVElPTl9OQU1FLCBfZW5kc1dpdGguQ09ORElUSU9OX05BTUUsIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfY29udGFpbnMuQ09ORElUSU9OX05BTUUsIF9ub3RDb250YWlucy5DT05ESVRJT05fTkFNRV0sXG4gIFtUWVBFX0RBVEVdOiBbX25vbmUuQ09ORElUSU9OX05BTUUsIF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SLCBfZW1wdHkuQ09ORElUSU9OX05BTUUsIF9ub3RFbXB0eS5DT05ESVRJT05fTkFNRSwgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF9lcXVhbC5DT05ESVRJT05fTkFNRSwgX25vdEVxdWFsLkNPTkRJVElPTl9OQU1FLCBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUiwgX2JlZm9yZS5DT05ESVRJT05fTkFNRSwgX2FmdGVyLkNPTkRJVElPTl9OQU1FLCBfYmV0d2Vlbi5DT05ESVRJT05fTkFNRSwgX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1IsIF90b21vcnJvdy5DT05ESVRJT05fTkFNRSwgX3RvZGF5LkNPTkRJVElPTl9OQU1FLCBfeWVzdGVyZGF5LkNPTkRJVElPTl9OQU1FXVxufTtcblxuLyoqXG4gKiBHZXQgb3B0aW9ucyBsaXN0IGZvciBjb25kaXRpb25hbCBmaWx0ZXIgYnkgZGF0YSB0eXBlIChlLnE6IGAndGV4dCdgLCBgJ251bWVyaWMnYCwgYCdkYXRlJ2ApLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUaGUgZGF0YSB0eXBlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3B0aW9uc0xpc3QodHlwZSkge1xuICBjb25zdCBpdGVtcyA9IFtdO1xuICBsZXQgdHlwZU5hbWUgPSB0eXBlO1xuICBpZiAoIVRZUEVTW3R5cGVOYW1lXSkge1xuICAgIHR5cGVOYW1lID0gVFlQRV9URVhUO1xuICB9XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShUWVBFU1t0eXBlTmFtZV0sIHR5cGVWYWx1ZSA9PiB7XG4gICAgbGV0IG9wdGlvbjtcbiAgICBpZiAodHlwZVZhbHVlID09PSBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUikge1xuICAgICAgb3B0aW9uID0ge1xuICAgICAgICBuYW1lOiBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUlxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0aW9uID0gKDAsIF9vYmplY3QuY2xvbmUpKCgwLCBfY29uZGl0aW9uUmVnaXN0ZXJlci5nZXRDb25kaXRpb25EZXNjcmlwdG9yKSh0eXBlVmFsdWUpKTtcbiAgICB9XG4gICAgaXRlbXMucHVzaChvcHRpb24pO1xuICB9KTtcbiAgcmV0dXJuIGl0ZW1zO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIERhdGFGaWx0ZXJcbiAqL1xuY2xhc3MgRGF0YUZpbHRlciB7XG4gIGNvbnN0cnVjdG9yKGNvbmRpdGlvbkNvbGxlY3Rpb24pIHtcbiAgICBsZXQgY29sdW1uRGF0YUZhY3RvcnkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICgpID0+IFtdO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgaW5zdGFuY2Ugb2Yge0NvbmRpdGlvbkNvbGxlY3Rpb259LlxuICAgICAqXG4gICAgICogQHR5cGUge0NvbmRpdGlvbkNvbGxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29uZGl0aW9uQ29sbGVjdGlvblwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHdoaWNoIHByb3ZpZGUgc291cmNlIGRhdGEgZmFjdG9yeSBmb3Igc3BlY2lmaWVkIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2x1bW5EYXRhRmFjdG9yeVwiLCB2b2lkIDApO1xuICAgIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbiA9IGNvbmRpdGlvbkNvbGxlY3Rpb247XG4gICAgdGhpcy5jb2x1bW5EYXRhRmFjdG9yeSA9IGNvbHVtbkRhdGFGYWN0b3J5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBkYXRhIGJhc2VkIG9uIHRoZSBjb25kaXRpb25zIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGZpbHRlcigpIHtcbiAgICBsZXQgZmlsdGVyZWREYXRhID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwgKHBoeXNpY2FsQ29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgbGV0IGNvbHVtbkRhdGEgPSB0aGlzLmNvbHVtbkRhdGFGYWN0b3J5KHBoeXNpY2FsQ29sdW1uKTtcbiAgICAgIGlmIChpbmRleCkge1xuICAgICAgICBjb2x1bW5EYXRhID0gdGhpcy5fZ2V0SW50ZXJzZWN0RGF0YShjb2x1bW5EYXRhLCBmaWx0ZXJlZERhdGEpO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWREYXRhID0gdGhpcy5maWx0ZXJCeUNvbHVtbihwaHlzaWNhbENvbHVtbiwgY29sdW1uRGF0YSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgZGF0YSBiYXNlZCBvbiBzcGVjaWZpZWQgcGh5c2ljYWwgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtkYXRhU291cmNlXSBEYXRhIHNvdXJjZSBhcyBhcnJheSBvZiBvYmplY3RzIHdpdGggYHZhbHVlYCBhbmQgYG1ldGFgIGtleXMgKGUuZy4gYHt2YWx1ZTogJ2ZvbycsIG1ldGE6IHt9fWApLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgZmlsdGVyZWQgZGF0YS5cbiAgICovXG4gIGZpbHRlckJ5Q29sdW1uKGNvbHVtbikge1xuICAgIGxldCBkYXRhU291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTtcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZGF0YVNvdXJjZSwgZGF0YVJvdyA9PiB7XG4gICAgICBpZiAoZGF0YVJvdyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGRhdGFSb3csIGNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyZWREYXRhLnB1c2goZGF0YVJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnNlY3QgZGF0YS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgZGF0YSB0byBpbnRlcnNlY3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IG5lZWRsZXMgVGhlIGNvbGxlY3Rpb24gaW50ZXJzZWN0ZWQgcm93cyB3aXRoIHRoZSBkYXRhLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBfZ2V0SW50ZXJzZWN0RGF0YShkYXRhLCBuZWVkbGVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG5lZWRsZXMsIG5lZWRsZVJvdyA9PiB7XG4gICAgICBjb25zdCByb3cgPSBuZWVkbGVSb3cubWV0YS52aXN1YWxSb3c7XG4gICAgICBpZiAoZGF0YVtyb3ddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0W3Jvd10gPSBkYXRhW3Jvd107XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gRGF0YUZpbHRlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX3VuaWNvZGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy91bmljb2RlXCIpO1xudmFyIF9wcmVkZWZpbmVkSXRlbXMgPSByZXF1aXJlKFwiLi4vY29udGV4dE1lbnUvcHJlZGVmaW5lZEl0ZW1zXCIpO1xudmFyIGNvbnN0YW50cyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2NvbmRpdGlvbiA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudC9jb25kaXRpb25cIik7XG52YXIgX29wZXJhdG9ycyA9IHJlcXVpcmUoXCIuL2NvbXBvbmVudC9vcGVyYXRvcnNcIik7XG52YXIgX3ZhbHVlID0gcmVxdWlyZShcIi4vY29tcG9uZW50L3ZhbHVlXCIpO1xudmFyIF9hY3Rpb25CYXIgPSByZXF1aXJlKFwiLi9jb21wb25lbnQvYWN0aW9uQmFyXCIpO1xudmFyIF9jb25kaXRpb25Db2xsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb25kaXRpb25Db2xsZWN0aW9uXCIpKTtcbnZhciBfZGF0YUZpbHRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZGF0YUZpbHRlclwiKSk7XG52YXIgX2NvbmRpdGlvblVwZGF0ZU9ic2VydmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb25kaXRpb25VcGRhdGVPYnNlcnZlclwiKSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG52YXIgX2ZvY3VzQ29udHJvbGxlciA9IHJlcXVpcmUoXCIuL21lbnUvZm9jdXNDb250cm9sbGVyXCIpO1xudmFyIF9jb25zdGFudHMyID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xudmFyIF90cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNsYXRpb25zXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdmaWx0ZXJzJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMjUwO1xuY29uc3QgU0hPUlRDVVRTX0dST1VQID0gUExVR0lOX0tFWTtcblxuLyoqXG4gKiBAcGx1Z2luIEZpbHRlcnNcbiAqIEBjbGFzcyBGaWx0ZXJzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgcGx1Z2luIGFsbG93cyBmaWx0ZXJpbmcgdGhlIHRhYmxlIGRhdGEgZWl0aGVyIGJ5IHRoZSBidWlsdC1pbiBjb21wb25lbnQgb3Igd2l0aCB0aGUgQVBJLlxuICpcbiAqIFNlZSBbdGhlIGZpbHRlcmluZyBkZW1vXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1maWx0ZXIvY29sdW1uLWZpbHRlci5tZCkgZm9yIGV4YW1wbGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICogICBkYXRhOiBnZXREYXRhKCksXG4gKiAgIGNvbEhlYWRlcnM6IHRydWUsXG4gKiAgIHJvd0hlYWRlcnM6IHRydWUsXG4gKiAgIGRyb3Bkb3duTWVudTogdHJ1ZSxcbiAqICAgZmlsdGVyczogdHJ1ZVxuICogfSk7XG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgZGF0YT17Z2V0RGF0YSgpfVxuICogICBjb2xIZWFkZXJzPXt0cnVlfVxuICogICByb3dIZWFkZXJzPXt0cnVlfVxuICogICBkcm9wZG93bk1lbnU9e3RydWV9XG4gKiAgIGZpbHRlcnM9e3RydWV9XG4gKiAvPlxuICogYGBgXG4gKiA6OjpcbiAqL1xudmFyIF9tZW51Rm9jdXNOYXZpZ2F0b3IgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfRmlsdGVyc19icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgRmlsdGVycyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCkge1xuICAgIHJldHVybiBbJ3BsdWdpbjpEcm9wZG93bk1lbnUnLCAncGx1Z2luOkhpZGRlblJvd3MnLCAnY2VsbC10eXBlOmNoZWNrYm94J107XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIERyb3Bkb3duTWVudX0uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtEcm9wZG93bk1lbnV9XG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlKSB7XG4gICAgc3VwZXIoaG90SW5zdGFuY2UpO1xuICAgIC8vIE9uZSBsaXN0ZW5lciBmb3IgdGhlIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdHlcbiAgICAvKipcbiAgICAgKiBgYWZ0ZXJDaGFuZ2VgIGxpc3RlbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBBcnJheSBvZiBjaGFuZ2VzLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfRmlsdGVyc19icmFuZCk7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZHJvcGRvd25NZW51UGx1Z2luXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEluc3RhbmNlIG9mIHtAbGluayBDb25kaXRpb25Db2xsZWN0aW9ufS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0NvbmRpdGlvbkNvbGxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29uZGl0aW9uQ29sbGVjdGlvblwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgQ29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ9LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Q29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogTWFwLCB3aGVyZSBrZXkgaXMgY29tcG9uZW50IGlkZW50aWZpZXIgYW5kIHZhbHVlIHJlcHJlc2VudCBgQmFzZUNvbXBvbmVudGAgZWxlbWVudCBvciBpdCBkZXJpdmF0aXZlcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge01hcH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb21wb25lbnRzXCIsIG5ldyBNYXAoW1snZmlsdGVyX2J5X2NvbmRpdGlvbicsIG51bGxdLCBbJ2ZpbHRlcl9vcGVyYXRvcnMnLCBudWxsXSwgWydmaWx0ZXJfYnlfY29uZGl0aW9uMicsIG51bGxdLCBbJ2ZpbHRlcl9ieV92YWx1ZScsIG51bGxdLCBbJ2ZpbHRlcl9hY3Rpb25fYmFyJywgbnVsbF1dKSk7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIHNraXBwZWQgcm93cyBieSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtudWxsfFRyaW1taW5nTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpbHRlcnNSb3dzTWFwXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIE1lbnUgZm9jdXMgbmF2aWdhdG9yIGFsbG93cyBzd2l0Y2hpbmcgdGhlIGZvY3VzIHBvc2l0aW9uIHRocm91Z2ggVGFiIGFuZCBTaGlmdCBUYWIga2V5cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNZW51Rm9jdXNOYXZpZ2F0b3J8dW5kZWZpbmVkfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9tZW51Rm9jdXNOYXZpZ2F0b3IsIHZvaWQgMCk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYWZ0ZXJHZXRDb2xIZWFkZXInLCAoY29sLCBUSCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0ZpbHRlcnNfYnJhbmQsIHRoaXMsIF9vbkFmdGVyR2V0Q29sSGVhZGVyKS5jYWxsKHRoaXMsIGNvbCwgVEgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgRmlsdGVycyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVubmVlZGVkLXRlcm5hcnkgKi9cbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXSA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmZpbHRlcnNSb3dzTWFwID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLCBuZXcgX3RyYW5zbGF0aW9ucy5UcmltbWluZ01hcCgpKTtcbiAgICB0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiA9IHRoaXMuaG90LmdldFBsdWdpbignZHJvcGRvd25NZW51Jyk7XG4gICAgY29uc3QgZHJvcGRvd25TZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51O1xuICAgIGNvbnN0IG1lbnVDb250YWluZXIgPSBkcm9wZG93blNldHRpbmdzICYmIGRyb3Bkb3duU2V0dGluZ3MudWlDb250YWluZXIgfHwgdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHk7XG4gICAgY29uc3QgYWRkQ29uZmlybWF0aW9uSG9va3MgPSBjb21wb25lbnQgPT4ge1xuICAgICAgY29tcG9uZW50LmFkZExvY2FsSG9vaygnYWNjZXB0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0ZpbHRlcnNfYnJhbmQsIHRoaXMsIF9vbkFjdGlvbkJhclN1Ym1pdCkuY2FsbCh0aGlzLCAnYWNjZXB0JykpO1xuICAgICAgY29tcG9uZW50LmFkZExvY2FsSG9vaygnY2FuY2VsJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0ZpbHRlcnNfYnJhbmQsIHRoaXMsIF9vbkFjdGlvbkJhclN1Ym1pdCkuY2FsbCh0aGlzLCAnY2FuY2VsJykpO1xuICAgICAgY29tcG9uZW50LmFkZExvY2FsSG9vaygnY2hhbmdlJywgY29tbWFuZCA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRmlsdGVyc19icmFuZCwgdGhpcywgX29uQ29tcG9uZW50Q2hhbmdlKS5jYWxsKHRoaXMsIGNvbXBvbmVudCwgY29tbWFuZCkpO1xuICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9O1xuICAgIGNvbnN0IGZpbHRlckJ5Q29uZGl0aW9uTGFiZWwgPSAoKSA9PiBgJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGNvbnN0YW50cy5GSUxURVJTX0RJVlNfRklMVEVSX0JZX0NPTkRJVElPTil9OmA7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVMYWJlbCA9ICgpID0+IGAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoY29uc3RhbnRzLkZJTFRFUlNfRElWU19GSUxURVJfQllfVkFMVUUpfTpgO1xuICAgIGlmICghdGhpcy5jb21wb25lbnRzLmdldCgnZmlsdGVyX2J5X2NvbmRpdGlvbicpKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25Db21wb25lbnQgPSBuZXcgX2NvbmRpdGlvbi5Db25kaXRpb25Db21wb25lbnQodGhpcy5ob3QsIHtcbiAgICAgICAgaWQ6ICdmaWx0ZXJfYnlfY29uZGl0aW9uJyxcbiAgICAgICAgbmFtZTogZmlsdGVyQnlDb25kaXRpb25MYWJlbCxcbiAgICAgICAgYWRkU2VwYXJhdG9yOiBmYWxzZSxcbiAgICAgICAgbWVudUNvbnRhaW5lclxuICAgICAgfSk7XG4gICAgICBjb25kaXRpb25Db21wb25lbnQuYWRkTG9jYWxIb29rKCdhZnRlckNsb3NlJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0ZpbHRlcnNfYnJhbmQsIHRoaXMsIF9vblNlbGVjdFVJQ2xvc2VkKS5jYWxsKHRoaXMpKTtcbiAgICAgIHRoaXMuY29tcG9uZW50cy5zZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24nLCBhZGRDb25maXJtYXRpb25Ib29rcyhjb25kaXRpb25Db21wb25lbnQpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCdmaWx0ZXJfb3BlcmF0b3JzJykpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50cy5zZXQoJ2ZpbHRlcl9vcGVyYXRvcnMnLCBuZXcgX29wZXJhdG9ycy5PcGVyYXRvcnNDb21wb25lbnQodGhpcy5ob3QsIHtcbiAgICAgICAgaWQ6ICdmaWx0ZXJfb3BlcmF0b3JzJyxcbiAgICAgICAgbmFtZTogJ09wZXJhdG9ycydcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCdmaWx0ZXJfYnlfY29uZGl0aW9uMicpKSB7XG4gICAgICBjb25zdCBjb25kaXRpb25Db21wb25lbnQgPSBuZXcgX2NvbmRpdGlvbi5Db25kaXRpb25Db21wb25lbnQodGhpcy5ob3QsIHtcbiAgICAgICAgaWQ6ICdmaWx0ZXJfYnlfY29uZGl0aW9uMicsXG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBhZGRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgIG1lbnVDb250YWluZXJcbiAgICAgIH0pO1xuICAgICAgY29uZGl0aW9uQ29tcG9uZW50LmFkZExvY2FsSG9vaygnYWZ0ZXJDbG9zZScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9GaWx0ZXJzX2JyYW5kLCB0aGlzLCBfb25TZWxlY3RVSUNsb3NlZCkuY2FsbCh0aGlzKSk7XG4gICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KCdmaWx0ZXJfYnlfY29uZGl0aW9uMicsIGFkZENvbmZpcm1hdGlvbkhvb2tzKGNvbmRpdGlvbkNvbXBvbmVudCkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV92YWx1ZScpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KCdmaWx0ZXJfYnlfdmFsdWUnLCBhZGRDb25maXJtYXRpb25Ib29rcyhuZXcgX3ZhbHVlLlZhbHVlQ29tcG9uZW50KHRoaXMuaG90LCB7XG4gICAgICAgIGlkOiAnZmlsdGVyX2J5X3ZhbHVlJyxcbiAgICAgICAgbmFtZTogZmlsdGVyVmFsdWVMYWJlbFxuICAgICAgfSkpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCdmaWx0ZXJfYWN0aW9uX2JhcicpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudHMuc2V0KCdmaWx0ZXJfYWN0aW9uX2JhcicsIGFkZENvbmZpcm1hdGlvbkhvb2tzKG5ldyBfYWN0aW9uQmFyLkFjdGlvbkJhckNvbXBvbmVudCh0aGlzLmhvdCwge1xuICAgICAgICBpZDogJ2ZpbHRlcl9hY3Rpb25fYmFyJyxcbiAgICAgICAgbmFtZTogJ0FjdGlvbiBiYXInXG4gICAgICB9KSkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbikge1xuICAgICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uID0gbmV3IF9jb25kaXRpb25Db2xsZWN0aW9uLmRlZmF1bHQodGhpcy5ob3QpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIgPSBuZXcgX2NvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlZmF1bHQodGhpcy5ob3QsIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbiwgcGh5c2ljYWxDb2x1bW4gPT4gdGhpcy5nZXREYXRhTWFwQXRDb2x1bW4ocGh5c2ljYWxDb2x1bW4pKTtcbiAgICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCd1cGRhdGUnLCBjb25kaXRpb25TdGF0ZSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRmlsdGVyc19icmFuZCwgdGhpcywgX3VwZGF0ZUNvbXBvbmVudHMpLmNhbGwodGhpcywgY29uZGl0aW9uU3RhdGUpKTtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IGNvbXBvbmVudC5zaG93KCkpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucycsIGRlZmF1bHRPcHRpb25zID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9GaWx0ZXJzX2JyYW5kLCB0aGlzLCBfb25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zKS5jYWxsKHRoaXMsIGRlZmF1bHRPcHRpb25zKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckRyb3Bkb3duTWVudVNob3cnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfRmlsdGVyc19icmFuZCwgdGhpcywgX29uQWZ0ZXJEcm9wZG93bk1lbnVTaG93KS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyRHJvcGRvd25NZW51SGlkZScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9GaWx0ZXJzX2JyYW5kLCB0aGlzLCBfb25BZnRlckRyb3Bkb3duTWVudUhpZGUpLmNhbGwodGhpcykpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBjaGFuZ2VzID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9GaWx0ZXJzX2JyYW5kLCB0aGlzLCBfb25BZnRlckNoYW5nZSkuY2FsbCh0aGlzLCBjaGFuZ2VzKSk7XG5cbiAgICAvLyBUZW1wLiBzb2x1dGlvbiAoZXh0ZW5kaW5nIG1lbnUgaXRlbXMgYnVnIGluIGNvbnRleHRNZW51L2Ryb3Bkb3duTWVudSlcbiAgICBpZiAodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUgJiYgdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pIHtcbiAgICAgIHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKTtcbiAgICAgIHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpO1xuICAgIH1cbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudUZvY3VzTmF2aWdhdG9yLCB0aGlzKSAmJiB0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVkKSB7XG4gICAgICBjb25zdCBtYWluTWVudSA9IHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7XG4gICAgICBjb25zdCBmb2N1c2FibGVJdGVtcyA9IFtcbiAgICAgIC8vIEEgZmFrZSBtZW51IGl0ZW0gdGhhdCBvbmNlIGZvY3VzZWQgYWxsb3dzIGVzY2FwaW5nIGZyb20gdGhlIGZvY3VzIG5hdmlnYXRpb24gKHVzaW5nIFRhYiBrZXlzKVxuICAgICAgLy8gdG8gdGhlIG1lbnUgbmF2aWdhdGlvbiB1c2luZyBhcnJvdyBrZXlzLlxuICAgICAge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lbnVOYXZpZ2F0b3IgPSBtYWluTWVudS5nZXROYXZpZ2F0b3IoKTtcbiAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRNZW51SXRlbSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudUZvY3VzTmF2aWdhdG9yLCB0aGlzKS5nZXRMYXN0TWVudVBhZ2UoKTtcbiAgICAgICAgICBtYWluTWVudS5mb2N1cygpO1xuICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRNZW51SXRlbSA+IDApIHtcbiAgICAgICAgICAgIG1lbnVOYXZpZ2F0b3Iuc2V0Q3VycmVudFBhZ2UobGFzdFNlbGVjdGVkTWVudUl0ZW0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtZW51TmF2aWdhdG9yLnRvRmlyc3RJdGVtKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAuLi5BcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cykubWFwKF9yZWYgPT4ge1xuICAgICAgICBsZXQgWywgY29tcG9uZW50XSA9IF9yZWY7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuZ2V0RWxlbWVudHMoKTtcbiAgICAgIH0pLmZsYXQoKV07XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX21lbnVGb2N1c05hdmlnYXRvciwgdGhpcywgKDAsIF9mb2N1c0NvbnRyb2xsZXIuY3JlYXRlTWVudUZvY3VzQ29udHJvbGxlcikobWFpbk1lbnUsIGZvY3VzYWJsZUl0ZW1zKSk7XG4gICAgICBjb25zdCBmb3J3YXJkVG9Gb2N1c05hdmlnYXRpb24gPSBldmVudCA9PiB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudUZvY3VzTmF2aWdhdG9yLCB0aGlzKS5saXN0ZW4oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCgwLCBfdW5pY29kZS5pc0tleSkoZXZlbnQua2V5Q29kZSwgJ1RBQicpKSB7XG4gICAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnVGb2N1c05hdmlnYXRvciwgdGhpcykudG9QcmV2aW91c0l0ZW0oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tZW51Rm9jdXNOYXZpZ2F0b3IsIHRoaXMpLnRvTmV4dEl0ZW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLmNvbXBvbmVudHMuZ2V0KCdmaWx0ZXJfYnlfdmFsdWUnKS5hZGRMb2NhbEhvb2soJ2xpc3RUYWJLZXlkb3duJywgZm9yd2FyZFRvRm9jdXNOYXZpZ2F0aW9uKTtcbiAgICAgIHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24nKS5hZGRMb2NhbEhvb2soJ3NlbGVjdFRhYktleWRvd24nLCBmb3J3YXJkVG9Gb2N1c05hdmlnYXRpb24pO1xuICAgIH1cbiAgICB0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdmFyIF90aGlzJGRyb3Bkb3duTWVudVBsdTtcbiAgICAgIGlmICgoX3RoaXMkZHJvcGRvd25NZW51UGx1ID0gdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pICE9PSBudWxsICYmIF90aGlzJGRyb3Bkb3duTWVudVBsdSAhPT0gdm9pZCAwICYmIF90aGlzJGRyb3Bkb3duTWVudVBsdS5lbmFibGVkKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50LCBrZXkpID0+IHtcbiAgICAgICAgY29tcG9uZW50LmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRzLnNldChrZXksIG51bGwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gICAgdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIGZpbHRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snQWx0JywgJ0EnXV0sXG4gICAgICBzdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmNsZWFyQ29uZGl0aW9ucygpO1xuICAgICAgICB0aGlzLmZpbHRlcigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgdGhpcy5ob3Quc2VsZWN0Q2VsbHMoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIGZpbHRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFNIT1JUQ1VUU19HUk9VUCk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgRmlsdGVycyNcbiAgICogQGZ1bmN0aW9uIGFkZENvbmRpdGlvblxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQWRkcyBjb25kaXRpb24gdG8gdGhlIGNvbmRpdGlvbnMgY29sbGVjdGlvbiBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBQb3NzaWJsZSBwcmVkZWZpbmVkIGNvbmRpdGlvbnM6XG4gICAqICAqIGBiZWdpbnNfd2l0aGAgLSBCZWdpbnMgd2l0aFxuICAgKiAgKiBgYmV0d2VlbmAgLSBCZXR3ZWVuXG4gICAqICAqIGBieV92YWx1ZWAgLSBCeSB2YWx1ZVxuICAgKiAgKiBgY29udGFpbnNgIC0gQ29udGFpbnNcbiAgICogICogYGRhdGVfYWZ0ZXJgIC0gQWZ0ZXIgYSBkYXRlXG4gICAqICAqIGBkYXRlX2JlZm9yZWAgLSBCZWZvcmUgYSBkYXRlXG4gICAqICAqIGBkYXRlX3RvZGF5YCAtIFRvZGF5XG4gICAqICAqIGBkYXRlX3RvbW9ycm93YCAtIFRvbW9ycm93XG4gICAqICAqIGBkYXRlX3llc3RlcmRheWAgLSBZZXN0ZXJkYXlcbiAgICogICogYGVtcHR5YCAtIEVtcHR5XG4gICAqICAqIGBlbmRzX3dpdGhgIC0gRW5kcyB3aXRoXG4gICAqICAqIGBlcWAgLSBFcXVhbFxuICAgKiAgKiBgZ3RgIC0gR3JlYXRlciB0aGFuXG4gICAqICAqIGBndGVgIC0gR3JlYXRlciB0aGFuIG9yIGVxdWFsXG4gICAqICAqIGBsdGAgLSBMZXNzIHRoYW5cbiAgICogICogYGx0ZWAgLSBMZXNzIHRoYW4gb3IgZXF1YWxcbiAgICogICogYG5vbmVgIC0gTm9uZSAobm8gZmlsdGVyKVxuICAgKiAgKiBgbm90X2JldHdlZW5gIC0gTm90IGJldHdlZW5cbiAgICogICogYG5vdF9jb250YWluc2AgLSBOb3QgY29udGFpbnNcbiAgICogICogYG5vdF9lbXB0eWAgLSBOb3QgZW1wdHlcbiAgICogICogYG5lcWAgLSBOb3QgZXF1YWwuXG4gICAqXG4gICAqIFBvc3NpYmxlIG9wZXJhdGlvbnMgb24gY29sbGVjdGlvbiBvZiBjb25kaXRpb25zOlxuICAgKiAgKiBgY29uanVuY3Rpb25gIC0gWyoqQ29uanVuY3Rpb24qKl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTG9naWNhbF9jb25qdW5jdGlvbikgb24gY29uZGl0aW9ucyBjb2xsZWN0aW9uIChieSBkZWZhdWx0KSwgaS5lLiBmb3Igc3VjaCBvcGVyYXRpb246IDxici8+IGMxIEFORCBjMiBBTkQgYzMgQU5EIGM0IC4uLiBBTkQgY24gPT09IFRSVUUsIHdoZXJlIGMxIC4uLiBjbiBhcmUgY29uZGl0aW9ucy5cbiAgICogICogYGRpc2p1bmN0aW9uYCAtIFsqKkRpc2p1bmN0aW9uKipdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvZ2ljYWxfZGlzanVuY3Rpb24pIG9uIGNvbmRpdGlvbnMgY29sbGVjdGlvbiwgaS5lLiBmb3Igc3VjaCBvcGVyYXRpb246IDxici8+IGMxIE9SIGMyIE9SIGMzIE9SIGM0IC4uLiBPUiBjbiA9PT0gVFJVRSwgd2hlcmUgYzEsIGMyLCBjMywgYzQgLi4uIGNuIGFyZSBjb25kaXRpb25zLlxuICAgKiAgKiBgZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb25gIC0gKipEaXNqdW5jdGlvbioqIG9uIGZpcnN0IGBuIC0gMWBcXCogY29uZGl0aW9ucyBmcm9tIGNvbGxlY3Rpb24gd2l0aCBhbiBleHRyYSByZXF1aXJlbWVudCBjb21wdXRlZCBmcm9tIHRoZSBsYXN0IGNvbmRpdGlvbiwgaS5lLiBmb3Igc3VjaCBvcGVyYXRpb246IDxici8+IGMxIE9SIGMyIE9SIGMzIE9SIGM0IC4uLiBPUiBjbi0xIEFORCBjbiA9PT0gVFJVRSwgd2hlcmUgYzEsIGMyLCBjMywgYzQgLi4uIGNuIGFyZSBjb25kaXRpb25zLlxuICAgKlxuICAgKiBcXCogd2hlbiBgbmAgaXMgY29sbGVjdGlvbiBzaXplOyBpdCdzIHVzZWQgaS5lLiBmb3Igb25lIG9wZXJhdGlvbiBpbnRyb2R1Y2VkIGZyb20gVUkgKHdoZW4gY2hvb3NpbmcgZnJvbSBmaWx0ZXIncyBkcm9wLWRvd24gbWVudSB0d28gY29uZGl0aW9ucyB3aXRoIE9SIG9wZXJhdG9yIGJldHdlZW4gdGhlbSwgbWl4ZWQgd2l0aCBjaG9vc2luZyB2YWx1ZXMgZnJvbSB0aGUgbXVsdGlwbGUgY2hvaWNlIHNlbGVjdClcbiAgICpcbiAgICogKipOb3RlKio6IE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIGBjb25qdW5jdGlvbmAsIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICAgKiBgYGBqc1xuICAgKiBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZScpO1xuICAgKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICAgKiAgIGRhdGE6IGdldERhdGEoKSxcbiAgICogICBmaWx0ZXJzOiB0cnVlXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBhY2Nlc3MgdG8gZmlsdGVycyBwbHVnaW4gaW5zdGFuY2VcbiAgICogY29uc3QgZmlsdGVyc1BsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2ZpbHRlcnMnKTtcbiAgICpcbiAgICogLy8gYWRkIGZpbHRlciBcIkdyZWF0ZXIgdGhhblwiIDk1IHRvIGNvbHVtbiBhdCBpbmRleCAxXG4gICAqIGZpbHRlcnNQbHVnaW4uYWRkQ29uZGl0aW9uKDEsICdndCcsIFs5NV0pO1xuICAgKiBmaWx0ZXJzUGx1Z2luLmZpbHRlcigpO1xuICAgKlxuICAgKiAvLyBhZGQgZmlsdGVyIFwiQnkgdmFsdWVcIiB0byBjb2x1bW4gYXQgaW5kZXggMVxuICAgKiAvLyBpbiB0aGlzIGNhc2UgYWxsIHZhbHVlJ3MgdGhhdCBkb24ndCBtYXRjaCB3aWxsIGJlIGZpbHRlcmVkLlxuICAgKiBmaWx0ZXJzUGx1Z2luLmFkZENvbmRpdGlvbigxLCAnYnlfdmFsdWUnLCBbWydpbmcnLCAnZWQnLCAnYXMnLCAnb24nXV0pO1xuICAgKiBmaWx0ZXJzUGx1Z2luLmZpbHRlcigpO1xuICAgKlxuICAgKiAvLyBhZGQgZmlsdGVyIFwiQmVnaW5zIHdpdGhcIiB3aXRoIHZhbHVlIFwiZGVcIiBBTkQgXCJOb3QgY29udGFpbnNcIiB3aXRoIHZhbHVlIFwiaW5nXCJcbiAgICogZmlsdGVyc1BsdWdpbi5hZGRDb25kaXRpb24oMSwgJ2JlZ2luc193aXRoJywgWydkZSddLCAnY29uanVuY3Rpb24nKTtcbiAgICogZmlsdGVyc1BsdWdpbi5hZGRDb25kaXRpb24oMSwgJ25vdF9jb250YWlucycsIFsnaW5nJ10sICdjb25qdW5jdGlvbicpO1xuICAgKiBmaWx0ZXJzUGx1Z2luLmZpbHRlcigpO1xuICAgKlxuICAgKiAvLyBhZGQgZmlsdGVyIFwiQmVnaW5zIHdpdGhcIiB3aXRoIHZhbHVlIFwiZGVcIiBPUiBcIk5vdCBjb250YWluc1wiIHdpdGggdmFsdWUgXCJpbmdcIlxuICAgKiBmaWx0ZXJzUGx1Z2luLmFkZENvbmRpdGlvbigxLCAnYmVnaW5zX3dpdGgnLCBbJ2RlJ10sICdkaXNqdW5jdGlvbicpO1xuICAgKiBmaWx0ZXJzUGx1Z2luLmFkZENvbmRpdGlvbigxLCAnbm90X2NvbnRhaW5zJywgWydpbmcnXSwgJ2Rpc2p1bmN0aW9uJyk7XG4gICAqIGZpbHRlcnNQbHVnaW4uZmlsdGVyKCk7XG4gICAqIGBgYFxuICAgKiA6OjpcbiAgICpcbiAgICogOjo6IG9ubHktZm9yIHJlYWN0XG4gICAqIGBgYGpzeFxuICAgKiBjb25zdCBob3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAqXG4gICAqIC4uLlxuICAgKlxuICAgKiA8SG90VGFibGVcbiAgICogICByZWY9e2hvdFJlZn1cbiAgICogICBkYXRhPXtnZXREYXRhKCl9XG4gICAqICAgZmlsdGVycz17dHJ1ZX1cbiAgICogLz5cbiAgICpcbiAgICogLy8gYWNjZXNzIHRvIGZpbHRlcnMgcGx1Z2luIGluc3RhbmNlXG4gICAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICAgKiBjb25zdCBmaWx0ZXJzUGx1Z2luID0gaG90LmdldFBsdWdpbignZmlsdGVycycpO1xuICAgKlxuICAgKiAvLyBhZGQgZmlsdGVyIFwiR3JlYXRlciB0aGFuXCIgOTUgdG8gY29sdW1uIGF0IGluZGV4IDFcbiAgICogZmlsdGVyc1BsdWdpbi5hZGRDb25kaXRpb24oMSwgJ2d0JywgWzk1XSk7XG4gICAqIGZpbHRlcnNQbHVnaW4uZmlsdGVyKCk7XG4gICAqXG4gICAqIC8vIGFkZCBmaWx0ZXIgXCJCeSB2YWx1ZVwiIHRvIGNvbHVtbiBhdCBpbmRleCAxXG4gICAqIC8vIGluIHRoaXMgY2FzZSBhbGwgdmFsdWUncyB0aGF0IGRvbid0IG1hdGNoIHdpbGwgYmUgZmlsdGVyZWQuXG4gICAqIGZpbHRlcnNQbHVnaW4uYWRkQ29uZGl0aW9uKDEsICdieV92YWx1ZScsIFtbJ2luZycsICdlZCcsICdhcycsICdvbiddXSk7XG4gICAqIGZpbHRlcnNQbHVnaW4uZmlsdGVyKCk7XG4gICAqXG4gICAqIC8vIGFkZCBmaWx0ZXIgXCJCZWdpbnMgd2l0aFwiIHdpdGggdmFsdWUgXCJkZVwiIEFORCBcIk5vdCBjb250YWluc1wiIHdpdGggdmFsdWUgXCJpbmdcIlxuICAgKiBmaWx0ZXJzUGx1Z2luLmFkZENvbmRpdGlvbigxLCAnYmVnaW5zX3dpdGgnLCBbJ2RlJ10sICdjb25qdW5jdGlvbicpO1xuICAgKiBmaWx0ZXJzUGx1Z2luLmFkZENvbmRpdGlvbigxLCAnbm90X2NvbnRhaW5zJywgWydpbmcnXSwgJ2Nvbmp1bmN0aW9uJyk7XG4gICAqIGZpbHRlcnNQbHVnaW4uZmlsdGVyKCk7XG4gICAqXG4gICAqIC8vIGFkZCBmaWx0ZXIgXCJCZWdpbnMgd2l0aFwiIHdpdGggdmFsdWUgXCJkZVwiIE9SIFwiTm90IGNvbnRhaW5zXCIgd2l0aCB2YWx1ZSBcImluZ1wiXG4gICAqIGZpbHRlcnNQbHVnaW4uYWRkQ29uZGl0aW9uKDEsICdiZWdpbnNfd2l0aCcsIFsnZGUnXSwgJ2Rpc2p1bmN0aW9uJyk7XG4gICAqIGZpbHRlcnNQbHVnaW4uYWRkQ29uZGl0aW9uKDEsICdub3RfY29udGFpbnMnLCBbJ2luZyddLCAnZGlzanVuY3Rpb24nKTtcbiAgICogZmlsdGVyc1BsdWdpbi5maWx0ZXIoKTtcbiAgICogYGBgXG4gICAqIDo6OlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENvbmRpdGlvbiBzaG9ydCBuYW1lLlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIENvbmRpdGlvbiBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3BlcmF0aW9uSWQ9Y29uanVuY3Rpb25dIGBpZGAgb2Ygb3BlcmF0aW9uIHdoaWNoIGlzIHBlcmZvcm1lZCBvbiB0aGUgY29sdW1uLlxuICAgKi9cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIGFkZENvbmRpdGlvbihjb2x1bW4sIG5hbWUsIGFyZ3MpIHtcbiAgICBsZXQgb3BlcmF0aW9uSWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IF9jb25zdGFudHMyLk9QRVJBVElPTl9BTkQ7XG4gICAgY29uc3QgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbik7XG4gICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihwaHlzaWNhbENvbHVtbiwge1xuICAgICAgY29tbWFuZDoge1xuICAgICAgICBrZXk6IG5hbWVcbiAgICAgIH0sXG4gICAgICBhcmdzXG4gICAgfSwgb3BlcmF0aW9uSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgY29uZGl0aW9ucyBhdCBzcGVjaWZpZWQgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICByZW1vdmVDb25kaXRpb25zKGNvbHVtbikge1xuICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pO1xuICAgIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKHBoeXNpY2FsQ29sdW1uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGNvbmRpdGlvbnMgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4gaW5kZXggb3IsIGlmIHRoZSBjb2x1bW4gaW5kZXhcbiAgICogd2FzIG5vdCBwYXNzZWQsIGNsZWFyIHRoZSBjb25kaXRpb25zIGZvciBhbGwgY29sdW1ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqL1xuICBjbGVhckNvbmRpdGlvbnMoY29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uY2xlYW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbik7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhwaHlzaWNhbENvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgZGF0YSBiYXNlZCBvbiBhZGRlZCBmaWx0ZXIgY29uZGl0aW9ucy5cbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZUZpbHRlclxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJGaWx0ZXJcbiAgICovXG4gIGZpbHRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBuYXZpZ2FibGVIZWFkZXJzXG4gICAgfSA9IHRoaXMuaG90LmdldFNldHRpbmdzKCk7XG4gICAgY29uc3QgZGF0YUZpbHRlciA9IHRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKTtcbiAgICBjb25zdCBuZWVkVG9GaWx0ZXIgPSAhdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtcbiAgICBsZXQgdmlzaWJsZVZpc3VhbFJvd3MgPSBbXTtcbiAgICBjb25zdCBjb25kaXRpb25zID0gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtcbiAgICBjb25zdCBhbGxvd0ZpbHRlcmluZyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVGaWx0ZXInLCBjb25kaXRpb25zKTtcbiAgICBpZiAoYWxsb3dGaWx0ZXJpbmcgIT09IGZhbHNlKSB7XG4gICAgICBpZiAobmVlZFRvRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWRSb3dzID0gW107XG4gICAgICAgIHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgdmlzaWJsZVZpc3VhbFJvd3MgPSAoMCwgX2FycmF5LmFycmF5TWFwKShkYXRhRmlsdGVyLmZpbHRlcigpLCByb3dEYXRhID0+IHJvd0RhdGEubWV0YS52aXN1YWxSb3cpO1xuICAgICAgICAgIGNvbnN0IHZpc2libGVWaXN1YWxSb3dzQXNzZXJ0aW9uID0gKDAsIF91dGlscy5jcmVhdGVBcnJheUFzc2VydGlvbikodmlzaWJsZVZpc3VhbFJvd3MpO1xuICAgICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkodGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCkgLSAxLCByb3cgPT4ge1xuICAgICAgICAgICAgaWYgKCF2aXNpYmxlVmlzdWFsUm93c0Fzc2VydGlvbihyb3cpKSB7XG4gICAgICAgICAgICAgIHRyaW1tZWRSb3dzLnB1c2gocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodHJpbW1lZFJvd3MsIHBoeXNpY2FsUm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsUm93LCB0cnVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIGlmICghbmF2aWdhYmxlSGVhZGVycyAmJiAhdmlzaWJsZVZpc3VhbFJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyRmlsdGVyJywgY29uZGl0aW9ucyk7XG4gICAgdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB0aGlzLmhvdC5yZW5kZXIoKTtcbiAgICBpZiAodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5ob3Quc2VsZWN0Q2VsbChuYXZpZ2FibGVIZWFkZXJzID8gLTEgOiAwLCB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5jb2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGxhc3Qgc2VsZWN0ZWQgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7e3Zpc3VhbEluZGV4OiBudW1iZXIsIHBoeXNpY2FsSW5kZXg6IG51bWJlcn0gfCBudWxsfSBSZXR1cm5zIGBudWxsYCB3aGVuIGEgY29sdW1uIGlzXG4gICAqIG5vdCBzZWxlY3RlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGB2aXN1YWxJbmRleGAgYW5kIGBwaHlzaWNhbEluZGV4YCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmdcbiAgICogdGhlIGluZGV4IG9mIHRoZSBjb2x1bW4uXG4gICAqL1xuICBnZXRTZWxlY3RlZENvbHVtbigpIHtcbiAgICB2YXIgX3RoaXMkaG90JGdldFNlbGVjdGVkO1xuICAgIGNvbnN0IGhpZ2hsaWdodCA9IChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGhvdCRnZXRTZWxlY3RlZC5oaWdobGlnaHQ7XG4gICAgaWYgKCFoaWdobGlnaHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmlzdWFsSW5kZXg6IGhpZ2hsaWdodC5jb2wsXG4gICAgICBwaHlzaWNhbEluZGV4OiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGhpZ2hsaWdodC5jb2wpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGhhbmRzb250YWJsZSBzb3VyY2UgZGF0YSB3aXRoIGNlbGwgbWV0YSBiYXNlZCBvbiBjdXJyZW50IHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIFRoZSBwaHlzaWNhbCBjb2x1bW4gaW5kZXguIEJ5IGRlZmF1bHQgY29sdW1uIGluZGV4IGFjY2VwdCB0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGVkIGNvbHVtbi5cbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGFycmF5IG9mIG9iamVjdHMgd2hlcmUga2V5cyBhcyByb3cgaW5kZXguXG4gICAqL1xuICBnZXREYXRhTWFwQXRDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgdmlzdWFsQ29sdW1uID0gdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oY29sdW1uKTtcbiAgICBjb25zdCBkYXRhID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbCh2aXN1YWxDb2x1bW4pLCAodmFsdWUsIHJvd0luZGV4KSA9PiB7XG4gICAgICB2YXIgX3RoaXMkaG90JGdldERhdGFBdENlO1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3csXG4gICAgICAgIGNvbCxcbiAgICAgICAgdmlzdWFsQ29sLFxuICAgICAgICB2aXN1YWxSb3csXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGluc3RhbmNlLFxuICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICBsb2NhbGVcbiAgICAgIH0gPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShyb3dJbmRleCwgdmlzdWFsQ29sdW1uKTtcbiAgICAgIGNvbnN0IGRhdGFWYWx1ZSA9IChfdGhpcyRob3QkZ2V0RGF0YUF0Q2UgPSB0aGlzLmhvdC5nZXREYXRhQXRDZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KHJvd0luZGV4KSwgdmlzdWFsQ29sdW1uKSkgIT09IG51bGwgJiYgX3RoaXMkaG90JGdldERhdGFBdENlICE9PSB2b2lkIDAgPyBfdGhpcyRob3QkZ2V0RGF0YUF0Q2UgOiB2YWx1ZTtcbiAgICAgIGRhdGEucHVzaCh7XG4gICAgICAgIG1ldGE6IHtcbiAgICAgICAgICByb3csXG4gICAgICAgICAgY29sLFxuICAgICAgICAgIHZpc3VhbENvbCxcbiAgICAgICAgICB2aXN1YWxSb3csXG4gICAgICAgICAgdHlwZSxcbiAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgIGxvY2FsZVxuICAgICAgICB9LFxuICAgICAgICB2YWx1ZTogKDAsIF91dGlscy50b0VtcHR5U3RyaW5nKShkYXRhVmFsdWUpXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb25kaXRpb24gb2YgVmFsdWVDb21wb25lbnQsIGJhc2VkIG9uIHRoZSBoYW5kbGVkIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBDb2x1bW4gaW5kZXggb2YgaGFuZGxlZCBWYWx1ZUNvbXBvbmVudCBjb25kaXRpb24uXG4gICAqL1xuICB1cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihjb2x1bW5JbmRleCkge1xuICAgIGNvbnN0IGRhdGFBdENvbCA9IHRoaXMuaG90LmdldERhdGFBdENvbChjb2x1bW5JbmRleCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSAoMCwgX3V0aWxzLnVuaWZ5Q29sdW1uVmFsdWVzKShkYXRhQXRDb2wpO1xuICAgIHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4oY29sdW1uSW5kZXgsIHNlbGVjdGVkVmFsdWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBjb21wb25lbnRzIHRvIGl0cyBzYXZlZCBzdGF0ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gY29tcG9uZW50cyBMaXN0IG9mIGNvbXBvbmVudHMuXG4gICAqL1xuICByZXN0b3JlQ29tcG9uZW50cyhjb21wb25lbnRzKSB7XG4gICAgdmFyIF90aGlzJGdldFNlbGVjdGVkQ29sdTtcbiAgICBjb25zdCBwaHlzaWNhbEluZGV4ID0gKF90aGlzJGdldFNlbGVjdGVkQ29sdSA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKSkgPT09IG51bGwgfHwgX3RoaXMkZ2V0U2VsZWN0ZWRDb2x1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRnZXRTZWxlY3RlZENvbHUucGh5c2ljYWxJbmRleDtcbiAgICBjb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIGlmIChjb21wb25lbnQuaXNIaWRkZW4oKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb21wb25lbnQucmVzdG9yZVN0YXRlKHBoeXNpY2FsSW5kZXgpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZnRlciBkcm9wZG93biBtZW51IHNob3cgbGlzdGVuZXIuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBHZXQgYW4gb3BlcmF0aW9uLCBiYXNlZCBvbiB0aGUgbnVtYmVyIGFuZCB0eXBlcyBvZiBhcmd1bWVudHMgKHdoZXJlIGFyZ3VtZW50cyBhcmUgc3RhdGVzIG9mIGNvbXBvbmVudHMpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VnZ2VzdGVkT3BlcmF0aW9uIE9wZXJhdGlvbiB3aGljaCB3YXMgY2hvc2VuIGJ5IHVzZXIgZnJvbSBVSS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGJ5Q29uZGl0aW9uU3RhdGUxIFN0YXRlIG9mIGZpcnN0IGNvbmRpdGlvbiBjb21wb25lbnQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBieUNvbmRpdGlvblN0YXRlMiBTdGF0ZSBvZiBzZWNvbmQgY29uZGl0aW9uIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGJ5VmFsdWVTdGF0ZSBTdGF0ZSBvZiB2YWx1ZSBjb21wb25lbnQuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHN1Z2dlc3RlZE9wZXJhdGlvbiwgYnlDb25kaXRpb25TdGF0ZTEsIGJ5Q29uZGl0aW9uU3RhdGUyLCBieVZhbHVlU3RhdGUpIHtcbiAgICBsZXQgb3BlcmF0aW9uID0gc3VnZ2VzdGVkT3BlcmF0aW9uO1xuICAgIGlmIChvcGVyYXRpb24gPT09IF9jb25zdGFudHMyLk9QRVJBVElPTl9PUiAmJiBieUNvbmRpdGlvblN0YXRlMS5jb21tYW5kLmtleSAhPT0gX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUgJiYgYnlDb25kaXRpb25TdGF0ZTIuY29tbWFuZC5rZXkgIT09IF9jb25zdGFudHMyLkNPTkRJVElPTl9OT05FICYmIGJ5VmFsdWVTdGF0ZS5jb21tYW5kLmtleSAhPT0gX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpIHtcbiAgICAgIG9wZXJhdGlvbiA9IF9jb25zdGFudHMyLk9QRVJBVElPTl9PUl9USEVOX1ZBUklBQkxFO1xuICAgIH0gZWxzZSBpZiAoYnlWYWx1ZVN0YXRlLmNvbW1hbmQua2V5ICE9PSBfY29uc3RhbnRzMi5DT05ESVRJT05fTk9ORSkge1xuICAgICAgaWYgKGJ5Q29uZGl0aW9uU3RhdGUxLmNvbW1hbmQua2V5ID09PSBfY29uc3RhbnRzMi5DT05ESVRJT05fTk9ORSB8fCBieUNvbmRpdGlvblN0YXRlMi5jb21tYW5kLmtleSA9PT0gX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpIHtcbiAgICAgICAgb3BlcmF0aW9uID0gX2NvbnN0YW50czIuT1BFUkFUSU9OX0FORDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBhY3Rpb24gYmFyIHN1Ym1pdCBsaXN0ZW5lci5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1Ym1pdFR5cGUgVGhlIHN1Ym1pdCB0eXBlLlxuICAgKi9cblxuICAvKipcbiAgICogTGlzdGVuIHRvIHRoZSBrZXlib2FyZCBpbnB1dCBvbiBkb2N1bWVudCBib2R5IGFuZCBmb3J3YXJkIGV2ZW50cyB0byBpbnN0YW5jZSBvZiBIYW5kc29udGFibGVcbiAgICogY3JlYXRlZCBieSBEcm9wZG93bk1lbnUgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCkge1xuICAgIGlmICh0aGlzLmRyb3Bkb3duTWVudVBsdWdpbikge1xuICAgICAgdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uc2V0TGlzdGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdmlzaWJpbGl0eSBvZiBzb21lIG9mIHRoZSBjb21wb25lbnRzLCBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudHMuZ2V0KCdmaWx0ZXJfYnlfY29uZGl0aW9uJyk7XG4gICAgY29uc3Qge1xuICAgICAgY29tbWFuZFxuICAgIH0gPSBjb21wb25lbnQuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBjb21wb25lbnRzVG9TaG93ID0gW3RoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24yJyksIHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9vcGVyYXRvcnMnKV07XG4gICAgaWYgKGNvbW1hbmQuc2hvd09wZXJhdG9ycykge1xuICAgICAgdGhpcy5zaG93Q29tcG9uZW50cyguLi5jb21wb25lbnRzVG9TaG93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWRlQ29tcG9uZW50cyguLi5jb21wb25lbnRzVG9TaG93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT24gYWZ0ZXIgZ2V0IGNvbHVtbiBoZWFkZXIgbGlzdGVuZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEggSGVhZGVyJ3MgVEggZWxlbWVudC5cbiAgICovXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgRGF0YUZpbHRlciBpbnN0YW5jZSBiYXNlZCBvbiBjb25kaXRpb24gY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtDb25kaXRpb25Db2xsZWN0aW9ufSBjb25kaXRpb25Db2xsZWN0aW9uIENvbmRpdGlvbiBjb2xsZWN0aW9uIG9iamVjdC5cbiAgICogQHJldHVybnMge0RhdGFGaWx0ZXJ9XG4gICAqL1xuICBfY3JlYXRlRGF0YUZpbHRlcigpIHtcbiAgICBsZXQgY29uZGl0aW9uQ29sbGVjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uO1xuICAgIHJldHVybiBuZXcgX2RhdGFGaWx0ZXIuZGVmYXVsdChjb25kaXRpb25Db2xsZWN0aW9uLCBwaHlzaWNhbENvbHVtbiA9PiB0aGlzLmdldERhdGFNYXBBdENvbHVtbihwaHlzaWNhbENvbHVtbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHVwZGF0ZXMgdGhlIGNvbXBvbmVudHMgc3RhdGUuIFRoZSBzdGF0ZSBpcyB0cmlnZ2VyZWQgYnkgQ29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIsIHdoaWNoXG4gICAqIHJlYWN0cyB0byBhbnkgY29uZGl0aW9uIGFkZGVkIHRvIHRoZSBjb25kaXRpb24gY29sbGVjdGlvbi4gSXQgbWF5IGJlIGFkZGVkIHRocm91Z2ggdGhlIFVJXG4gICAqIGNvbXBvbmVudHMgb3IgYnkgQVBJIGNhbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25zU3RhdGUgQW4gb2JqZWN0IHdpdGggdGhlIHN0YXRlIGdlbmVyYXRlZCBieSBVSSBjb21wb25lbnRzLlxuICAgKi9cblxuICAvKipcbiAgICogUmV0dXJucyBpbmRleGVzIG9mIHBhc3NlZCBjb21wb25lbnRzIGluc2lkZSBsaXN0IG9mIGBkcm9wZG93bk1lbnVgIGl0ZW1zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gey4uLkJhc2VDb21wb25lbnR9IGNvbXBvbmVudHMgTGlzdCBvZiBjb21wb25lbnRzLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXRJbmRleGVzT2ZDb21wb25lbnRzKCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSBbXTtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSB7XG4gICAgICByZXR1cm4gaW5kZXhlcztcbiAgICB9XG4gICAgY29uc3QgbWVudSA9IHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNvbXBvbmVudHMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBjb21wb25lbnRzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShtZW51Lm1lbnVJdGVtcywgKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpdGVtLmtleSA9PT0gY29tcG9uZW50LmdldE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSkge1xuICAgICAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBpbmRleGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdmlzaWJpbGl0eSBvZiBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJsZSBEZXRlcm1pbmUgaWYgY29tcG9uZW50cyBzaG91bGQgYmUgdmlzaWJsZS5cbiAgICogQHBhcmFtIHsuLi5CYXNlQ29tcG9uZW50fSBjb21wb25lbnRzIExpc3Qgb2YgY29tcG9uZW50cy5cbiAgICovXG4gIGNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCkge1xuICAgIGxldCB2aXNpYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICAgIGlmICghdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVudSA9IHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7XG4gICAgY29uc3QgaG90TWVudSA9IG1lbnUuaG90TWVudTtcbiAgICBjb25zdCBoaWRkZW5Sb3dzID0gaG90TWVudS5nZXRQbHVnaW4oJ2hpZGRlblJvd3MnKTtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGNvbXBvbmVudHMgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgY29tcG9uZW50c1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlcyA9IHRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi5jb21wb25lbnRzKTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgaGlkZGVuUm93cy5zaG93Um93cyhpbmRleGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGlkZGVuUm93cy5oaWRlUm93cyhpbmRleGVzKTtcbiAgICB9XG4gICAgaG90TWVudS5yZW5kZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBjb21wb25lbnRzIG9mIGZpbHRlcnMgYGRyb3Bkb3duTWVudWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Li4uQmFzZUNvbXBvbmVudH0gY29tcG9uZW50cyBMaXN0IG9mIGNvbXBvbmVudHMuXG4gICAqL1xuICBoaWRlQ29tcG9uZW50cygpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGNvbXBvbmVudHMgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGNvbXBvbmVudHNbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eShmYWxzZSwgLi4uY29tcG9uZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgY29tcG9uZW50cyBvZiBmaWx0ZXJzIGBkcm9wZG93bk1lbnVgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gey4uLkJhc2VDb21wb25lbnR9IGNvbXBvbmVudHMgTGlzdCBvZiBjb21wb25lbnRzLlxuICAgKi9cbiAgc2hvd0NvbXBvbmVudHMoKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBjb21wb25lbnRzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICBjb21wb25lbnRzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkodHJ1ZSwgLi4uY29tcG9uZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudCwga2V5KSA9PiB7XG4gICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICAgIHRoaXMuY29tcG9uZW50cy5zZXQoa2V5LCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgfVxuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5GaWx0ZXJzID0gRmlsdGVycztcbmZ1bmN0aW9uIF9vbkFmdGVyQ2hhbmdlKGNoYW5nZXMpIHtcbiAgaWYgKGNoYW5nZXMpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2hhbmdlcywgY2hhbmdlID0+IHtcbiAgICAgIGNvbnN0IFssIHByb3BdID0gY2hhbmdlO1xuICAgICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmhvdC5wcm9wVG9Db2wocHJvcCk7XG4gICAgICBpZiAodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoY29sdW1uSW5kZXgpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24oY29sdW1uSW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBfb25BZnRlckRyb3Bkb3duTWVudVNob3coKSB7XG4gIHRoaXMucmVzdG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKTtcbn1cbi8qKlxuICogQWZ0ZXIgZHJvcGRvd24gbWVudSBoaWRlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckRyb3Bkb3duTWVudUhpZGUoKSB7XG4gIHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24nKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCk7XG4gIHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24yJykuZ2V0U2VsZWN0RWxlbWVudCgpLmNsb3NlT3B0aW9ucygpO1xufVxuLyoqXG4gKiBBZnRlciBkcm9wZG93biBtZW51IGRlZmF1bHQgb3B0aW9ucyBsaXN0ZW5lci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgQ29udGV4dE1lbnUgZGVmYXVsdCBpdGVtIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMoZGVmYXVsdE9wdGlvbnMpIHtcbiAgZGVmYXVsdE9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgbmFtZTogX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1JcbiAgfSk7XG4gIHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XG4gICAgZGVmYXVsdE9wdGlvbnMuaXRlbXMucHVzaChjb21wb25lbnQuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF9vbkFjdGlvbkJhclN1Ym1pdChzdWJtaXRUeXBlKSB7XG4gIHZhciBfdGhpcyRkcm9wZG93bk1lbnVQbHUzO1xuICBpZiAoc3VibWl0VHlwZSA9PT0gJ2FjY2VwdCcpIHtcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtcbiAgICBpZiAoc2VsZWN0ZWRDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIHZhciBfdGhpcyRkcm9wZG93bk1lbnVQbHUyO1xuICAgICAgKF90aGlzJGRyb3Bkb3duTWVudVBsdTIgPSB0aGlzLmRyb3Bkb3duTWVudVBsdWdpbikgPT09IG51bGwgfHwgX3RoaXMkZHJvcGRvd25NZW51UGx1MiA9PT0gdm9pZCAwIHx8IF90aGlzJGRyb3Bkb3duTWVudVBsdTIuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgcGh5c2ljYWxJbmRleFxuICAgIH0gPSBzZWxlY3RlZENvbHVtbjtcbiAgICBjb25zdCBieUNvbmRpdGlvblN0YXRlMSA9IHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24nKS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGJ5Q29uZGl0aW9uU3RhdGUyID0gdGhpcy5jb21wb25lbnRzLmdldCgnZmlsdGVyX2J5X2NvbmRpdGlvbjInKS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGJ5VmFsdWVTdGF0ZSA9IHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV92YWx1ZScpLmdldFN0YXRlKCk7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gdGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9vcGVyYXRvcnMnKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLCBieUNvbmRpdGlvblN0YXRlMSwgYnlDb25kaXRpb25TdGF0ZTIsIGJ5VmFsdWVTdGF0ZSk7XG4gICAgdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMoKTtcbiAgICBsZXQgY29sdW1uU3RhY2tQb3NpdGlvbiA9IHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKHBoeXNpY2FsSW5kZXgpO1xuICAgIGlmIChjb2x1bW5TdGFja1Bvc2l0aW9uID09PSAtMSkge1xuICAgICAgY29sdW1uU3RhY2tQb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMocGh5c2ljYWxJbmRleCk7XG4gICAgaWYgKGJ5Q29uZGl0aW9uU3RhdGUxLmNvbW1hbmQua2V5ICE9PSBfY29uc3RhbnRzMi5DT05ESVRJT05fTk9ORSkge1xuICAgICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihwaHlzaWNhbEluZGV4LCBieUNvbmRpdGlvblN0YXRlMSwgb3BlcmF0aW9uLCBjb2x1bW5TdGFja1Bvc2l0aW9uKTtcbiAgICAgIGlmIChieUNvbmRpdGlvblN0YXRlMi5jb21tYW5kLmtleSAhPT0gX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihwaHlzaWNhbEluZGV4LCBieUNvbmRpdGlvblN0YXRlMiwgb3BlcmF0aW9uLCBjb2x1bW5TdGFja1Bvc2l0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGJ5VmFsdWVTdGF0ZS5jb21tYW5kLmtleSAhPT0gX2NvbnN0YW50czIuQ09ORElUSU9OX05PTkUpIHtcbiAgICAgIHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24ocGh5c2ljYWxJbmRleCwgYnlWYWx1ZVN0YXRlLCBvcGVyYXRpb24sIGNvbHVtblN0YWNrUG9zaXRpb24pO1xuICAgIH1cbiAgICB0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCk7XG4gICAgdGhpcy5jb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IGNvbXBvbmVudC5zYXZlU3RhdGUocGh5c2ljYWxJbmRleCkpO1xuICAgIHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmZpbHRlcigpO1xuICB9XG4gIChfdGhpcyRkcm9wZG93bk1lbnVQbHUzID0gdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pID09PSBudWxsIHx8IF90aGlzJGRyb3Bkb3duTWVudVBsdTMgPT09IHZvaWQgMCB8fCBfdGhpcyRkcm9wZG93bk1lbnVQbHUzLmNsb3NlKCk7XG59XG4vKipcbiAqIE9uIGNvbXBvbmVudCBjaGFuZ2UgbGlzdGVuZXIuXG4gKlxuICogQHBhcmFtIHtCYXNlQ29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IGluaGVyaXRpbmcgQmFzZUNvbXBvbmVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb21tYW5kIE1lbnUgaXRlbSBvYmplY3QgKGNvbW1hbmQpLlxuICovXG5mdW5jdGlvbiBfb25Db21wb25lbnRDaGFuZ2UoY29tcG9uZW50LCBjb21tYW5kKSB7XG4gIHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKTtcbiAgaWYgKGNvbXBvbmVudC5jb25zdHJ1Y3RvciA9PT0gX2NvbmRpdGlvbi5Db25kaXRpb25Db21wb25lbnQgJiYgIWNvbW1hbmQuaW5wdXRzQ291bnQpIHtcbiAgICB0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpO1xuICB9XG59XG4vKipcbiAqIE9uIGNvbXBvbmVudCBTZWxlY3RVSSBjbG9zZWQgbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIF9vblNlbGVjdFVJQ2xvc2VkKCkge1xuICB0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpO1xufVxuZnVuY3Rpb24gX29uQWZ0ZXJHZXRDb2xIZWFkZXIoY29sLCBUSCkge1xuICBjb25zdCBwaHlzaWNhbENvbHVtbiA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oY29sKTtcbiAgaWYgKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhwaHlzaWNhbENvbHVtbikpIHtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKFRILCAnaHRGaWx0ZXJzQWN0aXZlJyk7XG4gIH0gZWxzZSB7XG4gICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShUSCwgJ2h0RmlsdGVyc0FjdGl2ZScpO1xuICB9XG59XG5mdW5jdGlvbiBfdXBkYXRlQ29tcG9uZW50cyhjb25kaXRpb25zU3RhdGUpIHtcbiAgdmFyIF90aGlzJGRyb3Bkb3duTWVudVBsdTQ7XG4gIGlmICghKChfdGhpcyRkcm9wZG93bk1lbnVQbHU0ID0gdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pICE9PSBudWxsICYmIF90aGlzJGRyb3Bkb3duTWVudVBsdTQgIT09IHZvaWQgMCAmJiBfdGhpcyRkcm9wZG93bk1lbnVQbHU0LmVuYWJsZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICBlZGl0ZWRDb25kaXRpb25TdGFjazoge1xuICAgICAgY29uZGl0aW9ucyxcbiAgICAgIGNvbHVtblxuICAgIH1cbiAgfSA9IGNvbmRpdGlvbnNTdGF0ZTtcbiAgY29uc3QgY29uZGl0aW9uc0J5VmFsdWUgPSBjb25kaXRpb25zLmZpbHRlcihjb25kaXRpb24gPT4gY29uZGl0aW9uLm5hbWUgPT09IF9jb25zdGFudHMyLkNPTkRJVElPTl9CWV9WQUxVRSk7XG4gIGNvbnN0IGNvbmRpdGlvbnNXaXRob3V0QnlWYWx1ZSA9IGNvbmRpdGlvbnMuZmlsdGVyKGNvbmRpdGlvbiA9PiBjb25kaXRpb24ubmFtZSAhPT0gX2NvbnN0YW50czIuQ09ORElUSU9OX0JZX1ZBTFVFKTtcbiAgaWYgKGNvbmRpdGlvbnNCeVZhbHVlLmxlbmd0aCA+PSAyIHx8IGNvbmRpdGlvbnNXaXRob3V0QnlWYWx1ZS5sZW5ndGggPj0gMykge1xuICAgICgwLCBfY29uc29sZS53YXJuKSgoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFRoZSBmaWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5LlxceDIwXG4gICAgICAgIFRoZSBvdmVyYWxsIGFtb3VudCBvZiBjb25kaXRpb25zIGV4Y2VlZCB0aGUgY2FwYWJpbGl0eSBvZiB0aGUgZHJvcGRvd24gbWVudS5cXHgyMFxuICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5gKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBvcGVyYXRpb25UeXBlID0gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldE9wZXJhdGlvbihjb2x1bW4pO1xuICAgIHRoaXMuY29tcG9uZW50cy5nZXQoJ2ZpbHRlcl9ieV9jb25kaXRpb24nKS51cGRhdGVTdGF0ZShjb25kaXRpb25zV2l0aG91dEJ5VmFsdWVbMF0sIGNvbHVtbik7XG4gICAgdGhpcy5jb21wb25lbnRzLmdldCgnZmlsdGVyX2J5X2NvbmRpdGlvbjInKS51cGRhdGVTdGF0ZShjb25kaXRpb25zV2l0aG91dEJ5VmFsdWVbMV0sIGNvbHVtbik7XG4gICAgdGhpcy5jb21wb25lbnRzLmdldCgnZmlsdGVyX29wZXJhdG9ycycpLnVwZGF0ZVN0YXRlKG9wZXJhdGlvblR5cGUsIGNvbHVtbik7XG4gICAgdGhpcy5jb21wb25lbnRzLmdldCgnZmlsdGVyX2J5X3ZhbHVlJykudXBkYXRlU3RhdGUoY29uZGl0aW9uc1N0YXRlKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9maWx0ZXJzID0gcmVxdWlyZShcIi4vZmlsdGVyc1wiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9maWx0ZXJzLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9maWx0ZXJzLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuRmlsdGVycyA9IF9maWx0ZXJzLkZpbHRlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldE9wZXJhdGlvbkZ1bmMgPSBnZXRPcGVyYXRpb25GdW5jO1xuZXhwb3J0cy5nZXRPcGVyYXRpb25OYW1lID0gZ2V0T3BlcmF0aW9uTmFtZTtcbmV4cG9ydHMucmVnaXN0ZXJPcGVyYXRpb24gPSByZWdpc3Rlck9wZXJhdGlvbjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5jb25zdCBvcGVyYXRpb25zID0gZXhwb3J0cy5vcGVyYXRpb25zID0ge307XG5cbi8qKlxuICogR2V0IG9wZXJhdGlvbiBjbG9zdXJlIHdpdGggcHJlLWJvdW5kIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgT3BlcmF0b3IgYGlkYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uRnVuYyhpZCkge1xuICBpZiAoIW9wZXJhdGlvbnNbaWRdKSB7XG4gICAgdGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkIFwiJHtpZH1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgfVxuICBjb25zdCBmdW5jID0gb3BlcmF0aW9uc1tpZF0uZnVuYztcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25kaXRpb25zLCB2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKGNvbmRpdGlvbnMsIHZhbHVlKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gbmFtZSBvZiBvcGVyYXRpb24gd2hpY2ggaXMgZGlzcGxheWVkIGluc2lkZSBVSSBjb21wb25lbnQsIGJhc2luZyBvbiBpdCdzIGBpZGAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIGBJZGAgb2Ygb3BlcmF0aW9uLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uTmFtZShpZCkge1xuICByZXR1cm4gb3BlcmF0aW9uc1tpZF0ubmFtZTtcbn1cblxuLyoqXG4gKiBPcGVyYXRvciByZWdpc3RlcmVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCBPcGVyYXRpb24gYGlkYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE9wZXJhdGlvbiBuYW1lIHdoaWNoIGlzIGRpc3BsYXllZCBpbnNpZGUgVUkgY29tcG9uZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBPcGVyYXRpb24gZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyT3BlcmF0aW9uKGlkLCBuYW1lLCBmdW5jKSB7XG4gIG9wZXJhdGlvbnNbaWRdID0ge1xuICAgIG5hbWUsXG4gICAgZnVuY1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5vcGVyYXRpb25SZXN1bHQgPSBvcGVyYXRpb25SZXN1bHQ7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyID0gcmVxdWlyZShcIi4uL2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyXCIpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuY29uc3QgT1BFUkFUSU9OX0lEID0gZXhwb3J0cy5PUEVSQVRJT05fSUQgPSAnY29uanVuY3Rpb24nO1xuY29uc3QgU0hPUlRfTkFNRV9GT1JfQ09NUE9ORU5UID0gZXhwb3J0cy5TSE9SVF9OQU1FX0ZPUl9DT01QT05FTlQgPSBDLkZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OO1xuLy8gcCBBTkQgcSBBTkQgdyBBTkQgeCBBTkQuLi4gPT09IFRSVUU/XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY29uZGl0aW9ucyBBbiBhcnJheSB3aXRoIHZhbHVlcyB0byBjaGVjay5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGNvbXBhcmFibGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gb3BlcmF0aW9uUmVzdWx0KGNvbmRpdGlvbnMsIHZhbHVlKSB7XG4gIHJldHVybiBjb25kaXRpb25zLmV2ZXJ5KGNvbmRpdGlvbiA9PiBjb25kaXRpb24uZnVuYyh2YWx1ZSkpO1xufVxuKDAsIF9sb2dpY2FsT3BlcmF0aW9uUmVnaXN0ZXJlci5yZWdpc3Rlck9wZXJhdGlvbikoT1BFUkFUSU9OX0lELCBTSE9SVF9OQU1FX0ZPUl9DT01QT05FTlQsIG9wZXJhdGlvblJlc3VsdCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLm9wZXJhdGlvblJlc3VsdCA9IG9wZXJhdGlvblJlc3VsdDtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBPUEVSQVRJT05fSUQgPSBleHBvcnRzLk9QRVJBVElPTl9JRCA9ICdkaXNqdW5jdGlvbic7XG5jb25zdCBTSE9SVF9OQU1FX0ZPUl9DT01QT05FTlQgPSBleHBvcnRzLlNIT1JUX05BTUVfRk9SX0NPTVBPTkVOVCA9IEMuRklMVEVSU19MQUJFTFNfRElTSlVOQ1RJT047XG4vLyAocCBPUiBxIE9SIHcgT1IgeCBPUi4uLikgPT09IFRSVUU/XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY29uZGl0aW9ucyBBbiBhcnJheSB3aXRoIHZhbHVlcyB0byBjaGVjay5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIGNvbXBhcmFibGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gb3BlcmF0aW9uUmVzdWx0KGNvbmRpdGlvbnMsIHZhbHVlKSB7XG4gIHJldHVybiBjb25kaXRpb25zLnNvbWUoY29uZGl0aW9uID0+IGNvbmRpdGlvbi5mdW5jKHZhbHVlKSk7XG59XG4oMCwgX2xvZ2ljYWxPcGVyYXRpb25SZWdpc3RlcmVyLnJlZ2lzdGVyT3BlcmF0aW9uKShPUEVSQVRJT05fSUQsIFNIT1JUX05BTUVfRk9SX0NPTVBPTkVOVCwgb3BlcmF0aW9uUmVzdWx0KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMub3BlcmF0aW9uUmVzdWx0ID0gb3BlcmF0aW9uUmVzdWx0O1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXIgPSByZXF1aXJlKFwiLi4vbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXJcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5jb25zdCBPUEVSQVRJT05fSUQgPSBleHBvcnRzLk9QRVJBVElPTl9JRCA9ICdkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbic7XG5jb25zdCBTSE9SVF9OQU1FX0ZPUl9DT01QT05FTlQgPSBleHBvcnRzLlNIT1JUX05BTUVfRk9SX0NPTVBPTkVOVCA9IEMuRklMVEVSU19MQUJFTFNfRElTSlVOQ1RJT047XG4vLyAoKHAgT1IgcSBPUiB3IE9SIHggT1IuLi4pIEFORCB6KSA9PT0gVFJVRT9cblxuLyoqXG4gKiBAcGFyYW0ge0FycmF5fSBjb25kaXRpb25zIEFuIGFycmF5IHdpdGggdmFsdWVzIHRvIGNoZWNrLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgY29tcGFyYWJsZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBvcGVyYXRpb25SZXN1bHQoY29uZGl0aW9ucywgdmFsdWUpIHtcbiAgaWYgKGNvbmRpdGlvbnMubGVuZ3RoIDwgMykge1xuICAgIHRocm93IEVycm9yKCdPcGVyYXRpb24gZG9lc25cXCd0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuJyk7XG4gIH1cbiAgcmV0dXJuIGNvbmRpdGlvbnMuc2xpY2UoMCwgY29uZGl0aW9ucy5sZW5ndGggLSAxKS5zb21lKGNvbmRpdGlvbiA9PiBjb25kaXRpb24uZnVuYyh2YWx1ZSkpICYmIGNvbmRpdGlvbnNbY29uZGl0aW9ucy5sZW5ndGggLSAxXS5mdW5jKHZhbHVlKTtcbn1cbigwLCBfbG9naWNhbE9wZXJhdGlvblJlZ2lzdGVyZXIucmVnaXN0ZXJPcGVyYXRpb24pKE9QRVJBVElPTl9JRCwgU0hPUlRfTkFNRV9GT1JfQ09NUE9ORU5ULCBvcGVyYXRpb25SZXN1bHQpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVNZW51Rm9jdXNDb250cm9sbGVyID0gY3JlYXRlTWVudUZvY3VzQ29udHJvbGxlcjtcbnZhciBfZm9jdXNOYXZpZ2F0b3IgPSByZXF1aXJlKFwiLi9mb2N1c05hdmlnYXRvclwiKTtcbnZhciBfc2VsZWN0ID0gcmVxdWlyZShcIi4uL3VpL3NlbGVjdFwiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi91aS9fYmFzZVwiKTtcbnZhciBfbGluayA9IHJlcXVpcmUoXCIuLi91aS9saW5rXCIpO1xuY29uc3QgU0hPUlRDVVRTX01FTlVfQ09OVEVYVCA9ICdmaWx0ZXJzJztcblxuLyoqXG4gKiBAdHlwZWRlZiBNZW51Rm9jdXNOYXZpZ2F0b3JcbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24obnVtYmVyKTogdm9pZH0gc2V0Q3VycmVudFBhZ2UgU2V0cyB0aGUgY3VycmVudCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgZm9jdXMuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gZ2V0Q3VycmVudFBhZ2UgR2V0cyB0aGUgaW5kZXggb2YgY3VycmVudGx5IGZvY3VzIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHRvRmlyc3RJdGVtIE1vdmUgdGhlIGZvY3VzIGluZGV4IHRvIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBsaXN0LlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSB0b0xhc3RJdGVtIE1vdmUgdGhlIGZvY3VzIGluZGV4IHRvIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHRvTmV4dEl0ZW0gTW92ZSB0aGUgZm9jdXMgaW5kZXggdG8gdGhlIG5leHQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gdG9QcmV2aW91c0l0ZW0gTW92ZSB0aGUgZm9jdXMgaW5kZXggdG8gdGhlIHByZXZpb3VzIGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IGNsZWFyIENsZWFyIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgbmF2aWdhdG9yLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSBsaXN0ZW4gQWN0aXZhdGUgdGhlIG5hdmlnYXRvciBieSBsaXN0ZW5pbmcgdGhlIGtleWJvYXJkIHNob3J0Y3V0cy5cbiAqL1xuLyoqXG4gKiBDcmVhdGVzIG5hdmlnYXRvciBjb250cm9sbGVyIGZvciBmaWx0ZXIgc3ViY29tcG9uZW50cyBpbiB0aGUgbWVudS5cbiAqXG4gKiBAcGFyYW0ge01lbnV9IG1haW5NZW51IFRoZSBtYWluIE1lbnUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0Jhc2VVSVtdfSBtZW51SXRlbXMgVGhlIGxpc3Qgb2YgdGhlIGNvbXBvbmVudCdzIGVsZW1lbnRzIHRvIHBhZ2luYXRlIHRvLlxuICogQHJldHVybnMge1BhZ2luYXRvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTWVudUZvY3VzQ29udHJvbGxlcihtYWluTWVudSwgbWVudUl0ZW1zKSB7XG4gIC8qKlxuICAgKiBAdHlwZSB7bnVtYmVyfSBUaGUgbGFzdCBzZWxlY3RlZCBtZW51IGl0ZW0gKGJlZm9yZSBjbGVhcmluZyB0aGUgdGhlIG1lbnUgc3RhdGUgYWZ0ZXIgZ29pbmdcbiAgICogaW50byB0aGUgZm9jdXMgbW9kZSB0cmlnZ2VyZWQgYnkgdGhlIFRBQiBvciBTSElGVCtUQUIga2V5cykuXG4gICAqL1xuICBsZXQgbGFzdFNlbGVjdGVkTWVudUl0ZW0gPSAtMTtcbiAgY29uc3QgZm9jdXNOYXZpZ2F0b3IgPSAoMCwgX2ZvY3VzTmF2aWdhdG9yLmNyZWF0ZUZvY3VzTmF2aWdhdG9yKShtZW51SXRlbXMpO1xuICBjb25zdCB1cGRhdGVOYXZpZ2F0b3JQb3NpdGlvbiA9IGVsZW1lbnQgPT4gKCkgPT4ge1xuICAgIGlmIChtYWluTWVudS5pc09wZW5lZCgpKSB7XG4gICAgICBtYWluTWVudS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oU0hPUlRDVVRTX01FTlVfQ09OVEVYVCk7XG4gICAgfVxuICAgIGZvY3VzTmF2aWdhdG9yLnNldEN1cnJlbnRQYWdlKG1lbnVJdGVtcy5pbmRleE9mKGVsZW1lbnQpKTtcbiAgfTtcblxuICAvLyB1cGRhdGUgbmF2aWdhdG9yIHBvc2l0aW9uIChpbnRlcm5hbCBzdGF0ZSkgdG8gZWxlbWVudCB0aGF0IHdhcyByZWNlbnRseSBjbGlja2VkIG9yIGZvY3VzZWRcbiAgbWVudUl0ZW1zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBfYmFzZS5CYXNlVUkpIHtcbiAgICAgIGVsZW1lbnQuYWRkTG9jYWxIb29rKCdjbGljaycsIHVwZGF0ZU5hdmlnYXRvclBvc2l0aW9uKGVsZW1lbnQpKTtcbiAgICAgIGVsZW1lbnQuYWRkTG9jYWxIb29rKCdmb2N1cycsIHVwZGF0ZU5hdmlnYXRvclBvc2l0aW9uKGVsZW1lbnQpKTtcbiAgICAgIGVsZW1lbnQuYWRkTG9jYWxIb29rKCdhZnRlckNsb3NlJywgdXBkYXRlTmF2aWdhdG9yUG9zaXRpb24oZWxlbWVudCkpO1xuICAgIH1cbiAgfSk7XG4gIG1haW5NZW51LmFkZExvY2FsSG9vaygnYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UnLCBzZWxlY3RlZEl0ZW0gPT4ge1xuICAgIGlmICghc2VsZWN0ZWRJdGVtLmtleS5zdGFydHNXaXRoKCdmaWx0ZXJfJykpIHtcbiAgICAgIGZvY3VzTmF2aWdhdG9yLmNsZWFyKCk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogRXh0ZW5kcyB0aGUgbWVudSBhbmQgc3VibWVudXMgd2l0aCBuZXcga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IG1lbnUgVGhlIG1lbnUgKGFzIG1haW4gbWVudSBvciBzdWJtZW51KSBpbnN0YW5jZS5cbiAgICovXG4gIGZ1bmN0aW9uIGFkZEtleWJvYXJkU2hvcnRjdXRzKG1lbnUpIHtcbiAgICBjb25zdCBtYWluTWVudVNob3J0Y3V0c0N0cmwgPSBtYWluTWVudS5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKTtcbiAgICBjb25zdCBjdXJyZW50TWVudVNob3J0Y3V0c0N0cmwgPSBtZW51LmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO1xuICAgIGZvY3VzTmF2aWdhdG9yLmNsZWFyKCk7XG4gICAgY3VycmVudE1lbnVTaG9ydGN1dHNDdHJsLmFkZEN1c3RvbVNob3J0Y3V0cyhbe1xuICAgICAga2V5czogW1snVGFiJ10sIFsnU2hpZnQnLCAnVGFiJ11dLFxuICAgICAgZm9yd2FyZFRvQ29udGV4dDogbWFpbk1lbnVTaG9ydGN1dHNDdHJsLmdldENvbnRleHQoU0hPUlRDVVRTX01FTlVfQ09OVEVYVCksXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBpZiAobWVudS5pc1N1Yk1lbnUoKSkge1xuICAgICAgICAgIG1lbnUuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBtYWluTWVudVNob3J0Y3V0c0N0cmwubGlzdGVuKFNIT1JUQ1VUU19NRU5VX0NPTlRFWFQpO1xuICAgICAgfVxuICAgIH1dKTtcbiAgICBpZiAobWVudS5pc1N1Yk1lbnUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBtYWluTWVudVNob3J0Y3V0c0N0cmwuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7XG4gICAgICBrZXlzOiBbWydUYWInXSwgWydTaGlmdCcsICdUYWInXV0sXG4gICAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBtZW51TmF2aWdhdG9yID0gbWFpbk1lbnUuZ2V0TmF2aWdhdG9yKCk7XG4gICAgICAgIGlmIChtZW51TmF2aWdhdG9yLmdldEN1cnJlbnRQYWdlKCkgPiAtMSkge1xuICAgICAgICAgIGxhc3RTZWxlY3RlZE1lbnVJdGVtID0gbWVudU5hdmlnYXRvci5nZXRDdXJyZW50UGFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIG1lbnVOYXZpZ2F0b3IuY2xlYXIoKTtcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgZm9jdXNOYXZpZ2F0b3IudG9QcmV2aW91c0l0ZW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb2N1c05hdmlnYXRvci50b05leHRJdGVtKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXlzOiBbWydFc2NhcGUnXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBtYWluTWVudS5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleXM6IFtbJ0VudGVyJ10sIFsnU3BhY2UnXV0sXG4gICAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gbWVudUl0ZW1zW2ZvY3VzTmF2aWdhdG9yLmdldEN1cnJlbnRQYWdlKCldO1xuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9zZWxlY3QuU2VsZWN0VUkpIHtcbiAgICAgICAgICBlbGVtZW50Lm9wZW5PcHRpb25zKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9saW5rLkxpbmtVSSkge1xuICAgICAgICAgIGVsZW1lbnQuYWN0aXZhdGUoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBfYmFzZS5CYXNlVUkpKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1dLCBTSE9SVENVVFNfTUVOVV9DT05URVhUKTtcbiAgfVxuICBtYWluTWVudS5hZGRMb2NhbEhvb2soJ2FmdGVyU3VibWVudU9wZW4nLCBhZGRLZXlib2FyZFNob3J0Y3V0cyk7XG4gIG1haW5NZW51LmFkZExvY2FsSG9vaygnYWZ0ZXJPcGVuJywgYWRkS2V5Ym9hcmRTaG9ydGN1dHMpO1xuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBtZW51IGFuZCBzd2l0Y2hlcyBpdHMgc2hvcnRjdXQgY29udGV4dCB0byB0aGF0IG9uZSB3aGljaCBjb250cm9sc1xuICAgKiB0aGUgZm9jdXMgbmF2aWdhdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICBtYWluTWVudS5mb2N1cygpO1xuICAgIG1haW5NZW51LmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbihTSE9SVENVVFNfTUVOVV9DT05URVhUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3Qgc2VsZWN0ZWQgbWVudSBpdGVtIChiZWZvcmUgY2xlYXJpbmcgdGhlIHN0YXRlIGFmdGVyIGdvaW5nIGludG8gdGhlIGZvY3VzIG1vZGUpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbGFzdCBzZWxlY3RlZCBtZW51IGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRMYXN0TWVudVBhZ2UoKSB7XG4gICAgcmV0dXJuIGxhc3RTZWxlY3RlZE1lbnVJdGVtO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uZm9jdXNOYXZpZ2F0b3IsXG4gICAgbGlzdGVuLFxuICAgIGdldExhc3RNZW51UGFnZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVGb2N1c05hdmlnYXRvciA9IGNyZWF0ZUZvY3VzTmF2aWdhdG9yO1xudmFyIF9wYWdpbmF0b3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvcGFnaW5hdG9yXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX211bHRpcGxlU2VsZWN0ID0gcmVxdWlyZShcIi4uL3VpL211bHRpcGxlU2VsZWN0XCIpO1xuLyoqXG4gKiBDcmVhdGVzIG5hdmlnYXRvciBmb3Igc3dpdGNoaW5nIHRoZSBmb2N1cyBvZiB0aGUgZmlsdGVyJ3MgZWxlbWVudHMuXG4gKlxuICogQHBhcmFtIHtCYXNlVUlbXX0gZWxlbWVudHMgVGhlIGVsZW1lbnRzIHRvIHBhZ2luYXRlIHRvLlxuICogQHJldHVybnMge1BhZ2luYXRvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRm9jdXNOYXZpZ2F0b3IoZWxlbWVudHMpIHtcbiAgY29uc3QgbmF2aWdhdG9yID0gKDAsIF9wYWdpbmF0b3IuY3JlYXRlUGFnaW5hdG9yKSh7XG4gICAgaW5pdGlhbFBhZ2U6IDAsXG4gICAgc2l6ZTogKCkgPT4gZWxlbWVudHMubGVuZ3RoLFxuICAgIG9uSXRlbVNlbGVjdDogKGN1cnJlbnRJbmRleCwgZGlyZWN0SXRlbUNoYW5nZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9tdWx0aXBsZVNlbGVjdC5NdWx0aXBsZVNlbGVjdFVJKSB7XG4gICAgICAgIHJldHVybiBkaXJlY3RJdGVtQ2hhbmdlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudCAmJiAhKDAsIF9lbGVtZW50LmlzVmlzaWJsZSkoZWxlbWVudC5lbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5hdmlnYXRvcjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbnZhciBfZXZlbnRNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vZXZlbnRNYW5hZ2VyXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgU1RBVEVfQlVJTFQgPSAnYnVpbHQnO1xuY29uc3QgU1RBVEVfQlVJTERJTkcgPSAnYnVpbGRpbmcnO1xuY29uc3QgRVZFTlRTX1RPX1JFR0lTVEVSID0gWydjbGljaycsICdpbnB1dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJ107XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQmFzZVVJIHtcbiAgc3RhdGljIGdldCBERUZBVUxUUygpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHtcbiAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICB0YWdOYW1lOiAnZGl2JyxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIHdyYXBJdDogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbmNlIG9mIEhhbmRzb250YWJsZS5cbiAgICpcbiAgICogQHR5cGUge0NvcmV9XG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaG90XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgRXZlbnRNYW5hZ2VyLlxuICAgICAqXG4gICAgICogQHR5cGUge0V2ZW50TWFuYWdlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJldmVudE1hbmFnZXJcIiwgbmV3IF9ldmVudE1hbmFnZXIuZGVmYXVsdCh0aGlzKSk7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBlbGVtZW50IG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdGlvbnNcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBCdWlsZCByb290IERPTSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0VsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfZWxlbWVudFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEZsYWcgd2hpY2ggZGV0ZXJtaW5lcyBidWlsZCBzdGF0ZSBvZiBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJidWlsZFN0YXRlXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5ob3QgPSBob3RJbnN0YW5jZTtcbiAgICB0aGlzLm9wdGlvbnMgPSAoMCwgX29iamVjdC5leHRlbmQpKEJhc2VVSS5ERUZBVUxUUywgb3B0aW9ucyk7XG4gICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQgPyAnZGl2JyA6IHRoaXMub3B0aW9ucy50YWdOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGVsZW1lbnQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgU2V0IHRoZSBjb21wb25lbnQgdmFsdWUuXG4gICAqL1xuICBzZXRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMub3B0aW9ucy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBlbGVtZW50IHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGVsZW1lbnQgYXMgYSBET00gb2JqZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7RWxlbWVudH1cbiAgICovXG4gIGdldCBlbGVtZW50KCkge1xuICAgIGlmICh0aGlzLmJ1aWxkU3RhdGUgPT09IFNUQVRFX0JVSUxESU5HKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICB9XG4gICAgaWYgKHRoaXMuYnVpbGRTdGF0ZSA9PT0gU1RBVEVfQlVJTFQpIHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFN0YXRlID0gU1RBVEVfQlVJTERJTkc7XG4gICAgdGhpcy5idWlsZCgpO1xuICAgIHRoaXMuYnVpbGRTdGF0ZSA9IFNUQVRFX0JVSUxUO1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGVsZW1lbnQgd2FzIGJ1aWx0IChidWlsdCB3aG9sZSBET00gc3RydWN0dXJlKS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0J1aWx0KCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkU3RhdGUgPT09IFNUQVRFX0JVSUxUO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSB2YWx1ZSBpZiBpdCBpcyBwb3NzaWJsZS4gSXQncyBjaGVja2VkIGlmIHZhbHVlIGJlbG9uZ3MgdG8gbmFtZXNwYWNlIG9mIHRyYW5zbGF0ZWQgcGhyYXNlcy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB3aGljaCB3aWxsIG1heSBiZSB0cmFuc2xhdGVkLlxuICAgKiBAcmV0dXJucyB7Kn0gVHJhbnNsYXRlZCB2YWx1ZSBpZiB0cmFuc2xhdGlvbiB3YXMgcG9zc2libGUsIG9yaWdpbmFsIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHRyYW5zbGF0ZUlmUG9zc2libGUodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5zdGFydHNXaXRoKEMuRklMVEVSU19OQU1FU1BBQ0UpKSB7XG4gICAgICByZXR1cm4gdGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBET00gc3RydWN0dXJlLlxuICAgKi9cbiAgYnVpbGQoKSB7XG4gICAgY29uc3QgcmVnaXN0ZXJFdmVudCA9IChlbGVtZW50LCBldmVudE5hbWUpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgZXZlbnROYW1lLCBldmVudCA9PiB0aGlzLnJ1bkxvY2FsSG9va3MoZXZlbnROYW1lLCBldmVudCwgdGhpcykpO1xuICAgIH07XG4gICAgaWYgKCF0aGlzLmJ1aWxkU3RhdGUpIHtcbiAgICAgIHRoaXMuYnVpbGRTdGF0ZSA9IFNUQVRFX0JVSUxESU5HO1xuICAgIH1cblxuICAgIC8vIHByZXZlbnRzIFwiaG90LnVubGlzdGVuKClcIiBjYWxsIHdoZW4gY2xpY2tlZFxuICAgIC8vIChodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS9ibG9iL21hc3Rlci9oYW5kc29udGFibGUvc3JjL3RhYmxlVmlldy5qcyNMMzE3LUwzMjEpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaG90LWlucHV0JywgdHJ1ZSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucy50YWJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLm9wdGlvbnMudGFiSW5kZXgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLnJvbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCB0aGlzLm9wdGlvbnMucm9sZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuX2VsZW1lbnQsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMub3B0aW9ucy5jaGlsZHJlbiwgZWxlbWVudCA9PiB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQuZWxlbWVudCkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBJdCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTtcblxuICAgICAgLy8gcHJldmVudHMgXCJob3QudW5saXN0ZW4oKVwiIGNhbGwgd2hlbiBjbGlja2VkXG4gICAgICAvLyAoaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvYmxvYi9tYXN0ZXIvaGFuZHNvbnRhYmxlL3NyYy90YWJsZVZpZXcuanMjTDMxNy1MMzIxKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaG90LWlucHV0JywgdHJ1ZSk7XG4gICAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLm9wdGlvbnMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50W2tleV0gIT09IHVuZGVmaW5lZCAmJiBrZXkgIT09ICdjbGFzc05hbWUnICYmIGtleSAhPT0gJ3RhZ05hbWUnICYmIGtleSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgICAgIGVsZW1lbnRba2V5XSA9IHRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShFVkVOVFNfVE9fUkVHSVNURVIsIGV2ZW50TmFtZSA9PiByZWdpc3RlckV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoRVZFTlRTX1RPX1JFR0lTVEVSLCBldmVudE5hbWUgPT4gcmVnaXN0ZXJFdmVudCh0aGlzLl9lbGVtZW50LCBldmVudE5hbWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIERPTSBzdHJ1Y3R1cmUuXG4gICAqL1xuICB1cGRhdGUoKSB7fVxuXG4gIC8qKlxuICAgKiBSZXNldCB0byBpbml0aWFsIHN0YXRlLlxuICAgKi9cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5vcHRpb25zLnZhbHVlID0gJyc7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93IGVsZW1lbnQuXG4gICAqL1xuICBzaG93KCkge1xuICAgIHRoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBlbGVtZW50LlxuICAgKi9cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXMoKSB7fVxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlciA9IG51bGw7XG4gICAgdGhpcy5ob3QgPSBudWxsO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGw7XG4gIH1cbn1cbmV4cG9ydHMuQmFzZVVJID0gQmFzZVVJO1xuKDAsIF9vYmplY3QubWl4aW4pKEJhc2VVSSwgX2xvY2FsSG9va3MuZGVmYXVsdCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL19iYXNlXCIpO1xuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIElucHV0VUlcbiAqL1xudmFyIF9pbnB1dCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9JbnB1dFVJX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBJbnB1dFVJIGV4dGVuZHMgX2Jhc2UuQmFzZVVJIHtcbiAgc3RhdGljIGdldCBERUZBVUxUUygpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHtcbiAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHRhZ05hbWU6ICdpbnB1dCcsXG4gICAgICB0YWJJbmRleDogLTFcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudH1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwgKDAsIF9vYmplY3QuZXh0ZW5kKShJbnB1dFVJLkRFRkFVTFRTLCBvcHRpb25zKSk7XG4gICAgLyoqXG4gICAgICogT25LZXl1cCBsaXN0ZW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9JbnB1dFVJX2JyYW5kKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW5wdXQsIHZvaWQgMCk7XG4gICAgdGhpcy5yZWdpc3Rlckhvb2tzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYWxsIG5lY2Vzc2FyeSBob29rcy5cbiAgICovXG4gIHJlZ2lzdGVySG9va3MoKSB7XG4gICAgdGhpcy5hZGRMb2NhbEhvb2soJ2tleXVwJywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX0lucHV0VUlfYnJhbmQsIHRoaXMsIF9vbktleXVwKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgRE9NIHN0cnVjdHVyZS5cbiAgICovXG4gIGJ1aWxkKCkge1xuICAgIHN1cGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgaWNvbiA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lucHV0LCB0aGlzLCB0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5fZWxlbWVudCwgJ2h0VUlJbnB1dCcpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoaWNvbiwgJ2h0VUlJbnB1dEljb24nKTtcbiAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGljb24pO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGVsZW1lbnQuXG4gICAqL1xuICB1cGRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQnVpbHQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lucHV0LCB0aGlzKS50eXBlID0gdGhpcy5vcHRpb25zLnR5cGU7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbnB1dCwgdGhpcykucGxhY2Vob2xkZXIgPSB0aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lucHV0LCB0aGlzKS52YWx1ZSA9IHRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIGVsZW1lbnQuXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICBpZiAodGhpcy5pc0J1aWx0KCkpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5wdXQsIHRoaXMpLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLklucHV0VUkgPSBJbnB1dFVJO1xuZnVuY3Rpb24gX29uS2V5dXAoZXZlbnQpIHtcbiAgdGhpcy5vcHRpb25zLnZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vX2Jhc2VcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIExpbmtVSVxuICovXG52YXIgX2xpbmsgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIExpbmtVSSBleHRlbmRzIF9iYXNlLkJhc2VVSSB7XG4gIHN0YXRpYyBnZXQgREVGQVVMVFMoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh7XG4gICAgICBocmVmOiAnIycsXG4gICAgICB0YWdOYW1lOiAnYScsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICByb2xlOiAnYnV0dG9uJ1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIGxpbmsgZWxlbWVudC5cbiAgICpcbiAgICogQHR5cGUge0hUTUxMaW5rRWxlbWVudH1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwgKDAsIF9vYmplY3QuZXh0ZW5kKShMaW5rVUkuREVGQVVMVFMsIG9wdGlvbnMpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbGluaywgdm9pZCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBET00gc3RydWN0dXJlLlxuICAgKi9cbiAgYnVpbGQoKSB7XG4gICAgc3VwZXIuYnVpbGQoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2xpbmssIHRoaXMsIHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGVsZW1lbnQuXG4gICAqL1xuICB1cGRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQnVpbHQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xpbmssIHRoaXMpLnRleHRDb250ZW50ID0gdGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgZWxlbWVudC5cbiAgICovXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLmlzQnVpbHQoKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9saW5rLCB0aGlzKS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZSB0aGUgZWxlbWVudC5cbiAgICovXG4gIGFjdGl2YXRlKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGluaywgdGhpcykuY2xpY2soKTtcbiAgfVxufVxuZXhwb3J0cy5MaW5rVUkgPSBMaW5rVUk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfdW5pY29kZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL3VuaWNvZGVcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9kYXRhXCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9ldmVudFwiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL19iYXNlXCIpO1xudmFyIF9pbnB1dCA9IHJlcXVpcmUoXCIuL2lucHV0XCIpO1xudmFyIF9saW5rID0gcmVxdWlyZShcIi4vbGlua1wiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi4vdXRpbHNcIik7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSAnbXVsdGlwbGVTZWxlY3QuaXRlbUJveCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBNdWx0aXBsZVNlbGVjdFVJXG4gKi9cbnZhciBfaXRlbXMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXRlbXNCb3ggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfbG9jYWxlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3NlYXJjaElucHV0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3NlbGVjdEFsbFVJID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NsZWFyQWxsVUkgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfTXVsdGlwbGVTZWxlY3RVSV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgTXVsdGlwbGVTZWxlY3RVSSBleHRlbmRzIF9iYXNlLkJhc2VVSSB7XG4gIHN0YXRpYyBnZXQgREVGQVVMVFMoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh7XG4gICAgICBjbGFzc05hbWU6ICdodFVJTXVsdGlwbGVTZWxlY3QnLFxuICAgICAgdmFsdWU6IFtdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdCBvZiBhdmFpbGFibGUgc2VsZWN0IG9wdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtBcnJheX1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwgKDAsIF9vYmplY3QuZXh0ZW5kKShNdWx0aXBsZVNlbGVjdFVJLkRFRkFVTFRTLCBvcHRpb25zKSk7XG4gICAgLyoqXG4gICAgICogJ2lucHV0JyBldmVudCBsaXN0ZW5lciBmb3IgaW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IERPTSBldmVudC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX011bHRpcGxlU2VsZWN0VUlfYnJhbmQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pdGVtcywgW10pO1xuICAgIC8qKlxuICAgICAqIEhhbmRzb250YWJsZSBpbnN0YW5jZSB1c2VkIGFzIGl0ZW1zIGxpc3QgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIYW5kc29udGFibGV9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2l0ZW1zQm94LCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEEgbG9jYWxlIGZvciB0aGUgY29tcG9uZW50IHVzZWQgdG8gY29tcGFyZSBmaWx0ZXJlZCB2YWx1ZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9sb2NhbGUsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5wdXQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtJbnB1dFVJfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZWFyY2hJbnB1dCwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBcIlNlbGVjdCBhbGxcIiBVSSBlbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtVSX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2VsZWN0QWxsVUksIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogXCJDbGVhclwiIFVJIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TGlua1VJfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jbGVhckFsbFVJLCB2b2lkIDApO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VhcmNoSW5wdXQsIHRoaXMsIG5ldyBfaW5wdXQuSW5wdXRVSSh0aGlzLmhvdCwge1xuICAgICAgcGxhY2Vob2xkZXI6IEMuRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJDSCxcbiAgICAgIGNsYXNzTmFtZTogJ2h0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCdcbiAgICB9KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RBbGxVSSwgdGhpcywgbmV3IF9saW5rLkxpbmtVSSh0aGlzLmhvdCwge1xuICAgICAgdGV4dENvbnRlbnQ6IEMuRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEwsXG4gICAgICBjbGFzc05hbWU6ICdodFVJU2VsZWN0QWxsJ1xuICAgIH0pKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NsZWFyQWxsVUksIHRoaXMsIG5ldyBfbGluay5MaW5rVUkodGhpcy5ob3QsIHtcbiAgICAgIHRleHRDb250ZW50OiBDLkZJTFRFUlNfQlVUVE9OU19DTEVBUixcbiAgICAgIGNsYXNzTmFtZTogJ2h0VUlDbGVhckFsbCdcbiAgICB9KSk7XG4gICAgdGhpcy5yZWdpc3Rlckhvb2tzKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaW5zdGFuY2Ugb2YgdGhlIGludGVybmFsIEhhbmRzb250YWJsZSB0aGF0IGFjdHMgaGVyZSBhcyBhIGxpc3Rib3ggY29tcG9uZW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7SGFuZHNvbnRhYmxlfVxuICAgKi9cbiAgZ2V0SXRlbXNCb3goKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXNCb3gsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFsbCBuZWNlc3NhcnkgaG9va3MuXG4gICAqL1xuICByZWdpc3Rlckhvb2tzKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VhcmNoSW5wdXQsIHRoaXMpLmFkZExvY2FsSG9vaygna2V5ZG93bicsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NdWx0aXBsZVNlbGVjdFVJX2JyYW5kLCB0aGlzLCBfb25JbnB1dEtleURvd24pLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlYXJjaElucHV0LCB0aGlzKS5hZGRMb2NhbEhvb2soJ2lucHV0JywgZXZlbnQgPT4gX2Fzc2VydENsYXNzQnJhbmQoX011bHRpcGxlU2VsZWN0VUlfYnJhbmQsIHRoaXMsIF9vbklucHV0KS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RBbGxVSSwgdGhpcykuYWRkTG9jYWxIb29rKCdjbGljaycsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NdWx0aXBsZVNlbGVjdFVJX2JyYW5kLCB0aGlzLCBfb25TZWxlY3RBbGxDbGljaykuY2FsbCh0aGlzLCBldmVudCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2xlYXJBbGxVSSwgdGhpcykuYWRkTG9jYWxIb29rKCdjbGljaycsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NdWx0aXBsZVNlbGVjdFVJX2JyYW5kLCB0aGlzLCBfb25DbGVhckFsbENsaWNrKS5jYWxsKHRoaXMsIGV2ZW50KSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGF2YWlsYWJsZSBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBpdGVtcyBBcnJheSBvZiBvYmplY3RzIHdpdGggYGNoZWNrZWRgIGFuZCBgbGFiZWxgIHByb3BlcnR5LlxuICAgKi9cbiAgc2V0SXRlbXMoaXRlbXMpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2l0ZW1zLCB0aGlzLCBpdGVtcyk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXNCb3gsIHRoaXMpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5sb2FkRGF0YShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zLCB0aGlzKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIGxvY2FsZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvY2FsZSBMb2NhbGUgdXNlZCBmb3IgZmlsdGVyIGFjdGlvbnMgcGVyZm9ybWVkIG9uIGRhdGEsIGllLiBgZW4tVVNgLlxuICAgKi9cbiAgc2V0TG9jYWxlKGxvY2FsZSkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbG9jYWxlLCB0aGlzLCBsb2NhbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIGxvY2FsZSBmb3IgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldExvY2FsZSgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9sb2NhbGUsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldEl0ZW1zKCkge1xuICAgIHJldHVybiBbLi4uX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtcywgdGhpcyldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBlbGVtZW50IHZhbHVlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIHNlbGVjdGVkIHZhbHVlcy5cbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiBpdGVtc1RvVmFsdWUoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtcywgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBzZWFyY2ggaW5wdXQgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMge0lucHV0VUl9XG4gICAqL1xuICBnZXRTZWFyY2hJbnB1dEVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VhcmNoSW5wdXQsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBcInNlbGVjdCBhbGxcIiBsaW5rIGVsZW1lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtMaW5rVUl9XG4gICAqL1xuICBnZXRTZWxlY3RBbGxFbGVtZW50KCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdEFsbFVJLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbnN0YW5jZSBvZiB0aGUgXCJjbGVhclwiIGxpbmsgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMge0xpbmtVSX1cbiAgICovXG4gIGdldENsZWFyQWxsRWxlbWVudCgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jbGVhckFsbFVJLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbGwgdmFsdWVzIGxpc3RlZCBpbiBlbGVtZW50IGFyZSBzZWxlY3RlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NlbGVjdGVkQWxsVmFsdWVzKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zLCB0aGlzKS5sZW5ndGggPT09IHRoaXMuZ2V0VmFsdWUoKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgRE9NIHN0cnVjdHVyZS5cbiAgICovXG4gIGJ1aWxkKCkge1xuICAgIHN1cGVyLmJ1aWxkKCk7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGl0ZW1zQm94V3JhcHBlciA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBjb25zdCBzZWxlY3Rpb25Db250cm9sID0gbmV3IF9iYXNlLkJhc2VVSSh0aGlzLmhvdCwge1xuICAgICAgY2xhc3NOYW1lOiAnaHRVSVNlbGVjdGlvbkNvbnRyb2xzJyxcbiAgICAgIGNoaWxkcmVuOiBbX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RBbGxVSSwgdGhpcyksIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2xlYXJBbGxVSSwgdGhpcyldXG4gICAgfSk7XG4gICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlYXJjaElucHV0LCB0aGlzKS5lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHNlbGVjdGlvbkNvbnRyb2wuZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChpdGVtc0JveFdyYXBwZXIpO1xuICAgIGNvbnN0IGhvdEluaXRpYWxpemVyID0gd3JhcHBlciA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXNCb3gsIHRoaXMpKSB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXNCb3gsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykod3JhcHBlciwgJ2h0VUlNdWx0aXBsZVNlbGVjdEhvdCcpO1xuICAgICAgLy8gQ29uc3RydWN0cyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgSGFuZHNvbnRhYmxlIGluc3RhbmNlXG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2l0ZW1zQm94LCB0aGlzLCBuZXcgdGhpcy5ob3QuY29uc3RydWN0b3Iod3JhcHBlciwge1xuICAgICAgICBkYXRhOiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zLCB0aGlzKSxcbiAgICAgICAgY29sdW1uczogW3tcbiAgICAgICAgICBkYXRhOiAnY2hlY2tlZCcsXG4gICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICBsYWJlbDoge1xuICAgICAgICAgICAgcHJvcGVydHk6ICd2aXN1YWxWYWx1ZScsXG4gICAgICAgICAgICBwb3NpdGlvbjogJ2FmdGVyJ1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIGJlZm9yZVJlbmRlcmVyOiAoVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpID0+IHtcbiAgICAgICAgICBURC50aXRsZSA9IGNlbGxQcm9wZXJ0aWVzLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3Aocm93LCBjZWxsUHJvcGVydGllcy5sYWJlbC5wcm9wZXJ0eSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyTGlzdGVuOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdmb2N1cycsIHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBiZWZvcmVPbkNlbGxNb3VzZVVwOiAoKSA9PiB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtc0JveCwgdGhpcykubGlzdGVuKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbFdpZHRoczogKCkgPT4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtc0JveCwgdGhpcykuY29udGFpbmVyLnNjcm9sbFdpZHRoIC0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKShyb290RG9jdW1lbnQpLFxuICAgICAgICBtYXhDb2xzOiAxLFxuICAgICAgICBhdXRvV3JhcENvbDogdHJ1ZSxcbiAgICAgICAgaGVpZ2h0OiAxMTAsXG4gICAgICAgIGNvcHlQYXN0ZTogZmFsc2UsXG4gICAgICAgIGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ICdhcmVhJyxcbiAgICAgICAgZmlsbEhhbmRsZTogZmFsc2UsXG4gICAgICAgIGZyYWdtZW50U2VsZWN0aW9uOiAnY2VsbCcsXG4gICAgICAgIHRhYk1vdmVzOiB7XG4gICAgICAgICAgcm93OiAxLFxuICAgICAgICAgIGNvbDogMFxuICAgICAgICB9LFxuICAgICAgICBsYXlvdXREaXJlY3Rpb246IHRoaXMuaG90LmlzUnRsKCkgPyAncnRsJyA6ICdsdHInXG4gICAgICB9KSk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5pbml0KCk7XG4gICAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICAgIGNvbnN0IGdyaWRDb250ZXh0ID0gc2hvcnRjdXRNYW5hZ2VyLmdldENvbnRleHQoJ2dyaWQnKTtcbiAgICAgIGdyaWRDb250ZXh0LnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbJ1RhYiddKTtcbiAgICAgIGdyaWRDb250ZXh0LnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbJ1NoaWZ0JywgJ1RhYiddKTtcbiAgICAgIGdyaWRDb250ZXh0LmFkZFNob3J0Y3V0KHtcbiAgICAgICAga2V5czogW1snRXNjYXBlJ11dLFxuICAgICAgICBjYWxsYmFjazogZXZlbnQgPT4ge1xuICAgICAgICAgIHRoaXMucnVuTG9jYWxIb29rcygna2V5ZG93bicsIGV2ZW50LCB0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXA6IFNIT1JUQ1VUU19HUk9VUFxuICAgICAgfSk7XG4gICAgICBncmlkQ29udGV4dC5hZGRTaG9ydGN1dCh7XG4gICAgICAgIGtleXM6IFtbJ1RhYiddLCBbJ1NoaWZ0JywgJ1RhYiddXSxcbiAgICAgICAgY2FsbGJhY2s6IGV2ZW50ID0+IHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5kZXNlbGVjdENlbGwoKTtcbiAgICAgICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2tleWRvd24nLCBldmVudCwgdGhpcyk7XG4gICAgICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdsaXN0VGFiS2V5ZG93bicsIGV2ZW50LCB0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXA6IFNIT1JUQ1VUU19HUk9VUFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBob3RJbml0aWFsaXplcihpdGVtc0JveFdyYXBwZXIpO1xuICAgIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCkgPT4gaG90SW5pdGlhbGl6ZXIoaXRlbXNCb3hXcmFwcGVyKSwgMTAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuaXNCdWlsdCgpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5saXN0ZW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgRE9NIHN0cnVjdHVyZS5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VhcmNoSW5wdXQsIHRoaXMpLnJlc2V0KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RBbGxVSSwgdGhpcykucmVzZXQoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NsZWFyQWxsVUksIHRoaXMpLnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIERPTSBzdHJ1Y3R1cmUuXG4gICAqL1xuICB1cGRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQnVpbHQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5sb2FkRGF0YSh2YWx1ZVRvSXRlbXMoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtcywgdGhpcyksIHRoaXMub3B0aW9ucy52YWx1ZSkpO1xuICAgIHN1cGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtc0JveCwgdGhpcykuZGVzdHJveSgpO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlYXJjaElucHV0LCB0aGlzKS5kZXN0cm95KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jbGVhckFsbFVJLCB0aGlzKS5kZXN0cm95KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RBbGxVSSwgdGhpcykuZGVzdHJveSgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VhcmNoSW5wdXQsIHRoaXMsIG51bGwpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY2xlYXJBbGxVSSwgdGhpcywgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RBbGxVSSwgdGhpcywgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pdGVtc0JveCwgdGhpcywgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pdGVtcywgdGhpcywgbnVsbCk7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLk11bHRpcGxlU2VsZWN0VUkgPSBNdWx0aXBsZVNlbGVjdFVJO1xuZnVuY3Rpb24gX29uSW5wdXQoZXZlbnQpIHtcbiAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7XG4gIGxldCBmaWx0ZXJlZEl0ZW1zO1xuICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgZmlsdGVyZWRJdGVtcyA9IFsuLi5fY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zLCB0aGlzKV07XG4gIH0gZWxzZSB7XG4gICAgZmlsdGVyZWRJdGVtcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXMsIHRoaXMpLmZpbHRlcihpdGVtID0+IGAke2l0ZW0udmFsdWV9YC50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRleE9mKHZhbHVlKSA+PSAwKTtcbiAgfVxuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5sb2FkRGF0YShmaWx0ZXJlZEl0ZW1zKTtcbn1cbi8qKlxuICogJ2tleWRvd24nIGV2ZW50IGxpc3RlbmVyIGZvciBpbnB1dCBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IERPTSBldmVudC5cbiAqL1xuZnVuY3Rpb24gX29uSW5wdXRLZXlEb3duKGV2ZW50KSB7XG4gIHRoaXMucnVuTG9jYWxIb29rcygna2V5ZG93bicsIGV2ZW50LCB0aGlzKTtcbiAgY29uc3QgaXNLZXlDb2RlID0gKDAsIF9mdW5jdGlvbi5wYXJ0aWFsKShfdW5pY29kZS5pc0tleSwgZXZlbnQua2V5Q29kZSk7XG4gIGlmIChpc0tleUNvZGUoJ0FSUk9XX0RPV04nKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgKDAsIF9ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pKGV2ZW50KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5saXN0ZW4oKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5zZWxlY3RDZWxsKDAsIDApO1xuICB9XG59XG4vKipcbiAqIE9uIGNsaWNrIGxpc3RlbmVyIGZvciBcIlNlbGVjdCBhbGxcIiBsaW5rLlxuICpcbiAqIEBwYXJhbSB7RE9NRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudCBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9vblNlbGVjdEFsbENsaWNrKGV2ZW50KSB7XG4gIGNvbnN0IGNoYW5nZXMgPSBbXTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtc0JveCwgdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICByb3cuY2hlY2tlZCA9IHRydWU7XG4gICAgY2hhbmdlcy5wdXNoKCgwLCBfZGF0YS5kYXRhUm93VG9DaGFuZ2VzQXJyYXkpKHJvdywgcm93SW5kZXgpWzBdKTtcbiAgfSk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXNCb3gsIHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwoY2hhbmdlcyk7XG59XG4vKipcbiAqIE9uIGNsaWNrIGxpc3RlbmVyIGZvciBcIkNsZWFyXCIgbGluay5cbiAqXG4gKiBAcGFyYW0ge0RPTUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBfb25DbGVhckFsbENsaWNrKGV2ZW50KSB7XG4gIGNvbnN0IGNoYW5nZXMgPSBbXTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pdGVtc0JveCwgdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKHJvdywgcm93SW5kZXgpID0+IHtcbiAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xuICAgIGNoYW5nZXMucHVzaCgoMCwgX2RhdGEuZGF0YVJvd1RvQ2hhbmdlc0FycmF5KShyb3csIHJvd0luZGV4KVswXSk7XG4gIH0pO1xuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2l0ZW1zQm94LCB0aGlzKS5zZXRTb3VyY2VEYXRhQXRDZWxsKGNoYW5nZXMpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gTXVsdGlwbGVTZWxlY3RVSTtcbi8qKlxuICogUGljayB1cCBvYmplY3QgaXRlbXMgYmFzZWQgb24gc2VsZWN0ZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGF2YWlsYWJsZUl0ZW1zIEJhc2UgY29sbGVjdGlvbiB0byBjb21wYXJlIHZhbHVlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkVmFsdWUgRmxhdCBhcnJheSB3aXRoIHNlbGVjdGVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdmFsdWVUb0l0ZW1zKGF2YWlsYWJsZUl0ZW1zLCBzZWxlY3RlZFZhbHVlKSB7XG4gIGNvbnN0IGFycmF5QXNzZXJ0aW9uID0gKDAsIF91dGlscy5jcmVhdGVBcnJheUFzc2VydGlvbikoc2VsZWN0ZWRWYWx1ZSk7XG4gIHJldHVybiBhdmFpbGFibGVJdGVtcy5tYXAoaXRlbSA9PiB7XG4gICAgaXRlbS5jaGVja2VkID0gYXJyYXlBc3NlcnRpb24oaXRlbS52YWx1ZSk7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYWxsIGNoZWNrZWQgaXRlbXMgaW50byBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGF2YWlsYWJsZUl0ZW1zIEJhc2UgY29sbGVjdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gaXRlbXNUb1ZhbHVlKGF2YWlsYWJsZUl0ZW1zKSB7XG4gIGNvbnN0IGl0ZW1zID0gW107XG4gIGF2YWlsYWJsZUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0uY2hlY2tlZCkge1xuICAgICAgaXRlbXMucHVzaChpdGVtLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXRlbXM7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi9fYmFzZVwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgUmFkaW9JbnB1dFVJXG4gKi9cbnZhciBfaW5wdXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfbGFiZWwgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIFJhZGlvSW5wdXRVSSBleHRlbmRzIF9iYXNlLkJhc2VVSSB7XG4gIHN0YXRpYyBnZXQgREVGQVVMVFMoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh7XG4gICAgICB0eXBlOiAncmFkaW8nLFxuICAgICAgdGFnTmFtZTogJ2lucHV0JyxcbiAgICAgIGNsYXNzTmFtZTogJ2h0VUlSYWRpbycsXG4gICAgICBsYWJlbDoge31cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgKlxuICAgKiBAdHlwZSB7SFRNTElucHV0RWxlbWVudH1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwgKDAsIF9vYmplY3QuZXh0ZW5kKShSYWRpb0lucHV0VUkuREVGQVVMVFMsIG9wdGlvbnMpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW5wdXQsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgbGFiZWwgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MTGFiZWxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9sYWJlbCwgdm9pZCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBET00gc3RydWN0dXJlLlxuICAgKi9cbiAgYnVpbGQoKSB7XG4gICAgc3VwZXIuYnVpbGQoKTtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1xuICAgIGxhYmVsLnRleHRDb250ZW50ID0gdGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCk7XG4gICAgbGFiZWwuaHRtbEZvciA9IHRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvcik7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9sYWJlbCwgdGhpcywgbGFiZWwpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaW5wdXQsIHRoaXMsIHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbnB1dCwgdGhpcykuY2hlY2tlZCA9IHRoaXMub3B0aW9ucy5jaGVja2VkO1xuICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWwpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGVsZW1lbnQuXG4gICAqL1xuICB1cGRhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzQnVpbHQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhYmVsLCB0aGlzKS50ZXh0Q29udGVudCA9IHRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHJhZGlvIGJ1dHRvbiBpcyBjaGVja2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ2hlY2tlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0J1aWx0KCkgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lucHV0LCB0aGlzKS5jaGVja2VkIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGlucHV0IGNoZWNrZWQgYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlIFNldCB0aGUgY29tcG9uZW50IHN0YXRlLlxuICAgKi9cbiAgc2V0Q2hlY2tlZCgpIHtcbiAgICBsZXQgdmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG4gICAgaWYgKHRoaXMuaXNCdWlsdCgpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lucHV0LCB0aGlzKS5jaGVja2VkID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIGVsZW1lbnQuXG4gICAqL1xuICBmb2N1cygpIHtcbiAgICBpZiAodGhpcy5pc0J1aWx0KCkpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5wdXQsIHRoaXMpLmZvY3VzKCk7XG4gICAgfVxuICB9XG59XG5leHBvcnRzLlJhZGlvSW5wdXRVSSA9IFJhZGlvSW5wdXRVSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX21lbnUyID0gcmVxdWlyZShcIi4uLy4uLy4uL3BsdWdpbnMvY29udGV4dE1lbnUvbWVudVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG52YXIgX3ByZWRlZmluZWRJdGVtcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi9wbHVnaW5zL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtc1wiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuL19iYXNlXCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBTZWxlY3RVSVxuICovXG52YXIgX21lbnUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXRlbXMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY2FwdGlvbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jYXB0aW9uRWxlbWVudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9kcm9wZG93biA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9TZWxlY3RVSV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgU2VsZWN0VUkgZXh0ZW5kcyBfYmFzZS5CYXNlVUkge1xuICBzdGF0aWMgZ2V0IERFRkFVTFRTKCkge1xuICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoe1xuICAgICAgY2xhc3NOYW1lOiAnaHRVSVNlbGVjdCcsXG4gICAgICB3cmFwSXQ6IGZhbHNlLFxuICAgICAgdGFiSW5kZXg6IC0xXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFuY2Ugb2Yge0BsaW5rIE1lbnV9LlxuICAgKlxuICAgKiBAdHlwZSB7TWVudX1cbiAgICovXG5cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihob3RJbnN0YW5jZSwgKDAsIF9vYmplY3QuZXh0ZW5kKShTZWxlY3RVSS5ERUZBVUxUUywgb3B0aW9ucykpO1xuICAgIC8qKlxuICAgICAqIE9uIG1lbnUgc2VsZWN0ZWQgbGlzdGVuZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29tbWFuZCBTZWxlY3RlZCBpdGVtLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfU2VsZWN0VUlfYnJhbmQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9tZW51LCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIGF2YWlsYWJsZSBzZWxlY3Qgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaXRlbXMsIFtdKTtcbiAgICAvKipcbiAgICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBCYXNlVUkgaW5zdGFuY2Ugb2YgdGhlIGNhcHRpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QmFzZVVJfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jYXB0aW9uLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIGNhcHRpb24gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MVGFibGVDYXB0aW9uRWxlbWVudH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY2FwdGlvbkVsZW1lbnQsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIHJlZmVyZW5jZSB0byB0aGUgQmFzZVVJIGluc3RhbmNlIG9mIHRoZSBkcm9wZG93bi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtCYXNlVUl9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2Ryb3Bkb3duLCB2b2lkIDApO1xuICAgIHRoaXMucmVnaXN0ZXJIb29rcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluc3RhbmNlIG9mIHRoZSBNZW51LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWVudX1cbiAgICovXG4gIGdldE1lbnUoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYWxsIG5lY2Vzc2FyeSBob29rcy5cbiAgICovXG4gIHJlZ2lzdGVySG9va3MoKSB7XG4gICAgdGhpcy5hZGRMb2NhbEhvb2soJ2NsaWNrJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1NlbGVjdFVJX2JyYW5kLCB0aGlzLCBfb25DbGljaykuY2FsbCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG9wdGlvbnMgd2hpY2ggY2FuIGJlIHNlbGVjdGVkIGluIHRoZSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBpdGVtcyBBcnJheSBvZiBvYmplY3RzIHdpdGggcmVxdWlyZWQga2V5cyBga2V5YCBhbmQgYG5hbWVgLlxuICAgKi9cbiAgc2V0SXRlbXMoaXRlbXMpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2l0ZW1zLCB0aGlzLCB0aGlzLnRyYW5zbGF0ZU5hbWVzKGl0ZW1zKSk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykuc2V0TWVudUl0ZW1zKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXMsIHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIG5hbWVzIG9mIG1lbnUgaXRlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGl0ZW1zIEFycmF5IG9mIG9iamVjdHMgd2l0aCByZXF1aXJlZCBrZXlzIGBrZXlgIGFuZCBgbmFtZWAuXG4gICAqIEByZXR1cm5zIHtBcnJheX0gSXRlbXMgd2l0aCB0cmFuc2xhdGVkIGBuYW1lYCBrZXlzLlxuICAgKi9cbiAgdHJhbnNsYXRlTmFtZXMoaXRlbXMpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoaXRlbXMsIGl0ZW0gPT4ge1xuICAgICAgaXRlbS5uYW1lID0gdGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGl0ZW0ubmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIERPTSBzdHJ1Y3R1cmUuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICBzdXBlci5idWlsZCgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbWVudSwgdGhpcywgbmV3IF9tZW51Mi5NZW51KHRoaXMuaG90LCB7XG4gICAgICBjbGFzc05hbWU6ICdodFNlbGVjdFVJIGh0RmlsdGVyc0NvbmRpdGlvbnNNZW51JyxcbiAgICAgIGtlZXBJblZpZXdwb3J0OiBmYWxzZSxcbiAgICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgICBjb250YWluZXI6IHRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyXG4gICAgfSkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykuc2V0TWVudUl0ZW1zKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXRlbXMsIHRoaXMpKTtcbiAgICBjb25zdCBjYXB0aW9uID0gbmV3IF9iYXNlLkJhc2VVSSh0aGlzLmhvdCwge1xuICAgICAgY2xhc3NOYW1lOiAnaHRVSVNlbGVjdENhcHRpb24nXG4gICAgfSk7XG4gICAgY29uc3QgZHJvcGRvd24gPSBuZXcgX2Jhc2UuQmFzZVVJKHRoaXMuaG90LCB7XG4gICAgICBjbGFzc05hbWU6ICdodFVJU2VsZWN0RHJvcGRvd24nXG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jYXB0aW9uLCB0aGlzLCBjYXB0aW9uKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NhcHRpb25FbGVtZW50LCB0aGlzLCBjYXB0aW9uLmVsZW1lbnQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZHJvcGRvd24sIHRoaXMsIGRyb3Bkb3duKTtcbiAgICBpZiAodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncykge1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoZHJvcGRvd24uZWxlbWVudCwgWygwLCBfYTExeS5BMTFZX0hJRERFTikoKV0pO1xuICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkodGhpcy5fZWxlbWVudCwgWygwLCBfYTExeS5BMTFZX0xJU1RCT1gpKCldKTtcbiAgICB9XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKFtjYXB0aW9uLCBkcm9wZG93bl0sIGVsZW1lbnQgPT4gdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50LmVsZW1lbnQpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnUsIHRoaXMpLmFkZExvY2FsSG9vaygnc2VsZWN0JywgY29tbWFuZCA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfU2VsZWN0VUlfYnJhbmQsIHRoaXMsIF9vbk1lbnVTZWxlY3QpLmNhbGwodGhpcywgY29tbWFuZCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykuYWRkTG9jYWxIb29rKCdhZnRlckNsb3NlJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1NlbGVjdFVJX2JyYW5kLCB0aGlzLCBfb25NZW51Q2xvc2VkKS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBET00gc3RydWN0dXJlLlxuICAgKi9cbiAgdXBkYXRlKCkge1xuICAgIGlmICghdGhpcy5pc0J1aWx0KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGNvbmRpdGlvbk5hbWU7XG4gICAgaWYgKHRoaXMub3B0aW9ucy52YWx1ZSkge1xuICAgICAgY29uZGl0aW9uTmFtZSA9IHRoaXMub3B0aW9ucy52YWx1ZS5uYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25kaXRpb25OYW1lID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tZW51LCB0aGlzKS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkZJTFRFUlNfQ09ORElUSU9OU19OT05FKTtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jYXB0aW9uRWxlbWVudCwgdGhpcykudGV4dENvbnRlbnQgPSBjb25kaXRpb25OYW1lO1xuICAgIHN1cGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gc2VsZWN0IGRyb3Bkb3duIG1lbnUgd2l0aCBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIG9wZW5PcHRpb25zKCkge1xuICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudSwgdGhpcykub3BlbigpO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tZW51LCB0aGlzKS5zZXRQb3NpdGlvbih7XG4gICAgICAgIGxlZnQ6IHRoaXMuaG90LmlzTHRyKCkgPyByZWN0LmxlZnQgLSA1IDogcmVjdC5sZWZ0IC0gMzEsXG4gICAgICAgIHRvcDogcmVjdC50b3AgLSAxLFxuICAgICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICAgICAgfSk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnUsIHRoaXMpLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnUsIHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe1xuICAgICAgICBrZXlzOiBbWydUYWInXSwgWydTaGlmdCcsICdUYWInXV0sXG4gICAgICAgIGNhbGxiYWNrOiBldmVudCA9PiB7XG4gICAgICAgICAgdGhpcy5jbG9zZU9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ3RhYktleWRvd24nLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAga2V5czogW1snQ29udHJvbC9NZXRhJywgJ0EnXV0sXG4gICAgICAgIGNhbGxiYWNrOiAoKSA9PiBmYWxzZVxuICAgICAgfV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBzZWxlY3QgZHJvcGRvd24gbWVudS5cbiAgICovXG4gIGNsb3NlT3B0aW9ucygpIHtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tZW51LCB0aGlzKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tZW51LCB0aGlzKS5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyBlbGVtZW50LlxuICAgKi9cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMuaXNCdWlsdCgpKSB7XG4gICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIERlc3Ryb3kgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnUsIHRoaXMpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lbnUsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbWVudSwgdGhpcywgbnVsbCk7XG4gICAgfVxuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NhcHRpb24sIHRoaXMpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NhcHRpb24sIHRoaXMpLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZHJvcGRvd24sIHRoaXMpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2Ryb3Bkb3duLCB0aGlzKS5kZXN0cm95KCk7XG4gICAgfVxuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5TZWxlY3RVSSA9IFNlbGVjdFVJO1xuZnVuY3Rpb24gX29uTWVudVNlbGVjdChjb21tYW5kKSB7XG4gIGlmIChjb21tYW5kLm5hbWUgIT09IF9wcmVkZWZpbmVkSXRlbXMuU0VQQVJBVE9SKSB7XG4gICAgdGhpcy5vcHRpb25zLnZhbHVlID0gY29tbWFuZDtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnc2VsZWN0JywgdGhpcy5vcHRpb25zLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBPbiBtZW51IGNsb3NlZCBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gX29uTWVudUNsb3NlZCgpIHtcbiAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdhZnRlckNsb3NlJyk7XG59XG4vKipcbiAqIE9uIGVsZW1lbnQgY2xpY2sgbGlzdGVuZXIuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gX29uQ2xpY2soKSB7XG4gIHRoaXMub3Blbk9wdGlvbnMoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlQXJyYXlBc3NlcnRpb24gPSBjcmVhdGVBcnJheUFzc2VydGlvbjtcbmV4cG9ydHMuaW50ZXJzZWN0VmFsdWVzID0gaW50ZXJzZWN0VmFsdWVzO1xuZXhwb3J0cy5zb3J0Q29tcGFyaXNvbiA9IHNvcnRDb21wYXJpc29uO1xuZXhwb3J0cy50b0VtcHR5U3RyaW5nID0gdG9FbXB0eVN0cmluZztcbmV4cG9ydHMudG9WaXN1YWxWYWx1ZSA9IHRvVmlzdWFsVmFsdWU7XG5leHBvcnRzLnVuaWZ5Q29sdW1uVmFsdWVzID0gdW5pZnlDb2x1bW5WYWx1ZXM7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2ZlYXR1cmUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9mZWF0dXJlXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xuY29uc3Qgc29ydENvbXBhcmUgPSAoMCwgX2ZlYXR1cmUuZ2V0Q29tcGFyaXNvbkZ1bmN0aW9uKSgpO1xuXG4vKipcbiAqIENvbXBhcmlzb24gZnVuY3Rpb24gZm9yIHNvcnRpbmcgcHVycG9zZXMuXG4gKlxuICogQHBhcmFtIHsqfSBhIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBiIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgbnVtYmVyIGZyb20gLTEgdG8gMS5cbiAqL1xuZnVuY3Rpb24gc29ydENvbXBhcmlzb24oYSwgYikge1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhIC0gYjtcbiAgfVxuICByZXR1cm4gc29ydENvbXBhcmUoYSwgYik7XG59XG5cbi8qKlxuICogQ29udmVydCByYXcgdmFsdWUgaW50byB2aXN1YWwgdmFsdWUuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0RW1wdHlWYWx1ZSBEZWZhdWx0IHZhbHVlIGZvciBlbXB0eSBjZWxscy5cbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiB0b1Zpc3VhbFZhbHVlKHZhbHVlLCBkZWZhdWx0RW1wdHlWYWx1ZSkge1xuICBsZXQgdmlzdWFsVmFsdWUgPSB2YWx1ZTtcbiAgaWYgKHZpc3VhbFZhbHVlID09PSAnJykge1xuICAgIHZpc3VhbFZhbHVlID0gYCgke2RlZmF1bHRFbXB0eVZhbHVlfSlgO1xuICB9XG4gIHJldHVybiB2aXN1YWxWYWx1ZTtcbn1cbmNvbnN0IFNVUFBPUlRfU0VUX0NPTlNUUlVDVE9SID0gbmV3IFNldChbMV0pLmhhcygxKTtcbmNvbnN0IFNVUFBPUlRfRkFTVF9ERURVUEUgPSBTVVBQT1JUX1NFVF9DT05TVFJVQ1RPUiAmJiB0eXBlb2YgQXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGUgYW4gYXJyYXkgYXNzZXJ0aW9uIHRvIGNvbXBhcmUgaWYgYW4gZWxlbWVudCBleGlzdHMgaW4gdGhhdCBhcnJheSAoaW4gYSBtb3JlIGVmZmljaWVudCB3YXkgdGhhbiAuaW5kZXhPZikuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gaW5pdGlhbERhdGEgVmFsdWVzIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFycmF5QXNzZXJ0aW9uKGluaXRpYWxEYXRhKSB7XG4gIGxldCBkYXRhc2V0ID0gaW5pdGlhbERhdGE7XG4gIGlmIChTVVBQT1JUX1NFVF9DT05TVFJVQ1RPUikge1xuICAgIGRhdGFzZXQgPSBuZXcgU2V0KGRhdGFzZXQpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChTVVBQT1JUX1NFVF9DT05TVFJVQ1RPUikge1xuICAgICAgcmVzdWx0ID0gZGF0YXNldC5oYXModmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG4gICAgICByZXN1bHQgPSAhIX5kYXRhc2V0LmluZGV4T2YodmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnQgZW1wdHktaXNoIHZhbHVlcyBsaWtlIG51bGwgYW5kIHVuZGVmaW5lZCB0byBhbiBlbXB0eSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHRvRW1wdHlTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFVuaWZ5IGNvbHVtbiB2YWx1ZXMgKHJlbW92ZSBkdXBsaWNhdGVkIHZhbHVlcyBhbmQgc29ydCB0aGVtKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgQW4gYXJyYXkgb2YgdmFsdWVzLlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB1bmlmeUNvbHVtblZhbHVlcyh2YWx1ZXMpIHtcbiAgbGV0IHVuaWZpZWRWYWx1ZXMgPSB2YWx1ZXM7XG4gIGlmIChTVVBQT1JUX0ZBU1RfREVEVVBFKSB7XG4gICAgdW5pZmllZFZhbHVlcyA9IEFycmF5LmZyb20obmV3IFNldCh1bmlmaWVkVmFsdWVzKSk7XG4gIH0gZWxzZSB7XG4gICAgdW5pZmllZFZhbHVlcyA9ICgwLCBfYXJyYXkuYXJyYXlVbmlxdWUpKHVuaWZpZWRWYWx1ZXMpO1xuICB9XG4gIHVuaWZpZWRWYWx1ZXMgPSB1bmlmaWVkVmFsdWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGEgLSBiO1xuICAgIH1cbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBhID4gYiA/IDEgOiAtMTtcbiAgfSk7XG4gIHJldHVybiB1bmlmaWVkVmFsdWVzO1xufVxuXG4vKipcbiAqIEludGVyc2VjdCAnYmFzZScgdmFsdWVzIHdpdGggJ3NlbGVjdGVkJyB2YWx1ZXMgYW5kIHJldHVybiBhbiBhcnJheSBvZiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYmFzZSBBbiBhcnJheSBvZiBiYXNlIHZhbHVlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IHNlbGVjdGVkIEFuIGFycmF5IG9mIHNlbGVjdGVkIHZhbHVlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZWZhdWx0RW1wdHlWYWx1ZSBEZWZhdWx0IHZhbHVlIGZvciBlbXB0eSBjZWxscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gQSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBpbnZva2VkIGZvciBldmVyeSBpdGVtIGluIGFuIGFycmF5LlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiBpbnRlcnNlY3RWYWx1ZXMoYmFzZSwgc2VsZWN0ZWQsIGRlZmF1bHRFbXB0eVZhbHVlLCBjYWxsYmFjaykge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgY29uc3Qgc2FtZSA9IGJhc2UgPT09IHNlbGVjdGVkO1xuICBsZXQgc2VsZWN0ZWRJdGVtc0Fzc2VydGlvbjtcbiAgaWYgKCFzYW1lKSB7XG4gICAgc2VsZWN0ZWRJdGVtc0Fzc2VydGlvbiA9IGNyZWF0ZUFycmF5QXNzZXJ0aW9uKHNlbGVjdGVkKTtcbiAgfVxuICAoMCwgX2FycmF5LmFycmF5RWFjaCkoYmFzZSwgdmFsdWUgPT4ge1xuICAgIGxldCBjaGVja2VkID0gZmFsc2U7XG4gICAgaWYgKHNhbWUgfHwgc2VsZWN0ZWRJdGVtc0Fzc2VydGlvbih2YWx1ZSkpIHtcbiAgICAgIGNoZWNrZWQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0ge1xuICAgICAgY2hlY2tlZCxcbiAgICAgIHZhbHVlLFxuICAgICAgdmlzdWFsVmFsdWU6IHRvVmlzdWFsVmFsdWUodmFsdWUsIGRlZmF1bHRFbXB0eVZhbHVlKVxuICAgIH07XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjayhpdGVtKTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkSG90SW5zdGFuY2VzID0gZ2V0UmVnaXN0ZXJlZEhvdEluc3RhbmNlcztcbmV4cG9ydHMucmVnaXN0ZXJDdXN0b21GdW5jdGlvbnMgPSByZWdpc3RlckN1c3RvbUZ1bmN0aW9ucztcbmV4cG9ydHMucmVnaXN0ZXJFbmdpbmUgPSByZWdpc3RlckVuZ2luZTtcbmV4cG9ydHMucmVnaXN0ZXJMYW5ndWFnZSA9IHJlZ2lzdGVyTGFuZ3VhZ2U7XG5leHBvcnRzLnJlZ2lzdGVyTmFtZWRFeHByZXNzaW9ucyA9IHJlZ2lzdGVyTmFtZWRFeHByZXNzaW9ucztcbmV4cG9ydHMuc2V0dXBFbmdpbmUgPSBzZXR1cEVuZ2luZTtcbmV4cG9ydHMuc2V0dXBTaGVldCA9IHNldHVwU2hlZXQ7XG5leHBvcnRzLnVucmVnaXN0ZXJFbmdpbmUgPSB1bnJlZ2lzdGVyRW5naW5lO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9zdGF0aWNSZWdpc3RlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL3N0YXRpY1JlZ2lzdGVyXCIpKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9mb3JtdWxhcyA9IHJlcXVpcmUoXCIuLi9mb3JtdWxhc1wiKTtcbnZhciBfc2V0dGluZ3MgPSByZXF1aXJlKFwiLi9zZXR0aW5nc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIFByZXBhcmVzIGFuZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIGZvciB0aGUgZW5naW5lIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBIb1QgaW5zdGFuY2VzLlxuICpcbiAqIEByZXR1cm5zIHtNYXB9XG4gKi9cbmZ1bmN0aW9uIGdldEVuZ2luZVJlbGF0aW9uc2hpcFJlZ2lzdHJ5KCkge1xuICBjb25zdCByZWdpc3RyeUtleSA9ICdlbmdpbmVfcmVsYXRpb25zaGlwJztcbiAgY29uc3QgcGx1Z2luU3RhdGljUmVnaXN0cnkgPSAoMCwgX3N0YXRpY1JlZ2lzdGVyLmRlZmF1bHQpKF9mb3JtdWxhcy5QTFVHSU5fS0VZKTtcbiAgaWYgKCFwbHVnaW5TdGF0aWNSZWdpc3RyeS5oYXNJdGVtKHJlZ2lzdHJ5S2V5KSkge1xuICAgIHBsdWdpblN0YXRpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHJlZ2lzdHJ5S2V5LCBuZXcgTWFwKCkpO1xuICB9XG4gIHJldHVybiBwbHVnaW5TdGF0aWNSZWdpc3RyeS5nZXRJdGVtKHJlZ2lzdHJ5S2V5KTtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhbmQgcmV0dXJucyB0aGUgY29sbGVjdGlvbiBmb3IgdGhlIGVuZ2luZSBzaGFyZWQgdXNhZ2UuXG4gKlxuICogQHJldHVybnMge01hcH1cbiAqL1xuZnVuY3Rpb24gZ2V0U2hhcmVkRW5naW5lVXNhZ2VSZWdpc3RyeSgpIHtcbiAgY29uc3QgcmVnaXN0cnlLZXkgPSAnc2hhcmVkX2VuZ2luZV91c2FnZSc7XG4gIGNvbnN0IHBsdWdpblN0YXRpY1JlZ2lzdHJ5ID0gKDAsIF9zdGF0aWNSZWdpc3Rlci5kZWZhdWx0KShfZm9ybXVsYXMuUExVR0lOX0tFWSk7XG4gIGlmICghcGx1Z2luU3RhdGljUmVnaXN0cnkuaGFzSXRlbShyZWdpc3RyeUtleSkpIHtcbiAgICBwbHVnaW5TdGF0aWNSZWdpc3RyeS5yZWdpc3RlcihyZWdpc3RyeUtleSwgbmV3IE1hcCgpKTtcbiAgfVxuICByZXR1cm4gcGx1Z2luU3RhdGljUmVnaXN0cnkuZ2V0SXRlbShyZWdpc3RyeUtleSk7XG59XG5cbi8qKlxuICogU2V0dXBzIHRoZSBlbmdpbmUgaW5zdGFuY2UuIEl0IGVpdGhlciBjcmVhdGVzIGEgbmV3IChwb3NzaWJseSBzaGFyZWQpIGVuZ2luZSBpbnN0YW5jZSwgb3IgYXR0YWNoZXNcbiAqIHRoZSBwbHVnaW4gdG8gYW4gYWxyZWFkeS1leGlzdGluZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge0hhbmRzb250YWJsZX0gaG90SW5zdGFuY2UgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge251bGx8b2JqZWN0fSBSZXR1cm5zIHRoZSBlbmdpbmUgaW5zdGFuY2UgaWYgZXZlcnl0aGluZyB3b3JrZWQgcmlnaHQgYW5kIGBudWxsYCBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHVwRW5naW5lKGhvdEluc3RhbmNlKSB7XG4gIGNvbnN0IGhvdFNldHRpbmdzID0gaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKTtcbiAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSBob3RTZXR0aW5nc1tfZm9ybXVsYXMuUExVR0lOX0tFWV07XG4gIGNvbnN0IGVuZ2luZUNvbmZpZ0l0ZW0gPSBwbHVnaW5TZXR0aW5ncyA9PT0gbnVsbCB8fCBwbHVnaW5TZXR0aW5ncyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGx1Z2luU2V0dGluZ3MuZW5naW5lO1xuICBpZiAocGx1Z2luU2V0dGluZ3MgPT09IHRydWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkoZW5naW5lQ29uZmlnSXRlbSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGBlbmdpbmUuaHlwZXJmb3JtdWxhYCBvciBgZW5naW5lYCBpcyB0aGUgZW5naW5lIGNsYXNzXG4gIGlmICh0eXBlb2YgZW5naW5lQ29uZmlnSXRlbS5oeXBlcmZvcm11bGEgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVuZ2luZUNvbmZpZ0l0ZW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgX2VuZ2luZUNvbmZpZ0l0ZW0kaHlwO1xuICAgIHJldHVybiByZWdpc3RlckVuZ2luZSgoX2VuZ2luZUNvbmZpZ0l0ZW0kaHlwID0gZW5naW5lQ29uZmlnSXRlbS5oeXBlcmZvcm11bGEpICE9PSBudWxsICYmIF9lbmdpbmVDb25maWdJdGVtJGh5cCAhPT0gdm9pZCAwID8gX2VuZ2luZUNvbmZpZ0l0ZW0kaHlwIDogZW5naW5lQ29uZmlnSXRlbSwgaG90U2V0dGluZ3MsIGhvdEluc3RhbmNlKTtcblxuICAgIC8vIGBlbmdpbmVgIGlzIHRoZSBlbmdpbmUgaW5zdGFuY2VcbiAgfSBlbHNlIGlmICh0eXBlb2YgZW5naW5lQ29uZmlnSXRlbSA9PT0gJ29iamVjdCcgJiYgKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkoZW5naW5lQ29uZmlnSXRlbS5oeXBlcmZvcm11bGEpKSB7XG4gICAgY29uc3QgZW5naW5lUmVsYXRpb25zaGlwID0gZ2V0RW5naW5lUmVsYXRpb25zaGlwUmVnaXN0cnkoKTtcbiAgICBjb25zdCBzaGFyZWRFbmdpbmVVc2FnZSA9IGdldFNoYXJlZEVuZ2luZVVzYWdlUmVnaXN0cnkoKS5nZXQoZW5naW5lQ29uZmlnSXRlbSk7XG4gICAgaWYgKCFlbmdpbmVSZWxhdGlvbnNoaXAuaGFzKGVuZ2luZUNvbmZpZ0l0ZW0pKSB7XG4gICAgICBlbmdpbmVSZWxhdGlvbnNoaXAuc2V0KGVuZ2luZUNvbmZpZ0l0ZW0sIFtdKTtcbiAgICB9XG4gICAgZW5naW5lUmVsYXRpb25zaGlwLmdldChlbmdpbmVDb25maWdJdGVtKS5wdXNoKGhvdEluc3RhbmNlKTtcbiAgICBpZiAoc2hhcmVkRW5naW5lVXNhZ2UpIHtcbiAgICAgIHNoYXJlZEVuZ2luZVVzYWdlLnB1c2goaG90SW5zdGFuY2UuZ3VpZCk7XG4gICAgfVxuICAgIGlmICghZW5naW5lQ29uZmlnSXRlbS5nZXRDb25maWcoKS5saWNlbnNlS2V5KSB7XG4gICAgICBlbmdpbmVDb25maWdJdGVtLnVwZGF0ZUNvbmZpZyh7XG4gICAgICAgIGxpY2Vuc2VLZXk6IF9zZXR0aW5ncy5ERUZBVUxUX0xJQ0VOU0VfS0VZXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGVuZ2luZUNvbmZpZ0l0ZW0uZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwICE9PSBfc2V0dGluZ3MuREVGQVVMVF9TRVRUSU5HUy5sZWFwWWVhcjE5MDAgfHwgKDAsIF9vYmplY3QuaXNPYmplY3RFcXVhbCkoZW5naW5lQ29uZmlnSXRlbS5nZXRDb25maWcoKS5udWxsRGF0ZSwgX3NldHRpbmdzLkRFRkFVTFRfU0VUVElOR1MubnVsbERhdGUpID09PSBmYWxzZSkge1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgSWYgeW91IHVzZSBIeXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXFxgbGVhcFllYXIxOTAwXFxgIGFuZCBcXGBudWxsRGF0ZVxcYCBcbiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKTtcbiAgICB9XG4gICAgcmV0dXJuIGVuZ2luZUNvbmZpZ0l0ZW07XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBlbmdpbmUgaW4gdGhlIGdsb2JhbCByZWdpc3RlciBhbmQgYXR0YWNoZXMgdGhlIG5lZWRlZCBldmVudCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5naW5lQ2xhc3MgVGhlIGVuZ2luZSBjbGFzcy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBob3RTZXR0aW5ncyBUaGUgSGFuZHNvbnRhYmxlIHNldHRpbmdzLlxuICogQHBhcmFtIHtIYW5kc29udGFibGV9IGhvdEluc3RhbmNlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybnMgdGhlIGVuZ2luZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJFbmdpbmUoZW5naW5lQ2xhc3MsIGhvdFNldHRpbmdzLCBob3RJbnN0YW5jZSkge1xuICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IGhvdFNldHRpbmdzW19mb3JtdWxhcy5QTFVHSU5fS0VZXTtcbiAgY29uc3QgZW5naW5lU2V0dGluZ3MgPSAoMCwgX3NldHRpbmdzLmdldEVuZ2luZVNldHRpbmdzV2l0aERlZmF1bHRzQW5kT3ZlcnJpZGVzKShob3RTZXR0aW5ncyk7XG4gIGNvbnN0IGVuZ2luZVJlZ2lzdHJ5ID0gZ2V0RW5naW5lUmVsYXRpb25zaGlwUmVnaXN0cnkoKTtcbiAgY29uc3Qgc2hhcmVkRW5naW5lUmVnaXN0cnkgPSBnZXRTaGFyZWRFbmdpbmVVc2FnZVJlZ2lzdHJ5KCk7XG4gIHJlZ2lzdGVyQ3VzdG9tRnVuY3Rpb25zKGVuZ2luZUNsYXNzLCBwbHVnaW5TZXR0aW5ncy5mdW5jdGlvbnMpO1xuICByZWdpc3Rlckxhbmd1YWdlKGVuZ2luZUNsYXNzLCBwbHVnaW5TZXR0aW5ncy5sYW5ndWFnZSk7XG5cbiAgLy8gQ3JlYXRlIGluc3RhbmNlXG4gIGNvbnN0IGVuZ2luZUluc3RhbmNlID0gZW5naW5lQ2xhc3MuYnVpbGRFbXB0eShlbmdpbmVTZXR0aW5ncyk7XG5cbiAgLy8gQWRkIGl0IHRvIGdsb2JhbCByZWdpc3RyeVxuICBlbmdpbmVSZWdpc3RyeS5zZXQoZW5naW5lSW5zdGFuY2UsIFtob3RJbnN0YW5jZV0pO1xuICBzaGFyZWRFbmdpbmVSZWdpc3RyeS5zZXQoZW5naW5lSW5zdGFuY2UsIFtob3RJbnN0YW5jZS5ndWlkXSk7XG4gIHJlZ2lzdGVyTmFtZWRFeHByZXNzaW9ucyhlbmdpbmVJbnN0YW5jZSwgcGx1Z2luU2V0dGluZ3MubmFtZWRFeHByZXNzaW9ucyk7XG5cbiAgLy8gQWRkIGhvb2tzIG5lZWRlZCBmb3IgY3Jvc3MtcmVmZXJlbmNpbmcgc2hlZXRzXG4gIGVuZ2luZUluc3RhbmNlLm9uKCdzaGVldEFkZGVkJywgKCkgPT4ge1xuICAgIGVuZ2luZUluc3RhbmNlLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpO1xuICB9KTtcbiAgZW5naW5lSW5zdGFuY2Uub24oJ3NoZWV0UmVtb3ZlZCcsICgpID0+IHtcbiAgICBlbmdpbmVJbnN0YW5jZS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKTtcbiAgfSk7XG4gIHJldHVybiBlbmdpbmVJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsaXN0IG9mIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2VzIGxpbmtlZCB0byB0aGUgc3BlY2lmaWMgZW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbmdpbmUgVGhlIGVuZ2luZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtNYXA8bnVtYmVyLCBIYW5kc29udGFibGU+fSBSZXR1cm5zIE1hcCB3aXRoIEhhbmRzb250YWJsZSBpbnN0YW5jZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRIb3RJbnN0YW5jZXMoZW5naW5lKSB7XG4gIHZhciBfZW5naW5lUmVnaXN0cnkkZ2V0O1xuICBjb25zdCBlbmdpbmVSZWdpc3RyeSA9IGdldEVuZ2luZVJlbGF0aW9uc2hpcFJlZ2lzdHJ5KCk7XG4gIGNvbnN0IGhvdEluc3RhbmNlcyA9IGVuZ2luZVJlZ2lzdHJ5LnNpemUgPT09IDAgPyBbXSA6IEFycmF5LmZyb20oKF9lbmdpbmVSZWdpc3RyeSRnZXQgPSBlbmdpbmVSZWdpc3RyeS5nZXQoZW5naW5lKSkgIT09IG51bGwgJiYgX2VuZ2luZVJlZ2lzdHJ5JGdldCAhPT0gdm9pZCAwID8gX2VuZ2luZVJlZ2lzdHJ5JGdldCA6IFtdKTtcbiAgcmV0dXJuIG5ldyBNYXAoaG90SW5zdGFuY2VzLm1hcChob3QgPT4gW2hvdC5nZXRQbHVnaW4oJ2Zvcm11bGFzJykuc2hlZXRJZCwgaG90XSkpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIEhPVCBpbnN0YW5jZSBmcm9tIHRoZSBnbG9iYWwgcmVnaXN0ZXIncyBlbmdpbmUgdXNhZ2UgYXJyYXksIGFuZCBpZiB0aGVyZSBhcmUgbm8gSE9UIGluc3RhbmNlcyBsZWZ0LFxuICogdW5yZWdpc3RlcnMgdGhlIGVuZ2luZSBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuZ2luZSBUaGUgZW5naW5lIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHVucmVnaXN0ZXJFbmdpbmUoZW5naW5lLCBob3RJbnN0YW5jZSkge1xuICBpZiAoZW5naW5lKSB7XG4gICAgY29uc3QgZW5naW5lUmVnaXN0cnkgPSBnZXRFbmdpbmVSZWxhdGlvbnNoaXBSZWdpc3RyeSgpO1xuICAgIGNvbnN0IGVuZ2luZUhvdFJlbGF0aW9uc2hpcCA9IGVuZ2luZVJlZ2lzdHJ5LmdldChlbmdpbmUpO1xuICAgIGNvbnN0IHNoYXJlZEVuZ2luZVJlZ2lzdHJ5ID0gZ2V0U2hhcmVkRW5naW5lVXNhZ2VSZWdpc3RyeSgpO1xuICAgIGNvbnN0IHNoYXJlZEVuZ2luZVVzYWdlID0gc2hhcmVkRW5naW5lUmVnaXN0cnkuZ2V0KGVuZ2luZSk7XG4gICAgaWYgKGVuZ2luZUhvdFJlbGF0aW9uc2hpcCAmJiBlbmdpbmVIb3RSZWxhdGlvbnNoaXAuaW5jbHVkZXMoaG90SW5zdGFuY2UpKSB7XG4gICAgICBlbmdpbmVIb3RSZWxhdGlvbnNoaXAuc3BsaWNlKGVuZ2luZUhvdFJlbGF0aW9uc2hpcC5pbmRleE9mKGhvdEluc3RhbmNlKSwgMSk7XG4gICAgICBpZiAoZW5naW5lSG90UmVsYXRpb25zaGlwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBlbmdpbmVSZWdpc3RyeS5kZWxldGUoZW5naW5lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNoYXJlZEVuZ2luZVVzYWdlICYmIHNoYXJlZEVuZ2luZVVzYWdlLmluY2x1ZGVzKGhvdEluc3RhbmNlLmd1aWQpKSB7XG4gICAgICBzaGFyZWRFbmdpbmVVc2FnZS5zcGxpY2Uoc2hhcmVkRW5naW5lVXNhZ2UuaW5kZXhPZihob3RJbnN0YW5jZS5ndWlkKSwgMSk7XG4gICAgICBpZiAoc2hhcmVkRW5naW5lVXNhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNoYXJlZEVuZ2luZVJlZ2lzdHJ5LmRlbGV0ZShlbmdpbmUpO1xuICAgICAgICBlbmdpbmUuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgY3VzdG9tIGZ1bmN0aW9ucyBmb3IgdGhlIGVuZ2luZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmdpbmVDbGFzcyBUaGUgZW5naW5lIGNsYXNzLlxuICogQHBhcmFtIHtBcnJheX0gY3VzdG9tRnVuY3Rpb25zIFRoZSBjdXN0b20gZnVuY3Rpb25zIGFycmF5LlxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbUZ1bmN0aW9ucyhlbmdpbmVDbGFzcywgY3VzdG9tRnVuY3Rpb25zKSB7XG4gIGlmIChjdXN0b21GdW5jdGlvbnMpIHtcbiAgICBjdXN0b21GdW5jdGlvbnMuZm9yRWFjaChmdW5jID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGx1Z2luLFxuICAgICAgICB0cmFuc2xhdGlvbnNcbiAgICAgIH0gPSBmdW5jO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZW5naW5lQ2xhc3MucmVnaXN0ZXJGdW5jdGlvbihuYW1lLCBwbHVnaW4sIHRyYW5zbGF0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICgwLCBfY29uc29sZS53YXJuKShlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBmb3IgdGhlIGVuZ2luZS5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmdpbmVDbGFzcyBUaGUgZW5naW5lIGNsYXNzLlxuICogQHBhcmFtIHtvYmplY3R9IGxhbmd1YWdlU2V0dGluZyBUaGUgZW5naW5lJ3MgbGFuZ3VhZ2Ugb2JqZWN0LlxuICovXG5mdW5jdGlvbiByZWdpc3Rlckxhbmd1YWdlKGVuZ2luZUNsYXNzLCBsYW5ndWFnZVNldHRpbmcpIHtcbiAgaWYgKGxhbmd1YWdlU2V0dGluZykge1xuICAgIGNvbnN0IHtcbiAgICAgIGxhbmdDb2RlXG4gICAgfSA9IGxhbmd1YWdlU2V0dGluZztcbiAgICB0cnkge1xuICAgICAgZW5naW5lQ2xhc3MucmVnaXN0ZXJMYW5ndWFnZShsYW5nQ29kZSwgbGFuZ3VhZ2VTZXR0aW5nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAoMCwgX2NvbnNvbGUud2FybikoZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIG5hbWVkIGV4cHJlc3Npb25zIGluIHRoZSBlbmdpbmUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGVuZ2luZUluc3RhbmNlIFRoZSBlbmdpbmUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0FycmF5fSBuYW1lZEV4cHJlc3Npb25zIEFycmF5IG9mIHRoZSBuYW1lZCBleHByZXNzaW9ucyB0byBiZSByZWdpc3RlcmVkLlxuICovXG5mdW5jdGlvbiByZWdpc3Rlck5hbWVkRXhwcmVzc2lvbnMoZW5naW5lSW5zdGFuY2UsIG5hbWVkRXhwcmVzc2lvbnMpIHtcbiAgaWYgKG5hbWVkRXhwcmVzc2lvbnMpIHtcbiAgICBlbmdpbmVJbnN0YW5jZS5zdXNwZW5kRXZhbHVhdGlvbigpO1xuICAgIG5hbWVkRXhwcmVzc2lvbnMuZm9yRWFjaChuYW1lZEV4cCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBvcHRpb25zXG4gICAgICB9ID0gbmFtZWRFeHA7XG4gICAgICB0cnkge1xuICAgICAgICBlbmdpbmVJbnN0YW5jZS5hZGROYW1lZEV4cHJlc3Npb24obmFtZSwgZXhwcmVzc2lvbiwgc2NvcGUsIG9wdGlvbnMpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX2NvbnNvbGUud2FybikoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBlbmdpbmVJbnN0YW5jZS5yZXN1bWVFdmFsdWF0aW9uKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTZXRzIHVwIGEgbmV3IHNoZWV0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbmdpbmVJbnN0YW5jZSBUaGUgZW5naW5lIGluc3RhbmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IHNoZWV0TmFtZSBUaGUgbmV3IHNoZWV0IG5hbWUuXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gc2V0dXBTaGVldChlbmdpbmVJbnN0YW5jZSwgc2hlZXROYW1lKSB7XG4gIGlmICgoMCwgX21peGVkLmlzVW5kZWZpbmVkKShzaGVldE5hbWUpIHx8ICFlbmdpbmVJbnN0YW5jZS5kb2VzU2hlZXRFeGlzdChzaGVldE5hbWUpKSB7XG4gICAgc2hlZXROYW1lID0gZW5naW5lSW5zdGFuY2UuYWRkU2hlZXQoc2hlZXROYW1lKTtcbiAgfVxuICByZXR1cm4gc2hlZXROYW1lO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRFbmdpbmVTZXR0aW5nc092ZXJyaWRlcyA9IGdldEVuZ2luZVNldHRpbmdzT3ZlcnJpZGVzO1xuZXhwb3J0cy5nZXRFbmdpbmVTZXR0aW5nc1dpdGhEZWZhdWx0c0FuZE92ZXJyaWRlcyA9IGdldEVuZ2luZVNldHRpbmdzV2l0aERlZmF1bHRzQW5kT3ZlcnJpZGVzO1xuZXhwb3J0cy5nZXRFbmdpbmVTZXR0aW5nc1dpdGhPdmVycmlkZXMgPSBnZXRFbmdpbmVTZXR0aW5nc1dpdGhPdmVycmlkZXM7XG5leHBvcnRzLmhhdmVFbmdpbmVTZXR0aW5nc0NoYW5nZWQgPSBoYXZlRW5naW5lU2V0dGluZ3NDaGFuZ2VkO1xudmFyIF9mb3JtdWxhcyA9IHJlcXVpcmUoXCIuLi9mb3JtdWxhc1wiKTtcbmNvbnN0IERFRkFVTFRfTElDRU5TRV9LRVkgPSBleHBvcnRzLkRFRkFVTFRfTElDRU5TRV9LRVkgPSAnaW50ZXJuYWwtdXNlLWluLWhhbmRzb250YWJsZSc7XG5jb25zdCBERUZBVUxUX1NFVFRJTkdTID0gZXhwb3J0cy5ERUZBVUxUX1NFVFRJTkdTID0ge1xuICBsaWNlbnNlS2V5OiBERUZBVUxUX0xJQ0VOU0VfS0VZLFxuICB1c2VBcnJheUFyaXRobWV0aWM6IHRydWUsXG4gIHVzZUNvbHVtbkluZGV4OiBmYWxzZSxcbiAgdXNlU3RhdHM6IGZhbHNlLFxuICBldmFsdWF0ZU51bGxUb1plcm86IHRydWUsXG4gIHByZWNpc2lvbkVwc2lsb246IDFlLTEzLFxuICBwcmVjaXNpb25Sb3VuZGluZzogMTQsXG4gIHNtYXJ0Um91bmRpbmc6IHRydWUsXG4gIGxlYXBZZWFyMTkwMDogZmFsc2UsXG4gIG51bGxEYXRlOiB7XG4gICAgeWVhcjogMTg5OSxcbiAgICBtb250aDogMTIsXG4gICAgZGF5OiAzMFxuICB9LFxuICBudWxsWWVhcjogMzAsXG4gIGRhdGVGb3JtYXRzOiBbJ0REL01NL1lZWVknLCAnREQvTU0vWVknXSxcbiAgdGltZUZvcm1hdHM6IFsnaGg6bW0nLCAnaGg6bW06c3Muc3NzJ10sXG4gIG1hdGNoV2hvbGVDZWxsOiB0cnVlLFxuICB1c2VSZWd1bGFyRXhwcmVzc2lvbnM6IGZhbHNlLFxuICB1c2VXaWxkY2FyZHM6IHRydWUsXG4gIGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiAnLCcsXG4gIHRob3VzYW5kU2VwYXJhdG9yOiAnJyxcbiAgZGVjaW1hbFNlcGFyYXRvcjogJy4nLFxuICBsYW5ndWFnZTogJ2VuR0InXG59O1xuXG4vKipcbiAqIEdldHMgYSBzZXQgb2YgZW5naW5lIHNldHRpbmdzIHRvIGJlIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBwcm92aWRlZCBzZXR0aW5ncywgYmFzZWQgb24gdXNlcidzIEhhbmRzb250YWJsZSBzZXR0aW5ncy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaG90U2V0dGluZ3MgSGFuZHNvbnRhYmxlIHNldHRpbmdzIG9iamVjdC5cbiAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWluaW5nIHRoZSBvdmVycmlkaW5nIG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldEVuZ2luZVNldHRpbmdzT3ZlcnJpZGVzKGhvdFNldHRpbmdzKSB7XG4gIHZhciBfaG90U2V0dGluZ3MkUExVR0lOX0s7XG4gIHJldHVybiB7XG4gICAgbWF4Q29sdW1uczogaG90U2V0dGluZ3MubWF4Q29sdW1ucyxcbiAgICBtYXhSb3dzOiBob3RTZXR0aW5ncy5tYXhSb3dzLFxuICAgIGxhbmd1YWdlOiAoX2hvdFNldHRpbmdzJFBMVUdJTl9LID0gaG90U2V0dGluZ3NbX2Zvcm11bGFzLlBMVUdJTl9LRVldKSA9PT0gbnVsbCB8fCBfaG90U2V0dGluZ3MkUExVR0lOX0sgPT09IHZvaWQgMCB8fCAoX2hvdFNldHRpbmdzJFBMVUdJTl9LID0gX2hvdFNldHRpbmdzJFBMVUdJTl9LLmxhbmd1YWdlKSA9PT0gbnVsbCB8fCBfaG90U2V0dGluZ3MkUExVR0lOX0sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob3RTZXR0aW5ncyRQTFVHSU5fSy5sYW5nQ29kZVxuICB9O1xufVxuXG4vKipcbiAqIERyb3AgYGh5cGVyZm9ybXVsYWAga2V5IGZyb20gb2JqZWN0IGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGx1Z2luU2V0dGluZ3MgRm9ybXVsYXMgcGx1Z2luIHNldHRpbmdzLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY2xlYW5FbmdpbmVTZXR0aW5ncyhwbHVnaW5TZXR0aW5ncykge1xuICByZXR1cm4gT2JqZWN0LmtleXMocGx1Z2luU2V0dGluZ3MpLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICBpZiAoa2V5ICE9PSAnaHlwZXJmb3JtdWxhJykge1xuICAgICAgb2JqW2tleV0gPSBwbHVnaW5TZXR0aW5nc1trZXldO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9LCB7fSk7XG59XG5cbi8qKlxuICogVGFrZXMgdGhlIGRlZmF1bHQsIHVzZXIgYW5kIG92ZXJyaWRpbmcgc2V0dGluZ3MgYW5kIG1lcmdlcyB0aGVtIGludG8gYSBzaW5nbGUgb2JqZWN0IHRvIGJlIHBhc3NlZCB0byB0aGUgZW5naW5lLlxuICpcbiAqIFRoZSBmaW5hbCBvYmplY3QgZ2V0cyBpdHMgcGFyYW1ldGVycyBpbiB0aGUgZm9sbG93aW5nIG9yZGVyLFxuICogd2l0aCBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIG9iamVjdHMgbGlzdGVkIGluIHRoZSBsb3dlciBsZXZlbHMgb2YgdGhlIGxpc3Qgb3ZlcnJpZGluZyB0aGVcbiAqIG9uZXMgYWJvdmUgdGhlbTpcbiAqXG4gKiAxLiBEZWZhdWx0IHNldHRpbmdzXG4gKiAyLiBVc2VyIHNldHRpbmdzXG4gKiAzLiBPdmVycmlkZXMuXG4gKlxuICogTWVhbnQgdG8gYmUgdXNlZCBkdXJpbmcgKmluaXRpYWxpemF0aW9uKiBvZiB0aGUgZW5naW5lLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBob3RTZXR0aW5ncyBUaGUgSGFuZHNvbnRhYmxlIHNldHRpbmdzLlxuICogQHJldHVybnMge29iamVjdH0gVGhlIGZpbmFsIGVuZ2luZSBzZXR0aW5ncy5cbiAqL1xuZnVuY3Rpb24gZ2V0RW5naW5lU2V0dGluZ3NXaXRoRGVmYXVsdHNBbmRPdmVycmlkZXMoaG90U2V0dGluZ3MpIHtcbiAgdmFyIF9wbHVnaW5TZXR0aW5ncyRlbmdpbjtcbiAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSBob3RTZXR0aW5nc1tfZm9ybXVsYXMuUExVR0lOX0tFWV07XG4gIGNvbnN0IHVzZXJTZXR0aW5ncyA9IGNsZWFuRW5naW5lU2V0dGluZ3MocGx1Z2luU2V0dGluZ3MgIT09IG51bGwgJiYgcGx1Z2luU2V0dGluZ3MgIT09IHZvaWQgMCAmJiAoX3BsdWdpblNldHRpbmdzJGVuZ2luID0gcGx1Z2luU2V0dGluZ3MuZW5naW5lKSAhPT0gbnVsbCAmJiBfcGx1Z2luU2V0dGluZ3MkZW5naW4gIT09IHZvaWQgMCAmJiBfcGx1Z2luU2V0dGluZ3MkZW5naW4uaHlwZXJmb3JtdWxhID8gcGx1Z2luU2V0dGluZ3MuZW5naW5lIDoge30pO1xuICBjb25zdCBvdmVycmlkZXMgPSBnZXRFbmdpbmVTZXR0aW5nc092ZXJyaWRlcyhob3RTZXR0aW5ncyk7XG4gIHJldHVybiB7XG4gICAgLi4uREVGQVVMVF9TRVRUSU5HUyxcbiAgICAuLi51c2VyU2V0dGluZ3MsXG4gICAgLi4ub3ZlcnJpZGVzXG4gIH07XG59XG5cbi8qKlxuICogR2V0IGVuZ2luZSBzZXR0aW5ncyBmcm9tIGEgSGFuZHNvbnRhYmxlIHNldHRpbmdzIG9iamVjdCB3aXRoIG92ZXJyaWRlcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaG90U2V0dGluZ3MgSGFuZHNvbnRhYmxlIHNldHRpbmdzIG9iamVjdC5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldEVuZ2luZVNldHRpbmdzV2l0aE92ZXJyaWRlcyhob3RTZXR0aW5ncykge1xuICB2YXIgX3BsdWdpblNldHRpbmdzJGVuZ2luMjtcbiAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSBob3RTZXR0aW5nc1tfZm9ybXVsYXMuUExVR0lOX0tFWV07XG4gIGNvbnN0IHVzZXJTZXR0aW5ncyA9IGNsZWFuRW5naW5lU2V0dGluZ3MocGx1Z2luU2V0dGluZ3MgIT09IG51bGwgJiYgcGx1Z2luU2V0dGluZ3MgIT09IHZvaWQgMCAmJiAoX3BsdWdpblNldHRpbmdzJGVuZ2luMiA9IHBsdWdpblNldHRpbmdzLmVuZ2luZSkgIT09IG51bGwgJiYgX3BsdWdpblNldHRpbmdzJGVuZ2luMiAhPT0gdm9pZCAwICYmIF9wbHVnaW5TZXR0aW5ncyRlbmdpbjIuaHlwZXJmb3JtdWxhID8gcGx1Z2luU2V0dGluZ3MuZW5naW5lIDoge30pO1xuICBjb25zdCBvdmVycmlkZXMgPSBnZXRFbmdpbmVTZXR0aW5nc092ZXJyaWRlcyhob3RTZXR0aW5ncyk7XG4gIHJldHVybiB7XG4gICAgLi4udXNlclNldHRpbmdzLFxuICAgIC4uLm92ZXJyaWRlc1xuICB9O1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBuZXcgc2V0dGluZ3MgYXJlIGRlZmluZWQgYW5kIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb25lcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgZW5naW5lLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjdXJyZW50RW5naW5lU2V0dGluZ3MgQ3VycmVudGx5IHVzZWQgZW5naW5lIHNldHRpbmdzLlxuICogQHBhcmFtIHtvYmplY3R9IG5ld0VuZ2luZVNldHRpbmdzIE5ldyBlbmdpbmUgc2V0dGluZ3MuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGF2ZUVuZ2luZVNldHRpbmdzQ2hhbmdlZChjdXJyZW50RW5naW5lU2V0dGluZ3MsIG5ld0VuZ2luZVNldHRpbmdzKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhuZXdFbmdpbmVTZXR0aW5ncykuc29tZShzZXR0aW5nT3B0aW9uID0+IHtcbiAgICByZXR1cm4gbmV3RW5naW5lU2V0dGluZ3Nbc2V0dGluZ09wdGlvbl0gIT09IHVuZGVmaW5lZCAmJiBuZXdFbmdpbmVTZXR0aW5nc1tzZXR0aW5nT3B0aW9uXSAhPT0gY3VycmVudEVuZ2luZVNldHRpbmdzW3NldHRpbmdPcHRpb25dO1xuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3N0YXRpY1JlZ2lzdGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RhdGljUmVnaXN0ZXJcIikpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9yZWdpc3RlciA9IHJlcXVpcmUoXCIuL2VuZ2luZS9yZWdpc3RlclwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbnZhciBfc2V0dGluZ3MgPSByZXF1aXJlKFwiLi9lbmdpbmUvc2V0dGluZ3NcIik7XG52YXIgX2RhdGEgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kYXRhXCIpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9zdHJpbmdcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9pbmRleFN5bmNlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaW5kZXhTeW5jZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdmb3JtdWxhcyc7XG5jb25zdCBTRVRUSU5HX0tFWVMgPSBleHBvcnRzLlNFVFRJTkdfS0VZUyA9IFsnbWF4Um93cycsICdtYXhDb2x1bW5zJywgJ2xhbmd1YWdlJ107XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDI2MDtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJTaGVldEFkZGVkJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJTaGVldFJlbW92ZWQnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdhZnRlclNoZWV0UmVuYW1lZCcpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUnKTtcblxuLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGRldGVjdGluZyBjaGFuZ2VzIGNvbWluZyBmcm9tIHRoZSBgVW5kb1JlZG9gIHBsdWdpbi4gVGhpcyBraW5kIG9mIGNoYW5nZSB3b24ndCBiZVxuLy8gaGFuZGxlZCBieSB3aG9sZSBib2R5IG9mIGxpc3RlbmVycyBhbmQgdGhlcmVmb3JlIHdvbid0IGNoYW5nZSB1bmRvL3JlZG8gc3RhY2sgaW5zaWRlIGVuZ2luZSBwcm92aWRlZCBieSBIeXBlckZvcm11bGEuXG4vLyBIeXBlckZvcm11bGEncyBgdW5kb2AgYW5kIGByZWRvYCBtZXRob2RzIHdpbGwgZG8gaXQgaW5zdGVhZC4gUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHVuZG8vcmVkbyBzdGFja3MgaW5zaWRlXG4vLyBpbnN0YW5jZXMgb2YgSGFuZHNvbnRhYmxlIGFuZCBIeXBlckZvcm11bGEgc2hvdWxkIGJlIHN5bmNlZCAobnVtYmVyIG9mIGFjdGlvbnMgc2hvdWxkIGJlIHRoZSBzYW1lKS5cbmNvbnN0IGlzQmxvY2tlZFNvdXJjZSA9IHNvdXJjZSA9PiBzb3VyY2UgPT09ICdVbmRvUmVkby51bmRvJyB8fCBzb3VyY2UgPT09ICdVbmRvUmVkby5yZWRvJyB8fCBzb3VyY2UgPT09ICdhdXRvJztcblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3MgeW91IHRvIHBlcmZvcm0gRXhjZWwtbGlrZSBjYWxjdWxhdGlvbnMgaW4geW91ciBidXNpbmVzcyBhcHBsaWNhdGlvbnMuIEl0IGRvZXMgaXQgYnkgYW5cbiAqIGludGVncmF0aW9uIHdpdGggb3VyIG90aGVyIHByb2R1Y3QsIFtIeXBlckZvcm11bGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaHlwZXJmb3JtdWxhLyksIHdoaWNoIGlzIGFcbiAqIHBvd2VyZnVsIGNhbGN1bGF0aW9uIGVuZ2luZSB3aXRoIGFuIGV4dGVuc2l2ZSBudW1iZXIgb2YgZmVhdHVyZXMuXG4gKlxuICogVG8gdGVzdCBvdXQgSHlwZXJGb3JtdWxhLCBzZWUgW3RoaXMgZ3VpZGVdKEAvZ3VpZGVzL2Zvcm11bGFzL2Zvcm11bGEtY2FsY3VsYXRpb24vZm9ybXVsYS1jYWxjdWxhdGlvbi5tZCNhdmFpbGFibGUtZnVuY3Rpb25zKS5cbiAqXG4gKiBAcGx1Z2luIEZvcm11bGFzXG4gKiBAY2xhc3MgRm9ybXVsYXNcbiAqL1xudmFyIF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaG90V2FzSW5pdGlhbGl6ZWRXaXRoRW1wdHlEYXRhID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2VuZ2luZUxpc3RlbmVycyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9Gb3JtdWxhc19icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgRm9ybXVsYXMgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgX3RoaXMgPSB0aGlzO1xuICAgIC8qKlxuICAgICAqIFRoZSBob29rIGFsbG93cyB0byB0cmFuc2xhdGUgdGhlIGZvcm11bGEgdmFsdWUgdG8gY2FsY3VsYXRlZCB2YWx1ZSBiZWZvcmUgaXQgZ29lcyB0byB0aGVcbiAgICAgKiB2YWxpZGF0b3IgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBjZWxsIHZhbHVlIHRvIHZhbGlkYXRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxSb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4IG9yIHByb3BlcnR5IG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB2YWx1ZSB0byB2YWxpZGF0ZS5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0Zvcm11bGFzX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHVzZWQgdG8gYnlwYXNzIGhvb2tzIGluIGludGVybmFsIG9wZXJhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIG5lZWRlZCB0byBtYXJrIGlmIEhhbmRzb250YWJsZSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBubyBkYXRhLlxuICAgICAqIChSZXF1aXJlZCB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCwgdGhhdCBIYW5kc29udGFibGUgYXV0by1nZW5lcmF0ZXMgc2FtcGxlIGRhdGEsIHdoZW4gbm8gZGF0YSBpcyBwcm92aWRlZCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaG90V2FzSW5pdGlhbGl6ZWRXaXRoRW1wdHlEYXRhLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgdGhlIEh5cGVyRm9ybXVsYSBsaXN0ZW5lcnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2VuZ2luZUxpc3RlbmVycywgW1sndmFsdWVzVXBkYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMsIF9vbkVuZ2luZVZhbHVlc1VwZGF0ZWQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH1dLCBbJ25hbWVkRXhwcmVzc2lvbkFkZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzLCBfb25FbmdpbmVOYW1lZEV4cHJlc3Npb25zQWRkZWQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH1dLCBbJ25hbWVkRXhwcmVzc2lvblJlbW92ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMsIF9vbkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNSZW1vdmVkKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9XSwgWydzaGVldEFkZGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzLCBfb25FbmdpbmVTaGVldEFkZGVkKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9XSwgWydzaGVldFJlbmFtZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMsIF9vbkVuZ2luZVNoZWV0UmVuYW1lZCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfV0sIFsnc2hlZXRSZW1vdmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzLCBfb25FbmdpbmVTaGVldFJlbW92ZWQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH1dXSk7XG4gICAgLyoqXG4gICAgICogU3RhdGljIHJlZ2lzdGVyIHVzZWQgdG8gc2V0IHVwIG9uZSBnbG9iYWwgSHlwZXJGb3JtdWxhIGluc3RhbmNlLlxuICAgICAqIFRPRE86IGN1cnJlbnRseSB1c2VkIGluIHRlc3RzLCBtaWdodCBiZSByZW1vdmVkIGxhdGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXRpY1JlZ2lzdGVyXCIsICgwLCBfc3RhdGljUmVnaXN0ZXIuZGVmYXVsdCkoJ2Zvcm11bGFzJykpO1xuICAgIC8qKlxuICAgICAqIFRoZSBlbmdpbmUgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRoaXMgaW5zdGFuY2Ugb2YgSGFuZHNvbnRhYmxlLlxuICAgICAqXG4gICAgICogQHR5cGUge0h5cGVyRm9ybXVsYXxudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVuZ2luZVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBIeXBlckZvcm11bGEncyBzaGVldCBuYW1lLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ3xudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNoZWV0TmFtZVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBzeW5jaHJvbml6ZXIgcmVzcG9uc2libGUgZm9yIG1hbmlwdWxhdGluZyB3aXRoIHNvbWUgZ2VuZXJhbCBvcHRpb25zIHJlbGF0ZWQgdG8gaW5kZXhlcyBzeW5jaHJvbml6YXRpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SW5kZXhTeW5jZXJ8bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbmRleFN5bmNlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBzeW5jaHJvbml6ZXIgcmVzcG9uc2libGUgZm9yIHN5bmNpbmcgdGhlIG9yZGVyIG9mIEhPVCBhbmQgSEYncyBkYXRhIGZvciB0aGUgYXhpcyBvZiB0aGUgcm93cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBeGlzU3luY2VyfG51bGx9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm93QXhpc1N5bmNlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbmRleCBzeW5jaHJvbml6ZXIgcmVzcG9uc2libGUgZm9yIHN5bmNpbmcgdGhlIG9yZGVyIG9mIEhPVCBhbmQgSEYncyBkYXRhIGZvciB0aGUgYXhpcyBvZiB0aGUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBeGlzU3luY2VyfG51bGx9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uQXhpc1N5bmNlclwiLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpIHtcbiAgICByZXR1cm4gW1BMVUdJTl9LRVksIC4uLlNFVFRJTkdfS0VZU107XG4gIH1cbiAgLyoqXG4gICAqIEh5cGVyRm9ybXVsYSdzIHNoZWV0IGlkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfG51bGx9XG4gICAqL1xuICBnZXQgc2hlZXRJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGVldE5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIEZvcm11bGFzI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5uZWVkZWQtdGVybmFyeSAqL1xuICAgIHJldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICB2YXIgX3NldHVwRW5naW5lLFxuICAgICAgX3RoaXMyID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW5naW5lID0gKF9zZXR1cEVuZ2luZSA9ICgwLCBfcmVnaXN0ZXIuc2V0dXBFbmdpbmUpKHRoaXMuaG90KSkgIT09IG51bGwgJiYgX3NldHVwRW5naW5lICE9PSB2b2lkIDAgPyBfc2V0dXBFbmdpbmUgOiB0aGlzLmVuZ2luZTtcbiAgICBpZiAoIXRoaXMuZW5naW5lKSB7XG4gICAgICAoMCwgX2NvbnNvbGUud2FybikoJ01pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBsZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuJyArICcgZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVc2VmdWwgZm9yIGRpc2FibGluZyAtPiBlbmFibGluZyB0aGUgcGx1Z2luIHVzaW5nIGB1cGRhdGVTZXR0aW5nc2Agb3IgdGhlIEFQSS5cbiAgICBpZiAodGhpcy5zaGVldE5hbWUgIT09IG51bGwgJiYgIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSkge1xuICAgICAgY29uc3QgbmV3U2hlZXROYW1lID0gdGhpcy5hZGRTaGVldCh0aGlzLnNoZWV0TmFtZSwgdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpO1xuICAgICAgaWYgKG5ld1NoZWV0TmFtZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zaGVldE5hbWUgPSBuZXdTaGVldE5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlTG9hZERhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25CZWZvcmVMb2FkRGF0YSkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJMb2FkRGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOCksIF9rZXk4ID0gMDsgX2tleTggPCBfbGVuODsgX2tleTgrKykge1xuICAgICAgICBhcmdzW19rZXk4XSA9IGFyZ3VtZW50c1tfa2V5OF07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkFmdGVyTG9hZERhdGEpLmNhbGwoX3RoaXMyLCAuLi5hcmdzKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBgdXBkYXRlRGF0YWAgaG9va3MgdXRpbGl6ZSB0aGUgc2FtZSBsb2dpYyBhcyB0aGUgYGxvYWREYXRhYCBob29rcy5cbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVVwZGF0ZURhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjkpLCBfa2V5OSA9IDA7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25CZWZvcmVMb2FkRGF0YSkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJVcGRhdGVEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEwID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTApLCBfa2V5MTAgPSAwOyBfa2V5MTAgPCBfbGVuMTA7IF9rZXkxMCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25BZnRlckxvYWREYXRhKS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjExID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTEpLCBfa2V5MTEgPSAwOyBfa2V5MTEgPCBfbGVuMTE7IF9rZXkxMSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTExXSA9IGFyZ3VtZW50c1tfa2V5MTFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25Nb2RpZnlEYXRhKS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlTb3VyY2VEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTIpLCBfa2V5MTIgPSAwOyBfa2V5MTIgPCBfbGVuMTI7IF9rZXkxMisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEyXSA9IGFyZ3VtZW50c1tfa2V5MTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25Nb2RpZnlTb3VyY2VEYXRhKS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVWYWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjEzKSwgX2tleTEzID0gMDsgX2tleTEzIDwgX2xlbjEzOyBfa2V5MTMrKykge1xuICAgICAgICBhcmdzW19rZXkxM10gPSBhcmd1bWVudHNbX2tleTEzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQmVmb3JlVmFsaWRhdGUpLmNhbGwoX3RoaXMyLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE0KSwgX2tleTE0ID0gMDsgX2tleTE0IDwgX2xlbjE0OyBfa2V5MTQrKykge1xuICAgICAgICBhcmdzW19rZXkxNF0gPSBhcmd1bWVudHNbX2tleTE0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsKS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNldERhdGFBdENlbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xNSksIF9rZXkxNSA9IDA7IF9rZXkxNSA8IF9sZW4xNTsgX2tleTE1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTVdID0gYXJndW1lbnRzW19rZXkxNV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkFmdGVyU2V0RGF0YUF0Q2VsbCkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJTZXREYXRhQXRSb3dQcm9wJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjE2ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTYpLCBfa2V5MTYgPSAwOyBfa2V5MTYgPCBfbGVuMTY7IF9rZXkxNisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTE2XSA9IGFyZ3VtZW50c1tfa2V5MTZdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9Gb3JtdWxhc19icmFuZCwgX3RoaXMyLCBfb25BZnRlclNldERhdGFBdENlbGwpLmNhbGwoX3RoaXMyLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNyZWF0ZVJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE3KSwgX2tleTE3ID0gMDsgX2tleTE3IDwgX2xlbjE3OyBfa2V5MTcrKykge1xuICAgICAgICBhcmdzW19rZXkxN10gPSBhcmd1bWVudHNbX2tleTE3XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQmVmb3JlQ3JlYXRlUm93KS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVDcmVhdGVDb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xOCksIF9rZXkxOCA9IDA7IF9rZXkxOCA8IF9sZW4xODsgX2tleTE4KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MThdID0gYXJndW1lbnRzW19rZXkxOF07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkJlZm9yZUNyZWF0ZUNvbCkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDcmVhdGVSb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTkgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xOSksIF9rZXkxOSA9IDA7IF9rZXkxOSA8IF9sZW4xOTsgX2tleTE5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTldID0gYXJndW1lbnRzW19rZXkxOV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkFmdGVyQ3JlYXRlUm93KS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckNyZWF0ZUNvbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yMCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIwKSwgX2tleTIwID0gMDsgX2tleTIwIDwgX2xlbjIwOyBfa2V5MjArKykge1xuICAgICAgICBhcmdzW19rZXkyMF0gPSBhcmd1bWVudHNbX2tleTIwXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQWZ0ZXJDcmVhdGVDb2wpLmNhbGwoX3RoaXMyLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVJlbW92ZVJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yMSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIxKSwgX2tleTIxID0gMDsgX2tleTIxIDwgX2xlbjIxOyBfa2V5MjErKykge1xuICAgICAgICBhcmdzW19rZXkyMV0gPSBhcmd1bWVudHNbX2tleTIxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQmVmb3JlUmVtb3ZlUm93KS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVSZW1vdmVDb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yMiksIF9rZXkyMiA9IDA7IF9rZXkyMiA8IF9sZW4yMjsgX2tleTIyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjJdID0gYXJndW1lbnRzW19rZXkyMl07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkJlZm9yZVJlbW92ZUNvbCkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSZW1vdmVSb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yMyksIF9rZXkyMyA9IDA7IF9rZXkyMyA8IF9sZW4yMzsgX2tleTIzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjNdID0gYXJndW1lbnRzW19rZXkyM107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkFmdGVyUmVtb3ZlUm93KS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclJlbW92ZUNvbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjI0KSwgX2tleTI0ID0gMDsgX2tleTI0IDwgX2xlbjI0OyBfa2V5MjQrKykge1xuICAgICAgICBhcmdzW19rZXkyNF0gPSBhcmd1bWVudHNbX2tleTI0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQWZ0ZXJSZW1vdmVDb2wpLmNhbGwoX3RoaXMyLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmluZGV4U3luY2VyID0gbmV3IF9pbmRleFN5bmNlci5kZWZhdWx0KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLCB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlciwgcG9zdHBvbmVkQWN0aW9uID0+IHtcbiAgICAgIHRoaXMuaG90LmFkZEhvb2tPbmNlKCdpbml0JywgKCkgPT4ge1xuICAgICAgICAvLyBFbmdpbmUgaXMgaW5pdGlhbGl6ZWQgYWZ0ZXIgZXhlY3V0aW5nIGNhbGxiYWNrIHRvIGBhZnRlckxvYWREYXRhYCBob29rLiBUaHVzLCBzb21lIGFjdGlvbnMgb24gaW5kZXhlcyBzaG91bGRcbiAgICAgICAgLy8gYmUgcG9zdHBvbmVkLlxuICAgICAgICBwb3N0cG9uZWRBY3Rpb24oKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMucm93QXhpc1N5bmNlciA9IHRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygncm93Jyk7XG4gICAgdGhpcy5jb2x1bW5BeGlzU3luY2VyID0gdGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCdjb2x1bW4nKTtcbiAgICB0aGlzLmhvdC5hZGRIb29rKCdhZnRlclJvd1NlcXVlbmNlQ2hhbmdlJywgdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UnLCB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYmVmb3JlUm93TW92ZScsIChtb3ZlZFJvd3MsIGZpbmFsSW5kZXgsIF8sIG1vdmVQb3NzaWJsZSkgPT4ge1xuICAgICAgdGhpcy5yb3dBeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihtb3ZlZFJvd3MsIGZpbmFsSW5kZXgsIG1vdmVQb3NzaWJsZSk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYmVmb3JlQ29sdW1uTW92ZScsIChtb3ZlZENvbHVtbnMsIGZpbmFsSW5kZXgsIF8sIG1vdmVQb3NzaWJsZSkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihtb3ZlZENvbHVtbnMsIGZpbmFsSW5kZXgsIG1vdmVQb3NzaWJsZSk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYWZ0ZXJSb3dNb3ZlJywgKG1vdmVkUm93cywgZmluYWxJbmRleCwgZHJvcEluZGV4LCBtb3ZlUG9zc2libGUsIG9yZGVyQ2hhbmdlZCkgPT4ge1xuICAgICAgdGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyhtb3ZlUG9zc2libGUsIG9yZGVyQ2hhbmdlZCk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYWZ0ZXJDb2x1bW5Nb3ZlJywgKG1vdmVkQ29sdW1ucywgZmluYWxJbmRleCwgZHJvcEluZGV4LCBtb3ZlUG9zc2libGUsIG9yZGVyQ2hhbmdlZCkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zlcyhtb3ZlUG9zc2libGUsIG9yZGVyQ2hhbmdlZCk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYmVmb3JlQ29sdW1uRnJlZXplJywgKGNvbHVtbiwgZnJlZXplUGVyZm9ybWVkKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtjb2x1bW5dLCB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LCBmcmVlemVQZXJmb3JtZWQpO1xuICAgIH0pO1xuICAgIHRoaXMuaG90LmFkZEhvb2soJ2FmdGVyQ29sdW1uRnJlZXplJywgKF8sIGZyZWV6ZVBlcmZvcm1lZCkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhmcmVlemVQZXJmb3JtZWQsIGZyZWV6ZVBlcmZvcm1lZCk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYmVmb3JlQ29sdW1uVW5mcmVlemUnLCAoY29sdW1uLCB1bmZyZWV6ZVBlcmZvcm1lZCkgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbY29sdW1uXSwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCAtIDEsIHVuZnJlZXplUGVyZm9ybWVkKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5hZGRIb29rKCdhZnRlckNvbHVtblVuZnJlZXplJywgKF8sIHVuZnJlZXplUGVyZm9ybWVkKSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHVuZnJlZXplUGVyZm9ybWVkLCB1bmZyZWV6ZVBlcmZvcm1lZCk7XG4gICAgfSk7XG5cbiAgICAvLyBUT0RPOiBBY3Rpb25zIHJlbGF0ZWQgdG8gb3ZlcndyaXRpbmcgZGF0ZXMgZnJvbSBIT1QgZm9ybWF0IHRvIEhGIGRlZmF1bHQgZm9ybWF0IGFyZSBkb25lIGFzIGNhbGxiYWNrIHRvIHRoaXNcbiAgICAvLyBob29rLCBiZWNhdXNlIHNvbWUgaG9va3MsIHN1Y2ggYXMgYGFmdGVyTG9hZERhdGFgIGRvZXNuJ3QgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wb3NlZCBjZWxsIHByb3BlcnRpZXMuXG4gICAgLy8gQW5vdGhlciBob29rcyBhcmUgdHJpZ2dlcmVkIHRvIGxhdGUgZm9yIHNldHRpbmcgSEYncyBlbmdpbmUgZGF0YSBuZWVkZWQgZm9yIHNvbWUgYWN0aW9ucy5cbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ2VsbE1ldGFSZXNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjI1KSwgX2tleTI1ID0gMDsgX2tleTI1IDwgX2xlbjI1OyBfa2V5MjUrKykge1xuICAgICAgICBhcmdzW19rZXkyNV0gPSBhcmd1bWVudHNbX2tleTI1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQWZ0ZXJDZWxsTWV0YVJlc2V0KS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGluZyB1bmRvIGFjdGlvbnMgb24gZGF0YSBqdXN0IHVzaW5nIEh5cGVyRm9ybXVsYSdzIFVuZG9SZWRvIG1lY2hhbmlzbVxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlVW5kbycsICgpID0+IHtcbiAgICAgIHRoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8odHJ1ZSk7XG4gICAgICB0aGlzLmVuZ2luZS51bmRvKCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGluZyByZWRvIGFjdGlvbnMgb24gZGF0YSBqdXN0IHVzaW5nIEh5cGVyRm9ybXVsYSdzIFVuZG9SZWRvIG1lY2hhbmlzbVxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlUmVkbycsICgpID0+IHtcbiAgICAgIHRoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8odHJ1ZSk7XG4gICAgICB0aGlzLmVuZ2luZS5yZWRvKCk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclVuZG8nLCAoKSA9PiB7XG4gICAgICB0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKGZhbHNlKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyVW5kbycsICgpID0+IHtcbiAgICAgIHRoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oZmFsc2UpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJEZXRhY2hDaGlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjI2KSwgX2tleTI2ID0gMDsgX2tleTI2IDwgX2xlbjI2OyBfa2V5MjYrKykge1xuICAgICAgICBhcmdzW19rZXkyNl0gPSBhcmd1bWVudHNbX2tleTI2XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfRm9ybXVsYXNfYnJhbmQsIF90aGlzMiwgX29uQWZ0ZXJEZXRhY2hDaGlsZCkuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlQXV0b2ZpbGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yNyksIF9rZXkyNyA9IDA7IF9rZXkyNyA8IF9sZW4yNzsgX2tleTI3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjddID0gYXJndW1lbnRzW19rZXkyN107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0Zvcm11bGFzX2JyYW5kLCBfdGhpczIsIF9vbkJlZm9yZUF1dG9maWxsKS5jYWxsKF90aGlzMiwgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9lbmdpbmVMaXN0ZW5lcnMsIHRoaXMpLmZvckVhY2goX3JlZiA9PiB7XG4gICAgICBsZXQgW2V2ZW50TmFtZSwgbGlzdGVuZXJdID0gX3JlZjtcbiAgICAgIHJldHVybiB0aGlzLmVuZ2luZS5vbihldmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9KTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VuZ2luZUxpc3RlbmVycywgdGhpcykuZm9yRWFjaChfcmVmMiA9PiB7XG4gICAgICBsZXQgW2V2ZW50TmFtZSwgbGlzdGVuZXJdID0gX3JlZjI7XG4gICAgICByZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH0pO1xuICAgICgwLCBfcmVnaXN0ZXIudW5yZWdpc3RlckVuZ2luZSkodGhpcy5lbmdpbmUsIHRoaXMuaG90KTtcbiAgICB0aGlzLmVuZ2luZSA9IG51bGw7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJlZCBvbiBgdXBkYXRlU2V0dGluZ3NgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3U2V0dGluZ3MgTmV3IHNldCBvZiBzZXR0aW5ncyBwYXNzZWQgdG8gdGhlIGB1cGRhdGVTZXR0aW5nc2AgbWV0aG9kLlxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKG5ld1NldHRpbmdzKSB7XG4gICAgY29uc3QgbmV3RW5naW5lU2V0dGluZ3MgPSAoMCwgX3NldHRpbmdzLmdldEVuZ2luZVNldHRpbmdzV2l0aE92ZXJyaWRlcykodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSk7XG4gICAgaWYgKCgwLCBfc2V0dGluZ3MuaGF2ZUVuZ2luZVNldHRpbmdzQ2hhbmdlZCkodGhpcy5lbmdpbmUuZ2V0Q29uZmlnKCksIG5ld0VuZ2luZVNldHRpbmdzKSkge1xuICAgICAgdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKG5ld0VuZ2luZVNldHRpbmdzKTtcbiAgICB9XG4gICAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkocGx1Z2luU2V0dGluZ3MpICYmICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShwbHVnaW5TZXR0aW5ncy5zaGVldE5hbWUpICYmIHBsdWdpblNldHRpbmdzLnNoZWV0TmFtZSAhPT0gdGhpcy5zaGVldE5hbWUpIHtcbiAgICAgIHRoaXMuc3dpdGNoU2hlZXQocGx1Z2luU2V0dGluZ3Muc2hlZXROYW1lKTtcbiAgICB9XG5cbiAgICAvLyBJZiBubyBkYXRhIHdhcyBwYXNzZWQgdG8gdGhlIGB1cGRhdGVTZXR0aW5nc2AgbWV0aG9kIGFuZCBubyBzaGVldCBpcyBjb25uZWN0ZWQgdG8gdGhlIGluc3RhbmNlIC0+IGNyZWF0ZSBhXG4gICAgLy8gbmV3IHNoZWV0IHVzaW5nIHRoZSBjdXJyZW50bHkgdXNlZCBkYXRhLiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgYGFmdGVyTG9hZERhdGFgIGNhbGwuXG4gICAgaWYgKCFuZXdTZXR0aW5ncy5kYXRhICYmIHRoaXMuc2hlZXROYW1lID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzaGVldE5hbWUgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldLnNoZWV0TmFtZTtcbiAgICAgIGlmIChzaGVldE5hbWUgJiYgdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3Qoc2hlZXROYW1lKSkge1xuICAgICAgICB0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hlZXROYW1lID0gdGhpcy5hZGRTaGVldChzaGVldE5hbWUgIT09IG51bGwgJiYgc2hlZXROYW1lICE9PSB2b2lkIDAgPyBzaGVldE5hbWUgOiB1bmRlZmluZWQsIHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKG5ld1NldHRpbmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2VuZ2luZUxpc3RlbmVycywgdGhpcykuZm9yRWFjaChfcmVmMyA9PiB7XG4gICAgICB2YXIgX3RoaXMkZW5naW5lO1xuICAgICAgbGV0IFtldmVudE5hbWUsIGxpc3RlbmVyXSA9IF9yZWYzO1xuICAgICAgcmV0dXJuIChfdGhpcyRlbmdpbmUgPSB0aGlzLmVuZ2luZSkgPT09IG51bGwgfHwgX3RoaXMkZW5naW5lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRlbmdpbmUub2ZmKGV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH0pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZW5naW5lTGlzdGVuZXJzLCB0aGlzLCBudWxsKTtcbiAgICAoMCwgX3JlZ2lzdGVyLnVucmVnaXN0ZXJFbmdpbmUpKHRoaXMuZW5naW5lLCB0aGlzLmhvdCk7XG4gICAgdGhpcy5lbmdpbmUgPSBudWxsO1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaGVldCB0byB0aGUgc2hhcmVkIEh5cGVyRm9ybXVsYSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gW3NoZWV0TmFtZV0gVGhlIG5ldyBzaGVldCBuYW1lLiBJZiBub3QgcHJvdmlkZWQgKG9yIGEgbnVsbCBpcyBwYXNzZWQpLCB3aWxsIGJlXG4gICAqIGF1dG8tZ2VuZXJhdGVkIGJ5IEh5cGVyRm9ybXVsYS5cbiAgICogQHBhcmFtIHtBcnJheX0gW3NoZWV0RGF0YV0gRGF0YSBwYXNzZWQgdG8gdGhlIHNoYXJlZCBIeXBlckZvcm11bGEgaW5zdGFuY2UuIEhhcyB0byBiZSBkZWNsYXJlZCBhcyBhbiBhcnJheSBvZlxuICAgKiBhcnJheXMgLSBhcnJheSBvZiBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBzY2VuYXJpby5cbiAgICogQHJldHVybnMge2Jvb2xlYW58c3RyaW5nfSBgZmFsc2VgIGlmIHRoZSBkYXRhIGZvcm1hdCBpcyB1bnVzYWJsZSBvciBpdCBpcyBpbXBvc3NpYmxlIHRvIGFkZCBhIG5ldyBzaGVldCB0byB0aGVcbiAgICogZW5naW5lLCB0aGUgY3JlYXRlZCBzaGVldCBuYW1lIG90aGVyd2lzZS5cbiAgICovXG4gIGFkZFNoZWV0KHNoZWV0TmFtZSwgc2hlZXREYXRhKSB7XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShzaGVldERhdGEpICYmICEoMCwgX2RhdGEuaXNBcnJheU9mQXJyYXlzKShzaGVldERhdGEpKSB7XG4gICAgICAoMCwgX2NvbnNvbGUud2FybikoJ1RoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChzaGVldE5hbWUgIT09IHVuZGVmaW5lZCAmJiBzaGVldE5hbWUgIT09IG51bGwgJiYgdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3Qoc2hlZXROYW1lKSkge1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCdTaGVldCB3aXRoIHRoZSBwcm92aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgYWN0dWFsU2hlZXROYW1lID0gdGhpcy5lbmdpbmUuYWRkU2hlZXQoc2hlZXROYW1lICE9PSBudWxsICYmIHNoZWV0TmFtZSAhPT0gdm9pZCAwID8gc2hlZXROYW1lIDogdW5kZWZpbmVkKTtcbiAgICAgIGlmIChzaGVldERhdGEpIHtcbiAgICAgICAgdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRoaXMuZW5naW5lLmdldFNoZWV0SWQoYWN0dWFsU2hlZXROYW1lKSwgc2hlZXREYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3R1YWxTaGVldE5hbWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKGUubWVzc2FnZSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgc2hlZXQgdXNlZCBhcyBkYXRhIGluIHRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UgKGl0IGxvYWRzIHRoZSBkYXRhIGZyb20gdGhlIHNoYXJlZCBIeXBlckZvcm11bGFcbiAgICogaW5zdGFuY2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXROYW1lIFNoZWV0IG5hbWUgdXNlZCBpbiB0aGUgc2hhcmVkIEh5cGVyRm9ybXVsYSBpbnN0YW5jZS5cbiAgICovXG4gIHN3aXRjaFNoZWV0KHNoZWV0TmFtZSkge1xuICAgIGlmICghdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3Qoc2hlZXROYW1lKSkge1xuICAgICAgKDAsIF9jb25zb2xlLmVycm9yKShgVGhlIHNoZWV0IG5hbWVkIFxcYCR7c2hlZXROYW1lfVxcYCBkb2VzIG5vdCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2hlZXROYW1lID0gc2hlZXROYW1lO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTtcbiAgICBpZiAoc2VyaWFsaXplZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmhvdC5sb2FkRGF0YShzZXJpYWxpemVkLCBgJHsoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KShQTFVHSU5fS0VZKX0uc3dpdGNoU2hlZXRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjZWxsIHR5cGUgdW5kZXIgc3BlY2lmaWVkIHZpc3VhbCBjb29yZGluYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2hlZXRdIFRoZSB0YXJnZXQgc2hlZXQgaWQsIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHNoZWV0LlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBQb3NzaWJsZSB2YWx1ZXM6ICdGT1JNVUxBJyB8ICdWQUxVRScgfCAnQVJSQVlGT1JNVUxBJyB8ICdFTVBUWScuXG4gICAqL1xuICBnZXRDZWxsVHlwZShyb3csIGNvbHVtbikge1xuICAgIGxldCBzaGVldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdGhpcy5zaGVldElkO1xuICAgIGNvbnN0IHBoeXNpY2FsUm93ID0gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pO1xuICAgIGlmIChwaHlzaWNhbFJvdyAhPT0gbnVsbCAmJiBwaHlzaWNhbENvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5naW5lLmdldENlbGxUeXBlKHtcbiAgICAgICAgc2hlZXQsXG4gICAgICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocm93KSxcbiAgICAgICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjb2x1bW4pXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdWxkIHJldHVybiBgRU1QVFlgIHdoZW4gb3V0IG9mIGJvdW5kcyAoYWNjb3JkaW5nIHRvIHRoZSB0ZXN0IGNhc2VzKS5cbiAgICAgIHJldHVybiAnRU1QVFknO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB1bmRlciBzcGVjaWZpZWQgdmlzdWFsIGNvb3JkaW5hdGVzIGlzIGZvcm11bGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NoZWV0XSBUaGUgdGFyZ2V0IHNoZWV0IGlkLCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBzaGVldC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0Zvcm11bGFDZWxsVHlwZShyb3csIGNvbHVtbikge1xuICAgIGxldCBzaGVldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdGhpcy5zaGVldElkO1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5kb2VzQ2VsbEhhdmVGb3JtdWxhKHtcbiAgICAgIHNoZWV0LFxuICAgICAgcm93OiB0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChyb3cpLFxuICAgICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjb2x1bW4pXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBkZXBlbmRlbnQgc2hlZXRzIChoYW5kc29udGFibGUgaW5zdGFuY2VzKSBiYXNlZCBvbiB0aGUgY2hhbmdlcyAtIGxpc3Qgb2YgdGhlXG4gICAqIHJlY2FsY3VsYXRlZCBkZXBlbmRlbnQgY2VsbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGRlcGVuZGVudENlbGxzIFRoZSB2YWx1ZXMgYW5kIGxvY2F0aW9uIG9mIGFwcGxpZWQgY2hhbmdlcyB3aXRoaW4gSEYgZW5naW5lLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZW5kZXJTZWxmXSBgdHJ1ZWAgaWYgaXQncyBzdXBwb3NlZCB0byByZW5kZXIgaXRzZWxmLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHJlbmRlckRlcGVuZGVudFNoZWV0cyhkZXBlbmRlbnRDZWxscykge1xuICAgIGxldCByZW5kZXJTZWxmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICBjb25zdCBhZmZlY3RlZFNoZWV0SWRzID0gbmV3IFNldCgpO1xuICAgIGRlcGVuZGVudENlbGxzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgIHZhciBfY2hhbmdlJGFkZHJlc3M7XG4gICAgICAvLyBGb3IgdGhlIE5hbWVkIGV4cHJlc3Npb24gdGhlIGFkZHJlc3MgaXMgZW1wdHksIGhlbmNlIHRoZSBgc2hlZXRJZGAgaXMgdW5kZWZpbmVkLlxuICAgICAgY29uc3Qgc2hlZXRJZCA9IGNoYW5nZSA9PT0gbnVsbCB8fCBjaGFuZ2UgPT09IHZvaWQgMCB8fCAoX2NoYW5nZSRhZGRyZXNzID0gY2hhbmdlLmFkZHJlc3MpID09PSBudWxsIHx8IF9jaGFuZ2UkYWRkcmVzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NoYW5nZSRhZGRyZXNzLnNoZWV0O1xuICAgICAgaWYgKHNoZWV0SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIWFmZmVjdGVkU2hlZXRJZHMuaGFzKHNoZWV0SWQpKSB7XG4gICAgICAgICAgYWZmZWN0ZWRTaGVldElkcy5hZGQoc2hlZXRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICAoMCwgX3JlZ2lzdGVyLmdldFJlZ2lzdGVyZWRIb3RJbnN0YW5jZXMpKHRoaXMuZW5naW5lKS5mb3JFYWNoKChyZWxhdGVkSG90LCBzaGVldElkKSA9PiB7XG4gICAgICBpZiAoKHJlbmRlclNlbGYgfHwgc2hlZXRJZCAhPT0gdGhpcy5zaGVldElkKSAmJiBhZmZlY3RlZFNoZWV0SWRzLmhhcyhzaGVldElkKSkge1xuICAgICAgICB2YXIgX3JlbGF0ZWRIb3QkdmlldztcbiAgICAgICAgcmVsYXRlZEhvdC5yZW5kZXIoKTtcbiAgICAgICAgKF9yZWxhdGVkSG90JHZpZXcgPSByZWxhdGVkSG90LnZpZXcpID09PSBudWxsIHx8IF9yZWxhdGVkSG90JHZpZXcgPT09IHZvaWQgMCB8fCBfcmVsYXRlZEhvdCR2aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBkZXBlbmRlbnQgY2VsbHMgYmFzZWQgb24gdGhlIGNlbGxzIHRoYXQgYXJlIG1vZGlmaWVkIGJ5IHRoZSBjaGFuZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGRlcGVuZGVudENlbGxzIFRoZSB2YWx1ZXMgYW5kIGxvY2F0aW9uIG9mIGFwcGxpZWQgY2hhbmdlcyB3aXRoaW4gSEYgZW5naW5lLlxuICAgKiBAcGFyYW0ge29iamVjdFtdfSBbY2hhbmdlZENlbGxzXSBUaGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBvZiBhcHBsaWVkIGNoYW5nZXMgYnkgZGV2ZWxvcGVyICh0aHJvdWdoIEFQSSBvciBVSSkuXG4gICAqL1xuICB2YWxpZGF0ZURlcGVuZGVudENlbGxzKGRlcGVuZGVudENlbGxzKSB7XG4gICAgbGV0IGNoYW5nZWRDZWxscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gICAgY29uc3Qgc3RyaW5naWZ5QWRkcmVzcyA9IGNoYW5nZSA9PiB7XG4gICAgICB2YXIgX2NoYW5nZSRhZGRyZXNzMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2wsXG4gICAgICAgIHNoZWV0XG4gICAgICB9ID0gKF9jaGFuZ2UkYWRkcmVzczIgPSBjaGFuZ2UgPT09IG51bGwgfHwgY2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjaGFuZ2UuYWRkcmVzcykgIT09IG51bGwgJiYgX2NoYW5nZSRhZGRyZXNzMiAhPT0gdm9pZCAwID8gX2NoYW5nZSRhZGRyZXNzMiA6IHt9O1xuICAgICAgcmV0dXJuICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShzaGVldCkgPyBgJHtzaGVldH06JHtyb3d9eCR7Y29sfWAgOiAnJztcbiAgICB9O1xuICAgIGNvbnN0IGNoYW5nZWRDZWxsc1NldCA9IG5ldyBTZXQoY2hhbmdlZENlbGxzLm1hcChjaGFuZ2UgPT4gc3RyaW5naWZ5QWRkcmVzcyhjaGFuZ2UpKSk7XG4gICAgZGVwZW5kZW50Q2VsbHMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgdmFyIF9jaGFuZ2UkYWRkcmVzczMsIF9jaGFuZ2UkYWRkcmVzczQ7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvdyxcbiAgICAgICAgY29sXG4gICAgICB9ID0gKF9jaGFuZ2UkYWRkcmVzczMgPSBjaGFuZ2UuYWRkcmVzcykgIT09IG51bGwgJiYgX2NoYW5nZSRhZGRyZXNzMyAhPT0gdm9pZCAwID8gX2NoYW5nZSRhZGRyZXNzMyA6IHt9O1xuXG4gICAgICAvLyBEb24ndCB0cnkgdG8gdmFsaWRhdGUgY2VsbHMgb3V0c2lkZSBvZiB0aGUgdmlzdWFsIHBhcnQgb2YgdGhlIHRhYmxlLlxuICAgICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShyb3cpID09PSBmYWxzZSB8fCAoMCwgX21peGVkLmlzRGVmaW5lZCkoY29sKSA9PT0gZmFsc2UgfHwgcm93ID49IHRoaXMuaG90LmNvdW50Um93cygpIHx8IGNvbCA+PSB0aGlzLmhvdC5jb3VudENvbHMoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciB0aGUgTmFtZWQgZXhwcmVzc2lvbiB0aGUgYWRkcmVzcyBpcyBlbXB0eSwgaGVuY2UgdGhlIGBzaGVldElkYCBpcyB1bmRlZmluZWQuXG4gICAgICBjb25zdCBzaGVldElkID0gY2hhbmdlID09PSBudWxsIHx8IGNoYW5nZSA9PT0gdm9pZCAwIHx8IChfY2hhbmdlJGFkZHJlc3M0ID0gY2hhbmdlLmFkZHJlc3MpID09PSBudWxsIHx8IF9jaGFuZ2UkYWRkcmVzczQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jaGFuZ2UkYWRkcmVzczQuc2hlZXQ7XG4gICAgICBjb25zdCBhZGRyZXNzSWQgPSBzdHJpbmdpZnlBZGRyZXNzKGNoYW5nZSk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBjZWxscyB0aGF0IGRlcGVuZCBvbiB0aGUgY2FsY3VsYXRlZCBmb3JtdWxhcy4gU2tpcCB0aGF0IGNlbGxzXG4gICAgICAvLyB3aGVyZSB0aGUgdXNlciBkaXJlY3RseSBjaGFuZ2VzIHRoZSB2YWx1ZXMgLSB0aGUgQ29yZSB0cmlnZ2VycyB0aG9zZSB2YWxpZGF0b3JzLlxuICAgICAgaWYgKHNoZWV0SWQgIT09IHVuZGVmaW5lZCAmJiAhY2hhbmdlZENlbGxzU2V0LmhhcyhhZGRyZXNzSWQpKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kSG90ID0gKDAsIF9yZWdpc3Rlci5nZXRSZWdpc3RlcmVkSG90SW5zdGFuY2VzKSh0aGlzLmVuZ2luZSkuZ2V0KHNoZWV0SWQpO1xuXG4gICAgICAgIC8vIGlmIGBzaGVldElkYCBpcyBub3QgYm91bmQgdG8gYW55IEhhbmRzb250YWJsZSBpbnN0YW5jZSwgc2tpcCB0aGUgdmFsaWRhdGlvbiBwcm9jZXNzXG4gICAgICAgIGlmICghYm91bmRIb3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJdCB3aWxsIGp1c3QgcmUtcmVuZGVyIGNlcnRhaW4gY2VsbCB3aGVuIG5lY2Vzc2FyeS5cbiAgICAgICAgYm91bmRIb3QudmFsaWRhdGVDZWxsKGJvdW5kSG90LmdldERhdGFBdENlbGwocm93LCBjb2wpLCBib3VuZEhvdC5nZXRDZWxsTWV0YShyb3csIGNvbCksICgpID0+IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIGEgY2hhbmdlIGZyb20gdGhlIGNoYW5nZS1yZWxhdGVkIGhvb2tzIHdpdGggdGhlIGVuZ2luZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7SGFuZHNvbnRhYmxlLkNlbGxWYWx1ZX0gbmV3VmFsdWUgTmV3IHZhbHVlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IEFycmF5IG9mIGNoYW5nZXMgZXhwb3J0ZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKi9cbiAgc3luY0NoYW5nZVdpdGhFbmdpbmUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKSB7XG4gICAgY29uc3QgYWRkcmVzcyA9IHtcbiAgICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocm93KSxcbiAgICAgIGNvbDogdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoY29sdW1uKSxcbiAgICAgIHNoZWV0OiB0aGlzLnNoZWV0SWRcbiAgICB9O1xuICAgIGlmICghdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoYWRkcmVzcykpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShhZGRyZXNzKX1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShyb3csIGNvbHVtbik7XG4gICAgaWYgKCgwLCBfdXRpbHMuaXNEYXRlKShuZXdWYWx1ZSwgY2VsbE1ldGEudHlwZSkpIHtcbiAgICAgIGlmICgoMCwgX3V0aWxzLmlzRGF0ZVZhbGlkKShuZXdWYWx1ZSwgY2VsbE1ldGEuZGF0ZUZvcm1hdCkpIHtcbiAgICAgICAgLy8gUmV3cml0aW5nIGRhdGUgaW4gSE9UIGZvcm1hdCB0byBIRiBmb3JtYXQuXG4gICAgICAgIG5ld1ZhbHVlID0gKDAsIF91dGlscy5nZXREYXRlSW5IZkZvcm1hdCkobmV3VmFsdWUsIGNlbGxNZXRhLmRhdGVGb3JtYXQpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWxzLmlzRm9ybXVsYSkobmV3VmFsdWUpID09PSBmYWxzZSkge1xuICAgICAgICAvLyBFc2NhcGluZyB2YWx1ZSBmcm9tIGRhdGUgcGFyc2luZyB1c2luZyBcIidcIiBzaWduIChIRiBmZWF0dXJlKS5cbiAgICAgICAgbmV3VmFsdWUgPSBgJyR7bmV3VmFsdWV9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhhZGRyZXNzLCBuZXdWYWx1ZSk7XG4gIH1cbn1cbmV4cG9ydHMuRm9ybXVsYXMgPSBGb3JtdWxhcztcbmZ1bmN0aW9uIF9vbkJlZm9yZVZhbGlkYXRlKHZhbHVlLCB2aXN1YWxSb3csIHByb3ApIHtcbiAgY29uc3QgdmlzdWFsQ29sdW1uID0gdGhpcy5ob3QucHJvcFRvQ29sKHByb3ApO1xuICBpZiAodGhpcy5pc0Zvcm11bGFDZWxsVHlwZSh2aXN1YWxSb3csIHZpc3VhbENvbHVtbikpIHtcbiAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgcm93OiB0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxSb3cpLFxuICAgICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxDb2x1bW4pLFxuICAgICAgc2hlZXQ6IHRoaXMuc2hlZXRJZFxuICAgIH07XG4gICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YSh2aXN1YWxSb3csIHZpc3VhbENvbHVtbik7XG4gICAgbGV0IGNlbGxWYWx1ZSA9IHRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShhZGRyZXNzKTsgLy8gRGF0ZSBhcyBhbiBpbnRlZ2VyIChFeGNlbC1saWtlIGRhdGUpLlxuXG4gICAgaWYgKGNlbGxNZXRhLnR5cGUgPT09ICdkYXRlJyAmJiAoMCwgX251bWJlci5pc051bWVyaWMpKGNlbGxWYWx1ZSkpIHtcbiAgICAgIGNlbGxWYWx1ZSA9ICgwLCBfdXRpbHMuZ2V0RGF0ZUZyb21FeGNlbERhdGUpKGNlbGxWYWx1ZSwgY2VsbE1ldGEuZGF0ZUZvcm1hdCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYGNlbGxWYWx1ZWAgaXMgYW4gb2JqZWN0IGl0IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGVycm9yXG4gICAgcmV0dXJuIHR5cGVvZiBjZWxsVmFsdWUgPT09ICdvYmplY3QnICYmIGNlbGxWYWx1ZSAhPT0gbnVsbCA/IGNlbGxWYWx1ZS52YWx1ZSA6IGNlbGxWYWx1ZTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4vKipcbiAqIGBvbkJlZm9yZUF1dG9maWxsYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7QXJyYXlbXX0gZmlsbERhdGEgVGhlIGRhdGEgdGhhdCB3YXMgdXNlZCB0byBmaWxsIHRoZSBgdGFyZ2V0UmFuZ2VgLiBJZiBgYmVmb3JlQXV0b2ZpbGxgIHdhcyB1c2VkXG4gKiBhbmQgcmV0dXJuZWQgYFtbXV1gLCB0aGlzIHdpbGwgYmUgdGhlIHNhbWUgb2JqZWN0IHRoYXQgd2FzIHJldHVybmVkIGZyb20gYGJlZm9yZUF1dG9maWxsYC5cbiAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBzb3VyY2VSYW5nZSBUaGUgcmFuZ2UgdmFsdWVzIHdpbGwgYmUgZmlsbGVkIGZyb20uXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gdGFyZ2V0UmFuZ2UgVGhlIHJhbmdlIG5ldyB2YWx1ZXMgd2lsbCBiZSBmaWxsZWQgaW50by5cbiAqIEByZXR1cm5zIHtib29sZWFufCp9XG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZUF1dG9maWxsKGZpbGxEYXRhLCBzb3VyY2VSYW5nZSwgdGFyZ2V0UmFuZ2UpIHtcbiAgY29uc3Qge1xuICAgIHJvdzogc291cmNlVG9wU3RhcnRSb3csXG4gICAgY29sOiBzb3VyY2VUb3BTdGFydENvbHVtblxuICB9ID0gc291cmNlUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgY29uc3Qge1xuICAgIHJvdzogc291cmNlQm90dG9tRW5kUm93LFxuICAgIGNvbDogc291cmNlQm90dG9tRW5kQ29sdW1uXG4gIH0gPSBzb3VyY2VSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgY29uc3Qge1xuICAgIHJvdzogdGFyZ2V0VG9wU3RhcnRSb3csXG4gICAgY29sOiB0YXJnZXRUb3BTdGFydENvbHVtblxuICB9ID0gdGFyZ2V0UmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgY29uc3Qge1xuICAgIHJvdzogdGFyZ2V0Qm90dG9tRW5kUm93LFxuICAgIGNvbDogdGFyZ2V0Qm90dG9tRW5kQ29sdW1uXG4gIH0gPSB0YXJnZXRSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgY29uc3QgZW5naW5lU291cmNlUmFuZ2UgPSB7XG4gICAgc3RhcnQ6IHtcbiAgICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoc291cmNlVG9wU3RhcnRSb3cpLFxuICAgICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChzb3VyY2VUb3BTdGFydENvbHVtbiksXG4gICAgICBzaGVldDogdGhpcy5zaGVldElkXG4gICAgfSxcbiAgICBlbmQ6IHtcbiAgICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoc291cmNlQm90dG9tRW5kUm93KSxcbiAgICAgIGNvbDogdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoc291cmNlQm90dG9tRW5kQ29sdW1uKSxcbiAgICAgIHNoZWV0OiB0aGlzLnNoZWV0SWRcbiAgICB9XG4gIH07XG4gIGNvbnN0IGVuZ2luZVRhcmdldFJhbmdlID0ge1xuICAgIHN0YXJ0OiB7XG4gICAgICByb3c6IHRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHRhcmdldFRvcFN0YXJ0Um93KSxcbiAgICAgIGNvbDogdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodGFyZ2V0VG9wU3RhcnRDb2x1bW4pLFxuICAgICAgc2hlZXQ6IHRoaXMuc2hlZXRJZFxuICAgIH0sXG4gICAgZW5kOiB7XG4gICAgICByb3c6IHRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHRhcmdldEJvdHRvbUVuZFJvdyksXG4gICAgICBjb2w6IHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHRhcmdldEJvdHRvbUVuZENvbHVtbiksXG4gICAgICBzaGVldDogdGhpcy5zaGVldElkXG4gICAgfVxuICB9O1xuXG4gIC8vIEJsb2NrcyB0aGUgYXV0b2ZpbGwgb3BlcmF0aW9uIGlmIEh5cGVyRm9ybXVsYSBzYXlzIHRoYXQgYXQgbGVhc3Qgb25lIG9mXG4gIC8vIHRoZSB1bmRlcmx5aW5nIGNlbGwncyBjb250ZW50cyBjYW5ub3QgYmUgc2V0LlxuICBpZiAodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoZW5naW5lVGFyZ2V0UmFuZ2UpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBmaWxsUmFuZ2VEYXRhID0gdGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShlbmdpbmVTb3VyY2VSYW5nZSwgZW5naW5lVGFyZ2V0UmFuZ2UpO1xuICBjb25zdCB7XG4gICAgcm93OiBzb3VyY2VTdGFydFJvdyxcbiAgICBjb2w6IHNvdXJjZVN0YXJ0Q29sdW1uXG4gIH0gPSBlbmdpbmVTb3VyY2VSYW5nZS5zdGFydDtcbiAgY29uc3Qge1xuICAgIHJvdzogc291cmNlRW5kUm93LFxuICAgIGNvbDogc291cmNlRW5kQ29sdW1uXG4gIH0gPSBlbmdpbmVTb3VyY2VSYW5nZS5lbmQ7XG4gIGNvbnN0IHBvcHVsYXRpb25Sb3dMZW5ndGggPSBzb3VyY2VFbmRSb3cgLSBzb3VyY2VTdGFydFJvdyArIDE7XG4gIGNvbnN0IHBvcHVsYXRpb25Db2x1bW5MZW5ndGggPSBzb3VyY2VFbmRDb2x1bW4gLSBzb3VyY2VTdGFydENvbHVtbiArIDE7XG4gIGZvciAobGV0IHBvcHVsYXRlZFJvd0luZGV4ID0gMDsgcG9wdWxhdGVkUm93SW5kZXggPCBmaWxsUmFuZ2VEYXRhLmxlbmd0aDsgcG9wdWxhdGVkUm93SW5kZXggKz0gMSkge1xuICAgIGZvciAobGV0IHBvcHVsYXRlZENvbHVtbkluZGV4ID0gMDsgcG9wdWxhdGVkQ29sdW1uSW5kZXggPCBmaWxsUmFuZ2VEYXRhW3BvcHVsYXRlZFJvd0luZGV4XS5sZW5ndGg7IHBvcHVsYXRlZENvbHVtbkluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IHBvcHVsYXRlZFZhbHVlID0gZmlsbFJhbmdlRGF0YVtwb3B1bGF0ZWRSb3dJbmRleF1bcG9wdWxhdGVkQ29sdW1uSW5kZXhdO1xuICAgICAgY29uc3Qgc291cmNlUm93ID0gcG9wdWxhdGVkUm93SW5kZXggJSBwb3B1bGF0aW9uUm93TGVuZ3RoO1xuICAgICAgY29uc3Qgc291cmNlQ29sdW1uID0gcG9wdWxhdGVkQ29sdW1uSW5kZXggJSBwb3B1bGF0aW9uQ29sdW1uTGVuZ3RoO1xuICAgICAgY29uc3Qgc291cmNlQ2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShzb3VyY2VSb3csIHNvdXJjZUNvbHVtbik7XG4gICAgICBpZiAoKDAsIF91dGlscy5pc0RhdGUpKHBvcHVsYXRlZFZhbHVlLCBzb3VyY2VDZWxsTWV0YS50eXBlKSkge1xuICAgICAgICBpZiAocG9wdWxhdGVkVmFsdWUuc3RhcnRzV2l0aCgnXFwnJykpIHtcbiAgICAgICAgICAvLyBQb3B1bGF0aW5nIHZhbHVlcyBvbiBIT1Qgc2lkZSB3aXRob3V0IGFwb3N0cm9waGUuXG4gICAgICAgICAgZmlsbFJhbmdlRGF0YVtwb3B1bGF0ZWRSb3dJbmRleF1bcG9wdWxhdGVkQ29sdW1uSW5kZXhdID0gcG9wdWxhdGVkVmFsdWUuc2xpY2UoMSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShzb3VyY2VSb3csIHNvdXJjZUNvbHVtbiwgdGhpcy5zaGVldElkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAvLyBQb3B1bGF0aW5nIGRhdGUgaW4gcHJvcGVyIGZvcm1hdCwgY29taW5nIGZyb20gdGhlIHNvdXJjZSBjZWxsLlxuICAgICAgICAgIGZpbGxSYW5nZURhdGFbcG9wdWxhdGVkUm93SW5kZXhdW3BvcHVsYXRlZENvbHVtbkluZGV4XSA9ICgwLCBfdXRpbHMuZ2V0RGF0ZUluSG90Rm9ybWF0KShwb3B1bGF0ZWRWYWx1ZSwgc291cmNlQ2VsbE1ldGEuZGF0ZUZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbGxSYW5nZURhdGE7XG59XG4vKipcbiAqIGBiZWZvcmVMb2FkRGF0YWAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2VEYXRhIEFycmF5IG9mIGFycmF5cyBvciBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTb3VyY2Ugb2YgdGhlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZUxvYWREYXRhKHNvdXJjZURhdGEsIGluaXRpYWxMb2FkKSB7XG4gIGxldCBzb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6ICcnO1xuICBpZiAoc291cmNlLmluY2x1ZGVzKCgwLCBfc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3QpKFBMVUdJTl9LRVkpKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFRoaXMgZmxhZyBuZWVkcyB0byBiZSBkZWZpbmVkLCBiZWNhdXNlIG5vdCBwYXNzaW5nIGRhdGEgdG8gSE9UIHJlc3VsdHMgaW4gSE9UIGF1dG8tZ2VuZXJhdGluZyBhIGBudWxsYC1maWxsZWRcbiAgLy8gaW5pdGlhbCBkYXRhc2V0LlxuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hvdFdhc0luaXRpYWxpemVkV2l0aEVtcHR5RGF0YSwgdGhpcywgKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kYXRhKSk7XG59XG4vKipcbiAqIENhbGxiYWNrIHRvIGBhZnRlckNlbGxNZXRhUmVzZXRgIGhvb2sgd2hpY2ggaXMgdHJpZ2dlcmVkIGFmdGVyIHNldHRpbmcgY2VsbCBtZXRhLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckNlbGxNZXRhUmVzZXQoKSB7XG4gIGNvbnN0IHNvdXJjZURhdGFBcnJheSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO1xuICBsZXQgdmFsdWVDaGFuZ2VkID0gZmFsc2U7XG4gIHNvdXJjZURhdGFBcnJheS5mb3JFYWNoKChyb3dEYXRhLCByb3dJbmRleCkgPT4ge1xuICAgIHJvd0RhdGEuZm9yRWFjaCgoY2VsbFZhbHVlLCBjb2x1bW5JbmRleCkgPT4ge1xuICAgICAgY29uc3QgY2VsbE1ldGEgPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IGNlbGxNZXRhLmRhdGVGb3JtYXQ7XG4gICAgICBpZiAoKDAsIF91dGlscy5pc0RhdGUpKGNlbGxWYWx1ZSwgY2VsbE1ldGEudHlwZSkpIHtcbiAgICAgICAgdmFsdWVDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgaWYgKCgwLCBfdXRpbHMuaXNEYXRlVmFsaWQpKGNlbGxWYWx1ZSwgZGF0ZUZvcm1hdCkpIHtcbiAgICAgICAgICAvLyBSZXdyaXRpbmcgZGF0ZSBpbiBIT1QgZm9ybWF0IHRvIEhGIGZvcm1hdC5cbiAgICAgICAgICBzb3VyY2VEYXRhQXJyYXlbcm93SW5kZXhdW2NvbHVtbkluZGV4XSA9ICgwLCBfdXRpbHMuZ2V0RGF0ZUluSGZGb3JtYXQpKGNlbGxWYWx1ZSwgZGF0ZUZvcm1hdCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShyb3dJbmRleCwgY29sdW1uSW5kZXgpID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIEVzY2FwaW5nIHZhbHVlIGZyb20gZGF0ZSBwYXJzaW5nIHVzaW5nIFwiJ1wiIHNpZ24gKEhGIGZlYXR1cmUpLlxuICAgICAgICAgIHNvdXJjZURhdGFBcnJheVtyb3dJbmRleF1bY29sdW1uSW5kZXhdID0gYCcke2NlbGxWYWx1ZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBpZiAodmFsdWVDaGFuZ2VkID09PSB0cnVlKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsIHNvdXJjZURhdGFBcnJheSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIHRoaXMsIGZhbHNlKTtcbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJMb2FkRGF0YWAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2VEYXRhIEFycmF5IG9mIGFycmF5cyBvciBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgZGF0YS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5pdGlhbExvYWQgRmxhZyB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgZHVyaW5nIHRoZSBpbml0aWFsaXphdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTb3VyY2Ugb2YgdGhlIGNhbGwuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyTG9hZERhdGEoc291cmNlRGF0YSwgaW5pdGlhbExvYWQpIHtcbiAgbGV0IHNvdXJjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJyc7XG4gIGlmIChzb3VyY2UuaW5jbHVkZXMoKDAsIF9zdHJpbmcudG9VcHBlckNhc2VGaXJzdCkoUExVR0lOX0tFWSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuc2hlZXROYW1lID0gKDAsIF9yZWdpc3Rlci5zZXR1cFNoZWV0KSh0aGlzLmVuZ2luZSwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXS5zaGVldE5hbWUpO1xuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG90V2FzSW5pdGlhbGl6ZWRXaXRoRW1wdHlEYXRhLCB0aGlzKSkge1xuICAgIGNvbnN0IHNvdXJjZURhdGFBcnJheSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpO1xuICAgIGlmICh0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VTaGVldENvbnRlbnQodGhpcy5zaGVldElkLCBzb3VyY2VEYXRhQXJyYXkpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2ludGVybmFsT3BlcmF0aW9uUGVuZGluZywgdGhpcywgdHJ1ZSk7XG4gICAgICBjb25zdCBkZXBlbmRlbnRDZWxscyA9IHRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsIHNvdXJjZURhdGFBcnJheSk7XG4gICAgICB0aGlzLmluZGV4U3luY2VyLnNldHVwU3luY0VuZHBvaW50KHRoaXMuZW5naW5lLCB0aGlzLnNoZWV0SWQpO1xuICAgICAgdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZGVwZW5kZW50Q2VsbHMpO1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIHRoaXMsIGZhbHNlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk7XG4gIH1cbn1cbi8qKlxuICogYG1vZGlmeURhdGFgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZUhvbGRlciBPYmplY3Qgd2hpY2ggY29udGFpbnMgb3JpZ2luYWwgdmFsdWUgd2hpY2ggY2FuIGJlIG1vZGlmaWVkIGJ5IG92ZXJ3cml0aW5nIGAudmFsdWVgXG4gKiAgIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IGlvTW9kZSBTdHJpbmcgd2hpY2ggaW5kaWNhdGVzIGZvciB3aGF0IG9wZXJhdGlvbiBob29rIGlzIGZpcmVkIChgZ2V0YCBvciBgc2V0YCkuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeURhdGEocGh5c2ljYWxSb3csIHZpc3VhbENvbHVtbiwgdmFsdWVIb2xkZXIsIGlvTW9kZSkge1xuICBpZiAoaW9Nb2RlICE9PSAnZ2V0JyB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ludGVybmFsT3BlcmF0aW9uUGVuZGluZywgdGhpcykgfHwgdGhpcy5zaGVldE5hbWUgPT09IG51bGwgfHwgIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2aXN1YWxSb3cgPSB0aGlzLmhvdC50b1Zpc3VhbFJvdyhwaHlzaWNhbFJvdyk7XG4gIGlmICh2aXN1YWxSb3cgPT09IG51bGwgfHwgdmlzdWFsQ29sdW1uID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gYGNvbHVtbmAgaXMgaGVyZSBhcyB2aXN1YWwgaW5kZXggYmVjYXVzZSBvZiBpbmNvbnNpc3RlbmNpZXMgcmVsYXRlZCB0byBob29rIGV4ZWN1dGlvbiBpbiBgc3JjL2RhdGFNYXBgLlxuICBjb25zdCBpc0Zvcm11bGFDZWxsVHlwZSA9IHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUodmlzdWFsUm93LCB2aXN1YWxDb2x1bW4pO1xuICBpZiAoIWlzRm9ybXVsYUNlbGxUeXBlKSB7XG4gICAgY29uc3QgY2VsbFR5cGUgPSB0aGlzLmdldENlbGxUeXBlKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgICBpZiAoY2VsbFR5cGUgIT09ICdBUlJBWScpIHtcbiAgICAgIGlmICgoMCwgX3V0aWxzLmlzRXNjYXBlZEZvcm11bGFFeHByZXNzaW9uKSh2YWx1ZUhvbGRlci52YWx1ZSkpIHtcbiAgICAgICAgdmFsdWVIb2xkZXIudmFsdWUgPSAoMCwgX3V0aWxzLnVuZXNjYXBlRm9ybXVsYUV4cHJlc3Npb24pKHZhbHVlSG9sZGVyLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgY29uc3QgYWRkcmVzcyA9IHtcbiAgICByb3c6IHRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbFJvdyksXG4gICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxDb2x1bW4pLFxuICAgIHNoZWV0OiB0aGlzLnNoZWV0SWRcbiAgfTtcbiAgbGV0IGNlbGxWYWx1ZSA9IHRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShhZGRyZXNzKTsgLy8gRGF0ZSBhcyBhbiBpbnRlZ2VyIChFeGNlbCBsaWtlIGRhdGUpLlxuXG4gIC8vIFRPRE86IFdvcmthcm91bmQuIFdlIHVzZSBIT1QncyBgZ2V0Q2VsbHNNZXRhYCBtZXRob2QgaW5zdGVhZCBvZiBIT1QncyBgZ2V0Q2VsbE1ldGFgIG1ldGhvZC4gR2V0dGluZyBjZWxsIG1ldGFcbiAgLy8gdXNpbmcgdGhlIHNlY29uZCBtZXRob2QgbGVhZCB0byBleGVjdXRpb24gb2YgdGhlIGBjZWxsc2AgbWV0aG9kLiBVc2luZyB0aGUgYGdldERhdGFBdENlbGxgICh3aGljaCBtYXkgYmUgdXNlZnVsKVxuICAvLyBpbiBhIGNhbGxiYWNrIHRvIHRoZSBgY2VsbHNgIG1ldGhvZCBsZWFkcyB0byB0cmlnZ2VyaW5nIHRoZSBgbW9kaWZ5RGF0YWAgaG9vay4gVGh1cywgdGhlIGBvbk1vZGlmeURhdGFgIGNhbGxiYWNrXG4gIC8vIGlzIGV4ZWN1dGVkIG9uY2UgYWdhaW4gYW5kIGl0IGNhdXNlIGNyZWF0aW9uIG9mIGFuIGluZmluaXRlIGxvb3AuXG4gIGxldCBjZWxsTWV0YSA9IHRoaXMuaG90LmdldENlbGxzTWV0YSgpLmZpbmQoc2luZ2xlQ2VsbE1ldGEgPT4gc2luZ2xlQ2VsbE1ldGEudmlzdWFsUm93ID09PSB2aXN1YWxSb3cgJiYgc2luZ2xlQ2VsbE1ldGEudmlzdWFsQ29sID09PSB2aXN1YWxDb2x1bW4pO1xuICBpZiAoY2VsbE1ldGEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNlbGxNZXRhID0ge307XG4gIH1cbiAgaWYgKGNlbGxNZXRhLnR5cGUgPT09ICdkYXRlJyAmJiAoMCwgX251bWJlci5pc051bWVyaWMpKGNlbGxWYWx1ZSkpIHtcbiAgICBjZWxsVmFsdWUgPSAoMCwgX3V0aWxzLmdldERhdGVGcm9tRXhjZWxEYXRlKShjZWxsVmFsdWUsIGNlbGxNZXRhLmRhdGVGb3JtYXQpO1xuICB9XG5cbiAgLy8gSWYgYGNlbGxWYWx1ZWAgaXMgYW4gb2JqZWN0IGl0IGlzIGV4cGVjdGVkIHRvIGJlIGFuIGVycm9yXG4gIGNvbnN0IHZhbHVlID0gdHlwZW9mIGNlbGxWYWx1ZSA9PT0gJ29iamVjdCcgJiYgY2VsbFZhbHVlICE9PSBudWxsID8gY2VsbFZhbHVlLnZhbHVlIDogY2VsbFZhbHVlO1xuICB2YWx1ZUhvbGRlci52YWx1ZSA9IHZhbHVlO1xufVxuLyoqXG4gKiBgbW9kaWZ5U291cmNlRGF0YWAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gY29sdW1uT3JQcm9wIFBoeXNpY2FsIGNvbHVtbiBpbmRleCBvciBwcm9wLlxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlSG9sZGVyIE9iamVjdCB3aGljaCBjb250YWlucyBvcmlnaW5hbCB2YWx1ZSB3aGljaCBjYW4gYmUgbW9kaWZpZWQgYnkgb3ZlcndyaXRpbmcgYC52YWx1ZWBcbiAqICAgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW9Nb2RlIFN0cmluZyB3aGljaCBpbmRpY2F0ZXMgZm9yIHdoYXQgb3BlcmF0aW9uIGhvb2sgaXMgZmlyZWQgKGBnZXRgIG9yIGBzZXRgKS5cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5U291cmNlRGF0YShyb3csIGNvbHVtbk9yUHJvcCwgdmFsdWVIb2xkZXIsIGlvTW9kZSkge1xuICBpZiAoaW9Nb2RlICE9PSAnZ2V0JyB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ludGVybmFsT3BlcmF0aW9uUGVuZGluZywgdGhpcykgfHwgdGhpcy5zaGVldE5hbWUgPT09IG51bGwgfHwgIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB2aXN1YWxSb3cgPSB0aGlzLmhvdC50b1Zpc3VhbFJvdyhyb3cpO1xuICBjb25zdCB2aXN1YWxDb2x1bW4gPSB0aGlzLmhvdC5wcm9wVG9Db2woY29sdW1uT3JQcm9wKTtcbiAgaWYgKHZpc3VhbFJvdyA9PT0gbnVsbCB8fCB2aXN1YWxDb2x1bW4gPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBgY29sdW1uYCBpcyBoZXJlIGFzIHZpc3VhbCBpbmRleCBiZWNhdXNlIG9mIGluY29uc2lzdGVuY2llcyByZWxhdGVkIHRvIGhvb2sgZXhlY3V0aW9uIGluIGBzcmMvZGF0YU1hcGAuXG4gIGNvbnN0IGlzRm9ybXVsYUNlbGxUeXBlID0gdGhpcy5pc0Zvcm11bGFDZWxsVHlwZSh2aXN1YWxSb3csIHZpc3VhbENvbHVtbik7XG4gIGlmICghaXNGb3JtdWxhQ2VsbFR5cGUpIHtcbiAgICBjb25zdCBjZWxsVHlwZSA9IHRoaXMuZ2V0Q2VsbFR5cGUodmlzdWFsUm93LCB2aXN1YWxDb2x1bW4pO1xuICAgIGlmIChjZWxsVHlwZSAhPT0gJ0FSUkFZJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBjb25zdCBkaW1lbnNpb25zID0gdGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtcblxuICAvLyBEb24ndCBhY3R1YWxseSBjaGFuZ2UgdGhlIHNvdXJjZSBkYXRhIGlmIEh5cGVyRm9ybXVsYSBpcyBub3RcbiAgLy8gaW5pdGlhbGl6ZWQgeWV0LiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdGhlIGBhZnRlckxvYWREYXRhYCBob29rIHRvXG4gIC8vIGxvYWQgdGhlIGV4aXN0aW5nIHNvdXJjZSBkYXRhIHdpdGggYEhhbmRzb250YWJsZSNnZXRTb3VyY2VEYXRhQXJyYXlgXG4gIC8vIHByb3Blcmx5LlxuICBpZiAoZGltZW5zaW9ucy53aWR0aCA9PT0gMCAmJiBkaW1lbnNpb25zLmhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhZGRyZXNzID0ge1xuICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodmlzdWFsUm93KSxcbiAgICBjb2w6IHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbENvbHVtbiksXG4gICAgc2hlZXQ6IHRoaXMuc2hlZXRJZFxuICB9O1xuICB2YWx1ZUhvbGRlci52YWx1ZSA9IHRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKGFkZHJlc3MpO1xufVxuLyoqXG4gKiBgb25BZnRlclNldERhdGFBdENlbGxgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheVtdfSBjaGFuZ2VzIEFuIGFycmF5IG9mIGNoYW5nZXMgaW4gZm9ybWF0IFtbcm93LCBwcm9wLCBvbGRWYWx1ZSwgdmFsdWVdLCAuLi5dLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNde0BsaW5rIGh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL2phdmFzY3JpcHQtZGF0YS1ncmlkL2V2ZW50cy1hbmQtaG9va3MvI2hhbmRzb250YWJsZS1ob29rc30pLlxuICovXG5mdW5jdGlvbiBfb25BZnRlclNldERhdGFBdENlbGwoY2hhbmdlcywgc291cmNlKSB7XG4gIGlmIChpc0Jsb2NrZWRTb3VyY2Uoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBvdXRPZkJvdW5kc0NoYW5nZXMgPSBbXTtcbiAgY29uc3QgY2hhbmdlZENlbGxzID0gW107XG4gIGNvbnN0IGRlcGVuZGVudENlbGxzID0gdGhpcy5lbmdpbmUuYmF0Y2goKCkgPT4ge1xuICAgIGNoYW5nZXMuZm9yRWFjaChfcmVmNCA9PiB7XG4gICAgICBsZXQgW3Zpc3VhbFJvdywgcHJvcCwsIG5ld1ZhbHVlXSA9IF9yZWY0O1xuICAgICAgY29uc3QgdmlzdWFsQ29sdW1uID0gdGhpcy5ob3QucHJvcFRvQ29sKHByb3ApO1xuICAgICAgY29uc3QgcGh5c2ljYWxSb3cgPSB0aGlzLmhvdC50b1BoeXNpY2FsUm93KHZpc3VhbFJvdyk7XG4gICAgICBjb25zdCBwaHlzaWNhbENvbHVtbiA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odmlzdWFsQ29sdW1uKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgICAgIHJvdzogdGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodmlzdWFsUm93KSxcbiAgICAgICAgY29sOiB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxDb2x1bW4pLFxuICAgICAgICBzaGVldDogdGhpcy5zaGVldElkXG4gICAgICB9O1xuICAgICAgaWYgKHBoeXNpY2FsUm93ICE9PSBudWxsICYmIHBoeXNpY2FsQ29sdW1uICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUodmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dE9mQm91bmRzQ2hhbmdlcy5wdXNoKFt2aXN1YWxSb3csIHZpc3VhbENvbHVtbiwgbmV3VmFsdWVdKTtcbiAgICAgIH1cbiAgICAgIGNoYW5nZWRDZWxscy5wdXNoKHtcbiAgICAgICAgYWRkcmVzc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBpZiAob3V0T2ZCb3VuZHNDaGFuZ2VzLmxlbmd0aCkge1xuICAgIC8vIFdvcmthcm91bmQgZm9yIHJvd3MvY29sdW1ucyBiZWluZyBjcmVhdGVkIHR3byB0aW1lcyAoYnkgSE9UIGFuZCB0aGUgZW5naW5lKS5cbiAgICAvLyAodW5mb3J0dW5hdGVseSwgdGhpcyByZXF1aXJlcyBhbiBleHRyYSByZS1yZW5kZXIpXG4gICAgdGhpcy5ob3QuYWRkSG9va09uY2UoJ2FmdGVyQ2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb3V0T2ZCb3VuZHNEZXBlbmRlbnRDZWxscyA9IHRoaXMuZW5naW5lLmJhdGNoKCgpID0+IHtcbiAgICAgICAgb3V0T2ZCb3VuZHNDaGFuZ2VzLmZvckVhY2goX3JlZjUgPT4ge1xuICAgICAgICAgIGxldCBbcm93LCBjb2x1bW4sIG5ld1ZhbHVlXSA9IF9yZWY1O1xuICAgICAgICAgIHRoaXMuc3luY0NoYW5nZVdpdGhFbmdpbmUocm93LCBjb2x1bW4sIG5ld1ZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKG91dE9mQm91bmRzRGVwZW5kZW50Q2VsbHMsIHRydWUpO1xuICAgIH0pO1xuICB9XG4gIHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGRlcGVuZGVudENlbGxzKTtcbiAgdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGRlcGVuZGVudENlbGxzLCBjaGFuZ2VkQ2VsbHMpO1xufVxuLyoqXG4gKiBgb25BZnRlclNldFNvdXJjZURhdGFBdENlbGxgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheVtdfSBjaGFuZ2VzIEFuIGFycmF5IG9mIGNoYW5nZXMgaW4gZm9ybWF0IFtbcm93LCBjb2x1bW4sIG9sZFZhbHVlLCB2YWx1ZV0sIC4uLl0uXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc117QGxpbmsgaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvamF2YXNjcmlwdC1kYXRhLWdyaWQvZXZlbnRzLWFuZC1ob29rcy8jaGFuZHNvbnRhYmxlLWhvb2tzfSkuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbChjaGFuZ2VzLCBzb3VyY2UpIHtcbiAgaWYgKGlzQmxvY2tlZFNvdXJjZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGRlcGVuZGVudENlbGxzID0gW107XG4gIGNvbnN0IGNoYW5nZWRDZWxscyA9IFtdO1xuICBjaGFuZ2VzLmZvckVhY2goX3JlZjYgPT4ge1xuICAgIGxldCBbdmlzdWFsUm93LCBwcm9wLCwgbmV3VmFsdWVdID0gX3JlZjY7XG4gICAgY29uc3QgdmlzdWFsQ29sdW1uID0gdGhpcy5ob3QucHJvcFRvQ29sKHByb3ApO1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNOdW1lcmljKSh2aXN1YWxDb2x1bW4pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgICByb3c6IHRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbFJvdyksXG4gICAgICBjb2w6IHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbENvbHVtbiksXG4gICAgICBzaGVldDogdGhpcy5zaGVldElkXG4gICAgfTtcbiAgICBpZiAoIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGFkZHJlc3MpKSB7XG4gICAgICAoMCwgX2NvbnNvbGUud2FybikoYE5vdCBwb3NzaWJsZSB0byBzZXQgc291cmNlIGNlbGwgZGF0YSBhdCAke0pTT04uc3RyaW5naWZ5KGFkZHJlc3MpfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaGFuZ2VkQ2VsbHMucHVzaCh7XG4gICAgICBhZGRyZXNzXG4gICAgfSk7XG4gICAgZGVwZW5kZW50Q2VsbHMucHVzaCguLi50aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoYWRkcmVzcywgbmV3VmFsdWUpKTtcbiAgfSk7XG4gIHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGRlcGVuZGVudENlbGxzKTtcbiAgdGhpcy52YWxpZGF0ZURlcGVuZGVudENlbGxzKGRlcGVuZGVudENlbGxzLCBjaGFuZ2VkQ2VsbHMpO1xufVxuLyoqXG4gKiBgYmVmb3JlQ3JlYXRlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxSb3cgUmVwcmVzZW50cyB0aGUgdmlzdWFsIGluZGV4IG9mIGZpcnN0IG5ld2x5IGNyZWF0ZWQgcm93IGluIHRoZSBkYXRhIHNvdXJjZSBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiB0aGUgZGF0YSBzb3VyY2UgYXJyYXkuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVDcmVhdGVSb3codmlzdWFsUm93LCBhbW91bnQpIHtcbiAgbGV0IGhmUm93SW5kZXggPSB0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxSb3cpO1xuICBpZiAodmlzdWFsUm93ID49IHRoaXMuaG90LmNvdW50Um93cygpKSB7XG4gICAgaGZSb3dJbmRleCA9IHZpc3VhbFJvdzsgLy8gUm93IGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcy5cbiAgfVxuICBpZiAodGhpcy5zaGVldElkID09PSBudWxsIHx8ICF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkgfHwgIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsIFtoZlJvd0luZGV4LCBhbW91bnRdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBgYmVmb3JlQ3JlYXRlQ29sYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gUmVwcmVzZW50cyB0aGUgdmlzdWFsIGluZGV4IG9mIGZpcnN0IG5ld2x5IGNyZWF0ZWQgY29sdW1uIGluIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgY29sdW1ucyBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7Knxib29sZWFufSBJZiBmYWxzZSBpcyByZXR1cm5lZCB0aGUgYWN0aW9uIGlzIGNhbmNlbGVkLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVDcmVhdGVDb2wodmlzdWFsQ29sdW1uLCBhbW91bnQpIHtcbiAgbGV0IGhmQ29sdW1uSW5kZXggPSB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxDb2x1bW4pO1xuICBpZiAodmlzdWFsQ29sdW1uID49IHRoaXMuaG90LmNvdW50Q29scygpKSB7XG4gICAgaGZDb2x1bW5JbmRleCA9IHZpc3VhbENvbHVtbjsgLy8gQ29sdW1uIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcy5cbiAgfVxuICBpZiAodGhpcy5zaGVldElkID09PSBudWxsIHx8ICF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkgfHwgIXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsIFtoZkNvbHVtbkluZGV4LCBhbW91bnRdKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBgYmVmb3JlUmVtb3ZlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIGluZGV4IG9mIHN0YXJ0ZXIgcm93LlxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbW91bnQgb2Ygcm93cyB0byBiZSByZW1vdmVkLlxuICogQHBhcmFtIHtudW1iZXJbXX0gcGh5c2ljYWxSb3dzIEFuIGFycmF5IG9mIHBoeXNpY2FsIHJvd3MgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEByZXR1cm5zIHsqfGJvb2xlYW59IElmIGZhbHNlIGlzIHJldHVybmVkIHRoZSBhY3Rpb24gaXMgY2FuY2VsZWQuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZVJlbW92ZVJvdyhyb3csIGFtb3VudCwgcGh5c2ljYWxSb3dzKSB7XG4gIGNvbnN0IGhmUm93cyA9IHRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKHBoeXNpY2FsUm93cyk7XG4gIGNvbnN0IHBvc3NpYmxlID0gaGZSb3dzLmV2ZXJ5KGhmUm93ID0+IHtcbiAgICByZXR1cm4gdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCwgW2hmUm93LCAxXSk7XG4gIH0pO1xuICByZXR1cm4gcG9zc2libGUgPT09IGZhbHNlID8gZmFsc2UgOiB1bmRlZmluZWQ7XG59XG4vKipcbiAqIGBiZWZvcmVSZW1vdmVDb2xgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBWaXN1YWwgaW5kZXggb2Ygc3RhcnRlciBjb2x1bW4uXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFtb3VudCBvZiBjb2x1bW5zIHRvIGJlIHJlbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcltdfSBwaHlzaWNhbENvbHVtbnMgQW4gYXJyYXkgb2YgcGh5c2ljYWwgY29sdW1ucyByZW1vdmVkIGZyb20gdGhlIGRhdGEgc291cmNlLlxuICogQHJldHVybnMgeyp8Ym9vbGVhbn0gSWYgZmFsc2UgaXMgcmV0dXJuZWQgdGhlIGFjdGlvbiBpcyBjYW5jZWxlZC5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlUmVtb3ZlQ29sKGNvbCwgYW1vdW50LCBwaHlzaWNhbENvbHVtbnMpIHtcbiAgY29uc3QgaGZDb2x1bW5zID0gdGhpcy5jb2x1bW5BeGlzU3luY2VyLnNldFJlbW92ZWRIZkluZGV4ZXMocGh5c2ljYWxDb2x1bW5zKTtcbiAgY29uc3QgcG9zc2libGUgPSBoZkNvbHVtbnMuZXZlcnkoaGZDb2x1bW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLCBbaGZDb2x1bW4sIDFdKTtcbiAgfSk7XG4gIHJldHVybiBwb3NzaWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHVuZGVmaW5lZDtcbn1cbi8qKlxuICogYGFmdGVyQ3JlYXRlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxSb3cgUmVwcmVzZW50cyB0aGUgdmlzdWFsIGluZGV4IG9mIGZpcnN0IG5ld2x5IGNyZWF0ZWQgcm93IGluIHRoZSBkYXRhIHNvdXJjZSBhcnJheS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgcm93cyBpbiB0aGUgZGF0YSBzb3VyY2UgYXJyYXkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc117QGxpbmsgaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvamF2YXNjcmlwdC1kYXRhLWdyaWQvZXZlbnRzLWFuZC1ob29rcy8jaGFuZHNvbnRhYmxlLWhvb2tzfSkuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ3JlYXRlUm93KHZpc3VhbFJvdywgYW1vdW50LCBzb3VyY2UpIHtcbiAgaWYgKGlzQmxvY2tlZFNvdXJjZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmVuZ2luZS5hZGRSb3dzKHRoaXMuc2hlZXRJZCwgW3RoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbFJvdyksIGFtb3VudF0pO1xuICB0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhjaGFuZ2VzKTtcbn1cbi8qKlxuICogYGFmdGVyQ3JlYXRlQ29sYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gUmVwcmVzZW50cyB0aGUgdmlzdWFsIGluZGV4IG9mIGZpcnN0IG5ld2x5IGNyZWF0ZWQgY29sdW1uIGluIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIG5ld2x5IGNyZWF0ZWQgY29sdW1ucyBpbiB0aGUgZGF0YSBzb3VyY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgKFtsaXN0IG9mIGFsbCBhdmFpbGFibGUgc291cmNlc117QGxpbmsgaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvamF2YXNjcmlwdC1kYXRhLWdyaWQvZXZlbnRzLWFuZC1ob29rcy8jaGFuZHNvbnRhYmxlLWhvb2tzfSkuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ3JlYXRlQ29sKHZpc3VhbENvbHVtbiwgYW1vdW50LCBzb3VyY2UpIHtcbiAgaWYgKGlzQmxvY2tlZFNvdXJjZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCwgW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbENvbHVtbiksIGFtb3VudF0pO1xuICB0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhjaGFuZ2VzKTtcbn1cbi8qKlxuICogYGFmdGVyUmVtb3ZlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIGluZGV4IG9mIHN0YXJ0ZXIgcm93LlxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2YgcmVtb3ZlZCByb3dzLlxuICogQHBhcmFtIHtudW1iZXJbXX0gcGh5c2ljYWxSb3dzIEFuIGFycmF5IG9mIHBoeXNpY2FsIHJvd3MgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhIHNvdXJjZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbc291cmNlXSBTdHJpbmcgdGhhdCBpZGVudGlmaWVzIHNvdXJjZSBvZiBob29rIGNhbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoW2xpc3Qgb2YgYWxsIGF2YWlsYWJsZSBzb3VyY2VzXXtAbGluayBodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy9qYXZhc2NyaXB0LWRhdGEtZ3JpZC9ldmVudHMtYW5kLWhvb2tzLyNoYW5kc29udGFibGUtaG9va3N9KS5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJSZW1vdmVSb3cocm93LCBhbW91bnQsIHBoeXNpY2FsUm93cywgc291cmNlKSB7XG4gIGlmIChpc0Jsb2NrZWRTb3VyY2Uoc291cmNlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkZXNjZW5kaW5nSGZSb3dzID0gdGhpcy5yb3dBeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KChhLCBiKSA9PiBiIC0gYSk7IC8vIHNvcnQgbnVtZXJpYyB2YWx1ZXMgZGVzY2VuZGluZ1xuXG4gIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmVuZ2luZS5iYXRjaCgoKSA9PiB7XG4gICAgZGVzY2VuZGluZ0hmUm93cy5mb3JFYWNoKGhmUm93ID0+IHtcbiAgICAgIHRoaXMuZW5naW5lLnJlbW92ZVJvd3ModGhpcy5zaGVldElkLCBbaGZSb3csIDFdKTtcbiAgICB9KTtcbiAgfSk7XG4gIHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGNoYW5nZXMpO1xufVxuLyoqXG4gKiBgYWZ0ZXJSZW1vdmVDb2xgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBWaXN1YWwgaW5kZXggb2Ygc3RhcnRlciBjb2x1bW4uXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiByZW1vdmVkIGNvbHVtbnMuXG4gKiBAcGFyYW0ge251bWJlcltdfSBwaHlzaWNhbENvbHVtbnMgQW4gYXJyYXkgb2YgcGh5c2ljYWwgY29sdW1ucyByZW1vdmVkIGZyb20gdGhlIGRhdGEgc291cmNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFN0cmluZyB0aGF0IGlkZW50aWZpZXMgc291cmNlIG9mIGhvb2sgY2FsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgIChbbGlzdCBvZiBhbGwgYXZhaWxhYmxlIHNvdXJjZXNde0BsaW5rIGh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL2phdmFzY3JpcHQtZGF0YS1ncmlkL2V2ZW50cy1hbmQtaG9va3MvI2hhbmRzb250YWJsZS1ob29rc30pLlxuICovXG5mdW5jdGlvbiBfb25BZnRlclJlbW92ZUNvbChjb2wsIGFtb3VudCwgcGh5c2ljYWxDb2x1bW5zLCBzb3VyY2UpIHtcbiAgaWYgKGlzQmxvY2tlZFNvdXJjZShzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGRlc2NlbmRpbmdIZkNvbHVtbnMgPSB0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKGEsIGIpID0+IGIgLSBhKTsgLy8gc29ydCBudW1lcmljIHZhbHVlcyBkZXNjZW5kaW5nXG5cbiAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZW5naW5lLmJhdGNoKCgpID0+IHtcbiAgICBkZXNjZW5kaW5nSGZDb2x1bW5zLmZvckVhY2goaGZDb2x1bW4gPT4ge1xuICAgICAgdGhpcy5lbmdpbmUucmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsIFtoZkNvbHVtbiwgMV0pO1xuICAgIH0pO1xuICB9KTtcbiAgdGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoY2hhbmdlcyk7XG59XG4vKipcbiAqIGBhZnRlckRldGFjaENoaWxkYCBob29rIGNhbGxiYWNrLlxuICogVXNlZCB0byBzeW5jIHRoZSBkYXRhIG9mIHRoZSByb3dzIGRldGFjaGVkIGluIHRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gd2l0aCB0aGUgZW5naW5lJ3MgZGF0YXNldC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyZW50IEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcmVudCBmcm9tIHdoaWNoIHRoZSBlbGVtZW50IHdhcyBkZXRhY2hlZC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IFRoZSBkZXRhY2hlZCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsRWxlbWVudFJvd0luZGV4IFRoZSBmaW5hbCByb3cgaW5kZXggb2YgdGhlIGRldGFjaGVkIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyRGV0YWNoQ2hpbGQocGFyZW50LCBlbGVtZW50LCBmaW5hbEVsZW1lbnRSb3dJbmRleCkge1xuICB2YXIgX2VsZW1lbnQkX19jaGlsZHJlbjtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIHRoaXMsIHRydWUpO1xuICBjb25zdCByb3dzRGF0YSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShmaW5hbEVsZW1lbnRSb3dJbmRleCwgMCwgZmluYWxFbGVtZW50Um93SW5kZXggKyAoKChfZWxlbWVudCRfX2NoaWxkcmVuID0gZWxlbWVudC5fX2NoaWxkcmVuKSA9PT0gbnVsbCB8fCBfZWxlbWVudCRfX2NoaWxkcmVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZWxlbWVudCRfX2NoaWxkcmVuLmxlbmd0aCkgfHwgMCksIHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbnRlcm5hbE9wZXJhdGlvblBlbmRpbmcsIHRoaXMsIGZhbHNlKTtcbiAgcm93c0RhdGEuZm9yRWFjaCgocm93LCByZWxhdGl2ZVJvd0luZGV4KSA9PiB7XG4gICAgcm93LmZvckVhY2goKHZhbHVlLCBjb2xJbmRleCkgPT4ge1xuICAgICAgdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtcbiAgICAgICAgY29sOiBjb2xJbmRleCxcbiAgICAgICAgcm93OiBmaW5hbEVsZW1lbnRSb3dJbmRleCArIHJlbGF0aXZlUm93SW5kZXgsXG4gICAgICAgIHNoZWV0OiB0aGlzLnNoZWV0SWRcbiAgICAgIH0sIFtbdmFsdWVdXSk7XG4gICAgfSk7XG4gIH0pO1xufVxuLyoqXG4gKiBDYWxsZWQgd2hlbiBhIHZhbHVlIGlzIHVwZGF0ZWQgaW4gdGhlIGVuZ2luZS5cbiAqXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZVxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBvZiBhcHBsaWVkIGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkVuZ2luZVZhbHVlc1VwZGF0ZWQoY2hhbmdlcykge1xuICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZScsIGNoYW5nZXMpO1xufVxuLyoqXG4gKiBDYWxsZWQgd2hlbiBhIG5hbWVkIGV4cHJlc3Npb24gaXMgYWRkZWQgdG8gdGhlIGVuZ2luZSBpbnN0YW5jZS5cbiAqXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVkRXhwcmVzc2lvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFkZGVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VzIFRoZSB2YWx1ZXMgYW5kIGxvY2F0aW9uIG9mIGFwcGxpZWQgY2hhbmdlcy5cbiAqL1xuZnVuY3Rpb24gX29uRW5naW5lTmFtZWRFeHByZXNzaW9uc0FkZGVkKG5hbWVkRXhwcmVzc2lvbk5hbWUsIGNoYW5nZXMpIHtcbiAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQnLCBuYW1lZEV4cHJlc3Npb25OYW1lLCBjaGFuZ2VzKTtcbn1cbi8qKlxuICogQ2FsbGVkIHdoZW4gYSBuYW1lZCBleHByZXNzaW9uIGlzIHJlbW92ZWQgZnJvbSB0aGUgZW5naW5lIGluc3RhbmNlLlxuICpcbiAqIEBmaXJlcyBIb29rcyNhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lZEV4cHJlc3Npb25OYW1lIFRoZSBuYW1lIG9mIHRoZSByZW1vdmVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge0FycmF5fSBjaGFuZ2VzIFRoZSB2YWx1ZXMgYW5kIGxvY2F0aW9uIG9mIGFwcGxpZWQgY2hhbmdlcy5cbiAqL1xuZnVuY3Rpb24gX29uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQobmFtZWRFeHByZXNzaW9uTmFtZSwgY2hhbmdlcykge1xuICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkJywgbmFtZWRFeHByZXNzaW9uTmFtZSwgY2hhbmdlcyk7XG59XG4vKipcbiAqIENhbGxlZCB3aGVuIGEgbmV3IHNoZWV0IGlzIGFkZGVkIHRvIHRoZSBlbmdpbmUgaW5zdGFuY2UuXG4gKlxuICogQGZpcmVzIEhvb2tzI2FmdGVyU2hlZXRBZGRlZFxuICogQHBhcmFtIHtzdHJpbmd9IGFkZGVkU2hlZXREaXNwbGF5TmFtZSBUaGUgbmFtZSBvZiB0aGUgYWRkZWQgc2hlZXQuXG4gKi9cbmZ1bmN0aW9uIF9vbkVuZ2luZVNoZWV0QWRkZWQoYWRkZWRTaGVldERpc3BsYXlOYW1lKSB7XG4gIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclNoZWV0QWRkZWQnLCBhZGRlZFNoZWV0RGlzcGxheU5hbWUpO1xufVxuLyoqXG4gKiBDYWxsZWQgd2hlbiBhIHNoZWV0IGluIHRoZSBlbmdpbmUgaW5zdGFuY2UgaXMgcmVuYW1lZC5cbiAqXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJTaGVldFJlbmFtZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvbGREaXNwbGF5TmFtZSBUaGUgb2xkIG5hbWUgb2YgdGhlIHNoZWV0LlxuICogQHBhcmFtIHtzdHJpbmd9IG5ld0Rpc3BsYXlOYW1lIFRoZSBuZXcgbmFtZSBvZiB0aGUgc2hlZXQuXG4gKi9cbmZ1bmN0aW9uIF9vbkVuZ2luZVNoZWV0UmVuYW1lZChvbGREaXNwbGF5TmFtZSwgbmV3RGlzcGxheU5hbWUpIHtcbiAgdGhpcy5zaGVldE5hbWUgPSBuZXdEaXNwbGF5TmFtZTtcbiAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyU2hlZXRSZW5hbWVkJywgb2xkRGlzcGxheU5hbWUsIG5ld0Rpc3BsYXlOYW1lKTtcbn1cbi8qKlxuICogQ2FsbGVkIHdoZW4gYSBzaGVldCBpcyByZW1vdmVkIGZyb20gdGhlIGVuZ2luZSBpbnN0YW5jZS5cbiAqXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJTaGVldFJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZW1vdmVkU2hlZXREaXNwbGF5TmFtZSBUaGUgcmVtb3ZlZCBzaGVldCBuYW1lLlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgdmFsdWVzIGFuZCBsb2NhdGlvbiBvZiBhcHBsaWVkIGNoYW5nZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkVuZ2luZVNoZWV0UmVtb3ZlZChyZW1vdmVkU2hlZXREaXNwbGF5TmFtZSwgY2hhbmdlcykge1xuICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJTaGVldFJlbW92ZWQnLCByZW1vdmVkU2hlZXREaXNwbGF5TmFtZSwgY2hhbmdlcyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Zvcm11bGFzID0gcmVxdWlyZShcIi4vZm9ybXVsYXNcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfZm9ybXVsYXMuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2Zvcm11bGFzLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuRm9ybXVsYXMgPSBfZm9ybXVsYXMuRm9ybXVsYXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9zdHJpbmdcIik7XG52YXIgX21vdmVzID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbW92ZXNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIEluZGV4U3luY2VyXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBJbmRleGVzIHN5bmNocm9uaXplciByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGxvZ2ljIGZvciBwYXJ0aWN1bGFyIGF4aXMuIEl0IHJlc3BlY3RzIGFuIGlkZWEgdG8gcmVwcmVzZW50IHRyaW1tZWRcbiAqIGVsZW1lbnRzIGluIEhGJ3MgZW5naW5lIHRvIHBlcmZvcm0gZm9ybXVsYXMgY2FsY3VsYXRpb25zIG9uIHRoZW0uIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kIGZvciB0cmFuc2xhdGlvbiBmcm9tIHZpc3VhbFxuICogcm93L2NvbHVtbiBpbmRleGVzIHRvIEhGJ3Mgcm93L2NvbHVtbiBpbmRleGVzLlxuICovXG52YXIgX2F4aXMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaW5kZXhNYXBwZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaW5kZXhTeW5jZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaW5kZXhlc1NlcXVlbmNlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX21vdmVkSW5kZXhlcyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9maW5hbEluZGV4ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3JlbW92ZWRJbmRleGVzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBBeGlzU3luY2VyIHtcbiAgY29uc3RydWN0b3IoYXhpcywgaW5kZXhNYXBwZXIsIGluZGV4U3luY2VyKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGF4aXMgZm9yIHdoaWNoIHRoZSBhY3Rpb25zIGFyZSBwZXJmb3JtZWQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHsncm93J3wnY29sdW1uJ31cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfYXhpcywgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gaW5kZXggbWFwcGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7SW5kZXhNYXBwZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2luZGV4TWFwcGVyLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBzeW5jaHJvbml6ZXIgZm9yIGJvdGggYXhpcyAoaXMgc3RvcmluZyBzb21lIG1vcmUgZ2VuZXJhbCBpbmZvcm1hdGlvbikuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtJbmRleFN5bmNlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW5kZXhTeW5jZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogU2VxdWVuY2Ugb2YgcGh5c2ljYWwgaW5kZXhlcyBzdG9yZWQgZm9yIHdhdGNoaW5nIGNoYW5nZXMgYW5kIGNhbGN1bGF0aW5nIHNvbWUgdHJhbnNmb3JtYXRpb25zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXk8bnVtYmVyPn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW5kZXhlc1NlcXVlbmNlLCBbXSk7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBtb3ZlZCBIRiBpbmRleGVzLCBzdG9yZWQgYmVmb3JlIHBlcmZvcm1pbmcgbW92ZSBvbiBIT1QgdG8gY2FsY3VsYXRlIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBvbiBIRidzIGVuZ2luZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0FycmF5PG51bWJlcj59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX21vdmVkSW5kZXhlcywgW10pO1xuICAgIC8qKlxuICAgICAqIEZpbmFsIEhGJ3MgcGxhY2Ugd2hlcmUgdG8gbW92ZSBpbmRleGVzLCBzdG9yZWQgYmVmb3JlIHBlcmZvcm1pbmcgbW92ZSBvbiBIT1QgdG8gY2FsY3VsYXRlIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBvbiBIRidzIGVuZ2luZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bWJlcnx1bmRlZmluZWR9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2ZpbmFsSW5kZXgsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiByZW1vdmVkIEhGIGluZGV4ZXMsIHN0b3JlZCBiZWZvcmUgcGVyZm9ybWluZyByZW1vdmFsIG9uIEhPVCB0byBjYWxjdWxhdGUgdHJhbnNmb3JtYXRpb24gbmVlZGVkIG9uIEhGJ3MgZW5naW5lLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXk8bnVtYmVyPn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcmVtb3ZlZEluZGV4ZXMsIFtdKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2F4aXMsIHRoaXMsIGF4aXMpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaW5kZXhNYXBwZXIsIHRoaXMsIGluZGV4TWFwcGVyKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2luZGV4U3luY2VyLCB0aGlzLCBpbmRleFN5bmNlcik7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyByZW1vdmVkIEhGIGluZGV4ZXMgKGl0IHNob3VsZCBiZSBkb25lIHJpZ2h0IGJlZm9yZSBwZXJmb3JtaW5nIG1vdmUgb24gSE9UKS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgcGh5c2ljYWwgaW5kZXhlcy5cbiAgICogQHJldHVybnMge0FycmF5PG51bWJlcj59IExpc3Qgb2YgcmVtb3ZlZCB2aXN1YWwgaW5kZXhlcy5cbiAgICovXG4gIHNldFJlbW92ZWRIZkluZGV4ZXMocmVtb3ZlZEluZGV4ZXMpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3JlbW92ZWRJbmRleGVzLCB0aGlzLCByZW1vdmVkSW5kZXhlcy5tYXAocGh5c2ljYWxJbmRleCA9PiB7XG4gICAgICBjb25zdCB2aXN1YWxJbmRleCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhNYXBwZXIsIHRoaXMpLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHBoeXNpY2FsSW5kZXgpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh2aXN1YWxJbmRleCk7XG4gICAgfSkpO1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3JlbW92ZWRJbmRleGVzLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHJlbW92ZWQgSEYgaW5kZXhlcyAocmlnaHQgYmVmb3JlIHBlcmZvcm1pbmcgcmVtb3ZhbCBvbiBIT1QpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gTGlzdCBvZiByZW1vdmVkIEhGIGluZGV4ZXMuXG4gICAqL1xuICBnZXRSZW1vdmVkSGZJbmRleGVzKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3JlbW92ZWRJbmRleGVzLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvcnJlc3BvbmRpbmcgSHlwZXJGb3JtdWxhIGluZGV4IGZvciBwYXJ0aWN1bGFyIHZpc3VhbCBpbmRleC4gSXQncyByZXNwZWN0aW5nIHRoZSBpZGVhIHRoYXQgSEYncyBlbmdpbmVcbiAgICogaXMgZmVkIGFsc28gd2l0aCB0cmltbWVkIGluZGV4ZXMgKGJ1c2luZXNzIHJlcXVpcmVtZW50cyBmb3IgZm9ybXVsYSByZXN1bHQgY2FsY3VsYXRpb24gYWxzbyBmb3IgdHJpbW1lZCBlbGVtZW50cykuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxJbmRleCBWaXN1YWwgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHZpc3VhbEluZGV4KSB7XG4gICAgY29uc3QgaW5kZXhlc1NlcXVlbmNlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbmRleE1hcHBlciwgdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7XG4gICAgY29uc3Qgbm90VHJpbW1lZEluZGV4ZXMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4TWFwcGVyLCB0aGlzKS5nZXROb3RUcmltbWVkSW5kZXhlcygpO1xuICAgIHJldHVybiBpbmRleGVzU2VxdWVuY2UuaW5kZXhPZihub3RUcmltbWVkSW5kZXhlc1t2aXN1YWxJbmRleF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplcyBtb3ZlcyBkb25lIG9uIEhPVCB0byBIRiBlbmdpbmUgKGJhc2VkIG9uIHByZXZpb3VzbHkgY2FsY3VsYXRlZCBwb3NpdGlvbnMpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5PHtmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJ9Pn0gbW92ZXMgQ2FsY3VsYXRlZCBIRidzIG1vdmUgcG9zaXRpb25zLlxuICAgKi9cbiAgc3luY01vdmVzKG1vdmVzKSB7XG4gICAgY29uc3QgTlVNQkVSX09GX01PVkVEX0lOREVYRVMgPSAxO1xuICAgIGNvbnN0IFNZTkNfTU9WRV9NRVRIT0RfTkFNRSA9IGBtb3ZlJHsoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2F4aXMsIHRoaXMpKX1zYDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4U3luY2VyLCB0aGlzKS5nZXRFbmdpbmUoKS5iYXRjaCgoKSA9PiB7XG4gICAgICBtb3Zlcy5mb3JFYWNoKG1vdmUgPT4ge1xuICAgICAgICBjb25zdCBtb3ZlVG9UaGVTYW1lUG9zaXRpb24gPSBtb3ZlLmZyb20gIT09IG1vdmUudG87XG4gICAgICAgIC8vIE1vdmluZyBmcm9tIGxlZnQgdG8gcmlnaHQgKG9yIHRvcCB0byBib3R0b20pIHRvIGEgbGluZSAoZHJvcCBpbmRleCkgcmlnaHQgYWZ0ZXIgYWxyZWFkeSBtb3ZlZCBlbGVtZW50LlxuICAgICAgICBjb25zdCBhbm90aGVyTW92ZVdpdGhvdXRFZmZlY3QgPSBtb3ZlLmZyb20gKyAxICE9PSBtb3ZlLnRvO1xuICAgICAgICBpZiAobW92ZVRvVGhlU2FtZVBvc2l0aW9uICYmIGFub3RoZXJNb3ZlV2l0aG91dEVmZmVjdCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhTeW5jZXIsIHRoaXMpLmdldEVuZ2luZSgpW1NZTkNfTU9WRV9NRVRIT0RfTkFNRV0oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbmRleFN5bmNlciwgdGhpcykuZ2V0U2hlZXRJZCgpLCBtb3ZlLmZyb20sIE5VTUJFUl9PRl9NT1ZFRF9JTkRFWEVTLCBtb3ZlLnRvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHBlcmZvcm1lZCBIT1QgbW92ZXMgZm9yIHB1cnBvc2Ugb2YgY2FsY3VsYXRpbmcgd2hlcmUgdG8gbW92ZSBIRiBlbGVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBtb3ZlZFZpc3VhbEluZGV4ZXMgU2VxdWVuY2Ugb2YgbW92ZWQgdmlzdWFsIGluZGV4ZXMgZm9yIGNlcnRhaW4gYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEZpbmFsSW5kZXggRmluYWwgdmlzdWFsIHBsYWNlIHdoZXJlIHRvIG1vdmUgSE9UIGluZGV4ZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbW92ZVBvc3NpYmxlIEluZGljYXRlcyBpZiBpdCdzIHBvc3NpYmxlIHRvIG1vdmUgSE9UIGluZGV4ZXMgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uXG4gICAqL1xuICBzdG9yZU1vdmVzSW5mb3JtYXRpb24obW92ZWRWaXN1YWxJbmRleGVzLCB2aXN1YWxGaW5hbEluZGV4LCBtb3ZlUG9zc2libGUpIHtcbiAgICBpZiAobW92ZVBvc3NpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX21vdmVkSW5kZXhlcywgdGhpcywgbW92ZWRWaXN1YWxJbmRleGVzLm1hcChpbmRleCA9PiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaW5kZXgpKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9maW5hbEluZGV4LCB0aGlzLCB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodmlzdWFsRmluYWxJbmRleCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0aW5nIHdoZXJlIHRvIG1vdmUgSEYgZWxlbWVudHMgYW5kIHBlcmZvcm1pbmcgYWxyZWFkeSBjYWxjdWxhdGVkIG1vdmVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQgd2FzIHBvc3NpYmxlIHRvIG1vdmUgSE9UIGluZGV4ZXMgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gb3JkZXJDaGFuZ2VkIEluZGljYXRlcyBpZiBvcmRlciBvZiBIT1QgaW5kZXhlcyB3YXMgY2hhbmdlZCBieSBtb3ZlLlxuICAgKi9cbiAgY2FsY3VsYXRlQW5kU3luY01vdmVzKG1vdmVQb3NzaWJsZSwgb3JkZXJDaGFuZ2VkKSB7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhTeW5jZXIsIHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1vdmVQb3NzaWJsZSA9PT0gZmFsc2UgfHwgb3JkZXJDaGFuZ2VkID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjYWxjdWxhdGVkTW92ZXMgPSAoMCwgX21vdmVzLmdldE1vdmVzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX21vdmVkSW5kZXhlcywgdGhpcyksIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZmluYWxJbmRleCwgdGhpcyksIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhNYXBwZXIsIHRoaXMpLmdldE51bWJlck9mSW5kZXhlcygpKTtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbmRleFN5bmNlciwgdGhpcykuZ2V0U2hlZXRJZCgpID09PSBudWxsKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4U3luY2VyLCB0aGlzKS5nZXRQb3N0cG9uZUFjdGlvbigoKSA9PiB0aGlzLnN5bmNNb3ZlcyhjYWxjdWxhdGVkTW92ZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zeW5jTW92ZXMoY2FsY3VsYXRlZE1vdmVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjYWxsYmFjayBmb3IgaG9vayB0cmlnZ2VyZWQgYWZ0ZXIgcGVyZm9ybWluZyBjaGFuZ2Ugb2YgaW5kZXhlcyBvcmRlci5cbiAgICpcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKi9cbiAgZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSB7XG4gICAgY29uc3QgU1lOQ19PUkRFUl9DSEFOR0VfTUVUSE9EX05BTUUgPSBgc2V0JHsoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2F4aXMsIHRoaXMpKX1PcmRlcmA7XG4gICAgcmV0dXJuIHNvdXJjZSA9PiB7XG4gICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbmRleFN5bmNlciwgdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdTZXF1ZW5jZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhNYXBwZXIsIHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO1xuICAgICAgaWYgKHNvdXJjZSA9PT0gJ3VwZGF0ZScgJiYgbmV3U2VxdWVuY2UubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCByZWxhdGl2ZVRyYW5zZm9ybWF0aW9uID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pbmRleGVzU2VxdWVuY2UsIHRoaXMpLm1hcChpbmRleCA9PiBuZXdTZXF1ZW5jZS5pbmRleE9mKGluZGV4KSk7XG4gICAgICAgIGNvbnN0IHNoZWV0RGltZW5zaW9ucyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhTeW5jZXIsIHRoaXMpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4U3luY2VyLCB0aGlzKS5nZXRTaGVldElkKCkpO1xuICAgICAgICBsZXQgc2l6ZUZvckF4aXM7XG4gICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2F4aXMsIHRoaXMpID09PSAncm93Jykge1xuICAgICAgICAgIHNpemVGb3JBeGlzID0gc2hlZXREaW1lbnNpb25zLmhlaWdodDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaXplRm9yQXhpcyA9IHNoZWV0RGltZW5zaW9ucy53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW1iZXJPZlJlb3JnYW5pc2VkSW5kZXhlcyA9IHJlbGF0aXZlVHJhbnNmb3JtYXRpb24ubGVuZ3RoO1xuXG4gICAgICAgIC8vIFNoZWV0IGRpbWVuc2lvbiBjYW4gYmUgY2hhbmdlZCBieSBIRidzIGVuZ2luZSBmb3IgcHVycG9zZSBvZiBjYWxjdWxhdGluZyB2YWx1ZXMuIEl0IGV4dGVuZHMgZGVwZW5kZW5jeVxuICAgICAgICAvLyBncmFwaCB0byBjYWxjdWxhdGUgdmFsdWVzIG91dHNpZGUgb2YgYSBkZWZpbmVkIGRhdGFzZXQuIFRoaXMgcGFydCBvZiBjb2RlIGNvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgcmVzb2x2aW5nXG4gICAgICAgIC8vIGZlYXR1cmUgcmVxdWVzdCBmcm9tIEhGIGlzc3VlIGJvYXJkIChoYW5kc29udGFibGUvaHlwZXJmb3JtdWxhIzExNzkpLlxuICAgICAgICBmb3IgKGxldCBpID0gbnVtYmVyT2ZSZW9yZ2FuaXNlZEluZGV4ZXM7IGkgPCBzaXplRm9yQXhpczsgaSArPSAxKSB7XG4gICAgICAgICAgcmVsYXRpdmVUcmFuc2Zvcm1hdGlvbi5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhTeW5jZXIsIHRoaXMpLmdldEVuZ2luZSgpW1NZTkNfT1JERVJfQ0hBTkdFX01FVEhPRF9OQU1FXShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4U3luY2VyLCB0aGlzKS5nZXRTaGVldElkKCksIHJlbGF0aXZlVHJhbnNmb3JtYXRpb24pO1xuICAgICAgfVxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pbmRleGVzU2VxdWVuY2UsIHRoaXMsIG5ld1NlcXVlbmNlKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIEF4aXNTeW5jZXIuXG4gICAqL1xuICBpbml0KCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaW5kZXhlc1NlcXVlbmNlLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4TWFwcGVyLCB0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEF4aXNTeW5jZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9heGlzU3luY2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9heGlzU3luY2VyXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIEluZGV4U3luY2VyXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBJbmRleGVzIHN5bmNocm9uaXplciByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGxvZ2ljIGZvciBzeW5jaW5nIGFjdGlvbnMgZG9uZSBvbiBpbmRleGVzIGZvciBIT1QgdG8gYWN0aW9ucyBwZXJmb3JtZWRcbiAqIG9uIEhGJ3MuXG4gKlxuICovXG52YXIgX3Jvd0luZGV4U3luY2VyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvbHVtbkluZGV4U3luY2VyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3Bvc3Rwb25lQWN0aW9uID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2lzUGVyZm9ybWluZ1VuZG8gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXNQZXJmb3JtaW5nUmVkbyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9lbmdpbmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc2hlZXRJZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuY2xhc3MgSW5kZXhTeW5jZXIge1xuICBjb25zdHJ1Y3Rvcihyb3dJbmRleE1hcHBlciwgY29sdW1uSW5kZXhNYXBwZXIsIHBvc3Rwb25lQWN0aW9uKSB7XG4gICAgLyoqXG4gICAgICogSW5kZXhlcyBzeW5jaHJvbml6ZXIgZm9yIHRoZSBheGlzIG9mIHRoZSByb3dzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXhpc1N5bmNlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm93SW5kZXhTeW5jZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5kZXhlcyBzeW5jaHJvbml6ZXIgZm9yIHRoZSBheGlzIG9mIHRoZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXhpc1N5bmNlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY29sdW1uSW5kZXhTeW5jZXIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogTWV0aG9kIHdoaWNoIHdpbGwgcG9zdHBvbmUgZXhlY3V0aW9uIG9mIHNvbWUgYWN0aW9uIChuZWVkZWQgd2hlbiBzeW5jaHJvbml6YXRpb24gZW5kcG9pbnQgaXNuJ3Qgc2V0dXAgeWV0KS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0Z1bmN0aW9ufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wb3N0cG9uZUFjdGlvbiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIGluZm9ybWluZyB3aGV0aGVyIHVuZG8gaXMgYWxyZWFkeSBwZXJmb3JtZWQgKHdlIGRvbid0IHBlcmZvcm0gc3luY2hyb25pemF0aW9uIGluIHN1Y2ggY2FzZSkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pc1BlcmZvcm1pbmdVbmRvLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogRmxhZyBpbmZvcm1pbmcgd2hldGhlciByZWRvIGlzIGFscmVhZHkgcGVyZm9ybWVkICh3ZSBkb24ndCBwZXJmb3JtIHN5bmNocm9uaXphdGlvbiBpbiBzdWNoIGNhc2UpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaXNQZXJmb3JtaW5nUmVkbywgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBIRidzIGVuZ2luZSBpbnN0YW5jZSB3aGljaCB3aWxsIGJlIHN5bmNlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0h5cGVyRm9ybXVsYXxudWxsfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9lbmdpbmUsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEh5cGVyRm9ybXVsYSdzIHNoZWV0IG5hbWUuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtzdHJpbmd8bnVsbH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2hlZXRJZCwgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9yb3dJbmRleFN5bmNlciwgdGhpcywgbmV3IF9heGlzU3luY2VyLmRlZmF1bHQoJ3JvdycsIHJvd0luZGV4TWFwcGVyLCB0aGlzKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb2x1bW5JbmRleFN5bmNlciwgdGhpcywgbmV3IF9heGlzU3luY2VyLmRlZmF1bHQoJ2NvbHVtbicsIGNvbHVtbkluZGV4TWFwcGVyLCB0aGlzKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wb3N0cG9uZUFjdGlvbiwgdGhpcywgcG9zdHBvbmVBY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgaW5kZXggc3luY2hyb25pemVyIGZvciBhIHBhcnRpY3VsYXIgYXhpcy5cbiAgICpcbiAgICogQHBhcmFtIHsncm93J3wnY29sdW1uJ30gaW5kZXhUeXBlIFR5cGUgb2YgaW5kZXhlcy5cbiAgICogQHJldHVybnMge0F4aXNTeW5jZXJ9XG4gICAqL1xuICBnZXRGb3JBeGlzKGluZGV4VHlwZSkge1xuICAgIGlmIChpbmRleFR5cGUgPT09ICdyb3cnKSB7XG4gICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dJbmRleFN5bmNlciwgdGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbkluZGV4U3luY2VyLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGZsYWcgaW5mb3JtaW5nIHdoZXRoZXIgYW4gdW5kbyBhY3Rpb24gaXMgYWxyZWFkeSBwZXJmb3JtZWQgKHdlIGRvbid0IGV4ZWN1dGUgc3luY2hyb25pemF0aW9uIGluIHN1Y2ggY2FzZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZmxhZ1ZhbHVlIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSBmbGFnLlxuICAgKi9cbiAgc2V0UGVyZm9ybVVuZG8oZmxhZ1ZhbHVlKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1BlcmZvcm1pbmdVbmRvLCB0aGlzLCBmbGFnVmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgZmxhZyBpbmZvcm1pbmcgd2hldGhlciBhIHJlZG8gYWN0aW9uIGlzIGFscmVhZHkgcGVyZm9ybWVkICh3ZSBkb24ndCBleGVjdXRlIHN5bmNocm9uaXphdGlvbiBpbiBzdWNoIGNhc2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZsYWdWYWx1ZSBCb29sZWFuIHZhbHVlIGZvciB0aGUgZmxhZy5cbiAgICovXG4gIHNldFBlcmZvcm1SZWRvKGZsYWdWYWx1ZSkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaXNQZXJmb3JtaW5nUmVkbywgdGhpcywgZmxhZ1ZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGluZm9ybWF0aW9uIHdoZXRoZXIgcmVkbyBvciB1bmRvIGFjdGlvbiBpcyBhbHJlYWR5IHBlcmZvcm1lZCAod2UgZG9uJ3QgZXhlY3V0ZSBzeW5jaHJvbml6YXRpb24gaW4gc3VjaCBjYXNlKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1BlcmZvcm1pbmdVbmRvUmVkbygpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9pc1BlcmZvcm1pbmdVbmRvLCB0aGlzKSB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzUGVyZm9ybWluZ1JlZG8sIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgSHlwZXJGb3JtdWxhJ3Mgc2hlZXQgaWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cbiAgICovXG4gIGdldFNoZWV0SWQoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2hlZXRJZCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBlbmdpbmUgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGhhbmRsZWQgaW5zdGFuY2Ugb2YgSGFuZHNvbnRhYmxlLlxuICAgKlxuICAgKiBAdHlwZSB7SHlwZXJGb3JtdWxhfG51bGx9XG4gICAqL1xuICBnZXRFbmdpbmUoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZW5naW5lLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG1ldGhvZCB3aGljaCB3aWxsIHBvc3Rwb25lIGV4ZWN1dGlvbiBvZiBzb21lIGFjdGlvbiAobmVlZGVkIHdoZW4gc3luY2hyb25pemF0aW9uIGVuZHBvaW50IGlzbid0IHNldHVwIHlldCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAgICovXG4gIGdldFBvc3Rwb25lQWN0aW9uKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Bvc3Rwb25lQWN0aW9uLCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cHMgYSBzeW5jaHJvbml6YXRpb24gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7SHlwZXJGb3JtdWxhfG51bGx9IGVuZ2luZSBUaGUgSEYncyBlbmdpbmUgaW5zdGFuY2Ugd2hpY2ggd2lsbCBiZSBzeW5jZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bGx9IHNoZWV0SWQgSHlwZXJGb3JtdWxhJ3Mgc2hlZXQgbmFtZS5cbiAgICovXG4gIHNldHVwU3luY0VuZHBvaW50KGVuZ2luZSwgc2hlZXRJZCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZW5naW5lLCB0aGlzLCBlbmdpbmUpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2hlZXRJZCwgdGhpcywgc2hlZXRJZCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dJbmRleFN5bmNlciwgdGhpcykuaW5pdCgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uSW5kZXhTeW5jZXIsIHRoaXMpLmluaXQoKTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gSW5kZXhTeW5jZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldERhdGVGcm9tRXhjZWxEYXRlID0gZ2V0RGF0ZUZyb21FeGNlbERhdGU7XG5leHBvcnRzLmdldERhdGVJbkhmRm9ybWF0ID0gZ2V0RGF0ZUluSGZGb3JtYXQ7XG5leHBvcnRzLmdldERhdGVJbkhvdEZvcm1hdCA9IGdldERhdGVJbkhvdEZvcm1hdDtcbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuZXhwb3J0cy5pc0RhdGVWYWxpZCA9IGlzRGF0ZVZhbGlkO1xuZXhwb3J0cy5pc0VzY2FwZWRGb3JtdWxhRXhwcmVzc2lvbiA9IGlzRXNjYXBlZEZvcm11bGFFeHByZXNzaW9uO1xuZXhwb3J0cy5pc0Zvcm11bGEgPSBpc0Zvcm11bGE7XG5leHBvcnRzLnVuZXNjYXBlRm9ybXVsYUV4cHJlc3Npb24gPSB1bmVzY2FwZUZvcm11bGFFeHByZXNzaW9uO1xudmFyIF9tb21lbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IERFRkFVTFRfREFURV9GT1JNQVRfSFlQRVJGT1JNVUxBID0gJ0REL01NL1lZWVknO1xuXG4vKipcbiAqIENoZWNrcyBpZiBwcm92aWRlZCBmb3JtdWxhIGV4cHJlc3Npb24gaXMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0geyp9IGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0VzY2FwZWRGb3JtdWxhRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gIHJldHVybiB0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgJiYgZXhwcmVzc2lvbi5jaGFyQXQoMCkgPT09ICdcXCcnICYmIGV4cHJlc3Npb24uY2hhckF0KDEpID09PSAnPSc7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgZXNjYXBlZCBmb3JtdWxhIGV4cHJlc3Npb24gaW50byB2YWxpZCBub24tdW5lc2NhcGVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBFeHByZXNzaW9uIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB1bmVzY2FwZUZvcm11bGFFeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGlzRXNjYXBlZEZvcm11bGFFeHByZXNzaW9uKGV4cHJlc3Npb24pID8gZXhwcmVzc2lvbi5zdWJzdHIoMSkgOiBleHByZXNzaW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHN0cmluZyBsb29rcyBsaWtlIGZvcm11bGEgb3Igbm90LiBDb3JyZXNwb25kcyB0byB7QGxpbmsgaHR0cHM6Ly9oeXBlcmZvcm11bGEuaGFuZHNvbnRhYmxlLmNvbS9hcGkvZ2xvYmFscy5odG1sI2lzZm9ybXVsYXxIeXBlckZvcm11bGEncyBpbXBsZW1lbnRhdGlvbn0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIENoZWNrZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGb3JtdWxhKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnN0YXJ0c1dpdGgoJz0nKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgdmFsdWUgaXMgYSBkYXRlIGFjY29yZGluZyB0byBjZWxsIG1ldGEuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBDaGVja2VkIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNlbGxUeXBlIFR5cGUgb2YgYSBjZWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSwgY2VsbFR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgY2VsbFR5cGUgPT09ICdkYXRlJztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgcHJvdmlkZWQgZGF0ZSBpcyBhIHZhbGlkIGRhdGUgYWNjb3JkaW5nIHRvIGNlbGwgZGF0ZSBmb3JtYXQuXG4gKlxuICogQHBhcmFtIHsqfSBkYXRlIENoZWNrZWQgZGF0ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBkYXRlRm9ybWF0IEhhbmRsZWQgZm9ybWF0IGZvciBhIGRhdGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNEYXRlVmFsaWQoZGF0ZSwgZGF0ZUZvcm1hdCkge1xuICByZXR1cm4gKDAsIF9tb21lbnQuZGVmYXVsdCkoZGF0ZSwgZGF0ZUZvcm1hdCwgdHJ1ZSkuaXNWYWxpZCgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgZGF0ZSBmb3JtYXR0ZWQgaW4gSEYncyBkZWZhdWx0IGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZSBEYXRlIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gSGFuZHNvbnRhYmxlIGNlbGwgZGF0ZSBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCBUaGUgZm9ybWF0IHVzZWQgZm9yIHRoZSBkYXRlIHBhc3NlZC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERhdGVJbkhmRm9ybWF0KGRhdGUsIGRhdGVGb3JtYXQpIHtcbiAgcmV0dXJuICgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGUsIGRhdGVGb3JtYXQsIHRydWUpLmZvcm1hdChERUZBVUxUX0RBVEVfRk9STUFUX0hZUEVSRk9STVVMQSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBkYXRlIGZvcm1hdHRlZCBpbiBIRidzIGRlZmF1bHQgZm9ybWF0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlIERhdGUgZm9ybWF0dGVkIGFjY29yZGluZyB0byBIYW5kc29udGFibGUgY2VsbCBkYXRlIGZvcm1hdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRlRm9ybWF0IFRoZSBmb3JtYXQgdXNlZCBmb3IgdGhlIGRhdGUgcGFzc2VkLlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0ZUluSG90Rm9ybWF0KGRhdGUsIGRhdGVGb3JtYXQpIHtcbiAgcmV0dXJuICgwLCBfbW9tZW50LmRlZmF1bHQpKGRhdGUsIERFRkFVTFRfREFURV9GT1JNQVRfSFlQRVJGT1JNVUxBLCB0cnVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgRXhjZWwtbGlrZSBkYXRlcyBpbnRvIHN0cmluZ3MgYW5kIGZvcm1hdHMgdGhlbSBiYXNlZCBvbiB0aGUgaGFuZGxlZCBkYXRlIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtZXJpY0RhdGUgQW4gaW50ZWdlciByZXByZXNlbnRpbmcgbnVtYmVycyBvZiBkYXlzIGZyb20gSmFudWFyeSAxLCAxOTAwLlxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGVGb3JtYXQgVGhlIGZvcm1hdCB1c2VkIGZvciBwYXJzaW5nIGFuIG91dHB1dC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldERhdGVGcm9tRXhjZWxEYXRlKG51bWVyaWNEYXRlLCBkYXRlRm9ybWF0KSB7XG4gIC8vIFRvIHJlcGxpY2F0ZSB0aGUgYmVoYXZpb3IgZnJvbSB0aGUgSHlwZXJGb3JtdWxhLiBVVEMgc3RhcnRzIGZyb20gMzEvMTIvMTg5OSwgd2hpbGUgSEYgZnJvbSAzMC8xMi8xODk5LlxuICBjb25zdCBkYXRlT2Zmc2V0ID0gLTE7XG5cbiAgLy8gQmFzZWQgb24gc29sdXRpb24gZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzY3MTMwMjM1LlxuICBjb25zdCBkYXRlRm9yRm9ybWF0dGluZyA9IG5ldyBEYXRlKERhdGUuVVRDKDAsIDAsIG51bWVyaWNEYXRlICsgZGF0ZU9mZnNldCkpO1xuICByZXR1cm4gKDAsIF9tb21lbnQuZGVmYXVsdCkoZGF0ZUZvckZvcm1hdHRpbmcpLmZvcm1hdChkYXRlRm9ybWF0KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IGhpZGVDb2x1bW5JdGVtO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIEMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vLi4vLi4vaTE4bi9jb25zdGFudHNcIikpO1xuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKGUpIHsgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgV2Vha01hcCkgcmV0dXJuIG51bGw7IHZhciByID0gbmV3IFdlYWtNYXAoKSwgdCA9IG5ldyBXZWFrTWFwKCk7IHJldHVybiAoX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUgPyB0IDogcjsgfSkoZSk7IH1cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKGUsIHIpIHsgaWYgKCFyICYmIGUgJiYgZS5fX2VzTW9kdWxlKSByZXR1cm4gZTsgaWYgKG51bGwgPT09IGUgfHwgXCJvYmplY3RcIiAhPSB0eXBlb2YgZSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIGUpIHJldHVybiB7IGRlZmF1bHQ6IGUgfTsgdmFyIHQgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUocik7IGlmICh0ICYmIHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7IHZhciBuID0geyBfX3Byb3RvX186IG51bGwgfSwgYSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciB1IGluIGUpIGlmIChcImRlZmF1bHRcIiAhPT0gdSAmJiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIHUpKSB7IHZhciBpID0gYSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgdSkgOiBudWxsOyBpICYmIChpLmdldCB8fCBpLnNldCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkobiwgdSwgaSkgOiBuW3VdID0gZVt1XTsgfSByZXR1cm4gbi5kZWZhdWx0ID0gZSwgdCAmJiB0LnNldChlLCBuKSwgbjsgfVxuLyoqXG4gKiBAcGFyYW0ge0hpZGRlbkNvbHVtbnN9IGhpZGRlbkNvbHVtbnNQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGhpZGVDb2x1bW5JdGVtKGhpZGRlbkNvbHVtbnNQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdoaWRkZW5fY29sdW1uc19oaWRlJyxcbiAgICBuYW1lKCkge1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZExhc3QoKTtcbiAgICAgIGxldCBwbHVyYWxGb3JtID0gMDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGlvbikpIHtcbiAgICAgICAgY29uc3QgWywgZnJvbUNvbHVtbiwsIHRvQ29sdW1uXSA9IHNlbGVjdGlvbjtcbiAgICAgICAgaWYgKGZyb21Db2x1bW4gLSB0b0NvbHVtbiAhPT0gMCkge1xuICAgICAgICAgIHBsdXJhbEZvcm0gPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfSElERV9DT0xVTU4sIHBsdXJhbEZvcm0pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvXG4gICAgICB9ID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihmcm9tLmNvbCwgdG8uY29sKSwgMCk7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLmNvbCwgdG8uY29sKTtcbiAgICAgIGNvbnN0IGNvbHVtbnNUb0hpZGUgPSBbXTtcbiAgICAgIGZvciAobGV0IHZpc3VhbENvbHVtbiA9IHN0YXJ0OyB2aXN1YWxDb2x1bW4gPD0gZW5kOyB2aXN1YWxDb2x1bW4gKz0gMSkge1xuICAgICAgICBjb2x1bW5zVG9IaWRlLnB1c2godmlzdWFsQ29sdW1uKTtcbiAgICAgIH1cbiAgICAgIGhpZGRlbkNvbHVtbnNQbHVnaW4uaGlkZUNvbHVtbnMoY29sdW1uc1RvSGlkZSk7XG4gICAgICBjb25zdCBsYXN0SGlkZGVuQ29sdW1uID0gY29sdW1uc1RvSGlkZVtjb2x1bW5zVG9IaWRlLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgY29sdW1uVG9TZWxlY3QgPSB0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsYXN0SGlkZGVuQ29sdW1uLCAxLCB0cnVlKTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGNvbHVtblRvU2VsZWN0KSAmJiBjb2x1bW5Ub1NlbGVjdCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q29sdW1ucyhjb2x1bW5Ub1NlbGVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlc2VsZWN0Q2VsbCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSB8fCB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2hvd0NvbHVtbkl0ZW07XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7SGlkZGVuQ29sdW1uc30gaGlkZGVuQ29sdW1uc1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc2hvd0NvbHVtbkl0ZW0oaGlkZGVuQ29sdW1uc1BsdWdpbikge1xuICBjb25zdCBjb2x1bW5zID0gW107XG4gIHJldHVybiB7XG4gICAga2V5OiAnaGlkZGVuX2NvbHVtbnNfc2hvdycsXG4gICAgbmFtZSgpIHtcbiAgICAgIGNvbnN0IHBsdXJhbEZvcm0gPSBjb2x1bW5zLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19TSE9XX0NPTFVNTiwgcGx1cmFsRm9ybSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIHZhciBfdGhpcyRjb2x1bW5JbmRleE1hcHAsIF90aGlzJGNvbHVtbkluZGV4TWFwcDI7XG4gICAgICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHN0YXJ0VmlzdWFsQ29sdW1uID0gY29sdW1uc1swXTtcbiAgICAgIGxldCBlbmRWaXN1YWxDb2x1bW4gPSBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV07XG5cbiAgICAgIC8vIEFkZCB0byB0aGUgc2VsZWN0aW9uIG9uZSBtb3JlIHZpc3VhbCBjb2x1bW4gb24gdGhlIGxlZnQuXG4gICAgICBzdGFydFZpc3VhbENvbHVtbiA9IChfdGhpcyRjb2x1bW5JbmRleE1hcHAgPSB0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChzdGFydFZpc3VhbENvbHVtbiAtIDEsIC0xKSkgIT09IG51bGwgJiYgX3RoaXMkY29sdW1uSW5kZXhNYXBwICE9PSB2b2lkIDAgPyBfdGhpcyRjb2x1bW5JbmRleE1hcHAgOiAwO1xuICAgICAgLy8gQWRkIHRvIHRoZSBzZWxlY3Rpb24gb25lIG1vcmUgdmlzdWFsIGNvbHVtbiBvbiB0aGUgcmlnaHQuXG4gICAgICBlbmRWaXN1YWxDb2x1bW4gPSAoX3RoaXMkY29sdW1uSW5kZXhNYXBwMiA9IHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGVuZFZpc3VhbENvbHVtbiArIDEsIDEpKSAhPT0gbnVsbCAmJiBfdGhpcyRjb2x1bW5JbmRleE1hcHAyICE9PSB2b2lkIDAgPyBfdGhpcyRjb2x1bW5JbmRleE1hcHAyIDogdGhpcy5jb3VudENvbHMoKSAtIDE7XG4gICAgICBoaWRkZW5Db2x1bW5zUGx1Z2luLnNob3dDb2x1bW5zKGNvbHVtbnMpO1xuXG4gICAgICAvLyBXZSByZW5kZXIgY29sdW1ucyBhdCBmaXJzdC4gSXQgd2FzIG5lZWRlZCBmb3IgZ2V0dGluZyBmaXhlZCBjb2x1bW5zLlxuICAgICAgLy8gUGxlYXNlIHRha2UgYSBsb29rIGF0ICM2ODY0IGZvciBicm9hZGVyIGRlc2NyaXB0aW9uLlxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICAgIGNvbnN0IGFsbENvbHVtbnNTZWxlY3RlZCA9IGVuZFZpc3VhbENvbHVtbiAtIHN0YXJ0VmlzdWFsQ29sdW1uICsgMSA9PT0gdGhpcy5jb3VudENvbHMoKTtcblxuICAgICAgLy8gV2hlbiBhbGwgaGVhZGVycyBuZWVkcyB0byBiZSBzZWxlY3RlZCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBoZWFkZXIgc2VsZWN0aW9uIGlzXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgYnkgY29ybmVyIGNsaWNrLlxuICAgICAgaWYgKCFhbGxDb2x1bW5zU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zKHN0YXJ0VmlzdWFsQ29sdW1uLCBlbmRWaXN1YWxDb2x1bW4pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGhpZGRlbigpIHtcbiAgICAgIGNvbnN0IGhpZGRlblBoeXNpY2FsQ29sdW1ucyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKGhpZGRlbkNvbHVtbnNQbHVnaW4uZ2V0SGlkZGVuQ29sdW1ucygpLCB2aXN1YWxDb2x1bW5JbmRleCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUGh5c2ljYWxDb2x1bW4odmlzdWFsQ29sdW1uSW5kZXgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSB8fCB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSkgfHwgaGlkZGVuUGh5c2ljYWxDb2x1bW5zLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb2x1bW5zLmxlbmd0aCA9IDA7XG4gICAgICBjb25zdCBzZWxlY3RlZFJhbmdlTGFzdCA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGNvbnN0IHZpc3VhbFN0YXJ0Q29sdW1uID0gc2VsZWN0ZWRSYW5nZUxhc3QuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2w7XG4gICAgICBjb25zdCB2aXN1YWxFbmRDb2x1bW4gPSBzZWxlY3RlZFJhbmdlTGFzdC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleE1hcHBlciA9IHRoaXMuY29sdW1uSW5kZXhNYXBwZXI7XG4gICAgICBjb25zdCByZW5kZXJhYmxlU3RhcnRDb2x1bW4gPSBjb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbFN0YXJ0Q29sdW1uKTtcbiAgICAgIGNvbnN0IHJlbmRlcmFibGVFbmRDb2x1bW4gPSBjb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbEVuZENvbHVtbik7XG4gICAgICBjb25zdCBub3RUcmltbWVkQ29sdW1uSW5kZXhlcyA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzKCk7XG4gICAgICBjb25zdCBwaHlzaWNhbENvbHVtbkluZGV4ZXMgPSBbXTtcbiAgICAgIGlmICh2aXN1YWxTdGFydENvbHVtbiAhPT0gdmlzdWFsRW5kQ29sdW1uKSB7XG4gICAgICAgIGNvbnN0IHZpc3VhbENvbHVtbnNJblJhbmdlID0gdmlzdWFsRW5kQ29sdW1uIC0gdmlzdWFsU3RhcnRDb2x1bW4gKyAxO1xuICAgICAgICBjb25zdCByZW5kZXJlZENvbHVtbnNJblJhbmdlID0gcmVuZGVyYWJsZUVuZENvbHVtbiAtIHJlbmRlcmFibGVTdGFydENvbHVtbiArIDE7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBub3QgdHJpbW1lZCBjb2x1bW5zIGlmIHRoZXJlIGFyZSBzb21lIGhpZGRlbiBjb2x1bW5zIGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UuXG4gICAgICAgIGlmICh2aXN1YWxDb2x1bW5zSW5SYW5nZSA+IHJlbmRlcmVkQ29sdW1uc0luUmFuZ2UpIHtcbiAgICAgICAgICBjb25zdCBwaHlzaWNhbEluZGV4ZXNJblJhbmdlID0gbm90VHJpbW1lZENvbHVtbkluZGV4ZXMuc2xpY2UodmlzdWFsU3RhcnRDb2x1bW4sIHZpc3VhbEVuZENvbHVtbiArIDEpO1xuICAgICAgICAgIHBoeXNpY2FsQ29sdW1uSW5kZXhlcy5wdXNoKC4uLnBoeXNpY2FsSW5kZXhlc0luUmFuZ2UuZmlsdGVyKHBoeXNpY2FsSW5kZXggPT4gaGlkZGVuUGh5c2ljYWxDb2x1bW5zLmluY2x1ZGVzKHBoeXNpY2FsSW5kZXgpKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGVkIGNvbHVtbiBpcyB0aGUgZmlyc3QgcmVuZGVyZWQgaW5kZXggYW5kIHRoZXJlIGFyZSBzb21lIHZpc3VhbCBpbmRleGVzIGJlZm9yZSBpdC5cbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyYWJsZVN0YXJ0Q29sdW1uID09PSAwICYmIHJlbmRlcmFibGVTdGFydENvbHVtbiA8IHZpc3VhbFN0YXJ0Q29sdW1uKSB7XG4gICAgICAgIC8vIG5vdCB0cmltbWVkIGluZGV4ZXMgLT4gYXJyYXkgb2YgbWFwcGluZ3MgZnJvbSB2aXN1YWwgKG5hdGl2ZSBhcnJheSdzIGluZGV4KSB0byBwaHlzaWNhbCBpbmRleGVzICh2YWx1ZSkuXG4gICAgICAgIHBoeXNpY2FsQ29sdW1uSW5kZXhlcy5wdXNoKC4uLm5vdFRyaW1tZWRDb2x1bW5JbmRleGVzLnNsaWNlKDAsIHZpc3VhbFN0YXJ0Q29sdW1uKSk7IC8vIHBoeXNpY2FsIGluZGV4ZXNcblxuICAgICAgICAvLyBXaGVuIGFsbCBjb2x1bW5zIGFyZSBoaWRkZW4gYW5kIHRoZSBjb250ZXh0IG1lbnUgaXMgdHJpZ2dlcmVkIHVzaW5nIHRvcC1sZWZ0IGNvcm5lci5cbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyYWJsZVN0YXJ0Q29sdW1uID09PSBudWxsKSB7XG4gICAgICAgIC8vIFNob3cgYWxsIGhpZGRlbiBjb2x1bW5zLlxuICAgICAgICBwaHlzaWNhbENvbHVtbkluZGV4ZXMucHVzaCguLi5ub3RUcmltbWVkQ29sdW1uSW5kZXhlcy5zbGljZSgwLCB0aGlzLmNvdW50Q29scygpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0VmlzdWFsSW5kZXggPSB0aGlzLmNvdW50Q29scygpIC0gMTtcbiAgICAgICAgY29uc3QgbGFzdFJlbmRlcmFibGVJbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGxhc3RWaXN1YWxJbmRleCwgLTEpKTtcblxuICAgICAgICAvLyBIYW5kbGVkIGNvbHVtbiBpcyB0aGUgbGFzdCByZW5kZXJlZCBpbmRleCBhbmQgdGhlcmUgYXJlIHNvbWUgdmlzdWFsIGluZGV4ZXMgYWZ0ZXIgaXQuXG4gICAgICAgIGlmIChyZW5kZXJhYmxlRW5kQ29sdW1uID09PSBsYXN0UmVuZGVyYWJsZUluZGV4ICYmIGxhc3RWaXN1YWxJbmRleCA+IHZpc3VhbEVuZENvbHVtbikge1xuICAgICAgICAgIHBoeXNpY2FsQ29sdW1uSW5kZXhlcy5wdXNoKC4uLm5vdFRyaW1tZWRDb2x1bW5JbmRleGVzLnNsaWNlKHZpc3VhbEVuZENvbHVtbiArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHBoeXNpY2FsQ29sdW1uSW5kZXhlcywgcGh5c2ljYWxDb2x1bW5JbmRleCA9PiB7XG4gICAgICAgIGNvbHVtbnMucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKHBoeXNpY2FsQ29sdW1uSW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbHVtbnMubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfcHJlZGVmaW5lZEl0ZW1zID0gcmVxdWlyZShcIi4uL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtc1wiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2hpZGVDb2x1bW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbS9oaWRlQ29sdW1uXCIpKTtcbnZhciBfc2hvd0NvbHVtbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL3Nob3dDb2x1bW5cIikpO1xudmFyIF90cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNsYXRpb25zXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVIaWRlQ29sdW1ucycpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVySGlkZUNvbHVtbnMnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVVbmhpZGVDb2x1bW5zJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJVbmhpZGVDb2x1bW5zJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2hpZGRlbkNvbHVtbnMnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAzMTA7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIEhpZGRlbkNvbHVtbnNcbiAqIEBjbGFzcyBIaWRkZW5Db2x1bW5zXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYEhpZGRlbkNvbHVtbnNgIHBsdWdpbiBsZXRzIHlvdSBbaGlkZSBzcGVjaWZpZWQgY29sdW1uc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4taGlkaW5nL2NvbHVtbi1oaWRpbmcubWQpLlxuICpcbiAqIFwiSGlkaW5nIGEgY29sdW1uXCIgbWVhbnMgdGhhdCB0aGUgaGlkZGVuIGNvbHVtbiBkb2Vzbid0IGdldCByZW5kZXJlZCBhcyBhIERPTSBlbGVtZW50LlxuICpcbiAqIFRoZSBgSGlkZGVuQ29sdW1uc2AgcGx1Z2luIGRvZXNuJ3QgbW9kaWZ5IHRoZSBzb3VyY2UgZGF0YSxcbiAqIGFuZCBkb2Vzbid0IHBhcnRpY2lwYXRlIGluIGRhdGEgdHJhbnNmb3JtYXRpb25cbiAqICh0aGUgc2hhcGUgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIFtgZ2V0RGF0YSooKWAgbWV0aG9kc10oQC9hcGkvY29yZS5tZCNnZXRkYXRhKSBzdGF5cyBpbnRhY3QpLlxuICpcbiAqIFlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICpcbiAqIHwgT3B0aW9uIHwgUmVxdWlyZWQgfCBUeXBlIHwgRGVmYXVsdCB8IERlc2NyaXB0aW9uIHxcbiAqIHwtLS18LS0tfC0tLXwtLS18LS0tfFxuICogfCBgY29sdW1uc2AgfCBObyB8IEFycmF5IHwgLSB8IFtIaWRlcyBzcGVjaWZpZWQgY29sdW1ucyBieSBkZWZhdWx0XShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1oaWRpbmcvY29sdW1uLWhpZGluZy5tZCNzdGVwLTEtc3BlY2lmeS1jb2x1bW5zLWhpZGRlbi1ieS1kZWZhdWx0KSB8XG4gKiB8IGBpbmRpY2F0b3JzYCB8IE5vIHwgQm9vbGVhbiB8IGBmYWxzZWAgfCBbU2hvd3MgVUkgaW5kaWNhdG9yc10oQC9ndWlkZXMvY29sdW1ucy9jb2x1bW4taGlkaW5nL2NvbHVtbi1oaWRpbmcubWQjc3RlcC0yLXNob3ctdWktaW5kaWNhdG9ycykgfFxuICogfCBgY29weVBhc3RlRW5hYmxlZGAgfCBObyB8IEJvb2xlYW4gfCBgdHJ1ZWAgfCBbU2V0cyB1cCBjb3B5L3Bhc3RlIGJlaGF2aW9yXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1oaWRpbmcvY29sdW1uLWhpZGluZy5tZCNzdGVwLTQtc2V0LXVwLWNvcHktYW5kLXBhc3RlLWJlaGF2aW9yKSB8XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICogICBkYXRhOiBnZXREYXRhKCksXG4gKiAgIGhpZGRlbkNvbHVtbnM6IHtcbiAqICAgICBjb3B5UGFzdGVFbmFibGVkOiB0cnVlLFxuICogICAgIGluZGljYXRvcnM6IHRydWUsXG4gKiAgICAgY29sdW1uczogWzEsIDIsIDVdXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIC8vIGFjY2VzcyB0aGUgYEhpZGRlbkNvbHVtbnNgIHBsdWdpbidzIGluc3RhbmNlXG4gKiBjb25zdCBoaWRkZW5Db2x1bW5zUGx1Z2luID0gaG90LmdldFBsdWdpbignaGlkZGVuQ29sdW1ucycpO1xuICpcbiAqIC8vIGhpZGUgYSBzaW5nbGUgY29sdW1uXG4gKiBoaWRkZW5Db2x1bW5zUGx1Z2luLmhpZGVDb2x1bW4oMSk7XG4gKlxuICogLy8gaGlkZSBtdWx0aXBsZSBjb2x1bW5zXG4gKiBoaWRkZW5Db2x1bW5zUGx1Z2luLmhpZGVDb2x1bW4oMSwgMiwgOSk7XG4gKlxuICogLy8gaGlkZSBtdWx0aXBsZSBjb2x1bW5zIGFzIGFuIGFycmF5XG4gKiBoaWRkZW5Db2x1bW5zUGx1Z2luLmhpZGVDb2x1bW5zKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gdW5oaWRlIGEgc2luZ2xlIGNvbHVtblxuICogaGlkZGVuQ29sdW1uc1BsdWdpbi5zaG93Q29sdW1uKDEpO1xuICpcbiAqIC8vIHVuaGlkZSBtdWx0aXBsZSBjb2x1bW5zXG4gKiBoaWRkZW5Db2x1bW5zUGx1Z2luLnNob3dDb2x1bW4oMSwgMiwgOSk7XG4gKlxuICogLy8gdW5oaWRlIG11bHRpcGxlIGNvbHVtbnMgYXMgYW4gYXJyYXlcbiAqIGhpZGRlbkNvbHVtbnNQbHVnaW4uc2hvd0NvbHVtbnMoWzEsIDIsIDldKTtcbiAqXG4gKiAvLyB0byBzZWUgeW91ciBjaGFuZ2VzLCByZS1yZW5kZXIgeW91ciBIYW5kc29udGFibGUgaW5zdGFuY2VcbiAqIGhvdC5yZW5kZXIoKTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIGNvbnN0IGhvdFJlZiA9IHVzZVJlZihudWxsKTtcbiAqXG4gKiAuLi5cbiAqXG4gKiA8SG90VGFibGVcbiAqICAgcmVmPXtob3RSZWZ9XG4gKiAgIGRhdGE9e2dldERhdGEoKX1cbiAqICAgaGlkZGVuQ29sdW1ucz17e1xuICogICAgIGNvcHlQYXN0ZUVuYWJsZWQ6IHRydWUsXG4gKiAgICAgaW5kaWNhdG9yczogdHJ1ZSxcbiAqICAgICBjb2x1bW5zOiBbMSwgMiwgNV1cbiAqICAgfX1cbiAqIC8+XG4gKlxuICogLy8gYWNjZXNzIHRoZSBgSGlkZGVuQ29sdW1uc2AgcGx1Z2luJ3MgaW5zdGFuY2VcbiAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICogY29uc3QgaGlkZGVuQ29sdW1uc1BsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2hpZGRlbkNvbHVtbnMnKTtcbiAqXG4gKiAvLyBoaWRlIGEgc2luZ2xlIGNvbHVtblxuICogaGlkZGVuQ29sdW1uc1BsdWdpbi5oaWRlQ29sdW1uKDEpO1xuICpcbiAqIC8vIGhpZGUgbXVsdGlwbGUgY29sdW1uc1xuICogaGlkZGVuQ29sdW1uc1BsdWdpbi5oaWRlQ29sdW1uKDEsIDIsIDkpO1xuICpcbiAqIC8vIGhpZGUgbXVsdGlwbGUgY29sdW1ucyBhcyBhbiBhcnJheVxuICogaGlkZGVuQ29sdW1uc1BsdWdpbi5oaWRlQ29sdW1ucyhbMSwgMiwgOV0pO1xuICpcbiAqIC8vIHVuaGlkZSBhIHNpbmdsZSBjb2x1bW5cbiAqIGhpZGRlbkNvbHVtbnNQbHVnaW4uc2hvd0NvbHVtbigxKTtcbiAqXG4gKiAvLyB1bmhpZGUgbXVsdGlwbGUgY29sdW1uc1xuICogaGlkZGVuQ29sdW1uc1BsdWdpbi5zaG93Q29sdW1uKDEsIDIsIDkpO1xuICpcbiAqIC8vIHVuaGlkZSBtdWx0aXBsZSBjb2x1bW5zIGFzIGFuIGFycmF5XG4gKiBoaWRkZW5Db2x1bW5zUGx1Z2luLnNob3dDb2x1bW5zKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gdG8gc2VlIHlvdXIgY2hhbmdlcywgcmUtcmVuZGVyIHlvdXIgSGFuZHNvbnRhYmxlIGluc3RhbmNlXG4gKiBob3QucmVuZGVyKCk7XG4gKiBgYGBcbiAqIDo6OlxuICovXG52YXIgX3NldHRpbmdzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2hpZGRlbkNvbHVtbnNNYXAgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfSGlkZGVuQ29sdW1uc19icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgSGlkZGVuQ29sdW1ucyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGFkZGl0aW9uYWwgY29sdW1uIHdpZHRoIGZvciB0aGUgaGlkZGVuIGNvbHVtbiBpbmRpY2F0b3JzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ8dW5kZWZpbmVkfSB3aWR0aCBDb2x1bW4gd2lkdGguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9IaWRkZW5Db2x1bW5zX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgcGx1Z2luIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZXR0aW5ncywge30pO1xuICAgIC8qKlxuICAgICAqIE1hcCBvZiBoaWRkZW4gY29sdW1ucyBieSB0aGUgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7bnVsbHxIaWRpbmdNYXB9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2hpZGRlbkNvbHVtbnNNYXAsIG51bGwpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgSGlkZGVuQ29sdW1ucyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShwbHVnaW5TZXR0aW5ncykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2V0dGluZ3MsIHRoaXMsIHBsdWdpblNldHRpbmdzKTtcbiAgICAgIGlmICgoMCwgX21peGVkLmlzVW5kZWZpbmVkKShwbHVnaW5TZXR0aW5ncy5jb3B5UGFzdGVFbmFibGVkKSkge1xuICAgICAgICBwbHVnaW5TZXR0aW5ncy5jb3B5UGFzdGVFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9oaWRkZW5Db2x1bW5zTWFwLCB0aGlzLCBuZXcgX3RyYW5zbGF0aW9ucy5IaWRpbmdNYXAoKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRkZW5Db2x1bW5zTWFwLCB0aGlzKS5hZGRMb2NhbEhvb2soJ2luaXQnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfSGlkZGVuQ29sdW1uc19icmFuZCwgdGhpcywgX29uTWFwSW5pdCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlbkNvbHVtbnNNYXAsIHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Db2x1bW5zX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyR2V0Q2VsbE1ldGEnLCAocm93LCBjb2wsIGNlbGxQcm9wZXJ0aWVzKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfSGlkZGVuQ29sdW1uc19icmFuZCwgdGhpcywgX29uQWZ0ZXJHZXRDZWxsTWV0YSkuY2FsbCh0aGlzLCByb3csIGNvbCwgY2VsbFByb3BlcnRpZXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ21vZGlmeUNvbFdpZHRoJywgKHdpZHRoLCBjb2wpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Db2x1bW5zX2JyYW5kLCB0aGlzLCBfb25Nb2RpZnlDb2xXaWR0aCkuY2FsbCh0aGlzLCB3aWR0aCwgY29sKSwgMik7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckdldENvbEhlYWRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZGRlbkNvbHVtbnNfYnJhbmQsIF90aGlzLCBfb25BZnRlckdldENvbEhlYWRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb3B5YWJsZVJhbmdlJywgcmFuZ2VzID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Db2x1bW5zX2JyYW5kLCB0aGlzLCBfb25Nb2RpZnlDb3B5YWJsZVJhbmdlKS5jYWxsKHRoaXMsIHJhbmdlcykpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgaGlkZGVuQ29sdW1uc2BdKEAvYXBpL29wdGlvbnMubWQjaGlkZGVuY29sdW1ucylcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NldHRpbmdzLCB0aGlzLCB7fSk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMucmVzZXRDZWxsc01ldGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcHJvdmlkZWQgY29sdW1ucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gY29sdW1ucyBBcnJheSBvZiB2aXN1YWwgY29sdW1uIGluZGV4ZXMuXG4gICAqL1xuICBzaG93Q29sdW1ucyhjb2x1bW5zKSB7XG4gICAgY29uc3QgY3VycmVudEhpZGVDb25maWcgPSB0aGlzLmdldEhpZGRlbkNvbHVtbnMoKTtcbiAgICBjb25zdCBpc1ZhbGlkQ29uZmlnID0gdGhpcy5pc1ZhbGlkQ29uZmlnKGNvbHVtbnMpO1xuICAgIGxldCBkZXN0aW5hdGlvbkhpZGVDb25maWcgPSBjdXJyZW50SGlkZUNvbmZpZztcbiAgICBjb25zdCBoaWRpbmdNYXBWYWx1ZXMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlbkNvbHVtbnNNYXAsIHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCk7XG4gICAgY29uc3QgaXNBbnlDb2x1bW5TaG93ZWQgPSBjb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgaWYgKGlzVmFsaWRDb25maWcgJiYgaXNBbnlDb2x1bW5TaG93ZWQpIHtcbiAgICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1ucyA9IGNvbHVtbnMubWFwKHZpc3VhbENvbHVtbiA9PiB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHZpc3VhbENvbHVtbikpO1xuXG4gICAgICAvLyBQcmVwYXJpbmcgbmV3IHZhbHVlcyBmb3IgaGlkaW5nIG1hcC5cbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShwaHlzaWNhbENvbHVtbnMsIHBoeXNpY2FsQ29sdW1uID0+IHtcbiAgICAgICAgaGlkaW5nTWFwVmFsdWVzW3BoeXNpY2FsQ29sdW1uXSA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFByZXBhcmluZyBuZXcgaGlkaW5nIGNvbmZpZy5cbiAgICAgIGRlc3RpbmF0aW9uSGlkZUNvbmZpZyA9ICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKGhpZGluZ01hcFZhbHVlcywgKGhpZGRlbkluZGV4ZXMsIGlzSGlkZGVuLCBwaHlzaWNhbEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGRlbkluZGV4ZXMucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihwaHlzaWNhbEluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhpZGRlbkluZGV4ZXM7XG4gICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRpbnVlSGlkaW5nID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVVuaGlkZUNvbHVtbnMnLCBjdXJyZW50SGlkZUNvbmZpZywgZGVzdGluYXRpb25IaWRlQ29uZmlnLCBpc1ZhbGlkQ29uZmlnICYmIGlzQW55Q29sdW1uU2hvd2VkKTtcbiAgICBpZiAoY29udGludWVIaWRpbmcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1ZhbGlkQ29uZmlnICYmIGlzQW55Q29sdW1uU2hvd2VkKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlbkNvbHVtbnNNYXAsIHRoaXMpLnNldFZhbHVlcyhoaWRpbmdNYXBWYWx1ZXMpO1xuICAgIH1cblxuICAgIC8vIEBUT0RPIFNob3VsZCBjYWxsIG9uY2UgcGVyIHJlbmRlciBjeWNsZSwgY3VycmVudGx5IGZpcmVkIHNlcGFyYXRlbHkgaW4gZGlmZmVyZW50IHBsdWdpbnNcbiAgICB0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclVuaGlkZUNvbHVtbnMnLCBjdXJyZW50SGlkZUNvbmZpZywgZGVzdGluYXRpb25IaWRlQ29uZmlnLCBpc1ZhbGlkQ29uZmlnICYmIGlzQW55Q29sdW1uU2hvd2VkLCBpc1ZhbGlkQ29uZmlnICYmIGRlc3RpbmF0aW9uSGlkZUNvbmZpZy5sZW5ndGggPCBjdXJyZW50SGlkZUNvbmZpZy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgc2luZ2xlIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKi9cbiAgc2hvd0NvbHVtbigpIHtcbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGNvbHVtbiA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgY29sdW1uW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuICAgIHRoaXMuc2hvd0NvbHVtbnMoY29sdW1uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyB0aGUgY29sdW1ucyBwcm92aWRlZCBpbiB0aGUgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGNvbHVtbnMgQXJyYXkgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzLlxuICAgKi9cbiAgaGlkZUNvbHVtbnMoY29sdW1ucykge1xuICAgIGNvbnN0IGN1cnJlbnRIaWRlQ29uZmlnID0gdGhpcy5nZXRIaWRkZW5Db2x1bW5zKCk7XG4gICAgY29uc3QgaXNDb25maWdWYWxpZCA9IHRoaXMuaXNWYWxpZENvbmZpZyhjb2x1bW5zKTtcbiAgICBsZXQgZGVzdGluYXRpb25IaWRlQ29uZmlnID0gY3VycmVudEhpZGVDb25maWc7XG4gICAgaWYgKGlzQ29uZmlnVmFsaWQpIHtcbiAgICAgIGRlc3RpbmF0aW9uSGlkZUNvbmZpZyA9IEFycmF5LmZyb20obmV3IFNldChjdXJyZW50SGlkZUNvbmZpZy5jb25jYXQoY29sdW1ucykpKTtcbiAgICB9XG4gICAgY29uc3QgY29udGludWVIaWRpbmcgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlSGlkZUNvbHVtbnMnLCBjdXJyZW50SGlkZUNvbmZpZywgZGVzdGluYXRpb25IaWRlQ29uZmlnLCBpc0NvbmZpZ1ZhbGlkKTtcbiAgICBpZiAoY29udGludWVIaWRpbmcgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0NvbmZpZ1ZhbGlkKSB7XG4gICAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShjb2x1bW5zLCB2aXN1YWxDb2x1bW4gPT4ge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGlkZGVuQ29sdW1uc01hcCwgdGhpcykuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odmlzdWFsQ29sdW1uKSwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckhpZGVDb2x1bW5zJywgY3VycmVudEhpZGVDb25maWcsIGRlc3RpbmF0aW9uSGlkZUNvbmZpZywgaXNDb25maWdWYWxpZCwgaXNDb25maWdWYWxpZCAmJiBkZXN0aW5hdGlvbkhpZGVDb25maWcubGVuZ3RoID4gY3VycmVudEhpZGVDb25maWcubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhIHNpbmdsZSBjb2x1bW4uXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIGhpZGVDb2x1bW4oKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBjb2x1bW4gPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgIGNvbHVtbltfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cbiAgICB0aGlzLmhpZGVDb2x1bW5zKGNvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2aXN1YWwgaW5kZXhlcyBvZiBoaWRkZW4gY29sdW1ucy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKi9cbiAgZ2V0SGlkZGVuQ29sdW1ucygpIHtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheU1hcCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRkZW5Db2x1bW5zTWFwLCB0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksIHBoeXNpY2FsQ29sdW1uSW5kZXggPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHBoeXNpY2FsQ29sdW1uSW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgY29sdW1uIGlzIGhpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzSGlkZGVuKGNvbHVtbikge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlbkNvbHVtbnNNYXAsIHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbikpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpZiB0cmltIGNvbmZpZyBpcyB2YWxpZC4gQ2hlY2sgd2hldGhlciBhbGwgb2YgdGhlIHByb3ZpZGVkIGNvbHVtbiBpbmRleGVzIGFyZSB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGhpZGRlbkNvbHVtbnMgTGlzdCBvZiBoaWRkZW4gY29sdW1uIGluZGV4ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNWYWxpZENvbmZpZyhoaWRkZW5Db2x1bW5zKSB7XG4gICAgY29uc3QgbnJPZkNvbHVtbnMgPSB0aGlzLmhvdC5jb3VudENvbHMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoaWRkZW5Db2x1bW5zKSAmJiBoaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBoaWRkZW5Db2x1bW5zLmV2ZXJ5KHZpc3VhbENvbHVtbiA9PiBOdW1iZXIuaXNJbnRlZ2VyKHZpc3VhbENvbHVtbikgJiYgdmlzdWFsQ29sdW1uID49IDAgJiYgdmlzdWFsQ29sdW1uIDwgbnJPZkNvbHVtbnMpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgYWxsIHJlbmRlcmVkIGNlbGxzIG1ldGEuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXNldENlbGxzTWV0YSgpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksIG1ldGEgPT4ge1xuICAgICAgaWYgKG1ldGEpIHtcbiAgICAgICAgbWV0YS5za2lwQ29sdW1uT25QYXN0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NldHRpbmdzLCB0aGlzLCBudWxsKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hpZGRlbkNvbHVtbnNNYXAsIHRoaXMsIG51bGwpO1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5IaWRkZW5Db2x1bW5zID0gSGlkZGVuQ29sdW1ucztcbmZ1bmN0aW9uIF9vbk1vZGlmeUNvbFdpZHRoKHdpZHRoLCBjb2x1bW4pIHtcbiAgLy8gSG9vayBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBvbmx5IGZvciB0aGUgdmlzaWJsZSBjb2x1bW5zLiBDb25kaXRpb25hbCB3aWxsIGJlIGhhbmRsZWQgZm9yIHRoZSBBUElcbiAgLy8gY2FsbHMgb2YgdGhlIGBnZXRDb2xXaWR0aGAgZnVuY3Rpb24gb24gbm90IHZpc2libGUgaW5kZXhlcy5cbiAgaWYgKHRoaXMuaXNIaWRkZW4oY29sdW1uKSkge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NldHRpbmdzLCB0aGlzKS5pbmRpY2F0b3JzICYmICh0aGlzLmlzSGlkZGVuKGNvbHVtbiArIDEpIHx8IHRoaXMuaXNIaWRkZW4oY29sdW1uIC0gMSkpKSB7XG4gICAgLy8gQWRkIGFkZGl0aW9uYWwgc3BhY2UgZm9yIGhpZGRlbiBjb2x1bW4gaW5kaWNhdG9yLlxuICAgIGlmICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInICYmIHRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSkge1xuICAgICAgcmV0dXJuIHdpZHRoICsgMTU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIGNvcHktcmVsYXRlZCBjZWxsIG1ldGEuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIE9iamVjdCBjb250YWluaW5nIHRoZSBjZWxsIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Q2VsbE1ldGEocm93LCBjb2x1bW4sIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NldHRpbmdzLCB0aGlzKS5jb3B5UGFzdGVFbmFibGVkID09PSBmYWxzZSAmJiB0aGlzLmlzSGlkZGVuKGNvbHVtbikpIHtcbiAgICAvLyBDZWxsIHByb3BlcnR5IGhhbmRsZWQgYnkgdGhlIGBBdXRvZmlsbGAgYW5kIHRoZSBgQ29weVBhc3RlYCBwbHVnaW5zLlxuICAgIGNlbGxQcm9wZXJ0aWVzLnNraXBDb2x1bW5PblBhc3RlID0gdHJ1ZTtcbiAgfVxuICBpZiAodGhpcy5pc0hpZGRlbihjb2x1bW4gLSAxKSkge1xuICAgIGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSA9IGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSB8fCAnJztcbiAgICBpZiAoY2VsbFByb3BlcnRpZXMuY2xhc3NOYW1lLmluZGV4T2YoJ2FmdGVySGlkZGVuQ29sdW1uJykgPT09IC0xKSB7XG4gICAgICBjZWxsUHJvcGVydGllcy5jbGFzc05hbWUgKz0gJyBhZnRlckhpZGRlbkNvbHVtbic7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSkge1xuICAgIGNvbnN0IGNsYXNzQXJyID0gY2VsbFByb3BlcnRpZXMuY2xhc3NOYW1lLnNwbGl0KCcgJyk7XG4gICAgaWYgKGNsYXNzQXJyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5BZnRlckhpZGRlbkNvbHVtbiA9IGNsYXNzQXJyLmluZGV4T2YoJ2FmdGVySGlkZGVuQ29sdW1uJyk7XG4gICAgICBpZiAoY29udGFpbkFmdGVySGlkZGVuQ29sdW1uID4gLTEpIHtcbiAgICAgICAgY2xhc3NBcnIuc3BsaWNlKGNvbnRhaW5BZnRlckhpZGRlbkNvbHVtbiwgMSk7XG4gICAgICB9XG4gICAgICBjZWxsUHJvcGVydGllcy5jbGFzc05hbWUgPSBjbGFzc0Fyci5qb2luKCcgJyk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIE1vZGlmaWVzIHRoZSBjb3B5YWJsZSByYW5nZSwgYWNjb3JkaW5nbHkgdG8gdGhlIHByb3ZpZGVkIGNvbmZpZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSByYW5nZXMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBkZWZpbmluZyBjb3B5YWJsZSBjZWxscy5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5Q29weWFibGVSYW5nZShyYW5nZXMpIHtcbiAgLy8gUmFuZ2VzIHNob3VsZG4ndCBiZSBtb2RpZmllZCB3aGVuIGBjb3B5UGFzdGVFbmFibGVkYCBvcHRpb24gaXMgc2V0IHRvIGB0cnVlYCAoYnkgZGVmYXVsdCkuXG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NldHRpbmdzLCB0aGlzKS5jb3B5UGFzdGVFbmFibGVkKSB7XG4gICAgcmV0dXJuIHJhbmdlcztcbiAgfVxuICBjb25zdCBuZXdSYW5nZXMgPSBbXTtcbiAgY29uc3QgcHVzaFJhbmdlID0gKHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wpID0+IHtcbiAgICBuZXdSYW5nZXMucHVzaCh7XG4gICAgICBzdGFydFJvdyxcbiAgICAgIGVuZFJvdyxcbiAgICAgIHN0YXJ0Q29sLFxuICAgICAgZW5kQ29sXG4gICAgfSk7XG4gIH07XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyYW5nZXMsIHJhbmdlID0+IHtcbiAgICBsZXQgaXNIaWRkZW4gPSB0cnVlO1xuICAgIGxldCByYW5nZVN0YXJ0ID0gMDtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHJhbmdlLnN0YXJ0Q29sLCByYW5nZS5lbmRDb2wsIHZpc3VhbENvbHVtbiA9PiB7XG4gICAgICBpZiAodGhpcy5pc0hpZGRlbih2aXN1YWxDb2x1bW4pKSB7XG4gICAgICAgIGlmICghaXNIaWRkZW4pIHtcbiAgICAgICAgICBwdXNoUmFuZ2UocmFuZ2Uuc3RhcnRSb3csIHJhbmdlLmVuZFJvdywgcmFuZ2VTdGFydCwgdmlzdWFsQ29sdW1uIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNIaWRkZW4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgcmFuZ2VTdGFydCA9IHZpc3VhbENvbHVtbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmlzdWFsQ29sdW1uID09PSByYW5nZS5lbmRDb2wpIHtcbiAgICAgICAgICBwdXNoUmFuZ2UocmFuZ2Uuc3RhcnRSb3csIHJhbmdlLmVuZFJvdywgcmFuZ2VTdGFydCwgdmlzdWFsQ29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpc0hpZGRlbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG5ld1Jhbmdlcztcbn1cbi8qKlxuICogQWRkcyB0aGUgbmVlZGVkIGNsYXNzZXMgdG8gdGhlIGhlYWRlcnMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gVEggSGVhZGVyJ3MgVEggZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJHZXRDb2xIZWFkZXIoY29sdW1uLCBUSCkge1xuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2V0dGluZ3MsIHRoaXMpLmluZGljYXRvcnMgfHwgY29sdW1uIDwgMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjbGFzc0xpc3QgPSBbXTtcbiAgaWYgKGNvbHVtbiA+PSAxICYmIHRoaXMuaXNIaWRkZW4oY29sdW1uIC0gMSkpIHtcbiAgICBjbGFzc0xpc3QucHVzaCgnYWZ0ZXJIaWRkZW5Db2x1bW4nKTtcbiAgfVxuICBpZiAoY29sdW1uIDwgdGhpcy5ob3QuY291bnRDb2xzKCkgLSAxICYmIHRoaXMuaXNIaWRkZW4oY29sdW1uICsgMSkpIHtcbiAgICBjbGFzc0xpc3QucHVzaCgnYmVmb3JlSGlkZGVuQ29sdW1uJyk7XG4gIH1cbiAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShUSCwgY2xhc3NMaXN0KTtcbn1cbi8qKlxuICogQWRkIFNob3ctaGlkZSBjb2x1bW5zIHRvIGNvbnRleHQgbWVudS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZS1kZWZpbmVkIENvbnRleHQgTWVudSBpdGVtcy5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5pdGVtcy5wdXNoKHtcbiAgICBuYW1lOiBfcHJlZGVmaW5lZEl0ZW1zLlNFUEFSQVRPUlxuICB9LCAoMCwgX2hpZGVDb2x1bW4uZGVmYXVsdCkodGhpcyksICgwLCBfc2hvd0NvbHVtbi5kZWZhdWx0KSh0aGlzKSk7XG59XG4vKipcbiAqIE9uIG1hcCBpbml0aWFsaXplZCBob29rIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBfb25NYXBJbml0KCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NldHRpbmdzLCB0aGlzKS5jb2x1bW5zKSkge1xuICAgIHRoaXMuaGlkZUNvbHVtbnMoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZXR0aW5ncywgdGhpcykuY29sdW1ucyk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfaGlkZGVuQ29sdW1ucyA9IHJlcXVpcmUoXCIuL2hpZGRlbkNvbHVtbnNcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfaGlkZGVuQ29sdW1ucy5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfaGlkZGVuQ29sdW1ucy5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLkhpZGRlbkNvbHVtbnMgPSBfaGlkZGVuQ29sdW1ucy5IaWRkZW5Db2x1bW5zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gaGlkZVJvd0l0ZW07XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7SGlkZGVuUm93c30gaGlkZGVuUm93c1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaGlkZVJvd0l0ZW0oaGlkZGVuUm93c1BsdWdpbikge1xuICByZXR1cm4ge1xuICAgIGtleTogJ2hpZGRlbl9yb3dzX2hpZGUnLFxuICAgIG5hbWUoKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkTGFzdCgpO1xuICAgICAgbGV0IHBsdXJhbEZvcm0gPSAwO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSkge1xuICAgICAgICBjb25zdCBbZnJvbVJvdywsIHRvUm93XSA9IHNlbGVjdGlvbjtcbiAgICAgICAgaWYgKGZyb21Sb3cgLSB0b1JvdyAhPT0gMCkge1xuICAgICAgICAgIHBsdXJhbEZvcm0gPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1csIHBsdXJhbEZvcm0pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvXG4gICAgICB9ID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihmcm9tLnJvdywgdG8ucm93KSwgMCk7XG4gICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLnJvdywgdG8ucm93KTtcbiAgICAgIGNvbnN0IHJvd3NUb0hpZGUgPSBbXTtcbiAgICAgIGZvciAobGV0IHZpc3VhbFJvdyA9IHN0YXJ0OyB2aXN1YWxSb3cgPD0gZW5kOyB2aXN1YWxSb3cgKz0gMSkge1xuICAgICAgICByb3dzVG9IaWRlLnB1c2godmlzdWFsUm93KTtcbiAgICAgIH1cbiAgICAgIGhpZGRlblJvd3NQbHVnaW4uaGlkZVJvd3Mocm93c1RvSGlkZSk7XG4gICAgICBjb25zdCBsYXN0SGlkZGVuUm93ID0gcm93c1RvSGlkZVtyb3dzVG9IaWRlLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3Qgcm93VG9TZWxlY3QgPSB0aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsYXN0SGlkZGVuUm93LCAxLCB0cnVlKTtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJvd1RvU2VsZWN0KSAmJiByb3dUb1NlbGVjdCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Um93cyhyb3dUb1NlbGVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlc2VsZWN0Q2VsbCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB9LFxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICByZXR1cm4gISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSB8fCB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2hvd1Jvd0l0ZW07XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7SGlkZGVuUm93c30gaGlkZGVuUm93c1BsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc2hvd1Jvd0l0ZW0oaGlkZGVuUm93c1BsdWdpbikge1xuICBjb25zdCByb3dzID0gW107XG4gIHJldHVybiB7XG4gICAga2V5OiAnaGlkZGVuX3Jvd3Nfc2hvdycsXG4gICAgbmFtZSgpIHtcbiAgICAgIGNvbnN0IHBsdXJhbEZvcm0gPSByb3dzLmxlbmd0aCA+IDEgPyAxIDogMDtcbiAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVywgcGx1cmFsRm9ybSk7XG4gICAgfSxcbiAgICBjYWxsYmFjaygpIHtcbiAgICAgIHZhciBfdGhpcyRyb3dJbmRleE1hcHBlciQsIF90aGlzJHJvd0luZGV4TWFwcGVyJDI7XG4gICAgICBpZiAocm93cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHN0YXJ0VmlzdWFsUm93ID0gcm93c1swXTtcbiAgICAgIGxldCBlbmRWaXN1YWxSb3cgPSByb3dzW3Jvd3MubGVuZ3RoIC0gMV07XG5cbiAgICAgIC8vIEFkZCB0byB0aGUgc2VsZWN0aW9uIG9uZSBtb3JlIHZpc3VhbCByb3cgb24gdGhlIHRvcC5cbiAgICAgIHN0YXJ0VmlzdWFsUm93ID0gKF90aGlzJHJvd0luZGV4TWFwcGVyJCA9IHRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHN0YXJ0VmlzdWFsUm93IC0gMSwgLTEpKSAhPT0gbnVsbCAmJiBfdGhpcyRyb3dJbmRleE1hcHBlciQgIT09IHZvaWQgMCA/IF90aGlzJHJvd0luZGV4TWFwcGVyJCA6IDA7XG4gICAgICAvLyBBZGQgdG8gdGhlIHNlbGVjdGlvbiBvbmUgbW9yZSB2aXN1YWwgcm93IG9uIHRoZSBib3R0b20uXG4gICAgICBlbmRWaXN1YWxSb3cgPSAoX3RoaXMkcm93SW5kZXhNYXBwZXIkMiA9IHRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGVuZFZpc3VhbFJvdyArIDEsIDEpKSAhPT0gbnVsbCAmJiBfdGhpcyRyb3dJbmRleE1hcHBlciQyICE9PSB2b2lkIDAgPyBfdGhpcyRyb3dJbmRleE1hcHBlciQyIDogdGhpcy5jb3VudFJvd3MoKSAtIDE7XG4gICAgICBoaWRkZW5Sb3dzUGx1Z2luLnNob3dSb3dzKHJvd3MpO1xuXG4gICAgICAvLyBXZSByZW5kZXIgcm93cyBhdCBmaXJzdC4gSXQgd2FzIG5lZWRlZCBmb3IgZ2V0dGluZyBmaXhlZCByb3dzLlxuICAgICAgLy8gUGxlYXNlIHRha2UgYSBsb29rIGF0ICM2ODY0IGZvciBicm9hZGVyIGRlc2NyaXB0aW9uLlxuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICAgIGNvbnN0IGFsbFJvd3NTZWxlY3RlZCA9IGVuZFZpc3VhbFJvdyAtIHN0YXJ0VmlzdWFsUm93ICsgMSA9PT0gdGhpcy5jb3VudFJvd3MoKTtcblxuICAgICAgLy8gV2hlbiBhbGwgaGVhZGVycyBuZWVkcyB0byBiZSBzZWxlY3RlZCB0aGVuIGRvIG5vdGhpbmcuIFRoZSBoZWFkZXIgc2VsZWN0aW9uIGlzXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgYnkgY29ybmVyIGNsaWNrLlxuICAgICAgaWYgKCFhbGxSb3dzU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3dzKHN0YXJ0VmlzdWFsUm93LCBlbmRWaXN1YWxSb3cpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGhpZGRlbigpIHtcbiAgICAgIGNvbnN0IGhpZGRlblBoeXNpY2FsUm93cyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKGhpZGRlblJvd3NQbHVnaW4uZ2V0SGlkZGVuUm93cygpLCB2aXN1YWxSb3dJbmRleCA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUGh5c2ljYWxSb3codmlzdWFsUm93SW5kZXgpO1xuICAgICAgfSk7XG4gICAgICBpZiAoISh0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSB8fCB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSkgfHwgaGlkZGVuUGh5c2ljYWxSb3dzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByb3dzLmxlbmd0aCA9IDA7XG4gICAgICBjb25zdCBzZWxlY3RlZFJhbmdlTGFzdCA9IHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgIGNvbnN0IHZpc3VhbFN0YXJ0Um93ID0gc2VsZWN0ZWRSYW5nZUxhc3QuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3c7XG4gICAgICBjb25zdCB2aXN1YWxFbmRSb3cgPSBzZWxlY3RlZFJhbmdlTGFzdC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c7XG4gICAgICBjb25zdCByb3dJbmRleE1hcHBlciA9IHRoaXMucm93SW5kZXhNYXBwZXI7XG4gICAgICBjb25zdCByZW5kZXJhYmxlU3RhcnRSb3cgPSByb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbFN0YXJ0Um93KTtcbiAgICAgIGNvbnN0IHJlbmRlcmFibGVFbmRSb3cgPSByb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbEVuZFJvdyk7XG4gICAgICBjb25zdCBub3RUcmltbWVkUm93SW5kZXhlcyA9IHJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzKCk7XG4gICAgICBjb25zdCBwaHlzaWNhbFJvd0luZGV4ZXMgPSBbXTtcbiAgICAgIGlmICh2aXN1YWxTdGFydFJvdyAhPT0gdmlzdWFsRW5kUm93KSB7XG4gICAgICAgIGNvbnN0IHZpc3VhbFJvd3NJblJhbmdlID0gdmlzdWFsRW5kUm93IC0gdmlzdWFsU3RhcnRSb3cgKyAxO1xuICAgICAgICBjb25zdCByZW5kZXJlZFJvd3NJblJhbmdlID0gcmVuZGVyYWJsZUVuZFJvdyAtIHJlbmRlcmFibGVTdGFydFJvdyArIDE7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBub3QgdHJpbW1lZCByb3dzIGlmIHRoZXJlIGFyZSBzb21lIGhpZGRlbiByb3dzIGluIHRoZSBzZWxlY3Rpb24gcmFuZ2UuXG4gICAgICAgIGlmICh2aXN1YWxSb3dzSW5SYW5nZSA+IHJlbmRlcmVkUm93c0luUmFuZ2UpIHtcbiAgICAgICAgICBjb25zdCBwaHlzaWNhbEluZGV4ZXNJblJhbmdlID0gbm90VHJpbW1lZFJvd0luZGV4ZXMuc2xpY2UodmlzdWFsU3RhcnRSb3csIHZpc3VhbEVuZFJvdyArIDEpO1xuICAgICAgICAgIHBoeXNpY2FsUm93SW5kZXhlcy5wdXNoKC4uLnBoeXNpY2FsSW5kZXhlc0luUmFuZ2UuZmlsdGVyKHBoeXNpY2FsSW5kZXggPT4gaGlkZGVuUGh5c2ljYWxSb3dzLmluY2x1ZGVzKHBoeXNpY2FsSW5kZXgpKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGVkIHJvdyBpcyB0aGUgZmlyc3QgcmVuZGVyZWQgaW5kZXggYW5kIHRoZXJlIGFyZSBzb21lIHZpc3VhbCBpbmRleGVzIGJlZm9yZSBpdC5cbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyYWJsZVN0YXJ0Um93ID09PSAwICYmIHJlbmRlcmFibGVTdGFydFJvdyA8IHZpc3VhbFN0YXJ0Um93KSB7XG4gICAgICAgIC8vIG5vdCB0cmltbWVkIGluZGV4ZXMgLT4gYXJyYXkgb2YgbWFwcGluZ3MgZnJvbSB2aXN1YWwgKG5hdGl2ZSBhcnJheSdzIGluZGV4KSB0byBwaHlzaWNhbCBpbmRleGVzICh2YWx1ZSkuXG4gICAgICAgIHBoeXNpY2FsUm93SW5kZXhlcy5wdXNoKC4uLm5vdFRyaW1tZWRSb3dJbmRleGVzLnNsaWNlKDAsIHZpc3VhbFN0YXJ0Um93KSk7IC8vIHBoeXNpY2FsIGluZGV4ZXNcblxuICAgICAgICAvLyBXaGVuIGFsbCByb3dzIGFyZSBoaWRkZW4gYW5kIHRoZSBjb250ZXh0IG1lbnUgaXMgdHJpZ2dlcmVkIHVzaW5nIHRvcC1sZWZ0IGNvcm5lci5cbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyYWJsZVN0YXJ0Um93ID09PSBudWxsKSB7XG4gICAgICAgIC8vIFNob3cgYWxsIGhpZGRlbiByb3dzLlxuICAgICAgICBwaHlzaWNhbFJvd0luZGV4ZXMucHVzaCguLi5ub3RUcmltbWVkUm93SW5kZXhlcy5zbGljZSgwLCB0aGlzLmNvdW50Um93cygpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0VmlzdWFsSW5kZXggPSB0aGlzLmNvdW50Um93cygpIC0gMTtcbiAgICAgICAgY29uc3QgbGFzdFJlbmRlcmFibGVJbmRleCA9IHJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGxhc3RWaXN1YWxJbmRleCwgLTEpKTtcblxuICAgICAgICAvLyBIYW5kbGVkIHJvdyBpcyB0aGUgbGFzdCByZW5kZXJlZCBpbmRleCBhbmQgdGhlcmUgYXJlIHNvbWUgdmlzdWFsIGluZGV4ZXMgYWZ0ZXIgaXQuXG4gICAgICAgIGlmIChyZW5kZXJhYmxlRW5kUm93ID09PSBsYXN0UmVuZGVyYWJsZUluZGV4ICYmIGxhc3RWaXN1YWxJbmRleCA+IHZpc3VhbEVuZFJvdykge1xuICAgICAgICAgIHBoeXNpY2FsUm93SW5kZXhlcy5wdXNoKC4uLm5vdFRyaW1tZWRSb3dJbmRleGVzLnNsaWNlKHZpc3VhbEVuZFJvdyArIDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHBoeXNpY2FsUm93SW5kZXhlcywgcGh5c2ljYWxSb3dJbmRleCA9PiB7XG4gICAgICAgIHJvd3MucHVzaCh0aGlzLnRvVmlzdWFsUm93KHBoeXNpY2FsUm93SW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJvd3MubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbnZhciBfcHJlZGVmaW5lZEl0ZW1zID0gcmVxdWlyZShcIi4uL2NvbnRleHRNZW51L3ByZWRlZmluZWRJdGVtc1wiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2hpZGVSb3cgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbS9oaWRlUm93XCIpKTtcbnZhciBfc2hvd1JvdyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL3Nob3dSb3dcIikpO1xudmFyIF90cmFuc2xhdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNsYXRpb25zXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVIaWRlUm93cycpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVySGlkZVJvd3MnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVVbmhpZGVSb3dzJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJVbmhpZGVSb3dzJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ2hpZGRlblJvd3MnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAzMjA7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIEhpZGRlblJvd3NcbiAqIEBjbGFzcyBIaWRkZW5Sb3dzXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGUgYEhpZGRlblJvd3NgIHBsdWdpbiBsZXRzIHlvdSBbaGlkZSBzcGVjaWZpZWQgcm93c10oQC9ndWlkZXMvcm93cy9yb3ctaGlkaW5nL3Jvdy1oaWRpbmcubWQpLlxuICpcbiAqIFwiSGlkaW5nIGEgcm93XCIgbWVhbnMgdGhhdCB0aGUgaGlkZGVuIHJvdyBkb2Vzbid0IGdldCByZW5kZXJlZCBhcyBhIERPTSBlbGVtZW50LlxuICpcbiAqIFRoZSBgSGlkZGVuUm93c2AgcGx1Z2luIGRvZXNuJ3QgbW9kaWZ5IHRoZSBzb3VyY2UgZGF0YSxcbiAqIGFuZCBkb2Vzbid0IHBhcnRpY2lwYXRlIGluIGRhdGEgdHJhbnNmb3JtYXRpb25cbiAqICh0aGUgc2hhcGUgb2YgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIFtgZ2V0RGF0YSooKWAgbWV0aG9kc10oQC9hcGkvY29yZS5tZCNnZXRkYXRhKSBzdGF5cyBpbnRhY3QpLlxuICpcbiAqIFlvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICpcbiAqIHwgT3B0aW9uIHwgUmVxdWlyZWQgfCBUeXBlIHwgRGVmYXVsdCB8IERlc2NyaXB0aW9uIHxcbiAqIHwtLS18LS0tfC0tLXwtLS18LS0tfFxuICogfCBgcm93c2AgfCBObyB8IEFycmF5IHwgLSB8IFtIaWRlcyBzcGVjaWZpZWQgcm93cyBieSBkZWZhdWx0XShAL2d1aWRlcy9yb3dzL3Jvdy1oaWRpbmcvcm93LWhpZGluZy5tZCNzdGVwLTEtc3BlY2lmeS1yb3dzLWhpZGRlbi1ieS1kZWZhdWx0KSB8XG4gKiB8IGBpbmRpY2F0b3JzYCB8IE5vIHwgQm9vbGVhbiB8IGBmYWxzZWAgfCBbU2hvd3MgVUkgaW5kaWNhdG9yc10oQC9ndWlkZXMvcm93cy9yb3ctaGlkaW5nL3Jvdy1oaWRpbmcubWQjc3RlcC0yLXNob3ctdWktaW5kaWNhdG9ycykgfFxuICogfCBgY29weVBhc3RlRW5hYmxlZGAgfCBObyB8IEJvb2xlYW4gfCBgdHJ1ZWAgfCBbU2V0cyB1cCBjb3B5L3Bhc3RlIGJlaGF2aW9yXShAL2d1aWRlcy9yb3dzL3Jvdy1oaWRpbmcvcm93LWhpZGluZy5tZCNzdGVwLTQtc2V0LXVwLWNvcHktYW5kLXBhc3RlLWJlaGF2aW9yKSB8XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICogICBkYXRhOiBnZXREYXRhKCksXG4gKiAgIGhpZGRlblJvd3M6IHtcbiAqICAgICBjb3B5UGFzdGVFbmFibGVkOiB0cnVlLFxuICogICAgIGluZGljYXRvcnM6IHRydWUsXG4gKiAgICAgcm93czogWzEsIDIsIDVdXG4gKiAgIH1cbiAqIH0pO1xuICpcbiAqIC8vIGFjY2VzcyB0aGUgYEhpZGRlblJvd3NgIHBsdWdpbidzIGluc3RhbmNlXG4gKiBjb25zdCBoaWRkZW5Sb3dzUGx1Z2luID0gaG90LmdldFBsdWdpbignaGlkZGVuUm93cycpO1xuICpcbiAqIC8vIGhpZGUgYSBzaW5nbGUgcm93XG4gKiBoaWRkZW5Sb3dzUGx1Z2luLmhpZGVSb3coMSk7XG4gKlxuICogLy8gaGlkZSBtdWx0aXBsZSByb3dzXG4gKiBoaWRkZW5Sb3dzUGx1Z2luLmhpZGVSb3coMSwgMiwgOSk7XG4gKlxuICogLy8gaGlkZSBtdWx0aXBsZSByb3dzIGFzIGFuIGFycmF5XG4gKiBoaWRkZW5Sb3dzUGx1Z2luLmhpZGVSb3dzKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gdW5oaWRlIGEgc2luZ2xlIHJvd1xuICogaGlkZGVuUm93c1BsdWdpbi5zaG93Um93KDEpO1xuICpcbiAqIC8vIHVuaGlkZSBtdWx0aXBsZSByb3dzXG4gKiBoaWRkZW5Sb3dzUGx1Z2luLnNob3dSb3coMSwgMiwgOSk7XG4gKlxuICogLy8gdW5oaWRlIG11bHRpcGxlIHJvd3MgYXMgYW4gYXJyYXlcbiAqIGhpZGRlblJvd3NQbHVnaW4uc2hvd1Jvd3MoWzEsIDIsIDldKTtcbiAqXG4gKiAvLyB0byBzZWUgeW91ciBjaGFuZ2VzLCByZS1yZW5kZXIgeW91ciBIYW5kc29udGFibGUgaW5zdGFuY2VcbiAqIGhvdC5yZW5kZXIoKTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIGNvbnN0IGhvdFJlZiA9IHVzZVJlZihudWxsKTtcbiAqXG4gKiAuLi5cbiAqXG4gKiA8SG90VGFibGVcbiAqICAgcmVmPXtob3RSZWZ9XG4gKiAgIGRhdGE9e2dldERhdGEoKX1cbiAqICAgaGlkZGVuUm93cz17e1xuICogICAgIGNvcHlQYXN0ZUVuYWJsZWQ6IHRydWUsXG4gKiAgICAgaW5kaWNhdG9yczogdHJ1ZSxcbiAqICAgICByb3dzOiBbMSwgMiwgNV1cbiAqICAgfX1cbiAqIC8+XG4gKlxuICogLy8gYWNjZXNzIHRoZSBgSGlkZGVuUm93c2AgcGx1Z2luJ3MgaW5zdGFuY2VcbiAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICogY29uc3QgaGlkZGVuUm93c1BsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ2hpZGRlblJvd3MnKTtcbiAqXG4gKiAvLyBoaWRlIGEgc2luZ2xlIHJvd1xuICogaGlkZGVuUm93c1BsdWdpbi5oaWRlUm93KDEpO1xuICpcbiAqIC8vIGhpZGUgbXVsdGlwbGUgcm93c1xuICogaGlkZGVuUm93c1BsdWdpbi5oaWRlUm93KDEsIDIsIDkpO1xuICpcbiAqIC8vIGhpZGUgbXVsdGlwbGUgcm93cyBhcyBhbiBhcnJheVxuICogaGlkZGVuUm93c1BsdWdpbi5oaWRlUm93cyhbMSwgMiwgOV0pO1xuICpcbiAqIC8vIHVuaGlkZSBhIHNpbmdsZSByb3dcbiAqIGhpZGRlblJvd3NQbHVnaW4uc2hvd1JvdygxKTtcbiAqXG4gKiAvLyB1bmhpZGUgbXVsdGlwbGUgcm93c1xuICogaGlkZGVuUm93c1BsdWdpbi5zaG93Um93KDEsIDIsIDkpO1xuICpcbiAqIC8vIHVuaGlkZSBtdWx0aXBsZSByb3dzIGFzIGFuIGFycmF5XG4gKiBoaWRkZW5Sb3dzUGx1Z2luLnNob3dSb3dzKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gdG8gc2VlIHlvdXIgY2hhbmdlcywgcmUtcmVuZGVyIHlvdXIgSGFuZHNvbnRhYmxlIGluc3RhbmNlXG4gKiBob3QucmVuZGVyKCk7XG4gKiBgYGBcbiAqIDo6OlxuICovXG52YXIgX3NldHRpbmdzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2hpZGRlblJvd3NNYXAgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfSGlkZGVuUm93c19icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgSGlkZGVuUm93cyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGFkZGl0aW9uYWwgcm93IGhlaWdodCBmb3IgdGhlIGhpZGRlbiByb3cgaW5kaWNhdG9ycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gaGVpZ2h0IFJvdyBoZWlnaHQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9IaWRkZW5Sb3dzX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgc2V0dGluZ3MgZnJvbSBIYW5kc29udGFibGUgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NldHRpbmdzLCB7fSk7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIGhpZGRlbiByb3dzIGJ5IHRoZSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtIaWRpbmdNYXB8bnVsbH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaGlkZGVuUm93c01hcCwgbnVsbCk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fS0VZKCkge1xuICAgIHJldHVybiBQTFVHSU5fS0VZO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBIaWRkZW5Sb3dzI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBsdWdpblNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKHBsdWdpblNldHRpbmdzKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZXR0aW5ncywgdGhpcywgcGx1Z2luU2V0dGluZ3MpO1xuICAgICAgaWYgKCgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKHBsdWdpblNldHRpbmdzLmNvcHlQYXN0ZUVuYWJsZWQpKSB7XG4gICAgICAgIHBsdWdpblNldHRpbmdzLmNvcHlQYXN0ZUVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hpZGRlblJvd3NNYXAsIHRoaXMsIG5ldyBfdHJhbnNsYXRpb25zLkhpZGluZ01hcCgpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlblJvd3NNYXAsIHRoaXMpLmFkZExvY2FsSG9vaygnaW5pdCcsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Sb3dzX2JyYW5kLCB0aGlzLCBfb25NYXBJbml0KS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGlkZGVuUm93c01hcCwgdGhpcykpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZGRlblJvd3NfYnJhbmQsIF90aGlzLCBfb25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJHZXRDZWxsTWV0YScsIChyb3csIGNvbCwgY2VsbFByb3BlcnRpZXMpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Sb3dzX2JyYW5kLCB0aGlzLCBfb25BZnRlckdldENlbGxNZXRhKS5jYWxsKHRoaXMsIHJvdywgY29sLCBjZWxsUHJvcGVydGllcykpO1xuICAgIHRoaXMuYWRkSG9vaygnbW9kaWZ5Um93SGVpZ2h0JywgKGhlaWdodCwgcm93KSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfSGlkZGVuUm93c19icmFuZCwgdGhpcywgX29uTW9kaWZ5Um93SGVpZ2h0KS5jYWxsKHRoaXMsIGhlaWdodCwgcm93KSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckdldFJvd0hlYWRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZGRlblJvd3NfYnJhbmQsIF90aGlzLCBfb25BZnRlckdldFJvd0hlYWRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb3B5YWJsZVJhbmdlJywgcmFuZ2VzID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9IaWRkZW5Sb3dzX2JyYW5kLCB0aGlzLCBfb25Nb2RpZnlDb3B5YWJsZVJhbmdlKS5jYWxsKHRoaXMsIHJhbmdlcykpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgaGlkZGVuUm93c2BdKEAvYXBpL29wdGlvbnMubWQjaGlkZGVucm93cylcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NldHRpbmdzLCB0aGlzLCB7fSk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMucmVzZXRDZWxsc01ldGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyB0aGUgcm93cyBwcm92aWRlZCBpbiB0aGUgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHJvd3MgQXJyYXkgb2YgdmlzdWFsIHJvdyBpbmRleGVzLlxuICAgKi9cbiAgc2hvd1Jvd3Mocm93cykge1xuICAgIGNvbnN0IGN1cnJlbnRIaWRlQ29uZmlnID0gdGhpcy5nZXRIaWRkZW5Sb3dzKCk7XG4gICAgY29uc3QgaXNWYWxpZENvbmZpZyA9IHRoaXMuaXNWYWxpZENvbmZpZyhyb3dzKTtcbiAgICBsZXQgZGVzdGluYXRpb25IaWRlQ29uZmlnID0gY3VycmVudEhpZGVDb25maWc7XG4gICAgY29uc3QgaGlkaW5nTWFwVmFsdWVzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRkZW5Sb3dzTWFwLCB0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpO1xuICAgIGNvbnN0IGlzQW55Um93U2hvd2VkID0gcm93cy5sZW5ndGggPiAwO1xuICAgIGlmIChpc1ZhbGlkQ29uZmlnICYmIGlzQW55Um93U2hvd2VkKSB7XG4gICAgICBjb25zdCBwaHlzaWNhbFJvd3MgPSByb3dzLm1hcCh2aXN1YWxSb3cgPT4gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2aXN1YWxSb3cpKTtcblxuICAgICAgLy8gUHJlcGFyaW5nIG5ldyB2YWx1ZXMgZm9yIGhpZGluZyBtYXAuXG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocGh5c2ljYWxSb3dzLCBwaHlzaWNhbFJvdyA9PiB7XG4gICAgICAgIGhpZGluZ01hcFZhbHVlc1twaHlzaWNhbFJvd10gPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBQcmVwYXJpbmcgbmV3IGhpZGluZyBjb25maWcuXG4gICAgICBkZXN0aW5hdGlvbkhpZGVDb25maWcgPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKShoaWRpbmdNYXBWYWx1ZXMsIChoaWRkZW5JbmRleGVzLCBpc0hpZGRlbiwgcGh5c2ljYWxJbmRleCkgPT4ge1xuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRkZW5JbmRleGVzLnB1c2godGhpcy5ob3QudG9WaXN1YWxSb3cocGh5c2ljYWxJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoaWRkZW5JbmRleGVzO1xuICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBjb25zdCBjb250aW51ZUhpZGluZyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVVbmhpZGVSb3dzJywgY3VycmVudEhpZGVDb25maWcsIGRlc3RpbmF0aW9uSGlkZUNvbmZpZywgaXNWYWxpZENvbmZpZyAmJiBpc0FueVJvd1Nob3dlZCk7XG4gICAgaWYgKGNvbnRpbnVlSGlkaW5nID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNWYWxpZENvbmZpZyAmJiBpc0FueVJvd1Nob3dlZCkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRkZW5Sb3dzTWFwLCB0aGlzKS5zZXRWYWx1ZXMoaGlkaW5nTWFwVmFsdWVzKTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyVW5oaWRlUm93cycsIGN1cnJlbnRIaWRlQ29uZmlnLCBkZXN0aW5hdGlvbkhpZGVDb25maWcsIGlzVmFsaWRDb25maWcgJiYgaXNBbnlSb3dTaG93ZWQsIGlzVmFsaWRDb25maWcgJiYgZGVzdGluYXRpb25IaWRlQ29uZmlnLmxlbmd0aCA8IGN1cnJlbnRIaWRlQ29uZmlnLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgdGhlIHJvdyBwcm92aWRlZCBhcyByb3cgaW5kZXggKGNvdW50aW5nIGZyb20gMCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICovXG4gIHNob3dSb3coKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByb3cgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJvd1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cbiAgICB0aGlzLnNob3dSb3dzKHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIHJvd3MgcHJvdmlkZWQgaW4gdGhlIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSByb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcy5cbiAgICovXG4gIGhpZGVSb3dzKHJvd3MpIHtcbiAgICBjb25zdCBjdXJyZW50SGlkZUNvbmZpZyA9IHRoaXMuZ2V0SGlkZGVuUm93cygpO1xuICAgIGNvbnN0IGlzQ29uZmlnVmFsaWQgPSB0aGlzLmlzVmFsaWRDb25maWcocm93cyk7XG4gICAgbGV0IGRlc3RpbmF0aW9uSGlkZUNvbmZpZyA9IGN1cnJlbnRIaWRlQ29uZmlnO1xuICAgIGlmIChpc0NvbmZpZ1ZhbGlkKSB7XG4gICAgICBkZXN0aW5hdGlvbkhpZGVDb25maWcgPSBBcnJheS5mcm9tKG5ldyBTZXQoY3VycmVudEhpZGVDb25maWcuY29uY2F0KHJvd3MpKSk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRpbnVlSGlkaW5nID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUhpZGVSb3dzJywgY3VycmVudEhpZGVDb25maWcsIGRlc3RpbmF0aW9uSGlkZUNvbmZpZywgaXNDb25maWdWYWxpZCk7XG4gICAgaWYgKGNvbnRpbnVlSGlkaW5nID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNDb25maWdWYWxpZCkge1xuICAgICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocm93cywgdmlzdWFsUm93ID0+IHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlblJvd3NNYXAsIHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHZpc3VhbFJvdyksIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJIaWRlUm93cycsIGN1cnJlbnRIaWRlQ29uZmlnLCBkZXN0aW5hdGlvbkhpZGVDb25maWcsIGlzQ29uZmlnVmFsaWQsIGlzQ29uZmlnVmFsaWQgJiYgZGVzdGluYXRpb25IaWRlQ29uZmlnLmxlbmd0aCA+IGN1cnJlbnRIaWRlQ29uZmlnLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgdGhlIHJvdyBwcm92aWRlZCBhcyByb3cgaW5kZXggKGNvdW50aW5nIGZyb20gMCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICovXG4gIGhpZGVSb3coKSB7XG4gICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCByb3cgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgIHJvd1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cbiAgICB0aGlzLmhpZGVSb3dzKHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiB2aXN1YWwgaW5kZXhlcyBvZiBoaWRkZW4gcm93cy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKi9cbiAgZ2V0SGlkZGVuUm93cygpIHtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheU1hcCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRkZW5Sb3dzTWFwLCB0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksIHBoeXNpY2FsUm93SW5kZXggPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KHBoeXNpY2FsUm93SW5kZXgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgcm93IGlzIGhpZGRlbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzSGlkZGVuKHJvdykge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hpZGRlblJvd3NNYXAsIHRoaXMpLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdykpIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGFsbCBvZiB0aGUgcHJvdmlkZWQgcm93IGluZGV4ZXMgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gaGlkZGVuUm93cyBMaXN0IG9mIGhpZGRlbiB2aXN1YWwgcm93IGluZGV4ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNWYWxpZENvbmZpZyhoaWRkZW5Sb3dzKSB7XG4gICAgY29uc3QgbnJPZlJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoaWRkZW5Sb3dzKSAmJiBoaWRkZW5Sb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBoaWRkZW5Sb3dzLmV2ZXJ5KHZpc3VhbFJvdyA9PiBOdW1iZXIuaXNJbnRlZ2VyKHZpc3VhbFJvdykgJiYgdmlzdWFsUm93ID49IDAgJiYgdmlzdWFsUm93IDwgbnJPZlJvd3MpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGFsbCByZW5kZXJlZCBjZWxscyBtZXRhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVzZXRDZWxsc01ldGEoKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLCBtZXRhID0+IHtcbiAgICAgIGlmIChtZXRhKSB7XG4gICAgICAgIG1ldGEuc2tpcFJvd09uUGFzdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZXR0aW5ncywgdGhpcywgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9oaWRkZW5Sb3dzTWFwLCB0aGlzLCBudWxsKTtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuSGlkZGVuUm93cyA9IEhpZGRlblJvd3M7XG5mdW5jdGlvbiBfb25Nb2RpZnlSb3dIZWlnaHQoaGVpZ2h0LCByb3cpIHtcbiAgLy8gSG9vayBpcyB0cmlnZ2VyZWQgaW50ZXJuYWxseSBvbmx5IGZvciB0aGUgdmlzaWJsZSByb3dzLiBDb25kaXRpb25hbCB3aWxsIGJlIGhhbmRsZWQgZm9yIHRoZSBBUElcbiAgLy8gY2FsbHMgb2YgdGhlIGBnZXRSb3dIZWlnaHRgIGZ1bmN0aW9uIG9uIG5vdCB2aXNpYmxlIGluZGV4ZXMuXG4gIGlmICh0aGlzLmlzSGlkZGVuKHJvdykpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICByZXR1cm4gaGVpZ2h0O1xufVxuLyoqXG4gKiBTZXRzIHRoZSBjb3B5LXJlbGF0ZWQgY2VsbCBtZXRhLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBPYmplY3QgY29udGFpbmluZyB0aGUgY2VsbCBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckdldENlbGxNZXRhKHJvdywgY29sdW1uLCBjZWxsUHJvcGVydGllcykge1xuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZXR0aW5ncywgdGhpcykuY29weVBhc3RlRW5hYmxlZCA9PT0gZmFsc2UgJiYgdGhpcy5pc0hpZGRlbihyb3cpKSB7XG4gICAgLy8gQ2VsbCBwcm9wZXJ0eSBoYW5kbGVkIGJ5IHRoZSBgQXV0b2ZpbGxgIGFuZCB0aGUgYENvcHlQYXN0ZWAgcGx1Z2lucy5cbiAgICBjZWxsUHJvcGVydGllcy5za2lwUm93T25QYXN0ZSA9IHRydWU7XG4gIH1cbiAgaWYgKHRoaXMuaXNIaWRkZW4ocm93IC0gMSkpIHtcbiAgICBjZWxsUHJvcGVydGllcy5jbGFzc05hbWUgPSBjZWxsUHJvcGVydGllcy5jbGFzc05hbWUgfHwgJyc7XG4gICAgaWYgKGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZS5pbmRleE9mKCdhZnRlckhpZGRlblJvdycpID09PSAtMSkge1xuICAgICAgY2VsbFByb3BlcnRpZXMuY2xhc3NOYW1lICs9ICcgYWZ0ZXJIaWRkZW5Sb3cnO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjZWxsUHJvcGVydGllcy5jbGFzc05hbWUpIHtcbiAgICBjb25zdCBjbGFzc0FyciA9IGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGlmIChjbGFzc0Fyci5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb250YWluQWZ0ZXJIaWRkZW5Sb3cgPSBjbGFzc0Fyci5pbmRleE9mKCdhZnRlckhpZGRlblJvdycpO1xuICAgICAgaWYgKGNvbnRhaW5BZnRlckhpZGRlblJvdyA+IC0xKSB7XG4gICAgICAgIGNsYXNzQXJyLnNwbGljZShjb250YWluQWZ0ZXJIaWRkZW5Sb3csIDEpO1xuICAgICAgfVxuICAgICAgY2VsbFByb3BlcnRpZXMuY2xhc3NOYW1lID0gY2xhc3NBcnIuam9pbignICcpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBNb2RpZmllcyB0aGUgY29weWFibGUgcmFuZ2UsIGFjY29yZGluZ2x5IHRvIHRoZSBwcm92aWRlZCBjb25maWcuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcmFuZ2VzIEFuIGFycmF5IG9mIG9iamVjdHMgZGVmaW5pbmcgY29weWFibGUgY2VsbHMuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeUNvcHlhYmxlUmFuZ2UocmFuZ2VzKSB7XG4gIC8vIFJhbmdlcyBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgd2hlbiBgY29weVBhc3RlRW5hYmxlZGAgb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWAgKGJ5IGRlZmF1bHQpLlxuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZXR0aW5ncywgdGhpcykuY29weVBhc3RlRW5hYmxlZCkge1xuICAgIHJldHVybiByYW5nZXM7XG4gIH1cbiAgY29uc3QgbmV3UmFuZ2VzID0gW107XG4gIGNvbnN0IHB1c2hSYW5nZSA9IChzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sKSA9PiB7XG4gICAgbmV3UmFuZ2VzLnB1c2goe1xuICAgICAgc3RhcnRSb3csXG4gICAgICBlbmRSb3csXG4gICAgICBzdGFydENvbCxcbiAgICAgIGVuZENvbFxuICAgIH0pO1xuICB9O1xuICAoMCwgX2FycmF5LmFycmF5RWFjaCkocmFuZ2VzLCByYW5nZSA9PiB7XG4gICAgbGV0IGlzSGlkZGVuID0gdHJ1ZTtcbiAgICBsZXQgcmFuZ2VTdGFydCA9IDA7XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShyYW5nZS5zdGFydFJvdywgcmFuZ2UuZW5kUm93LCB2aXN1YWxSb3cgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNIaWRkZW4odmlzdWFsUm93KSkge1xuICAgICAgICBpZiAoIWlzSGlkZGVuKSB7XG4gICAgICAgICAgcHVzaFJhbmdlKHJhbmdlU3RhcnQsIHZpc3VhbFJvdyAtIDEsIHJhbmdlLnN0YXJ0Q29sLCByYW5nZS5lbmRDb2wpO1xuICAgICAgICB9XG4gICAgICAgIGlzSGlkZGVuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIHJhbmdlU3RhcnQgPSB2aXN1YWxSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc3VhbFJvdyA9PT0gcmFuZ2UuZW5kUm93KSB7XG4gICAgICAgICAgcHVzaFJhbmdlKHJhbmdlU3RhcnQsIHZpc3VhbFJvdywgcmFuZ2Uuc3RhcnRDb2wsIHJhbmdlLmVuZENvbCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNIaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBuZXdSYW5nZXM7XG59XG4vKipcbiAqIEFkZHMgdGhlIG5lZWRlZCBjbGFzc2VzIHRvIHRoZSBoZWFkZXJzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFRIIEhlYWRlcidzIFRIIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Um93SGVhZGVyKHJvdywgVEgpIHtcbiAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NldHRpbmdzLCB0aGlzKS5pbmRpY2F0b3JzIHx8IHJvdyA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY2xhc3NMaXN0ID0gW107XG4gIGlmIChyb3cgPj0gMSAmJiB0aGlzLmlzSGlkZGVuKHJvdyAtIDEpKSB7XG4gICAgY2xhc3NMaXN0LnB1c2goJ2FmdGVySGlkZGVuUm93Jyk7XG4gIH1cbiAgaWYgKHJvdyA8IHRoaXMuaG90LmNvdW50Um93cygpIC0gMSAmJiB0aGlzLmlzSGlkZGVuKHJvdyArIDEpKSB7XG4gICAgY2xhc3NMaXN0LnB1c2goJ2JlZm9yZUhpZGRlblJvdycpO1xuICB9XG4gICgwLCBfZWxlbWVudC5hZGRDbGFzcykoVEgsIGNsYXNzTGlzdCk7XG59XG4vKipcbiAqIEFkZCBTaG93LWhpZGUgcm93cyB0byBjb250ZXh0IG1lbnUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgQW4gYXJyYXkgb2Ygb2JqZWN0cyBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmUtZGVmaW5lZCBDb250ZXh0IE1lbnUgaXRlbXMuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG4gIG9wdGlvbnMuaXRlbXMucHVzaCh7XG4gICAgbmFtZTogX3ByZWRlZmluZWRJdGVtcy5TRVBBUkFUT1JcbiAgfSwgKDAsIF9oaWRlUm93LmRlZmF1bHQpKHRoaXMpLCAoMCwgX3Nob3dSb3cuZGVmYXVsdCkodGhpcykpO1xufVxuLyoqXG4gKiBPbiBtYXAgaW5pdGlhbGl6ZWQgaG9vayBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gX29uTWFwSW5pdCgpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZXR0aW5ncywgdGhpcykucm93cykpIHtcbiAgICB0aGlzLmhpZGVSb3dzKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2V0dGluZ3MsIHRoaXMpLnJvd3MpO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2hpZGRlblJvd3MgPSByZXF1aXJlKFwiLi9oaWRkZW5Sb3dzXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX2hpZGRlblJvd3MuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX2hpZGRlblJvd3MuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5IaWRkZW5Sb3dzID0gX2hpZGRlblJvd3MuSGlkZGVuUm93czsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucmVnaXN0ZXJBbGxQbHVnaW5zID0gcmVnaXN0ZXJBbGxQbHVnaW5zO1xudmFyIF9hdXRvQ29sdW1uU2l6ZSA9IHJlcXVpcmUoXCIuL2F1dG9Db2x1bW5TaXplXCIpO1xuZXhwb3J0cy5BdXRvQ29sdW1uU2l6ZSA9IF9hdXRvQ29sdW1uU2l6ZS5BdXRvQ29sdW1uU2l6ZTtcbnZhciBfYXV0b2ZpbGwgPSByZXF1aXJlKFwiLi9hdXRvZmlsbFwiKTtcbmV4cG9ydHMuQXV0b2ZpbGwgPSBfYXV0b2ZpbGwuQXV0b2ZpbGw7XG52YXIgX2F1dG9Sb3dTaXplID0gcmVxdWlyZShcIi4vYXV0b1Jvd1NpemVcIik7XG5leHBvcnRzLkF1dG9Sb3dTaXplID0gX2F1dG9Sb3dTaXplLkF1dG9Sb3dTaXplO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4vYmFzZVwiKTtcbmV4cG9ydHMuQmFzZVBsdWdpbiA9IF9iYXNlLkJhc2VQbHVnaW47XG52YXIgX2JpbmRSb3dzV2l0aEhlYWRlcnMgPSByZXF1aXJlKFwiLi9iaW5kUm93c1dpdGhIZWFkZXJzXCIpO1xuZXhwb3J0cy5CaW5kUm93c1dpdGhIZWFkZXJzID0gX2JpbmRSb3dzV2l0aEhlYWRlcnMuQmluZFJvd3NXaXRoSGVhZGVycztcbnZhciBfY29sbGFwc2libGVDb2x1bW5zID0gcmVxdWlyZShcIi4vY29sbGFwc2libGVDb2x1bW5zXCIpO1xuZXhwb3J0cy5Db2xsYXBzaWJsZUNvbHVtbnMgPSBfY29sbGFwc2libGVDb2x1bW5zLkNvbGxhcHNpYmxlQ29sdW1ucztcbnZhciBfY29sdW1uU29ydGluZyA9IHJlcXVpcmUoXCIuL2NvbHVtblNvcnRpbmdcIik7XG5leHBvcnRzLkNvbHVtblNvcnRpbmcgPSBfY29sdW1uU29ydGluZy5Db2x1bW5Tb3J0aW5nO1xudmFyIF9jb2x1bW5TdW1tYXJ5ID0gcmVxdWlyZShcIi4vY29sdW1uU3VtbWFyeVwiKTtcbmV4cG9ydHMuQ29sdW1uU3VtbWFyeSA9IF9jb2x1bW5TdW1tYXJ5LkNvbHVtblN1bW1hcnk7XG52YXIgX2NvbW1lbnRzID0gcmVxdWlyZShcIi4vY29tbWVudHNcIik7XG5leHBvcnRzLkNvbW1lbnRzID0gX2NvbW1lbnRzLkNvbW1lbnRzO1xudmFyIF9jb250ZXh0TWVudSA9IHJlcXVpcmUoXCIuL2NvbnRleHRNZW51XCIpO1xuZXhwb3J0cy5Db250ZXh0TWVudSA9IF9jb250ZXh0TWVudS5Db250ZXh0TWVudTtcbnZhciBfY29weVBhc3RlID0gcmVxdWlyZShcIi4vY29weVBhc3RlXCIpO1xuZXhwb3J0cy5Db3B5UGFzdGUgPSBfY29weVBhc3RlLkNvcHlQYXN0ZTtcbnZhciBfY3VzdG9tQm9yZGVycyA9IHJlcXVpcmUoXCIuL2N1c3RvbUJvcmRlcnNcIik7XG5leHBvcnRzLkN1c3RvbUJvcmRlcnMgPSBfY3VzdG9tQm9yZGVycy5DdXN0b21Cb3JkZXJzO1xudmFyIF9kcmFnVG9TY3JvbGwgPSByZXF1aXJlKFwiLi9kcmFnVG9TY3JvbGxcIik7XG5leHBvcnRzLkRyYWdUb1Njcm9sbCA9IF9kcmFnVG9TY3JvbGwuRHJhZ1RvU2Nyb2xsO1xudmFyIF9kcm9wZG93bk1lbnUgPSByZXF1aXJlKFwiLi9kcm9wZG93bk1lbnVcIik7XG5leHBvcnRzLkRyb3Bkb3duTWVudSA9IF9kcm9wZG93bk1lbnUuRHJvcGRvd25NZW51O1xudmFyIF9leHBvcnRGaWxlID0gcmVxdWlyZShcIi4vZXhwb3J0RmlsZVwiKTtcbmV4cG9ydHMuRXhwb3J0RmlsZSA9IF9leHBvcnRGaWxlLkV4cG9ydEZpbGU7XG52YXIgX2ZpbHRlcnMgPSByZXF1aXJlKFwiLi9maWx0ZXJzXCIpO1xuZXhwb3J0cy5GaWx0ZXJzID0gX2ZpbHRlcnMuRmlsdGVycztcbnZhciBfZm9ybXVsYXMgPSByZXF1aXJlKFwiLi9mb3JtdWxhc1wiKTtcbmV4cG9ydHMuRm9ybXVsYXMgPSBfZm9ybXVsYXMuRm9ybXVsYXM7XG52YXIgX2hpZGRlbkNvbHVtbnMgPSByZXF1aXJlKFwiLi9oaWRkZW5Db2x1bW5zXCIpO1xuZXhwb3J0cy5IaWRkZW5Db2x1bW5zID0gX2hpZGRlbkNvbHVtbnMuSGlkZGVuQ29sdW1ucztcbnZhciBfaGlkZGVuUm93cyA9IHJlcXVpcmUoXCIuL2hpZGRlblJvd3NcIik7XG5leHBvcnRzLkhpZGRlblJvd3MgPSBfaGlkZGVuUm93cy5IaWRkZW5Sb3dzO1xudmFyIF9tYW51YWxDb2x1bW5GcmVlemUgPSByZXF1aXJlKFwiLi9tYW51YWxDb2x1bW5GcmVlemVcIik7XG5leHBvcnRzLk1hbnVhbENvbHVtbkZyZWV6ZSA9IF9tYW51YWxDb2x1bW5GcmVlemUuTWFudWFsQ29sdW1uRnJlZXplO1xudmFyIF9tYW51YWxDb2x1bW5Nb3ZlID0gcmVxdWlyZShcIi4vbWFudWFsQ29sdW1uTW92ZVwiKTtcbmV4cG9ydHMuTWFudWFsQ29sdW1uTW92ZSA9IF9tYW51YWxDb2x1bW5Nb3ZlLk1hbnVhbENvbHVtbk1vdmU7XG52YXIgX21hbnVhbENvbHVtblJlc2l6ZSA9IHJlcXVpcmUoXCIuL21hbnVhbENvbHVtblJlc2l6ZVwiKTtcbmV4cG9ydHMuTWFudWFsQ29sdW1uUmVzaXplID0gX21hbnVhbENvbHVtblJlc2l6ZS5NYW51YWxDb2x1bW5SZXNpemU7XG52YXIgX21hbnVhbFJvd01vdmUgPSByZXF1aXJlKFwiLi9tYW51YWxSb3dNb3ZlXCIpO1xuZXhwb3J0cy5NYW51YWxSb3dNb3ZlID0gX21hbnVhbFJvd01vdmUuTWFudWFsUm93TW92ZTtcbnZhciBfbWFudWFsUm93UmVzaXplID0gcmVxdWlyZShcIi4vbWFudWFsUm93UmVzaXplXCIpO1xuZXhwb3J0cy5NYW51YWxSb3dSZXNpemUgPSBfbWFudWFsUm93UmVzaXplLk1hbnVhbFJvd1Jlc2l6ZTtcbnZhciBfbWVyZ2VDZWxscyA9IHJlcXVpcmUoXCIuL21lcmdlQ2VsbHNcIik7XG5leHBvcnRzLk1lcmdlQ2VsbHMgPSBfbWVyZ2VDZWxscy5NZXJnZUNlbGxzO1xudmFyIF9tdWx0aUNvbHVtblNvcnRpbmcgPSByZXF1aXJlKFwiLi9tdWx0aUNvbHVtblNvcnRpbmdcIik7XG5leHBvcnRzLk11bHRpQ29sdW1uU29ydGluZyA9IF9tdWx0aUNvbHVtblNvcnRpbmcuTXVsdGlDb2x1bW5Tb3J0aW5nO1xudmFyIF9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMgPSByZXF1aXJlKFwiLi9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNcIik7XG5leHBvcnRzLk11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyA9IF9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMuTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzO1xudmFyIF9uZXN0ZWRIZWFkZXJzID0gcmVxdWlyZShcIi4vbmVzdGVkSGVhZGVyc1wiKTtcbmV4cG9ydHMuTmVzdGVkSGVhZGVycyA9IF9uZXN0ZWRIZWFkZXJzLk5lc3RlZEhlYWRlcnM7XG52YXIgX25lc3RlZFJvd3MgPSByZXF1aXJlKFwiLi9uZXN0ZWRSb3dzXCIpO1xuZXhwb3J0cy5OZXN0ZWRSb3dzID0gX25lc3RlZFJvd3MuTmVzdGVkUm93cztcbnZhciBfcGVyc2lzdGVudFN0YXRlID0gcmVxdWlyZShcIi4vcGVyc2lzdGVudFN0YXRlXCIpO1xuZXhwb3J0cy5QZXJzaXN0ZW50U3RhdGUgPSBfcGVyc2lzdGVudFN0YXRlLlBlcnNpc3RlbnRTdGF0ZTtcbnZhciBfc2VhcmNoID0gcmVxdWlyZShcIi4vc2VhcmNoXCIpO1xuZXhwb3J0cy5TZWFyY2ggPSBfc2VhcmNoLlNlYXJjaDtcbnZhciBfdG91Y2hTY3JvbGwgPSByZXF1aXJlKFwiLi90b3VjaFNjcm9sbFwiKTtcbmV4cG9ydHMuVG91Y2hTY3JvbGwgPSBfdG91Y2hTY3JvbGwuVG91Y2hTY3JvbGw7XG52YXIgX3RyaW1Sb3dzID0gcmVxdWlyZShcIi4vdHJpbVJvd3NcIik7XG5leHBvcnRzLlRyaW1Sb3dzID0gX3RyaW1Sb3dzLlRyaW1Sb3dzO1xudmFyIF91bmRvUmVkbyA9IHJlcXVpcmUoXCIuL3VuZG9SZWRvXCIpO1xuZXhwb3J0cy5VbmRvUmVkbyA9IF91bmRvUmVkby5VbmRvUmVkbztcbnZhciBfcmVnaXN0cnkgPSByZXF1aXJlKFwiLi9yZWdpc3RyeVwiKTtcbmV4cG9ydHMucmVnaXN0ZXJQbHVnaW4gPSBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW47XG5leHBvcnRzLmdldFBsdWdpbiA9IF9yZWdpc3RyeS5nZXRQbHVnaW47XG5leHBvcnRzLmdldFBsdWdpbnNOYW1lcyA9IF9yZWdpc3RyeS5nZXRQbHVnaW5zTmFtZXM7XG4vKipcbiAqIFJlZ2lzdGVycyBhbGwgYXZhaWxhYmxlIHBsdWdpbnMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQWxsUGx1Z2lucygpIHtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2F1dG9Db2x1bW5TaXplLkF1dG9Db2x1bW5TaXplKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2F1dG9maWxsLkF1dG9maWxsKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2F1dG9Sb3dTaXplLkF1dG9Sb3dTaXplKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2JpbmRSb3dzV2l0aEhlYWRlcnMuQmluZFJvd3NXaXRoSGVhZGVycyk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9jb2xsYXBzaWJsZUNvbHVtbnMuQ29sbGFwc2libGVDb2x1bW5zKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2NvbHVtblNvcnRpbmcuQ29sdW1uU29ydGluZyk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9jb2x1bW5TdW1tYXJ5LkNvbHVtblN1bW1hcnkpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfY29tbWVudHMuQ29tbWVudHMpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfY29udGV4dE1lbnUuQ29udGV4dE1lbnUpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfY29weVBhc3RlLkNvcHlQYXN0ZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9jdXN0b21Cb3JkZXJzLkN1c3RvbUJvcmRlcnMpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfZHJhZ1RvU2Nyb2xsLkRyYWdUb1Njcm9sbCk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9kcm9wZG93bk1lbnUuRHJvcGRvd25NZW51KTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2V4cG9ydEZpbGUuRXhwb3J0RmlsZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9maWx0ZXJzLkZpbHRlcnMpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfZm9ybXVsYXMuRm9ybXVsYXMpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfaGlkZGVuQ29sdW1ucy5IaWRkZW5Db2x1bW5zKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX2hpZGRlblJvd3MuSGlkZGVuUm93cyk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9tYW51YWxDb2x1bW5GcmVlemUuTWFudWFsQ29sdW1uRnJlZXplKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX21hbnVhbENvbHVtbk1vdmUuTWFudWFsQ29sdW1uTW92ZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9tYW51YWxDb2x1bW5SZXNpemUuTWFudWFsQ29sdW1uUmVzaXplKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX21hbnVhbFJvd01vdmUuTWFudWFsUm93TW92ZSk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9tYW51YWxSb3dSZXNpemUuTWFudWFsUm93UmVzaXplKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX21lcmdlQ2VsbHMuTWVyZ2VDZWxscyk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9tdWx0aUNvbHVtblNvcnRpbmcuTXVsdGlDb2x1bW5Tb3J0aW5nKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX211bHRpcGxlU2VsZWN0aW9uSGFuZGxlcy5NdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfbmVzdGVkSGVhZGVycy5OZXN0ZWRIZWFkZXJzKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX25lc3RlZFJvd3MuTmVzdGVkUm93cyk7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJQbHVnaW4pKF9wZXJzaXN0ZW50U3RhdGUuUGVyc2lzdGVudFN0YXRlKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclBsdWdpbikoX3NlYXJjaC5TZWFyY2gpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfdG91Y2hTY3JvbGwuVG91Y2hTY3JvbGwpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfdHJpbVJvd3MuVHJpbVJvd3MpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUGx1Z2luKShfdW5kb1JlZG8uVW5kb1JlZG8pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gZnJlZXplQ29sdW1uSXRlbTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8qKlxuICogQHBhcmFtIHtNYW51YWxDb2x1bW5GcmVlemV9IG1hbnVhbENvbHVtbkZyZWV6ZVBsdWdpbiBUaGUgcGx1Z2luIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZnJlZXplQ29sdW1uSXRlbShtYW51YWxDb2x1bW5GcmVlemVQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdmcmVlemVfY29sdW1uJyxcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU4pO1xuICAgIH0sXG4gICAgY2FsbGJhY2soa2V5LCBzZWxlY3RlZCkge1xuICAgICAgY29uc3QgW3tcbiAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICBjb2w6IHNlbGVjdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH1dID0gc2VsZWN0ZWQ7XG4gICAgICBtYW51YWxDb2x1bW5GcmVlemVQbHVnaW4uZnJlZXplQ29sdW1uKHNlbGVjdGVkQ29sdW1uKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgIGxldCBoaWRlID0gZmFsc2U7XG4gICAgICBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGlkZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhpZGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25bMF0uZnJvbS5jb2wgIT09IHNlbGVjdGlvblswXS50by5jb2wgfHwgc2VsZWN0aW9uWzBdLmZyb20uY29sIDw9IHRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCAtIDEpIHtcbiAgICAgICAgaGlkZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGlkZTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSB1bmZyZWV6ZUNvbHVtbkl0ZW07XG52YXIgQyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi8uLi8uLi9pMThuL2NvbnN0YW50c1wiKSk7XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG4vKipcbiAqIEBwYXJhbSB7TWFudWFsQ29sdW1uRnJlZXplfSBtYW51YWxDb2x1bW5GcmVlemVQbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHVuZnJlZXplQ29sdW1uSXRlbShtYW51YWxDb2x1bW5GcmVlemVQbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICd1bmZyZWV6ZV9jb2x1bW4nLFxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEMuQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKGtleSwgc2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IFt7XG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgY29sOiBzZWxlY3RlZENvbHVtblxuICAgICAgICB9XG4gICAgICB9XSA9IHNlbGVjdGVkO1xuICAgICAgbWFudWFsQ29sdW1uRnJlZXplUGx1Z2luLnVuZnJlZXplQ29sdW1uKHNlbGVjdGVkQ29sdW1uKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgfSxcbiAgICBoaWRkZW4oKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgIGxldCBoaWRlID0gZmFsc2U7XG4gICAgICBpZiAoc2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGlkZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgIGhpZGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25bMF0uZnJvbS5jb2wgIT09IHNlbGVjdGlvblswXS50by5jb2wgfHwgc2VsZWN0aW9uWzBdLmZyb20uY29sID49IHRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkge1xuICAgICAgICBoaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoaWRlO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfbWFudWFsQ29sdW1uRnJlZXplID0gcmVxdWlyZShcIi4vbWFudWFsQ29sdW1uRnJlZXplXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX21hbnVhbENvbHVtbkZyZWV6ZS5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfbWFudWFsQ29sdW1uRnJlZXplLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuTWFudWFsQ29sdW1uRnJlZXplID0gX21hbnVhbENvbHVtbkZyZWV6ZS5NYW51YWxDb2x1bW5GcmVlemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9mcmVlemVDb2x1bW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbnRleHRNZW51SXRlbS9mcmVlemVDb2x1bW5cIikpO1xudmFyIF91bmZyZWV6ZUNvbHVtbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL3VuZnJlZXplQ29sdW1uXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYmVmb3JlQ29sdW1uRnJlZXplJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJDb2x1bW5GcmVlemUnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVDb2x1bW5VbmZyZWV6ZScpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyQ29sdW1uVW5mcmVlemUnKTtcbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnbWFudWFsQ29sdW1uRnJlZXplJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMTEwO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQHBsdWdpbiBNYW51YWxDb2x1bW5GcmVlemVcbiAqIEBjbGFzcyBNYW51YWxDb2x1bW5GcmVlemVcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIGFsbG93cyB0byBtYW51YWxseSBcImZyZWV6ZVwiIGFuZCBcInVuZnJlZXplXCIgYSBjb2x1bW4gdXNpbmcgYW4gZW50cnkgaW4gdGhlIENvbnRleHQgTWVudSBvciB1c2luZyBBUEkuXG4gKiBZb3UgY2FuIHR1cm4gaXQgb24gYnkgc2V0dGluZyBhIHtAbGluayBPcHRpb25zI21hbnVhbENvbHVtbkZyZWV6ZX0gcHJvcGVydHkgdG8gYHRydWVgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogLy8gRW5hYmxlcyB0aGUgcGx1Z2luXG4gKiBtYW51YWxDb2x1bW5GcmVlemU6IHRydWUsXG4gKiBgYGBcbiAqL1xudmFyIF9hZnRlckZpcnN0VXNlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX01hbnVhbENvbHVtbkZyZWV6ZV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgTWFudWFsQ29sdW1uRnJlZXplIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgbWFudWFsQ29sdW1uRnJlZXplIGNvbnRleHQgbWVudSBlbnRyaWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBDb250ZXh0IG1lbnUgb3B0aW9ucy5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX01hbnVhbENvbHVtbkZyZWV6ZV9icmFuZCk7XG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGVuIHRoZSBtb3Zpbmcgb3BlcmF0aW9uIGlzIGFsbG93ZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfYWZ0ZXJGaXJzdFVzZSwgZmFsc2UpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgTWFudWFsQ29sdW1uRnJlZXplI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucycsIG9wdGlvbnMgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtbkZyZWV6ZV9icmFuZCwgdGhpcywgX2FkZENvbnRleHRNZW51RW50cnkpLmNhbGwodGhpcywgb3B0aW9ucykpO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlQ29sdW1uTW92ZScsIChjb2x1bW5zLCBmaW5hbEluZGV4KSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uRnJlZXplX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVDb2x1bW5Nb3ZlKS5jYWxsKHRoaXMsIGNvbHVtbnMsIGZpbmFsSW5kZXgpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2FmdGVyRmlyc3RVc2UsIHRoaXMsIGZhbHNlKTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BtYW51YWxDb2x1bW5GcmVlemVgXShAL2FwaS9vcHRpb25zLm1kI21hbnVhbGNvbHVtbmZyZWV6ZSlcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZyZWV6ZXMgdGhlIHNwZWNpZmllZCBjb2x1bW4gKGFkZHMgaXQgdG8gZml4ZWQgY29sdW1ucykuXG4gICAqXG4gICAqIGBmcmVlemVDb2x1bW4oKWAgZG9lc24ndCByZS1yZW5kZXIgdGhlIHRhYmxlLFxuICAgKiBzbyB5b3UgbmVlZCB0byBjYWxsIHRoZSBgcmVuZGVyKClgIG1ldGhvZCBhZnRlcndhcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIGZyZWV6ZUNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKCk7XG4gICAgLy8gY29sdW1ucyBhcmUgYWxyZWFkeSBmaXhlZCAoZnJvemVuKVxuICAgIGNvbnN0IGZyZWV6ZVBlcmZvcm1lZCA9IHNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0IDwgdGhpcy5ob3QuY291bnRDb2xzKCkgJiYgY29sdW1uID4gc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQgLSAxO1xuICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hZnRlckZpcnN0VXNlLCB0aGlzKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9hZnRlckZpcnN0VXNlLCB0aGlzLCB0cnVlKTtcbiAgICB9XG4gICAgY29uc3QgYmVmb3JlQ29sdW1uRnJlZXplSG9vayA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDb2x1bW5GcmVlemUnLCBjb2x1bW4sIGZyZWV6ZVBlcmZvcm1lZCk7XG4gICAgaWYgKGJlZm9yZUNvbHVtbkZyZWV6ZUhvb2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmcmVlemVQZXJmb3JtZWQpIHtcbiAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGNvbHVtbiwgc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQpO1xuXG4gICAgICAvLyBTaW5jZSAxMi4wLjAsIHRoZSBcImZpeGVkQ29sdW1uc0xlZnRcIiBpcyByZXBsYWNlZCB3aXRoIHRoZSBcImZpeGVkQ29sdW1uc1N0YXJ0XCIgb3B0aW9uLlxuICAgICAgLy8gSG93ZXZlciwga2VlcGluZyB0aGUgb2xkIG5hbWUgc3RpbGwgaW4gZWZmZWN0LiBXaGVuIGJvdGggb3B0aW9uIG5hbWVzIGFyZSB1c2VkIHRvZ2V0aGVyLFxuICAgICAgLy8gdGhlIGVycm9yIGlzIHRocm93bi4gVG8gcHJldmVudCB0aGF0LCB0aGUgcGx1Z2luIG5lZWRzIHRvIG1vZGlmeSB0aGUgb3JpZ2luYWwgb3B0aW9uIGtleVxuICAgICAgLy8gdG8gYnlwYXNzIHRoZSB2YWxpZGF0aW9uLlxuICAgICAgc2V0dGluZ3MuX2ZpeGVkQ29sdW1uc1N0YXJ0ICs9IDE7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckNvbHVtbkZyZWV6ZScsIGNvbHVtbiwgZnJlZXplUGVyZm9ybWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmZyZWV6ZXMgdGhlIGdpdmVuIGNvbHVtbiAocmVtb3ZlIGl0IGZyb20gZml4ZWQgY29sdW1ucyBhbmQgYnJpbmcgdG8gaXQncyBwcmV2aW91cyBwb3NpdGlvbikuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICovXG4gIHVuZnJlZXplQ29sdW1uKGNvbHVtbikge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICAvLyBjb2x1bW5zIGFyZSBub3QgZml4ZWQgKG5vdCBmcm96ZW4pXG4gICAgY29uc3QgdW5mcmVlemVQZXJmb3JtZWQgPSBzZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCA+IDAgJiYgY29sdW1uIDw9IHNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0IC0gMTtcbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfYWZ0ZXJGaXJzdFVzZSwgdGhpcykpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfYWZ0ZXJGaXJzdFVzZSwgdGhpcywgdHJ1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGJlZm9yZUNvbHVtblVuZnJlZXplSG9vayA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDb2x1bW5VbmZyZWV6ZScsIGNvbHVtbiwgdW5mcmVlemVQZXJmb3JtZWQpO1xuICAgIGlmIChiZWZvcmVDb2x1bW5VbmZyZWV6ZUhvb2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh1bmZyZWV6ZVBlcmZvcm1lZCkge1xuICAgICAgLy8gU2luY2UgMTIuMC4wLCB0aGUgXCJmaXhlZENvbHVtbnNMZWZ0XCIgaXMgcmVwbGFjZWQgd2l0aCB0aGUgXCJmaXhlZENvbHVtbnNTdGFydFwiIG9wdGlvbi5cbiAgICAgIC8vIEhvd2V2ZXIsIGtlZXBpbmcgdGhlIG9sZCBuYW1lIHN0aWxsIGluIGVmZmVjdC4gV2hlbiBib3RoIG9wdGlvbiBuYW1lcyBhcmUgdXNlZCB0b2dldGhlcixcbiAgICAgIC8vIHRoZSBlcnJvciBpcyB0aHJvd24uIFRvIHByZXZlbnQgdGhhdCwgdGhlIHBsdWdpbiBuZWVkcyB0byBtb2RpZnkgdGhlIG9yaWdpbmFsIG9wdGlvbiBrZXlcbiAgICAgIC8vIHRvIGJ5cGFzcyB0aGUgdmFsaWRhdGlvbi5cbiAgICAgIHNldHRpbmdzLl9maXhlZENvbHVtbnNTdGFydCAtPSAxO1xuICAgICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMoY29sdW1uLCBzZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCk7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckNvbHVtblVuZnJlZXplJywgY29sdW1uLCB1bmZyZWV6ZVBlcmZvcm1lZCk7XG4gIH1cbn1cbmV4cG9ydHMuTWFudWFsQ29sdW1uRnJlZXplID0gTWFudWFsQ29sdW1uRnJlZXplO1xuZnVuY3Rpb24gX2FkZENvbnRleHRNZW51RW50cnkob3B0aW9ucykge1xuICBvcHRpb25zLml0ZW1zLnB1c2goe1xuICAgIG5hbWU6ICctLS0tLS0tLS0nXG4gIH0sICgwLCBfZnJlZXplQ29sdW1uLmRlZmF1bHQpKHRoaXMpLCAoMCwgX3VuZnJlZXplQ29sdW1uLmRlZmF1bHQpKHRoaXMpKTtcbn1cbi8qKlxuICogUHJldmVudHMgbW92aW5nIHRoZSBjb2x1bW5zIGZyb20vdG8gZml4ZWQgYXJlYS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gY29sdW1ucyBBcnJheSBvZiB2aXN1YWwgY29sdW1uIGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQ29sdW1uTW92ZShjb2x1bW5zLCBmaW5hbEluZGV4KSB7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2FmdGVyRmlyc3RVc2UsIHRoaXMpKSB7XG4gICAgY29uc3QgZnJlZXplTGluZSA9IHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ7XG5cbiAgICAvLyBNb3ZpbmcgYW55IGNvbHVtbiBiZWZvcmUgdGhlIFwiZnJlZXplIGxpbmVcIiBpc24ndCBwb3NzaWJsZS5cbiAgICBpZiAoZmluYWxJbmRleCA8IGZyZWV6ZUxpbmUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBNb3ZpbmcgZnJvemVuIGNvbHVtbiBpc24ndCBwb3NzaWJsZS5cbiAgICBpZiAoY29sdW1ucy5zb21lKGNvbHVtbiA9PiBjb2x1bW4gPCBmcmVlemVMaW5lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9tYW51YWxDb2x1bW5Nb3ZlID0gcmVxdWlyZShcIi4vbWFudWFsQ29sdW1uTW92ZVwiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9tYW51YWxDb2x1bW5Nb3ZlLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9tYW51YWxDb2x1bW5Nb3ZlLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuTWFudWFsQ29sdW1uTW92ZSA9IF9tYW51YWxDb2x1bW5Nb3ZlLk1hbnVhbENvbHVtbk1vdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2JhY2tsaWdodDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3VpL2JhY2tsaWdodFwiKSk7XG52YXIgX2d1aWRlbGluZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3VpL2d1aWRlbGluZVwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2JlZm9yZUNvbHVtbk1vdmUnKTtcbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdhZnRlckNvbHVtbk1vdmUnKTtcbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnbWFudWFsQ29sdW1uTW92ZSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDEyMDtcbmNvbnN0IENTU19QTFVHSU4gPSAnaHRfX21hbnVhbENvbHVtbk1vdmUnO1xuY29uc3QgQ1NTX1NIT1dfVUkgPSAnc2hvdy11aSc7XG5jb25zdCBDU1NfT05fTU9WSU5HID0gJ29uLW1vdmluZy0tY29sdW1ucyc7XG5jb25zdCBDU1NfQUZURVJfU0VMRUNUSU9OID0gJ2FmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyc7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIE1hbnVhbENvbHVtbk1vdmVcbiAqIEBjbGFzcyBNYW51YWxDb2x1bW5Nb3ZlXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3MgdG8gY2hhbmdlIGNvbHVtbnMgb3JkZXIuIFRvIG1ha2UgY29sdW1ucyBvcmRlciBwZXJzaXN0ZW50IHRoZSB7QGxpbmsgT3B0aW9ucyNwZXJzaXN0ZW50U3RhdGV9XG4gKiBwbHVnaW4gc2hvdWxkIGJlIGVuYWJsZWQuXG4gKlxuICogQVBJOlxuICogLSBgbW92ZUNvbHVtbmAgLSBtb3ZlIHNpbmdsZSBjb2x1bW4gdG8gdGhlIG5ldyBwb3NpdGlvbi5cbiAqIC0gYG1vdmVDb2x1bW5zYCAtIG1vdmUgbWFueSBjb2x1bW5zIChhcyBhbiBhcnJheSBvZiBpbmRleGVzKSB0byB0aGUgbmV3IHBvc2l0aW9uLlxuICogLSBgZHJhZ0NvbHVtbmAgLSBkcmFnIHNpbmdsZSBjb2x1bW4gdG8gdGhlIG5ldyBwb3NpdGlvbi5cbiAqIC0gYGRyYWdDb2x1bW5zYCAtIGRyYWcgbWFueSBjb2x1bW5zIChhcyBhbiBhcnJheSBvZiBpbmRleGVzKSB0byB0aGUgbmV3IHBvc2l0aW9uLlxuICpcbiAqIFtEb2N1bWVudGF0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1tb3ZpbmcvY29sdW1uLW1vdmluZy5tZCkgZXhwbGFpbiBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRyYWcgYW5kIG1vdmUgYWN0aW9ucy5cbiAqIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBpZiB5b3Ugd2FudCBhcHBseSB2aXN1YWwgY2hhbmdlcyxcbiAqIHlvdSBoYXZlIHRvIGNhbGwgbWFudWFsbHkgdGhlIGByZW5kZXJgIG1ldGhvZCBvbiB0aGUgaW5zdGFuY2Ugb2YgSGFuZHNvbnRhYmxlLlxuICpcbiAqIFRoZSBwbHVnaW4gY3JlYXRlcyBhZGRpdGlvbmFsIGNvbXBvbmVudHMgdG8gbWFrZSBtb3ZpbmcgcG9zc2libHkgdXNpbmcgdXNlciBpbnRlcmZhY2U6XG4gKiAtIGJhY2tsaWdodCAtIGhpZ2hsaWdodCBvZiBzZWxlY3RlZCBjb2x1bW5zLlxuICogLSBndWlkZWxpbmUgLSBsaW5lIHdoaWNoIHNob3dzIHdoZXJlIGNvbHVtbnMgaGFzIGJlZW4gbW92ZWQuXG4gKlxuICogQGNsYXNzIE1hbnVhbENvbHVtbk1vdmVcbiAqIEBwbHVnaW4gTWFudWFsQ29sdW1uTW92ZVxuICovXG52YXIgX2JhY2tsaWdodCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9ndWlkZWxpbmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY29sdW1uc1RvTW92ZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jb3VudENvbHMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcHJlc3NlZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF90YXJnZXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY2FjaGVkRHJvcEluZGV4ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2hvdmVyZWRDb2x1bW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcm9vdEVsZW1lbnRPZmZzZXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaGFzUm93SGVhZGVycyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9maXhlZENvbHVtbnNTdGFydCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9NYW51YWxDb2x1bW5Nb3ZlX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBNYW51YWxDb2x1bW5Nb3ZlIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBiZWhhdmlvciBvZiBzZWxlY3Rpb24gLyBkcmFnZ2luZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgYG1vdXNlZG93bmAgZXZlbnQgcHJvcGVydGllcy5cbiAgICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBWaXN1YWwgY2VsbCBjb29yZGluYXRlcyB3aGVyZSB3YXMgZmlyZWQgZXZlbnQuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gVEQgQ2VsbCByZXByZXNlbnRlZCBhcyBIVE1MRWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBib29sZWFuIHZhbHVlIHRoYXQgYWxsb3dzIG9yIGRpc2FsbG93cyBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIGZvciB0aGF0IHBhcnRpY3VsYXIgYXJlYS5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX01hbnVhbENvbHVtbk1vdmVfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIEJhY2tsaWdodCBVSSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9iYWNrbGlnaHQsIG5ldyBfYmFja2xpZ2h0Mi5kZWZhdWx0KHRoaXMuaG90KSk7XG4gICAgLyoqXG4gICAgICogR3VpZGVsaW5lIFVJIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2d1aWRlbGluZSwgbmV3IF9ndWlkZWxpbmUyLmRlZmF1bHQodGhpcy5ob3QpKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvbHVtbnNUb01vdmUsIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb3VudENvbHMsIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wcmVzc2VkLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfdGFyZ2V0LCB7fSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY2FjaGVkRHJvcEluZGV4LCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2hvdmVyZWRDb2x1bW4sIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm9vdEVsZW1lbnRPZmZzZXQsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2hhc1Jvd0hlYWRlcnMsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZml4ZWRDb2x1bW5zU3RhcnQsIHZvaWQgMCk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fS0VZKCkge1xuICAgIHJldHVybiBQTFVHSU5fS0VZO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBNYW51YWxDb2x1bW5Nb3ZlI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlT25DZWxsTW91c2VEb3duJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtbk1vdmVfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24pLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlT25DZWxsTW91c2VPdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uTW92ZV9icmFuZCwgX3RoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNjcm9sbFZlcnRpY2FsbHknLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uTW92ZV9icmFuZCwgdGhpcywgX29uQWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5KS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyTG9hZERhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxDb2x1bW5Nb3ZlX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJMb2FkRGF0YSkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5idWlsZFBsdWdpblVJKCk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xuXG4gICAgLy8gVE9ETzogbW92ZSBhZGRpbmcgcGx1Z2luIGNsYXNzbmFtZSB0byBCYXNlUGx1Z2luLlxuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5ob3Qucm9vdEVsZW1lbnQsIENTU19QTFVHSU4pO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgbWFudWFsQ29sdW1uTW92ZWBdKEAvYXBpL29wdGlvbnMubWQjbWFudWFsY29sdW1ubW92ZSlcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKTtcbiAgICBzdXBlci51cGRhdGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfUExVR0lOKTtcbiAgICB0aGlzLnVucmVnaXN0ZXJFdmVudHMoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuZGVzdHJveSgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGVsaW5lLCB0aGlzKS5kZXN0cm95KCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIGEgc2luZ2xlIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4IHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAgICogVG8gY2hlY2sgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIGZpbmFsIGluZGV4LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kI2RyYWctYW5kLW1vdmUtYWN0aW9ucy1vZi1tYW51YWxjb2x1bW5tb3ZlLXBsdWdpbikuXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVDb2x1bW5Nb3ZlXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbHVtbk1vdmVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBtb3ZlQ29sdW1uKGNvbHVtbiwgZmluYWxJbmRleCkge1xuICAgIHJldHVybiB0aGlzLm1vdmVDb2x1bW5zKFtjb2x1bW5dLCBmaW5hbEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBhIG11bHRpcGxlIGNvbHVtbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNvbHVtbnMgQXJyYXkgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAgICogVG8gY2hlY2sgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIGZpbmFsIGluZGV4LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kI2RyYWctYW5kLW1vdmUtYWN0aW9ucy1vZi1tYW51YWxjb2x1bW5tb3ZlLXBsdWdpbikuXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVDb2x1bW5Nb3ZlXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbHVtbk1vdmVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBtb3ZlQ29sdW1ucyhjb2x1bW5zLCBmaW5hbEluZGV4KSB7XG4gICAgY29uc3QgZHJvcEluZGV4ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jYWNoZWREcm9wSW5kZXgsIHRoaXMpO1xuICAgIGNvbnN0IG1vdmVQb3NzaWJsZSA9IHRoaXMuaXNNb3ZlUG9zc2libGUoY29sdW1ucywgZmluYWxJbmRleCk7XG4gICAgY29uc3QgYmVmb3JlTW92ZUhvb2sgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ29sdW1uTW92ZScsIGNvbHVtbnMsIGZpbmFsSW5kZXgsIGRyb3BJbmRleCwgbW92ZVBvc3NpYmxlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NhY2hlZERyb3BJbmRleCwgdGhpcywgdW5kZWZpbmVkKTtcbiAgICBpZiAoYmVmb3JlTW92ZUhvb2sgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChtb3ZlUG9zc2libGUpIHtcbiAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGNvbHVtbnMsIGZpbmFsSW5kZXgpO1xuICAgIH1cbiAgICBjb25zdCBtb3ZlUGVyZm9ybWVkID0gbW92ZVBvc3NpYmxlICYmIHRoaXMuaXNDb2x1bW5PcmRlckNoYW5nZWQoY29sdW1ucywgZmluYWxJbmRleCk7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29sdW1uTW92ZScsIGNvbHVtbnMsIGZpbmFsSW5kZXgsIGRyb3BJbmRleCwgbW92ZVBvc3NpYmxlLCBtb3ZlUGVyZm9ybWVkKTtcbiAgICByZXR1cm4gbW92ZVBlcmZvcm1lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmFnIGEgc2luZ2xlIGNvbHVtbiB0byBkcm9wIGluZGV4IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXggdG8gYmUgZHJhZ2dlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRyb3BJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIGRyb3AgaW5kZXggZm9yIHRoZSBtb3ZlZCBjb2x1bW5zLiBQb2ludHMgdG8gd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGRyb3AgdGhlIG1vdmVkIGVsZW1lbnRzLlxuICAgKiBUbyBjaGVjayB2aXN1YWxpemF0aW9uIG9mIGRyb3AgaW5kZXggcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9jb2x1bW5zL2NvbHVtbi1tb3ZpbmcvY29sdW1uLW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFsY29sdW1ubW92ZS1wbHVnaW4pLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29sdW1uTW92ZVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJDb2x1bW5Nb3ZlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZHJhZ0NvbHVtbihjb2x1bW4sIGRyb3BJbmRleCkge1xuICAgIHJldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtjb2x1bW5dLCBkcm9wSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERyYWcgbXVsdGlwbGUgY29sdW1ucyB0byBkcm9wIGluZGV4IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBjb2x1bW5zIEFycmF5IG9mIHZpc3VhbCBjb2x1bW4gaW5kZXhlcyB0byBiZSBkcmFnZ2VkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZHJvcEluZGV4IFZpc3VhbCBjb2x1bW4gaW5kZXgsIGJlaW5nIGEgZHJvcCBpbmRleCBmb3IgdGhlIG1vdmVkIGNvbHVtbnMuIFBvaW50cyB0byB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gZHJvcCB0aGUgbW92ZWQgZWxlbWVudHMuXG4gICAqIFRvIGNoZWNrIHZpc3VhbGl6YXRpb24gb2YgZHJvcCBpbmRleCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kI2RyYWctYW5kLW1vdmUtYWN0aW9ucy1vZi1tYW51YWxjb2x1bW5tb3ZlLXBsdWdpbikuXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVDb2x1bW5Nb3ZlXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbHVtbk1vdmVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBkcmFnQ29sdW1ucyhjb2x1bW5zLCBkcm9wSW5kZXgpIHtcbiAgICBjb25zdCBmaW5hbEluZGV4ID0gdGhpcy5jb3VudEZpbmFsSW5kZXgoY29sdW1ucywgZHJvcEluZGV4KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NhY2hlZERyb3BJbmRleCwgdGhpcywgZHJvcEluZGV4KTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlQ29sdW1ucyhjb2x1bW5zLCBmaW5hbEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgaXQncyBwb3NzaWJsZSB0byBtb3ZlIGNvbHVtbnMgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uIFNvbWUgb2YgdGhlIGFjdGlvbnMgYXJlbid0XG4gICAqIHBvc3NpYmxlLCBpLmUuIFlvdSBjYW7igJl0IG1vdmUgbW9yZSB0aGFuIG9uZSBlbGVtZW50IHRvIHRoZSBsYXN0IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBtb3ZlZENvbHVtbnMgQXJyYXkgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAgICogVG8gY2hlY2sgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIGZpbmFsIGluZGV4LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kI2RyYWctYW5kLW1vdmUtYWN0aW9ucy1vZi1tYW51YWxjb2x1bW5tb3ZlLXBsdWdpbikuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNNb3ZlUG9zc2libGUobW92ZWRDb2x1bW5zLCBmaW5hbEluZGV4KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtcblxuICAgIC8vIEFuIGF0dGVtcHQgdG8gdHJhbnNmZXIgbW9yZSBjb2x1bW5zIHRvIHN0YXJ0IGRlc3RpbmF0aW9uIHRoYW4gaXMgcG9zc2libGUgKG9ubHkgd2hlbiBtb3ZpbmcgZnJvbSB0aGUgdG9wIHRvIHRoZSBib3R0b20pLlxuICAgIGNvbnN0IHRvb0hpZ2hEZXN0aW5hdGlvbkluZGV4ID0gbW92ZWRDb2x1bW5zLmxlbmd0aCArIGZpbmFsSW5kZXggPiBsZW5ndGg7XG4gICAgY29uc3QgdG9vTG93RGVzdGluYXRpb25JbmRleCA9IGZpbmFsSW5kZXggPCAwO1xuICAgIGNvbnN0IHRvb0xvd01vdmVkQ29sdW1uSW5kZXggPSBtb3ZlZENvbHVtbnMuc29tZShtb3ZlZENvbHVtbiA9PiBtb3ZlZENvbHVtbiA8IDApO1xuICAgIGNvbnN0IHRvb0hpZ2hNb3ZlZENvbHVtbkluZGV4ID0gbW92ZWRDb2x1bW5zLnNvbWUobW92ZWRDb2x1bW4gPT4gbW92ZWRDb2x1bW4gPj0gbGVuZ3RoKTtcbiAgICBpZiAodG9vSGlnaERlc3RpbmF0aW9uSW5kZXggfHwgdG9vTG93RGVzdGluYXRpb25JbmRleCB8fCB0b29Mb3dNb3ZlZENvbHVtbkluZGV4IHx8IHRvb0hpZ2hNb3ZlZENvbHVtbkluZGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBvcmRlciBvZiBjb2x1bW5zIHdhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBtb3ZlZENvbHVtbnMgQXJyYXkgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50cyB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi5cbiAgICogVG8gY2hlY2sgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIGZpbmFsIGluZGV4LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXQgW2RvY3VtZW50YXRpb25dKEAvZ3VpZGVzL2NvbHVtbnMvY29sdW1uLW1vdmluZy9jb2x1bW4tbW92aW5nLm1kI2RyYWctYW5kLW1vdmUtYWN0aW9ucy1vZi1tYW51YWxjb2x1bW5tb3ZlLXBsdWdpbikuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNDb2x1bW5PcmRlckNoYW5nZWQobW92ZWRDb2x1bW5zLCBmaW5hbEluZGV4KSB7XG4gICAgcmV0dXJuIG1vdmVkQ29sdW1ucy5zb21lKChjb2x1bW4sIG5yT2ZNb3ZlZEVsZW1lbnQpID0+IGNvbHVtbiAtIG5yT2ZNb3ZlZEVsZW1lbnQgIT09IGZpbmFsSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBmaW5hbCBjb2x1bW4gaW5kZXggZnJvbSB0aGUgZHJvcCBpbmRleC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gbW92ZWRDb2x1bW5zIEFycmF5IG9mIHZpc3VhbCBjb2x1bW4gaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRyb3BJbmRleCBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIGRyb3AgaW5kZXggZm9yIHRoZSBtb3ZlZCBjb2x1bW5zLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBWaXN1YWwgY29sdW1uIGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgY29sdW1ucy5cbiAgICovXG4gIGNvdW50RmluYWxJbmRleChtb3ZlZENvbHVtbnMsIGRyb3BJbmRleCkge1xuICAgIGNvbnN0IG51bWJlck9mQ29sdW1uc0xvd2VyVGhhbkRyb3BJbmRleCA9ICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKG1vdmVkQ29sdW1ucywgKG51bWJlck9mQ29sdW1ucywgY3VycmVudENvbHVtbkluZGV4KSA9PiB7XG4gICAgICBpZiAoY3VycmVudENvbHVtbkluZGV4IDwgZHJvcEluZGV4KSB7XG4gICAgICAgIG51bWJlck9mQ29sdW1ucyArPSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bWJlck9mQ29sdW1ucztcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gZHJvcEluZGV4IC0gbnVtYmVyT2ZDb2x1bW5zTG93ZXJUaGFuRHJvcEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHN1bSBvZiB0aGUgd2lkdGhzIG9mIGNvbHVtbnMgaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gZnJvbUNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9Db2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldENvbHVtbnNXaWR0aChmcm9tQ29sdW1uLCB0b0NvbHVtbikge1xuICAgIGNvbnN0IGNvbHVtbk1hcHBlciA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO1xuICAgIGxldCBjb2x1bW5zV2lkdGggPSAwO1xuICAgIGZvciAobGV0IHZpc3VhbENvbHVtbkluZGV4ID0gZnJvbUNvbHVtbjsgdmlzdWFsQ29sdW1uSW5kZXggPD0gdG9Db2x1bW47IHZpc3VhbENvbHVtbkluZGV4ICs9IDEpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSBqdXN0IGBnZXRDb2xXaWR0aGAgKGV2ZW4gd2l0aG91dCBpbmRleGVzIHRyYW5zbGF0aW9uKSBhcyBpdCBkb2Vzbid0IHJldHVybiBwcm9wZXIgdmFsdWVzXG4gICAgICAvLyB3aGVuIGNvbHVtbiBpcyBzdHJldGNoZWQuXG4gICAgICBjb25zdCByZW5kZXJhYmxlSW5kZXggPSBjb2x1bW5NYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2aXN1YWxDb2x1bW5JbmRleCk7XG4gICAgICBpZiAodmlzdWFsQ29sdW1uSW5kZXggPCAwKSB7XG4gICAgICAgIGNvbHVtbnNXaWR0aCArPSB0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCkgfHwgMDtcbiAgICAgIH0gZWxzZSBpZiAocmVuZGVyYWJsZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbHVtbnNXaWR0aCArPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKHJlbmRlcmFibGVJbmRleCkgfHwgMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbnNXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyBpbml0aWFsIHNldHRpbmdzIHdoZW4gcGVyc2lzdGVudCBzdGF0ZSBpcyBzYXZlZCBvciB3aGVuIHBsdWdpbiB3YXMgaW5pdGlhbGl6ZWQgYXMgYW4gYXJyYXkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtb3ZlQnlTZXR0aW5nc09yTG9hZCgpIHtcbiAgICBjb25zdCBwbHVnaW5TZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luU2V0dGluZ3MpKSB7XG4gICAgICB0aGlzLm1vdmVDb2x1bW5zKHBsdWdpblNldHRpbmdzLCAwKTtcbiAgICB9IGVsc2UgaWYgKHBsdWdpblNldHRpbmdzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHBlcnNpc3RlbnRTdGF0ZSA9IHRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO1xuICAgICAgaWYgKHBlcnNpc3RlbnRTdGF0ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5tb3ZlQ29sdW1ucyhwZXJzaXN0ZW50U3RhdGUsIDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIGNvbHVtbiBpcyBpbiB0aGUgZml4ZWRDb2x1bW5zVG9wIHNlY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleCB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0ZpeGVkQ29sdW1uc1N0YXJ0KGNvbHVtbikge1xuICAgIHJldHVybiBjb2x1bW4gPCB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBtYW51YWwgY29sdW1uIHBvc2l0aW9ucyB0byB0aGUgcGVyc2lzdGVudCBzdGF0ZSAodGhlIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX0gb3B0aW9uIGhhcyB0byBiZSBlbmFibGVkKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQGZpcmVzIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZVNhdmVcbiAgICovXG4gIHBlcnNpc3RlbnRTdGF0ZVNhdmUoKSB7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ3BlcnNpc3RlbnRTdGF0ZVNhdmUnLCAnbWFudWFsQ29sdW1uTW92ZScsIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKTsgLy8gVGhlIGBQZXJzaXN0ZW50U3RhdGVgIHBsdWdpbiBzaG91bGQgYmUgcmVmYWN0b3JlZC5cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgbWFudWFsIGNvbHVtbiBwb3NpdGlvbnMgZnJvbSB0aGUgcGVyc2lzdGVudCBzdGF0ZSAodGhlIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX0gb3B0aW9uIGhhcyB0byBiZSBlbmFibGVkKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQGZpcmVzIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZUxvYWRcbiAgICogQHJldHVybnMge0FycmF5fSBTdG9yZWQgc3RhdGUuXG4gICAqL1xuICBwZXJzaXN0ZW50U3RhdGVMb2FkKCkge1xuICAgIGNvbnN0IHN0b3JlZFN0YXRlID0ge307XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ3BlcnNpc3RlbnRTdGF0ZUxvYWQnLCAnbWFudWFsQ29sdW1uTW92ZScsIHN0b3JlZFN0YXRlKTtcbiAgICByZXR1cm4gc3RvcmVkU3RhdGUudmFsdWUgPyBzdG9yZWRTdGF0ZS52YWx1ZSA6IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGFuIGFycmF5IG9mIGluZGV4ZXMgYmFzZWQgb24gYWN0dWFsIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluZGV4LlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBwcmVwYXJlQ29sdW1uc1RvTW92aW5nKHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSBbXTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHN0YXJ0LCBlbmQsIGkgPT4ge1xuICAgICAgc2VsZWN0ZWRDb2x1bW5zLnB1c2goaSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIFVJIHZpc3VhbCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hQb3NpdGlvbnMoKSB7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlID0gdGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO1xuICAgIGlmICh0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3ZlcmVkQ29sdW1uLCB0aGlzKSkgJiYgZmlyc3RWaXNpYmxlID4gMCkge1xuICAgICAgdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh7XG4gICAgICAgIGNvbDogdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZpcnN0VmlzaWJsZSAtIDEsIC0xKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHd0VGFibGUgPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlO1xuICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudDtcbiAgICBjb25zdCBzY3JvbGxTdGFydCA9IHR5cGVvZiBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxYID09PSAnbnVtYmVyJyA/IHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFggOiBzY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgIGxldCB0ZE9mZnNldFN0YXJ0ID0gdGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRMZWZ0ICsgdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3ZlcmVkQ29sdW1uLCB0aGlzKSAtIDEpO1xuICAgIGNvbnN0IGhpZGVyV2lkdGggPSB3dFRhYmxlLmhpZGVyLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IHRib2R5T2Zmc2V0TGVmdCA9IHd0VGFibGUuVEJPRFkub2Zmc2V0TGVmdDtcbiAgICBjb25zdCBiYWNrbGlnaHRFbGVtTWFyZ2luU3RhcnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuZ2V0T2Zmc2V0KCkuc3RhcnQ7XG4gICAgY29uc3QgYmFja2xpZ2h0RWxlbVdpZHRoID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmdldFNpemUoKS53aWR0aDtcbiAgICBsZXQgcm93SGVhZGVyV2lkdGggPSAwO1xuICAgIGxldCBtb3VzZU9mZnNldFN0YXJ0ID0gMDtcbiAgICBpZiAodGhpcy5ob3QuaXNSdGwoKSkge1xuICAgICAgY29uc3Qgcm9vdFdpbmRvdyA9IHRoaXMuaG90LnJvb3RXaW5kb3c7XG4gICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9ICgwLCBfZWxlbWVudC5vdXRlcldpZHRoKSh0aGlzLmhvdC5yb290RWxlbWVudCk7XG4gICAgICBjb25zdCBncmlkTW9zdFJpZ2h0UG9zID0gcm9vdFdpbmRvdy5pbm5lcldpZHRoIC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290RWxlbWVudE9mZnNldCwgdGhpcykgLSBjb250YWluZXJXaWR0aDtcbiAgICAgIG1vdXNlT2Zmc2V0U3RhcnQgPSByb290V2luZG93LmlubmVyV2lkdGggLSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuZXZlbnRQYWdlWCAtIGdyaWRNb3N0UmlnaHRQb3MgLSAoc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCA9PT0gdW5kZWZpbmVkID8gc2Nyb2xsU3RhcnQgOiAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW91c2VPZmZzZXRTdGFydCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5ldmVudFBhZ2VYIC0gKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm9vdEVsZW1lbnRPZmZzZXQsIHRoaXMpIC0gKHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFggPT09IHVuZGVmaW5lZCA/IHNjcm9sbFN0YXJ0IDogMCkpO1xuICAgIH1cbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYXNSb3dIZWFkZXJzLCB0aGlzKSkge1xuICAgICAgcm93SGVhZGVyV2lkdGggPSB0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zmc2V0V2lkdGg7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ob3ZlcmVkQ29sdW1uLCB0aGlzKSkpIHtcbiAgICAgIHRkT2Zmc2V0U3RhcnQgKz0gc2Nyb2xsU3RhcnQ7XG4gICAgfVxuICAgIHRkT2Zmc2V0U3RhcnQgKz0gcm93SGVhZGVyV2lkdGg7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG92ZXJlZENvbHVtbiwgdGhpcykgPCAwKSB7XG4gICAgICAvLyBpZiBob3ZlciBvbiByb3dIZWFkZXJcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZpeGVkQ29sdW1uc1N0YXJ0LCB0aGlzKSA+IDApIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmNvbCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuY29sID0gZmlyc3RWaXNpYmxlID4gMCA/IGZpcnN0VmlzaWJsZSAtIDEgOiBmaXJzdFZpc2libGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuVEQub2Zmc2V0V2lkdGggLyAyICsgdGRPZmZzZXRTdGFydCA8PSBtb3VzZU9mZnNldFN0YXJ0KSB7XG4gICAgICBjb25zdCBuZXdDb29yZHNDb2wgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMpID49IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY291bnRDb2xzLCB0aGlzKSA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY291bnRDb2xzLCB0aGlzKSAtIDEgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMpO1xuXG4gICAgICAvLyBpZiBob3ZlciBvbiByaWdodCBwYXJ0IG9mIFREXG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuY29sID0gbmV3Q29vcmRzQ29sICsgMTtcbiAgICAgIC8vIHVuZm9ydHVuYXRlbHkgZmlyc3QgY29sdW1uIGlzIGJpZ2dlciB0aGFuIHJlc3RcbiAgICAgIHRkT2Zmc2V0U3RhcnQgKz0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLlRELm9mZnNldFdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbHNld2hlcmUgb24gdGFibGVcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5jb2wgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMpO1xuICAgIH1cbiAgICBsZXQgYmFja2xpZ2h0U3RhcnQgPSBtb3VzZU9mZnNldFN0YXJ0O1xuICAgIGxldCBndWlkZWxpbmVTdGFydCA9IHRkT2Zmc2V0U3RhcnQ7XG4gICAgaWYgKG1vdXNlT2Zmc2V0U3RhcnQgKyBiYWNrbGlnaHRFbGVtV2lkdGggKyBiYWNrbGlnaHRFbGVtTWFyZ2luU3RhcnQgPj0gaGlkZXJXaWR0aCkge1xuICAgICAgLy8gcHJldmVudCBkaXNwbGF5IGJhY2tsaWdodCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdGFibGVcbiAgICAgIGJhY2tsaWdodFN0YXJ0ID0gaGlkZXJXaWR0aCAtIGJhY2tsaWdodEVsZW1XaWR0aCAtIGJhY2tsaWdodEVsZW1NYXJnaW5TdGFydDtcbiAgICB9IGVsc2UgaWYgKG1vdXNlT2Zmc2V0U3RhcnQgKyBiYWNrbGlnaHRFbGVtTWFyZ2luU3RhcnQgPCB0Ym9keU9mZnNldExlZnQgKyByb3dIZWFkZXJXaWR0aCkge1xuICAgICAgLy8gcHJldmVudCBkaXNwbGF5IGJhY2tsaWdodCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YWJsZVxuICAgICAgYmFja2xpZ2h0U3RhcnQgPSB0Ym9keU9mZnNldExlZnQgKyByb3dIZWFkZXJXaWR0aCArIE1hdGguYWJzKGJhY2tsaWdodEVsZW1NYXJnaW5TdGFydCk7XG4gICAgfVxuICAgIGlmICh0ZE9mZnNldFN0YXJ0ID49IGhpZGVyV2lkdGggLSAxKSB7XG4gICAgICAvLyBwcmV2ZW50IGRpc3BsYXkgZ3VpZGVsaW5lIG91dHNpZGUgdGhlIHRhYmxlXG4gICAgICBndWlkZWxpbmVTdGFydCA9IGhpZGVyV2lkdGggLSAxO1xuICAgIH0gZWxzZSBpZiAoZ3VpZGVsaW5lU3RhcnQgPT09IDApIHtcbiAgICAgIC8vIGd1aWRlbGluZSBoYXMgZ290IGBtYXJnaW4tbGVmdDogLTFweGAgYXMgZGVmYXVsdFxuICAgICAgZ3VpZGVsaW5lU3RhcnQgPSAxO1xuICAgIH0gZWxzZSBpZiAoc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCAhPT0gdW5kZWZpbmVkICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaG92ZXJlZENvbHVtbiwgdGhpcykgPCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZpeGVkQ29sdW1uc1N0YXJ0LCB0aGlzKSkge1xuICAgICAgZ3VpZGVsaW5lU3RhcnQgLT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290RWxlbWVudE9mZnNldCwgdGhpcykgPD0gc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm9vdEVsZW1lbnRPZmZzZXQsIHRoaXMpIDogMDtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldFBvc2l0aW9uKG51bGwsIGJhY2tsaWdodFN0YXJ0KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlbGluZSwgdGhpcykuc2V0UG9zaXRpb24obnVsbCwgZ3VpZGVsaW5lU3RhcnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBldmVudHMgdXNlZCBieSB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZG9jdW1lbnRFbGVtZW50XG4gICAgfSA9IHRoaXMuaG90LnJvb3REb2N1bWVudDtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ21vdXNlbW92ZScsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxDb2x1bW5Nb3ZlX2JyYW5kLCB0aGlzLCBfb25Nb3VzZU1vdmUpLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ21vdXNldXAnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uTW92ZV9icmFuZCwgdGhpcywgX29uTW91c2VVcCkuY2FsbCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kcyB0aGUgZXZlbnRzIHVzZWQgYnkgdGhlIHBsdWdpbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKTtcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwbHVnaW4ncyBVSS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1aWxkUGx1Z2luVUkoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmJ1aWxkKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmJ1aWxkKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRoZSBgYWZ0ZXJMb2FkRGF0YWAgaG9vay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5kZXN0cm95KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuTWFudWFsQ29sdW1uTW92ZSA9IE1hbnVhbENvbHVtbk1vdmU7XG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24oZXZlbnQsIGNvb3JkcywgVEQsIGNvbnRyb2xsZXIpIHtcbiAgY29uc3Qgd3RUYWJsZSA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGU7XG4gIGNvbnN0IGlzSGVhZGVyU2VsZWN0aW9uID0gdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAvLyBUaGlzIGJsb2NrIGFjdGlvbiBzaG91bGRuJ3QgYmUgaGFuZGxlZCBiZWxvdy5cbiAgY29uc3QgaXNTb3J0aW5nRWxlbWVudCA9ICgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCAnc29ydEFjdGlvbicpO1xuICBpZiAoIXNlbGVjdGlvbiB8fCAhaXNIZWFkZXJTZWxlY3Rpb24gfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wcmVzc2VkLCB0aGlzKSB8fCBldmVudC5idXR0b24gIT09IDAgfHwgaXNTb3J0aW5nRWxlbWVudCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcHJlc3NlZCwgdGhpcywgZmFsc2UpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uc1RvTW92ZSwgdGhpcykubGVuZ3RoID0gMDtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBbQ1NTX09OX01PVklORywgQ1NTX1NIT1dfVUldKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ3VpZGVsaW5lSXNOb3RSZWFkeSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGVsaW5lLCB0aGlzKS5pc0J1aWx0KCkgJiYgIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGVsaW5lLCB0aGlzKS5pc0FwcGVuZGVkKCk7XG4gIGNvbnN0IGJhY2tsaWdodElzTm90UmVhZHkgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuaXNCdWlsdCgpICYmICFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuaXNBcHBlbmRlZCgpO1xuICBpZiAoZ3VpZGVsaW5lSXNOb3RSZWFkeSAmJiBiYWNrbGlnaHRJc05vdFJlYWR5KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmFwcGVuZFRvKHd0VGFibGUuaGlkZXIpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5hcHBlbmRUbyh3dFRhYmxlLmhpZGVyKTtcbiAgfVxuICBjb25zdCB7XG4gICAgZnJvbSxcbiAgICB0b1xuICB9ID0gc2VsZWN0aW9uO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWluKGZyb20uY29sLCB0by5jb2wpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLmNvbCwgdG8uY29sKTtcbiAgaWYgKGNvb3Jkcy5yb3cgPCAwICYmIGNvb3Jkcy5jb2wgPj0gc3RhcnQgJiYgY29vcmRzLmNvbCA8PSBlbmQpIHtcbiAgICBjb250cm9sbGVyLmNvbHVtbiA9IHRydWU7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wcmVzc2VkLCB0aGlzLCB0cnVlKTtcbiAgICBjb25zdCBldmVudE9mZnNldFggPSBURC5maXJzdENoaWxkID8gKDAsIF9ldmVudC5vZmZzZXRSZWxhdGl2ZVRvKShldmVudCwgVEQuZmlyc3RDaGlsZCkueCA6IGV2ZW50Lm9mZnNldFg7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmV2ZW50UGFnZVggPSBldmVudC5wYWdlWDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMsIGNvb3Jkcy5jb2wpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5URCA9IFREO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5jb2wgPSBjb29yZHMuY29sO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29sdW1uc1RvTW92ZSwgdGhpcywgdGhpcy5wcmVwYXJlQ29sdW1uc1RvTW92aW5nKHN0YXJ0LCBlbmQpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hhc1Jvd0hlYWRlcnMsIHRoaXMsICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvdW50Q29scywgdGhpcywgdGhpcy5ob3QuY291bnRDb2xzKCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZml4ZWRDb2x1bW5zU3RhcnQsIHRoaXMsIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcm9vdEVsZW1lbnRPZmZzZXQsIHRoaXMsICgwLCBfZWxlbWVudC5vZmZzZXQpKHRoaXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0KTtcbiAgICBjb25zdCBjb3VudENvbHVtbnNGcm9tID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYXNSb3dIZWFkZXJzLCB0aGlzKSA/IC0xIDogMDtcbiAgICBjb25zdCB0b3BQb3MgPSB3dFRhYmxlLmhvbGRlci5zY3JvbGxUb3AgKyB3dFRhYmxlLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSArIDE7XG4gICAgY29uc3QgZml4ZWRDb2x1bW5zU3RhcnQgPSBjb29yZHMuY29sIDwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9maXhlZENvbHVtbnNTdGFydCwgdGhpcyk7XG4gICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uID0gdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO1xuICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLmFicyhldmVudE9mZnNldFggLSAodGhpcy5ob3QuaXNSdGwoKSA/IFRELm9mZnNldFdpZHRoIDogMCkpO1xuICAgIGNvbnN0IGlubGluZU9mZnNldCA9IHRoaXMuZ2V0Q29sdW1uc1dpZHRoKHN0YXJ0LCBjb29yZHMuY29sIC0gMSkgKyBvZmZzZXRYO1xuICAgIGNvbnN0IGlubGluZVBvcyA9IHRoaXMuZ2V0Q29sdW1uc1dpZHRoKGNvdW50Q29sdW1uc0Zyb20sIHN0YXJ0IC0gMSkgKyAoZml4ZWRDb2x1bW5zU3RhcnQgPyBob3Jpem9udGFsU2Nyb2xsUG9zaXRpb24gOiAwKSArIGlubGluZU9mZnNldDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuc2V0UG9zaXRpb24odG9wUG9zLCBpbmxpbmVQb3MpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKHN0YXJ0LCBlbmQpLCB3dFRhYmxlLmhpZGVyLm9mZnNldEhlaWdodCAtIHRvcFBvcyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldE9mZnNldChudWxsLCAtaW5saW5lT2Zmc2V0KTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfT05fTU9WSU5HKTtcbiAgfSBlbHNlIHtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfQUZURVJfU0VMRUNUSU9OKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbnNUb01vdmUsIHRoaXMpLmxlbmd0aCA9IDA7XG4gIH1cbn1cbi8qKlxuICogJ21vdXNlTW92ZScgZXZlbnQgY2FsbGJhY2suIEZpcmVkIHdoZW4gcG9pbnRlciBtb3ZlIG9uIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IGBtb3VzZW1vdmVgIGV2ZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vdXNlTW92ZShldmVudCkge1xuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJlc3NlZCwgdGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmV2ZW50UGFnZVggPSBldmVudC5wYWdlWDtcbiAgdGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG59XG4vKipcbiAqICdiZWZvcmVPbkNlbGxNb3VzZU92ZXInIGhvb2sgY2FsbGJhY2suIEZpcmVkIHdoZW4gcG9pbnRlciB3YXMgb3ZlciBjZWxsLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgYG1vdXNlb3ZlcmAgZXZlbnQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFZpc3VhbCBjZWxsIGNvb3JkaW5hdGVzIHdoZXJlIHdhcyBmaXJlZCBldmVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFREIENlbGwgcmVwcmVzZW50ZWQgYXMgSFRNTEVsZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBhbGxvd3Mgb3IgZGlzYWxsb3dzIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24gZm9yIHRoYXQgcGFydGljdWxhciBhcmVhLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZU92ZXIoZXZlbnQsIGNvb3JkcywgVEQsIGNvbnRyb2xsZXIpIHtcbiAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gIGlmICghc2VsZWN0ZWRSYW5nZSB8fCAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wcmVzc2VkLCB0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5zVG9Nb3ZlLCB0aGlzKS5pbmRleE9mKGNvb3Jkcy5jb2wpID4gLTEpIHtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfU0hPV19VSSk7XG4gIH0gZWxzZSB7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLmhvdC5yb290RWxlbWVudCwgQ1NTX1NIT1dfVUkpO1xuICB9XG4gIGNvbnRyb2xsZXIucm93ID0gdHJ1ZTtcbiAgY29udHJvbGxlci5jb2x1bW4gPSB0cnVlO1xuICBjb250cm9sbGVyLmNlbGwgPSB0cnVlO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMsIGNvb3Jkcy5jb2wpO1xuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuVEQgPSBURDtcbn1cbi8qKlxuICogYG9uTW91c2VVcGAgaG9vayBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gX29uTW91c2VVcCgpIHtcbiAgY29uc3QgdGFyZ2V0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmNvbDtcbiAgY29uc3QgY29sdW1uc0xlbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uc1RvTW92ZSwgdGhpcykubGVuZ3RoO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hvdmVyZWRDb2x1bW4sIHRoaXMsIHVuZGVmaW5lZCk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcHJlc3NlZCwgdGhpcywgZmFsc2UpO1xuICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBbQ1NTX09OX01PVklORywgQ1NTX1NIT1dfVUksIENTU19BRlRFUl9TRUxFQ1RJT05dKTtcbiAgaWYgKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkge1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5ob3Qucm9vdEVsZW1lbnQsIENTU19BRlRFUl9TRUxFQ1RJT04pO1xuICB9XG4gIGlmIChjb2x1bW5zTGVuIDwgMSB8fCB0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmaXJzdE1vdmVkVmlzdWFsQ29sdW1uID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5zVG9Nb3ZlLCB0aGlzKVswXTtcbiAgY29uc3QgZmlyc3RNb3ZlZFBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmaXJzdE1vdmVkVmlzdWFsQ29sdW1uKTtcbiAgY29uc3QgbW92ZVBlcmZvcm1lZCA9IHRoaXMuZHJhZ0NvbHVtbnMoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5zVG9Nb3ZlLCB0aGlzKSwgdGFyZ2V0KTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5zVG9Nb3ZlLCB0aGlzKS5sZW5ndGggPSAwO1xuICBpZiAobW92ZVBlcmZvcm1lZCA9PT0gdHJ1ZSkge1xuICAgIHRoaXMucGVyc2lzdGVudFN0YXRlU2F2ZSgpO1xuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICAgIHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmaXJzdE1vdmVkUGh5c2ljYWxDb2x1bW4pO1xuICAgIGNvbnN0IHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvblN0YXJ0ICsgY29sdW1uc0xlbiAtIDE7XG4gICAgdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHlgIGhvb2sgY2FsbGJhY2suIEZpcmVkIHRoZSB0YWJsZSB3YXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5LlxuICovXG5mdW5jdGlvbiBfb25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKSB7XG4gIGNvbnN0IHd0VGFibGUgPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlO1xuICBjb25zdCBoZWFkZXJIZWlnaHQgPSB3dFRhYmxlLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSArIDE7XG4gIGNvbnN0IHNjcm9sbFRvcCA9IHd0VGFibGUuaG9sZGVyLnNjcm9sbFRvcDtcbiAgY29uc3QgcG9zVG9wID0gaGVhZGVySGVpZ2h0ICsgc2Nyb2xsVG9wO1xuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuc2V0UG9zaXRpb24ocG9zVG9wKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldFNpemUobnVsbCwgd3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQgLSBwb3NUb3ApO1xufVxuZnVuY3Rpb24gX29uQWZ0ZXJMb2FkRGF0YSgpIHtcbiAgdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9zdHJpbmdcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmNvbnN0IFNUQVRFX0lOSVRJQUxJWkVEID0gMDtcbmNvbnN0IFNUQVRFX0JVSUxUID0gMTtcbmNvbnN0IFNUQVRFX0FQUEVOREVEID0gMjtcbmNvbnN0IFVOSVQgPSAncHgnO1xuXG4vKipcbiAqIEBjbGFzc1xuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQmFzZVVJIHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBIYW5kc29udGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIHVpIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfZWxlbWVudFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgYnVpbGQgc3RhdGUgb2YgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdGVcIiwgU1RBVEVfSU5JVElBTElaRUQpO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIFwic3RhcnRcIiBwaHlzaWNhbCBDU1MgcHJvcGVydHkgbmFtZSB1c2VkIHdpdGhpbiB0aGUgY2xhc3MgZGVwZW5kaW5nIG9uIHdoYXQgZG9jdW1lbnRcbiAgICAgKiBsYXlvdXQgZGlyZWN0aW9uIHRoZSBsaWJyYXJ5IHJ1bnMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlubGluZVByb3BlcnR5XCIsIHZvaWQgMCk7XG4gICAgdGhpcy5ob3QgPSBob3RJbnN0YW5jZTtcbiAgICB0aGlzLmlubGluZVByb3BlcnR5ID0gaG90SW5zdGFuY2UuaXNSdGwoKSA/ICdyaWdodCcgOiAnbGVmdCc7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNyZWF0ZWQgVUkgZWxlbWVudHMgdG8gdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHdyYXBwZXIgRWxlbWVudCB3aGljaCBhcmUgcGFyZW50IGZvciBvdXIgVUkgZWxlbWVudC5cbiAgICovXG4gIGFwcGVuZFRvKHdyYXBwZXIpIHtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9BUFBFTkRFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGNyZWF0ZSBVSSBlbGVtZW50LiBPbmx5IGNyZWF0ZSwgd2l0aG91dCBhcHBlbmQgdG8gdGFibGUuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfSU5JVElBTElaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfQlVJTFQ7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciByZW1vdmUgVUkgZWxlbWVudC5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuaXNBcHBlbmRlZCgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9JTklUSUFMSVpFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBVSSBlbGVtZW50IGFyZSBhcHBlbmRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FwcGVuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBTVEFURV9BUFBFTkRFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBVSSBlbGVtZW50IGFyZSBidWlsdC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0J1aWx0KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID49IFNUQVRFX0JVSUxUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlciBmb3IgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgTmV3IHRvcCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGlubGluZVBvc2l0aW9uIE5ldyBsZWZ0L3JpZ2h0IChkZXBlbmRzIG9uIExUUi9SVEwgZG9jdW1lbnQgbW9kZSkgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBzZXRQb3NpdGlvbih0b3AsIGlubGluZVBvc2l0aW9uKSB7XG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzTnVtZXJpYykodG9wKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS50b3AgPSB0b3AgKyBVTklUO1xuICAgIH1cbiAgICBpZiAoKDAsIF9udW1iZXIuaXNOdW1lcmljKShpbmxpbmVQb3NpdGlvbikpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV0gPSBpbmxpbmVQb3NpdGlvbiArIFVOSVQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgdGhlIGVsZW1lbnQgcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWlucyBsZWZ0IGFuZCB0b3AgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBnZXRQb3NpdGlvbigpIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuX2VsZW1lbnQuc3R5bGU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogc3R5bGUudG9wID8gcGFyc2VJbnQoc3R5bGUudG9wLCAxMCkgOiAwLFxuICAgICAgc3RhcnQ6IHN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldID8gcGFyc2VJbnQoc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sIDEwKSA6IDBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlciBmb3IgdGhlIGVsZW1lbnQgc2l6ZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIE5ldyB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBOZXcgaGVpZ2h0IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzTnVtZXJpYykod2lkdGgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyBVTklUO1xuICAgIH1cbiAgICBpZiAoKDAsIF9udW1iZXIuaXNOdW1lcmljKShoZWlnaHQpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArIFVOSVQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgdGhlIGVsZW1lbnQgcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWlucyBoZWlnaHQgYW5kIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgZ2V0U2l6ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGggPyBwYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLCAxMCkgOiAwLFxuICAgICAgaGVpZ2h0OiB0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCA/IHBhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0ZXIgZm9yIHRoZSBlbGVtZW50IG9mZnNldC4gT2Zmc2V0IG1lYW5zIG1hcmdpblRvcCBhbmQgbWFyZ2luTGVmdCBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvcCBOZXcgbWFyZ2luIHRvcCBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGlubGluZU9mZnNldCBOZXcgbWFyZ2luIGxlZnQvcmlnaHQgKGRlcGVuZHMgb24gTFRSL1JUTCBkb2N1bWVudCBtb2RlKSBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHNldE9mZnNldCh0b3AsIGlubGluZU9mZnNldCkge1xuICAgIGlmICgoMCwgX251bWJlci5pc051bWVyaWMpKHRvcCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wID0gdG9wICsgVU5JVDtcbiAgICB9XG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzTnVtZXJpYykoaW5saW5lT2Zmc2V0KSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHsoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KSh0aGlzLmlubGluZVByb3BlcnR5KX1gXSA9IGlubGluZU9mZnNldCArIFVOSVQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgdGhlIGVsZW1lbnQgb2Zmc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbnMgdG9wIGFuZCBsZWZ0IG9mZnNldCBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIGdldE9mZnNldCgpIHtcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMuX2VsZW1lbnQuc3R5bGU7XG4gICAgY29uc3QgaW5saW5lUHJvcCA9IGBtYXJnaW4keygwLCBfc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3QpKHRoaXMuaW5saW5lUHJvcGVydHkpfWA7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogc3R5bGUubWFyZ2luVG9wID8gcGFyc2VJbnQoc3R5bGUubWFyZ2luVG9wLCAxMCkgOiAwLFxuICAgICAgc3RhcnQ6IHN0eWxlW2lubGluZVByb3BdID8gcGFyc2VJbnQoc3R5bGVbaW5saW5lUHJvcF0sIDEwKSA6IDBcbiAgICB9O1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBCYXNlVUk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IENTU19DTEFTU05BTUUgPSAnaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCc7XG5cbi8qKlxuICogQGNsYXNzIEJhY2tsaWdodFVJXG4gKiBAdXRpbFxuICovXG5jbGFzcyBCYWNrbGlnaHRVSSBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICAvKipcbiAgICogQ3VzdG9tIGNsYXNzTmFtZSBvbiBidWlsZCBwcm9jZXNzLlxuICAgKi9cbiAgYnVpbGQoKSB7XG4gICAgc3VwZXIuYnVpbGQoKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuX2VsZW1lbnQsIENTU19DTEFTU05BTUUpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBCYWNrbGlnaHRVSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuY29uc3QgQ1NTX0NMQVNTTkFNRSA9ICdodF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5lJztcblxuLyoqXG4gKiBAY2xhc3MgR3VpZGVsaW5lVUlcbiAqIEB1dGlsXG4gKi9cbmNsYXNzIEd1aWRlbGluZVVJIGV4dGVuZHMgX2Jhc2UuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBDdXN0b20gY2xhc3NOYW1lIG9uIGJ1aWxkIHByb2Nlc3MuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICBzdXBlci5idWlsZCgpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5fZWxlbWVudCwgQ1NTX0NMQVNTTkFNRSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEd1aWRlbGluZVVJOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9tYW51YWxDb2x1bW5SZXNpemUgPSByZXF1aXJlKFwiLi9tYW51YWxDb2x1bW5SZXNpemVcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfbWFudWFsQ29sdW1uUmVzaXplLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9tYW51YWxDb2x1bW5SZXNpemUuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5NYW51YWxDb2x1bW5SZXNpemUgPSBfbWFudWFsQ29sdW1uUmVzaXplLk1hbnVhbENvbHVtblJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2xhdGlvbnNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vLyBEZXZlbG9wZXIgbm90ZSEgV2hlbmV2ZXIgeW91IG1ha2UgYSBjaGFuZ2UgaW4gdGhpcyBmaWxlLCBtYWtlIGFuIGFuYWxvZ291cyBjaGFuZ2UgaW4gbWFudWFsUm93UmVzaXplLmpzXG5cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnbWFudWFsQ29sdW1uUmVzaXplJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMTMwO1xuY29uc3QgUEVSU0lTVEVOVF9TVEFURV9LRVkgPSAnbWFudWFsQ29sdW1uV2lkdGhzJztcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEBwbHVnaW4gTWFudWFsQ29sdW1uUmVzaXplXG4gKiBAY2xhc3MgTWFudWFsQ29sdW1uUmVzaXplXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3MgdG8gY2hhbmdlIGNvbHVtbnMgd2lkdGguIFRvIG1ha2UgY29sdW1ucyB3aWR0aCBwZXJzaXN0ZW50IHRoZSB7QGxpbmsgT3B0aW9ucyNwZXJzaXN0ZW50U3RhdGV9XG4gKiBwbHVnaW4gc2hvdWxkIGJlIGVuYWJsZWQuXG4gKlxuICogVGhlIHBsdWdpbiBjcmVhdGVzIGFkZGl0aW9uYWwgY29tcG9uZW50cyB0byBtYWtlIHJlc2l6aW5nIHBvc3NpYmx5IHVzaW5nIHVzZXIgaW50ZXJmYWNlOlxuICogLSBoYW5kbGUgLSB0aGUgZHJhZ2dhYmxlIGVsZW1lbnQgdGhhdCBzZXRzIHRoZSBkZXNpcmVkIHdpZHRoIG9mIHRoZSBjb2x1bW4uXG4gKiAtIGd1aWRlIC0gdGhlIGhlbHBlciBndWlkZSB0aGF0IHNob3dzIHRoZSBkZXNpcmVkIHdpZHRoIGFzIGEgdmVydGljYWwgZ3VpZGUuXG4gKi9cbnZhciBfY3VycmVudFRIID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2N1cnJlbnRDb2wgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc2VsZWN0ZWRDb2xzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2N1cnJlbnRXaWR0aCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9uZXdTaXplID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3N0YXJ0WSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9zdGFydFdpZHRoID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3N0YXJ0T2Zmc2V0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2hhbmRsZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9ndWlkZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9wcmVzc2VkID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2lzVHJpZ2dlcmVkQnlSTUIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZGJsY2xpY2sgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfYXV0b3Jlc2l6ZVRpbWVvdXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY29sdW1uV2lkdGhzTWFwID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvbmZpZyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9NYW51YWxDb2x1bW5SZXNpemVfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIE1hbnVhbENvbHVtblJlc2l6ZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7SFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnR9XG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlKSB7XG4gICAgc3VwZXIoaG90SW5zdGFuY2UpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGNhbGwgb24gbWFwJ3MgYGluaXRgIGxvY2FsIGhvb2suXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfTWFudWFsQ29sdW1uUmVzaXplX2JyYW5kKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3VycmVudFRILCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jdXJyZW50Q29sLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyW119XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NlbGVjdGVkQ29scywgW10pO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2N1cnJlbnRXaWR0aCwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbmV3U2l6ZSwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc3RhcnRZLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdGFydFdpZHRoLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdGFydE9mZnNldCwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9oYW5kbGUsIHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ndWlkZSwgdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcHJlc3NlZCwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2lzVHJpZ2dlcmVkQnlSTUIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9kYmxjbGljaywgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfYXV0b3Jlc2l6ZVRpbWVvdXQsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwIHRvIGtlZXAgYW5kIHRyYWNrIHdpZHRocyBmb3IgcGh5c2ljYWwgY29sdW1uIGluZGV4ZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7UGh5c2ljYWxJbmRleFRvVmFsdWVNYXB9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvbHVtbldpZHRoc01hcCwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBQcml2YXRlIHBvb2wgdG8gc2F2ZSBjb25maWd1cmF0aW9uIGZyb20gdXBkYXRlU2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb25maWcsIHZvaWQgMCk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcyksICdtYW51YWxDb2x1bW5SZXNpemVyJyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlLCB0aGlzKSwgJ21hbnVhbENvbHVtblJlc2l6ZXJHdWlkZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgaW5saW5lRGlyKCkge1xuICAgIHJldHVybiB0aGlzLmhvdC5pc1J0bCgpID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgTWFudWFsQ29sdW1uUmVzaXplI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb2x1bW5XaWR0aHNNYXAsIHRoaXMsIG5ldyBfdHJhbnNsYXRpb25zLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwKCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5hZGRMb2NhbEhvb2soJ2luaXQnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uUmVzaXplX2JyYW5kLCB0aGlzLCBfb25NYXBJbml0KS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb2xXaWR0aCcsICh3aWR0aCwgY29sKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uUmVzaXplX2JyYW5kLCB0aGlzLCBfb25Nb2RpZnlDb2xXaWR0aCkuY2FsbCh0aGlzLCB3aWR0aCwgY29sKSwgMSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgnLCAoc3RyZXRjaGVkV2lkdGgsIGNvbHVtbikgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtblJlc2l6ZV9icmFuZCwgdGhpcywgX29uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoKS5jYWxsKHRoaXMsIHN0cmV0Y2hlZFdpZHRoLCBjb2x1bW4pKTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUNvbHVtblJlc2l6ZScsIChuZXdTaXplLCBjb2x1bW4sIGlzRG91YmxlQ2xpY2spID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxDb2x1bW5SZXNpemVfYnJhbmQsIHRoaXMsIF9vbkJlZm9yZUNvbHVtblJlc2l6ZSkuY2FsbCh0aGlzLCBuZXdTaXplLCBjb2x1bW4sIGlzRG91YmxlQ2xpY2spKTtcbiAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBpcyBpbnZva2VkIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICAgKiAgLSBbYG1hbnVhbENvbHVtblJlc2l6ZWBdKEAvYXBpL29wdGlvbnMubWQjbWFudWFsY29sdW1ucmVzaXplKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb25maWcsIHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5nZXRWYWx1ZXMoKSk7XG4gICAgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgY3VycmVudCBzaXplcyB1c2luZyB0aGUgcGVyc2lzdGVudFN0YXRlIHBsdWdpbiAodGhlIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX0gb3B0aW9uIGhhcyB0byBiZSBlbmFibGVkKS5cbiAgICpcbiAgICogQGZpcmVzIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZVNhdmVcbiAgICovXG4gIHNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSB7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ3BlcnNpc3RlbnRTdGF0ZVNhdmUnLCBQRVJTSVNURU5UX1NUQVRFX0tFWSwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5XaWR0aHNNYXAsIHRoaXMpLmdldFZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgcHJldmlvdXNseSBzYXZlZCBzaXplcyB1c2luZyB0aGUgcGVyc2lzdGVudFN0YXRlIHBsdWdpbiAodGhlIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX0gb3B0aW9uIGhhcyB0byBiZSBlbmFibGVkKS5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKiBAZmlyZXMgSG9va3MjcGVyc2lzdGVudFN0YXRlTG9hZFxuICAgKi9cbiAgbG9hZE1hbnVhbENvbHVtbldpZHRocygpIHtcbiAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdwZXJzaXN0ZW50U3RhdGVMb2FkJywgUEVSU0lTVEVOVF9TVEFURV9LRVksIHN0b3JlZFN0YXRlKTtcbiAgICByZXR1cm4gc3RvcmVkU3RhdGUudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbmV3IHdpZHRoIGZvciBzcGVjaWZpZWQgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBDb2x1bW4gd2lkdGggKG5vIGxlc3MgdGhhbiAyMHB4KS5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBuZXcgd2lkdGguXG4gICAqL1xuICBzZXRNYW51YWxTaXplKGNvbHVtbiwgd2lkdGgpIHtcbiAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KHdpZHRoLCAyMCk7XG4gICAgY29uc3QgcGh5c2ljYWxDb2x1bW4gPSB0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGNvbHVtbik7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5XaWR0aHNNYXAsIHRoaXMpLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbENvbHVtbiwgbmV3V2lkdGgpO1xuICAgIHJldHVybiBuZXdXaWR0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNhY2hlIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKi9cbiAgY2xlYXJNYW51YWxTaXplKGNvbHVtbikge1xuICAgIGNvbnN0IHBoeXNpY2FsQ29sdW1uID0gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihjb2x1bW4pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxDb2x1bW4sIG51bGwpO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHJlc2l6ZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SFRNTENlbGxFbGVtZW50fSBUSCBUSCBIVE1MIGVsZW1lbnQuXG4gICAqL1xuICBzZXR1cEhhbmRsZVBvc2l0aW9uKFRIKSB7XG4gICAgaWYgKCFUSC5wYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudFRILCB0aGlzLCBUSCk7XG4gICAgY29uc3Qge1xuICAgICAgX3d0OiB3dFxuICAgIH0gPSB0aGlzLmhvdC52aWV3O1xuICAgIGNvbnN0IGNlbGxDb29yZHMgPSB3dC53dFRhYmxlLmdldENvb3JkcyhfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcykpO1xuICAgIGNvbnN0IGNvbCA9IGNlbGxDb29yZHMuY29sO1xuXG4gICAgLy8gSWdub3JlIGNvbHVtbiBoZWFkZXJzLlxuICAgIGlmIChjb2wgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlckhlaWdodCA9ICgwLCBfZWxlbWVudC5vdXRlckhlaWdodCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpKTtcbiAgICBjb25zdCBib3ggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gUmVhZCBcImZpeGVkQ29sdW1uc1N0YXJ0XCIgdGhyb3VnaCB0aGUgV2Fsa29udGFibGUgYXMgaW4gdGhhdCBjb250ZXh0LCB0aGUgZml4ZWQgY29sdW1uc1xuICAgIC8vIGFyZSBtb2RpZmllZCAocmVkdWNlZCBieSB0aGUgbnVtYmVyIG9mIGhpZGRlbiBjb2x1bW5zKSBieSBUYWJsZVZpZXcgbW9kdWxlLlxuICAgIGNvbnN0IGZpeGVkQ29sdW1uID0gY29sIDwgd3QuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKTtcbiAgICBsZXQgcmVsYXRpdmVIZWFkZXJQb3NpdGlvbjtcbiAgICBpZiAoZml4ZWRDb2x1bW4pIHtcbiAgICAgIHJlbGF0aXZlSGVhZGVyUG9zaXRpb24gPSB3dC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcyksIGNlbGxDb29yZHMucm93LCBjZWxsQ29vcmRzLmNvbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIFRIIGlzIG5vdCBhIGNoaWxkIG9mIHRoZSB0b3AtbGVmdCBvdmVybGF5LCByZWNhbGN1bGF0ZSB1c2luZ1xuICAgIC8vIHRoZSB0b3Agb3ZlcmxheSAtIGFzIHRoaXMgb3ZlcmxheSBjb250YWlucyB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycy5cbiAgICBpZiAoIXJlbGF0aXZlSGVhZGVyUG9zaXRpb24pIHtcbiAgICAgIHJlbGF0aXZlSGVhZGVyUG9zaXRpb24gPSB3dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpLCBjZWxsQ29vcmRzLnJvdywgY2VsbENvb3Jkcy5jb2wpO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRDb2wsIHRoaXMsIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoY29sKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RlZENvbHMsIHRoaXMsIFtdKTtcbiAgICBjb25zdCBpc0Z1bGxDb2x1bW5TZWxlY3RlZCA9IHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSB8fCB0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7XG4gICAgaWYgKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkgJiYgaXNGdWxsQ29sdW1uU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlcyA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShzZWxlY3Rpb25SYW5nZXMsIHNlbGVjdGlvblJhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZnJvbUNvbHVtbiA9IHNlbGVjdGlvblJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sO1xuICAgICAgICBjb25zdCB0b0NvbHVtbiA9IHNlbGVjdGlvblJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbDtcblxuICAgICAgICAvLyBBZGQgZXZlcnkgc2VsZWN0ZWQgY29sdW1uIGZvciByZXNpemUgYWN0aW9uLlxuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGZyb21Db2x1bW4sIHRvQ29sdW1uLCBjb2x1bW5JbmRleCA9PiB7XG4gICAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkQ29scywgdGhpcykuaW5jbHVkZXMoY29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkQ29scywgdGhpcykucHVzaChjb2x1bW5JbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlc2l6aW5nIGVsZW1lbnQgYmV5b25kIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoYWxzbyB3aGVuIHRoZXJlIGlzIG5vIHNlbGVjdGlvbikuXG4gICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkQ29scywgdGhpcykuaW5jbHVkZXMoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50Q29sLCB0aGlzKSkpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VsZWN0ZWRDb2xzLCB0aGlzLCBbX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50Q29sLCB0aGlzKV0pO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3N0YXJ0T2Zmc2V0LCB0aGlzLCByZWxhdGl2ZUhlYWRlclBvc2l0aW9uLnN0YXJ0IC0gNik7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdGFydFdpZHRoLCB0aGlzLCBwYXJzZUludChib3gud2lkdGgsIDEwKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLnN0eWxlLnRvcCA9IGAke3JlbGF0aXZlSGVhZGVyUG9zaXRpb24udG9wfXB4YDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdID0gYCR7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGFydE9mZnNldCwgdGhpcykgKyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXJ0V2lkdGgsIHRoaXMpfXB4YDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykuc3R5bGUuaGVpZ2h0ID0gYCR7aGVhZGVySGVpZ2h0fXB4YDtcbiAgICB0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHJlc2l6ZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoSGFuZGxlUG9zaXRpb24oKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSA9IGAke19jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhcnRPZmZzZXQsIHRoaXMpICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50V2lkdGgsIHRoaXMpfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXNpemUgZ3VpZGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzZXR1cEd1aWRlUG9zaXRpb24oKSB7XG4gICAgY29uc3QgaGFuZGxlSGVpZ2h0ID0gcGFyc2VJbnQoKDAsIF9lbGVtZW50Lm91dGVySGVpZ2h0KShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykpLCAxMCk7XG4gICAgY29uc3QgaGFuZGxlQm90dG9tUG9zaXRpb24gPSBwYXJzZUludChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykuc3R5bGUudG9wLCAxMCkgKyBoYW5kbGVIZWlnaHQ7XG4gICAgY29uc3QgbWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0ID0gcGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoMCksIDEwKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKSwgJ2FjdGl2ZScpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcyksICdhY3RpdmUnKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlLCB0aGlzKS5zdHlsZS50b3AgPSBgJHtoYW5kbGVCb3R0b21Qb3NpdGlvbn1weGA7XG4gICAgdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLnN0eWxlLmhlaWdodCA9IGAke21heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCAtIGhhbmRsZUhlaWdodH1weGA7XG4gICAgdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHJlc2l6ZSBndWlkZSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hHdWlkZVBvc2l0aW9uKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl07XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYm90aCB0aGUgcmVzaXplIGhhbmRsZSBhbmQgcmVzaXplIGd1aWRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGlkZUhhbmRsZUFuZEd1aWRlKCkge1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLCAnYWN0aXZlJyk7XG4gICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlLCB0aGlzKSwgJ2FjdGl2ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwcm92aWRlZCBlbGVtZW50IGlzIGNvbnNpZGVyZWQgYSBjb2x1bW4gaGVhZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEhUTUwgZWxlbWVudC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0lmQ29sdW1uSGVhZGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB0aGVhZCA9ICgwLCBfZWxlbWVudC5jbG9zZXN0KShlbGVtZW50LCBbJ1RIRUFEJ10sIHRoaXMuaG90LnJvb3RFbGVtZW50KTtcbiAgICBjb25zdCB7XG4gICAgICB0b3BPdmVybGF5LFxuICAgICAgdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XG4gICAgfSA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7XG4gICAgcmV0dXJuIFt0b3BPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQsIHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEXS5pbmNsdWRlcyh0aGVhZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgVEggZWxlbWVudCBmcm9tIHRoZSBwcm92aWRlZCBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEhUTUwgZWxlbWVudC5cbiAgICogQHJldHVybnMge0hUTUxFbGVtZW50fVxuICAgKi9cbiAgZ2V0Q2xvc2VzdFRIUGFyZW50KGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC50YWdOYW1lICE9PSAnVEFCTEUnKSB7XG4gICAgICBpZiAoZWxlbWVudC50YWdOYW1lID09PSAnVEgnKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGVsZW1lbnQucGFyZW50Tm9kZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqICdtb3VzZW92ZXInIGV2ZW50IGNhbGxiYWNrIC0gc2V0IHRoZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50LlxuICAgKi9cblxuICAvKipcbiAgICogQXV0by1zaXplIHJvdyBhZnRlciBkb3VibGVjbGljayAtIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlQ29sdW1uUmVzaXplXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbHVtblJlc2l6ZVxuICAgKi9cbiAgYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCkge1xuICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciA9IHRydWU7XG4gICAgICB0aGlzLmhvdC52aWV3LnJlbmRlcigpOyAvLyB1cGRhdGVzIGFsbFxuICAgICAgdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2l6ZSA9IChjb2x1bW4sIGZvcmNlUmVuZGVyKSA9PiB7XG4gICAgICBjb25zdCBob29rTmV3U2l6ZSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDb2x1bW5SZXNpemUnLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX25ld1NpemUsIHRoaXMpLCBjb2x1bW4sIHRydWUpO1xuICAgICAgaWYgKGhvb2tOZXdTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9uZXdTaXplLCB0aGlzLCBob29rTmV3U2l6ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCA9PT0gJ2FsbCcpIHtcbiAgICAgICAgdGhpcy5jbGVhck1hbnVhbFNpemUoY29sdW1uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0TWFudWFsU2l6ZShjb2x1bW4sIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbmV3U2l6ZSwgdGhpcykpOyAvLyBkb3VibGUgY2xpY2sgc2V0cyBieSBhdXRvIHJvdyBzaXplIHBsdWdpblxuICAgICAgfVxuICAgICAgdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDb2x1bW5SZXNpemUnLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX25ld1NpemUsIHRoaXMpLCBjb2x1bW4sIHRydWUpO1xuICAgICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsY2xpY2ssIHRoaXMpID49IDIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ29sc0xlbmd0aCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRDb2xzLCB0aGlzKS5sZW5ndGg7XG4gICAgICBpZiAoc2VsZWN0ZWRDb2xzTGVuZ3RoID4gMSkge1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZENvbHMsIHRoaXMpLCBzZWxlY3RlZENvbCA9PiB7XG4gICAgICAgICAgcmVzaXplKHNlbGVjdGVkQ29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRDb2xzLCB0aGlzKSwgc2VsZWN0ZWRDb2wgPT4ge1xuICAgICAgICAgIHJlc2l6ZShzZWxlY3RlZENvbCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RibGNsaWNrLCB0aGlzLCAwKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2F1dG9yZXNpemVUaW1lb3V0LCB0aGlzLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAnbW91c2Vkb3duJyBldmVudCBjYWxsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgbW91c2UgZXZlbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYmluZEV2ZW50cygpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290V2luZG93LFxuICAgICAgcm9vdEVsZW1lbnRcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ21vdXNlb3ZlcicsIGUgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtblJlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VPdmVyKS5jYWxsKHRoaXMsIGUpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RFbGVtZW50LCAnbW91c2Vkb3duJywgZSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsQ29sdW1uUmVzaXplX2JyYW5kLCB0aGlzLCBfb25Nb3VzZURvd24pLmNhbGwodGhpcywgZSkpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm9vdFdpbmRvdywgJ21vdXNlbW92ZScsIGUgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtblJlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VNb3ZlKS5jYWxsKHRoaXMsIGUpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RXaW5kb3csICdtb3VzZXVwJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbENvbHVtblJlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VVcCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcyksICdjb250ZXh0bWVudScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxDb2x1bW5SZXNpemVfYnJhbmQsIHRoaXMsIF9vbkNvbnRleHRNZW51KS5jYWxsKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgcHJvdmlkZWQgY29sdW1uIHdpZHRoLCBiYXNlZCBvbiB0aGUgcGx1Z2luIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggQ29sdW1uIHdpZHRoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuTWFudWFsQ29sdW1uUmVzaXplID0gTWFudWFsQ29sdW1uUmVzaXplO1xuZnVuY3Rpb24gX29uTWFwSW5pdCgpIHtcbiAgY29uc3QgaW5pdGlhbFNldHRpbmcgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICBjb25zdCBsb2FkZWRNYW51YWxDb2x1bW5XaWR0aHMgPSB0aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTtcbiAgaWYgKHR5cGVvZiBsb2FkZWRNYW51YWxDb2x1bW5XaWR0aHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgbG9hZGVkTWFudWFsQ29sdW1uV2lkdGhzLmZvckVhY2goKHdpZHRoLCBwaHlzaWNhbEluZGV4KSA9PiB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxJbmRleCwgd2lkdGgpO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShpbml0aWFsU2V0dGluZykpIHtcbiAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICBpbml0aWFsU2V0dGluZy5mb3JFYWNoKCh3aWR0aCwgcGh5c2ljYWxJbmRleCkgPT4ge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbldpZHRoc01hcCwgdGhpcykuc2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsSW5kZXgsIHdpZHRoKTtcbiAgICAgIH0pO1xuICAgIH0sIHRydWUpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29uZmlnLCB0aGlzLCBpbml0aWFsU2V0dGluZyk7XG4gIH0gZWxzZSBpZiAoaW5pdGlhbFNldHRpbmcgPT09IHRydWUgJiYgQXJyYXkuaXNBcnJheShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbmZpZywgdGhpcykpKSB7XG4gICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb25maWcsIHRoaXMpLmZvckVhY2goKHdpZHRoLCBwaHlzaWNhbEluZGV4KSA9PiB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxJbmRleCwgd2lkdGgpO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9vbk1vdXNlT3ZlcihldmVudCkge1xuICAvLyBXb3JrYXJvdW5kIGZvciAjNjkyNiAtIGlmIHRoZSBgZXZlbnQudGFyZ2V0YCBpcyB0ZW1wb3JhcmlseSBkZXRhY2hlZCwgd2UgY2FuIHNraXAgdGhpcyBjYWxsYmFjayBhbmQgd2FpdCBmb3JcbiAgLy8gdGhlIG5leHQgYG9ubW91c2VvdmVyYC5cbiAgaWYgKCgwLCBfZWxlbWVudC5pc0RldGFjaGVkKShldmVudC50YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQSBcIm1vdXNlb3ZlclwiIGFjdGlvbiBpcyB0cmlnZ2VyZWQgcmlnaHQgYWZ0ZXIgZXhlY3V0aW5nIFwiY29udGV4dG1lbnVcIiBldmVudC4gSXQgc2hvdWxkIGJlIGlnbm9yZWQuXG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzVHJpZ2dlcmVkQnlSTUIsIHRoaXMpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICh0aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoZXZlbnQudGFyZ2V0KSkge1xuICAgIGNvbnN0IHRoID0gdGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoIXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbHNwYW4gPSB0aC5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKTtcbiAgICBpZiAodGggJiYgKGNvbHNwYW4gPT09IG51bGwgfHwgY29sc3BhbiA9PT0gJzEnKSkge1xuICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3ByZXNzZWQsIHRoaXMpKSB7XG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgaWYgKGV2ZW50LnRhcmdldC5wYXJlbnROb2RlICE9PSB0aGlzLmhvdC5yb290RWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICdtYW51YWxDb2x1bW5SZXNpemVyJykpIHtcbiAgICB0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpKTtcbiAgICB0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcHJlc3NlZCwgdGhpcywgdHJ1ZSk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYXV0b3Jlc2l6ZVRpbWVvdXQsIHRoaXMpID09PSBudWxsKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2F1dG9yZXNpemVUaW1lb3V0LCB0aGlzLCBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksIDUwMCkpO1xuICAgICAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2F1dG9yZXNpemVUaW1lb3V0LCB0aGlzKSk7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZGJsY2xpY2ssIHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsY2xpY2ssIHRoaXMpICsgMSk7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5wYWdlWDtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX25ld1NpemUsIHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhcnRXaWR0aCwgdGhpcykpO1xuICB9XG59XG4vKipcbiAqICdtb3VzZW1vdmUnIGV2ZW50IGNhbGxiYWNrIC0gcmVmcmVzaCB0aGUgaGFuZGxlIGFuZCBndWlkZSBwb3NpdGlvbnMsIGNhY2hlIHRoZSBuZXcgY29sdW1uIHdpZHRoLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50LlxuICovXG5mdW5jdGlvbiBfb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJlc3NlZCwgdGhpcykpIHtcbiAgICBjb25zdCBjaGFuZ2UgPSAoZXZlbnQucGFnZVggLSB0aGlzLnN0YXJ0WCkgKiB0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRXaWR0aCwgdGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGFydFdpZHRoLCB0aGlzKSArIGNoYW5nZSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRDb2xzLCB0aGlzKSwgc2VsZWN0ZWRDb2wgPT4ge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9uZXdTaXplLCB0aGlzLCB0aGlzLnNldE1hbnVhbFNpemUoc2VsZWN0ZWRDb2wsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudFdpZHRoLCB0aGlzKSkpO1xuICAgIH0pO1xuICAgIHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCk7XG4gICAgdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpO1xuICB9XG59XG4vKipcbiAqICdtb3VzZXVwJyBldmVudCBjYWxsYmFjayAtIGFwcGx5IHRoZSBjb2x1bW4gcmVzaXppbmcuXG4gKlxuICogQGZpcmVzIEhvb2tzI2JlZm9yZUNvbHVtblJlc2l6ZVxuICogQGZpcmVzIEhvb2tzI2FmdGVyQ29sdW1uUmVzaXplXG4gKi9cbmZ1bmN0aW9uIF9vbk1vdXNlVXAoKSB7XG4gIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICB0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlO1xuICAgIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7IC8vIHVwZGF0ZXMgYWxsXG4gICAgdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgfTtcbiAgY29uc3QgcmVzaXplID0gKGNvbHVtbiwgZm9yY2VSZW5kZXIpID0+IHtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQ29sdW1uUmVzaXplJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9uZXdTaXplLCB0aGlzKSwgY29sdW1uLCBmYWxzZSk7XG4gICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICByZW5kZXIoKTtcbiAgICB9XG4gICAgdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCk7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQ29sdW1uUmVzaXplJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9uZXdTaXplLCB0aGlzKSwgY29sdW1uLCBmYWxzZSk7XG4gIH07XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3ByZXNzZWQsIHRoaXMpKSB7XG4gICAgdGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9uZXdTaXplLCB0aGlzKSAhPT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGFydFdpZHRoLCB0aGlzKSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRDb2xzTGVuZ3RoID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZENvbHMsIHRoaXMpLmxlbmd0aDtcbiAgICAgIGlmIChzZWxlY3RlZENvbHNMZW5ndGggPiAxKSB7XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkQ29scywgdGhpcyksIHNlbGVjdGVkQ29sID0+IHtcbiAgICAgICAgICByZXNpemUoc2VsZWN0ZWRDb2wpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVuZGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZENvbHMsIHRoaXMpLCBzZWxlY3RlZENvbCA9PiB7XG4gICAgICAgICAgcmVzaXplKHNlbGVjdGVkQ29sLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcykpO1xuICB9XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBcImNvbnRleHRtZW51XCIgZXZlbnQgdHJpZ2dlcmVkIG9uIGVsZW1lbnQgc2hvd2luZyBtb3ZlIGhhbmRsZS4gSXQgcmVtb3ZlcyBoYW5kbGUgYW5kIGd1aWRlIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBfb25Db250ZXh0TWVudSgpIHtcbiAgdGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKTtcbiAgdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpKTtcbiAgdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcykpO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1RyaWdnZXJlZEJ5Uk1CLCB0aGlzLCB0cnVlKTtcblxuICAvLyBUaGVyZSBpcyB0aHJvd24gXCJtb3VzZW92ZXJcIiBldmVudCByaWdodCBhZnRlciBvcGVuaW5nIGEgY29udGV4dCBtZW51LiBUaGlzIGZsYWcgaW5mb3JtIHRoYXQgaGFuZGxlXG4gIC8vIHNob3VsZG4ndCBiZSBkcmF3biBqdXN0IGFmdGVyIHJlbW92aW5nIGl0LlxuICB0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCkgPT4ge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaXNUcmlnZ2VyZWRCeVJNQiwgdGhpcywgZmFsc2UpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF9vbk1vZGlmeUNvbFdpZHRoKHdpZHRoLCBjb2x1bW4pIHtcbiAgbGV0IG5ld1dpZHRoID0gd2lkdGg7XG4gIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICBjb25zdCBwaHlzaWNhbENvbHVtbiA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oY29sdW1uKTtcbiAgICBjb25zdCBjb2x1bW5XaWR0aCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY29sdW1uV2lkdGhzTWFwLCB0aGlzKS5nZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxDb2x1bW4pO1xuICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldICYmIGNvbHVtbldpZHRoKSB7XG4gICAgICBuZXdXaWR0aCA9IGNvbHVtbldpZHRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3V2lkdGg7XG59XG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwcm92aWRlZCBjb2x1bW4gc3RyZXRjaGVkIHdpZHRoLiBUaGlzIGhvb2sgZGVjaWRlcyBpZiBzcGVjaWZpZWQgY29sdW1uIHNob3VsZCBiZSBzdHJldGNoZWQgb3Igbm90LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdHJldGNoZWRXaWR0aCBTdHJldGNoZWQgd2lkdGguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgoc3RyZXRjaGVkV2lkdGgsIGNvbHVtbikge1xuICBsZXQgd2lkdGggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbldpZHRoc01hcCwgdGhpcykuZ2V0VmFsdWVBdEluZGV4KGNvbHVtbik7XG4gIGlmICh3aWR0aCA9PT0gbnVsbCkge1xuICAgIHdpZHRoID0gc3RyZXRjaGVkV2lkdGg7XG4gIH1cbiAgcmV0dXJuIHdpZHRoO1xufVxuLyoqXG4gKiBgYmVmb3JlQ29sdW1uUmVzaXplYCBob29rIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVDb2x1bW5SZXNpemUoKSB7XG4gIC8vIGNsZWFyIHRoZSBoZWFkZXIgaGVpZ2h0IGNhY2hlIGluZm9ybWF0aW9uXG4gIHRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX21hbnVhbFJvd01vdmUgPSByZXF1aXJlKFwiLi9tYW51YWxSb3dNb3ZlXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX21hbnVhbFJvd01vdmUuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX21hbnVhbFJvd01vdmUuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5NYW51YWxSb3dNb3ZlID0gX21hbnVhbFJvd01vdmUuTWFudWFsUm93TW92ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9iYWNrbGlnaHQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91aS9iYWNrbGlnaHRcIikpO1xudmFyIF9ndWlkZWxpbmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91aS9ndWlkZWxpbmVcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdiZWZvcmVSb3dNb3ZlJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYWZ0ZXJSb3dNb3ZlJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ21hbnVhbFJvd01vdmUnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAxNDA7XG5jb25zdCBDU1NfUExVR0lOID0gJ2h0X19tYW51YWxSb3dNb3ZlJztcbmNvbnN0IENTU19TSE9XX1VJID0gJ3Nob3ctdWknO1xuY29uc3QgQ1NTX09OX01PVklORyA9ICdvbi1tb3ZpbmctLXJvd3MnO1xuY29uc3QgQ1NTX0FGVEVSX1NFTEVDVElPTiA9ICdhZnRlci1zZWxlY3Rpb24tLXJvd3MnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQHBsdWdpbiBNYW51YWxSb3dNb3ZlXG4gKiBAY2xhc3MgTWFudWFsUm93TW92ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhpcyBwbHVnaW4gYWxsb3dzIHRvIGNoYW5nZSByb3dzIG9yZGVyLiBUbyBtYWtlIHJvd3Mgb3JkZXIgcGVyc2lzdGVudCB0aGUge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfVxuICogcGx1Z2luIHNob3VsZCBiZSBlbmFibGVkLlxuICpcbiAqIEFQSTpcbiAqIC0gYG1vdmVSb3dgIC0gbW92ZSBzaW5nbGUgcm93IHRvIHRoZSBuZXcgcG9zaXRpb24uXG4gKiAtIGBtb3ZlUm93c2AgLSBtb3ZlIG1hbnkgcm93cyAoYXMgYW4gYXJyYXkgb2YgaW5kZXhlcykgdG8gdGhlIG5ldyBwb3NpdGlvbi5cbiAqIC0gYGRyYWdSb3dgIC0gZHJhZyBzaW5nbGUgcm93IHRvIHRoZSBuZXcgcG9zaXRpb24uXG4gKiAtIGBkcmFnUm93c2AgLSBkcmFnIG1hbnkgcm93cyAoYXMgYW4gYXJyYXkgb2YgaW5kZXhlcykgdG8gdGhlIG5ldyBwb3NpdGlvbi5cbiAqXG4gKiBbRG9jdW1lbnRhdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctbW92aW5nL3Jvdy1tb3ZpbmcubWQpIGV4cGxhaW4gZGlmZmVyZW5jZXMgYmV0d2VlbiBkcmFnIGFuZCBtb3ZlIGFjdGlvbnMuIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBpZiB5b3Ugd2FudCBhcHBseSB2aXN1YWwgY2hhbmdlcyxcbiAqIHlvdSBoYXZlIHRvIGNhbGwgbWFudWFsbHkgdGhlIGByZW5kZXJgIG1ldGhvZCBvbiB0aGUgaW5zdGFuY2Ugb2YgSGFuZHNvbnRhYmxlLlxuICpcbiAqIFRoZSBwbHVnaW4gY3JlYXRlcyBhZGRpdGlvbmFsIGNvbXBvbmVudHMgdG8gbWFrZSBtb3ZpbmcgcG9zc2libHkgdXNpbmcgdXNlciBpbnRlcmZhY2U6XG4gKiAtIGJhY2tsaWdodCAtIGhpZ2hsaWdodCBvZiBzZWxlY3RlZCByb3dzLlxuICogLSBndWlkZWxpbmUgLSBsaW5lIHdoaWNoIHNob3dzIHdoZXJlIHJvd3MgaGFzIGJlZW4gbW92ZWQuXG4gKlxuICogQGNsYXNzIE1hbnVhbFJvd01vdmVcbiAqIEBwbHVnaW4gTWFudWFsUm93TW92ZVxuICovXG52YXIgX2JhY2tsaWdodCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9ndWlkZWxpbmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcm93c1RvTW92ZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9wcmVzc2VkID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3RhcmdldCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jYWNoZWREcm9wSW5kZXggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfTWFudWFsUm93TW92ZV9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgTWFudWFsUm93TW92ZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgYmVoYXZpb3Igb2Ygc2VsZWN0aW9uIC8gZHJhZ2dpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IGBtb3VzZWRvd25gIGV2ZW50IHByb3BlcnRpZXMuXG4gICAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVmlzdWFsIGNlbGwgY29vcmRpbmF0ZXMgd2hlcmUgd2FzIGZpcmVkIGV2ZW50LlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFREIENlbGwgcmVwcmVzZW50ZWQgYXMgSFRNTEVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRyb2xsZXIgQW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBgcm93YCwgYGNvbHVtbmAgYW5kIGBjZWxsYC4gRWFjaCBwcm9wZXJ0eSBjb250YWluc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGFsbG93cyBvciBkaXNhbGxvd3MgY2hhbmdpbmcgdGhlIHNlbGVjdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGFyZWEuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9NYW51YWxSb3dNb3ZlX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBCYWNrbGlnaHQgVUkgb2JqZWN0LlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfYmFja2xpZ2h0LCBuZXcgX2JhY2tsaWdodDIuZGVmYXVsdCh0aGlzLmhvdCkpO1xuICAgIC8qKlxuICAgICAqIEd1aWRlbGluZSBVSSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ndWlkZWxpbmUsIG5ldyBfZ3VpZGVsaW5lMi5kZWZhdWx0KHRoaXMuaG90KSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcltdfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9yb3dzVG9Nb3ZlLCBbXSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ByZXNzZWQsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfdGFyZ2V0LCB7fSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY2FjaGVkRHJvcEluZGV4LCB2b2lkIDApO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgTWFudWFsUm93TW92ZSNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZU9uQ2VsbE1vdXNlRG93bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxSb3dNb3ZlX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlT25DZWxsTW91c2VEb3duKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZU9uQ2VsbE1vdXNlT3ZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd01vdmVfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVPbkNlbGxNb3VzZU92ZXIpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHknLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsUm93TW92ZV9icmFuZCwgdGhpcywgX29uQWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkpLmNhbGwodGhpcykpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJMb2FkRGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd01vdmVfYnJhbmQsIF90aGlzLCBfb25BZnRlckxvYWREYXRhKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmJ1aWxkUGx1Z2luVUkoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnRzKCk7XG5cbiAgICAvLyBUT0RPOiBtb3ZlIGFkZGluZyBwbHVnaW4gY2xhc3NuYW1lIHRvIEJhc2VQbHVnaW4uXG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLmhvdC5yb290RWxlbWVudCwgQ1NTX1BMVUdJTik7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BtYW51YWxSb3dNb3ZlYF0oQC9hcGkvb3B0aW9ucy5tZCNtYW51YWxyb3dtb3ZlKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG4gICAgdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodGhpcy5ob3Qucm9vdEVsZW1lbnQsIENTU19QTFVHSU4pO1xuICAgIHRoaXMudW5yZWdpc3RlckV2ZW50cygpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5kZXN0cm95KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgYSBzaW5nbGUgcm93LlxuICAgKlxuICAgKiBUbyBzZWUgdGhlIG91dGNvbWUsIHJlcmVuZGVyIHlvdXIgZ3JpZCBieSBjYWxsaW5nIFtgcmVuZGVyKClgXShAL2FwaS9jb3JlLm1kI3JlbmRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleCB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gICAqIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFscm93bW92ZS1wbHVnaW4pLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlUm93TW92ZVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSb3dNb3ZlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgbW92ZVJvdyhyb3csIGZpbmFsSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5tb3ZlUm93cyhbcm93XSwgZmluYWxJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgbXVsdGlwbGUgcm93cy5cbiAgICpcbiAgICogVG8gc2VlIHRoZSBvdXRjb21lLCByZXJlbmRlciB5b3VyIGdyaWQgYnkgY2FsbGluZyBbYHJlbmRlcigpYF0oQC9hcGkvY29yZS5tZCNyZW5kZXIpLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSByb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gICAqIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFscm93bW92ZS1wbHVnaW4pLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlUm93TW92ZVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSb3dNb3ZlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgbW92ZVJvd3Mocm93cywgZmluYWxJbmRleCkge1xuICAgIGNvbnN0IGRyb3BJbmRleCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2FjaGVkRHJvcEluZGV4LCB0aGlzKTtcbiAgICBjb25zdCBtb3ZlUG9zc2libGUgPSB0aGlzLmlzTW92ZVBvc3NpYmxlKHJvd3MsIGZpbmFsSW5kZXgpO1xuICAgIGNvbnN0IGJlZm9yZU1vdmVIb29rID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVJvd01vdmUnLCByb3dzLCBmaW5hbEluZGV4LCBkcm9wSW5kZXgsIG1vdmVQb3NzaWJsZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jYWNoZWREcm9wSW5kZXgsIHRoaXMsIHVuZGVmaW5lZCk7XG4gICAgaWYgKGJlZm9yZU1vdmVIb29rID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobW92ZVBvc3NpYmxlKSB7XG4gICAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhyb3dzLCBmaW5hbEluZGV4KTtcbiAgICB9XG4gICAgY29uc3QgbW92ZVBlcmZvcm1lZCA9IG1vdmVQb3NzaWJsZSAmJiB0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKHJvd3MsIGZpbmFsSW5kZXgpO1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclJvd01vdmUnLCByb3dzLCBmaW5hbEluZGV4LCBkcm9wSW5kZXgsIG1vdmVQb3NzaWJsZSwgbW92ZVBlcmZvcm1lZCk7XG4gICAgcmV0dXJuIG1vdmVQZXJmb3JtZWQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhZyBhIHNpbmdsZSByb3cgdG8gZHJvcCBpbmRleCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4IHRvIGJlIGRyYWdnZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkcm9wSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBkcm9wIGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy4gUG9pbnRzIHRvIHdoZXJlIHdlIGFyZSBnb2luZyB0byBkcm9wIHRoZSBtb3ZlZCBlbGVtZW50cy5cbiAgICogVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBkcm9wIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdCBbZG9jdW1lbnRhdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctbW92aW5nL3Jvdy1tb3ZpbmcubWQjZHJhZy1hbmQtbW92ZS1hY3Rpb25zLW9mLW1hbnVhbHJvd21vdmUtcGx1Z2luKS5cbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVJvd01vdmVcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyUm93TW92ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRyYWdSb3cocm93LCBkcm9wSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnUm93cyhbcm93XSwgZHJvcEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEcmFnIG11bHRpcGxlIHJvd3MgdG8gZHJvcCBpbmRleCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgZHJhZ2dlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRyb3BJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIGRyb3AgaW5kZXggZm9yIHRoZSBtb3ZlZCByb3dzLiBQb2ludHMgdG8gd2hlcmUgd2UgYXJlIGdvaW5nIHRvIGRyb3AgdGhlIG1vdmVkIGVsZW1lbnRzLlxuICAgKiBUbyBjaGVjayB2aXN1YWxpemF0aW9uIG9mIGRyb3AgaW5kZXggcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFscm93bW92ZS1wbHVnaW4pLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlUm93TW92ZVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJSb3dNb3ZlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZHJhZ1Jvd3Mocm93cywgZHJvcEluZGV4KSB7XG4gICAgY29uc3QgZmluYWxJbmRleCA9IHRoaXMuY291bnRGaW5hbEluZGV4KHJvd3MsIGRyb3BJbmRleCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jYWNoZWREcm9wSW5kZXgsIHRoaXMsIGRyb3BJbmRleCk7XG4gICAgcmV0dXJuIHRoaXMubW92ZVJvd3Mocm93cywgZmluYWxJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGl0J3MgcG9zc2libGUgdG8gbW92ZSByb3dzIHRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uLiBTb21lIG9mIHRoZSBhY3Rpb25zIGFyZW4ndCBwb3NzaWJsZSwgaS5lLiBZb3UgY2Fu4oCZdCBtb3ZlIG1vcmUgdGhhbiBvbmUgZWxlbWVudCB0byB0aGUgbGFzdCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gbW92ZWRSb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gICAqIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFscm93bW92ZS1wbHVnaW4pLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTW92ZVBvc3NpYmxlKG1vdmVkUm93cywgZmluYWxJbmRleCkge1xuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7XG5cbiAgICAvLyBBbiBhdHRlbXB0IHRvIHRyYW5zZmVyIG1vcmUgcm93cyB0byBzdGFydCBkZXN0aW5hdGlvbiB0aGFuIGlzIHBvc3NpYmxlIChvbmx5IHdoZW4gbW92aW5nIGZyb20gdGhlIHRvcCB0byB0aGUgYm90dG9tKS5cbiAgICBjb25zdCB0b29IaWdoRGVzdGluYXRpb25JbmRleCA9IG1vdmVkUm93cy5sZW5ndGggKyBmaW5hbEluZGV4ID4gbGVuZ3RoO1xuICAgIGNvbnN0IHRvb0xvd0Rlc3RpbmF0aW9uSW5kZXggPSBmaW5hbEluZGV4IDwgMDtcbiAgICBjb25zdCB0b29Mb3dNb3ZlZFJvd0luZGV4ID0gbW92ZWRSb3dzLnNvbWUobW92ZWRSb3cgPT4gbW92ZWRSb3cgPCAwKTtcbiAgICBjb25zdCB0b29IaWdoTW92ZWRSb3dJbmRleCA9IG1vdmVkUm93cy5zb21lKG1vdmVkUm93ID0+IG1vdmVkUm93ID49IGxlbmd0aCk7XG4gICAgaWYgKHRvb0hpZ2hEZXN0aW5hdGlvbkluZGV4IHx8IHRvb0xvd0Rlc3RpbmF0aW9uSW5kZXggfHwgdG9vTG93TW92ZWRSb3dJbmRleCB8fCB0b29IaWdoTW92ZWRSb3dJbmRleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgb3JkZXIgb2Ygcm93cyB3YXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gbW92ZWRSb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHMgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uXG4gICAqIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0IFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCNkcmFnLWFuZC1tb3ZlLWFjdGlvbnMtb2YtbWFudWFscm93bW92ZS1wbHVnaW4pLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUm93T3JkZXJDaGFuZ2VkKG1vdmVkUm93cywgZmluYWxJbmRleCkge1xuICAgIHJldHVybiBtb3ZlZFJvd3Muc29tZSgocm93LCBuck9mTW92ZWRFbGVtZW50KSA9PiByb3cgLSBuck9mTW92ZWRFbGVtZW50ICE9PSBmaW5hbEluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCB0aGUgZmluYWwgcm93IGluZGV4IGZyb20gdGhlIGRyb3AgaW5kZXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IG1vdmVkUm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkcm9wSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBkcm9wIGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy5cbiAgICogQHJldHVybnMge251bWJlcn0gVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuXG4gICAqL1xuICBjb3VudEZpbmFsSW5kZXgobW92ZWRSb3dzLCBkcm9wSW5kZXgpIHtcbiAgICBjb25zdCBudW1iZXJPZlJvd3NMb3dlclRoYW5Ecm9wSW5kZXggPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKShtb3ZlZFJvd3MsIChudW1iZXJPZlJvd3MsIGN1cnJlbnRSb3dJbmRleCkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRSb3dJbmRleCA8IGRyb3BJbmRleCkge1xuICAgICAgICBudW1iZXJPZlJvd3MgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudW1iZXJPZlJvd3M7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIGRyb3BJbmRleCAtIG51bWJlck9mUm93c0xvd2VyVGhhbkRyb3BJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBzdW0gb2YgdGhlIGhlaWdodHMgb2Ygcm93cyBpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tUm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b1JvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Um93c0hlaWdodChmcm9tUm93LCB0b1Jvdykge1xuICAgIGNvbnN0IHJvd01hcHBlciA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyO1xuICAgIGxldCByb3dzSGVpZ2h0ID0gMDtcbiAgICBmb3IgKGxldCB2aXN1YWxSb3dJbmRleCA9IGZyb21Sb3c7IHZpc3VhbFJvd0luZGV4IDw9IHRvUm93OyB2aXN1YWxSb3dJbmRleCsrKSB7XG4gICAgICBjb25zdCByZW5kZXJhYmxlSW5kZXggPSByb3dNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2aXN1YWxSb3dJbmRleCk7XG4gICAgICBpZiAocmVuZGVyYWJsZUluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgIHJvd3NIZWlnaHQgKz0gdGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQocmVuZGVyYWJsZUluZGV4KSB8fCAyMztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd3NIZWlnaHQ7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgaW5pdGlhbCBzZXR0aW5ncyB3aGVuIHBlcnNpc3RlbnQgc3RhdGUgaXMgc2F2ZWQgb3Igd2hlbiBwbHVnaW4gd2FzIGluaXRpYWxpemVkIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbW92ZUJ5U2V0dGluZ3NPckxvYWQoKSB7XG4gICAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBsdWdpblNldHRpbmdzKSkge1xuICAgICAgdGhpcy5tb3ZlUm93cyhwbHVnaW5TZXR0aW5ncywgMCk7XG4gICAgfSBlbHNlIGlmIChwbHVnaW5TZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBwZXJzaXN0ZW50U3RhdGUgPSB0aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTtcbiAgICAgIGlmIChwZXJzaXN0ZW50U3RhdGUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubW92ZVJvd3MocGVyc2lzdGVudFN0YXRlLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCByb3cgaXMgaW4gdGhlIGZpeGVkUm93c1RvcCBzZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXggdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNGaXhlZFJvd1RvcChyb3cpIHtcbiAgICByZXR1cm4gcm93IDwgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3A7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCByb3cgaXMgaW4gdGhlIGZpeGVkUm93c0JvdHRvbSBzZWN0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXggdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNGaXhlZFJvd0JvdHRvbShyb3cpIHtcbiAgICByZXR1cm4gcm93ID4gdGhpcy5ob3QuY291bnRSb3dzKCkgLSAxIC0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b207XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGhlIG1hbnVhbCByb3cgcG9zaXRpb25zIHRvIHRoZSBwZXJzaXN0ZW50IHN0YXRlICh0aGUge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gaGFzIHRvIGJlIGVuYWJsZWQpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgSG9va3MjcGVyc2lzdGVudFN0YXRlU2F2ZVxuICAgKi9cbiAgcGVyc2lzdGVudFN0YXRlU2F2ZSgpIHtcbiAgICAvLyBUaGUgYFBlcnNpc3RlbnRTdGF0ZWAgcGx1Z2luIHNob3VsZCBiZSByZWZhY3RvcmVkLlxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdwZXJzaXN0ZW50U3RhdGVTYXZlJywgJ21hbnVhbFJvd01vdmUnLCB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIG1hbnVhbCByb3cgcG9zaXRpb25zIGZyb20gdGhlIHBlcnNpc3RlbnQgc3RhdGUgKHRoZSB7QGxpbmsgT3B0aW9ucyNwZXJzaXN0ZW50U3RhdGV9IG9wdGlvbiBoYXMgdG8gYmUgZW5hYmxlZCkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBmaXJlcyBIb29rcyNwZXJzaXN0ZW50U3RhdGVMb2FkXG4gICAqIEByZXR1cm5zIHtBcnJheX0gU3RvcmVkIHN0YXRlLlxuICAgKi9cbiAgcGVyc2lzdGVudFN0YXRlTG9hZCgpIHtcbiAgICBjb25zdCBzdG9yZWRTdGF0ZSA9IHt9O1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdwZXJzaXN0ZW50U3RhdGVMb2FkJywgJ21hbnVhbFJvd01vdmUnLCBzdG9yZWRTdGF0ZSk7XG4gICAgcmV0dXJuIHN0b3JlZFN0YXRlLnZhbHVlID8gc3RvcmVkU3RhdGUudmFsdWUgOiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhbiBhcnJheSBvZiBpbmRleGVzIGJhc2VkIG9uIGFjdHVhbCBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIHByZXBhcmVSb3dzVG9Nb3ZpbmcoKSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkUm93cztcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IHNlbGVjdGlvbjtcbiAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGZyb20ucm93LCB0by5yb3cpO1xuICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KGZyb20ucm93LCB0by5yb3cpO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoc3RhcnQsIGVuZCwgaSA9PiB7XG4gICAgICBzZWxlY3RlZFJvd3MucHVzaChpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWRSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgVUkgdmlzdWFsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVmcmVzaFBvc2l0aW9ucygpIHtcbiAgICBjb25zdCBjb29yZHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuY29vcmRzO1xuICAgIGNvbnN0IGZpcnN0VmlzaWJsZSA9IHRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKTtcbiAgICBjb25zdCBsYXN0VmlzaWJsZSA9IHRoaXMuaG90LnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpO1xuICAgIGNvbnN0IGNvdW50Um93cyA9IHRoaXMuaG90LmNvdW50Um93cygpO1xuICAgIGlmICh0aGlzLmlzRml4ZWRSb3dUb3AoY29vcmRzLnJvdykgJiYgZmlyc3RWaXNpYmxlID4gMCkge1xuICAgICAgdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZmlyc3RWaXNpYmxlIC0gMSwgLTEpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNGaXhlZFJvd0JvdHRvbShjb29yZHMucm93KSAmJiBsYXN0VmlzaWJsZSA8IGNvdW50Um93cykge1xuICAgICAgdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobGFzdFZpc2libGUgKyAxLCAxKSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICB9XG4gICAgY29uc3Qgd3RUYWJsZSA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGU7XG4gICAgY29uc3QgVEQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuVEQ7XG4gICAgY29uc3Qgcm9vdEVsZW1lbnQgPSB0aGlzLmhvdC5yb290RWxlbWVudDtcbiAgICBjb25zdCByb290RWxlbWVudE9mZnNldCA9ICgwLCBfZWxlbWVudC5vZmZzZXQpKHJvb3RFbGVtZW50KTtcbiAgICBjb25zdCB0cmltbWluZ0NvbnRhaW5lciA9ICgwLCBfZWxlbWVudC5nZXRUcmltbWluZ0NvbnRhaW5lcikocm9vdEVsZW1lbnQpO1xuICAgIGNvbnN0IHRhYmxlU2Nyb2xsID0gd3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHRyaW1taW5nQ29udGFpbmVyU2Nyb2xsID0gdGhpcy5ob3Qucm9vdFdpbmRvdyAhPT0gdHJpbW1pbmdDb250YWluZXIgPyB0cmltbWluZ0NvbnRhaW5lci5zY3JvbGxUb3AgOiAwO1xuICAgIGNvbnN0IHBpeGVsc0Fib3ZlID0gcm9vdEVsZW1lbnRPZmZzZXQudG9wIC0gdHJpbW1pbmdDb250YWluZXJTY3JvbGw7XG4gICAgY29uc3QgcGl4ZWxzUmVsVG9UYWJsZVN0YXJ0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmV2ZW50UGFnZVkgLSBwaXhlbHNBYm92ZSArIHRhYmxlU2Nyb2xsO1xuICAgIGNvbnN0IGhpZGVySGVpZ2h0ID0gd3RUYWJsZS5oaWRlci5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgdGJvZHlPZmZzZXRUb3AgPSB3dFRhYmxlLlRCT0RZLm9mZnNldFRvcDtcbiAgICBjb25zdCBiYWNrbGlnaHRFbGVtTWFyZ2luVG9wID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmdldE9mZnNldCgpLnRvcDtcbiAgICBjb25zdCBiYWNrbGlnaHRFbGVtSGVpZ2h0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmdldFNpemUoKS5oZWlnaHQ7XG4gICAgY29uc3QgdGRNaWRkbGUgPSBURC5vZmZzZXRIZWlnaHQgLyAyO1xuICAgIGNvbnN0IHRkSGVpZ2h0ID0gVEQub2Zmc2V0SGVpZ2h0O1xuICAgIGxldCB0ZFN0YXJ0UGl4ZWwgPSB0aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldEhlaWdodCArIHRoaXMuZ2V0Um93c0hlaWdodCgwLCBjb29yZHMucm93IC0gMSk7XG4gICAgY29uc3QgaXNCZWxvd1RhYmxlID0gcGl4ZWxzUmVsVG9UYWJsZVN0YXJ0ID49IHRkU3RhcnRQaXhlbCArIHRkTWlkZGxlO1xuICAgIGlmICh0aGlzLmlzRml4ZWRSb3dUb3AoY29vcmRzLnJvdykpIHtcbiAgICAgIHRkU3RhcnRQaXhlbCArPSB0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO1xuICAgIH1cbiAgICBpZiAoY29vcmRzLnJvdyA8IDApIHtcbiAgICAgIC8vIGlmIGhvdmVyIG9uIGNvbEhlYWRlclxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLnJvdyA9IGZpcnN0VmlzaWJsZSA+IDAgPyBmaXJzdFZpc2libGUgLSAxIDogZmlyc3RWaXNpYmxlO1xuICAgIH0gZWxzZSBpZiAoaXNCZWxvd1RhYmxlKSB7XG4gICAgICAvLyBpZiBob3ZlciBvbiBsb3dlciBwYXJ0IG9mIFREXG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykucm93ID0gY29vcmRzLnJvdyArIDE7XG4gICAgICAvLyB1bmZvcnR1bmF0ZWx5IGZpcnN0IHJvdyBpcyBiaWdnZXIgdGhhbiByZXN0XG4gICAgICB0ZFN0YXJ0UGl4ZWwgKz0gY29vcmRzLnJvdyA9PT0gMCA/IHRkSGVpZ2h0IC0gMSA6IHRkSGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlbHNld2hlcmUgb24gdGFibGVcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5yb3cgPSBjb29yZHMucm93O1xuICAgIH1cbiAgICBsZXQgYmFja2xpZ2h0VG9wID0gcGl4ZWxzUmVsVG9UYWJsZVN0YXJ0O1xuICAgIGxldCBndWlkZWxpbmVUb3AgPSB0ZFN0YXJ0UGl4ZWw7XG4gICAgaWYgKHBpeGVsc1JlbFRvVGFibGVTdGFydCArIGJhY2tsaWdodEVsZW1IZWlnaHQgKyBiYWNrbGlnaHRFbGVtTWFyZ2luVG9wID49IGhpZGVySGVpZ2h0KSB7XG4gICAgICAvLyBwcmV2ZW50IGRpc3BsYXkgYmFja2xpZ2h0IGJlbG93IHRhYmxlXG4gICAgICBiYWNrbGlnaHRUb3AgPSBoaWRlckhlaWdodCAtIGJhY2tsaWdodEVsZW1IZWlnaHQgLSBiYWNrbGlnaHRFbGVtTWFyZ2luVG9wO1xuICAgIH0gZWxzZSBpZiAocGl4ZWxzUmVsVG9UYWJsZVN0YXJ0ICsgYmFja2xpZ2h0RWxlbU1hcmdpblRvcCA8IHRib2R5T2Zmc2V0VG9wKSB7XG4gICAgICAvLyBwcmV2ZW50IGRpc3BsYXkgYWJvdmUgYmVsb3cgdGFibGVcbiAgICAgIGJhY2tsaWdodFRvcCA9IHRib2R5T2Zmc2V0VG9wICsgTWF0aC5hYnMoYmFja2xpZ2h0RWxlbU1hcmdpblRvcCk7XG4gICAgfVxuICAgIGlmICh0ZFN0YXJ0UGl4ZWwgPj0gaGlkZXJIZWlnaHQgLSAxKSB7XG4gICAgICAvLyBwcmV2ZW50IGRpc3BsYXkgZ3VpZGVsaW5lIGJlbG93IHRhYmxlXG4gICAgICBndWlkZWxpbmVUb3AgPSBoaWRlckhlaWdodCAtIDE7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5zZXRQb3NpdGlvbihiYWNrbGlnaHRUb3ApO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGVsaW5lLCB0aGlzKS5zZXRQb3NpdGlvbihndWlkZWxpbmVUb3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmRzIHRoZSBldmVudHMgdXNlZCBieSB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZG9jdW1lbnRFbGVtZW50XG4gICAgfSA9IHRoaXMuaG90LnJvb3REb2N1bWVudDtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ21vdXNlbW92ZScsIGV2ZW50ID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxSb3dNb3ZlX2JyYW5kLCB0aGlzLCBfb25Nb3VzZU1vdmUpLmNhbGwodGhpcywgZXZlbnQpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ21vdXNldXAnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsUm93TW92ZV9icmFuZCwgdGhpcywgX29uTW91c2VVcCkuY2FsbCh0aGlzKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5iaW5kcyB0aGUgZXZlbnRzIHVzZWQgYnkgdGhlIHBsdWdpbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKTtcbiAgfVxuICAvKipcbiAgICogQnVpbGRzIHRoZSBwbHVnaW4ncyBVSS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGJ1aWxkUGx1Z2luVUkoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmJ1aWxkKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmJ1aWxkKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRoZSBgYWZ0ZXJMb2FkRGF0YWAgaG9vay5cbiAgICovXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5kZXN0cm95KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZWxpbmUsIHRoaXMpLmRlc3Ryb3koKTtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuTWFudWFsUm93TW92ZSA9IE1hbnVhbFJvd01vdmU7XG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24oZXZlbnQsIGNvb3JkcywgVEQsIGNvbnRyb2xsZXIpIHtcbiAgY29uc3Qge1xuICAgIHd0VGFibGUsXG4gICAgd3RWaWV3cG9ydFxuICB9ID0gdGhpcy5ob3Qudmlldy5fd3Q7XG4gIGNvbnN0IGlzSGVhZGVyU2VsZWN0aW9uID0gdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBpZiAoIXNlbGVjdGlvbiB8fCAhaXNIZWFkZXJTZWxlY3Rpb24gfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wcmVzc2VkLCB0aGlzKSB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd3NUb01vdmUsIHRoaXMpLmxlbmd0aCA9IDA7XG4gICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKSh0aGlzLmhvdC5yb290RWxlbWVudCwgW0NTU19PTl9NT1ZJTkcsIENTU19TSE9XX1VJXSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGd1aWRlbGluZUlzTm90UmVhZHkgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlbGluZSwgdGhpcykuaXNCdWlsdCgpICYmICFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlbGluZSwgdGhpcykuaXNBcHBlbmRlZCgpO1xuICBjb25zdCBiYWNrbGlnaHRJc05vdFJlYWR5ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmlzQnVpbHQoKSAmJiAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLmlzQXBwZW5kZWQoKTtcbiAgaWYgKGd1aWRlbGluZUlzTm90UmVhZHkgJiYgYmFja2xpZ2h0SXNOb3RSZWFkeSkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGVsaW5lLCB0aGlzKS5hcHBlbmRUbyh3dFRhYmxlLmhpZGVyKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuYXBwZW5kVG8od3RUYWJsZS5oaWRlcik7XG4gIH1cbiAgY29uc3Qge1xuICAgIGZyb20sXG4gICAgdG9cbiAgfSA9IHNlbGVjdGlvbjtcbiAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihmcm9tLnJvdywgdG8ucm93KTtcbiAgY29uc3QgZW5kID0gTWF0aC5tYXgoZnJvbS5yb3csIHRvLnJvdyk7XG4gIGlmIChjb29yZHMuY29sIDwgMCAmJiBjb29yZHMucm93ID49IHN0YXJ0ICYmIGNvb3Jkcy5yb3cgPD0gZW5kKSB7XG4gICAgY29udHJvbGxlci5yb3cgPSB0cnVlO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcHJlc3NlZCwgdGhpcywgdHJ1ZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmV2ZW50UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuY29vcmRzID0gY29vcmRzO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFyZ2V0LCB0aGlzKS5URCA9IFREO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcm93c1RvTW92ZSwgdGhpcywgdGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO1xuICAgIGNvbnN0IGxlZnRQb3MgPSB3dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0ICsgd3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpO1xuICAgIGNvbnN0IHRvcE9mZnNldCA9IHRoaXMuZ2V0Um93c0hlaWdodChzdGFydCwgY29vcmRzLnJvdyAtIDEpICsgZXZlbnQub2Zmc2V0WTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2JhY2tsaWdodCwgdGhpcykuc2V0UG9zaXRpb24obnVsbCwgbGVmdFBvcyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldFNpemUod3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aCAtIGxlZnRQb3MsIHRoaXMuZ2V0Um93c0hlaWdodChzdGFydCwgZW5kKSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldE9mZnNldCgtdG9wT2Zmc2V0LCBudWxsKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfT05fTU9WSU5HKTtcbiAgICB0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKTtcbiAgfSBlbHNlIHtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfQUZURVJfU0VMRUNUSU9OKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd3NUb01vdmUsIHRoaXMpLmxlbmd0aCA9IDA7XG4gIH1cbn1cbi8qKlxuICogJ21vdXNlTW92ZScgZXZlbnQgY2FsbGJhY2suIEZpcmVkIHdoZW4gcG9pbnRlciBtb3ZlIG9uIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IGBtb3VzZW1vdmVgIGV2ZW50IHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vdXNlTW92ZShldmVudCkge1xuICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJlc3NlZCwgdGhpcykpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLmV2ZW50UGFnZVkgPSBldmVudC5wYWdlWTtcbiAgdGhpcy5yZWZyZXNoUG9zaXRpb25zKCk7XG59XG4vKipcbiAqICdiZWZvcmVPbkNlbGxNb3VzZU92ZXInIGhvb2sgY2FsbGJhY2suIEZpcmVkIHdoZW4gcG9pbnRlciB3YXMgb3ZlciBjZWxsLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgYG1vdXNlb3ZlcmAgZXZlbnQgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFZpc3VhbCBjZWxsIGNvb3JkaW5hdGVzIHdoZXJlIHdhcyBmaXJlZCBldmVudC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFREIENlbGwgcmVwcmVzZW50ZWQgYXMgSFRNTEVsZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBhbGxvd3Mgb3IgZGlzYWxsb3dzIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24gZm9yIHRoYXQgcGFydGljdWxhciBhcmVhLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZU92ZXIoZXZlbnQsIGNvb3JkcywgVEQsIGNvbnRyb2xsZXIpIHtcbiAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gIGlmICghc2VsZWN0ZWRSYW5nZSB8fCAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wcmVzc2VkLCB0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dzVG9Nb3ZlLCB0aGlzKS5pbmRleE9mKGNvb3Jkcy5yb3cpID4gLTEpIHtcbiAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfU0hPV19VSSk7XG4gIH0gZWxzZSB7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKSh0aGlzLmhvdC5yb290RWxlbWVudCwgQ1NTX1NIT1dfVUkpO1xuICB9XG4gIGNvbnRyb2xsZXIucm93ID0gdHJ1ZTtcbiAgY29udHJvbGxlci5jb2x1bW4gPSB0cnVlO1xuICBjb250cm9sbGVyLmNlbGwgPSB0cnVlO1xuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuY29vcmRzID0gY29vcmRzO1xuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhcmdldCwgdGhpcykuVEQgPSBURDtcbn1cbi8qKlxuICogYG9uTW91c2VVcGAgaG9vayBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gX29uTW91c2VVcCgpIHtcbiAgY29uc3QgdGFyZ2V0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YXJnZXQsIHRoaXMpLnJvdztcbiAgY29uc3Qgcm93c0xlbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93c1RvTW92ZSwgdGhpcykubGVuZ3RoO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKSh0aGlzLmhvdC5yb290RWxlbWVudCwgW0NTU19PTl9NT1ZJTkcsIENTU19TSE9XX1VJLCBDU1NfQUZURVJfU0VMRUNUSU9OXSk7XG4gIGlmICh0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpIHtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuaG90LnJvb3RFbGVtZW50LCBDU1NfQUZURVJfU0VMRUNUSU9OKTtcbiAgfVxuICBpZiAocm93c0xlbiA8IDEgfHwgdGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZmlyc3RNb3ZlZFZpc3VhbFJvdyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93c1RvTW92ZSwgdGhpcylbMF07XG4gIGNvbnN0IGZpcnN0TW92ZWRQaHlzaWNhbFJvdyA9IHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZmlyc3RNb3ZlZFZpc3VhbFJvdyk7XG4gIGNvbnN0IG1vdmVQZXJmb3JtZWQgPSB0aGlzLmRyYWdSb3dzKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93c1RvTW92ZSwgdGhpcyksIHRhcmdldCk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93c1RvTW92ZSwgdGhpcykubGVuZ3RoID0gMDtcbiAgaWYgKG1vdmVQZXJmb3JtZWQgPT09IHRydWUpIHtcbiAgICB0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKTtcbiAgICB0aGlzLmhvdC5yZW5kZXIoKTtcbiAgICB0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gdGhpcy5ob3QudG9WaXN1YWxSb3coZmlyc3RNb3ZlZFBoeXNpY2FsUm93KTtcbiAgICBjb25zdCBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25TdGFydCArIHJvd3NMZW4gLSAxO1xuICAgIHRoaXMuaG90LnNlbGVjdFJvd3Moc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7XG4gIH1cbn1cbi8qKlxuICogYGFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5YCBob29rIGNhbGxiYWNrLiBGaXJlZCB0aGUgdGFibGUgd2FzIHNjcm9sbGVkIGhvcml6b250YWxseS5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkoKSB7XG4gIGNvbnN0IHd0VGFibGUgPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlO1xuICBjb25zdCBoZWFkZXJXaWR0aCA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKTtcbiAgY29uc3Qgc2Nyb2xsTGVmdCA9IHd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ7XG4gIGNvbnN0IHBvc0xlZnQgPSBoZWFkZXJXaWR0aCArIHNjcm9sbExlZnQ7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfYmFja2xpZ2h0LCB0aGlzKS5zZXRQb3NpdGlvbihudWxsLCBwb3NMZWZ0KTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9iYWNrbGlnaHQsIHRoaXMpLnNldFNpemUod3RUYWJsZS5oaWRlci5vZmZzZXRXaWR0aCAtIHBvc0xlZnQpO1xufVxuZnVuY3Rpb24gX29uQWZ0ZXJMb2FkRGF0YSgpIHtcbiAgdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgU1RBVEVfSU5JVElBTElaRUQgPSAwO1xuY29uc3QgU1RBVEVfQlVJTFQgPSAxO1xuY29uc3QgU1RBVEVfQVBQRU5ERUQgPSAyO1xuY29uc3QgVU5JVCA9ICdweCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgQmFzZVVJIHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBIYW5kc29udGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIHVpIGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfZWxlbWVudFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgYnVpbGQgc3RhdGUgb2YgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic3RhdGVcIiwgU1RBVEVfSU5JVElBTElaRUQpO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNyZWF0ZWQgVUkgZWxlbWVudHMgdG8gdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHdyYXBwZXIgRWxlbWVudCB3aGljaCBhcmUgcGFyZW50IGZvciBvdXIgVUkgZWxlbWVudC5cbiAgICovXG4gIGFwcGVuZFRvKHdyYXBwZXIpIHtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9BUFBFTkRFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgZm9yIGNyZWF0ZSBVSSBlbGVtZW50LiBPbmx5IGNyZWF0ZSwgd2l0aG91dCBhcHBlbmQgdG8gdGFibGUuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gU1RBVEVfSU5JVElBTElaRUQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnN0YXRlID0gU1RBVEVfQlVJTFQ7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIGZvciByZW1vdmUgVUkgZWxlbWVudC5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuaXNBcHBlbmRlZCgpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9JTklUSUFMSVpFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBVSSBlbGVtZW50IGFyZSBhcHBlbmRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FwcGVuZGVkKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBTVEFURV9BUFBFTkRFRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBVSSBlbGVtZW50IGFyZSBidWlsdC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0J1aWx0KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID49IFNUQVRFX0JVSUxUO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHRlciBmb3IgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgTmV3IHRvcCBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlZnQgTmV3IGxlZnQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBzZXRQb3NpdGlvbih0b3AsIGxlZnQpIHtcbiAgICBpZiAodG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wID0gdG9wICsgVU5JVDtcbiAgICB9XG4gICAgaWYgKGxlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0ID0gbGVmdCArIFVOSVQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHRlciBmb3IgdGhlIGVsZW1lbnQgcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWlucyBsZWZ0IGFuZCB0b3AgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQuXG4gICAqL1xuICBnZXRQb3NpdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiB0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCA/IHBhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wLCAxMCkgOiAwLFxuICAgICAgbGVmdDogdGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0ID8gcGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LCAxMCkgOiAwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR0ZXIgZm9yIHRoZSBlbGVtZW50IHNpemUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBOZXcgd2lkdGggb2YgdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgTmV3IGhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHNldFNpemUod2lkdGgsIGhlaWdodCkge1xuICAgIGlmICh3aWR0aCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgVU5JVDtcbiAgICB9XG4gICAgaWYgKGhlaWdodCkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyBVTklUO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHRoZSBlbGVtZW50IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbnMgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIGdldFNpemUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoID8gcGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwgMTApIDogMCxcbiAgICAgIGhlaWdodDogdGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQgPyBwYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwgMTApIDogMFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0dGVyIGZvciB0aGUgZWxlbWVudCBvZmZzZXQuIE9mZnNldCBtZWFucyBtYXJnaW5Ub3AgYW5kIG1hcmdpbkxlZnQgb2YgdGhlIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0b3AgTmV3IG1hcmdpbiB0b3Agb2YgdGhlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZWZ0IE5ldyBtYXJnaW4gbGVmdCBvZiB0aGUgZWxlbWVudC5cbiAgICovXG4gIHNldE9mZnNldCh0b3AsIGxlZnQpIHtcbiAgICBpZiAodG9wKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCA9IHRvcCArIFVOSVQ7XG4gICAgfVxuICAgIGlmIChsZWZ0KSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQgPSBsZWZ0ICsgVU5JVDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0dGVyIGZvciB0aGUgZWxlbWVudCBvZmZzZXQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R9IE9iamVjdCBjb250YWlucyB0b3AgYW5kIGxlZnQgb2Zmc2V0IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgZ2V0T2Zmc2V0KCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b3A6IHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wID8gcGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AsIDEwKSA6IDAsXG4gICAgICBsZWZ0OiB0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQgPyBwYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsIDEwKSA6IDBcbiAgICB9O1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBCYXNlVUk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IENTU19DTEFTU05BTUUgPSAnaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBCYWNrbGlnaHRVSVxuICovXG5jbGFzcyBCYWNrbGlnaHRVSSBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICAvKipcbiAgICogQ3VzdG9tIGNsYXNzTmFtZSBvbiBidWlsZCBwcm9jZXNzLlxuICAgKi9cbiAgYnVpbGQoKSB7XG4gICAgc3VwZXIuYnVpbGQoKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKHRoaXMuX2VsZW1lbnQsIENTU19DTEFTU05BTUUpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBCYWNrbGlnaHRVSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuY29uc3QgQ1NTX0NMQVNTTkFNRSA9ICdodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIEd1aWRlbGluZVVJXG4gKi9cbmNsYXNzIEd1aWRlbGluZVVJIGV4dGVuZHMgX2Jhc2UuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBDdXN0b20gY2xhc3NOYW1lIG9uIGJ1aWxkIHByb2Nlc3MuXG4gICAqL1xuICBidWlsZCgpIHtcbiAgICBzdXBlci5idWlsZCgpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGhpcy5fZWxlbWVudCwgQ1NTX0NMQVNTTkFNRSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEd1aWRlbGluZVVJOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9tYW51YWxSb3dSZXNpemUgPSByZXF1aXJlKFwiLi9tYW51YWxSb3dSZXNpemVcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfbWFudWFsUm93UmVzaXplLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9tYW51YWxSb3dSZXNpemUuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5NYW51YWxSb3dSZXNpemUgPSBfbWFudWFsUm93UmVzaXplLk1hbnVhbFJvd1Jlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX3RyYW5zbGF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2xhdGlvbnNcIik7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vLyBEZXZlbG9wZXIgbm90ZSEgV2hlbmV2ZXIgeW91IG1ha2UgYSBjaGFuZ2UgaW4gdGhpcyBmaWxlLCBtYWtlIGFuIGFuYWxvZ291cyBjaGFuZ2UgaW4gbWFudWFsQ29sdW1uUmVzaXplLmpzXG5cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnbWFudWFsUm93UmVzaXplJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMzA7XG5jb25zdCBQRVJTSVNURU5UX1NUQVRFX0tFWSA9ICdtYW51YWxSb3dIZWlnaHRzJztcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEBwbHVnaW4gTWFudWFsUm93UmVzaXplXG4gKiBAY2xhc3MgTWFudWFsUm93UmVzaXplXG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBUaGlzIHBsdWdpbiBhbGxvd3MgdG8gY2hhbmdlIHJvd3MgaGVpZ2h0LiBUbyBtYWtlIHJvd3MgaGVpZ2h0IHBlcnNpc3RlbnQgdGhlIHtAbGluayBPcHRpb25zI3BlcnNpc3RlbnRTdGF0ZX1cbiAqIHBsdWdpbiBzaG91bGQgYmUgZW5hYmxlZC5cbiAqXG4gKiBUaGUgcGx1Z2luIGNyZWF0ZXMgYWRkaXRpb25hbCBjb21wb25lbnRzIHRvIG1ha2UgcmVzaXppbmcgcG9zc2libHkgdXNpbmcgdXNlciBpbnRlcmZhY2U6XG4gKiAtIGhhbmRsZSAtIHRoZSBkcmFnZ2FibGUgZWxlbWVudCB0aGF0IHNldHMgdGhlIGRlc2lyZWQgaGVpZ2h0IG9mIHRoZSByb3cuXG4gKiAtIGd1aWRlIC0gdGhlIGhlbHBlciBndWlkZSB0aGF0IHNob3dzIHRoZSBkZXNpcmVkIGhlaWdodCBhcyBhIGhvcml6b250YWwgZ3VpZGUuXG4gKi9cbnZhciBfY3VycmVudFRIID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2N1cnJlbnRSb3cgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc2VsZWN0ZWRSb3dzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2N1cnJlbnRIZWlnaHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfbmV3U2l6ZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9zdGFydFkgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc3RhcnRIZWlnaHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc3RhcnRPZmZzZXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaGFuZGxlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2d1aWRlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3ByZXNzZWQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXNUcmlnZ2VyZWRCeVJNQiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9kYmxjbGljayA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9hdXRvcmVzaXplVGltZW91dCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9yb3dIZWlnaHRzTWFwID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2NvbmZpZyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9NYW51YWxSb3dSZXNpemVfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIE1hbnVhbFJvd1Jlc2l6ZSBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9XG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGhvdEluc3RhbmNlKSB7XG4gICAgc3VwZXIoaG90SW5zdGFuY2UpO1xuICAgIC8qKlxuICAgICAqICdtb3VzZW92ZXInIGV2ZW50IGNhbGxiYWNrIC0gc2V0IHRoZSBoYW5kbGUgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IFRoZSBtb3VzZSBldmVudC5cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2N1cnJlbnRUSCwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3VycmVudFJvdywgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcltdfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZWxlY3RlZFJvd3MsIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jdXJyZW50SGVpZ2h0LCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9uZXdTaXplLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdGFydFksIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3N0YXJ0SGVpZ2h0LCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdGFydE9mZnNldCwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9oYW5kbGUsIHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0hUTUxFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ndWlkZSwgdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcHJlc3NlZCwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pc1RyaWdnZXJlZEJ5Uk1CLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGJsY2xpY2ssIDApO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2F1dG9yZXNpemVUaW1lb3V0LCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCB0byBrZWVwIGFuZCB0cmFjayB3aWR0aHMgZm9yIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICAgICAqXG4gICAgICogQHR5cGUge1BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9yb3dIZWlnaHRzTWFwLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFByaXZhdGUgcG9vbCB0byBzYXZlIGNvbmZpZ3VyYXRpb24gZnJvbSB1cGRhdGVTZXR0aW5ncy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NvbmZpZywgdm9pZCAwKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKSwgJ21hbnVhbFJvd1Jlc2l6ZXInKTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLCAnbWFudWFsUm93UmVzaXplckd1aWRlJyk7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGdldCBpbmxpbmVEaXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LmlzUnRsKCkgPyAncmlnaHQnIDogJ2xlZnQnO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBNYW51YWxSb3dSZXNpemUjZW5hYmxlUGx1Z2lufSBtZXRob2QgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3Jvd0hlaWdodHNNYXAsIHRoaXMsIG5ldyBfdHJhbnNsYXRpb25zLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwKCkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93SGVpZ2h0c01hcCwgdGhpcykuYWRkTG9jYWxIb29rKCdpbml0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCwgdGhpcywgX29uTWFwSW5pdCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0hlaWdodHNNYXAsIHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ21vZGlmeVJvd0hlaWdodCcsIChoZWlnaHQsIHJvdykgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCwgdGhpcywgX29uTW9kaWZ5Um93SGVpZ2h0KS5jYWxsKHRoaXMsIGhlaWdodCwgcm93KSk7XG4gICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BtYW51YWxSb3dSZXNpemVgXShAL2FwaS9vcHRpb25zLm1kI21hbnVhbHJvd3Jlc2l6ZSlcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29uZmlnLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0hlaWdodHNNYXAsIHRoaXMpLmdldFZhbHVlcygpKTtcbiAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBjdXJyZW50IHNpemVzIHVzaW5nIHRoZSBwZXJzaXN0ZW50U3RhdGUgcGx1Z2luICh0aGUge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gaGFzIHRvIGJlXG4gICAqIGVuYWJsZWQpLlxuICAgKlxuICAgKiBAZmlyZXMgSG9va3MjcGVyc2lzdGVudFN0YXRlU2F2ZVxuICAgKi9cbiAgc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSB7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ3BlcnNpc3RlbnRTdGF0ZVNhdmUnLCBQRVJTSVNURU5UX1NUQVRFX0tFWSwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dIZWlnaHRzTWFwLCB0aGlzKS5nZXRWYWx1ZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIHByZXZpb3VzbHkgc2F2ZWQgc2l6ZXMgdXNpbmcgdGhlIHBlcnNpc3RlbnRTdGF0ZSBwbHVnaW4gKHRoZSB7QGxpbmsgT3B0aW9ucyNwZXJzaXN0ZW50U3RhdGV9IG9wdGlvblxuICAgKiBoYXMgYmUgZW5hYmxlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQGZpcmVzIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZUxvYWRcbiAgICovXG4gIGxvYWRNYW51YWxSb3dIZWlnaHRzKCkge1xuICAgIGNvbnN0IHN0b3JlZFN0YXRlID0ge307XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ3BlcnNpc3RlbnRTdGF0ZUxvYWQnLCBQRVJTSVNURU5UX1NUQVRFX0tFWSwgc3RvcmVkU3RhdGUpO1xuICAgIHJldHVybiBzdG9yZWRTdGF0ZS52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuZXcgaGVpZ2h0IGZvciBzcGVjaWZpZWQgcm93IGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgUm93IGhlaWdodC5cbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBuZXcgaGVpZ2h0LlxuICAgKi9cbiAgc2V0TWFudWFsU2l6ZShyb3csIGhlaWdodCkge1xuICAgIGNvbnN0IHBoeXNpY2FsUm93ID0gdGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyb3cpO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgX3NyYy5WaWV3cG9ydFJvd3NDYWxjdWxhdG9yLkRFRkFVTFRfSEVJR0hUKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0hlaWdodHNNYXAsIHRoaXMpLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbFJvdywgbmV3SGVpZ2h0KTtcbiAgICByZXR1cm4gbmV3SGVpZ2h0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxhc3QgZGVzaXJlZCByb3cgaGVpZ2h0IHNldCBtYW51YWxseSB3aXRoIHRoZSByZXNpemUgaGFuZGxlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbGFzdCBkZXNpcmVkIHJvdyBoZWlnaHQuXG4gICAqL1xuICBnZXRMYXN0RGVzaXJlZFJvd0hlaWdodCgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50SGVpZ2h0LCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXNpemUgaGFuZGxlIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxDZWxsRWxlbWVudH0gVEggVEggSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgc2V0dXBIYW5kbGVQb3NpdGlvbihUSCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudFRILCB0aGlzLCBUSCk7XG4gICAgY29uc3Qge1xuICAgICAgdmlld1xuICAgIH0gPSB0aGlzLmhvdDtcbiAgICBjb25zdCB7XG4gICAgICBfd3Q6IHd0XG4gICAgfSA9IHZpZXc7XG4gICAgY29uc3QgY2VsbENvb3JkcyA9IHd0Lnd0VGFibGUuZ2V0Q29vcmRzKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudFRILCB0aGlzKSk7XG4gICAgY29uc3Qgcm93ID0gY2VsbENvb3Jkcy5yb3c7XG5cbiAgICAvLyBJZ25vcmUgcm93IGhlYWRlcnMuXG4gICAgaWYgKHJvdyA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyV2lkdGggPSAoMCwgX2VsZW1lbnQub3V0ZXJXaWR0aCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpKTtcbiAgICBjb25zdCBib3ggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgLy8gUmVhZCBcImZpeGVkUm93c1RvcFwiIGFuZCBcImZpeGVkUm93c0JvdHRvbVwiIHRocm91Z2ggdGhlIFdhbGtvbnRhYmxlIGFzIGluIHRoYXQgY29udGV4dCwgdGhlIGZpeGVkXG4gICAgLy8gcm93cyBhcmUgbW9kaWZpZWQgKHJlZHVjZWQgYnkgdGhlIG51bWJlciBvZiBoaWRkZW4gcm93cykgYnkgVGFibGVWaWV3IG1vZHVsZS5cbiAgICBjb25zdCBmaXhlZFJvd1RvcCA9IHJvdyA8IHd0LmdldFNldHRpbmcoJ2ZpeGVkUm93c1RvcCcpO1xuICAgIGNvbnN0IGZpeGVkUm93Qm90dG9tID0gcm93ID49IHZpZXcuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsIDEpIC0gd3QuZ2V0U2V0dGluZygnZml4ZWRSb3dzQm90dG9tJyk7XG4gICAgbGV0IHJlbGF0aXZlSGVhZGVyUG9zaXRpb247XG4gICAgaWYgKGZpeGVkUm93VG9wKSB7XG4gICAgICByZWxhdGl2ZUhlYWRlclBvc2l0aW9uID0gd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpLCBjZWxsQ29vcmRzLnJvdywgY2VsbENvb3Jkcy5jb2wpO1xuICAgIH0gZWxzZSBpZiAoZml4ZWRSb3dCb3R0b20pIHtcbiAgICAgIHJlbGF0aXZlSGVhZGVyUG9zaXRpb24gPSB3dC53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcyksIGNlbGxDb29yZHMucm93LCBjZWxsQ29vcmRzLmNvbCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIFRIIGlzIG5vdCBhIGNoaWxkIG9mIHRoZSB0b3AtbGVmdC9ib3R0b20tbGVmdCBvdmVybGF5LCByZWNhbGN1bGF0ZSB1c2luZ1xuICAgIC8vIHRoZSBsZWZ0IG92ZXJsYXkgLSBhcyB0aGlzIG92ZXJsYXkgY29udGFpbnMgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlcnMuXG4gICAgaWYgKCFyZWxhdGl2ZUhlYWRlclBvc2l0aW9uKSB7XG4gICAgICByZWxhdGl2ZUhlYWRlclBvc2l0aW9uID0gd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VEgsIHRoaXMpLCBjZWxsQ29vcmRzLnJvdywgY2VsbENvb3Jkcy5jb2wpO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRSb3csIHRoaXMsIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocm93KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RlZFJvd3MsIHRoaXMsIFtdKTtcbiAgICBjb25zdCBpc0Z1bGxSb3dTZWxlY3RlZCA9IHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSB8fCB0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7XG4gICAgaWYgKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkgJiYgaXNGdWxsUm93U2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvblJhbmdlcyA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKTtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShzZWxlY3Rpb25SYW5nZXMsIHNlbGVjdGlvblJhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZnJvbVJvdyA9IHNlbGVjdGlvblJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93O1xuICAgICAgICBjb25zdCB0b1JvdyA9IHNlbGVjdGlvblJhbmdlLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93O1xuXG4gICAgICAgIC8vIEFkZCBldmVyeSBzZWxlY3RlZCByb3cgZm9yIHJlc2l6ZSBhY3Rpb24uXG4gICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoZnJvbVJvdywgdG9Sb3csIHJvd0luZGV4ID0+IHtcbiAgICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKS5pbmNsdWRlcyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKS5wdXNoKHJvd0luZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gUmVzaXppbmcgZWxlbWVudCBiZXlvbmQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChhbHNvIHdoZW4gdGhlcmUgaXMgbm8gc2VsZWN0aW9uKS5cbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKS5pbmNsdWRlcyhfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRSb3csIHRoaXMpKSkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3RlZFJvd3MsIHRoaXMsIFtfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRSb3csIHRoaXMpXSk7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc3RhcnRPZmZzZXQsIHRoaXMsIHJlbGF0aXZlSGVhZGVyUG9zaXRpb24udG9wIC0gNik7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdGFydEhlaWdodCwgdGhpcywgcGFyc2VJbnQoYm94LmhlaWdodCwgMTApKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykuc3R5bGUudG9wID0gYCR7X2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGFydE9mZnNldCwgdGhpcykgKyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXJ0SGVpZ2h0LCB0aGlzKX1weGA7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXSA9IGAke3JlbGF0aXZlSGVhZGVyUG9zaXRpb24uc3RhcnR9cHhgO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKS5zdHlsZS53aWR0aCA9IGAke2hlYWRlcldpZHRofXB4YDtcbiAgICB0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHJlc2l6ZSBoYW5kbGUgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWZyZXNoSGFuZGxlUG9zaXRpb24oKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLnN0eWxlLnRvcCA9IGAke19jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhcnRPZmZzZXQsIHRoaXMpICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50SGVpZ2h0LCB0aGlzKX1weGA7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcmVzaXplIGd1aWRlIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2V0dXBHdWlkZVBvc2l0aW9uKCkge1xuICAgIGNvbnN0IGhhbmRsZVdpZHRoID0gcGFyc2VJbnQoKDAsIF9lbGVtZW50Lm91dGVyV2lkdGgpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKSksIDEwKTtcbiAgICBjb25zdCBoYW5kbGVFbmRQb3NpdGlvbiA9IHBhcnNlSW50KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl0sIDEwKSArIGhhbmRsZVdpZHRoO1xuICAgIGNvbnN0IG1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoID0gcGFyc2VJbnQodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aCgwKSwgMTApO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLCAnYWN0aXZlJyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlLCB0aGlzKSwgJ2FjdGl2ZScpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLnN0eWxlLnRvcCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKS5zdHlsZS50b3A7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdID0gYCR7aGFuZGxlRW5kUG9zaXRpb259cHhgO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLnN0eWxlLndpZHRoID0gYCR7bWF4aW11bVZpc2libGVFbGVtZW50V2lkdGggLSBoYW5kbGVXaWR0aH1weGA7XG4gICAgdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHJlc2l6ZSBndWlkZSBwb3NpdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZnJlc2hHdWlkZVBvc2l0aW9uKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZ3VpZGUsIHRoaXMpLnN0eWxlLnRvcCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGFuZGxlLCB0aGlzKS5zdHlsZS50b3A7XG4gIH1cblxuICAvKipcbiAgICogSGlkZXMgYm90aCB0aGUgcmVzaXplIGhhbmRsZSBhbmQgcmVzaXplIGd1aWRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGlkZUhhbmRsZUFuZEd1aWRlKCkge1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpLCAnYWN0aXZlJyk7XG4gICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2d1aWRlLCB0aGlzKSwgJ2FjdGl2ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwcm92aWRlZCBlbGVtZW50IGlzIGNvbnNpZGVyZWQgYXMgYSByb3cgaGVhZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEhUTUwgZWxlbWVudC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjaGVja0lmUm93SGVhZGVyKGVsZW1lbnQpIHtcbiAgICBjb25zdCB0Ym9keSA9ICgwLCBfZWxlbWVudC5jbG9zZXN0KShlbGVtZW50LCBbJ1RCT0RZJ10sIHRoaXMuaG90LnJvb3RFbGVtZW50KTtcbiAgICBjb25zdCB7XG4gICAgICBpbmxpbmVTdGFydE92ZXJsYXksXG4gICAgICB0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksXG4gICAgICBib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXlcbiAgICB9ID0gdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztcbiAgICByZXR1cm4gW2lubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLlRCT0RZLCB0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5UQk9EWSwgYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEJPRFldLmluY2x1ZGVzKHRib2R5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBUSCBlbGVtZW50IGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgSFRNTCBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBnZXRDbG9zZXN0VEhQYXJlbnQoZWxlbWVudCkge1xuICAgIGlmIChlbGVtZW50LnRhZ05hbWUgIT09ICdUQUJMRScpIHtcbiAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYWN0dWFsIGhlaWdodCBmb3IgdGhlIHByb3ZpZGVkIHJvdyBpbmRleC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBBY3R1YWwgcm93IGhlaWdodC5cbiAgICovXG4gIGdldEFjdHVhbFJvd0hlaWdodChyb3cpIHtcbiAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCB1dGlsaXplIGB0aGlzLmhvdC5nZXRSb3dIZWlnaHRgIGFmdGVyIGl0J3MgZml4ZWQgYW5kIHdvcmtpbmcgcHJvcGVybHkuXG4gICAgY29uc3Qgd2Fsa29udGFibGVIZWlnaHQgPSB0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChyb3cpO1xuICAgIGlmICh3YWxrb250YWJsZUhlaWdodCAhPT0gdW5kZWZpbmVkICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbmV3U2l6ZSwgdGhpcykgPCB3YWxrb250YWJsZUhlaWdodCkge1xuICAgICAgcmV0dXJuIHdhbGtvbnRhYmxlSGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9uZXdTaXplLCB0aGlzKTtcbiAgfVxuICAvKipcbiAgICogQXV0by1zaXplIHJvdyBhZnRlciBkb3VibGVjbGljayAtIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlUm93UmVzaXplXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlclJvd1Jlc2l6ZVxuICAgKi9cbiAgYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCkge1xuICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciA9IHRydWU7XG4gICAgICB0aGlzLmhvdC52aWV3LnJlbmRlcigpOyAvLyB1cGRhdGVzIGFsbFxuICAgICAgdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlc2l6ZSA9IChyb3csIGZvcmNlUmVuZGVyKSA9PiB7XG4gICAgICBjb25zdCBob29rTmV3U2l6ZSA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVSb3dSZXNpemUnLCB0aGlzLmdldEFjdHVhbFJvd0hlaWdodChyb3cpLCByb3csIHRydWUpO1xuICAgICAgaWYgKGhvb2tOZXdTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9uZXdTaXplLCB0aGlzLCBob29rTmV3U2l6ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldE1hbnVhbFNpemUocm93LCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX25ld1NpemUsIHRoaXMpKTsgLy8gZG91YmxlIGNsaWNrIHNldHMgYXV0byByb3cgc2l6ZVxuXG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJSb3dSZXNpemUnLCB0aGlzLmdldEFjdHVhbFJvd0hlaWdodChyb3cpLCByb3csIHRydWUpO1xuICAgICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGJsY2xpY2ssIHRoaXMpID49IDIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUm93c0xlbmd0aCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKS5sZW5ndGg7XG4gICAgICBpZiAoc2VsZWN0ZWRSb3dzTGVuZ3RoID4gMSkge1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zZWxlY3RlZFJvd3MsIHRoaXMpLCBzZWxlY3RlZFJvdyA9PiB7XG4gICAgICAgICAgcmVzaXplKHNlbGVjdGVkUm93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKSwgc2VsZWN0ZWRSb3cgPT4ge1xuICAgICAgICAgIHJlc2l6ZShzZWxlY3RlZFJvdywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RibGNsaWNrLCB0aGlzLCAwKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2F1dG9yZXNpemVUaW1lb3V0LCB0aGlzLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAnbW91c2Vkb3duJyBldmVudCBjYWxsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBUaGUgbW91c2UgZXZlbnQuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgbW91c2UgZXZlbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgYmluZEV2ZW50cygpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290RWxlbWVudCxcbiAgICAgIHJvb3RXaW5kb3dcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ21vdXNlb3ZlcicsIGUgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VPdmVyKS5jYWxsKHRoaXMsIGUpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RFbGVtZW50LCAnbW91c2Vkb3duJywgZSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWFudWFsUm93UmVzaXplX2JyYW5kLCB0aGlzLCBfb25Nb3VzZURvd24pLmNhbGwodGhpcywgZSkpO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm9vdFdpbmRvdywgJ21vdXNlbW92ZScsIGUgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VNb3ZlKS5jYWxsKHRoaXMsIGUpKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RXaW5kb3csICdtb3VzZXVwJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX01hbnVhbFJvd1Jlc2l6ZV9icmFuZCwgdGhpcywgX29uTW91c2VVcCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hhbmRsZSwgdGhpcyksICdjb250ZXh0bWVudScsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9NYW51YWxSb3dSZXNpemVfYnJhbmQsIHRoaXMsIF9vbkNvbnRleHRNZW51KS5jYWxsKHRoaXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgcHJvdmlkZWQgcm93IGhlaWdodCwgYmFzZWQgb24gdGhlIHBsdWdpbiBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBSb3cgaGVpZ2h0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBzdXBlci5kZXN0cm95KCk7XG4gIH1cbn1cbmV4cG9ydHMuTWFudWFsUm93UmVzaXplID0gTWFudWFsUm93UmVzaXplO1xuZnVuY3Rpb24gX29uTW91c2VPdmVyKGV2ZW50KSB7XG4gIC8vIFdvcmthcm91bmQgZm9yICM2OTI2IC0gaWYgdGhlIGBldmVudC50YXJnZXRgIGlzIHRlbXBvcmFyaWx5IGRldGFjaGVkLCB3ZSBjYW4gc2tpcCB0aGlzIGNhbGxiYWNrIGFuZCB3YWl0IGZvclxuICAvLyB0aGUgbmV4dCBgb25tb3VzZW92ZXJgLlxuICBpZiAoKDAsIF9lbGVtZW50LmlzRGV0YWNoZWQpKGV2ZW50LnRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBIFwibW91c2VvdmVyXCIgYWN0aW9uIGlzIHRyaWdnZXJlZCByaWdodCBhZnRlciBleGVjdXRpbmcgXCJjb250ZXh0bWVudVwiIGV2ZW50LiBJdCBzaG91bGQgYmUgaWdub3JlZC5cbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNUcmlnZ2VyZWRCeVJNQiwgdGhpcykgPT09IHRydWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHRoaXMuY2hlY2tJZlJvd0hlYWRlcihldmVudC50YXJnZXQpKSB7XG4gICAgY29uc3QgdGggPSB0aGlzLmdldENsb3Nlc3RUSFBhcmVudChldmVudC50YXJnZXQpO1xuICAgIGlmICh0aCkge1xuICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX3ByZXNzZWQsIHRoaXMpKSB7XG4gICAgICAgIHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBfb25Nb3VzZURvd24oZXZlbnQpIHtcbiAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCAnbWFudWFsUm93UmVzaXplcicpKSB7XG4gICAgdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudFRILCB0aGlzKSk7XG4gICAgdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIHRydWUpO1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2F1dG9yZXNpemVUaW1lb3V0LCB0aGlzKSA9PT0gbnVsbCkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9hdXRvcmVzaXplVGltZW91dCwgdGhpcywgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLCA1MDApKTtcbiAgICAgIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9hdXRvcmVzaXplVGltZW91dCwgdGhpcykpO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RibGNsaWNrLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RibGNsaWNrLCB0aGlzKSArIDEpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc3RhcnRZLCB0aGlzLCBldmVudC5wYWdlWSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9uZXdTaXplLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXJ0SGVpZ2h0LCB0aGlzKSk7XG4gIH1cbn1cbi8qKlxuICogJ21vdXNlbW92ZScgZXZlbnQgY2FsbGJhY2sgLSByZWZyZXNoIHRoZSBoYW5kbGUgYW5kIGd1aWRlIHBvc2l0aW9ucywgY2FjaGUgdGhlIG5ldyByb3cgaGVpZ2h0LlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgVGhlIG1vdXNlIGV2ZW50LlxuICovXG5mdW5jdGlvbiBfb25Nb3VzZU1vdmUoZXZlbnQpIHtcbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcHJlc3NlZCwgdGhpcykpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRIZWlnaHQsIHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhcnRIZWlnaHQsIHRoaXMpICsgKGV2ZW50LnBhZ2VZIC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGFydFksIHRoaXMpKSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKSwgc2VsZWN0ZWRSb3cgPT4ge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9uZXdTaXplLCB0aGlzLCB0aGlzLnNldE1hbnVhbFNpemUoc2VsZWN0ZWRSb3csIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudEhlaWdodCwgdGhpcykpKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpO1xuICAgIHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKTtcbiAgfVxufVxuLyoqXG4gKiAnbW91c2V1cCcgZXZlbnQgY2FsbGJhY2sgLSBhcHBseSB0aGUgcm93IHJlc2l6aW5nLlxuICpcbiAqIEBmaXJlcyBIb29rcyNiZWZvcmVSb3dSZXNpemVcbiAqIEBmaXJlcyBIb29rcyNhZnRlclJvd1Jlc2l6ZVxuICovXG5mdW5jdGlvbiBfb25Nb3VzZVVwKCkge1xuICBjb25zdCByZW5kZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmhvdC52aWV3LnJlbmRlcigpOyAvLyB1cGRhdGVzIGFsbFxuICAgIHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gIH07XG4gIGNvbnN0IHJ1bkhvb2tzID0gKHJvdywgZm9yY2VSZW5kZXIpID0+IHtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlUm93UmVzaXplJywgdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQocm93KSwgcm93LCBmYWxzZSk7XG4gICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICByZW5kZXIoKTtcbiAgICB9XG4gICAgdGhpcy5zYXZlTWFudWFsUm93SGVpZ2h0cygpO1xuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclJvd1Jlc2l6ZScsIHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KHJvdyksIHJvdywgZmFsc2UpO1xuICB9O1xuICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9wcmVzc2VkLCB0aGlzKSkge1xuICAgIHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9wcmVzc2VkLCB0aGlzLCBmYWxzZSk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbmV3U2l6ZSwgdGhpcykgIT09IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhcnRIZWlnaHQsIHRoaXMpKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFJvd3NMZW5ndGggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGVkUm93cywgdGhpcykubGVuZ3RoO1xuICAgICAgaWYgKHNlbGVjdGVkUm93c0xlbmd0aCA+IDEpIHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKSwgc2VsZWN0ZWRSb3cgPT4ge1xuICAgICAgICAgIHJ1bkhvb2tzKHNlbGVjdGVkUm93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2VsZWN0ZWRSb3dzLCB0aGlzKSwgc2VsZWN0ZWRSb3cgPT4ge1xuICAgICAgICAgIHJ1bkhvb2tzKHNlbGVjdGVkUm93LCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRUSCwgdGhpcykpO1xuICB9XG59XG4vKipcbiAqIENhbGxiYWNrIGZvciBcImNvbnRleHRtZW51XCIgZXZlbnQgdHJpZ2dlcmVkIG9uIGVsZW1lbnQgc2hvd2luZyBtb3ZlIGhhbmRsZS4gSXQgcmVtb3ZlcyBoYW5kbGUgYW5kIGd1aWRlIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBfb25Db250ZXh0TWVudSgpIHtcbiAgdGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKTtcbiAgdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oYW5kbGUsIHRoaXMpKTtcbiAgdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9ndWlkZSwgdGhpcykpO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3ByZXNzZWQsIHRoaXMsIGZhbHNlKTtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc1RyaWdnZXJlZEJ5Uk1CLCB0aGlzLCB0cnVlKTtcblxuICAvLyBUaGVyZSBpcyB0aHJvd24gXCJtb3VzZW92ZXJcIiBldmVudCByaWdodCBhZnRlciBvcGVuaW5nIGEgY29udGV4dCBtZW51LiBUaGlzIGZsYWcgaW5mb3JtIHRoYXQgaGFuZGxlXG4gIC8vIHNob3VsZG4ndCBiZSBkcmF3biBqdXN0IGFmdGVyIHJlbW92aW5nIGl0LlxuICB0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCkgPT4ge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaXNUcmlnZ2VyZWRCeVJNQiwgdGhpcywgZmFsc2UpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIF9vbk1vZGlmeVJvd0hlaWdodChoZWlnaHQsIHJvdykge1xuICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgY29uc3QgcGh5c2ljYWxSb3cgPSB0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdyk7XG4gICAgY29uc3Qgcm93SGVpZ2h0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dIZWlnaHRzTWFwLCB0aGlzKS5nZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxSb3cpO1xuICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldICYmIHJvd0hlaWdodCkge1xuICAgICAgbmV3SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3SGVpZ2h0O1xufVxuLyoqXG4gKiBDYWxsYmFjayB0byBjYWxsIG9uIG1hcCdzIGBpbml0YCBsb2NhbCBob29rLlxuICovXG5mdW5jdGlvbiBfb25NYXBJbml0KCkge1xuICBjb25zdCBpbml0aWFsU2V0dGluZyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIGNvbnN0IGxvYWRlZE1hbnVhbFJvd0hlaWdodHMgPSB0aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7XG4gIHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIGxvYWRlZE1hbnVhbFJvd0hlaWdodHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsb2FkZWRNYW51YWxSb3dIZWlnaHRzLmZvckVhY2goKGhlaWdodCwgaW5kZXgpID0+IHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dIZWlnaHRzTWFwLCB0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoaW5kZXgsIGhlaWdodCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbFNldHRpbmcpKSB7XG4gICAgICBpbml0aWFsU2V0dGluZy5mb3JFYWNoKChoZWlnaHQsIGluZGV4KSA9PiB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93SGVpZ2h0c01hcCwgdGhpcykuc2V0VmFsdWVBdEluZGV4KGluZGV4LCBoZWlnaHQpO1xuICAgICAgfSk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvbmZpZywgdGhpcywgaW5pdGlhbFNldHRpbmcpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbFNldHRpbmcgPT09IHRydWUgJiYgQXJyYXkuaXNBcnJheShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbmZpZywgdGhpcykpKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbmZpZywgdGhpcykuZm9yRWFjaCgoaGVpZ2h0LCBpbmRleCkgPT4ge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0hlaWdodHNNYXAsIHRoaXMpLnNldFZhbHVlQXRJbmRleChpbmRleCwgaGVpZ2h0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIGFsbCBvZiB0aGUgQXV0b2ZpbGwtcmVsYXRlZCBvcGVyYXRpb25zIG9uIG1lcmdlZCBjZWxscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIEF1dG9maWxsQ2FsY3VsYXRpb25zXG4gKi9cbmNsYXNzIEF1dG9maWxsQ2FsY3VsYXRpb25zIHtcbiAgY29uc3RydWN0b3IocGx1Z2luKSB7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBNZXJnZSBDZWxscyBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWVyZ2VDZWxsc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwbHVnaW5cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIE1lcmdlZENlbGxzQ29sbGVjdGlvbiBjbGFzcyBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNZXJnZWRDZWxsc0NvbGxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibWVyZ2VkQ2VsbHNDb2xsZWN0aW9uXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgYXV0b2ZpbGwgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjdXJyZW50RmlsbERhdGFcIiwgbnVsbCk7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24gPSB0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ29ycmVjdCB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uIGFyZWEsIHNvIGl0J3Mgbm90IHNlbGVjdGluZyBvbmx5IGEgcGFydCBvZiBhIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBzZWxlY3Rpb25BcmVhIFRoZSBzZWxlY3Rpb24gdG8gY29ycmVjdC5cbiAgICovXG4gIGNvcnJlY3RTZWxlY3Rpb25BcmVhU2l6ZShzZWxlY3Rpb25BcmVhKSB7XG4gICAgaWYgKHNlbGVjdGlvbkFyZWFbMF0gPT09IHNlbGVjdGlvbkFyZWFbMl0gJiYgc2VsZWN0aW9uQXJlYVsxXSA9PT0gc2VsZWN0aW9uQXJlYVszXSkge1xuICAgICAgY29uc3QgbWVyZ2VkQ2VsbCA9IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChzZWxlY3Rpb25BcmVhWzBdLCBzZWxlY3Rpb25BcmVhWzFdKTtcbiAgICAgIGlmIChtZXJnZWRDZWxsKSB7XG4gICAgICAgIHNlbGVjdGlvbkFyZWFbMl0gPSBzZWxlY3Rpb25BcmVhWzBdICsgbWVyZ2VkQ2VsbC5yb3dzcGFuIC0gMTtcbiAgICAgICAgc2VsZWN0aW9uQXJlYVszXSA9IHNlbGVjdGlvbkFyZWFbMV0gKyBtZXJnZWRDZWxsLmNvbHNwYW4gLSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpcmVjdGlvbiBvZiB0aGUgYXV0b2ZpbGwgcHJvY2Vzcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0aW9uQXJlYSBUaGUgc2VsZWN0aW9uIGFyZWEuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGZpbmFsQXJlYSBUaGUgZmluYWwgYXJlYSAoYmFzZSArIGRyYWcpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBgdXBgLCBgZG93bmAsIGBsZWZ0YCBvciBgcmlnaHRgLlxuICAgKi9cbiAgZ2V0RGlyZWN0aW9uKHNlbGVjdGlvbkFyZWEsIGZpbmFsQXJlYSkge1xuICAgIGxldCBkaXJlY3Rpb24gPSBudWxsO1xuICAgIGlmIChmaW5hbEFyZWFbMF0gPT09IHNlbGVjdGlvbkFyZWFbMF0gJiYgZmluYWxBcmVhWzFdID09PSBzZWxlY3Rpb25BcmVhWzFdICYmIGZpbmFsQXJlYVszXSA9PT0gc2VsZWN0aW9uQXJlYVszXSkge1xuICAgICAgZGlyZWN0aW9uID0gJ2Rvd24nO1xuICAgIH0gZWxzZSBpZiAoZmluYWxBcmVhWzJdID09PSBzZWxlY3Rpb25BcmVhWzJdICYmIGZpbmFsQXJlYVsxXSA9PT0gc2VsZWN0aW9uQXJlYVsxXSAmJiBmaW5hbEFyZWFbM10gPT09IHNlbGVjdGlvbkFyZWFbM10pIHtcbiAgICAgIGRpcmVjdGlvbiA9ICd1cCc7XG4gICAgfSBlbHNlIGlmIChmaW5hbEFyZWFbMV0gPT09IHNlbGVjdGlvbkFyZWFbMV0gJiYgZmluYWxBcmVhWzJdID09PSBzZWxlY3Rpb25BcmVhWzJdKSB7XG4gICAgICBkaXJlY3Rpb24gPSAncmlnaHQnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3Rpb24gPSAnbGVmdCc7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogU25hcCB0aGUgZHJhZyBhcmVhIHRvIHRoZSBmYXJ0aGVzdCBtZXJnZWQgY2VsbCwgc28gaXQgd29uJ3QgY2xpcCBhbnkgb2YgdGhlIG1lcmdlZCBjZWxscy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYmFzZUFyZWEgVGhlIGJhc2Ugc2VsZWN0ZWQgYXJlYS5cbiAgICogQHBhcmFtIHtBcnJheX0gZHJhZ0FyZWEgVGhlIGRyYWcgYXJlYS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRyYWdEaXJlY3Rpb24gVGhlIGF1dG9maWxsIGRyYWcgZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0ge0FycmF5fSBmb3VuZE1lcmdlZENlbGxzIE1lcmdlQ2VsbENvb3JkcyBmb3VuZCBpbiB0aGUgYmFzZSBzZWxlY3Rpb24gYXJlYS5cbiAgICogQHJldHVybnMge0FycmF5fSBUaGUgbmV3IGRyYWcgYXJlYS5cbiAgICovXG4gIHNuYXBEcmFnQXJlYShiYXNlQXJlYSwgZHJhZ0FyZWEsIGRyYWdEaXJlY3Rpb24sIGZvdW5kTWVyZ2VkQ2VsbHMpIHtcbiAgICBjb25zdCBuZXdEcmFnQXJlYSA9IGRyYWdBcmVhLnNsaWNlKDApO1xuICAgIGNvbnN0IGZpbGxTaXplID0gdGhpcy5nZXRBdXRvZmlsbFNpemUoYmFzZUFyZWEsIGRyYWdBcmVhLCBkcmFnRGlyZWN0aW9uKTtcbiAgICBjb25zdCBbYmFzZUFyZWFTdGFydFJvdywgYmFzZUFyZWFTdGFydENvbHVtbiwgYmFzZUFyZWFFbmRSb3csIGJhc2VBcmVhRW5kQ29sdW1uXSA9IGJhc2VBcmVhO1xuICAgIGNvbnN0IHZlcnRpY2FsRGlyZWN0aW9uID0gWyd1cCcsICdkb3duJ10uaW5kZXhPZihkcmFnRGlyZWN0aW9uKSA+IC0xO1xuICAgIGNvbnN0IGZ1bGxDeWNsZSA9IHZlcnRpY2FsRGlyZWN0aW9uID8gYmFzZUFyZWFFbmRSb3cgLSBiYXNlQXJlYVN0YXJ0Um93ICsgMSA6IGJhc2VBcmVhRW5kQ29sdW1uIC0gYmFzZUFyZWFTdGFydENvbHVtbiArIDE7XG4gICAgY29uc3QgZnVsbHMgPSBNYXRoLmZsb29yKGZpbGxTaXplIC8gZnVsbEN5Y2xlKSAqIGZ1bGxDeWNsZTtcbiAgICBjb25zdCBwYXJ0aWFscyA9IGZpbGxTaXplIC0gZnVsbHM7XG4gICAgY29uc3QgZmFydGhlc3RDb2xsZWN0aW9uID0gdGhpcy5nZXRGYXJ0aGVzdENvbGxlY3Rpb24oYmFzZUFyZWEsIGRyYWdBcmVhLCBkcmFnRGlyZWN0aW9uLCBmb3VuZE1lcmdlZENlbGxzKTtcbiAgICBpZiAoZmFydGhlc3RDb2xsZWN0aW9uKSB7XG4gICAgICBpZiAoZHJhZ0RpcmVjdGlvbiA9PT0gJ2Rvd24nKSB7XG4gICAgICAgIGNvbnN0IGZpbGwgPSBmYXJ0aGVzdENvbGxlY3Rpb24ucm93ICsgZmFydGhlc3RDb2xsZWN0aW9uLnJvd3NwYW4gLSBiYXNlQXJlYVN0YXJ0Um93IC0gcGFydGlhbHM7XG4gICAgICAgIGNvbnN0IG5ld0xpbWl0ID0gbmV3RHJhZ0FyZWFbMl0gKyBmaWxsO1xuICAgICAgICBpZiAobmV3TGltaXQgPj0gdGhpcy5wbHVnaW4uaG90LmNvdW50Um93cygpKSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbMl0gLT0gcGFydGlhbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbMl0gKz0gcGFydGlhbHMgPyBmaWxsIDogMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkcmFnRGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICAgIGNvbnN0IGZpbGwgPSBmYXJ0aGVzdENvbGxlY3Rpb24uY29sICsgZmFydGhlc3RDb2xsZWN0aW9uLmNvbHNwYW4gLSBiYXNlQXJlYVN0YXJ0Q29sdW1uIC0gcGFydGlhbHM7XG4gICAgICAgIGNvbnN0IG5ld0xpbWl0ID0gbmV3RHJhZ0FyZWFbM10gKyBmaWxsO1xuICAgICAgICBpZiAobmV3TGltaXQgPj0gdGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpKSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbM10gLT0gcGFydGlhbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbM10gKz0gcGFydGlhbHMgPyBmaWxsIDogMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkcmFnRGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgIGNvbnN0IGZpbGwgPSBiYXNlQXJlYUVuZFJvdyAtIHBhcnRpYWxzIC0gZmFydGhlc3RDb2xsZWN0aW9uLnJvdyArIDE7XG4gICAgICAgIGNvbnN0IG5ld0xpbWl0ID0gbmV3RHJhZ0FyZWFbMF0gKyBmaWxsO1xuICAgICAgICBpZiAobmV3TGltaXQgPCAwKSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbMF0gKz0gcGFydGlhbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3RHJhZ0FyZWFbMF0gLT0gcGFydGlhbHMgPyBmaWxsIDogMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkcmFnRGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgY29uc3QgZmlsbCA9IGJhc2VBcmVhRW5kQ29sdW1uIC0gcGFydGlhbHMgLSBmYXJ0aGVzdENvbGxlY3Rpb24uY29sICsgMTtcbiAgICAgICAgY29uc3QgbmV3TGltaXQgPSBuZXdEcmFnQXJlYVsxXSArIGZpbGw7XG4gICAgICAgIGlmIChuZXdMaW1pdCA8IDApIHtcbiAgICAgICAgICBuZXdEcmFnQXJlYVsxXSArPSBwYXJ0aWFscztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdEcmFnQXJlYVsxXSAtPSBwYXJ0aWFscyA/IGZpbGwgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNoZSh7XG4gICAgICBiYXNlQXJlYSxcbiAgICAgIGRyYWdEaXJlY3Rpb24sXG4gICAgICBmb3VuZE1lcmdlZENlbGxzLFxuICAgICAgZmlsbFNpemUsXG4gICAgICBkcmFnQXJlYTogbmV3RHJhZ0FyZWEsXG4gICAgICBjeWNsZUxlbmd0aDogZnVsbEN5Y2xlXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld0RyYWdBcmVhO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgY3VycmVudCBmaWxsIGNhY2hlIHdpdGggdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHVwZGF0ZU9iamVjdCBUaGUgY3VycmVudCBmaWxsZWQgb2JqZWN0IGNhY2hlLlxuICAgKi9cbiAgdXBkYXRlQ3VycmVudEZpbGxDYWNoZSh1cGRhdGVPYmplY3QpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEZpbGxEYXRhKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWxsRGF0YSA9IHt9O1xuICAgIH1cbiAgICAoMCwgX29iamVjdC5leHRlbmQpKHRoaXMuY3VycmVudEZpbGxEYXRhLCB1cGRhdGVPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgXCJsZW5ndGhcIiBvZiB0aGUgZHJhZyBhcmVhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBiYXNlQXJlYSBUaGUgYmFzZSBzZWxlY3Rpb24gYXJlYS5cbiAgICogQHBhcmFtIHtBcnJheX0gZHJhZ0FyZWEgVGhlIGRyYWcgYXJlYSAoY29udGFpbmluZyB0aGUgYmFzZSBhcmVhKS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBUaGUgZHJhZyBkaXJlY3Rpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gVGhlIFwibGVuZ3RoXCIgKGhlaWdodCBvciB3aWR0aCwgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24pIG9mIHRoZSBkcmFnLlxuICAgKi9cbiAgZ2V0QXV0b2ZpbGxTaXplKGJhc2VBcmVhLCBkcmFnQXJlYSwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3QgW2Jhc2VBcmVhU3RhcnRSb3csIGJhc2VBcmVhU3RhcnRDb2x1bW4sIGJhc2VBcmVhRW5kUm93LCBiYXNlQXJlYUVuZENvbHVtbl0gPSBiYXNlQXJlYTtcbiAgICBjb25zdCBbZHJhZ0FyZWFTdGFydFJvdywgZHJhZ0FyZWFTdGFydENvbHVtbiwgZHJhZ0FyZWFFbmRSb3csIGRyYWdBcmVhRW5kQ29sdW1uXSA9IGRyYWdBcmVhO1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIHJldHVybiBiYXNlQXJlYVN0YXJ0Um93IC0gZHJhZ0FyZWFTdGFydFJvdztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICByZXR1cm4gZHJhZ0FyZWFFbmRSb3cgLSBiYXNlQXJlYUVuZFJvdztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICByZXR1cm4gYmFzZUFyZWFTdGFydENvbHVtbiAtIGRyYWdBcmVhU3RhcnRDb2x1bW47XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHJldHVybiBkcmFnQXJlYUVuZENvbHVtbiAtIGJhc2VBcmVhRW5kQ29sdW1uO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaW0gdGhlIGRlZmF1bHQgZHJhZyBhcmVhIChjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gYXJlYSkgdG8gdGhlIGRyYWctb25seSBhcmVhLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSBiYXNlQXJlYSBUaGUgYmFzZSBzZWxlY3Rpb24gYXJlYS5cbiAgICogQHBhcmFtIHtBcnJheX0gZHJhZ0FyZWEgVGhlIGJhc2Ugc2VsZWN0aW9uIGFyZWEgZXh0ZW5kZWQgYnkgdGhlIGRyYWcgYXJlYS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBEcmFnIGRpcmVjdGlvbi5cbiAgICogQHJldHVybnMge0FycmF5fG51bGx9IEFycmF5IHJlcHJlc2VudGluZyB0aGUgZHJhZyBhcmVhIGNvb3JkaW5hdGVzLlxuICAgKi9cbiAgZ2V0RHJhZ0FyZWEoYmFzZUFyZWEsIGRyYWdBcmVhLCBkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBbYmFzZUFyZWFTdGFydFJvdywgYmFzZUFyZWFTdGFydENvbHVtbiwgYmFzZUFyZWFFbmRSb3csIGJhc2VBcmVhRW5kQ29sdW1uXSA9IGJhc2VBcmVhO1xuICAgIGNvbnN0IFtkcmFnQXJlYVN0YXJ0Um93LCBkcmFnQXJlYVN0YXJ0Q29sdW1uLCBkcmFnQXJlYUVuZFJvdywgZHJhZ0FyZWFFbmRDb2x1bW5dID0gZHJhZ0FyZWE7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgcmV0dXJuIFtkcmFnQXJlYVN0YXJ0Um93LCBkcmFnQXJlYVN0YXJ0Q29sdW1uLCBiYXNlQXJlYVN0YXJ0Um93IC0gMSwgYmFzZUFyZWFFbmRDb2x1bW5dO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIHJldHVybiBbYmFzZUFyZWFFbmRSb3cgKyAxLCBiYXNlQXJlYVN0YXJ0Q29sdW1uLCBkcmFnQXJlYUVuZFJvdywgYmFzZUFyZWFFbmRDb2x1bW5dO1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHJldHVybiBbZHJhZ0FyZWFTdGFydFJvdywgZHJhZ0FyZWFTdGFydENvbHVtbiwgYmFzZUFyZWFFbmRSb3csIGJhc2VBcmVhU3RhcnRDb2x1bW4gLSAxXTtcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIFtiYXNlQXJlYVN0YXJ0Um93LCBiYXNlQXJlYUVuZENvbHVtbiArIDEsIGRyYWdBcmVhRW5kUm93LCBkcmFnQXJlYUVuZENvbHVtbl07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0by1iZS1mYXJ0aGVzdCBtZXJnZWQgY2VsbCBpbiB0aGUgbmV3bHkgZmlsbGVkIGFyZWEuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGJhc2VBcmVhIFRoZSBiYXNlIHNlbGVjdGlvbiBhcmVhLlxuICAgKiBAcGFyYW0ge0FycmF5fSBkcmFnQXJlYSBUaGUgZHJhZyBhcmVhIChjb250YWluaW5nIHRoZSBiYXNlIGFyZWEpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIFRoZSBkcmFnIGRpcmVjdGlvbi5cbiAgICogQHBhcmFtIHtBcnJheX0gbWVyZ2VkQ2VsbEFycmF5IEFycmF5IG9mIHRoZSBtZXJnZWQgY2VsbHMgZm91bmQgaW4gdGhlIGJhc2UgYXJlYS5cbiAgICogQHJldHVybnMge01lcmdlZENlbGxDb29yZHN8bnVsbH1cbiAgICovXG4gIGdldEZhcnRoZXN0Q29sbGVjdGlvbihiYXNlQXJlYSwgZHJhZ0FyZWEsIGRpcmVjdGlvbiwgbWVyZ2VkQ2VsbEFycmF5KSB7XG4gICAgY29uc3QgW2Jhc2VBcmVhU3RhcnRSb3csIGJhc2VBcmVhU3RhcnRDb2x1bW4sIGJhc2VBcmVhRW5kUm93LCBiYXNlQXJlYUVuZENvbHVtbl0gPSBiYXNlQXJlYTtcbiAgICBjb25zdCB2ZXJ0aWNhbERpcmVjdGlvbiA9IFsndXAnLCAnZG93biddLmluZGV4T2YoZGlyZWN0aW9uKSA+IC0xO1xuICAgIGNvbnN0IGJhc2VFbmQgPSB2ZXJ0aWNhbERpcmVjdGlvbiA/IGJhc2VBcmVhRW5kUm93IDogYmFzZUFyZWFFbmRDb2x1bW47XG4gICAgY29uc3QgYmFzZVN0YXJ0ID0gdmVydGljYWxEaXJlY3Rpb24gPyBiYXNlQXJlYVN0YXJ0Um93IDogYmFzZUFyZWFTdGFydENvbHVtbjtcbiAgICBjb25zdCBmaWxsU2l6ZSA9IHRoaXMuZ2V0QXV0b2ZpbGxTaXplKGJhc2VBcmVhLCBkcmFnQXJlYSwgZGlyZWN0aW9uKTtcbiAgICBjb25zdCBmdWxsQ3ljbGUgPSB2ZXJ0aWNhbERpcmVjdGlvbiA/IGJhc2VBcmVhRW5kUm93IC0gYmFzZUFyZWFTdGFydFJvdyArIDEgOiBiYXNlQXJlYUVuZENvbHVtbiAtIGJhc2VBcmVhU3RhcnRDb2x1bW4gKyAxO1xuICAgIGNvbnN0IGZ1bGxzID0gTWF0aC5mbG9vcihmaWxsU2l6ZSAvIGZ1bGxDeWNsZSkgKiBmdWxsQ3ljbGU7XG4gICAgY29uc3QgcGFydGlhbHMgPSBmaWxsU2l6ZSAtIGZ1bGxzO1xuICAgIGxldCBpbmNsdXNpb25GdW5jdGlvbk5hbWUgPSBudWxsO1xuICAgIGxldCBmYXJ0aGVzdENvbGxlY3Rpb24gPSBudWxsO1xuICAgIGxldCBlbmRPZkRyYWdSZWNyZWF0aW9uSW5kZXggPSBudWxsO1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICd1cCc6XG4gICAgICAgIGluY2x1c2lvbkZ1bmN0aW9uTmFtZSA9ICdpbmNsdWRlc1ZlcnRpY2FsbHknO1xuICAgICAgICBlbmRPZkRyYWdSZWNyZWF0aW9uSW5kZXggPSBiYXNlRW5kIC0gcGFydGlhbHMgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBpbmNsdXNpb25GdW5jdGlvbk5hbWUgPSAnaW5jbHVkZXNIb3Jpem9udGFsbHknO1xuICAgICAgICBlbmRPZkRyYWdSZWNyZWF0aW9uSW5kZXggPSBiYXNlRW5kIC0gcGFydGlhbHMgKyAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICBpbmNsdXNpb25GdW5jdGlvbk5hbWUgPSAnaW5jbHVkZXNWZXJ0aWNhbGx5JztcbiAgICAgICAgZW5kT2ZEcmFnUmVjcmVhdGlvbkluZGV4ID0gYmFzZVN0YXJ0ICsgcGFydGlhbHMgLSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgaW5jbHVzaW9uRnVuY3Rpb25OYW1lID0gJ2luY2x1ZGVzSG9yaXpvbnRhbGx5JztcbiAgICAgICAgZW5kT2ZEcmFnUmVjcmVhdGlvbkluZGV4ID0gYmFzZVN0YXJ0ICsgcGFydGlhbHMgLSAxO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShtZXJnZWRDZWxsQXJyYXksIGN1cnJlbnRDb2xsZWN0aW9uID0+IHtcbiAgICAgIGlmIChjdXJyZW50Q29sbGVjdGlvbltpbmNsdXNpb25GdW5jdGlvbk5hbWVdKGVuZE9mRHJhZ1JlY3JlYXRpb25JbmRleCkgJiYgY3VycmVudENvbGxlY3Rpb24uaXNGYXJ0aGVyKGZhcnRoZXN0Q29sbGVjdGlvbiwgZGlyZWN0aW9uKSkge1xuICAgICAgICBmYXJ0aGVzdENvbGxlY3Rpb24gPSBjdXJyZW50Q29sbGVjdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmFydGhlc3RDb2xsZWN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3JlYXRlIHRoZSBtZXJnZWQgY2VsbHMgYWZ0ZXIgdGhlIGF1dG9maWxsIHByb2Nlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGNoYW5nZXMgQ2hhbmdlcyBtYWRlLlxuICAgKi9cbiAgcmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGNoYW5nZXMpIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudEZpbGxEYXRhKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbGxSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBjb25zdCBmb3VuZE1lcmdlZENlbGxzID0gdGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscztcbiAgICBjb25zdCBkcmFnRGlyZWN0aW9uID0gdGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbjtcbiAgICBjb25zdCBpbkJvdW5kcyA9IChjdXJyZW50LCBvZmZzZXQpID0+IHtcbiAgICAgIHN3aXRjaCAoZHJhZ0RpcmVjdGlvbikge1xuICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQucm93IC0gb2Zmc2V0ID49IGZpbGxSYW5nZS5mcm9tLnJvdztcbiAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQucm93ICsgY3VycmVudC5yb3dzcGFuIC0gMSArIG9mZnNldCA8PSBmaWxsUmFuZ2UudG8ucm93O1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICByZXR1cm4gY3VycmVudC5jb2wgLSBvZmZzZXQgPj0gZmlsbFJhbmdlLmZyb20uY29sdW1uO1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQuY29sICsgY3VycmVudC5jb2xzcGFuIC0gMSArIG9mZnNldCA8PSBmaWxsUmFuZ2UudG8uY29sdW1uO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH07XG4gICAgbGV0IGZpbGxPZmZzZXQgPSAwO1xuICAgIGxldCBjdXJyZW50ID0gbnVsbDtcbiAgICBsZXQgbXVsdGlwbGllciA9IDE7XG4gICAgZG8ge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmb3VuZE1lcmdlZENlbGxzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGN1cnJlbnQgPSBmb3VuZE1lcmdlZENlbGxzW2pdO1xuICAgICAgICBmaWxsT2Zmc2V0ID0gbXVsdGlwbGllciAqIHRoaXMuY3VycmVudEZpbGxEYXRhLmN5Y2xlTGVuZ3RoO1xuICAgICAgICBpZiAoaW5Cb3VuZHMoY3VycmVudCwgZmlsbE9mZnNldCkpIHtcbiAgICAgICAgICBzd2l0Y2ggKGRyYWdEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7XG4gICAgICAgICAgICAgICAgcm93OiBjdXJyZW50LnJvdyAtIGZpbGxPZmZzZXQsXG4gICAgICAgICAgICAgICAgcm93c3BhbjogY3VycmVudC5yb3dzcGFuLFxuICAgICAgICAgICAgICAgIGNvbDogY3VycmVudC5jb2wsXG4gICAgICAgICAgICAgICAgY29sc3BhbjogY3VycmVudC5jb2xzcGFuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtcbiAgICAgICAgICAgICAgICByb3c6IGN1cnJlbnQucm93ICsgZmlsbE9mZnNldCxcbiAgICAgICAgICAgICAgICByb3dzcGFuOiBjdXJyZW50LnJvd3NwYW4sXG4gICAgICAgICAgICAgICAgY29sOiBjdXJyZW50LmNvbCxcbiAgICAgICAgICAgICAgICBjb2xzcGFuOiBjdXJyZW50LmNvbHNwYW5cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe1xuICAgICAgICAgICAgICAgIHJvdzogY3VycmVudC5yb3csXG4gICAgICAgICAgICAgICAgcm93c3BhbjogY3VycmVudC5yb3dzcGFuLFxuICAgICAgICAgICAgICAgIGNvbDogY3VycmVudC5jb2wgLSBmaWxsT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGNvbHNwYW46IGN1cnJlbnQuY29sc3BhblxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgIHRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe1xuICAgICAgICAgICAgICAgIHJvdzogY3VycmVudC5yb3csXG4gICAgICAgICAgICAgICAgcm93c3BhbjogY3VycmVudC5yb3dzcGFuLFxuICAgICAgICAgICAgICAgIGNvbDogY3VycmVudC5jb2wgKyBmaWxsT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGNvbHNwYW46IGN1cnJlbnQuY29sc3BhblxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaiA9PT0gZm91bmRNZXJnZWRDZWxscy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgbXVsdGlwbGllciArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAoaW5Cb3VuZHMoY3VycmVudCwgZmlsbE9mZnNldCkpO1xuICAgIHRoaXMuY3VycmVudEZpbGxEYXRhID0gbnVsbDtcbiAgICB0aGlzLnBsdWdpbi5ob3QucmVuZGVyKCk7XG4gICAgaWYgKGZvdW5kTWVyZ2VkQ2VsbHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkcmFnIHJhbmdlIGZyb20gdGhlIGNoYW5nZXMgbWFkZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgY2hhbmdlcyBtYWRlLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3Qgd2l0aCBgZnJvbWAgYW5kIGB0b2AgcHJvcGVydGllcywgYm90aCBjb250YWluaW5nIGByb3dgIGFuZCBgY29sdW1uYCBrZXlzLlxuICAgKi9cbiAgZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgY29uc3Qgcm93cyA9IHtcbiAgICAgIG1pbjogbnVsbCxcbiAgICAgIG1heDogbnVsbFxuICAgIH07XG4gICAgY29uc3QgY29sdW1ucyA9IHtcbiAgICAgIG1pbjogbnVsbCxcbiAgICAgIG1heDogbnVsbFxuICAgIH07XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGNoYW5nZXMsIGNoYW5nZSA9PiB7XG4gICAgICBjb25zdCByb3dJbmRleCA9IGNoYW5nZVswXTtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gdGhpcy5wbHVnaW4uaG90LnByb3BUb0NvbChjaGFuZ2VbMV0pO1xuICAgICAgaWYgKHJvd3MubWluID09PSBudWxsIHx8IHJvd0luZGV4IDwgcm93cy5taW4pIHtcbiAgICAgICAgcm93cy5taW4gPSByb3dJbmRleDtcbiAgICAgIH1cbiAgICAgIGlmIChyb3dzLm1heCA9PT0gbnVsbCB8fCByb3dJbmRleCA+IHJvd3MubWF4KSB7XG4gICAgICAgIHJvd3MubWF4ID0gcm93SW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1ucy5taW4gPT09IG51bGwgfHwgY29sdW1uSW5kZXggPCBjb2x1bW5zLm1pbikge1xuICAgICAgICBjb2x1bW5zLm1pbiA9IGNvbHVtbkluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbnMubWF4ID09PSBudWxsIHx8IGNvbHVtbkluZGV4ID4gY29sdW1ucy5tYXgpIHtcbiAgICAgICAgY29sdW1ucy5tYXggPSBjb2x1bW5JbmRleDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICByb3c6IHJvd3MubWluLFxuICAgICAgICBjb2x1bW46IGNvbHVtbnMubWluXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgcm93OiByb3dzLm1heCxcbiAgICAgICAgY29sdW1uOiBjb2x1bW5zLm1heFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIGRyYWcgYXJlYSBjb250YWlucyBhbnkgbWVyZ2VkIGNlbGxzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBiYXNlQXJlYSBUaGUgYmFzZSBzZWxlY3Rpb24gYXJlYS5cbiAgICogQHBhcmFtIHtBcnJheX0gZnVsbEFyZWEgVGhlIGJhc2UgYXJlYSBleHRlbmRlZCBieSB0aGUgZHJhZyBhcmVhLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIERyYWcgZGlyZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhiYXNlQXJlYSwgZnVsbEFyZWEsIGRpcmVjdGlvbikge1xuICAgIGNvbnN0IGRyYWdBcmVhID0gdGhpcy5nZXREcmFnQXJlYShiYXNlQXJlYSwgZnVsbEFyZWEsIGRpcmVjdGlvbik7XG4gICAgY29uc3QgW2RyYWdBcmVhU3RhcnRSb3csIGRyYWdBcmVhU3RhcnRDb2x1bW4sIGRyYWdBcmVhRW5kUm93LCBkcmFnQXJlYUVuZENvbHVtbl0gPSBkcmFnQXJlYTtcbiAgICBjb25zdCB0b3BMZWZ0ID0gdGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGRyYWdBcmVhU3RhcnRSb3csIGRyYWdBcmVhU3RhcnRDb2x1bW4pO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gdGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGRyYWdBcmVhRW5kUm93LCBkcmFnQXJlYUVuZENvbHVtbik7XG4gICAgY29uc3QgZHJhZ1JhbmdlID0gdGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UodG9wTGVmdCwgdG9wTGVmdCwgYm90dG9tUmlnaHQpO1xuICAgIHJldHVybiAhIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGRyYWdSYW5nZSwgdHJ1ZSk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEF1dG9maWxsQ2FsY3VsYXRpb25zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgYWxsIG9mIHRoZSBTZWxlY3Rpb24tcmVsYXRlZCBvcGVyYXRpb25zIG9uIG1lcmdlZCBjZWxscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIFNlbGVjdGlvbkNhbGN1bGF0aW9uc1xuICovXG5jbGFzcyBTZWxlY3Rpb25DYWxjdWxhdGlvbnMge1xuICBjb25zdHJ1Y3RvcihwbHVnaW4pIHtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIE1lcmdlIENlbGxzIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNZXJnZUNlbGxzfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBsdWdpblwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge0hhbmRzb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBDbGFzcyBuYW1lIHVzZWQgZm9yIGZ1bGx5IHNlbGVjdGVkIG1lcmdlZCBjZWxscy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVcIiwgJ2Z1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsJyk7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgdGhpcy5ob3QgPSBwbHVnaW4uaG90O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGFuIGFkZGl0aW9uYWwgY2xhc3MgbmFtZSBmb3IgdGhlIGVudGlyZWx5LXNlbGVjdGVkIG1lcmdlZCBjZWxscy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRSb3cgVmlzdWFsIHJvdyBpbmRleCBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NlZCBjZWxsLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY3VycmVudENvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgY2VsbC5cbiAgICogQHBhcmFtIHtBcnJheX0gY29ybmVyc09mU2VsZWN0aW9uIEFycmF5IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbiBhIGZvcm0gb2YgYFtzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uXWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gbGF5ZXJMZXZlbCBOdW1iZXIgaW5kaWNhdGluZyB3aGljaCBsYXllciBvZiBzZWxlY3Rpb24gaXMgY3VycmVudGx5IHByb2Nlc3NlZC5cbiAgICogQHJldHVybnMge3N0cmluZ3x1bmRlZmluZWR9IEEgYFN0cmluZ2AsIHdoaWNoIHdpbGwgYWN0IGFzIGFuIGFkZGl0aW9uYWwgYGNsYXNzTmFtZWAgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgY2VsbC5cbiAgICovXG4gIGdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShjdXJyZW50Um93LCBjdXJyZW50Q29sdW1uLCBjb3JuZXJzT2ZTZWxlY3Rpb24sIGxheWVyTGV2ZWwpIHtcbiAgICBjb25zdCBzdGFydFJvdyA9IE1hdGgubWluKGNvcm5lcnNPZlNlbGVjdGlvblswXSwgY29ybmVyc09mU2VsZWN0aW9uWzJdKTtcbiAgICBjb25zdCBzdGFydENvbHVtbiA9IE1hdGgubWluKGNvcm5lcnNPZlNlbGVjdGlvblsxXSwgY29ybmVyc09mU2VsZWN0aW9uWzNdKTtcbiAgICBjb25zdCBlbmRSb3cgPSBNYXRoLm1heChjb3JuZXJzT2ZTZWxlY3Rpb25bMF0sIGNvcm5lcnNPZlNlbGVjdGlvblsyXSk7XG4gICAgY29uc3QgZW5kQ29sdW1uID0gTWF0aC5tYXgoY29ybmVyc09mU2VsZWN0aW9uWzFdLCBjb3JuZXJzT2ZTZWxlY3Rpb25bM10pO1xuICAgIGlmIChsYXllckxldmVsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsID0gdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChjdXJyZW50Um93LCBjdXJyZW50Q29sdW1uKTtcblxuICAgIC8vIFdlIGFkZCBleHRyYSBjbGFzc2VzIGp1c3QgdG8gdGhlIGZpcnN0IHJlbmRlcmFibGUgbWVyZ2VkIGNlbGwuXG4gICAgaWYgKCFpc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWVyZ2VkQ2VsbCA9IHRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoY3VycmVudFJvdywgY3VycmVudENvbHVtbik7XG4gICAgaWYgKCFtZXJnZWRDZWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG1lcmdlUm93RW5kID0gbWVyZ2VkQ2VsbC5nZXRMYXN0Um93KCk7XG4gICAgY29uc3QgbWVyZ2VDb2x1bW5FbmQgPSBtZXJnZWRDZWxsLmdldExhc3RDb2x1bW4oKTtcbiAgICBjb25zdCBmdWxsTWVyZ2VBcmVhV2l0aGluU2VsZWN0aW9uID0gc3RhcnRSb3cgPD0gbWVyZ2VkQ2VsbC5yb3cgJiYgc3RhcnRDb2x1bW4gPD0gbWVyZ2VkQ2VsbC5jb2wgJiYgZW5kUm93ID49IG1lcmdlUm93RW5kICYmIGVuZENvbHVtbiA+PSBtZXJnZUNvbHVtbkVuZDtcbiAgICBpZiAoZnVsbE1lcmdlQXJlYVdpdGhpblNlbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7bGF5ZXJMZXZlbH1gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQobWVyZ2VkQ2VsbCwgdGhpcy5wbHVnaW4uaG90LmdldFNlbGVjdGVkUmFuZ2UoKSkpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBtZXJnZWQgY2VsbCBpcyBmdWxseSBzZWxlY3RlZCAoYnkgb25lIG9yIG1hbnkgbGF5ZXJzIG9mIHNlbGVjdGlvbikuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVyZ2VkQ2VsbENvb3Jkc30gbWVyZ2VkQ2VsbCBUaGUgbWVyZ2VkIGNlbGwgdG8gYmUgcHJvY2Vzc2VkLlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZVtdfSBzZWxlY3Rpb25SYW5nZXNBcnJheSBBcnJheSBvZiBzZWxlY3Rpb24gcmFuZ2VzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChtZXJnZWRDZWxsLCBzZWxlY3Rpb25SYW5nZXNBcnJheSkge1xuICAgIGNvbnN0IG1lcmdlZENlbGxJbmRpdmlkdWFsQ29vcmRzID0gW107XG4gICAgaWYgKCFzZWxlY3Rpb25SYW5nZXNBcnJheSB8fCAhbWVyZ2VkQ2VsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCByID0gMDsgciA8IG1lcmdlZENlbGwucm93c3BhbjsgciArPSAxKSB7XG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IG1lcmdlZENlbGwuY29sc3BhbjsgYyArPSAxKSB7XG4gICAgICAgIG1lcmdlZENlbGxJbmRpdmlkdWFsQ29vcmRzLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobWVyZ2VkQ2VsbC5yb3cgKyByLCBtZXJnZWRDZWxsLmNvbCArIGMpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXJnZWRDZWxsSW5kaXZpZHVhbENvb3Jkcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgaW5zaWRlU2VsZWN0aW9ucyA9IFtdO1xuICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBzZWxlY3Rpb25SYW5nZXNBcnJheS5sZW5ndGg7IHMgKz0gMSkge1xuICAgICAgICBpbnNpZGVTZWxlY3Rpb25zW3NdID0gc2VsZWN0aW9uUmFuZ2VzQXJyYXlbc10uaW5jbHVkZXMobWVyZ2VkQ2VsbEluZGl2aWR1YWxDb29yZHNbaV0pO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnNpZGVTZWxlY3Rpb25zLmluY2x1ZGVzKHRydWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gYXJyYXkgb2YgdGhlIGVudGlyZWx5LXNlbGVjdGVkIG1lcmdlZCBjZWxscycgY2xhc3MgbmFtZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQW4gYEFycmF5YCBvZiBgU3RyaW5nYHMuIEVhY2ggb2YgdGhlc2Ugc3RyaW5ncyB3aWxsIGFjdCBsaWtlIGNsYXNzIG5hbWVzIHRvIGJlIHJlbW92ZWQgZnJvbSBhbGwgdGhlIGNlbGxzIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIGdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSA3OyBpICs9IDEpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2l9YCk7XG4gICAgfVxuICAgIGNsYXNzTmFtZXMucHVzaChgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWApO1xuICAgIHJldHVybiBjbGFzc05hbWVzO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBTZWxlY3Rpb25DYWxjdWxhdGlvbnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy90ZW1wbGF0ZUxpdGVyYWxUYWdcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogVGhlIGBNZXJnZWRDZWxsQ29vcmRzYCBjbGFzcyByZXByZXNlbnRzIGEgc2luZ2xlIG1lcmdlZCBjZWxsLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgTWVyZ2VkQ2VsbENvb3Jkc1xuICovXG5jbGFzcyBNZXJnZWRDZWxsQ29vcmRzIHtcbiAgY29uc3RydWN0b3Iocm93LCBjb2x1bW4sIHJvd3NwYW4sIGNvbHNwYW4sIGNlbGxDb29yZHNGYWN0b3J5LCBjZWxsUmFuZ2VGYWN0b3J5KSB7XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSB0b3Btb3N0IG1lcmdlZCBjZWxsIHJvdy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm93XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIGluZGV4IG9mIHRoZSBsZWZ0bW9zdCBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBgcm93c3BhbmAgdmFsdWUgb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dzcGFuXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIGBjb2xzcGFuYCB2YWx1ZSBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbHNwYW5cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBgdHJ1ZWAgb25seSBpZiB0aGUgbWVyZ2VkIGNlbGwgaXMgYm91bmQgdG8gYmUgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInJlbW92ZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBDZWxsQ29vcmRzIGZ1bmN0aW9uIGZhY3RvcnkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2VsbENvb3Jkc0ZhY3RvcnlcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgQ2VsbFJhbmdlIGZ1bmN0aW9uIGZhY3RvcnkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2VsbFJhbmdlRmFjdG9yeVwiLCB2b2lkIDApO1xuICAgIHRoaXMucm93ID0gcm93O1xuICAgIHRoaXMuY29sID0gY29sdW1uO1xuICAgIHRoaXMucm93c3BhbiA9IHJvd3NwYW47XG4gICAgdGhpcy5jb2xzcGFuID0gY29sc3BhbjtcbiAgICB0aGlzLmNlbGxDb29yZHNGYWN0b3J5ID0gY2VsbENvb3Jkc0ZhY3Rvcnk7XG4gICAgdGhpcy5jZWxsUmFuZ2VGYWN0b3J5ID0gY2VsbFJhbmdlRmFjdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB3YXJuaW5nIG1lc3NhZ2UgZm9yIHdoZW4gdGhlIGRlY2xhcmVkIG1lcmdlZCBjZWxsIGRhdGEgY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3TWVyZ2VkQ2VsbCBPYmplY3QgY29udGFpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lcmdlZCBjZWxscyB0aGF0IHdhcyBhYm91dCB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhuZXdNZXJnZWRDZWxsKSB7XG4gICAgcmV0dXJuICgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3JvdzogJHtuZXdNZXJnZWRDZWxsLnJvd30sIGNvbDogJHtuZXdNZXJnZWRDZWxsLmNvbH0sXFx4MjBcbiAgICAgIHJvd3NwYW46ICR7bmV3TWVyZ2VkQ2VsbC5yb3dzcGFufSwgY29sc3BhbjogJHtuZXdNZXJnZWRDZWxsLmNvbHNwYW59fSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXFx4MjBcbiAgICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgd2FybmluZyBtZXNzYWdlIGZvciB3aGVuIHRoZSBkZWNsYXJlZCBtZXJnZWQgY2VsbCBkYXRhIGNvbnRhaW5zIHZhbHVlcyBleGNlZWRpbmcgdGhlIHRhYmxlIGxpbWl0cy5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld01lcmdlZENlbGwgT2JqZWN0IGNvbnRhaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXJnZWQgY2VsbHMgdGhhdCB3YXMgYWJvdXQgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKG5ld01lcmdlZENlbGwpIHtcbiAgICByZXR1cm4gKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7bmV3TWVyZ2VkQ2VsbC5yb3d9LCAke25ld01lcmdlZENlbGwuY29sfV0gaXMgcG9zaXRpb25lZFxceDIwXG4gICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhlIHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNldHVwLmA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgd2FybmluZyBtZXNzYWdlIGZvciB3aGVuIHRoZSBkZWNsYXJlZCBtZXJnZWQgY2VsbCBkYXRhIHJlcHJlc2VudHMgYSBzaW5nbGUgY2VsbC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld01lcmdlZENlbGwgT2JqZWN0IGNvbnRhaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXJnZWQgY2VsbHMgdGhhdCB3YXMgYWJvdXQgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgSVNfU0lOR0xFX0NFTEwobmV3TWVyZ2VkQ2VsbCkge1xuICAgIHJldHVybiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtuZXdNZXJnZWRDZWxsLnJvd30sICR7bmV3TWVyZ2VkQ2VsbC5jb2x9XSBoYXMgYm90aCBcInJvd3NwYW5cIlxceDIwXG4gICAgICBhbmQgXCJjb2xzcGFuXCIgZGVjbGFyZWQgYXMgXCIxXCIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHdhcm5pbmcgbWVzc2FnZSBmb3Igd2hlbiB0aGUgZGVjbGFyZWQgbWVyZ2VkIGNlbGwgZGF0YSBjb250YWlucyBcImNvbHNwYW5cIiBvciBcInJvd3NwYW5cIiwgdGhhdCBlcXVhbHMgMC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG5ld01lcmdlZENlbGwgT2JqZWN0IGNvbnRhaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXJnZWQgY2VsbHMgdGhhdCB3YXMgYWJvdXQgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobmV3TWVyZ2VkQ2VsbCkge1xuICAgIHJldHVybiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtuZXdNZXJnZWRDZWxsLnJvd30sICR7bmV3TWVyZ2VkQ2VsbC5jb2x9XSBoYXMgXCJyb3dzcGFuXCJcXHgyMFxuICAgICAgb3IgXCJjb2xzcGFuXCIgZGVjbGFyZWQgYXMgXCIwXCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHZhbHVlcyBwcm92aWRlZCBmb3IgYSBtZXJnZWQgY2VsbCBjb250YWluIGFueSBuZWdhdGl2ZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtZXJnZWRDZWxsSW5mbyBPYmplY3QgY29udGFpbmluZyB0aGUgYHJvd2AsIGBjb2xgLCBgcm93c3BhbmAgYW5kIGBjb2xzcGFuYCBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKG1lcmdlZENlbGxJbmZvKSB7XG4gICAgcmV0dXJuIG1lcmdlZENlbGxJbmZvLnJvdyA8IDAgfHwgbWVyZ2VkQ2VsbEluZm8uY29sIDwgMCB8fCBtZXJnZWRDZWxsSW5mby5yb3dzcGFuIDwgMCB8fCBtZXJnZWRDZWxsSW5mby5jb2xzcGFuIDwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBtZXJnZWQgY2VsbCBpbmZvcm1hdGlvbiBvYmplY3QgcmVwcmVzZW50cyBhIHNpbmdsZSBjZWxsLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbWVyZ2VkQ2VsbEluZm8gQW4gb2JqZWN0IHdpdGggYHJvd2AsIGBjb2xgLCBgcm93c3BhbmAgYW5kIGBjb2xzcGFuYCBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBpc1NpbmdsZUNlbGwobWVyZ2VkQ2VsbEluZm8pIHtcbiAgICByZXR1cm4gbWVyZ2VkQ2VsbEluZm8uY29sc3BhbiA9PT0gMSAmJiBtZXJnZWRDZWxsSW5mby5yb3dzcGFuID09PSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3ZpZGVkIG1lcmdlZCBjZWxsIGluZm9ybWF0aW9uIG9iamVjdCBjb250YWlucyBhIHJvd3NwYW4gb3IgY29sc3BhbiBvZiAwLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbWVyZ2VkQ2VsbEluZm8gQW4gb2JqZWN0IHdpdGggYHJvd2AsIGBjb2xgLCBgcm93c3BhbmAgYW5kIGBjb2xzcGFuYCBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHN0YXRpYyBjb250YWluc1plcm9TcGFuKG1lcmdlZENlbGxJbmZvKSB7XG4gICAgcmV0dXJuIG1lcmdlZENlbGxJbmZvLmNvbHNwYW4gPT09IDAgfHwgbWVyZ2VkQ2VsbEluZm8ucm93c3BhbiA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBwcm92aWRlZCBtZXJnZWQgY2VsbCBvYmplY3QgaXMgdG8gYmUgZGVjbGFyZWQgb3V0IG9mIGJvdW5kcyBvZiB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtZXJnZUNlbGwgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGByb3dgLCBgY29sYCwgYHJvd3NwYW5gIGFuZCBgY29sc3BhbmAgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0NvdW50IE51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkNvdW50IE51bWJlciBvZiByb3dzIGluIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzdGF0aWMgaXNPdXRPZkJvdW5kcyhtZXJnZUNlbGwsIHJvd0NvdW50LCBjb2x1bW5Db3VudCkge1xuICAgIHJldHVybiBtZXJnZUNlbGwucm93IDwgMCB8fCBtZXJnZUNlbGwuY29sIDwgMCB8fCBtZXJnZUNlbGwucm93ID49IHJvd0NvdW50IHx8IG1lcmdlQ2VsbC5yb3cgKyBtZXJnZUNlbGwucm93c3BhbiAtIDEgPj0gcm93Q291bnQgfHwgbWVyZ2VDZWxsLmNvbCA+PSBjb2x1bW5Db3VudCB8fCBtZXJnZUNlbGwuY29sICsgbWVyZ2VDZWxsLmNvbHNwYW4gLSAxID49IGNvbHVtbkNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIChwcmV2ZW50IGZyb20gZ29pbmcgb3V0c2lkZSB0aGUgYm91bmRhcmllcykgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBub3JtYWxpemUoaG90SW5zdGFuY2UpIHtcbiAgICBjb25zdCB0b3RhbFJvd3MgPSBob3RJbnN0YW5jZS5jb3VudFJvd3MoKTtcbiAgICBjb25zdCB0b3RhbENvbHVtbnMgPSBob3RJbnN0YW5jZS5jb3VudENvbHMoKTtcbiAgICBpZiAodGhpcy5yb3cgPCAwKSB7XG4gICAgICB0aGlzLnJvdyA9IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJvdyA+IHRvdGFsUm93cyAtIDEpIHtcbiAgICAgIHRoaXMucm93ID0gdG90YWxSb3dzIC0gMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sIDwgMCkge1xuICAgICAgdGhpcy5jb2wgPSAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb2wgPiB0b3RhbENvbHVtbnMgLSAxKSB7XG4gICAgICB0aGlzLmNvbCA9IHRvdGFsQ29sdW1ucyAtIDE7XG4gICAgfVxuICAgIGlmICh0aGlzLnJvdyArIHRoaXMucm93c3BhbiA+IHRvdGFsUm93cyAtIDEpIHtcbiAgICAgIHRoaXMucm93c3BhbiA9IHRvdGFsUm93cyAtIHRoaXMucm93O1xuICAgIH1cbiAgICBpZiAodGhpcy5jb2wgKyB0aGlzLmNvbHNwYW4gPiB0b3RhbENvbHVtbnMgLSAxKSB7XG4gICAgICB0aGlzLmNvbHNwYW4gPSB0b3RhbENvbHVtbnMgLSB0aGlzLmNvbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3ZpZGVkIGNvb3JkaW5hdGVzIGFyZSBpbnNpZGUgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpbmNsdWRlcyhyb3csIGNvbHVtbikge1xuICAgIHJldHVybiB0aGlzLnJvdyA8PSByb3cgJiYgdGhpcy5jb2wgPD0gY29sdW1uICYmIHRoaXMucm93ICsgdGhpcy5yb3dzcGFuIC0gMSA+PSByb3cgJiYgdGhpcy5jb2wgKyB0aGlzLmNvbHNwYW4gLSAxID49IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcHJvdmlkZWQgYGNvbHVtbmAgcHJvcGVydHkgaXMgd2l0aGluIHRoZSBjb2x1bW4gc3BhbiBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpbmNsdWRlc0hvcml6b250YWxseShjb2x1bW4pIHtcbiAgICByZXR1cm4gdGhpcy5jb2wgPD0gY29sdW1uICYmIHRoaXMuY29sICsgdGhpcy5jb2xzcGFuIC0gMSA+PSBjb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3ZpZGVkIGByb3dgIHByb3BlcnR5IGlzIHdpdGhpbiB0aGUgcm93IHNwYW4gb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpbmNsdWRlc1ZlcnRpY2FsbHkocm93KSB7XG4gICAgcmV0dXJuIHRoaXMucm93IDw9IHJvdyAmJiB0aGlzLnJvdyArIHRoaXMucm93c3BhbiAtIDEgPj0gcm93O1xuICB9XG5cbiAgLyoqXG4gICAqIFNoaWZ0IChhbmQgcG9zc2libHkgcmVzaXplLCBpZiBuZWVkZWQpIHRoZSBtZXJnZWQgY2VsbC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gc2hpZnRWZWN0b3IgMi1lbGVtZW50IGFycmF5IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIG9uIHRoZSBzaGlmdGluZyBpbiB0aGUgYHhgIGFuZCBgeWAgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4T2ZDaGFuZ2UgSW5kZXggb2YgdGhlIHByZWNlZGluZyBjaGFuZ2UuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAgaWYgdGhlIHdob2xlIG1lcmdlZCBjZWxsIHdhcyByZW1vdmVkLlxuICAgKi9cbiAgc2hpZnQoc2hpZnRWZWN0b3IsIGluZGV4T2ZDaGFuZ2UpIHtcbiAgICBjb25zdCBzaGlmdFZhbHVlID0gc2hpZnRWZWN0b3JbMF0gfHwgc2hpZnRWZWN0b3JbMV07XG4gICAgY29uc3Qgc2hpZnRlZEluZGV4ID0gaW5kZXhPZkNoYW5nZSArIE1hdGguYWJzKHNoaWZ0VmVjdG9yWzBdIHx8IHNoaWZ0VmVjdG9yWzFdKSAtIDE7XG4gICAgY29uc3Qgc3BhbiA9IHNoaWZ0VmVjdG9yWzBdID8gJ2NvbHNwYW4nIDogJ3Jvd3NwYW4nO1xuICAgIGNvbnN0IGluZGV4ID0gc2hpZnRWZWN0b3JbMF0gPyAnY29sJyA6ICdyb3cnO1xuICAgIGNvbnN0IGNoYW5nZVN0YXJ0ID0gTWF0aC5taW4oaW5kZXhPZkNoYW5nZSwgc2hpZnRlZEluZGV4KTtcbiAgICBjb25zdCBjaGFuZ2VFbmQgPSBNYXRoLm1heChpbmRleE9mQ2hhbmdlLCBzaGlmdGVkSW5kZXgpO1xuICAgIGNvbnN0IG1lcmdlU3RhcnQgPSB0aGlzW2luZGV4XTtcbiAgICBjb25zdCBtZXJnZUVuZCA9IHRoaXNbaW5kZXhdICsgdGhpc1tzcGFuXSAtIDE7XG4gICAgaWYgKG1lcmdlU3RhcnQgPj0gaW5kZXhPZkNoYW5nZSkge1xuICAgICAgdGhpc1tpbmRleF0gKz0gc2hpZnRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBhZGRpbmcgcm93cy9jb2x1bW5zXG4gICAgaWYgKHNoaWZ0VmFsdWUgPiAwKSB7XG4gICAgICBpZiAoaW5kZXhPZkNoYW5nZSA8PSBtZXJnZUVuZCAmJiBpbmRleE9mQ2hhbmdlID4gbWVyZ2VTdGFydCkge1xuICAgICAgICB0aGlzW3NwYW5dICs9IHNoaWZ0VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92aW5nIHJvd3MvY29sdW1uc1xuICAgIH0gZWxzZSBpZiAoc2hpZnRWYWx1ZSA8IDApIHtcbiAgICAgIC8vIHJlbW92aW5nIHRoZSB3aG9sZSBtZXJnZVxuICAgICAgaWYgKGNoYW5nZVN0YXJ0IDw9IG1lcmdlU3RhcnQgJiYgY2hhbmdlRW5kID49IG1lcmdlRW5kKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyByZW1vdmluZyB0aGUgbWVyZ2UgcGFydGlhbGx5LCBpbmNsdWRpbmcgdGhlIGJlZ2lubmluZ1xuICAgICAgfSBlbHNlIGlmIChtZXJnZVN0YXJ0ID49IGNoYW5nZVN0YXJ0ICYmIG1lcmdlU3RhcnQgPD0gY2hhbmdlRW5kKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRPZmZzZXQgPSBjaGFuZ2VFbmQgLSBtZXJnZVN0YXJ0ICsgMTtcbiAgICAgICAgY29uc3QgcHJlUmVtb3ZlZE9mZnNldCA9IE1hdGguYWJzKHNoaWZ0VmFsdWUpIC0gcmVtb3ZlZE9mZnNldDtcbiAgICAgICAgdGhpc1tpbmRleF0gLT0gcHJlUmVtb3ZlZE9mZnNldCArIHNoaWZ0VmFsdWU7XG4gICAgICAgIHRoaXNbc3Bhbl0gLT0gcmVtb3ZlZE9mZnNldDtcblxuICAgICAgICAvLyByZW1vdmluZyB0aGUgbWlkZGxlIHBhcnQgb2YgdGhlIG1lcmdlXG4gICAgICB9IGVsc2UgaWYgKG1lcmdlU3RhcnQgPD0gY2hhbmdlU3RhcnQgJiYgbWVyZ2VFbmQgPj0gY2hhbmdlRW5kKSB7XG4gICAgICAgIHRoaXNbc3Bhbl0gKz0gc2hpZnRWYWx1ZTtcblxuICAgICAgICAvLyByZW1vdmluZyB0aGUgZW5kIHBhcnQgb2YgdGhlIG1lcmdlXG4gICAgICB9IGVsc2UgaWYgKG1lcmdlU3RhcnQgPD0gY2hhbmdlU3RhcnQgJiYgbWVyZ2VFbmQgPj0gY2hhbmdlU3RhcnQgJiYgbWVyZ2VFbmQgPCBjaGFuZ2VFbmQpIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFBhcnQgPSBtZXJnZUVuZCAtIGNoYW5nZVN0YXJ0ICsgMTtcbiAgICAgICAgdGhpc1tzcGFuXSAtPSByZW1vdmVkUGFydDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHNlY29uZCBwcm92aWRlZCBtZXJnZWQgY2VsbCBpcyBcImZhcnRoZXJcIiBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge01lcmdlZENlbGxDb29yZHN9IG1lcmdlZENlbGwgVGhlIG1lcmdlZCBjZWxsIHRvIGNoZWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0aW9uIERyYWcgZGlyZWN0aW9uLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnxudWxsfSBgdHJ1ZWAgaWYgdGhlIHNlY29uZCBwcm92aWRlZCBtZXJnZWQgY2VsbCBpcyBcImZhcnRoZXJcIi5cbiAgICovXG4gIGlzRmFydGhlcihtZXJnZWRDZWxsLCBkaXJlY3Rpb24pIHtcbiAgICBpZiAoIW1lcmdlZENlbGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uID09PSAnZG93bicpIHtcbiAgICAgIHJldHVybiBtZXJnZWRDZWxsLnJvdyArIG1lcmdlZENlbGwucm93c3BhbiAtIDEgPCB0aGlzLnJvdyArIHRoaXMucm93c3BhbiAtIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICd1cCcpIHtcbiAgICAgIHJldHVybiBtZXJnZWRDZWxsLnJvdyA+IHRoaXMucm93O1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gbWVyZ2VkQ2VsbC5jb2wgKyBtZXJnZWRDZWxsLmNvbHNwYW4gLSAxIDwgdGhpcy5jb2wgKyB0aGlzLmNvbHNwYW4gLSAxO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiBtZXJnZWRDZWxsLmNvbCA+IHRoaXMuY29sO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJvdHRvbSByb3cgaW5kZXggb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGFzdFJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5yb3cgKyB0aGlzLnJvd3NwYW4gLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmlnaHRtb3N0IGNvbHVtbiBpbmRleCBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMYXN0Q29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbCArIHRoaXMuY29sc3BhbiAtIDE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSByYW5nZSBjb29yZGluYXRlcyBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsUmFuZ2V9XG4gICAqL1xuICBnZXRSYW5nZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jZWxsUmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csIHRoaXMuY29sKSwgdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdywgdGhpcy5jb2wpLCB0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLCB0aGlzLmdldExhc3RDb2x1bW4oKSkpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBNZXJnZWRDZWxsQ29vcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2NlbGxDb29yZHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NlbGxDb29yZHNcIikpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX2NvbnNvbGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9jb25zb2xlXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy90ZW1wbGF0ZUxpdGVyYWxUYWdcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIERlZmluZXMgYSBjb250YWluZXIgb2JqZWN0IGZvciB0aGUgbWVyZ2VkIGNlbGxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgTWVyZ2VkQ2VsbHNDb2xsZWN0aW9uXG4gKi9cbnZhciBfTWVyZ2VkQ2VsbHNDb2xsZWN0aW9uX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBNZXJnZWRDZWxsc0NvbGxlY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihtZXJnZUNlbGxzUGx1Z2luKSB7XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbGlzdCBvZiB0aGUgaW5kZXhlcyB0aGF0IGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCBvdGhlciBtZXJnZWQgY2VsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSByYW5nZSBUaGUgcmFuZ2UgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICAgKiBAcGFyYW0geydyb3cnIHwgJ2NvbCd9IGF4aXMgVGhlIGF4aXMgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc2NhbkRpcmVjdGlvbiAgVGhlIGRpcmVjdGlvbiB0byBzY2FuIHRoZSByYW5nZS4gYDFgIGZvciBmb3J3YXJkLCBgLTFgIGZvciBiYWNrd2FyZC5cbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9NZXJnZWRDZWxsc0NvbGxlY3Rpb25fYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgTWVyZ2UgQ2VsbHMgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHR5cGUge01lcmdlQ2VsbHN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicGx1Z2luXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgbWVyZ2VkIGNlbGxzLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1lcmdlZENlbGxzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge0hhbmRzb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICB0aGlzLnBsdWdpbiA9IG1lcmdlQ2VsbHNQbHVnaW47XG4gICAgdGhpcy5ob3QgPSBtZXJnZUNlbGxzUGx1Z2luLmhvdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSB3YXJuaW5nIG1lc3NhZ2UgZm9yIHdoZW4gdGhlIGRlY2xhcmVkIG1lcmdlZCBjZWxsIGRhdGEgb3ZlcmxhcHMgYWxyZWFkeSBleGlzdGluZyBtZXJnZWQgY2VsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdNZXJnZWRDZWxsIE9iamVjdCBjb250YWluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWVyZ2VkIGNlbGxzIHRoYXQgd2FzIGFib3V0IHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcobmV3TWVyZ2VkQ2VsbCkge1xuICAgIHJldHVybiAoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtuZXdNZXJnZWRDZWxsLnJvd30sICR7bmV3TWVyZ2VkQ2VsbC5jb2x9XSwgb3ZlcmxhcHNcXHgyMFxuICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlXFx4MjBcbiAgICAgIGZpeCB5b3VyIHNldHVwLmA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbWVyZ2VkIGNlbGwgZnJvbSB0aGUgY29udGFpbmVyLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLiBZb3UgY2FuIHByb3ZpZGUgZWl0aGVyIHRoZSBcInN0YXJ0aW5nIGNvb3JkaW5hdGVzXCJcbiAgICogb2YgYSBtZXJnZWQgY2VsbCwgb3IgYW55IGNvb3JkaW5hdGVzIGZyb20gdGhlIGJvZHkgb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtNZXJnZWRDZWxsQ29vcmRzfGJvb2xlYW59IFJldHVybnMgYSB3YW50ZWQgbWVyZ2VkIGNlbGwgb24gc3VjY2VzcyBhbmQgYGZhbHNlYCBvbiBmYWlsdXJlLlxuICAgKi9cbiAgZ2V0KHJvdywgY29sdW1uKSB7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSB0aGlzLm1lcmdlZENlbGxzO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVyZ2VkQ2VsbHMsIG1lcmdlZENlbGwgPT4ge1xuICAgICAgaWYgKG1lcmdlZENlbGwucm93IDw9IHJvdyAmJiBtZXJnZWRDZWxsLnJvdyArIG1lcmdlZENlbGwucm93c3BhbiAtIDEgPj0gcm93ICYmIG1lcmdlZENlbGwuY29sIDw9IGNvbHVtbiAmJiBtZXJnZWRDZWxsLmNvbCArIG1lcmdlZENlbGwuY29sc3BhbiAtIDEgPj0gY29sdW1uKSB7XG4gICAgICAgIHJlc3VsdCA9IG1lcmdlZENlbGw7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaXJzdC1mb3VuZCBtZXJnZWQgY2VsbCBjb250YWluaW5nIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V8b2JqZWN0fSByYW5nZSBUaGUgcmFuZ2UgdG8gc2VhcmNoIG1lcmdlZCBjZWxscyBmb3IuXG4gICAqIEByZXR1cm5zIHtNZXJnZWRDZWxsQ29vcmRzfGJvb2xlYW59XG4gICAqL1xuICBnZXRCeVJhbmdlKHJhbmdlKSB7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSB0aGlzLm1lcmdlZENlbGxzO1xuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVyZ2VkQ2VsbHMsIG1lcmdlZENlbGwgPT4ge1xuICAgICAgaWYgKG1lcmdlZENlbGwucm93IDw9IHJhbmdlLmZyb20ucm93ICYmIG1lcmdlZENlbGwucm93ICsgbWVyZ2VkQ2VsbC5yb3dzcGFuIC0gMSA+PSByYW5nZS50by5yb3cgJiYgbWVyZ2VkQ2VsbC5jb2wgPD0gcmFuZ2UuZnJvbS5jb2wgJiYgbWVyZ2VkQ2VsbC5jb2wgKyBtZXJnZWRDZWxsLmNvbHNwYW4gLSAxID49IHJhbmdlLnRvLmNvbCkge1xuICAgICAgICByZXN1bHQgPSBtZXJnZWRDZWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBtZXJnZWQgY2VsbCBjb250YWluZWQgaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZXxvYmplY3R9IHJhbmdlIFRoZSByYW5nZSB0byBzZWFyY2ggbWVyZ2VkIGNlbGxzIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3VudFBhcnRpYWxzPWZhbHNlXSBJZiBzZXQgdG8gYHRydWVgLCBhbGwgdGhlIG1lcmdlZCBjZWxscyBvdmVybGFwcGluZyB0aGUgcmFuZ2Ugd2lsbCBiZSB0YWtlbiBpbnRvIGNhbGN1bGF0aW9uLlxuICAgKiBAcmV0dXJucyB7QXJyYXl8Ym9vbGVhbn0gQXJyYXkgb2YgZm91bmQgbWVyZ2VkIGNlbGxzIG9mIGBmYWxzZWAgaWYgbm9uZSB3ZXJlIGZvdW5kLlxuICAgKi9cbiAgZ2V0V2l0aGluUmFuZ2UocmFuZ2UpIHtcbiAgICBsZXQgY291bnRQYXJ0aWFscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSB0aGlzLm1lcmdlZENlbGxzO1xuICAgIGNvbnN0IGZvdW5kTWVyZ2VkQ2VsbHMgPSBbXTtcbiAgICBsZXQgdGVzdGVkUmFuZ2UgPSByYW5nZTtcbiAgICBpZiAoIXRlc3RlZFJhbmdlLmluY2x1ZGVzUmFuZ2UpIHtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0ZXN0ZWRSYW5nZS5mcm9tLnJvdywgdGVzdGVkUmFuZ2UuZnJvbS5jb2wpO1xuICAgICAgY29uc3QgdG8gPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0ZXN0ZWRSYW5nZS50by5yb3csIHRlc3RlZFJhbmdlLnRvLmNvbCk7XG4gICAgICB0ZXN0ZWRSYW5nZSA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZnJvbSwgZnJvbSwgdG8pO1xuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVyZ2VkQ2VsbHMsIG1lcmdlZENlbGwgPT4ge1xuICAgICAgY29uc3QgbWVyZ2VkQ2VsbFRvcExlZnQgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhtZXJnZWRDZWxsLnJvdywgbWVyZ2VkQ2VsbC5jb2wpO1xuICAgICAgY29uc3QgbWVyZ2VkQ2VsbEJvdHRvbVJpZ2h0ID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobWVyZ2VkQ2VsbC5yb3cgKyBtZXJnZWRDZWxsLnJvd3NwYW4gLSAxLCBtZXJnZWRDZWxsLmNvbCArIG1lcmdlZENlbGwuY29sc3BhbiAtIDEpO1xuICAgICAgY29uc3QgbWVyZ2VkQ2VsbFJhbmdlID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShtZXJnZWRDZWxsVG9wTGVmdCwgbWVyZ2VkQ2VsbFRvcExlZnQsIG1lcmdlZENlbGxCb3R0b21SaWdodCk7XG4gICAgICBpZiAoY291bnRQYXJ0aWFscykge1xuICAgICAgICBpZiAodGVzdGVkUmFuZ2Uub3ZlcmxhcHMobWVyZ2VkQ2VsbFJhbmdlKSkge1xuICAgICAgICAgIGZvdW5kTWVyZ2VkQ2VsbHMucHVzaChtZXJnZWRDZWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0ZXN0ZWRSYW5nZS5pbmNsdWRlc1JhbmdlKG1lcmdlZENlbGxSYW5nZSkpIHtcbiAgICAgICAgZm91bmRNZXJnZWRDZWxscy5wdXNoKG1lcmdlZENlbGwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmb3VuZE1lcmdlZENlbGxzLmxlbmd0aCA/IGZvdW5kTWVyZ2VkQ2VsbHMgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBtZXJnZWQgY2VsbCB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gbWVyZ2VkQ2VsbEluZm8gVGhlIG1lcmdlZCBjZWxsIGluZm9ybWF0aW9uIG9iamVjdC4gSGFzIHRvIGNvbnRhaW4gYHJvd2AsIGBjb2xgLCBgY29sc3BhbmAgYW5kIGByb3dzcGFuYCBwcm9wZXJ0aWVzLlxuICAgKiBAcmV0dXJucyB7TWVyZ2VkQ2VsbENvb3Jkc3xib29sZWFufSBSZXR1cm5zIHRoZSBuZXcgbWVyZ2VkIGNlbGwgb24gc3VjY2VzcyBhbmQgYGZhbHNlYCBvbiBmYWlsdXJlLlxuICAgKi9cbiAgYWRkKG1lcmdlZENlbGxJbmZvKSB7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSB0aGlzLm1lcmdlZENlbGxzO1xuICAgIGNvbnN0IHJvdyA9IG1lcmdlZENlbGxJbmZvLnJvdztcbiAgICBjb25zdCBjb2x1bW4gPSBtZXJnZWRDZWxsSW5mby5jb2w7XG4gICAgY29uc3Qgcm93c3BhbiA9IG1lcmdlZENlbGxJbmZvLnJvd3NwYW47XG4gICAgY29uc3QgY29sc3BhbiA9IG1lcmdlZENlbGxJbmZvLmNvbHNwYW47XG4gICAgY29uc3QgbmV3TWVyZ2VkQ2VsbCA9IG5ldyBfY2VsbENvb3Jkcy5kZWZhdWx0KHJvdywgY29sdW1uLCByb3dzcGFuLCBjb2xzcGFuLCB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcywgdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSk7XG4gICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICBjb25zdCBpc092ZXJsYXBwaW5nID0gdGhpcy5pc092ZXJsYXBwaW5nKG5ld01lcmdlZENlbGwpO1xuICAgIGlmICghYWxyZWFkeUV4aXN0cyAmJiAhaXNPdmVybGFwcGluZykge1xuICAgICAgaWYgKHRoaXMuaG90KSB7XG4gICAgICAgIG5ld01lcmdlZENlbGwubm9ybWFsaXplKHRoaXMuaG90KTtcbiAgICAgIH1cbiAgICAgIG1lcmdlZENlbGxzLnB1c2gobmV3TWVyZ2VkQ2VsbCk7XG4gICAgICByZXR1cm4gbmV3TWVyZ2VkQ2VsbDtcbiAgICB9XG4gICAgKDAsIF9jb25zb2xlLndhcm4pKE1lcmdlZENlbGxzQ29sbGVjdGlvbi5JU19PVkVSTEFQUElOR19XQVJOSU5HKG5ld01lcmdlZENlbGwpKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgbWVyZ2VkIGNlbGwgZnJvbSB0aGUgY29udGFpbmVyLiBZb3UgY2FuIHByb3ZpZGUgZWl0aGVyIHRoZSBcInN0YXJ0aW5nIGNvb3JkaW5hdGVzXCJcbiAgICogb2YgYSBtZXJnZWQgY2VsbCwgb3IgYW55IGNvb3JkaW5hdGVzIGZyb20gdGhlIGJvZHkgb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtNZXJnZWRDZWxsQ29vcmRzfGJvb2xlYW59IFJldHVybnMgdGhlIHJlbW92ZWQgbWVyZ2VkIGNlbGwgb24gc3VjY2VzcyBhbmQgYGZhbHNlYCBvbiBmYWlsdXJlLlxuICAgKi9cbiAgcmVtb3ZlKHJvdywgY29sdW1uKSB7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbHMgPSB0aGlzLm1lcmdlZENlbGxzO1xuICAgIGNvbnN0IHdhbnRlZENvbGxlY3Rpb24gPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgY29uc3Qgd2FudGVkQ29sbGVjdGlvbkluZGV4ID0gd2FudGVkQ29sbGVjdGlvbiA/IHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZih3YW50ZWRDb2xsZWN0aW9uKSA6IC0xO1xuICAgIGlmICh3YW50ZWRDb2xsZWN0aW9uICYmIHdhbnRlZENvbGxlY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIG1lcmdlZENlbGxzLnNwbGljZSh3YW50ZWRDb2xsZWN0aW9uSW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIHdhbnRlZENvbGxlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgdGhlIG1lcmdlZCBjZWxscy5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGNvbnN0IG1lcmdlZENlbGxzID0gdGhpcy5tZXJnZWRDZWxscztcbiAgICBjb25zdCBtZXJnZWRDZWxsUGFyZW50c1RvQ2xlYXIgPSBbXTtcbiAgICBjb25zdCBoaWRkZW5Db2xsZWN0aW9uRWxlbWVudHMgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVyZ2VkQ2VsbHMsIG1lcmdlZENlbGwgPT4ge1xuICAgICAgY29uc3QgVEQgPSB0aGlzLmhvdC5nZXRDZWxsKG1lcmdlZENlbGwucm93LCBtZXJnZWRDZWxsLmNvbCk7XG4gICAgICBpZiAoVEQpIHtcbiAgICAgICAgbWVyZ2VkQ2VsbFBhcmVudHNUb0NsZWFyLnB1c2goW1RELCB0aGlzLmdldChtZXJnZWRDZWxsLnJvdywgbWVyZ2VkQ2VsbC5jb2wpLCBtZXJnZWRDZWxsLnJvdywgbWVyZ2VkQ2VsbC5jb2xdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1lcmdlZENlbGxzLmxlbmd0aCA9IDA7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG1lcmdlZENlbGxQYXJlbnRzVG9DbGVhciwgKG1lcmdlZENlbGwsIGkpID0+IHtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgbWVyZ2VkQ2VsbC5yb3dzcGFuIC0gMSwgaiA9PiB7XG4gICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgbWVyZ2VkQ2VsbC5jb2xzcGFuIC0gMSwgayA9PiB7XG4gICAgICAgICAgaWYgKGsgIT09IDAgfHwgaiAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgVEQgPSB0aGlzLmhvdC5nZXRDZWxsKG1lcmdlZENlbGwucm93ICsgaiwgbWVyZ2VkQ2VsbC5jb2wgKyBrKTtcbiAgICAgICAgICAgIGlmIChURCkge1xuICAgICAgICAgICAgICBoaWRkZW5Db2xsZWN0aW9uRWxlbWVudHMucHVzaChbVEQsIG51bGwsIG51bGwsIG51bGxdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBtZXJnZWRDZWxsUGFyZW50c1RvQ2xlYXJbaV1bMV0gPSBudWxsO1xuICAgIH0pO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShtZXJnZWRDZWxsUGFyZW50c1RvQ2xlYXIsIG1lcmdlZENlbGxQYXJlbnRzID0+IHtcbiAgICAgICgwLCBfdXRpbHMuYXBwbHlTcGFuUHJvcGVydGllcykoLi4ubWVyZ2VkQ2VsbFBhcmVudHMpO1xuICAgIH0pO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShoaWRkZW5Db2xsZWN0aW9uRWxlbWVudHMsIGhpZGRlbkNvbGxlY3Rpb25FbGVtZW50ID0+IHtcbiAgICAgICgwLCBfdXRpbHMuYXBwbHlTcGFuUHJvcGVydGllcykoLi4uaGlkZGVuQ29sbGVjdGlvbkVsZW1lbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCBtZXJnZWQgY2VsbCBvdmVybGFwcyB3aXRoIHRoZSBvdGhlcnMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIHtNZXJnZWRDZWxsQ29vcmRzfSBtZXJnZWRDZWxsIFRoZSBtZXJnZWQgY2VsbCB0byBjaGVjayBhZ2FpbnN0IGFsbCBvdGhlcnMgaW4gdGhlIGNvbnRhaW5lci5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgcHJvdmlkZWQgbWVyZ2VkIGNlbGwgb3ZlcmxhcHMgd2l0aCB0aGUgb3RoZXJzLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGlzT3ZlcmxhcHBpbmcobWVyZ2VkQ2VsbCkge1xuICAgIGNvbnN0IG1lcmdlZENlbGxSYW5nZSA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwgMCksIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG1lcmdlZENlbGwucm93LCBtZXJnZWRDZWxsLmNvbCksIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKG1lcmdlZENlbGwucm93ICsgbWVyZ2VkQ2VsbC5yb3dzcGFuIC0gMSwgbWVyZ2VkQ2VsbC5jb2wgKyBtZXJnZWRDZWxsLmNvbHNwYW4gLSAxKSk7XG4gICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLm1lcmdlZENlbGxzLCBjb2wgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFJhbmdlID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcygwLCAwKSwgdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY29sLnJvdywgY29sLmNvbCksIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGNvbC5yb3cgKyBjb2wucm93c3BhbiAtIDEsIGNvbC5jb2wgKyBjb2wuY29sc3BhbiAtIDEpKTtcbiAgICAgIGlmIChjdXJyZW50UmFuZ2Uub3ZlcmxhcHMobWVyZ2VkQ2VsbFJhbmdlKSkge1xuICAgICAgICByZXN1bHQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHJvdy9jb2wgY29vcmRpbmF0ZXMgZGlyZWN0IHRvIGEgZmlyc3Qgbm90IGhpZGRlbiBjZWxsIHdpdGhpbiBtZXJnZSBhcmVhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwocm93LCBjb2x1bW4pIHtcbiAgICBjb25zdCBtZXJnZVBhcmVudCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcblxuICAgIC8vIFJldHVybiBpZiByb3cgYW5kIGNvbHVtbiBpbmRleGVzIGFyZSB3aXRoaW4gbWVyZ2UgYXJlYSBhbmQgaWYgdGhleSBhcmUgZmlyc3QgcmVuZGVyZWQgaW5kZXhlcyB3aXRoaW4gdGhlIGFyZWEuXG4gICAgcmV0dXJuIG1lcmdlUGFyZW50ICYmIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtZXJnZVBhcmVudC5yb3csIDEpID09PSByb3cgJiYgdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG1lcmdlUGFyZW50LmNvbCwgMSkgPT09IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IHJlbmRlcmFibGUgY29vcmRzIG9mIHRoZSBtZXJnZWQgY2VsbCBhdCB0aGUgcHJvdmlkZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc30gQSBgQ2VsbENvb3Jkc2Agb2JqZWN0IHdpdGggdGhlIGNvb3JkaW5hdGVzIHRvIHRoZSBmaXJzdCByZW5kZXJhYmxlIGNlbGwgd2l0aGluIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZCBjZWxsLlxuICAgKi9cbiAgZ2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKHJvdywgY29sdW1uKSB7XG4gICAgY29uc3QgbWVyZ2VQYXJlbnQgPSB0aGlzLmdldChyb3csIGNvbHVtbik7XG4gICAgaWYgKCFtZXJnZVBhcmVudCB8fCB0aGlzLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChyb3csIGNvbHVtbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbik7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0UmVuZGVyYWJsZVJvdyA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtZXJnZVBhcmVudC5yb3csIDEpO1xuICAgIGNvbnN0IGZpcnN0UmVuZGVyYWJsZUNvbHVtbiA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtZXJnZVBhcmVudC5jb2wsIDEpO1xuICAgIHJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmaXJzdFJlbmRlcmFibGVSb3csIGZpcnN0UmVuZGVyYWJsZUNvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhcnQtbW9zdCB2aXN1YWwgY29sdW1uIGluZGV4IHRoYXQgZG8gbm90IGludGVyc2VjdCB3aXRoIG90aGVyIG1lcmdlZCBjZWxscyB3aXRoaW4gdGhlIHByb3ZpZGVkIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gcmFuZ2UgVGhlIHJhbmdlIHRvIHNlYXJjaCB3aXRoaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW5JbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleCB0byBzdGFydCB0aGUgc2VhcmNoIGZyb20uXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRTdGFydE1vc3RDb2x1bW5JbmRleChyYW5nZSwgdmlzdWFsQ29sdW1uSW5kZXgpIHtcbiAgICBjb25zdCBpbmRleGVzID0gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlZENlbGxzQ29sbGVjdGlvbl9icmFuZCwgdGhpcywgX2dldE5vbkludGVyc2VjdGluZ0luZGV4ZXMpLmNhbGwodGhpcywgcmFuZ2UsICdjb2wnLCAtMSk7XG4gICAgbGV0IHN0YXJ0TW9zdEluZGV4ID0gdmlzdWFsQ29sdW1uSW5kZXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRleGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaW5kZXhlc1tpXSA8PSB2aXN1YWxDb2x1bW5JbmRleCkge1xuICAgICAgICBzdGFydE1vc3RJbmRleCA9IGluZGV4ZXNbaV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhcnRNb3N0SW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgZW5kLW1vc3QgdmlzdWFsIGNvbHVtbiBpbmRleCB0aGF0IGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCBvdGhlciBtZXJnZWQgY2VsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IHJhbmdlIFRoZSByYW5nZSB0byBzZWFyY2ggd2l0aGluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsQ29sdW1uSW5kZXggVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0RW5kTW9zdENvbHVtbkluZGV4KHJhbmdlLCB2aXN1YWxDb2x1bW5JbmRleCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VkQ2VsbHNDb2xsZWN0aW9uX2JyYW5kLCB0aGlzLCBfZ2V0Tm9uSW50ZXJzZWN0aW5nSW5kZXhlcykuY2FsbCh0aGlzLCByYW5nZSwgJ2NvbCcsIDEpO1xuICAgIGxldCBlbmRNb3N0SW5kZXggPSB2aXN1YWxDb2x1bW5JbmRleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpbmRleGVzW2ldID49IHZpc3VhbENvbHVtbkluZGV4KSB7XG4gICAgICAgIGVuZE1vc3RJbmRleCA9IGluZGV4ZXNbaV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZW5kTW9zdEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvcC1tb3N0IHZpc3VhbCByb3cgaW5kZXggdGhhdCBkbyBub3QgaW50ZXJzZWN0IHdpdGggb3RoZXIgbWVyZ2VkIGNlbGxzIHdpdGhpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSByYW5nZSBUaGUgcmFuZ2UgdG8gc2VhcmNoIHdpdGhpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbFJvd0luZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFRvcE1vc3RSb3dJbmRleChyYW5nZSwgdmlzdWFsUm93SW5kZXgpIHtcbiAgICBjb25zdCBpbmRleGVzID0gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlZENlbGxzQ29sbGVjdGlvbl9icmFuZCwgdGhpcywgX2dldE5vbkludGVyc2VjdGluZ0luZGV4ZXMpLmNhbGwodGhpcywgcmFuZ2UsICdyb3cnLCAtMSk7XG4gICAgbGV0IHRvcE1vc3RJbmRleCA9IHZpc3VhbFJvd0luZGV4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGluZGV4ZXNbaV0gPD0gdmlzdWFsUm93SW5kZXgpIHtcbiAgICAgICAgdG9wTW9zdEluZGV4ID0gaW5kZXhlc1tpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b3BNb3N0SW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgYm90dG9tLW1vc3QgdmlzdWFsIHJvdyBpbmRleCB0aGF0IGRvIG5vdCBpbnRlcnNlY3Qgd2l0aCBvdGhlciBtZXJnZWQgY2VsbHMgd2l0aGluIHRoZSBwcm92aWRlZCByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IHJhbmdlIFRoZSByYW5nZSB0byBzZWFyY2ggd2l0aGluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsUm93SW5kZXggVGhlIHZpc3VhbCByb3cgaW5kZXggdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Qm90dG9tTW9zdFJvd0luZGV4KHJhbmdlLCB2aXN1YWxSb3dJbmRleCkge1xuICAgIGNvbnN0IGluZGV4ZXMgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VkQ2VsbHNDb2xsZWN0aW9uX2JyYW5kLCB0aGlzLCBfZ2V0Tm9uSW50ZXJzZWN0aW5nSW5kZXhlcykuY2FsbCh0aGlzLCByYW5nZSwgJ3JvdycsIDEpO1xuICAgIGxldCBib3R0b21Nb3N0SW5kZXggPSB2aXN1YWxSb3dJbmRleDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluZGV4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpbmRleGVzW2ldID49IHZpc3VhbFJvd0luZGV4KSB7XG4gICAgICAgIGJvdHRvbU1vc3RJbmRleCA9IGluZGV4ZXNbaV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm90dG9tTW9zdEluZGV4O1xuICB9XG4gIC8qKlxuICAgKiBTaGlmdCB0aGUgbWVyZ2VkIGNlbGwgaW4gdGhlIGRpcmVjdGlvbiBhbmQgYnkgYW4gb2Zmc2V0IGRlZmluZWQgaW4gdGhlIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdGlvbiBgcmlnaHRgLCBgbGVmdGAsIGB1cGAgb3IgYGRvd25gLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggd2hlcmUgdGhlIGNoYW5nZSwgd2hpY2ggY2F1c2VkIHRoZSBzaGlmdGluZyB0b29rIHBsYWNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnQgTnVtYmVyIG9mIHJvd3MvY29sdW1ucyBhZGRlZC9yZW1vdmVkIGluIHRoZSBwcmVjZWRpbmcgYWN0aW9uLlxuICAgKi9cbiAgc2hpZnRDb2xsZWN0aW9ucyhkaXJlY3Rpb24sIGluZGV4LCBjb3VudCkge1xuICAgIGNvbnN0IHNoaWZ0VmVjdG9yID0gWzAsIDBdO1xuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgIHNoaWZ0VmVjdG9yWzBdICs9IGNvdW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBzaGlmdFZlY3RvclswXSAtPSBjb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgc2hpZnRWZWN0b3JbMV0gKz0gY291bnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICBzaGlmdFZlY3RvclsxXSAtPSBjb3VudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5tZXJnZWRDZWxscywgY3VycmVudE1lcmdlID0+IHtcbiAgICAgIGN1cnJlbnRNZXJnZS5zaGlmdChzaGlmdFZlY3RvciwgaW5kZXgpO1xuICAgIH0pO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaFJldmVyc2UpKHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoIC0gMSwgMCwgaSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50TWVyZ2UgPSB0aGlzLm1lcmdlZENlbGxzW2ldO1xuICAgICAgaWYgKGN1cnJlbnRNZXJnZSAmJiBjdXJyZW50TWVyZ2UucmVtb3ZlZCkge1xuICAgICAgICB0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoY3VycmVudE1lcmdlKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9nZXROb25JbnRlcnNlY3RpbmdJbmRleGVzKHJhbmdlLCBheGlzKSB7XG4gIGxldCBzY2FuRGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAxO1xuICBjb25zdCBpbmRleGVzID0gbmV3IE1hcCgpO1xuICBjb25zdCBmcm9tID0gc2NhbkRpcmVjdGlvbiA9PT0gMSA/IHJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkgOiByYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgY29uc3QgdG8gPSBzY2FuRGlyZWN0aW9uID09PSAxID8gcmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkgOiByYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO1xuICBmb3IgKGxldCByb3cgPSBmcm9tLnJvdzsgc2NhbkRpcmVjdGlvbiA9PT0gMSA/IHJvdyA8PSB0by5yb3cgOiByb3cgPj0gdG8ucm93OyByb3cgKz0gc2NhbkRpcmVjdGlvbikge1xuICAgIGZvciAobGV0IGNvbHVtbiA9IGZyb20uY29sOyBzY2FuRGlyZWN0aW9uID09PSAxID8gY29sdW1uIDw9IHRvLmNvbCA6IGNvbHVtbiA+PSB0by5jb2w7IGNvbHVtbiArPSBzY2FuRGlyZWN0aW9uKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGF4aXMgPT09ICdyb3cnID8gcm93IDogY29sdW1uO1xuICAgICAgY29uc3QgbWVyZ2VkQ2VsbCA9IHRoaXMuZ2V0KHJvdywgY29sdW1uKTtcbiAgICAgIGxldCBsYXN0SW5kZXggPSBpbmRleDtcbiAgICAgIGlmIChtZXJnZWRDZWxsKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNjYW5EaXJlY3Rpb24gPT09IDEgPyBtZXJnZWRDZWxsW2F4aXNdICsgbWVyZ2VkQ2VsbFtgJHtheGlzfXNwYW5gXSAtIDEgOiBtZXJnZWRDZWxsW2F4aXNdO1xuICAgICAgfVxuICAgICAgaWYgKCFpbmRleGVzLmhhcyhpbmRleCkpIHtcbiAgICAgICAgaW5kZXhlcy5zZXQoaW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgICB9XG4gICAgICBpbmRleGVzLmdldChpbmRleCkuYWRkKGxhc3RJbmRleCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoQXJyYXkuZnJvbShpbmRleGVzLmVudHJpZXMoKSkuZmlsdGVyKF9yZWYgPT4ge1xuICAgIGxldCBbLCBzZXRdID0gX3JlZjtcbiAgICByZXR1cm4gc2V0LnNpemUgPT09IDE7XG4gIH0pLmZsYXRNYXAoX3JlZjIgPT4ge1xuICAgIGxldCBbLCBzZXRdID0gX3JlZjI7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oc2V0KTtcbiAgfSkpKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IE1lcmdlZENlbGxzQ29sbGVjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHRvZ2dsZU1lcmdlSXRlbTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfY2VsbENvb3JkcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL2NlbGxDb29yZHNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbi8qKlxuICogQHBhcmFtIHsqfSBwbHVnaW4gVGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZU1lcmdlSXRlbShwbHVnaW4pIHtcbiAgcmV0dXJuIHtcbiAgICBrZXk6ICdtZXJnZUNlbGxzJyxcbiAgICBuYW1lKCkge1xuICAgICAgY29uc3Qgc2VsID0gdGhpcy5nZXRTZWxlY3RlZExhc3QoKTtcbiAgICAgIGlmIChzZWwpIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IHBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHNlbFswXSwgc2VsWzFdKTtcbiAgICAgICAgaWYgKGluZm8ucm93ID09PSBzZWxbMF0gJiYgaW5mby5jb2wgPT09IHNlbFsxXSAmJiBpbmZvLnJvdyArIGluZm8ucm93c3BhbiAtIDEgPT09IHNlbFsyXSAmJiBpbmZvLmNvbCArIGluZm8uY29sc3BhbiAtIDEgPT09IHNlbFszXSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19VTk1FUkdFX0NFTExTKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTKTtcbiAgICB9LFxuICAgIGNhbGxiYWNrKCkge1xuICAgICAgY29uc3QgY3VycmVudFJhbmdlID0gdGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgaWYgKCFjdXJyZW50UmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3VycmVudFJhbmdlLnNldERpcmVjdGlvbih0aGlzLmlzUnRsKCkgPyAnTkUtU1cnIDogJ05XLVNFJyk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvXG4gICAgICB9ID0gY3VycmVudFJhbmdlO1xuICAgICAgcGx1Z2luLnRvZ2dsZU1lcmdlKGN1cnJlbnRSYW5nZSk7XG4gICAgICB0aGlzLnNlbGVjdENlbGwoZnJvbS5yb3csIGZyb20uY29sLCB0by5yb3csIHRvLmNvbCwgZmFsc2UpO1xuICAgIH0sXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICBjb25zdCBzZWwgPSB0aGlzLmdldFNlbGVjdGVkTGFzdCgpO1xuICAgICAgaWYgKCFzZWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpc1NpbmdsZUNlbGwgPSBfY2VsbENvb3Jkcy5kZWZhdWx0LmlzU2luZ2xlQ2VsbCh7XG4gICAgICAgIHJvdzogc2VsWzBdLFxuICAgICAgICBjb2w6IHNlbFsxXSxcbiAgICAgICAgcm93c3Bhbjogc2VsWzJdIC0gc2VsWzBdICsgMSxcbiAgICAgICAgY29sc3Bhbjogc2VsWzNdIC0gc2VsWzFdICsgMVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDZWxsIHx8IHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpO1xuICAgIH0sXG4gICAgaGlkZGVuOiBmYWxzZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfbGlua2VkTGlzdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL2xpbmtlZExpc3RcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUgY29ycmVjdCBmb2N1cyBvcmRlciAodmVydGljYWwgYW5kIGhvcml6b250YWwpIHdpdGhpbiBhIHNlbGVjdGlvbiB0aGF0XG4gKiBjb250YWlucyBtZXJnZWQgY2VsbHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIF9jZWxsc0hvcml6b250YWxPcmRlciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9jZWxsc1ZlcnRpY2FsT3JkZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY3VycmVudEhvcml6b250YWxMaW5rZWROb2RlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2N1cnJlbnRWZXJ0aWNhbExpbmtlZE5vZGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfbWVyZ2VkQ2VsbHNHZXR0ZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcm93SW5kZXhNYXBwZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY29sdW1uSW5kZXhNYXBwZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfRm9jdXNPcmRlcl9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgRm9jdXNPcmRlciB7XG4gIGNvbnN0cnVjdG9yKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgbWVyZ2VkQ2VsbHNHZXR0ZXIsXG4gICAgICByb3dJbmRleE1hcHBlcixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSA9IF9yZWY7XG4gICAgLyoqXG4gICAgICogUHVzaGVzIGEgbmV3IG5vZGUgdG8gdGhlIHByb3ZpZGVkIGxpc3Qgb3JkZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gc2VsZWN0ZWRSYW5nZSBUaGUgc2VsZWN0ZWQgcmFuZ2UgdG8gYnVpbGQgdGhlIGZvY3VzIG9yZGVyIGZvci5cbiAgICAgKiBAcGFyYW0ge0xpbmtlZExpc3R9IGxpc3RPcmRlciBUaGUgbGlzdCBvcmRlciB0byBwdXNoIHRoZSBub2RlIHRvLlxuICAgICAqIEBwYXJhbSB7V2Vha1NldH0gbWVyZ2VDZWxsc1Zpc2l0b3IgVGhlIHNldCBvZiB2aXNpdGVkIGNlbGxzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICAgKiBAcmV0dXJucyB7Tm9kZVN0cnVjdHVyZSB8IG51bGx9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Gb2N1c09yZGVyX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbGlua2VkIGxpc3Qgb2YgdGhlIGFsbCBjZWxscyB3aXRoaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGhvcml6b250YWwgb3JkZXIuIFRoZSBsaXN0IGlzXG4gICAgICogcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtlZExpc3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NlbGxzSG9yaXpvbnRhbE9yZGVyLCBuZXcgX2xpbmtlZExpc3QuZGVmYXVsdCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbGlua2VkIGxpc3Qgb2YgdGhlIGFsbCBjZWxscyB3aXRoaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluIGhvcml6b250YWwgb3JkZXIuIFRoZSBsaXN0IGlzXG4gICAgICogcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIHNlbGVjdGlvbiBpcyBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogQHR5cGUge0xpbmtlZExpc3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2NlbGxzVmVydGljYWxPcmRlciwgbmV3IF9saW5rZWRMaXN0LmRlZmF1bHQoKSk7XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnRseSBoaWdobGlnaHRlZCBjZWxsIHdpdGhpbiB0aGUgaG9yaXpvbnRhbCBsaW5rZWQgbGlzdC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtOb2RlU3RydWN0dXJlIHwgbnVsbH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3VycmVudEhvcml6b250YWxMaW5rZWROb2RlLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudGx5IGhpZ2hsaWdodGVkIGNlbGwgd2l0aGluIHRoZSB2ZXJ0aWNhbCBsaW5rZWQgbGlzdC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtOb2RlU3RydWN0dXJlIHwgbnVsbH1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3VycmVudFZlcnRpY2FsTGlua2VkTm9kZSwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogVGhlIG1lcmdlZCBjZWxscyBnZXR0ZXIgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oKToge3JvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgcm93c3BhbjogbnVtYmVyLCBjb2xzcGFuOiBudW1iZXJ9IHwgbnVsbH19XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX21lcmdlZENlbGxzR2V0dGVyLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBUaGUgcm93IGluZGV4IG1hcHBlci5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtJbmRleE1hcHBlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm93SW5kZXhNYXBwZXIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFRoZSBjb2x1bW4gaW5kZXggbWFwcGVyLlxuICAgICAqXG4gICAgICogQHR5cGUge0luZGV4TWFwcGVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb2x1bW5JbmRleE1hcHBlciwgbnVsbCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tZXJnZWRDZWxsc0dldHRlciwgdGhpcywgbWVyZ2VkQ2VsbHNHZXR0ZXIpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfcm93SW5kZXhNYXBwZXIsIHRoaXMsIHJvd0luZGV4TWFwcGVyKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NvbHVtbkluZGV4TWFwcGVyLCB0aGlzLCBjb2x1bW5JbmRleE1hcHBlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5vZGUgZGF0YSBmcm9tIHRoZSB2ZXJ0aWNhbCBmb2N1cyBvcmRlciBsaXN0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Tm9kZVN0cnVjdHVyZX1cbiAgICovXG4gIGdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudFZlcnRpY2FsTGlua2VkTm9kZSwgdGhpcykuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBmaXJzdCBub2RlIGRhdGEgZnJvbSB0aGUgdmVydGljYWwgZm9jdXMgb3JkZXIgbGlzdC5cbiAgICpcbiAgICogQHJldHVybnMge05vZGVTdHJ1Y3R1cmV9XG4gICAqL1xuICBnZXRGaXJzdFZlcnRpY2FsTm9kZSgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc1ZlcnRpY2FsT3JkZXIsIHRoaXMpLmZpcnN0LmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBzZWxlY3RlZCBub2RlIGRhdGEgZnJvbSB0aGUgdmVydGljYWwgZm9jdXMgb3JkZXIgbGlzdC5cbiAgICpcbiAgICogQHJldHVybnMge05vZGVTdHJ1Y3R1cmV9XG4gICAqL1xuICBnZXROZXh0VmVydGljYWxOb2RlKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRWZXJ0aWNhbExpbmtlZE5vZGUsIHRoaXMpLm5leHQuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwcmV2aW91cyBzZWxlY3RlZCBub2RlIGRhdGEgZnJvbSB0aGUgdmVydGljYWwgZm9jdXMgb3JkZXIgbGlzdC5cbiAgICpcbiAgICogQHJldHVybnMge05vZGVTdHJ1Y3R1cmV9XG4gICAqL1xuICBnZXRQcmV2VmVydGljYWxOb2RlKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRWZXJ0aWNhbExpbmtlZE5vZGUsIHRoaXMpLnByZXYuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBkYXRhIGZyb20gdGhlIGhvcml6b250YWwgZm9jdXMgb3JkZXIgbGlzdC5cbiAgICpcbiAgICogQHJldHVybnMge05vZGVTdHJ1Y3R1cmV9XG4gICAqL1xuICBnZXRDdXJyZW50SG9yaXpvbnRhbE5vZGUoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudEhvcml6b250YWxMaW5rZWROb2RlLCB0aGlzKS5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGZpcnN0IG5vZGUgZGF0YSBmcm9tIHRoZSBob3Jpem9udGFsIGZvY3VzIG9yZGVyIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOb2RlU3RydWN0dXJlfVxuICAgKi9cbiAgZ2V0Rmlyc3RIb3Jpem9udGFsTm9kZSgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcykuZmlyc3QuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBuZXh0IHNlbGVjdGVkIG5vZGUgZGF0YSBmcm9tIHRoZSBob3Jpem9udGFsIGZvY3VzIG9yZGVyIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOb2RlU3RydWN0dXJlfVxuICAgKi9cbiAgZ2V0TmV4dEhvcml6b250YWxOb2RlKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcykubmV4dC5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHByZXZpb3VzIHNlbGVjdGVkIG5vZGUgZGF0YSBmcm9tIHRoZSBob3Jpem9udGFsIGZvY3VzIG9yZGVyIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOb2RlU3RydWN0dXJlfVxuICAgKi9cbiAgZ2V0UHJldkhvcml6b250YWxOb2RlKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcykucHJldi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHByZXZpb3VzIG5vZGUgZnJvbSB0aGUgdmVydGljYWwgZm9jdXMgb3JkZXIgbGlzdCBhcyBhY3RpdmUuXG4gICAqL1xuICBzZXRQcmV2Tm9kZUFzQWN0aXZlKCkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudFZlcnRpY2FsTGlua2VkTm9kZSwgdGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50VmVydGljYWxMaW5rZWROb2RlLCB0aGlzKS5wcmV2KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jdXJyZW50SG9yaXpvbnRhbExpbmtlZE5vZGUsIHRoaXMpLnByZXYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHByZXZpb3VzIG5vZGUgZnJvbSB0aGUgaG9yaXpvbnRhbCBmb2N1cyBvcmRlciBsaXN0IGFzIGFjdGl2ZS5cbiAgICovXG4gIHNldE5leHROb2RlQXNBY3RpdmUoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jdXJyZW50VmVydGljYWxMaW5rZWROb2RlLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRWZXJ0aWNhbExpbmtlZE5vZGUsIHRoaXMpLm5leHQpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudEhvcml6b250YWxMaW5rZWROb2RlLCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcykubmV4dCk7XG4gIH1cblxuICAvKipcbiAgICogUmVidWlsZHMgdGhlIGZvY3VzIG9yZGVyIGxpc3QgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IHNlbGVjdGVkUmFuZ2UgVGhlIHNlbGVjdGVkIHJhbmdlIHRvIGJ1aWxkIHRoZSBmb2N1cyBvcmRlciBmb3IuXG4gICAqL1xuICBidWlsZEZvY3VzT3JkZXIoc2VsZWN0ZWRSYW5nZSkge1xuICAgIGNvbnN0IHRvcFN0YXJ0ID0gc2VsZWN0ZWRSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO1xuICAgIGNvbnN0IGJvdHRvbUVuZCA9IHNlbGVjdGVkUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7XG4gICAgY29uc3QgdmlzaXRlZEhvcml6b250YWxDZWxscyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcywgbmV3IF9saW5rZWRMaXN0LmRlZmF1bHQoKSk7XG4gICAgZm9yIChsZXQgciA9IHRvcFN0YXJ0LnJvdzsgciA8PSBib3R0b21FbmQucm93OyByKyspIHtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0luZGV4TWFwcGVyLCB0aGlzKS5pc0hpZGRlbihyKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBjID0gdG9wU3RhcnQuY29sOyBjIDw9IGJvdHRvbUVuZC5jb2w7IGMrKykge1xuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jb2x1bW5JbmRleE1hcHBlciwgdGhpcykuaXNIaWRkZW4oYykpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlID0gX2Fzc2VydENsYXNzQnJhbmQoX0ZvY3VzT3JkZXJfYnJhbmQsIHRoaXMsIF9wdXNoT3JkZXJOb2RlKS5jYWxsKHRoaXMsIHNlbGVjdGVkUmFuZ2UsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbHNIb3Jpem9udGFsT3JkZXIsIHRoaXMpLCB2aXNpdGVkSG9yaXpvbnRhbENlbGxzLCByLCBjKTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgY2lyY3VsYXIgbGlua2VkIGxpc3RcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcykuZmlyc3QpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbHNIb3Jpem9udGFsT3JkZXIsIHRoaXMpLmZpcnN0LnByZXYgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NlbGxzSG9yaXpvbnRhbE9yZGVyLCB0aGlzKS5sYXN0O1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcykubGFzdC5uZXh0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcykuZmlyc3Q7XG4gICAgfVxuICAgIGNvbnN0IHZpc2l0ZWRWZXJ0aWNhbENlbGxzID0gbmV3IFdlYWtTZXQoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2NlbGxzVmVydGljYWxPcmRlciwgdGhpcywgbmV3IF9saW5rZWRMaXN0LmRlZmF1bHQoKSk7XG4gICAgZm9yIChsZXQgYyA9IHRvcFN0YXJ0LmNvbDsgYyA8PSBib3R0b21FbmQuY29sOyBjKyspIHtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbkluZGV4TWFwcGVyLCB0aGlzKS5pc0hpZGRlbihjKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCByID0gdG9wU3RhcnQucm93OyByIDw9IGJvdHRvbUVuZC5yb3c7IHIrKykge1xuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb3dJbmRleE1hcHBlciwgdGhpcykuaXNIaWRkZW4ocikpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBub2RlID0gX2Fzc2VydENsYXNzQnJhbmQoX0ZvY3VzT3JkZXJfYnJhbmQsIHRoaXMsIF9wdXNoT3JkZXJOb2RlKS5jYWxsKHRoaXMsIHNlbGVjdGVkUmFuZ2UsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbHNWZXJ0aWNhbE9yZGVyLCB0aGlzKSwgdmlzaXRlZFZlcnRpY2FsQ2VsbHMsIHIsIGMpO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudFZlcnRpY2FsTGlua2VkTm9kZSwgdGhpcywgbm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjcmVhdGUgY2lyY3VsYXIgbGlua2VkIGxpc3RcbiAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc1ZlcnRpY2FsT3JkZXIsIHRoaXMpLmZpcnN0KSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NlbGxzVmVydGljYWxPcmRlciwgdGhpcykuZmlyc3QucHJldiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbHNWZXJ0aWNhbE9yZGVyLCB0aGlzKS5sYXN0O1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc1ZlcnRpY2FsT3JkZXIsIHRoaXMpLmxhc3QubmV4dCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY2VsbHNWZXJ0aWNhbE9yZGVyLCB0aGlzKS5maXJzdDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFjdGl2ZSBub2RlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCByb3cgYW5kIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge0ZvY3VzT3JkZXJ9XG4gICAqL1xuICBzZXRBY3RpdmVOb2RlKHJvdywgY29sdW1uKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9jZWxsc0hvcml6b250YWxPcmRlciwgdGhpcykuaW5vcmRlcihub2RlID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93U3RhcnQsXG4gICAgICAgIHJvd0VuZCxcbiAgICAgICAgY29sU3RhcnQsXG4gICAgICAgIGNvbEVuZFxuICAgICAgfSA9IG5vZGUuZGF0YTtcbiAgICAgIGlmIChyb3cgPj0gcm93U3RhcnQgJiYgcm93IDw9IHJvd0VuZCAmJiBjb2x1bW4gPj0gY29sU3RhcnQgJiYgY29sdW1uIDw9IGNvbEVuZCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSwgdGhpcywgbm9kZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NlbGxzVmVydGljYWxPcmRlciwgdGhpcykuaW5vcmRlcihub2RlID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93U3RhcnQsXG4gICAgICAgIHJvd0VuZCxcbiAgICAgICAgY29sU3RhcnQsXG4gICAgICAgIGNvbEVuZFxuICAgICAgfSA9IG5vZGUuZGF0YTtcbiAgICAgIGlmIChyb3cgPj0gcm93U3RhcnQgJiYgcm93IDw9IHJvd0VuZCAmJiBjb2x1bW4gPj0gY29sU3RhcnQgJiYgY29sdW1uIDw9IGNvbEVuZCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2N1cnJlbnRWZXJ0aWNhbExpbmtlZE5vZGUsIHRoaXMsIG5vZGUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cbmV4cG9ydHMuRm9jdXNPcmRlciA9IEZvY3VzT3JkZXI7XG5mdW5jdGlvbiBfcHVzaE9yZGVyTm9kZShzZWxlY3RlZFJhbmdlLCBsaXN0T3JkZXIsIG1lcmdlQ2VsbHNWaXNpdG9yLCByb3csIGNvbHVtbikge1xuICBjb25zdCB0b3BTdGFydCA9IHNlbGVjdGVkUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgY29uc3QgYm90dG9tRW5kID0gc2VsZWN0ZWRSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgY29uc3QgaGlnaGxpZ2h0ID0gc2VsZWN0ZWRSYW5nZS5oaWdobGlnaHQuY2xvbmUoKS5ub3JtYWxpemUoKTtcbiAgY29uc3QgbWVyZ2VQYXJlbnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21lcmdlZENlbGxzR2V0dGVyLCB0aGlzKS5jYWxsKHRoaXMsIHJvdywgY29sdW1uKTtcbiAgaWYgKG1lcmdlUGFyZW50ICYmIG1lcmdlQ2VsbHNWaXNpdG9yLmhhcyhtZXJnZVBhcmVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBub2RlID0ge1xuICAgIGNvbFN0YXJ0OiBjb2x1bW4sXG4gICAgY29sRW5kOiBjb2x1bW4sXG4gICAgcm93U3RhcnQ6IHJvdyxcbiAgICByb3dFbmQ6IHJvd1xuICB9O1xuICBpZiAobWVyZ2VQYXJlbnQpIHtcbiAgICBtZXJnZUNlbGxzVmlzaXRvci5hZGQobWVyZ2VQYXJlbnQpO1xuICAgIGlmIChtZXJnZVBhcmVudC5yb3cgPCB0b3BTdGFydC5yb3cgfHwgbWVyZ2VQYXJlbnQucm93ICsgbWVyZ2VQYXJlbnQucm93c3BhbiAtIDEgPiBib3R0b21FbmQucm93IHx8IG1lcmdlUGFyZW50LmNvbCA8IHRvcFN0YXJ0LmNvbCB8fCBtZXJnZVBhcmVudC5jb2wgKyBtZXJnZVBhcmVudC5jb2xzcGFuIC0gMSA+IGJvdHRvbUVuZC5jb2wpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBub2RlLmNvbFN0YXJ0ID0gbWVyZ2VQYXJlbnQuY29sO1xuICAgIG5vZGUuY29sRW5kID0gbWVyZ2VQYXJlbnQuY29sICsgbWVyZ2VQYXJlbnQuY29sc3BhbiAtIDE7XG4gICAgbm9kZS5yb3dTdGFydCA9IG1lcmdlUGFyZW50LnJvdztcbiAgICBub2RlLnJvd0VuZCA9IG1lcmdlUGFyZW50LnJvdyArIG1lcmdlUGFyZW50LnJvd3NwYW4gLSAxO1xuICB9XG4gIGNvbnN0IGxpbmtlZE5vZGUgPSBsaXN0T3JkZXIucHVzaChub2RlKTtcbiAgaWYgKHJvdyA9PT0gaGlnaGxpZ2h0LnJvdyAmJiBjb2x1bW4gPT09IGhpZ2hsaWdodC5jb2wgfHwgbWVyZ2VQYXJlbnQgJiYgaGlnaGxpZ2h0LnJvdyA+PSBtZXJnZVBhcmVudC5yb3cgJiYgaGlnaGxpZ2h0LnJvdyA8PSBtZXJnZVBhcmVudC5yb3cgKyBtZXJnZVBhcmVudC5yb3dzcGFuIC0gMSAmJiBoaWdobGlnaHQuY29sID49IG1lcmdlUGFyZW50LmNvbCAmJiBoaWdobGlnaHQuY29sIDw9IG1lcmdlUGFyZW50LmNvbCArIG1lcmdlUGFyZW50LmNvbHNwYW4gLSAxKSB7XG4gICAgcmV0dXJuIGxpbmtlZE5vZGU7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX21lcmdlQ2VsbHMgPSByZXF1aXJlKFwiLi9tZXJnZUNlbGxzXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX21lcmdlQ2VsbHMuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX21lcmdlQ2VsbHMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5NZXJnZUNlbGxzID0gX21lcmdlQ2VsbHMuTWVyZ2VDZWxsczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2NlbGxzQ29sbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2VsbHNDb2xsZWN0aW9uXCIpKTtcbnZhciBfY2VsbENvb3JkcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2VsbENvb3Jkc1wiKSk7XG52YXIgX2F1dG9maWxsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jYWxjdWxhdGlvbnMvYXV0b2ZpbGxcIikpO1xudmFyIF9zZWxlY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NhbGN1bGF0aW9ucy9zZWxlY3Rpb25cIikpO1xudmFyIF90b2dnbGVNZXJnZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY29udGV4dE1lbnVJdGVtL3RvZ2dsZU1lcmdlXCIpKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Jyb3dzZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9icm93c2VyXCIpO1xudmFyIF9mb2N1c09yZGVyMiA9IHJlcXVpcmUoXCIuL2ZvY3VzT3JkZXJcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcignYmVmb3JlTWVyZ2VDZWxscycpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyTWVyZ2VDZWxscycpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2JlZm9yZVVubWVyZ2VDZWxscycpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ2FmdGVyVW5tZXJnZUNlbGxzJyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ21lcmdlQ2VsbHMnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAxNTA7XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSBQTFVHSU5fS0VZO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQHBsdWdpbiBNZXJnZUNlbGxzXG4gKiBAY2xhc3MgTWVyZ2VDZWxsc1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUGx1Z2luLCB3aGljaCBhbGxvd3MgbWVyZ2luZyBjZWxscyBpbiB0aGUgdGFibGUgKHVzaW5nIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24sIEFQSSBvciBjb250ZXh0IG1lbnUpLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyksIHtcbiAqICBkYXRhOiBnZXREYXRhKCksXG4gKiAgbWVyZ2VDZWxsczogW1xuICogICAge3JvdzogMCwgY29sOiAzLCByb3dzcGFuOiAzLCBjb2xzcGFuOiAzfSxcbiAqICAgIHtyb3c6IDIsIGNvbDogNiwgcm93c3BhbjogMiwgY29sc3BhbjogMn0sXG4gKiAgICB7cm93OiA0LCBjb2w6IDgsIHJvd3NwYW46IDMsIGNvbHNwYW46IDN9XG4gKiAgXSxcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIDxIb3RUYWJsZVxuICogICBkYXRhPXtnZXREYXRhKCl9XG4gKiAgIC8vIGVuYWJsZSBwbHVnaW5cbiAqICAgbWVyZ2VDZWxscz17W1xuICogICAge3JvdzogMCwgY29sOiAzLCByb3dzcGFuOiAzLCBjb2xzcGFuOiAzfSxcbiAqICAgIHtyb3c6IDIsIGNvbDogNiwgcm93c3BhbjogMiwgY29sc3BhbjogMn0sXG4gKiAgICB7cm93OiA0LCBjb2w6IDgsIHJvd3NwYW46IDMsIGNvbHNwYW46IDN9XG4gKiAgIF19XG4gKiAvPlxuICogYGBgXG4gKiA6OjpcbiAqL1xudmFyIF9sYXN0U2VsZWN0ZWRGb2N1cyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9sYXN0Rm9jdXNEZWx0YSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9mb2N1c09yZGVyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX01lcmdlQ2VsbHNfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIE1lcmdlQ2VsbHMgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBgYWZ0ZXJJbml0YCBob29rIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfTWVyZ2VDZWxsc19icmFuZCk7XG4gICAgLyoqXG4gICAgICogQSBjb250YWluZXIgZm9yIGFsbCB0aGUgbWVyZ2VkIGNlbGxzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7TWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm1lcmdlZENlbGxzQ29sbGVjdGlvblwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB0aGUgY2xhc3MgcmVzcG9uc2libGUgZm9yIGFsbCB0aGUgYXV0b2ZpbGwtcmVsYXRlZCBjYWxjdWxhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtBdXRvZmlsbENhbGN1bGF0aW9uc31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhdXRvZmlsbENhbGN1bGF0aW9uc1wiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB0aGUgY2xhc3MgcmVzcG9uc2libGUgZm9yIHRoZSBzZWxlY3Rpb24tcmVsYXRlZCBjYWxjdWxhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtTZWxlY3Rpb25DYWxjdWxhdGlvbnN9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2VsZWN0aW9uQ2FsY3VsYXRpb25zXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFRoZSBob2xkZXIgZm9yIHRoZSBsYXN0IHNlbGVjdGVkIGZvY3VzIGNvb3JkaW5hdGVzLiBUaGlzIGFsbG93cyBrZWVwaW5nIHRoZSBjb3JyZWN0IGNvb3JkaW5hdGVzIGluIGNhc2VzIGFmdGVyIHRoZVxuICAgICAqIGZvY3VzIGlzIG1vdmVkIG91dCBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q2VsbENvb3Jkc31cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbGFzdFNlbGVjdGVkRm9jdXMsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFRoZSBsYXN0IHVzZWQgdHJhbnNmb3JtYXRpb24gZGVsdGEuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7eyByb3c6IG51bWJlciwgY29sOiBudW1iZXIgfX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbGFzdEZvY3VzRGVsdGEsIHtcbiAgICAgIHJvdzogMCxcbiAgICAgIGNvbDogMFxuICAgIH0pO1xuICAgIC8qKlxuICAgICAqIFRoZSBtb2R1bGUgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUgY29ycmVjdCBmb2N1cyBvcmRlciAodmVydGljYWwgYW5kIGhvcml6b250YWwpIHdpdGhpbiBhIHNlbGVjdGlvbiB0aGF0XG4gICAgICogY29udGFpbnMgbWVyZ2VkIGNlbGxzLlxuICAgICAqXG4gICAgICogQHR5cGUge0ZvY3VzT3JkZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2ZvY3VzT3JkZXIsIG5ldyBfZm9jdXNPcmRlcjIuRm9jdXNPcmRlcih7XG4gICAgICBtZXJnZWRDZWxsc0dldHRlcjogKHJvdywgY29sdW1uKSA9PiB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQocm93LCBjb2x1bW4pLFxuICAgICAgcm93SW5kZXhNYXBwZXI6IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXI6IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSkpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIGluIHtAbGluayBIb29rcyNiZWZvcmVJbml0fVxuICAgKiBob29rIGFuZCBpZiBpdCByZXR1cm5zIGB0cnVlYCB0aGVuIHRoZSB7QGxpbmsgTWVyZ2VDZWxscyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbiA9IG5ldyBfY2VsbHNDb2xsZWN0aW9uLmRlZmF1bHQodGhpcyk7XG4gICAgdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucyA9IG5ldyBfYXV0b2ZpbGwuZGVmYXVsdCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucyA9IG5ldyBfc2VsZWN0aW9uLmRlZmF1bHQodGhpcyk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckluaXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9vbkFmdGVySW5pdCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlUcmFuc2Zvcm1Gb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25Nb2RpZnlUcmFuc2Zvcm1Gb2N1cykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlUcmFuc2Zvcm1TdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25Nb2RpZnlUcmFuc2Zvcm1TdGFydCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlUcmFuc2Zvcm1FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uTW9kaWZ5VHJhbnNmb3JtRW5kKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlU2V0UmFuZ2VTdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVTZXRSYW5nZVN0YXJ0KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVNldFJhbmdlU3RhcnRPbmx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZVNldFJhbmdlU3RhcnQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcbiAgICAgICAgYXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgICAgICBhcmdzW19rZXk5XSA9IGFyZ3VtZW50c1tfa2V5OV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlclNlbGVjdGlvbkZvY3VzU2V0KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyU2VsZWN0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEwID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTApLCBfa2V5MTAgPSAwOyBfa2V5MTAgPCBfbGVuMTA7IF9rZXkxMCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJTZWxlY3Rpb25FbmQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnbW9kaWZ5R2V0Q2VsbENvb3JkcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjExKSwgX2tleTExID0gMDsgX2tleTExIDwgX2xlbjExOyBfa2V5MTErKykge1xuICAgICAgICBhcmdzW19rZXkxMV0gPSBhcmd1bWVudHNbX2tleTExXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9vbk1vZGlmeUdldENlbGxDb29yZHMpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTIpLCBfa2V5MTIgPSAwOyBfa2V5MTIgPCBfbGVuMTI7IF9rZXkxMisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEyXSA9IGFyZ3VtZW50c1tfa2V5MTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyUmVuZGVyZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMyksIF9rZXkxMyA9IDA7IF9rZXkxMyA8IF9sZW4xMzsgX2tleTEzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTNdID0gYXJndW1lbnRzW19rZXkxM107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlclJlbmRlcmVyKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE0KSwgX2tleTE0ID0gMDsgX2tleTE0IDwgX2xlbjE0OyBfa2V5MTQrKykge1xuICAgICAgICBhcmdzW19rZXkxNF0gPSBhcmd1bWVudHNbX2tleTE0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyR2V0Q2VsbE1ldGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xNSksIF9rZXkxNSA9IDA7IF9rZXkxNSA8IF9sZW4xNTsgX2tleTE1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTVdID0gYXJndW1lbnRzW19rZXkxNV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlckdldENlbGxNZXRhKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xNiksIF9rZXkxNiA9IDA7IF9rZXkxNiA8IF9sZW4xNjsgX2tleTE2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTZdID0gYXJndW1lbnRzW19rZXkxNl07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xNyksIF9rZXkxNyA9IDA7IF9rZXkxNyA8IF9sZW4xNzsgX2tleTE3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTddID0gYXJndW1lbnRzW19rZXkxN107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ21vZGlmeUF1dG9maWxsUmFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xOCksIF9rZXkxOCA9IDA7IF9rZXkxOCA8IF9sZW4xODsgX2tleTE4KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MThdID0gYXJndW1lbnRzW19rZXkxOF07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25Nb2RpZnlBdXRvZmlsbFJhbmdlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ3JlYXRlQ29sJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjE5ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTkpLCBfa2V5MTkgPSAwOyBfa2V5MTkgPCBfbGVuMTk7IF9rZXkxOSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTE5XSA9IGFyZ3VtZW50c1tfa2V5MTldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJDcmVhdGVDb2wpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSZW1vdmVDb2wnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjAgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yMCksIF9rZXkyMCA9IDA7IF9rZXkyMCA8IF9sZW4yMDsgX2tleTIwKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjBdID0gYXJndW1lbnRzW19rZXkyMF07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlclJlbW92ZUNvbCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckNyZWF0ZVJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yMSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIxKSwgX2tleTIxID0gMDsgX2tleTIxIDwgX2xlbjIxOyBfa2V5MjErKykge1xuICAgICAgICBhcmdzW19rZXkyMV0gPSBhcmd1bWVudHNbX2tleTIxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9vbkFmdGVyQ3JlYXRlUm93KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyUmVtb3ZlUm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMjIpLCBfa2V5MjIgPSAwOyBfa2V5MjIgPCBfbGVuMjI7IF9rZXkyMisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIyXSA9IGFyZ3VtZW50c1tfa2V5MjJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9NZXJnZUNlbGxzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJSZW1vdmVSb3cpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yMyksIF9rZXkyMyA9IDA7IF9rZXkyMyA8IF9sZW4yMzsgX2tleTIzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjNdID0gYXJndW1lbnRzW19rZXkyM107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlckNoYW5nZSkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVEcmF3Qm9yZGVycycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjI0KSwgX2tleTI0ID0gMDsgX2tleTI0IDwgX2xlbjI0OyBfa2V5MjQrKykge1xuICAgICAgICBhcmdzW19rZXkyNF0gPSBhcmd1bWVudHNbX2tleTI0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTWVyZ2VDZWxsc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZURyYXdBcmVhQm9yZGVycykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckRyYXdTZWxlY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yNSksIF9rZXkyNSA9IDA7IF9rZXkyNSA8IF9sZW4yNTsgX2tleTI1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjVdID0gYXJndW1lbnRzW19rZXkyNV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25BZnRlckRyYXdTZWxlY3Rpb24pLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yNiksIF9rZXkyNiA9IDA7IF9rZXkyNiA8IF9sZW4yNjsgX2tleTI2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjZdID0gYXJndW1lbnRzW19rZXkyNl07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVCZWdpbkVkaXRpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yNyksIF9rZXkyNyA9IDA7IF9rZXkyNyA8IF9sZW4yNzsgX2tleTI3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5MjddID0gYXJndW1lbnRzW19rZXkyN107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX01lcmdlQ2VsbHNfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVCZWdpbkVkaXRpbmcpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlVW5kb1N0YWNrQ2hhbmdlJywgKGFjdGlvbiwgc291cmNlKSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSAnTWVyZ2VDZWxscycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKTtcbiAgICB0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICB0aGlzLmhvdC5yZW5kZXIoKTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGVcbiAgICogZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BtZXJnZUNlbGxzYF0oQC9hcGkvb3B0aW9ucy5tZCNtZXJnZWNlbGxzKVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luKCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBicm93c2VyIGlzIHJlY29nbml6ZWQgYXMgQ2hyb21lLCBmb3JjZSBhbiBhZGRpdGlvbmFsIHJlcGFpbnQgdG8gcHJldmVudCBzaG93aW5nIHRoZSBlZmZlY3RzIG9mIGEgQ2hyb21lIGJ1Zy5cbiAgICpcbiAgICogSXNzdWUgZGVzY3JpYmVkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvZGV2LWhhbmRzb250YWJsZS9pc3N1ZXMvNTIxLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSB7XG4gICAgaWYgKCEoMCwgX2Jyb3dzZXIuaXNDaHJvbWUpKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm93c1RvUmVmcmVzaCA9IFtdO1xuICAgIGxldCByb3dJbmRleGVzVG9SZWZyZXNoID0gW107XG4gICAgdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChtZXJnZWRDZWxsID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICByb3dzcGFuXG4gICAgICB9ID0gbWVyZ2VkQ2VsbDtcbiAgICAgIGZvciAobGV0IHIgPSByb3cgKyAxOyByIDwgcm93ICsgcm93c3BhbjsgcisrKSB7XG4gICAgICAgIHJvd0luZGV4ZXNUb1JlZnJlc2gucHVzaChyKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzXG4gICAgcm93SW5kZXhlc1RvUmVmcmVzaCA9IFsuLi5uZXcgU2V0KHJvd0luZGV4ZXNUb1JlZnJlc2gpXTtcbiAgICByb3dJbmRleGVzVG9SZWZyZXNoLmZvckVhY2gocm93SW5kZXggPT4ge1xuICAgICAgY29uc3QgcmVuZGVyYWJsZVJvd0luZGV4ID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyb3dJbmRleCk7XG4gICAgICB0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmdldE92ZXJsYXlzKHRydWUpLm1hcChvdmVybGF5ID0+IChvdmVybGF5ID09PSBudWxsIHx8IG92ZXJsYXkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG92ZXJsYXkubmFtZSkgPT09ICdtYXN0ZXInID8gb3ZlcmxheSA6IG92ZXJsYXkuY2xvbmUud3RUYWJsZSkuZm9yRWFjaCh3dFRhYmxlUmVmID0+IHtcbiAgICAgICAgY29uc3Qgcm93VG9SZWZyZXNoID0gd3RUYWJsZVJlZi5nZXRSb3cocmVuZGVyYWJsZVJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvd1RvUmVmcmVzaCkge1xuICAgICAgICAgIC8vIE1vZGlmeSB0aGUgVFIncyBgYmFja2dyb3VuZGAgcHJvcGVydHkgdG8gbGF0ZXIgbW9kaWZ5IGl0IGFzeW5jaHJvbm91c2x5LlxuICAgICAgICAgIC8vIFRoZSBiYWNrZ3JvdW5kIGNvbG9yIGlzIGdldHRpbmcgbW9kaWZpZWQgb25seSB3aXRoIHRoZSBhbHBoYSwgc28gdGhlIGNoYW5nZSBzaG91bGQgbm90IGJlIHZpc2libGUgKGFuZCBpc1xuICAgICAgICAgIC8vIGNvdmVyZWQgYnkgdGhlIFREcycgYmFja2dyb3VuZCBjb2xvcikuXG4gICAgICAgICAgcm93VG9SZWZyZXNoLnN0eWxlLmJhY2tncm91bmQgPSAoMCwgX2VsZW1lbnQuZ2V0U3R5bGUpKHJvd1RvUmVmcmVzaCwgJ2JhY2tncm91bmRDb2xvcicpLnJlcGxhY2UoJyknLCAnLCAwLjk5KScpO1xuICAgICAgICAgIHJvd3NUb1JlZnJlc2gucHVzaChyb3dUb1JlZnJlc2gpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEFzeW5jaHJvbm91c2x5IHJldmVydCB0aGUgVFJzJyBgYmFja2dyb3VuZGAgcHJvcGVydHkgdG8gZm9yY2UgYSBmcmVzaCByZXBhaW50LlxuICAgIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCkgPT4ge1xuICAgICAgcm93c1RvUmVmcmVzaC5mb3JFYWNoKHJvd0VsZW1lbnQgPT4ge1xuICAgICAgICByb3dFbGVtZW50LnN0eWxlLmJhY2tncm91bmQgPSAoMCwgX2VsZW1lbnQuZ2V0U3R5bGUpKHJvd0VsZW1lbnQsICdiYWNrZ3JvdW5kQ29sb3InKS5yZXBsYWNlKCcsIDAuOTkpJywgJyknKTtcbiAgICAgIH0pO1xuICAgIH0sIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIHNpbmdsZSBzZXR0aW5nIG9iamVjdCwgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgbWVyZ2VkIGNlbGwgaW5mb3JtYXRpb24gb2JqZWN0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gc2V0dGluZyBBbiBvYmplY3Qgd2l0aCBgcm93YCwgYGNvbGAsIGByb3dzcGFuYCBhbmQgYGNvbHNwYW5gIHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgdmFsaWRhdGVTZXR0aW5nKHNldHRpbmcpIHtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIGlmICghc2V0dGluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoX2NlbGxDb29yZHMuZGVmYXVsdC5jb250YWluc05lZ2F0aXZlVmFsdWVzKHNldHRpbmcpKSB7XG4gICAgICAoMCwgX2NvbnNvbGUud2FybikoX2NlbGxDb29yZHMuZGVmYXVsdC5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhzZXR0aW5nKSk7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoX2NlbGxDb29yZHMuZGVmYXVsdC5pc091dE9mQm91bmRzKHNldHRpbmcsIHRoaXMuaG90LmNvdW50Um93cygpLCB0aGlzLmhvdC5jb3VudENvbHMoKSkpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShfY2VsbENvb3Jkcy5kZWZhdWx0LklTX09VVF9PRl9CT1VORFNfV0FSTklORyhzZXR0aW5nKSk7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoX2NlbGxDb29yZHMuZGVmYXVsdC5pc1NpbmdsZUNlbGwoc2V0dGluZykpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShfY2VsbENvb3Jkcy5kZWZhdWx0LklTX1NJTkdMRV9DRUxMKHNldHRpbmcpKTtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChfY2VsbENvb3Jkcy5kZWZhdWx0LmNvbnRhaW5zWmVyb1NwYW4oc2V0dGluZykpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKShfY2VsbENvb3Jkcy5kZWZhdWx0LlpFUk9fU1BBTl9XQVJOSU5HKHNldHRpbmcpKTtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIG1lcmdlZCBjZWxscyBmcm9tIHRoZSBzZXR0aW5ncyBwcm92aWRlZCB0byB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fGJvb2xlYW59IHNldHRpbmdzIFRoZSBzZXR0aW5ncyBwcm92aWRlZCB0byB0aGUgcGx1Z2luLlxuICAgKi9cbiAgZ2VuZXJhdGVGcm9tU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZXR0aW5ncykpIHtcbiAgICAgIGNvbnN0IHBvcHVsYXRlZE51bGxzID0gW107XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2V0dGluZ3MsIHNldHRpbmcgPT4ge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVTZXR0aW5nKHNldHRpbmcpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhpZ2hsaWdodCA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHNldHRpbmcucm93LCBzZXR0aW5nLmNvbCk7XG4gICAgICAgIGNvbnN0IHJhbmdlRW5kID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoc2V0dGluZy5yb3cgKyBzZXR0aW5nLnJvd3NwYW4gLSAxLCBzZXR0aW5nLmNvbCArIHNldHRpbmcuY29sc3BhbiAtIDEpO1xuICAgICAgICBjb25zdCBtZXJnZVJhbmdlID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShoaWdobGlnaHQsIGhpZ2hsaWdodCwgcmFuZ2VFbmQpO1xuXG4gICAgICAgIC8vIE1lcmdpbmcgd2l0aG91dCBkYXRhIHBvcHVsYXRpb24uXG4gICAgICAgIHRoaXMubWVyZ2VSYW5nZShtZXJnZVJhbmdlLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzZXR0aW5nLnJvdywgc2V0dGluZy5yb3cgKyBzZXR0aW5nLnJvd3NwYW4gLSAxLCByb3dJbmRleCA9PiB7XG4gICAgICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShzZXR0aW5nLmNvbCwgc2V0dGluZy5jb2wgKyBzZXR0aW5nLmNvbHNwYW4gLSAxLCBjb2x1bW5JbmRleCA9PiB7XG4gICAgICAgICAgICAvLyBOb3QgcmVzZXR0aW5nIGEgY2VsbCByZXByZXNlbnRpbmcgYSBtZXJnZSBhcmVhJ3MgdmFsdWUuXG4gICAgICAgICAgICBpZiAoKHJvd0luZGV4ID09PSBzZXR0aW5nLnJvdyAmJiBjb2x1bW5JbmRleCA9PT0gc2V0dGluZy5jb2wpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICBwb3B1bGF0ZWROdWxscy5wdXNoKFtyb3dJbmRleCwgY29sdW1uSW5kZXgsIG51bGxdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG5vIG1lcmdlZCBjZWxscy4gVGh1cywgbm8gZGF0YSBwb3B1bGF0aW9uIGlzIG5lZWRlZC5cbiAgICAgIGlmIChwb3B1bGF0ZWROdWxscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBDaGFuZ2UgdGhlIGBzb3VyY2VgIGFyZ3VtZW50IHRvIGEgbW9yZSBtZWFuaW5nZnVsIHZhbHVlLCBlLmcuIGAke3RoaXMucGx1Z2luTmFtZX0uY2xlYXJDZWxsc2AuXG4gICAgICB0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHBvcHVsYXRlZE51bGxzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5wbHVnaW5OYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBtZXJnZWQgY2VsbHMgZnJvbSB0aGUgbWVyZ2VkIGNlbGwgY29udGFpbmVyLlxuICAgKi9cbiAgY2xlYXJDb2xsZWN0aW9ucygpIHtcbiAgICB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGEgcmFuZ2UgaXMgbWVyZ2VhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbmV3TWVyZ2VkQ2VsbEluZm8gTWVyZ2VkIGNlbGwgaW5mb3JtYXRpb24gb2JqZWN0IHRvIHRlc3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG89ZmFsc2VdIGB0cnVlYCBpZiB0cmlnZ2VyZWQgYXQgaW5pdGlhbGl6YXRpb24uXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgY2FuTWVyZ2VSYW5nZShuZXdNZXJnZWRDZWxsSW5mbykge1xuICAgIGxldCBhdXRvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICByZXR1cm4gYXV0byA/IHRydWUgOiB0aGlzLnZhbGlkYXRlU2V0dGluZyhuZXdNZXJnZWRDZWxsSW5mbyk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBzZWxlY3Rpb24gcHJvdmlkZWQgYXMgYSBjZWxsIHJhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gW2NlbGxSYW5nZV0gU2VsZWN0aW9uIGNlbGwgcmFuZ2UuXG4gICAqL1xuICBtZXJnZVNlbGVjdGlvbigpIHtcbiAgICBsZXQgY2VsbFJhbmdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmICghY2VsbFJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNlbGxSYW5nZS5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKSA/ICdORS1TVycgOiAnTlctU0UnKTtcbiAgICBjb25zdCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gY2VsbFJhbmdlO1xuICAgIHRoaXMudW5tZXJnZVJhbmdlKGNlbGxSYW5nZSwgdHJ1ZSk7XG4gICAgdGhpcy5tZXJnZVJhbmdlKGNlbGxSYW5nZSk7XG4gICAgdGhpcy5ob3Quc2VsZWN0Q2VsbChmcm9tLnJvdywgZnJvbS5jb2wsIHRvLnJvdywgdG8uY29sLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogVW5tZXJnZXMgdGhlIHNlbGVjdGlvbiBwcm92aWRlZCBhcyBhIGNlbGwgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBbY2VsbFJhbmdlXSBTZWxlY3Rpb24gY2VsbCByYW5nZS5cbiAgICovXG4gIHVubWVyZ2VTZWxlY3Rpb24oKSB7XG4gICAgbGV0IGNlbGxSYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBpZiAoIWNlbGxSYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gY2VsbFJhbmdlO1xuICAgIHRoaXMudW5tZXJnZVJhbmdlKGNlbGxSYW5nZSwgdHJ1ZSk7XG4gICAgdGhpcy5ob3Quc2VsZWN0Q2VsbChmcm9tLnJvdywgZnJvbS5jb2wsIHRvLnJvdywgdG8uY29sLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIGNlbGxzIGluIHRoZSBwcm92aWRlZCBjZWxsIHJhbmdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0NlbGxSYW5nZX0gY2VsbFJhbmdlIENlbGwgcmFuZ2UgdG8gbWVyZ2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2F1dG89ZmFsc2VdIGB0cnVlYCBpZiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSwgZS5nLiBBdCBpbml0aWFsaXphdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbcHJldmVudFBvcHVsYXRpb249ZmFsc2VdIGB0cnVlYCwgaWYgdGhlIG1ldGhvZCBzaG91bGQgbm90IHJ1biBgcG9wdWxhdGVGcm9tQXJyYXlgIGF0IHRoZSBlbmQsXG4gICAqICAgYnV0IHJhdGhlciByZXR1cm4gaXRzIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge0FycmF5fGJvb2xlYW59IFJldHVybnMgYW4gYXJyYXkgb2YgW3JvdywgY29sdW1uLCBkYXRhVW5kZXJDb2xsZWN0aW9uXSBpZiBwcmV2ZW50UG9wdWxhdGlvbiBpcyBzZXQgdG9cbiAgICogICB0cnVlLiBJZiB0aGUgdGhlIG1lcmdpbmcgcHJvY2VzcyB3ZW50IHN1Y2Nlc3NmdWwsIGl0IHJldHVybnMgYHRydWVgLCBvdGhlcndpc2UgLSBgZmFsc2VgLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlTWVyZ2VDZWxsc1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJNZXJnZUNlbGxzXG4gICAqL1xuICBtZXJnZVJhbmdlKGNlbGxSYW5nZSkge1xuICAgIGxldCBhdXRvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICBsZXQgcHJldmVudFBvcHVsYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIGNvbnN0IHRvcFN0YXJ0ID0gY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kID0gY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO1xuICAgIGNvbnN0IG1lcmdlUGFyZW50ID0ge1xuICAgICAgcm93OiB0b3BTdGFydC5yb3csXG4gICAgICBjb2w6IHRvcFN0YXJ0LmNvbCxcbiAgICAgIHJvd3NwYW46IGJvdHRvbUVuZC5yb3cgLSB0b3BTdGFydC5yb3cgKyAxLFxuICAgICAgY29sc3BhbjogYm90dG9tRW5kLmNvbCAtIHRvcFN0YXJ0LmNvbCArIDFcbiAgICB9O1xuICAgIGNvbnN0IGNsZWFyZWREYXRhID0gW107XG4gICAgbGV0IHBvcHVsYXRpb25JbmZvID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuY2FuTWVyZ2VSYW5nZShtZXJnZVBhcmVudCwgYXV0bykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZU1lcmdlQ2VsbHMnLCBjZWxsUmFuZ2UsIGF1dG8pO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgbWVyZ2VQYXJlbnQucm93c3BhbiAtIDEsIGkgPT4ge1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKSgwLCBtZXJnZVBhcmVudC5jb2xzcGFuIC0gMSwgaiA9PiB7XG4gICAgICAgIGxldCBjbGVhcmVkVmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAoIWNsZWFyZWREYXRhW2ldKSB7XG4gICAgICAgICAgY2xlYXJlZERhdGFbaV0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaSA9PT0gMCAmJiBqID09PSAwKSB7XG4gICAgICAgICAgY2xlYXJlZFZhbHVlID0gdGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KG1lcmdlUGFyZW50LnJvdyksIHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obWVyZ2VQYXJlbnQuY29sKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5ob3Quc2V0Q2VsbE1ldGEobWVyZ2VQYXJlbnQucm93ICsgaSwgbWVyZ2VQYXJlbnQuY29sICsgaiwgJ2hpZGRlbicsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyZWREYXRhW2ldW2pdID0gY2xlYXJlZFZhbHVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5ob3Quc2V0Q2VsbE1ldGEobWVyZ2VQYXJlbnQucm93LCBtZXJnZVBhcmVudC5jb2wsICdzcGFubmVkJywgdHJ1ZSk7XG4gICAgY29uc3QgbWVyZ2VkQ2VsbEFkZGVkID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKG1lcmdlUGFyZW50KTtcbiAgICBpZiAobWVyZ2VkQ2VsbEFkZGVkKSB7XG4gICAgICBpZiAocHJldmVudFBvcHVsYXRpb24pIHtcbiAgICAgICAgcG9wdWxhdGlvbkluZm8gPSBbbWVyZ2VQYXJlbnQucm93LCBtZXJnZVBhcmVudC5jb2wsIGNsZWFyZWREYXRhXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGUgYHNvdXJjZWAgYXJndW1lbnQgdG8gYSBtb3JlIG1lYW5pbmdmdWwgdmFsdWUsIGUuZy4gYCR7dGhpcy5wbHVnaW5OYW1lfS5jbGVhckNlbGxzYC5cbiAgICAgICAgdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkobWVyZ2VQYXJlbnQucm93LCBtZXJnZVBhcmVudC5jb2wsIGNsZWFyZWREYXRhLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcy5wbHVnaW5OYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmICghYXV0bykge1xuICAgICAgICB0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJNZXJnZUNlbGxzJywgY2VsbFJhbmdlLCBtZXJnZVBhcmVudCwgYXV0byk7XG4gICAgICByZXR1cm4gcG9wdWxhdGlvbkluZm87XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVubWVyZ2VzIHRoZSBzZWxlY3Rpb24gcHJvdmlkZWQgYXMgYSBjZWxsIHJhbmdlLiBJZiBubyBjZWxsIHJhbmdlIGlzIHByb3ZpZGVkLCBpdCB1c2VzIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBTZWxlY3Rpb24gY2VsbCByYW5nZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYXV0bz1mYWxzZV0gYHRydWVgIGlmIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBwbHVnaW4uXG4gICAqXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVVbm1lcmdlQ2VsbHNcbiAgICogQGZpcmVzIEhvb2tzI2FmdGVyVW5tZXJnZUNlbGxzXG4gICAqL1xuICB1bm1lcmdlUmFuZ2UoY2VsbFJhbmdlKSB7XG4gICAgbGV0IGF1dG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgIGNvbnN0IG1lcmdlZENlbGxzID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2VsbFJhbmdlKTtcbiAgICBpZiAoIW1lcmdlZENlbGxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVVbm1lcmdlQ2VsbHMnLCBjZWxsUmFuZ2UsIGF1dG8pO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShtZXJnZWRDZWxscywgY3VycmVudENvbGxlY3Rpb24gPT4ge1xuICAgICAgdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGN1cnJlbnRDb2xsZWN0aW9uLnJvdywgY3VycmVudENvbGxlY3Rpb24uY29sKTtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgY3VycmVudENvbGxlY3Rpb24ucm93c3BhbiAtIDEsIGkgPT4ge1xuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKDAsIGN1cnJlbnRDb2xsZWN0aW9uLmNvbHNwYW4gLSAxLCBqID0+IHtcbiAgICAgICAgICB0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShjdXJyZW50Q29sbGVjdGlvbi5yb3cgKyBpLCBjdXJyZW50Q29sbGVjdGlvbi5jb2wgKyBqLCAnaGlkZGVuJyk7XG4gICAgICAgICAgdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoY3VycmVudENvbGxlY3Rpb24ucm93ICsgaSwgY3VycmVudENvbGxlY3Rpb24uY29sICsgaiwgJ2NvcHlhYmxlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShjdXJyZW50Q29sbGVjdGlvbi5yb3csIGN1cnJlbnRDb2xsZWN0aW9uLmNvbCwgJ3NwYW5uZWQnKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJVbm1lcmdlQ2VsbHMnLCBjZWxsUmFuZ2UsIGF1dG8pO1xuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyBvciB1bm1lcmdlcywgYmFzZWQgb24gdGhlIGNlbGwgcmFuZ2UgcHJvdmlkZWQgYXMgYGNlbGxSYW5nZWAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBjZWxsUmFuZ2UgVGhlIGNlbGwgcmFuZ2UgdG8gbWVyZ2Ugb3IgdW5tZXJnZWQuXG4gICAqL1xuICB0b2dnbGVNZXJnZShjZWxsUmFuZ2UpIHtcbiAgICBjb25zdCBtZXJnZWRDZWxsID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGNlbGxSYW5nZS5mcm9tLnJvdywgY2VsbFJhbmdlLmZyb20uY29sKTtcbiAgICBjb25zdCBtZXJnZWRDZWxsQ292ZXJzV2hvbGVSYW5nZSA9IG1lcmdlZENlbGwucm93ID09PSBjZWxsUmFuZ2UuZnJvbS5yb3cgJiYgbWVyZ2VkQ2VsbC5jb2wgPT09IGNlbGxSYW5nZS5mcm9tLmNvbCAmJiBtZXJnZWRDZWxsLnJvdyArIG1lcmdlZENlbGwucm93c3BhbiAtIDEgPT09IGNlbGxSYW5nZS50by5yb3cgJiYgbWVyZ2VkQ2VsbC5jb2wgKyBtZXJnZWRDZWxsLmNvbHNwYW4gLSAxID09PSBjZWxsUmFuZ2UudG8uY29sO1xuICAgIGlmIChtZXJnZWRDZWxsQ292ZXJzV2hvbGVSYW5nZSkge1xuICAgICAgdGhpcy51bm1lcmdlUmFuZ2UoY2VsbFJhbmdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXJnZVNlbGVjdGlvbihjZWxsUmFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZXMgdGhlIHNwZWNpZmllZCByYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0Um93IFN0YXJ0IHJvdyBvZiB0aGUgbWVyZ2VkIGNlbGwuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydENvbHVtbiBTdGFydCBjb2x1bW4gb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kUm93IEVuZCByb3cgb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kQ29sdW1uIEVuZCBjb2x1bW4gb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlTWVyZ2VDZWxsc1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJNZXJnZUNlbGxzXG4gICAqL1xuICBtZXJnZShzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdywgZW5kQ29sdW1uKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhzdGFydFJvdywgc3RhcnRDb2x1bW4pO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGVuZFJvdywgZW5kQ29sdW1uKTtcbiAgICB0aGlzLm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShzdGFydCwgc3RhcnQsIGVuZCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVubWVyZ2VzIHRoZSBtZXJnZWQgY2VsbCBpbiB0aGUgcHJvdmlkZWQgcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFJvdyBTdGFydCByb3cgb2YgdGhlIG1lcmdlZCBjZWxsLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRDb2x1bW4gU3RhcnQgY29sdW1uIG9mIHRoZSBtZXJnZWQgY2VsbC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFJvdyBFbmQgcm93IG9mIHRoZSBtZXJnZWQgY2VsbC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZENvbHVtbiBFbmQgY29sdW1uIG9mIHRoZSBtZXJnZWQgY2VsbC5cbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVVubWVyZ2VDZWxsc1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJVbm1lcmdlQ2VsbHNcbiAgICovXG4gIHVubWVyZ2Uoc3RhcnRSb3csIHN0YXJ0Q29sdW1uLCBlbmRSb3csIGVuZENvbHVtbikge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhlbmRSb3csIGVuZENvbHVtbik7XG4gICAgdGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShzdGFydCwgc3RhcnQsIGVuZCkpO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGEgbWVyZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKTtcbiAgICBjb25zdCBncmlkQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdncmlkJyk7XG4gICAgZ3JpZENvbnRleHQuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snQ29udHJvbCcsICdtJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZU1lcmdlKHJhbmdlKTtcbiAgICAgICAgICB0aGlzLmhvdC5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bk9ubHlJZjogZXZlbnQgPT4gIWV2ZW50LmFsdEtleSxcbiAgICAgIC8vIHJpZ2h0IEFMVCBpbiBzb21lIHN5c3RlbXMgdHJpZ2dlcnMgQUxUK0NUUkxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgYSBtZXJnZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZ3JpZENvbnRleHQgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0Q29udGV4dCgnZ3JpZCcpO1xuICAgIGdyaWRDb250ZXh0LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU0hPUlRDVVRTX0dST1VQKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmllcyB0aGUgaW5mb3JtYXRpb24gb24gd2hldGhlciB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29udGFpbnMgbXVsdGlwbGUgY2VsbHMuIFRoZSBgYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uYFxuICAgKiBob29rIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTXVsdGlwbGUgRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBjb250YWlucyBtdWx0aXBsZSBjZWxscy5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuXG4gIC8qKlxuICAgKiBNb2RpZnkgdmlld3BvcnQgc3RhcnQgd2hlbiBuZWVkZWQuIFdlIGV4dGVuZCB2aWV3cG9ydCB3aGVuIG1lcmdlZCBjZWxscyBhcmVuJ3QgZnVsbHkgdmlzaWJsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNhbGMgVGhlIHJvdyBjYWxjdWxhdG9yIG9iamVjdC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG5yT2ZDb2x1bW5zIE51bWJlciBvZiB2aXN1YWwgY29sdW1ucy5cbiAgICovXG4gIG1vZGlmeVZpZXdwb3J0Um93U3RhcnQoY2FsYywgbnJPZkNvbHVtbnMpIHtcbiAgICBjb25zdCByb3dNYXBwZXIgPSB0aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtcbiAgICBjb25zdCB2aXN1YWxTdGFydFJvdyA9IHJvd01hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNhbGMuc3RhcnRSb3cpO1xuICAgIGZvciAobGV0IHZpc3VhbENvbHVtbkluZGV4ID0gMDsgdmlzdWFsQ29sdW1uSW5kZXggPCBuck9mQ29sdW1uczsgdmlzdWFsQ29sdW1uSW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgbWVyZ2VQYXJlbnRGb3JWaWV3cG9ydFN0YXJ0ID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHZpc3VhbFN0YXJ0Um93LCB2aXN1YWxDb2x1bW5JbmRleCk7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKG1lcmdlUGFyZW50Rm9yVmlld3BvcnRTdGFydCkpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZUluZGV4QXRNZXJnZVN0YXJ0ID0gcm93TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocm93TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChtZXJnZVBhcmVudEZvclZpZXdwb3J0U3RhcnQucm93LCAxKSk7XG5cbiAgICAgICAgLy8gTWVyZ2Ugc3RhcnQgaXMgb3V0IG9mIHRoZSB2aWV3cG9ydCAoaS5lLiB3aGVuIHdlIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gYW5kIHdlIGNhbiBzZWUganVzdCBwYXJ0IG9mIGEgbWVyZ2UpLlxuICAgICAgICBpZiAocmVuZGVyYWJsZUluZGV4QXRNZXJnZVN0YXJ0IDwgY2FsYy5zdGFydFJvdykge1xuICAgICAgICAgIC8vIFdlIGV4dGVuZCB2aWV3cG9ydCB3aGVuIHNvbWUgcm93cyBoYXZlIGJlZW4gbWVyZ2VkLlxuICAgICAgICAgIGNhbGMuc3RhcnRSb3cgPSByZW5kZXJhYmxlSW5kZXhBdE1lcmdlU3RhcnQ7XG4gICAgICAgICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIG5leHQgbWVyZ2VzIGluc2lkZSBhbHJlYWR5IGV4dGVuZGVkIHZpZXdwb3J0IChzdGFydGluZyBhZ2FpbiBmcm9tIHJvdyBlcXVhbCB0byAwKS5cbiAgICAgICAgICB0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQoY2FsYywgbnJPZkNvbHVtbnMpOyAvLyByZWN1cnNpdmVseSBzZWFyY2ggdXB3YXJkc1xuXG4gICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2ggdGhlIGN1cnJlbnQgbG9vcC4gRXZlcnl0aGluZyB3aWxsIGJlIGNoZWNrZWQgZnJvbSB0aGUgYmVnaW5uaW5nIGJ5IGFib3ZlIHJlY3Vyc2lvbi5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgTW9kaWZ5IHZpZXdwb3J0IGVuZCB3aGVuIG5lZWRlZC4gV2UgZXh0ZW5kIHZpZXdwb3J0IHdoZW4gbWVyZ2VkIGNlbGxzIGFyZW4ndCBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2FsYyBUaGUgcm93IGNhbGN1bGF0b3Igb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnJPZkNvbHVtbnMgTnVtYmVyIG9mIHZpc3VhbCBjb2x1bW5zLlxuICAgKi9cbiAgbW9kaWZ5Vmlld3BvcnRSb3dFbmQoY2FsYywgbnJPZkNvbHVtbnMpIHtcbiAgICBjb25zdCByb3dNYXBwZXIgPSB0aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtcbiAgICBjb25zdCB2aXN1YWxFbmRSb3cgPSByb3dNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjYWxjLmVuZFJvdyk7XG4gICAgZm9yIChsZXQgdmlzdWFsQ29sdW1uSW5kZXggPSAwOyB2aXN1YWxDb2x1bW5JbmRleCA8IG5yT2ZDb2x1bW5zOyB2aXN1YWxDb2x1bW5JbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBtZXJnZVBhcmVudEZvclZpZXdwb3J0RW5kID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHZpc3VhbEVuZFJvdywgdmlzdWFsQ29sdW1uSW5kZXgpO1xuICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShtZXJnZVBhcmVudEZvclZpZXdwb3J0RW5kKSkge1xuICAgICAgICBjb25zdCBtZXJnZUVuZCA9IG1lcmdlUGFyZW50Rm9yVmlld3BvcnRFbmQucm93ICsgbWVyZ2VQYXJlbnRGb3JWaWV3cG9ydEVuZC5yb3dzcGFuIC0gMTtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZUluZGV4QXRNZXJnZUVuZCA9IHJvd01hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJvd01hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobWVyZ2VFbmQsIC0xKSk7XG5cbiAgICAgICAgLy8gTWVyZ2UgZW5kIGlzIG91dCBvZiB0aGUgdmlld3BvcnQuXG4gICAgICAgIGlmIChyZW5kZXJhYmxlSW5kZXhBdE1lcmdlRW5kID4gY2FsYy5lbmRSb3cpIHtcbiAgICAgICAgICAvLyBXZSBleHRlbmQgdGhlIHZpZXdwb3J0IHdoZW4gc29tZSByb3dzIGhhdmUgYmVlbiBtZXJnZWQuXG4gICAgICAgICAgY2FsYy5lbmRSb3cgPSByZW5kZXJhYmxlSW5kZXhBdE1lcmdlRW5kO1xuICAgICAgICAgIC8vIFdlIGFyZSBsb29raW5nIGZvciBuZXh0IG1lcmdlcyBpbnNpZGUgYWxyZWFkeSBleHRlbmRlZCB2aWV3cG9ydCAoc3RhcnRpbmcgYWdhaW4gZnJvbSByb3cgZXF1YWwgdG8gMCkuXG4gICAgICAgICAgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChjYWxjLCBuck9mQ29sdW1ucyk7IC8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCB1cHdhcmRzXG5cbiAgICAgICAgICByZXR1cm47IC8vIEZpbmlzaCB0aGUgY3VycmVudCBsb29wLiBFdmVyeXRoaW5nIHdpbGwgYmUgY2hlY2tlZCBmcm9tIHRoZSBiZWdpbm5pbmcgYnkgYWJvdmUgcmVjdXJzaW9uLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGBhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlYCBob29rIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY2FsYyBUaGUgY29sdW1uIGNhbGN1bGF0b3Igb2JqZWN0LlxuICAgKi9cblxuICAvKipcbiAgICogTW9kaWZ5IHZpZXdwb3J0IHN0YXJ0IHdoZW4gbmVlZGVkLiBXZSBleHRlbmQgdmlld3BvcnQgd2hlbiBtZXJnZWQgY2VsbHMgYXJlbid0IGZ1bGx5IHZpc2libGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjYWxjIFRoZSBjb2x1bW4gY2FsY3VsYXRvciBvYmplY3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuck9mUm93cyBOdW1iZXIgb2YgdmlzdWFsIHJvd3MuXG4gICAqL1xuICBtb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGNhbGMsIG5yT2ZSb3dzKSB7XG4gICAgY29uc3QgY29sdW1uTWFwcGVyID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7XG4gICAgY29uc3QgdmlzdWFsU3RhcnRDb2wgPSBjb2x1bW5NYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjYWxjLnN0YXJ0Q29sdW1uKTtcbiAgICBmb3IgKGxldCB2aXN1YWxSb3dJbmRleCA9IDA7IHZpc3VhbFJvd0luZGV4IDwgbnJPZlJvd3M7IHZpc3VhbFJvd0luZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1lcmdlUGFyZW50Rm9yVmlld3BvcnRTdGFydCA9IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh2aXN1YWxSb3dJbmRleCwgdmlzdWFsU3RhcnRDb2wpO1xuICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShtZXJnZVBhcmVudEZvclZpZXdwb3J0U3RhcnQpKSB7XG4gICAgICAgIGNvbnN0IHJlbmRlcmFibGVJbmRleEF0TWVyZ2VTdGFydCA9IGNvbHVtbk1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGNvbHVtbk1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobWVyZ2VQYXJlbnRGb3JWaWV3cG9ydFN0YXJ0LmNvbCwgMSkpO1xuXG4gICAgICAgIC8vIE1lcmdlIHN0YXJ0IGlzIG91dCBvZiB0aGUgdmlld3BvcnQgKGkuZS4gd2hlbiB3ZSBzY3JvbGxlZCB0byB0aGUgcmlnaHQgYW5kIHdlIGNhbiBzZWUganVzdCBwYXJ0IG9mIGEgbWVyZ2UpLlxuICAgICAgICBpZiAocmVuZGVyYWJsZUluZGV4QXRNZXJnZVN0YXJ0IDwgY2FsYy5zdGFydENvbHVtbikge1xuICAgICAgICAgIC8vIFdlIGV4dGVuZCB2aWV3cG9ydCB3aGVuIHNvbWUgY29sdW1ucyBoYXZlIGJlZW4gbWVyZ2VkLlxuICAgICAgICAgIGNhbGMuc3RhcnRDb2x1bW4gPSByZW5kZXJhYmxlSW5kZXhBdE1lcmdlU3RhcnQ7XG4gICAgICAgICAgLy8gV2UgYXJlIGxvb2tpbmcgZm9yIG5leHQgbWVyZ2VzIGluc2lkZSBhbHJlYWR5IGV4dGVuZGVkIHZpZXdwb3J0IChzdGFydGluZyBhZ2FpbiBmcm9tIGNvbHVtbiBlcXVhbCB0byAwKS5cbiAgICAgICAgICB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQoY2FsYywgbnJPZlJvd3MpOyAvLyByZWN1cnNpdmVseSBzZWFyY2ggdXB3YXJkc1xuXG4gICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2ggdGhlIGN1cnJlbnQgbG9vcC4gRXZlcnl0aGluZyB3aWxsIGJlIGNoZWNrZWQgZnJvbSB0aGUgYmVnaW5uaW5nIGJ5IGFib3ZlIHJlY3Vyc2lvbi5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiAgTW9kaWZ5IHZpZXdwb3J0IGVuZCB3aGVuIG5lZWRlZC4gV2UgZXh0ZW5kIHZpZXdwb3J0IHdoZW4gbWVyZ2VkIGNlbGxzIGFyZW4ndCBmdWxseSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gY2FsYyBUaGUgY29sdW1uIGNhbGN1bGF0b3Igb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnJPZlJvd3MgTnVtYmVyIG9mIHZpc3VhbCByb3dzLlxuICAgKi9cbiAgbW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQoY2FsYywgbnJPZlJvd3MpIHtcbiAgICBjb25zdCBjb2x1bW5NYXBwZXIgPSB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtcbiAgICBjb25zdCB2aXN1YWxFbmRDb2wgPSBjb2x1bW5NYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjYWxjLmVuZENvbHVtbik7XG4gICAgZm9yIChsZXQgdmlzdWFsUm93SW5kZXggPSAwOyB2aXN1YWxSb3dJbmRleCA8IG5yT2ZSb3dzOyB2aXN1YWxSb3dJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBtZXJnZVBhcmVudEZvclZpZXdwb3J0RW5kID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHZpc3VhbFJvd0luZGV4LCB2aXN1YWxFbmRDb2wpO1xuICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShtZXJnZVBhcmVudEZvclZpZXdwb3J0RW5kKSkge1xuICAgICAgICBjb25zdCBtZXJnZUVuZCA9IG1lcmdlUGFyZW50Rm9yVmlld3BvcnRFbmQuY29sICsgbWVyZ2VQYXJlbnRGb3JWaWV3cG9ydEVuZC5jb2xzcGFuIC0gMTtcbiAgICAgICAgY29uc3QgcmVuZGVyYWJsZUluZGV4QXRNZXJnZUVuZCA9IGNvbHVtbk1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGNvbHVtbk1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobWVyZ2VFbmQsIC0xKSk7XG5cbiAgICAgICAgLy8gTWVyZ2UgZW5kIGlzIG91dCBvZiB0aGUgdmlld3BvcnQuXG4gICAgICAgIGlmIChyZW5kZXJhYmxlSW5kZXhBdE1lcmdlRW5kID4gY2FsYy5lbmRDb2x1bW4pIHtcbiAgICAgICAgICAvLyBXZSBleHRlbmQgdGhlIHZpZXdwb3J0IHdoZW4gc29tZSBjb2x1bW5zIGhhdmUgYmVlbiBtZXJnZWQuXG4gICAgICAgICAgY2FsYy5lbmRDb2x1bW4gPSByZW5kZXJhYmxlSW5kZXhBdE1lcmdlRW5kO1xuICAgICAgICAgIC8vIFdlIGFyZSBsb29raW5nIGZvciBuZXh0IG1lcmdlcyBpbnNpZGUgYWxyZWFkeSBleHRlbmRlZCB2aWV3cG9ydCAoc3RhcnRpbmcgYWdhaW4gZnJvbSBjb2x1bW4gZXF1YWwgdG8gMCkuXG4gICAgICAgICAgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChjYWxjLCBuck9mUm93cyk7IC8vIHJlY3Vyc2l2ZWx5IHNlYXJjaCB1cHdhcmRzXG5cbiAgICAgICAgICByZXR1cm47IC8vIEZpbmlzaCB0aGUgY3VycmVudCBsb29wLiBFdmVyeXRoaW5nIHdpbGwgYmUgY2hlY2tlZCBmcm9tIHRoZSBiZWdpbm5pbmcgYnkgYWJvdmUgcmVjdXJzaW9uLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgbWVyZ2VkIGNlbGwgY29vcmRpbmF0ZXMgdG8gcmVuZGVyYWJsZSBpbmRleGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50Um93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzcGFuIFJvd3NwYW4gd2hpY2ggZGVzY3JpYmVzIHNoaWZ0IHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byBwYXJlbnQgcm93XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNhbGN1bGF0ZSByZW5kZXJhYmxlIGluZGV4IHdoaWNoIHBvaW50cyB0byB0aGUgbW9zdCBib3R0b21cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggcG9zaXRpb24uIFBhc3Mgcm93c3BhbiBhcyBgMGAgdG8gY2FsY3VsYXRlIHRoZSBtb3N0IHRvcFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhcmVudENvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sc3BhbiBDb2xzcGFuIHdoaWNoIGRlc2NyaWJlcyBzaGlmdCB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gcGFyZW50IGNvbHVtblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB0byBjYWxjdWxhdGUgcmVuZGVyYWJsZSBpbmRleCB3aGljaCBwb2ludHMgdG8gdGhlIG1vc3QgcmlnaHRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggcG9zaXRpb24uIFBhc3MgY29sc3BhbiBhcyBgMGAgdG8gY2FsY3VsYXRlIHRoZSBtb3N0IGxlZnRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggcG9zaXRpb24uXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX1cbiAgICovXG4gIHRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUocGFyZW50Um93LCByb3dzcGFuLCBwYXJlbnRDb2x1bW4sIGNvbHNwYW4pIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dJbmRleE1hcHBlcjogcm93TWFwcGVyLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXI6IGNvbHVtbk1hcHBlclxuICAgIH0gPSB0aGlzLmhvdDtcbiAgICBsZXQgZmlyc3ROb25IaWRkZW5Sb3c7XG4gICAgbGV0IGZpcnN0Tm9uSGlkZGVuQ29sdW1uO1xuICAgIGlmIChyb3dzcGFuID09PSAwKSB7XG4gICAgICBmaXJzdE5vbkhpZGRlblJvdyA9IHJvd01hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocGFyZW50Um93LCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3ROb25IaWRkZW5Sb3cgPSByb3dNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHBhcmVudFJvdyArIHJvd3NwYW4gLSAxLCAtMSk7XG4gICAgfVxuICAgIGlmIChjb2xzcGFuID09PSAwKSB7XG4gICAgICBmaXJzdE5vbkhpZGRlbkNvbHVtbiA9IGNvbHVtbk1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocGFyZW50Q29sdW1uLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3ROb25IaWRkZW5Db2x1bW4gPSBjb2x1bW5NYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHBhcmVudENvbHVtbiArIGNvbHNwYW4gLSAxLCAtMSk7XG4gICAgfVxuICAgIGNvbnN0IHJlbmRlcmFibGVSb3cgPSBwYXJlbnRSb3cgPj0gMCA/IHJvd01hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGZpcnN0Tm9uSGlkZGVuUm93KSA6IHBhcmVudFJvdztcbiAgICBjb25zdCByZW5kZXJhYmxlQ29sdW1uID0gcGFyZW50Q29sdW1uID49IDAgPyBjb2x1bW5NYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmaXJzdE5vbkhpZGRlbkNvbHVtbikgOiBwYXJlbnRDb2x1bW47XG4gICAgcmV0dXJuIFtyZW5kZXJhYmxlUm93LCByZW5kZXJhYmxlQ29sdW1uXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYG1vZGlmeUF1dG9maWxsUmFuZ2VgIGhvb2sgY2FsbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGRyYWcgVGhlIGRyYWcgYXJlYSBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtBcnJheX0gc2VsZWN0IFRoZSBzZWxlY3Rpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBkcmFnIGFyZWEuXG4gICAqL1xufVxuZXhwb3J0cy5NZXJnZUNlbGxzID0gTWVyZ2VDZWxscztcbmZ1bmN0aW9uIF9vbkFmdGVySW5pdCgpIHtcbiAgdGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldKTtcbiAgdGhpcy5ob3QucmVuZGVyKCk7XG59XG5mdW5jdGlvbiBfb25BZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24oaXNNdWx0aXBsZSkge1xuICBpZiAoaXNNdWx0aXBsZSkge1xuICAgIGNvbnN0IG1lcmdlZENlbGxzID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHM7XG4gICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IHRvcFN0YXJ0Q29vcmRzID0gc2VsZWN0aW9uUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCBib3R0b21FbmRDb29yZHMgPSBzZWxlY3Rpb25SYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBmb3IgKGxldCBncm91cCA9IDA7IGdyb3VwIDwgbWVyZ2VkQ2VsbHMubGVuZ3RoOyBncm91cCArPSAxKSB7XG4gICAgICBpZiAodG9wU3RhcnRDb29yZHMucm93ID09PSBtZXJnZWRDZWxsc1tncm91cF0ucm93ICYmIHRvcFN0YXJ0Q29vcmRzLmNvbCA9PT0gbWVyZ2VkQ2VsbHNbZ3JvdXBdLmNvbCAmJiBib3R0b21FbmRDb29yZHMucm93ID09PSBtZXJnZWRDZWxsc1tncm91cF0ucm93ICsgbWVyZ2VkQ2VsbHNbZ3JvdXBdLnJvd3NwYW4gLSAxICYmIGJvdHRvbUVuZENvb3Jkcy5jb2wgPT09IG1lcmdlZENlbGxzW2dyb3VwXS5jb2wgKyBtZXJnZWRDZWxsc1tncm91cF0uY29sc3BhbiAtIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaXNNdWx0aXBsZTtcbn1cbi8qKlxuICogYG1vZGlmeVRyYW5zZm9ybUZvY3VzYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWx0YSBUaGUgdHJhbnNmb3JtYXRpb24gZGVsdGEuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeVRyYW5zZm9ybUZvY3VzKGRlbHRhKSB7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdEZvY3VzRGVsdGEsIHRoaXMpLnJvdyA9IGRlbHRhLnJvdztcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9sYXN0Rm9jdXNEZWx0YSwgdGhpcykuY29sID0gZGVsdGEuY29sO1xufVxuLyoqXG4gKiBgbW9kaWZ5VHJhbnNmb3JtU3RhcnRgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRlbHRhIFRoZSB0cmFuc2Zvcm1hdGlvbiBkZWx0YS5cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5VHJhbnNmb3JtU3RhcnQoZGVsdGEpIHtcbiAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gIGNvbnN0IHtcbiAgICBoaWdobGlnaHRcbiAgfSA9IHNlbGVjdGVkUmFuZ2U7XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5JbmRleE1hcHBlcixcbiAgICByb3dJbmRleE1hcHBlclxuICB9ID0gdGhpcy5ob3Q7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RTZWxlY3RlZEZvY3VzLCB0aGlzKSkge1xuICAgIGlmIChyb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMpLnJvdykgIT09IG51bGwpIHtcbiAgICAgIGhpZ2hsaWdodC5yb3cgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RTZWxlY3RlZEZvY3VzLCB0aGlzKS5yb3c7XG4gICAgfVxuICAgIGlmIChjb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMpLmNvbCkgIT09IG51bGwpIHtcbiAgICAgIGhpZ2hsaWdodC5jb2wgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RTZWxlY3RlZEZvY3VzLCB0aGlzKS5jb2w7XG4gICAgfVxuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMsIG51bGwpO1xuICB9XG4gIGNvbnN0IG1lcmdlZFBhcmVudCA9IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoaWdobGlnaHQucm93LCBoaWdobGlnaHQuY29sKTtcbiAgaWYgKCFtZXJnZWRQYXJlbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmlzdWFsQ29sdW1uSW5kZXhTdGFydCA9IG1lcmdlZFBhcmVudC5jb2w7XG4gIGNvbnN0IHZpc3VhbENvbHVtbkluZGV4RW5kID0gbWVyZ2VkUGFyZW50LmNvbCArIG1lcmdlZFBhcmVudC5jb2xzcGFuIC0gMTtcbiAgaWYgKGRlbHRhLmNvbCA8IDApIHtcbiAgICBjb25zdCBuZXh0Q29sdW1uID0gaGlnaGxpZ2h0LmNvbCA+PSB2aXN1YWxDb2x1bW5JbmRleFN0YXJ0ICYmIGhpZ2hsaWdodC5jb2wgPD0gdmlzdWFsQ29sdW1uSW5kZXhFbmQgPyB2aXN1YWxDb2x1bW5JbmRleFN0YXJ0IC0gMSA6IHZpc3VhbENvbHVtbkluZGV4RW5kO1xuICAgIGNvbnN0IG5vdEhpZGRlbkNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG5leHRDb2x1bW4sIC0xKTtcbiAgICBpZiAobm90SGlkZGVuQ29sdW1uSW5kZXggPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBubyB2aXNpYmxlIGNvbHVtbnMgYW55bW9yZSwgc28gbW92ZSB0aGUgc2VsZWN0aW9uIG91dCBvZiB0aGUgdGFibGUgZWRnZS4gVGhpcyB3aWxsXG4gICAgICAvLyBiZSBwcm9jZXNzZWQgYnkgdGhlIHNlbGVjdGlvbiBUcmFuc2Zvcm1lciBjbGFzcyBhcyBhIG1vdmUgc2VsZWN0aW9uIHRvIHRoZSBwcmV2aW91cyByb3cgKGlmIGF1dG9XcmFwUm93IGlzIGVuYWJsZWQpLlxuICAgICAgZGVsdGEuY29sID0gLXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCwgaGlnaGxpZ2h0LmNvbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhLmNvbCA9IC1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKG5vdEhpZGRlbkNvbHVtbkluZGV4LCBoaWdobGlnaHQuY29sKSAtIDEsIDEpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkZWx0YS5jb2wgPiAwKSB7XG4gICAgY29uc3QgbmV4dENvbHVtbiA9IGhpZ2hsaWdodC5jb2wgPj0gdmlzdWFsQ29sdW1uSW5kZXhTdGFydCAmJiBoaWdobGlnaHQuY29sIDw9IHZpc3VhbENvbHVtbkluZGV4RW5kID8gdmlzdWFsQ29sdW1uSW5kZXhFbmQgKyAxIDogdmlzdWFsQ29sdW1uSW5kZXhTdGFydDtcbiAgICBjb25zdCBub3RIaWRkZW5Db2x1bW5JbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Q29sdW1uLCAxKTtcbiAgICBpZiAobm90SGlkZGVuQ29sdW1uSW5kZXggPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBubyB2aXNpYmxlIGNvbHVtbnMgYW55bW9yZSwgc28gbW92ZSB0aGUgc2VsZWN0aW9uIG91dCBvZiB0aGUgdGFibGUgZWRnZS4gVGhpcyB3aWxsXG4gICAgICAvLyBiZSBwcm9jZXNzZWQgYnkgdGhlIHNlbGVjdGlvbiBUcmFuc2Zvcm1lciBjbGFzcyBhcyBhIG1vdmUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IHJvdyAoaWYgYXV0b1dyYXBSb3cgaXMgZW5hYmxlZCkuXG4gICAgICBkZWx0YS5jb2wgPSB0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGhpZ2hsaWdodC5jb2wsIHRoaXMuaG90LmNvdW50Q29scygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsdGEuY29sID0gTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShoaWdobGlnaHQuY29sLCBub3RIaWRkZW5Db2x1bW5JbmRleCkgLSAxLCAxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsUm93SW5kZXhTdGFydCA9IG1lcmdlZFBhcmVudC5yb3c7XG4gIGNvbnN0IHZpc3VhbFJvd0luZGV4RW5kID0gbWVyZ2VkUGFyZW50LnJvdyArIG1lcmdlZFBhcmVudC5yb3dzcGFuIC0gMTtcbiAgaWYgKGRlbHRhLnJvdyA8IDApIHtcbiAgICBjb25zdCBuZXh0Um93ID0gaGlnaGxpZ2h0LnJvdyA+PSB2aXN1YWxSb3dJbmRleFN0YXJ0ICYmIGhpZ2hsaWdodC5yb3cgPD0gdmlzdWFsUm93SW5kZXhFbmQgPyB2aXN1YWxSb3dJbmRleFN0YXJ0IC0gMSA6IHZpc3VhbFJvd0luZGV4RW5kO1xuICAgIGNvbnN0IG5vdEhpZGRlblJvd0luZGV4ID0gcm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG5leHRSb3csIC0xKTtcbiAgICBpZiAobm90SGlkZGVuUm93SW5kZXggPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBubyB2aXNpYmxlIHJvd3MgYW55bW9yZSwgc28gbW92ZSB0aGUgc2VsZWN0aW9uIG91dCBvZiB0aGUgdGFibGUgZWRnZS4gVGhpcyB3aWxsXG4gICAgICAvLyBiZSBwcm9jZXNzZWQgYnkgdGhlIHNlbGVjdGlvbiBUcmFuc2Zvcm1lciBjbGFzcyBhcyBhIG1vdmUgc2VsZWN0aW9uIHRvIHRoZSBwcmV2aW91cyBjb2x1bW4gKGlmIGF1dG9XcmFwQ29sIGlzIGVuYWJsZWQpLlxuICAgICAgZGVsdGEucm93ID0gLXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCwgaGlnaGxpZ2h0LnJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhLnJvdyA9IC1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKG5vdEhpZGRlblJvd0luZGV4LCBoaWdobGlnaHQucm93KSAtIDEsIDEpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChkZWx0YS5yb3cgPiAwKSB7XG4gICAgY29uc3QgbmV4dFJvdyA9IGhpZ2hsaWdodC5yb3cgPj0gdmlzdWFsUm93SW5kZXhTdGFydCAmJiBoaWdobGlnaHQucm93IDw9IHZpc3VhbFJvd0luZGV4RW5kID8gdmlzdWFsUm93SW5kZXhFbmQgKyAxIDogdmlzdWFsUm93SW5kZXhTdGFydDtcbiAgICBjb25zdCBub3RIaWRkZW5Sb3dJbmRleCA9IHJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Um93LCAxKTtcbiAgICBpZiAobm90SGlkZGVuUm93SW5kZXggPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBubyB2aXNpYmxlIHJvd3MgYW55bW9yZSwgc28gbW92ZSB0aGUgc2VsZWN0aW9uIG91dCBvZiB0aGUgdGFibGUgZWRnZS4gVGhpcyB3aWxsXG4gICAgICAvLyBiZSBwcm9jZXNzZWQgYnkgdGhlIHNlbGVjdGlvbiBUcmFuc2Zvcm1lciBjbGFzcyBhcyBhIG1vdmUgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IGNvbHVtbiAoaWYgYXV0b1dyYXBDb2wgaXMgZW5hYmxlZCkuXG4gICAgICBkZWx0YS5yb3cgPSB0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGhpZ2hsaWdodC5yb3csIHRoaXMuaG90LmNvdW50Um93cygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsdGEucm93ID0gTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShoaWdobGlnaHQucm93LCBub3RIaWRkZW5Sb3dJbmRleCkgLSAxLCAxKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhlIGhvb2sgYWxsb3dzIHRvIG1vZGlmeSB0aGUgZGVsdGEgdHJhbnNmb3JtYXRpb24gb2JqZWN0IG5lY2Vzc2FyeSBmb3IgY29ycmVjdCBzZWxlY3Rpb24gZW5kIHRyYW5zZm9ybWF0aW9ucy5cbiAqIFRoZSBsb2dpYyBoZXJlIGhhbmRsZXMgXCJqdW1waW5nIG92ZXJcIiBtZXJnZWQgbWVyZ2VkIGNlbGxzLCB3aGlsZSBzZWxlY3RpbmcuXG4gKlxuICogQHBhcmFtIHt7IHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciB9fSBkZWx0YSBUaGUgdHJhbnNmb3JtYXRpb24gZGVsdGEuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeVRyYW5zZm9ybUVuZChkZWx0YSkge1xuICBjb25zdCBzZWxlY3RlZFJhbmdlID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgY29uc3QgY2xvbmVSYW5nZSA9IHNlbGVjdGVkUmFuZ2UuY2xvbmUoKTtcbiAgY29uc3Qge1xuICAgIHRvXG4gIH0gPSBzZWxlY3RlZFJhbmdlO1xuICBjb25zdCB7XG4gICAgY29sdW1uSW5kZXhNYXBwZXIsXG4gICAgcm93SW5kZXhNYXBwZXJcbiAgfSA9IHRoaXMuaG90O1xuICBjb25zdCBleHBhbmRDbG9uZVJhbmdlID0gKHJvdywgY29sKSA9PiB7XG4gICAgY2xvbmVSYW5nZS5leHBhbmQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2wpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjbG9uZVJhbmdlLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbaV0uZ2V0UmFuZ2UoKSk7XG4gICAgfVxuICB9O1xuICBpZiAoZGVsdGEuY29sIDwgMCkge1xuICAgIGxldCBuZXh0Q29sdW1uID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgoc2VsZWN0ZWRSYW5nZSwgdG8uY29sKSArIGRlbHRhLmNvbDtcbiAgICBleHBhbmRDbG9uZVJhbmdlKHRvLnJvdywgbmV4dENvbHVtbik7XG4gICAgaWYgKHNlbGVjdGVkUmFuZ2UuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpID09PSAnRS1XJyAmJiBjbG9uZVJhbmdlLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSA9PT0gJ0UtVycpIHtcbiAgICAgIG5leHRDb2x1bW4gPSBjbG9uZVJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sO1xuICAgIH1cbiAgICBjb25zdCBub3RIaWRkZW5Db2x1bW5JbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Q29sdW1uLCAxKTtcbiAgICBpZiAobm90SGlkZGVuQ29sdW1uSW5kZXggIT09IG51bGwpIHtcbiAgICAgIGRlbHRhLmNvbCA9IC1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKG5vdEhpZGRlbkNvbHVtbkluZGV4LCB0by5jb2wpIC0gMSwgMSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRlbHRhLmNvbCA+IDApIHtcbiAgICBsZXQgbmV4dENvbHVtbiA9IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEVuZE1vc3RDb2x1bW5JbmRleChzZWxlY3RlZFJhbmdlLCB0by5jb2wpICsgZGVsdGEuY29sO1xuICAgIGV4cGFuZENsb25lUmFuZ2UodG8ucm93LCBuZXh0Q29sdW1uKTtcbiAgICBpZiAoc2VsZWN0ZWRSYW5nZS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkgPT09ICdXLUUnICYmIGNsb25lUmFuZ2UuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpID09PSAnVy1FJykge1xuICAgICAgbmV4dENvbHVtbiA9IGNsb25lUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sO1xuICAgIH1cbiAgICBjb25zdCBub3RIaWRkZW5Db2x1bW5JbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Q29sdW1uLCAtMSk7XG4gICAgaWYgKG5vdEhpZGRlbkNvbHVtbkluZGV4ICE9PSBudWxsKSB7XG4gICAgICBkZWx0YS5jb2wgPSBNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKHRvLmNvbCwgbm90SGlkZGVuQ29sdW1uSW5kZXgpIC0gMSwgMSk7XG4gICAgfVxuICB9XG4gIGlmIChkZWx0YS5yb3cgPCAwKSB7XG4gICAgbGV0IG5leHRSb3cgPSB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRUb3BNb3N0Um93SW5kZXgoc2VsZWN0ZWRSYW5nZSwgdG8ucm93KSArIGRlbHRhLnJvdztcbiAgICBleHBhbmRDbG9uZVJhbmdlKG5leHRSb3csIHRvLmNvbCk7XG4gICAgaWYgKHNlbGVjdGVkUmFuZ2UuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSA9PT0gJ1MtTicgJiYgY2xvbmVSYW5nZS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpID09PSAnUy1OJykge1xuICAgICAgbmV4dFJvdyA9IGNsb25lUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3c7XG4gICAgfVxuICAgIGNvbnN0IG5vdEhpZGRlblJvd0luZGV4ID0gcm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG5leHRSb3csIDEpO1xuICAgIGlmIChub3RIaWRkZW5Sb3dJbmRleCAhPT0gbnVsbCkge1xuICAgICAgZGVsdGEucm93ID0gLU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2Uobm90SGlkZGVuUm93SW5kZXgsIHRvLnJvdykgLSAxLCAxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGVsdGEucm93ID4gMCkge1xuICAgIGxldCBuZXh0Um93ID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0Qm90dG9tTW9zdFJvd0luZGV4KHNlbGVjdGVkUmFuZ2UsIHRvLnJvdykgKyBkZWx0YS5yb3c7XG4gICAgZXhwYW5kQ2xvbmVSYW5nZShuZXh0Um93LCB0by5jb2wpO1xuICAgIGlmIChzZWxlY3RlZFJhbmdlLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkgPT09ICdOLVMnICYmIGNsb25lUmFuZ2UuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSA9PT0gJ04tUycpIHtcbiAgICAgIG5leHRSb3cgPSBjbG9uZVJhbmdlLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93O1xuICAgIH1cbiAgICBjb25zdCBub3RIaWRkZW5Sb3dJbmRleCA9IHJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Um93LCAtMSk7XG4gICAgaWYgKG5vdEhpZGRlblJvd0luZGV4ICE9PSBudWxsKSB7XG4gICAgICBkZWx0YS5yb3cgPSBNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKHRvLnJvdywgbm90SGlkZGVuUm93SW5kZXgpIC0gMSwgMSk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoZSBob29rIGNvcnJlY3RzIHRoZSByYW5nZSAoYmVmb3JlIGRyYXdpbmcgaXQpIGFmdGVyIHRoZSBzZWxlY3Rpb24gd2FzIG1hZGUgb24gdGhlIG1lcmdlZCBjZWxscy5cbiAqIEl0IGV4cGFuZHMgdGhlIHJhbmdlIHRvIGNvdmVyIHRoZSBlbnRpcmUgYXJlYSBvZiB0aGUgc2VsZWN0ZWQgbWVyZ2VkIGNlbGxzLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQoKSB7XG4gIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBjb25zdCB7XG4gICAgaGlnaGxpZ2h0XG4gIH0gPSBzZWxlY3RlZFJhbmdlO1xuICBpZiAodGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpIHx8IHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMsIGhpZ2hsaWdodC5jbG9uZSgpKTtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHNlbGVjdGVkUmFuZ2UuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tpXS5nZXRSYW5nZSgpLCBmYWxzZSk7XG4gIH1cbiAgLy8gVE9ETzogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIGlzc3VlIHdpdGggdGhlIHNlbGVjdGlvbiBub3QgYmVpbmcgZXh0ZW5kZWQgcHJvcGVybHkuXG4gIC8vIEluIHNvbWUgY2FzZXMgd2hlbiB0aGUgbWVyZ2UgY2VsbHMgYXJlIGRlZmluZWQgaW4gcmFuZG9tIG9yZGVyIHRoZSBzZWxlY3Rpb24gaXMgbm90XG4gIC8vIGV4dGVuZGVkIGluIHRoYXQgd2F5IHRoYXQgaXQgY292ZXJzIGFsbCBvdmVybGFwcGVkIG1lcmdlIGNlbGxzLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgc2VsZWN0ZWRSYW5nZS5leHBhbmRCeVJhbmdlKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW2ldLmdldFJhbmdlKCksIGZhbHNlKTtcbiAgfVxuICBjb25zdCBtZXJnZWRQYXJlbnQgPSB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbCk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMsIGhpZ2hsaWdodC5jbG9uZSgpKTtcbiAgaWYgKG1lcmdlZFBhcmVudCkge1xuICAgIGhpZ2hsaWdodC5hc3NpZ24obWVyZ2VkUGFyZW50KTtcbiAgfVxufVxuLyoqXG4gKiBgbW9kaWZ5R2V0Q2VsbENvb3Jkc2AgaG9vayBjYWxsYmFjay4gU3dhcHMgdGhlIGBnZXRDZWxsYCBjb29yZHMgd2l0aCB0aGUgbWVyZ2VkIHBhcmVudCBjb29yZHMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcmV0dXJucyB7QXJyYXl8dW5kZWZpbmVkfSBWaXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIG1lcmdlLlxuICovXG5mdW5jdGlvbiBfb25Nb2RpZnlHZXRDZWxsQ29vcmRzKHJvdywgY29sdW1uKSB7XG4gIGlmIChyb3cgPCAwIHx8IGNvbHVtbiA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbWVyZ2VQYXJlbnQgPSB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQocm93LCBjb2x1bW4pO1xuICBpZiAoIW1lcmdlUGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICByb3c6IG1lcmdlUm93LFxuICAgIGNvbDogbWVyZ2VDb2x1bW4sXG4gICAgY29sc3BhbixcbiAgICByb3dzcGFuXG4gIH0gPSBtZXJnZVBhcmVudDtcbiAgcmV0dXJuIFtcbiAgLy8gTW9zdCB0b3AtbGVmdCBtZXJnZWQgY2VsbCBjb29yZHMuXG4gIG1lcmdlUm93LCBtZXJnZUNvbHVtbixcbiAgLy8gTW9zdCBib3R0b20tcmlnaHQgbWVyZ2VkIGNlbGwgY29vcmRzLlxuICBtZXJnZVJvdyArIHJvd3NwYW4gLSAxLCBtZXJnZUNvbHVtbiArIGNvbHNwYW4gLSAxXTtcbn1cbi8qKlxuICogYGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uc2AgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVmYXVsdE9wdGlvbnMgVGhlIGRlZmF1bHQgY29udGV4dCBtZW51IG9wdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIF9hZGRNZXJnZUFjdGlvbnNUb0NvbnRleHRNZW51KGRlZmF1bHRPcHRpb25zKSB7XG4gIGRlZmF1bHRPcHRpb25zLml0ZW1zLnB1c2goe1xuICAgIG5hbWU6ICctLS0tLS0tLS0nXG4gIH0sICgwLCBfdG9nZ2xlTWVyZ2UuZGVmYXVsdCkodGhpcykpO1xufVxuLyoqXG4gKiBgYWZ0ZXJSZW5kZXJlcmAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBURCBUaGUgY2VsbCB0byBiZSBtb2RpZmllZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBWaXN1YWwgY29sdW1uIGluZGV4LlxuICovXG5mdW5jdGlvbiBfb25BZnRlclJlbmRlcmVyKFRELCByb3csIGNvbCkge1xuICBjb25zdCBtZXJnZWRDZWxsID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHJvdywgY29sKTtcbiAgLy8gV2Ugc2hvdWxkbid0IG92ZXJyaWRlIGRhdGEgaW4gdGhlIGNvbGxlY3Rpb24uXG4gIGNvbnN0IG1lcmdlZENlbGxDb3B5ID0gKDAsIF9vYmplY3QuaXNPYmplY3QpKG1lcmdlZENlbGwpID8gKDAsIF9vYmplY3QuY2xvbmUpKG1lcmdlZENlbGwpIDogdW5kZWZpbmVkO1xuICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKG1lcmdlZENlbGxDb3B5KSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd0luZGV4TWFwcGVyOiByb3dNYXBwZXIsXG4gICAgICBjb2x1bW5JbmRleE1hcHBlcjogY29sdW1uTWFwcGVyXG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvdzogbWVyZ2VSb3csXG4gICAgICBjb2w6IG1lcmdlQ29sdW1uLFxuICAgICAgY29sc3BhbixcbiAgICAgIHJvd3NwYW5cbiAgICB9ID0gbWVyZ2VkQ2VsbENvcHk7XG4gICAgY29uc3QgW2xhc3RNZXJnZWRSb3dJbmRleCwgbGFzdE1lcmdlZENvbHVtbkluZGV4XSA9IHRoaXMudHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShtZXJnZVJvdywgcm93c3BhbiwgbWVyZ2VDb2x1bW4sIGNvbHNwYW4pO1xuICAgIGNvbnN0IHJlbmRlcmVkUm93SW5kZXggPSByb3dNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyb3cpO1xuICAgIGNvbnN0IHJlbmRlcmVkQ29sdW1uSW5kZXggPSBjb2x1bW5NYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjb2wpO1xuICAgIGNvbnN0IG1heFJvd1NwYW4gPSBsYXN0TWVyZ2VkUm93SW5kZXggLSByZW5kZXJlZFJvd0luZGV4ICsgMTsgLy8gTnVtYmVyIG9mIHJlbmRlcmVkIGNvbHVtbnMuXG4gICAgY29uc3QgbWF4Q29sU3BhbiA9IGxhc3RNZXJnZWRDb2x1bW5JbmRleCAtIHJlbmRlcmVkQ29sdW1uSW5kZXggKyAxOyAvLyBOdW1iZXIgb2YgcmVuZGVyZWQgY29sdW1ucy5cblxuICAgIC8vIFdlIGp1c3QgdHJ5IHRvIGRldGVybWluZSBzb21lIHZhbHVlcyBiYXNpbmcgb24gdGhlIGFjdHVhbCBudW1iZXIgb2YgcmVuZGVyZWQgaW5kZXhlcyAoc29tZSBjb2x1bW5zIG1heSBiZSBoaWRkZW4pLlxuICAgIG1lcmdlZENlbGxDb3B5LnJvdyA9IHJvd01hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobWVyZ2VkQ2VsbENvcHkucm93LCAxKTtcbiAgICAvLyBXZSBqdXN0IHRyeSB0byBkZXRlcm1pbmUgc29tZSB2YWx1ZXMgYmFzaW5nIG9uIHRoZSBhY3R1YWwgbnVtYmVyIG9mIHJlbmRlcmVkIGluZGV4ZXMgKHNvbWUgY29sdW1ucyBtYXkgYmUgaGlkZGVuKS5cbiAgICBtZXJnZWRDZWxsQ29weS5jb2wgPSBjb2x1bW5NYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG1lcmdlZENlbGxDb3B5LmNvbCwgMSk7XG4gICAgLy8gVGhlIGByb3dTcGFuYCBwcm9wZXJ0eSBmb3IgYSBgVERgIGVsZW1lbnQgc2hvdWxkIGJlIGF0IG1vc3QgZXF1YWwgdG8gbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgaW4gdGhlIG1lcmdlIGFyZWEuXG4gICAgbWVyZ2VkQ2VsbENvcHkucm93c3BhbiA9IE1hdGgubWluKG1lcmdlZENlbGxDb3B5LnJvd3NwYW4sIG1heFJvd1NwYW4pO1xuICAgIC8vIFRoZSBgY29sU3BhbmAgcHJvcGVydHkgZm9yIGEgYFREYCBlbGVtZW50IHNob3VsZCBiZSBhdCBtb3N0IGVxdWFsIHRvIG51bWJlciBvZiByZW5kZXJlZCBjb2x1bW5zIGluIHRoZSBtZXJnZSBhcmVhLlxuICAgIG1lcmdlZENlbGxDb3B5LmNvbHNwYW4gPSBNYXRoLm1pbihtZXJnZWRDZWxsQ29weS5jb2xzcGFuLCBtYXhDb2xTcGFuKTtcbiAgfVxuICAoMCwgX3V0aWxzLmFwcGx5U3BhblByb3BlcnRpZXMpKFRELCBtZXJnZWRDZWxsQ29weSwgcm93LCBjb2wpO1xufVxuLyoqXG4gKiBDbGVhcnMgdGhlIGxhc3Qgc2VsZWN0ZWQgY29vcmRpbmF0ZXMgYmVmb3JlIHNldHRpbmcgYSBuZXcgc2VsZWN0aW9uIHJhbmdlLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVTZXRSYW5nZVN0YXJ0KCkge1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2xhc3RTZWxlY3RlZEZvY3VzLCB0aGlzLCBudWxsKTtcbn1cbi8qKlxuICogRGV0ZWN0cyBpZiB0aGUgbGFzdCBzZWxlY3RlZCBjZWxsIHdhcyBhIGhlYWRlciBjZWxsIGlmIHNvIHVwZGF0ZSB0aGUgb3JkZXIgbGlzdCBhY3RpdmUgbm9kZSBmb3IgZnVydGhlclxuICogY29tcHV0YXRpb25zLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCgpIHtcbiAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMpLmlzQ2VsbCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBjb25zdCB2ZXJ0aWNhbERpciA9IHNlbGVjdGVkUmFuZ2UuZ2V0VmVydGljYWxEaXJlY3Rpb24oKTtcbiAgY29uc3QgaG9yaXpvbnRhbERpciA9IHNlbGVjdGVkUmFuZ2UuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpO1xuICBjb25zdCBmb2N1c0Nvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdFNlbGVjdGVkRm9jdXMsIHRoaXMpLmNsb25lKCkubm9ybWFsaXplKCk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZm9jdXNPcmRlciwgdGhpcykuc2V0QWN0aXZlTm9kZShmb2N1c0Nvb3Jkcy5yb3csIGZvY3VzQ29vcmRzLmNvbCk7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RGb2N1c0RlbHRhLCB0aGlzKS5yb3cgPiAwIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdEZvY3VzRGVsdGEsIHRoaXMpLmNvbCA+IDApIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZvY3VzT3JkZXIsIHRoaXMpLnNldFByZXZOb2RlQXNBY3RpdmUoKTtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsRGlyID09PSAnRS1XJyAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RGb2N1c0RlbHRhLCB0aGlzKS5jb2wgPCAwIHx8IHZlcnRpY2FsRGlyID09PSAnUy1OJyAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RGb2N1c0RlbHRhLCB0aGlzKS5yb3cgPCAwKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c09yZGVyLCB0aGlzKS5zZXROZXh0Tm9kZUFzQWN0aXZlKCk7XG4gIH1cbn1cbi8qKlxuICogQ2hhbmdlcyB0aGUgZm9jdXMgc2VsZWN0aW9uIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGNlbGwgb3IgbWVyZ2VkIGNlbGwgcG9zaXRpb24uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyU2VsZWN0aW9uRm9jdXNTZXQocm93LCBjb2x1bW4pIHtcbiAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5JbmRleE1hcHBlcixcbiAgICByb3dJbmRleE1hcHBlclxuICB9ID0gdGhpcy5ob3Q7XG4gIGxldCBub3RIaWRkZW5Sb3dJbmRleCA9IG51bGw7XG4gIGxldCBub3RIaWRkZW5Db2x1bW5JbmRleCA9IG51bGw7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RGb2N1c0RlbHRhLCB0aGlzKS5jb2wgPCAwKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93RW5kLFxuICAgICAgY29sRW5kXG4gICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZm9jdXNPcmRlciwgdGhpcykuZ2V0UHJldkhvcml6b250YWxOb2RlKCk7XG4gICAgbm90SGlkZGVuQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY29sRW5kLCAtMSk7XG4gICAgbm90SGlkZGVuUm93SW5kZXggPSByb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocm93RW5kLCAtMSk7XG4gIH0gZWxzZSBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9sYXN0Rm9jdXNEZWx0YSwgdGhpcykuY29sID4gMCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd1N0YXJ0LFxuICAgICAgY29sU3RhcnRcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c09yZGVyLCB0aGlzKS5nZXROZXh0SG9yaXpvbnRhbE5vZGUoKTtcbiAgICBub3RIaWRkZW5Db2x1bW5JbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjb2xTdGFydCwgMSk7XG4gICAgbm90SGlkZGVuUm93SW5kZXggPSByb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocm93U3RhcnQsIDEpO1xuICB9IGVsc2UgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbGFzdEZvY3VzRGVsdGEsIHRoaXMpLnJvdyA8IDApIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dFbmQsXG4gICAgICBjb2xFbmRcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c09yZGVyLCB0aGlzKS5nZXRQcmV2VmVydGljYWxOb2RlKCk7XG4gICAgbm90SGlkZGVuQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY29sRW5kLCAtMSk7XG4gICAgbm90SGlkZGVuUm93SW5kZXggPSByb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocm93RW5kLCAtMSk7XG4gIH0gZWxzZSBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9sYXN0Rm9jdXNEZWx0YSwgdGhpcykucm93ID4gMCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd1N0YXJ0LFxuICAgICAgY29sU3RhcnRcbiAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c09yZGVyLCB0aGlzKS5nZXROZXh0VmVydGljYWxOb2RlKCk7XG4gICAgbm90SGlkZGVuQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY29sU3RhcnQsIDEpO1xuICAgIG5vdEhpZGRlblJvd0luZGV4ID0gcm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHJvd1N0YXJ0LCAxKTtcbiAgfVxuICBpZiAobm90SGlkZGVuUm93SW5kZXggIT09IG51bGwgfHwgbm90SGlkZGVuQ29sdW1uSW5kZXggIT09IG51bGwpIHtcbiAgICBjb25zdCBjb29yZHMgPSB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhub3RIaWRkZW5Sb3dJbmRleCwgbm90SGlkZGVuQ29sdW1uSW5kZXgpO1xuICAgIGNvbnN0IG1lcmdlUGFyZW50ID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGNvb3Jkcy5yb3csIGNvb3Jkcy5jb2wpO1xuICAgIGNvbnN0IGZvY3VzSGlnaGxpZ2h0ID0gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGb2N1cygpO1xuICAgIHJvdyA9IGNvb3Jkcy5yb3c7XG4gICAgY29sdW1uID0gY29vcmRzLmNvbDtcbiAgICBpZiAobWVyZ2VQYXJlbnQpIHtcbiAgICAgIHNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0LmFzc2lnbih7XG4gICAgICAgIHJvdzogdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG1lcmdlUGFyZW50LnJvdywgMSksXG4gICAgICAgIGNvbDogdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG1lcmdlUGFyZW50LmNvbCwgMSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RlZFJhbmdlLmhpZ2hsaWdodC5hc3NpZ24oY29vcmRzKTtcbiAgICB9XG4gICAgZm9jdXNIaWdobGlnaHQuY2xlYXIoKTtcbiAgICBmb2N1c0hpZ2hsaWdodC5hZGQoY29vcmRzKS5jb21taXQoKTtcbiAgfVxuICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZvY3VzT3JkZXIsIHRoaXMpLnNldEFjdGl2ZU5vZGUocm93LCBjb2x1bW4pO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2xhc3RGb2N1c0RlbHRhLCB0aGlzLCB7XG4gICAgcm93OiAwLFxuICAgIGNvbDogMFxuICB9KTtcbn1cbi8qKlxuICogQ3JlYXRlcyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgY2VsbHMgb3JkZXIgbWF0cml4IChsaW5rZWQgbGlzdHMpIGZvciBmb2N1c2VkIGNlbGwuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyU2VsZWN0aW9uRW5kKCkge1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBpZiAoIXNlbGVjdGlvbi5pc0hlYWRlcigpKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c09yZGVyLCB0aGlzKS5idWlsZEZvY3VzT3JkZXIodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSk7XG4gIH1cbn1cbi8qKlxuICogVGhlIGBhZnRlckdldENlbGxNZXRhYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBDb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIGNlbGwgcHJvcGVydGllcyBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Q2VsbE1ldGEocm93LCBjb2wsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IG1lcmdlUGFyZW50ID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KHJvdywgY29sKTtcbiAgaWYgKG1lcmdlUGFyZW50KSB7XG4gICAgaWYgKG1lcmdlUGFyZW50LnJvdyAhPT0gcm93IHx8IG1lcmdlUGFyZW50LmNvbCAhPT0gY29sKSB7XG4gICAgICBjZWxsUHJvcGVydGllcy5jb3B5YWJsZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjZWxsUHJvcGVydGllcy5yb3dzcGFuID0gbWVyZ2VQYXJlbnQucm93c3BhbjtcbiAgICAgIGNlbGxQcm9wZXJ0aWVzLmNvbHNwYW4gPSBtZXJnZVBhcmVudC5jb2xzcGFuO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZWAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY2FsYyBUaGUgcm93IGNhbGN1bGF0b3Igb2JqZWN0LlxuICovXG5mdW5jdGlvbiBfb25BZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlKGNhbGMpIHtcbiAgY29uc3QgbnJPZkNvbHVtbnMgPSB0aGlzLmhvdC5jb3VudENvbHMoKTtcbiAgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGNhbGMsIG5yT2ZDb2x1bW5zKTtcbiAgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChjYWxjLCBuck9mQ29sdW1ucyk7XG59XG5mdW5jdGlvbiBfb25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKGNhbGMpIHtcbiAgY29uc3QgbnJPZlJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGNhbGMsIG5yT2ZSb3dzKTtcbiAgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChjYWxjLCBuck9mUm93cyk7XG59XG5mdW5jdGlvbiBfb25Nb2RpZnlBdXRvZmlsbFJhbmdlKGRyYWcsIHNlbGVjdCkge1xuICB0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmNvcnJlY3RTZWxlY3Rpb25BcmVhU2l6ZShzZWxlY3QpO1xuICBjb25zdCBkcmFnRGlyZWN0aW9uID0gdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rpb24oc2VsZWN0LCBkcmFnKTtcbiAgbGV0IGRyYWdBcmVhID0gZHJhZztcbiAgaWYgKHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKHNlbGVjdCwgZHJhZ0FyZWEsIGRyYWdEaXJlY3Rpb24pKSB7XG4gICAgZHJhZ0FyZWEgPSBzZWxlY3Q7XG4gICAgcmV0dXJuIGRyYWdBcmVhO1xuICB9XG4gIGNvbnN0IG1lcmdlZENlbGxzV2l0aGluU2VsZWN0aW9uQXJlYSA9IHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKHtcbiAgICBmcm9tOiB7XG4gICAgICByb3c6IHNlbGVjdFswXSxcbiAgICAgIGNvbDogc2VsZWN0WzFdXG4gICAgfSxcbiAgICB0bzoge1xuICAgICAgcm93OiBzZWxlY3RbMl0sXG4gICAgICBjb2w6IHNlbGVjdFszXVxuICAgIH1cbiAgfSk7XG4gIGlmICghbWVyZ2VkQ2VsbHNXaXRoaW5TZWxlY3Rpb25BcmVhKSB7XG4gICAgcmV0dXJuIGRyYWdBcmVhO1xuICB9XG4gIGRyYWdBcmVhID0gdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5zbmFwRHJhZ0FyZWEoc2VsZWN0LCBkcmFnQXJlYSwgZHJhZ0RpcmVjdGlvbiwgbWVyZ2VkQ2VsbHNXaXRoaW5TZWxlY3Rpb25BcmVhKTtcbiAgcmV0dXJuIGRyYWdBcmVhO1xufVxuLyoqXG4gKiBgYWZ0ZXJDcmVhdGVDb2xgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgTnVtYmVyIG9mIGNyZWF0ZWQgY29sdW1ucy5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJDcmVhdGVDb2woY29sdW1uLCBjb3VudCkge1xuICB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCdyaWdodCcsIGNvbHVtbiwgY291bnQpO1xufVxuLyoqXG4gKiBgYWZ0ZXJSZW1vdmVDb2xgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgTnVtYmVyIG9mIHJlbW92ZWQgY29sdW1ucy5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJSZW1vdmVDb2woY29sdW1uLCBjb3VudCkge1xuICB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCdsZWZ0JywgY29sdW1uLCBjb3VudCk7XG59XG4vKipcbiAqIGBhZnRlckNyZWF0ZVJvd2AgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgY3JlYXRlZCByb3dzLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBTb3VyY2Ugb2YgY2hhbmdlLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckNyZWF0ZVJvdyhyb3csIGNvdW50LCBzb3VyY2UpIHtcbiAgaWYgKHNvdXJjZSA9PT0gJ2F1dG8nKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoJ2Rvd24nLCByb3csIGNvdW50KTtcbn1cbi8qKlxuICogYGFmdGVyUmVtb3ZlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50IE51bWJlciBvZiByZW1vdmVkIHJvd3MuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyUmVtb3ZlUm93KHJvdywgY291bnQpIHtcbiAgdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygndXAnLCByb3csIGNvdW50KTtcbn1cbi8qKlxuICogYGFmdGVyQ2hhbmdlYCBob29rIGNhbGxiYWNrLiBVc2VkIHRvIHByb3BhZ2F0ZSBtZXJnZWQgY2VsbHMgYWZ0ZXIgdXNpbmcgQXV0b2ZpbGwuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyBUaGUgY2hhbmdlcyBhcnJheS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgRGV0ZXJtaW5lcyB0aGUgc291cmNlIG9mIHRoZSBjaGFuZ2UuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ2hhbmdlKGNoYW5nZXMsIHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSAnQXV0b2ZpbGwuZmlsbCcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24oY2hhbmdlcyk7XG59XG4vKipcbiAqIGBiZWZvcmVEcmF3QXJlYUJvcmRlcnNgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheX0gY29ybmVycyBWaXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIGFyZWEgY29ybmVycy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWUgQ2xhc3MgbmFtZSBmb3IgdGhlIGFyZWEuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZURyYXdBcmVhQm9yZGVycyhjb3JuZXJzLCBjbGFzc05hbWUpIHtcbiAgaWYgKGNsYXNzTmFtZSAmJiBjbGFzc05hbWUgPT09ICdhcmVhJykge1xuICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IG1lcmdlZENlbGxzV2l0aGluUmFuZ2UgPSB0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShzZWxlY3RlZFJhbmdlKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkobWVyZ2VkQ2VsbHNXaXRoaW5SYW5nZSwgbWVyZ2VkQ2VsbCA9PiB7XG4gICAgICBpZiAoc2VsZWN0ZWRSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3cgPT09IG1lcmdlZENlbGwuZ2V0TGFzdFJvdygpICYmIHNlbGVjdGVkUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sID09PSBtZXJnZWRDZWxsLmdldExhc3RDb2x1bW4oKSkge1xuICAgICAgICBjb3JuZXJzWzJdID0gbWVyZ2VkQ2VsbC5yb3c7XG4gICAgICAgIGNvcm5lcnNbM10gPSBtZXJnZWRDZWxsLmNvbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJEcmF3U2VsZWN0aW9uYCBob29rIGNhbGxiYWNrLiBVc2VkIHRvIGFkZCB0aGUgYWRkaXRpb25hbCBjbGFzcyBuYW1lIGZvciB0aGUgZW50aXJlbHktc2VsZWN0ZWQgbWVyZ2VkIGNlbGxzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50Um93IFZpc3VhbCByb3cgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50Q29sdW1uIFZpc3VhbCBjb2x1bW4gaW5kZXggb2YgdGhlIGN1cnJlbnRseSBjZWxsLlxuICogQHBhcmFtIHtBcnJheX0gY29ybmVyc09mU2VsZWN0aW9uIEFycmF5IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbiBhIGZvcm0gb2YgYFtzdGFydFJvdywgc3RhcnRDb2x1bW4sIGVuZFJvdyxcbiAqICAgZW5kQ29sdW1uXWAuXG4gKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGxheWVyTGV2ZWwgTnVtYmVyIGluZGljYXRpbmcgd2hpY2ggbGF5ZXIgb2Ygc2VsZWN0aW9uIGlzIGN1cnJlbnRseSBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHVuZGVmaW5lZH0gQSBgU3RyaW5nYCwgd2hpY2ggd2lsbCBhY3QgYXMgYW4gYWRkaXRpb25hbCBgY2xhc3NOYW1lYCB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudGx5XG4gKiAgIHByb2Nlc3NlZCBjZWxsLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckRyYXdTZWxlY3Rpb24oY3VycmVudFJvdywgY3VycmVudENvbHVtbiwgY29ybmVyc09mU2VsZWN0aW9uLCBsYXllckxldmVsKSB7XG4gIC8vIE5vdGhpbmcncyBzZWxlY3RlZCAoaG9vayBtaWdodCBiZSB0cmlnZ2VyZWQgYnkgdGhlIGN1c3RvbSBib3JkZXJzKVxuICBpZiAoIWNvcm5lcnNPZlNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGN1cnJlbnRSb3csIGN1cnJlbnRDb2x1bW4sIGNvcm5lcnNPZlNlbGVjdGlvbiwgbGF5ZXJMZXZlbCk7XG59XG4vKipcbiAqIGBiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lc2AgaG9vayBjYWxsYmFjay4gVXNlZCB0byByZW1vdmUgYWRkaXRpb25hbCBjbGFzcyBuYW1lIGZyb20gYWxsIGNlbGxzIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGBBcnJheWAgb2YgYFN0cmluZ2BzLiBFYWNoIG9mIHRoZXNlIHN0cmluZ3Mgd2lsbCBhY3QgbGlrZSBjbGFzcyBuYW1lcyB0byBiZSByZW1vdmVkIGZyb21cbiAqICAgYWxsIHRoZSBjZWxscyBpbiB0aGUgdGFibGUuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzKCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKTtcbn1cbi8qKlxuICogQWxsb3dzIHRvIHByZXZlbnQgb3BlbmluZyB0aGUgZWRpdG9yIHdoaWxlIG1vcmUgdGhhbiBvbmUgbWVyZ2VkIGNlbGwgaXMgc2VsZWN0ZWQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4IG9mIHRoZSBlZGl0ZWQgY2VsbC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleCBvZiB0aGUgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IGluaXRpYWxWYWx1ZSBUaGUgaW5pdGlhbCBlZGl0b3IgdmFsdWUuXG4gKiBAcGFyYW0ge01vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50fSBldmVudCBUaGUgZXZlbnQgd2hpY2ggd2FzIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIHRoZSBlZGl0b3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbiB8IHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQmVnaW5FZGl0aW5nKHJvdywgY29sdW1uLCBpbml0aWFsVmFsdWUsIGV2ZW50KSB7XG4gIGlmICghKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgY29uc3QgbWVyZ2VDZWxsID0gdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0QnlSYW5nZShzZWxlY3Rpb24pO1xuICBpZiAoIW1lcmdlQ2VsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmcm9tID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobWVyZ2VDZWxsLnJvdywgbWVyZ2VDZWxsLmNvbCk7XG4gIGNvbnN0IHRvID0gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobWVyZ2VDZWxsLnJvdyArIG1lcmdlQ2VsbC5yb3dzcGFuIC0gMSwgbWVyZ2VDZWxsLmNvbCArIG1lcmdlQ2VsbC5jb2xzcGFuIC0gMSk7XG4gIHJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uZ2V0TGF5ZXJMZXZlbCgpID09PSAwICYmIHNlbGVjdGlvbi5pc0VxdWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZnJvbSwgZnJvbSwgdG8pKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYXBwbHlTcGFuUHJvcGVydGllcyA9IGFwcGx5U3BhblByb3BlcnRpZXM7XG4vKipcbiAqIEFwcGx5IHRoZSBgY29sc3BhbmAvYHJvd3NwYW5gIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gVEQgVGhlIHNvb24tdG8tYmUtbW9kaWZpZWQgY2VsbC5cbiAqIEBwYXJhbSB7TWVyZ2VkQ2VsbENvb3Jkc30gbWVyZ2VkQ2VsbEluZm8gVGhlIG1lcmdlZCBjZWxsIGluIHF1ZXN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIENvbHVtbiBpbmRleC5cbiAqL1xuZnVuY3Rpb24gYXBwbHlTcGFuUHJvcGVydGllcyhURCwgbWVyZ2VkQ2VsbEluZm8sIHJvdywgY29sKSB7XG4gIGlmIChtZXJnZWRDZWxsSW5mbykge1xuICAgIGlmIChtZXJnZWRDZWxsSW5mby5yb3cgPT09IHJvdyAmJiBtZXJnZWRDZWxsSW5mby5jb2wgPT09IGNvbCkge1xuICAgICAgVEQuc2V0QXR0cmlidXRlKCdyb3dzcGFuJywgbWVyZ2VkQ2VsbEluZm8ucm93c3Bhbi50b1N0cmluZygpKTtcbiAgICAgIFRELnNldEF0dHJpYnV0ZSgnY29sc3BhbicsIG1lcmdlZENlbGxJbmZvLmNvbHNwYW4udG9TdHJpbmcoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFRELnJlbW92ZUF0dHJpYnV0ZSgncm93c3BhbicpO1xuICAgICAgVEQucmVtb3ZlQXR0cmlidXRlKCdjb2xzcGFuJyk7XG4gICAgICBURC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBURC5yZW1vdmVBdHRyaWJ1dGUoJ3Jvd3NwYW4nKTtcbiAgICBURC5yZW1vdmVBdHRyaWJ1dGUoJ2NvbHNwYW4nKTtcbiAgICBURC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0Q2xhc3Nlc1RvQWRkID0gZ2V0Q2xhc3Nlc1RvQWRkO1xuZXhwb3J0cy5nZXRDbGFzc2VzVG9SZW1vdmUgPSBnZXRDbGFzc2VzVG9SZW1vdmU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5jb25zdCBDT0xVTU5fT1JERVJfUFJFRklYID0gJ3NvcnQnO1xuXG4vKipcbiAqIEdldCBDU1MgY2xhc3NlcyB3aGljaCBzaG91bGQgYmUgYWRkZWQgdG8gcGFydGljdWxhciBjb2x1bW4gaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5TdGF0ZXNNYW5hZ2VyIEluc3RhbmNlIG9mIGNvbHVtbiBzdGF0ZSBtYW5hZ2VyLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtib29sZWFufSBzaG93U29ydEluZGljYXRvciBJbmRpY2F0ZXMgaWYgaW5kaWNhdG9yIHNob3VsZCBiZSBzaG93biBmb3IgdGhlIHBhcnRpY3VsYXIgY29sdW1uLlxuICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBDU1MgY2xhc3Nlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RvQWRkKGNvbHVtblN0YXRlc01hbmFnZXIsIGNvbHVtbiwgc2hvd1NvcnRJbmRpY2F0b3IpIHtcbiAgY29uc3QgY3NzQ2xhc3NlcyA9IFtdO1xuICBpZiAoc2hvd1NvcnRJbmRpY2F0b3IgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGNzc0NsYXNzZXM7XG4gIH1cbiAgaWYgKGNvbHVtblN0YXRlc01hbmFnZXIuaXNDb2x1bW5Tb3J0ZWQoY29sdW1uKSAmJiBjb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpID4gMSkge1xuICAgIGNzc0NsYXNzZXMucHVzaChgJHtDT0xVTU5fT1JERVJfUFJFRklYfS0ke2NvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGNvbHVtbikgKyAxfWApO1xuICB9XG4gIHJldHVybiBjc3NDbGFzc2VzO1xufVxuXG4vKipcbiAqIEdldCBDU1MgY2xhc3NlcyB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGNvbHVtbiBoZWFkZXIuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gaHRtbEVsZW1lbnQgQW4gZWxlbWVudCB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiBDU1MgY2xhc3Nlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xhc3Nlc1RvUmVtb3ZlKGh0bWxFbGVtZW50KSB7XG4gIGNvbnN0IGNzc0NsYXNzZXMgPSBodG1sRWxlbWVudC5jbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgY29uc3Qgc29ydFNlcXVlbmNlUmVnRXhwID0gbmV3IFJlZ0V4cChgXiR7Q09MVU1OX09SREVSX1BSRUZJWH0tWzAtOV17MSwyfSRgKTtcbiAgcmV0dXJuIGNzc0NsYXNzZXMuZmlsdGVyKGNzc0NsYXNzID0+IHNvcnRTZXF1ZW5jZVJlZ0V4cC50ZXN0KGNzc0NsYXNzKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX211bHRpQ29sdW1uU29ydGluZyA9IHJlcXVpcmUoXCIuL211bHRpQ29sdW1uU29ydGluZ1wiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF9tdWx0aUNvbHVtblNvcnRpbmcuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX211bHRpQ29sdW1uU29ydGluZy5QTFVHSU5fUFJJT1JJVFk7XG5leHBvcnRzLk11bHRpQ29sdW1uU29ydGluZyA9IF9tdWx0aUNvbHVtblNvcnRpbmcuTXVsdGlDb2x1bW5Tb3J0aW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfY29sdW1uU29ydGluZyA9IHJlcXVpcmUoXCIuLi9jb2x1bW5Tb3J0aW5nXCIpO1xudmFyIF9zb3J0U2VydmljZSA9IHJlcXVpcmUoXCIuLi9jb2x1bW5Tb3J0aW5nL3NvcnRTZXJ2aWNlXCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi9jb2x1bW5Tb3J0aW5nL3V0aWxzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX3Jvb3RDb21wYXJhdG9yID0gcmVxdWlyZShcIi4vcm9vdENvbXBhcmF0b3JcIik7XG52YXIgX3V0aWxzMiA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xudmFyIF9kb21IZWxwZXJzID0gcmVxdWlyZShcIi4vZG9tSGVscGVyc1wiKTtcbnZhciBfc2hvcnRjdXRDb250ZXh0cyA9IHJlcXVpcmUoXCIuLi8uLi9zaG9ydGN1dENvbnRleHRzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ211bHRpQ29sdW1uU29ydGluZyc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDE3MDtcbmNvbnN0IENPTkZMSUNURURfUExVR0lOX0tFWSA9ICdjb2x1bW5Tb3J0aW5nJztcbmNvbnN0IFNIT1JUQ1VUU19HUk9VUCA9IFBMVUdJTl9LRVk7XG4oMCwgX3NvcnRTZXJ2aWNlLnJlZ2lzdGVyUm9vdENvbXBhcmF0b3IpKFBMVUdJTl9LRVksIF9yb290Q29tcGFyYXRvci5yb290Q29tcGFyYXRvcik7XG5cbi8qKlxuICogQHBsdWdpbiBNdWx0aUNvbHVtblNvcnRpbmdcbiAqIEBjbGFzcyBNdWx0aUNvbHVtblNvcnRpbmdcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoaXMgcGx1Z2luIHNvcnRzIHRoZSB2aWV3IGJ5IGNvbHVtbnMgKGJ1dCBkb2VzIG5vdCBzb3J0IHRoZSBkYXRhIHNvdXJjZSEpLiBUbyBlbmFibGUgdGhlIHBsdWdpbiwgc2V0IHRoZVxuICoge0BsaW5rIE9wdGlvbnMjbXVsdGlDb2x1bW5Tb3J0aW5nfSBwcm9wZXJ0eSB0byB0aGUgY29ycmVjdCB2YWx1ZSAoc2VlIHRoZSBleGFtcGxlcyBiZWxvdykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiAvLyBhcyBib29sZWFuXG4gKiBtdWx0aUNvbHVtblNvcnRpbmc6IHRydWVcbiAqXG4gKiAvLyBhcyBhbiBvYmplY3Qgd2l0aCBpbml0aWFsIHNvcnQgY29uZmlnIChzb3J0IGFzY2VuZGluZyBmb3IgY29sdW1uIGF0IGluZGV4IDEgYW5kIHRoZW4gc29ydCBkZXNjZW5kaW5nIGZvciBjb2x1bW4gYXQgaW5kZXggMClcbiAqIG11bHRpQ29sdW1uU29ydGluZzoge1xuICogICBpbml0aWFsQ29uZmlnOiBbe1xuICogICAgIGNvbHVtbjogMSxcbiAqICAgICBzb3J0T3JkZXI6ICdhc2MnXG4gKiAgIH0sIHtcbiAqICAgICBjb2x1bW46IDAsXG4gKiAgICAgc29ydE9yZGVyOiAnZGVzYydcbiAqICAgfV1cbiAqIH1cbiAqXG4gKiAvLyBhcyBhbiBvYmplY3Qgd2hpY2ggZGVmaW5lIHNwZWNpZmljIHNvcnRpbmcgb3B0aW9ucyBmb3IgYWxsIGNvbHVtbnNcbiAqIG11bHRpQ29sdW1uU29ydGluZzoge1xuICogICBzb3J0RW1wdHlDZWxsczogdHJ1ZSwgLy8gdHJ1ZSA9IHRoZSB0YWJsZSBzb3J0cyBlbXB0eSBjZWxscywgZmFsc2UgPSB0aGUgdGFibGUgbW92ZXMgYWxsIGVtcHR5IGNlbGxzIHRvIHRoZSBlbmQgb2YgdGhlIHRhYmxlIChieSBkZWZhdWx0KVxuICogICBpbmRpY2F0b3I6IHRydWUsIC8vIHRydWUgPSBzaG93cyBpbmRpY2F0b3IgZm9yIGFsbCBjb2x1bW5zIChieSBkZWZhdWx0KSwgZmFsc2UgPSBkb24ndCBzaG93IGluZGljYXRvciBmb3IgY29sdW1uc1xuICogICBoZWFkZXJBY3Rpb246IHRydWUsIC8vIHRydWUgPSBhbGxvdyB0byBjbGljayBvbiB0aGUgaGVhZGVycyB0byBzb3J0IChieSBkZWZhdWx0KSwgZmFsc2UgPSB0dXJuIG9mZiBwb3NzaWJpbGl0eSB0byBjbGljayBvbiB0aGUgaGVhZGVycyB0byBzb3J0XG4gKiAgIGNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6IGZ1bmN0aW9uKHNvcnRPcmRlciwgY29sdW1uTWV0YSkge1xuICogICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgbmV4dFZhbHVlKSB7XG4gKiAgICAgICAvLyBTb21lIHZhbHVlIGNvbXBhcmlzb25zIHdoaWNoIHdpbGwgcmV0dXJuIC0xLCAwIG9yIDEuLi5cbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiAvLyBhcyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBgY29sdW1uYCBwcm9wZXJ0eSwgYWxsb3dzIHNwZWNpZnlpbmcgYSBjdXN0b20gb3B0aW9ucyBmb3IgdGhlIGRlc2lyZWQgY29sdW1uLlxuICogLy8gcGxlYXNlIHRha2UgYSBsb29rIGF0IGRvY3VtZW50YXRpb24gb2YgYGNvbHVtbmAgcHJvcGVydHk6IHtAbGluayBPcHRpb25zI2NvbHVtbnN9XG4gKiBjb2x1bW5zOiBbe1xuICogICBtdWx0aUNvbHVtblNvcnRpbmc6IHtcbiAqICAgICBpbmRpY2F0b3I6IGZhbHNlLCAvLyBkaXNhYmxlIGluZGljYXRvciBmb3IgdGhlIGZpcnN0IGNvbHVtbixcbiAqICAgICBzb3J0RW1wdHlDZWxsczogdHJ1ZSxcbiAqICAgICBoZWFkZXJBY3Rpb246IGZhbHNlLCAvLyBjbGlja3Mgb24gdGhlIGZpcnN0IGNvbHVtbiB3b24ndCBzb3J0XG4gKiAgICAgY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTogZnVuY3Rpb24oc29ydE9yZGVyLCBjb2x1bW5NZXRhKSB7XG4gKiAgICAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIG5leHRWYWx1ZSkge1xuICogICAgICAgICByZXR1cm4gMDsgLy8gQ3VzdG9tIGNvbXBhcmUgZnVuY3Rpb24gZm9yIHRoZSBmaXJzdCBjb2x1bW4gKGRvbid0IHNvcnQpXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9XG4gKiB9XVxuICogYGBgXG4gKi9cbmNsYXNzIE11bHRpQ29sdW1uU29ydGluZyBleHRlbmRzIF9jb2x1bW5Tb3J0aW5nLkNvbHVtblNvcnRpbmcge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIE1haW4gc2V0dGluZ3Mga2V5IGRlc2lnbmVkIGZvciB0aGUgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBsdWdpbktleVwiLCBQTFVHSU5fS0VZKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgSGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIE11bHRpQ29sdW1uU29ydGluZyNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiBzdXBlci5pc0VuYWJsZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZWQgJiYgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLnBsdWdpbktleV0gJiYgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDT05GTElDVEVEX1BMVUdJTl9LRVldKSB7XG4gICAgICAoMCwgX3V0aWxzMi53YXJuQWJvdXRQbHVnaW5zQ29uZmxpY3QpKCk7XG4gICAgfVxuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc2FibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBkaXNhYmxlUGx1Z2luKCkge1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbHVtbiBzb3J0aW5nIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICBzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5hZGRTaG9ydGN1dCh7XG4gICAgICBrZXlzOiBbWydTaGlmdCcsICdFbnRlciddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBoaWdobGlnaHRcbiAgICAgICAgfSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICAgIGlmIChoaWdobGlnaHQucm93ID09PSAtMSAmJiBoaWdobGlnaHQuY29sID49IDApIHtcbiAgICAgICAgICB0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhoaWdobGlnaHQuY29sLCBfY29sdW1uU29ydGluZy5BUFBFTkRfQ09MVU1OX0NPTkZJR19TVFJBVEVHWSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IEVudGVyIGJlaGF2aW9yIChtb3ZlIHRvIHRoZSBuZXh0IHJvdyB3aXRoaW4gYSBzZWxlY3Rpb24gcmFuZ2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgICAgdmFyIF90aGlzJGhvdCRnZXRTZWxlY3RlZCwgX3RoaXMkaG90JGdldFNlbGVjdGVkMjtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gKF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkLmhpZ2hsaWdodDtcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodCAmJiAoKF90aGlzJGhvdCRnZXRTZWxlY3RlZDIgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyLmlzU2luZ2xlKCkpICYmIHRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGhpZ2hsaWdodCkgJiYgaGlnaGxpZ2h0LmlzSGVhZGVyKCk7XG4gICAgICB9LFxuICAgICAgcmVsYXRpdmVUb0dyb3VwOiBfc2hvcnRjdXRDb250ZXh0cy5FRElUT1JfRURJVF9HUk9VUCxcbiAgICAgIHBvc2l0aW9uOiAnYmVmb3JlJyxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVyIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgdG9nZ2xpbmcgY29sdW1uIHNvcnRpbmcgZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHVucmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgc3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpO1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFNIT1JUQ1VUU19HUk9VUCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIHRhYmxlIGJ5IGNob3NlbiBjb2x1bW5zIGFuZCBvcmRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7dW5kZWZpbmVkfG9iamVjdHxBcnJheX0gc29ydENvbmZpZyBTaW5nbGUgY29sdW1uIHNvcnQgY29uZmlndXJhdGlvbiBvciBmdWxsIHNvcnQgY29uZmlndXJhdGlvbiAoZm9yIGFsbCBzb3J0ZWQgY29sdW1ucykuXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWlucyBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcy4gRmlyc3Qgb2YgdGhlbSBjb250YWlucyB2aXN1YWwgY29sdW1uIGluZGV4LCB0aGUgc2Vjb25kIG9uZSBjb250YWluc1xuICAgKiBzb3J0IG9yZGVyIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICAgKlxuICAgKiAqKk5vdGUqKjogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGV2ZXJ5IGNhbGwgb2YgYHNvcnRgIGZ1bmN0aW9uIHNldCBhbiBlbnRpcmVseSBuZXcgc29ydCBvcmRlci4gUHJldmlvdXMgc29ydCBjb25maWdzIGFyZW4ndCBwcmVzZXJ2ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIC8vIHNvcnQgYXNjZW5kaW5nIGZpcnN0IHZpc3VhbCBjb2x1bW5cbiAgICogaG90LmdldFBsdWdpbignbXVsdGlDb2x1bW5Tb3J0aW5nJykuc29ydCh7IGNvbHVtbjogMCwgc29ydE9yZGVyOiAnYXNjJyB9KTtcbiAgICpcbiAgICogLy8gc29ydCBmaXJzdCB0d28gdmlzdWFsIGNvbHVtbiBpbiB0aGUgZGVmaW5lZCBzZXF1ZW5jZVxuICAgKiBob3QuZ2V0UGx1Z2luKCdtdWx0aUNvbHVtblNvcnRpbmcnKS5zb3J0KFt7XG4gICAqICAgY29sdW1uOiAxLCBzb3J0T3JkZXI6ICdhc2MnXG4gICAqIH0sIHtcbiAgICogICBjb2x1bW46IDAsIHNvcnRPcmRlcjogJ2Rlc2MnXG4gICAqIH1dKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBmaXJlcyBIb29rcyNiZWZvcmVDb2x1bW5Tb3J0XG4gICAqIEBmaXJlcyBIb29rcyNhZnRlckNvbHVtblNvcnRcbiAgICovXG4gIHNvcnQoc29ydENvbmZpZykge1xuICAgIHN1cGVyLnNvcnQoc29ydENvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIHNvcnQgcGVyZm9ybWVkIG9uIHRoZSB0YWJsZS5cbiAgICovXG4gIGNsZWFyU29ydCgpIHtcbiAgICBzdXBlci5jbGVhclNvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIHRhYmxlIGlzIHNvcnRlZCAoYW55IGNvbHVtbiBoYXZlIHRvIGJlIHNvcnRlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHN1cGVyLmlzU29ydGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvcnQgY29uZmlndXJhdGlvbiBmb3IgcGFydGljdWxhciBjb2x1bW4gb3IgZm9yIGFsbCBzb3J0ZWQgY29sdW1ucy4gT2JqZWN0cyBjb250YWluIGBjb2x1bW5gIGFuZCBgc29ydE9yZGVyYCBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiAqKk5vdGUqKjogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHJldHVybmVkIG9iamVjdHMgZXhwb3NlICoqdmlzdWFsKiogY29sdW1uIGluZGV4IHVuZGVyIHRoZSBgY29sdW1uYCBrZXkuIFRoZXkgYXJlIGhhbmRsZWQgYnkgdGhlIGBzb3J0YCBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHt1bmRlZmluZWR8b2JqZWN0fEFycmF5fVxuICAgKi9cbiAgZ2V0U29ydENvbmZpZyhjb2x1bW4pIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhjb2x1bW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBXYXJuOiBVc2VmdWwgbWFpbmx5IGZvciBwcm92aWRpbmcgc2VydmVyIHNpZGUgc29ydCBpbXBsZW1lbnRhdGlvbiAoc2VlIGluIHRoZSBleGFtcGxlIGJlbG93KS4gSXQgZG9lc24ndCBzb3J0IHRoZSBkYXRhIHNldC4gSXQganVzdCBzZXRzIHNvcnQgY29uZmlndXJhdGlvbiBmb3IgYWxsIHNvcnRlZCBjb2x1bW5zLlxuICAgKiBOb3RlOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhpcyBtZXRob2QgZG9lc24ndCByZS1yZW5kZXIgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBiZWZvcmVDb2x1bW5Tb3J0OiBmdW5jdGlvbihjdXJyZW50U29ydENvbmZpZywgZGVzdGluYXRpb25Tb3J0Q29uZmlncykge1xuICAgKiAgIGNvbnN0IGNvbHVtblNvcnRQbHVnaW4gPSB0aGlzLmdldFBsdWdpbignbXVsdGlDb2x1bW5Tb3J0aW5nJyk7XG4gICAqXG4gICAqICAgY29sdW1uU29ydFBsdWdpbi5zZXRTb3J0Q29uZmlnKGRlc3RpbmF0aW9uU29ydENvbmZpZ3MpO1xuICAgKlxuICAgKiAgIC8vIGNvbnN0IG5ld0RhdGEgPSAuLi4gLy8gQ2FsY3VsYXRlZCBkYXRhIHNldCwgaWUuIGZyb20gYW4gQUpBWCBjYWxsLlxuICAgKlxuICAgKiAgIHRoaXMubG9hZERhdGEobmV3RGF0YSk7IC8vIExvYWQgbmV3IGRhdGEgc2V0IGFuZCByZS1yZW5kZXIgdGhlIHRhYmxlLlxuICAgKlxuICAgKiAgIHJldHVybiBmYWxzZTsgLy8gVGhlIGJsb2NrYWRlIGZvciB0aGUgZGVmYXVsdCBzb3J0IGFjdGlvbi5cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHt1bmRlZmluZWR8b2JqZWN0fEFycmF5fSBzb3J0Q29uZmlnIFNpbmdsZSBjb2x1bW4gc29ydCBjb25maWd1cmF0aW9uIG9yIGZ1bGwgc29ydCBjb25maWd1cmF0aW9uIChmb3IgYWxsIHNvcnRlZCBjb2x1bW5zKS5cbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGNvbnRhaW5zIGBjb2x1bW5gIGFuZCBgc29ydE9yZGVyYCBwcm9wZXJ0aWVzLiBGaXJzdCBvZiB0aGVtIGNvbnRhaW5zIHZpc3VhbCBjb2x1bW4gaW5kZXgsIHRoZSBzZWNvbmQgb25lIGNvbnRhaW5zXG4gICAqIHNvcnQgb3JkZXIgKGBhc2NgIGZvciBhc2NlbmRpbmcsIGBkZXNjYCBmb3IgZGVzY2VuZGluZykuXG4gICAqL1xuICBzZXRTb3J0Q29uZmlnKHNvcnRDb25maWcpIHtcbiAgICBzdXBlci5zZXRTb3J0Q29uZmlnKHNvcnRDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub3JtYWxpemVkIHNvcnQgY29uZmlncy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IFtzb3J0Q29uZmlnPVtdXSBTaW5nbGUgY29sdW1uIHNvcnQgY29uZmlndXJhdGlvbiBvciBmdWxsIHNvcnQgY29uZmlndXJhdGlvbiAoZm9yIGFsbCBzb3J0ZWQgY29sdW1ucykuXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIG9iamVjdCBjb250YWlucyBgY29sdW1uYCBhbmQgYHNvcnRPcmRlcmAgcHJvcGVydGllcy4gRmlyc3Qgb2YgdGhlbSBjb250YWlucyB2aXN1YWwgY29sdW1uIGluZGV4LCB0aGUgc2Vjb25kIG9uZSBjb250YWluc1xuICAgKiBzb3J0IG9yZGVyIChgYXNjYCBmb3IgYXNjZW5kaW5nLCBgZGVzY2AgZm9yIGRlc2NlbmRpbmcpLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBnZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKSB7XG4gICAgbGV0IHNvcnRDb25maWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvcnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gc29ydENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIFtzb3J0Q29uZmlnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgaGVhZGVyIGNsYXNzZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGhlYWRlclNwYW5FbGVtZW50IEhlYWRlciBzcGFuIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7Li4uKn0gYXJncyBFeHRyYSBhcmd1bWVudHMgZm9yIGhlbHBlcnMuXG4gICAqL1xuICB1cGRhdGVIZWFkZXJDbGFzc2VzKGhlYWRlclNwYW5FbGVtZW50KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHN1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMoaGVhZGVyU3BhbkVsZW1lbnQsIC4uLmFyZ3MpO1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoaGVhZGVyU3BhbkVsZW1lbnQsICgwLCBfZG9tSGVscGVycy5nZXRDbGFzc2VzVG9SZW1vdmUpKGhlYWRlclNwYW5FbGVtZW50KSk7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoaGVhZGVyU3BhbkVsZW1lbnQsICgwLCBfZG9tSGVscGVycy5nZXRDbGFzc2VzVG9BZGQpKC4uLmFyZ3MpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogT3ZlcndyaXRpbmcgYmFzZSBwbHVnaW4ncyBgb25VcGRhdGVTZXR0aW5nc2AgbWV0aG9kLiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgYG9uQWZ0ZXJVcGRhdGVTZXR0aW5nc2AgaXNuJ3QgY2FsbGVkXG4gICAqIGZvciBgdXBkYXRlU2V0dGluZ3NgIGluIHNwZWNpZmljIHNpdHVhdGlvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXdTZXR0aW5ncyBOZXcgc2V0dGluZ3Mgb2JqZWN0LlxuICAgKi9cbiAgb25VcGRhdGVTZXR0aW5ncyhuZXdTZXR0aW5ncykge1xuICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSAmJiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NPTkZMSUNURURfUExVR0lOX0tFWV0pIHtcbiAgICAgICgwLCBfdXRpbHMyLndhcm5BYm91dFBsdWdpbnNDb25mbGljdCkoKTtcbiAgICB9XG4gICAgc3VwZXIub25VcGRhdGVTZXR0aW5ncyhuZXdTZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGJhY2sgZm9yIHRoZSBgb25BZnRlck9uQ2VsbE1vdXNlRG93bmAgaG9vay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgRXZlbnQgd2hpY2ggYXJlIHByb3ZpZGVkIGJ5IGhvb2suXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFZpc3VhbCBjb29yZHMgb2YgdGhlIHNlbGVjdGVkIGNlbGwuXG4gICAqL1xuICBvbkFmdGVyT25DZWxsTW91c2VEb3duKGV2ZW50LCBjb29yZHMpIHtcbiAgICBpZiAoKDAsIF91dGlscy53YXNIZWFkZXJDbGlja2VkUHJvcGVybHkpKGNvb3Jkcy5yb3csIGNvb3Jkcy5jb2wsIGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChldmVudCwgY29vcmRzLmNvbCkpIHtcbiAgICAgIGlmICh0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpIHtcbiAgICAgICAgdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk7XG4gICAgICAgIHRoaXMuaG90LnNlbGVjdENvbHVtbnMoY29vcmRzLmNvbCk7XG4gICAgICAgIHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGNvb3Jkcy5jb2wsIF9jb2x1bW5Tb3J0aW5nLkFQUEVORF9DT0xVTU5fQ09ORklHX1NUUkFURUdZKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGNvb3Jkcy5jb2wpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmV4cG9ydHMuTXVsdGlDb2x1bW5Tb3J0aW5nID0gTXVsdGlDb2x1bW5Tb3J0aW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yb290Q29tcGFyYXRvciA9IHJvb3RDb21wYXJhdG9yO1xudmFyIF9zb3J0U2VydmljZSA9IHJlcXVpcmUoXCIuLi9jb2x1bW5Tb3J0aW5nL3NvcnRTZXJ2aWNlXCIpO1xuLyoqXG4gKiBTb3J0IGNvbXBhcmF0b3IgaGFuZGxlZCBieSBjb252ZW50aW9uYWwgc29ydCBhbGdvcml0aG0uXG4gKlxuICogQHBhcmFtIHtBcnJheX0gc29ydGluZ09yZGVycyBTb3J0IG9yZGVycyAoYGFzY2AgZm9yIGFzY2VuZGluZywgYGRlc2NgIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7QXJyYXl9IGNvbHVtbk1ldGFzIENvbHVtbiBtZXRhIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHJvb3RDb21wYXJhdG9yKHNvcnRpbmdPcmRlcnMsIGNvbHVtbk1ldGFzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocm93SW5kZXhXaXRoVmFsdWVzLCBuZXh0Um93SW5kZXhXaXRoVmFsdWVzKSB7XG4gICAgLy8gV2Ugc29ydCBhcnJheSBvZiBhcnJheXMuIFNpbmdsZSBhcnJheSBpcyBpbiBmb3JtIFtyb3dJbmRleCwgLi4udmFsdWVzXS5cbiAgICAvLyBXZSBjb21wYXJlIGp1c3QgdmFsdWVzLCBzdG9yZWQgYXQgc2Vjb25kIGluZGV4IG9mIGFycmF5LlxuICAgIGNvbnN0IFssIC4uLnZhbHVlc10gPSByb3dJbmRleFdpdGhWYWx1ZXM7XG4gICAgY29uc3QgWywgLi4ubmV4dFZhbHVlc10gPSBuZXh0Um93SW5kZXhXaXRoVmFsdWVzO1xuICAgIHJldHVybiBmdW5jdGlvbiBnZXRDb21wYXJlUmVzdWx0KGNvbHVtbikge1xuICAgICAgY29uc3Qgc29ydGluZ09yZGVyID0gc29ydGluZ09yZGVyc1tjb2x1bW5dO1xuICAgICAgY29uc3QgY29sdW1uTWV0YSA9IGNvbHVtbk1ldGFzW2NvbHVtbl07XG4gICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tjb2x1bW5dO1xuICAgICAgY29uc3QgbmV4dFZhbHVlID0gbmV4dFZhbHVlc1tjb2x1bW5dO1xuICAgICAgY29uc3QgcGx1Z2luU2V0dGluZ3MgPSBjb2x1bW5NZXRhLm11bHRpQ29sdW1uU29ydGluZztcbiAgICAgIGNvbnN0IGNvbXBhcmVGdW5jdGlvbkZhY3RvcnkgPSBwbHVnaW5TZXR0aW5ncy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5ID8gcGx1Z2luU2V0dGluZ3MuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSA6ICgwLCBfc29ydFNlcnZpY2UuZ2V0Q29tcGFyZUZ1bmN0aW9uRmFjdG9yeSkoY29sdW1uTWV0YS50eXBlKTtcbiAgICAgIGNvbnN0IGNvbXBhcmVSZXN1bHQgPSBjb21wYXJlRnVuY3Rpb25GYWN0b3J5KHNvcnRpbmdPcmRlciwgY29sdW1uTWV0YSwgcGx1Z2luU2V0dGluZ3MpKHZhbHVlLCBuZXh0VmFsdWUpO1xuICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT09IF9zb3J0U2VydmljZS5ET19OT1RfU1dBUCkge1xuICAgICAgICBjb25zdCBuZXh0U29ydGVkQ29sdW1uID0gY29sdW1uICsgMTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW5NZXRhc1tuZXh0U29ydGVkQ29sdW1uXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Q29tcGFyZVJlc3VsdChuZXh0U29ydGVkQ29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbXBhcmVSZXN1bHQ7XG4gICAgfSgwKTtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMud2FybkFib3V0UGx1Z2luc0NvbmZsaWN0ID0gd2FybkFib3V0UGx1Z2luc0NvbmZsaWN0O1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xuLyoqXG4gKiBXYXJuIHVzZXJzIGFib3V0IHByb2JsZW1zIHdoZW4gdXNpbmcgYGNvbHVtblNvcnRpbmdgIGFuZCBgbXVsdGlDb2x1bW5Tb3J0aW5nYCBwbHVnaW5zIHNpbXVsdGFuZW91c2x5LlxuICovXG5mdW5jdGlvbiB3YXJuQWJvdXRQbHVnaW5zQ29uZmxpY3QoKSB7XG4gICgwLCBfY29uc29sZS53YXJuKSgoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFBsdWdpbnMgXFxgY29sdW1uU29ydGluZ1xcYCBhbmQgXFxgbXVsdGlDb2x1bW5Tb3J0aW5nXFxgIHNob3VsZCBub3QgYmUgZW5hYmxlZCBzaW11bHRhbmVvdXNseS4gXG4gICAgT25seSBcXGBtdWx0aUNvbHVtblNvcnRpbmdcXGAgd2lsbCB3b3JrLmApO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMgPSByZXF1aXJlKFwiLi9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfbXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzLlBMVUdJTl9LRVk7XG5leHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IF9tdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5NdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMgPSBfbXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzLk11bHRpcGxlU2VsZWN0aW9uSGFuZGxlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Jyb3dzZXJcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICdtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAxNjA7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwbHVnaW4gTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzXG4gKiBAY2xhc3MgTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzXG4gKi9cbmNsYXNzIE11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkcmFnZ2VkXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJsYXN0U2V0Q2VsbFwiLCBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkIGluIHRoZSBoYW5kc29udGFibGUgc2V0dGluZ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAoMCwgX2Jyb3dzZXIuaXNNb2JpbGVCcm93c2VyKSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBwbHVnaW4gZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJpbmQgdGhlIHRvdWNoIGV2ZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlZ2lzdGVyTGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IF90aGlzID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICByb290RWxlbWVudFxuICAgIH0gPSB0aGlzLmhvdDtcblxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5IFF1ZXJ5IGZvciB0aGUgcG9zaXRpb24uXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVtb3ZlRnJvbURyYWdnZWQocXVlcnkpIHtcbiAgICAgIGlmIChfdGhpcy5kcmFnZ2VkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBjbGVhciBhcnJheVxuICAgICAgICBfdGhpcy5kcmFnZ2VkLnNwbGljZSgwLCBfdGhpcy5kcmFnZ2VkLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgZW50cnlQb3NpdGlvbiA9IF90aGlzLmRyYWdnZWQuaW5kZXhPZihxdWVyeSk7XG4gICAgICBpZiAoZW50cnlQb3NpdGlvbiA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChlbnRyeVBvc2l0aW9uID09PSAwKSB7XG4gICAgICAgIF90aGlzLmRyYWdnZWQgPSBfdGhpcy5kcmFnZ2VkLnNsaWNlKDAsIDEpO1xuICAgICAgfSBlbHNlIGlmIChlbnRyeVBvc2l0aW9uID09PSAxKSB7XG4gICAgICAgIF90aGlzLmRyYWdnZWQgPSBfdGhpcy5kcmFnZ2VkLnNsaWNlKC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBldmVudCA9PiB7XG4gICAgICBsZXQgc2VsZWN0ZWRSYW5nZTtcbiAgICAgIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGV2ZW50LnRhcmdldCwgJ3RvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhJykpIHtcbiAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IF90aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgICBfdGhpcy5kcmFnZ2VkLnB1c2goJ3RvcCcpO1xuICAgICAgICBfdGhpcy50b3VjaFN0YXJ0UmFuZ2UgPSB7XG4gICAgICAgICAgd2lkdGg6IHNlbGVjdGVkUmFuZ2UuZ2V0V2lkdGgoKSxcbiAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkUmFuZ2UuZ2V0SGVpZ2h0KCksXG4gICAgICAgICAgZGlyZWN0aW9uOiBzZWxlY3RlZFJhbmdlLmdldERpcmVjdGlvbigpXG4gICAgICAgIH07XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsICdib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYScpKSB7XG4gICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBfdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgICAgX3RoaXMuZHJhZ2dlZC5wdXNoKCdib3R0b20nKTtcbiAgICAgICAgX3RoaXMudG91Y2hTdGFydFJhbmdlID0ge1xuICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFJhbmdlLmdldFdpZHRoKCksXG4gICAgICAgICAgaGVpZ2h0OiBzZWxlY3RlZFJhbmdlLmdldEhlaWdodCgpLFxuICAgICAgICAgIGRpcmVjdGlvbjogc2VsZWN0ZWRSYW5nZS5nZXREaXJlY3Rpb24oKVxuICAgICAgICB9O1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ3RvdWNoZW5kJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykoZXZlbnQudGFyZ2V0LCAndG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEnKSkge1xuICAgICAgICByZW1vdmVGcm9tRHJhZ2dlZC5jYWxsKF90aGlzLCAndG9wJyk7XG4gICAgICAgIF90aGlzLnRvdWNoU3RhcnRSYW5nZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGV2ZW50LnRhcmdldCwgJ2JvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhJykpIHtcbiAgICAgICAgcmVtb3ZlRnJvbURyYWdnZWQuY2FsbChfdGhpcywgJ2JvdHRvbScpO1xuICAgICAgICBfdGhpcy50b3VjaFN0YXJ0UmFuZ2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RFbGVtZW50LCAndG91Y2htb3ZlJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICByb290RG9jdW1lbnRcbiAgICAgIH0gPSB0aGlzLmhvdDtcbiAgICAgIGxldCB0YXJnZXRDb29yZHM7XG4gICAgICBsZXQgc2VsZWN0ZWRSYW5nZTtcbiAgICAgIGxldCByYW5nZVdpZHRoO1xuICAgICAgbGV0IHJhbmdlSGVpZ2h0O1xuICAgICAgbGV0IHJhbmdlRGlyZWN0aW9uO1xuICAgICAgbGV0IG5ld1JhbmdlQ29vcmRzO1xuICAgICAgaWYgKF90aGlzLmRyYWdnZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuZFRhcmdldCA9IHJvb3REb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCwgZXZlbnQudG91Y2hlc1swXS5jbGllbnRZKTtcbiAgICAgIGlmICghZW5kVGFyZ2V0IHx8IGVuZFRhcmdldCA9PT0gX3RoaXMubGFzdFNldENlbGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGVuZFRhcmdldC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbmRUYXJnZXQubm9kZU5hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgdGFyZ2V0Q29vcmRzID0gX3RoaXMuaG90LmdldENvb3JkcyhlbmRUYXJnZXQpO1xuICAgICAgICBpZiAodGFyZ2V0Q29vcmRzLmNvbCA9PT0gLTEpIHtcbiAgICAgICAgICB0YXJnZXRDb29yZHMuY29sID0gMDtcbiAgICAgICAgfVxuICAgICAgICBzZWxlY3RlZFJhbmdlID0gX3RoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgICAgIHJhbmdlV2lkdGggPSBzZWxlY3RlZFJhbmdlLmdldFdpZHRoKCk7XG4gICAgICAgIHJhbmdlSGVpZ2h0ID0gc2VsZWN0ZWRSYW5nZS5nZXRIZWlnaHQoKTtcbiAgICAgICAgcmFuZ2VEaXJlY3Rpb24gPSBzZWxlY3RlZFJhbmdlLmdldERpcmVjdGlvbigpO1xuICAgICAgICBpZiAocmFuZ2VXaWR0aCA9PT0gMSAmJiByYW5nZUhlaWdodCA9PT0gMSkge1xuICAgICAgICAgIF90aGlzLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQodGFyZ2V0Q29vcmRzKTtcbiAgICAgICAgfVxuICAgICAgICBuZXdSYW5nZUNvb3JkcyA9IF90aGlzLmdldEN1cnJlbnRSYW5nZUNvb3JkcyhzZWxlY3RlZFJhbmdlLCB0YXJnZXRDb29yZHMsIF90aGlzLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sIHJhbmdlRGlyZWN0aW9uLCBfdGhpcy5kcmFnZ2VkWzBdKTtcbiAgICAgICAgaWYgKG5ld1JhbmdlQ29vcmRzLnN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgX3RoaXMuaG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KG5ld1JhbmdlQ29vcmRzLnN0YXJ0KTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKG5ld1JhbmdlQ29vcmRzLmVuZCk7XG4gICAgICAgIF90aGlzLmxhc3RTZXRDZWxsID0gZW5kVGFyZ2V0O1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9KTtcbiAgfVxuICBnZXRDdXJyZW50UmFuZ2VDb29yZHMoc2VsZWN0ZWRSYW5nZSwgY3VycmVudFRvdWNoLCB0b3VjaFN0YXJ0RGlyZWN0aW9uLCBjdXJyZW50RGlyZWN0aW9uLCBkcmFnZ2VkSGFuZGxlKSB7XG4gICAgY29uc3QgdG9wU3RhcnRDb3JuZXIgPSBzZWxlY3RlZFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCk7XG4gICAgY29uc3QgYm90dG9tRW5kQ29ybmVyID0gc2VsZWN0ZWRSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICBjb25zdCBib3R0b21TdGFydENvcm5lciA9IHNlbGVjdGVkUmFuZ2UuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCB0b3BFbmRDb3JuZXIgPSBzZWxlY3RlZFJhbmdlLmdldFRvcEVuZENvcm5lcigpO1xuICAgIGxldCBuZXdDb29yZHMgPSB7XG4gICAgICBzdGFydDogbnVsbCxcbiAgICAgIGVuZDogbnVsbFxuICAgIH07XG4gICAgc3dpdGNoICh0b3VjaFN0YXJ0RGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdORS1TVyc6XG4gICAgICAgIHN3aXRjaCAoY3VycmVudERpcmVjdGlvbikge1xuICAgICAgICAgIGNhc2UgJ05FLVNXJzpcbiAgICAgICAgICBjYXNlICdOVy1TRSc6XG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEhhbmRsZSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjdXJyZW50VG91Y2gucm93LCBzZWxlY3RlZFJhbmdlLmhpZ2hsaWdodC5jb2wpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYm90dG9tU3RhcnRDb3JuZXIucm93LCBjdXJyZW50VG91Y2guY29sKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhzZWxlY3RlZFJhbmdlLmhpZ2hsaWdodC5yb3csIGN1cnJlbnRUb3VjaC5jb2wpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY3VycmVudFRvdWNoLnJvdywgdG9wU3RhcnRDb3JuZXIuY29sKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnU0UtTlcnOlxuICAgICAgICAgICAgaWYgKGRyYWdnZWRIYW5kbGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3JkcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYm90dG9tRW5kQ29ybmVyLnJvdywgY3VycmVudFRvdWNoLmNvbCksXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjdXJyZW50VG91Y2gucm93LCB0b3BTdGFydENvcm5lci5jb2wpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdOVy1TRSc6XG4gICAgICAgIHN3aXRjaCAoY3VycmVudERpcmVjdGlvbikge1xuICAgICAgICAgIGNhc2UgJ05FLVNXJzpcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkSGFuZGxlID09PSAndG9wJykge1xuICAgICAgICAgICAgICBuZXdDb29yZHMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IGN1cnJlbnRUb3VjaCxcbiAgICAgICAgICAgICAgICBlbmQ6IGJvdHRvbVN0YXJ0Q29ybmVyXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdDb29yZHMuZW5kID0gY3VycmVudFRvdWNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTlctU0UnOlxuICAgICAgICAgICAgaWYgKGRyYWdnZWRIYW5kbGUgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3JkcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogY3VycmVudFRvdWNoLFxuICAgICAgICAgICAgICAgIGVuZDogYm90dG9tRW5kQ29ybmVyXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdDb29yZHMuZW5kID0gY3VycmVudFRvdWNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnU0UtTlcnOlxuICAgICAgICAgICAgaWYgKGRyYWdnZWRIYW5kbGUgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3JkcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogY3VycmVudFRvdWNoLFxuICAgICAgICAgICAgICAgIGVuZDogdG9wU3RhcnRDb3JuZXJcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3Jkcy5lbmQgPSBjdXJyZW50VG91Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdTVy1ORSc6XG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEhhbmRsZSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBjdXJyZW50VG91Y2gsXG4gICAgICAgICAgICAgICAgZW5kOiB0b3BFbmRDb3JuZXJcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3Jkcy5lbmQgPSBjdXJyZW50VG91Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdTVy1ORSc6XG4gICAgICAgIHN3aXRjaCAoY3VycmVudERpcmVjdGlvbikge1xuICAgICAgICAgIGNhc2UgJ05XLVNFJzpcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkSGFuZGxlID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICBuZXdDb29yZHMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGN1cnJlbnRUb3VjaC5yb3csIHRvcFN0YXJ0Q29ybmVyLmNvbCksXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhib3R0b21TdGFydENvcm5lci5yb3csIGN1cnJlbnRUb3VjaC5jb2wpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBuZXdDb29yZHMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHRvcFN0YXJ0Q29ybmVyLnJvdywgY3VycmVudFRvdWNoLmNvbCksXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjdXJyZW50VG91Y2gucm93LCBib3R0b21FbmRDb3JuZXIuY29sKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gY2FzZSAnTkUtU1cnOlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1NXLU5FJzpcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkSGFuZGxlID09PSAndG9wJykge1xuICAgICAgICAgICAgICBuZXdDb29yZHMgPSB7XG4gICAgICAgICAgICAgICAgc3RhcnQ6IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0LnJvdywgY3VycmVudFRvdWNoLmNvbCksXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjdXJyZW50VG91Y2gucm93LCBib3R0b21FbmRDb3JuZXIuY29sKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjdXJyZW50VG91Y2gucm93LCB0b3BTdGFydENvcm5lci5jb2wpLFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModG9wU3RhcnRDb3JuZXIucm93LCBjdXJyZW50VG91Y2guY29sKVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnU0UtTlcnOlxuICAgICAgICAgICAgaWYgKGRyYWdnZWRIYW5kbGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3JkcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY3VycmVudFRvdWNoLnJvdywgdG9wRW5kQ29ybmVyLmNvbCksXG4gICAgICAgICAgICAgICAgZW5kOiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0b3BTdGFydENvcm5lci5yb3csIGN1cnJlbnRUb3VjaC5jb2wpXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRIYW5kbGUgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgIG5ld0Nvb3JkcyA9IHtcbiAgICAgICAgICAgICAgICBzdGFydDogYm90dG9tU3RhcnRDb3JuZXIsXG4gICAgICAgICAgICAgICAgZW5kOiBjdXJyZW50VG91Y2hcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NFLU5XJzpcbiAgICAgICAgc3dpdGNoIChjdXJyZW50RGlyZWN0aW9uKSB7XG4gICAgICAgICAgY2FzZSAnTlctU0UnOlxuICAgICAgICAgIGNhc2UgJ05FLVNXJzpcbiAgICAgICAgICBjYXNlICdTVy1ORSc6XG4gICAgICAgICAgICBpZiAoZHJhZ2dlZEhhbmRsZSA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzLmVuZCA9IGN1cnJlbnRUb3VjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1NFLU5XJzpcbiAgICAgICAgICAgIGlmIChkcmFnZ2VkSGFuZGxlID09PSAndG9wJykge1xuICAgICAgICAgICAgICBuZXdDb29yZHMuZW5kID0gY3VycmVudFRvdWNoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Q29vcmRzID0ge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiBjdXJyZW50VG91Y2gsXG4gICAgICAgICAgICAgICAgZW5kOiB0b3BTdGFydENvcm5lclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBuZXdDb29yZHM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBpcyBjdXJyZW50bHkgZHJhZ2dpbmcgdGhlIGhhbmRsZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IERyYWdnaW5nIHN0YXRlLlxuICAgKi9cbiAgaXNEcmFnZ2VkKCkge1xuICAgIHJldHVybiB0aGlzLmRyYWdnZWQubGVuZ3RoID4gMDtcbiAgfVxufVxuZXhwb3J0cy5NdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMgPSBNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX25lc3RlZEhlYWRlcnMgPSByZXF1aXJlKFwiLi9uZXN0ZWRIZWFkZXJzXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX25lc3RlZEhlYWRlcnMuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX25lc3RlZEhlYWRlcnMuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5OZXN0ZWRIZWFkZXJzID0gX25lc3RlZEhlYWRlcnMuTmVzdGVkSGVhZGVyczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy90ZW1wbGF0ZUxpdGVyYWxUYWdcIik7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfc2VsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3NlbGVjdGlvblwiKTtcbnZhciBfYmFzZSA9IHJlcXVpcmUoXCIuLi9iYXNlXCIpO1xudmFyIF9zdGF0ZU1hbmFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdGF0ZU1hbmFnZXJcIikpO1xudmFyIF9naG9zdFRhYmxlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91dGlscy9naG9zdFRhYmxlXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAnbmVzdGVkSGVhZGVycyc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDI4MDtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEBwbHVnaW4gTmVzdGVkSGVhZGVyc1xuICogQGNsYXNzIE5lc3RlZEhlYWRlcnNcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFRoZSBwbHVnaW4gYWxsb3dzIHRvIGNyZWF0ZSBhIG5lc3RlZCBoZWFkZXIgc3RydWN0dXJlLCB1c2luZyB0aGUgSFRNTCdzIGNvbHNwYW4gYXR0cmlidXRlLlxuICpcbiAqIFRvIG1ha2UgYW55IGhlYWRlciB3aWRlciAoY292ZXJpbmcgbXVsdGlwbGUgdGFibGUgY29sdW1ucyksIGl0J3MgY29ycmVzcG9uZGluZyBjb25maWd1cmF0aW9uIGFycmF5IGVsZW1lbnQgc2hvdWxkIGJlXG4gKiBwcm92aWRlZCBhcyBhbiBvYmplY3Qgd2l0aCBgbGFiZWxgIGFuZCBgY29sc3BhbmAgcHJvcGVydGllcy4gVGhlIGBsYWJlbGAgcHJvcGVydHkgZGVmaW5lcyB0aGUgaGVhZGVyJ3MgbGFiZWwsXG4gKiB3aGlsZSB0aGUgYGNvbHNwYW5gIHByb3BlcnR5IGRlZmluZXMgYSBudW1iZXIgb2YgY29sdW1ucyB0aGF0IHRoZSBoZWFkZXIgc2hvdWxkIGNvdmVyLlxuICpcbiAqIF9fTm90ZV9fIHRoYXQgdGhlIHBsdWdpbiBzdXBwb3J0cyBhICpuZXN0ZWQqIHN0cnVjdHVyZSwgd2hpY2ggbWVhbnMsIGFueSBoZWFkZXIgY2Fubm90IGJlIHdpZGVyIHRoYW4gaXQncyBcInBhcmVudFwiLiBJblxuICogb3RoZXIgd29yZHMsIGhlYWRlcnMgY2Fubm90IG92ZXJsYXAgZWFjaCBvdGhlci5cbiAqIEBleGFtcGxlXG4gKlxuICogOjo6IG9ubHktZm9yIGphdmFzY3JpcHRcbiAqIGBgYGpzXG4gKiBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZXhhbXBsZScpO1xuICogY29uc3QgaG90ID0gbmV3IEhhbmRzb250YWJsZShjb250YWluZXIsIHtcbiAqICAgZGF0YTogZ2V0RGF0YSgpLFxuICogICBuZXN0ZWRIZWFkZXJzOiBbXG4gKiAgICAgWydBJywge2xhYmVsOiAnQicsIGNvbHNwYW46IDh9LCAnQyddLFxuICogICAgIFsnRCcsIHtsYWJlbDogJ0UnLCBjb2xzcGFuOiA0fSwge2xhYmVsOiAnRicsIGNvbHNwYW46IDR9LCAnRyddLFxuICogICAgIFsnSCcsIHtsYWJlbDogJ0knLCBjb2xzcGFuOiAyfSwge2xhYmVsOiAnSicsIGNvbHNwYW46IDJ9LCB7bGFiZWw6ICdLJywgY29sc3BhbjogMn0sIHtsYWJlbDogJ0wnLCBjb2xzcGFuOiAyfSwgJ00nXSxcbiAqICAgICBbJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnXVxuICogIF0sXG4gKiBgYGBcbiAqIDo6OlxuICpcbiAqIDo6OiBvbmx5LWZvciByZWFjdFxuICogYGBganN4XG4gKiA8SG90VGFibGVcbiAqICAgZGF0YT17Z2V0RGF0YSgpfVxuICogICBuZXN0ZWRIZWFkZXJzPXtbXG4gKiAgICAgWydBJywge2xhYmVsOiAnQicsIGNvbHNwYW46IDh9LCAnQyddLFxuICogICAgIFsnRCcsIHtsYWJlbDogJ0UnLCBjb2xzcGFuOiA0fSwge2xhYmVsOiAnRicsIGNvbHNwYW46IDR9LCAnRyddLFxuICogICAgIFsnSCcsIHtsYWJlbDogJ0knLCBjb2xzcGFuOiAyfSwge2xhYmVsOiAnSicsIGNvbHNwYW46IDJ9LCB7bGFiZWw6ICdLJywgY29sc3BhbjogMn0sIHtsYWJlbDogJ0wnLCBjb2xzcGFuOiAyfSwgJ00nXSxcbiAqICAgICBbJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnXVxuICogIF19XG4gKiAvPlxuICogYGBgXG4gKiA6OjpcbiAqL1xudmFyIF9zdGF0ZU1hbmFnZXIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9mb2N1c0luaXRpYWxDb29yZHMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXNDb2x1bW5zU2VsZWN0aW9uSW5Qcm9ncmVzcyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9OZXN0ZWRIZWFkZXJzX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBOZXN0ZWRIZWFkZXJzIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc2VsZWN0aW9uIGZvY3VzIGhpZ2hsaWdodCBwb3NpdGlvbiB0byBwb2ludCB0byB0aGUgbmVzdGVkIGhlYWRlciByb290IGVsZW1lbnQgKFRIKVxuICAgICAqIGV2ZW4gd2hlbiB0aGUgbG9naWNhbCBjb29yZGluYXRlcyBwb2ludCBpbi1iZXR3ZWVuIHRoZSBoZWFkZXIuXG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9OZXN0ZWRIZWFkZXJzX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBUaGUgc3RhdGUgbWFuYWdlciBmb3IgdGhlIG5lc3RlZCBoZWFkZXJzLlxuICAgICAqXG4gICAgICogQHR5cGUge1N0YXRlTWFuYWdlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc3RhdGVNYW5hZ2VyLCBuZXcgX3N0YXRlTWFuYWdlcjIuZGVmYXVsdCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIENoYW5nZXNPYnNlcnZhYmxlIGNsYXNzIHRoYXQgYWxsb3dzIHRyYWNrIHRoZSBjaGFuZ2VzIHRoYXQgaGFwcGVucyBpbiB0aGVcbiAgICAgKiBjb2x1bW4gaW5kZXhlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDaGFuZ2VzT2JzZXJ2YWJsZX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogSG9sZHMgdGhlIGNvb3JkcyB0aGF0IHBvaW50cyB0byB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvbHVtbiBzZWxlY3Rpb24gc3RhcnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcnxudWxsfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9mb2N1c0luaXRpYWxDb29yZHMsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlcmUgaXMgcGVyZm9ybWVkIHRoZSBjb2x1bW4gc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2lzQ29sdW1uc1NlbGVjdGlvbkluUHJvZ3Jlc3MsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBDdXN0b20gaGVscGVyIGZvciBnZXR0aW5nIHdpZHRocyBvZiB0aGUgbmVzdGVkIGhlYWRlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtHaG9zdFRhYmxlfVxuICAgICAqL1xuICAgIC8vIEBUT0RPIFRoaXMgc2hvdWxkIGJlIGNoYW5nZWQgYWZ0ZXIgcmVmYWN0b3IgaGFuZHNvbnRhYmxlL3V0aWxzL2dob3N0VGFibGUuXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZ2hvc3RUYWJsZVwiLCBuZXcgX2dob3N0VGFibGUuZGVmYXVsdCh0aGlzLmhvdCwgKHJvdywgY29sdW1uKSA9PiB0aGlzLmdldEhlYWRlclNldHRpbmdzKHJvdywgY29sdW1uKSkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIHdoaWNoIGRldGVybWluZXMgdGhhdCB0aGUgbmVzdGVkIGhlYWRlciBzZXR0aW5ncyBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzXG4gICAgICogY29uZmlndXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnNcIiwgZmFsc2UpO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX0tFWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX0tFWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpIHtcbiAgICByZXR1cm4gUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBpZiBwbHVnaW4gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIG5lc3RlZEhlYWRlcnNcbiAgICB9ID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmVzdGVkSGVhZGVycykgfHwgIUFycmF5LmlzQXJyYXkobmVzdGVkSGVhZGVyc1swXSkpIHtcbiAgICAgICgwLCBfY29uc29sZS53YXJuKSgoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdzIGhhcyB0byBiZVxceDIwXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1dXWApO1xuICAgIH1cbiAgICB0aGlzLmFkZEhvb2soJ2luaXQnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgdGhpcywgX29uSW5pdCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckxvYWREYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIF90aGlzLCBfb25BZnRlckxvYWREYXRhKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZU9uQ2VsbE1vdXNlRG93bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24pLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJPbkNlbGxNb3VzZURvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJPbkNlbGxNb3VzZURvd24pLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlT25DZWxsTW91c2VPdmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVPbkNlbGxNb3VzZVVwJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZU9uQ2VsbE1vdXNlVXApLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlUcmFuc2Zvcm1TdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIF90aGlzLCBfb25Nb2RpZnlUcmFuc2Zvcm1TdGFydCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNlbGVjdGlvbicsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCB0aGlzLCBfdXBkYXRlRm9jdXNIaWdobGlnaHRQb3NpdGlvbikuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclNlbGVjdGlvbkZvY3VzU2V0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIHRoaXMsIF91cGRhdGVGb2N1c0hpZ2hsaWdodFBvc2l0aW9uKS5jYWxsKHRoaXMpKTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzJywgYXJyYXkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIHRoaXMsIF9vbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzKS5jYWxsKHRoaXMsIGFycmF5KSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb2xXaWR0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW45ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuOSksIF9rZXk5ID0gMDsgX2tleTkgPCBfbGVuOTsgX2tleTkrKykge1xuICAgICAgICBhcmdzW19rZXk5XSA9IGFyZ3VtZW50c1tfa2V5OV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZEhlYWRlcnNfYnJhbmQsIF90aGlzLCBfb25Nb2RpZnlDb2xXaWR0aCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjEwKSwgX2tleTEwID0gMDsgX2tleTEwIDwgX2xlbjEwOyBfa2V5MTArKykge1xuICAgICAgICBhcmdzW19rZXkxMF0gPSBhcmd1bWVudHNbX2tleTEwXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjExKSwgX2tleTExID0gMDsgX2tleTExIDwgX2xlbjExOyBfa2V5MTErKykge1xuICAgICAgICBhcmdzW19rZXkxMV0gPSBhcmd1bWVudHNbX2tleTExXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVDb3B5JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTIpLCBfa2V5MTIgPSAwOyBfa2V5MTIgPCBfbGVuMTI7IF9rZXkxMisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEyXSA9IGFyZ3VtZW50c1tfa2V5MTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlQ29weSkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVTZWxlY3RDb2x1bW5zJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEzID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTMpLCBfa2V5MTMgPSAwOyBfa2V5MTMgPCBfbGVuMTM7IF9rZXkxMysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEzXSA9IGFyZ3VtZW50c1tfa2V5MTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlU2VsZWN0Q29sdW1ucykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjE0ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTQpLCBfa2V5MTQgPSAwOyBfa2V5MTQgPCBfbGVuMTQ7IF9rZXkxNCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTE0XSA9IGFyZ3VtZW50c1tfa2V5MTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlGb2N1c2VkRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE1KSwgX2tleTE1ID0gMDsgX2tleTE1IDwgX2xlbjE1OyBfa2V5MTUrKykge1xuICAgICAgICBhcmdzW19rZXkxNV0gPSBhcmd1bWVudHNbX2tleTE1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgX3RoaXMsIF9vbk1vZGlmeUZvY3VzZWRFbGVtZW50KS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soJ2NhY2hlVXBkYXRlZCcsICgpID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRIZWFkZXJzX2JyYW5kLCB0aGlzLCBfdXBkYXRlRm9jdXNIaWdobGlnaHRQb3NpdGlvbikuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCdjYWNoZVVwZGF0ZWQnLCAoKSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkSGVhZGVyc19icmFuZCwgdGhpcywgX3VwZGF0ZUZvY3VzSGlnaGxpZ2h0UG9zaXRpb24pLmNhbGwodGhpcykpO1xuICAgIHN1cGVyLmVuYWJsZVBsdWdpbigpO1xuICAgIHRoaXMudXBkYXRlUGx1Z2luKCk7IC8vIEBUT0RPOiBXb3JrYXJvdW5kIGZvciBicm9rZW4gcGx1Z2luIGluaXRpYWxpemF0aW9uIGFic3RyYWN0aW9uLlxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgbmVzdGVkSGVhZGVyc2BdKEAvYXBpL29wdGlvbnMubWQjbmVzdGVkaGVhZGVycylcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICBpZiAoIXRoaXMuaG90LnZpZXcpIHtcbiAgICAgIC8vIEBUT0RPOiBXb3JrYXJvdW5kIGZvciBicm9rZW4gcGx1Z2luIGluaXRpYWxpemF0aW9uIGFic3RyYWN0aW9uLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICBuZXN0ZWRIZWFkZXJzXG4gICAgfSA9IHRoaXMuaG90LmdldFNldHRpbmdzKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGF0ZU1hbmFnZXIsIHRoaXMpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkSGVhZGVycykpIHtcbiAgICAgIHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5zZXRTdGF0ZShuZXN0ZWRIZWFkZXJzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycykge1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAgY29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb25cXHgyMFxuICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIC8vIFRoaXMgbGluZSBjb3ZlcnMgdGhlIGNhc2Ugd2hlbiBhIGRldmVsb3BlciB1c2VzIHRoZSBleHRlcm5hbCBoaWRpbmcgbWFwcyB0byBtYW5pcHVsYXRlXG4gICAgICAvLyB0aGUgY29sdW1ucycgdmlzaWJpbGl0eS4gVGhlIHRyZWUgc3RhdGUgYnVpbHQgZnJvbSB0aGUgc2V0dGluZ3MgLSB3aGljaCBpcyBhbHdheXMgYnVpbHRcbiAgICAgIC8vIGFzIGlmIGFsbCB0aGUgY29sdW1ucyBhcmUgdmlzaWJsZSwgbmVlZHMgdG8gYmUgbW9kaWZpZWQgdG8gYmUgaW4gc3luYyB3aXRoIGEgZGF0YXNldC5cbiAgICAgIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpLmZvckVhY2goKGlzQ29sdW1uSGlkZGVuLCBwaHlzaWNhbENvbHVtbkluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBpc0NvbHVtbkhpZGRlbiA9PT0gdHJ1ZSA/ICdoaWRlLWNvbHVtbicgOiAnc2hvdy1jb2x1bW4nO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihhY3Rpb25OYW1lLCBwaHlzaWNhbENvbHVtbkluZGV4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgdGhpcykgJiYgdGhpcy5lbmFibGVkKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2hpZGluZ0luZGV4TWFwT2JzZXJ2ZXIsIHRoaXMsIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcignaGlkaW5nJykuc3Vic2NyaWJlKGNoYW5nZXMgPT4ge1xuICAgICAgICBjaGFuZ2VzLmZvckVhY2goX3JlZiA9PiB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIG9wLFxuICAgICAgICAgICAgaW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgbmV3VmFsdWVcbiAgICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgICBpZiAob3AgPT09ICdyZXBsYWNlJykge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IG5ld1ZhbHVlID09PSB0cnVlID8gJ2hpZGUtY29sdW1uJyA6ICdzaG93LWNvbHVtbic7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihhY3Rpb25OYW1lLCBjb2x1bW5JbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5naG9zdFRhYmxlLmJ1aWxkV2lkdGhzTWFwKCk7XG4gICAgICB9KSk7XG4gICAgfVxuICAgIHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCk7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdGhpcy5jbGVhckNvbHNwYW5zKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGF0ZU1hbmFnZXIsIHRoaXMpLmNsZWFyKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oaWRpbmdJbmRleE1hcE9ic2VydmVyLCB0aGlzKS51bnN1YnNjcmliZSgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgdGhpcywgbnVsbCk7XG4gICAgdGhpcy5naG9zdFRhYmxlLmNsZWFyKCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGludGVybmFsIHN0YXRlIG1hbmFnZXIgb2YgdGhlIHBsdWdpbi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge1N0YXRlTWFuYWdlcn1cbiAgICovXG4gIGdldFN0YXRlTWFuYWdlcigpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGF0ZU1hbmFnZXIsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSB0b3RhbCBudW1iZXIgb2YgaGVhZGVycyBsZXZlbHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMYXllcnNDb3VudCgpIHtcbiAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGF0ZU1hbmFnZXIsIHRoaXMpLmdldExheWVyc0NvdW50KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb2x1bW4gc2V0dGluZ3MgZm9yIGEgc3BlY2lmaWVkIGhlYWRlci4gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWluc1xuICAgKiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGVhZGVyIGxhYmVsLCBpdHMgY29sc3BhbiBsZW5ndGgsIG9yIGlmIGl0IGlzIGhpZGRlblxuICAgKiBpbiB0aGUgaGVhZGVyIHJlbmRlcmVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIEhlYWRlciBsZXZlbCAoMCA9IG1vc3QgZGlzdGFudCB0byB0aGUgdGFibGUpLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggQSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0SGVhZGVyU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIGNvbHVtbkluZGV4KSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhoZWFkZXJMZXZlbCwgY29sdW1uSW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBjb2xzcGFucyByZW1haW5pbmcgYWZ0ZXIgcGx1Z2luIHVzYWdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2xlYXJDb2xzcGFucygpIHtcbiAgICBpZiAoIXRoaXMuaG90LnZpZXcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgX3d0OiB3dFxuICAgIH0gPSB0aGlzLmhvdC52aWV3O1xuICAgIGNvbnN0IGhlYWRlckxldmVscyA9IHd0LmdldFNldHRpbmcoJ2NvbHVtbkhlYWRlcnMnKS5sZW5ndGg7XG4gICAgY29uc3QgbWFpbkhlYWRlcnMgPSB3dC53dFRhYmxlLlRIRUFEO1xuICAgIGNvbnN0IHRvcEhlYWRlcnMgPSB3dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDtcbiAgICBjb25zdCB0b3BMZWZ0Q29ybmVySGVhZGVycyA9IHd0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ID8gd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCA6IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJMZXZlbHM7IGkrKykge1xuICAgICAgY29uc3QgbWFzdGVyTGV2ZWwgPSBtYWluSGVhZGVycy5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKCFtYXN0ZXJMZXZlbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvcExldmVsID0gdG9wSGVhZGVycy5jaGlsZE5vZGVzW2ldO1xuICAgICAgY29uc3QgdG9wTGVmdENvcm5lckxldmVsID0gdG9wTGVmdENvcm5lckhlYWRlcnMgPyB0b3BMZWZ0Q29ybmVySGVhZGVycy5jaGlsZE5vZGVzW2ldIDogbnVsbDtcbiAgICAgIGZvciAobGV0IGogPSAwLCBtYXN0ZXJOb2RlcyA9IG1hc3RlckxldmVsLmNoaWxkTm9kZXMubGVuZ3RoOyBqIDwgbWFzdGVyTm9kZXM7IGorKykge1xuICAgICAgICBtYXN0ZXJMZXZlbC5jaGlsZE5vZGVzW2pdLnJlbW92ZUF0dHJpYnV0ZSgnY29sc3BhbicpO1xuICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKG1hc3RlckxldmVsLmNoaWxkTm9kZXNbal0sICdoaWRkZW5IZWFkZXInKTtcbiAgICAgICAgaWYgKHRvcExldmVsICYmIHRvcExldmVsLmNoaWxkTm9kZXNbal0pIHtcbiAgICAgICAgICB0b3BMZXZlbC5jaGlsZE5vZGVzW2pdLnJlbW92ZUF0dHJpYnV0ZSgnY29sc3BhbicpO1xuICAgICAgICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykodG9wTGV2ZWwuY2hpbGROb2Rlc1tqXSwgJ2hpZGRlbkhlYWRlcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BMZWZ0Q29ybmVySGVhZGVycyAmJiB0b3BMZWZ0Q29ybmVyTGV2ZWwgJiYgdG9wTGVmdENvcm5lckxldmVsLmNoaWxkTm9kZXNbal0pIHtcbiAgICAgICAgICB0b3BMZWZ0Q29ybmVyTGV2ZWwuY2hpbGROb2Rlc1tqXS5yZW1vdmVBdHRyaWJ1dGUoJ2NvbHNwYW4nKTtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKHRvcExlZnRDb3JuZXJMZXZlbC5jaGlsZE5vZGVzW2pdLCAnaGlkZGVuSGVhZGVyJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgcmVuZGVyZXIgZm9yIGEgaGVhZGVyIHJvdy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIFRoZSBpbmRleCBvZiBoZWFkZXIgbGV2ZWwgY291bnRpbmcgZnJvbSB0aGUgdG9wIChwb3NpdGl2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNvdW50aW5nIGZyb20gMCB0byBOKS5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufVxuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJHZXRDb2xIZWFkZXJcbiAgICovXG4gIGhlYWRlclJlbmRlcmVyRmFjdG9yeShoZWFkZXJMZXZlbCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuICAgIGNvbnN0IGZpeGVkQ29sdW1uc1N0YXJ0ID0gdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygnZml4ZWRDb2x1bW5zU3RhcnQnKTtcbiAgICByZXR1cm4gKHJlbmRlcmVkQ29sdW1uSW5kZXgsIFRIKSA9PiB7XG4gICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29sdW1uSW5kZXhNYXBwZXIsXG4gICAgICAgIHZpZXdcbiAgICAgIH0gPSB0aGlzLmhvdDtcbiAgICAgIGxldCB2aXN1YWxDb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyZWRDb2x1bW5JbmRleCk7XG4gICAgICBpZiAodmlzdWFsQ29sdW1uSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgdmlzdWFsQ29sdW1uSW5kZXggPSByZW5kZXJlZENvbHVtbkluZGV4O1xuICAgICAgfVxuICAgICAgVEgucmVtb3ZlQXR0cmlidXRlKCdjb2xzcGFuJyk7XG4gICAgICAoMCwgX2VsZW1lbnQucmVtb3ZlQ2xhc3MpKFRILCAnaGlkZGVuSGVhZGVyJyk7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbHNwYW4sXG4gICAgICAgIGlzSGlkZGVuLFxuICAgICAgICBpc1BsYWNlaG9sZGVyXG4gICAgICB9ID0gKF9jbGFzc1ByaXZhdGVGaWVsZEdldDIgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIHZpc3VhbENvbHVtbkluZGV4KSkgIT09IG51bGwgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiAhPT0gdm9pZCAwID8gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA6IHtcbiAgICAgICAgbGFiZWw6ICcnXG4gICAgICB9O1xuICAgICAgaWYgKGlzUGxhY2Vob2xkZXIgfHwgaXNIaWRkZW4pIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShUSCwgJ2hpZGRlbkhlYWRlcicpO1xuICAgICAgfSBlbHNlIGlmIChjb2xzcGFuID4gMSkge1xuICAgICAgICB2YXIgX3d0T3ZlcmxheXMkdG9wSW5saW5lLCBfd3RPdmVybGF5cyRpbmxpbmVTdGE7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB3dE92ZXJsYXlzXG4gICAgICAgIH0gPSB2aWV3Ll93dDtcbiAgICAgICAgY29uc3QgaXNUb3BJbmxpbmVTdGFydE92ZXJsYXkgPSAoX3d0T3ZlcmxheXMkdG9wSW5saW5lID0gd3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkpID09PSBudWxsIHx8IF93dE92ZXJsYXlzJHRvcElubGluZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3d0T3ZlcmxheXMkdG9wSW5saW5lLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoVEgpO1xuICAgICAgICBjb25zdCBpc0lubGluZVN0YXJ0T3ZlcmxheSA9IChfd3RPdmVybGF5cyRpbmxpbmVTdGEgPSB3dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheSkgPT09IG51bGwgfHwgX3d0T3ZlcmxheXMkaW5saW5lU3RhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfd3RPdmVybGF5cyRpbmxpbmVTdGEuY2xvbmUud3RUYWJsZS5USEVBRC5jb250YWlucyhUSCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSBmaXhlZCBjb2x1bW4gZW5hYmxlZCwgaWYgc28gdGhlbiByZWR1Y2UgY29sc3BhbiB0byBmaXhlZCBjb2x1bW4gd2lkdGguXG4gICAgICAgIGNvbnN0IGNvcnJlY3RlZENvbHNwYW4gPSBpc1RvcElubGluZVN0YXJ0T3ZlcmxheSB8fCBpc0lubGluZVN0YXJ0T3ZlcmxheSA/IE1hdGgubWluKGNvbHNwYW4sIGZpeGVkQ29sdW1uc1N0YXJ0IC0gcmVuZGVyZWRDb2x1bW5JbmRleCkgOiBjb2xzcGFuO1xuICAgICAgICBpZiAoY29ycmVjdGVkQ29sc3BhbiA+IDEpIHtcbiAgICAgICAgICBUSC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCBjb3JyZWN0ZWRDb2xzcGFuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIodmlzdWFsQ29sdW1uSW5kZXgsIFRILCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sIGhlYWRlckxldmVsKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiBoZWFkZXIgdmFsdWUgZm9yIHNwZWNpZmllZCBjb2x1bW4gYW5kIGhlYWRlciBsZXZlbCBpbmRleC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbENvbHVtbkluZGV4IFZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBUaGUgaW5kZXggb2YgaGVhZGVyIGxldmVsLiBUaGUgaGVhZGVyIGxldmVsIGFjY2VwdHMgcG9zaXRpdmUgKDAgdG8gTilcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuZWdhdGl2ZSAoLTEgdG8gLU4pIHZhbHVlcy4gRm9yIHBvc2l0aXZlIHZhbHVlcywgMCBwb2ludHMgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgbW9zdCBoZWFkZXIsIGFuZCBmb3IgbmVnYXRpdmUgZGlyZWN0aW9uLCAtMSBwb2ludHMgdG8gdGhlIG1vc3QgYm90dG9tXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKHRoZSBoZWFkZXIgY2xvc2VzdCB0byB0aGUgY2VsbHMpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb2x1bW4gaGVhZGVyIHZhbHVlIHRvIHVwZGF0ZS5cbiAgICovXG4gIGdldENvbHVtbkhlYWRlclZhbHVlKHZpc3VhbENvbHVtbkluZGV4LCBoZWFkZXJMZXZlbCkge1xuICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQzO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzSGlkZGVuLFxuICAgICAgaXNQbGFjZWhvbGRlclxuICAgIH0gPSAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhoZWFkZXJMZXZlbCwgdmlzdWFsQ29sdW1uSW5kZXgpKSAhPT0gbnVsbCAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQzICE9PSB2b2lkIDAgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQzIDoge307XG4gICAgaWYgKGlzUGxhY2Vob2xkZXIgfHwgaXNIaWRkZW4pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG90LmdldENvbEhlYWRlcih2aXN1YWxDb2x1bW5JbmRleCwgaGVhZGVyTGV2ZWwpO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgcGx1Z2luIGluc3RhbmNlLlxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3N0YXRlTWFuYWdlciwgdGhpcywgbnVsbCk7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgdGhpcykgIT09IG51bGwpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgdGhpcykudW5zdWJzY3JpYmUoKTtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciwgdGhpcywgbnVsbCk7XG4gICAgfVxuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0cmVlIGRhdGEgdGhhdCBiZWxvbmdzIHRvIHRoZSBjb2x1bW4gaGVhZGVycyBwb2ludGVkIGJ5IHRoZSBwYXNzZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fHVuZGVmaW5lZH1cbiAgICovXG4gIF9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyhjb29yZHMpIHtcbiAgICBpZiAoY29vcmRzLnJvdyA+PSAwIHx8IGNvb3Jkcy5jb2wgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGNvb3Jkcy5yb3csIGNvb3Jkcy5jb2wpO1xuICB9XG59XG5leHBvcnRzLk5lc3RlZEhlYWRlcnMgPSBOZXN0ZWRIZWFkZXJzO1xuZnVuY3Rpb24gX3VwZGF0ZUZvY3VzSGlnaGxpZ2h0UG9zaXRpb24oKSB7XG4gIHZhciBfdGhpcyRob3Q7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IChfdGhpcyRob3QgPSB0aGlzLmhvdCkgPT09IG51bGwgfHwgX3RoaXMkaG90ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge1xuICAgIGhpZ2hsaWdodFxuICB9ID0gc2VsZWN0aW9uO1xuICBjb25zdCBpc05lc3RlZEhlYWRlcnNSYW5nZSA9IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhpZ2hsaWdodC5jb2wgPj0gMDtcbiAgaWYgKGlzTmVzdGVkSGVhZGVyc1JhbmdlKSB7XG4gICAgY29uc3QgY29sdW1uSW5kZXggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoaGlnaGxpZ2h0LnJvdywgaGlnaGxpZ2h0LmNvbCk7XG4gICAgY29uc3QgZm9jdXNIaWdobGlnaHQgPSB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7XG5cbiAgICAvLyBDb3JyZWN0IHRoZSBoaWdobGlnaHQvZm9jdXMgc2VsZWN0aW9uIHRvIGhpZ2hsaWdodCB0aGUgY29ycmVjdCBUSCBlbGVtZW50XG4gICAgZm9jdXNIaWdobGlnaHQudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodC5jb2wgPSBjb2x1bW5JbmRleDtcbiAgICBmb2N1c0hpZ2hsaWdodC52aXN1YWxDZWxsUmFuZ2UuZnJvbS5jb2wgPSBjb2x1bW5JbmRleDtcbiAgICBmb2N1c0hpZ2hsaWdodC52aXN1YWxDZWxsUmFuZ2UudG8uY29sID0gY29sdW1uSW5kZXg7XG4gICAgZm9jdXNIaWdobGlnaHQuY29tbWl0KCk7XG4gIH1cbn1cbi8qKlxuICogQWxsb3dzIHRvIGNvbnRyb2wgdG8gd2hpY2ggY29sdW1uIGluZGV4IHRoZSB2aWV3cG9ydCB3aWxsIGJlIHNjcm9sbGVkLiBUbyBlbnN1cmUgdGhhdCB0aGUgdmlld3BvcnRcbiAqIGlzIHNjcm9sbGVkIHRvIHRoZSBjb3JyZWN0IGNvbHVtbiBmb3IgdGhlIG5lc3RlZCBoZWFkZXIgdGhlIG1vc3QgbGVmdCBhbmQgdGhlIG1vc3QgcmlnaHQgdmlzdWFsIGNvbHVtblxuICogaW5kZXhlcyBhcmUgdXNlZC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsQ29sdW1uIEEgdmlzdWFsIGNvbHVtbiBpbmRleCB0byB3aGljaCB0aGUgdmlld3BvcnQgd2lsbCBiZSBzY3JvbGxlZC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5KHZpc3VhbENvbHVtbikge1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBpZiAoIXNlbGVjdGlvbikge1xuICAgIHJldHVybiB2aXN1YWxDb2x1bW47XG4gIH1cbiAgY29uc3Qge1xuICAgIGhpZ2hsaWdodFxuICB9ID0gc2VsZWN0aW9uO1xuICBjb25zdCBpc05lc3RlZEhlYWRlcnNSYW5nZSA9IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhpZ2hsaWdodC5jb2wgPj0gMDtcbiAgaWYgKCFpc05lc3RlZEhlYWRlcnNSYW5nZSkge1xuICAgIHJldHVybiB2aXN1YWxDb2x1bW47XG4gIH1cbiAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7XG4gIGNvbnN0IGxhc3RDb2x1bW4gPSB0aGlzLmhvdC52aWV3LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKTtcbiAgY29uc3QgbW9zdExlZnRDb2x1bW5JbmRleCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoaWdobGlnaHQucm93LCBoaWdobGlnaHQuY29sKTtcbiAgY29uc3QgbW9zdFJpZ2h0Q29sdW1uSW5kZXggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGhpZ2hsaWdodC5yb3csIGhpZ2hsaWdodC5jb2wpO1xuXG4gIC8vIGRvIG5vdCBzY3JvbGwgdGhlIHZpZXdwb3J0IHdoZW4gdGhlIGhlYWRlciBpcyB3aWRlciB0aGFuIHRoZSB2aWV3cG9ydFxuICBpZiAobW9zdExlZnRDb2x1bW5JbmRleCA8IGZpcnN0Q29sdW1uICYmIG1vc3RSaWdodENvbHVtbkluZGV4ID4gbGFzdENvbHVtbikge1xuICAgIHJldHVybiB2aXN1YWxDb2x1bW47XG4gIH1cbiAgcmV0dXJuIG1vc3RMZWZ0Q29sdW1uSW5kZXggPCBmaXJzdENvbHVtbiA/IG1vc3RMZWZ0Q29sdW1uSW5kZXggOiBtb3N0UmlnaHRDb2x1bW5JbmRleDtcbn1cbi8qKlxuICogQWxsb3dzIHRvIGNvbnRyb2wgd2hpY2ggaGVhZGVyIERPTSBlbGVtZW50IHdpbGwgYmUgdXNlZCB0byBoaWdobGlnaHQuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbENvbHVtbiBBIHZpc3VhbCBjb2x1bW4gaW5kZXggb2YgdGhlIGhpZ2hsaWdodGVkIHJvdyBoZWFkZXIuXG4gKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgQSByb3cgaGVhZGVyIGxldmVsIHRoYXQgaXMgY3VycmVudGx5IGhpZ2hsaWdodGVkLlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodE1ldGEgQW4gb2JqZWN0IHdpdGggbWV0YSBkYXRhIHRoYXQgZGVzY3JpYmVzIHRoZSBoaWdobGlnaHQgc3RhdGUuXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIodmlzdWFsQ29sdW1uLCBoZWFkZXJMZXZlbCwgaGlnaGxpZ2h0TWV0YSkge1xuICBjb25zdCBoZWFkZXJOb2RlRGF0YSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoaGVhZGVyTGV2ZWwsIHZpc3VhbENvbHVtbik7XG4gIGlmICghaGVhZGVyTm9kZURhdGEpIHtcbiAgICByZXR1cm4gdmlzdWFsQ29sdW1uO1xuICB9XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5DdXJzb3IsXG4gICAgc2VsZWN0aW9uVHlwZSxcbiAgICBzZWxlY3Rpb25XaWR0aFxuICB9ID0gaGlnaGxpZ2h0TWV0YTtcbiAgY29uc3Qge1xuICAgIGlzUm9vdCxcbiAgICBjb2xzcGFuXG4gIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIHZpc3VhbENvbHVtbik7XG4gIGlmIChzZWxlY3Rpb25UeXBlID09PSBfc2VsZWN0aW9uLkhFQURFUl9UWVBFKSB7XG4gICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgIHJldHVybiBoZWFkZXJOb2RlRGF0YS5jb2x1bW5JbmRleDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gX3NlbGVjdGlvbi5BQ1RJVkVfSEVBREVSX1RZUEUpIHtcbiAgICBpZiAoY29sc3BhbiA+IHNlbGVjdGlvbldpZHRoIC0gY29sdW1uQ3Vyc29yIHx8ICFpc1Jvb3QpIHtcbiAgICAgIC8vIFByZXZlbnRzIGFkZGluZyBhbnkgQ1NTIGNsYXNzIG5hbWVzIHRvIHRoZSBUSCBlbGVtZW50XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZpc3VhbENvbHVtbjtcbn1cbi8qKlxuICogTGlzdGVucyB0aGUgYGJlZm9yZUNvcHlgIGhvb2sgdGhhdCBhbGxvd3MgcHJvY2Vzc2luZyB0aGUgY29waWVkIGNvbHVtbiBoZWFkZXJzIHNvIHRoYXQgdGhlXG4gKiBtZXJnZWQgY29sdW1uIGhlYWRlcnMgZG8gbm90IHByb3BhZ2F0ZSB0aGUgdmFsdWUgZm9yIGVhY2ggY29sdW1uIGJ1dCBvbmx5IG9uY2UgYXQgdGhlIGJlZ2lubmluZ1xuICogb2YgdGhlIGNvbHVtbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheVtdfSBkYXRhIEFuIGFycmF5IG9mIGFycmF5cyB3aGljaCBjb250YWlucyBkYXRhIHRvIGNvcGllZC5cbiAqIEBwYXJhbSB7b2JqZWN0W119IGNvcHlhYmxlUmFuZ2VzIEFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCByYW5nZXMgb2YgdGhlIHZpc3VhbCBpbmRleGVzIChgc3RhcnRSb3dgLCBgc3RhcnRDb2xgLCBgZW5kUm93YCwgYGVuZENvbGApXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGNvcGllZC5cbiAqIEBwYXJhbSB7eyBjb2x1bW5IZWFkZXJzQ291bnQ6IG51bWJlciB9fSBjb3BpZWRIZWFkZXJzQ291bnQgQW4gb2JqZWN0IHdpdGgga2V5cyB0aGF0IGhvbGRzIGluZm9ybWF0aW9uIHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBjb3BpZWQgaGVhZGVycy5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQ29weShkYXRhLCBjb3B5YWJsZVJhbmdlcywgX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBjb2x1bW5IZWFkZXJzQ291bnRcbiAgfSA9IF9yZWYyO1xuICBpZiAoY29sdW1uSGVhZGVyc0NvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZvciAobGV0IHJhbmdlSW5kZXggPSAwOyByYW5nZUluZGV4IDwgY29weWFibGVSYW5nZXMubGVuZ3RoOyByYW5nZUluZGV4KyspIHtcbiAgICBjb25zdCB7XG4gICAgICBzdGFydFJvdyxcbiAgICAgIHN0YXJ0Q29sLFxuICAgICAgZW5kUm93LFxuICAgICAgZW5kQ29sXG4gICAgfSA9IGNvcHlhYmxlUmFuZ2VzW3JhbmdlSW5kZXhdO1xuICAgIGNvbnN0IHJvd3NDb3VudCA9IGVuZFJvdyAtIHN0YXJ0Um93ICsgMTtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSBzdGFydENvbCAtIGVuZENvbCArIDE7XG5cbiAgICAvLyBkbyBub3QgcHJvY2VzcyBkYXRhc2V0IHJhbmdlcyBhbmQgY29sdW1uIGhlYWRlcnMgd2hlcmUgb25seSBvbmUgY29sdW1uIGlzIGNvcGllZFxuICAgIGlmIChzdGFydFJvdyA+PSAwIHx8IGNvbHVtbnNDb3VudCA9PT0gMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGZvciAobGV0IGNvbHVtbiA9IHN0YXJ0Q29sOyBjb2x1bW4gPD0gZW5kQ29sOyBjb2x1bW4rKykge1xuICAgICAgZm9yIChsZXQgcm93ID0gc3RhcnRSb3c7IHJvdyA8PSBlbmRSb3c7IHJvdysrKSB7XG4gICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ0O1xuICAgICAgICBjb25zdCB6ZXJvQmFzZWRDb2x1bW5IZWFkZXJMZXZlbCA9IHJvd3NDb3VudCArIHJvdztcbiAgICAgICAgY29uc3QgemVyb0Jhc2VkQ29sdW1uSW5kZXggPSBjb2x1bW4gLSBzdGFydENvbDtcbiAgICAgICAgaWYgKHplcm9CYXNlZENvbHVtbkluZGV4ID09PSAwKSB7XG4gICAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1Jvb3QgPSAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEocm93LCBjb2x1bW4pKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQ0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQ0LmlzUm9vdDtcbiAgICAgICAgaWYgKGlzUm9vdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBkYXRhW3plcm9CYXNlZENvbHVtbkhlYWRlckxldmVsXVt6ZXJvQmFzZWRDb2x1bW5JbmRleF0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBBbGxvd3MgYmxvY2tpbmcgdGhlIGNvbHVtbiBzZWxlY3Rpb24gdGhhdCBpcyBjb250cm9sbGVkIGJ5IHRoZSBjb3JlIFNlbGVjdGlvbiBtb2R1bGUuXG4gKlxuICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBNb3VzZSBldmVudC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIENlbGwgY29vcmRzIG9iamVjdCBjb250YWluaW5nIHRoZSB2aXN1YWwgY29vcmRpbmF0ZXMgb2YgdGhlIGNsaWNrZWQgY2VsbC5cbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gVEQgVGhlIHRhYmxlIGNlbGwgb3IgaGVhZGVyIGVsZW1lbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGByb3dgLCBgY29sdW1uYCBhbmQgYGNlbGxgLiBFYWNoIHByb3BlcnR5IGNvbnRhaW5zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBhbGxvd3Mgb3IgZGlzYWxsb3dzIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24gZm9yIHRoYXQgcGFydGljdWxhciBhcmVhLlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVPbkNlbGxNb3VzZURvd24oZXZlbnQsIGNvb3JkcywgVEQsIGNvbnRyb2xsZXIpIHtcbiAgY29uc3QgaGVhZGVyTm9kZURhdGEgPSB0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyhjb29yZHMpO1xuICBpZiAoaGVhZGVyTm9kZURhdGEpIHtcbiAgICAvLyBCbG9jayB0aGUgU2VsZWN0aW9uIG1vZHVsZSBpbiBjb250cm9sbGluZyBob3cgdGhlIGNvbHVtbnMgYXJlIHNlbGVjdGVkLiBQYXNzIHRoZVxuICAgIC8vIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjb2x1bW4gc2VsZWN0aW9uIHRvIHRoaXMgcGx1Z2luIChzZWUgXCJvbkFmdGVyT25DZWxsTW91c2VEb3duXCIgaG9vaykuXG4gICAgY29udHJvbGxlci5jb2x1bW4gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIEFsbG93cyB0byBjb250cm9sIGhvdyB0aGUgY29sdW1uIHNlbGVjdGlvbiBiYXNlZCBvbiB0aGUgY29vcmRpbmF0ZXMgYW5kIHRoZSBuZXN0ZWQgaGVhZGVycyBpcyBtYWRlLlxuICpcbiAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgTW91c2UgZXZlbnQuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBDZWxsIGNvb3JkcyBvYmplY3QgY29udGFpbmluZyB0aGUgdmlzdWFsIGNvb3JkaW5hdGVzIG9mIHRoZSBjbGlja2VkIGNlbGwuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyT25DZWxsTW91c2VEb3duKGV2ZW50LCBjb29yZHMpIHtcbiAgY29uc3QgaGVhZGVyTm9kZURhdGEgPSB0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyhjb29yZHMpO1xuICBpZiAoIWhlYWRlck5vZGVEYXRhKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZm9jdXNJbml0aWFsQ29vcmRzLCB0aGlzLCBjb29yZHMuY2xvbmUoKSk7XG4gIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfaXNDb2x1bW5zU2VsZWN0aW9uSW5Qcm9ncmVzcywgdGhpcywgdHJ1ZSk7XG4gIGNvbnN0IHtcbiAgICBzZWxlY3Rpb25cbiAgfSA9IHRoaXMuaG90O1xuICBjb25zdCBjdXJyZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSA/IHNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpIDogbnVsbDtcbiAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gW107XG4gIGNvbnN0IHtcbiAgICBjb2x1bW5JbmRleCxcbiAgICBvcmlnQ29sc3BhblxuICB9ID0gaGVhZGVyTm9kZURhdGE7XG5cbiAgLy8gVGhlIFNlbGVjdGlvbiBtb2R1bGUgZG9lc24ndCBhbGxvdyBpdCB0byBleHRlbmQgaXRzIGJlaGF2aW9yIGVhc2lseS4gVGhhdCdzIHdoeSBoZXJlIHdlIG5lZWRcbiAgLy8gdG8gcmUtaW1wbGVtZW50IHRoZSBcImNsaWNrXCIgYW5kIFwic2hpZnRcIiBiZWhhdmlvci4gQXMgYSB3b3JrYXJvdW5kLCB0aGUgbG9naWMgZm9yIHRoZSBuZXN0ZWRcbiAgLy8gaGVhZGVycyBtdXN0IGltcGxlbWVudCBhIHNpbWlsYXIgbG9naWMgYXMgaW4gdGhlIG9yaWdpbmFsIFNlbGVjdGlvbiBoYW5kbGVyXG4gIC8vIChzZWUgc3JjL3NlbGVjdGlvbi9tb3VzZUV2ZW50SGFuZGxlci5qcykuXG4gIGNvbnN0IGFsbG93UmlnaHRDbGlja1NlbGVjdGlvbiA9ICFzZWxlY3Rpb24uaW5JblNlbGVjdGlvbihjb29yZHMpO1xuICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgY3VycmVudFNlbGVjdGlvbikge1xuICAgIGlmIChjb29yZHMuY29sIDwgY3VycmVudFNlbGVjdGlvbi5mcm9tLmNvbCkge1xuICAgICAgY29sdW1uc1RvU2VsZWN0LnB1c2goY3VycmVudFNlbGVjdGlvbi5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsIGNvbHVtbkluZGV4LCBjb29yZHMucm93KTtcbiAgICB9IGVsc2UgaWYgKGNvb3Jkcy5jb2wgPiBjdXJyZW50U2VsZWN0aW9uLmZyb20uY29sKSB7XG4gICAgICBjb2x1bW5zVG9TZWxlY3QucHVzaChjdXJyZW50U2VsZWN0aW9uLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuIC0gMSwgY29vcmRzLnJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbnNUb1NlbGVjdC5wdXNoKGNvbHVtbkluZGV4LCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuIC0gMSwgY29vcmRzLnJvdyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCgwLCBfZXZlbnQuaXNMZWZ0Q2xpY2spKGV2ZW50KSB8fCAoMCwgX2V2ZW50LmlzUmlnaHRDbGljaykoZXZlbnQpICYmIGFsbG93UmlnaHRDbGlja1NlbGVjdGlvbikge1xuICAgIGNvbHVtbnNUb1NlbGVjdC5wdXNoKGNvbHVtbkluZGV4LCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuIC0gMSwgY29vcmRzLnJvdyk7XG4gIH1cblxuICAvLyBUaGUgcGx1Z2luIHRha2VzIGNvbnRyb2wgb2YgaG93IHRoZSBjb2x1bW5zIGFyZSBzZWxlY3RlZC5cbiAgc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4uY29sdW1uc1RvU2VsZWN0KTtcbn1cbi8qKlxuICogTWFrZXMgdGhlIGhlYWRlci1zZWxlY3Rpb24gcHJvcGVybHkgc2VsZWN0IHRoZSBuZXN0ZWQgaGVhZGVycy5cbiAqXG4gKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50IE1vdXNlIGV2ZW50LlxuICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgQ2VsbCBjb29yZHMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHZpc3VhbCBjb29yZGluYXRlcyBvZiB0aGUgY2xpY2tlZCBjZWxsLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gVEQgVGhlIGNlbGwgZWxlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjb250cm9sbGVyIEFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHJvd2AsIGBjb2x1bW5gIGFuZCBgY2VsbGAuIEVhY2ggcHJvcGVydHkgY29udGFpbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGFsbG93cyBvciBkaXNhbGxvd3MgY2hhbmdpbmcgdGhlIHNlbGVjdGlvbiBmb3IgdGhhdCBwYXJ0aWN1bGFyIGFyZWEuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihldmVudCwgY29vcmRzLCBURCwgY29udHJvbGxlcikge1xuICBpZiAoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBoZWFkZXJOb2RlRGF0YSA9IHRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGNvb3Jkcyk7XG4gIGlmICghaGVhZGVyTm9kZURhdGEpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge1xuICAgIGNvbHVtbkluZGV4LFxuICAgIG9yaWdDb2xzcGFuXG4gIH0gPSBoZWFkZXJOb2RlRGF0YTtcbiAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gIGNvbnN0IHRvcFN0YXJ0Q29vcmRzID0gc2VsZWN0ZWRSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO1xuICBjb25zdCBib3R0b21FbmRDb29yZHMgPSBzZWxlY3RlZFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO1xuICBjb25zdCB7XG4gICAgZnJvbVxuICB9ID0gc2VsZWN0ZWRSYW5nZTtcblxuICAvLyBCbG9jayB0aGUgU2VsZWN0aW9uIG1vZHVsZSBpbiBjb250cm9sbGluZyBob3cgdGhlIGNvbHVtbnMgYW5kIGNlbGxzIGFyZSBzZWxlY3RlZC5cbiAgLy8gRnJvbSBub3cgb24sIHRoZSBwbHVnaW4gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBzZWxlY3Rpb24uXG4gIGNvbnRyb2xsZXIuY29sdW1uID0gdHJ1ZTtcbiAgY29udHJvbGxlci5jZWxsID0gdHJ1ZTtcbiAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gW107XG4gIGNvbnN0IGhlYWRlckxldmVsID0gKDAsIF9udW1iZXIuY2xhbXApKGNvb3Jkcy5yb3csIC1JbmZpbml0eSwgLTEpO1xuICBpZiAoY29vcmRzLmNvbCA8IGZyb20uY29sKSB7XG4gICAgY29sdW1uc1RvU2VsZWN0LnB1c2goYm90dG9tRW5kQ29vcmRzLmNvbCwgY29sdW1uSW5kZXgsIGhlYWRlckxldmVsKTtcbiAgfSBlbHNlIGlmIChjb29yZHMuY29sID4gZnJvbS5jb2wpIHtcbiAgICBjb2x1bW5zVG9TZWxlY3QucHVzaCh0b3BTdGFydENvb3Jkcy5jb2wsIGNvbHVtbkluZGV4ICsgb3JpZ0NvbHNwYW4gLSAxLCBoZWFkZXJMZXZlbCk7XG4gIH0gZWxzZSB7XG4gICAgY29sdW1uc1RvU2VsZWN0LnB1c2goY29sdW1uSW5kZXgsIGNvbHVtbkluZGV4ICsgb3JpZ0NvbHNwYW4gLSAxLCBoZWFkZXJMZXZlbCk7XG4gIH1cbiAgdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4uY29sdW1uc1RvU2VsZWN0KTtcbn1cbi8qKlxuICogU3dpdGNoZXMgaW50ZXJuYWwgZmxhZyBhYm91dCBzZWxlY3Rpb24gcHJvZ3Jlc3MgdG8gYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlT25DZWxsTW91c2VVcCgpIHtcbiAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc0NvbHVtbnNTZWxlY3Rpb25JblByb2dyZXNzLCB0aGlzLCBmYWxzZSk7XG59XG4vKipcbiAqIFRoZSBob29rIGNoZWNrcyBhbmQgZW5zdXJlcyB0aGF0IHRoZSBmb2N1cyBwb3NpdGlvbiB0aGF0IGRlcGVuZHMgb24gdGhlIHNlbGVjdGVkIGNvbHVtbnNcbiAqIHJhbmdlIGlzIGFsd2F5cyBwb3NpdGlvbmVkIHdpdGhpbiB0aGUgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCgpIHtcbiAgY29uc3Qge1xuICAgIG5hdmlnYWJsZUhlYWRlcnNcbiAgfSA9IHRoaXMuaG90LmdldFNldHRpbmdzKCk7XG4gIGlmICghdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpIHx8ICFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzQ29sdW1uc1NlbGVjdGlvbkluUHJvZ3Jlc3MsIHRoaXMpIHx8ICFuYXZpZ2FibGVIZWFkZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICBjb25zdCBjb2x1bW5TdGFydCA9IHNlbGVjdGVkUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2w7XG4gIGNvbnN0IGNvbHVtbkVuZCA9IHNlbGVjdGVkUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sO1xuICBjb25zdCB7XG4gICAgY29sdW1uSW5kZXgsXG4gICAgb3JpZ0NvbHNwYW5cbiAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c0luaXRpYWxDb29yZHMsIHRoaXMpLnJvdywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c0luaXRpYWxDb29yZHMsIHRoaXMpLmNvbCk7XG4gIHNlbGVjdGVkUmFuZ2Uuc2V0SGlnaGxpZ2h0KF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZm9jdXNJbml0aWFsQ29vcmRzLCB0aGlzKSk7XG4gIGlmIChvcmlnQ29sc3BhbiA+IHNlbGVjdGVkUmFuZ2UuZ2V0V2lkdGgoKSB8fCBjb2x1bW5JbmRleCA8IGNvbHVtblN0YXJ0IHx8IGNvbHVtbkluZGV4ICsgb3JpZ0NvbHNwYW4gLSAxID4gY29sdW1uRW5kKSB7XG4gICAgY29uc3QgaGVhZGVyTGV2ZWwgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbCgoMCwgX251bWJlci5jbGFtcCkoY29sdW1uU3RhcnQsIGNvbHVtbkluZGV4LCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuIC0gMSksICgwLCBfbnVtYmVyLmNsYW1wKShjb2x1bW5FbmQsIGNvbHVtbkluZGV4LCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuIC0gMSkpO1xuICAgIHNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0LnJvdyA9IGhlYWRlckxldmVsO1xuICAgIHNlbGVjdGVkUmFuZ2UuaGlnaGxpZ2h0LmNvbCA9IHNlbGVjdGVkUmFuZ2UuZnJvbS5jb2w7XG4gIH1cbn1cbi8qKlxuICogYG1vZGlmeVRyYW5zZm9ybVN0YXJ0YCBob29rIGlzIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBrZXlib2FyZCBuYXZpZ2F0aW9uIGlzIHVzZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGRlbHRhIFRoZSB0cmFuc2Zvcm1hdGlvbiBkZWx0YS5cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5VHJhbnNmb3JtU3RhcnQoZGVsdGEpIHtcbiAgY29uc3Qge1xuICAgIGhpZ2hsaWdodFxuICB9ID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgY29uc3QgbmV4dENvb3JkcyA9IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGhpZ2hsaWdodC5yb3cgKyBkZWx0YS5yb3csIGhpZ2hsaWdodC5jb2wgKyBkZWx0YS5jb2wpO1xuICBjb25zdCBpc05lc3RlZEhlYWRlcnNSYW5nZSA9IG5leHRDb29yZHMuaXNIZWFkZXIoKSAmJiBuZXh0Q29vcmRzLmNvbCA+PSAwO1xuICBpZiAoIWlzTmVzdGVkSGVhZGVyc1JhbmdlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHZpc3VhbENvbHVtbkluZGV4U3RhcnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobmV4dENvb3Jkcy5yb3csIG5leHRDb29yZHMuY29sKTtcbiAgY29uc3QgdmlzdWFsQ29sdW1uSW5kZXhFbmQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KG5leHRDb29yZHMucm93LCBuZXh0Q29vcmRzLmNvbCk7XG4gIGlmIChkZWx0YS5jb2wgPCAwKSB7XG4gICAgY29uc3QgbmV4dENvbHVtbiA9IGhpZ2hsaWdodC5jb2wgPj0gdmlzdWFsQ29sdW1uSW5kZXhTdGFydCAmJiBoaWdobGlnaHQuY29sIDw9IHZpc3VhbENvbHVtbkluZGV4RW5kID8gdmlzdWFsQ29sdW1uSW5kZXhTdGFydCAtIDEgOiB2aXN1YWxDb2x1bW5JbmRleEVuZDtcbiAgICBjb25zdCBub3RIaWRkZW5Db2x1bW5JbmRleCA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Q29sdW1uLCAtMSk7XG4gICAgaWYgKG5vdEhpZGRlbkNvbHVtbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgbm8gdmlzaWJsZSBjb2x1bW5zIGFueW1vcmUsIHNvIG1vdmUgdGhlIHNlbGVjdGlvbiBvdXQgb2YgdGhlIHRhYmxlIGVkZ2UuIFRoaXMgd2lsbFxuICAgICAgLy8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBzZWxlY3Rpb24gVHJhbnNmb3JtZXIgY2xhc3MgYXMgYSBtb3ZlIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgcm93IChpZiBhdXRvV3JhcFJvdyBpcyBlbmFibGVkKS5cbiAgICAgIGRlbHRhLmNvbCA9IC10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsIGhpZ2hsaWdodC5jb2wpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWx0YS5jb2wgPSAtTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShub3RIaWRkZW5Db2x1bW5JbmRleCwgaGlnaGxpZ2h0LmNvbCkgLSAxLCAxKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZGVsdGEuY29sID4gMCkge1xuICAgIGNvbnN0IG5leHRDb2x1bW4gPSBoaWdobGlnaHQuY29sID49IHZpc3VhbENvbHVtbkluZGV4U3RhcnQgJiYgaGlnaGxpZ2h0LmNvbCA8PSB2aXN1YWxDb2x1bW5JbmRleEVuZCA/IHZpc3VhbENvbHVtbkluZGV4RW5kICsgMSA6IHZpc3VhbENvbHVtbkluZGV4U3RhcnQ7XG4gICAgY29uc3Qgbm90SGlkZGVuQ29sdW1uSW5kZXggPSB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobmV4dENvbHVtbiwgMSk7XG4gICAgaWYgKG5vdEhpZGRlbkNvbHVtbkluZGV4ID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBhcmUgbm8gdmlzaWJsZSBjb2x1bW5zIGFueW1vcmUsIHNvIG1vdmUgdGhlIHNlbGVjdGlvbiBvdXQgb2YgdGhlIHRhYmxlIGVkZ2UuIFRoaXMgd2lsbFxuICAgICAgLy8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSBzZWxlY3Rpb24gVHJhbnNmb3JtZXIgY2xhc3MgYXMgYSBtb3ZlIHNlbGVjdGlvbiB0byB0aGUgbmV4dCByb3cgKGlmIGF1dG9XcmFwUm93IGlzIGVuYWJsZWQpLlxuICAgICAgZGVsdGEuY29sID0gdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShoaWdobGlnaHQuY29sLCB0aGlzLmhvdC5jb3VudENvbHMoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbHRhLmNvbCA9IE1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoaGlnaGxpZ2h0LmNvbCwgbm90SGlkZGVuQ29sdW1uSW5kZXgpIC0gMSwgMSk7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoZSBob29rIG9ic2VydmVzIHRoZSBjb2x1bW4gc2VsZWN0aW9uIGZyb20gdGhlIFNlbGVjdGlvbiBBUEkgYW5kIG1vZGlmaWVzIHRoZSBjb2x1bW4gcmFuZ2UgdG9cbiAqIGVuc3VyZSB0aGF0IHRoZSB3aG9sZSBuZXN0ZWQgY29sdW1uIHdpbGwgYmUgY292ZXJlZC5cbiAqXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IGZyb20gVGhlIGNvb3JkcyBvYmplY3Qgd2hlcmUgdGhlIHNlbGVjdGlvbiBzdGFydHMuXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IHRvIFRoZSBjb29yZHMgb2JqZWN0IHdoZXJlIHRoZSBzZWxlY3Rpb24gZW5kcy5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlU2VsZWN0Q29sdW1ucyhmcm9tLCB0bykge1xuICBjb25zdCBoZWFkZXJMZXZlbCA9IGZyb20ucm93O1xuICBjb25zdCBzdGFydE5vZGVEYXRhID0gdGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe1xuICAgIHJvdzogaGVhZGVyTGV2ZWwsXG4gICAgY29sOiBmcm9tLmNvbFxuICB9KTtcbiAgY29uc3QgZW5kTm9kZURhdGEgPSB0aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7XG4gICAgcm93OiBoZWFkZXJMZXZlbCxcbiAgICBjb2w6IHRvLmNvbFxuICB9KTtcbiAgaWYgKHRvLmNvbCA8IGZyb20uY29sKSB7XG4gICAgLy8gQ29sdW1uIHNlbGVjdGlvbiBmcm9tIHJpZ2h0IHRvIGxlZnRcbiAgICBpZiAoc3RhcnROb2RlRGF0YSkge1xuICAgICAgZnJvbS5jb2wgPSBzdGFydE5vZGVEYXRhLmNvbHVtbkluZGV4ICsgc3RhcnROb2RlRGF0YS5vcmlnQ29sc3BhbiAtIDE7XG4gICAgfVxuICAgIGlmIChlbmROb2RlRGF0YSkge1xuICAgICAgdG8uY29sID0gZW5kTm9kZURhdGEuY29sdW1uSW5kZXg7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRvLmNvbCA+PSBmcm9tLmNvbCkge1xuICAgIC8vIENvbHVtbiBzZWxlY3Rpb24gZnJvbSBsZWZ0IHRvIHJpZ2h0IG9yIGEgc2luZ2xlIGNvbHVtbiBzZWxlY3Rpb25cbiAgICBpZiAoc3RhcnROb2RlRGF0YSkge1xuICAgICAgZnJvbS5jb2wgPSBzdGFydE5vZGVEYXRhLmNvbHVtbkluZGV4O1xuICAgIH1cbiAgICBpZiAoZW5kTm9kZURhdGEpIHtcbiAgICAgIHRvLmNvbCA9IGVuZE5vZGVEYXRhLmNvbHVtbkluZGV4ICsgZW5kTm9kZURhdGEub3JpZ0NvbHNwYW4gLSAxO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBgYWZ0ZXJHZXRDb2x1bW5IZWFkZXJgIGhvb2sgY2FsbGJhY2sgLSBwcmVwYXJlcyB0aGUgaGVhZGVyIHN0cnVjdHVyZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSByZW5kZXJlcnNBcnJheSBBcnJheSBvZiByZW5kZXJlcnMuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzKHJlbmRlcmVyc0FycmF5KSB7XG4gIHJlbmRlcmVyc0FycmF5Lmxlbmd0aCA9IDA7XG4gIGZvciAobGV0IGhlYWRlckxheWVyID0gMDsgaGVhZGVyTGF5ZXIgPCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTsgaGVhZGVyTGF5ZXIrKykge1xuICAgIHJlbmRlcmVyc0FycmF5LnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkoaGVhZGVyTGF5ZXIpKTtcbiAgfVxufVxuLyoqXG4gKiBNYWtlIHRoZSByZW5kZXJlciByZW5kZXIgdGhlIGZpcnN0IG5lc3RlZCBjb2x1bW4gaW4gaXRzIGVudGlyZXR5LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjYWxjIFZpZXdwb3J0IGNvbHVtbiBjYWxjdWxhdG9yLlxuICovXG5mdW5jdGlvbiBfb25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKGNhbGMpIHtcbiAgY29uc3QgaGVhZGVyTGF5ZXJzQ291bnQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtcbiAgbGV0IG5ld1N0YXJ0Q29sdW1uID0gY2FsYy5zdGFydENvbHVtbjtcbiAgbGV0IG5vblJlbmRlcmFibGUgPSAhIWhlYWRlckxheWVyc0NvdW50O1xuICBmb3IgKGxldCBoZWFkZXJMYXllciA9IDA7IGhlYWRlckxheWVyIDwgaGVhZGVyTGF5ZXJzQ291bnQ7IGhlYWRlckxheWVyKyspIHtcbiAgICBjb25zdCBzdGFydENvbHVtbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoZWFkZXJMYXllciwgY2FsYy5zdGFydENvbHVtbik7XG4gICAgY29uc3QgcmVuZGVyZWRTdGFydENvbHVtbiA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoc3RhcnRDb2x1bW4pO1xuXG4gICAgLy8gSWYgYW55IG9mIHRoZSBoZWFkZXJzIGZvciB0aGF0IGNvbHVtbiBpbmRleCBpcyByZW5kZXJlZCwgYWxsIG9mIHRoZW0gc2hvdWxkIGJlIHJlbmRlcmVkIHByb3Blcmx5LCBzZWVcbiAgICAvLyBjb21tZW50IGJlbG93LlxuICAgIGlmIChzdGFydENvbHVtbiA+PSAwKSB7XG4gICAgICBub25SZW5kZXJhYmxlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gYHJlbmRlcmVkU3RhcnRDb2x1bW5gIGNhbiBiZSBgbnVsbGAgaWYgdGhlIGxlZnRtb3N0IGNvbHVtbnMgYXJlIGhpZGRlbi4gSW4gdGhhdCBjYXNlIC0+IGlnbm9yZSB0aGF0IGhlYWRlclxuICAgIC8vIGxldmVsLCBhcyBpdCBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgXCJwYXJlbnRcIiBoZWFkZXJcbiAgICBpZiAoKDAsIF9udW1iZXIuaXNOdW1lcmljKShyZW5kZXJlZFN0YXJ0Q29sdW1uKSAmJiByZW5kZXJlZFN0YXJ0Q29sdW1uIDwgY2FsYy5zdGFydENvbHVtbikge1xuICAgICAgbmV3U3RhcnRDb2x1bW4gPSByZW5kZXJlZFN0YXJ0Q29sdW1uO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgbm8gaGVhZGVycyBmb3IgdGhlIHByb3ZpZGVkIGNvbHVtbiBpbmRleCBhcmUgcmVuZGVyYWJsZSwgc3RhcnQgcmVuZGVyaW5nIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgdXBtb3N0XG4gIC8vIGhlYWRlciBmb3IgdGhhdCBwb3NpdGlvbi5cbiAgY2FsYy5zdGFydENvbHVtbiA9IG5vblJlbmRlcmFibGUgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsIG5ld1N0YXJ0Q29sdW1uKS5jb2x1bW5JbmRleCA6IG5ld1N0YXJ0Q29sdW1uO1xufVxuLyoqXG4gKiBgbW9kaWZ5Q29sV2lkdGhgIGhvb2sgY2FsbGJhY2sgLSByZXR1cm5zIHdpZHRoIGZyb20gY2FjaGUsIHdoZW4gaXMgZ3JlYXRlciB0aGFuIGluY29taW5nIGZyb20gaG9vay5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gd2lkdGggV2lkdGggZnJvbSBob29rLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgaW5kZXggb2YgYW4gY29sdW1uLlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5Q29sV2lkdGgod2lkdGgsIGNvbHVtbikge1xuICBjb25zdCBjYWNoZWRXaWR0aCA9IHRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChjb2x1bW4pO1xuICByZXR1cm4gd2lkdGggPiBjYWNoZWRXaWR0aCA/IHdpZHRoIDogY2FjaGVkV2lkdGg7XG59XG4vKipcbiAqIExpc3RlbnMgdGhlIGBtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZWAgaG9vayB0aGF0IG92ZXJ3cml0ZXMgdGhlIGNvbHVtbiBoZWFkZXJzIHZhbHVlcyBiYXNlZCBvblxuICogdGhlIGludGVybmFsIHN0YXRlIGFuZCBzZXR0aW5ncyBvZiB0aGUgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBUaGUgY29sdW1uIGhlYWRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW5JbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBUaGUgaW5kZXggb2YgaGVhZGVyIGxldmVsLiBUaGUgaGVhZGVyIGxldmVsIGFjY2VwdHMgcG9zaXRpdmUgKDAgdG8gTilcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmUgKC0xIHRvIC1OKSB2YWx1ZXMuIEZvciBwb3NpdGl2ZSB2YWx1ZXMsIDAgcG9pbnRzIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcCBtb3N0IGhlYWRlciwgYW5kIGZvciBuZWdhdGl2ZSBkaXJlY3Rpb24sIC0xIHBvaW50cyB0byB0aGUgbW9zdCBib3R0b21cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgKHRoZSBoZWFkZXIgY2xvc2VzdCB0byB0aGUgY2VsbHMpLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29sdW1uIGhlYWRlciB2YWx1ZSB0byB1cGRhdGUuXG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKHZhbHVlLCB2aXN1YWxDb2x1bW5JbmRleCwgaGVhZGVyTGV2ZWwpIHtcbiAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDU7XG4gIGNvbnN0IHtcbiAgICBsYWJlbFxuICB9ID0gKF9jbGFzc1ByaXZhdGVGaWVsZEdldDUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3N0YXRlTWFuYWdlciwgdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGhlYWRlckxldmVsLCB2aXN1YWxDb2x1bW5JbmRleCkpICE9PSBudWxsICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldDUgIT09IHZvaWQgMCA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldDUgOiB7XG4gICAgbGFiZWw6ICcnXG4gIH07XG4gIHJldHVybiBsYWJlbDtcbn1cbi8qKlxuICogYG1vZGlmeUZvY3VzZWRFbGVtZW50YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBDb2x1bW4gaW5kZXguXG4gKiBAcmV0dXJucyB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFRoZSBgVEhgIGVsZW1lbnQgdG8gYmUgZm9jdXNlZC5cbiAqL1xuZnVuY3Rpb24gX29uTW9kaWZ5Rm9jdXNlZEVsZW1lbnQocm93LCBjb2x1bW4pIHtcbiAgaWYgKHJvdyA8IDApIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChyb3csIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc3RhdGVNYW5hZ2VyLCB0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChyb3csIGNvbHVtbiksIHRydWUpO1xuICB9XG59XG4vKipcbiAqIFVwZGF0ZXMgdGhlIHBsdWdpbiBzdGF0ZSBhZnRlciBIb1QgaW5pdGlhbGl6YXRpb24uXG4gKi9cbmZ1bmN0aW9uIF9vbkluaXQoKSB7XG4gIC8vIEBUT0RPOiBXb3JrYXJvdW5kIGZvciBicm9rZW4gcGx1Z2luIGluaXRpYWxpemF0aW9uIGFic3RyYWN0aW9uLlxuICB0aGlzLnVwZGF0ZVBsdWdpbigpO1xufVxuLyoqXG4gKiBVcGRhdGVzIHRoZSBwbHVnaW4gc3RhdGUgYWZ0ZXIgbmV3IGRhdGFzZXQgbG9hZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5W119IHNvdXJjZURhdGEgQXJyYXkgb2YgYXJyYXlzIG9yIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyBkYXRhLlxuICogQHBhcmFtIHtib29sZWFufSBpbml0aWFsTG9hZCBGbGFnIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBkYXRhIGhhcyBiZWVuIGxvYWRlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckxvYWREYXRhKHNvdXJjZURhdGEsIGluaXRpYWxMb2FkKSB7XG4gIGlmICghaW5pdGlhbExvYWQpIHtcbiAgICB0aGlzLnVwZGF0ZVBsdWdpbigpO1xuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF90cmVlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZGF0YVN0cnVjdHVyZXMvdHJlZVwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBIZWFkZXJzVHJlZVxuICpcbiAqIFRoZSBoZWFkZXIgdHJlZSBjbGFzcyBrZWVwcyBuZXN0ZWQgaGVhZGVyIHNldHRpbmdzIGluIHRoZSB0cmVlXG4gKiBzdHJ1Y3R1cmUgZm9yIGVhc2llciBub2RlIG1hbmlwdWxhdGlvbiAoZS5xIGNvbGxhcHNlIG9yIGV4cGFuZCBjb2x1bW4pLlxuICogVGhhdCB0cmVlcyByZXByZXNlbnQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG5lc3RlZCBoZWFkZXJzLiBGcm9tIHRoZVxuICogdHJlZXMsIHRoZSBtYXRyaXggaXMgZ2VuZXJhdGVkIGZvciBuZXN0ZWQgaGVhZGVyIHJlbmRlcmVycy5cbiAqXG4gKiBUaGUgc2Vjb25kIHJvbGUgb2YgdGhlIG1vZHVsZSBpcyB2YWxpZGF0aW9uLiBXaGlsZSBidWlsZGluZyB0aGUgdHJlZSxcbiAqIHRoZXJlIGlzIGNoZWNrIHdoZXRoZXIgdGhlIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgb3ZlcmxhcHBpbmdcbiAqIGhlYWRlcnMuIElmIHRydWUsIHRoZW4gdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gKlxuICogVGhlIHRyZWUgaXMgc3RhdGljOyBpdCBtZWFucyB0aGF0IGl0cyBjb2x1bW4gaW5kZXhpbmcgbmV2ZXIgY2hhbmdlc1xuICogZXZlbiB3aGVuIGEgY29sbGFwc2luZyBoZWFkZXIgaXMgcGVyZm9ybWVkLiBUaGUgc3RydWN0dXJlIGlzIGJhc2VkXG4gKiBvbiB2aXN1YWwgY29sdW1uIGluZGV4ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsIGZvciB0aGF0IGhlYWRlciBjb25maWd1cmF0aW9uOlxuICogICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tK1xuICogICDilIIgQTEgICAgICAgICAgICAgICAg4pSCIEEyIOKUglxuICogICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tK1xuICogICDilIIgQjEgICAgICAgICAgIOKUgiBCMiDilIIgQjMg4pSCXG4gKiAgICstLS0tKy0tLS0rLS0tLSstLS0tKy0tLS0rXG4gKiAgIOKUgiBDMSAgICAgIOKUgiBDMiDilIIgQzMg4pSCIEM0IOKUglxuICogICArLS0tLSstLS0tKy0tLS0rLS0tLSstLS0tK1xuICpcbiAqIFRoZSB0cmVlIHN0cnVjdHVyZXMgbG9vayBsaWtlOlxuICogICAgICAgICAgICAgICAgKDApICAgICAgICAgICAgICAgICAgICAgICg0KSAgICAgICAgICAgLy8gYSB2aXN1YWwgY29sdW1uIGluZGV4XG4gKiAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgICAgICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgLi0tLS0tLShBMSktLS0tLS0uICAgICAgICAgICAgICAoQTIpLS0uXG4gKiAgIC4tLShCMSktLS4gICAgICAgICAgIChCMiktLS4gICAgICAgICAgICAgIChCMyktLS5cbiAqICAoQzEpICAgICAoQzIpICAgICAgICAgICAgICAoQzMpICAgICAgICAgICAgICAgICAoQzQpXG4gKlxuICovXG4vKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbnZhciBfcm9vdE5vZGVzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3Jvb3RzSW5kZXggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfc291cmNlU2V0dGluZ3MgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIEhlYWRlcnNUcmVlIHtcbiAgY29uc3RydWN0b3Ioc291cmNlU2V0dGluZ3MpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBuZXN0ZWQgaGVhZGVycyBzZXR0aW5ncyBzdHJ1Y3R1cmVkIGludG8gdHJlZXMuIFRoZSByb290IHRyZWVzIGFyZSBzdG9yZWRcbiAgICAgKiB1bmRlciB0aGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge01hcDxudW1iZXIsIFRyZWVOb2RlPn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm9vdE5vZGVzLCBuZXcgTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIEEgbWFwIHRoYXQgdHJhbnNsYXRlcyB0aGUgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHRoYXQgaW50ZXJzZWN0IHRoZSByYW5nZVxuICAgICAqIGRlZmluZWQgYnkgdGhlIGhlYWRlciBjb2xzcGFuIHdpZHRoIHRvIHRoZSByb290IGluZGV4LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7TWFwPG51bWJlciwgbnVtYmVyPn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm9vdHNJbmRleCwgbmV3IE1hcCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZVNldHRpbmdzIGNsYXNzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7U291cmNlU2V0dGluZ3N9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NvdXJjZVNldHRpbmdzLCBudWxsKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzLCBzb3VyY2VTZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhbiBhcnJheSBvZiB0aGUgYWxsIHJvb3Qgbm9kZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUcmVlTm9kZVtdfVxuICAgKi9cbiAgZ2V0Um9vdHMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290Tm9kZXMsIHRoaXMpLnZhbHVlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgcm9vdCBub2RlIGJ5IHNwZWNpZmllZCB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggQSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7VHJlZU5vZGV8dW5kZWZpbmVkfVxuICAgKi9cbiAgZ2V0Um9vdEJ5Q29sdW1uKGNvbHVtbkluZGV4KSB7XG4gICAgbGV0IG5vZGU7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm9vdHNJbmRleCwgdGhpcykuaGFzKGNvbHVtbkluZGV4KSkge1xuICAgICAgbm9kZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm9vdE5vZGVzLCB0aGlzKS5nZXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290c0luZGV4LCB0aGlzKS5nZXQoY29sdW1uSW5kZXgpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHRyZWUgbm9kZSBieSBpdHMgcG9zaXRpb24gaW4gdGhlIGdyaWQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBIZWFkZXIgbGV2ZWwgaW5kZXggKHRoZXJlIGlzIHN1cHBvcnQgb25seSBmb3IgcG9zaXRpdmUgdmFsdWVzKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge1RyZWVOb2RlfHVuZGVmaW5lZH1cbiAgICovXG4gIGdldE5vZGUoaGVhZGVyTGV2ZWwsIGNvbHVtbkluZGV4KSB7XG4gICAgY29uc3Qgcm9vdE5vZGUgPSB0aGlzLmdldFJvb3RCeUNvbHVtbihjb2x1bW5JbmRleCk7XG4gICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgdmlzdWFsIGNvbHVtbiBpbmRleCB0byBhIDAtYmFzZWQgc3lzdGVtIGZvciBhIHNwZWNpZmljIFwiYm94XCIgZGVmaW5lZFxuICAgIC8vIGJ5IHJvb3Qgbm9kZSBjb2xzcGFuIHdpZHRoLlxuICAgIGNvbnN0IG5vcm1Db2x1bW5JbmRleCA9IGNvbHVtbkluZGV4IC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290c0luZGV4LCB0aGlzKS5nZXQoY29sdW1uSW5kZXgpO1xuICAgIGxldCBjb2x1bW5DdXJzb3IgPSAwO1xuICAgIGxldCB0cmVlTm9kZTtcblxuICAgIC8vIENvbGxlY3QgYWxsIHBhcmVudCBub2RlcyB0aGF0IGRlcGVuZCBvbiB0aGUgY29sbGFwc2VkIG5vZGUuXG4gICAgcm9vdE5vZGUud2Fsa0Rvd24obm9kZSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBvcmlnQ29sc3BhbixcbiAgICAgICAgICBoZWFkZXJMZXZlbDogbm9kZUhlYWRlckxldmVsXG4gICAgICAgIH1cbiAgICAgIH0gPSBub2RlO1xuICAgICAgaWYgKGhlYWRlckxldmVsID09PSBub2RlSGVhZGVyTGV2ZWwpIHtcbiAgICAgICAgaWYgKG5vcm1Db2x1bW5JbmRleCA+PSBjb2x1bW5DdXJzb3IgJiYgbm9ybUNvbHVtbkluZGV4IDw9IGNvbHVtbkN1cnNvciArIG9yaWdDb2xzcGFuIC0gMSkge1xuICAgICAgICAgIHRyZWVOb2RlID0gbm9kZTtcbiAgICAgICAgICB0cmVlTm9kZS5kYXRhLmlzUm9vdCA9IGNvbHVtbkluZGV4ID09PSB0cmVlTm9kZS5kYXRhLmNvbHVtbkluZGV4O1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQ2FuY2VsIHRyZWUgdHJhdmVyc2luZy5cbiAgICAgICAgfVxuICAgICAgICBjb2x1bW5DdXJzb3IgKz0gb3JpZ0NvbHNwYW47XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRyZWVOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyAob3IgcmVidWlsZHMgaWYgY2FsbGVkIGFnYWluKSByb290IG5vZGVzIGluZGV4ZXMuXG4gICAqL1xuICByZWJ1aWxkVHJlZUluZGV4KCkge1xuICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290c0luZGV4LCB0aGlzKS5jbGVhcigpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvb3ROb2RlcywgdGhpcyksIF9yZWYgPT4ge1xuICAgICAgbGV0IFssIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbHNwYW5cbiAgICAgICAgfVxuICAgICAgfV0gPSBfcmVmO1xuICAgICAgLy8gTWFwIHRyZWUgcmFuZ2UgKGNvbHNwYW4gcmFuZ2Uvd2lkdGgpIGludG8gdmlzdWFsIGNvbHVtbiBpbmRleCBvZiB0aGUgcm9vdCBub2RlLlxuICAgICAgZm9yIChsZXQgaSA9IGNvbHVtbkluZGV4OyBpIDwgY29sdW1uSW5kZXggKyBjb2xzcGFuOyBpKyspIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290c0luZGV4LCB0aGlzKS5zZXQoaSwgY29sdW1uSW5kZXgpO1xuICAgICAgfVxuICAgICAgY29sdW1uSW5kZXggKz0gY29sc3BhbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdHJlZXMgYmFzZWQgb24gU291cmNlU2V0dGluZ3MgY2xhc3MuIENhbGxpbmcgYSBtZXRob2QgY2F1c2VzIGNsZWFyaW5nIHRoZSB0cmVlIHN0YXRlIGJ1aWx0XG4gICAqIGZyb20gdGhlIHByZXZpb3VzIGNhbGwuXG4gICAqL1xuICBidWlsZFRyZWUoKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIGNvbnN0IGNvbHVtbnNDb3VudCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLmdldENvbHVtbnNDb3VudCgpO1xuICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgd2hpbGUgKGNvbHVtbkluZGV4IDwgY29sdW1uc0NvdW50KSB7XG4gICAgICBjb25zdCBjb2x1bW5TZXR0aW5ncyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLmdldEhlYWRlclNldHRpbmdzKDAsIGNvbHVtbkluZGV4KTtcbiAgICAgIGNvbnN0IHJvb3ROb2RlID0gbmV3IF90cmVlLmRlZmF1bHQoKTtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm9vdE5vZGVzLCB0aGlzKS5zZXQoY29sdW1uSW5kZXgsIHJvb3ROb2RlKTtcbiAgICAgIHRoaXMuYnVpbGRMZWF2ZXMocm9vdE5vZGUsIGNvbHVtbkluZGV4LCAwLCBjb2x1bW5TZXR0aW5ncy5vcmlnQ29sc3Bhbik7XG4gICAgICBjb2x1bW5JbmRleCArPSBjb2x1bW5TZXR0aW5ncy5vcmlnQ29sc3BhbjtcbiAgICB9XG4gICAgdGhpcy5yZWJ1aWxkVHJlZUluZGV4KCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGxlYXZlcyBmb3Igc3BlY2lmaWVkIHRyZWUgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtUcmVlTm9kZX0gcGFyZW50Tm9kZSBBIG5vZGUgdG8gd2hpY2ggdGhlIGxlYXZlcyBhcHBsaWVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggQSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgQ3VycmVudGx5IHByb2Nlc3NlZCBoZWFkZXIgbGV2ZWwuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZXh0cmFjdGlvbkxlbmd0aD0xXSBEZXRlcm1pbmVzIGNvbHVtbiBleHRyYWN0aW9uIGxlbmd0aCBmb3Igbm9kZSBjaGlsZHJlbi5cbiAgICovXG4gIGJ1aWxkTGVhdmVzKHBhcmVudE5vZGUsIGNvbHVtbkluZGV4LCBoZWFkZXJMZXZlbCkge1xuICAgIGxldCBleHRyYWN0aW9uTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAxO1xuICAgIGNvbnN0IGNvbHVtbnNTZXR0aW5ncyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLmdldEhlYWRlcnNTZXR0aW5ncyhoZWFkZXJMZXZlbCwgY29sdW1uSW5kZXgsIGV4dHJhY3Rpb25MZW5ndGgpO1xuICAgIGhlYWRlckxldmVsICs9IDE7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGNvbHVtbnNTZXR0aW5ncywgY29sdW1uU2V0dGluZ3MgPT4ge1xuICAgICAgY29uc3Qgbm9kZURhdGEgPSB7XG4gICAgICAgIC4uLmNvbHVtblNldHRpbmdzLFxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGhlYWRlciBsZXZlbCAodHJlZSBub2RlIGRlcHRoIGxldmVsKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge251bWJlcn1cbiAgICAgICAgICovXG4gICAgICAgIGhlYWRlckxldmVsOiBoZWFkZXJMZXZlbCAtIDEsXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqL1xuICAgICAgICBjb2x1bW5JbmRleFxuICAgICAgfTtcbiAgICAgIGxldCBub2RlO1xuICAgICAgaWYgKGhlYWRlckxldmVsID09PSAxKSB7XG4gICAgICAgIC8vIGZpbGwgdGhlIHJvb3Qgbm9kZVxuICAgICAgICBwYXJlbnROb2RlLmRhdGEgPSBub2RlRGF0YTtcbiAgICAgICAgbm9kZSA9IHBhcmVudE5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IF90cmVlLmRlZmF1bHQobm9kZURhdGEpO1xuICAgICAgICBwYXJlbnROb2RlLmFkZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGhlYWRlckxldmVsIDwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zb3VyY2VTZXR0aW5ncywgdGhpcykuZ2V0TGF5ZXJzQ291bnQoKSkge1xuICAgICAgICB0aGlzLmJ1aWxkTGVhdmVzKG5vZGUsIGNvbHVtbkluZGV4LCBoZWFkZXJMZXZlbCwgY29sdW1uU2V0dGluZ3Mub3JpZ0NvbHNwYW4pO1xuICAgICAgfVxuICAgICAgY29sdW1uSW5kZXggKz0gY29sdW1uU2V0dGluZ3Mub3JpZ0NvbHNwYW47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSB0cmVlIHRvIHRoZSBpbml0aWFsIHN0YXRlLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290Tm9kZXMsIHRoaXMpLmNsZWFyKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9yb290c0luZGV4LCB0aGlzKS5jbGVhcigpO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBIZWFkZXJzVHJlZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX3NvdXJjZVNldHRpbmdzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc291cmNlU2V0dGluZ3NcIikpO1xudmFyIF9oZWFkZXJzVHJlZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlYWRlcnNUcmVlXCIpKTtcbnZhciBfbm9kZU1vZGlmaWVycyA9IHJlcXVpcmUoXCIuL25vZGVNb2RpZmllcnNcIik7XG52YXIgX21hdHJpeEdlbmVyYXRvciA9IHJlcXVpcmUoXCIuL21hdHJpeEdlbmVyYXRvclwiKTtcbnZhciBfdHJlZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9kYXRhU3RydWN0dXJlcy90cmVlXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIFRoZSBzdGF0ZSBtYW5hZ2VyIGlzIGEgc291cmNlIG9mIHRydXRoIGZvciBuZXN0ZWQgaGVhZGVycyBjb25maWd1cmF0aW9uLlxuICogVGhlIHN0YXRlIGdlbmVyYXRpb24gcHJvY2VzcyBpcyBkaXZpZGVkIGludG8gdGhyZWUgc3RhZ2VzLlxuICpcbiAqICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIDEuIFVzZXItZGVmaW5lZCBjb25maWd1cmF0aW9uIG5vcm1hbGl6YXRpb247XG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgIOKUgiAgVGhlIHNvdXJjZSBzZXR0aW5ncyBjbGFzcyBub3JtYWxpemVzIGFuZCBzaGFyZXMgQVBJIGZvclxuICogICDilIIgICBTb3VyY2VTZXR0aW5ncyAgICDilIIgIHJhdyBzZXR0aW5ncyBwYXNzZWQgYnkgdGhlIGRldmVsb3Blci4gSXQgaXMgb25seSBjb25zdW1lZCBieVxuICogICDilIIgICAgICAgICAgICAgICAgICAgICDilIIgIHRoZSBoZWFkZXIgdHJlZSBtb2R1bGUuXG4gKiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiAgICAgICAgICAgICDilIJcbiAqICAgICAgICAgICAgXFzilIIvXG4gKiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAyLiBCdWlsZGluZyBhIHRyZWUgc3RydWN0dXJlIGZvciB2YWxpZGF0aW9uIGFuZCBlYXNpZXIgbm9kZSBtYW5pcHVsYXRpb247XG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgIOKUgiAgVGhlIGhlYWRlciB0cmVlIGdlbmVyYXRlcyBhIHRyZWUgYmFzZWQgb24gc291cmNlIHNldHRpbmdzIGZvciBmdXR1cmVcbiAqICAg4pSCICAgICBIZWFkZXJzVHJlZSAgICAg4pSCICBub2RlIG1hbmlwdWxhdGlvbiAoc3VjaCBhcyBjb2xsYXBzaWJsZSBjb2x1bW5zIGZlYXR1cmUpLiBXaGlsZSBnZW5lcmF0aW5nIGEgdHJlZVxuICogICDilIIgICAgICAgICAgICAgICAgICAgICDilIIgIHRoZSBzb3VyY2Ugc2V0dGluZ3MgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIGNvbmZpZ3VyYXRpb24gaGFzIG92ZXJsYXBwaW5nIGhlYWRlcnMuXG4gKiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rICBJZiBgdHJ1ZWAgdGhlIGNvbHNwYW4gbWF0cml4IGdlbmVyYXRpb24gaXMgc2tpcHBlZCwgb3ZlcmxhcHBlZCBoZWFkZXJzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogICAgICAgICAgICAg4pSCXG4gKiAgICAgICAgICAgIFxc4pSCL1xuICogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgMy4gTWF0cml4IGdlbmVyYXRpb247XG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgIOKUgiAgQmFzZWQgb24gYnVpbHQgdHJlZXMgdGhlIG1hdHJpeCBnZW5lcmF0aW9uIGlzIHBlcmZvcm1lZC4gVGhhdCBwYXJ0IG9mIGNvZGVcbiAqICAg4pSCICBtYXRyaXggZ2VuZXJhdGlvbiAg4pSCICBnZW5lcmF0ZXMgYW4gYXJyYXkgc3RydWN0dXJlIHNpbWlsYXIgdG8gbm9ybWFsaXplZCBkYXRhIGZyb20gdGhlIFNvdXJjZVNldHRpbmdzXG4gKiAgIOKUgiAgICAgICAgICAgICAgICAgICAgIOKUgiAgYnV0IHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCB0aGlzIHN0cnVjdHVyZSBjb250YWlucyBjb2x1bW4gc2V0dGluZ3Mgd2hpY2ggY2hhbmdlZFxuICogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgZHVyaW5nIHJ1bnRpbWUgKGFmdGVyIHRoZSB0cmVlIG1hbmlwdWxhdGlvbikgZS5xIGFmdGVyIGNvbGxhcHNlIG9yIGV4cGFuZCBjb2x1bW4uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGF0IHNldHRpbmdzIGRlc2NyaWJlcyBob3cgdGhlIFRIIGVsZW1lbnQgc2hvdWxkIGJlIG1vZGlmaWVkIChjb2xzcGFuIGF0dHJpYnV0ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTUyBjbGFzc2VzLCBldGMpIGZvciBhIHNwZWNpZmljIGNvbHVtbiBhbmQgbGF5ZXIgbGV2ZWwuXG4gKlxuICogQGNsYXNzIFN0YXRlTWFuYWdlclxuICovXG52YXIgX3NvdXJjZVNldHRpbmdzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2hlYWRlcnNUcmVlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3N0YXRlTWF0cml4ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBTdGF0ZU1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHNvdXJjZSBzZXR0aW5ncyBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge1NvdXJjZVNldHRpbmdzfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zb3VyY2VTZXR0aW5ncywgbmV3IF9zb3VyY2VTZXR0aW5nczIuZGVmYXVsdCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIGhlYWRlcnMgdHJlZS4gVGhlIHRyZWUgaXMgZ2VuZXJhdGVkIGFmdGVyIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gZGF0YS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hlYWRlcnNUcmVlfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9oZWFkZXJzVHJlZSwgbmV3IF9oZWFkZXJzVHJlZTIuZGVmYXVsdChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzKSkpO1xuICAgIC8qKlxuICAgICAqIENhY2hlZCBtYXRyaXggd2hpY2ggaXMgZ2VuZXJhdGVkIGZyb20gdGhlIHRyZWUgc3RydWN0dXJlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXlbXX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc3RhdGVNYXRyaXgsIFtbXV0pO1xuICB9XG4gIC8qKlxuICAgKiBTZXRzIGEgbmV3IHN0YXRlIGZvciB0aGUgbmVzdGVkIGhlYWRlcnMgcGx1Z2luIGJhc2VkIG9uIHNldHRpbmdzIHBhc3NlZFxuICAgKiBkaXJlY3RseSB0byB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5W119IG5lc3RlZEhlYWRlcnNTZXR0aW5ncyBUaGUgdXNlci1kZWZpbmVkIHNldHRpbmdzLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNldHRpbmdzIGFyZSBwcm9jZXNzZWQgY29ycmVjdGx5LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHNldFN0YXRlKG5lc3RlZEhlYWRlcnNTZXR0aW5ncykge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLnNldERhdGEobmVzdGVkSGVhZGVyc1NldHRpbmdzKTtcbiAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oZWFkZXJzVHJlZSwgdGhpcykuYnVpbGRUcmVlKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmNsZWFyKCk7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzKS5jbGVhcigpO1xuICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3N0YXRlTWF0cml4LCB0aGlzLCAoMCwgX21hdHJpeEdlbmVyYXRvci5nZW5lcmF0ZU1hdHJpeCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oZWFkZXJzVHJlZSwgdGhpcykuZ2V0Um9vdHMoKSkpO1xuICAgIHJldHVybiBoYXNFcnJvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGNvbHVtbnMgbGltaXQgdG8gdGhlIHN0YXRlIHdpbGwgYmUgdHJpbW1lZC4gQWxsIGhlYWRlcnMgKGNvbHNwYW5zKSB3aGljaFxuICAgKiBvdmVybGFwIHRoZSBjb2x1bW4gbGltaXQgd2lsbCBiZSByZWR1Y2VkIHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBzb2xpZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnNDb3VudCBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gbGltaXQgdG8uXG4gICAqL1xuICBzZXRDb2x1bW5zTGltaXQoY29sdW1uc0NvdW50KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zb3VyY2VTZXR0aW5ncywgdGhpcykuc2V0Q29sdW1uc0xpbWl0KGNvbHVtbnNDb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHNldHRpbmdzIHdpdGggY3VycmVudCBwbHVnaW4gc3RhdGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgb25seSBmb3JlaWduIGtleXMgYXJlIG1lcmdlZCB3aXRoIHNvdXJjZSBzdGF0ZSBhbmQgcGFzc2VkIHRvIHRoZSB0cmVlLiBCdXQgb25seVxuICAgKiBrbm93biBrZXlzIGFyZSBleHBvcnRlZCB0byBtYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IHNldHRpbmdzIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gbWVyZ2Ugd2l0aCB0aGUgY3VycmVudCBzb3VyY2Ugc2V0dGluZ3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGEgcmVxdWlyZW1lbnQgdGhhdCBldmVyeSBvYmplY3QgaGFzIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHBvaW50cyB0byB0aGUgc3BlY2lmaWMgaGVhZGVyIHNldHRpbmdzIG9iamVjdC5cbiAgICovXG4gIG1lcmdlU3RhdGVXaXRoKHNldHRpbmdzKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRTZXR0aW5ncyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKHNldHRpbmdzLCBfcmVmID0+IHtcbiAgICAgIGxldCB7XG4gICAgICAgIHJvdyxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IF9yZWY7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IHJvdyA8IDAgPyB0aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwocm93KSA6IHJvdyxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzKS5tZXJnZVdpdGgodHJhbnNmb3JtZWRTZXR0aW5ncyk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oZWFkZXJzVHJlZSwgdGhpcykuYnVpbGRUcmVlKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdGF0ZU1hdHJpeCwgdGhpcywgKDAsIF9tYXRyaXhHZW5lcmF0b3IuZ2VuZXJhdGVNYXRyaXgpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmdldFJvb3RzKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHRoZSBjdXJyZW50IHN0YXRlIHdpdGggYSBjYWxsYmFjay4gRm9yIGVhY2ggaGVhZGVyIHNldHRpbmdzIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICAgKiBpcyBjYWxsZWQuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHZhbHVlIHRoYXQgdmFsdWUgaXMgbWVyZ2VkIHdpdGggdGhlIHN0YXRlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0IG9ubHkgZm9yZWlnbiBrZXlzIGFyZSBtZXJnZWQgd2l0aCBzb3VyY2Ugc3RhdGUgYW5kIHBhc3NlZCB0byB0aGUgdHJlZS4gQnV0IG9ubHlcbiAgICoga25vd24ga2V5cyBhcmUgZXhwb3J0ZWQgdG8gbWF0cml4LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBldmVyeSBoZWFkZXIgc291cmNlIHNldHRpbmdzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYWNoIHRpbWUgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCwgdGhlIHJldHVybmVkIHZhbHVlIGV4dGVuZHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyIHNldHRpbmdzLlxuICAgKi9cbiAgbWFwU3RhdGUoY2FsbGJhY2spIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzKS5tYXAoY2FsbGJhY2spO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmJ1aWxkVHJlZSgpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc3RhdGVNYXRyaXgsIHRoaXMsICgwLCBfbWF0cml4R2VuZXJhdG9yLmdlbmVyYXRlTWF0cml4KShfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hlYWRlcnNUcmVlLCB0aGlzKS5nZXRSb290cygpKSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyB0aGUgY3VycmVudCB0cmVlIG5vZGVzIHdpdGggYSBjYWxsYmFjay4gRm9yIGVhY2ggbm9kZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogaXMgY2FsbGVkLiBJZiB0aGUgZnVuY3Rpb24gcmV0dXJucyB2YWx1ZSB0aGF0IHZhbHVlIGlzIGFkZGVkIHRvIHJldHVybmVkIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBldmVyeSB0cmVlIG5vZGUuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdGltZSB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgdG8gcmV0dXJuZWQgYXJyYXkuXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIG1hcE5vZGVzKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmdldFJvb3RzKCksIChhY2MsIHJvb3ROb2RlKSA9PiB7XG4gICAgICByb290Tm9kZS53YWxrRG93bihub2RlID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2sobm9kZS5kYXRhKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWNjLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhbiBhY3Rpb24gKGUuZy4gXCJjb2xsYXBzZVwiKSBmcm9tIHRoZSBOb2RlTW9kaWZpZXJzIG1vZHVsZS4gVGhlIG1vZHVsZVxuICAgKiBtb2RpZmllcyBhIHRyZWUgc3RydWN0dXJlIGluIHN1Y2ggYSB3YXkgYXMgdG8gb2J0YWluIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBjb25zaXN0ZW50IHdpdGggdGhlXG4gICAqIGNhbGxlZCBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gQW4gYWN0aW9uIG5hbWUgdG8gdHJpZ2dlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIEhlYWRlciBsZXZlbCBpbmRleCAodGhlcmUgaXMgc3VwcG9ydCBmb3IgbmVnYXRpdmUgYW5kIHBvc2l0aXZlIHZhbHVlcykuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgdHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYWN0aW9uLCBoZWFkZXJMZXZlbCwgY29sdW1uSW5kZXgpIHtcbiAgICBpZiAoaGVhZGVyTGV2ZWwgPCAwKSB7XG4gICAgICBoZWFkZXJMZXZlbCA9IHRoaXMucm93Q29vcmRzVG9MZXZlbChoZWFkZXJMZXZlbCk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVUb1Byb2Nlc3MgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hlYWRlcnNUcmVlLCB0aGlzKS5nZXROb2RlKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCk7XG4gICAgbGV0IGFjdGlvblJlc3VsdDtcbiAgICBpZiAobm9kZVRvUHJvY2Vzcykge1xuICAgICAgYWN0aW9uUmVzdWx0ID0gKDAsIF9ub2RlTW9kaWZpZXJzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKShhY3Rpb24sIG5vZGVUb1Byb2Nlc3MsIGNvbHVtbkluZGV4KTtcblxuICAgICAgLy8gVE9ETyAocGVyZi10aXApOiBUcmlnZ2VyIG1hdHJpeCBnZW5lcmF0aW9uIG9uY2UgYWZ0ZXIgbXVsdGlwbGUgbm9kZSBtb2RpZmljYXRpb25zLlxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdGF0ZU1hdHJpeCwgdGhpcywgKDAsIF9tYXRyaXhHZW5lcmF0b3IuZ2VuZXJhdGVNYXRyaXgpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmdldFJvb3RzKCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvblJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhbiBhY3Rpb24gKGUuZy4gXCJoaWRlLWNvbHVtblwiKSBmcm9tIHRoZSBOb2RlTW9kaWZpZXJzIG1vZHVsZS4gVGhlIGFjdGlvbiBpc1xuICAgKiB0cmlnZ2VyZWQgc3RhcnRpbmcgZnJvbSB0aGUgbG93ZXN0IGhlYWRlci4gVGhlIG1vZHVsZSBtb2RpZmllcyBhIHRyZWUgc3RydWN0dXJlIGluXG4gICAqIHN1Y2ggYSB3YXkgYXMgdG8gb2J0YWluIHRoZSBjb3JyZWN0IHN0cnVjdHVyZSBjb25zaXN0ZW50IHdpdGggdGhlIGNhbGxlZCBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb24gQW4gYWN0aW9uIG5hbWUgdG8gdHJpZ2dlci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdHx1bmRlZmluZWR9XG4gICAqL1xuICB0cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGFjdGlvbiwgY29sdW1uSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhY3Rpb24sIC0xLCBjb2x1bW5JbmRleCk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgU3RhdGVNYW5hZ2VyI1xuICAgKiBAZnVuY3Rpb24gcm93Q29vcmRzVG9MZXZlbFxuICAgKlxuICAgKiBUcmFuc2xhdGVzIHJvdyBjb29yZGluYXRlcyBpbnRvIGhlYWRlciBsZXZlbC4gVGhlIHJvdyBjb29yZGluYXRlcyBjb3VudHMgZnJvbSAtMSB0byAtTlxuICAgKiBhbmQgZGVzY3JpYmVzIGhlYWRlcnMgY291bnRpbmcgZnJvbSBtb3N0IGNsb3Nlc3QgdG8gbW9zdCBkaXN0YW50IGZyb20gdGhlIHRhYmxlLlxuICAgKiBUaGUgaGVhZGVyIGxldmVscyBhcmUgY291bnRlZCBmcm9tIDAgdG8gTiB3aGVyZSAwIGRlc2NyaWJlcyBtb3N0IGRpc3RhbnQgaGVhZGVyXG4gICAqIGZyb20gdGhlIHRhYmxlLlxuICAgKlxuICAgKiAgUm93IGNvb3JkcyAgICAgICAgICAgICBIZWFkZXIgbGV2ZWxcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgLTMgIOKUgiBBMSDilIIgQTEgICAgICDilIIgIDBcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgLTIgIOKUgiBCMSDilIIgQjIg4pSCIEIzIOKUgiAgMVxuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAtMSAg4pSCIEMxIOKUgiBDMiDilIIgQzMg4pSCICAyXG4gICAqICAgICAgICAgICArPT09PT09PT09PT09PT0rXG4gICAqICAgICAgICAgICDilIIgICAg4pSCICAgIOKUgiAgICDilIJcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUglxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93SW5kZXggQSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9IFJldHVybnMgdW5zaWduZWQgbnVtYmVyLlxuICAgKi9cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIHJvd0Nvb3Jkc1RvTGV2ZWwocm93SW5kZXgpIHtcbiAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlckxldmVsID0gcm93SW5kZXggKyBNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksIDEpO1xuICAgIGlmIChoZWFkZXJMZXZlbCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyTGV2ZWw7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgU3RhdGVNYW5hZ2VyI1xuICAgKiBAZnVuY3Rpb24gbGV2ZWxUb1Jvd0Nvb3Jkc1xuICAgKlxuICAgKiBUcmFuc2xhdGVzIGhlYWRlciBsZXZlbCBpbnRvIHJvdyBjb29yZGluYXRlcy4gVGhlIHJvdyBjb29yZGluYXRlcyBjb3VudHMgZnJvbSAtMSB0byAtTlxuICAgKiBhbmQgZGVzY3JpYmVzIGhlYWRlcnMgY291bnRpbmcgZnJvbSBtb3N0IGNsb3Nlc3QgdG8gbW9zdCBkaXN0YW50IGZyb20gdGhlIHRhYmxlLlxuICAgKiBUaGUgaGVhZGVyIGxldmVscyBhcmUgY291bnRlZCBmcm9tIDAgdG8gTiB3aGVyZSAwIGRlc2NyaWJlcyBtb3N0IGRpc3RhbnQgaGVhZGVyXG4gICAqIGZyb20gdGhlIHRhYmxlLlxuICAgKlxuICAgKiAgSGVhZGVyIGxldmVsICAgICAgICAgICAgUm93IGNvb3Jkc1xuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgMCAg4pSCIEExIOKUgiBBMSAgICAgIOKUgiAgLTNcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgIDEgIOKUgiBCMSDilIIgQjIg4pSCIEIzIOKUgiAgLTJcbiAgICogICAgICAgICAgICstLS0tLS0tLS0tLS0tLStcbiAgICogICAgICAgIDIgIOKUgiBDMSDilIIgQzIg4pSCIEMzIOKUgiAgLTFcbiAgICogICAgICAgICAgICs9PT09PT09PT09PT09PStcbiAgICogICAgICAgICAgIOKUgiAgICDilIIgICAg4pSCICAgIOKUglxuICAgKiAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tK1xuICAgKiAgICAgICAgICAg4pSCICAgIOKUgiAgICDilIIgICAg4pSCXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBIZWFkZXIgbGV2ZWwgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgbmVnYXRpdmUgbnVtYmVyLlxuICAgKi9cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIGxldmVsVG9Sb3dDb29yZHMoaGVhZGVyTGV2ZWwpIHtcbiAgICBpZiAoaGVhZGVyTGV2ZWwgPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgcm93SW5kZXggPSBoZWFkZXJMZXZlbCAtIE1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwgMSk7XG4gICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcm93SW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb2x1bW4gaGVhZGVyIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBjb2x1bW4gYW5kIGhlYWRlciBpbmRleC4gVGhlIHJldHVybmVkIG9iamVjdCBjb250YWluc1xuICAgKiBhbGwgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBoZWFkZXIgcmVuZGVyZXJzLiBJdCBjb250YWlucyBoZWFkZXIgbGFiZWwsIGNvbHNwYW4gbGVuZ3RoLCBvciBoaWRkZW5cbiAgICogZmxhZy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIEhlYWRlciBsZXZlbCAodGhlcmUgaXMgc3VwcG9ydCBmb3IgbmVnYXRpdmUgYW5kIHBvc2l0aXZlIHZhbHVlcykuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtvYmplY3R8bnVsbH1cbiAgICovXG4gIGdldEhlYWRlclNldHRpbmdzKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCkge1xuICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQyLCBfY2xhc3NQcml2YXRlRmllbGRHZXQzO1xuICAgIGlmIChoZWFkZXJMZXZlbCA8IDApIHtcbiAgICAgIGhlYWRlckxldmVsID0gdGhpcy5yb3dDb29yZHNUb0xldmVsKGhlYWRlckxldmVsKTtcbiAgICB9XG4gICAgaWYgKGhlYWRlckxldmVsID09PSBudWxsIHx8IGhlYWRlckxldmVsID49IHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA9IChfY2xhc3NQcml2YXRlRmllbGRHZXQzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9zdGF0ZU1hdHJpeCwgdGhpcylbaGVhZGVyTGV2ZWxdKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQzW2NvbHVtbkluZGV4XSkgIT09IG51bGwgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiAhPT0gdm9pZCAwID8gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MiA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0cmVlIGRhdGEgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIGNvbHVtbiBoZWFkZXIuIFRoZSByZXR1cm5lZCBvYmplY3QgY29udGFpbnMgYWxsIGluZm9ybWF0aW9uXG4gICAqIG5lY2Vzc2FyeSBmb3IgbW9kaWZ5aW5nIHRyZWUgc3RydWN0dXJlIChjb2x1bW4gY29sbGFwc2luZywgaGlkaW5nLCBldGMuKS4gSXQgY29udGFpbnMgYSBoZWFkZXJcbiAgICogbGFiZWwsIGNvbHNwYW4gbGVuZ3RoLCBvciB2aXN1YWwgY29sdW1uIGluZGV4IHRoYXQgaW5kaWNhdGVzIHdoaWNoIGNvbHVtbiBpbmRleCB0aGUgbm9kZSBpcyByZW5kZXJlZCBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgSGVhZGVyIGxldmVsICh0aGVyZSBpcyBzdXBwb3J0IGZvciBuZWdhdGl2ZSBhbmQgcG9zaXRpdmUgdmFsdWVzKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfVxuICAgKi9cbiAgZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldEhlYWRlclRyZWVOb2RlKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5vZGUuZGF0YVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0cmVlIG5vZGUgdGhhdCBpcyBjb25uZWN0ZWQgdG8gdGhlIGNvbHVtbiBoZWFkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBIZWFkZXIgbGV2ZWwgKHRoZXJlIGlzIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGFuZCBwb3NpdGl2ZSB2YWx1ZXMpLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggQSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7VHJlZU5vZGV8bnVsbH1cbiAgICovXG4gIGdldEhlYWRlclRyZWVOb2RlKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCkge1xuICAgIGlmIChoZWFkZXJMZXZlbCA8IDApIHtcbiAgICAgIGhlYWRlckxldmVsID0gdGhpcy5yb3dDb29yZHNUb0xldmVsKGhlYWRlckxldmVsKTtcbiAgICB9XG4gICAgaWYgKGhlYWRlckxldmVsID09PSBudWxsIHx8IGhlYWRlckxldmVsID49IHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2hlYWRlcnNUcmVlLCB0aGlzKS5nZXROb2RlKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG1vc3QgdG9wIGhlYWRlciBsZXZlbCBvZiB0aGUgY29sdW1uIGhlYWRlciB0aGF0IGlzIHJlbmRlcmVkIGVudGlyZWx5IHdpdGhpblxuICAgKiB0aGUgcGFzc2VkIHZpc3VhbCBjb2x1bW5zIHJhbmdlLiBJZiBtdWx0aXBsZSBjb2x1bW5zIGhlYWRlcnMgYXJlIGZvdW5kIHdpdGhpbiB0aGUgcmFuZ2UgdGhlXG4gICAqIG1vc3QgdG9wIGhlYWRlciBsZXZlbCB2YWx1ZSB3aWxsIGJlIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXhGcm9tIEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5JbmRleFRvXSBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYSBoZWFkZXIgbGV2ZWwgaW4gZm9ybWF0IC0xIHRvIC1OLlxuICAgKi9cbiAgZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChjb2x1bW5JbmRleEZyb20pIHtcbiAgICB2YXIgX2hlYWRlckxldmVsO1xuICAgIGxldCBjb2x1bW5JbmRleFRvID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBjb2x1bW5JbmRleEZyb207XG4gICAgY29uc3QgY29sdW1uc1dpZHRoID0gY29sdW1uSW5kZXhUbyAtIGNvbHVtbkluZGV4RnJvbSArIDE7XG4gICAgbGV0IGF0TGVhc3RPbmVSb290Rm91bmQgPSBmYWxzZTtcbiAgICBsZXQgaGVhZGVyTGV2ZWwgPSBudWxsO1xuICAgIGZvciAobGV0IGNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhGcm9tOyBjb2x1bW5JbmRleCA8PSBjb2x1bW5JbmRleFRvOyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICBjb25zdCByb290Tm9kZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaGVhZGVyc1RyZWUsIHRoaXMpLmdldFJvb3RCeUNvbHVtbihjb2x1bW5JbmRleCk7XG4gICAgICBpZiAoIXJvb3ROb2RlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgYXRMZWFzdE9uZVJvb3RGb3VuZCA9IHRydWU7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgcm9vdE5vZGUud2Fsa0Rvd24obm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb2x1bW5JbmRleDogbm9kZUNvbHVtbkluZGV4LFxuICAgICAgICAgIGhlYWRlckxldmVsOiBub2RlSGVhZGVyTGV2ZWwsXG4gICAgICAgICAgb3JpZ0NvbHNwYW4sXG4gICAgICAgICAgaXNIaWRkZW5cbiAgICAgICAgfSA9IG5vZGUuZGF0YTtcbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlIGhlYWRlciBmaXRzIGVudGlyZWx5IHdpdGhpbiB0aGUgY29sdW1ucyByYW5nZSBnZXQgYW5kIHNhdmUgdGhlIG5vZGUgaGVhZGVyIGxldmVsXG4gICAgICAgIGlmIChvcmlnQ29sc3BhbiA8PSBjb2x1bW5zV2lkdGggJiYgbm9kZUNvbHVtbkluZGV4ID49IGNvbHVtbkluZGV4RnJvbSAmJiBub2RlQ29sdW1uSW5kZXggKyBvcmlnQ29sc3BhbiAtIDEgPD0gY29sdW1uSW5kZXhUbyAmJiAoaGVhZGVyTGV2ZWwgPT09IG51bGwgfHwgbm9kZUhlYWRlckxldmVsIDwgaGVhZGVyTGV2ZWwpKSB7XG4gICAgICAgICAgaGVhZGVyTGV2ZWwgPSBub2RlSGVhZGVyTGV2ZWw7XG4gICAgICAgIH1cbiAgICAgIH0sIF90cmVlLlRSQVZFUlNBTF9ERl9QUkUpO1xuICAgIH1cbiAgICBpZiAoYXRMZWFzdE9uZVJvb3RGb3VuZCAmJiBoZWFkZXJMZXZlbCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5sZXZlbFRvUm93Q29vcmRzKChfaGVhZGVyTGV2ZWwgPSBoZWFkZXJMZXZlbCkgIT09IG51bGwgJiYgX2hlYWRlckxldmVsICE9PSB2b2lkIDAgPyBfaGVhZGVyTGV2ZWwgOiAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGlzIGhlbHBmdWwgaW4gY2FzZXMgd2hlcmUgdGhlIGNvbHVtbiBpbmRleCB0YXJnZXRzIGluLWJldHdlZW4gY3VycmVudGx5XG4gICAqIGNvbGxhcHNlZCBjb2x1bW4uIEluIHRoYXQgY2FzZSwgdGhlIG1ldGhvZCByZXR1cm5zIHRoZSBsZWZ0LW1vc3QgY29sdW1uIGluZGV4XG4gICAqIHdoZXJlIHRoZSBuZXN0ZWQgaGVhZGVyIGJlZ2lucy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIEhlYWRlciBsZXZlbCAodGhlcmUgaXMgc3VwcG9ydCBmb3IgbmVnYXRpdmUgYW5kIHBvc2l0aXZlIHZhbHVlcykuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmaW5kTGVmdE1vc3RDb2x1bW5JbmRleChoZWFkZXJMZXZlbCwgY29sdW1uSW5kZXgpIHtcbiAgICB2YXIgX3RoaXMkZ2V0SGVhZGVyU2V0dGluO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzUm9vdFxuICAgIH0gPSAoX3RoaXMkZ2V0SGVhZGVyU2V0dGluID0gdGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhoZWFkZXJMZXZlbCwgY29sdW1uSW5kZXgpKSAhPT0gbnVsbCAmJiBfdGhpcyRnZXRIZWFkZXJTZXR0aW4gIT09IHZvaWQgMCA/IF90aGlzJGdldEhlYWRlclNldHRpbiA6IHtcbiAgICAgIGlzUm9vdDogdHJ1ZVxuICAgIH07XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgcmV0dXJuIGNvbHVtbkluZGV4O1xuICAgIH1cbiAgICBsZXQgc3RlcEJhY2tDb2x1bW4gPSBjb2x1bW5JbmRleCAtIDE7XG4gICAgd2hpbGUgKHN0ZXBCYWNrQ29sdW1uID49IDApIHtcbiAgICAgIHZhciBfdGhpcyRnZXRIZWFkZXJTZXR0aW4yO1xuICAgICAgY29uc3Qge1xuICAgICAgICBpc1Jvb3Q6IGlzUm9vdE5vZGVcbiAgICAgIH0gPSAoX3RoaXMkZ2V0SGVhZGVyU2V0dGluMiA9IHRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIHN0ZXBCYWNrQ29sdW1uKSkgIT09IG51bGwgJiYgX3RoaXMkZ2V0SGVhZGVyU2V0dGluMiAhPT0gdm9pZCAwID8gX3RoaXMkZ2V0SGVhZGVyU2V0dGluMiA6IHtcbiAgICAgICAgaXNSb290OiB0cnVlXG4gICAgICB9O1xuICAgICAgaWYgKGlzUm9vdE5vZGUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBzdGVwQmFja0NvbHVtbiAtPSAxO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEJhY2tDb2x1bW47XG4gIH1cblxuICAvKipcbiAgICogVGhlIG1ldGhvZCBpcyBoZWxwZnVsIGluIGNhc2VzIHdoZXJlIHRoZSBjb2x1bW4gaW5kZXggdGFyZ2V0cyBpbi1iZXR3ZWVuIGN1cnJlbnRseVxuICAgKiBjb2xsYXBzZWQgY29sdW1uLiBJbiB0aGF0IGNhc2UsIHRoZSBtZXRob2QgcmV0dXJucyB0aGUgcmlnaHQtbW9zdCBjb2x1bW4gaW5kZXhcbiAgICogd2hlcmUgdGhlIG5lc3RlZCBoZWFkZXIgZW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhlYWRlckxldmVsIEhlYWRlciBsZXZlbCAodGhlcmUgaXMgc3VwcG9ydCBmb3IgbmVnYXRpdmUgYW5kIHBvc2l0aXZlIHZhbHVlcykuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBBIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmaW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoaGVhZGVyTGV2ZWwsIGNvbHVtbkluZGV4KSB7XG4gICAgdmFyIF90aGlzJGdldEhlYWRlclNldHRpbjM7XG4gICAgY29uc3Qge1xuICAgICAgaXNSb290LFxuICAgICAgb3JpZ0NvbHNwYW5cbiAgICB9ID0gKF90aGlzJGdldEhlYWRlclNldHRpbjMgPSB0aGlzLmdldEhlYWRlclNldHRpbmdzKGhlYWRlckxldmVsLCBjb2x1bW5JbmRleCkpICE9PSBudWxsICYmIF90aGlzJGdldEhlYWRlclNldHRpbjMgIT09IHZvaWQgMCA/IF90aGlzJGdldEhlYWRlclNldHRpbjMgOiB7XG4gICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICBvcmlnQ29sc3BhbjogMVxuICAgIH07XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgcmV0dXJuIGNvbHVtbkluZGV4ICsgb3JpZ0NvbHNwYW4gLSAxO1xuICAgIH1cbiAgICBsZXQgc3RlcEZvcnRoQ29sdW1uID0gY29sdW1uSW5kZXggKyAxO1xuICAgIHdoaWxlIChzdGVwRm9ydGhDb2x1bW4gPCB0aGlzLmdldENvbHVtbnNDb3VudCgpKSB7XG4gICAgICB2YXIgX3RoaXMkZ2V0SGVhZGVyU2V0dGluNDtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaXNSb290OiBpc1Jvb3ROb2RlXG4gICAgICB9ID0gKF90aGlzJGdldEhlYWRlclNldHRpbjQgPSB0aGlzLmdldEhlYWRlclNldHRpbmdzKGhlYWRlckxldmVsLCBzdGVwRm9ydGhDb2x1bW4pKSAhPT0gbnVsbCAmJiBfdGhpcyRnZXRIZWFkZXJTZXR0aW40ICE9PSB2b2lkIDAgPyBfdGhpcyRnZXRIZWFkZXJTZXR0aW40IDoge1xuICAgICAgICBpc1Jvb3Q6IHRydWVcbiAgICAgIH07XG4gICAgICBpZiAoaXNSb290Tm9kZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0ZXBGb3J0aENvbHVtbiArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gc3RlcEZvcnRoQ29sdW1uIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdG90YWwgbnVtYmVyIG9mIGhlYWRlcnMgbGV2ZWxzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGF5ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLmdldExheWVyc0NvdW50KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Q29sdW1uc0NvdW50KCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NvdXJjZVNldHRpbmdzLCB0aGlzKS5nZXRDb2x1bW5zQ291bnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGNvbHVtbiBzdGF0ZSBtYW5hZ2VyIHRvIHRoZSBpbml0aWFsIHN0YXRlLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zdGF0ZU1hdHJpeCwgdGhpcywgW10pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc291cmNlU2V0dGluZ3MsIHRoaXMpLmNsZWFyKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9oZWFkZXJzVHJlZSwgdGhpcykuY2xlYXIoKTtcbiAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gU3RhdGVNYW5hZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZW5lcmF0ZU1hdHJpeCA9IGdlbmVyYXRlTWF0cml4O1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkdW1wIGEgdHJlZSBzdHJ1Y3R1cmUgaW50byBtdWx0aWRpbWVuc2lvbmFsIGFycmF5LiBUaGF0IHN0cnVjdHVyZSBpc1xuICogbGF0ZXIgcHJvY2Vzc2VkIGJ5IGhlYWRlciByZW5kZXJlcnMgdG8gbW9kaWZ5IFRIIGVsZW1lbnRzIHRvIGFjaGlldmUgYSBwcm9wZXJcbiAqIERPTSBzdHJ1Y3R1cmUuXG4gKlxuICogVGhhdCBzdHJ1Y3R1cmUgY29udGFpbnMgc2V0dGluZ3Mgb2JqZWN0IGZvciBldmVyeSBUSCBlbGVtZW50IGdlbmVyYXRlZCBieSBXYWxrb250YWJsZS5cbiAqIFRoZSBtYXRyaXggb3BlcmF0ZXMgb24gdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqXG4gKiBPdXRwdXQgZXhhbXBsZTpcbiAqICAgW1xuICogICAgIFtcbiAqICAgICAgIHsgbGFiZWw6ICdBMScsIGNvbHNwYW46IDIsIG9yaWdDb2xzcGFuOiAyLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogdHJ1ZSwgLi4uIH0sXG4gKiAgICAgICB7IGxhYmVsOiAnJywgY29sc3BhbjogMSwgb3JpZ0NvbHNwYW46IDEsIGlzSGlkZGVuOiBmYWxzZSwgLi4uIH0sXG4gKiAgICAgXSxcbiAqICAgICBbXG4gKiAgICAgICB7IGxhYmVsOiAndHJ1ZScsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJ0IyJywgY29sc3BhbjogMSwgb3JpZ0NvbHNwYW46IDEsIGlzSGlkZGVuOiBmYWxzZSwgLi4uIH0sXG4gKiAgICAgICB7IGxhYmVsOiAnNCcsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgIF0sXG4gKiAgICAgW1xuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIG9yaWdDb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgIF0sXG4gKiAgIF1cbiAqXG4gKiBAcGFyYW0ge1RyZWVOb2RlW119IGhlYWRlclJvb3RzIEFuIGFycmF5IG9mIHJvb3Qgbm9kZXMuXG4gKiBAcmV0dXJucyB7QXJyYXlbXX1cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVNYXRyaXgoaGVhZGVyUm9vdHMpIHtcbiAgY29uc3QgbWF0cml4ID0gW107XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShoZWFkZXJSb290cywgcm9vdE5vZGUgPT4ge1xuICAgIHJvb3ROb2RlLndhbGtEb3duKG5vZGUgPT4ge1xuICAgICAgY29uc3Qgbm9kZURhdGEgPSBub2RlLmRhdGE7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9yaWdDb2xzcGFuLFxuICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgaGVhZGVyTGV2ZWwsXG4gICAgICAgIGNyb3NzSGlkZGVuQ29sdW1uc1xuICAgICAgfSA9IG5vZGVEYXRhO1xuICAgICAgY29uc3QgY29sc3BhbkhlYWRlckxheWVyID0gY3JlYXRlTmVzdGVkQXJyYXlJZk5lY2Vzc2FyeShtYXRyaXgsIGhlYWRlckxldmVsKTtcbiAgICAgIGxldCBpc1Jvb3RTZXR0aW5nc0ZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBpID0gY29sdW1uSW5kZXg7IGkgPCBjb2x1bW5JbmRleCArIG9yaWdDb2xzcGFuOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNDb2x1bW5IaWRkZW4gPSBjcm9zc0hpZGRlbkNvbHVtbnMuaW5jbHVkZXMoaSk7XG4gICAgICAgIGlmIChpc0NvbHVtbkhpZGRlbiB8fCBpc1Jvb3RTZXR0aW5nc0ZvdW5kKSB7XG4gICAgICAgICAgY29sc3BhbkhlYWRlckxheWVyLnB1c2goKDAsIF91dGlscy5jcmVhdGVQbGFjZWhvbGRlckhlYWRlclNldHRpbmdzKShub2RlRGF0YSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclJvb3RTZXR0aW5ncyA9IGNyZWF0ZUhlYWRlclNldHRpbmdzKG5vZGVEYXRhKTtcbiAgICAgICAgICBoZWFkZXJSb290U2V0dGluZ3MuaXNSb290ID0gdHJ1ZTtcbiAgICAgICAgICBjb2xzcGFuSGVhZGVyTGF5ZXIucHVzaChoZWFkZXJSb290U2V0dGluZ3MpO1xuICAgICAgICAgIGlzUm9vdFNldHRpbmdzRm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gbWF0cml4O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgaGVhZGVyIHNldHRpbmdzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbm9kZURhdGEgVGhlIHRyZWUgZGF0YSBvYmplY3QuXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBjcmVhdGVIZWFkZXJTZXR0aW5ncyhub2RlRGF0YSkge1xuICAvLyBGb3IgdGhlIG1hdHJpeCBtb2R1bGUgd2UgZG8gbm90IG5lZWQgdG8gZXhwb3J0IFwiY3Jvc3NIaWRkZW5Db2x1bW5zXCIga2V5LiBJdCdzIHJlZHVuZGFudCBoZXJlLlxuICBjb25zdCB7XG4gICAgY3Jvc3NIaWRkZW5Db2x1bW5zLFxuICAgIC4uLmhlYWRlclJvb3RTZXR0aW5nc1xuICB9ID0gKDAsIF91dGlscy5jcmVhdGVEZWZhdWx0SGVhZGVyU2V0dGluZ3MpKG5vZGVEYXRhKTtcbiAgcmV0dXJuIGhlYWRlclJvb3RTZXR0aW5ncztcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBoZWxwZXIgd2hpY2ggZW5zdXJlcyB0aGF0IHN1YmFycmF5IGV4aXN0cyB1bmRlciBzcGVjaWZpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtBcnJheVtdfSBhcnJheSBBbiBhcnJheSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBBbiBhcnJheSBpbmRleCB1bmRlciB0aGUgc3ViYXJyYXkgc2hvdWxkIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5lc3RlZEFycmF5SWZOZWNlc3NhcnkoYXJyYXksIGluZGV4KSB7XG4gIGxldCBzdWJBcnJheTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlbaW5kZXhdKSkge1xuICAgIHN1YkFycmF5ID0gYXJyYXlbaW5kZXhdO1xuICB9IGVsc2Uge1xuICAgIHN1YkFycmF5ID0gW107XG4gICAgYXJyYXlbaW5kZXhdID0gc3ViQXJyYXk7XG4gIH1cbiAgcmV0dXJuIHN1YkFycmF5O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb2xsYXBzZU5vZGUgPSBjb2xsYXBzZU5vZGU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2V4cGFuZCA9IHJlcXVpcmUoXCIuL2V4cGFuZFwiKTtcbnZhciBfdHJlZSA9IHJlcXVpcmUoXCIuL3V0aWxzL3RyZWVcIik7XG4vKipcbiAqIENvbGxhcHNpbmcgYSBub2RlIGlzIGEgcHJvY2VzcyB3aGVyZSB0aGUgcHJvY2Vzc2luZyBub2RlIGlzIGNvbGxhcHNlZFxuICogdG8gdGhlIGNvbHNwYW4gd2lkdGggb2YgdGhlIGZpcnN0IGNoaWxkLiBBbGwgbm9kZSBjaGlsZHJlbiwgZXhjZXB0IHRoZVxuICogZmlyc3Qgb25lLCBhcmUgaGlkZGVuLiBUbyBwcmV2ZW50IGxvc2luZyBhIGN1cnJlbnQgc3RhdGUgb2Ygbm9kZSBjaGlsZHJlblxuICogb24gdGhlIHJpZ2h0LCBhbGwgbm9kZXMgYXJlIGNsb25lZCAoYW5kIHJlc3RvcmVkIHdoaWxlIGV4cGFuZGluZyksIGFuZFxuICogb25seSB0aGVuIG9yaWdpbmFsIG5vZGVzIGFyZSBtb2RpZmllZCAoaGlkZGVuIGluIHRoaXMgY2FzZSkuXG4gKlxuICogQHBhcmFtIHtUcmVlTm9kZX0gbm9kZVRvUHJvY2VzcyBBIHRyZWUgbm9kZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzOlxuICogICAgICAgICAgICAgICAgICAgIC0gcm9sbGJhY2tNb2RpZmljYXRpb246IFRoZSBmdW5jdGlvbiB0aGF0IHJvbGxiYWNrc1xuICogICAgICAgICAgICAgICAgICAgICAgdGhlIHRyZWUgdG8gdGhlIHByZXZpb3VzIHN0YXRlLlxuICogICAgICAgICAgICAgICAgICAgIC0gYWZmZWN0ZWRDb2x1bW5zOiBUaGUgbGlzdCBvZiB0aGUgdmlzdWFsIGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgaW5kZXhlcyB3aGljaCBhcmUgYWZmZWN0ZWQuIFRoYXQgbGlzdCBpcyBwYXNzZWRcbiAqICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBoaWRkZW5zIGNvbHVtbiBsb2dpYy5cbiAqICAgICAgICAgICAgICAgICAgICAtIGNvbHNwYW5Db21wZW5zYXRpb246IFRoZSBudW1iZXIgb2YgY29sc3BhbiBieVxuICogICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdGhlIHByb2Nlc3NlZCBub2RlIGNvbHNwYW4gd2FzIHJlZHVjZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbGxhcHNlTm9kZShub2RlVG9Qcm9jZXNzKSB7XG4gIHZhciBfZ2V0Rmlyc3RDaGlsZFByb3BlcnQ7XG4gIGNvbnN0IHtcbiAgICBkYXRhOiBub2RlRGF0YSxcbiAgICBjaGlsZHM6IG5vZGVDaGlsZHNcbiAgfSA9IG5vZGVUb1Byb2Nlc3M7XG4gIGlmIChub2RlRGF0YS5pc0NvbGxhcHNlZCB8fCBub2RlRGF0YS5pc0hpZGRlbiB8fCBub2RlRGF0YS5vcmlnQ29sc3BhbiA8PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvbGxiYWNrTW9kaWZpY2F0aW9uOiAoKSA9PiB7fSxcbiAgICAgIGFmZmVjdGVkQ29sdW1uczogW10sXG4gICAgICBjb2xzcGFuQ29tcGVuc2F0aW9uOiAwXG4gICAgfTtcbiAgfVxuICBjb25zdCBpc05vZGVSZWZsZWN0ZWQgPSAoMCwgX3RyZWUuaXNOb2RlUmVmbGVjdHNGaXJzdENoaWxkQ29sc3Bhbikobm9kZVRvUHJvY2Vzcyk7XG4gIGlmIChpc05vZGVSZWZsZWN0ZWQpIHtcbiAgICByZXR1cm4gY29sbGFwc2VOb2RlKG5vZGVDaGlsZHNbMF0pO1xuICB9XG4gIG5vZGVEYXRhLmlzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgY29uc3QgYWxsTGVhdmVzRXhjZXB0TW9zdExlZnQgPSBub2RlQ2hpbGRzLnNsaWNlKDEpO1xuICBjb25zdCBhZmZlY3RlZENvbHVtbnMgPSBuZXcgU2V0KCk7XG4gIGlmIChhbGxMZWF2ZXNFeGNlcHRNb3N0TGVmdC5sZW5ndGggPiAwKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGFsbExlYXZlc0V4Y2VwdE1vc3RMZWZ0LCBub2RlID0+IHtcbiAgICAgICgwLCBfdHJlZS50cmF2ZXJzZUhpZGRlbk5vZGVDb2x1bW5JbmRleGVzKShub2RlLCBncmlkQ29sdW1uSW5kZXggPT4ge1xuICAgICAgICBhZmZlY3RlZENvbHVtbnMuYWRkKGdyaWRDb2x1bW5JbmRleCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xvbmUgdGhlIHRyZWUgdG8gcHJlc2VydmUgb3JpZ2luYWwgdHJlZSBzdGF0ZSBhZnRlciBoZWFkZXIgZXhwYW5kaW5nLlxuICAgICAgbm9kZS5kYXRhLmNsb25lZFRyZWUgPSBub2RlLmNsb25lVHJlZSgpO1xuXG4gICAgICAvLyBIaWRlIGFsbCBsZWF2ZXMgZXhjZXB0IHRoZSBmaXJzdCBsZWFmIG9uIHRoZSBsZWZ0IChvbiBoZWFkZXJzIGNvbnRleHQgaGlkZSBhbGxcbiAgICAgIC8vIGhlYWRlcnMgb24gdGhlIHJpZ2h0KS5cbiAgICAgIG5vZGUud2Fsa0Rvd24oX3JlZiA9PiB7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgZGF0YVxuICAgICAgICB9ID0gX3JlZjtcbiAgICAgICAgZGF0YS5pc0hpZGRlbiA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7XG4gICAgICBvcmlnQ29sc3BhbixcbiAgICAgIGNvbHVtbkluZGV4XG4gICAgfSA9IG5vZGVEYXRhO1xuXG4gICAgLy8gQWRkIGNvbHVtbiB0byBcImFmZmVjdGVkXCIgc3RhcnRlZCBmcm9tIDEuIFRoZSBoZWFkZXIgd2l0aG91dCBjaGlsZHJlbiBjYW4gbm90IGJlXG4gICAgLy8gY29sbGFwc2VkIHNvIHRoZSBmaXJzdCBoYXZlIHRvIGJlIHZpc2libGUgKHVudG91Y2hlZCkuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcmlnQ29sc3BhbjsgaSsrKSB7XG4gICAgICBjb25zdCBncmlkQ29sdW1uSW5kZXggPSBjb2x1bW5JbmRleCArIGk7XG4gICAgICBhZmZlY3RlZENvbHVtbnMuYWRkKGdyaWRDb2x1bW5JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsY3VsYXRlIGJ5IGhvdyBtYW55IGNvbHNwYW4gaXQgbmVlZHMgdG8gcmVkdWNlIHRoZSBoZWFkaW5ncyB0byBtYXRjaCB0aGVtIHRvXG4gIC8vIHRoZSBmaXJzdCBjaGlsZCBjb2xzcGFuIHdpZHRoLlxuICBjb25zdCBjb2xzcGFuQ29tcGVuc2F0aW9uID0gbm9kZURhdGEuY29sc3BhbiAtICgoX2dldEZpcnN0Q2hpbGRQcm9wZXJ0ID0gKDAsIF90cmVlLmdldEZpcnN0Q2hpbGRQcm9wZXJ0eSkobm9kZVRvUHJvY2VzcywgJ2NvbHNwYW4nKSkgIT09IG51bGwgJiYgX2dldEZpcnN0Q2hpbGRQcm9wZXJ0ICE9PSB2b2lkIDAgPyBfZ2V0Rmlyc3RDaGlsZFByb3BlcnQgOiAxKTtcbiAgbm9kZVRvUHJvY2Vzcy53YWxrVXAobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YVxuICAgIH0gPSBub2RlO1xuICAgIGRhdGEuY29sc3BhbiAtPSBjb2xzcGFuQ29tcGVuc2F0aW9uO1xuICAgIGlmIChkYXRhLmNvbHNwYW4gPD0gMSkge1xuICAgICAgZGF0YS5jb2xzcGFuID0gMTtcbiAgICAgIGRhdGEuaXNDb2xsYXBzZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKDAsIF90cmVlLmlzTm9kZVJlZmxlY3RzRmlyc3RDaGlsZENvbHNwYW4pKG5vZGUpKSB7XG4gICAgICBkYXRhLmlzQ29sbGFwc2VkID0gKDAsIF90cmVlLmdldEZpcnN0Q2hpbGRQcm9wZXJ0eSkobm9kZSwgJ2lzQ29sbGFwc2VkJyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICByb2xsYmFja01vZGlmaWNhdGlvbjogKCkgPT4gKDAsIF9leHBhbmQuZXhwYW5kTm9kZSkobm9kZVRvUHJvY2VzcyksXG4gICAgYWZmZWN0ZWRDb2x1bW5zOiBBcnJheS5mcm9tKGFmZmVjdGVkQ29sdW1ucyksXG4gICAgY29sc3BhbkNvbXBlbnNhdGlvblxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5leHBhbmROb2RlID0gZXhwYW5kTm9kZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfY29sbGFwc2UgPSByZXF1aXJlKFwiLi9jb2xsYXBzZVwiKTtcbnZhciBfdHJlZSA9IHJlcXVpcmUoXCIuL3V0aWxzL3RyZWVcIik7XG4vKipcbiAqIEV4cGFuZGluZyBhIG5vZGUgaXMgYSBwcm9jZXNzIHdoZXJlIHRoZSBwcm9jZXNzaW5nIG5vZGUgaXMgZXhwYW5kZWQgdG9cbiAqIGl0cyBvcmlnaW5hbCBjb2xzcGFuIHdpZHRoLiBUbyByZXN0b3JlIGFuIG9yaWdpbmFsIHN0YXRlIG9mIGFsbCBub2RlXG4gKiBjaGlsZHJlbiBvbiB0aGUgcmlnaHQsIHRoZSBtb2RpZmllZCBub2RlcyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgY2xvbmVkXG4gKiBub2RlcyAodGhleSB3ZXJlIGNsb25lZCB3aGlsZSBjb2xsYXBzaW5nKS5cbiAqXG4gKiBAcGFyYW0ge1RyZWVOb2RlfSBub2RlVG9Qcm9jZXNzIEEgdHJlZSBub2RlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXM6XG4gKiAgICAgICAgICAgICAgICAgICAgLSByb2xsYmFja01vZGlmaWNhdGlvbjogVGhlIGZ1bmN0aW9uIHRoYXQgcm9sbGJhY2tzXG4gKiAgICAgICAgICAgICAgICAgICAgICB0aGUgdHJlZSB0byB0aGUgcHJldmlvdXMgc3RhdGUuXG4gKiAgICAgICAgICAgICAgICAgICAgLSBhZmZlY3RlZENvbHVtbnM6IFRoZSBsaXN0IG9mIHRoZSB2aXN1YWwgY29sdW1uXG4gKiAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzIHdoaWNoIGFyZSBhZmZlY3RlZC4gVGhhdCBsaXN0IGlzIHBhc3NlZFxuICogICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGhpZGRlbnMgY29sdW1uIGxvZ2ljLlxuICogICAgICAgICAgICAgICAgICAgIC0gY29sc3BhbkNvbXBlbnNhdGlvbjogVGhlIG51bWJlciBvZiBjb2xzcGFuIGJ5XG4gKiAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgcHJvY2Vzc2VkIG5vZGUgY29sc3BhbiB3YXMgaW5jcmVhc2VkLlxuICovXG5mdW5jdGlvbiBleHBhbmROb2RlKG5vZGVUb1Byb2Nlc3MpIHtcbiAgY29uc3Qge1xuICAgIGRhdGE6IG5vZGVEYXRhLFxuICAgIGNoaWxkczogbm9kZUNoaWxkc1xuICB9ID0gbm9kZVRvUHJvY2VzcztcbiAgaWYgKCFub2RlRGF0YS5pc0NvbGxhcHNlZCB8fCBub2RlRGF0YS5pc0hpZGRlbiB8fCBub2RlRGF0YS5vcmlnQ29sc3BhbiA8PSAxKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvbGxiYWNrTW9kaWZpY2F0aW9uOiAoKSA9PiB7fSxcbiAgICAgIGFmZmVjdGVkQ29sdW1uczogW10sXG4gICAgICBjb2xzcGFuQ29tcGVuc2F0aW9uOiAwXG4gICAgfTtcbiAgfVxuICBjb25zdCBpc05vZGVSZWZsZWN0ZWQgPSAoMCwgX3RyZWUuaXNOb2RlUmVmbGVjdHNGaXJzdENoaWxkQ29sc3Bhbikobm9kZVRvUHJvY2Vzcyk7XG4gIGlmIChpc05vZGVSZWZsZWN0ZWQpIHtcbiAgICByZXR1cm4gZXhwYW5kTm9kZShub2RlQ2hpbGRzWzBdKTtcbiAgfVxuICBub2RlRGF0YS5pc0NvbGxhcHNlZCA9IGZhbHNlO1xuICBjb25zdCBhbGxMZWF2ZXNFeGNlcHRNb3N0TGVmdCA9IG5vZGVDaGlsZHMuc2xpY2UoMSk7XG4gIGNvbnN0IGFmZmVjdGVkQ29sdW1ucyA9IG5ldyBTZXQoKTtcbiAgbGV0IGNvbHNwYW5Db21wZW5zYXRpb24gPSAwO1xuICBpZiAoYWxsTGVhdmVzRXhjZXB0TW9zdExlZnQubGVuZ3RoID4gMCkge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShhbGxMZWF2ZXNFeGNlcHRNb3N0TGVmdCwgbm9kZSA9PiB7XG4gICAgICAvLyBSZXN0b3JlIG9yaWdpbmFsIHN0YXRlIG9mIHRoZSBjb2xsYXBzZWQgaGVhZGVycy5cbiAgICAgIG5vZGUucmVwbGFjZVRyZWVXaXRoKG5vZGUuZGF0YS5jbG9uZWRUcmVlKTtcbiAgICAgIG5vZGUuZGF0YS5jbG9uZWRUcmVlID0gbnVsbDtcbiAgICAgIGNvbnN0IGxlYWZEYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYnkgaG93IG1hbnkgY29sc3BhbiBpdCBuZWVkcyB0byBpbmNyZWFzZSB0aGUgaGVhZGluZ3MgdG8gbWF0Y2ggdGhlbSB0b1xuICAgICAgLy8gdGhlIGNvbHNwYW4gd2lkdGggb2YgYWxsIGl0cyBjaGlsZHJlbi5cbiAgICAgIGNvbHNwYW5Db21wZW5zYXRpb24gKz0gbGVhZkRhdGEuY29sc3BhbjtcbiAgICAgICgwLCBfdHJlZS50cmF2ZXJzZUhpZGRlbk5vZGVDb2x1bW5JbmRleGVzKShub2RlLCBncmlkQ29sdW1uSW5kZXggPT4ge1xuICAgICAgICBhZmZlY3RlZENvbHVtbnMuYWRkKGdyaWRDb2x1bW5JbmRleCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7XG4gICAgICBjb2xzcGFuLFxuICAgICAgb3JpZ0NvbHNwYW4sXG4gICAgICBjb2x1bW5JbmRleFxuICAgIH0gPSBub2RlRGF0YTtcblxuICAgIC8vIEluIGEgY2FzZSB3aGVuIHRoZSBub2RlIGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW4gcmVzdG9yZSB0aGUgY29sc3BhbiB3aWR0aCB0b1xuICAgIC8vIGl0cyBvcmlnaW5hbCBzdGF0ZS5cbiAgICBjb2xzcGFuQ29tcGVuc2F0aW9uID0gb3JpZ0NvbHNwYW4gLSBjb2xzcGFuO1xuXG4gICAgLy8gQWRkIGNvbHVtbiB0byBcImFmZmVjdGVkXCIgc3RhcnRlZCBmcm9tIDEuIFRoZSBoZWFkZXIgd2l0aG91dCBjaGlsZHJlbiBjYW4gbm90IGJlXG4gICAgLy8gY29sbGFwc2VkIHNvIHRoZSBmaXJzdCBjb2x1bW4gaXMgYWxyZWFkeSB2aXNpYmxlIGFuZCB3ZSBzaG91bGRuJ3QgdG91Y2ggaXQuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBvcmlnQ29sc3BhbjsgaSsrKSB7XG4gICAgICBhZmZlY3RlZENvbHVtbnMuYWRkKGNvbHVtbkluZGV4ICsgaSk7XG4gICAgfVxuICB9XG4gIG5vZGVUb1Byb2Nlc3Mud2Fsa1VwKG5vZGUgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGFcbiAgICB9ID0gbm9kZTtcbiAgICBkYXRhLmNvbHNwYW4gKz0gY29sc3BhbkNvbXBlbnNhdGlvbjtcbiAgICBpZiAoZGF0YS5jb2xzcGFuID49IGRhdGEub3JpZ0NvbHNwYW4pIHtcbiAgICAgIGRhdGEuY29sc3BhbiA9IGRhdGEub3JpZ0NvbHNwYW47XG4gICAgICBkYXRhLmlzQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICgoMCwgX3RyZWUuaXNOb2RlUmVmbGVjdHNGaXJzdENoaWxkQ29sc3Bhbikobm9kZSkpIHtcbiAgICAgIGRhdGEuaXNDb2xsYXBzZWQgPSAoMCwgX3RyZWUuZ2V0Rmlyc3RDaGlsZFByb3BlcnR5KShub2RlLCAnaXNDb2xsYXBzZWQnKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIHJvbGxiYWNrTW9kaWZpY2F0aW9uOiAoKSA9PiAoMCwgX2NvbGxhcHNlLmNvbGxhcHNlTm9kZSkobm9kZVRvUHJvY2VzcyksXG4gICAgYWZmZWN0ZWRDb2x1bW5zOiBBcnJheS5mcm9tKGFmZmVjdGVkQ29sdW1ucyksXG4gICAgY29sc3BhbkNvbXBlbnNhdGlvblxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5oaWRlQ29sdW1uID0gaGlkZUNvbHVtbjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX3RlbXBsYXRlTGl0ZXJhbFRhZyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi9oZWxwZXJzL3RlbXBsYXRlTGl0ZXJhbFRhZ1wiKTtcbi8qKlxuICogQHBhcmFtIHtUcmVlTm9kZX0gbm9kZVRvUHJvY2VzcyBBIHRyZWUgbm9kZSB0byBwcm9jZXNzLlxuICogQHBhcmFtIHtudW1iZXJ9IGdyaWRDb2x1bW5JbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleCB0aGF0IHRyaWdnZXJzIHRoZSBub2RlIG1vZGlmaWNhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGNhbiBiZSBiZXR3ZWVuIHRoZSByb290IG5vZGUgY29sdW1uIGluZGV4IGFuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gaW5kZXggcGx1cyBub2RlIGNvbHNwYW4gbGVuZ3RoLlxuICovXG5mdW5jdGlvbiBoaWRlQ29sdW1uKG5vZGVUb1Byb2Nlc3MsIGdyaWRDb2x1bW5JbmRleCkge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoZ3JpZENvbHVtbkluZGV4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4nKTtcbiAgfVxuICBpZiAobm9kZVRvUHJvY2Vzcy5jaGlsZHMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JcXHgyMFxudGhlIGxhc3Qgbm9kZSwgdGhlIGhpZGUgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtcbiAgfVxuICBjb25zdCB7XG4gICAgY3Jvc3NIaWRkZW5Db2x1bW5zXG4gIH0gPSBub2RlVG9Qcm9jZXNzLmRhdGE7XG4gIGlmIChjcm9zc0hpZGRlbkNvbHVtbnMuaW5jbHVkZXMoZ3JpZENvbHVtbkluZGV4KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgaXNDb2xsYXBzaWJsZU5vZGUgPSBmYWxzZTtcbiAgbm9kZVRvUHJvY2Vzcy53YWxrVXAobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YToge1xuICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0gPSBub2RlO1xuICAgIGlmIChjb2xsYXBzaWJsZSkge1xuICAgICAgaXNDb2xsYXBzaWJsZU5vZGUgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWwgdHJlZSB0cmF2ZXJzaW5nXG4gICAgfVxuICB9KTtcblxuICAvLyBUT0RPOiBXaGVuIHRoZSBub2RlIGlzIGNvbGxhcHNpYmxlIGRvIG5vdCBoaWRlIHRoZSBjb2x1bW4uIEN1cnJlbnRseSBjb2xsYXBzaWJsZSBoZWFkZXJzXG4gIC8vIGRvZXMgbm90IHdvcmsgd2l0aCBoaWRkZW4gY29sdW1ucyAoaGlkZGVuIGluZGV4IG1hcCB0eXBlcykuXG4gIGlmIChpc0NvbGxhcHNpYmxlTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBub2RlVG9Qcm9jZXNzLndhbGtVcChub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhXG4gICAgfSA9IG5vZGU7XG4gICAgZGF0YS5jcm9zc0hpZGRlbkNvbHVtbnMucHVzaChncmlkQ29sdW1uSW5kZXgpO1xuICAgIGlmIChkYXRhLmNvbHNwYW4gPiAxKSB7XG4gICAgICBkYXRhLmNvbHNwYW4gLT0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YS5pc0hpZGRlbiA9IHRydWU7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudHJpZ2dlck5vZGVNb2RpZmljYXRpb24gPSB0cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2NvbGxhcHNlID0gcmVxdWlyZShcIi4vY29sbGFwc2VcIik7XG52YXIgX2V4cGFuZCA9IHJlcXVpcmUoXCIuL2V4cGFuZFwiKTtcbnZhciBfaGlkZUNvbHVtbiA9IHJlcXVpcmUoXCIuL2hpZGVDb2x1bW5cIik7XG52YXIgX3Nob3dDb2x1bW4gPSByZXF1aXJlKFwiLi9zaG93Q29sdW1uXCIpO1xuLyoqXG4gKiBUaGUgTm9kZU1vZGlmaWVycyBtb2R1bGUgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBtb2RpZmljYXRpb24gb2YgYSB0cmVlIHN0cnVjdHVyZVxuICogaW4gYSB3YXkgdG8gYWNoaWV2ZSBuZXcgY29sdW1uIGhlYWRlcnMgc3RhdGUuXG4gKi9cblxuY29uc3QgYXZhaWxhYmxlTW9kaWZpZXJzID0gbmV3IE1hcChbWydjb2xsYXBzZScsIF9jb2xsYXBzZS5jb2xsYXBzZU5vZGVdLCBbJ2V4cGFuZCcsIF9leHBhbmQuZXhwYW5kTm9kZV0sIFsnaGlkZS1jb2x1bW4nLCBfaGlkZUNvbHVtbi5oaWRlQ29sdW1uXSwgWydzaG93LWNvbHVtbicsIF9zaG93Q29sdW1uLnNob3dDb2x1bW5dXSk7XG5cbi8qKlxuICogQW4gZW50cnkgcG9pbnQgZm9yIHRyaWdnZXJpbmcgYSBub2RlIG1vZGlmaWVycy4gSWYgdGhlIHRyaWdnZXJlZCBhY3Rpb25cbiAqIGRvZXMgbm90IGV4aXN0IHRoZSBleGNlcHRpb24gaXMgdGhyb3duLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhY3Rpb25OYW1lIEFuIGFjdGlvbiBuYW1lIHRvIHRyaWdnZXIuXG4gKiBAcGFyYW0ge1RyZWVOb2RlfSBub2RlVG9Qcm9jZXNzIEEgdHJlZSBub2RlIHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JpZENvbHVtbkluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4IHRoYXQgY29tZXMgZnJvbSB0aGUgbmVzdGVkIGhlYWRlcnMgZ3JpZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4LCBhcyBvcHBvc2VkIHRvIHRoZSBgY29sdW1uSW5kZXhgIGluIHRoZSB0cmVlIG5vZGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdoaWNoIGRlc2NyaWJlcyB0aGUgY29sdW1uIGluZGV4IG9mIHRoZSByb290IG5vZGUgb2YgdGhlIGhlYWRlclxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50KSwgZGVzY3JpYmVzIHRoZSBpbmRleCBwYXNzZWQgZnJvbSB0aGUgZ3JpZC4gSGVuY2UsIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBjYW4gYmUgYmV0d2VlbiB0aGUgY29sdW1uIGluZGV4IG9mIHRoZSBub2RlIGFuZCBpdHMgY29sc3BhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aC5cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGFjdGlvbk5hbWUsIG5vZGVUb1Byb2Nlc3MsIGdyaWRDb2x1bW5JbmRleCkge1xuICBpZiAoIWF2YWlsYWJsZU1vZGlmaWVycy5oYXMoYWN0aW9uTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoXCIke2FjdGlvbk5hbWV9XCIpIGRvZXMgbm90IGV4aXN0LmApO1xuICB9XG4gIHJldHVybiBhdmFpbGFibGVNb2RpZmllcnMuZ2V0KGFjdGlvbk5hbWUpKG5vZGVUb1Byb2Nlc3MsIGdyaWRDb2x1bW5JbmRleCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnNob3dDb2x1bW4gPSBzaG93Q29sdW1uO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xuLyoqXG4gKiBAcGFyYW0ge1RyZWVOb2RlfSBub2RlVG9Qcm9jZXNzIEEgdHJlZSBub2RlIHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gZ3JpZENvbHVtbkluZGV4IFRoZSB2aXN1YWwgY29sdW1uIGluZGV4IHRoYXQgdHJpZ2dlcnMgdGhlIG5vZGUgbW9kaWZpY2F0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgaW5kZXggY2FuIGJlIGJldHdlZW4gdGhlIHJvb3Qgbm9kZSBjb2x1bW4gaW5kZXggYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiBpbmRleCBwbHVzIG5vZGUgY29sc3BhbiBsZW5ndGguXG4gKi9cbmZ1bmN0aW9uIHNob3dDb2x1bW4obm9kZVRvUHJvY2VzcywgZ3JpZENvbHVtbkluZGV4KSB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihncmlkQ29sdW1uSW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLicpO1xuICB9XG4gIGlmIChub2RlVG9Qcm9jZXNzLmNoaWxkcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclxceDIwXG50aGUgbGFzdCBub2RlLCB0aGUgc2hvdyBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO1xuICB9XG4gIGNvbnN0IHtcbiAgICBjcm9zc0hpZGRlbkNvbHVtbnNcbiAgfSA9IG5vZGVUb1Byb2Nlc3MuZGF0YTtcbiAgaWYgKCFjcm9zc0hpZGRlbkNvbHVtbnMuaW5jbHVkZXMoZ3JpZENvbHVtbkluZGV4KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBsZXQgaXNDb2xsYXBzaWJsZU5vZGUgPSBmYWxzZTtcbiAgbm9kZVRvUHJvY2Vzcy53YWxrVXAobm9kZSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YToge1xuICAgICAgICBjb2xsYXBzaWJsZVxuICAgICAgfVxuICAgIH0gPSBub2RlO1xuICAgIGlmIChjb2xsYXBzaWJsZSkge1xuICAgICAgaXNDb2xsYXBzaWJsZU5vZGUgPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBDYW5jZWwgdHJlZSB0cmF2ZXJzaW5nXG4gICAgfVxuICB9KTtcblxuICAvLyBUT0RPOiBXaGVuIHRoZSBub2RlIGlzIGNvbGxhcHNpYmxlIGRvIG5vdCBzaG93IHRoZSBjb2x1bW4uIEN1cnJlbnRseSBjb2xsYXBzaWJsZSBoZWFkZXJzXG4gIC8vIGRvZXMgbm90IHdvcmsgd2l0aCBoaWRkZW4gY29sdW1ucyAoaGlkZGVuIGluZGV4IG1hcCB0eXBlcykuXG4gIGlmIChpc0NvbGxhcHNpYmxlTm9kZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBub2RlVG9Qcm9jZXNzLndhbGtVcChub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhXG4gICAgfSA9IG5vZGU7XG4gICAgZGF0YS5jcm9zc0hpZGRlbkNvbHVtbnMuc3BsaWNlKGRhdGEuY3Jvc3NIaWRkZW5Db2x1bW5zLmluZGV4T2YoZ3JpZENvbHVtbkluZGV4KSwgMSk7XG4gICAgaWYgKCFkYXRhLmlzSGlkZGVuICYmIGRhdGEuY29sc3BhbiA8IGRhdGEub3JpZ0NvbHNwYW4pIHtcbiAgICAgIGRhdGEuY29sc3BhbiArPSAxO1xuICAgIH1cbiAgICBkYXRhLmlzSGlkZGVuID0gZmFsc2U7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRGaXJzdENoaWxkUHJvcGVydHkgPSBnZXRGaXJzdENoaWxkUHJvcGVydHk7XG5leHBvcnRzLmlzTm9kZVJlZmxlY3RzRmlyc3RDaGlsZENvbHNwYW4gPSBpc05vZGVSZWZsZWN0c0ZpcnN0Q2hpbGRDb2xzcGFuO1xuZXhwb3J0cy50cmF2ZXJzZUhpZGRlbk5vZGVDb2x1bW5JbmRleGVzID0gdHJhdmVyc2VIaWRkZW5Ob2RlQ29sdW1uSW5kZXhlcztcbi8qKlxuICogVHJhdmVyc2VzIHRoZSB0cmVlIG5vZGVzIGFuZCBjYWxscyBhIGNhbGxiYWNrIHdoZW4gbm8gaGlkZGVuIG5vZGUgaXMgZm91bmQuIFRoZSBjYWxsYmFja1xuICogaXMgY2FsbGVkIHdpdGggdmlzdWFsIGNvbHVtbiBpbmRleCB0aGVuLlxuICpcbiAqIEBwYXJhbSB7VHJlZU5vZGV9IG5vZGUgQSB0cmVlIG5vZGUgdG8gdHJhdmVyc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2ggbm9kZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VIaWRkZW5Ob2RlQ29sdW1uSW5kZXhlcyhub2RlLCBjYWxsYmFjaykge1xuICBub2RlLndhbGtEb3duKF9yZWYgPT4ge1xuICAgIGxldCB7XG4gICAgICBkYXRhLFxuICAgICAgY2hpbGRzXG4gICAgfSA9IF9yZWY7XG4gICAgaWYgKCFkYXRhLmlzSGlkZGVuKSB7XG4gICAgICBjYWxsYmFjayhkYXRhLmNvbHVtbkluZGV4KTtcbiAgICAgIGlmIChjaGlsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF0YS5jb2xzcGFuOyBpKyspIHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhLmNvbHVtbkluZGV4ICsgaSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEEgdHJlZSBoZWxwZXIgZm9yIHJldHJpZXZpbmcgYSBkYXRhIGZyb20gdGhlIGZpcnN0IGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7VHJlZU5vZGV9IG5vZGUgQSB0cmVlIG5vZGUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHlOYW1lIEEgbmFtZSBvZiB0aGUgcHJvcGVydHkgd2hvc2UgdmFsdWUgeW91IHdhbnQgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGdldEZpcnN0Q2hpbGRQcm9wZXJ0eShfcmVmMiwgcHJvcGVydHlOYW1lKSB7XG4gIGxldCB7XG4gICAgY2hpbGRzXG4gIH0gPSBfcmVmMjtcbiAgaWYgKGNoaWxkcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIGNoaWxkc1swXS5kYXRhW3Byb3BlcnR5TmFtZV07XG59XG5cbi8qKlxuICogQSB0cmVlIGhlbHBlciB3aGljaCBjaGVja3MgaWYgcGFzc2VkIG5vZGUgaGFzIHRoZSBzYW1lIG9yaWdpbmFsIGNvbHNwYW4gYXMgaXRzXG4gKiBmaXJzdCBjaGlsZC4gSW4gdGhhdCBjYXNlIHRoZSBub2RlIGlzIHRyZWF0ZWQgYXMgXCJtaXJyb3JlZFwiIG9yIFwicmVmbGVjdGVkXCIgZXZlcnlcbiAqIGFjdGlvbiBwZXJmb3JtZWQgb24gb25lIG9mIHRoYXQgbm9kZXMgc2hvdWxkIGJlIHJlZmxlY3RlZCB0byBvdGhlciBcIm1pcnJvcmVkXCIgbm9kZS5cbiAqXG4gKiBJbiB0aGF0IGNhc2Ugbm9kZXMgQTEgYW5kIEEyIGFyZSBcInJlZmxlY3RlZFwiXG4gKiAgICstLS0tKy0tLS0rLS0tLSstLS0tK1xuICogICB8IEExICAgICAgfCBCMSAgICAgIHxcbiAqICAgKy0tLS0rLS0tLSstLS0tKy0tLS0rXG4gKiAgIHwgQTIgICAgICB8IEIyIHwgQjMgfFxuICogICArLS0tLSstLS0tKy0tLS0rLS0tLSsuXG4gKlxuICogQHBhcmFtIHtUcmVlTm9kZX0gbm9kZSBBIHRyZWUgbm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vZGVSZWZsZWN0c0ZpcnN0Q2hpbGRDb2xzcGFuKG5vZGUpIHtcbiAgcmV0dXJuIGdldEZpcnN0Q2hpbGRQcm9wZXJ0eShub2RlLCAnb3JpZ0NvbHNwYW4nKSA9PT0gbm9kZS5kYXRhLm9yaWdDb2xzcGFuO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5ub3JtYWxpemVTZXR0aW5ncyA9IG5vcm1hbGl6ZVNldHRpbmdzO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9vYmplY3RcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IG5vcm1hbGl6ZXMgdXNlci1kZWZpbmVkIHNldHRpbmdzIGludG8gb25lIHByZWRpY3RhYmxlXG4gKiBzdHJ1Y3R1cmUuIEN1cnJlbnRseSwgdGhlIGRldmVsb3BlciBjYW4gZGVjbGFyZSBuZXN0ZWQgaGVhZGVycyBieSBwYXNzaW5nXG4gKiB0aGUgZm9sbG93aW5nIHVuc3RydWN0dXJlZCAoYW5kIHNvbWV0aW1lcyB1bmNvbXBsZXRlZCkgYXJyYXkuXG4gKiAgIFtcbiAqICAgICBbeyBsYWJlbDogJ0ExJywgY29sc3BhbjogMiB9XSxcbiAqICAgICBbeyBsYWJlbDogdHJ1ZSB9LCAnQjInLCA0XSxcbiAqICAgICBbXSxcbiAqICAgXVxuICpcbiAqIFRoZSBub3JtYWxpemF0aW9uIHByb2Nlc3MgZXF1YWxpemVzIHRoZSBsZW5ndGggb2YgY29sdW1ucyB0byBlYWNoIGhlYWRlclxuICogbGF5ZXJzIHRvIHRoZSBzYW1lIGxlbmd0aCBhbmQgZ2VuZXJhdGVzIG9iamVjdCBzZXR0aW5ncyB3aXRoIGEgY29tbW9uIHNoYXBlLlxuICogU28gdGhlIGFib3ZlIG1lbnRpb25lZCBleGFtcGxlIHdpbGwgYmUgbm9ybWFsaXplZCBpbnRvIHRoaXM6XG4gKiAgIFtcbiAqICAgICBbXG4gKiAgICAgICB7IGxhYmVsOiAnQTEnLCBjb2xzcGFuOiAyLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIGlzSGlkZGVuOiB0cnVlLCAuLi4gfSxcbiAqICAgICAgIHsgbGFiZWw6ICcnLCBjb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgIF0sXG4gKiAgICAgW1xuICogICAgICAgeyBsYWJlbDogJ3RydWUnLCBjb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJ0IyJywgY29sc3BhbjogMSwgaXNIaWRkZW46IGZhbHNlLCAuLi4gfSxcbiAqICAgICAgIHsgbGFiZWw6ICc0JywgY29sc3BhbjogMSwgaXNIaWRkZW46IGZhbHNlLCAuLi4gfSxcbiAqICAgICBdLFxuICogICAgIFtcbiAqICAgICAgIHsgbGFiZWw6ICcnLCBjb2xzcGFuOiAxLCBpc0hpZGRlbjogZmFsc2UsIC4uLiB9LFxuICogICAgICAgeyBsYWJlbDogJycsIGNvbHNwYW46IDEsIGlzSGlkZGVuOiBmYWxzZSwgLi4uIH0sXG4gKiAgICAgICB7IGxhYmVsOiAnJywgY29sc3BhbjogMSwgaXNIaWRkZW46IGZhbHNlLCAuLi4gfSxcbiAqICAgICBdLFxuICogICBdXG4gKlxuICogQHBhcmFtIHtBcnJheVtdfSBzb3VyY2VTZXR0aW5ncyBBbiBhcnJheSB3aXRoIGRlZmluZWQgbmVzdGVkIGhlYWRlcnMgc2V0dGluZ3MuXG4gKiBAcGFyYW0ge251bWJlcn0gW2NvbHVtbnNMaW1pdD1JbmZpbml0eV0gQSBudW1iZXIgb2YgY29sdW1ucyB0byB3aGljaCB0aGUgc3RydWN0dXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBiZSB0cmltbWVkLiBXaGlsZSB0cmltbWluZyB0aGUgY29sc3BhblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgYWRqdXN0ZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLlxuICogQHJldHVybnMge0FycmF5W119XG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNldHRpbmdzKHNvdXJjZVNldHRpbmdzKSB7XG4gIGxldCBjb2x1bW5zTGltaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IEluZmluaXR5O1xuICBjb25zdCBub3JtYWxpemVkU2V0dGluZ3MgPSBbXTtcbiAgaWYgKGNvbHVtbnNMaW1pdCA9PT0gMCkge1xuICAgIHJldHVybiBub3JtYWxpemVkU2V0dGluZ3M7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgYXJyYXkgaXRlbXMgKGhlYWRlciBzZXR0aW5ncykgaW50byBvbmUgc2hhcGUgLSBsaXRlcmFsIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcHMuXG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShzb3VyY2VTZXR0aW5ncywgaGVhZGVyc1NldHRpbmdzID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gW107XG4gICAgbGV0IGNvbHVtbkluZGV4ID0gMDtcbiAgICBub3JtYWxpemVkU2V0dGluZ3MucHVzaChjb2x1bW5zKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoaGVhZGVyc1NldHRpbmdzLCBzb3VyY2VIZWFkZXJTZXR0aW5ncyA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJTZXR0aW5ncyA9ICgwLCBfdXRpbHMuY3JlYXRlRGVmYXVsdEhlYWRlclNldHRpbmdzKSgpO1xuICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShzb3VyY2VIZWFkZXJTZXR0aW5ncykpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIGNvbHNwYW5cbiAgICAgICAgfSA9IHNvdXJjZUhlYWRlclNldHRpbmdzO1xuICAgICAgICBoZWFkZXJTZXR0aW5ncy5sYWJlbCA9ICgwLCBfbWl4ZWQuc3RyaW5naWZ5KShsYWJlbCk7XG4gICAgICAgIGlmICh0eXBlb2YgY29sc3BhbiA9PT0gJ251bWJlcicgJiYgY29sc3BhbiA+IDEpIHtcbiAgICAgICAgICBoZWFkZXJTZXR0aW5ncy5jb2xzcGFuID0gY29sc3BhbjtcbiAgICAgICAgICBoZWFkZXJTZXR0aW5ncy5vcmlnQ29sc3BhbiA9IGNvbHNwYW47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYWRlclNldHRpbmdzLmxhYmVsID0gKDAsIF9taXhlZC5zdHJpbmdpZnkpKHNvdXJjZUhlYWRlclNldHRpbmdzKTtcbiAgICAgIH1cbiAgICAgIGNvbHVtbkluZGV4ICs9IGhlYWRlclNldHRpbmdzLm9yaWdDb2xzcGFuO1xuICAgICAgbGV0IGNhbmNlbFByb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgIGlmIChjb2x1bW5JbmRleCA+PSBjb2x1bW5zTGltaXQpIHtcbiAgICAgICAgLy8gQWRqdXN0IHRoZSBjb2xzcGFuIHZhbHVlIHRvIG5vdCBvdmVybGFwIHRoZSBjb2x1bW5zIGxpbWl0LlxuICAgICAgICBoZWFkZXJTZXR0aW5ncy5jb2xzcGFuID0gaGVhZGVyU2V0dGluZ3Mub3JpZ0NvbHNwYW4gLSAoY29sdW1uSW5kZXggLSBjb2x1bW5zTGltaXQpO1xuICAgICAgICBoZWFkZXJTZXR0aW5ncy5vcmlnQ29sc3BhbiA9IGhlYWRlclNldHRpbmdzLmNvbHNwYW47XG4gICAgICAgIGNhbmNlbFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29sdW1ucy5wdXNoKGhlYWRlclNldHRpbmdzKTtcbiAgICAgIGlmIChoZWFkZXJTZXR0aW5ncy5jb2xzcGFuID4gMSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlclNldHRpbmdzLmNvbHNwYW4gLSAxOyBpKyspIHtcbiAgICAgICAgICBjb2x1bW5zLnB1c2goKDAsIF91dGlscy5jcmVhdGVQbGFjZWhvbGRlckhlYWRlclNldHRpbmdzKSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuICFjYW5jZWxQcm9jZXNzaW5nO1xuICAgIH0pO1xuICB9KTtcbiAgY29uc3QgY29sdW1uc0xlbmd0aCA9IE1hdGgubWF4KC4uLigwLCBfYXJyYXkuYXJyYXlNYXApKG5vcm1hbGl6ZWRTZXR0aW5ncywgaGVhZGVyc1NldHRpbmdzID0+IGhlYWRlcnNTZXR0aW5ncy5sZW5ndGgpKTtcblxuICAvLyBOb3JtYWxpemUgdGhlIGxlbmd0aCBvZiBlYWNoIGhlYWRlciBsYXllciB0byB0aGUgc2FtZSBjb2x1bW5zIGxlbmd0aC5cbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG5vcm1hbGl6ZWRTZXR0aW5ncywgaGVhZGVyc1NldHRpbmdzID0+IHtcbiAgICBpZiAoaGVhZGVyc1NldHRpbmdzLmxlbmd0aCA8IGNvbHVtbnNMZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRTZXR0aW5ncyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKG5ldyBBcnJheShjb2x1bW5zTGVuZ3RoIC0gaGVhZGVyc1NldHRpbmdzLmxlbmd0aCksICgpID0+ICgwLCBfdXRpbHMuY3JlYXRlRGVmYXVsdEhlYWRlclNldHRpbmdzKSgpKTtcbiAgICAgIGhlYWRlcnNTZXR0aW5ncy5zcGxpY2UoaGVhZGVyc1NldHRpbmdzLmxlbmd0aCwgMCwgLi4uZGVmYXVsdFNldHRpbmdzKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbm9ybWFsaXplZFNldHRpbmdzO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9zZXR0aW5nc05vcm1hbGl6ZXIgPSByZXF1aXJlKFwiLi9zZXR0aW5nc05vcm1hbGl6ZXJcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBMaXN0IG9mIHByb3BlcnRpZXMgd2hpY2ggYXJlIGNvbmZpZ3VyYWJsZS4gVGhhdCBwcm9wZXJ0aWVzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHB1YmxpYyBBUEkuXG4gKlxuICogQHR5cGUge3N0cmluZ1tdfVxuICovXG5jb25zdCBIRUFERVJfQ09ORklHVVJBQkxFX1BST1BTID0gZXhwb3J0cy5IRUFERVJfQ09ORklHVVJBQkxFX1BST1BTID0gWydsYWJlbCcsICdjb2xsYXBzaWJsZSddO1xuXG4vKipcbiAqIFRoZSBjbGFzcyBtYW5hZ2VzIGFuZCBub3JtYWxpemVzIHNldHRpbmdzIHBhc3NlZCBieSB0aGUgZGV2ZWxvcGVyXG4gKiBpbnRvIHRoZSBuZXN0ZWQgaGVhZGVycyBwbHVnaW4uIFRoZSBTb3VyY2VTZXR0aW5ncyBjbGFzcyBpcyBhXG4gKiBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRyZWUgYnVpbGRlciAoSGVhZGVyVHJlZSkgbW9kdWxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgU291cmNlU2V0dGluZ3NcbiAqL1xudmFyIF9kYXRhID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2RhdGFMZW5ndGggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY29sdW1uc0xpbWl0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBTb3VyY2VTZXR0aW5ncyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFRoZSBub3JtYWxpemVkIHNvdXJjZSBkYXRhIChub3JtYWxpemVkIHVzZXItZGVmaW5lZCBzZXR0aW5ncyBmb3IgbmVzdGVkIGhlYWRlcnMpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXlbXX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGF0YSwgW10pO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBsZW5ndGggb2YgdGhlIG5lc3RlZCBoZWFkZXIgbGF5ZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9kYXRhTGVuZ3RoLCAwKTtcbiAgICAvKipcbiAgICAgKiBDb2x1bW5zIGNvdW50IGxpbWl0IHZhbHVlIHRyaW1zIHNvdXJjZSBzZXR0aW5ncyB0byB0aGF0IHZhbHVlLiBJZiBjb2x1bW5zXG4gICAgICogY291bnQgbGltaXQgaW50ZXJzZWN0cyBuZXN0ZWQgaGVhZGVyLCB0aGUgaGVhZGVyJ3MgY29sc3BhbiB2YWx1ZSBpcyByZWR1Y2VkXG4gICAgICogdG8ga2VlcCB0aGUgd2hvbGUgc3RydWN0dXJlIHN0YWJsZSAodHJpbW1lZCBwcmVjaXNlbHkgd2hlcmUgdGhlIGxpbWl0IGlzIHNldCkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb2x1bW5zTGltaXQsIEluZmluaXR5KTtcbiAgfVxuICAvKipcbiAgICogU2V0cyBjb2x1bW5zIGxpbWl0IHRvIHRoZSBzb3VyY2Ugc2V0dGluZ3Mgd2lsbCBiZSB0cmltbWVkLiBBbGwgaGVhZGVycyB3aGljaFxuICAgKiBvdmVybGFwIHRoZSBjb2x1bW4gbGltaXQgd2lsbCBiZSByZWR1Y2VkIHRvIGtlZXAgdGhlIHN0cnVjdHVyZSBzb2xpZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnNDb3VudCBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gbGltaXQgdG8uXG4gICAqL1xuICBzZXRDb2x1bW5zTGltaXQoY29sdW1uc0NvdW50KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9jb2x1bW5zTGltaXQsIHRoaXMsIGNvbHVtbnNDb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIG5ldyBuZXN0ZWQgaGVhZGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXlbXX0gW25lc3RlZEhlYWRlcnNTZXR0aW5ncz1bXV0gVGhlIHVzZXItZGVmaW5lZCBuZXN0ZWQgaGVhZGVycyBzZXR0aW5ncy5cbiAgICovXG4gIHNldERhdGEoKSB7XG4gICAgbGV0IG5lc3RlZEhlYWRlcnNTZXR0aW5ncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9kYXRhLCB0aGlzLCAoMCwgX3NldHRpbmdzTm9ybWFsaXplci5ub3JtYWxpemVTZXR0aW5ncykobmVzdGVkSGVhZGVyc1NldHRpbmdzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbnNMaW1pdCwgdGhpcykpKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RhdGFMZW5ndGgsIHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGF0YSwgdGhpcykubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG5vcm1hbGl6ZWQgc291cmNlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXlbXX1cbiAgICovXG4gIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGF0YSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHNldHRpbmdzIHdpdGggY3VycmVudCBzb3VyY2Ugc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGFkZGl0aW9uYWxTZXR0aW5ncyBBbiBhcnJheSBvZiBvYmplY3RzIHdpdGggYHJvd2AsIGBjb2xgIGFuZCBhZGRpdGlvbmFsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzIHRvIG1lcmdlIHdpdGggY3VycmVudCBzb3VyY2Ugc2V0dGluZ3MuXG4gICAqL1xuICBtZXJnZVdpdGgoYWRkaXRpb25hbFNldHRpbmdzKSB7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGFkZGl0aW9uYWxTZXR0aW5ncywgX3JlZiA9PiB7XG4gICAgICBsZXQge1xuICAgICAgICByb3csXG4gICAgICAgIGNvbCxcbiAgICAgICAgLi4ucmVzdFxuICAgICAgfSA9IF9yZWY7XG4gICAgICBjb25zdCBoZWFkZXJTZXR0aW5ncyA9IHRoaXMuZ2V0SGVhZGVyU2V0dGluZ3Mocm93LCBjb2wpO1xuICAgICAgaWYgKGhlYWRlclNldHRpbmdzICE9PSBudWxsKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmV4dGVuZCkoaGVhZGVyU2V0dGluZ3MsIHJlc3QsIEhFQURFUl9DT05GSUdVUkFCTEVfUFJPUFMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgdGhlIGN1cnJlbnQgc3RhdGUgd2l0aCBhIGNhbGxiYWNrLiBGb3IgZWFjaCBzb3VyY2Ugc2V0dGluZ3MgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIGlzIGNhbGxlZC4gSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgdmFsdWUgdGhhdCB2YWx1ZSBpcyBtZXJnZWQgd2l0aCB0aGUgc291cmNlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZvciBldmVyeSBoZWFkZXIgc2V0dGluZ3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVhY2ggdGltZSB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkLCB0aGUgcmV0dXJuZWQgdmFsdWUgZXh0ZW5kc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgc2V0dGluZ3MuXG4gICAqL1xuICBtYXAoY2FsbGJhY2spIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYXRhLCB0aGlzKSwgaGVhZGVyID0+IHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShoZWFkZXIsIGhlYWRlclNldHRpbmdzID0+IHtcbiAgICAgICAgY29uc3QgcHJvcHNUb0V4dGVuZCA9IGNhbGxiYWNrKHtcbiAgICAgICAgICAuLi5oZWFkZXJTZXR0aW5nc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KShwcm9wc1RvRXh0ZW5kKSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmV4dGVuZCkoaGVhZGVyU2V0dGluZ3MsIHByb3BzVG9FeHRlbmQsIEhFQURFUl9DT05GSUdVUkFCTEVfUFJPUFMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNvdXJjZSBjb2x1bW4gaGVhZGVyIHNldHRpbmdzIGZvciBhIHNwZWNpZmllZCBoZWFkZXIuIFRoZSByZXR1cm5lZFxuICAgKiBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGhlYWRlciBsYWJlbCwgaXRzIGNvbHNwYW4gbGVuZ3RoLFxuICAgKiBvciBpZiBpdCBpcyBoaWRkZW4gaW4gdGhlIGhlYWRlciByZW5kZXJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBoZWFkZXJMZXZlbCBIZWFkZXIgbGV2ZWwgKDAgPSBtb3N0IGRpc3RhbnQgdG8gdGhlIHRhYmxlKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IEEgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfVxuICAgKi9cbiAgZ2V0SGVhZGVyU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIGNvbHVtbkluZGV4KSB7XG4gICAgdmFyIF9oZWFkZXJzU2V0dGluZ3MkY29sdTtcbiAgICBpZiAoaGVhZGVyTGV2ZWwgPj0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kYXRhTGVuZ3RoLCB0aGlzKSB8fCBoZWFkZXJMZXZlbCA8IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzU2V0dGluZ3MgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RhdGEsIHRoaXMpW2hlYWRlckxldmVsXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzU2V0dGluZ3MpID09PSBmYWxzZSB8fCBjb2x1bW5JbmRleCA+PSBoZWFkZXJzU2V0dGluZ3MubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIChfaGVhZGVyc1NldHRpbmdzJGNvbHUgPSBoZWFkZXJzU2V0dGluZ3NbY29sdW1uSW5kZXhdKSAhPT0gbnVsbCAmJiBfaGVhZGVyc1NldHRpbmdzJGNvbHUgIT09IHZvaWQgMCA/IF9oZWFkZXJzU2V0dGluZ3MkY29sdSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzb3VyY2Ugb2YgY29sdW1uIGhlYWRlcnMgc2V0dGluZ3MgZm9yIHNwZWNpZmllZCBoZWFkZXJzLiBJZiB0aGUgcmV0cmlldmVkIGNvbHVtblxuICAgKiBzZXR0aW5ncyBvdmVybGFwIHRoZSByYW5nZSBcImJveFwiIGRldGVybWluZWQgYnkgXCJjb2x1bW5JbmRleFwiIGFuZCBcImNvbHVtbnNMZW5ndGhcIlxuICAgKiB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVhZGVyTGV2ZWwgSGVhZGVyIGxldmVsICgwID0gbW9zdCBkaXN0YW50IHRvIHRoZSB0YWJsZSkuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBBIHZpc3VhbCBjb2x1bW4gaW5kZXggZnJvbSB3aGljaCB0aGUgc2V0dGluZ3Mgd2lsbCBiZSBleHRyYWN0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbY29sdW1uc0xlbmd0aD0xXSBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW52b2x2ZWQgaW4gdGhlIGV4dHJhY3Rpb24gb2Ygc2V0dGluZ3MuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBnZXRIZWFkZXJzU2V0dGluZ3MoaGVhZGVyTGV2ZWwsIGNvbHVtbkluZGV4KSB7XG4gICAgbGV0IGNvbHVtbnNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDE7XG4gICAgY29uc3QgaGVhZGVyc1NldHRpbmdzQ2h1bmtzID0gW107XG4gICAgaWYgKGhlYWRlckxldmVsID49IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGF0YUxlbmd0aCwgdGhpcykgfHwgaGVhZGVyTGV2ZWwgPCAwKSB7XG4gICAgICByZXR1cm4gaGVhZGVyc1NldHRpbmdzQ2h1bmtzO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzU2V0dGluZ3MgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RhdGEsIHRoaXMpW2hlYWRlckxldmVsXTtcbiAgICBsZXQgY3VycmVudExlbmd0aCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IGNvbHVtbkluZGV4OyBpIDwgaGVhZGVyc1NldHRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBoZWFkZXJTZXR0aW5ncyA9IGhlYWRlcnNTZXR0aW5nc1tpXTtcbiAgICAgIGlmIChoZWFkZXJTZXR0aW5ncy5pc1BsYWNlaG9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycycpO1xuICAgICAgfVxuICAgICAgY3VycmVudExlbmd0aCArPSBoZWFkZXJTZXR0aW5ncy5jb2xzcGFuO1xuICAgICAgaGVhZGVyc1NldHRpbmdzQ2h1bmtzLnB1c2goaGVhZGVyU2V0dGluZ3MpO1xuICAgICAgaWYgKGhlYWRlclNldHRpbmdzLmNvbHNwYW4gPiAxKSB7XG4gICAgICAgIGkgKz0gaGVhZGVyU2V0dGluZ3MuY29sc3BhbiAtIDE7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ldCB0aGUgY3VycmVudCBzdW0gb2YgdGhlIGNoaWxkIGNvbHNwYW5zXG4gICAgICBpZiAoY3VycmVudExlbmd0aCA9PT0gY29sdW1uc0xlbmd0aCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIFdlIGV4Y2VlZHMgdGhlIGN1cnJlbnQgc3VtIG9mIHRoZSBjaGlsZCBjb2xzcGFucywgdGhlIGxhc3QgY29sdW1ucyBjb2xzcGFuIG92ZXJsYXBzIHRoZSBcImNvbHVtbnNMZW5ndGhcIiBsZW5ndGguXG4gICAgICBpZiAoY3VycmVudExlbmd0aCA+IGNvbHVtbnNMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbGFzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhlYWRlcnNTZXR0aW5nc0NodW5rcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdG90YWwgbnVtYmVyIG9mIGhlYWRlcnMgbGV2ZWxzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGF5ZXJzQ291bnQoKSB7XG4gICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGF0YUxlbmd0aCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Q29sdW1uc0NvdW50KCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2RhdGFMZW5ndGgsIHRoaXMpID4gMCA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGF0YSwgdGhpcylbMF0ubGVuZ3RoIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIGRhdGEuXG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RhdGEsIHRoaXMsIFtdKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2RhdGFMZW5ndGgsIHRoaXMsIDApO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBTb3VyY2VTZXR0aW5nczsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEhlYWRlclNldHRpbmdzID0gY3JlYXRlRGVmYXVsdEhlYWRlclNldHRpbmdzO1xuZXhwb3J0cy5jcmVhdGVQbGFjZWhvbGRlckhlYWRlclNldHRpbmdzID0gY3JlYXRlUGxhY2Vob2xkZXJIZWFkZXJTZXR0aW5ncztcbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVmYXVsdEhlYWRlclNldHRpbmdzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWwgVGhlIG5hbWUvbGFiZWwgb2YgdGhlIGNvbHVtbiBoZWFkZXIuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sc3BhbiBDdXJyZW50IGNhbGN1bGF0ZWQgY29sc3BhbiB2YWx1ZSBvZiB0aGUgcmVuZGVyZWQgY29sdW1uIGhlYWRlciBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG9yaWdDb2xzcGFuIE9yaWdpbmFsIGNvbHNwYW4gdmFsdWUsIHNldCBvbmNlIHdoaWxlIHBhcnNpbmcgdXNlci1kZWZpbmVkIG5lc3RlZCBoZWFkZXIgc2V0dGluZ3MuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbGxhcHNpYmxlIFRoZSBmbGFnIGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBpcyBjb2xsYXBzaWJsZSAoY2FuIGJlIGNvbGxhcHNlZC9leHBhbmRlZCkuXG4gKiBAcHJvcGVydHkge251bWJlcltdfSBjcm9zc0hpZGRlbkNvbHVtbnMgVGhlIGxpc3Qgb2YgdmlzdWFsIGNvbHVtbiBpbmRleGVzIHdoaWNoIGluZGljYXRlcyB0aGF0IHRoZSBzcGVjaWZpZWQgY29sdW1ucyB3aXRoaW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgaGVhZGVyIHNldHRpbmdzIGFyZSBoaWRkZW4uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzQ29sbGFwc2VkIFRoZSBmbGFnIGRldGVybWluZXMgd2hldGhlciB0aGUgbm9kZSBpcyBjb2xsYXBzZWQuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzSGlkZGVuIFRoZSBmbGFnIGRldGVybWluZXMgd2hldGhlciB0aGUgY29sdW1uIGhlYWRlciBhdCBzcGVjaWZpZWQgaW5kZXggaXMgaGlkZGVuLiBJZiB0cnVlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBUSCBlbGVtZW50IHdpbGwgYmUgcmVuZGVyZWQgYXMgaGlkZGVuIChkaXNwbGF5OiBub25lKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaXNSb290IFRoZSBmbGFnIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgY29sdW1uIGhlYWRlciBzZXR0aW5ncyBpcyBhY3R1YWxseSBub3QgcmVuZGVyYWJsZS4gVGhhdCBraW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBvYmplY3RzIGFyZSBnZW5lcmF0ZWQgYWZ0ZXIgY29sc3BhbmVkIGhlYWRlciB0byBmaWxsIGFuIGFycmF5IHRvIGNvcnJlY3Qgc2l6ZS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIGZvciBoZWFkZXIgd2l0aCBjb2xzcGFuID0gOCB0aGUgNyBibGFuayBvYmplY3RzIGFyZSBnZW5lcmF0ZWQgdG8gZmlsbCB0aGUgYXJyYXkgc2V0dGluZ3NcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGxlbmd0aCA9IDguXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGlzUGxhY2Vob2xkZXIgVGhlIGZsYWcgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb2x1bW4gaGVhZGVyIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggaXMgbm9uLXJlbmRlcmFibGUuXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBoZWFkZXIgc2V0dGluZ3Mgb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtEZWZhdWx0SGVhZGVyU2V0dGluZ3N9IGluaXRpYWxWYWx1ZXMgVGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgaGVhZGVyIHNldHRpbmdzIG9iamVjdC5cbiAqIEByZXR1cm5zIHtEZWZhdWx0SGVhZGVyU2V0dGluZ3N9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRIZWFkZXJTZXR0aW5ncygpIHtcbiAgbGV0IHtcbiAgICBsYWJlbCA9ICcnLFxuICAgIGNvbHNwYW4gPSAxLFxuICAgIG9yaWdDb2xzcGFuID0gMSxcbiAgICBjb2xsYXBzaWJsZSA9IGZhbHNlLFxuICAgIGNyb3NzSGlkZGVuQ29sdW1ucyA9IFtdLFxuICAgIGlzQ29sbGFwc2VkID0gZmFsc2UsXG4gICAgaXNIaWRkZW4gPSBmYWxzZSxcbiAgICBpc1Jvb3QgPSBmYWxzZSxcbiAgICBpc1BsYWNlaG9sZGVyID0gZmFsc2VcbiAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHJldHVybiB7XG4gICAgbGFiZWwsXG4gICAgY29sc3BhbixcbiAgICBvcmlnQ29sc3BhbixcbiAgICBjb2xsYXBzaWJsZSxcbiAgICBpc0NvbGxhcHNlZCxcbiAgICBjcm9zc0hpZGRlbkNvbHVtbnMsXG4gICAgaXNIaWRkZW4sXG4gICAgaXNSb290LFxuICAgIGlzUGxhY2Vob2xkZXJcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBwbGFjZWhvbGRlciBoZWFkZXIgc2V0dGluZ3Mgb2JqZWN0LiBUaG9zZSBzZXR0aW5ncyB0ZWxsIHRoZSBoZWFkZXIgcmVuZGVyZXJzXG4gKiB0aGF0IHRoaXMgVEggZWxlbWVudCBzaG91bGQgbm90IGJlIHJlbmRlcmVkICh0aGUgbm9kZSB3aWxsIGJlIG92ZXJsYXBwZWQgYnkgdGhlIHByZXZpb3VzbHlcbiAqIGNyZWF0ZWQgbm9kZSB3aXRoIGNvbHNwYW4gYmlnZ2VyIHRoYW4gMSkuXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGxhY2Vob2xkZXJIZWFkZXJTZXR0aW5ncygpIHtcbiAgcmV0dXJuIHtcbiAgICBsYWJlbDogJycsXG4gICAgaXNQbGFjZWhvbGRlcjogdHJ1ZVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIFRoZSBjbGFzcyBnZW5lcmF0ZXMgdGhlIG5lc3RlZCBoZWFkZXJzIHN0cnVjdHVyZSBpbiB0aGUgRE9NIGFuZCByZWFkcyB0aGUgY29sdW1uIHdpZHRoIGZvclxuICogZWFjaCBjb2x1bW4uIFRoZSBoaWVyYXJjaHkgaXMgYnVpbHQgb25seSBmb3IgdmlzaWJsZSwgbm9uLWhpZGRlbiBjb2x1bW5zLiBFYWNoIHRpbWUgdGhlXG4gKiBjb2x1bW4gaXMgc2hvd24gb3IgaGlkZGVuLCB0aGUgc3RydWN0dXJlIGlzIHJlYnVpbHQsIGFuZCB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbnMgaW4gdGhlXG4gKiBtYXAgdXBkYXRlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBHaG9zdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoaG90LCBuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcikge1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7SGFuZHNvbnRhYmxlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhvdFwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgbmVzdGVkIGhlYWRlcnMgc2V0dGluZ3MuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlclwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSB2YWx1ZSB0aGF0IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBudW1iZXIgb2YgdGhlIG5lc3RlZCBoZWFkZXIgbGF5ZXJzIChoZWFkZXIgcm93cykuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibGF5ZXJzQ291bnRcIiwgMCk7XG4gICAgLyoqXG4gICAgICogVGVtcG9yYXJ5IGVsZW1lbnQgY3JlYXRlZCB0byBnZXQgbWluaW1hbCBoZWFkZXJzIHdpZHRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUgeyp9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29udGFpbmVyXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgdG8ga2VlcCBhbmQgdHJhY2sgb2YgdGhlIGNvbHVtbnMnIHdpZHRocy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge1BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIndpZHRoc01hcFwiLCB2b2lkIDApO1xuICAgIHRoaXMuaG90ID0gaG90O1xuICAgIHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIgPSBuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcjtcbiAgICB0aGlzLndpZHRoc01hcCA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoJ25lc3RlZEhlYWRlcnMud2lkdGhzTWFwJywgJ3BoeXNpY2FsSW5kZXhUb1ZhbHVlJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCBoZWFkZXJzIGxheWVycyBjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxheWVyc0NvdW50IFRvdGFsIG51bWJlciBvZiBoZWFkZXJzIGxldmVscy5cbiAgICogQHJldHVybnMge0dob3N0VGFibGV9XG4gICAqL1xuICBzZXRMYXllcnNDb3VudChsYXllcnNDb3VudCkge1xuICAgIHRoaXMubGF5ZXJzQ291bnQgPSBsYXllcnNDb3VudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjb2x1bW4gd2lkdGggYmFzZWQgb24gdGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgKi9cbiAgZ2V0V2lkdGgodmlzdWFsQ29sdW1uKSB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHZpc3VhbENvbHVtbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNhY2hlIG9mIHRoZSBoZWFkZXJzIHdpZHRocy5cbiAgICovXG4gIGJ1aWxkV2lkdGhzTWFwKCkge1xuICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2hhbmRzb250YWJsZScsICdodEdob3N0VGFibGUnLCAnaHRBdXRvU2l6ZScpO1xuICAgIHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lcik7XG4gICAgdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCd0cjpsYXN0LW9mLXR5cGUgdGgnKTtcbiAgICBjb25zdCBtYXhDb2x1bW5zID0gY29sdW1ucy5sZW5ndGg7XG4gICAgdGhpcy53aWR0aHNNYXAuY2xlYXIoKTtcbiAgICBmb3IgKGxldCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBtYXhDb2x1bW5zOyBjb2x1bW4rKykge1xuICAgICAgY29uc3QgdmlzdWFsQ29sdW1uc0luZGV4ID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjb2x1bW4pO1xuICAgICAgY29uc3QgcGh5c2ljYWxDb2x1bW5JbmRleCA9IHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odmlzdWFsQ29sdW1uc0luZGV4KTtcbiAgICAgIHRoaXMud2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbENvbHVtbkluZGV4LCBjb2x1bW5zW2NvbHVtbl0ub2Zmc2V0V2lkdGgpO1xuICAgIH1cbiAgICB0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGVtcG9yYXJ5IHRhYmxlIGZvciBnZXR0aW5nIG1pbmltYWwgY29sdW1ucyB3aWR0aHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lciBUaGUgZWxlbWVudCB3aGVyZSB0aGUgRE9NIG5vZGVzIGFyZSBpbmplY3RlZC5cbiAgICovXG4gIF9idWlsZEdob3N0VGFibGUoY29udGFpbmVyKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50LFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgY29uc3QgZnJhZ21lbnQgPSByb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGNvbnN0IHRhYmxlID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgY29uc3QgaXNEcm9wZG93bkVuYWJsZWQgPSAhIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51O1xuICAgIGNvbnN0IG1heFJlbmRlcmVkQ29scyA9IGNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7XG4gICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGhpcy5sYXllcnNDb3VudDsgcm93KyspIHtcbiAgICAgIGNvbnN0IHRyID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBtYXhSZW5kZXJlZENvbHM7IGNvbCsrKSB7XG4gICAgICAgIGxldCB2aXN1YWxDb2x1bW5zSW5kZXggPSBjb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNvbCk7XG4gICAgICAgIGlmICh2aXN1YWxDb2x1bW5zSW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgICB2aXN1YWxDb2x1bW5zSW5kZXggPSBjb2w7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGggPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcbiAgICAgICAgY29uc3QgaGVhZGVyU2V0dGluZ3MgPSB0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyKHJvdywgdmlzdWFsQ29sdW1uc0luZGV4KTtcbiAgICAgICAgaWYgKGhlYWRlclNldHRpbmdzICYmICghaGVhZGVyU2V0dGluZ3MuaXNQbGFjZWhvbGRlciB8fCBoZWFkZXJTZXR0aW5ncy5pc0hpZGRlbikpIHtcbiAgICAgICAgICBsZXQgbGFiZWwgPSBoZWFkZXJTZXR0aW5ncy5sYWJlbDtcbiAgICAgICAgICBpZiAoaXNEcm9wZG93bkVuYWJsZWQpIHtcbiAgICAgICAgICAgIGxhYmVsICs9ICc8YnV0dG9uIGNsYXNzPVwiY2hhbmdlVHlwZVwiPjwvYnV0dG9uPic7XG4gICAgICAgICAgfVxuICAgICAgICAgICgwLCBfZWxlbWVudC5mYXN0SW5uZXJIVE1MKSh0aCwgbGFiZWwpO1xuICAgICAgICAgIHRoLmNvbFNwYW4gPSBoZWFkZXJTZXR0aW5ncy5jb2xzcGFuO1xuICAgICAgICAgIHRyLmFwcGVuZENoaWxkKHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpO1xuICAgIH1cbiAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0YWJsZSk7XG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgd2lkdGhzIGNhY2hlLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy53aWR0aHNNYXAuY2xlYXIoKTtcbiAgICB0aGlzLmNvbnRhaW5lciA9IG51bGw7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IEdob3N0VGFibGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIGRhdGEgb3BlcmF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBEYXRhTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKG5lc3RlZFJvd3NQbHVnaW4sIGhvdEluc3RhbmNlKSB7XG4gICAgLyoqXG4gICAgICogTWFpbiBIYW5kc29udGFibGUgaW5zdGFuY2UgcmVmZXJlbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBkYXRhIG9iamVjdC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIYW5kc29udGFibGUuQ2VsbFZhbHVlW11bXXxIYW5kc29udGFibGUuUm93T2JqZWN0W119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGF0YVwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIE5lc3RlZFJvd3MgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwbHVnaW5cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBNYXAgb2Ygcm93IG9iamVjdCBwYXJlbnRzLlxuICAgICAqXG4gICAgICogQHR5cGUge1dlYWtNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicGFyZW50UmVmZXJlbmNlXCIsIG5ldyBXZWFrTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIE5lc3RlZCBzdHJ1Y3R1cmUgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNhY2hlXCIsIHtcbiAgICAgIGxldmVsczogW10sXG4gICAgICBsZXZlbENvdW50OiAwLFxuICAgICAgcm93czogW10sXG4gICAgICBub2RlSW5mbzogbmV3IFdlYWtNYXAoKVxuICAgIH0pO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gICAgdGhpcy5wbHVnaW4gPSBuZXN0ZWRSb3dzUGx1Z2luO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGF0YSBmb3IgdGhlIG1hbmFnZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SGFuZHNvbnRhYmxlLkNlbGxWYWx1ZVtdW118SGFuZHNvbnRhYmxlLlJvd09iamVjdFtdfSBkYXRhIERhdGEgZm9yIHRoZSBtYW5hZ2VyLlxuICAgKi9cbiAgc2V0RGF0YShkYXRhKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGEgY2FjaGVkIGluIHRoZSBtYW5hZ2VyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7SGFuZHNvbnRhYmxlLkNlbGxWYWx1ZVtdW118SGFuZHNvbnRhYmxlLlJvd09iamVjdFtdfVxuICAgKi9cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIFwicmF3XCIgc291cmNlIGRhdGEsIHdpdGhvdXQgTmVzdGVkUm93cycgbW9kaWZpY2F0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge0hhbmRzb250YWJsZS5DZWxsVmFsdWVbXVtdfEhhbmRzb250YWJsZS5Sb3dPYmplY3RbXX1cbiAgICovXG4gIGdldFJhd1NvdXJjZURhdGEoKSB7XG4gICAgbGV0IHJhd1NvdXJjZURhdGEgPSBudWxsO1xuICAgIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gICAgcmF3U291cmNlRGF0YSA9IHRoaXMuaG90LmdldFNvdXJjZURhdGEoKTtcbiAgICB0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gICAgcmV0dXJuIHJhd1NvdXJjZURhdGE7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHRoZSBEYXRhIE1hbmFnZXIgd2l0aCBuZXcgZGF0YSBhbmQgcmVmcmVzaCBjYWNoZS5cbiAgICpcbiAgICogQHBhcmFtIHtIYW5kc29udGFibGUuQ2VsbFZhbHVlW11bXXxIYW5kc29udGFibGUuUm93T2JqZWN0W119IGRhdGEgRGF0YSBmb3IgdGhlIG1hbmFnZXIuXG4gICAqL1xuICB1cGRhdGVXaXRoRGF0YShkYXRhKSB7XG4gICAgdGhpcy5zZXREYXRhKGRhdGEpO1xuICAgIHRoaXMucmV3cml0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV3cml0ZSB0aGUgbmVzdGVkIHN0cnVjdHVyZSBjYWNoZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJld3JpdGVDYWNoZSgpIHtcbiAgICB0aGlzLmNhY2hlID0ge1xuICAgICAgbGV2ZWxzOiBbXSxcbiAgICAgIGxldmVsQ291bnQ6IDAsXG4gICAgICByb3dzOiBbXSxcbiAgICAgIG5vZGVJbmZvOiBuZXcgV2Vha01hcCgpXG4gICAgfTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKDAsIHRoaXMuZGF0YS5sZW5ndGggLSAxLCBpID0+IHtcbiAgICAgIHRoaXMuY2FjaGVOb2RlKHRoaXMuZGF0YVtpXSwgMCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FjaGUgYSBkYXRhIG5vZGUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBub2RlIE5vZGUgdG8gY2FjaGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsZXZlbCBMZXZlbCBvZiB0aGUgbm9kZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBQYXJlbnQgb2YgdGhlIG5vZGUuXG4gICAqL1xuICBjYWNoZU5vZGUobm9kZSwgbGV2ZWwsIHBhcmVudCkge1xuICAgIGlmICghdGhpcy5jYWNoZS5sZXZlbHNbbGV2ZWxdKSB7XG4gICAgICB0aGlzLmNhY2hlLmxldmVsc1tsZXZlbF0gPSBbXTtcbiAgICAgIHRoaXMuY2FjaGUubGV2ZWxDb3VudCArPSAxO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlLmxldmVsc1tsZXZlbF0ucHVzaChub2RlKTtcbiAgICB0aGlzLmNhY2hlLnJvd3MucHVzaChub2RlKTtcbiAgICB0aGlzLmNhY2hlLm5vZGVJbmZvLnNldChub2RlLCB7XG4gICAgICBwYXJlbnQsXG4gICAgICByb3c6IHRoaXMuY2FjaGUucm93cy5sZW5ndGggLSAxLFxuICAgICAgbGV2ZWxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5oYXNDaGlsZHJlbihub2RlKSkge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG5vZGUuX19jaGlsZHJlbiwgZWxlbSA9PiB7XG4gICAgICAgIHRoaXMuY2FjaGVOb2RlKGVsZW0sIGxldmVsICsgMSwgbm9kZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkYXRlIGZvciB0aGUgcHJvdmlkZWQgdmlzdWFsIHJvdyBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgZ2V0RGF0YU9iamVjdChyb3cpIHtcbiAgICByZXR1cm4gcm93ID09PSBudWxsIHx8IHJvdyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHRoaXMuY2FjaGUucm93c1tyb3ddO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIHJvdyB0cmVlIGluIHNlYXJjaCBmb3IgYSBzcGVjaWZpYyByb3cgaW5kZXggb3Igcm93IG9iamVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBUaGUgaW5pdGlhbCBwYXJlbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVhZENvdW50IE51bWJlciBvZiByZWFkIG5vZGVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbmVlZGVkSW5kZXggVGhlIHJvdyBpbmRleCB3ZSBzZWFyY2ggZm9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gbmVlZGVkT2JqZWN0IFRoZSByb3cgb2JqZWN0IHdlIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8b2JqZWN0fVxuICAgKi9cbiAgcmVhZFRyZWVOb2RlcyhwYXJlbnQsIHJlYWRDb3VudCwgbmVlZGVkSW5kZXgsIG5lZWRlZE9iamVjdCkge1xuICAgIGxldCByb290TGV2ZWwgPSBmYWxzZTtcbiAgICBsZXQgcmVhZE5vZGVzQ291bnQgPSByZWFkQ291bnQ7XG4gICAgaWYgKGlzTmFOKHJlYWROb2Rlc0NvdW50KSAmJiByZWFkTm9kZXNDb3VudC5lbmQpIHtcbiAgICAgIHJldHVybiByZWFkTm9kZXNDb3VudDtcbiAgICB9XG4gICAgbGV0IHBhcmVudE9iaiA9IHBhcmVudDtcbiAgICBpZiAoIXBhcmVudE9iaikge1xuICAgICAgcGFyZW50T2JqID0ge1xuICAgICAgICBfX2NoaWxkcmVuOiB0aGlzLmRhdGFcbiAgICAgIH07XG4gICAgICByb290TGV2ZWwgPSB0cnVlO1xuICAgICAgcmVhZE5vZGVzQ291bnQgLT0gMTtcbiAgICB9XG4gICAgaWYgKG5lZWRlZEluZGV4ICE9PSBudWxsICYmIG5lZWRlZEluZGV4ICE9PSB1bmRlZmluZWQgJiYgcmVhZE5vZGVzQ291bnQgPT09IG5lZWRlZEluZGV4KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHBhcmVudE9iaixcbiAgICAgICAgZW5kOiB0cnVlXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobmVlZGVkT2JqZWN0ICE9PSBudWxsICYmIG5lZWRlZE9iamVjdCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE9iaiA9PT0gbmVlZGVkT2JqZWN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXN1bHQ6IHJlYWROb2Rlc0NvdW50LFxuICAgICAgICBlbmQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJlYWROb2Rlc0NvdW50ICs9IDE7XG4gICAgaWYgKHBhcmVudE9iai5fX2NoaWxkcmVuKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocGFyZW50T2JqLl9fY2hpbGRyZW4sIHZhbCA9PiB7XG4gICAgICAgIHRoaXMucGFyZW50UmVmZXJlbmNlLnNldCh2YWwsIHJvb3RMZXZlbCA/IG51bGwgOiBwYXJlbnRPYmopO1xuICAgICAgICByZWFkTm9kZXNDb3VudCA9IHRoaXMucmVhZFRyZWVOb2Rlcyh2YWwsIHJlYWROb2Rlc0NvdW50LCBuZWVkZWRJbmRleCwgbmVlZGVkT2JqZWN0KTtcbiAgICAgICAgaWYgKGlzTmFOKHJlYWROb2Rlc0NvdW50KSAmJiByZWFkTm9kZXNDb3VudC5lbmQpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZE5vZGVzQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhIHBhcmVudCBub2RlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIG1vY2tQYXJlbnQoKSB7XG4gICAgY29uc3QgZmFrZVBhcmVudCA9IHRoaXMubW9ja05vZGUoKTtcbiAgICBmYWtlUGFyZW50Ll9fY2hpbGRyZW4gPSB0aGlzLmRhdGE7XG4gICAgcmV0dXJuIGZha2VQYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhIGRhdGEgbm9kZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge3t9fVxuICAgKi9cbiAgbW9ja05vZGUoKSB7XG4gICAgY29uc3QgZmFrZU5vZGUgPSB7fTtcbiAgICAoMCwgX29iamVjdC5vYmplY3RFYWNoKSh0aGlzLmRhdGFbMF0sICh2YWwsIGtleSkgPT4ge1xuICAgICAgZmFrZU5vZGVba2V5XSA9IG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZha2VOb2RlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcm93IGluZGV4IGZvciB0aGUgcHJvdmlkZWQgcm93IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHJvd09iaiBUaGUgcm93IG9iamVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUm93IGluZGV4LlxuICAgKi9cbiAgZ2V0Um93SW5kZXgocm93T2JqKSB7XG4gICAgcmV0dXJuIHJvd09iaiA9PT0gbnVsbCB8fCByb3dPYmogPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChyb3dPYmopLnJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBwcm92aWRlZCByb3cgaW5kZXgvcm93IG9iamVjdCB3aXRoaW4gaXRzIHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSByb3cgUm93IGluZGV4IC8gcm93IG9iamVjdC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFJvd0luZGV4V2l0aGluUGFyZW50KHJvdykge1xuICAgIGxldCByb3dPYmogPSBudWxsO1xuICAgIGlmIChpc05hTihyb3cpKSB7XG4gICAgICByb3dPYmogPSByb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd09iaiA9IHRoaXMuZ2V0RGF0YU9iamVjdChyb3cpO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFJvd1BhcmVudChyb3cpO1xuICAgIGlmIChwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuaW5kZXhPZihyb3dPYmopO1xuICAgIH1cbiAgICByZXR1cm4gcGFyZW50Ll9fY2hpbGRyZW4uaW5kZXhPZihyb3dPYmopO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IGFsbCByb3dzIChpbmNsdWRpbmcgYWxsIHBhcmVudHMgYW5kIGNoaWxkcmVuKS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGNvdW50QWxsUm93cygpIHtcbiAgICBjb25zdCByb290Tm9kZU1vY2sgPSB7XG4gICAgICBfX2NoaWxkcmVuOiB0aGlzLmRhdGFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmNvdW50Q2hpbGRyZW4ocm9vdE5vZGVNb2NrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBjaGlsZHJlbiBvZiB0aGUgcHJvdmlkZWQgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdHxudW1iZXJ9IHBhcmVudCBQYXJlbnQgbm9kZS5cbiAgICogQHJldHVybnMge251bWJlcn0gQ2hpbGRyZW4gY291bnQuXG4gICAqL1xuICBjb3VudENoaWxkcmVuKHBhcmVudCkge1xuICAgIGxldCByb3dDb3VudCA9IDA7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBwYXJlbnQ7XG4gICAgaWYgKCFpc05hTihwYXJlbnROb2RlKSkge1xuICAgICAgcGFyZW50Tm9kZSA9IHRoaXMuZ2V0RGF0YU9iamVjdChwYXJlbnROb2RlKTtcbiAgICB9XG4gICAgaWYgKCFwYXJlbnROb2RlIHx8ICFwYXJlbnROb2RlLl9fY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocGFyZW50Tm9kZS5fX2NoaWxkcmVuLCBlbGVtID0+IHtcbiAgICAgIHJvd0NvdW50ICs9IDE7XG4gICAgICBpZiAoZWxlbS5fX2NoaWxkcmVuKSB7XG4gICAgICAgIHJvd0NvdW50ICs9IHRoaXMuY291bnRDaGlsZHJlbihlbGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93Q291bnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwYXJlbnQgb2YgdGhlIHJvdyBhdCB0aGUgcHJvdmlkZWQgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfG9iamVjdH0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldFJvd1BhcmVudChyb3cpIHtcbiAgICBsZXQgcm93T2JqZWN0O1xuICAgIGlmIChpc05hTihyb3cpKSB7XG4gICAgICByb3dPYmplY3QgPSByb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd09iamVjdCA9IHRoaXMuZ2V0RGF0YU9iamVjdChyb3cpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQocm93T2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBhcmVudCBvZiB0aGUgcHJvdmlkZWQgcm93IG9iamVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHJvd09iamVjdCBUaGUgcm93IG9iamVjdCAodHJlZSBub2RlKS5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfVxuICAgKi9cbiAgZ2V0Um93T2JqZWN0UGFyZW50KHJvd09iamVjdCkge1xuICAgIGlmICghcm93T2JqZWN0IHx8IHR5cGVvZiByb3dPYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KHJvd09iamVjdCkucGFyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmVzdGluZyBsZXZlbCBmb3IgdGhlIHJvdyB3aXRoIHRoZSBwcm92aWRlZCByb3cgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9IFJvdyBsZXZlbCBvciBudWxsLCB3aGVuIHJvdyBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0Um93TGV2ZWwocm93KSB7XG4gICAgbGV0IHJvd09iamVjdCA9IG51bGw7XG4gICAgaWYgKGlzTmFOKHJvdykpIHtcbiAgICAgIHJvd09iamVjdCA9IHJvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcm93T2JqZWN0ID0gdGhpcy5nZXREYXRhT2JqZWN0KHJvdyk7XG4gICAgfVxuICAgIHJldHVybiByb3dPYmplY3QgPyB0aGlzLmdldFJvd09iamVjdExldmVsKHJvd09iamVjdCkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmVzdGluZyBsZXZlbCBmb3IgdGhlIHJvdyB3aXRoIHRoZSBwcm92aWRlZCByb3cgaW5kZXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb3dPYmplY3QgUm93IG9iamVjdC5cbiAgICogQHJldHVybnMge251bWJlcn0gUm93IGxldmVsLlxuICAgKi9cbiAgZ2V0Um93T2JqZWN0TGV2ZWwocm93T2JqZWN0KSB7XG4gICAgcmV0dXJuIHJvd09iamVjdCA9PT0gbnVsbCB8fCByb3dPYmplY3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChyb3dPYmplY3QpLmxldmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBwcm92aWRlZCByb3cvcm93IGVsZW1lbnQgaGFzIGNoaWxkcmVuLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcnxvYmplY3R9IHJvdyBSb3cgbnVtYmVyIG9yIHJvdyBlbGVtZW50LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0NoaWxkcmVuKHJvdykge1xuICAgIGxldCByb3dPYmogPSByb3c7XG4gICAgaWYgKCFpc05hTihyb3dPYmopKSB7XG4gICAgICByb3dPYmogPSB0aGlzLmdldERhdGFPYmplY3Qocm93T2JqKTtcbiAgICB9XG4gICAgcmV0dXJuICEhKHJvd09iai5fX2NoaWxkcmVuICYmIHJvd09iai5fX2NoaWxkcmVuLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJvdyBhdCB0aGUgcHJvdmlkZWQgaW5kZXggaGFzIGEgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSByb3cgYXQgdGhlIHByb3ZpZGVkIGluZGV4IGhhcyBhIHBhcmVudCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBpc0NoaWxkKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um93UGFyZW50KGluZGV4KSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hpbGQgYXQgYSBwcm92aWRlZCBpbmRleCBmcm9tIHRoZSBwYXJlbnQgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBUaGUgcGFyZW50IHJvdyBvYmplY3QuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCBvZiB0aGUgY2hpbGQgZWxlbWVudCB0byBiZSByZXRyaWV2ZWQuXG4gICAqIEByZXR1cm5zIHtvYmplY3R8bnVsbH0gVGhlIGNoaWxkIGVsZW1lbnQgb3IgYG51bGxgIGlmIHRoZSBjaGlsZCBkb2Vzbid0IGV4aXN0LlxuICAgKi9cbiAgZ2V0Q2hpbGQocGFyZW50LCBpbmRleCkge1xuICAgIHZhciBfcGFyZW50JF9fY2hpbGRyZW47XG4gICAgcmV0dXJuICgoX3BhcmVudCRfX2NoaWxkcmVuID0gcGFyZW50Ll9fY2hpbGRyZW4pID09PSBudWxsIHx8IF9wYXJlbnQkX19jaGlsZHJlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3BhcmVudCRfX2NoaWxkcmVuW2luZGV4XSkgfHwgbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIG9mIHRoZSByb3cgYXQgdGhlIHByb3ZpZGVkIGluZGV4IGlzIGxvY2F0ZWQgYXQgdGhlIHRvcG1vc3QgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBSb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgb2YgdGhlIHJvdyBhdCB0aGUgcHJvdmlkZWQgaW5kZXggaXMgbG9jYXRlZCBhdCB0aGUgdG9wbW9zdCBsZXZlbCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBpc1Jvd0hpZ2hlc3RMZXZlbChpbmRleCkge1xuICAgIHJldHVybiAhdGhpcy5pc0NoaWxkKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoZSBwcm92aWRlZCByb3cgaW5kZXggLyByb3cgb2JqZWN0IHJlcHJlc2VudHMgYSBwYXJlbnQgaW4gdGhlIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfG9iamVjdH0gcm93IFJvdyBpbmRleCAvIHJvdyBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIHJvdyBpcyBhIHBhcmVudCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBpc1BhcmVudChyb3cpIHtcbiAgICB2YXIgX3Jvd09iaiRfX2NoaWxkcmVuO1xuICAgIGxldCByb3dPYmogPSByb3c7XG4gICAgaWYgKCFpc05hTihyb3dPYmopKSB7XG4gICAgICByb3dPYmogPSB0aGlzLmdldERhdGFPYmplY3Qocm93T2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd09iaiAmJiAhIXJvd09iai5fX2NoaWxkcmVuICYmICgoX3Jvd09iaiRfX2NoaWxkcmVuID0gcm93T2JqLl9fY2hpbGRyZW4pID09PSBudWxsIHx8IF9yb3dPYmokX19jaGlsZHJlbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Jvd09iaiRfX2NoaWxkcmVuLmxlbmd0aCkgIT09IDA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2hpbGQgdG8gdGhlIHByb3ZpZGVkIHBhcmVudC4gSXQncyBvcHRpb25hbCB0byBhZGQgYSByb3cgb2JqZWN0IGFzIHRoZSBcImVsZW1lbnRcIi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBUaGUgcGFyZW50IHJvdyBvYmplY3QuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZWxlbWVudF0gVGhlIGVsZW1lbnQgdG8gYWRkIGFzIGEgY2hpbGQuXG4gICAqL1xuICBhZGRDaGlsZChwYXJlbnQsIGVsZW1lbnQpIHtcbiAgICBsZXQgY2hpbGRFbGVtZW50ID0gZWxlbWVudDtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlQWRkQ2hpbGQnLCBwYXJlbnQsIGNoaWxkRWxlbWVudCk7XG4gICAgbGV0IHBhcmVudEluZGV4ID0gbnVsbDtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnRJbmRleCA9IHRoaXMuZ2V0Um93SW5kZXgocGFyZW50KTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUNyZWF0ZVJvdycsIHBhcmVudEluZGV4ICsgdGhpcy5jb3VudENoaWxkcmVuKHBhcmVudCkgKyAxLCAxKTtcbiAgICBsZXQgZnVuY3Rpb25hbFBhcmVudCA9IHBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgZnVuY3Rpb25hbFBhcmVudCA9IHRoaXMubW9ja1BhcmVudCgpO1xuICAgIH1cbiAgICBpZiAoIWZ1bmN0aW9uYWxQYXJlbnQuX19jaGlsZHJlbikge1xuICAgICAgZnVuY3Rpb25hbFBhcmVudC5fX2NoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGlmICghY2hpbGRFbGVtZW50KSB7XG4gICAgICBjaGlsZEVsZW1lbnQgPSB0aGlzLm1vY2tOb2RlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uYWxQYXJlbnQuX19jaGlsZHJlbi5wdXNoKGNoaWxkRWxlbWVudCk7XG4gICAgdGhpcy5yZXdyaXRlQ2FjaGUoKTtcbiAgICBjb25zdCBuZXdSb3dJbmRleCA9IHRoaXMuZ2V0Um93SW5kZXgoY2hpbGRFbGVtZW50KTtcbiAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKG5ld1Jvd0luZGV4LCAxKTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDcmVhdGVSb3cnLCBuZXdSb3dJbmRleCwgMSk7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQWRkQ2hpbGQnLCBwYXJlbnQsIGNoaWxkRWxlbWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY2hpbGQgbm9kZSB0byB0aGUgcHJvdmlkZWQgcGFyZW50IGF0IGEgc3BlY2lmaWVkIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gcGFyZW50IFBhcmVudCBub2RlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdG8gaW5zZXJ0IHRoZSBjaGlsZCBlbGVtZW50IGF0LlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2VsZW1lbnRdIEVsZW1lbnQgKG5vZGUpIHRvIGluc2VydC5cbiAgICovXG4gIGFkZENoaWxkQXRJbmRleChwYXJlbnQsIGluZGV4LCBlbGVtZW50KSB7XG4gICAgbGV0IGNoaWxkRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgbGV0IGZsYXR0ZW5lZEluZGV4O1xuICAgIGlmICghY2hpbGRFbGVtZW50KSB7XG4gICAgICBjaGlsZEVsZW1lbnQgPSB0aGlzLm1vY2tOb2RlKCk7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVBZGRDaGlsZCcsIHBhcmVudCwgY2hpbGRFbGVtZW50LCBpbmRleCk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgY29uc3QgcGFyZW50SW5kZXggPSB0aGlzLmdldFJvd0luZGV4KHBhcmVudCk7XG4gICAgICBjb25zdCBmaW5hbENoaWxkSW5kZXggPSBwYXJlbnRJbmRleCArIGluZGV4ICsgMTtcbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDcmVhdGVSb3cnLCBmaW5hbENoaWxkSW5kZXgsIDEpO1xuICAgICAgcGFyZW50Ll9fY2hpbGRyZW4uc3BsaWNlKGluZGV4LCBudWxsLCBjaGlsZEVsZW1lbnQpO1xuICAgICAgdGhpcy5yZXdyaXRlQ2FjaGUoKTtcbiAgICAgIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gICAgICB0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQocGFyZW50KSwgJ19fY2hpbGRyZW4nLCBwYXJlbnQuX19jaGlsZHJlbiwgJ05lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4Jyk7XG4gICAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKGZpbmFsQ2hpbGRJbmRleCwgMSk7XG4gICAgICB0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDcmVhdGVSb3cnLCBmaW5hbENoaWxkSW5kZXgsIDEpO1xuICAgICAgZmxhdHRlbmVkSW5kZXggPSBmaW5hbENoaWxkSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gICAgICB0aGlzLmhvdC5hbHRlcignaW5zZXJ0X3Jvd19hYm92ZScsIGluZGV4LCAxLCAnTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgnKTtcbiAgICAgIHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKTtcbiAgICAgIGZsYXR0ZW5lZEluZGV4ID0gdGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFbaW5kZXhdKTtcbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciByZWZyZXNoaW5nIGNhY2hlIGxvc2luZyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBtb2NrZWQgcm93LlxuICAgIGNoaWxkRWxlbWVudCA9IHRoaXMuZ2V0RGF0YU9iamVjdChmbGF0dGVuZWRJbmRleCk7XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyQWRkQ2hpbGQnLCBwYXJlbnQsIGNoaWxkRWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpYmxpbmcgZWxlbWVudCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggTmV3IGVsZW1lbnQgc2libGluZydzIGluZGV4LlxuICAgKiBAcGFyYW0geygnYWJvdmUnfCdiZWxvdycpfSB3aGVyZSBEaXJlY3Rpb24gaW4gd2hpY2ggdGhlIHNpYmxpbmcgaXMgdG8gYmUgY3JlYXRlZC5cbiAgICovXG4gIGFkZFNpYmxpbmcoaW5kZXgpIHtcbiAgICBsZXQgd2hlcmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdiZWxvdyc7XG4gICAgY29uc3QgdHJhbnNsYXRlZEluZGV4ID0gdGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGluZGV4KTtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFJvd1BhcmVudCh0cmFuc2xhdGVkSW5kZXgpO1xuICAgIGNvbnN0IGluZGV4V2l0aGluUGFyZW50ID0gdGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudCh0cmFuc2xhdGVkSW5kZXgpO1xuICAgIHN3aXRjaCAod2hlcmUpIHtcbiAgICAgIGNhc2UgJ2JlbG93JzpcbiAgICAgICAgdGhpcy5hZGRDaGlsZEF0SW5kZXgocGFyZW50LCBpbmRleFdpdGhpblBhcmVudCArIDEsIG51bGwpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fib3ZlJzpcbiAgICAgICAgdGhpcy5hZGRDaGlsZEF0SW5kZXgocGFyZW50LCBpbmRleFdpdGhpblBhcmVudCwgbnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGFjaCB0aGUgcHJvdmlkZWQgZWxlbWVudCBmcm9tIGl0cyBwYXJlbnQgYW5kIGFkZCBpdCByaWdodCBhZnRlciBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R8QXJyYXl9IGVsZW1lbnRzIFJvdyBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgY29vcmRpbmF0ZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlUmVuZGVyPXRydWVdIElmIHRydWUgKGRlZmF1bHQpLCBpdCB0cmlnZ2VycyByZW5kZXIgYWZ0ZXIgZmluaXNoZWQuXG4gICAqL1xuICBkZXRhY2hGcm9tUGFyZW50KGVsZW1lbnRzKSB7XG4gICAgbGV0IGZvcmNlUmVuZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcbiAgICBjb25zdCByb3dPYmplY3RzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudHMpKSB7XG4gICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGVsZW1lbnRzWzBdLCBlbGVtZW50c1syXSwgaSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRJbmRleCA9IHRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhpKTtcbiAgICAgICAgcm93T2JqZWN0cy5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdCh0cmFuc2xhdGVkSW5kZXgpKTtcbiAgICAgIH0pO1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKSgwLCByb3dPYmplY3RzLmxlbmd0aCAtIDIsIGkgPT4ge1xuICAgICAgICB0aGlzLmRldGFjaEZyb21QYXJlbnQocm93T2JqZWN0c1tpXSwgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgICBlbGVtZW50ID0gcm93T2JqZWN0c1tyb3dPYmplY3RzLmxlbmd0aCAtIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50ID0gZWxlbWVudHM7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm93SW5kZXggPSB0aGlzLmdldFJvd0luZGV4KGVsZW1lbnQpO1xuICAgIGNvbnN0IGNoaWxkQ291bnQgPSB0aGlzLmNvdW50Q2hpbGRyZW4oZWxlbWVudCk7XG4gICAgY29uc3QgaW5kZXhXaXRoaW5QYXJlbnQgPSB0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0Um93UGFyZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGdyYW5kcGFyZW50ID0gdGhpcy5nZXRSb3dQYXJlbnQocGFyZW50KTtcbiAgICBjb25zdCBncmFuZHBhcmVudFJvd0luZGV4ID0gdGhpcy5nZXRSb3dJbmRleChncmFuZHBhcmVudCk7XG4gICAgbGV0IG1vdmVkRWxlbWVudFJvd0luZGV4ID0gbnVsbDtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlRGV0YWNoQ2hpbGQnLCBwYXJlbnQsIGVsZW1lbnQpO1xuICAgIGlmIChpbmRleFdpdGhpblBhcmVudCAhPT0gbnVsbCAmJiBpbmRleFdpdGhpblBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCByZW1vdmVkUm93SW5kZXhlcyA9IEFycmF5LmZyb20obmV3IEFycmF5KGNoaWxkUm93SW5kZXggKyBjaGlsZENvdW50ICsgMSkua2V5cygpKS5zcGxpY2UoLTEgKiAoY2hpbGRDb3VudCArIDEpKTtcbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVSZW1vdmVSb3cnLCBjaGlsZFJvd0luZGV4LCBjaGlsZENvdW50ICsgMSwgcmVtb3ZlZFJvd0luZGV4ZXMsIHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpO1xuICAgICAgcGFyZW50Ll9fY2hpbGRyZW4uc3BsaWNlKGluZGV4V2l0aGluUGFyZW50LCAxKTtcbiAgICAgIHRoaXMucmV3cml0ZUNhY2hlKCk7XG4gICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJSZW1vdmVSb3cnLCBjaGlsZFJvd0luZGV4LCBjaGlsZENvdW50ICsgMSwgcmVtb3ZlZFJvd0luZGV4ZXMsIHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpO1xuICAgICAgaWYgKGdyYW5kcGFyZW50KSB7XG4gICAgICAgIG1vdmVkRWxlbWVudFJvd0luZGV4ID0gZ3JhbmRwYXJlbnRSb3dJbmRleCArIHRoaXMuY291bnRDaGlsZHJlbihncmFuZHBhcmVudCk7XG4gICAgICAgIGNvbnN0IGxhc3RHcmFuZHBhcmVudENoaWxkID0gdGhpcy5nZXRDaGlsZChncmFuZHBhcmVudCwgdGhpcy5jb3VudENoaWxkcmVuKGdyYW5kcGFyZW50KSAtIDEpO1xuICAgICAgICBjb25zdCBsYXN0R3JhbmRwYXJlbnRDaGlsZEluZGV4ID0gdGhpcy5nZXRSb3dJbmRleChsYXN0R3JhbmRwYXJlbnRDaGlsZCk7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVDcmVhdGVSb3cnLCBsYXN0R3JhbmRwYXJlbnRDaGlsZEluZGV4ICsgMSwgY2hpbGRDb3VudCArIDEsIHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpO1xuICAgICAgICBncmFuZHBhcmVudC5fX2NoaWxkcmVuLnB1c2goZWxlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtb3ZlZEVsZW1lbnRSb3dJbmRleCA9IHRoaXMuaG90LmNvdW50Um93cygpICsgMTtcbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUNyZWF0ZVJvdycsIG1vdmVkRWxlbWVudFJvd0luZGV4IC0gMiwgY2hpbGRDb3VudCArIDEsIHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpO1xuICAgICAgICB0aGlzLmRhdGEucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZXdyaXRlQ2FjaGUoKTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJDcmVhdGVSb3cnLCBtb3ZlZEVsZW1lbnRSb3dJbmRleCAtIDIsIGNoaWxkQ291bnQgKyAxLCB0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJEZXRhY2hDaGlsZCcsIHBhcmVudCwgZWxlbWVudCwgdGhpcy5nZXRSb3dJbmRleChlbGVtZW50KSk7XG4gICAgaWYgKGZvcmNlUmVuZGVyKSB7XG4gICAgICB0aGlzLmhvdC5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHRoZSBkYXRhIGJ5IHRoZSBgbG9naWNSb3dzYCBhcnJheS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IG9mIHRoZSBmaXJzdCByb3cgdG8gcmVtb3ZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IE51bWJlciBvZiBlbGVtZW50cyB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGxvZ2ljUm93cyBBcnJheSBvZiBpbmRleGVzIHRvIHJlbW92ZS5cbiAgICovXG4gIGZpbHRlckRhdGEoaW5kZXgsIGFtb3VudCwgbG9naWNSb3dzKSB7XG4gICAgLy8gVE9ETzogd2h5IGFyZSB0aGUgZmlyc3QgMiBhcmd1bWVudHMgbm90IHVzZWQ/XG5cbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGxvZ2ljUm93cywgZWxlbSA9PiB7XG4gICAgICBlbGVtZW50c1RvUmVtb3ZlLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KGVsZW0pKTtcbiAgICB9KTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZWxlbWVudHNUb1JlbW92ZSwgZWxlbSA9PiB7XG4gICAgICBjb25zdCBpbmRleFdpdGhpblBhcmVudCA9IHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZWxlbSk7XG4gICAgICBjb25zdCB0ZW1wUGFyZW50ID0gdGhpcy5nZXRSb3dQYXJlbnQoZWxlbSk7XG4gICAgICBpZiAodGVtcFBhcmVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4V2l0aGluUGFyZW50LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBQYXJlbnQuX19jaGlsZHJlbi5zcGxpY2UoaW5kZXhXaXRoaW5QYXJlbnQsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucmV3cml0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzcGxpY2UgdGhlIHNvdXJjZSBkYXRhLiBOZWVkZWQgdG8gcHJvcGVybHkgbW9kaWZ5IHRoZSBuZXN0ZWQgc3RydWN0dXJlLCB3aGljaCB3b3VsZG4ndCB3b3JrIHdpdGggdGhlXG4gICAqIGRlZmF1bHQgc2NyaXB0LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggUGh5c2ljYWwgaW5kZXggb2YgdGhlIGVsZW1lbnQgYXQgdGhlIHNwbGljZSBiZWdpbm5pbmcuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGJlIHJlbW92ZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0W119IGVsZW1lbnRzIEFycmF5IG9mIHJvdyBvYmplY3RzIHRvIGFkZC5cbiAgICovXG4gIHNwbGljZURhdGEoaW5kZXgsIGFtb3VudCwgZWxlbWVudHMpIHtcbiAgICBjb25zdCBwcmV2aW91c0VsZW1lbnQgPSB0aGlzLmdldERhdGFPYmplY3QoaW5kZXggLSAxKTtcbiAgICBsZXQgbmV3Um93UGFyZW50ID0gbnVsbDtcbiAgICBsZXQgaW5kZXhXaXRoaW5QYXJlbnQgPSBpbmRleDtcbiAgICBpZiAocHJldmlvdXNFbGVtZW50ICYmIHByZXZpb3VzRWxlbWVudC5fX2NoaWxkcmVuICYmIHByZXZpb3VzRWxlbWVudC5fX2NoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbmV3Um93UGFyZW50ID0gcHJldmlvdXNFbGVtZW50O1xuICAgICAgaW5kZXhXaXRoaW5QYXJlbnQgPSAwO1xuICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLmNvdW50QWxsUm93cygpKSB7XG4gICAgICBuZXdSb3dQYXJlbnQgPSB0aGlzLmdldFJvd1BhcmVudChpbmRleCk7XG4gICAgICBpbmRleFdpdGhpblBhcmVudCA9IHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoaW5kZXgpO1xuICAgIH1cbiAgICBpZiAobmV3Um93UGFyZW50KSB7XG4gICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgbmV3Um93UGFyZW50Ll9fY2hpbGRyZW4uc3BsaWNlKGluZGV4V2l0aGluUGFyZW50LCBhbW91bnQsIC4uLmVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jvd1BhcmVudC5fX2NoaWxkcmVuLnNwbGljZShpbmRleFdpdGhpblBhcmVudCwgYW1vdW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVsZW1lbnRzKSB7XG4gICAgICB0aGlzLmRhdGEuc3BsaWNlKGluZGV4V2l0aGluUGFyZW50LCBhbW91bnQsIC4uLmVsZW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnNwbGljZShpbmRleFdpdGhpblBhcmVudCwgYW1vdW50KTtcbiAgICB9XG4gICAgdGhpcy5yZXdyaXRlQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGBfX2NoaWxkcmVuYCBrZXkgb2YgdGhlIHVwbW9zdCBwYXJlbnQgb2YgdGhlIHByb3ZpZGVkIHJvdyBvYmplY3QuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb3dFbGVtZW50IFJvdyBvYmplY3QuXG4gICAqL1xuICBzeW5jUm93V2l0aFJhd1NvdXJjZShyb3dFbGVtZW50KSB7XG4gICAgbGV0IHVwbW9zdFBhcmVudCA9IHJvd0VsZW1lbnQ7XG4gICAgbGV0IHRlbXBQYXJlbnQgPSBudWxsO1xuICAgIGRvIHtcbiAgICAgIHRlbXBQYXJlbnQgPSB0aGlzLmdldFJvd1BhcmVudCh0ZW1wUGFyZW50KTtcbiAgICAgIGlmICh0ZW1wUGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHVwbW9zdFBhcmVudCA9IHRlbXBQYXJlbnQ7XG4gICAgICB9XG4gICAgfSB3aGlsZSAodGVtcFBhcmVudCAhPT0gbnVsbCk7XG4gICAgdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKTtcbiAgICB0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXgodXBtb3N0UGFyZW50KSwgJ19fY2hpbGRyZW4nLCB1cG1vc3RQYXJlbnQuX19jaGlsZHJlbiwgJ05lc3RlZFJvd3Muc3luY1Jvd1dpdGhSYXdTb3VyY2UnKTtcbiAgICB0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXBhcmFtICovXG4gIC8qKlxuICAgKiBNb3ZlIGEgc2luZ2xlIHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBJbmRleCBvZiB0aGUgcm93IHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdG9JbmRleCBJbmRleCBvZiB0aGUgZGVzdGluYXRpb24uXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbW92ZVRvQ29sbGFwc2VkIGB0cnVlYCBpZiBtb3ZpbmcgYSByb3cgdG8gYSBjb2xsYXBzZWQgcGFyZW50LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVUb0xhc3RDaGlsZCBgdHJ1ZWAgaWYgbW92aW5nIGEgcm93IHRvIGJlIGEgbGFzdCBjaGlsZCBvZiB0aGUgbmV3IHBhcmVudC5cbiAgICovXG5cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLXBhcmFtICovXG4gIG1vdmVSb3coZnJvbUluZGV4LCB0b0luZGV4LCBtb3ZlVG9Db2xsYXBzZWQsIG1vdmVUb0xhc3RDaGlsZCkge1xuICAgIGNvbnN0IG1vdmVUb0xhc3RSb3cgPSB0b0luZGV4ID09PSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBmcm9tUGFyZW50ID0gdGhpcy5nZXRSb3dQYXJlbnQoZnJvbUluZGV4KTtcbiAgICBjb25zdCBpbmRleEluRnJvbVBhcmVudCA9IHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZnJvbUluZGV4KTtcbiAgICBjb25zdCBlbGVtVG9Nb3ZlID0gZnJvbVBhcmVudC5fX2NoaWxkcmVuLnNsaWNlKGluZGV4SW5Gcm9tUGFyZW50LCBpbmRleEluRnJvbVBhcmVudCArIDEpO1xuICAgIGNvbnN0IG1vdmluZ1VwID0gZnJvbUluZGV4ID4gdG9JbmRleDtcbiAgICBsZXQgdG9QYXJlbnQgPSBtb3ZlVG9MYXN0Um93ID8gdGhpcy5nZXRSb3dQYXJlbnQodG9JbmRleCAtIDEpIDogdGhpcy5nZXRSb3dQYXJlbnQodG9JbmRleCk7XG4gICAgaWYgKHRvUGFyZW50ID09PSBudWxsIHx8IHRvUGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRvUGFyZW50ID0gdGhpcy5nZXRSb3dQYXJlbnQodG9JbmRleCAtIDEpO1xuICAgIH1cbiAgICBpZiAodG9QYXJlbnQgPT09IG51bGwgfHwgdG9QYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdG9QYXJlbnQgPSB0aGlzLmdldERhdGFPYmplY3QodG9JbmRleCAtIDEpO1xuICAgIH1cbiAgICBpZiAoIXRvUGFyZW50KSB7XG4gICAgICB0b1BhcmVudCA9IHRoaXMuZ2V0RGF0YU9iamVjdCh0b0luZGV4KTtcbiAgICAgIHRvUGFyZW50Ll9fY2hpbGRyZW4gPSBbXTtcbiAgICB9IGVsc2UgaWYgKCF0b1BhcmVudC5fX2NoaWxkcmVuKSB7XG4gICAgICB0b1BhcmVudC5fX2NoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGNvbnN0IGluZGV4SW5UYXJnZXRQYXJlbnQgPSBtb3ZlVG9MYXN0Um93IHx8IG1vdmVUb0NvbGxhcHNlZCB8fCBtb3ZlVG9MYXN0Q2hpbGQgPyB0b1BhcmVudC5fX2NoaWxkcmVuLmxlbmd0aCA6IHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQodG9JbmRleCk7XG4gICAgY29uc3Qgc2FtZVBhcmVudCA9IGZyb21QYXJlbnQgPT09IHRvUGFyZW50O1xuICAgIHRvUGFyZW50Ll9fY2hpbGRyZW4uc3BsaWNlKGluZGV4SW5UYXJnZXRQYXJlbnQsIDAsIGVsZW1Ub01vdmVbMF0pO1xuICAgIGZyb21QYXJlbnQuX19jaGlsZHJlbi5zcGxpY2UoaW5kZXhJbkZyb21QYXJlbnQgKyAobW92aW5nVXAgJiYgc2FtZVBhcmVudCA/IDEgOiAwKSwgMSk7XG5cbiAgICAvLyBTeW5jIHRoZSBjaGFuZ2VzIGluIHRoZSBjYWNoZWQgZGF0YSB3aXRoIHRoZSBhY3R1YWwgZGF0YSBzdG9yZWQgaW4gSE9ULlxuICAgIHRoaXMuc3luY1Jvd1dpdGhSYXdTb3VyY2UoZnJvbVBhcmVudCk7XG4gICAgaWYgKCFzYW1lUGFyZW50KSB7XG4gICAgICB0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHRvUGFyZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHRoZSB2aXN1YWwgcm93IGluZGV4IHRvIHRoZSBwaHlzaWNhbCBpbmRleCwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiB0aGUgc3RhdGUgb2YgY29sbGFwc2VkIHJvd3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgdHJhbnNsYXRlVHJpbW1lZFJvdyhyb3cpIHtcbiAgICBpZiAodGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGUgdGhlIHBoeXNpY2FsIHJvdyBpbmRleCB0byB0aGUgdmlzdWFsIGluZGV4LCB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9uIHRoZSBzdGF0ZSBvZiBjb2xsYXBzZWQgcm93cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBSb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICB1bnRyYW5zbGF0ZVRyaW1tZWRSb3cocm93KSB7XG4gICAgaWYgKHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSkge1xuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS51bnRyYW5zbGF0ZVRyaW1tZWRSb3cocm93KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gRGF0YU1hbmFnZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX25lc3RlZFJvd3MgPSByZXF1aXJlKFwiLi9uZXN0ZWRSb3dzXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX25lc3RlZFJvd3MuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX25lc3RlZFJvd3MuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5OZXN0ZWRSb3dzID0gX25lc3RlZFJvd3MuTmVzdGVkUm93czsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZGF0YU1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2RhdGEvZGF0YU1hbmFnZXJcIikpO1xudmFyIF9jb2xsYXBzaW5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91aS9jb2xsYXBzaW5nXCIpKTtcbnZhciBfaGVhZGVycyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdWkvaGVhZGVyc1wiKSk7XG52YXIgX2NvbnRleHRNZW51ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91aS9jb250ZXh0TWVudVwiKSk7XG52YXIgX2NvbnNvbGUgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9jb25zb2xlXCIpO1xudmFyIF9kYXRhID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZGF0YVwiKTtcbnZhciBfdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zbGF0aW9uc1wiKTtcbnZhciBfc2hvcnRjdXRDb250ZXh0cyA9IHJlcXVpcmUoXCIuLi8uLi9zaG9ydGN1dENvbnRleHRzXCIpO1xudmFyIF9yb3dNb3ZlQ29udHJvbGxlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdXRpbHMvcm93TW92ZUNvbnRyb2xsZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWMob2JqLCBwcml2YXRlTWFwLCB2YWx1ZSkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVNYXApOyBwcml2YXRlTWFwLnNldChvYmosIHZhbHVlKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICduZXN0ZWRSb3dzJztcbmNvbnN0IFBMVUdJTl9QUklPUklUWSA9IGV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gMzAwO1xuY29uc3QgU0hPUlRDVVRTX0dST1VQID0gUExVR0lOX0tFWTtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvciB0aGUgd3JvbmcgZGF0YSB0eXBlIGVycm9yLlxuICovXG5jb25zdCBXUk9OR19EQVRBX1RZUEVfRVJST1IgPSAnVGhlIE5lc3RlZCBSb3dzIHBsdWdpbiByZXF1aXJlcyBhbiBBcnJheSBvZiBPYmplY3RzIGFzIGEgZGF0YXNldCB0byBiZScgKyAnIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLic7XG5cbi8qKlxuICogQHBsdWdpbiBOZXN0ZWRSb3dzXG4gKiBAY2xhc3MgTmVzdGVkUm93c1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogUGx1Z2luIHJlc3BvbnNpYmxlIGZvciBkaXNwbGF5aW5nIGFuZCBvcGVyYXRpbmcgb24gZGF0YSBzb3VyY2VzIHdpdGggbmVzdGVkIHN0cnVjdHVyZXMuXG4gKi9cbnZhciBfc2tpcFJlbmRlciA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9za2lwQ29yZUFQSU1vZGlmaWVycyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9OZXN0ZWRSb3dzX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBOZXN0ZWRSb3dzIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogYGJlZm9yZVJvd01vdmVgIGhvb2sgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSByb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50c1xuICAgICAqICAgd2lsbCBiZSBwbGFjZWQgYWZ0ZXIgdGhlIG1vdmluZyBhY3Rpb24uIFRvIGNoZWNrIHRoZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBmaW5hbCBpbmRleCwgcGxlYXNlIHRha2UgYSBsb29rIGF0XG4gICAgICogICBbZG9jdW1lbnRhdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctc3VtbWFyeS9yb3ctc3VtbWFyeS5tZCkuXG4gICAgICogQHBhcmFtIHt1bmRlZmluZWR8bnVtYmVyfSBkcm9wSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBkcm9wIGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy4gUG9pbnRzIHRvIHdoZXJlIHdlXG4gICAgICogICBhcmUgZ29pbmcgdG8gZHJvcCB0aGUgbW92ZWQgZWxlbWVudHMuIFRvIGNoZWNrIHZpc3VhbGl6YXRpb24gb2YgZHJvcCBpbmRleCBwbGVhc2UgdGFrZSBhIGxvb2sgYXRcbiAgICAgKiAgIFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1zdW1tYXJ5L3Jvdy1zdW1tYXJ5Lm1kKS5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQncyBwb3NzaWJsZSB0byBtb3ZlIHJvd3MgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uXG4gICAgICogQGZpcmVzIEhvb2tzI2FmdGVyUm93TW92ZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfTmVzdGVkUm93c19icmFuZCk7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBEYXRhTWFuYWdlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhTWFuYWdlclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIEhlYWRlcnNVSSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoZWFkZXJzVUlcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogTWFwIG9mIHNraXBwZWQgcm93cyBieSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtudWxsfFRyaW1taW5nTWFwfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbGxhcHNlZFJvd3NNYXBcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHNraXBwaW5nIHRoZSByZW5kZXIgY3ljbGUgaWYgc2V0IGFzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9za2lwUmVuZGVyLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHNraXBwaW5nIHRoZSBpbnRlcm5hbCBDb3JlIG1ldGhvZHMgY2FsbCBpZiBzZXQgYXMgYHRydWVgLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NraXBDb3JlQVBJTW9kaWZpZXJzLCBmYWxzZSk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fS0VZKCkge1xuICAgIHJldHVybiBQTFVHSU5fS0VZO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBOZXN0ZWRSb3dzI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBwbHVnaW4gZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAqL1xuICBlbmFibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29sbGFwc2VkUm93c01hcCA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCduZXN0ZWRSb3dzJywgbmV3IF90cmFuc2xhdGlvbnMuVHJpbW1pbmdNYXAoKSk7XG4gICAgdGhpcy5kYXRhTWFuYWdlciA9IG5ldyBfZGF0YU1hbmFnZXIuZGVmYXVsdCh0aGlzLCB0aGlzLmhvdCk7XG4gICAgdGhpcy5jb2xsYXBzaW5nVUkgPSBuZXcgX2NvbGxhcHNpbmcuZGVmYXVsdCh0aGlzLCB0aGlzLmhvdCk7XG4gICAgdGhpcy5oZWFkZXJzVUkgPSBuZXcgX2hlYWRlcnMuZGVmYXVsdCh0aGlzLCB0aGlzLmhvdCk7XG4gICAgdGhpcy5jb250ZXh0TWVudVVJID0gbmV3IF9jb250ZXh0TWVudS5kZWZhdWx0KHRoaXMsIHRoaXMuaG90KTtcbiAgICB0aGlzLnJvd01vdmVDb250cm9sbGVyID0gbmV3IF9yb3dNb3ZlQ29udHJvbGxlci5kZWZhdWx0KHRoaXMpO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJJbml0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZFJvd3NfYnJhbmQsIF90aGlzLCBfb25BZnRlckluaXQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlVmlld1JlbmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZFJvd3NfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVWaWV3UmVuZGVyKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ21vZGlmeVJvd0RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlTb3VyY2VMZW5ndGgnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZURhdGFTcGxpY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMub25CZWZvcmVEYXRhU3BsaWNlKC4uLmFyZ3VtZW50cyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdmaWx0ZXJEYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgX3RoaXMsIF9vbkZpbHRlckRhdGEpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgX3RoaXMsIF9vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucykuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckdldFJvd0hlYWRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZFJvd3NfYnJhbmQsIF90aGlzLCBfb25BZnRlckdldFJvd0hlYWRlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVPbkNlbGxNb3VzZURvd24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICAgICAgYXJnc1tfa2V5Nl0gPSBhcmd1bWVudHNbX2tleTZdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlT25DZWxsTW91c2VEb3duKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVJlbW92ZVJvdycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZFJvd3NfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVSZW1vdmVSb3cpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJSZW1vdmVSb3cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHtcbiAgICAgICAgYXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJSZW1vdmVSb3cpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlQWRkQ2hpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjkpLCBfa2V5OSA9IDA7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCBfdGhpcywgX29uQmVmb3JlQWRkQ2hpbGQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJBZGRDaGlsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjEwKSwgX2tleTEwID0gMDsgX2tleTEwIDwgX2xlbjEwOyBfa2V5MTArKykge1xuICAgICAgICBhcmdzW19rZXkxMF0gPSBhcmd1bWVudHNbX2tleTEwXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgX3RoaXMsIF9vbkFmdGVyQWRkQ2hpbGQpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlRGV0YWNoQ2hpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMTEgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMSksIF9rZXkxMSA9IDA7IF9rZXkxMSA8IF9sZW4xMTsgX2tleTExKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MTFdID0gYXJndW1lbnRzW19rZXkxMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX05lc3RlZFJvd3NfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVEZXRhY2hDaGlsZCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlckRldGFjaENoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEyID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTIpLCBfa2V5MTIgPSAwOyBfa2V5MTIgPCBfbGVuMTI7IF9rZXkxMisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEyXSA9IGFyZ3VtZW50c1tfa2V5MTJdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJEZXRhY2hDaGlsZCkuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRIb29rKCdtb2RpZnlSb3dIZWFkZXJXaWR0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjEzKSwgX2tleTEzID0gMDsgX2tleTEzIDwgX2xlbjEzOyBfa2V5MTMrKykge1xuICAgICAgICBhcmdzW19rZXkxM10gPSBhcmd1bWVudHNbX2tleTEzXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgX3RoaXMsIF9vbk1vZGlmeVJvd0hlYWRlcldpZHRoKS5jYWxsKF90aGlzLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZEhvb2soJ2FmdGVyQ3JlYXRlUm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjE0ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTQpLCBfa2V5MTQgPSAwOyBfa2V5MTQgPCBfbGVuMTQ7IF9rZXkxNCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTE0XSA9IGFyZ3VtZW50c1tfa2V5MTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCBfdGhpcywgX29uQWZ0ZXJDcmVhdGVSb3cpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlUm93TW92ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4xNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjE1KSwgX2tleTE1ID0gMDsgX2tleTE1IDwgX2xlbjE1OyBfa2V5MTUrKykge1xuICAgICAgICBhcmdzW19rZXkxNV0gPSBhcmd1bWVudHNbX2tleTE1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgX3RoaXMsIF9vbkJlZm9yZVJvd01vdmUpLmNhbGwoX3RoaXMsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkSG9vaygnYmVmb3JlTG9hZERhdGEnLCBkYXRhID0+IF9hc3NlcnRDbGFzc0JyYW5kKF9OZXN0ZWRSb3dzX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVMb2FkRGF0YSkuY2FsbCh0aGlzLCBkYXRhKSk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVVcGRhdGVEYXRhJywgZGF0YSA9PiBfYXNzZXJ0Q2xhc3NCcmFuZChfTmVzdGVkUm93c19icmFuZCwgdGhpcywgX29uQmVmb3JlTG9hZERhdGEpLmNhbGwodGhpcywgZGF0YSkpO1xuICAgIHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCduZXN0ZWRSb3dzJyk7XG4gICAgdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCk7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgbmVzdGVkUm93c2BdKEAvYXBpL29wdGlvbnMubWQjbmVzdGVkcm93cylcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcblxuICAgIC8vIFdlIHN0b3JlIGEgc3RhdGUgb2YgdGhlIGRhdGEgbWFuYWdlci5cbiAgICBjb25zdCBjdXJyZW50U291cmNlRGF0YSA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO1xuICAgIHRoaXMuZW5hYmxlUGx1Z2luKCk7XG5cbiAgICAvLyBBZnRlciBlbmFibGluZyBwbHVnaW4gcHJldmlvdXNseSBzdG9yZWQgZGF0YSBpcyByZXN0b3JlZC5cbiAgICB0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGN1cnJlbnRTb3VyY2VEYXRhKTtcbiAgICBzdXBlci51cGRhdGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbGxhcHNpYmxlIGNvbHVtbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlclNob3J0Y3V0cygpIHtcbiAgICB0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJykuYWRkU2hvcnRjdXQoe1xuICAgICAga2V5czogW1snRW50ZXInXV0sXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaGlnaGxpZ2h0XG4gICAgICAgIH0gPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGhpZ2hsaWdodC5yb3cpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQocm93KSkge1xuICAgICAgICAgIHRoaXMuY29sbGFwc2luZ1VJLmV4cGFuZENoaWxkcmVuKHJvdyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VDaGlsZHJlbihyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcHJldmVudCBkZWZhdWx0IEVudGVyIGJlaGF2aW9yIChtb3ZlIHRvIHRoZSBuZXh0IHJvdyB3aXRoaW4gYSBzZWxlY3Rpb24gcmFuZ2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgICAgdmFyIF90aGlzJGhvdCRnZXRTZWxlY3RlZCwgX3RoaXMkaG90JGdldFNlbGVjdGVkMjtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ID0gKF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9IHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkLmhpZ2hsaWdodDtcbiAgICAgICAgcmV0dXJuIGhpZ2hsaWdodCAmJiAoKF90aGlzJGhvdCRnZXRTZWxlY3RlZDIgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSA9PT0gbnVsbCB8fCBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyLmlzU2luZ2xlKCkpICYmIHRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGhpZ2hsaWdodCkgJiYgaGlnaGxpZ2h0LmNvbCA9PT0gLTEgJiYgaGlnaGxpZ2h0LnJvdyA+PSAwO1xuICAgICAgfSxcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVAsXG4gICAgICByZWxhdGl2ZVRvR3JvdXA6IF9zaG9ydGN1dENvbnRleHRzLkVESVRPUl9FRElUX0dST1VQLFxuICAgICAgcG9zaXRpb246ICdiZWZvcmUnXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNvbGxhcHNpYmxlIGNvbHVtbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB1bnJlZ2lzdGVyU2hvcnRjdXRzKCkge1xuICAgIHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoJ2dyaWQnKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFNIT1JUQ1VUU19HUk9VUCk7XG4gIH1cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgbW9kaWZ5IGhvb2sgc2tpcHBpbmcgZmxhZyAtIGFsbG93cyByZXRyaWV2aW5nIHRoZSBkYXRhIGZyb20gSGFuZHNvbnRhYmxlIHdpdGhvdXQgdGhpcyBwbHVnaW4nc1xuICAgKiBtb2RpZmljYXRpb25zLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9za2lwQ29yZUFQSU1vZGlmaWVycywgdGhpcywgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgbW9kaWZ5IGhvb2sgc2tpcHBpbmcgZmxhZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVuYWJsZUNvcmVBUElNb2RpZmllcnMoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9za2lwQ29yZUFQSU1vZGlmaWVycywgdGhpcywgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIGBiZWZvcmVPbkNlbGxNb3VzZWRvd25gIGhvb2sgY2FsbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnQgTW91c2Vkb3duIGV2ZW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29vcmRzIENlbGwgY29vcmRzLlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBURCBDbGlja2VkIGNlbGwuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBUaGUgbW9kaWZ5Um93RGF0YSBob29rIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFZpc3VhbCByb3cgaW5kZXguXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgb25Nb2RpZnlSb3dEYXRhKHJvdykge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NraXBDb3JlQVBJTW9kaWZpZXJzLCB0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZ5IHRoZSBzb3VyY2UgZGF0YSBsZW5ndGggdG8gbWF0Y2ggdGhlIGxlbmd0aCBvZiB0aGUgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG9uTW9kaWZ5U291cmNlTGVuZ3RoKCkge1xuICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NraXBDb3JlQVBJTW9kaWZpZXJzLCB0aGlzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5jb3VudEFsbFJvd3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IHdoZXJlIHRoZSBkYXRhIHdhcyBzcGxpY2VkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFuIGFtb3VudCBvZiBpdGVtcyB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IEFuIGVsZW1lbnQgdG8gYWRkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIG9uQmVmb3JlRGF0YVNwbGljZShpbmRleCwgYW1vdW50LCBlbGVtZW50KSB7XG4gICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfc2tpcENvcmVBUElNb2RpZmllcnMsIHRoaXMpIHx8IHRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwoaW5kZXgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5kYXRhTWFuYWdlci5zcGxpY2VEYXRhKGluZGV4LCBhbW91bnQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm92aWRlIGN1c3RvbSBzb3VyY2UgZGF0YSBmaWx0ZXJpbmcuIEl0J3MgaGFuZGxlZCBieSBjb3JlIG1ldGhvZCBhbmQgcmVwbGFjZXMgdGhlIG5hdGl2ZSBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggd2hlcmUgdGhlIGRhdGEgZmlsdGVyaW5nIHN0YXJ0cy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbiBhbW91bnQgb2Ygcm93cyB3aGljaCBmaWx0ZXJpbmcgYXBwbGllcyB0by5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsUm93cyBQaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLk5lc3RlZFJvd3MgPSBOZXN0ZWRSb3dzO1xuZnVuY3Rpb24gX29uQmVmb3JlUm93TW92ZShyb3dzLCBmaW5hbEluZGV4LCBkcm9wSW5kZXgsIG1vdmVQb3NzaWJsZSkge1xuICByZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJvbGxlci5vbkJlZm9yZVJvd01vdmUocm93cywgZmluYWxJbmRleCwgZHJvcEluZGV4LCBtb3ZlUG9zc2libGUpO1xufVxuZnVuY3Rpb24gX29uQmVmb3JlT25DZWxsTW91c2VEb3duKGV2ZW50LCBjb29yZHMsIFREKSB7XG4gIHRoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGV2ZW50LCBjb29yZHMsIFREKTtcbn1cbmZ1bmN0aW9uIF9vbkZpbHRlckRhdGEoaW5kZXgsIGFtb3VudCwgcGh5c2ljYWxSb3dzKSB7XG4gIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpO1xuICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKHBoeXNpY2FsUm93c1swXSwgYW1vdW50KTtcbiAgdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gocGh5c2ljYWxSb3dzWzBdLCBudWxsLCAtMSAqIGFtb3VudCk7XG4gIHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShpbmRleCwgYW1vdW50LCBwaHlzaWNhbFJvd3MpO1xuICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NraXBSZW5kZXIsIHRoaXMsIHRydWUpO1xuICByZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKTsgLy8gRGF0YSBjb250YWlucyByZWZlcmVuY2Ugc29tZXRpbWVzLlxufVxuLyoqXG4gKiBgYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBUaGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgaXRlbXMgb3JkZXIuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zKSB7XG4gIHJldHVybiB0aGlzLmNvbnRleHRNZW51VUkuYXBwZW5kT3B0aW9ucyhkZWZhdWx0T3B0aW9ucyk7XG59XG4vKipcbiAqIGBhZnRlckdldFJvd0hlYWRlcmAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFRIIFJvdyBoZWFkZXIgZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gX29uQWZ0ZXJHZXRSb3dIZWFkZXIocm93LCBUSCkge1xuICB0aGlzLmhlYWRlcnNVSS5hcHBlbmRMZXZlbEluZGljYXRvcnMocm93LCBUSCk7XG59XG4vKipcbiAqIGBtb2RpZnlSb3dIZWFkZXJXaWR0aGAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gcm93SGVhZGVyV2lkdGggVGhlIGluaXRpYWwgcm93IGhlYWRlciB3aWR0aChzKS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIF9vbk1vZGlmeVJvd0hlYWRlcldpZHRoKHJvd0hlYWRlcldpZHRoKSB7XG4gIHJldHVybiBNYXRoLm1heCh0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hlLCByb3dIZWFkZXJXaWR0aCk7XG59XG4vKipcbiAqIGBvbkFmdGVyUmVtb3ZlUm93YCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBSZW1vdmVkIHJvdy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgQW1vdW50IG9mIHJlbW92ZWQgcm93cy5cbiAqIEBwYXJhbSB7QXJyYXl9IGxvZ2ljUm93cyBBbiBhcnJheSBvZiB0aGUgcmVtb3ZlZCBwaHlzaWNhbCByb3dzLlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBTb3VyY2Ugb2YgYWN0aW9uLlxuICovXG5mdW5jdGlvbiBfb25BZnRlclJlbW92ZVJvdyhpbmRleCwgYW1vdW50LCBsb2dpY1Jvd3MsIHNvdXJjZSkge1xuICBpZiAoc291cmNlID09PSB0aGlzLnBsdWdpbk5hbWUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKSA9PiB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9za2lwUmVuZGVyLCB0aGlzLCBmYWxzZSk7XG4gICAgdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKTtcbiAgICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpO1xuICB9KTtcbn1cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHRoZSBgYmVmb3JlUmVtb3ZlUm93YCBjaGFuZ2UgbGlzdCBvZiByZW1vdmVkIHBoeXNpY2FsIGluZGV4ZXMgYnkgcmVmZXJlbmNlLiBSZW1vdmluZyBwYXJlbnQgbm9kZVxuICogaGFzIGVmZmVjdCBpbiByZW1vdmluZyBjaGlsZHJlbiBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVmlzdWFsIGluZGV4IG9mIHN0YXJ0ZXIgcm93LlxuICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBBbW91bnQgb2Ygcm93cyB0byBiZSByZW1vdmVkLlxuICogQHBhcmFtIHtBcnJheX0gcGh5c2ljYWxSb3dzIExpc3Qgb2YgcGh5c2ljYWwgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlUmVtb3ZlUm93KGluZGV4LCBhbW91bnQsIHBoeXNpY2FsUm93cykge1xuICBjb25zdCBtb2RpZmllZFBoeXNpY2FsUm93cyA9IEFycmF5LmZyb20ocGh5c2ljYWxSb3dzLnJlZHVjZSgocmVtb3ZlZFJvd3MsIHBoeXNpY2FsSW5kZXgpID0+IHtcbiAgICBpZiAodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChwaHlzaWNhbEluZGV4KSkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QocGh5c2ljYWxJbmRleCkuX19jaGlsZHJlbjtcblxuICAgICAgLy8gUHJlc2VydmUgYSBwYXJlbnQgaW4gdGhlIGxpc3Qgb2YgcmVtb3ZlZCByb3dzLlxuICAgICAgcmVtb3ZlZFJvd3MuYWRkKHBoeXNpY2FsSW5kZXgpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgIC8vIEFkZCBhIGNoaWxkcmVuIHRvIHRoZSBsaXN0IG9mIHJlbW92ZWQgcm93cy5cbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiByZW1vdmVkUm93cy5hZGQodGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChjaGlsZCkpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZW1vdmVkUm93cztcbiAgICB9XG5cbiAgICAvLyBEb24ndCBtb2RpZnkgbGlzdCBvZiByZW1vdmVkIHJvd3Mgd2hlbiBhbHJlYWR5IGNoZWNrZWQgZWxlbWVudCBpc24ndCBhIHBhcmVudC5cbiAgICByZXR1cm4gcmVtb3ZlZFJvd3MuYWRkKHBoeXNpY2FsSW5kZXgpO1xuICB9LCBuZXcgU2V0KCkpKTtcblxuICAvLyBNb2RpZnlpbmcgaG9vaydzIGFyZ3VtZW50IGJ5IHRoZSByZWZlcmVuY2UuXG4gIHBoeXNpY2FsUm93cy5sZW5ndGggPSAwO1xuICBwaHlzaWNhbFJvd3MucHVzaCguLi5tb2RpZmllZFBoeXNpY2FsUm93cyk7XG59XG4vKipcbiAqIGBiZWZvcmVBZGRDaGlsZGAgaG9vayBjYWxsYmFjay5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlQWRkQ2hpbGQoKSB7XG4gIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpO1xufVxuLyoqXG4gKiBgYWZ0ZXJBZGRDaGlsZGAgaG9vayBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcGFyZW50IFBhcmVudCBlbGVtZW50LlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnQgTmV3IGNoaWxkIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQWRkQ2hpbGQocGFyZW50LCBlbGVtZW50KSB7XG4gIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZWxlbWVudCkpO1xuICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpO1xuICB0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpO1xufVxuLyoqXG4gKiBgYmVmb3JlRGV0YWNoQ2hpbGRgIGhvb2sgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZURldGFjaENoaWxkKCkge1xuICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKTtcbn1cbi8qKlxuICogYGFmdGVyRGV0YWNoQ2hpbGRgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHBhcmVudCBQYXJlbnQgZWxlbWVudC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IE5ldyBjaGlsZCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsRWxlbWVudFJvd0luZGV4IFRoZSBmaW5hbCByb3cgaW5kZXggb2YgdGhlIGRldGFjaGVkIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyRGV0YWNoQ2hpbGQocGFyZW50LCBlbGVtZW50LCBmaW5hbEVsZW1lbnRSb3dJbmRleCkge1xuICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChmaW5hbEVsZW1lbnRSb3dJbmRleCwgbnVsbCwgLTEpO1xuICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpO1xuICB0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpO1xufVxuLyoqXG4gKiBgYWZ0ZXJDcmVhdGVSb3dgIGhvb2sgY2FsbGJhY2suXG4gKi9cbmZ1bmN0aW9uIF9vbkFmdGVyQ3JlYXRlUm93KCkge1xuICB0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpO1xufVxuLyoqXG4gKiBgYWZ0ZXJJbml0YCBob29rIGNhbGxiYWNrLlxuICovXG5mdW5jdGlvbiBfb25BZnRlckluaXQoKSB7XG4gIHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCk7XG59XG4vKipcbiAqIGBiZWZvcmVWaWV3UmVuZGVyYCBob29rIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgSW5kaWNhdGVzIGlmIHRoZSByZW5kZXIgY2FsbCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY2hhbmdlIG9mIHNldHRpbmdzIG9yIGRhdGEuXG4gKiBAcGFyYW0ge29iamVjdH0gc2tpcFJlbmRlciBBbiBvYmplY3QsIGhvbGRlciBmb3Igc2tpcFJlbmRlciBmdW5jdGlvbmFsaXR5LlxuICovXG5mdW5jdGlvbiBfb25CZWZvcmVWaWV3UmVuZGVyKGZvcmNlLCBza2lwUmVuZGVyKSB7XG4gIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NraXBSZW5kZXIsIHRoaXMpKSB7XG4gICAgc2tpcFJlbmRlci5za2lwUmVuZGVyID0gdHJ1ZTtcbiAgfVxufVxuLyoqXG4gKiBgYmVmb3JlTG9hZERhdGFgIGhvb2sgY2FsbGJhY2suXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgc291cmNlIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIF9vbkJlZm9yZUxvYWREYXRhKGRhdGEpIHtcbiAgaWYgKCEoMCwgX2RhdGEuaXNBcnJheU9mT2JqZWN0cykoZGF0YSkpIHtcbiAgICAoMCwgX2NvbnNvbGUuZXJyb3IpKFdST05HX0RBVEFfVFlQRV9FUlJPUik7XG4gICAgdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtQTFVHSU5fS0VZXSA9IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZVBsdWdpbigpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEoZGF0YSk7XG4gIHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHRoZSBOZXN0ZWQgUm93cycgVUkgc3ViLWNsYXNzZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzc1xuICovXG5jbGFzcyBCYXNlVUkge1xuICBjb25zdHJ1Y3RvcihwbHVnaW5JbnN0YW5jZSwgaG90SW5zdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiBIYW5kc29udGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIG1haW4gcGx1Z2luIGluc3RhbmNlLlxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBsdWdpblwiLCB2b2lkIDApO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW5JbnN0YW5jZTtcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQmFzZVVJOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2RvbS9ldmVudFwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfaGVhZGVycyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVhZGVyc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgdGhlIFVJIGZvciBjb2xsYXBzaW5nIGFuZCBleHBhbmRpbmcgZ3JvdXBzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3NcbiAqIEBhdWdtZW50cyBCYXNlVUlcbiAqL1xuY2xhc3MgQ29sbGFwc2luZ1VJIGV4dGVuZHMgX2Jhc2UuZGVmYXVsdCB7XG4gIGNvbnN0cnVjdG9yKG5lc3RlZFJvd3NQbHVnaW4sIGhvdEluc3RhbmNlKSB7XG4gICAgdmFyIF90aGlzO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgVHJpbVJvd3MgcGx1Z2luLlxuICAgICAqL1xuICAgIHN1cGVyKG5lc3RlZFJvd3NQbHVnaW4sIGhvdEluc3RhbmNlKTtcbiAgICBfdGhpcyA9IHRoaXM7XG4gICAgdGhpcy5kYXRhTWFuYWdlciA9IHRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyO1xuICAgIHRoaXMuY29sbGFwc2VkUm93cyA9IFtdO1xuICAgIHRoaXMuY29sbGFwc2VkUm93c1N0YXNoID0ge1xuICAgICAgc3Rhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGZvcmNlUmVuZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICAgICAgX3RoaXMubGFzdENvbGxhcHNlZFJvd3MgPSBfdGhpcy5jb2xsYXBzZWRSb3dzLnNsaWNlKDApO1xuXG4gICAgICAgIC8vIFdvcmthcm91bmQgZm9yIHdyb25nIGluZGV4ZXMgYmVpbmcgc2V0IGluIHRoZSB0cmltUm93cyBwbHVnaW5cbiAgICAgICAgX3RoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihfdGhpcy5sYXN0Q29sbGFwc2VkUm93cywgZm9yY2VSZW5kZXIpO1xuICAgICAgfSxcbiAgICAgIHNoaWZ0U3Rhc2g6IGZ1bmN0aW9uIChiYXNlSW5kZXgsIHRhcmdldEluZGV4KSB7XG4gICAgICAgIGxldCBkZWx0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID09PSBudWxsIHx8IHRhcmdldEluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRJbmRleCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShfdGhpcy5sYXN0Q29sbGFwc2VkUm93cywgKGVsZW0sIGkpID0+IHtcbiAgICAgICAgICBpZiAoZWxlbSA+PSBiYXNlSW5kZXggJiYgZWxlbSA8IHRhcmdldEluZGV4KSB7XG4gICAgICAgICAgICBfdGhpcy5sYXN0Q29sbGFwc2VkUm93c1tpXSA9IGVsZW0gKyBkZWx0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGFwcGx5U3Rhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGZvcmNlUmVuZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0cnVlO1xuICAgICAgICBfdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oX3RoaXMubGFzdENvbGxhcHNlZFJvd3MsIGZvcmNlUmVuZGVyKTtcbiAgICAgICAgX3RoaXMubGFzdENvbGxhcHNlZFJvd3MgPSB1bmRlZmluZWQ7XG4gICAgICB9LFxuICAgICAgdHJpbVN0YXNoOiAocmVhbEVsZW1lbnRJbmRleCwgYW1vdW50KSA9PiB7XG4gICAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkocmVhbEVsZW1lbnRJbmRleCwgcmVhbEVsZW1lbnRJbmRleCArIGFtb3VudCAtIDEsIGkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluZGV4T2ZFbGVtZW50ID0gdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5pbmRleE9mKGkpO1xuICAgICAgICAgIGlmIChpbmRleE9mRWxlbWVudCA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RDb2xsYXBzZWRSb3dzLnNwbGljZShpbmRleE9mRWxlbWVudCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIHRoZSBjaGlsZHJlbiBvZiB0aGUgcm93IHBhc3NlZCBhcyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fSByb3cgVGhlIHBhcmVudCByb3cuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlUmVuZGVyPXRydWVdIFdoZXRoZXIgdG8gcmVuZGVyIHRoZSB0YWJsZSBhZnRlciB0aGUgZnVuY3Rpb24gZW5kcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9UcmltbWluZz10cnVlXSBJIGRldGVybWluZSB3aGV0aGVyIGNvbGxhcHNpbmcgc2hvdWxkIGVudm9sdmUgdHJpbW1pbmcgcm93cy5cbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgY29sbGFwc2VDaGlsZHJlbihyb3cpIHtcbiAgICBsZXQgZm9yY2VSZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgbGV0IGRvVHJpbW1pbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgY29uc3Qgcm93c1RvQ29sbGFwc2UgPSBbXTtcbiAgICBsZXQgcm93T2JqZWN0ID0gbnVsbDtcbiAgICBsZXQgcm93SW5kZXggPSBudWxsO1xuICAgIGxldCByb3dzVG9UcmltID0gbnVsbDtcbiAgICBpZiAoaXNOYU4ocm93KSkge1xuICAgICAgcm93T2JqZWN0ID0gcm93O1xuICAgICAgcm93SW5kZXggPSB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHJvd09iamVjdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd09iamVjdCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChyb3cpO1xuICAgICAgcm93SW5kZXggPSByb3c7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHJvd09iamVjdCkpIHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyb3dPYmplY3QuX19jaGlsZHJlbiwgZWxlbSA9PiB7XG4gICAgICAgIHJvd3NUb0NvbGxhcHNlLnB1c2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChlbGVtKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcm93c1RvVHJpbSA9IHRoaXMuY29sbGFwc2VSb3dzKHJvd3NUb0NvbGxhcHNlLCB0cnVlLCBmYWxzZSk7XG4gICAgaWYgKGRvVHJpbW1pbmcpIHtcbiAgICAgIHRoaXMudHJpbVJvd3Mocm93c1RvVHJpbSk7XG4gICAgfVxuICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXJBbmRBZGp1c3QoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHJvd0luZGV4KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VkUm93cy5wdXNoKHJvd0luZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NUb1RyaW07XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgbXVsdGlwbGUgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd3MgUm93cyB0byBjb2xsYXBzZSAoaW5jbHVkaW5nIHRoZWlyIGNoaWxkcmVuKS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZm9yY2VSZW5kZXI9dHJ1ZV0gYHRydWVgIGlmIHRoZSB0YWJsZSBzaG91bGQgYmUgcmVuZGVyZWQgYWZ0ZXIgZmluaXNoaW5nIHRoZSBmdW5jdGlvbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9UcmltbWluZz10cnVlXSBJIGRldGVybWluZSB3aGV0aGVyIGNvbGxhcHNpbmcgc2hvdWxkIGVudm9sdmUgdHJpbW1pbmcgcm93cy5cbiAgICovXG4gIGNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihyb3dzKSB7XG4gICAgbGV0IGZvcmNlUmVuZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIGxldCBkb1RyaW1taW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgIGNvbnN0IHJvd3NUb1RyaW0gPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocm93cywgZWxlbSA9PiB7XG4gICAgICByb3dzVG9UcmltLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGVsZW0sIGZhbHNlLCBmYWxzZSkpO1xuICAgIH0pO1xuICAgIGlmIChkb1RyaW1taW5nKSB7XG4gICAgICB0aGlzLnRyaW1Sb3dzKHJvd3NUb1RyaW0pO1xuICAgIH1cbiAgICBpZiAoZm9yY2VSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyQW5kQWRqdXN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIGEgc2luZ2xlIHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cgdG8gY29sbGFwc2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZT10cnVlXSBgdHJ1ZWAgaWYgaXQgc2hvdWxkIGNvbGxhcHNlIHRoZSByb3cncyBjaGlsZHJlbi5cbiAgICovXG4gIGNvbGxhcHNlUm93KHJvd0luZGV4KSB7XG4gICAgbGV0IHJlY3Vyc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICB0aGlzLmNvbGxhcHNlUm93cyhbcm93SW5kZXhdLCByZWN1cnNpdmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIG11bHRpcGxlIHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd0luZGV4ZXMgQXJyYXkgb2Ygcm93IGluZGV4ZXMgdG8gY29sbGFwc2UuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZT10cnVlXSBgdHJ1ZWAgaWYgaXQgc2hvdWxkIGNvbGxhcHNlIHRoZSByb3dzJyBjaGlsZHJlbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9UcmltbWluZz10cnVlXSBJIGRldGVybWluZSB3aGV0aGVyIGNvbGxhcHNpbmcgc2hvdWxkIGVudm9sdmUgdHJpbW1pbmcgcm93cy5cbiAgICogQHJldHVybnMge0FycmF5fSBSb3dzIHByZXBhcmVkIGZvciB0cmltbWluZyAob3IgdHJpbW1lZCwgaWYgZG9UcmltbWluZyA9PSB0cnVlKS5cbiAgICovXG4gIGNvbGxhcHNlUm93cyhyb3dJbmRleGVzKSB7XG4gICAgbGV0IHJlY3Vyc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICBsZXQgZG9UcmltbWluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgY29uc3Qgcm93c1RvVHJpbSA9IFtdO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyb3dJbmRleGVzLCBlbGVtID0+IHtcbiAgICAgIHJvd3NUb1RyaW0ucHVzaChlbGVtKTtcbiAgICAgIGlmIChyZWN1cnNpdmUpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhlbGVtLCByb3dzVG9UcmltKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZG9UcmltbWluZykge1xuICAgICAgdGhpcy50cmltUm93cyhyb3dzVG9UcmltKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NUb1RyaW07XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgY2hpbGQgcm93cyBvZiB0aGUgcm93IGF0IHRoZSBwcm92aWRlZCBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhcmVudEluZGV4IEluZGV4IG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICogQHBhcmFtIHtBcnJheX0gW3Jvd3NUb1RyaW09W11dIEFycmF5IG9mIHJvd3MgdG8gdHJpbS4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgYXJyYXkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlY3Vyc2l2ZV0gYHRydWVgIGlmIHRoZSBjb2xsYXBzaW5nIHByb2Nlc3Mgc2hvdWxkIGJlIHJlY3Vyc2l2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9UcmltbWluZz10cnVlXSBJIGRldGVybWluZSB3aGV0aGVyIGNvbGxhcHNpbmcgc2hvdWxkIGVudm9sdmUgdHJpbW1pbmcgcm93cy5cbiAgICovXG4gIGNvbGxhcHNlQ2hpbGRSb3dzKHBhcmVudEluZGV4KSB7XG4gICAgbGV0IHJvd3NUb1RyaW0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdO1xuICAgIGxldCByZWN1cnNpdmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgICBsZXQgZG9UcmltbWluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gICAgaWYgKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4ocGFyZW50SW5kZXgpKSB7XG4gICAgICBjb25zdCBwYXJlbnRPYmplY3QgPSB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QocGFyZW50SW5kZXgpO1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHBhcmVudE9iamVjdC5fX2NoaWxkcmVuLCBlbGVtID0+IHtcbiAgICAgICAgY29uc3QgZWxlbUluZGV4ID0gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChlbGVtKTtcbiAgICAgICAgcm93c1RvVHJpbS5wdXNoKGVsZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY29sbGFwc2VDaGlsZFJvd3MoZWxlbUluZGV4LCByb3dzVG9UcmltKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZG9UcmltbWluZykge1xuICAgICAgdGhpcy50cmltUm93cyhyb3dzVG9UcmltKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kIGEgc2luZ2xlIHJvdy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IEluZGV4IG9mIHRoZSByb3cgdG8gZXhwYW5kLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWN1cnNpdmU9dHJ1ZV0gYHRydWVgIGlmIGl0IHNob3VsZCBleHBhbmQgdGhlIHJvdydzIGNoaWxkcmVuIHJlY3Vyc2l2ZWx5LlxuICAgKi9cbiAgZXhwYW5kUm93KHJvd0luZGV4KSB7XG4gICAgbGV0IHJlY3Vyc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcbiAgICB0aGlzLmV4cGFuZFJvd3MoW3Jvd0luZGV4XSwgcmVjdXJzaXZlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgbXVsdGlwbGUgcm93cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcm93SW5kZXhlcyBBcnJheSBvZiBpbmRleGVzIG9mIHRoZSByb3dzIHRvIGV4cGFuZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlPXRydWVdIGB0cnVlYCBpZiBpdCBzaG91bGQgZXhwYW5kIHRoZSByb3dzJyBjaGlsZHJlbiByZWN1cnNpdmVseS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9UcmltbWluZz10cnVlXSBJIGRldGVybWluZSB3aGV0aGVyIGNvbGxhcHNpbmcgc2hvdWxkIGVudm9sdmUgdHJpbW1pbmcgcm93cy5cbiAgICogQHJldHVybnMge0FycmF5fSBBcnJheSBvZiByb3cgaW5kZXhlcyB0byBiZSB1bnRyaW1tZWQuXG4gICAqL1xuICBleHBhbmRSb3dzKHJvd0luZGV4ZXMpIHtcbiAgICBsZXQgcmVjdXJzaXZlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIGxldCBkb1RyaW1taW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICBjb25zdCByb3dzVG9VbnRyaW0gPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocm93SW5kZXhlcywgZWxlbSA9PiB7XG4gICAgICByb3dzVG9VbnRyaW0ucHVzaChlbGVtKTtcbiAgICAgIGlmIChyZWN1cnNpdmUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRDaGlsZFJvd3MoZWxlbSwgcm93c1RvVW50cmltKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZG9UcmltbWluZykge1xuICAgICAgdGhpcy51bnRyaW1Sb3dzKHJvd3NUb1VudHJpbSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzVG9VbnRyaW07XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kIGNoaWxkIHJvd3Mgb2YgdGhlIHByb3ZpZGVkIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGFyZW50SW5kZXggSW5kZXggb2YgdGhlIHBhcmVudCByb3cuXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtyb3dzVG9VbnRyaW09W11dIEFycmF5IG9mIHRoZSByb3dzIHRvIGJlIHVudHJpbW1lZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVjdXJzaXZlXSBgdHJ1ZWAgaWYgaXQgc2hvdWxkIGV4cGFuZCB0aGUgcm93cycgY2hpbGRyZW4gcmVjdXJzaXZlbHkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvVHJpbW1pbmc9ZmFsc2VdIEkgZGV0ZXJtaW5lIHdoZXRoZXIgY29sbGFwc2luZyBzaG91bGQgZW52b2x2ZSB0cmltbWluZyByb3dzLlxuICAgKi9cbiAgZXhwYW5kQ2hpbGRSb3dzKHBhcmVudEluZGV4KSB7XG4gICAgbGV0IHJvd3NUb1VudHJpbSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogW107XG4gICAgbGV0IHJlY3Vyc2l2ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICAgIGxldCBkb1RyaW1taW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcbiAgICBpZiAodGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihwYXJlbnRJbmRleCkpIHtcbiAgICAgIGNvbnN0IHBhcmVudE9iamVjdCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChwYXJlbnRJbmRleCk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocGFyZW50T2JqZWN0Ll9fY2hpbGRyZW4sIGVsZW0gPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQoZWxlbSkpIHtcbiAgICAgICAgICBjb25zdCBlbGVtSW5kZXggPSB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGVsZW0pO1xuICAgICAgICAgIHJvd3NUb1VudHJpbS5wdXNoKGVsZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5leHBhbmRDaGlsZFJvd3MoZWxlbUluZGV4LCByb3dzVG9VbnRyaW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRvVHJpbW1pbmcpIHtcbiAgICAgIHRoaXMudW50cmltUm93cyhyb3dzVG9VbnRyaW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIGNoaWxkcmVuIG9mIHRoZSByb3cgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcnxvYmplY3R9IHJvdyBQYXJlbnQgcm93LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmb3JjZVJlbmRlcj10cnVlXSBXaGV0aGVyIHRvIHJlbmRlciB0aGUgdGFibGUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIGVuZHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvVHJpbW1pbmc9dHJ1ZV0gSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHRyaW1taW5nIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBmdW5jdGlvbiBmaW5pc2hlcy5cbiAgICogQHJldHVybnMge251bWJlcltdfVxuICAgKi9cbiAgZXhwYW5kQ2hpbGRyZW4ocm93KSB7XG4gICAgbGV0IGZvcmNlUmVuZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuICAgIGxldCBkb1RyaW1taW5nID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0cnVlO1xuICAgIGNvbnN0IHJvd3NUb0V4cGFuZCA9IFtdO1xuICAgIGxldCByb3dPYmplY3QgPSBudWxsO1xuICAgIGxldCByb3dJbmRleCA9IG51bGw7XG4gICAgbGV0IHJvd3NUb1VudHJpbSA9IG51bGw7XG4gICAgaWYgKGlzTmFOKHJvdykpIHtcbiAgICAgIHJvd09iamVjdCA9IHJvdztcbiAgICAgIHJvd0luZGV4ID0gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChyb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dPYmplY3QgPSB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3Qocm93KTtcbiAgICAgIHJvd0luZGV4ID0gcm93O1xuICAgIH1cbiAgICB0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHJvd0luZGV4KSwgMSk7XG4gICAgaWYgKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4ocm93T2JqZWN0KSkge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJvd09iamVjdC5fX2NoaWxkcmVuLCBlbGVtID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRJbmRleCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZWxlbSk7XG4gICAgICAgIHJvd3NUb0V4cGFuZC5wdXNoKGNoaWxkSW5kZXgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJvd3NUb1VudHJpbSA9IHRoaXMuZXhwYW5kUm93cyhyb3dzVG9FeHBhbmQsIHRydWUsIGZhbHNlKTtcbiAgICBpZiAoZG9UcmltbWluZykge1xuICAgICAgdGhpcy51bnRyaW1Sb3dzKHJvd3NUb1VudHJpbSk7XG4gICAgfVxuICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXJBbmRBZGp1c3QoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NUb1VudHJpbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgbXVsdGlwbGUgcm93cycgY2hpbGRyZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd3MgQXJyYXkgb2Ygcm93cyB3aGljaCBjaGlsZHJlbiBhcmUgYWJvdXQgdG8gYmUgZXhwYW5kZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlUmVuZGVyPXRydWVdIGB0cnVlYCBpZiB0aGUgdGFibGUgc2hvdWxkIHJlbmRlciBhZnRlciBmaW5pc2hpbmcgdGhlIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkb1RyaW1taW5nPXRydWVdIGB0cnVlYCBpZiB0aGUgcm93cyBzaG91bGQgYmUgdW50cmltbWVkIGFmdGVyIGZpbmlzaGluZyB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBleHBhbmRNdWx0aXBsZUNoaWxkcmVuKHJvd3MpIHtcbiAgICBsZXQgZm9yY2VSZW5kZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG4gICAgbGV0IGRvVHJpbW1pbmcgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG4gICAgY29uc3Qgcm93c1RvVW50cmltID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJvd3MsIGVsZW0gPT4ge1xuICAgICAgcm93c1RvVW50cmltLnB1c2goLi4udGhpcy5leHBhbmRDaGlsZHJlbihlbGVtLCBmYWxzZSwgZmFsc2UpKTtcbiAgICB9KTtcbiAgICBpZiAoZG9UcmltbWluZykge1xuICAgICAgdGhpcy51bnRyaW1Sb3dzKHJvd3NUb1VudHJpbSk7XG4gICAgfVxuICAgIGlmIChmb3JjZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXJBbmRBZGp1c3QoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYWxsIGNvbGxhcHNhYmxlIHJvd3MuXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7XG4gICAgY29uc3QgcGFyZW50c1RvQ29sbGFwc2UgPSBbXTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoZGF0YSwgZWxlbSA9PiB7XG4gICAgICBpZiAodGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihlbGVtKSkge1xuICAgICAgICBwYXJlbnRzVG9Db2xsYXBzZS5wdXNoKGVsZW0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKHBhcmVudHNUb0NvbGxhcHNlKTtcbiAgICB0aGlzLnJlbmRlckFuZEFkanVzdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBhbGwgY29sbGFwc2FibGUgcm93cy5cbiAgICovXG4gIGV4cGFuZEFsbCgpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7XG4gICAgY29uc3QgcGFyZW50c1RvRXhwYW5kID0gW107XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGRhdGEsIGVsZW0gPT4ge1xuICAgICAgaWYgKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZWxlbSkpIHtcbiAgICAgICAgcGFyZW50c1RvRXhwYW5kLnB1c2goZWxlbSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKHBhcmVudHNUb0V4cGFuZCk7XG4gICAgdGhpcy5yZW5kZXJBbmRBZGp1c3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmltIHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd3MgUGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gICAqL1xuICB0cmltUm93cyhyb3dzKSB7XG4gICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJvd3MsIHBoeXNpY2FsUm93ID0+IHtcbiAgICAgICAgdGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxSb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVW50cmltIHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHJvd3MgUGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gICAqL1xuICB1bnRyaW1Sb3dzKHJvd3MpIHtcbiAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocm93cywgcGh5c2ljYWxSb3cgPT4ge1xuICAgICAgICB0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbFJvdywgZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWxsIGNoaWxkIHJvd3MgYXJlIGNvbGxhcHNlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ8b2JqZWN0fG51bGx9IHJvdyBUaGUgcGFyZW50IHJvdy4gYG51bGxgIGZvciB0aGUgdG9wIGxldmVsLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGFyZUNoaWxkcmVuQ29sbGFwc2VkKHJvdykge1xuICAgIGxldCByb3dPYmogPSBpc05hTihyb3cpID8gcm93IDogdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KHJvdyk7XG4gICAgbGV0IGFsbENvbGxhcHNlZCA9IHRydWU7XG5cbiAgICAvLyBDaGVja2luZyB0aGUgY2hpbGRyZW4gb2YgdGhlIHRvcC1sZXZlbCBcInBhcmVudFwiXG4gICAgaWYgKHJvd09iaiA9PT0gbnVsbCkge1xuICAgICAgcm93T2JqID0ge1xuICAgICAgICBfX2NoaWxkcmVuOiB0aGlzLmRhdGFNYW5hZ2VyLmRhdGFcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHJvd09iaikpIHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShyb3dPYmouX19jaGlsZHJlbiwgZWxlbSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChlbGVtKTtcbiAgICAgICAgaWYgKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChyb3dJbmRleCkpIHtcbiAgICAgICAgICBhbGxDb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWxsQ29sbGFwc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFueSBvZiB0aGUgcm93IG9iamVjdCBwYXJlbnRzIGFyZSBjb2xsYXBzZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByb3dPYmogUm93IG9iamVjdC5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FueVBhcmVudENvbGxhcHNlZChyb3dPYmopIHtcbiAgICBsZXQgcGFyZW50ID0gcm93T2JqO1xuICAgIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICAgIHBhcmVudCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KHBhcmVudCk7XG4gICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgocGFyZW50KTtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihwYXJlbnRJbmRleCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBjb2xsYXBzZWQgc3RhdGUuIENhbGxiYWNrIGZvciB0aGUgYGJlZm9yZU9uQ2VsbE1vdXNlZG93bmAgaG9vay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBgbW91c2Vkb3duYCBldmVudC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvb3JkcyBDb29yZGluYXRlcyBvZiB0aGUgY2xpY2tlZCBjZWxsL2hlYWRlci5cbiAgICovXG4gIHRvZ2dsZVN0YXRlKGV2ZW50LCBjb29yZHMpIHtcbiAgICBpZiAoY29vcmRzLmNvbCA+PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IHRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhjb29yZHMucm93KTtcbiAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShldmVudC50YXJnZXQsIF9oZWFkZXJzLmRlZmF1bHQuQ1NTX0NMQVNTRVMuYnV0dG9uKSkge1xuICAgICAgaWYgKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQocm93KSkge1xuICAgICAgICB0aGlzLmV4cGFuZENoaWxkcmVuKHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbGxhcHNlQ2hpbGRyZW4ocm93KTtcbiAgICAgIH1cbiAgICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSB2aXN1YWwgcm93IGFmdGVyIHRyaW1taW5nIHRvIHBoeXNpY2FsIGJhc2Ugcm93IGluZGV4LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFJvdyBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcn0gQmFzZSByb3cgaW5kZXguXG4gICAqL1xuICB0cmFuc2xhdGVUcmltbWVkUm93KHJvdykge1xuICAgIHJldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdyk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHBoeXNpY2FsIHJvdyBhZnRlciB0cmltbWluZyB0byB2aXN1YWwgYmFzZSByb3cgaW5kZXguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBCYXNlIHJvdyBpbmRleC5cbiAgICovXG4gIHVudHJhbnNsYXRlVHJpbW1lZFJvdyhyb3cpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cocm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmVuZGVyIHRoZSB0YWJsZSBhbmQgY2FsbCB0aGUgYGFkanVzdEVsZW1lbnRzU2l6ZWAgbWV0aG9kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVuZGVyQW5kQWRqdXN0KCkge1xuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuXG4gICAgLy8gRGlydHkgd29ya2Fyb3VuZCB0byBwcmV2ZW50IHNjcm9sbCBoZWlnaHQgbm90IGFkanVzdGluZyB0byB0aGUgdGFibGUgaGVpZ2h0LiBOZWVkcyByZWZhY3RvcmluZyBpbiB0aGUgZnV0dXJlLlxuICAgIHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IENvbGxhcHNpbmdVSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBDID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4uLy4uLy4uL2kxOG4vY29uc3RhbnRzXCIpKTtcbnZhciBfYmFzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vX2Jhc2VcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIHRoZSBDb250ZXh0IE1lbnUgZW50cmllcyBmb3IgdGhlIE5lc3RlZCBSb3dzIHBsdWdpbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIENvbnRleHRNZW51VUlcbiAqIEBhdWdtZW50cyBCYXNlVUlcbiAqL1xudmFyIF9tZW51RW50cmllcyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuY2xhc3MgQ29udGV4dE1lbnVVSSBleHRlbmRzIF9iYXNlLmRlZmF1bHQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgRGF0YU1hbmFnZXIgaW5zdGFuY2UgY29ubmVjdGVkIHdpdGggdGhlIE5lc3RlZCBSb3dzIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtEYXRhTWFuYWdlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhTWFuYWdlclwiLCB0aGlzLnBsdWdpbi5kYXRhTWFuYWdlcik7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX21lbnVFbnRyaWVzLCB7XG4gICAgICByb3dfYWJvdmU6IChrZXksIHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U2VsZWN0aW9uID0gc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXTtcbiAgICAgICAgdGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGxhc3RTZWxlY3Rpb24uc3RhcnQucm93LCAnYWJvdmUnKTtcbiAgICAgIH0sXG4gICAgICByb3dfYmVsb3c6IChrZXksIHNlbGVjdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBsYXN0U2VsZWN0aW9uID0gc2VsZWN0aW9uW3NlbGVjdGlvbi5sZW5ndGggLSAxXTtcbiAgICAgICAgdGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGxhc3RTZWxlY3Rpb24uc3RhcnQucm93LCAnYmVsb3cnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQXBwZW5kIG9wdGlvbnMgdG8gdGhlIGNvbnRleHQgbWVudS4gKFByb3BhZ2F0ZWQgZnJvbSB0aGUgYGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uc2AgaG9vayBjYWxsYmFjaylcbiAgICogZi5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRPcHRpb25zIERlZmF1bHQgY29udGV4dCBtZW51IG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXBwZW5kT3B0aW9ucyhkZWZhdWx0T3B0aW9ucykge1xuICAgIGNvbnN0IG5ld0VudHJpZXMgPSBbe1xuICAgICAga2V5OiAnYWRkX2NoaWxkJyxcbiAgICAgIG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQy5DT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQpO1xuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZWRSb3dJbmRleCA9IHRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKVswXSk7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdCh0cmFuc2xhdGVkUm93SW5kZXgpO1xuICAgICAgICB0aGlzLmRhdGFNYW5hZ2VyLmFkZENoaWxkKHBhcmVudCk7XG4gICAgICB9LFxuICAgICAgZGlzYWJsZWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtcbiAgICAgICAgcmV0dXJuICFzZWxlY3RlZCB8fCBzZWxlY3RlZFswXSA8IDAgfHwgdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpIHx8IHRoaXMuaG90LmNvdW50Um93cygpID49IHRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93cztcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICdkZXRhY2hfZnJvbV9wYXJlbnQnLFxuICAgICAgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDLkNPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0RFVEFDSF9DSElMRCk7XG4gICAgICB9LFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgdGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpKTtcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlZDogKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVkUm93SW5kZXggPSB0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coc2VsZWN0ZWRbMF0pO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudCh0cmFuc2xhdGVkUm93SW5kZXgpO1xuICAgICAgICByZXR1cm4gIXBhcmVudCB8fCAhc2VsZWN0ZWQgfHwgc2VsZWN0ZWRbMF0gPCAwIHx8IHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSB8fCB0aGlzLmhvdC5jb3VudFJvd3MoKSA+PSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm1heFJvd3M7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAgbmFtZTogJy0tLS0tLS0tLSdcbiAgICB9XTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKDAsIGRlZmF1bHRPcHRpb25zLml0ZW1zLmxlbmd0aCAtIDEsIGkgPT4ge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKG5ld0VudHJpZXMsICh2YWwsIGopID0+IHtcbiAgICAgICAgICBkZWZhdWx0T3B0aW9ucy5pdGVtcy5zcGxpY2UoaSArIGosIDAsIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhkZWZhdWx0T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZ5IGhvdyB0aGUgcm93IGluc2VydGluZyBvcHRpb25zIHdvcmsuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkZWZhdWx0T3B0aW9ucyBEZWZhdWx0IGNvbnRleHQgbWVudSBpdGVtcy5cbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBtb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGRlZmF1bHRPcHRpb25zKSB7XG4gICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKSgwLCBkZWZhdWx0T3B0aW9ucy5pdGVtcy5sZW5ndGggLSAxLCBpID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfbWVudUVudHJpZXMsIHRoaXMpW2RlZmF1bHRPcHRpb25zLml0ZW1zW2ldLmtleV07XG4gICAgICBpZiAob3B0aW9uICE9PSBudWxsICYmIG9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlZmF1bHRPcHRpb25zLml0ZW1zW2ldLmNhbGxiYWNrID0gb3B0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gQ29udGV4dE1lbnVVSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2Jhc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL19iYXNlXCIpKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDbGFzcyByZXNwb25zaWJsZSBmb3IgdGhlIFVJIGluIHRoZSBOZXN0ZWQgUm93cycgcm93IGhlYWRlcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjbGFzcyBIZWFkZXJzVUlcbiAqIEBhdWdtZW50cyBCYXNlVUlcbiAqL1xuY2xhc3MgSGVhZGVyc1VJIGV4dGVuZHMgX2Jhc2UuZGVmYXVsdCB7XG4gIC8qKlxuICAgKiBDU1MgY2xhc3NlcyB1c2VkIGluIHRoZSByb3cgaGVhZGVycy5cbiAgICpcbiAgICogQHR5cGUge29iamVjdH1cbiAgICovXG4gIHN0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGljYXRvckNvbnRhaW5lcjogJ2h0X25lc3RpbmdMZXZlbHMnLFxuICAgICAgcGFyZW50OiAnaHRfbmVzdGluZ1BhcmVudCcsXG4gICAgICBpbmRpY2F0b3I6ICdodF9uZXN0aW5nTGV2ZWwnLFxuICAgICAgZW1wdHlJbmRpY2F0b3I6ICdodF9uZXN0aW5nTGV2ZWxfZW1wdHknLFxuICAgICAgYnV0dG9uOiAnaHRfbmVzdGluZ0J1dHRvbicsXG4gICAgICBleHBhbmRCdXR0b246ICdodF9uZXN0aW5nRXhwYW5kJyxcbiAgICAgIGNvbGxhcHNlQnV0dG9uOiAnaHRfbmVzdGluZ0NvbGxhcHNlJ1xuICAgIH07XG4gIH1cbiAgY29uc3RydWN0b3IobmVzdGVkUm93c1BsdWdpbiwgaG90SW5zdGFuY2UpIHtcbiAgICBzdXBlcihuZXN0ZWRSb3dzUGx1Z2luLCBob3RJbnN0YW5jZSk7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBEYXRhTWFuYWdlciBpbnN0YW5jZSBjb25uZWN0ZWQgd2l0aCB0aGUgTmVzdGVkIFJvd3MgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHR5cGUge0RhdGFNYW5hZ2VyfVxuICAgICAqL1xuICAgIHRoaXMuZGF0YU1hbmFnZXIgPSB0aGlzLnBsdWdpbi5kYXRhTWFuYWdlcjtcbiAgICAvLyAvKipcbiAgICAvLyAgKiBMZXZlbCBjYWNoZSBhcnJheS5cbiAgICAvLyAgKlxuICAgIC8vICAqIEB0eXBlIHtBcnJheX1cbiAgICAvLyAgKi9cbiAgICAvLyB0aGlzLmxldmVsQ2FjaGUgPSB0aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVscztcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIENvbGxhcHNpbmdVSSBpbnN0YW5jZSBjb25uZWN0ZWQgd2l0aCB0aGUgTmVzdGVkIFJvd3MgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHR5cGUge0NvbGxhcHNpbmdVSX1cbiAgICAgKi9cbiAgICB0aGlzLmNvbGxhcHNpbmdVSSA9IHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgdGhlIHJvdyBoZWFkZXJzIHdpZHRoLlxuICAgICAqXG4gICAgICogQHR5cGUge251bGx8bnVtYmVyfVxuICAgICAqL1xuICAgIHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIG5lc3RpbmcgaW5kaWNhdG9ycyBhbmQgYnV0dG9ucyB0byB0aGUgcm93IGhlYWRlcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgUm93IGluZGV4LlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBUSCBUSCAzZWxlbWVudC5cbiAgICovXG4gIGFwcGVuZExldmVsSW5kaWNhdG9ycyhyb3csIFRIKSB7XG4gICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJvdyk7XG4gICAgY29uc3Qgcm93TGV2ZWwgPSB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKHJvd0luZGV4KTtcbiAgICBjb25zdCByb3dPYmplY3QgPSB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3Qocm93SW5kZXgpO1xuICAgIGNvbnN0IGlubmVyRGl2ID0gVEguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0RJVicpWzBdO1xuICAgIGNvbnN0IGlubmVyU3BhbiA9IGlubmVyRGl2LnF1ZXJ5U2VsZWN0b3IoJ3NwYW4ucm93SGVhZGVyJyk7XG4gICAgY29uc3QgcHJldmlvdXNJbmRpY2F0b3JzID0gaW5uZXJEaXYucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzXj1cImh0X25lc3RpbmdcIl0nKTtcbiAgICBjb25zdCBhcmlhRW5hYmxlZCA9IHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHByZXZpb3VzSW5kaWNhdG9ycywgZWxlbSA9PiB7XG4gICAgICBpZiAoZWxlbSkge1xuICAgICAgICBpbm5lckRpdi5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKFRILCBIZWFkZXJzVUkuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKTtcbiAgICBpZiAocm93TGV2ZWwpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm9vdERvY3VtZW50XG4gICAgICB9ID0gdGhpcy5ob3Q7XG4gICAgICBjb25zdCBpbml0aWFsQ29udGVudCA9IGlubmVyU3Bhbi5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICBpbm5lckRpdi5pbm5lckhUTUwgPSAnJztcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoMCwgcm93TGV2ZWwgLSAxLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxldmVsSW5kaWNhdG9yID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShsZXZlbEluZGljYXRvciwgSGVhZGVyc1VJLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKTtcbiAgICAgICAgaW5uZXJEaXYuYXBwZW5kQ2hpbGQobGV2ZWxJbmRpY2F0b3IpO1xuICAgICAgfSk7XG4gICAgICBpbm5lckRpdi5hcHBlbmRDaGlsZChpbml0aWFsQ29udGVudCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKHJvd09iamVjdCkpIHtcbiAgICAgIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSB0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICBpZiAoYXJpYUVuYWJsZWQpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoYnV0dG9uc0NvbnRhaW5lciwgWygwLCBfYTExeS5BMTFZX0hJRERFTikoKV0pO1xuICAgICAgfVxuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShUSCwgSGVhZGVyc1VJLkNTU19DTEFTU0VTLnBhcmVudCk7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQocm93SW5kZXgpKSB7XG4gICAgICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoYnV0dG9uc0NvbnRhaW5lciwgYCR7SGVhZGVyc1VJLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtIZWFkZXJzVUkuQ1NTX0NMQVNTRVMuZXhwYW5kQnV0dG9ufWApO1xuICAgICAgICBpZiAoYXJpYUVuYWJsZWQpIHtcbiAgICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShUSCwgWygwLCBfYTExeS5BMTFZX0VYUEFOREVEKShmYWxzZSldKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShidXR0b25zQ29udGFpbmVyLCBgJHtIZWFkZXJzVUkuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke0hlYWRlcnNVSS5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKTtcbiAgICAgICAgaWYgKGFyaWFFbmFibGVkKSB7XG4gICAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoVEgsIFsoMCwgX2ExMXkuQTExWV9FWFBBTkRFRCkodHJ1ZSldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaW5uZXJEaXYuYXBwZW5kQ2hpbGQoYnV0dG9uc0NvbnRhaW5lcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcm93IGhlYWRlciB3aWR0aCBhY2NvcmRpbmcgdG8gbnVtYmVyIG9mIGxldmVscyBpbiB0aGUgZGF0YXNldC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZXBlc3RMZXZlbCBDYWNoZWQgZGVlcGVzdCBsZXZlbCBvZiBuZXN0aW5nLlxuICAgKi9cbiAgdXBkYXRlUm93SGVhZGVyV2lkdGgoZGVlcGVzdExldmVsKSB7XG4gICAgbGV0IGRlZXBlc3RMZXZlbEluZGV4ID0gZGVlcGVzdExldmVsO1xuICAgIGlmICghZGVlcGVzdExldmVsSW5kZXgpIHtcbiAgICAgIGRlZXBlc3RMZXZlbEluZGV4ID0gdGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50O1xuICAgIH1cbiAgICB0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGUgPSBNYXRoLm1heCg1MCwgMTEgKyAxMCAqIGRlZXBlc3RMZXZlbEluZGV4ICsgMjUpO1xuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBIZWFkZXJzVUk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9jb25zb2xlID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvY29uc29sZVwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgdGhlIHJvdy1tb3ZlLXJlbGF0ZWQgb3BlcmF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIFJvd01vdmVDb250cm9sbGVyXG4gKi9cbmNsYXNzIFJvd01vdmVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IocGx1Z2luKSB7XG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TmVzdGVkUm93c31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwbHVnaW5cIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIYW5kc29udGFibGUuQ29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIERhdGEgTWFuYWdlciBjbGFzcyBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtEYXRhTWFuYWdlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhTWFuYWdlclwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgQ29sbGFwc2luZyBVSSBjbGFzcyBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtDb2xsYXBzaW5nVUl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sbGFwc2luZ1VJXCIsIHZvaWQgMCk7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgdGhpcy5ob3QgPSBwbHVnaW4uaG90O1xuICAgIHRoaXMuZGF0YU1hbmFnZXIgPSBwbHVnaW4uZGF0YU1hbmFnZXI7XG4gICAgdGhpcy5jb2xsYXBzaW5nVUkgPSBwbHVnaW4uY29sbGFwc2luZ1VJO1xuICB9XG5cbiAgLyoqXG4gICAqIGBiZWZvcmVSb3dNb3ZlYCBob29rIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSByb3dzIEFycmF5IG9mIHZpc3VhbCByb3cgaW5kZXhlcyB0byBiZSBtb3ZlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVmlzdWFsIHJvdyBpbmRleCwgYmVpbmcgYSBzdGFydCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB0aGUgZWxlbWVudHNcbiAgICogICB3aWxsIGJlIHBsYWNlZCBhZnRlciB0aGUgbW92aW5nIGFjdGlvbi4gVG8gY2hlY2sgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIGZpbmFsIGluZGV4LCBwbGVhc2UgdGFrZSBhIGxvb2sgYXRcbiAgICogICBbZG9jdW1lbnRhdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctbW92aW5nL3Jvdy1tb3ZpbmcubWQpLlxuICAgKiBAcGFyYW0ge3VuZGVmaW5lZHxudW1iZXJ9IGRyb3BJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIGRyb3AgaW5kZXggZm9yIHRoZSBtb3ZlZCByb3dzLiBQb2ludHMgdG8gd2hlcmUgd2VcbiAgICogICBhcmUgZ29pbmcgdG8gZHJvcCB0aGUgbW92ZWQgZWxlbWVudHMuIFRvIGNoZWNrIHZpc3VhbGl6YXRpb24gb2YgZHJvcCBpbmRleCBwbGVhc2UgdGFrZSBhIGxvb2sgYXRcbiAgICogICBbZG9jdW1lbnRhdGlvbl0oQC9ndWlkZXMvcm93cy9yb3ctbW92aW5nL3Jvdy1tb3ZpbmcubWQpLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IG1vdmVQb3NzaWJsZSBJbmRpY2F0ZXMgaWYgaXQncyBwb3NzaWJsZSB0byBtb3ZlIHJvd3MgdG8gdGhlIGRlc2lyZWQgcG9zaXRpb24uXG4gICAqIEBmaXJlcyBIb29rcyNhZnRlclJvd01vdmVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBvbkJlZm9yZVJvd01vdmUocm93cywgZmluYWxJbmRleCwgZHJvcEluZGV4LCBtb3ZlUG9zc2libGUpIHtcbiAgICBjb25zdCBpbXByb3BlclVzYWdlID0gdGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe1xuICAgICAgcm93cyxcbiAgICAgIGZpbmFsSW5kZXgsXG4gICAgICBkcm9wSW5kZXgsXG4gICAgICBtb3ZlUG9zc2libGVcbiAgICB9KTtcbiAgICBpZiAoaW1wcm9wZXJVc2FnZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLm1vdmVkVG9Db2xsYXBzZWQgPSBmYWxzZTtcbiAgICBjb25zdCBkcm9wVG9MYXN0Um93ID0gZHJvcEluZGV4ID09PSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBwaHlzaWNhbERyb3BJbmRleCA9IGRyb3BUb0xhc3RSb3cgPyB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKSA6IHRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkcm9wSW5kZXgpO1xuICAgIGxldCBhbGxvd01vdmUgPSB0cnVlO1xuICAgIGNvbnN0IHBoeXNpY2FsU3RhcnRJbmRleGVzID0gcm93cy5tYXAocm93SW5kZXggPT4ge1xuICAgICAgLy8gRG9uJ3QgZG8gdGhlIGxvZ2ljIGZvciB0aGUgcmVzdCBvZiB0aGUgcm93cywgYXMgaXQncyBib3VuZCB0byBmYWlsIGFueXdheS5cbiAgICAgIGlmICghYWxsb3dNb3ZlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBoeXNpY2FsUm93SW5kZXggPSB0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cocm93SW5kZXgpO1xuICAgICAgYWxsb3dNb3ZlID0gdGhpcy5zaG91bGRBbGxvd01vdmluZyhwaHlzaWNhbFJvd0luZGV4LCBwaHlzaWNhbERyb3BJbmRleCk7XG4gICAgICByZXR1cm4gcGh5c2ljYWxSb3dJbmRleDtcbiAgICB9KTtcbiAgICBjb25zdCB3aWxsRGF0YUNoYW5nZSA9IHBoeXNpY2FsU3RhcnRJbmRleGVzLmluZGV4T2YocGh5c2ljYWxEcm9wSW5kZXgpID09PSAtMTtcbiAgICBpZiAoIWFsbG93TW92ZSB8fCAhd2lsbERhdGFDaGFuZ2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYmFzZVBhcmVudCA9IHRoaXMuZ2V0QmFzZVBhcmVudChwaHlzaWNhbFN0YXJ0SW5kZXhlcyk7XG4gICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy5nZXRUYXJnZXRQYXJlbnQoZHJvcFRvTGFzdFJvdywgcGh5c2ljYWxEcm9wSW5kZXgpO1xuICAgIGNvbnN0IHNhbWVQYXJlbnQgPSBiYXNlUGFyZW50ID09PSB0YXJnZXRQYXJlbnQ7XG4gICAgdGhpcy5tb3ZlZFRvQ29sbGFwc2VkID0gdGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQodGFyZ2V0UGFyZW50KTtcblxuICAgIC8vIFN0YXNoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGNvbGxhcHNlZCByb3dzXG4gICAgdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCk7XG4gICAgdGhpcy5zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhwaHlzaWNhbFN0YXJ0SW5kZXhlcywgcGh5c2ljYWxEcm9wSW5kZXgsIHNhbWVQYXJlbnQpO1xuICAgIHRoaXMubW92ZVJvd3MocGh5c2ljYWxTdGFydEluZGV4ZXMsIHBoeXNpY2FsRHJvcEluZGV4LCB0YXJnZXRQYXJlbnQpO1xuICAgIHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCk7XG4gICAgdGhpcy5tb3ZlQ2VsbHNNZXRhKHBoeXNpY2FsU3RhcnRJbmRleGVzLCBwaHlzaWNhbERyb3BJbmRleCk7XG4gICAgdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goZmFsc2UpO1xuXG4gICAgLy8gVE9ETzogVHJ5aW5nIHRvIG1vY2sgcmVhbCB3b3JrIG9mIHRoZSBgTWFudWFsUm93TW92ZWAgcGx1Z2luLiBJdCB3YXMgYmxvY2tlZCBieSByZXR1cm5pbmcgYGZhbHNlYCBiZWxvdy5cbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJSb3dNb3ZlJywgcm93cywgZmluYWxJbmRleCwgZHJvcEluZGV4LCBtb3ZlUG9zc2libGUsIG1vdmVQb3NzaWJsZSAmJiB0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKHJvd3MsIGZpbmFsSW5kZXgpKTtcblxuICAgIC8vIE5vdCBuZWNlc3NhcnkgLSBhZGRlZCB0byBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBwbHVnaW5zIChuYW1lbHk6IGNvbHVtblN1bW1hcnkpLlxuICAgIHRoaXMuaG90LnJlbmRlcigpO1xuICAgIHRoaXMuc2VsZWN0Q2VsbHMocm93cywgZHJvcEluZGV4KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhIGBkcmFnUm93c2AvYG1vdmVSb3dzYCBtZXRob2QgY29tcGF0aWJpbGl0eSB3YXJuaW5nIGlmIG5lZWRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGJlZm9yZU1vdmVSb3dIb29rQXJncyBBIHNldCBvZiBhcmd1bWVudHMgZnJvbSB0aGUgYGJlZm9yZU1vdmVSb3dgIGhvb2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgaXMgYSByZXN1bHQgb2YgYW4gaW1wcm9wZXIgdXNhZ2Ugb2YgdGhlIG1vdmluZyBBUEkuXG4gICAqL1xuICBkaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoYmVmb3JlTW92ZVJvd0hvb2tBcmdzKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGZpbmFsSW5kZXgsXG4gICAgICBkcm9wSW5kZXgsXG4gICAgICBtb3ZlUG9zc2libGVcbiAgICB9ID0gYmVmb3JlTW92ZVJvd0hvb2tBcmdzO1xuICAgIGxldCBzaG91bGRUZXJtaW5hdGUgPSBmYWxzZTtcbiAgICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkoZHJvcEluZGV4KSkge1xuICAgICAgKDAsIF9jb25zb2xlLndhcm4pKCgwLCBfdGVtcGxhdGVMaXRlcmFsVGFnLnRvU2luZ2xlTGluZSlgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1xceDIwXG4gICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApO1xuXG4gICAgICAvLyBUT0RPOiBUcnlpbmcgdG8gbW9jayByZWFsIHdvcmsgb2YgdGhlIGBNYW51YWxSb3dNb3ZlYCBwbHVnaW4uIEl0IHdhcyBibG9ja2VkIGJ5IHJldHVybmluZyBgZmFsc2VgIGJlbG93LlxuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyUm93TW92ZScsIHJvd3MsIGZpbmFsSW5kZXgsIGRyb3BJbmRleCwgbW92ZVBvc3NpYmxlLCBmYWxzZSk7XG4gICAgICBzaG91bGRUZXJtaW5hdGUgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc2hvdWxkVGVybWluYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBtb3ZpbmcgYWN0aW9uIHNob3VsZCBiZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3dJbmRleCBQaHlzaWNhbCBzdGFydCByb3cgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbERyb3BJbmRleCBQaHlzaWNhbCBkcm9wIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGl0IHNob3VsZCBjb250aW51ZSB3aXRoIHRoZSBtb3ZpbmcgYWN0aW9uLlxuICAgKi9cbiAgc2hvdWxkQWxsb3dNb3ZpbmcocGh5c2ljYWxSb3dJbmRleCwgcGh5c2ljYWxEcm9wSW5kZXgpIHtcbiAgICAvKlxuICAgICAgIFdlIGNhbid0IG1vdmUgcm93cyB3aGVuIGFueSBvZiB0aGVtIGlzOlxuICAgICAgIC0gYSBwYXJlbnRcbiAgICAgICAtIGEgdG9wLWxldmVsIGVsZW1lbnRcbiAgICAgICAtIGlzIGJlaW5nIG1vdmVkIHRvIHRoZSB0b3AgbGV2ZWxcbiAgICAgICAtIGlzIGJlaW5nIG1vdmVkIHRvIHRoZSBwb3NpdGlvbiBvZiBhbnkgb2YgdGhlIG1vdmVkIHJvd3MgKG5vdCBjaGFuZ2luZyBwb3NpdGlvbilcbiAgICAqL1xuXG4gICAgcmV0dXJuICEodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChwaHlzaWNhbFJvd0luZGV4KSB8fCB0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKHBoeXNpY2FsUm93SW5kZXgpIHx8IHBoeXNpY2FsUm93SW5kZXggPT09IHBoeXNpY2FsRHJvcEluZGV4IHx8IHBoeXNpY2FsRHJvcEluZGV4ID09PSAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJhc2Ugcm93IHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsU3RhcnRJbmRleGVzIFBoeXNpY2FsIHN0YXJ0IHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfSBUaGUgYmFzZSByb3cgcGFyZW50LlxuICAgKi9cbiAgZ2V0QmFzZVBhcmVudChwaHlzaWNhbFN0YXJ0SW5kZXhlcykge1xuICAgIHJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChwaHlzaWNhbFN0YXJ0SW5kZXhlc1swXSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB0YXJnZXQgcm93IHBhcmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBkcm9wVG9MYXN0Um93IGB0cnVlYCBpZiB0aGUgcm93IGlzIG1vdmVkIHRvIHRoZSBsYXN0IHJvdyBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbERyb3BJbmRleCBQaHlzaWNhbCBkcm9wIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdHxudWxsfSBUaGUgdGFyZ2V0IHJvdyBwYXJlbnQuXG4gICAqL1xuICBnZXRUYXJnZXRQYXJlbnQoZHJvcFRvTGFzdFJvdywgcGh5c2ljYWxEcm9wSW5kZXgpIHtcbiAgICBsZXQgdGFyZ2V0UGFyZW50ID0gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoZHJvcFRvTGFzdFJvdyA/IHBoeXNpY2FsRHJvcEluZGV4IC0gMSA6IHBoeXNpY2FsRHJvcEluZGV4KTtcblxuICAgIC8vIElmIHdlIHRyeSB0byBtb3ZlIGFuIGVsZW1lbnQgdG8gdGhlIHBsYWNlIG9mIGEgdG9wLWxldmVsIHBhcmVudCwgc25hcCB0aGUgZWxlbWVudCB0byB0aGUgcHJldmlvdXMgdG9wLWxldmVsXG4gICAgLy8gcGFyZW50J3MgY2hpbGRyZW4gaW5zdGVhZFxuICAgIGlmICh0YXJnZXRQYXJlbnQgPT09IG51bGwgfHwgdGFyZ2V0UGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldFBhcmVudCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KHBoeXNpY2FsRHJvcEluZGV4IC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRQYXJlbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2hpZnQgdGhlIGNhY2hlZCBjb2xsYXBzaWJsZSByb3dzIHBvc2l0aW9uIGFjY29yZGluZyB0byB0aGUgbW92ZSBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHBoeXNpY2FsU3RhcnRJbmRleGVzIFBoeXNpY2FsIHN0YXJ0IHJvdyBpbmRleGVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxEcm9wSW5kZXggUGh5c2ljYWwgZHJvcCBpbmRleC5cbiAgICogQHBhcmFtIHtib29sZWFufSBzYW1lUGFyZW50IGB0cnVlYCBpZiB0aGUgcm93J3MgYmVpbmcgbW92ZWQgYmV0d2VlbiBzaWJsaW5ncyBvZiB0aGUgc2FtZSBwYXJlbnQuXG4gICAqL1xuICBzaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhwaHlzaWNhbFN0YXJ0SW5kZXhlcywgcGh5c2ljYWxEcm9wSW5kZXgsIHNhbWVQYXJlbnQpIHtcbiAgICBpZiAoIXNhbWVQYXJlbnQpIHtcbiAgICAgIGlmIChNYXRoLm1heCguLi5waHlzaWNhbFN0YXJ0SW5kZXhlcykgPD0gcGh5c2ljYWxEcm9wSW5kZXgpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gocGh5c2ljYWxTdGFydEluZGV4ZXNbMF0sIHBoeXNpY2FsRHJvcEluZGV4LCAtMSAqIHBoeXNpY2FsU3RhcnRJbmRleGVzLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChwaHlzaWNhbERyb3BJbmRleCwgcGh5c2ljYWxTdGFydEluZGV4ZXNbMF0sIHBoeXNpY2FsU3RhcnRJbmRleGVzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmUgdGhlIHJvd3MgYXQgdGhlIHByb3ZpZGVkIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBwaHlzaWNhbFN0YXJ0SW5kZXhlcyBQaHlzaWNhbCBpbmRleGVzIG9mIHRoZSByb3dzIGFib3V0IHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxEcm9wSW5kZXggUGh5c2ljYWwgZHJvcCBpbmRleC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHRhcmdldFBhcmVudCBQYXJlbnQgb2YgdGhlIGRlc3RpbmF0aW9uIHJvdy5cbiAgICovXG4gIG1vdmVSb3dzKHBoeXNpY2FsU3RhcnRJbmRleGVzLCBwaHlzaWNhbERyb3BJbmRleCwgdGFyZ2V0UGFyZW50KSB7XG4gICAgY29uc3QgbW92ZVRvTGFzdENoaWxkID0gcGh5c2ljYWxEcm9wSW5kZXggPT09IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodGFyZ2V0UGFyZW50KSArIHRoaXMuZGF0YU1hbmFnZXIuY291bnRDaGlsZHJlbih0YXJnZXRQYXJlbnQpICsgMTtcbiAgICB0aGlzLmhvdC5iYXRjaFJlbmRlcigoKSA9PiB7XG4gICAgICBwaHlzaWNhbFN0YXJ0SW5kZXhlcy5mb3JFYWNoKHBoeXNpY2FsU3RhcnRJbmRleCA9PiB7XG4gICAgICAgIHRoaXMuZGF0YU1hbmFnZXIubW92ZVJvdyhwaHlzaWNhbFN0YXJ0SW5kZXgsIHBoeXNpY2FsRHJvcEluZGV4LCB0aGlzLm1vdmVkVG9Db2xsYXBzZWQsIG1vdmVUb0xhc3RDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIHRoZSBjZWxsIG1ldGEgZm9yIG11bHRpcGxlIHJvd3MuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGJhc2VJbmRleGVzIEFycmF5IG9mIGluZGV4ZXMgZm9yIHRoZSByb3dzIGJlaW5nIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0SW5kZXggSW5kZXggb2YgdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBtb3ZlLlxuICAgKi9cbiAgbW92ZUNlbGxzTWV0YShiYXNlSW5kZXhlcywgdGFyZ2V0SW5kZXgpIHtcbiAgICBjb25zdCByb3dzT2ZNZXRhID0gW107XG4gICAgY29uc3QgbW92aW5nRG93biA9IE1hdGgubWF4KC4uLmJhc2VJbmRleGVzKSA8IHRhcmdldEluZGV4O1xuICAgIGJhc2VJbmRleGVzLmZvckVhY2goYmFzZUluZGV4ID0+IHtcbiAgICAgIHJvd3NPZk1ldGEucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGJhc2VJbmRleCkpO1xuICAgIH0pO1xuICAgIHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShiYXNlSW5kZXhlc1swXSwgYmFzZUluZGV4ZXMubGVuZ3RoKTtcbiAgICB0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEodGFyZ2V0SW5kZXggLSAobW92aW5nRG93biA/IHJvd3NPZk1ldGEubGVuZ3RoIDogMCksIDAsIC4uLnJvd3NPZk1ldGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBjZWxscyBhZnRlciB0aGUgbW92ZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gcm93cyBBcnJheSBvZiB2aXN1YWwgcm93IGluZGV4ZXMgdG8gYmUgbW92ZWQuXG4gICAqIEBwYXJhbSB7dW5kZWZpbmVkfG51bWJlcn0gZHJvcEluZGV4IFZpc3VhbCByb3cgaW5kZXgsIGJlaW5nIGEgZHJvcCBpbmRleCBmb3IgdGhlIG1vdmVkIHJvd3MuIFBvaW50cyB0byB3aGVyZSB3ZVxuICAgKiAgIGFyZSBnb2luZyB0byBkcm9wIHRoZSBtb3ZlZCBlbGVtZW50cy4gVG8gY2hlY2sgdmlzdWFsaXphdGlvbiBvZiBkcm9wIGluZGV4IHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICAgKiAgIFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCkuXG4gICAqL1xuICBzZWxlY3RDZWxscyhyb3dzLCBkcm9wSW5kZXgpIHtcbiAgICBjb25zdCByb3dzTGVuID0gcm93cy5sZW5ndGg7XG4gICAgbGV0IHN0YXJ0Um93ID0gMDtcbiAgICBsZXQgZW5kUm93ID0gMDtcbiAgICBsZXQgc2VsZWN0aW9uID0gbnVsbDtcbiAgICBsZXQgbGFzdENvbEluZGV4ID0gbnVsbDtcbiAgICBpZiAodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKSB7XG4gICAgICBsZXQgcGh5c2ljYWxEcm9wSW5kZXggPSBudWxsO1xuICAgICAgaWYgKHJvd3Nbcm93c0xlbiAtIDFdIDwgZHJvcEluZGV4KSB7XG4gICAgICAgIHBoeXNpY2FsRHJvcEluZGV4ID0gdGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRyb3BJbmRleCAtIHJvd3NMZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGh5c2ljYWxEcm9wSW5kZXggPSB0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZHJvcEluZGV4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmVudE9iamVjdCA9IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KHBoeXNpY2FsRHJvcEluZGV4ID09PSBudWxsID8gdGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCkgLSAxIDogcGh5c2ljYWxEcm9wSW5kZXggLSAxKTtcbiAgICAgIGNvbnN0IHBhcmVudEluZGV4ID0gdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChwYXJlbnRPYmplY3QpO1xuICAgICAgc3RhcnRSb3cgPSB0aGlzLmRhdGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhwYXJlbnRJbmRleCk7XG4gICAgICBlbmRSb3cgPSBzdGFydFJvdztcbiAgICB9IGVsc2UgaWYgKHJvd3Nbcm93c0xlbiAtIDFdIDwgZHJvcEluZGV4KSB7XG4gICAgICBlbmRSb3cgPSBkcm9wSW5kZXggLSAxO1xuICAgICAgc3RhcnRSb3cgPSBlbmRSb3cgLSByb3dzTGVuICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRSb3cgPSBkcm9wSW5kZXg7XG4gICAgICBlbmRSb3cgPSBzdGFydFJvdyArIHJvd3NMZW4gLSAxO1xuICAgIH1cbiAgICBzZWxlY3Rpb24gPSB0aGlzLmhvdC5zZWxlY3Rpb247XG4gICAgbGFzdENvbEluZGV4ID0gdGhpcy5ob3QuY291bnRDb2xzKCkgLSAxO1xuICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHN0YXJ0Um93LCAwKSk7XG4gICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGVuZFJvdywgbGFzdENvbEluZGV4KSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBUT0RPOiBSZWltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9uIHdoaWNoIGlzIGluc2lkZSB0aGUgYE1hbnVhbFJvd01vdmVgIHBsdWdpbi5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBvcmRlciBvZiByb3dzIHdhcyBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBtb3ZlZFJvd3MgQXJyYXkgb2YgdmlzdWFsIHJvdyBpbmRleGVzIHRvIGJlIG1vdmVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZmluYWxJbmRleCBWaXN1YWwgcm93IGluZGV4LCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgcm93cy4gUG9pbnRzIHRvIHdoZXJlIHRoZSBlbGVtZW50c1xuICAgKiAgIHdpbGwgYmUgcGxhY2VkIGFmdGVyIHRoZSBtb3ZpbmcgYWN0aW9uLiBUbyBjaGVjayB0aGUgdmlzdWFsaXphdGlvbiBvZiB0aGUgZmluYWwgaW5kZXgsIHBsZWFzZSB0YWtlIGEgbG9vayBhdFxuICAgKiAgIFtkb2N1bWVudGF0aW9uXShAL2d1aWRlcy9yb3dzL3Jvdy1tb3Zpbmcvcm93LW1vdmluZy5tZCkuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNSb3dPcmRlckNoYW5nZWQobW92ZWRSb3dzLCBmaW5hbEluZGV4KSB7XG4gICAgcmV0dXJuIG1vdmVkUm93cy5zb21lKChyb3csIG5yT2ZNb3ZlZEVsZW1lbnQpID0+IHJvdyAtIG5yT2ZNb3ZlZEVsZW1lbnQgIT09IGZpbmFsSW5kZXgpO1xuICB9XG59XG5leHBvcnRzLmRlZmF1bHQgPSBSb3dNb3ZlQ29udHJvbGxlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfcGVyc2lzdGVudFN0YXRlID0gcmVxdWlyZShcIi4vcGVyc2lzdGVudFN0YXRlXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX3BlcnNpc3RlbnRTdGF0ZS5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfcGVyc2lzdGVudFN0YXRlLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuUGVyc2lzdGVudFN0YXRlID0gX3BlcnNpc3RlbnRTdGF0ZS5QZXJzaXN0ZW50U3RhdGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX3N0b3JhZ2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0b3JhZ2VcIikpO1xudmFyIF9wbHVnaW5Ib29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL3BsdWdpbkhvb2tzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbl9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCdwZXJzaXN0ZW50U3RhdGVTYXZlJyk7XG5fcGx1Z2luSG9va3MuZGVmYXVsdC5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigncGVyc2lzdGVudFN0YXRlTG9hZCcpO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoJ3BlcnNpc3RlbnRTdGF0ZVJlc2V0Jyk7XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ3BlcnNpc3RlbnRTdGF0ZSc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDA7XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIFBlcnNpc3RlbnRTdGF0ZVxuICogQGNsYXNzIFBlcnNpc3RlbnRTdGF0ZVxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogU2F2ZSB0aGUgc3RhdGUgb2YgY29sdW1uIHNvcnRpbmcsIGNvbHVtbiBwb3NpdGlvbnMgYW5kIGNvbHVtbiBzaXplcyBpbiBsb2NhbCBzdG9yYWdlIHRvIHByZXNlcnZlIHRhYmxlIHN0YXRlXG4gKiBiZXR3ZWVuIHBhZ2UgcmVsb2Fkcy5cbiAqXG4gKiBJbiBvcmRlciB0byBlbmFibGUgZGF0YSBzdG9yYWdlIG1lY2hhbmlzbSwge0BsaW5rIE9wdGlvbnMjcGVyc2lzdGVudFN0YXRlfSBvcHRpb24gbXVzdCBiZSBzZXQgdG8gYHRydWVgLlxuICpcbiAqIFdoZW4gcGVyc2lzdGVudFN0YXRlIGlzIGVuYWJsZWQgaXQgZXhwb3NlcyAzIGhvb2tzOlxuICogLSB7QGxpbmsgSG9va3MjcGVyc2lzdGVudFN0YXRlU2F2ZX0gLSBTYXZlcyB2YWx1ZSB1bmRlciBnaXZlbiBrZXkgaW4gYnJvd3NlciBsb2NhbCBzdG9yYWdlLlxuICogLSB7QGxpbmsgSG9va3MjcGVyc2lzdGVudFN0YXRlTG9hZH0gLSBMb2FkcyB2YWx1ZSwgc2F2ZWQgdW5kZXIgZ2l2ZW4ga2V5LCBmcm9tIGJyb3dzZXIgbG9jYWwgc3RvcmFnZS4gVGhlIGxvYWRlZFxuICogdmFsdWUgd2lsbCBiZSBzYXZlZCBpbiBgc2F2ZVRvLnZhbHVlYC5cbiAqIC0ge0BsaW5rIEhvb2tzI3BlcnNpc3RlbnRTdGF0ZVJlc2V0fSAtIENsZWFycyB0aGUgdmFsdWUgc2F2ZWQgdW5kZXIga2V5LiBJZiBubyBrZXkgaXMgZ2l2ZW4sIGFsbCB2YWx1ZXMgYXNzb2NpYXRlZFxuICogd2l0aCB0YWJsZSB3aWxsIGJlIGNsZWFyZWQuXG4gKlxuICogX19Ob3RlOl9fIFRoZSBtYWluIHJlYXNvbiBiZWhpbmQgdXNpbmcgYHBlcnNpc3RlbnRTdGF0ZWAgaG9va3MgcmF0aGVyIHRoYW4gcmVndWxhciBMb2NhbFN0b3JhZ2UgQVBJIGlzIHRoYXQgaXRcbiAqIGVuc3VyZXMgc2VwYXJhdGlvbiBvZiBkYXRhIHN0b3JlZCBieSBtdWx0aXBsZSBIYW5kc29udGFibGUgaW5zdGFuY2VzLiBJbiBvdGhlciB3b3JkcywgaWYgeW91IGhhdmUgdHdvIChvciBtb3JlKVxuICogaW5zdGFuY2VzIG9mIEhhbmRzb250YWJsZSBvbiBvbmUgcGFnZSwgZGF0YSBzYXZlZCBieSBvbmUgaW5zdGFuY2Ugd29uJ3QgYmUgYWNjZXNzaWJsZSBieSB0aGUgc2Vjb25kIGluc3RhbmNlLlxuICogVGhvc2UgdHdvIGluc3RhbmNlcyBjYW4gc3RvcmUgZGF0YSB1bmRlciB0aGUgc2FtZSBrZXkgYW5kIG5vIGRhdGEgd291bGQgYmUgb3ZlcndyaXR0ZW4uXG4gKlxuICogX19JbXBvcnRhbnQ6X18gSW4gb3JkZXIgZm9yIHRoZSBkYXRhIHNlcGFyYXRpb24gdG8gd29yayBwcm9wZXJseSwgbWFrZSBzdXJlIHRoYXQgZWFjaCBpbnN0YW5jZSBvZiBIYW5kc29udGFibGUgaGFzIGEgdW5pcXVlIGBpZGAuXG4gKlxuICovXG5jbGFzcyBQZXJzaXN0ZW50U3RhdGUgZXh0ZW5kcyBfYmFzZS5CYXNlUGx1Z2luIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgU3RvcmFnZX0uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtTdG9yYWdlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0b3JhZ2VcIiwgdm9pZCAwKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIFBlcnNpc3RlbnRTdGF0ZSNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHRoaXMuc3RvcmFnZSA9IG5ldyBfc3RvcmFnZS5kZWZhdWx0KHRoaXMuaG90LnJvb3RFbGVtZW50LmlkLCB0aGlzLmhvdC5yb290V2luZG93KTtcbiAgICB9XG4gICAgdGhpcy5hZGRIb29rKCdwZXJzaXN0ZW50U3RhdGVTYXZlJywgKGtleSwgdmFsdWUpID0+IHRoaXMuc2F2ZVZhbHVlKGtleSwgdmFsdWUpKTtcbiAgICB0aGlzLmFkZEhvb2soJ3BlcnNpc3RlbnRTdGF0ZUxvYWQnLCAoa2V5LCBzYXZlVG8pID0+IHRoaXMubG9hZFZhbHVlKGtleSwgc2F2ZVRvKSk7XG4gICAgdGhpcy5hZGRIb29rKCdwZXJzaXN0ZW50U3RhdGVSZXNldCcsICgpID0+IHRoaXMucmVzZXRWYWx1ZSgpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLnN0b3JhZ2UgPSB1bmRlZmluZWQ7XG4gICAgc3VwZXIuZGlzYWJsZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBsdWdpbidzIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCB3aGVuIFtgdXBkYXRlU2V0dGluZ3MoKWBdKEAvYXBpL2NvcmUubWQjdXBkYXRlc2V0dGluZ3MpIGlzIGludm9rZWQgd2l0aCBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6XG4gICAqICAtIFtgcGVyc2lzdGVudFN0YXRlYF0oQC9hcGkvb3B0aW9ucy5tZCNwZXJzaXN0ZW50c3RhdGUpXG4gICAqL1xuICB1cGRhdGVQbHVnaW4oKSB7XG4gICAgdGhpcy5kaXNhYmxlUGx1Z2luKCk7XG4gICAgdGhpcy5lbmFibGVQbHVnaW4oKTtcbiAgICBzdXBlci51cGRhdGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgdmFsdWUgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFN0b3JhZ2Uga2V5LlxuICAgKiBAcGFyYW0ge29iamVjdH0gc2F2ZVRvIFNhdmVkIHZhbHVlIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICovXG4gIGxvYWRWYWx1ZShrZXksIHNhdmVUbykge1xuICAgIHNhdmVUby52YWx1ZSA9IHRoaXMuc3RvcmFnZS5sb2FkVmFsdWUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgZGF0YSB0byBsb2NhbCBzdG9yYWdlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IFN0b3JhZ2Uga2V5LlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZSBWYWx1ZSB0byBzYXZlLlxuICAgKi9cbiAgc2F2ZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLnN0b3JhZ2Uuc2F2ZVZhbHVlKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgZGF0YSBvciBhbGwgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgW29wdGlvbmFsXSBTdG9yYWdlIGtleS5cbiAgICovXG4gIHJlc2V0VmFsdWUoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yYWdlLnJlc2V0KGtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5QZXJzaXN0ZW50U3RhdGUgPSBQZXJzaXN0ZW50U3RhdGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGNsYXNzIFN0b3JhZ2VcbiAqL1xuY2xhc3MgU3RvcmFnZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgY29uc3RydWN0b3IocHJlZml4KSB7XG4gICAgbGV0IHJvb3RXaW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHdpbmRvdztcbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gcHJvcGVyIHdpbmRvdy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtXaW5kb3d9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm9vdFdpbmRvd1wiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIFByZWZpeCBmb3Iga2V5IChpZCBlbGVtZW50KS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicHJlZml4XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogU2F2ZWQga2V5cy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzYXZlZEtleXNcIiwgW10pO1xuICAgIHRoaXMucm9vdFdpbmRvdyA9IHJvb3RXaW5kb3c7XG4gICAgdGhpcy5wcmVmaXggPSBwcmVmaXg7XG4gICAgdGhpcy5sb2FkU2F2ZWRLZXlzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBkYXRhIHRvIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgc3RyaW5nLlxuICAgKiBAcGFyYW0ge01peGVkfSB2YWx1ZSBWYWx1ZSB0byBzYXZlLlxuICAgKi9cbiAgc2F2ZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICB0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7a2V5fWAsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgaWYgKHRoaXMuc2F2ZWRLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuc2F2ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgIHRoaXMuc2F2ZVNhdmVkS2V5cygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGRhdGEgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgS2V5IHN0cmluZy5cbiAgICogQHBhcmFtIHtvYmplY3R9IGRlZmF1bHRWYWx1ZSBPYmplY3QgY29udGFpbmluZyB0aGUgbG9hZGVkIGRhdGEuXG4gICAqXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgbG9hZFZhbHVlKGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgaXRlbUtleSA9IHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDoga2V5O1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke2l0ZW1LZXl9YCk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsID8gdW5kZWZpbmVkIDogSlNPTi5wYXJzZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgZ2l2ZW4gZGF0YSBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBLZXkgc3RyaW5nLlxuICAgKi9cbiAgcmVzZXQoa2V5KSB7XG4gICAgdGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke2tleX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgZGF0YSBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICovXG4gIHJlc2V0QWxsKCkge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnNhdmVkS2V5cywgKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgdGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2luZGV4XX1gKTtcbiAgICB9KTtcbiAgICB0aGlzLmNsZWFyU2F2ZWRLZXlzKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbmQgc2F2ZSBhbGwga2V5cyBmcm9tIGxvY2FsU3RvcmFnZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGxvYWRTYXZlZEtleXMoKSB7XG4gICAgY29uc3Qga2V5c0pTT04gPSB0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCk7XG4gICAgY29uc3Qga2V5cyA9IHR5cGVvZiBrZXlzSlNPTiA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGtleXNKU09OKSA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhdmVkS2V5cyA9IGtleXMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBzYXZlZCBrZXkgaW4gbG9jYWxTdG9yYWdlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2F2ZVNhdmVkS2V5cygpIHtcbiAgICB0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCwgSlNPTi5zdHJpbmdpZnkodGhpcy5zYXZlZEtleXMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBzYXZlZCBrZXkgZnJvbSBsb2NhbFN0b3JhZ2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjbGVhclNhdmVkS2V5cygpIHtcbiAgICB0aGlzLnNhdmVkS2V5cy5sZW5ndGggPSAwO1xuICAgIHRoaXMuc2F2ZVNhdmVkS2V5cygpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBTdG9yYWdlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRQbHVnaW4gPSBnZXRQbHVnaW47XG5leHBvcnRzLmdldFBsdWdpbnNOYW1lcyA9IGdldFBsdWdpbnNOYW1lcztcbmV4cG9ydHMuaGFzUGx1Z2luID0gaGFzUGx1Z2luO1xuZXhwb3J0cy5yZWdpc3RlclBsdWdpbiA9IHJlZ2lzdGVyUGx1Z2luO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvc3RyaW5nXCIpO1xudmFyIF9wcmlvcml0eU1hcCA9IHJlcXVpcmUoXCIuLi91dGlscy9kYXRhU3RydWN0dXJlcy9wcmlvcml0eU1hcFwiKTtcbnZhciBfdW5pcXVlTWFwID0gcmVxdWlyZShcIi4uL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL3VuaXF1ZU1hcFwiKTtcbnZhciBfdW5pcXVlU2V0ID0gcmVxdWlyZShcIi4uL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL3VuaXF1ZVNldFwiKTtcbi8qKlxuICogVXRpbGl0eSB0byByZWdpc3RlciBwbHVnaW5zIGFuZCBjb21tb24gbmFtZXNwYWNlIGZvciBrZWVwaW5nIHRoZSByZWZlcmVuY2UgdG8gYWxsIHBsdWdpbnMgY2xhc3Nlcy5cbiAqL1xuXG5jb25zdCBFUlJPUl9QTFVHSU5fUkVHSVNURVJFRCA9IHBsdWdpbk5hbWUgPT4gYFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBcIiR7cGx1Z2luTmFtZX1cIiBwbHVnaW4uYDtcbmNvbnN0IEVSUk9SX1BSSU9SSVRZX1JFR0lTVEVSRUQgPSBwcmlvcml0eSA9PiBgVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSBcIiR7cHJpb3JpdHl9XCIuYDtcbmNvbnN0IEVSUk9SX1BSSU9SSVRZX05BTiA9IHByaW9yaXR5ID0+IGBUaGUgcHJpb3JpdHkgXCIke3ByaW9yaXR5fVwiIGlzIG5vdCBhIG51bWJlci5gO1xuXG4vKipcbiAqIFN0b3JlcyBwbHVnaW5zJyBuYW1lcycgcXVldWUgd2l0aCB0aGVpciBwcmlvcml0aWVzLlxuICovXG5jb25zdCBwcmlvcml0eVBsdWdpbnNRdWV1ZSA9ICgwLCBfcHJpb3JpdHlNYXAuY3JlYXRlUHJpb3JpdHlNYXApKHtcbiAgZXJyb3JQcmlvcml0eUV4aXN0czogRVJST1JfUFJJT1JJVFlfUkVHSVNURVJFRCxcbiAgZXJyb3JQcmlvcml0eU5hTjogRVJST1JfUFJJT1JJVFlfTkFOXG59KTtcbi8qKlxuICogU3RvcmVzIHBsdWdpbnMgbmFtZXMnIHF1ZXVlIGJ5IHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqL1xuY29uc3QgdW5pcXVlUGx1Z2luc1F1ZXVlID0gKDAsIF91bmlxdWVTZXQuY3JlYXRlVW5pcXVlU2V0KSh7XG4gIGVycm9ySXRlbUV4aXN0czogRVJST1JfUExVR0lOX1JFR0lTVEVSRURcbn0pO1xuLyoqXG4gKiBTdG9yZXMgcGx1Z2lucyByZWZlcmVuY2VzIGJldHdlZW4gdGhlaXIgbmFtZSBhbmQgY2xhc3MuXG4gKi9cbmNvbnN0IHVuaXF1ZVBsdWdpbnNMaXN0ID0gKDAsIF91bmlxdWVNYXAuY3JlYXRlVW5pcXVlTWFwKSh7XG4gIGVycm9ySWRFeGlzdHM6IEVSUk9SX1BMVUdJTl9SRUdJU1RFUkVEXG59KTtcblxuLyoqXG4gKiBHZXRzIHJlZ2lzdGVyZWQgcGx1Z2lucycgbmFtZXMgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjpcbiAqIDEpIFBsdWdpbnMgcmVnaXN0ZXJlZCB3aXRoIGEgZGVmaW5lZCBwcmlvcml0eSBhdHRyaWJ1dGUsIGluIHRoZSBhc2NlbmRpbmcgb3JkZXIgb2YgcHJpb3JpdHkuXG4gKiAyKSBQbHVnaW5zIHJlZ2lzdGVyZWQgd2l0aG91dCBhIGRlZmluZWQgcHJpb3JpdHkgYXR0cmlidXRlLCBpbiB0aGUgcmVnaXN0cmF0aW9uIG9yZGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0UGx1Z2luc05hbWVzKCkge1xuICByZXR1cm4gWy4uLnByaW9yaXR5UGx1Z2luc1F1ZXVlLmdldEl0ZW1zKCksIC4uLnVuaXF1ZVBsdWdpbnNRdWV1ZS5nZXRJdGVtcygpXTtcbn1cblxuLyoqXG4gKiBHZXRzIHJlZ2lzdGVyZWQgcGx1Z2luJ3MgY2xhc3MgYmFzZWQgb24gdGhlIGdpdmVuIG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBsdWdpbk5hbWUgUGx1Z2luJ3MgbmFtZS5cbiAqIEByZXR1cm5zIHtCYXNlUGx1Z2lufVxuICovXG5mdW5jdGlvbiBnZXRQbHVnaW4ocGx1Z2luTmFtZSkge1xuICBjb25zdCB1bmlmaWVkUGx1Z2luTmFtZSA9ICgwLCBfc3RyaW5nLnRvVXBwZXJDYXNlRmlyc3QpKHBsdWdpbk5hbWUpO1xuICByZXR1cm4gdW5pcXVlUGx1Z2luc0xpc3QuZ2V0SXRlbSh1bmlmaWVkUGx1Z2luTmFtZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gdW5kZXIgdGhlIG5hbWUgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwbHVnaW5OYW1lIFBsdWdpbidzIG5hbWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzUGx1Z2luKHBsdWdpbk5hbWUpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5uZWVkZWQtdGVybmFyeSAqL1xuICByZXR1cm4gZ2V0UGx1Z2luKHBsdWdpbk5hbWUpID8gdHJ1ZSA6IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW4gdW5kZXIgdGhlIGdpdmVuIG5hbWUgb25seSBvbmNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBwbHVnaW5OYW1lIFRoZSBwbHVnaW4gbmFtZSBvciBwbHVnaW4gY2xhc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGx1Z2luQ2xhc3NdIFRoZSBwbHVnaW4gY2xhc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSBUaGUgcGx1Z2luIHByaW9yaXR5LlxuICovXG5mdW5jdGlvbiByZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lLCBwbHVnaW5DbGFzcywgcHJpb3JpdHkpIHtcbiAgW3BsdWdpbk5hbWUsIHBsdWdpbkNsYXNzLCBwcmlvcml0eV0gPSB1bmlmeVBsdWdpbkFyZ3VtZW50cyhwbHVnaW5OYW1lLCBwbHVnaW5DbGFzcywgcHJpb3JpdHkpO1xuICBpZiAoZ2V0UGx1Z2luKHBsdWdpbk5hbWUpID09PSB1bmRlZmluZWQpIHtcbiAgICBfcmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSwgcGx1Z2luQ2xhc3MsIHByaW9yaXR5KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW4gdW5kZXIgdGhlIGdpdmVuIG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IHBsdWdpbk5hbWUgVGhlIHBsdWdpbiBuYW1lIG9yIHBsdWdpbiBjbGFzcy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwbHVnaW5DbGFzc10gVGhlIHBsdWdpbiBjbGFzcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJpb3JpdHldIFRoZSBwbHVnaW4gcHJpb3JpdHkuXG4gKi9cbmZ1bmN0aW9uIF9yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lLCBwbHVnaW5DbGFzcywgcHJpb3JpdHkpIHtcbiAgY29uc3QgdW5pZmllZFBsdWdpbk5hbWUgPSAoMCwgX3N0cmluZy50b1VwcGVyQ2FzZUZpcnN0KShwbHVnaW5OYW1lKTtcbiAgaWYgKHVuaXF1ZVBsdWdpbnNMaXN0Lmhhc0l0ZW0odW5pZmllZFBsdWdpbk5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX1BMVUdJTl9SRUdJU1RFUkVEKHVuaWZpZWRQbHVnaW5OYW1lKSk7XG4gIH1cbiAgaWYgKHByaW9yaXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICB1bmlxdWVQbHVnaW5zUXVldWUuYWRkSXRlbSh1bmlmaWVkUGx1Z2luTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJpb3JpdHlQbHVnaW5zUXVldWUuYWRkSXRlbShwcmlvcml0eSwgdW5pZmllZFBsdWdpbk5hbWUpO1xuICB9XG4gIHVuaXF1ZVBsdWdpbnNMaXN0LmFkZEl0ZW0odW5pZmllZFBsdWdpbk5hbWUsIHBsdWdpbkNsYXNzKTtcbn1cblxuLyoqXG4gKiBVbmlmaWVzIGFyZ3VtZW50cyB0byByZWdpc3RlciB0aGUgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfEZ1bmN0aW9ufSBwbHVnaW5OYW1lIFRoZSBwbHVnaW4gbmFtZSBvciBwbHVnaW4gY2xhc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcGx1Z2luQ2xhc3NdIFRoZSBwbHVnaW4gY2xhc3MuXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByaW9yaXR5XSBUaGUgcGx1Z2luIHByaW9yaXR5LlxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiB1bmlmeVBsdWdpbkFyZ3VtZW50cyhwbHVnaW5OYW1lLCBwbHVnaW5DbGFzcywgcHJpb3JpdHkpIHtcbiAgaWYgKHR5cGVvZiBwbHVnaW5OYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcGx1Z2luQ2xhc3MgPSBwbHVnaW5OYW1lO1xuICAgIHBsdWdpbk5hbWUgPSBwbHVnaW5DbGFzcy5QTFVHSU5fS0VZO1xuICAgIHByaW9yaXR5ID0gcGx1Z2luQ2xhc3MuUExVR0lOX1BSSU9SSVRZO1xuICB9XG4gIHJldHVybiBbcGx1Z2luTmFtZSwgcGx1Z2luQ2xhc3MsIHByaW9yaXR5XTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfc2VhcmNoID0gcmVxdWlyZShcIi4vc2VhcmNoXCIpO1xuZXhwb3J0cy5QTFVHSU5fS0VZID0gX3NlYXJjaC5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfc2VhcmNoLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuU2VhcmNoID0gX3NlYXJjaC5TZWFyY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9iYXNlID0gcmVxdWlyZShcIi4uL2Jhc2VcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG5jb25zdCBQTFVHSU5fS0VZID0gZXhwb3J0cy5QTFVHSU5fS0VZID0gJ3NlYXJjaCc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDE5MDtcbmNvbnN0IERFRkFVTFRfU0VBUkNIX1JFU1VMVF9DTEFTUyA9ICdodFNlYXJjaFJlc3VsdCc7XG5jb25zdCBERUZBVUxUX0NBTExCQUNLID0gZnVuY3Rpb24gKGluc3RhbmNlLCByb3csIGNvbCwgZGF0YSwgdGVzdFJlc3VsdCkge1xuICBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3csIGNvbCkuaXNTZWFyY2hSZXN1bHQgPSB0ZXN0UmVzdWx0O1xufTtcbmNvbnN0IERFRkFVTFRfUVVFUllfTUVUSE9EID0gZnVuY3Rpb24gKHF1ZXJ5LCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgaWYgKCgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKHF1ZXJ5KSB8fCBxdWVyeSA9PT0gbnVsbCB8fCAhcXVlcnkudG9Mb2NhbGVMb3dlckNhc2UgfHwgcXVlcnkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICgoMCwgX21peGVkLmlzVW5kZWZpbmVkKSh2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb2NhbGVMb3dlckNhc2UoY2VsbFByb3BlcnRpZXMubG9jYWxlKS5pbmRleE9mKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKGNlbGxQcm9wZXJ0aWVzLmxvY2FsZSkpICE9PSAtMTtcbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBAcGx1Z2luIFNlYXJjaFxuICogQGNsYXNzIFNlYXJjaFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIHNlYXJjaCBwbHVnaW4gcHJvdmlkZXMgYW4gZWFzeSBpbnRlcmZhY2UgdG8gc2VhcmNoIGRhdGEgYWNyb3NzIEhhbmRzb250YWJsZS5cbiAqXG4gKiBJbiBvcmRlciB0byBlbmFibGUgc2VhcmNoIG1lY2hhbmlzbSwge0BsaW5rIE9wdGlvbnMjc2VhcmNofSBvcHRpb24gbXVzdCBiZSBzZXQgdG8gYHRydWVgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBqc1xuICogLy8gYXMgYm9vbGVhblxuICogc2VhcmNoOiB0cnVlXG4gKiAvLyBhcyBhIG9iamVjdCB3aXRoIG9uZSBvciBtb3JlIG9wdGlvbnNcbiAqIHNlYXJjaDoge1xuICogICBjYWxsYmFjazogbXlOZXdDYWxsYmFja0Z1bmN0aW9uLFxuICogICBxdWVyeU1ldGhvZDogbXlOZXdRdWVyeU1ldGhvZCxcbiAqICAgc2VhcmNoUmVzdWx0Q2xhc3M6ICdjdXN0b21DbGFzcydcbiAqIH1cbiAqXG4gKiAvLyBBY2Nlc3MgdG8gc2VhcmNoIHBsdWdpbiBpbnN0YW5jZTpcbiAqIGNvbnN0IHNlYXJjaFBsdWdpbiA9IGhvdC5nZXRQbHVnaW4oJ3NlYXJjaCcpO1xuICpcbiAqIC8vIFNldCBjYWxsYmFjayBwcm9ncmFtbWF0aWNhbGx5OlxuICogc2VhcmNoUGx1Z2luLnNldENhbGxiYWNrKG15TmV3Q2FsbGJhY2tGdW5jdGlvbik7XG4gKiAvLyBTZXQgcXVlcnkgbWV0aG9kIHByb2dyYW1tYXRpY2FsbHk6XG4gKiBzZWFyY2hQbHVnaW4uc2V0UXVlcnlNZXRob2QobXlOZXdRdWVyeU1ldGhvZCk7XG4gKiAvLyBTZXQgc2VhcmNoIHJlc3VsdCBjZWxscyBjbGFzcyBwcm9ncmFtbWF0aWNhbGx5OlxuICogc2VhcmNoUGx1Z2luLnNldFNlYXJjaFJlc3VsdENsYXNzKGN1c3RvbUNsYXNzKTtcbiAqIGBgYFxuICovXG52YXIgX1NlYXJjaF9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgU2VhcmNoIGV4dGVuZHMgX2Jhc2UuQmFzZVBsdWdpbiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgLyoqXG4gICAgICogVGhlIGBiZWZvcmVSZW5kZXJlcmAgaG9vayBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFRoZSByZW5kZXJlZCBgVERgIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IHByb3AgQ29sdW1uIHByb3BlcnR5IG5hbWUgb3IgYSBjb2x1bW4gaW5kZXgsIGlmIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2YgYXJyYXlzLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZSBWYWx1ZSBvZiB0aGUgcmVuZGVyZWQgY2VsbC5cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNlbGwncyBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfU2VhcmNoX2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiBjYWxsZWQgZHVyaW5nIHF1ZXJ5aW5nIGZvciBlYWNoIGNlbGwgZnJvbSB0aGUge0BsaW5rIERhdGFNYXB9LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2FsbGJhY2tcIiwgREVGQVVMVF9DQUxMQkFDSyk7XG4gICAgLyoqXG4gICAgICogUXVlcnkgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBxdWVyeSBtYXRjaGVzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gYSBjZWxsLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicXVlcnlNZXRob2RcIiwgREVGQVVMVF9RVUVSWV9NRVRIT0QpO1xuICAgIC8qKlxuICAgICAqIENsYXNzIG5hbWUgYWRkZWQgdG8gZWFjaCBjZWxsIHRoYXQgYmVsb25ncyB0byB0aGUgc2VhcmNoZWQgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2VhcmNoUmVzdWx0Q2xhc3NcIiwgREVGQVVMVF9TRUFSQ0hfUkVTVUxUX0NMQVNTKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCBpbiB0aGUgaGFuZHNvbnRhYmxlIHNldHRpbmdzLiBUaGlzIG1ldGhvZCBpcyBleGVjdXRlZCBpbiB7QGxpbmsgSG9va3MjYmVmb3JlSW5pdH1cbiAgICogaG9vayBhbmQgaWYgaXQgcmV0dXJucyBgdHJ1ZWAgdGhlbiB0aGUge0BsaW5rIEF1dG9Sb3dTaXplI2VuYWJsZVBsdWdpbn0gbWV0aG9kIGlzIGNhbGxlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWFyY2hTZXR0aW5ncyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgdGhpcy51cGRhdGVQbHVnaW5TZXR0aW5ncyhzZWFyY2hTZXR0aW5ncyk7XG4gICAgdGhpcy5hZGRIb29rKCdiZWZvcmVSZW5kZXJlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9TZWFyY2hfYnJhbmQsIF90aGlzLCBfb25CZWZvcmVSZW5kZXJlcikuY2FsbChfdGhpcywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgc3VwZXIuZW5hYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZXMgdGhlIHBsdWdpbiBmdW5jdGlvbmFsaXR5IGZvciB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAgICovXG4gIGRpc2FibGVQbHVnaW4oKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgY29uc3QgYmVmb3JlUmVuZGVyZXJDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG4gICAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX1NlYXJjaF9icmFuZCwgX3RoaXMyLCBfb25CZWZvcmVSZW5kZXJlcikuY2FsbChfdGhpczIsIC4uLmFyZ3MpO1xuICAgIH07XG4gICAgdGhpcy5ob3QuYWRkSG9vaygnYmVmb3JlUmVuZGVyZXInLCBiZWZvcmVSZW5kZXJlckNhbGxiYWNrKTtcbiAgICB0aGlzLmhvdC5hZGRIb29rT25jZSgnYWZ0ZXJWaWV3UmVuZGVyJywgKCkgPT4ge1xuICAgICAgdGhpcy5ob3QucmVtb3ZlSG9vaygnYmVmb3JlUmVuZGVyZXInLCBiZWZvcmVSZW5kZXJlckNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGx1Z2luJ3Mgc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGV4ZWN1dGVkIHdoZW4gW2B1cGRhdGVTZXR0aW5ncygpYF0oQC9hcGkvY29yZS5tZCN1cGRhdGVzZXR0aW5ncykgaXMgaW52b2tlZCB3aXRoIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uczpcbiAgICogIC0gW2BzZWFyY2hgXShAL2FwaS9vcHRpb25zLm1kI3NlYXJjaClcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICB0aGlzLmRpc2FibGVQbHVnaW4oKTtcbiAgICB0aGlzLmVuYWJsZVBsdWdpbigpO1xuICAgIHN1cGVyLnVwZGF0ZVBsdWdpbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIHRoZSBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5U3RyIFZhbHVlIHRvIGJlIHNlYXJjaC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSBDYWxsYmFjayBmdW5jdGlvbiBwZXJmb3JtZWQgb24gY2VsbHMgd2l0aCB2YWx1ZXMgd2hpY2ggbWF0Y2hlcyB0byB0aGUgc2VhcmNoZWQgcXVlcnkuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtxdWVyeU1ldGhvZF0gUXVlcnkgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBxdWVyeSBtYXRjaGVzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gYSBjZWxsLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119IFJldHVybiBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggYHJvd2AsIGBjb2xgLCBgZGF0YWAgcHJvcGVydGllcyBvciBlbXB0eSBhcnJheS5cbiAgICovXG4gIHF1ZXJ5KHF1ZXJ5U3RyKSB7XG4gICAgbGV0IGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0aGlzLmdldENhbGxiYWNrKCk7XG4gICAgbGV0IHF1ZXJ5TWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0aGlzLmdldFF1ZXJ5TWV0aG9kKCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBjb2xDb3VudCA9IHRoaXMuaG90LmNvdW50Q29scygpO1xuICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gW107XG4gICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmhvdDtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKDAsIHJvd0NvdW50IC0gMSwgcm93SW5kZXggPT4ge1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKSgwLCBjb2xDb3VudCAtIDEsIGNvbEluZGV4ID0+IHtcbiAgICAgICAgY29uc3QgY2VsbERhdGEgPSB0aGlzLmhvdC5nZXREYXRhQXRDZWxsKHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IGNlbGxQcm9wZXJ0aWVzID0gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEocm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgY29uc3QgY2VsbENhbGxiYWNrID0gY2VsbFByb3BlcnRpZXMuc2VhcmNoLmNhbGxiYWNrIHx8IGNhbGxiYWNrO1xuICAgICAgICBjb25zdCBjZWxsUXVlcnlNZXRob2QgPSBjZWxsUHJvcGVydGllcy5zZWFyY2gucXVlcnlNZXRob2QgfHwgcXVlcnlNZXRob2Q7XG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBjZWxsUXVlcnlNZXRob2QocXVlcnlTdHIsIGNlbGxEYXRhLCBjZWxsUHJvcGVydGllcyk7XG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgY29uc3Qgc2luZ2xlUmVzdWx0ID0ge1xuICAgICAgICAgICAgcm93OiByb3dJbmRleCxcbiAgICAgICAgICAgIGNvbDogY29sSW5kZXgsXG4gICAgICAgICAgICBkYXRhOiBjZWxsRGF0YVxuICAgICAgICAgIH07XG4gICAgICAgICAgcXVlcnlSZXN1bHQucHVzaChzaW5nbGVSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsQ2FsbGJhY2spIHtcbiAgICAgICAgICBjZWxsQ2FsbGJhY2soaW5zdGFuY2UsIHJvd0luZGV4LCBjb2xJbmRleCwgY2VsbERhdGEsIHRlc3RSZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcXVlcnlSZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJuIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAgICovXG4gIGdldENhbGxiYWNrKCkge1xuICAgIHJldHVybiB0aGlzLmNhbGxiYWNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBxdWVyeWluZyBmb3IgZWFjaCBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXdDYWxsYmFjayBBIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKi9cbiAgc2V0Q2FsbGJhY2sobmV3Q2FsbGJhY2spIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gbmV3Q2FsbGJhY2s7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcXVlcnkgbWV0aG9kIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybiB0aGUgcXVlcnkgbWV0aG9kLlxuICAgKi9cbiAgZ2V0UXVlcnlNZXRob2QoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlNZXRob2Q7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcXVlcnkgbWV0aG9kIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgYSBxdWVyeSBtYXRjaGVzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gYSBjZWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXdRdWVyeU1ldGhvZCBBIGZ1bmN0aW9uIHdpdGggc3BlY2lmaWMgbWF0Y2ggbG9naWMuXG4gICAqL1xuICBzZXRRdWVyeU1ldGhvZChuZXdRdWVyeU1ldGhvZCkge1xuICAgIHRoaXMucXVlcnlNZXRob2QgPSBuZXdRdWVyeU1ldGhvZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHNlYXJjaCByZXN1bHQgY2VsbHMgY2xhc3MgbmFtZS5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gUmV0dXJuIHRoZSBjZWxsIGNsYXNzIG5hbWUuXG4gICAqL1xuICBnZXRTZWFyY2hSZXN1bHRDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hSZXN1bHRDbGFzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHNlYXJjaCByZXN1bHQgY2VsbHMgY2xhc3MgbmFtZS4gVGhpcyBjbGFzcyBuYW1lIHdpbGwgYmUgYWRkZWQgdG8gZWFjaCBjZWxsIHRoYXQgYmVsb25ncyB0byB0aGUgc2VhcmNoZWQgcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuZXdFbGVtZW50Q2xhc3MgQ1NTIGNsYXNzIG5hbWUuXG4gICAqL1xuICBzZXRTZWFyY2hSZXN1bHRDbGFzcyhuZXdFbGVtZW50Q2xhc3MpIHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdENsYXNzID0gbmV3RWxlbWVudENsYXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHNldHRpbmdzIG9mIHRoZSBwbHVnaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzZWFyY2hTZXR0aW5ncyBUaGUgcGx1Z2luIHNldHRpbmdzLCB0YWtlbiBmcm9tIEhhbmRzb250YWJsZSBjb25maWd1cmF0aW9uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdXBkYXRlUGx1Z2luU2V0dGluZ3Moc2VhcmNoU2V0dGluZ3MpIHtcbiAgICBpZiAoKDAsIF9vYmplY3QuaXNPYmplY3QpKHNlYXJjaFNldHRpbmdzKSkge1xuICAgICAgaWYgKHNlYXJjaFNldHRpbmdzLnNlYXJjaFJlc3VsdENsYXNzKSB7XG4gICAgICAgIHRoaXMuc2V0U2VhcmNoUmVzdWx0Q2xhc3Moc2VhcmNoU2V0dGluZ3Muc2VhcmNoUmVzdWx0Q2xhc3MpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFNldHRpbmdzLnF1ZXJ5TWV0aG9kKSB7XG4gICAgICAgIHRoaXMuc2V0UXVlcnlNZXRob2Qoc2VhcmNoU2V0dGluZ3MucXVlcnlNZXRob2QpO1xuICAgICAgfVxuICAgICAgaWYgKHNlYXJjaFNldHRpbmdzLmNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc2V0Q2FsbGJhY2soc2VhcmNoU2V0dGluZ3MuY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIHBsdWdpbiBpbnN0YW5jZS5cbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICB9XG59XG5leHBvcnRzLlNlYXJjaCA9IFNlYXJjaDtcbmZ1bmN0aW9uIF9vbkJlZm9yZVJlbmRlcmVyKFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIC8vIFRPRE86ICM0OTcyXG4gIGNvbnN0IGNsYXNzTmFtZSA9IGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSB8fCBbXTtcbiAgbGV0IGNsYXNzQXJyYXkgPSBbXTtcbiAgaWYgKHR5cGVvZiBjbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgY2xhc3NBcnJheSA9IGNsYXNzTmFtZS5zcGxpdCgnICcpO1xuICB9IGVsc2Uge1xuICAgIGNsYXNzQXJyYXkucHVzaCguLi5jbGFzc05hbWUpO1xuICB9XG4gIGlmICh0aGlzLmlzRW5hYmxlZCgpICYmIGNlbGxQcm9wZXJ0aWVzLmlzU2VhcmNoUmVzdWx0KSB7XG4gICAgaWYgKCFjbGFzc0FycmF5LmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpKSB7XG4gICAgICBjbGFzc0FycmF5LnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xhc3NBcnJheS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSkge1xuICAgIGNsYXNzQXJyYXkuc3BsaWNlKGNsYXNzQXJyYXkuaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwgMSk7XG4gIH1cbiAgY2VsbFByb3BlcnRpZXMuY2xhc3NOYW1lID0gY2xhc3NBcnJheS5qb2luKCcgJyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3RvdWNoU2Nyb2xsID0gcmVxdWlyZShcIi4vdG91Y2hTY3JvbGxcIik7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfdG91Y2hTY3JvbGwuUExVR0lOX0tFWTtcbmV4cG9ydHMuUExVR0lOX1BSSU9SSVRZID0gX3RvdWNoU2Nyb2xsLlBMVUdJTl9QUklPUklUWTtcbmV4cG9ydHMuVG91Y2hTY3JvbGwgPSBfdG91Y2hTY3JvbGwuVG91Y2hTY3JvbGw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfZmVhdHVyZSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2ZlYXR1cmVcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbmNvbnN0IFBMVUdJTl9LRVkgPSBleHBvcnRzLlBMVUdJTl9LRVkgPSAndG91Y2hTY3JvbGwnO1xuY29uc3QgUExVR0lOX1BSSU9SSVRZID0gZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSAyMDA7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwbHVnaW4gVG91Y2hTY3JvbGxcbiAqIEBjbGFzcyBUb3VjaFNjcm9sbFxuICovXG52YXIgX1RvdWNoU2Nyb2xsX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBUb3VjaFNjcm9sbCBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEFmdGVyIHZpZXcgcmVuZGVyIGxpc3RlbmVyLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfVG91Y2hTY3JvbGxfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2Ygc2Nyb2xsYmFycyB0byB1cGRhdGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2Nyb2xsYmFyc1wiLCBbXSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiBvdmVybGF5cyB0byB1cGRhdGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2xvbmVzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgaWYgY29sbGVjdGlvbiBvZiBvdmVybGF5cyBzaG91bGQgYmUgcmVmaWxsZWQgb24gZXZlcnkgdGFibGUgcmVuZGVyLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJsb2NrZWRDb2xsZWN0aW9uXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZXMgaWYgd2Fsa29udGFibGUgc2hvdWxkIGZyZWV6ZSBvdmVybGF5cyB3aGlsZSBzY3JvbGxpbmcuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZyZWV6ZU92ZXJsYXlzXCIsIGZhbHNlKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9LRVk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKSB7XG4gICAgcmV0dXJuIFBMVUdJTl9QUklPUklUWTtcbiAgfVxuICBzdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgcGx1Z2luIGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAoMCwgX2ZlYXR1cmUuaXNUb3VjaFN1cHBvcnRlZCkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIHBsdWdpbi5cbiAgICovXG4gIGVuYWJsZVBsdWdpbigpIHtcbiAgICBpZiAodGhpcy5lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWRkSG9vaygnYWZ0ZXJWaWV3UmVuZGVyJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1RvdWNoU2Nyb2xsX2JyYW5kLCB0aGlzLCBfb25BZnRlclZpZXdSZW5kZXIpLmNhbGwodGhpcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudHMoKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4gdG8gdXNlIHRoZSBsYXRlc3Qgb3B0aW9ucyB5b3UgaGF2ZSBzcGVjaWZpZWQuXG4gICAqL1xuICB1cGRhdGVQbHVnaW4oKSB7XG4gICAgdGhpcy5sb2NrZWRDb2xsZWN0aW9uID0gZmFsc2U7XG4gICAgc3VwZXIudXBkYXRlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBwbHVnaW4gZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICBzdXBlci5kaXNhYmxlUGx1Z2luKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYWxsIG5lY2Vzc2FyeSBldmVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWdpc3RlckV2ZW50cygpIHtcbiAgICB0aGlzLmFkZEhvb2soJ2JlZm9yZVRvdWNoU2Nyb2xsJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1RvdWNoU2Nyb2xsX2JyYW5kLCB0aGlzLCBfb25CZWZvcmVUb3VjaFNjcm9sbCkuY2FsbCh0aGlzKSk7XG4gICAgdGhpcy5hZGRIb29rKCdhZnRlck1vbWVudHVtU2Nyb2xsJywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1RvdWNoU2Nyb2xsX2JyYW5kLCB0aGlzLCBfb25BZnRlck1vbWVudHVtU2Nyb2xsKS5jYWxsKHRoaXMpKTtcbiAgfVxufVxuZXhwb3J0cy5Ub3VjaFNjcm9sbCA9IFRvdWNoU2Nyb2xsO1xuZnVuY3Rpb24gX29uQWZ0ZXJWaWV3UmVuZGVyKCkge1xuICBpZiAodGhpcy5sb2NrZWRDb2xsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHtcbiAgICB0b3BPdmVybGF5LFxuICAgIGJvdHRvbU92ZXJsYXksXG4gICAgaW5saW5lU3RhcnRPdmVybGF5LFxuICAgIHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSxcbiAgICBib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXlcbiAgfSA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7XG4gIHRoaXMubG9ja2VkQ29sbGVjdGlvbiA9IHRydWU7XG4gIHRoaXMuc2Nyb2xsYmFycy5sZW5ndGggPSAwO1xuICB0aGlzLnNjcm9sbGJhcnMucHVzaCh0b3BPdmVybGF5KTtcbiAgaWYgKGJvdHRvbU92ZXJsYXkuY2xvbmUpIHtcbiAgICB0aGlzLnNjcm9sbGJhcnMucHVzaChib3R0b21PdmVybGF5KTtcbiAgfVxuICB0aGlzLnNjcm9sbGJhcnMucHVzaChpbmxpbmVTdGFydE92ZXJsYXkpO1xuICBpZiAodG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KSB7XG4gICAgdGhpcy5zY3JvbGxiYXJzLnB1c2godG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5KTtcbiAgfVxuICBpZiAoYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ICYmIGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSkge1xuICAgIHRoaXMuc2Nyb2xsYmFycy5wdXNoKGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSk7XG4gIH1cbiAgdGhpcy5jbG9uZXMgPSBbXTtcbiAgaWYgKHRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXIpIHtcbiAgICB0aGlzLmNsb25lcy5wdXNoKHRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSk7XG4gIH1cbiAgaWYgKGJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXIpIHtcbiAgICB0aGlzLmNsb25lcy5wdXNoKGJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSk7XG4gIH1cbiAgaWYgKGlubGluZVN0YXJ0T3ZlcmxheS5uZWVkRnVsbFJlbmRlcikge1xuICAgIHRoaXMuY2xvbmVzLnB1c2goaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpO1xuICB9XG4gIGlmICh0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkpIHtcbiAgICB0aGlzLmNsb25lcy5wdXNoKHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKTtcbiAgfVxuICBpZiAoYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5ICYmIGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSkge1xuICAgIHRoaXMuY2xvbmVzLnB1c2goYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpO1xuICB9XG59XG4vKipcbiAqIFRvdWNoIHNjcm9sbCBsaXN0ZW5lci5cbiAqL1xuZnVuY3Rpb24gX29uQmVmb3JlVG91Y2hTY3JvbGwoKSB7XG4gIHRoaXMuZnJlZXplT3ZlcmxheXMgPSB0cnVlO1xuICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5jbG9uZXMsIGNsb25lID0+IHtcbiAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKGNsb25lLCAnaGlkZS10d2VlbicpO1xuICB9KTtcbn1cbi8qKlxuICogQWZ0ZXIgbW9tZW50dW0gc2Nyb2xsIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBfb25BZnRlck1vbWVudHVtU2Nyb2xsKCkge1xuICB0aGlzLmZyZWV6ZU92ZXJsYXlzID0gZmFsc2U7XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmNsb25lcywgY2xvbmUgPT4ge1xuICAgICgwLCBfZWxlbWVudC5yZW1vdmVDbGFzcykoY2xvbmUsICdoaWRlLXR3ZWVuJyk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShjbG9uZSwgJ3Nob3ctdHdlZW4nKTtcbiAgfSk7XG4gIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCkgPT4ge1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmNsb25lcywgY2xvbmUgPT4ge1xuICAgICAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShjbG9uZSwgJ3Nob3ctdHdlZW4nKTtcbiAgICB9KTtcbiAgfSwgNDAwKTtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuc2Nyb2xsYmFycywgc2Nyb2xsYmFyID0+IHtcbiAgICBzY3JvbGxiYXIucmVmcmVzaCgpO1xuICAgIHNjcm9sbGJhci5yZXNldEZpeGVkUG9zaXRpb24oKTtcbiAgfSk7XG4gIHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdHJpbVJvd3MgPSByZXF1aXJlKFwiLi90cmltUm93c1wiKTtcbmV4cG9ydHMuUExVR0lOX0tFWSA9IF90cmltUm93cy5QTFVHSU5fS0VZO1xuZXhwb3J0cy5QTFVHSU5fUFJJT1JJVFkgPSBfdHJpbVJvd3MuUExVR0lOX1BSSU9SSVRZO1xuZXhwb3J0cy5UcmltUm93cyA9IF90cmltUm93cy5UcmltUm93czsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Jhc2UgPSByZXF1aXJlKFwiLi4vYmFzZVwiKTtcbnZhciBfdHJhbnNsYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zbGF0aW9uc1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlQ29sbGVjdGlvbikgeyBpZiAocHJpdmF0ZUNvbGxlY3Rpb24uaGFzKG9iaikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0XCIpOyB9IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICd0cmltUm93cyc7XG5jb25zdCBQTFVHSU5fUFJJT1JJVFkgPSBleHBvcnRzLlBMVUdJTl9QUklPUklUWSA9IDMzMDtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEBwbHVnaW4gVHJpbVJvd3NcbiAqIEBjbGFzcyBUcmltUm93c1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogVGhlIHBsdWdpbiBhbGxvd3MgdG8gdHJpbSBjZXJ0YWluIHJvd3MuIFRoZSB0cmltbWluZyBpcyBhY2hpZXZlZCBieSBhcHBseWluZyB0aGUgdHJhbnNmb3JtYXRpb24gYWxnb3JpdGhtIHRvIHRoZSBkYXRhXG4gKiB0cmFuc2Zvcm1hdGlvbi4gSW4gdGhpcyBjYXNlLCB3aGVuIHRoZSByb3cgaXMgdHJpbW1lZCBpdCBpcyBub3QgYWNjZXNzaWJsZSB1c2luZyBgZ2V0RGF0YSpgIG1ldGhvZHMgdGh1cyB0aGUgdHJpbW1lZFxuICogZGF0YSBpcyBub3QgdmlzaWJsZSB0byBvdGhlciBwbHVnaW5zLlxuICpcbiAqIEBleGFtcGxlXG4gKiA6Ojogb25seS1mb3IgamF2YXNjcmlwdFxuICogYGBganNcbiAqIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleGFtcGxlJyk7XG4gKiBjb25zdCBob3QgPSBuZXcgSGFuZHNvbnRhYmxlKGNvbnRhaW5lciwge1xuICogICBkYXRhOiBnZXREYXRhKCksXG4gKiAgIC8vIGhpZGUgc2VsZWN0ZWQgcm93cyBvbiB0YWJsZSBpbml0aWFsaXphdGlvblxuICogICB0cmltUm93czogWzEsIDIsIDVdXG4gKiB9KTtcbiAqXG4gKiAvLyBhY2Nlc3MgdGhlIHRyaW1Sb3dzIHBsdWdpbiBpbnN0YW5jZVxuICogY29uc3QgdHJpbVJvd3NQbHVnaW4gPSBob3QuZ2V0UGx1Z2luKCd0cmltUm93cycpO1xuICpcbiAqIC8vIGhpZGUgc2luZ2xlIHJvd1xuICogdHJpbVJvd3NQbHVnaW4udHJpbVJvdygxKTtcbiAqXG4gKiAvLyBoaWRlIG11bHRpcGxlIHJvd3NcbiAqIHRyaW1Sb3dzUGx1Z2luLnRyaW1Sb3coMSwgMiwgOSk7XG4gKlxuICogLy8gb3IgYXMgYW4gYXJyYXlcbiAqIHRyaW1Sb3dzUGx1Z2luLnRyaW1Sb3dzKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gc2hvdyBzaW5nbGUgcm93XG4gKiB0cmltUm93c1BsdWdpbi51bnRyaW1Sb3coMSk7XG4gKlxuICogLy8gc2hvdyBtdWx0aXBsZSByb3dzXG4gKiB0cmltUm93c1BsdWdpbi51bnRyaW1Sb3coMSwgMiwgOSk7XG4gKlxuICogLy8gb3IgYXMgYW4gYXJyYXlcbiAqIHRyaW1Sb3dzUGx1Z2luLnVudHJpbVJvd3MoWzEsIDIsIDldKTtcbiAqXG4gKiAvLyByZXJlbmRlciB0YWJsZSB0byBzZWUgdGhlIGNoYW5nZXNcbiAqIGhvdC5yZW5kZXIoKTtcbiAqIGBgYFxuICogOjo6XG4gKlxuICogOjo6IG9ubHktZm9yIHJlYWN0XG4gKiBgYGBqc3hcbiAqIGNvbnN0IGhvdFJlZiA9IHVzZVJlZihudWxsKTtcbiAqXG4gKiAuLi5cbiAqXG4gKiA8SG90VGFibGVcbiAqICAgcmVmPXtob3RSZWZ9XG4gKiAgIGRhdGE9e2dldERhdGEoKX1cbiAqICAgLy8gaGlkZSBzZWxlY3RlZCByb3dzIG9uIHRhYmxlIGluaXRpYWxpemF0aW9uXG4gKiAgIHRyaW1Sb3dzPXtbMSwgMiwgNV19XG4gKiAvPlxuICpcbiAqIGNvbnN0IGhvdCA9IGhvdFJlZi5jdXJyZW50LmhvdEluc3RhbmNlO1xuICogLy8gYWNjZXNzIHRoZSB0cmltUm93cyBwbHVnaW4gaW5zdGFuY2VcbiAqIGNvbnN0IHRyaW1Sb3dzUGx1Z2luID0gaG90LmdldFBsdWdpbigndHJpbVJvd3MnKTtcbiAqXG4gKiAvLyBoaWRlIHNpbmdsZSByb3dcbiAqIHRyaW1Sb3dzUGx1Z2luLnRyaW1Sb3coMSk7XG4gKlxuICogLy8gaGlkZSBtdWx0aXBsZSByb3dzXG4gKiB0cmltUm93c1BsdWdpbi50cmltUm93KDEsIDIsIDkpO1xuICpcbiAqIC8vIG9yIGFzIGFuIGFycmF5XG4gKiB0cmltUm93c1BsdWdpbi50cmltUm93cyhbMSwgMiwgOV0pO1xuICpcbiAqIC8vIHNob3cgc2luZ2xlIHJvd1xuICogdHJpbVJvd3NQbHVnaW4udW50cmltUm93KDEpO1xuICpcbiAqIC8vIHNob3cgbXVsdGlwbGUgcm93c1xuICogdHJpbVJvd3NQbHVnaW4udW50cmltUm93KDEsIDIsIDkpO1xuICpcbiAqIC8vIG9yIGFzIGFuIGFycmF5XG4gKiB0cmltUm93c1BsdWdpbi51bnRyaW1Sb3dzKFsxLCAyLCA5XSk7XG4gKlxuICogLy8gcmVyZW5kZXIgdGFibGUgdG8gc2VlIHRoZSBjaGFuZ2VzXG4gKiBob3QucmVuZGVyKCk7XG4gKiBgYGBcbiAqIDo6OlxuICovXG52YXIgX1RyaW1Sb3dzX2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBUcmltUm93cyBleHRlbmRzIF9iYXNlLkJhc2VQbHVnaW4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIE9uIG1hcCBpbml0aWFsaXplZCBob29rIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfVHJpbVJvd3NfYnJhbmQpO1xuICAgIC8qKlxuICAgICAqIE1hcCBvZiBza2lwcGVkIHJvd3MgYnkgdGhlIHBsdWdpbi5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge251bGx8VHJpbW1pbmdNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidHJpbW1lZFJvd3NNYXBcIiwgbnVsbCk7XG4gIH1cbiAgc3RhdGljIGdldCBQTFVHSU5fS0VZKCkge1xuICAgIHJldHVybiBQTFVHSU5fS0VZO1xuICB9XG4gIHN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCkge1xuICAgIHJldHVybiBQTFVHSU5fUFJJT1JJVFk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgcGx1Z2luIGlzIGVuYWJsZWQgaW4gdGhlIGhhbmRzb250YWJsZSBzZXR0aW5ncy4gVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgaW4ge0BsaW5rIEhvb2tzI2JlZm9yZUluaXR9XG4gICAqIGhvb2sgYW5kIGlmIGl0IHJldHVybnMgYHRydWVgIHRoZW4gdGhlIHtAbGluayBBdXRvUm93U2l6ZSNlbmFibGVQbHVnaW59IG1ldGhvZCBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkKCkge1xuICAgIHJldHVybiAhIXRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZW5hYmxlUGx1Z2luKCkge1xuICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50cmltbWVkUm93c01hcCA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCd0cmltUm93cycsIG5ldyBfdHJhbnNsYXRpb25zLlRyaW1taW5nTWFwKCkpO1xuICAgIHRoaXMudHJpbW1lZFJvd3NNYXAuYWRkTG9jYWxIb29rKCdpbml0JywgKCkgPT4gX2Fzc2VydENsYXNzQnJhbmQoX1RyaW1Sb3dzX2JyYW5kLCB0aGlzLCBfb25NYXBJbml0KS5jYWxsKHRoaXMpKTtcbiAgICBzdXBlci5lbmFibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwbHVnaW4ncyBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgZXhlY3V0ZWQgd2hlbiBbYHVwZGF0ZVNldHRpbmdzKClgXShAL2FwaS9jb3JlLm1kI3VwZGF0ZXNldHRpbmdzKSBpcyBpbnZva2VkIHdpdGggYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBvcHRpb25zOlxuICAgKiAgLSBbYHRyaW1Sb3dzYF0oQC9hcGkvb3B0aW9ucy5tZCN0cmltcm93cylcbiAgICovXG4gIHVwZGF0ZVBsdWdpbigpIHtcbiAgICBjb25zdCB0cmltbWVkUm93cyA9IHRoaXMuaG90LmdldFNldHRpbmdzKClbUExVR0lOX0tFWV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHJpbW1lZFJvd3MpKSB7XG4gICAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpbW1lZFJvd3NNYXAuY2xlYXIoKTtcbiAgICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRyaW1tZWRSb3dzLCBwaHlzaWNhbFJvdyA9PiB7XG4gICAgICAgICAgdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxSb3csIHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgICBzdXBlci51cGRhdGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyB0aGUgcGx1Z2luIGZ1bmN0aW9uYWxpdHkgZm9yIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICAgKi9cbiAgZGlzYWJsZVBsdWdpbigpIHtcbiAgICB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCd0cmltUm93cycpO1xuICAgIHN1cGVyLmRpc2FibGVQbHVnaW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzdCBvZiB0cmltbWVkIHJvd3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUGh5c2ljYWwgcm93cy5cbiAgICovXG4gIGdldFRyaW1tZWRSb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgdGhlIHJvd3MgcHJvdmlkZWQgaW4gdGhlIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSByb3dzIEFycmF5IG9mIHBoeXNpY2FsIHJvdyBpbmRleGVzLlxuICAgKiBAZmlyZXMgSG9va3MjYmVmb3JlVHJpbVJvd1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJUcmltUm93XG4gICAqL1xuICB0cmltUm93cyhyb3dzKSB7XG4gICAgY29uc3QgY3VycmVudFRyaW1Db25maWcgPSB0aGlzLmdldFRyaW1tZWRSb3dzKCk7XG4gICAgY29uc3QgaXNWYWxpZENvbmZpZyA9IHRoaXMuaXNWYWxpZENvbmZpZyhyb3dzKTtcbiAgICBsZXQgZGVzdGluYXRpb25UcmltQ29uZmlnID0gY3VycmVudFRyaW1Db25maWc7XG4gICAgaWYgKGlzVmFsaWRDb25maWcpIHtcbiAgICAgIGRlc3RpbmF0aW9uVHJpbUNvbmZpZyA9IEFycmF5LmZyb20obmV3IFNldChjdXJyZW50VHJpbUNvbmZpZy5jb25jYXQocm93cykpKTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dUcmltUm93ID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVRyaW1Sb3cnLCBjdXJyZW50VHJpbUNvbmZpZywgZGVzdGluYXRpb25UcmltQ29uZmlnLCBpc1ZhbGlkQ29uZmlnKTtcbiAgICBpZiAoYWxsb3dUcmltUm93ID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNWYWxpZENvbmZpZykge1xuICAgICAgdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkocm93cywgcGh5c2ljYWxSb3cgPT4ge1xuICAgICAgICAgIHRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsUm93LCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyVHJpbVJvdycsIGN1cnJlbnRUcmltQ29uZmlnLCBkZXN0aW5hdGlvblRyaW1Db25maWcsIGlzVmFsaWRDb25maWcsIGlzVmFsaWRDb25maWcgJiYgZGVzdGluYXRpb25UcmltQ29uZmlnLmxlbmd0aCA+IGN1cnJlbnRUcmltQ29uZmlnLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgdGhlIHJvdyBwcm92aWRlZCBhcyBhIHBoeXNpY2FsIHJvdyBpbmRleCAoY291bnRpbmcgZnJvbSAwKS5cbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXJ9IHJvdyBQaHlzaWNhbCByb3cgaW5kZXguXG4gICAqL1xuICB0cmltUm93KCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByb3cgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByb3dbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHRoaXMudHJpbVJvd3Mocm93KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnRyaW1zIHRoZSByb3dzIHByb3ZpZGVkIGluIHRoZSBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gcm93cyBBcnJheSBvZiBwaHlzaWNhbCByb3cgaW5kZXhlcy5cbiAgICogQGZpcmVzIEhvb2tzI2JlZm9yZVVudHJpbVJvd1xuICAgKiBAZmlyZXMgSG9va3MjYWZ0ZXJVbnRyaW1Sb3dcbiAgICovXG4gIHVudHJpbVJvd3Mocm93cykge1xuICAgIGNvbnN0IGN1cnJlbnRUcmltQ29uZmlnID0gdGhpcy5nZXRUcmltbWVkUm93cygpO1xuICAgIGNvbnN0IGlzVmFsaWRDb25maWcgPSB0aGlzLmlzVmFsaWRDb25maWcocm93cyk7XG4gICAgbGV0IGRlc3RpbmF0aW9uVHJpbUNvbmZpZyA9IGN1cnJlbnRUcmltQ29uZmlnO1xuICAgIGNvbnN0IHRyaW1taW5nTWFwVmFsdWVzID0gdGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpO1xuICAgIGNvbnN0IGlzQW55Um93VW50cmltbWVkID0gcm93cy5sZW5ndGggPiAwO1xuICAgIGlmIChpc1ZhbGlkQ29uZmlnICYmIGlzQW55Um93VW50cmltbWVkKSB7XG4gICAgICAvLyBQcmVwYXJpbmcgbmV3IHZhbHVlcyBmb3IgdHJpbW1pbmcgbWFwLlxuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHJvd3MsIHBoeXNpY2FsUm93ID0+IHtcbiAgICAgICAgdHJpbW1pbmdNYXBWYWx1ZXNbcGh5c2ljYWxSb3ddID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgLy8gUHJlcGFyaW5nIG5ldyB0cmltbWluZyBjb25maWcuXG4gICAgICBkZXN0aW5hdGlvblRyaW1Db25maWcgPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKSh0cmltbWluZ01hcFZhbHVlcywgKHRyaW1tZWRJbmRleGVzLCBpc1RyaW1tZWQsIHBoeXNpY2FsSW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGlzVHJpbW1lZCkge1xuICAgICAgICAgIHRyaW1tZWRJbmRleGVzLnB1c2gocGh5c2ljYWxJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyaW1tZWRJbmRleGVzO1xuICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBjb25zdCBhbGxvd1VudHJpbVJvdyA9IHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVVbnRyaW1Sb3cnLCBjdXJyZW50VHJpbUNvbmZpZywgZGVzdGluYXRpb25UcmltQ29uZmlnLCBpc1ZhbGlkQ29uZmlnICYmIGlzQW55Um93VW50cmltbWVkKTtcbiAgICBpZiAoYWxsb3dVbnRyaW1Sb3cgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc1ZhbGlkQ29uZmlnICYmIGlzQW55Um93VW50cmltbWVkKSB7XG4gICAgICB0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlcyh0cmltbWluZ01hcFZhbHVlcyk7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclVudHJpbVJvdycsIGN1cnJlbnRUcmltQ29uZmlnLCBkZXN0aW5hdGlvblRyaW1Db25maWcsIGlzVmFsaWRDb25maWcgJiYgaXNBbnlSb3dVbnRyaW1tZWQsIGlzVmFsaWRDb25maWcgJiYgZGVzdGluYXRpb25UcmltQ29uZmlnLmxlbmd0aCA8IGN1cnJlbnRUcmltQ29uZmlnLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogVW50cmltcyB0aGUgcm93IHByb3ZpZGVkIGFzIGEgcGh5c2ljYWwgcm93IGluZGV4IChjb3VudGluZyBmcm9tIDApLlxuICAgKlxuICAgKiBAcGFyYW0gey4uLm51bWJlcn0gcm93IFBoeXNpY2FsIHJvdyBpbmRleC5cbiAgICovXG4gIHVudHJpbVJvdygpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJvdyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcm93W19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuICAgIHRoaXMudW50cmltUm93cyhyb3cpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBnaXZlbiByb3cgaXMgaGlkZGVuLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxSb3cgUGh5c2ljYWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVHJpbW1lZChwaHlzaWNhbFJvdykge1xuICAgIHJldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChwaHlzaWNhbFJvdykgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVW50cmltcyBhbGwgdHJpbW1lZCByb3dzLlxuICAgKi9cbiAgdW50cmltQWxsKCkge1xuICAgIHRoaXMudW50cmltUm93cyh0aGlzLmdldFRyaW1tZWRSb3dzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpZiB0cmltIGNvbmZpZyBpcyB2YWxpZC4gQ2hlY2sgd2hldGhlciBhbGwgb2YgdGhlIHByb3ZpZGVkIHBoeXNpY2FsIHJvdyBpbmRleGVzIGFyZSB3aXRoaW4gc291cmNlIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHRyaW1tZWRSb3dzIExpc3Qgb2YgcGh5c2ljYWwgcm93IGluZGV4ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNWYWxpZENvbmZpZyh0cmltbWVkUm93cykge1xuICAgIGNvbnN0IHNvdXJjZVJvd3MgPSB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtcbiAgICByZXR1cm4gdHJpbW1lZFJvd3MuZXZlcnkodHJpbW1lZFJvdyA9PiBOdW1iZXIuaXNJbnRlZ2VyKHRyaW1tZWRSb3cpICYmIHRyaW1tZWRSb3cgPj0gMCAmJiB0cmltbWVkUm93IDwgc291cmNlUm93cyk7XG4gIH1cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBwbHVnaW4gaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgfVxufVxuZXhwb3J0cy5UcmltUm93cyA9IFRyaW1Sb3dzO1xuZnVuY3Rpb24gX29uTWFwSW5pdCgpIHtcbiAgY29uc3QgdHJpbW1lZFJvd3MgPSB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BMVUdJTl9LRVldO1xuICBpZiAoQXJyYXkuaXNBcnJheSh0cmltbWVkUm93cykpIHtcbiAgICB0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKSA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodHJpbW1lZFJvd3MsIHBoeXNpY2FsUm93ID0+IHtcbiAgICAgICAgdGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgocGh5c2ljYWxSb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdW5kb1JlZG8gPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi91bmRvUmVkb1wiKSk7XG5leHBvcnRzLlVuZG9SZWRvID0gX3VuZG9SZWRvLmRlZmF1bHQ7XG5leHBvcnRzLlBMVUdJTl9LRVkgPSBfdW5kb1JlZG8uUExVR0lOX0tFWTtcbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShlKSB7IGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIFdlYWtNYXApIHJldHVybiBudWxsOyB2YXIgciA9IG5ldyBXZWFrTWFwKCksIHQgPSBuZXcgV2Vha01hcCgpOyByZXR1cm4gKF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlID8gdCA6IHI7IH0pKGUpOyB9XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChlLCByKSB7IGlmICghciAmJiBlICYmIGUuX19lc01vZHVsZSkgcmV0dXJuIGU7IGlmIChudWxsID09PSBlIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGUgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSByZXR1cm4geyBkZWZhdWx0OiBlIH07IHZhciB0ID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKHIpOyBpZiAodCAmJiB0LmhhcyhlKSkgcmV0dXJuIHQuZ2V0KGUpOyB2YXIgbiA9IHsgX19wcm90b19fOiBudWxsIH0sIGEgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIgdSBpbiBlKSBpZiAoXCJkZWZhdWx0XCIgIT09IHUgJiYge30uaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmZyb20tZW50cmllcy5qc1wiKTtcbnZhciBfcGx1Z2luSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9wbHVnaW5Ib29rc1wiKSk7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuLi9jb250ZXh0TWVudS91dGlsc1wiKTtcbnZhciBfbW92ZXMgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9tb3Zlc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBTSE9SVENVVFNfR1JPVVAgPSAndW5kb1JlZG8nO1xuY29uc3QgUExVR0lOX0tFWSA9IGV4cG9ydHMuUExVR0lOX0tFWSA9ICd1bmRvUmVkbyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBIYW5kc29udGFibGUgVW5kb1JlZG8gcGx1Z2luIGFsbG93cyB0byB1bmRvIGFuZCByZWRvIGNlcnRhaW4gYWN0aW9ucyBkb25lIGluIHRoZSB0YWJsZS5cbiAqXG4gKiBfX05vdGVfXywgdGhhdCBub3QgYWxsIGFjdGlvbnMgYXJlIGN1cnJlbnRseSB1bmRvLWFibGUuIFRoZSBVbmRvUmVkbyBwbHVnaW4gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuICogQGV4YW1wbGVcbiAqIGBgYGpzXG4gKiB1bmRvOiB0cnVlXG4gKiBgYGBcbiAqIEBjbGFzcyBVbmRvUmVkb1xuICogQHBsdWdpbiBVbmRvUmVkb1xuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBVbmRvUmVkbyhpbnN0YW5jZSkge1xuICBjb25zdCBwbHVnaW4gPSB0aGlzO1xuICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHRoaXMuZG9uZUFjdGlvbnMgPSBbXTtcbiAgdGhpcy51bmRvbmVBY3Rpb25zID0gW107XG4gIHRoaXMuaWdub3JlTmV3QWN0aW9ucyA9IGZhbHNlO1xuICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgaW5zdGFuY2UuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBmdW5jdGlvbiAoY2hhbmdlcywgc291cmNlKSB7XG4gICAgY29uc3QgY2hhbmdlc0xlbiA9IGNoYW5nZXMgJiYgY2hhbmdlcy5sZW5ndGg7XG4gICAgaWYgKCFjaGFuZ2VzTGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhhc0RpZmZlcmVuY2VzID0gY2hhbmdlcy5maW5kKGNoYW5nZSA9PiB7XG4gICAgICBjb25zdCBbLCwgb2xkVmFsdWUsIG5ld1ZhbHVlXSA9IGNoYW5nZTtcbiAgICAgIHJldHVybiBvbGRWYWx1ZSAhPT0gbmV3VmFsdWU7XG4gICAgfSk7XG4gICAgaWYgKCFoYXNEaWZmZXJlbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB3cmFwcGVkQWN0aW9uID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2xvbmVkQ2hhbmdlcyA9IGNoYW5nZXMucmVkdWNlKChhcnIsIGNoYW5nZSkgPT4ge1xuICAgICAgICBhcnIucHVzaChbLi4uY2hhbmdlXSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbXSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY2xvbmVkQ2hhbmdlcywgY2hhbmdlID0+IHtcbiAgICAgICAgY2hhbmdlWzFdID0gaW5zdGFuY2UucHJvcFRvQ29sKGNoYW5nZVsxXSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gY2hhbmdlc0xlbiA+IDEgPyB0aGlzLmdldFNlbGVjdGVkKCkgOiBbW2Nsb25lZENoYW5nZXNbMF1bMF0sIGNsb25lZENoYW5nZXNbMF1bMV1dXTtcbiAgICAgIHJldHVybiBuZXcgVW5kb1JlZG8uQ2hhbmdlQWN0aW9uKGNsb25lZENoYW5nZXMsIHNlbGVjdGVkKTtcbiAgICB9O1xuICAgIHBsdWdpbi5kb25lKHdyYXBwZWRBY3Rpb24sIHNvdXJjZSk7XG4gIH0pO1xuICBpbnN0YW5jZS5hZGRIb29rKCdhZnRlckNyZWF0ZVJvdycsIChpbmRleCwgYW1vdW50LCBzb3VyY2UpID0+IHtcbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uQ3JlYXRlUm93QWN0aW9uKGluZGV4LCBhbW91bnQpLCBzb3VyY2UpO1xuICB9KTtcbiAgY29uc3QgZ2V0Q2VsbE1ldGFzID0gKGZyb21Sb3csIHRvUm93LCBmcm9tQ29sdW1uLCB0b0NvbHVtbikgPT4ge1xuICAgIGNvbnN0IGdlbmVyaWNLZXlzID0gWyd2aXN1YWxSb3cnLCAndmlzdWFsQ29sJywgJ3JvdycsICdjb2wnLCAncHJvcCddO1xuICAgIGNvbnN0IGdlbmVyaWNLZXlzTGVuZ3RoID0gZ2VuZXJpY0tleXMubGVuZ3RoO1xuICAgIGNvbnN0IGNlbGxNZXRhcyA9IFtdO1xuICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoZnJvbUNvbHVtbiwgdG9Db2x1bW4sIGNvbHVtbkluZGV4ID0+IHtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoZnJvbVJvdywgdG9Sb3csIHJvd0luZGV4ID0+IHtcbiAgICAgICAgY29uc3QgY2VsbE1ldGEgPSBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2VsbE1ldGEpLmxlbmd0aCAhPT0gZ2VuZXJpY0tleXNMZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB1bmlxdWVNZXRhID0gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGNlbGxNZXRhKS5maWx0ZXIoX3JlZiA9PiB7XG4gICAgICAgICAgICBsZXQgW2tleV0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIGdlbmVyaWNLZXlzLmluY2x1ZGVzKGtleSkgPT09IGZhbHNlO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjZWxsTWV0YXMucHVzaChbY2VsbE1ldGEudmlzdWFsUm93LCBjZWxsTWV0YS52aXN1YWxDb2wsIHVuaXF1ZU1ldGFdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNlbGxNZXRhcztcbiAgfTtcbiAgaW5zdGFuY2UuYWRkSG9vaygnYmVmb3JlUmVtb3ZlUm93JywgKGluZGV4LCBhbW91bnQsIGxvZ2ljUm93cywgc291cmNlKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlZEFjdGlvbiA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHBoeXNpY2FsUm93SW5kZXggPSBpbnN0YW5jZS50b1BoeXNpY2FsUm93KGluZGV4KTtcbiAgICAgIGNvbnN0IGxhc3RSb3dJbmRleCA9IHBoeXNpY2FsUm93SW5kZXggKyBhbW91bnQgLSAxO1xuICAgICAgY29uc3QgcmVtb3ZlZERhdGEgPSAoMCwgX29iamVjdC5kZWVwQ2xvbmUpKHBsdWdpbi5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhKHBoeXNpY2FsUm93SW5kZXgsIDAsIHBoeXNpY2FsUm93SW5kZXggKyBhbW91bnQgLSAxLCBwbHVnaW4uaW5zdGFuY2UuY291bnRTb3VyY2VDb2xzKCkgLSAxKSk7XG4gICAgICByZXR1cm4gbmV3IFVuZG9SZWRvLlJlbW92ZVJvd0FjdGlvbihwaHlzaWNhbFJvd0luZGV4LCByZW1vdmVkRGF0YSwgaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sIGluc3RhbmNlLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLCBpbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSwgZ2V0Q2VsbE1ldGFzKHBoeXNpY2FsUm93SW5kZXgsIGxhc3RSb3dJbmRleCwgMCwgaW5zdGFuY2UuY291bnRDb2xzKCkgLSAxKSk7XG4gICAgfTtcbiAgICBwbHVnaW4uZG9uZSh3cmFwcGVkQWN0aW9uLCBzb3VyY2UpO1xuICB9KTtcbiAgaW5zdGFuY2UuYWRkSG9vaygnYWZ0ZXJDcmVhdGVDb2wnLCAoaW5kZXgsIGFtb3VudCwgc291cmNlKSA9PiB7XG4gICAgcGx1Z2luLmRvbmUoKCkgPT4gbmV3IFVuZG9SZWRvLkNyZWF0ZUNvbHVtbkFjdGlvbihpbmRleCwgYW1vdW50KSwgc291cmNlKTtcbiAgfSk7XG4gIGluc3RhbmNlLmFkZEhvb2soJ2JlZm9yZVJlbW92ZUNvbCcsIChpbmRleCwgYW1vdW50LCBsb2dpY0NvbHVtbnMsIHNvdXJjZSkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZWRBY3Rpb24gPSAoKSA9PiB7XG4gICAgICBjb25zdCBvcmlnaW5hbERhdGEgPSBwbHVnaW4uaW5zdGFuY2UuZ2V0U291cmNlRGF0YUFycmF5KCk7XG4gICAgICBjb25zdCBjb2x1bW5JbmRleCA9IChwbHVnaW4uaW5zdGFuY2UuY291bnRDb2xzKCkgKyBpbmRleCkgJSBwbHVnaW4uaW5zdGFuY2UuY291bnRDb2xzKCk7XG4gICAgICBjb25zdCBsYXN0Q29sdW1uSW5kZXggPSBjb2x1bW5JbmRleCArIGFtb3VudCAtIDE7XG4gICAgICBjb25zdCByZW1vdmVkRGF0YSA9IFtdO1xuICAgICAgY29uc3QgaGVhZGVycyA9IFtdO1xuICAgICAgY29uc3QgaW5kZXhlcyA9IFtdO1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShvcmlnaW5hbERhdGEubGVuZ3RoIC0gMSwgaSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IFtdO1xuICAgICAgICBjb25zdCBvcmlnUm93ID0gb3JpZ2luYWxEYXRhW2ldO1xuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGNvbHVtbkluZGV4LCBsYXN0Q29sdW1uSW5kZXgsIGogPT4ge1xuICAgICAgICAgIGNvbHVtbi5wdXNoKG9yaWdSb3dbaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihqKV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVtb3ZlZERhdGEucHVzaChjb2x1bW4pO1xuICAgICAgfSk7XG4gICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGFtb3VudCAtIDEsIGkgPT4ge1xuICAgICAgICBpbmRleGVzLnB1c2goaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihjb2x1bW5JbmRleCArIGkpKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSkge1xuICAgICAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGFtb3VudCAtIDEsIGkgPT4ge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChpbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihjb2x1bW5JbmRleCArIGkpXSB8fCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjb2x1bW5zTWFwID0gaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7XG4gICAgICBjb25zdCByb3dzTWFwID0gaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7XG4gICAgICByZXR1cm4gbmV3IFVuZG9SZWRvLlJlbW92ZUNvbHVtbkFjdGlvbihjb2x1bW5JbmRleCwgaW5kZXhlcywgcmVtb3ZlZERhdGEsIGhlYWRlcnMsIGNvbHVtbnNNYXAsIHJvd3NNYXAsIGluc3RhbmNlLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsIGdldENlbGxNZXRhcygwLCBpbnN0YW5jZS5jb3VudFJvd3MoKSwgY29sdW1uSW5kZXgsIGxhc3RDb2x1bW5JbmRleCkpO1xuICAgIH07XG4gICAgcGx1Z2luLmRvbmUod3JhcHBlZEFjdGlvbiwgc291cmNlKTtcbiAgfSk7XG4gIGluc3RhbmNlLmFkZEhvb2soJ2JlZm9yZUNlbGxBbGlnbm1lbnQnLCAoc3RhdGVCZWZvcmUsIHJhbmdlLCB0eXBlLCBhbGlnbm1lbnQpID0+IHtcbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uQ2VsbEFsaWdubWVudEFjdGlvbihzdGF0ZUJlZm9yZSwgcmFuZ2UsIHR5cGUsIGFsaWdubWVudCkpO1xuICB9KTtcbiAgaW5zdGFuY2UuYWRkSG9vaygnYmVmb3JlRmlsdGVyJywgY29uZGl0aW9uc1N0YWNrID0+IHtcbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uRmlsdGVyc0FjdGlvbihjb25kaXRpb25zU3RhY2spKTtcbiAgfSk7XG4gIGluc3RhbmNlLmFkZEhvb2soJ2JlZm9yZVJvd01vdmUnLCAocm93cywgZmluYWxJbmRleCkgPT4ge1xuICAgIGlmIChyb3dzID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uUm93TW92ZUFjdGlvbihyb3dzLCBmaW5hbEluZGV4KSk7XG4gIH0pO1xuICBpbnN0YW5jZS5hZGRIb29rKCdiZWZvcmVDb2x1bW5Nb3ZlJywgKGNvbHVtbnMsIGZpbmFsSW5kZXgpID0+IHtcbiAgICBpZiAoY29sdW1ucyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcGx1Z2luLmRvbmUoKCkgPT4gbmV3IFVuZG9SZWRvLkNvbHVtbk1vdmVBY3Rpb24oY29sdW1ucywgZmluYWxJbmRleCkpO1xuICB9KTtcbiAgaW5zdGFuY2UuYWRkSG9vaygnYmVmb3JlTWVyZ2VDZWxscycsIChjZWxsUmFuZ2UsIGF1dG8pID0+IHtcbiAgICBpZiAoYXV0bykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uTWVyZ2VDZWxsc0FjdGlvbihpbnN0YW5jZSwgY2VsbFJhbmdlKSk7XG4gIH0pO1xuICBpbnN0YW5jZS5hZGRIb29rKCdhZnRlclVubWVyZ2VDZWxscycsIChjZWxsUmFuZ2UsIGF1dG8pID0+IHtcbiAgICBpZiAoYXV0bykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwbHVnaW4uZG9uZSgoKSA9PiBuZXcgVW5kb1JlZG8uVW5tZXJnZUNlbGxzQWN0aW9uKGluc3RhbmNlLCBjZWxsUmFuZ2UpKTtcbiAgfSk7XG5cbiAgLy8gVE9ETzogV2h5IHRoaXMgY2FsbGJhY2sgaXMgbmVlZGVkPyBPbmUgdGVzdCBkb2Vzbid0IHBhc3MgYWZ0ZXIgY2FsbGluZyBtZXRob2QgcmlnaHQgYWZ0ZXIgcGx1Z2luIGNyZWF0aW9uIChvdXRzaWRlIHRoZSBjYWxsYmFjaykuXG4gIGluc3RhbmNlLmFkZEhvb2soJ2FmdGVySW5pdCcsICgpID0+IHtcbiAgICBwbHVnaW4uaW5pdCgpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBTdGFzaCBpbmZvcm1hdGlvbiBhYm91dCBwZXJmb3JtZWQgYWN0aW9ucy5cbiAqXG4gKiBAZnVuY3Rpb24gZG9uZVxuICogQG1lbWJlcm9mIFVuZG9SZWRvI1xuICogQGZpcmVzIEhvb2tzI2JlZm9yZVVuZG9TdGFja0NoYW5nZVxuICogQGZpcmVzIEhvb2tzI2FmdGVyVW5kb1N0YWNrQ2hhbmdlXG4gKiBAZmlyZXMgSG9va3MjYmVmb3JlUmVkb1N0YWNrQ2hhbmdlXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJSZWRvU3RhY2tDaGFuZ2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHdyYXBwZWRBY3Rpb24gVGhlIGFjdGlvbiBkZXNjcmlwdG9yIHdyYXBwZWQgaW4gYSBjbG9zdXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtzb3VyY2VdIFNvdXJjZSBvZiB0aGUgYWN0aW9uLiBJdCBpcyBkZWZpbmVkIGp1c3QgZm9yIG1vcmUgZ2VuZXJhbCBhY3Rpb25zIChub3QgcmVsYXRlZCB0byBwbHVnaW5zKS5cbiAqL1xuVW5kb1JlZG8ucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAod3JhcHBlZEFjdGlvbiwgc291cmNlKSB7XG4gIGlmICh0aGlzLmlnbm9yZU5ld0FjdGlvbnMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaXNCbG9ja2VkQnlEZWZhdWx0ID0gc291cmNlID09PSAnVW5kb1JlZG8udW5kbycgfHwgc291cmNlID09PSAnVW5kb1JlZG8ucmVkbycgfHwgc291cmNlID09PSAnYXV0byc7XG4gIGlmIChpc0Jsb2NrZWRCeURlZmF1bHQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZG9uZUFjdGlvbnNDb3B5ID0gdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO1xuICBjb25zdCBjb250aW51ZUFjdGlvbiA9IHRoaXMuaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSwgc291cmNlKTtcbiAgaWYgKGNvbnRpbnVlQWN0aW9uID09PSBmYWxzZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuZXdBY3Rpb24gPSB3cmFwcGVkQWN0aW9uKCk7XG4gIGNvbnN0IHVuZG9uZUFjdGlvbnNDb3B5ID0gdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7XG4gIHRoaXMuZG9uZUFjdGlvbnMucHVzaChuZXdBY3Rpb24pO1xuICB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSwgdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtcbiAgdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYmVmb3JlUmVkb1N0YWNrQ2hhbmdlJywgdW5kb25lQWN0aW9uc0NvcHkpO1xuICB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoID0gMDtcbiAgdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UnLCB1bmRvbmVBY3Rpb25zQ29weSwgdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO1xufTtcblxuLyoqXG4gKiBVbmRvIHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gdGhlIHRhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiB1bmRvXG4gKiBAbWVtYmVyb2YgVW5kb1JlZG8jXG4gKiBAZmlyZXMgSG9va3MjYmVmb3JlVW5kb1N0YWNrQ2hhbmdlXG4gKiBAZmlyZXMgSG9va3MjYWZ0ZXJVbmRvU3RhY2tDaGFuZ2VcbiAqIEBmaXJlcyBIb29rcyNiZWZvcmVSZWRvU3RhY2tDaGFuZ2VcbiAqIEBmaXJlcyBIb29rcyNhZnRlclJlZG9TdGFja0NoYW5nZVxuICogQGZpcmVzIEhvb2tzI2JlZm9yZVVuZG9cbiAqIEBmaXJlcyBIb29rcyNhZnRlclVuZG9cbiAqL1xuVW5kb1JlZG8ucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKSB7XG4gICAgY29uc3QgZG9uZUFjdGlvbnNDb3B5ID0gdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO1xuICAgIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSk7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5kb25lQWN0aW9ucy5wb3AoKTtcbiAgICB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSwgdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtcbiAgICBjb25zdCBhY3Rpb25DbG9uZSA9ICgwLCBfb2JqZWN0LmRlZXBDbG9uZSkoYWN0aW9uKTtcbiAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IHRoaXMuaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVVuZG8nLCBhY3Rpb25DbG9uZSk7XG4gICAgaWYgKGNvbnRpbnVlQWN0aW9uID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlnbm9yZU5ld0FjdGlvbnMgPSB0cnVlO1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGNvbnN0IHVuZG9uZUFjdGlvbnNDb3B5ID0gdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7XG4gICAgdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYmVmb3JlUmVkb1N0YWNrQ2hhbmdlJywgdW5kb25lQWN0aW9uc0NvcHkpO1xuICAgIGFjdGlvbi51bmRvKHRoaXMuaW5zdGFuY2UsICgpID0+IHtcbiAgICAgIHRoYXQuaWdub3JlTmV3QWN0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhhdC51bmRvbmVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclJlZG9TdGFja0NoYW5nZScsIHVuZG9uZUFjdGlvbnNDb3B5LCB0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSk7XG4gICAgdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJVbmRvJywgYWN0aW9uQ2xvbmUpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlZG8gdGhlIHByZXZpb3VzIGFjdGlvbiBwZXJmb3JtZWQgdG8gdGhlIHRhYmxlICh1c2VkIHRvIHJldmVyc2UgYW4gdW5kbykuXG4gKlxuICogQGZ1bmN0aW9uIHJlZG9cbiAqIEBtZW1iZXJvZiBVbmRvUmVkbyNcbiAqIEBmaXJlcyBIb29rcyNiZWZvcmVVbmRvU3RhY2tDaGFuZ2VcbiAqIEBmaXJlcyBIb29rcyNhZnRlclVuZG9TdGFja0NoYW5nZVxuICogQGZpcmVzIEhvb2tzI2JlZm9yZVJlZG9TdGFja0NoYW5nZVxuICogQGZpcmVzIEhvb2tzI2FmdGVyUmVkb1N0YWNrQ2hhbmdlXG4gKiBAZmlyZXMgSG9va3MjYmVmb3JlUmVkb1xuICogQGZpcmVzIEhvb2tzI2FmdGVyUmVkb1xuICovXG5VbmRvUmVkby5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpIHtcbiAgICBjb25zdCB1bmRvbmVBY3Rpb25zQ29weSA9IHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO1xuICAgIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVJlZG9TdGFja0NoYW5nZScsIHVuZG9uZUFjdGlvbnNDb3B5KTtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7XG4gICAgdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UnLCB1bmRvbmVBY3Rpb25zQ29weSwgdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO1xuICAgIGNvbnN0IGFjdGlvbkNsb25lID0gKDAsIF9vYmplY3QuZGVlcENsb25lKShhY3Rpb24pO1xuICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygnYmVmb3JlUmVkbycsIGFjdGlvbkNsb25lKTtcbiAgICBpZiAoY29udGludWVBY3Rpb24gPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaWdub3JlTmV3QWN0aW9ucyA9IHRydWU7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgY29uc3QgZG9uZUFjdGlvbnNDb3B5ID0gdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO1xuICAgIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoJ2JlZm9yZVVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSk7XG4gICAgYWN0aW9uLnJlZG8odGhpcy5pbnN0YW5jZSwgKCkgPT4ge1xuICAgICAgdGhhdC5pZ25vcmVOZXdBY3Rpb25zID0gZmFsc2U7XG4gICAgICB0aGF0LmRvbmVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclVuZG9TdGFja0NoYW5nZScsIGRvbmVBY3Rpb25zQ29weSwgdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtcbiAgICB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCdhZnRlclJlZG8nLCBhY3Rpb25DbG9uZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ2hlY2tzIGlmIHVuZG8gYWN0aW9uIGlzIGF2YWlsYWJsZS5cbiAqXG4gKiBAZnVuY3Rpb24gaXNVbmRvQXZhaWxhYmxlXG4gKiBAbWVtYmVyb2YgVW5kb1JlZG8jXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJuIGB0cnVlYCBpZiB1bmRvIGNhbiBiZSBwZXJmb3JtZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5VbmRvUmVkby5wcm90b3R5cGUuaXNVbmRvQXZhaWxhYmxlID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5kb25lQWN0aW9ucy5sZW5ndGggPiAwO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgcmVkbyBhY3Rpb24gaXMgYXZhaWxhYmxlLlxuICpcbiAqIEBmdW5jdGlvbiBpc1JlZG9BdmFpbGFibGVcbiAqIEBtZW1iZXJvZiBVbmRvUmVkbyNcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gYHRydWVgIGlmIHJlZG8gY2FuIGJlIHBlcmZvcm1lZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cblVuZG9SZWRvLnByb3RvdHlwZS5pc1JlZG9BdmFpbGFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoID4gMDtcbn07XG5cbi8qKlxuICogQ2xlYXJzIHVuZG8gaGlzdG9yeS5cbiAqXG4gKiBAZnVuY3Rpb24gY2xlYXJcbiAqIEBtZW1iZXJvZiBVbmRvUmVkbyNcbiAqL1xuVW5kb1JlZG8ucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aCA9IDA7XG4gIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHBsdWdpbiBpcyBlbmFibGVkLlxuICpcbiAqIEBmdW5jdGlvbiBpc0VuYWJsZWRcbiAqIEBtZW1iZXJvZiBVbmRvUmVkbyNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5VbmRvUmVkby5wcm90b3R5cGUuaXNFbmFibGVkID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5lbmFibGVkO1xufTtcblxuLyoqXG4gKiBFbmFibGVzIHRoZSBwbHVnaW4uXG4gKlxuICogQGZ1bmN0aW9uIGVuYWJsZVxuICogQG1lbWJlcm9mIFVuZG9SZWRvI1xuICovXG5VbmRvUmVkby5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5pc0VuYWJsZWQoKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBob3QgPSB0aGlzLmluc3RhbmNlO1xuICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xuICBleHBvc2VVbmRvUmVkb01ldGhvZHMoaG90KTtcbiAgdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpO1xuICBob3QuYWRkSG9vaygnYWZ0ZXJDaGFuZ2UnLCBvbkFmdGVyQ2hhbmdlKTtcbn07XG5cbi8qKlxuICogRGlzYWJsZXMgdGhlIHBsdWdpbi5cbiAqXG4gKiBAZnVuY3Rpb24gZGlzYWJsZVxuICogQG1lbWJlcm9mIFVuZG9SZWRvI1xuICovXG5VbmRvUmVkby5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLmlzRW5hYmxlZCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGhvdCA9IHRoaXMuaW5zdGFuY2U7XG4gIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICByZW1vdmVFeHBvc2VkVW5kb1JlZG9NZXRob2RzKGhvdCk7XG4gIHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpO1xuICBob3QucmVtb3ZlSG9vaygnYWZ0ZXJDaGFuZ2UnLCBvbkFmdGVyQ2hhbmdlKTtcbn07XG5cbi8qKlxuICogRGVzdHJveXMgdGhlIGluc3RhbmNlLlxuICpcbiAqIEBmdW5jdGlvbiBkZXN0cm95XG4gKiBAbWVtYmVyb2YgVW5kb1JlZG8jXG4gKi9cblVuZG9SZWRvLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmNsZWFyKCk7XG4gIHRoaXMuaW5zdGFuY2UgPSBudWxsO1xuICB0aGlzLmRvbmVBY3Rpb25zID0gbnVsbDtcbiAgdGhpcy51bmRvbmVBY3Rpb25zID0gbnVsbDtcbn07XG5VbmRvUmVkby5BY3Rpb24gPSBmdW5jdGlvbiAoKSB7fTtcblVuZG9SZWRvLkFjdGlvbi5wcm90b3R5cGUudW5kbyA9IGZ1bmN0aW9uICgpIHt9O1xuVW5kb1JlZG8uQWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKCkge307XG5cbi8qKlxuICogQ2hhbmdlIGFjdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyAyRCBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIGVkaXRlZCBjZWxscy5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHNlbGVjdGVkIFRoZSBjZWxsIHNlbGVjdGlvbi5cbiAqL1xuVW5kb1JlZG8uQ2hhbmdlQWN0aW9uID0gZnVuY3Rpb24gKGNoYW5nZXMsIHNlbGVjdGVkKSB7XG4gIHRoaXMuY2hhbmdlcyA9IGNoYW5nZXM7XG4gIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgdGhpcy5hY3Rpb25UeXBlID0gJ2NoYW5nZSc7XG59O1xuKDAsIF9vYmplY3QuaW5oZXJpdCkoVW5kb1JlZG8uQ2hhbmdlQWN0aW9uLCBVbmRvUmVkby5BY3Rpb24pO1xuVW5kb1JlZG8uQ2hhbmdlQWN0aW9uLnByb3RvdHlwZS51bmRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCB1bmRvbmVDYWxsYmFjaykge1xuICBjb25zdCBkYXRhID0gKDAsIF9vYmplY3QuZGVlcENsb25lKSh0aGlzLmNoYW5nZXMpO1xuICBjb25zdCBlbXB0eVJvd3NBdFRoZUVuZCA9IGluc3RhbmNlLmNvdW50RW1wdHlSb3dzKHRydWUpO1xuICBjb25zdCBlbXB0eUNvbHNBdFRoZUVuZCA9IGluc3RhbmNlLmNvdW50RW1wdHlDb2xzKHRydWUpO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGRhdGFbaV0uc3BsaWNlKDMsIDEpO1xuICB9XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlckNoYW5nZScsIHVuZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChkYXRhLCBudWxsLCBudWxsLCAnVW5kb1JlZG8udW5kbycpO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gZGF0YS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IFtyb3csIGNvbHVtbl0gPSBkYXRhW2ldO1xuICAgIGlmIChpbnN0YW5jZS5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cyAmJiByb3cgKyAxICsgaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3MgPT09IGluc3RhbmNlLmNvdW50Um93cygpICYmIGVtcHR5Um93c0F0VGhlRW5kID09PSBpbnN0YW5jZS5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cykge1xuICAgICAgaW5zdGFuY2UuYWx0ZXIoJ3JlbW92ZV9yb3cnLCBwYXJzZUludChyb3cgKyAxLCAxMCksIGluc3RhbmNlLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzKTtcbiAgICAgIGluc3RhbmNlLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMgJiYgY29sdW1uICsgMSArIGluc3RhbmNlLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzID09PSBpbnN0YW5jZS5jb3VudENvbHMoKSAmJiBlbXB0eUNvbHNBdFRoZUVuZCA9PT0gaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHMpIHtcbiAgICAgIGluc3RhbmNlLmFsdGVyKCdyZW1vdmVfY29sJywgcGFyc2VJbnQoY29sdW1uICsgMSwgMTApLCBpbnN0YW5jZS5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scyk7XG4gICAgICBpbnN0YW5jZS51bmRvUmVkby5kb25lQWN0aW9ucy5wb3AoKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qgc2VsZWN0ZWRMYXN0ID0gaW5zdGFuY2UuZ2V0U2VsZWN0ZWRMYXN0KCk7XG4gIGlmIChzZWxlY3RlZExhc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IFtjaGFuZ2VkUm93LCBjaGFuZ2VkQ29sdW1uXSA9IGRhdGFbMF07XG4gICAgY29uc3QgW3NlbGVjdGVkUm93LCBzZWxlY3RlZENvbHVtbl0gPSBzZWxlY3RlZExhc3Q7XG4gICAgY29uc3QgZmlyc3RGdWxseVZpc2libGVSb3cgPSBpbnN0YW5jZS52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCk7XG4gICAgY29uc3QgZmlyc3RGdWxseVZpc2libGVDb2x1bW4gPSBpbnN0YW5jZS52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7XG4gICAgY29uc3QgaXNJblZlcnRpY2FsVmlld1BvcnQgPSBjaGFuZ2VkUm93ID49IGZpcnN0RnVsbHlWaXNpYmxlUm93O1xuICAgIGNvbnN0IGlzSW5Ib3Jpem9udGFsVmlld1BvcnQgPSBjaGFuZ2VkQ29sdW1uID49IGZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uO1xuICAgIGNvbnN0IGlzSW5WaWV3cG9ydCA9IGlzSW5WZXJ0aWNhbFZpZXdQb3J0ICYmIGlzSW5Ib3Jpem9udGFsVmlld1BvcnQ7XG4gICAgY29uc3QgaXNDaGFuZ2VkU2VsZWN0aW9uID0gc2VsZWN0ZWRSb3cgIT09IGNoYW5nZWRSb3cgfHwgc2VsZWN0ZWRDb2x1bW4gIT09IGNoYW5nZWRDb2x1bW47XG5cbiAgICAvLyBQZXJmb3JtaW5nIHNjcm9sbCBvbmx5IHdoZW4gc2VsZWN0aW9uIGhhcyBiZWVuIGNoYW5nZWQgcmlnaHQgYWZ0ZXIgZWRpdGluZyBhIGNlbGwuXG4gICAgaWYgKGlzSW5WaWV3cG9ydCA9PT0gZmFsc2UgJiYgaXNDaGFuZ2VkU2VsZWN0aW9uID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBzY3JvbGxDb25maWcgPSB7XG4gICAgICAgIHJvdzogY2hhbmdlZFJvdyxcbiAgICAgICAgY29sOiBjaGFuZ2VkQ29sdW1uXG4gICAgICB9O1xuICAgICAgaWYgKGlzSW5WZXJ0aWNhbFZpZXdQb3J0ID09PSBmYWxzZSkge1xuICAgICAgICBzY3JvbGxDb25maWcudmVydGljYWxTbmFwID0gJ3RvcCc7XG4gICAgICB9XG4gICAgICBpZiAoaXNJbkhvcml6b250YWxWaWV3UG9ydCA9PT0gZmFsc2UpIHtcbiAgICAgICAgc2Nyb2xsQ29uZmlnLmhvcml6b250YWxTbmFwID0gJ3N0YXJ0JztcbiAgICAgIH1cbiAgICAgIGluc3RhbmNlLnNjcm9sbFZpZXdwb3J0VG8oc2Nyb2xsQ29uZmlnKTtcbiAgICB9XG4gIH1cbiAgaW5zdGFuY2Uuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwgZmFsc2UsIGZhbHNlKTtcbn07XG5VbmRvUmVkby5DaGFuZ2VBY3Rpb24ucHJvdG90eXBlLnJlZG8gPSBmdW5jdGlvbiAoaW5zdGFuY2UsIG9uRmluaXNoQ2FsbGJhY2spIHtcbiAgY29uc3QgZGF0YSA9ICgwLCBfb2JqZWN0LmRlZXBDbG9uZSkodGhpcy5jaGFuZ2VzKTtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBkYXRhW2ldLnNwbGljZSgyLCAxKTtcbiAgfVxuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJDaGFuZ2UnLCBvbkZpbmlzaENhbGxiYWNrKTtcbiAgaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChkYXRhLCBudWxsLCBudWxsLCAnVW5kb1JlZG8ucmVkbycpO1xuICBpZiAodGhpcy5zZWxlY3RlZCkge1xuICAgIGluc3RhbmNlLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsIGZhbHNlLCBmYWxzZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlIHJvdyBhY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgVGhlIG51bWJlciBvZiBjcmVhdGVkIHJvd3MuXG4gKi9cblVuZG9SZWRvLkNyZWF0ZVJvd0FjdGlvbiA9IGZ1bmN0aW9uIChpbmRleCwgYW1vdW50KSB7XG4gIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgdGhpcy5hbW91bnQgPSBhbW91bnQ7XG4gIHRoaXMuYWN0aW9uVHlwZSA9ICdpbnNlcnRfcm93Jztcbn07XG4oMCwgX29iamVjdC5pbmhlcml0KShVbmRvUmVkby5DcmVhdGVSb3dBY3Rpb24sIFVuZG9SZWRvLkFjdGlvbik7XG5VbmRvUmVkby5DcmVhdGVSb3dBY3Rpb24ucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHVuZG9uZUNhbGxiYWNrKSB7XG4gIGNvbnN0IHJvd0NvdW50ID0gaW5zdGFuY2UuY291bnRSb3dzKCk7XG4gIGNvbnN0IG1pblNwYXJlUm93cyA9IGluc3RhbmNlLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzO1xuICBpZiAodGhpcy5pbmRleCA+PSByb3dDb3VudCAmJiB0aGlzLmluZGV4IC0gbWluU3BhcmVSb3dzIDwgcm93Q291bnQpIHtcbiAgICB0aGlzLmluZGV4IC09IG1pblNwYXJlUm93czsgLy8gd29yayBhcm91bmQgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgbmVlZGVkIHJvdyB3YXMgcmVtb3ZlZCBkdWUgdG8gYW4gJ3VuZG8nIG9mIGEgbWFkZSBjaGFuZ2VcbiAgfVxuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJSZW1vdmVSb3cnLCB1bmRvbmVDYWxsYmFjayk7XG4gIGluc3RhbmNlLmFsdGVyKCdyZW1vdmVfcm93JywgdGhpcy5pbmRleCwgdGhpcy5hbW91bnQsICdVbmRvUmVkby51bmRvJyk7XG59O1xuVW5kb1JlZG8uQ3JlYXRlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCByZWRvbmVDYWxsYmFjaykge1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJDcmVhdGVSb3cnLCByZWRvbmVDYWxsYmFjayk7XG4gIGluc3RhbmNlLmFsdGVyKCdpbnNlcnRfcm93X2Fib3ZlJywgdGhpcy5pbmRleCwgdGhpcy5hbW91bnQsICdVbmRvUmVkby5yZWRvJyk7XG59O1xuXG4vKipcbiAqIFJlbW92ZSByb3cgYWN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSByZW1vdmVkIGRhdGEuXG4gKiBAcGFyYW0ge251bWJlcn0gZml4ZWRSb3dzQm90dG9tIE51bWJlciBvZiBmaXhlZCByb3dzIG9uIHRoZSBib3R0b20uIFJlbW92ZSByb3cgYWN0aW9uIGNoYW5nZSBpdCBzb21ldGltZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gZml4ZWRSb3dzVG9wIE51bWJlciBvZiBmaXhlZCByb3dzIG9uIHRoZSB0b3AuIFJlbW92ZSByb3cgYWN0aW9uIGNoYW5nZSBpdCBzb21ldGltZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByb3dJbmRleGVzU2VxdWVuY2UgUm93IGluZGV4IHNlcXVlbmNlIHRha2VuIGZyb20gdGhlIHJvdyBpbmRleCBtYXBwZXIuXG4gKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkQ2VsbE1ldGFzIExpc3Qgb2YgcmVtb3ZlZCBjZWxsIG1ldGFzLlxuICovXG5VbmRvUmVkby5SZW1vdmVSb3dBY3Rpb24gPSBmdW5jdGlvbiAoaW5kZXgsIGRhdGEsIGZpeGVkUm93c0JvdHRvbSwgZml4ZWRSb3dzVG9wLCByb3dJbmRleGVzU2VxdWVuY2UsIHJlbW92ZWRDZWxsTWV0YXMpIHtcbiAgdGhpcy5pbmRleCA9IGluZGV4O1xuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLmFjdGlvblR5cGUgPSAncmVtb3ZlX3Jvdyc7XG4gIHRoaXMuZml4ZWRSb3dzQm90dG9tID0gZml4ZWRSb3dzQm90dG9tO1xuICB0aGlzLmZpeGVkUm93c1RvcCA9IGZpeGVkUm93c1RvcDtcbiAgdGhpcy5yb3dJbmRleGVzU2VxdWVuY2UgPSByb3dJbmRleGVzU2VxdWVuY2U7XG4gIHRoaXMucmVtb3ZlZENlbGxNZXRhcyA9IHJlbW92ZWRDZWxsTWV0YXM7XG59O1xuKDAsIF9vYmplY3QuaW5oZXJpdCkoVW5kb1JlZG8uUmVtb3ZlUm93QWN0aW9uLCBVbmRvUmVkby5BY3Rpb24pO1xuVW5kb1JlZG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS51bmRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCB1bmRvbmVDYWxsYmFjaykge1xuICBjb25zdCBzZXR0aW5ncyA9IGluc3RhbmNlLmdldFNldHRpbmdzKCk7XG4gIGNvbnN0IGNoYW5nZXMgPSBbXTtcblxuICAvLyBDaGFuZ2luZyBieSB0aGUgcmVmZXJlbmNlIGFzIGB1cGRhdGVTZXR0aW5nc2AgZG9lc24ndCB3b3JrIHRoZSBiZXN0LlxuICBzZXR0aW5ncy5maXhlZFJvd3NCb3R0b20gPSB0aGlzLmZpeGVkUm93c0JvdHRvbTtcbiAgc2V0dGluZ3MuZml4ZWRSb3dzVG9wID0gdGhpcy5maXhlZFJvd3NUb3A7XG5cbiAgLy8gUHJlcGFyZSB0aGUgY2hhbmdlIGxpc3QgdG8gZmlsbCB0aGUgc291cmNlIGRhdGEuXG4gIHRoaXMuZGF0YS5mb3JFYWNoKChkYXRhUm93LCByb3dJbmRleERlbHRhKSA9PiB7XG4gICAgT2JqZWN0LmtleXMoZGF0YVJvdykuZm9yRWFjaChjb2x1bW5Qcm9wID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gcGFyc2VJbnQoY29sdW1uUHJvcCwgMTApO1xuICAgICAgY2hhbmdlcy5wdXNoKFt0aGlzLmluZGV4ICsgcm93SW5kZXhEZWx0YSwgaXNOYU4oY29sdW1uSW5kZXgpID8gY29sdW1uUHJvcCA6IGNvbHVtbkluZGV4LCBkYXRhUm93W2NvbHVtblByb3BdXSk7XG4gICAgfSk7XG4gIH0pO1xuICBpbnN0YW5jZS5hbHRlcignaW5zZXJ0X3Jvd19hYm92ZScsIHRoaXMuaW5kZXgsIHRoaXMuZGF0YS5sZW5ndGgsICdVbmRvUmVkby51bmRvJyk7XG4gIHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKF9yZWYyID0+IHtcbiAgICBsZXQgW3Jvd0luZGV4LCBjb2x1bW5JbmRleCwgY2VsbE1ldGFdID0gX3JlZjI7XG4gICAgaW5zdGFuY2Uuc2V0Q2VsbE1ldGFPYmplY3Qocm93SW5kZXgsIGNvbHVtbkluZGV4LCBjZWxsTWV0YSk7XG4gIH0pO1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJWaWV3UmVuZGVyJywgdW5kb25lQ2FsbGJhY2spO1xuICBpbnN0YW5jZS5zZXRTb3VyY2VEYXRhQXRDZWxsKGNoYW5nZXMsIG51bGwsIG51bGwsICdVbmRvUmVkby51bmRvJyk7XG4gIGluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSk7XG59O1xuVW5kb1JlZG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCByZWRvbmVDYWxsYmFjaykge1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJSZW1vdmVSb3cnLCByZWRvbmVDYWxsYmFjayk7XG4gIGluc3RhbmNlLmFsdGVyKCdyZW1vdmVfcm93JywgdGhpcy5pbmRleCwgdGhpcy5kYXRhLmxlbmd0aCwgJ1VuZG9SZWRvLnJlZG8nKTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGNvbHVtbiBhY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgVGhlIG51bWJlciBvZiBjcmVhdGVkIGNvbHVtbnMuXG4gKi9cblVuZG9SZWRvLkNyZWF0ZUNvbHVtbkFjdGlvbiA9IGZ1bmN0aW9uIChpbmRleCwgYW1vdW50KSB7XG4gIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgdGhpcy5hbW91bnQgPSBhbW91bnQ7XG4gIHRoaXMuYWN0aW9uVHlwZSA9ICdpbnNlcnRfY29sJztcbn07XG4oMCwgX29iamVjdC5pbmhlcml0KShVbmRvUmVkby5DcmVhdGVDb2x1bW5BY3Rpb24sIFVuZG9SZWRvLkFjdGlvbik7XG5VbmRvUmVkby5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHVuZG9uZUNhbGxiYWNrKSB7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlclJlbW92ZUNvbCcsIHVuZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2UuYWx0ZXIoJ3JlbW92ZV9jb2wnLCB0aGlzLmluZGV4LCB0aGlzLmFtb3VudCwgJ1VuZG9SZWRvLnVuZG8nKTtcbn07XG5VbmRvUmVkby5DcmVhdGVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG8gPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHJlZG9uZUNhbGxiYWNrKSB7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlckNyZWF0ZUNvbCcsIHJlZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2UuYWx0ZXIoJ2luc2VydF9jb2xfc3RhcnQnLCB0aGlzLmluZGV4LCB0aGlzLmFtb3VudCwgJ1VuZG9SZWRvLnJlZG8nKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGNvbHVtbiBhY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ZXMgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIHJlbW92ZWQgZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IGhlYWRlcnMgVGhlIGhlYWRlciB2YWx1ZXMuXG4gKiBAcGFyYW0ge251bWJlcltdfSBjb2x1bW5Qb3NpdGlvbnMgVGhlIGNvbHVtbiBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHJvd1Bvc2l0aW9ucyBUaGUgcm93IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpeGVkQ29sdW1uc1N0YXJ0IE51bWJlciBvZiBmaXhlZCBjb2x1bW5zIG9uIHRoZSBsZWZ0LiBSZW1vdmUgY29sdW1uIGFjdGlvbiBjaGFuZ2UgaXQgc29tZXRpbWVzLlxuICogQHBhcmFtIHtBcnJheX0gcmVtb3ZlZENlbGxNZXRhcyBMaXN0IG9mIHJlbW92ZWQgY2VsbCBtZXRhcy5cbiAqL1xuVW5kb1JlZG8uUmVtb3ZlQ29sdW1uQWN0aW9uID0gZnVuY3Rpb24gKGluZGV4LCBpbmRleGVzLCBkYXRhLCBoZWFkZXJzLCBjb2x1bW5Qb3NpdGlvbnMsIHJvd1Bvc2l0aW9ucywgZml4ZWRDb2x1bW5zU3RhcnQsIHJlbW92ZWRDZWxsTWV0YXMpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgdGhpcy5pbmRleGVzID0gaW5kZXhlcztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5hbW91bnQgPSB0aGlzLmRhdGFbMF0ubGVuZ3RoO1xuICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB0aGlzLmNvbHVtblBvc2l0aW9ucyA9IGNvbHVtblBvc2l0aW9ucy5zbGljZSgwKTtcbiAgdGhpcy5yb3dQb3NpdGlvbnMgPSByb3dQb3NpdGlvbnMuc2xpY2UoMCk7XG4gIHRoaXMuYWN0aW9uVHlwZSA9ICdyZW1vdmVfY29sJztcbiAgdGhpcy5maXhlZENvbHVtbnNTdGFydCA9IGZpeGVkQ29sdW1uc1N0YXJ0O1xuICB0aGlzLnJlbW92ZWRDZWxsTWV0YXMgPSByZW1vdmVkQ2VsbE1ldGFzO1xufTtcbigwLCBfb2JqZWN0LmluaGVyaXQpKFVuZG9SZWRvLlJlbW92ZUNvbHVtbkFjdGlvbiwgVW5kb1JlZG8uQWN0aW9uKTtcblVuZG9SZWRvLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUudW5kbyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgdW5kb25lQ2FsbGJhY2spIHtcbiAgY29uc3Qgc2V0dGluZ3MgPSBpbnN0YW5jZS5nZXRTZXR0aW5ncygpO1xuXG4gIC8vIENoYW5naW5nIGJ5IHRoZSByZWZlcmVuY2UgYXMgYHVwZGF0ZVNldHRpbmdzYCBkb2Vzbid0IHdvcmsgdGhlIGJlc3QuXG4gIHNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0ID0gdGhpcy5maXhlZENvbHVtbnNTdGFydDtcbiAgY29uc3QgYXNjZW5kaW5nSW5kZXhlcyA9IHRoaXMuaW5kZXhlcy5zbGljZSgwKS5zb3J0KCk7XG4gIGNvbnN0IHNvcnRCeUluZGV4ZXMgPSAoZWxlbSwgaiwgYXJyKSA9PiBhcnJbdGhpcy5pbmRleGVzLmluZGV4T2YoYXNjZW5kaW5nSW5kZXhlc1tqXSldO1xuICBjb25zdCByZW1vdmVkRGF0YUxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gIGNvbnN0IHNvcnRlZERhdGEgPSBbXTtcbiAgZm9yIChsZXQgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IHJlbW92ZWREYXRhTGVuZ3RoOyByb3dJbmRleCsrKSB7XG4gICAgc29ydGVkRGF0YS5wdXNoKCgwLCBfYXJyYXkuYXJyYXlNYXApKHRoaXMuZGF0YVtyb3dJbmRleF0sIHNvcnRCeUluZGV4ZXMpKTtcbiAgfVxuICBjb25zdCBzb3J0ZWRIZWFkZXJzID0gKDAsIF9hcnJheS5hcnJheU1hcCkodGhpcy5oZWFkZXJzLCBzb3J0QnlJbmRleGVzKTtcbiAgY29uc3QgY2hhbmdlcyA9IFtdO1xuICBpbnN0YW5jZS5hbHRlcignaW5zZXJ0X2NvbF9zdGFydCcsIHRoaXMuaW5kZXhlc1swXSwgdGhpcy5pbmRleGVzLmxlbmd0aCwgJ1VuZG9SZWRvLnVuZG8nKTtcbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGluc3RhbmNlLmdldFNvdXJjZURhdGFBcnJheSgpLCAocm93RGF0YSwgcm93SW5kZXgpID0+IHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoYXNjZW5kaW5nSW5kZXhlcywgKGNoYW5nZWRJbmRleCwgY29udGlxdWVzSW5kZXgpID0+IHtcbiAgICAgIHJvd0RhdGFbY2hhbmdlZEluZGV4XSA9IHNvcnRlZERhdGFbcm93SW5kZXhdW2NvbnRpcXVlc0luZGV4XTtcbiAgICAgIGNoYW5nZXMucHVzaChbcm93SW5kZXgsIGNoYW5nZWRJbmRleCwgcm93RGF0YVtjaGFuZ2VkSW5kZXhdXSk7XG4gICAgfSk7XG4gIH0pO1xuICBpbnN0YW5jZS5zZXRTb3VyY2VEYXRhQXRDZWxsKGNoYW5nZXMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnVW5kb1JlZG8udW5kbycpO1xuICBpZiAodHlwZW9mIHRoaXMuaGVhZGVycyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc29ydGVkSGVhZGVycywgKGhlYWRlckRhdGEsIGNvbHVtbkluZGV4KSA9PiB7XG4gICAgICBpbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbYXNjZW5kaW5nSW5kZXhlc1tjb2x1bW5JbmRleF1dID0gaGVhZGVyRGF0YTtcbiAgICB9KTtcbiAgfVxuICB0aGlzLnJlbW92ZWRDZWxsTWV0YXMuZm9yRWFjaChfcmVmMyA9PiB7XG4gICAgbGV0IFtyb3dJbmRleCwgY29sdW1uSW5kZXgsIGNlbGxNZXRhXSA9IF9yZWYzO1xuICAgIGluc3RhbmNlLnNldENlbGxNZXRhT2JqZWN0KHJvd0luZGV4LCBjb2x1bW5JbmRleCwgY2VsbE1ldGEpO1xuICB9KTtcbiAgaW5zdGFuY2UuYmF0Y2hFeGVjdXRpb24oKCkgPT4ge1xuICAgIC8vIFJlc3RvcmUgcm93IHNlcXVlbmNlIGluIGEgY2FzZSB3aGVuIGFsbCBjb2x1bW5zIGFyZSByZW1vdmVkLiB0aGUgb3JpZ2luYWxcbiAgICAvLyByb3cgc2VxdWVuY2UgaXMgbG9zdCBpbiB0aGF0IGNhc2UuXG4gICAgaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93UG9zaXRpb25zKTtcbiAgICBpbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpO1xuICB9LCB0cnVlKTtcbiAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHVuZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2UucmVuZGVyKCk7XG59O1xuVW5kb1JlZG8uUmVtb3ZlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCByZWRvbmVDYWxsYmFjaykge1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJSZW1vdmVDb2wnLCByZWRvbmVDYWxsYmFjayk7XG4gIGluc3RhbmNlLmFsdGVyKCdyZW1vdmVfY29sJywgdGhpcy5pbmRleCwgdGhpcy5hbW91bnQsICdVbmRvUmVkby5yZWRvJyk7XG59O1xuXG4vKipcbiAqIENlbGwgYWxpZ25tZW50IGFjdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc3RhdGVCZWZvcmUgVGhlIHByZXZpb3VzIHN0YXRlLlxuICogQHBhcmFtIHtvYmplY3R9IHJhbmdlIFRoZSBjZWxsIHJhbmdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGFsaWdubWVudCAoXCJ0b3BcIiwgXCJsZWZ0XCIsIFwiYm90dG9tXCIgb3IgXCJyaWdodFwiKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbGlnbm1lbnQgVGhlIGFsaWdubWVudCBDU1MgY2xhc3MuXG4gKi9cblVuZG9SZWRvLkNlbGxBbGlnbm1lbnRBY3Rpb24gPSBmdW5jdGlvbiAoc3RhdGVCZWZvcmUsIHJhbmdlLCB0eXBlLCBhbGlnbm1lbnQpIHtcbiAgdGhpcy5zdGF0ZUJlZm9yZSA9IHN0YXRlQmVmb3JlO1xuICB0aGlzLnJhbmdlID0gcmFuZ2U7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuYWxpZ25tZW50ID0gYWxpZ25tZW50O1xufTtcblVuZG9SZWRvLkNlbGxBbGlnbm1lbnRBY3Rpb24ucHJvdG90eXBlLnVuZG8gPSBmdW5jdGlvbiAoaW5zdGFuY2UsIHVuZG9uZUNhbGxiYWNrKSB7XG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnJhbmdlLCByYW5nZSA9PiB7XG4gICAgcmFuZ2UuZm9yQWxsKChyb3csIGNvbCkgPT4ge1xuICAgICAgLy8gQWxpZ25tZW50IGNsYXNzZXMgc2hvdWxkIG9ubHkgY29sbGVjdGVkIHdpdGhpbiBjZWxsIHJhbmdlcy4gV2Ugc2tpcCBoZWFkZXIgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocm93ID49IDAgJiYgY29sID49IDApIHtcbiAgICAgICAgaW5zdGFuY2Uuc2V0Q2VsbE1ldGEocm93LCBjb2wsICdjbGFzc05hbWUnLCB0aGlzLnN0YXRlQmVmb3JlW3Jvd11bY29sXSB8fCAnIGh0TGVmdCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHVuZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2UucmVuZGVyKCk7XG59O1xuVW5kb1JlZG8uQ2VsbEFsaWdubWVudEFjdGlvbi5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgdW5kb25lQ2FsbGJhY2spIHtcbiAgKDAsIF91dGlscy5hbGlnbikodGhpcy5yYW5nZSwgdGhpcy50eXBlLCB0aGlzLmFsaWdubWVudCwgKHJvdywgY29sKSA9PiBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3csIGNvbCksIChyb3csIGNvbCwga2V5LCB2YWx1ZSkgPT4gaW5zdGFuY2Uuc2V0Q2VsbE1ldGEocm93LCBjb2wsIGtleSwgdmFsdWUpKTtcbiAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHVuZG9uZUNhbGxiYWNrKTtcbiAgaW5zdGFuY2UucmVuZGVyKCk7XG59O1xuXG4vKipcbiAqIEZpbHRlcnMgYWN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBjb25kaXRpb25zU3RhY2sgQW4gYXJyYXkgb2YgdGhlIGZpbHRlciBjb25kaXRpb24uXG4gKi9cblVuZG9SZWRvLkZpbHRlcnNBY3Rpb24gPSBmdW5jdGlvbiAoY29uZGl0aW9uc1N0YWNrKSB7XG4gIHRoaXMuY29uZGl0aW9uc1N0YWNrID0gY29uZGl0aW9uc1N0YWNrO1xuICB0aGlzLmFjdGlvblR5cGUgPSAnZmlsdGVyJztcbn07XG4oMCwgX29iamVjdC5pbmhlcml0KShVbmRvUmVkby5GaWx0ZXJzQWN0aW9uLCBVbmRvUmVkby5BY3Rpb24pO1xuVW5kb1JlZG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUudW5kbyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgdW5kb25lQ2FsbGJhY2spIHtcbiAgY29uc3QgZmlsdGVycyA9IGluc3RhbmNlLmdldFBsdWdpbignZmlsdGVycycpO1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJWaWV3UmVuZGVyJywgdW5kb25lQ2FsbGJhY2spO1xuICBmaWx0ZXJzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjay5zbGljZSgwLCB0aGlzLmNvbmRpdGlvbnNTdGFjay5sZW5ndGggLSAxKSk7XG4gIGZpbHRlcnMuZmlsdGVyKCk7XG59O1xuVW5kb1JlZG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUucmVkbyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgcmVkb25lQ2FsbGJhY2spIHtcbiAgY29uc3QgZmlsdGVycyA9IGluc3RhbmNlLmdldFBsdWdpbignZmlsdGVycycpO1xuICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJWaWV3UmVuZGVyJywgcmVkb25lQ2FsbGJhY2spO1xuICBmaWx0ZXJzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjayk7XG4gIGZpbHRlcnMuZmlsdGVyKCk7XG59O1xuXG4vKipcbiAqIE1lcmdlIENlbGxzIGFjdGlvbi5cbiAqXG4gKiBAdXRpbFxuICovXG5jbGFzcyBNZXJnZUNlbGxzQWN0aW9uIGV4dGVuZHMgVW5kb1JlZG8uQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2UsIGNlbGxSYW5nZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jZWxsUmFuZ2UgPSBjZWxsUmFuZ2U7XG4gICAgY29uc3QgdG9wU3RhcnRDb3JuZXIgPSB0aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO1xuICAgIGNvbnN0IGJvdHRvbUVuZENvcm5lciA9IHRoaXMuY2VsbFJhbmdlLmdldEJvdHRvbUVuZENvcm5lcigpO1xuICAgIHRoaXMucmFuZ2VEYXRhID0gaW5zdGFuY2UuZ2V0RGF0YSh0b3BTdGFydENvcm5lci5yb3csIHRvcFN0YXJ0Q29ybmVyLmNvbCwgYm90dG9tRW5kQ29ybmVyLnJvdywgYm90dG9tRW5kQ29ybmVyLmNvbCk7XG4gIH1cbiAgdW5kbyhpbnN0YW5jZSwgdW5kb25lQ2FsbGJhY2spIHtcbiAgICBjb25zdCBtZXJnZUNlbGxzUGx1Z2luID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtZXJnZUNlbGxzJyk7XG4gICAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHVuZG9uZUNhbGxiYWNrKTtcbiAgICBtZXJnZUNlbGxzUGx1Z2luLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwgdHJ1ZSk7XG4gICAgY29uc3QgdG9wU3RhcnRDb3JuZXIgPSB0aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO1xuICAgIGluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KHRvcFN0YXJ0Q29ybmVyLnJvdywgdG9wU3RhcnRDb3JuZXIuY29sLCB0aGlzLnJhbmdlRGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdNZXJnZUNlbGxzJyk7XG4gIH1cbiAgcmVkbyhpbnN0YW5jZSwgcmVkb25lQ2FsbGJhY2spIHtcbiAgICBjb25zdCBtZXJnZUNlbGxzUGx1Z2luID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtZXJnZUNlbGxzJyk7XG4gICAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHJlZG9uZUNhbGxiYWNrKTtcbiAgICBtZXJnZUNlbGxzUGx1Z2luLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpO1xuICB9XG59XG5VbmRvUmVkby5NZXJnZUNlbGxzQWN0aW9uID0gTWVyZ2VDZWxsc0FjdGlvbjtcblxuLyoqXG4gKiBVbm1lcmdlIENlbGxzIGFjdGlvbi5cbiAqXG4gKiBAdXRpbFxuICovXG5jbGFzcyBVbm1lcmdlQ2VsbHNBY3Rpb24gZXh0ZW5kcyBVbmRvUmVkby5BY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZSwgY2VsbFJhbmdlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNlbGxSYW5nZSA9IGNlbGxSYW5nZTtcbiAgfVxuICB1bmRvKGluc3RhbmNlLCB1bmRvbmVDYWxsYmFjaykge1xuICAgIGNvbnN0IG1lcmdlQ2VsbHNQbHVnaW4gPSBpbnN0YW5jZS5nZXRQbHVnaW4oJ21lcmdlQ2VsbHMnKTtcbiAgICBpbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJWaWV3UmVuZGVyJywgdW5kb25lQ2FsbGJhY2spO1xuICAgIG1lcmdlQ2VsbHNQbHVnaW4ubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwgdHJ1ZSk7XG4gIH1cbiAgcmVkbyhpbnN0YW5jZSwgcmVkb25lQ2FsbGJhY2spIHtcbiAgICBjb25zdCBtZXJnZUNlbGxzUGx1Z2luID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtZXJnZUNlbGxzJyk7XG4gICAgaW5zdGFuY2UuYWRkSG9va09uY2UoJ2FmdGVyVmlld1JlbmRlcicsIHJlZG9uZUNhbGxiYWNrKTtcbiAgICBtZXJnZUNlbGxzUGx1Z2luLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gIH1cbn1cblVuZG9SZWRvLlVubWVyZ2VDZWxsc0FjdGlvbiA9IFVubWVyZ2VDZWxsc0FjdGlvbjtcblxuLyoqXG4gKiBNYW51YWxSb3dNb3ZlIGFjdGlvbi5cbiAqXG4gKiBAVE9ETyByZW1vdmVSb3cgdW5kbyBzaG91bGQgd29ya3Mgb24gbG9naWNhbCBpbmRleFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyW119IHJvd3MgQW4gYXJyYXkgd2l0aCBtb3ZlZCByb3dzLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVGhlIGRlc3RpbmF0aW9uIGluZGV4LlxuICovXG5VbmRvUmVkby5Sb3dNb3ZlQWN0aW9uID0gZnVuY3Rpb24gKHJvd3MsIGZpbmFsSW5kZXgpIHtcbiAgdGhpcy5yb3dzID0gcm93cy5zbGljZSgpO1xuICB0aGlzLmZpbmFsUm93SW5kZXggPSBmaW5hbEluZGV4O1xuICB0aGlzLmFjdGlvblR5cGUgPSAncm93X21vdmUnO1xufTtcbigwLCBfb2JqZWN0LmluaGVyaXQpKFVuZG9SZWRvLlJvd01vdmVBY3Rpb24sIFVuZG9SZWRvLkFjdGlvbik7XG5VbmRvUmVkby5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS51bmRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCB1bmRvbmVDYWxsYmFjaykge1xuICBjb25zdCBtYW51YWxSb3dNb3ZlID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtYW51YWxSb3dNb3ZlJyk7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlclZpZXdSZW5kZXInLCB1bmRvbmVDYWxsYmFjayk7XG4gIGNvbnN0IHJvd01vdmVzID0gKDAsIF9tb3Zlcy5nZXRNb3ZlcykodGhpcy5yb3dzLCB0aGlzLmZpbmFsUm93SW5kZXgsIGluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKTtcbiAgcm93TW92ZXMucmV2ZXJzZSgpLmZvckVhY2goX3JlZjQgPT4ge1xuICAgIGxldCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gX3JlZjQ7XG4gICAgaWYgKGZyb20gPCB0bykge1xuICAgICAgdG8gLT0gMTtcbiAgICB9XG4gICAgbWFudWFsUm93TW92ZS5tb3ZlUm93KHRvLCBmcm9tKTtcbiAgfSk7XG4gIGluc3RhbmNlLnJlbmRlcigpO1xuICBpbnN0YW5jZS5kZXNlbGVjdENlbGwoKTtcbiAgaW5zdGFuY2Uuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sIHRoaXMucm93c1swXSArIHRoaXMucm93cy5sZW5ndGggLSAxKTtcbn07XG5VbmRvUmVkby5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCByZWRvbmVDYWxsYmFjaykge1xuICBjb25zdCBtYW51YWxSb3dNb3ZlID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtYW51YWxSb3dNb3ZlJyk7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlclZpZXdSZW5kZXInLCByZWRvbmVDYWxsYmFjayk7XG4gIG1hbnVhbFJvd01vdmUubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksIHRoaXMuZmluYWxSb3dJbmRleCk7XG4gIGluc3RhbmNlLnJlbmRlcigpO1xuICBpbnN0YW5jZS5kZXNlbGVjdENlbGwoKTtcbiAgaW5zdGFuY2Uuc2VsZWN0Um93cyh0aGlzLmZpbmFsUm93SW5kZXgsIHRoaXMuZmluYWxSb3dJbmRleCArIHRoaXMucm93cy5sZW5ndGggLSAxKTtcbn07XG5cbi8qKlxuICogTWFudWFsQ29sdW1uTW92ZSBhY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyW119IGNvbHVtbnMgQW4gYXJyYXkgd2l0aCBtb3ZlZCBjb2x1bW5zLlxuICogQHBhcmFtIHtudW1iZXJ9IGZpbmFsSW5kZXggVGhlIGRlc3RpbmF0aW9uIGluZGV4LlxuICovXG5VbmRvUmVkby5Db2x1bW5Nb3ZlQWN0aW9uID0gZnVuY3Rpb24gKGNvbHVtbnMsIGZpbmFsSW5kZXgpIHtcbiAgdGhpcy5jb2x1bW5zID0gY29sdW1ucy5zbGljZSgpO1xuICB0aGlzLmZpbmFsQ29sdW1uSW5kZXggPSBmaW5hbEluZGV4O1xuICB0aGlzLmFjdGlvblR5cGUgPSAnY29sX21vdmUnO1xufTtcbigwLCBfb2JqZWN0LmluaGVyaXQpKFVuZG9SZWRvLkNvbHVtbk1vdmVBY3Rpb24sIFVuZG9SZWRvLkFjdGlvbik7XG5VbmRvUmVkby5Db2x1bW5Nb3ZlQWN0aW9uLnByb3RvdHlwZS51bmRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCB1bmRvbmVDYWxsYmFjaykge1xuICBjb25zdCBtYW51YWxDb2x1bW5Nb3ZlID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtYW51YWxDb2x1bW5Nb3ZlJyk7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlclZpZXdSZW5kZXInLCB1bmRvbmVDYWxsYmFjayk7XG4gIGNvbnN0IGNvbHVtbk1vdmVzID0gKDAsIF9tb3Zlcy5nZXRNb3ZlcykodGhpcy5jb2x1bW5zLCB0aGlzLmZpbmFsQ29sdW1uSW5kZXgsIGluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKTtcbiAgY29sdW1uTW92ZXMucmV2ZXJzZSgpLmZvckVhY2goX3JlZjUgPT4ge1xuICAgIGxldCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gX3JlZjU7XG4gICAgaWYgKGZyb20gPCB0bykge1xuICAgICAgdG8gLT0gMTtcbiAgICB9XG4gICAgbWFudWFsQ29sdW1uTW92ZS5tb3ZlQ29sdW1uKHRvLCBmcm9tKTtcbiAgfSk7XG4gIGluc3RhbmNlLnJlbmRlcigpO1xuICBpbnN0YW5jZS5kZXNlbGVjdENlbGwoKTtcbiAgaW5zdGFuY2Uuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sIHRoaXMuY29sdW1uc1swXSArIHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKTtcbn07XG5VbmRvUmVkby5Db2x1bW5Nb3ZlQWN0aW9uLnByb3RvdHlwZS5yZWRvID0gZnVuY3Rpb24gKGluc3RhbmNlLCByZWRvbmVDYWxsYmFjaykge1xuICBjb25zdCBtYW51YWxDb2x1bW5Nb3ZlID0gaW5zdGFuY2UuZ2V0UGx1Z2luKCdtYW51YWxDb2x1bW5Nb3ZlJyk7XG4gIGluc3RhbmNlLmFkZEhvb2tPbmNlKCdhZnRlclZpZXdSZW5kZXInLCByZWRvbmVDYWxsYmFjayk7XG4gIG1hbnVhbENvbHVtbk1vdmUubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksIHRoaXMuZmluYWxDb2x1bW5JbmRleCk7XG4gIGluc3RhbmNlLnJlbmRlcigpO1xuICBpbnN0YW5jZS5kZXNlbGVjdENlbGwoKTtcbiAgaW5zdGFuY2Uuc2VsZWN0Q29sdW1ucyh0aGlzLmZpbmFsQ29sdW1uSW5kZXgsIHRoaXMuZmluYWxDb2x1bW5JbmRleCArIHRoaXMuY29sdW1ucy5sZW5ndGggLSAxKTtcbn07XG5cbi8qKlxuICogRW5hYmxpbmcgYW5kIGRpc2FibGluZyBwbHVnaW4gYW5kIGF0dGFjaGluZyBpdHMgdG8gYW4gaW5zdGFuY2UuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVW5kb1JlZG8ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNldHRpbmdzID0gdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnVuZG87XG4gIGNvbnN0IHBsdWdpbkVuYWJsZWQgPSB0eXBlb2Ygc2V0dGluZ3MgPT09ICd1bmRlZmluZWQnIHx8IHNldHRpbmdzO1xuICBpZiAoIXRoaXMuaW5zdGFuY2UudW5kb1JlZG8pIHtcbiAgICB0aGlzLmluc3RhbmNlLnVuZG9SZWRvID0gdGhpcztcbiAgfVxuICBpZiAocGx1Z2luRW5hYmxlZCkge1xuICAgIHRoaXMuaW5zdGFuY2UudW5kb1JlZG8uZW5hYmxlKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pbnN0YW5jZS51bmRvUmVkby5kaXNhYmxlKCk7XG4gIH1cbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIHNob3J0Y3V0cyByZXNwb25zaWJsZSBmb3IgcGVyZm9ybWluZyB1bmRvL3JlZG8uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuVW5kb1JlZG8ucHJvdG90eXBlLnJlZ2lzdGVyU2hvcnRjdXRzID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpO1xuICBjb25zdCBncmlkQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdncmlkJyk7XG4gIGNvbnN0IHJ1bk9ubHlJZiA9IGV2ZW50ID0+IHtcbiAgICByZXR1cm4gIWV2ZW50LmFsdEtleTsgLy8gcmlnaHQgQUxUIGluIHNvbWUgc3lzdGVtcyB0cmlnZ2VycyBBTFQrQ1RSXG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBydW5Pbmx5SWYsXG4gICAgZ3JvdXA6IFNIT1JUQ1VUU19HUk9VUFxuICB9O1xuICBncmlkQ29udGV4dC5hZGRTaG9ydGN1dHMoW3tcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAneiddXSxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgdGhpcy51bmRvKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5czogW1snQ29udHJvbC9NZXRhJywgJ3knXSwgWydDb250cm9sL01ldGEnLCAnU2hpZnQnLCAneiddXSxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgdGhpcy5yZWRvKCk7XG4gICAgfVxuICB9XSwgY29uZmlnKTtcbn07XG5cbi8qKlxuICogVW5yZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHBlcmZvcm1pbmcgdW5kby9yZWRvLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cblVuZG9SZWRvLnByb3RvdHlwZS51bnJlZ2lzdGVyU2hvcnRjdXRzID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzaG9ydGN1dE1hbmFnZXIgPSB0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpO1xuICBjb25zdCBncmlkQ29udGV4dCA9IHNob3J0Y3V0TWFuYWdlci5nZXRDb250ZXh0KCdncmlkJyk7XG4gIGdyaWRDb250ZXh0LnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU0hPUlRDVVRTX0dST1VQKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheX0gY2hhbmdlcyAyRCBhcnJheSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggb2YgdGhlIGVkaXRlZCBjZWxscy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgU3RyaW5nIHRoYXQgaWRlbnRpZmllcyBzb3VyY2Ugb2YgaG9vayBjYWxsLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIG9uQWZ0ZXJDaGFuZ2UoY2hhbmdlcywgc291cmNlKSB7XG4gIGNvbnN0IGluc3RhbmNlID0gdGhpcztcbiAgaWYgKHNvdXJjZSA9PT0gJ2xvYWREYXRhJykge1xuICAgIHJldHVybiBpbnN0YW5jZS51bmRvUmVkby5jbGVhcigpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBleHBvc2VVbmRvUmVkb01ldGhvZHMoaW5zdGFuY2UpIHtcbiAgLyoqXG4gICAqIHtAbGluayBVbmRvUmVkbyN1bmRvfS5cbiAgICpcbiAgICogQGFsaWFzIHVuZG9cbiAgICogQG1lbWJlcm9mISBDb3JlI1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGluc3RhbmNlLnVuZG8gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLnVuZG9SZWRvLnVuZG8oKTtcbiAgfTtcblxuICAvKipcbiAgICoge0BsaW5rIFVuZG9SZWRvI3JlZG99LlxuICAgKlxuICAgKiBAYWxpYXMgcmVkb1xuICAgKiBAbWVtYmVyb2YhIENvcmUjXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaW5zdGFuY2UucmVkbyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UudW5kb1JlZG8ucmVkbygpO1xuICB9O1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgVW5kb1JlZG8jaXNVbmRvQXZhaWxhYmxlfS5cbiAgICpcbiAgICogQGFsaWFzIGlzVW5kb0F2YWlsYWJsZVxuICAgKiBAbWVtYmVyb2YhIENvcmUjXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaW5zdGFuY2UuaXNVbmRvQXZhaWxhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnN0YW5jZS51bmRvUmVkby5pc1VuZG9BdmFpbGFibGUoKTtcbiAgfTtcblxuICAvKipcbiAgICoge0BsaW5rIFVuZG9SZWRvI2lzUmVkb0F2YWlsYWJsZX0uXG4gICAqXG4gICAqIEBhbGlhcyBpc1JlZG9BdmFpbGFibGVcbiAgICogQG1lbWJlcm9mISBDb3JlI1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGluc3RhbmNlLmlzUmVkb0F2YWlsYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UudW5kb1JlZG8uaXNSZWRvQXZhaWxhYmxlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHtAbGluayBVbmRvUmVkbyNjbGVhcn0uXG4gICAqXG4gICAqIEBhbGlhcyBjbGVhclVuZG9cbiAgICogQG1lbWJlcm9mISBDb3JlI1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGluc3RhbmNlLmNsZWFyVW5kbyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5zdGFuY2UudW5kb1JlZG8uY2xlYXIoKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NvcmV9IGluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUV4cG9zZWRVbmRvUmVkb01ldGhvZHMoaW5zdGFuY2UpIHtcbiAgZGVsZXRlIGluc3RhbmNlLnVuZG87XG4gIGRlbGV0ZSBpbnN0YW5jZS5yZWRvO1xuICBkZWxldGUgaW5zdGFuY2UuaXNVbmRvQXZhaWxhYmxlO1xuICBkZWxldGUgaW5zdGFuY2UuaXNSZWRvQXZhaWxhYmxlO1xuICBkZWxldGUgaW5zdGFuY2UuY2xlYXJVbmRvO1xufVxuY29uc3QgaG9vayA9IF9wbHVnaW5Ib29rcy5kZWZhdWx0LmdldFNpbmdsZXRvbigpO1xuaG9vay5hZGQoJ2FmdGVyVXBkYXRlU2V0dGluZ3MnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyRnZXRQbHVnaW47XG4gIChfdGhpcyRnZXRQbHVnaW4gPSB0aGlzLmdldFBsdWdpbigndW5kb1JlZG8nKSkgPT09IG51bGwgfHwgX3RoaXMkZ2V0UGx1Z2luID09PSB2b2lkIDAgfHwgX3RoaXMkZ2V0UGx1Z2luLmluaXQoKTtcbn0pO1xuaG9vay5yZWdpc3RlcignYmVmb3JlVW5kbycpO1xuaG9vay5yZWdpc3RlcignYWZ0ZXJVbmRvJyk7XG5ob29rLnJlZ2lzdGVyKCdiZWZvcmVSZWRvJyk7XG5ob29rLnJlZ2lzdGVyKCdhZnRlclJlZG8nKTtcblVuZG9SZWRvLlBMVUdJTl9LRVkgPSBQTFVHSU5fS0VZO1xuVW5kb1JlZG8uU0VUVElOR19LRVlTID0gdHJ1ZTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFVuZG9SZWRvOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yZWdpc3RlckFsbE1vZHVsZXMgPSByZWdpc3RlckFsbE1vZHVsZXM7XG52YXIgX2VkaXRvcnMgPSByZXF1aXJlKFwiLi9lZGl0b3JzXCIpO1xuZXhwb3J0cy5yZWdpc3RlckFsbEVkaXRvcnMgPSBfZWRpdG9ycy5yZWdpc3RlckFsbEVkaXRvcnM7XG52YXIgX3JlbmRlcmVycyA9IHJlcXVpcmUoXCIuL3JlbmRlcmVyc1wiKTtcbmV4cG9ydHMucmVnaXN0ZXJBbGxSZW5kZXJlcnMgPSBfcmVuZGVyZXJzLnJlZ2lzdGVyQWxsUmVuZGVyZXJzO1xudmFyIF92YWxpZGF0b3JzID0gcmVxdWlyZShcIi4vdmFsaWRhdG9yc1wiKTtcbmV4cG9ydHMucmVnaXN0ZXJBbGxWYWxpZGF0b3JzID0gX3ZhbGlkYXRvcnMucmVnaXN0ZXJBbGxWYWxpZGF0b3JzO1xudmFyIF9jZWxsVHlwZXMgPSByZXF1aXJlKFwiLi9jZWxsVHlwZXNcIik7XG5leHBvcnRzLnJlZ2lzdGVyQWxsQ2VsbFR5cGVzID0gX2NlbGxUeXBlcy5yZWdpc3RlckFsbENlbGxUeXBlcztcbnZhciBfcGx1Z2lucyA9IHJlcXVpcmUoXCIuL3BsdWdpbnNcIik7XG5leHBvcnRzLnJlZ2lzdGVyQWxsUGx1Z2lucyA9IF9wbHVnaW5zLnJlZ2lzdGVyQWxsUGx1Z2lucztcbi8qIGVzbGludC1kaXNhYmxlIGhhbmRzb250YWJsZS9yZXN0cmljdGVkLW1vZHVsZS1pbXBvcnRzICovXG4vLyBTaW5jZSB0aGUgSGFuZHNvbnRhYmxlIHdhcyBtb2R1bGFyaXplZCwgaW1wb3J0aW5nIHNvbWUgc3VibW9kdWxlcyBpc1xuLy8gcmVzdHJpY3RlZC4gSW1wb3J0aW5nIHRoZSBtYWluIGVudHJ5IG9mIHRoZSBzdWJtb2R1bGUgY2FuIG1ha2UgdGhlXG4vLyBcImRlYWRcIiBjb2RlIGVsaW1pbmF0aW9uIHByb2Nlc3MgbW9yZSBkaWZmaWN1bHQgb3IgZXZlbiBpbXBvc3NpYmxlLlxuLy8gVGhlIFwiaGFuZHNvbnRhYmxlL3Jlc3RyaWN0ZWQtbW9kdWxlLWltcG9ydHNcIiBydWxlIGlzIG9uIGd1YXJkLlxuLy8gVGhpcyBmaWxlIGV4cG9ydHMgdGhlIGZ1bmN0aW9ucyB0aGF0IGFsbG93IGluY2x1ZGUgcGFja2FnZXMgdG9cbi8vIHRoZSBCYXNlIHZlcnNpb24gb2YgdGhlIEhhbmRzb250YWJsZSwgc28gdGhhdCdzIHdoeSB0aGUgcnVsZSBpc1xuLy8gZGlzYWJsZWQgaGVyZSAoc2VlIG1vcmUgIzc1MDYpLlxuXG4vKiBlc2xpbnQtZW5hYmxlIGhhbmRzb250YWJsZS9yZXN0cmljdGVkLW1vZHVsZS1pbXBvcnRzICovXG5cbi8qKlxuICogUmVnaXN0ZXJzIGFsbCBhdmFpbGFibGUgSGFuZHNvbnRhYmxlIG1vZHVsZXMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQWxsTW9kdWxlcygpIHtcbiAgKDAsIF9lZGl0b3JzLnJlZ2lzdGVyQWxsRWRpdG9ycykoKTtcbiAgKDAsIF9yZW5kZXJlcnMucmVnaXN0ZXJBbGxSZW5kZXJlcnMpKCk7XG4gICgwLCBfdmFsaWRhdG9ycy5yZWdpc3RlckFsbFZhbGlkYXRvcnMpKCk7XG4gICgwLCBfY2VsbFR5cGVzLnJlZ2lzdGVyQWxsQ2VsbFR5cGVzKSgpO1xuICAoMCwgX3BsdWdpbnMucmVnaXN0ZXJBbGxQbHVnaW5zKSgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5hdXRvY29tcGxldGVSZW5kZXJlciA9IGF1dG9jb21wbGV0ZVJlbmRlcmVyO1xudmFyIF9odG1sUmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vaHRtbFJlbmRlcmVyXCIpO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vdGV4dFJlbmRlcmVyXCIpO1xudmFyIF9ldmVudE1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi8uLi9ldmVudE1hbmFnZXJcIikpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2ExMXkgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9hMTF5XCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IFJFTkRFUkVSX1RZUEUgPSBleHBvcnRzLlJFTkRFUkVSX1RZUEUgPSAnYXV0b2NvbXBsZXRlJztcblxuLyoqXG4gKiBBdXRvY29tcGxldGUgcmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFRoZSByZW5kZXJlZCBjZWxsIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIGNlbGwgbWV0YSBvYmplY3QgKHNlZSB7QGxpbmsgQ29yZSNnZXRDZWxsTWV0YX0pLlxuICovXG5mdW5jdGlvbiBhdXRvY29tcGxldGVSZW5kZXJlcihob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgY29uc3Qge1xuICAgIHJvb3REb2N1bWVudFxuICB9ID0gaG90SW5zdGFuY2U7XG4gIGNvbnN0IHJlbmRlcmVyRnVuYyA9IGNlbGxQcm9wZXJ0aWVzLmFsbG93SHRtbCA/IF9odG1sUmVuZGVyZXIuaHRtbFJlbmRlcmVyIDogX3RleHRSZW5kZXJlci50ZXh0UmVuZGVyZXI7XG4gIGNvbnN0IEFSUk9XID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuICBjb25zdCBpc0FyaWFFbmFibGVkID0gaG90SW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztcbiAgQVJST1cuY2xhc3NOYW1lID0gJ2h0QXV0b2NvbXBsZXRlQXJyb3cnO1xuICBpZiAoaXNBcmlhRW5hYmxlZCkge1xuICAgIEFSUk9XLnNldEF0dHJpYnV0ZSguLi4oMCwgX2ExMXkuQTExWV9ISURERU4pKCkpO1xuICB9XG4gIEFSUk9XLmFwcGVuZENoaWxkKHJvb3REb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShTdHJpbmcuZnJvbUNoYXJDb2RlKDk2NjApKSk7XG4gIHJlbmRlcmVyRnVuYy5hcHBseSh0aGlzLCBbaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzXSk7XG4gIGlmICghVEQuZmlyc3RDaGlsZCkge1xuICAgIC8vIGh0dHA6Ly9qc3BlcmYuY29tL2VtcHR5LW5vZGUtaWYtbmVlZGVkXG4gICAgLy8gb3RoZXJ3aXNlIGVtcHR5IGZpZWxkcyBhcHBlYXIgYm9yZGVybGVzcyBpbiBkZW1vL3JlbmRlcmVycy5odG1sIChJRSlcbiAgICBURC5hcHBlbmRDaGlsZChyb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSgxNjApKSk7IC8vIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL2lzc3Vlcy8xOTQ2XG4gICAgLy8gdGhpcyBpcyBmYXN0ZXIgdGhhbiBpbm5lckhUTUwuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvd2lraS9KYXZhU2NyaXB0LSYtRE9NLXBlcmZvcm1hbmNlLXRpcHNcbiAgfVxuICBURC5pbnNlcnRCZWZvcmUoQVJST1csIFRELmZpcnN0Q2hpbGQpO1xuICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKFRELCAnaHRBdXRvY29tcGxldGUnKTtcbiAgaWYgKCFob3RJbnN0YW5jZS5hY0Fycm93TGlzdGVuZXIpIHtcbiAgICBjb25zdCBldmVudE1hbmFnZXIgPSBuZXcgX2V2ZW50TWFuYWdlci5kZWZhdWx0KGhvdEluc3RhbmNlKTtcblxuICAgIC8vIG5vdCB2ZXJ5IGVsZWdhbnQgYnV0IGVhc3kgYW5kIGZhc3RcbiAgICBob3RJbnN0YW5jZS5hY0Fycm93TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGV2ZW50LnRhcmdldCwgJ2h0QXV0b2NvbXBsZXRlQXJyb3cnKSkge1xuICAgICAgICBob3RJbnN0YW5jZS52aWV3Ll93dC5nZXRTZXR0aW5nKCdvbkNlbGxEYmxDbGljaycsIG51bGwsIGhvdEluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sKSwgVEQpO1xuICAgICAgfVxuICAgIH07XG4gICAgZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaG90SW5zdGFuY2Uucm9vdEVsZW1lbnQsICdtb3VzZWRvd24nLCBob3RJbnN0YW5jZS5hY0Fycm93TGlzdGVuZXIpO1xuXG4gICAgLy8gV2UgbmVlZCB0byB1bmJpbmQgdGhlIGxpc3RlbmVyIGFmdGVyIHRoZSB0YWJsZSBoYXMgYmVlbiBkZXN0cm95ZWRcbiAgICBob3RJbnN0YW5jZS5hZGRIb29rT25jZSgnYWZ0ZXJEZXN0cm95JywgKCkgPT4ge1xuICAgICAgZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgfVxufVxuYXV0b2NvbXBsZXRlUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2F1dG9jb21wbGV0ZVJlbmRlcmVyID0gcmVxdWlyZShcIi4vYXV0b2NvbXBsZXRlUmVuZGVyZXJcIik7XG5leHBvcnRzLlJFTkRFUkVSX1RZUEUgPSBfYXV0b2NvbXBsZXRlUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMuYXV0b2NvbXBsZXRlUmVuZGVyZXIgPSBfYXV0b2NvbXBsZXRlUmVuZGVyZXIuYXV0b2NvbXBsZXRlUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmJhc2VSZW5kZXJlciA9IGJhc2VSZW5kZXJlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbi8qKlxuICogQWRkcyBhcHByb3ByaWF0ZSBDU1MgY2xhc3MgdG8gdGFibGUgY2VsbCwgYmFzZWQgb24gY2VsbFByb3BlcnRpZXMuXG4gKi9cblxuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICdiYXNlJztcblxuLyoqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlbmRlcmVyKGhvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcykge1xuICBjb25zdCBhcmlhRW5hYmxlZCA9IGNlbGxQcm9wZXJ0aWVzLmFyaWFUYWdzO1xuICBjb25zdCBjbGFzc2VzVG9BZGQgPSBbXTtcbiAgY29uc3QgY2xhc3Nlc1RvUmVtb3ZlID0gW107XG4gIGNvbnN0IGF0dHJpYnV0ZXNUb1JlbW92ZSA9IFtdO1xuICBjb25zdCBhdHRyaWJ1dGVzVG9BZGQgPSBbXTtcbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSkge1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoVEQsIGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSk7XG4gIH1cbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5KSB7XG4gICAgY2xhc3Nlc1RvQWRkLnB1c2goY2VsbFByb3BlcnRpZXMucmVhZE9ubHlDZWxsQ2xhc3NOYW1lKTtcbiAgICBpZiAoYXJpYUVuYWJsZWQpIHtcbiAgICAgIGF0dHJpYnV0ZXNUb0FkZC5wdXNoKCgwLCBfYTExeS5BMTFZX1JFQURPTkxZKSgpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYXJpYUVuYWJsZWQpIHtcbiAgICBhdHRyaWJ1dGVzVG9SZW1vdmUucHVzaCgoMCwgX2ExMXkuQTExWV9SRUFET05MWSkoKVswXSk7XG4gIH1cbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLnZhbGlkID09PSBmYWxzZSAmJiBjZWxsUHJvcGVydGllcy5pbnZhbGlkQ2VsbENsYXNzTmFtZSkge1xuICAgIGNsYXNzZXNUb0FkZC5wdXNoKGNlbGxQcm9wZXJ0aWVzLmludmFsaWRDZWxsQ2xhc3NOYW1lKTtcbiAgICBpZiAoYXJpYUVuYWJsZWQpIHtcbiAgICAgIGF0dHJpYnV0ZXNUb0FkZC5wdXNoKCgwLCBfYTExeS5BMTFZX0lOVkFMSUQpKCkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjbGFzc2VzVG9SZW1vdmUucHVzaChjZWxsUHJvcGVydGllcy5pbnZhbGlkQ2VsbENsYXNzTmFtZSk7XG4gICAgaWYgKGFyaWFFbmFibGVkKSB7XG4gICAgICBhdHRyaWJ1dGVzVG9SZW1vdmUucHVzaCgoMCwgX2ExMXkuQTExWV9JTlZBTElEKSgpWzBdKTtcbiAgICB9XG4gIH1cbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLndvcmRXcmFwID09PSBmYWxzZSAmJiBjZWxsUHJvcGVydGllcy5ub1dvcmRXcmFwQ2xhc3NOYW1lKSB7XG4gICAgY2xhc3Nlc1RvQWRkLnB1c2goY2VsbFByb3BlcnRpZXMubm9Xb3JkV3JhcENsYXNzTmFtZSk7XG4gIH1cbiAgaWYgKCF2YWx1ZSAmJiBjZWxsUHJvcGVydGllcy5wbGFjZWhvbGRlcikge1xuICAgIGNsYXNzZXNUb0FkZC5wdXNoKGNlbGxQcm9wZXJ0aWVzLnBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSk7XG4gIH1cbiAgKDAsIF9lbGVtZW50LnJlbW92ZUNsYXNzKShURCwgY2xhc3Nlc1RvUmVtb3ZlKTtcbiAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShURCwgY2xhc3Nlc1RvQWRkKTtcbiAgKDAsIF9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSkoVEQsIGF0dHJpYnV0ZXNUb1JlbW92ZSk7XG4gICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKFRELCBhdHRyaWJ1dGVzVG9BZGQpO1xufVxuYmFzZVJlbmRlcmVyLlJFTkRFUkVSX1RZUEUgPSBSRU5ERVJFUl9UWVBFOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9iYXNlUmVuZGVyZXIgPSByZXF1aXJlKFwiLi9iYXNlUmVuZGVyZXJcIik7XG5leHBvcnRzLlJFTkRFUkVSX1RZUEUgPSBfYmFzZVJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG5leHBvcnRzLmJhc2VSZW5kZXJlciA9IF9iYXNlUmVuZGVyZXIuYmFzZVJlbmRlcmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jaGVja2JveFJlbmRlcmVyID0gY2hlY2tib3hSZW5kZXJlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfYmFzZVJlbmRlcmVyID0gcmVxdWlyZShcIi4uL2Jhc2VSZW5kZXJlclwiKTtcbnZhciBfZXZlbnRNYW5hZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vZXZlbnRNYW5hZ2VyXCIpKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9zaG9ydGN1dENvbnRleHRzID0gcmVxdWlyZShcIi4uLy4uL3Nob3J0Y3V0Q29udGV4dHNcIik7XG52YXIgX3BsdWdpbkhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGx1Z2luSG9va3NcIikpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYTExeVwiKTtcbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uL2kxOG4vY29uc3RhbnRzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IGlzTGlzdGVuaW5nS2V5RG93bkV2ZW50ID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IGlzQ2hlY2tib3hMaXN0ZW5lckFkZGVkID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IEJBRF9WQUxVRV9DTEFTUyA9ICdodEJhZFZhbHVlJztcbmNvbnN0IEFUVFJfUk9XID0gJ2RhdGEtcm93JztcbmNvbnN0IEFUVFJfQ09MVU1OID0gJ2RhdGEtY29sJztcbmNvbnN0IFNIT1JUQ1VUU19HUk9VUCA9ICdjaGVja2JveFJlbmRlcmVyJztcbmNvbnN0IFJFTkRFUkVSX1RZUEUgPSBleHBvcnRzLlJFTkRFUkVSX1RZUEUgPSAnY2hlY2tib3gnO1xuX3BsdWdpbkhvb2tzLmRlZmF1bHQuZ2V0U2luZ2xldG9uKCkuYWRkKCdtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQnLCBmdW5jdGlvbiAoYnVuZGxlU2VlZCwgY2VsbE1ldGEsIGNlbGxWYWx1ZSkge1xuICBjb25zdCB7XG4gICAgbGFiZWwsXG4gICAgdHlwZSxcbiAgICByb3csXG4gICAgY29sdW1uLFxuICAgIHByb3BcbiAgfSA9IGNlbGxNZXRhO1xuICBpZiAodHlwZSAhPT0gUkVOREVSRVJfVFlQRSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGFiZWwpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZTogbGFiZWxWYWx1ZSxcbiAgICAgIHByb3BlcnR5OiBsYWJlbFByb3BlcnR5XG4gICAgfSA9IGxhYmVsO1xuICAgIGxldCBsYWJlbFRleHQgPSBjZWxsVmFsdWU7XG4gICAgaWYgKGxhYmVsVmFsdWUpIHtcbiAgICAgIGxhYmVsVGV4dCA9IHR5cGVvZiBsYWJlbFZhbHVlID09PSAnZnVuY3Rpb24nID8gbGFiZWxWYWx1ZShyb3csIGNvbHVtbiwgcHJvcCwgY2VsbFZhbHVlKSA6IGxhYmVsVmFsdWU7XG4gICAgfSBlbHNlIGlmIChsYWJlbFByb3BlcnR5KSB7XG4gICAgICBjb25zdCBsYWJlbERhdGEgPSB0aGlzLmdldERhdGFBdFJvd1Byb3Aocm93LCBsYWJlbFByb3BlcnR5KTtcbiAgICAgIGxhYmVsVGV4dCA9IGxhYmVsRGF0YSAhPT0gbnVsbCA/IGxhYmVsRGF0YSA6IGNlbGxWYWx1ZTtcbiAgICB9XG4gICAgYnVuZGxlU2VlZCA9IGxhYmVsVGV4dDtcbiAgfVxuICByZXR1cm4gYnVuZGxlU2VlZDtcbn0pO1xuLyoqXG4gKiBDaGVja2JveCByZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb3JlfSBob3RJbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkgKHBhc3NlZCB3aGVuIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cykuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrYm94UmVuZGVyZXIoaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHtcbiAgICByb290RG9jdW1lbnRcbiAgfSA9IGhvdEluc3RhbmNlO1xuICBjb25zdCBhcmlhRW5hYmxlZCA9IGhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7XG4gIF9iYXNlUmVuZGVyZXIuYmFzZVJlbmRlcmVyLmFwcGx5KHRoaXMsIFtob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXNdKTtcbiAgcmVnaXN0ZXJFdmVudHMoaG90SW5zdGFuY2UpO1xuICBsZXQgaW5wdXQgPSBjcmVhdGVJbnB1dChyb290RG9jdW1lbnQpO1xuICBjb25zdCBsYWJlbE9wdGlvbnMgPSBjZWxsUHJvcGVydGllcy5sYWJlbDtcbiAgbGV0IGJhZFZhbHVlID0gZmFsc2U7XG4gIGlmICh0eXBlb2YgY2VsbFByb3BlcnRpZXMuY2hlY2tlZFRlbXBsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNlbGxQcm9wZXJ0aWVzLmNoZWNrZWRUZW1wbGF0ZSA9IHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiBjZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZSA9IGZhbHNlO1xuICB9XG4gICgwLCBfZWxlbWVudC5lbXB0eSkoVEQpOyAvLyBUT0RPIGlkZW50aWZ5IHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGlzIGxpbmUgY2FuIGJlIHJlbW92ZWRcblxuICBpZiAodmFsdWUgPT09IGNlbGxQcm9wZXJ0aWVzLmNoZWNrZWRUZW1wbGF0ZSB8fCAoMCwgX21peGVkLnN0cmluZ2lmeSkodmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGNlbGxQcm9wZXJ0aWVzLmxvY2FsZSkgPT09ICgwLCBfbWl4ZWQuc3RyaW5naWZ5KShjZWxsUHJvcGVydGllcy5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKGNlbGxQcm9wZXJ0aWVzLmxvY2FsZSkpIHtcbiAgICBpbnB1dC5jaGVja2VkID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gY2VsbFByb3BlcnRpZXMudW5jaGVja2VkVGVtcGxhdGUgfHwgKDAsIF9taXhlZC5zdHJpbmdpZnkpKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjZWxsUHJvcGVydGllcy5sb2NhbGUpID09PSAoMCwgX21peGVkLnN0cmluZ2lmeSkoY2VsbFByb3BlcnRpZXMudW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKGNlbGxQcm9wZXJ0aWVzLmxvY2FsZSkpIHtcbiAgICBpbnB1dC5jaGVja2VkID0gZmFsc2U7XG4gIH0gZWxzZSBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KSh2YWx1ZSkpIHtcbiAgICAvLyBkZWZhdWx0IHZhbHVlXG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShpbnB1dCwgJ25vVmFsdWUnKTtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoaW5wdXQsIEJBRF9WQUxVRV9DTEFTUyk7XG4gICAgYmFkVmFsdWUgPSB0cnVlO1xuICB9XG4gICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKGlucHV0LCBbW0FUVFJfUk9XLCByb3ddLCBbQVRUUl9DT0xVTU4sIGNvbF1dKTtcbiAgaWYgKGFyaWFFbmFibGVkKSB7XG4gICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoaW5wdXQsIFsoMCwgX2ExMXkuQTExWV9MQUJFTCkoaW5wdXQuY2hlY2tlZCA/IGhvdEluc3RhbmNlLmdldFRyYW5zbGF0ZWRQaHJhc2UoX2NvbnN0YW50cy5DSEVDS0JPWF9DSEVDS0VEKSA6IGhvdEluc3RhbmNlLmdldFRyYW5zbGF0ZWRQaHJhc2UoX2NvbnN0YW50cy5DSEVDS0JPWF9VTkNIRUNLRUQpKSwgKDAsIF9hMTF5LkExMVlfQ0hFQ0tFRCkoaW5wdXQuY2hlY2tlZCksICgwLCBfYTExeS5BMTFZX0NIRUNLQk9YKSgpXSk7XG4gIH1cbiAgaWYgKCFiYWRWYWx1ZSAmJiBsYWJlbE9wdGlvbnMpIHtcbiAgICBsZXQgbGFiZWxUZXh0ID0gJyc7XG4gICAgaWYgKGxhYmVsT3B0aW9ucy52YWx1ZSkge1xuICAgICAgbGFiZWxUZXh0ID0gdHlwZW9mIGxhYmVsT3B0aW9ucy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IGxhYmVsT3B0aW9ucy52YWx1ZS5jYWxsKHRoaXMsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSkgOiBsYWJlbE9wdGlvbnMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChsYWJlbE9wdGlvbnMucHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IGxhYmVsVmFsdWUgPSBob3RJbnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKHJvdywgbGFiZWxPcHRpb25zLnByb3BlcnR5KTtcbiAgICAgIGxhYmVsVGV4dCA9IGxhYmVsVmFsdWUgIT09IG51bGwgPyBsYWJlbFZhbHVlIDogJyc7XG4gICAgfVxuICAgIGNvbnN0IGxhYmVsID0gY3JlYXRlTGFiZWwocm9vdERvY3VtZW50LCBsYWJlbFRleHQsIGxhYmVsT3B0aW9ucy5zZXBhcmF0ZWQgIT09IHRydWUpO1xuICAgIGlmIChsYWJlbE9wdGlvbnMucG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAobGFiZWxPcHRpb25zLnNlcGFyYXRlZCkge1xuICAgICAgICBURC5hcHBlbmRDaGlsZChsYWJlbCk7XG4gICAgICAgIFRELmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhYmVsLmFwcGVuZENoaWxkKGlucHV0KTtcbiAgICAgICAgaW5wdXQgPSBsYWJlbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFsYWJlbE9wdGlvbnMucG9zaXRpb24gfHwgbGFiZWxPcHRpb25zLnBvc2l0aW9uID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAobGFiZWxPcHRpb25zLnNlcGFyYXRlZCkge1xuICAgICAgICBURC5hcHBlbmRDaGlsZChpbnB1dCk7XG4gICAgICAgIFRELmFwcGVuZENoaWxkKGxhYmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxhYmVsLmluc2VydEJlZm9yZShpbnB1dCwgbGFiZWwuZmlyc3RDaGlsZCk7XG4gICAgICAgIGlucHV0ID0gbGFiZWw7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghbGFiZWxPcHRpb25zIHx8IGxhYmVsT3B0aW9ucyAmJiAhbGFiZWxPcHRpb25zLnNlcGFyYXRlZCkge1xuICAgIFRELmFwcGVuZENoaWxkKGlucHV0KTtcbiAgfVxuICBpZiAoYmFkVmFsdWUpIHtcbiAgICBURC5hcHBlbmRDaGlsZChyb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyNiYWQtdmFsdWUjJykpO1xuICB9XG4gIGlmICghaXNMaXN0ZW5pbmdLZXlEb3duRXZlbnQuaGFzKGhvdEluc3RhbmNlKSkge1xuICAgIGlzTGlzdGVuaW5nS2V5RG93bkV2ZW50LnNldChob3RJbnN0YW5jZSwgdHJ1ZSk7XG4gICAgcmVnaXN0ZXJTaG9ydGN1dHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBzaG9ydGN1dHMgcmVzcG9uc2libGUgZm9yIHRvZ2dsaW5nIGNoZWNrYm94IHN0YXRlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVnaXN0ZXJTaG9ydGN1dHMoKSB7XG4gICAgY29uc3Qgc2hvcnRjdXRNYW5hZ2VyID0gaG90SW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCk7XG4gICAgY29uc3QgZ3JpZENvbnRleHQgPSBzaG9ydGN1dE1hbmFnZXIuZ2V0Q29udGV4dCgnZ3JpZCcpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGdyb3VwOiBTSE9SVENVVFNfR1JPVVAsXG4gICAgICByZWxhdGl2ZVRvR3JvdXA6IF9zaG9ydGN1dENvbnRleHRzLkVESVRPUl9FRElUX0dST1VQLFxuICAgICAgcG9zaXRpb246ICdiZWZvcmUnXG4gICAgfTtcbiAgICBncmlkQ29udGV4dC5hZGRTaG9ydGN1dHMoW3tcbiAgICAgIGtleXM6IFtbJ3NwYWNlJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgY2hhbmdlU2VsZWN0ZWRDaGVja2JveGVzU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuICFhcmVTZWxlY3RlZENoZWNrYm94Q2VsbHMoKTsgLy8gRmFsc2UgYmxvY2tzIG5leHQgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5Ym9hcmQgc2hvcnRjdXQuXG4gICAgICB9LFxuICAgICAgcnVuT25seUlmOiAoKSA9PiB7XG4gICAgICAgIHZhciBfaG90SW5zdGFuY2UkZ2V0U2VsZWM7XG4gICAgICAgIHJldHVybiAoX2hvdEluc3RhbmNlJGdldFNlbGVjID0gaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX2hvdEluc3RhbmNlJGdldFNlbGVjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaG90SW5zdGFuY2UkZ2V0U2VsZWMuaGlnaGxpZ2h0LmlzQ2VsbCgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleXM6IFtbJ2VudGVyJ11dLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgY2hhbmdlU2VsZWN0ZWRDaGVja2JveGVzU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuICFhcmVTZWxlY3RlZENoZWNrYm94Q2VsbHMoKTsgLy8gRmFsc2UgYmxvY2tzIG5leHQgYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5Ym9hcmQgc2hvcnRjdXQuXG4gICAgICB9LFxuICAgICAgcnVuT25seUlmOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICAgICAgcmV0dXJuIGhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuZW50ZXJCZWdpbnNFZGl0aW5nICYmIChyYW5nZSA9PT0gbnVsbCB8fCByYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmFuZ2UuaXNTaW5nbGUoKSkgJiYgcmFuZ2UuaGlnaGxpZ2h0LmlzQ2VsbCgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGtleXM6IFtbJ2RlbGV0ZSddLCBbJ2JhY2tzcGFjZSddXSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XG4gICAgICAgIGNoYW5nZVNlbGVjdGVkQ2hlY2tib3hlc1N0YXRlKHRydWUpO1xuICAgICAgICByZXR1cm4gIWFyZVNlbGVjdGVkQ2hlY2tib3hDZWxscygpOyAvLyBGYWxzZSBibG9ja3MgbmV4dCBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlib2FyZCBzaG9ydGN1dC5cbiAgICAgIH0sXG4gICAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgICAgdmFyIF9ob3RJbnN0YW5jZSRnZXRTZWxlYzI7XG4gICAgICAgIHJldHVybiAoX2hvdEluc3RhbmNlJGdldFNlbGVjMiA9IGhvdEluc3RhbmNlLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpID09PSBudWxsIHx8IF9ob3RJbnN0YW5jZSRnZXRTZWxlYzIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ob3RJbnN0YW5jZSRnZXRTZWxlYzIuaGlnaGxpZ2h0LmlzQ2VsbCgpO1xuICAgICAgfVxuICAgIH1dLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZSBjaGVja2JveCBjaGVja2VkIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1bmNoZWNrQ2hlY2tib3g9ZmFsc2VdIFRoZSBuZXcgXCJjaGVja2VkXCIgc3RhdGUgZm9yIHRoZSBjaGVja2JveCBlbGVtZW50cy5cbiAgICovXG4gIGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGVkQ2hlY2tib3hlc1N0YXRlKCkge1xuICAgIGxldCB1bmNoZWNrQ2hlY2tib3ggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGNvbnN0IHNlbFJhbmdlID0gaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZSgpO1xuICAgIGNvbnN0IGNoYW5nZXNQZXJTdWJTZWxlY3Rpb24gPSBbXTtcbiAgICBsZXQgY2hhbmdlcyA9IFtdO1xuICAgIGxldCBjaGFuZ2VDb3VudGVyID0gMDtcbiAgICBpZiAoIXNlbFJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGtleSA9IDA7IGtleSA8IHNlbFJhbmdlLmxlbmd0aDsga2V5KyspIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93OiBzdGFydFJvdyxcbiAgICAgICAgY29sOiBzdGFydENvbHVtblxuICAgICAgfSA9IHNlbFJhbmdlW2tleV0uZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93OiBlbmRSb3csXG4gICAgICAgIGNvbDogZW5kQ29sdW1uXG4gICAgICB9ID0gc2VsUmFuZ2Vba2V5XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICAgIGZvciAobGV0IHZpc3VhbFJvdyA9IHN0YXJ0Um93OyB2aXN1YWxSb3cgPD0gZW5kUm93OyB2aXN1YWxSb3cgKz0gMSkge1xuICAgICAgICBmb3IgKGxldCB2aXN1YWxDb2x1bW4gPSBzdGFydENvbHVtbjsgdmlzdWFsQ29sdW1uIDw9IGVuZENvbHVtbjsgdmlzdWFsQ29sdW1uICs9IDEpIHtcbiAgICAgICAgICBjb25zdCBjYWNoZWRDZWxsUHJvcGVydGllcyA9IGhvdEluc3RhbmNlLmdldENlbGxNZXRhKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXMgPSB7XG4gICAgICAgICAgICBjaGVja2VkVGVtcGxhdGU6IGNhY2hlZENlbGxQcm9wZXJ0aWVzLmNoZWNrZWRUZW1wbGF0ZSxcbiAgICAgICAgICAgIHVuY2hlY2tlZFRlbXBsYXRlOiBjYWNoZWRDZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGNhY2hlZENlbGxQcm9wZXJ0aWVzLnR5cGUgIT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuICAgICAgICAgIGlmIChjYWNoZWRDZWxsUHJvcGVydGllcy5yZWFkT25seSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGVkQ2VsbFByb3BlcnRpZXMuY2hlY2tlZFRlbXBsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY2FjaGVkQ2VsbFByb3BlcnRpZXMuY2hlY2tlZFRlbXBsYXRlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYWNoZWRDZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNhY2hlZENlbGxQcm9wZXJ0aWVzLnVuY2hlY2tlZFRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRhdGFBdENlbGwgPSBob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgICAgICAgICBpZiAodW5jaGVja0NoZWNrYm94ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKFtjYWNoZWRDZWxsUHJvcGVydGllcy5jaGVja2VkVGVtcGxhdGUsIGNhY2hlZENlbGxQcm9wZXJ0aWVzLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhkYXRhQXRDZWxsKSkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKFt2aXN1YWxSb3csIHZpc3VhbENvbHVtbiwgY2FjaGVkQ2VsbFByb3BlcnRpZXMudW5jaGVja2VkVGVtcGxhdGUsIHRlbXBsYXRlc10pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChbY2FjaGVkQ2VsbFByb3BlcnRpZXMudW5jaGVja2VkVGVtcGxhdGUsIGNhY2hlZENlbGxQcm9wZXJ0aWVzLnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCksIG51bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXMoZGF0YUF0Q2VsbCkpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgIGNoYW5nZXMucHVzaChbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sIGNhY2hlZENlbGxQcm9wZXJ0aWVzLmNoZWNrZWRUZW1wbGF0ZSwgdGVtcGxhdGVzXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaChbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sIGNhY2hlZENlbGxQcm9wZXJ0aWVzLnVuY2hlY2tlZFRlbXBsYXRlLCB0ZW1wbGF0ZXNdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hhbmdlQ291bnRlciArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGFuZ2VzUGVyU3ViU2VsZWN0aW9uLnB1c2goY2hhbmdlQ291bnRlcik7XG4gICAgICBjaGFuZ2VDb3VudGVyID0gMDtcbiAgICB9XG4gICAgaWYgKCFjaGFuZ2VzLmV2ZXJ5KF9yZWYgPT4ge1xuICAgICAgbGV0IFssLCBjZWxsVmFsdWVdID0gX3JlZjtcbiAgICAgIHJldHVybiBjZWxsVmFsdWUgPT09IGNoYW5nZXNbMF1bMl07XG4gICAgfSkpIHtcbiAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzLm1hcChfcmVmMiA9PiB7XG4gICAgICAgIGxldCBbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sLCB0ZW1wbGF0ZXNdID0gX3JlZjI7XG4gICAgICAgIHJldHVybiBbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sIHRlbXBsYXRlcy5jaGVja2VkVGVtcGxhdGVdO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZXMgPSBjaGFuZ2VzLm1hcChfcmVmMyA9PiB7XG4gICAgICAgIGxldCBbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW4sIGNlbGxWYWx1ZV0gPSBfcmVmMztcbiAgICAgICAgcmV0dXJuIFt2aXN1YWxSb3csIHZpc3VhbENvbHVtbiwgY2VsbFZhbHVlXTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBUT0RPOiBUaGlzIGlzIHdvcmthcm91bmQgZm9yIGhhbmRzb250YWJsZS9kZXYtaGFuZHNvbnRhYmxlIzE3NDcgbm90IGJlaW5nIGEgYnJlYWtpbmcgY2hhbmdlLlxuICAgICAgLy8gVGVjaG5pY2FsbHksIHRoZSBjaGFuZ2VzIGRvbid0IG5lZWQgdG8gYmUgc3BsaXQgaW50byBjaHVua3Mgd2hlbiBzZW50IHRvIGBzZXREYXRhQXRDZWxsYC5cbiAgICAgIGNoYW5nZXNQZXJTdWJTZWxlY3Rpb24uZm9yRWFjaChjaGFuZ2VzQ291bnQgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VzQ2h1bmsgPSBjaGFuZ2VzLnNwbGljZSgwLCBjaGFuZ2VzQ291bnQpO1xuICAgICAgICBob3RJbnN0YW5jZS5zZXREYXRhQXRDZWxsKGNoYW5nZXNDaHVuayk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhbGwgc2VsZWN0ZWQgY2VsbHMgYXJlIHdpdGggY2hlY2tib3ggdHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBmdW5jdGlvbiBhcmVTZWxlY3RlZENoZWNrYm94Q2VsbHMoKSB7XG4gICAgY29uc3Qgc2VsUmFuZ2UgPSBob3RJbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgaWYgKCFzZWxSYW5nZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBrZXkgPSAwOyBrZXkgPCBzZWxSYW5nZS5sZW5ndGg7IGtleSsrKSB7XG4gICAgICBjb25zdCB0b3BMZWZ0ID0gc2VsUmFuZ2Vba2V5XS5nZXRUb3BTdGFydENvcm5lcigpO1xuICAgICAgY29uc3QgYm90dG9tUmlnaHQgPSBzZWxSYW5nZVtrZXldLmdldEJvdHRvbUVuZENvcm5lcigpO1xuICAgICAgZm9yIChsZXQgdmlzdWFsUm93ID0gdG9wTGVmdC5yb3c7IHZpc3VhbFJvdyA8PSBib3R0b21SaWdodC5yb3c7IHZpc3VhbFJvdysrKSB7XG4gICAgICAgIGZvciAobGV0IHZpc3VhbENvbHVtbiA9IHRvcExlZnQuY29sOyB2aXN1YWxDb2x1bW4gPD0gYm90dG9tUmlnaHQuY29sOyB2aXN1YWxDb2x1bW4rKykge1xuICAgICAgICAgIGNvbnN0IGNhY2hlZENlbGxQcm9wZXJ0aWVzID0gaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEodmlzdWFsUm93LCB2aXN1YWxDb2x1bW4pO1xuICAgICAgICAgIGlmIChjYWNoZWRDZWxsUHJvcGVydGllcy50eXBlICE9PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNlbGwgPSBob3RJbnN0YW5jZS5nZXRDZWxsKHZpc3VhbFJvdywgdmlzdWFsQ29sdW1uKTtcbiAgICAgICAgICBpZiAoY2VsbCA9PT0gbnVsbCB8fCBjZWxsID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja2JveGVzID0gY2VsbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpO1xuICAgICAgICAgICAgaWYgKGNoZWNrYm94ZXMubGVuZ3RoID4gMCAmJiAhY2FjaGVkQ2VsbFByb3BlcnRpZXMucmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuY2hlY2tib3hSZW5kZXJlci5SRU5ERVJFUl9UWVBFID0gUkVOREVSRVJfVFlQRTtcblxuLyoqXG4gKiBSZWdpc3RlciBjaGVja2JveCBsaXN0ZW5lcnMuXG4gKlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge0V2ZW50TWFuYWdlcn1cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMoaW5zdGFuY2UpIHtcbiAgbGV0IGV2ZW50TWFuYWdlciA9IGlzQ2hlY2tib3hMaXN0ZW5lckFkZGVkLmdldChpbnN0YW5jZSk7XG4gIGlmICghZXZlbnRNYW5hZ2VyKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdEVsZW1lbnRcbiAgICB9ID0gaW5zdGFuY2U7XG4gICAgZXZlbnRNYW5hZ2VyID0gbmV3IF9ldmVudE1hbmFnZXIuZGVmYXVsdChpbnN0YW5jZSk7XG4gICAgZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm9vdEVsZW1lbnQsICdjbGljaycsIGV2ZW50ID0+IG9uQ2xpY2soZXZlbnQsIGluc3RhbmNlKSk7XG4gICAgZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIocm9vdEVsZW1lbnQsICdtb3VzZXVwJywgZXZlbnQgPT4gb25Nb3VzZVVwKGV2ZW50LCBpbnN0YW5jZSkpO1xuICAgIGV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RFbGVtZW50LCAnY2hhbmdlJywgZXZlbnQgPT4gb25DaGFuZ2UoZXZlbnQsIGluc3RhbmNlKSk7XG4gICAgaXNDaGVja2JveExpc3RlbmVyQWRkZWQuc2V0KGluc3RhbmNlLCBldmVudE1hbmFnZXIpO1xuICB9XG4gIHJldHVybiBldmVudE1hbmFnZXI7XG59XG5cbi8qKlxuICogQ3JlYXRlIGlucHV0IGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtEb2N1bWVudH0gcm9vdERvY3VtZW50IFRoZSBkb2N1bWVudCBvd25lci5cbiAqIEByZXR1cm5zIHtOb2RlfVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dChyb290RG9jdW1lbnQpIHtcbiAgY29uc3QgaW5wdXQgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgaW5wdXQuY2xhc3NOYW1lID0gJ2h0Q2hlY2tib3hSZW5kZXJlcklucHV0JztcbiAgaW5wdXQudHlwZSA9ICdjaGVja2JveCc7XG4gIGlucHV0LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgcmV0dXJuIGlucHV0LmNsb25lTm9kZShmYWxzZSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGxhYmVsIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtEb2N1bWVudH0gcm9vdERvY3VtZW50IFRoZSBkb2N1bWVudCBvd25lci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRoZSBsYWJlbCB0ZXh0LlxuICogQHBhcmFtIHtib29sZWFufSBmdWxsV2lkdGggRGV0ZXJtaW5lcyB3aGV0aGVyIGxhYmVsIHNob3VsZCBoYXZlIGZ1bGwgd2lkdGguXG4gKiBAcmV0dXJucyB7Tm9kZX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlTGFiZWwocm9vdERvY3VtZW50LCB0ZXh0LCBmdWxsV2lkdGgpIHtcbiAgY29uc3QgbGFiZWwgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgbGFiZWwuY2xhc3NOYW1lID0gYGh0Q2hlY2tib3hSZW5kZXJlckxhYmVsICR7ZnVsbFdpZHRoID8gJ2Z1bGxXaWR0aCcgOiAnJ31gO1xuICBsYWJlbC5hcHBlbmRDaGlsZChyb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO1xuICByZXR1cm4gbGFiZWwuY2xvbmVOb2RlKHRydWUpO1xufVxuXG4vKipcbiAqIGBtb3VzZXVwYCBjYWxsYmFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnQgYG1vdXNldXBgIGV2ZW50LlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBvbk1vdXNlVXAoZXZlbnQsIGluc3RhbmNlKSB7XG4gIGNvbnN0IHtcbiAgICB0YXJnZXRcbiAgfSA9IGV2ZW50O1xuICBpZiAoIWlzQ2hlY2tib3hJbnB1dCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghdGFyZ2V0Lmhhc0F0dHJpYnV0ZShBVFRSX1JPVykgfHwgIXRhcmdldC5oYXNBdHRyaWJ1dGUoQVRUUl9DT0xVTU4pKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHNldFRpbWVvdXQoaW5zdGFuY2UubGlzdGVuLCAxMCk7XG59XG5cbi8qKlxuICogYGNsaWNrYCBjYWxsYmFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudCBgY2xpY2tgIGV2ZW50LlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBvbkNsaWNrKGV2ZW50LCBpbnN0YW5jZSkge1xuICBjb25zdCB7XG4gICAgdGFyZ2V0XG4gIH0gPSBldmVudDtcbiAgaWYgKCFpc0NoZWNrYm94SW5wdXQodGFyZ2V0KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXRhcmdldC5oYXNBdHRyaWJ1dGUoQVRUUl9ST1cpIHx8ICF0YXJnZXQuaGFzQXR0cmlidXRlKEFUVFJfQ09MVU1OKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByb3cgPSBwYXJzZUludCh0YXJnZXQuZ2V0QXR0cmlidXRlKEFUVFJfUk9XKSwgMTApO1xuICBjb25zdCBjb2wgPSBwYXJzZUludCh0YXJnZXQuZ2V0QXR0cmlidXRlKEFUVFJfQ09MVU1OKSwgMTApO1xuICBjb25zdCBjZWxsUHJvcGVydGllcyA9IGluc3RhbmNlLmdldENlbGxNZXRhKHJvdywgY29sKTtcbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuXG4vKipcbiAqIGBjaGFuZ2VgIGNhbGxiYWNrLlxuICpcbiAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IGBjaGFuZ2VgIGV2ZW50LlxuICogQHBhcmFtIHtDb3JlfSBpbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBvbkNoYW5nZShldmVudCwgaW5zdGFuY2UpIHtcbiAgY29uc3Qge1xuICAgIHRhcmdldFxuICB9ID0gZXZlbnQ7XG4gIGlmICghaXNDaGVja2JveElucHV0KHRhcmdldCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF0YXJnZXQuaGFzQXR0cmlidXRlKEFUVFJfUk9XKSB8fCAhdGFyZ2V0Lmhhc0F0dHJpYnV0ZShBVFRSX0NPTFVNTikpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgcm93ID0gcGFyc2VJbnQodGFyZ2V0LmdldEF0dHJpYnV0ZShBVFRSX1JPVyksIDEwKTtcbiAgY29uc3QgY29sID0gcGFyc2VJbnQodGFyZ2V0LmdldEF0dHJpYnV0ZShBVFRSX0NPTFVNTiksIDEwKTtcbiAgY29uc3QgY2VsbFByb3BlcnRpZXMgPSBpbnN0YW5jZS5nZXRDZWxsTWV0YShyb3csIGNvbCk7XG4gIGlmICghY2VsbFByb3BlcnRpZXMucmVhZE9ubHkpIHtcbiAgICBsZXQgbmV3Q2hlY2tib3hWYWx1ZSA9IG51bGw7XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICBuZXdDaGVja2JveFZhbHVlID0gY2VsbFByb3BlcnRpZXMudW5jaGVja2VkVGVtcGxhdGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBjZWxsUHJvcGVydGllcy5jaGVja2VkVGVtcGxhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NoZWNrYm94VmFsdWUgPSBjZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBjZWxsUHJvcGVydGllcy51bmNoZWNrZWRUZW1wbGF0ZTtcbiAgICB9XG4gICAgaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChyb3csIGNvbCwgbmV3Q2hlY2tib3hWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcHJvdmlkZWQgZWxlbWVudCBpcyB0aGUgY2hlY2tib3ggaW5wdXQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgaW4gcXVlc3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDaGVja2JveElucHV0KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndHlwZScpID09PSAnY2hlY2tib3gnO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9jaGVja2JveFJlbmRlcmVyID0gcmVxdWlyZShcIi4vY2hlY2tib3hSZW5kZXJlclwiKTtcbmV4cG9ydHMuUkVOREVSRVJfVFlQRSA9IF9jaGVja2JveFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG5leHBvcnRzLmNoZWNrYm94UmVuZGVyZXIgPSBfY2hlY2tib3hSZW5kZXJlci5jaGVja2JveFJlbmRlcmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kYXRlUmVuZGVyZXIgPSBkYXRlUmVuZGVyZXI7XG52YXIgX2F1dG9jb21wbGV0ZVJlbmRlcmVyID0gcmVxdWlyZShcIi4uL2F1dG9jb21wbGV0ZVJlbmRlcmVyXCIpO1xuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICdkYXRlJztcblxuLyoqXG4gKiBIYW5kc29udGFibGUgcmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFRoZSByZW5kZXJlZCBjZWxsIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIGNlbGwgbWV0YSBvYmplY3QgKHNlZSB7QGxpbmsgQ29yZSNnZXRDZWxsTWV0YX0pLlxuICovXG5mdW5jdGlvbiBkYXRlUmVuZGVyZXIoaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIF9hdXRvY29tcGxldGVSZW5kZXJlci5hdXRvY29tcGxldGVSZW5kZXJlci5hcHBseSh0aGlzLCBbaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzXSk7XG59XG5kYXRlUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2RhdGVSZW5kZXJlciA9IHJlcXVpcmUoXCIuL2RhdGVSZW5kZXJlclwiKTtcbmV4cG9ydHMuUkVOREVSRVJfVFlQRSA9IF9kYXRlUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMuZGF0ZVJlbmRlcmVyID0gX2RhdGVSZW5kZXJlci5kYXRlUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRyb3Bkb3duUmVuZGVyZXIgPSBkcm9wZG93blJlbmRlcmVyO1xudmFyIF9hdXRvY29tcGxldGVSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi9hdXRvY29tcGxldGVSZW5kZXJlclwiKTtcbmNvbnN0IFJFTkRFUkVSX1RZUEUgPSBleHBvcnRzLlJFTkRFUkVSX1RZUEUgPSAnZHJvcGRvd24nO1xuXG4vKipcbiAqIERyb3Bkb3duIHJlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAqL1xuZnVuY3Rpb24gZHJvcGRvd25SZW5kZXJlcihob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgX2F1dG9jb21wbGV0ZVJlbmRlcmVyLmF1dG9jb21wbGV0ZVJlbmRlcmVyLmFwcGx5KHRoaXMsIFtob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXNdKTtcbn1cbmRyb3Bkb3duUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Ryb3Bkb3duUmVuZGVyZXIgPSByZXF1aXJlKFwiLi9kcm9wZG93blJlbmRlcmVyXCIpO1xuZXhwb3J0cy5SRU5ERVJFUl9UWVBFID0gX2Ryb3Bkb3duUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMuZHJvcGRvd25SZW5kZXJlciA9IF9kcm9wZG93blJlbmRlcmVyLmRyb3Bkb3duUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmhhbmRzb250YWJsZVJlbmRlcmVyID0gaGFuZHNvbnRhYmxlUmVuZGVyZXI7XG52YXIgX2F1dG9jb21wbGV0ZVJlbmRlcmVyID0gcmVxdWlyZShcIi4uL2F1dG9jb21wbGV0ZVJlbmRlcmVyXCIpO1xuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICdoYW5kc29udGFibGUnO1xuXG4vKipcbiAqIEhhbmRzb250YWJsZSByZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb3JlfSBob3RJbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkgKHBhc3NlZCB3aGVuIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cykuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gKi9cbmZ1bmN0aW9uIGhhbmRzb250YWJsZVJlbmRlcmVyKGhvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcykge1xuICBfYXV0b2NvbXBsZXRlUmVuZGVyZXIuYXV0b2NvbXBsZXRlUmVuZGVyZXIuYXBwbHkodGhpcywgW2hvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllc10pO1xufVxuaGFuZHNvbnRhYmxlUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2hhbmRzb250YWJsZVJlbmRlcmVyID0gcmVxdWlyZShcIi4vaGFuZHNvbnRhYmxlUmVuZGVyZXJcIik7XG5leHBvcnRzLlJFTkRFUkVSX1RZUEUgPSBfaGFuZHNvbnRhYmxlUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMuaGFuZHNvbnRhYmxlUmVuZGVyZXIgPSBfaGFuZHNvbnRhYmxlUmVuZGVyZXIuaGFuZHNvbnRhYmxlUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmh0bWxSZW5kZXJlciA9IGh0bWxSZW5kZXJlcjtcbnZhciBfYmFzZVJlbmRlcmVyID0gcmVxdWlyZShcIi4uL2Jhc2VSZW5kZXJlclwiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICdodG1sJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb3JlfSBob3RJbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkgKHBhc3NlZCB3aGVuIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cykuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gKi9cbmZ1bmN0aW9uIGh0bWxSZW5kZXJlcihob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgX2Jhc2VSZW5kZXJlci5iYXNlUmVuZGVyZXIuYXBwbHkodGhpcywgW2hvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllc10pO1xuICAoMCwgX2VsZW1lbnQuZmFzdElubmVySFRNTCkoVEQsIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHZhbHVlLCBmYWxzZSk7XG59XG5odG1sUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2h0bWxSZW5kZXJlciA9IHJlcXVpcmUoXCIuL2h0bWxSZW5kZXJlclwiKTtcbmV4cG9ydHMuUkVOREVSRVJfVFlQRSA9IF9odG1sUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMuaHRtbFJlbmRlcmVyID0gX2h0bWxSZW5kZXJlci5odG1sUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJlZ2lzdGVyQWxsUmVuZGVyZXJzID0gcmVnaXN0ZXJBbGxSZW5kZXJlcnM7XG52YXIgX2F1dG9jb21wbGV0ZVJlbmRlcmVyID0gcmVxdWlyZShcIi4vYXV0b2NvbXBsZXRlUmVuZGVyZXJcIik7XG5leHBvcnRzLmF1dG9jb21wbGV0ZVJlbmRlcmVyID0gX2F1dG9jb21wbGV0ZVJlbmRlcmVyLmF1dG9jb21wbGV0ZVJlbmRlcmVyO1xuZXhwb3J0cy5BVVRPQ09NUExFVEVfUkVOREVSRVIgPSBfYXV0b2NvbXBsZXRlUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbnZhciBfYmFzZVJlbmRlcmVyID0gcmVxdWlyZShcIi4vYmFzZVJlbmRlcmVyXCIpO1xuZXhwb3J0cy5iYXNlUmVuZGVyZXIgPSBfYmFzZVJlbmRlcmVyLmJhc2VSZW5kZXJlcjtcbmV4cG9ydHMuQkFTRV9SRU5ERVJFUiA9IF9iYXNlUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbnZhciBfZHJvcGRvd25SZW5kZXJlciA9IHJlcXVpcmUoXCIuL2Ryb3Bkb3duUmVuZGVyZXJcIik7XG5leHBvcnRzLmRyb3Bkb3duUmVuZGVyZXIgPSBfZHJvcGRvd25SZW5kZXJlci5kcm9wZG93blJlbmRlcmVyO1xuZXhwb3J0cy5EUk9QRE9XTl9SRU5ERVJFUiA9IF9kcm9wZG93blJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX2NoZWNrYm94UmVuZGVyZXIgPSByZXF1aXJlKFwiLi9jaGVja2JveFJlbmRlcmVyXCIpO1xuZXhwb3J0cy5jaGVja2JveFJlbmRlcmVyID0gX2NoZWNrYm94UmVuZGVyZXIuY2hlY2tib3hSZW5kZXJlcjtcbmV4cG9ydHMuQ0hFQ0tCT1hfUkVOREVSRVIgPSBfY2hlY2tib3hSZW5kZXJlci5SRU5ERVJFUl9UWVBFO1xudmFyIF9oYW5kc29udGFibGVSZW5kZXJlciA9IHJlcXVpcmUoXCIuL2hhbmRzb250YWJsZVJlbmRlcmVyXCIpO1xuZXhwb3J0cy5oYW5kc29udGFibGVSZW5kZXJlciA9IF9oYW5kc29udGFibGVSZW5kZXJlci5oYW5kc29udGFibGVSZW5kZXJlcjtcbmV4cG9ydHMuSEFORFNPTlRBQkxFX1JFTkRFUkVSID0gX2hhbmRzb250YWJsZVJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX2h0bWxSZW5kZXJlciA9IHJlcXVpcmUoXCIuL2h0bWxSZW5kZXJlclwiKTtcbmV4cG9ydHMuaHRtbFJlbmRlcmVyID0gX2h0bWxSZW5kZXJlci5odG1sUmVuZGVyZXI7XG5leHBvcnRzLkhUTUxfUkVOREVSRVIgPSBfaHRtbFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX251bWVyaWNSZW5kZXJlciA9IHJlcXVpcmUoXCIuL251bWVyaWNSZW5kZXJlclwiKTtcbmV4cG9ydHMubnVtZXJpY1JlbmRlcmVyID0gX251bWVyaWNSZW5kZXJlci5udW1lcmljUmVuZGVyZXI7XG5leHBvcnRzLk5VTUVSSUNfUkVOREVSRVIgPSBfbnVtZXJpY1JlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX3Bhc3N3b3JkUmVuZGVyZXIgPSByZXF1aXJlKFwiLi9wYXNzd29yZFJlbmRlcmVyXCIpO1xuZXhwb3J0cy5wYXNzd29yZFJlbmRlcmVyID0gX3Bhc3N3b3JkUmVuZGVyZXIucGFzc3dvcmRSZW5kZXJlcjtcbmV4cG9ydHMuUEFTU1dPUkRfUkVOREVSRVIgPSBfcGFzc3dvcmRSZW5kZXJlci5SRU5ERVJFUl9UWVBFO1xudmFyIF9zZWxlY3RSZW5kZXJlciA9IHJlcXVpcmUoXCIuL3NlbGVjdFJlbmRlcmVyXCIpO1xuZXhwb3J0cy5zZWxlY3RSZW5kZXJlciA9IF9zZWxlY3RSZW5kZXJlci5zZWxlY3RSZW5kZXJlcjtcbmV4cG9ydHMuU0VMRUNUX1JFTkRFUkVSID0gX3NlbGVjdFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX3RleHRSZW5kZXJlciA9IHJlcXVpcmUoXCIuL3RleHRSZW5kZXJlclwiKTtcbmV4cG9ydHMudGV4dFJlbmRlcmVyID0gX3RleHRSZW5kZXJlci50ZXh0UmVuZGVyZXI7XG5leHBvcnRzLlRFWFRfUkVOREVSRVIgPSBfdGV4dFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX3RpbWVSZW5kZXJlciA9IHJlcXVpcmUoXCIuL3RpbWVSZW5kZXJlclwiKTtcbmV4cG9ydHMudGltZVJlbmRlcmVyID0gX3RpbWVSZW5kZXJlci50aW1lUmVuZGVyZXI7XG5leHBvcnRzLlRJTUVfUkVOREVSRVIgPSBfdGltZVJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4vcmVnaXN0cnlcIik7XG5leHBvcnRzLnJlZ2lzdGVyUmVuZGVyZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJSZW5kZXJlcjtcbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZFJlbmRlcmVyTmFtZXMgPSBfcmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJlbmRlcmVyTmFtZXM7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRSZW5kZXJlcnMgPSBfcmVnaXN0cnkuZ2V0UmVnaXN0ZXJlZFJlbmRlcmVycztcbmV4cG9ydHMuZ2V0UmVuZGVyZXIgPSBfcmVnaXN0cnkuZ2V0UmVuZGVyZXI7XG5leHBvcnRzLmhhc1JlbmRlcmVyID0gX3JlZ2lzdHJ5Lmhhc1JlbmRlcmVyO1xuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIGF2YWlsYWJsZSByZW5kZXJlcnMuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQWxsUmVuZGVyZXJzKCkge1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF9hdXRvY29tcGxldGVSZW5kZXJlci5hdXRvY29tcGxldGVSZW5kZXJlcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJSZW5kZXJlcikoX2Jhc2VSZW5kZXJlci5iYXNlUmVuZGVyZXIpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF9jaGVja2JveFJlbmRlcmVyLmNoZWNrYm94UmVuZGVyZXIpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF9kcm9wZG93blJlbmRlcmVyLmRyb3Bkb3duUmVuZGVyZXIpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF9oYW5kc29udGFibGVSZW5kZXJlci5oYW5kc29udGFibGVSZW5kZXJlcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJSZW5kZXJlcikoX2h0bWxSZW5kZXJlci5odG1sUmVuZGVyZXIpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF9udW1lcmljUmVuZGVyZXIubnVtZXJpY1JlbmRlcmVyKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclJlbmRlcmVyKShfcGFzc3dvcmRSZW5kZXJlci5wYXNzd29yZFJlbmRlcmVyKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclJlbmRlcmVyKShfc2VsZWN0UmVuZGVyZXIuc2VsZWN0UmVuZGVyZXIpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyUmVuZGVyZXIpKF90ZXh0UmVuZGVyZXIudGV4dFJlbmRlcmVyKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclJlbmRlcmVyKShfdGltZVJlbmRlcmVyLnRpbWVSZW5kZXJlcik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX251bWVyaWNSZW5kZXJlciA9IHJlcXVpcmUoXCIuL251bWVyaWNSZW5kZXJlclwiKTtcbmV4cG9ydHMuUkVOREVSRVJfVFlQRSA9IF9udW1lcmljUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMubnVtZXJpY1JlbmRlcmVyID0gX251bWVyaWNSZW5kZXJlci5udW1lcmljUmVuZGVyZXI7XG5leHBvcnRzLmdldFJlbmRlcmVkVmFsdWUgPSBfbnVtZXJpY1JlbmRlcmVyLmdldFJlbmRlcmVkVmFsdWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldFJlbmRlcmVkVmFsdWUgPSBnZXRSZW5kZXJlZFZhbHVlO1xuZXhwb3J0cy5udW1lcmljUmVuZGVyZXIgPSBudW1lcmljUmVuZGVyZXI7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX251bWJybyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm51bWJyb1wiKSk7XG52YXIgX3RleHRSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi90ZXh0UmVuZGVyZXJcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBSRU5ERVJFUl9UWVBFID0gZXhwb3J0cy5SRU5ERVJFUl9UWVBFID0gJ251bWVyaWMnO1xuXG4vKipcbiAqIEdldCB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSB0byBiZSByZW5kZXJlZC5cbiAqIEBwYXJhbSB7Q2VsbE1ldGF9IGNlbGxQcm9wZXJ0aWVzIENlbGwgbWV0YSBvYmplY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVuZGVyZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFJlbmRlcmVkVmFsdWUodmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIGlmICgoMCwgX251bWJlci5pc051bWVyaWMpKHZhbHVlKSkge1xuICAgIGNvbnN0IG51bWVyaWNGb3JtYXQgPSBjZWxsUHJvcGVydGllcy5udW1lcmljRm9ybWF0O1xuICAgIGNvbnN0IGNlbGxDdWx0dXJlID0gbnVtZXJpY0Zvcm1hdCAmJiBudW1lcmljRm9ybWF0LmN1bHR1cmUgfHwgJy0nO1xuICAgIGNvbnN0IGNlbGxGb3JtYXRQYXR0ZXJuID0gbnVtZXJpY0Zvcm1hdCAmJiBudW1lcmljRm9ybWF0LnBhdHRlcm47XG4gICAgaWYgKHR5cGVvZiBjZWxsQ3VsdHVyZSAhPT0gJ3VuZGVmaW5lZCcgJiYgIV9udW1icm8uZGVmYXVsdC5sYW5ndWFnZXMoKVtjZWxsQ3VsdHVyZV0pIHtcbiAgICAgIGNvbnN0IHNob3J0VGFnID0gY2VsbEN1bHR1cmUucmVwbGFjZSgnLScsICcnKTtcbiAgICAgIGNvbnN0IGxhbmdEYXRhID0gX251bWJyby5kZWZhdWx0LmFsbExhbmd1YWdlcyA/IF9udW1icm8uZGVmYXVsdC5hbGxMYW5ndWFnZXNbY2VsbEN1bHR1cmVdIDogX251bWJyby5kZWZhdWx0W3Nob3J0VGFnXTtcbiAgICAgIGlmIChsYW5nRGF0YSkge1xuICAgICAgICBfbnVtYnJvLmRlZmF1bHQucmVnaXN0ZXJMYW5ndWFnZShsYW5nRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIF9udW1icm8uZGVmYXVsdC5zZXRMYW5ndWFnZShjZWxsQ3VsdHVyZSk7XG4gICAgdmFsdWUgPSAoMCwgX251bWJyby5kZWZhdWx0KSh2YWx1ZSkuZm9ybWF0KGNlbGxGb3JtYXRQYXR0ZXJuIHx8ICcwJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIE51bWVyaWMgY2VsbCByZW5kZXJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb3JlfSBob3RJbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEQgVGhlIHJlbmRlcmVkIGNlbGwgZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVGhlIHZpc3VhbCByb3cgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSB2aXN1YWwgY29sdW1uIGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBwcm9wIFRoZSBjb2x1bW4gcHJvcGVydHkgKHBhc3NlZCB3aGVuIGRhdGFzb3VyY2UgaXMgYW4gYXJyYXkgb2Ygb2JqZWN0cykuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSByZW5kZXJlZCB2YWx1ZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBjZWxsUHJvcGVydGllcyBUaGUgY2VsbCBtZXRhIG9iamVjdCAoc2VlIHtAbGluayBDb3JlI2dldENlbGxNZXRhfSkuXG4gKi9cbmZ1bmN0aW9uIG51bWVyaWNSZW5kZXJlcihob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7XG4gIGlmICgoMCwgX251bWJlci5pc051bWVyaWMpKG5ld1ZhbHVlKSkge1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSB8fCAnJztcbiAgICBjb25zdCBjbGFzc0FyciA9IGNsYXNzTmFtZS5sZW5ndGggPyBjbGFzc05hbWUuc3BsaXQoJyAnKSA6IFtdO1xuICAgIG5ld1ZhbHVlID0gZ2V0UmVuZGVyZWRWYWx1ZShuZXdWYWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgIGlmIChjbGFzc0Fyci5pbmRleE9mKCdodExlZnQnKSA8IDAgJiYgY2xhc3NBcnIuaW5kZXhPZignaHRDZW50ZXInKSA8IDAgJiYgY2xhc3NBcnIuaW5kZXhPZignaHRSaWdodCcpIDwgMCAmJiBjbGFzc0Fyci5pbmRleE9mKCdodEp1c3RpZnknKSA8IDApIHtcbiAgICAgIGNsYXNzQXJyLnB1c2goJ2h0UmlnaHQnKTtcbiAgICB9XG4gICAgaWYgKGNsYXNzQXJyLmluZGV4T2YoJ2h0TnVtZXJpYycpIDwgMCkge1xuICAgICAgY2xhc3NBcnIucHVzaCgnaHROdW1lcmljJyk7XG4gICAgfVxuICAgIGNlbGxQcm9wZXJ0aWVzLmNsYXNzTmFtZSA9IGNsYXNzQXJyLmpvaW4oJyAnKTtcbiAgICBURC5kaXIgPSAnbHRyJztcbiAgfVxuICAoMCwgX3RleHRSZW5kZXJlci50ZXh0UmVuZGVyZXIpKGhvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIG5ld1ZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG59XG5udW1lcmljUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX3Bhc3N3b3JkUmVuZGVyZXIgPSByZXF1aXJlKFwiLi9wYXNzd29yZFJlbmRlcmVyXCIpO1xuZXhwb3J0cy5SRU5ERVJFUl9UWVBFID0gX3Bhc3N3b3JkUmVuZGVyZXIuUkVOREVSRVJfVFlQRTtcbmV4cG9ydHMucGFzc3dvcmRSZW5kZXJlciA9IF9wYXNzd29yZFJlbmRlcmVyLnBhc3N3b3JkUmVuZGVyZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnBhc3N3b3JkUmVuZGVyZXIgPSBwYXNzd29yZFJlbmRlcmVyO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vdGV4dFJlbmRlcmVyXCIpO1xudmFyIF9lbGVtZW50ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbmNvbnN0IFJFTkRFUkVSX1RZUEUgPSBleHBvcnRzLlJFTkRFUkVSX1RZUEUgPSAncGFzc3dvcmQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAqL1xuZnVuY3Rpb24gcGFzc3dvcmRSZW5kZXJlcihob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpIHtcbiAgX3RleHRSZW5kZXJlci50ZXh0UmVuZGVyZXIuYXBwbHkodGhpcywgW2hvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllc10pO1xuICBjb25zdCBoYXNoTGVuZ3RoID0gY2VsbFByb3BlcnRpZXMuaGFzaExlbmd0aCB8fCBURC5pbm5lckhUTUwubGVuZ3RoO1xuICBjb25zdCBoYXNoU3ltYm9sID0gY2VsbFByb3BlcnRpZXMuaGFzaFN5bWJvbCB8fCAnKic7XG4gIGxldCBoYXNoID0gJyc7XG4gICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkoaGFzaExlbmd0aCAtIDEsICgpID0+IHtcbiAgICBoYXNoICs9IGhhc2hTeW1ib2w7XG4gIH0pO1xuICAoMCwgX2VsZW1lbnQuZmFzdElubmVySFRNTCkoVEQsIGhhc2gpO1xufVxucGFzc3dvcmRSZW5kZXJlci5SRU5ERVJFUl9UWVBFID0gUkVOREVSRVJfVFlQRTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0UmVuZGVyZXIgPSBfZ2V0SXRlbTtcbmV4cG9ydHMucmVnaXN0ZXJSZW5kZXJlciA9IF9yZWdpc3RlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX3N0YXRpY1JlZ2lzdGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdXRpbHMvc3RhdGljUmVnaXN0ZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IHtcbiAgcmVnaXN0ZXIsXG4gIGdldEl0ZW0sXG4gIGhhc0l0ZW0sXG4gIGdldE5hbWVzLFxuICBnZXRWYWx1ZXNcbn0gPSAoMCwgX3N0YXRpY1JlZ2lzdGVyLmRlZmF1bHQpKCdyZW5kZXJlcnMnKTtcblxuLyoqXG4gKiBSZXRyaWV2ZSByZW5kZXJlciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBSZW5kZXJlciBpZGVudGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyByZW5kZXJlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkUmVuZGVyZXJzID0gZ2V0VmFsdWVzO1xuZXhwb3J0cy5nZXRSZWdpc3RlcmVkUmVuZGVyZXJOYW1lcyA9IGdldE5hbWVzO1xuZXhwb3J0cy5oYXNSZW5kZXJlciA9IGhhc0l0ZW07XG5mdW5jdGlvbiBfZ2V0SXRlbShuYW1lKSB7XG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG4gIGlmICghaGFzSXRlbShuYW1lKSkge1xuICAgIHRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIHJlbmRlcmVyIGZvdW5kIHVuZGVyIFwiJHtuYW1lfVwiIG5hbWVgKTtcbiAgfVxuICByZXR1cm4gZ2V0SXRlbShuYW1lKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciByZW5kZXJlciB1bmRlciBpdHMgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IG5hbWUgUmVuZGVyZXIncyBhbGlhcyBvciByZW5kZXJlciBmdW5jdGlvbiB3aXRoIGl0cyBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3JlbmRlcmVyXSBSZW5kZXJlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gX3JlZ2lzdGVyKG5hbWUsIHJlbmRlcmVyKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZW5kZXJlciA9IG5hbWU7XG4gICAgbmFtZSA9IHJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG4gIH1cbiAgcmVnaXN0ZXIobmFtZSwgcmVuZGVyZXIpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9zZWxlY3RSZW5kZXJlciA9IHJlcXVpcmUoXCIuL3NlbGVjdFJlbmRlcmVyXCIpO1xuZXhwb3J0cy5SRU5ERVJFUl9UWVBFID0gX3NlbGVjdFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG5leHBvcnRzLnNlbGVjdFJlbmRlcmVyID0gX3NlbGVjdFJlbmRlcmVyLnNlbGVjdFJlbmRlcmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5zZWxlY3RSZW5kZXJlciA9IHNlbGVjdFJlbmRlcmVyO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vdGV4dFJlbmRlcmVyXCIpO1xuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICdzZWxlY3QnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAqL1xuZnVuY3Rpb24gc2VsZWN0UmVuZGVyZXIoaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIF90ZXh0UmVuZGVyZXIudGV4dFJlbmRlcmVyLmFwcGx5KHRoaXMsIFtob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXNdKTtcbn1cbnNlbGVjdFJlbmRlcmVyLlJFTkRFUkVSX1RZUEUgPSBSRU5ERVJFUl9UWVBFOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi90ZXh0UmVuZGVyZXJcIik7XG5leHBvcnRzLlJFTkRFUkVSX1RZUEUgPSBfdGV4dFJlbmRlcmVyLlJFTkRFUkVSX1RZUEU7XG5leHBvcnRzLnRleHRSZW5kZXJlciA9IF90ZXh0UmVuZGVyZXIudGV4dFJlbmRlcmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy50ZXh0UmVuZGVyZXIgPSB0ZXh0UmVuZGVyZXI7XG52YXIgX2Jhc2VSZW5kZXJlciA9IHJlcXVpcmUoXCIuLi9iYXNlUmVuZGVyZXJcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9taXhlZFwiKTtcbmNvbnN0IFJFTkRFUkVSX1RZUEUgPSBleHBvcnRzLlJFTkRFUkVSX1RZUEUgPSAndGV4dCc7XG5cbi8qKlxuICogRGVmYXVsdCB0ZXh0IHJlbmRlcmVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge0hUTUxUYWJsZUNlbGxFbGVtZW50fSBURCBUaGUgcmVuZGVyZWQgY2VsbCBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHJvdyBUaGUgdmlzdWFsIHJvdyBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2wgVGhlIHZpc3VhbCBjb2x1bW4gaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHByb3AgVGhlIGNvbHVtbiBwcm9wZXJ0eSAocGFzc2VkIHdoZW4gZGF0YXNvdXJjZSBpcyBhbiBhcnJheSBvZiBvYmplY3RzKS5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHJlbmRlcmVkIHZhbHVlLlxuICogQHBhcmFtIHtvYmplY3R9IGNlbGxQcm9wZXJ0aWVzIFRoZSBjZWxsIG1ldGEgb2JqZWN0IChzZWUge0BsaW5rIENvcmUjZ2V0Q2VsbE1ldGF9KS5cbiAqL1xuZnVuY3Rpb24gdGV4dFJlbmRlcmVyKGhvdEluc3RhbmNlLCBURCwgcm93LCBjb2wsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcykge1xuICBfYmFzZVJlbmRlcmVyLmJhc2VSZW5kZXJlci5hcHBseSh0aGlzLCBbaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzXSk7XG4gIGxldCBlc2NhcGVkID0gdmFsdWU7XG4gIGlmICghZXNjYXBlZCAmJiBjZWxsUHJvcGVydGllcy5wbGFjZWhvbGRlcikge1xuICAgIGVzY2FwZWQgPSBjZWxsUHJvcGVydGllcy5wbGFjZWhvbGRlcjtcbiAgfVxuICBlc2NhcGVkID0gKDAsIF9taXhlZC5zdHJpbmdpZnkpKGVzY2FwZWQpO1xuICBpZiAoY2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2UpIHtcbiAgICBlc2NhcGVkID0gZXNjYXBlZC50cmltKCk7XG4gIH1cbiAgaWYgKGNlbGxQcm9wZXJ0aWVzLnJlbmRlcmVyVGVtcGxhdGUpIHtcbiAgICAoMCwgX2VsZW1lbnQuZW1wdHkpKFREKTtcbiAgICBjb25zdCBURU1QTEFURSA9IGhvdEluc3RhbmNlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURU1QTEFURScpO1xuICAgIFRFTVBMQVRFLnNldEF0dHJpYnV0ZSgnYmluZCcsICd7e319Jyk7XG4gICAgVEVNUExBVEUuaW5uZXJIVE1MID0gY2VsbFByb3BlcnRpZXMucmVuZGVyZXJUZW1wbGF0ZTtcbiAgICBIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKFRFTVBMQVRFKTtcbiAgICBURU1QTEFURS5tb2RlbCA9IGhvdEluc3RhbmNlLmdldFNvdXJjZURhdGFBdFJvdyhyb3cpO1xuICAgIFRELmFwcGVuZENoaWxkKFRFTVBMQVRFKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGlzIGlzIGZhc3RlciB0aGFuIGlubmVySFRNTC4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaGFuZHNvbnRhYmxlL2hhbmRzb250YWJsZS93aWtpL0phdmFTY3JpcHQtJi1ET00tcGVyZm9ybWFuY2UtdGlwc1xuICAgICgwLCBfZWxlbWVudC5mYXN0SW5uZXJUZXh0KShURCwgZXNjYXBlZCk7XG4gIH1cbn1cbnRleHRSZW5kZXJlci5SRU5ERVJFUl9UWVBFID0gUkVOREVSRVJfVFlQRTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfdGltZVJlbmRlcmVyID0gcmVxdWlyZShcIi4vdGltZVJlbmRlcmVyXCIpO1xuZXhwb3J0cy5SRU5ERVJFUl9UWVBFID0gX3RpbWVSZW5kZXJlci5SRU5ERVJFUl9UWVBFO1xuZXhwb3J0cy50aW1lUmVuZGVyZXIgPSBfdGltZVJlbmRlcmVyLnRpbWVSZW5kZXJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudGltZVJlbmRlcmVyID0gdGltZVJlbmRlcmVyO1xudmFyIF90ZXh0UmVuZGVyZXIgPSByZXF1aXJlKFwiLi4vdGV4dFJlbmRlcmVyXCIpO1xuY29uc3QgUkVOREVSRVJfVFlQRSA9IGV4cG9ydHMuUkVOREVSRVJfVFlQRSA9ICd0aW1lJztcblxuLyoqXG4gKiBEZWZhdWx0IHRpbWUgcmVuZGVyZXIuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7SFRNTFRhYmxlQ2VsbEVsZW1lbnR9IFREIFRoZSByZW5kZXJlZCBjZWxsIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gcm93IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbCBUaGUgdmlzdWFsIGNvbHVtbiBpbmRleC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gcHJvcCBUaGUgY29sdW1uIHByb3BlcnR5IChwYXNzZWQgd2hlbiBkYXRhc291cmNlIGlzIGFuIGFycmF5IG9mIG9iamVjdHMpLlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcmVuZGVyZWQgdmFsdWUuXG4gKiBAcGFyYW0ge29iamVjdH0gY2VsbFByb3BlcnRpZXMgVGhlIGNlbGwgbWV0YSBvYmplY3QgKHNlZSB7QGxpbmsgQ29yZSNnZXRDZWxsTWV0YX0pLlxuICovXG5mdW5jdGlvbiB0aW1lUmVuZGVyZXIoaG90SW5zdGFuY2UsIFRELCByb3csIGNvbCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKSB7XG4gIF90ZXh0UmVuZGVyZXIudGV4dFJlbmRlcmVyLmFwcGx5KHRoaXMsIFtob3RJbnN0YW5jZSwgVEQsIHJvdywgY29sLCBwcm9wLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXNdKTtcbiAgVEQuZGlyID0gJ2x0cic7XG59XG50aW1lUmVuZGVyZXIuUkVOREVSRVJfVFlQRSA9IFJFTkRFUkVSX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9hY3RpdmVIZWFkZXIgPSByZXF1aXJlKFwiLi90eXBlcy9hY3RpdmVIZWFkZXJcIik7XG52YXIgX2FyZWFMYXllcmVkID0gcmVxdWlyZShcIi4vdHlwZXMvYXJlYUxheWVyZWRcIik7XG52YXIgX2FyZWEgPSByZXF1aXJlKFwiLi90eXBlcy9hcmVhXCIpO1xudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi90eXBlcy9jb2x1bW5cIik7XG52YXIgX2ZvY3VzID0gcmVxdWlyZShcIi4vdHlwZXMvZm9jdXNcIik7XG52YXIgX2N1c3RvbVNlbGVjdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGVzL2N1c3RvbVNlbGVjdGlvblwiKTtcbnZhciBfZmlsbCA9IHJlcXVpcmUoXCIuL3R5cGVzL2ZpbGxcIik7XG52YXIgX2hlYWRlciA9IHJlcXVpcmUoXCIuL3R5cGVzL2hlYWRlclwiKTtcbnZhciBfcm93ID0gcmVxdWlyZShcIi4vdHlwZXMvcm93XCIpO1xudmFyIF9zcmMgPSByZXF1aXJlKFwiLi4vLi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpO1xuZXhwb3J0cy5BQ1RJVkVfSEVBREVSX1RZUEUgPSBfc3JjLkhJR0hMSUdIVF9BQ1RJVkVfSEVBREVSX1RZUEU7XG5leHBvcnRzLkFSRUFfVFlQRSA9IF9zcmMuSElHSExJR0hUX0FSRUFfVFlQRTtcbmV4cG9ydHMuRk9DVVNfVFlQRSA9IF9zcmMuSElHSExJR0hUX0ZPQ1VTX1RZUEU7XG5leHBvcnRzLkNVU1RPTV9TRUxFQ1RJT05fVFlQRSA9IF9zcmMuSElHSExJR0hUX0NVU1RPTV9TRUxFQ1RJT05fVFlQRTtcbmV4cG9ydHMuRklMTF9UWVBFID0gX3NyYy5ISUdITElHSFRfRklMTF9UWVBFO1xuZXhwb3J0cy5IRUFERVJfVFlQRSA9IF9zcmMuSElHSExJR0hUX0hFQURFUl9UWVBFO1xuZXhwb3J0cy5ST1dfVFlQRSA9IF9zcmMuSElHSExJR0hUX1JPV19UWVBFO1xuZXhwb3J0cy5DT0xVTU5fVFlQRSA9IF9zcmMuSElHSExJR0hUX0NPTFVNTl9UWVBFO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogSGlnaGxpZ2h0IGNsYXNzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBXYWxrb250YWJsZSBTZWxlY3Rpb24gY2xhc3Nlcy5cbiAqXG4gKiBXaXRoIEhpZ2hsaWdodCBvYmplY3QgeW91IGNhbiBtYW5pcHVsYXRlIGZvdXIgZGlmZmVyZW50IGhpZ2hsaWdodCB0eXBlczpcbiAqICAtIGBjZWxsYCBjYW4gYmUgYWRkZWQgb25seSB0byBhIHNpbmdsZSBjZWxsIGF0IGEgdGltZSBhbmQgaXQgZGVmaW5lcyBjdXJyZW50bHkgc2VsZWN0ZWQgY2VsbDtcbiAqICAtIGBmaWxsYCBjYW4gb2NjdXIgb25seSBvbmNlIGFuZCBpdHMgaGlnaGxpZ2h0IGRlZmluZXMgc2VsZWN0aW9uIG9mIGF1dG9maWxsIGZ1bmN0aW9uYWxpdHkgKG1hbmFnZWQgYnkgdGhlIHBsdWdpbiB3aXRoIHRoZSBzYW1lIG5hbWUpO1xuICogIC0gYGFyZWFzYCBjYW4gYmUgYWRkZWQgdG8gbXVsdGlwbGUgY2VsbHMgYXQgYSB0aW1lLiBUaGlzIHR5cGUgaGlnaGxpZ2h0cyBzZWxlY3RlZCBjZWxsIG9yIG11bHRpcGxlIGNlbGxzLlxuICogICAgVGhlIG11bHRpcGxlIGNlbGxzIGhhdmUgdG8gYmUgZGVmaW5lZCBhcyBhbiB1bmludGVycnVwdGVkIG9yZGVyIChyZWd1bGFyIHNoYXBlKS4gT3RoZXJ3aXNlLCB0aGUgbmV3IGxheWVyIG9mXG4gKiAgICB0aGF0IHR5cGUgc2hvdWxkIGJlIGNyZWF0ZWQgdG8gbWFuYWdlIG5vdC1jb25zZWN1dGl2ZSBzZWxlY3Rpb247XG4gKiAgLSBgaGVhZGVyYCBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMuIFRoaXMgdHlwZSBpcyBkZXNpZ25lZCB0byBoaWdobGlnaHQgb25seSBoZWFkZXJzLiBMaWtlIGBhcmVhYCB0eXBlIGl0XG4gKiAgICBjYW4gYXBwZWFyIHdpdGggbXVsdGlwbGUgaGlnaGxpZ2h0cyAoYWNjZXNzZWQgdW5kZXIgZGlmZmVyZW50IGxldmVsIGxheWVycykuXG4gKlxuICogQGNsYXNzIEhpZ2hsaWdodFxuICogQHV0aWxcbiAqL1xudmFyIF9IaWdobGlnaHRfYnJhbmQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbmNsYXNzIEhpZ2hsaWdodCB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIChpZiBub3QgZXhpc3QgaW4gdGhlIGNhY2hlKSBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge01hcH0gY2FjaGVNYXAgVGhlIG1hcCB3aGVyZSB0aGUgaW5zdGFuY2Ugd2lsbCBiZSBjYWNoZWQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGlnaGxpZ2h0RmFjdG9yeSBUaGUgZnVuY3Rpb24gZmFjdG9yeS5cbiAgICAgKiBAcmV0dXJucyB7VmlzdWFsU2VsZWN0aW9ufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfSGlnaGxpZ2h0X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGNvbnN1bWVkIGJ5IEhpZ2hsaWdodCBjbGFzcyBhbmQgV2Fsa29udGFibGUgU2VsZWN0aW9uIGNsYXNzZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIm9wdGlvbnNcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgcHJvcGVydHkgd2hpY2ggZGVzY3JpYmVzIHdoaWNoIGxheWVyIGxldmVsIG9mIHRoZSB2aXN1YWwgc2VsZWN0aW9uIHdpbGwgYmUgbW9kaWZpZWQuXG4gICAgICogVGhpcyBvcHRpb24gaXMgdmFsaWQgb25seSBmb3IgYGFyZWFgIGFuZCBgaGVhZGVyYCBoaWdobGlnaHQgdHlwZXMgd2hpY2ggb2NjdXJzIG11bHRpcGxlIHRpbWVzIG9uXG4gICAgICogdGhlIHRhYmxlIChhcyBhIG5vbi1jb25zZWN1dGl2ZSBzZWxlY3Rpb24pLlxuICAgICAqXG4gICAgICogQW4gb3JkZXIgb2YgdGhlIGxheWVycyBpcyB0aGUgc2FtZSBhcyB0aGUgb3JkZXIgb2YgYWRkZWQgbmV3IG5vbi1jb25zZWN1dGl2ZSBzZWxlY3Rpb25zLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAZGVmYXVsdCAwXG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibGF5ZXJMZXZlbFwiLCAwKTtcbiAgICAvKipcbiAgICAgKiBgY2VsbGAgaGlnaGxpZ2h0IG9iamVjdCB3aGljaCBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBjZWxsLlxuICAgICAqIEl0IGNhbiBvbmx5IG9jY3VyIG9ubHkgb25jZSBvbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2VsZWN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZvY3VzXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogYGZpbGxgIGhpZ2hsaWdodCBvYmplY3Qgd2hpY2ggZGVzY3JpYmVzIGF0dHJpYnV0ZXMgZm9yIHRoZSBib3JkZXJzIGZvciBhdXRvZmlsbCBmdW5jdGlvbmFsaXR5LlxuICAgICAqIEl0IGNhbiBvbmx5IG9jY3VyIG9ubHkgb25jZSBvbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2VsZWN0aW9ufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpbGxcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHRoZSBgYXJlYWAgaGlnaGxpZ2h0cy4gVGhhdCBvYmplY3RzIGRlc2NyaWJlcyBhdHRyaWJ1dGVzIGZvciB0aGUgYm9yZGVycyBhbmQgc2VsZWN0aW9uIG9mXG4gICAgICogdGhlIG11bHRpcGxlIHNlbGVjdGVkIGNlbGxzLiBJdCBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMgb24gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogQHR5cGUge01hcC48bnVtYmVyLCBTZWxlY3Rpb24+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxheWVyZWRBcmVhc1wiLCBuZXcgTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdGhlIGBoaWdobGlnaHRgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIGJvcmRlcnMgYW5kIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCBjZWxscy4gSXQgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIG9uIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAuPG51bWJlciwgU2VsZWN0aW9uPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhcmVhc1wiLCBuZXcgTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdGhlIGBoZWFkZXJgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCByb3dzIGluIHRoZSB0YWJsZSBoZWFkZXIuIEl0IGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWFwLjxudW1iZXIsIFNlbGVjdGlvbj59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicm93SGVhZGVyc1wiLCBuZXcgTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdGhlIGBoZWFkZXJgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCBjb2x1bW5zIGluIHRoZSB0YWJsZSBoZWFkZXIuIEl0IGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWFwLjxudW1iZXIsIFNlbGVjdGlvbj59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uSGVhZGVyc1wiLCBuZXcgTWFwKCkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gb2YgdGhlIGBhY3RpdmUtaGVhZGVyYCBoaWdobGlnaHRzLiBUaGF0IG9iamVjdHMgZGVzY3JpYmVzIGF0dHJpYnV0ZXMgZm9yIHRoZSBzZWxlY3Rpb24gb2ZcbiAgICAgKiB0aGUgbXVsdGlwbGUgc2VsZWN0ZWQgcm93cyBpbiB0aGUgdGFibGUgaGVhZGVyLiBUaGUgdGFibGUgaGVhZGVycyB3aGljaCBoYXZlIHNlbGVjdGVkIGFsbCBpdGVtcyBpblxuICAgICAqIGEgcm93IHdpbGwgYmUgbWFya2VkIGFzIGBhY3RpdmUtaGVhZGVyYC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAuPG51bWJlciwgU2VsZWN0aW9uPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhY3RpdmVSb3dIZWFkZXJzXCIsIG5ldyBNYXAoKSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB0aGUgYGFjdGl2ZS1oZWFkZXJgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCBjb2x1bW5zIGluIHRoZSB0YWJsZSBoZWFkZXIuIFRoZSB0YWJsZSBoZWFkZXJzIHdoaWNoIGhhdmUgc2VsZWN0ZWQgYWxsIGl0ZW1zIGluXG4gICAgICogYSByb3cgd2lsbCBiZSBtYXJrZWQgYXMgYGFjdGl2ZS1oZWFkZXJgLlxuICAgICAqXG4gICAgICogQHR5cGUge01hcC48bnVtYmVyLCBTZWxlY3Rpb24+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFjdGl2ZUNvbHVtbkhlYWRlcnNcIiwgbmV3IE1hcCgpKTtcbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHRoZSBgYWN0aXZlLWhlYWRlcmAgaGlnaGxpZ2h0cy4gVGhhdCBvYmplY3RzIGRlc2NyaWJlcyBhdHRyaWJ1dGVzIGZvciB0aGUgc2VsZWN0aW9uIG9mXG4gICAgICogdGhlIHNlbGVjdGVkIGNvcm5lciBpbiB0aGUgdGFibGUgaGVhZGVyLiBUaGUgdGFibGUgaGVhZGVycyB3aGljaCBoYXZlIHNlbGVjdGVkIGFsbCBpdGVtcyBpblxuICAgICAqIGEgcm93IHdpbGwgYmUgbWFya2VkIGFzIGBhY3RpdmUtaGVhZGVyYC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAuPG51bWJlciwgU2VsZWN0aW9uPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhY3RpdmVDb3JuZXJIZWFkZXJzXCIsIG5ldyBNYXAoKSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB0aGUgYHJvd3NgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCBjZWxscyBpbiBhIHJvdy4gSXQgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIG9uIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAuPG51bWJlciwgU2VsZWN0aW9uPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dIaWdobGlnaHRzXCIsIG5ldyBNYXAoKSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB0aGUgYGNvbHVtbnNgIGhpZ2hsaWdodHMuIFRoYXQgb2JqZWN0cyBkZXNjcmliZXMgYXR0cmlidXRlcyBmb3IgdGhlIHNlbGVjdGlvbiBvZlxuICAgICAqIHRoZSBtdWx0aXBsZSBzZWxlY3RlZCBjZWxscyBpbiBhIGNvbHVtbi4gSXQgY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzIG9uIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtNYXAuPG51bWJlciwgU2VsZWN0aW9uPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjb2x1bW5IaWdobGlnaHRzXCIsIG5ldyBNYXAoKSk7XG4gICAgLyoqXG4gICAgICogQ29sbGVjdGlvbiBvZiB0aGUgYGN1c3RvbS1zZWxlY3Rpb25gLCBob2xkZXIgZm9yIGV4YW1wbGUgYm9yZGVycyBhZGRlZCB0aHJvdWdoIEN1c3RvbUJvcmRlcnMgcGx1Z2luLlxuICAgICAqXG4gICAgICogQHR5cGUge1NlbGVjdGlvbltdfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImN1c3RvbVNlbGVjdGlvbnNcIiwgW10pO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mb2N1cyA9ICgwLCBfZm9jdXMuY3JlYXRlSGlnaGxpZ2h0KShvcHRpb25zKTtcbiAgICB0aGlzLmZpbGwgPSAoMCwgX2ZpbGwuY3JlYXRlSGlnaGxpZ2h0KShvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBoaWdobGlnaHQgY2VsbCByZW5kZXJpbmcgaXMgZGlzYWJsZWQgZm9yIHNwZWNpZmllZCBoaWdobGlnaHQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hsaWdodFR5cGUgSGlnaGxpZ2h0IHR5cGUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGBjZWxsYCwgYGFyZWFgLCBgZmlsbGAgb3IgYGhlYWRlcmAuXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlIHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNFbmFibGVkRm9yKGhpZ2hsaWdodFR5cGUsIGNvb3Jkcykge1xuICAgIGxldCB0eXBlID0gaGlnaGxpZ2h0VHlwZTtcblxuICAgIC8vIExlZ2FjeSBjb21wYXRpYmlsaXR5LlxuICAgIGlmIChoaWdobGlnaHRUeXBlID09PSBfc3JjLkhJR0hMSUdIVF9GT0NVU19UWVBFKSB7XG4gICAgICB0eXBlID0gJ2N1cnJlbnQnOyAvLyBPbmUgZnJvbSBzZXR0aW5ncyBmb3IgYGRpc2FibGVWaXN1YWxTZWxlY3Rpb25gIHVwIHRvIEhhbmRzb250YWJsZSAwLjM2L0hhbmRzb250YWJsZSBQcm8gMS4xNi4wLlxuICAgIH1cbiAgICBsZXQgZGlzYWJsZUhpZ2hsaWdodCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oY29vcmRzLnJvdywgY29vcmRzLmNvbCk7XG4gICAgaWYgKHR5cGVvZiBkaXNhYmxlSGlnaGxpZ2h0ID09PSAnc3RyaW5nJykge1xuICAgICAgZGlzYWJsZUhpZ2hsaWdodCA9IFtkaXNhYmxlSGlnaGxpZ2h0XTtcbiAgICB9XG4gICAgcmV0dXJuIGRpc2FibGVIaWdobGlnaHQgPT09IGZhbHNlIHx8IEFycmF5LmlzQXJyYXkoZGlzYWJsZUhpZ2hsaWdodCkgJiYgIWRpc2FibGVIaWdobGlnaHQuaW5jbHVkZXModHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbmV3IGxheWVyIGxldmVsIHRvIG1ha2UgYWNjZXNzIHRvIHRoZSBkZXNpcmUgYGFyZWFgIGFuZCBgaGVhZGVyYCBoaWdobGlnaHRzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xldmVsPTBdIExheWVyIGxldmVsIHRvIHVzZS5cbiAgICogQHJldHVybnMge0hpZ2hsaWdodH1cbiAgICovXG4gIHVzZUxheWVyTGV2ZWwoKSB7XG4gICAgbGV0IGxldmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgIHRoaXMubGF5ZXJMZXZlbCA9IGxldmVsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2UgY3JlYXRlZCBmb3IgY29udHJvbGxpbmcgaGlnaGxpZ2h0IG9mIHRoZSBjdXJyZW50bHlcbiAgICogZm9jdXNlZCBjZWxsIChvciBoZWFkZXIpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICAgKi9cbiAgZ2V0Rm9jdXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZyBoaWdobGlnaHQgb2YgdGhlIGF1dG9maWxsIGZ1bmN0aW9uYWxpdHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb259XG4gICAqL1xuICBnZXRGaWxsKCkge1xuICAgIHJldHVybiB0aGlzLmZpbGw7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyAoaWYgbm90IGV4aXN0IGluIHRoZSBjYWNoZSkgV2Fsa29udGFibGUgU2VsZWN0aW9uIGluc3RhbmNlIGNyZWF0ZWQgZm9yIGNvbnRyb2xsaW5nXG4gICAqIGBhcmVhYCBoaWdobGlnaHRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICAgKi9cbiAgY3JlYXRlTGF5ZXJlZEFyZWEoKSB7XG4gICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9IaWdobGlnaHRfYnJhbmQsIHRoaXMsIF9jcmVhdGVIaWdobGlnaHQpLmNhbGwodGhpcywgdGhpcy5sYXllcmVkQXJlYXMsIF9hcmVhTGF5ZXJlZC5jcmVhdGVIaWdobGlnaHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgV2Fsa29udGFibGUgU2VsZWN0aW9uIGluc3RhbmNlcyB3aGljaCBkZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSB2aXN1YWwgaGlnaGxpZ2h0IG9mIHRoZSBjZWxscy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbltdfVxuICAgKi9cbiAgZ2V0TGF5ZXJlZEFyZWFzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgKGlmIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUpIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZ1xuICAgKiBgaGlnaGxpZ2h0YCBoaWdobGlnaHRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICAgKi9cbiAgY3JlYXRlQXJlYSgpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZ2hsaWdodF9icmFuZCwgdGhpcywgX2NyZWF0ZUhpZ2hsaWdodCkuY2FsbCh0aGlzLCB0aGlzLmFyZWFzLCBfYXJlYS5jcmVhdGVIaWdobGlnaHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgV2Fsa29udGFibGUgU2VsZWN0aW9uIGluc3RhbmNlcyB3aGljaCBkZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSB2aXN1YWwgaGlnaGxpZ2h0IG9mIHRoZSBjZWxscy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbltdfVxuICAgKi9cbiAgZ2V0QXJlYXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFyZWFzLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIChpZiBub3QgZXhpc3QgaW4gdGhlIGNhY2hlKSBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2UgY3JlYXRlZCBmb3IgY29udHJvbGxpbmdcbiAgICogaGVhZGVyIGhpZ2hsaWdodCBmb3Igcm93cy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGNyZWF0ZVJvd0hlYWRlcigpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZ2hsaWdodF9icmFuZCwgdGhpcywgX2NyZWF0ZUhpZ2hsaWdodCkuY2FsbCh0aGlzLCB0aGlzLnJvd0hlYWRlcnMsIF9oZWFkZXIuY3JlYXRlSGlnaGxpZ2h0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZXMgd2hpY2ggZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgdmlzdWFsIGhpZ2hsaWdodCBvZiB0aGUgaGVhZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbltdfVxuICAgKi9cbiAgZ2V0Um93SGVhZGVycygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyAoaWYgbm90IGV4aXN0IGluIHRoZSBjYWNoZSkgV2Fsa29udGFibGUgU2VsZWN0aW9uIGluc3RhbmNlIGNyZWF0ZWQgZm9yIGNvbnRyb2xsaW5nXG4gICAqIGhlYWRlciBoaWdobGlnaHQgZm9yIGNvbHVtbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb259XG4gICAqL1xuICBjcmVhdGVDb2x1bW5IZWFkZXIoKSB7XG4gICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9IaWdobGlnaHRfYnJhbmQsIHRoaXMsIF9jcmVhdGVIaWdobGlnaHQpLmNhbGwodGhpcywgdGhpcy5jb2x1bW5IZWFkZXJzLCBfaGVhZGVyLmNyZWF0ZUhpZ2hsaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2VzIHdoaWNoIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIHZpc3VhbCBoaWdobGlnaHQgb2YgdGhlIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25bXX1cbiAgICovXG4gIGdldENvbHVtbkhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgKGlmIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUpIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZ1xuICAgKiBoaWdobGlnaHQgZm9yIGFjdGl2ZSByb3cgaGVhZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZ2hsaWdodF9icmFuZCwgdGhpcywgX2NyZWF0ZUhpZ2hsaWdodCkuY2FsbCh0aGlzLCB0aGlzLmFjdGl2ZVJvd0hlYWRlcnMsIF9hY3RpdmVIZWFkZXIuY3JlYXRlSGlnaGxpZ2h0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZXMgd2hpY2ggZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgdmlzdWFsIGhpZ2hsaWdodCBvZiB0aGUgYWN0aXZlIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25bXX1cbiAgICovXG4gIGdldEFjdGl2ZVJvd0hlYWRlcnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgKGlmIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUpIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZ1xuICAgKiBoaWdobGlnaHQgZm9yIGFjdGl2ZSBjb2x1bW4gaGVhZGVycy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZ2hsaWdodF9icmFuZCwgdGhpcywgX2NyZWF0ZUhpZ2hsaWdodCkuY2FsbCh0aGlzLCB0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMsIF9hY3RpdmVIZWFkZXIuY3JlYXRlSGlnaGxpZ2h0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZXMgd2hpY2ggZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgdmlzdWFsIGhpZ2hsaWdodCBvZiB0aGUgYWN0aXZlIGhlYWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25bXX1cbiAgICovXG4gIGdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgKGlmIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUpIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZ1xuICAgKiBoaWdobGlnaHQgZm9yIHRoZSBoZWFkZXJzIGNvcm5lci5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpIHtcbiAgICByZXR1cm4gX2Fzc2VydENsYXNzQnJhbmQoX0hpZ2hsaWdodF9icmFuZCwgdGhpcywgX2NyZWF0ZUhpZ2hsaWdodCkuY2FsbCh0aGlzLCB0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMsIF9hY3RpdmVIZWFkZXIuY3JlYXRlSGlnaGxpZ2h0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZXMgd2hpY2ggZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiB0aGUgdmlzdWFsIGhpZ2hsaWdodCBvZiB0aGUgaGVhZGVycyBjb3JuZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25bXX1cbiAgICovXG4gIGdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgKGlmIG5vdCBleGlzdCBpbiB0aGUgY2FjaGUpIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZ1xuICAgKiBoaWdobGlnaHQgY2VsbHMgaW4gYSByb3cuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb259XG4gICAqL1xuICBjcmVhdGVSb3dIaWdobGlnaHQoKSB7XG4gICAgcmV0dXJuIF9hc3NlcnRDbGFzc0JyYW5kKF9IaWdobGlnaHRfYnJhbmQsIHRoaXMsIF9jcmVhdGVIaWdobGlnaHQpLmNhbGwodGhpcywgdGhpcy5yb3dIaWdobGlnaHRzLCBfcm93LmNyZWF0ZUhpZ2hsaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2VzIHdoaWNoIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIHJvd3MgaGlnaGxpZ2h0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uW119XG4gICAqL1xuICBnZXRSb3dIaWdobGlnaHRzKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIChpZiBub3QgZXhpc3QgaW4gdGhlIGNhY2hlKSBXYWxrb250YWJsZSBTZWxlY3Rpb24gaW5zdGFuY2UgY3JlYXRlZCBmb3IgY29udHJvbGxpbmdcbiAgICogaGlnaGxpZ2h0IGNlbGxzIGluIGEgY29sdW1uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICAgKi9cbiAgY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCkge1xuICAgIHJldHVybiBfYXNzZXJ0Q2xhc3NCcmFuZChfSGlnaGxpZ2h0X2JyYW5kLCB0aGlzLCBfY3JlYXRlSGlnaGxpZ2h0KS5jYWxsKHRoaXMsIHRoaXMuY29sdW1uSGlnaGxpZ2h0cywgX2NvbHVtbi5jcmVhdGVIaWdobGlnaHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgV2Fsa29udGFibGUgU2VsZWN0aW9uIGluc3RhbmNlcyB3aGljaCBkZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBjb2x1bW5zIGhpZ2hsaWdodGluZy5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbltdfVxuICAgKi9cbiAgZ2V0Q29sdW1uSGlnaGxpZ2h0cygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogR2V0IFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBpbnN0YW5jZSBjcmVhdGVkIGZvciBjb250cm9sbGluZyBoaWdobGlnaHQgb2YgdGhlIGN1c3RvbSBzZWxlY3Rpb24gZnVuY3Rpb25hbGl0eS5cbiAgICpcbiAgICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAgICovXG4gIGdldEN1c3RvbVNlbGVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBzZWxlY3Rpb24gdG8gdGhlIGN1c3RvbSBzZWxlY3Rpb24gaW5zdGFuY2UuIFRoZSBuZXcgc2VsZWN0aW9uIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNlbGVjdGlvbkluc3RhbmNlIFRoZSBzZWxlY3Rpb24gaW5zdGFuY2UuXG4gICAqL1xuICBhZGRDdXN0b21TZWxlY3Rpb24oc2VsZWN0aW9uSW5zdGFuY2UpIHtcbiAgICB0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaCgoMCwgX2N1c3RvbVNlbGVjdGlvbi5jcmVhdGVIaWdobGlnaHQpKHtcbiAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgIC4uLnNlbGVjdGlvbkluc3RhbmNlXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gY2xlYW5pbmcgdmlzdWFsIGhpZ2hsaWdodHMgZm9yIHRoZSB3aG9sZSB0YWJsZS5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuZm9jdXMuY2xlYXIoKTtcbiAgICB0aGlzLmZpbGwuY2xlYXIoKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5hcmVhcy52YWx1ZXMoKSwgaGlnaGxpZ2h0ID0+IHZvaWQgaGlnaGxpZ2h0LmNsZWFyKCkpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSwgaGlnaGxpZ2h0ID0+IHZvaWQgaGlnaGxpZ2h0LmNsZWFyKCkpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnJvd0hlYWRlcnMudmFsdWVzKCksIGhpZ2hsaWdodCA9PiB2b2lkIGhpZ2hsaWdodC5jbGVhcigpKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSwgaGlnaGxpZ2h0ID0+IHZvaWQgaGlnaGxpZ2h0LmNsZWFyKCkpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksIGhpZ2hsaWdodCA9PiB2b2lkIGhpZ2hsaWdodC5jbGVhcigpKTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSwgaGlnaGxpZ2h0ID0+IHZvaWQgaGlnaGxpZ2h0LmNsZWFyKCkpO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksIGhpZ2hsaWdodCA9PiB2b2lkIGhpZ2hsaWdodC5jbGVhcigpKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBvYmplY3QgY2FuIGJlIGl0ZXJhdGUgb3ZlciB1c2luZyBgZm9yIG9mYCBzeW50YXggb3IgdXNpbmcgaW50ZXJuYWwgYGFycmF5RWFjaGAgaGVscGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uW119XG4gICAqL1xuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gW3RoaXMuZm9jdXMsIHRoaXMuZmlsbCwgLi4udGhpcy5hcmVhcy52YWx1ZXMoKSwgLi4udGhpcy5sYXllcmVkQXJlYXMudmFsdWVzKCksIC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwgLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLCAuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksIC4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSwgLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLCAuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksIC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwgLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jcmVhdGVIaWdobGlnaHQoY2FjaGVNYXAsIGhpZ2hsaWdodEZhY3RvcnkpIHtcbiAgY29uc3QgbGF5ZXJMZXZlbCA9IHRoaXMubGF5ZXJMZXZlbDtcbiAgaWYgKGNhY2hlTWFwLmhhcyhsYXllckxldmVsKSkge1xuICAgIHJldHVybiBjYWNoZU1hcC5nZXQobGF5ZXJMZXZlbCk7XG4gIH1cbiAgY29uc3QgaGlnaGxpZ2h0ID0gaGlnaGxpZ2h0RmFjdG9yeSh7XG4gICAgbGF5ZXJMZXZlbCxcbiAgICAuLi50aGlzLm9wdGlvbnNcbiAgfSk7XG4gIGNhY2hlTWFwLnNldChsYXllckxldmVsLCBoaWdobGlnaHQpO1xuICByZXR1cm4gaGlnaGxpZ2h0O1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gSGlnaGxpZ2h0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3Zpc3VhbFNlbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3Zpc3VhbFNlbGVjdGlvblwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBuZXcgaW5zdGFuY2Ugb2YgU2VsZWN0aW9uLCByZXNwb25zaWJsZSBmb3IgaGlnaGxpZ2h0aW5nIGNvbHVtbiBvciByb3cgaGVhZGVyc1xuICogb25seSB3aGVuIHRoZSB3aG9sZSBjb2x1bW4gb3Igcm93IGlzIHNlbGVjdGVkLlxuICogVGhpcyB0eXBlIG9mIHNlbGVjdGlvbiBjYW4gb2NjdXIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodFBhcmFtcyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGNyZWF0ZSBhIGhpZ2hsaWdodC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoaWdobGlnaHRQYXJhbXMuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lIEhpZ2hsaWdodGVkIGhlYWRlcnMnIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICovXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoX3JlZikge1xuICBsZXQge1xuICAgIGFjdGl2ZUhlYWRlckNsYXNzTmFtZSxcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgcmV0dXJuIG5ldyBfdmlzdWFsU2VsZWN0aW9uLmRlZmF1bHQoe1xuICAgIGNsYXNzTmFtZTogYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLFxuICAgIC4uLnJlc3RPcHRpb25zLFxuICAgIHNlbGVjdGlvblR5cGU6IF9zcmMuSElHSExJR0hUX0FDVElWRV9IRUFERVJfVFlQRVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xudmFyIF9zcmMgPSByZXF1aXJlKFwiLi4vLi4vLi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpO1xudmFyIF92aXN1YWxTZWxlY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi92aXN1YWxTZWxlY3Rpb25cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogQ3JlYXRlcyB0aGUgbmV3IGluc3RhbmNlIG9mIFNlbGVjdGlvbiByZXNwb25zaWJsZSBmb3IgaGlnaGxpZ2h0aW5nIGFyZWEgb2YgdGhlIHNlbGVjdGVkIG11bHRpcGxlIGNlbGxzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBoaWdobGlnaHRQYXJhbXMgQSBjb25maWd1cmF0aW9uIG9iamVjdCB0byBjcmVhdGUgYSBoaWdobGlnaHQuXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zLmFyZWFDb3JuZXJWaXNpYmxlIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBhcmVhJ3MgY29ybmVyIHNob3VsZCBiZSB2aXNpYmxlLlxuICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgcmV0dXJuIG5ldyBfdmlzdWFsU2VsZWN0aW9uLmRlZmF1bHQoe1xuICAgIGNsYXNzTmFtZTogJ2hpZ2hsaWdodCcsXG4gICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgc2VsZWN0aW9uVHlwZTogX3NyYy5ISUdITElHSFRfQVJFQV9UWVBFXG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3Zpc3VhbFNlbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3Zpc3VhbFNlbGVjdGlvblwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBuZXcgaW5zdGFuY2Ugb2YgU2VsZWN0aW9uIHJlc3BvbnNpYmxlIGZvciBoaWdobGlnaHRpbmcgYXJlYSBvZiB0aGUgc2VsZWN0ZWQgbXVsdGlwbGUgY2VsbHMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodFBhcmFtcyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIGNyZWF0ZSBhIGhpZ2hsaWdodC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBoaWdobGlnaHRQYXJhbXMuYXJlYUNvcm5lclZpc2libGUgRnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGFyZWEncyBjb3JuZXIgc2hvdWxkIGJlIHZpc2libGUuXG4gKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICovXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoX3JlZikge1xuICBsZXQge1xuICAgIGFyZWFDb3JuZXJWaXNpYmxlLFxuICAgIC4uLnJlc3RPcHRpb25zXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gbmV3IF92aXN1YWxTZWxlY3Rpb24uZGVmYXVsdCh7XG4gICAgY2xhc3NOYW1lOiAnYXJlYScsXG4gICAgY3JlYXRlTGF5ZXJzOiB0cnVlLFxuICAgIGJvcmRlcjoge1xuICAgICAgd2lkdGg6IDEsXG4gICAgICBjb2xvcjogJyM0Yjg5ZmYnLFxuICAgICAgY29ybmVyVmlzaWJsZTogYXJlYUNvcm5lclZpc2libGVcbiAgICB9LFxuICAgIC4uLnJlc3RPcHRpb25zLFxuICAgIHNlbGVjdGlvblR5cGU6IF9zcmMuSElHSExJR0hUX0FSRUFfVFlQRVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xudmFyIF9zcmMgPSByZXF1aXJlKFwiLi4vLi4vLi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpO1xudmFyIF92aXN1YWxTZWxlY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi92aXN1YWxTZWxlY3Rpb25cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogQ3JlYXRlcyB0aGUgbmV3IGluc3RhbmNlIG9mIFNlbGVjdGlvbiwgcmVzcG9uc2libGUgZm9yIGhpZ2hsaWdodGluZyBjZWxscyBpbiBhIGNvbHVtbnMgYW5kXG4gKiBjb2x1bW4gaGVhZGVycy5cbiAqIFRoaXMgdHlwZSBvZiBzZWxlY3Rpb24gY2FuIG9jY3VyIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBoaWdobGlnaHRQYXJhbXMgQSBjb25maWd1cmF0aW9uIG9iamVjdCB0byBjcmVhdGUgYSBoaWdobGlnaHQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaGlnaGxpZ2h0UGFyYW1zLmNvbHVtbkNsYXNzTmFtZSBIaWdobGlnaHRlZCBjb2x1bW4nIGNsYXNzIG5hbWUuXG4gKiBAcmV0dXJucyB7U2VsZWN0aW9ufVxuICovXG5mdW5jdGlvbiBjcmVhdGVIaWdobGlnaHQoX3JlZikge1xuICBsZXQge1xuICAgIGNvbHVtbkNsYXNzTmFtZSxcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgcmV0dXJuIG5ldyBfdmlzdWFsU2VsZWN0aW9uLmRlZmF1bHQoe1xuICAgIGNsYXNzTmFtZTogY29sdW1uQ2xhc3NOYW1lLFxuICAgIC4uLnJlc3RPcHRpb25zLFxuICAgIHNlbGVjdGlvblR5cGU6IF9zcmMuSElHSExJR0hUX0NPTFVNTl9UWVBFXG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3Zpc3VhbFNlbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3Zpc3VhbFNlbGVjdGlvblwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBuZXcgaW5zdGFuY2Ugb2YgU2VsZWN0aW9uIHJlc3BvbnNpYmxlIGZvciBoaWdobGlnaHRpbmcgY3VycmVudGx5IHNlbGVjdGVkIGNlbGwuXG4gKiBUaGlzIHR5cGUgb2Ygc2VsZWN0aW9uIGNhbiBwcmVzZW50IG9uIHRoZSB0YWJsZSBvbmx5IG9uZSBhdCB0aGUgdGltZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gY3JlYXRlIGEgaGlnaGxpZ2h0LlxuICogQHBhcmFtIHtvYmplY3R9IGhpZ2hsaWdodFBhcmFtcy5ib3JkZXIgQm9yZGVyIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zLnZpc3VhbENlbGxSYW5nZSBGdW5jdGlvbiB0byB0cmFuc2xhdGUgdmlzdWFsIHRvIHJlbmRlcmFibGUgY29vcmRzLlxuICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBib3JkZXIsXG4gICAgdmlzdWFsQ2VsbFJhbmdlLFxuICAgIC4uLnJlc3RPcHRpb25zXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gbmV3IF92aXN1YWxTZWxlY3Rpb24uZGVmYXVsdCh7XG4gICAgLi4uYm9yZGVyLFxuICAgIC4uLnJlc3RPcHRpb25zLFxuICAgIHNlbGVjdGlvblR5cGU6IF9zcmMuSElHSExJR0hUX0NVU1RPTV9TRUxFQ1RJT05fVFlQRVxuICB9LCB2aXN1YWxDZWxsUmFuZ2UpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVIaWdobGlnaHQgPSBjcmVhdGVIaWdobGlnaHQ7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8zcmRwYXJ0eS93YWxrb250YWJsZS9zcmNcIik7XG52YXIgX3Zpc3VhbFNlbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL3Zpc3VhbFNlbGVjdGlvblwiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBuZXcgaW5zdGFuY2Ugb2YgU2VsZWN0aW9uLCByZXNwb25zaWJsZSBmb3IgaGlnaGxpZ2h0aW5nIGNlbGxzIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IGZpbGwgaGFuZGxlXG4gKiBmdW5jdGlvbmFsaXR5LiBUaGlzIHR5cGUgb2Ygc2VsZWN0aW9uIGNhbiBwcmVzZW50IG9uIHRoZSB0YWJsZSBvbmx5IG9uZSBhdCB0aGUgdGltZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gY3JlYXRlIGEgaGlnaGxpZ2h0LlxuICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgcmV0dXJuIG5ldyBfdmlzdWFsU2VsZWN0aW9uLmRlZmF1bHQoe1xuICAgIGNsYXNzTmFtZTogJ2ZpbGwnLFxuICAgIGJvcmRlcjoge1xuICAgICAgd2lkdGg6IDEsXG4gICAgICBjb2xvcjogJyNmZjAwMDAnXG4gICAgfSxcbiAgICAuLi5yZXN0T3B0aW9ucyxcbiAgICBzZWxlY3Rpb25UeXBlOiBfc3JjLkhJR0hMSUdIVF9GSUxMX1RZUEVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbnZhciBfc3JjID0gcmVxdWlyZShcIi4uLy4uLy4uLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyY1wiKTtcbnZhciBfdmlzdWFsU2VsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdmlzdWFsU2VsZWN0aW9uXCIpKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9oZWxwZXJzL2ExMXlcIik7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuLyoqXG4gKiBDcmVhdGVzIHRoZSBuZXcgaW5zdGFuY2Ugb2YgU2VsZWN0aW9uIHJlc3BvbnNpYmxlIGZvciBoaWdobGlnaHRpbmcgY3VycmVudGx5IHNlbGVjdGVkIGNlbGwuIFRoaXMgdHlwZSBvZiBzZWxlY3Rpb25cbiAqIGNhbiBwcmVzZW50IG9uIHRoZSB0YWJsZSBvbmx5IG9uZSBhdCB0aGUgdGltZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gY3JlYXRlIGEgaGlnaGxpZ2h0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGlnaGxpZ2h0UGFyYW1zLmNlbGxDb3JuZXJWaXNpYmxlIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiBjZWxsJ3MgY29ybmVyIHNob3VsZCBiZSB2aXNpYmxlLlxuICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBjZWxsQ29ybmVyVmlzaWJsZSxcbiAgICAuLi5yZXN0T3B0aW9uc1xuICB9ID0gX3JlZjtcbiAgcmV0dXJuIG5ldyBfdmlzdWFsU2VsZWN0aW9uLmRlZmF1bHQoe1xuICAgIGNsYXNzTmFtZTogJ2N1cnJlbnQnLFxuICAgIGhlYWRlckF0dHJpYnV0ZXM6IFsoMCwgX2ExMXkuQTExWV9TRUxFQ1RFRCkoKV0sXG4gICAgYm9yZGVyOiB7XG4gICAgICB3aWR0aDogMixcbiAgICAgIGNvbG9yOiAnIzRiODlmZicsXG4gICAgICBjb3JuZXJWaXNpYmxlOiBjZWxsQ29ybmVyVmlzaWJsZVxuICAgIH0sXG4gICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgc2VsZWN0aW9uVHlwZTogX3NyYy5ISUdITElHSFRfRk9DVVNfVFlQRVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlSGlnaGxpZ2h0ID0gY3JlYXRlSGlnaGxpZ2h0O1xudmFyIF9zcmMgPSByZXF1aXJlKFwiLi4vLi4vLi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpO1xudmFyIF92aXN1YWxTZWxlY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLi92aXN1YWxTZWxlY3Rpb25cIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8qKlxuICogQ3JlYXRlcyB0aGUgbmV3IGluc3RhbmNlIG9mIFNlbGVjdGlvbiwgcmVzcG9uc2libGUgZm9yIGhpZ2hsaWdodGluZyBjb2x1bW4gb3Igcm93IGhlYWRlcnMgd2hlblxuICogYW55IGNlbGwgaXMgc2VsZWN0ZWQuXG4gKiBUaGlzIHR5cGUgb2Ygc2VsZWN0aW9uIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gY3JlYXRlIGEgaGlnaGxpZ2h0LlxuICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hsaWdodFBhcmFtcy5oZWFkZXJDbGFzc05hbWUgSGlnaGxpZ2h0ZWQgaGVhZGVycycgY2xhc3MgbmFtZS5cbiAqIEByZXR1cm5zIHtTZWxlY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhpZ2hsaWdodChfcmVmKSB7XG4gIGxldCB7XG4gICAgaGVhZGVyQ2xhc3NOYW1lLFxuICAgIC4uLnJlc3RPcHRpb25zXG4gIH0gPSBfcmVmO1xuICByZXR1cm4gbmV3IF92aXN1YWxTZWxlY3Rpb24uZGVmYXVsdCh7XG4gICAgY2xhc3NOYW1lOiBoZWFkZXJDbGFzc05hbWUsXG4gICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgc2VsZWN0aW9uVHlwZTogX3NyYy5ISUdITElHSFRfSEVBREVSX1RZUEVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUhpZ2hsaWdodCA9IGNyZWF0ZUhpZ2hsaWdodDtcbnZhciBfc3JjID0gcmVxdWlyZShcIi4uLy4uLy4uLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyY1wiKTtcbnZhciBfdmlzdWFsU2VsZWN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdmlzdWFsU2VsZWN0aW9uXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG4vKipcbiAqIENyZWF0ZXMgdGhlIG5ldyBpbnN0YW5jZSBvZiBTZWxlY3Rpb24sIHJlc3BvbnNpYmxlIGZvciBoaWdobGlnaHRpbmcgY2VsbHMgaW4gYSByb3dzIGFuZFxuICogcm93IGhlYWRlcnMuXG4gKiBUaGlzIHR5cGUgb2Ygc2VsZWN0aW9uIGNhbiBvY2N1ciBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gaGlnaGxpZ2h0UGFyYW1zIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gY3JlYXRlIGEgaGlnaGxpZ2h0LlxuICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hsaWdodFBhcmFtcy5yb3dDbGFzc05hbWUgSGlnaGxpZ2h0ZWQgcm93JyBjbGFzcyBuYW1lLlxuICogQHJldHVybnMge1NlbGVjdGlvbn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGlnaGxpZ2h0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICByb3dDbGFzc05hbWUsXG4gICAgLi4ucmVzdE9wdGlvbnNcbiAgfSA9IF9yZWY7XG4gIHJldHVybiBuZXcgX3Zpc3VhbFNlbGVjdGlvbi5kZWZhdWx0KHtcbiAgICBjbGFzc05hbWU6IHJvd0NsYXNzTmFtZSxcbiAgICAuLi5yZXN0T3B0aW9ucyxcbiAgICBzZWxlY3Rpb25UeXBlOiBfc3JjLkhJR0hMSUdIVF9ST1dfVFlQRVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLy4uLy4uLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyY1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuY2xhc3MgVmlzdWFsU2VsZWN0aW9uIGV4dGVuZHMgX3NyYy5TZWxlY3Rpb24ge1xuICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgdmlzdWFsQ2VsbFJhbmdlKSB7XG4gICAgc3VwZXIoc2V0dGluZ3MsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFJhbmdlIG9mIHNlbGVjdGlvbiB2aXN1YWxseS4gVmlzdWFsIHJlcHJlc2VudGF0aW9uIG1heSBoYXZlIHJlcHJlc2VudGF0aW9uIGluIGEgcmVuZGVyZWQgc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge251bGx8Q2VsbFJhbmdlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInZpc3VhbENlbGxSYW5nZVwiLCBudWxsKTtcbiAgICB0aGlzLnZpc3VhbENlbGxSYW5nZSA9IHZpc3VhbENlbGxSYW5nZSB8fCBudWxsO1xuICAgIHRoaXMuY29tbWl0KCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYSBjZWxsIGNvb3JkcyB0byB0aGUgc2VsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBWaXN1YWwgY29vcmRpbmF0ZXMgb2YgYSBjZWxsLlxuICAgKiBAcmV0dXJucyB7VmlzdWFsU2VsZWN0aW9ufVxuICAgKi9cbiAgYWRkKGNvb3Jkcykge1xuICAgIGlmICh0aGlzLnZpc3VhbENlbGxSYW5nZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy52aXN1YWxDZWxsUmFuZ2UgPSB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShjb29yZHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc3VhbENlbGxSYW5nZS5leHBhbmQoY29vcmRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHZpc3VhbCBhbmQgcmVuZGVyYWJsZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtWaXN1YWxTZWxlY3Rpb259XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLnZpc3VhbENlbGxSYW5nZSA9IG51bGw7XG4gICAgcmV0dXJuIHN1cGVyLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogVHJpbXMgdGhlIHBhc3NlZCBjZWxsIHJhbmdlIG9iamVjdCBieSByZW1vdmluZyBhbGwgY29vcmRpbmF0ZXMgdGhhdCBwb2ludHMgdG8gdGhlIGhpZGRlbiByb3dzXG4gICAqIG9yIGNvbHVtbnMuIFRoZSByZXN1bHQgaXMgYSBuZXcgY2VsbCByYW5nZSBvYmplY3QgdGhhdCBwb2ludHMgb25seSB0byB0aGUgdmlzaWJsZSBpbmRleGVzIG9yIGBudWxsYC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGNlbGxSYW5nZSBDZWxscyByYW5nZSBvYmplY3QgdG8gYmUgdHJpbW1lZC5cbiAgICogQHJldHVybnMge0NlbGxSYW5nZX0gVmlzdWFsIG5vbi1oaWRkZW4gY2VsbHMgcmFuZ2UgY29vcmRpbmF0ZXMuXG4gICAqL1xuICB0cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkoX3JlZikge1xuICAgIGxldCB7XG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gX3JlZjtcbiAgICBsZXQgdmlzaWJsZUZyb21Db29yZHMgPSB0aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZnJvbSwgMSk7XG4gICAgbGV0IHZpc2libGVUb0Nvb3JkcyA9IHRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3Jkcyh0bywgLTEpO1xuICAgIGlmICh2aXNpYmxlRnJvbUNvb3JkcyA9PT0gbnVsbCB8fCB2aXNpYmxlVG9Db29yZHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmlzaWJsZUZyb21Db29yZHMucm93ID4gdmlzaWJsZVRvQ29vcmRzLnJvdyB8fCB2aXNpYmxlRnJvbUNvb3Jkcy5jb2wgPiB2aXNpYmxlVG9Db29yZHMuY29sKSB7XG4gICAgICB2aXNpYmxlRnJvbUNvb3JkcyA9IGZyb207XG4gICAgICB2aXNpYmxlVG9Db29yZHMgPSB0bztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKHZpc2libGVGcm9tQ29vcmRzLCB2aXNpYmxlRnJvbUNvb3JkcywgdmlzaWJsZVRvQ29vcmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG5lYXJlc3QgY29vcmRpbmF0ZXMgdGhhdCBwb2ludHMgdG8gdGhlIHZpc2libGUgcm93IGFuZCBjb2x1bW4gaW5kZXhlcy4gSWYgdGhlcmUgYXJlIG5vIHZpc2libGVcbiAgICogcm93cyBhbmQvb3IgY29sdW1ucyB0aGUgYG51bGxgIHZhbHVlIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBUaGUgY29vcmRzIG9iamVjdCBhcyBzdGFydGluZyBwb2ludCBmb3IgZmluZGluZyB0aGUgbmVhcmVzdCB2aXNpYmxlIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0gezF8LTF9IHJvd1NlYXJjaERpcmVjdGlvbiBUaGUgc2VhcmNoIGRpcmVjdGlvbi4gRm9yIHZhbHVlIDEsIGl0IG1lYW5zIHNlYXJjaGluZyBmcm9tIHRvcCB0byBib3R0b20gZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgYW5kIGZyb20gbGVmdCB0byByaWdodCBmb3IgY29sdW1ucy4gRm9yIC0xLCBpdCBpcyB0aGUgb3RoZXIgd2F5IGFyb3VuZC5cbiAgICogQHBhcmFtIHsxfC0xfSBjb2x1bW5TZWFyY2hEaXJlY3Rpb24gVGhlIHNhbWUgYXMgYWJvdmUgYnV0IGZvciByb3dzLlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc3xudWxsfSBWaXN1YWwgY2VsbCBjb29yZGluYXRlcy5cbiAgICovXG4gIGdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoY29vcmRzLCByb3dTZWFyY2hEaXJlY3Rpb24pIHtcbiAgICBsZXQgY29sdW1uU2VhcmNoRGlyZWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiByb3dTZWFyY2hEaXJlY3Rpb247XG4gICAgY29uc3QgbmV4dFZpc2libGVSb3cgPSB0aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLCBjb29yZHMucm93LCByb3dTZWFyY2hEaXJlY3Rpb24pO1xuXG4gICAgLy8gVGhlcmUgYXJlIG5vIG1vcmUgdmlzdWFsIHJvd3MgaW4gdGhlIHJhbmdlLlxuICAgIGlmIChuZXh0VmlzaWJsZVJvdyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG5leHRWaXNpYmxlQ29sdW1uID0gdGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlciwgY29vcmRzLmNvbCwgY29sdW1uU2VhcmNoRGlyZWN0aW9uKTtcblxuICAgIC8vIFRoZXJlIGFyZSBubyBtb3JlIHZpc3VhbCBjb2x1bW5zIGluIHRoZSByYW5nZS5cbiAgICBpZiAobmV4dFZpc2libGVDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKG5leHRWaXNpYmxlUm93LCBuZXh0VmlzaWJsZUNvbHVtbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBuZWFyZXN0IHZpc3VhbCBpbmRleC4gSWYgdGhlcmUgYXJlIG5vIHZpc2libGUgcm93cyBvciBjb2x1bW5zIHRoZSBgbnVsbGAgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SW5kZXhNYXBwZXJ9IGluZGV4TWFwcGVyIFRoZSBJbmRleE1hcHBlciBpbnN0YW5jZSBmb3Igc3BlY2lmaWMgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEluZGV4IFRoZSBpbmRleCBhcyBzdGFydGluZyBwb2ludCBmb3IgZmluZGluZyB0aGUgbmVhcmVzdCB2aXNpYmxlIGluZGV4LlxuICAgKiBAcGFyYW0gezF8LTF9IHNlYXJjaERpcmVjdGlvbiBUaGUgc2VhcmNoIGRpcmVjdGlvbi4gRm9yIHZhbHVlIDEsIGl0IG1lYW5zIHNlYXJjaGluZyBmcm9tIHRvcCB0byBib3R0b20gZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgYW5kIGZyb20gbGVmdCB0byByaWdodCBmb3IgY29sdW1ucy4gRm9yIC0xLCBpdCBpcyB0aGUgb3RoZXIgd2F5IGFyb3VuZC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfSBWaXN1YWwgcm93L2NvbHVtbiBpbmRleC5cbiAgICovXG4gIGdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChpbmRleE1hcHBlciwgdmlzdWFsSW5kZXgsIHNlYXJjaERpcmVjdGlvbikge1xuICAgIGlmICh2aXN1YWxJbmRleCA8IDApIHtcbiAgICAgIHJldHVybiB2aXN1YWxJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxJbmRleCwgc2VhcmNoRGlyZWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSBpbnRlcm5hbGx5IHN0b3JlZCB2aXN1YWwgaW5kZXhlcyBhZGRlZCBieSB0aGUgU2VsZWN0aW9uJ3MgYGFkZGAgZnVuY3Rpb24uIEl0IHNob3VsZCBiZSBleGVjdXRlZFxuICAgKiBhdCB0aGUgZW5kIG9mIHByb2Nlc3Mgb2YgYWRkaW5nIHZpc3VhbCBzZWxlY3Rpb24gY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtWaXN1YWxTZWxlY3Rpb259XG4gICAqL1xuICBjb21taXQoKSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gaW5mb3JtYXRpb24gYWJvdXQgdmlzdWFsIHJhbmdlcywgdGh1cyBubyBzZWxlY3Rpb24gbWF5IGJlIGRpc3BsYXllZC5cbiAgICBpZiAodGhpcy52aXN1YWxDZWxsUmFuZ2UgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb25zdCB0cmltbWVkQ2VsbFJhbmdlID0gdGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO1xuXG4gICAgLy8gVGhlcmUgaXMgbm8gdmlzdWFsIHN0YXJ0IHBvaW50IChhbmQgYWxzbyB2aXN1YWwgZW5kIHBvaW50KSBpbiB0aGUgcmFuZ2UuXG4gICAgaWYgKHRyaW1tZWRDZWxsUmFuZ2UgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuY2VsbFJhbmdlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jZWxsUmFuZ2UgPSB0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UodHJpbW1lZENlbGxSYW5nZS5mcm9tLCB0cmltbWVkQ2VsbFJhbmdlLnRvKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU29tZSBzZWxlY3Rpb24gbWF5IGJlIGEgcGFydCBvZiBicm9hZGVyIGNlbGwgcmFuZ2UuIFRoaXMgZnVuY3Rpb24gc3luYyBjb29yZGluYXRlcyBvZiBjdXJyZW50IHNlbGVjdGlvblxuICAgKiBhbmQgdGhlIGJyb2FkZXIgY2VsbCByYW5nZSB3aGVuIG5lZWRlZCAoY3VycmVudCBzZWxlY3Rpb24gY2FuJ3QgYmUgcHJlc2VudGVkIHZpc3VhbGx5KS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IGJyb2FkZXJDZWxsUmFuZ2UgVmlzdWFsIHJhbmdlLiBBY3R1YWwgY2VsbCByYW5nZSBtYXkgYmUgY29udGFpbmVkIGluIHRoZSBicm9hZGVyIGNlbGwgcmFuZ2UuXG4gICAqIFdoZW4gdGhlcmUgaXMgbm8gd2F5IHRvIHJlcHJlc2VudCBzb21lIGNlbGwgcmFuZ2UgdmlzdWFsbHkgd2UgdHJ5IHRvIGZpbmQgcmFuZ2UgY29udGFpbmluZyBqdXN0IHRoZSBmaXJzdCB2aXNpYmxlIGNlbGwuXG4gICAqXG4gICAqIFdhcm46IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBjaGFuZ2UgY29vcmRpbmF0ZXMgb2YgdGhlIGhhbmRsZWQgYnJvYWRlciByYW5nZS5cbiAgICpcbiAgICogQHJldHVybnMge1Zpc3VhbFNlbGVjdGlvbn1cbiAgICovXG4gIHN5bmNXaXRoKGJyb2FkZXJDZWxsUmFuZ2UpIHtcbiAgICBjb25zdCBjb29yZHNGcm9tID0gYnJvYWRlckNlbGxSYW5nZS5mcm9tLmNsb25lKCkubm9ybWFsaXplKCk7XG4gICAgY29uc3Qgcm93RGlyZWN0aW9uID0gYnJvYWRlckNlbGxSYW5nZS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpID09PSAnTi1TJyA/IDEgOiAtMTtcbiAgICBjb25zdCBjb2x1bW5EaXJlY3Rpb24gPSBicm9hZGVyQ2VsbFJhbmdlLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSA9PT0gJ1ctRScgPyAxIDogLTE7XG4gICAgY29uc3QgcmVuZGVyYWJsZUhpZ2hsaWdodCA9IHRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCk7XG4gICAgbGV0IGNlbGxDb29yZHNWaXN1YWwgPSBudWxsO1xuICAgIGlmIChyZW5kZXJhYmxlSGlnaGxpZ2h0ID09PSBudWxsIHx8IHJlbmRlcmFibGVIaWdobGlnaHQuY29sID09PSBudWxsIHx8IHJlbmRlcmFibGVIaWdobGlnaHQucm93ID09PSBudWxsKSB7XG4gICAgICBjZWxsQ29vcmRzVmlzdWFsID0gdGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGNvb3Jkc0Zyb20sIHJvd0RpcmVjdGlvbiwgY29sdW1uRGlyZWN0aW9uKTtcbiAgICB9XG4gICAgaWYgKGNlbGxDb29yZHNWaXN1YWwgIT09IG51bGwgJiYgYnJvYWRlckNlbGxSYW5nZS5vdmVybGFwcyhjZWxsQ29vcmRzVmlzdWFsKSkge1xuICAgICAgY29uc3QgY3VycmVudEhpZ2hsaWdodCA9IGJyb2FkZXJDZWxsUmFuZ2UuaGlnaGxpZ2h0LmNsb25lKCk7XG4gICAgICBpZiAoY3VycmVudEhpZ2hsaWdodC5yb3cgPj0gMCkge1xuICAgICAgICBjdXJyZW50SGlnaGxpZ2h0LnJvdyA9IGNlbGxDb29yZHNWaXN1YWwucm93O1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRIaWdobGlnaHQuY29sID49IDApIHtcbiAgICAgICAgY3VycmVudEhpZ2hsaWdodC5jb2wgPSBjZWxsQ29vcmRzVmlzdWFsLmNvbDtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBzZWxlY3Rpb24gdmlzdWFsbHkgbm93LCBidXQgd2UgZm91bmQgZmlyc3QgdmlzaWJsZSByYW5nZSBpbiB0aGUgYnJvYWRlciBjZWxsIHJhbmdlLlxuICAgICAgaWYgKHRoaXMuY2VsbFJhbmdlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNlbGxDb29yZHNSZW5kZXJhYmxlID0gdGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoY3VycmVudEhpZ2hsaWdodCk7XG4gICAgICAgIHRoaXMuY2VsbFJhbmdlID0gdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoY2VsbENvb3Jkc1JlbmRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyBXZSBzZXQgbmV3IGhpZ2hsaWdodCBhcyBpdCBtaWdodCBjaGFuZ2UgKGZvciBleGFtcGxlLCB3aGVuIHNob3dpbmcvaGlkaW5nIHNvbWUgY2VsbHMgZnJvbSB0aGUgYnJvYWRlciBzZWxlY3Rpb24gcmFuZ2UpXG4gICAgICAvLyBUT0RPOiBJdCBpcyBhbHNvIGhhbmRsZWQgYnkgdGhlIGBNZXJnZUNlbGxzYCBwbHVnaW4gd2hpbGUgYWRqdXN0aW5nIGFscmVhZHkgbW9kaWZpZWQgY29vcmRpbmF0ZXMuIFNob3VsZCBpdD9cbiAgICAgIGJyb2FkZXJDZWxsUmFuZ2Uuc2V0SGlnaGxpZ2h0KGN1cnJlbnRIaWdobGlnaHQpO1xuICAgIH1cblxuICAgIC8vIFRPRE9cbiAgICAvLyBTeW5jIHRoZSBoaWdobGlnaHQgY29vcmRzIGZyb20gdGhlIHZpc3VhbCBzZWxlY3Rpb24gbGF5ZXIgd2l0aCBsb2dpY2FsIGNvb3Jkcy5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlID09PSAnZm9jdXMnICYmIHJlbmRlcmFibGVIaWdobGlnaHQgIT09IG51bGwgJiYgY2VsbENvb3Jkc1Zpc3VhbCA9PT0gbnVsbCkge1xuICAgICAgYnJvYWRlckNlbGxSYW5nZS5zZXRIaWdobGlnaHQodGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG9wIGxlZnQgKFRMKSBhbmQgYm90dG9tIHJpZ2h0IChCUikgc2VsZWN0aW9uIGNvb3JkaW5hdGVzIChyZW5kZXJhYmxlIGluZGV4ZXMpLlxuICAgKiBUaGUgbWV0aG9kIG92ZXJ3cml0ZXMgdGhlIG9yaWdpbmFsIG1ldGhvZCB0byBzdXBwb3J0IGhlYWRlciBzZWxlY3Rpb24gZm9yIGhpZGRlbiBjZWxscy5cbiAgICogVG8gbWFrZSB0aGUgaGVhZGVyIHNlbGVjdGlvbiB3b3JraW5nLCB0aGUgQ2VsbENvb3JkcyBhbmQgQ2VsbFJhbmdlIGhhdmUgdG8gc3VwcG9ydCBub3RcbiAgICogY29tcGxldGUgY29vcmRpbmF0ZXMgKGBudWxsYCB2YWx1ZXMgZm9yIGV4YW1wbGUsIGByb3c6IG51bGxgLCBgY29sOiAyYCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhcnJheSBvZiBjb29yZGluYXRlcyBmb3IgZXhhbXBsZSBgWzEsIDEsIDUsIDVdYC5cbiAgICovXG4gIGdldENvcm5lcnMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IHRoaXMuY2VsbFJhbmdlO1xuICAgIHJldHVybiBbTWF0aC5taW4oZnJvbS5yb3csIHRvLnJvdyksIE1hdGgubWluKGZyb20uY29sLCB0by5jb2wpLCBNYXRoLm1heChmcm9tLnJvdywgdG8ucm93KSwgTWF0aC5tYXgoZnJvbS5jb2wsIHRvLmNvbCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRvcCBsZWZ0IChvciB0b3AgcmlnaHQgaW4gUlRMKSBhbmQgYm90dG9tIHJpZ2h0IChvciBib3R0b20gbGVmdCBpbiBSVEwpIHNlbGVjdGlvblxuICAgKiBjb29yZGluYXRlcyAodmlzdWFsIGluZGV4ZXMpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYXJyYXkgb2YgY29vcmRpbmF0ZXMgZm9yIGV4YW1wbGUgYFsxLCAxLCA1LCA1XWAuXG4gICAqL1xuICBnZXRWaXN1YWxDb3JuZXJzKCkge1xuICAgIGNvbnN0IHRvcFN0YXJ0ID0gdGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSk7XG4gICAgY29uc3QgYm90dG9tRW5kID0gdGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO1xuICAgIHJldHVybiBbdG9wU3RhcnQucm93LCB0b3BTdGFydC5jb2wsIGJvdHRvbUVuZC5yb3csIGJvdHRvbUVuZC5jb2xdO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQ2VsbFJhbmdlIG9iamVjdCBiYXNlZCBvbiB2aXN1YWwgY29vcmRpbmF0ZXMgd2hpY2ggYmVmb3JlIG9iamVjdCBjcmVhdGlvbiBhcmVcbiAgICogdHJhbnNsYXRlZCB0byByZW5kZXJhYmxlIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gdmlzdWFsRnJvbUNvb3JkcyBUaGUgQ2VsbENvb3JkcyBvYmplY3Qgd2hpY2ggY29udGFpbnMgY29vcmRpbmF0ZXMgdGhhdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdGlvbi5cbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSB2aXN1YWxUb0Nvb3JkcyBUaGUgQ2VsbENvb3JkcyBvYmplY3Qgd2hpY2ggY29udGFpbnMgY29vcmRpbmF0ZXMgdGhhdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAqIEByZXR1cm5zIHtDZWxsUmFuZ2V8bnVsbH1cbiAgICovXG4gIGNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UodmlzdWFsRnJvbUNvb3JkcywgdmlzdWFsVG9Db29yZHMpIHtcbiAgICBjb25zdCByZW5kZXJhYmxlRnJvbUNvb3JkcyA9IHRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHZpc3VhbEZyb21Db29yZHMpO1xuICAgIGNvbnN0IHJlbmRlcmFibGVUb0Nvb3JkcyA9IHRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHZpc3VhbFRvQ29vcmRzKTtcbiAgICBpZiAocmVuZGVyYWJsZUZyb21Db29yZHMucm93ID09PSBudWxsIHx8IHJlbmRlcmFibGVGcm9tQ29vcmRzLmNvbCA9PT0gbnVsbCB8fCByZW5kZXJhYmxlVG9Db29yZHMucm93ID09PSBudWxsIHx8IHJlbmRlcmFibGVUb0Nvb3Jkcy5jb2wgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UocmVuZGVyYWJsZUZyb21Db29yZHMsIHJlbmRlcmFibGVGcm9tQ29vcmRzLCByZW5kZXJhYmxlVG9Db29yZHMpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBWaXN1YWxTZWxlY3Rpb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2V4cG9ydE5hbWVzID0ge1xuICBTZWxlY3Rpb246IHRydWUsXG4gIGhhbmRsZU1vdXNlRXZlbnQ6IHRydWUsXG4gIGRldGVjdFNlbGVjdGlvblR5cGU6IHRydWUsXG4gIG5vcm1hbGl6ZVNlbGVjdGlvbkZhY3Rvcnk6IHRydWVcbn07XG52YXIgX3NlbGVjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2VsZWN0aW9uXCIpKTtcbmV4cG9ydHMuU2VsZWN0aW9uID0gX3NlbGVjdGlvbi5kZWZhdWx0O1xudmFyIF9tb3VzZUV2ZW50SGFuZGxlciA9IHJlcXVpcmUoXCIuL21vdXNlRXZlbnRIYW5kbGVyXCIpO1xuZXhwb3J0cy5oYW5kbGVNb3VzZUV2ZW50ID0gX21vdXNlRXZlbnRIYW5kbGVyLmhhbmRsZU1vdXNlRXZlbnQ7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5leHBvcnRzLmRldGVjdFNlbGVjdGlvblR5cGUgPSBfdXRpbHMuZGV0ZWN0U2VsZWN0aW9uVHlwZTtcbmV4cG9ydHMubm9ybWFsaXplU2VsZWN0aW9uRmFjdG9yeSA9IF91dGlscy5ub3JtYWxpemVTZWxlY3Rpb25GYWN0b3J5O1xudmFyIF9oaWdobGlnaHQgPSByZXF1aXJlKFwiLi9oaWdobGlnaHQvaGlnaGxpZ2h0XCIpO1xuT2JqZWN0LmtleXMoX2hpZ2hsaWdodCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2hpZ2hsaWdodFtrZXldKSByZXR1cm47XG4gIGV4cG9ydHNba2V5XSA9IF9oaWdobGlnaHRba2V5XTtcbn0pO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaGFuZGxlTW91c2VFdmVudCA9IGhhbmRsZU1vdXNlRXZlbnQ7XG5leHBvcnRzLm1vdXNlRG93biA9IG1vdXNlRG93bjtcbmV4cG9ydHMubW91c2VPdmVyID0gbW91c2VPdmVyO1xudmFyIF9ldmVudCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xuLyoqXG4gKiBNb3VzZURvd24gaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBUaGUgaGFuZGxlciBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmlzU2hpZnRLZXkgVGhlIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBzaGlmdCBrZXkgaXMgcHJlc3NlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0aW9ucy5pc0xlZnRDbGljayBUaGUgZmxhZyB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGxlZnQgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaXNSaWdodENsaWNrIFRoZSBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgcmlnaHQgbW91c2UgYnV0dG9uIGlzIHByZXNzZWQuXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gb3B0aW9ucy5jb29yZHMgVGhlIENlbGxDb29yZHMgb2JqZWN0IHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gb3B0aW9ucy5zZWxlY3Rpb24gVGhlIFNlbGVjdGlvbiBjbGFzcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmNvbnRyb2xsZXIgQW4gb2JqZWN0IHdpdGgga2V5cyBgcm93YCwgYGNvbHVtbmAsIGBjZWxsYCB3aGljaCBpbmRpY2F0ZSB3aGF0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiBsYXRlciBzZWxlY3Rpb24gc3RhZ2VzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5jZWxsQ29vcmRzRmFjdG9yeSBUaGUgZnVuY3Rpb24gZmFjdG9yeSBmb3IgQ2VsbENvb3JkcyBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBtb3VzZURvd24oX3JlZikge1xuICBsZXQge1xuICAgIGlzU2hpZnRLZXksXG4gICAgaXNMZWZ0Q2xpY2ssXG4gICAgaXNSaWdodENsaWNrLFxuICAgIGNvb3JkcyxcbiAgICBzZWxlY3Rpb24sXG4gICAgY29udHJvbGxlcixcbiAgICBjZWxsQ29vcmRzRmFjdG9yeVxuICB9ID0gX3JlZjtcbiAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc1NlbGVjdGVkKCkgPyBzZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKSA6IG51bGw7XG4gIGNvbnN0IHNlbGVjdGVkQ29ybmVyID0gc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpO1xuICBjb25zdCBzZWxlY3RlZFJvdyA9IHNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtcbiAgc2VsZWN0aW9uLm1hcmtTb3VyY2UoJ21vdXNlJyk7XG4gIGlmIChpc1NoaWZ0S2V5ICYmIGN1cnJlbnRTZWxlY3Rpb24pIHtcbiAgICBpZiAoY29vcmRzLnJvdyA+PSAwICYmIGNvb3Jkcy5jb2wgPj0gMCAmJiAhY29udHJvbGxlci5jZWxsKSB7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY29vcmRzKTtcbiAgICB9IGVsc2UgaWYgKChzZWxlY3RlZENvcm5lciB8fCBzZWxlY3RlZFJvdykgJiYgY29vcmRzLnJvdyA+PSAwICYmIGNvb3Jkcy5jb2wgPj0gMCAmJiAhY29udHJvbGxlci5jZWxsKSB7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY2VsbENvb3Jkc0ZhY3RvcnkoY29vcmRzLnJvdywgY29vcmRzLmNvbCkpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRDb3JuZXIgJiYgY29vcmRzLnJvdyA8IDAgJiYgIWNvbnRyb2xsZXIuY29sdW1uKSB7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY2VsbENvb3Jkc0ZhY3RvcnkoY3VycmVudFNlbGVjdGlvbi50by5yb3csIGNvb3Jkcy5jb2wpKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkUm93ICYmIGNvb3Jkcy5jb2wgPCAwICYmICFjb250cm9sbGVyLnJvdykge1xuICAgICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGNlbGxDb29yZHNGYWN0b3J5KGNvb3Jkcy5yb3csIGN1cnJlbnRTZWxlY3Rpb24udG8uY29sKSk7XG4gICAgfSBlbHNlIGlmICgoIXNlbGVjdGVkQ29ybmVyICYmICFzZWxlY3RlZFJvdyAmJiBjb29yZHMuY29sIDwgMCB8fCBzZWxlY3RlZENvcm5lciAmJiBjb29yZHMuY29sIDwgMCkgJiYgIWNvbnRyb2xsZXIucm93KSB7XG4gICAgICBzZWxlY3Rpb24uc2VsZWN0Um93cyhNYXRoLm1heChjdXJyZW50U2VsZWN0aW9uLmZyb20ucm93LCAwKSwgY29vcmRzLnJvdywgY29vcmRzLmNvbCk7XG4gICAgfSBlbHNlIGlmICgoIXNlbGVjdGVkQ29ybmVyICYmICFzZWxlY3RlZFJvdyAmJiBjb29yZHMucm93IDwgMCB8fCBzZWxlY3RlZFJvdyAmJiBjb29yZHMucm93IDwgMCkgJiYgIWNvbnRyb2xsZXIuY29sdW1uKSB7XG4gICAgICBzZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyhNYXRoLm1heChjdXJyZW50U2VsZWN0aW9uLmZyb20uY29sLCAwKSwgY29vcmRzLmNvbCwgY29vcmRzLnJvdyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFsbG93UmlnaHRDbGlja1NlbGVjdGlvbiA9ICFzZWxlY3Rpb24uaW5JblNlbGVjdGlvbihjb29yZHMpO1xuICAgIGNvbnN0IHBlcmZvcm1TZWxlY3Rpb24gPSBpc0xlZnRDbGljayB8fCBpc1JpZ2h0Q2xpY2sgJiYgYWxsb3dSaWdodENsaWNrU2VsZWN0aW9uO1xuXG4gICAgLy8gY2xpY2tlZCByb3cgaGVhZGVyIGFuZCB3aGVuIHNvbWUgY29sdW1uIHdhcyBzZWxlY3RlZFxuICAgIGlmIChjb29yZHMucm93IDwgMCAmJiBjb29yZHMuY29sID49IDAgJiYgIWNvbnRyb2xsZXIuY29sdW1uKSB7XG4gICAgICBpZiAocGVyZm9ybVNlbGVjdGlvbikge1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0Q29sdW1ucyhjb29yZHMuY29sLCBjb29yZHMuY29sLCBjb29yZHMucm93KTtcbiAgICAgIH1cblxuICAgICAgLy8gY2xpY2tlZCBjb2x1bW4gaGVhZGVyIGFuZCB3aGVuIHNvbWUgcm93IHdhcyBzZWxlY3RlZFxuICAgIH0gZWxzZSBpZiAoY29vcmRzLmNvbCA8IDAgJiYgY29vcmRzLnJvdyA+PSAwICYmICFjb250cm9sbGVyLnJvdykge1xuICAgICAgaWYgKHBlcmZvcm1TZWxlY3Rpb24pIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdFJvd3MoY29vcmRzLnJvdywgY29vcmRzLnJvdywgY29vcmRzLmNvbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb29yZHMuY29sID49IDAgJiYgY29vcmRzLnJvdyA+PSAwICYmICFjb250cm9sbGVyLmNlbGwpIHtcbiAgICAgIGlmIChwZXJmb3JtU2VsZWN0aW9uKSB7XG4gICAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGNvb3Jkcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb29yZHMuY29sIDwgMCAmJiBjb29yZHMucm93IDwgMCkge1xuICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbCh0cnVlLCB0cnVlLCB7XG4gICAgICAgIGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiB0cnVlLFxuICAgICAgICBmb2N1c1Bvc2l0aW9uOiB7XG4gICAgICAgICAgcm93OiAwLFxuICAgICAgICAgIGNvbDogMFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0aW9uLm1hcmtFbmRTb3VyY2UoKTtcbn1cblxuLyoqXG4gKiBNb3VzZU92ZXIgaGFuZGxlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBUaGUgaGFuZGxlciBvcHRpb25zLlxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmlzTGVmdENsaWNrIEluZGljYXRlcyB0aGF0IGV2ZW50IHdhcyBmaXJlZCB1c2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24uXG4gKiBAcGFyYW0ge0NlbGxSYW5nZX0gb3B0aW9ucy5jb29yZHMgVGhlIENlbGxDb29yZHMgb2JqZWN0IHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gKiBAcGFyYW0ge1NlbGVjdGlvbn0gb3B0aW9ucy5zZWxlY3Rpb24gVGhlIFNlbGVjdGlvbiBjbGFzcyBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zLmNvbnRyb2xsZXIgQW4gb2JqZWN0IHdpdGgga2V5cyBgcm93YCwgYGNvbHVtbmAsIGBjZWxsYCB3aGljaCBpbmRpY2F0ZSB3aGF0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBpbiBsYXRlciBzZWxlY3Rpb24gc3RhZ2VzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5jZWxsQ29vcmRzRmFjdG9yeSBUaGUgZnVuY3Rpb24gZmFjdG9yeSBmb3IgQ2VsbENvb3JkcyBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBtb3VzZU92ZXIoX3JlZjIpIHtcbiAgbGV0IHtcbiAgICBpc0xlZnRDbGljayxcbiAgICBjb29yZHMsXG4gICAgc2VsZWN0aW9uLFxuICAgIGNvbnRyb2xsZXIsXG4gICAgY2VsbENvb3Jkc0ZhY3RvcnlcbiAgfSA9IF9yZWYyO1xuICBpZiAoIWlzTGVmdENsaWNrKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkUm93ID0gc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO1xuICBjb25zdCBzZWxlY3RlZENvbHVtbiA9IHNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtcbiAgY29uc3QgY291bnRDb2xzID0gc2VsZWN0aW9uLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7XG4gIGNvbnN0IGNvdW50Um93cyA9IHNlbGVjdGlvbi50YWJsZVByb3BzLmNvdW50Um93cygpO1xuICBzZWxlY3Rpb24ubWFya1NvdXJjZSgnbW91c2UnKTtcbiAgaWYgKHNlbGVjdGVkQ29sdW1uICYmICFjb250cm9sbGVyLmNvbHVtbikge1xuICAgIHNlbGVjdGlvbi5zZXRSYW5nZUVuZChjZWxsQ29vcmRzRmFjdG9yeShjb3VudFJvd3MgLSAxLCBjb29yZHMuY29sKSk7XG4gIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3cgJiYgIWNvbnRyb2xsZXIucm93KSB7XG4gICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGNlbGxDb29yZHNGYWN0b3J5KGNvb3Jkcy5yb3csIGNvdW50Q29scyAtIDEpKTtcbiAgfSBlbHNlIGlmICghY29udHJvbGxlci5jZWxsKSB7XG4gICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGNvb3Jkcyk7XG4gIH1cbiAgc2VsZWN0aW9uLm1hcmtFbmRTb3VyY2UoKTtcbn1cbmNvbnN0IGhhbmRsZXJzID0gbmV3IE1hcChbWydtb3VzZWRvd24nLCBtb3VzZURvd25dLCBbJ21vdXNlb3ZlcicsIG1vdXNlT3Zlcl0sIFsndG91Y2hzdGFydCcsIG1vdXNlRG93bl1dKTtcblxuLyoqXG4gKiBNb3VzZSBoYW5kbGVyIGZvciBzZWxlY3Rpb24gZnVuY3Rpb25hbGl0eS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBBbiBuYXRpdmUgZXZlbnQgdG8gaGFuZGxlLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgVGhlIGhhbmRsZXIgb3B0aW9ucy5cbiAqIEBwYXJhbSB7Q2VsbFJhbmdlfSBvcHRpb25zLmNvb3JkcyBUaGUgQ2VsbENvb3JkcyBvYmplY3Qgd2l0aCBkZWZpbmVkIHZpc3VhbCBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7U2VsZWN0aW9ufSBvcHRpb25zLnNlbGVjdGlvbiBUaGUgU2VsZWN0aW9uIGNsYXNzIGluc3RhbmNlLlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuY29udHJvbGxlciBBbiBvYmplY3Qgd2l0aCBrZXlzIGByb3dgLCBgY29sdW1uYCwgYGNlbGxgIHdoaWNoIGluZGljYXRlIHdoYXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGluIGxhdGVyIHNlbGVjdGlvbiBzdGFnZXMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLmNlbGxDb29yZHNGYWN0b3J5IFRoZSBmdW5jdGlvbiBmYWN0b3J5IGZvciBDZWxsQ29vcmRzIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU1vdXNlRXZlbnQoZXZlbnQsIF9yZWYzKSB7XG4gIGxldCB7XG4gICAgY29vcmRzLFxuICAgIHNlbGVjdGlvbixcbiAgICBjb250cm9sbGVyLFxuICAgIGNlbGxDb29yZHNGYWN0b3J5XG4gIH0gPSBfcmVmMztcbiAgaGFuZGxlcnMuZ2V0KGV2ZW50LnR5cGUpKHtcbiAgICBjb29yZHMsXG4gICAgc2VsZWN0aW9uLFxuICAgIGNvbnRyb2xsZXIsXG4gICAgY2VsbENvb3Jkc0ZhY3RvcnksXG4gICAgaXNTaGlmdEtleTogZXZlbnQuc2hpZnRLZXksXG4gICAgaXNMZWZ0Q2xpY2s6ICgwLCBfZXZlbnQuaXNMZWZ0Q2xpY2spKGV2ZW50KSB8fCBldmVudC50eXBlID09PSAndG91Y2hzdGFydCcsXG4gICAgaXNSaWdodENsaWNrOiAoMCwgX2V2ZW50LmlzUmlnaHRDbGljaykoZXZlbnQpXG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBUaGUgU2VsZWN0aW9uUmFuZ2UgY2xhc3MgaXMgYSBzaW1wbGUgQ2VsbFJhbmdlcyBjb2xsZWN0aW9uIGRlc2lnbmVkIGZvciBlYXN5IG1hbmlwdWxhdGlvbiBvZiB0aGUgbXVsdGlwbGVcbiAqIGNvbnNlY3V0aXZlIGFuZCBub24tY29uc2VjdXRpdmUgc2VsZWN0aW9ucy5cbiAqXG4gKiBAY2xhc3MgU2VsZWN0aW9uUmFuZ2VcbiAqIEB1dGlsXG4gKi9cbmNsYXNzIFNlbGVjdGlvblJhbmdlIHtcbiAgY29uc3RydWN0b3IoY3JlYXRlQ2VsbFJhbmdlKSB7XG4gICAgLyoqXG4gICAgICogTGlzdCBvZiBhbGwgQ2VsbFJhbmdlcyBhZGRlZCB0byB0aGUgY2xhc3MgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q2VsbFJhbmdlW119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmFuZ2VzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb24oQ2VsbENvb3Jkcyk6IENlbGxSYW5nZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJjcmVhdGVDZWxsUmFuZ2VcIiwgdm9pZCAwKTtcbiAgICB0aGlzLmNyZWF0ZUNlbGxSYW5nZSA9IGNyZWF0ZUNlbGxSYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzZWxlY3RlZCByYW5nZSBpcyBlbXB0eS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnNpemUoKSA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29vcmRpbmF0ZXMgdG8gdGhlIGNsYXNzIGluc3RhbmNlLiBJdCBjbGVhcnMgYWxsIHByZXZpb3VzbHkgYWRkZWQgY29vcmRpbmF0ZXMgYW5kIHB1c2ggYGNvb3Jkc2BcbiAgICogdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlIHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25SYW5nZX1cbiAgICovXG4gIHNldChjb29yZHMpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShjb29yZHMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY29vcmRpbmF0ZXMgdG8gdGhlIGNsYXNzIGluc3RhbmNlLiBUaGUgbmV3IGNvb3JkaW5hdGVzIGFyZSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSByYW5nZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IGNvb3JkcyBUaGUgQ2VsbENvb3JkcyBpbnN0YW5jZSB3aXRoIGRlZmluZWQgdmlzdWFsIGNvb3JkaW5hdGVzLlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uUmFuZ2V9XG4gICAqL1xuICBhZGQoY29vcmRzKSB7XG4gICAgdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShjb29yZHMpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGZyb20gdGhlIHN0YWNrIHRoZSBsYXN0IGFkZGVkIGNvb3JkaW5hdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uUmFuZ2V9XG4gICAqL1xuICBwb3AoKSB7XG4gICAgdGhpcy5yYW5nZXMucG9wKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxhc3QgYWRkZWQgY29vcmRpbmF0ZXMgZnJvbSByYW5nZXMsIGl0IHJldHVybnMgYSBDZWxsUmFuZ2UgaW5zdGFuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtDZWxsUmFuZ2V8dW5kZWZpbmVkfVxuICAgKi9cbiAgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKSAtIDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwcmV2aW91c2x5IGFkZGVkIGNvb3JkaW5hdGVzIGZyb20gcmFuZ2VzLCBpdCByZXR1cm5zIGEgQ2VsbFJhbmdlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2VsbFJhbmdlfHVuZGVmaW5lZH1cbiAgICovXG4gIHByZXZpb3VzKCkge1xuICAgIHJldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpIC0gMik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgY29vcmRzIGlzIHdpdGhpbiBzZWxlY3Rpb24gY29vcmRzLiBUaGlzIG1ldGhvZCBpdGVyYXRlcyB0aHJvdWdoIGFsbCBzZWxlY3Rpb24gbGF5ZXJzIHRvIGNoZWNrIGlmXG4gICAqIHRoZSBjb29yZHMgb2JqZWN0IGlzIHdpdGhpbiBzZWxlY3Rpb24gcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlIHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaW5jbHVkZXMoY29vcmRzKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoY2VsbFJhbmdlID0+IGNlbGxSYW5nZS5pbmNsdWRlcyhjb29yZHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U2VsZWN0aW9uUmFuZ2V9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICB0aGlzLnJhbmdlcy5sZW5ndGggPSAwO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb3VudCBvZiBhZGRlZCBhbGwgY29vcmRpbmF0ZXMgYWRkZWQgdG8gdGhlIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZWVrIHRoZSBjb29yZGluYXRlcyBiYXNlZCBvbiB0aGUgaW5kZXggd2hlcmUgdGhhdCBjb29yZGluYXRlIHJlc2lkZXMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaW5kZXg9MF0gQW4gaW5kZXggd2hlcmUgdGhlIGNvb3JkaW5hdGUgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbS4gVGhlIGluZGV4ICcwJyBnZXRzIHRoZVxuICAgKiBsYXRlc3QgcmFuZ2UuXG4gICAqIEByZXR1cm5zIHtDZWxsUmFuZ2V8dW5kZWZpbmVkfVxuICAgKi9cbiAgcGVla0J5SW5kZXgoKSB7XG4gICAgbGV0IGluZGV4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAwO1xuICAgIGxldCBjZWxsUmFuZ2U7XG4gICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPCB0aGlzLnNpemUoKSkge1xuICAgICAgY2VsbFJhbmdlID0gdGhpcy5yYW5nZXNbaW5kZXhdO1xuICAgIH1cbiAgICByZXR1cm4gY2VsbFJhbmdlO1xuICB9XG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLnJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdGlvblJhbmdlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnZhciBfaGlnaGxpZ2h0ID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIi4vaGlnaGxpZ2h0L2hpZ2hsaWdodFwiKSk7XG52YXIgX3JhbmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yYW5nZVwiKSk7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvYXJyYXlcIik7XG52YXIgX2xvY2FsSG9va3MgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbnZhciBfdHJhbnNmb3JtYXRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi90cmFuc2Zvcm1hdGlvblwiKSk7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG52YXIgX3RlbXBsYXRlTGl0ZXJhbFRhZyA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xudmFyIF9hMTF5ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIHt9Lmhhc093blByb3BlcnR5LmNhbGwoZSwgdSkpIHsgdmFyIGkgPSBhID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCB1KSA6IG51bGw7IGkgJiYgKGkuZ2V0IHx8IGkuc2V0KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCB1LCBpKSA6IG5bdV0gPSBlW3VdOyB9IHJldHVybiBuLmRlZmF1bHQgPSBlLCB0ICYmIHQuc2V0KGUsIG4pLCBuOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIEBjbGFzcyBTZWxlY3Rpb25cbiAqIEB1dGlsXG4gKi9cbnZhciBfdHJhbnNmb3JtYXRpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZm9jdXNUcmFuc2Zvcm1hdGlvbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9kaXNhYmxlSGVhZGVyc0hpZ2hsaWdodCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9zZWxlY3Rpb25Tb3VyY2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfZXhwZWN0ZWRMYXllcnNDb3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuY2xhc3MgU2VsZWN0aW9uIHtcbiAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIHRhYmxlUHJvcHMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIC8qKlxuICAgICAqIEhhbmRzb250YWJsZSBzZXR0aW5ncyBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtHcmlkU2V0dGluZ3N9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0dGluZ3NcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBBbiBhZGRpdGlvbmFsIG9iamVjdCB3aXRoIGR5bmFtaWNhbGx5IGRlZmluZWQgcHJvcGVydGllcyB3aGljaCBkZXNjcmliZXMgdGFibGUgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInRhYmxlUHJvcHNcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBzZWxlY3Rpb24gaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpblByb2dyZXNzXCIsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb24gZGF0YSBsYXllciAoaGFuZGxlIHZpc3VhbCBjb29yZGluYXRlcykuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U2VsZWN0aW9uUmFuZ2V9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2VsZWN0ZWRSYW5nZVwiLCBuZXcgX3JhbmdlLmRlZmF1bHQoKGhpZ2hsaWdodCwgZnJvbSwgdG8pID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGhpZ2hsaWdodCwgZnJvbSwgdG8pO1xuICAgIH0pKTtcbiAgICAvKipcbiAgICAgKiBWaXN1YWxpemF0aW9uIGxheWVyLlxuICAgICAqXG4gICAgICogQHR5cGUge0hpZ2hsaWdodH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoaWdobGlnaHRcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvciBtb2RpZnlpbmcgY29vcmRpbmF0ZXMgb2YgdGhlIHN0YXJ0IGFuZCBlbmQgc2VsZWN0aW9uLlxuICAgICAqXG4gICAgICogQHR5cGUge1RyYW5zZm9ybWF0aW9ufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90cmFuc2Zvcm1hdGlvbiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgbW9kdWxlIGZvciBtb2RpZnlpbmcgY29vcmRpbmF0ZXMgb2YgdGhlIGZvY3VzIHNlbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtUcmFuc2Zvcm1hdGlvbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZm9jdXNUcmFuc2Zvcm1hdGlvbiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiB0aGUgc2VsZWN0aW9uIGxheWVyIGxldmVscyB3aGVyZSB0aGUgd2hvbGUgcm93IHdhcyBzZWxlY3RlZCB1c2luZyB0aGUgcm93IGhlYWRlciBvclxuICAgICAqIHRoZSBjb3JuZXIgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHR5cGUge1NldDxudW1iZXI+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNlbGVjdGVkQnlSb3dIZWFkZXJcIiwgbmV3IFNldCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiB0aGUgc2VsZWN0aW9uIGxheWVyIGxldmVscyB3aGVyZSB0aGUgd2hvbGUgY29sdW1uIHdhcyBzZWxlY3RlZCB1c2luZyB0aGUgY29sdW1uIGhlYWRlciBvclxuICAgICAqIHRoZSBjb3JuZXIgaGVhZGVyLlxuICAgICAqXG4gICAgICogQHR5cGUge1NldDxudW1iZXI+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNlbGVjdGVkQnlDb2x1bW5IZWFkZXJcIiwgbmV3IFNldCgpKTtcbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSBmb2N1cyBzZWxlY3Rpb24gd2FzIGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQsIGZhbHNlKTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHNldHMgZGlzYWJsZSBoaWdobGlnaHRpbmcgdGhlIGhlYWRlcnMgZXZlbiB3aGVuIHRoZSBsb2dpY2FsIGNvb3JkaW5hdGVzIHBvaW50cyBvbiB0aGVtLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0LCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogVGhlIHNvdXJjZSBvZiB0aGUgc2VsZWN0aW9uLiBJdCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOiBgbW91c2VgLCBgdW5rbm93bmAgb3IgYW55IG90aGVyIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHsnbW91c2UnIHwgJ3Vua25vd24nIHwgc3RyaW5nfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zZWxlY3Rpb25Tb3VyY2UsICd1bmtub3duJyk7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiBleHBlY3RlZCBsYXllcnMuIEl0IGlzIHVzZWQgbW9zdGx5IHRvIHRyYWNrIHdoZW4gdGhlIGxhc3Qgc2VsZWN0aW9uIGxheWVyIG9mIG5vbi1jb250aWd1b3VzXG4gICAgICogc2VsZWN0aW9uIGlzIGFwcGxpZWQsIHRodXMgdGhlIHZpZXdwb3J0IHNjcm9sbCBpcyB0cmlnZ2VyZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZXhwZWN0ZWRMYXllcnNDb3VudCwgLTEpO1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLnRhYmxlUHJvcHMgPSB0YWJsZVByb3BzO1xuICAgIHRoaXMuaGlnaGxpZ2h0ID0gbmV3IF9oaWdobGlnaHQuZGVmYXVsdCh7XG4gICAgICBoZWFkZXJDbGFzc05hbWU6IHNldHRpbmdzLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsXG4gICAgICBhY3RpdmVIZWFkZXJDbGFzc05hbWU6IHNldHRpbmdzLmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxcbiAgICAgIHJvd0NsYXNzTmFtZTogc2V0dGluZ3MuY3VycmVudFJvd0NsYXNzTmFtZSxcbiAgICAgIGNvbHVtbkNsYXNzTmFtZTogc2V0dGluZ3MuY3VycmVudENvbENsYXNzTmFtZSxcbiAgICAgIGNlbGxBdHRyaWJ1dGVzOiBbKDAsIF9hMTF5LkExMVlfU0VMRUNURUQpKCldLFxuICAgICAgcm93SW5kZXhNYXBwZXI6IHRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyOiB0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsXG4gICAgICBkaXNhYmxlZENlbGxTZWxlY3Rpb246IChyb3csIGNvbHVtbikgPT4gdGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKHJvdywgY29sdW1uKSxcbiAgICAgIGNlbGxDb3JuZXJWaXNpYmxlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYXJlYUNvcm5lclZpc2libGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICB2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6IGNvb3JkcyA9PiB0aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGNvb3JkcyksXG4gICAgICByZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6IGNvb3JkcyA9PiB0aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGNvb3JkcyksXG4gICAgICBjcmVhdGVDZWxsQ29vcmRzOiAocm93LCBjb2x1bW4pID0+IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKSxcbiAgICAgIGNyZWF0ZUNlbGxSYW5nZTogKGhpZ2hsaWdodCwgZnJvbSwgdG8pID0+IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaGlnaGxpZ2h0LCBmcm9tLCB0bylcbiAgICB9KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3RyYW5zZm9ybWF0aW9uLCB0aGlzLCBuZXcgX3RyYW5zZm9ybWF0aW9uMi5kZWZhdWx0KHRoaXMuc2VsZWN0ZWRSYW5nZSwge1xuICAgICAgcm93SW5kZXhNYXBwZXI6IHRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyOiB0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsXG4gICAgICBjb3VudFJlbmRlcmFibGVSb3dzOiAoKSA9PiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93cygpLFxuICAgICAgY291bnRSZW5kZXJhYmxlQ29sdW1uczogKCkgPT4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxcbiAgICAgIHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczogY29vcmRzID0+IHRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoY29vcmRzKSxcbiAgICAgIHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczogY29vcmRzID0+IHRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoY29vcmRzKSxcbiAgICAgIGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUNlbGxDb29yZHM6IChyb3csIGNvbHVtbikgPT4gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pLFxuICAgICAgZml4ZWRSb3dzQm90dG9tOiAoKSA9PiBzZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sXG4gICAgICBtaW5TcGFyZVJvd3M6ICgpID0+IHNldHRpbmdzLm1pblNwYXJlUm93cyxcbiAgICAgIG1pblNwYXJlQ29sczogKCkgPT4gc2V0dGluZ3MubWluU3BhcmVDb2xzLFxuICAgICAgYXV0b1dyYXBSb3c6ICgpID0+IHNldHRpbmdzLmF1dG9XcmFwUm93LFxuICAgICAgYXV0b1dyYXBDb2w6ICgpID0+IHNldHRpbmdzLmF1dG9XcmFwQ29sXG4gICAgfSkpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfZm9jdXNUcmFuc2Zvcm1hdGlvbiwgdGhpcywgbmV3IF90cmFuc2Zvcm1hdGlvbjIuZGVmYXVsdCh0aGlzLnNlbGVjdGVkUmFuZ2UsIHtcbiAgICAgIHJvd0luZGV4TWFwcGVyOiB0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsXG4gICAgICBjb2x1bW5JbmRleE1hcHBlcjogdGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLFxuICAgICAgY291bnRSZW5kZXJhYmxlUm93czogKCkgPT4ge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCwgcmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3cpO1xuICAgICAgfSxcbiAgICAgIGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsIHJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuY29sKTtcbiAgICAgIH0sXG4gICAgICB2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6IGNvb3JkcyA9PiB0aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGNvb3JkcyksXG4gICAgICByZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6IGNvb3JkcyA9PiB0aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGNvb3JkcyksXG4gICAgICBmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBjcmVhdGVDZWxsQ29vcmRzOiAocm93LCBjb2x1bW4pID0+IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKSxcbiAgICAgIGZpeGVkUm93c0JvdHRvbTogKCkgPT4gMCxcbiAgICAgIG1pblNwYXJlUm93czogKCkgPT4gMCxcbiAgICAgIG1pblNwYXJlQ29sczogKCkgPT4gMCxcbiAgICAgIGF1dG9XcmFwUm93OiAoKSA9PiB0cnVlLFxuICAgICAgYXV0b1dyYXBDb2w6ICgpID0+IHRydWVcbiAgICB9KSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdiZWZvcmVUcmFuc2Zvcm1TdGFydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0JywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdhZnRlclRyYW5zZm9ybVN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0JywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdiZWZvcmVUcmFuc2Zvcm1FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCcsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdHJhbnNmb3JtYXRpb24sIHRoaXMpLmFkZExvY2FsSG9vaygnYWZ0ZXJUcmFuc2Zvcm1FbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdpbnNlcnRSb3dSZXF1aXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTVdID0gYXJndW1lbnRzW19rZXk1XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdpbnNlcnRSb3dSZXF1aXJlJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdpbnNlcnRDb2xSZXF1aXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdpbnNlcnRDb2xSZXF1aXJlJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdiZWZvcmVSb3dXcmFwJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTddID0gYXJndW1lbnRzW19rZXk3XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdiZWZvcmVSb3dXcmFwJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdiZWZvcmVDb2x1bW5XcmFwJywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjggPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdiZWZvcmVDb2x1bW5XcmFwJywgLi4uYXJncyk7XG4gICAgfSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c1RyYW5zZm9ybWF0aW9uLCB0aGlzKS5hZGRMb2NhbEhvb2soJ2JlZm9yZVRyYW5zZm9ybVN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjkgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW45KSwgX2tleTkgPSAwOyBfa2V5OSA8IF9sZW45OyBfa2V5OSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTldID0gYXJndW1lbnRzW19rZXk5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfdGhpcy5ydW5Mb2NhbEhvb2tzKCdiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cycsIC4uLmFyZ3MpO1xuICAgIH0pO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfZm9jdXNUcmFuc2Zvcm1hdGlvbiwgdGhpcykuYWRkTG9jYWxIb29rKCdhZnRlclRyYW5zZm9ybVN0YXJ0JywgZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjEwID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTApLCBfa2V5MTAgPSAwOyBfa2V5MTAgPCBfbGVuMTA7IF9rZXkxMCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTEwXSA9IGFyZ3VtZW50c1tfa2V5MTBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMnLCAuLi5hcmdzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0YSBsYXllciBmb3IgY3VycmVudCBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtTZWxlY3Rpb25SYW5nZX1cbiAgICovXG4gIGdldFNlbGVjdGVkUmFuZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyB0aGUgc291cmNlIG9mIHRoZSBzZWxlY3Rpb24uIEl0IGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6IGBtb3VzZWAsIG9yIGFueSBvdGhlciBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7J21vdXNlJyB8ICd1bmtub3duJyB8IHN0cmluZ30gc291cmNlTmFtZSBUaGUgc291cmNlIG5hbWUuXG4gICAqL1xuICBtYXJrU291cmNlKHNvdXJjZU5hbWUpIHtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3NlbGVjdGlvblNvdXJjZSwgdGhpcywgc291cmNlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgZW5kIG9mIHRoZSBzZWxlY3Rpb24gc291cmNlLiBJdCByZXN0b3JlcyB0aGUgc2VsZWN0aW9uIHNvdXJjZSB0byBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICd1bmtub3duJy5cbiAgICovXG4gIG1hcmtFbmRTb3VyY2UoKSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9zZWxlY3Rpb25Tb3VyY2UsIHRoaXMsICd1bmtub3duJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc291cmNlIG9mIHRoZSBzZWxlY3Rpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHsnbW91c2UnIHwgJ3Vua25vd24nIHwgc3RyaW5nfVxuICAgKi9cbiAgZ2V0U2VsZWN0aW9uU291cmNlKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvblNvdXJjZSwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgbGF5ZXJzLiBUaGUgbWV0aG9kIGlzIG5vdCBvYmxpZ2F0b3J5IHRvIGNhbGwuIEl0IGlzIHVzZWQgbW9zdGx5IGludGVybmFsbHlcbiAgICogdG8gZGV0ZXJtaW5lIHdoZW4gdGhlIGxhc3Qgc2VsZWN0aW9uIGxheWVyIG9mIG5vbi1jb250aWd1b3VzIGlzIGFwcGxpZWQsIHRodXMgdGhlIHZpZXdwb3J0IHNjcm9sbCBpcyB0cmlnZ2VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsYXllcnNDb3VudCBUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIGxheWVycy5cbiAgICovXG4gIHNldEV4cGVjdGVkTGF5ZXJzKGxheWVyc0NvdW50KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9leHBlY3RlZExheWVyc0NvdW50LCB0aGlzLCBsYXllcnNDb3VudCk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGUgdGhhdCBzZWxlY3Rpb24gcHJvY2VzcyBiZWdhbi4gSXQgc2V0cyBpbnRlcm5hbGx5IGAuaW5Qcm9ncmVzc2AgcHJvcGVydHkgdG8gYHRydWVgLlxuICAgKi9cbiAgYmVnaW4oKSB7XG4gICAgdGhpcy5pblByb2dyZXNzID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZSB0aGF0IHNlbGVjdGlvbiBwcm9jZXNzIGZpbmlzaGVkLiBJdCBzZXRzIGludGVybmFsbHkgYC5pblByb2dyZXNzYCBwcm9wZXJ0eSB0byBgZmFsc2VgLlxuICAgKi9cbiAgZmluaXNoKCkge1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCcsIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSk7XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9leHBlY3RlZExheWVyc0NvdW50LCB0aGlzLCAtMSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHByb2Nlc3Mgb2Ygc2VsZWN0aW5nIHRoZSBjZWxsL2NlbGxzIGlzIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzSW5Qcm9ncmVzcygpIHtcbiAgICByZXR1cm4gdGhpcy5pblByb2dyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBzZWxlY3Rpb24gcmFuZ2Ugb24gZ2l2ZW4gY29vcmRpbmF0ZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFZpc3VhbCBjb29yZHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW211bHRpcGxlU2VsZWN0aW9uXSBJZiBgdHJ1ZWAsIHNlbGVjdGlvbiB3aWxsIGJlIHdvcmtlZCBpbiAnbXVsdGlwbGUnIG1vZGUuIFRoaXMgb3B0aW9uIHdvcmtzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gJ3NlbGVjdGlvbk1vZGUnIGlzIHNldCBhcyAnbXVsdGlwbGUnLiBJZiB0aGUgYXJndW1lbnQgaXMgbm90IGRlZmluZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IHRyaWdnZXIgd2lsbCBiZSB1c2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtmcmFnbWVudD1mYWxzZV0gSWYgYHRydWVgLCB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHBhcnRpYWwgc2VsZWN0aW9uIHdoZXJlIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNldFJhbmdlRW5kYCBtZXRob2Qgd29uJ3QgYmUgY2FsbGVkIG9uIGV2ZXJ5IGBzZXRSYW5nZVN0YXJ0YCBjYWxsLlxuICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IFtoaWdobGlnaHRDb29yZHNdIElmIHNldCwgYWxsb3dzIGNoYW5naW5nIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgaGlnaGxpZ2h0L2ZvY3VzIGNlbGwuXG4gICAqL1xuICBzZXRSYW5nZVN0YXJ0KGNvb3JkcywgbXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICBsZXQgZnJhZ21lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIGxldCBoaWdobGlnaHRDb29yZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGNvb3JkcztcbiAgICBjb25zdCBpc011bHRpcGxlTW9kZSA9IHRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJztcbiAgICBjb25zdCBpc011bHRpcGxlU2VsZWN0aW9uID0gKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkobXVsdGlwbGVTZWxlY3Rpb24pID8gdGhpcy50YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSA6IG11bHRpcGxlU2VsZWN0aW9uO1xuICAgIC8vIFdlIGFyZSBjcmVhdGluZyBjb3B5LiBXZSB3b3VsZCBsaWtlIHRvIG1vZGlmeSBqdXN0IHRoZSBzdGFydCBvZiB0aGUgc2VsZWN0aW9uIGJ5IGJlbG93IGhvb2suIFRoZW4gb3JpZ2luYWwgY29vcmRzXG4gICAgLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgbmV4dCBtZXRob2RzLlxuICAgIGNvbnN0IGNvb3Jkc0Nsb25lID0gY29vcmRzLmNsb25lKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCwgdGhpcywgZmFsc2UpO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcyhgYmVmb3JlU2V0UmFuZ2VTdGFydCR7ZnJhZ21lbnQgPyAnT25seScgOiAnJ31gLCBjb29yZHNDbG9uZSk7XG4gICAgaWYgKCFpc011bHRpcGxlTW9kZSB8fCBpc011bHRpcGxlTW9kZSAmJiAhaXNNdWx0aXBsZVNlbGVjdGlvbiAmJiAoMCwgX21peGVkLmlzVW5kZWZpbmVkKShtdWx0aXBsZVNlbGVjdGlvbikpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUmFuZ2UuYWRkKGNvb3Jkc0Nsb25lKS5jdXJyZW50KCkuc2V0SGlnaGxpZ2h0KGhpZ2hsaWdodENvb3Jkcy5jbG9uZSgpKTtcbiAgICBpZiAodGhpcy5nZXRMYXllckxldmVsKCkgPT09IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpO1xuICAgICAgdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCk7XG4gICAgfVxuICAgIGlmICghZnJhZ21lbnQpIHtcbiAgICAgIHRoaXMuc2V0UmFuZ2VFbmQoY29vcmRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHNlbGVjdGlvbiByYW5nZSBvbiBnaXZlbiBjb29yZGluYXRlIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgVmlzdWFsIGNvb3Jkcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbbXVsdGlwbGVTZWxlY3Rpb25dIElmIGB0cnVlYCwgc2VsZWN0aW9uIHdpbGwgYmUgd29ya2VkIGluICdtdWx0aXBsZScgbW9kZS4gVGhpcyBvcHRpb24gd29ya3NcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgd2hlbiAnc2VsZWN0aW9uTW9kZScgaXMgc2V0IGFzICdtdWx0aXBsZScuIElmIHRoZSBhcmd1bWVudCBpcyBub3QgZGVmaW5lZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRlZmF1bHQgdHJpZ2dlciB3aWxsIGJlIHVzZWQuXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gW2hpZ2hsaWdodENvb3Jkc10gSWYgc2V0LCBhbGxvd3MgY2hhbmdpbmcgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBoaWdobGlnaHQvZm9jdXMgY2VsbC5cbiAgICovXG4gIHNldFJhbmdlU3RhcnRPbmx5KGNvb3JkcywgbXVsdGlwbGVTZWxlY3Rpb24pIHtcbiAgICBsZXQgaGlnaGxpZ2h0Q29vcmRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBjb29yZHM7XG4gICAgdGhpcy5zZXRSYW5nZVN0YXJ0KGNvb3JkcywgbXVsdGlwbGVTZWxlY3Rpb24sIHRydWUsIGhpZ2hsaWdodENvb3Jkcyk7XG4gIH1cblxuICAvKipcbiAgICogRW5kcyBzZWxlY3Rpb24gcmFuZ2Ugb24gZ2l2ZW4gY29vcmRpbmF0ZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFZpc3VhbCBjb29yZHMuXG4gICAqL1xuICBzZXRSYW5nZUVuZChjb29yZHMpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb29yZHNDbG9uZSA9IGNvb3Jkcy5jbG9uZSgpO1xuICAgIGNvbnN0IGNvdW50Um93cyA9IHRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBjb3VudENvbHMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7XG4gICAgY29uc3QgaXNTaW5nbGUgPSB0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmNsb25lKCkuc2V0VG8oY29vcmRzKS5pc1NpbmdsZUhlYWRlcigpO1xuXG4gICAgLy8gSWdub3JlIHByb2Nlc3NpbmcgdGhlIGVuZCByYW5nZSB3aGVuIHRoZSBoZWFkZXIgc2VsZWN0aW9uIHN0YXJ0cyBvdmVybGFwcGluZyB0aGUgY29ybmVyIGFuZFxuICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgbm90IGEgc2luZ2xlIGhlYWRlciBoaWdobGlnaHQuXG4gICAgaWYgKChjb3VudFJvd3MgPiAwIHx8IGNvdW50Q29scyA+IDApICYmIChjb3VudFJvd3MgPT09IDAgJiYgY29vcmRzQ2xvbmUuY29sIDwgMCAmJiAhaXNTaW5nbGUgfHwgY291bnRDb2xzID09PSAwICYmIGNvb3Jkc0Nsb25lLnJvdyA8IDAgJiYgIWlzU2luZ2xlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZVNldFJhbmdlRW5kJywgY29vcmRzQ2xvbmUpO1xuICAgIHRoaXMuYmVnaW4oKTtcbiAgICBjb25zdCBjZWxsUmFuZ2UgPSB0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO1xuICAgIGlmICghdGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzKSB7XG4gICAgICBjZWxsUmFuZ2UuaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgY2VsbFJhbmdlLnNldEZyb20oY2VsbFJhbmdlLmhpZ2hsaWdodCk7XG4gICAgICBjZWxsUmFuZ2Uuc2V0VG8oY2VsbFJhbmdlLmhpZ2hsaWdodCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhvcml6b250YWxEaXIgPSBjZWxsUmFuZ2UuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpO1xuICAgICAgY29uc3QgdmVydGljYWxEaXIgPSBjZWxsUmFuZ2UuZ2V0VmVydGljYWxEaXJlY3Rpb24oKTtcbiAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0aGlzLmlzTXVsdGlwbGUoKTtcbiAgICAgIGNlbGxSYW5nZS5zZXRUbyhjb29yZHNDbG9uZSk7XG4gICAgICBpZiAoaXNNdWx0aXBsZSAmJiAoaG9yaXpvbnRhbERpciAhPT0gY2VsbFJhbmdlLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSB8fCBjZWxsUmFuZ2UuZ2V0V2lkdGgoKSA9PT0gMSAmJiAhY2VsbFJhbmdlLmluY2x1ZGVzKGNlbGxSYW5nZS5oaWdobGlnaHQpKSkge1xuICAgICAgICBjZWxsUmFuZ2UuZnJvbS5hc3NpZ24oe1xuICAgICAgICAgIGNvbDogY2VsbFJhbmdlLmhpZ2hsaWdodC5jb2xcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNNdWx0aXBsZSAmJiAodmVydGljYWxEaXIgIT09IGNlbGxSYW5nZS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpIHx8IGNlbGxSYW5nZS5nZXRIZWlnaHQoKSA9PT0gMSAmJiAhY2VsbFJhbmdlLmluY2x1ZGVzKGNlbGxSYW5nZS5oaWdobGlnaHQpKSkge1xuICAgICAgICBjZWxsUmFuZ2UuZnJvbS5hc3NpZ24oe1xuICAgICAgICAgIHJvdzogY2VsbFJhbmdlLmhpZ2hsaWdodC5yb3dcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBjcmVhdGluZyBcImFyZWFcIiBzZWxlY3Rpb24gdGhhdCBvdmVybGFwcyBoZWFkZXJzLlxuICAgIGlmIChjb3VudFJvd3MgPiAwICYmIGNvdW50Q29scyA+IDApIHtcbiAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzIHx8IHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyAmJiAhY2VsbFJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpIHtcbiAgICAgICAgY2VsbFJhbmdlLnRvLm5vcm1hbGl6ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZUhpZ2hsaWdodFNldCcpO1xuICAgIHRoaXMuc2V0UmFuZ2VGb2N1cyh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCk7XG4gICAgdGhpcy5hcHBseUFuZENvbW1pdCgpO1xuICAgIGNvbnN0IGlzTGFzdExheWVyID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9leHBlY3RlZExheWVyc0NvdW50LCB0aGlzKSA9PT0gLTEgfHwgdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKSA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9leHBlY3RlZExheWVyc0NvdW50LCB0aGlzKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyU2V0UmFuZ2VFbmQnLCBjb29yZHMsIGlzTGFzdExheWVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGFuZCBjb21taXRzIHRoZSBzZWxlY3Rpb24gdG8gYWxsIGxheWVycyAodXNpbmcgdGhlIFdhbGtvbnRhYmxlIFNlbGVjdGlvbiBBUEkpIGJhc2VkIG9uIHRoZSBzZWxlY3Rpb24gKENlbGxSYW5nZXMpXG4gICAqIGNvbGxlY3RlZCBpbiB0aGUgYHNlbGVjdGVkUmFuZ2VgIG1vZHVsZS5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsUmFuZ2V9IFtjZWxsUmFuZ2VdIFRoZSBjZWxsIHJhbmdlIHRvIGFwcGx5LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyB1c2VkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xheWVyTGV2ZWxdIFRoZSBsYXllciBsZXZlbCB0byBhcHBseS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBsYXllciBsZXZlbCBpcyB1c2VkLlxuICAgKi9cbiAgYXBwbHlBbmRDb21taXQoKSB7XG4gICAgbGV0IGNlbGxSYW5nZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtcbiAgICBsZXQgbGF5ZXJMZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5nZXRMYXllckxldmVsKCk7XG4gICAgY29uc3QgY291bnRSb3dzID0gdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO1xuICAgIGNvbnN0IGNvdW50Q29scyA9IHRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtcblxuICAgIC8vIElmIHRoZSBuZXh0IGxheWVyIGxldmVsIGlzIGxvd2VyIHRoYW4gcHJldmlvdXMgdGhlbiBjbGVhciBhbGwgYXJlYSBhbmQgaGVhZGVyIGhpZ2hsaWdodHMuIFRoaXMgaXMgdGhlXG4gICAgLy8gaW5kaWNhdGlvbiB0aGF0IHRoZSBuZXcgc2VsZWN0aW9uIGlzIHBlcmZvcm1pbmcuXG4gICAgaWYgKGxheWVyTGV2ZWwgPCB0aGlzLmhpZ2hsaWdodC5sYXllckxldmVsKSB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0QXJlYXMoKSwgaGlnaGxpZ2h0ID0+IHZvaWQgaGlnaGxpZ2h0LmNsZWFyKCkpO1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuaGlnaGxpZ2h0LmdldExheWVyZWRBcmVhcygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0Um93SGVhZGVycygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGVhZGVycygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlUm93SGVhZGVycygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29sdW1uSGVhZGVycygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29ybmVySGVhZGVycygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0Um93SGlnaGxpZ2h0cygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkodGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLCBoaWdobGlnaHQgPT4gdm9pZCBoaWdobGlnaHQuY2xlYXIoKSk7XG4gICAgfVxuICAgIHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwobGF5ZXJMZXZlbCk7XG4gICAgY29uc3QgYXJlYUhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKTtcbiAgICBjb25zdCBsYXllcmVkQXJlYUhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCk7XG4gICAgY29uc3Qgcm93SGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCk7XG4gICAgY29uc3QgYWN0aXZlUm93SGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCk7XG4gICAgY29uc3QgYWN0aXZlQ29sdW1uSGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCk7XG4gICAgY29uc3QgYWN0aXZlQ29ybmVySGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCk7XG4gICAgY29uc3Qgcm93SGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCk7XG4gICAgY29uc3QgY29sdW1uSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7XG4gICAgYXJlYUhpZ2hsaWdodC5jbGVhcigpO1xuICAgIGxheWVyZWRBcmVhSGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgcm93SGVhZGVySGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgY29sdW1uSGVhZGVySGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgYWN0aXZlUm93SGVhZGVySGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgYWN0aXZlQ29sdW1uSGVhZGVySGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgYWN0aXZlQ29ybmVySGVhZGVySGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgcm93SGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgY29sdW1uSGlnaGxpZ2h0LmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihfaGlnaGxpZ2h0LkFSRUFfVFlQRSwgY2VsbFJhbmdlLmhpZ2hsaWdodCkgJiYgKHRoaXMuaXNNdWx0aXBsZSgpIHx8IGxheWVyTGV2ZWwgPj0gMSkpIHtcbiAgICAgIGFyZWFIaWdobGlnaHQuYWRkKGNlbGxSYW5nZS5mcm9tKS5hZGQoY2VsbFJhbmdlLnRvKS5jb21taXQoKTtcbiAgICAgIGxheWVyZWRBcmVhSGlnaGxpZ2h0LmFkZChjZWxsUmFuZ2UuZnJvbSkuYWRkKGNlbGxSYW5nZS50bykuY29tbWl0KCk7XG4gICAgICBpZiAobGF5ZXJMZXZlbCA9PT0gMSkge1xuICAgICAgICAvLyBGb3Igc2luZ2xlIGNlbGwgc2VsZWN0aW9uIGluIHRoZSBzYW1lIGxheWVyLCB3ZSBkbyBub3QgY3JlYXRlIGFyZWEgc2VsZWN0aW9uIHRvIHByZXZlbnQgYmx1ZSBiYWNrZ3JvdW5kLlxuICAgICAgICAvLyBXaGVuIG5vbi1jb25zZWN1dGl2ZSBzZWxlY3Rpb24gaXMgcGVyZm9ybWVkIHdlIGhhdmUgdG8gYWRkIHRoYXQgbWlzc2luZyBhcmVhIHNlbGVjdGlvbiB0byB0aGUgcHJldmlvdXMgbGF5ZXJcbiAgICAgICAgLy8gYmFzZWQgb24gcHJldmlvdXMgY29vcmRpbmF0ZXMuIEl0IG9ubHkgb2NjdXJzIHdoZW4gdGhlIHByZXZpb3VzIHNlbGVjdGlvbiB3YXNuJ3Qgc2VsZWN0IG11bHRpcGxlIGNlbGxzLlxuICAgICAgICBjb25zdCBwcmV2aW91c1JhbmdlID0gdGhpcy5zZWxlY3RlZFJhbmdlLnByZXZpb3VzKCk7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwobGF5ZXJMZXZlbCAtIDEpO1xuICAgICAgICB0aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCkuYWRkKHByZXZpb3VzUmFuZ2UuZnJvbSkuY29tbWl0KClcbiAgICAgICAgLy8gUmFuZ2UgbWF5IHN0YXJ0IHdpdGggaGlkZGVuIGluZGV4ZXMuIENvbW1pdCB3b3VsZCBub3QgZm91bmQgc3RhcnQgcG9pbnQgKGFzIHdlIGFkZCBqdXN0IHRoZSBgZnJvbWAgY29vcmRzKS5cbiAgICAgICAgLnN5bmNXaXRoKHByZXZpb3VzUmFuZ2UpO1xuICAgICAgICB0aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLmFkZChwcmV2aW91c1JhbmdlLmZyb20pLmNvbW1pdCgpXG4gICAgICAgIC8vIFJhbmdlIG1heSBzdGFydCB3aXRoIGhpZGRlbiBpbmRleGVzLiBDb21taXQgd291bGQgbm90IGZvdW5kIHN0YXJ0IHBvaW50IChhcyB3ZSBhZGQganVzdCB0aGUgYGZyb21gIGNvb3JkcykuXG4gICAgICAgIC5zeW5jV2l0aChwcmV2aW91c1JhbmdlKTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChsYXllckxldmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihfaGlnaGxpZ2h0LkhFQURFUl9UWVBFLCBjZWxsUmFuZ2UuaGlnaGxpZ2h0KSkge1xuICAgICAgaWYgKCFjZWxsUmFuZ2UuaXNTaW5nbGVIZWFkZXIoKSkge1xuICAgICAgICBjb25zdCByb3dDb29yZHNGcm9tID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoY2VsbFJhbmdlLmZyb20ucm93LCAwKSwgLTEpO1xuICAgICAgICBjb25zdCByb3dDb29yZHNUbyA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGNlbGxSYW5nZS50by5yb3csIC0xKTtcbiAgICAgICAgY29uc3QgY29sdW1uQ29vcmRzRnJvbSA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLCBNYXRoLm1heChjZWxsUmFuZ2UuZnJvbS5jb2wsIDApKTtcbiAgICAgICAgY29uc3QgY29sdW1uQ29vcmRzVG8gPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwgY2VsbFJhbmdlLnRvLmNvbCk7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgcm93SGVhZGVySGlnaGxpZ2h0LmFkZChyb3dDb29yZHNGcm9tKS5jb21taXQoKTtcbiAgICAgICAgICBjb2x1bW5IZWFkZXJIaWdobGlnaHQuYWRkKGNvbHVtbkNvb3Jkc0Zyb20pLmNvbW1pdCgpO1xuICAgICAgICAgIHJvd0hpZ2hsaWdodC5hZGQocm93Q29vcmRzRnJvbSkuY29tbWl0KCk7XG4gICAgICAgICAgY29sdW1uSGlnaGxpZ2h0LmFkZChjb2x1bW5Db29yZHNGcm9tKS5jb21taXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByb3dIZWFkZXJIaWdobGlnaHQuYWRkKHJvd0Nvb3Jkc0Zyb20pLmFkZChyb3dDb29yZHNUbykuY29tbWl0KCk7XG4gICAgICAgICAgY29sdW1uSGVhZGVySGlnaGxpZ2h0LmFkZChjb2x1bW5Db29yZHNGcm9tKS5hZGQoY29sdW1uQ29vcmRzVG8pLmNvbW1pdCgpO1xuICAgICAgICAgIHJvd0hpZ2hsaWdodC5hZGQocm93Q29vcmRzRnJvbSkuYWRkKHJvd0Nvb3Jkc1RvKS5jb21taXQoKTtcbiAgICAgICAgICBjb2x1bW5IaWdobGlnaHQuYWRkKGNvbHVtbkNvb3Jkc0Zyb20pLmFkZChjb2x1bW5Db29yZHNUbykuY29tbWl0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodFJvd0hlYWRlcnMgPSAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9kaXNhYmxlSGVhZGVyc0hpZ2hsaWdodCwgdGhpcykgJiYgdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkgJiYgKGNvdW50Q29scyA+IDAgJiYgY291bnRDb2xzID09PSBjZWxsUmFuZ2UuZ2V0V2lkdGgoKSB8fCBjb3VudENvbHMgPT09IDAgJiYgdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSk7XG4gICAgICBjb25zdCBoaWdobGlnaHRDb2x1bW5IZWFkZXJzID0gIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQsIHRoaXMpICYmIHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpICYmIChjb3VudFJvd3MgPiAwICYmIGNvdW50Um93cyA9PT0gY2VsbFJhbmdlLmdldEhlaWdodCgpIHx8IGNvdW50Um93cyA9PT0gMCAmJiB0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKTtcbiAgICAgIGlmIChoaWdobGlnaHRSb3dIZWFkZXJzKSB7XG4gICAgICAgIGFjdGl2ZVJvd0hlYWRlckhpZ2hsaWdodC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoY2VsbFJhbmdlLmZyb20ucm93LCAwKSwgTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSwgLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGNlbGxSYW5nZS50by5yb3csIDApLCAtMSkpLmNvbW1pdCgpO1xuICAgICAgfVxuICAgICAgaWYgKGhpZ2hsaWdodENvbHVtbkhlYWRlcnMpIHtcbiAgICAgICAgYWN0aXZlQ29sdW1uSGVhZGVySGlnaGxpZ2h0LmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbigtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLCAtMSksIE1hdGgubWF4KGNlbGxSYW5nZS5mcm9tLmNvbCwgMCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsIE1hdGgubWF4KGNlbGxSYW5nZS50by5jb2wsIDApKSkuY29tbWl0KCk7XG4gICAgICB9XG4gICAgICBpZiAoaGlnaGxpZ2h0Um93SGVhZGVycyAmJiBoaWdobGlnaHRDb2x1bW5IZWFkZXJzKSB7XG4gICAgICAgIGFjdGl2ZUNvcm5lckhlYWRlckhpZ2hsaWdodC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwgLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSwgLTEpKS5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0aW9uIGZvY3VzIHBvc2l0aW9uIGF0IHRoZSBzcGVjaWZpZWQgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlIHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqL1xuICBzZXRSYW5nZUZvY3VzKGNvb3Jkcykge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNlbGxSYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7XG4gICAgaWYgKCF0aGlzLmluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYmVmb3JlU2V0Rm9jdXMnLCBjb29yZHMpO1xuICAgIH1cbiAgICBjb25zdCBmb2N1c0hpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCk7XG4gICAgZm9jdXNIaWdobGlnaHQuY2xlYXIoKTtcbiAgICBjZWxsUmFuZ2Uuc2V0SGlnaGxpZ2h0KGNvb3Jkcyk7XG4gICAgaWYgKCF0aGlzLmluUHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYmVmb3JlSGlnaGxpZ2h0U2V0Jyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoX2hpZ2hsaWdodC5GT0NVU19UWVBFLCBjZWxsUmFuZ2UuaGlnaGxpZ2h0KSkge1xuICAgICAgZm9jdXNIaWdobGlnaHQuYWRkKGNlbGxSYW5nZS5oaWdobGlnaHQpLmNvbW1pdCgpLnN5bmNXaXRoKGNlbGxSYW5nZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5pblByb2dyZXNzKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkLCB0aGlzLCB0cnVlKTtcbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJTZXRGb2N1cycsIGNlbGxSYW5nZS5oaWdobGlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGNlbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2VsbCAoaWYgcG9zc2libGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93RGVsdGEgUm93cyBudW1iZXIgdG8gbW92ZSwgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBuZWdhdGl2ZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xEZWx0YSBDb2x1bW5zIG51bWJlciB0byBtb3ZlLCB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIG5lZ2F0aXZlIG51bWJlci5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlTWlzc2luZ1JlY29yZHM9ZmFsc2VdIElmIGB0cnVlYCB0aGUgbmV3IHJvd3MvY29sdW1ucyB3aWxsIGJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuICAgKiBPdGhlcndpc2UsIHJvdy9jb2x1bW4gd2lsbCBiZSBjcmVhdGVkIGFjY29yZGluZyB0byBgbWluU3BhcmVSb3dzL21pblNwYXJlQ29sc2Agc2V0dGluZ3Mgb2YgSGFuZHNvbnRhYmxlLlxuICAgKi9cbiAgdHJhbnNmb3JtU3RhcnQocm93RGVsdGEsIGNvbERlbHRhKSB7XG4gICAgbGV0IGNyZWF0ZU1pc3NpbmdSZWNvcmRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RyYW5zZm9ybWF0aW9uLCB0aGlzKS5zZXRPZmZzZXRTaXplKHtcbiAgICAgICAgeDogdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLFxuICAgICAgICB5OiB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldFJhbmdlU3RhcnQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90cmFuc2Zvcm1hdGlvbiwgdGhpcykudHJhbnNmb3JtU3RhcnQocm93RGVsdGEsIGNvbERlbHRhLCBjcmVhdGVNaXNzaW5nUmVjb3JkcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgc2VsZWN0aW9uIGVuZCBjZWxsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBlbmQgY2VsbCAoaWYgcG9zc2libGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93RGVsdGEgUm93cyBudW1iZXIgdG8gbW92ZSwgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBuZWdhdGl2ZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xEZWx0YSBDb2x1bW5zIG51bWJlciB0byBtb3ZlLCB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIG5lZ2F0aXZlIG51bWJlci5cbiAgICovXG4gIHRyYW5zZm9ybUVuZChyb3dEZWx0YSwgY29sRGVsdGEpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzKSB7XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RyYW5zZm9ybWF0aW9uLCB0aGlzKS5zZXRPZmZzZXRTaXplKHtcbiAgICAgICAgeDogdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLFxuICAgICAgICB5OiB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKClcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldFJhbmdlRW5kKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdHJhbnNmb3JtYXRpb24sIHRoaXMpLnRyYW5zZm9ybUVuZChyb3dEZWx0YSwgY29sRGVsdGEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBmb2N1cyBjZWxsIHNlbGVjdGlvbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBmb2N1cyBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0RlbHRhIFJvd3MgbnVtYmVyIHRvIG1vdmUsIHZhbHVlIGNhbiBiZSBwYXNzZWQgYXMgbmVnYXRpdmUgbnVtYmVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sRGVsdGEgQ29sdW1ucyBudW1iZXIgdG8gbW92ZSwgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBuZWdhdGl2ZSBudW1iZXIuXG4gICAqL1xuICB0cmFuc2Zvcm1Gb2N1cyhyb3dEZWx0YSwgY29sRGVsdGEpIHtcbiAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7XG4gICAgY29uc3Qge1xuICAgICAgcm93LFxuICAgICAgY29sXG4gICAgfSA9IHJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICBjb25zdCBjb2x1bW5zSW5SYW5nZSA9IHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLCBjb2wgLSAxKTtcbiAgICBjb25zdCByb3dzSW5SYW5nZSA9IHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLCByb3cgLSAxKTtcbiAgICBpZiAocmFuZ2UuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpIHtcbiAgICAgIC8vIGZvciBoZWFkZXIgZm9jdXMgc2VsZWN0aW9uIGNhbGN1bGF0ZSB0aGUgbmV3IGNvb3JkcyBiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIGluY2x1ZGluZyBoZWFkZXJzXG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZvY3VzVHJhbnNmb3JtYXRpb24sIHRoaXMpLnNldE9mZnNldFNpemUoe1xuICAgICAgICB4OiBjb2wgPCAwID8gTWF0aC5hYnMoY29sKSA6IC1jb2x1bW5zSW5SYW5nZSxcbiAgICAgICAgeTogcm93IDwgMCA/IE1hdGguYWJzKHJvdykgOiAtcm93c0luUmFuZ2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3IgZm9jdXMgc2VsZWN0aW9uIGluIGNlbGxzIGNhbGN1bGF0ZSB0aGUgbmV3IGNvb3JkcyBvbmx5IGJhc2VkIG9uIHRoZSBzZWxlY3RlZCBjZWxsc1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9mb2N1c1RyYW5zZm9ybWF0aW9uLCB0aGlzKS5zZXRPZmZzZXRTaXplKHtcbiAgICAgICAgeDogY29sIDwgMCA/IDAgOiAtY29sdW1uc0luUmFuZ2UsXG4gICAgICAgIHk6IHJvdyA8IDAgPyAwIDogLXJvd3NJblJhbmdlXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZm9jdXNDb29yZHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2ZvY3VzVHJhbnNmb3JtYXRpb24sIHRoaXMpLnRyYW5zZm9ybVN0YXJ0KHJvd0RlbHRhLCBjb2xEZWx0YSk7XG4gICAgdGhpcy5zZXRSYW5nZUZvY3VzKGZvY3VzQ29vcmRzLm5vcm1hbGl6ZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBsYXN0IHNlbGVjdGlvbiBsYXllciBkb3duIG9yIHVwIGJ5IHRoZSBpbmRleCBjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbFJvd0luZGV4IFZpc3VhbCByb3cgaW5kZXggZnJvbSB3aGljaCB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgc2hpZnRlZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFtb3VudCBUaGUgbnVtYmVyIG9mIHJvd3MgdG8gc2hpZnQgdGhlIHNlbGVjdGlvbi5cbiAgICovXG4gIHNoaWZ0Um93cyh2aXN1YWxSb3dJbmRleCwgYW1vdW50KSB7XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsKHRydWUsIHRydWUsIHtcbiAgICAgICAgZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSB8fCByYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkucm93ID49IHZpc3VhbFJvd0luZGV4KSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBoaWdobGlnaHRcbiAgICAgIH0gPSByYW5nZTtcbiAgICAgIGNvbnN0IGNvdW50Um93cyA9IHRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRCeVJvd0hlYWRlciA9IHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIgPSB0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO1xuICAgICAgY29uc3QgbWluUm93ID0gaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyID8gLTEgOiAwO1xuICAgICAgY29uc3QgY29vcmRzU3RhcnRBbW91bnQgPSBpc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIgPyAwIDogYW1vdW50O1xuXG4gICAgICAvLyBSZW1vdmUgZnJvbSB0aGUgc3RhY2sgdGhlIGxhc3QgYWRkZWQgc2VsZWN0aW9uIGFzIHRoYXQgc2VsZWN0aW9uIGJlbG93IHdpbGwgYmVcbiAgICAgIC8vIHJlcGxhY2VkIGJ5IG5ldyB0cmFuc2Zvcm1lZCBzZWxlY3Rpb24uXG4gICAgICB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtcbiAgICAgIGNvbnN0IGNvb3Jkc1N0YXJ0ID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoKDAsIF9udW1iZXIuY2xhbXApKGZyb20ucm93ICsgY29vcmRzU3RhcnRBbW91bnQsIG1pblJvdywgY291bnRSb3dzIC0gMSksIGZyb20uY29sKTtcbiAgICAgIGNvbnN0IGNvb3Jkc0VuZCA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKCgwLCBfbnVtYmVyLmNsYW1wKSh0by5yb3cgKyBhbW91bnQsIG1pblJvdywgY291bnRSb3dzIC0gMSksIHRvLmNvbCk7XG4gICAgICB0aGlzLm1hcmtTb3VyY2UoJ3NoaWZ0Jyk7XG4gICAgICBpZiAoaGlnaGxpZ2h0LnJvdyA+PSB2aXN1YWxSb3dJbmRleCkge1xuICAgICAgICB0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGNvb3Jkc1N0YXJ0LCB0cnVlLCB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygoMCwgX251bWJlci5jbGFtcCkoaGlnaGxpZ2h0LnJvdyArIGFtb3VudCwgMCwgY291bnRSb3dzIC0gMSksIGhpZ2hsaWdodC5jb2wpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoY29vcmRzU3RhcnQsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU2VsZWN0ZWRCeVJvd0hlYWRlcikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFJhbmdlRW5kKGNvb3Jkc0VuZCk7XG4gICAgICB0aGlzLm1hcmtFbmRTb3VyY2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgbGFzdCBzZWxlY3Rpb24gbGF5ZXIgbGVmdCBvciByaWdodCBieSB0aGUgaW5kZXggY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW5JbmRleCBWaXN1YWwgY29sdW1uIGluZGV4IGZyb20gd2hpY2ggdGhlIHNlbGVjdGlvbiB3aWxsIGJlIHNoaWZ0ZWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgVGhlIG51bWJlciBvZiBjb2x1bW5zIHRvIHNoaWZ0IHRoZSBzZWxlY3Rpb24uXG4gICAqL1xuICBzaGlmdENvbHVtbnModmlzdWFsQ29sdW1uSW5kZXgsIGFtb3VudCkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbCh0cnVlLCB0cnVlLCB7XG4gICAgICAgIGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkgfHwgcmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbCA+PSB2aXN1YWxDb2x1bW5JbmRleCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmcm9tLFxuICAgICAgICB0byxcbiAgICAgICAgaGlnaGxpZ2h0XG4gICAgICB9ID0gcmFuZ2U7XG4gICAgICBjb25zdCBjb3VudENvbHMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7XG4gICAgICBjb25zdCBpc1NlbGVjdGVkQnlSb3dIZWFkZXIgPSB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO1xuICAgICAgY29uc3QgaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyID0gdGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtcbiAgICAgIGNvbnN0IG1pbkNvbHVtbiA9IGlzU2VsZWN0ZWRCeVJvd0hlYWRlciA/IC0xIDogMDtcbiAgICAgIGNvbnN0IGNvb3Jkc1N0YXJ0QW1vdW50ID0gaXNTZWxlY3RlZEJ5Um93SGVhZGVyID8gMCA6IGFtb3VudDtcblxuICAgICAgLy8gUmVtb3ZlIGZyb20gdGhlIHN0YWNrIHRoZSBsYXN0IGFkZGVkIHNlbGVjdGlvbiBhcyB0aGF0IHNlbGVjdGlvbiBiZWxvdyB3aWxsIGJlXG4gICAgICAvLyByZXBsYWNlZCBieSBuZXcgdHJhbnNmb3JtZWQgc2VsZWN0aW9uLlxuICAgICAgdGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7XG4gICAgICBjb25zdCBjb29yZHNTdGFydCA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGZyb20ucm93LCAoMCwgX251bWJlci5jbGFtcCkoZnJvbS5jb2wgKyBjb29yZHNTdGFydEFtb3VudCwgbWluQ29sdW1uLCBjb3VudENvbHMgLSAxKSk7XG4gICAgICBjb25zdCBjb29yZHNFbmQgPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh0by5yb3csICgwLCBfbnVtYmVyLmNsYW1wKSh0by5jb2wgKyBhbW91bnQsIG1pbkNvbHVtbiwgY291bnRDb2xzIC0gMSkpO1xuICAgICAgdGhpcy5tYXJrU291cmNlKCdzaGlmdCcpO1xuICAgICAgaWYgKGhpZ2hsaWdodC5jb2wgPj0gdmlzdWFsQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZXRSYW5nZVN0YXJ0T25seShjb29yZHNTdGFydCwgdHJ1ZSwgdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaGlnaGxpZ2h0LnJvdywgKDAsIF9udW1iZXIuY2xhbXApKGhpZ2hsaWdodC5jb2wgKyBhbW91bnQsIDAsIGNvdW50Q29scyAtIDEpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGNvb3Jkc1N0YXJ0LCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1NlbGVjdGVkQnlSb3dIZWFkZXIpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRSYW5nZUVuZChjb29yZHNFbmQpO1xuICAgICAgdGhpcy5tYXJrRW5kU291cmNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudGx5IHVzZWQgbGF5ZXIgbGV2ZWwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgbGF5ZXIgbGV2ZWwgc3RhcnRpbmcgZnJvbSAwLiBJZiBubyBzZWxlY3Rpb24gd2FzIGFkZGVkIHRvIHRoZSB0YWJsZSAtMSBpcyByZXR1cm5lZC5cbiAgICovXG4gIGdldExheWVyTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCkgLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGN1cnJlbnRseSB0aGVyZSBpcyBhIHNlbGVjdGlvbiBvbiB0aGUgc2NyZWVuLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NlbGVjdGVkKCkge1xuICAgIHJldHVybiAhdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIGlmIHdlIGhhdmUgYSBtdWx0aS1zZWxlY3Rpb24uIFRoaXMgbWV0aG9kIGNoZWNrIG11bHRpLXNlbGVjdGlvbiBvbmx5IG9uIHRoZSBsYXRlc3QgbGF5ZXIgb2ZcbiAgICogdGhlIHNlbGVjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc011bHRpcGxlKCkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgaXNNdWx0aXBsZUxpc3RlbmVyID0gKDAsIF9vYmplY3QuY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKSghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVySXNNdWx0aXBsZVNlbGVjdGlvbicsIGlzTXVsdGlwbGVMaXN0ZW5lcik7XG4gICAgcmV0dXJuIGlzTXVsdGlwbGVMaXN0ZW5lci52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGxhc3Qgc2VsZWN0aW9uIGludm9sdmVzIGNoYW5naW5nIHRoZSBmb2N1cyBjZWxsIHBvc2l0aW9uIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3RlZCgpICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQsIHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3Rpb24gd2FzIGFwcGxpZWQgYnkgY2xpY2tpbmcgdG8gdGhlIHJvdyBoZWFkZXIuIElmIHRoZSBgbGF5ZXJMZXZlbGBcbiAgICogYXJndW1lbnQgaXMgcGFzc2VkIHRoZW4gb25seSB0aGF0IGxheWVyIHdpbGwgYmUgY2hlY2tlZC4gT3RoZXJ3aXNlLCBpdCBjaGVja3MgaWYgYW55IHJvdyBoZWFkZXJcbiAgICogd2FzIGNsaWNrZWQgb24gYW55IHNlbGVjdGlvbiBsYXllciBsZXZlbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsYXllckxldmVsPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpXSBTZWxlY3Rpb24gbGF5ZXIgbGV2ZWwgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkge1xuICAgIGxldCBsYXllckxldmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmdldExheWVyTGV2ZWwoKTtcbiAgICByZXR1cm4gIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKGxheWVyTGV2ZWwpICYmIChsYXllckxldmVsID09PSAtMSA/IHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplID4gMCA6IHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobGF5ZXJMZXZlbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3Rpb24gY29uc2lzdHMgb2YgZW50aXJlIHJvd3MgKGluY2x1ZGluZyB0aGVpciBoZWFkZXJzKS4gSWYgdGhlIGBsYXllckxldmVsYFxuICAgKiBhcmd1bWVudCBpcyBwYXNzZWQgdGhlbiBvbmx5IHRoYXQgbGF5ZXIgd2lsbCBiZSBjaGVja2VkLiBPdGhlcndpc2UsIGl0IGNoZWNrcyB0aGUgc2VsZWN0aW9uIGZvciBhbGwgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xheWVyTGV2ZWw9dGhpcy5nZXRMYXllckxldmVsKCldIFNlbGVjdGlvbiBsYXllciBsZXZlbCB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VudGlyZVJvd1NlbGVjdGVkKCkge1xuICAgIGxldCBsYXllckxldmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmdldExheWVyTGV2ZWwoKTtcbiAgICBjb25zdCB0ZXN0ZXIgPSByYW5nZSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbFxuICAgICAgfSA9IHJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IHJvd0hlYWRlcnMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk7XG4gICAgICBjb25zdCBjb3VudENvbHMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7XG4gICAgICByZXR1cm4gKHJvd0hlYWRlcnMgPiAwICYmIGNvbCA8IDAgfHwgcm93SGVhZGVycyA9PT0gMCkgJiYgcmFuZ2UuZ2V0V2lkdGgoKSA9PT0gY291bnRDb2xzO1xuICAgIH07XG4gICAgaWYgKGxheWVyTGV2ZWwgPT09IC0xKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUocmFuZ2UgPT4gdGVzdGVyKHJhbmdlKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KGxheWVyTGV2ZWwpO1xuICAgIHJldHVybiByYW5nZSA/IHRlc3RlcihyYW5nZSkgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2VsZWN0aW9uIHdhcyBhcHBsaWVkIGJ5IGNsaWNraW5nIHRvIHRoZSBjb2x1bW4gaGVhZGVyLiBJZiB0aGUgYGxheWVyTGV2ZWxgXG4gICAqIGFyZ3VtZW50IGlzIHBhc3NlZCB0aGVuIG9ubHkgdGhhdCBsYXllciB3aWxsIGJlIGNoZWNrZWQuIE90aGVyd2lzZSwgaXQgY2hlY2tzIGlmIGFueSBjb2x1bW4gaGVhZGVyXG4gICAqIHdhcyBjbGlja2VkIG9uIGFueSBzZWxlY3Rpb24gbGF5ZXIgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGF5ZXJMZXZlbD10aGlzLmdldExheWVyTGV2ZWwoKV0gU2VsZWN0aW9uIGxheWVyIGxldmVsIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpIHtcbiAgICBsZXQgbGF5ZXJMZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5nZXRMYXllckxldmVsKCk7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpICYmIChsYXllckxldmVsID09PSAtMSA/IHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplID4gMCA6IHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMobGF5ZXJMZXZlbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3Rpb24gY29uc2lzdHMgb2YgZW50aXJlIGNvbHVtbnMgKGluY2x1ZGluZyB0aGVpciBoZWFkZXJzKS4gSWYgdGhlIGBsYXllckxldmVsYFxuICAgKiBhcmd1bWVudCBpcyBwYXNzZWQgdGhlbiBvbmx5IHRoYXQgbGF5ZXIgd2lsbCBiZSBjaGVja2VkLiBPdGhlcndpc2UsIGl0IGNoZWNrcyB0aGUgc2VsZWN0aW9uIGZvciBhbGwgbGF5ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xheWVyTGV2ZWw9dGhpcy5nZXRMYXllckxldmVsKCldIFNlbGVjdGlvbiBsYXllciBsZXZlbCB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0VudGlyZUNvbHVtblNlbGVjdGVkKCkge1xuICAgIGxldCBsYXllckxldmVsID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmdldExheWVyTGV2ZWwoKTtcbiAgICBjb25zdCB0ZXN0ZXIgPSByYW5nZSA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvd1xuICAgICAgfSA9IHJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IGNvbEhlYWRlcnMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCk7XG4gICAgICBjb25zdCBjb3VudFJvd3MgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7XG4gICAgICByZXR1cm4gKGNvbEhlYWRlcnMgPiAwICYmIHJvdyA8IDAgfHwgY29sSGVhZGVycyA9PT0gMCkgJiYgcmFuZ2UuZ2V0SGVpZ2h0KCkgPT09IGNvdW50Um93cztcbiAgICB9O1xuICAgIGlmIChsYXllckxldmVsID09PSAtMSkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKHJhbmdlID0+IHRlc3RlcihyYW5nZSkpO1xuICAgIH1cbiAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleChsYXllckxldmVsKTtcbiAgICByZXR1cm4gcmFuZ2UgPyB0ZXN0ZXIocmFuZ2UpIDogZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNlbGVjdGlvbiB3YXMgYXBwbGllZCBieSBjbGlja2luZyBvbiB0aGUgcm93IG9yIGNvbHVtbiBoZWFkZXIgb24gYW55IGxheWVyIGxldmVsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2VsZWN0ZWRCeUFueUhlYWRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpIHx8IHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKSB8fCB0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzZWxlY3Rpb24gd2FzIGFwcGxpZWQgYnkgY2xpY2tpbmcgb24gdGhlIGxlZnQtdG9wIGNvcm5lciBvdmVybGF5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzU2VsZWN0ZWRCeUNvcm5lcigpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSkgJiYgdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgY29vcmRzIGlzIHdpdGhpbiBzZWxlY3Rpb24gY29vcmRzLiBUaGlzIG1ldGhvZCBpdGVyYXRlcyB0aHJvdWdoIGFsbCBzZWxlY3Rpb24gbGF5ZXJzIHRvIGNoZWNrIGlmXG4gICAqIHRoZSBjb29yZHMgb2JqZWN0IGlzIHdpdGhpbiBzZWxlY3Rpb24gcmFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBDZWxsQ29vcmRzIGluc3RhbmNlIHdpdGggZGVmaW5lZCB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaW5JblNlbGVjdGlvbihjb29yZHMpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLmluY2x1ZGVzKGNvb3Jkcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNlbGwgY29ybmVyIHNob3VsZCBiZSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBjb3JuZXIgZWxlbWVudCBoYXMgdG8gYmUgdmlzaWJsZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBpc0NlbGxDb3JuZXJWaXNpYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUgJiYgIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpICYmICF0aGlzLmlzTXVsdGlwbGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgY2VsbCBjb29yZGluYXRlcyBhcmUgdmlzaWJsZSAocmVuZGVyYWJsZSkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBjZWxsIGNvb3JkaW5hdGVzIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ2VsbFZpc2libGUoY29vcmRzKSB7XG4gICAgY29uc3QgcmVuZGVyYWJsZUNvb3JkcyA9IHRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoY29vcmRzKTtcbiAgICByZXR1cm4gcmVuZGVyYWJsZUNvb3Jkcy5yb3cgIT09IG51bGwgJiYgcmVuZGVyYWJsZUNvb3Jkcy5jb2wgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZWEgY29ybmVyIHNob3VsZCBiZSB2aXNpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGF5ZXJMZXZlbCBUaGUgbGF5ZXIgbGV2ZWwuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgdGhlIGNvcm5lciBlbGVtZW50IGhhcyB0byBiZSB2aXNpYmxlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGlzQXJlYUNvcm5lclZpc2libGUobGF5ZXJMZXZlbCkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxheWVyTGV2ZWwpICYmIGxheWVyTGV2ZWwgIT09IHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUgJiYgIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpICYmIHRoaXMuaXNNdWx0aXBsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBzZWxlY3Rpb24gYnkgcmVzZXR0aW5nIHRoZSBjb2xsZWN0ZWQgcmFuZ2VzIGFuZCBoaWdobGlnaHRzLlxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgLy8gVE9ETzogY29sbGVjdGlvbnMgc2VsZWN0ZWRCeUNvbHVtbkhlYWRlciBhbmQgc2VsZWN0ZWRCeVJvd0hlYWRlciBzaG91bGQgYmUgY2xlYXIgdG9vLlxuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpO1xuICAgIHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3RzIGFsbCBzZWxlY3RlZCBjZWxscy5cbiAgICovXG4gIGRlc2VsZWN0KCkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pblByb2dyZXNzID0gZmFsc2U7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJEZXNlbGVjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYWxsIGNlbGxzIGFuZCBoZWFkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbmNsdWRlUm93SGVhZGVycz1mYWxzZV0gYHRydWVgIElmIHRoZSBzZWxlY3Rpb24gc2hvdWxkIGluY2x1ZGUgdGhlIHJvdyBoZWFkZXJzLFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbaW5jbHVkZUNvbHVtbkhlYWRlcnM9ZmFsc2VdIGB0cnVlYCBJZiB0aGUgc2VsZWN0aW9uIHNob3VsZCBpbmNsdWRlIHRoZSBjb2x1bW5cbiAgICogaGVhZGVycywgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gQWRkaXRpb25hbCBvYmplY3Qgd2l0aCBvcHRpb25zLlxuICAgKiBAcGFyYW0ge3tyb3c6IG51bWJlciwgY29sOiBudW1iZXJ9IHwgYm9vbGVhbn0gW29wdGlvbnMuZm9jdXNQb3NpdGlvbl0gVGhlIGFyZ3VtZW50IGFsbG93cyBjaGFuZ2luZyB0aGUgY2VsbC9oZWFkZXJcbiAgICogZm9jdXMgcG9zaXRpb24uIFRoZSB2YWx1ZSB0YWtlcyBhbiBvYmplY3Qgd2l0aCBhIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzIGZyb20gLU4gdG8gTiwgd2hlcmVcbiAgICogbmVnYXRpdmUgdmFsdWVzIHBvaW50IHRvIHRoZSBoZWFkZXJzIGFuZCBwb3NpdGl2ZSB2YWx1ZXMgcG9pbnQgdG8gdGhlIGNlbGwgcmFuZ2UuIElmIGBmYWxzZWAsIHRoZSBmb2N1c1xuICAgKiBwb3NpdGlvbiB3b24ndCBiZSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0XSBJZiBgdHJ1ZWAsIGRpc2FibGVzIGhpZ2hsaWdodGluZyB0aGUgaGVhZGVycyBldmVuIHdoZW5cbiAgICogdGhlIGxvZ2ljYWwgY29vcmRpbmF0ZXMgcG9pbnRzIG9uIHRoZW0uXG4gICAqL1xuICBzZWxlY3RBbGwoKSB7XG4gICAgdmFyIF90aGlzJGdldFNlbGVjdGVkUmFuZztcbiAgICBsZXQgaW5jbHVkZVJvd0hlYWRlcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIGxldCBpbmNsdWRlQ29sdW1uSGVhZGVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHtcbiAgICAgIGZvY3VzUG9zaXRpb246IGZhbHNlLFxuICAgICAgZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6IGZhbHNlXG4gICAgfTtcbiAgICBjb25zdCBuck9mUm93cyA9IHRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtcbiAgICBjb25zdCBuck9mQ29sdW1ucyA9IHRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtcbiAgICBjb25zdCBjb3VudFJvd0hlYWRlcnMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk7XG4gICAgY29uc3QgY291bnRDb2xIZWFkZXJzID0gdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpO1xuICAgIGNvbnN0IHJvd0Zyb20gPSBpbmNsdWRlQ29sdW1uSGVhZGVycyA/IC1jb3VudENvbEhlYWRlcnMgOiAwO1xuICAgIGNvbnN0IGNvbHVtbkZyb20gPSBpbmNsdWRlUm93SGVhZGVycyA/IC1jb3VudFJvd0hlYWRlcnMgOiAwO1xuXG4gICAgLy8gV2UgY2FuJ3Qgc2VsZWN0IGNlbGxzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YS5cbiAgICBpZiAocm93RnJvbSA9PT0gMCAmJiBjb2x1bW5Gcm9tID09PSAwICYmIChuck9mUm93cyA9PT0gMCB8fCBuck9mQ29sdW1ucyA9PT0gMCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGhpZ2hsaWdodCA9IChfdGhpcyRnZXRTZWxlY3RlZFJhbmcgPSB0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCkpID09PSBudWxsIHx8IF90aGlzJGdldFNlbGVjdGVkUmFuZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZ2V0U2VsZWN0ZWRSYW5nLmhpZ2hsaWdodDtcbiAgICBjb25zdCB7XG4gICAgICBmb2N1c1Bvc2l0aW9uLFxuICAgICAgZGlzYWJsZUhlYWRlcnNIaWdobGlnaHRcbiAgICB9ID0gb3B0aW9ucztcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0LCB0aGlzLCBkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodCk7XG4gICAgaWYgKGZvY3VzUG9zaXRpb24gJiYgTnVtYmVyLmlzSW50ZWdlcihmb2N1c1Bvc2l0aW9uID09PSBudWxsIHx8IGZvY3VzUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZvY3VzUG9zaXRpb24ucm93KSAmJiBOdW1iZXIuaXNJbnRlZ2VyKGZvY3VzUG9zaXRpb24gPT09IG51bGwgfHwgZm9jdXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm9jdXNQb3NpdGlvbi5jb2wpKSB7XG4gICAgICBoaWdobGlnaHQgPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygoMCwgX251bWJlci5jbGFtcCkoZm9jdXNQb3NpdGlvbi5yb3csIHJvd0Zyb20sIG5yT2ZSb3dzIC0gMSksICgwLCBfbnVtYmVyLmNsYW1wKShmb2N1c1Bvc2l0aW9uLmNvbCwgY29sdW1uRnJvbSwgbnJPZkNvbHVtbnMgLSAxKSk7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0Q29vcmRzID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMocm93RnJvbSwgY29sdW1uRnJvbSk7XG4gICAgY29uc3QgZW5kQ29vcmRzID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobnJPZlJvd3MgLSAxLCBuck9mQ29sdW1ucyAtIDEpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHN0YXJ0Q29vcmRzLCB1bmRlZmluZWQsIGhpZ2hsaWdodCk7XG4gICAgaWYgKGNvbHVtbkZyb20gPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKTtcbiAgICB9XG4gICAgaWYgKHJvd0Zyb20gPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKTtcbiAgICB9XG4gICAgdGhpcy5zZXRSYW5nZUVuZChlbmRDb29yZHMpO1xuICAgIHRoaXMuZmluaXNoKCk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9kaXNhYmxlSGVhZGVyc0hpZ2hsaWdodCwgdGhpcywgZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgbXVsdGlwbGUsIG5vbi1jb250aWd1b3VzIHNlbGVjdGlvbiBzcGVjaWZpZWQgYnkgYHJvd2AgYW5kIGBjb2x1bW5gIHZhbHVlcyBvciBhIHJhbmdlIG9mIGNlbGxzXG4gICAqIGZpbmlzaGluZyBhdCBgZW5kUm93YCwgYGVuZENvbHVtbmAuIFRoZSBtZXRob2Qgc3VwcG9ydHMgdHdvIGlucHV0IGZvcm1hdHMsIGZpcnN0IGFzIGFuIGFycmF5IG9mIGFycmF5cyBzdWNoXG4gICAqIGFzIGBbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydCwgcm93RW5kLCBjb2x1bW5FbmRdXWAgYW5kIHNlY29uZCBmb3JtYXQgYXMgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMuXG4gICAqIElmIHRoZSBwYXNzZWQgcmFuZ2VzIGhhdmUgYW5vdGhlciBmb3JtYXQgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheVtdfENlbGxSYW5nZVtdfSBzZWxlY3Rpb25SYW5nZXMgVGhlIGNvb3JkaW5hdGVzIHdoaWNoIGRlZmluZSB3aGF0IHRoZSBjZWxscyBzaG91bGQgYmUgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBzZWxlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgc2VsZWN0Q2VsbHMoc2VsZWN0aW9uUmFuZ2VzKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG4gICAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9ICgwLCBfdXRpbHMuZGV0ZWN0U2VsZWN0aW9uVHlwZSkoc2VsZWN0aW9uUmFuZ2VzKTtcbiAgICBpZiAoc2VsZWN0aW9uVHlwZSA9PT0gX3V0aWxzLlNFTEVDVElPTl9UWVBFX0VNUFRZKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChzZWxlY3Rpb25UeXBlID09PSBfdXRpbHMuU0VMRUNUSU9OX1RZUEVfVU5SRUNPR05JWkVEKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NcXHgyMFxuICAgICAgICB0aGUgY29vcmRpbmF0ZXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIChbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydC9jb2x1bW5Qcm9wU3RhcnQsIHJvd0VuZCxcXHgyMFxuICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0aW9uU2NoZW1hTm9ybWFsaXplciA9ICgwLCBfdXRpbHMubm9ybWFsaXplU2VsZWN0aW9uRmFjdG9yeSkoc2VsZWN0aW9uVHlwZSwge1xuICAgICAgY3JlYXRlQ2VsbENvb3JkczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUNlbGxSYW5nZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKC4uLmFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgcHJvcFRvQ29sOiBwcm9wID0+IHRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wocHJvcCksXG4gICAgICBrZWVwRGlyZWN0aW9uOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgbmF2aWdhYmxlSGVhZGVycyA9IHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycztcbiAgICBjb25zdCB0YWJsZVBhcmFtcyA9IHtcbiAgICAgIGNvdW50Um93czogdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLFxuICAgICAgY291bnRDb2xzOiB0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksXG4gICAgICBjb3VudFJvd0hlYWRlcnM6IG5hdmlnYWJsZUhlYWRlcnMgPyB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkgOiAwLFxuICAgICAgY291bnRDb2xIZWFkZXJzOiBuYXZpZ2FibGVIZWFkZXJzID8gdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpIDogMFxuICAgIH07XG5cbiAgICAvLyBDaGVjayBpZiBldmVyeSBsYXllciBvZiB0aGUgY29vcmRpbmF0ZXMgYXJlIHZhbGlkLlxuICAgIGNvbnN0IGlzVmFsaWQgPSAhc2VsZWN0aW9uUmFuZ2VzLnNvbWUoc2VsZWN0aW9uID0+IHtcbiAgICAgIGNvbnN0IGNlbGxSYW5nZSA9IHNlbGVjdGlvblNjaGVtYU5vcm1hbGl6ZXIoc2VsZWN0aW9uKTtcbiAgICAgIGNvbnN0IHJhbmdlVmFsaWRpdHkgPSBjZWxsUmFuZ2UuaXNWYWxpZCh0YWJsZVBhcmFtcyk7XG4gICAgICByZXR1cm4gIShyYW5nZVZhbGlkaXR5ICYmICFjZWxsUmFuZ2UuY29udGFpbnNIZWFkZXJzKCkgfHwgcmFuZ2VWYWxpZGl0eSAmJiBjZWxsUmFuZ2UuY29udGFpbnNIZWFkZXJzKCkgJiYgY2VsbFJhbmdlLmlzU2luZ2xlSGVhZGVyKCkpO1xuICAgIH0pO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKHNlbGVjdGlvblJhbmdlcy5sZW5ndGgpO1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHNlbGVjdGlvblJhbmdlcywgc2VsZWN0aW9uID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGZyb20sXG4gICAgICAgICAgdG9cbiAgICAgICAgfSA9IHNlbGVjdGlvblNjaGVtYU5vcm1hbGl6ZXIoc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5zZXRSYW5nZVN0YXJ0T25seShmcm9tLmNsb25lKCksIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zZXRSYW5nZUVuZCh0by5jbG9uZSgpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGNvbHVtbiBzcGVjaWZpZWQgYnkgYHN0YXJ0Q29sdW1uYCB2aXN1YWwgaW5kZXggb3IgY29sdW1uIHByb3BlcnR5IG9yIGEgcmFuZ2Ugb2YgY29sdW1ucyBmaW5pc2hpbmcgYXRcbiAgICogYGVuZENvbHVtbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gc3RhcnRDb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleCBvciBjb2x1bW4gcHJvcGVydHkgZnJvbSB3aGljaCB0aGUgc2VsZWN0aW9uIHN0YXJ0cy5cbiAgICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbZW5kQ29sdW1uXSBWaXN1YWwgY29sdW1uIGluZGV4IG9yIGNvbHVtbiBwcm9wZXJ0eSBmcm9tIHRvIHRoZSBzZWxlY3Rpb24gZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgeyByb3c6IG51bWJlciwgY29sOiBudW1iZXIgfX0gW2ZvY3VzUG9zaXRpb249MF0gVGhlIGFyZ3VtZW50IGFsbG93cyBjaGFuZ2luZyB0aGUgY2VsbC9oZWFkZXIgZm9jdXNcbiAgICogcG9zaXRpb24uIFRoZSB2YWx1ZSBjYW4gdGFrZSB2aXN1YWwgcm93IGluZGV4IGZyb20gLU4gdG8gTiwgd2hlcmUgbmVnYXRpdmUgdmFsdWVzIHBvaW50IHRvIHRoZSBoZWFkZXJzIGFuZCBwb3NpdGl2ZVxuICAgKiB2YWx1ZXMgcG9pbnQgdG8gdGhlIGNlbGwgcmFuZ2UuIEFuIG9iamVjdCB3aXRoIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzIGFsc28gY2FuIGJlIHBhc3NlZCB0byBjaGFuZ2UgdGhlIGZvY3VzXG4gICAqIHBvc2l0aW9uIGhvcml6b250YWxseS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHNlbGVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBzZWxlY3RDb2x1bW5zKHN0YXJ0Q29sdW1uKSB7XG4gICAgbGV0IGVuZENvbHVtbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogc3RhcnRDb2x1bW47XG4gICAgbGV0IGZvY3VzUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDA7XG4gICAgY29uc3Qgc3RhcnQgPSB0eXBlb2Ygc3RhcnRDb2x1bW4gPT09ICdzdHJpbmcnID8gdGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChzdGFydENvbHVtbikgOiBzdGFydENvbHVtbjtcbiAgICBjb25zdCBlbmQgPSB0eXBlb2YgZW5kQ29sdW1uID09PSAnc3RyaW5nJyA/IHRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woZW5kQ29sdW1uKSA6IGVuZENvbHVtbjtcbiAgICBjb25zdCBjb3VudFJvd3MgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk7XG4gICAgY29uc3QgY291bnRDb2xzID0gdGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO1xuICAgIGNvbnN0IGNvdW50Q29sSGVhZGVycyA9IHRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJMYXN0SW5kZXggPSBjb3VudENvbEhlYWRlcnMgPT09IDAgPyAwIDogLWNvdW50Q29sSGVhZGVycztcbiAgICBjb25zdCBmcm9tQ29vcmRzID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoY29sdW1uSGVhZGVyTGFzdEluZGV4LCBzdGFydCk7XG4gICAgY29uc3QgdG9Db29yZHMgPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyhjb3VudFJvd3MgLSAxLCBlbmQpO1xuICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGZyb21Db29yZHMsIGZyb21Db29yZHMsIHRvQ29vcmRzKS5pc1ZhbGlkKHtcbiAgICAgIGNvdW50Um93cyxcbiAgICAgIGNvdW50Q29scyxcbiAgICAgIGNvdW50Um93SGVhZGVyczogMCxcbiAgICAgIGNvdW50Q29sSGVhZGVyc1xuICAgIH0pO1xuICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICBsZXQgaGlnaGxpZ2h0Um93ID0gMDtcbiAgICAgIGxldCBoaWdobGlnaHRDb2x1bW4gPSAwO1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoZm9jdXNQb3NpdGlvbiA9PT0gbnVsbCB8fCBmb2N1c1Bvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmb2N1c1Bvc2l0aW9uLnJvdykgJiYgTnVtYmVyLmlzSW50ZWdlcihmb2N1c1Bvc2l0aW9uID09PSBudWxsIHx8IGZvY3VzUG9zaXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZvY3VzUG9zaXRpb24uY29sKSkge1xuICAgICAgICBoaWdobGlnaHRSb3cgPSAoMCwgX251bWJlci5jbGFtcCkoZm9jdXNQb3NpdGlvbi5yb3csIGNvbHVtbkhlYWRlckxhc3RJbmRleCwgY291bnRSb3dzIC0gMSk7XG4gICAgICAgIGhpZ2hsaWdodENvbHVtbiA9ICgwLCBfbnVtYmVyLmNsYW1wKShmb2N1c1Bvc2l0aW9uLmNvbCwgTWF0aC5taW4oc3RhcnQsIGVuZCksIE1hdGgubWF4KHN0YXJ0LCBlbmQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpZ2hsaWdodFJvdyA9ICgwLCBfbnVtYmVyLmNsYW1wKShmb2N1c1Bvc2l0aW9uLCBjb2x1bW5IZWFkZXJMYXN0SW5kZXgsIGNvdW50Um93cyAtIDEpO1xuICAgICAgICBoaWdobGlnaHRDb2x1bW4gPSBzdGFydDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGhpZ2hsaWdodCA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGhpZ2hsaWdodFJvdywgaGlnaGxpZ2h0Q29sdW1uKTtcbiAgICAgIGNvbnN0IGZyb21Sb3cgPSBjb3VudENvbEhlYWRlcnMgPT09IDAgPyAwIDogKDAsIF9udW1iZXIuY2xhbXApKGhpZ2hsaWdodC5yb3csIGNvbHVtbkhlYWRlckxhc3RJbmRleCwgLTEpO1xuICAgICAgY29uc3QgdG9Sb3cgPSBjb3VudFJvd3MgLSAxO1xuICAgICAgY29uc3QgZnJvbSA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGZyb21Sb3csIHN0YXJ0KTtcbiAgICAgIGNvbnN0IHRvID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHModG9Sb3csIGVuZCk7XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZVNlbGVjdENvbHVtbnMnLCBmcm9tLCB0bywgaGlnaGxpZ2h0KTtcblxuICAgICAgLy8gZGlzYWxsb3cgbW9kaWZ5aW5nIHJvdyBheGlzIGZvciB0aGF0IGhvb2tzXG4gICAgICBmcm9tLnJvdyA9IGZyb21Sb3c7XG4gICAgICB0by5yb3cgPSB0b1JvdztcbiAgICAgIHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoZnJvbSwgdW5kZWZpbmVkLCBoaWdobGlnaHQpO1xuICAgICAgdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSk7XG4gICAgICB0aGlzLnNldFJhbmdlRW5kKHRvKTtcbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJTZWxlY3RDb2x1bW5zJywgZnJvbSwgdG8sIGhpZ2hsaWdodCk7XG4gICAgICB0aGlzLmZpbmlzaCgpO1xuICAgIH1cbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3Qgcm93IHNwZWNpZmllZCBieSBgc3RhcnRSb3dgIHZpc3VhbCBpbmRleCBvciBhIHJhbmdlIG9mIHJvd3MgZmluaXNoaW5nIGF0IGBlbmRSb3dgLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRSb3cgVmlzdWFsIHJvdyBpbmRleCBmcm9tIHdoaWNoIHRoZSBzZWxlY3Rpb24gc3RhcnRzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZFJvd10gVmlzdWFsIHJvdyBpbmRleCBmcm9tIHRvIHRoZSBzZWxlY3Rpb24gZmluaXNoZXMuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgeyByb3c6IG51bWJlciwgY29sOiBudW1iZXIgfX0gW2ZvY3VzUG9zaXRpb249MF0gVGhlIGFyZ3VtZW50IGFsbG93cyBjaGFuZ2luZyB0aGUgY2VsbC9oZWFkZXIgZm9jdXNcbiAgICogcG9zaXRpb24uIFRoZSB2YWx1ZSBjYW4gdGFrZSB2aXN1YWwgcm93IGluZGV4IGZyb20gLU4gdG8gTiwgd2hlcmUgbmVnYXRpdmUgdmFsdWVzIHBvaW50IHRvIHRoZSBoZWFkZXJzIGFuZCBwb3NpdGl2ZVxuICAgKiB2YWx1ZXMgcG9pbnQgdG8gdGhlIGNlbGwgcmFuZ2UuIEFuIG9iamVjdCB3aXRoIGByb3dgIGFuZCBgY29sYCBwcm9wZXJ0aWVzIGFsc28gY2FuIGJlIHBhc3NlZCB0byBjaGFuZ2UgdGhlIGZvY3VzXG4gICAqIHBvc2l0aW9uIGhvcml6b250YWxseS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHNlbGVjdGlvbiB3YXMgc3VjY2Vzc2Z1bCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBzZWxlY3RSb3dzKHN0YXJ0Um93KSB7XG4gICAgbGV0IGVuZFJvdyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogc3RhcnRSb3c7XG4gICAgbGV0IGZvY3VzUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IDA7XG4gICAgY29uc3QgY291bnRSb3dzID0gdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO1xuICAgIGNvbnN0IGNvdW50Q29scyA9IHRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtcbiAgICBjb25zdCBjb3VudFJvd0hlYWRlcnMgPSB0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCk7XG4gICAgY29uc3Qgcm93SGVhZGVyTGFzdEluZGV4ID0gY291bnRSb3dIZWFkZXJzID09PSAwID8gMCA6IC1jb3VudFJvd0hlYWRlcnM7XG4gICAgY29uc3QgZnJvbUNvb3JkcyA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHN0YXJ0Um93LCByb3dIZWFkZXJMYXN0SW5kZXgpO1xuICAgIGNvbnN0IHRvQ29vcmRzID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZW5kUm93LCBjb3VudENvbHMgLSAxKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShmcm9tQ29vcmRzLCBmcm9tQ29vcmRzLCB0b0Nvb3JkcykuaXNWYWxpZCh7XG4gICAgICBjb3VudFJvd3MsXG4gICAgICBjb3VudENvbHMsXG4gICAgICBjb3VudFJvd0hlYWRlcnMsXG4gICAgICBjb3VudENvbEhlYWRlcnM6IDBcbiAgICB9KTtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgbGV0IGhpZ2hsaWdodFJvdyA9IDA7XG4gICAgICBsZXQgaGlnaGxpZ2h0Q29sdW1uID0gMDtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGZvY3VzUG9zaXRpb24gPT09IG51bGwgfHwgZm9jdXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogZm9jdXNQb3NpdGlvbi5yb3cpICYmIE51bWJlci5pc0ludGVnZXIoZm9jdXNQb3NpdGlvbiA9PT0gbnVsbCB8fCBmb2N1c1Bvc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmb2N1c1Bvc2l0aW9uLmNvbCkpIHtcbiAgICAgICAgaGlnaGxpZ2h0Um93ID0gKDAsIF9udW1iZXIuY2xhbXApKGZvY3VzUG9zaXRpb24ucm93LCBNYXRoLm1pbihzdGFydFJvdywgZW5kUm93KSwgTWF0aC5tYXgoc3RhcnRSb3csIGVuZFJvdykpO1xuICAgICAgICBoaWdobGlnaHRDb2x1bW4gPSAoMCwgX251bWJlci5jbGFtcCkoZm9jdXNQb3NpdGlvbi5jb2wsIHJvd0hlYWRlckxhc3RJbmRleCwgY291bnRDb2xzIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWdobGlnaHRSb3cgPSBzdGFydFJvdztcbiAgICAgICAgaGlnaGxpZ2h0Q29sdW1uID0gKDAsIF9udW1iZXIuY2xhbXApKGZvY3VzUG9zaXRpb24sIHJvd0hlYWRlckxhc3RJbmRleCwgY291bnRDb2xzIC0gMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBoaWdobGlnaHQgPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoaWdobGlnaHRSb3csIGhpZ2hsaWdodENvbHVtbik7XG4gICAgICBjb25zdCBmcm9tQ29sdW1uID0gY291bnRSb3dIZWFkZXJzID09PSAwID8gMCA6ICgwLCBfbnVtYmVyLmNsYW1wKShoaWdobGlnaHQuY29sLCByb3dIZWFkZXJMYXN0SW5kZXgsIC0xKTtcbiAgICAgIGNvbnN0IHRvQ29sdW1uID0gY291bnRDb2xzIC0gMTtcbiAgICAgIGNvbnN0IGZyb20gPSB0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhzdGFydFJvdywgZnJvbUNvbHVtbik7XG4gICAgICBjb25zdCB0byA9IHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGVuZFJvdywgdG9Db2x1bW4pO1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdiZWZvcmVTZWxlY3RSb3dzJywgZnJvbSwgdG8sIGhpZ2hsaWdodCk7XG5cbiAgICAgIC8vIGRpc2FsbG93IG1vZGlmeWluZyBjb2x1bW4gYXhpcyBmb3IgdGhhdCBob29rc1xuICAgICAgZnJvbS5jb2wgPSBmcm9tQ29sdW1uO1xuICAgICAgdG8uY29sID0gdG9Db2x1bW47XG4gICAgICB0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGZyb20sIHVuZGVmaW5lZCwgaGlnaGxpZ2h0KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpO1xuICAgICAgdGhpcy5zZXRSYW5nZUVuZCh0byk7XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyU2VsZWN0Um93cycsIGZyb20sIHRvLCBoaWdobGlnaHQpO1xuICAgICAgdGhpcy5maW5pc2goKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSB3aG9sZSBzZWxlY3Rpb24gYnkgY2xlYXJpbmcsIHJlYXBwbHlpbmcgYW5kIGNvbW1pdHRpbmcgdGhlIHJlbmRlcmFibGUgc2VsZWN0aW9uIChXYWxrb250YWJsZSBTZWxlY3Rpb24gQVBJKVxuICAgKiBieSB1c2luZyBhbHJlYWR5IGFkZGVkIHZpc3VhbCByYW5nZXMuXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY291bnRSb3dzID0gdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO1xuICAgIGNvbnN0IGNvdW50Q29sdW1ucyA9IHRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtcbiAgICBpZiAoY291bnRSb3dzID09PSAwIHx8IGNvdW50Q29sdW1ucyA9PT0gMCkge1xuICAgICAgdGhpcy5kZXNlbGVjdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJbmRleCh0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpIC0gMSk7XG4gICAgY29uc3Qge1xuICAgICAgZnJvbSxcbiAgICAgIHRvLFxuICAgICAgaGlnaGxpZ2h0XG4gICAgfSA9IHJhbmdlO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBoaWdobGlnaHQuYXNzaWduKHtcbiAgICAgIHJvdzogKDAsIF9udW1iZXIuY2xhbXApKGhpZ2hsaWdodC5yb3csIC1JbmZpbml0eSwgY291bnRSb3dzIC0gMSksXG4gICAgICBjb2w6ICgwLCBfbnVtYmVyLmNsYW1wKShoaWdobGlnaHQuY29sLCAtSW5maW5pdHksIGNvdW50Q29sdW1ucyAtIDEpXG4gICAgfSk7XG4gICAgZnJvbS5hc3NpZ24oe1xuICAgICAgcm93OiAoMCwgX251bWJlci5jbGFtcCkoZnJvbS5yb3csIC1JbmZpbml0eSwgY291bnRSb3dzIC0gMSksXG4gICAgICBjb2w6ICgwLCBfbnVtYmVyLmNsYW1wKShmcm9tLmNvbCwgLUluZmluaXR5LCBjb3VudENvbHVtbnMgLSAxKVxuICAgIH0pO1xuICAgIHRvLmFzc2lnbih7XG4gICAgICByb3c6ICgwLCBfbnVtYmVyLmNsYW1wKSh0by5yb3csIDAsIGNvdW50Um93cyAtIDEpLFxuICAgICAgY29sOiAoMCwgX251bWJlci5jbGFtcCkodG8uY29sLCAwLCBjb3VudENvbHVtbnMgLSAxKVxuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZS5yYW5nZXMucHVzaChyYW5nZSk7XG4gICAgdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5hZGQoaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChyYW5nZSk7XG4gICAgdGhpcy5hcHBseUFuZENvbW1pdChyYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSB3aG9sZSBzZWxlY3Rpb24gYnkgcmVjb21taXR0aW5nIChyZWNhbGN1bGF0aW5nIHZpc3VhbCBpbmRleGVzIHRvIHJlbmRlcmFibGUgb25lcykgdGhlIHJlbmRlcmFibGUgc2VsZWN0aW9uXG4gICAqIHRoYXQgd2FzIGFscmVhZHkgYWRkZWQuXG4gICAqL1xuICBjb21taXQoKSB7XG4gICAgY29uc3QgY3VzdG9tU2VsZWN0aW9ucyA9IHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKTtcbiAgICBjdXN0b21TZWxlY3Rpb25zLmZvckVhY2goY3VzdG9tU2VsZWN0aW9uID0+IHtcbiAgICAgIGN1c3RvbVNlbGVjdGlvbi5jb21taXQoKTtcbiAgICB9KTtcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZvY3VzSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKTtcbiAgICBjb25zdCBjdXJyZW50TGF5ZXIgPSB0aGlzLmdldExheWVyTGV2ZWwoKTtcbiAgICBmb2N1c0hpZ2hsaWdodC5jb21taXQoKS5zeW5jV2l0aCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpKTtcblxuICAgIC8vIFJld3JpdGluZyByZW5kZXJlZCByYW5nZXMgZ29pbmcgdGhyb3VnaCBhbGwgbGF5ZXJzLlxuICAgIGZvciAobGV0IGxheWVyTGV2ZWwgPSAwOyBsYXllckxldmVsIDwgdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKTsgbGF5ZXJMZXZlbCArPSAxKSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGxheWVyTGV2ZWwpO1xuICAgICAgY29uc3QgYXJlYUhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKTtcbiAgICAgIGNvbnN0IGFyZWFMYXllcmVkSGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKTtcbiAgICAgIGNvbnN0IHJvd0hlYWRlckhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpO1xuICAgICAgY29uc3QgY29sdW1uSGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVhZGVyKCk7XG4gICAgICBjb25zdCBhY3RpdmVSb3dIZWFkZXJIaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKTtcbiAgICAgIGNvbnN0IGFjdGl2ZUNvbHVtbkhlYWRlckhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpO1xuICAgICAgY29uc3QgYWN0aXZlQ29ybmVySGVhZGVySGlnaGxpZ2h0ID0gdGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCk7XG4gICAgICBjb25zdCByb3dIaWdobGlnaHQgPSB0aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIaWdobGlnaHQoKTtcbiAgICAgIGNvbnN0IGNvbHVtbkhpZ2hsaWdodCA9IHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO1xuICAgICAgYXJlYUhpZ2hsaWdodC5jb21taXQoKTtcbiAgICAgIGFyZWFMYXllcmVkSGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgcm93SGVhZGVySGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgY29sdW1uSGVhZGVySGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgYWN0aXZlUm93SGVhZGVySGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgYWN0aXZlQ29sdW1uSGVhZGVySGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgYWN0aXZlQ29ybmVySGVhZGVySGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgcm93SGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgICAgY29sdW1uSGlnaGxpZ2h0LmNvbW1pdCgpO1xuICAgIH1cblxuICAgIC8vIFJldmVydGluZyBzdGFydGluZyBsYXllciBmb3IgdGhlIEhpZ2hsaWdodC5cbiAgICB0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGN1cnJlbnRMYXllcik7XG4gIH1cbn1cbigwLCBfb2JqZWN0Lm1peGluKShTZWxlY3Rpb24sIF9sb2NhbEhvb2tzLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gU2VsZWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9sb2NhbEhvb2tzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi8uLi9taXhpbnMvbG9jYWxIb29rc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKG9iaiwgcHJpdmF0ZVNldCkgeyBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVTZXQpOyBwcml2YXRlU2V0LmFkZChvYmopOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBUaGUgVHJhbnNmb3JtYXRpb24gY2xhc3MgaW1wbGVtZW50cyBhbGdvcml0aG1zIGZvciB0cmFuc2Zvcm1pbmcgY29vcmRpbmF0ZXMgYmFzZWQgb24gY3VycmVudCBzZXR0aW5nc1xuICogcGFzc2VkIHRvIHRoZSBIYW5kc29udGFibGUuIFRoZSBjbGFzcyBwZXJmb3JtcyB0aGUgY2FsY3VsYXRpb25zIGJhc2VkIG9uIHRoZSByZW5kZXJhYmxlIGluZGV4ZXMuXG4gKlxuICogVHJhbnNmb3JtYXRpb24gaXMgYWx3YXlzIGFwcGxpZWQgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSBjbGFzcyBvcGVyYXRlcyBvbiBhIHRhYmxlIHNpemUgZGVmaW5lZCBieSB0aGUgcmVuZGVyYWJsZSBpbmRleGVzLiBJZiB0aGUgYG5hdmlnYWJsZUhlYWRlcnNgXG4gKiBvcHRpb24gaXMgZW5hYmxlZCwgdGhlIHRhYmxlIHNpemUgaXMgaW5jcmVhc2VkIGJ5IHRoZSBudW1iZXIgb2Ygcm93IGFuZC9vciBjb2x1bW4gaGVhZGVycy5cbiAqIEJlY2F1c2UgdGhlIGhlYWRlcnMgYXJlIHRyZWF0ZWQgYXMgY2VsbHMgYXMgcGFydCBvZiB0aGUgdGFibGUgc2l6ZSAoaW5kZXhlcyBhbHdheXMgZ28gZnJvbSAwIHRvIE4pLFxuICogdGhlIGFsZ29yaXRobSBjYW4gYmUgd3JpdHRlbiBhcyBzaW1wbHkgYXMgcG9zc2libGUgKHdpdGhvdXQgbmV3IGlmJ3MgdGhhdCBkaXN0aW5ndWlzaCB0aGUgaGVhZGVyc1xuICogbG9naWMpLlxuICpcbiAqIEBjbGFzcyBUcmFuc2Zvcm1hdGlvblxuICogQHV0aWxcbiAqL1xudmFyIF9yYW5nZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9vcHRpb25zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX29mZnNldCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9UcmFuc2Zvcm1hdGlvbl9icmFuZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuY2xhc3MgVHJhbnNmb3JtYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyYW5nZSwgb3B0aW9ucykge1xuICAgIC8qKlxuICAgICAqIENsYW1wcyB0aGUgY29vcmRzIHRvIG1ha2Ugc3VyZSB0aGV5IHBvaW50cyB0byB0aGUgY2VsbCAob3IgaGVhZGVyKSBpbiB0aGUgdGFibGUgcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NlbGxDb29yZHN9IHplcm9CYXNlZENvb3JkcyBUaGUgY29vcmRzIG9iamVjdCB0byBjbGFtcC5cbiAgICAgKiBAcmV0dXJucyB7e3Jvd0RpcjogMXwwfC0xLCBjb2xEaXI6IDF8MHwtMX19XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9UcmFuc2Zvcm1hdGlvbl9icmFuZCk7XG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgdGhlIFNlbGVjdGlvblJhbmdlLCBob2xkZXIgZm9yIHZpc3VhbCBjb29yZGluYXRlcyBhcHBsaWVkIHRvIHRoZSB0YWJsZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtTZWxlY3Rpb25SYW5nZX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcmFuZ2UsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogQWRkaXRpb25hbCBvcHRpb25zIHdoaWNoIGRlZmluZSB0aGUgc3RhdGUgb2YgdGhlIHNldHRpbmdzIHdoaWNoIGNhbiBpbmZlciB0cmFuc2Zvcm1hdGlvbiBhbmRcbiAgICAgKiBnaXZlIHRoZSBwb3NzaWJpbGl0eSB0byB0cmFuc2xhdGUgaW5kZXhlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX29wdGlvbnMsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogSW5jcmVhc2VzIHRoZSB0YWJsZSBzaXplIGJ5IGFwcGx5aW5nIHRoZSBvZmZzZXRzLiBUaGUgb3B0aW9uIGlzIHVzZWQgYnkgdGhlIGBuYXZpZ2FibGVIZWFkZXJzYFxuICAgICAqIG9wdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHt7IHg6IG51bWJlciwgeTogbnVtYmVyIH19XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX29mZnNldCwge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9KTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3JhbmdlLCB0aGlzLCByYW5nZSk7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9vcHRpb25zLCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGNlbGwgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2VsbCAoaWYgcG9zc2libGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93RGVsdGEgUm93cyBudW1iZXIgdG8gbW92ZSwgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBuZWdhdGl2ZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xEZWx0YSBDb2x1bW5zIG51bWJlciB0byBtb3ZlLCB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIG5lZ2F0aXZlIG51bWJlci5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY3JlYXRlTWlzc2luZ1JlY29yZHM9ZmFsc2VdIElmIGB0cnVlYCB0aGUgbmV3IHJvd3MvY29sdW1ucyB3aWxsIGJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LiBPdGhlcndpc2UsIHJvdy9jb2x1bW4gd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNyZWF0ZWQgYWNjb3JkaW5nIHRvIGBtaW5TcGFyZVJvd3MvbWluU3BhcmVDb2xzYCBzZXR0aW5ncyBvZiBIYW5kc29udGFibGUuXG4gICAqIEByZXR1cm5zIHtDZWxsQ29vcmRzfSBWaXN1YWwgY29vcmRpbmF0ZXMgYWZ0ZXIgdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICB0cmFuc2Zvcm1TdGFydChyb3dEZWx0YSwgY29sRGVsdGEpIHtcbiAgICBsZXQgY3JlYXRlTWlzc2luZ1JlY29yZHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHJvd0RlbHRhLCBjb2xEZWx0YSk7XG4gICAgbGV0IHZpc3VhbENvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcmFuZ2UsIHRoaXMpLmN1cnJlbnQoKS5oaWdobGlnaHQ7XG4gICAgY29uc3QgaGlnaGxpZ2h0UmVuZGVyYWJsZUNvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHZpc3VhbENvb3Jkcyk7XG4gICAgbGV0IHJvd1RyYW5zZm9ybURpciA9IDA7XG4gICAgbGV0IGNvbFRyYW5zZm9ybURpciA9IDA7XG4gICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdiZWZvcmVUcmFuc2Zvcm1TdGFydCcsIGRlbHRhKTtcbiAgICBpZiAoaGlnaGxpZ2h0UmVuZGVyYWJsZUNvb3Jkcy5yb3cgIT09IG51bGwgJiYgaGlnaGxpZ2h0UmVuZGVyYWJsZUNvb3Jkcy5jb2wgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX2dldFRhYmxlU2l6ZSkuY2FsbCh0aGlzKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcm93LFxuICAgICAgICBjb2xcbiAgICAgIH0gPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF92aXN1YWxUb1plcm9CYXNlZENvb3JkcykuY2FsbCh0aGlzLCB2aXN1YWxDb29yZHMpO1xuICAgICAgY29uc3QgZml4ZWRSb3dzQm90dG9tID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5maXhlZFJvd3NCb3R0b20oKTtcbiAgICAgIGNvbnN0IG1pblNwYXJlUm93cyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykubWluU3BhcmVSb3dzKCk7XG4gICAgICBjb25zdCBtaW5TcGFyZUNvbHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpLm1pblNwYXJlQ29scygpO1xuICAgICAgY29uc3QgYXV0b1dyYXBSb3cgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpLmF1dG9XcmFwUm93KCk7XG4gICAgICBjb25zdCBhdXRvV3JhcENvbCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuYXV0b1dyYXBDb2woKTtcbiAgICAgIGNvbnN0IHplcm9CYXNlZENvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyhyb3cgKyBkZWx0YS5yb3csIGNvbCArIGRlbHRhLmNvbCk7XG4gICAgICBpZiAoemVyb0Jhc2VkQ29vcmRzLnJvdyA+PSBoZWlnaHQpIHtcbiAgICAgICAgY29uc3QgaXNBY3Rpb25JbnRlcnJ1cHRlZCA9ICgwLCBfb2JqZWN0LmNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcikoY3JlYXRlTWlzc2luZ1JlY29yZHMgJiYgbWluU3BhcmVSb3dzID4gMCAmJiBmaXhlZFJvd3NCb3R0b20gPT09IDApO1xuICAgICAgICBjb25zdCBuZXh0Q29sdW1uID0gemVyb0Jhc2VkQ29vcmRzLmNvbCArIDE7XG4gICAgICAgIGNvbnN0IG5ld0Nvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh6ZXJvQmFzZWRDb29yZHMucm93IC0gaGVpZ2h0LCBuZXh0Q29sdW1uID49IHdpZHRoID8gbmV4dENvbHVtbiAtIHdpZHRoIDogbmV4dENvbHVtbik7XG4gICAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYmVmb3JlQ29sdW1uV3JhcCcsIGlzQWN0aW9uSW50ZXJydXB0ZWQsIF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX3plcm9CYXNlZFRvVmlzdWFsQ29vcmRzKS5jYWxsKHRoaXMsIG5ld0Nvb3JkcyksIG5leHRDb2x1bW4gPj0gd2lkdGgpO1xuICAgICAgICBpZiAoaXNBY3Rpb25JbnRlcnJ1cHRlZC52YWx1ZSkge1xuICAgICAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnaW5zZXJ0Um93UmVxdWlyZScsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChhdXRvV3JhcENvbCkge1xuICAgICAgICAgIHplcm9CYXNlZENvb3Jkcy5hc3NpZ24obmV3Q29vcmRzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh6ZXJvQmFzZWRDb29yZHMucm93IDwgMCkge1xuICAgICAgICBjb25zdCBpc0FjdGlvbkludGVycnVwdGVkID0gKDAsIF9vYmplY3QuY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyKShhdXRvV3JhcENvbCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29sdW1uID0gemVyb0Jhc2VkQ29vcmRzLmNvbCAtIDE7XG4gICAgICAgIGNvbnN0IG5ld0Nvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhoZWlnaHQgKyB6ZXJvQmFzZWRDb29yZHMucm93LCBwcmV2aW91c0NvbHVtbiA8IDAgPyB3aWR0aCArIHByZXZpb3VzQ29sdW1uIDogcHJldmlvdXNDb2x1bW4pO1xuICAgICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZUNvbHVtbldyYXAnLCBpc0FjdGlvbkludGVycnVwdGVkLCBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF96ZXJvQmFzZWRUb1Zpc3VhbENvb3JkcykuY2FsbCh0aGlzLCBuZXdDb29yZHMpLCBwcmV2aW91c0NvbHVtbiA8IDApO1xuICAgICAgICBpZiAoYXV0b1dyYXBDb2wpIHtcbiAgICAgICAgICB6ZXJvQmFzZWRDb29yZHMuYXNzaWduKG5ld0Nvb3Jkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh6ZXJvQmFzZWRDb29yZHMuY29sID49IHdpZHRoKSB7XG4gICAgICAgIGNvbnN0IGlzQWN0aW9uSW50ZXJydXB0ZWQgPSAoMCwgX29iamVjdC5jcmVhdGVPYmplY3RQcm9wTGlzdGVuZXIpKGNyZWF0ZU1pc3NpbmdSZWNvcmRzICYmIG1pblNwYXJlQ29scyA+IDApO1xuICAgICAgICBjb25zdCBuZXh0Um93ID0gemVyb0Jhc2VkQ29vcmRzLnJvdyArIDE7XG4gICAgICAgIGNvbnN0IG5ld0Nvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhuZXh0Um93ID49IGhlaWdodCA/IG5leHRSb3cgLSBoZWlnaHQgOiBuZXh0Um93LCB6ZXJvQmFzZWRDb29yZHMuY29sIC0gd2lkdGgpO1xuICAgICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2JlZm9yZVJvd1dyYXAnLCBpc0FjdGlvbkludGVycnVwdGVkLCBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF96ZXJvQmFzZWRUb1Zpc3VhbENvb3JkcykuY2FsbCh0aGlzLCBuZXdDb29yZHMpLCBuZXh0Um93ID49IGhlaWdodCk7XG4gICAgICAgIGlmIChpc0FjdGlvbkludGVycnVwdGVkLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdpbnNlcnRDb2xSZXF1aXJlJywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGF1dG9XcmFwUm93KSB7XG4gICAgICAgICAgemVyb0Jhc2VkQ29vcmRzLmFzc2lnbihuZXdDb29yZHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHplcm9CYXNlZENvb3Jkcy5jb2wgPCAwKSB7XG4gICAgICAgIGNvbnN0IGlzQWN0aW9uSW50ZXJydXB0ZWQgPSAoMCwgX29iamVjdC5jcmVhdGVPYmplY3RQcm9wTGlzdGVuZXIpKGF1dG9XcmFwUm93KTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNSb3cgPSB6ZXJvQmFzZWRDb29yZHMucm93IC0gMTtcbiAgICAgICAgY29uc3QgbmV3Q29vcmRzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHByZXZpb3VzUm93IDwgMCA/IGhlaWdodCArIHByZXZpb3VzUm93IDogcHJldmlvdXNSb3csIHdpZHRoICsgemVyb0Jhc2VkQ29vcmRzLmNvbCk7XG4gICAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnYmVmb3JlUm93V3JhcCcsIGlzQWN0aW9uSW50ZXJydXB0ZWQsIF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX3plcm9CYXNlZFRvVmlzdWFsQ29vcmRzKS5jYWxsKHRoaXMsIG5ld0Nvb3JkcyksIHByZXZpb3VzUm93IDwgMCk7XG4gICAgICAgIGlmIChhdXRvV3JhcFJvdykge1xuICAgICAgICAgIHplcm9CYXNlZENvb3Jkcy5hc3NpZ24obmV3Q29vcmRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICByb3dEaXIsXG4gICAgICAgIGNvbERpclxuICAgICAgfSA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX2NsYW1wQ29vcmRzKS5jYWxsKHRoaXMsIHplcm9CYXNlZENvb3Jkcyk7XG4gICAgICByb3dUcmFuc2Zvcm1EaXIgPSByb3dEaXI7XG4gICAgICBjb2xUcmFuc2Zvcm1EaXIgPSBjb2xEaXI7XG4gICAgICB2aXN1YWxDb29yZHMgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF96ZXJvQmFzZWRUb1Zpc3VhbENvb3JkcykuY2FsbCh0aGlzLCB6ZXJvQmFzZWRDb29yZHMpO1xuICAgIH1cbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2FmdGVyVHJhbnNmb3JtU3RhcnQnLCB2aXN1YWxDb29yZHMsIHJvd1RyYW5zZm9ybURpciwgY29sVHJhbnNmb3JtRGlyKTtcbiAgICByZXR1cm4gdmlzdWFsQ29vcmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgc2VsZWN0aW9uIGVuZCBjZWxsIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBlbmQgY2VsbCAoaWYgcG9zc2libGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93RGVsdGEgUm93cyBudW1iZXIgdG8gbW92ZSwgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBuZWdhdGl2ZSBudW1iZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xEZWx0YSBDb2x1bW5zIG51bWJlciB0byBtb3ZlLCB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIG5lZ2F0aXZlIG51bWJlci5cbiAgICogQHJldHVybnMge0NlbGxDb29yZHN9IFZpc3VhbCBjb29yZGluYXRlcyBhZnRlciB0cmFuc2Zvcm1hdGlvbi5cbiAgICovXG4gIHRyYW5zZm9ybUVuZChyb3dEZWx0YSwgY29sRGVsdGEpIHtcbiAgICBjb25zdCBkZWx0YSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyhyb3dEZWx0YSwgY29sRGVsdGEpO1xuICAgIGNvbnN0IGNlbGxSYW5nZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcmFuZ2UsIHRoaXMpLmN1cnJlbnQoKTtcbiAgICBjb25zdCBoaWdobGlnaHRSZW5kZXJhYmxlQ29vcmRzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoY2VsbFJhbmdlLmhpZ2hsaWdodCk7XG4gICAgY29uc3QgdG9Sb3cgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF9maW5kRmlyc3ROb25IaWRkZW5aZXJvQmFzZWRSb3cpLmNhbGwodGhpcywgY2VsbFJhbmdlLnRvLnJvdywgY2VsbFJhbmdlLmZyb20ucm93KTtcbiAgICBjb25zdCB0b0NvbHVtbiA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX2ZpbmRGaXJzdE5vbkhpZGRlblplcm9CYXNlZENvbHVtbikuY2FsbCh0aGlzLCBjZWxsUmFuZ2UudG8uY29sLCBjZWxsUmFuZ2UuZnJvbS5jb2wpO1xuICAgIGNvbnN0IHZpc3VhbENvb3JkcyA9IGNlbGxSYW5nZS50by5jbG9uZSgpO1xuICAgIGxldCByb3dUcmFuc2Zvcm1EaXIgPSAwO1xuICAgIGxldCBjb2xUcmFuc2Zvcm1EaXIgPSAwO1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYmVmb3JlVHJhbnNmb3JtRW5kJywgZGVsdGEpO1xuICAgIGlmIChoaWdobGlnaHRSZW5kZXJhYmxlQ29vcmRzLnJvdyAhPT0gbnVsbCAmJiBoaWdobGlnaHRSZW5kZXJhYmxlQ29vcmRzLmNvbCAhPT0gbnVsbCAmJiB0b1JvdyAhPT0gbnVsbCAmJiB0b0NvbHVtbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByb3c6IGhpZ2hsaWdodFJvdyxcbiAgICAgICAgY29sOiBoaWdobGlnaHRDb2x1bW5cbiAgICAgIH0gPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF92aXN1YWxUb1plcm9CYXNlZENvb3JkcykuY2FsbCh0aGlzLCBjZWxsUmFuZ2UuaGlnaGxpZ2h0KTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0b1JvdyArIGRlbHRhLnJvdywgdG9Db2x1bW4gKyBkZWx0YS5jb2wpO1xuICAgICAgY29uc3QgdG9wU3RhcnRDb3JuZXIgPSBjZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IHRvcEVuZENvcm5lciA9IGNlbGxSYW5nZS5nZXRUb3BFbmRDb3JuZXIoKTtcbiAgICAgIGNvbnN0IGJvdHRvbUVuZENvcm5lciA9IGNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTtcbiAgICAgIGlmIChkZWx0YS5jb2wgPCAwICYmIHRvQ29sdW1uID49IGhpZ2hsaWdodENvbHVtbiAmJiBjb29yZHMuY29sIDwgaGlnaGxpZ2h0Q29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtblJlc3REZWx0YSA9IGNvb3Jkcy5jb2wgLSBoaWdobGlnaHRDb2x1bW47XG4gICAgICAgIGNvb3Jkcy5jb2wgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF9maW5kRmlyc3ROb25IaWRkZW5aZXJvQmFzZWRDb2x1bW4pLmNhbGwodGhpcywgdG9wU3RhcnRDb3JuZXIuY29sLCB0b3BFbmRDb3JuZXIuY29sKSArIGNvbHVtblJlc3REZWx0YTtcbiAgICAgIH0gZWxzZSBpZiAoZGVsdGEuY29sID4gMCAmJiB0b0NvbHVtbiA8PSBoaWdobGlnaHRDb2x1bW4gJiYgY29vcmRzLmNvbCA+IGhpZ2hsaWdodENvbHVtbikge1xuICAgICAgICBjb25zdCBlbmRDb2x1bW5JbmRleCA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX2ZpbmRGaXJzdE5vbkhpZGRlblplcm9CYXNlZENvbHVtbikuY2FsbCh0aGlzLCB0b3BFbmRDb3JuZXIuY29sLCB0b3BTdGFydENvcm5lci5jb2wpO1xuICAgICAgICBjb25zdCBjb2x1bW5SZXN0RGVsdGEgPSBNYXRoLm1heChjb29yZHMuY29sIC0gZW5kQ29sdW1uSW5kZXgsIDEpO1xuICAgICAgICBjb29yZHMuY29sID0gZW5kQ29sdW1uSW5kZXggKyBjb2x1bW5SZXN0RGVsdGE7XG4gICAgICB9XG4gICAgICBpZiAoZGVsdGEucm93IDwgMCAmJiB0b1JvdyA+PSBoaWdobGlnaHRSb3cgJiYgY29vcmRzLnJvdyA8IGhpZ2hsaWdodFJvdykge1xuICAgICAgICBjb25zdCByb3dSZXN0RGVsdGEgPSBjb29yZHMucm93IC0gaGlnaGxpZ2h0Um93O1xuICAgICAgICBjb29yZHMucm93ID0gX2Fzc2VydENsYXNzQnJhbmQoX1RyYW5zZm9ybWF0aW9uX2JyYW5kLCB0aGlzLCBfZmluZEZpcnN0Tm9uSGlkZGVuWmVyb0Jhc2VkUm93KS5jYWxsKHRoaXMsIHRvcFN0YXJ0Q29ybmVyLnJvdywgYm90dG9tRW5kQ29ybmVyLnJvdykgKyByb3dSZXN0RGVsdGE7XG4gICAgICB9IGVsc2UgaWYgKGRlbHRhLnJvdyA+IDAgJiYgdG9Sb3cgPD0gaGlnaGxpZ2h0Um93ICYmIGNvb3Jkcy5yb3cgPiBoaWdobGlnaHRSb3cpIHtcbiAgICAgICAgY29uc3QgYm90dG9tUm93SW5kZXggPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF9maW5kRmlyc3ROb25IaWRkZW5aZXJvQmFzZWRSb3cpLmNhbGwodGhpcywgYm90dG9tRW5kQ29ybmVyLnJvdywgdG9wU3RhcnRDb3JuZXIucm93KTtcbiAgICAgICAgY29uc3Qgcm93UmVzdERlbHRhID0gTWF0aC5tYXgoY29vcmRzLnJvdyAtIGJvdHRvbVJvd0luZGV4LCAxKTtcbiAgICAgICAgY29vcmRzLnJvdyA9IGJvdHRvbVJvd0luZGV4ICsgcm93UmVzdERlbHRhO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICByb3dEaXIsXG4gICAgICAgIGNvbERpclxuICAgICAgfSA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UcmFuc2Zvcm1hdGlvbl9icmFuZCwgdGhpcywgX2NsYW1wQ29vcmRzKS5jYWxsKHRoaXMsIGNvb3Jkcyk7XG4gICAgICByb3dUcmFuc2Zvcm1EaXIgPSByb3dEaXI7XG4gICAgICBjb2xUcmFuc2Zvcm1EaXIgPSBjb2xEaXI7XG4gICAgICBjb25zdCBuZXdWaXN1YWxDb29yZHMgPSBfYXNzZXJ0Q2xhc3NCcmFuZChfVHJhbnNmb3JtYXRpb25fYnJhbmQsIHRoaXMsIF96ZXJvQmFzZWRUb1Zpc3VhbENvb3JkcykuY2FsbCh0aGlzLCBjb29yZHMpO1xuICAgICAgaWYgKGRlbHRhLnJvdyA9PT0gMCAmJiBkZWx0YS5jb2wgIT09IDApIHtcbiAgICAgICAgdmlzdWFsQ29vcmRzLmNvbCA9IG5ld1Zpc3VhbENvb3Jkcy5jb2w7XG4gICAgICB9IGVsc2UgaWYgKGRlbHRhLnJvdyAhPT0gMCAmJiBkZWx0YS5jb2wgPT09IDApIHtcbiAgICAgICAgdmlzdWFsQ29vcmRzLnJvdyA9IG5ld1Zpc3VhbENvb3Jkcy5yb3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2aXN1YWxDb29yZHMucm93ID0gbmV3VmlzdWFsQ29vcmRzLnJvdztcbiAgICAgICAgdmlzdWFsQ29vcmRzLmNvbCA9IG5ld1Zpc3VhbENvb3Jkcy5jb2w7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucnVuTG9jYWxIb29rcygnYWZ0ZXJUcmFuc2Zvcm1FbmQnLCB2aXN1YWxDb29yZHMsIHJvd1RyYW5zZm9ybURpciwgY29sVHJhbnNmb3JtRGlyKTtcbiAgICByZXR1cm4gdmlzdWFsQ29vcmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFkZGl0aW9uYWwgb2Zmc2V0IGluIHRhYmxlIHNpemUgdGhhdCBtYXkgb2NjdXIgd2hlbiB0aGUgYG5hdmlnYWJsZUhlYWRlcnNgIG9wdGlvblxuICAgKiBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3t4OiBudW1iZXIsIHk6IG51bWJlcn19IG9mZnNldCBPZmZzZXQgYXMgeCBhbmQgeSBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgc2V0T2Zmc2V0U2l6ZShfcmVmKSB7XG4gICAgbGV0IHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSA9IF9yZWY7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9vZmZzZXQsIHRoaXMsIHtcbiAgICAgIHgsXG4gICAgICB5XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9jbGFtcENvb3Jkcyh6ZXJvQmFzZWRDb29yZHMpIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gX2Fzc2VydENsYXNzQnJhbmQoX1RyYW5zZm9ybWF0aW9uX2JyYW5kLCB0aGlzLCBfZ2V0VGFibGVTaXplKS5jYWxsKHRoaXMpO1xuICBsZXQgcm93RGlyID0gMDtcbiAgbGV0IGNvbERpciA9IDA7XG4gIGlmICh6ZXJvQmFzZWRDb29yZHMucm93IDwgMCkge1xuICAgIHJvd0RpciA9IC0xO1xuICAgIHplcm9CYXNlZENvb3Jkcy5yb3cgPSAwO1xuICB9IGVsc2UgaWYgKHplcm9CYXNlZENvb3Jkcy5yb3cgPiAwICYmIHplcm9CYXNlZENvb3Jkcy5yb3cgPj0gaGVpZ2h0KSB7XG4gICAgcm93RGlyID0gMTtcbiAgICB6ZXJvQmFzZWRDb29yZHMucm93ID0gaGVpZ2h0IC0gMTtcbiAgfVxuICBpZiAoemVyb0Jhc2VkQ29vcmRzLmNvbCA8IDApIHtcbiAgICBjb2xEaXIgPSAtMTtcbiAgICB6ZXJvQmFzZWRDb29yZHMuY29sID0gMDtcbiAgfSBlbHNlIGlmICh6ZXJvQmFzZWRDb29yZHMuY29sID4gMCAmJiB6ZXJvQmFzZWRDb29yZHMuY29sID49IHdpZHRoKSB7XG4gICAgY29sRGlyID0gMTtcbiAgICB6ZXJvQmFzZWRDb29yZHMuY29sID0gd2lkdGggLSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgcm93RGlyLFxuICAgIGNvbERpclxuICB9O1xufVxuLyoqXG4gKiBHZXRzIHRoZSB0YWJsZSBzaXplIGluIG51bWJlciBvZiByb3dzIHdpdGggaGVhZGVycyBhcyBcImhlaWdodFwiIGFuZCBudW1iZXIgb2YgY29sdW1ucyB3aXRoXG4gKiBoZWFkZXJzIGFzIFwid2lkdGhcIi5cbiAqXG4gKiBAcmV0dXJucyB7e3dpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyfX1cbiAqL1xuZnVuY3Rpb24gX2dldFRhYmxlU2l6ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpLnggKyBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxcbiAgICBoZWlnaHQ6IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb2Zmc2V0LCB0aGlzKS55ICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKClcbiAgfTtcbn1cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IG5vbi1oaWRkZW4gemVyby1iYXNlZCByb3cgaW4gdGhlIHRhYmxlIHJhbmdlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxSb3dGcm9tIFRoZSB2aXN1YWwgcm93IGZyb20gd2hpY2ggdGhlIHNlYXJjaCBzaG91bGQgc3RhcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsUm93VG8gVGhlIHZpc3VhbCByb3cgdG8gd2hpY2ggdGhlIHNlYXJjaCBzaG91bGQgZW5kLlxuICogQHJldHVybnMge251bWJlciB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIF9maW5kRmlyc3ROb25IaWRkZW5aZXJvQmFzZWRSb3codmlzdWFsUm93RnJvbSwgdmlzdWFsUm93VG8pIHtcbiAgY29uc3Qgcm93ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KHZpc3VhbFJvd0Zyb20sIHZpc3VhbFJvd1RvKTtcbiAgaWYgKHJvdyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29mZnNldCwgdGhpcykueSArIHJvdztcbn1cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IG5vbi1oaWRkZW4gemVyby1iYXNlZCBjb2x1bW4gaW4gdGhlIHRhYmxlIHJhbmdlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxDb2x1bW5Gcm9tIFRoZSB2aXN1YWwgY29sdW1uIGZyb20gd2hpY2ggdGhlIHNlYXJjaCBzaG91bGQgc3RhcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsQ29sdW1uVG8gVGhlIHZpc3VhbCBjb2x1bW4gdG8gd2hpY2ggdGhlIHNlYXJjaCBzaG91bGQgZW5kLlxuICogQHJldHVybnMge251bWJlciB8IG51bGx9XG4gKi9cbmZ1bmN0aW9uIF9maW5kRmlyc3ROb25IaWRkZW5aZXJvQmFzZWRDb2x1bW4odmlzdWFsQ29sdW1uRnJvbSwgdmlzdWFsQ29sdW1uVG8pIHtcbiAgY29uc3QgY29sdW1uID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vcHRpb25zLCB0aGlzKS5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKHZpc3VhbENvbHVtbkZyb20sIHZpc3VhbENvbHVtblRvKTtcbiAgaWYgKGNvbHVtbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29mZnNldCwgdGhpcykueCArIGNvbHVtbjtcbn1cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgdmlzdWFsIGNvb3JkaW5hdGVzIHRvIHplcm8tYmFzZWQgb25lcy5cbiAqXG4gKiBAcGFyYW0ge0NlbGxDb29yZHN9IHZpc3VhbENvb3JkcyBUaGUgdmlzdWFsIGNvb3JkcyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gKi9cbmZ1bmN0aW9uIF92aXN1YWxUb1plcm9CYXNlZENvb3Jkcyh2aXN1YWxDb29yZHMpIHtcbiAgY29uc3Qge1xuICAgIHJvdyxcbiAgICBjb2xcbiAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKHZpc3VhbENvb3Jkcyk7XG4gIGlmIChyb3cgPT09IG51bGwgfHwgY29sID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZW5kZXJhYmxlIGNvb3JkcyBhcmUgbm90IHZpc2libGUuJyk7XG4gIH1cbiAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfb3B0aW9ucywgdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhfY2xhc3NQcml2YXRlRmllbGRHZXQoX29mZnNldCwgdGhpcykueSArIHJvdywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpLnggKyBjb2wpO1xufVxuLyoqXG4gKiBUcmFuc2xhdGVzIHRoZSB6ZXJvLWJhc2VkIGNvb3JkaW5hdGVzIHRvIHZpc3VhbCBvbmVzLlxuICpcbiAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gemVyb0Jhc2VkQ29vcmRzIFRoZSBjb29yZGluYXRlcyB0byBwcm9jZXNzLlxuICogQHJldHVybnMge0NlbGxDb29yZHN9XG4gKi9cbmZ1bmN0aW9uIF96ZXJvQmFzZWRUb1Zpc3VhbENvb3Jkcyh6ZXJvQmFzZWRDb29yZHMpIHtcbiAgY29uc3QgY29vcmRzID0gemVyb0Jhc2VkQ29vcmRzLmNsb25lKCk7XG4gIGNvb3Jkcy5jb2wgPSB6ZXJvQmFzZWRDb29yZHMuY29sIC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpLng7XG4gIGNvb3Jkcy5yb3cgPSB6ZXJvQmFzZWRDb29yZHMucm93IC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vZmZzZXQsIHRoaXMpLnk7XG4gIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29wdGlvbnMsIHRoaXMpLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyhjb29yZHMpO1xufVxuKDAsIF9vYmplY3QubWl4aW4pKFRyYW5zZm9ybWF0aW9uLCBfbG9jYWxIb29rcy5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IFRyYW5zZm9ybWF0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZXRlY3RTZWxlY3Rpb25UeXBlID0gZGV0ZWN0U2VsZWN0aW9uVHlwZTtcbmV4cG9ydHMubm9ybWFsaXplU2VsZWN0aW9uRmFjdG9yeSA9IG5vcm1hbGl6ZVNlbGVjdGlvbkZhY3Rvcnk7XG5leHBvcnRzLnRyYW5zZm9ybVNlbGVjdGlvblRvQ29sdW1uRGlzdGFuY2UgPSB0cmFuc2Zvcm1TZWxlY3Rpb25Ub0NvbHVtbkRpc3RhbmNlO1xuZXhwb3J0cy50cmFuc2Zvcm1TZWxlY3Rpb25Ub1Jvd0Rpc3RhbmNlID0gdHJhbnNmb3JtU2VsZWN0aW9uVG9Sb3dEaXN0YW5jZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX3NyYyA9IHJlcXVpcmUoXCIuLy4uLzNyZHBhcnR5L3dhbGtvbnRhYmxlL3NyY1wiKTtcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG5jb25zdCBTRUxFQ1RJT05fVFlQRV9VTlJFQ09HTklaRUQgPSBleHBvcnRzLlNFTEVDVElPTl9UWVBFX1VOUkVDT0dOSVpFRCA9IDA7XG5jb25zdCBTRUxFQ1RJT05fVFlQRV9FTVBUWSA9IGV4cG9ydHMuU0VMRUNUSU9OX1RZUEVfRU1QVFkgPSAxO1xuY29uc3QgU0VMRUNUSU9OX1RZUEVfQVJSQVkgPSBleHBvcnRzLlNFTEVDVElPTl9UWVBFX0FSUkFZID0gMjtcbmNvbnN0IFNFTEVDVElPTl9UWVBFX09CSkVDVCA9IGV4cG9ydHMuU0VMRUNUSU9OX1RZUEVfT0JKRUNUID0gMztcbmNvbnN0IFNFTEVDVElPTl9UWVBFUyA9IGV4cG9ydHMuU0VMRUNUSU9OX1RZUEVTID0gW1NFTEVDVElPTl9UWVBFX09CSkVDVCwgU0VMRUNUSU9OX1RZUEVfQVJSQVldO1xuY29uc3QgQVJSQVlfVFlQRV9QQVRURVJOID0gW1snbnVtYmVyJ10sIFsnbnVtYmVyJywgJ3N0cmluZyddLCBbJ251bWJlcicsICd1bmRlZmluZWQnXSwgWydudW1iZXInLCAnc3RyaW5nJywgJ3VuZGVmaW5lZCddXTtcbmNvbnN0IHJvb3RDYWxsID0gU3ltYm9sKCdyb290Jyk7XG5jb25zdCBjaGlsZENhbGwgPSBTeW1ib2woJ2NoaWxkJyk7XG5cbi8qKlxuICogRGV0ZWN0IHNlbGVjdGlvbiBzY2hlbWEgc3RydWN0dXJlLlxuICpcbiAqIEBwYXJhbSB7Kn0gc2VsZWN0aW9uUmFuZ2VzIFRoZSBzZWxlY3RlZCByYW5nZSBvciBhbmQgYXJyYXkgb2Ygc2VsZWN0ZWQgcmFuZ2VzLiBUaGlzIHR5cGUgb2YgZGF0YSBpcyBwcm9kdWNlZCBieVxuICogYGhvdC5nZXRTZWxlY3RlZCgpYCwgYGhvdC5nZXRTZWxlY3RlZExhc3QoKWAsIGBob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpYFxuICogYW5kIGBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKWAgbWV0aG9kcy5cbiAqIEBwYXJhbSB7c3ltYm9sfSBfY2FsbFN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB3aGljaCBpbmRpY2F0ZXMgc291cmNlIG9mIHRoZSBoZWxwZXIgaW52b2NhdGlvbi5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYSBudW1iZXIgdGhhdCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGV0ZWN0ZWQgc2VsZWN0aW9uIHNjaGVtYS4gSWYgc2VsZWN0aW9uIHNjaGVtYSB0eXBlXG4gKiBpcyB1bnJlY29nbml6ZWQgdGhhbiBpdCByZXR1cm5zIGAwYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0U2VsZWN0aW9uVHlwZShzZWxlY3Rpb25SYW5nZXMpIHtcbiAgbGV0IF9jYWxsU3ltYm9sID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiByb290Q2FsbDtcbiAgaWYgKF9jYWxsU3ltYm9sICE9PSByb290Q2FsbCAmJiBfY2FsbFN5bWJvbCAhPT0gY2hpbGRDYWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uJyk7XG4gIH1cbiAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uUmFuZ2VzKTtcbiAgY29uc3QgaXNSb290Q2FsbCA9IF9jYWxsU3ltYm9sID09PSByb290Q2FsbDtcbiAgbGV0IHJlc3VsdCA9IFNFTEVDVElPTl9UWVBFX1VOUkVDT0dOSVpFRDtcbiAgaWYgKGlzQXJyYXkpIHtcbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBzZWxlY3Rpb25SYW5nZXNbMF07XG4gICAgaWYgKHNlbGVjdGlvblJhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdCA9IFNFTEVDVElPTl9UWVBFX0VNUFRZO1xuICAgIH0gZWxzZSBpZiAoaXNSb290Q2FsbCAmJiBmaXJzdEl0ZW0gaW5zdGFuY2VvZiBfc3JjLkNlbGxSYW5nZSkge1xuICAgICAgcmVzdWx0ID0gU0VMRUNUSU9OX1RZUEVfT0JKRUNUO1xuICAgIH0gZWxzZSBpZiAoaXNSb290Q2FsbCAmJiBBcnJheS5pc0FycmF5KGZpcnN0SXRlbSkpIHtcbiAgICAgIHJlc3VsdCA9IGRldGVjdFNlbGVjdGlvblR5cGUoZmlyc3RJdGVtLCBjaGlsZENhbGwpO1xuICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uUmFuZ2VzLmxlbmd0aCA+PSAyICYmIHNlbGVjdGlvblJhbmdlcy5sZW5ndGggPD0gNCkge1xuICAgICAgY29uc3QgaXNBcnJheVR5cGUgPSAhc2VsZWN0aW9uUmFuZ2VzLnNvbWUoKHZhbHVlLCBpbmRleCkgPT4gIUFSUkFZX1RZUEVfUEFUVEVSTltpbmRleF0uaW5jbHVkZXModHlwZW9mIHZhbHVlKSk7XG4gICAgICBpZiAoaXNBcnJheVR5cGUpIHtcbiAgICAgICAgcmVzdWx0ID0gU0VMRUNUSU9OX1RZUEVfQVJSQVk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiBkZXNpZ25lZCBmb3Igbm9ybWFsaXphdGlvbiBkYXRhIHNjaGVtYSBmcm9tIGRpZmZlcmVudCBkYXRhIHN0cnVjdHVyZXMgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgU2VsZWN0aW9uIHR5cGUgd2hpY2ggd2lsbCBiZSBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBUaGUgbm9ybWFsaXphdGlvbiBvcHRpb25zLlxuICogQHBhcmFtIHtmdW5jdGlvbihudW1iZXIsIG51bWJlcik6IENlbGxDb29yZHN9IG9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBDZWxsQ29vcmRzYCBjbGFzcy5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oQ2VsbENvb3JkcywgQ2VsbENvb3JkcywgQ2VsbENvb3Jkcyk6IENlbGxSYW5nZX0gb3B0aW9ucy5jcmVhdGVDZWxsUmFuZ2UgVGhlIGZhY3RvcnkgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIHRoZSBgQ2VsbFJhbmdlYCBjbGFzcy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMua2VlcERpcmVjdGlvbj1mYWxzZV0gSWYgYHRydWVgLCB0aGUgY29vcmRpbmF0ZXMgd2hpY2ggY29udGFpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCBjZWxscyB3b24ndCBiZSBjaGFuZ2VkLiBPdGhlcndpc2UsIHRoZSBzZWxlY3Rpb24gd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkIHRvIHZhbHVlcyBzdGFydGluZyBmcm9tIHRvcC1sZWZ0IHRvIGJvdHRvbS1yaWdodC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnByb3BUb0NvbF0gUGFzcyB0aGUgY29udmVydGluZyBmdW5jdGlvbiAodXN1YWxseSBgZGF0YW1hcC5wcm9wVG9Db2xgKSBpZiB0aGUgY29sdW1uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgYXMgcHJvcHMgc2hvdWxkIGJlIG5vcm1hbGl6ZWQgdG8gdGhlIG51bWVyaWMgdmFsdWVzLlxuICogQHJldHVybnMge251bWJlcltdfSBSZXR1cm5zIG5vcm1hbGl6ZWQgZGF0YSBhYm91dCBzZWxlY3RlZCByYW5nZSBhcyBhbiBhcnJheSAoYFtyb3dTdGFydCwgY29sdW1uU3RhcnQsIHJvd0VuZCwgY29sdW1uRW5kXWApLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTZWxlY3Rpb25GYWN0b3J5KHR5cGUpIHtcbiAgbGV0IHtcbiAgICBjcmVhdGVDZWxsQ29vcmRzLFxuICAgIGNyZWF0ZUNlbGxSYW5nZSxcbiAgICBrZWVwRGlyZWN0aW9uID0gZmFsc2UsXG4gICAgcHJvcFRvQ29sXG4gIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBpZiAoIVNFTEVDVElPTl9UWVBFUy5pbmNsdWRlcyh0eXBlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuJyk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChzZWxlY3Rpb24pIHtcbiAgICBjb25zdCBpc09iamVjdFR5cGUgPSB0eXBlID09PSBTRUxFQ1RJT05fVFlQRV9PQkpFQ1Q7XG4gICAgbGV0IHJvd1N0YXJ0ID0gaXNPYmplY3RUeXBlID8gc2VsZWN0aW9uLmZyb20ucm93IDogc2VsZWN0aW9uWzBdO1xuICAgIGxldCBjb2x1bW5TdGFydCA9IGlzT2JqZWN0VHlwZSA/IHNlbGVjdGlvbi5mcm9tLmNvbCA6IHNlbGVjdGlvblsxXTtcbiAgICBsZXQgcm93RW5kID0gaXNPYmplY3RUeXBlID8gc2VsZWN0aW9uLnRvLnJvdyA6IHNlbGVjdGlvblsyXTtcbiAgICBsZXQgY29sdW1uRW5kID0gaXNPYmplY3RUeXBlID8gc2VsZWN0aW9uLnRvLmNvbCA6IHNlbGVjdGlvblszXTtcbiAgICBpZiAodHlwZW9mIHByb3BUb0NvbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5TdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sdW1uU3RhcnQgPSBwcm9wVG9Db2woY29sdW1uU3RhcnQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5FbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbHVtbkVuZCA9IHByb3BUb0NvbChjb2x1bW5FbmQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkocm93RW5kKSkge1xuICAgICAgcm93RW5kID0gcm93U3RhcnQ7XG4gICAgfVxuICAgIGlmICgoMCwgX21peGVkLmlzVW5kZWZpbmVkKShjb2x1bW5FbmQpKSB7XG4gICAgICBjb2x1bW5FbmQgPSBjb2x1bW5TdGFydDtcbiAgICB9XG4gICAgaWYgKCFrZWVwRGlyZWN0aW9uKSB7XG4gICAgICBjb25zdCBvcmlnUm93U3RhcnQgPSByb3dTdGFydDtcbiAgICAgIGNvbnN0IG9yaWdDb2x1bW5TdGFydCA9IGNvbHVtblN0YXJ0O1xuICAgICAgY29uc3Qgb3JpZ1Jvd0VuZCA9IHJvd0VuZDtcbiAgICAgIGNvbnN0IG9yaWdDb2x1bW5FbmQgPSBjb2x1bW5FbmQ7XG4gICAgICByb3dTdGFydCA9IE1hdGgubWluKG9yaWdSb3dTdGFydCwgb3JpZ1Jvd0VuZCk7XG4gICAgICBjb2x1bW5TdGFydCA9IE1hdGgubWluKG9yaWdDb2x1bW5TdGFydCwgb3JpZ0NvbHVtbkVuZCk7XG4gICAgICByb3dFbmQgPSBNYXRoLm1heChvcmlnUm93U3RhcnQsIG9yaWdSb3dFbmQpO1xuICAgICAgY29sdW1uRW5kID0gTWF0aC5tYXgob3JpZ0NvbHVtblN0YXJ0LCBvcmlnQ29sdW1uRW5kKTtcbiAgICB9XG4gICAgY29uc3QgZnJvbSA9IGNyZWF0ZUNlbGxDb29yZHMocm93U3RhcnQsIGNvbHVtblN0YXJ0KTtcbiAgICBjb25zdCB0byA9IGNyZWF0ZUNlbGxDb29yZHMocm93RW5kLCBjb2x1bW5FbmQpO1xuICAgIHJldHVybiBjcmVhdGVDZWxsUmFuZ2UoZnJvbSwgZnJvbSwgdG8pO1xuICB9O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRyYW5zZm9ybSBzZWxlY3Rpb24gcmFuZ2VzIChwcm9kdWNlZCBieSBgaG90LmdldFNlbGVjdGVkKClgIGFuZCBgaG90LmdldFNlbGVjdGVkUmFuZ2UoKWApIHRvIG5vcm1hbGl6ZWRcbiAqIGRhdGEgc3RydWN0dXJlLiBJdCBtZXJnZXMgcmVwZWF0ZWQgcmFuZ2VzIGludG8gY29uc2VjdXRpdmUgY29vcmRpbmF0ZXMuIFRoZSByZXR1cm5lZCBzdHJ1Y3R1cmVcbiAqIGNvbnRhaW5zIGFuIGFycmF5IG9mIGFycmF5cy4gVGhlIHNpbmdsZSBpdGVtIGNvbnRhaW5zIGF0IGluZGV4IDAgdmlzdWFsIGNvbHVtbiBpbmRleCBmcm9tIHRoZSBzZWxlY3Rpb24gd2FzXG4gKiBzdGFydGVkIGFuZCBhdCBpbmRleCAxIGRpc3RhbmNlIGFzIGEgY291bnQgb2Ygc2VsZWN0ZWQgY29sdW1ucy5cbiAqXG4gKiBAcGFyYW0ge0NvcmV9IGhvdEluc3RhbmNlIFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7QXJyYXlbXX0gUmV0dXJucyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCByYW5nZXMgZGVmaW5lcyBpbiB0aGF0IHNjaGVtYTpcbiAqICAgICAgICAgICAgICAgICAgIGBbW3Zpc3VhbENvbHVtblN0YXJ0LCBkaXN0YW5jZV0sIFt2aXN1YWxDb2x1bW5TdGFydCwgZGlzdGFuY2VdLCAuLi5dYC5cbiAqICAgICAgICAgICAgICAgICAgIFRoZSBjb2x1bW4gZGlzdGFuY2VzIGFyZSBhbHdheXMgY3JlYXRlZCBzdGFydGluZyBmcm9tIHRoZSBsZWZ0ICh6ZXJvIGluZGV4KSB0byB0aGVcbiAqICAgICAgICAgICAgICAgICAgIHJpZ2h0ICh0aGUgbGF0ZXN0IGNvbHVtbiBpbmRleCkuXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybVNlbGVjdGlvblRvQ29sdW1uRGlzdGFuY2UoaG90SW5zdGFuY2UpIHtcbiAgY29uc3Qgc2VsZWN0aW9uVHlwZSA9IGRldGVjdFNlbGVjdGlvblR5cGUoaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSk7XG4gIGlmIChzZWxlY3Rpb25UeXBlID09PSBTRUxFQ1RJT05fVFlQRV9VTlJFQ09HTklaRUQgfHwgc2VsZWN0aW9uVHlwZSA9PT0gU0VMRUNUSU9OX1RZUEVfRU1QVFkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3Qgc2VsZWN0aW9uU2NoZW1hTm9ybWFsaXplciA9IG5vcm1hbGl6ZVNlbGVjdGlvbkZhY3Rvcnkoc2VsZWN0aW9uVHlwZSwge1xuICAgIGNyZWF0ZUNlbGxDb29yZHM6IGhvdEluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoaG90SW5zdGFuY2UpLFxuICAgIGNyZWF0ZUNlbGxSYW5nZTogaG90SW5zdGFuY2UuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGhvdEluc3RhbmNlKVxuICB9KTtcbiAgY29uc3QgdW5vcmRlcmVkSW5kZXhlcyA9IG5ldyBTZXQoKTtcblxuICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHJhbmdlcyBhbmQgY29sbGVjdCBhbGwgY29sdW1uIGluZGV4ZXMgd2hpY2ggYXJlIG5vdCBzYXZlZCB5ZXQuXG4gICgwLCBfYXJyYXkuYXJyYXlFYWNoKShob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLCBzZWxlY3Rpb24gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0gPSBzZWxlY3Rpb25TY2hlbWFOb3JtYWxpemVyKHNlbGVjdGlvbik7XG4gICAgY29uc3QgY29sdW1uTm9uSGVhZGVyU3RhcnQgPSBNYXRoLm1heChmcm9tLmNvbCwgMCk7XG4gICAgY29uc3QgYW1vdW50ID0gdG8uY29sIC0gY29sdW1uTm9uSGVhZGVyU3RhcnQgKyAxO1xuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShBcnJheS5mcm9tKG5ldyBBcnJheShhbW91bnQpLCAoXywgaSkgPT4gY29sdW1uTm9uSGVhZGVyU3RhcnQgKyBpKSwgaW5kZXggPT4ge1xuICAgICAgaWYgKCF1bm9yZGVyZWRJbmRleGVzLmhhcyhpbmRleCkpIHtcbiAgICAgICAgdW5vcmRlcmVkSW5kZXhlcy5hZGQoaW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBTb3J0IGluZGV4ZXMgaW4gYXNjZW5kaW5nIG9yZGVyIHRvIGVhc2lseSBkZXRlY3Rpbmcgbm9uLWNvbnNlY3V0aXZlIGNvbHVtbnMuXG4gIGNvbnN0IG9yZGVyZWRJbmRleGVzID0gQXJyYXkuZnJvbSh1bm9yZGVyZWRJbmRleGVzKS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb2x1bW5SYW5nZXMgPSAoMCwgX2FycmF5LmFycmF5UmVkdWNlKShvcmRlcmVkSW5kZXhlcywgKGFjYywgdmlzdWFsQ29sdW1uSW5kZXgsIGluZGV4LCBhcnJheSkgPT4ge1xuICAgIGlmIChpbmRleCAhPT0gMCAmJiB2aXN1YWxDb2x1bW5JbmRleCA9PT0gYXJyYXlbaW5kZXggLSAxXSArIDEpIHtcbiAgICAgIGFjY1thY2MubGVuZ3RoIC0gMV1bMV0gKz0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjLnB1c2goW3Zpc3VhbENvbHVtbkluZGV4LCAxXSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIFtdKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRDb2x1bW5SYW5nZXM7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdHJhbnNmb3JtIHNlbGVjdGlvbiByYW5nZXMgKHByb2R1Y2VkIGJ5IGBob3QuZ2V0U2VsZWN0ZWQoKWAgYW5kIGBob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpYCkgdG8gbm9ybWFsaXplZFxuICogZGF0YSBzdHJ1Y3R1cmUuIEl0IG1lcmdlcyByZXBlYXRlZCByYW5nZXMgaW50byBjb25zZWN1dGl2ZSBjb29yZGluYXRlcy4gVGhlIHJldHVybmVkIHN0cnVjdHVyZVxuICogY29udGFpbnMgYW4gYXJyYXkgb2YgYXJyYXlzLiBUaGUgc2luZ2xlIGl0ZW0gY29udGFpbnMgYXQgaW5kZXggMCB2aXN1YWwgY29sdW1uIGluZGV4IGZyb20gdGhlIHNlbGVjdGlvbiB3YXNcbiAqIHN0YXJ0ZWQgYW5kIGF0IGluZGV4IDEgZGlzdGFuY2UgYXMgYSBjb3VudCBvZiBzZWxlY3RlZCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaG90SW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtBcnJheVtdfSBSZXR1cm5zIGFuIGFycmF5IG9mIGFycmF5cyB3aXRoIHJhbmdlcyBkZWZpbmVzIGluIHRoYXQgc2NoZW1hOlxuICogICAgICAgICAgICAgICAgICAgYFtbdmlzdWFsQ29sdW1uU3RhcnQsIGRpc3RhbmNlXSwgW3Zpc3VhbENvbHVtblN0YXJ0LCBkaXN0YW5jZV0sIC4uLl1gLlxuICogICAgICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBkaXN0YW5jZXMgYXJlIGFsd2F5cyBjcmVhdGVkIHN0YXJ0aW5nIGZyb20gdGhlIGxlZnQgKHplcm8gaW5kZXgpIHRvIHRoZVxuICogICAgICAgICAgICAgICAgICAgcmlnaHQgKHRoZSBsYXRlc3QgY29sdW1uIGluZGV4KS5cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtU2VsZWN0aW9uVG9Sb3dEaXN0YW5jZShob3RJbnN0YW5jZSkge1xuICBjb25zdCBzZWxlY3Rpb25UeXBlID0gZGV0ZWN0U2VsZWN0aW9uVHlwZShob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpKTtcbiAgaWYgKHNlbGVjdGlvblR5cGUgPT09IFNFTEVDVElPTl9UWVBFX1VOUkVDT0dOSVpFRCB8fCBzZWxlY3Rpb25UeXBlID09PSBTRUxFQ1RJT05fVFlQRV9FTVBUWSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBzZWxlY3Rpb25TY2hlbWFOb3JtYWxpemVyID0gbm9ybWFsaXplU2VsZWN0aW9uRmFjdG9yeShzZWxlY3Rpb25UeXBlLCB7XG4gICAgY3JlYXRlQ2VsbENvb3JkczogaG90SW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChob3RJbnN0YW5jZSksXG4gICAgY3JlYXRlQ2VsbFJhbmdlOiBob3RJbnN0YW5jZS5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoaG90SW5zdGFuY2UpXG4gIH0pO1xuICBjb25zdCB1bm9yZGVyZWRJbmRleGVzID0gbmV3IFNldCgpO1xuXG4gIC8vIEl0ZXJhdGUgdGhyb3VnaCBhbGwgcmFuZ2VzIGFuZCBjb2xsZWN0IGFsbCBjb2x1bW4gaW5kZXhlcyB3aGljaCBhcmUgbm90IHNhdmVkIHlldC5cbiAgKDAsIF9hcnJheS5hcnJheUVhY2gpKGhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCksIHNlbGVjdGlvbiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IHNlbGVjdGlvblNjaGVtYU5vcm1hbGl6ZXIoc2VsZWN0aW9uKTtcbiAgICBjb25zdCByb3dOb25IZWFkZXJTdGFydCA9IE1hdGgubWF4KGZyb20ucm93LCAwKTtcbiAgICBjb25zdCBhbW91bnQgPSB0by5yb3cgLSByb3dOb25IZWFkZXJTdGFydCArIDE7XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKEFycmF5LmZyb20obmV3IEFycmF5KGFtb3VudCksIChfLCBpKSA9PiByb3dOb25IZWFkZXJTdGFydCArIGkpLCBpbmRleCA9PiB7XG4gICAgICBpZiAoIXVub3JkZXJlZEluZGV4ZXMuaGFzKGluZGV4KSkge1xuICAgICAgICB1bm9yZGVyZWRJbmRleGVzLmFkZChpbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFNvcnQgaW5kZXhlcyBpbiBhc2NlbmRpbmcgb3JkZXIgdG8gZWFzaWx5IGRldGVjdGluZyBub24tY29uc2VjdXRpdmUgY29sdW1ucy5cbiAgY29uc3Qgb3JkZXJlZEluZGV4ZXMgPSBBcnJheS5mcm9tKHVub3JkZXJlZEluZGV4ZXMpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJvd1JhbmdlcyA9ICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKG9yZGVyZWRJbmRleGVzLCAoYWNjLCByb3dJbmRleCwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgaWYgKGluZGV4ICE9PSAwICYmIHJvd0luZGV4ID09PSBhcnJheVtpbmRleCAtIDFdICsgMSkge1xuICAgICAgYWNjW2FjYy5sZW5ndGggLSAxXVsxXSArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2MucHVzaChbcm93SW5kZXgsIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10pO1xuICByZXR1cm4gbm9ybWFsaXplZFJvd1Jhbmdlcztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdlZGl0b3JDbG9zZUFuZFNhdmUnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCBlZGl0b3JNYW5hZ2VyID0gaG90Ll9nZXRFZGl0b3JNYW5hZ2VyKCk7XG4gICAgZWRpdG9yTWFuYWdlci5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Jhc2VFZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZWRpdG9ycy9iYXNlRWRpdG9yXCIpO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2VkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzJyxcbiAgY2FsbGJhY2soaG90LCBldmVudCwga2V5cykge1xuICAgIGNvbnN0IGVkaXRvck1hbmFnZXIgPSBob3QuX2dldEVkaXRvck1hbmFnZXIoKTtcbiAgICBjb25zdCBhY3RpdmVFZGl0b3IgPSBlZGl0b3JNYW5hZ2VyLmdldEFjdGl2ZUVkaXRvcigpO1xuICAgIGlmIChhY3RpdmVFZGl0b3IuaXNJbkZ1bGxFZGl0TW9kZSgpICYmIGFjdGl2ZUVkaXRvci5zdGF0ZSA9PT0gX2Jhc2VFZGl0b3IuRURJVE9SX1NUQVRFLkVESVRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWRpdG9yTWFuYWdlci5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCk7XG4gICAgaWYgKGhvdC5nZXRTZWxlY3RlZCgpKSB7XG4gICAgICBpZiAoa2V5cy5pbmNsdWRlcygnYXJyb3dkb3duJykpIHtcbiAgICAgICAgaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5cy5pbmNsdWRlcygnYXJyb3d1cCcpKSB7XG4gICAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsIDApO1xuICAgICAgfSBlbHNlIGlmIChrZXlzLmluY2x1ZGVzKCdhcnJvd2xlZnQnKSkge1xuICAgICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsIC0xICogaG90LmdldERpcmVjdGlvbkZhY3RvcigpKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5cy5pbmNsdWRlcygnYXJyb3dyaWdodCcpKSB7XG4gICAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwgaG90LmdldERpcmVjdGlvbkZhY3RvcigpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyJyxcbiAgY2FsbGJhY2soaG90LCBldmVudCkge1xuICAgIGNvbnN0IGVkaXRvck1hbmFnZXIgPSBob3QuX2dldEVkaXRvck1hbmFnZXIoKTtcbiAgICBlZGl0b3JNYW5hZ2VyLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KTtcbiAgICBlZGl0b3JNYW5hZ2VyLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGV2ZW50KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdlZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmcnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCBlZGl0b3JNYW5hZ2VyID0gaG90Ll9nZXRFZGl0b3JNYW5hZ2VyKCk7XG4gICAgZWRpdG9yTWFuYWdlci5jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpO1xuICAgIGVkaXRvck1hbmFnZXIuYWN0aXZlRWRpdG9yLmZvY3VzKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZWRpdG9yRmFzdE9wZW4nLFxuICBjYWxsYmFjayhob3QsIGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0XG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmIChoaWdobGlnaHQuaXNIZWFkZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBob3QuX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9yKG51bGwsIGV2ZW50LCB0cnVlKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0QWxsQ29tbWFuZHMgPSBnZXRBbGxDb21tYW5kcztcbnZhciBfY2xvc2VBbmRTYXZlID0gcmVxdWlyZShcIi4vY2xvc2VBbmRTYXZlXCIpO1xudmFyIF9jbG9zZUFuZFNhdmVCeUFycm93S2V5cyA9IHJlcXVpcmUoXCIuL2Nsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzXCIpO1xudmFyIF9jbG9zZUFuZFNhdmVCeUVudGVyID0gcmVxdWlyZShcIi4vY2xvc2VBbmRTYXZlQnlFbnRlclwiKTtcbnZhciBfY2xvc2VXaXRob3V0U2F2aW5nID0gcmVxdWlyZShcIi4vY2xvc2VXaXRob3V0U2F2aW5nXCIpO1xudmFyIF9mYXN0T3BlbiA9IHJlcXVpcmUoXCIuL2Zhc3RPcGVuXCIpO1xudmFyIF9vcGVuID0gcmVxdWlyZShcIi4vb3BlblwiKTtcbi8qKlxuICogUmV0dXJucyBjb21wbGV0ZSBsaXN0IG9mIHRoZSBzaG9ydGN1dCBjb21tYW5kcyBmb3IgdGhlIGNlbGxzIGVkaXRpbmcgZmVhdHVyZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb25bXX1cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsQ29tbWFuZHMoKSB7XG4gIHJldHVybiBbX2Nsb3NlQW5kU2F2ZS5jb21tYW5kLCBfY2xvc2VBbmRTYXZlQnlBcnJvd0tleXMuY29tbWFuZCwgX2Nsb3NlQW5kU2F2ZUJ5RW50ZXIuY29tbWFuZCwgX2Nsb3NlV2l0aG91dFNhdmluZy5jb21tYW5kLCBfZmFzdE9wZW4uY29tbWFuZCwgX29wZW4uY29tbWFuZF07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZG9tL2V2ZW50XCIpO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2VkaXRvck9wZW4nLFxuICBjYWxsYmFjayhob3QsIGV2ZW50LCBrZXlzKSB7XG4gICAgY29uc3QgZWRpdG9yTWFuYWdlciA9IGhvdC5fZ2V0RWRpdG9yTWFuYWdlcigpO1xuICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBoaWdobGlnaHRcbiAgICB9ID0gc2VsZWN0ZWRSYW5nZTtcblxuICAgIC8vIHN1cHBvcnRzIGZvciBuYXZpZ2F0aW5nIHdpdGggZW50ZXIga2V5IHdoZW4gbXVsdGlwbGUgY2VsbHMgYXJlIHNlbGVjdGVkXG4gICAgaWYgKGhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpICYmICFzZWxlY3RlZFJhbmdlLmlzSGVhZGVyKCkgJiYgaG90LmNvdW50UmVuZGVyZWRDb2xzKCkgPiAwICYmIGhvdC5jb3VudFJlbmRlcmVkUm93cygpID4gMCkge1xuICAgICAgY29uc3Qgc2V0dGluZ3MgPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICAgIGNvbnN0IGVudGVyTW92ZXMgPSB0eXBlb2Ygc2V0dGluZ3MuZW50ZXJNb3ZlcyA9PT0gJ2Z1bmN0aW9uJyA/IHNldHRpbmdzLmVudGVyTW92ZXMoZXZlbnQpIDogc2V0dGluZ3MuZW50ZXJNb3ZlcztcbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKCdzaGlmdCcpKSB7XG4gICAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoLWVudGVyTW92ZXMucm93LCAtZW50ZXJNb3Zlcy5jb2wpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyhlbnRlck1vdmVzLnJvdywgZW50ZXJNb3Zlcy5jb2wpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaGlnaGxpZ2h0LmlzSGVhZGVyKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBlZGl0b3Igb3BlbmluZyB3aXRoIGVudGVyIGtleVxuICAgIGlmIChob3QuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmcpIHtcbiAgICAgIGlmIChlZGl0b3JNYW5hZ2VyLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5KSB7XG4gICAgICAgIGVkaXRvck1hbmFnZXIubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoZXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWRpdG9yTWFuYWdlci5vcGVuRWRpdG9yKG51bGwsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZWRpdG9yTWFuYWdlci5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihldmVudCk7XG4gICAgfVxuICAgICgwLCBfZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKShldmVudCk7IC8vIHJlcXVpcmVkIGJ5IEhhbmRzb250YWJsZUVkaXRvclxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2VtcHR5U2VsZWN0ZWRDZWxscycsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoKTtcbiAgICBob3QuX2dldEVkaXRvck1hbmFnZXIoKS5wcmVwYXJlRWRpdG9yKCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0XG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmICghaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSAmJiAhaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSAmJiAoaGlnaGxpZ2h0LmlzQ2VsbCgpIHx8IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpKSB7XG4gICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybUVuZCgxLCAwKTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRvXG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IG5leHRSb3dJbmRleFRvU2VsZWN0ID0gTWF0aC5taW4odG8ucm93ICsgaG90LmNvdW50VmlzaWJsZVJvd3MoKSwgaG90LmNvdW50Um93cygpIC0gMSk7XG4gICAgY29uc3Qgcm93ID0gaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChuZXh0Um93SW5kZXhUb1NlbGVjdCwgLTEpO1xuICAgIGlmIChyb3cgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIHRvLmNvbCk7XG4gICAgICBjb25zdCBzY3JvbGxQYWRkaW5nID0gdG8ucm93IC0gaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKTtcbiAgICAgIGNvbnN0IG5leHRWZXJ0aWNhbFNjcm9sbCA9IE1hdGgubWluKGNvb3Jkcy5yb3cgLSBzY3JvbGxQYWRkaW5nLCBob3QuY291bnRSb3dzKCkgLSAxKTtcbiAgICAgIGhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY29vcmRzKTtcbiAgICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgICAgcm93OiBuZXh0VmVydGljYWxTY3JvbGwsXG4gICAgICAgIHZlcnRpY2FsU25hcDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWxTbmFwOiAnc3RhcnQnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldEFsbENvbW1hbmRzID0gZ2V0QWxsQ29tbWFuZHM7XG52YXIgX2Rvd24gPSByZXF1aXJlKFwiLi9kb3duXCIpO1xudmFyIF9kb3duQnlWaWV3cG9ydEhlaWdodCA9IHJlcXVpcmUoXCIuL2Rvd25CeVZpZXdwb3J0SGVpZ2h0XCIpO1xudmFyIF9sZWZ0ID0gcmVxdWlyZShcIi4vbGVmdFwiKTtcbnZhciBfcmlnaHQgPSByZXF1aXJlKFwiLi9yaWdodFwiKTtcbnZhciBfdG9Db2x1bW5zID0gcmVxdWlyZShcIi4vdG9Db2x1bW5zXCIpO1xudmFyIF90b01vc3RCb3R0b20gPSByZXF1aXJlKFwiLi90b01vc3RCb3R0b21cIik7XG52YXIgX3RvTW9zdElubGluZUVuZCA9IHJlcXVpcmUoXCIuL3RvTW9zdElubGluZUVuZFwiKTtcbnZhciBfdG9Nb3N0SW5saW5lU3RhcnQgPSByZXF1aXJlKFwiLi90b01vc3RJbmxpbmVTdGFydFwiKTtcbnZhciBfdG9Nb3N0TGVmdCA9IHJlcXVpcmUoXCIuL3RvTW9zdExlZnRcIik7XG52YXIgX3RvTW9zdFJpZ2h0ID0gcmVxdWlyZShcIi4vdG9Nb3N0UmlnaHRcIik7XG52YXIgX3RvTW9zdFRvcCA9IHJlcXVpcmUoXCIuL3RvTW9zdFRvcFwiKTtcbnZhciBfdG9Sb3dzID0gcmVxdWlyZShcIi4vdG9Sb3dzXCIpO1xudmFyIF91cCA9IHJlcXVpcmUoXCIuL3VwXCIpO1xudmFyIF91cEJ5Vmlld3BvcnRIZWlnaHQgPSByZXF1aXJlKFwiLi91cEJ5Vmlld3BvcnRIZWlnaHRcIik7XG4vKipcbiAqIFJldHVybnMgY29tcGxldGUgbGlzdCBvZiB0aGUgc2hvcnRjdXQgY29tbWFuZHMgZm9yIHRoZSBjZWxscyBzZWxlY3Rpb24gZXh0ZW5kaW5nIGZlYXR1cmUuXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9uW119XG4gKi9cbmZ1bmN0aW9uIGdldEFsbENvbW1hbmRzKCkge1xuICByZXR1cm4gW19kb3duLmNvbW1hbmQsIF9kb3duQnlWaWV3cG9ydEhlaWdodC5jb21tYW5kLCBfbGVmdC5jb21tYW5kLCBfcmlnaHQuY29tbWFuZCwgX3RvQ29sdW1ucy5jb21tYW5kLCBfdG9Nb3N0Qm90dG9tLmNvbW1hbmQsIF90b01vc3RJbmxpbmVFbmQuY29tbWFuZCwgX3RvTW9zdElubGluZVN0YXJ0LmNvbW1hbmQsIF90b01vc3RMZWZ0LmNvbW1hbmQsIF90b01vc3RSaWdodC5jb21tYW5kLCBfdG9Nb3N0VG9wLmNvbW1hbmQsIF90b1Jvd3MuY29tbWFuZCwgX3VwLmNvbW1hbmQsIF91cEJ5Vmlld3BvcnRIZWlnaHQuY29tbWFuZF07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0XG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmICghaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSAmJiAhaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSAmJiAoaGlnaGxpZ2h0LmlzQ2VsbCgpIHx8IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpKSB7XG4gICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybUVuZCgwLCAtMSAqIGhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKSk7XG4gICAgfVxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2V4dGVuZENlbGxzU2VsZWN0aW9uUmlnaHQnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCB7XG4gICAgICBoaWdobGlnaHRcbiAgICB9ID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKCFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpICYmICFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpICYmIChoaWdobGlnaHQuaXNDZWxsKCkgfHwgaGlnaGxpZ2h0LmlzSGVhZGVyKCkgJiYgaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkpIHtcbiAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtRW5kKDAsIGhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKSk7XG4gICAgfVxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2V4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0LFxuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGlmIChob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSB7XG4gICAgICBob3Quc2VsZWN0aW9uLnNlbGVjdEFsbCh0cnVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG90LnNlbGVjdENvbHVtbnMoZnJvbS5jb2wsIHRvLmNvbCwgaGlnaGxpZ2h0KTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20nLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3Rpb24sXG4gICAgICByb3dJbmRleE1hcHBlclxuICAgIH0gPSBob3Q7XG4gICAgY29uc3Qge1xuICAgICAgaGlnaGxpZ2h0LFxuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IGlzRm9jdXNIaWdobGlnaHRlZEJ5SGVhZGVyID0gaGlnaGxpZ2h0LmlzSGVhZGVyKCkgJiYgaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtcbiAgICBpZiAoaGlnaGxpZ2h0LmlzQ2VsbCgpIHx8IGlzRm9jdXNIaWdobGlnaHRlZEJ5SGVhZGVyKSB7XG4gICAgICBjb25zdCByb3cgPSByb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaG90LmNvdW50Um93cygpIC0gMSwgLTEpO1xuICAgICAgY29uc3QgbmV3RnJvbSA9IGZyb20uY2xvbmUoKTtcbiAgICAgIG5ld0Zyb20ucm93ID0gaGlnaGxpZ2h0LnJvdztcbiAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KG5ld0Zyb20sIHVuZGVmaW5lZCwgZmFsc2UsIGhpZ2hsaWdodC5jbG9uZSgpKTtcblxuICAgICAgLy8gUmVzdG9yZSB0aGUgcm93IGhpZ2hsaWdodCBieSBoZWFkZXIgZmxhZyBhZnRlciBzZXR0aW5nIHVwIGEgbmV3IHNlbGVjdGlvbi5cbiAgICAgIGlmIChpc0ZvY3VzSGlnaGxpZ2h0ZWRCeUhlYWRlcikge1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQoc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSk7XG4gICAgICB9XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VFbmQoaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHJvdywgdG8uY29sKSk7XG4gICAgfVxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2V4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0aW9uLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIGhpZ2hsaWdodCxcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBpZiAoIWhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkgJiYgIWhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkgJiYgaGlnaGxpZ2h0LmlzQ2VsbCgpKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaG90LmNvdW50Q29scygpIC0gMSwgLTEpO1xuICAgICAgY29uc3QgbmV3RnJvbSA9IGZyb20uY2xvbmUoKTtcbiAgICAgIG5ld0Zyb20uY29sID0gaGlnaGxpZ2h0LmNvbDtcbiAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KG5ld0Zyb20sIHVuZGVmaW5lZCwgZmFsc2UsIGhpZ2hsaWdodC5jbG9uZSgpKTtcbiAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZUVuZChob3QuX2NyZWF0ZUNlbGxDb29yZHModG8ucm93LCBjb2x1bW4pKTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSA9IGhvdDtcbiAgICBjb25zdCB7XG4gICAgICBoaWdobGlnaHQsXG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKCFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpICYmICFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpICYmIGhpZ2hsaWdodC5pc0NlbGwoKSkge1xuICAgICAgY29uc3QgZml4ZWRDb2x1bW5zID0gcGFyc2VJbnQoaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsIDEwKTtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmaXhlZENvbHVtbnMsIDEpO1xuICAgICAgY29uc3QgbmV3RnJvbSA9IGZyb20uY2xvbmUoKTtcbiAgICAgIG5ld0Zyb20uY29sID0gaGlnaGxpZ2h0LmNvbDtcbiAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KG5ld0Zyb20sIHVuZGVmaW5lZCwgZmFsc2UsIGhpZ2hsaWdodC5jbG9uZSgpKTtcbiAgICAgIHNlbGVjdGlvbi5zZXRSYW5nZUVuZChob3QuX2NyZWF0ZUNlbGxDb29yZHModG8ucm93LCBjb2x1bW4pKTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0aW9uLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIGhpZ2hsaWdodCxcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBpc0ZvY3VzSGlnaGxpZ2h0ZWRCeUhlYWRlciA9IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7XG4gICAgaWYgKGhpZ2hsaWdodC5pc0NlbGwoKSB8fCBpc0ZvY3VzSGlnaGxpZ2h0ZWRCeUhlYWRlcikge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLihob3QuaXNSdGwoKSA/IFtob3QuY291bnRDb2xzKCkgLSAxLCAtMV0gOiBbMCwgMV0pKTtcbiAgICAgIGNvbnN0IG5ld0Zyb20gPSBmcm9tLmNsb25lKCk7XG4gICAgICBuZXdGcm9tLmNvbCA9IGhpZ2hsaWdodC5jb2w7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChuZXdGcm9tLCB1bmRlZmluZWQsIGZhbHNlLCBoaWdobGlnaHQuY2xvbmUoKSk7XG5cbiAgICAgIC8vIFJlc3RvcmUgdGhlIGNvbHVtbiBoaWdobGlnaHQgYnkgaGVhZGVyIGZsYWcgYWZ0ZXIgc2V0dGluZyB1cCBhIG5ldyBzZWxlY3Rpb24uXG4gICAgICBpZiAoaXNGb2N1c0hpZ2hsaWdodGVkQnlIZWFkZXIpIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkpO1xuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0by5yb3csIGNvbHVtbikpO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0aW9uLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIGhpZ2hsaWdodCxcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBpc0ZvY3VzSGlnaGxpZ2h0ZWRCeUhlYWRlciA9IGhpZ2hsaWdodC5pc0hlYWRlcigpICYmIGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7XG4gICAgaWYgKGhpZ2hsaWdodC5pc0NlbGwoKSB8fCBpc0ZvY3VzSGlnaGxpZ2h0ZWRCeUhlYWRlcikge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLihob3QuaXNSdGwoKSA/IFswLCAxXSA6IFtob3QuY291bnRDb2xzKCkgLSAxLCAtMV0pKTtcbiAgICAgIGNvbnN0IG5ld0Zyb20gPSBmcm9tLmNsb25lKCk7XG4gICAgICBuZXdGcm9tLmNvbCA9IGhpZ2hsaWdodC5jb2w7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChuZXdGcm9tLCB1bmRlZmluZWQsIGZhbHNlLCBoaWdobGlnaHQuY2xvbmUoKSk7XG5cbiAgICAgIC8vIFJlc3RvcmUgdGhlIGNvbHVtbiBoaWdobGlnaHQgYnkgaGVhZGVyIGZsYWcgYWZ0ZXIgc2V0dGluZyB1cCBhIG5ldyBzZWxlY3Rpb24uXG4gICAgICBpZiAoaXNGb2N1c0hpZ2hsaWdodGVkQnlIZWFkZXIpIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkpO1xuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh0by5yb3csIGNvbHVtbikpO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFRvcCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIHJvd0luZGV4TWFwcGVyXG4gICAgfSA9IGhvdDtcbiAgICBjb25zdCB7XG4gICAgICBoaWdobGlnaHQsXG4gICAgICBmcm9tLFxuICAgICAgdG9cbiAgICB9ID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgY29uc3QgaXNGb2N1c0hpZ2hsaWdodGVkQnlIZWFkZXIgPSBoaWdobGlnaHQuaXNIZWFkZXIoKSAmJiBob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO1xuICAgIGlmIChoaWdobGlnaHQuaXNDZWxsKCkgfHwgaXNGb2N1c0hpZ2hsaWdodGVkQnlIZWFkZXIpIHtcbiAgICAgIGNvbnN0IHJvdyA9IHJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLCAxKTtcbiAgICAgIGNvbnN0IG5ld0Zyb20gPSBmcm9tLmNsb25lKCk7XG4gICAgICBuZXdGcm9tLnJvdyA9IGhpZ2hsaWdodC5yb3c7XG4gICAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChuZXdGcm9tLCB1bmRlZmluZWQsIGZhbHNlLCBoaWdobGlnaHQuY2xvbmUoKSk7XG5cbiAgICAgIC8vIFJlc3RvcmUgdGhlIHJvdyBoaWdobGlnaHQgYnkgaGVhZGVyIGZsYWcgYWZ0ZXIgc2V0dGluZyB1cCBhIG5ldyBzZWxlY3Rpb24uXG4gICAgICBpZiAoaXNGb2N1c0hpZ2hsaWdodGVkQnlIZWFkZXIpIHtcbiAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkpO1xuICAgICAgfVxuICAgICAgc2VsZWN0aW9uLnNldFJhbmdlRW5kKGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIHRvLmNvbCkpO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdleHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cycsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhpZ2hsaWdodCxcbiAgICAgIGZyb20sXG4gICAgICB0b1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBpZiAoaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSkge1xuICAgICAgaG90LnNlbGVjdGlvbi5zZWxlY3RBbGwodHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvdC5zZWxlY3RSb3dzKGZyb20ucm93LCB0by5yb3csIGhpZ2hsaWdodCk7XG4gICAgfVxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ2V4dGVuZENlbGxzU2VsZWN0aW9uVXAnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCB7XG4gICAgICBoaWdobGlnaHRcbiAgICB9ID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgaWYgKCFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpICYmICFob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpICYmIChoaWdobGlnaHQuaXNDZWxsKCkgfHwgaGlnaGxpZ2h0LmlzSGVhZGVyKCkgJiYgaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkpIHtcbiAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtRW5kKC0xLCAwKTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBuZXh0Um93SW5kZXhUb1NlbGVjdCA9IE1hdGgubWF4KHRvLnJvdyAtIGhvdC5jb3VudFZpc2libGVSb3dzKCksIDApO1xuICAgIGNvbnN0IHJvdyA9IGhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobmV4dFJvd0luZGV4VG9TZWxlY3QsIDEpO1xuICAgIGlmIChyb3cgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIHRvLmNvbCk7XG4gICAgICBjb25zdCBzY3JvbGxQYWRkaW5nID0gdG8ucm93IC0gaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKTtcbiAgICAgIGNvbnN0IG5leHRWZXJ0aWNhbFNjcm9sbCA9IE1hdGgubWF4KGNvb3Jkcy5yb3cgLSBzY3JvbGxQYWRkaW5nLCAwKTtcbiAgICAgIGhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY29vcmRzKTtcbiAgICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgICAgcm93OiBuZXh0VmVydGljYWxTY3JvbGwsXG4gICAgICAgIHZlcnRpY2FsU25hcDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWxTbmFwOiAnc3RhcnQnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUtleWJvYXJkU2hvcnRjdXRDb21tYW5kc1Bvb2wgPSBjcmVhdGVLZXlib2FyZFNob3J0Y3V0Q29tbWFuZHNQb29sO1xudmFyIF9lZGl0b3IgPSByZXF1aXJlKFwiLi9lZGl0b3JcIik7XG52YXIgX2V4dGVuZENlbGxzU2VsZWN0aW9uID0gcmVxdWlyZShcIi4vZXh0ZW5kQ2VsbHNTZWxlY3Rpb25cIik7XG52YXIgX21vdmVDZWxsU2VsZWN0aW9uID0gcmVxdWlyZShcIi4vbW92ZUNlbGxTZWxlY3Rpb25cIik7XG52YXIgX2VtcHR5U2VsZWN0ZWRDZWxscyA9IHJlcXVpcmUoXCIuL2VtcHR5U2VsZWN0ZWRDZWxsc1wiKTtcbnZhciBfc2Nyb2xsVG9Gb2N1c2VkQ2VsbCA9IHJlcXVpcmUoXCIuL3Njcm9sbFRvRm9jdXNlZENlbGxcIik7XG52YXIgX3NlbGVjdEFsbENlbGxzID0gcmVxdWlyZShcIi4vc2VsZWN0QWxsQ2VsbHNcIik7XG52YXIgX3NlbGVjdEFsbENlbGxzQW5kSGVhZGVycyA9IHJlcXVpcmUoXCIuL3NlbGVjdEFsbENlbGxzQW5kSGVhZGVyc1wiKTtcbnZhciBfcG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSA9IHJlcXVpcmUoXCIuL3BvcHVsYXRlU2VsZWN0ZWRDZWxsc0RhdGFcIik7XG5jb25zdCBhbGxDb21tYW5kcyA9IFsuLi4oMCwgX2VkaXRvci5nZXRBbGxDb21tYW5kcykoKSwgLi4uKDAsIF9leHRlbmRDZWxsc1NlbGVjdGlvbi5nZXRBbGxDb21tYW5kcykoKSwgLi4uKDAsIF9tb3ZlQ2VsbFNlbGVjdGlvbi5nZXRBbGxDb21tYW5kcykoKSwgX2VtcHR5U2VsZWN0ZWRDZWxscy5jb21tYW5kLCBfc2Nyb2xsVG9Gb2N1c2VkQ2VsbC5jb21tYW5kLCBfc2VsZWN0QWxsQ2VsbHMuY29tbWFuZCwgX3NlbGVjdEFsbENlbGxzQW5kSGVhZGVycy5jb21tYW5kLCBfcG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YS5jb21tYW5kXTtcblxuLyoqXG4gKiBQcmVwYXJlcyBhbmQgY3JlYXRlcyBhbiBvYmplY3Qgd2l0aCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIHRvIHRyaWdnZXIuXG4gKlxuICogQHBhcmFtIHtIYW5kc29udGFibGV9IGhvdCBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlS2V5Ym9hcmRTaG9ydGN1dENvbW1hbmRzUG9vbChob3QpIHtcbiAgY29uc3QgY29tbWFuZHMgPSB7fTtcbiAgYWxsQ29tbWFuZHMuZm9yRWFjaChfcmVmID0+IHtcbiAgICBsZXQge1xuICAgICAgbmFtZSxcbiAgICAgIGNhbGxiYWNrXG4gICAgfSA9IF9yZWY7XG4gICAgY29tbWFuZHNbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYWxsYmFjayhob3QsIC4uLmFyZ3MpO1xuICAgIH07XG4gIH0pO1xuICByZXR1cm4gY29tbWFuZHM7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnbW92ZUNlbGxTZWxlY3Rpb25Eb3duJyxcbiAgY2FsbGJhY2soX3JlZikge1xuICAgIGxldCB7XG4gICAgICBzZWxlY3Rpb25cbiAgICB9ID0gX3JlZjtcbiAgICBzZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwgMCk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnbW92ZUNlbGxTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hdmlnYWJsZUhlYWRlcnNcbiAgICB9ID0gaG90LmdldFNldHRpbmdzKCk7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyc0NvdW50ID0gbmF2aWdhYmxlSGVhZGVycyA/IGhvdC5jb3VudENvbEhlYWRlcnMoKSA6IDA7XG4gICAgY29uc3Qge1xuICAgICAgcm93XG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtcbiAgICBsZXQgcm93c1N0ZXAgPSBob3QuY291bnRWaXNpYmxlUm93cygpICsgY29sdW1uSGVhZGVyc0NvdW50O1xuXG4gICAgLy8gaWYgdGhlIGxhc3Qgcm93IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBtb3ZlIHRoZSBmb2N1cyB0byB0aGUgZmlyc3Qgcm93IChpZiBhdXRvV3JhcCBpcyBlbmFibGVkKVxuICAgIGlmIChyb3cgPT09IGhvdC5jb3VudFJvd3MoKSAtIDEpIHtcbiAgICAgIHJvd3NTdGVwID0gMTtcblxuICAgICAgLy8gaWYgdGhlIG5leHQgbW92ZSB3b3VsZCBtb3ZlIHRoZSBmb2N1cyBvZmYgdGhlIHRhYmxlIGNhbGN1bGF0ZSB0aGUgZGVsdGEgdG8gbW92ZSB0aGUgc2VsZWN0aW9uIHRvXG4gICAgICAvLyB0aGUgbGFzdCByb3dcbiAgICB9IGVsc2UgaWYgKHJvdyArIHJvd3NTdGVwID4gaG90LmNvdW50Um93cygpKSB7XG4gICAgICByb3dzU3RlcCA9IGhvdC5jb3VudFJvd3MoKSAtIHJvdyAtIDE7XG4gICAgfVxuICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQocm93c1N0ZXAsIDApO1xuICAgIGlmIChob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93IDwgMCkge1xuICAgICAgaG90LnNjcm9sbFZpZXdwb3J0VG8oe1xuICAgICAgICByb3c6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZ2V0QWxsQ29tbWFuZHMgPSBnZXRBbGxDb21tYW5kcztcbnZhciBfZG93biA9IHJlcXVpcmUoXCIuL2Rvd25cIik7XG52YXIgX2Rvd25CeVZpZXdwb3J0SGVpZ2h0ID0gcmVxdWlyZShcIi4vZG93bkJ5Vmlld3BvcnRIZWlnaHRcIik7XG52YXIgX2lubGluZUVuZCA9IHJlcXVpcmUoXCIuL2lubGluZUVuZFwiKTtcbnZhciBfaW5saW5lU3RhcnQgPSByZXF1aXJlKFwiLi9pbmxpbmVTdGFydFwiKTtcbnZhciBfbGVmdCA9IHJlcXVpcmUoXCIuL2xlZnRcIik7XG52YXIgX3JpZ2h0ID0gcmVxdWlyZShcIi4vcmlnaHRcIik7XG52YXIgX3RvTW9zdEJvdHRvbSA9IHJlcXVpcmUoXCIuL3RvTW9zdEJvdHRvbVwiKTtcbnZhciBfdG9Nb3N0Qm90dG9tSW5saW5lRW5kID0gcmVxdWlyZShcIi4vdG9Nb3N0Qm90dG9tSW5saW5lRW5kXCIpO1xudmFyIF90b01vc3RJbmxpbmVFbmQgPSByZXF1aXJlKFwiLi90b01vc3RJbmxpbmVFbmRcIik7XG52YXIgX3RvTW9zdElubGluZVN0YXJ0ID0gcmVxdWlyZShcIi4vdG9Nb3N0SW5saW5lU3RhcnRcIik7XG52YXIgX3RvTW9zdExlZnQgPSByZXF1aXJlKFwiLi90b01vc3RMZWZ0XCIpO1xudmFyIF90b01vc3RSaWdodCA9IHJlcXVpcmUoXCIuL3RvTW9zdFJpZ2h0XCIpO1xudmFyIF90b01vc3RUb3AgPSByZXF1aXJlKFwiLi90b01vc3RUb3BcIik7XG52YXIgX3RvTW9zdFRvcElubGluZVN0YXJ0ID0gcmVxdWlyZShcIi4vdG9Nb3N0VG9wSW5saW5lU3RhcnRcIik7XG52YXIgX3VwID0gcmVxdWlyZShcIi4vdXBcIik7XG52YXIgX3VwQnlWaWV3cG9ydEhlaWdodCA9IHJlcXVpcmUoXCIuL3VwQnlWaWV3cG9ydEhlaWdodFwiKTtcbi8qKlxuICogUmV0dXJucyBjb21wbGV0ZSBsaXN0IG9mIHRoZSBzaG9ydGN1dCBjb21tYW5kcyBmb3IgdGhlIGNlbGxzIG1vdmluZyBmZWF0dXJlLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbltdfVxuICovXG5mdW5jdGlvbiBnZXRBbGxDb21tYW5kcygpIHtcbiAgcmV0dXJuIFtfZG93bi5jb21tYW5kLCBfZG93bkJ5Vmlld3BvcnRIZWlnaHQuY29tbWFuZCwgX2lubGluZUVuZC5jb21tYW5kLCBfaW5saW5lU3RhcnQuY29tbWFuZCwgX2xlZnQuY29tbWFuZCwgX3JpZ2h0LmNvbW1hbmQsIF90b01vc3RCb3R0b20uY29tbWFuZCwgX3RvTW9zdEJvdHRvbUlubGluZUVuZC5jb21tYW5kLCBfdG9Nb3N0SW5saW5lRW5kLmNvbW1hbmQsIF90b01vc3RJbmxpbmVTdGFydC5jb21tYW5kLCBfdG9Nb3N0TGVmdC5jb21tYW5kLCBfdG9Nb3N0UmlnaHQuY29tbWFuZCwgX3RvTW9zdFRvcC5jb21tYW5kLCBfdG9Nb3N0VG9wSW5saW5lU3RhcnQuY29tbWFuZCwgX3VwLmNvbW1hbmQsIF91cEJ5Vmlld3BvcnRIZWlnaHQuY29tbWFuZF07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnbW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQnLFxuICBjYWxsYmFjayhob3QsIGV2ZW50KSB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBjb25zdCBzZWxlY3RlZFJhbmdlID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7XG4gICAgY29uc3QgdGFiTW92ZXMgPSB0eXBlb2Ygc2V0dGluZ3MudGFiTW92ZXMgPT09ICdmdW5jdGlvbicgPyBzZXR0aW5ncy50YWJNb3ZlcyhldmVudCkgOiBzZXR0aW5ncy50YWJNb3ZlcztcbiAgICBpZiAoaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkgJiYgIXNlbGVjdGVkUmFuZ2UuaXNIZWFkZXIoKSAmJiBob3QuY291bnRSZW5kZXJlZENvbHMoKSA+IDAgJiYgaG90LmNvdW50UmVuZGVyZWRSb3dzKCkgPiAwKSB7XG4gICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKC10YWJNb3Zlcy5yb3csIC10YWJNb3Zlcy5jb2wpO1xuICAgIH0gZWxzZSB7XG4gICAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10YWJNb3Zlcy5yb3csIC10YWJNb3Zlcy5jb2wpO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0JyxcbiAgY2FsbGJhY2soaG90LCBldmVudCkge1xuICAgIGNvbnN0IHNldHRpbmdzID0gaG90LmdldFNldHRpbmdzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1xuICAgIGNvbnN0IHRhYk1vdmVzID0gdHlwZW9mIHNldHRpbmdzLnRhYk1vdmVzID09PSAnZnVuY3Rpb24nID8gc2V0dGluZ3MudGFiTW92ZXMoZXZlbnQpIDogc2V0dGluZ3MudGFiTW92ZXM7XG4gICAgaWYgKGhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpICYmICFzZWxlY3RlZFJhbmdlLmlzSGVhZGVyKCkgJiYgaG90LmNvdW50UmVuZGVyZWRDb2xzKCkgPiAwICYmIGhvdC5jb3VudFJlbmRlcmVkUm93cygpID4gMCkge1xuICAgICAgaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyh0YWJNb3Zlcy5yb3csIHRhYk1vdmVzLmNvbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodGFiTW92ZXMucm93LCB0YWJNb3Zlcy5jb2wpO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvbkxlZnQnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsIC0xICogaG90LmdldERpcmVjdGlvbkZhY3RvcigpKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLCBob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ21vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sXG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtcbiAgICBsZXQgcm93ID0gaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChob3QuY291bnRSb3dzKCkgLSAxLCAtMSk7XG4gICAgaWYgKHJvdyA9PT0gbnVsbCkge1xuICAgICAgcm93ID0gLTE7XG4gICAgfVxuICAgIGhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2wpKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIHJvd0luZGV4TWFwcGVyLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IGZpeGVkUm93cyA9IHBhcnNlSW50KGhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwgMTApO1xuICAgIGNvbnN0IHJvdyA9IHJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChob3QuY291bnRSb3dzKCkgLSBmaXhlZFJvd3MgLSAxLCAtMSk7XG4gICAgY29uc3QgY29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGhvdC5jb3VudENvbHMoKSAtIDEsIC0xKTtcbiAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSA9IGhvdDtcbiAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChob3QuX2NyZWF0ZUNlbGxDb29yZHMoaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdywgY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGhvdC5jb3VudENvbHMoKSAtIDEsIC0xKSkpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ21vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3Rpb24sXG4gICAgICBjb2x1bW5JbmRleE1hcHBlclxuICAgIH0gPSBob3Q7XG4gICAgY29uc3QgZml4ZWRDb2x1bW5zID0gcGFyc2VJbnQoaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsIDEwKTtcbiAgICBjb25zdCByb3cgPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93O1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmaXhlZENvbHVtbnMsIDEpO1xuICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbikpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ21vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIGNvbHVtbkluZGV4TWFwcGVyXG4gICAgfSA9IGhvdDtcbiAgICBjb25zdCByb3cgPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93O1xuICAgIGxldCBjb2x1bW4gPSBjb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uKGhvdC5pc1J0bCgpID8gW2hvdC5jb3VudENvbHMoKSAtIDEsIC0xXSA6IFswLCAxXSkpO1xuICAgIGlmIChjb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIGNvbHVtbiA9IGhvdC5pc1J0bCgpID8gLTEgOiAtaG90LmNvdW50Um93SGVhZGVycygpO1xuICAgIH1cbiAgICBzZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChob3QuX2NyZWF0ZUNlbGxDb29yZHMocm93LCBjb2x1bW4pKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0aW9uLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd1xuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7XG4gICAgbGV0IGNvbHVtbiA9IGNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi4oaG90LmlzUnRsKCkgPyBbMCwgMV0gOiBbaG90LmNvdW50Q29scygpIC0gMSwgLTFdKSk7XG4gICAgaWYgKGNvbHVtbiA9PT0gbnVsbCkge1xuICAgICAgY29sdW1uID0gaG90LmlzUnRsKCkgPyAtaG90LmNvdW50Um93SGVhZGVycygpIDogLTE7XG4gICAgfVxuICAgIHNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbikpO1xuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ21vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sXG4gICAgfSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtcbiAgICBsZXQgcm93ID0gaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLCAxKTtcbiAgICBpZiAocm93ID09PSBudWxsKSB7XG4gICAgICByb3cgPSAtaG90LmNvdW50Q29sSGVhZGVycygpO1xuICAgIH1cbiAgICBob3Quc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sKSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnbW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvbixcbiAgICAgIHJvd0luZGV4TWFwcGVyLFxuICAgICAgY29sdW1uSW5kZXhNYXBwZXJcbiAgICB9ID0gaG90O1xuICAgIGNvbnN0IGZpeGVkUm93cyA9IHBhcnNlSW50KGhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCwgMTApO1xuICAgIGNvbnN0IGZpeGVkQ29sdW1ucyA9IHBhcnNlSW50KGhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LCAxMCk7XG4gICAgY29uc3Qgcm93ID0gcm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZpeGVkUm93cywgMSk7XG4gICAgY29uc3QgY29sdW1uID0gY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZpeGVkQ29sdW1ucywgMSk7XG4gICAgc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnbW92ZUNlbGxTZWxlY3Rpb25VcCcsXG4gIGNhbGxiYWNrKF9yZWYpIHtcbiAgICBsZXQge1xuICAgICAgc2VsZWN0aW9uXG4gICAgfSA9IF9yZWY7XG4gICAgc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLCAwKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdtb3ZlQ2VsbFNlbGVjdGlvblVwQnlWaWV3cG9ydEhpZ2h0JyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qge1xuICAgICAgbmF2aWdhYmxlSGVhZGVyc1xuICAgIH0gPSBob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzQ291bnQgPSBuYXZpZ2FibGVIZWFkZXJzID8gaG90LmNvdW50Q29sSGVhZGVycygpIDogMDtcbiAgICBjb25zdCB7XG4gICAgICByb3dcbiAgICB9ID0gaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O1xuICAgIGxldCByb3dzU3RlcCA9IC0oaG90LmNvdW50VmlzaWJsZVJvd3MoKSArIGNvbHVtbkhlYWRlcnNDb3VudCk7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3Qgcm93IGlzIGN1cnJlbnRseSBzZWxlY3RlZCBtb3ZlIHRoZSBmb2N1cyB0byB0aGUgbGFzdCByb3cgKGlmIGF1dG9XcmFwIGlzIGVuYWJsZWQpXG4gICAgaWYgKHJvdyA9PT0gLWNvbHVtbkhlYWRlcnNDb3VudCkge1xuICAgICAgcm93c1N0ZXAgPSAtMTtcblxuICAgICAgLy8gaWYgdGhlIG5leHQgbW92ZSB3b3VsZCBtb3ZlIHRoZSBmb2N1cyBvZmYgdGhlIHRhYmxlIGNhbGN1bGF0ZSB0aGUgZGVsdGEgdG8gbW92ZSB0aGUgc2VsZWN0aW9uIHRvXG4gICAgICAvLyB0aGUgZmlyc3Qgcm93XG4gICAgfSBlbHNlIGlmIChyb3cgKyByb3dzU3RlcCA8IGNvbHVtbkhlYWRlcnNDb3VudCkge1xuICAgICAgcm93c1N0ZXAgPSAtKHJvdyArIGNvbHVtbkhlYWRlcnNDb3VudCk7XG4gICAgfVxuICAgIGhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQocm93c1N0ZXAsIDApO1xuICAgIGlmIChob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93IDwgMCkge1xuICAgICAgaG90LnNjcm9sbFZpZXdwb3J0VG8oe1xuICAgICAgICByb3c6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdwb3B1bGF0ZVNlbGVjdGVkQ2VsbHNEYXRhJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSYW5nZSA9IGhvdC5nZXRTZWxlY3RlZFJhbmdlKCk7XG4gICAgY29uc3Qge1xuICAgICAgcm93OiBoaWdobGlnaHRSb3csXG4gICAgICBjb2w6IGhpZ2hsaWdodENvbHVtblxuICAgIH0gPSBzZWxlY3RlZFJhbmdlW3NlbGVjdGVkUmFuZ2UubGVuZ3RoIC0gMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpO1xuICAgIGNvbnN0IHZhbHVlVG9Qb3B1bGF0ZSA9IGhvdC5nZXREYXRhQXRDZWxsKGhpZ2hsaWdodFJvdywgaGlnaGxpZ2h0Q29sdW1uKTtcbiAgICBjb25zdCBjZWxsVmFsdWVzID0gbmV3IE1hcCgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRSYW5nZS5sZW5ndGg7IGkrKykge1xuICAgICAgc2VsZWN0ZWRSYW5nZVtpXS5mb3JBbGwoKHJvdywgY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChyb3cgPj0gMCAmJiBjb2x1bW4gPj0gMCAmJiAocm93ICE9PSBoaWdobGlnaHRSb3cgfHwgY29sdW1uICE9PSBoaWdobGlnaHRDb2x1bW4pKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICB9ID0gaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICAgICAgICBpZiAoIXJlYWRPbmx5KSB7XG4gICAgICAgICAgICBjZWxsVmFsdWVzLnNldChgJHtyb3d9eCR7Y29sdW1ufWAsIFtyb3csIGNvbHVtbiwgdmFsdWVUb1BvcHVsYXRlXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaG90LnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShjZWxsVmFsdWVzLnZhbHVlcygpKSk7XG4gIH1cbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5jb25zdCBjb21tYW5kID0gZXhwb3J0cy5jb21tYW5kID0ge1xuICBuYW1lOiAnc2Nyb2xsVG9Gb2N1c2VkQ2VsbCcsXG4gIGNhbGxiYWNrKGhvdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGhpZ2hsaWdodFxuICAgIH0gPSBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtcbiAgICBjb25zdCBmaXJzdFZpc2libGVSb3cgPSBob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpIC0gMTtcbiAgICBjb25zdCBmaXJzdFZpc2libGVDb2x1bW4gPSBob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpIC0gMTtcbiAgICBjb25zdCBsYXN0VmlzaWJsZVJvdyA9IGhvdC52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKSArIDE7XG4gICAgY29uc3QgbGFzdFZpc2libGVDb2x1bW4gPSBob3Qudmlldy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCkgKyAxO1xuICAgIGNvbnN0IHZpc2libGVDb29yZHNGcm9tID0gaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGZpcnN0VmlzaWJsZVJvdywgZmlyc3RWaXNpYmxlQ29sdW1uKTtcbiAgICBjb25zdCB2aXNpYmxlQ29vcmRzVG8gPSBob3QuX2NyZWF0ZUNlbGxDb29yZHMobGFzdFZpc2libGVSb3csIGxhc3RWaXNpYmxlQ29sdW1uKTtcbiAgICBjb25zdCB2aXNpYmxlUmFuZ2UgPSBob3QuX2NyZWF0ZUNlbGxSYW5nZSh2aXNpYmxlQ29vcmRzRnJvbSwgdmlzaWJsZUNvb3Jkc0Zyb20sIHZpc2libGVDb29yZHNUbyk7XG4gICAgaWYgKCF2aXNpYmxlUmFuZ2UuaW5jbHVkZXMoaGlnaGxpZ2h0KSAmJiAoaGlnaGxpZ2h0LnJvdyA+PSAwIHx8IGhpZ2hsaWdodC5jb2wgPj0gMCkpIHtcbiAgICAgIGNvbnN0IHNjcm9sbENvb3JkcyA9IHt9O1xuICAgICAgaWYgKGhpZ2hsaWdodC5jb2wgPj0gMCkge1xuICAgICAgICBjb25zdCBvZmZzZXRDb2x1bW5zID0gTWF0aC5mbG9vcihob3QuY291bnRWaXNpYmxlQ29scygpIC8gMik7XG4gICAgICAgIHNjcm9sbENvb3Jkcy5jb2wgPSBNYXRoLm1heChoaWdobGlnaHQuY29sIC0gb2Zmc2V0Q29sdW1ucywgMCk7XG4gICAgICB9XG4gICAgICBpZiAoaGlnaGxpZ2h0LnJvdyA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldFJvd3MgPSBNYXRoLmZsb29yKGhvdC5jb3VudFZpc2libGVSb3dzKCkgLyAyKTtcbiAgICAgICAgc2Nyb2xsQ29vcmRzLnJvdyA9IE1hdGgubWF4KGhpZ2hsaWdodC5yb3cgLSBvZmZzZXRSb3dzLCAwKTtcbiAgICAgIH1cbiAgICAgIGhvdC5zY3JvbGxWaWV3cG9ydFRvKHtcbiAgICAgICAgLi4uc2Nyb2xsQ29vcmRzLFxuICAgICAgICB2ZXJ0aWNhbFNuYXA6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsU25hcDogJ3N0YXJ0J1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuY29uc3QgY29tbWFuZCA9IGV4cG9ydHMuY29tbWFuZCA9IHtcbiAgbmFtZTogJ3NlbGVjdEFsbENlbGxzJyxcbiAgY2FsbGJhY2soaG90KSB7XG4gICAgaG90LnNlbGVjdGlvbi5zZWxlY3RBbGwodHJ1ZSwgdHJ1ZSwge1xuICAgICAgZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6IHRydWVcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmNvbnN0IGNvbW1hbmQgPSBleHBvcnRzLmNvbW1hbmQgPSB7XG4gIG5hbWU6ICdzZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMnLFxuICBjYWxsYmFjayhob3QpIHtcbiAgICBob3Quc2VsZWN0aW9uLnNlbGVjdEFsbCh0cnVlLCB0cnVlLCB7XG4gICAgICBkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDogZmFsc2VcbiAgICB9KTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8qKlxuICogR3JvdXAgbmFtZSBmb3Iga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYXJlIGFjdGl2ZSB3aGVuIHRoZSBjZWxsIGlzIHNlbGVjdGVkLlxuICovXG5jb25zdCBHUklEX0dST1VQID0gZXhwb3J0cy5HUklEX0dST1VQID0gJ2dyaWREZWZhdWx0Jztcbi8qKlxuICogR3JvdXAgbmFtZSBmb3Iga2V5Ym9hcmQgc2hvcnRjdXRzIHRoYXQgYXJlIGFjdGl2ZSB3aGVuIHRoZSBjZWxsIGVkaXRvciBpcyBhY3RpdmUuXG4gKi9cbmNvbnN0IEVESVRPUl9FRElUX0dST1VQID0gZXhwb3J0cy5FRElUT1JfRURJVF9HUk9VUCA9ICdlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuc2hvcnRjdXRzRWRpdG9yQ29udGV4dCA9IHNob3J0Y3V0c0VkaXRvckNvbnRleHQ7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbnZhciBfY29tbWFuZHMgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbi8qKlxuICogVGhlIGNvbnRleHQgdGhhdCBkZWZpbmVzIGEgYmFzZSBzaG9ydGN1dCBsaXN0IGF2YWlsYWJsZSBmb3IgY2VsbHMgZWRpdG9ycy5cbiAqXG4gKiBAcGFyYW0ge0hhbmRzb250YWJsZX0gaG90IFRoZSBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHNob3J0Y3V0c0VkaXRvckNvbnRleHQoaG90KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgnZWRpdG9yJyk7XG4gIGNvbnN0IGNvbW1hbmRzUG9vbCA9ICgwLCBfY29tbWFuZHMuY3JlYXRlS2V5Ym9hcmRTaG9ydGN1dENvbW1hbmRzUG9vbCkoaG90KTtcbiAgY29uc3QgY29uZmlnID0ge1xuICAgIGdyb3VwOiBfY29uc3RhbnRzLkVESVRPUl9FRElUX0dST1VQXG4gIH07XG4gIGNvbnRleHQuYWRkU2hvcnRjdXRzKFt7XG4gICAga2V5czogW1snRW50ZXInXSwgWydFbnRlcicsICdTaGlmdCddXSxcbiAgICBjYWxsYmFjazogKGV2ZW50LCBrZXlzKSA9PiBjb21tYW5kc1Bvb2wuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihldmVudCwga2V5cylcbiAgfSwge1xuICAgIGtleXM6IFtbJ0VudGVyJywgJ0NvbnRyb2wvTWV0YSddLCBbJ0VudGVyJywgJ0NvbnRyb2wvTWV0YScsICdTaGlmdCddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKGV2ZW50LCBrZXlzKSA9PiBjb21tYW5kc1Bvb2wuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihldmVudCwga2V5cylcbiAgfSwge1xuICAgIGtleXM6IFtbJ1RhYiddLCBbJ1RhYicsICdTaGlmdCddLCBbJ1BhZ2VEb3duJ10sIFsnUGFnZVVwJ11dLFxuICAgIGZvcndhcmRUb0NvbnRleHQ6IGhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCdncmlkJyksXG4gICAgY2FsbGJhY2s6IChldmVudCwga2V5cykgPT4gY29tbWFuZHNQb29sLmVkaXRvckNsb3NlQW5kU2F2ZShldmVudCwga2V5cylcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93RG93biddLCBbJ0Fycm93VXAnXSwgWydBcnJvd0xlZnQnXSwgWydBcnJvd1JpZ2h0J11dLFxuICAgIHByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgICBjYWxsYmFjazogKGV2ZW50LCBrZXlzKSA9PiBjb21tYW5kc1Bvb2wuZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMoZXZlbnQsIGtleXMpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydFc2NhcGUnXSwgWydFc2NhcGUnLCAnQ29udHJvbC9NZXRhJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nKClcbiAgfV0sIGNvbmZpZyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnNob3J0Y3V0c0dyaWRDb250ZXh0ID0gc2hvcnRjdXRzR3JpZENvbnRleHQ7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbnZhciBfY29tbWFuZHMgPSByZXF1aXJlKFwiLi9jb21tYW5kc1wiKTtcbi8qKlxuICogVGhlIGNvbnRleHQgdGhhdCBkZWZpbmVzIHNob3J0Y3V0IGxpc3QgYXZhaWxhYmxlIGZvciBzZWxlY3RlZCBjZWxsIG9yIGNlbGxzLlxuICpcbiAqIEBwYXJhbSB7SGFuZHNvbnRhYmxlfSBob3QgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2hvcnRjdXRzR3JpZENvbnRleHQoaG90KSB7XG4gIGNvbnN0IGNvbnRleHQgPSBob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuYWRkQ29udGV4dCgnZ3JpZCcpO1xuICBjb25zdCBjb21tYW5kc1Bvb2wgPSAoMCwgX2NvbW1hbmRzLmNyZWF0ZUtleWJvYXJkU2hvcnRjdXRDb21tYW5kc1Bvb2wpKGhvdCk7XG4gIGNvbnN0IGNvbmZpZyA9IHtcbiAgICBydW5Pbmx5SWY6ICgpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbmF2aWdhYmxlSGVhZGVyc1xuICAgICAgfSA9IGhvdC5nZXRTZXR0aW5ncygpO1xuICAgICAgcmV0dXJuICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShob3QuZ2V0U2VsZWN0ZWQoKSkgJiYgKG5hdmlnYWJsZUhlYWRlcnMgfHwgIW5hdmlnYWJsZUhlYWRlcnMgJiYgaG90LmNvdW50UmVuZGVyZWRSb3dzKCkgPiAwICYmIGhvdC5jb3VudFJlbmRlcmVkQ29scygpID4gMCk7XG4gICAgfSxcbiAgICBncm91cDogX2NvbnN0YW50cy5HUklEX0dST1VQXG4gIH07XG4gIGNvbnRleHQuYWRkU2hvcnRjdXRzKFt7XG4gICAga2V5czogW1snRjInXV0sXG4gICAgY2FsbGJhY2s6IGV2ZW50ID0+IGNvbW1hbmRzUG9vbC5lZGl0b3JGYXN0T3BlbihldmVudClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0VudGVyJ10sIFsnRW50ZXInLCAnU2hpZnQnXV0sXG4gICAgY2FsbGJhY2s6IChldmVudCwga2V5cykgPT4gY29tbWFuZHNQb29sLmVkaXRvck9wZW4oZXZlbnQsIGtleXMpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydCYWNrc3BhY2UnXSwgWydEZWxldGUnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5lbXB0eVNlbGVjdGVkQ2VsbHMoKVxuICB9XSwge1xuICAgIGdyb3VwOiBfY29uc3RhbnRzLkVESVRPUl9FRElUX0dST1VQLFxuICAgIHJ1bk9ubHlJZjogKCkgPT4gKDAsIF9taXhlZC5pc0RlZmluZWQpKGhvdC5nZXRTZWxlY3RlZCgpKVxuICB9KTtcbiAgY29udGV4dC5hZGRTaG9ydGN1dHMoW3tcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnQSddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLnNlbGVjdEFsbENlbGxzKCksXG4gICAgcnVuT25seUlmOiAoKSA9PiAhaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmlzSGVhZGVyKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0NvbnRyb2wvTWV0YScsICdBJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB7fSxcbiAgICBydW5Pbmx5SWY6ICgpID0+IGhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5pc0hlYWRlcigpLFxuICAgIHByZXZlbnREZWZhdWx0OiB0cnVlXG4gIH0sIHtcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnU2hpZnQnLCAnU3BhY2UnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKVxuICB9LCB7XG4gICAga2V5czogW1snQ29udHJvbC9NZXRhJywgJ0VudGVyJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLFxuICAgIHJ1bk9ubHlJZjogKCkgPT4ge1xuICAgICAgcmV0dXJuICFob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuaXNIZWFkZXIoKSAmJiBob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCkgPiAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleXM6IFtbJ0NvbnRyb2wnLCAnU3BhY2UnXV0sXG4gICAgY2FwdHVyZUN0cmw6IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5leHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucygpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydTaGlmdCcsICdTcGFjZSddXSxcbiAgICBzdG9wUHJvcGFnYXRpb246IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5leHRlbmRDZWxsc1NlbGVjdGlvblRvUm93cygpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd1VwJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wubW92ZUNlbGxTZWxlY3Rpb25VcCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd1VwJywgJ0NvbnRyb2wvTWV0YSddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93VXAnLCAnU2hpZnQnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5leHRlbmRDZWxsc1NlbGVjdGlvblVwKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93VXAnLCAnU2hpZnQnLCAnQ29udHJvbC9NZXRhJ11dLFxuICAgIGNhcHR1cmVDdHJsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AoKSxcbiAgICBydW5Pbmx5SWY6ICgpID0+ICEoaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSB8fCBob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKVxuICB9LCB7XG4gICAga2V5czogW1snQXJyb3dEb3duJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wubW92ZUNlbGxTZWxlY3Rpb25Eb3duKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93RG93bicsICdDb250cm9sL01ldGEnXV0sXG4gICAgY2FwdHVyZUN0cmw6IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd0Rvd24nLCAnU2hpZnQnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5leHRlbmRDZWxsc1NlbGVjdGlvbkRvd24oKVxuICB9LCB7XG4gICAga2V5czogW1snQXJyb3dEb3duJywgJ1NoaWZ0JywgJ0NvbnRyb2wvTWV0YSddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCksXG4gICAgcnVuT25seUlmOiAoKSA9PiAhKGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkgfHwgaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSlcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93TGVmdCddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLm1vdmVDZWxsU2VsZWN0aW9uTGVmdCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd0xlZnQnLCAnQ29udHJvbC9NZXRhJ11dLFxuICAgIGNhcHR1cmVDdHJsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0KClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93TGVmdCcsICdTaGlmdCddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLmV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd0xlZnQnLCAnU2hpZnQnLCAnQ29udHJvbC9NZXRhJ11dLFxuICAgIGNhcHR1cmVDdHJsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0KCksXG4gICAgcnVuT25seUlmOiAoKSA9PiAhKGhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkgfHwgaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSlcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93UmlnaHQnXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0KClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0Fycm93UmlnaHQnLCAnQ29udHJvbC9NZXRhJ11dLFxuICAgIGNhcHR1cmVDdHJsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd1JpZ2h0JywgJ1NoaWZ0J11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydBcnJvd1JpZ2h0JywgJ1NoaWZ0JywgJ0NvbnRyb2wvTWV0YSddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0UmlnaHQoKSxcbiAgICBydW5Pbmx5SWY6ICgpID0+ICEoaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSB8fCBob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKVxuICB9LCB7XG4gICAga2V5czogW1snSG9tZSddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQoKSxcbiAgICBydW5Pbmx5SWY6ICgpID0+IGhvdC52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydIb21lJywgJ1NoaWZ0J11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydIb21lJywgJ0NvbnRyb2wvTWV0YSddXSxcbiAgICBjYXB0dXJlQ3RybDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxcbiAgICBydW5Pbmx5SWY6ICgpID0+IGhvdC52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydFbmQnXV0sXG4gICAgY2FwdHVyZUN0cmw6IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCgpLFxuICAgIHJ1bk9ubHlJZjogKCkgPT4gaG90LnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0VuZCcsICdTaGlmdCddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ0VuZCcsICdDb250cm9sL01ldGEnXV0sXG4gICAgY2FwdHVyZUN0cmw6IHRydWUsXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLFxuICAgIHJ1bk9ubHlJZjogKCkgPT4gaG90LnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKClcbiAgfSwge1xuICAgIGtleXM6IFtbJ1BhZ2VVcCddXSxcbiAgICBjYWxsYmFjazogKCkgPT4gY29tbWFuZHNQb29sLm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQoKVxuICB9LCB7XG4gICAga2V5czogW1snUGFnZVVwJywgJ1NoaWZ0J11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQoKVxuICB9LCB7XG4gICAga2V5czogW1snUGFnZURvd24nXV0sXG4gICAgY2FsbGJhY2s6ICgpID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KClcbiAgfSwge1xuICAgIGtleXM6IFtbJ1BhZ2VEb3duJywgJ1NoaWZ0J11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydUYWInXV0sXG4gICAgLy8gVGhlIHByb3BlcnR5IHZhbHVlIGlzIGNvbnRyb2xsZWQgYnkgZm9jdXNDYXRjaGVyIG1vZHVsZSAoaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvYmxvYi9tYXN0ZXIvaGFuZHNvbnRhYmxlL3NyYy9jb3JlL2ZvY3VzQ2F0Y2hlci9pbmRleC5qcylcbiAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgY2FsbGJhY2s6IGV2ZW50ID0+IGNvbW1hbmRzUG9vbC5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGV2ZW50KVxuICB9LCB7XG4gICAga2V5czogW1snU2hpZnQnLCAnVGFiJ11dLFxuICAgIC8vIFRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBjb250cm9sbGVkIGJ5IGZvY3VzQ2F0Y2hlciBtb2R1bGUgKGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL2Jsb2IvbWFzdGVyL2hhbmRzb250YWJsZS9zcmMvY29yZS9mb2N1c0NhdGNoZXIvaW5kZXguanMpXG4gICAgcHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICAgIGNhbGxiYWNrOiBldmVudCA9PiBjb21tYW5kc1Bvb2wubW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQoZXZlbnQpXG4gIH0sIHtcbiAgICBrZXlzOiBbWydDb250cm9sL01ldGEnLCAnQmFja3NwYWNlJ11dLFxuICAgIGNhbGxiYWNrOiAoKSA9PiBjb21tYW5kc1Bvb2wuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpXG4gIH1dLCBjb25maWcpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgcmVnaXN0ZXJBbGxTaG9ydGN1dENvbnRleHRzOiB0cnVlXG59O1xuZXhwb3J0cy5yZWdpc3RlckFsbFNob3J0Y3V0Q29udGV4dHMgPSByZWdpc3RlckFsbFNob3J0Y3V0Q29udGV4dHM7XG52YXIgX2VkaXRvciA9IHJlcXVpcmUoXCIuL2VkaXRvclwiKTtcbnZhciBfZ3JpZCA9IHJlcXVpcmUoXCIuL2dyaWRcIik7XG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcbk9iamVjdC5rZXlzKF9jb25zdGFudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIGlmIChrZXkgaW4gZXhwb3J0cyAmJiBleHBvcnRzW2tleV0gPT09IF9jb25zdGFudHNba2V5XSkgcmV0dXJuO1xuICBleHBvcnRzW2tleV0gPSBfY29uc3RhbnRzW2tleV07XG59KTtcbi8qKlxuICogUmVnaXN0ZXIgYWxsIHNob3J0Y3V0IGNvbnRleHRzLlxuICpcbiAqIEBwYXJhbSB7SGFuZHNvbnRhYmxlfSBob3RJbnN0YW5jZSBUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckFsbFNob3J0Y3V0Q29udGV4dHMoaG90SW5zdGFuY2UpIHtcbiAgW19ncmlkLnNob3J0Y3V0c0dyaWRDb250ZXh0LCBfZWRpdG9yLnNob3J0Y3V0c0VkaXRvckNvbnRleHRdLmZvckVhY2goY29udGV4dCA9PiBjb250ZXh0KGhvdEluc3RhbmNlKSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzQ29udGV4dE9iamVjdCA9IGlzQ29udGV4dE9iamVjdDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX3VuaXF1ZU1hcCA9IHJlcXVpcmUoXCIuLi91dGlscy9kYXRhU3RydWN0dXJlcy91bmlxdWVNYXBcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfdGVtcGxhdGVMaXRlcmFsVGFnID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvdGVtcGxhdGVMaXRlcmFsVGFnXCIpO1xuY29uc3QgX19raW5kT2YgPSBTeW1ib2woJ3Nob3J0Y3V0LWNvbnRleHQnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIG9iamVjdCBpcyBhIGNvbnRleHQgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0VG9DaGVjayBBbiBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDb250ZXh0T2JqZWN0KG9iamVjdFRvQ2hlY2spIHtcbiAgcmV0dXJuICgwLCBfb2JqZWN0LmlzT2JqZWN0KShvYmplY3RUb0NoZWNrKSAmJiBvYmplY3RUb0NoZWNrLl9fa2luZE9mID09PSBfX2tpbmRPZjtcbn1cblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuLyoqXG4gKiBUaGUgYFNob3J0Y3V0Q29udGV4dGAgQVBJIGxldHMgeW91IHN0b3JlIGFuZCBtYW5hZ2UgW2tleWJvYXJkIHNob3J0Y3V0c10oQC9ndWlkZXMvbmF2aWdhdGlvbi9rZXlib2FyZC1zaG9ydGN1dHMva2V5Ym9hcmQtc2hvcnRjdXRzLm1kKSBpbiBhIGdpdmVuIFtjb250ZXh0XShAL2d1aWRlcy9uYXZpZ2F0aW9uL2tleWJvYXJkLXNob3J0Y3V0cy9rZXlib2FyZC1zaG9ydGN1dHMubWQja2V5Ym9hcmQtc2hvcnRjdXQtY29udGV4dHMpLlxuICpcbiAqIEVhY2ggYFNob3J0Y3V0Q29udGV4dGAgb2JqZWN0IHN0b3JlcyBhbmQgbWFuYWdlcyBpdHMgb3duIHNldCBvZiBrZXlib2FyZCBzaG9ydGN1dHMuXG4gKlxuICogQGFsaWFzIFNob3J0Y3V0Q29udGV4dFxuICogQGNsYXNzIFNob3J0Y3V0Q29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGtleWJvYXJkIHNob3J0Y3V0IGNvbnRleHRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmNvbnN0IGNyZWF0ZUNvbnRleHQgPSBuYW1lID0+IHtcbiAgY29uc3QgU0hPUlRDVVRTID0gKDAsIF91bmlxdWVNYXAuY3JlYXRlVW5pcXVlTWFwKSh7XG4gICAgZXJyb3JJZEV4aXN0czoga2V5cyA9PiBgVGhlIFwiJHtrZXlzfVwiIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgXCIke25hbWV9XCIgY29udGV4dC5gXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBrZXlib2FyZCBzaG9ydGN1dCB0byB0aGlzIGNvbnRleHQuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTaG9ydGN1dENvbnRleHQjXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFRoZSBzaG9ydGN1dCdzIG9wdGlvbnNcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxzdHJpbmc+Pn0gb3B0aW9ucy5rZXlzIE5hbWVzIG9mIHRoZSBzaG9ydGN1dCdzIGtleXMsXG4gICAqIChjb21pbmcgZnJvbSBbYEtleWJvYXJkRXZlbnQua2V5YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMpKSxcbiAgICogaW4gbG93ZXJjYXNlIG9yIHVwcGVyY2FzZSwgdW5pZmllZCBhY3Jvc3MgYnJvd3NlcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5jYWxsYmFjayBUaGUgc2hvcnRjdXQncyBhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMuZ3JvdXAgQSBncm91cCBvZiBzaG9ydGN1dHMgdG8gd2hpY2ggdGhlIHNob3J0Y3V0IGJlbG9uZ3NcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLnJ1bk9ubHlJZl0gQSBjb25kaXRpb24gb24gd2hpY2ggdGhlIHNob3J0Y3V0J3MgYWN0aW9uIHJ1bnNcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLnN0b3BQcm9wYWdhdGlvbj1mYWxzZV0gSWYgc2V0IHRvIGB0cnVlYDogc3RvcHMgdGhlIGV2ZW50J3MgcHJvcGFnYXRpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmNhcHR1cmVDdHJsPWZhbHNlXSBJZiBzZXQgdG8gYHRydWVgOiBjYXB0dXJlcyB0aGUgc3RhdGUgb2YgdGhlIENvbnRyb2wvTWV0YSBtb2RpZmllciBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLnByZXZlbnREZWZhdWx0PXRydWVdIElmIHNldCB0byBgdHJ1ZWA6IHByZXZlbnRzIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5wb3NpdGlvbj0nYWZ0ZXInXSBUaGUgb3JkZXIgaW4gd2hpY2ggdGhlIHNob3J0Y3V0J3MgYWN0aW9uIHJ1bnM6XG4gICAqIGAnYmVmb3JlJ2Agb3IgYCdhZnRlcidgIHRoZSBgcmVsYXRpdmVUb0dyb3VwYCBncm91cCBvZiBhY3Rpb25zXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5yZWxhdGl2ZVRvR3JvdXBdIFRoZSBuYW1lIG9mIGEgZ3JvdXAgb2YgYWN0aW9ucywgdXNlZCB0byBkZXRlcm1pbmUgYW4gYWN0aW9uJ3MgYHBvc2l0aW9uYFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuZm9yd2FyZFRvQ29udGV4dF0gVGhlIGNvbnRleHQgb2JqZWN0IHdoZXJlIHRoZSBldmVudCB3aWxsIGJlIGZvcndhcmRlZCB0by5cbiAgICovXG4gIGNvbnN0IGFkZFNob3J0Y3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCB7XG4gICAgICBrZXlzLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICBncm91cCxcbiAgICAgIHJ1bk9ubHlJZiA9ICgpID0+IHRydWUsXG4gICAgICBjYXB0dXJlQ3RybCA9IGZhbHNlLFxuICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlLFxuICAgICAgc3RvcFByb3BhZ2F0aW9uID0gZmFsc2UsXG4gICAgICByZWxhdGl2ZVRvR3JvdXAsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIGZvcndhcmRUb0NvbnRleHRcbiAgICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICBpZiAoKDAsIF9taXhlZC5pc1VuZGVmaW5lZCkoZ3JvdXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXRcXCdzIGdyb3VwLicpO1xuICAgIH1cbiAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShjYWxsYmFjaykgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBzaG9ydGN1dFxcJ3MgY2FsbGJhY2sgbmVlZHMgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5cykgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKDAsIF90ZW1wbGF0ZUxpdGVyYWxUYWcudG9TaW5nbGVMaW5lKWBQYXNzIHRoZSBzaG9ydGN1dFxcJ3Mga2V5cyBhcyBhbiBhcnJheSBvZiBhcnJheXMsXFx4MjBcbiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlxceDIwXG4gICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcy5gKTtcbiAgICB9XG4gICAgY29uc3QgbmV3U2hvcnRjdXQgPSB7XG4gICAgICBjYWxsYmFjayxcbiAgICAgIGdyb3VwLFxuICAgICAgcnVuT25seUlmLFxuICAgICAgY2FwdHVyZUN0cmwsXG4gICAgICBwcmV2ZW50RGVmYXVsdCxcbiAgICAgIHN0b3BQcm9wYWdhdGlvblxuICAgIH07XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShyZWxhdGl2ZVRvR3JvdXApKSB7XG4gICAgICBuZXdTaG9ydGN1dC5yZWxhdGl2ZVRvR3JvdXAgPSByZWxhdGl2ZVRvR3JvdXA7XG4gICAgICBuZXdTaG9ydGN1dC5wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgIH1cbiAgICBpZiAoaXNDb250ZXh0T2JqZWN0KGZvcndhcmRUb0NvbnRleHQpKSB7XG4gICAgICBuZXdTaG9ydGN1dC5mb3J3YXJkVG9Db250ZXh0ID0gZm9yd2FyZFRvQ29udGV4dDtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKGtleUNvbWJpbmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gKDAsIF91dGlscy5ub3JtYWxpemVLZXlzKShrZXlDb21iaW5hdGlvbik7XG4gICAgICBjb25zdCBoYXNLZXlDb21iaW5hdGlvbiA9IFNIT1JUQ1VUUy5oYXNJdGVtKG5vcm1hbGl6ZWRLZXlzKTtcbiAgICAgIGlmIChoYXNLZXlDb21iaW5hdGlvbikge1xuICAgICAgICBjb25zdCBzaG9ydGN1dHMgPSBTSE9SVENVVFMuZ2V0SXRlbShub3JtYWxpemVkS2V5cyk7XG4gICAgICAgIGxldCBpbnNlcnRpb25JbmRleCA9IHNob3J0Y3V0cy5maW5kSW5kZXgoc2hvcnRjdXQgPT4gc2hvcnRjdXQuZ3JvdXAgPT09IHJlbGF0aXZlVG9Hcm91cCk7XG4gICAgICAgIGlmIChpbnNlcnRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgICBpbnNlcnRpb25JbmRleCAtPSAxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnNlcnRpb25JbmRleCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnNlcnRpb25JbmRleCA9IHNob3J0Y3V0cy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgc2hvcnRjdXRzLnNwbGljZShpbnNlcnRpb25JbmRleCwgMCwgbmV3U2hvcnRjdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgU0hPUlRDVVRTLmFkZEl0ZW0obm9ybWFsaXplZEtleXMsIFtuZXdTaG9ydGN1dF0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgbXVsdGlwbGUga2V5Ym9hcmQgc2hvcnRjdXRzIHRvIHRoaXMgY29udGV4dC5cbiAgICpcbiAgICogQG1lbWJlcm9mIFNob3J0Y3V0Q29udGV4dCNcbiAgICogQHBhcmFtIHtBcnJheTxvYmplY3Q+fSBzaG9ydGN1dHMgTGlzdCBvZiBzaG9ydGN1dHMgdG8gYWRkIHRvIHRoaXMgc2hvcnRjdXQgY29udGV4dFxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnNdIEEgc2hvcnRjdXQncyBvcHRpb25zXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmNhbGxiYWNrXSBBIHNob3J0Y3V0J3MgYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5ncm91cF0gQSBncm91cCBvZiBzaG9ydGN1dHMgdG8gd2hpY2ggYSBzaG9ydGN1dCBiZWxvbmdzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucy5ydW5Pbmx5SWZdIEEgY29uZGl0aW9uIG9uIHdoaWNoIGEgc2hvcnRjdXQncyBhY3Rpb24gcnVuc1xuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMuc3RvcFByb3BhZ2F0aW9uPWZhbHNlXSBJZiBzZXQgdG8gYHRydWVgOiBzdG9wcyB0aGUgZXZlbnQncyBwcm9wYWdhdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMucHJldmVudERlZmF1bHQ9dHJ1ZV0gSWYgc2V0IHRvIGB0cnVlYDogcHJldmVudHMgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLnBvc2l0aW9uPSdhZnRlciddIFRoZSBvcmRlciBpbiB3aGljaCBhIHNob3J0Y3V0J3MgYWN0aW9uIHJ1bnM6XG4gICAqIGAnYmVmb3JlJ2Agb3IgYCdhZnRlcidgIGEgYHJlbGF0aXZlVG9Hcm91cGAgZ3JvdXAgb2YgYWN0aW9uc1xuICAgKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnMucmVsYXRpdmVUb0dyb3VwXSBUaGUgbmFtZSBvZiBhIGdyb3VwIG9mIGFjdGlvbnMsIHVzZWQgdG8gZGV0ZXJtaW5lIGFuIGFjdGlvbidzIGBwb3NpdGlvbmBcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zLmZvcndhcmRUb0NvbnRleHRdIFRoZSBjb250ZXh0IG9iamVjdCB3aGVyZSB0aGUgZXZlbnQgd2lsbCBiZSBmb3J3YXJkZWQgdG8uXG4gICAqL1xuICBjb25zdCBhZGRTaG9ydGN1dHMgPSBmdW5jdGlvbiAoc2hvcnRjdXRzKSB7XG4gICAgbGV0IG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHNob3J0Y3V0cy5mb3JFYWNoKHNob3J0Y3V0ID0+IHtcbiAgICAgICgwLCBfb2JqZWN0Lm9iamVjdEVhY2gpKG9wdGlvbnMsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2hvcnRjdXQsIGtleSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgc2hvcnRjdXRba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhZGRTaG9ydGN1dChzaG9ydGN1dCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIHNob3J0Y3V0IGZyb20gdGhpcyBjb250ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRDb250ZXh0I1xuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGtleXMgTmFtZXMgb2YgdGhlIHNob3J0Y3V0J3Mga2V5cyxcbiAgICogKGNvbWluZyBmcm9tIFtgS2V5Ym9hcmRFdmVudC5rZXlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcykpLFxuICAgKiBpbiBsb3dlcmNhc2Ugb3IgdXBwZXJjYXNlLCB1bmlmaWVkIGFjcm9zcyBicm93c2Vyc1xuICAgKi9cbiAgY29uc3QgcmVtb3ZlU2hvcnRjdXRzQnlLZXlzID0ga2V5cyA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUtleXMpKGtleXMpO1xuICAgIFNIT1JUQ1VUUy5yZW1vdmVJdGVtKG5vcm1hbGl6ZWRLZXlzKTtcbiAgfTtcblxuICAvKipcbiAgICogUmVtb3ZlIGEgZ3JvdXAgb2Ygc2hvcnRjdXRzIGZyb20gdGhpcyBjb250ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRDb250ZXh0I1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgVGhlIG5hbWUgb2YgdGhlIGdyb3VwIG9mIHNob3J0Y3V0c1xuICAgKi9cbiAgY29uc3QgcmVtb3ZlU2hvcnRjdXRzQnlHcm91cCA9IGdyb3VwID0+IHtcbiAgICBjb25zdCBzaG9ydGN1dHMgPSBTSE9SVENVVFMuZ2V0SXRlbXMoKTtcbiAgICBzaG9ydGN1dHMuZm9yRWFjaChfcmVmID0+IHtcbiAgICAgIGxldCBbbm9ybWFsaXplZEtleXMsIHNob3J0Y3V0T3B0aW9uc10gPSBfcmVmO1xuICAgICAgY29uc3QgbGVmdE9wdGlvbnMgPSBzaG9ydGN1dE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24uZ3JvdXAgIT09IGdyb3VwKTtcbiAgICAgIGlmIChsZWZ0T3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVtb3ZlU2hvcnRjdXRzQnlLZXlzKCgwLCBfdXRpbHMuZ2V0S2V5c0xpc3QpKG5vcm1hbGl6ZWRLZXlzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzaG9ydGN1dE9wdGlvbnMubGVuZ3RoID0gMDtcbiAgICAgICAgc2hvcnRjdXRPcHRpb25zLnB1c2goLi4ubGVmdE9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgYSBzaG9ydGN1dCdzIGRldGFpbHMuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTaG9ydGN1dENvbnRleHQjXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5cyBOYW1lcyBvZiB0aGUgc2hvcnRjdXQncyBrZXlzLFxuICAgKiAoY29taW5nIGZyb20gW2BLZXlib2FyZEV2ZW50LmtleWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzKSksXG4gICAqIGluIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UsIHVuaWZpZWQgYWNyb3NzIGJyb3dzZXJzXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGNvbnN0IGdldFNob3J0Y3V0cyA9IGtleXMgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRLZXlzID0gKDAsIF91dGlscy5ub3JtYWxpemVLZXlzKShrZXlzKTtcbiAgICBjb25zdCBzaG9ydGN1dHMgPSBTSE9SVENVVFMuZ2V0SXRlbShub3JtYWxpemVkS2V5cyk7XG4gICAgcmV0dXJuICgwLCBfbWl4ZWQuaXNEZWZpbmVkKShzaG9ydGN1dHMpID8gc2hvcnRjdXRzLnNsaWNlKCkgOiBbXTtcbiAgfTtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBzaG9ydGN1dCBleGlzdHMgaW4gdGhpcyBjb250ZXh0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRDb250ZXh0I1xuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGtleXMgTmFtZXMgb2YgdGhlIHNob3J0Y3V0J3Mga2V5cyxcbiAgICogKGNvbWluZyBmcm9tIFtgS2V5Ym9hcmRFdmVudC5rZXlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcykpLFxuICAgKiBpbiBsb3dlcmNhc2Ugb3IgdXBwZXJjYXNlLCB1bmlmaWVkIGFjcm9zcyBicm93c2Vyc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGhhc1Nob3J0Y3V0ID0ga2V5cyA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEtleXMgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUtleXMpKGtleXMpO1xuICAgIHJldHVybiBTSE9SVENVVFMuaGFzSXRlbShub3JtYWxpemVkS2V5cyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgX19raW5kT2YsXG4gICAgYWRkU2hvcnRjdXQsXG4gICAgYWRkU2hvcnRjdXRzLFxuICAgIGdldFNob3J0Y3V0cyxcbiAgICBoYXNTaG9ydGN1dCxcbiAgICByZW1vdmVTaG9ydGN1dHNCeUtleXMsXG4gICAgcmVtb3ZlU2hvcnRjdXRzQnlHcm91cFxuICB9O1xufTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX21hbmFnZXIgPSByZXF1aXJlKFwiLi9tYW5hZ2VyXCIpO1xuZXhwb3J0cy5jcmVhdGVTaG9ydGN1dE1hbmFnZXIgPSBfbWFuYWdlci5jcmVhdGVTaG9ydGN1dE1hbmFnZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZUtleXNPYnNlcnZlciA9IGNyZWF0ZUtleXNPYnNlcnZlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBrZXkgb2JzZXJ2ZXIuXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlS2V5c09ic2VydmVyKCkge1xuICBjb25zdCBQUkVTU0VEX0tFWVMgPSBuZXcgU2V0KCk7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICogUHJlc3MgYSBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5hbWVzIG9mIHRoZSBzaG9ydGN1dCdzIGtleXMsXG4gICAgICogKGNvbWluZyBmcm9tIFtgS2V5Ym9hcmRFdmVudC5rZXlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcykpLFxuICAgICAqIGluIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UsIHVuaWZpZWQgYWNyb3NzIGJyb3dzZXJzXG4gICAgICovXG4gICAgcHJlc3Moa2V5KSB7XG4gICAgICBQUkVTU0VEX0tFWVMuYWRkKGtleSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIGEgcHJlc3NlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IE5hbWVzIG9mIHRoZSBzaG9ydGN1dCdzIGtleXMsXG4gICAgICogKGNvbWluZyBmcm9tIFtgS2V5Ym9hcmRFdmVudC5rZXlgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcykpLFxuICAgICAqIGluIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UsIHVuaWZpZWQgYWNyb3NzIGJyb3dzZXJzXG4gICAgICovXG4gICAgcmVsZWFzZShrZXkpIHtcbiAgICAgIFBSRVNTRURfS0VZUy5kZWxldGUoa2V5KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFJlbGVhc2UgYWxsIHByZXNzZWQga2V5cy5cbiAgICAgKi9cbiAgICByZWxlYXNlQWxsKCkge1xuICAgICAgUFJFU1NFRF9LRVlTLmNsZWFyKCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhIGtleSBpcyBwcmVzc2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBOYW1lcyBvZiB0aGUgc2hvcnRjdXQncyBrZXlzLFxuICAgICAqIChjb21pbmcgZnJvbSBbYEtleWJvYXJkRXZlbnQua2V5YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMpKSxcbiAgICAgKiBpbiBsb3dlcmNhc2Ugb3IgdXBwZXJjYXNlLCB1bmlmaWVkIGFjcm9zcyBicm93c2Vyc1xuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUHJlc3NlZChrZXkpIHtcbiAgICAgIHJldHVybiBQUkVTU0VEX0tFWVMuaGFzKGtleSk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfdW5pcXVlTWFwID0gcmVxdWlyZShcIi4uL3V0aWxzL2RhdGFTdHJ1Y3R1cmVzL3VuaXF1ZU1hcFwiKTtcbnZhciBfZXZlbnQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb20vZXZlbnRcIik7XG52YXIgX2NvbnRleHQgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpO1xudmFyIF9yZWNvcmRlciA9IHJlcXVpcmUoXCIuL3JlY29yZGVyXCIpO1xudmFyIF90ZW1wbGF0ZUxpdGVyYWxUYWcgPSByZXF1aXJlKFwiLi4vaGVscGVycy90ZW1wbGF0ZUxpdGVyYWxUYWdcIik7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4vKipcbiAqIFRoZSBgU2hvcnRjdXRNYW5hZ2VyYCBBUEkgbGV0cyB5b3Ugc3RvcmUgYW5kIG1hbmFnZSBba2V5Ym9hcmQgc2hvcnRjdXQgY29udGV4dHNdKEAvZ3VpZGVzL25hdmlnYXRpb24va2V5Ym9hcmQtc2hvcnRjdXRzL2tleWJvYXJkLXNob3J0Y3V0cy5tZCNrZXlib2FyZC1zaG9ydGN1dC1jb250ZXh0cykgKFtgU2hvcnRjdXRDb250ZXh0YF0oQC9hcGkvc2hvcnRjdXRDb250ZXh0Lm1kKSkuXG4gKlxuICogRWFjaCBgU2hvcnRjdXRNYW5hZ2VyYCBvYmplY3Q6XG4gKiAtIFN0b3JlcyBhbmQgbWFuYWdlcyBpdHMgb3duIHNldCBvZiBrZXlib2FyZCBzaG9ydGN1dCBjb250ZXh0cy5cbiAqIC0gTGlzdGVucyB0byB0aGUgW2BLZXlib2FyZEV2ZW50YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQpIGV2ZW50cyBhbmQgcnVucyBhY3Rpb25zIGZvciB0aGVtLlxuICpcbiAqIEBhbGlhcyBTaG9ydGN1dE1hbmFnZXJcbiAqIEBjbGFzcyBTaG9ydGN1dE1hbmFnZXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIFRoZSBtYW5hZ2VyJ3Mgb3B0aW9uc1xuICogQHBhcmFtIHtFdmVudFRhcmdldH0gb3B0aW9ucy5vd25lcldpbmRvdyBBIHN0YXJ0aW5nIGB3aW5kb3dgIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9wdGlvbnMuaGFuZGxlRXZlbnQgQSBjb25kaXRpb24gb24gd2hpY2ggYGV2ZW50YCBpcyBoYW5kbGVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5iZWZvcmVLZXlEb3duIEEgaG9vayBmaXJlZCBiZWZvcmUgdGhlIGBrZXlkb3duYCBldmVudCBpcyBoYW5kbGVkLiBZb3UgY2FuIHVzZSBpdCB0byBbYmxvY2sgYSBrZXlib2FyZCBzaG9ydGN1dCdzIGFjdGlvbnNdKEAvZ3VpZGVzL25hdmlnYXRpb24va2V5Ym9hcmQtc2hvcnRjdXRzL2tleWJvYXJkLXNob3J0Y3V0cy5tZCNibG9jay1hLWtleWJvYXJkLXNob3J0Y3V0LXMtYWN0aW9ucykuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLmFmdGVyS2V5RG93biBBIGhvb2sgZmlyZWQgYWZ0ZXIgdGhlIGBrZXlkb3duYCBldmVudCBpcyBoYW5kbGVkXG4gKi9cbmNvbnN0IGNyZWF0ZVNob3J0Y3V0TWFuYWdlciA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIG93bmVyV2luZG93LFxuICAgIGhhbmRsZUV2ZW50LFxuICAgIGJlZm9yZUtleURvd24sXG4gICAgYWZ0ZXJLZXlEb3duXG4gIH0gPSBfcmVmO1xuICAvKipcbiAgICogQSB1bmlxdWUgbWFwIHRoYXQgc3RvcmVzIGtleWJvYXJkIHNob3J0Y3V0IGNvbnRleHRzLlxuICAgKlxuICAgKiBAdHlwZSB7VW5pcXVlTWFwfVxuICAgKi9cbiAgY29uc3QgQ09OVEVYVFMgPSAoMCwgX3VuaXF1ZU1hcC5jcmVhdGVVbmlxdWVNYXApKHtcbiAgICBlcnJvcklkRXhpc3RzOiBrZXlzID0+IGBUaGUgXCIke2tleXN9XCIgY29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gXG4gIH0pO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGFjdGl2ZSBbYFNob3J0Y3V0Q29udGV4dGBdKEAvYXBpL3Nob3J0Y3V0Q29udGV4dC5tZCkuXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYWN0aXZlQ29udGV4dE5hbWUgPSAnZ3JpZCc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBbYFNob3J0Y3V0Q29udGV4dGBdKEAvYXBpL3Nob3J0Y3V0Q29udGV4dC5tZCkgb2JqZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRNYW5hZ2VyI1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dE5hbWUgVGhlIG5hbWUgb2YgdGhlIG5ldyBzaG9ydGN1dCBjb250ZXh0XG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBjb25zdCBhZGRDb250ZXh0ID0gY29udGV4dE5hbWUgPT4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSAoMCwgX2NvbnRleHQuY3JlYXRlQ29udGV4dCkoY29udGV4dE5hbWUpO1xuICAgIENPTlRFWFRTLmFkZEl0ZW0oY29udGV4dE5hbWUsIGNvbnRleHQpO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIElEIG9mIHRoZSBhY3RpdmUgW2BTaG9ydGN1dENvbnRleHRgXShAL2FwaS9zaG9ydGN1dENvbnRleHQubWQpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRNYW5hZ2VyI1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY29uc3QgZ2V0QWN0aXZlQ29udGV4dE5hbWUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGFjdGl2ZUNvbnRleHROYW1lO1xuICB9O1xuXG4gIC8qKlxuICAgKiBHZXQgYSBrZXlib2FyZCBzaG9ydGN1dCBjb250ZXh0IGJ5IGl0cyBuYW1lLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRNYW5hZ2VyI1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNob3J0Y3V0IGNvbnRleHRcbiAgICogQHJldHVybnMge29iamVjdHx1bmRlZmluZWR9IEEgW2BTaG9ydGN1dENvbnRleHRgXShAL2FwaS9zaG9ydGN1dENvbnRleHQubWQpIG9iamVjdCB0aGF0IHN0b3JlcyByZWdpc3RlcmVkIHNob3J0Y3V0c1xuICAgKi9cbiAgY29uc3QgZ2V0Q29udGV4dCA9IGNvbnRleHROYW1lID0+IHtcbiAgICByZXR1cm4gQ09OVEVYVFMuZ2V0SXRlbShjb250ZXh0TmFtZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGxpc3RlbmluZyB0byBrZXlib2FyZCBzaG9ydGN1dHMgd2l0aGluIGEgZ2l2ZW4gW2BTaG9ydGN1dENvbnRleHRgXShAL2FwaS9zaG9ydGN1dENvbnRleHQubWQpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRNYW5hZ2VyI1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNob3J0Y3V0IGNvbnRleHRcbiAgICovXG4gIGNvbnN0IHNldEFjdGl2ZUNvbnRleHROYW1lID0gY29udGV4dE5hbWUgPT4ge1xuICAgIGlmICghQ09OVEVYVFMuaGFzSXRlbShjb250ZXh0TmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigoMCwgX3RlbXBsYXRlTGl0ZXJhbFRhZy50b1NpbmdsZUxpbmUpYFlvdSd2ZSB0cmllZCB0byBhY3RpdmF0ZSB0aGUgXCIke2NvbnRleHROYW1lfVwiIHNob3J0Y3V0IGNvbnRleHRcXHgyMFxuICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LiBCZWZvcmUgYWN0aXZhdGlvbiwgcmVnaXN0ZXIgdGhlIGNvbnRleHQgdXNpbmcgdGhlIFwiYWRkQ29udGV4dFwiIG1ldGhvZC5gKTtcbiAgICB9XG4gICAgYWN0aXZlQ29udGV4dE5hbWUgPSBjb250ZXh0TmFtZTtcbiAgfTtcblxuICAvKipcbiAgICogVGhpcyB2YXJpYWJsZSByZWxhdGVzIHRvIHRoZSBgY2FwdHVyZUN0cmxgIHNob3J0Y3V0IG9wdGlvbixcbiAgICogd2hpY2ggYWxsb3dzIGZvciBjYXB0dXJpbmcgdGhlIHN0YXRlIG9mIHRoZSBDb250cm9sL01ldGEgbW9kaWZpZXIga2V5LlxuICAgKiBTb21lIG9mIHRoZSBkZWZhdWx0IGtleWJvYXJkIHNob3J0Y3V0cyByZWxhdGVkIHRvIGNlbGwgc2VsZWN0aW9uIG5lZWQgdGhpcyBmZWF0dXJlIGZvciB3b3JraW5nIHByb3Blcmx5LlxuICAgKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gIGxldCBpc0N0cmxLZXlTaWxlbmNlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBsaXN0ZW5pbmcgZXZlbnRzIGZyb20gdGhlIHJlY29yZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0tleWJvYXJkRXZlbnR9IGV2ZW50IFRoZSBrZXlib2FyZCBldmVudC5cbiAgICogQHBhcmFtIHtzdHJpbmdbXX0ga2V5cyBOYW1lcyBvZiB0aGUgc2hvcnRjdXQncyBrZXlzLFxuICAgKiAoY29taW5nIGZyb20gW2BLZXlib2FyZEV2ZW50LmtleWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzKSksXG4gICAqIGluIGxvd2VyY2FzZSBvciB1cHBlcmNhc2UsIHVuaWZpZWQgYWNyb3NzIGJyb3dzZXJzLlxuICAgKiBAcGFyYW0ge29iamVjdCB8IHN0cmluZ30gY29udGV4dCBUaGUgY29udGV4dCBvYmplY3Qgb3IgbmFtZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBjb25zdCByZWNvcmRlckNhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50LCBrZXlzKSB7XG4gICAgbGV0IGNvbnRleHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGdldEFjdGl2ZUNvbnRleHROYW1lKCk7XG4gICAgY29uc3QgYWN0aXZlQ29udGV4dCA9ICgwLCBfY29udGV4dC5pc0NvbnRleHRPYmplY3QpKGNvbnRleHQpID8gY29udGV4dCA6IGdldENvbnRleHQoY29udGV4dCk7XG4gICAgbGV0IGlzRXhlY3V0aW9uQ2FuY2VsbGVkID0gZmFsc2U7XG4gICAgaWYgKCFhY3RpdmVDb250ZXh0Lmhhc1Nob3J0Y3V0KGtleXMpKSB7XG4gICAgICByZXR1cm4gaXNFeGVjdXRpb25DYW5jZWxsZWQ7XG4gICAgfVxuXG4gICAgLy8gUHJvY2Vzc2luZyBqdXN0IGFjdGlvbnMgYmVpbmcgaW4gc3RhY2sgYXQgdGhlIG1vbWVudCBvZiBzaG9ydGN1dCBwcmVzc2luZyAod2l0aG91dCByZXNwZWN0aW5nIGFkZGl0aW9ucy9yZW1vdmFscyBwZXJmb3JtZWQgZHluYW1pY2FsbHkpLlxuICAgIGNvbnN0IHNob3J0Y3V0cyA9IGFjdGl2ZUNvbnRleHQuZ2V0U2hvcnRjdXRzKGtleXMpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBzaG9ydGN1dHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBydW5Pbmx5SWYsXG4gICAgICAgIHByZXZlbnREZWZhdWx0LFxuICAgICAgICBzdG9wUHJvcGFnYXRpb24sXG4gICAgICAgIGNhcHR1cmVDdHJsLFxuICAgICAgICBmb3J3YXJkVG9Db250ZXh0XG4gICAgICB9ID0gc2hvcnRjdXRzW2luZGV4XTtcbiAgICAgIGlmIChydW5Pbmx5SWYoZXZlbnQpID09PSB0cnVlKSB7XG4gICAgICAgIGlzQ3RybEtleVNpbGVuY2VkID0gY2FwdHVyZUN0cmw7XG4gICAgICAgIGlzRXhlY3V0aW9uQ2FuY2VsbGVkID0gY2FsbGJhY2soZXZlbnQsIGtleXMpID09PSBmYWxzZTtcbiAgICAgICAgaXNDdHJsS2V5U2lsZW5jZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgKDAsIF9ldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24pKGV2ZW50KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFeGVjdXRpb25DYW5jZWxsZWQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yd2FyZFRvQ29udGV4dCkge1xuICAgICAgICAgIHJlY29yZGVyQ2FsbGJhY2soZXZlbnQsIGtleXMsIGZvcndhcmRUb0NvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc0V4ZWN1dGlvbkNhbmNlbGxlZDtcbiAgfTtcblxuICAvKipcbiAgICogSW50ZXJuYWwga2V5IHJlY29yZGVyLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3Qga2V5UmVjb3JkZXIgPSAoMCwgX3JlY29yZGVyLnVzZVJlY29yZGVyKShvd25lcldpbmRvdywgaGFuZGxlRXZlbnQsIGJlZm9yZUtleURvd24sIGFmdGVyS2V5RG93biwgcmVjb3JkZXJDYWxsYmFjayk7XG4gIGtleVJlY29yZGVyLm1vdW50KCk7XG4gIHJldHVybiB7XG4gICAgYWRkQ29udGV4dCxcbiAgICBnZXRBY3RpdmVDb250ZXh0TmFtZSxcbiAgICBnZXRDb250ZXh0LFxuICAgIHNldEFjdGl2ZUNvbnRleHROYW1lLFxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBgY29udHJvbGAgb3IgYG1ldGFgIGtleXMgYXJlIHByZXNzZWQuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyb2YgU2hvcnRjdXRNYW5hZ2VyI1xuICAgICAqIEB0eXBlIHtGdW5jdGlvbn1cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBpc0N0cmxQcmVzc2VkOiAoKSA9PiAhaXNDdHJsS2V5U2lsZW5jZWQgJiYgKGtleVJlY29yZGVyLmlzUHJlc3NlZCgnY29udHJvbCcpIHx8IGtleVJlY29yZGVyLmlzUHJlc3NlZCgnbWV0YScpKSxcbiAgICAvKipcbiAgICAgKiBSZWxlYXNlIGV2ZXJ5IHByZXZpb3VzbHkgcHJlc3NlZCBrZXkuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICogQG1lbWJlcm9mIFNob3J0Y3V0TWFuYWdlciNcbiAgICAgKi9cbiAgICByZWxlYXNlUHJlc3NlZEtleXM6ICgpID0+IGtleVJlY29yZGVyLnJlbGVhc2VQcmVzc2VkS2V5cygpLFxuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgYSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICogQG1lbWJlcm9mIFNob3J0Y3V0TWFuYWdlciNcbiAgICAgKi9cbiAgICBkZXN0cm95OiAoKSA9PiBrZXlSZWNvcmRlci51bm1vdW50KClcbiAgfTtcbn07XG5leHBvcnRzLmNyZWF0ZVNob3J0Y3V0TWFuYWdlciA9IGNyZWF0ZVNob3J0Y3V0TWFuYWdlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudXNlUmVjb3JkZXIgPSB1c2VSZWNvcmRlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfa2V5T2JzZXJ2ZXIgPSByZXF1aXJlKFwiLi9rZXlPYnNlcnZlclwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbnZhciBfZXZlbnQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb20vZXZlbnRcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi4vaGVscGVycy9kb20vZWxlbWVudFwiKTtcbnZhciBfYnJvd3NlciA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2Jyb3dzZXJcIik7XG5jb25zdCBNT0RJRklFUl9LRVlTID0gWydtZXRhJywgJ2FsdCcsICdzaGlmdCcsICdjb250cm9sJ107XG5jb25zdCBtb2RpZmllcktleXNPYnNlcnZlciA9ICgwLCBfa2V5T2JzZXJ2ZXIuY3JlYXRlS2V5c09ic2VydmVyKSgpO1xuY29uc3QgbW9kS2V5TGlzdGVuZXJzID0gW107XG5sZXQgaW5zdGFuY2VDb3VudGVyID0gMDtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEEga2V5IHJlY29yZGVyLCB1c2VkIGZvciB0cmFja2luZyBrZXkgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IG93bmVyV2luZG93IEEgc3RhcnRpbmcgYHdpbmRvd2AgZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlRXZlbnQgQSBjb25kaXRpb24gb24gd2hpY2ggZXZlbnQgaXMgaGFuZGxlZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGJlZm9yZUtleURvd24gQSBob29rIGZpcmVkIGJlZm9yZSB0aGUgYGtleWRvd25gIGV2ZW50IGlzIGhhbmRsZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBhZnRlcktleURvd24gQSBob29rIGZpcmVkIGFmdGVyIHRoZSBga2V5ZG93bmAgZXZlbnQgaXMgaGFuZGxlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYEtleUV2ZW50YCdzIGxpc3RlbmVyJ3MgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIHVzZVJlY29yZGVyKG93bmVyV2luZG93LCBoYW5kbGVFdmVudCwgYmVmb3JlS2V5RG93biwgYWZ0ZXJLZXlEb3duLCBjYWxsYmFjaykge1xuICAvKipcbiAgICogQ2hlY2sgaWYgYSBwcmVzc2VkIGtleSBpcyB0cmFja2VkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZXNzZWRLZXkgQSBwcmVzc2VkIGtleVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGNvbnN0IGlzTW9kaWZpZXJLZXkgPSBwcmVzc2VkS2V5ID0+IHtcbiAgICByZXR1cm4gTU9ESUZJRVJfS0VZUy5pbmNsdWRlcyhwcmVzc2VkS2V5KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGV2ZXJ5IHByZXNzZWQgbW9kaWZpZXIga2V5IGZyb20gdGhlIHBlcmZvcm1lZCBgS2V5Ym9hcmRFdmVudGAuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbbWVyZ2VNZXRhS2V5cz1mYWxzZV0gSWYgYHRydWUsYCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIFwiY29udHJvbFwiIGFuZCBcIm1ldGFcIlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnMga2V5cyBhcyB0aGUgXCJjb250cm9sL21ldGFcIiBuYW1lLiBUaGlzIGFsbG93cyBjcmVhdGluZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlib2FyZCBzaG9ydGN1dHMgd2l0aCBtb2RpZmllciBrZXkgdGhhdCB0cmlnZ2VyIHRoZSBzaG9ydGN1dFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zIGRlcGVuZCBvbiB0aGUgT1Mga2V5Ym9hcmQgbGF5b3V0ICh0aGUgTWV0YSBrZXkgZm9yIG1hY09TXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBDb250cm9sIGZvciBub24gbWFjT1Mgc3lzdGVtKS5cbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgY29uc3QgZ2V0UHJlc3NlZE1vZGlmaWVyS2V5cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGxldCBtZXJnZU1ldGFLZXlzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICBjb25zdCBwcmVzc2VkTW9kaWZpZXJLZXlzID0gW107XG4gICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgcHJlc3NlZE1vZGlmaWVyS2V5cy5wdXNoKCdhbHQnKTtcbiAgICB9XG4gICAgaWYgKG1lcmdlTWV0YUtleXMgJiYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkpIHtcbiAgICAgIHByZXNzZWRNb2RpZmllcktleXMucHVzaCgnY29udHJvbC9tZXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgIHByZXNzZWRNb2RpZmllcktleXMucHVzaCgnY29udHJvbCcpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgICAgcHJlc3NlZE1vZGlmaWVyS2V5cy5wdXNoKCdtZXRhJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgcHJlc3NlZE1vZGlmaWVyS2V5cy5wdXNoKCdzaGlmdCcpO1xuICAgIH1cbiAgICByZXR1cm4gcHJlc3NlZE1vZGlmaWVyS2V5cztcbiAgfTtcblxuICAvKipcbiAgICogYEtleWJvYXJkRXZlbnRgJ3MgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCBUaGUgZXZlbnQgb2JqZWN0XG4gICAqL1xuICBjb25zdCBvbmtleWRvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKGhhbmRsZUV2ZW50KGV2ZW50KSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYmVmb3JlS2V5RG93bihldmVudCk7XG5cbiAgICAvLyBrZXlDb2RlIDIyOSBha2EgJ3VuaW5pdGlhbGl6ZWQnIGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgd2l0aCBlZGl0b3JzLiBUaGlzIGtleSBjb2RlIGlzXG4gICAgLy8gcHJvZHVjZWQgd2hlbiB1bmZpbmlzaGVkIGNoYXJhY3RlciBpcyBlbnRlcmluZyB1c2luZyB0aGUgSU1FIGVkaXRvci4gSXQgaXMgZmlyZWQgb24gbWFjT1MsXG4gICAgLy8gV2luZG93cyBhbmQgbGludXggKHVidW50dSkgd2l0aCBpbnN0YWxsZWQgaWJ1cy1waW55aW4gcGFja2FnZS5cbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjI5IHx8IHJlc3VsdCA9PT0gZmFsc2UgfHwgKDAsIF9ldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXNzZWRLZXkgPSAoMCwgX3V0aWxzLm5vcm1hbGl6ZUV2ZW50S2V5KShldmVudCk7XG4gICAgbGV0IGV4dHJhTW9kaWZpZXJLZXlzID0gW107XG4gICAgaWYgKCFpc01vZGlmaWVyS2V5KHByZXNzZWRLZXkpKSB7XG4gICAgICBleHRyYU1vZGlmaWVyS2V5cyA9IGdldFByZXNzZWRNb2RpZmllcktleXMoZXZlbnQpO1xuICAgIH1cbiAgICBjb25zdCBwcmVzc2VkS2V5cyA9IFtwcmVzc2VkS2V5XS5jb25jYXQoZXh0cmFNb2RpZmllcktleXMpO1xuICAgIGNvbnN0IGlzRXhlY3V0aW9uQ2FuY2VsbGVkID0gY2FsbGJhY2soZXZlbnQsIHByZXNzZWRLZXlzKTtcbiAgICBpZiAoIWlzRXhlY3V0aW9uQ2FuY2VsbGVkICYmICgoMCwgX2Jyb3dzZXIuaXNNYWNPUykoKSAmJiBleHRyYU1vZGlmaWVyS2V5cy5pbmNsdWRlcygnbWV0YScpIHx8ICEoMCwgX2Jyb3dzZXIuaXNNYWNPUykoKSAmJiBleHRyYU1vZGlmaWVyS2V5cy5pbmNsdWRlcygnY29udHJvbCcpKSkge1xuICAgICAgLy8gVHJpZ2dlciB0aGUgY2FsbGJhY2sgZm9yIHRoZSB2aXJ0dWFsIE9TLWRlcGVuZGVudCBcImNvbnRyb2wvbWV0YVwiIGtleVxuICAgICAgY2FsbGJhY2soZXZlbnQsIFtwcmVzc2VkS2V5XS5jb25jYXQoZ2V0UHJlc3NlZE1vZGlmaWVyS2V5cyhldmVudCwgdHJ1ZSkpKTtcbiAgICB9XG4gICAgYWZ0ZXJLZXlEb3duKGV2ZW50KTtcbiAgfTtcblxuICAvKipcbiAgICogYEtleWJvYXJkRXZlbnRgJ3MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG9ic2VydmluZyB0aGUgcHJlc3NlZCBzdGF0ZSBvZiB0aGUgbW9kIGtleXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7S2V5Ym9hcmRFdmVudH0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdFxuICAgKi9cbiAgY29uc3Qgb25rZXlkb3duRm9yTW9kS2V5cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICBjb25zdCBwcmVzc2VkS2V5ID0gKDAsIF91dGlscy5ub3JtYWxpemVFdmVudEtleSkoZXZlbnQpO1xuICAgICAgaWYgKGlzTW9kaWZpZXJLZXkocHJlc3NlZEtleSkpIHtcbiAgICAgICAgbW9kaWZpZXJLZXlzT2JzZXJ2ZXIucHJlc3MocHJlc3NlZEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBgS2V5Ym9hcmRFdmVudGAncyBjYWxsYmFjayBmdW5jdGlvbiBmb3Igb2JzZXJ2aW5nIHRoZSBwcmVzc2VkIHN0YXRlIG9mIHRoZSBtb2Qga2V5cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtLZXlib2FyZEV2ZW50fSBldmVudCBUaGUgZXZlbnQgb2JqZWN0XG4gICAqL1xuICBjb25zdCBvbmtleXVwRm9yTW9kS2V5cyA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5KSB7XG4gICAgICBjb25zdCBwcmVzc2VkS2V5ID0gKDAsIF91dGlscy5ub3JtYWxpemVFdmVudEtleSkoZXZlbnQpO1xuICAgICAgaWYgKGlzTW9kaWZpZXJLZXkocHJlc3NlZEtleSkpIHtcbiAgICAgICAgbW9kaWZpZXJLZXlzT2JzZXJ2ZXIucmVsZWFzZShwcmVzc2VkS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIGBGb2N1c0V2ZW50YCdzIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdCBvbmJsdXIgPSAoKSA9PiB7XG4gICAgbW9kaWZpZXJLZXlzT2JzZXJ2ZXIucmVsZWFzZUFsbCgpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBZGQgZXZlbnQgbGlzdGVuZXJzIHRvIHRoZSBzdGFydGluZyB3aW5kb3cgYW5kIGl0cyBwYXJlbnRzJyB3aW5kb3dzLlxuICAgKi9cbiAgY29uc3QgbW91bnQgPSAoKSA9PiB7XG4gICAgbGV0IGV2ZW50VGFyZ2V0ID0gb3duZXJXaW5kb3c7XG4gICAgaW5zdGFuY2VDb3VudGVyICs9IDE7XG4gICAgd2hpbGUgKGV2ZW50VGFyZ2V0KSB7XG4gICAgICBpZiAoaW5zdGFuY2VDb3VudGVyID09PSAxKSB7XG4gICAgICAgIGV2ZW50VGFyZ2V0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25rZXlkb3duRm9yTW9kS2V5cyk7XG4gICAgICAgIG1vZEtleUxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgICBldmVudDogJ2tleWRvd24nLFxuICAgICAgICAgIGxpc3RlbmVyOiBvbmtleWRvd25Gb3JNb2RLZXlzXG4gICAgICAgIH0pO1xuICAgICAgICBldmVudFRhcmdldC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBvbmtleXVwRm9yTW9kS2V5cyk7XG4gICAgICAgIG1vZEtleUxpc3RlbmVycy5wdXNoKHtcbiAgICAgICAgICBldmVudDogJ2tleXVwJyxcbiAgICAgICAgICBsaXN0ZW5lcjogb25rZXl1cEZvck1vZEtleXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBldmVudFRhcmdldC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9ua2V5ZG93bik7XG4gICAgICBldmVudFRhcmdldC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIG9uYmx1cik7XG4gICAgICBldmVudFRhcmdldCA9ICgwLCBfZWxlbWVudC5nZXRQYXJlbnRXaW5kb3cpKGV2ZW50VGFyZ2V0KTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBldmVudCBsaXN0ZW5lcnMgZnJvbSB0aGUgc3RhcnRpbmcgd2luZG93IGFuZCBpdHMgcGFyZW50cycgd2luZG93cy5cbiAgICovXG4gIGNvbnN0IHVubW91bnQgPSAoKSA9PiB7XG4gICAgbGV0IGV2ZW50VGFyZ2V0ID0gb3duZXJXaW5kb3c7XG4gICAgaW5zdGFuY2VDb3VudGVyIC09IDE7XG4gICAgd2hpbGUgKGV2ZW50VGFyZ2V0KSB7XG4gICAgICBpZiAoaW5zdGFuY2VDb3VudGVyID09PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kS2V5TGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBsaXN0ZW5lclxuICAgICAgICAgIH0gPSBtb2RLZXlMaXN0ZW5lcnNbaV07XG4gICAgICAgICAgZXZlbnRUYXJnZXQuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBtb2RLZXlMaXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgICAgIH1cbiAgICAgIGV2ZW50VGFyZ2V0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25rZXlkb3duKTtcbiAgICAgIGV2ZW50VGFyZ2V0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgb25ibHVyKTtcbiAgICAgIGV2ZW50VGFyZ2V0ID0gKDAsIF9lbGVtZW50LmdldFBhcmVudFdpbmRvdykoZXZlbnRUYXJnZXQpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBtb3VudCxcbiAgICB1bm1vdW50LFxuICAgIGlzUHJlc3NlZDoga2V5ID0+IG1vZGlmaWVyS2V5c09ic2VydmVyLmlzUHJlc3NlZChrZXkpLFxuICAgIHJlbGVhc2VQcmVzc2VkS2V5czogKCkgPT4gbW9kaWZpZXJLZXlzT2JzZXJ2ZXIucmVsZWFzZUFsbCgpXG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG4vLyBUaGlzIGZpbGUgaGFuZGxlcyBrZXktbmFtZSBkaXNjcmVwYW5jaWVzIGJldHdlZW4gYnJvd3NlcnMuXG4vLyBGb3IgdGhlIGxpc3Qgb2YgZGlzY3JlcGFuY2llcywgZ28gdG86IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLlxuY29uc3QgbWFwcGluZ3MgPSBuZXcgTWFwKFtbJyAnLCAnc3BhY2UnXSxcbi8vIGN1c3RvbSBtYXBwaW5nXG5bJ3NwYWNlYmFyJywgJ3NwYWNlJ10sIFsnc2Nyb2xsJywgJ3Njcm9sbGxvY2snXSwgWydkZWwnLCAnZGVsZXRlJ10sIFsnZXNjJywgJ2VzY2FwZSddLCBbJ21lZGlhbmV4dHRyYWNrJywgJ21lZGlhdHJhY2tuZXh0J10sIFsnbWVkaWFwcmV2aW91c3RyYWNrJywgJ21lZGlhdHJhY2twcmV2aW91cyddLCBbJ3ZvbHVtZXVwJywgJ2F1ZGlvdm9sdW1ldXAnXSwgWyd2b2x1bWVkb3duJywgJ2F1ZGlvdm9sdW1lZG93biddLCBbJ3ZvbHVtZW11dGUnLCAnYXVkaW92b2x1bWVtdXRlJ10sIFsnbXVsdGlwbHknLCAnKiddLCBbJ2FkZCcsICcrJ10sIFsnZGl2aWRlJywgJy8nXSwgWydzdWJ0cmFjdCcsICctJ10sIFsnbGVmdCcsICdhcnJvd2xlZnQnXSwgWydyaWdodCcsICdhcnJvd3JpZ2h0J10sIFsndXAnLCAnYXJyb3d1cCddLCBbJ2Rvd24nLCAnYXJyb3dkb3duJ11dKTtcblxuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuXG4vKipcbiAqIEdldCBhIHNpbmdsZSwgbm9ybWFsaXplZCBzdHJpbmcgZnJvbSB0aGUgbGlzdCBvZiB0aGUgYEtleWJvYXJkRXZlbnQua2V5YCBwcm9wZXJ0aWVzLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5cyBUaGUgbGlzdCBvZiB0aGUgYEtleWJvYXJkRXZlbnQua2V5YCBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBub3JtYWxpemVLZXlzID0ga2V5cyA9PiB7XG4gIHJldHVybiBrZXlzLm1hcChrZXkgPT4ge1xuICAgIGNvbnN0IGxvd2VyY2FzZUtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChtYXBwaW5ncy5oYXMobG93ZXJjYXNlS2V5KSkge1xuICAgICAgcmV0dXJuIG1hcHBpbmdzLmdldChsb3dlcmNhc2VLZXkpO1xuICAgIH1cbiAgICByZXR1cm4gbG93ZXJjYXNlS2V5O1xuICB9KS5zb3J0KCkuam9pbignKycpO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Qgb2YgdGhlIGBLZXlib2FyZEV2ZW50LmtleWAgcHJvcGVydGllcyBmcm9tIGEgc2luZ2xlLCBub3JtYWxpemVkIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZEtleXMgQSBzaW5nbGUsIG5vcm1hbGl6ZWQgc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIGxpc3Qgb2YgdGhlIGBLZXlib2FyZEV2ZW50LmtleWAgcHJvcGVydGllc1xuICogQHJldHVybnMge0FycmF5PHN0cmluZz59XG4gKi9cbmV4cG9ydHMubm9ybWFsaXplS2V5cyA9IG5vcm1hbGl6ZUtleXM7XG5jb25zdCBnZXRLZXlzTGlzdCA9IG5vcm1hbGl6ZWRLZXlzID0+IHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRLZXlzLnNwbGl0KCcrJyk7XG59O1xuXG4vKipcbiAqIFRoZSByZWdleCB0ZXN0cyBpZiB0aGUgZXZlbnQuY29kZSBtYXRjaGVzIHRvIHRoZSBwYXR0ZXJuIGFuZCBpdCdzIHVzZWQgdG8gZXh0cmFjdCBsZXR0ZXJzIGFuZCBkaWdpdHMgZnJvbVxuICogdGhlIHN0cmluZy5cbiAqL1xuZXhwb3J0cy5nZXRLZXlzTGlzdCA9IGdldEtleXNMaXN0O1xuY29uc3QgY29kZVRvS2V5UmVnRXhwID0gbmV3IFJlZ0V4cCgnXig/OktleXxEaWdpdCkoW0EtWjAtOV0pJCcpO1xuY29uc3Qga2V5Q29kZU5hbWVzID0gbmV3IFNldChbJ0JhY2txdW90ZScsICdNaW51cycsICdFcXVhbCcsICdCcmFja2V0TGVmdCcsICdCcmFja2V0UmlnaHQnLCAnQmFja3NsYXNoJywgJ1NlbWljb2xvbicsICdRdW90ZScsICdDb21tYScsICdQZXJpb2QnLCAnU2xhc2gnXSk7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIGtleWJvYXJkIGV2ZW50IGtleSB2YWx1ZSB0byBhIGtleSBiZWZvcmUgaXRzIG1vZGlmaWNhdGlvbi4gV2hlbiB0aGUga2V5Ym9hcmQgZXZlbnRcbiAqIGlzIHRyaWdnZXJlZCB3aXRoIEFsdCwgQ29udHJvbCBvciBTaGlmdCBrZXlzIHRoZSBga2V5YCBwcm9wZXJ0eSBjb250YWlucyBtb2RpZmllZCBrZXkgZS5nLiBmb3IgQWx0K0xcbiAqIGl0IHdpbGwgYmUgYMWCYC4gQnV0IHRoYXQgdmFsdWUgaXMgb25seSB2YWxpZCBmb3IgcG9saXNoIGtleWJvYXJkIGxheW91dC4gVG8gZml4IHRoYXQgbGltaXRhdGlvbnMsIGZvclxuICogbGV0dGVycyBhbmQgZGlnaXRzIHRoZSB2YWx1ZSBpcyB0YWtlbiBmcm9tIHRoZSBgY29kZWAgcHJvcGVydHkgd2hpY2ggaG9sZHMgb3JpZ2luYWwgdmFsdWUgYmVmb3JlXG4gKiB0cmFuc2Zvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudCBUaGUgS2V5Ym9hcmRFdmVudCBvYmplY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBub3JtYWxpemVFdmVudEtleSA9IF9yZWYgPT4ge1xuICBsZXQge1xuICAgIGtleSxcbiAgICBjb2RlXG4gIH0gPSBfcmVmO1xuICBsZXQgbm9ybWFsaXplZEtleSA9IGtleTtcbiAgaWYgKGNvZGVUb0tleVJlZ0V4cC50ZXN0KGNvZGUpKSB7XG4gICAgbm9ybWFsaXplZEtleSA9IGNvZGUucmVwbGFjZShjb2RlVG9LZXlSZWdFeHAsICckMScpO1xuICB9IGVsc2UgaWYgKGtleUNvZGVOYW1lcy5oYXMoY29kZSkpIHtcbiAgICBub3JtYWxpemVkS2V5ID0gY29kZTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZEtleS50b0xvd2VyQ2FzZSgpO1xufTtcbmV4cG9ydHMubm9ybWFsaXplRXZlbnRLZXkgPSBub3JtYWxpemVFdmVudEtleTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX2VsZW1lbnQgPSByZXF1aXJlKFwiLi9oZWxwZXJzL2RvbS9lbGVtZW50XCIpO1xudmFyIF9ldmVudE1hbmFnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2V2ZW50TWFuYWdlclwiKSk7XG52YXIgX2V2ZW50ID0gcmVxdWlyZShcIi4vaGVscGVycy9kb20vZXZlbnRcIik7XG52YXIgX3NyYyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vM3JkcGFydHkvd2Fsa29udGFibGUvc3JjXCIpKTtcbnZhciBfbW91c2VFdmVudEhhbmRsZXIgPSByZXF1aXJlKFwiLi9zZWxlY3Rpb24vbW91c2VFdmVudEhhbmRsZXJcIik7XG52YXIgX3Jvb3RJbnN0YW5jZSA9IHJlcXVpcmUoXCIuL3V0aWxzL3Jvb3RJbnN0YW5jZVwiKTtcbnZhciBfYTExeSA9IHJlcXVpcmUoXCIuL2hlbHBlcnMvYTExeVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMob2JqLCBwcml2YXRlU2V0KSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZVNldCk7IHByaXZhdGVTZXQuYWRkKG9iaik7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEdldChzLCBhKSB7IHJldHVybiBzLmdldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZFNldChzLCBhLCByKSB7IHJldHVybiBzLnNldChfYXNzZXJ0Q2xhc3NCcmFuZChzLCBhKSwgciksIHI7IH1cbmZ1bmN0aW9uIF9hc3NlcnRDbGFzc0JyYW5kKGUsIHQsIG4pIHsgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZSA/IGUgPT09IHQgOiBlLmhhcyh0KSkgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdCA6IG47IHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3RcIik7IH1cbi8qKlxuICogQGNsYXNzIFRhYmxlVmlld1xuICogQHByaXZhdGVcbiAqL1xudmFyIF9jb2x1bW5IZWFkZXJzQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfcm93SGVhZGVyc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX3NlbGVjdGlvbk1vdXNlRG93biA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xudmFyIF9tb3VzZURvd24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfdGFibGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfbGFzdFdpZHRoID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG52YXIgX2xhc3RIZWlnaHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfVGFibGVWaWV3X2JyYW5kID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG5jbGFzcyBUYWJsZVZpZXcge1xuICAvKipcbiAgICogQHBhcmFtIHtIYW5zdG9udGFibGV9IGhvdEluc3RhbmNlIEluc3RhbmNlIG9mIHtAbGluayBIYW5kc29udGFibGV9LlxuICAgKi9cbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBgYXJpYS1jb2xjb3VudGAgYXR0cmlidXRlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn0gVGhlIHZhbHVlIG9mIHRoZSBgYXJpYS1jb2xjb3VudGAgYXR0cmlidXRlLlxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfVGFibGVWaWV3X2JyYW5kKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgSGFuZHNvbnRhYmxlfS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hhbmRzb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBJbnN0YW5jZSBvZiB7QGxpbmsgRXZlbnRNYW5hZ2VyfS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0V2ZW50TWFuYWdlcn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJldmVudE1hbmFnZXJcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBDdXJyZW50IEhhbmRzb250YWJsZSdzIEdyaWRTZXR0aW5ncyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtHcmlkU2V0dGluZ3N9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwic2V0dGluZ3NcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBNYWluIDxUSEVBRD4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIlRIRUFEXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogTWFpbiA8VEJPRFk+IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtIVE1MVGFibGVTZWN0aW9uRWxlbWVudH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJUQk9EWVwiLCB2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIE1haW4gV2Fsa29udGFibGUgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtXYWxrb250YWJsZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfd3RcIiwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBNYWluIFdhbGtvbnRhYmxlIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHR5cGUge1dhbGtvbnRhYmxlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImFjdGl2ZVd0XCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiB0aGUgY29sdW1uIGhlYWRlciByZW5kZXJlcnMgYXBwbGllZCB0byB0aGUgdGFibGUgdGhyb3VnaCB0aGVcbiAgICAgKiBgYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnNgIGhvb2suXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jb2x1bW5IZWFkZXJzQ291bnQsIDApO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgdGhlIHJvdyBoZWFkZXIgcmVuZGVyZXJzIGFwcGxpZWQgdG8gdGhlIHRhYmxlIHRocm91Z2ggdGhlXG4gICAgICogYGFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzYCBob29rLlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm93SGVhZGVyc0NvdW50LCAwKTtcbiAgICAvKipcbiAgICAgKiBUaGUgZmxhZyBkZXRlcm1pbmVzIGlmIHRoZSBgYWRqdXN0RWxlbWVudHNTaXplYCBtZXRob2QgY2FsbCB3YXMgbWFkZSBkdXJpbmdcbiAgICAgKiB0aGUgcmVuZGVyIHN1c3BlbmRpbmcuIElmIHRydWUsIHRoZSBtZXRob2QgaGFzIHRvIGJlIHRyaWdnZXJlZCBvbmNlIGFmdGVyIHJlbmRlclxuICAgICAqIHJlc3VtaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemVcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgaWYgdGhlIHRleHQgc2hvdWxkIGJlIHNlbGVjdGVkIGR1cmluZyBtb3VzZW1vdmUuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2VsZWN0aW9uTW91c2VEb3duLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX21vdXNlRG93biwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBNYWluIDxUQUJMRT4gZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MVGFibGVFbGVtZW50fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90YWJsZSwgdm9pZCAwKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgd2lkdGggb2YgdGhlIHJvb3RFbGVtZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbGFzdFdpZHRoLCAwKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZWQgaGVpZ2h0IG9mIHRoZSByb290RWxlbWVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2xhc3RIZWlnaHQsIDApO1xuICAgIHRoaXMuaG90ID0gaG90SW5zdGFuY2U7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIgPSBuZXcgX2V2ZW50TWFuYWdlci5kZWZhdWx0KHRoaXMuaG90KTtcbiAgICB0aGlzLnNldHRpbmdzID0gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtcbiAgICB0aGlzLmNyZWF0ZUVsZW1lbnRzKCk7XG4gICAgdGhpcy5yZWdpc3RlckV2ZW50cygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVdhbGtvbnRhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBXYWxrb250YWJsZVVJLlxuICAgKi9cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQoKSkge1xuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVJlbmRlcicsIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcik7XG4gICAgICBpZiAodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUpIHtcbiAgICAgICAgdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZGp1c3RFbGVtZW50c1NpemUodHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl93dC5kcmF3KCF0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpO1xuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyUmVuZGVyJywgdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKTtcbiAgICAgIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5ob3QucmVuZGVyQ2FsbCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGp1c3Qgb3ZlcmxheXMgZWxlbWVudHMgc2l6ZSBhbmQgbWFzdGVyIHRhYmxlIHNpemUuXG4gICAqL1xuICBhZGp1c3RFbGVtZW50c1NpemUoKSB7XG4gICAgaWYgKHRoaXMuaG90LmlzUmVuZGVyU3VzcGVuZGVkKCkpIHtcbiAgICAgIHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0ZCBvYmplY3QgZ2l2ZW4gY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFJlbmRlcmFibGUgY2VsbCBjb29yZGluYXRlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSB0b3Btb3N0IEluZGljYXRlcyB3aGV0aGVyIHRoZSBjZWxsIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIHRvcG1vc3QuXG4gICAqIEByZXR1cm5zIHtIVE1MVGFibGVDZWxsRWxlbWVudHxudWxsfVxuICAgKi9cbiAgZ2V0Q2VsbEF0Q29vcmRzKGNvb3JkcywgdG9wbW9zdCkge1xuICAgIGNvbnN0IHRkID0gdGhpcy5fd3QuZ2V0Q2VsbChjb29yZHMsIHRvcG1vc3QpO1xuICAgIGlmICh0ZCA8IDApIHtcbiAgICAgIC8vIHRoZXJlIHdhcyBhbiBleGl0IGNvZGUgKGNlbGwgaXMgb3V0IG9mIGJvdW5kcylcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGQ7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHZpZXdwb3J0IHRvIGEgY2VsbC5cbiAgICpcbiAgICogQHBhcmFtIHtDZWxsQ29vcmRzfSBjb29yZHMgUmVuZGVyYWJsZSBjZWxsIGNvb3JkaW5hdGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9Ub3BdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgdG9wIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvUmlnaHRdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0JvdHRvbV0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSBib3R0b20gc2lkZSBvZiB0aGUgdGFibGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NuYXBUb0xlZnRdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzY3JvbGxWaWV3cG9ydChjb29yZHMsIHNuYXBUb1RvcCwgc25hcFRvUmlnaHQsIHNuYXBUb0JvdHRvbSwgc25hcFRvTGVmdCkge1xuICAgIHJldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydChjb29yZHMsIHNuYXBUb1RvcCwgc25hcFRvUmlnaHQsIHNuYXBUb0JvdHRvbSwgc25hcFRvTGVmdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHZpZXdwb3J0IHRvIGEgY29sdW1uLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIFJlbmRlcmFibGUgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9SaWdodF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvTGVmdF0gSWYgYHRydWVgLCB2aWV3cG9ydCBpcyBzY3JvbGxlZCB0byBzaG93IHRoZSBjZWxsIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRhYmxlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGNvbHVtbiwgc25hcFRvUmlnaHQsIHNuYXBUb0xlZnQpIHtcbiAgICByZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoY29sdW1uLCBzbmFwVG9SaWdodCwgc25hcFRvTGVmdCk7XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHZpZXdwb3J0IHRvIGEgcm93LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93IFJlbmRlcmFibGUgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtzbmFwVG9Ub3BdIElmIGB0cnVlYCwgdmlld3BvcnQgaXMgc2Nyb2xsZWQgdG8gc2hvdyB0aGUgY2VsbCBvbiB0aGUgdG9wIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc25hcFRvQm90dG9tXSBJZiBgdHJ1ZWAsIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHNob3cgdGhlIGNlbGwgb24gdGhlIGJvdHRvbSBzaWRlIG9mIHRoZSB0YWJsZS5cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkocm93LCBzbmFwVG9Ub3AsIHNuYXBUb0JvdHRvbSkge1xuICAgIHJldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkocm93LCBzbmFwVG9Ub3AsIHNuYXBUb0JvdHRvbSk7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgRE9NRWxlbWVudHMgYW5kIGFkZHMgY29ycmVjdCBjbGFzc05hbWUgdG8gdGhlIHJvb3QgZWxlbWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUVsZW1lbnRzKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3RFbGVtZW50LFxuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IG9yaWdpbmFsU3R5bGUgPSByb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgaWYgKG9yaWdpbmFsU3R5bGUpIHtcbiAgICAgIHJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1vcmlnaW5hbHN0eWxlJywgb3JpZ2luYWxTdHlsZSk7IC8vIG5lZWRlZCB0byByZXRyaWV2ZSBvcmlnaW5hbCBzdHlsZSBpbiBqc0ZpZGRsZSBsaW5rIGdlbmVyYXRvciBpbiBIVCBleGFtcGxlcy4gbWF5IGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zXG4gICAgfVxuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykocm9vdEVsZW1lbnQsICdoYW5kc29udGFibGUnKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX3RhYmxlLCB0aGlzLCByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEFCTEUnKSk7XG4gICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhYmxlLCB0aGlzKSwgJ2h0Q29yZScpO1xuICAgIGlmICh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuYWRkQ2xhc3MpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFibGUsIHRoaXMpLCB0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MpIHtcbiAgICAgICgwLCBfZWxlbWVudC5zZXRBdHRyaWJ1dGUpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFibGUsIHRoaXMpLCBbKDAsIF9hMTF5LkExMVlfUFJFU0VOVEFUSU9OKSgpXSk7XG4gICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShyb290RWxlbWVudCwgWygwLCBfYTExeS5BMTFZX1RSRUVHUklEKSgpLCAoMCwgX2ExMXkuQTExWV9ST1dDT1VOVCkoLTEpLCAoMCwgX2ExMXkuQTExWV9DT0xDT1VOVCkodGhpcy5ob3QuY291bnRDb2xzKCkpLCAoMCwgX2ExMXkuQTExWV9NVUxUSVNFTEVDVEFCTEUpKCldKTtcbiAgICB9XG4gICAgdGhpcy5USEVBRCA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdUSEVBRCcpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFibGUsIHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEhFQUQpO1xuICAgIHRoaXMuVEJPRFkgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEJPRFknKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhYmxlLCB0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKTtcbiAgICB0aGlzLmhvdC50YWJsZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfdGFibGUsIHRoaXMpO1xuICAgIHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF90YWJsZSwgdGhpcyksIHRoaXMuaG90LmNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyBuZWNlc3NhcnkgbGlzdGVuZXJzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVnaXN0ZXJFdmVudHMoKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdEVsZW1lbnQsXG4gICAgICByb290RG9jdW1lbnQsXG4gICAgICBzZWxlY3Rpb24sXG4gICAgICByb290V2luZG93XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IHJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ21vdXNlZG93bicsIGV2ZW50ID0+IHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VsZWN0aW9uTW91c2VEb3duLCB0aGlzLCB0cnVlKTtcbiAgICAgIGlmICghdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmNsZWFyVGV4dFNlbGVjdGlvbikocm9vdFdpbmRvdyk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJvb3RXaW5kb3cuZm9jdXMoKTsgLy8gbWFrZSBzdXJlIHRoYXQgd2luZG93IHRoYXQgY29udGFpbnMgSE9UIGlzIGFjdGl2ZS4gSW1wb3J0YW50IHdoZW4gSE9UIGlzIGluIGlmcmFtZS5cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHJvb3RFbGVtZW50LCAnbW91c2V1cCcsICgpID0+IHtcbiAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfc2VsZWN0aW9uTW91c2VEb3duLCB0aGlzLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihyb290RWxlbWVudCwgJ21vdXNlbW92ZScsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX3NlbGVjdGlvbk1vdXNlRG93biwgdGhpcykgJiYgIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChldmVudC50YXJnZXQpKSB7XG4gICAgICAgIC8vIENsZWFyIHNlbGVjdGlvbiBvbmx5IHdoZW4gZnJhZ21lbnRTZWxlY3Rpb24gaXMgZW5hYmxlZCwgb3RoZXJ3aXNlIGNsZWFyaW5nIHNlbGVjdGlvbiBicmVha3MgdGhlIElNRSBlZGl0b3IuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgKDAsIF9lbGVtZW50LmNsZWFyVGV4dFNlbGVjdGlvbikocm9vdFdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ2tleXVwJywgZXZlbnQgPT4ge1xuICAgICAgLy8gVE9ETzogaXMgaXQgdGhlIGJlc3QgcGxhY2UgYW5kIHdheSB0byBmaW5pc2ggY2VsbCBzZWxlY3Rpb24/XG4gICAgICBpZiAoc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICBzZWxlY3Rpb24uZmluaXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihkb2N1bWVudEVsZW1lbnQsICdtb3VzZXVwJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSAmJiAoMCwgX2V2ZW50LmlzTGVmdENsaWNrKShldmVudCkpIHtcbiAgICAgICAgc2VsZWN0aW9uLmZpbmlzaCgpO1xuICAgICAgfVxuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tb3VzZURvd24sIHRoaXMsIGZhbHNlKTtcbiAgICAgIGNvbnN0IGlzT3V0c2lkZUlucHV0RWxlbWVudCA9ICgwLCBfZWxlbWVudC5pc091dHNpZGVJbnB1dCkocm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgaWYgKCgwLCBfZWxlbWVudC5pc0lucHV0KShyb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgJiYgIWlzT3V0c2lkZUlucHV0RWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNPdXRzaWRlSW5wdXRFbGVtZW50IHx8ICFzZWxlY3Rpb24uaXNTZWxlY3RlZCgpICYmICFzZWxlY3Rpb24uaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkgJiYgIXJvb3RFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgISgwLCBfZXZlbnQuaXNSaWdodENsaWNrKShldmVudCkpIHtcbiAgICAgICAgdGhpcy5ob3QudW5saXN0ZW4oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ2NvbnRleHRtZW51JywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSAmJiAoMCwgX2V2ZW50LmlzUmlnaHRDbGljaykoZXZlbnQpKSB7XG4gICAgICAgIHNlbGVjdGlvbi5maW5pc2goKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tb3VzZURvd24sIHRoaXMsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGRvY3VtZW50RWxlbWVudCwgJ3RvdWNoZW5kJywgKCkgPT4ge1xuICAgICAgaWYgKHNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSkge1xuICAgICAgICBzZWxlY3Rpb24uZmluaXNoKCk7XG4gICAgICB9XG4gICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX21vdXNlRG93biwgdGhpcywgZmFsc2UpO1xuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnRFbGVtZW50LCAnbW91c2Vkb3duJywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxUYXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBjb25zdCBldmVudFggPSBldmVudC54IHx8IGV2ZW50LmNsaWVudFg7XG4gICAgICBjb25zdCBldmVudFkgPSBldmVudC55IHx8IGV2ZW50LmNsaWVudFk7XG4gICAgICBsZXQgbmV4dCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQoX21vdXNlRG93biwgdGhpcykgfHwgIXJvb3RFbGVtZW50IHx8ICF0aGlzLmhvdC52aWV3KSB7XG4gICAgICAgIHJldHVybjsgLy8gaXQgbXVzdCBoYXZlIGJlZW4gc3RhcnRlZCBpbiBhIGNlbGxcbiAgICAgIH1cblxuICAgICAgLy8gaW1tZWRpYXRlIGNsaWNrIG9uIFwiaG9sZGVyXCIgbWVhbnMgY2xpY2sgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdmVydGljYWwgc2Nyb2xsYmFyXG4gICAgICBjb25zdCB7XG4gICAgICAgIGhvbGRlclxuICAgICAgfSA9IHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGU7XG4gICAgICBpZiAobmV4dCA9PT0gaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gKDAsIF9lbGVtZW50LmdldFNjcm9sbGJhcldpZHRoKShyb290RG9jdW1lbnQpO1xuICAgICAgICBpZiAocm9vdERvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZXZlbnRYICsgc2Nyb2xsYmFyV2lkdGgsIGV2ZW50WSkgIT09IGhvbGRlciB8fCByb290RG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudFgsIGV2ZW50WSArIHNjcm9sbGJhcldpZHRoKSAhPT0gaG9sZGVyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAobmV4dCAhPT0gZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5pc1RhcmdldFdlYkNvbXBvbmVudCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2xpY2sgb24gc29tZXRoaW5nIHRoYXQgd2FzIGEgcm93IGJ1dCBub3cgaXMgZGV0YWNoZWQgKHBvc3NpYmx5IGJlY2F1c2UgeW91ciBjbGljayB0cmlnZ2VyZWQgYSByZXJlbmRlcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG5leHQgPT09IHJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBjbGljayBpbnNpZGUgY29udGFpbmVyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZnVuY3Rpb24gZGlkIG5vdCByZXR1cm4gdW50aWwgaGVyZSwgd2UgaGF2ZSBhbiBvdXRzaWRlIGNsaWNrIVxuICAgICAgY29uc3Qgb3V0c2lkZUNsaWNrRGVzZWxlY3RzID0gdHlwZW9mIHRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzID09PSAnZnVuY3Rpb24nID8gdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMob3JpZ2luYWxUYXJnZXQpIDogdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM7XG4gICAgICBpZiAob3V0c2lkZUNsaWNrRGVzZWxlY3RzKSB7XG4gICAgICAgIHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ob3QuZGVzdHJveUVkaXRvcihmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGxldCBwYXJlbnRXaW5kb3cgPSAoMCwgX2VsZW1lbnQuZ2V0UGFyZW50V2luZG93KShyb290V2luZG93KTtcbiAgICB3aGlsZSAocGFyZW50V2luZG93ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHBhcmVudFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgICAgdGhpcy5ob3QudW5saXN0ZW4oKTtcbiAgICAgIH0pO1xuICAgICAgcGFyZW50V2luZG93ID0gKDAsIF9lbGVtZW50LmdldFBhcmVudFdpbmRvdykocGFyZW50V2luZG93KTtcbiAgICB9XG4gICAgdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhYmxlLCB0aGlzKSwgJ3NlbGVjdHN0YXJ0JywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24gfHwgKDAsIF9lbGVtZW50LmlzSW5wdXQpKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvaXNzdWVzLzE2MFxuICAgICAgLy8gUHJldmVudCB0ZXh0IGZyb20gYmVpbmcgc2VsZWN0ZWQgd2hlbiBwZXJmb3JtaW5nIGRyYWcgZG93bi5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJhbnNsYXRlIHJlbmRlcmFibGUgY2VsbCBjb29yZGluYXRlcyB0byB2aXN1YWwgY29vcmRpbmF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2VsbENvb3Jkc30gY29vcmRzIFRoZSBjZWxsIGNvb3JkaW5hdGVzLlxuICAgKiBAcmV0dXJucyB7Q2VsbENvb3Jkc31cbiAgICovXG4gIHRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoX3JlZikge1xuICAgIGxldCB7XG4gICAgICByb3csXG4gICAgICBjb2xcbiAgICB9ID0gX3JlZjtcbiAgICAvLyBUT0RPOiBUbyBjb25zaWRlciBhbiBpZGVhIHRvIHJldXNpbmcgdGhlIENlbGxDb29yZHMgaW5zdGFuY2UgaW5zdGVhZCBjcmVhdGluZyBuZXcgb25lLlxuICAgIHJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChyb3csIGNvbCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZSByZW5kZXJhYmxlIHJvdyBhbmQgY29sdW1uIGluZGV4ZXMgdG8gdmlzdWFsIHJvdyBhbmQgY29sdW1uIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZW5kZXJhYmxlUm93IFJlbmRlcmFibGUgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVuZGVyYWJsZUNvbHVtbiBSZW5kZXJhYmxlIGNvbHVtbkluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119XG4gICAqL1xuICB0cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgocmVuZGVyYWJsZVJvdywgcmVuZGVyYWJsZUNvbHVtbikge1xuICAgIC8vIFRPRE86IFNvbWUgaGVscGVyIG1heSBiZSBuZWVkZWQuXG4gICAgLy8gV2UgcGVyZm9ybSB0cmFuc2xhdGlvbiBmb3IgaW5kZXhlcyAod2l0aG91dCBoZWFkZXJzKS5cbiAgICBsZXQgdmlzdWFsUm93ID0gcmVuZGVyYWJsZVJvdyA+PSAwID8gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlUm93KSA6IHJlbmRlcmFibGVSb3c7XG4gICAgbGV0IHZpc3VhbENvbHVtbiA9IHJlbmRlcmFibGVDb2x1bW4gPj0gMCA/IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZUNvbHVtbikgOiByZW5kZXJhYmxlQ29sdW1uO1xuICAgIGlmICh2aXN1YWxSb3cgPT09IG51bGwpIHtcbiAgICAgIHZpc3VhbFJvdyA9IHJlbmRlcmFibGVSb3c7XG4gICAgfVxuICAgIGlmICh2aXN1YWxDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgIHZpc3VhbENvbHVtbiA9IHJlbmRlcmFibGVDb2x1bW47XG4gICAgfVxuICAgIHJldHVybiBbdmlzdWFsUm93LCB2aXN1YWxDb2x1bW5dO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZW5kZXJhYmxlIGluZGV4ZXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7SW5kZXhNYXBwZXJ9IGluZGV4TWFwcGVyIFRoZSBJbmRleE1hcHBlciBpbnN0YW5jZSBmb3Igc3BlY2lmaWMgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heEVsZW1lbnRzIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIChyb3dzIG9yIGNvbHVtbnMpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfCp9XG4gICAqL1xuICBjb3VudFJlbmRlcmFibGVJbmRleGVzKGluZGV4TWFwcGVyLCBtYXhFbGVtZW50cykge1xuICAgIGNvbnN0IGNvbnNpZGVyZWRFbGVtZW50cyA9IE1hdGgubWluKGluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksIG1heEVsZW1lbnRzKTtcbiAgICAvLyBEb24ndCB0YWtlIGhpZGRlbiBpbmRleGVzIGludG8gYWNjb3VudC4gV2UgYXJlIGxvb2tpbmcganVzdCBmb3IgcmVuZGVyYWJsZSBpbmRleGVzLlxuICAgIGNvbnN0IGZpcnN0Tm90SGlkZGVuSW5kZXggPSBpbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY29uc2lkZXJlZEVsZW1lbnRzIC0gMSwgLTEpO1xuXG4gICAgLy8gVGhlcmUgYXJlIG5vIHJlbmRlcmFibGUgaW5kZXhlcy5cbiAgICBpZiAoZmlyc3ROb3RIaWRkZW5JbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBpbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGZpcnN0Tm90SGlkZGVuSW5kZXgpICsgMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVuZGVyYWJsZSBjb2x1bW5zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnRSZW5kZXJhYmxlQ29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLCB0aGlzLnNldHRpbmdzLm1heENvbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZW5kZXJhYmxlIHJvd3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudFJlbmRlcmFibGVSb3dzKCkge1xuICAgIHJldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsIHRoaXMuc2V0dGluZ3MubWF4Um93cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBudW1iZXIgb2Ygbm90IGhpZGRlbiByb3cgaW5kZXhlcyBjb3VudGluZyBmcm9tIHRoZSBwYXNzZWQgc3RhcnRpbmcgaW5kZXguXG4gICAqIFRoZSBjb3VudGluZyBkaXJlY3Rpb24gY2FuIGJlIGNvbnRyb2xsZWQgYnkgYGluY3JlbWVudEJ5YCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEluZGV4IFRoZSB2aXN1YWwgaW5kZXggZnJvbSB3aGljaCB0aGUgY291bnRpbmcgYmVnaW5zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5jcmVtZW50QnkgSWYgYC0xYCB0aGVuIGNvdW50aW5nIGlzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHdoZW4gYDFgLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKHZpc3VhbEluZGV4LCBpbmNyZW1lbnRCeSkge1xuICAgIHJldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyh2aXN1YWxJbmRleCwgaW5jcmVtZW50QnksIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLCB0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBudW1iZXIgb2Ygbm90IGhpZGRlbiBjb2x1bW4gaW5kZXhlcyBjb3VudGluZyBmcm9tIHRoZSBwYXNzZWQgc3RhcnRpbmcgaW5kZXguXG4gICAqIFRoZSBjb3VudGluZyBkaXJlY3Rpb24gY2FuIGJlIGNvbnRyb2xsZWQgYnkgYGluY3JlbWVudEJ5YCBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEluZGV4IFRoZSB2aXN1YWwgaW5kZXggZnJvbSB3aGljaCB0aGUgY291bnRpbmcgYmVnaW5zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5jcmVtZW50QnkgSWYgYC0xYCB0aGVuIGNvdW50aW5nIGlzIGJhY2t3YXJkcyBvciBmb3J3YXJkIHdoZW4gYDFgLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKHZpc3VhbEluZGV4LCBpbmNyZW1lbnRCeSkge1xuICAgIHJldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyh2aXN1YWxJbmRleCwgaW5jcmVtZW50QnksIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLCB0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBudW1iZXIgb2Ygbm90IGhpZGRlbiBpbmRleGVzIGNvdW50aW5nIGZyb20gdGhlIHBhc3NlZCBzdGFydGluZyBpbmRleC5cbiAgICogVGhlIGNvdW50aW5nIGRpcmVjdGlvbiBjYW4gYmUgY29udHJvbGxlZCBieSBgaW5jcmVtZW50QnlgIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsSW5kZXggVGhlIHZpc3VhbCBpbmRleCBmcm9tIHdoaWNoIHRoZSBjb3VudGluZyBiZWdpbnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmNyZW1lbnRCeSBJZiBgLTFgIHRoZW4gY291bnRpbmcgaXMgYmFja3dhcmRzIG9yIGZvcndhcmQgd2hlbiBgMWAuXG4gICAqIEBwYXJhbSB7SW5kZXhNYXBwZXJ9IGluZGV4TWFwcGVyIFRoZSBJbmRleE1hcHBlciBpbnN0YW5jZSBmb3Igc3BlY2lmaWMgYXhpcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlbmRlcmFibGVJbmRleGVzQ291bnQgVG90YWwgY291bnQgb2YgcmVuZGVyYWJsZSBpbmRleGVzIGZvciBzcGVjaWZpYyBheGlzLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnROb3RIaWRkZW5JbmRleGVzKHZpc3VhbEluZGV4LCBpbmNyZW1lbnRCeSwgaW5kZXhNYXBwZXIsIHJlbmRlcmFibGVJbmRleGVzQ291bnQpIHtcbiAgICBpZiAoaXNOYU4odmlzdWFsSW5kZXgpIHx8IHZpc3VhbEluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IGZpcnN0VmlzaWJsZUluZGV4ID0gaW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZpc3VhbEluZGV4LCBpbmNyZW1lbnRCeSk7XG4gICAgY29uc3QgcmVuZGVyYWJsZUluZGV4ID0gaW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmaXJzdFZpc2libGVJbmRleCk7XG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHJlbmRlcmFibGVJbmRleCkpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBsZXQgbm90SGlkZGVuSW5kZXhlcyA9IDA7XG4gICAgaWYgKGluY3JlbWVudEJ5IDwgMCkge1xuICAgICAgLy8gWmVyby1iYXNlZCBudW1iZXJpbmcgZm9yIHJlbmRlcmFibGUgaW5kZXhlcyBjb3JyZXNwb25kcyB0byBhIG51bWJlciBvZiBub3QgaGlkZGVuIGluZGV4ZXMuXG4gICAgICBub3RIaWRkZW5JbmRleGVzID0gcmVuZGVyYWJsZUluZGV4ICsgMTtcbiAgICB9IGVsc2UgaWYgKGluY3JlbWVudEJ5ID4gMCkge1xuICAgICAgbm90SGlkZGVuSW5kZXhlcyA9IHJlbmRlcmFibGVJbmRleGVzQ291bnQgLSByZW5kZXJhYmxlSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBub3RIaWRkZW5JbmRleGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm90IGhpZGRlbiBjb2x1bW4gaW5kZXhlcyB0aGF0IGZpdCBiZXR3ZWVuIHRoZSBmaXJzdCBhbmRcbiAgICogbGFzdCBmaXhlZCBjb2x1bW4gaW4gdGhlIGxlZnQgKG9yIHJpZ2h0IGluIFJUTCBtb2RlKSBvdmVybGF5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpIHtcbiAgICBjb25zdCBjb3VudENvbHMgPSB0aGlzLmhvdC5jb3VudENvbHMoKTtcbiAgICBjb25zdCB2aXN1YWxGaXhlZENvbHVtbnNTdGFydCA9IE1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsIDEwKSwgY291bnRDb2xzKSAtIDE7XG4gICAgcmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKHZpc3VhbEZpeGVkQ29sdW1uc1N0YXJ0LCAtMSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBub3QgaGlkZGVuIHJvdyBpbmRleGVzIHRoYXQgZml0IGJldHdlZW4gdGhlIGZpcnN0IGFuZFxuICAgKiBsYXN0IGZpeGVkIHJvdyBpbiB0aGUgdG9wIG92ZXJsYXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpIHtcbiAgICBjb25zdCBjb3VudFJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCB2aXN1YWxGaXhlZFJvd3NUb3AgPSBNYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwgMTApLCBjb3VudFJvd3MpIC0gMTtcbiAgICByZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXModmlzdWFsRml4ZWRSb3dzVG9wLCAtMSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBub3QgaGlkZGVuIHJvdyBpbmRleGVzIHRoYXQgZml0IGJldHdlZW4gdGhlIGZpcnN0IGFuZFxuICAgKiBsYXN0IGZpeGVkIHJvdyBpbiB0aGUgYm90dG9tIG92ZXJsYXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpIHtcbiAgICBjb25zdCBjb3VudFJvd3MgPSB0aGlzLmhvdC5jb3VudFJvd3MoKTtcbiAgICBjb25zdCB2aXN1YWxGaXhlZFJvd3NCb3R0b20gPSBNYXRoLm1heChjb3VudFJvd3MgLSBwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c0JvdHRvbSwgMTApLCAwKTtcbiAgICByZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXModmlzdWFsRml4ZWRSb3dzQm90dG9tLCAxKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbmRlcmFibGUgY29sdW1uIGluZGV4ZXMgd2l0aGluIHRoZSBwYXNzZWQgcmFuZ2Ugb2YgdGhlIHZpc3VhbCBpbmRleGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uU3RhcnQgVGhlIGNvbHVtbiB2aXN1YWwgc3RhcnQgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5FbmQgVGhlIGNvbHVtbiB2aXN1YWwgZW5kIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoY29sdW1uU3RhcnQsIGNvbHVtbkVuZCkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChsZXQgY29sdW1uID0gY29sdW1uU3RhcnQ7IGNvbHVtbiA8PSBjb2x1bW5FbmQ7IGNvbHVtbisrKSB7XG4gICAgICBpZiAodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjb2x1bW4pICE9PSBudWxsKSB7XG4gICAgICAgIGNvdW50ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbmRlcmFibGUgcm93IGluZGV4ZXMgd2l0aGluIHRoZSBwYXNzZWQgcmFuZ2Ugb2YgdGhlIHZpc3VhbCBpbmRleGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93U3RhcnQgVGhlIHJvdyB2aXN1YWwgc3RhcnQgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dFbmQgVGhlIHJvdyB2aXN1YWwgZW5kIGluZGV4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2Uocm93U3RhcnQsIHJvd0VuZCkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChsZXQgcm93ID0gcm93U3RhcnQ7IHJvdyA8PSByb3dFbmQ7IHJvdysrKSB7XG4gICAgICBpZiAodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChyb3cpICE9PSBudWxsKSB7XG4gICAgICAgIGNvdW50ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYXQgbGVhc3Qgb25lIGNlbGwgdGhhbiBiZWxvbmdzIHRvIHRoZSBtYWluIHRhYmxlIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSB0b3AsIGxlZnQgb3JcbiAgICogYm90dG9tIG92ZXJsYXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCkge1xuICAgIGNvbnN0IGZpeGVkQWxsUm93cyA9IHRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSArIHRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKTtcbiAgICBjb25zdCBmaXhlZEFsbENvbHVtbnMgPSB0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtcbiAgICByZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKSA+IGZpeGVkQWxsUm93cyAmJiB0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpID4gZml4ZWRBbGxDb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGFuZCBpbml0aWFsaXplcyBXYWxrT25UYWJsZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRpYWxpemVXYWxrb250YWJsZSgpIHtcbiAgICBjb25zdCB3YWxrb250YWJsZUNvbmZpZyA9IHtcbiAgICAgIGFyaWFUYWdzOiB0aGlzLnNldHRpbmdzLmFyaWFUYWdzLFxuICAgICAgcnRsTW9kZTogdGhpcy5ob3QuaXNSdGwoKSxcbiAgICAgIGV4dGVybmFsUm93Q2FsY3VsYXRvcjogdGhpcy5ob3QuZ2V0UGx1Z2luKCdhdXRvUm93U2l6ZScpICYmIHRoaXMuaG90LmdldFBsdWdpbignYXV0b1Jvd1NpemUnKS5pc0VuYWJsZWQoKSxcbiAgICAgIHRhYmxlOiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3RhYmxlLCB0aGlzKSxcbiAgICAgIGlzRGF0YVZpZXdJbnN0YW5jZTogKCkgPT4gKDAsIF9yb290SW5zdGFuY2UuaXNSb290SW5zdGFuY2UpKHRoaXMuaG90KSxcbiAgICAgIHByZXZlbnRPdmVyZmxvdzogKCkgPT4gdGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3csXG4gICAgICBwcmV2ZW50V2hlZWw6ICgpID0+IHRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLFxuICAgICAgc3RyZXRjaEg6ICgpID0+IHRoaXMuc2V0dGluZ3Muc3RyZXRjaEgsXG4gICAgICBkYXRhOiAocmVuZGVyYWJsZVJvdywgcmVuZGVyYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbCguLi50aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChyZW5kZXJhYmxlUm93LCByZW5kZXJhYmxlQ29sdW1uKSk7XG4gICAgICB9LFxuICAgICAgdG90YWxSb3dzOiAoKSA9PiB0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxcbiAgICAgIHRvdGFsQ29sdW1uczogKCkgPT4gdGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksXG4gICAgICAvLyBOdW1iZXIgb2YgcmVuZGVyYWJsZSBjb2x1bW5zIGZvciB0aGUgbGVmdCBvdmVybGF5LlxuICAgICAgZml4ZWRDb2x1bW5zU3RhcnQ6ICgpID0+IHRoaXMuY291bnROb3RIaWRkZW5GaXhlZENvbHVtbnNTdGFydCgpLFxuICAgICAgLy8gTnVtYmVyIG9mIHJlbmRlcmFibGUgcm93cyBmb3IgdGhlIHRvcCBvdmVybGF5LlxuICAgICAgZml4ZWRSb3dzVG9wOiAoKSA9PiB0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksXG4gICAgICAvLyBOdW1iZXIgb2YgcmVuZGVyYWJsZSByb3dzIGZvciB0aGUgYm90dG9tIG92ZXJsYXkuXG4gICAgICBmaXhlZFJvd3NCb3R0b206ICgpID0+IHRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxcbiAgICAgIC8vIEVuYWJsZSB0aGUgaW5saW5lIHN0YXJ0IG92ZXJsYXkgd2hlbiBjb25kaXRpb25zIGFyZSBtZXQuXG4gICAgICBzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQgPiAwIHx8IHdhbGtvbnRhYmxlQ29uZmlnLnJvd0hlYWRlcnMoKS5sZW5ndGggPiAwO1xuICAgICAgfSxcbiAgICAgIC8vIEVuYWJsZSB0aGUgdG9wIG92ZXJsYXkgd2hlbiBjb25kaXRpb25zIGFyZSBtZXQuXG4gICAgICBzaG91bGRSZW5kZXJUb3BPdmVybGF5OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCA+IDAgfHwgd2Fsa29udGFibGVDb25maWcuY29sdW1uSGVhZGVycygpLmxlbmd0aCA+IDA7XG4gICAgICB9LFxuICAgICAgLy8gRW5hYmxlIHRoZSBib3R0b20gb3ZlcmxheSB3aGVuIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICAgIHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tID4gMDtcbiAgICAgIH0sXG4gICAgICBtaW5TcGFyZVJvd3M6ICgpID0+IHRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLFxuICAgICAgcmVuZGVyQWxsUm93czogdGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLFxuICAgICAgcmVuZGVyQWxsQ29sdW1uczogdGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxDb2x1bW5zLFxuICAgICAgcm93SGVhZGVyczogKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXJlcnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSkge1xuICAgICAgICAgIGhlYWRlclJlbmRlcmVycy5wdXNoKChyZW5kZXJhYmxlUm93SW5kZXgsIFRIKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBTb21lIGhlbHBlciBtYXkgYmUgbmVlZGVkLlxuICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSB0cmFuc2xhdGlvbiBmb3Igcm93IGluZGV4ZXMgKHdpdGhvdXQgcm93IGhlYWRlcnMpLlxuICAgICAgICAgICAgY29uc3QgdmlzdWFsUm93SW5kZXggPSByZW5kZXJhYmxlUm93SW5kZXggPj0gMCA/IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZVJvd0luZGV4KSA6IHJlbmRlcmFibGVSb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kUm93SGVhZGVyKHZpc3VhbFJvd0luZGV4LCBUSCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzJywgaGVhZGVyUmVuZGVyZXJzKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9yb3dIZWFkZXJzQ291bnQsIHRoaXMsIGhlYWRlclJlbmRlcmVycy5sZW5ndGgpO1xuICAgICAgICBpZiAodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncykge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgYXJpYS1jb2xjb3VudCBhdHRyaWJ1dGUuXG4gICAgICAgICAgLy8gT25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UgYWZ0ZXIgaW5pdGlhbGl6YXRpb24vZGF0YSB1cGRhdGUuXG4gICAgICAgICAgaWYgKF9hc3NlcnRDbGFzc0JyYW5kKF9UYWJsZVZpZXdfYnJhbmQsIHRoaXMsIF9nZXRBcmlhQ29sY291bnQpLmNhbGwodGhpcykgPT09IHRoaXMuaG90LmNvdW50Q29scygpKSB7XG4gICAgICAgICAgICBfYXNzZXJ0Q2xhc3NCcmFuZChfVGFibGVWaWV3X2JyYW5kLCB0aGlzLCBfdXBkYXRlQXJpYUNvbGNvdW50KS5jYWxsKHRoaXMsIF9jbGFzc1ByaXZhdGVGaWVsZEdldChfcm93SGVhZGVyc0NvdW50LCB0aGlzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoZWFkZXJSZW5kZXJlcnM7XG4gICAgICB9LFxuICAgICAgY29sdW1uSGVhZGVyczogKCkgPT4ge1xuICAgICAgICBjb25zdCBoZWFkZXJSZW5kZXJlcnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSkge1xuICAgICAgICAgIGhlYWRlclJlbmRlcmVycy5wdXNoKChyZW5kZXJlZENvbHVtbkluZGV4LCBUSCkgPT4ge1xuICAgICAgICAgICAgLy8gVE9ETzogU29tZSBoZWxwZXIgbWF5IGJlIG5lZWRlZC5cbiAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gdHJhbnNsYXRpb24gZm9yIGNvbHVtbnMgaW5kZXhlcyAod2l0aG91dCBjb2x1bW4gaGVhZGVycykuXG4gICAgICAgICAgICBjb25zdCB2aXN1YWxDb2x1bW5zSW5kZXggPSByZW5kZXJlZENvbHVtbkluZGV4ID49IDAgPyB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmVkQ29sdW1uSW5kZXgpIDogcmVuZGVyZWRDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sSGVhZGVyKHZpc3VhbENvbHVtbnNJbmRleCwgVEgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycycsIGhlYWRlclJlbmRlcmVycyk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY29sdW1uSGVhZGVyc0NvdW50LCB0aGlzLCBoZWFkZXJSZW5kZXJlcnMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlclJlbmRlcmVycztcbiAgICAgIH0sXG4gICAgICBjb2x1bW5XaWR0aDogcmVuZGVyZWRDb2x1bW5JbmRleCA9PiB7XG4gICAgICAgIGNvbnN0IHZpc3VhbEluZGV4ID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJlZENvbHVtbkluZGV4KTtcblxuICAgICAgICAvLyBJdCdzIG5vdCBhIGJ1ZyB0aGF0IHdlIGNhbid0IGZpbmQgdmlzdWFsIGluZGV4IGZvciBzb21lIGhhbmRsZWQgYnkgbWV0aG9kIGluZGV4ZXMuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYWxzb1xuICAgICAgICAvLyBmb3IgaW5kZXhlcyB0aGF0IGFyZSBub3QgZGlzcGxheWVkIChpbmRleGVzIHRoYXQgYXJlIGJleW9uZCB0aGUgZ3JpZCdzIGJvdW5kYXJpZXMpLCBpLmUuIHdoZW4gYGZpeGVkQ29sdW1uc1N0YXJ0YCA+IGBzdGFydENvbHNgICh3cm9uZyBjb25maWc/KSBvclxuICAgICAgICAvLyBzY3JvbGxpbmcgYW5kIGRhdGFzZXQgaXMgZW1wdHkgKHNjcm9sbCBzaG91bGQgaGFuZGxlIHRoYXQ/KS5cbiAgICAgICAgcmV0dXJuIHRoaXMuaG90LmdldENvbFdpZHRoKHZpc3VhbEluZGV4ID09PSBudWxsID8gcmVuZGVyZWRDb2x1bW5JbmRleCA6IHZpc3VhbEluZGV4KTtcbiAgICAgIH0sXG4gICAgICByb3dIZWlnaHQ6IHJlbmRlcmVkUm93SW5kZXggPT4ge1xuICAgICAgICBjb25zdCB2aXN1YWxJbmRleCA9IHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyZWRSb3dJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdC5nZXRSb3dIZWlnaHQodmlzdWFsSW5kZXggPT09IG51bGwgPyByZW5kZXJlZFJvd0luZGV4IDogdmlzdWFsSW5kZXgpO1xuICAgICAgfSxcbiAgICAgIGNlbGxSZW5kZXJlcjogKHJlbmRlcmVkUm93SW5kZXgsIHJlbmRlcmVkQ29sdW1uSW5kZXgsIFREKSA9PiB7XG4gICAgICAgIGNvbnN0IFt2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXhdID0gdGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgocmVuZGVyZWRSb3dJbmRleCwgcmVuZGVyZWRDb2x1bW5JbmRleCk7XG5cbiAgICAgICAgLy8gQ29vcmRzIG1heSBiZSBtb2RpZmllZC4gRm9yIGV4YW1wbGUsIGJ5IHRoZSBgTWVyZ2VDZWxsc2AgcGx1Z2luLiBJdCBzaG91bGQgYWZmZWN0IGNlbGwgdmFsdWUgYW5kIGNlbGwgbWV0YS5cbiAgICAgICAgY29uc3QgbW9kaWZpZWRDZWxsQ29vcmRzID0gdGhpcy5ob3QucnVuSG9va3MoJ21vZGlmeUdldENlbGxDb29yZHMnLCB2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXgpO1xuICAgICAgICBsZXQgdmlzdWFsUm93VG9DaGVjayA9IHZpc3VhbFJvd0luZGV4O1xuICAgICAgICBsZXQgdmlzdWFsQ29sdW1uVG9DaGVjayA9IHZpc3VhbENvbHVtbkluZGV4O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RpZmllZENlbGxDb29yZHMpKSB7XG4gICAgICAgICAgW3Zpc3VhbFJvd1RvQ2hlY2ssIHZpc3VhbENvbHVtblRvQ2hlY2tdID0gbW9kaWZpZWRDZWxsQ29vcmRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxQcm9wZXJ0aWVzID0gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEodmlzdWFsUm93VG9DaGVjaywgdmlzdWFsQ29sdW1uVG9DaGVjayk7XG4gICAgICAgIGNvbnN0IHByb3AgPSB0aGlzLmhvdC5jb2xUb1Byb3AodmlzdWFsQ29sdW1uVG9DaGVjayk7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AodmlzdWFsUm93VG9DaGVjaywgcHJvcCk7XG4gICAgICAgIGlmICh0aGlzLmhvdC5oYXNIb29rKCdiZWZvcmVWYWx1ZVJlbmRlcicpKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlVmFsdWVSZW5kZXInLCB2YWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVSZW5kZXJlcicsIFRELCB2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXgsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuaG90LmdldENlbGxSZW5kZXJlcihjZWxsUHJvcGVydGllcykodGhpcy5ob3QsIFRELCB2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXgsIHByb3AsIHZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclJlbmRlcmVyJywgVEQsIHZpc3VhbFJvd0luZGV4LCB2aXN1YWxDb2x1bW5JbmRleCwgcHJvcCwgdmFsdWUsIGNlbGxQcm9wZXJ0aWVzKTtcbiAgICAgIH0sXG4gICAgICBzZWxlY3Rpb25zOiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LFxuICAgICAgaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjogKCkgPT4gdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixcbiAgICAgIG9uV2luZG93UmVzaXplOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhvdCAmJiAhdGhpcy5ob3QuaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICB0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Db250YWluZXJFbGVtZW50UmVzaXplOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhvdCAmJiAhdGhpcy5ob3QuaXNEZXN0cm95ZWQgJiYgKDAsIF9lbGVtZW50LmlzVmlzaWJsZSkodGhpcy5ob3Qucm9vdEVsZW1lbnQpKSB7XG4gICAgICAgICAgdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2VsbE1vdXNlRG93bjogKGV2ZW50LCBjb29yZHMsIFRELCB3dCkgPT4ge1xuICAgICAgICBjb25zdCB2aXN1YWxDb29yZHMgPSB0aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoY29vcmRzKTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHtcbiAgICAgICAgICByb3c6IGZhbHNlLFxuICAgICAgICAgIGNvbHVtbjogZmFsc2UsXG4gICAgICAgICAgY2VsbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ob3QubGlzdGVuKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB3dDtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tb3VzZURvd24sIHRoaXMsIHRydWUpO1xuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlT25DZWxsTW91c2VEb3duJywgZXZlbnQsIHZpc3VhbENvb3JkcywgVEQsIGNvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoKDAsIF9ldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkoZXZlbnQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICgwLCBfbW91c2VFdmVudEhhbmRsZXIuaGFuZGxlTW91c2VFdmVudCkoZXZlbnQsIHtcbiAgICAgICAgICBjb29yZHM6IHZpc3VhbENvb3JkcyxcbiAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuaG90LnNlbGVjdGlvbixcbiAgICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICAgIGNlbGxDb29yZHNGYWN0b3J5OiAocm93LCBjb2x1bW4pID0+IHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHJvdywgY29sdW1uKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyT25DZWxsTW91c2VEb3duJywgZXZlbnQsIHZpc3VhbENvb3JkcywgVEQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVd0ID0gdGhpcy5fd3Q7XG4gICAgICB9LFxuICAgICAgb25DZWxsQ29udGV4dE1lbnU6IChldmVudCwgY29vcmRzLCBURCwgd3QpID0+IHtcbiAgICAgICAgY29uc3QgdmlzdWFsQ29vcmRzID0gdGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB3dDtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tb3VzZURvd24sIHRoaXMsIGZhbHNlKTtcbiAgICAgICAgaWYgKHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSkge1xuICAgICAgICAgIHRoaXMuaG90LnNlbGVjdGlvbi5maW5pc2goKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlT25DZWxsQ29udGV4dE1lbnUnLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIGlmICgoMCwgX2V2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKShldmVudCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyT25DZWxsQ29udGV4dE1lbnUnLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB0aGlzLl93dDtcbiAgICAgIH0sXG4gICAgICBvbkNlbGxNb3VzZU91dDogKGV2ZW50LCBjb29yZHMsIFRELCB3dCkgPT4ge1xuICAgICAgICBjb25zdCB2aXN1YWxDb29yZHMgPSB0aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoY29vcmRzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVXdCA9IHd0O1xuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlT25DZWxsTW91c2VPdXQnLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIGlmICgoMCwgX2V2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKShldmVudCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyT25DZWxsTW91c2VPdXQnLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB0aGlzLl93dDtcbiAgICAgIH0sXG4gICAgICBvbkNlbGxNb3VzZU92ZXI6IChldmVudCwgY29vcmRzLCBURCwgd3QpID0+IHtcbiAgICAgICAgY29uc3QgdmlzdWFsQ29vcmRzID0gdGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGNvb3Jkcyk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSB7XG4gICAgICAgICAgcm93OiBmYWxzZSxcbiAgICAgICAgICBjb2x1bW46IGZhbHNlLFxuICAgICAgICAgIGNlbGw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB3dDtcbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZU9uQ2VsbE1vdXNlT3ZlcicsIGV2ZW50LCB2aXN1YWxDb29yZHMsIFRELCBjb250cm9sbGVyKTtcbiAgICAgICAgaWYgKCgwLCBfZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQpKGV2ZW50KSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9tb3VzZURvd24sIHRoaXMpKSB7XG4gICAgICAgICAgKDAsIF9tb3VzZUV2ZW50SGFuZGxlci5oYW5kbGVNb3VzZUV2ZW50KShldmVudCwge1xuICAgICAgICAgICAgY29vcmRzOiB2aXN1YWxDb29yZHMsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuaG90LnNlbGVjdGlvbixcbiAgICAgICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBjZWxsQ29vcmRzRmFjdG9yeTogKHJvdywgY29sdW1uKSA9PiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhyb3csIGNvbHVtbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJPbkNlbGxNb3VzZU92ZXInLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB0aGlzLl93dDtcbiAgICAgIH0sXG4gICAgICBvbkNlbGxNb3VzZVVwOiAoZXZlbnQsIGNvb3JkcywgVEQsIHd0KSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc3VhbENvb3JkcyA9IHRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyhjb29yZHMpO1xuICAgICAgICB0aGlzLmFjdGl2ZVd0ID0gd3Q7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVPbkNlbGxNb3VzZVVwJywgZXZlbnQsIHZpc3VhbENvb3JkcywgVEQpO1xuXG4gICAgICAgIC8vIFRPRE86IFRoZSBzZWNvbmQgY29uZGl0aW9uIGNoZWNrIGlzIGEgd29ya2Fyb3VuZC4gQ2FsbGJhY2sgY29ycmVzcG9uZGluZyB0aGUgbWV0aG9kIGB1cGRhdGVTZXR0aW5nc2BcbiAgICAgICAgLy8gZGlzYWJsZSBwbHVnaW4gYW5kIGVuYWJsZSBpdCBhZ2Fpbi4gRGlzYWJsaW5nIHBsdWdpbiBjbG9zZXMgdGhlIG1lbnUuIFRodXMsIGNhbGxpbmcgdGhlXG4gICAgICAgIC8vIGB1cGRhdGVTZXR0aW5nc2AgaW4gYSBib2R5IG9mIGFueSBjYWxsYmFjayBleGVjdXRlZCByaWdodCBhZnRlciBzb21lIGNvbnRleHQtbWVudSBhY3Rpb25cbiAgICAgICAgLy8gYnJlYWtzIHRoZSB0YWJsZSAoIzcyMzEpLlxuICAgICAgICBpZiAoKDAsIF9ldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkoZXZlbnQpIHx8IHRoaXMuaG90LmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlck9uQ2VsbE1vdXNlVXAnLCBldmVudCwgdmlzdWFsQ29vcmRzLCBURCk7XG4gICAgICAgIHRoaXMuYWN0aXZlV3QgPSB0aGlzLl93dDtcbiAgICAgIH0sXG4gICAgICBvbkNlbGxDb3JuZXJNb3VzZURvd246IGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duJywgZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIG9uQ2VsbENvcm5lckRibENsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlck9uQ2VsbENvcm5lckRibENsaWNrJywgZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIGJlZm9yZURyYXc6IChmb3JjZSwgc2tpcFJlbmRlcikgPT4gdGhpcy5iZWZvcmVSZW5kZXIoZm9yY2UsIHNraXBSZW5kZXIpLFxuICAgICAgb25EcmF3OiBmb3JjZSA9PiB0aGlzLmFmdGVyUmVuZGVyKGZvcmNlKSxcbiAgICAgIG9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OiByZW5kZXJhYmxlUm93ID0+IHtcbiAgICAgICAgY29uc3Qgcm93TWFwcGVyID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXI7XG4gICAgICAgIGNvbnN0IGFyZUNvbHVtbkhlYWRlcnNTZWxlY3RlZCA9IHJlbmRlcmFibGVSb3cgPCAwO1xuICAgICAgICBsZXQgdmlzdWFsUm93ID0gcmVuZGVyYWJsZVJvdztcbiAgICAgICAgaWYgKCFhcmVDb2x1bW5IZWFkZXJzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB2aXN1YWxSb3cgPSByb3dNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlUm93KTtcblxuICAgICAgICAgIC8vIGZvciBhbiBlbXB0eSBkYXRhIHJldHVybiBpbmRleCBhcyBpc1xuICAgICAgICAgIGlmICh2aXN1YWxSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlUm93O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2aXN1YWxSb3cgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5JywgdmlzdWFsUm93KTtcbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVZpZXdwb3J0U2Nyb2xsJyk7XG4gICAgICAgIGlmICghYXJlQ29sdW1uSGVhZGVyc1NlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJvd01hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHZpc3VhbFJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpc3VhbFJvdztcbiAgICAgIH0sXG4gICAgICBvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OiByZW5kZXJhYmxlQ29sdW1uID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uTWFwcGVyID0gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7XG4gICAgICAgIGNvbnN0IGFyZVJvd0hlYWRlcnNTZWxlY3RlZCA9IHJlbmRlcmFibGVDb2x1bW4gPCAwO1xuICAgICAgICBsZXQgdmlzdWFsQ29sdW1uID0gcmVuZGVyYWJsZUNvbHVtbjtcbiAgICAgICAgaWYgKCFhcmVSb3dIZWFkZXJzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB2aXN1YWxDb2x1bW4gPSBjb2x1bW5NYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlQ29sdW1uKTtcblxuICAgICAgICAgIC8vIGZvciBhbiBlbXB0eSBkYXRhIHJldHVybiBpbmRleCBhcyBpc1xuICAgICAgICAgIGlmICh2aXN1YWxDb2x1bW4gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJhYmxlQ29sdW1uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2aXN1YWxDb2x1bW4gPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHknLCB2aXN1YWxDb2x1bW4pO1xuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlVmlld3BvcnRTY3JvbGwnKTtcbiAgICAgICAgaWYgKCFhcmVSb3dIZWFkZXJzU2VsZWN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gY29sdW1uTWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsQ29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlzdWFsQ29sdW1uO1xuICAgICAgfSxcbiAgICAgIG9uU2Nyb2xsVmVydGljYWxseTogKCkgPT4ge1xuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Jyk7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclNjcm9sbCcpO1xuICAgICAgfSxcbiAgICAgIG9uU2Nyb2xsSG9yaXpvbnRhbGx5OiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlclNjcm9sbEhvcml6b250YWxseScpO1xuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJTY3JvbGwnKTtcbiAgICAgIH0sXG4gICAgICBvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiAoKSA9PiB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMnKSxcbiAgICAgIG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOiAocmVuZGVyYWJsZVJvdywgaGVhZGVyTGV2ZWwsIGhpZ2hsaWdodE1ldGEpID0+IHtcbiAgICAgICAgY29uc3Qgcm93TWFwcGVyID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXI7XG4gICAgICAgIGNvbnN0IGFyZUNvbHVtbkhlYWRlcnNTZWxlY3RlZCA9IHJlbmRlcmFibGVSb3cgPCAwO1xuICAgICAgICBsZXQgdmlzdWFsUm93ID0gcmVuZGVyYWJsZVJvdztcbiAgICAgICAgaWYgKCFhcmVDb2x1bW5IZWFkZXJzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB2aXN1YWxSb3cgPSByb3dNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlUm93KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWaXN1YWxSb3cgPSB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyJywgdmlzdWFsUm93LCBoZWFkZXJMZXZlbCwgaGlnaGxpZ2h0TWV0YSk7XG4gICAgICAgIGlmICghYXJlQ29sdW1uSGVhZGVyc1NlbGVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJvd01hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJvd01hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobmV3VmlzdWFsUm93LCAxKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1Zpc3VhbFJvdztcbiAgICAgIH0sXG4gICAgICBvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjogKHJlbmRlcmFibGVDb2x1bW4sIGhlYWRlckxldmVsLCBoaWdobGlnaHRNZXRhKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk1hcHBlciA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO1xuICAgICAgICBjb25zdCBhcmVSb3dIZWFkZXJzU2VsZWN0ZWQgPSByZW5kZXJhYmxlQ29sdW1uIDwgMDtcbiAgICAgICAgbGV0IHZpc3VhbENvbHVtbiA9IHJlbmRlcmFibGVDb2x1bW47XG4gICAgICAgIGlmICghYXJlUm93SGVhZGVyc1NlbGVjdGVkKSB7XG4gICAgICAgICAgdmlzdWFsQ29sdW1uID0gY29sdW1uTWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZUNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3VmlzdWFsQ29sdW1uID0gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcicsIHZpc3VhbENvbHVtbiwgaGVhZGVyTGV2ZWwsIGhpZ2hsaWdodE1ldGEpO1xuICAgICAgICBpZiAoIWFyZVJvd0hlYWRlcnNTZWxlY3RlZCkge1xuICAgICAgICAgIHJldHVybiBjb2x1bW5NYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChjb2x1bW5NYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KG5ld1Zpc3VhbENvbHVtbiwgMSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaXN1YWxDb2x1bW47XG4gICAgICB9LFxuICAgICAgb25BZnRlckRyYXdTZWxlY3Rpb246IChjdXJyZW50Um93LCBjdXJyZW50Q29sdW1uLCBsYXllckxldmVsKSA9PiB7XG4gICAgICAgIGxldCBjb3JuZXJzT2ZTZWxlY3Rpb247XG4gICAgICAgIGNvbnN0IFt2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXhdID0gdGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoY3VycmVudFJvdywgY3VycmVudENvbHVtbik7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmFuZ2UgPSB0aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25SYW5nZVNpemUgPSBzZWxlY3RlZFJhbmdlLnNpemUoKTtcbiAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlU2l6ZSA+IDApIHtcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Gb3JMYXllciA9IHNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobGF5ZXJMZXZlbCAhPT0gbnVsbCAmJiBsYXllckxldmVsICE9PSB2b2lkIDAgPyBsYXllckxldmVsIDogMCk7XG4gICAgICAgICAgY29ybmVyc09mU2VsZWN0aW9uID0gW3NlbGVjdGlvbkZvckxheWVyLmZyb20ucm93LCBzZWxlY3Rpb25Gb3JMYXllci5mcm9tLmNvbCwgc2VsZWN0aW9uRm9yTGF5ZXIudG8ucm93LCBzZWxlY3Rpb25Gb3JMYXllci50by5jb2xdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJEcmF3U2VsZWN0aW9uJywgdmlzdWFsUm93SW5kZXgsIHZpc3VhbENvbHVtbkluZGV4LCBjb3JuZXJzT2ZTZWxlY3Rpb24sIGxheWVyTGV2ZWwpO1xuICAgICAgfSxcbiAgICAgIG9uQmVmb3JlRHJhd0JvcmRlcnM6IChjb3JuZXJzLCBib3JkZXJDbGFzc05hbWUpID0+IHtcbiAgICAgICAgY29uc3QgW3N0YXJ0UmVuZGVyYWJsZVJvdywgc3RhcnRSZW5kZXJhYmxlQ29sdW1uLCBlbmRSZW5kZXJhYmxlUm93LCBlbmRSZW5kZXJhYmxlQ29sdW1uXSA9IGNvcm5lcnM7XG4gICAgICAgIGNvbnN0IHZpc3VhbENvcm5lcnMgPSBbdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChzdGFydFJlbmRlcmFibGVSb3cpLCB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHN0YXJ0UmVuZGVyYWJsZUNvbHVtbiksIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZW5kUmVuZGVyYWJsZVJvdyksIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZW5kUmVuZGVyYWJsZUNvbHVtbildO1xuICAgICAgICByZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZURyYXdCb3JkZXJzJywgdmlzdWFsQ29ybmVycywgYm9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgIH0sXG4gICAgICBvbkJlZm9yZVRvdWNoU2Nyb2xsOiAoKSA9PiB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlVG91Y2hTY3JvbGwnKSxcbiAgICAgIG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDogKCkgPT4gdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyTW9tZW50dW1TY3JvbGwnKSxcbiAgICAgIG9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOiAoc3RyZXRjaGVkV2lkdGgsIHJlbmRlcmVkQ29sdW1uSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgdmlzdWFsQ29sdW1uSW5kZXggPSB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmVkQ29sdW1uSW5kZXgpO1xuICAgICAgICByZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoJ2JlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCcsIHN0cmV0Y2hlZFdpZHRoLCB2aXN1YWxDb2x1bW5JbmRleCk7XG4gICAgICB9LFxuICAgICAgb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDogcm93SGVhZGVyV2lkdGggPT4gdGhpcy5ob3QucnVuSG9va3MoJ21vZGlmeVJvd0hlYWRlcldpZHRoJywgcm93SGVhZGVyV2lkdGgpLFxuICAgICAgb25Nb2RpZnlHZXRDZWxsQ29vcmRzOiAocmVuZGVyYWJsZVJvd0luZGV4LCByZW5kZXJhYmxlQ29sdW1uSW5kZXgsIHRvcG1vc3QpID0+IHtcbiAgICAgICAgY29uc3Qgcm93TWFwcGVyID0gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXI7XG4gICAgICAgIGNvbnN0IGNvbHVtbk1hcHBlciA9IHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO1xuXG4gICAgICAgIC8vIENhbGxiYWNrIGhhbmRsZSBhbHNvIGhlYWRlcnMuIFdlIHNob3VsZG4ndCB0cmFuc2xhdGUgdGhlbS5cbiAgICAgICAgY29uc3QgdmlzdWFsQ29sdW1uSW5kZXggPSByZW5kZXJhYmxlQ29sdW1uSW5kZXggPj0gMCA/IGNvbHVtbk1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmFibGVDb2x1bW5JbmRleCkgOiByZW5kZXJhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnN0IHZpc3VhbFJvd0luZGV4ID0gcmVuZGVyYWJsZVJvd0luZGV4ID49IDAgPyByb3dNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChyZW5kZXJhYmxlUm93SW5kZXgpIDogcmVuZGVyYWJsZVJvd0luZGV4O1xuICAgICAgICBjb25zdCB2aXN1YWxJbmRleGVzID0gdGhpcy5ob3QucnVuSG9va3MoJ21vZGlmeUdldENlbGxDb29yZHMnLCB2aXN1YWxSb3dJbmRleCwgdmlzdWFsQ29sdW1uSW5kZXgsIHRvcG1vc3QpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2aXN1YWxJbmRleGVzKSkge1xuICAgICAgICAgIGNvbnN0IFt2aXN1YWxSb3dGcm9tLCB2aXN1YWxDb2x1bW5Gcm9tLCB2aXN1YWxSb3dUbywgdmlzdWFsQ29sdW1uVG9dID0gdmlzdWFsSW5kZXhlcztcblxuICAgICAgICAgIC8vIFJlc3VsdCBvZiB0aGUgaG9vayBpcyBoYW5kbGVkIGJ5IHRoZSBXYWxrb250YWJsZSAocmVuZGVyYWJsZSBpbmRleGVzKS5cbiAgICAgICAgICByZXR1cm4gW3Zpc3VhbFJvd0Zyb20gPj0gMCA/IHJvd01hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHJvd01hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodmlzdWFsUm93RnJvbSwgMSkpIDogdmlzdWFsUm93RnJvbSwgdmlzdWFsQ29sdW1uRnJvbSA+PSAwID8gY29sdW1uTWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY29sdW1uTWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxDb2x1bW5Gcm9tLCAxKSkgOiB2aXN1YWxDb2x1bW5Gcm9tLCB2aXN1YWxSb3dUbyA+PSAwID8gcm93TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocm93TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxSb3dUbywgLTEpKSA6IHZpc3VhbFJvd1RvLCB2aXN1YWxDb2x1bW5UbyA+PSAwID8gY29sdW1uTWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY29sdW1uTWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2aXN1YWxDb2x1bW5UbywgLTEpKSA6IHZpc3VhbENvbHVtblRvXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiBjYWxjID0+IHtcbiAgICAgICAgbGV0IHZpZXdwb3J0T2Zmc2V0ID0gdGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDtcbiAgICAgICAgaWYgKHZpZXdwb3J0T2Zmc2V0ID09PSAnYXV0bycgJiYgdGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3ApIHtcbiAgICAgICAgICB2aWV3cG9ydE9mZnNldCA9IDEwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aWV3cG9ydE9mZnNldCA+IDAgfHwgdmlld3BvcnRPZmZzZXQgPT09ICdhdXRvJykge1xuICAgICAgICAgIGNvbnN0IHJlbmRlcmFibGVSb3dzID0gdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCk7XG4gICAgICAgICAgY29uc3QgZmlyc3RSZW5kZXJlZFJvdyA9IGNhbGMuc3RhcnRSb3c7XG4gICAgICAgICAgY29uc3QgbGFzdFJlbmRlcmVkUm93ID0gY2FsYy5lbmRSb3c7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2aWV3cG9ydE9mZnNldCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNhbGMuc3RhcnRSb3cgPSBNYXRoLm1heChmaXJzdFJlbmRlcmVkUm93IC0gdmlld3BvcnRPZmZzZXQsIDApO1xuICAgICAgICAgICAgY2FsYy5lbmRSb3cgPSBNYXRoLm1pbihsYXN0UmVuZGVyZWRSb3cgKyB2aWV3cG9ydE9mZnNldCwgcmVuZGVyYWJsZVJvd3MgLSAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZpZXdwb3J0T2Zmc2V0ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGguY2VpbChsYXN0UmVuZGVyZWRSb3cgLyByZW5kZXJhYmxlUm93cyAqIDEyKTtcbiAgICAgICAgICAgIGNhbGMuc3RhcnRSb3cgPSBNYXRoLm1heChmaXJzdFJlbmRlcmVkUm93IC0gb2Zmc2V0LCAwKTtcbiAgICAgICAgICAgIGNhbGMuZW5kUm93ID0gTWF0aC5taW4obGFzdFJlbmRlcmVkUm93ICsgb2Zmc2V0LCByZW5kZXJhYmxlUm93cyAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhvdC5ydW5Ib29rcygnYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZScsIGNhbGMpO1xuICAgICAgfSxcbiAgICAgIHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiBjYWxjID0+IHtcbiAgICAgICAgbGV0IHZpZXdwb3J0T2Zmc2V0ID0gdGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldDtcbiAgICAgICAgaWYgKHZpZXdwb3J0T2Zmc2V0ID09PSAnYXV0bycgJiYgdGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCkge1xuICAgICAgICAgIHZpZXdwb3J0T2Zmc2V0ID0gMTA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpZXdwb3J0T2Zmc2V0ID4gMCB8fCB2aWV3cG9ydE9mZnNldCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgY29uc3QgcmVuZGVyYWJsZUNvbHVtbnMgPSB0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICBjb25zdCBmaXJzdFJlbmRlcmVkQ29sdW1uID0gY2FsYy5zdGFydENvbHVtbjtcbiAgICAgICAgICBjb25zdCBsYXN0UmVuZGVyZWRDb2x1bW4gPSBjYWxjLmVuZENvbHVtbjtcbiAgICAgICAgICBpZiAodHlwZW9mIHZpZXdwb3J0T2Zmc2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgY2FsYy5zdGFydENvbHVtbiA9IE1hdGgubWF4KGZpcnN0UmVuZGVyZWRDb2x1bW4gLSB2aWV3cG9ydE9mZnNldCwgMCk7XG4gICAgICAgICAgICBjYWxjLmVuZENvbHVtbiA9IE1hdGgubWluKGxhc3RSZW5kZXJlZENvbHVtbiArIHZpZXdwb3J0T2Zmc2V0LCByZW5kZXJhYmxlQ29sdW1ucyAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodmlld3BvcnRPZmZzZXQgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gTWF0aC5jZWlsKGxhc3RSZW5kZXJlZENvbHVtbiAvIHJlbmRlcmFibGVDb2x1bW5zICogNik7XG4gICAgICAgICAgICBjYWxjLnN0YXJ0Q29sdW1uID0gTWF0aC5tYXgoZmlyc3RSZW5kZXJlZENvbHVtbiAtIG9mZnNldCwgMCk7XG4gICAgICAgICAgICBjYWxjLmVuZENvbHVtbiA9IE1hdGgubWluKGxhc3RSZW5kZXJlZENvbHVtbiArIG9mZnNldCwgcmVuZGVyYWJsZUNvbHVtbnMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUnLCBjYWxjKTtcbiAgICAgIH0sXG4gICAgICByb3dIZWFkZXJXaWR0aDogKCkgPT4gdGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxcbiAgICAgIGNvbHVtbkhlYWRlckhlaWdodDogKCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5IZWFkZXJIZWlnaHQgPSB0aGlzLmhvdC5ydW5Ib29rcygnbW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodCB8fCBjb2x1bW5IZWFkZXJIZWlnaHQ7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmhvdC5ydW5Ib29rcygnYmVmb3JlSW5pdFdhbGtvbnRhYmxlJywgd2Fsa29udGFibGVDb25maWcpO1xuICAgIHRoaXMuX3d0ID0gbmV3IF9zcmMuZGVmYXVsdCh3YWxrb250YWJsZUNvbmZpZyk7XG4gICAgdGhpcy5hY3RpdmVXdCA9IHRoaXMuX3d0O1xuICAgIGNvbnN0IHNwcmVhZGVyID0gdGhpcy5fd3Qud3RUYWJsZS5zcHJlYWRlcjtcbiAgICAvLyBXZSBoYXZlIHRvIGNhY2hlIHdpZHRoIGFuZCBoZWlnaHQgYWZ0ZXIgV2Fsa29udGFibGUgaW5pdGlhbGl6YXRpb24uXG4gICAgY29uc3Qge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gdGhpcy5ob3Qucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgdGhpcy5zZXRMYXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHNwcmVhZGVyLCAnbW91c2Vkb3duJywgZXZlbnQgPT4ge1xuICAgICAgLy8gcmlnaHQgbW91c2UgYnV0dG9uIGV4YWN0bHkgb24gc3ByZWFkZXIgbWVhbnMgcmlnaHQgY2xpY2sgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiB2ZXJ0aWNhbCBzY3JvbGxiYXJcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHNwcmVhZGVyICYmIGV2ZW50LndoaWNoID09PSAzKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoc3ByZWFkZXIsICdjb250ZXh0bWVudScsIGV2ZW50ID0+IHtcbiAgICAgIC8vIHJpZ2h0IG1vdXNlIGJ1dHRvbiBleGFjdGx5IG9uIHNwcmVhZGVyIG1lYW5zIHJpZ2h0IGNsaWNrIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdmVydGljYWwgc2Nyb2xsYmFyXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzcHJlYWRlciAmJiBldmVudC53aGljaCA9PT0gMykge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsICdjbGljaycsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5KSB7XG4gICAgICAgIGlmICh0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQpIHtcbiAgICAgICAgICB0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgdGV4dCBzZWxlY3Rpb24gaW4gZWxlbWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWwgVGhlIGVsZW1lbnQgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChlbCkge1xuICAgIGlmICgoMCwgX2VsZW1lbnQuaXNJbnB1dCkoZWwpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNDaGlsZE9mVGFibGVCb2R5ID0gKDAsIF9lbGVtZW50LmlzQ2hpbGRPZikoZWwsIHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuc3ByZWFkZXIpO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uID09PSB0cnVlICYmIGlzQ2hpbGRPZlRhYmxlQm9keSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uID09PSAnY2VsbCcgJiYgdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSAmJiBpc0NoaWxkT2ZUYWJsZUJvZHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24gJiYgdGhpcy5pc0NlbGxFZGl0ZWQoKSAmJiB0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyJ3MgYmVlbiBjYWxsZWQgbW91c2Vkb3duLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzTW91c2VEb3duKCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX21vdXNlRG93biwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc2VsZWN0ZWQgb25seSBvbmUgY2VsbC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1NlbGVjdGVkT25seUNlbGwoKSB7XG4gICAgdmFyIF90aGlzJGhvdCRnZXRTZWxlY3RlZCwgX3RoaXMkaG90JGdldFNlbGVjdGVkMjtcbiAgICByZXR1cm4gKF90aGlzJGhvdCRnZXRTZWxlY3RlZCA9IChfdGhpcyRob3QkZ2V0U2VsZWN0ZWQyID0gdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkgPT09IG51bGwgfHwgX3RoaXMkaG90JGdldFNlbGVjdGVkMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkaG90JGdldFNlbGVjdGVkMi5pc1NpbmdsZUNlbGwoKSkgIT09IG51bGwgJiYgX3RoaXMkaG90JGdldFNlbGVjdGVkICE9PSB2b2lkIDAgPyBfdGhpcyRob3QkZ2V0U2VsZWN0ZWQgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYWN0aXZlIGNlbGwgaXMgZWRpdGluZy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0NlbGxFZGl0ZWQoKSB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gdGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7XG4gICAgcmV0dXJuIGFjdGl2ZUVkaXRvciAmJiBhY3RpdmVFZGl0b3IuaXNPcGVuZWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgYmVmb3JlRHJhd2AgY2FsbGJhY2suXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZm9yY2UgSWYgYHRydWVgIHJlbmRlcmluZyB3YXMgdHJpZ2dlcmVkIGJ5IGEgY2hhbmdlIG9mIHNldHRpbmdzIG9yIGRhdGEgb3IgYGZhbHNlYCBpZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmluZyB3YXMgdHJpZ2dlcmVkIGJ5IHNjcm9sbGluZyBvciBtb3Zpbmcgc2VsZWN0aW9uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gc2tpcFJlbmRlciBPYmplY3Qgd2l0aCBgc2tpcFJlbmRlcmAgcHJvcGVydHksIGlmIGl0IGlzIHNldCB0byBgdHJ1ZSBgIHRoZSBuZXh0IHJlbmRlcmluZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZSB3aWxsIGJlIHNraXBwZWQuXG4gICAqL1xuICBiZWZvcmVSZW5kZXIoZm9yY2UsIHNraXBSZW5kZXIpIHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgIC8vIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciA9IGRpZCBIYW5kc29udGFibGUgcmVxdWVzdCBmdWxsIHJlbmRlcj9cbiAgICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdiZWZvcmVWaWV3UmVuZGVyJywgdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyLCBza2lwUmVuZGVyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYGFmdGVyUmVuZGVyYCBjYWxsYmFjay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZSBJZiBgdHJ1ZWAgcmVuZGVyaW5nIHdhcyB0cmlnZ2VyZWQgYnkgYSBjaGFuZ2Ugb2Ygc2V0dGluZ3Mgb3IgZGF0YSBvciBgZmFsc2VgIGlmXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyaW5nIHdhcyB0cmlnZ2VyZWQgYnkgc2Nyb2xsaW5nIG9yIG1vdmluZyBzZWxlY3Rpb24uXG4gICAqL1xuICBhZnRlclJlbmRlcihmb3JjZSkge1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgLy8gdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyID0gZGlkIEhhbmRzb250YWJsZSByZXF1ZXN0IGZ1bGwgcmVuZGVyP1xuICAgICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyVmlld1JlbmRlcicsIHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGVuZCByb3cgaGVhZGVyIHRvIGEgVEggZWxlbWVudC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbFJvd0luZGV4IFRoZSB2aXN1YWwgcm93IGluZGV4LlxuICAgKiBAcGFyYW0ge0hUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50fSBUSCBUaGUgdGFibGUgaGVhZGVyIGVsZW1lbnQuXG4gICAqL1xuICBhcHBlbmRSb3dIZWFkZXIodmlzdWFsUm93SW5kZXgsIFRIKSB7XG4gICAgaWYgKFRILmZpcnN0Q2hpbGQpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFRILmZpcnN0Q2hpbGQ7XG4gICAgICBpZiAoISgwLCBfZWxlbWVudC5oYXNDbGFzcykoY29udGFpbmVyLCAncmVsYXRpdmUnKSkge1xuICAgICAgICAoMCwgX2VsZW1lbnQuZW1wdHkpKFRIKTtcbiAgICAgICAgdGhpcy5hcHBlbmRSb3dIZWFkZXIodmlzdWFsUm93SW5kZXgsIFRIKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDZWxsSGVhZGVyKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcucm93SGVhZGVyJyksIHZpc3VhbFJvd0luZGV4LCB0aGlzLmhvdC5nZXRSb3dIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJvb3REb2N1bWVudCxcbiAgICAgICAgZ2V0Um93SGVhZGVyXG4gICAgICB9ID0gdGhpcy5ob3Q7XG4gICAgICBjb25zdCBkaXYgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjb25zdCBzcGFuID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgIGRpdi5jbGFzc05hbWUgPSAncmVsYXRpdmUnO1xuICAgICAgc3Bhbi5jbGFzc05hbWUgPSAncm93SGVhZGVyJztcbiAgICAgIHRoaXMudXBkYXRlQ2VsbEhlYWRlcihzcGFuLCB2aXN1YWxSb3dJbmRleCwgZ2V0Um93SGVhZGVyKTtcbiAgICAgIGRpdi5hcHBlbmRDaGlsZChzcGFuKTtcbiAgICAgIFRILmFwcGVuZENoaWxkKGRpdik7XG4gICAgfVxuICAgIHRoaXMuaG90LnJ1bkhvb2tzKCdhZnRlckdldFJvd0hlYWRlcicsIHZpc3VhbFJvd0luZGV4LCBUSCk7XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIGNvbHVtbiBoZWFkZXIgdG8gYSBUSCBlbGVtZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmlzdWFsQ29sdW1uSW5kZXggVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtIVE1MVGFibGVDZWxsRWxlbWVudH0gVEggVGhlIHRhYmxlIGhlYWRlciBlbGVtZW50LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbbGFiZWxdIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGhlYWRlciBsYWJlbC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtoZWFkZXJMZXZlbD0wXSBUaGUgaW5kZXggb2YgaGVhZGVyIGxldmVsIGNvdW50aW5nIGZyb20gdGhlIHRvcCAocG9zaXRpdmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgY291bnRpbmcgZnJvbSAwIHRvIE4pLlxuICAgKi9cbiAgYXBwZW5kQ29sSGVhZGVyKHZpc3VhbENvbHVtbkluZGV4LCBUSCkge1xuICAgIGxldCBsYWJlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdGhpcy5ob3QuZ2V0Q29sSGVhZGVyO1xuICAgIGxldCBoZWFkZXJMZXZlbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogMDtcbiAgICBpZiAoVEguZmlyc3RDaGlsZCkge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gVEguZmlyc3RDaGlsZDtcbiAgICAgIGlmICgoMCwgX2VsZW1lbnQuaGFzQ2xhc3MpKGNvbnRhaW5lciwgJ3JlbGF0aXZlJykpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsSGVhZGVyKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY29sSGVhZGVyJyksIHZpc3VhbENvbHVtbkluZGV4LCBsYWJlbCwgaGVhZGVyTGV2ZWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LmVtcHR5KShUSCk7XG4gICAgICAgIHRoaXMuYXBwZW5kQ29sSGVhZGVyKHZpc3VhbENvbHVtbkluZGV4LCBUSCwgbGFiZWwsIGhlYWRlckxldmVsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICByb290RG9jdW1lbnRcbiAgICAgIH0gPSB0aGlzLmhvdDtcbiAgICAgIGNvbnN0IGRpdiA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIGNvbnN0IHNwYW4gPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgZGl2LmNsYXNzTmFtZSA9ICdyZWxhdGl2ZSc7XG4gICAgICBzcGFuLmNsYXNzTmFtZSA9ICdjb2xIZWFkZXInO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MpIHtcbiAgICAgICAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkoZGl2LCAuLi4oMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCkpO1xuICAgICAgICAoMCwgX2VsZW1lbnQuc2V0QXR0cmlidXRlKShzcGFuLCAuLi4oMCwgX2ExMXkuQTExWV9QUkVTRU5UQVRJT04pKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVDZWxsSGVhZGVyKHNwYW4sIHZpc3VhbENvbHVtbkluZGV4LCBsYWJlbCwgaGVhZGVyTGV2ZWwpO1xuICAgICAgZGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgVEguYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICB9XG4gICAgdGhpcy5ob3QucnVuSG9va3MoJ2FmdGVyR2V0Q29sSGVhZGVyJywgdmlzdWFsQ29sdW1uSW5kZXgsIFRILCBoZWFkZXJMZXZlbCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBoZWFkZXIgY2VsbCBjb250ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggUm93IGluZGV4IG9yIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29udGVudCBGdW5jdGlvbiB3aGljaCBzaG91bGQgYmUgcmV0dXJucyBjb250ZW50IGZvciB0aGlzIGNlbGwuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaGVhZGVyTGV2ZWw9MF0gVGhlIGluZGV4IG9mIGhlYWRlciBsZXZlbCBjb3VudGluZyBmcm9tIHRoZSB0b3AgKHBvc2l0aXZlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGNvdW50aW5nIGZyb20gMCB0byBOKS5cbiAgICovXG4gIHVwZGF0ZUNlbGxIZWFkZXIoZWxlbWVudCwgaW5kZXgsIGNvbnRlbnQpIHtcbiAgICBsZXQgaGVhZGVyTGV2ZWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IDA7XG4gICAgbGV0IHJlbmRlcmVkSW5kZXggPSBpbmRleDtcbiAgICBjb25zdCBwYXJlbnRPdmVybGF5ID0gdGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGVsZW1lbnQpIHx8IHRoaXMuX3d0O1xuXG4gICAgLy8gcHJldmVudCB3cm9uZyBjYWxjdWxhdGlvbnMgZnJvbSBTYW1wbGVHZW5lcmF0b3JcbiAgICBpZiAoZWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoKDAsIF9lbGVtZW50Lmhhc0NsYXNzKShlbGVtZW50LCAnY29sSGVhZGVyJykpIHtcbiAgICAgICAgcmVuZGVyZWRJbmRleCA9IHBhcmVudE92ZXJsYXkud3RUYWJsZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfZWxlbWVudC5oYXNDbGFzcykoZWxlbWVudCwgJ3Jvd0hlYWRlcicpKSB7XG4gICAgICAgIHJlbmRlcmVkSW5kZXggPSBwYXJlbnRPdmVybGF5Lnd0VGFibGUucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVuZGVyZWRJbmRleCA+IC0xKSB7XG4gICAgICAoMCwgX2VsZW1lbnQuZmFzdElubmVySFRNTCkoZWxlbWVudCwgY29udGVudChpbmRleCwgaGVhZGVyTGV2ZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvaXNzdWVzLzE5NDZcbiAgICAgICgwLCBfZWxlbWVudC5mYXN0SW5uZXJUZXh0KShlbGVtZW50LCBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCkpO1xuICAgICAgKDAsIF9lbGVtZW50LmFkZENsYXNzKShlbGVtZW50LCAnY29ybmVySGVhZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZWxlbWVudCdzIGxlZnQgKG9yIHJpZ2h0IGluIFJUTCBtb2RlKSBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQsIHJldHVybnMgbWF4aW11bVxuICAgKiBlbGVtZW50IHdpZHRoIHVudGlsIHRoZSByaWdodCAob3IgbGVmdCkgZWRnZSBvZiB0aGUgdmlld3BvcnQgKGJlZm9yZSBzY3JvbGxiYXIpLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5saW5lT2Zmc2V0IFRoZSBsZWZ0IChvciByaWdodCBpbiBSVEwgbW9kZSkgb2Zmc2V0LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoaW5saW5lT2Zmc2V0KSB7XG4gICAgY29uc3Qgd29ya3NwYWNlV2lkdGggPSB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSB3b3Jrc3BhY2VXaWR0aCAtIGlubGluZU9mZnNldDtcbiAgICByZXR1cm4gbWF4V2lkdGggPiAwID8gbWF4V2lkdGggOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgZWxlbWVudCdzIHRvcCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgdmlld3BvcnQsIHJldHVybnMgbWF4aW11bSBlbGVtZW50IGhlaWdodCB1bnRpbCB0aGUgYm90dG9tXG4gICAqIGVkZ2Ugb2YgdGhlIHZpZXdwb3J0IChiZWZvcmUgc2Nyb2xsYmFyKS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRvcE9mZnNldCBUaGUgdG9wIG9mZnNldC5cbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIG1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCh0b3BPZmZzZXQpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VIZWlnaHQgPSB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IHdvcmtzcGFjZUhlaWdodCAtIHRvcE9mZnNldDtcbiAgICByZXR1cm4gbWF4SGVpZ2h0ID4gMCA/IG1heEhlaWdodCA6IDA7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBuZXcgZGltZW5zaW9ucyBvZiB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIHRhYmxlIHdpZHRoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IFRoZSB0YWJsZSBoZWlnaHQuXG4gICAqL1xuICBzZXRMYXN0U2l6ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9sYXN0V2lkdGgsIHRoaXMsIHdpZHRoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2xhc3RIZWlnaHQsIHRoaXMsIGhlaWdodCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBjYWNoZWQgZGltZW5zaW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdldExhc3RTaXplKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9sYXN0V2lkdGgsIHRoaXMpLFxuICAgICAgaGVpZ2h0OiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2xhc3RIZWlnaHQsIHRoaXMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBmdWxseSB2aXNpYmxlIHJvdyBpbiB0aGUgdGFibGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLmhvdC52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFZpc2libGVSb3coKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBmdWxseSB2aXNpYmxlIHJvdyBpbiB0aGUgdGFibGUgdmlld3BvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkge1xuICAgIHJldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaG90LnZpZXcuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlUm93KCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGZpcnN0IGZ1bGx5IHZpc2libGUgY29sdW1uIGluIHRoZSB0YWJsZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCkge1xuICAgIHJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaG90LnZpZXcuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsYXN0IGZ1bGx5IHZpc2libGUgY29sdW1uIGluIHRoZSB0YWJsZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5ob3Qudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgcGFydGlhbGx5IHZpc2libGUgcm93IGluIHRoZSB0YWJsZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpIHtcbiAgICByZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLmhvdC52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBwYXJ0aWFsbHkgdmlzaWJsZSByb3cgaW4gdGhlIHRhYmxlIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5ob3Qudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmlyc3QgcGFydGlhbGx5IHZpc2libGUgY29sdW1uIGluIHRoZSB0YWJsZSB2aWV3cG9ydC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpIHtcbiAgICByZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLmhvdC52aWV3Ll93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGFzdCBwYXJ0aWFsbHkgdmlzaWJsZSBjb2x1bW4gaW4gdGhlIHRhYmxlIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5ob3Qudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgY291bnQgb2YgdGhlIHJlbmRlcmVkIGNvbHVtbiBoZWFkZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2NvbHVtbkhlYWRlcnNDb3VudCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdG90YWwgY291bnQgb2YgdGhlIHJlbmRlcmVkIHJvdyBoZWFkZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0Um93SGVhZGVyc0NvdW50KCkge1xuICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQoX3Jvd0hlYWRlcnNDb3VudCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUncyB2aWV3cG9ydCB3aWR0aC4gV2hlbiB0aGUgdGFibGUgaGFzIGRlZmluZWQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcixcbiAgICogYW5kIHRoZSBjb2x1bW5zIGRvIG5vdCBmaWxsIHRoZSBlbnRpcmUgdmlld3BvcnQsIHRoZSB2aWV3cG9ydCB3aWR0aCBpcyBlcXVhbCB0byB0aGUgc3VtIG9mXG4gICAqIHRoZSBjb2x1bW5zJyB3aWR0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRWaWV3cG9ydFdpZHRoKCkge1xuICAgIHJldHVybiB0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWJsZSdzIHRvdGFsIHdpZHRoIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFyIHdpZHRoLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0V29ya3NwYWNlV2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlV2lkdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB0YWJsZSdzIHZpZXdwb3J0IGhlaWdodC4gV2hlbiB0aGUgdGFibGUgaGFzIGRlZmluZWQgdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lcixcbiAgICogYW5kIHRoZSByb3dzIGRvIG5vdCBmaWxsIHRoZSBlbnRpcmUgdmlld3BvcnQsIHRoZSB2aWV3cG9ydCBoZWlnaHQgaXMgZXF1YWwgdG8gdGhlIHN1bSBvZlxuICAgKiB0aGUgcm93cycgaGVpZ2h0cy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFZpZXdwb3J0SGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdGFibGUncyB0b3RhbCBoZWlnaHQgaW5jbHVkaW5nIHRoZSBzY3JvbGxiYXIgaGVpZ2h0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0V29ya3NwYWNlSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpO1xuICB9XG4gIC8qKlxuICAgKiBEZXN0cm95cyBpbnRlcm5hbCBXYWxrT25UYWJsZSdzIGluc3RhbmNlLiBEZXRhY2hlcyBhbGwgb2YgdGhlIGJvbmRlZCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuX3d0LmRlc3Ryb3koKTtcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCk7XG4gIH1cbn1cbmZ1bmN0aW9uIF9nZXRBcmlhQ29sY291bnQoKSB7XG4gIHJldHVybiBwYXJzZUludCh0aGlzLmhvdC5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoKDAsIF9hMTF5LkExMVlfQ09MQ09VTlQpKClbMF0pLCAxMCk7XG59XG4vKipcbiAqIFVwZGF0ZSB0aGUgYGFyaWEtY29sY291bnRgIGF0dHJpYnV0ZSBieSB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGRlbHRhIFRoZSBudW1iZXIgb2YgY29sdW1ucyB0byBhZGQgb3IgcmVtb3ZlIHRvIHRoZSBhcmlhIHRhZy5cbiAqL1xuZnVuY3Rpb24gX3VwZGF0ZUFyaWFDb2xjb3VudChkZWx0YSkge1xuICBjb25zdCBjb2xDb3VudCA9IF9hc3NlcnRDbGFzc0JyYW5kKF9UYWJsZVZpZXdfYnJhbmQsIHRoaXMsIF9nZXRBcmlhQ29sY291bnQpLmNhbGwodGhpcykgKyBkZWx0YTtcbiAgKDAsIF9lbGVtZW50LnNldEF0dHJpYnV0ZSkodGhpcy5ob3Qucm9vdEVsZW1lbnQsIC4uLigwLCBfYTExeS5BMTFZX0NPTENPVU5UKShjb2xDb3VudCkpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gVGFibGVWaWV3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmludGVyc2VjdGlvbi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1kaXNqb2ludC1mcm9tLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1YnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdXBlcnNldC1vZi52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zeW1tZXRyaWMtZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC51bmlvbi52Mi5qc1wiKTtcbnZhciBfb2JzZXJ2ZXIgPSByZXF1aXJlKFwiLi9vYnNlcnZlclwiKTtcbnZhciBfdXRpbHMgPSByZXF1aXJlKFwiLi91dGlsc1wiKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocywgYSkgeyByZXR1cm4gcy5nZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSkpOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgYSwgcikgeyByZXR1cm4gcy5zZXQoX2Fzc2VydENsYXNzQnJhbmQocywgYSksIHIpLCByOyB9XG5mdW5jdGlvbiBfYXNzZXJ0Q2xhc3NCcmFuZChlLCB0LCBuKSB7IGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUgPyBlID09PSB0IDogZS5oYXModCkpIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHQgOiBuOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0XCIpOyB9XG4vKipcbiAqIFRoZSBDaGFuZ2VzT2JzZXJ2YWJsZSBtb2R1bGUgaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHJlc291cmNlIHRoYXQgcHJvdmlkZXNcbiAqIHRoZSBhYmlsaXR5IHRvIG9ic2VydmUgdGhlIGNoYW5nZXMgdGhhdCBoYXBwZW5lZCBpbiB0aGUgaW5kZXggbWFwIGluZGV4ZXMgZHVyaW5nXG4gKiB0aGUgY29kZSBydW5uaW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2xhc3MgQ2hhbmdlc09ic2VydmFibGVcbiAqL1xudmFyIF9vYnNlcnZlcnMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaW5kZXhNYXRyaXggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfY3VycmVudEluZGV4U3RhdGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaXNNYXRyaXhJbmRleGVzSW5pdGlhbGl6ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbnZhciBfaW5pdGlhbEluZGV4VmFsdWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbmNsYXNzIENoYW5nZXNPYnNlcnZhYmxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbGV0IHtcbiAgICAgIGluaXRpYWxJbmRleFZhbHVlXG4gICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgLyoqXG4gICAgICogVGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBDaGFuZ2VzT2JzZXJ2ZXIgaW5zdGFuY2VzLlxuICAgICAqXG4gICAgICogQHR5cGUge0NoYW5nZXNPYnNlcnZlcltdfVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9vYnNlcnZlcnMsIG5ldyBTZXQoKSk7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgd2l0aCBkZWZhdWx0IHZhbHVlcyB0aGF0IGFjdCBhcyBhIGJhc2UgYXJyYXkgdGhhdCB3aWxsIGJlIGNvbXBhcmVkIHdpdGhcbiAgICAgKiB0aGUgbGFzdCBzYXZlZCBpbmRleCBzdGF0ZS4gVGhlIGNoYW5nZXMgYXJlIGdlbmVyYXRlZCBhbmQgaW1tZWRpYXRlbHkgc2VuZCB0aHJvdWdoXG4gICAgICogdGhlIG5ld2x5IGNyZWF0ZWQgQ2hhbmdlc09ic2VydmVyIG9iamVjdC4gVGhhbmtzIHRvIHRoYXQsIHRoZSBvYnNlcnZlciBpbml0aWFsbHkgaGFzXG4gICAgICogYWxsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaW5kZXhlcyBhcmUgY3VycmVudGx5IGNoYW5nZWQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2luZGV4TWF0cml4LCBbXSk7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgdGhhdCBob2xkcyB0aGUgaW5kZXhlcyBzdGF0ZSB0aGF0IGlzIGN1cnJlbnRseSB2YWxpZC4gVGhlIHZhbHVlIGlzIGNoYW5nZWQgb24gZXZlcnlcbiAgICAgKiBpbmRleCBtYXBwZXIgY2FjaGUgdXBkYXRlLlxuICAgICAqXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jdXJyZW50SW5kZXhTdGF0ZSwgW10pO1xuICAgIC8qKlxuICAgICAqIFRoZSBmbGFnIGRldGVybWluZXMgaWYgdGhlIG9ic2VydmFibGUgaXMgaW5pdGlhbGl6ZWQgb3Igbm90LiBOb3QgaW5pdGlhbGl6ZWQgb2JqZWN0IGNyZWF0ZXNcbiAgICAgKiBpbmRleCBtYXRyaXggb25jZSB3aGlsZSBlbWl0dGluZyBuZXcgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9pc01hdHJpeEluZGV4ZXNJbml0aWFsaXplZCwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIFRoZSBpbml0aWFsIGluZGV4IHZhbHVlIGFsbG93cyBjb250cm9sIGZyb20gd2hhdCB2YWx1ZSB0aGUgaW5kZXggbWF0cml4IGFycmF5IHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgKiBDaGFuZ2luZyB0aGF0IHZhbHVlIGNoYW5nZXMgaG93IHRoZSBhcnJheSBkaWZmIGdlbmVyYXRlcyB0aGUgY2hhbmdlcyBmb3IgdGhlIGluaXRpYWwgZGF0YVxuICAgICAqIHNlbnQgdG8gdGhlIHN1YnNjcmliZXJzLiBGb3IgZXhhbXBsZSwgdGhlIGNoYW5nZXMgY2FuIGJlIHRyaWdnZXJlZCBieSBkZXRlY3RpbmcgdGhlIGNoYW5nZXNcbiAgICAgKiBmcm9tIGBmYWxzZWAgdG8gYHRydWVgIHZhbHVlIG9yIHZpY2UgdmVyc2EuIEdlbmVyYWxseSwgaXQgZGVwZW5kcyBvbiB3aGljaCBpbmRleCBtYXAgdHlwZVxuICAgICAqIHRoZSBPYnNlcnZhYmxlIHdpbGwgd29yayB3aXRoLiBGb3IgXCJoaWRpbmdcIiBvciBcInRyaW1taW5nXCIgaW5kZXggdHlwZXMsIGl0IHdpbGwgYmUgYm9vbGVhblxuICAgICAqIHZhbHVlcy4gRm9yIHZhcmlvdXMgaW5kZXggbWFwcywgaXQgY2FuIGJlIGFueXRoaW5nLCBidXQgSSBzdXNwZWN0IHRoYXQgdGhlIG1vc3QgYXBwcm9wcmlhdGVcbiAgICAgKiBpbml0aWFsIHZhbHVlIHdpbGwgYmUgXCJ1bmRlZmluZWRcIiBpbiB0aGF0IGNhc2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW5pdGlhbEluZGV4VmFsdWUsIGZhbHNlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2luaXRpYWxJbmRleFZhbHVlLCB0aGlzLCBpbml0aWFsSW5kZXhWYWx1ZSAhPT0gbnVsbCAmJiBpbml0aWFsSW5kZXhWYWx1ZSAhPT0gdm9pZCAwID8gaW5pdGlhbEluZGV4VmFsdWUgOiBmYWxzZSk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBDaGFuZ2VzT2JzZXJ2ZXIgb2JqZWN0LiBUaGUgcmVzb3VyY2VcbiAgICogYWxsb3dzIHN1YnNjcmliaW5nIHRvIHRoZSBpbmRleCBjaGFuZ2VzIHRoYXQgZHVyaW5nIHRoZSBjb2RlIHJ1bm5pbmcgbWF5IGNoYW5nZS5cbiAgICogQ2hhbmdlcyBhcmUgZW1pdHRlZCBhcyBhbiBhcnJheSBvZiB0aGUgaW5kZXggY2hhbmdlLiBFYWNoIGNoYW5nZSBpcyByZXByZXNlbnRlZFxuICAgKiBzZXBhcmF0ZWx5IGFzIGFuIG9iamVjdCB3aXRoIGBvcGAsIGBpbmRleGAsIGBvbGRWYWx1ZWAsIGFuZCBgbmV3VmFsdWVgIHByb3BzLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogYGBgXG4gICAqIFtcbiAgICogICB7IG9wOiAncmVwbGFjZScsIGluZGV4OiAxLCBvbGRWYWx1ZTogZmFsc2UsIG5ld1ZhbHVlOiB0cnVlIH0sXG4gICAqICAgeyBvcDogJ3JlcGxhY2UnLCBpbmRleDogMywgb2xkVmFsdWU6IGZhbHNlLCBuZXdWYWx1ZTogdHJ1ZSB9LFxuICAgKiAgIHsgb3A6ICdpbnNlcnQnLCBpbmRleDogNCwgb2xkVmFsdWU6IGZhbHNlLCBuZXdWYWx1ZTogdHJ1ZSB9LFxuICAgKiBdXG4gICAqIC8vIG9yIHdoZW4gdGhlIG5ldyBpbmRleCBtYXAgY2hhbmdlcyBoYXZlIGxlc3MgaW5kZXhlc1xuICAgKiBbXG4gICAqICAgeyBvcDogJ3JlcGxhY2UnLCBpbmRleDogMSwgb2xkVmFsdWU6IGZhbHNlLCBuZXdWYWx1ZTogdHJ1ZSB9LFxuICAgKiAgIHsgb3A6ICdyZW1vdmUnLCBpbmRleDogNCwgb2xkVmFsdWU6IGZhbHNlLCBuZXdWYWx1ZTogdHJ1ZSB9LFxuICAgKiBdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Q2hhbmdlc09ic2VydmVyfVxuICAgKi9cbiAgLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIGNyZWF0ZU9ic2VydmVyKCkge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IF9vYnNlcnZlci5DaGFuZ2VzT2JzZXJ2ZXIoKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29ic2VydmVycywgdGhpcykuYWRkKG9ic2VydmVyKTtcbiAgICBvYnNlcnZlci5hZGRMb2NhbEhvb2soJ3Vuc3Vic2NyaWJlJywgKCkgPT4ge1xuICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KF9vYnNlcnZlcnMsIHRoaXMpLmRlbGV0ZShvYnNlcnZlcik7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIuX3dyaXRlSW5pdGlhbENoYW5nZXMoKDAsIF91dGlscy5hcnJheURpZmYpKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhNYXRyaXgsIHRoaXMpLCBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRJbmRleFN0YXRlLCB0aGlzKSkpO1xuICAgIHJldHVybiBvYnNlcnZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGlzIGFuIGVudHJ5IHBvaW50IGZvciB0cmlnZ2VyaW5nIG5ldyBpbmRleCBtYXAgY2hhbmdlcy4gRW1pdHRpbmcgdGhlXG4gICAqIGNoYW5nZXMgdHJpZ2dlcnMgY29tcGFyaW5nIGFsZ29yaXRobSB3aGljaCBjb21wYXJlcyBsYXN0IHNhdmVkIHN0YXRlIHdpdGggYSBuZXdcbiAgICogc3RhdGUuIFdoZW4gdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMsIHRoZSBjaGFuZ2VzIGFyZSBzZW50IHRvIGFsbCBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlc1N0YXRlIEFuIGFycmF5IHdpdGggaW5kZXggbWFwIHN0YXRlLlxuICAgKi9cbiAgZW1pdChpbmRleGVzU3RhdGUpIHtcbiAgICBsZXQgY3VycmVudEluZGV4U3RhdGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2N1cnJlbnRJbmRleFN0YXRlLCB0aGlzKTtcbiAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldChfaXNNYXRyaXhJbmRleGVzSW5pdGlhbGl6ZWQsIHRoaXMpIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldChfaW5kZXhNYXRyaXgsIHRoaXMpLmxlbmd0aCAhPT0gaW5kZXhlc1N0YXRlLmxlbmd0aCkge1xuICAgICAgaWYgKGluZGV4ZXNTdGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaW5kZXhlc1N0YXRlID0gbmV3IEFycmF5KGN1cnJlbnRJbmRleFN0YXRlLmxlbmd0aCkuZmlsbChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luaXRpYWxJbmRleFZhbHVlLCB0aGlzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2luZGV4TWF0cml4LCB0aGlzLCBuZXcgQXJyYXkoaW5kZXhlc1N0YXRlLmxlbmd0aCkuZmlsbChfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luaXRpYWxJbmRleFZhbHVlLCB0aGlzKSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQoX2lzTWF0cml4SW5kZXhlc0luaXRpYWxpemVkLCB0aGlzKSkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoX2lzTWF0cml4SW5kZXhlc0luaXRpYWxpemVkLCB0aGlzLCB0cnVlKTtcbiAgICAgICAgY3VycmVudEluZGV4U3RhdGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQoX2luZGV4TWF0cml4LCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2hhbmdlcyA9ICgwLCBfdXRpbHMuYXJyYXlEaWZmKShjdXJyZW50SW5kZXhTdGF0ZSwgaW5kZXhlc1N0YXRlKTtcbiAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQoX29ic2VydmVycywgdGhpcykuZm9yRWFjaChvYnNlcnZlciA9PiBvYnNlcnZlci5fd3JpdGUoY2hhbmdlcykpO1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudEluZGV4U3RhdGUsIHRoaXMsIGluZGV4ZXNTdGF0ZSk7XG4gIH1cbn1cbmV4cG9ydHMuQ2hhbmdlc09ic2VydmFibGUgPSBDaGFuZ2VzT2JzZXJ2YWJsZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyhvYmosIHByaXZhdGVNYXAsIHZhbHVlKSB7IF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZU1hcCk7IHByaXZhdGVNYXAuc2V0KG9iaiwgdmFsdWUpOyB9XG5mdW5jdGlvbiBfY2hlY2tQcml2YXRlUmVkZWNsYXJhdGlvbihvYmosIHByaXZhdGVDb2xsZWN0aW9uKSB7IGlmIChwcml2YXRlQ29sbGVjdGlvbi5oYXMob2JqKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3RcIik7IH0gfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIGEsIHIpIHsgcmV0dXJuIHMuc2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpLCByKSwgcjsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHMsIGEpIHsgcmV0dXJuIHMuZ2V0KF9hc3NlcnRDbGFzc0JyYW5kKHMsIGEpKTsgfVxuZnVuY3Rpb24gX2Fzc2VydENsYXNzQnJhbmQoZSwgdCwgbikgeyBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBlID8gZSA9PT0gdCA6IGUuaGFzKHQpKSByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0IDogbjsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdFwiKTsgfVxuLyoqXG4gKiBUaGUgQ2hhbmdlc09ic2VydmVyIG1vZHVsZSBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgZGlzcG9zYWJsZSByZXNvdXJjZVxuICogcHJvdmlkZWQgYnkgdGhlIENoYW5nZXNPYnNlcnZhYmxlIG1vZHVsZS5cbiAqXG4gKiBAY2xhc3MgQ2hhbmdlc09ic2VydmVyXG4gKi9cbnZhciBfY3VycmVudEluaXRpYWxDaGFuZ2VzID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG5jbGFzcyBDaGFuZ2VzT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGQgaG9sZHMgaW5pdGlhbCBjaGFuZ2VzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIG5vdGlmeSB0aGUgY2FsbGJhY2tzIGFkZGVkIHVzaW5nXG4gICAgICogc3Vic2NyaWJlIG1ldGhvZC4gUmVnYXJkbGVzcyBvZiB0aGUgbW9tZW50IG9mIGxpc3RlbmluZyBmb3IgY2hhbmdlcywgdGhlIHN1YnNjcmliZXJcbiAgICAgKiB3aWxsIGJlIG5vdGlmaWVkIG9uY2Ugd2l0aCBhbGwgY2hhbmdlcyBtYWRlIGJlZm9yZSBzdWJzY3JpYmluZy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY3VycmVudEluaXRpYWxDaGFuZ2VzLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgdG8gdGhlIG9ic2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgbmV3IGNoYW5nZXMgd2lsbCBhcHBlYXIuXG4gICAqIEByZXR1cm5zIHtDaGFuZ2VzT2JzZXJ2ZXJ9XG4gICAqL1xuICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmFkZExvY2FsSG9vaygnY2hhbmdlJywgY2FsbGJhY2spO1xuICAgIHRoaXMuX3dyaXRlKF9jbGFzc1ByaXZhdGVGaWVsZEdldChfY3VycmVudEluaXRpYWxDaGFuZ2VzLCB0aGlzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmVzIGFsbCBzdWJzY3JpcHRpb25zLiBBZnRlciB0aGUgbWV0aG9kIGNhbGwsIHRoZSBvYnNlcnZlciB3b3VsZCBub3QgcHJvZHVjZVxuICAgKiBhbnkgbmV3IGV2ZW50cy5cbiAgICpcbiAgICogQHJldHVybnMge0NoYW5nZXNPYnNlcnZlcn1cbiAgICovXG4gIHVuc3Vic2NyaWJlKCkge1xuICAgIHRoaXMucnVuTG9jYWxIb29rcygndW5zdWJzY3JpYmUnKTtcbiAgICB0aGlzLmNsZWFyTG9jYWxIb29rcygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB3cml0ZSBtZXRob2QgaXMgZXhlY3V0ZWQgYnkgdGhlIENoYW5nZXNPYnNlcnZhYmxlIG1vZHVsZS4gVGhlIG1vZHVsZSBwcm9kdWNlcyBhbGxcbiAgICogY2hhbmdlcyBldmVudHMgdGhhdCBhcmUgZGlzdHJpYnV0ZWQgZnVydGhlciBieSB0aGUgb2JzZXJ2ZXIuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VzIFRoZSBjaHVuayBvZiBjaGFuZ2VzIHByb2R1Y2VkIGJ5IHRoZSBDaGFuZ2VzT2JzZXJ2YWJsZSBtb2R1bGUuXG4gICAqIEByZXR1cm5zIHtDaGFuZ2VzT2JzZXJ2ZXJ9XG4gICAqL1xuICBfd3JpdGUoY2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnY2hhbmdlJywgY2hhbmdlcyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB3cml0ZSBtZXRob2QgaXMgZXhlY3V0ZWQgYnkgdGhlIENoYW5nZXNPYnNlcnZhYmxlIG1vZHVsZS4gVGhlIG1vZHVsZSBwcm9kdWNlcyBpbml0aWFsXG4gICAqIGNoYW5nZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gbm90aWZ5IG5ldyBzdWJzY3JpYmVycy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGluaXRpYWxDaGFuZ2VzIFRoZSBjaHVuayBvZiBjaGFuZ2VzIHByb2R1Y2VkIGJ5IHRoZSBDaGFuZ2VzT2JzZXJ2YWJsZSBtb2R1bGUuXG4gICAqL1xuICBfd3JpdGVJbml0aWFsQ2hhbmdlcyhpbml0aWFsQ2hhbmdlcykge1xuICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChfY3VycmVudEluaXRpYWxDaGFuZ2VzLCB0aGlzLCBpbml0aWFsQ2hhbmdlcyk7XG4gIH1cbn1cbmV4cG9ydHMuQ2hhbmdlc09ic2VydmVyID0gQ2hhbmdlc09ic2VydmVyO1xuKDAsIF9vYmplY3QubWl4aW4pKENoYW5nZXNPYnNlcnZlciwgX2xvY2FsSG9va3MuZGVmYXVsdCk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmFycmF5RGlmZiA9IGFycmF5RGlmZjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbi8qKlxuICogQW4gYXJyYXkgZGlmZiBpbXBsZW1lbnRhdGlvbi4gVGhlIGZ1bmN0aW9uIGl0ZXJhdGVzIHRocm91Z2ggdGhlIGFycmF5cyBhbmQgZGVwZW5kc1xuICogb24gdGhlIGRpZmYgcmVzdWx0cywgY29sbGVjdCB0aGUgY2hhbmdlcyBhcyBhIGxpc3Qgb2YgdGhlIG9iamVjdHMuXG4gKlxuICogRWFjaCBvYmplY3QgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSBpbmRleGVzIG9mIHRoZSBhcnJheXMuXG4gKiBUaGUgY2hhbmdlcyBhbHNvIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgbmV3IGFuZCBwcmV2aW91cyBhcnJheSB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGJhc2VBcnJheSBUaGUgYmFzZSBhcnJheSB0byBkaWZmIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBuZXdBcnJheSBUaGUgbmV3IGFycmF5IHRvIGNvbXBhcmUgd2l0aC5cbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYXJyYXlEaWZmKGJhc2VBcnJheSwgbmV3QXJyYXkpIHtcbiAgY29uc3QgY2hhbmdlcyA9IFtdO1xuICBsZXQgaSA9IDA7XG4gIGxldCBqID0gMDtcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1wbHVzcGx1cyAqL1xuICBmb3IgKDsgaSA8IGJhc2VBcnJheS5sZW5ndGggJiYgaiA8IG5ld0FycmF5Lmxlbmd0aDsgaSsrLCBqKyspIHtcbiAgICBpZiAoYmFzZUFycmF5W2ldICE9PSBuZXdBcnJheVtqXSkge1xuICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgb3A6ICdyZXBsYWNlJyxcbiAgICAgICAgaW5kZXg6IGosXG4gICAgICAgIG9sZFZhbHVlOiBiYXNlQXJyYXlbaV0sXG4gICAgICAgIG5ld1ZhbHVlOiBuZXdBcnJheVtqXVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGZvciAoOyBpIDwgbmV3QXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgb3A6ICdpbnNlcnQnLFxuICAgICAgaW5kZXg6IGksXG4gICAgICBvbGRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgbmV3VmFsdWU6IG5ld0FycmF5W2ldXG4gICAgfSk7XG4gIH1cbiAgZm9yICg7IGogPCBiYXNlQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICBjaGFuZ2VzLnB1c2goe1xuICAgICAgb3A6ICdyZW1vdmUnLFxuICAgICAgaW5kZXg6IGosXG4gICAgICBvbGRWYWx1ZTogYmFzZUFycmF5W2pdLFxuICAgICAgbmV3VmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBjaGFuZ2VzO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgSW5kZXhNYXBwZXI6IHRydWUsXG4gIGdldFJlZ2lzdGVyZWRNYXBzQ291bnRlcjogdHJ1ZSxcbiAgZ2V0SW5jcmVhc2VkSW5kZXhlczogdHJ1ZSxcbiAgZ2V0RGVjcmVhc2VkSW5kZXhlczogdHJ1ZSxcbiAgYWx0ZXJVdGlsc0ZhY3Rvcnk6IHRydWVcbn07XG52YXIgX2luZGV4TWFwcGVyID0gcmVxdWlyZShcIi4vaW5kZXhNYXBwZXJcIik7XG5leHBvcnRzLkluZGV4TWFwcGVyID0gX2luZGV4TWFwcGVyLkluZGV4TWFwcGVyO1xudmFyIF9tYXBDb2xsZWN0aW9uID0gcmVxdWlyZShcIi4vbWFwQ29sbGVjdGlvbnMvbWFwQ29sbGVjdGlvblwiKTtcbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyID0gX21hcENvbGxlY3Rpb24uZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyO1xudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL21hcHMvdXRpbHNcIik7XG5leHBvcnRzLmdldEluY3JlYXNlZEluZGV4ZXMgPSBfdXRpbHMuZ2V0SW5jcmVhc2VkSW5kZXhlcztcbmV4cG9ydHMuZ2V0RGVjcmVhc2VkSW5kZXhlcyA9IF91dGlscy5nZXREZWNyZWFzZWRJbmRleGVzO1xuZXhwb3J0cy5hbHRlclV0aWxzRmFjdG9yeSA9IF91dGlscy5hbHRlclV0aWxzRmFjdG9yeTtcbnZhciBfbWFwcyA9IHJlcXVpcmUoXCIuL21hcHNcIik7XG5PYmplY3Qua2V5cyhfbWFwcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX21hcHNba2V5XSkgcmV0dXJuO1xuICBleHBvcnRzW2tleV0gPSBfbWFwc1trZXldO1xufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLnYyLmpzXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9tYXBzID0gcmVxdWlyZShcIi4vbWFwc1wiKTtcbnZhciBfbWFwQ29sbGVjdGlvbnMgPSByZXF1aXJlKFwiLi9tYXBDb2xsZWN0aW9uc1wiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL21peGVkXCIpO1xudmFyIF9vYnNlcnZhYmxlID0gcmVxdWlyZShcIi4vY2hhbmdlc09ic2VydmFibGUvb2JzZXJ2YWJsZVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogQSBzZXQgb2YgZGVwcmVjYXRlZCBmZWF0dXJlIG5hbWVzLlxuICpcbiAqIEB0eXBlIHtTZXQ8c3RyaW5nPn1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5jb25zdCBkZXByZWNhdGlvbldhcm5zID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEBjbGFzcyBJbmRleE1hcHBlclxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogSW5kZXggbWFwcGVyIHN0b3JlcywgcmVnaXN0ZXJzIGFuZCBtYW5hZ2VzIHRoZSBpbmRleGVzIG9uIHRoZSBiYXNpcyBvZiBjYWxjdWxhdGlvbnMgY29sbGVjdGVkIGZyb20gdGhlIHN1YnNpZGlhcnkgbWFwcy5cbiAqIEl0IHNob3VsZCBiZSBzZWVuIGFzIGEgc2luZ2xlIHNvdXJjZSBvZiB0cnV0aCAocmVnYXJkaW5nIHJvdyBhbmQgY29sdW1uIGluZGV4ZXMsIGZvciBleGFtcGxlLCB0aGVpciBzZXF1ZW5jZSwgaW5mb3JtYXRpb24gaWYgdGhleSBhcmUgc2tpcHBlZCBpbiB0aGUgcHJvY2VzcyBvZiByZW5kZXJpbmcgKGhpZGRlbiBvciB0cmltbWVkKSwgdmFsdWVzIGxpbmtlZCB0byB0aGVtKVxuICogZm9yIGFueSBvcGVyYXRpb24gdGhhdCBjb25zaWRlcnMgQ1JVRCBhY3Rpb25zIHN1Y2ggYXMgKippbnNlcnRpb24qKiwgKiptb3ZlbWVudCoqLCAqKnJlbW92YWwqKiBldGMsIGFuZCBpcyB1c2VkIHRvIHByb3Blcmx5IGNhbGN1bGF0ZSBwaHlzaWNhbCBhbmQgdmlzdWFsIGluZGV4ZXMgdHJhbnNsYXRpb25zIGluIGJvdGggd2F5cy5cbiAqIEl0IGhhcyBhIGJ1aWx0LWluIGNhY2hlIHRoYXQgaXMgdXBkYXRlZCBvbmx5IHdoZW4gdGhlIGRhdGEgb3Igc3RydWN0dXJlIGNoYW5nZXMuXG4gKlxuICogKipQaHlzaWNhbCBpbmRleCoqIGlzIGEgdHlwZSBvZiBhbiBpbmRleCBmcm9tIHRoZSBzZXF1ZW5jZSBvZiBpbmRleGVzIGFzc2lnbmVkIHRvIHRoZSBkYXRhIHNvdXJjZSByb3dzIG9yIGNvbHVtbnNcbiAqICAoZnJvbSAwIHRvIG4sIHdoZXJlIG4gaXMgbnVtYmVyIG9mIHRoZSBjZWxscyBvbiB0aGUgYXhpcyBvZiBkYXRhIHNldCkuXG4gKiAqKlZpc3VhbCBpbmRleCoqIGlzIGEgdHlwZSBvZiBhbiBpbmRleCBmcm9tIHRoZSBzZXF1ZW5jZSBvZiBpbmRleGVzIGFzc2lnbmVkIHRvIHJvd3Mgb3IgY29sdW1ucyBleGlzdGluZyBpbiB7QGxpbmsgRGF0YU1hcH0gKGZyb20gMCB0byBuLCB3aGVyZSBuIGlzIG51bWJlciBvZiB0aGUgY2VsbHMgb24gdGhlIGF4aXMgb2YgZGF0YSBzZXQpLlxuICogKipSZW5kZXJhYmxlIGluZGV4KiogaXMgYSB0eXBlIG9mIGFuIGluZGV4IGZyb20gdGhlIHNlcXVlbmNlIG9mIGluZGV4ZXMgYXNzaWduZWQgdG8gcm93cyBvciBjb2x1bW5zIHdob3NlIG1heSBiZSByZW5kZXJlZCAod2hlbiB0aGV5IGFyZSBpbiBhIHZpZXdwb3J0OyBmcm9tIDAgdG8gbiwgd2hlcmUgbiBpcyBudW1iZXIgb2YgdGhlIGNlbGxzIHJlbmRlcmFibGUgb24gdGhlIGF4aXMpLlxuICpcbiAqIFRoZXJlIGFyZSBkaWZmZXJlbnQga2luZHMgb2YgaW5kZXggbWFwcyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgY29sbGVjdGlvbnMgYW5kIGNhbiBiZSB1c2VkIGJ5IGEgcmVmZXJlbmNlLlxuICogVGhleSBhbHNvIGV4cG9zZSBwdWJsaWMgQVBJIGFuZCB0cmlnZ2VyIHR3byBsb2NhbCBob29rcyBzdWNoIGFzIGBpbml0YCAob24gaW5pdGlhbGl6YXRpb24pIGFuZCBgY2hhbmdlYCAob24gY2hhbmdlKS5cbiAqXG4gKiBUaGVzZSBhcmU6IHtAbGluayBJbmRleGVzU2VxdWVuY2V9LCB7QGxpbmsgUGh5c2ljYWxJbmRleFRvVmFsdWVNYXB9LCB7QGxpbmsgTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXB9LCB7QGxpbmsgSGlkaW5nTWFwfSwgYW5kIHtAbGluayBUcmltbWluZ01hcH0uXG4gKi9cbmNsYXNzIEluZGV4TWFwcGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogTWFwIGZvciBzdG9yaW5nIHRoZSBzZXF1ZW5jZSBvZiBpbmRleGVzLlxuICAgICAqXG4gICAgICogSXQgaXMgcmVnaXN0ZXJlZCBieSBkZWZhdWx0IGFuZCBtYXkgYmUgdXNlZCBmcm9tIEFQSSBtZXRob2RzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7SW5kZXhlc1NlcXVlbmNlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImluZGV4ZXNTZXF1ZW5jZVwiLCBuZXcgX21hcHMuSW5kZXhlc1NlcXVlbmNlKCkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gZm9yIGRpZmZlcmVudCB0cmltbWluZyBtYXBzLiBJbmRleGVzIG1hcmtlZCBhcyB0cmltbWVkIGluIGFueSBtYXAgV0lMTCBOT1QgYmUgaW5jbHVkZWQgaW5cbiAgICAgKiB0aGUge0BsaW5rIERhdGFNYXB9IGFuZCB3b24ndCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge01hcENvbGxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidHJpbW1pbmdNYXBzQ29sbGVjdGlvblwiLCBuZXcgX21hcENvbGxlY3Rpb25zLkFnZ3JlZ2F0ZWRDb2xsZWN0aW9uKHZhbHVlc0ZvckluZGV4ID0+IHZhbHVlc0ZvckluZGV4LnNvbWUodmFsdWUgPT4gdmFsdWUgPT09IHRydWUpLCBmYWxzZSkpO1xuICAgIC8qKlxuICAgICAqIENvbGxlY3Rpb24gZm9yIGRpZmZlcmVudCBoaWRpbmcgbWFwcy4gSW5kZXhlcyBtYXJrZWQgYXMgaGlkZGVuIGluIGFueSBtYXAgV0lMTCBiZSBpbmNsdWRlZCBpbiB0aGUge0BsaW5rIERhdGFNYXB9LFxuICAgICAqIGJ1dCB3b24ndCBiZSByZW5kZXJlZC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge01hcENvbGxlY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaGlkaW5nTWFwc0NvbGxlY3Rpb25cIiwgbmV3IF9tYXBDb2xsZWN0aW9ucy5BZ2dyZWdhdGVkQ29sbGVjdGlvbih2YWx1ZXNGb3JJbmRleCA9PiB2YWx1ZXNGb3JJbmRleC5zb21lKHZhbHVlID0+IHZhbHVlID09PSB0cnVlKSwgZmFsc2UpKTtcbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIGZvciBhbm90aGVyIGtpbmQgb2YgbWFwcy4gVGhlcmUgYXJlIHN0b3JlZCBtYXBwaW5ncyBmcm9tIGluZGV4ZXMgKHZpc3VhbCBvciBwaHlzaWNhbCkgdG8gdmFsdWVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7TWFwQ29sbGVjdGlvbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb25cIiwgbmV3IF9tYXBDb2xsZWN0aW9ucy5NYXBDb2xsZWN0aW9uKCkpO1xuICAgIC8qKlxuICAgICAqIFRoZSBjbGFzcyBpbnN0YW5jZSBjb2xsZWN0cyByb3cgYW5kIGNvbHVtbiBpbmRleCBjaGFuZ2VzIHRoYXQgaGFwcGVuIHdoaWxlIHRoZSBIYW5kc29udGFibGVcbiAgICAgKiBpcyBydW5uaW5nLiBUaGUgb2JqZWN0IGFsbG93cyBjcmVhdGluZyBvYnNlcnZlcnMgdGhhdCB5b3UgY2FuIHN1YnNjcmliZS4gRWFjaCBldmVudCByZXByZXNlbnRzXG4gICAgICogdGhlIGluZGV4IGNoYW5nZSAoZS5nLiwgaW5zZXJ0LCByZW1vdmluZywgY2hhbmdlIGluZGV4IHZhbHVlKSwgd2hpY2ggY2FuIGJlIGNvbnN1bWVkIGJ5IGFcbiAgICAgKiBkZXZlbG9wZXIgdG8gdXBkYXRlIGl0cyBsb2dpYy5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge0NoYW5nZXNPYnNlcnZhYmxlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlXCIsIG5ldyBfb2JzZXJ2YWJsZS5DaGFuZ2VzT2JzZXJ2YWJsZSh7XG4gICAgICBpbml0aWFsSW5kZXhWYWx1ZTogZmFsc2VcbiAgICB9KSk7XG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIGxpc3Qgb2Ygbm90IHRyaW1tZWQgaW5kZXhlcywgcmVzcGVjdGluZyB0aGUgaW5kZXhlcyBzZXF1ZW5jZSAocGh5c2ljYWwgaW5kZXhlcykuXG4gICAgICpcbiAgICAgKiBOb3RlOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdHJpbW1lZCBpbmRleCBjYW4gYmUgYWxzbyBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJub3RUcmltbWVkSW5kZXhlc0NhY2hlXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBDYWNoZSBmb3IgbGlzdCBvZiBub3QgaGlkZGVuIGluZGV4ZXMsIHJlc3BlY3RpbmcgdGhlIGluZGV4ZXMgc2VxdWVuY2UgKHBoeXNpY2FsIGluZGV4ZXMpLlxuICAgICAqXG4gICAgICogTm90ZTogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGhpZGRlbiBpbmRleCBjYW4gYmUgYWxzbyB0cmltbWVkLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwibm90SGlkZGVuSW5kZXhlc0NhY2hlXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIGRldGVybWluaW5nIHdoZXRoZXIgYWN0aW9ucyBwZXJmb3JtZWQgb24gaW5kZXggbWFwcGVyIGhhdmUgYmVlbiBiYXRjaGVkLiBJdCdzIHVzZWQgZm9yIGNhY2hlIG1hbmFnZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImlzQmF0Y2hlZFwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogRmxhZyBkZXRlcm1pbmluZyB3aGV0aGVyIGFueSBhY3Rpb24gb24gaW5kZXhlcyBzZXF1ZW5jZSBoYXMgYmVlbiBwZXJmb3JtZWQuIEl0J3MgdXNlZCBmb3IgY2FjaGUgbWFuYWdlbWVudC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZFwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogRmxhZyBpbmZvcm1pbmcgYWJvdXQgc291cmNlIG9mIHRoZSBjaGFuZ2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7dW5kZWZpbmVkfHN0cmluZ31cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJpbmRleGVzQ2hhbmdlU291cmNlXCIsIHVuZGVmaW5lZCk7XG4gICAgLyoqXG4gICAgICogRmxhZyBkZXRlcm1pbmluZyB3aGV0aGVyIGFueSBhY3Rpb24gb24gdHJpbW1lZCBpbmRleGVzIGhhcyBiZWVuIHBlcmZvcm1lZC4gSXQncyB1c2VkIGZvciBjYWNoZSBtYW5hZ2VtZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJ0cmltbWVkSW5kZXhlc0NoYW5nZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEZsYWcgZGV0ZXJtaW5pbmcgd2hldGhlciBhbnkgYWN0aW9uIG9uIGhpZGRlbiBpbmRleGVzIGhhcyBiZWVuIHBlcmZvcm1lZC4gSXQncyB1c2VkIGZvciBjYWNoZSBtYW5hZ2VtZW50LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJoaWRkZW5JbmRleGVzQ2hhbmdlZFwiLCBmYWxzZSk7XG4gICAgLyoqXG4gICAgICogUGh5c2ljYWwgaW5kZXhlcyAocmVzcGVjdGluZyB0aGUgc2VxdWVuY2Ugb2YgaW5kZXhlcykgd2hpY2ggbWF5IGJlIHJlbmRlcmVkICh3aGVuIHRoZXkgYXJlIGluIGEgdmlld3BvcnQpLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwicmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBWaXN1YWwgaW5kZXhlcyAobmF0aXZlIG1hcCdzIHZhbHVlKSBjb3JyZXNwb25kaW5nIHRvIHBoeXNpY2FsIGluZGV4ZXMgKG5hdGl2ZSBtYXAncyBpbmRleCkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGVcIiwgbmV3IE1hcCgpKTtcbiAgICAvKipcbiAgICAgKiBWaXN1YWwgaW5kZXhlcyAobmF0aXZlIG1hcCdzIHZhbHVlKSBjb3JyZXNwb25kaW5nIHRvIHBoeXNpY2FsIGluZGV4ZXMgKG5hdGl2ZSBtYXAncyBpbmRleCkuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEB0eXBlIHtNYXB9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZVwiLCBuZXcgTWFwKCkpO1xuICAgIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmFkZExvY2FsSG9vaygnY2hhbmdlJywgKCkgPT4ge1xuICAgICAgdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkID0gdHJ1ZTtcblxuICAgICAgLy8gU2VxdWVuY2Ugb2Ygc3RvcmVkIGluZGV4ZXMgbWlnaHQgY2hhbmdlLlxuICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdpbmRleGVzU2VxdWVuY2VDaGFuZ2UnLCB0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UpO1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCB0aGlzLmluZGV4ZXNTZXF1ZW5jZSwgbnVsbCk7XG4gICAgfSk7XG4gICAgdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygnY2hhbmdlJywgY2hhbmdlZE1hcCA9PiB7XG4gICAgICB0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCA9IHRydWU7XG5cbiAgICAgIC8vIE51bWJlciBvZiB0cmltbWVkIGluZGV4ZXMgbWlnaHQgY2hhbmdlLlxuICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCBjaGFuZ2VkTWFwLCB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24pO1xuICAgIH0pO1xuICAgIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCdjaGFuZ2UnLCBjaGFuZ2VkTWFwID0+IHtcbiAgICAgIHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAvLyBOdW1iZXIgb2YgaGlkZGVuIGluZGV4ZXMgbWlnaHQgY2hhbmdlLlxuICAgICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCBjaGFuZ2VkTWFwLCB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKTtcbiAgICB9KTtcbiAgICB0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soJ2NoYW5nZScsIGNoYW5nZWRNYXAgPT4ge1xuICAgICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCBjaGFuZ2VkTWFwLCB0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VzcGVuZHMgdGhlIGNhY2hlIHVwZGF0ZSBmb3IgdGhpcyBtYXAuIFRoZSBtZXRob2QgaXMgaGVscGZ1bCB0byBncm91cCBtdWx0aXBsZVxuICAgKiBvcGVyYXRpb25zLCB3aGljaCBhZmZlY3RzIHRoZSBjYWNoZS4gSW4gdGhpcyBjYXNlLCB0aGUgY2FjaGUgd2lsbCBiZSB1cGRhdGVkIG9uY2UgYWZ0ZXJcbiAgICogY2FsbGluZyB0aGUgYHJlc3VtZU9wZXJhdGlvbnNgIG1ldGhvZC5cbiAgICovXG4gIHN1c3BlbmRPcGVyYXRpb25zKCkge1xuICAgIHRoaXMuaXNCYXRjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBjYWNoZSB1cGRhdGUgZm9yIHRoaXMgbWFwLiBJdCByZWNhbGN1bGF0ZXMgdGhlIGNhY2hlIGFuZCByZXN0b3JlcyB0aGVcbiAgICogZGVmYXVsdCBiZWhhdmlvciB3aGVyZSBlYWNoIG1hcCBtb2RpZmljYXRpb24gdXBkYXRlcyB0aGUgY2FjaGUuXG4gICAqL1xuICByZXN1bWVPcGVyYXRpb25zKCkge1xuICAgIHRoaXMuaXNCYXRjaGVkID0gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGNyZWF0ZXMgYW5kIHJldHVybnMgdGhlIG5ldyBpbnN0YW5jZSBvZiB0aGUgQ2hhbmdlc09ic2VydmVyIG9iamVjdC4gVGhlIG9iamVjdFxuICAgKiBhbGxvd3MgbGlzdGVuaW5nIHRvIHRoZSBpbmRleCBjaGFuZ2VzIHRoYXQgaGFwcGVuIHdoaWxlIHRoZSBIYW5kc29udGFibGUgaXMgcnVubmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluZGV4TWFwVHlwZSBUaGUgaW5kZXggbWFwIHR5cGUgd2hpY2ggd2Ugd2FudCB0byBvYnNlcnZlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSwgb25seSB0aGUgJ2hpZGluZycgaW5kZXggbWFwIHR5cGVzIGFyZSBvYnNlcnZhYmxlLlxuICAgKiBAcmV0dXJucyB7Q2hhbmdlc09ic2VydmVyfVxuICAgKi9cbiAgY3JlYXRlQ2hhbmdlc09ic2VydmVyKGluZGV4TWFwVHlwZSkge1xuICAgIGlmIChpbmRleE1hcFR5cGUgIT09ICdoaWRpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGluZGV4IG1hcCB0eXBlIFwiJHtpbmRleE1hcFR5cGV9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9ic2VydmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgbmV3IGBJbmRleE1hcGAgZm9yIGEgc3BlY2lmaWVkIGBJbmRleE1hcHBlcmAgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleE5hbWUgQSB1bmlxdWUgaW5kZXggbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hcFR5cGUgVGhlIGluZGV4IG1hcCB0eXBlIChlLmcuLCBcImhpZGluZ1wiLCBcInRyaW1taW5nXCIsIFwicGh5c2ljYWxJbmRleFRvVmFsdWVcIikuXG4gICAqIEBwYXJhbSB7Kn0gW2luaXRWYWx1ZU9yRm5dIFRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgaW5kZXggbWFwLlxuICAgKiBAcmV0dXJucyB7SW5kZXhNYXB9XG4gICAqL1xuICBjcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGluZGV4TmFtZSwgbWFwVHlwZSwgaW5pdFZhbHVlT3JGbikge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyTWFwKGluZGV4TmFtZSwgKDAsIF9tYXBzLmNyZWF0ZUluZGV4TWFwKShtYXBUeXBlLCBpbml0VmFsdWVPckZuKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgbWFwIHdoaWNoIHByb3ZpZGUgc29tZSBpbmRleCBtYXBwaW5ncy4gVHlwZSBvZiBtYXAgZGV0ZXJtaW5pbmcgdG8gd2hpY2ggY29sbGVjdGlvbiBpdCB3aWxsIGJlIGFkZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pcXVlTmFtZSBOYW1lIG9mIHRoZSBpbmRleCBtYXAuIEl0IHNob3VsZCBiZSB1bmlxdWUuXG4gICAqIEBwYXJhbSB7SW5kZXhNYXB9IGluZGV4TWFwIFJlZ2lzdGVyZWQgaW5kZXggbWFwIHVwZGF0ZWQgb24gaXRlbXMgcmVtb3ZhbCBhbmQgaW5zZXJ0aW9uLlxuICAgKiBAcmV0dXJucyB7SW5kZXhNYXB9XG4gICAqL1xuICByZWdpc3Rlck1hcCh1bmlxdWVOYW1lLCBpbmRleE1hcCkge1xuICAgIGlmICh0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0KHVuaXF1ZU5hbWUpIHx8IHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KHVuaXF1ZU5hbWUpIHx8IHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmdldCh1bmlxdWVOYW1lKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgXCIke3VuaXF1ZU5hbWV9XCIgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgIH1cbiAgICBpZiAoaW5kZXhNYXAgaW5zdGFuY2VvZiBfbWFwcy5UcmltbWluZ01hcCkge1xuICAgICAgdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKHVuaXF1ZU5hbWUsIGluZGV4TWFwKTtcbiAgICB9IGVsc2UgaWYgKGluZGV4TWFwIGluc3RhbmNlb2YgX21hcHMuSGlkaW5nTWFwKSB7XG4gICAgICB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKHVuaXF1ZU5hbWUsIGluZGV4TWFwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIodW5pcXVlTmFtZSwgaW5kZXhNYXApO1xuICAgIH1cbiAgICBjb25zdCBudW1iZXJPZkluZGV4ZXMgPSB0aGlzLmdldE51bWJlck9mSW5kZXhlcygpO1xuXG4gICAgLypcbiAgICAgIFdlIGluaXRpYWxpemUgbWFwIG9ueSB3aGVuIHdlIGhhdmUgZnVsbCBpbmZvcm1hdGlvbiBhYm91dCBudW1iZXIgb2YgaW5kZXhlcyBhbmQgdGhlIGRhdGFzZXQgaXMgbm90IGVtcHR5LlxuICAgICAgT3RoZXJ3aXNlIGl0J3MgdW5uZWNlc3NhcnkuIEluaXRpYWxpemF0aW9uIG9mIGVtcHR5IGFycmF5IHdvdWxkIG5vdCBnaXZlIGFueSBwb3NpdGl2ZSBjaGFuZ2VzLiBBZnRlciBpbml0aWFsaXppbmdcbiAgICAgIGl0IHdpdGggbnVtYmVyIG9mIGluZGV4ZXMgZXF1YWwgdG8gMCB0aGUgbWFwIHdvdWxkIGJlIHN0aWxsIGVtcHR5LiBXaGF0J3MgbW9yZSB0aGVyZSB3b3VsZCBiZSB0cmlnZ2VyZWRcbiAgICAgIG5vdCBuZWVkZWQgaG9vayAobm8gcmVhbCBjaGFuZ2UgaGF2ZSBvY2N1cnJlZCkuIE51bWJlciBvZiBpbmRleGVzIGlzIGtub3duIGFmdGVyIGxvYWRpbmcgZGF0YSAodGhlIGBsb2FkRGF0YWBcbiAgICAgIGZ1bmN0aW9uIGZyb20gdGhlIGBDb3JlYCkuXG4gICAgICovXG4gICAgaWYgKG51bWJlck9mSW5kZXhlcyA+IDApIHtcbiAgICAgIGluZGV4TWFwLmluaXQobnVtYmVyT2ZJbmRleGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4TWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXIgYSBtYXAgd2l0aCBnaXZlbiBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBpbmRleCBtYXAuXG4gICAqL1xuICB1bnJlZ2lzdGVyTWFwKG5hbWUpIHtcbiAgICB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihuYW1lKTtcbiAgICB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobmFtZSk7XG4gICAgdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbnJlZ2lzdGVycyBhbGwgY29sbGVjdGVkIGluZGV4IG1hcCBpbnN0YW5jZXMgZnJvbSBhbGwgbWFwIGNvbGxlY3Rpb24gdHlwZXMuXG4gICAqL1xuICB1bnJlZ2lzdGVyQWxsKCkge1xuICAgIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCk7XG4gICAgdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCk7XG4gICAgdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBoeXNpY2FsIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHZpc3VhbCBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZpc3VhbEluZGV4IFZpc3VhbCBpbmRleC5cbiAgICogQHJldHVybnMge251bWJlcnxudWxsfSBSZXR1cm5zIHRyYW5zbGF0ZWQgaW5kZXggbWFwcGVkIGJ5IHBhc3NlZCB2aXN1YWwgaW5kZXguXG4gICAqL1xuICBnZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2aXN1YWxJbmRleCkge1xuICAgIC8vIEluZGV4IGluIHRoZSB0YWJsZSBib3VuZGFyaWVzIHByb3ZpZGVkIGJ5IHRoZSBgRGF0YU1hcGAuXG4gICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVt2aXN1YWxJbmRleF07XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShwaHlzaWNhbEluZGV4KSkge1xuICAgICAgcmV0dXJuIHBoeXNpY2FsSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBoeXNpY2FsIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHJlbmRlcmFibGUgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZW5kZXJhYmxlSW5kZXggUmVuZGVyYWJsZSBpbmRleC5cbiAgICogQHJldHVybnMge251bGx8bnVtYmVyfVxuICAgKi9cbiAgZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmFibGVJbmRleCkge1xuICAgIGNvbnN0IHBoeXNpY2FsSW5kZXggPSB0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZVtyZW5kZXJhYmxlSW5kZXhdO1xuXG4gICAgLy8gSW5kZXggaW4gdGhlIHJlbmRlcmFibGUgdGFibGUgYm91bmRhcmllcy5cbiAgICBpZiAoKDAsIF9taXhlZC5pc0RlZmluZWQpKHBoeXNpY2FsSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcGh5c2ljYWxJbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgdmlzdWFsIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIHBoeXNpY2FsIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcGh5c2ljYWxJbmRleCBQaHlzaWNhbCBpbmRleCB0byBzZWFyY2guXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8bnVsbH0gUmV0dXJucyBhIHZpc3VhbCBpbmRleCBvZiB0aGUgaW5kZXggbWFwcGVyLlxuICAgKi9cbiAgZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgocGh5c2ljYWxJbmRleCkge1xuICAgIGNvbnN0IHZpc3VhbEluZGV4ID0gdGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5nZXQocGh5c2ljYWxJbmRleCk7XG5cbiAgICAvLyBJbmRleCBpbiB0aGUgdGFibGUgYm91bmRhcmllcyBwcm92aWRlZCBieSB0aGUgYERhdGFNYXBgLlxuICAgIGlmICgoMCwgX21peGVkLmlzRGVmaW5lZCkodmlzdWFsSW5kZXgpKSB7XG4gICAgICByZXR1cm4gdmlzdWFsSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHZpc3VhbCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiByZW5kZXJhYmxlIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmVuZGVyYWJsZUluZGV4IFJlbmRlcmFibGUgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudWxsfG51bWJlcn1cbiAgICovXG4gIGdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgocmVuZGVyYWJsZUluZGV4KSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVuZGVyYWJsZSBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiB2aXN1YWwgaW5kZXguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2aXN1YWxJbmRleCBWaXN1YWwgaW5kZXguXG4gICAqIEByZXR1cm5zIHtudWxsfG51bWJlcn1cbiAgICovXG4gIGdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodmlzdWFsSW5kZXgpIHtcbiAgICBjb25zdCByZW5kZXJhYmxlSW5kZXggPSB0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KHZpc3VhbEluZGV4KTtcblxuICAgIC8vIEluZGV4IGluIHRoZSByZW5kZXJhYmxlIHRhYmxlIGJvdW5kYXJpZXMuXG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShyZW5kZXJhYmxlSW5kZXgpKSB7XG4gICAgICByZXR1cm4gcmVuZGVyYWJsZUluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIHRoZSBuZWFyZXN0IG5vdC1oaWRkZW4gcm93IG9yIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZyb21WaXN1YWxJbmRleCBUaGUgdmlzdWFsIGluZGV4IG9mIHRoZSByb3cgb3IgY29sdW1uIGZyb20gd2hpY2ggdGhlIHNlYXJjaCBzdGFydHMuPGJyPjxicj5cbiAgICogSWYgdGhlIHJvdyBvciBjb2x1bW4gZnJvbSB3aGljaCB0aGUgc2VhcmNoIHN0YXJ0cyBpcyBub3QgaGlkZGVuLCB0aGUgbWV0aG9kIHNpbXBseSByZXR1cm5zIHRoZSBgZnJvbVZpc3VhbEluZGV4YCBudW1iZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzZWFyY2hEaXJlY3Rpb24gVGhlIHNlYXJjaCBkaXJlY3Rpb24uPGJyPjxicj5gMWA6IHNlYXJjaCBmcm9tIGBmcm9tVmlzdWFsSW5kZXhgIHRvIHRoZSBlbmQgb2YgdGhlIGRhdGFzZXQuPGJyPjxicj5cbiAgICogYC0xYDogc2VhcmNoIGZyb20gYGZyb21WaXN1YWxJbmRleGAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF0YXNldCAoaS5lLiwgdG8gdGhlIHJvdyBvciBjb2x1bW4gYXQgdmlzdWFsIGluZGV4IGAwYCkuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VhcmNoQWxzb090aGVyV2F5QXJvdW5kIGB0cnVlYDogaWYgYSBzZWFyY2ggaW4gYSBmaXJzdCBkaXJlY3Rpb24gZmFpbGVkLCB0cnkgdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi48YnI+PGJyPlxuICAgKiBgZmFsc2VgOiBzZWFyY2ggaW4gb25lIGRpcmVjdGlvbiBvbmx5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9IEEgdmlzdWFsIGluZGV4IG9mIGEgcm93IG9yIGNvbHVtbiwgb3IgYG51bGxgLlxuICAgKi9cbiAgZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZyb21WaXN1YWxJbmRleCwgc2VhcmNoRGlyZWN0aW9uKSB7XG4gICAgbGV0IHNlYXJjaEFsc29PdGhlcldheUFyb3VuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IHRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZnJvbVZpc3VhbEluZGV4KTtcbiAgICBpZiAocGh5c2ljYWxJbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGZyb21WaXN1YWxJbmRleCkpIHtcbiAgICAgIHJldHVybiBmcm9tVmlzdWFsSW5kZXg7XG4gICAgfVxuICAgIGNvbnN0IHZpc2libGVJbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBpZiAoc2VhcmNoRGlyZWN0aW9uID4gMCkge1xuICAgICAgaW5kZXggPSB2aXNpYmxlSW5kZXhlcy5maW5kSW5kZXgodmlzdWFsSW5kZXggPT4gdmlzdWFsSW5kZXggPiBmcm9tVmlzdWFsSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmRleCA9IHZpc2libGVJbmRleGVzLnJldmVyc2UoKS5maW5kSW5kZXgodmlzdWFsSW5kZXggPT4gdmlzdWFsSW5kZXggPCBmcm9tVmlzdWFsSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICBpZiAoc2VhcmNoQWxzb090aGVyV2F5QXJvdW5kKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmcm9tVmlzdWFsSW5kZXgsIC1zZWFyY2hEaXJlY3Rpb24sIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZUluZGV4ZXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIGluZGV4ZXMgaW4gcmVnaXN0ZXJlZCBpbmRleCBtYXBzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gRGVzdGluYXRpb24gbGVuZ3RoIGZvciBhbGwgc3RvcmVkIGluZGV4IG1hcHMuXG4gICAqL1xuICBpbml0VG9MZW5ndGgoKSB7XG4gICAgbGV0IGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtcbiAgICB0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGUgPSBbLi4ubmV3IEFycmF5KGxlbmd0aCkua2V5cygpXTtcbiAgICB0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZSA9IFsuLi5uZXcgQXJyYXkobGVuZ3RoKS5rZXlzKCldO1xuICAgIHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKTtcbiAgICB0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UgPSAnaW5pdCc7XG4gICAgdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsZW5ndGgpO1xuICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGxlbmd0aCk7XG4gICAgdGhpcy5yZXN1bWVPcGVyYXRpb25zKCk7XG5cbiAgICAvLyBXZSBtb3ZlIGluaXRpYWxpemF0aW9uIG9mIGhpZGRlbiBjb2xsZWN0aW9uIHRvIG5leHQgYmF0Y2ggZm9yIHB1cnBvc2Ugb2Ygd29ya2luZyBvbiBzZXF1ZW5jZSBvZiBhbHJlYWR5IHRyaW1tZWQgaW5kZXhlcy5cbiAgICB0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobGVuZ3RoKTtcblxuICAgIC8vIEl0IHNob3VsZG4ndCByZXNldCB0aGUgY2FjaGUuXG4gICAgdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGxlbmd0aCk7XG4gICAgdGhpcy5yZXN1bWVPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdpbml0Jyk7XG4gIH1cblxuICAvKipcbiAgICogVHJpbS9leHRlbmQgdGhlIG1hcHBlcnMgdG8gZml0IHRoZSBkZXNpcmVkIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBOZXcgbWFwcGVyIGxlbmd0aC5cbiAgICovXG4gIGZpdFRvTGVuZ3RoKGxlbmd0aCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleENvdW50ID0gdGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtcbiAgICBpZiAobGVuZ3RoIDwgY3VycmVudEluZGV4Q291bnQpIHtcbiAgICAgIGNvbnN0IGluZGV4ZXNUb0JlUmVtb3ZlZCA9IFsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpIC0gbGVuZ3RoKS5rZXlzKCldLm1hcChpID0+IGkgKyBsZW5ndGgpO1xuICAgICAgdGhpcy5yZW1vdmVJbmRleGVzKGluZGV4ZXNUb0JlUmVtb3ZlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zZXJ0SW5kZXhlcyhjdXJyZW50SW5kZXhDb3VudCwgbGVuZ3RoIC0gY3VycmVudEluZGV4Q291bnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VxdWVuY2Ugb2YgaW5kZXhlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBQaHlzaWNhbCBpbmRleGVzLlxuICAgKi9cbiAgZ2V0SW5kZXhlc1NlcXVlbmNlKCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5nZXRWYWx1ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY29tcGxldGVseSBuZXcgaW5kZXhlcyBzZXF1ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gaW5kZXhlcyBQaHlzaWNhbCBpbmRleGVzLlxuICAgKi9cbiAgc2V0SW5kZXhlc1NlcXVlbmNlKGluZGV4ZXMpIHtcbiAgICBpZiAodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9ICd1cGRhdGUnO1xuICAgIH1cbiAgICB0aGlzLmluZGV4ZXNTZXF1ZW5jZS5zZXRWYWx1ZXMoaW5kZXhlcyk7XG4gICAgaWYgKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBOT1QgdHJpbW1lZCBpbmRleGVzLlxuICAgKlxuICAgKiBOb3RlOiBJbmRleGVzIG1hcmtlZCBhcyB0cmltbWVkIGFyZW4ndCBpbmNsdWRlZCBpbiBhIHtAbGluayBEYXRhTWFwfSBhbmQgYXJlbid0IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWFkRnJvbUNhY2hlPXRydWVdIERldGVybWluZSBpZiByZWFkIGluZGV4ZXMgZnJvbSBjYWNoZS5cbiAgICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIHBoeXNpY2FsIGluZGV4ZXMuIEluZGV4IG9mIHRoaXMgbmF0aXZlIGFycmF5IGlzIGEgXCJ2aXN1YWwgaW5kZXhcIixcbiAgICogdmFsdWUgb2YgdGhpcyBuYXRpdmUgYXJyYXkgaXMgYSBcInBoeXNpY2FsIGluZGV4XCIuXG4gICAqL1xuICBnZXROb3RUcmltbWVkSW5kZXhlcygpIHtcbiAgICBsZXQgcmVhZEZyb21DYWNoZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICBpZiAocmVhZEZyb21DYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc1NlcXVlbmNlID0gdGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKTtcbiAgICByZXR1cm4gaW5kZXhlc1NlcXVlbmNlLmZpbHRlcihwaHlzaWNhbEluZGV4ID0+IHRoaXMuaXNUcmltbWVkKHBoeXNpY2FsSW5kZXgpID09PSBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxlbmd0aCBvZiBhbGwgTk9UIHRyaW1tZWQgaW5kZXhlcy5cbiAgICpcbiAgICogTm90ZTogSW5kZXhlcyBtYXJrZWQgYXMgdHJpbW1lZCBhcmVuJ3QgaW5jbHVkZWQgaW4gYSB7QGxpbmsgRGF0YU1hcH0gYW5kIGFyZW4ndCByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgTk9UIGhpZGRlbiBpbmRleGVzLlxuICAgKlxuICAgKiBOb3RlOiBJbmRleGVzIG1hcmtlZCBhcyBoaWRkZW4gYXJlIGluY2x1ZGVkIGluIGEge0BsaW5rIERhdGFNYXB9LCBidXQgYXJlbid0IHJlbmRlcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWFkRnJvbUNhY2hlPXRydWVdIERldGVybWluZSBpZiByZWFkIGluZGV4ZXMgZnJvbSBjYWNoZS5cbiAgICogQHJldHVybnMge0FycmF5fSBMaXN0IG9mIHBoeXNpY2FsIGluZGV4ZXMuIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBpbmRleCBvZiB0aGlzIG5hdGl2ZSBhcnJheSBJUyBOT1QgYSBcInZpc3VhbCBpbmRleFwiLlxuICAgKi9cbiAgZ2V0Tm90SGlkZGVuSW5kZXhlcygpIHtcbiAgICBsZXQgcmVhZEZyb21DYWNoZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICBpZiAocmVhZEZyb21DYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlO1xuICAgIH1cbiAgICBjb25zdCBpbmRleGVzU2VxdWVuY2UgPSB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpO1xuICAgIHJldHVybiBpbmRleGVzU2VxdWVuY2UuZmlsdGVyKHBoeXNpY2FsSW5kZXggPT4gdGhpcy5pc0hpZGRlbihwaHlzaWNhbEluZGV4KSA9PT0gZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsZW5ndGggb2YgYWxsIE5PVCBoaWRkZW4gaW5kZXhlcy5cbiAgICpcbiAgICogTm90ZTogSW5kZXhlcyBtYXJrZWQgYXMgaGlkZGVuIGFyZSBpbmNsdWRlZCBpbiBhIHtAbGluayBEYXRhTWFwfSwgYnV0IGFyZW4ndCByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldE5vdEhpZGRlbkluZGV4ZXNMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcygpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGlzdCBvZiBwaHlzaWNhbCBpbmRleGVzIChyZXNwZWN0aW5nIHRoZSBzZXF1ZW5jZSBvZiBpbmRleGVzKSB3aGljaCBtYXkgYmUgcmVuZGVyZWQgKHdoZW4gdGhleSBhcmUgaW4gYSB2aWV3cG9ydCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3JlYWRGcm9tQ2FjaGU9dHJ1ZV0gRGV0ZXJtaW5lIGlmIHJlYWQgaW5kZXhlcyBmcm9tIGNhY2hlLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IExpc3Qgb2YgcGh5c2ljYWwgaW5kZXhlcy4gSW5kZXggb2YgdGhpcyBuYXRpdmUgYXJyYXkgaXMgYSBcInJlbmRlcmFibGUgaW5kZXhcIixcbiAgICogdmFsdWUgb2YgdGhpcyBuYXRpdmUgYXJyYXkgaXMgYSBcInBoeXNpY2FsIGluZGV4XCIuXG4gICAqL1xuICBnZXRSZW5kZXJhYmxlSW5kZXhlcygpIHtcbiAgICBsZXQgcmVhZEZyb21DYWNoZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICBpZiAocmVhZEZyb21DYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlO1xuICAgIH1cbiAgICBjb25zdCBub3RUcmltbWVkSW5kZXhlcyA9IHRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtcbiAgICByZXR1cm4gbm90VHJpbW1lZEluZGV4ZXMuZmlsdGVyKHBoeXNpY2FsSW5kZXggPT4gdGhpcy5pc0hpZGRlbihwaHlzaWNhbEluZGV4KSA9PT0gZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsZW5ndGggb2YgYWxsIE5PVCB0cmltbWVkIGFuZCBOT1QgaGlkZGVuIGluZGV4ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbnVtYmVyIG9mIGFsbCBpbmRleGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TnVtYmVyT2ZJbmRleGVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlIGluZGV4ZXMgaW4gdGhlIGluZGV4IG1hcHBlci5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ8QXJyYXl9IG1vdmVkSW5kZXhlcyBWaXN1YWwgaW5kZXgoZXMpIHRvIG1vdmUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBmaW5hbEluZGV4IFZpc3VhbCBpbmRleCBiZWluZyBhIHN0YXJ0IGluZGV4IGZvciB0aGUgbW92ZWQgZWxlbWVudHMuXG4gICAqL1xuICBtb3ZlSW5kZXhlcyhtb3ZlZEluZGV4ZXMsIGZpbmFsSW5kZXgpIHtcbiAgICBpZiAodHlwZW9mIG1vdmVkSW5kZXhlcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIG1vdmVkSW5kZXhlcyA9IFttb3ZlZEluZGV4ZXNdO1xuICAgIH1cbiAgICBjb25zdCBwaHlzaWNhbE1vdmVkSW5kZXhlcyA9ICgwLCBfYXJyYXkuYXJyYXlNYXApKG1vdmVkSW5kZXhlcywgdmlzdWFsSW5kZXggPT4gdGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2aXN1YWxJbmRleCkpO1xuICAgIGNvbnN0IG5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoID0gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO1xuICAgIGNvbnN0IG1vdmVkSW5kZXhlc0xlbmd0aCA9IG1vdmVkSW5kZXhlcy5sZW5ndGg7XG5cbiAgICAvLyBSZW1vdmluZyBtb3ZlZCBpbmRleGVzIHdpdGhvdXQgcmUtaW5kZXhpbmcuXG4gICAgY29uc3Qgbm90TW92ZWRJbmRleGVzID0gKDAsIF9tYXBzLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLCBwaHlzaWNhbE1vdmVkSW5kZXhlcyk7XG4gICAgY29uc3Qgbm90VHJpbW1lZE5vdE1vdmVkSXRlbXMgPSBub3RNb3ZlZEluZGV4ZXMuZmlsdGVyKGluZGV4ID0+IHRoaXMuaXNUcmltbWVkKGluZGV4KSA9PT0gZmFsc2UpO1xuXG4gICAgLy8gV2hlbiBpdGVtKHMpIGFyZSBtb3ZlZCBhZnRlciB0aGUgbGFzdCB2aXNpYmxlIGl0ZW0gd2UgYXNzaWduIHRoZSBsYXN0IHBvc3NpYmxlIGluZGV4LlxuICAgIGxldCBkZXN0aW5hdGlvblBvc2l0aW9uID0gbm90TW92ZWRJbmRleGVzLmluZGV4T2Yobm90VHJpbW1lZE5vdE1vdmVkSXRlbXNbbm90VHJpbW1lZE5vdE1vdmVkSXRlbXMubGVuZ3RoIC0gMV0pICsgMTtcblxuICAgIC8vIE90aGVyd2lzZSwgd2UgZmluZCBwcm9wZXIgaW5kZXggZm9yIGluc2VydGVkIGl0ZW0ocykuXG4gICAgaWYgKGZpbmFsSW5kZXggKyBtb3ZlZEluZGV4ZXNMZW5ndGggPCBub3RUcmltbWVkSW5kZXhlc0xlbmd0aCkge1xuICAgICAgLy8gUGh5c2ljYWwgaW5kZXggYXQgZmluYWwgaW5kZXggcG9zaXRpb24uXG4gICAgICBjb25zdCBwaHlzaWNhbEluZGV4ID0gbm90VHJpbW1lZE5vdE1vdmVkSXRlbXNbZmluYWxJbmRleF07XG4gICAgICBkZXN0aW5hdGlvblBvc2l0aW9uID0gbm90TW92ZWRJbmRleGVzLmluZGV4T2YocGh5c2ljYWxJbmRleCk7XG4gICAgfVxuICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9ICdtb3ZlJztcblxuICAgIC8vIEFkZGluZyBpbmRleGVzIHdpdGhvdXQgcmUtaW5kZXhpbmcuXG4gICAgdGhpcy5zZXRJbmRleGVzU2VxdWVuY2UoKDAsIF9tYXBzLmdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcykobm90TW92ZWRJbmRleGVzLCBkZXN0aW5hdGlvblBvc2l0aW9uLCBwaHlzaWNhbE1vdmVkSW5kZXhlcykpO1xuICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciBpbmRleCBpcyB0cmltbWVkLiBJbmRleCBtYXJrZWQgYXMgdHJpbW1lZCBpc24ndCBpbmNsdWRlZCBpbiBhIHtAbGluayBEYXRhTWFwfSBhbmQgaXNuJ3QgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbEluZGV4IFBoeXNpY2FsIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVHJpbW1lZChwaHlzaWNhbEluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgocGh5c2ljYWxJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdoZXRoZXIgaW5kZXggaXMgaGlkZGVuLiBJbmRleCBtYXJrZWQgYXMgaGlkZGVuIGlzIGluY2x1ZGVkIGluIGEge0BsaW5rIERhdGFNYXB9LCBidXQgaXNuJ3QgcmVuZGVyZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwaHlzaWNhbEluZGV4IFBoeXNpY2FsIGluZGV4LlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzSGlkZGVuKHBoeXNpY2FsSW5kZXgpIHtcbiAgICByZXR1cm4gdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgocGh5c2ljYWxJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zZXJ0IG5ldyBpbmRleGVzIGFuZCBjb3JyZXNwb25kaW5nIG1hcHBpbmcgYW5kIHVwZGF0ZSB2YWx1ZXMgb2YgdGhlIG90aGVycywgZm9yIGFsbCBzdG9yZWQgaW5kZXggbWFwcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGZpcnN0SW5zZXJ0ZWRWaXN1YWxJbmRleCBGaXJzdCBpbnNlcnRlZCB2aXN1YWwgaW5kZXguXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnRPZkluZGV4ZXMgQW1vdW50IG9mIGluc2VydGVkIGluZGV4ZXMuXG4gICAqL1xuICBpbnNlcnRJbmRleGVzKGZpcnN0SW5zZXJ0ZWRWaXN1YWxJbmRleCwgYW1vdW50T2ZJbmRleGVzKSB7XG4gICAgY29uc3QgbnRoVmlzaWJsZUluZGV4ID0gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpW2ZpcnN0SW5zZXJ0ZWRWaXN1YWxJbmRleF07XG4gICAgY29uc3QgZmlyc3RJbnNlcnRlZFBoeXNpY2FsSW5kZXggPSAoMCwgX21peGVkLmlzRGVmaW5lZCkobnRoVmlzaWJsZUluZGV4KSA/IG50aFZpc2libGVJbmRleCA6IHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7XG4gICAgY29uc3QgaW5zZXJ0aW9uSW5kZXggPSB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKG50aFZpc2libGVJbmRleCkgPyB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluZGV4T2YobnRoVmlzaWJsZUluZGV4KSA6IHRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7XG4gICAgY29uc3QgaW5zZXJ0ZWRJbmRleGVzID0gKDAsIF9hcnJheS5hcnJheU1hcCkobmV3IEFycmF5KGFtb3VudE9mSW5kZXhlcykuZmlsbChmaXJzdEluc2VydGVkUGh5c2ljYWxJbmRleCksIChuZXh0SW5kZXgsIHN0ZXBzRnJvbVN0YXJ0KSA9PiBuZXh0SW5kZXggKyBzdGVwc0Zyb21TdGFydCk7XG4gICAgdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpO1xuICAgIHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSA9ICdpbnNlcnQnO1xuICAgIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChpbnNlcnRpb25JbmRleCwgaW5zZXJ0ZWRJbmRleGVzKTtcbiAgICB0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gICAgdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMpO1xuICAgIHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gICAgdGhpcy5yZXN1bWVPcGVyYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNvbWUgaW5kZXhlcyBhbmQgY29ycmVzcG9uZGluZyBtYXBwaW5ncyBhbmQgdXBkYXRlIHZhbHVlcyBvZiB0aGUgb3RoZXJzLCBmb3IgYWxsIHN0b3JlZCBpbmRleCBtYXBzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAgICovXG4gIHJlbW92ZUluZGV4ZXMocmVtb3ZlZEluZGV4ZXMpIHtcbiAgICB0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCk7XG4gICAgdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlID0gJ3JlbW92ZSc7XG4gICAgdGhpcy5pbmRleGVzU2VxdWVuY2UucmVtb3ZlKHJlbW92ZWRJbmRleGVzKTtcbiAgICB0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShyZW1vdmVkSW5kZXhlcyk7XG4gICAgdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkocmVtb3ZlZEluZGV4ZXMpO1xuICAgIHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShyZW1vdmVkSW5kZXhlcyk7XG4gICAgdGhpcy5yZXN1bWVPcGVyYXRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVidWlsZCBjYWNoZSBmb3Igc29tZSBpbmRleGVzLiBFdmVyeSBhY3Rpb24gb24gaW5kZXhlcyBzZXF1ZW5jZSBvciBpbmRleGVzIHNraXBwZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVuZGVyaW5nXG4gICAqIGJ5IGRlZmF1bHQgcmVzZXQgY2FjaGUsIHRodXMgYmF0Y2hpbmcgc29tZSBpbmRleCBtYXBzIGFjdGlvbnMgaXMgcmVjb21tZW5kZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ZvcmNlPWZhbHNlXSBEZXRlcm1pbmUgaWYgZm9yY2UgY2FjaGUgdXBkYXRlLlxuICAgKi9cbiAgdXBkYXRlQ2FjaGUoKSB7XG4gICAgbGV0IGZvcmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBjb25zdCBhbnlDYWNoZWRJbmRleENoYW5nZWQgPSB0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQgfHwgdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQgfHwgdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZDtcbiAgICBpZiAoZm9yY2UgPT09IHRydWUgfHwgdGhpcy5pc0JhdGNoZWQgPT09IGZhbHNlICYmIGFueUNhY2hlZEluZGV4Q2hhbmdlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCk7XG4gICAgICB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCk7XG4gICAgICB0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGUgPSB0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKGZhbHNlKTtcbiAgICAgIHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlID0gdGhpcy5nZXROb3RIaWRkZW5JbmRleGVzKGZhbHNlKTtcbiAgICAgIHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlID0gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyhmYWxzZSk7XG4gICAgICB0aGlzLmNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCk7XG4gICAgICB0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKTtcblxuICAgICAgLy8gQ3VycmVudGx5IHRoZXJlJ3Mgc3VwcG9ydCBvbmx5IGZvciB0aGUgXCJoaWRpbmdcIiBtYXAgdHlwZS5cbiAgICAgIGlmICh0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucnVuTG9jYWxIb29rcygnY2FjaGVVcGRhdGVkJywge1xuICAgICAgICBpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOiB0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQsXG4gICAgICAgIHRyaW1tZWRJbmRleGVzQ2hhbmdlZDogdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsXG4gICAgICAgIGhpZGRlbkluZGV4ZXNDaGFuZ2VkOiB0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIGZvciB0cmFuc2xhdGlvbnMgZnJvbSBwaHlzaWNhbCB0byB2aXN1YWwgaW5kZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCkge1xuICAgIGNvbnN0IG5yT2ZOb3RUcmltbWVkSW5kZXhlcyA9IHRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtcbiAgICB0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmNsZWFyKCk7XG4gICAgZm9yIChsZXQgdmlzdWFsSW5kZXggPSAwOyB2aXN1YWxJbmRleCA8IG5yT2ZOb3RUcmltbWVkSW5kZXhlczsgdmlzdWFsSW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IHRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodmlzdWFsSW5kZXgpO1xuXG4gICAgICAvLyBFdmVyeSB2aXN1YWwgaW5kZXggaGF2ZSBjb3JyZXNwb25kaW5nIHBoeXNpY2FsIGluZGV4LCBidXQgc29tZSBwaHlzaWNhbCBpbmRleGVzIG1heSBkb24ndCBoYXZlXG4gICAgICAvLyBjb3JyZXNwb25kaW5nIHZpc3VhbCBpbmRleGVzIChwaHlzaWNhbCBpbmRleGVzIG1heSByZXByZXNlbnQgdHJpbW1lZCBpbmRleGVzLCBiZXlvbmQgdGhlIHRhYmxlIGJvdW5kYXJpZXMpXG4gICAgICB0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLnNldChwaHlzaWNhbEluZGV4LCB2aXN1YWxJbmRleCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSBmb3IgdHJhbnNsYXRpb25zIGZyb20gdmlzdWFsIHRvIHJlbmRlcmFibGUgaW5kZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSB7XG4gICAgY29uc3QgbnJPZlJlbmRlcmFibGVJbmRleGVzID0gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO1xuICAgIHRoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO1xuICAgIGZvciAobGV0IHJlbmRlcmFibGVJbmRleCA9IDA7IHJlbmRlcmFibGVJbmRleCA8IG5yT2ZSZW5kZXJhYmxlSW5kZXhlczsgcmVuZGVyYWJsZUluZGV4ICs9IDEpIHtcbiAgICAgIC8vIENhbid0IHVzZSBnZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4IGhlcmUgYmVjYXVzZSB3ZSdyZSBidWlsZGluZyB0aGUgY2FjaGUgaGVyZVxuICAgICAgY29uc3QgcGh5c2ljYWxJbmRleCA9IHRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlbmRlcmFibGVJbmRleCk7XG4gICAgICBjb25zdCB2aXN1YWxJbmRleCA9IHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgocGh5c2ljYWxJbmRleCk7XG4gICAgICB0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KHZpc3VhbEluZGV4LCByZW5kZXJhYmxlSW5kZXgpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0cy5JbmRleE1hcHBlciA9IEluZGV4TWFwcGVyO1xuKDAsIF9vYmplY3QubWl4aW4pKEluZGV4TWFwcGVyLCBfbG9jYWxIb29rcy5kZWZhdWx0KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX21hcENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi9tYXBDb2xsZWN0aW9uXCIpO1xudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2FycmF5XCIpO1xudmFyIF9taXhlZCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL21peGVkXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIENvbGxlY3Rpb24gb2YgbWFwcy4gVGhpcyBjb2xsZWN0aW9uIGFnZ3JlZ2F0ZSBtYXBzIHdpdGggdGhlIHNhbWUgdHlwZSBvZiB2YWx1ZXMuIFZhbHVlcyBmcm9tIHRoZSByZWdpc3RlcmVkIG1hcHNcbiAqIGNhbiBiZSB1c2VkIHRvIGNhbGN1bGF0ZSBhIHNpbmdsZSByZXN1bHQgZm9yIHBhcnRpY3VsYXIgaW5kZXguXG4gKi9cbmNsYXNzIEFnZ3JlZ2F0ZWRDb2xsZWN0aW9uIGV4dGVuZHMgX21hcENvbGxlY3Rpb24uTWFwQ29sbGVjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGFnZ3JlZ2F0aW9uRnVuY3Rpb24sIGZhbGxiYWNrVmFsdWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKlxuICAgICAqIExpc3Qgb2YgbWVyZ2VkIHZhbHVlcy4gVmFsdWUgZm9yIGVhY2ggaW5kZXggaXMgY2FsY3VsYXRlZCB1c2luZyB2YWx1ZXMgaW5zaWRlIHJlZ2lzdGVyZWQgbWFwcy5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJtZXJnZWRWYWx1ZXNDYWNoZVwiLCBbXSk7XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gd2hpY2ggZG8gYWdncmVnYXRpb24gb24gdGhlIHZhbHVlcyBmb3IgcGFydGljdWxhciBpbmRleC5cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhZ2dyZWdhdGlvbkZ1bmN0aW9uXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogRmFsbGJhY2sgdmFsdWUgd2hlbiB0aGVyZSBpcyBubyBjYWxjdWxhdGVkIHZhbHVlIGZvciBwYXJ0aWN1bGFyIGluZGV4LlxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZhbGxiYWNrVmFsdWVcIiwgdm9pZCAwKTtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb24gPSBhZ2dyZWdhdGlvbkZ1bmN0aW9uO1xuICAgIHRoaXMuZmFsbGJhY2tWYWx1ZSA9IGZhbGxiYWNrVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1lcmdlZCB2YWx1ZXMgZm9yIGFsbCBpbmRleGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWFkRnJvbUNhY2hlPXRydWVdIERldGVybWluZSBpZiByZWFkIHJlc3VsdHMgZnJvbSB0aGUgY2FjaGUuXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldE1lcmdlZFZhbHVlcygpIHtcbiAgICBsZXQgcmVhZEZyb21DYWNoZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcbiAgICBpZiAocmVhZEZyb21DYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubWVyZ2VkVmFsdWVzQ2FjaGU7XG4gICAgfVxuICAgIGlmICh0aGlzLmdldExlbmd0aCgpID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gQmVsb3cgdmFyaWFibGUgc3RvcmVzIHZhbHVlcyBmb3IgZXZlcnkgcGFydGljdWxhciBtYXAuIEV4YW1wbGUgZGVzY3JpYmluZyBzaXR1YXRpb24gd2hlbiB3ZSBoYXZlIDIgcmVnaXN0ZXJlZCBtYXBzLFxuICAgIC8vIHdpdGggbGVuZ3RoIGVxdWFsIHRvIDUuXG4gICAgLy9cbiAgICAvLyArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgICAgICAgfCAgICAgICAgICAgICAgICAgIGluZGV4ZXMgICAgICAgICAgICAgICAgICAgIHxcbiAgICAvLyArLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgbWFwcyAgfCAgICAgMCAgICB8ICAgMSAgIHwgICAgMiAgfCAgIDMgICB8ICAgIDQgICAgIHxcbiAgICAvLyArLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLStcbiAgICAvLyB8ICAgIDAgICAgfCBbWyB2YWx1ZSwgIHZhbHVlLCAgdmFsdWUsICB2YWx1ZSwgIHZhbHVlIF0sIHxcbiAgICAvLyB8ICAgIDEgICAgfCBbICB2YWx1ZSwgIHZhbHVlLCAgdmFsdWUsICB2YWx1ZSwgIHZhbHVlIF1dIHxcbiAgICAvLyArLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLStcbiAgICBjb25zdCBtYXBzVmFsdWVzTWF0cml4ID0gKDAsIF9hcnJheS5hcnJheU1hcCkodGhpcy5nZXQoKSwgbWFwID0+IG1hcC5nZXRWYWx1ZXMoKSk7XG4gICAgLy8gQmVsb3cgdmFyaWFibGUgc3RvcmVzIHZhbHVlcyBmb3IgZXZlcnkgcGFydGljdWxhciBpbmRleC4gRXhhbXBsZSBkZXNjcmliaW5nIHNpdHVhdGlvbiB3aGVuIHdlIGhhdmUgMiByZWdpc3RlcmVkIG1hcHMsXG4gICAgLy8gd2l0aCBsZW5ndGggZXF1YWwgdG8gNS5cbiAgICAvL1xuICAgIC8vICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgIC8vIHwgICAgICAgICB8ICAgICAgICAgbWFwcyAgICAgICAgfFxuICAgIC8vICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgIC8vIHwgaW5kZXhlcyB8ICAgICAwICAgIHwgICAgMSAgICAgfFxuICAgIC8vICstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAgIC8vIHwgICAgMCAgICB8IFtbIHZhbHVlLCAgdmFsdWUgXSwgfFxuICAgIC8vIHwgICAgMSAgICB8IFsgIHZhbHVlLCAgdmFsdWUgXSwgfFxuICAgIC8vIHwgICAgMiAgICB8IFsgIHZhbHVlLCAgdmFsdWUgXSwgfFxuICAgIC8vIHwgICAgMyAgICB8IFsgIHZhbHVlLCAgdmFsdWUgXSwgfFxuICAgIC8vIHwgICAgNCAgICB8IFsgIHZhbHVlLCAgdmFsdWUgXV0gfFxuICAgIC8vICstLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tK1xuICAgIGNvbnN0IGluZGV4ZXNWYWx1ZXNNYXRyaXggPSBbXTtcbiAgICBjb25zdCBtYXBzTGVuZ3RoID0gKDAsIF9taXhlZC5pc0RlZmluZWQpKG1hcHNWYWx1ZXNNYXRyaXhbMF0pICYmIG1hcHNWYWx1ZXNNYXRyaXhbMF0ubGVuZ3RoIHx8IDA7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG1hcHNMZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IHZhbHVlc0ZvckluZGV4ID0gW107XG4gICAgICBmb3IgKGxldCBtYXBJbmRleCA9IDA7IG1hcEluZGV4IDwgdGhpcy5nZXRMZW5ndGgoKTsgbWFwSW5kZXggKz0gMSkge1xuICAgICAgICB2YWx1ZXNGb3JJbmRleC5wdXNoKG1hcHNWYWx1ZXNNYXRyaXhbbWFwSW5kZXhdW2luZGV4XSk7XG4gICAgICB9XG4gICAgICBpbmRleGVzVmFsdWVzTWF0cml4LnB1c2godmFsdWVzRm9ySW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF9hcnJheS5hcnJheU1hcCkoaW5kZXhlc1ZhbHVlc01hdHJpeCwgdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWVyZ2VkIHZhbHVlIGZvciBwYXJ0aWN1bGFyIGluZGV4LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggZm9yIHdoaWNoIHdlIGNhbGN1bGF0ZSBzaW5nbGUgcmVzdWx0LlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWFkRnJvbUNhY2hlPXRydWVdIERldGVybWluZSBpZiByZWFkIHJlc3VsdHMgZnJvbSB0aGUgY2FjaGUuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGluZGV4LCByZWFkRnJvbUNhY2hlKSB7XG4gICAgY29uc3QgdmFsdWVBdEluZGV4ID0gdGhpcy5nZXRNZXJnZWRWYWx1ZXMocmVhZEZyb21DYWNoZSlbaW5kZXhdO1xuICAgIHJldHVybiAoMCwgX21peGVkLmlzRGVmaW5lZCkodmFsdWVBdEluZGV4KSA/IHZhbHVlQXRJbmRleCA6IHRoaXMuZmFsbGJhY2tWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWJ1aWxkIGNhY2hlIGZvciB0aGUgY29sbGVjdGlvbi5cbiAgICovXG4gIHVwZGF0ZUNhY2hlKCkge1xuICAgIHRoaXMubWVyZ2VkVmFsdWVzQ2FjaGUgPSB0aGlzLmdldE1lcmdlZFZhbHVlcyhmYWxzZSk7XG4gIH1cbn1cbmV4cG9ydHMuQWdncmVnYXRlZENvbGxlY3Rpb24gPSBBZ2dyZWdhdGVkQ29sbGVjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYWdncmVnYXRlZENvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi9hZ2dyZWdhdGVkQ29sbGVjdGlvblwiKTtcbk9iamVjdC5rZXlzKF9hZ2dyZWdhdGVkQ29sbGVjdGlvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2FnZ3JlZ2F0ZWRDb2xsZWN0aW9uW2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX2FnZ3JlZ2F0ZWRDb2xsZWN0aW9uW2tleV07XG59KTtcbnZhciBfbWFwQ29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuL21hcENvbGxlY3Rpb25cIik7XG5PYmplY3Qua2V5cyhfbWFwQ29sbGVjdGlvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX21hcENvbGxlY3Rpb25ba2V5XSkgcmV0dXJuO1xuICBleHBvcnRzW2tleV0gPSBfbWFwQ29sbGVjdGlvbltrZXldO1xufSk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRNYXBzQ291bnRlciA9IGdldFJlZ2lzdGVyZWRNYXBzQ291bnRlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbWl4ZWRcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8vIENvdW50ZXIgZm9yIGNoZWNraW5nIGlmIHRoZXJlIGlzIGEgbWVtb3J5IGxlYWsuXG5sZXQgcmVnaXN0ZXJlZE1hcHMgPSAwO1xuXG4vKipcbiAqIENvbGxlY3Rpb24gb2YgaW5kZXggbWFwcyBoYXZpbmcgdW5pcXVlIG5hbWVzLiBJdCBhbGxvdyB1cyB0byBwZXJmb3JtIGJ1bGsgb3BlcmF0aW9ucyBzdWNoIGFzIGluaXQsIHJlbW92ZSwgaW5zZXJ0IG9uIGFsbCBpbmRleCBtYXBzIHRoYXQgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKi9cbmNsYXNzIE1hcENvbGxlY3Rpb24ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIGluZGV4IG1hcHMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWFwPHN0cmluZywgSW5kZXhNYXA+fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbGxlY3Rpb25cIiwgbmV3IE1hcCgpKTtcbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgY3VzdG9tIGluZGV4IG1hcC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXF1ZU5hbWUgVW5pcXVlIG5hbWUgb2YgdGhlIGluZGV4IG1hcC5cbiAgICogQHBhcmFtIHtJbmRleE1hcH0gaW5kZXhNYXAgSW5kZXggbWFwIGNvbnRhaW5pbmcgbWlzY2VsbGFuZW91cyAoaS5lLiBNZXRhIGRhdGEsIGluZGV4ZXMgc2VxdWVuY2UpLCB1cGRhdGVkIGFmdGVyIHJlbW92ZSBhbmQgaW5zZXJ0IGRhdGEgYWN0aW9ucy5cbiAgICovXG4gIHJlZ2lzdGVyKHVuaXF1ZU5hbWUsIGluZGV4TWFwKSB7XG4gICAgaWYgKHRoaXMuY29sbGVjdGlvbi5oYXModW5pcXVlTmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmNvbGxlY3Rpb24uc2V0KHVuaXF1ZU5hbWUsIGluZGV4TWFwKTtcbiAgICAgIGluZGV4TWFwLmFkZExvY2FsSG9vaygnY2hhbmdlJywgKCkgPT4gdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnLCBpbmRleE1hcCkpO1xuICAgICAgcmVnaXN0ZXJlZE1hcHMgKz0gMTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5yZWdpc3RlciBjdXN0b20gaW5kZXggbWFwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBpbmRleCBtYXAuXG4gICAqL1xuICB1bnJlZ2lzdGVyKG5hbWUpIHtcbiAgICBjb25zdCBpbmRleE1hcCA9IHRoaXMuY29sbGVjdGlvbi5nZXQobmFtZSk7XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNEZWZpbmVkKShpbmRleE1hcCkpIHtcbiAgICAgIGluZGV4TWFwLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29sbGVjdGlvbi5kZWxldGUobmFtZSk7XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NoYW5nZScsIGluZGV4TWFwKTtcbiAgICAgIHJlZ2lzdGVyZWRNYXBzIC09IDE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVucmVnaXN0ZXJzIGFuZCBkZXN0cm95cyBhbGwgY29sbGVjdGVkIGluZGV4IG1hcCBpbnN0YW5jZXMuXG4gICAqL1xuICB1bnJlZ2lzdGVyQWxsKCkge1xuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKChpbmRleE1hcCwgbmFtZSkgPT4gdGhpcy51bnJlZ2lzdGVyKG5hbWUpKTtcbiAgICB0aGlzLmNvbGxlY3Rpb24uY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaW5kZXggbWFwIGZvciB0aGUgcHJvdmlkZWQgbmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXSBOYW1lIG9mIHRoZSBpbmRleCBtYXAuXG4gICAqIEByZXR1cm5zIHtBcnJheXxJbmRleE1hcH1cbiAgICovXG4gIGdldChuYW1lKSB7XG4gICAgaWYgKCgwLCBfbWl4ZWQuaXNVbmRlZmluZWQpKG5hbWUpKSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNvbGxlY3Rpb24udmFsdWVzKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uLmdldChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBzaXplLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24uc2l6ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgc29tZSBpbmRleGVzIGFuZCBjb3JyZXNwb25kaW5nIG1hcHBpbmdzIGFuZCB1cGRhdGUgdmFsdWVzIG9mIHRoZSBvdGhlcnMgd2l0aGluIGFsbCBjb2xsZWN0aW9uJ3MgaW5kZXggbWFwcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gcmVtb3ZlZEluZGV4ZXMgTGlzdCBvZiByZW1vdmVkIGluZGV4ZXMuXG4gICAqL1xuICByZW1vdmVGcm9tRXZlcnkocmVtb3ZlZEluZGV4ZXMpIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChpbmRleE1hcCA9PiB7XG4gICAgICBpbmRleE1hcC5yZW1vdmUocmVtb3ZlZEluZGV4ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc2VydCBuZXcgaW5kZXhlcyBhbmQgY29ycmVzcG9uZGluZyBtYXBwaW5nIGFuZCB1cGRhdGUgdmFsdWVzIG9mIHRoZSBvdGhlcnMgYWxsIGNvbGxlY3Rpb24ncyBpbmRleCBtYXBzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5zZXJ0aW9uSW5kZXggUG9zaXRpb24gaW5zaWRlIHRoZSBhY3R1YWwgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheX0gaW5zZXJ0ZWRJbmRleGVzIExpc3Qgb2YgaW5zZXJ0ZWQgaW5kZXhlcy5cbiAgICovXG4gIGluc2VydFRvRXZlcnkoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcykge1xuICAgIHRoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGluZGV4TWFwID0+IHtcbiAgICAgIGluZGV4TWFwLmluc2VydChpbnNlcnRpb25JbmRleCwgaW5zZXJ0ZWRJbmRleGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gaW5kZXggbWFwcyB3aXRoaW4gY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBEZXN0aW5hdGlvbiBsZW5ndGggZm9yIGFsbCBzdG9yZWQgbWFwcy5cbiAgICovXG4gIGluaXRFdmVyeShsZW5ndGgpIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChpbmRleE1hcCA9PiB7XG4gICAgICBpbmRleE1hcC5pbml0KGxlbmd0aCk7XG4gICAgfSk7XG4gIH1cbn1cbmV4cG9ydHMuTWFwQ29sbGVjdGlvbiA9IE1hcENvbGxlY3Rpb247XG4oMCwgX29iamVjdC5taXhpbikoTWFwQ29sbGVjdGlvbiwgX2xvY2FsSG9va3MuZGVmYXVsdCk7XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZE1hcHNDb3VudGVyKCkge1xuICByZXR1cm4gcmVnaXN0ZXJlZE1hcHM7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX3BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwID0gcmVxdWlyZShcIi4vcGh5c2ljYWxJbmRleFRvVmFsdWVNYXBcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIE1hcCBmb3Igc3RvcmluZyBtYXBwaW5ncyBmcm9tIGFuIHBoeXNpY2FsIGluZGV4IHRvIGEgYm9vbGVhbiB2YWx1ZS4gSXQgc3RvcmVzIGluZm9ybWF0aW9uIHdoZXRoZXIgcGh5c2ljYWwgaW5kZXggaXNcbiAqIGluY2x1ZGVkIGluIGEgZGF0YXNldCwgYnV0IHNraXBwZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVuZGVyaW5nLlxuICpcbiAqIEBjbGFzcyBIaWRpbmdNYXBcbiAqL1xuY2xhc3MgSGlkaW5nTWFwIGV4dGVuZHMgX3BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgbGV0IGluaXRWYWx1ZU9yRm4gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHN1cGVyKGluaXRWYWx1ZU9yRm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwaHlzaWNhbCBpbmRleGVzIHdoaWNoIGFyZSBoaWRkZW4uXG4gICAqXG4gICAqIE5vdGU6IEluZGV4ZXMgbWFya2VkIGFzIGhpZGRlbiBhcmUgaW5jbHVkZWQgaW4gYSB7QGxpbmsgRGF0YU1hcH0sIGJ1dCBhcmVuJ3QgcmVuZGVyZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldEhpZGRlbkluZGV4ZXMoKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKHRoaXMuZ2V0VmFsdWVzKCksIChpbmRleGVzTGlzdCwgaXNIaWRkZW4sIHBoeXNpY2FsSW5kZXgpID0+IHtcbiAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICBpbmRleGVzTGlzdC5wdXNoKHBoeXNpY2FsSW5kZXgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4ZXNMaXN0O1xuICAgIH0sIFtdKTtcbiAgfVxufVxuZXhwb3J0cy5IaWRpbmdNYXAgPSBIaWRpbmdNYXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2V4cG9ydE5hbWVzID0ge1xuICBjcmVhdGVJbmRleE1hcDogdHJ1ZSxcbiAgSGlkaW5nTWFwOiB0cnVlLFxuICBJbmRleE1hcDogdHJ1ZSxcbiAgTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXA6IHRydWUsXG4gIFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwOiB0cnVlLFxuICBUcmltbWluZ01hcDogdHJ1ZVxufTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhNYXAgPSBjcmVhdGVJbmRleE1hcDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX2hpZGluZ01hcCA9IHJlcXVpcmUoXCIuL2hpZGluZ01hcFwiKTtcbmV4cG9ydHMuSGlkaW5nTWFwID0gX2hpZGluZ01hcC5IaWRpbmdNYXA7XG52YXIgX2luZGV4TWFwID0gcmVxdWlyZShcIi4vaW5kZXhNYXBcIik7XG5leHBvcnRzLkluZGV4TWFwID0gX2luZGV4TWFwLkluZGV4TWFwO1xudmFyIF9saW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCA9IHJlcXVpcmUoXCIuL2xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwXCIpO1xuZXhwb3J0cy5MaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCA9IF9saW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcC5MaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcDtcbnZhciBfcGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgPSByZXF1aXJlKFwiLi9waHlzaWNhbEluZGV4VG9WYWx1ZU1hcFwiKTtcbmV4cG9ydHMuUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgPSBfcGh5c2ljYWxJbmRleFRvVmFsdWVNYXAuUGh5c2ljYWxJbmRleFRvVmFsdWVNYXA7XG52YXIgX3RyaW1taW5nTWFwID0gcmVxdWlyZShcIi4vdHJpbW1pbmdNYXBcIik7XG5leHBvcnRzLlRyaW1taW5nTWFwID0gX3RyaW1taW5nTWFwLlRyaW1taW5nTWFwO1xudmFyIF9pbmRleGVzU2VxdWVuY2UgPSByZXF1aXJlKFwiLi9pbmRleGVzU2VxdWVuY2VcIik7XG5PYmplY3Qua2V5cyhfaW5kZXhlc1NlcXVlbmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBpZiAoa2V5IGluIGV4cG9ydHMgJiYgZXhwb3J0c1trZXldID09PSBfaW5kZXhlc1NlcXVlbmNlW2tleV0pIHJldHVybjtcbiAgZXhwb3J0c1trZXldID0gX2luZGV4ZXNTZXF1ZW5jZVtrZXldO1xufSk7XG52YXIgX2luZGV4ZXNTZXF1ZW5jZTIgPSByZXF1aXJlKFwiLi91dGlscy9pbmRleGVzU2VxdWVuY2VcIik7XG5PYmplY3Qua2V5cyhfaW5kZXhlc1NlcXVlbmNlMikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgaWYgKGtleSBpbiBleHBvcnRzICYmIGV4cG9ydHNba2V5XSA9PT0gX2luZGV4ZXNTZXF1ZW5jZTJba2V5XSkgcmV0dXJuO1xuICBleHBvcnRzW2tleV0gPSBfaW5kZXhlc1NlcXVlbmNlMltrZXldO1xufSk7XG5jb25zdCBhdmFpbGFibGVJbmRleE1hcFR5cGVzID0gbmV3IE1hcChbWydoaWRpbmcnLCBfaGlkaW5nTWFwLkhpZGluZ01hcF0sIFsnaW5kZXgnLCBfaW5kZXhNYXAuSW5kZXhNYXBdLCBbJ2xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlJywgX2xpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwLkxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwXSwgWydwaHlzaWNhbEluZGV4VG9WYWx1ZScsIF9waHlzaWNhbEluZGV4VG9WYWx1ZU1hcC5QaHlzaWNhbEluZGV4VG9WYWx1ZU1hcF0sIFsndHJpbW1pbmcnLCBfdHJpbW1pbmdNYXAuVHJpbW1pbmdNYXBdXSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBuZXcgSW5kZXhNYXAgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcFR5cGUgVGhlIHR5cGUgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7Kn0gW2luaXRWYWx1ZU9yRm49bnVsbF0gSW5pdGlhbCB2YWx1ZSBvciBmdW5jdGlvbiBmb3IgaW5kZXggbWFwLlxuICogQHJldHVybnMge0luZGV4TWFwfVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbmRleE1hcChtYXBUeXBlKSB7XG4gIGxldCBpbml0VmFsdWVPckZuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICBpZiAoIWF2YWlsYWJsZUluZGV4TWFwVHlwZXMuaGFzKG1hcFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgbWFwIHR5cGUgKFwiJHttYXBUeXBlfVwiKSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgfVxuICByZXR1cm4gbmV3IChhdmFpbGFibGVJbmRleE1hcFR5cGVzLmdldChtYXBUeXBlKSkoaW5pdFZhbHVlT3JGbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9udW1iZXJcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL29iamVjdFwiKTtcbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9mdW5jdGlvblwiKTtcbnZhciBfbG9jYWxIb29rcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4uLy4uL21peGlucy9sb2NhbEhvb2tzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogTWFwIGZvciBzdG9yaW5nIG1hcHBpbmdzIGZyb20gYW4gaW5kZXggdG8gYSB2YWx1ZS5cbiAqXG4gKiBAY2xhc3MgSW5kZXhNYXBcbiAqL1xuY2xhc3MgSW5kZXhNYXAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBsZXQgaW5pdFZhbHVlT3JGbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIHZhbHVlcyBmb3IgcGFydGljdWxhciBpbmRleGVzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5kZXhlZFZhbHVlc1wiLCBbXSk7XG4gICAgLyoqXG4gICAgICogSW5pdGlhbCB2YWx1ZSBvciBmdW5jdGlvbiBmb3IgZWFjaCBleGlzdGluZyBpbmRleC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUgeyp9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5pdFZhbHVlT3JGblwiLCB2b2lkIDApO1xuICAgIHRoaXMuaW5pdFZhbHVlT3JGbiA9IGluaXRWYWx1ZU9yRm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGZ1bGwgbGlzdCBvZiB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmluZGV4ZWRWYWx1ZXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHZhbHVlIGZvciB0aGUgcGFydGljdWxhciBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IGZvciB3aGljaCB2YWx1ZSBpcyBnb3QuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZ2V0VmFsdWVBdEluZGV4KGluZGV4KSB7XG4gICAgY29uc3QgdmFsdWVzID0gdGhpcy5pbmRleGVkVmFsdWVzO1xuICAgIGlmIChpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZXNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IHZhbHVlcyBmb3IgcGFydGljdWxhciBpbmRleGVzLlxuICAgKlxuICAgKiBOb3RlOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgYGNoYW5nZWAgaG9vayB0cmlnZ2VyZWQgYnkgdGhlIG1ldGhvZCBtYXkgbm90IHVwZGF0ZSBjYWNoZSBvZiBhIGNvbGxlY3Rpb24gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBMaXN0IG9mIHNldCB2YWx1ZXMuXG4gICAqL1xuICBzZXRWYWx1ZXModmFsdWVzKSB7XG4gICAgdGhpcy5pbmRleGVkVmFsdWVzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbmV3IHZhbHVlIGZvciB0aGUgcGFydGljdWxhciBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleC5cbiAgICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2F2ZS5cbiAgICpcbiAgICogTm90ZTogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzZXQgdmFsdWUgYmV5b25kIHRoZSBtYXAgKG5vdCByZXNwZWN0aW5nIGFscmVhZHkgc2V0XG4gICAqIG1hcCdzIHNpemUpLiBQbGVhc2UgdXNlIHRoZSBgc2V0VmFsdWVzYCBtZXRob2Qgd2hlbiB5b3Ugd291bGQgbGlrZSB0byBleHRlbmQgdGhlIG1hcC5cbiAgICogTm90ZTogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGBjaGFuZ2VgIGhvb2sgdHJpZ2dlcmVkIGJ5IHRoZSBtZXRob2QgbWF5IG5vdCB1cGRhdGUgY2FjaGUgb2YgYSBjb2xsZWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNldFZhbHVlQXRJbmRleChpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPCB0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmluZGV4ZWRWYWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NoYW5nZScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgdmFsdWVzIHRvIHRoZSBkZWZhdWx0cy5cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsZW5ndGggb2YgdGhlIGluZGV4IG1hcC5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBlbGVtZW50cyBmcm9tIGAwYCB0byBgbmAsIHdoZXJlIGBuYCBpcyBlcXVhbCB0byB0aGUgaGFuZGxlZCB2YXJpYWJsZS5cbiAgICpcbiAgICogTm90ZTogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IGBjaGFuZ2VgIGhvb2sgdHJpZ2dlcmVkIGJ5IHRoZSBtZXRob2QgbWF5IG5vdCB1cGRhdGUgY2FjaGUgb2YgYSBjb2xsZWN0aW9uIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aF0gTGVuZ3RoIG9mIGxpc3QuXG4gICAqL1xuICBzZXREZWZhdWx0VmFsdWVzKCkge1xuICAgIGxldCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7XG4gICAgdGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikodGhpcy5pbml0VmFsdWVPckZuKSkge1xuICAgICAgKDAsIF9udW1iZXIucmFuZ2VFYWNoKShsZW5ndGggLSAxLCBpbmRleCA9PiB0aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4oaW5kZXgpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfbnVtYmVyLnJhbmdlRWFjaCkobGVuZ3RoIC0gMSwgKCkgPT4gdGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSk7XG4gICAgfVxuICAgIHRoaXMucnVuTG9jYWxIb29rcygnY2hhbmdlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBsaXN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCBOZXcgbGVuZ3RoIG9mIGluZGV4ZWQgbGlzdC5cbiAgICogQHJldHVybnMge0luZGV4TWFwfVxuICAgKi9cbiAgaW5pdChsZW5ndGgpIHtcbiAgICB0aGlzLnNldERlZmF1bHRWYWx1ZXMobGVuZ3RoKTtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2luaXQnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdmFsdWVzIHRvIHRoZSBsaXN0LlxuICAgKlxuICAgKiBOb3RlOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgYGNoYW5nZWAgaG9vayB0cmlnZ2VyZWQgYnkgdGhlIG1ldGhvZCBtYXkgbm90IHVwZGF0ZSBjYWNoZSBvZiBhIGNvbGxlY3Rpb24gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbnNlcnQoKSB7XG4gICAgdGhpcy5ydW5Mb2NhbEhvb2tzKCdjaGFuZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdmFsdWVzIGZyb20gdGhlIGxpc3QuXG4gICAqXG4gICAqIE5vdGU6IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBgY2hhbmdlYCBob29rIHRyaWdnZXJlZCBieSB0aGUgbWV0aG9kIG1heSBub3QgdXBkYXRlIGNhY2hlIG9mIGEgY29sbGVjdGlvbiBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlbW92ZSgpIHtcbiAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NoYW5nZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIHRoZSBNYXAgaW5zdGFuY2UuXG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIHRoaXMuY2xlYXJMb2NhbEhvb2tzKCk7XG4gICAgdGhpcy5pbmRleGVkVmFsdWVzID0gbnVsbDtcbiAgICB0aGlzLmluaXRWYWx1ZU9yRm4gPSBudWxsO1xuICB9XG59XG5leHBvcnRzLkluZGV4TWFwID0gSW5kZXhNYXA7XG4oMCwgX29iamVjdC5taXhpbikoSW5kZXhNYXAsIF9sb2NhbEhvb2tzLmRlZmF1bHQpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF9pbmRleE1hcCA9IHJlcXVpcmUoXCIuL2luZGV4TWFwXCIpO1xudmFyIF9pbmRleGVzU2VxdWVuY2UgPSByZXF1aXJlKFwiLi91dGlscy9pbmRleGVzU2VxdWVuY2VcIik7XG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vKipcbiAqIE1hcCBmb3Igc3RvcmluZyBtYXBwaW5ncyBmcm9tIGFuIGluZGV4IHRvIGEgcGh5c2ljYWwgaW5kZXguXG4gKlxuICogSXQgYWxzbyB1cGRhdGVzIHRoZSBwaHlzaWNhbCBpbmRleGVzIChyZW1haW5pbmcgaW4gdGhlIG1hcCkgb24gcmVtb3ZlL2FkZCByb3cgb3IgY29sdW1uIGFjdGlvbi5cbiAqXG4gKiBAY2xhc3MgSW5kZXhlc1NlcXVlbmNlXG4gKi9cbmNsYXNzIEluZGV4ZXNTZXF1ZW5jZSBleHRlbmRzIF9pbmRleE1hcC5JbmRleE1hcCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIE5vdCBoYW5kbGluZyBjdXN0b20gaW5pdCBmdW5jdGlvbiBvciBpbml0IHZhbHVlLlxuICAgIHN1cGVyKGluZGV4ID0+IGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdmFsdWVzIHRvIGxpc3QgYW5kIHJlb3JnYW5pemUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnNlcnRpb25JbmRleCBQb3NpdGlvbiBpbnNpZGUgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluc2VydGVkSW5kZXhlcyBMaXN0IG9mIGluc2VydGVkIGluZGV4ZXMuXG4gICAqL1xuICBpbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcykge1xuICAgIGNvbnN0IGxpc3RBZnRlclVwZGF0ZSA9ICgwLCBfdXRpbHMuZ2V0SW5jcmVhc2VkSW5kZXhlcykodGhpcy5pbmRleGVkVmFsdWVzLCBpbnNlcnRlZEluZGV4ZXMpO1xuICAgIHRoaXMuaW5kZXhlZFZhbHVlcyA9ICgwLCBfaW5kZXhlc1NlcXVlbmNlLmdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcykobGlzdEFmdGVyVXBkYXRlLCBpbnNlcnRpb25JbmRleCwgaW5zZXJ0ZWRJbmRleGVzKTtcbiAgICBzdXBlci5pbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBsaXN0IGFuZCByZW9yZ2FuaXplLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAgICovXG4gIHJlbW92ZShyZW1vdmVkSW5kZXhlcykge1xuICAgIGNvbnN0IGxpc3RBZnRlclVwZGF0ZSA9ICgwLCBfaW5kZXhlc1NlcXVlbmNlLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKSh0aGlzLmluZGV4ZWRWYWx1ZXMsIHJlbW92ZWRJbmRleGVzKTtcbiAgICB0aGlzLmluZGV4ZWRWYWx1ZXMgPSAoMCwgX3V0aWxzLmdldERlY3JlYXNlZEluZGV4ZXMpKGxpc3RBZnRlclVwZGF0ZSwgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHN1cGVyLnJlbW92ZShyZW1vdmVkSW5kZXhlcyk7XG4gIH1cbn1cbmV4cG9ydHMuSW5kZXhlc1NlcXVlbmNlID0gSW5kZXhlc1NlcXVlbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfaW5kZXhNYXAgPSByZXF1aXJlKFwiLi9pbmRleE1hcFwiKTtcbnZhciBfcGh5c2ljYWxseUluZGV4ZWQgPSByZXF1aXJlKFwiLi91dGlscy9waHlzaWNhbGx5SW5kZXhlZFwiKTtcbnZhciBfaW5kZXhlc1NlcXVlbmNlID0gcmVxdWlyZShcIi4vdXRpbHMvaW5kZXhlc1NlcXVlbmNlXCIpO1xudmFyIF9hY3Rpb25zT25JbmRleGVzID0gcmVxdWlyZShcIi4vdXRpbHMvYWN0aW9uc09uSW5kZXhlc1wiKTtcbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vaGVscGVycy9mdW5jdGlvblwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBNYXAgZm9yIHN0b3JpbmcgbWFwcGluZ3MgZnJvbSBhbiBwaHlzaWNhbCBpbmRleCB0byBhIHZhbHVlLiBUaG9zZSBlbnRyaWVzIGFyZSBsaW5rZWQgYW5kIHN0b3JlZCBpbiBhIGNlcnRhaW4gb3JkZXIuXG4gKlxuICogSXQgZG9lcyBub3QgdXBkYXRlIHN0b3JlZCB2YWx1ZXMgb24gcmVtb3ZlL2FkZCByb3cgb3IgY29sdW1uIGFjdGlvbi4gT3RoZXJ3aXNlLCBvcmRlciBvZiBlbnRyaWVzIGlzIHVwZGF0ZWQgYWZ0ZXJcbiAqIHN1Y2ggY2hhbmdlcy5cbiAqXG4gKiBAY2xhc3MgTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXBcbiAqL1xuY2xhc3MgTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgZXh0ZW5kcyBfaW5kZXhNYXAuSW5kZXhNYXAge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgIC8qKlxuICAgICAqIEluZGV4ZXMgYW5kIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZW0gKGVudHJpZXMpIGFyZSBzdG9yZWQgaW4gYSBjZXJ0YWluIG9yZGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAdHlwZSB7QXJyYXk8bnVtYmVyPn1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJvcmRlck9mSW5kZXhlc1wiLCBbXSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBmdWxsIGxpc3Qgb2Ygb3JkZXJlZCB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0VmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChwaHlzaWNhbEluZGV4ID0+IHRoaXMuaW5kZXhlZFZhbHVlc1twaHlzaWNhbEluZGV4XSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IG5ldyB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy4gRW50cmllcyBhcmUgbGlua2VkIGFuZCBzdG9yZWQgaW4gYSBjZXJ0YWluIG9yZGVyLlxuICAgKlxuICAgKiBOb3RlOiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgYGNoYW5nZWAgaG9vayB0cmlnZ2VyZWQgYnkgdGhlIG1ldGhvZCBtYXkgbm90IHVwZGF0ZSBjYWNoZSBvZiBhIGNvbGxlY3Rpb24gaW1tZWRpYXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBMaXN0IG9mIHNldCB2YWx1ZXMuXG4gICAqL1xuICBzZXRWYWx1ZXModmFsdWVzKSB7XG4gICAgdGhpcy5vcmRlck9mSW5kZXhlcyA9IFsuLi5BcnJheSh2YWx1ZXMubGVuZ3RoKS5rZXlzKCldO1xuICAgIHN1cGVyLnNldFZhbHVlcyh2YWx1ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB2YWx1ZSBhdCBpbmRleCBhbmQgYWRkIGl0IHRvIHRoZSBsaW5rZWQgbGlzdCBvZiBlbnRyaWVzLiBFbnRyaWVzIGFyZSBzdG9yZWQgaW4gYSBjZXJ0YWluIG9yZGVyLlxuICAgKlxuICAgKiBOb3RlOiBWYWx1ZSB3aWxsIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4LlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzYXZlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcG9zaXRpb24gUG9zaXRpb24gdG8gd2hpY2ggZW50cnkgd2lsbCBiZSBhZGRlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBzZXRWYWx1ZUF0SW5kZXgoaW5kZXgsIHZhbHVlKSB7XG4gICAgbGV0IHBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aDtcbiAgICBpZiAoaW5kZXggPCB0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmluZGV4ZWRWYWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5vcmRlck9mSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKHBvc2l0aW9uLCAwLCBpbmRleCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJ1bkxvY2FsSG9va3MoJ2NoYW5nZScpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciB2YWx1ZSBmb3IgcGFydGljdWxhciBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHBoeXNpY2FsSW5kZXggUGh5c2ljYWwgaW5kZXguXG4gICAqL1xuICBjbGVhclZhbHVlKHBoeXNpY2FsSW5kZXgpIHtcbiAgICB0aGlzLm9yZGVyT2ZJbmRleGVzID0gKDAsIF9pbmRleGVzU2VxdWVuY2UuZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXMpKHRoaXMub3JkZXJPZkluZGV4ZXMsIFtwaHlzaWNhbEluZGV4XSk7XG4gICAgaWYgKCgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikodGhpcy5pbml0VmFsdWVPckZuKSkge1xuICAgICAgc3VwZXIuc2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsSW5kZXgsIHRoaXMuaW5pdFZhbHVlT3JGbihwaHlzaWNhbEluZGV4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1cGVyLnNldFZhbHVlQXRJbmRleChwaHlzaWNhbEluZGV4LCB0aGlzLmluaXRWYWx1ZU9yRm4pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbGVuZ3RoIG9mIHRoZSBpbmRleCBtYXAuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgZWxlbWVudHMgZnJvbSBgMGAgdG8gYG5gLCB3aGVyZSBgbmAgaXMgZXF1YWwgdG8gdGhlIGhhbmRsZWQgdmFyaWFibGUuXG4gICAqXG4gICAqIE5vdGU6IFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCBgY2hhbmdlYCBob29rIHRyaWdnZXJlZCBieSB0aGUgbWV0aG9kIG1heSBub3QgdXBkYXRlIGNhY2hlIG9mIGEgY29sbGVjdGlvbiBpbW1lZGlhdGVseS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBvZiBsaXN0LlxuICAgKi9cbiAgc2V0RGVmYXVsdFZhbHVlcygpIHtcbiAgICBsZXQgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoO1xuICAgIHRoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoID0gMDtcbiAgICBzdXBlci5zZXREZWZhdWx0VmFsdWVzKGxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHZhbHVlcyB0byBsaXN0IGFuZCByZW9yZ2FuaXplLiBJdCB1cGRhdGVzIGxpc3Qgb2YgaW5kZXhlcyByZWxhdGVkIHRvIG9yZGVyZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5zZXJ0aW9uSW5kZXggUG9zaXRpb24gaW5zaWRlIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5fSBpbnNlcnRlZEluZGV4ZXMgTGlzdCBvZiBpbnNlcnRlZCBpbmRleGVzLlxuICAgKi9cbiAgaW5zZXJ0KGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMpIHtcbiAgICB0aGlzLmluZGV4ZWRWYWx1ZXMgPSAoMCwgX3BoeXNpY2FsbHlJbmRleGVkLmdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcykodGhpcy5pbmRleGVkVmFsdWVzLCBpbnNlcnRpb25JbmRleCwgaW5zZXJ0ZWRJbmRleGVzLCB0aGlzLmluaXRWYWx1ZU9yRm4pO1xuICAgIHRoaXMub3JkZXJPZkluZGV4ZXMgPSAoMCwgX2FjdGlvbnNPbkluZGV4ZXMuZ2V0SW5jcmVhc2VkSW5kZXhlcykodGhpcy5vcmRlck9mSW5kZXhlcywgaW5zZXJ0ZWRJbmRleGVzKTtcbiAgICBzdXBlci5pbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHZhbHVlcyBmcm9tIHRoZSBsaXN0IGFuZCByZW9yZ2FuaXplLiBJdCB1cGRhdGVzIGxpc3Qgb2YgaW5kZXhlcyByZWxhdGVkIHRvIG9yZGVyZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAgICovXG4gIHJlbW92ZShyZW1vdmVkSW5kZXhlcykge1xuICAgIHRoaXMuaW5kZXhlZFZhbHVlcyA9ICgwLCBfcGh5c2ljYWxseUluZGV4ZWQuZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXMpKHRoaXMuaW5kZXhlZFZhbHVlcywgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHRoaXMub3JkZXJPZkluZGV4ZXMgPSAoMCwgX2luZGV4ZXNTZXF1ZW5jZS5nZXRMaXN0V2l0aFJlbW92ZWRJdGVtcykodGhpcy5vcmRlck9mSW5kZXhlcywgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHRoaXMub3JkZXJPZkluZGV4ZXMgPSAoMCwgX2FjdGlvbnNPbkluZGV4ZXMuZ2V0RGVjcmVhc2VkSW5kZXhlcykodGhpcy5vcmRlck9mSW5kZXhlcywgcmVtb3ZlZEluZGV4ZXMpO1xuICAgIHN1cGVyLnJlbW92ZShyZW1vdmVkSW5kZXhlcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGV2ZXJ5IGVudHJ5IGNvbnRhaW5pbmcgaW5kZXggYW5kIHZhbHVlLCByZXNwZWN0aW5nIG9yZGVyIG9mIGluZGV4ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICovXG4gIGdldEVudHJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKHBoeXNpY2FsSW5kZXggPT4gW3BoeXNpY2FsSW5kZXgsIHRoaXMuZ2V0VmFsdWVBdEluZGV4KHBoeXNpY2FsSW5kZXgpXSk7XG4gIH1cbn1cbmV4cG9ydHMuTGlua2VkUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAgPSBMaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcDsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfaW5kZXhNYXAgPSByZXF1aXJlKFwiLi9pbmRleE1hcFwiKTtcbnZhciBfcGh5c2ljYWxseUluZGV4ZWQgPSByZXF1aXJlKFwiLi91dGlscy9waHlzaWNhbGx5SW5kZXhlZFwiKTtcbi8qKlxuICogTWFwIGZvciBzdG9yaW5nIG1hcHBpbmdzIGZyb20gYW4gcGh5c2ljYWwgaW5kZXggdG8gYSB2YWx1ZS5cbiAqXG4gKiBEb2VzIG5vdCB1cGRhdGUgc3RvcmVkIHZhbHVlcyBvbiByZW1vdmUvYWRkIHJvdyBvciBjb2x1bW4gYWN0aW9uLlxuICpcbiAqIEBjbGFzcyBQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcFxuICovXG5jbGFzcyBQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCBleHRlbmRzIF9pbmRleE1hcC5JbmRleE1hcCB7XG4gIC8qKlxuICAgKiBBZGQgdmFsdWVzIHRvIGxpc3QgYW5kIHJlb3JnYW5pemUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbnNlcnRpb25JbmRleCBQb3NpdGlvbiBpbnNpZGUgdGhlIGxpc3QuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluc2VydGVkSW5kZXhlcyBMaXN0IG9mIGluc2VydGVkIGluZGV4ZXMuXG4gICAqL1xuICBpbnNlcnQoaW5zZXJ0aW9uSW5kZXgsIGluc2VydGVkSW5kZXhlcykge1xuICAgIHRoaXMuaW5kZXhlZFZhbHVlcyA9ICgwLCBfcGh5c2ljYWxseUluZGV4ZWQuZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zKSh0aGlzLmluZGV4ZWRWYWx1ZXMsIGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMsIHRoaXMuaW5pdFZhbHVlT3JGbik7XG4gICAgc3VwZXIuaW5zZXJ0KGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB2YWx1ZXMgZnJvbSB0aGUgbGlzdCBhbmQgcmVvcmdhbml6ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtBcnJheX0gcmVtb3ZlZEluZGV4ZXMgTGlzdCBvZiByZW1vdmVkIGluZGV4ZXMuXG4gICAqL1xuICByZW1vdmUocmVtb3ZlZEluZGV4ZXMpIHtcbiAgICB0aGlzLmluZGV4ZWRWYWx1ZXMgPSAoMCwgX3BoeXNpY2FsbHlJbmRleGVkLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKSh0aGlzLmluZGV4ZWRWYWx1ZXMsIHJlbW92ZWRJbmRleGVzKTtcbiAgICBzdXBlci5yZW1vdmUocmVtb3ZlZEluZGV4ZXMpO1xuICB9XG59XG5leHBvcnRzLlBoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwID0gUGh5c2ljYWxJbmRleFRvVmFsdWVNYXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX3BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwID0gcmVxdWlyZShcIi4vcGh5c2ljYWxJbmRleFRvVmFsdWVNYXBcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIE1hcCBmb3Igc3RvcmluZyBtYXBwaW5ncyBmcm9tIGFuIHBoeXNpY2FsIGluZGV4IHRvIGEgYm9vbGVhbiB2YWx1ZS4gSXQgc3RvcmVzIGluZm9ybWF0aW9uIHdoZXRoZXIgcGh5c2ljYWwgaW5kZXggaXNcbiAqIE5PVCBpbmNsdWRlZCBpbiBhIGRhdGFzZXQgYW5kIHNraXBwZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVuZGVyaW5nLlxuICpcbiAqIEBjbGFzcyBUcmltbWluZ01hcFxuICovXG5jbGFzcyBUcmltbWluZ01hcCBleHRlbmRzIF9waHlzaWNhbEluZGV4VG9WYWx1ZU1hcC5QaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGxldCBpbml0VmFsdWVPckZuID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcbiAgICBzdXBlcihpbml0VmFsdWVPckZuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGh5c2ljYWwgaW5kZXhlcyB3aGljaCBhcmUgdHJpbW1lZC5cbiAgICpcbiAgICogTm90ZTogSW5kZXhlcyBtYXJrZWQgYXMgdHJpbW1lZCBhcmVuJ3QgaW5jbHVkZWQgaW4gYSB7QGxpbmsgRGF0YU1hcH0gYW5kIGFyZW4ndCByZW5kZXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZ2V0VHJpbW1lZEluZGV4ZXMoKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlSZWR1Y2UpKHRoaXMuZ2V0VmFsdWVzKCksIChpbmRleGVzTGlzdCwgaXNUcmltbWVkLCBwaHlzaWNhbEluZGV4KSA9PiB7XG4gICAgICBpZiAoaXNUcmltbWVkKSB7XG4gICAgICAgIGluZGV4ZXNMaXN0LnB1c2gocGh5c2ljYWxJbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5kZXhlc0xpc3Q7XG4gICAgfSwgW10pO1xuICB9XG59XG5leHBvcnRzLlRyaW1taW5nTWFwID0gVHJpbW1pbmdNYXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldERlY3JlYXNlZEluZGV4ZXMgPSBnZXREZWNyZWFzZWRJbmRleGVzO1xuZXhwb3J0cy5nZXRJbmNyZWFzZWRJbmRleGVzID0gZ2V0SW5jcmVhc2VkSW5kZXhlcztcbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vaGVscGVycy9hcnJheVwiKTtcbi8qKlxuICogVHJhbnNmb3JtIG1hcHBpbmdzIGFmdGVyIHJlbW92YWwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZWRWYWx1ZXMgTGlzdCBvZiB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IHJlbW92ZWRJbmRleGVzIExpc3Qgb2YgcmVtb3ZlZCBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBMaXN0IHdpdGggZGVjcmVhc2VkIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldERlY3JlYXNlZEluZGV4ZXMoaW5kZXhlZFZhbHVlcywgcmVtb3ZlZEluZGV4ZXMpIHtcbiAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlNYXApKGluZGV4ZWRWYWx1ZXMsIGluZGV4ID0+IGluZGV4IC0gcmVtb3ZlZEluZGV4ZXMuZmlsdGVyKHJlbW92ZWRJbmRleCA9PiByZW1vdmVkSW5kZXggPCBpbmRleCkubGVuZ3RoKTtcbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm0gbWFwcGluZ3MgYWZ0ZXIgaW5zZXJ0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVkVmFsdWVzIExpc3Qgb2YgdmFsdWVzIGZvciBwYXJ0aWN1bGFyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBpbnNlcnRlZEluZGV4ZXMgTGlzdCBvZiBpbnNlcnRlZCBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBMaXN0IHdpdGggaW5jcmVhc2VkIGluZGV4ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEluY3JlYXNlZEluZGV4ZXMoaW5kZXhlZFZhbHVlcywgaW5zZXJ0ZWRJbmRleGVzKSB7XG4gIGNvbnN0IGZpcnN0SW5zZXJ0ZWRJbmRleCA9IGluc2VydGVkSW5kZXhlc1swXTtcbiAgY29uc3QgYW1vdW50T2ZJbmRleGVzID0gaW5zZXJ0ZWRJbmRleGVzLmxlbmd0aDtcbiAgcmV0dXJuICgwLCBfYXJyYXkuYXJyYXlNYXApKGluZGV4ZWRWYWx1ZXMsIGluZGV4ID0+IHtcbiAgICBpZiAoaW5kZXggPj0gZmlyc3RJbnNlcnRlZEluZGV4KSB7XG4gICAgICByZXR1cm4gaW5kZXggKyBhbW91bnRPZkluZGV4ZXM7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9hY3Rpb25zT25JbmRleGVzID0gcmVxdWlyZShcIi4vYWN0aW9uc09uSW5kZXhlc1wiKTtcbmV4cG9ydHMuZ2V0RGVjcmVhc2VkSW5kZXhlcyA9IF9hY3Rpb25zT25JbmRleGVzLmdldERlY3JlYXNlZEluZGV4ZXM7XG5leHBvcnRzLmdldEluY3JlYXNlZEluZGV4ZXMgPSBfYWN0aW9uc09uSW5kZXhlcy5nZXRJbmNyZWFzZWRJbmRleGVzO1xudmFyIF9pbmRleGVzU2VxdWVuY2UgPSByZXF1aXJlKFwiLi9pbmRleGVzU2VxdWVuY2VcIik7XG52YXIgX3BoeXNpY2FsbHlJbmRleGVkID0gcmVxdWlyZShcIi4vcGh5c2ljYWxseUluZGV4ZWRcIik7XG5jb25zdCBhbHRlclN0cmF0ZWdpZXMgPSBuZXcgTWFwKFtbJ2luZGV4ZXNTZXF1ZW5jZScsIHtcbiAgZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOiBfaW5kZXhlc1NlcXVlbmNlLmdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcyxcbiAgZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6IF9pbmRleGVzU2VxdWVuY2UuZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXNcbn1dLCBbJ3BoeXNpY2FsbHlJbmRleGVkJywge1xuICBnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6IF9waHlzaWNhbGx5SW5kZXhlZC5nZXRMaXN0V2l0aEluc2VydGVkSXRlbXMsXG4gIGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOiBfcGh5c2ljYWxseUluZGV4ZWQuZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXNcbn1dXSk7XG5jb25zdCBhbHRlclV0aWxzRmFjdG9yeSA9IGluZGV4YXRpb25TdHJhdGVneSA9PiB7XG4gIGlmIChhbHRlclN0cmF0ZWdpZXMuaGFzKGluZGV4YXRpb25TdHJhdGVneSkgPT09IGZhbHNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBBbHRlciBzdHJhdGVneSB3aXRoIElEICcke2luZGV4YXRpb25TdHJhdGVneX0nIGRvZXMgbm90IGV4aXN0LmApO1xuICB9XG4gIHJldHVybiBhbHRlclN0cmF0ZWdpZXMuZ2V0KGluZGV4YXRpb25TdHJhdGVneSk7XG59O1xuZXhwb3J0cy5hbHRlclV0aWxzRmFjdG9yeSA9IGFsdGVyVXRpbHNGYWN0b3J5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRMaXN0V2l0aEluc2VydGVkSXRlbXMgPSBnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM7XG5leHBvcnRzLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zID0gZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIEluc2VydCBuZXcgaXRlbXMgdG8gdGhlIGxpc3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZWRWYWx1ZXMgTGlzdCBvZiB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnNlcnRpb25JbmRleCBQb3NpdGlvbiBpbnNpZGUgdGhlIGFjdHVhbCBsaXN0LlxuICogQHBhcmFtIHtBcnJheX0gaW5zZXJ0ZWRJbmRleGVzIExpc3Qgb2YgaW5zZXJ0ZWQgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gTGlzdCB3aXRoIG5ldyBtYXBwaW5ncy5cbiAqL1xuZnVuY3Rpb24gZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zKGluZGV4ZWRWYWx1ZXMsIGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMpIHtcbiAgcmV0dXJuIFsuLi5pbmRleGVkVmFsdWVzLnNsaWNlKDAsIGluc2VydGlvbkluZGV4KSwgLi4uaW5zZXJ0ZWRJbmRleGVzLCAuLi5pbmRleGVkVmFsdWVzLnNsaWNlKGluc2VydGlvbkluZGV4KV07XG59XG5cbi8qKlxuICogRmlsdGVyIGl0ZW1zIGZyb20gdGhlIGxpc3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZWRWYWx1ZXMgTGlzdCBvZiB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IHJlbW92ZWRJbmRleGVzIExpc3Qgb2YgcmVtb3ZlZCBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZWR1Y2VkIGxpc3Qgb2YgbWFwcGluZ3MuXG4gKi9cbmZ1bmN0aW9uIGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zKGluZGV4ZWRWYWx1ZXMsIHJlbW92ZWRJbmRleGVzKSB7XG4gIHJldHVybiAoMCwgX2FycmF5LmFycmF5RmlsdGVyKShpbmRleGVkVmFsdWVzLCBpbmRleCA9PiB7XG4gICAgcmV0dXJuIHJlbW92ZWRJbmRleGVzLmluY2x1ZGVzKGluZGV4KSA9PT0gZmFsc2U7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5nZXRMaXN0V2l0aEluc2VydGVkSXRlbXMgPSBnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM7XG5leHBvcnRzLmdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zID0gZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uLy4uL2hlbHBlcnMvYXJyYXlcIik7XG4vKipcbiAqIEluc2VydCBuZXcgaXRlbXMgdG8gdGhlIGxpc3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ZWRWYWx1ZXMgTGlzdCBvZiB2YWx1ZXMgZm9yIHBhcnRpY3VsYXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbnNlcnRpb25JbmRleCBQb3NpdGlvbiBpbnNpZGUgdGhlIGFjdHVhbCBsaXN0LlxuICogQHBhcmFtIHtBcnJheX0gaW5zZXJ0ZWRJbmRleGVzIExpc3Qgb2YgaW5zZXJ0ZWQgaW5kZXhlcy5cbiAqIEBwYXJhbSB7Kn0gaW5zZXJ0ZWRWYWx1ZXNNYXBwaW5nIE1hcHBpbmcgd2hpY2ggbWF5IHByb3ZpZGUgdmFsdWUgb3IgZnVuY3Rpb24gcmV0dXJuaW5nIHZhbHVlIGZvciB0aGUgc3BlY2lmaWMgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIHtBcnJheX0gTGlzdCB3aXRoIG5ldyBtYXBwaW5ncy5cbiAqL1xuZnVuY3Rpb24gZ2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zKGluZGV4ZWRWYWx1ZXMsIGluc2VydGlvbkluZGV4LCBpbnNlcnRlZEluZGV4ZXMsIGluc2VydGVkVmFsdWVzTWFwcGluZykge1xuICBjb25zdCBmaXJzdEluc2VydGVkSW5kZXggPSBpbnNlcnRlZEluZGV4ZXMubGVuZ3RoID8gaW5zZXJ0ZWRJbmRleGVzWzBdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gWy4uLmluZGV4ZWRWYWx1ZXMuc2xpY2UoMCwgZmlyc3RJbnNlcnRlZEluZGV4KSwgLi4uaW5zZXJ0ZWRJbmRleGVzLm1hcCgoaW5zZXJ0ZWRJbmRleCwgb3JkaW5hbE51bWJlcikgPT4ge1xuICAgIGlmICgoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKGluc2VydGVkVmFsdWVzTWFwcGluZykpIHtcbiAgICAgIHJldHVybiBpbnNlcnRlZFZhbHVlc01hcHBpbmcoaW5zZXJ0ZWRJbmRleCwgb3JkaW5hbE51bWJlcik7XG4gICAgfVxuICAgIHJldHVybiBpbnNlcnRlZFZhbHVlc01hcHBpbmc7XG4gIH0pLCAuLi4oZmlyc3RJbnNlcnRlZEluZGV4ID09PSB1bmRlZmluZWQgPyBbXSA6IGluZGV4ZWRWYWx1ZXMuc2xpY2UoZmlyc3RJbnNlcnRlZEluZGV4KSldO1xufVxuXG4vKipcbiAqIEZpbHRlciBpdGVtcyBmcm9tIHRoZSBsaXN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVkVmFsdWVzIExpc3Qgb2YgdmFsdWVzIGZvciBwYXJ0aWN1bGFyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSByZW1vdmVkSW5kZXhlcyBMaXN0IG9mIHJlbW92ZWQgaW5kZXhlcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmVkdWNlZCBsaXN0IG9mIG1hcHBpbmdzLlxuICovXG5mdW5jdGlvbiBnZXRMaXN0V2l0aFJlbW92ZWRJdGVtcyhpbmRleGVkVmFsdWVzLCByZW1vdmVkSW5kZXhlcykge1xuICByZXR1cm4gKDAsIF9hcnJheS5hcnJheUZpbHRlcikoaW5kZXhlZFZhbHVlcywgKF8sIGluZGV4KSA9PiByZW1vdmVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkgPT09IGZhbHNlKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlSW5wdXRFbGVtZW50UmVzaXplciA9IGNyZWF0ZUlucHV0RWxlbWVudFJlc2l6ZXI7XG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4vKipcbiAqIGF1dG9SZXNpemUgLSByZXNpemVzIGEgRE9NIGVsZW1lbnQgdG8gdGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgYW5vdGhlciBET00gZWxlbWVudFxuICpcbiAqIENvcHlyaWdodCAyMDE0LCBNYXJjaW4gV2FycGVjaG93c2tpXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqL1xuLyogZXNsaW50LWVuYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4vKipcbiAqIEF0dGFjaGVzIGFuIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gb2JzZXJ2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIGxpc3RlbiBmb3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqL1xuZnVuY3Rpb24gb2JzZXJ2ZShlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYW4gZXZlbnQgbGlzdGVuZXIgZnJvbSBhbiBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8gcmVtb3ZlIHRoZSBldmVudCBsaXN0ZW5lciBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gcmVtb3ZlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgZnVuY3Rpb24gdG8gcmVtb3ZlIGFzIGEgbGlzdGVuZXIuXG4gKi9cbmZ1bmN0aW9uIHVuT2JzZXJ2ZShlbGVtZW50LCBldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgZmFsc2UpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNvbXB1dGVkIHN0eWxlIG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGdldCB0aGUgY29tcHV0ZWQgc3R5bGUgZnJvbS5cbiAqIEByZXR1cm5zIHtDU1NTdHlsZURlY2xhcmF0aW9ufSBUaGUgY29tcHV0ZWQgc3R5bGUgb2YgdGhlIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59XG5cbi8qKlxuICogQHR5cGVkZWYgSW5wdXRFbGVtZW50UmVzaXplckNvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbldpZHRoIFRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1heFdpZHRoIFRoZSBtYXhpbXVtIHdpZHRoIG9mIHRoZSBlbGVtZW50LlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1pbkhlaWdodCBUaGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbWF4SGVpZ2h0IFRoZSBtYXhpbXVtIGhlaWdodCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuLyoqXG4gKiBAdHlwZWRlZiBJbnB1dEVsZW1lbnRSZXNpemVyXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKEhUTUxFbGVtZW50LCBJbnB1dEVsZW1lbnRSZXNpemVyQ29uZmlnLCBib29sZWFuKTogdm9pZH0gaW5pdCBJbml0aWFsaXplcyB0aGUgcmVzaXplci5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gcmVzaXplIFJlc2l6ZXMgdGhlIGVsZW1lbnQuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHVuT2JzZXJ2ZSBSZW1vdmVzIHRoZSBldmVudCBsaXN0ZW5lcnMuXG4gKi9cbi8qKlxuICogQ3JlYXRlcyBhbiBpbnB1dCBlbGVtZW50IHJlc2l6ZXIuXG4gKlxuICogQHBhcmFtIHtEb2N1bWVudH0gb3duZXJEb2N1bWVudCBUaGUgZG9jdW1lbnQgdG8gY3JlYXRlIHRoZSByZXNpemVyIGZvci5cbiAqIEByZXR1cm5zIHtJbnB1dEVsZW1lbnRSZXNpemVyfVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dEVsZW1lbnRSZXNpemVyKG93bmVyRG9jdW1lbnQpIHtcbiAgY29uc3QgZGVmYXVsdHMgPSB7XG4gICAgbWluSGVpZ2h0OiAyMDAsXG4gICAgbWF4SGVpZ2h0OiAzMDAsXG4gICAgbWluV2lkdGg6IDEwMCxcbiAgICBtYXhXaWR0aDogMzAwXG4gIH07XG4gIGNvbnN0IGJvZHkgPSBvd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHRleHRIb2xkZXIgPSBvd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgY29uc3QgdGV4dENvbnRhaW5lciA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICBsZXQgb2JzZXJ2ZWRFbGVtZW50O1xuXG4gIC8qKlxuICAgKiBSZXNpemVzIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgZnVuY3Rpb24gcmVzaXplKCkge1xuICAgIHRleHRIb2xkZXIudGV4dENvbnRlbnQgPSBvYnNlcnZlZEVsZW1lbnQudmFsdWU7XG4gICAgLy8gV29uJ3QgZXhwYW5kIHRoZSBlbGVtZW50IHNpemUgZm9yIGRpc3BsYXlpbmcgYm9keSBhcyBmb3IgZXhhbXBsZSwgYGdyaWRgLCBgaW5saW5lLWdyaWRgIG9yIGBmbGV4YCB3aXRoXG4gICAgLy8gYGZsZXgtZGlyZWN0aW9uYCBzZXQgYXMgYGNvbHVtbmAuXG4gICAgdGV4dENvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgdGV4dENvbnRhaW5lci5zdHlsZS5mb250U2l6ZSA9IGdldENvbXB1dGVkU3R5bGUob2JzZXJ2ZWRFbGVtZW50KS5mb250U2l6ZTtcbiAgICB0ZXh0Q29udGFpbmVyLnN0eWxlLmZvbnRGYW1pbHkgPSBnZXRDb21wdXRlZFN0eWxlKG9ic2VydmVkRWxlbWVudCkuZm9udEZhbWlseTtcbiAgICB0ZXh0Q29udGFpbmVyLnN0eWxlLndoaXRlU3BhY2UgPSAncHJlJztcbiAgICBib2R5LmFwcGVuZENoaWxkKHRleHRDb250YWluZXIpO1xuICAgIGNvbnN0IHdpZHRoID0gdGV4dENvbnRhaW5lci5jbGllbnRXaWR0aCArIDI7XG4gICAgYm9keS5yZW1vdmVDaGlsZCh0ZXh0Q29udGFpbmVyKTtcbiAgICBjb25zdCBlbGVtZW50U3R5bGUgPSBvYnNlcnZlZEVsZW1lbnQuc3R5bGU7XG4gICAgZWxlbWVudFN0eWxlLmhlaWdodCA9IGAke2RlZmF1bHRzLm1pbkhlaWdodH1weGA7XG4gICAgaWYgKGRlZmF1bHRzLm1pbldpZHRoID4gd2lkdGgpIHtcbiAgICAgIGVsZW1lbnRTdHlsZS53aWR0aCA9IGAke2RlZmF1bHRzLm1pbldpZHRofXB4YDtcbiAgICB9IGVsc2UgaWYgKHdpZHRoID4gZGVmYXVsdHMubWF4V2lkdGgpIHtcbiAgICAgIGVsZW1lbnRTdHlsZS53aWR0aCA9IGAke2RlZmF1bHRzLm1heFdpZHRofXB4YDtcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudFN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIH1cbiAgICBjb25zdCBzY3JvbGxIZWlnaHQgPSBvYnNlcnZlZEVsZW1lbnQuc2Nyb2xsSGVpZ2h0ID8gb2JzZXJ2ZWRFbGVtZW50LnNjcm9sbEhlaWdodCAtIDEgOiAwO1xuICAgIGlmIChkZWZhdWx0cy5taW5IZWlnaHQgPiBzY3JvbGxIZWlnaHQpIHtcbiAgICAgIGVsZW1lbnRTdHlsZS5oZWlnaHQgPSBgJHtkZWZhdWx0cy5taW5IZWlnaHR9cHhgO1xuICAgIH0gZWxzZSBpZiAoZGVmYXVsdHMubWF4SGVpZ2h0IDwgc2Nyb2xsSGVpZ2h0KSB7XG4gICAgICBlbGVtZW50U3R5bGUuaGVpZ2h0ID0gYCR7ZGVmYXVsdHMubWF4SGVpZ2h0fXB4YDtcbiAgICAgIGVsZW1lbnRTdHlsZS5vdmVyZmxvd1kgPSAndmlzaWJsZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRTdHlsZS5oZWlnaHQgPSBgJHtzY3JvbGxIZWlnaHR9cHhgO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNpemVzIHRoZSBlbGVtZW50IGFmdGVyIGEgZGVsYXkuXG4gICAqL1xuICBmdW5jdGlvbiBkZWxheWVkUmVzaXplKCkge1xuICAgIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuc2V0VGltZW91dChyZXNpemUsIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZHMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJbnB1dEVsZW1lbnRSZXNpemVyQ29uZmlnfSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gdG8gZXh0ZW5kIHRoZSBkZWZhdWx0cyB3aXRoLlxuICAgKi9cbiAgZnVuY3Rpb24gZXh0ZW5kRGVmYXVsdHMoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcubWluSGVpZ2h0KSB7XG4gICAgICBpZiAoY29uZmlnLm1pbkhlaWdodCA9PT0gJ2luaGVyaXQnKSB7XG4gICAgICAgIGRlZmF1bHRzLm1pbkhlaWdodCA9IG9ic2VydmVkRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtaW5IZWlnaHQgPSBwYXJzZUludChjb25maWcubWluSGVpZ2h0LCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4obWluSGVpZ2h0KSkge1xuICAgICAgICAgIGRlZmF1bHRzLm1pbkhlaWdodCA9IG1pbkhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5tYXhIZWlnaHQpIHtcbiAgICAgIGlmIChjb25maWcubWF4SGVpZ2h0ID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgZGVmYXVsdHMubWF4SGVpZ2h0ID0gb2JzZXJ2ZWRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IHBhcnNlSW50KGNvbmZpZy5tYXhIZWlnaHQsIDEwKTtcbiAgICAgICAgaWYgKCFpc05hTihtYXhIZWlnaHQpKSB7XG4gICAgICAgICAgZGVmYXVsdHMubWF4SGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcgJiYgY29uZmlnLm1pbldpZHRoKSB7XG4gICAgICBpZiAoY29uZmlnLm1pbldpZHRoID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgZGVmYXVsdHMubWluV2lkdGggPSBvYnNlcnZlZEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IHBhcnNlSW50KGNvbmZpZy5taW5XaWR0aCwgMTApO1xuICAgICAgICBpZiAoIWlzTmFOKG1pbldpZHRoKSkge1xuICAgICAgICAgIGRlZmF1bHRzLm1pbldpZHRoID0gbWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcubWF4V2lkdGgpIHtcbiAgICAgIGlmIChjb25maWcubWF4V2lkdGggPT09ICdpbmhlcml0Jykge1xuICAgICAgICBkZWZhdWx0cy5tYXhXaWR0aCA9IG9ic2VydmVkRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gcGFyc2VJbnQoY29uZmlnLm1heFdpZHRoLCAxMCk7XG4gICAgICAgIGlmICghaXNOYU4obWF4V2lkdGgpKSB7XG4gICAgICAgICAgZGVmYXVsdHMubWF4V2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRleHRDb250YWluZXIuZmlyc3RDaGlsZCkge1xuICAgICAgdGV4dENvbnRhaW5lci5jbGFzc05hbWUgPSAnYXV0b1Jlc2l6ZSc7XG4gICAgICB0ZXh0Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcbiAgICAgIHRleHRDb250YWluZXIuYXBwZW5kQ2hpbGQodGV4dEhvbGRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSByZXNpemVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50VG9PYnNlcnZlIFRoZSBlbGVtZW50IHRvIG9ic2VydmUuXG4gICAqIEBwYXJhbSB7SW5wdXRFbGVtZW50UmVzaXplckNvbmZpZ30gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHRvIGV4dGVuZCB0aGUgZGVmYXVsdHMgd2l0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbZG9PYnNlcnZlPWZhbHNlXSBXaGV0aGVyIHRvIG9ic2VydmUgdGhlIGVsZW1lbnQgYW5kIHJlc2l6ZSBpdCBvbiBldmVyeSBpbnB1dCBjaGFuZ2UuXG4gICAqL1xuICBmdW5jdGlvbiBpbml0KGVsZW1lbnRUb09ic2VydmUsIGNvbmZpZykge1xuICAgIGxldCBkb09ic2VydmUgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgIG9ic2VydmVkRWxlbWVudCA9IGVsZW1lbnRUb09ic2VydmU7XG4gICAgZXh0ZW5kRGVmYXVsdHMoY29uZmlnKTtcbiAgICBpZiAob2JzZXJ2ZWRFbGVtZW50Lm5vZGVOYW1lID09PSAnVEVYVEFSRUEnKSB7XG4gICAgICBvYnNlcnZlZEVsZW1lbnQuc3R5bGUucmVzaXplID0gJ25vbmUnO1xuICAgICAgb2JzZXJ2ZWRFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2RlZmF1bHRzLm1pbkhlaWdodH1weGA7XG4gICAgICBvYnNlcnZlZEVsZW1lbnQuc3R5bGUubWluV2lkdGggPSBgJHtkZWZhdWx0cy5taW5XaWR0aH1weGA7XG4gICAgICBvYnNlcnZlZEVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtkZWZhdWx0cy5tYXhXaWR0aH1weGA7XG4gICAgICBvYnNlcnZlZEVsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIGlmIChkb09ic2VydmUpIHtcbiAgICAgIG9ic2VydmUob2JzZXJ2ZWRFbGVtZW50LCAnaW5wdXQnLCByZXNpemUpO1xuICAgICAgLy8gdGhlIGtleWRvd24gZXZlbnQgaXMgbmVjZXNzYXJ5IGZvciB1bmRvIHN0YWNrIHRvIHdvcmsgcHJvcGVybHlcbiAgICAgIG9ic2VydmUob2JzZXJ2ZWRFbGVtZW50LCAna2V5ZG93bicsIGRlbGF5ZWRSZXNpemUpO1xuICAgIH1cbiAgICByZXNpemUoKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGluaXQsXG4gICAgcmVzaXplLFxuICAgIHVuT2JzZXJ2ZSgpIHtcbiAgICAgIHVuT2JzZXJ2ZShvYnNlcnZlZEVsZW1lbnQsICdpbnB1dCcsIHJlc2l6ZSk7XG4gICAgICB1bk9ic2VydmUob2JzZXJ2ZWRFbGVtZW50LCAna2V5ZG93bicsIGRlbGF5ZWRSZXNpemUpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGtleSA9IF90b1Byb3BlcnR5S2V5KGtleSk7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICogUmVmYWN0b3JlZCBpbXBsZW1lbnRhdGlvbiBvZiBMaW5rZWRMaXN0IChwYXJ0IG9mIGphdmFzY3JpcHQtYWxnb3JpdGhtcyBwcm9qZWN0KSBieSBHaXRodWIgdXNlcnM6XG4gKiBtZ2VjaGV2LCBBbmRyaWlIZW9uaWEsIE1pY3JvZmVkIGFuZCBKYWtlaCAocGFydCBvZiBqYXZhc2NyaXB0LWFsZ29yaXRobXMgcHJvamVjdCAtIGFsbCBwcm9qZWN0IGNvbnRyaWJ1dG9yc1xuICogYXQgcmVwb3NpdG9yeSB3ZWJzaXRlKS5cbiAqXG4gKiBMaW5rIHRvIHJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZ2VjaGV2L2phdmFzY3JpcHQtYWxnb3JpdGhtcy5cbiAqL1xuXG4vKipcbiAqIExpbmtlZCBsaXN0IG5vZGUuXG4gKlxuICogQGNsYXNzIE5vZGVTdHJ1Y3R1cmVcbiAqIEB1dGlsXG4gKi9cbmNsYXNzIE5vZGVTdHJ1Y3R1cmUge1xuICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgLyoqXG4gICAgICogRGF0YSBvZiB0aGUgbm9kZS5cbiAgICAgKlxuICAgICAqIEBtZW1iZXIge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhXCIsIHZvaWQgMCk7XG4gICAgLyoqXG4gICAgICogTmV4dCBub2RlLlxuICAgICAqXG4gICAgICogQG1lbWJlciB7Tm9kZVN0cnVjdHVyZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJuZXh0XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIFByZXZpb3VzIG5vZGUuXG4gICAgICpcbiAgICAgKiBAbWVtYmVyIHtOb2RlU3RydWN0dXJlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInByZXZcIiwgbnVsbCk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIExpbmtlZCBsaXN0LlxuICpcbiAqIEBjbGFzcyBMaW5rZWRMaXN0XG4gKiBAdXRpbFxuICovXG5leHBvcnRzLk5vZGVTdHJ1Y3R1cmUgPSBOb2RlU3RydWN0dXJlO1xuY2xhc3MgTGlua2VkTGlzdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpcnN0XCIsIG51bGwpO1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImxhc3RcIiwgbnVsbCk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBkYXRhIHRvIHRoZSBlbmQgb2YgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIERhdGEgd2hpY2ggc2hvdWxkIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyB7Tm9kZVN0cnVjdHVyZX0gUmV0dXJucyB0aGUgbm9kZSB3aGljaCBoYXMgYmVlbiBhZGRlZC5cbiAgICovXG4gIHB1c2goZGF0YSkge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZVN0cnVjdHVyZShkYXRhKTtcbiAgICBpZiAodGhpcy5maXJzdCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5maXJzdCA9IG5vZGU7XG4gICAgICB0aGlzLmxhc3QgPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZW1wID0gdGhpcy5sYXN0O1xuICAgICAgdGhpcy5sYXN0ID0gbm9kZTtcbiAgICAgIG5vZGUucHJldiA9IHRlbXA7XG4gICAgICB0ZW1wLm5leHQgPSBub2RlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIGxpbmtlZCBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZGF0YSBEYXRhIHdoaWNoIHNob3VsZCBiZSBhZGRlZC5cbiAgICovXG4gIHVuc2hpZnQoZGF0YSkge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZVN0cnVjdHVyZShkYXRhKTtcbiAgICBpZiAodGhpcy5maXJzdCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5maXJzdCA9IG5vZGU7XG4gICAgICB0aGlzLmxhc3QgPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZW1wID0gdGhpcy5maXJzdDtcbiAgICAgIHRoaXMuZmlyc3QgPSBub2RlO1xuICAgICAgbm9kZS5uZXh0ID0gdGVtcDtcbiAgICAgIHRlbXAucHJldiA9IG5vZGU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluIG9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCBvbiBlYWNoIG5vZGUuXG4gICAqL1xuICBpbm9yZGVyKGNhbGxiYWNrKSB7XG4gICAgbGV0IHRlbXAgPSB0aGlzLmZpcnN0O1xuICAgIHdoaWxlICh0ZW1wKSB7XG4gICAgICBjb25zdCBpbnRlcnJ1cHQgPSBjYWxsYmFjayh0ZW1wKTtcbiAgICAgIGlmICh0ZW1wID09PSB0aGlzLmxhc3QgfHwgaW50ZXJydXB0ID09PSB0cnVlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdGVtcCA9IHRlbXAubmV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGRhdGEgZnJvbSB0aGUgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkYXRhIERhdGEgd2hpY2ggc2hvdWxkIGJlIHJlbW92ZWQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgZGF0YSBoYXMgYmVlbiByZW1vdmVkLlxuICAgKi9cbiAgcmVtb3ZlKGRhdGEpIHtcbiAgICBpZiAodGhpcy5maXJzdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgdGVtcCA9IHRoaXMuZmlyc3Q7XG4gICAgbGV0IG5leHQ7XG4gICAgbGV0IHByZXY7XG4gICAgd2hpbGUgKHRlbXApIHtcbiAgICAgIGlmICh0ZW1wLmRhdGEgPT09IGRhdGEpIHtcbiAgICAgICAgbmV4dCA9IHRlbXAubmV4dDtcbiAgICAgICAgcHJldiA9IHRlbXAucHJldjtcbiAgICAgICAgaWYgKG5leHQpIHtcbiAgICAgICAgICBuZXh0LnByZXYgPSBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcCA9PT0gdGhpcy5maXJzdCkge1xuICAgICAgICAgIHRoaXMuZmlyc3QgPSBuZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW1wID09PSB0aGlzLmxhc3QpIHtcbiAgICAgICAgICB0aGlzLmxhc3QgPSBwcmV2O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdGVtcCA9IHRlbXAubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGxpbmtlZCBsaXN0IGNvbnRhaW5zIGN5Y2xlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxpbmtlZCBsaXN0IGNvbnRhaW5zIGN5Y2xlLlxuICAgKi9cbiAgaGFzQ3ljbGUoKSB7XG4gICAgbGV0IGZhc3QgPSB0aGlzLmZpcnN0O1xuICAgIGxldCBzbG93ID0gdGhpcy5maXJzdDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGZhc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZmFzdCA9IGZhc3QubmV4dDtcbiAgICAgIGlmIChmYXN0ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZhc3QgPSBmYXN0Lm5leHQ7XG4gICAgICBzbG93ID0gc2xvdy5uZXh0O1xuICAgICAgaWYgKGZhc3QgPT09IHNsb3cpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBsYXN0IG5vZGUgZnJvbSB0aGUgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOb2RlU3RydWN0dXJlfSBMYXN0IG5vZGUuXG4gICAqL1xuICBwb3AoKSB7XG4gICAgaWYgKHRoaXMubGFzdCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHRlbXAgPSB0aGlzLmxhc3Q7XG4gICAgdGhpcy5sYXN0ID0gdGhpcy5sYXN0LnByZXY7XG4gICAgcmV0dXJuIHRlbXA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGZpcnN0IG5vZGUgZnJvbSB0aGUgbGlua2VkIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtOb2RlU3RydWN0dXJlfSBGaXJzdCBub2RlLlxuICAgKi9cbiAgc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMuZmlyc3QgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wID0gdGhpcy5maXJzdDtcbiAgICB0aGlzLmZpcnN0ID0gdGhpcy5maXJzdC5uZXh0O1xuICAgIHJldHVybiB0ZW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVyc2VzIHRoZSBsaW5rZWQgbGlzdCByZWN1cnNpdmVseS5cbiAgICovXG4gIHJlY3Vyc2l2ZVJldmVyc2UoKSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIHsqfSBjdXJyZW50IFRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gbmV4dCBUaGUgbmV4dCB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnZlcnNlKGN1cnJlbnQsIG5leHQpIHtcbiAgICAgIGlmICghbmV4dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnZlcnNlKG5leHQsIG5leHQubmV4dCk7XG4gICAgICBuZXh0Lm5leHQgPSBjdXJyZW50O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52ZXJzZSh0aGlzLmZpcnN0LCB0aGlzLmZpcnN0Lm5leHQpO1xuICAgIHRoaXMuZmlyc3QubmV4dCA9IG51bGw7XG4gICAgY29uc3QgdGVtcCA9IHRoaXMuZmlyc3Q7XG4gICAgdGhpcy5maXJzdCA9IHRoaXMubGFzdDtcbiAgICB0aGlzLmxhc3QgPSB0ZW1wO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldmVyc2VzIHRoZSBsaW5rZWQgbGlzdCBpdGVyYXRpdmVseS5cbiAgICovXG4gIHJldmVyc2UoKSB7XG4gICAgaWYgKCF0aGlzLmZpcnN0IHx8ICF0aGlzLmZpcnN0Lm5leHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLmZpcnN0Lm5leHQ7XG4gICAgbGV0IHByZXYgPSB0aGlzLmZpcnN0O1xuICAgIGxldCB0ZW1wO1xuICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICB0ZW1wID0gY3VycmVudC5uZXh0O1xuICAgICAgY3VycmVudC5uZXh0ID0gcHJldjtcbiAgICAgIHByZXYucHJldiA9IGN1cnJlbnQ7XG4gICAgICBwcmV2ID0gY3VycmVudDtcbiAgICAgIGN1cnJlbnQgPSB0ZW1wO1xuICAgIH1cbiAgICB0aGlzLmZpcnN0Lm5leHQgPSBudWxsO1xuICAgIHRoaXMubGFzdC5wcmV2ID0gbnVsbDtcbiAgICB0ZW1wID0gdGhpcy5maXJzdDtcbiAgICB0aGlzLmZpcnN0ID0gcHJldjtcbiAgICB0aGlzLmxhc3QgPSB0ZW1wO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBMaW5rZWRMaXN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVQcmlvcml0eU1hcCA9IGNyZWF0ZVByaW9yaXR5TWFwO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xuY29uc3QgQVNDID0gZXhwb3J0cy5BU0MgPSAnYXNjJztcbmNvbnN0IERFU0MgPSBleHBvcnRzLkRFU0MgPSAnZGVzYyc7XG5jb25zdCBPUkRFUl9NQVAgPSBuZXcgTWFwKFtbQVNDLCBbLTEsIDFdXSwgW0RFU0MsIFsxLCAtMV1dXSk7XG5jb25zdCBERUZBVUxUX0VSUk9SX1BSSU9SSVRZX0VYSVNUUyA9IHByaW9yaXR5ID0+IGBUaGUgcHJpb3JpdHkgJyR7cHJpb3JpdHl9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmA7XG5jb25zdCBERUZBVUxUX0VSUk9SX1BSSU9SSVRZX05BTiA9IHByaW9yaXR5ID0+IGBUaGUgcHJpb3JpdHkgJyR7cHJpb3JpdHl9JyBpcyBub3QgYSBudW1iZXIuYDtcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBQcmlvcml0eU1hcFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gYWRkSXRlbSBBZGRzIGl0ZW1zIHRvIHRoZSBwcmlvcml0eSBtYXAuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBnZXRJdGVtcyBHZXRzIGl0ZW1zIGZyb20gdGhlIHBhc3NlZCBtYXAgaW4gYSBBU0Mgb3IgREVTQyBvcmRlciBvZiBwcmlvcml0aWVzLlxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcHJpb3JpdHkgbWFwLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBmb3IgcHJpb3JpdHkgbWFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnLmVycm9yUHJpb3JpdHlFeGlzdHMgVGhlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UgaWYgcHJpb3JpdHkgaXMgYWxyZWFkeSB0YWtlbi5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZy5lcnJvclByaW9yaXR5TmFOIFRoZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIGlmIHByaW9yaXR5IGlzIG5vdCBhIG51bWJlci5cbiAqIEByZXR1cm5zIHtQcmlvcml0eU1hcH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUHJpb3JpdHlNYXAoKSB7XG4gIGxldCB7XG4gICAgZXJyb3JQcmlvcml0eUV4aXN0cyxcbiAgICBlcnJvclByaW9yaXR5TmFOXG4gIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICBjb25zdCBwcmlvcml0eU1hcCA9IG5ldyBNYXAoKTtcbiAgZXJyb3JQcmlvcml0eUV4aXN0cyA9ICgwLCBfZnVuY3Rpb24uaXNGdW5jdGlvbikoZXJyb3JQcmlvcml0eUV4aXN0cykgPyBlcnJvclByaW9yaXR5RXhpc3RzIDogREVGQVVMVF9FUlJPUl9QUklPUklUWV9FWElTVFM7XG4gIGVycm9yUHJpb3JpdHlOYU4gPSAoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKGVycm9yUHJpb3JpdHlOYU4pID8gZXJyb3JQcmlvcml0eU5hTiA6IERFRkFVTFRfRVJST1JfUFJJT1JJVFlfTkFOO1xuXG4gIC8qKlxuICAgKiBBZGRzIGl0ZW1zIHRvIHByaW9yaXR5IG1hcC4gVGhyb3dzIGFuIGVycm9yIGlmIGBwcmlvcml0eWAgaXMgbm90IGEgbnVtYmVyIG9yIGlmIGlzIGFscmVhZHkgYWRkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwcmlvcml0eSBUaGUgcHJpb3JpdHkgZm9yIGFkZGluZyBpdGVtLlxuICAgKiBAcGFyYW0geyp9IGl0ZW0gVGhlIGFkZGluZyBpdGVtLlxuICAgKi9cbiAgZnVuY3Rpb24gYWRkSXRlbShwcmlvcml0eSwgaXRlbSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNOdW1lcmljKShwcmlvcml0eSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvclByaW9yaXR5TmFOKHByaW9yaXR5KSk7XG4gICAgfVxuICAgIGlmIChwcmlvcml0eU1hcC5oYXMocHJpb3JpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JQcmlvcml0eUV4aXN0cyhwcmlvcml0eSkpO1xuICAgIH1cbiAgICBwcmlvcml0eU1hcC5zZXQocHJpb3JpdHksIGl0ZW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgaXRlbXMgZnJvbSB0aGUgcGFzc2VkIG1hcCBpbiBhIEFTQyBvciBERVNDIG9yZGVyIG9mIHByaW9yaXRpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3JkZXJdIFRoZSBvcmRlciBmb3IgZ2V0dGluZyBpdGVtcy4gQVNDIGlzIGFuIGRlZmF1bHQuXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlbXMoKSB7XG4gICAgbGV0IG9yZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBBU0M7XG4gICAgY29uc3QgW2xlZnQsIHJpZ2h0XSA9IE9SREVSX01BUC5nZXQob3JkZXIpIHx8IE9SREVSX01BUC5nZXQoQVNDKTtcbiAgICByZXR1cm4gWy4uLnByaW9yaXR5TWFwXVxuICAgIC8vIHdlIHdhbnQgdG8gYmUgc3VyZSB3ZSBzb3J0IG92ZXIgYSBwcmlvcml0eSBrZXlcbiAgICAvLyBpZiB3ZSBhcmUgc3VyZSB3ZSBjYW4gcmVtb3ZlIGN1c3RvbSBjb21wYXJlIGZ1bmN0aW9uXG4gICAgLy8gdGhlbiB3ZSBzaG91bGQgcmVwbGFjZSBuZXh0IGxpbmUgd2l0aCBhIGRlZmF1bHQgYC5zb3J0KClgXG4gICAgLnNvcnQoKGEsIGIpID0+IGFbMF0gPCBiWzBdID8gbGVmdCA6IHJpZ2h0KS5tYXAoaXRlbSA9PiBpdGVtWzFdKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFkZEl0ZW0sXG4gICAgZ2V0SXRlbXNcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVwdGhGaXJzdFByZU9yZGVyID0gZGVwdGhGaXJzdFByZU9yZGVyO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBEZXB0aC1maXJzdCBwcmUtb3JkZXIgc3RyYXRlZ3kgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RyZWVfdHJhdmVyc2FsI1ByZS1vcmRlcl8oTkxSKSkuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFJBVkVSU0FMX0RGX1BSRSA9IGV4cG9ydHMuVFJBVkVSU0FMX0RGX1BSRSA9ICdERi1wcmUtb3JkZXInO1xuLyoqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggdmlzaXRlZCBub2RlLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IEEgY29udGV4dCB0byBwYXNzIHRocm91Z2guXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZGVwdGhGaXJzdFByZU9yZGVyKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGxldCBjb250aW51ZVRyYXZlcnNlID0gY2FsbGJhY2suY2FsbChjb250ZXh0LCB0aGlzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb250aW51ZVRyYXZlcnNlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb250aW51ZVRyYXZlcnNlID0gZGVwdGhGaXJzdFByZU9yZGVyLmNhbGwodGhpcy5jaGlsZHNbaV0sIGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgfVxuICByZXR1cm4gY29udGludWVUcmF2ZXJzZTtcbn1cblxuLyoqXG4gKiBEZXB0aC1maXJzdCBwb3N0LW9yZGVyIHN0cmF0ZWd5IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmVlX3RyYXZlcnNhbCNQb3N0LW9yZGVyXyhOTFIpKS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUUkFWRVJTQUxfREZfUE9TVCA9IGV4cG9ydHMuVFJBVkVSU0FMX0RGX1BPU1QgPSAnREYtcG9zdC1vcmRlcic7XG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgb24gZWFjaCB2aXNpdGVkIG5vZGUuXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQSBjb250ZXh0IHRvIHBhc3MgdGhyb3VnaC5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBkZXB0aEZpcnN0UG9zdE9yZGVyKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb250aW51ZVRyYXZlcnNlID0gZGVwdGhGaXJzdFBvc3RPcmRlci5jYWxsKHRoaXMuY2hpbGRzW2ldLCBjYWxsYmFjaywgY29udGV4dCk7XG4gICAgaWYgKGNvbnRpbnVlVHJhdmVyc2UgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIHRoaXMpO1xufVxuXG4vKipcbiAqIEJyZWFkdGgtZmlyc3QgdHJhdmVyc2FsIHN0cmF0ZWd5IChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmVlX3RyYXZlcnNhbCNCcmVhZHRoLWZpcnN0X3NlYXJjaF8vX2xldmVsX29yZGVyKS5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUUkFWRVJTQUxfQkYgPSBleHBvcnRzLlRSQVZFUlNBTF9CRiA9ICdCRic7XG4vKipcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIEEgY2FsbGJhY2sgd2hpY2ggd2lsbCBiZSBjYWxsZWQgb24gZWFjaCB2aXNpdGVkIG5vZGUuXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgQSBjb250ZXh0IHRvIHBhc3MgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gYnJlYWR0aEZpcnN0KGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGNvbnN0IHF1ZXVlID0gW3RoaXNdO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBwcm9jZXNzb3IuXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzKCkge1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgcXVldWUucHVzaCguLi5ub2RlLmNoaWxkcyk7XG4gICAgaWYgKGNhbGxiYWNrLmNhbGwoY29udGV4dCwgbm9kZSkgIT09IGZhbHNlKSB7XG4gICAgICBwcm9jZXNzKCk7XG4gICAgfVxuICB9XG4gIHByb2Nlc3MoKTtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5IGZvciB0cmVlIHRyYXZlcnNhbC5cbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUZBVUxUX1RSQVZFUlNBTF9TVFJBVEVHWSA9IFRSQVZFUlNBTF9CRjtcbi8qKlxuICogQ29sbGVjdGlvbiBvZiBhbGwgYXZhaWxhYmxlIHRyZWUgdHJhdmVyc2FsIHN0cmF0ZWdpZXMuXG4gKlxuICogQHR5cGUge01hcDxzdHJpbmcsIEZ1bmN0aW9uPn1cbiAqL1xuY29uc3QgVFJBVkVSU0FMX1NUUkFURUdJRVMgPSBuZXcgTWFwKFtbVFJBVkVSU0FMX0RGX1BSRSwgZGVwdGhGaXJzdFByZU9yZGVyXSwgW1RSQVZFUlNBTF9ERl9QT1NULCBkZXB0aEZpcnN0UG9zdE9yZGVyXSwgW1RSQVZFUlNBTF9CRiwgYnJlYWR0aEZpcnN0XV0pO1xuXG4vKipcbiAqXG4gKi9cbmNsYXNzIFRyZWVOb2RlIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIC8qKlxuICAgICAqIEEgdHJlZSBkYXRhLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJkYXRhXCIsIHt9KTtcbiAgICAvKipcbiAgICAgKiBBIHBhcmVudCBub2RlLlxuICAgICAqXG4gICAgICogQHR5cGUge1RyZWVOb2RlfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudFwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBBIHRyZWUgbGVhdmVzLlxuICAgICAqXG4gICAgICogQHR5cGUge1RyZWVOb2RlW119XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY2hpbGRzXCIsIFtdKTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBub2RlIHRvIHRyZWUgbGVhdmVzLiBBZGRlZCBub2RlIGlzIGxpbmtlZCB3aXRoIHRoZSBwYXJlbnQgbm9kZSB0aHJvdWdoIFwicGFyZW50XCIgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJlZU5vZGV9IG5vZGUgQSBUcmVlTm9kZSB0byBhZGQuXG4gICAqL1xuICBhZGRDaGlsZChub2RlKSB7XG4gICAgbm9kZS5wYXJlbnQgPSB0aGlzO1xuICAgIHRoaXMuY2hpbGRzLnB1c2gobm9kZSk7XG4gIH1cblxuICAvKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWRlc2NyaXB0aW9uLWNvbXBsZXRlLXNlbnRlbmNlICovXG4gIC8qKlxuICAgKiBAbWVtYmVyb2YgVHJlZU5vZGUjXG4gICAqIEBmdW5jdGlvbiBjbG9uZVRyZWVcbiAgICpcbiAgICogQ2xvbmVzIGEgdHJlZSBzdHJ1Y3R1cmUgZGVlcGx5LlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgZm9yIGdpdmluZyBhIHRyZWUgc3RydWN0dXJlOlxuICAgKiAgICAgIC4tLShCMSktLS5cbiAgICogICAuLShDMSkgICAuLShDMiktLi0tLS0uXG4gICAqICAoRDEpICAgICAoRDIpICAgKEQzKSAoRDQpXG4gICAqXG4gICAqIENsb25pbmcgYSB0cmVlIHN0YXJ0aW5nIGZyb20gQzIgbm9kZSBjcmVhdGVzIGEgbWlycm9yZWQgdHJlZSBzdHJ1Y3R1cmUuXG4gICAqICAgICAuLShDMicpLS4tLS0tLS5cbiAgICogICAgKEQyJykgICAoRDMnKSAoRDQnKVxuICAgKlxuICAgKiBUaGUgY2xvbmVkIHRyZWUgY2FuIGJlIHNhZmVseSBtb2RpZmllZCB3aXRob3V0IGFmZmVjdGluZyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlLlxuICAgKiBBZnRlciBtb2RpZmljYXRpb24sIHRoZSBjbG9uZSBjYW4gYmUgbWVyZ2VkIHdpdGggYSB0cmVlIHVzaW5nIHRoZSBcInJlcGxhY2VUcmVlV2l0aFwiIG1ldGhvZC5cbiAgICpcbiAgICogQHBhcmFtIHtUcmVlTm9kZX0gW25vZGVUcmVlPXRoaXNdIEEgVHJlZU5vZGUgdG8gY2xvbmUuXG4gICAqIEByZXR1cm5zIHtUcmVlTm9kZX1cbiAgICovXG4gIC8qIGVzbGludC1lbmFibGUganNkb2MvcmVxdWlyZS1kZXNjcmlwdGlvbi1jb21wbGV0ZS1zZW50ZW5jZSAqL1xuICBjbG9uZVRyZWUoKSB7XG4gICAgbGV0IG5vZGVUcmVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB0aGlzO1xuICAgIGNvbnN0IGNsb25lZE5vZGUgPSBuZXcgVHJlZU5vZGUoe1xuICAgICAgLi4ubm9kZVRyZWUuZGF0YVxuICAgIH0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZVRyZWUuY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjbG9uZWROb2RlLmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKG5vZGVUcmVlLmNoaWxkc1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVkTm9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY3VycmVudCBub2RlIHdpdGggYSBwYXNzZWQgdHJlZSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7VHJlZU5vZGV9IG5vZGVUcmVlIEEgVHJlZU5vZGUgdG8gcmVwbGFjZSB3aXRoLlxuICAgKi9cbiAgcmVwbGFjZVRyZWVXaXRoKG5vZGVUcmVlKSB7XG4gICAgdGhpcy5kYXRhID0ge1xuICAgICAgLi4ubm9kZVRyZWUuZGF0YVxuICAgIH07XG4gICAgdGhpcy5jaGlsZHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVUcmVlLmNoaWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hZGRDaGlsZChub2RlVHJlZS5jaGlsZHNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGhlIHRyZWUgc3RydWN0dXJlIHRocm91Z2ggbm9kZSBjaGlsZHMuIFRoZSB3YWxrIGRvd24gdHJhdmVyc2luZyBzdXBwb3J0c1xuICAgKiBhIHRocmVlIGRpZmZlcmVudCBzdHJhdGVnaWVzLlxuICAgKiAgLSBEZXB0aC1maXJzdCBwcmUtb3JkZXIgc3RyYXRlZ3kgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RyZWVfdHJhdmVyc2FsI1ByZS1vcmRlcl8oTkxSKSk7XG4gICAqICAtIERlcHRoLWZpcnN0IHBvc3Qtb3JkZXIgc3RyYXRlZ3kgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RyZWVfdHJhdmVyc2FsI1Bvc3Qtb3JkZXJfKE5MUikpO1xuICAgKiAgLSBCcmVhZHRoLWZpcnN0IHRyYXZlcnNhbCBzdHJhdGVneSAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVHJlZV90cmF2ZXJzYWwjQnJlYWR0aC1maXJzdF9zZWFyY2hfL19sZXZlbF9vcmRlcikuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBub2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3RyYXZlcnNhbFN0cmF0ZWd5PURFRkFVTFRfVFJBVkVSU0FMX1NUUkFURUdZXSBUcmF2ZXJzaW5nIHN0cmF0ZWd5LlxuICAgKi9cbiAgd2Fsa0Rvd24oY2FsbGJhY2spIHtcbiAgICBsZXQgdHJhdmVyc2FsU3RyYXRlZ3kgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfVFJBVkVSU0FMX1NUUkFURUdZO1xuICAgIGlmICghVFJBVkVSU0FMX1NUUkFURUdJRVMuaGFzKHRyYXZlcnNhbFN0cmF0ZWd5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgXCIke3RyYXZlcnNhbFN0cmF0ZWd5fVwiIGRvZXMgbm90IGV4aXN0YCk7XG4gICAgfVxuICAgIFRSQVZFUlNBTF9TVFJBVEVHSUVTLmdldCh0cmF2ZXJzYWxTdHJhdGVneSkuY2FsbCh0aGlzLCBjYWxsYmFjaywgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIHRoZSB0cmVlIHN0cnVjdHVyZSB0aHJvdWdoIG5vZGUgcGFyZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIG5vZGUuXG4gICAqL1xuICB3YWxrVXAoY2FsbGJhY2spIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcztcbiAgICBjb25zdCBwcm9jZXNzID0gbm9kZSA9PiB7XG4gICAgICBjb25zdCBjb250aW51ZVRyYXZlcnNlID0gY2FsbGJhY2suY2FsbChjb250ZXh0LCBub2RlKTtcbiAgICAgIGlmIChjb250aW51ZVRyYXZlcnNlICE9PSBmYWxzZSAmJiBub2RlLnBhcmVudCAhPT0gbnVsbCkge1xuICAgICAgICBwcm9jZXNzKG5vZGUucGFyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3ModGhpcyk7XG4gIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IFRyZWVOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVVbmlxdWVNYXAgPSBjcmVhdGVVbmlxdWVNYXA7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzXCIpO1xudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9oZWxwZXJzL2Z1bmN0aW9uXCIpO1xuY29uc3QgREVGQVVMVF9FUlJPUl9JRF9FWElTVFMgPSBpZCA9PiBgVGhlIGlkICcke2lkfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFVuaXF1ZU1hcFxuICogQHByb3BlcnR5IHtGdW5jdGlvbn0gYWRkSXRlbSBBZGRzIGEgbmV3IGl0ZW0gdG8gdGhlIHVuaXF1ZSBtYXAuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBjbGVhciBDbGVhcnMgdGhlIG1hcC5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldElkIFJldHVybnMgSUQgZm9yIHRoZSBwYXNzZWQgaXRlbS5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldEl0ZW0gR2V0cyBpdGVtIGZyb20gdGhlIHBhc3NlZCBJRC5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldEl0ZW1zIEdldHMgYWxsIGl0ZW1zIGZyb20gdGhlIG1hcC5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGhhc0l0ZW0gVmVyaWZpZXMgaWYgdGhlIHBhc3NlZCBJRCBleGlzdHMgaW4gYSBtYXAuXG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSByZW1vdmVJdGVtIFJlbW92ZXMgaXRlbSBmcm9tIHRoZSBwYXNzZWQgaWQgaWYgZXhpc3RzLlxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIG1hcC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgZm9yIHByaW9yaXR5IHF1ZXVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZmlnLmVycm9ySWRFeGlzdHMgVGhlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGN1c3RvbSBtZXNzYWdlIGlmIElEIGlzIGFscmVhZHkgdGFrZW4uXG4gKiBAcmV0dXJucyB7VW5pcXVlTWFwfVxuICovXG5mdW5jdGlvbiBjcmVhdGVVbmlxdWVNYXAoKSB7XG4gIGxldCB7XG4gICAgZXJyb3JJZEV4aXN0c1xuICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgY29uc3QgdW5pcXVlTWFwID0gbmV3IE1hcCgpO1xuICBlcnJvcklkRXhpc3RzID0gKDAsIF9mdW5jdGlvbi5pc0Z1bmN0aW9uKShlcnJvcklkRXhpc3RzKSA/IGVycm9ySWRFeGlzdHMgOiBERUZBVUxUX0VSUk9SX0lEX0VYSVNUUztcblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBpdGVtIHRvIHRoZSB1bmlxdWUgbWFwLiBUaHJvd3MgZXJyb3IgaWYgYGlkYCBpcyBhbHJlYWR5IGFkZGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGlkIFRoZSBJRCBvZiB0aGUgYWRkaW5nIGl0ZW0uXG4gICAqIEBwYXJhbSB7Kn0gaXRlbSBUaGUgYWRkaW5nIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBhZGRJdGVtKGlkLCBpdGVtKSB7XG4gICAgaWYgKGhhc0l0ZW0oaWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JJZEV4aXN0cyhpZCkpO1xuICAgIH1cbiAgICB1bmlxdWVNYXAuc2V0KGlkLCBpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGl0ZW0gZnJvbSB0aGUgcGFzc2VkIGlkIGlmIGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBpZCBUaGUgSUQgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUl0ZW0oaWQpIHtcbiAgICByZXR1cm4gdW5pcXVlTWFwLmRlbGV0ZShpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBtYXAuXG4gICAqL1xuICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICB1bmlxdWVNYXAuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIElEIGZvciB0aGUgcGFzc2VkIGl0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaXRlbSBUaGUgaXRlbSBvZiB0aGUgZ2V0dGluZyBJRC5cbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJZChpdGVtKSB7XG4gICAgY29uc3QgW2l0ZW1JZF0gPSBnZXRJdGVtcygpLmZpbmQoX3JlZiA9PiB7XG4gICAgICBsZXQgW2lkLCBlbGVtZW50XSA9IF9yZWY7XG4gICAgICBpZiAoaXRlbSA9PT0gZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gaWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSkgfHwgW251bGxdO1xuICAgIHJldHVybiBpdGVtSWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpdGVtIGZyb20gdGhlIHBhc3NlZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSBpZCBUaGUgSUQgb2YgdGhlIGdldHRpbmcgaXRlbS5cbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVtKGlkKSB7XG4gICAgcmV0dXJuIHVuaXF1ZU1hcC5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIGl0ZW1zIGZyb20gdGhlIG1hcC5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIFsuLi51bmlxdWVNYXBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBwYXNzZWQgSUQgZXhpc3RzIGluIGEgbWFwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGlkIFRoZSBJRCB0byBjaGVjayBpZiByZWdpc3RlcmVkLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGhhc0l0ZW0oaWQpIHtcbiAgICByZXR1cm4gdW5pcXVlTWFwLmhhcyhpZCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhZGRJdGVtLFxuICAgIGNsZWFyLFxuICAgIGdldElkLFxuICAgIGdldEl0ZW0sXG4gICAgZ2V0SXRlbXMsXG4gICAgaGFzSXRlbSxcbiAgICByZW1vdmVJdGVtXG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZVVuaXF1ZVNldCA9IGNyZWF0ZVVuaXF1ZVNldDtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZnVuY3Rpb25cIik7XG5jb25zdCBERUZBVUxUX0VSUk9SX0lURU1fRVhJU1RTID0gaXRlbSA9PiBgJyR7aXRlbX0nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSB1bmlxdWUgc2V0LmA7XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gVW5pcXVlU2V0XG4gKiBAcHJvcGVydHkge0Z1bmN0aW9ufSBhZGRJdGVtIEFkZHMgaXRlbXMgdG8gdGhlIHByaW9yaXR5IHNldC5cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGdldEl0ZW1zIEdldHMgaXRlbXMgZnJvbSB0aGUgc2V0IGluIG9yZGVyIG9mIGFkZGl0aW9uLlxuICovXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgdW5pcXVlIHNldC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgZm9yIHByaW9yaXR5IHNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbmZpZy5lcnJvckl0ZW1FeGlzdHMgVGhlIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGN1c3RvbSBlcnJvciBtZXNzYWdlIGlmIGl0ZW0gaXMgYWxyZWFkeSBpbiB0aGUgc2V0LlxuICogQHJldHVybnMge1VuaXF1ZVNldH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlVW5pcXVlU2V0KCkge1xuICBsZXQge1xuICAgIGVycm9ySXRlbUV4aXN0c1xuICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgY29uc3QgdW5pcXVlU2V0ID0gbmV3IFNldCgpO1xuICBlcnJvckl0ZW1FeGlzdHMgPSAoMCwgX2Z1bmN0aW9uLmlzRnVuY3Rpb24pKGVycm9ySXRlbUV4aXN0cykgPyBlcnJvckl0ZW1FeGlzdHMgOiBERUZBVUxUX0VSUk9SX0lURU1fRVhJU1RTO1xuXG4gIC8qKlxuICAgKiBBZGRzIGl0ZW1zIHRvIHRoZSB1bmlxdWUgc2V0LiBUaHJvd3MgYW4gZXJyb3IgaWYgYGl0ZW1gIGlzIGFscmVhZHkgYWRkZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gaXRlbSBUaGUgYWRkaW5nIGl0ZW0uXG4gICAqL1xuICBmdW5jdGlvbiBhZGRJdGVtKGl0ZW0pIHtcbiAgICBpZiAodW5pcXVlU2V0LmhhcyhpdGVtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ySXRlbUV4aXN0cyhpdGVtKSk7XG4gICAgfVxuICAgIHVuaXF1ZVNldC5hZGQoaXRlbSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBpdGVtcyBmcm9tIHRoZSBzZXQgaW4gb3JkZXIgb2YgYWRkaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlbXMoKSB7XG4gICAgcmV0dXJuIFsuLi51bmlxdWVTZXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgdW5pcXVlIHNldC5cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHVuaXF1ZVNldC5jbGVhcigpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWRkSXRlbSxcbiAgICBjbGVhcixcbiAgICBnZXRJdGVtc1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qc1wiKTtcbnZhciBfZWxlbWVudCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvZG9tL2VsZW1lbnRcIik7XG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4vLi4vaGVscGVycy9hcnJheVwiKTtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0KSB7IHZhciBpID0gX3RvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpOyByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgaSA/IGkgOiBpICsgXCJcIjsgfVxuZnVuY3Rpb24gX3RvUHJpbWl0aXZlKHQsIHIpIHsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIHQgfHwgIXQpIHJldHVybiB0OyB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTsgaWYgKHZvaWQgMCAhPT0gZSkgeyB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTsgaWYgKFwib2JqZWN0XCIgIT0gdHlwZW9mIGkpIHJldHVybiBpOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTsgfVxuLyoqXG4gKiBAY2xhc3MgR2hvc3RUYWJsZVxuICovXG5jbGFzcyBHaG9zdFRhYmxlIHtcbiAgY29uc3RydWN0b3IoaG90SW5zdGFuY2UpIHtcbiAgICAvKipcbiAgICAgKiBIYW5kc29udGFibGUgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Q29yZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJob3RcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ29udGFpbmVyIGVsZW1lbnQgd2hlcmUgZXZlcnkgdGFibGUgd2lsbCBiZSBpbmplY3RlZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtIVE1MRWxlbWVudHxudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbnRhaW5lclwiLCBudWxsKTtcbiAgICAvKipcbiAgICAgKiBGbGFnIHdoaWNoIGRldGVybWluZSBpcyB0YWJsZSB3YXMgaW5qZWN0ZWQgdG8gRE9NLlxuICAgICAqXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiaW5qZWN0ZWRcIiwgZmFsc2UpO1xuICAgIC8qKlxuICAgICAqIEFkZGVkIHJvd3MgY29sbGVjdGlvbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtBcnJheX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJyb3dzXCIsIFtdKTtcbiAgICAvKipcbiAgICAgKiBBZGRlZCBjb2x1bW5zIGNvbGxlY3Rpb24uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7QXJyYXl9XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiY29sdW1uc1wiLCBbXSk7XG4gICAgLyoqXG4gICAgICogU2FtcGxlcyBwcmVwYXJlZCBmb3IgY2FsY3VsYXRpb25zLlxuICAgICAqXG4gICAgICogQHR5cGUge01hcH1cbiAgICAgKiBAZGVmYXVsdCB7bnVsbH1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJzYW1wbGVzXCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIEdob3N0IHRhYmxlIHNldHRpbmdzLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAZGVmYXVsdCB7T2JqZWN0fVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNldHRpbmdzXCIsIHtcbiAgICAgIHVzZUhlYWRlcnM6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmhvdCA9IGhvdEluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByb3cuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHBhcmFtIHtNYXB9IHNhbXBsZXMgU2FtcGxlcyBNYXAgb2JqZWN0LlxuICAgKi9cbiAgYWRkUm93KHJvdywgc2FtcGxlcykge1xuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvZXNuXFwndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5yb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpO1xuICAgIH1cbiAgICBjb25zdCByb3dPYmplY3QgPSB7XG4gICAgICByb3dcbiAgICB9O1xuICAgIHRoaXMucm93cy5wdXNoKHJvd09iamVjdCk7XG4gICAgdGhpcy5zYW1wbGVzID0gc2FtcGxlcztcbiAgICB0aGlzLnRhYmxlID0gdGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpO1xuICAgIHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2wocm93KSk7XG4gICAgdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhyb3cpKTtcbiAgICB0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCk7XG4gICAgcm93T2JqZWN0LnRhYmxlID0gdGhpcy50YWJsZS50YWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByb3cgY29uc2lzdGluZyBvZiB0aGUgY29sdW1uIGhlYWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWFwfSBzYW1wbGVzIEEgbWFwIHdpdGggc2FtcGxlZCB0YWJsZSB2YWx1ZXMuXG4gICAqL1xuICBhZGRDb2x1bW5IZWFkZXJzUm93KHNhbXBsZXMpIHtcbiAgICBjb25zdCBjb2xIZWFkZXIgPSB0aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCk7XG4gICAgaWYgKGNvbEhlYWRlciAhPT0gbnVsbCAmJiBjb2xIZWFkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3Qgcm93T2JqZWN0ID0ge1xuICAgICAgICByb3c6IC0xXG4gICAgICB9O1xuICAgICAgdGhpcy5yb3dzLnB1c2gocm93T2JqZWN0KTtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuc2FtcGxlcyA9IHNhbXBsZXM7XG4gICAgICB0aGlzLnRhYmxlID0gdGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpO1xuICAgICAgdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKTtcbiAgICAgIHRoaXMuYXBwZW5kQ29sdW1uSGVhZGVyc1JvdygpO1xuICAgICAgdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpO1xuICAgICAgcm93T2JqZWN0LnRhYmxlID0gdGhpcy50YWJsZS50YWJsZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcGFyYW0ge01hcH0gc2FtcGxlcyBBIG1hcCB3aXRoIHNhbXBsZWQgdGFibGUgdmFsdWVzLlxuICAgKi9cbiAgYWRkQ29sdW1uKGNvbHVtbiwgc2FtcGxlcykge1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvZXNuXFwndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xuICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5PYmplY3QgPSB7XG4gICAgICBjb2w6IGNvbHVtblxuICAgIH07XG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uT2JqZWN0KTtcbiAgICB0aGlzLnNhbXBsZXMgPSBzYW1wbGVzO1xuICAgIHRoaXMudGFibGUgPSB0aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSk7XG4gICAgaWYgKHRoaXMuZ2V0U2V0dGluZygndXNlSGVhZGVycycpICYmIHRoaXMuaG90LmdldENvbEhlYWRlcihjb2x1bW4pICE9PSBudWxsKSB7XG4gICAgICAvLyBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIHJlbmRlcmFibGUgY29sdW1uIGluZGV4IGVxdWFsIHRvIHRoZSB2aXN1YWwgY29sdW1ucyBpbmRleCBmb3IgdGhlIEdob3N0VGFibGUuXG4gICAgICAvLyBXZSByZW5kZXIgYWxsIGNvbHVtbnMuXG4gICAgICB0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihjb2x1bW4sIHRoaXMudGFibGUudGgpO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGNvbHVtbikpO1xuICAgIHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KTtcbiAgICBjb2x1bW5PYmplY3QudGFibGUgPSB0aGlzLnRhYmxlLnRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWxjdWxhdGVkIGhlaWdodHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHdoaWNoIHdpbGwgYmUgZmlyZWQgZm9yIGVhY2ggY2FsY3VsYXRlZCByb3cuXG4gICAqL1xuICBnZXRIZWlnaHRzKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLmluamVjdGVkKSB7XG4gICAgICB0aGlzLmluamVjdFRhYmxlKCk7XG4gICAgfVxuICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKSh0aGlzLnJvd3MsIHJvdyA9PiB7XG4gICAgICAvLyAtMSA8LSByZWR1Y2UgYm9yZGVyLXRvcCBmcm9tIHRhYmxlXG4gICAgICBjYWxsYmFjayhyb3cucm93LCAoMCwgX2VsZW1lbnQub3V0ZXJIZWlnaHQpKHJvdy50YWJsZSkgLSAxKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2FsY3VsYXRlZCB3aWR0aHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIHdoaWNoIHdpbGwgYmUgZmlyZWQgZm9yIGVhY2ggY2FsY3VsYXRlZCBjb2x1bW4uXG4gICAqL1xuICBnZXRXaWR0aHMoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuaW5qZWN0ZWQpIHtcbiAgICAgIHRoaXMuaW5qZWN0VGFibGUoKTtcbiAgICB9XG4gICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHRoaXMuY29sdW1ucywgY29sdW1uID0+IHtcbiAgICAgIC8vIFRoZSBHaG9zdFRhYmxlIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxjdWxhdGluZyB0aGUgY29sdW1ucycgd2lkdGggYmFzZWQgb24gdGhlXG4gICAgICAvLyBjb250ZW50cyByZW5kZXJlZCBpbiB0aGUgY2VsbHMuIEluIHNvbWUgY2FzZXMsIHdoZW4gdGhlIGNvbHVtbidzIHdpZHRoIGNhbGN1bGF0ZWQgYnlcbiAgICAgIC8vIHRoZSBicm93c2VyIGlzIGEgZGVjaW1hbCBwb2ludCB3aXRoIGEgZnJhY3Rpb25hbCBjb21wb25lbnQuIEZvciBleGFtcGxlLCAzNS4zMnB4LlxuICAgICAgLy8gVGhlIHVzYWdlIG9mIHRoZSBgLm9mZnNldFdpZHRoYCAob3Igb3VyIGhlbHBlciBgb3V0ZXJXaWR0aGApIGlzIGluY29ycmVjdC5cbiAgICAgIC8vIFRoZSBgb3V0ZXJXaWR0aGAgaW4gdGhlIG1lbnRpb25lZCBleGFtcGxlICgzNS4zMnB4KSB3b3VsZCByZXR1cm4gMzUgcGl4ZWxzIHRoYXRcbiAgICAgIC8vIHdvdWxkIGNhdXNlIHRoZSB0ZXh0IHRvIG5vdCBmaXQgaW4gdGhlIGNlbGwsIHRodXMgaW5jcmVhc2luZyB0aGUgcm93IGhlaWdodC5cbiAgICAgIC8vIFRoYXQncyB3aHkgdGhlIGBnZXRCb3VuZGluZ0NsaWVudFJlY3RgIG1ldGhvZCBpcyB1c2VkLiBUaGUgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlclxuICAgICAgLy8gdGhhdCBpcyByb3VuZGVkIHVwIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIHdpbGwgYmUgYSBzcGFjZSBmb3IgdGhlIGNlbGwncyBjb250ZW50LlxuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aFxuICAgICAgfSA9IGNvbHVtbi50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNhbGxiYWNrKGNvbHVtbi5jb2wsIE1hdGguY2VpbCh3aWR0aCkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgR2hvc3QgVGFibGUgc2V0dGluZ3MgdG8gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHNldHRpbmdzIE5ldyBHaG9zdCBUYWJsZSBTZXR0aW5ncy5cbiAgICovXG4gIHNldFNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhIHNpbmdsZSBzZXR0aW5nIG9mIHRoZSBHaG9zdCBUYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgU2V0dGluZyBuYW1lLlxuICAgKiBAcGFyYW0geyp9IHZhbHVlIFNldHRpbmcgdmFsdWUuXG4gICAqL1xuICBzZXRTZXR0aW5nKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKCF0aGlzLnNldHRpbmdzKSB7XG4gICAgICB0aGlzLnNldHRpbmdzID0ge307XG4gICAgfVxuICAgIHRoaXMuc2V0dGluZ3NbbmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEdob3N0IFRhYmxlIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fG51bGx9XG4gICAqL1xuICBnZXRTZXR0aW5ncygpIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgR2hvc3QgVGFibGUgc2V0dGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIHNldHRpbmcgbmFtZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIHtib29sZWFufG51bGx9XG4gICAqL1xuICBnZXRTZXR0aW5nKG5hbWUpIHtcbiAgICBpZiAodGhpcy5zZXR0aW5ncykge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3NbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBjb2xncm91cCBjb2wgZWxlbWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgVmlzdWFsIHJvdyBpbmRleC5cbiAgICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9XG4gICAqL1xuICBjcmVhdGVDb2xHcm91cHNDb2wocm93KSB7XG4gICAgY29uc3QgZnJhZ21lbnQgPSB0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGlmICh0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSwgLTEpKTtcbiAgICB9XG4gICAgdGhpcy5zYW1wbGVzLmZvckVhY2goc2FtcGxlID0+IHtcbiAgICAgICgwLCBfYXJyYXkuYXJyYXlFYWNoKShzYW1wbGUuc3RyaW5ncywgc3RyaW5nID0+IHtcbiAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xFbGVtZW50KHN0cmluZy5jb2wsIHJvdykpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZyYWdtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0YWJsZSByb3cgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudH0gUmV0dXJucyBjcmVhdGVkIHRhYmxlIHJvdyBlbGVtZW50cy5cbiAgICovXG4gIGNyZWF0ZVJvdyhyb3cpIHtcbiAgICBjb25zdCB7XG4gICAgICByb290RG9jdW1lbnRcbiAgICB9ID0gdGhpcy5ob3Q7XG4gICAgY29uc3QgZnJhZ21lbnQgPSByb290RG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIGNvbnN0IHRoID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG4gICAgaWYgKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSkge1xuICAgICAgdGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIocm93LCB0aCk7XG4gICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0aCk7XG4gICAgfVxuICAgIHRoaXMuc2FtcGxlcy5mb3JFYWNoKHNhbXBsZSA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2FtcGxlLnN0cmluZ3MsIHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHN0cmluZy5jb2w7XG4gICAgICAgIGNvbnN0IGNlbGxQcm9wZXJ0aWVzID0gdGhpcy5ob3QuZ2V0Q2VsbE1ldGEocm93LCBjb2x1bW4pO1xuICAgICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuaG90LmdldENlbGxSZW5kZXJlcihjZWxsUHJvcGVydGllcyk7XG4gICAgICAgIGNvbnN0IHRkID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cbiAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGlzIGVsZW1lbnQgaXMgY3JlYXRlZCBhbmQgc3VwcG9ydGVkIGJ5IEdob3N0VGFibGUuIEl0IGNhbiBiZSB1c2VmdWwgdG9cbiAgICAgICAgLy8gZXhjbHVkZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgY29zdGx5IGxvZ2ljIG9yIGV4Y2x1ZGUgbG9naWMgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhpbiBhIGhpZGRlbiB0YWJsZS5cbiAgICAgICAgdGQuc2V0QXR0cmlidXRlKCdnaG9zdC10YWJsZScsIDEpO1xuICAgICAgICByZW5kZXJlcih0aGlzLmhvdCwgdGQsIHJvdywgY29sdW1uLCB0aGlzLmhvdC5jb2xUb1Byb3AoY29sdW1uKSwgc3RyaW5nLnZhbHVlLCBjZWxsUHJvcGVydGllcyk7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIERPTSBlbGVtZW50cyBmb3IgaGVhZGVycyBhbmQgYXBwZW5kcyB0aGVtIHRvIHRoZSBUSEVBRCBlbGVtZW50IG9mIHRoZSB0YWJsZS5cbiAgICovXG4gIGFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGRvbUZyYWdtZW50ID0gcm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gW107XG4gICAgaWYgKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSkge1xuICAgICAgY29uc3QgdGggPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcbiAgICAgIGNvbHVtbkhlYWRlcnMucHVzaChbLTEsIHRoXSk7XG4gICAgICBkb21GcmFnbWVudC5hcHBlbmRDaGlsZCh0aCk7XG4gICAgfVxuICAgIHRoaXMuc2FtcGxlcy5mb3JFYWNoKHNhbXBsZSA9PiB7XG4gICAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoc2FtcGxlLnN0cmluZ3MsIHN0cmluZyA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHN0cmluZy5jb2w7XG4gICAgICAgIGNvbnN0IHRoID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XG4gICAgICAgIGNvbHVtbkhlYWRlcnMucHVzaChbY29sdW1uLCB0aF0pO1xuICAgICAgICBkb21GcmFnbWVudC5hcHBlbmRDaGlsZCh0aCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEFwcGVuZGluZyBET00gZWxlbWVudHMgZm9yIGhlYWRlcnNcbiAgICB0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENoaWxkKGRvbUZyYWdtZW50KTtcbiAgICAoMCwgX2FycmF5LmFycmF5RWFjaCkoY29sdW1uSGVhZGVycywgY29sdW1uSGVhZGVyID0+IHtcbiAgICAgIGNvbnN0IFtjb2x1bW4sIHRoXSA9IGNvbHVtbkhlYWRlcjtcblxuICAgICAgLy8gVXNpbmcgc291cmNlIG1ldGhvZCBmb3IgZmlsbGluZyBhIGhlYWRlciB3aXRoIHZhbHVlLlxuICAgICAgdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoY29sdW1uLCB0aCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRhYmxlIGNvbHVtbiBlbGVtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiBWaXN1YWwgY29sdW1uIGluZGV4LlxuICAgKiBAcmV0dXJucyB7RG9jdW1lbnRGcmFnbWVudH0gUmV0dXJucyBjcmVhdGVkIGNvbHVtbiB0YWJsZSBjb2x1bW4gZWxlbWVudHMuXG4gICAqL1xuICBjcmVhdGVDb2woY29sdW1uKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGZyYWdtZW50ID0gcm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICB0aGlzLnNhbXBsZXMuZm9yRWFjaChzYW1wbGUgPT4ge1xuICAgICAgKDAsIF9hcnJheS5hcnJheUVhY2gpKHNhbXBsZS5zdHJpbmdzLCBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSBzdHJpbmcucm93O1xuICAgICAgICBjb25zdCBjZWxsUHJvcGVydGllcyA9IHRoaXMuaG90LmdldENlbGxNZXRhKHJvdywgY29sdW1uKTtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoY2VsbFByb3BlcnRpZXMpO1xuICAgICAgICBjb25zdCB0ZCA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuICAgICAgICBjb25zdCB0ciA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuXG4gICAgICAgIC8vIEluZGljYXRlIHRoYXQgdGhpcyBlbGVtZW50IGlzIGNyZWF0ZWQgYW5kIHN1cHBvcnRlZCBieSBHaG9zdFRhYmxlLiBJdCBjYW4gYmUgdXNlZnVsIHRvXG4gICAgICAgIC8vIGV4Y2x1ZGUgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGNvc3RseSBsb2dpYyBvciBleGNsdWRlIGxvZ2ljIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRoaW4gYSBoaWRkZW4gdGFibGUuXG4gICAgICAgIHRkLnNldEF0dHJpYnV0ZSgnZ2hvc3QtdGFibGUnLCAxKTtcbiAgICAgICAgcmVuZGVyZXIodGhpcy5ob3QsIHRkLCByb3csIGNvbHVtbiwgdGhpcy5ob3QuY29sVG9Qcm9wKGNvbHVtbiksIHN0cmluZy52YWx1ZSwgY2VsbFByb3BlcnRpZXMpO1xuICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7XG4gICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmcmFnbWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGFibGUgZnJvbSBkb2N1bWVudCBhbmQgcmVzZXQgaW50ZXJuYWwgc3RhdGUuXG4gICAqL1xuICBjbGVhbigpIHtcbiAgICB0aGlzLnJvd3MubGVuZ3RoID0gMDtcbiAgICB0aGlzLnJvd3NbLTFdID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29sdW1ucy5sZW5ndGggPSAwO1xuICAgIGlmICh0aGlzLnNhbXBsZXMpIHtcbiAgICAgIHRoaXMuc2FtcGxlcy5jbGVhcigpO1xuICAgIH1cbiAgICB0aGlzLnNhbXBsZXMgPSBudWxsO1xuICAgIHRoaXMucmVtb3ZlVGFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmplY3QgZ2VuZXJhdGVkIHRhYmxlIGludG8gZG9jdW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtwYXJlbnQ9bnVsbF0gVGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGdob3N0IHRhYmxlIGlzIGluamVjdGVkLlxuICAgKi9cbiAgaW5qZWN0VGFibGUoKSB7XG4gICAgbGV0IHBhcmVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICBpZiAoIXRoaXMuaW5qZWN0ZWQpIHtcbiAgICAgIChwYXJlbnQgfHwgdGhpcy5ob3Qucm9vdEVsZW1lbnQpLmFwcGVuZENoaWxkKHRoaXMuY29udGFpbmVyLmZyYWdtZW50KTtcbiAgICAgIHRoaXMuaW5qZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGFibGUgZnJvbSBkb2N1bWVudC5cbiAgICovXG4gIHJlbW92ZVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmluamVjdGVkICYmIHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpO1xuICAgICAgdGhpcy5jb250YWluZXIgPSBudWxsO1xuICAgICAgdGhpcy5pbmplY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgY29sIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gVmlzdWFsIGNvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyBWaXN1YWwgcm93IGluZGV4LlxuICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9XG4gICAqL1xuICBjcmVhdGVDb2xFbGVtZW50KGNvbHVtbiwgcm93KSB7XG4gICAgY29uc3QgY29sID0gdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO1xuICAgIGxldCBjb2xzcGFuID0gMDtcbiAgICBpZiAocm93ID49IDAgJiYgY29sdW1uID49IDApIHtcbiAgICAgIGNvbHNwYW4gPSB0aGlzLmhvdC5nZXRDZWxsTWV0YShyb3csIGNvbHVtbikuY29sc3BhbjtcbiAgICB9XG4gICAgbGV0IHdpZHRoID0gdGhpcy5ob3QuZ2V0Q29sV2lkdGgoY29sdW1uKTtcbiAgICBpZiAoY29sc3BhbiA+IDEpIHtcbiAgICAgIGZvciAobGV0IG5leHRDb2x1bW4gPSBjb2x1bW4gKyAxOyBuZXh0Q29sdW1uIDwgY29sdW1uICsgY29sc3BhbjsgbmV4dENvbHVtbisrKSB7XG4gICAgICAgIHdpZHRoICs9IHRoaXMuaG90LmdldENvbFdpZHRoKG5leHRDb2x1bW4pO1xuICAgICAgfVxuICAgIH1cbiAgICBjb2wuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgcmV0dXJuIGNvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGFibGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBUaGUgQ1NTIGNsYXNzZXMgdG8gYWRkLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgY3JlYXRlVGFibGUoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGZyYWdtZW50ID0gcm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBjb25zdCB0YWJsZSA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuICAgIGNvbnN0IHRIZWFkID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoZWFkJyk7XG4gICAgY29uc3QgdEJvZHkgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcbiAgICBjb25zdCBjb2xHcm91cCA9IHJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjb2xncm91cCcpO1xuICAgIGNvbnN0IHRyID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7XG4gICAgY29uc3QgdGggPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGgnKTtcbiAgICBpZiAodGhpcy5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIHRhYmxlLmFwcGVuZENoaWxkKGNvbEdyb3VwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHRyLmFwcGVuZENoaWxkKHRoKTtcbiAgICAgIHRIZWFkLmFwcGVuZENoaWxkKHRyKTtcbiAgICAgIHRhYmxlLnN0eWxlLnRhYmxlTGF5b3V0ID0gJ2F1dG8nO1xuICAgICAgdGFibGUuc3R5bGUud2lkdGggPSAnYXV0byc7XG4gICAgfVxuICAgIHRhYmxlLmFwcGVuZENoaWxkKHRIZWFkKTtcbiAgICBpZiAodGhpcy5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIHRCb2R5LmFwcGVuZENoaWxkKHRyKTtcbiAgICB9XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQodEJvZHkpO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykodGFibGUsIGNsYXNzTmFtZSk7XG4gICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQodGFibGUpO1xuICAgIHJldHVybiB7XG4gICAgICBmcmFnbWVudCxcbiAgICAgIHRhYmxlLFxuICAgICAgdEhlYWQsXG4gICAgICB0Qm9keSxcbiAgICAgIGNvbEdyb3VwLFxuICAgICAgdHIsXG4gICAgICB0aFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNvbnRhaW5lciBmb3IgdGFibGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lIFRoZSBDU1MgY2xhc3NlcyB0byBhZGQuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBjcmVhdGVDb250YWluZXIoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XG4gICAgY29uc3Qge1xuICAgICAgcm9vdERvY3VtZW50XG4gICAgfSA9IHRoaXMuaG90O1xuICAgIGNvbnN0IGZyYWdtZW50ID0gcm9vdERvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICBjb25zdCBjb250YWluZXIgPSByb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgY29uc3QgY29udGFpbmVyQ2xhc3NOYW1lID0gYGh0R2hvc3RUYWJsZSBodEF1dG9TaXplICR7Y2xhc3NOYW1lLnRyaW0oKX1gO1xuICAgICgwLCBfZWxlbWVudC5hZGRDbGFzcykoY29udGFpbmVyLCBjb250YWluZXJDbGFzc05hbWUpO1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyYWdtZW50LFxuICAgICAgY29udGFpbmVyXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGFibGUgaXMgcmFpc2VkIHZlcnRpY2FsbHkgKGNoZWNraW5nIHJvd3MpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMucm93cy5sZW5ndGggJiYgIXRoaXMuY29sdW1ucy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0YWJsZSBpcyByYWlzZWQgaG9yaXpvbnRhbGx5IChjaGVja2luZyBjb2x1bW5zKS5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0hvcml6b250YWwoKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuY29sdW1ucy5sZW5ndGggJiYgIXRoaXMucm93cy5sZW5ndGgpO1xuICB9XG59XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSBHaG9zdFRhYmxlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVQYWdpbmF0b3IgPSBjcmVhdGVQYWdpbmF0b3I7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24udjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS52Mi5qc1wiKTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UudjIuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24udjIuanNcIik7XG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL251bWJlclwiKTtcbi8qKlxuICogQHR5cGVkZWYgUGFnaW5hdG9yXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKG51bWJlcik6IHZvaWR9IHNldEN1cnJlbnRQYWdlIFNldHMgdGhlIGN1cnJlbnQgaW5kZXggdG8gdGhlIHNwZWNpZmljIHBhZ2UuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IG51bWJlcn0gZ2V0Q3VycmVudFBhZ2UgR2V0cyB0aGUgY3VycmVudCBwYWdlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiBudW1iZXJ9IGdldFNpemUgR2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSB0b0ZpcnN0SXRlbSBNb3ZlIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgcGFnZS5cbiAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb24oKTogdm9pZH0gdG9MYXN0SXRlbSBNb3ZlIHRoZSBpbmRleCB0byB0aGUgbGFzdCBwYWdlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSB0b05leHRJdGVtIE1vdmUgdGhlIGluZGV4IHRvIHRoZSBuZXh0IHBhZ2UuXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9uKCk6IHZvaWR9IHRvUHJldmlvdXNJdGVtIE1vdmUgdGhlIGluZGV4IHRvIHRoZSBwcmV2aW91cyBwYWdlLlxuICogQHByb3BlcnR5IHtmdW5jdGlvbigpOiB2b2lkfSBjbGVhciBDbGVhciB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIHBhZ2luYXRvci5cbiAqL1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBQYWdpbmF0b3Igb3B0aW9ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5pbml0aWFsUGFnZV0gSW5pdGlhbCBpbmRleCBmcm9tIHdoaWNoIHBhZ2luZyBzdGFydHMuIEFsc28sIGFmdGVyIGNsZWFyaW5nIHRoZSBwYWdpbmF0b3JcbiAqIHRoZSBwYWdlIGlzIGNsZWFyZWQgdG8gdGhlIGluaXRpYWwgcGFnZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKTogbnVtYmVyfSBbb3B0aW9ucy5zaXplXSBTZXRzIHRoZSBtYXggc2l6ZSBvZiB0aGUgcGFnZXMuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKG51bWJlcik6IGJvb2xlYW4gfCB2b2lkfSBbb3B0aW9ucy5vbkl0ZW1TZWxlY3RdIEZpcmVzIHRoZSBmdW5jdGlvbiBvbiBlYWNoIHBhZ2UgY2hhbmdlLlxuICogQHBhcmFtIHtmdW5jdGlvbigpOiB2b2lkfSBbb3B0aW9ucy5vbkNsZWFyXSBGaXJlcyB0aGUgZnVuY3Rpb24gYWZ0ZXIgY2xlYXJpbmcgdGhlIHN0YXRlLlxuICogQHJldHVybnMge1BhZ2luYXRvcn1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUGFnaW5hdG9yKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBpbml0aWFsUGFnZSA9IC0xLFxuICAgIHNpemUgPSAoKSA9PiAwLFxuICAgIG9uSXRlbVNlbGVjdCA9ICgpID0+IHt9LFxuICAgIG9uQ2xlYXIgPSAoKSA9PiB7fVxuICB9ID0gX3JlZjtcbiAgY29uc3QgdmlzaXRlZFBhZ2VzID0gbmV3IFNldCgpO1xuICBsZXQgY3VycmVudEluZGV4ID0gKDAsIF9udW1iZXIuY2xhbXApKGluaXRpYWxQYWdlLCAtMSwgZ2V0U2l6ZSgpIC0gMSk7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBwYWdpbmF0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXdJbmRleCBUaGUgcGFnZSBpbmRleCB0byBzd2l0Y2guXG4gICAqIEBwYXJhbSB7LTF8MX0gZGlyZWN0aW9uIFRoZSBkaXJlY3Rpb24gb2YgdHJhdmVyc2luZyB0aGUgcGFnZXMgaW4gY2FzZSB3aGVuIHRoZXkgYXJlIGRpc2FibGVkLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBmaW5hbCBpbmRleCBvZiB0aGUgcGFnZS5cbiAgICovXG4gIGZ1bmN0aW9uIF91cGRhdGVTdGF0ZShuZXdJbmRleCwgZGlyZWN0aW9uKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gZ2V0U2l6ZSgpIC0gMTtcbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdJbmRleCA9IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKG5ld0luZGV4ID4gbGFzdEluZGV4KSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfVxuICAgIGlmICh2aXNpdGVkUGFnZXMuaGFzKG5ld0luZGV4KSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICB2aXNpdGVkUGFnZXMuYWRkKG5ld0luZGV4KTtcbiAgICBjb25zdCBjaGFuZ2VQcm9jZWVkID0gb25JdGVtU2VsZWN0KG5ld0luZGV4LCBmYWxzZSk7XG4gICAgaWYgKGNoYW5nZVByb2NlZWQgPT09IGZhbHNlKSB7XG4gICAgICBuZXdJbmRleCA9IF91cGRhdGVTdGF0ZShkaXJlY3Rpb24gPT09IDEgPyArK25ld0luZGV4IDogLS1uZXdJbmRleCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgIGRpcmVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBuZXdJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBwYWdlIGluZGV4IGFzIGN1cnJlbnQgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IHRvIHNldC5cbiAgICovXG4gIGZ1bmN0aW9uIHNldEN1cnJlbnRQYWdlKGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID4gLTEgJiYgaW5kZXggPCBnZXRTaXplKCkgJiYgb25JdGVtU2VsZWN0KGluZGV4LCB0cnVlKSAhPT0gZmFsc2UpIHtcbiAgICAgIGN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRDdXJyZW50UGFnZSgpIHtcbiAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBpbmRleCB0byB0aGUgZmlyc3QgcGFnZS5cbiAgICovXG4gIGZ1bmN0aW9uIHRvRmlyc3RJdGVtKCkge1xuICAgIGlmIChnZXRTaXplKCkgPiAwKSB7XG4gICAgICB2aXNpdGVkUGFnZXMuY2xlYXIoKTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IF91cGRhdGVTdGF0ZSgwLCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW92ZXMgdGhlIGluZGV4IHRvIHRoZSBsYXN0IHBhZ2UuXG4gICAqL1xuICBmdW5jdGlvbiB0b0xhc3RJdGVtKCkge1xuICAgIGlmIChnZXRTaXplKCkgPiAwKSB7XG4gICAgICB2aXNpdGVkUGFnZXMuY2xlYXIoKTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IF91cGRhdGVTdGF0ZShnZXRTaXplKCkgLSAxLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBpbmRleCB0byB0aGUgbmV4dCBwYWdlLlxuICAgKi9cbiAgZnVuY3Rpb24gdG9OZXh0SXRlbSgpIHtcbiAgICBpZiAoZ2V0U2l6ZSgpID4gMCkge1xuICAgICAgdmlzaXRlZFBhZ2VzLmNsZWFyKCk7XG4gICAgICBjdXJyZW50SW5kZXggPSBfdXBkYXRlU3RhdGUoKytjdXJyZW50SW5kZXgsIDEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBsdXNwbHVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBpbmRleCB0byB0aGUgcHJldmlvdXMgcGFnZS5cbiAgICovXG4gIGZ1bmN0aW9uIHRvUHJldmlvdXNJdGVtKCkge1xuICAgIGlmIChnZXRTaXplKCkgPiAwKSB7XG4gICAgICB2aXNpdGVkUGFnZXMuY2xlYXIoKTtcbiAgICAgIGN1cnJlbnRJbmRleCA9IF91cGRhdGVTdGF0ZSgtLWN1cnJlbnRJbmRleCwgLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBsdXNwbHVzXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFNpemUoKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KHNpemUoKSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgcGFnaW5hdG9yLlxuICAgKi9cbiAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgdmlzaXRlZFBhZ2VzLmNsZWFyKCk7XG4gICAgY3VycmVudEluZGV4ID0gaW5pdGlhbFBhZ2U7XG4gICAgb25DbGVhcigpO1xuICB9XG4gIHJldHVybiB7XG4gICAgc2V0Q3VycmVudFBhZ2UsXG4gICAgZ2V0Q3VycmVudFBhZ2UsXG4gICAgdG9GaXJzdEl0ZW0sXG4gICAgdG9MYXN0SXRlbSxcbiAgICB0b05leHRJdGVtLFxuICAgIHRvUHJldmlvdXNJdGVtLFxuICAgIGdldFNpemUsXG4gICAgY2xlYXJcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuX2RhdGFUb0hUTUwgPSBfZGF0YVRvSFRNTDtcbmV4cG9ydHMuaHRtbFRvR3JpZFNldHRpbmdzID0gaHRtbFRvR3JpZFNldHRpbmdzO1xuZXhwb3J0cy5pbnN0YW5jZVRvSFRNTCA9IGluc3RhbmNlVG9IVE1MO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzXCIpO1xucmVxdWlyZShcImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS1hbGwuanNcIik7XG52YXIgX21peGVkID0gcmVxdWlyZShcIi4vLi4vaGVscGVycy9taXhlZFwiKTtcbmNvbnN0IEVTQ0FQRURfSFRNTF9DSEFSUyA9IHtcbiAgJyZuYnNwOyc6ICdcXHgyMCcsXG4gICcmYW1wOyc6ICcmJyxcbiAgJyZsdDsnOiAnPCcsXG4gICcmZ3Q7JzogJz4nXG59O1xuY29uc3QgcmVnRXNjYXBlZENoYXJzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhFU0NBUEVEX0hUTUxfQ0hBUlMpLm1hcChrZXkgPT4gYCgke2tleX0pYCkuam9pbignfCcpLCAnZ2knKTtcblxuLyoqXG4gKiBWZXJpZmllcyBpZiBub2RlIGlzIGFuIEhUTUxUYWJsZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudCBOb2RlIHRvIHZlcmlmeSBpZiBpdCdzIGFuIEhUTUxUYWJsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0hUTUxUYWJsZShlbGVtZW50KSB7XG4gIHJldHVybiAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKSA9PT0gJ1RBQkxFJztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBIYW5kc29udGFibGUgaW50byBIVE1MVGFibGVFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Q29yZX0gaW5zdGFuY2UgVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IE91dGVySFRNTCBvZiB0aGUgSFRNTFRhYmxlRWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gaW5zdGFuY2VUb0hUTUwoaW5zdGFuY2UpIHtcbiAgY29uc3QgaGFzQ29sdW1uSGVhZGVycyA9IGluc3RhbmNlLmhhc0NvbEhlYWRlcnMoKTtcbiAgY29uc3QgaGFzUm93SGVhZGVycyA9IGluc3RhbmNlLmhhc1Jvd0hlYWRlcnMoKTtcbiAgY29uc3QgY29vcmRzID0gW2hhc0NvbHVtbkhlYWRlcnMgPyAtMSA6IDAsIGhhc1Jvd0hlYWRlcnMgPyAtMSA6IDAsIGluc3RhbmNlLmNvdW50Um93cygpIC0gMSwgaW5zdGFuY2UuY291bnRDb2xzKCkgLSAxXTtcbiAgY29uc3QgZGF0YSA9IGluc3RhbmNlLmdldERhdGEoLi4uY29vcmRzKTtcbiAgY29uc3QgY291bnRSb3dzID0gZGF0YS5sZW5ndGg7XG4gIGNvbnN0IGNvdW50Q29scyA9IGNvdW50Um93cyA+IDAgPyBkYXRhWzBdLmxlbmd0aCA6IDA7XG4gIGNvbnN0IFRBQkxFID0gWyc8dGFibGU+JywgJzwvdGFibGU+J107XG4gIGNvbnN0IFRIRUFEID0gaGFzQ29sdW1uSGVhZGVycyA/IFsnPHRoZWFkPicsICc8L3RoZWFkPiddIDogW107XG4gIGNvbnN0IFRCT0RZID0gWyc8dGJvZHk+JywgJzwvdGJvZHk+J107XG4gIGNvbnN0IHJvd01vZGlmaWVyID0gaGFzUm93SGVhZGVycyA/IDEgOiAwO1xuICBjb25zdCBjb2x1bW5Nb2RpZmllciA9IGhhc0NvbHVtbkhlYWRlcnMgPyAxIDogMDtcbiAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgY291bnRSb3dzOyByb3cgKz0gMSkge1xuICAgIGNvbnN0IGlzQ29sdW1uSGVhZGVyc1JvdyA9IGhhc0NvbHVtbkhlYWRlcnMgJiYgcm93ID09PSAwO1xuICAgIGNvbnN0IENFTExTID0gW107XG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgY291bnRDb2xzOyBjb2x1bW4gKz0gMSkge1xuICAgICAgY29uc3QgaXNSb3dIZWFkZXJzQ29sdW1uID0gIWlzQ29sdW1uSGVhZGVyc1JvdyAmJiBoYXNSb3dIZWFkZXJzICYmIGNvbHVtbiA9PT0gMDtcbiAgICAgIGxldCBjZWxsID0gJyc7XG4gICAgICBpZiAoaXNDb2x1bW5IZWFkZXJzUm93KSB7XG4gICAgICAgIGNlbGwgPSBgPHRoPiR7aW5zdGFuY2UuZ2V0Q29sSGVhZGVyKGNvbHVtbiAtIHJvd01vZGlmaWVyKX08L3RoPmA7XG4gICAgICB9IGVsc2UgaWYgKGlzUm93SGVhZGVyc0NvbHVtbikge1xuICAgICAgICBjZWxsID0gYDx0aD4ke2luc3RhbmNlLmdldFJvd0hlYWRlcihyb3cgLSBjb2x1bW5Nb2RpZmllcil9PC90aD5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2VsbERhdGEgPSBkYXRhW3Jvd11bY29sdW1uXTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGhpZGRlbixcbiAgICAgICAgICByb3dzcGFuLFxuICAgICAgICAgIGNvbHNwYW5cbiAgICAgICAgfSA9IGluc3RhbmNlLmdldENlbGxNZXRhKHJvdyAtIGNvbHVtbk1vZGlmaWVyLCBjb2x1bW4gLSByb3dNb2RpZmllcik7XG4gICAgICAgIGlmICghaGlkZGVuKSB7XG4gICAgICAgICAgY29uc3QgYXR0cnMgPSBbXTtcbiAgICAgICAgICBpZiAocm93c3Bhbikge1xuICAgICAgICAgICAgYXR0cnMucHVzaChgcm93c3Bhbj1cIiR7cm93c3Bhbn1cImApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sc3Bhbikge1xuICAgICAgICAgICAgYXR0cnMucHVzaChgY29sc3Bhbj1cIiR7Y29sc3Bhbn1cImApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKDAsIF9taXhlZC5pc0VtcHR5KShjZWxsRGF0YSkpIHtcbiAgICAgICAgICAgIGNlbGwgPSBgPHRkICR7YXR0cnMuam9pbignICcpfT48L3RkPmA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2VsbERhdGEudG9TdHJpbmcoKS5yZXBsYWNlKCc8JywgJyZsdDsnKS5yZXBsYWNlKCc+JywgJyZndDsnKS5yZXBsYWNlKC8oPGJyKFxccyp8XFwvKT4oXFxyXFxufFxcbik/fFxcclxcbnxcXG4pL2csICc8YnI+XFxyXFxuJykucmVwbGFjZSgvXFx4MjAvZ2ksICcmbmJzcDsnKS5yZXBsYWNlKC9cXHQvZ2ksICcmIzk7Jyk7XG4gICAgICAgICAgICBjZWxsID0gYDx0ZCAke2F0dHJzLmpvaW4oJyAnKX0+JHt2YWx1ZX08L3RkPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBDRUxMUy5wdXNoKGNlbGwpO1xuICAgIH1cbiAgICBjb25zdCBUUiA9IFsnPHRyPicsIC4uLkNFTExTLCAnPC90cj4nXS5qb2luKCcnKTtcbiAgICBpZiAoaXNDb2x1bW5IZWFkZXJzUm93KSB7XG4gICAgICBUSEVBRC5zcGxpY2UoMSwgMCwgVFIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBUQk9EWS5zcGxpY2UoLTEsIDAsIFRSKTtcbiAgICB9XG4gIH1cbiAgVEFCTEUuc3BsaWNlKDEsIDAsIFRIRUFELmpvaW4oJycpLCBUQk9EWS5qb2luKCcnKSk7XG4gIHJldHVybiBUQUJMRS5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyAyRCBhcnJheSBpbnRvIEhUTUxUYWJsZUVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gaW5wdXQgSW5wdXQgYXJyYXkgd2hpY2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gSFRNTFRhYmxlLlxuICogQHJldHVybnMge3N0cmluZ30gT3V0ZXJIVE1MIG9mIHRoZSBIVE1MVGFibGVFbGVtZW50LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG5mdW5jdGlvbiBfZGF0YVRvSFRNTChpbnB1dCkge1xuICBjb25zdCBpbnB1dExlbiA9IGlucHV0Lmxlbmd0aDtcbiAgY29uc3QgcmVzdWx0ID0gWyc8dGFibGU+J107XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGlucHV0TGVuOyByb3cgKz0gMSkge1xuICAgIGNvbnN0IHJvd0RhdGEgPSBpbnB1dFtyb3ddO1xuICAgIGNvbnN0IGNvbHVtbnNMZW4gPSByb3dEYXRhLmxlbmd0aDtcbiAgICBjb25zdCBjb2x1bW5zUmVzdWx0ID0gW107XG4gICAgaWYgKHJvdyA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJzx0Ym9keT4nKTtcbiAgICB9XG4gICAgZm9yIChsZXQgY29sdW1uID0gMDsgY29sdW1uIDwgY29sdW1uc0xlbjsgY29sdW1uICs9IDEpIHtcbiAgICAgIGNvbnN0IGNlbGxEYXRhID0gcm93RGF0YVtjb2x1bW5dO1xuICAgICAgY29uc3QgcGFyc2VkQ2VsbERhdGEgPSAoMCwgX21peGVkLmlzRW1wdHkpKGNlbGxEYXRhKSA/ICcnIDogY2VsbERhdGEudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvKDxicihcXHMqfFxcLyk+KFxcclxcbnxcXG4pP3xcXHJcXG58XFxuKS9nLCAnPGJyPlxcclxcbicpLnJlcGxhY2UoL1xceDIwezIsfS9naSwgc3Vic3RyaW5nID0+IHtcbiAgICAgICAgLy8gVGhlIHdheSBob3cgRXhjZWwgc2VyaWFsaXplcyBkYXRhIHdpdGggYXQgbGVhc3QgdHdvIHNwYWNlcy5cbiAgICAgICAgcmV0dXJuIGA8c3BhbiBzdHlsZT1cIm1zby1zcGFjZXJ1bjogeWVzXCI+JHsnJm5ic3A7Jy5yZXBlYXQoc3Vic3RyaW5nLmxlbmd0aCAtIDEpfSA8L3NwYW4+YDtcbiAgICAgIH0pLnJlcGxhY2UoL1xcdC9naSwgJyYjOTsnKTtcbiAgICAgIGNvbHVtbnNSZXN1bHQucHVzaChgPHRkPiR7cGFyc2VkQ2VsbERhdGF9PC90ZD5gKTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goJzx0cj4nLCAuLi5jb2x1bW5zUmVzdWx0LCAnPC90cj4nKTtcbiAgICBpZiAocm93ICsgMSA9PT0gaW5wdXRMZW4pIHtcbiAgICAgIHJlc3VsdC5wdXNoKCc8L3Rib2R5PicpO1xuICAgIH1cbiAgfVxuICByZXN1bHQucHVzaCgnPC90YWJsZT4nKTtcbiAgcmV0dXJuIHJlc3VsdC5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBIVE1MVGFibGUgb3Igc3RyaW5nIGludG8gSGFuZHNvbnRhYmxlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudHxzdHJpbmd9IGVsZW1lbnQgTm9kZSBlbGVtZW50IHdoaWNoIHNob3VsZCBjb250YWluIGA8dGFibGU+Li4uPC90YWJsZT5gLlxuICogQHBhcmFtIHtEb2N1bWVudH0gW3Jvb3REb2N1bWVudF0gVGhlIGRvY3VtZW50IHdpbmRvdyBvd25lci5cbiAqIEByZXR1cm5zIHtvYmplY3R9IFJldHVybiBjb25maWd1cmF0aW9uIG9iamVjdC4gQ29udGFpbnMga2V5cyBhcyBEZWZhdWx0U2V0dGluZ3MuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbmZ1bmN0aW9uIGh0bWxUb0dyaWRTZXR0aW5ncyhlbGVtZW50KSB7XG4gIGxldCByb290RG9jdW1lbnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGRvY3VtZW50O1xuICBjb25zdCBzZXR0aW5nc09iaiA9IHt9O1xuICBjb25zdCBmcmFnbWVudCA9IHJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGNvbnN0IHRlbXBFbGVtID0gcm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBmcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRWxlbSk7XG4gIGxldCBjaGVja0VsZW1lbnQgPSBlbGVtZW50O1xuICBpZiAodHlwZW9mIGNoZWNrRWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBlc2NhcGVkQWRqYWNlbnRIVE1MID0gY2hlY2tFbGVtZW50LnJlcGxhY2UoLzx0ZFxcYltePl0qPz4oW1xcc1xcU10qPyk8XFwvXFxzKnRkPi9nLCBjZWxsRnJhZ21lbnQgPT4ge1xuICAgICAgY29uc3Qgb3BlbmluZ1RhZyA9IGNlbGxGcmFnbWVudC5tYXRjaCgvPHRkXFxiW14+XSo/Pi9nKVswXTtcbiAgICAgIGNvbnN0IHBhcmFncmFwaFJlZ2V4cCA9IC88cC4qPz4vZztcbiAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IGNlbGxGcmFnbWVudC5zdWJzdHJpbmcob3BlbmluZ1RhZy5sZW5ndGgsIGNlbGxGcmFnbWVudC5sYXN0SW5kZXhPZignPCcpKS50cmltKCkgLy8gUmVtb3Zpbmcgd2hpdGVzcGFjZXMgZnJvbSB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgSFRNTCBmcmFnbWVudFxuICAgICAgLnJlcGxhY2VBbGwoL1xcblxccysvZywgJyAnKSAvLyBIVE1MIHRhZ3MgbWF5IGJlIHNwbGl0IHVzaW5nIG11bHRpcGxlIG5ldyBsaW5lcyBhbmQgd2hpdGVzcGFjZXNcbiAgICAgIC5yZXBsYWNlQWxsKHBhcmFncmFwaFJlZ2V4cCwgJ1xcbicpIC8vIE9ubHkgcGFyYWdyYXBocyBzaG91bGQgc3BsaXQgdGV4dCB1c2luZyBuZXcgbGluZSBjaGFyYWN0ZXJzXG4gICAgICAucmVwbGFjZSgnXFxuJywgJycpIC8vIEZpcnN0IHBhcmFncmFwaCBzaG91bGRuJ3Qgc3RhcnQgd2l0aCBuZXcgbGluZSBjaGFyYWN0ZXJzXG4gICAgICAucmVwbGFjZUFsbCgvPFxcLyguKik+XFxzKyQvbWcsICc8LyQxPicpIC8vIEhUTUwgdGFncyBtYXkgZW5kIHdpdGggd2hpdGVzcGFjZS5cbiAgICAgIC5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwgJycpIC8vIFJlbW92aW5nIEhUTUwgdGFnc1xuICAgICAgLnJlcGxhY2VBbGwoL14mbmJzcDskL21nLCAnJyk7IC8vIFJlbW92aW5nIHNpbmdsZSAmbmJzcDsgY2hhcmFjdGVycyBzZXBhcmF0aW5nIG5ldyBsaW5lc1xuICAgICAgY29uc3QgY2xvc2luZ1RhZyA9ICc8L3RkPic7XG4gICAgICByZXR1cm4gYCR7b3BlbmluZ1RhZ30ke2NlbGxWYWx1ZX0ke2Nsb3NpbmdUYWd9YDtcbiAgICB9KTtcbiAgICB0ZW1wRWxlbS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCBgJHtlc2NhcGVkQWRqYWNlbnRIVE1MfWApO1xuICAgIGNoZWNrRWxlbWVudCA9IHRlbXBFbGVtLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gIH1cbiAgaWYgKCFjaGVja0VsZW1lbnQgfHwgIWlzSFRNTFRhYmxlKGNoZWNrRWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZ2VuZXJhdG9yID0gdGVtcEVsZW0ucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD1cImVuZXJhdG9yXCJdJyk7XG4gIGNvbnN0IGhhc1Jvd0hlYWRlcnMgPSBjaGVja0VsZW1lbnQucXVlcnlTZWxlY3RvcigndGJvZHkgdGgnKSAhPT0gbnVsbDtcbiAgY29uc3QgdHJFbGVtZW50ID0gY2hlY2tFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7XG4gIGNvbnN0IGNvdW50Q29scyA9ICF0ckVsZW1lbnQgPyAwIDogQXJyYXkuZnJvbSh0ckVsZW1lbnQuY2VsbHMpLnJlZHVjZSgoY29scywgY2VsbCkgPT4gY29scyArIGNlbGwuY29sU3BhbiwgMCkgLSAoaGFzUm93SGVhZGVycyA/IDEgOiAwKTtcbiAgY29uc3QgZml4ZWRSb3dzQm90dG9tID0gY2hlY2tFbGVtZW50LnRGb290ICYmIEFycmF5LmZyb20oY2hlY2tFbGVtZW50LnRGb290LnJvd3MpIHx8IFtdO1xuICBjb25zdCBmaXhlZFJvd3NUb3AgPSBbXTtcbiAgbGV0IGhhc0NvbEhlYWRlcnMgPSBmYWxzZTtcbiAgbGV0IHRoUm93c0xlbiA9IDA7XG4gIGxldCBjb3VudFJvd3MgPSAwO1xuICBpZiAoY2hlY2tFbGVtZW50LnRIZWFkKSB7XG4gICAgY29uc3QgdGhSb3dzID0gQXJyYXkuZnJvbShjaGVja0VsZW1lbnQudEhlYWQucm93cykuZmlsdGVyKHRyID0+IHtcbiAgICAgIGNvbnN0IGlzRGF0YVJvdyA9IHRyLnF1ZXJ5U2VsZWN0b3IoJ3RkJykgIT09IG51bGw7XG4gICAgICBpZiAoaXNEYXRhUm93KSB7XG4gICAgICAgIGZpeGVkUm93c1RvcC5wdXNoKHRyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaXNEYXRhUm93O1xuICAgIH0pO1xuICAgIHRoUm93c0xlbiA9IHRoUm93cy5sZW5ndGg7XG4gICAgaGFzQ29sSGVhZGVycyA9IHRoUm93c0xlbiA+IDA7XG4gICAgaWYgKHRoUm93c0xlbiA+IDEpIHtcbiAgICAgIHNldHRpbmdzT2JqLm5lc3RlZEhlYWRlcnMgPSBBcnJheS5mcm9tKHRoUm93cykucmVkdWNlKChyb3dzLCByb3cpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGVyc1JvdyA9IEFycmF5LmZyb20ocm93LmNlbGxzKS5yZWR1Y2UoKGhlYWRlcnMsIGhlYWRlciwgY3VycmVudEluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGhhc1Jvd0hlYWRlcnMgJiYgY3VycmVudEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgY29sU3BhbjogY29sc3BhbixcbiAgICAgICAgICAgIGlubmVySFRNTFxuICAgICAgICAgIH0gPSBoZWFkZXI7XG4gICAgICAgICAgY29uc3QgbmV4dEhlYWRlciA9IGNvbHNwYW4gPiAxID8ge1xuICAgICAgICAgICAgbGFiZWw6IGlubmVySFRNTCxcbiAgICAgICAgICAgIGNvbHNwYW5cbiAgICAgICAgICB9IDogaW5uZXJIVE1MO1xuICAgICAgICAgIGhlYWRlcnMucHVzaChuZXh0SGVhZGVyKTtcbiAgICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICByb3dzLnB1c2goaGVhZGVyc1Jvdyk7XG4gICAgICAgIHJldHVybiByb3dzO1xuICAgICAgfSwgW10pO1xuICAgIH0gZWxzZSBpZiAoaGFzQ29sSGVhZGVycykge1xuICAgICAgc2V0dGluZ3NPYmouY29sSGVhZGVycyA9IEFycmF5LmZyb20odGhSb3dzWzBdLmNoaWxkcmVuKS5yZWR1Y2UoKGhlYWRlcnMsIGhlYWRlciwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGhhc1Jvd0hlYWRlcnMgJiYgaW5kZXggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gaGVhZGVycztcbiAgICAgICAgfVxuICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyLmlubmVySFRNTCk7XG4gICAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgICAgfSwgW10pO1xuICAgIH1cbiAgfVxuICBpZiAoZml4ZWRSb3dzVG9wLmxlbmd0aCkge1xuICAgIHNldHRpbmdzT2JqLmZpeGVkUm93c1RvcCA9IGZpeGVkUm93c1RvcC5sZW5ndGg7XG4gIH1cbiAgaWYgKGZpeGVkUm93c0JvdHRvbS5sZW5ndGgpIHtcbiAgICBzZXR0aW5nc09iai5maXhlZFJvd3NCb3R0b20gPSBmaXhlZFJvd3NCb3R0b20ubGVuZ3RoO1xuICB9XG4gIGNvbnN0IGRhdGFSb3dzID0gWy4uLmZpeGVkUm93c1RvcCwgLi4uQXJyYXkuZnJvbShjaGVja0VsZW1lbnQudEJvZGllcykucmVkdWNlKChzZWN0aW9ucywgc2VjdGlvbikgPT4ge1xuICAgIHNlY3Rpb25zLnB1c2goLi4uQXJyYXkuZnJvbShzZWN0aW9uLnJvd3MpKTtcbiAgICByZXR1cm4gc2VjdGlvbnM7XG4gIH0sIFtdKSwgLi4uZml4ZWRSb3dzQm90dG9tXTtcbiAgY291bnRSb3dzID0gZGF0YVJvd3MubGVuZ3RoO1xuICBjb25zdCBkYXRhQXJyID0gbmV3IEFycmF5KGNvdW50Um93cyk7XG4gIGZvciAobGV0IHIgPSAwOyByIDwgY291bnRSb3dzOyByKyspIHtcbiAgICBkYXRhQXJyW3JdID0gbmV3IEFycmF5KGNvdW50Q29scyk7XG4gIH1cbiAgY29uc3QgbWVyZ2VDZWxscyA9IFtdO1xuICBjb25zdCByb3dIZWFkZXJzID0gW107XG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGNvdW50Um93czsgcm93KyspIHtcbiAgICBjb25zdCB0ciA9IGRhdGFSb3dzW3Jvd107XG4gICAgY29uc3QgY2VsbHMgPSBBcnJheS5mcm9tKHRyLmNlbGxzKTtcbiAgICBjb25zdCBjZWxsc0xlbiA9IGNlbGxzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBjZWxsSWQgPSAwOyBjZWxsSWQgPCBjZWxsc0xlbjsgY2VsbElkKyspIHtcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsc1tjZWxsSWRdO1xuICAgICAgY29uc3Qge1xuICAgICAgICBub2RlTmFtZSxcbiAgICAgICAgaW5uZXJIVE1MLFxuICAgICAgICByb3dTcGFuOiByb3dzcGFuLFxuICAgICAgICBjb2xTcGFuOiBjb2xzcGFuXG4gICAgICB9ID0gY2VsbDtcbiAgICAgIGNvbnN0IGNvbCA9IGRhdGFBcnJbcm93XS5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUgPT09IHVuZGVmaW5lZCk7XG4gICAgICBpZiAobm9kZU5hbWUgPT09ICdURCcpIHtcbiAgICAgICAgaWYgKHJvd3NwYW4gPiAxIHx8IGNvbHNwYW4gPiAxKSB7XG4gICAgICAgICAgZm9yIChsZXQgcnN0YXJ0ID0gcm93OyByc3RhcnQgPCByb3cgKyByb3dzcGFuOyByc3RhcnQrKykge1xuICAgICAgICAgICAgaWYgKHJzdGFydCA8IGNvdW50Um93cykge1xuICAgICAgICAgICAgICBmb3IgKGxldCBjc3RhcnQgPSBjb2w7IGNzdGFydCA8IGNvbCArIGNvbHNwYW47IGNzdGFydCsrKSB7XG4gICAgICAgICAgICAgICAgZGF0YUFycltyc3RhcnRdW2NzdGFydF0gPSBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0eWxlQXR0ciA9IGNlbGwuZ2V0QXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZU1lcmdlID0gc3R5bGVBdHRyICYmIHN0eWxlQXR0ci5pbmNsdWRlcygnbXNvLWlnbm9yZTpjb2xzcGFuJyk7XG4gICAgICAgICAgaWYgKCFpZ25vcmVNZXJnZSkge1xuICAgICAgICAgICAgbWVyZ2VDZWxscy5wdXNoKHtcbiAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgIHJvd3NwYW4sXG4gICAgICAgICAgICAgIGNvbHNwYW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY2VsbFZhbHVlID0gJyc7XG4gICAgICAgIGlmIChnZW5lcmF0b3IgJiYgL2V4Y2VsL2dpLnRlc3QoZ2VuZXJhdG9yLmNvbnRlbnQpKSB7XG4gICAgICAgICAgY2VsbFZhbHVlID0gaW5uZXJIVE1MLnJlcGxhY2UoL1tcXHJcXG5dW1xceDIwXXswLDJ9L2csICdcXHgyMCcpLnJlcGxhY2UoLzxicihcXHMqfFxcLyk+W1xcclxcbl0/W1xceDIwXXswLDN9L2dpbSwgJ1xcclxcbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNlbGxWYWx1ZSA9IGlubmVySFRNTC5yZXBsYWNlKC88YnIoXFxzKnxcXC8pPltcXHJcXG5dPy9naW0sICdcXHJcXG4nKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhQXJyW3Jvd11bY29sXSA9IGNlbGxWYWx1ZS5yZXBsYWNlKHJlZ0VzY2FwZWRDaGFycywgbWF0Y2ggPT4gRVNDQVBFRF9IVE1MX0NIQVJTW21hdGNoXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dIZWFkZXJzLnB1c2goaW5uZXJIVE1MKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG1lcmdlQ2VsbHMubGVuZ3RoKSB7XG4gICAgc2V0dGluZ3NPYmoubWVyZ2VDZWxscyA9IG1lcmdlQ2VsbHM7XG4gIH1cbiAgaWYgKHJvd0hlYWRlcnMubGVuZ3RoKSB7XG4gICAgc2V0dGluZ3NPYmoucm93SGVhZGVycyA9IHJvd0hlYWRlcnM7XG4gIH1cbiAgaWYgKGRhdGFBcnIubGVuZ3RoKSB7XG4gICAgc2V0dGluZ3NPYmouZGF0YSA9IGRhdGFBcnI7XG4gIH1cbiAgcmV0dXJuIHNldHRpbmdzT2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5oYXNWYWxpZFBhcmFtZXRlciA9IGhhc1ZhbGlkUGFyYW1ldGVyO1xuZXhwb3J0cy5pc1Jvb3RJbnN0YW5jZSA9IGlzUm9vdEluc3RhbmNlO1xuZXhwb3J0cy5yZWdpc3RlckFzUm9vdEluc3RhbmNlID0gcmVnaXN0ZXJBc1Jvb3RJbnN0YW5jZTtcbmNvbnN0IGhvbGRlciA9IGV4cG9ydHMuaG9sZGVyID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IHJvb3RJbnN0YW5jZVN5bWJvbCA9IGV4cG9ydHMucm9vdEluc3RhbmNlU3ltYm9sID0gU3ltYm9sKCdyb290SW5zdGFuY2UnKTtcblxuLyoqXG4gKiBSZWdpc3RlciBhbiBvYmplY3QgYXMgYSByb290IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqZWN0IEFuIG9iamVjdCB0byBhc3NvY2lhdGUgd2l0aCByb290IGluc3RhbmNlIGZsYWcuXG4gKi9cbmZ1bmN0aW9uIHJlZ2lzdGVyQXNSb290SW5zdGFuY2Uob2JqZWN0KSB7XG4gIGhvbGRlci5zZXQob2JqZWN0LCB0cnVlKTtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgc291cmNlIG9mIHRoZSByb290IGluZGljYXRpb24gY2FsbCBpcyB2YWxpZC5cbiAqXG4gKiBAcGFyYW0gIHtzeW1ib2x9IHJvb3RTeW1ib2wgQSBzeW1ib2wgYXMgYSBzb3VyY2Ugb2YgdHJ1dGguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzVmFsaWRQYXJhbWV0ZXIocm9vdFN5bWJvbCkge1xuICByZXR1cm4gcm9vdFN5bWJvbCA9PT0gcm9vdEluc3RhbmNlU3ltYm9sO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHBhc3NlZCBhbiBvYmplY3Qgd2FzIGZsYWdnZWQgYXMgYSByb290IGluc3RhbmNlLlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqZWN0IEFuIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Jvb3RJbnN0YW5jZShvYmplY3QpIHtcbiAgcmV0dXJuIGhvbGRlci5oYXMob2JqZWN0KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG5yZXF1aXJlKFwiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL2hlbHBlcnMvb2JqZWN0XCIpO1xudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi8uLi9oZWxwZXJzL251bWJlclwiKTtcbnZhciBfbWl4ZWQgPSByZXF1aXJlKFwiLi8uLi9oZWxwZXJzL21peGVkXCIpO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBrZXkgPSBfdG9Qcm9wZXJ0eUtleShrZXkpOyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cbmZ1bmN0aW9uIF90b1Byb3BlcnR5S2V5KHQpIHsgdmFyIGkgPSBfdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7IHJldHVybiBcInN5bWJvbFwiID09IHR5cGVvZiBpID8gaSA6IGkgKyBcIlwiOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUodCwgcikgeyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCB8fCAhdCkgcmV0dXJuIHQ7IHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdOyBpZiAodm9pZCAwICE9PSBlKSB7IHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpOyBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgaSkgcmV0dXJuIGk7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTsgfSByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpOyB9XG4vKipcbiAqIEBjbGFzcyBTYW1wbGVzR2VuZXJhdG9yXG4gKi9cbmNsYXNzIFNhbXBsZXNHZW5lcmF0b3Ige1xuICAvKipcbiAgICogTnVtYmVyIG9mIHNhbXBsZXMgdG8gdGFrZSBvZiBlYWNoIHZhbHVlIGxlbmd0aC5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIHN0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCkge1xuICAgIHJldHVybiAzO1xuICB9XG4gIC8qKlxuICAgKiBTYW1wbGVzIHByZXBhcmVkIGZvciBjYWxjdWxhdGlvbnMuXG4gICAqXG4gICAqIEB0eXBlIHtNYXB9XG4gICAqIEBkZWZhdWx0IHtudWxsfVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihkYXRhRmFjdG9yeSkge1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNhbXBsZXNcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gd2hpY2ggZ2l2ZSB0aGUgZGF0YSB0byBjb2xsZWN0IHNhbXBsZXMuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAgICovXG4gICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwiZGF0YUZhY3RvcnlcIiwgbnVsbCk7XG4gICAgLyoqXG4gICAgICogQ3VzdG9tIG51bWJlciBvZiBzYW1wbGVzIHRvIHRha2Ugb2YgZWFjaCB2YWx1ZSBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBkZWZhdWx0IHtudWxsfVxuICAgICAqL1xuICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImN1c3RvbVNhbXBsZUNvdW50XCIsIG51bGwpO1xuICAgIC8qKlxuICAgICAqIGB0cnVlYCBpZiBkdXBsaWNhdGUgc2FtcGxlcyBjb2xsZWN0aW9uIHNob3VsZCBiZSBhbGxvd2VkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBkZWZhdWx0IHtmYWxzZX1cbiAgICAgKi9cbiAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJhbGxvd0R1cGxpY2F0ZXNcIiwgZmFsc2UpO1xuICAgIHRoaXMuZGF0YUZhY3RvcnkgPSBkYXRhRmFjdG9yeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNhbXBsZSBjb3VudCBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGdldFNhbXBsZUNvdW50KCkge1xuICAgIGlmICh0aGlzLmN1c3RvbVNhbXBsZUNvdW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5jdXN0b21TYW1wbGVDb3VudDtcbiAgICB9XG4gICAgcmV0dXJuIFNhbXBsZXNHZW5lcmF0b3IuU0FNUExFX0NPVU5UO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgc2FtcGxlIGNvdW50LlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2FtcGxlQ291bnQgTnVtYmVyIG9mIHNhbXBsZXMgdG8gYmUgY29sbGVjdGVkLlxuICAgKi9cbiAgc2V0U2FtcGxlQ291bnQoc2FtcGxlQ291bnQpIHtcbiAgICB0aGlzLmN1c3RvbVNhbXBsZUNvdW50ID0gc2FtcGxlQ291bnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGlmIHRoZSBnZW5lcmF0b3Igc2hvdWxkIGFjY2VwdCBkdXBsaWNhdGUgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGFsbG93RHVwbGljYXRlcyBgdHJ1ZWAgdG8gYWxsb3cgZHVwbGljYXRlIHZhbHVlcy5cbiAgICovXG4gIHNldEFsbG93RHVwbGljYXRlcyhhbGxvd0R1cGxpY2F0ZXMpIHtcbiAgICB0aGlzLmFsbG93RHVwbGljYXRlcyA9IGFsbG93RHVwbGljYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzYW1wbGVzIGZvciByb3cuIFlvdSBjYW4gY29udHJvbCB3aGljaCBhcmVhIHNob3VsZCBiZSBzYW1wbGVkIGJ5IHBhc3NpbmcgYHJvd1JhbmdlYCBvYmplY3QgYW5kIGBjb2xSYW5nZWAgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdHxudW1iZXJ9IHJvd1JhbmdlIFRoZSByb3dzIHJhbmdlIHRvIGdlbmVyYXRlIHRoZSBzYW1wbGVzLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29sUmFuZ2UgVGhlIGNvbHVtbiByYW5nZSB0byBnZW5lcmF0ZSB0aGUgc2FtcGxlcy5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdlbmVyYXRlUm93U2FtcGxlcyhyb3dSYW5nZSwgY29sUmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoJ3JvdycsIGNvbFJhbmdlLCByb3dSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgc2FtcGxlcyBmb3IgY29sdW1uLiBZb3UgY2FuIGNvbnRyb2wgd2hpY2ggYXJlYSBzaG91bGQgYmUgc2FtcGxlZCBieSBwYXNzaW5nIGBjb2xSYW5nZWAgb2JqZWN0IGFuZCBgcm93UmFuZ2VgIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbFJhbmdlIENvbHVtbiBpbmRleC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJvd1JhbmdlIENvbHVtbiBpbmRleC5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGdlbmVyYXRlQ29sdW1uU2FtcGxlcyhjb2xSYW5nZSwgcm93UmFuZ2UpIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoJ2NvbCcsIHJvd1JhbmdlLCBjb2xSYW5nZSk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgY29sbGVjdGlvbiBvZiBzYW1wbGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBUeXBlIHRvIGdlbmVyYXRlLiBDYW4gYmUgYGNvbGAgb3IgYHJvd2AuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSByYW5nZSBUaGUgcmFuZ2UgdG8gZ2VuZXJhdGUgdGhlIHNhbXBsZXMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fG51bWJlcn0gc3BlY2lmaWVyUmFuZ2UgVGhlIHJhbmdlIHRvIGdlbmVyYXRlIHRoZSBzYW1wbGVzLlxuICAgKiBAcmV0dXJucyB7TWFwfVxuICAgKi9cbiAgZ2VuZXJhdGVTYW1wbGVzKHR5cGUsIHJhbmdlLCBzcGVjaWZpZXJSYW5nZSkge1xuICAgIGNvbnN0IHNhbXBsZXMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3Qge1xuICAgICAgZnJvbSxcbiAgICAgIHRvXG4gICAgfSA9IHR5cGVvZiBzcGVjaWZpZXJSYW5nZSA9PT0gJ251bWJlcicgPyB7XG4gICAgICBmcm9tOiBzcGVjaWZpZXJSYW5nZSxcbiAgICAgIHRvOiBzcGVjaWZpZXJSYW5nZVxuICAgIH0gOiBzcGVjaWZpZXJSYW5nZTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKGZyb20sIHRvLCBpbmRleCA9PiB7XG4gICAgICBjb25zdCBzYW1wbGUgPSB0aGlzLmdlbmVyYXRlU2FtcGxlKHR5cGUsIHJhbmdlLCBpbmRleCk7XG4gICAgICBzYW1wbGVzLnNldChpbmRleCwgc2FtcGxlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2FtcGxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBzYW1wbGUgZm9yIHNwZWNpZmllZCB0eXBlIChgcm93YCBvciBgY29sYCkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIFNhbXBsZXMgdHlwZSBgcm93YCBvciBgY29sYC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHJhbmdlIFRoZSByYW5nZSB0byBnZW5lcmF0ZSB0aGUgc2FtcGxlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHNwZWNpZmllclZhbHVlIFRoZSByYW5nZSB0byBnZW5lcmF0ZSB0aGUgc2FtcGxlcy5cbiAgICogQHJldHVybnMge01hcH1cbiAgICovXG4gIGdlbmVyYXRlU2FtcGxlKHR5cGUsIHJhbmdlLCBzcGVjaWZpZXJWYWx1ZSkge1xuICAgIGlmICh0eXBlICE9PSAncm93JyAmJiB0eXBlICE9PSAnY29sJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZScpO1xuICAgIH1cbiAgICBjb25zdCBzYW1wbGVzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGNvbXB1dGVkS2V5ID0gdHlwZSA9PT0gJ3JvdycgPyAnY29sJyA6ICdyb3cnO1xuICAgIGNvbnN0IHNhbXBsZWRWYWx1ZXMgPSBbXTtcbiAgICAoMCwgX251bWJlci5yYW5nZUVhY2gpKHJhbmdlLmZyb20sIHJhbmdlLnRvLCBpbmRleCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gdHlwZSA9PT0gJ3JvdycgPyB0aGlzLmRhdGFGYWN0b3J5KHNwZWNpZmllclZhbHVlLCBpbmRleCkgOiB0aGlzLmRhdGFGYWN0b3J5KGluZGV4LCBzcGVjaWZpZXJWYWx1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgYnVuZGxlU2VlZFxuICAgICAgfSA9IGRhdGE7XG4gICAgICBjb25zdCBoYXNDdXN0b21CdW5kbGVTZWVkID0gdHlwZW9mIGJ1bmRsZVNlZWQgPT09ICdzdHJpbmcnICYmIGJ1bmRsZVNlZWQubGVuZ3RoID4gMDtcbiAgICAgIGxldCBzZWVkO1xuICAgICAgaWYgKGhhc0N1c3RvbUJ1bmRsZVNlZWQpIHtcbiAgICAgICAgc2VlZCA9IGJ1bmRsZVNlZWQ7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfb2JqZWN0LmlzT2JqZWN0KSh2YWx1ZSkpIHtcbiAgICAgICAgc2VlZCA9IGAke09iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGh9YDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgc2VlZCA9IGAke3ZhbHVlLmxlbmd0aH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VlZCA9IGAkeygwLCBfbWl4ZWQuc3RyaW5naWZ5KSh2YWx1ZSkubGVuZ3RofWA7XG4gICAgICB9XG4gICAgICBpZiAoIXNhbXBsZXMuaGFzKHNlZWQpKSB7XG4gICAgICAgIHNhbXBsZXMuc2V0KHNlZWQsIHtcbiAgICAgICAgICBuZWVkZWQ6IHRoaXMuZ2V0U2FtcGxlQ291bnQoKSxcbiAgICAgICAgICBzdHJpbmdzOiBbXVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNhbXBsZSA9IHNhbXBsZXMuZ2V0KHNlZWQpO1xuICAgICAgaWYgKHNhbXBsZS5uZWVkZWQpIHtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlID0gc2FtcGxlZFZhbHVlcy5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICAgICAgICBpZiAoIWR1cGxpY2F0ZSB8fCB0aGlzLmFsbG93RHVwbGljYXRlcyB8fCBoYXNDdXN0b21CdW5kbGVTZWVkKSB7XG4gICAgICAgICAgc2FtcGxlLnN0cmluZ3MucHVzaCh7XG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIFtjb21wdXRlZEtleV06IGluZGV4XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2FtcGxlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICBzYW1wbGUubmVlZGVkIC09IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2FtcGxlcztcbiAgfVxufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gU2FtcGxlc0dlbmVyYXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IHN0YXRpY1JlZ2lzdGVyO1xuY29uc3QgY29sbGVjdGlvbiA9IGV4cG9ydHMuY29sbGVjdGlvbiA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2UgZm9yIHRoZSBzdG9yYWdlLlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gc3RhdGljUmVnaXN0ZXIoKSB7XG4gIGxldCBuYW1lc3BhY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdjb21tb24nO1xuICBpZiAoIWNvbGxlY3Rpb24uaGFzKG5hbWVzcGFjZSkpIHtcbiAgICBjb2xsZWN0aW9uLnNldChuYW1lc3BhY2UsIG5ldyBNYXAoKSk7XG4gIH1cbiAgY29uc3Qgc3ViQ29sbGVjdGlvbiA9IGNvbGxlY3Rpb24uZ2V0KG5hbWVzcGFjZSk7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGl0ZW0gdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBpdGVtIHVuZGVyIHRoZSBzYW1lIHdhcyBleGlzdCBlYXJsaWVyIHRoZW4gdGhpcyBpdGVtIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBuZXcgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIHsqfSBpdGVtIEl0ZW0gdG8gc2F2ZSBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICovXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKG5hbWUsIGl0ZW0pIHtcbiAgICBzdWJDb2xsZWN0aW9uLnNldChuYW1lLCBpdGVtKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgaXRlbSBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBJZGVudGlmaWNhdGlvbiBvZiB0aGUgaXRlbS5cbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgaXRlbSB3aGljaCB3YXMgc2F2ZWQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVtKG5hbWUpIHtcbiAgICByZXR1cm4gc3ViQ29sbGVjdGlvbi5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaXRlbSB1bmRlciBzcGVjaWZpZWQgbmFtZSBpcyBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIElkZW50aWZpY2F0aW9uIG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBkZXBlbmRzIG9uIGlmIGVsZW1lbnQgZXhpc3RzIGluIHRoZSBjb2xsZWN0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gaGFzSXRlbShuYW1lKSB7XG4gICAgcmV0dXJuIHN1YkNvbGxlY3Rpb24uaGFzKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGxpc3Qgb2YgbmFtZXMgcmVnaXN0ZXJlZCBmcm9tIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYW4gYXJyYXkgb2Ygc3RyaW5ncyB3aXRoIGFsbCBuYW1lcyB1bmRlciB3aGljaCBvYmplY3RzIGFyZSBzdG9yZWQuXG4gICAqL1xuICBmdW5jdGlvbiBnZXROYW1lcygpIHtcbiAgICByZXR1cm4gWy4uLnN1YkNvbGxlY3Rpb24ua2V5cygpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbGwgcmVnaXN0ZXJlZCB2YWx1ZXMgZnJvbSB0aGUgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqL1xuICBmdW5jdGlvbiBnZXRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi5zdWJDb2xsZWN0aW9uLnZhbHVlcygpXTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyLFxuICAgIGdldEl0ZW0sXG4gICAgaGFzSXRlbSxcbiAgICBnZXROYW1lcyxcbiAgICBnZXRWYWx1ZXNcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuYXV0b2NvbXBsZXRlVmFsaWRhdG9yID0gYXV0b2NvbXBsZXRlVmFsaWRhdG9yO1xuY29uc3QgVkFMSURBVE9SX1RZUEUgPSBleHBvcnRzLlZBTElEQVRPUl9UWVBFID0gJ2F1dG9jb21wbGV0ZSc7XG5cbi8qKlxuICogVGhlIEF1dG9jb21wbGV0ZSBjZWxsIHZhbGlkYXRvci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZSBvZiBlZGl0ZWQgY2VsbC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGNhbGxlZCB3aXRoIHZhbGlkYXRpb24gcmVzdWx0LlxuICovXG5mdW5jdGlvbiBhdXRvY29tcGxldGVWYWxpZGF0b3IodmFsdWUsIGNhbGxiYWNrKSB7XG4gIGxldCB2YWx1ZVRvVmFsaWRhdGUgPSB2YWx1ZTtcbiAgaWYgKHZhbHVlVG9WYWxpZGF0ZSA9PT0gbnVsbCB8fCB2YWx1ZVRvVmFsaWRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlVG9WYWxpZGF0ZSA9ICcnO1xuICB9XG4gIGlmICh0aGlzLmFsbG93RW1wdHkgJiYgdmFsdWVUb1ZhbGlkYXRlID09PSAnJykge1xuICAgIGNhbGxiYWNrKHRydWUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGhpcy5zdHJpY3QgJiYgdGhpcy5zb3VyY2UpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuc291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNvdXJjZSh2YWx1ZVRvVmFsaWRhdGUsIHByb2Nlc3ModmFsdWVUb1ZhbGlkYXRlLCBjYWxsYmFjaykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzKHZhbHVlVG9WYWxpZGF0ZSwgY2FsbGJhY2spKHRoaXMuc291cmNlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2sodHJ1ZSk7XG4gIH1cbn1cbmF1dG9jb21wbGV0ZVZhbGlkYXRvci5WQUxJREFUT1JfVFlQRSA9IFZBTElEQVRPUl9UWVBFO1xuXG4vKipcbiAqIEZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW9uIG9mIGF1dG9jb21wbGV0ZSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIGVkaXRlZCBjZWxsLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgY2FsbGVkIHdpdGggdmFsaWRhdGlvbiByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3ModmFsdWUsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsID0gdmFsdWU7XG4gIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgZm9yIChsZXQgcyA9IDAsIHNsZW4gPSBzb3VyY2UubGVuZ3RoOyBzIDwgc2xlbjsgcysrKSB7XG4gICAgICBpZiAob3JpZ2luYWxWYWwgPT09IHNvdXJjZVtzXSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7IC8vIHBlcmZlY3QgbWF0Y2hcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNhbGxiYWNrKGZvdW5kKTtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfYXV0b2NvbXBsZXRlVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vYXV0b2NvbXBsZXRlVmFsaWRhdG9yXCIpO1xuZXhwb3J0cy5WQUxJREFUT1JfVFlQRSA9IF9hdXRvY29tcGxldGVWYWxpZGF0b3IuVkFMSURBVE9SX1RZUEU7XG5leHBvcnRzLmF1dG9jb21wbGV0ZVZhbGlkYXRvciA9IF9hdXRvY29tcGxldGVWYWxpZGF0b3IuYXV0b2NvbXBsZXRlVmFsaWRhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jb3JyZWN0Rm9ybWF0ID0gY29ycmVjdEZvcm1hdDtcbmV4cG9ydHMuZGF0ZVZhbGlkYXRvciA9IGRhdGVWYWxpZGF0b3I7XG52YXIgX21vbWVudCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm1vbWVudFwiKSk7XG52YXIgX3JlZ2lzdHJ5ID0gcmVxdWlyZShcIi4uLy4uL2VkaXRvcnMvcmVnaXN0cnlcIik7XG52YXIgX2RhdGVFZGl0b3IgPSByZXF1aXJlKFwiLi4vLi4vZWRpdG9ycy9kYXRlRWRpdG9yXCIpO1xudmFyIF9kYXRlID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvZGF0ZVwiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5jb25zdCBWQUxJREFUT1JfVFlQRSA9IGV4cG9ydHMuVkFMSURBVE9SX1RZUEUgPSAnZGF0ZSc7XG5cbi8qKlxuICogVGhlIERhdGUgY2VsbCB2YWxpZGF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBjYWxsZWQgd2l0aCB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gZGF0ZVZhbGlkYXRvcih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZGF0ZUVkaXRvciA9ICgwLCBfcmVnaXN0cnkuZ2V0RWRpdG9ySW5zdGFuY2UpKF9kYXRlRWRpdG9yLkVESVRPUl9UWVBFLCB0aGlzLmluc3RhbmNlKTtcbiAgbGV0IHZhbHVlVG9WYWxpZGF0ZSA9IHZhbHVlO1xuICBsZXQgdmFsaWQgPSB0cnVlO1xuICBpZiAodmFsdWVUb1ZhbGlkYXRlID09PSBudWxsIHx8IHZhbHVlVG9WYWxpZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsdWVUb1ZhbGlkYXRlID0gJyc7XG4gIH1cbiAgbGV0IGlzVmFsaWRGb3JtYXQgPSAoMCwgX21vbWVudC5kZWZhdWx0KSh2YWx1ZVRvVmFsaWRhdGUsIHRoaXMuZGF0ZUZvcm1hdCB8fCBkYXRlRWRpdG9yLmRlZmF1bHREYXRlRm9ybWF0LCB0cnVlKS5pc1ZhbGlkKCk7XG4gIGxldCBpc1ZhbGlkRGF0ZSA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKG5ldyBEYXRlKHZhbHVlVG9WYWxpZGF0ZSkpLmlzVmFsaWQoKSB8fCBpc1ZhbGlkRm9ybWF0O1xuICBpZiAodGhpcy5hbGxvd0VtcHR5ICYmIHZhbHVlVG9WYWxpZGF0ZSA9PT0gJycpIHtcbiAgICBpc1ZhbGlkRGF0ZSA9IHRydWU7XG4gICAgaXNWYWxpZEZvcm1hdCA9IHRydWU7XG4gIH1cbiAgaWYgKCFpc1ZhbGlkRGF0ZSkge1xuICAgIHZhbGlkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFpc1ZhbGlkRGF0ZSAmJiBpc1ZhbGlkRm9ybWF0KSB7XG4gICAgdmFsaWQgPSB0cnVlO1xuICB9XG4gIGlmIChpc1ZhbGlkRGF0ZSAmJiAhaXNWYWxpZEZvcm1hdCkge1xuICAgIGlmICh0aGlzLmNvcnJlY3RGb3JtYXQgPT09IHRydWUpIHtcbiAgICAgIC8vIGlmIGZvcm1hdCBjb3JyZWN0aW9uIGlzIGVuYWJsZWRcbiAgICAgIGNvbnN0IGNvcnJlY3RlZFZhbHVlID0gY29ycmVjdEZvcm1hdCh2YWx1ZVRvVmFsaWRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICB0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csIHRoaXMudmlzdWFsQ29sLCBjb3JyZWN0ZWRWYWx1ZSwgJ2RhdGVWYWxpZGF0b3InKTtcbiAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgY2FsbGJhY2sodmFsaWQpO1xufVxuZGF0ZVZhbGlkYXRvci5WQUxJREFUT1JfVFlQRSA9IFZBTElEQVRPUl9UWVBFO1xuXG4vKipcbiAqIEZvcm1hdCB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIG1vbWVudC5qcycgZm9ybWF0IGZlYXR1cmUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSB2YWx1ZSB0byBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCBUaGUgZGF0ZSBwYXR0ZXJuIHRvIGZvcm1hdCB0by5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvcnJlY3RGb3JtYXQodmFsdWUsIGRhdGVGb3JtYXQpIHtcbiAgY29uc3QgZGF0ZUZyb21EYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkoKDAsIF9kYXRlLmdldE5vcm1hbGl6ZWREYXRlKSh2YWx1ZSkpO1xuICBjb25zdCBkYXRlRnJvbU1vbWVudCA9ICgwLCBfbW9tZW50LmRlZmF1bHQpKHZhbHVlLCBkYXRlRm9ybWF0KTtcbiAgY29uc3QgaXNBbHBoYW51bWVyaWMgPSB2YWx1ZS5zZWFyY2goL1tBLXpdL2cpID4gLTE7XG4gIGxldCBkYXRlO1xuICBpZiAoZGF0ZUZyb21EYXRlLmlzVmFsaWQoKSAmJiBkYXRlRnJvbURhdGUuZm9ybWF0KCd4JykgPT09IGRhdGVGcm9tTW9tZW50LmZvcm1hdCgneCcpIHx8ICFkYXRlRnJvbU1vbWVudC5pc1ZhbGlkKCkgfHwgaXNBbHBoYW51bWVyaWMpIHtcbiAgICBkYXRlID0gZGF0ZUZyb21EYXRlO1xuICB9IGVsc2Uge1xuICAgIGRhdGUgPSBkYXRlRnJvbU1vbWVudDtcbiAgfVxuICByZXR1cm4gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2RhdGVWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9kYXRlVmFsaWRhdG9yXCIpO1xuZXhwb3J0cy5WQUxJREFUT1JfVFlQRSA9IF9kYXRlVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFO1xuZXhwb3J0cy5jb3JyZWN0Rm9ybWF0ID0gX2RhdGVWYWxpZGF0b3IuY29ycmVjdEZvcm1hdDtcbmV4cG9ydHMuZGF0ZVZhbGlkYXRvciA9IF9kYXRlVmFsaWRhdG9yLmRhdGVWYWxpZGF0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRyb3Bkb3duVmFsaWRhdG9yID0gZHJvcGRvd25WYWxpZGF0b3I7XG52YXIgX2F1dG9jb21wbGV0ZVZhbGlkYXRvciA9IHJlcXVpcmUoXCIuLi9hdXRvY29tcGxldGVWYWxpZGF0b3IvYXV0b2NvbXBsZXRlVmFsaWRhdG9yXCIpO1xuY29uc3QgVkFMSURBVE9SX1RZUEUgPSBleHBvcnRzLlZBTElEQVRPUl9UWVBFID0gJ2Ryb3Bkb3duJztcblxuLyoqXG4gKiBUaGUgRHJvcGRvd24gY2VsbCB2YWxpZGF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBjYWxsZWQgd2l0aCB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gZHJvcGRvd25WYWxpZGF0b3IodmFsdWUsIGNhbGxiYWNrKSB7XG4gIF9hdXRvY29tcGxldGVWYWxpZGF0b3IuYXV0b2NvbXBsZXRlVmFsaWRhdG9yLmFwcGx5KHRoaXMsIFt2YWx1ZSwgY2FsbGJhY2tdKTtcbn1cbmRyb3Bkb3duVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFID0gVkFMSURBVE9SX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgX2Ryb3Bkb3duVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vZHJvcGRvd25WYWxpZGF0b3JcIik7XG5leHBvcnRzLlZBTElEQVRPUl9UWVBFID0gX2Ryb3Bkb3duVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFO1xuZXhwb3J0cy5kcm9wZG93blZhbGlkYXRvciA9IF9kcm9wZG93blZhbGlkYXRvci5kcm9wZG93blZhbGlkYXRvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucmVnaXN0ZXJBbGxWYWxpZGF0b3JzID0gcmVnaXN0ZXJBbGxWYWxpZGF0b3JzO1xudmFyIF9hdXRvY29tcGxldGVWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi9hdXRvY29tcGxldGVWYWxpZGF0b3JcIik7XG5leHBvcnRzLmF1dG9jb21wbGV0ZVZhbGlkYXRvciA9IF9hdXRvY29tcGxldGVWYWxpZGF0b3IuYXV0b2NvbXBsZXRlVmFsaWRhdG9yO1xuZXhwb3J0cy5BVVRPQ09NUExFVEVfVkFMSURBVE9SID0gX2F1dG9jb21wbGV0ZVZhbGlkYXRvci5WQUxJREFUT1JfVFlQRTtcbnZhciBfZGF0ZVZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL2RhdGVWYWxpZGF0b3JcIik7XG5leHBvcnRzLmRhdGVWYWxpZGF0b3IgPSBfZGF0ZVZhbGlkYXRvci5kYXRlVmFsaWRhdG9yO1xuZXhwb3J0cy5EQVRFX1ZBTElEQVRPUiA9IF9kYXRlVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFO1xudmFyIF9kcm9wZG93blZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL2Ryb3Bkb3duVmFsaWRhdG9yXCIpO1xuZXhwb3J0cy5kcm9wZG93blZhbGlkYXRvciA9IF9kcm9wZG93blZhbGlkYXRvci5kcm9wZG93blZhbGlkYXRvcjtcbmV4cG9ydHMuRFJPUERPV05fVkFMSURBVE9SID0gX2Ryb3Bkb3duVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFO1xudmFyIF9udW1lcmljVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vbnVtZXJpY1ZhbGlkYXRvclwiKTtcbmV4cG9ydHMubnVtZXJpY1ZhbGlkYXRvciA9IF9udW1lcmljVmFsaWRhdG9yLm51bWVyaWNWYWxpZGF0b3I7XG5leHBvcnRzLk5VTUVSSUNfVkFMSURBVE9SID0gX251bWVyaWNWYWxpZGF0b3IuVkFMSURBVE9SX1RZUEU7XG52YXIgX3RpbWVWYWxpZGF0b3IgPSByZXF1aXJlKFwiLi90aW1lVmFsaWRhdG9yXCIpO1xuZXhwb3J0cy50aW1lVmFsaWRhdG9yID0gX3RpbWVWYWxpZGF0b3IudGltZVZhbGlkYXRvcjtcbmV4cG9ydHMuVElNRV9WQUxJREFUT1IgPSBfdGltZVZhbGlkYXRvci5WQUxJREFUT1JfVFlQRTtcbnZhciBfcmVnaXN0cnkgPSByZXF1aXJlKFwiLi9yZWdpc3RyeVwiKTtcbmV4cG9ydHMucmVnaXN0ZXJWYWxpZGF0b3IgPSBfcmVnaXN0cnkucmVnaXN0ZXJWYWxpZGF0b3I7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRWYWxpZGF0b3JOYW1lcyA9IF9yZWdpc3RyeS5nZXRSZWdpc3RlcmVkVmFsaWRhdG9yTmFtZXM7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRWYWxpZGF0b3JzID0gX3JlZ2lzdHJ5LmdldFJlZ2lzdGVyZWRWYWxpZGF0b3JzO1xuZXhwb3J0cy5nZXRWYWxpZGF0b3IgPSBfcmVnaXN0cnkuZ2V0VmFsaWRhdG9yO1xuZXhwb3J0cy5oYXNWYWxpZGF0b3IgPSBfcmVnaXN0cnkuaGFzVmFsaWRhdG9yO1xuLyoqXG4gKiBSZWdpc3RlcnMgYWxsIGF2YWlsYWJsZSB2YWxpZGF0b3JzLlxuICovXG5mdW5jdGlvbiByZWdpc3RlckFsbFZhbGlkYXRvcnMoKSB7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJWYWxpZGF0b3IpKF9hdXRvY29tcGxldGVWYWxpZGF0b3IuYXV0b2NvbXBsZXRlVmFsaWRhdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclZhbGlkYXRvcikoX2Ryb3Bkb3duVmFsaWRhdG9yLmRyb3Bkb3duVmFsaWRhdG9yKTtcbiAgKDAsIF9yZWdpc3RyeS5yZWdpc3RlclZhbGlkYXRvcikoX2RhdGVWYWxpZGF0b3IuZGF0ZVZhbGlkYXRvcik7XG4gICgwLCBfcmVnaXN0cnkucmVnaXN0ZXJWYWxpZGF0b3IpKF9udW1lcmljVmFsaWRhdG9yLm51bWVyaWNWYWxpZGF0b3IpO1xuICAoMCwgX3JlZ2lzdHJ5LnJlZ2lzdGVyVmFsaWRhdG9yKShfdGltZVZhbGlkYXRvci50aW1lVmFsaWRhdG9yKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBfbnVtZXJpY1ZhbGlkYXRvciA9IHJlcXVpcmUoXCIuL251bWVyaWNWYWxpZGF0b3JcIik7XG5leHBvcnRzLlZBTElEQVRPUl9UWVBFID0gX251bWVyaWNWYWxpZGF0b3IuVkFMSURBVE9SX1RZUEU7XG5leHBvcnRzLm51bWVyaWNWYWxpZGF0b3IgPSBfbnVtZXJpY1ZhbGlkYXRvci5udW1lcmljVmFsaWRhdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5udW1lcmljVmFsaWRhdG9yID0gbnVtZXJpY1ZhbGlkYXRvcjtcbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL2hlbHBlcnMvbnVtYmVyXCIpO1xuY29uc3QgVkFMSURBVE9SX1RZUEUgPSBleHBvcnRzLlZBTElEQVRPUl9UWVBFID0gJ251bWVyaWMnO1xuXG4vKipcbiAqIFRoZSBOdW1lcmljIGNlbGwgdmFsaWRhdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIG9mIGVkaXRlZCBjZWxsLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgY2FsbGVkIHdpdGggdmFsaWRhdGlvbiByZXN1bHQuXG4gKi9cbmZ1bmN0aW9uIG51bWVyaWNWYWxpZGF0b3IodmFsdWUsIGNhbGxiYWNrKSB7XG4gIGxldCB2YWx1ZVRvVmFsaWRhdGUgPSB2YWx1ZTtcbiAgaWYgKHZhbHVlVG9WYWxpZGF0ZSA9PT0gbnVsbCB8fCB2YWx1ZVRvVmFsaWRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHZhbHVlVG9WYWxpZGF0ZSA9ICcnO1xuICB9XG4gIGlmICh0aGlzLmFsbG93RW1wdHkgJiYgdmFsdWVUb1ZhbGlkYXRlID09PSAnJykge1xuICAgIGNhbGxiYWNrKHRydWUpO1xuICB9IGVsc2UgaWYgKHZhbHVlVG9WYWxpZGF0ZSA9PT0gJycpIHtcbiAgICBjYWxsYmFjayhmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKDAsIF9udW1iZXIuaXNOdW1lcmljKSh2YWx1ZSkpO1xuICB9XG59XG5udW1lcmljVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFID0gVkFMSURBVE9SX1RZUEU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmdldFZhbGlkYXRvciA9IF9nZXRJdGVtO1xuZXhwb3J0cy5yZWdpc3RlclZhbGlkYXRvciA9IF9yZWdpc3RlcjtcbnJlcXVpcmUoXCJjb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanNcIik7XG52YXIgX3N0YXRpY1JlZ2lzdGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi4vdXRpbHMvc3RhdGljUmVnaXN0ZXJcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbmNvbnN0IHtcbiAgcmVnaXN0ZXIsXG4gIGdldEl0ZW0sXG4gIGhhc0l0ZW0sXG4gIGdldE5hbWVzLFxuICBnZXRWYWx1ZXNcbn0gPSAoMCwgX3N0YXRpY1JlZ2lzdGVyLmRlZmF1bHQpKCd2YWxpZGF0b3JzJyk7XG5cbi8qKlxuICogUmV0cmlldmUgdmFsaWRhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFZhbGlkYXRvciBpZGVudGlmaWNhdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB2YWxpZGF0b3IgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydHMuZ2V0UmVnaXN0ZXJlZFZhbGlkYXRvcnMgPSBnZXRWYWx1ZXM7XG5leHBvcnRzLmdldFJlZ2lzdGVyZWRWYWxpZGF0b3JOYW1lcyA9IGdldE5hbWVzO1xuZXhwb3J0cy5oYXNWYWxpZGF0b3IgPSBoYXNJdGVtO1xuZnVuY3Rpb24gX2dldEl0ZW0obmFtZSkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICBpZiAoIWhhc0l0ZW0obmFtZSkpIHtcbiAgICB0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgXCIke25hbWV9XCIgbmFtZWApO1xuICB9XG4gIHJldHVybiBnZXRJdGVtKG5hbWUpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHZhbGlkYXRvciB1bmRlciBpdHMgYWxpYXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8RnVuY3Rpb259IG5hbWUgVmFsaWRhdG9yJ3MgYWxpYXMgb3IgdmFsaWRhdG9yIGZ1bmN0aW9uIHdpdGggaXRzIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbdmFsaWRhdG9yXSBWYWxpZGF0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIF9yZWdpc3RlcihuYW1lLCB2YWxpZGF0b3IpIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHZhbGlkYXRvciA9IG5hbWU7XG4gICAgbmFtZSA9IHZhbGlkYXRvci5WQUxJREFUT1JfVFlQRTtcbiAgfVxuICByZWdpc3RlcihuYW1lLCB2YWxpZGF0b3IpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIF90aW1lVmFsaWRhdG9yID0gcmVxdWlyZShcIi4vdGltZVZhbGlkYXRvclwiKTtcbmV4cG9ydHMuVkFMSURBVE9SX1RZUEUgPSBfdGltZVZhbGlkYXRvci5WQUxJREFUT1JfVFlQRTtcbmV4cG9ydHMudGltZVZhbGlkYXRvciA9IF90aW1lVmFsaWRhdG9yLnRpbWVWYWxpZGF0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnRpbWVWYWxpZGF0b3IgPSB0aW1lVmFsaWRhdG9yO1xudmFyIF9tb21lbnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJtb21lbnRcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cbi8vIEZvcm1hdHMgd2hpY2ggYXJlIGNvcnJlY3RseSBwYXJzZWQgdG8gdGltZSAoc3VwcG9ydGVkIGJ5IG1vbWVudGpzKVxuY29uc3QgU1RSSUNUX0ZPUk1BVFMgPSBbJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTWicsICdYJyxcbi8vIFVuaXggdGltZXN0YW1wXG4neCcgLy8gVW5peCBtcyB0aW1lc3RhbXBcbl07XG5jb25zdCBWQUxJREFUT1JfVFlQRSA9IGV4cG9ydHMuVkFMSURBVE9SX1RZUEUgPSAndGltZSc7XG5cbi8qKlxuICogVGhlIFRpbWUgY2VsbCB2YWxpZGF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWUgb2YgZWRpdGVkIGNlbGwuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayBjYWxsZWQgd2l0aCB2YWxpZGF0aW9uIHJlc3VsdC5cbiAqL1xuZnVuY3Rpb24gdGltZVZhbGlkYXRvcih2YWx1ZSwgY2FsbGJhY2spIHtcbiAgY29uc3QgdGltZUZvcm1hdCA9IHRoaXMudGltZUZvcm1hdCB8fCAnaDptbTpzcyBhJztcbiAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgbGV0IHZhbHVlVG9WYWxpZGF0ZSA9IHZhbHVlO1xuICBpZiAodmFsdWVUb1ZhbGlkYXRlID09PSBudWxsKSB7XG4gICAgdmFsdWVUb1ZhbGlkYXRlID0gJyc7XG4gIH1cbiAgdmFsdWVUb1ZhbGlkYXRlID0gL15cXGR7Myx9JC8udGVzdCh2YWx1ZVRvVmFsaWRhdGUpID8gcGFyc2VJbnQodmFsdWVUb1ZhbGlkYXRlLCAxMCkgOiB2YWx1ZVRvVmFsaWRhdGU7XG4gIGNvbnN0IHR3b0RpZ2l0VmFsdWUgPSAvXlxcZHsxLDJ9JC8udGVzdCh2YWx1ZVRvVmFsaWRhdGUpO1xuICBpZiAodHdvRGlnaXRWYWx1ZSkge1xuICAgIHZhbHVlVG9WYWxpZGF0ZSArPSAnOjAwJztcbiAgfVxuICBjb25zdCBkYXRlID0gKDAsIF9tb21lbnQuZGVmYXVsdCkodmFsdWVUb1ZhbGlkYXRlLCBTVFJJQ1RfRk9STUFUUywgdHJ1ZSkuaXNWYWxpZCgpID8gKDAsIF9tb21lbnQuZGVmYXVsdCkodmFsdWVUb1ZhbGlkYXRlKSA6ICgwLCBfbW9tZW50LmRlZmF1bHQpKHZhbHVlVG9WYWxpZGF0ZSwgdGltZUZvcm1hdCk7XG4gIGxldCBpc1ZhbGlkVGltZSA9IGRhdGUuaXNWYWxpZCgpO1xuXG4gIC8vIGlzIGl0IGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0XG4gIGxldCBpc1ZhbGlkRm9ybWF0ID0gKDAsIF9tb21lbnQuZGVmYXVsdCkodmFsdWVUb1ZhbGlkYXRlLCB0aW1lRm9ybWF0LCB0cnVlKS5pc1ZhbGlkKCkgJiYgIXR3b0RpZ2l0VmFsdWU7XG4gIGlmICh0aGlzLmFsbG93RW1wdHkgJiYgdmFsdWVUb1ZhbGlkYXRlID09PSAnJykge1xuICAgIGlzVmFsaWRUaW1lID0gdHJ1ZTtcbiAgICBpc1ZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgfVxuICBpZiAoIWlzVmFsaWRUaW1lKSB7XG4gICAgdmFsaWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWlzVmFsaWRUaW1lICYmIGlzVmFsaWRGb3JtYXQpIHtcbiAgICB2YWxpZCA9IHRydWU7XG4gIH1cbiAgaWYgKGlzVmFsaWRUaW1lICYmICFpc1ZhbGlkRm9ybWF0KSB7XG4gICAgaWYgKHRoaXMuY29ycmVjdEZvcm1hdCA9PT0gdHJ1ZSkge1xuICAgICAgLy8gaWYgZm9ybWF0IGNvcnJlY3Rpb24gaXMgZW5hYmxlZFxuICAgICAgY29uc3QgY29ycmVjdGVkVmFsdWUgPSBkYXRlLmZvcm1hdCh0aW1lRm9ybWF0KTtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbCh0aGlzLnZpc3VhbFJvdywgdGhpcy52aXN1YWxDb2wsIGNvcnJlY3RlZFZhbHVlLCAndGltZVZhbGlkYXRvcicpO1xuICAgICAgdmFsaWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjayh2YWxpZCk7XG59XG50aW1lVmFsaWRhdG9yLlZBTElEQVRPUl9UWVBFID0gVkFMSURBVE9SX1RZUEU7IiwiLy8gTW9kdWxlOiBAeG1sZG9tL3htbGRvbUAwLjguNlxuLy8gTGljZW5zZTogTUlUXG4vL1xuLy8gTW9kdWxlOiBiYXNlNjQtanNAMS41LjFcbi8vIExpY2Vuc2U6IE1JVFxuLy9cbi8vIE1vZHVsZTogYmx1ZWJpcmRAMy40Ljdcbi8vIExpY2Vuc2U6IE1JVFxuLy9cbi8vIE1vZHVsZTogYnVmZmVyQDQuOS4xXG4vLyBMaWNlbnNlOiBNSVRcbi8vXG4vLyBNb2R1bGU6IGRpbmdiYXQtdG8tdW5pY29kZUAxLjAuMVxuLy8gTGljZW5zZTogQlNELTItQ2xhdXNlXG4vL1xuLy8gTW9kdWxlOiBpZWVlNzU0QDEuMS44XG4vLyBMaWNlbnNlOiBCU0QtMy1DbGF1c2Vcbi8vXG4vLyBNb2R1bGU6IGluaGVyaXRzQDIuMC4xXG4vLyBMaWNlbnNlOiBJU0Ncbi8vXG4vLyBNb2R1bGU6IGlzYXJyYXlAMS4wLjBcbi8vIExpY2Vuc2U6IE1JVFxuLy9cbi8vIE1vZHVsZToganN6aXBAMy43LjFcbi8vIExpY2Vuc2U6IChNSVQgT1IgR1BMLTMuMC1vci1sYXRlcilcbi8vXG4vLyBNb2R1bGU6IGxvcEAwLjQuMVxuLy8gTGljZW5zZTogQlNELTItQ2xhdXNlXG4vL1xuLy8gTW9kdWxlOiBtYW1tb3RoQDEuOC4wXG4vLyBMaWNlbnNlOiBCU0QtMi1DbGF1c2Vcbi8vXG4vLyBNb2R1bGU6IG9wdGlvbkAwLjIuNFxuLy8gTGljZW5zZTogQlNELTItQ2xhdXNlXG4vL1xuLy8gTW9kdWxlOiBwcm9jZXNzQDAuMTEuOVxuLy8gTGljZW5zZTogTUlUXG4vL1xuLy8gTW9kdWxlOiB1bmRlcnNjb3JlQDEuMTMuMVxuLy8gTGljZW5zZTogTUlUXG4vL1xuLy8gTW9kdWxlOiB1dGlsQDAuMTAuM1xuLy8gTGljZW5zZTogTUlUXG4vL1xuLy8gTW9kdWxlOiB4bWxidWlsZGVyQDEwLjAuMFxuLy8gTGljZW5zZTogTUlUXG4vL1xuKGZ1bmN0aW9uKGYpe2lmKHR5cGVvZiBleHBvcnRzPT09XCJvYmplY3RcIiYmdHlwZW9mIG1vZHVsZSE9PVwidW5kZWZpbmVkXCIpe21vZHVsZS5leHBvcnRzPWYoKX1lbHNlIGlmKHR5cGVvZiBkZWZpbmU9PT1cImZ1bmN0aW9uXCImJmRlZmluZS5hbWQpe2RlZmluZShbXSxmKX1lbHNle3ZhciBnO2lmKHR5cGVvZiB3aW5kb3chPT1cInVuZGVmaW5lZFwiKXtnPXdpbmRvd31lbHNlIGlmKHR5cGVvZiBnbG9iYWwhPT1cInVuZGVmaW5lZFwiKXtnPWdsb2JhbH1lbHNlIGlmKHR5cGVvZiBzZWxmIT09XCJ1bmRlZmluZWRcIil7Zz1zZWxmfWVsc2V7Zz10aGlzfWcubWFtbW90aCA9IGYoKX19KShmdW5jdGlvbigpe3ZhciBkZWZpbmUsbW9kdWxlLGV4cG9ydHM7cmV0dXJuIChmdW5jdGlvbiBlKHQsbixyKXtmdW5jdGlvbiBzKG8sdSl7aWYoIW5bb10pe2lmKCF0W29dKXt2YXIgYT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2lmKCF1JiZhKXJldHVybiBhKG8sITApO2lmKGkpcmV0dXJuIGkobywhMCk7dmFyIGY9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitvK1wiJ1wiKTt0aHJvdyBmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsZn12YXIgbD1uW29dPXtleHBvcnRzOnt9fTt0W29dWzBdLmNhbGwobC5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciBuPXRbb11bMV1bZV07cmV0dXJuIHMobj9uOmUpfSxsLGwuZXhwb3J0cyxlLHQsbixyKX1yZXR1cm4gbltvXS5leHBvcnRzfXZhciBpPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspcyhyW29dKTtyZXR1cm4gc30pKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBwcm9taXNlcyA9IHJlcXVpcmUoXCIuLi8uLi9saWIvcHJvbWlzZXNcIik7XG5cbmV4cG9ydHMuRmlsZXMgPSBGaWxlcztcblxuXG5mdW5jdGlvbiBGaWxlcygpIHtcbiAgICBmdW5jdGlvbiByZWFkKHVyaSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZXMucmVqZWN0KG5ldyBFcnJvcihcImNvdWxkIG5vdCBvcGVuIGV4dGVybmFsIGltYWdlOiAnXCIgKyB1cmkgKyBcIidcXG5jYW5ub3Qgb3BlbiBsaW5rZWQgZmlsZXMgZnJvbSBhIHdlYiBicm93c2VyXCIpKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVhZDogcmVhZFxuICAgIH07XG59XG5cbn0se1wiLi4vLi4vbGliL3Byb21pc2VzXCI6MjN9XSwyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBwcm9taXNlcyA9IHJlcXVpcmUoXCIuLi9saWIvcHJvbWlzZXNcIik7XG52YXIgemlwZmlsZSA9IHJlcXVpcmUoXCIuLi9saWIvemlwZmlsZVwiKTtcblxuZXhwb3J0cy5vcGVuWmlwID0gb3BlblppcDtcblxuZnVuY3Rpb24gb3BlblppcChvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VzLnJlc29sdmUoemlwZmlsZS5vcGVuQXJyYXlCdWZmZXIob3B0aW9ucy5hcnJheUJ1ZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlcy5yZWplY3QobmV3IEVycm9yKFwiQ291bGQgbm90IGZpbmQgZmlsZSBpbiBvcHRpb25zXCIpKTtcbiAgICB9XG59XG5cbn0se1wiLi4vbGliL3Byb21pc2VzXCI6MjMsXCIuLi9saWIvemlwZmlsZVwiOjQwfV0sMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgXyA9IHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpO1xuXG52YXIgcHJvbWlzZXMgPSByZXF1aXJlKFwiLi9wcm9taXNlc1wiKTtcbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi9kb2N1bWVudHNcIik7XG52YXIgaHRtbFBhdGhzID0gcmVxdWlyZShcIi4vc3R5bGVzL2h0bWwtcGF0aHNcIik7XG52YXIgcmVzdWx0cyA9IHJlcXVpcmUoXCIuL3Jlc3VsdHNcIik7XG52YXIgaW1hZ2VzID0gcmVxdWlyZShcIi4vaW1hZ2VzXCIpO1xudmFyIEh0bWwgPSByZXF1aXJlKFwiLi9odG1sXCIpO1xudmFyIHdyaXRlcnMgPSByZXF1aXJlKFwiLi93cml0ZXJzXCIpO1xuXG5leHBvcnRzLkRvY3VtZW50Q29udmVydGVyID0gRG9jdW1lbnRDb252ZXJ0ZXI7XG5cblxuZnVuY3Rpb24gRG9jdW1lbnRDb252ZXJ0ZXIob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnZlcnRUb0h0bWw6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBjb21tZW50cyA9IF8uaW5kZXhCeShcbiAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPT09IGRvY3VtZW50cy50eXBlcy5kb2N1bWVudCA/IGVsZW1lbnQuY29tbWVudHMgOiBbXSxcbiAgICAgICAgICAgICAgICBcImNvbW1lbnRJZFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb24gPSBuZXcgRG9jdW1lbnRDb252ZXJzaW9uKG9wdGlvbnMsIGNvbW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uLmNvbnZlcnRUb0h0bWwoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBEb2N1bWVudENvbnZlcnNpb24ob3B0aW9ucywgY29tbWVudHMpIHtcbiAgICB2YXIgbm90ZU51bWJlciA9IDE7XG5cbiAgICB2YXIgbm90ZVJlZmVyZW5jZXMgPSBbXTtcblxuICAgIHZhciByZWZlcmVuY2VkQ29tbWVudHMgPSBbXTtcblxuICAgIG9wdGlvbnMgPSBfLmV4dGVuZCh7aWdub3JlRW1wdHlQYXJhZ3JhcGhzOiB0cnVlfSwgb3B0aW9ucyk7XG4gICAgdmFyIGlkUHJlZml4ID0gb3B0aW9ucy5pZFByZWZpeCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IG9wdGlvbnMuaWRQcmVmaXg7XG4gICAgdmFyIGlnbm9yZUVtcHR5UGFyYWdyYXBocyA9IG9wdGlvbnMuaWdub3JlRW1wdHlQYXJhZ3JhcGhzO1xuXG4gICAgdmFyIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSA9IGh0bWxQYXRocy50b3BMZXZlbEVsZW1lbnQoXCJwXCIpO1xuXG4gICAgdmFyIHN0eWxlTWFwID0gb3B0aW9ucy5zdHlsZU1hcCB8fCBbXTtcblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRUb0h0bWwoZG9jdW1lbnQpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2VzID0gW107XG5cbiAgICAgICAgdmFyIGh0bWwgPSBlbGVtZW50VG9IdG1sKGRvY3VtZW50LCBtZXNzYWdlcywge30pO1xuXG4gICAgICAgIHZhciBkZWZlcnJlZE5vZGVzID0gW107XG4gICAgICAgIHdhbGtIdG1sKGh0bWwsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiZGVmZXJyZWRcIikge1xuICAgICAgICAgICAgICAgIGRlZmVycmVkTm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBkZWZlcnJlZFZhbHVlcyA9IHt9O1xuICAgICAgICByZXR1cm4gcHJvbWlzZXMubWFwU2VyaWVzKGRlZmVycmVkTm9kZXMsIGZ1bmN0aW9uKGRlZmVycmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQudmFsdWUoKS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZGVmZXJyZWRWYWx1ZXNbZGVmZXJyZWQuaWRdID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VEZWZlcnJlZChub2Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmbGF0TWFwKG5vZGVzLCBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IFwiZGVmZXJyZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkVmFsdWVzW25vZGUuaWRdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5leHRlbmQoe30sIG5vZGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHJlcGxhY2VEZWZlcnJlZChub2RlLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtub2RlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHdyaXRlciA9IHdyaXRlcnMud3JpdGVyKHtcbiAgICAgICAgICAgICAgICBwcmV0dHlQcmludDogb3B0aW9ucy5wcmV0dHlQcmludCxcbiAgICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ6IG9wdGlvbnMub3V0cHV0Rm9ybWF0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIEh0bWwud3JpdGUod3JpdGVyLCBIdG1sLnNpbXBsaWZ5KHJlcGxhY2VEZWZlcnJlZChodG1sKSkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyByZXN1bHRzLlJlc3VsdCh3cml0ZXIuYXNTdHJpbmcoKSwgbWVzc2FnZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0RWxlbWVudHMoZWxlbWVudHMsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBmbGF0TWFwKGVsZW1lbnRzLCBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFRvSHRtbChlbGVtZW50LCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVsZW1lbnRUb0h0bWwoZWxlbWVudCwgbWVzc2FnZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIG5vdCBzZXRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhhbmRsZXIgPSBlbGVtZW50Q29udmVydGVyc1tlbGVtZW50LnR5cGVdO1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXIoZWxlbWVudCwgbWVzc2FnZXMsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydFBhcmFncmFwaChlbGVtZW50LCBtZXNzYWdlcywgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gaHRtbFBhdGhGb3JQYXJhZ3JhcGgoZWxlbWVudCwgbWVzc2FnZXMpLndyYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY29udGVudCA9IGNvbnZlcnRFbGVtZW50cyhlbGVtZW50LmNoaWxkcmVuLCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoaWdub3JlRW1wdHlQYXJhZ3JhcGhzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBbSHRtbC5mb3JjZVdyaXRlXS5jb25jYXQoY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh0bWxQYXRoRm9yUGFyYWdyYXBoKGVsZW1lbnQsIG1lc3NhZ2VzKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IGZpbmRTdHlsZShlbGVtZW50KTtcblxuICAgICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZS50bztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnN0eWxlSWQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHVucmVjb2duaXNlZFN0eWxlV2FybmluZyhcInBhcmFncmFwaFwiLCBlbGVtZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFBhcmFncmFwaFN0eWxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydFJ1bihydW4sIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBub2RlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRFbGVtZW50cyhydW4uY2hpbGRyZW4sIG1lc3NhZ2VzLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHBhdGhzID0gW107XG4gICAgICAgIGlmIChydW4uaGlnaGxpZ2h0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCA9IGZpbmRIdG1sUGF0aCh7dHlwZTogXCJoaWdobGlnaHRcIiwgY29sb3I6IHJ1bi5oaWdobGlnaHR9KTtcbiAgICAgICAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgcGF0aHMucHVzaChwYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocnVuLmlzU21hbGxDYXBzKSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGZpbmRIdG1sUGF0aEZvclJ1blByb3BlcnR5KFwic21hbGxDYXBzXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVuLmlzQWxsQ2Fwcykge1xuICAgICAgICAgICAgcGF0aHMucHVzaChmaW5kSHRtbFBhdGhGb3JSdW5Qcm9wZXJ0eShcImFsbENhcHNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW4uaXNTdHJpa2V0aHJvdWdoKSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGZpbmRIdG1sUGF0aEZvclJ1blByb3BlcnR5KFwic3RyaWtldGhyb3VnaFwiLCBcInNcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW4uaXNVbmRlcmxpbmUpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goZmluZEh0bWxQYXRoRm9yUnVuUHJvcGVydHkoXCJ1bmRlcmxpbmVcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW4udmVydGljYWxBbGlnbm1lbnQgPT09IGRvY3VtZW50cy52ZXJ0aWNhbEFsaWdubWVudC5zdWJzY3JpcHQpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goaHRtbFBhdGhzLmVsZW1lbnQoXCJzdWJcIiwge30sIHtmcmVzaDogZmFsc2V9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bi52ZXJ0aWNhbEFsaWdubWVudCA9PT0gZG9jdW1lbnRzLnZlcnRpY2FsQWxpZ25tZW50LnN1cGVyc2NyaXB0KSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGh0bWxQYXRocy5lbGVtZW50KFwic3VwXCIsIHt9LCB7ZnJlc2g6IGZhbHNlfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChydW4uaXNJdGFsaWMpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goZmluZEh0bWxQYXRoRm9yUnVuUHJvcGVydHkoXCJpdGFsaWNcIiwgXCJlbVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bi5pc0JvbGQpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goZmluZEh0bWxQYXRoRm9yUnVuUHJvcGVydHkoXCJib2xkXCIsIFwic3Ryb25nXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3R5bGVQYXRoID0gaHRtbFBhdGhzLmVtcHR5O1xuICAgICAgICB2YXIgc3R5bGUgPSBmaW5kU3R5bGUocnVuKTtcbiAgICAgICAgaWYgKHN0eWxlKSB7XG4gICAgICAgICAgICBzdHlsZVBhdGggPSBzdHlsZS50bztcbiAgICAgICAgfSBlbHNlIGlmIChydW4uc3R5bGVJZCkge1xuICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh1bnJlY29nbmlzZWRTdHlsZVdhcm5pbmcoXCJydW5cIiwgcnVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aHMucHVzaChzdHlsZVBhdGgpO1xuXG4gICAgICAgIHBhdGhzLmZvckVhY2goZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICAgICAgbm9kZXMgPSBwYXRoLndyYXAuYmluZChwYXRoLCBub2Rlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBub2RlcygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRIdG1sUGF0aEZvclJ1blByb3BlcnR5KGVsZW1lbnRUeXBlLCBkZWZhdWx0VGFnTmFtZSkge1xuICAgICAgICB2YXIgcGF0aCA9IGZpbmRIdG1sUGF0aCh7dHlwZTogZWxlbWVudFR5cGV9KTtcbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoO1xuICAgICAgICB9IGVsc2UgaWYgKGRlZmF1bHRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbFBhdGhzLmVsZW1lbnQoZGVmYXVsdFRhZ05hbWUsIHt9LCB7ZnJlc2g6IGZhbHNlfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbFBhdGhzLmVtcHR5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEh0bWxQYXRoKGVsZW1lbnQsIGRlZmF1bHRQYXRoKSB7XG4gICAgICAgIHZhciBzdHlsZSA9IGZpbmRTdHlsZShlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIHN0eWxlID8gc3R5bGUudG8gOiBkZWZhdWx0UGF0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kU3R5bGUoZWxlbWVudCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlTWFwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoc3R5bGVNYXBbaV0uZnJvbS5tYXRjaGVzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlTWFwW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVjb3ZlcmluZ0NvbnZlcnRJbWFnZShjb252ZXJ0SW1hZ2UpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGltYWdlLCBtZXNzYWdlcykge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2VzLmF0dGVtcHQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRJbWFnZShpbWFnZSwgbWVzc2FnZXMpO1xuICAgICAgICAgICAgfSkuY2F1Z2h0KGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZXMucHVzaChyZXN1bHRzLmVycm9yKGVycm9yKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm90ZUh0bWxJZChub3RlKSB7XG4gICAgICAgIHJldHVybiByZWZlcmVudEh0bWxJZChub3RlLm5vdGVUeXBlLCBub3RlLm5vdGVJZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm90ZVJlZkh0bWxJZChub3RlKSB7XG4gICAgICAgIHJldHVybiByZWZlcmVuY2VIdG1sSWQobm90ZS5ub3RlVHlwZSwgbm90ZS5ub3RlSWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZmVyZW50SHRtbElkKHJlZmVyZW5jZVR5cGUsIHJlZmVyZW5jZUlkKSB7XG4gICAgICAgIHJldHVybiBodG1sSWQocmVmZXJlbmNlVHlwZSArIFwiLVwiICsgcmVmZXJlbmNlSWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZmVyZW5jZUh0bWxJZChyZWZlcmVuY2VUeXBlLCByZWZlcmVuY2VJZCkge1xuICAgICAgICByZXR1cm4gaHRtbElkKHJlZmVyZW5jZVR5cGUgKyBcIi1yZWYtXCIgKyByZWZlcmVuY2VJZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHRtbElkKHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gaWRQcmVmaXggKyBzdWZmaXg7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRUYWJsZVBhdGggPSBodG1sUGF0aHMuZWxlbWVudHMoW1xuICAgICAgICBodG1sUGF0aHMuZWxlbWVudChcInRhYmxlXCIsIHt9LCB7ZnJlc2g6IHRydWV9KVxuICAgIF0pO1xuXG4gICAgZnVuY3Rpb24gY29udmVydFRhYmxlKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBmaW5kSHRtbFBhdGgoZWxlbWVudCwgZGVmYXVsdFRhYmxlUGF0aCkud3JhcChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VGFibGVDaGlsZHJlbihlbGVtZW50LCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRUYWJsZUNoaWxkcmVuKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBib2R5SW5kZXggPSBfLmZpbmRJbmRleChlbGVtZW50LmNoaWxkcmVuLCBmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuICFjaGlsZC50eXBlID09PSBkb2N1bWVudHMudHlwZXMudGFibGVSb3cgfHwgIWNoaWxkLmlzSGVhZGVyO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGJvZHlJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIGJvZHlJbmRleCA9IGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjaGlsZHJlbjtcbiAgICAgICAgaWYgKGJvZHlJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgICAgICBfLmV4dGVuZCh7fSwgb3B0aW9ucywge2lzVGFibGVIZWFkZXI6IGZhbHNlfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaGVhZFJvd3MgPSBjb252ZXJ0RWxlbWVudHMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5zbGljZSgwLCBib2R5SW5kZXgpLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgIF8uZXh0ZW5kKHt9LCBvcHRpb25zLCB7aXNUYWJsZUhlYWRlcjogdHJ1ZX0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdmFyIGJvZHlSb3dzID0gY29udmVydEVsZW1lbnRzKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4uc2xpY2UoYm9keUluZGV4KSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgICAgICAgICBfLmV4dGVuZCh7fSwgb3B0aW9ucywge2lzVGFibGVIZWFkZXI6IGZhbHNlfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IFtcbiAgICAgICAgICAgICAgICBIdG1sLmZyZXNoRWxlbWVudChcInRoZWFkXCIsIHt9LCBoZWFkUm93cyksXG4gICAgICAgICAgICAgICAgSHRtbC5mcmVzaEVsZW1lbnQoXCJ0Ym9keVwiLCB7fSwgYm9keVJvd3MpXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbSHRtbC5mb3JjZVdyaXRlXS5jb25jYXQoY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRUYWJsZVJvdyhlbGVtZW50LCBtZXNzYWdlcywgb3B0aW9ucykge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbiwgbWVzc2FnZXMsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgSHRtbC5mcmVzaEVsZW1lbnQoXCJ0clwiLCB7fSwgW0h0bWwuZm9yY2VXcml0ZV0uY29uY2F0KGNoaWxkcmVuKSlcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0VGFibGVDZWxsKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciB0YWdOYW1lID0gb3B0aW9ucy5pc1RhYmxlSGVhZGVyID8gXCJ0aFwiIDogXCJ0ZFwiO1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbiwgbWVzc2FnZXMsIG9wdGlvbnMpO1xuICAgICAgICB2YXIgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBpZiAoZWxlbWVudC5jb2xTcGFuICE9PSAxKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmNvbHNwYW4gPSBlbGVtZW50LmNvbFNwYW4udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWxlbWVudC5yb3dTcGFuICE9PSAxKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLnJvd3NwYW4gPSBlbGVtZW50LnJvd1NwYW4udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBIdG1sLmZyZXNoRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCBbSHRtbC5mb3JjZVdyaXRlXS5jb25jYXQoY2hpbGRyZW4pKVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRDb21tZW50UmVmZXJlbmNlKHJlZmVyZW5jZSwgbWVzc2FnZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRIdG1sUGF0aChyZWZlcmVuY2UsIGh0bWxQYXRocy5pZ25vcmUpLndyYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgY29tbWVudCA9IGNvbW1lbnRzW3JlZmVyZW5jZS5jb21tZW50SWRdO1xuICAgICAgICAgICAgdmFyIGNvdW50ID0gcmVmZXJlbmNlZENvbW1lbnRzLmxlbmd0aCArIDE7XG4gICAgICAgICAgICB2YXIgbGFiZWwgPSBcIltcIiArIGNvbW1lbnRBdXRob3JMYWJlbChjb21tZW50KSArIGNvdW50ICsgXCJdXCI7XG4gICAgICAgICAgICByZWZlcmVuY2VkQ29tbWVudHMucHVzaCh7bGFiZWw6IGxhYmVsLCBjb21tZW50OiBjb21tZW50fSk7XG4gICAgICAgICAgICAvLyBUT0RPOiByZW1vdmUgZHVwbGljYXRpb24gd2l0aCBub3RlIHJlZmVyZW5jZXNcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgSHRtbC5mcmVzaEVsZW1lbnQoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogXCIjXCIgKyByZWZlcmVudEh0bWxJZChcImNvbW1lbnRcIiwgcmVmZXJlbmNlLmNvbW1lbnRJZCksXG4gICAgICAgICAgICAgICAgICAgIGlkOiByZWZlcmVuY2VIdG1sSWQoXCJjb21tZW50XCIsIHJlZmVyZW5jZS5jb21tZW50SWQpXG4gICAgICAgICAgICAgICAgfSwgW0h0bWwudGV4dChsYWJlbCldKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydENvbW1lbnQocmVmZXJlbmNlZENvbW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBkdXBsaWNhdGlvbiB3aXRoIG5vdGUgcmVmZXJlbmNlc1xuXG4gICAgICAgIHZhciBsYWJlbCA9IHJlZmVyZW5jZWRDb21tZW50LmxhYmVsO1xuICAgICAgICB2YXIgY29tbWVudCA9IHJlZmVyZW5jZWRDb21tZW50LmNvbW1lbnQ7XG4gICAgICAgIHZhciBib2R5ID0gY29udmVydEVsZW1lbnRzKGNvbW1lbnQuYm9keSwgbWVzc2FnZXMsIG9wdGlvbnMpLmNvbmNhdChbXG4gICAgICAgICAgICBIdG1sLm5vbkZyZXNoRWxlbWVudChcInBcIiwge30sIFtcbiAgICAgICAgICAgICAgICBIdG1sLnRleHQoXCIgXCIpLFxuICAgICAgICAgICAgICAgIEh0bWwuZnJlc2hFbGVtZW50KFwiYVwiLCB7XCJocmVmXCI6IFwiI1wiICsgcmVmZXJlbmNlSHRtbElkKFwiY29tbWVudFwiLCBjb21tZW50LmNvbW1lbnRJZCl9LCBbXG4gICAgICAgICAgICAgICAgICAgIEh0bWwudGV4dChcIuKGkVwiKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdKVxuICAgICAgICBdKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgSHRtbC5mcmVzaEVsZW1lbnQoXG4gICAgICAgICAgICAgICAgXCJkdFwiLFxuICAgICAgICAgICAgICAgIHtcImlkXCI6IHJlZmVyZW50SHRtbElkKFwiY29tbWVudFwiLCBjb21tZW50LmNvbW1lbnRJZCl9LFxuICAgICAgICAgICAgICAgIFtIdG1sLnRleHQoXCJDb21tZW50IFwiICsgbGFiZWwpXVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIEh0bWwuZnJlc2hFbGVtZW50KFwiZGRcIiwge30sIGJvZHkpXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEJyZWFrKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBodG1sUGF0aEZvckJyZWFrKGVsZW1lbnQpLndyYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh0bWxQYXRoRm9yQnJlYWsoZWxlbWVudCkge1xuICAgICAgICB2YXIgc3R5bGUgPSBmaW5kU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlLnRvO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYnJlYWtUeXBlID09PSBcImxpbmVcIikge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWxQYXRocy50b3BMZXZlbEVsZW1lbnQoXCJiclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sUGF0aHMuZW1wdHk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudENvbnZlcnRlcnMgPSB7XG4gICAgICAgIFwiZG9jdW1lbnRcIjogZnVuY3Rpb24oZG9jdW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoZG9jdW1lbnQuY2hpbGRyZW4sIG1lc3NhZ2VzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHZhciBub3RlcyA9IG5vdGVSZWZlcmVuY2VzLm1hcChmdW5jdGlvbihub3RlUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50Lm5vdGVzLnJlc29sdmUobm90ZVJlZmVyZW5jZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHZhciBub3Rlc05vZGVzID0gY29udmVydEVsZW1lbnRzKG5vdGVzLCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4uY29uY2F0KFtcbiAgICAgICAgICAgICAgICBIdG1sLmZyZXNoRWxlbWVudChcIm9sXCIsIHt9LCBub3Rlc05vZGVzKSxcbiAgICAgICAgICAgICAgICBIdG1sLmZyZXNoRWxlbWVudChcImRsXCIsIHt9LCBmbGF0TWFwKHJlZmVyZW5jZWRDb21tZW50cywgZnVuY3Rpb24ocmVmZXJlbmNlZENvbW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb21tZW50KHJlZmVyZW5jZWRDb21tZW50LCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhZ3JhcGhcIjogY29udmVydFBhcmFncmFwaCxcbiAgICAgICAgXCJydW5cIjogY29udmVydFJ1bixcbiAgICAgICAgXCJ0ZXh0XCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gW0h0bWwudGV4dChlbGVtZW50LnZhbHVlKV07XG4gICAgICAgIH0sXG4gICAgICAgIFwidGFiXCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gW0h0bWwudGV4dChcIlxcdFwiKV07XG4gICAgICAgIH0sXG4gICAgICAgIFwiaHlwZXJsaW5rXCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgaHJlZiA9IGVsZW1lbnQuYW5jaG9yID8gXCIjXCIgKyBodG1sSWQoZWxlbWVudC5hbmNob3IpIDogZWxlbWVudC5ocmVmO1xuICAgICAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7aHJlZjogaHJlZn07XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YXJnZXRGcmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcy50YXJnZXQgPSBlbGVtZW50LnRhcmdldEZyYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbiwgbWVzc2FnZXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgcmV0dXJuIFtIdG1sLm5vbkZyZXNoRWxlbWVudChcImFcIiwgYXR0cmlidXRlcywgY2hpbGRyZW4pXTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJib29rbWFya1N0YXJ0XCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgYW5jaG9yID0gSHRtbC5mcmVzaEVsZW1lbnQoXCJhXCIsIHtcbiAgICAgICAgICAgICAgICBpZDogaHRtbElkKGVsZW1lbnQubmFtZSlcbiAgICAgICAgICAgIH0sIFtIdG1sLmZvcmNlV3JpdGVdKTtcbiAgICAgICAgICAgIHJldHVybiBbYW5jaG9yXTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RlUmVmZXJlbmNlXCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBub3RlUmVmZXJlbmNlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgdmFyIGFuY2hvciA9IEh0bWwuZnJlc2hFbGVtZW50KFwiYVwiLCB7XG4gICAgICAgICAgICAgICAgaHJlZjogXCIjXCIgKyBub3RlSHRtbElkKGVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIGlkOiBub3RlUmVmSHRtbElkKGVsZW1lbnQpXG4gICAgICAgICAgICB9LCBbSHRtbC50ZXh0KFwiW1wiICsgKG5vdGVOdW1iZXIrKykgKyBcIl1cIildKTtcblxuICAgICAgICAgICAgcmV0dXJuIFtIdG1sLmZyZXNoRWxlbWVudChcInN1cFwiLCB7fSwgW2FuY2hvcl0pXTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJub3RlXCI6IGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb252ZXJ0RWxlbWVudHMoZWxlbWVudC5ib2R5LCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgICAgICB2YXIgYmFja0xpbmsgPSBIdG1sLmVsZW1lbnRXaXRoVGFnKGh0bWxQYXRocy5lbGVtZW50KFwicFwiLCB7fSwge2ZyZXNoOiBmYWxzZX0pLCBbXG4gICAgICAgICAgICAgICAgSHRtbC50ZXh0KFwiIFwiKSxcbiAgICAgICAgICAgICAgICBIdG1sLmZyZXNoRWxlbWVudChcImFcIiwge2hyZWY6IFwiI1wiICsgbm90ZVJlZkh0bWxJZChlbGVtZW50KX0sIFtIdG1sLnRleHQoXCLihpFcIildKVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICB2YXIgYm9keSA9IGNoaWxkcmVuLmNvbmNhdChbYmFja0xpbmtdKTtcblxuICAgICAgICAgICAgcmV0dXJuIEh0bWwuZnJlc2hFbGVtZW50KFwibGlcIiwge2lkOiBub3RlSHRtbElkKGVsZW1lbnQpfSwgYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIFwiY29tbWVudFJlZmVyZW5jZVwiOiBjb252ZXJ0Q29tbWVudFJlZmVyZW5jZSxcbiAgICAgICAgXCJjb21tZW50XCI6IGNvbnZlcnRDb21tZW50LFxuICAgICAgICBcImltYWdlXCI6IGRlZmVycmVkQ29udmVyc2lvbihyZWNvdmVyaW5nQ29udmVydEltYWdlKG9wdGlvbnMuY29udmVydEltYWdlIHx8IGltYWdlcy5kYXRhVXJpKSksXG4gICAgICAgIFwidGFibGVcIjogY29udmVydFRhYmxlLFxuICAgICAgICBcInRhYmxlUm93XCI6IGNvbnZlcnRUYWJsZVJvdyxcbiAgICAgICAgXCJ0YWJsZUNlbGxcIjogY29udmVydFRhYmxlQ2VsbCxcbiAgICAgICAgXCJicmVha1wiOiBjb252ZXJ0QnJlYWtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnZlcnRUb0h0bWw6IGNvbnZlcnRUb0h0bWxcbiAgICB9O1xufVxuXG52YXIgZGVmZXJyZWRJZCA9IDE7XG5cbmZ1bmN0aW9uIGRlZmVycmVkQ29udmVyc2lvbihmdW5jKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG1lc3NhZ2VzLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJkZWZlcnJlZFwiLFxuICAgICAgICAgICAgICAgIGlkOiBkZWZlcnJlZElkKyssXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuYyhlbGVtZW50LCBtZXNzYWdlcywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIHVucmVjb2duaXNlZFN0eWxlV2FybmluZyh0eXBlLCBlbGVtZW50KSB7XG4gICAgcmV0dXJuIHJlc3VsdHMud2FybmluZyhcbiAgICAgICAgXCJVbnJlY29nbmlzZWQgXCIgKyB0eXBlICsgXCIgc3R5bGU6ICdcIiArIGVsZW1lbnQuc3R5bGVOYW1lICsgXCInXCIgK1xuICAgICAgICBcIiAoU3R5bGUgSUQ6IFwiICsgZWxlbWVudC5zdHlsZUlkICsgXCIpXCJcbiAgICApO1xufVxuXG5mdW5jdGlvbiBmbGF0TWFwKHZhbHVlcywgZnVuYykge1xuICAgIHJldHVybiBfLmZsYXR0ZW4odmFsdWVzLm1hcChmdW5jKSwgdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIHdhbGtIdG1sKG5vZGVzLCBjYWxsYmFjaykge1xuICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHdhbGtIdG1sKG5vZGUuY2hpbGRyZW4sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG52YXIgY29tbWVudEF1dGhvckxhYmVsID0gZXhwb3J0cy5jb21tZW50QXV0aG9yTGFiZWwgPSBmdW5jdGlvbiBjb21tZW50QXV0aG9yTGFiZWwoY29tbWVudCkge1xuICAgIHJldHVybiBjb21tZW50LmF1dGhvckluaXRpYWxzIHx8IFwiXCI7XG59O1xuXG59LHtcIi4vZG9jdW1lbnRzXCI6NCxcIi4vaHRtbFwiOjE4LFwiLi9pbWFnZXNcIjoyMCxcIi4vcHJvbWlzZXNcIjoyMyxcIi4vcmVzdWx0c1wiOjI1LFwiLi9zdHlsZXMvaHRtbC1wYXRoc1wiOjI4LFwiLi93cml0ZXJzXCI6MzMsXCJ1bmRlcnNjb3JlXCI6MTAyfV0sNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKEJ1ZmZlcil7XG52YXIgXyA9IHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpO1xuXG52YXIgdHlwZXMgPSBleHBvcnRzLnR5cGVzID0ge1xuICAgIGRvY3VtZW50OiBcImRvY3VtZW50XCIsXG4gICAgcGFyYWdyYXBoOiBcInBhcmFncmFwaFwiLFxuICAgIHJ1bjogXCJydW5cIixcbiAgICB0ZXh0OiBcInRleHRcIixcbiAgICB0YWI6IFwidGFiXCIsXG4gICAgaHlwZXJsaW5rOiBcImh5cGVybGlua1wiLFxuICAgIG5vdGVSZWZlcmVuY2U6IFwibm90ZVJlZmVyZW5jZVwiLFxuICAgIGltYWdlOiBcImltYWdlXCIsXG4gICAgbm90ZTogXCJub3RlXCIsXG4gICAgY29tbWVudFJlZmVyZW5jZTogXCJjb21tZW50UmVmZXJlbmNlXCIsXG4gICAgY29tbWVudDogXCJjb21tZW50XCIsXG4gICAgdGFibGU6IFwidGFibGVcIixcbiAgICB0YWJsZVJvdzogXCJ0YWJsZVJvd1wiLFxuICAgIHRhYmxlQ2VsbDogXCJ0YWJsZUNlbGxcIixcbiAgICBcImJyZWFrXCI6IFwiYnJlYWtcIixcbiAgICBib29rbWFya1N0YXJ0OiBcImJvb2ttYXJrU3RhcnRcIlxufTtcblxuZnVuY3Rpb24gRG9jdW1lbnQoY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlcy5kb2N1bWVudCxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBub3Rlczogb3B0aW9ucy5ub3RlcyB8fCBuZXcgTm90ZXMoe30pLFxuICAgICAgICBjb21tZW50czogb3B0aW9ucy5jb21tZW50cyB8fCBbXVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIFBhcmFncmFwaChjaGlsZHJlbiwgcHJvcGVydGllcykge1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHZhciBpbmRlbnQgPSBwcm9wZXJ0aWVzLmluZGVudCB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlcy5wYXJhZ3JhcGgsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgc3R5bGVJZDogcHJvcGVydGllcy5zdHlsZUlkIHx8IG51bGwsXG4gICAgICAgIHN0eWxlTmFtZTogcHJvcGVydGllcy5zdHlsZU5hbWUgfHwgbnVsbCxcbiAgICAgICAgbnVtYmVyaW5nOiBwcm9wZXJ0aWVzLm51bWJlcmluZyB8fCBudWxsLFxuICAgICAgICBhbGlnbm1lbnQ6IHByb3BlcnRpZXMuYWxpZ25tZW50IHx8IG51bGwsXG4gICAgICAgIGluZGVudDoge1xuICAgICAgICAgICAgc3RhcnQ6IGluZGVudC5zdGFydCB8fCBudWxsLFxuICAgICAgICAgICAgZW5kOiBpbmRlbnQuZW5kIHx8IG51bGwsXG4gICAgICAgICAgICBmaXJzdExpbmU6IGluZGVudC5maXJzdExpbmUgfHwgbnVsbCxcbiAgICAgICAgICAgIGhhbmdpbmc6IGluZGVudC5oYW5naW5nIHx8IG51bGxcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIFJ1bihjaGlsZHJlbiwgcHJvcGVydGllcykge1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLnJ1bixcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBzdHlsZUlkOiBwcm9wZXJ0aWVzLnN0eWxlSWQgfHwgbnVsbCxcbiAgICAgICAgc3R5bGVOYW1lOiBwcm9wZXJ0aWVzLnN0eWxlTmFtZSB8fCBudWxsLFxuICAgICAgICBpc0JvbGQ6ICEhcHJvcGVydGllcy5pc0JvbGQsXG4gICAgICAgIGlzVW5kZXJsaW5lOiAhIXByb3BlcnRpZXMuaXNVbmRlcmxpbmUsXG4gICAgICAgIGlzSXRhbGljOiAhIXByb3BlcnRpZXMuaXNJdGFsaWMsXG4gICAgICAgIGlzU3RyaWtldGhyb3VnaDogISFwcm9wZXJ0aWVzLmlzU3RyaWtldGhyb3VnaCxcbiAgICAgICAgaXNBbGxDYXBzOiAhIXByb3BlcnRpZXMuaXNBbGxDYXBzLFxuICAgICAgICBpc1NtYWxsQ2FwczogISFwcm9wZXJ0aWVzLmlzU21hbGxDYXBzLFxuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogcHJvcGVydGllcy52ZXJ0aWNhbEFsaWdubWVudCB8fCB2ZXJ0aWNhbEFsaWdubWVudC5iYXNlbGluZSxcbiAgICAgICAgZm9udDogcHJvcGVydGllcy5mb250IHx8IG51bGwsXG4gICAgICAgIGZvbnRTaXplOiBwcm9wZXJ0aWVzLmZvbnRTaXplIHx8IG51bGwsXG4gICAgICAgIGhpZ2hsaWdodDogcHJvcGVydGllcy5oaWdobGlnaHQgfHwgbnVsbFxuICAgIH07XG59XG5cbnZhciB2ZXJ0aWNhbEFsaWdubWVudCA9IHtcbiAgICBiYXNlbGluZTogXCJiYXNlbGluZVwiLFxuICAgIHN1cGVyc2NyaXB0OiBcInN1cGVyc2NyaXB0XCIsXG4gICAgc3Vic2NyaXB0OiBcInN1YnNjcmlwdFwiXG59O1xuXG5mdW5jdGlvbiBUZXh0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZXMudGV4dCxcbiAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gVGFiKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLnRhYlxuICAgIH07XG59XG5cbmZ1bmN0aW9uIEh5cGVybGluayhjaGlsZHJlbiwgb3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLmh5cGVybGluayxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgICBocmVmOiBvcHRpb25zLmhyZWYsXG4gICAgICAgIGFuY2hvcjogb3B0aW9ucy5hbmNob3IsXG4gICAgICAgIHRhcmdldEZyYW1lOiBvcHRpb25zLnRhcmdldEZyYW1lXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gTm90ZVJlZmVyZW5jZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZXMubm90ZVJlZmVyZW5jZSxcbiAgICAgICAgbm90ZVR5cGU6IG9wdGlvbnMubm90ZVR5cGUsXG4gICAgICAgIG5vdGVJZDogb3B0aW9ucy5ub3RlSWRcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBOb3Rlcyhub3Rlcykge1xuICAgIHRoaXMuX25vdGVzID0gXy5pbmRleEJ5KG5vdGVzLCBmdW5jdGlvbihub3RlKSB7XG4gICAgICAgIHJldHVybiBub3RlS2V5KG5vdGUubm90ZVR5cGUsIG5vdGUubm90ZUlkKTtcbiAgICB9KTtcbn1cblxuTm90ZXMucHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbihyZWZlcmVuY2UpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kTm90ZUJ5S2V5KG5vdGVLZXkocmVmZXJlbmNlLm5vdGVUeXBlLCByZWZlcmVuY2Uubm90ZUlkKSk7XG59O1xuXG5Ob3Rlcy5wcm90b3R5cGUuZmluZE5vdGVCeUtleSA9IGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9ub3Rlc1trZXldIHx8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBOb3RlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlcy5ub3RlLFxuICAgICAgICBub3RlVHlwZTogb3B0aW9ucy5ub3RlVHlwZSxcbiAgICAgICAgbm90ZUlkOiBvcHRpb25zLm5vdGVJZCxcbiAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudFJlZmVyZW5jZShvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZXMuY29tbWVudFJlZmVyZW5jZSxcbiAgICAgICAgY29tbWVudElkOiBvcHRpb25zLmNvbW1lbnRJZFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnQob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLmNvbW1lbnQsXG4gICAgICAgIGNvbW1lbnRJZDogb3B0aW9ucy5jb21tZW50SWQsXG4gICAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgICAgYXV0aG9yTmFtZTogb3B0aW9ucy5hdXRob3JOYW1lLFxuICAgICAgICBhdXRob3JJbml0aWFsczogb3B0aW9ucy5hdXRob3JJbml0aWFsc1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIG5vdGVLZXkobm90ZVR5cGUsIGlkKSB7XG4gICAgcmV0dXJuIG5vdGVUeXBlICsgXCItXCIgKyBpZDtcbn1cblxuZnVuY3Rpb24gSW1hZ2Uob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLmltYWdlLFxuICAgICAgICAvLyBgcmVhZGAgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBidXQgb3RoZXIgcmVhZFxuICAgICAgICAvLyBtZXRob2RzIHNob3VsZCBiZSBwcmVmZXJyZWQuXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uKGVuY29kaW5nKSB7XG4gICAgICAgICAgICBpZiAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWFkSW1hZ2UoZW5jb2RpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWFkSW1hZ2UoKS50aGVuKGZ1bmN0aW9uKGFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlYWRBc0FycmF5QnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlYWRJbWFnZSgpO1xuICAgICAgICB9LFxuICAgICAgICByZWFkQXNCYXNlNjRTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVhZEltYWdlKFwiYmFzZTY0XCIpO1xuICAgICAgICB9LFxuICAgICAgICByZWFkQXNCdWZmZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVhZEltYWdlKCkudGhlbihmdW5jdGlvbihhcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYWx0VGV4dDogb3B0aW9ucy5hbHRUZXh0LFxuICAgICAgICBjb250ZW50VHlwZTogb3B0aW9ucy5jb250ZW50VHlwZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIFRhYmxlKGNoaWxkcmVuLCBwcm9wZXJ0aWVzKSB7XG4gICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZXMudGFibGUsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgc3R5bGVJZDogcHJvcGVydGllcy5zdHlsZUlkIHx8IG51bGwsXG4gICAgICAgIHN0eWxlTmFtZTogcHJvcGVydGllcy5zdHlsZU5hbWUgfHwgbnVsbFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIFRhYmxlUm93KGNoaWxkcmVuLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogdHlwZXMudGFibGVSb3csXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgaXNIZWFkZXI6IG9wdGlvbnMuaXNIZWFkZXIgfHwgZmFsc2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBUYWJsZUNlbGwoY2hpbGRyZW4sIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlcy50YWJsZUNlbGwsXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgICAgY29sU3Bhbjogb3B0aW9ucy5jb2xTcGFuID09IG51bGwgPyAxIDogb3B0aW9ucy5jb2xTcGFuLFxuICAgICAgICByb3dTcGFuOiBvcHRpb25zLnJvd1NwYW4gPT0gbnVsbCA/IDEgOiBvcHRpb25zLnJvd1NwYW5cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBCcmVhayhicmVha1R5cGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiB0eXBlc1tcImJyZWFrXCJdLFxuICAgICAgICBicmVha1R5cGU6IGJyZWFrVHlwZVxuICAgIH07XG59XG5cbmZ1bmN0aW9uIEJvb2ttYXJrU3RhcnQob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHR5cGVzLmJvb2ttYXJrU3RhcnQsXG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZVxuICAgIH07XG59XG5cbmV4cG9ydHMuZG9jdW1lbnQgPSBleHBvcnRzLkRvY3VtZW50ID0gRG9jdW1lbnQ7XG5leHBvcnRzLnBhcmFncmFwaCA9IGV4cG9ydHMuUGFyYWdyYXBoID0gUGFyYWdyYXBoO1xuZXhwb3J0cy5ydW4gPSBleHBvcnRzLlJ1biA9IFJ1bjtcbmV4cG9ydHMudGV4dCA9IGV4cG9ydHMuVGV4dCA9IFRleHQ7XG5leHBvcnRzLnRhYiA9IGV4cG9ydHMuVGFiID0gVGFiO1xuZXhwb3J0cy5IeXBlcmxpbmsgPSBIeXBlcmxpbms7XG5leHBvcnRzLm5vdGVSZWZlcmVuY2UgPSBleHBvcnRzLk5vdGVSZWZlcmVuY2UgPSBOb3RlUmVmZXJlbmNlO1xuZXhwb3J0cy5Ob3RlcyA9IE5vdGVzO1xuZXhwb3J0cy5Ob3RlID0gTm90ZTtcbmV4cG9ydHMuY29tbWVudFJlZmVyZW5jZSA9IGNvbW1lbnRSZWZlcmVuY2U7XG5leHBvcnRzLmNvbW1lbnQgPSBjb21tZW50O1xuZXhwb3J0cy5JbWFnZSA9IEltYWdlO1xuZXhwb3J0cy5UYWJsZSA9IFRhYmxlO1xuZXhwb3J0cy5UYWJsZVJvdyA9IFRhYmxlUm93O1xuZXhwb3J0cy5UYWJsZUNlbGwgPSBUYWJsZUNlbGw7XG5leHBvcnRzLmxpbmVCcmVhayA9IEJyZWFrKFwibGluZVwiKTtcbmV4cG9ydHMucGFnZUJyZWFrID0gQnJlYWsoXCJwYWdlXCIpO1xuZXhwb3J0cy5jb2x1bW5CcmVhayA9IEJyZWFrKFwiY29sdW1uXCIpO1xuZXhwb3J0cy5Cb29rbWFya1N0YXJ0ID0gQm9va21hcmtTdGFydDtcblxuZXhwb3J0cy52ZXJ0aWNhbEFsaWdubWVudCA9IHZlcnRpY2FsQWxpZ25tZW50O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXIpXG59LHtcImJ1ZmZlclwiOjgzLFwidW5kZXJzY29yZVwiOjEwMn1dLDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5jcmVhdGVCb2R5UmVhZGVyID0gY3JlYXRlQm9keVJlYWRlcjtcbmV4cG9ydHMuX3JlYWROdW1iZXJpbmdQcm9wZXJ0aWVzID0gcmVhZE51bWJlcmluZ1Byb3BlcnRpZXM7XG5cbnZhciBkaW5nYmF0VG9Vbmljb2RlID0gcmVxdWlyZShcImRpbmdiYXQtdG8tdW5pY29kZVwiKTtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi4vZG9jdW1lbnRzXCIpO1xudmFyIFJlc3VsdCA9IHJlcXVpcmUoXCIuLi9yZXN1bHRzXCIpLlJlc3VsdDtcbnZhciB3YXJuaW5nID0gcmVxdWlyZShcIi4uL3Jlc3VsdHNcIikud2FybmluZztcbnZhciB1cmlzID0gcmVxdWlyZShcIi4vdXJpc1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlQm9keVJlYWRlcihvcHRpb25zKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVhZFhtbEVsZW1lbnQ6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQm9keVJlYWRlcihvcHRpb25zKS5yZWFkWG1sRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZFhtbEVsZW1lbnRzOiBmdW5jdGlvbihlbGVtZW50cykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBCb2R5UmVhZGVyKG9wdGlvbnMpLnJlYWRYbWxFbGVtZW50cyhlbGVtZW50cyk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBCb2R5UmVhZGVyKG9wdGlvbnMpIHtcbiAgICB2YXIgY29tcGxleEZpZWxkU3RhY2sgPSBbXTtcbiAgICB2YXIgY3VycmVudEluc3RyVGV4dCA9IFtdO1xuXG4gICAgLy8gV2hlbiBhIHBhcmFncmFwaCBpcyBtYXJrZWQgYXMgZGVsZXRlZCwgaXRzIGNvbnRlbnRzIHNob3VsZCBiZSBjb21iaW5lZFxuICAgIC8vIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGguIFNlZSAxNy4xMy41LjE1IGRlbCAoRGVsZXRlZCBQYXJhZ3JhcGgpIG9mXG4gICAgLy8gRUNNQS0zNzYgNHRoIGVkaXRpb24gUGFydCAxLlxuICAgIHZhciBkZWxldGVkUGFyYWdyYXBoQ29udGVudHMgPSBbXTtcblxuICAgIHZhciByZWxhdGlvbnNoaXBzID0gb3B0aW9ucy5yZWxhdGlvbnNoaXBzO1xuICAgIHZhciBjb250ZW50VHlwZXMgPSBvcHRpb25zLmNvbnRlbnRUeXBlcztcbiAgICB2YXIgZG9jeEZpbGUgPSBvcHRpb25zLmRvY3hGaWxlO1xuICAgIHZhciBmaWxlcyA9IG9wdGlvbnMuZmlsZXM7XG4gICAgdmFyIG51bWJlcmluZyA9IG9wdGlvbnMubnVtYmVyaW5nO1xuICAgIHZhciBzdHlsZXMgPSBvcHRpb25zLnN0eWxlcztcblxuICAgIGZ1bmN0aW9uIHJlYWRYbWxFbGVtZW50cyhlbGVtZW50cykge1xuICAgICAgICB2YXIgcmVzdWx0cyA9IGVsZW1lbnRzLm1hcChyZWFkWG1sRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0cyhyZXN1bHRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkWG1sRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFwiZWxlbWVudFwiKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlciA9IHhtbEVsZW1lbnRSZWFkZXJzW2VsZW1lbnQubmFtZV07XG4gICAgICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVyKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGlnbm9yZUVsZW1lbnRzLCBlbGVtZW50Lm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB3YXJuaW5nKFwiQW4gdW5yZWNvZ25pc2VkIGVsZW1lbnQgd2FzIGlnbm9yZWQ6IFwiICsgZWxlbWVudC5uYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlSZXN1bHRXaXRoTWVzc2FnZXMoW21lc3NhZ2VdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW1wdHlSZXN1bHQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkUGFyYWdyYXBoUHJvcGVydGllcyhlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiByZWFkUGFyYWdyYXBoU3R5bGUoZWxlbWVudCkubWFwKGZ1bmN0aW9uKHN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwicGFyYWdyYXBoUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHN0eWxlSWQ6IHN0eWxlLnN0eWxlSWQsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lOiBzdHlsZS5uYW1lLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZWxlbWVudC5maXJzdE9yRW1wdHkoXCJ3OmpjXCIpLmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXSxcbiAgICAgICAgICAgICAgICBudW1iZXJpbmc6IHJlYWROdW1iZXJpbmdQcm9wZXJ0aWVzKHN0eWxlLnN0eWxlSWQsIGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpudW1QclwiKSwgbnVtYmVyaW5nKSxcbiAgICAgICAgICAgICAgICBpbmRlbnQ6IHJlYWRQYXJhZ3JhcGhJbmRlbnQoZWxlbWVudC5maXJzdE9yRW1wdHkoXCJ3OmluZFwiKSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRQYXJhZ3JhcGhJbmRlbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnQ6IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6c3RhcnRcIl0gfHwgZWxlbWVudC5hdHRyaWJ1dGVzW1widzpsZWZ0XCJdLFxuICAgICAgICAgICAgZW5kOiBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OmVuZFwiXSB8fCBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OnJpZ2h0XCJdLFxuICAgICAgICAgICAgZmlyc3RMaW5lOiBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OmZpcnN0TGluZVwiXSxcbiAgICAgICAgICAgIGhhbmdpbmc6IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6aGFuZ2luZ1wiXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRSdW5Qcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRSdW5TdHlsZShlbGVtZW50KS5tYXAoZnVuY3Rpb24oc3R5bGUpIHtcbiAgICAgICAgICAgIHZhciBmb250U2l6ZVN0cmluZyA9IGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpzelwiKS5hdHRyaWJ1dGVzW1widzp2YWxcIl07XG4gICAgICAgICAgICAvLyB3OnN6IGdpdmVzIHRoZSBmb250IHNpemUgaW4gaGFsZiBwb2ludHMsIHNvIGhhbHZlIHRoZSB2YWx1ZSB0byBnZXQgdGhlIHNpemUgaW4gcG9pbnRzXG4gICAgICAgICAgICB2YXIgZm9udFNpemUgPSAvXlswLTldKyQvLnRlc3QoZm9udFNpemVTdHJpbmcpID8gcGFyc2VJbnQoZm9udFNpemVTdHJpbmcsIDEwKSAvIDIgOiBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwicnVuUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIHN0eWxlSWQ6IHN0eWxlLnN0eWxlSWQsXG4gICAgICAgICAgICAgICAgc3R5bGVOYW1lOiBzdHlsZS5uYW1lLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6dmVydEFsaWduXCIpLmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXSxcbiAgICAgICAgICAgICAgICBmb250OiBlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6ckZvbnRzXCIpLmF0dHJpYnV0ZXNbXCJ3OmFzY2lpXCJdLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcbiAgICAgICAgICAgICAgICBpc0JvbGQ6IHJlYWRCb29sZWFuRWxlbWVudChlbGVtZW50LmZpcnN0KFwidzpiXCIpKSxcbiAgICAgICAgICAgICAgICBpc1VuZGVybGluZTogcmVhZFVuZGVybGluZShlbGVtZW50LmZpcnN0KFwidzp1XCIpKSxcbiAgICAgICAgICAgICAgICBpc0l0YWxpYzogcmVhZEJvb2xlYW5FbGVtZW50KGVsZW1lbnQuZmlyc3QoXCJ3OmlcIikpLFxuICAgICAgICAgICAgICAgIGlzU3RyaWtldGhyb3VnaDogcmVhZEJvb2xlYW5FbGVtZW50KGVsZW1lbnQuZmlyc3QoXCJ3OnN0cmlrZVwiKSksXG4gICAgICAgICAgICAgICAgaXNBbGxDYXBzOiByZWFkQm9vbGVhbkVsZW1lbnQoZWxlbWVudC5maXJzdChcInc6Y2Fwc1wiKSksXG4gICAgICAgICAgICAgICAgaXNTbWFsbENhcHM6IHJlYWRCb29sZWFuRWxlbWVudChlbGVtZW50LmZpcnN0KFwidzpzbWFsbENhcHNcIikpLFxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogcmVhZEhpZ2hsaWdodFZhbHVlKGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpoaWdobGlnaHRcIikuYXR0cmlidXRlc1tcInc6dmFsXCJdKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZFVuZGVybGluZShlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBcImZhbHNlXCIgJiYgdmFsdWUgIT09IFwiMFwiICYmIHZhbHVlICE9PSBcIm5vbmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRCb29sZWFuRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXTtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZSAhPT0gXCJmYWxzZVwiICYmIHZhbHVlICE9PSBcIjBcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRIaWdobGlnaHRWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSBcIm5vbmVcIikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkUGFyYWdyYXBoU3R5bGUoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVhZFN0eWxlKGVsZW1lbnQsIFwidzpwU3R5bGVcIiwgXCJQYXJhZ3JhcGhcIiwgc3R5bGVzLmZpbmRQYXJhZ3JhcGhTdHlsZUJ5SWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRSdW5TdHlsZShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiByZWFkU3R5bGUoZWxlbWVudCwgXCJ3OnJTdHlsZVwiLCBcIlJ1blwiLCBzdHlsZXMuZmluZENoYXJhY3RlclN0eWxlQnlJZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZFRhYmxlU3R5bGUoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVhZFN0eWxlKGVsZW1lbnQsIFwidzp0YmxTdHlsZVwiLCBcIlRhYmxlXCIsIHN0eWxlcy5maW5kVGFibGVTdHlsZUJ5SWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRTdHlsZShlbGVtZW50LCBzdHlsZVRhZ05hbWUsIHN0eWxlVHlwZSwgZmluZFN0eWxlQnlJZCkge1xuICAgICAgICB2YXIgbWVzc2FnZXMgPSBbXTtcbiAgICAgICAgdmFyIHN0eWxlRWxlbWVudCA9IGVsZW1lbnQuZmlyc3Qoc3R5bGVUYWdOYW1lKTtcbiAgICAgICAgdmFyIHN0eWxlSWQgPSBudWxsO1xuICAgICAgICB2YXIgbmFtZSA9IG51bGw7XG4gICAgICAgIGlmIChzdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHN0eWxlSWQgPSBzdHlsZUVsZW1lbnQuYXR0cmlidXRlc1tcInc6dmFsXCJdO1xuICAgICAgICAgICAgaWYgKHN0eWxlSWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBmaW5kU3R5bGVCeUlkKHN0eWxlSWQpO1xuICAgICAgICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3R5bGUubmFtZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHVuZGVmaW5lZFN0eWxlV2FybmluZyhzdHlsZVR5cGUsIHN0eWxlSWQpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHRXaXRoTWVzc2FnZXMoe3N0eWxlSWQ6IHN0eWxlSWQsIG5hbWU6IG5hbWV9LCBtZXNzYWdlcyk7XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Db21wbGV4RmllbGQgPSB7dHlwZTogXCJ1bmtub3duXCJ9O1xuXG4gICAgZnVuY3Rpb24gcmVhZEZsZENoYXIoZWxlbWVudCkge1xuICAgICAgICB2YXIgdHlwZSA9IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6ZmxkQ2hhclR5cGVcIl07XG4gICAgICAgIGlmICh0eXBlID09PSBcImJlZ2luXCIpIHtcbiAgICAgICAgICAgIGNvbXBsZXhGaWVsZFN0YWNrLnB1c2godW5rbm93bkNvbXBsZXhGaWVsZCk7XG4gICAgICAgICAgICBjdXJyZW50SW5zdHJUZXh0ID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJlbmRcIikge1xuICAgICAgICAgICAgY29tcGxleEZpZWxkU3RhY2sucG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzZXBhcmF0ZVwiKSB7XG4gICAgICAgICAgICB2YXIgaHlwZXJsaW5rT3B0aW9ucyA9IHBhcnNlSHlwZXJsaW5rRmllbGRDb2RlKGN1cnJlbnRJbnN0clRleHQuam9pbignJykpO1xuICAgICAgICAgICAgdmFyIGNvbXBsZXhGaWVsZCA9IGh5cGVybGlua09wdGlvbnMgPT09IG51bGwgPyB1bmtub3duQ29tcGxleEZpZWxkIDoge3R5cGU6IFwiaHlwZXJsaW5rXCIsIG9wdGlvbnM6IGh5cGVybGlua09wdGlvbnN9O1xuICAgICAgICAgICAgY29tcGxleEZpZWxkU3RhY2sucG9wKCk7XG4gICAgICAgICAgICBjb21wbGV4RmllbGRTdGFjay5wdXNoKGNvbXBsZXhGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudEh5cGVybGlua09wdGlvbnMoKSB7XG4gICAgICAgIHZhciB0b3BIeXBlcmxpbmsgPSBfLmxhc3QoY29tcGxleEZpZWxkU3RhY2suZmlsdGVyKGZ1bmN0aW9uKGNvbXBsZXhGaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXhGaWVsZC50eXBlID09PSBcImh5cGVybGlua1wiO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB0b3BIeXBlcmxpbmsgPyB0b3BIeXBlcmxpbmsub3B0aW9ucyA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VIeXBlcmxpbmtGaWVsZENvZGUoY29kZSkge1xuICAgICAgICB2YXIgZXh0ZXJuYWxMaW5rUmVzdWx0ID0gL1xccypIWVBFUkxJTksgXCIoLiopXCIvLmV4ZWMoY29kZSk7XG4gICAgICAgIGlmIChleHRlcm5hbExpbmtSZXN1bHQpIHtcbiAgICAgICAgICAgIHJldHVybiB7aHJlZjogZXh0ZXJuYWxMaW5rUmVzdWx0WzFdfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpbnRlcm5hbExpbmtSZXN1bHQgPSAvXFxzKkhZUEVSTElOS1xccytcXFxcbFxccytcIiguKilcIi8uZXhlYyhjb2RlKTtcbiAgICAgICAgaWYgKGludGVybmFsTGlua1Jlc3VsdCkge1xuICAgICAgICAgICAgcmV0dXJuIHthbmNob3I6IGludGVybmFsTGlua1Jlc3VsdFsxXX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkSW5zdHJUZXh0KGVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudEluc3RyVGV4dC5wdXNoKGVsZW1lbnQudGV4dCgpKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZFN5bWJvbChlbGVtZW50KSB7XG4gICAgICAgIC8vIFNlZSAxNy4zLjMuMzAgc3ltIChTeW1ib2wgQ2hhcmFjdGVyKSBvZiBFQ01BLTM3NiA0dGggZWRpdGlvbiBQYXJ0IDFcbiAgICAgICAgdmFyIGZvbnQgPSBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OmZvbnRcIl07XG4gICAgICAgIHZhciBjaGFyID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzpjaGFyXCJdO1xuICAgICAgICB2YXIgdW5pY29kZUNoYXJhY3RlciA9IGRpbmdiYXRUb1VuaWNvZGUuaGV4KGZvbnQsIGNoYXIpO1xuICAgICAgICBpZiAodW5pY29kZUNoYXJhY3RlciA9PSBudWxsICYmIC9eRjAuLiQvLnRlc3QoY2hhcikpIHtcbiAgICAgICAgICAgIHVuaWNvZGVDaGFyYWN0ZXIgPSBkaW5nYmF0VG9Vbmljb2RlLmhleChmb250LCBjaGFyLnN1YnN0cmluZygyKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodW5pY29kZUNoYXJhY3RlciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlSZXN1bHRXaXRoTWVzc2FnZXMoW3dhcm5pbmcoXG4gICAgICAgICAgICAgICAgXCJBIHc6c3ltIGVsZW1lbnQgd2l0aCBhbiB1bnN1cHBvcnRlZCBjaGFyYWN0ZXIgd2FzIGlnbm9yZWQ6IGNoYXIgXCIgKyAgY2hhciArIFwiIGluIGZvbnQgXCIgKyBmb250XG4gICAgICAgICAgICApXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFJlc3VsdChuZXcgZG9jdW1lbnRzLlRleHQodW5pY29kZUNoYXJhY3Rlci5zdHJpbmcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vdGVSZWZlcmVuY2VSZWFkZXIobm90ZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHZhciBub3RlSWQgPSBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OmlkXCJdO1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHQobmV3IGRvY3VtZW50cy5Ob3RlUmVmZXJlbmNlKHtcbiAgICAgICAgICAgICAgICBub3RlVHlwZTogbm90ZVR5cGUsXG4gICAgICAgICAgICAgICAgbm90ZUlkOiBub3RlSWRcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ29tbWVudFJlZmVyZW5jZShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0KGRvY3VtZW50cy5jb21tZW50UmVmZXJlbmNlKHtcbiAgICAgICAgICAgIGNvbW1lbnRJZDogZWxlbWVudC5hdHRyaWJ1dGVzW1widzppZFwiXVxuICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZENoaWxkRWxlbWVudHMoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVhZFhtbEVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHZhciB4bWxFbGVtZW50UmVhZGVycyA9IHtcbiAgICAgICAgXCJ3OnBcIjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHBhcmFncmFwaFByb3BlcnRpZXNFbGVtZW50ID0gZWxlbWVudC5maXJzdE9yRW1wdHkoXCJ3OnBQclwiKTtcblxuICAgICAgICAgICAgdmFyIGlzRGVsZXRlZCA9ICEhcGFyYWdyYXBoUHJvcGVydGllc0VsZW1lbnRcbiAgICAgICAgICAgICAgICAuZmlyc3RPckVtcHR5KFwidzpyUHJcIilcbiAgICAgICAgICAgICAgICAuZmlyc3QoXCJ3OmRlbFwiKTtcblxuICAgICAgICAgICAgaWYgKGlzRGVsZXRlZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGVkUGFyYWdyYXBoQ29udGVudHMucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBjaGlsZHJlblhtbCA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKGRlbGV0ZWRQYXJhZ3JhcGhDb250ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuWG1sID0gZGVsZXRlZFBhcmFncmFwaENvbnRlbnRzLmNvbmNhdChjaGlsZHJlblhtbCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRQYXJhZ3JhcGhDb250ZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhZFJlc3VsdC5tYXAoXG4gICAgICAgICAgICAgICAgICAgIHJlYWRQYXJhZ3JhcGhQcm9wZXJ0aWVzKHBhcmFncmFwaFByb3BlcnRpZXNFbGVtZW50KSxcbiAgICAgICAgICAgICAgICAgICAgcmVhZFhtbEVsZW1lbnRzKGNoaWxkcmVuWG1sKSxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocHJvcGVydGllcywgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZG9jdW1lbnRzLlBhcmFncmFwaChjaGlsZHJlbiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLmluc2VydEV4dHJhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwidzpyXCI6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWFkUmVzdWx0Lm1hcChcbiAgICAgICAgICAgICAgICByZWFkUnVuUHJvcGVydGllcyhlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6clByXCIpKSxcbiAgICAgICAgICAgICAgICByZWFkWG1sRWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbiksXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24ocHJvcGVydGllcywgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGh5cGVybGlua09wdGlvbnMgPSBjdXJyZW50SHlwZXJsaW5rT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHlwZXJsaW5rT3B0aW9ucyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBbbmV3IGRvY3VtZW50cy5IeXBlcmxpbmsoY2hpbGRyZW4sIGh5cGVybGlua09wdGlvbnMpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZG9jdW1lbnRzLlJ1bihjaGlsZHJlbiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3OmZsZENoYXJcIjogcmVhZEZsZENoYXIsXG4gICAgICAgIFwidzppbnN0clRleHRcIjogcmVhZEluc3RyVGV4dCxcbiAgICAgICAgXCJ3OnRcIjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHQobmV3IGRvY3VtZW50cy5UZXh0KGVsZW1lbnQudGV4dCgpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIFwidzp0YWJcIjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHQobmV3IGRvY3VtZW50cy5UYWIoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIFwidzpub0JyZWFrSHlwaGVuXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHQobmV3IGRvY3VtZW50cy5UZXh0KFwiXFx1MjAxMVwiKSk7XG4gICAgICAgIH0sXG4gICAgICAgIFwidzpzb2Z0SHlwaGVuXCI6IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0KG5ldyBkb2N1bWVudHMuVGV4dChcIlxcdTAwQURcIikpO1xuICAgICAgICB9LFxuICAgICAgICBcInc6c3ltXCI6IHJlYWRTeW1ib2wsXG4gICAgICAgIFwidzpoeXBlcmxpbmtcIjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIHJlbGF0aW9uc2hpcElkID0gZWxlbWVudC5hdHRyaWJ1dGVzW1wicjppZFwiXTtcbiAgICAgICAgICAgIHZhciBhbmNob3IgPSBlbGVtZW50LmF0dHJpYnV0ZXNbXCJ3OmFuY2hvclwiXTtcbiAgICAgICAgICAgIHJldHVybiByZWFkWG1sRWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbikubWFwKGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldEZyYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzp0Z3RGcmFtZVwiXSB8fCBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZG9jdW1lbnRzLkh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgICAgICAgICAgXy5leHRlbmQoe3RhcmdldEZyYW1lOiB0YXJnZXRGcmFtZX0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBocmVmID0gcmVsYXRpb25zaGlwcy5maW5kVGFyZ2V0QnlSZWxhdGlvbnNoaXBJZChyZWxhdGlvbnNoaXBJZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWYgPSB1cmlzLnJlcGxhY2VGcmFnbWVudChocmVmLCBhbmNob3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGUoe2hyZWY6IGhyZWZ9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuY2hvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlKHthbmNob3I6IGFuY2hvcn0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgXCJ3OnRibFwiOiByZWFkVGFibGUsXG4gICAgICAgIFwidzp0clwiOiByZWFkVGFibGVSb3csXG4gICAgICAgIFwidzp0Y1wiOiByZWFkVGFibGVDZWxsLFxuICAgICAgICBcInc6Zm9vdG5vdGVSZWZlcmVuY2VcIjogbm90ZVJlZmVyZW5jZVJlYWRlcihcImZvb3Rub3RlXCIpLFxuICAgICAgICBcInc6ZW5kbm90ZVJlZmVyZW5jZVwiOiBub3RlUmVmZXJlbmNlUmVhZGVyKFwiZW5kbm90ZVwiKSxcbiAgICAgICAgXCJ3OmNvbW1lbnRSZWZlcmVuY2VcIjogcmVhZENvbW1lbnRSZWZlcmVuY2UsXG4gICAgICAgIFwidzpiclwiOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgYnJlYWtUeXBlID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzp0eXBlXCJdO1xuICAgICAgICAgICAgaWYgKGJyZWFrVHlwZSA9PSBudWxsIHx8IGJyZWFrVHlwZSA9PT0gXCJ0ZXh0V3JhcHBpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0KGRvY3VtZW50cy5saW5lQnJlYWspO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChicmVha1R5cGUgPT09IFwicGFnZVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRSZXN1bHQoZG9jdW1lbnRzLnBhZ2VCcmVhayk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrVHlwZSA9PT0gXCJjb2x1bW5cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0KGRvY3VtZW50cy5jb2x1bW5CcmVhayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eVJlc3VsdFdpdGhNZXNzYWdlcyhbd2FybmluZyhcIlVuc3VwcG9ydGVkIGJyZWFrIHR5cGU6IFwiICsgYnJlYWtUeXBlKV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcInc6Ym9va21hcmtTdGFydFwiOiBmdW5jdGlvbihlbGVtZW50KXtcbiAgICAgICAgICAgIHZhciBuYW1lID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzpuYW1lXCJdO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IFwiX0dvQmFja1wiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0KCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0KG5ldyBkb2N1bWVudHMuQm9va21hcmtTdGFydCh7bmFtZTogbmFtZX0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBcIm1jOkFsdGVybmF0ZUNvbnRlbnRcIjogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRDaGlsZEVsZW1lbnRzKGVsZW1lbnQuZmlyc3QoXCJtYzpGYWxsYmFja1wiKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgXCJ3OnNkdFwiOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFhtbEVsZW1lbnRzKGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpzZHRDb250ZW50XCIpLmNoaWxkcmVuKTtcbiAgICAgICAgfSxcblxuICAgICAgICBcInc6aW5zXCI6IHJlYWRDaGlsZEVsZW1lbnRzLFxuICAgICAgICBcInc6b2JqZWN0XCI6IHJlYWRDaGlsZEVsZW1lbnRzLFxuICAgICAgICBcInc6c21hcnRUYWdcIjogcmVhZENoaWxkRWxlbWVudHMsXG4gICAgICAgIFwidzpkcmF3aW5nXCI6IHJlYWRDaGlsZEVsZW1lbnRzLFxuICAgICAgICBcInc6cGljdFwiOiBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZENoaWxkRWxlbWVudHMoZWxlbWVudCkudG9FeHRyYSgpO1xuICAgICAgICB9LFxuICAgICAgICBcInY6cm91bmRyZWN0XCI6IHJlYWRDaGlsZEVsZW1lbnRzLFxuICAgICAgICBcInY6c2hhcGVcIjogcmVhZENoaWxkRWxlbWVudHMsXG4gICAgICAgIFwidjp0ZXh0Ym94XCI6IHJlYWRDaGlsZEVsZW1lbnRzLFxuICAgICAgICBcInc6dHhieENvbnRlbnRcIjogcmVhZENoaWxkRWxlbWVudHMsXG4gICAgICAgIFwid3A6aW5saW5lXCI6IHJlYWREcmF3aW5nRWxlbWVudCxcbiAgICAgICAgXCJ3cDphbmNob3JcIjogcmVhZERyYXdpbmdFbGVtZW50LFxuICAgICAgICBcInY6aW1hZ2VkYXRhXCI6IHJlYWRJbWFnZURhdGEsXG4gICAgICAgIFwidjpncm91cFwiOiByZWFkQ2hpbGRFbGVtZW50cyxcbiAgICAgICAgXCJ2OnJlY3RcIjogcmVhZENoaWxkRWxlbWVudHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVhZFhtbEVsZW1lbnQ6IHJlYWRYbWxFbGVtZW50LFxuICAgICAgICByZWFkWG1sRWxlbWVudHM6IHJlYWRYbWxFbGVtZW50c1xuICAgIH07XG5cblxuICAgIGZ1bmN0aW9uIHJlYWRUYWJsZShlbGVtZW50KSB7XG4gICAgICAgIHZhciBwcm9wZXJ0aWVzUmVzdWx0ID0gcmVhZFRhYmxlUHJvcGVydGllcyhlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6dGJsUHJcIikpO1xuICAgICAgICByZXR1cm4gcmVhZFhtbEVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4pXG4gICAgICAgICAgICAuZmxhdE1hcChjYWxjdWxhdGVSb3dTcGFucylcbiAgICAgICAgICAgIC5mbGF0TWFwKGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNSZXN1bHQubWFwKGZ1bmN0aW9uKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50cy5UYWJsZShjaGlsZHJlbiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVGFibGVQcm9wZXJ0aWVzKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHJlYWRUYWJsZVN0eWxlKGVsZW1lbnQpLm1hcChmdW5jdGlvbihzdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdHlsZUlkOiBzdHlsZS5zdHlsZUlkLFxuICAgICAgICAgICAgICAgIHN0eWxlTmFtZTogc3R5bGUubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZFRhYmxlUm93KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6dHJQclwiKTtcbiAgICAgICAgdmFyIGlzSGVhZGVyID0gISFwcm9wZXJ0aWVzLmZpcnN0KFwidzp0YmxIZWFkZXJcIik7XG4gICAgICAgIHJldHVybiByZWFkWG1sRWxlbWVudHMoZWxlbWVudC5jaGlsZHJlbikubWFwKGZ1bmN0aW9uKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRzLlRhYmxlUm93KGNoaWxkcmVuLCB7aXNIZWFkZXI6IGlzSGVhZGVyfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRUYWJsZUNlbGwoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gcmVhZFhtbEVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4pLm1hcChmdW5jdGlvbihjaGlsZHJlbikge1xuICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmZpcnN0T3JFbXB0eShcInc6dGNQclwiKTtcblxuICAgICAgICAgICAgdmFyIGdyaWRTcGFuID0gcHJvcGVydGllcy5maXJzdE9yRW1wdHkoXCJ3OmdyaWRTcGFuXCIpLmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXTtcbiAgICAgICAgICAgIHZhciBjb2xTcGFuID0gZ3JpZFNwYW4gPyBwYXJzZUludChncmlkU3BhbiwgMTApIDogMTtcblxuICAgICAgICAgICAgdmFyIGNlbGwgPSBkb2N1bWVudHMuVGFibGVDZWxsKGNoaWxkcmVuLCB7Y29sU3BhbjogY29sU3Bhbn0pO1xuICAgICAgICAgICAgY2VsbC5fdk1lcmdlID0gcmVhZFZNZXJnZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVk1lcmdlKHByb3BlcnRpZXMpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBwcm9wZXJ0aWVzLmZpcnN0KFwidzp2TWVyZ2VcIik7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzp2YWxcIl07XG4gICAgICAgICAgICByZXR1cm4gdmFsID09PSBcImNvbnRpbnVlXCIgfHwgIXZhbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlUm93U3BhbnMocm93cykge1xuICAgICAgICB2YXIgdW5leHBlY3RlZE5vblJvd3MgPSBfLmFueShyb3dzLCBmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cudHlwZSAhPT0gZG9jdW1lbnRzLnR5cGVzLnRhYmxlUm93O1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHVuZXhwZWN0ZWROb25Sb3dzKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudFJlc3VsdFdpdGhNZXNzYWdlcyhyb3dzLCBbd2FybmluZyhcbiAgICAgICAgICAgICAgICBcInVuZXhwZWN0ZWQgbm9uLXJvdyBlbGVtZW50IGluIHRhYmxlLCBjZWxsIG1lcmdpbmcgbWF5IGJlIGluY29ycmVjdFwiXG4gICAgICAgICAgICApXSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVuZXhwZWN0ZWROb25DZWxscyA9IF8uYW55KHJvd3MsIGZ1bmN0aW9uKHJvdykge1xuICAgICAgICAgICAgcmV0dXJuIF8uYW55KHJvdy5jaGlsZHJlbiwgZnVuY3Rpb24oY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjZWxsLnR5cGUgIT09IGRvY3VtZW50cy50eXBlcy50YWJsZUNlbGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh1bmV4cGVjdGVkTm9uQ2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVzdWx0V2l0aE1lc3NhZ2VzKHJvd3MsIFt3YXJuaW5nKFxuICAgICAgICAgICAgICAgIFwidW5leHBlY3RlZCBub24tY2VsbCBlbGVtZW50IGluIHRhYmxlIHJvdywgY2VsbCBtZXJnaW5nIG1heSBiZSBpbmNvcnJlY3RcIlxuICAgICAgICAgICAgKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGNvbHVtbnMgPSB7fTtcblxuICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KSB7XG4gICAgICAgICAgICB2YXIgY2VsbEluZGV4ID0gMDtcbiAgICAgICAgICAgIHJvdy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNlbGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5fdk1lcmdlICYmIGNvbHVtbnNbY2VsbEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW2NlbGxJbmRleF0ucm93U3BhbisrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbY2VsbEluZGV4XSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwuX3ZNZXJnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjZWxsSW5kZXggKz0gY2VsbC5jb2xTcGFuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpIHtcbiAgICAgICAgICAgIHJvdy5jaGlsZHJlbiA9IHJvdy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oY2VsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhY2VsbC5fdk1lcmdlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByb3cuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjZWxsKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNlbGwuX3ZNZXJnZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZWxlbWVudFJlc3VsdChyb3dzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkRHJhd2luZ0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB2YXIgYmxpcHMgPSBlbGVtZW50XG4gICAgICAgICAgICAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJhOmdyYXBoaWNcIilcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImE6Z3JhcGhpY0RhdGFcIilcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBpYzpwaWNcIilcbiAgICAgICAgICAgIC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBpYzpibGlwRmlsbFwiKVxuICAgICAgICAgICAgLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYTpibGlwXCIpO1xuXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0cyhibGlwcy5tYXAocmVhZEJsaXAuYmluZChudWxsLCBlbGVtZW50KSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRCbGlwKGVsZW1lbnQsIGJsaXApIHtcbiAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBlbGVtZW50LmZpcnN0KFwid3A6ZG9jUHJcIikuYXR0cmlidXRlcztcbiAgICAgICAgdmFyIGFsdFRleHQgPSBpc0JsYW5rKHByb3BlcnRpZXMuZGVzY3IpID8gcHJvcGVydGllcy50aXRsZSA6IHByb3BlcnRpZXMuZGVzY3I7XG4gICAgICAgIHZhciBibGlwSW1hZ2VGaWxlID0gZmluZEJsaXBJbWFnZUZpbGUoYmxpcCk7XG4gICAgICAgIGlmIChibGlwSW1hZ2VGaWxlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZW1wdHlSZXN1bHRXaXRoTWVzc2FnZXMoW3dhcm5pbmcoXCJDb3VsZCBub3QgZmluZCBpbWFnZSBmaWxlIGZvciBhOmJsaXAgZWxlbWVudFwiKV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRJbWFnZShibGlwSW1hZ2VGaWxlLCBhbHRUZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmxhbmsodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgL15cXHMqJC8udGVzdCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZEJsaXBJbWFnZUZpbGUoYmxpcCkge1xuICAgICAgICB2YXIgZW1iZWRSZWxhdGlvbnNoaXBJZCA9IGJsaXAuYXR0cmlidXRlc1tcInI6ZW1iZWRcIl07XG4gICAgICAgIHZhciBsaW5rUmVsYXRpb25zaGlwSWQgPSBibGlwLmF0dHJpYnV0ZXNbXCJyOmxpbmtcIl07XG4gICAgICAgIGlmIChlbWJlZFJlbGF0aW9uc2hpcElkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZEVtYmVkZGVkSW1hZ2VGaWxlKGVtYmVkUmVsYXRpb25zaGlwSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmtSZWxhdGlvbnNoaXBJZCkge1xuICAgICAgICAgICAgdmFyIGltYWdlUGF0aCA9IHJlbGF0aW9uc2hpcHMuZmluZFRhcmdldEJ5UmVsYXRpb25zaGlwSWQobGlua1JlbGF0aW9uc2hpcElkKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0aDogaW1hZ2VQYXRoLFxuICAgICAgICAgICAgICAgIHJlYWQ6IGZpbGVzLnJlYWQuYmluZChmaWxlcywgaW1hZ2VQYXRoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZEltYWdlRGF0YShlbGVtZW50KSB7XG4gICAgICAgIHZhciByZWxhdGlvbnNoaXBJZCA9IGVsZW1lbnQuYXR0cmlidXRlc1sncjppZCddO1xuXG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXBJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRJbWFnZShcbiAgICAgICAgICAgICAgICBmaW5kRW1iZWRkZWRJbWFnZUZpbGUocmVsYXRpb25zaGlwSWQpLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cmlidXRlc1tcIm86dGl0bGVcIl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5UmVzdWx0V2l0aE1lc3NhZ2VzKFt3YXJuaW5nKFwiQSB2OmltYWdlZGF0YSBlbGVtZW50IHdpdGhvdXQgYSByZWxhdGlvbnNoaXAgSUQgd2FzIGlnbm9yZWRcIildKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmRFbWJlZGRlZEltYWdlRmlsZShyZWxhdGlvbnNoaXBJZCkge1xuICAgICAgICB2YXIgcGF0aCA9IHVyaXMudXJpVG9aaXBFbnRyeU5hbWUoXCJ3b3JkXCIsIHJlbGF0aW9uc2hpcHMuZmluZFRhcmdldEJ5UmVsYXRpb25zaGlwSWQocmVsYXRpb25zaGlwSWQpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICByZWFkOiBkb2N4RmlsZS5yZWFkLmJpbmQoZG9jeEZpbGUsIHBhdGgpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVhZEltYWdlKGltYWdlRmlsZSwgYWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGVudFR5cGUgPSBjb250ZW50VHlwZXMuZmluZENvbnRlbnRUeXBlKGltYWdlRmlsZS5wYXRoKTtcblxuICAgICAgICB2YXIgaW1hZ2UgPSBkb2N1bWVudHMuSW1hZ2Uoe1xuICAgICAgICAgICAgcmVhZEltYWdlOiBpbWFnZUZpbGUucmVhZCxcbiAgICAgICAgICAgIGFsdFRleHQ6IGFsdFRleHQsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogY29udGVudFR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB3YXJuaW5ncyA9IHN1cHBvcnRlZEltYWdlVHlwZXNbY29udGVudFR5cGVdID9cbiAgICAgICAgICAgIFtdIDogd2FybmluZyhcIkltYWdlIG9mIHR5cGUgXCIgKyBjb250ZW50VHlwZSArIFwiIGlzIHVubGlrZWx5IHRvIGRpc3BsYXkgaW4gd2ViIGJyb3dzZXJzXCIpO1xuICAgICAgICByZXR1cm4gZWxlbWVudFJlc3VsdFdpdGhNZXNzYWdlcyhpbWFnZSwgd2FybmluZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuZGVmaW5lZFN0eWxlV2FybmluZyh0eXBlLCBzdHlsZUlkKSB7XG4gICAgICAgIHJldHVybiB3YXJuaW5nKFxuICAgICAgICAgICAgdHlwZSArIFwiIHN0eWxlIHdpdGggSUQgXCIgKyBzdHlsZUlkICsgXCIgd2FzIHJlZmVyZW5jZWQgYnV0IG5vdCBkZWZpbmVkIGluIHRoZSBkb2N1bWVudFwiKTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcmVhZE51bWJlcmluZ1Byb3BlcnRpZXMoc3R5bGVJZCwgZWxlbWVudCwgbnVtYmVyaW5nKSB7XG4gICAgdmFyIGxldmVsID0gZWxlbWVudC5maXJzdE9yRW1wdHkoXCJ3OmlsdmxcIikuYXR0cmlidXRlc1tcInc6dmFsXCJdO1xuICAgIHZhciBudW1JZCA9IGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpudW1JZFwiKS5hdHRyaWJ1dGVzW1widzp2YWxcIl07XG4gICAgaWYgKGxldmVsICE9PSB1bmRlZmluZWQgJiYgbnVtSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVtYmVyaW5nLmZpbmRMZXZlbChudW1JZCwgbGV2ZWwpO1xuICAgIH1cblxuICAgIGlmIChzdHlsZUlkICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGxldmVsQnlTdHlsZUlkID0gbnVtYmVyaW5nLmZpbmRMZXZlbEJ5UGFyYWdyYXBoU3R5bGVJZChzdHlsZUlkKTtcbiAgICAgICAgaWYgKGxldmVsQnlTdHlsZUlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbEJ5U3R5bGVJZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG52YXIgc3VwcG9ydGVkSW1hZ2VUeXBlcyA9IHtcbiAgICBcImltYWdlL3BuZ1wiOiB0cnVlLFxuICAgIFwiaW1hZ2UvZ2lmXCI6IHRydWUsXG4gICAgXCJpbWFnZS9qcGVnXCI6IHRydWUsXG4gICAgXCJpbWFnZS9zdmcreG1sXCI6IHRydWUsXG4gICAgXCJpbWFnZS90aWZmXCI6IHRydWVcbn07XG5cbnZhciBpZ25vcmVFbGVtZW50cyA9IHtcbiAgICBcIm9mZmljZS13b3JkOndyYXBcIjogdHJ1ZSxcbiAgICBcInY6c2hhZG93XCI6IHRydWUsXG4gICAgXCJ2OnNoYXBldHlwZVwiOiB0cnVlLFxuICAgIFwidzphbm5vdGF0aW9uUmVmXCI6IHRydWUsXG4gICAgXCJ3OmJvb2ttYXJrRW5kXCI6IHRydWUsXG4gICAgXCJ3OnNlY3RQclwiOiB0cnVlLFxuICAgIFwidzpwcm9vZkVyclwiOiB0cnVlLFxuICAgIFwidzpsYXN0UmVuZGVyZWRQYWdlQnJlYWtcIjogdHJ1ZSxcbiAgICBcInc6Y29tbWVudFJhbmdlU3RhcnRcIjogdHJ1ZSxcbiAgICBcInc6Y29tbWVudFJhbmdlRW5kXCI6IHRydWUsXG4gICAgXCJ3OmRlbFwiOiB0cnVlLFxuICAgIFwidzpmb290bm90ZVJlZlwiOiB0cnVlLFxuICAgIFwidzplbmRub3RlUmVmXCI6IHRydWUsXG4gICAgXCJ3OnBQclwiOiB0cnVlLFxuICAgIFwidzpyUHJcIjogdHJ1ZSxcbiAgICBcInc6dGJsUHJcIjogdHJ1ZSxcbiAgICBcInc6dGJsR3JpZFwiOiB0cnVlLFxuICAgIFwidzp0clByXCI6IHRydWUsXG4gICAgXCJ3OnRjUHJcIjogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZW1wdHlSZXN1bHRXaXRoTWVzc2FnZXMobWVzc2FnZXMpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRSZXN1bHQobnVsbCwgbnVsbCwgbWVzc2FnZXMpO1xufVxuXG5mdW5jdGlvbiBlbXB0eVJlc3VsdCgpIHtcbiAgICByZXR1cm4gbmV3IFJlYWRSZXN1bHQobnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRSZXN1bHQoZWxlbWVudCkge1xuICAgIHJldHVybiBuZXcgUmVhZFJlc3VsdChlbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFJlc3VsdFdpdGhNZXNzYWdlcyhlbGVtZW50LCBtZXNzYWdlcykge1xuICAgIHJldHVybiBuZXcgUmVhZFJlc3VsdChlbGVtZW50LCBudWxsLCBtZXNzYWdlcyk7XG59XG5cbmZ1bmN0aW9uIFJlYWRSZXN1bHQoZWxlbWVudCwgZXh0cmEsIG1lc3NhZ2VzKSB7XG4gICAgdGhpcy52YWx1ZSA9IGVsZW1lbnQgfHwgW107XG4gICAgdGhpcy5leHRyYSA9IGV4dHJhIHx8IFtdO1xuICAgIHRoaXMuX3Jlc3VsdCA9IG5ldyBSZXN1bHQoe1xuICAgICAgICBlbGVtZW50OiB0aGlzLnZhbHVlLFxuICAgICAgICBleHRyYTogZXh0cmFcbiAgICB9LCBtZXNzYWdlcyk7XG4gICAgdGhpcy5tZXNzYWdlcyA9IHRoaXMuX3Jlc3VsdC5tZXNzYWdlcztcbn1cblxuUmVhZFJlc3VsdC5wcm90b3R5cGUudG9FeHRyYSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUmVhZFJlc3VsdChudWxsLCBqb2luRWxlbWVudHModGhpcy5leHRyYSwgdGhpcy52YWx1ZSksIHRoaXMubWVzc2FnZXMpO1xufTtcblxuUmVhZFJlc3VsdC5wcm90b3R5cGUuaW5zZXJ0RXh0cmEgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZXh0cmEgPSB0aGlzLmV4dHJhO1xuICAgIGlmIChleHRyYSAmJiBleHRyYS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWFkUmVzdWx0KGpvaW5FbGVtZW50cyh0aGlzLnZhbHVlLCBleHRyYSksIG51bGwsIHRoaXMubWVzc2FnZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cblJlYWRSZXN1bHQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcmVzdWx0Lm1hcChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYyh2YWx1ZS5lbGVtZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJlYWRSZXN1bHQocmVzdWx0LnZhbHVlLCB0aGlzLmV4dHJhLCByZXN1bHQubWVzc2FnZXMpO1xufTtcblxuUmVhZFJlc3VsdC5wcm90b3R5cGUuZmxhdE1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgcmVzdWx0ID0gdGhpcy5fcmVzdWx0LmZsYXRNYXAoZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModmFsdWUuZWxlbWVudCkuX3Jlc3VsdDtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3IFJlYWRSZXN1bHQocmVzdWx0LnZhbHVlLmVsZW1lbnQsIGpvaW5FbGVtZW50cyh0aGlzLmV4dHJhLCByZXN1bHQudmFsdWUuZXh0cmEpLCByZXN1bHQubWVzc2FnZXMpO1xufTtcblxuUmVhZFJlc3VsdC5tYXAgPSBmdW5jdGlvbihmaXJzdCwgc2Vjb25kLCBmdW5jKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFkUmVzdWx0KFxuICAgICAgICBmdW5jKGZpcnN0LnZhbHVlLCBzZWNvbmQudmFsdWUpLFxuICAgICAgICBqb2luRWxlbWVudHMoZmlyc3QuZXh0cmEsIHNlY29uZC5leHRyYSksXG4gICAgICAgIGZpcnN0Lm1lc3NhZ2VzLmNvbmNhdChzZWNvbmQubWVzc2FnZXMpXG4gICAgKTtcbn07XG5cbmZ1bmN0aW9uIGNvbWJpbmVSZXN1bHRzKHJlc3VsdHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gUmVzdWx0LmNvbWJpbmUoXy5wbHVjayhyZXN1bHRzLCBcIl9yZXN1bHRcIikpO1xuICAgIHJldHVybiBuZXcgUmVhZFJlc3VsdChcbiAgICAgICAgXy5mbGF0dGVuKF8ucGx1Y2socmVzdWx0LnZhbHVlLCBcImVsZW1lbnRcIikpLFxuICAgICAgICBfLmZpbHRlcihfLmZsYXR0ZW4oXy5wbHVjayhyZXN1bHQudmFsdWUsIFwiZXh0cmFcIikpLCBpZGVudGl0eSksXG4gICAgICAgIHJlc3VsdC5tZXNzYWdlc1xuICAgICk7XG59XG5cbmZ1bmN0aW9uIGpvaW5FbGVtZW50cyhmaXJzdCwgc2Vjb25kKSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihbZmlyc3QsIHNlY29uZF0pO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbn1cblxufSx7XCIuLi9kb2N1bWVudHNcIjo0LFwiLi4vcmVzdWx0c1wiOjI1LFwiLi91cmlzXCI6MTYsXCJkaW5nYmF0LXRvLXVuaWNvZGVcIjo4NSxcInVuZGVyc2NvcmVcIjoxMDJ9XSw2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi4vZG9jdW1lbnRzXCIpO1xudmFyIFJlc3VsdCA9IHJlcXVpcmUoXCIuLi9yZXN1bHRzXCIpLlJlc3VsdDtcblxuZnVuY3Rpb24gY3JlYXRlQ29tbWVudHNSZWFkZXIoYm9keVJlYWRlcikge1xuICAgIGZ1bmN0aW9uIHJlYWRDb21tZW50c1htbChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBSZXN1bHQuY29tYmluZShlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidzpjb21tZW50XCIpXG4gICAgICAgICAgICAubWFwKHJlYWRDb21tZW50RWxlbWVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRDb21tZW50RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBpZCA9IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6aWRcIl07XG5cbiAgICAgICAgZnVuY3Rpb24gcmVhZE9wdGlvbmFsQXR0cmlidXRlKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiAoZWxlbWVudC5hdHRyaWJ1dGVzW25hbWVdIHx8IFwiXCIpLnRyaW0oKSB8fCBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGJvZHlSZWFkZXIucmVhZFhtbEVsZW1lbnRzKGVsZW1lbnQuY2hpbGRyZW4pXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGJvZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRzLmNvbW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50SWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBib2R5LFxuICAgICAgICAgICAgICAgICAgICBhdXRob3JOYW1lOiByZWFkT3B0aW9uYWxBdHRyaWJ1dGUoXCJ3OmF1dGhvclwiKSxcbiAgICAgICAgICAgICAgICAgICAgYXV0aG9ySW5pdGlhbHM6IHJlYWRPcHRpb25hbEF0dHJpYnV0ZShcInc6aW5pdGlhbHNcIilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVhZENvbW1lbnRzWG1sO1xufVxuXG5leHBvcnRzLmNyZWF0ZUNvbW1lbnRzUmVhZGVyID0gY3JlYXRlQ29tbWVudHNSZWFkZXI7XG5cbn0se1wiLi4vZG9jdW1lbnRzXCI6NCxcIi4uL3Jlc3VsdHNcIjoyNX1dLDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5yZWFkQ29udGVudFR5cGVzRnJvbVhtbCA9IHJlYWRDb250ZW50VHlwZXNGcm9tWG1sO1xuXG52YXIgZmFsbGJhY2tDb250ZW50VHlwZXMgPSB7XG4gICAgXCJwbmdcIjogXCJwbmdcIixcbiAgICBcImdpZlwiOiBcImdpZlwiLFxuICAgIFwianBlZ1wiOiBcImpwZWdcIixcbiAgICBcImpwZ1wiOiBcImpwZWdcIixcbiAgICBcInRpZlwiOiBcInRpZmZcIixcbiAgICBcInRpZmZcIjogXCJ0aWZmXCIsXG4gICAgXCJibXBcIjogXCJibXBcIlxufTtcblxuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGVzID0gY29udGVudFR5cGVzKHt9LCB7fSk7XG5cblxuZnVuY3Rpb24gcmVhZENvbnRlbnRUeXBlc0Zyb21YbWwoZWxlbWVudCkge1xuICAgIHZhciBleHRlbnNpb25EZWZhdWx0cyA9IHt9O1xuICAgIHZhciBvdmVycmlkZXMgPSB7fTtcbiAgICBcbiAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IFwiY29udGVudC10eXBlczpEZWZhdWx0XCIpIHtcbiAgICAgICAgICAgIGV4dGVuc2lvbkRlZmF1bHRzW2NoaWxkLmF0dHJpYnV0ZXMuRXh0ZW5zaW9uXSA9IGNoaWxkLmF0dHJpYnV0ZXMuQ29udGVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IFwiY29udGVudC10eXBlczpPdmVycmlkZVwiKSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IGNoaWxkLmF0dHJpYnV0ZXMuUGFydE5hbWU7XG4gICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3ZlcnJpZGVzW25hbWVdID0gY2hpbGQuYXR0cmlidXRlcy5Db250ZW50VHlwZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb250ZW50VHlwZXMob3ZlcnJpZGVzLCBleHRlbnNpb25EZWZhdWx0cyk7XG59XG5cbmZ1bmN0aW9uIGNvbnRlbnRUeXBlcyhvdmVycmlkZXMsIGV4dGVuc2lvbkRlZmF1bHRzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmluZENvbnRlbnRUeXBlOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICAgICAgICB2YXIgb3ZlcnJpZGVDb250ZW50VHlwZSA9IG92ZXJyaWRlc1twYXRoXTtcbiAgICAgICAgICAgIGlmIChvdmVycmlkZUNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFR5cGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgICAgICAgICB2YXIgZXh0ZW5zaW9uID0gcGF0aFBhcnRzW3BhdGhQYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uRGVmYXVsdHMuaGFzT3duUHJvcGVydHkoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0ZW5zaW9uRGVmYXVsdHNbZXh0ZW5zaW9uXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmFsbGJhY2sgPSBmYWxsYmFja0NvbnRlbnRUeXBlc1tleHRlbnNpb24udG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaW1hZ2UvXCIgKyBmYWxsYmFjaztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBcbn1cblxufSx7fV0sODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5leHBvcnRzLkRvY3VtZW50WG1sUmVhZGVyID0gRG9jdW1lbnRYbWxSZWFkZXI7XG5cbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi4vZG9jdW1lbnRzXCIpO1xudmFyIFJlc3VsdCA9IHJlcXVpcmUoXCIuLi9yZXN1bHRzXCIpLlJlc3VsdDtcblxuXG5mdW5jdGlvbiBEb2N1bWVudFhtbFJlYWRlcihvcHRpb25zKSB7XG4gICAgdmFyIGJvZHlSZWFkZXIgPSBvcHRpb25zLmJvZHlSZWFkZXI7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0WG1sVG9Eb2N1bWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBib2R5ID0gZWxlbWVudC5maXJzdChcInc6Ym9keVwiKTtcblxuICAgICAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCB0aGUgYm9keSBlbGVtZW50OiBhcmUgeW91IHN1cmUgdGhpcyBpcyBhIGRvY3ggZmlsZT9cIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVzdWx0ID0gYm9keVJlYWRlci5yZWFkWG1sRWxlbWVudHMoYm9keS5jaGlsZHJlbilcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGRvY3VtZW50cy5Eb2N1bWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICAgICAgICBub3Rlczogb3B0aW9ucy5ub3RlcyxcbiAgICAgICAgICAgICAgICAgICAgY29tbWVudHM6IG9wdGlvbnMuY29tbWVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChyZXN1bHQudmFsdWUsIHJlc3VsdC5tZXNzYWdlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udmVydFhtbFRvRG9jdW1lbnQ6IGNvbnZlcnRYbWxUb0RvY3VtZW50XG4gICAgfTtcbn1cblxufSx7XCIuLi9kb2N1bWVudHNcIjo0LFwiLi4vcmVzdWx0c1wiOjI1fV0sOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZXhwb3J0cy5fZmluZFBhcnRQYXRocyA9IGZpbmRQYXJ0UGF0aHM7XG5cbnZhciBwcm9taXNlcyA9IHJlcXVpcmUoXCIuLi9wcm9taXNlc1wiKTtcbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi4vZG9jdW1lbnRzXCIpO1xudmFyIFJlc3VsdCA9IHJlcXVpcmUoXCIuLi9yZXN1bHRzXCIpLlJlc3VsdDtcbnZhciB6aXBmaWxlID0gcmVxdWlyZShcIi4uL3ppcGZpbGVcIik7XG5cbnZhciByZWFkWG1sRnJvbVppcEZpbGUgPSByZXF1aXJlKFwiLi9vZmZpY2UteG1sLXJlYWRlclwiKS5yZWFkWG1sRnJvbVppcEZpbGU7XG52YXIgY3JlYXRlQm9keVJlYWRlciA9IHJlcXVpcmUoXCIuL2JvZHktcmVhZGVyXCIpLmNyZWF0ZUJvZHlSZWFkZXI7XG52YXIgRG9jdW1lbnRYbWxSZWFkZXIgPSByZXF1aXJlKFwiLi9kb2N1bWVudC14bWwtcmVhZGVyXCIpLkRvY3VtZW50WG1sUmVhZGVyO1xudmFyIHJlbGF0aW9uc2hpcHNSZWFkZXIgPSByZXF1aXJlKFwiLi9yZWxhdGlvbnNoaXBzLXJlYWRlclwiKTtcbnZhciBjb250ZW50VHlwZXNSZWFkZXIgPSByZXF1aXJlKFwiLi9jb250ZW50LXR5cGVzLXJlYWRlclwiKTtcbnZhciBudW1iZXJpbmdYbWwgPSByZXF1aXJlKFwiLi9udW1iZXJpbmcteG1sXCIpO1xudmFyIHN0eWxlc1JlYWRlciA9IHJlcXVpcmUoXCIuL3N0eWxlcy1yZWFkZXJcIik7XG52YXIgbm90ZXNSZWFkZXIgPSByZXF1aXJlKFwiLi9ub3Rlcy1yZWFkZXJcIik7XG52YXIgY29tbWVudHNSZWFkZXIgPSByZXF1aXJlKFwiLi9jb21tZW50cy1yZWFkZXJcIik7XG52YXIgRmlsZXMgPSByZXF1aXJlKFwiLi9maWxlc1wiKS5GaWxlcztcblxuXG5mdW5jdGlvbiByZWFkKGRvY3hGaWxlLCBpbnB1dCkge1xuICAgIGlucHV0ID0gaW5wdXQgfHwge307XG5cbiAgICByZXR1cm4gcHJvbWlzZXMucHJvcHMoe1xuICAgICAgICBjb250ZW50VHlwZXM6IHJlYWRDb250ZW50VHlwZXNGcm9tWmlwRmlsZShkb2N4RmlsZSksXG4gICAgICAgIHBhcnRQYXRoczogZmluZFBhcnRQYXRocyhkb2N4RmlsZSksXG4gICAgICAgIGRvY3hGaWxlOiBkb2N4RmlsZSxcbiAgICAgICAgZmlsZXM6IGlucHV0LnBhdGggPyBGaWxlcy5yZWxhdGl2ZVRvRmlsZShpbnB1dC5wYXRoKSA6IG5ldyBGaWxlcyhudWxsKVxuICAgIH0pLmFsc28oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdHlsZXM6IHJlYWRTdHlsZXNGcm9tWmlwRmlsZShkb2N4RmlsZSwgcmVzdWx0LnBhcnRQYXRocy5zdHlsZXMpXG4gICAgICAgIH07XG4gICAgfSkuYWxzbyhmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG51bWJlcmluZzogcmVhZE51bWJlcmluZ0Zyb21aaXBGaWxlKGRvY3hGaWxlLCByZXN1bHQucGFydFBhdGhzLm51bWJlcmluZywgcmVzdWx0LnN0eWxlcylcbiAgICAgICAgfTtcbiAgICB9KS5hbHNvKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9vdG5vdGVzOiByZWFkWG1sRmlsZVdpdGhCb2R5KHJlc3VsdC5wYXJ0UGF0aHMuZm9vdG5vdGVzLCByZXN1bHQsIGZ1bmN0aW9uKGJvZHlSZWFkZXIsIHhtbCkge1xuICAgICAgICAgICAgICAgIGlmICh4bWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vdGVzUmVhZGVyLmNyZWF0ZUZvb3Rub3Rlc1JlYWRlcihib2R5UmVhZGVyKSh4bWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0KFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVuZG5vdGVzOiByZWFkWG1sRmlsZVdpdGhCb2R5KHJlc3VsdC5wYXJ0UGF0aHMuZW5kbm90ZXMsIHJlc3VsdCwgZnVuY3Rpb24oYm9keVJlYWRlciwgeG1sKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhtbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm90ZXNSZWFkZXIuY3JlYXRlRW5kbm90ZXNSZWFkZXIoYm9keVJlYWRlcikoeG1sKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjb21tZW50czogcmVhZFhtbEZpbGVXaXRoQm9keShyZXN1bHQucGFydFBhdGhzLmNvbW1lbnRzLCByZXN1bHQsIGZ1bmN0aW9uKGJvZHlSZWFkZXIsIHhtbCkge1xuICAgICAgICAgICAgICAgIGlmICh4bWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1lbnRzUmVhZGVyLmNyZWF0ZUNvbW1lbnRzUmVhZGVyKGJvZHlSZWFkZXIpKHhtbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH07XG4gICAgfSkuYWxzbyhmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vdGVzOiByZXN1bHQuZm9vdG5vdGVzLmZsYXRNYXAoZnVuY3Rpb24oZm9vdG5vdGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5lbmRub3Rlcy5tYXAoZnVuY3Rpb24oZW5kbm90ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBkb2N1bWVudHMuTm90ZXMoZm9vdG5vdGVzLmNvbmNhdChlbmRub3RlcykpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVhZFhtbEZpbGVXaXRoQm9keShyZXN1bHQucGFydFBhdGhzLm1haW5Eb2N1bWVudCwgcmVzdWx0LCBmdW5jdGlvbihib2R5UmVhZGVyLCB4bWwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQubm90ZXMuZmxhdE1hcChmdW5jdGlvbihub3Rlcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuY29tbWVudHMuZmxhdE1hcChmdW5jdGlvbihjb21tZW50cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IERvY3VtZW50WG1sUmVhZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlSZWFkZXI6IGJvZHlSZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3Rlczogbm90ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50czogY29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkZXIuY29udmVydFhtbFRvRG9jdW1lbnQoeG1sKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZmluZFBhcnRQYXRocyhkb2N4RmlsZSkge1xuICAgIHJldHVybiByZWFkUGFja2FnZVJlbGF0aW9uc2hpcHMoZG9jeEZpbGUpLnRoZW4oZnVuY3Rpb24ocGFja2FnZVJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgdmFyIG1haW5Eb2N1bWVudFBhdGggPSBmaW5kUGFydFBhdGgoe1xuICAgICAgICAgICAgZG9jeEZpbGU6IGRvY3hGaWxlLFxuICAgICAgICAgICAgcmVsYXRpb25zaGlwczogcGFja2FnZVJlbGF0aW9uc2hpcHMsXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBUeXBlOiBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnRcIixcbiAgICAgICAgICAgIGJhc2VQYXRoOiBcIlwiLFxuICAgICAgICAgICAgZmFsbGJhY2tQYXRoOiBcIndvcmQvZG9jdW1lbnQueG1sXCJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFkb2N4RmlsZS5leGlzdHMobWFpbkRvY3VtZW50UGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIG1haW4gZG9jdW1lbnQgcGFydC4gQXJlIHlvdSBzdXJlIHRoaXMgaXMgYSB2YWxpZCAuZG9jeCBmaWxlP1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB4bWxGaWxlUmVhZGVyKHtcbiAgICAgICAgICAgIGZpbGVuYW1lOiByZWxhdGlvbnNoaXBzRmlsZW5hbWUobWFpbkRvY3VtZW50UGF0aCksXG4gICAgICAgICAgICByZWFkRWxlbWVudDogcmVsYXRpb25zaGlwc1JlYWRlci5yZWFkUmVsYXRpb25zaGlwcyxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogcmVsYXRpb25zaGlwc1JlYWRlci5kZWZhdWx0VmFsdWVcbiAgICAgICAgfSkoZG9jeEZpbGUpLnRoZW4oZnVuY3Rpb24oZG9jdW1lbnRSZWxhdGlvbnNoaXBzKSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5kUGFydFJlbGF0ZWRUb01haW5Eb2N1bWVudChuYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJ0UGF0aCh7XG4gICAgICAgICAgICAgICAgICAgIGRvY3hGaWxlOiBkb2N4RmlsZSxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwczogZG9jdW1lbnRSZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgICAgICAgICByZWxhdGlvbnNoaXBUeXBlOiBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvXCIgKyBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBiYXNlUGF0aDogemlwZmlsZS5zcGxpdFBhdGgobWFpbkRvY3VtZW50UGF0aCkuZGlybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tQYXRoOiBcIndvcmQvXCIgKyBuYW1lICsgXCIueG1sXCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYWluRG9jdW1lbnQ6IG1haW5Eb2N1bWVudFBhdGgsXG4gICAgICAgICAgICAgICAgY29tbWVudHM6IGZpbmRQYXJ0UmVsYXRlZFRvTWFpbkRvY3VtZW50KFwiY29tbWVudHNcIiksXG4gICAgICAgICAgICAgICAgZW5kbm90ZXM6IGZpbmRQYXJ0UmVsYXRlZFRvTWFpbkRvY3VtZW50KFwiZW5kbm90ZXNcIiksXG4gICAgICAgICAgICAgICAgZm9vdG5vdGVzOiBmaW5kUGFydFJlbGF0ZWRUb01haW5Eb2N1bWVudChcImZvb3Rub3Rlc1wiKSxcbiAgICAgICAgICAgICAgICBudW1iZXJpbmc6IGZpbmRQYXJ0UmVsYXRlZFRvTWFpbkRvY3VtZW50KFwibnVtYmVyaW5nXCIpLFxuICAgICAgICAgICAgICAgIHN0eWxlczogZmluZFBhcnRSZWxhdGVkVG9NYWluRG9jdW1lbnQoXCJzdHlsZXNcIilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBmaW5kUGFydFBhdGgob3B0aW9ucykge1xuICAgIHZhciBkb2N4RmlsZSA9IG9wdGlvbnMuZG9jeEZpbGU7XG4gICAgdmFyIHJlbGF0aW9uc2hpcHMgPSBvcHRpb25zLnJlbGF0aW9uc2hpcHM7XG4gICAgdmFyIHJlbGF0aW9uc2hpcFR5cGUgPSBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGU7XG4gICAgdmFyIGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aDtcbiAgICB2YXIgZmFsbGJhY2tQYXRoID0gb3B0aW9ucy5mYWxsYmFja1BhdGg7XG5cbiAgICB2YXIgdGFyZ2V0cyA9IHJlbGF0aW9uc2hpcHMuZmluZFRhcmdldHNCeVR5cGUocmVsYXRpb25zaGlwVHlwZSk7XG4gICAgdmFyIG5vcm1hbGlzZWRUYXJnZXRzID0gdGFyZ2V0cy5tYXAoZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBzdHJpcFByZWZpeCh6aXBmaWxlLmpvaW5QYXRoKGJhc2VQYXRoLCB0YXJnZXQpLCBcIi9cIik7XG4gICAgfSk7XG4gICAgdmFyIHZhbGlkVGFyZ2V0cyA9IG5vcm1hbGlzZWRUYXJnZXRzLmZpbHRlcihmdW5jdGlvbih0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIGRvY3hGaWxlLmV4aXN0cyh0YXJnZXQpO1xuICAgIH0pO1xuICAgIGlmICh2YWxpZFRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFja1BhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkVGFyZ2V0c1swXTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN0cmlwUHJlZml4KHZhbHVlLCBwcmVmaXgpIHtcbiAgICBpZiAodmFsdWUuc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpID09PSBwcmVmaXgpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB4bWxGaWxlUmVhZGVyKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oemlwRmlsZSkge1xuICAgICAgICByZXR1cm4gcmVhZFhtbEZyb21aaXBGaWxlKHppcEZpbGUsIG9wdGlvbnMuZmlsZW5hbWUpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPyBvcHRpb25zLnJlYWRFbGVtZW50KGVsZW1lbnQpIDogb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiByZWFkWG1sRmlsZVdpdGhCb2R5KGZpbGVuYW1lLCBvcHRpb25zLCBmdW5jKSB7XG4gICAgdmFyIHJlYWRSZWxhdGlvbnNoaXBzRnJvbVppcEZpbGUgPSB4bWxGaWxlUmVhZGVyKHtcbiAgICAgICAgZmlsZW5hbWU6IHJlbGF0aW9uc2hpcHNGaWxlbmFtZShmaWxlbmFtZSksXG4gICAgICAgIHJlYWRFbGVtZW50OiByZWxhdGlvbnNoaXBzUmVhZGVyLnJlYWRSZWxhdGlvbnNoaXBzLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHJlbGF0aW9uc2hpcHNSZWFkZXIuZGVmYXVsdFZhbHVlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVhZFJlbGF0aW9uc2hpcHNGcm9tWmlwRmlsZShvcHRpb25zLmRvY3hGaWxlKS50aGVuKGZ1bmN0aW9uKHJlbGF0aW9uc2hpcHMpIHtcbiAgICAgICAgdmFyIGJvZHlSZWFkZXIgPSBuZXcgY3JlYXRlQm9keVJlYWRlcih7XG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzOiByZWxhdGlvbnNoaXBzLFxuICAgICAgICAgICAgY29udGVudFR5cGVzOiBvcHRpb25zLmNvbnRlbnRUeXBlcyxcbiAgICAgICAgICAgIGRvY3hGaWxlOiBvcHRpb25zLmRvY3hGaWxlLFxuICAgICAgICAgICAgbnVtYmVyaW5nOiBvcHRpb25zLm51bWJlcmluZyxcbiAgICAgICAgICAgIHN0eWxlczogb3B0aW9ucy5zdHlsZXMsXG4gICAgICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlYWRYbWxGcm9tWmlwRmlsZShvcHRpb25zLmRvY3hGaWxlLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHhtbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKGJvZHlSZWFkZXIsIHhtbCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcmVsYXRpb25zaGlwc0ZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgdmFyIHNwbGl0ID0gemlwZmlsZS5zcGxpdFBhdGgoZmlsZW5hbWUpO1xuICAgIHJldHVybiB6aXBmaWxlLmpvaW5QYXRoKHNwbGl0LmRpcm5hbWUsIFwiX3JlbHNcIiwgc3BsaXQuYmFzZW5hbWUgKyBcIi5yZWxzXCIpO1xufVxuXG52YXIgcmVhZENvbnRlbnRUeXBlc0Zyb21aaXBGaWxlID0geG1sRmlsZVJlYWRlcih7XG4gICAgZmlsZW5hbWU6IFwiW0NvbnRlbnRfVHlwZXNdLnhtbFwiLFxuICAgIHJlYWRFbGVtZW50OiBjb250ZW50VHlwZXNSZWFkZXIucmVhZENvbnRlbnRUeXBlc0Zyb21YbWwsXG4gICAgZGVmYXVsdFZhbHVlOiBjb250ZW50VHlwZXNSZWFkZXIuZGVmYXVsdENvbnRlbnRUeXBlc1xufSk7XG5cbmZ1bmN0aW9uIHJlYWROdW1iZXJpbmdGcm9tWmlwRmlsZSh6aXBGaWxlLCBwYXRoLCBzdHlsZXMpIHtcbiAgICByZXR1cm4geG1sRmlsZVJlYWRlcih7XG4gICAgICAgIGZpbGVuYW1lOiBwYXRoLFxuICAgICAgICByZWFkRWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcmluZ1htbC5yZWFkTnVtYmVyaW5nWG1sKGVsZW1lbnQsIHtzdHlsZXM6IHN0eWxlc30pO1xuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0VmFsdWU6IG51bWJlcmluZ1htbC5kZWZhdWx0TnVtYmVyaW5nXG4gICAgfSkoemlwRmlsZSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTdHlsZXNGcm9tWmlwRmlsZSh6aXBGaWxlLCBwYXRoKSB7XG4gICAgcmV0dXJuIHhtbEZpbGVSZWFkZXIoe1xuICAgICAgICBmaWxlbmFtZTogcGF0aCxcbiAgICAgICAgcmVhZEVsZW1lbnQ6IHN0eWxlc1JlYWRlci5yZWFkU3R5bGVzWG1sLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IHN0eWxlc1JlYWRlci5kZWZhdWx0U3R5bGVzXG4gICAgfSkoemlwRmlsZSk7XG59XG5cbnZhciByZWFkUGFja2FnZVJlbGF0aW9uc2hpcHMgPSB4bWxGaWxlUmVhZGVyKHtcbiAgICBmaWxlbmFtZTogXCJfcmVscy8ucmVsc1wiLFxuICAgIHJlYWRFbGVtZW50OiByZWxhdGlvbnNoaXBzUmVhZGVyLnJlYWRSZWxhdGlvbnNoaXBzLFxuICAgIGRlZmF1bHRWYWx1ZTogcmVsYXRpb25zaGlwc1JlYWRlci5kZWZhdWx0VmFsdWVcbn0pO1xuXG59LHtcIi4uL2RvY3VtZW50c1wiOjQsXCIuLi9wcm9taXNlc1wiOjIzLFwiLi4vcmVzdWx0c1wiOjI1LFwiLi4vemlwZmlsZVwiOjQwLFwiLi9ib2R5LXJlYWRlclwiOjUsXCIuL2NvbW1lbnRzLXJlYWRlclwiOjYsXCIuL2NvbnRlbnQtdHlwZXMtcmVhZGVyXCI6NyxcIi4vZG9jdW1lbnQteG1sLXJlYWRlclwiOjgsXCIuL2ZpbGVzXCI6MSxcIi4vbm90ZXMtcmVhZGVyXCI6MTAsXCIuL251bWJlcmluZy14bWxcIjoxMSxcIi4vb2ZmaWNlLXhtbC1yZWFkZXJcIjoxMixcIi4vcmVsYXRpb25zaGlwcy1yZWFkZXJcIjoxMyxcIi4vc3R5bGVzLXJlYWRlclwiOjE1fV0sMTA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIGRvY3VtZW50cyA9IHJlcXVpcmUoXCIuLi9kb2N1bWVudHNcIik7XG52YXIgUmVzdWx0ID0gcmVxdWlyZShcIi4uL3Jlc3VsdHNcIikuUmVzdWx0O1xuXG5leHBvcnRzLmNyZWF0ZUZvb3Rub3Rlc1JlYWRlciA9IGNyZWF0ZVJlYWRlci5iaW5kKHRoaXMsIFwiZm9vdG5vdGVcIik7XG5leHBvcnRzLmNyZWF0ZUVuZG5vdGVzUmVhZGVyID0gY3JlYXRlUmVhZGVyLmJpbmQodGhpcywgXCJlbmRub3RlXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVSZWFkZXIobm90ZVR5cGUsIGJvZHlSZWFkZXIpIHtcbiAgICBmdW5jdGlvbiByZWFkTm90ZXNYbWwoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gUmVzdWx0LmNvbWJpbmUoZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInc6XCIgKyBub3RlVHlwZSlcbiAgICAgICAgICAgIC5maWx0ZXIoaXNGb290bm90ZUVsZW1lbnQpXG4gICAgICAgICAgICAubWFwKHJlYWRGb290bm90ZUVsZW1lbnQpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0Zvb3Rub3RlRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciB0eXBlID0gZWxlbWVudC5hdHRyaWJ1dGVzW1widzp0eXBlXCJdO1xuICAgICAgICByZXR1cm4gdHlwZSAhPT0gXCJjb250aW51YXRpb25TZXBhcmF0b3JcIiAmJiB0eXBlICE9PSBcInNlcGFyYXRvclwiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRGb290bm90ZUVsZW1lbnQoZm9vdG5vdGVFbGVtZW50KSB7XG4gICAgICAgIHZhciBpZCA9IGZvb3Rub3RlRWxlbWVudC5hdHRyaWJ1dGVzW1widzppZFwiXTtcbiAgICAgICAgcmV0dXJuIGJvZHlSZWFkZXIucmVhZFhtbEVsZW1lbnRzKGZvb3Rub3RlRWxlbWVudC5jaGlsZHJlbilcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24oYm9keSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudHMuTm90ZSh7bm90ZVR5cGU6IG5vdGVUeXBlLCBub3RlSWQ6IGlkLCBib2R5OiBib2R5fSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHJlYWROb3Rlc1htbDtcbn1cblxufSx7XCIuLi9kb2N1bWVudHNcIjo0LFwiLi4vcmVzdWx0c1wiOjI1fV0sMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcblxuZXhwb3J0cy5yZWFkTnVtYmVyaW5nWG1sID0gcmVhZE51bWJlcmluZ1htbDtcbmV4cG9ydHMuTnVtYmVyaW5nID0gTnVtYmVyaW5nO1xuZXhwb3J0cy5kZWZhdWx0TnVtYmVyaW5nID0gbmV3IE51bWJlcmluZyh7fSwge30pO1xuXG5mdW5jdGlvbiBOdW1iZXJpbmcobnVtcywgYWJzdHJhY3ROdW1zLCBzdHlsZXMpIHtcbiAgICB2YXIgYWxsTGV2ZWxzID0gXy5mbGF0dGVuKF8udmFsdWVzKGFic3RyYWN0TnVtcykubWFwKGZ1bmN0aW9uKGFic3RyYWN0TnVtKSB7XG4gICAgICAgIHJldHVybiBfLnZhbHVlcyhhYnN0cmFjdE51bS5sZXZlbHMpO1xuICAgIH0pKTtcblxuICAgIHZhciBsZXZlbHNCeVBhcmFncmFwaFN0eWxlSWQgPSBfLmluZGV4QnkoXG4gICAgICAgIGFsbExldmVscy5maWx0ZXIoZnVuY3Rpb24obGV2ZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBsZXZlbC5wYXJhZ3JhcGhTdHlsZUlkICE9IG51bGw7XG4gICAgICAgIH0pLFxuICAgICAgICBcInBhcmFncmFwaFN0eWxlSWRcIlxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBmaW5kTGV2ZWwobnVtSWQsIGxldmVsKSB7XG4gICAgICAgIHZhciBudW0gPSBudW1zW251bUlkXTtcbiAgICAgICAgaWYgKG51bSkge1xuICAgICAgICAgICAgdmFyIGFic3RyYWN0TnVtID0gYWJzdHJhY3ROdW1zW251bS5hYnN0cmFjdE51bUlkXTtcbiAgICAgICAgICAgIGlmICghYWJzdHJhY3ROdW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWJzdHJhY3ROdW0ubnVtU3R5bGVMaW5rID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWJzdHJhY3ROdW1zW251bS5hYnN0cmFjdE51bUlkXS5sZXZlbHNbbGV2ZWxdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBzdHlsZXMuZmluZE51bWJlcmluZ1N0eWxlQnlJZChhYnN0cmFjdE51bS5udW1TdHlsZUxpbmspO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kTGV2ZWwoc3R5bGUubnVtSWQsIGxldmVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZExldmVsQnlQYXJhZ3JhcGhTdHlsZUlkKHN0eWxlSWQpIHtcbiAgICAgICAgcmV0dXJuIGxldmVsc0J5UGFyYWdyYXBoU3R5bGVJZFtzdHlsZUlkXSB8fCBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGZpbmRMZXZlbDogZmluZExldmVsLFxuICAgICAgICBmaW5kTGV2ZWxCeVBhcmFncmFwaFN0eWxlSWQ6IGZpbmRMZXZlbEJ5UGFyYWdyYXBoU3R5bGVJZFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHJlYWROdW1iZXJpbmdYbWwocm9vdCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCAhb3B0aW9ucy5zdHlsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic3R5bGVzIGlzIG1pc3NpbmdcIik7XG4gICAgfVxuXG4gICAgdmFyIGFic3RyYWN0TnVtcyA9IHJlYWRBYnN0cmFjdE51bXMocm9vdCk7XG4gICAgdmFyIG51bXMgPSByZWFkTnVtcyhyb290LCBhYnN0cmFjdE51bXMpO1xuICAgIHJldHVybiBuZXcgTnVtYmVyaW5nKG51bXMsIGFic3RyYWN0TnVtcywgb3B0aW9ucy5zdHlsZXMpO1xufVxuXG5mdW5jdGlvbiByZWFkQWJzdHJhY3ROdW1zKHJvb3QpIHtcbiAgICB2YXIgYWJzdHJhY3ROdW1zID0ge307XG4gICAgcm9vdC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInc6YWJzdHJhY3ROdW1cIikuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBpZCA9IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6YWJzdHJhY3ROdW1JZFwiXTtcbiAgICAgICAgYWJzdHJhY3ROdW1zW2lkXSA9IHJlYWRBYnN0cmFjdE51bShlbGVtZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWJzdHJhY3ROdW1zO1xufVxuXG5mdW5jdGlvbiByZWFkQWJzdHJhY3ROdW0oZWxlbWVudCkge1xuICAgIHZhciBsZXZlbHMgPSB7fTtcbiAgICBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidzpsdmxcIikuZm9yRWFjaChmdW5jdGlvbihsZXZlbEVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGxldmVsSW5kZXggPSBsZXZlbEVsZW1lbnQuYXR0cmlidXRlc1tcInc6aWx2bFwiXTtcbiAgICAgICAgdmFyIG51bUZtdCA9IGxldmVsRWxlbWVudC5maXJzdE9yRW1wdHkoXCJ3Om51bUZtdFwiKS5hdHRyaWJ1dGVzW1widzp2YWxcIl07XG4gICAgICAgIHZhciBwYXJhZ3JhcGhTdHlsZUlkID0gbGV2ZWxFbGVtZW50LmZpcnN0T3JFbXB0eShcInc6cFN0eWxlXCIpLmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXTtcblxuICAgICAgICBsZXZlbHNbbGV2ZWxJbmRleF0gPSB7XG4gICAgICAgICAgICBpc09yZGVyZWQ6IG51bUZtdCAhPT0gXCJidWxsZXRcIixcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbEluZGV4LFxuICAgICAgICAgICAgcGFyYWdyYXBoU3R5bGVJZDogcGFyYWdyYXBoU3R5bGVJZFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgdmFyIG51bVN0eWxlTGluayA9IGVsZW1lbnQuZmlyc3RPckVtcHR5KFwidzpudW1TdHlsZUxpbmtcIikuYXR0cmlidXRlc1tcInc6dmFsXCJdO1xuXG4gICAgcmV0dXJuIHtsZXZlbHM6IGxldmVscywgbnVtU3R5bGVMaW5rOiBudW1TdHlsZUxpbmt9O1xufVxuXG5mdW5jdGlvbiByZWFkTnVtcyhyb290KSB7XG4gICAgdmFyIG51bXMgPSB7fTtcbiAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidzpudW1cIikuZm9yRWFjaChmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIHZhciBudW1JZCA9IGVsZW1lbnQuYXR0cmlidXRlc1tcInc6bnVtSWRcIl07XG4gICAgICAgIHZhciBhYnN0cmFjdE51bUlkID0gZWxlbWVudC5maXJzdChcInc6YWJzdHJhY3ROdW1JZFwiKS5hdHRyaWJ1dGVzW1widzp2YWxcIl07XG4gICAgICAgIG51bXNbbnVtSWRdID0ge2Fic3RyYWN0TnVtSWQ6IGFic3RyYWN0TnVtSWR9O1xuICAgIH0pO1xuICAgIHJldHVybiBudW1zO1xufVxuXG59LHtcInVuZGVyc2NvcmVcIjoxMDJ9XSwxMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgXyA9IHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpO1xuXG52YXIgcHJvbWlzZXMgPSByZXF1aXJlKFwiLi4vcHJvbWlzZXNcIik7XG52YXIgeG1sID0gcmVxdWlyZShcIi4uL3htbFwiKTtcblxuXG5leHBvcnRzLnJlYWQgPSByZWFkO1xuZXhwb3J0cy5yZWFkWG1sRnJvbVppcEZpbGUgPSByZWFkWG1sRnJvbVppcEZpbGU7XG5cbnZhciB4bWxOYW1lc3BhY2VNYXAgPSB7XG4gICAgLy8gVHJhbnNpdGlvbmFsIGZvcm1hdFxuICAgIFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3dvcmRwcm9jZXNzaW5nbWwvMjAwNi9tYWluXCI6IFwid1wiLFxuICAgIFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwc1wiOiBcInJcIixcbiAgICBcImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi93b3JkcHJvY2Vzc2luZ0RyYXdpbmdcIjogXCJ3cFwiLFxuICAgIFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW5cIjogXCJhXCIsXG4gICAgXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvcGljdHVyZVwiOiBcInBpY1wiLFxuXG4gICAgLy8gU3RyaWN0IGZvcm1hdFxuICAgIFwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvd29yZHByb2Nlc3NpbmdtbC9tYWluXCI6IFwid1wiLFxuICAgIFwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwc1wiOiBcInJcIixcbiAgICBcImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL2RyYXdpbmdtbC93b3JkcHJvY2Vzc2luZ0RyYXdpbmdcIjogXCJ3cFwiLFxuICAgIFwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvZHJhd2luZ21sL21haW5cIjogXCJhXCIsXG4gICAgXCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9kcmF3aW5nbWwvcGljdHVyZVwiOiBcInBpY1wiLFxuXG4gICAgLy8gQ29tbW9uXG4gICAgXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXNcIjogXCJjb250ZW50LXR5cGVzXCIsXG4gICAgXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIjogXCJyZWxhdGlvbnNoaXBzXCIsXG4gICAgXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGliaWxpdHkvMjAwNlwiOiBcIm1jXCIsXG4gICAgXCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbFwiOiBcInZcIixcbiAgICBcInVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOndvcmRcIjogXCJvZmZpY2Utd29yZFwiXG5cbn07XG5cblxuZnVuY3Rpb24gcmVhZCh4bWxTdHJpbmcpIHtcbiAgICByZXR1cm4geG1sLnJlYWRTdHJpbmcoeG1sU3RyaW5nLCB4bWxOYW1lc3BhY2VNYXApXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKGRvY3VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gY29sbGFwc2VBbHRlcm5hdGVDb250ZW50KGRvY3VtZW50KVswXTtcbiAgICAgICAgfSk7XG59XG5cblxuZnVuY3Rpb24gcmVhZFhtbEZyb21aaXBGaWxlKGRvY3hGaWxlLCBwYXRoKSB7XG4gICAgaWYgKGRvY3hGaWxlLmV4aXN0cyhwYXRoKSkge1xuICAgICAgICByZXR1cm4gZG9jeEZpbGUucmVhZChwYXRoLCBcInV0Zi04XCIpXG4gICAgICAgICAgICAudGhlbihzdHJpcFV0ZjhCb20pXG4gICAgICAgICAgICAudGhlbihyZWFkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvbWlzZXMucmVzb2x2ZShudWxsKTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gc3RyaXBVdGY4Qm9tKHhtbFN0cmluZykge1xuICAgIHJldHVybiB4bWxTdHJpbmcucmVwbGFjZSgvXlxcdUZFRkYvZywgJycpO1xufVxuXG5cbmZ1bmN0aW9uIGNvbGxhcHNlQWx0ZXJuYXRlQ29udGVudChub2RlKSB7XG4gICAgaWYgKG5vZGUudHlwZSA9PT0gXCJlbGVtZW50XCIpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSA9PT0gXCJtYzpBbHRlcm5hdGVDb250ZW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmZpcnN0KFwibWM6RmFsbGJhY2tcIikuY2hpbGRyZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gXy5mbGF0dGVuKG5vZGUuY2hpbGRyZW4ubWFwKGNvbGxhcHNlQWx0ZXJuYXRlQ29udGVudCwgdHJ1ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIFtub2RlXTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbbm9kZV07XG4gICAgfVxufVxuXG59LHtcIi4uL3Byb21pc2VzXCI6MjMsXCIuLi94bWxcIjozNSxcInVuZGVyc2NvcmVcIjoxMDJ9XSwxMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5leHBvcnRzLnJlYWRSZWxhdGlvbnNoaXBzID0gcmVhZFJlbGF0aW9uc2hpcHM7XG5leHBvcnRzLmRlZmF1bHRWYWx1ZSA9IG5ldyBSZWxhdGlvbnNoaXBzKFtdKTtcbmV4cG9ydHMuUmVsYXRpb25zaGlwcyA9IFJlbGF0aW9uc2hpcHM7XG5cblxuZnVuY3Rpb24gcmVhZFJlbGF0aW9uc2hpcHMoZWxlbWVudCkge1xuICAgIHZhciByZWxhdGlvbnNoaXBzID0gW107XG4gICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZC5uYW1lID09PSBcInJlbGF0aW9uc2hpcHM6UmVsYXRpb25zaGlwXCIpIHtcbiAgICAgICAgICAgIHZhciByZWxhdGlvbnNoaXAgPSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwSWQ6IGNoaWxkLmF0dHJpYnV0ZXMuSWQsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiBjaGlsZC5hdHRyaWJ1dGVzLlRhcmdldCxcbiAgICAgICAgICAgICAgICB0eXBlOiBjaGlsZC5hdHRyaWJ1dGVzLlR5cGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzLnB1c2gocmVsYXRpb25zaGlwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXcgUmVsYXRpb25zaGlwcyhyZWxhdGlvbnNoaXBzKTtcbn1cblxuZnVuY3Rpb24gUmVsYXRpb25zaGlwcyhyZWxhdGlvbnNoaXBzKSB7XG4gICAgdmFyIHRhcmdldHNCeVJlbGF0aW9uc2hpcElkID0ge307XG4gICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uc2hpcCkge1xuICAgICAgICB0YXJnZXRzQnlSZWxhdGlvbnNoaXBJZFtyZWxhdGlvbnNoaXAucmVsYXRpb25zaGlwSWRdID0gcmVsYXRpb25zaGlwLnRhcmdldDtcbiAgICB9KTtcblxuICAgIHZhciB0YXJnZXRzQnlUeXBlID0ge307XG4gICAgcmVsYXRpb25zaGlwcy5mb3JFYWNoKGZ1bmN0aW9uKHJlbGF0aW9uc2hpcCkge1xuICAgICAgICBpZiAoIXRhcmdldHNCeVR5cGVbcmVsYXRpb25zaGlwLnR5cGVdKSB7XG4gICAgICAgICAgICB0YXJnZXRzQnlUeXBlW3JlbGF0aW9uc2hpcC50eXBlXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldHNCeVR5cGVbcmVsYXRpb25zaGlwLnR5cGVdLnB1c2gocmVsYXRpb25zaGlwLnRhcmdldCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBmaW5kVGFyZ2V0QnlSZWxhdGlvbnNoaXBJZDogZnVuY3Rpb24ocmVsYXRpb25zaGlwSWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRzQnlSZWxhdGlvbnNoaXBJZFtyZWxhdGlvbnNoaXBJZF07XG4gICAgICAgIH0sXG4gICAgICAgIGZpbmRUYXJnZXRzQnlUeXBlOiBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0c0J5VHlwZVt0eXBlXSB8fCBbXTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbn0se31dLDE0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbnZhciBwcm9taXNlcyA9IHJlcXVpcmUoXCIuLi9wcm9taXNlc1wiKTtcbnZhciB4bWwgPSByZXF1aXJlKFwiLi4veG1sXCIpO1xuXG5leHBvcnRzLndyaXRlU3R5bGVNYXAgPSB3cml0ZVN0eWxlTWFwO1xuZXhwb3J0cy5yZWFkU3R5bGVNYXAgPSByZWFkU3R5bGVNYXA7XG5cblxudmFyIHNjaGVtYSA9IFwiaHR0cDovL3NjaGVtYXMuendvYmJsZS5vcmcvbWFtbW90aC9zdHlsZS1tYXBcIjtcbnZhciBzdHlsZU1hcFBhdGggPSBcIm1hbW1vdGgvc3R5bGUtbWFwXCI7XG52YXIgc3R5bGVNYXBBYnNvbHV0ZVBhdGggPSBcIi9cIiArIHN0eWxlTWFwUGF0aDtcblxuZnVuY3Rpb24gd3JpdGVTdHlsZU1hcChkb2N4RmlsZSwgc3R5bGVNYXApIHtcbiAgICBkb2N4RmlsZS53cml0ZShzdHlsZU1hcFBhdGgsIHN0eWxlTWFwKTtcbiAgICByZXR1cm4gdXBkYXRlUmVsYXRpb25zaGlwcyhkb2N4RmlsZSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRlbnRUeXBlcyhkb2N4RmlsZSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlbGF0aW9uc2hpcHMoZG9jeEZpbGUpIHtcbiAgICB2YXIgcGF0aCA9IFwid29yZC9fcmVscy9kb2N1bWVudC54bWwucmVsc1wiO1xuICAgIHZhciByZWxhdGlvbnNoaXBzVXJpID0gXCJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHNcIjtcbiAgICB2YXIgcmVsYXRpb25zaGlwRWxlbWVudE5hbWUgPSBcIntcIiArIHJlbGF0aW9uc2hpcHNVcmkgKyBcIn1SZWxhdGlvbnNoaXBcIjtcbiAgICByZXR1cm4gZG9jeEZpbGUucmVhZChwYXRoLCBcInV0ZjhcIilcbiAgICAgICAgLnRoZW4oeG1sLnJlYWRTdHJpbmcpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlbGF0aW9uc2hpcHNDb250YWluZXIpIHtcbiAgICAgICAgICAgIHZhciByZWxhdGlvbnNoaXBzID0gcmVsYXRpb25zaGlwc0NvbnRhaW5lci5jaGlsZHJlbjtcbiAgICAgICAgICAgIGFkZE9yVXBkYXRlRWxlbWVudChyZWxhdGlvbnNoaXBzLCByZWxhdGlvbnNoaXBFbGVtZW50TmFtZSwgXCJJZFwiLCB7XG4gICAgICAgICAgICAgICAgXCJJZFwiOiBcInJNYW1tb3RoU3R5bGVNYXBcIixcbiAgICAgICAgICAgICAgICBcIlR5cGVcIjogc2NoZW1hLFxuICAgICAgICAgICAgICAgIFwiVGFyZ2V0XCI6IHN0eWxlTWFwQWJzb2x1dGVQYXRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSB7XCJcIjogcmVsYXRpb25zaGlwc1VyaX07XG4gICAgICAgICAgICByZXR1cm4gZG9jeEZpbGUud3JpdGUocGF0aCwgeG1sLndyaXRlU3RyaW5nKHJlbGF0aW9uc2hpcHNDb250YWluZXIsIG5hbWVzcGFjZXMpKTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRlbnRUeXBlcyhkb2N4RmlsZSkge1xuICAgIHZhciBwYXRoID0gXCJbQ29udGVudF9UeXBlc10ueG1sXCI7XG4gICAgdmFyIGNvbnRlbnRUeXBlc1VyaSA9IFwiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzXCI7XG4gICAgdmFyIG92ZXJyaWRlTmFtZSA9IFwie1wiICsgY29udGVudFR5cGVzVXJpICsgXCJ9T3ZlcnJpZGVcIjtcbiAgICByZXR1cm4gZG9jeEZpbGUucmVhZChwYXRoLCBcInV0ZjhcIilcbiAgICAgICAgLnRoZW4oeG1sLnJlYWRTdHJpbmcpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKHR5cGVzRWxlbWVudCkge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gdHlwZXNFbGVtZW50LmNoaWxkcmVuO1xuICAgICAgICAgICAgYWRkT3JVcGRhdGVFbGVtZW50KGNoaWxkcmVuLCBvdmVycmlkZU5hbWUsIFwiUGFydE5hbWVcIiwge1xuICAgICAgICAgICAgICAgIFwiUGFydE5hbWVcIjogc3R5bGVNYXBBYnNvbHV0ZVBhdGgsXG4gICAgICAgICAgICAgICAgXCJDb250ZW50VHlwZVwiOiBcInRleHQvcHJzLm1hbW1vdGguc3R5bGUtbWFwXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIG5hbWVzcGFjZXMgPSB7XCJcIjogY29udGVudFR5cGVzVXJpfTtcbiAgICAgICAgICAgIHJldHVybiBkb2N4RmlsZS53cml0ZShwYXRoLCB4bWwud3JpdGVTdHJpbmcodHlwZXNFbGVtZW50LCBuYW1lc3BhY2VzKSk7XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRPclVwZGF0ZUVsZW1lbnQoZWxlbWVudHMsIG5hbWUsIGlkZW50aWZ5aW5nQXR0cmlidXRlLCBhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIGV4aXN0aW5nRWxlbWVudCA9IF8uZmluZChlbGVtZW50cywgZnVuY3Rpb24oZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5uYW1lID09PSBuYW1lICYmXG4gICAgICAgICAgICBlbGVtZW50LmF0dHJpYnV0ZXNbaWRlbnRpZnlpbmdBdHRyaWJ1dGVdID09PSBhdHRyaWJ1dGVzW2lkZW50aWZ5aW5nQXR0cmlidXRlXTtcbiAgICB9KTtcbiAgICBpZiAoZXhpc3RpbmdFbGVtZW50KSB7XG4gICAgICAgIGV4aXN0aW5nRWxlbWVudC5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cy5wdXNoKHhtbC5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMpKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRTdHlsZU1hcChkb2N4RmlsZSkge1xuICAgIGlmIChkb2N4RmlsZS5leGlzdHMoc3R5bGVNYXBQYXRoKSkge1xuICAgICAgICByZXR1cm4gZG9jeEZpbGUucmVhZChzdHlsZU1hcFBhdGgsIFwidXRmOFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcHJvbWlzZXMucmVzb2x2ZShudWxsKTtcbiAgICB9XG59XG5cbn0se1wiLi4vcHJvbWlzZXNcIjoyMyxcIi4uL3htbFwiOjM1LFwidW5kZXJzY29yZVwiOjEwMn1dLDE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMucmVhZFN0eWxlc1htbCA9IHJlYWRTdHlsZXNYbWw7XG5leHBvcnRzLlN0eWxlcyA9IFN0eWxlcztcbmV4cG9ydHMuZGVmYXVsdFN0eWxlcyA9IG5ldyBTdHlsZXMoe30sIHt9KTtcblxuZnVuY3Rpb24gU3R5bGVzKHBhcmFncmFwaFN0eWxlcywgY2hhcmFjdGVyU3R5bGVzLCB0YWJsZVN0eWxlcywgbnVtYmVyaW5nU3R5bGVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZmluZFBhcmFncmFwaFN0eWxlQnlJZDogZnVuY3Rpb24oc3R5bGVJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaFN0eWxlc1tzdHlsZUlkXTtcbiAgICAgICAgfSxcbiAgICAgICAgZmluZENoYXJhY3RlclN0eWxlQnlJZDogZnVuY3Rpb24oc3R5bGVJZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlclN0eWxlc1tzdHlsZUlkXTtcbiAgICAgICAgfSxcbiAgICAgICAgZmluZFRhYmxlU3R5bGVCeUlkOiBmdW5jdGlvbihzdHlsZUlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVTdHlsZXNbc3R5bGVJZF07XG4gICAgICAgIH0sXG4gICAgICAgIGZpbmROdW1iZXJpbmdTdHlsZUJ5SWQ6IGZ1bmN0aW9uKHN0eWxlSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJpbmdTdHlsZXNbc3R5bGVJZF07XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5TdHlsZXMuRU1QVFkgPSBuZXcgU3R5bGVzKHt9LCB7fSwge30sIHt9KTtcblxuZnVuY3Rpb24gcmVhZFN0eWxlc1htbChyb290KSB7XG4gICAgdmFyIHBhcmFncmFwaFN0eWxlcyA9IHt9O1xuICAgIHZhciBjaGFyYWN0ZXJTdHlsZXMgPSB7fTtcbiAgICB2YXIgdGFibGVTdHlsZXMgPSB7fTtcbiAgICB2YXIgbnVtYmVyaW5nU3R5bGVzID0ge307XG5cbiAgICB2YXIgc3R5bGVzID0ge1xuICAgICAgICBcInBhcmFncmFwaFwiOiBwYXJhZ3JhcGhTdHlsZXMsXG4gICAgICAgIFwiY2hhcmFjdGVyXCI6IGNoYXJhY3RlclN0eWxlcyxcbiAgICAgICAgXCJ0YWJsZVwiOiB0YWJsZVN0eWxlc1xuICAgIH07XG5cbiAgICByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidzpzdHlsZVwiKS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlRWxlbWVudCkge1xuICAgICAgICB2YXIgc3R5bGUgPSByZWFkU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgICAgIGlmIChzdHlsZS50eXBlID09PSBcIm51bWJlcmluZ1wiKSB7XG4gICAgICAgICAgICBudW1iZXJpbmdTdHlsZXNbc3R5bGUuc3R5bGVJZF0gPSByZWFkTnVtYmVyaW5nU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3R5bGVTZXQgPSBzdHlsZXNbc3R5bGUudHlwZV07XG4gICAgICAgICAgICBpZiAoc3R5bGVTZXQpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVNldFtzdHlsZS5zdHlsZUlkXSA9IHN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFN0eWxlcyhwYXJhZ3JhcGhTdHlsZXMsIGNoYXJhY3RlclN0eWxlcywgdGFibGVTdHlsZXMsIG51bWJlcmluZ1N0eWxlcyk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gICAgdmFyIHR5cGUgPSBzdHlsZUVsZW1lbnQuYXR0cmlidXRlc1tcInc6dHlwZVwiXTtcbiAgICB2YXIgc3R5bGVJZCA9IHN0eWxlRWxlbWVudC5hdHRyaWJ1dGVzW1widzpzdHlsZUlkXCJdO1xuICAgIHZhciBuYW1lID0gc3R5bGVOYW1lKHN0eWxlRWxlbWVudCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZUlkOiBzdHlsZUlkLCBuYW1lOiBuYW1lfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVOYW1lKHN0eWxlRWxlbWVudCkge1xuICAgIHZhciBuYW1lRWxlbWVudCA9IHN0eWxlRWxlbWVudC5maXJzdChcInc6bmFtZVwiKTtcbiAgICByZXR1cm4gbmFtZUVsZW1lbnQgPyBuYW1lRWxlbWVudC5hdHRyaWJ1dGVzW1widzp2YWxcIl0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZWFkTnVtYmVyaW5nU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAgIHZhciBudW1JZCA9IHN0eWxlRWxlbWVudFxuICAgICAgICAuZmlyc3RPckVtcHR5KFwidzpwUHJcIilcbiAgICAgICAgLmZpcnN0T3JFbXB0eShcInc6bnVtUHJcIilcbiAgICAgICAgLmZpcnN0T3JFbXB0eShcInc6bnVtSWRcIilcbiAgICAgICAgLmF0dHJpYnV0ZXNbXCJ3OnZhbFwiXTtcbiAgICByZXR1cm4ge251bUlkOiBudW1JZH07XG59XG5cbn0se31dLDE2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMudXJpVG9aaXBFbnRyeU5hbWUgPSB1cmlUb1ppcEVudHJ5TmFtZTtcbmV4cG9ydHMucmVwbGFjZUZyYWdtZW50ID0gcmVwbGFjZUZyYWdtZW50O1xuXG5mdW5jdGlvbiB1cmlUb1ppcEVudHJ5TmFtZShiYXNlLCB1cmkpIHtcbiAgICBpZiAodXJpLmNoYXJBdCgwKSA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIHVyaS5zdWJzdHIoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSW4gZ2VuZXJhbCwgd2Ugc2hvdWxkIGNoZWNrIGZpcnN0IGFuZCBzZWNvbmQgZm9yIHRyYWlsaW5nIGFuZCBsZWFkaW5nIHNsYXNoZXMsXG4gICAgICAgIC8vIGJ1dCBpbiBvdXIgc3BlY2lmaWMgY2FzZSB0aGlzIHNlZW1zIHRvIGJlIHN1ZmZpY2llbnRcbiAgICAgICAgcmV0dXJuIGJhc2UgKyBcIi9cIiArIHVyaTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcmVwbGFjZUZyYWdtZW50KHVyaSwgZnJhZ21lbnQpIHtcbiAgICB2YXIgaGFzaEluZGV4ID0gdXJpLmluZGV4T2YoXCIjXCIpO1xuICAgIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMCwgaGFzaEluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHVyaSArIFwiI1wiICsgZnJhZ21lbnQ7XG59XG5cbn0se31dLDE3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBodG1sUGF0aHMgPSByZXF1aXJlKFwiLi4vc3R5bGVzL2h0bWwtcGF0aHNcIik7XG5cblxuZnVuY3Rpb24gbm9uRnJlc2hFbGVtZW50KHRhZ05hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRXaXRoVGFnKFxuICAgICAgICBodG1sUGF0aHMuZWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCB7ZnJlc2g6IGZhbHNlfSksXG4gICAgICAgIGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gZnJlc2hFbGVtZW50KHRhZ05hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKSB7XG4gICAgdmFyIHRhZyA9IGh0bWxQYXRocy5lbGVtZW50KHRhZ05hbWUsIGF0dHJpYnV0ZXMsIHtmcmVzaDogdHJ1ZX0pO1xuICAgIHJldHVybiBlbGVtZW50V2l0aFRhZyh0YWcsIGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFdpdGhUYWcodGFnLCBjaGlsZHJlbikge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiZWxlbWVudFwiLFxuICAgICAgICB0YWc6IHRhZyxcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuIHx8IFtdXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gdGV4dCh2YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xufVxuXG52YXIgZm9yY2VXcml0ZSA9IHtcbiAgICB0eXBlOiBcImZvcmNlV3JpdGVcIlxufTtcblxuZXhwb3J0cy5mcmVzaEVsZW1lbnQgPSBmcmVzaEVsZW1lbnQ7XG5leHBvcnRzLm5vbkZyZXNoRWxlbWVudCA9IG5vbkZyZXNoRWxlbWVudDtcbmV4cG9ydHMuZWxlbWVudFdpdGhUYWcgPSBlbGVtZW50V2l0aFRhZztcbmV4cG9ydHMudGV4dCA9IHRleHQ7XG5leHBvcnRzLmZvcmNlV3JpdGUgPSBmb3JjZVdyaXRlO1xuXG52YXIgdm9pZFRhZ05hbWVzID0ge1xuICAgIFwiYnJcIjogdHJ1ZSxcbiAgICBcImhyXCI6IHRydWUsXG4gICAgXCJpbWdcIjogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNWb2lkRWxlbWVudChub2RlKSB7XG4gICAgcmV0dXJuIChub2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgJiYgdm9pZFRhZ05hbWVzW25vZGUudGFnLnRhZ05hbWVdO1xufVxuXG5leHBvcnRzLmlzVm9pZEVsZW1lbnQgPSBpc1ZvaWRFbGVtZW50O1xuXG59LHtcIi4uL3N0eWxlcy9odG1sLXBhdGhzXCI6Mjh9XSwxODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgYXN0ID0gcmVxdWlyZShcIi4vYXN0XCIpO1xuXG5leHBvcnRzLmZyZXNoRWxlbWVudCA9IGFzdC5mcmVzaEVsZW1lbnQ7XG5leHBvcnRzLm5vbkZyZXNoRWxlbWVudCA9IGFzdC5ub25GcmVzaEVsZW1lbnQ7XG5leHBvcnRzLmVsZW1lbnRXaXRoVGFnID0gYXN0LmVsZW1lbnRXaXRoVGFnO1xuZXhwb3J0cy50ZXh0ID0gYXN0LnRleHQ7XG5leHBvcnRzLmZvcmNlV3JpdGUgPSBhc3QuZm9yY2VXcml0ZTtcblxuZXhwb3J0cy5zaW1wbGlmeSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5XCIpO1xuXG5mdW5jdGlvbiB3cml0ZSh3cml0ZXIsIG5vZGVzKSB7XG4gICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHdyaXRlTm9kZSh3cml0ZXIsIG5vZGUpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZU5vZGUod3JpdGVyLCBub2RlKSB7XG4gICAgdG9TdHJpbmdzW25vZGUudHlwZV0od3JpdGVyLCBub2RlKTtcbn1cblxudmFyIHRvU3RyaW5ncyA9IHtcbiAgICBlbGVtZW50OiBnZW5lcmF0ZUVsZW1lbnRTdHJpbmcsXG4gICAgdGV4dDogZ2VuZXJhdGVUZXh0U3RyaW5nLFxuICAgIGZvcmNlV3JpdGU6IGZ1bmN0aW9uKCkgeyB9XG59O1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUVsZW1lbnRTdHJpbmcod3JpdGVyLCBub2RlKSB7XG4gICAgaWYgKGFzdC5pc1ZvaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgIHdyaXRlci5zZWxmQ2xvc2luZyhub2RlLnRhZy50YWdOYW1lLCBub2RlLnRhZy5hdHRyaWJ1dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZXIub3Blbihub2RlLnRhZy50YWdOYW1lLCBub2RlLnRhZy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgd3JpdGUod3JpdGVyLCBub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgd3JpdGVyLmNsb3NlKG5vZGUudGFnLnRhZ05hbWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVUZXh0U3RyaW5nKHdyaXRlciwgbm9kZSkge1xuICAgIHdyaXRlci50ZXh0KG5vZGUudmFsdWUpO1xufVxuXG5leHBvcnRzLndyaXRlID0gd3JpdGU7XG5cbn0se1wiLi9hc3RcIjoxNyxcIi4vc2ltcGxpZnlcIjoxOX1dLDE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbnZhciBhc3QgPSByZXF1aXJlKFwiLi9hc3RcIik7XG5cbmZ1bmN0aW9uIHNpbXBsaWZ5KG5vZGVzKSB7XG4gICAgcmV0dXJuIGNvbGxhcHNlKHJlbW92ZUVtcHR5KG5vZGVzKSk7XG59XG5cbmZ1bmN0aW9uIGNvbGxhcHNlKG5vZGVzKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG4gICAgXG4gICAgbm9kZXMubWFwKGNvbGxhcHNlTm9kZSkuZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICBhcHBlbmRDaGlsZChjaGlsZHJlbiwgY2hpbGQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY29sbGFwc2VOb2RlKG5vZGUpIHtcbiAgICByZXR1cm4gY29sbGFwc2Vyc1tub2RlLnR5cGVdKG5vZGUpO1xufVxuXG52YXIgY29sbGFwc2VycyA9IHtcbiAgICBlbGVtZW50OiBjb2xsYXBzZUVsZW1lbnQsXG4gICAgdGV4dDogaWRlbnRpdHksXG4gICAgZm9yY2VXcml0ZTogaWRlbnRpdHlcbn07XG5cbmZ1bmN0aW9uIGNvbGxhcHNlRWxlbWVudChub2RlKSB7XG4gICAgcmV0dXJuIGFzdC5lbGVtZW50V2l0aFRhZyhub2RlLnRhZywgY29sbGFwc2Uobm9kZS5jaGlsZHJlbikpO1xufVxuXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQoY2hpbGRyZW4sIGNoaWxkKSB7XG4gICAgdmFyIGxhc3RDaGlsZCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIGlmIChjaGlsZC50eXBlID09PSBcImVsZW1lbnRcIiAmJiAhY2hpbGQudGFnLmZyZXNoICYmIGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQudHlwZSA9PT0gXCJlbGVtZW50XCIgJiYgY2hpbGQudGFnLm1hdGNoZXNFbGVtZW50KGxhc3RDaGlsZC50YWcpKSB7XG4gICAgICAgIGlmIChjaGlsZC50YWcuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBhcHBlbmRDaGlsZChsYXN0Q2hpbGQuY2hpbGRyZW4sIGFzdC50ZXh0KGNoaWxkLnRhZy5zZXBhcmF0b3IpKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGdyYW5kQ2hpbGQpIHtcbiAgICAgICAgICAgIC8vIE11dGF0aW9uIGlzIGZpbmUgc2luY2Ugc2ltcGxpZnlpbmcgZWxlbWVudHMgY3JlYXRlIGEgY29weSBvZiB0aGUgY2hpbGRyZW4uXG4gICAgICAgICAgICBhcHBlbmRDaGlsZChsYXN0Q2hpbGQuY2hpbGRyZW4sIGdyYW5kQ2hpbGQpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUVtcHR5KG5vZGVzKSB7XG4gICAgcmV0dXJuIGZsYXRNYXAobm9kZXMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGVtcHRpZXJzW25vZGUudHlwZV0obm9kZSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGZsYXRNYXAodmFsdWVzLCBmdW5jKSB7XG4gICAgcmV0dXJuIF8uZmxhdHRlbihfLm1hcCh2YWx1ZXMsIGZ1bmMpLCB0cnVlKTtcbn1cblxudmFyIGVtcHRpZXJzID0ge1xuICAgIGVsZW1lbnQ6IGVsZW1lbnRFbXB0aWVyLFxuICAgIHRleHQ6IHRleHRFbXB0aWVyLFxuICAgIGZvcmNlV3JpdGU6IG5ldmVyRW1wdHlcbn07XG5cbmZ1bmN0aW9uIG5ldmVyRW1wdHkobm9kZSkge1xuICAgIHJldHVybiBbbm9kZV07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRFbXB0aWVyKGVsZW1lbnQpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSByZW1vdmVFbXB0eShlbGVtZW50LmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmICFhc3QuaXNWb2lkRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFthc3QuZWxlbWVudFdpdGhUYWcoZWxlbWVudC50YWcsIGNoaWxkcmVuKV07XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0ZXh0RW1wdGllcihub2RlKSB7XG4gICAgaWYgKG5vZGUudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW25vZGVdO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaW1wbGlmeTtcblxufSx7XCIuL2FzdFwiOjE3LFwidW5kZXJzY29yZVwiOjEwMn1dLDIwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbnZhciBwcm9taXNlcyA9IHJlcXVpcmUoXCIuL3Byb21pc2VzXCIpO1xudmFyIEh0bWwgPSByZXF1aXJlKFwiLi9odG1sXCIpO1xuXG5leHBvcnRzLmltZ0VsZW1lbnQgPSBpbWdFbGVtZW50O1xuXG5mdW5jdGlvbiBpbWdFbGVtZW50KGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZWxlbWVudCwgbWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VzLndoZW4oZnVuYyhlbGVtZW50KSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0ge307XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5hbHRUZXh0KSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcy5hbHQgPSBlbGVtZW50LmFsdFRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfLmV4dGVuZChhdHRyaWJ1dGVzLCByZXN1bHQpO1xuXG4gICAgICAgICAgICByZXR1cm4gW0h0bWwuZnJlc2hFbGVtZW50KFwiaW1nXCIsIGF0dHJpYnV0ZXMpXTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuLy8gVW5kb2N1bWVudGVkLCBidXQgcmV0YWluZWQgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggMC4zLnhcbmV4cG9ydHMuaW5saW5lID0gZXhwb3J0cy5pbWdFbGVtZW50O1xuXG5leHBvcnRzLmRhdGFVcmkgPSBpbWdFbGVtZW50KGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5yZWFkQXNCYXNlNjRTdHJpbmcoKS50aGVuKGZ1bmN0aW9uKGltYWdlQnVmZmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzcmM6IFwiZGF0YTpcIiArIGVsZW1lbnQuY29udGVudFR5cGUgKyBcIjtiYXNlNjQsXCIgKyBpbWFnZUJ1ZmZlclxuICAgICAgICB9O1xuICAgIH0pO1xufSk7XG5cbn0se1wiLi9odG1sXCI6MTgsXCIuL3Byb21pc2VzXCI6MjMsXCJ1bmRlcnNjb3JlXCI6MTAyfV0sMjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChCdWZmZXIpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcblxudmFyIGRvY3hSZWFkZXIgPSByZXF1aXJlKFwiLi9kb2N4L2RvY3gtcmVhZGVyXCIpO1xudmFyIGRvY3hTdHlsZU1hcCA9IHJlcXVpcmUoXCIuL2RvY3gvc3R5bGUtbWFwXCIpO1xudmFyIERvY3VtZW50Q29udmVydGVyID0gcmVxdWlyZShcIi4vZG9jdW1lbnQtdG8taHRtbFwiKS5Eb2N1bWVudENvbnZlcnRlcjtcbnZhciBjb252ZXJ0RWxlbWVudFRvUmF3VGV4dCA9IHJlcXVpcmUoXCIuL3Jhdy10ZXh0XCIpLmNvbnZlcnRFbGVtZW50VG9SYXdUZXh0O1xudmFyIHJlYWRTdHlsZSA9IHJlcXVpcmUoXCIuL3N0eWxlLXJlYWRlclwiKS5yZWFkU3R5bGU7XG52YXIgcmVhZE9wdGlvbnMgPSByZXF1aXJlKFwiLi9vcHRpb25zLXJlYWRlclwiKS5yZWFkT3B0aW9ucztcbnZhciB1bnppcCA9IHJlcXVpcmUoXCIuL3VuemlwXCIpO1xudmFyIFJlc3VsdCA9IHJlcXVpcmUoXCIuL3Jlc3VsdHNcIikuUmVzdWx0O1xuXG5leHBvcnRzLmNvbnZlcnRUb0h0bWwgPSBjb252ZXJ0VG9IdG1sO1xuZXhwb3J0cy5jb252ZXJ0VG9NYXJrZG93biA9IGNvbnZlcnRUb01hcmtkb3duO1xuZXhwb3J0cy5jb252ZXJ0ID0gY29udmVydDtcbmV4cG9ydHMuZXh0cmFjdFJhd1RleHQgPSBleHRyYWN0UmF3VGV4dDtcbmV4cG9ydHMuaW1hZ2VzID0gcmVxdWlyZShcIi4vaW1hZ2VzXCIpO1xuZXhwb3J0cy50cmFuc2Zvcm1zID0gcmVxdWlyZShcIi4vdHJhbnNmb3Jtc1wiKTtcbmV4cG9ydHMudW5kZXJsaW5lID0gcmVxdWlyZShcIi4vdW5kZXJsaW5lXCIpO1xuZXhwb3J0cy5lbWJlZFN0eWxlTWFwID0gZW1iZWRTdHlsZU1hcDtcbmV4cG9ydHMucmVhZEVtYmVkZGVkU3R5bGVNYXAgPSByZWFkRW1iZWRkZWRTdHlsZU1hcDtcblxuZnVuY3Rpb24gY29udmVydFRvSHRtbChpbnB1dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb252ZXJ0KGlucHV0LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRvTWFya2Rvd24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgbWFya2Rvd25PcHRpb25zID0gT2JqZWN0LmNyZWF0ZShvcHRpb25zIHx8IHt9KTtcbiAgICBtYXJrZG93bk9wdGlvbnMub3V0cHV0Rm9ybWF0ID0gXCJtYXJrZG93blwiO1xuICAgIHJldHVybiBjb252ZXJ0KGlucHV0LCBtYXJrZG93bk9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0KGlucHV0LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHJlYWRPcHRpb25zKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHVuemlwLm9wZW5aaXAoaW5wdXQpXG4gICAgICAgIC50YXAoZnVuY3Rpb24oZG9jeEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N4U3R5bGVNYXAucmVhZFN0eWxlTWFwKGRvY3hGaWxlKS50aGVuKGZ1bmN0aW9uKHN0eWxlTWFwKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbWJlZGRlZFN0eWxlTWFwID0gc3R5bGVNYXA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZG9jeEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N4UmVhZGVyLnJlYWQoZG9jeEZpbGUsIGlucHV0KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRvY3VtZW50UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudFJlc3VsdC5tYXAob3B0aW9ucy50cmFuc2Zvcm1Eb2N1bWVudCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihkb2N1bWVudFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydERvY3VtZW50VG9IdG1sKGRvY3VtZW50UmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRFbWJlZGRlZFN0eWxlTWFwKGlucHV0KSB7XG4gICAgcmV0dXJuIHVuemlwLm9wZW5aaXAoaW5wdXQpXG4gICAgICAgIC50aGVuKGRvY3hTdHlsZU1hcC5yZWFkU3R5bGVNYXApO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RG9jdW1lbnRUb0h0bWwoZG9jdW1lbnRSZXN1bHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgc3R5bGVNYXBSZXN1bHQgPSBwYXJzZVN0eWxlTWFwKG9wdGlvbnMucmVhZFN0eWxlTWFwKCkpO1xuICAgIHZhciBwYXJzZWRPcHRpb25zID0gXy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgICAgc3R5bGVNYXA6IHN0eWxlTWFwUmVzdWx0LnZhbHVlXG4gICAgfSk7XG4gICAgdmFyIGRvY3VtZW50Q29udmVydGVyID0gbmV3IERvY3VtZW50Q29udmVydGVyKHBhcnNlZE9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGRvY3VtZW50UmVzdWx0LmZsYXRNYXBUaGVuKGZ1bmN0aW9uKGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBzdHlsZU1hcFJlc3VsdC5mbGF0TWFwVGhlbihmdW5jdGlvbihzdHlsZU1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50Q29udmVydGVyLmNvbnZlcnRUb0h0bWwoZG9jdW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTdHlsZU1hcChzdHlsZU1hcCkge1xuICAgIHJldHVybiBSZXN1bHQuY29tYmluZSgoc3R5bGVNYXAgfHwgW10pLm1hcChyZWFkU3R5bGUpKVxuICAgICAgICAubWFwKGZ1bmN0aW9uKHN0eWxlTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVNYXAuZmlsdGVyKGZ1bmN0aW9uKHN0eWxlTWFwcGluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXN0eWxlTWFwcGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbn1cblxuXG5mdW5jdGlvbiBleHRyYWN0UmF3VGV4dChpbnB1dCkge1xuICAgIHJldHVybiB1bnppcC5vcGVuWmlwKGlucHV0KVxuICAgICAgICAudGhlbihkb2N4UmVhZGVyLnJlYWQpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uKGRvY3VtZW50UmVzdWx0KSB7XG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnRSZXN1bHQubWFwKGNvbnZlcnRFbGVtZW50VG9SYXdUZXh0KTtcbiAgICAgICAgfSk7XG59XG5cbmZ1bmN0aW9uIGVtYmVkU3R5bGVNYXAoaW5wdXQsIHN0eWxlTWFwKSB7XG4gICAgcmV0dXJuIHVuemlwLm9wZW5aaXAoaW5wdXQpXG4gICAgICAgIC50YXAoZnVuY3Rpb24oZG9jeEZpbGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N4U3R5bGVNYXAud3JpdGVTdHlsZU1hcChkb2N4RmlsZSwgc3R5bGVNYXApO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbihkb2N4RmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRvY3hGaWxlLnRvQXJyYXlCdWZmZXIoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oYXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdG9BcnJheUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRvQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0cy5zdHlsZU1hcHBpbmcgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VzZSBhIHJhdyBzdHJpbmcgaW5zdGVhZCBvZiBtYW1tb3RoLnN0eWxlTWFwcGluZyBlLmcuIFwicFtzdHlsZS1uYW1lPVxcJ1RpdGxlXFwnXSA9PiBoMVwiIGluc3RlYWQgb2YgbWFtbW90aC5zdHlsZU1hcHBpbmcoXCJwW3N0eWxlLW5hbWU9XFwnVGl0bGVcXCddID0+IGgxXCIpJyk7XG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZShcImJ1ZmZlclwiKS5CdWZmZXIpXG59LHtcIi4vZG9jdW1lbnQtdG8taHRtbFwiOjMsXCIuL2RvY3gvZG9jeC1yZWFkZXJcIjo5LFwiLi9kb2N4L3N0eWxlLW1hcFwiOjE0LFwiLi9pbWFnZXNcIjoyMCxcIi4vb3B0aW9ucy1yZWFkZXJcIjoyMixcIi4vcmF3LXRleHRcIjoyNCxcIi4vcmVzdWx0c1wiOjI1LFwiLi9zdHlsZS1yZWFkZXJcIjoyNixcIi4vdHJhbnNmb3Jtc1wiOjMwLFwiLi91bmRlcmxpbmVcIjozMSxcIi4vdW56aXBcIjoyLFwiYnVmZmVyXCI6ODMsXCJ1bmRlcnNjb3JlXCI6MTAyfV0sMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5yZWFkT3B0aW9ucyA9IHJlYWRPcHRpb25zO1xuXG5cbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbnZhciBkZWZhdWx0U3R5bGVNYXAgPSBleHBvcnRzLl9kZWZhdWx0U3R5bGVNYXAgPSBbXG4gICAgXCJwLkhlYWRpbmcxID0+IGgxOmZyZXNoXCIsXG4gICAgXCJwLkhlYWRpbmcyID0+IGgyOmZyZXNoXCIsXG4gICAgXCJwLkhlYWRpbmczID0+IGgzOmZyZXNoXCIsXG4gICAgXCJwLkhlYWRpbmc0ID0+IGg0OmZyZXNoXCIsXG4gICAgXCJwLkhlYWRpbmc1ID0+IGg1OmZyZXNoXCIsXG4gICAgXCJwLkhlYWRpbmc2ID0+IGg2OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgMSddID0+IGgxOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgMiddID0+IGgyOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgMyddID0+IGgzOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgNCddID0+IGg0OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgNSddID0+IGg1OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0hlYWRpbmcgNiddID0+IGg2OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgMSddID0+IGgxOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgMiddID0+IGgyOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgMyddID0+IGgzOmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgNCddID0+IGg0OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgNSddID0+IGg1OmZyZXNoXCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J2hlYWRpbmcgNiddID0+IGg2OmZyZXNoXCIsXG4gICAgXG4gICAgXCJyW3N0eWxlLW5hbWU9J1N0cm9uZyddID0+IHN0cm9uZ1wiLFxuICAgIFxuICAgIFwicFtzdHlsZS1uYW1lPSdmb290bm90ZSB0ZXh0J10gPT4gcDpmcmVzaFwiLFxuICAgIFwicltzdHlsZS1uYW1lPSdmb290bm90ZSByZWZlcmVuY2UnXSA9PlwiLFxuICAgIFwicFtzdHlsZS1uYW1lPSdlbmRub3RlIHRleHQnXSA9PiBwOmZyZXNoXCIsXG4gICAgXCJyW3N0eWxlLW5hbWU9J2VuZG5vdGUgcmVmZXJlbmNlJ10gPT5cIixcbiAgICBcInBbc3R5bGUtbmFtZT0nYW5ub3RhdGlvbiB0ZXh0J10gPT4gcDpmcmVzaFwiLFxuICAgIFwicltzdHlsZS1uYW1lPSdhbm5vdGF0aW9uIHJlZmVyZW5jZSddID0+XCIsXG4gICAgXG4gICAgLy8gTGlicmVPZmZpY2VcbiAgICBcInBbc3R5bGUtbmFtZT0nRm9vdG5vdGUnXSA9PiBwOmZyZXNoXCIsXG4gICAgXCJyW3N0eWxlLW5hbWU9J0Zvb3Rub3RlIGFuY2hvciddID0+XCIsXG4gICAgXCJwW3N0eWxlLW5hbWU9J0VuZG5vdGUnXSA9PiBwOmZyZXNoXCIsXG4gICAgXCJyW3N0eWxlLW5hbWU9J0VuZG5vdGUgYW5jaG9yJ10gPT5cIixcbiAgICBcbiAgICBcInA6dW5vcmRlcmVkLWxpc3QoMSkgPT4gdWwgPiBsaTpmcmVzaFwiLFxuICAgIFwicDp1bm9yZGVyZWQtbGlzdCgyKSA9PiB1bHxvbCA+IGxpID4gdWwgPiBsaTpmcmVzaFwiLFxuICAgIFwicDp1bm9yZGVyZWQtbGlzdCgzKSA9PiB1bHxvbCA+IGxpID4gdWx8b2wgPiBsaSA+IHVsID4gbGk6ZnJlc2hcIixcbiAgICBcInA6dW5vcmRlcmVkLWxpc3QoNCkgPT4gdWx8b2wgPiBsaSA+IHVsfG9sID4gbGkgPiB1bHxvbCA+IGxpID4gdWwgPiBsaTpmcmVzaFwiLFxuICAgIFwicDp1bm9yZGVyZWQtbGlzdCg1KSA9PiB1bHxvbCA+IGxpID4gdWx8b2wgPiBsaSA+IHVsfG9sID4gbGkgPiB1bHxvbCA+IGxpID4gdWwgPiBsaTpmcmVzaFwiLFxuICAgIFwicDpvcmRlcmVkLWxpc3QoMSkgPT4gb2wgPiBsaTpmcmVzaFwiLFxuICAgIFwicDpvcmRlcmVkLWxpc3QoMikgPT4gdWx8b2wgPiBsaSA+IG9sID4gbGk6ZnJlc2hcIixcbiAgICBcInA6b3JkZXJlZC1saXN0KDMpID0+IHVsfG9sID4gbGkgPiB1bHxvbCA+IGxpID4gb2wgPiBsaTpmcmVzaFwiLFxuICAgIFwicDpvcmRlcmVkLWxpc3QoNCkgPT4gdWx8b2wgPiBsaSA+IHVsfG9sID4gbGkgPiB1bHxvbCA+IGxpID4gb2wgPiBsaTpmcmVzaFwiLFxuICAgIFwicDpvcmRlcmVkLWxpc3QoNSkgPT4gdWx8b2wgPiBsaSA+IHVsfG9sID4gbGkgPiB1bHxvbCA+IGxpID4gdWx8b2wgPiBsaSA+IG9sID4gbGk6ZnJlc2hcIixcbiAgICBcbiAgICBcInJbc3R5bGUtbmFtZT0nSHlwZXJsaW5rJ10gPT5cIixcbiAgICBcbiAgICBcInBbc3R5bGUtbmFtZT0nTm9ybWFsJ10gPT4gcDpmcmVzaFwiXG5dO1xuXG52YXIgc3RhbmRhcmRPcHRpb25zID0gZXhwb3J0cy5fc3RhbmRhcmRPcHRpb25zID0ge1xuICAgIHRyYW5zZm9ybURvY3VtZW50OiBpZGVudGl0eSxcbiAgICBpbmNsdWRlRGVmYXVsdFN0eWxlTWFwOiB0cnVlLFxuICAgIGluY2x1ZGVFbWJlZGRlZFN0eWxlTWFwOiB0cnVlXG59O1xuXG5mdW5jdGlvbiByZWFkT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBzdGFuZGFyZE9wdGlvbnMsIG9wdGlvbnMsIHtcbiAgICAgICAgY3VzdG9tU3R5bGVNYXA6IHJlYWRTdHlsZU1hcChvcHRpb25zLnN0eWxlTWFwKSxcbiAgICAgICAgcmVhZFN0eWxlTWFwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBzdHlsZU1hcCA9IHRoaXMuY3VzdG9tU3R5bGVNYXA7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlRW1iZWRkZWRTdHlsZU1hcCkge1xuICAgICAgICAgICAgICAgIHN0eWxlTWFwID0gc3R5bGVNYXAuY29uY2F0KHJlYWRTdHlsZU1hcCh0aGlzLmVtYmVkZGVkU3R5bGVNYXApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVEZWZhdWx0U3R5bGVNYXApIHtcbiAgICAgICAgICAgICAgICBzdHlsZU1hcCA9IHN0eWxlTWFwLmNvbmNhdChkZWZhdWx0U3R5bGVNYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlTWFwO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRTdHlsZU1hcChzdHlsZU1hcCkge1xuICAgIGlmICghc3R5bGVNYXApIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhzdHlsZU1hcCkpIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlTWFwLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZS50cmltKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbihsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUgIT09IFwiXCIgJiYgbGluZS5jaGFyQXQoMCkgIT09IFwiI1wiO1xuICAgICAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN0eWxlTWFwO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5cbn0se1widW5kZXJzY29yZVwiOjEwMn1dLDIzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG52YXIgYmx1ZWJpcmQgPSByZXF1aXJlKFwiYmx1ZWJpcmQvanMvcmVsZWFzZS9wcm9taXNlXCIpKCk7XG5cbmV4cG9ydHMuZGVmZXIgPSBkZWZlcjtcbmV4cG9ydHMud2hlbiA9IGJsdWViaXJkLnJlc29sdmU7XG5leHBvcnRzLnJlc29sdmUgPSBibHVlYmlyZC5yZXNvbHZlO1xuZXhwb3J0cy5hbGwgPSBibHVlYmlyZC5hbGw7XG5leHBvcnRzLnByb3BzID0gYmx1ZWJpcmQucHJvcHM7XG5leHBvcnRzLnJlamVjdCA9IGJsdWViaXJkLnJlamVjdDtcbmV4cG9ydHMucHJvbWlzaWZ5ID0gYmx1ZWJpcmQucHJvbWlzaWZ5O1xuZXhwb3J0cy5tYXBTZXJpZXMgPSBibHVlYmlyZC5tYXBTZXJpZXM7XG5leHBvcnRzLmF0dGVtcHQgPSBibHVlYmlyZC5hdHRlbXB0O1xuXG5leHBvcnRzLm5mY2FsbCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgdmFyIHByb21pc2VkRnVuYyA9IGJsdWViaXJkLnByb21pc2lmeShmdW5jKTtcbiAgICByZXR1cm4gcHJvbWlzZWRGdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xufTtcblxuYmx1ZWJpcmQucHJvdG90eXBlLmZhaWwgPSBibHVlYmlyZC5wcm90b3R5cGUuY2F1Z2h0O1xuXG5ibHVlYmlyZC5wcm90b3R5cGUuYWxzbyA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICByZXR1cm4gdGhpcy50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IF8uZXh0ZW5kKHt9LCB2YWx1ZSwgZnVuYyh2YWx1ZSkpO1xuICAgICAgICByZXR1cm4gYmx1ZWJpcmQucHJvcHMocmV0dXJuVmFsdWUpO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gZGVmZXIoKSB7XG4gICAgdmFyIHJlc29sdmU7XG4gICAgdmFyIHJlamVjdDtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBibHVlYmlyZC5Qcm9taXNlKGZ1bmN0aW9uKHJlc29sdmVBcmcsIHJlamVjdEFyZykge1xuICAgICAgICByZXNvbHZlID0gcmVzb2x2ZUFyZztcbiAgICAgICAgcmVqZWN0ID0gcmVqZWN0QXJnO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgcmVqZWN0OiByZWplY3QsXG4gICAgICAgIHByb21pc2U6IHByb21pc2VcbiAgICB9O1xufVxuXG59LHtcImJsdWViaXJkL2pzL3JlbGVhc2UvcHJvbWlzZVwiOjY4LFwidW5kZXJzY29yZVwiOjEwMn1dLDI0OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBkb2N1bWVudHMgPSByZXF1aXJlKFwiLi9kb2N1bWVudHNcIik7XG5cbmZ1bmN0aW9uIGNvbnZlcnRFbGVtZW50VG9SYXdUZXh0KGVsZW1lbnQpIHtcbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBcInRleHRcIikge1xuICAgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gZG9jdW1lbnRzLnR5cGVzLnRhYikge1xuICAgICAgICByZXR1cm4gXCJcXHRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdGFpbCA9IGVsZW1lbnQudHlwZSA9PT0gXCJwYXJhZ3JhcGhcIiA/IFwiXFxuXFxuXCIgOiBcIlwiO1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLm1hcChjb252ZXJ0RWxlbWVudFRvUmF3VGV4dCkuam9pbihcIlwiKSArIHRhaWw7XG4gICAgfVxufVxuXG5leHBvcnRzLmNvbnZlcnRFbGVtZW50VG9SYXdUZXh0ID0gY29udmVydEVsZW1lbnRUb1Jhd1RleHQ7XG5cbn0se1wiLi9kb2N1bWVudHNcIjo0fV0sMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcblxuXG5leHBvcnRzLlJlc3VsdCA9IFJlc3VsdDtcbmV4cG9ydHMuc3VjY2VzcyA9IHN1Y2Nlc3M7XG5leHBvcnRzLndhcm5pbmcgPSB3YXJuaW5nO1xuZXhwb3J0cy5lcnJvciA9IGVycm9yO1xuXG5cbmZ1bmN0aW9uIFJlc3VsdCh2YWx1ZSwgbWVzc2FnZXMpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG1lc3NhZ2VzIHx8IFtdO1xufVxuXG5SZXN1bHQucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChmdW5jKHRoaXMudmFsdWUpLCB0aGlzLm1lc3NhZ2VzKTtcbn07XG5cblJlc3VsdC5wcm90b3R5cGUuZmxhdE1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgZnVuY1Jlc3VsdCA9IGZ1bmModGhpcy52YWx1ZSk7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoZnVuY1Jlc3VsdC52YWx1ZSwgY29tYmluZU1lc3NhZ2VzKFt0aGlzLCBmdW5jUmVzdWx0XSkpO1xufTtcblxuUmVzdWx0LnByb3RvdHlwZS5mbGF0TWFwVGhlbiA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIGZ1bmModGhpcy52YWx1ZSkudGhlbihmdW5jdGlvbihvdGhlclJlc3VsdCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdChvdGhlclJlc3VsdC52YWx1ZSwgY29tYmluZU1lc3NhZ2VzKFt0aGF0LCBvdGhlclJlc3VsdF0pKTtcbiAgICB9KTtcbn07XG5cblJlc3VsdC5jb21iaW5lID0gZnVuY3Rpb24ocmVzdWx0cykge1xuICAgIHZhciB2YWx1ZXMgPSBfLmZsYXR0ZW4oXy5wbHVjayhyZXN1bHRzLCBcInZhbHVlXCIpKTtcbiAgICB2YXIgbWVzc2FnZXMgPSBjb21iaW5lTWVzc2FnZXMocmVzdWx0cyk7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWVzLCBtZXNzYWdlcyk7XG59O1xuXG5mdW5jdGlvbiBzdWNjZXNzKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodmFsdWUsIFtdKTtcbn1cblxuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBlcnJvcihleGNlcHRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIG1lc3NhZ2U6IGV4Y2VwdGlvbi5tZXNzYWdlLFxuICAgICAgICBlcnJvcjogZXhjZXB0aW9uXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY29tYmluZU1lc3NhZ2VzKHJlc3VsdHMpIHtcbiAgICB2YXIgbWVzc2FnZXMgPSBbXTtcbiAgICBfLmZsYXR0ZW4oXy5wbHVjayhyZXN1bHRzLCBcIm1lc3NhZ2VzXCIpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uKG1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKCFjb250YWluc01lc3NhZ2UobWVzc2FnZXMsIG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5mdW5jdGlvbiBjb250YWluc01lc3NhZ2UobWVzc2FnZXMsIG1lc3NhZ2UpIHtcbiAgICByZXR1cm4gXy5maW5kKG1lc3NhZ2VzLCBpc1NhbWVNZXNzYWdlLmJpbmQobnVsbCwgbWVzc2FnZSkpICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU1lc3NhZ2UoZmlyc3QsIHNlY29uZCkge1xuICAgIHJldHVybiBmaXJzdC50eXBlID09PSBzZWNvbmQudHlwZSAmJiBmaXJzdC5tZXNzYWdlID09PSBzZWNvbmQubWVzc2FnZTtcbn1cblxufSx7XCJ1bmRlcnNjb3JlXCI6MTAyfV0sMjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcbnZhciBsb3AgPSByZXF1aXJlKFwibG9wXCIpO1xuXG52YXIgZG9jdW1lbnRNYXRjaGVycyA9IHJlcXVpcmUoXCIuL3N0eWxlcy9kb2N1bWVudC1tYXRjaGVyc1wiKTtcbnZhciBodG1sUGF0aHMgPSByZXF1aXJlKFwiLi9zdHlsZXMvaHRtbC1wYXRoc1wiKTtcbnZhciB0b2tlbmlzZSA9IHJlcXVpcmUoXCIuL3N0eWxlcy9wYXJzZXIvdG9rZW5pc2VyXCIpLnRva2VuaXNlO1xudmFyIHJlc3VsdHMgPSByZXF1aXJlKFwiLi9yZXN1bHRzXCIpO1xuXG5leHBvcnRzLnJlYWRIdG1sUGF0aCA9IHJlYWRIdG1sUGF0aDtcbmV4cG9ydHMucmVhZERvY3VtZW50TWF0Y2hlciA9IHJlYWREb2N1bWVudE1hdGNoZXI7XG5leHBvcnRzLnJlYWRTdHlsZSA9IHJlYWRTdHlsZTtcblxuXG5mdW5jdGlvbiByZWFkU3R5bGUoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhcnNlU3RyaW5nKHN0eWxlUnVsZSwgc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVSdWxlKCkge1xuICAgIHJldHVybiBsb3AucnVsZXMuc2VxdWVuY2UoXG4gICAgICAgIGxvcC5ydWxlcy5zZXF1ZW5jZS5jYXB0dXJlKGRvY3VtZW50TWF0Y2hlclJ1bGUoKSksXG4gICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcIndoaXRlc3BhY2VcIiksXG4gICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImFycm93XCIpLFxuICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY2FwdHVyZShsb3AucnVsZXMub3B0aW9uYWwobG9wLnJ1bGVzLnNlcXVlbmNlKFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwid2hpdGVzcGFjZVwiKSxcbiAgICAgICAgICAgIGxvcC5ydWxlcy5zZXF1ZW5jZS5jYXB0dXJlKGh0bWxQYXRoUnVsZSgpKVxuICAgICAgICApLmhlYWQoKSkpLFxuICAgICAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJlbmRcIilcbiAgICApLm1hcChmdW5jdGlvbihkb2N1bWVudE1hdGNoZXIsIGh0bWxQYXRoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmcm9tOiBkb2N1bWVudE1hdGNoZXIsXG4gICAgICAgICAgICB0bzogaHRtbFBhdGgudmFsdWVPckVsc2UoaHRtbFBhdGhzLmVtcHR5KVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZWFkRG9jdW1lbnRNYXRjaGVyKHN0cmluZykge1xuICAgIHJldHVybiBwYXJzZVN0cmluZyhkb2N1bWVudE1hdGNoZXJSdWxlKCksIHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIGRvY3VtZW50TWF0Y2hlclJ1bGUoKSB7XG4gICAgdmFyIHNlcXVlbmNlID0gbG9wLnJ1bGVzLnNlcXVlbmNlO1xuXG4gICAgdmFyIGlkZW50aWZpZXJUb0NvbnN0YW50ID0gZnVuY3Rpb24oaWRlbnRpZmllciwgY29uc3RhbnQpIHtcbiAgICAgICAgcmV0dXJuIGxvcC5ydWxlcy50aGVuKFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBpZGVudGlmaWVyKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb25zdGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgdmFyIHBhcmFncmFwaFJ1bGUgPSBpZGVudGlmaWVyVG9Db25zdGFudChcInBcIiwgZG9jdW1lbnRNYXRjaGVycy5wYXJhZ3JhcGgpO1xuICAgIHZhciBydW5SdWxlID0gaWRlbnRpZmllclRvQ29uc3RhbnQoXCJyXCIsIGRvY3VtZW50TWF0Y2hlcnMucnVuKTtcblxuICAgIHZhciBlbGVtZW50VHlwZVJ1bGUgPSBsb3AucnVsZXMuZmlyc3RPZihcInAgb3IgciBvciB0YWJsZVwiLFxuICAgICAgICBwYXJhZ3JhcGhSdWxlLFxuICAgICAgICBydW5SdWxlXG4gICAgKTtcblxuICAgIHZhciBzdHlsZUlkUnVsZSA9IGxvcC5ydWxlcy5zZXF1ZW5jZShcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiZG90XCIpLFxuICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY3V0KCksXG4gICAgICAgIGxvcC5ydWxlcy5zZXF1ZW5jZS5jYXB0dXJlKGlkZW50aWZpZXJSdWxlKVxuICAgICkubWFwKGZ1bmN0aW9uKHN0eWxlSWQpIHtcbiAgICAgICAgcmV0dXJuIHtzdHlsZUlkOiBzdHlsZUlkfTtcbiAgICB9KTtcblxuICAgIHZhciBzdHlsZU5hbWVNYXRjaGVyUnVsZSA9IGxvcC5ydWxlcy5maXJzdE9mKFwic3R5bGUgbmFtZSBtYXRjaGVyXCIsXG4gICAgICAgIGxvcC5ydWxlcy50aGVuKFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlKFxuICAgICAgICAgICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImVxdWFsc1wiKSxcbiAgICAgICAgICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY3V0KCksXG4gICAgICAgICAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmNhcHR1cmUoc3RyaW5nUnVsZSlcbiAgICAgICAgICAgICkuaGVhZCgpLFxuICAgICAgICAgICAgZnVuY3Rpb24oc3R5bGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtzdHlsZU5hbWU6IGRvY3VtZW50TWF0Y2hlcnMuZXF1YWxUbyhzdHlsZU5hbWUpfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgbG9wLnJ1bGVzLnRoZW4oXG4gICAgICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UoXG4gICAgICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwic3RhcnRzV2l0aFwiKSxcbiAgICAgICAgICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY3V0KCksXG4gICAgICAgICAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmNhcHR1cmUoc3RyaW5nUnVsZSlcbiAgICAgICAgICAgICkuaGVhZCgpLFxuICAgICAgICAgICAgZnVuY3Rpb24oc3R5bGVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtzdHlsZU5hbWU6IGRvY3VtZW50TWF0Y2hlcnMuc3RhcnRzV2l0aChzdHlsZU5hbWUpfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICk7XG5cbiAgICB2YXIgc3R5bGVOYW1lUnVsZSA9IGxvcC5ydWxlcy5zZXF1ZW5jZShcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwib3Blbi1zcXVhcmUtYnJhY2tldFwiKSxcbiAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmN1dCgpLFxuICAgICAgICBsb3AucnVsZXMudG9rZW4oXCJpZGVudGlmaWVyXCIsIFwic3R5bGUtbmFtZVwiKSxcbiAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmNhcHR1cmUoc3R5bGVOYW1lTWF0Y2hlclJ1bGUpLFxuICAgICAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJjbG9zZS1zcXVhcmUtYnJhY2tldFwiKVxuICAgICkuaGVhZCgpO1xuXG5cbiAgICB2YXIgbGlzdFR5cGVSdWxlID0gbG9wLnJ1bGVzLmZpcnN0T2YoXCJsaXN0IHR5cGVcIixcbiAgICAgICAgaWRlbnRpZmllclRvQ29uc3RhbnQoXCJvcmRlcmVkLWxpc3RcIiwge2lzT3JkZXJlZDogdHJ1ZX0pLFxuICAgICAgICBpZGVudGlmaWVyVG9Db25zdGFudChcInVub3JkZXJlZC1saXN0XCIsIHtpc09yZGVyZWQ6IGZhbHNlfSlcbiAgICApO1xuICAgIHZhciBsaXN0UnVsZSA9IHNlcXVlbmNlKFxuICAgICAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJjb2xvblwiKSxcbiAgICAgICAgc2VxdWVuY2UuY2FwdHVyZShsaXN0VHlwZVJ1bGUpLFxuICAgICAgICBzZXF1ZW5jZS5jdXQoKSxcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwib3Blbi1wYXJlblwiKSxcbiAgICAgICAgc2VxdWVuY2UuY2FwdHVyZShpbnRlZ2VyUnVsZSksXG4gICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImNsb3NlLXBhcmVuXCIpXG4gICAgKS5tYXAoZnVuY3Rpb24obGlzdFR5cGUsIGxldmVsTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaXN0OiB7XG4gICAgICAgICAgICAgICAgaXNPcmRlcmVkOiBsaXN0VHlwZS5pc09yZGVyZWQsXG4gICAgICAgICAgICAgICAgbGV2ZWxJbmRleDogbGV2ZWxOdW1iZXIgLSAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVNYXRjaGVyU3VmZml4ZXNSdWxlKHJ1bGVzKSB7XG4gICAgICAgIHZhciBtYXRjaGVyU3VmZml4ID0gbG9wLnJ1bGVzLmZpcnN0T2YuYXBwbHkoXG4gICAgICAgICAgICBsb3AucnVsZXMuZmlyc3RPZixcbiAgICAgICAgICAgIFtcIm1hdGNoZXIgc3VmZml4XCJdLmNvbmNhdChydWxlcylcbiAgICAgICAgKTtcbiAgICAgICAgdmFyIG1hdGNoZXJTdWZmaXhlcyA9IGxvcC5ydWxlcy56ZXJvT3JNb3JlKG1hdGNoZXJTdWZmaXgpO1xuICAgICAgICByZXR1cm4gbG9wLnJ1bGVzLnRoZW4obWF0Y2hlclN1ZmZpeGVzLCBmdW5jdGlvbihzdWZmaXhlcykge1xuICAgICAgICAgICAgdmFyIG1hdGNoZXJPcHRpb25zID0ge307XG4gICAgICAgICAgICBzdWZmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uKHN1ZmZpeCkge1xuICAgICAgICAgICAgICAgIF8uZXh0ZW5kKG1hdGNoZXJPcHRpb25zLCBzdWZmaXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlck9wdGlvbnM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBwYXJhZ3JhcGhPclJ1biA9IHNlcXVlbmNlKFxuICAgICAgICBzZXF1ZW5jZS5jYXB0dXJlKGVsZW1lbnRUeXBlUnVsZSksXG4gICAgICAgIHNlcXVlbmNlLmNhcHR1cmUoY3JlYXRlTWF0Y2hlclN1ZmZpeGVzUnVsZShbXG4gICAgICAgICAgICBzdHlsZUlkUnVsZSxcbiAgICAgICAgICAgIHN0eWxlTmFtZVJ1bGUsXG4gICAgICAgICAgICBsaXN0UnVsZVxuICAgICAgICBdKSlcbiAgICApLm1hcChmdW5jdGlvbihjcmVhdGVNYXRjaGVyLCBtYXRjaGVyT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWF0Y2hlcihtYXRjaGVyT3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB2YXIgdGFibGUgPSBzZXF1ZW5jZShcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBcInRhYmxlXCIpLFxuICAgICAgICBzZXF1ZW5jZS5jYXB0dXJlKGNyZWF0ZU1hdGNoZXJTdWZmaXhlc1J1bGUoW1xuICAgICAgICAgICAgc3R5bGVJZFJ1bGUsXG4gICAgICAgICAgICBzdHlsZU5hbWVSdWxlXG4gICAgICAgIF0pKVxuICAgICkubWFwKGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50TWF0Y2hlcnMudGFibGUob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB2YXIgYm9sZCA9IGlkZW50aWZpZXJUb0NvbnN0YW50KFwiYlwiLCBkb2N1bWVudE1hdGNoZXJzLmJvbGQpO1xuICAgIHZhciBpdGFsaWMgPSBpZGVudGlmaWVyVG9Db25zdGFudChcImlcIiwgZG9jdW1lbnRNYXRjaGVycy5pdGFsaWMpO1xuICAgIHZhciB1bmRlcmxpbmUgPSBpZGVudGlmaWVyVG9Db25zdGFudChcInVcIiwgZG9jdW1lbnRNYXRjaGVycy51bmRlcmxpbmUpO1xuICAgIHZhciBzdHJpa2V0aHJvdWdoID0gaWRlbnRpZmllclRvQ29uc3RhbnQoXCJzdHJpa2VcIiwgZG9jdW1lbnRNYXRjaGVycy5zdHJpa2V0aHJvdWdoKTtcbiAgICB2YXIgYWxsQ2FwcyA9IGlkZW50aWZpZXJUb0NvbnN0YW50KFwiYWxsLWNhcHNcIiwgZG9jdW1lbnRNYXRjaGVycy5hbGxDYXBzKTtcbiAgICB2YXIgc21hbGxDYXBzID0gaWRlbnRpZmllclRvQ29uc3RhbnQoXCJzbWFsbC1jYXBzXCIsIGRvY3VtZW50TWF0Y2hlcnMuc21hbGxDYXBzKTtcblxuICAgIHZhciBoaWdobGlnaHQgPSBzZXF1ZW5jZShcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBcImhpZ2hsaWdodFwiKSxcbiAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmNhcHR1cmUobG9wLnJ1bGVzLm9wdGlvbmFsKGxvcC5ydWxlcy5zZXF1ZW5jZShcbiAgICAgICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcIm9wZW4tc3F1YXJlLWJyYWNrZXRcIiksXG4gICAgICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY3V0KCksXG4gICAgICAgICAgICBsb3AucnVsZXMudG9rZW4oXCJpZGVudGlmaWVyXCIsIFwiY29sb3JcIiksXG4gICAgICAgICAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJlcXVhbHNcIiksXG4gICAgICAgICAgICBsb3AucnVsZXMuc2VxdWVuY2UuY2FwdHVyZShzdHJpbmdSdWxlKSxcbiAgICAgICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImNsb3NlLXNxdWFyZS1icmFja2V0XCIpXG4gICAgICAgICkuaGVhZCgpKSlcbiAgICApLm1hcChmdW5jdGlvbihjb2xvcikge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnRNYXRjaGVycy5oaWdobGlnaHQoe1xuICAgICAgICAgICAgY29sb3I6IGNvbG9yLnZhbHVlT3JFbHNlKHVuZGVmaW5lZClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgY29tbWVudFJlZmVyZW5jZSA9IGlkZW50aWZpZXJUb0NvbnN0YW50KFwiY29tbWVudC1yZWZlcmVuY2VcIiwgZG9jdW1lbnRNYXRjaGVycy5jb21tZW50UmVmZXJlbmNlKTtcblxuICAgIHZhciBicmVha01hdGNoZXIgPSBzZXF1ZW5jZShcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBcImJyXCIpLFxuICAgICAgICBzZXF1ZW5jZS5jdXQoKSxcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwib3Blbi1zcXVhcmUtYnJhY2tldFwiKSxcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBcInR5cGVcIiksXG4gICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImVxdWFsc1wiKSxcbiAgICAgICAgc2VxdWVuY2UuY2FwdHVyZShzdHJpbmdSdWxlKSxcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiY2xvc2Utc3F1YXJlLWJyYWNrZXRcIilcbiAgICApLm1hcChmdW5jdGlvbihicmVha1R5cGUpIHtcbiAgICAgICAgc3dpdGNoIChicmVha1R5cGUpIHtcbiAgICAgICAgY2FzZSBcImxpbmVcIjpcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudE1hdGNoZXJzLmxpbmVCcmVhaztcbiAgICAgICAgY2FzZSBcInBhZ2VcIjpcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudE1hdGNoZXJzLnBhZ2VCcmVhaztcbiAgICAgICAgY2FzZSBcImNvbHVtblwiOlxuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50TWF0Y2hlcnMuY29sdW1uQnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgdW5rbm93biBkb2N1bWVudCBtYXRjaGVyc1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbG9wLnJ1bGVzLmZpcnN0T2YoXCJlbGVtZW50IHR5cGVcIixcbiAgICAgICAgcGFyYWdyYXBoT3JSdW4sXG4gICAgICAgIHRhYmxlLFxuICAgICAgICBib2xkLFxuICAgICAgICBpdGFsaWMsXG4gICAgICAgIHVuZGVybGluZSxcbiAgICAgICAgc3RyaWtldGhyb3VnaCxcbiAgICAgICAgYWxsQ2FwcyxcbiAgICAgICAgc21hbGxDYXBzLFxuICAgICAgICBoaWdobGlnaHQsXG4gICAgICAgIGNvbW1lbnRSZWZlcmVuY2UsXG4gICAgICAgIGJyZWFrTWF0Y2hlclxuICAgICk7XG59XG5cbmZ1bmN0aW9uIHJlYWRIdG1sUGF0aChzdHJpbmcpIHtcbiAgICByZXR1cm4gcGFyc2VTdHJpbmcoaHRtbFBhdGhSdWxlKCksIHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIGh0bWxQYXRoUnVsZSgpIHtcbiAgICB2YXIgY2FwdHVyZSA9IGxvcC5ydWxlcy5zZXF1ZW5jZS5jYXB0dXJlO1xuICAgIHZhciB3aGl0ZXNwYWNlUnVsZSA9IGxvcC5ydWxlcy50b2tlbk9mVHlwZShcIndoaXRlc3BhY2VcIik7XG4gICAgdmFyIGZyZXNoUnVsZSA9IGxvcC5ydWxlcy50aGVuKFxuICAgICAgICBsb3AucnVsZXMub3B0aW9uYWwobG9wLnJ1bGVzLnNlcXVlbmNlKFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiY29sb25cIiksXG4gICAgICAgICAgICBsb3AucnVsZXMudG9rZW4oXCJpZGVudGlmaWVyXCIsIFwiZnJlc2hcIilcbiAgICAgICAgKSksXG4gICAgICAgIGZ1bmN0aW9uKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS52YWx1ZU9yRWxzZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdmFyIHNlcGFyYXRvclJ1bGUgPSBsb3AucnVsZXMudGhlbihcbiAgICAgICAgbG9wLnJ1bGVzLm9wdGlvbmFsKGxvcC5ydWxlcy5zZXF1ZW5jZShcbiAgICAgICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImNvbG9uXCIpLFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuKFwiaWRlbnRpZmllclwiLCBcInNlcGFyYXRvclwiKSxcbiAgICAgICAgICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcIm9wZW4tcGFyZW5cIiksXG4gICAgICAgICAgICBjYXB0dXJlKHN0cmluZ1J1bGUpLFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiY2xvc2UtcGFyZW5cIilcbiAgICAgICAgKS5oZWFkKCkpLFxuICAgICAgICBmdW5jdGlvbihvcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24udmFsdWVPckVsc2UoXCJcIik7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgdmFyIHRhZ05hbWVzUnVsZSA9IGxvcC5ydWxlcy5vbmVPck1vcmVXaXRoU2VwYXJhdG9yKFxuICAgICAgICBpZGVudGlmaWVyUnVsZSxcbiAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiY2hvaWNlXCIpXG4gICAgKTtcblxuICAgIHZhciBzdHlsZUVsZW1lbnRSdWxlID0gbG9wLnJ1bGVzLnNlcXVlbmNlKFxuICAgICAgICBjYXB0dXJlKHRhZ05hbWVzUnVsZSksXG4gICAgICAgIGNhcHR1cmUobG9wLnJ1bGVzLnplcm9Pck1vcmUoYXR0cmlidXRlT3JDbGFzc1J1bGUpKSxcbiAgICAgICAgY2FwdHVyZShmcmVzaFJ1bGUpLFxuICAgICAgICBjYXB0dXJlKHNlcGFyYXRvclJ1bGUpXG4gICAgKS5tYXAoZnVuY3Rpb24odGFnTmFtZSwgYXR0cmlidXRlc0xpc3QsIGZyZXNoLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgdmFyIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB7fTtcbiAgICAgICAgYXR0cmlidXRlc0xpc3QuZm9yRWFjaChmdW5jdGlvbihhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUuYXBwZW5kICYmIGF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgYXR0cmlidXRlc1thdHRyaWJ1dGUubmFtZV0gKz0gXCIgXCIgKyBhdHRyaWJ1dGUudmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXNbYXR0cmlidXRlLm5hbWVdID0gYXR0cmlidXRlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGZyZXNoKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZyZXNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNlcGFyYXRvciA9IHNlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHRtbFBhdGhzLmVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbG9wLnJ1bGVzLmZpcnN0T2YoXCJodG1sIHBhdGhcIixcbiAgICAgICAgbG9wLnJ1bGVzLnRoZW4obG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiYmFuZ1wiKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbFBhdGhzLmlnbm9yZTtcbiAgICAgICAgfSksXG4gICAgICAgIGxvcC5ydWxlcy50aGVuKFxuICAgICAgICAgICAgbG9wLnJ1bGVzLnplcm9Pck1vcmVXaXRoU2VwYXJhdG9yKFxuICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudFJ1bGUsXG4gICAgICAgICAgICAgICAgbG9wLnJ1bGVzLnNlcXVlbmNlKFxuICAgICAgICAgICAgICAgICAgICB3aGl0ZXNwYWNlUnVsZSxcbiAgICAgICAgICAgICAgICAgICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiZ3RcIiksXG4gICAgICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VSdWxlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGh0bWxQYXRocy5lbGVtZW50c1xuICAgICAgICApXG4gICAgKTtcbn1cblxudmFyIGlkZW50aWZpZXJSdWxlID0gbG9wLnJ1bGVzLnRoZW4oXG4gICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwiaWRlbnRpZmllclwiKSxcbiAgICBkZWNvZGVFc2NhcGVTZXF1ZW5jZXNcbik7XG52YXIgaW50ZWdlclJ1bGUgPSBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJpbnRlZ2VyXCIpO1xuXG52YXIgc3RyaW5nUnVsZSA9IGxvcC5ydWxlcy50aGVuKFxuICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcInN0cmluZ1wiKSxcbiAgICBkZWNvZGVFc2NhcGVTZXF1ZW5jZXNcbik7XG5cbnZhciBlc2NhcGVTZXF1ZW5jZXMgPSB7XG4gICAgXCJuXCI6IFwiXFxuXCIsXG4gICAgXCJyXCI6IFwiXFxyXCIsXG4gICAgXCJ0XCI6IFwiXFx0XCJcbn07XG5cbmZ1bmN0aW9uIGRlY29kZUVzY2FwZVNlcXVlbmNlcyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXFxcKC4pL2csIGZ1bmN0aW9uKG1hdGNoLCBjb2RlKSB7XG4gICAgICAgIHJldHVybiBlc2NhcGVTZXF1ZW5jZXNbY29kZV0gfHwgY29kZTtcbiAgICB9KTtcbn1cblxudmFyIGF0dHJpYnV0ZVJ1bGUgPSBsb3AucnVsZXMuc2VxdWVuY2UoXG4gICAgbG9wLnJ1bGVzLnRva2VuT2ZUeXBlKFwib3Blbi1zcXVhcmUtYnJhY2tldFwiKSxcbiAgICBsb3AucnVsZXMuc2VxdWVuY2UuY3V0KCksXG4gICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmNhcHR1cmUoaWRlbnRpZmllclJ1bGUpLFxuICAgIGxvcC5ydWxlcy50b2tlbk9mVHlwZShcImVxdWFsc1wiKSxcbiAgICBsb3AucnVsZXMuc2VxdWVuY2UuY2FwdHVyZShzdHJpbmdSdWxlKSxcbiAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJjbG9zZS1zcXVhcmUtYnJhY2tldFwiKVxuKS5tYXAoZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZSwgYXBwZW5kOiBmYWxzZX07XG59KTtcblxudmFyIGNsYXNzUnVsZSA9IGxvcC5ydWxlcy5zZXF1ZW5jZShcbiAgICBsb3AucnVsZXMudG9rZW5PZlR5cGUoXCJkb3RcIiksXG4gICAgbG9wLnJ1bGVzLnNlcXVlbmNlLmN1dCgpLFxuICAgIGxvcC5ydWxlcy5zZXF1ZW5jZS5jYXB0dXJlKGlkZW50aWZpZXJSdWxlKVxuKS5tYXAoZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIHtuYW1lOiBcImNsYXNzXCIsIHZhbHVlOiBjbGFzc05hbWUsIGFwcGVuZDogdHJ1ZX07XG59KTtcblxudmFyIGF0dHJpYnV0ZU9yQ2xhc3NSdWxlID0gbG9wLnJ1bGVzLmZpcnN0T2YoXG4gICAgXCJhdHRyaWJ1dGUgb3IgY2xhc3NcIixcbiAgICBhdHRyaWJ1dGVSdWxlLFxuICAgIGNsYXNzUnVsZVxuKTtcblxuZnVuY3Rpb24gcGFyc2VTdHJpbmcocnVsZSwgc3RyaW5nKSB7XG4gICAgdmFyIHRva2VucyA9IHRva2VuaXNlKHN0cmluZyk7XG4gICAgdmFyIHBhcnNlciA9IGxvcC5QYXJzZXIoKTtcbiAgICB2YXIgcGFyc2VSZXN1bHQgPSBwYXJzZXIucGFyc2VUb2tlbnMocnVsZSwgdG9rZW5zKTtcbiAgICBpZiAocGFyc2VSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuc3VjY2VzcyhwYXJzZVJlc3VsdC52YWx1ZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IHJlc3VsdHMuUmVzdWx0KG51bGwsIFtyZXN1bHRzLndhcm5pbmcoZGVzY3JpYmVGYWlsdXJlKHN0cmluZywgcGFyc2VSZXN1bHQpKV0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGYWlsdXJlKGlucHV0LCBwYXJzZVJlc3VsdCkge1xuICAgIHJldHVybiBcIkRpZCBub3QgdW5kZXJzdGFuZCB0aGlzIHN0eWxlIG1hcHBpbmcsIHNvIGlnbm9yZWQgaXQ6IFwiICsgaW5wdXQgKyBcIlxcblwiICtcbiAgICAgICAgcGFyc2VSZXN1bHQuZXJyb3JzKCkubWFwKGRlc2NyaWJlRXJyb3IpLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gXCJFcnJvciB3YXMgYXQgY2hhcmFjdGVyIG51bWJlciBcIiArIGVycm9yLmNoYXJhY3Rlck51bWJlcigpICsgXCI6IFwiICtcbiAgICAgICAgXCJFeHBlY3RlZCBcIiArIGVycm9yLmV4cGVjdGVkICsgXCIgYnV0IGdvdCBcIiArIGVycm9yLmFjdHVhbDtcbn1cblxudmFyIHN0eWxlUnVsZSA9IGNyZWF0ZVN0eWxlUnVsZSgpO1xuXG59LHtcIi4vcmVzdWx0c1wiOjI1LFwiLi9zdHlsZXMvZG9jdW1lbnQtbWF0Y2hlcnNcIjoyNyxcIi4vc3R5bGVzL2h0bWwtcGF0aHNcIjoyOCxcIi4vc3R5bGVzL3BhcnNlci90b2tlbmlzZXJcIjoyOSxcImxvcFwiOjg5LFwidW5kZXJzY29yZVwiOjEwMn1dLDI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMucGFyYWdyYXBoID0gcGFyYWdyYXBoO1xuZXhwb3J0cy5ydW4gPSBydW47XG5leHBvcnRzLnRhYmxlID0gdGFibGU7XG5leHBvcnRzLmJvbGQgPSBuZXcgTWF0Y2hlcihcImJvbGRcIik7XG5leHBvcnRzLml0YWxpYyA9IG5ldyBNYXRjaGVyKFwiaXRhbGljXCIpO1xuZXhwb3J0cy51bmRlcmxpbmUgPSBuZXcgTWF0Y2hlcihcInVuZGVybGluZVwiKTtcbmV4cG9ydHMuc3RyaWtldGhyb3VnaCA9IG5ldyBNYXRjaGVyKFwic3RyaWtldGhyb3VnaFwiKTtcbmV4cG9ydHMuYWxsQ2FwcyA9IG5ldyBNYXRjaGVyKFwiYWxsQ2Fwc1wiKTtcbmV4cG9ydHMuc21hbGxDYXBzID0gbmV3IE1hdGNoZXIoXCJzbWFsbENhcHNcIik7XG5leHBvcnRzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDtcbmV4cG9ydHMuY29tbWVudFJlZmVyZW5jZSA9IG5ldyBNYXRjaGVyKFwiY29tbWVudFJlZmVyZW5jZVwiKTtcbmV4cG9ydHMubGluZUJyZWFrID0gbmV3IEJyZWFrTWF0Y2hlcih7YnJlYWtUeXBlOiBcImxpbmVcIn0pO1xuZXhwb3J0cy5wYWdlQnJlYWsgPSBuZXcgQnJlYWtNYXRjaGVyKHticmVha1R5cGU6IFwicGFnZVwifSk7XG5leHBvcnRzLmNvbHVtbkJyZWFrID0gbmV3IEJyZWFrTWF0Y2hlcih7YnJlYWtUeXBlOiBcImNvbHVtblwifSk7XG5leHBvcnRzLmVxdWFsVG8gPSBlcXVhbFRvO1xuZXhwb3J0cy5zdGFydHNXaXRoID0gc3RhcnRzV2l0aDtcblxuXG5mdW5jdGlvbiBwYXJhZ3JhcGgob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgTWF0Y2hlcihcInBhcmFncmFwaFwiLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcnVuKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoZXIoXCJydW5cIiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIHRhYmxlKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoZXIoXCJ0YWJsZVwiLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gaGlnaGxpZ2h0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEhpZ2hsaWdodE1hdGNoZXIob3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIE1hdGNoZXIoZWxlbWVudFR5cGUsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9lbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlO1xuICAgIHRoaXMuX3N0eWxlSWQgPSBvcHRpb25zLnN0eWxlSWQ7XG4gICAgdGhpcy5fc3R5bGVOYW1lID0gb3B0aW9ucy5zdHlsZU5hbWU7XG4gICAgaWYgKG9wdGlvbnMubGlzdCkge1xuICAgICAgICB0aGlzLl9saXN0SW5kZXggPSBvcHRpb25zLmxpc3QubGV2ZWxJbmRleDtcbiAgICAgICAgdGhpcy5fbGlzdElzT3JkZXJlZCA9IG9wdGlvbnMubGlzdC5pc09yZGVyZWQ7XG4gICAgfVxufVxuXG5NYXRjaGVyLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnR5cGUgPT09IHRoaXMuX2VsZW1lbnRUeXBlICYmXG4gICAgICAgICh0aGlzLl9zdHlsZUlkID09PSB1bmRlZmluZWQgfHwgZWxlbWVudC5zdHlsZUlkID09PSB0aGlzLl9zdHlsZUlkKSAmJlxuICAgICAgICAodGhpcy5fc3R5bGVOYW1lID09PSB1bmRlZmluZWQgfHwgKGVsZW1lbnQuc3R5bGVOYW1lICYmIHRoaXMuX3N0eWxlTmFtZS5vcGVyYXRvcih0aGlzLl9zdHlsZU5hbWUub3BlcmFuZCwgZWxlbWVudC5zdHlsZU5hbWUpKSkgJiZcbiAgICAgICAgKHRoaXMuX2xpc3RJbmRleCA9PT0gdW5kZWZpbmVkIHx8IGlzTGlzdChlbGVtZW50LCB0aGlzLl9saXN0SW5kZXgsIHRoaXMuX2xpc3RJc09yZGVyZWQpKSAmJlxuICAgICAgICAodGhpcy5fYnJlYWtUeXBlID09PSB1bmRlZmluZWQgfHwgdGhpcy5fYnJlYWtUeXBlID09PSBlbGVtZW50LmJyZWFrVHlwZSk7XG59O1xuXG5mdW5jdGlvbiBIaWdobGlnaHRNYXRjaGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLl9jb2xvciA9IG9wdGlvbnMuY29sb3I7XG59XG5cbkhpZ2hsaWdodE1hdGNoZXIucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gXCJoaWdobGlnaHRcIiAmJlxuICAgICAgICAodGhpcy5fY29sb3IgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50LmNvbG9yID09PSB0aGlzLl9jb2xvcik7XG59O1xuXG5mdW5jdGlvbiBCcmVha01hdGNoZXIob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuX2JyZWFrVHlwZSA9IG9wdGlvbnMuYnJlYWtUeXBlO1xufVxuXG5CcmVha01hdGNoZXIucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQudHlwZSA9PT0gXCJicmVha1wiICYmXG4gICAgICAgICh0aGlzLl9icmVha1R5cGUgPT09IHVuZGVmaW5lZCB8fCBlbGVtZW50LmJyZWFrVHlwZSA9PT0gdGhpcy5fYnJlYWtUeXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzTGlzdChlbGVtZW50LCBsZXZlbEluZGV4LCBpc09yZGVyZWQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5udW1iZXJpbmcgJiZcbiAgICAgICAgZWxlbWVudC5udW1iZXJpbmcubGV2ZWwgPT0gbGV2ZWxJbmRleCAmJlxuICAgICAgICBlbGVtZW50Lm51bWJlcmluZy5pc09yZGVyZWQgPT0gaXNPcmRlcmVkO1xufVxuXG5mdW5jdGlvbiBlcXVhbFRvKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yRXF1YWxUbyxcbiAgICAgICAgb3BlcmFuZDogdmFsdWVcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBzdGFydHNXaXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yU3RhcnRzV2l0aCxcbiAgICAgICAgb3BlcmFuZDogdmFsdWVcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBvcGVyYXRvckVxdWFsVG8oZmlyc3QsIHNlY29uZCkge1xuICAgIHJldHVybiBmaXJzdC50b1VwcGVyQ2FzZSgpID09PSBzZWNvbmQudG9VcHBlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gb3BlcmF0b3JTdGFydHNXaXRoKGZpcnN0LCBzZWNvbmQpIHtcbiAgICByZXR1cm4gc2Vjb25kLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaXJzdC50b1VwcGVyQ2FzZSgpKSA9PT0gMDtcbn1cblxufSx7fV0sMjg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcblxudmFyIGh0bWwgPSByZXF1aXJlKFwiLi4vaHRtbFwiKTtcblxuZXhwb3J0cy50b3BMZXZlbEVsZW1lbnQgPSB0b3BMZXZlbEVsZW1lbnQ7XG5leHBvcnRzLmVsZW1lbnRzID0gZWxlbWVudHM7XG5leHBvcnRzLmVsZW1lbnQgPSBlbGVtZW50O1xuXG5mdW5jdGlvbiB0b3BMZXZlbEVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiBlbGVtZW50cyhbZWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCB7ZnJlc2g6IHRydWV9KV0pO1xufVxuXG5mdW5jdGlvbiBlbGVtZW50cyhlbGVtZW50U3R5bGVzKSB7XG4gICAgcmV0dXJuIG5ldyBIdG1sUGF0aChlbGVtZW50U3R5bGVzLm1hcChmdW5jdGlvbihlbGVtZW50U3R5bGUpIHtcbiAgICAgICAgaWYgKF8uaXNTdHJpbmcoZWxlbWVudFN0eWxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQoZWxlbWVudFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50U3R5bGU7XG4gICAgICAgIH1cbiAgICB9KSk7XG59XG5cbmZ1bmN0aW9uIEh0bWxQYXRoKGVsZW1lbnRzKSB7XG4gICAgdGhpcy5fZWxlbWVudHMgPSBlbGVtZW50cztcbn1cblxuSHRtbFBhdGgucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiB3cmFwKGNoaWxkcmVuKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNoaWxkcmVuKCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSB0aGlzLl9lbGVtZW50cy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2VsZW1lbnRzW2luZGV4XS53cmFwTm9kZXMocmVzdWx0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcywgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBuZXcgRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJ1dGVzLCBvcHRpb25zKSB7XG4gICAgdmFyIHRhZ05hbWVzID0ge307XG4gICAgaWYgKF8uaXNBcnJheSh0YWdOYW1lKSkge1xuICAgICAgICB0YWdOYW1lLmZvckVhY2goZnVuY3Rpb24odGFnTmFtZSkge1xuICAgICAgICAgICAgdGFnTmFtZXNbdGFnTmFtZV0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGFnTmFtZSA9IHRhZ05hbWVbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFnTmFtZXNbdGFnTmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLnRhZ05hbWUgPSB0YWdOYW1lO1xuICAgIHRoaXMudGFnTmFtZXMgPSB0YWdOYW1lcztcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIHx8IHt9O1xuICAgIHRoaXMuZnJlc2ggPSBvcHRpb25zLmZyZXNoO1xuICAgIHRoaXMuc2VwYXJhdG9yID0gb3B0aW9ucy5zZXBhcmF0b3I7XG59XG5cbkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXNFbGVtZW50ID0gZnVuY3Rpb24oZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLnRhZ05hbWVzW2VsZW1lbnQudGFnTmFtZV0gJiYgXy5pc0VxdWFsKHRoaXMuYXR0cmlidXRlcyB8fCB7fSwgZWxlbWVudC5hdHRyaWJ1dGVzIHx8IHt9KTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLndyYXAgPSBmdW5jdGlvbiB3cmFwKGdlbmVyYXRlTm9kZXMpIHtcbiAgICByZXR1cm4gdGhpcy53cmFwTm9kZXMoZ2VuZXJhdGVOb2RlcygpKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLndyYXBOb2RlcyA9IGZ1bmN0aW9uIHdyYXBOb2Rlcyhub2Rlcykge1xuICAgIHJldHVybiBbaHRtbC5lbGVtZW50V2l0aFRhZyh0aGlzLCBub2RlcyldO1xufTtcblxuZXhwb3J0cy5lbXB0eSA9IGVsZW1lbnRzKFtdKTtcbmV4cG9ydHMuaWdub3JlID0ge1xuICAgIHdyYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcblxufSx7XCIuLi9odG1sXCI6MTgsXCJ1bmRlcnNjb3JlXCI6MTAyfV0sMjk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIGxvcCA9IHJlcXVpcmUoXCJsb3BcIik7XG52YXIgUmVnZXhUb2tlbmlzZXIgPSBsb3AuUmVnZXhUb2tlbmlzZXI7XG5cbmV4cG9ydHMudG9rZW5pc2UgPSB0b2tlbmlzZTtcblxudmFyIHN0cmluZ1ByZWZpeCA9IFwiJygoPzpcXFxcXFxcXC58W14nXSkqKVwiO1xuXG5mdW5jdGlvbiB0b2tlbmlzZShzdHJpbmcpIHtcbiAgICB2YXIgaWRlbnRpZmllckNoYXJhY3RlciA9IFwiKD86W2EtekEtWlxcXFwtX118XFxcXFxcXFwuKVwiO1xuICAgIHZhciB0b2tlbmlzZXIgPSBuZXcgUmVnZXhUb2tlbmlzZXIoW1xuICAgICAgICB7bmFtZTogXCJpZGVudGlmaWVyXCIsIHJlZ2V4OiBuZXcgUmVnRXhwKFwiKFwiICsgaWRlbnRpZmllckNoYXJhY3RlciArIFwiKD86XCIgKyBpZGVudGlmaWVyQ2hhcmFjdGVyICsgXCJ8WzAtOV0pKilcIil9LFxuICAgICAgICB7bmFtZTogXCJkb3RcIiwgcmVnZXg6IC9cXC4vfSxcbiAgICAgICAge25hbWU6IFwiY29sb25cIiwgcmVnZXg6IC86L30sXG4gICAgICAgIHtuYW1lOiBcImd0XCIsIHJlZ2V4OiAvPi99LFxuICAgICAgICB7bmFtZTogXCJ3aGl0ZXNwYWNlXCIsIHJlZ2V4OiAvXFxzKy99LFxuICAgICAgICB7bmFtZTogXCJhcnJvd1wiLCByZWdleDogLz0+L30sXG4gICAgICAgIHtuYW1lOiBcImVxdWFsc1wiLCByZWdleDogLz0vfSxcbiAgICAgICAge25hbWU6IFwic3RhcnRzV2l0aFwiLCByZWdleDogL1xcXj0vfSxcbiAgICAgICAge25hbWU6IFwib3Blbi1wYXJlblwiLCByZWdleDogL1xcKC99LFxuICAgICAgICB7bmFtZTogXCJjbG9zZS1wYXJlblwiLCByZWdleDogL1xcKS99LFxuICAgICAgICB7bmFtZTogXCJvcGVuLXNxdWFyZS1icmFja2V0XCIsIHJlZ2V4OiAvXFxbL30sXG4gICAgICAgIHtuYW1lOiBcImNsb3NlLXNxdWFyZS1icmFja2V0XCIsIHJlZ2V4OiAvXFxdL30sXG4gICAgICAgIHtuYW1lOiBcInN0cmluZ1wiLCByZWdleDogbmV3IFJlZ0V4cChzdHJpbmdQcmVmaXggKyBcIidcIil9LFxuICAgICAgICB7bmFtZTogXCJ1bnRlcm1pbmF0ZWQtc3RyaW5nXCIsIHJlZ2V4OiBuZXcgUmVnRXhwKHN0cmluZ1ByZWZpeCl9LFxuICAgICAgICB7bmFtZTogXCJpbnRlZ2VyXCIsIHJlZ2V4OiAvKFswLTldKykvfSxcbiAgICAgICAge25hbWU6IFwiY2hvaWNlXCIsIHJlZ2V4OiAvXFx8L30sXG4gICAgICAgIHtuYW1lOiBcImJhbmdcIiwgcmVnZXg6IC8oISkvfVxuICAgIF0pO1xuICAgIHJldHVybiB0b2tlbmlzZXIudG9rZW5pc2Uoc3RyaW5nKTtcbn1cblxufSx7XCJsb3BcIjo4OX1dLDMwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cbmV4cG9ydHMucGFyYWdyYXBoID0gcGFyYWdyYXBoO1xuZXhwb3J0cy5ydW4gPSBydW47XG5leHBvcnRzLl9lbGVtZW50cyA9IGVsZW1lbnRzO1xuZXhwb3J0cy5nZXREZXNjZW5kYW50c09mVHlwZSA9IGdldERlc2NlbmRhbnRzT2ZUeXBlO1xuZXhwb3J0cy5nZXREZXNjZW5kYW50cyA9IGdldERlc2NlbmRhbnRzO1xuXG5mdW5jdGlvbiBwYXJhZ3JhcGgodHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRzT2ZUeXBlKFwicGFyYWdyYXBoXCIsIHRyYW5zZm9ybSk7XG59XG5cbmZ1bmN0aW9uIHJ1bih0cmFuc2Zvcm0pIHtcbiAgICByZXR1cm4gZWxlbWVudHNPZlR5cGUoXCJydW5cIiwgdHJhbnNmb3JtKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudHNPZlR5cGUoZWxlbWVudFR5cGUsIHRyYW5zZm9ybSkge1xuICAgIHJldHVybiBlbGVtZW50cyhmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IGVsZW1lbnRUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtKGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudHModHJhbnNmb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRyYW5zZm9ybUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gXy5tYXAoZWxlbWVudC5jaGlsZHJlbiwgdHJhbnNmb3JtRWxlbWVudCk7XG4gICAgICAgICAgICBlbGVtZW50ID0gXy5leHRlbmQoZWxlbWVudCwge2NoaWxkcmVuOiBjaGlsZHJlbn0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm0oZWxlbWVudCk7XG4gICAgfTtcbn1cblxuXG5mdW5jdGlvbiBnZXREZXNjZW5kYW50c09mVHlwZShlbGVtZW50LCB0eXBlKSB7XG4gICAgcmV0dXJuIGdldERlc2NlbmRhbnRzKGVsZW1lbnQpLmZpbHRlcihmdW5jdGlvbihkZXNjZW5kYW50KSB7XG4gICAgICAgIHJldHVybiBkZXNjZW5kYW50LnR5cGUgPT09IHR5cGU7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERlc2NlbmRhbnRzKGVsZW1lbnQpIHtcbiAgICB2YXIgZGVzY2VuZGFudHMgPSBbXTtcblxuICAgIHZpc2l0RGVzY2VuZGFudHMoZWxlbWVudCwgZnVuY3Rpb24oZGVzY2VuZGFudCkge1xuICAgICAgICBkZXNjZW5kYW50cy5wdXNoKGRlc2NlbmRhbnQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlc2NlbmRhbnRzO1xufVxuXG5mdW5jdGlvbiB2aXNpdERlc2NlbmRhbnRzKGVsZW1lbnQsIHZpc2l0KSB7XG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICB2aXNpdERlc2NlbmRhbnRzKGNoaWxkLCB2aXNpdCk7XG4gICAgICAgICAgICB2aXNpdChjaGlsZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxufSx7XCJ1bmRlcnNjb3JlXCI6MTAyfV0sMzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIGh0bWxQYXRocyA9IHJlcXVpcmUoXCIuL3N0eWxlcy9odG1sLXBhdGhzXCIpO1xudmFyIEh0bWwgPSByZXF1aXJlKFwiLi9odG1sXCIpO1xuXG5cbmV4cG9ydHMuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbmZ1bmN0aW9uIGVsZW1lbnQobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihodG1sKSB7XG4gICAgICAgIHJldHVybiBIdG1sLmVsZW1lbnRXaXRoVGFnKGh0bWxQYXRocy5lbGVtZW50KG5hbWUpLCBbaHRtbF0pO1xuICAgIH07XG59XG5cbn0se1wiLi9odG1sXCI6MTgsXCIuL3N0eWxlcy9odG1sLXBhdGhzXCI6Mjh9XSwzMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgXyA9IHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpO1xuXG5leHBvcnRzLndyaXRlciA9IHdyaXRlcjtcblxuZnVuY3Rpb24gd3JpdGVyKG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAob3B0aW9ucy5wcmV0dHlQcmludCkge1xuICAgICAgICByZXR1cm4gcHJldHR5V3JpdGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHNpbXBsZVdyaXRlcigpO1xuICAgIH1cbn1cblxuXG52YXIgaW5kZW50ZWRFbGVtZW50cyA9IHtcbiAgICBkaXY6IHRydWUsXG4gICAgcDogdHJ1ZSxcbiAgICB1bDogdHJ1ZSxcbiAgICBsaTogdHJ1ZVxufTtcblxuXG5mdW5jdGlvbiBwcmV0dHlXcml0ZXIoKSB7XG4gICAgdmFyIGluZGVudGF0aW9uTGV2ZWwgPSAwO1xuICAgIHZhciBpbmRlbnRhdGlvbiA9IFwiICBcIjtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgc3RhcnQgPSB0cnVlO1xuICAgIHZhciBpblRleHQgPSBmYWxzZTtcblxuICAgIHZhciB3cml0ZXIgPSBzaW1wbGVXcml0ZXIoKTtcblxuICAgIGZ1bmN0aW9uIG9wZW4odGFnTmFtZSwgYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoaW5kZW50ZWRFbGVtZW50c1t0YWdOYW1lXSkge1xuICAgICAgICAgICAgaW5kZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhY2sucHVzaCh0YWdOYW1lKTtcbiAgICAgICAgd3JpdGVyLm9wZW4odGFnTmFtZSwgYXR0cmlidXRlcyk7XG4gICAgICAgIGlmIChpbmRlbnRlZEVsZW1lbnRzW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICBpbmRlbnRhdGlvbkxldmVsKys7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9zZSh0YWdOYW1lKSB7XG4gICAgICAgIGlmIChpbmRlbnRlZEVsZW1lbnRzW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICBpbmRlbnRhdGlvbkxldmVsLS07XG4gICAgICAgICAgICBpbmRlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgd3JpdGVyLmNsb3NlKHRhZ05hbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRleHQodmFsdWUpIHtcbiAgICAgICAgc3RhcnRUZXh0KCk7XG4gICAgICAgIHZhciB0ZXh0ID0gaXNJblByZSgpID8gdmFsdWUgOiB2YWx1ZS5yZXBsYWNlKFwiXFxuXCIsIFwiXFxuXCIgKyBpbmRlbnRhdGlvbik7XG4gICAgICAgIHdyaXRlci50ZXh0KHRleHQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNlbGZDbG9zaW5nKHRhZ05hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgaW5kZW50KCk7XG4gICAgICAgIHdyaXRlci5zZWxmQ2xvc2luZyh0YWdOYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnNpZGVJbmRlbnRlZEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiBzdGFjay5sZW5ndGggPT09IDAgfHwgaW5kZW50ZWRFbGVtZW50c1tzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRUZXh0KCkge1xuICAgICAgICBpZiAoIWluVGV4dCkge1xuICAgICAgICAgICAgaW5kZW50KCk7XG4gICAgICAgICAgICBpblRleHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5kZW50KCkge1xuICAgICAgICBpblRleHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFzdGFydCAmJiBpbnNpZGVJbmRlbnRlZEVsZW1lbnQoKSAmJiAhaXNJblByZSgpKSB7XG4gICAgICAgICAgICB3cml0ZXIuX2FwcGVuZChcIlxcblwiKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZW50YXRpb25MZXZlbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVyLl9hcHBlbmQoaW5kZW50YXRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNJblByZSgpIHtcbiAgICAgICAgcmV0dXJuIF8uc29tZShzdGFjaywgZnVuY3Rpb24odGFnTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09IFwicHJlXCI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGFzU3RyaW5nOiB3cml0ZXIuYXNTdHJpbmcsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNsb3NlOiBjbG9zZSxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgc2VsZkNsb3Npbmc6IHNlbGZDbG9zaW5nXG4gICAgfTtcbn1cblxuXG5mdW5jdGlvbiBzaW1wbGVXcml0ZXIoKSB7XG4gICAgdmFyIGZyYWdtZW50cyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gb3Blbih0YWdOYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVTdHJpbmcgPSBnZW5lcmF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgZnJhZ21lbnRzLnB1c2goXCI8XCIgKyB0YWdOYW1lICsgYXR0cmlidXRlU3RyaW5nICsgXCI+XCIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb3NlKHRhZ05hbWUpIHtcbiAgICAgICAgZnJhZ21lbnRzLnB1c2goXCI8L1wiICsgdGFnTmFtZSArIFwiPlwiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZWxmQ2xvc2luZyh0YWdOYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgIHZhciBhdHRyaWJ1dGVTdHJpbmcgPSBnZW5lcmF0ZUF0dHJpYnV0ZVN0cmluZyhhdHRyaWJ1dGVzKTtcbiAgICAgICAgZnJhZ21lbnRzLnB1c2goXCI8XCIgKyB0YWdOYW1lICsgYXR0cmlidXRlU3RyaW5nICsgXCIgLz5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVBdHRyaWJ1dGVTdHJpbmcoYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm4gXy5tYXAoYXR0cmlidXRlcywgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiIFwiICsga2V5ICsgJz1cIicgKyBlc2NhcGVIdG1sQXR0cmlidXRlKHZhbHVlKSArICdcIic7XG4gICAgICAgIH0pLmpvaW4oXCJcIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdGV4dCh2YWx1ZSkge1xuICAgICAgICBmcmFnbWVudHMucHVzaChlc2NhcGVIdG1sVGV4dCh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGVuZChodG1sKSB7XG4gICAgICAgIGZyYWdtZW50cy5wdXNoKGh0bWwpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gZnJhZ21lbnRzLmpvaW4oXCJcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYXNTdHJpbmc6IGFzU3RyaW5nLFxuICAgICAgICBvcGVuOiBvcGVuLFxuICAgICAgICBjbG9zZTogY2xvc2UsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICAgIHNlbGZDbG9zaW5nOiBzZWxmQ2xvc2luZyxcbiAgICAgICAgX2FwcGVuZDogYXBwZW5kXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlSHRtbFRleHQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVIdG1sQXR0cmlidXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG59LHtcInVuZGVyc2NvcmVcIjoxMDJ9XSwzMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgaHRtbFdyaXRlciA9IHJlcXVpcmUoXCIuL2h0bWwtd3JpdGVyXCIpO1xudmFyIG1hcmtkb3duV3JpdGVyID0gcmVxdWlyZShcIi4vbWFya2Rvd24td3JpdGVyXCIpO1xuXG5leHBvcnRzLndyaXRlciA9IHdyaXRlcjtcblxuXG5mdW5jdGlvbiB3cml0ZXIob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLm91dHB1dEZvcm1hdCA9PT0gXCJtYXJrZG93blwiKSB7XG4gICAgICAgIHJldHVybiBtYXJrZG93bldyaXRlci53cml0ZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaHRtbFdyaXRlci53cml0ZXIob3B0aW9ucyk7XG4gICAgfVxufVxuXG59LHtcIi4vaHRtbC13cml0ZXJcIjozMixcIi4vbWFya2Rvd24td3JpdGVyXCI6MzR9XSwzNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgXyA9IHJlcXVpcmUoXCJ1bmRlcnNjb3JlXCIpO1xuXG5cbmZ1bmN0aW9uIHN5bW1ldHJpY01hcmtkb3duRWxlbWVudChlbmQpIHtcbiAgICByZXR1cm4gbWFya2Rvd25FbGVtZW50KGVuZCwgZW5kKTtcbn1cblxuZnVuY3Rpb24gbWFya2Rvd25FbGVtZW50KHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB7c3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZH07XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gbWFya2Rvd25MaW5rKGF0dHJpYnV0ZXMpIHtcbiAgICB2YXIgaHJlZiA9IGF0dHJpYnV0ZXMuaHJlZiB8fCBcIlwiO1xuICAgIGlmIChocmVmKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGFydDogXCJbXCIsXG4gICAgICAgICAgICBlbmQ6IFwiXShcIiArIGhyZWYgKyBcIilcIixcbiAgICAgICAgICAgIGFuY2hvclBvc2l0aW9uOiBcImJlZm9yZVwiXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbWFya2Rvd25JbWFnZShhdHRyaWJ1dGVzKSB7XG4gICAgdmFyIHNyYyA9IGF0dHJpYnV0ZXMuc3JjIHx8IFwiXCI7XG4gICAgdmFyIGFsdFRleHQgPSBhdHRyaWJ1dGVzLmFsdCB8fCBcIlwiO1xuICAgIGlmIChzcmMgfHwgYWx0VGV4dCkge1xuICAgICAgICByZXR1cm4ge3N0YXJ0OiBcIiFbXCIgKyBhbHRUZXh0ICsgXCJdKFwiICsgc3JjICsgXCIpXCJ9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtkb3duTGlzdChvcHRpb25zKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGF0dHJpYnV0ZXMsIGxpc3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiBsaXN0ID8gXCJcXG5cIiA6IFwiXCIsXG4gICAgICAgICAgICBlbmQ6IGxpc3QgPyBcIlwiIDogXCJcXG5cIixcbiAgICAgICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICAgICAgICBpc09yZGVyZWQ6IG9wdGlvbnMuaXNPcmRlcmVkLFxuICAgICAgICAgICAgICAgIGluZGVudDogbGlzdCA/IGxpc3QuaW5kZW50ICsgMSA6IDAsXG4gICAgICAgICAgICAgICAgY291bnQ6IDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBtYXJrZG93bkxpc3RJdGVtKGF0dHJpYnV0ZXMsIGxpc3QsIGxpc3RJdGVtKSB7XG4gICAgbGlzdCA9IGxpc3QgfHwge2luZGVudDogMCwgaXNPcmRlcmVkOiBmYWxzZSwgY291bnQ6IDB9O1xuICAgIGxpc3QuY291bnQrKztcbiAgICBsaXN0SXRlbS5oYXNDbG9zZWQgPSBmYWxzZTtcbiAgICBcbiAgICB2YXIgYnVsbGV0ID0gbGlzdC5pc09yZGVyZWQgPyBsaXN0LmNvdW50ICsgXCIuXCIgOiBcIi1cIjtcbiAgICB2YXIgc3RhcnQgPSByZXBlYXRTdHJpbmcoXCJcXHRcIiwgbGlzdC5pbmRlbnQpICsgYnVsbGV0ICsgXCIgXCI7XG4gICAgICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgZW5kOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICghbGlzdEl0ZW0uaGFzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgbGlzdEl0ZW0uaGFzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcXG5cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG59XG5cbnZhciBodG1sVG9NYXJrZG93biA9IHtcbiAgICBcInBcIjogbWFya2Rvd25FbGVtZW50KFwiXCIsIFwiXFxuXFxuXCIpLFxuICAgIFwiYnJcIjogbWFya2Rvd25FbGVtZW50KFwiXCIsIFwiICBcXG5cIiksXG4gICAgXCJ1bFwiOiBtYXJrZG93bkxpc3Qoe2lzT3JkZXJlZDogZmFsc2V9KSxcbiAgICBcIm9sXCI6IG1hcmtkb3duTGlzdCh7aXNPcmRlcmVkOiB0cnVlfSksXG4gICAgXCJsaVwiOiBtYXJrZG93bkxpc3RJdGVtLFxuICAgIFwic3Ryb25nXCI6IHN5bW1ldHJpY01hcmtkb3duRWxlbWVudChcIl9fXCIpLFxuICAgIFwiZW1cIjogc3ltbWV0cmljTWFya2Rvd25FbGVtZW50KFwiKlwiKSxcbiAgICBcImFcIjogbWFya2Rvd25MaW5rLFxuICAgIFwiaW1nXCI6IG1hcmtkb3duSW1hZ2Vcbn07XG5cbihmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSA2OyBpKyspIHtcbiAgICAgICAgaHRtbFRvTWFya2Rvd25bXCJoXCIgKyBpXSA9IG1hcmtkb3duRWxlbWVudChyZXBlYXRTdHJpbmcoXCIjXCIsIGkpICsgXCIgXCIsIFwiXFxuXFxuXCIpO1xuICAgIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIHJlcGVhdFN0cmluZyh2YWx1ZSwgY291bnQpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGNvdW50ICsgMSkuam9pbih2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIG1hcmtkb3duV3JpdGVyKCkge1xuICAgIHZhciBmcmFnbWVudHMgPSBbXTtcbiAgICB2YXIgZWxlbWVudFN0YWNrID0gW107XG4gICAgdmFyIGxpc3QgPSBudWxsO1xuICAgIHZhciBsaXN0SXRlbSA9IHt9O1xuICAgIFxuICAgIGZ1bmN0aW9uIG9wZW4odGFnTmFtZSwgYXR0cmlidXRlcykge1xuICAgICAgICBhdHRyaWJ1dGVzID0gYXR0cmlidXRlcyB8fCB7fTtcbiAgICAgICAgXG4gICAgICAgIHZhciBjcmVhdGVFbGVtZW50ID0gaHRtbFRvTWFya2Rvd25bdGFnTmFtZV0gfHwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgIH07XG4gICAgICAgIHZhciBlbGVtZW50ID0gY3JlYXRlRWxlbWVudChhdHRyaWJ1dGVzLCBsaXN0LCBsaXN0SXRlbSk7XG4gICAgICAgIGVsZW1lbnRTdGFjay5wdXNoKHtlbmQ6IGVsZW1lbnQuZW5kLCBsaXN0OiBsaXN0fSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoZWxlbWVudC5saXN0KSB7XG4gICAgICAgICAgICBsaXN0ID0gZWxlbWVudC5saXN0O1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB2YXIgYW5jaG9yQmVmb3JlU3RhcnQgPSBlbGVtZW50LmFuY2hvclBvc2l0aW9uID09PSBcImJlZm9yZVwiO1xuICAgICAgICBpZiAoYW5jaG9yQmVmb3JlU3RhcnQpIHtcbiAgICAgICAgICAgIHdyaXRlQW5jaG9yKGF0dHJpYnV0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnJhZ21lbnRzLnB1c2goZWxlbWVudC5zdGFydCB8fCBcIlwiKTtcbiAgICAgICAgaWYgKCFhbmNob3JCZWZvcmVTdGFydCkge1xuICAgICAgICAgICAgd3JpdGVBbmNob3IoYXR0cmlidXRlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gd3JpdGVBbmNob3IoYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5pZCkge1xuICAgICAgICAgICAgZnJhZ21lbnRzLnB1c2goJzxhIGlkPVwiJyArIGF0dHJpYnV0ZXMuaWQgKyAnXCI+PC9hPicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGNsb3NlKHRhZ05hbWUpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbGVtZW50U3RhY2sucG9wKCk7XG4gICAgICAgIGxpc3QgPSBlbGVtZW50Lmxpc3Q7XG4gICAgICAgIHZhciBlbmQgPSBfLmlzRnVuY3Rpb24oZWxlbWVudC5lbmQpID8gZWxlbWVudC5lbmQoKSA6IGVsZW1lbnQuZW5kO1xuICAgICAgICBmcmFnbWVudHMucHVzaChlbmQgfHwgXCJcIik7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIHNlbGZDbG9zaW5nKHRhZ05hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgb3Blbih0YWdOYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgY2xvc2UodGFnTmFtZSk7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIHRleHQodmFsdWUpIHtcbiAgICAgICAgZnJhZ21lbnRzLnB1c2goZXNjYXBlTWFya2Rvd24odmFsdWUpKTtcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gYXNTdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBmcmFnbWVudHMuam9pbihcIlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhc1N0cmluZzogYXNTdHJpbmcsXG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIGNsb3NlOiBjbG9zZSxcbiAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgc2VsZkNsb3Npbmc6IHNlbGZDbG9zaW5nXG4gICAgfTtcbn1cblxuZXhwb3J0cy53cml0ZXIgPSBtYXJrZG93bldyaXRlcjtcblxuZnVuY3Rpb24gZXNjYXBlTWFya2Rvd24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoLyhbXFxgXFwqX1xce1xcfVxcW1xcXVxcKFxcKVxcI1xcK1xcLVxcLlxcIV0pL2csICdcXFxcJDEnKTtcbn1cblxufSx7XCJ1bmRlcnNjb3JlXCI6MTAyfV0sMzU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIG5vZGVzID0gcmVxdWlyZShcIi4vbm9kZXNcIik7XG5cbmV4cG9ydHMuRWxlbWVudCA9IG5vZGVzLkVsZW1lbnQ7XG5leHBvcnRzLmVsZW1lbnQgPSBub2Rlcy5lbGVtZW50O1xuZXhwb3J0cy50ZXh0ID0gbm9kZXMudGV4dDtcbmV4cG9ydHMucmVhZFN0cmluZyA9IHJlcXVpcmUoXCIuL3JlYWRlclwiKS5yZWFkU3RyaW5nO1xuZXhwb3J0cy53cml0ZVN0cmluZyA9IHJlcXVpcmUoXCIuL3dyaXRlclwiKS53cml0ZVN0cmluZztcblxufSx7XCIuL25vZGVzXCI6MzYsXCIuL3JlYWRlclwiOjM3LFwiLi93cml0ZXJcIjozOH1dLDM2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBfID0gcmVxdWlyZShcInVuZGVyc2NvcmVcIik7XG5cblxuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuZWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIG5ldyBFbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGNoaWxkcmVuKTtcbn07XG5leHBvcnRzLnRleHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9O1xufTtcblxuXG52YXIgZW1wdHlFbGVtZW50ID0ge1xuICAgIGZpcnN0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBmaXJzdE9yRW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZW1wdHlFbGVtZW50O1xuICAgIH0sXG4gICAgYXR0cmlidXRlczoge31cbn07XG5cbmZ1bmN0aW9uIEVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgY2hpbGRyZW4pIHtcbiAgICB0aGlzLnR5cGUgPSBcImVsZW1lbnRcIjtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMgfHwge307XG4gICAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xufVxuXG5FbGVtZW50LnByb3RvdHlwZS5maXJzdCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gXy5maW5kKHRoaXMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjaGlsZC5uYW1lID09PSBuYW1lO1xuICAgIH0pO1xufTtcblxuRWxlbWVudC5wcm90b3R5cGUuZmlyc3RPckVtcHR5ID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLmZpcnN0KG5hbWUpIHx8IGVtcHR5RWxlbWVudDtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBlbGVtZW50cyA9IF8uZmlsdGVyKHRoaXMuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjaGlsZC5uYW1lID09PSBuYW1lO1xuICAgIH0pO1xuICAgIHJldHVybiB0b0VsZW1lbnRMaXN0KGVsZW1lbnRzKTtcbn07XG5cbkVsZW1lbnQucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMSB8fCB0aGlzLmNoaWxkcmVuWzBdLnR5cGUgIT09IFwidGV4dFwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0udmFsdWU7XG59O1xuXG52YXIgZWxlbWVudExpc3RQcm90b3R5cGUgPSB7XG4gICAgZ2V0RWxlbWVudHNCeVRhZ05hbWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRvRWxlbWVudExpc3QoXy5mbGF0dGVuKHRoaXMubWFwKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xuICAgICAgICB9LCB0cnVlKSkpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHRvRWxlbWVudExpc3QoYXJyYXkpIHtcbiAgICByZXR1cm4gXy5leHRlbmQoYXJyYXksIGVsZW1lbnRMaXN0UHJvdG90eXBlKTtcbn1cblxufSx7XCJ1bmRlcnNjb3JlXCI6MTAyfV0sMzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIHByb21pc2VzID0gcmVxdWlyZShcIi4uL3Byb21pc2VzXCIpO1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcblxudmFyIHhtbGRvbSA9IHJlcXVpcmUoXCIuL3htbGRvbVwiKTtcbnZhciBub2RlcyA9IHJlcXVpcmUoXCIuL25vZGVzXCIpO1xudmFyIEVsZW1lbnQgPSBub2Rlcy5FbGVtZW50O1xuXG5leHBvcnRzLnJlYWRTdHJpbmcgPSByZWFkU3RyaW5nO1xuXG52YXIgTm9kZSA9IHhtbGRvbS5Ob2RlO1xuXG5mdW5jdGlvbiByZWFkU3RyaW5nKHhtbFN0cmluZywgbmFtZXNwYWNlTWFwKSB7XG4gICAgbmFtZXNwYWNlTWFwID0gbmFtZXNwYWNlTWFwIHx8IHt9O1xuXG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIGRvY3VtZW50ID0geG1sZG9tLnBhcnNlRnJvbVN0cmluZyh4bWxTdHJpbmcsIFwidGV4dC94bWxcIik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VzLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC50YWdOYW1lID09PSBcInBhcnNlcmVycm9yXCIpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VzLnJlc29sdmUobmV3IEVycm9yKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnROb2RlKG5vZGUpIHtcbiAgICAgICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKSB7XG4gICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6XG4gICAgICAgICAgICByZXR1cm4gY29udmVydEVsZW1lbnQobm9kZSk7XG4gICAgICAgIGNhc2UgTm9kZS5URVhUX05PREU6XG4gICAgICAgICAgICByZXR1cm4gbm9kZXMudGV4dChub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0RWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBjb252ZXJ0ZWROYW1lID0gY29udmVydE5hbWUoZWxlbWVudCk7XG5cbiAgICAgICAgdmFyIGNvbnZlcnRlZENoaWxkcmVuID0gW107XG4gICAgICAgIF8uZm9yRWFjaChlbGVtZW50LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNoaWxkTm9kZSkge1xuICAgICAgICAgICAgdmFyIGNvbnZlcnRlZE5vZGUgPSBjb252ZXJ0Tm9kZShjaGlsZE5vZGUpO1xuICAgICAgICAgICAgaWYgKGNvbnZlcnRlZE5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0ZWRDaGlsZHJlbi5wdXNoKGNvbnZlcnRlZE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB2YXIgY29udmVydGVkQXR0cmlidXRlcyA9IHt9O1xuICAgICAgICBfLmZvckVhY2goZWxlbWVudC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGNvbnZlcnRlZEF0dHJpYnV0ZXNbY29udmVydE5hbWUoYXR0cmlidXRlKV0gPSBhdHRyaWJ1dGUudmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXcgRWxlbWVudChjb252ZXJ0ZWROYW1lLCBjb252ZXJ0ZWRBdHRyaWJ1dGVzLCBjb252ZXJ0ZWRDaGlsZHJlbik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydE5hbWUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIHZhciBtYXBwZWRQcmVmaXggPSBuYW1lc3BhY2VNYXBbbm9kZS5uYW1lc3BhY2VVUkldO1xuICAgICAgICAgICAgdmFyIHByZWZpeDtcbiAgICAgICAgICAgIGlmIChtYXBwZWRQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICBwcmVmaXggPSBtYXBwZWRQcmVmaXggKyBcIjpcIjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ID0gXCJ7XCIgKyBub2RlLm5hbWVzcGFjZVVSSSArIFwifVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIG5vZGUubG9jYWxOYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUubG9jYWxOYW1lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2VzLnJlc29sdmUoY29udmVydE5vZGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSk7XG59XG5cbn0se1wiLi4vcHJvbWlzZXNcIjoyMyxcIi4vbm9kZXNcIjozNixcIi4veG1sZG9tXCI6MzksXCJ1bmRlcnNjb3JlXCI6MTAyfV0sMzg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcbnZhciB4bWxidWlsZGVyID0gcmVxdWlyZShcInhtbGJ1aWxkZXJcIik7XG5cblxuZXhwb3J0cy53cml0ZVN0cmluZyA9IHdyaXRlU3RyaW5nO1xuXG5cbmZ1bmN0aW9uIHdyaXRlU3RyaW5nKHJvb3QsIG5hbWVzcGFjZXMpIHtcbiAgICB2YXIgdXJpVG9QcmVmaXggPSBfLmludmVydChuYW1lc3BhY2VzKTtcbiAgICBcbiAgICB2YXIgbm9kZVdyaXRlcnMgPSB7XG4gICAgICAgIGVsZW1lbnQ6IHdyaXRlRWxlbWVudCxcbiAgICAgICAgdGV4dDogd3JpdGVUZXh0Tm9kZVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiB3cml0ZU5vZGUoYnVpbGRlciwgbm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZVdyaXRlcnNbbm9kZS50eXBlXShidWlsZGVyLCBub2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZUVsZW1lbnQoYnVpbGRlciwgZWxlbWVudCkge1xuICAgICAgICB2YXIgZWxlbWVudEJ1aWxkZXIgPSBidWlsZGVyLmVsZW1lbnQobWFwRWxlbWVudE5hbWUoZWxlbWVudC5uYW1lKSwgZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICB3cml0ZU5vZGUoZWxlbWVudEJ1aWxkZXIsIGNoaWxkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIG1hcEVsZW1lbnROYW1lKG5hbWUpIHtcbiAgICAgICAgdmFyIGxvbmdGb3JtTWF0Y2ggPSAvXlxceyguKilcXH0oLiopJC8uZXhlYyhuYW1lKTtcbiAgICAgICAgaWYgKGxvbmdGb3JtTWF0Y2gpIHtcbiAgICAgICAgICAgIHZhciBwcmVmaXggPSB1cmlUb1ByZWZpeFtsb25nRm9ybU1hdGNoWzFdXTtcbiAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAocHJlZml4ID09PSBcIlwiID8gXCJcIiA6IFwiOlwiKSArIGxvbmdGb3JtTWF0Y2hbMl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiB3cml0ZURvY3VtZW50KHJvb3QpIHtcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSB4bWxidWlsZGVyXG4gICAgICAgICAgICAuY3JlYXRlKG1hcEVsZW1lbnROYW1lKHJvb3QubmFtZSksIHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMS4wJyxcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogJ1VURi04JyxcbiAgICAgICAgICAgICAgICBzdGFuZGFsb25lOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIF8uZm9yRWFjaChuYW1lc3BhY2VzLCBmdW5jdGlvbih1cmksIHByZWZpeCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IFwieG1sbnNcIiArIChwcmVmaXggPT09IFwiXCIgPyBcIlwiIDogXCI6XCIgKyBwcmVmaXgpO1xuICAgICAgICAgICAgYnVpbGRlci5hdHRyaWJ1dGUoa2V5LCB1cmkpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJvb3QuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgd3JpdGVOb2RlKGJ1aWxkZXIsIGNoaWxkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBidWlsZGVyLmVuZCgpO1xuICAgIH1cblxuICAgIHJldHVybiB3cml0ZURvY3VtZW50KHJvb3QpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVRleHROb2RlKGJ1aWxkZXIsIG5vZGUpIHtcbiAgICBidWlsZGVyLnRleHQobm9kZS52YWx1ZSk7XG59XG5cbn0se1widW5kZXJzY29yZVwiOjEwMixcInhtbGJ1aWxkZXJcIjoxMjd9XSwzOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgeG1sZG9tID0gcmVxdWlyZShcIkB4bWxkb20veG1sZG9tXCIpO1xudmFyIGRvbSA9IHJlcXVpcmUoXCJAeG1sZG9tL3htbGRvbS9saWIvZG9tXCIpO1xuXG5mdW5jdGlvbiBwYXJzZUZyb21TdHJpbmcoc3RyaW5nKSB7XG4gICAgdmFyIGVycm9yID0gbnVsbDtcblxuICAgIHZhciBkb21QYXJzZXIgPSBuZXcgeG1sZG9tLkRPTVBhcnNlcih7XG4gICAgICAgIGVycm9ySGFuZGxlcjogZnVuY3Rpb24obGV2ZWwsIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIGVycm9yID0ge2xldmVsOiBsZXZlbCwgbWVzc2FnZTogbWVzc2FnZX07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBkb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcoc3RyaW5nKTtcblxuICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yLmxldmVsICsgXCI6IFwiICsgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxufVxuXG5leHBvcnRzLnBhcnNlRnJvbVN0cmluZyA9IHBhcnNlRnJvbVN0cmluZztcbmV4cG9ydHMuTm9kZSA9IGRvbS5Ob2RlO1xuXG59LHtcIkB4bWxkb20veG1sZG9tXCI6NDUsXCJAeG1sZG9tL3htbGRvbS9saWIvZG9tXCI6NDN9XSw0MDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgYmFzZTY0anMgPSByZXF1aXJlKFwiYmFzZTY0LWpzXCIpO1xudmFyIEpTWmlwID0gcmVxdWlyZShcImpzemlwXCIpO1xuXG5leHBvcnRzLm9wZW5BcnJheUJ1ZmZlciA9IG9wZW5BcnJheUJ1ZmZlcjtcbmV4cG9ydHMuc3BsaXRQYXRoID0gc3BsaXRQYXRoO1xuZXhwb3J0cy5qb2luUGF0aCA9IGpvaW5QYXRoO1xuXG5mdW5jdGlvbiBvcGVuQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gSlNaaXAubG9hZEFzeW5jKGFycmF5QnVmZmVyKS50aGVuKGZ1bmN0aW9uKHppcEZpbGUpIHtcbiAgICAgICAgZnVuY3Rpb24gZXhpc3RzKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB6aXBGaWxlLmZpbGUobmFtZSkgIT09IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkKG5hbWUsIGVuY29kaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gemlwRmlsZS5maWxlKG5hbWUpLmFzeW5jKFwidWludDhhcnJheVwiKS50aGVuKGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImJhc2U2NFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlNjRqcy5mcm9tQnl0ZUFycmF5KGFycmF5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZXIuZGVjb2RlKGFycmF5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB3cml0ZShuYW1lLCBjb250ZW50cykge1xuICAgICAgICAgICAgemlwRmlsZS5maWxlKG5hbWUsIGNvbnRlbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHRvQXJyYXlCdWZmZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gemlwRmlsZS5nZW5lcmF0ZUFzeW5jKHt0eXBlOiBcImFycmF5YnVmZmVyXCJ9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBleGlzdHM6IGV4aXN0cyxcbiAgICAgICAgICAgIHJlYWQ6IHJlYWQsXG4gICAgICAgICAgICB3cml0ZTogd3JpdGUsXG4gICAgICAgICAgICB0b0FycmF5QnVmZmVyOiB0b0FycmF5QnVmZmVyXG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0UGF0aChwYXRoKSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IHBhdGgubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChsYXN0SW5kZXggPT09IC0xKSB7XG4gICAgICAgIHJldHVybiB7ZGlybmFtZTogXCJcIiwgYmFzZW5hbWU6IHBhdGh9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkaXJuYW1lOiBwYXRoLnN1YnN0cmluZygwLCBsYXN0SW5kZXgpLFxuICAgICAgICAgICAgYmFzZW5hbWU6IHBhdGguc3Vic3RyaW5nKGxhc3RJbmRleCArIDEpXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBqb2luUGF0aCgpIHtcbiAgICB2YXIgbm9uRW1wdHlQYXRocyA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcmd1bWVudHMsIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfSk7XG5cbiAgICB2YXIgcmVsZXZhbnRQYXRocyA9IFtdO1xuXG4gICAgbm9uRW1wdHlQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgaWYgKC9eXFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICAgICAgICByZWxldmFudFBhdGhzID0gW3BhdGhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVsZXZhbnRQYXRocy5wdXNoKHBhdGgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVsZXZhbnRQYXRocy5qb2luKFwiL1wiKTtcbn1cblxufSx7XCJiYXNlNjQtanNcIjo0NyxcImpzemlwXCI6ODh9XSw0MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBQb255ZmlsbCBmb3IgYEFycmF5LnByb3RvdHlwZS5maW5kYCB3aGljaCBpcyBvbmx5IGF2YWlsYWJsZSBpbiBFUzYgcnVudGltZXMuXG4gKlxuICogV29ya3Mgd2l0aCBhbnl0aGluZyB0aGF0IGhhcyBhIGBsZW5ndGhgIHByb3BlcnR5IGFuZCBpbmRleCBhY2Nlc3MgcHJvcGVydGllcywgaW5jbHVkaW5nIE5vZGVMaXN0LlxuICpcbiAqIEB0ZW1wbGF0ZSB7dW5rbm93bn0gVFxuICogQHBhcmFtIHtBcnJheTxUPiB8ICh7bGVuZ3RoOm51bWJlciwgW251bWJlcl06IFR9KX0gbGlzdFxuICogQHBhcmFtIHtmdW5jdGlvbiAoaXRlbTogVCwgaW5kZXg6IG51bWJlciwgbGlzdDpBcnJheTxUPiB8ICh7bGVuZ3RoOm51bWJlciwgW251bWJlcl06IFR9KSk6Ym9vbGVhbn0gcHJlZGljYXRlXG4gKiBAcGFyYW0ge1BhcnRpYWw8UGljazxBcnJheUNvbnN0cnVjdG9yWydwcm90b3R5cGUnXSwgJ2ZpbmQnPj4/fSBhYyBgQXJyYXkucHJvdG90eXBlYCBieSBkZWZhdWx0LFxuICogXHRcdFx0XHRhbGxvd3MgaW5qZWN0aW5nIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uIGluIHRlc3RzXG4gKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH1cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2ZpbmRcbiAqIEBzZWUgaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvbXVsdGlwYWdlL2luZGV4ZWQtY29sbGVjdGlvbnMuaHRtbCNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiAqL1xuZnVuY3Rpb24gZmluZChsaXN0LCBwcmVkaWNhdGUsIGFjKSB7XG5cdGlmIChhYyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0YWMgPSBBcnJheS5wcm90b3R5cGU7XG5cdH1cblx0aWYgKGxpc3QgJiYgdHlwZW9mIGFjLmZpbmQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gYWMuZmluZC5jYWxsKGxpc3QsIHByZWRpY2F0ZSk7XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsaXN0LCBpKSkge1xuXHRcdFx0dmFyIGl0ZW0gPSBsaXN0W2ldO1xuXHRcdFx0aWYgKHByZWRpY2F0ZS5jYWxsKHVuZGVmaW5lZCwgaXRlbSwgaSwgbGlzdCkpIHtcblx0XHRcdFx0cmV0dXJuIGl0ZW07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogXCJTaGFsbG93IGZyZWV6ZXNcIiBhbiBvYmplY3QgdG8gcmVuZGVyIGl0IGltbXV0YWJsZS5cbiAqIFVzZXMgYE9iamVjdC5mcmVlemVgIGlmIGF2YWlsYWJsZSxcbiAqIG90aGVyd2lzZSB0aGUgaW1tdXRhYmlsaXR5IGlzIG9ubHkgaW4gdGhlIHR5cGUuXG4gKlxuICogSXMgdXNlZCB0byBjcmVhdGUgXCJlbnVtIGxpa2VcIiBvYmplY3RzLlxuICpcbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IG9iamVjdCB0aGUgb2JqZWN0IHRvIGZyZWV6ZVxuICogQHBhcmFtIHtQaWNrPE9iamVjdENvbnN0cnVjdG9yLCAnZnJlZXplJz4gPSBPYmplY3R9IG9jIGBPYmplY3RgIGJ5IGRlZmF1bHQsXG4gKiBcdFx0XHRcdGFsbG93cyB0byBpbmplY3QgY3VzdG9tIG9iamVjdCBjb25zdHJ1Y3RvciBmb3IgdGVzdHNcbiAqIEByZXR1cm5zIHtSZWFkb25seTxUPn1cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9mcmVlemVcbiAqL1xuZnVuY3Rpb24gZnJlZXplKG9iamVjdCwgb2MpIHtcblx0aWYgKG9jID09PSB1bmRlZmluZWQpIHtcblx0XHRvYyA9IE9iamVjdFxuXHR9XG5cdHJldHVybiBvYyAmJiB0eXBlb2Ygb2MuZnJlZXplID09PSAnZnVuY3Rpb24nID8gb2MuZnJlZXplKG9iamVjdCkgOiBvYmplY3Rcbn1cblxuLyoqXG4gKiBTaW5jZSB3ZSBjYW4gbm90IHJlbHkgb24gYE9iamVjdC5hc3NpZ25gIHdlIHByb3ZpZGUgYSBzaW1wbGlmaWVkIHZlcnNpb25cbiAqIHRoYXQgaXMgc3VmZmljaWVudCBmb3Igb3VyIG5lZWRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gc291cmNlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gdGFyZ2V0XG4gKiBAdGhyb3dzIFR5cGVFcnJvciBpZiB0YXJnZXQgaXMgbm90IGFuIG9iamVjdFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxuICogQHNlZSBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi9tdWx0aXBhZ2UvZnVuZGFtZW50YWwtb2JqZWN0cy5odG1sI3NlYy1vYmplY3QuYXNzaWduXG4gKi9cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkge1xuXHRpZiAodGFyZ2V0ID09PSBudWxsIHx8IHR5cGVvZiB0YXJnZXQgIT09ICdvYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IGlzIG5vdCBhbiBvYmplY3QnKVxuXHR9XG5cdGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuXHRcdFx0dGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGFyZ2V0XG59XG5cbi8qKlxuICogQWxsIG1pbWUgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZCBhcyBpbnB1dCB0byBgRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZ2BcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01QYXJzZXIvcGFyc2VGcm9tU3RyaW5nI0FyZ3VtZW50MDIgTUROXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2R5bmFtaWMtbWFya3VwLWluc2VydGlvbi5odG1sI2RvbXBhcnNlcnN1cHBvcnRlZHR5cGUgV0hBVFdHIEhUTUwgU3BlY1xuICogQHNlZSBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZ1xuICovXG52YXIgTUlNRV9UWVBFID0gZnJlZXplKHtcblx0LyoqXG5cdCAqIGB0ZXh0L2h0bWxgLCB0aGUgb25seSBtaW1lIHR5cGUgdGhhdCB0cmlnZ2VycyB0cmVhdGluZyBhbiBYTUwgZG9jdW1lbnQgYXMgSFRNTC5cblx0ICpcblx0ICogQHNlZSBET01QYXJzZXIuU3VwcG9ydGVkVHlwZS5pc0hUTUxcblx0ICogQHNlZSBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy90ZXh0L2h0bWwgSUFOQSBNaW1lVHlwZSByZWdpc3RyYXRpb25cblx0ICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IVE1MIFdpa2lwZWRpYVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9ET01QYXJzZXIvcGFyc2VGcm9tU3RyaW5nIE1ETlxuXHQgKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2R5bmFtaWMtbWFya3VwLWluc2VydGlvbi5odG1sI2RvbS1kb21wYXJzZXItcGFyc2Vmcm9tc3RyaW5nIFdIQVRXRyBIVE1MIFNwZWNcblx0ICovXG5cdEhUTUw6ICd0ZXh0L2h0bWwnLFxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgbWV0aG9kIHRvIGNoZWNrIGEgbWltZSB0eXBlIGlmIGl0IGluZGljYXRlcyBhbiBIVE1MIGRvY3VtZW50XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVdXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL3RleHQvaHRtbCBJQU5BIE1pbWVUeXBlIHJlZ2lzdHJhdGlvblxuXHQgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hUTUwgV2lraXBlZGlhXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTVBhcnNlci9wYXJzZUZyb21TdHJpbmcgTUROXG5cdCAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZHluYW1pYy1tYXJrdXAtaW5zZXJ0aW9uLmh0bWwjZG9tLWRvbXBhcnNlci1wYXJzZWZyb21zdHJpbmcgXHQgKi9cblx0aXNIVE1MOiBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRyZXR1cm4gdmFsdWUgPT09IE1JTUVfVFlQRS5IVE1MXG5cdH0sXG5cblx0LyoqXG5cdCAqIGBhcHBsaWNhdGlvbi94bWxgLCB0aGUgc3RhbmRhcmQgbWltZSB0eXBlIGZvciBYTUwgZG9jdW1lbnRzLlxuXHQgKlxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL2FwcGxpY2F0aW9uL3htbCBJQU5BIE1pbWVUeXBlIHJlZ2lzdHJhdGlvblxuXHQgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MzAzI3NlY3Rpb24tOS4xIFJGQyA3MzAzXG5cdCAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE1MX2FuZF9NSU1FIFdpa2lwZWRpYVxuXHQgKi9cblx0WE1MX0FQUExJQ0FUSU9OOiAnYXBwbGljYXRpb24veG1sJyxcblxuXHQvKipcblx0ICogYHRleHQvaHRtbGAsIGFuIGFsaWFzIGZvciBgYXBwbGljYXRpb24veG1sYC5cblx0ICpcblx0ICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzMwMyNzZWN0aW9uLTkuMiBSRkMgNzMwM1xuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL3RleHQveG1sIElBTkEgTWltZVR5cGUgcmVnaXN0cmF0aW9uXG5cdCAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE1MX2FuZF9NSU1FIFdpa2lwZWRpYVxuXHQgKi9cblx0WE1MX1RFWFQ6ICd0ZXh0L3htbCcsXG5cblx0LyoqXG5cdCAqIGBhcHBsaWNhdGlvbi94aHRtbCt4bWxgLCBpbmRpY2F0ZXMgYW4gWE1MIGRvY3VtZW50IHRoYXQgaGFzIHRoZSBkZWZhdWx0IEhUTUwgbmFtZXNwYWNlLFxuXHQgKiBidXQgaXMgcGFyc2VkIGFzIGFuIFhNTCBkb2N1bWVudC5cblx0ICpcblx0ICogQHNlZSBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9hcHBsaWNhdGlvbi94aHRtbCt4bWwgSUFOQSBNaW1lVHlwZSByZWdpc3RyYXRpb25cblx0ICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb21pbXBsZW1lbnRhdGlvbi1jcmVhdGVkb2N1bWVudCBXSEFUV0cgRE9NIFNwZWNcblx0ICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YSFRNTCBXaWtpcGVkaWFcblx0ICovXG5cdFhNTF9YSFRNTF9BUFBMSUNBVElPTjogJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsXG5cblx0LyoqXG5cdCAqIGBpbWFnZS9zdmcreG1sYCxcblx0ICpcblx0ICogQHNlZSBodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9tZWRpYS10eXBlcy9pbWFnZS9zdmcreG1sIElBTkEgTWltZVR5cGUgcmVnaXN0cmF0aW9uXG5cdCAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1NWRzExLyBXM0MgU1ZHIDEuMVxuXHQgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjYWxhYmxlX1ZlY3Rvcl9HcmFwaGljcyBXaWtpcGVkaWFcblx0ICovXG5cdFhNTF9TVkdfSU1BR0U6ICdpbWFnZS9zdmcreG1sJyxcbn0pXG5cbi8qKlxuICogTmFtZXNwYWNlcyB0aGF0IGFyZSB1c2VkIGluIHRoaXMgY29kZSBiYXNlLlxuICpcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lc1xuICovXG52YXIgTkFNRVNQQUNFID0gZnJlZXplKHtcblx0LyoqXG5cdCAqIFRoZSBYSFRNTCBuYW1lc3BhY2UuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFxuXHQgKi9cblx0SFRNTDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnLFxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYHVyaWAgZXF1YWxzIGBOQU1FU1BBQ0UuSFRNTGAuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdXJpXVxuXHQgKlxuXHQgKiBAc2VlIE5BTUVTUEFDRS5IVE1MXG5cdCAqL1xuXHRpc0hUTUw6IGZ1bmN0aW9uICh1cmkpIHtcblx0XHRyZXR1cm4gdXJpID09PSBOQU1FU1BBQ0UuSFRNTFxuXHR9LFxuXG5cdC8qKlxuXHQgKiBUaGUgU1ZHIG5hbWVzcGFjZS5cblx0ICpcblx0ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xuXHQgKi9cblx0U1ZHOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLFxuXG5cdC8qKlxuXHQgKiBUaGUgYHhtbDpgIG5hbWVzcGFjZS5cblx0ICpcblx0ICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2Vcblx0ICovXG5cdFhNTDogJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsXG5cblx0LyoqXG5cdCAqIFRoZSBgeG1sbnM6YCBuYW1lc3BhY2Vcblx0ICpcblx0ICogQHNlZSBodHRwczovL3d3dy53My5vcmcvMjAwMC94bWxucy9cblx0ICovXG5cdFhNTE5TOiAnaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8nLFxufSlcblxuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5mcmVlemUgPSBmcmVlemU7XG5leHBvcnRzLk1JTUVfVFlQRSA9IE1JTUVfVFlQRTtcbmV4cG9ydHMuTkFNRVNQQUNFID0gTkFNRVNQQUNFO1xuXG59LHt9XSw0MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgY29udmVudGlvbnMgPSByZXF1aXJlKFwiLi9jb252ZW50aW9uc1wiKTtcbnZhciBkb20gPSByZXF1aXJlKCcuL2RvbScpXG52YXIgZW50aXRpZXMgPSByZXF1aXJlKCcuL2VudGl0aWVzJyk7XG52YXIgc2F4ID0gcmVxdWlyZSgnLi9zYXgnKTtcblxudmFyIERPTUltcGxlbWVudGF0aW9uID0gZG9tLkRPTUltcGxlbWVudGF0aW9uO1xuXG52YXIgTkFNRVNQQUNFID0gY29udmVudGlvbnMuTkFNRVNQQUNFO1xuXG52YXIgUGFyc2VFcnJvciA9IHNheC5QYXJzZUVycm9yO1xudmFyIFhNTFJlYWRlciA9IHNheC5YTUxSZWFkZXI7XG5cbi8qKlxuICogTm9ybWFsaXplcyBsaW5lIGVuZGluZyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbDExLyNzZWMtbGluZS1lbmRzOlxuICpcbiAqID4gWE1MIHBhcnNlZCBlbnRpdGllcyBhcmUgb2Z0ZW4gc3RvcmVkIGluIGNvbXB1dGVyIGZpbGVzIHdoaWNoLFxuICogPiBmb3IgZWRpdGluZyBjb252ZW5pZW5jZSwgYXJlIG9yZ2FuaXplZCBpbnRvIGxpbmVzLlxuICogPiBUaGVzZSBsaW5lcyBhcmUgdHlwaWNhbGx5IHNlcGFyYXRlZCBieSBzb21lIGNvbWJpbmF0aW9uXG4gKiA+IG9mIHRoZSBjaGFyYWN0ZXJzIENBUlJJQUdFIFJFVFVSTiAoI3hEKSBhbmQgTElORSBGRUVEICgjeEEpLlxuICogPlxuICogPiBUbyBzaW1wbGlmeSB0aGUgdGFza3Mgb2YgYXBwbGljYXRpb25zLCB0aGUgWE1MIHByb2Nlc3NvciBtdXN0IGJlaGF2ZVxuICogPiBhcyBpZiBpdCBub3JtYWxpemVkIGFsbCBsaW5lIGJyZWFrcyBpbiBleHRlcm5hbCBwYXJzZWQgZW50aXRpZXMgKGluY2x1ZGluZyB0aGUgZG9jdW1lbnQgZW50aXR5KVxuICogPiBvbiBpbnB1dCwgYmVmb3JlIHBhcnNpbmcsIGJ5IHRyYW5zbGF0aW5nIGFsbCBvZiB0aGUgZm9sbG93aW5nIHRvIGEgc2luZ2xlICN4QSBjaGFyYWN0ZXI6XG4gKiA+XG4gKiA+IDEuIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlICN4RCAjeEFcbiAqID4gMi4gdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgI3hEICN4ODVcbiAqID4gMy4gdGhlIHNpbmdsZSBjaGFyYWN0ZXIgI3g4NVxuICogPiA0LiB0aGUgc2luZ2xlIGNoYXJhY3RlciAjeDIwMjhcbiAqID4gNS4gYW55ICN4RCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgI3hBIG9yICN4ODUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVMaW5lRW5kaW5ncyhpbnB1dCkge1xuXHRyZXR1cm4gaW5wdXRcblx0XHQucmVwbGFjZSgvXFxyW1xcblxcdTAwODVdL2csICdcXG4nKVxuXHRcdC5yZXBsYWNlKC9bXFxyXFx1MDA4NVxcdTIwMjhdL2csICdcXG4nKVxufVxuXG4vKipcbiAqIEB0eXBlZGVmIExvY2F0b3JcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbY29sdW1uTnVtYmVyXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtsaW5lTnVtYmVyXVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRE9NUGFyc2VyT3B0aW9uc1xuICogQHByb3BlcnR5IHtET01IYW5kbGVyfSBbZG9tQnVpbGRlcl1cbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IFtlcnJvckhhbmRsZXJdXG4gKiBAcHJvcGVydHkgeyhzdHJpbmcpID0+IHN0cmluZ30gW25vcm1hbGl6ZUxpbmVFbmRpbmdzXSB1c2VkIHRvIHJlcGxhY2UgbGluZSBlbmRpbmdzIGJlZm9yZSBwYXJzaW5nXG4gKiBcdFx0XHRcdFx0XHRkZWZhdWx0cyB0byBgbm9ybWFsaXplTGluZUVuZGluZ3NgXG4gKiBAcHJvcGVydHkge0xvY2F0b3J9IFtsb2NhdG9yXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBbeG1sbnNdXG4gKlxuICogQHNlZSBub3JtYWxpemVMaW5lRW5kaW5nc1xuICovXG5cbi8qKlxuICogVGhlIERPTVBhcnNlciBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gcGFyc2UgWE1MIG9yIEhUTUwgc291cmNlIGNvZGVcbiAqIGZyb20gYSBzdHJpbmcgaW50byBhIERPTSBgRG9jdW1lbnRgLlxuICpcbiAqIF94bWxkb20gaXMgZGlmZmVyZW50IGZyb20gdGhlIHNwZWMgaW4gdGhhdCBpdCBhbGxvd3MgYW4gYG9wdGlvbnNgIHBhcmFtZXRlcixcbiAqIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLl9cbiAqXG4gKiBAcGFyYW0ge0RPTVBhcnNlck9wdGlvbnN9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NUGFyc2VyXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2R5bmFtaWMtbWFya3VwLWluc2VydGlvbi5odG1sI2RvbS1wYXJzaW5nLWFuZC1zZXJpYWxpemF0aW9uXG4gKi9cbmZ1bmN0aW9uIERPTVBhcnNlcihvcHRpb25zKXtcblx0dGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fHtsb2NhdG9yOnt9fTtcbn1cblxuRE9NUGFyc2VyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzb3VyY2UsbWltZVR5cGUpe1xuXHR2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblx0dmFyIHNheCA9ICBuZXcgWE1MUmVhZGVyKCk7XG5cdHZhciBkb21CdWlsZGVyID0gb3B0aW9ucy5kb21CdWlsZGVyIHx8IG5ldyBET01IYW5kbGVyKCk7Ly9jb250ZW50SGFuZGxlciBhbmQgTGV4aWNhbEhhbmRsZXJcblx0dmFyIGVycm9ySGFuZGxlciA9IG9wdGlvbnMuZXJyb3JIYW5kbGVyO1xuXHR2YXIgbG9jYXRvciA9IG9wdGlvbnMubG9jYXRvcjtcblx0dmFyIGRlZmF1bHROU01hcCA9IG9wdGlvbnMueG1sbnN8fHt9O1xuXHR2YXIgaXNIVE1MID0gL1xcL3g/aHRtbD8kLy50ZXN0KG1pbWVUeXBlKTsvL21pbWVUeXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignaHRtbCcpID4gLTE7XG4gIFx0dmFyIGVudGl0eU1hcCA9IGlzSFRNTCA/IGVudGl0aWVzLkhUTUxfRU5USVRJRVMgOiBlbnRpdGllcy5YTUxfRU5USVRJRVM7XG5cdGlmKGxvY2F0b3Ipe1xuXHRcdGRvbUJ1aWxkZXIuc2V0RG9jdW1lbnRMb2NhdG9yKGxvY2F0b3IpXG5cdH1cblxuXHRzYXguZXJyb3JIYW5kbGVyID0gYnVpbGRFcnJvckhhbmRsZXIoZXJyb3JIYW5kbGVyLGRvbUJ1aWxkZXIsbG9jYXRvcik7XG5cdHNheC5kb21CdWlsZGVyID0gb3B0aW9ucy5kb21CdWlsZGVyIHx8IGRvbUJ1aWxkZXI7XG5cdGlmKGlzSFRNTCl7XG5cdFx0ZGVmYXVsdE5TTWFwWycnXSA9IE5BTUVTUEFDRS5IVE1MO1xuXHR9XG5cdGRlZmF1bHROU01hcC54bWwgPSBkZWZhdWx0TlNNYXAueG1sIHx8IE5BTUVTUEFDRS5YTUw7XG5cdHZhciBub3JtYWxpemUgPSBvcHRpb25zLm5vcm1hbGl6ZUxpbmVFbmRpbmdzIHx8IG5vcm1hbGl6ZUxpbmVFbmRpbmdzO1xuXHRpZiAoc291cmNlICYmIHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnKSB7XG5cdFx0c2F4LnBhcnNlKFxuXHRcdFx0bm9ybWFsaXplKHNvdXJjZSksXG5cdFx0XHRkZWZhdWx0TlNNYXAsXG5cdFx0XHRlbnRpdHlNYXBcblx0XHQpXG5cdH0gZWxzZSB7XG5cdFx0c2F4LmVycm9ySGFuZGxlci5lcnJvcignaW52YWxpZCBkb2Mgc291cmNlJylcblx0fVxuXHRyZXR1cm4gZG9tQnVpbGRlci5kb2M7XG59XG5mdW5jdGlvbiBidWlsZEVycm9ySGFuZGxlcihlcnJvckltcGwsZG9tQnVpbGRlcixsb2NhdG9yKXtcblx0aWYoIWVycm9ySW1wbCl7XG5cdFx0aWYoZG9tQnVpbGRlciBpbnN0YW5jZW9mIERPTUhhbmRsZXIpe1xuXHRcdFx0cmV0dXJuIGRvbUJ1aWxkZXI7XG5cdFx0fVxuXHRcdGVycm9ySW1wbCA9IGRvbUJ1aWxkZXIgO1xuXHR9XG5cdHZhciBlcnJvckhhbmRsZXIgPSB7fVxuXHR2YXIgaXNDYWxsYmFjayA9IGVycm9ySW1wbCBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuXHRsb2NhdG9yID0gbG9jYXRvcnx8e31cblx0ZnVuY3Rpb24gYnVpbGQoa2V5KXtcblx0XHR2YXIgZm4gPSBlcnJvckltcGxba2V5XTtcblx0XHRpZighZm4gJiYgaXNDYWxsYmFjayl7XG5cdFx0XHRmbiA9IGVycm9ySW1wbC5sZW5ndGggPT0gMj9mdW5jdGlvbihtc2cpe2Vycm9ySW1wbChrZXksbXNnKX06ZXJyb3JJbXBsO1xuXHRcdH1cblx0XHRlcnJvckhhbmRsZXJba2V5XSA9IGZuICYmIGZ1bmN0aW9uKG1zZyl7XG5cdFx0XHRmbignW3htbGRvbSAnK2tleSsnXVxcdCcrbXNnK19sb2NhdG9yKGxvY2F0b3IpKTtcblx0XHR9fHxmdW5jdGlvbigpe307XG5cdH1cblx0YnVpbGQoJ3dhcm5pbmcnKTtcblx0YnVpbGQoJ2Vycm9yJyk7XG5cdGJ1aWxkKCdmYXRhbEVycm9yJyk7XG5cdHJldHVybiBlcnJvckhhbmRsZXI7XG59XG5cbi8vY29uc29sZS5sb2coJyNcXG5cXG5cXG5cXG5cXG5cXG5cXG4jIyMjJylcbi8qKlxuICogK0NvbnRlbnRIYW5kbGVyK0Vycm9ySGFuZGxlclxuICogK0xleGljYWxIYW5kbGVyK0VudGl0eVJlc29sdmVyMlxuICogLURlY2xIYW5kbGVyLURUREhhbmRsZXJcbiAqXG4gKiBEZWZhdWx0SGFuZGxlcjpFbnRpdHlSZXNvbHZlciwgRFRESGFuZGxlciwgQ29udGVudEhhbmRsZXIsIEVycm9ySGFuZGxlclxuICogRGVmYXVsdEhhbmRsZXIyOkRlZmF1bHRIYW5kbGVyLExleGljYWxIYW5kbGVyLCBEZWNsSGFuZGxlciwgRW50aXR5UmVzb2x2ZXIyXG4gKiBAbGluayBodHRwOi8vd3d3LnNheHByb2plY3Qub3JnL2FwaWRvYy9vcmcveG1sL3NheC9oZWxwZXJzL0RlZmF1bHRIYW5kbGVyLmh0bWxcbiAqL1xuZnVuY3Rpb24gRE9NSGFuZGxlcigpIHtcbiAgICB0aGlzLmNkYXRhID0gZmFsc2U7XG59XG5mdW5jdGlvbiBwb3NpdGlvbihsb2NhdG9yLG5vZGUpe1xuXHRub2RlLmxpbmVOdW1iZXIgPSBsb2NhdG9yLmxpbmVOdW1iZXI7XG5cdG5vZGUuY29sdW1uTnVtYmVyID0gbG9jYXRvci5jb2x1bW5OdW1iZXI7XG59XG4vKipcbiAqIEBzZWUgb3JnLnhtbC5zYXguQ29udGVudEhhbmRsZXIjc3RhcnREb2N1bWVudFxuICogQGxpbmsgaHR0cDovL3d3dy5zYXhwcm9qZWN0Lm9yZy9hcGlkb2Mvb3JnL3htbC9zYXgvQ29udGVudEhhbmRsZXIuaHRtbFxuICovXG5ET01IYW5kbGVyLnByb3RvdHlwZSA9IHtcblx0c3RhcnREb2N1bWVudCA6IGZ1bmN0aW9uKCkge1xuICAgIFx0dGhpcy5kb2MgPSBuZXcgRE9NSW1wbGVtZW50YXRpb24oKS5jcmVhdGVEb2N1bWVudChudWxsLCBudWxsLCBudWxsKTtcbiAgICBcdGlmICh0aGlzLmxvY2F0b3IpIHtcbiAgICAgICAgXHR0aGlzLmRvYy5kb2N1bWVudFVSSSA9IHRoaXMubG9jYXRvci5zeXN0ZW1JZDtcbiAgICBcdH1cblx0fSxcblx0c3RhcnRFbGVtZW50OmZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBxTmFtZSwgYXR0cnMpIHtcblx0XHR2YXIgZG9jID0gdGhpcy5kb2M7XG5cdCAgICB2YXIgZWwgPSBkb2MuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgcU5hbWV8fGxvY2FsTmFtZSk7XG5cdCAgICB2YXIgbGVuID0gYXR0cnMubGVuZ3RoO1xuXHQgICAgYXBwZW5kRWxlbWVudCh0aGlzLCBlbCk7XG5cdCAgICB0aGlzLmN1cnJlbnRFbGVtZW50ID0gZWw7XG5cblx0XHR0aGlzLmxvY2F0b3IgJiYgcG9zaXRpb24odGhpcy5sb2NhdG9yLGVsKVxuXHQgICAgZm9yICh2YXIgaSA9IDAgOyBpIDwgbGVuOyBpKyspIHtcblx0ICAgICAgICB2YXIgbmFtZXNwYWNlVVJJID0gYXR0cnMuZ2V0VVJJKGkpO1xuXHQgICAgICAgIHZhciB2YWx1ZSA9IGF0dHJzLmdldFZhbHVlKGkpO1xuXHQgICAgICAgIHZhciBxTmFtZSA9IGF0dHJzLmdldFFOYW1lKGkpO1xuXHRcdFx0dmFyIGF0dHIgPSBkb2MuY3JlYXRlQXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxTmFtZSk7XG5cdFx0XHR0aGlzLmxvY2F0b3IgJiZwb3NpdGlvbihhdHRycy5nZXRMb2NhdG9yKGkpLGF0dHIpO1xuXHRcdFx0YXR0ci52YWx1ZSA9IGF0dHIubm9kZVZhbHVlID0gdmFsdWU7XG5cdFx0XHRlbC5zZXRBdHRyaWJ1dGVOb2RlKGF0dHIpXG5cdCAgICB9XG5cdH0sXG5cdGVuZEVsZW1lbnQ6ZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIHFOYW1lKSB7XG5cdFx0dmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnRFbGVtZW50XG5cdFx0dmFyIHRhZ05hbWUgPSBjdXJyZW50LnRhZ05hbWU7XG5cdFx0dGhpcy5jdXJyZW50RWxlbWVudCA9IGN1cnJlbnQucGFyZW50Tm9kZTtcblx0fSxcblx0c3RhcnRQcmVmaXhNYXBwaW5nOmZ1bmN0aW9uKHByZWZpeCwgdXJpKSB7XG5cdH0sXG5cdGVuZFByZWZpeE1hcHBpbmc6ZnVuY3Rpb24ocHJlZml4KSB7XG5cdH0sXG5cdHByb2Nlc3NpbmdJbnN0cnVjdGlvbjpmdW5jdGlvbih0YXJnZXQsIGRhdGEpIHtcblx0ICAgIHZhciBpbnMgPSB0aGlzLmRvYy5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGFyZ2V0LCBkYXRhKTtcblx0ICAgIHRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsaW5zKVxuXHQgICAgYXBwZW5kRWxlbWVudCh0aGlzLCBpbnMpO1xuXHR9LFxuXHRpZ25vcmFibGVXaGl0ZXNwYWNlOmZ1bmN0aW9uKGNoLCBzdGFydCwgbGVuZ3RoKSB7XG5cdH0sXG5cdGNoYXJhY3RlcnM6ZnVuY3Rpb24oY2hhcnMsIHN0YXJ0LCBsZW5ndGgpIHtcblx0XHRjaGFycyA9IF90b1N0cmluZy5hcHBseSh0aGlzLGFyZ3VtZW50cylcblx0XHQvL2NvbnNvbGUubG9nKGNoYXJzKVxuXHRcdGlmKGNoYXJzKXtcblx0XHRcdGlmICh0aGlzLmNkYXRhKSB7XG5cdFx0XHRcdHZhciBjaGFyTm9kZSA9IHRoaXMuZG9jLmNyZWF0ZUNEQVRBU2VjdGlvbihjaGFycyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgY2hhck5vZGUgPSB0aGlzLmRvYy5jcmVhdGVUZXh0Tm9kZShjaGFycyk7XG5cdFx0XHR9XG5cdFx0XHRpZih0aGlzLmN1cnJlbnRFbGVtZW50KXtcblx0XHRcdFx0dGhpcy5jdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjaGFyTm9kZSk7XG5cdFx0XHR9ZWxzZSBpZigvXlxccyokLy50ZXN0KGNoYXJzKSl7XG5cdFx0XHRcdHRoaXMuZG9jLmFwcGVuZENoaWxkKGNoYXJOb2RlKTtcblx0XHRcdFx0Ly9wcm9jZXNzIHhtbFxuXHRcdFx0fVxuXHRcdFx0dGhpcy5sb2NhdG9yICYmIHBvc2l0aW9uKHRoaXMubG9jYXRvcixjaGFyTm9kZSlcblx0XHR9XG5cdH0sXG5cdHNraXBwZWRFbnRpdHk6ZnVuY3Rpb24obmFtZSkge1xuXHR9LFxuXHRlbmREb2N1bWVudDpmdW5jdGlvbigpIHtcblx0XHR0aGlzLmRvYy5ub3JtYWxpemUoKTtcblx0fSxcblx0c2V0RG9jdW1lbnRMb2NhdG9yOmZ1bmN0aW9uIChsb2NhdG9yKSB7XG5cdCAgICBpZih0aGlzLmxvY2F0b3IgPSBsb2NhdG9yKXsvLyAmJiAhKCdsaW5lTnVtYmVyJyBpbiBsb2NhdG9yKSl7XG5cdCAgICBcdGxvY2F0b3IubGluZU51bWJlciA9IDA7XG5cdCAgICB9XG5cdH0sXG5cdC8vTGV4aWNhbEhhbmRsZXJcblx0Y29tbWVudDpmdW5jdGlvbihjaGFycywgc3RhcnQsIGxlbmd0aCkge1xuXHRcdGNoYXJzID0gX3RvU3RyaW5nLmFwcGx5KHRoaXMsYXJndW1lbnRzKVxuXHQgICAgdmFyIGNvbW0gPSB0aGlzLmRvYy5jcmVhdGVDb21tZW50KGNoYXJzKTtcblx0ICAgIHRoaXMubG9jYXRvciAmJiBwb3NpdGlvbih0aGlzLmxvY2F0b3IsY29tbSlcblx0ICAgIGFwcGVuZEVsZW1lbnQodGhpcywgY29tbSk7XG5cdH0sXG5cblx0c3RhcnRDREFUQTpmdW5jdGlvbigpIHtcblx0ICAgIC8vdXNlZCBpbiBjaGFyYWN0ZXJzKCkgbWV0aG9kc1xuXHQgICAgdGhpcy5jZGF0YSA9IHRydWU7XG5cdH0sXG5cdGVuZENEQVRBOmZ1bmN0aW9uKCkge1xuXHQgICAgdGhpcy5jZGF0YSA9IGZhbHNlO1xuXHR9LFxuXG5cdHN0YXJ0RFREOmZ1bmN0aW9uKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuXHRcdHZhciBpbXBsID0gdGhpcy5kb2MuaW1wbGVtZW50YXRpb247XG5cdCAgICBpZiAoaW1wbCAmJiBpbXBsLmNyZWF0ZURvY3VtZW50VHlwZSkge1xuXHQgICAgICAgIHZhciBkdCA9IGltcGwuY3JlYXRlRG9jdW1lbnRUeXBlKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCk7XG5cdCAgICAgICAgdGhpcy5sb2NhdG9yICYmIHBvc2l0aW9uKHRoaXMubG9jYXRvcixkdClcblx0ICAgICAgICBhcHBlbmRFbGVtZW50KHRoaXMsIGR0KTtcblx0XHRcdFx0XHR0aGlzLmRvYy5kb2N0eXBlID0gZHQ7XG5cdCAgICB9XG5cdH0sXG5cdC8qKlxuXHQgKiBAc2VlIG9yZy54bWwuc2F4LkVycm9ySGFuZGxlclxuXHQgKiBAbGluayBodHRwOi8vd3d3LnNheHByb2plY3Qub3JnL2FwaWRvYy9vcmcveG1sL3NheC9FcnJvckhhbmRsZXIuaHRtbFxuXHQgKi9cblx0d2FybmluZzpmdW5jdGlvbihlcnJvcikge1xuXHRcdGNvbnNvbGUud2FybignW3htbGRvbSB3YXJuaW5nXVxcdCcrZXJyb3IsX2xvY2F0b3IodGhpcy5sb2NhdG9yKSk7XG5cdH0sXG5cdGVycm9yOmZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0Y29uc29sZS5lcnJvcignW3htbGRvbSBlcnJvcl1cXHQnK2Vycm9yLF9sb2NhdG9yKHRoaXMubG9jYXRvcikpO1xuXHR9LFxuXHRmYXRhbEVycm9yOmZ1bmN0aW9uKGVycm9yKSB7XG5cdFx0dGhyb3cgbmV3IFBhcnNlRXJyb3IoZXJyb3IsIHRoaXMubG9jYXRvcik7XG5cdH1cbn1cbmZ1bmN0aW9uIF9sb2NhdG9yKGwpe1xuXHRpZihsKXtcblx0XHRyZXR1cm4gJ1xcbkAnKyhsLnN5c3RlbUlkIHx8JycpKycjW2xpbmU6JytsLmxpbmVOdW1iZXIrJyxjb2w6JytsLmNvbHVtbk51bWJlcisnXSdcblx0fVxufVxuZnVuY3Rpb24gX3RvU3RyaW5nKGNoYXJzLHN0YXJ0LGxlbmd0aCl7XG5cdGlmKHR5cGVvZiBjaGFycyA9PSAnc3RyaW5nJyl7XG5cdFx0cmV0dXJuIGNoYXJzLnN1YnN0cihzdGFydCxsZW5ndGgpXG5cdH1lbHNley8vamF2YSBzYXggY29ubmVjdCB3aWR0aCB4bWxkb20gb24gcmhpbm8od2hhdCBhYm91dDogXCI/ICYmICEoY2hhcnMgaW5zdGFuY2VvZiBTdHJpbmcpXCIpXG5cdFx0aWYoY2hhcnMubGVuZ3RoID49IHN0YXJ0K2xlbmd0aCB8fCBzdGFydCl7XG5cdFx0XHRyZXR1cm4gbmV3IGphdmEubGFuZy5TdHJpbmcoY2hhcnMsc3RhcnQsbGVuZ3RoKSsnJztcblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJzO1xuXHR9XG59XG5cbi8qXG4gKiBAbGluayBodHRwOi8vd3d3LnNheHByb2plY3Qub3JnL2FwaWRvYy9vcmcveG1sL3NheC9leHQvTGV4aWNhbEhhbmRsZXIuaHRtbFxuICogdXNlZCBtZXRob2Qgb2Ygb3JnLnhtbC5zYXguZXh0LkxleGljYWxIYW5kbGVyOlxuICogICNjb21tZW50KGNoYXJzLCBzdGFydCwgbGVuZ3RoKVxuICogICNzdGFydENEQVRBKClcbiAqICAjZW5kQ0RBVEEoKVxuICogICNzdGFydERURChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpXG4gKlxuICpcbiAqIElHTk9SRUQgbWV0aG9kIG9mIG9yZy54bWwuc2F4LmV4dC5MZXhpY2FsSGFuZGxlcjpcbiAqICAjZW5kRFREKClcbiAqICAjc3RhcnRFbnRpdHkobmFtZSlcbiAqICAjZW5kRW50aXR5KG5hbWUpXG4gKlxuICpcbiAqIEBsaW5rIGh0dHA6Ly93d3cuc2F4cHJvamVjdC5vcmcvYXBpZG9jL29yZy94bWwvc2F4L2V4dC9EZWNsSGFuZGxlci5odG1sXG4gKiBJR05PUkVEIG1ldGhvZCBvZiBvcmcueG1sLnNheC5leHQuRGVjbEhhbmRsZXJcbiAqIFx0I2F0dHJpYnV0ZURlY2woZU5hbWUsIGFOYW1lLCB0eXBlLCBtb2RlLCB2YWx1ZSlcbiAqICAjZWxlbWVudERlY2wobmFtZSwgbW9kZWwpXG4gKiAgI2V4dGVybmFsRW50aXR5RGVjbChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpXG4gKiAgI2ludGVybmFsRW50aXR5RGVjbChuYW1lLCB2YWx1ZSlcbiAqIEBsaW5rIGh0dHA6Ly93d3cuc2F4cHJvamVjdC5vcmcvYXBpZG9jL29yZy94bWwvc2F4L2V4dC9FbnRpdHlSZXNvbHZlcjIuaHRtbFxuICogSUdOT1JFRCBtZXRob2Qgb2Ygb3JnLnhtbC5zYXguRW50aXR5UmVzb2x2ZXIyXG4gKiAgI3Jlc29sdmVFbnRpdHkoU3RyaW5nIG5hbWUsU3RyaW5nIHB1YmxpY0lkLFN0cmluZyBiYXNlVVJJLFN0cmluZyBzeXN0ZW1JZClcbiAqICAjcmVzb2x2ZUVudGl0eShwdWJsaWNJZCwgc3lzdGVtSWQpXG4gKiAgI2dldEV4dGVybmFsU3Vic2V0KG5hbWUsIGJhc2VVUkkpXG4gKiBAbGluayBodHRwOi8vd3d3LnNheHByb2plY3Qub3JnL2FwaWRvYy9vcmcveG1sL3NheC9EVERIYW5kbGVyLmh0bWxcbiAqIElHTk9SRUQgbWV0aG9kIG9mIG9yZy54bWwuc2F4LkRUREhhbmRsZXJcbiAqICAjbm90YXRpb25EZWNsKG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge307XG4gKiAgI3VucGFyc2VkRW50aXR5RGVjbChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQsIG5vdGF0aW9uTmFtZSkge307XG4gKi9cblwiZW5kRFRELHN0YXJ0RW50aXR5LGVuZEVudGl0eSxhdHRyaWJ1dGVEZWNsLGVsZW1lbnREZWNsLGV4dGVybmFsRW50aXR5RGVjbCxpbnRlcm5hbEVudGl0eURlY2wscmVzb2x2ZUVudGl0eSxnZXRFeHRlcm5hbFN1YnNldCxub3RhdGlvbkRlY2wsdW5wYXJzZWRFbnRpdHlEZWNsXCIucmVwbGFjZSgvXFx3Ky9nLGZ1bmN0aW9uKGtleSl7XG5cdERPTUhhbmRsZXIucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbigpe3JldHVybiBudWxsfVxufSlcblxuLyogUHJpdmF0ZSBzdGF0aWMgaGVscGVycyB0cmVhdGVkIGJlbG93IGFzIHByaXZhdGUgaW5zdGFuY2UgbWV0aG9kcywgc28gZG9uJ3QgbmVlZCB0byBhZGQgdGhlc2UgdG8gdGhlIHB1YmxpYyBBUEk7IHdlIG1pZ2h0IHVzZSBhIFJlbGF0b3IgdG8gYWxzbyBnZXQgcmlkIG9mIG5vbi1zdGFuZGFyZCBwdWJsaWMgcHJvcGVydGllcyAqL1xuZnVuY3Rpb24gYXBwZW5kRWxlbWVudCAoaGFuZGVyLG5vZGUpIHtcbiAgICBpZiAoIWhhbmRlci5jdXJyZW50RWxlbWVudCkge1xuICAgICAgICBoYW5kZXIuZG9jLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGhhbmRlci5jdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChub2RlKTtcbiAgICB9XG59Ly9hcHBlbmRDaGlsZCBhbmQgc2V0QXR0cmlidXRlTlMgYXJlIHByZWZvcm1hbmNlIGtleVxuXG5leHBvcnRzLl9fRE9NSGFuZGxlciA9IERPTUhhbmRsZXI7XG5leHBvcnRzLm5vcm1hbGl6ZUxpbmVFbmRpbmdzID0gbm9ybWFsaXplTGluZUVuZGluZ3M7XG5leHBvcnRzLkRPTVBhcnNlciA9IERPTVBhcnNlcjtcblxufSx7XCIuL2NvbnZlbnRpb25zXCI6NDEsXCIuL2RvbVwiOjQzLFwiLi9lbnRpdGllc1wiOjQ0LFwiLi9zYXhcIjo0Nn1dLDQzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBjb252ZW50aW9ucyA9IHJlcXVpcmUoXCIuL2NvbnZlbnRpb25zXCIpO1xuXG52YXIgZmluZCA9IGNvbnZlbnRpb25zLmZpbmQ7XG52YXIgTkFNRVNQQUNFID0gY29udmVudGlvbnMuTkFNRVNQQUNFO1xuXG4vKipcbiAqIEEgcHJlcmVxdWlzaXRlIGZvciBgW10uZmlsdGVyYCwgdG8gZHJvcCBlbGVtZW50cyB0aGF0IGFyZSBlbXB0eVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gbm90RW1wdHlTdHJpbmcgKGlucHV0KSB7XG5cdHJldHVybiBpbnB1dCAhPT0gJydcbn1cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3BsaXQtb24tYXNjaWktd2hpdGVzcGFjZVxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfSAoY2FuIGJlIGVtcHR5KVxuICovXG5mdW5jdGlvbiBzcGxpdE9uQVNDSUlXaGl0ZXNwYWNlKGlucHV0KSB7XG5cdC8vIFUrMDAwOSBUQUIsIFUrMDAwQSBMRiwgVSswMDBDIEZGLCBVKzAwMEQgQ1IsIFUrMDAyMCBTUEFDRVxuXHRyZXR1cm4gaW5wdXQgPyBpbnB1dC5zcGxpdCgvW1xcdFxcblxcZlxcciBdKy8pLmZpbHRlcihub3RFbXB0eVN0cmluZykgOiBbXVxufVxuXG4vKipcbiAqIEFkZHMgZWxlbWVudCBhcyBhIGtleSB0byBjdXJyZW50IGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgdW5kZWZpbmVkPn0gY3VycmVudFxuICogQHBhcmFtIHtzdHJpbmd9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgdW5kZWZpbmVkPn1cbiAqL1xuZnVuY3Rpb24gb3JkZXJlZFNldFJlZHVjZXIgKGN1cnJlbnQsIGVsZW1lbnQpIHtcblx0aWYgKCFjdXJyZW50Lmhhc093blByb3BlcnR5KGVsZW1lbnQpKSB7XG5cdFx0Y3VycmVudFtlbGVtZW50XSA9IHRydWU7XG5cdH1cblx0cmV0dXJuIGN1cnJlbnQ7XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jb3JkZXJlZC1zZXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICovXG5mdW5jdGlvbiB0b09yZGVyZWRTZXQoaW5wdXQpIHtcblx0aWYgKCFpbnB1dCkgcmV0dXJuIFtdO1xuXHR2YXIgbGlzdCA9IHNwbGl0T25BU0NJSVdoaXRlc3BhY2UoaW5wdXQpO1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobGlzdC5yZWR1Y2Uob3JkZXJlZFNldFJlZHVjZXIsIHt9KSlcbn1cblxuLyoqXG4gKiBVc2VzIGBsaXN0LmluZGV4T2ZgIHRvIGltcGxlbWVudCBzb21ldGhpbmcgbGlrZSBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCxcbiAqIHdoaWNoIHdlIGNhbiBub3QgcmVseSBvbiBiZWluZyBhdmFpbGFibGUuXG4gKlxuICogQHBhcmFtIHthbnlbXX0gbGlzdFxuICogQHJldHVybnMge2Z1bmN0aW9uKGFueSk6IGJvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMgKGxpc3QpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbGlzdCAmJiBsaXN0LmluZGV4T2YoZWxlbWVudCkgIT09IC0xO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNvcHkoc3JjLGRlc3Qpe1xuXHRmb3IodmFyIHAgaW4gc3JjKXtcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNyYywgcCkpIHtcblx0XHRcdGRlc3RbcF0gPSBzcmNbcF07XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuXlxcdytcXC5wcm90b3R5cGVcXC4oW19cXHddKylcXHMqPVxccyooKD86LipcXHtcXHMqP1tcXHJcXG5dW1xcc1xcU10qP159KXxcXFMuKj8oPz1bO1xcclxcbl0pKTs/XG5eXFx3K1xcLnByb3RvdHlwZVxcLihbX1xcd10rKVxccyo9XFxzKihcXFMuKj8oPz1bO1xcclxcbl0pKTs/XG4gKi9cbmZ1bmN0aW9uIF9leHRlbmRzKENsYXNzLFN1cGVyKXtcblx0dmFyIHB0ID0gQ2xhc3MucHJvdG90eXBlO1xuXHRpZighKHB0IGluc3RhbmNlb2YgU3VwZXIpKXtcblx0XHRmdW5jdGlvbiB0KCl7fTtcblx0XHR0LnByb3RvdHlwZSA9IFN1cGVyLnByb3RvdHlwZTtcblx0XHR0ID0gbmV3IHQoKTtcblx0XHRjb3B5KHB0LHQpO1xuXHRcdENsYXNzLnByb3RvdHlwZSA9IHB0ID0gdDtcblx0fVxuXHRpZihwdC5jb25zdHJ1Y3RvciAhPSBDbGFzcyl7XG5cdFx0aWYodHlwZW9mIENsYXNzICE9ICdmdW5jdGlvbicpe1xuXHRcdFx0Y29uc29sZS5lcnJvcihcInVua25vd24gQ2xhc3M6XCIrQ2xhc3MpXG5cdFx0fVxuXHRcdHB0LmNvbnN0cnVjdG9yID0gQ2xhc3Ncblx0fVxufVxuXG4vLyBOb2RlIFR5cGVzXG52YXIgTm9kZVR5cGUgPSB7fVxudmFyIEVMRU1FTlRfTk9ERSAgICAgICAgICAgICAgICA9IE5vZGVUeXBlLkVMRU1FTlRfTk9ERSAgICAgICAgICAgICAgICA9IDE7XG52YXIgQVRUUklCVVRFX05PREUgICAgICAgICAgICAgID0gTm9kZVR5cGUuQVRUUklCVVRFX05PREUgICAgICAgICAgICAgID0gMjtcbnZhciBURVhUX05PREUgICAgICAgICAgICAgICAgICAgPSBOb2RlVHlwZS5URVhUX05PREUgICAgICAgICAgICAgICAgICAgPSAzO1xudmFyIENEQVRBX1NFQ1RJT05fTk9ERSAgICAgICAgICA9IE5vZGVUeXBlLkNEQVRBX1NFQ1RJT05fTk9ERSAgICAgICAgICA9IDQ7XG52YXIgRU5USVRZX1JFRkVSRU5DRV9OT0RFICAgICAgID0gTm9kZVR5cGUuRU5USVRZX1JFRkVSRU5DRV9OT0RFICAgICAgID0gNTtcbnZhciBFTlRJVFlfTk9ERSAgICAgICAgICAgICAgICAgPSBOb2RlVHlwZS5FTlRJVFlfTk9ERSAgICAgICAgICAgICAgICAgPSA2O1xudmFyIFBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IE5vZGVUeXBlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSA9IDc7XG52YXIgQ09NTUVOVF9OT0RFICAgICAgICAgICAgICAgID0gTm9kZVR5cGUuQ09NTUVOVF9OT0RFICAgICAgICAgICAgICAgID0gODtcbnZhciBET0NVTUVOVF9OT0RFICAgICAgICAgICAgICAgPSBOb2RlVHlwZS5ET0NVTUVOVF9OT0RFICAgICAgICAgICAgICAgPSA5O1xudmFyIERPQ1VNRU5UX1RZUEVfTk9ERSAgICAgICAgICA9IE5vZGVUeXBlLkRPQ1VNRU5UX1RZUEVfTk9ERSAgICAgICAgICA9IDEwO1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgICAgICA9IE5vZGVUeXBlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgICAgICA9IDExO1xudmFyIE5PVEFUSU9OX05PREUgICAgICAgICAgICAgICA9IE5vZGVUeXBlLk5PVEFUSU9OX05PREUgICAgICAgICAgICAgICA9IDEyO1xuXG4vLyBFeGNlcHRpb25Db2RlXG52YXIgRXhjZXB0aW9uQ29kZSA9IHt9XG52YXIgRXhjZXB0aW9uTWVzc2FnZSA9IHt9O1xudmFyIElOREVYX1NJWkVfRVJSICAgICAgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSU5ERVhfU0laRV9FUlIgICAgICAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzFdPVwiSW5kZXggc2l6ZSBlcnJvclwiKSwxKTtcbnZhciBET01TVFJJTkdfU0laRV9FUlIgICAgICAgICAgPSBFeGNlcHRpb25Db2RlLkRPTVNUUklOR19TSVpFX0VSUiAgICAgICAgICA9ICgoRXhjZXB0aW9uTWVzc2FnZVsyXT1cIkRPTVN0cmluZyBzaXplIGVycm9yXCIpLDIpO1xudmFyIEhJRVJBUkNIWV9SRVFVRVNUX0VSUiAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSElFUkFSQ0hZX1JFUVVFU1RfRVJSICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzNdPVwiSGllcmFyY2h5IHJlcXVlc3QgZXJyb3JcIiksMyk7XG52YXIgV1JPTkdfRE9DVU1FTlRfRVJSICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5XUk9OR19ET0NVTUVOVF9FUlIgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbNF09XCJXcm9uZyBkb2N1bWVudFwiKSw0KTtcbnZhciBJTlZBTElEX0NIQVJBQ1RFUl9FUlIgICAgICAgPSBFeGNlcHRpb25Db2RlLklOVkFMSURfQ0hBUkFDVEVSX0VSUiAgICAgICA9ICgoRXhjZXB0aW9uTWVzc2FnZVs1XT1cIkludmFsaWQgY2hhcmFjdGVyXCIpLDUpO1xudmFyIE5PX0RBVEFfQUxMT1dFRF9FUlIgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuTk9fREFUQV9BTExPV0VEX0VSUiAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzZdPVwiTm8gZGF0YSBhbGxvd2VkXCIpLDYpO1xudmFyIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiA9IEV4Y2VwdGlvbkNvZGUuTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSID0gKChFeGNlcHRpb25NZXNzYWdlWzddPVwiTm8gbW9kaWZpY2F0aW9uIGFsbG93ZWRcIiksNyk7XG52YXIgTk9UX0ZPVU5EX0VSUiAgICAgICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5OT1RfRk9VTkRfRVJSICAgICAgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbOF09XCJOb3QgZm91bmRcIiksOCk7XG52YXIgTk9UX1NVUFBPUlRFRF9FUlIgICAgICAgICAgID0gRXhjZXB0aW9uQ29kZS5OT1RfU1VQUE9SVEVEX0VSUiAgICAgICAgICAgPSAoKEV4Y2VwdGlvbk1lc3NhZ2VbOV09XCJOb3Qgc3VwcG9ydGVkXCIpLDkpO1xudmFyIElOVVNFX0FUVFJJQlVURV9FUlIgICAgICAgICA9IEV4Y2VwdGlvbkNvZGUuSU5VU0VfQVRUUklCVVRFX0VSUiAgICAgICAgID0gKChFeGNlcHRpb25NZXNzYWdlWzEwXT1cIkF0dHJpYnV0ZSBpbiB1c2VcIiksMTApO1xuLy9sZXZlbDJcbnZhciBJTlZBTElEX1NUQVRFX0VSUiAgICAgICAgXHQ9IEV4Y2VwdGlvbkNvZGUuSU5WQUxJRF9TVEFURV9FUlIgICAgICAgIFx0PSAoKEV4Y2VwdGlvbk1lc3NhZ2VbMTFdPVwiSW52YWxpZCBzdGF0ZVwiKSwxMSk7XG52YXIgU1lOVEFYX0VSUiAgICAgICAgICAgICAgIFx0PSBFeGNlcHRpb25Db2RlLlNZTlRBWF9FUlIgICAgICAgICAgICAgICBcdD0gKChFeGNlcHRpb25NZXNzYWdlWzEyXT1cIlN5bnRheCBlcnJvclwiKSwxMik7XG52YXIgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSIFx0PSBFeGNlcHRpb25Db2RlLklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiBcdD0gKChFeGNlcHRpb25NZXNzYWdlWzEzXT1cIkludmFsaWQgbW9kaWZpY2F0aW9uXCIpLDEzKTtcbnZhciBOQU1FU1BBQ0VfRVJSICAgICAgICAgICAgXHQ9IEV4Y2VwdGlvbkNvZGUuTkFNRVNQQUNFX0VSUiAgICAgICAgICAgXHQ9ICgoRXhjZXB0aW9uTWVzc2FnZVsxNF09XCJJbnZhbGlkIG5hbWVzcGFjZVwiKSwxNCk7XG52YXIgSU5WQUxJRF9BQ0NFU1NfRVJSICAgICAgIFx0PSBFeGNlcHRpb25Db2RlLklOVkFMSURfQUNDRVNTX0VSUiAgICAgIFx0PSAoKEV4Y2VwdGlvbk1lc3NhZ2VbMTVdPVwiSW52YWxpZCBhY2Nlc3NcIiksMTUpO1xuXG4vKipcbiAqIERPTSBMZXZlbCAyXG4gKiBPYmplY3QgRE9NRXhjZXB0aW9uXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDAvUkVDLURPTS1MZXZlbC0yLUNvcmUtMjAwMDExMTMvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1ET00tTGV2ZWwtMS9lY21hLXNjcmlwdC1sYW5ndWFnZS1iaW5kaW5nLmh0bWxcbiAqL1xuZnVuY3Rpb24gRE9NRXhjZXB0aW9uKGNvZGUsIG1lc3NhZ2UpIHtcblx0aWYobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKXtcblx0XHR2YXIgZXJyb3IgPSBtZXNzYWdlO1xuXHR9ZWxzZXtcblx0XHRlcnJvciA9IHRoaXM7XG5cdFx0RXJyb3IuY2FsbCh0aGlzLCBFeGNlcHRpb25NZXNzYWdlW2NvZGVdKTtcblx0XHR0aGlzLm1lc3NhZ2UgPSBFeGNlcHRpb25NZXNzYWdlW2NvZGVdO1xuXHRcdGlmKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBET01FeGNlcHRpb24pO1xuXHR9XG5cdGVycm9yLmNvZGUgPSBjb2RlO1xuXHRpZihtZXNzYWdlKSB0aGlzLm1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2UgKyBcIjogXCIgKyBtZXNzYWdlO1xuXHRyZXR1cm4gZXJyb3I7XG59O1xuRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbmNvcHkoRXhjZXB0aW9uQ29kZSxET01FeGNlcHRpb24pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2NvcmUuaHRtbCNJRC01MzYyOTcxNzdcbiAqIFRoZSBOb2RlTGlzdCBpbnRlcmZhY2UgcHJvdmlkZXMgdGhlIGFic3RyYWN0aW9uIG9mIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBub2Rlcywgd2l0aG91dCBkZWZpbmluZyBvciBjb25zdHJhaW5pbmcgaG93IHRoaXMgY29sbGVjdGlvbiBpcyBpbXBsZW1lbnRlZC4gTm9kZUxpc3Qgb2JqZWN0cyBpbiB0aGUgRE9NIGFyZSBsaXZlLlxuICogVGhlIGl0ZW1zIGluIHRoZSBOb2RlTGlzdCBhcmUgYWNjZXNzaWJsZSB2aWEgYW4gaW50ZWdyYWwgaW5kZXgsIHN0YXJ0aW5nIGZyb20gMC5cbiAqL1xuZnVuY3Rpb24gTm9kZUxpc3QoKSB7XG59O1xuTm9kZUxpc3QucHJvdG90eXBlID0ge1xuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgbGlzdC4gVGhlIHJhbmdlIG9mIHZhbGlkIGNoaWxkIG5vZGUgaW5kaWNlcyBpcyAwIHRvIGxlbmd0aC0xIGluY2x1c2l2ZS5cblx0ICogQHN0YW5kYXJkIGxldmVsMVxuXHQgKi9cblx0bGVuZ3RoOjAsXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbmRleHRoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24uIElmIGluZGV4IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBsaXN0LCB0aGlzIHJldHVybnMgbnVsbC5cblx0ICogQHN0YW5kYXJkIGxldmVsMVxuXHQgKiBAcGFyYW0gaW5kZXggIHVuc2lnbmVkIGxvbmdcblx0ICogICBJbmRleCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuXHQgKiBAcmV0dXJuIE5vZGVcblx0ICogXHRUaGUgbm9kZSBhdCB0aGUgaW5kZXh0aCBwb3NpdGlvbiBpbiB0aGUgTm9kZUxpc3QsIG9yIG51bGwgaWYgdGhhdCBpcyBub3QgYSB2YWxpZCBpbmRleC5cblx0ICovXG5cdGl0ZW06IGZ1bmN0aW9uKGluZGV4KSB7XG5cdFx0cmV0dXJuIHRoaXNbaW5kZXhdIHx8IG51bGw7XG5cdH0sXG5cdHRvU3RyaW5nOmZ1bmN0aW9uKGlzSFRNTCxub2RlRmlsdGVyKXtcblx0XHRmb3IodmFyIGJ1ZiA9IFtdLCBpID0gMDtpPHRoaXMubGVuZ3RoO2krKyl7XG5cdFx0XHRzZXJpYWxpemVUb1N0cmluZyh0aGlzW2ldLGJ1Zixpc0hUTUwsbm9kZUZpbHRlcik7XG5cdFx0fVxuXHRcdHJldHVybiBidWYuam9pbignJyk7XG5cdH0sXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9uIChOb2RlKTpib29sZWFufSBwcmVkaWNhdGVcblx0ICogQHJldHVybnMge05vZGVbXX1cblx0ICovXG5cdGZpbHRlcjogZnVuY3Rpb24gKHByZWRpY2F0ZSkge1xuXHRcdHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodGhpcywgcHJlZGljYXRlKTtcblx0fSxcblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7Tm9kZX0gaXRlbVxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHQgKi9cblx0aW5kZXhPZjogZnVuY3Rpb24gKGl0ZW0pIHtcblx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCh0aGlzLCBpdGVtKTtcblx0fSxcbn07XG5cbmZ1bmN0aW9uIExpdmVOb2RlTGlzdChub2RlLHJlZnJlc2gpe1xuXHR0aGlzLl9ub2RlID0gbm9kZTtcblx0dGhpcy5fcmVmcmVzaCA9IHJlZnJlc2hcblx0X3VwZGF0ZUxpdmVMaXN0KHRoaXMpO1xufVxuZnVuY3Rpb24gX3VwZGF0ZUxpdmVMaXN0KGxpc3Qpe1xuXHR2YXIgaW5jID0gbGlzdC5fbm9kZS5faW5jIHx8IGxpc3QuX25vZGUub3duZXJEb2N1bWVudC5faW5jO1xuXHRpZihsaXN0Ll9pbmMgIT0gaW5jKXtcblx0XHR2YXIgbHMgPSBsaXN0Ll9yZWZyZXNoKGxpc3QuX25vZGUpO1xuXHRcdC8vY29uc29sZS5sb2cobHMubGVuZ3RoKVxuXHRcdF9fc2V0X18obGlzdCwnbGVuZ3RoJyxscy5sZW5ndGgpO1xuXHRcdGNvcHkobHMsbGlzdCk7XG5cdFx0bGlzdC5faW5jID0gaW5jO1xuXHR9XG59XG5MaXZlTm9kZUxpc3QucHJvdG90eXBlLml0ZW0gPSBmdW5jdGlvbihpKXtcblx0X3VwZGF0ZUxpdmVMaXN0KHRoaXMpO1xuXHRyZXR1cm4gdGhpc1tpXTtcbn1cblxuX2V4dGVuZHMoTGl2ZU5vZGVMaXN0LE5vZGVMaXN0KTtcblxuLyoqXG4gKiBPYmplY3RzIGltcGxlbWVudGluZyB0aGUgTmFtZWROb2RlTWFwIGludGVyZmFjZSBhcmUgdXNlZFxuICogdG8gcmVwcmVzZW50IGNvbGxlY3Rpb25zIG9mIG5vZGVzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IG5hbWUuXG4gKiBOb3RlIHRoYXQgTmFtZWROb2RlTWFwIGRvZXMgbm90IGluaGVyaXQgZnJvbSBOb2RlTGlzdDtcbiAqIE5hbWVkTm9kZU1hcHMgYXJlIG5vdCBtYWludGFpbmVkIGluIGFueSBwYXJ0aWN1bGFyIG9yZGVyLlxuICogT2JqZWN0cyBjb250YWluZWQgaW4gYW4gb2JqZWN0IGltcGxlbWVudGluZyBOYW1lZE5vZGVNYXAgbWF5IGFsc28gYmUgYWNjZXNzZWQgYnkgYW4gb3JkaW5hbCBpbmRleCxcbiAqIGJ1dCB0aGlzIGlzIHNpbXBseSB0byBhbGxvdyBjb252ZW5pZW50IGVudW1lcmF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiBhIE5hbWVkTm9kZU1hcCxcbiAqIGFuZCBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBET00gc3BlY2lmaWVzIGFuIG9yZGVyIHRvIHRoZXNlIE5vZGVzLlxuICogTmFtZWROb2RlTWFwIG9iamVjdHMgaW4gdGhlIERPTSBhcmUgbGl2ZS5cbiAqIHVzZWQgZm9yIGF0dHJpYnV0ZXMgb3IgRG9jdW1lbnRUeXBlIGVudGl0aWVzXG4gKi9cbmZ1bmN0aW9uIE5hbWVkTm9kZU1hcCgpIHtcbn07XG5cbmZ1bmN0aW9uIF9maW5kTm9kZUluZGV4KGxpc3Qsbm9kZSl7XG5cdHZhciBpID0gbGlzdC5sZW5ndGg7XG5cdHdoaWxlKGktLSl7XG5cdFx0aWYobGlzdFtpXSA9PT0gbm9kZSl7cmV0dXJuIGl9XG5cdH1cbn1cblxuZnVuY3Rpb24gX2FkZE5hbWVkTm9kZShlbCxsaXN0LG5ld0F0dHIsb2xkQXR0cil7XG5cdGlmKG9sZEF0dHIpe1xuXHRcdGxpc3RbX2ZpbmROb2RlSW5kZXgobGlzdCxvbGRBdHRyKV0gPSBuZXdBdHRyO1xuXHR9ZWxzZXtcblx0XHRsaXN0W2xpc3QubGVuZ3RoKytdID0gbmV3QXR0cjtcblx0fVxuXHRpZihlbCl7XG5cdFx0bmV3QXR0ci5vd25lckVsZW1lbnQgPSBlbDtcblx0XHR2YXIgZG9jID0gZWwub3duZXJEb2N1bWVudDtcblx0XHRpZihkb2Mpe1xuXHRcdFx0b2xkQXR0ciAmJiBfb25SZW1vdmVBdHRyaWJ1dGUoZG9jLGVsLG9sZEF0dHIpO1xuXHRcdFx0X29uQWRkQXR0cmlidXRlKGRvYyxlbCxuZXdBdHRyKTtcblx0XHR9XG5cdH1cbn1cbmZ1bmN0aW9uIF9yZW1vdmVOYW1lZE5vZGUoZWwsbGlzdCxhdHRyKXtcblx0Ly9jb25zb2xlLmxvZygncmVtb3ZlIGF0dHI6JythdHRyKVxuXHR2YXIgaSA9IF9maW5kTm9kZUluZGV4KGxpc3QsYXR0cik7XG5cdGlmKGk+PTApe1xuXHRcdHZhciBsYXN0SW5kZXggPSBsaXN0Lmxlbmd0aC0xXG5cdFx0d2hpbGUoaTxsYXN0SW5kZXgpe1xuXHRcdFx0bGlzdFtpXSA9IGxpc3RbKytpXVxuXHRcdH1cblx0XHRsaXN0Lmxlbmd0aCA9IGxhc3RJbmRleDtcblx0XHRpZihlbCl7XG5cdFx0XHR2YXIgZG9jID0gZWwub3duZXJEb2N1bWVudDtcblx0XHRcdGlmKGRvYyl7XG5cdFx0XHRcdF9vblJlbW92ZUF0dHJpYnV0ZShkb2MsZWwsYXR0cik7XG5cdFx0XHRcdGF0dHIub3duZXJFbGVtZW50ID0gbnVsbDtcblx0XHRcdH1cblx0XHR9XG5cdH1lbHNle1xuXHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oTk9UX0ZPVU5EX0VSUixuZXcgRXJyb3IoZWwudGFnTmFtZSsnQCcrYXR0cikpXG5cdH1cbn1cbk5hbWVkTm9kZU1hcC5wcm90b3R5cGUgPSB7XG5cdGxlbmd0aDowLFxuXHRpdGVtOk5vZGVMaXN0LnByb3RvdHlwZS5pdGVtLFxuXHRnZXROYW1lZEl0ZW06IGZ1bmN0aW9uKGtleSkge1xuLy9cdFx0aWYoa2V5LmluZGV4T2YoJzonKT4wIHx8IGtleSA9PSAneG1sbnMnKXtcbi8vXHRcdFx0cmV0dXJuIG51bGw7XG4vL1x0XHR9XG5cdFx0Ly9jb25zb2xlLmxvZygpXG5cdFx0dmFyIGkgPSB0aGlzLmxlbmd0aDtcblx0XHR3aGlsZShpLS0pe1xuXHRcdFx0dmFyIGF0dHIgPSB0aGlzW2ldO1xuXHRcdFx0Ly9jb25zb2xlLmxvZyhhdHRyLm5vZGVOYW1lLGtleSlcblx0XHRcdGlmKGF0dHIubm9kZU5hbWUgPT0ga2V5KXtcblx0XHRcdFx0cmV0dXJuIGF0dHI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRzZXROYW1lZEl0ZW06IGZ1bmN0aW9uKGF0dHIpIHtcblx0XHR2YXIgZWwgPSBhdHRyLm93bmVyRWxlbWVudDtcblx0XHRpZihlbCAmJiBlbCE9dGhpcy5fb3duZXJFbGVtZW50KXtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oSU5VU0VfQVRUUklCVVRFX0VSUik7XG5cdFx0fVxuXHRcdHZhciBvbGRBdHRyID0gdGhpcy5nZXROYW1lZEl0ZW0oYXR0ci5ub2RlTmFtZSk7XG5cdFx0X2FkZE5hbWVkTm9kZSh0aGlzLl9vd25lckVsZW1lbnQsdGhpcyxhdHRyLG9sZEF0dHIpO1xuXHRcdHJldHVybiBvbGRBdHRyO1xuXHR9LFxuXHQvKiByZXR1cm5zIE5vZGUgKi9cblx0c2V0TmFtZWRJdGVtTlM6IGZ1bmN0aW9uKGF0dHIpIHsvLyByYWlzZXM6IFdST05HX0RPQ1VNRU5UX0VSUixOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIsSU5VU0VfQVRUUklCVVRFX0VSUlxuXHRcdHZhciBlbCA9IGF0dHIub3duZXJFbGVtZW50LCBvbGRBdHRyO1xuXHRcdGlmKGVsICYmIGVsIT10aGlzLl9vd25lckVsZW1lbnQpe1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihJTlVTRV9BVFRSSUJVVEVfRVJSKTtcblx0XHR9XG5cdFx0b2xkQXR0ciA9IHRoaXMuZ2V0TmFtZWRJdGVtTlMoYXR0ci5uYW1lc3BhY2VVUkksYXR0ci5sb2NhbE5hbWUpO1xuXHRcdF9hZGROYW1lZE5vZGUodGhpcy5fb3duZXJFbGVtZW50LHRoaXMsYXR0cixvbGRBdHRyKTtcblx0XHRyZXR1cm4gb2xkQXR0cjtcblx0fSxcblxuXHQvKiByZXR1cm5zIE5vZGUgKi9cblx0cmVtb3ZlTmFtZWRJdGVtOiBmdW5jdGlvbihrZXkpIHtcblx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0TmFtZWRJdGVtKGtleSk7XG5cdFx0X3JlbW92ZU5hbWVkTm9kZSh0aGlzLl9vd25lckVsZW1lbnQsdGhpcyxhdHRyKTtcblx0XHRyZXR1cm4gYXR0cjtcblxuXG5cdH0sLy8gcmFpc2VzOiBOT1RfRk9VTkRfRVJSLE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUlxuXG5cdC8vZm9yIGxldmVsMlxuXHRyZW1vdmVOYW1lZEl0ZW1OUzpmdW5jdGlvbihuYW1lc3BhY2VVUkksbG9jYWxOYW1lKXtcblx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0TmFtZWRJdGVtTlMobmFtZXNwYWNlVVJJLGxvY2FsTmFtZSk7XG5cdFx0X3JlbW92ZU5hbWVkTm9kZSh0aGlzLl9vd25lckVsZW1lbnQsdGhpcyxhdHRyKTtcblx0XHRyZXR1cm4gYXR0cjtcblx0fSxcblx0Z2V0TmFtZWRJdGVtTlM6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG5cdFx0dmFyIGkgPSB0aGlzLmxlbmd0aDtcblx0XHR3aGlsZShpLS0pe1xuXHRcdFx0dmFyIG5vZGUgPSB0aGlzW2ldO1xuXHRcdFx0aWYobm9kZS5sb2NhbE5hbWUgPT0gbG9jYWxOYW1lICYmIG5vZGUubmFtZXNwYWNlVVJJID09IG5hbWVzcGFjZVVSSSl7XG5cdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcblxuLyoqXG4gKiBUaGUgRE9NSW1wbGVtZW50YXRpb24gaW50ZXJmYWNlIHJlcHJlc2VudHMgYW4gb2JqZWN0IHByb3ZpZGluZyBtZXRob2RzXG4gKiB3aGljaCBhcmUgbm90IGRlcGVuZGVudCBvbiBhbnkgcGFydGljdWxhciBkb2N1bWVudC5cbiAqIFN1Y2ggYW4gb2JqZWN0IGlzIHJldHVybmVkIGJ5IHRoZSBgRG9jdW1lbnQuaW1wbGVtZW50YXRpb25gIHByb3BlcnR5LlxuICpcbiAqIF9fVGhlIGluZGl2aWR1YWwgbWV0aG9kcyBkZXNjcmliZSB0aGUgZGlmZmVyZW5jZXMgY29tcGFyZWQgdG8gdGhlIHNwZWNzLl9fXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKlxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NSW1wbGVtZW50YXRpb24gTUROXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9SRUMtRE9NLUxldmVsLTEvbGV2ZWwtb25lLWNvcmUuaHRtbCNJRC0xMDIxNjE0OTAgRE9NIExldmVsIDEgQ29yZSAoSW5pdGlhbClcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0yLUNvcmUvY29yZS5odG1sI0lELTEwMjE2MTQ5MCBET00gTGV2ZWwgMiBDb3JlXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2NvcmUuaHRtbCNJRC0xMDIxNjE0OTAgRE9NIExldmVsIDMgQ29yZVxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbWltcGxlbWVudGF0aW9uIERPTSBMaXZpbmcgU3RhbmRhcmRcbiAqL1xuZnVuY3Rpb24gRE9NSW1wbGVtZW50YXRpb24oKSB7XG59XG5cbkRPTUltcGxlbWVudGF0aW9uLnByb3RvdHlwZSA9IHtcblx0LyoqXG5cdCAqIFRoZSBET01JbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCkgbWV0aG9kIHJldHVybnMgYSBCb29sZWFuIGZsYWcgaW5kaWNhdGluZyBpZiBhIGdpdmVuIGZlYXR1cmUgaXMgc3VwcG9ydGVkLlxuXHQgKiBUaGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBmYWlybHkgZGl2ZXJnZWQgaW4gd2hhdCBraW5kIG9mIGZlYXR1cmVzIHdlcmUgcmVwb3J0ZWQuXG5cdCAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc3BlYyBzZXR0bGVkIHRvIGZvcmNlIHRoaXMgbWV0aG9kIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZSwgd2hlcmUgdGhlIGZ1bmN0aW9uYWxpdHkgd2FzIGFjY3VyYXRlIGFuZCBpbiB1c2UuXG5cdCAqXG5cdCAqIEBkZXByZWNhdGVkIEl0IGlzIGRlcHJlY2F0ZWQgYW5kIG1vZGVybiBicm93c2VycyByZXR1cm4gdHJ1ZSBpbiBhbGwgY2FzZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmZWF0dXJlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbdmVyc2lvbl1cblx0ICogQHJldHVybnMge2Jvb2xlYW59IGFsd2F5cyB0cnVlXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUltcGxlbWVudGF0aW9uL2hhc0ZlYXR1cmUgTUROXG5cdCAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL1JFQy1ET00tTGV2ZWwtMS9sZXZlbC1vbmUtY29yZS5odG1sI0lELTVDRUQ5NEQ3IERPTSBMZXZlbCAxIENvcmVcblx0ICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb21pbXBsZW1lbnRhdGlvbi1oYXNmZWF0dXJlIERPTSBMaXZpbmcgU3RhbmRhcmRcblx0ICovXG5cdGhhc0ZlYXR1cmU6IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBYTUwgRG9jdW1lbnQgb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB3aXRoIGl0cyBkb2N1bWVudCBlbGVtZW50LlxuXHQgKlxuXHQgKiBfX0l0IGJlaGF2ZXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gdGhlIGRlc2NyaXB0aW9uIGluIHRoZSBsaXZpbmcgc3RhbmRhcmRfXzpcblx0ICogLSBUaGVyZSBpcyBubyBpbnRlcmZhY2UvY2xhc3MgYFhNTERvY3VtZW50YCwgaXQgcmV0dXJucyBhIGBEb2N1bWVudGAgaW5zdGFuY2UuXG5cdCAqIC0gYGNvbnRlbnRUeXBlYCwgYGVuY29kaW5nYCwgYG1vZGVgLCBgb3JpZ2luYCwgYHVybGAgZmllbGRzIGFyZSBjdXJyZW50bHkgbm90IGRlY2xhcmVkLlxuXHQgKiAtIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IHZhbGlkYXRpbmcgbmFtZXMgb3IgcXVhbGlmaWVkIG5hbWVzXG5cdCAqICAgKHdoZW4gcGFyc2luZyBYTUwgc3RyaW5ncywgdGhlIFNBWCBwYXJzZXIgdGFrZXMgY2FyZSBvZiB0aGF0KVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBuYW1lc3BhY2VVUklcblx0ICogQHBhcmFtIHtzdHJpbmd9IHF1YWxpZmllZE5hbWVcblx0ICogQHBhcmFtIHtEb2N1bWVudFR5cGU9bnVsbH0gZG9jdHlwZVxuXHQgKiBAcmV0dXJucyB7RG9jdW1lbnR9XG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RPTUltcGxlbWVudGF0aW9uL2NyZWF0ZURvY3VtZW50IE1ETlxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1Db3JlL2NvcmUuaHRtbCNMZXZlbC0yLUNvcmUtRE9NLWNyZWF0ZURvY3VtZW50IERPTSBMZXZlbCAyIENvcmUgKGluaXRpYWwpXG5cdCAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tZG9taW1wbGVtZW50YXRpb24tY3JlYXRlZG9jdW1lbnQgIERPTSBMZXZlbCAyIENvcmVcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3ZhbGlkYXRlLWFuZC1leHRyYWN0IERPTTogVmFsaWRhdGUgYW5kIGV4dHJhY3Rcblx0ICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveG1sLyNOVC1OYW1lU3RhcnRDaGFyIFhNTCBTcGVjOiBOYW1lc1xuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMvI25zLXF1YWxuYW1lcyBYTUwgTmFtZXNwYWNlczogUXVhbGlmaWVkIG5hbWVzXG5cdCAqL1xuXHRjcmVhdGVEb2N1bWVudDogZnVuY3Rpb24obmFtZXNwYWNlVVJJLCAgcXVhbGlmaWVkTmFtZSwgZG9jdHlwZSl7XG5cdFx0dmFyIGRvYyA9IG5ldyBEb2N1bWVudCgpO1xuXHRcdGRvYy5pbXBsZW1lbnRhdGlvbiA9IHRoaXM7XG5cdFx0ZG9jLmNoaWxkTm9kZXMgPSBuZXcgTm9kZUxpc3QoKTtcblx0XHRkb2MuZG9jdHlwZSA9IGRvY3R5cGUgfHwgbnVsbDtcblx0XHRpZiAoZG9jdHlwZSl7XG5cdFx0XHRkb2MuYXBwZW5kQ2hpbGQoZG9jdHlwZSk7XG5cdFx0fVxuXHRcdGlmIChxdWFsaWZpZWROYW1lKXtcblx0XHRcdHZhciByb290ID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpO1xuXHRcdFx0ZG9jLmFwcGVuZENoaWxkKHJvb3QpO1xuXHRcdH1cblx0XHRyZXR1cm4gZG9jO1xuXHR9LFxuXHQvKipcblx0ICogUmV0dXJucyBhIGRvY3R5cGUsIHdpdGggdGhlIGdpdmVuIGBxdWFsaWZpZWROYW1lYCwgYHB1YmxpY0lkYCwgYW5kIGBzeXN0ZW1JZGAuXG5cdCAqXG5cdCAqIF9fVGhpcyBiZWhhdmlvciBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGUgaW4gdGhlIHNwZWNzX186XG5cdCAqIC0gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmFsaWRhdGluZyBuYW1lcyBvciBxdWFsaWZpZWQgbmFtZXNcblx0ICogICAod2hlbiBwYXJzaW5nIFhNTCBzdHJpbmdzLCB0aGUgU0FYIHBhcnNlciB0YWtlcyBjYXJlIG9mIHRoYXQpXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBxdWFsaWZpZWROYW1lXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHVibGljSWRdXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc3lzdGVtSWRdXG5cdCAqIEByZXR1cm5zIHtEb2N1bWVudFR5cGV9IHdoaWNoIGNhbiBlaXRoZXIgYmUgdXNlZCB3aXRoIGBET01JbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudGAgdXBvbiBkb2N1bWVudCBjcmVhdGlvblxuXHQgKiBcdFx0XHRcdCAgb3IgY2FuIGJlIHB1dCBpbnRvIHRoZSBkb2N1bWVudCB2aWEgbWV0aG9kcyBsaWtlIGBOb2RlLmluc2VydEJlZm9yZSgpYCBvciBgTm9kZS5yZXBsYWNlQ2hpbGQoKWBcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRE9NSW1wbGVtZW50YXRpb24vY3JlYXRlRG9jdW1lbnRUeXBlIE1ETlxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMi1Db3JlL2NvcmUuaHRtbCNMZXZlbC0yLUNvcmUtRE9NLWNyZWF0ZURvY1R5cGUgRE9NIExldmVsIDIgQ29yZVxuXHQgKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWRvbWltcGxlbWVudGF0aW9uLWNyZWF0ZWRvY3VtZW50dHlwZSBET00gTGl2aW5nIFN0YW5kYXJkXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyN2YWxpZGF0ZS1hbmQtZXh0cmFjdCBET006IFZhbGlkYXRlIGFuZCBleHRyYWN0XG5cdCAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtTmFtZVN0YXJ0Q2hhciBYTUwgU3BlYzogTmFtZXNcblx0ICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveG1sLW5hbWVzLyNucy1xdWFsbmFtZXMgWE1MIE5hbWVzcGFjZXM6IFF1YWxpZmllZCBuYW1lc1xuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRUeXBlOiBmdW5jdGlvbihxdWFsaWZpZWROYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpe1xuXHRcdHZhciBub2RlID0gbmV3IERvY3VtZW50VHlwZSgpO1xuXHRcdG5vZGUubmFtZSA9IHF1YWxpZmllZE5hbWU7XG5cdFx0bm9kZS5ub2RlTmFtZSA9IHF1YWxpZmllZE5hbWU7XG5cdFx0bm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkIHx8ICcnO1xuXHRcdG5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZCB8fCAnJztcblxuXHRcdHJldHVybiBub2RlO1xuXHR9XG59O1xuXG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAwL1JFQy1ET00tTGV2ZWwtMi1Db3JlLTIwMDAxMTEzL2NvcmUuaHRtbCNJRC0xOTUwNjQxMjQ3XG4gKi9cblxuZnVuY3Rpb24gTm9kZSgpIHtcbn07XG5cbk5vZGUucHJvdG90eXBlID0ge1xuXHRmaXJzdENoaWxkIDogbnVsbCxcblx0bGFzdENoaWxkIDogbnVsbCxcblx0cHJldmlvdXNTaWJsaW5nIDogbnVsbCxcblx0bmV4dFNpYmxpbmcgOiBudWxsLFxuXHRhdHRyaWJ1dGVzIDogbnVsbCxcblx0cGFyZW50Tm9kZSA6IG51bGwsXG5cdGNoaWxkTm9kZXMgOiBudWxsLFxuXHRvd25lckRvY3VtZW50IDogbnVsbCxcblx0bm9kZVZhbHVlIDogbnVsbCxcblx0bmFtZXNwYWNlVVJJIDogbnVsbCxcblx0cHJlZml4IDogbnVsbCxcblx0bG9jYWxOYW1lIDogbnVsbCxcblx0Ly8gTW9kaWZpZWQgaW4gRE9NIExldmVsIDI6XG5cdGluc2VydEJlZm9yZTpmdW5jdGlvbihuZXdDaGlsZCwgcmVmQ2hpbGQpey8vcmFpc2VzXG5cdFx0cmV0dXJuIF9pbnNlcnRCZWZvcmUodGhpcyxuZXdDaGlsZCxyZWZDaGlsZCk7XG5cdH0sXG5cdHJlcGxhY2VDaGlsZDpmdW5jdGlvbihuZXdDaGlsZCwgb2xkQ2hpbGQpey8vcmFpc2VzXG5cdFx0X2luc2VydEJlZm9yZSh0aGlzLCBuZXdDaGlsZCxvbGRDaGlsZCwgYXNzZXJ0UHJlUmVwbGFjZW1lbnRWYWxpZGl0eUluRG9jdW1lbnQpO1xuXHRcdGlmKG9sZENoaWxkKXtcblx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQob2xkQ2hpbGQpO1xuXHRcdH1cblx0fSxcblx0cmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24ob2xkQ2hpbGQpe1xuXHRcdHJldHVybiBfcmVtb3ZlQ2hpbGQodGhpcyxvbGRDaGlsZCk7XG5cdH0sXG5cdGFwcGVuZENoaWxkOmZ1bmN0aW9uKG5ld0NoaWxkKXtcblx0XHRyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsbnVsbCk7XG5cdH0sXG5cdGhhc0NoaWxkTm9kZXM6ZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4gdGhpcy5maXJzdENoaWxkICE9IG51bGw7XG5cdH0sXG5cdGNsb25lTm9kZTpmdW5jdGlvbihkZWVwKXtcblx0XHRyZXR1cm4gY2xvbmVOb2RlKHRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0aGlzLGRlZXApO1xuXHR9LFxuXHQvLyBNb2RpZmllZCBpbiBET00gTGV2ZWwgMjpcblx0bm9ybWFsaXplOmZ1bmN0aW9uKCl7XG5cdFx0dmFyIGNoaWxkID0gdGhpcy5maXJzdENoaWxkO1xuXHRcdHdoaWxlKGNoaWxkKXtcblx0XHRcdHZhciBuZXh0ID0gY2hpbGQubmV4dFNpYmxpbmc7XG5cdFx0XHRpZihuZXh0ICYmIG5leHQubm9kZVR5cGUgPT0gVEVYVF9OT0RFICYmIGNoaWxkLm5vZGVUeXBlID09IFRFWFRfTk9ERSl7XG5cdFx0XHRcdHRoaXMucmVtb3ZlQ2hpbGQobmV4dCk7XG5cdFx0XHRcdGNoaWxkLmFwcGVuZERhdGEobmV4dC5kYXRhKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRjaGlsZC5ub3JtYWxpemUoKTtcblx0XHRcdFx0Y2hpbGQgPSBuZXh0O1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcbiAgXHQvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOlxuXHRpc1N1cHBvcnRlZDpmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKXtcblx0XHRyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoZmVhdHVyZSx2ZXJzaW9uKTtcblx0fSxcbiAgICAvLyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCAyOlxuICAgIGhhc0F0dHJpYnV0ZXM6ZnVuY3Rpb24oKXtcbiAgICBcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMubGVuZ3RoPjA7XG4gICAgfSxcblx0LyoqXG5cdCAqIExvb2sgdXAgdGhlIHByZWZpeCBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UgVVJJLCBzdGFydGluZyBmcm9tIHRoaXMgbm9kZS5cblx0ICogKipUaGUgZGVmYXVsdCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zIGFyZSBpZ25vcmVkIGJ5IHRoaXMgbWV0aG9kLioqXG5cdCAqIFNlZSBOYW1lc3BhY2UgUHJlZml4IExvb2t1cCBmb3IgZGV0YWlscyBvbiB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgdGhpcyBtZXRob2QuXG5cdCAqXG5cdCAqIF9Ob3RlOiBUaGUgaW1wbGVtZW50YXRpb24gc2VlbXMgdG8gYmUgaW5jb21wbGV0ZSB3aGVuIGNvbXBhcmVkIHRvIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGluIHRoZSBzcGVjcy5fXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbH0gbmFtZXNwYWNlVVJJXG5cdCAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfVxuXHQgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1Db3JlL2NvcmUuaHRtbCNOb2RlMy1sb29rdXBOYW1lc3BhY2VQcmVmaXhcblx0ICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtQ29yZS9uYW1lc3BhY2VzLWFsZ29yaXRobXMuaHRtbCNsb29rdXBOYW1lc3BhY2VQcmVmaXhBbGdvXG5cdCAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tbm9kZS1sb29rdXBwcmVmaXhcblx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20veG1sZG9tL3htbGRvbS9pc3N1ZXMvMzIyXG5cdCAqL1xuICAgIGxvb2t1cFByZWZpeDpmdW5jdGlvbihuYW1lc3BhY2VVUkkpe1xuICAgIFx0dmFyIGVsID0gdGhpcztcbiAgICBcdHdoaWxlKGVsKXtcbiAgICBcdFx0dmFyIG1hcCA9IGVsLl9uc01hcDtcbiAgICBcdFx0Ly9jb25zb2xlLmRpcihtYXApXG4gICAgXHRcdGlmKG1hcCl7XG4gICAgXHRcdFx0Zm9yKHZhciBuIGluIG1hcCl7XG5cdFx0XHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgbikgJiYgbWFwW25dID09PSBuYW1lc3BhY2VVUkkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG47XG5cdFx0XHRcdFx0XHR9XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9XG4gICAgXHRcdGVsID0gZWwubm9kZVR5cGUgPT0gQVRUUklCVVRFX05PREU/ZWwub3duZXJEb2N1bWVudCA6IGVsLnBhcmVudE5vZGU7XG4gICAgXHR9XG4gICAgXHRyZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6XG4gICAgbG9va3VwTmFtZXNwYWNlVVJJOmZ1bmN0aW9uKHByZWZpeCl7XG4gICAgXHR2YXIgZWwgPSB0aGlzO1xuICAgIFx0d2hpbGUoZWwpe1xuICAgIFx0XHR2YXIgbWFwID0gZWwuX25zTWFwO1xuICAgIFx0XHQvL2NvbnNvbGUuZGlyKG1hcClcbiAgICBcdFx0aWYobWFwKXtcbiAgICBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobWFwLCBwcmVmaXgpKXtcbiAgICBcdFx0XHRcdHJldHVybiBtYXBbcHJlZml4XSA7XG4gICAgXHRcdFx0fVxuICAgIFx0XHR9XG4gICAgXHRcdGVsID0gZWwubm9kZVR5cGUgPT0gQVRUUklCVVRFX05PREU/ZWwub3duZXJEb2N1bWVudCA6IGVsLnBhcmVudE5vZGU7XG4gICAgXHR9XG4gICAgXHRyZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDM6XG4gICAgaXNEZWZhdWx0TmFtZXNwYWNlOmZ1bmN0aW9uKG5hbWVzcGFjZVVSSSl7XG4gICAgXHR2YXIgcHJlZml4ID0gdGhpcy5sb29rdXBQcmVmaXgobmFtZXNwYWNlVVJJKTtcbiAgICBcdHJldHVybiBwcmVmaXggPT0gbnVsbDtcbiAgICB9XG59O1xuXG5cbmZ1bmN0aW9uIF94bWxFbmNvZGVyKGMpe1xuXHRyZXR1cm4gYyA9PSAnPCcgJiYgJyZsdDsnIHx8XG4gICAgICAgICBjID09ICc+JyAmJiAnJmd0OycgfHxcbiAgICAgICAgIGMgPT0gJyYnICYmICcmYW1wOycgfHxcbiAgICAgICAgIGMgPT0gJ1wiJyAmJiAnJnF1b3Q7JyB8fFxuICAgICAgICAgJyYjJytjLmNoYXJDb2RlQXQoKSsnOydcbn1cblxuXG5jb3B5KE5vZGVUeXBlLE5vZGUpO1xuY29weShOb2RlVHlwZSxOb2RlLnByb3RvdHlwZSk7XG5cbi8qKlxuICogQHBhcmFtIGNhbGxiYWNrIHJldHVybiB0cnVlIGZvciBjb250aW51ZSxmYWxzZSBmb3IgYnJlYWtcbiAqIEByZXR1cm4gYm9vbGVhbiB0cnVlOiBicmVhayB2aXNpdDtcbiAqL1xuZnVuY3Rpb24gX3Zpc2l0Tm9kZShub2RlLGNhbGxiYWNrKXtcblx0aWYoY2FsbGJhY2sobm9kZSkpe1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmKG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQpe1xuXHRcdGRve1xuXHRcdFx0aWYoX3Zpc2l0Tm9kZShub2RlLGNhbGxiYWNrKSl7cmV0dXJuIHRydWV9XG4gICAgICAgIH13aGlsZShub2RlPW5vZGUubmV4dFNpYmxpbmcpXG4gICAgfVxufVxuXG5cblxuZnVuY3Rpb24gRG9jdW1lbnQoKXtcblx0dGhpcy5vd25lckRvY3VtZW50ID0gdGhpcztcbn1cblxuZnVuY3Rpb24gX29uQWRkQXR0cmlidXRlKGRvYyxlbCxuZXdBdHRyKXtcblx0ZG9jICYmIGRvYy5faW5jKys7XG5cdHZhciBucyA9IG5ld0F0dHIubmFtZXNwYWNlVVJJIDtcblx0aWYobnMgPT09IE5BTUVTUEFDRS5YTUxOUyl7XG5cdFx0Ly91cGRhdGUgbmFtZXNwYWNlXG5cdFx0ZWwuX25zTWFwW25ld0F0dHIucHJlZml4P25ld0F0dHIubG9jYWxOYW1lOicnXSA9IG5ld0F0dHIudmFsdWVcblx0fVxufVxuXG5mdW5jdGlvbiBfb25SZW1vdmVBdHRyaWJ1dGUoZG9jLGVsLG5ld0F0dHIscmVtb3ZlKXtcblx0ZG9jICYmIGRvYy5faW5jKys7XG5cdHZhciBucyA9IG5ld0F0dHIubmFtZXNwYWNlVVJJIDtcblx0aWYobnMgPT09IE5BTUVTUEFDRS5YTUxOUyl7XG5cdFx0Ly91cGRhdGUgbmFtZXNwYWNlXG5cdFx0ZGVsZXRlIGVsLl9uc01hcFtuZXdBdHRyLnByZWZpeD9uZXdBdHRyLmxvY2FsTmFtZTonJ11cblx0fVxufVxuXG4vKipcbiAqIFVwZGF0ZXMgYGVsLmNoaWxkTm9kZXNgLCB1cGRhdGluZyB0aGUgaW5kZXhlZCBpdGVtcyBhbmQgaXQncyBgbGVuZ3RoYC5cbiAqIFBhc3NpbmcgYG5ld0NoaWxkYCBtZWFucyBpdCB3aWxsIGJlIGFwcGVuZGVkLlxuICogT3RoZXJ3aXNlIGl0J3MgYXNzdW1lZCB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVtb3ZlZCxcbiAqIGFuZCBgZWwuZmlyc3ROb2RlYCBhbmQgaXQncyBgLm5leHRTaWJsaW5nYCBhcmUgdXNlZFxuICogdG8gd2FsayB0aGUgY3VycmVudCBsaXN0IG9mIGNoaWxkIG5vZGVzLlxuICpcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IGRvY1xuICogQHBhcmFtIHtOb2RlfSBlbFxuICogQHBhcmFtIHtOb2RlfSBbbmV3Q2hpbGRdXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfb25VcGRhdGVDaGlsZCAoZG9jLCBlbCwgbmV3Q2hpbGQpIHtcblx0aWYoZG9jICYmIGRvYy5faW5jKXtcblx0XHRkb2MuX2luYysrO1xuXHRcdC8vdXBkYXRlIGNoaWxkTm9kZXNcblx0XHR2YXIgY3MgPSBlbC5jaGlsZE5vZGVzO1xuXHRcdGlmIChuZXdDaGlsZCkge1xuXHRcdFx0Y3NbY3MubGVuZ3RoKytdID0gbmV3Q2hpbGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjaGlsZCA9IGVsLmZpcnN0Q2hpbGQ7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHR3aGlsZSAoY2hpbGQpIHtcblx0XHRcdFx0Y3NbaSsrXSA9IGNoaWxkO1xuXHRcdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdFx0fVxuXHRcdFx0Y3MubGVuZ3RoID0gaTtcblx0XHRcdGRlbGV0ZSBjc1tjcy5sZW5ndGhdO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gYHBhcmVudE5vZGVgIGFuZCBgY2hpbGRgXG4gKiBhbmQgYW55IGV4aXN0aW5nIGBjaGlsZC5wcmV2aW91c1NpYmxpbmdgIG9yIGBjaGlsZC5uZXh0U2libGluZ2AuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20veG1sZG9tL3htbGRvbS9pc3N1ZXMvMTM1XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94bWxkb20veG1sZG9tL2lzc3Vlcy8xNDVcbiAqXG4gKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gY2hpbGRcbiAqIEByZXR1cm5zIHtOb2RlfSB0aGUgY2hpbGQgdGhhdCB3YXMgcmVtb3ZlZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9yZW1vdmVDaGlsZCAocGFyZW50Tm9kZSwgY2hpbGQpIHtcblx0dmFyIHByZXZpb3VzID0gY2hpbGQucHJldmlvdXNTaWJsaW5nO1xuXHR2YXIgbmV4dCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRpZiAocHJldmlvdXMpIHtcblx0XHRwcmV2aW91cy5uZXh0U2libGluZyA9IG5leHQ7XG5cdH0gZWxzZSB7XG5cdFx0cGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV4dDtcblx0fVxuXHRpZiAobmV4dCkge1xuXHRcdG5leHQucHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXM7XG5cdH0gZWxzZSB7XG5cdFx0cGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBwcmV2aW91cztcblx0fVxuXHRjaGlsZC5wYXJlbnROb2RlID0gbnVsbDtcblx0Y2hpbGQucHJldmlvdXNTaWJsaW5nID0gbnVsbDtcblx0Y2hpbGQubmV4dFNpYmxpbmcgPSBudWxsO1xuXHRfb25VcGRhdGVDaGlsZChwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQsIHBhcmVudE5vZGUpO1xuXHRyZXR1cm4gY2hpbGQ7XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgYG5vZGVgIGNhbiBiZSBhIHBhcmVudCBmb3IgaW5zZXJ0aW9uLlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaGFzVmFsaWRQYXJlbnROb2RlVHlwZShub2RlKSB7XG5cdHJldHVybiAoXG5cdFx0bm9kZSAmJlxuXHRcdChub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKVxuXHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIGBub2RlYCBjYW4gYmUgaW5zZXJ0ZWQgYWNjb3JkaW5nIHRvIGl0J3MgYG5vZGVUeXBlYC5cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0luc2VydGFibGVOb2RlVHlwZShub2RlKSB7XG5cdHJldHVybiAoXG5cdFx0bm9kZSAmJlxuXHRcdChpc0VsZW1lbnROb2RlKG5vZGUpIHx8XG5cdFx0XHRpc1RleHROb2RlKG5vZGUpIHx8XG5cdFx0XHRpc0RvY1R5cGVOb2RlKG5vZGUpIHx8XG5cdFx0XHRub2RlLm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHxcblx0XHRcdG5vZGUubm9kZVR5cGUgPT09IE5vZGUuQ09NTUVOVF9OT0RFIHx8XG5cdFx0XHRub2RlLm5vZGVUeXBlID09PSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSlcblx0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYG5vZGVgIGlzIGEgRE9DVFlQRSBub2RlXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0RvY1R5cGVOb2RlKG5vZGUpIHtcblx0cmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9UWVBFX05PREU7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIGlzIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudE5vZGUobm9kZSkge1xuXHRyZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBub2RlYCBpcyBhIHRleHQgbm9kZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Tm9kZShub2RlKSB7XG5cdHJldHVybiBub2RlICYmIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGVuIGVsZW1lbnQgbm9kZSBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIGBjaGlsZGAsIG9yIGF0IHRoZSBlbmQgaWYgY2hpbGQgaXMgZmFsc3ksXG4gKiBhY2NvcmRpbmcgdG8gdGhlIHByZXNlbmNlIGFuZCBwb3NpdGlvbiBvZiBhIGRvY3R5cGUgbm9kZSBvbiB0aGUgc2FtZSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBkb2MgVGhlIGRvY3VtZW50IG5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gY2hpbGQgdGhlIG5vZGUgdGhhdCB3b3VsZCBiZWNvbWUgdGhlIG5leHRTaWJsaW5nIGlmIHRoZSBlbGVtZW50IHdvdWxkIGJlIGluc2VydGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGFuIGVsZW1lbnQgY2FuIGJlIGluc2VydGVkIGJlZm9yZSBjaGlsZFxuICogQHByaXZhdGVcbiAqIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLWVuc3VyZS1wcmUtaW5zZXJ0aW9uLXZhbGlkaXR5XG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudEluc2VydGlvblBvc3NpYmxlKGRvYywgY2hpbGQpIHtcblx0dmFyIHBhcmVudENoaWxkTm9kZXMgPSBkb2MuY2hpbGROb2RlcyB8fCBbXTtcblx0aWYgKGZpbmQocGFyZW50Q2hpbGROb2RlcywgaXNFbGVtZW50Tm9kZSkgfHwgaXNEb2NUeXBlTm9kZShjaGlsZCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0dmFyIGRvY1R5cGVOb2RlID0gZmluZChwYXJlbnRDaGlsZE5vZGVzLCBpc0RvY1R5cGVOb2RlKTtcblx0cmV0dXJuICEoY2hpbGQgJiYgZG9jVHlwZU5vZGUgJiYgcGFyZW50Q2hpbGROb2Rlcy5pbmRleE9mKGRvY1R5cGVOb2RlKSA+IHBhcmVudENoaWxkTm9kZXMuaW5kZXhPZihjaGlsZCkpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIGVuIGVsZW1lbnQgbm9kZSBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIGBjaGlsZGAsIG9yIGF0IHRoZSBlbmQgaWYgY2hpbGQgaXMgZmFsc3ksXG4gKiBhY2NvcmRpbmcgdG8gdGhlIHByZXNlbmNlIGFuZCBwb3NpdGlvbiBvZiBhIGRvY3R5cGUgbm9kZSBvbiB0aGUgc2FtZSBsZXZlbC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IGRvYyBUaGUgZG9jdW1lbnQgbm9kZVxuICogQHBhcmFtIHtOb2RlfSBjaGlsZCB0aGUgbm9kZSB0aGF0IHdvdWxkIGJlY29tZSB0aGUgbmV4dFNpYmxpbmcgaWYgdGhlIGVsZW1lbnQgd291bGQgYmUgaW5zZXJ0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBgdHJ1ZWAgaWYgYW4gZWxlbWVudCBjYW4gYmUgaW5zZXJ0ZWQgYmVmb3JlIGNoaWxkXG4gKiBAcHJpdmF0ZVxuICogaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5vZGUtZW5zdXJlLXByZS1pbnNlcnRpb24tdmFsaWRpdHlcbiAqL1xuZnVuY3Rpb24gaXNFbGVtZW50UmVwbGFjZW1lbnRQb3NzaWJsZShkb2MsIGNoaWxkKSB7XG5cdHZhciBwYXJlbnRDaGlsZE5vZGVzID0gZG9jLmNoaWxkTm9kZXMgfHwgW107XG5cblx0ZnVuY3Rpb24gaGFzRWxlbWVudENoaWxkVGhhdElzTm90Q2hpbGQobm9kZSkge1xuXHRcdHJldHVybiBpc0VsZW1lbnROb2RlKG5vZGUpICYmIG5vZGUgIT09IGNoaWxkO1xuXHR9XG5cblx0aWYgKGZpbmQocGFyZW50Q2hpbGROb2RlcywgaGFzRWxlbWVudENoaWxkVGhhdElzTm90Q2hpbGQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHZhciBkb2NUeXBlTm9kZSA9IGZpbmQocGFyZW50Q2hpbGROb2RlcywgaXNEb2NUeXBlTm9kZSk7XG5cdHJldHVybiAhKGNoaWxkICYmIGRvY1R5cGVOb2RlICYmIHBhcmVudENoaWxkTm9kZXMuaW5kZXhPZihkb2NUeXBlTm9kZSkgPiBwYXJlbnRDaGlsZE5vZGVzLmluZGV4T2YoY2hpbGQpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogU3RlcHMgMS01IG9mIHRoZSBjaGVja3MgYmVmb3JlIGluc2VydGluZyBhbmQgYmVmb3JlIHJlcGxhY2luZyBhIGNoaWxkIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IHBhcmVudCB0aGUgcGFyZW50IG5vZGUgdG8gaW5zZXJ0IGBub2RlYCBpbnRvXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgdGhlIG5vZGUgdG8gaW5zZXJ0XG4gKiBAcGFyYW0ge05vZGU9fSBjaGlsZCB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZWNvbWUgdGhlIGBuZXh0U2libGluZ2Agb2YgYG5vZGVgXG4gKiBAcmV0dXJucyB7Tm9kZX1cbiAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uIGZvciBzZXZlcmFsIG5vZGUgY29tYmluYXRpb25zIHRoYXQgd291bGQgY3JlYXRlIGEgRE9NIHRoYXQgaXMgbm90IHdlbGwtZm9ybWVkLlxuICogQHRocm93cyBET01FeGNlcHRpb24gaWYgYGNoaWxkYCBpcyBwcm92aWRlZCBidXQgaXMgbm90IGEgY2hpbGQgb2YgYHBhcmVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLWVuc3VyZS1wcmUtaW5zZXJ0aW9uLXZhbGlkaXR5XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLXJlcGxhY2VcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJlSW5zZXJ0aW9uVmFsaWRpdHkxdG81KHBhcmVudCwgbm9kZSwgY2hpbGQpIHtcblx0Ly8gMS4gSWYgYHBhcmVudGAgaXMgbm90IGEgRG9jdW1lbnQsIERvY3VtZW50RnJhZ21lbnQsIG9yIEVsZW1lbnQgbm9kZSwgdGhlbiB0aHJvdyBhIFwiSGllcmFyY2h5UmVxdWVzdEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuXHRpZiAoIWhhc1ZhbGlkUGFyZW50Tm9kZVR5cGUocGFyZW50KSkge1xuXHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCAnVW5leHBlY3RlZCBwYXJlbnQgbm9kZSB0eXBlICcgKyBwYXJlbnQubm9kZVR5cGUpO1xuXHR9XG5cdC8vIDIuIElmIGBub2RlYCBpcyBhIGhvc3QtaW5jbHVkaW5nIGluY2x1c2l2ZSBhbmNlc3RvciBvZiBgcGFyZW50YCwgdGhlbiB0aHJvdyBhIFwiSGllcmFyY2h5UmVxdWVzdEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuXHQvLyBub3QgaW1wbGVtZW50ZWQhXG5cdC8vIDMuIElmIGBjaGlsZGAgaXMgbm9uLW51bGwgYW5kIGl0cyBwYXJlbnQgaXMgbm90IGBwYXJlbnRgLCB0aGVuIHRocm93IGEgXCJOb3RGb3VuZEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuXHRpZiAoY2hpbGQgJiYgY2hpbGQucGFyZW50Tm9kZSAhPT0gcGFyZW50KSB7XG5cdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihOT1RfRk9VTkRfRVJSLCAnY2hpbGQgbm90IGluIHBhcmVudCcpO1xuXHR9XG5cdGlmIChcblx0XHQvLyA0LiBJZiBgbm9kZWAgaXMgbm90IGEgRG9jdW1lbnRGcmFnbWVudCwgRG9jdW1lbnRUeXBlLCBFbGVtZW50LCBvciBDaGFyYWN0ZXJEYXRhIG5vZGUsIHRoZW4gdGhyb3cgYSBcIkhpZXJhcmNoeVJlcXVlc3RFcnJvclwiIERPTUV4Y2VwdGlvbi5cblx0XHQhaGFzSW5zZXJ0YWJsZU5vZGVUeXBlKG5vZGUpIHx8XG5cdFx0Ly8gNS4gSWYgZWl0aGVyIGBub2RlYCBpcyBhIFRleHQgbm9kZSBhbmQgYHBhcmVudGAgaXMgYSBkb2N1bWVudCxcblx0XHQvLyB0aGUgc2F4IHBhcnNlciBjdXJyZW50bHkgYWRkcyB0b3AgbGV2ZWwgdGV4dCBub2RlcywgdGhpcyB3aWxsIGJlIGZpeGVkIGluIDAuOS4wXG5cdFx0Ly8gfHwgKG5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFKVxuXHRcdC8vIG9yIGBub2RlYCBpcyBhIGRvY3R5cGUgYW5kIGBwYXJlbnRgIGlzIG5vdCBhIGRvY3VtZW50LCB0aGVuIHRocm93IGEgXCJIaWVyYXJjaHlSZXF1ZXN0RXJyb3JcIiBET01FeGNlcHRpb24uXG5cdFx0KGlzRG9jVHlwZU5vZGUobm9kZSkgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSBOb2RlLkRPQ1VNRU5UX05PREUpXG5cdCkge1xuXHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oXG5cdFx0XHRISUVSQVJDSFlfUkVRVUVTVF9FUlIsXG5cdFx0XHQnVW5leHBlY3RlZCBub2RlIHR5cGUgJyArIG5vZGUubm9kZVR5cGUgKyAnIGZvciBwYXJlbnQgbm9kZSB0eXBlICcgKyBwYXJlbnQubm9kZVR5cGVcblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIFN0ZXAgNiBvZiB0aGUgY2hlY2tzIGJlZm9yZSBpbnNlcnRpbmcgYW5kIGJlZm9yZSByZXBsYWNpbmcgYSBjaGlsZCBhcmUgZGlmZmVyZW50LlxuICpcbiAqIEBwYXJhbSB7RG9jdW1lbnR9IHBhcmVudCB0aGUgcGFyZW50IG5vZGUgdG8gaW5zZXJ0IGBub2RlYCBpbnRvXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgdGhlIG5vZGUgdG8gaW5zZXJ0XG4gKiBAcGFyYW0ge05vZGUgfCB1bmRlZmluZWR9IGNoaWxkIHRoZSBub2RlIHRoYXQgc2hvdWxkIGJlY29tZSB0aGUgYG5leHRTaWJsaW5nYCBvZiBgbm9kZWBcbiAqIEByZXR1cm5zIHtOb2RlfVxuICogQHRocm93cyBET01FeGNlcHRpb24gZm9yIHNldmVyYWwgbm9kZSBjb21iaW5hdGlvbnMgdGhhdCB3b3VsZCBjcmVhdGUgYSBET00gdGhhdCBpcyBub3Qgd2VsbC1mb3JtZWQuXG4gKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBpZiBgY2hpbGRgIGlzIHByb3ZpZGVkIGJ1dCBpcyBub3QgYSBjaGlsZCBvZiBgcGFyZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5vZGUtZW5zdXJlLXByZS1pbnNlcnRpb24tdmFsaWRpdHlcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW5vZGUtcmVwbGFjZVxuICovXG5mdW5jdGlvbiBhc3NlcnRQcmVJbnNlcnRpb25WYWxpZGl0eUluRG9jdW1lbnQocGFyZW50LCBub2RlLCBjaGlsZCkge1xuXHR2YXIgcGFyZW50Q2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzIHx8IFtdO1xuXHR2YXIgbm9kZUNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXMgfHwgW107XG5cblx0Ly8gRG9jdW1lbnRGcmFnbWVudFxuXHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG5cdFx0dmFyIG5vZGVDaGlsZEVsZW1lbnRzID0gbm9kZUNoaWxkTm9kZXMuZmlsdGVyKGlzRWxlbWVudE5vZGUpO1xuXHRcdC8vIElmIG5vZGUgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudCBjaGlsZCBvciBoYXMgYSBUZXh0IG5vZGUgY2hpbGQuXG5cdFx0aWYgKG5vZGVDaGlsZEVsZW1lbnRzLmxlbmd0aCA+IDEgfHwgZmluZChub2RlQ2hpbGROb2RlcywgaXNUZXh0Tm9kZSkpIHtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCAnTW9yZSB0aGFuIG9uZSBlbGVtZW50IG9yIHRleHQgaW4gZnJhZ21lbnQnKTtcblx0XHR9XG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBgbm9kZWAgaGFzIG9uZSBlbGVtZW50IGNoaWxkIGFuZCBlaXRoZXIgYHBhcmVudGAgaGFzIGFuIGVsZW1lbnQgY2hpbGQsXG5cdFx0Ly8gYGNoaWxkYCBpcyBhIGRvY3R5cGUsIG9yIGBjaGlsZGAgaXMgbm9uLW51bGwgYW5kIGEgZG9jdHlwZSBpcyBmb2xsb3dpbmcgYGNoaWxkYC5cblx0XHRpZiAobm9kZUNoaWxkRWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc0VsZW1lbnRJbnNlcnRpb25Qb3NzaWJsZShwYXJlbnQsIGNoaWxkKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihISUVSQVJDSFlfUkVRVUVTVF9FUlIsICdFbGVtZW50IGluIGZyYWdtZW50IGNhbiBub3QgYmUgaW5zZXJ0ZWQgYmVmb3JlIGRvY3R5cGUnKTtcblx0XHR9XG5cdH1cblx0Ly8gRWxlbWVudFxuXHRpZiAoaXNFbGVtZW50Tm9kZShub2RlKSkge1xuXHRcdC8vIGBwYXJlbnRgIGhhcyBhbiBlbGVtZW50IGNoaWxkLCBgY2hpbGRgIGlzIGEgZG9jdHlwZSxcblx0XHQvLyBvciBgY2hpbGRgIGlzIG5vbi1udWxsIGFuZCBhIGRvY3R5cGUgaXMgZm9sbG93aW5nIGBjaGlsZGAuXG5cdFx0aWYgKCFpc0VsZW1lbnRJbnNlcnRpb25Qb3NzaWJsZShwYXJlbnQsIGNoaWxkKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihISUVSQVJDSFlfUkVRVUVTVF9FUlIsICdPbmx5IG9uZSBlbGVtZW50IGNhbiBiZSBhZGRlZCBhbmQgb25seSBhZnRlciBkb2N0eXBlJyk7XG5cdFx0fVxuXHR9XG5cdC8vIERvY3VtZW50VHlwZVxuXHRpZiAoaXNEb2NUeXBlTm9kZShub2RlKSkge1xuXHRcdC8vIGBwYXJlbnRgIGhhcyBhIGRvY3R5cGUgY2hpbGQsXG5cdFx0aWYgKGZpbmQocGFyZW50Q2hpbGROb2RlcywgaXNEb2NUeXBlTm9kZSkpIHtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCAnT25seSBvbmUgZG9jdHlwZSBpcyBhbGxvd2VkJyk7XG5cdFx0fVxuXHRcdHZhciBwYXJlbnRFbGVtZW50Q2hpbGQgPSBmaW5kKHBhcmVudENoaWxkTm9kZXMsIGlzRWxlbWVudE5vZGUpO1xuXHRcdC8vIGBjaGlsZGAgaXMgbm9uLW51bGwgYW5kIGFuIGVsZW1lbnQgaXMgcHJlY2VkaW5nIGBjaGlsZGAsXG5cdFx0aWYgKGNoaWxkICYmIHBhcmVudENoaWxkTm9kZXMuaW5kZXhPZihwYXJlbnRFbGVtZW50Q2hpbGQpIDwgcGFyZW50Q2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihISUVSQVJDSFlfUkVRVUVTVF9FUlIsICdEb2N0eXBlIGNhbiBvbmx5IGJlIGluc2VydGVkIGJlZm9yZSBhbiBlbGVtZW50Jyk7XG5cdFx0fVxuXHRcdC8vIG9yIGBjaGlsZGAgaXMgbnVsbCBhbmQgYHBhcmVudGAgaGFzIGFuIGVsZW1lbnQgY2hpbGQuXG5cdFx0aWYgKCFjaGlsZCAmJiBwYXJlbnRFbGVtZW50Q2hpbGQpIHtcblx0XHRcdHRocm93IG5ldyBET01FeGNlcHRpb24oSElFUkFSQ0hZX1JFUVVFU1RfRVJSLCAnRG9jdHlwZSBjYW4gbm90IGJlIGFwcGVuZGVkIHNpbmNlIGVsZW1lbnQgaXMgcHJlc2VudCcpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBTdGVwIDYgb2YgdGhlIGNoZWNrcyBiZWZvcmUgaW5zZXJ0aW5nIGFuZCBiZWZvcmUgcmVwbGFjaW5nIGEgY2hpbGQgYXJlIGRpZmZlcmVudC5cbiAqXG4gKiBAcGFyYW0ge0RvY3VtZW50fSBwYXJlbnQgdGhlIHBhcmVudCBub2RlIHRvIGluc2VydCBgbm9kZWAgaW50b1xuICogQHBhcmFtIHtOb2RlfSBub2RlIHRoZSBub2RlIHRvIGluc2VydFxuICogQHBhcmFtIHtOb2RlIHwgdW5kZWZpbmVkfSBjaGlsZCB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZWNvbWUgdGhlIGBuZXh0U2libGluZ2Agb2YgYG5vZGVgXG4gKiBAcmV0dXJucyB7Tm9kZX1cbiAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uIGZvciBzZXZlcmFsIG5vZGUgY29tYmluYXRpb25zIHRoYXQgd291bGQgY3JlYXRlIGEgRE9NIHRoYXQgaXMgbm90IHdlbGwtZm9ybWVkLlxuICogQHRocm93cyBET01FeGNlcHRpb24gaWYgYGNoaWxkYCBpcyBwcm92aWRlZCBidXQgaXMgbm90IGEgY2hpbGQgb2YgYHBhcmVudGAuXG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLWVuc3VyZS1wcmUtaW5zZXJ0aW9uLXZhbGlkaXR5XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ub2RlLXJlcGxhY2VcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJlUmVwbGFjZW1lbnRWYWxpZGl0eUluRG9jdW1lbnQocGFyZW50LCBub2RlLCBjaGlsZCkge1xuXHR2YXIgcGFyZW50Q2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzIHx8IFtdO1xuXHR2YXIgbm9kZUNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXMgfHwgW107XG5cblx0Ly8gRG9jdW1lbnRGcmFnbWVudFxuXHRpZiAobm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG5cdFx0dmFyIG5vZGVDaGlsZEVsZW1lbnRzID0gbm9kZUNoaWxkTm9kZXMuZmlsdGVyKGlzRWxlbWVudE5vZGUpO1xuXHRcdC8vIElmIGBub2RlYCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50IGNoaWxkIG9yIGhhcyBhIFRleHQgbm9kZSBjaGlsZC5cblx0XHRpZiAobm9kZUNoaWxkRWxlbWVudHMubGVuZ3RoID4gMSB8fCBmaW5kKG5vZGVDaGlsZE5vZGVzLCBpc1RleHROb2RlKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihISUVSQVJDSFlfUkVRVUVTVF9FUlIsICdNb3JlIHRoYW4gb25lIGVsZW1lbnQgb3IgdGV4dCBpbiBmcmFnbWVudCcpO1xuXHRcdH1cblx0XHQvLyBPdGhlcndpc2UsIGlmIGBub2RlYCBoYXMgb25lIGVsZW1lbnQgY2hpbGQgYW5kIGVpdGhlciBgcGFyZW50YCBoYXMgYW4gZWxlbWVudCBjaGlsZCB0aGF0IGlzIG5vdCBgY2hpbGRgIG9yIGEgZG9jdHlwZSBpcyBmb2xsb3dpbmcgYGNoaWxkYC5cblx0XHRpZiAobm9kZUNoaWxkRWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc0VsZW1lbnRSZXBsYWNlbWVudFBvc3NpYmxlKHBhcmVudCwgY2hpbGQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKEhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgJ0VsZW1lbnQgaW4gZnJhZ21lbnQgY2FuIG5vdCBiZSBpbnNlcnRlZCBiZWZvcmUgZG9jdHlwZScpO1xuXHRcdH1cblx0fVxuXHQvLyBFbGVtZW50XG5cdGlmIChpc0VsZW1lbnROb2RlKG5vZGUpKSB7XG5cdFx0Ly8gYHBhcmVudGAgaGFzIGFuIGVsZW1lbnQgY2hpbGQgdGhhdCBpcyBub3QgYGNoaWxkYCBvciBhIGRvY3R5cGUgaXMgZm9sbG93aW5nIGBjaGlsZGAuXG5cdFx0aWYgKCFpc0VsZW1lbnRSZXBsYWNlbWVudFBvc3NpYmxlKHBhcmVudCwgY2hpbGQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKEhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgJ09ubHkgb25lIGVsZW1lbnQgY2FuIGJlIGFkZGVkIGFuZCBvbmx5IGFmdGVyIGRvY3R5cGUnKTtcblx0XHR9XG5cdH1cblx0Ly8gRG9jdW1lbnRUeXBlXG5cdGlmIChpc0RvY1R5cGVOb2RlKG5vZGUpKSB7XG5cdFx0ZnVuY3Rpb24gaGFzRG9jdHlwZUNoaWxkVGhhdElzTm90Q2hpbGQobm9kZSkge1xuXHRcdFx0cmV0dXJuIGlzRG9jVHlwZU5vZGUobm9kZSkgJiYgbm9kZSAhPT0gY2hpbGQ7XG5cdFx0fVxuXG5cdFx0Ly8gYHBhcmVudGAgaGFzIGEgZG9jdHlwZSBjaGlsZCB0aGF0IGlzIG5vdCBgY2hpbGRgLFxuXHRcdGlmIChmaW5kKHBhcmVudENoaWxkTm9kZXMsIGhhc0RvY3R5cGVDaGlsZFRoYXRJc05vdENoaWxkKSkge1xuXHRcdFx0dGhyb3cgbmV3IERPTUV4Y2VwdGlvbihISUVSQVJDSFlfUkVRVUVTVF9FUlIsICdPbmx5IG9uZSBkb2N0eXBlIGlzIGFsbG93ZWQnKTtcblx0XHR9XG5cdFx0dmFyIHBhcmVudEVsZW1lbnRDaGlsZCA9IGZpbmQocGFyZW50Q2hpbGROb2RlcywgaXNFbGVtZW50Tm9kZSk7XG5cdFx0Ly8gb3IgYW4gZWxlbWVudCBpcyBwcmVjZWRpbmcgYGNoaWxkYC5cblx0XHRpZiAoY2hpbGQgJiYgcGFyZW50Q2hpbGROb2Rlcy5pbmRleE9mKHBhcmVudEVsZW1lbnRDaGlsZCkgPCBwYXJlbnRDaGlsZE5vZGVzLmluZGV4T2YoY2hpbGQpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKEhJRVJBUkNIWV9SRVFVRVNUX0VSUiwgJ0RvY3R5cGUgY2FuIG9ubHkgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuIGVsZW1lbnQnKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBwYXJlbnQgdGhlIHBhcmVudCBub2RlIHRvIGluc2VydCBgbm9kZWAgaW50b1xuICogQHBhcmFtIHtOb2RlfSBub2RlIHRoZSBub2RlIHRvIGluc2VydFxuICogQHBhcmFtIHtOb2RlPX0gY2hpbGQgdGhlIG5vZGUgdGhhdCBzaG91bGQgYmVjb21lIHRoZSBgbmV4dFNpYmxpbmdgIG9mIGBub2RlYFxuICogQHJldHVybnMge05vZGV9XG4gKiBAdGhyb3dzIERPTUV4Y2VwdGlvbiBmb3Igc2V2ZXJhbCBub2RlIGNvbWJpbmF0aW9ucyB0aGF0IHdvdWxkIGNyZWF0ZSBhIERPTSB0aGF0IGlzIG5vdCB3ZWxsLWZvcm1lZC5cbiAqIEB0aHJvd3MgRE9NRXhjZXB0aW9uIGlmIGBjaGlsZGAgaXMgcHJvdmlkZWQgYnV0IGlzIG5vdCBhIGNoaWxkIG9mIGBwYXJlbnRgLlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbm9kZS1lbnN1cmUtcHJlLWluc2VydGlvbi12YWxpZGl0eVxuICovXG5mdW5jdGlvbiBfaW5zZXJ0QmVmb3JlKHBhcmVudCwgbm9kZSwgY2hpbGQsIF9pbkRvY3VtZW50QXNzZXJ0aW9uKSB7XG5cdC8vIFRvIGVuc3VyZSBwcmUtaW5zZXJ0aW9uIHZhbGlkaXR5IG9mIGEgbm9kZSBpbnRvIGEgcGFyZW50IGJlZm9yZSBhIGNoaWxkLCBydW4gdGhlc2Ugc3RlcHM6XG5cdGFzc2VydFByZUluc2VydGlvblZhbGlkaXR5MXRvNShwYXJlbnQsIG5vZGUsIGNoaWxkKTtcblxuXHQvLyBJZiBwYXJlbnQgaXMgYSBkb2N1bWVudCwgYW5kIGFueSBvZiB0aGUgc3RhdGVtZW50cyBiZWxvdywgc3dpdGNoZWQgb24gdGhlIGludGVyZmFjZSBub2RlIGltcGxlbWVudHMsXG5cdC8vIGFyZSB0cnVlLCB0aGVuIHRocm93IGEgXCJIaWVyYXJjaHlSZXF1ZXN0RXJyb3JcIiBET01FeGNlcHRpb24uXG5cdGlmIChwYXJlbnQubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERSkge1xuXHRcdChfaW5Eb2N1bWVudEFzc2VydGlvbiB8fCBhc3NlcnRQcmVJbnNlcnRpb25WYWxpZGl0eUluRG9jdW1lbnQpKHBhcmVudCwgbm9kZSwgY2hpbGQpO1xuXHR9XG5cblx0dmFyIGNwID0gbm9kZS5wYXJlbnROb2RlO1xuXHRpZihjcCl7XG5cdFx0Y3AucmVtb3ZlQ2hpbGQobm9kZSk7Ly9yZW1vdmUgYW5kIHVwZGF0ZVxuXHR9XG5cdGlmKG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe1xuXHRcdHZhciBuZXdGaXJzdCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHRpZiAobmV3Rmlyc3QgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0fVxuXHRcdHZhciBuZXdMYXN0ID0gbm9kZS5sYXN0Q2hpbGQ7XG5cdH1lbHNle1xuXHRcdG5ld0ZpcnN0ID0gbmV3TGFzdCA9IG5vZGU7XG5cdH1cblx0dmFyIHByZSA9IGNoaWxkID8gY2hpbGQucHJldmlvdXNTaWJsaW5nIDogcGFyZW50Lmxhc3RDaGlsZDtcblxuXHRuZXdGaXJzdC5wcmV2aW91c1NpYmxpbmcgPSBwcmU7XG5cdG5ld0xhc3QubmV4dFNpYmxpbmcgPSBjaGlsZDtcblxuXG5cdGlmKHByZSl7XG5cdFx0cHJlLm5leHRTaWJsaW5nID0gbmV3Rmlyc3Q7XG5cdH1lbHNle1xuXHRcdHBhcmVudC5maXJzdENoaWxkID0gbmV3Rmlyc3Q7XG5cdH1cblx0aWYoY2hpbGQgPT0gbnVsbCl7XG5cdFx0cGFyZW50Lmxhc3RDaGlsZCA9IG5ld0xhc3Q7XG5cdH1lbHNle1xuXHRcdGNoaWxkLnByZXZpb3VzU2libGluZyA9IG5ld0xhc3Q7XG5cdH1cblx0ZG97XG5cdFx0bmV3Rmlyc3QucGFyZW50Tm9kZSA9IHBhcmVudDtcblx0fXdoaWxlKG5ld0ZpcnN0ICE9PSBuZXdMYXN0ICYmIChuZXdGaXJzdD0gbmV3Rmlyc3QubmV4dFNpYmxpbmcpKVxuXHRfb25VcGRhdGVDaGlsZChwYXJlbnQub3duZXJEb2N1bWVudHx8cGFyZW50LCBwYXJlbnQpO1xuXHQvL2NvbnNvbGUubG9nKHBhcmVudC5sYXN0Q2hpbGQubmV4dFNpYmxpbmcgPT0gbnVsbClcblx0aWYgKG5vZGUubm9kZVR5cGUgPT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkge1xuXHRcdG5vZGUuZmlyc3RDaGlsZCA9IG5vZGUubGFzdENoaWxkID0gbnVsbDtcblx0fVxuXHRyZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBBcHBlbmRzIGBuZXdDaGlsZGAgdG8gYHBhcmVudE5vZGVgLlxuICogSWYgYG5ld0NoaWxkYCBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGBwYXJlbnROb2RlYCBpdCBpcyBmaXJzdCByZW1vdmVkIGZyb20gaXQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20veG1sZG9tL3htbGRvbS9pc3N1ZXMvMTM1XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS94bWxkb20veG1sZG9tL2lzc3Vlcy8xNDVcbiAqIEBwYXJhbSB7Tm9kZX0gcGFyZW50Tm9kZVxuICogQHBhcmFtIHtOb2RlfSBuZXdDaGlsZFxuICogQHJldHVybnMge05vZGV9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBfYXBwZW5kU2luZ2xlQ2hpbGQgKHBhcmVudE5vZGUsIG5ld0NoaWxkKSB7XG5cdGlmIChuZXdDaGlsZC5wYXJlbnROb2RlKSB7XG5cdFx0bmV3Q2hpbGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuZXdDaGlsZCk7XG5cdH1cblx0bmV3Q2hpbGQucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG5cdG5ld0NoaWxkLnByZXZpb3VzU2libGluZyA9IHBhcmVudE5vZGUubGFzdENoaWxkO1xuXHRuZXdDaGlsZC5uZXh0U2libGluZyA9IG51bGw7XG5cdGlmIChuZXdDaGlsZC5wcmV2aW91c1NpYmxpbmcpIHtcblx0XHRuZXdDaGlsZC5wcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcgPSBuZXdDaGlsZDtcblx0fSBlbHNlIHtcblx0XHRwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSBuZXdDaGlsZDtcblx0fVxuXHRwYXJlbnROb2RlLmxhc3RDaGlsZCA9IG5ld0NoaWxkO1xuXHRfb25VcGRhdGVDaGlsZChwYXJlbnROb2RlLm93bmVyRG9jdW1lbnQsIHBhcmVudE5vZGUsIG5ld0NoaWxkKTtcblx0cmV0dXJuIG5ld0NoaWxkO1xufVxuXG5Eb2N1bWVudC5wcm90b3R5cGUgPSB7XG5cdC8vaW1wbGVtZW50YXRpb24gOiBudWxsLFxuXHRub2RlTmFtZSA6ICAnI2RvY3VtZW50Jyxcblx0bm9kZVR5cGUgOiAgRE9DVU1FTlRfTk9ERSxcblx0LyoqXG5cdCAqIFRoZSBEb2N1bWVudFR5cGUgbm9kZSBvZiB0aGUgZG9jdW1lbnQuXG5cdCAqXG5cdCAqIEByZWFkb25seVxuXHQgKiBAdHlwZSBEb2N1bWVudFR5cGVcblx0ICovXG5cdGRvY3R5cGUgOiAgbnVsbCxcblx0ZG9jdW1lbnRFbGVtZW50IDogIG51bGwsXG5cdF9pbmMgOiAxLFxuXG5cdGluc2VydEJlZm9yZSA6ICBmdW5jdGlvbihuZXdDaGlsZCwgcmVmQ2hpbGQpey8vcmFpc2VzXG5cdFx0aWYobmV3Q2hpbGQubm9kZVR5cGUgPT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7XG5cdFx0XHR2YXIgY2hpbGQgPSBuZXdDaGlsZC5maXJzdENoaWxkO1xuXHRcdFx0d2hpbGUoY2hpbGQpe1xuXHRcdFx0XHR2YXIgbmV4dCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR0aGlzLmluc2VydEJlZm9yZShjaGlsZCxyZWZDaGlsZCk7XG5cdFx0XHRcdGNoaWxkID0gbmV4dDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuZXdDaGlsZDtcblx0XHR9XG5cdFx0X2luc2VydEJlZm9yZSh0aGlzLCBuZXdDaGlsZCwgcmVmQ2hpbGQpO1xuXHRcdG5ld0NoaWxkLm93bmVyRG9jdW1lbnQgPSB0aGlzO1xuXHRcdGlmICh0aGlzLmRvY3VtZW50RWxlbWVudCA9PT0gbnVsbCAmJiBuZXdDaGlsZC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG5cdFx0XHR0aGlzLmRvY3VtZW50RWxlbWVudCA9IG5ld0NoaWxkO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXdDaGlsZDtcblx0fSxcblx0cmVtb3ZlQ2hpbGQgOiAgZnVuY3Rpb24ob2xkQ2hpbGQpe1xuXHRcdGlmKHRoaXMuZG9jdW1lbnRFbGVtZW50ID09IG9sZENoaWxkKXtcblx0XHRcdHRoaXMuZG9jdW1lbnRFbGVtZW50ID0gbnVsbDtcblx0XHR9XG5cdFx0cmV0dXJuIF9yZW1vdmVDaGlsZCh0aGlzLG9sZENoaWxkKTtcblx0fSxcblx0cmVwbGFjZUNoaWxkOiBmdW5jdGlvbiAobmV3Q2hpbGQsIG9sZENoaWxkKSB7XG5cdFx0Ly9yYWlzZXNcblx0XHRfaW5zZXJ0QmVmb3JlKHRoaXMsIG5ld0NoaWxkLCBvbGRDaGlsZCwgYXNzZXJ0UHJlUmVwbGFjZW1lbnRWYWxpZGl0eUluRG9jdW1lbnQpO1xuXHRcdG5ld0NoaWxkLm93bmVyRG9jdW1lbnQgPSB0aGlzO1xuXHRcdGlmIChvbGRDaGlsZCkge1xuXHRcdFx0dGhpcy5yZW1vdmVDaGlsZChvbGRDaGlsZCk7XG5cdFx0fVxuXHRcdGlmIChpc0VsZW1lbnROb2RlKG5ld0NoaWxkKSkge1xuXHRcdFx0dGhpcy5kb2N1bWVudEVsZW1lbnQgPSBuZXdDaGlsZDtcblx0XHR9XG5cdH0sXG5cdC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6XG5cdGltcG9ydE5vZGUgOiBmdW5jdGlvbihpbXBvcnRlZE5vZGUsZGVlcCl7XG5cdFx0cmV0dXJuIGltcG9ydE5vZGUodGhpcyxpbXBvcnRlZE5vZGUsZGVlcCk7XG5cdH0sXG5cdC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsIDI6XG5cdGdldEVsZW1lbnRCeUlkIDpcdGZ1bmN0aW9uKGlkKXtcblx0XHR2YXIgcnR2ID0gbnVsbDtcblx0XHRfdmlzaXROb2RlKHRoaXMuZG9jdW1lbnRFbGVtZW50LGZ1bmN0aW9uKG5vZGUpe1xuXHRcdFx0aWYobm9kZS5ub2RlVHlwZSA9PSBFTEVNRU5UX05PREUpe1xuXHRcdFx0XHRpZihub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSA9PSBpZCl7XG5cdFx0XHRcdFx0cnR2ID0gbm9kZTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cdFx0cmV0dXJuIHJ0djtcblx0fSxcblxuXHQvKipcblx0ICogVGhlIGBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lYCBtZXRob2Qgb2YgYERvY3VtZW50YCBpbnRlcmZhY2UgcmV0dXJucyBhbiBhcnJheS1saWtlIG9iamVjdFxuXHQgKiBvZiBhbGwgY2hpbGQgZWxlbWVudHMgd2hpY2ggaGF2ZSAqKmFsbCoqIG9mIHRoZSBnaXZlbiBjbGFzcyBuYW1lKHMpLlxuXHQgKlxuXHQgKiBSZXR1cm5zIGFuIGVtcHR5IGxpc3QgaWYgYGNsYXNzZU5hbWVzYCBpcyBhbiBlbXB0eSBzdHJpbmcgb3Igb25seSBjb250YWlucyBIVE1MIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMuXG5cdCAqXG5cdCAqXG5cdCAqIFdhcm5pbmc6IFRoaXMgaXMgYSBsaXZlIExpdmVOb2RlTGlzdC5cblx0ICogQ2hhbmdlcyBpbiB0aGUgRE9NIHdpbGwgcmVmbGVjdCBpbiB0aGUgYXJyYXkgYXMgdGhlIGNoYW5nZXMgb2NjdXIuXG5cdCAqIElmIGFuIGVsZW1lbnQgc2VsZWN0ZWQgYnkgdGhpcyBhcnJheSBubyBsb25nZXIgcXVhbGlmaWVzIGZvciB0aGUgc2VsZWN0b3IsXG5cdCAqIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSByZW1vdmVkLiBCZSBhd2FyZSBvZiB0aGlzIGZvciBpdGVyYXRpb24gcHVycG9zZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVzIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2xhc3MgbmFtZShzKSB0byBtYXRjaDsgbXVsdGlwbGUgY2xhc3MgbmFtZXMgYXJlIHNlcGFyYXRlZCBieSAoQVNDSUktKXdoaXRlc3BhY2Vcblx0ICpcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnQvZ2V0RWxlbWVudHNCeUNsYXNzTmFtZVxuXHQgKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1nZXRlbGVtZW50c2J5Y2xhc3NuYW1lXG5cdCAqL1xuXHRnZXRFbGVtZW50c0J5Q2xhc3NOYW1lOiBmdW5jdGlvbihjbGFzc05hbWVzKSB7XG5cdFx0dmFyIGNsYXNzTmFtZXNTZXQgPSB0b09yZGVyZWRTZXQoY2xhc3NOYW1lcylcblx0XHRyZXR1cm4gbmV3IExpdmVOb2RlTGlzdCh0aGlzLCBmdW5jdGlvbihiYXNlKSB7XG5cdFx0XHR2YXIgbHMgPSBbXTtcblx0XHRcdGlmIChjbGFzc05hbWVzU2V0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0X3Zpc2l0Tm9kZShiYXNlLmRvY3VtZW50RWxlbWVudCwgZnVuY3Rpb24obm9kZSkge1xuXHRcdFx0XHRcdGlmKG5vZGUgIT09IGJhc2UgJiYgbm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG5cdFx0XHRcdFx0XHR2YXIgbm9kZUNsYXNzTmFtZXMgPSBub2RlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKVxuXHRcdFx0XHRcdFx0Ly8gY2FuIGJlIG51bGwgaWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdCBleGlzdFxuXHRcdFx0XHRcdFx0aWYgKG5vZGVDbGFzc05hbWVzKSB7XG5cdFx0XHRcdFx0XHRcdC8vIGJlZm9yZSBzcGxpdHRpbmcgYW5kIGl0ZXJhdGluZyBqdXN0IGNvbXBhcmUgdGhlbSBmb3IgdGhlIG1vc3QgY29tbW9uIGNhc2Vcblx0XHRcdFx0XHRcdFx0dmFyIG1hdGNoZXMgPSBjbGFzc05hbWVzID09PSBub2RlQ2xhc3NOYW1lcztcblx0XHRcdFx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGVDbGFzc05hbWVzU2V0ID0gdG9PcmRlcmVkU2V0KG5vZGVDbGFzc05hbWVzKVxuXHRcdFx0XHRcdFx0XHRcdG1hdGNoZXMgPSBjbGFzc05hbWVzU2V0LmV2ZXJ5KGFycmF5SW5jbHVkZXMobm9kZUNsYXNzTmFtZXNTZXQpKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKG1hdGNoZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRscy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBscztcblx0XHR9KTtcblx0fSxcblxuXHQvL2RvY3VtZW50IGZhY3RvcnkgbWV0aG9kOlxuXHRjcmVhdGVFbGVtZW50IDpcdGZ1bmN0aW9uKHRhZ05hbWUpe1xuXHRcdHZhciBub2RlID0gbmV3IEVsZW1lbnQoKTtcblx0XHRub2RlLm93bmVyRG9jdW1lbnQgPSB0aGlzO1xuXHRcdG5vZGUubm9kZU5hbWUgPSB0YWdOYW1lO1xuXHRcdG5vZGUudGFnTmFtZSA9IHRhZ05hbWU7XG5cdFx0bm9kZS5sb2NhbE5hbWUgPSB0YWdOYW1lO1xuXHRcdG5vZGUuY2hpbGROb2RlcyA9IG5ldyBOb2RlTGlzdCgpO1xuXHRcdHZhciBhdHRyc1x0PSBub2RlLmF0dHJpYnV0ZXMgPSBuZXcgTmFtZWROb2RlTWFwKCk7XG5cdFx0YXR0cnMuX293bmVyRWxlbWVudCA9IG5vZGU7XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH0sXG5cdGNyZWF0ZURvY3VtZW50RnJhZ21lbnQgOlx0ZnVuY3Rpb24oKXtcblx0XHR2YXIgbm9kZSA9IG5ldyBEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0bm9kZS5vd25lckRvY3VtZW50ID0gdGhpcztcblx0XHRub2RlLmNoaWxkTm9kZXMgPSBuZXcgTm9kZUxpc3QoKTtcblx0XHRyZXR1cm4gbm9kZTtcblx0fSxcblx0Y3JlYXRlVGV4dE5vZGUgOlx0ZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG5vZGUgPSBuZXcgVGV4dCgpO1xuXHRcdG5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7XG5cdFx0bm9kZS5hcHBlbmREYXRhKGRhdGEpXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH0sXG5cdGNyZWF0ZUNvbW1lbnQgOlx0ZnVuY3Rpb24oZGF0YSl7XG5cdFx0dmFyIG5vZGUgPSBuZXcgQ29tbWVudCgpO1xuXHRcdG5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7XG5cdFx0bm9kZS5hcHBlbmREYXRhKGRhdGEpXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH0sXG5cdGNyZWF0ZUNEQVRBU2VjdGlvbiA6XHRmdW5jdGlvbihkYXRhKXtcblx0XHR2YXIgbm9kZSA9IG5ldyBDREFUQVNlY3Rpb24oKTtcblx0XHRub2RlLm93bmVyRG9jdW1lbnQgPSB0aGlzO1xuXHRcdG5vZGUuYXBwZW5kRGF0YShkYXRhKVxuXHRcdHJldHVybiBub2RlO1xuXHR9LFxuXHRjcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gOlx0ZnVuY3Rpb24odGFyZ2V0LGRhdGEpe1xuXHRcdHZhciBub2RlID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpO1xuXHRcdG5vZGUub3duZXJEb2N1bWVudCA9IHRoaXM7XG5cdFx0bm9kZS50YWdOYW1lID0gbm9kZS50YXJnZXQgPSB0YXJnZXQ7XG5cdFx0bm9kZS5ub2RlVmFsdWU9IG5vZGUuZGF0YSA9IGRhdGE7XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH0sXG5cdGNyZWF0ZUF0dHJpYnV0ZSA6XHRmdW5jdGlvbihuYW1lKXtcblx0XHR2YXIgbm9kZSA9IG5ldyBBdHRyKCk7XG5cdFx0bm9kZS5vd25lckRvY3VtZW50XHQ9IHRoaXM7XG5cdFx0bm9kZS5uYW1lID0gbmFtZTtcblx0XHRub2RlLm5vZGVOYW1lXHQ9IG5hbWU7XG5cdFx0bm9kZS5sb2NhbE5hbWUgPSBuYW1lO1xuXHRcdG5vZGUuc3BlY2lmaWVkID0gdHJ1ZTtcblx0XHRyZXR1cm4gbm9kZTtcblx0fSxcblx0Y3JlYXRlRW50aXR5UmVmZXJlbmNlIDpcdGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHZhciBub2RlID0gbmV3IEVudGl0eVJlZmVyZW5jZSgpO1xuXHRcdG5vZGUub3duZXJEb2N1bWVudFx0PSB0aGlzO1xuXHRcdG5vZGUubm9kZU5hbWVcdD0gbmFtZTtcblx0XHRyZXR1cm4gbm9kZTtcblx0fSxcblx0Ly8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjpcblx0Y3JlYXRlRWxlbWVudE5TIDpcdGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSxxdWFsaWZpZWROYW1lKXtcblx0XHR2YXIgbm9kZSA9IG5ldyBFbGVtZW50KCk7XG5cdFx0dmFyIHBsID0gcXVhbGlmaWVkTmFtZS5zcGxpdCgnOicpO1xuXHRcdHZhciBhdHRyc1x0PSBub2RlLmF0dHJpYnV0ZXMgPSBuZXcgTmFtZWROb2RlTWFwKCk7XG5cdFx0bm9kZS5jaGlsZE5vZGVzID0gbmV3IE5vZGVMaXN0KCk7XG5cdFx0bm9kZS5vd25lckRvY3VtZW50ID0gdGhpcztcblx0XHRub2RlLm5vZGVOYW1lID0gcXVhbGlmaWVkTmFtZTtcblx0XHRub2RlLnRhZ05hbWUgPSBxdWFsaWZpZWROYW1lO1xuXHRcdG5vZGUubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJO1xuXHRcdGlmKHBsLmxlbmd0aCA9PSAyKXtcblx0XHRcdG5vZGUucHJlZml4ID0gcGxbMF07XG5cdFx0XHRub2RlLmxvY2FsTmFtZSA9IHBsWzFdO1xuXHRcdH1lbHNle1xuXHRcdFx0Ly9lbC5wcmVmaXggPSBudWxsO1xuXHRcdFx0bm9kZS5sb2NhbE5hbWUgPSBxdWFsaWZpZWROYW1lO1xuXHRcdH1cblx0XHRhdHRycy5fb3duZXJFbGVtZW50ID0gbm9kZTtcblx0XHRyZXR1cm4gbm9kZTtcblx0fSxcblx0Ly8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgMjpcblx0Y3JlYXRlQXR0cmlidXRlTlMgOlx0ZnVuY3Rpb24obmFtZXNwYWNlVVJJLHF1YWxpZmllZE5hbWUpe1xuXHRcdHZhciBub2RlID0gbmV3IEF0dHIoKTtcblx0XHR2YXIgcGwgPSBxdWFsaWZpZWROYW1lLnNwbGl0KCc6Jyk7XG5cdFx0bm9kZS5vd25lckRvY3VtZW50ID0gdGhpcztcblx0XHRub2RlLm5vZGVOYW1lID0gcXVhbGlmaWVkTmFtZTtcblx0XHRub2RlLm5hbWUgPSBxdWFsaWZpZWROYW1lO1xuXHRcdG5vZGUubmFtZXNwYWNlVVJJID0gbmFtZXNwYWNlVVJJO1xuXHRcdG5vZGUuc3BlY2lmaWVkID0gdHJ1ZTtcblx0XHRpZihwbC5sZW5ndGggPT0gMil7XG5cdFx0XHRub2RlLnByZWZpeCA9IHBsWzBdO1xuXHRcdFx0bm9kZS5sb2NhbE5hbWUgPSBwbFsxXTtcblx0XHR9ZWxzZXtcblx0XHRcdC8vZWwucHJlZml4ID0gbnVsbDtcblx0XHRcdG5vZGUubG9jYWxOYW1lID0gcXVhbGlmaWVkTmFtZTtcblx0XHR9XG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cbn07XG5fZXh0ZW5kcyhEb2N1bWVudCxOb2RlKTtcblxuXG5mdW5jdGlvbiBFbGVtZW50KCkge1xuXHR0aGlzLl9uc01hcCA9IHt9O1xufTtcbkVsZW1lbnQucHJvdG90eXBlID0ge1xuXHRub2RlVHlwZSA6IEVMRU1FTlRfTk9ERSxcblx0aGFzQXR0cmlidXRlIDogZnVuY3Rpb24obmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0QXR0cmlidXRlTm9kZShuYW1lKSE9bnVsbDtcblx0fSxcblx0Z2V0QXR0cmlidXRlIDogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG5cdFx0cmV0dXJuIGF0dHIgJiYgYXR0ci52YWx1ZSB8fCAnJztcblx0fSxcblx0Z2V0QXR0cmlidXRlTm9kZSA6IGZ1bmN0aW9uKG5hbWUpe1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKG5hbWUpO1xuXHR9LFxuXHRzZXRBdHRyaWJ1dGUgOiBmdW5jdGlvbihuYW1lLCB2YWx1ZSl7XG5cdFx0dmFyIGF0dHIgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKG5hbWUpO1xuXHRcdGF0dHIudmFsdWUgPSBhdHRyLm5vZGVWYWx1ZSA9IFwiXCIgKyB2YWx1ZTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZU5vZGUoYXR0cilcblx0fSxcblx0cmVtb3ZlQXR0cmlidXRlIDogZnVuY3Rpb24obmFtZSl7XG5cdFx0dmFyIGF0dHIgPSB0aGlzLmdldEF0dHJpYnV0ZU5vZGUobmFtZSlcblx0XHRhdHRyICYmIHRoaXMucmVtb3ZlQXR0cmlidXRlTm9kZShhdHRyKTtcblx0fSxcblxuXHQvL2ZvdXIgcmVhbCBvcGVhcnRpb24gbWV0aG9kXG5cdGFwcGVuZENoaWxkOmZ1bmN0aW9uKG5ld0NoaWxkKXtcblx0XHRpZihuZXdDaGlsZC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7XG5cdFx0XHRyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsbnVsbCk7XG5cdFx0fWVsc2V7XG5cdFx0XHRyZXR1cm4gX2FwcGVuZFNpbmdsZUNoaWxkKHRoaXMsbmV3Q2hpbGQpO1xuXHRcdH1cblx0fSxcblx0c2V0QXR0cmlidXRlTm9kZSA6IGZ1bmN0aW9uKG5ld0F0dHIpe1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuc2V0TmFtZWRJdGVtKG5ld0F0dHIpO1xuXHR9LFxuXHRzZXRBdHRyaWJ1dGVOb2RlTlMgOiBmdW5jdGlvbihuZXdBdHRyKXtcblx0XHRyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzLnNldE5hbWVkSXRlbU5TKG5ld0F0dHIpO1xuXHR9LFxuXHRyZW1vdmVBdHRyaWJ1dGVOb2RlIDogZnVuY3Rpb24ob2xkQXR0cil7XG5cdFx0Ly9jb25zb2xlLmxvZyh0aGlzID09IG9sZEF0dHIub3duZXJFbGVtZW50KVxuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMucmVtb3ZlTmFtZWRJdGVtKG9sZEF0dHIubm9kZU5hbWUpO1xuXHR9LFxuXHQvL2dldCByZWFsIGF0dHJpYnV0ZSBuYW1lLGFuZCByZW1vdmUgaXQgYnkgcmVtb3ZlQXR0cmlidXRlTm9kZVxuXHRyZW1vdmVBdHRyaWJ1dGVOUyA6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtcblx0XHR2YXIgb2xkID0gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpO1xuXHRcdG9sZCAmJiB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5vZGUob2xkKTtcblx0fSxcblxuXHRoYXNBdHRyaWJ1dGVOUyA6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGVOb2RlTlMobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIT1udWxsO1xuXHR9LFxuXHRnZXRBdHRyaWJ1dGVOUyA6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKXtcblx0XHR2YXIgYXR0ciA9IHRoaXMuZ2V0QXR0cmlidXRlTm9kZU5TKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKTtcblx0XHRyZXR1cm4gYXR0ciAmJiBhdHRyLnZhbHVlIHx8ICcnO1xuXHR9LFxuXHRzZXRBdHRyaWJ1dGVOUyA6IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpe1xuXHRcdHZhciBhdHRyID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSk7XG5cdFx0YXR0ci52YWx1ZSA9IGF0dHIubm9kZVZhbHVlID0gXCJcIiArIHZhbHVlO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlTm9kZShhdHRyKVxuXHR9LFxuXHRnZXRBdHRyaWJ1dGVOb2RlTlMgOiBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSl7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW1OUyhuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSk7XG5cdH0sXG5cblx0Z2V0RWxlbWVudHNCeVRhZ05hbWUgOiBmdW5jdGlvbih0YWdOYW1lKXtcblx0XHRyZXR1cm4gbmV3IExpdmVOb2RlTGlzdCh0aGlzLGZ1bmN0aW9uKGJhc2Upe1xuXHRcdFx0dmFyIGxzID0gW107XG5cdFx0XHRfdmlzaXROb2RlKGJhc2UsZnVuY3Rpb24obm9kZSl7XG5cdFx0XHRcdGlmKG5vZGUgIT09IGJhc2UgJiYgbm9kZS5ub2RlVHlwZSA9PSBFTEVNRU5UX05PREUgJiYgKHRhZ05hbWUgPT09ICcqJyB8fCBub2RlLnRhZ05hbWUgPT0gdGFnTmFtZSkpe1xuXHRcdFx0XHRcdGxzLnB1c2gobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGxzO1xuXHRcdH0pO1xuXHR9LFxuXHRnZXRFbGVtZW50c0J5VGFnTmFtZU5TIDogZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpe1xuXHRcdHJldHVybiBuZXcgTGl2ZU5vZGVMaXN0KHRoaXMsZnVuY3Rpb24oYmFzZSl7XG5cdFx0XHR2YXIgbHMgPSBbXTtcblx0XHRcdF92aXNpdE5vZGUoYmFzZSxmdW5jdGlvbihub2RlKXtcblx0XHRcdFx0aWYobm9kZSAhPT0gYmFzZSAmJiBub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgKG5hbWVzcGFjZVVSSSA9PT0gJyonIHx8IG5vZGUubmFtZXNwYWNlVVJJID09PSBuYW1lc3BhY2VVUkkpICYmIChsb2NhbE5hbWUgPT09ICcqJyB8fCBub2RlLmxvY2FsTmFtZSA9PSBsb2NhbE5hbWUpKXtcblx0XHRcdFx0XHRscy5wdXNoKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBscztcblxuXHRcdH0pO1xuXHR9XG59O1xuRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWU7XG5Eb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyA9IEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlM7XG5cblxuX2V4dGVuZHMoRWxlbWVudCxOb2RlKTtcbmZ1bmN0aW9uIEF0dHIoKSB7XG59O1xuQXR0ci5wcm90b3R5cGUubm9kZVR5cGUgPSBBVFRSSUJVVEVfTk9ERTtcbl9leHRlbmRzKEF0dHIsTm9kZSk7XG5cblxuZnVuY3Rpb24gQ2hhcmFjdGVyRGF0YSgpIHtcbn07XG5DaGFyYWN0ZXJEYXRhLnByb3RvdHlwZSA9IHtcblx0ZGF0YSA6ICcnLFxuXHRzdWJzdHJpbmdEYXRhIDogZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEuc3Vic3RyaW5nKG9mZnNldCwgb2Zmc2V0K2NvdW50KTtcblx0fSxcblx0YXBwZW5kRGF0YTogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRleHQgPSB0aGlzLmRhdGErdGV4dDtcblx0XHR0aGlzLm5vZGVWYWx1ZSA9IHRoaXMuZGF0YSA9IHRleHQ7XG5cdFx0dGhpcy5sZW5ndGggPSB0ZXh0Lmxlbmd0aDtcblx0fSxcblx0aW5zZXJ0RGF0YTogZnVuY3Rpb24ob2Zmc2V0LHRleHQpIHtcblx0XHR0aGlzLnJlcGxhY2VEYXRhKG9mZnNldCwwLHRleHQpO1xuXG5cdH0sXG5cdGFwcGVuZENoaWxkOmZ1bmN0aW9uKG5ld0NoaWxkKXtcblx0XHR0aHJvdyBuZXcgRXJyb3IoRXhjZXB0aW9uTWVzc2FnZVtISUVSQVJDSFlfUkVRVUVTVF9FUlJdKVxuXHR9LFxuXHRkZWxldGVEYXRhOiBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7XG5cdFx0dGhpcy5yZXBsYWNlRGF0YShvZmZzZXQsY291bnQsXCJcIik7XG5cdH0sXG5cdHJlcGxhY2VEYXRhOiBmdW5jdGlvbihvZmZzZXQsIGNvdW50LCB0ZXh0KSB7XG5cdFx0dmFyIHN0YXJ0ID0gdGhpcy5kYXRhLnN1YnN0cmluZygwLG9mZnNldCk7XG5cdFx0dmFyIGVuZCA9IHRoaXMuZGF0YS5zdWJzdHJpbmcob2Zmc2V0K2NvdW50KTtcblx0XHR0ZXh0ID0gc3RhcnQgKyB0ZXh0ICsgZW5kO1xuXHRcdHRoaXMubm9kZVZhbHVlID0gdGhpcy5kYXRhID0gdGV4dDtcblx0XHR0aGlzLmxlbmd0aCA9IHRleHQubGVuZ3RoO1xuXHR9XG59XG5fZXh0ZW5kcyhDaGFyYWN0ZXJEYXRhLE5vZGUpO1xuZnVuY3Rpb24gVGV4dCgpIHtcbn07XG5UZXh0LnByb3RvdHlwZSA9IHtcblx0bm9kZU5hbWUgOiBcIiN0ZXh0XCIsXG5cdG5vZGVUeXBlIDogVEVYVF9OT0RFLFxuXHRzcGxpdFRleHQgOiBmdW5jdGlvbihvZmZzZXQpIHtcblx0XHR2YXIgdGV4dCA9IHRoaXMuZGF0YTtcblx0XHR2YXIgbmV3VGV4dCA9IHRleHQuc3Vic3RyaW5nKG9mZnNldCk7XG5cdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIG9mZnNldCk7XG5cdFx0dGhpcy5kYXRhID0gdGhpcy5ub2RlVmFsdWUgPSB0ZXh0O1xuXHRcdHRoaXMubGVuZ3RoID0gdGV4dC5sZW5ndGg7XG5cdFx0dmFyIG5ld05vZGUgPSB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3VGV4dCk7XG5cdFx0aWYodGhpcy5wYXJlbnROb2RlKXtcblx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmV3Tm9kZSwgdGhpcy5uZXh0U2libGluZyk7XG5cdFx0fVxuXHRcdHJldHVybiBuZXdOb2RlO1xuXHR9XG59XG5fZXh0ZW5kcyhUZXh0LENoYXJhY3RlckRhdGEpO1xuZnVuY3Rpb24gQ29tbWVudCgpIHtcbn07XG5Db21tZW50LnByb3RvdHlwZSA9IHtcblx0bm9kZU5hbWUgOiBcIiNjb21tZW50XCIsXG5cdG5vZGVUeXBlIDogQ09NTUVOVF9OT0RFXG59XG5fZXh0ZW5kcyhDb21tZW50LENoYXJhY3RlckRhdGEpO1xuXG5mdW5jdGlvbiBDREFUQVNlY3Rpb24oKSB7XG59O1xuQ0RBVEFTZWN0aW9uLnByb3RvdHlwZSA9IHtcblx0bm9kZU5hbWUgOiBcIiNjZGF0YS1zZWN0aW9uXCIsXG5cdG5vZGVUeXBlIDogQ0RBVEFfU0VDVElPTl9OT0RFXG59XG5fZXh0ZW5kcyhDREFUQVNlY3Rpb24sQ2hhcmFjdGVyRGF0YSk7XG5cblxuZnVuY3Rpb24gRG9jdW1lbnRUeXBlKCkge1xufTtcbkRvY3VtZW50VHlwZS5wcm90b3R5cGUubm9kZVR5cGUgPSBET0NVTUVOVF9UWVBFX05PREU7XG5fZXh0ZW5kcyhEb2N1bWVudFR5cGUsTm9kZSk7XG5cbmZ1bmN0aW9uIE5vdGF0aW9uKCkge1xufTtcbk5vdGF0aW9uLnByb3RvdHlwZS5ub2RlVHlwZSA9IE5PVEFUSU9OX05PREU7XG5fZXh0ZW5kcyhOb3RhdGlvbixOb2RlKTtcblxuZnVuY3Rpb24gRW50aXR5KCkge1xufTtcbkVudGl0eS5wcm90b3R5cGUubm9kZVR5cGUgPSBFTlRJVFlfTk9ERTtcbl9leHRlbmRzKEVudGl0eSxOb2RlKTtcblxuZnVuY3Rpb24gRW50aXR5UmVmZXJlbmNlKCkge1xufTtcbkVudGl0eVJlZmVyZW5jZS5wcm90b3R5cGUubm9kZVR5cGUgPSBFTlRJVFlfUkVGRVJFTkNFX05PREU7XG5fZXh0ZW5kcyhFbnRpdHlSZWZlcmVuY2UsTm9kZSk7XG5cbmZ1bmN0aW9uIERvY3VtZW50RnJhZ21lbnQoKSB7XG59O1xuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUubm9kZU5hbWUgPVx0XCIjZG9jdW1lbnQtZnJhZ21lbnRcIjtcbkRvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLm5vZGVUeXBlID1cdERPQ1VNRU5UX0ZSQUdNRU5UX05PREU7XG5fZXh0ZW5kcyhEb2N1bWVudEZyYWdtZW50LE5vZGUpO1xuXG5cbmZ1bmN0aW9uIFByb2Nlc3NpbmdJbnN0cnVjdGlvbigpIHtcbn1cblByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUubm9kZVR5cGUgPSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU7XG5fZXh0ZW5kcyhQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sTm9kZSk7XG5mdW5jdGlvbiBYTUxTZXJpYWxpemVyKCl7fVxuWE1MU2VyaWFsaXplci5wcm90b3R5cGUuc2VyaWFsaXplVG9TdHJpbmcgPSBmdW5jdGlvbihub2RlLGlzSHRtbCxub2RlRmlsdGVyKXtcblx0cmV0dXJuIG5vZGVTZXJpYWxpemVUb1N0cmluZy5jYWxsKG5vZGUsaXNIdG1sLG5vZGVGaWx0ZXIpO1xufVxuTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBub2RlU2VyaWFsaXplVG9TdHJpbmc7XG5mdW5jdGlvbiBub2RlU2VyaWFsaXplVG9TdHJpbmcoaXNIdG1sLG5vZGVGaWx0ZXIpe1xuXHR2YXIgYnVmID0gW107XG5cdHZhciByZWZOb2RlID0gdGhpcy5ub2RlVHlwZSA9PSA5ICYmIHRoaXMuZG9jdW1lbnRFbGVtZW50IHx8IHRoaXM7XG5cdHZhciBwcmVmaXggPSByZWZOb2RlLnByZWZpeDtcblx0dmFyIHVyaSA9IHJlZk5vZGUubmFtZXNwYWNlVVJJO1xuXG5cdGlmKHVyaSAmJiBwcmVmaXggPT0gbnVsbCl7XG5cdFx0Ly9jb25zb2xlLmxvZyhwcmVmaXgpXG5cdFx0dmFyIHByZWZpeCA9IHJlZk5vZGUubG9va3VwUHJlZml4KHVyaSk7XG5cdFx0aWYocHJlZml4ID09IG51bGwpe1xuXHRcdFx0Ly9pc0hUTUwgPSB0cnVlO1xuXHRcdFx0dmFyIHZpc2libGVOYW1lc3BhY2VzPVtcblx0XHRcdHtuYW1lc3BhY2U6dXJpLHByZWZpeDpudWxsfVxuXHRcdFx0Ly97bmFtZXNwYWNlOnVyaSxwcmVmaXg6Jyd9XG5cdFx0XHRdXG5cdFx0fVxuXHR9XG5cdHNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMsYnVmLGlzSHRtbCxub2RlRmlsdGVyLHZpc2libGVOYW1lc3BhY2VzKTtcblx0Ly9jb25zb2xlLmxvZygnIyMjJyx0aGlzLm5vZGVUeXBlLHVyaSxwcmVmaXgsYnVmLmpvaW4oJycpKVxuXHRyZXR1cm4gYnVmLmpvaW4oJycpO1xufVxuXG5mdW5jdGlvbiBuZWVkTmFtZXNwYWNlRGVmaW5lKG5vZGUsIGlzSFRNTCwgdmlzaWJsZU5hbWVzcGFjZXMpIHtcblx0dmFyIHByZWZpeCA9IG5vZGUucHJlZml4IHx8ICcnO1xuXHR2YXIgdXJpID0gbm9kZS5uYW1lc3BhY2VVUkk7XG5cdC8vIEFjY29yZGluZyB0byBbTmFtZXNwYWNlcyBpbiBYTUwgMS4wXShodHRwczovL3d3dy53My5vcmcvVFIvUkVDLXhtbC1uYW1lcy8jbnMtdXNpbmcpICxcblx0Ly8gYW5kIG1vcmUgc3BlY2lmaWNhbGx5IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLW5hbWVzLyNuc2MtTm9QcmVmaXhVbmRlY2wgOlxuXHQvLyA+IEluIGEgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGZvciBhIHByZWZpeCBbLi4uXSwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBNVVNUIE5PVCBiZSBlbXB0eS5cblx0Ly8gaW4gYSBzaW1pbGFyIG1hbm5lciBbTmFtZXNwYWNlcyBpbiBYTUwgMS4xXShodHRwczovL3d3dy53My5vcmcvVFIveG1sLW5hbWVzMTEvI25zLXVzaW5nKVxuXHQvLyBhbmQgbW9yZSBzcGVjaWZpY2FsbHkgaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC1uYW1lczExLyNuc2MtTlNEZWNsYXJlZCA6XG5cdC8vID4gWy4uLl0gRnVydGhlcm1vcmUsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgWy4uLl0gbXVzdCBub3QgYmUgYW4gZW1wdHkgc3RyaW5nLlxuXHQvLyBzbyBzZXJpYWxpemluZyBlbXB0eSBuYW1lc3BhY2UgdmFsdWUgbGlrZSB4bWxuczpkcz1cIlwiIHdvdWxkIHByb2R1Y2UgYW4gaW52YWxpZCBYTUwgZG9jdW1lbnQuXG5cdGlmICghdXJpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmIChwcmVmaXggPT09IFwieG1sXCIgJiYgdXJpID09PSBOQU1FU1BBQ0UuWE1MIHx8IHVyaSA9PT0gTkFNRVNQQUNFLlhNTE5TKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0dmFyIGkgPSB2aXNpYmxlTmFtZXNwYWNlcy5sZW5ndGhcblx0d2hpbGUgKGktLSkge1xuXHRcdHZhciBucyA9IHZpc2libGVOYW1lc3BhY2VzW2ldO1xuXHRcdC8vIGdldCBuYW1lc3BhY2UgcHJlZml4XG5cdFx0aWYgKG5zLnByZWZpeCA9PT0gcHJlZml4KSB7XG5cdFx0XHRyZXR1cm4gbnMubmFtZXNwYWNlICE9PSB1cmk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBXZWxsLWZvcm1lZCBjb25zdHJhaW50OiBObyA8IGluIEF0dHJpYnV0ZSBWYWx1ZXNcbiAqID4gVGhlIHJlcGxhY2VtZW50IHRleHQgb2YgYW55IGVudGl0eSByZWZlcnJlZCB0byBkaXJlY3RseSBvciBpbmRpcmVjdGx5XG4gKiA+IGluIGFuIGF0dHJpYnV0ZSB2YWx1ZSBtdXN0IG5vdCBjb250YWluIGEgPC5cbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbDExLyNDbGVhbkF0dHJWYWxzXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwxMS8jTlQtQXR0VmFsdWVcbiAqXG4gKiBMaXRlcmFsIHdoaXRlc3BhY2Ugb3RoZXIgdGhhbiBzcGFjZSB0aGF0IGFwcGVhciBpbiBhdHRyaWJ1dGUgdmFsdWVzXG4gKiBhcmUgc2VyaWFsaXplZCBhcyB0aGVpciBlbnRpdHkgcmVmZXJlbmNlcywgc28gdGhleSB3aWxsIGJlIHByZXNlcnZlZC5cbiAqIChJbiBjb250cmFzdCB0byB3aGl0ZXNwYWNlIGxpdGVyYWxzIGluIHRoZSBpbnB1dCB3aGljaCBhcmUgbm9ybWFsaXplZCB0byBzcGFjZXMpXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwxMS8jQVZOb3JtYWxpemVcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyNzZXJpYWxpemluZy1hbi1lbGVtZW50LXMtYXR0cmlidXRlc1xuICovXG5mdW5jdGlvbiBhZGRTZXJpYWxpemVkQXR0cmlidXRlKGJ1ZiwgcXVhbGlmaWVkTmFtZSwgdmFsdWUpIHtcblx0YnVmLnB1c2goJyAnLCBxdWFsaWZpZWROYW1lLCAnPVwiJywgdmFsdWUucmVwbGFjZSgvWzw+JlwiXFx0XFxuXFxyXS9nLCBfeG1sRW5jb2RlciksICdcIicpXG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUsYnVmLGlzSFRNTCxub2RlRmlsdGVyLHZpc2libGVOYW1lc3BhY2VzKXtcblx0aWYgKCF2aXNpYmxlTmFtZXNwYWNlcykge1xuXHRcdHZpc2libGVOYW1lc3BhY2VzID0gW107XG5cdH1cblxuXHRpZihub2RlRmlsdGVyKXtcblx0XHRub2RlID0gbm9kZUZpbHRlcihub2RlKTtcblx0XHRpZihub2RlKXtcblx0XHRcdGlmKHR5cGVvZiBub2RlID09ICdzdHJpbmcnKXtcblx0XHRcdFx0YnVmLnB1c2gobm9kZSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Ly9idWYuc29ydC5hcHBseShhdHRycywgYXR0cmlidXRlU29ydGVyKTtcblx0fVxuXG5cdHN3aXRjaChub2RlLm5vZGVUeXBlKXtcblx0Y2FzZSBFTEVNRU5UX05PREU6XG5cdFx0dmFyIGF0dHJzID0gbm9kZS5hdHRyaWJ1dGVzO1xuXHRcdHZhciBsZW4gPSBhdHRycy5sZW5ndGg7XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHZhciBub2RlTmFtZSA9IG5vZGUudGFnTmFtZTtcblxuXHRcdGlzSFRNTCA9IE5BTUVTUEFDRS5pc0hUTUwobm9kZS5uYW1lc3BhY2VVUkkpIHx8IGlzSFRNTFxuXG5cdFx0dmFyIHByZWZpeGVkTm9kZU5hbWUgPSBub2RlTmFtZVxuXHRcdGlmICghaXNIVE1MICYmICFub2RlLnByZWZpeCAmJiBub2RlLm5hbWVzcGFjZVVSSSkge1xuXHRcdFx0dmFyIGRlZmF1bHROU1xuXHRcdFx0Ly8gbG9va3VwIGN1cnJlbnQgZGVmYXVsdCBucyBmcm9tIGB4bWxuc2AgYXR0cmlidXRlXG5cdFx0XHRmb3IgKHZhciBhaSA9IDA7IGFpIDwgYXR0cnMubGVuZ3RoOyBhaSsrKSB7XG5cdFx0XHRcdGlmIChhdHRycy5pdGVtKGFpKS5uYW1lID09PSAneG1sbnMnKSB7XG5cdFx0XHRcdFx0ZGVmYXVsdE5TID0gYXR0cnMuaXRlbShhaSkudmFsdWVcblx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWRlZmF1bHROUykge1xuXHRcdFx0XHQvLyBsb29rdXAgY3VycmVudCBkZWZhdWx0IG5zIGluIHZpc2libGVOYW1lc3BhY2VzXG5cdFx0XHRcdGZvciAodmFyIG5zaSA9IHZpc2libGVOYW1lc3BhY2VzLmxlbmd0aCAtIDE7IG5zaSA+PSAwOyBuc2ktLSkge1xuXHRcdFx0XHRcdHZhciBuYW1lc3BhY2UgPSB2aXNpYmxlTmFtZXNwYWNlc1tuc2ldXG5cdFx0XHRcdFx0aWYgKG5hbWVzcGFjZS5wcmVmaXggPT09ICcnICYmIG5hbWVzcGFjZS5uYW1lc3BhY2UgPT09IG5vZGUubmFtZXNwYWNlVVJJKSB7XG5cdFx0XHRcdFx0XHRkZWZhdWx0TlMgPSBuYW1lc3BhY2UubmFtZXNwYWNlXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGRlZmF1bHROUyAhPT0gbm9kZS5uYW1lc3BhY2VVUkkpIHtcblx0XHRcdFx0Zm9yICh2YXIgbnNpID0gdmlzaWJsZU5hbWVzcGFjZXMubGVuZ3RoIC0gMTsgbnNpID49IDA7IG5zaS0tKSB7XG5cdFx0XHRcdFx0dmFyIG5hbWVzcGFjZSA9IHZpc2libGVOYW1lc3BhY2VzW25zaV1cblx0XHRcdFx0XHRpZiAobmFtZXNwYWNlLm5hbWVzcGFjZSA9PT0gbm9kZS5uYW1lc3BhY2VVUkkpIHtcblx0XHRcdFx0XHRcdGlmIChuYW1lc3BhY2UucHJlZml4KSB7XG5cdFx0XHRcdFx0XHRcdHByZWZpeGVkTm9kZU5hbWUgPSBuYW1lc3BhY2UucHJlZml4ICsgJzonICsgbm9kZU5hbWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YnVmLnB1c2goJzwnLCBwcmVmaXhlZE5vZGVOYW1lKTtcblxuXHRcdGZvcih2YXIgaT0wO2k8bGVuO2krKyl7XG5cdFx0XHQvLyBhZGQgbmFtZXNwYWNlcyBmb3IgYXR0cmlidXRlc1xuXHRcdFx0dmFyIGF0dHIgPSBhdHRycy5pdGVtKGkpO1xuXHRcdFx0aWYgKGF0dHIucHJlZml4ID09ICd4bWxucycpIHtcblx0XHRcdFx0dmlzaWJsZU5hbWVzcGFjZXMucHVzaCh7IHByZWZpeDogYXR0ci5sb2NhbE5hbWUsIG5hbWVzcGFjZTogYXR0ci52YWx1ZSB9KTtcblx0XHRcdH1lbHNlIGlmKGF0dHIubm9kZU5hbWUgPT0gJ3htbG5zJyl7XG5cdFx0XHRcdHZpc2libGVOYW1lc3BhY2VzLnB1c2goeyBwcmVmaXg6ICcnLCBuYW1lc3BhY2U6IGF0dHIudmFsdWUgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtcblx0XHRcdHZhciBhdHRyID0gYXR0cnMuaXRlbShpKTtcblx0XHRcdGlmIChuZWVkTmFtZXNwYWNlRGVmaW5lKGF0dHIsaXNIVE1MLCB2aXNpYmxlTmFtZXNwYWNlcykpIHtcblx0XHRcdFx0dmFyIHByZWZpeCA9IGF0dHIucHJlZml4fHwnJztcblx0XHRcdFx0dmFyIHVyaSA9IGF0dHIubmFtZXNwYWNlVVJJO1xuXHRcdFx0XHRhZGRTZXJpYWxpemVkQXR0cmlidXRlKGJ1ZiwgcHJlZml4ID8gJ3htbG5zOicgKyBwcmVmaXggOiBcInhtbG5zXCIsIHVyaSk7XG5cdFx0XHRcdHZpc2libGVOYW1lc3BhY2VzLnB1c2goeyBwcmVmaXg6IHByZWZpeCwgbmFtZXNwYWNlOnVyaSB9KTtcblx0XHRcdH1cblx0XHRcdHNlcmlhbGl6ZVRvU3RyaW5nKGF0dHIsYnVmLGlzSFRNTCxub2RlRmlsdGVyLHZpc2libGVOYW1lc3BhY2VzKTtcblx0XHR9XG5cblx0XHQvLyBhZGQgbmFtZXNwYWNlIGZvciBjdXJyZW50IG5vZGVcblx0XHRpZiAobm9kZU5hbWUgPT09IHByZWZpeGVkTm9kZU5hbWUgJiYgbmVlZE5hbWVzcGFjZURlZmluZShub2RlLCBpc0hUTUwsIHZpc2libGVOYW1lc3BhY2VzKSkge1xuXHRcdFx0dmFyIHByZWZpeCA9IG5vZGUucHJlZml4fHwnJztcblx0XHRcdHZhciB1cmkgPSBub2RlLm5hbWVzcGFjZVVSSTtcblx0XHRcdGFkZFNlcmlhbGl6ZWRBdHRyaWJ1dGUoYnVmLCBwcmVmaXggPyAneG1sbnM6JyArIHByZWZpeCA6IFwieG1sbnNcIiwgdXJpKTtcblx0XHRcdHZpc2libGVOYW1lc3BhY2VzLnB1c2goeyBwcmVmaXg6IHByZWZpeCwgbmFtZXNwYWNlOnVyaSB9KTtcblx0XHR9XG5cblx0XHRpZihjaGlsZCB8fCBpc0hUTUwgJiYgIS9eKD86bWV0YXxsaW5rfGltZ3xicnxocnxpbnB1dCkkL2kudGVzdChub2RlTmFtZSkpe1xuXHRcdFx0YnVmLnB1c2goJz4nKTtcblx0XHRcdC8vaWYgaXMgY2RhdGEgY2hpbGQgbm9kZVxuXHRcdFx0aWYoaXNIVE1MICYmIC9ec2NyaXB0JC9pLnRlc3Qobm9kZU5hbWUpKXtcblx0XHRcdFx0d2hpbGUoY2hpbGQpe1xuXHRcdFx0XHRcdGlmKGNoaWxkLmRhdGEpe1xuXHRcdFx0XHRcdFx0YnVmLnB1c2goY2hpbGQuZGF0YSk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRzZXJpYWxpemVUb1N0cmluZyhjaGlsZCwgYnVmLCBpc0hUTUwsIG5vZGVGaWx0ZXIsIHZpc2libGVOYW1lc3BhY2VzLnNsaWNlKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9ZWxzZVxuXHRcdFx0e1xuXHRcdFx0XHR3aGlsZShjaGlsZCl7XG5cdFx0XHRcdFx0c2VyaWFsaXplVG9TdHJpbmcoY2hpbGQsIGJ1ZiwgaXNIVE1MLCBub2RlRmlsdGVyLCB2aXNpYmxlTmFtZXNwYWNlcy5zbGljZSgpKTtcblx0XHRcdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRidWYucHVzaCgnPC8nLHByZWZpeGVkTm9kZU5hbWUsJz4nKTtcblx0XHR9ZWxzZXtcblx0XHRcdGJ1Zi5wdXNoKCcvPicpO1xuXHRcdH1cblx0XHQvLyByZW1vdmUgYWRkZWQgdmlzaWJsZSBuYW1lc3BhY2VzXG5cdFx0Ly92aXNpYmxlTmFtZXNwYWNlcy5sZW5ndGggPSBzdGFydFZpc2libGVOYW1lc3BhY2VzO1xuXHRcdHJldHVybjtcblx0Y2FzZSBET0NVTUVOVF9OT0RFOlxuXHRjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG5cdFx0dmFyIGNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXHRcdHdoaWxlKGNoaWxkKXtcblx0XHRcdHNlcmlhbGl6ZVRvU3RyaW5nKGNoaWxkLCBidWYsIGlzSFRNTCwgbm9kZUZpbHRlciwgdmlzaWJsZU5hbWVzcGFjZXMuc2xpY2UoKSk7XG5cdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdGNhc2UgQVRUUklCVVRFX05PREU6XG5cdFx0cmV0dXJuIGFkZFNlcmlhbGl6ZWRBdHRyaWJ1dGUoYnVmLCBub2RlLm5hbWUsIG5vZGUudmFsdWUpO1xuXHRjYXNlIFRFWFRfTk9ERTpcblx0XHQvKipcblx0XHQgKiBUaGUgYW1wZXJzYW5kIGNoYXJhY3RlciAoJikgYW5kIHRoZSBsZWZ0IGFuZ2xlIGJyYWNrZXQgKDwpIG11c3Qgbm90IGFwcGVhciBpbiB0aGVpciBsaXRlcmFsIGZvcm0sXG5cdFx0ICogZXhjZXB0IHdoZW4gdXNlZCBhcyBtYXJrdXAgZGVsaW1pdGVycywgb3Igd2l0aGluIGEgY29tbWVudCwgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCBvciBhIENEQVRBIHNlY3Rpb24uXG5cdFx0ICogSWYgdGhleSBhcmUgbmVlZGVkIGVsc2V3aGVyZSwgdGhleSBtdXN0IGJlIGVzY2FwZWQgdXNpbmcgZWl0aGVyIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgb3IgdGhlIHN0cmluZ3Ncblx0XHQgKiBgJmFtcDtgIGFuZCBgJmx0O2AgcmVzcGVjdGl2ZWx5LlxuXHRcdCAqIFRoZSByaWdodCBhbmdsZSBicmFja2V0ICg+KSBtYXkgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIHN0cmluZyBcIiAmZ3Q7IFwiLCBhbmQgbXVzdCwgZm9yIGNvbXBhdGliaWxpdHksXG5cdFx0ICogYmUgZXNjYXBlZCB1c2luZyBlaXRoZXIgYCZndDtgIG9yIGEgY2hhcmFjdGVyIHJlZmVyZW5jZSB3aGVuIGl0IGFwcGVhcnMgaW4gdGhlIHN0cmluZyBgXV0+YCBpbiBjb250ZW50LFxuXHRcdCAqIHdoZW4gdGhhdCBzdHJpbmcgaXMgbm90IG1hcmtpbmcgdGhlIGVuZCBvZiBhIENEQVRBIHNlY3Rpb24uXG5cdFx0ICpcblx0XHQgKiBJbiB0aGUgY29udGVudCBvZiBlbGVtZW50cywgY2hhcmFjdGVyIGRhdGEgaXMgYW55IHN0cmluZyBvZiBjaGFyYWN0ZXJzXG5cdFx0ICogd2hpY2ggZG9lcyBub3QgY29udGFpbiB0aGUgc3RhcnQtZGVsaW1pdGVyIG9mIGFueSBtYXJrdXBcblx0XHQgKiBhbmQgZG9lcyBub3QgaW5jbHVkZSB0aGUgQ0RBVEEtc2VjdGlvbi1jbG9zZSBkZWxpbWl0ZXIsIGBdXT5gLlxuXHRcdCAqXG5cdFx0ICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIveG1sLyNOVC1DaGFyRGF0YVxuXHRcdCAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RPTS1QYXJzaW5nLyN4bWwtc2VyaWFsaXppbmctYS10ZXh0LW5vZGVcblx0XHQgKi9cblx0XHRyZXR1cm4gYnVmLnB1c2gobm9kZS5kYXRhXG5cdFx0XHQucmVwbGFjZSgvWzwmPl0vZyxfeG1sRW5jb2Rlcilcblx0XHQpO1xuXHRjYXNlIENEQVRBX1NFQ1RJT05fTk9ERTpcblx0XHRyZXR1cm4gYnVmLnB1c2goICc8IVtDREFUQVsnLG5vZGUuZGF0YSwnXV0+Jyk7XG5cdGNhc2UgQ09NTUVOVF9OT0RFOlxuXHRcdHJldHVybiBidWYucHVzaCggXCI8IS0tXCIsbm9kZS5kYXRhLFwiLS0+XCIpO1xuXHRjYXNlIERPQ1VNRU5UX1RZUEVfTk9ERTpcblx0XHR2YXIgcHViaWQgPSBub2RlLnB1YmxpY0lkO1xuXHRcdHZhciBzeXNpZCA9IG5vZGUuc3lzdGVtSWQ7XG5cdFx0YnVmLnB1c2goJzwhRE9DVFlQRSAnLG5vZGUubmFtZSk7XG5cdFx0aWYocHViaWQpe1xuXHRcdFx0YnVmLnB1c2goJyBQVUJMSUMgJywgcHViaWQpO1xuXHRcdFx0aWYgKHN5c2lkICYmIHN5c2lkIT0nLicpIHtcblx0XHRcdFx0YnVmLnB1c2goJyAnLCBzeXNpZCk7XG5cdFx0XHR9XG5cdFx0XHRidWYucHVzaCgnPicpO1xuXHRcdH1lbHNlIGlmKHN5c2lkICYmIHN5c2lkIT0nLicpe1xuXHRcdFx0YnVmLnB1c2goJyBTWVNURU0gJywgc3lzaWQsICc+Jyk7XG5cdFx0fWVsc2V7XG5cdFx0XHR2YXIgc3ViID0gbm9kZS5pbnRlcm5hbFN1YnNldDtcblx0XHRcdGlmKHN1Yil7XG5cdFx0XHRcdGJ1Zi5wdXNoKFwiIFtcIixzdWIsXCJdXCIpO1xuXHRcdFx0fVxuXHRcdFx0YnVmLnB1c2goXCI+XCIpO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdGNhc2UgUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOlxuXHRcdHJldHVybiBidWYucHVzaCggXCI8P1wiLG5vZGUudGFyZ2V0LFwiIFwiLG5vZGUuZGF0YSxcIj8+XCIpO1xuXHRjYXNlIEVOVElUWV9SRUZFUkVOQ0VfTk9ERTpcblx0XHRyZXR1cm4gYnVmLnB1c2goICcmJyxub2RlLm5vZGVOYW1lLCc7Jyk7XG5cdC8vY2FzZSBFTlRJVFlfTk9ERTpcblx0Ly9jYXNlIE5PVEFUSU9OX05PREU6XG5cdGRlZmF1bHQ6XG5cdFx0YnVmLnB1c2goJz8/Jyxub2RlLm5vZGVOYW1lKTtcblx0fVxufVxuZnVuY3Rpb24gaW1wb3J0Tm9kZShkb2Msbm9kZSxkZWVwKXtcblx0dmFyIG5vZGUyO1xuXHRzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcblx0Y2FzZSBFTEVNRU5UX05PREU6XG5cdFx0bm9kZTIgPSBub2RlLmNsb25lTm9kZShmYWxzZSk7XG5cdFx0bm9kZTIub3duZXJEb2N1bWVudCA9IGRvYztcblx0XHQvL3ZhciBhdHRycyA9IG5vZGUyLmF0dHJpYnV0ZXM7XG5cdFx0Ly92YXIgbGVuID0gYXR0cnMubGVuZ3RoO1xuXHRcdC8vZm9yKHZhciBpPTA7aTxsZW47aSsrKXtcblx0XHRcdC8vbm9kZTIuc2V0QXR0cmlidXRlTm9kZU5TKGltcG9ydE5vZGUoZG9jLGF0dHJzLml0ZW0oaSksZGVlcCkpO1xuXHRcdC8vfVxuXHRjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG5cdFx0YnJlYWs7XG5cdGNhc2UgQVRUUklCVVRFX05PREU6XG5cdFx0ZGVlcCA9IHRydWU7XG5cdFx0YnJlYWs7XG5cdC8vY2FzZSBFTlRJVFlfUkVGRVJFTkNFX05PREU6XG5cdC8vY2FzZSBQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6XG5cdC8vLy9jYXNlIFRFWFRfTk9ERTpcblx0Ly9jYXNlIENEQVRBX1NFQ1RJT05fTk9ERTpcblx0Ly9jYXNlIENPTU1FTlRfTk9ERTpcblx0Ly9cdGRlZXAgPSBmYWxzZTtcblx0Ly9cdGJyZWFrO1xuXHQvL2Nhc2UgRE9DVU1FTlRfTk9ERTpcblx0Ly9jYXNlIERPQ1VNRU5UX1RZUEVfTk9ERTpcblx0Ly9jYW5ub3QgYmUgaW1wb3J0ZWQuXG5cdC8vY2FzZSBFTlRJVFlfTk9ERTpcblx0Ly9jYXNlIE5PVEFUSU9OX05PREXvvJpcblx0Ly9jYW4gbm90IGhpdCBpbiBsZXZlbDNcblx0Ly9kZWZhdWx0OnRocm93IGU7XG5cdH1cblx0aWYoIW5vZGUyKXtcblx0XHRub2RlMiA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKTsvL2ZhbHNlXG5cdH1cblx0bm9kZTIub3duZXJEb2N1bWVudCA9IGRvYztcblx0bm9kZTIucGFyZW50Tm9kZSA9IG51bGw7XG5cdGlmKGRlZXApe1xuXHRcdHZhciBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblx0XHR3aGlsZShjaGlsZCl7XG5cdFx0XHRub2RlMi5hcHBlbmRDaGlsZChpbXBvcnROb2RlKGRvYyxjaGlsZCxkZWVwKSk7XG5cdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbm9kZTI7XG59XG4vL1xuLy92YXIgX3JlbGF0aW9uTWFwID0ge2ZpcnN0Q2hpbGQ6MSxsYXN0Q2hpbGQ6MSxwcmV2aW91c1NpYmxpbmc6MSxuZXh0U2libGluZzoxLFxuLy9cdFx0XHRcdFx0YXR0cmlidXRlczoxLGNoaWxkTm9kZXM6MSxwYXJlbnROb2RlOjEsZG9jdW1lbnRFbGVtZW50OjEsZG9jdHlwZSx9O1xuZnVuY3Rpb24gY2xvbmVOb2RlKGRvYyxub2RlLGRlZXApe1xuXHR2YXIgbm9kZTIgPSBuZXcgbm9kZS5jb25zdHJ1Y3RvcigpO1xuXHRmb3IgKHZhciBuIGluIG5vZGUpIHtcblx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIG4pKSB7XG5cdFx0XHR2YXIgdiA9IG5vZGVbbl07XG5cdFx0XHRpZiAodHlwZW9mIHYgIT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRpZiAodiAhPSBub2RlMltuXSkge1xuXHRcdFx0XHRcdG5vZGUyW25dID0gdjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZihub2RlLmNoaWxkTm9kZXMpe1xuXHRcdG5vZGUyLmNoaWxkTm9kZXMgPSBuZXcgTm9kZUxpc3QoKTtcblx0fVxuXHRub2RlMi5vd25lckRvY3VtZW50ID0gZG9jO1xuXHRzd2l0Y2ggKG5vZGUyLm5vZGVUeXBlKSB7XG5cdGNhc2UgRUxFTUVOVF9OT0RFOlxuXHRcdHZhciBhdHRyc1x0PSBub2RlLmF0dHJpYnV0ZXM7XG5cdFx0dmFyIGF0dHJzMlx0PSBub2RlMi5hdHRyaWJ1dGVzID0gbmV3IE5hbWVkTm9kZU1hcCgpO1xuXHRcdHZhciBsZW4gPSBhdHRycy5sZW5ndGhcblx0XHRhdHRyczIuX293bmVyRWxlbWVudCA9IG5vZGUyO1xuXHRcdGZvcih2YXIgaT0wO2k8bGVuO2krKyl7XG5cdFx0XHRub2RlMi5zZXRBdHRyaWJ1dGVOb2RlKGNsb25lTm9kZShkb2MsYXR0cnMuaXRlbShpKSx0cnVlKSk7XG5cdFx0fVxuXHRcdGJyZWFrOztcblx0Y2FzZSBBVFRSSUJVVEVfTk9ERTpcblx0XHRkZWVwID0gdHJ1ZTtcblx0fVxuXHRpZihkZWVwKXtcblx0XHR2YXIgY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0d2hpbGUoY2hpbGQpe1xuXHRcdFx0bm9kZTIuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKGRvYyxjaGlsZCxkZWVwKSk7XG5cdFx0XHRjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbm9kZTI7XG59XG5cbmZ1bmN0aW9uIF9fc2V0X18ob2JqZWN0LGtleSx2YWx1ZSl7XG5cdG9iamVjdFtrZXldID0gdmFsdWVcbn1cbi8vZG8gZHluYW1pY1xudHJ5e1xuXHRpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpe1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMaXZlTm9kZUxpc3QucHJvdG90eXBlLCdsZW5ndGgnLHtcblx0XHRcdGdldDpmdW5jdGlvbigpe1xuXHRcdFx0XHRfdXBkYXRlTGl2ZUxpc3QodGhpcyk7XG5cdFx0XHRcdHJldHVybiB0aGlzLiQkbGVuZ3RoO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KE5vZGUucHJvdG90eXBlLCd0ZXh0Q29udGVudCcse1xuXHRcdFx0Z2V0OmZ1bmN0aW9uKCl7XG5cdFx0XHRcdHJldHVybiBnZXRUZXh0Q29udGVudCh0aGlzKTtcblx0XHRcdH0sXG5cblx0XHRcdHNldDpmdW5jdGlvbihkYXRhKXtcblx0XHRcdFx0c3dpdGNoKHRoaXMubm9kZVR5cGUpe1xuXHRcdFx0XHRjYXNlIEVMRU1FTlRfTk9ERTpcblx0XHRcdFx0Y2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuXHRcdFx0XHRcdHdoaWxlKHRoaXMuZmlyc3RDaGlsZCl7XG5cdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUNoaWxkKHRoaXMuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKGRhdGEgfHwgU3RyaW5nKGRhdGEpKXtcblx0XHRcdFx0XHRcdHRoaXMuYXBwZW5kQ2hpbGQodGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRhdGEpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aGlzLmRhdGEgPSBkYXRhO1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSBkYXRhO1xuXHRcdFx0XHRcdHRoaXMubm9kZVZhbHVlID0gZGF0YTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRmdW5jdGlvbiBnZXRUZXh0Q29udGVudChub2RlKXtcblx0XHRcdHN3aXRjaChub2RlLm5vZGVUeXBlKXtcblx0XHRcdGNhc2UgRUxFTUVOVF9OT0RFOlxuXHRcdFx0Y2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuXHRcdFx0XHR2YXIgYnVmID0gW107XG5cdFx0XHRcdG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cdFx0XHRcdHdoaWxlKG5vZGUpe1xuXHRcdFx0XHRcdGlmKG5vZGUubm9kZVR5cGUhPT03ICYmIG5vZGUubm9kZVR5cGUgIT09OCl7XG5cdFx0XHRcdFx0XHRidWYucHVzaChnZXRUZXh0Q29udGVudChub2RlKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBidWYuam9pbignJyk7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gbm9kZS5ub2RlVmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0X19zZXRfXyA9IGZ1bmN0aW9uKG9iamVjdCxrZXksdmFsdWUpe1xuXHRcdFx0Ly9jb25zb2xlLmxvZyh2YWx1ZSlcblx0XHRcdG9iamVjdFsnJCQnK2tleV0gPSB2YWx1ZVxuXHRcdH1cblx0fVxufWNhdGNoKGUpey8vaWU4XG59XG5cbi8vaWYodHlwZW9mIHJlcXVpcmUgPT0gJ2Z1bmN0aW9uJyl7XG5cdGV4cG9ydHMuRG9jdW1lbnRUeXBlID0gRG9jdW1lbnRUeXBlO1xuXHRleHBvcnRzLkRPTUV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjtcblx0ZXhwb3J0cy5ET01JbXBsZW1lbnRhdGlvbiA9IERPTUltcGxlbWVudGF0aW9uO1xuXHRleHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuXHRleHBvcnRzLk5vZGUgPSBOb2RlO1xuXHRleHBvcnRzLk5vZGVMaXN0ID0gTm9kZUxpc3Q7XG5cdGV4cG9ydHMuWE1MU2VyaWFsaXplciA9IFhNTFNlcmlhbGl6ZXI7XG4vL31cblxufSx7XCIuL2NvbnZlbnRpb25zXCI6NDF9XSw0NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgZnJlZXplID0gcmVxdWlyZSgnLi9jb252ZW50aW9ucycpLmZyZWV6ZTtcblxuLyoqXG4gKiBUaGUgZW50aXRpZXMgdGhhdCBhcmUgcHJlZGVmaW5lZCBpbiBldmVyeSBYTUwgZG9jdW1lbnQuXG4gKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI3NlYy1wcmVkZWZpbmVkLWVudCBXM0MgWE1MIDEuMVxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvMjAwOC9SRUMteG1sLTIwMDgxMTI2LyNzZWMtcHJlZGVmaW5lZC1lbnQgVzNDIFhNTCAxLjBcbiAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9YTUxfYW5kX0hUTUxfY2hhcmFjdGVyX2VudGl0eV9yZWZlcmVuY2VzI1ByZWRlZmluZWRfZW50aXRpZXNfaW5fWE1MIFdpa2lwZWRpYVxuICovXG5leHBvcnRzLlhNTF9FTlRJVElFUyA9IGZyZWV6ZSh7YW1wOicmJywgYXBvczpcIidcIiwgZ3Q6Jz4nLCBsdDonPCcsIHF1b3Q6J1wiJ30pXG5cbi8qKlxuICogQSBtYXAgb2YgY3VycmVudGx5IDI0MSBlbnRpdGllcyB0aGF0IGFyZSBkZXRlY3RlZCBpbiBhbiBIVE1MIGRvY3VtZW50LlxuICogVGhleSBjb250YWluIGFsbCBlbnRyaWVzIGZyb20gYFhNTF9FTlRJVElFU2AuXG4gKlxuICogQHNlZSBYTUxfRU5USVRJRVNcbiAqIEBzZWUgRE9NUGFyc2VyLnBhcnNlRnJvbVN0cmluZ1xuICogQHNlZSBET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuY3JlYXRlSFRNTERvY3VtZW50XG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VzIFdIQVRXRyBIVE1MKDUpIFNwZWNcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC1lbnRpdHktbmFtZXMvIFczQyBYTUwgRW50aXR5IE5hbWVzXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNC9zZ21sL2VudGl0aWVzLmh0bWwgVzNDIEhUTUw0L1NHTUxcbiAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9YTUxfYW5kX0hUTUxfY2hhcmFjdGVyX2VudGl0eV9yZWZlcmVuY2VzI0NoYXJhY3Rlcl9lbnRpdHlfcmVmZXJlbmNlc19pbl9IVE1MIFdpa2lwZWRpYSAoSFRNTClcbiAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGlzdF9vZl9YTUxfYW5kX0hUTUxfY2hhcmFjdGVyX2VudGl0eV9yZWZlcmVuY2VzI0VudGl0aWVzX3JlcHJlc2VudGluZ19zcGVjaWFsX2NoYXJhY3RlcnNfaW5fWEhUTUwgV2lrcGVkaWEgKFhIVE1MKVxuICovXG5leHBvcnRzLkhUTUxfRU5USVRJRVMgPSBmcmVlemUoe1xuICAgICAgIGx0OiAnPCcsXG4gICAgICAgZ3Q6ICc+JyxcbiAgICAgICBhbXA6ICcmJyxcbiAgICAgICBxdW90OiAnXCInLFxuICAgICAgIGFwb3M6IFwiJ1wiLFxuICAgICAgIEFncmF2ZTogXCLDgFwiLFxuICAgICAgIEFhY3V0ZTogXCLDgVwiLFxuICAgICAgIEFjaXJjOiBcIsOCXCIsXG4gICAgICAgQXRpbGRlOiBcIsODXCIsXG4gICAgICAgQXVtbDogXCLDhFwiLFxuICAgICAgIEFyaW5nOiBcIsOFXCIsXG4gICAgICAgQUVsaWc6IFwiw4ZcIixcbiAgICAgICBDY2VkaWw6IFwiw4dcIixcbiAgICAgICBFZ3JhdmU6IFwiw4hcIixcbiAgICAgICBFYWN1dGU6IFwiw4lcIixcbiAgICAgICBFY2lyYzogXCLDilwiLFxuICAgICAgIEV1bWw6IFwiw4tcIixcbiAgICAgICBJZ3JhdmU6IFwiw4xcIixcbiAgICAgICBJYWN1dGU6IFwiw41cIixcbiAgICAgICBJY2lyYzogXCLDjlwiLFxuICAgICAgIEl1bWw6IFwiw49cIixcbiAgICAgICBFVEg6IFwiw5BcIixcbiAgICAgICBOdGlsZGU6IFwiw5FcIixcbiAgICAgICBPZ3JhdmU6IFwiw5JcIixcbiAgICAgICBPYWN1dGU6IFwiw5NcIixcbiAgICAgICBPY2lyYzogXCLDlFwiLFxuICAgICAgIE90aWxkZTogXCLDlVwiLFxuICAgICAgIE91bWw6IFwiw5ZcIixcbiAgICAgICBPc2xhc2g6IFwiw5hcIixcbiAgICAgICBVZ3JhdmU6IFwiw5lcIixcbiAgICAgICBVYWN1dGU6IFwiw5pcIixcbiAgICAgICBVY2lyYzogXCLDm1wiLFxuICAgICAgIFV1bWw6IFwiw5xcIixcbiAgICAgICBZYWN1dGU6IFwiw51cIixcbiAgICAgICBUSE9STjogXCLDnlwiLFxuICAgICAgIHN6bGlnOiBcIsOfXCIsXG4gICAgICAgYWdyYXZlOiBcIsOgXCIsXG4gICAgICAgYWFjdXRlOiBcIsOhXCIsXG4gICAgICAgYWNpcmM6IFwiw6JcIixcbiAgICAgICBhdGlsZGU6IFwiw6NcIixcbiAgICAgICBhdW1sOiBcIsOkXCIsXG4gICAgICAgYXJpbmc6IFwiw6VcIixcbiAgICAgICBhZWxpZzogXCLDplwiLFxuICAgICAgIGNjZWRpbDogXCLDp1wiLFxuICAgICAgIGVncmF2ZTogXCLDqFwiLFxuICAgICAgIGVhY3V0ZTogXCLDqVwiLFxuICAgICAgIGVjaXJjOiBcIsOqXCIsXG4gICAgICAgZXVtbDogXCLDq1wiLFxuICAgICAgIGlncmF2ZTogXCLDrFwiLFxuICAgICAgIGlhY3V0ZTogXCLDrVwiLFxuICAgICAgIGljaXJjOiBcIsOuXCIsXG4gICAgICAgaXVtbDogXCLDr1wiLFxuICAgICAgIGV0aDogXCLDsFwiLFxuICAgICAgIG50aWxkZTogXCLDsVwiLFxuICAgICAgIG9ncmF2ZTogXCLDslwiLFxuICAgICAgIG9hY3V0ZTogXCLDs1wiLFxuICAgICAgIG9jaXJjOiBcIsO0XCIsXG4gICAgICAgb3RpbGRlOiBcIsO1XCIsXG4gICAgICAgb3VtbDogXCLDtlwiLFxuICAgICAgIG9zbGFzaDogXCLDuFwiLFxuICAgICAgIHVncmF2ZTogXCLDuVwiLFxuICAgICAgIHVhY3V0ZTogXCLDulwiLFxuICAgICAgIHVjaXJjOiBcIsO7XCIsXG4gICAgICAgdXVtbDogXCLDvFwiLFxuICAgICAgIHlhY3V0ZTogXCLDvVwiLFxuICAgICAgIHRob3JuOiBcIsO+XCIsXG4gICAgICAgeXVtbDogXCLDv1wiLFxuICAgICAgIG5ic3A6IFwiXFx1MDBhMFwiLFxuICAgICAgIGlleGNsOiBcIsKhXCIsXG4gICAgICAgY2VudDogXCLColwiLFxuICAgICAgIHBvdW5kOiBcIsKjXCIsXG4gICAgICAgY3VycmVuOiBcIsKkXCIsXG4gICAgICAgeWVuOiBcIsKlXCIsXG4gICAgICAgYnJ2YmFyOiBcIsKmXCIsXG4gICAgICAgc2VjdDogXCLCp1wiLFxuICAgICAgIHVtbDogXCLCqFwiLFxuICAgICAgIGNvcHk6IFwiwqlcIixcbiAgICAgICBvcmRmOiBcIsKqXCIsXG4gICAgICAgbGFxdW86IFwiwqtcIixcbiAgICAgICBub3Q6IFwiwqxcIixcbiAgICAgICBzaHk6IFwiwq3CrVwiLFxuICAgICAgIHJlZzogXCLCrlwiLFxuICAgICAgIG1hY3I6IFwiwq9cIixcbiAgICAgICBkZWc6IFwiwrBcIixcbiAgICAgICBwbHVzbW46IFwiwrFcIixcbiAgICAgICBzdXAyOiBcIsKyXCIsXG4gICAgICAgc3VwMzogXCLCs1wiLFxuICAgICAgIGFjdXRlOiBcIsK0XCIsXG4gICAgICAgbWljcm86IFwiwrVcIixcbiAgICAgICBwYXJhOiBcIsK2XCIsXG4gICAgICAgbWlkZG90OiBcIsK3XCIsXG4gICAgICAgY2VkaWw6IFwiwrhcIixcbiAgICAgICBzdXAxOiBcIsK5XCIsXG4gICAgICAgb3JkbTogXCLCulwiLFxuICAgICAgIHJhcXVvOiBcIsK7XCIsXG4gICAgICAgZnJhYzE0OiBcIsK8XCIsXG4gICAgICAgZnJhYzEyOiBcIsK9XCIsXG4gICAgICAgZnJhYzM0OiBcIsK+XCIsXG4gICAgICAgaXF1ZXN0OiBcIsK/XCIsXG4gICAgICAgdGltZXM6IFwiw5dcIixcbiAgICAgICBkaXZpZGU6IFwiw7dcIixcbiAgICAgICBmb3JhbGw6IFwi4oiAXCIsXG4gICAgICAgcGFydDogXCLiiIJcIixcbiAgICAgICBleGlzdDogXCLiiINcIixcbiAgICAgICBlbXB0eTogXCLiiIVcIixcbiAgICAgICBuYWJsYTogXCLiiIdcIixcbiAgICAgICBpc2luOiBcIuKIiFwiLFxuICAgICAgIG5vdGluOiBcIuKIiVwiLFxuICAgICAgIG5pOiBcIuKIi1wiLFxuICAgICAgIHByb2Q6IFwi4oiPXCIsXG4gICAgICAgc3VtOiBcIuKIkVwiLFxuICAgICAgIG1pbnVzOiBcIuKIklwiLFxuICAgICAgIGxvd2FzdDogXCLiiJdcIixcbiAgICAgICByYWRpYzogXCLiiJpcIixcbiAgICAgICBwcm9wOiBcIuKInVwiLFxuICAgICAgIGluZmluOiBcIuKInlwiLFxuICAgICAgIGFuZzogXCLiiKBcIixcbiAgICAgICBhbmQ6IFwi4oinXCIsXG4gICAgICAgb3I6IFwi4oioXCIsXG4gICAgICAgY2FwOiBcIuKIqVwiLFxuICAgICAgIGN1cDogXCLiiKpcIixcbiAgICAgICAnaW50JzogXCLiiKtcIixcbiAgICAgICB0aGVyZTQ6IFwi4oi0XCIsXG4gICAgICAgc2ltOiBcIuKIvFwiLFxuICAgICAgIGNvbmc6IFwi4omFXCIsXG4gICAgICAgYXN5bXA6IFwi4omIXCIsXG4gICAgICAgbmU6IFwi4omgXCIsXG4gICAgICAgZXF1aXY6IFwi4omhXCIsXG4gICAgICAgbGU6IFwi4omkXCIsXG4gICAgICAgZ2U6IFwi4omlXCIsXG4gICAgICAgc3ViOiBcIuKKglwiLFxuICAgICAgIHN1cDogXCLiioNcIixcbiAgICAgICBuc3ViOiBcIuKKhFwiLFxuICAgICAgIHN1YmU6IFwi4oqGXCIsXG4gICAgICAgc3VwZTogXCLiiodcIixcbiAgICAgICBvcGx1czogXCLiipVcIixcbiAgICAgICBvdGltZXM6IFwi4oqXXCIsXG4gICAgICAgcGVycDogXCLiiqVcIixcbiAgICAgICBzZG90OiBcIuKLhVwiLFxuICAgICAgIEFscGhhOiBcIs6RXCIsXG4gICAgICAgQmV0YTogXCLOklwiLFxuICAgICAgIEdhbW1hOiBcIs6TXCIsXG4gICAgICAgRGVsdGE6IFwizpRcIixcbiAgICAgICBFcHNpbG9uOiBcIs6VXCIsXG4gICAgICAgWmV0YTogXCLOllwiLFxuICAgICAgIEV0YTogXCLOl1wiLFxuICAgICAgIFRoZXRhOiBcIs6YXCIsXG4gICAgICAgSW90YTogXCLOmVwiLFxuICAgICAgIEthcHBhOiBcIs6aXCIsXG4gICAgICAgTGFtYmRhOiBcIs6bXCIsXG4gICAgICAgTXU6IFwizpxcIixcbiAgICAgICBOdTogXCLOnVwiLFxuICAgICAgIFhpOiBcIs6eXCIsXG4gICAgICAgT21pY3JvbjogXCLOn1wiLFxuICAgICAgIFBpOiBcIs6gXCIsXG4gICAgICAgUmhvOiBcIs6hXCIsXG4gICAgICAgU2lnbWE6IFwizqNcIixcbiAgICAgICBUYXU6IFwizqRcIixcbiAgICAgICBVcHNpbG9uOiBcIs6lXCIsXG4gICAgICAgUGhpOiBcIs6mXCIsXG4gICAgICAgQ2hpOiBcIs6nXCIsXG4gICAgICAgUHNpOiBcIs6oXCIsXG4gICAgICAgT21lZ2E6IFwizqlcIixcbiAgICAgICBhbHBoYTogXCLOsVwiLFxuICAgICAgIGJldGE6IFwizrJcIixcbiAgICAgICBnYW1tYTogXCLOs1wiLFxuICAgICAgIGRlbHRhOiBcIs60XCIsXG4gICAgICAgZXBzaWxvbjogXCLOtVwiLFxuICAgICAgIHpldGE6IFwizrZcIixcbiAgICAgICBldGE6IFwizrdcIixcbiAgICAgICB0aGV0YTogXCLOuFwiLFxuICAgICAgIGlvdGE6IFwizrlcIixcbiAgICAgICBrYXBwYTogXCLOulwiLFxuICAgICAgIGxhbWJkYTogXCLOu1wiLFxuICAgICAgIG11OiBcIs68XCIsXG4gICAgICAgbnU6IFwizr1cIixcbiAgICAgICB4aTogXCLOvlwiLFxuICAgICAgIG9taWNyb246IFwizr9cIixcbiAgICAgICBwaTogXCLPgFwiLFxuICAgICAgIHJobzogXCLPgVwiLFxuICAgICAgIHNpZ21hZjogXCLPglwiLFxuICAgICAgIHNpZ21hOiBcIs+DXCIsXG4gICAgICAgdGF1OiBcIs+EXCIsXG4gICAgICAgdXBzaWxvbjogXCLPhVwiLFxuICAgICAgIHBoaTogXCLPhlwiLFxuICAgICAgIGNoaTogXCLPh1wiLFxuICAgICAgIHBzaTogXCLPiFwiLFxuICAgICAgIG9tZWdhOiBcIs+JXCIsXG4gICAgICAgdGhldGFzeW06IFwiz5FcIixcbiAgICAgICB1cHNpaDogXCLPklwiLFxuICAgICAgIHBpdjogXCLPllwiLFxuICAgICAgIE9FbGlnOiBcIsWSXCIsXG4gICAgICAgb2VsaWc6IFwixZNcIixcbiAgICAgICBTY2Fyb246IFwixaBcIixcbiAgICAgICBzY2Fyb246IFwixaFcIixcbiAgICAgICBZdW1sOiBcIsW4XCIsXG4gICAgICAgZm5vZjogXCLGklwiLFxuICAgICAgIGNpcmM6IFwiy4ZcIixcbiAgICAgICB0aWxkZTogXCLLnFwiLFxuICAgICAgIGVuc3A6IFwi4oCCXCIsXG4gICAgICAgZW1zcDogXCLigINcIixcbiAgICAgICB0aGluc3A6IFwi4oCJXCIsXG4gICAgICAgenduajogXCLigIxcIixcbiAgICAgICB6d2o6IFwi4oCNXCIsXG4gICAgICAgbHJtOiBcIuKAjlwiLFxuICAgICAgIHJsbTogXCLigI9cIixcbiAgICAgICBuZGFzaDogXCLigJNcIixcbiAgICAgICBtZGFzaDogXCLigJRcIixcbiAgICAgICBsc3F1bzogXCLigJhcIixcbiAgICAgICByc3F1bzogXCLigJlcIixcbiAgICAgICBzYnF1bzogXCLigJpcIixcbiAgICAgICBsZHF1bzogXCLigJxcIixcbiAgICAgICByZHF1bzogXCLigJ1cIixcbiAgICAgICBiZHF1bzogXCLigJ5cIixcbiAgICAgICBkYWdnZXI6IFwi4oCgXCIsXG4gICAgICAgRGFnZ2VyOiBcIuKAoVwiLFxuICAgICAgIGJ1bGw6IFwi4oCiXCIsXG4gICAgICAgaGVsbGlwOiBcIuKAplwiLFxuICAgICAgIHBlcm1pbDogXCLigLBcIixcbiAgICAgICBwcmltZTogXCLigLJcIixcbiAgICAgICBQcmltZTogXCLigLNcIixcbiAgICAgICBsc2FxdW86IFwi4oC5XCIsXG4gICAgICAgcnNhcXVvOiBcIuKAulwiLFxuICAgICAgIG9saW5lOiBcIuKAvlwiLFxuICAgICAgIGV1cm86IFwi4oKsXCIsXG4gICAgICAgdHJhZGU6IFwi4oSiXCIsXG4gICAgICAgbGFycjogXCLihpBcIixcbiAgICAgICB1YXJyOiBcIuKGkVwiLFxuICAgICAgIHJhcnI6IFwi4oaSXCIsXG4gICAgICAgZGFycjogXCLihpNcIixcbiAgICAgICBoYXJyOiBcIuKGlFwiLFxuICAgICAgIGNyYXJyOiBcIuKGtVwiLFxuICAgICAgIGxjZWlsOiBcIuKMiFwiLFxuICAgICAgIHJjZWlsOiBcIuKMiVwiLFxuICAgICAgIGxmbG9vcjogXCLijIpcIixcbiAgICAgICByZmxvb3I6IFwi4oyLXCIsXG4gICAgICAgbG96OiBcIuKXilwiLFxuICAgICAgIHNwYWRlczogXCLimaBcIixcbiAgICAgICBjbHViczogXCLimaNcIixcbiAgICAgICBoZWFydHM6IFwi4pmlXCIsXG4gICAgICAgZGlhbXM6IFwi4pmmXCJcbn0pO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBgSFRNTF9FTlRJVElFU2AgaW5zdGVhZFxuICogQHNlZSBIVE1MX0VOVElUSUVTXG4gKi9cbmV4cG9ydHMuZW50aXR5TWFwID0gZXhwb3J0cy5IVE1MX0VOVElUSUVTXG5cbn0se1wiLi9jb252ZW50aW9uc1wiOjQxfV0sNDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIGRvbSA9IHJlcXVpcmUoJy4vZG9tJylcbmV4cG9ydHMuRE9NSW1wbGVtZW50YXRpb24gPSBkb20uRE9NSW1wbGVtZW50YXRpb25cbmV4cG9ydHMuWE1MU2VyaWFsaXplciA9IGRvbS5YTUxTZXJpYWxpemVyXG5leHBvcnRzLkRPTVBhcnNlciA9IHJlcXVpcmUoJy4vZG9tLXBhcnNlcicpLkRPTVBhcnNlclxuXG59LHtcIi4vZG9tXCI6NDMsXCIuL2RvbS1wYXJzZXJcIjo0Mn1dLDQ2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBOQU1FU1BBQ0UgPSByZXF1aXJlKFwiLi9jb252ZW50aW9uc1wiKS5OQU1FU1BBQ0U7XG5cbi8vWzRdICAgXHROYW1lU3RhcnRDaGFyXHQgICA6Oj0gICBcdFwiOlwiIHwgW0EtWl0gfCBcIl9cIiB8IFthLXpdIHwgWyN4QzAtI3hENl0gfCBbI3hEOC0jeEY2XSB8IFsjeEY4LSN4MkZGXSB8IFsjeDM3MC0jeDM3RF0gfCBbI3gzN0YtI3gxRkZGXSB8IFsjeDIwMEMtI3gyMDBEXSB8IFsjeDIwNzAtI3gyMThGXSB8IFsjeDJDMDAtI3gyRkVGXSB8IFsjeDMwMDEtI3hEN0ZGXSB8IFsjeEY5MDAtI3hGRENGXSB8IFsjeEZERjAtI3hGRkZEXSB8IFsjeDEwMDAwLSN4RUZGRkZdXG4vL1s0YV0gICBcdE5hbWVDaGFyXHQgICA6Oj0gICBcdE5hbWVTdGFydENoYXIgfCBcIi1cIiB8IFwiLlwiIHwgWzAtOV0gfCAjeEI3IHwgWyN4MDMwMC0jeDAzNkZdIHwgWyN4MjAzRi0jeDIwNDBdXG4vL1s1XSAgIFx0TmFtZVx0ICAgOjo9ICAgXHROYW1lU3RhcnRDaGFyIChOYW1lQ2hhcikqXG52YXIgbmFtZVN0YXJ0Q2hhciA9IC9bQS1aX2EtelxceEMwLVxceEQ2XFx4RDgtXFx4RjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdLy8vXFx1MTAwMDAtXFx1RUZGRkZcbnZhciBuYW1lQ2hhciA9IG5ldyBSZWdFeHAoXCJbXFxcXC1cXFxcLjAtOVwiK25hbWVTdGFydENoYXIuc291cmNlLnNsaWNlKDEsLTEpK1wiXFxcXHUwMEI3XFxcXHUwMzAwLVxcXFx1MDM2RlxcXFx1MjAzRi1cXFxcdTIwNDBdXCIpO1xudmFyIHRhZ05hbWVQYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXicrbmFtZVN0YXJ0Q2hhci5zb3VyY2UrbmFtZUNoYXIuc291cmNlKycqKD86XFw6JytuYW1lU3RhcnRDaGFyLnNvdXJjZStuYW1lQ2hhci5zb3VyY2UrJyopPyQnKTtcbi8vdmFyIHRhZ05hbWVQYXR0ZXJuID0gL15bYS16QS1aX11bXFx3XFwtXFwuXSooPzpcXDpbYS16QS1aX11bXFx3XFwtXFwuXSopPyQvXG4vL3ZhciBoYW5kbGVycyA9ICdyZXNvbHZlRW50aXR5LGdldEV4dGVybmFsU3Vic2V0LGNoYXJhY3RlcnMsZW5kRG9jdW1lbnQsZW5kRWxlbWVudCxlbmRQcmVmaXhNYXBwaW5nLGlnbm9yYWJsZVdoaXRlc3BhY2UscHJvY2Vzc2luZ0luc3RydWN0aW9uLHNldERvY3VtZW50TG9jYXRvcixza2lwcGVkRW50aXR5LHN0YXJ0RG9jdW1lbnQsc3RhcnRFbGVtZW50LHN0YXJ0UHJlZml4TWFwcGluZyxub3RhdGlvbkRlY2wsdW5wYXJzZWRFbnRpdHlEZWNsLGVycm9yLGZhdGFsRXJyb3Isd2FybmluZyxhdHRyaWJ1dGVEZWNsLGVsZW1lbnREZWNsLGV4dGVybmFsRW50aXR5RGVjbCxpbnRlcm5hbEVudGl0eURlY2wsY29tbWVudCxlbmRDREFUQSxlbmREVEQsZW5kRW50aXR5LHN0YXJ0Q0RBVEEsc3RhcnREVEQsc3RhcnRFbnRpdHknLnNwbGl0KCcsJylcblxuLy9TX1RBRyxcdFNfQVRUUixcdFNfRVEsXHRTX0FUVFJfTk9RVU9UX1ZBTFVFXG4vL1NfQVRUUl9TUEFDRSxcdFNfQVRUUl9FTkQsXHRTX1RBR19TUEFDRSwgU19UQUdfQ0xPU0VcbnZhciBTX1RBRyA9IDA7Ly90YWcgbmFtZSBvZmZlcnJpbmdcbnZhciBTX0FUVFIgPSAxOy8vYXR0ciBuYW1lIG9mZmVycmluZ1xudmFyIFNfQVRUUl9TUEFDRT0yOy8vYXR0ciBuYW1lIGVuZCBhbmQgc3BhY2Ugb2ZmZXJcbnZhciBTX0VRID0gMzsvLz1zcGFjZT9cbnZhciBTX0FUVFJfTk9RVU9UX1ZBTFVFID0gNDsvL2F0dHIgdmFsdWUobm8gcXVvdCB2YWx1ZSBvbmx5KVxudmFyIFNfQVRUUl9FTkQgPSA1Oy8vYXR0ciB2YWx1ZSBlbmQgYW5kIG5vIHNwYWNlKHF1b3QgZW5kKVxudmFyIFNfVEFHX1NQQUNFID0gNjsvLyhhdHRyIHZhbHVlIGVuZCB8fCB0YWcgZW5kICkgJiYgKHNwYWNlIG9mZmVyKVxudmFyIFNfVEFHX0NMT1NFID0gNzsvL2Nsb3NlZCBlbDxlbCAvPlxuXG4vKipcbiAqIENyZWF0ZXMgYW4gZXJyb3IgdGhhdCB3aWxsIG5vdCBiZSBjYXVnaHQgYnkgWE1MUmVhZGVyIGFrYSB0aGUgU0FYIHBhcnNlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICogQHBhcmFtIHthbnk/fSBsb2NhdG9yIE9wdGlvbmFsLCBjYW4gcHJvdmlkZSBkZXRhaWxzIGFib3V0IHRoZSBsb2NhdGlvbiBpbiB0aGUgc291cmNlXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gUGFyc2VFcnJvcihtZXNzYWdlLCBsb2NhdG9yKSB7XG5cdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2Vcblx0dGhpcy5sb2NhdG9yID0gbG9jYXRvclxuXHRpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUGFyc2VFcnJvcik7XG59XG5QYXJzZUVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuUGFyc2VFcnJvci5wcm90b3R5cGUubmFtZSA9IFBhcnNlRXJyb3IubmFtZVxuXG5mdW5jdGlvbiBYTUxSZWFkZXIoKXtcblxufVxuXG5YTUxSZWFkZXIucHJvdG90eXBlID0ge1xuXHRwYXJzZTpmdW5jdGlvbihzb3VyY2UsZGVmYXVsdE5TTWFwLGVudGl0eU1hcCl7XG5cdFx0dmFyIGRvbUJ1aWxkZXIgPSB0aGlzLmRvbUJ1aWxkZXI7XG5cdFx0ZG9tQnVpbGRlci5zdGFydERvY3VtZW50KCk7XG5cdFx0X2NvcHkoZGVmYXVsdE5TTWFwICxkZWZhdWx0TlNNYXAgPSB7fSlcblx0XHRwYXJzZShzb3VyY2UsZGVmYXVsdE5TTWFwLGVudGl0eU1hcCxcblx0XHRcdFx0ZG9tQnVpbGRlcix0aGlzLmVycm9ySGFuZGxlcik7XG5cdFx0ZG9tQnVpbGRlci5lbmREb2N1bWVudCgpO1xuXHR9XG59XG5mdW5jdGlvbiBwYXJzZShzb3VyY2UsZGVmYXVsdE5TTWFwQ29weSxlbnRpdHlNYXAsZG9tQnVpbGRlcixlcnJvckhhbmRsZXIpe1xuXHRmdW5jdGlvbiBmaXhlZEZyb21DaGFyQ29kZShjb2RlKSB7XG5cdFx0Ly8gU3RyaW5nLnByb3RvdHlwZS5mcm9tQ2hhckNvZGUgZG9lcyBub3Qgc3VwcG9ydHNcblx0XHQvLyA+IDIgYnl0ZXMgdW5pY29kZSBjaGFycyBkaXJlY3RseVxuXHRcdGlmIChjb2RlID4gMHhmZmZmKSB7XG5cdFx0XHRjb2RlIC09IDB4MTAwMDA7XG5cdFx0XHR2YXIgc3Vycm9nYXRlMSA9IDB4ZDgwMCArIChjb2RlID4+IDEwKVxuXHRcdFx0XHQsIHN1cnJvZ2F0ZTIgPSAweGRjMDAgKyAoY29kZSAmIDB4M2ZmKTtcblxuXHRcdFx0cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoc3Vycm9nYXRlMSwgc3Vycm9nYXRlMik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXHRcdH1cblx0fVxuXHRmdW5jdGlvbiBlbnRpdHlSZXBsYWNlcihhKXtcblx0XHR2YXIgayA9IGEuc2xpY2UoMSwtMSk7XG5cdFx0aWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVudGl0eU1hcCwgaykpIHtcblx0XHRcdHJldHVybiBlbnRpdHlNYXBba107XG5cdFx0fWVsc2UgaWYoay5jaGFyQXQoMCkgPT09ICcjJyl7XG5cdFx0XHRyZXR1cm4gZml4ZWRGcm9tQ2hhckNvZGUocGFyc2VJbnQoay5zdWJzdHIoMSkucmVwbGFjZSgneCcsJzB4JykpKVxuXHRcdH1lbHNle1xuXHRcdFx0ZXJyb3JIYW5kbGVyLmVycm9yKCdlbnRpdHkgbm90IGZvdW5kOicrYSk7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gYXBwZW5kVGV4dChlbmQpey8vaGFzIHNvbWUgYnVnc1xuXHRcdGlmKGVuZD5zdGFydCl7XG5cdFx0XHR2YXIgeHQgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LGVuZCkucmVwbGFjZSgvJiM/XFx3KzsvZyxlbnRpdHlSZXBsYWNlcik7XG5cdFx0XHRsb2NhdG9yJiZwb3NpdGlvbihzdGFydCk7XG5cdFx0XHRkb21CdWlsZGVyLmNoYXJhY3RlcnMoeHQsMCxlbmQtc3RhcnQpO1xuXHRcdFx0c3RhcnQgPSBlbmRcblx0XHR9XG5cdH1cblx0ZnVuY3Rpb24gcG9zaXRpb24ocCxtKXtcblx0XHR3aGlsZShwPj1saW5lRW5kICYmIChtID0gbGluZVBhdHRlcm4uZXhlYyhzb3VyY2UpKSl7XG5cdFx0XHRsaW5lU3RhcnQgPSBtLmluZGV4O1xuXHRcdFx0bGluZUVuZCA9IGxpbmVTdGFydCArIG1bMF0ubGVuZ3RoO1xuXHRcdFx0bG9jYXRvci5saW5lTnVtYmVyKys7XG5cdFx0XHQvL2NvbnNvbGUubG9nKCdsaW5lKys6Jyxsb2NhdG9yLHN0YXJ0UG9zLGVuZFBvcylcblx0XHR9XG5cdFx0bG9jYXRvci5jb2x1bW5OdW1iZXIgPSBwLWxpbmVTdGFydCsxO1xuXHR9XG5cdHZhciBsaW5lU3RhcnQgPSAwO1xuXHR2YXIgbGluZUVuZCA9IDA7XG5cdHZhciBsaW5lUGF0dGVybiA9IC8uKig/Olxcclxcbj98XFxuKXwuKiQvZ1xuXHR2YXIgbG9jYXRvciA9IGRvbUJ1aWxkZXIubG9jYXRvcjtcblxuXHR2YXIgcGFyc2VTdGFjayA9IFt7Y3VycmVudE5TTWFwOmRlZmF1bHROU01hcENvcHl9XVxuXHR2YXIgY2xvc2VNYXAgPSB7fTtcblx0dmFyIHN0YXJ0ID0gMDtcblx0d2hpbGUodHJ1ZSl7XG5cdFx0dHJ5e1xuXHRcdFx0dmFyIHRhZ1N0YXJ0ID0gc291cmNlLmluZGV4T2YoJzwnLHN0YXJ0KTtcblx0XHRcdGlmKHRhZ1N0YXJ0PDApe1xuXHRcdFx0XHRpZighc291cmNlLnN1YnN0cihzdGFydCkubWF0Y2goL15cXHMqJC8pKXtcblx0XHRcdFx0XHR2YXIgZG9jID0gZG9tQnVpbGRlci5kb2M7XG5cdCAgICBcdFx0XHR2YXIgdGV4dCA9IGRvYy5jcmVhdGVUZXh0Tm9kZShzb3VyY2Uuc3Vic3RyKHN0YXJ0KSk7XG5cdCAgICBcdFx0XHRkb2MuYXBwZW5kQ2hpbGQodGV4dCk7XG5cdCAgICBcdFx0XHRkb21CdWlsZGVyLmN1cnJlbnRFbGVtZW50ID0gdGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZih0YWdTdGFydD5zdGFydCl7XG5cdFx0XHRcdGFwcGVuZFRleHQodGFnU3RhcnQpO1xuXHRcdFx0fVxuXHRcdFx0c3dpdGNoKHNvdXJjZS5jaGFyQXQodGFnU3RhcnQrMSkpe1xuXHRcdFx0Y2FzZSAnLyc6XG5cdFx0XHRcdHZhciBlbmQgPSBzb3VyY2UuaW5kZXhPZignPicsdGFnU3RhcnQrMyk7XG5cdFx0XHRcdHZhciB0YWdOYW1lID0gc291cmNlLnN1YnN0cmluZyh0YWdTdGFydCArIDIsIGVuZCkucmVwbGFjZSgvWyBcXHRcXG5cXHJdKyQvZywgJycpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gcGFyc2VTdGFjay5wb3AoKTtcblx0XHRcdFx0aWYoZW5kPDApe1xuXG5cdCAgICAgICAgXHRcdHRhZ05hbWUgPSBzb3VyY2Uuc3Vic3RyaW5nKHRhZ1N0YXJ0KzIpLnJlcGxhY2UoL1tcXHM8XS4qLywnJyk7XG5cdCAgICAgICAgXHRcdGVycm9ySGFuZGxlci5lcnJvcihcImVuZCB0YWcgbmFtZTogXCIrdGFnTmFtZSsnIGlzIG5vdCBjb21wbGV0ZTonK2NvbmZpZy50YWdOYW1lKTtcblx0ICAgICAgICBcdFx0ZW5kID0gdGFnU3RhcnQrMSt0YWdOYW1lLmxlbmd0aDtcblx0ICAgICAgICBcdH1lbHNlIGlmKHRhZ05hbWUubWF0Y2goL1xcczwvKSl7XG5cdCAgICAgICAgXHRcdHRhZ05hbWUgPSB0YWdOYW1lLnJlcGxhY2UoL1tcXHM8XS4qLywnJyk7XG5cdCAgICAgICAgXHRcdGVycm9ySGFuZGxlci5lcnJvcihcImVuZCB0YWcgbmFtZTogXCIrdGFnTmFtZSsnIG1heWJlIG5vdCBjb21wbGV0ZScpO1xuXHQgICAgICAgIFx0XHRlbmQgPSB0YWdTdGFydCsxK3RhZ05hbWUubGVuZ3RoO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBsb2NhbE5TTWFwID0gY29uZmlnLmxvY2FsTlNNYXA7XG5cdFx0XHRcdHZhciBlbmRNYXRjaCA9IGNvbmZpZy50YWdOYW1lID09IHRhZ05hbWU7XG5cdFx0XHRcdHZhciBlbmRJZ25vcmVDYXNlTWFjaCA9IGVuZE1hdGNoIHx8IGNvbmZpZy50YWdOYW1lJiZjb25maWcudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09IHRhZ05hbWUudG9Mb3dlckNhc2UoKVxuXHRcdCAgICAgICAgaWYoZW5kSWdub3JlQ2FzZU1hY2gpe1xuXHRcdCAgICAgICAgXHRkb21CdWlsZGVyLmVuZEVsZW1lbnQoY29uZmlnLnVyaSxjb25maWcubG9jYWxOYW1lLHRhZ05hbWUpO1xuXHRcdFx0XHRcdGlmKGxvY2FsTlNNYXApe1xuXHRcdFx0XHRcdFx0Zm9yICh2YXIgcHJlZml4IGluIGxvY2FsTlNNYXApIHtcblx0XHRcdFx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsb2NhbE5TTWFwLCBwcmVmaXgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZG9tQnVpbGRlci5lbmRQcmVmaXhNYXBwaW5nKHByZWZpeCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoIWVuZE1hdGNoKXtcblx0XHQgICAgICAgICAgICBcdGVycm9ySGFuZGxlci5mYXRhbEVycm9yKFwiZW5kIHRhZyBuYW1lOiBcIit0YWdOYW1lKycgaXMgbm90IG1hdGNoIHRoZSBjdXJyZW50IHN0YXJ0IHRhZ05hbWU6Jytjb25maWcudGFnTmFtZSApOyAvLyBObyBrbm93biB0ZXN0IGNhc2Vcblx0XHRcdFx0XHR9XG5cdFx0ICAgICAgICB9ZWxzZXtcblx0XHQgICAgICAgIFx0cGFyc2VTdGFjay5wdXNoKGNvbmZpZylcblx0XHQgICAgICAgIH1cblxuXHRcdFx0XHRlbmQrKztcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIGVuZCBlbG1lbnRcblx0XHRcdGNhc2UgJz8nOi8vIDw/Li4uPz5cblx0XHRcdFx0bG9jYXRvciYmcG9zaXRpb24odGFnU3RhcnQpO1xuXHRcdFx0XHRlbmQgPSBwYXJzZUluc3RydWN0aW9uKHNvdXJjZSx0YWdTdGFydCxkb21CdWlsZGVyKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlICchJzovLyA8IWRvY3R5cGUsPCFbQ0RBVEEsPCEtLVxuXHRcdFx0XHRsb2NhdG9yJiZwb3NpdGlvbih0YWdTdGFydCk7XG5cdFx0XHRcdGVuZCA9IHBhcnNlRENDKHNvdXJjZSx0YWdTdGFydCxkb21CdWlsZGVyLGVycm9ySGFuZGxlcik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0bG9jYXRvciYmcG9zaXRpb24odGFnU3RhcnQpO1xuXHRcdFx0XHR2YXIgZWwgPSBuZXcgRWxlbWVudEF0dHJpYnV0ZXMoKTtcblx0XHRcdFx0dmFyIGN1cnJlbnROU01hcCA9IHBhcnNlU3RhY2tbcGFyc2VTdGFjay5sZW5ndGgtMV0uY3VycmVudE5TTWFwO1xuXHRcdFx0XHQvL2VsU3RhcnRFbmRcblx0XHRcdFx0dmFyIGVuZCA9IHBhcnNlRWxlbWVudFN0YXJ0UGFydChzb3VyY2UsdGFnU3RhcnQsZWwsY3VycmVudE5TTWFwLGVudGl0eVJlcGxhY2VyLGVycm9ySGFuZGxlcik7XG5cdFx0XHRcdHZhciBsZW4gPSBlbC5sZW5ndGg7XG5cblxuXHRcdFx0XHRpZighZWwuY2xvc2VkICYmIGZpeFNlbGZDbG9zZWQoc291cmNlLGVuZCxlbC50YWdOYW1lLGNsb3NlTWFwKSl7XG5cdFx0XHRcdFx0ZWwuY2xvc2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZighZW50aXR5TWFwLm5ic3Ape1xuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLndhcm5pbmcoJ3VuY2xvc2VkIHhtbCBhdHRyaWJ1dGUnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYobG9jYXRvciAmJiBsZW4pe1xuXHRcdFx0XHRcdHZhciBsb2NhdG9yMiA9IGNvcHlMb2NhdG9yKGxvY2F0b3Ise30pO1xuXHRcdFx0XHRcdC8vdHJ5ey8vYXR0cmlidXRlIHBvc2l0aW9uIGZpeGVkXG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDtpPGxlbjtpKyspe1xuXHRcdFx0XHRcdFx0dmFyIGEgPSBlbFtpXTtcblx0XHRcdFx0XHRcdHBvc2l0aW9uKGEub2Zmc2V0KTtcblx0XHRcdFx0XHRcdGEubG9jYXRvciA9IGNvcHlMb2NhdG9yKGxvY2F0b3Ise30pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb21CdWlsZGVyLmxvY2F0b3IgPSBsb2NhdG9yMlxuXHRcdFx0XHRcdGlmKGFwcGVuZEVsZW1lbnQoZWwsZG9tQnVpbGRlcixjdXJyZW50TlNNYXApKXtcblx0XHRcdFx0XHRcdHBhcnNlU3RhY2sucHVzaChlbClcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9tQnVpbGRlci5sb2NhdG9yID0gbG9jYXRvcjtcblx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0aWYoYXBwZW5kRWxlbWVudChlbCxkb21CdWlsZGVyLGN1cnJlbnROU01hcCkpe1xuXHRcdFx0XHRcdFx0cGFyc2VTdGFjay5wdXNoKGVsKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChOQU1FU1BBQ0UuaXNIVE1MKGVsLnVyaSkgJiYgIWVsLmNsb3NlZCkge1xuXHRcdFx0XHRcdGVuZCA9IHBhcnNlSHRtbFNwZWNpYWxDb250ZW50KHNvdXJjZSxlbmQsZWwudGFnTmFtZSxlbnRpdHlSZXBsYWNlcixkb21CdWlsZGVyKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVuZCsrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fWNhdGNoKGUpe1xuXHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBQYXJzZUVycm9yKSB7XG5cdFx0XHRcdHRocm93IGU7XG5cdFx0XHR9XG5cdFx0XHRlcnJvckhhbmRsZXIuZXJyb3IoJ2VsZW1lbnQgcGFyc2UgZXJyb3I6ICcrZSlcblx0XHRcdGVuZCA9IC0xO1xuXHRcdH1cblx0XHRpZihlbmQ+c3RhcnQpe1xuXHRcdFx0c3RhcnQgPSBlbmQ7XG5cdFx0fWVsc2V7XG5cdFx0XHQvL1RPRE86IOi/memHjOacieWPr+iDvXNheOWbnumAgO+8jOacieS9jee9rumUmeivr+mjjumZqVxuXHRcdFx0YXBwZW5kVGV4dChNYXRoLm1heCh0YWdTdGFydCxzdGFydCkrMSk7XG5cdFx0fVxuXHR9XG59XG5mdW5jdGlvbiBjb3B5TG9jYXRvcihmLHQpe1xuXHR0LmxpbmVOdW1iZXIgPSBmLmxpbmVOdW1iZXI7XG5cdHQuY29sdW1uTnVtYmVyID0gZi5jb2x1bW5OdW1iZXI7XG5cdHJldHVybiB0O1xufVxuXG4vKipcbiAqIEBzZWUgI2FwcGVuZEVsZW1lbnQoc291cmNlLGVsU3RhcnRFbmQsZWwsc2VsZkNsb3NlZCxlbnRpdHlSZXBsYWNlcixkb21CdWlsZGVyLHBhcnNlU3RhY2spO1xuICogQHJldHVybiBlbmQgb2YgdGhlIGVsZW1lbnRTdGFydFBhcnQoZW5kIG9mIGVsZW1lbnRFbmRQYXJ0IGZvciBzZWxmQ2xvc2VkIGVsKVxuICovXG5mdW5jdGlvbiBwYXJzZUVsZW1lbnRTdGFydFBhcnQoc291cmNlLHN0YXJ0LGVsLGN1cnJlbnROU01hcCxlbnRpdHlSZXBsYWNlcixlcnJvckhhbmRsZXIpe1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcW5hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydEluZGV4XG5cdCAqL1xuXHRmdW5jdGlvbiBhZGRBdHRyaWJ1dGUocW5hbWUsIHZhbHVlLCBzdGFydEluZGV4KSB7XG5cdFx0aWYgKGVsLmF0dHJpYnV0ZU5hbWVzLmhhc093blByb3BlcnR5KHFuYW1lKSkge1xuXHRcdFx0ZXJyb3JIYW5kbGVyLmZhdGFsRXJyb3IoJ0F0dHJpYnV0ZSAnICsgcW5hbWUgKyAnIHJlZGVmaW5lZCcpXG5cdFx0fVxuXHRcdGVsLmFkZFZhbHVlKFxuXHRcdFx0cW5hbWUsXG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI0FWTm9ybWFsaXplXG5cdFx0XHQvLyBzaW5jZSB0aGUgeG1sZG9tIHNheCBwYXJzZXIgZG9lcyBub3QgXCJpbnRlcnByZXRcIiBEVEQgdGhlIGZvbGxvd2luZyBpcyBub3QgaW1wbGVtZW50ZWQ6XG5cdFx0XHQvLyAtIHJlY3Vyc2l2ZSByZXBsYWNlbWVudCBvZiAoRFREKSBlbnRpdHkgcmVmZXJlbmNlc1xuXHRcdFx0Ly8gLSB0cmltbWluZyBhbmQgY29sbGFwc2luZyBtdWx0aXBsZSBzcGFjZXMgaW50byBhIHNpbmdsZSBvbmUgZm9yIGF0dHJpYnV0ZXMgdGhhdCBhcmUgbm90IG9mIHR5cGUgQ0RBVEFcblx0XHRcdHZhbHVlLnJlcGxhY2UoL1tcXHRcXG5cXHJdL2csICcgJykucmVwbGFjZSgvJiM/XFx3KzsvZywgZW50aXR5UmVwbGFjZXIpLFxuXHRcdFx0c3RhcnRJbmRleFxuXHRcdClcblx0fVxuXHR2YXIgYXR0ck5hbWU7XG5cdHZhciB2YWx1ZTtcblx0dmFyIHAgPSArK3N0YXJ0O1xuXHR2YXIgcyA9IFNfVEFHOy8vc3RhdHVzXG5cdHdoaWxlKHRydWUpe1xuXHRcdHZhciBjID0gc291cmNlLmNoYXJBdChwKTtcblx0XHRzd2l0Y2goYyl7XG5cdFx0Y2FzZSAnPSc6XG5cdFx0XHRpZihzID09PSBTX0FUVFIpey8vYXR0ck5hbWVcblx0XHRcdFx0YXR0ck5hbWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQscCk7XG5cdFx0XHRcdHMgPSBTX0VRO1xuXHRcdFx0fWVsc2UgaWYocyA9PT0gU19BVFRSX1NQQUNFKXtcblx0XHRcdFx0cyA9IFNfRVE7XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0Ly9mYXRhbEVycm9yOiBlcXVhbCBtdXN0IGFmdGVyIGF0dHJOYW1lIG9yIHNwYWNlIGFmdGVyIGF0dHJOYW1lXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignYXR0cmlidXRlIGVxdWFsIG11c3QgYWZ0ZXIgYXR0ck5hbWUnKTsgLy8gTm8ga25vd24gdGVzdCBjYXNlXG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlICdcXCcnOlxuXHRcdGNhc2UgJ1wiJzpcblx0XHRcdGlmKHMgPT09IFNfRVEgfHwgcyA9PT0gU19BVFRSIC8vfHwgcyA9PSBTX0FUVFJfU1BBQ0Vcblx0XHRcdFx0KXsvL2VxdWFsXG5cdFx0XHRcdGlmKHMgPT09IFNfQVRUUil7XG5cdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLndhcm5pbmcoJ2F0dHJpYnV0ZSB2YWx1ZSBtdXN0IGFmdGVyIFwiPVwiJylcblx0XHRcdFx0XHRhdHRyTmFtZSA9IHNvdXJjZS5zbGljZShzdGFydCxwKVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0YXJ0ID0gcCsxO1xuXHRcdFx0XHRwID0gc291cmNlLmluZGV4T2YoYyxzdGFydClcblx0XHRcdFx0aWYocD4wKXtcblx0XHRcdFx0XHR2YWx1ZSA9IHNvdXJjZS5zbGljZShzdGFydCwgcCk7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlKGF0dHJOYW1lLCB2YWx1ZSwgc3RhcnQtMSk7XG5cdFx0XHRcdFx0cyA9IFNfQVRUUl9FTkQ7XG5cdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdC8vZmF0YWxFcnJvcjogbm8gZW5kIHF1b3QgbWF0Y2hcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2F0dHJpYnV0ZSB2YWx1ZSBubyBlbmQgXFwnJytjKydcXCcgbWF0Y2gnKTtcblx0XHRcdFx0fVxuXHRcdFx0fWVsc2UgaWYocyA9PSBTX0FUVFJfTk9RVU9UX1ZBTFVFKXtcblx0XHRcdFx0dmFsdWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQsIHApO1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGUoYXR0ck5hbWUsIHZhbHVlLCBzdGFydCk7XG5cdFx0XHRcdGVycm9ySGFuZGxlci53YXJuaW5nKCdhdHRyaWJ1dGUgXCInK2F0dHJOYW1lKydcIiBtaXNzZWQgc3RhcnQgcXVvdCgnK2MrJykhIScpO1xuXHRcdFx0XHRzdGFydCA9IHArMTtcblx0XHRcdFx0cyA9IFNfQVRUUl9FTkRcblx0XHRcdH1lbHNle1xuXHRcdFx0XHQvL2ZhdGFsRXJyb3I6IG5vIGVxdWFsIGJlZm9yZVxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2F0dHJpYnV0ZSB2YWx1ZSBtdXN0IGFmdGVyIFwiPVwiJyk7IC8vIE5vIGtub3duIHRlc3QgY2FzZVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnLyc6XG5cdFx0XHRzd2l0Y2gocyl7XG5cdFx0XHRjYXNlIFNfVEFHOlxuXHRcdFx0XHRlbC5zZXRUYWdOYW1lKHNvdXJjZS5zbGljZShzdGFydCxwKSk7XG5cdFx0XHRjYXNlIFNfQVRUUl9FTkQ6XG5cdFx0XHRjYXNlIFNfVEFHX1NQQUNFOlxuXHRcdFx0Y2FzZSBTX1RBR19DTE9TRTpcblx0XHRcdFx0cyA9U19UQUdfQ0xPU0U7XG5cdFx0XHRcdGVsLmNsb3NlZCA9IHRydWU7XG5cdFx0XHRjYXNlIFNfQVRUUl9OT1FVT1RfVkFMVUU6XG5cdFx0XHRjYXNlIFNfQVRUUjpcblx0XHRcdGNhc2UgU19BVFRSX1NQQUNFOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdC8vY2FzZSBTX0VROlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYXR0cmlidXRlIGludmFsaWQgY2xvc2UgY2hhcignLycpXCIpIC8vIE5vIGtub3duIHRlc3QgY2FzZVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSAnJzovL2VuZCBkb2N1bWVudFxuXHRcdFx0ZXJyb3JIYW5kbGVyLmVycm9yKCd1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcpO1xuXHRcdFx0aWYocyA9PSBTX1RBRyl7XG5cdFx0XHRcdGVsLnNldFRhZ05hbWUoc291cmNlLnNsaWNlKHN0YXJ0LHApKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBwO1xuXHRcdGNhc2UgJz4nOlxuXHRcdFx0c3dpdGNoKHMpe1xuXHRcdFx0Y2FzZSBTX1RBRzpcblx0XHRcdFx0ZWwuc2V0VGFnTmFtZShzb3VyY2Uuc2xpY2Uoc3RhcnQscCkpO1xuXHRcdFx0Y2FzZSBTX0FUVFJfRU5EOlxuXHRcdFx0Y2FzZSBTX1RBR19TUEFDRTpcblx0XHRcdGNhc2UgU19UQUdfQ0xPU0U6XG5cdFx0XHRcdGJyZWFrOy8vbm9ybWFsXG5cdFx0XHRjYXNlIFNfQVRUUl9OT1FVT1RfVkFMVUU6Ly9Db21wYXRpYmxlIHN0YXRlXG5cdFx0XHRjYXNlIFNfQVRUUjpcblx0XHRcdFx0dmFsdWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQscCk7XG5cdFx0XHRcdGlmKHZhbHVlLnNsaWNlKC0xKSA9PT0gJy8nKXtcblx0XHRcdFx0XHRlbC5jbG9zZWQgID0gdHJ1ZTtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNsaWNlKDAsLTEpXG5cdFx0XHRcdH1cblx0XHRcdGNhc2UgU19BVFRSX1NQQUNFOlxuXHRcdFx0XHRpZihzID09PSBTX0FUVFJfU1BBQ0Upe1xuXHRcdFx0XHRcdHZhbHVlID0gYXR0ck5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYocyA9PSBTX0FUVFJfTk9RVU9UX1ZBTFVFKXtcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIud2FybmluZygnYXR0cmlidXRlIFwiJyt2YWx1ZSsnXCIgbWlzc2VkIHF1b3QoXCIpIScpO1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZShhdHRyTmFtZSwgdmFsdWUsIHN0YXJ0KVxuXHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRpZighTkFNRVNQQUNFLmlzSFRNTChjdXJyZW50TlNNYXBbJyddKSB8fCAhdmFsdWUubWF0Y2goL14oPzpkaXNhYmxlZHxjaGVja2VkfHNlbGVjdGVkKSQvaSkpe1xuXHRcdFx0XHRcdFx0ZXJyb3JIYW5kbGVyLndhcm5pbmcoJ2F0dHJpYnV0ZSBcIicrdmFsdWUrJ1wiIG1pc3NlZCB2YWx1ZSEhIFwiJyt2YWx1ZSsnXCIgaW5zdGVhZCEhJylcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlKHZhbHVlLCB2YWx1ZSwgc3RhcnQpXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFNfRVE6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignYXR0cmlidXRlIHZhbHVlIG1pc3NlZCEhJyk7XG5cdFx0XHR9XG4vL1x0XHRcdGNvbnNvbGUubG9nKHRhZ05hbWUsdGFnTmFtZVBhdHRlcm4sdGFnTmFtZVBhdHRlcm4udGVzdCh0YWdOYW1lKSlcblx0XHRcdHJldHVybiBwO1xuXHRcdC8qeG1sIHNwYWNlICdcXHgyMCcgfCAjeDkgfCAjeEQgfCAjeEE7ICovXG5cdFx0Y2FzZSAnXFx1MDA4MCc6XG5cdFx0XHRjID0gJyAnO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZihjPD0gJyAnKXsvL3NwYWNlXG5cdFx0XHRcdHN3aXRjaChzKXtcblx0XHRcdFx0Y2FzZSBTX1RBRzpcblx0XHRcdFx0XHRlbC5zZXRUYWdOYW1lKHNvdXJjZS5zbGljZShzdGFydCxwKSk7Ly90YWdOYW1lXG5cdFx0XHRcdFx0cyA9IFNfVEFHX1NQQUNFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFNfQVRUUjpcblx0XHRcdFx0XHRhdHRyTmFtZSA9IHNvdXJjZS5zbGljZShzdGFydCxwKVxuXHRcdFx0XHRcdHMgPSBTX0FUVFJfU1BBQ0U7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU19BVFRSX05PUVVPVF9WQUxVRTpcblx0XHRcdFx0XHR2YXIgdmFsdWUgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQsIHApO1xuXHRcdFx0XHRcdGVycm9ySGFuZGxlci53YXJuaW5nKCdhdHRyaWJ1dGUgXCInK3ZhbHVlKydcIiBtaXNzZWQgcXVvdChcIikhIScpO1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZShhdHRyTmFtZSwgdmFsdWUsIHN0YXJ0KVxuXHRcdFx0XHRjYXNlIFNfQVRUUl9FTkQ6XG5cdFx0XHRcdFx0cyA9IFNfVEFHX1NQQUNFO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvL2Nhc2UgU19UQUdfU1BBQ0U6XG5cdFx0XHRcdC8vY2FzZSBTX0VROlxuXHRcdFx0XHQvL2Nhc2UgU19BVFRSX1NQQUNFOlxuXHRcdFx0XHQvL1x0dm9pZCgpO2JyZWFrO1xuXHRcdFx0XHQvL2Nhc2UgU19UQUdfQ0xPU0U6XG5cdFx0XHRcdFx0Ly9pZ25vcmUgd2FybmluZ1xuXHRcdFx0XHR9XG5cdFx0XHR9ZWxzZXsvL25vdCBzcGFjZVxuLy9TX1RBRyxcdFNfQVRUUixcdFNfRVEsXHRTX0FUVFJfTk9RVU9UX1ZBTFVFXG4vL1NfQVRUUl9TUEFDRSxcdFNfQVRUUl9FTkQsXHRTX1RBR19TUEFDRSwgU19UQUdfQ0xPU0Vcblx0XHRcdFx0c3dpdGNoKHMpe1xuXHRcdFx0XHQvL2Nhc2UgU19UQUc6dm9pZCgpO2JyZWFrO1xuXHRcdFx0XHQvL2Nhc2UgU19BVFRSOnZvaWQoKTticmVhaztcblx0XHRcdFx0Ly9jYXNlIFNfQVRUUl9OT1FVT1RfVkFMVUU6dm9pZCgpO2JyZWFrO1xuXHRcdFx0XHRjYXNlIFNfQVRUUl9TUEFDRTpcblx0XHRcdFx0XHR2YXIgdGFnTmFtZSA9ICBlbC50YWdOYW1lO1xuXHRcdFx0XHRcdGlmICghTkFNRVNQQUNFLmlzSFRNTChjdXJyZW50TlNNYXBbJyddKSB8fCAhYXR0ck5hbWUubWF0Y2goL14oPzpkaXNhYmxlZHxjaGVja2VkfHNlbGVjdGVkKSQvaSkpIHtcblx0XHRcdFx0XHRcdGVycm9ySGFuZGxlci53YXJuaW5nKCdhdHRyaWJ1dGUgXCInK2F0dHJOYW1lKydcIiBtaXNzZWQgdmFsdWUhISBcIicrYXR0ck5hbWUrJ1wiIGluc3RlYWQyISEnKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGUoYXR0ck5hbWUsIGF0dHJOYW1lLCBzdGFydCk7XG5cdFx0XHRcdFx0c3RhcnQgPSBwO1xuXHRcdFx0XHRcdHMgPSBTX0FUVFI7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgU19BVFRSX0VORDpcblx0XHRcdFx0XHRlcnJvckhhbmRsZXIud2FybmluZygnYXR0cmlidXRlIHNwYWNlIGlzIHJlcXVpcmVkXCInK2F0dHJOYW1lKydcIiEhJylcblx0XHRcdFx0Y2FzZSBTX1RBR19TUEFDRTpcblx0XHRcdFx0XHRzID0gU19BVFRSO1xuXHRcdFx0XHRcdHN0YXJ0ID0gcDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTX0VROlxuXHRcdFx0XHRcdHMgPSBTX0FUVFJfTk9RVU9UX1ZBTFVFO1xuXHRcdFx0XHRcdHN0YXJ0ID0gcDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBTX1RBR19DTE9TRTpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJlbGVtZW50cyBjbG9zZWQgY2hhcmFjdGVyICcvJyBhbmQgJz4nIG11c3QgYmUgY29ubmVjdGVkIHRvXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fS8vZW5kIG91dGVyIHN3aXRjaFxuXHRcdC8vY29uc29sZS5sb2coJ3ArKycscClcblx0XHRwKys7XG5cdH1cbn1cbi8qKlxuICogQHJldHVybiB0cnVlIGlmIGhhcyBuZXcgbmFtZXNwYWNlIGRlZmluZVxuICovXG5mdW5jdGlvbiBhcHBlbmRFbGVtZW50KGVsLGRvbUJ1aWxkZXIsY3VycmVudE5TTWFwKXtcblx0dmFyIHRhZ05hbWUgPSBlbC50YWdOYW1lO1xuXHR2YXIgbG9jYWxOU01hcCA9IG51bGw7XG5cdC8vdmFyIGN1cnJlbnROU01hcCA9IHBhcnNlU3RhY2tbcGFyc2VTdGFjay5sZW5ndGgtMV0uY3VycmVudE5TTWFwO1xuXHR2YXIgaSA9IGVsLmxlbmd0aDtcblx0d2hpbGUoaS0tKXtcblx0XHR2YXIgYSA9IGVsW2ldO1xuXHRcdHZhciBxTmFtZSA9IGEucU5hbWU7XG5cdFx0dmFyIHZhbHVlID0gYS52YWx1ZTtcblx0XHR2YXIgbnNwID0gcU5hbWUuaW5kZXhPZignOicpO1xuXHRcdGlmKG5zcD4wKXtcblx0XHRcdHZhciBwcmVmaXggPSBhLnByZWZpeCA9IHFOYW1lLnNsaWNlKDAsbnNwKTtcblx0XHRcdHZhciBsb2NhbE5hbWUgPSBxTmFtZS5zbGljZShuc3ArMSk7XG5cdFx0XHR2YXIgbnNQcmVmaXggPSBwcmVmaXggPT09ICd4bWxucycgJiYgbG9jYWxOYW1lXG5cdFx0fWVsc2V7XG5cdFx0XHRsb2NhbE5hbWUgPSBxTmFtZTtcblx0XHRcdHByZWZpeCA9IG51bGxcblx0XHRcdG5zUHJlZml4ID0gcU5hbWUgPT09ICd4bWxucycgJiYgJydcblx0XHR9XG5cdFx0Ly9jYW4gbm90IHNldCBwcmVmaXgsYmVjYXVzZSBwcmVmaXggIT09ICcnXG5cdFx0YS5sb2NhbE5hbWUgPSBsb2NhbE5hbWUgO1xuXHRcdC8vcHJlZml4ID09IG51bGwgZm9yIG5vIG5zIHByZWZpeCBhdHRyaWJ1dGVcblx0XHRpZihuc1ByZWZpeCAhPT0gZmFsc2Upey8vaGFjayEhXG5cdFx0XHRpZihsb2NhbE5TTWFwID09IG51bGwpe1xuXHRcdFx0XHRsb2NhbE5TTWFwID0ge31cblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhjdXJyZW50TlNNYXAsMClcblx0XHRcdFx0X2NvcHkoY3VycmVudE5TTWFwLGN1cnJlbnROU01hcD17fSlcblx0XHRcdFx0Ly9jb25zb2xlLmxvZyhjdXJyZW50TlNNYXAsMSlcblx0XHRcdH1cblx0XHRcdGN1cnJlbnROU01hcFtuc1ByZWZpeF0gPSBsb2NhbE5TTWFwW25zUHJlZml4XSA9IHZhbHVlO1xuXHRcdFx0YS51cmkgPSBOQU1FU1BBQ0UuWE1MTlNcblx0XHRcdGRvbUJ1aWxkZXIuc3RhcnRQcmVmaXhNYXBwaW5nKG5zUHJlZml4LCB2YWx1ZSlcblx0XHR9XG5cdH1cblx0dmFyIGkgPSBlbC5sZW5ndGg7XG5cdHdoaWxlKGktLSl7XG5cdFx0YSA9IGVsW2ldO1xuXHRcdHZhciBwcmVmaXggPSBhLnByZWZpeDtcblx0XHRpZihwcmVmaXgpey8vbm8gcHJlZml4IGF0dHJpYnV0ZSBoYXMgbm8gbmFtZXNwYWNlXG5cdFx0XHRpZihwcmVmaXggPT09ICd4bWwnKXtcblx0XHRcdFx0YS51cmkgPSBOQU1FU1BBQ0UuWE1MO1xuXHRcdFx0fWlmKHByZWZpeCAhPT0gJ3htbG5zJyl7XG5cdFx0XHRcdGEudXJpID0gY3VycmVudE5TTWFwW3ByZWZpeCB8fCAnJ11cblxuXHRcdFx0XHQvL3tjb25zb2xlLmxvZygnIyMjJythLnFOYW1lLGRvbUJ1aWxkZXIubG9jYXRvci5zeXN0ZW1JZCsnJyxjdXJyZW50TlNNYXAsYS51cmkpfVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR2YXIgbnNwID0gdGFnTmFtZS5pbmRleE9mKCc6Jyk7XG5cdGlmKG5zcD4wKXtcblx0XHRwcmVmaXggPSBlbC5wcmVmaXggPSB0YWdOYW1lLnNsaWNlKDAsbnNwKTtcblx0XHRsb2NhbE5hbWUgPSBlbC5sb2NhbE5hbWUgPSB0YWdOYW1lLnNsaWNlKG5zcCsxKTtcblx0fWVsc2V7XG5cdFx0cHJlZml4ID0gbnVsbDsvL2ltcG9ydGFudCEhXG5cdFx0bG9jYWxOYW1lID0gZWwubG9jYWxOYW1lID0gdGFnTmFtZTtcblx0fVxuXHQvL25vIHByZWZpeCBlbGVtZW50IGhhcyBkZWZhdWx0IG5hbWVzcGFjZVxuXHR2YXIgbnMgPSBlbC51cmkgPSBjdXJyZW50TlNNYXBbcHJlZml4IHx8ICcnXTtcblx0ZG9tQnVpbGRlci5zdGFydEVsZW1lbnQobnMsbG9jYWxOYW1lLHRhZ05hbWUsZWwpO1xuXHQvL2VuZFByZWZpeE1hcHBpbmcgYW5kIHN0YXJ0UHJlZml4TWFwcGluZyBoYXZlIG5vdCBhbnkgaGVscCBmb3IgZG9tIGJ1aWxkZXJcblx0Ly9sb2NhbE5TTWFwID0gbnVsbFxuXHRpZihlbC5jbG9zZWQpe1xuXHRcdGRvbUJ1aWxkZXIuZW5kRWxlbWVudChucyxsb2NhbE5hbWUsdGFnTmFtZSk7XG5cdFx0aWYobG9jYWxOU01hcCl7XG5cdFx0XHRmb3IgKHByZWZpeCBpbiBsb2NhbE5TTWFwKSB7XG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobG9jYWxOU01hcCwgcHJlZml4KSkge1xuXHRcdFx0XHRcdGRvbUJ1aWxkZXIuZW5kUHJlZml4TWFwcGluZyhwcmVmaXgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9ZWxzZXtcblx0XHRlbC5jdXJyZW50TlNNYXAgPSBjdXJyZW50TlNNYXA7XG5cdFx0ZWwubG9jYWxOU01hcCA9IGxvY2FsTlNNYXA7XG5cdFx0Ly9wYXJzZVN0YWNrLnB1c2goZWwpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5mdW5jdGlvbiBwYXJzZUh0bWxTcGVjaWFsQ29udGVudChzb3VyY2UsZWxTdGFydEVuZCx0YWdOYW1lLGVudGl0eVJlcGxhY2VyLGRvbUJ1aWxkZXIpe1xuXHRpZigvXig/OnNjcmlwdHx0ZXh0YXJlYSkkL2kudGVzdCh0YWdOYW1lKSl7XG5cdFx0dmFyIGVsRW5kU3RhcnQgPSAgc291cmNlLmluZGV4T2YoJzwvJyt0YWdOYW1lKyc+JyxlbFN0YXJ0RW5kKTtcblx0XHR2YXIgdGV4dCA9IHNvdXJjZS5zdWJzdHJpbmcoZWxTdGFydEVuZCsxLGVsRW5kU3RhcnQpO1xuXHRcdGlmKC9bJjxdLy50ZXN0KHRleHQpKXtcblx0XHRcdGlmKC9ec2NyaXB0JC9pLnRlc3QodGFnTmFtZSkpe1xuXHRcdFx0XHQvL2lmKCEvXFxdXFxdPi8udGVzdCh0ZXh0KSl7XG5cdFx0XHRcdFx0Ly9sZXhIYW5kbGVyLnN0YXJ0Q0RBVEEoKTtcblx0XHRcdFx0XHRkb21CdWlsZGVyLmNoYXJhY3RlcnModGV4dCwwLHRleHQubGVuZ3RoKTtcblx0XHRcdFx0XHQvL2xleEhhbmRsZXIuZW5kQ0RBVEEoKTtcblx0XHRcdFx0XHRyZXR1cm4gZWxFbmRTdGFydDtcblx0XHRcdFx0Ly99XG5cdFx0XHR9Ly99ZWxzZXsvL3RleHQgYXJlYVxuXHRcdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mIz9cXHcrOy9nLGVudGl0eVJlcGxhY2VyKTtcblx0XHRcdFx0ZG9tQnVpbGRlci5jaGFyYWN0ZXJzKHRleHQsMCx0ZXh0Lmxlbmd0aCk7XG5cdFx0XHRcdHJldHVybiBlbEVuZFN0YXJ0O1xuXHRcdFx0Ly99XG5cblx0XHR9XG5cdH1cblx0cmV0dXJuIGVsU3RhcnRFbmQrMTtcbn1cbmZ1bmN0aW9uIGZpeFNlbGZDbG9zZWQoc291cmNlLGVsU3RhcnRFbmQsdGFnTmFtZSxjbG9zZU1hcCl7XG5cdC8vaWYodGFnTmFtZSBpbiBjbG9zZU1hcCl7XG5cdHZhciBwb3MgPSBjbG9zZU1hcFt0YWdOYW1lXTtcblx0aWYocG9zID09IG51bGwpe1xuXHRcdC8vY29uc29sZS5sb2codGFnTmFtZSlcblx0XHRwb3MgPSAgc291cmNlLmxhc3RJbmRleE9mKCc8LycrdGFnTmFtZSsnPicpXG5cdFx0aWYocG9zPGVsU3RhcnRFbmQpey8v5b+Y6K6w6Zet5ZCIXG5cdFx0XHRwb3MgPSBzb3VyY2UubGFzdEluZGV4T2YoJzwvJyt0YWdOYW1lKVxuXHRcdH1cblx0XHRjbG9zZU1hcFt0YWdOYW1lXSA9cG9zXG5cdH1cblx0cmV0dXJuIHBvczxlbFN0YXJ0RW5kO1xuXHQvL31cbn1cblxuZnVuY3Rpb24gX2NvcHkgKHNvdXJjZSwgdGFyZ2V0KSB7XG5cdGZvciAodmFyIG4gaW4gc291cmNlKSB7XG5cdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIG4pKSB7XG5cdFx0XHR0YXJnZXRbbl0gPSBzb3VyY2Vbbl07XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHBhcnNlRENDKHNvdXJjZSxzdGFydCxkb21CdWlsZGVyLGVycm9ySGFuZGxlcil7Ly9zdXJlIHN0YXJ0IHdpdGggJzwhJ1xuXHR2YXIgbmV4dD0gc291cmNlLmNoYXJBdChzdGFydCsyKVxuXHRzd2l0Y2gobmV4dCl7XG5cdGNhc2UgJy0nOlxuXHRcdGlmKHNvdXJjZS5jaGFyQXQoc3RhcnQgKyAzKSA9PT0gJy0nKXtcblx0XHRcdHZhciBlbmQgPSBzb3VyY2UuaW5kZXhPZignLS0+JyxzdGFydCs0KTtcblx0XHRcdC8vYXBwZW5kIGNvbW1lbnQgc291cmNlLnN1YnN0cmluZyg0LGVuZCkvLzwhLS1cblx0XHRcdGlmKGVuZD5zdGFydCl7XG5cdFx0XHRcdGRvbUJ1aWxkZXIuY29tbWVudChzb3VyY2Usc3RhcnQrNCxlbmQtc3RhcnQtNCk7XG5cdFx0XHRcdHJldHVybiBlbmQrMztcblx0XHRcdH1lbHNle1xuXHRcdFx0XHRlcnJvckhhbmRsZXIuZXJyb3IoXCJVbmNsb3NlZCBjb21tZW50XCIpO1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fWVsc2V7XG5cdFx0XHQvL2Vycm9yXG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHRkZWZhdWx0OlxuXHRcdGlmKHNvdXJjZS5zdWJzdHIoc3RhcnQrMyw2KSA9PSAnQ0RBVEFbJyl7XG5cdFx0XHR2YXIgZW5kID0gc291cmNlLmluZGV4T2YoJ11dPicsc3RhcnQrOSk7XG5cdFx0XHRkb21CdWlsZGVyLnN0YXJ0Q0RBVEEoKTtcblx0XHRcdGRvbUJ1aWxkZXIuY2hhcmFjdGVycyhzb3VyY2Usc3RhcnQrOSxlbmQtc3RhcnQtOSk7XG5cdFx0XHRkb21CdWlsZGVyLmVuZENEQVRBKClcblx0XHRcdHJldHVybiBlbmQrMztcblx0XHR9XG5cdFx0Ly88IURPQ1RZUEVcblx0XHQvL3N0YXJ0RFREKGphdmEubGFuZy5TdHJpbmcgbmFtZSwgamF2YS5sYW5nLlN0cmluZyBwdWJsaWNJZCwgamF2YS5sYW5nLlN0cmluZyBzeXN0ZW1JZClcblx0XHR2YXIgbWF0Y2hzID0gc3BsaXQoc291cmNlLHN0YXJ0KTtcblx0XHR2YXIgbGVuID0gbWF0Y2hzLmxlbmd0aDtcblx0XHRpZihsZW4+MSAmJiAvIWRvY3R5cGUvaS50ZXN0KG1hdGNoc1swXVswXSkpe1xuXHRcdFx0dmFyIG5hbWUgPSBtYXRjaHNbMV1bMF07XG5cdFx0XHR2YXIgcHViaWQgPSBmYWxzZTtcblx0XHRcdHZhciBzeXNpZCA9IGZhbHNlO1xuXHRcdFx0aWYobGVuPjMpe1xuXHRcdFx0XHRpZigvXnB1YmxpYyQvaS50ZXN0KG1hdGNoc1syXVswXSkpe1xuXHRcdFx0XHRcdHB1YmlkID0gbWF0Y2hzWzNdWzBdO1xuXHRcdFx0XHRcdHN5c2lkID0gbGVuPjQgJiYgbWF0Y2hzWzRdWzBdO1xuXHRcdFx0XHR9ZWxzZSBpZigvXnN5c3RlbSQvaS50ZXN0KG1hdGNoc1syXVswXSkpe1xuXHRcdFx0XHRcdHN5c2lkID0gbWF0Y2hzWzNdWzBdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR2YXIgbGFzdE1hdGNoID0gbWF0Y2hzW2xlbi0xXVxuXHRcdFx0ZG9tQnVpbGRlci5zdGFydERURChuYW1lLCBwdWJpZCwgc3lzaWQpO1xuXHRcdFx0ZG9tQnVpbGRlci5lbmREVEQoKTtcblxuXHRcdFx0cmV0dXJuIGxhc3RNYXRjaC5pbmRleCtsYXN0TWF0Y2hbMF0ubGVuZ3RoXG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn1cblxuXG5cbmZ1bmN0aW9uIHBhcnNlSW5zdHJ1Y3Rpb24oc291cmNlLHN0YXJ0LGRvbUJ1aWxkZXIpe1xuXHR2YXIgZW5kID0gc291cmNlLmluZGV4T2YoJz8+JyxzdGFydCk7XG5cdGlmKGVuZCl7XG5cdFx0dmFyIG1hdGNoID0gc291cmNlLnN1YnN0cmluZyhzdGFydCxlbmQpLm1hdGNoKC9ePFxcPyhcXFMqKVxccyooW1xcc1xcU10qPylcXHMqJC8pO1xuXHRcdGlmKG1hdGNoKXtcblx0XHRcdHZhciBsZW4gPSBtYXRjaFswXS5sZW5ndGg7XG5cdFx0XHRkb21CdWlsZGVyLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihtYXRjaFsxXSwgbWF0Y2hbMl0pIDtcblx0XHRcdHJldHVybiBlbmQrMjtcblx0XHR9ZWxzZXsvL2Vycm9yXG5cdFx0XHRyZXR1cm4gLTE7XG5cdFx0fVxuXHR9XG5cdHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gRWxlbWVudEF0dHJpYnV0ZXMoKXtcblx0dGhpcy5hdHRyaWJ1dGVOYW1lcyA9IHt9XG59XG5FbGVtZW50QXR0cmlidXRlcy5wcm90b3R5cGUgPSB7XG5cdHNldFRhZ05hbWU6ZnVuY3Rpb24odGFnTmFtZSl7XG5cdFx0aWYoIXRhZ05hbWVQYXR0ZXJuLnRlc3QodGFnTmFtZSkpe1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHRhZ05hbWU6Jyt0YWdOYW1lKVxuXHRcdH1cblx0XHR0aGlzLnRhZ05hbWUgPSB0YWdOYW1lXG5cdH0sXG5cdGFkZFZhbHVlOmZ1bmN0aW9uKHFOYW1lLCB2YWx1ZSwgb2Zmc2V0KSB7XG5cdFx0aWYoIXRhZ05hbWVQYXR0ZXJuLnRlc3QocU5hbWUpKXtcblx0XHRcdHRocm93IG5ldyBFcnJvcignaW52YWxpZCBhdHRyaWJ1dGU6JytxTmFtZSlcblx0XHR9XG5cdFx0dGhpcy5hdHRyaWJ1dGVOYW1lc1txTmFtZV0gPSB0aGlzLmxlbmd0aDtcblx0XHR0aGlzW3RoaXMubGVuZ3RoKytdID0ge3FOYW1lOnFOYW1lLHZhbHVlOnZhbHVlLG9mZnNldDpvZmZzZXR9XG5cdH0sXG5cdGxlbmd0aDowLFxuXHRnZXRMb2NhbE5hbWU6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXNbaV0ubG9jYWxOYW1lfSxcblx0Z2V0TG9jYXRvcjpmdW5jdGlvbihpKXtyZXR1cm4gdGhpc1tpXS5sb2NhdG9yfSxcblx0Z2V0UU5hbWU6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXNbaV0ucU5hbWV9LFxuXHRnZXRVUkk6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXNbaV0udXJpfSxcblx0Z2V0VmFsdWU6ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXNbaV0udmFsdWV9XG4vL1x0LGdldEluZGV4OmZ1bmN0aW9uKHVyaSwgbG9jYWxOYW1lKSl7XG4vL1x0XHRpZihsb2NhbE5hbWUpe1xuLy9cbi8vXHRcdH1lbHNle1xuLy9cdFx0XHR2YXIgcU5hbWUgPSB1cmlcbi8vXHRcdH1cbi8vXHR9LFxuLy9cdGdldFZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VmFsdWUodGhpcy5nZXRJbmRleC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxcbi8vXHRnZXRUeXBlOmZ1bmN0aW9uKHVyaSxsb2NhbE5hbWUpe31cbi8vXHRnZXRUeXBlOmZ1bmN0aW9uKGkpe30sXG59XG5cblxuXG5mdW5jdGlvbiBzcGxpdChzb3VyY2Usc3RhcnQpe1xuXHR2YXIgbWF0Y2g7XG5cdHZhciBidWYgPSBbXTtcblx0dmFyIHJlZyA9IC8nW14nXSsnfFwiW15cIl0rXCJ8W15cXHM8PlxcLz1dKz0/fChcXC8/XFxzKj58PCkvZztcblx0cmVnLmxhc3RJbmRleCA9IHN0YXJ0O1xuXHRyZWcuZXhlYyhzb3VyY2UpOy8vc2tpcCA8XG5cdHdoaWxlKG1hdGNoID0gcmVnLmV4ZWMoc291cmNlKSl7XG5cdFx0YnVmLnB1c2gobWF0Y2gpO1xuXHRcdGlmKG1hdGNoWzFdKXJldHVybiBidWY7XG5cdH1cbn1cblxuZXhwb3J0cy5YTUxSZWFkZXIgPSBYTUxSZWFkZXI7XG5leHBvcnRzLlBhcnNlRXJyb3IgPSBQYXJzZUVycm9yO1xuXG59LHtcIi4vY29udmVudGlvbnNcIjo0MX1dLDQ3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuXG59LHt9XSw0ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSkge1xudmFyIFNvbWVQcm9taXNlQXJyYXkgPSBQcm9taXNlLl9Tb21lUHJvbWlzZUFycmF5O1xuZnVuY3Rpb24gYW55KHByb21pc2VzKSB7XG4gICAgdmFyIHJldCA9IG5ldyBTb21lUHJvbWlzZUFycmF5KHByb21pc2VzKTtcbiAgICB2YXIgcHJvbWlzZSA9IHJldC5wcm9taXNlKCk7XG4gICAgcmV0LnNldEhvd01hbnkoMSk7XG4gICAgcmV0LnNldFVud3JhcCgpO1xuICAgIHJldC5pbml0KCk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cblByb21pc2UuYW55ID0gZnVuY3Rpb24gKHByb21pc2VzKSB7XG4gICAgcmV0dXJuIGFueShwcm9taXNlcyk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5hbnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFueSh0aGlzKTtcbn07XG5cbn07XG5cbn0se31dLDQ5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG5cInVzZSBzdHJpY3RcIjtcbnZhciBmaXJzdExpbmVFcnJvcjtcbnRyeSB7dGhyb3cgbmV3IEVycm9yKCk7IH0gY2F0Y2ggKGUpIHtmaXJzdExpbmVFcnJvciA9IGU7fVxudmFyIHNjaGVkdWxlID0gcmVxdWlyZShcIi4vc2NoZWR1bGVcIik7XG52YXIgUXVldWUgPSByZXF1aXJlKFwiLi9xdWV1ZVwiKTtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuZnVuY3Rpb24gQXN5bmMoKSB7XG4gICAgdGhpcy5fY3VzdG9tU2NoZWR1bGVyID0gZmFsc2U7XG4gICAgdGhpcy5faXNUaWNrVXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2xhdGVRdWV1ZSA9IG5ldyBRdWV1ZSgxNik7XG4gICAgdGhpcy5fbm9ybWFsUXVldWUgPSBuZXcgUXVldWUoMTYpO1xuICAgIHRoaXMuX2hhdmVEcmFpbmVkUXVldWVzID0gZmFsc2U7XG4gICAgdGhpcy5fdHJhbXBvbGluZUVuYWJsZWQgPSB0cnVlO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB0aGlzLmRyYWluUXVldWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9kcmFpblF1ZXVlcygpO1xuICAgIH07XG4gICAgdGhpcy5fc2NoZWR1bGUgPSBzY2hlZHVsZTtcbn1cblxuQXN5bmMucHJvdG90eXBlLnNldFNjaGVkdWxlciA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgdmFyIHByZXYgPSB0aGlzLl9zY2hlZHVsZTtcbiAgICB0aGlzLl9zY2hlZHVsZSA9IGZuO1xuICAgIHRoaXMuX2N1c3RvbVNjaGVkdWxlciA9IHRydWU7XG4gICAgcmV0dXJuIHByZXY7XG59O1xuXG5Bc3luYy5wcm90b3R5cGUuaGFzQ3VzdG9tU2NoZWR1bGVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbVNjaGVkdWxlcjtcbn07XG5cbkFzeW5jLnByb3RvdHlwZS5lbmFibGVUcmFtcG9saW5lID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fdHJhbXBvbGluZUVuYWJsZWQgPSB0cnVlO1xufTtcblxuQXN5bmMucHJvdG90eXBlLmRpc2FibGVUcmFtcG9saW5lSWZOZWNlc3NhcnkgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodXRpbC5oYXNEZXZUb29scykge1xuICAgICAgICB0aGlzLl90cmFtcG9saW5lRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cbn07XG5cbkFzeW5jLnByb3RvdHlwZS5oYXZlSXRlbXNRdWV1ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzVGlja1VzZWQgfHwgdGhpcy5faGF2ZURyYWluZWRRdWV1ZXM7XG59O1xuXG5cbkFzeW5jLnByb3RvdHlwZS5mYXRhbEVycm9yID0gZnVuY3Rpb24oZSwgaXNOb2RlKSB7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShcIkZhdGFsIFwiICsgKGUgaW5zdGFuY2VvZiBFcnJvciA/IGUuc3RhY2sgOiBlKSArXG4gICAgICAgICAgICBcIlxcblwiKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGhyb3dMYXRlcihlKTtcbiAgICB9XG59O1xuXG5Bc3luYy5wcm90b3R5cGUudGhyb3dMYXRlciA9IGZ1bmN0aW9uKGZuLCBhcmcpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBhcmcgPSBmbjtcbiAgICAgICAgZm4gPSBmdW5jdGlvbiAoKSB7IHRocm93IGFyZzsgfTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmbihhcmcpO1xuICAgICAgICB9LCAwKTtcbiAgICB9IGVsc2UgdHJ5IHtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmbihhcmcpO1xuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGFzeW5jIHNjaGVkdWxlciBhdmFpbGFibGVcXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIEFzeW5jSW52b2tlTGF0ZXIoZm4sIHJlY2VpdmVyLCBhcmcpIHtcbiAgICB0aGlzLl9sYXRlUXVldWUucHVzaChmbiwgcmVjZWl2ZXIsIGFyZyk7XG4gICAgdGhpcy5fcXVldWVUaWNrKCk7XG59XG5cbmZ1bmN0aW9uIEFzeW5jSW52b2tlKGZuLCByZWNlaXZlciwgYXJnKSB7XG4gICAgdGhpcy5fbm9ybWFsUXVldWUucHVzaChmbiwgcmVjZWl2ZXIsIGFyZyk7XG4gICAgdGhpcy5fcXVldWVUaWNrKCk7XG59XG5cbmZ1bmN0aW9uIEFzeW5jU2V0dGxlUHJvbWlzZXMocHJvbWlzZSkge1xuICAgIHRoaXMuX25vcm1hbFF1ZXVlLl9wdXNoT25lKHByb21pc2UpO1xuICAgIHRoaXMuX3F1ZXVlVGljaygpO1xufVxuXG5pZiAoIXV0aWwuaGFzRGV2VG9vbHMpIHtcbiAgICBBc3luYy5wcm90b3R5cGUuaW52b2tlTGF0ZXIgPSBBc3luY0ludm9rZUxhdGVyO1xuICAgIEFzeW5jLnByb3RvdHlwZS5pbnZva2UgPSBBc3luY0ludm9rZTtcbiAgICBBc3luYy5wcm90b3R5cGUuc2V0dGxlUHJvbWlzZXMgPSBBc3luY1NldHRsZVByb21pc2VzO1xufSBlbHNlIHtcbiAgICBBc3luYy5wcm90b3R5cGUuaW52b2tlTGF0ZXIgPSBmdW5jdGlvbiAoZm4sIHJlY2VpdmVyLCBhcmcpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYW1wb2xpbmVFbmFibGVkKSB7XG4gICAgICAgICAgICBBc3luY0ludm9rZUxhdGVyLmNhbGwodGhpcywgZm4sIHJlY2VpdmVyLCBhcmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgZm4uY2FsbChyZWNlaXZlciwgYXJnKTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgQXN5bmMucHJvdG90eXBlLmludm9rZSA9IGZ1bmN0aW9uIChmbiwgcmVjZWl2ZXIsIGFyZykge1xuICAgICAgICBpZiAodGhpcy5fdHJhbXBvbGluZUVuYWJsZWQpIHtcbiAgICAgICAgICAgIEFzeW5jSW52b2tlLmNhbGwodGhpcywgZm4sIHJlY2VpdmVyLCBhcmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgZm4uY2FsbChyZWNlaXZlciwgYXJnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIEFzeW5jLnByb3RvdHlwZS5zZXR0bGVQcm9taXNlcyA9IGZ1bmN0aW9uKHByb21pc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RyYW1wb2xpbmVFbmFibGVkKSB7XG4gICAgICAgICAgICBBc3luY1NldHRsZVByb21pc2VzLmNhbGwodGhpcywgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlLl9zZXR0bGVQcm9taXNlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5Bc3luYy5wcm90b3R5cGUuX2RyYWluUXVldWUgPSBmdW5jdGlvbihxdWV1ZSkge1xuICAgIHdoaWxlIChxdWV1ZS5sZW5ndGgoKSA+IDApIHtcbiAgICAgICAgdmFyIGZuID0gcXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBmbi5fc2V0dGxlUHJvbWlzZXMoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZWNlaXZlciA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgIHZhciBhcmcgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgICBmbi5jYWxsKHJlY2VpdmVyLCBhcmcpO1xuICAgIH1cbn07XG5cbkFzeW5jLnByb3RvdHlwZS5fZHJhaW5RdWV1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fZHJhaW5RdWV1ZSh0aGlzLl9ub3JtYWxRdWV1ZSk7XG4gICAgdGhpcy5fcmVzZXQoKTtcbiAgICB0aGlzLl9oYXZlRHJhaW5lZFF1ZXVlcyA9IHRydWU7XG4gICAgdGhpcy5fZHJhaW5RdWV1ZSh0aGlzLl9sYXRlUXVldWUpO1xufTtcblxuQXN5bmMucHJvdG90eXBlLl9xdWV1ZVRpY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1RpY2tVc2VkKSB7XG4gICAgICAgIHRoaXMuX2lzVGlja1VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9zY2hlZHVsZSh0aGlzLmRyYWluUXVldWVzKTtcbiAgICB9XG59O1xuXG5Bc3luYy5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2lzVGlja1VzZWQgPSBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQXN5bmM7XG5tb2R1bGUuZXhwb3J0cy5maXJzdExpbmVFcnJvciA9IGZpcnN0TGluZUVycm9yO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbn0se1wiLi9xdWV1ZVwiOjcyLFwiLi9zY2hlZHVsZVwiOjc1LFwiLi91dGlsXCI6ODIsXCJfcHJvY2Vzc1wiOjEwMX1dLDUwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLCBJTlRFUk5BTCwgdHJ5Q29udmVydFRvUHJvbWlzZSwgZGVidWcpIHtcbnZhciBjYWxsZWRCaW5kID0gZmFsc2U7XG52YXIgcmVqZWN0VGhpcyA9IGZ1bmN0aW9uKF8sIGUpIHtcbiAgICB0aGlzLl9yZWplY3QoZSk7XG59O1xuXG52YXIgdGFyZ2V0UmVqZWN0ZWQgPSBmdW5jdGlvbihlLCBjb250ZXh0KSB7XG4gICAgY29udGV4dC5wcm9taXNlUmVqZWN0aW9uUXVldWVkID0gdHJ1ZTtcbiAgICBjb250ZXh0LmJpbmRpbmdQcm9taXNlLl90aGVuKHJlamVjdFRoaXMsIHJlamVjdFRoaXMsIG51bGwsIHRoaXMsIGUpO1xufTtcblxudmFyIGJpbmRpbmdSZXNvbHZlZCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGNvbnRleHQpIHtcbiAgICBpZiAoKCh0aGlzLl9iaXRGaWVsZCAmIDUwMzk3MTg0KSA9PT0gMCkpIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZUNhbGxiYWNrKGNvbnRleHQudGFyZ2V0KTtcbiAgICB9XG59O1xuXG52YXIgYmluZGluZ1JlamVjdGVkID0gZnVuY3Rpb24oZSwgY29udGV4dCkge1xuICAgIGlmICghY29udGV4dC5wcm9taXNlUmVqZWN0aW9uUXVldWVkKSB0aGlzLl9yZWplY3QoZSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5iaW5kID0gZnVuY3Rpb24gKHRoaXNBcmcpIHtcbiAgICBpZiAoIWNhbGxlZEJpbmQpIHtcbiAgICAgICAgY2FsbGVkQmluZCA9IHRydWU7XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9wcm9wYWdhdGVGcm9tID0gZGVidWcucHJvcGFnYXRlRnJvbUZ1bmN0aW9uKCk7XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9ib3VuZFZhbHVlID0gZGVidWcuYm91bmRWYWx1ZUZ1bmN0aW9uKCk7XG4gICAgfVxuICAgIHZhciBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHRoaXNBcmcpO1xuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0Ll9wcm9wYWdhdGVGcm9tKHRoaXMsIDEpO1xuICAgIHZhciB0YXJnZXQgPSB0aGlzLl90YXJnZXQoKTtcbiAgICByZXQuX3NldEJvdW5kVG8obWF5YmVQcm9taXNlKTtcbiAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB2YXIgY29udGV4dCA9IHtcbiAgICAgICAgICAgIHByb21pc2VSZWplY3Rpb25RdWV1ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgcHJvbWlzZTogcmV0LFxuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgICAgICAgICBiaW5kaW5nUHJvbWlzZTogbWF5YmVQcm9taXNlXG4gICAgICAgIH07XG4gICAgICAgIHRhcmdldC5fdGhlbihJTlRFUk5BTCwgdGFyZ2V0UmVqZWN0ZWQsIHVuZGVmaW5lZCwgcmV0LCBjb250ZXh0KTtcbiAgICAgICAgbWF5YmVQcm9taXNlLl90aGVuKFxuICAgICAgICAgICAgYmluZGluZ1Jlc29sdmVkLCBiaW5kaW5nUmVqZWN0ZWQsIHVuZGVmaW5lZCwgcmV0LCBjb250ZXh0KTtcbiAgICAgICAgcmV0Ll9zZXRPbkNhbmNlbChtYXliZVByb21pc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5fcmVzb2x2ZUNhbGxiYWNrKHRhcmdldCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0Qm91bmRUbyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICBpZiAob2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCB8IDIwOTcxNTI7XG4gICAgICAgIHRoaXMuX2JvdW5kVG8gPSBvYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCAmICh+MjA5NzE1Mik7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzQm91bmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDIwOTcxNTIpID09PSAyMDk3MTUyO1xufTtcblxuUHJvbWlzZS5iaW5kID0gZnVuY3Rpb24gKHRoaXNBcmcsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkuYmluZCh0aGlzQXJnKTtcbn07XG59O1xuXG59LHt9XSw1MTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbnZhciBjciA9IE9iamVjdC5jcmVhdGU7XG5pZiAoY3IpIHtcbiAgICB2YXIgY2FsbGVyQ2FjaGUgPSBjcihudWxsKTtcbiAgICB2YXIgZ2V0dGVyQ2FjaGUgPSBjcihudWxsKTtcbiAgICBjYWxsZXJDYWNoZVtcIiBzaXplXCJdID0gZ2V0dGVyQ2FjaGVbXCIgc2l6ZVwiXSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSkge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIGNhbkV2YWx1YXRlID0gdXRpbC5jYW5FdmFsdWF0ZTtcbnZhciBpc0lkZW50aWZpZXIgPSB1dGlsLmlzSWRlbnRpZmllcjtcblxudmFyIGdldE1ldGhvZENhbGxlcjtcbnZhciBnZXRHZXR0ZXI7XG5pZiAoIWZhbHNlKSB7XG52YXIgbWFrZU1ldGhvZENhbGxlciA9IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcImVuc3VyZU1ldGhvZFwiLCBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAndXNlIHN0cmljdCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5sZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBlbnN1cmVNZXRob2Qob2JqLCAnbWV0aG9kTmFtZScpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBzd2l0Y2gobGVuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gb2JqLm1ldGhvZE5hbWUodGhpc1swXSk7ICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gb2JqLm1ldGhvZE5hbWUodGhpc1swXSwgdGhpc1sxXSk7ICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gb2JqLm1ldGhvZE5hbWUodGhpc1swXSwgdGhpc1sxXSwgdGhpc1syXSk7ICAgIFxcblxcXG4gICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gb2JqLm1ldGhvZE5hbWUoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmoubWV0aG9kTmFtZS5hcHBseShvYmosIHRoaXMpOyAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIFwiLnJlcGxhY2UoL21ldGhvZE5hbWUvZywgbWV0aG9kTmFtZSkpKGVuc3VyZU1ldGhvZCk7XG59O1xuXG52YXIgbWFrZUdldHRlciA9IGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwib2JqXCIsIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgJ3VzZSBzdHJpY3QnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgcmV0dXJuIG9iai5wcm9wZXJ0eU5hbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgXCIucmVwbGFjZShcInByb3BlcnR5TmFtZVwiLCBwcm9wZXJ0eU5hbWUpKTtcbn07XG5cbnZhciBnZXRDb21waWxlZCA9IGZ1bmN0aW9uKG5hbWUsIGNvbXBpbGVyLCBjYWNoZSkge1xuICAgIHZhciByZXQgPSBjYWNoZVtuYW1lXTtcbiAgICBpZiAodHlwZW9mIHJldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGlmICghaXNJZGVudGlmaWVyKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXQgPSBjb21waWxlcihuYW1lKTtcbiAgICAgICAgY2FjaGVbbmFtZV0gPSByZXQ7XG4gICAgICAgIGNhY2hlW1wiIHNpemVcIl0rKztcbiAgICAgICAgaWYgKGNhY2hlW1wiIHNpemVcIl0gPiA1MTIpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY2FjaGUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkgZGVsZXRlIGNhY2hlW2tleXNbaV1dO1xuICAgICAgICAgICAgY2FjaGVbXCIgc2l6ZVwiXSA9IGtleXMubGVuZ3RoIC0gMjU2O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5nZXRNZXRob2RDYWxsZXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIGdldENvbXBpbGVkKG5hbWUsIG1ha2VNZXRob2RDYWxsZXIsIGNhbGxlckNhY2hlKTtcbn07XG5cbmdldEdldHRlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gZ2V0Q29tcGlsZWQobmFtZSwgbWFrZUdldHRlciwgZ2V0dGVyQ2FjaGUpO1xufTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlTWV0aG9kKG9iaiwgbWV0aG9kTmFtZSkge1xuICAgIHZhciBmbjtcbiAgICBpZiAob2JqICE9IG51bGwpIGZuID0gb2JqW21ldGhvZE5hbWVdO1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IFwiT2JqZWN0IFwiICsgdXRpbC5jbGFzc1N0cmluZyhvYmopICsgXCIgaGFzIG5vIG1ldGhvZCAnXCIgK1xuICAgICAgICAgICAgdXRpbC50b1N0cmluZyhtZXRob2ROYW1lKSArIFwiJ1wiO1xuICAgICAgICB0aHJvdyBuZXcgUHJvbWlzZS5UeXBlRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBmbjtcbn1cblxuZnVuY3Rpb24gY2FsbGVyKG9iaikge1xuICAgIHZhciBtZXRob2ROYW1lID0gdGhpcy5wb3AoKTtcbiAgICB2YXIgZm4gPSBlbnN1cmVNZXRob2Qob2JqLCBtZXRob2ROYW1lKTtcbiAgICByZXR1cm4gZm4uYXBwbHkob2JqLCB0aGlzKTtcbn1cblByb21pc2UucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSkge1xuICAgIHZhciAkX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7dmFyIGFyZ3MgPSBuZXcgQXJyYXkoTWF0aC5tYXgoJF9sZW4gLSAxLCAwKSk7IGZvcih2YXIgJF9pID0gMTsgJF9pIDwgJF9sZW47ICsrJF9pKSB7YXJnc1skX2kgLSAxXSA9IGFyZ3VtZW50c1skX2ldO307XG4gICAgaWYgKCFmYWxzZSkge1xuICAgICAgICBpZiAoY2FuRXZhbHVhdGUpIHtcbiAgICAgICAgICAgIHZhciBtYXliZUNhbGxlciA9IGdldE1ldGhvZENhbGxlcihtZXRob2ROYW1lKTtcbiAgICAgICAgICAgIGlmIChtYXliZUNhbGxlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90aGVuKFxuICAgICAgICAgICAgICAgICAgICBtYXliZUNhbGxlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyZ3MsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXJncy5wdXNoKG1ldGhvZE5hbWUpO1xuICAgIHJldHVybiB0aGlzLl90aGVuKGNhbGxlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyZ3MsIHVuZGVmaW5lZCk7XG59O1xuXG5mdW5jdGlvbiBuYW1lZEdldHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqW3RoaXNdO1xufVxuZnVuY3Rpb24gaW5kZXhlZEdldHRlcihvYmopIHtcbiAgICB2YXIgaW5kZXggPSArdGhpcztcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IE1hdGgubWF4KDAsIGluZGV4ICsgb2JqLmxlbmd0aCk7XG4gICAgcmV0dXJuIG9ialtpbmRleF07XG59XG5Qcm9taXNlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgdmFyIGlzSW5kZXggPSAodHlwZW9mIHByb3BlcnR5TmFtZSA9PT0gXCJudW1iZXJcIik7XG4gICAgdmFyIGdldHRlcjtcbiAgICBpZiAoIWlzSW5kZXgpIHtcbiAgICAgICAgaWYgKGNhbkV2YWx1YXRlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVHZXR0ZXIgPSBnZXRHZXR0ZXIocHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGdldHRlciA9IG1heWJlR2V0dGVyICE9PSBudWxsID8gbWF5YmVHZXR0ZXIgOiBuYW1lZEdldHRlcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldHRlciA9IG5hbWVkR2V0dGVyO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0dGVyID0gaW5kZXhlZEdldHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RoZW4oZ2V0dGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcHJvcGVydHlOYW1lLCB1bmRlZmluZWQpO1xufTtcbn07XG5cbn0se1wiLi91dGlsXCI6ODJ9XSw1MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBhcGlSZWplY3Rpb24sIGRlYnVnKSB7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xudmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcbnZhciBhc3luYyA9IFByb21pc2UuX2FzeW5jO1xuXG5Qcm9taXNlLnByb3RvdHlwZVtcImJyZWFrXCJdID0gUHJvbWlzZS5wcm90b3R5cGUuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCFkZWJ1Zy5jYW5jZWxsYXRpb24oKSkgcmV0dXJuIHRoaXMuX3dhcm4oXCJjYW5jZWxsYXRpb24gaXMgZGlzYWJsZWRcIik7XG5cbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgdmFyIGNoaWxkID0gcHJvbWlzZTtcbiAgICB3aGlsZSAocHJvbWlzZS5faXNDYW5jZWxsYWJsZSgpKSB7XG4gICAgICAgIGlmICghcHJvbWlzZS5fY2FuY2VsQnkoY2hpbGQpKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQuX2lzRm9sbG93aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjaGlsZC5fZm9sbG93ZWUoKS5jYW5jZWwoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGQuX2NhbmNlbEJyYW5jaGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnQgPSBwcm9taXNlLl9jYW5jZWxsYXRpb25QYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCB8fCAhcGFyZW50Ll9pc0NhbmNlbGxhYmxlKCkpIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9pc0ZvbGxvd2luZygpKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS5fZm9sbG93ZWUoKS5jYW5jZWwoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS5fY2FuY2VsQnJhbmNoZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2lzRm9sbG93aW5nKCkpIHByb21pc2UuX2ZvbGxvd2VlKCkuY2FuY2VsKCk7XG4gICAgICAgICAgICBwcm9taXNlLl9zZXRXaWxsQmVDYW5jZWxsZWQoKTtcbiAgICAgICAgICAgIGNoaWxkID0gcHJvbWlzZTtcbiAgICAgICAgICAgIHByb21pc2UgPSBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fYnJhbmNoSGFzQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbC0tO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2Vub3VnaEJyYW5jaGVzSGF2ZUNhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9icmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgdGhpcy5fYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCA8PSAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2NhbmNlbEJ5ID0gZnVuY3Rpb24oY2FuY2VsbGVyKSB7XG4gICAgaWYgKGNhbmNlbGxlciA9PT0gdGhpcykge1xuICAgICAgICB0aGlzLl9icmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsID0gMDtcbiAgICAgICAgdGhpcy5faW52b2tlT25DYW5jZWwoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYnJhbmNoSGFzQ2FuY2VsbGVkKCk7XG4gICAgICAgIGlmICh0aGlzLl9lbm91Z2hCcmFuY2hlc0hhdmVDYW5jZWxsZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5faW52b2tlT25DYW5jZWwoKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9jYW5jZWxCcmFuY2hlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9lbm91Z2hCcmFuY2hlc0hhdmVDYW5jZWxsZWQoKSkge1xuICAgICAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLl9pc0NhbmNlbGxhYmxlKCkpIHJldHVybjtcbiAgICB0aGlzLl9zZXRDYW5jZWxsZWQoKTtcbiAgICBhc3luYy5pbnZva2UodGhpcy5fY2FuY2VsUHJvbWlzZXMsIHRoaXMsIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fY2FuY2VsUHJvbWlzZXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGVuZ3RoKCkgPiAwKSB0aGlzLl9zZXR0bGVQcm9taXNlcygpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0T25DYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9vbkNhbmNlbEZpZWxkID0gdW5kZWZpbmVkO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzQ2FuY2VsbGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1BlbmRpbmcoKSAmJiAhdGhpcy5faXNDYW5jZWxsZWQoKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzQ2FuY2VsbGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1BlbmRpbmcoKSAmJiAhdGhpcy5pc0NhbmNlbGxlZCgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2RvSW52b2tlT25DYW5jZWwgPSBmdW5jdGlvbihvbkNhbmNlbENhbGxiYWNrLCBpbnRlcm5hbE9ubHkpIHtcbiAgICBpZiAodXRpbC5pc0FycmF5KG9uQ2FuY2VsQ2FsbGJhY2spKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb25DYW5jZWxDYWxsYmFjay5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5fZG9JbnZva2VPbkNhbmNlbChvbkNhbmNlbENhbGxiYWNrW2ldLCBpbnRlcm5hbE9ubHkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChvbkNhbmNlbENhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbkNhbmNlbENhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGlmICghaW50ZXJuYWxPbmx5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGUgPSB0cnlDYXRjaChvbkNhbmNlbENhbGxiYWNrKS5jYWxsKHRoaXMuX2JvdW5kVmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGUgPT09IGVycm9yT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaEV4dHJhVHJhY2UoZS5lKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMudGhyb3dMYXRlcihlLmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uQ2FuY2VsQ2FsbGJhY2suX3Jlc3VsdENhbmNlbGxlZCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl9pbnZva2VPbkNhbmNlbCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbkNhbmNlbENhbGxiYWNrID0gdGhpcy5fb25DYW5jZWwoKTtcbiAgICB0aGlzLl91bnNldE9uQ2FuY2VsKCk7XG4gICAgYXN5bmMuaW52b2tlKHRoaXMuX2RvSW52b2tlT25DYW5jZWwsIHRoaXMsIG9uQ2FuY2VsQ2FsbGJhY2spO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2ludm9rZUludGVybmFsT25DYW5jZWwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5faXNDYW5jZWxsYWJsZSgpKSB7XG4gICAgICAgIHRoaXMuX2RvSW52b2tlT25DYW5jZWwodGhpcy5fb25DYW5jZWwoKSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3Vuc2V0T25DYW5jZWwoKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmVzdWx0Q2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jYW5jZWwoKTtcbn07XG5cbn07XG5cbn0se1wiLi91dGlsXCI6ODJ9XSw1MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oTkVYVF9GSUxURVIpIHtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZShcIi4vZXM1XCIpLmtleXM7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xudmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcblxuZnVuY3Rpb24gY2F0Y2hGaWx0ZXIoaW5zdGFuY2VzLCBjYiwgcHJvbWlzZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgICAgIHZhciBib3VuZFRvID0gcHJvbWlzZS5fYm91bmRWYWx1ZSgpO1xuICAgICAgICBwcmVkaWNhdGVMb29wOiBmb3IgKHZhciBpID0gMDsgaSA8IGluc3RhbmNlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSBpbnN0YW5jZXNbaV07XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSBFcnJvciB8fFxuICAgICAgICAgICAgICAgIChpdGVtICE9IG51bGwgJiYgaXRlbS5wcm90b3R5cGUgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeUNhdGNoKGNiKS5jYWxsKGJvdW5kVG8sIGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHZhciBtYXRjaGVzUHJlZGljYXRlID0gdHJ5Q2F0Y2goaXRlbSkuY2FsbChib3VuZFRvLCBlKTtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlc1ByZWRpY2F0ZSA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNQcmVkaWNhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaGVzUHJlZGljYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlDYXRjaChjYikuY2FsbChib3VuZFRvLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHV0aWwuaXNPYmplY3QoZSkpIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoaXRlbSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVtrZXldICE9IGVba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgcHJlZGljYXRlTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ5Q2F0Y2goY2IpLmNhbGwoYm91bmRUbywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5FWFRfRklMVEVSO1xuICAgIH07XG59XG5cbnJldHVybiBjYXRjaEZpbHRlcjtcbn07XG5cbn0se1wiLi9lczVcIjo1OSxcIi4vdXRpbFwiOjgyfV0sNTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UpIHtcbnZhciBsb25nU3RhY2tUcmFjZXMgPSBmYWxzZTtcbnZhciBjb250ZXh0U3RhY2sgPSBbXTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Byb21pc2VDcmVhdGVkID0gZnVuY3Rpb24oKSB7fTtcblByb21pc2UucHJvdG90eXBlLl9wdXNoQ29udGV4dCA9IGZ1bmN0aW9uKCkge307XG5Qcm9taXNlLnByb3RvdHlwZS5fcG9wQ29udGV4dCA9IGZ1bmN0aW9uKCkge3JldHVybiBudWxsO307XG5Qcm9taXNlLl9wZWVrQ29udGV4dCA9IFByb21pc2UucHJvdG90eXBlLl9wZWVrQ29udGV4dCA9IGZ1bmN0aW9uKCkge307XG5cbmZ1bmN0aW9uIENvbnRleHQoKSB7XG4gICAgdGhpcy5fdHJhY2UgPSBuZXcgQ29udGV4dC5DYXB0dXJlZFRyYWNlKHBlZWtDb250ZXh0KCkpO1xufVxuQ29udGV4dC5wcm90b3R5cGUuX3B1c2hDb250ZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl90cmFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3RyYWNlLl9wcm9taXNlQ3JlYXRlZCA9IG51bGw7XG4gICAgICAgIGNvbnRleHRTdGFjay5wdXNoKHRoaXMuX3RyYWNlKTtcbiAgICB9XG59O1xuXG5Db250ZXh0LnByb3RvdHlwZS5fcG9wQ29udGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fdHJhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgdHJhY2UgPSBjb250ZXh0U3RhY2sucG9wKCk7XG4gICAgICAgIHZhciByZXQgPSB0cmFjZS5fcHJvbWlzZUNyZWF0ZWQ7XG4gICAgICAgIHRyYWNlLl9wcm9taXNlQ3JlYXRlZCA9IG51bGw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlQ29udGV4dCgpIHtcbiAgICBpZiAobG9uZ1N0YWNrVHJhY2VzKSByZXR1cm4gbmV3IENvbnRleHQoKTtcbn1cblxuZnVuY3Rpb24gcGVla0NvbnRleHQoKSB7XG4gICAgdmFyIGxhc3RJbmRleCA9IGNvbnRleHRTdGFjay5sZW5ndGggLSAxO1xuICAgIGlmIChsYXN0SW5kZXggPj0gMCkge1xuICAgICAgICByZXR1cm4gY29udGV4dFN0YWNrW2xhc3RJbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5Db250ZXh0LkNhcHR1cmVkVHJhY2UgPSBudWxsO1xuQ29udGV4dC5jcmVhdGUgPSBjcmVhdGVDb250ZXh0O1xuQ29udGV4dC5kZWFjdGl2YXRlTG9uZ1N0YWNrVHJhY2VzID0gZnVuY3Rpb24oKSB7fTtcbkNvbnRleHQuYWN0aXZhdGVMb25nU3RhY2tUcmFjZXMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgUHJvbWlzZV9wdXNoQ29udGV4dCA9IFByb21pc2UucHJvdG90eXBlLl9wdXNoQ29udGV4dDtcbiAgICB2YXIgUHJvbWlzZV9wb3BDb250ZXh0ID0gUHJvbWlzZS5wcm90b3R5cGUuX3BvcENvbnRleHQ7XG4gICAgdmFyIFByb21pc2VfUGVla0NvbnRleHQgPSBQcm9taXNlLl9wZWVrQ29udGV4dDtcbiAgICB2YXIgUHJvbWlzZV9wZWVrQ29udGV4dCA9IFByb21pc2UucHJvdG90eXBlLl9wZWVrQ29udGV4dDtcbiAgICB2YXIgUHJvbWlzZV9wcm9taXNlQ3JlYXRlZCA9IFByb21pc2UucHJvdG90eXBlLl9wcm9taXNlQ3JlYXRlZDtcbiAgICBDb250ZXh0LmRlYWN0aXZhdGVMb25nU3RhY2tUcmFjZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX3B1c2hDb250ZXh0ID0gUHJvbWlzZV9wdXNoQ29udGV4dDtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX3BvcENvbnRleHQgPSBQcm9taXNlX3BvcENvbnRleHQ7XG4gICAgICAgIFByb21pc2UuX3BlZWtDb250ZXh0ID0gUHJvbWlzZV9QZWVrQ29udGV4dDtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX3BlZWtDb250ZXh0ID0gUHJvbWlzZV9wZWVrQ29udGV4dDtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX3Byb21pc2VDcmVhdGVkID0gUHJvbWlzZV9wcm9taXNlQ3JlYXRlZDtcbiAgICAgICAgbG9uZ1N0YWNrVHJhY2VzID0gZmFsc2U7XG4gICAgfTtcbiAgICBsb25nU3RhY2tUcmFjZXMgPSB0cnVlO1xuICAgIFByb21pc2UucHJvdG90eXBlLl9wdXNoQ29udGV4dCA9IENvbnRleHQucHJvdG90eXBlLl9wdXNoQ29udGV4dDtcbiAgICBQcm9taXNlLnByb3RvdHlwZS5fcG9wQ29udGV4dCA9IENvbnRleHQucHJvdG90eXBlLl9wb3BDb250ZXh0O1xuICAgIFByb21pc2UuX3BlZWtDb250ZXh0ID0gUHJvbWlzZS5wcm90b3R5cGUuX3BlZWtDb250ZXh0ID0gcGVla0NvbnRleHQ7XG4gICAgUHJvbWlzZS5wcm90b3R5cGUuX3Byb21pc2VDcmVhdGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9wZWVrQ29udGV4dCgpO1xuICAgICAgICBpZiAoY3R4ICYmIGN0eC5fcHJvbWlzZUNyZWF0ZWQgPT0gbnVsbCkgY3R4Ll9wcm9taXNlQ3JlYXRlZCA9IHRoaXM7XG4gICAgfTtcbn07XG5yZXR1cm4gQ29udGV4dDtcbn07XG5cbn0se31dLDU1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgQ29udGV4dCkge1xudmFyIGdldERvbWFpbiA9IFByb21pc2UuX2dldERvbWFpbjtcbnZhciBhc3luYyA9IFByb21pc2UuX2FzeW5jO1xudmFyIFdhcm5pbmcgPSByZXF1aXJlKFwiLi9lcnJvcnNcIikuV2FybmluZztcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbnZhciBjYW5BdHRhY2hUcmFjZSA9IHV0aWwuY2FuQXR0YWNoVHJhY2U7XG52YXIgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZDtcbnZhciBwb3NzaWJseVVuaGFuZGxlZFJlamVjdGlvbjtcbnZhciBibHVlYmlyZEZyYW1lUGF0dGVybiA9XG4gICAgL1tcXFxcXFwvXWJsdWViaXJkW1xcXFxcXC9danNbXFxcXFxcL10ocmVsZWFzZXxkZWJ1Z3xpbnN0cnVtZW50ZWQpLztcbnZhciBub2RlRnJhbWVQYXR0ZXJuID0gL1xcKCg/OnRpbWVyc1xcLmpzKTpcXGQrOlxcZCtcXCkvO1xudmFyIHBhcnNlTGluZVBhdHRlcm4gPSAvW1xcLzxcXChdKC4rPyk6KFxcZCspOihcXGQrKVxcKT9cXHMqJC87XG52YXIgc3RhY2tGcmFtZVBhdHRlcm4gPSBudWxsO1xudmFyIGZvcm1hdFN0YWNrID0gbnVsbDtcbnZhciBpbmRlbnRTdGFja0ZyYW1lcyA9IGZhbHNlO1xudmFyIHByaW50V2FybmluZztcbnZhciBkZWJ1Z2dpbmcgPSAhISh1dGlsLmVudihcIkJMVUVCSVJEX0RFQlVHXCIpICE9IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChmYWxzZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZW52KFwiQkxVRUJJUkRfREVCVUdcIikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmVudihcIk5PREVfRU5WXCIpID09PSBcImRldmVsb3BtZW50XCIpKTtcblxudmFyIHdhcm5pbmdzID0gISEodXRpbC5lbnYoXCJCTFVFQklSRF9XQVJOSU5HU1wiKSAhPSAwICYmXG4gICAgKGRlYnVnZ2luZyB8fCB1dGlsLmVudihcIkJMVUVCSVJEX1dBUk5JTkdTXCIpKSk7XG5cbnZhciBsb25nU3RhY2tUcmFjZXMgPSAhISh1dGlsLmVudihcIkJMVUVCSVJEX0xPTkdfU1RBQ0tfVFJBQ0VTXCIpICE9IDAgJiZcbiAgICAoZGVidWdnaW5nIHx8IHV0aWwuZW52KFwiQkxVRUJJUkRfTE9OR19TVEFDS19UUkFDRVNcIikpKTtcblxudmFyIHdGb3Jnb3R0ZW5SZXR1cm4gPSB1dGlsLmVudihcIkJMVUVCSVJEX1dfRk9SR09UVEVOX1JFVFVSTlwiKSAhPSAwICYmXG4gICAgKHdhcm5pbmdzIHx8ICEhdXRpbC5lbnYoXCJCTFVFQklSRF9XX0ZPUkdPVFRFTl9SRVRVUk5cIikpO1xuXG5Qcm9taXNlLnByb3RvdHlwZS5zdXBwcmVzc1VuaGFuZGxlZFJlamVjdGlvbnMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0KCk7XG4gICAgdGFyZ2V0Ll9iaXRGaWVsZCA9ICgodGFyZ2V0Ll9iaXRGaWVsZCAmICh+MTA0ODU3NikpIHxcbiAgICAgICAgICAgICAgICAgICAgICA1MjQyODgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2Vuc3VyZVBvc3NpYmxlUmVqZWN0aW9uSGFuZGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoKHRoaXMuX2JpdEZpZWxkICYgNTI0Mjg4KSAhPT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuX3NldFJlamVjdGlvbklzVW5oYW5kbGVkKCk7XG4gICAgYXN5bmMuaW52b2tlTGF0ZXIodGhpcy5fbm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uLCB0aGlzLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX25vdGlmeVVuaGFuZGxlZFJlamVjdGlvbklzSGFuZGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBmaXJlUmVqZWN0aW9uRXZlbnQoXCJyZWplY3Rpb25IYW5kbGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZCwgdW5kZWZpbmVkLCB0aGlzKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRSZXR1cm5lZE5vblVuZGVmaW5lZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAyNjg0MzU0NTY7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmV0dXJuZWROb25VbmRlZmluZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgMjY4NDM1NDU2KSAhPT0gMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVqZWN0aW9uVW5oYW5kbGVkKCkpIHtcbiAgICAgICAgdmFyIHJlYXNvbiA9IHRoaXMuX3NldHRsZWRWYWx1ZSgpO1xuICAgICAgICB0aGlzLl9zZXRVbmhhbmRsZWRSZWplY3Rpb25Jc05vdGlmaWVkKCk7XG4gICAgICAgIGZpcmVSZWplY3Rpb25FdmVudChcInVuaGFuZGxlZFJlamVjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseVVuaGFuZGxlZFJlamVjdGlvbiwgcmVhc29uLCB0aGlzKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0VW5oYW5kbGVkUmVqZWN0aW9uSXNOb3RpZmllZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgMjYyMTQ0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0VW5oYW5kbGVkUmVqZWN0aW9uSXNOb3RpZmllZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkICYgKH4yNjIxNDQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzVW5oYW5kbGVkUmVqZWN0aW9uTm90aWZpZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDI2MjE0NCkgPiAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldFJlamVjdGlvbklzVW5oYW5kbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAxMDQ4NTc2O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Vuc2V0UmVqZWN0aW9uSXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCAmICh+MTA0ODU3Nik7XG4gICAgaWYgKHRoaXMuX2lzVW5oYW5kbGVkUmVqZWN0aW9uTm90aWZpZWQoKSkge1xuICAgICAgICB0aGlzLl91bnNldFVuaGFuZGxlZFJlamVjdGlvbklzTm90aWZpZWQoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uSXNIYW5kbGVkKCk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2lzUmVqZWN0aW9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAxMDQ4NTc2KSA+IDA7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fd2FybiA9IGZ1bmN0aW9uKG1lc3NhZ2UsIHNob3VsZFVzZU93blRyYWNlLCBwcm9taXNlKSB7XG4gICAgcmV0dXJuIHdhcm4obWVzc2FnZSwgc2hvdWxkVXNlT3duVHJhY2UsIHByb21pc2UgfHwgdGhpcyk7XG59O1xuXG5Qcm9taXNlLm9uUG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gZ2V0RG9tYWluKCk7XG4gICAgcG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24gPVxuICAgICAgICB0eXBlb2YgZm4gPT09IFwiZnVuY3Rpb25cIiA/IChkb21haW4gPT09IG51bGwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA6IHV0aWwuZG9tYWluQmluZChkb21haW4sIGZuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xufTtcblxuUHJvbWlzZS5vblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZWQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gZ2V0RG9tYWluKCk7XG4gICAgdW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZCA9XG4gICAgICAgIHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiID8gKGRvbWFpbiA9PT0gbnVsbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuIDogdXRpbC5kb21haW5CaW5kKGRvbWFpbiwgZm4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG59O1xuXG52YXIgZGlzYWJsZUxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uKCkge307XG5Qcm9taXNlLmxvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYXN5bmMuaGF2ZUl0ZW1zUXVldWVkKCkgJiYgIWNvbmZpZy5sb25nU3RhY2tUcmFjZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2Fubm90IGVuYWJsZSBsb25nIHN0YWNrIHRyYWNlcyBhZnRlciBwcm9taXNlcyBoYXZlIGJlZW4gY3JlYXRlZFxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIGlmICghY29uZmlnLmxvbmdTdGFja1RyYWNlcyAmJiBsb25nU3RhY2tUcmFjZXNJc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHZhciBQcm9taXNlX2NhcHR1cmVTdGFja1RyYWNlID0gUHJvbWlzZS5wcm90b3R5cGUuX2NhcHR1cmVTdGFja1RyYWNlO1xuICAgICAgICB2YXIgUHJvbWlzZV9hdHRhY2hFeHRyYVRyYWNlID0gUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaEV4dHJhVHJhY2U7XG4gICAgICAgIGNvbmZpZy5sb25nU3RhY2tUcmFjZXMgPSB0cnVlO1xuICAgICAgICBkaXNhYmxlTG9uZ1N0YWNrVHJhY2VzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmMuaGF2ZUl0ZW1zUXVldWVkKCkgJiYgIWNvbmZpZy5sb25nU3RhY2tUcmFjZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjYW5ub3QgZW5hYmxlIGxvbmcgc3RhY2sgdHJhY2VzIGFmdGVyIHByb21pc2VzIGhhdmUgYmVlbiBjcmVhdGVkXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFByb21pc2UucHJvdG90eXBlLl9jYXB0dXJlU3RhY2tUcmFjZSA9IFByb21pc2VfY2FwdHVyZVN0YWNrVHJhY2U7XG4gICAgICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fYXR0YWNoRXh0cmFUcmFjZSA9IFByb21pc2VfYXR0YWNoRXh0cmFUcmFjZTtcbiAgICAgICAgICAgIENvbnRleHQuZGVhY3RpdmF0ZUxvbmdTdGFja1RyYWNlcygpO1xuICAgICAgICAgICAgYXN5bmMuZW5hYmxlVHJhbXBvbGluZSgpO1xuICAgICAgICAgICAgY29uZmlnLmxvbmdTdGFja1RyYWNlcyA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fY2FwdHVyZVN0YWNrVHJhY2UgPSBsb25nU3RhY2tUcmFjZXNDYXB0dXJlU3RhY2tUcmFjZTtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaEV4dHJhVHJhY2UgPSBsb25nU3RhY2tUcmFjZXNBdHRhY2hFeHRyYVRyYWNlO1xuICAgICAgICBDb250ZXh0LmFjdGl2YXRlTG9uZ1N0YWNrVHJhY2VzKCk7XG4gICAgICAgIGFzeW5jLmRpc2FibGVUcmFtcG9saW5lSWZOZWNlc3NhcnkoKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLmhhc0xvbmdTdGFja1RyYWNlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29uZmlnLmxvbmdTdGFja1RyYWNlcyAmJiBsb25nU3RhY2tUcmFjZXNJc1N1cHBvcnRlZCgpO1xufTtcblxudmFyIGZpcmVEb21FdmVudCA9IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBldmVudCA9IG5ldyBDdXN0b21FdmVudChcIkN1c3RvbUV2ZW50XCIpO1xuICAgICAgICAgICAgdXRpbC5nbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obmFtZSwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQobmFtZS50b0xvd2VyQ2FzZSgpLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXV0aWwuZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZG9tRXZlbnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgRXZlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IEV2ZW50KFwiQ3VzdG9tRXZlbnRcIik7XG4gICAgICAgICAgICB1dGlsLmdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihuYW1lLCBldmVudCkge1xuICAgICAgICAgICAgICAgIHZhciBkb21FdmVudCA9IG5ldyBFdmVudChuYW1lLnRvTG93ZXJDYXNlKCksIHtcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRvbUV2ZW50LmRldGFpbCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgIHJldHVybiAhdXRpbC5nbG9iYWwuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICAgICAgICAgIGV2ZW50LmluaXRDdXN0b21FdmVudChcInRlc3Rpbmd0aGVldmVudFwiLCBmYWxzZSwgdHJ1ZSwge30pO1xuICAgICAgICAgICAgdXRpbC5nbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obmFtZSwgZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZG9tRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIkN1c3RvbUV2ZW50XCIpO1xuICAgICAgICAgICAgICAgIGRvbUV2ZW50LmluaXRDdXN0b21FdmVudChuYW1lLnRvTG93ZXJDYXNlKCksIGZhbHNlLCB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBldmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1dGlsLmdsb2JhbC5kaXNwYXRjaEV2ZW50KGRvbUV2ZW50KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59KSgpO1xuXG52YXIgZmlyZUdsb2JhbEV2ZW50ID0gKGZ1bmN0aW9uKCkge1xuICAgIGlmICh1dGlsLmlzTm9kZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5lbWl0LmFwcGx5KHByb2Nlc3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF1dGlsLmdsb2JhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgIHZhciBtZXRob2ROYW1lID0gXCJvblwiICsgbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHV0aWwuZ2xvYmFsW21ldGhvZE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFtZXRob2QpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIG1ldGhvZC5hcHBseSh1dGlsLmdsb2JhbCwgW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0KG5hbWUsIHByb21pc2UpIHtcbiAgICByZXR1cm4ge3Byb21pc2U6IHByb21pc2V9O1xufVxuXG52YXIgZXZlbnRUb09iamVjdEdlbmVyYXRvciA9IHtcbiAgICBwcm9taXNlQ3JlYXRlZDogZ2VuZXJhdGVQcm9taXNlTGlmZWN5Y2xlRXZlbnRPYmplY3QsXG4gICAgcHJvbWlzZUZ1bGZpbGxlZDogZ2VuZXJhdGVQcm9taXNlTGlmZWN5Y2xlRXZlbnRPYmplY3QsXG4gICAgcHJvbWlzZVJlamVjdGVkOiBnZW5lcmF0ZVByb21pc2VMaWZlY3ljbGVFdmVudE9iamVjdCxcbiAgICBwcm9taXNlUmVzb2x2ZWQ6IGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0LFxuICAgIHByb21pc2VDYW5jZWxsZWQ6IGdlbmVyYXRlUHJvbWlzZUxpZmVjeWNsZUV2ZW50T2JqZWN0LFxuICAgIHByb21pc2VDaGFpbmVkOiBmdW5jdGlvbihuYW1lLCBwcm9taXNlLCBjaGlsZCkge1xuICAgICAgICByZXR1cm4ge3Byb21pc2U6IHByb21pc2UsIGNoaWxkOiBjaGlsZH07XG4gICAgfSxcbiAgICB3YXJuaW5nOiBmdW5jdGlvbihuYW1lLCB3YXJuaW5nKSB7XG4gICAgICAgIHJldHVybiB7d2FybmluZzogd2FybmluZ307XG4gICAgfSxcbiAgICB1bmhhbmRsZWRSZWplY3Rpb246IGZ1bmN0aW9uIChuYW1lLCByZWFzb24sIHByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHtyZWFzb246IHJlYXNvbiwgcHJvbWlzZTogcHJvbWlzZX07XG4gICAgfSxcbiAgICByZWplY3Rpb25IYW5kbGVkOiBnZW5lcmF0ZVByb21pc2VMaWZlY3ljbGVFdmVudE9iamVjdFxufTtcblxudmFyIGFjdGl2ZUZpcmVFdmVudCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIGdsb2JhbEV2ZW50RmlyZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICBnbG9iYWxFdmVudEZpcmVkID0gZmlyZUdsb2JhbEV2ZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKGUpO1xuICAgICAgICBnbG9iYWxFdmVudEZpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgZG9tRXZlbnRGaXJlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGRvbUV2ZW50RmlyZWQgPSBmaXJlRG9tRXZlbnQobmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUb09iamVjdEdlbmVyYXRvcltuYW1lXS5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzeW5jLnRocm93TGF0ZXIoZSk7XG4gICAgICAgIGRvbUV2ZW50RmlyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkb21FdmVudEZpcmVkIHx8IGdsb2JhbEV2ZW50RmlyZWQ7XG59O1xuXG5Qcm9taXNlLmNvbmZpZyA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgICBvcHRzID0gT2JqZWN0KG9wdHMpO1xuICAgIGlmIChcImxvbmdTdGFja1RyYWNlc1wiIGluIG9wdHMpIHtcbiAgICAgICAgaWYgKG9wdHMubG9uZ1N0YWNrVHJhY2VzKSB7XG4gICAgICAgICAgICBQcm9taXNlLmxvbmdTdGFja1RyYWNlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKCFvcHRzLmxvbmdTdGFja1RyYWNlcyAmJiBQcm9taXNlLmhhc0xvbmdTdGFja1RyYWNlcygpKSB7XG4gICAgICAgICAgICBkaXNhYmxlTG9uZ1N0YWNrVHJhY2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwid2FybmluZ3NcIiBpbiBvcHRzKSB7XG4gICAgICAgIHZhciB3YXJuaW5nc09wdGlvbiA9IG9wdHMud2FybmluZ3M7XG4gICAgICAgIGNvbmZpZy53YXJuaW5ncyA9ICEhd2FybmluZ3NPcHRpb247XG4gICAgICAgIHdGb3Jnb3R0ZW5SZXR1cm4gPSBjb25maWcud2FybmluZ3M7XG5cbiAgICAgICAgaWYgKHV0aWwuaXNPYmplY3Qod2FybmluZ3NPcHRpb24pKSB7XG4gICAgICAgICAgICBpZiAoXCJ3Rm9yZ290dGVuUmV0dXJuXCIgaW4gd2FybmluZ3NPcHRpb24pIHtcbiAgICAgICAgICAgICAgICB3Rm9yZ290dGVuUmV0dXJuID0gISF3YXJuaW5nc09wdGlvbi53Rm9yZ290dGVuUmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImNhbmNlbGxhdGlvblwiIGluIG9wdHMgJiYgb3B0cy5jYW5jZWxsYXRpb24gJiYgIWNvbmZpZy5jYW5jZWxsYXRpb24pIHtcbiAgICAgICAgaWYgKGFzeW5jLmhhdmVJdGVtc1F1ZXVlZCgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJjYW5ub3QgZW5hYmxlIGNhbmNlbGxhdGlvbiBhZnRlciBwcm9taXNlcyBhcmUgaW4gdXNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9jbGVhckNhbmNlbGxhdGlvbkRhdGEgPVxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uQ2xlYXJDYW5jZWxsYXRpb25EYXRhO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fcHJvcGFnYXRlRnJvbSA9IGNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb207XG4gICAgICAgIFByb21pc2UucHJvdG90eXBlLl9vbkNhbmNlbCA9IGNhbmNlbGxhdGlvbk9uQ2FuY2VsO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fc2V0T25DYW5jZWwgPSBjYW5jZWxsYXRpb25TZXRPbkNhbmNlbDtcbiAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrID1cbiAgICAgICAgICAgIGNhbmNlbGxhdGlvbkF0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrO1xuICAgICAgICBQcm9taXNlLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGNhbmNlbGxhdGlvbkV4ZWN1dGU7XG4gICAgICAgIHByb3BhZ2F0ZUZyb21GdW5jdGlvbiA9IGNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb207XG4gICAgICAgIGNvbmZpZy5jYW5jZWxsYXRpb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXCJtb25pdG9yaW5nXCIgaW4gb3B0cykge1xuICAgICAgICBpZiAob3B0cy5tb25pdG9yaW5nICYmICFjb25maWcubW9uaXRvcmluZykge1xuICAgICAgICAgICAgY29uZmlnLm1vbml0b3JpbmcgPSB0cnVlO1xuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGFjdGl2ZUZpcmVFdmVudDtcbiAgICAgICAgfSBlbHNlIGlmICghb3B0cy5tb25pdG9yaW5nICYmIGNvbmZpZy5tb25pdG9yaW5nKSB7XG4gICAgICAgICAgICBjb25maWcubW9uaXRvcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGRlZmF1bHRGaXJlRXZlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2U7XG59O1xuXG5mdW5jdGlvbiBkZWZhdWx0RmlyZUV2ZW50KCkgeyByZXR1cm4gZmFsc2U7IH1cblxuUHJvbWlzZS5wcm90b3R5cGUuX2ZpcmVFdmVudCA9IGRlZmF1bHRGaXJlRXZlbnQ7XG5Qcm9taXNlLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGV4ZWN1dG9yLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICB0cnkge1xuICAgICAgICBleGVjdXRvcihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgfVxufTtcblByb21pc2UucHJvdG90eXBlLl9vbkNhbmNlbCA9IGZ1bmN0aW9uICgpIHt9O1xuUHJvbWlzZS5wcm90b3R5cGUuX3NldE9uQ2FuY2VsID0gZnVuY3Rpb24gKGhhbmRsZXIpIHsgOyB9O1xuUHJvbWlzZS5wcm90b3R5cGUuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24ob25DYW5jZWwpIHtcbiAgICA7XG59O1xuUHJvbWlzZS5wcm90b3R5cGUuX2NhcHR1cmVTdGFja1RyYWNlID0gZnVuY3Rpb24gKCkge307XG5Qcm9taXNlLnByb3RvdHlwZS5fYXR0YWNoRXh0cmFUcmFjZSA9IGZ1bmN0aW9uICgpIHt9O1xuUHJvbWlzZS5wcm90b3R5cGUuX2NsZWFyQ2FuY2VsbGF0aW9uRGF0YSA9IGZ1bmN0aW9uKCkge307XG5Qcm9taXNlLnByb3RvdHlwZS5fcHJvcGFnYXRlRnJvbSA9IGZ1bmN0aW9uIChwYXJlbnQsIGZsYWdzKSB7XG4gICAgO1xuICAgIDtcbn07XG5cbmZ1bmN0aW9uIGNhbmNlbGxhdGlvbkV4ZWN1dGUoZXhlY3V0b3IsIHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICB0cnkge1xuICAgICAgICBleGVjdXRvcihyZXNvbHZlLCByZWplY3QsIGZ1bmN0aW9uKG9uQ2FuY2VsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9uQ2FuY2VsICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwib25DYW5jZWwgbXVzdCBiZSBhIGZ1bmN0aW9uLCBnb3Q6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwudG9TdHJpbmcob25DYW5jZWwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb21pc2UuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrKG9uQ2FuY2VsKTtcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNhbmNlbGxhdGlvbkF0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrKG9uQ2FuY2VsKSB7XG4gICAgaWYgKCF0aGlzLl9pc0NhbmNlbGxhYmxlKCkpIHJldHVybiB0aGlzO1xuXG4gICAgdmFyIHByZXZpb3VzT25DYW5jZWwgPSB0aGlzLl9vbkNhbmNlbCgpO1xuICAgIGlmIChwcmV2aW91c09uQ2FuY2VsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHV0aWwuaXNBcnJheShwcmV2aW91c09uQ2FuY2VsKSkge1xuICAgICAgICAgICAgcHJldmlvdXNPbkNhbmNlbC5wdXNoKG9uQ2FuY2VsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE9uQ2FuY2VsKFtwcmV2aW91c09uQ2FuY2VsLCBvbkNhbmNlbF0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc2V0T25DYW5jZWwob25DYW5jZWwpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2FuY2VsbGF0aW9uT25DYW5jZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29uQ2FuY2VsRmllbGQ7XG59XG5cbmZ1bmN0aW9uIGNhbmNlbGxhdGlvblNldE9uQ2FuY2VsKG9uQ2FuY2VsKSB7XG4gICAgdGhpcy5fb25DYW5jZWxGaWVsZCA9IG9uQ2FuY2VsO1xufVxuXG5mdW5jdGlvbiBjYW5jZWxsYXRpb25DbGVhckNhbmNlbGxhdGlvbkRhdGEoKSB7XG4gICAgdGhpcy5fY2FuY2VsbGF0aW9uUGFyZW50ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX29uQ2FuY2VsRmllbGQgPSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb20ocGFyZW50LCBmbGFncykge1xuICAgIGlmICgoZmxhZ3MgJiAxKSAhPT0gMCkge1xuICAgICAgICB0aGlzLl9jYW5jZWxsYXRpb25QYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHZhciBicmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsID0gcGFyZW50Ll9icmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsO1xuICAgICAgICBpZiAoYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBicmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsID0gMDtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQuX2JyYW5jaGVzUmVtYWluaW5nVG9DYW5jZWwgPSBicmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsICsgMTtcbiAgICB9XG4gICAgaWYgKChmbGFncyAmIDIpICE9PSAwICYmIHBhcmVudC5faXNCb3VuZCgpKSB7XG4gICAgICAgIHRoaXMuX3NldEJvdW5kVG8ocGFyZW50Ll9ib3VuZFRvKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRpbmdQcm9wYWdhdGVGcm9tKHBhcmVudCwgZmxhZ3MpIHtcbiAgICBpZiAoKGZsYWdzICYgMikgIT09IDAgJiYgcGFyZW50Ll9pc0JvdW5kKCkpIHtcbiAgICAgICAgdGhpcy5fc2V0Qm91bmRUbyhwYXJlbnQuX2JvdW5kVG8pO1xuICAgIH1cbn1cbnZhciBwcm9wYWdhdGVGcm9tRnVuY3Rpb24gPSBiaW5kaW5nUHJvcGFnYXRlRnJvbTtcblxuZnVuY3Rpb24gYm91bmRWYWx1ZUZ1bmN0aW9uKCkge1xuICAgIHZhciByZXQgPSB0aGlzLl9ib3VuZFRvO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgaWYgKHJldC5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldC52YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGxvbmdTdGFja1RyYWNlc0NhcHR1cmVTdGFja1RyYWNlKCkge1xuICAgIHRoaXMuX3RyYWNlID0gbmV3IENhcHR1cmVkVHJhY2UodGhpcy5fcGVla0NvbnRleHQoKSk7XG59XG5cbmZ1bmN0aW9uIGxvbmdTdGFja1RyYWNlc0F0dGFjaEV4dHJhVHJhY2UoZXJyb3IsIGlnbm9yZVNlbGYpIHtcbiAgICBpZiAoY2FuQXR0YWNoVHJhY2UoZXJyb3IpKSB7XG4gICAgICAgIHZhciB0cmFjZSA9IHRoaXMuX3RyYWNlO1xuICAgICAgICBpZiAodHJhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKGlnbm9yZVNlbGYpIHRyYWNlID0gdHJhY2UuX3BhcmVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJhY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdHJhY2UuYXR0YWNoRXh0cmFUcmFjZShlcnJvcik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWVycm9yLl9fc3RhY2tDbGVhbmVkX18pIHtcbiAgICAgICAgICAgIHZhciBwYXJzZWQgPSBwYXJzZVN0YWNrQW5kTWVzc2FnZShlcnJvcik7XG4gICAgICAgICAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKGVycm9yLCBcInN0YWNrXCIsXG4gICAgICAgICAgICAgICAgcGFyc2VkLm1lc3NhZ2UgKyBcIlxcblwiICsgcGFyc2VkLnN0YWNrLmpvaW4oXCJcXG5cIikpO1xuICAgICAgICAgICAgdXRpbC5ub3RFbnVtZXJhYmxlUHJvcChlcnJvciwgXCJfX3N0YWNrQ2xlYW5lZF9fXCIsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjaGVja0ZvcmdvdHRlblJldHVybnMocmV0dXJuVmFsdWUsIHByb21pc2VDcmVhdGVkLCBuYW1lLCBwcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCkge1xuICAgIGlmIChyZXR1cm5WYWx1ZSA9PT0gdW5kZWZpbmVkICYmIHByb21pc2VDcmVhdGVkICE9PSBudWxsICYmXG4gICAgICAgIHdGb3Jnb3R0ZW5SZXR1cm4pIHtcbiAgICAgICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudC5fcmV0dXJuZWROb25VbmRlZmluZWQoKSkgcmV0dXJuO1xuICAgICAgICBpZiAoKHByb21pc2UuX2JpdEZpZWxkICYgNjU1MzUpID09PSAwKSByZXR1cm47XG5cbiAgICAgICAgaWYgKG5hbWUpIG5hbWUgPSBuYW1lICsgXCIgXCI7XG4gICAgICAgIHZhciBoYW5kbGVyTGluZSA9IFwiXCI7XG4gICAgICAgIHZhciBjcmVhdG9yTGluZSA9IFwiXCI7XG4gICAgICAgIGlmIChwcm9taXNlQ3JlYXRlZC5fdHJhY2UpIHtcbiAgICAgICAgICAgIHZhciB0cmFjZUxpbmVzID0gcHJvbWlzZUNyZWF0ZWQuX3RyYWNlLnN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gY2xlYW5TdGFjayh0cmFjZUxpbmVzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gc3RhY2tbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFub2RlRnJhbWVQYXR0ZXJuLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVNYXRjaGVzID0gbGluZS5tYXRjaChwYXJzZUxpbmVQYXR0ZXJuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTGluZSAgPSBcImF0IFwiICsgbGluZU1hdGNoZXNbMV0gK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiOlwiICsgbGluZU1hdGNoZXNbMl0gKyBcIjpcIiArIGxpbmVNYXRjaGVzWzNdICsgXCIgXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciBmaXJzdFVzZXJMaW5lID0gc3RhY2tbMF07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFjZUxpbmVzLmxlbmd0aDsgKytpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNlTGluZXNbaV0gPT09IGZpcnN0VXNlckxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0b3JMaW5lID0gXCJcXG5cIiArIHRyYWNlTGluZXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbXNnID0gXCJhIHByb21pc2Ugd2FzIGNyZWF0ZWQgaW4gYSBcIiArIG5hbWUgK1xuICAgICAgICAgICAgXCJoYW5kbGVyIFwiICsgaGFuZGxlckxpbmUgKyBcImJ1dCB3YXMgbm90IHJldHVybmVkIGZyb20gaXQsIFwiICtcbiAgICAgICAgICAgIFwic2VlIGh0dHA6Ly9nb28uZ2wvclJxTVV3XCIgK1xuICAgICAgICAgICAgY3JlYXRvckxpbmU7XG4gICAgICAgIHByb21pc2UuX3dhcm4obXNnLCB0cnVlLCBwcm9taXNlQ3JlYXRlZCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSBuYW1lICtcbiAgICAgICAgXCIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXCI7XG4gICAgaWYgKHJlcGxhY2VtZW50KSBtZXNzYWdlICs9IFwiIFVzZSBcIiArIHJlcGxhY2VtZW50ICsgXCIgaW5zdGVhZC5cIjtcbiAgICByZXR1cm4gd2FybihtZXNzYWdlKTtcbn1cblxuZnVuY3Rpb24gd2FybihtZXNzYWdlLCBzaG91bGRVc2VPd25UcmFjZSwgcHJvbWlzZSkge1xuICAgIGlmICghY29uZmlnLndhcm5pbmdzKSByZXR1cm47XG4gICAgdmFyIHdhcm5pbmcgPSBuZXcgV2FybmluZyhtZXNzYWdlKTtcbiAgICB2YXIgY3R4O1xuICAgIGlmIChzaG91bGRVc2VPd25UcmFjZSkge1xuICAgICAgICBwcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHdhcm5pbmcpO1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLmxvbmdTdGFja1RyYWNlcyAmJiAoY3R4ID0gUHJvbWlzZS5fcGVla0NvbnRleHQoKSkpIHtcbiAgICAgICAgY3R4LmF0dGFjaEV4dHJhVHJhY2Uod2FybmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHBhcnNlZCA9IHBhcnNlU3RhY2tBbmRNZXNzYWdlKHdhcm5pbmcpO1xuICAgICAgICB3YXJuaW5nLnN0YWNrID0gcGFyc2VkLm1lc3NhZ2UgKyBcIlxcblwiICsgcGFyc2VkLnN0YWNrLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVGaXJlRXZlbnQoXCJ3YXJuaW5nXCIsIHdhcm5pbmcpKSB7XG4gICAgICAgIGZvcm1hdEFuZExvZ0Vycm9yKHdhcm5pbmcsIFwiXCIsIHRydWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVjb25zdHJ1Y3RTdGFjayhtZXNzYWdlLCBzdGFja3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrcy5sZW5ndGggLSAxOyArK2kpIHtcbiAgICAgICAgc3RhY2tzW2ldLnB1c2goXCJGcm9tIHByZXZpb3VzIGV2ZW50OlwiKTtcbiAgICAgICAgc3RhY2tzW2ldID0gc3RhY2tzW2ldLmpvaW4oXCJcXG5cIik7XG4gICAgfVxuICAgIGlmIChpIDwgc3RhY2tzLmxlbmd0aCkge1xuICAgICAgICBzdGFja3NbaV0gPSBzdGFja3NbaV0uam9pbihcIlxcblwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2UgKyBcIlxcblwiICsgc3RhY2tzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUR1cGxpY2F0ZU9yRW1wdHlKdW1wcyhzdGFja3MpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoc3RhY2tzW2ldLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgKChpICsgMSA8IHN0YWNrcy5sZW5ndGgpICYmIHN0YWNrc1tpXVswXSA9PT0gc3RhY2tzW2krMV1bMF0pKSB7XG4gICAgICAgICAgICBzdGFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDb21tb25Sb290cyhzdGFja3MpIHtcbiAgICB2YXIgY3VycmVudCA9IHN0YWNrc1swXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0YWNrcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcHJldiA9IHN0YWNrc1tpXTtcbiAgICAgICAgdmFyIGN1cnJlbnRMYXN0SW5kZXggPSBjdXJyZW50Lmxlbmd0aCAtIDE7XG4gICAgICAgIHZhciBjdXJyZW50TGFzdExpbmUgPSBjdXJyZW50W2N1cnJlbnRMYXN0SW5kZXhdO1xuICAgICAgICB2YXIgY29tbW9uUm9vdE1lZXRQb2ludCA9IC0xO1xuXG4gICAgICAgIGZvciAodmFyIGogPSBwcmV2Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgICAgICBpZiAocHJldltqXSA9PT0gY3VycmVudExhc3RMaW5lKSB7XG4gICAgICAgICAgICAgICAgY29tbW9uUm9vdE1lZXRQb2ludCA9IGo7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBqID0gY29tbW9uUm9vdE1lZXRQb2ludDsgaiA+PSAwOyAtLWopIHtcbiAgICAgICAgICAgIHZhciBsaW5lID0gcHJldltqXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50W2N1cnJlbnRMYXN0SW5kZXhdID09PSBsaW5lKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC5wb3AoKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50TGFzdEluZGV4LS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBwcmV2O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY2xlYW5TdGFjayhzdGFjaykge1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBsaW5lID0gc3RhY2tbaV07XG4gICAgICAgIHZhciBpc1RyYWNlTGluZSA9IFwiICAgIChObyBzdGFjayB0cmFjZSlcIiA9PT0gbGluZSB8fFxuICAgICAgICAgICAgc3RhY2tGcmFtZVBhdHRlcm4udGVzdChsaW5lKTtcbiAgICAgICAgdmFyIGlzSW50ZXJuYWxGcmFtZSA9IGlzVHJhY2VMaW5lICYmIHNob3VsZElnbm9yZShsaW5lKTtcbiAgICAgICAgaWYgKGlzVHJhY2VMaW5lICYmICFpc0ludGVybmFsRnJhbWUpIHtcbiAgICAgICAgICAgIGlmIChpbmRlbnRTdGFja0ZyYW1lcyAmJiBsaW5lLmNoYXJBdCgwKSAhPT0gXCIgXCIpIHtcbiAgICAgICAgICAgICAgICBsaW5lID0gXCIgICAgXCIgKyBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0LnB1c2gobGluZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc3RhY2tGcmFtZXNBc0FycmF5KGVycm9yKSB7XG4gICAgdmFyIHN0YWNrID0gZXJyb3Iuc3RhY2sucmVwbGFjZSgvXFxzKyQvZywgXCJcIikuc3BsaXQoXCJcXG5cIik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgbGluZSA9IHN0YWNrW2ldO1xuICAgICAgICBpZiAoXCIgICAgKE5vIHN0YWNrIHRyYWNlKVwiID09PSBsaW5lIHx8IHN0YWNrRnJhbWVQYXR0ZXJuLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpID4gMCAmJiBlcnJvci5uYW1lICE9IFwiU3ludGF4RXJyb3JcIikge1xuICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKGkpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhY2s7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU3RhY2tBbmRNZXNzYWdlKGVycm9yKSB7XG4gICAgdmFyIHN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgdmFyIG1lc3NhZ2UgPSBlcnJvci50b1N0cmluZygpO1xuICAgIHN0YWNrID0gdHlwZW9mIHN0YWNrID09PSBcInN0cmluZ1wiICYmIHN0YWNrLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IHN0YWNrRnJhbWVzQXNBcnJheShlcnJvcikgOiBbXCIgICAgKE5vIHN0YWNrIHRyYWNlKVwiXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBzdGFjazogZXJyb3IubmFtZSA9PSBcIlN5bnRheEVycm9yXCIgPyBzdGFjayA6IGNsZWFuU3RhY2soc3RhY2spXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0QW5kTG9nRXJyb3IoZXJyb3IsIHRpdGxlLCBpc1NvZnQpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgdmFyIG1lc3NhZ2U7XG4gICAgICAgIGlmICh1dGlsLmlzT2JqZWN0KGVycm9yKSkge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gZXJyb3Iuc3RhY2s7XG4gICAgICAgICAgICBtZXNzYWdlID0gdGl0bGUgKyBmb3JtYXRTdGFjayhzdGFjaywgZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZSA9IHRpdGxlICsgU3RyaW5nKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByaW50V2FybmluZyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcobWVzc2FnZSwgaXNTb2Z0KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29uc29sZS5sb2cgPT09IFwiZnVuY3Rpb25cIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUubG9nID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gZmlyZVJlamVjdGlvbkV2ZW50KG5hbWUsIGxvY2FsSGFuZGxlciwgcmVhc29uLCBwcm9taXNlKSB7XG4gICAgdmFyIGxvY2FsRXZlbnRGaXJlZCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxIYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGxvY2FsRXZlbnRGaXJlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAobmFtZSA9PT0gXCJyZWplY3Rpb25IYW5kbGVkXCIpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEhhbmRsZXIocHJvbWlzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvY2FsSGFuZGxlcihyZWFzb24sIHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKGUpO1xuICAgIH1cblxuICAgIGlmIChuYW1lID09PSBcInVuaGFuZGxlZFJlamVjdGlvblwiKSB7XG4gICAgICAgIGlmICghYWN0aXZlRmlyZUV2ZW50KG5hbWUsIHJlYXNvbiwgcHJvbWlzZSkgJiYgIWxvY2FsRXZlbnRGaXJlZCkge1xuICAgICAgICAgICAgZm9ybWF0QW5kTG9nRXJyb3IocmVhc29uLCBcIlVuaGFuZGxlZCByZWplY3Rpb24gXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlRmlyZUV2ZW50KG5hbWUsIHByb21pc2UpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Tm9uRXJyb3Iob2JqKSB7XG4gICAgdmFyIHN0cjtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHN0ciA9IFwiW2Z1bmN0aW9uIFwiICtcbiAgICAgICAgICAgIChvYmoubmFtZSB8fCBcImFub255bW91c1wiKSArXG4gICAgICAgICAgICBcIl1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdHIgPSBvYmogJiYgdHlwZW9mIG9iai50b1N0cmluZyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IG9iai50b1N0cmluZygpIDogdXRpbC50b1N0cmluZyhvYmopO1xuICAgICAgICB2YXIgcnVzZWxlc3NUb1N0cmluZyA9IC9cXFtvYmplY3QgW2EtekEtWjAtOSRfXStcXF0vO1xuICAgICAgICBpZiAocnVzZWxlc3NUb1N0cmluZy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1N0ciA9IEpTT04uc3RyaW5naWZ5KG9iaik7XG4gICAgICAgICAgICAgICAgc3RyID0gbmV3U3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2goZSkge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHN0ciA9IFwiKGVtcHR5IGFycmF5KVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAoXCIoPFwiICsgc25pcChzdHIpICsgXCI+LCBubyBzdGFjayB0cmFjZSlcIik7XG59XG5cbmZ1bmN0aW9uIHNuaXAoc3RyKSB7XG4gICAgdmFyIG1heENoYXJzID0gNDE7XG4gICAgaWYgKHN0ci5sZW5ndGggPCBtYXhDaGFycykge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyLnN1YnN0cigwLCBtYXhDaGFycyAtIDMpICsgXCIuLi5cIjtcbn1cblxuZnVuY3Rpb24gbG9uZ1N0YWNrVHJhY2VzSXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG52YXIgc2hvdWxkSWdub3JlID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTtcbnZhciBwYXJzZUxpbmVJbmZvUmVnZXggPSAvW1xcLzxcXChdKFteOlxcL10rKTooXFxkKyk6KD86XFxkKylcXCk/XFxzKiQvO1xuZnVuY3Rpb24gcGFyc2VMaW5lSW5mbyhsaW5lKSB7XG4gICAgdmFyIG1hdGNoZXMgPSBsaW5lLm1hdGNoKHBhcnNlTGluZUluZm9SZWdleCk7XG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbGVOYW1lOiBtYXRjaGVzWzFdLFxuICAgICAgICAgICAgbGluZTogcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRCb3VuZHMoZmlyc3RMaW5lRXJyb3IsIGxhc3RMaW5lRXJyb3IpIHtcbiAgICBpZiAoIWxvbmdTdGFja1RyYWNlc0lzU3VwcG9ydGVkKCkpIHJldHVybjtcbiAgICB2YXIgZmlyc3RTdGFja0xpbmVzID0gZmlyc3RMaW5lRXJyb3Iuc3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgdmFyIGxhc3RTdGFja0xpbmVzID0gbGFzdExpbmVFcnJvci5zdGFjay5zcGxpdChcIlxcblwiKTtcbiAgICB2YXIgZmlyc3RJbmRleCA9IC0xO1xuICAgIHZhciBsYXN0SW5kZXggPSAtMTtcbiAgICB2YXIgZmlyc3RGaWxlTmFtZTtcbiAgICB2YXIgbGFzdEZpbGVOYW1lO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlyc3RTdGFja0xpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBwYXJzZUxpbmVJbmZvKGZpcnN0U3RhY2tMaW5lc1tpXSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGZpcnN0RmlsZU5hbWUgPSByZXN1bHQuZmlsZU5hbWU7XG4gICAgICAgICAgICBmaXJzdEluZGV4ID0gcmVzdWx0LmxpbmU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RTdGFja0xpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBwYXJzZUxpbmVJbmZvKGxhc3RTdGFja0xpbmVzW2ldKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgbGFzdEZpbGVOYW1lID0gcmVzdWx0LmZpbGVOYW1lO1xuICAgICAgICAgICAgbGFzdEluZGV4ID0gcmVzdWx0LmxpbmU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmlyc3RJbmRleCA8IDAgfHwgbGFzdEluZGV4IDwgMCB8fCAhZmlyc3RGaWxlTmFtZSB8fCAhbGFzdEZpbGVOYW1lIHx8XG4gICAgICAgIGZpcnN0RmlsZU5hbWUgIT09IGxhc3RGaWxlTmFtZSB8fCBmaXJzdEluZGV4ID49IGxhc3RJbmRleCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2hvdWxkSWdub3JlID0gZnVuY3Rpb24obGluZSkge1xuICAgICAgICBpZiAoYmx1ZWJpcmRGcmFtZVBhdHRlcm4udGVzdChsaW5lKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBpbmZvID0gcGFyc2VMaW5lSW5mbyhsaW5lKTtcbiAgICAgICAgaWYgKGluZm8pIHtcbiAgICAgICAgICAgIGlmIChpbmZvLmZpbGVOYW1lID09PSBmaXJzdEZpbGVOYW1lICYmXG4gICAgICAgICAgICAgICAgKGZpcnN0SW5kZXggPD0gaW5mby5saW5lICYmIGluZm8ubGluZSA8PSBsYXN0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIENhcHR1cmVkVHJhY2UocGFyZW50KSB7XG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMuX3Byb21pc2VzQ3JlYXRlZCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMuX2xlbmd0aCA9IDEgKyAocGFyZW50ID09PSB1bmRlZmluZWQgPyAwIDogcGFyZW50Ll9sZW5ndGgpO1xuICAgIGNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENhcHR1cmVkVHJhY2UpO1xuICAgIGlmIChsZW5ndGggPiAzMikgdGhpcy51bmN5Y2xlKCk7XG59XG51dGlsLmluaGVyaXRzKENhcHR1cmVkVHJhY2UsIEVycm9yKTtcbkNvbnRleHQuQ2FwdHVyZWRUcmFjZSA9IENhcHR1cmVkVHJhY2U7XG5cbkNhcHR1cmVkVHJhY2UucHJvdG90eXBlLnVuY3ljbGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5fbGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPCAyKSByZXR1cm47XG4gICAgdmFyIG5vZGVzID0gW107XG4gICAgdmFyIHN0YWNrVG9JbmRleCA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIG5vZGUgPSB0aGlzOyBub2RlICE9PSB1bmRlZmluZWQ7ICsraSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBub2RlID0gbm9kZS5fcGFyZW50O1xuICAgIH1cbiAgICBsZW5ndGggPSB0aGlzLl9sZW5ndGggPSBpO1xuICAgIGZvciAodmFyIGkgPSBsZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgc3RhY2sgPSBub2Rlc1tpXS5zdGFjaztcbiAgICAgICAgaWYgKHN0YWNrVG9JbmRleFtzdGFja10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3RhY2tUb0luZGV4W3N0YWNrXSA9IGk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgY3VycmVudFN0YWNrID0gbm9kZXNbaV0uc3RhY2s7XG4gICAgICAgIHZhciBpbmRleCA9IHN0YWNrVG9JbmRleFtjdXJyZW50U3RhY2tdO1xuICAgICAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCAhPT0gaSkge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVzW2luZGV4IC0gMV0uX3BhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBub2Rlc1tpbmRleCAtIDFdLl9sZW5ndGggPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZXNbaV0uX3BhcmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG5vZGVzW2ldLl9sZW5ndGggPSAxO1xuICAgICAgICAgICAgdmFyIGN5Y2xlRWRnZU5vZGUgPSBpID4gMCA/IG5vZGVzW2kgLSAxXSA6IHRoaXM7XG5cbiAgICAgICAgICAgIGlmIChpbmRleCA8IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjeWNsZUVkZ2VOb2RlLl9wYXJlbnQgPSBub2Rlc1tpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgIGN5Y2xlRWRnZU5vZGUuX3BhcmVudC51bmN5Y2xlKCk7XG4gICAgICAgICAgICAgICAgY3ljbGVFZGdlTm9kZS5fbGVuZ3RoID1cbiAgICAgICAgICAgICAgICAgICAgY3ljbGVFZGdlTm9kZS5fcGFyZW50Ll9sZW5ndGggKyAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjeWNsZUVkZ2VOb2RlLl9wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY3ljbGVFZGdlTm9kZS5fbGVuZ3RoID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50Q2hpbGRMZW5ndGggPSBjeWNsZUVkZ2VOb2RlLl9sZW5ndGggKyAxO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IGkgLSAyOyBqID49IDA7IC0taikge1xuICAgICAgICAgICAgICAgIG5vZGVzW2pdLl9sZW5ndGggPSBjdXJyZW50Q2hpbGRMZW5ndGg7XG4gICAgICAgICAgICAgICAgY3VycmVudENoaWxkTGVuZ3RoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5DYXB0dXJlZFRyYWNlLnByb3RvdHlwZS5hdHRhY2hFeHRyYVRyYWNlID0gZnVuY3Rpb24oZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IuX19zdGFja0NsZWFuZWRfXykgcmV0dXJuO1xuICAgIHRoaXMudW5jeWNsZSgpO1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZVN0YWNrQW5kTWVzc2FnZShlcnJvcik7XG4gICAgdmFyIG1lc3NhZ2UgPSBwYXJzZWQubWVzc2FnZTtcbiAgICB2YXIgc3RhY2tzID0gW3BhcnNlZC5zdGFja107XG5cbiAgICB2YXIgdHJhY2UgPSB0aGlzO1xuICAgIHdoaWxlICh0cmFjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN0YWNrcy5wdXNoKGNsZWFuU3RhY2sodHJhY2Uuc3RhY2suc3BsaXQoXCJcXG5cIikpKTtcbiAgICAgICAgdHJhY2UgPSB0cmFjZS5fcGFyZW50O1xuICAgIH1cbiAgICByZW1vdmVDb21tb25Sb290cyhzdGFja3MpO1xuICAgIHJlbW92ZUR1cGxpY2F0ZU9yRW1wdHlKdW1wcyhzdGFja3MpO1xuICAgIHV0aWwubm90RW51bWVyYWJsZVByb3AoZXJyb3IsIFwic3RhY2tcIiwgcmVjb25zdHJ1Y3RTdGFjayhtZXNzYWdlLCBzdGFja3MpKTtcbiAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKGVycm9yLCBcIl9fc3RhY2tDbGVhbmVkX19cIiwgdHJ1ZSk7XG59O1xuXG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSAoZnVuY3Rpb24gc3RhY2tEZXRlY3Rpb24oKSB7XG4gICAgdmFyIHY4c3RhY2tGcmFtZVBhdHRlcm4gPSAvXlxccyphdFxccyovO1xuICAgIHZhciB2OHN0YWNrRm9ybWF0dGVyID0gZnVuY3Rpb24oc3RhY2ssIGVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2sgPT09IFwic3RyaW5nXCIpIHJldHVybiBzdGFjaztcblxuICAgICAgICBpZiAoZXJyb3IubmFtZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvci50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXROb25FcnJvcihlcnJvcik7XG4gICAgfTtcblxuICAgIGlmICh0eXBlb2YgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID09PSBcIm51bWJlclwiICYmXG4gICAgICAgIHR5cGVvZiBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCArPSA2O1xuICAgICAgICBzdGFja0ZyYW1lUGF0dGVybiA9IHY4c3RhY2tGcmFtZVBhdHRlcm47XG4gICAgICAgIGZvcm1hdFN0YWNrID0gdjhzdGFja0Zvcm1hdHRlcjtcbiAgICAgICAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbiAgICAgICAgc2hvdWxkSWdub3JlID0gZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuIGJsdWViaXJkRnJhbWVQYXR0ZXJuLnRlc3QobGluZSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihyZWNlaXZlciwgaWdub3JlVW50aWwpIHtcbiAgICAgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCArPSA2O1xuICAgICAgICAgICAgY2FwdHVyZVN0YWNrVHJhY2UocmVjZWl2ZXIsIGlnbm9yZVVudGlsKTtcbiAgICAgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCAtPSA2O1xuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCk7XG5cbiAgICBpZiAodHlwZW9mIGVyci5zdGFjayA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICBlcnIuc3RhY2suc3BsaXQoXCJcXG5cIilbMF0uaW5kZXhPZihcInN0YWNrRGV0ZWN0aW9uQFwiKSA+PSAwKSB7XG4gICAgICAgIHN0YWNrRnJhbWVQYXR0ZXJuID0gL0AvO1xuICAgICAgICBmb3JtYXRTdGFjayA9IHY4c3RhY2tGb3JtYXR0ZXI7XG4gICAgICAgIGluZGVudFN0YWNrRnJhbWVzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNhcHR1cmVTdGFja1RyYWNlKG8pIHtcbiAgICAgICAgICAgIG8uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgaGFzU3RhY2tBZnRlclRocm93O1xuICAgIHRyeSB7IHRocm93IG5ldyBFcnJvcigpOyB9XG4gICAgY2F0Y2goZSkge1xuICAgICAgICBoYXNTdGFja0FmdGVyVGhyb3cgPSAoXCJzdGFja1wiIGluIGUpO1xuICAgIH1cbiAgICBpZiAoIShcInN0YWNrXCIgaW4gZXJyKSAmJiBoYXNTdGFja0FmdGVyVGhyb3cgJiZcbiAgICAgICAgdHlwZW9mIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBzdGFja0ZyYW1lUGF0dGVybiA9IHY4c3RhY2tGcmFtZVBhdHRlcm47XG4gICAgICAgIGZvcm1hdFN0YWNrID0gdjhzdGFja0Zvcm1hdHRlcjtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNhcHR1cmVTdGFja1RyYWNlKG8pIHtcbiAgICAgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCArPSA2O1xuICAgICAgICAgICAgdHJ5IHsgdGhyb3cgbmV3IEVycm9yKCk7IH1cbiAgICAgICAgICAgIGNhdGNoKGUpIHsgby5zdGFjayA9IGUuc3RhY2s7IH1cbiAgICAgICAgICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCAtPSA2O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZvcm1hdFN0YWNrID0gZnVuY3Rpb24oc3RhY2ssIGVycm9yKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhY2sgPT09IFwic3RyaW5nXCIpIHJldHVybiBzdGFjaztcblxuICAgICAgICBpZiAoKHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiB8fFxuICAgICAgICAgICAgdHlwZW9mIGVycm9yID09PSBcImZ1bmN0aW9uXCIpICYmXG4gICAgICAgICAgICBlcnJvci5uYW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE5vbkVycm9yKGVycm9yKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG51bGw7XG5cbn0pKFtdKTtcblxuaWYgKHR5cGVvZiBjb25zb2xlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBjb25zb2xlLndhcm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLndhcm4obWVzc2FnZSk7XG4gICAgfTtcbiAgICBpZiAodXRpbC5pc05vZGUgJiYgcHJvY2Vzcy5zdGRlcnIuaXNUVFkpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24obWVzc2FnZSwgaXNTb2Z0KSB7XG4gICAgICAgICAgICB2YXIgY29sb3IgPSBpc1NvZnQgPyBcIlxcdTAwMWJbMzNtXCIgOiBcIlxcdTAwMWJbMzFtXCI7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oY29sb3IgKyBtZXNzYWdlICsgXCJcXHUwMDFiWzBtXFxuXCIpO1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoIXV0aWwuaXNOb2RlICYmIHR5cGVvZiAobmV3IEVycm9yKCkuc3RhY2spID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGlzU29mdCkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiJWNcIiArIG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NvZnQgPyBcImNvbG9yOiBkYXJrb3JhbmdlXCIgOiBcImNvbG9yOiByZWRcIik7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIHdhcm5pbmdzOiB3YXJuaW5ncyxcbiAgICBsb25nU3RhY2tUcmFjZXM6IGZhbHNlLFxuICAgIGNhbmNlbGxhdGlvbjogZmFsc2UsXG4gICAgbW9uaXRvcmluZzogZmFsc2Vcbn07XG5cbmlmIChsb25nU3RhY2tUcmFjZXMpIFByb21pc2UubG9uZ1N0YWNrVHJhY2VzKCk7XG5cbnJldHVybiB7XG4gICAgbG9uZ1N0YWNrVHJhY2VzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5sb25nU3RhY2tUcmFjZXM7XG4gICAgfSxcbiAgICB3YXJuaW5nczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBjb25maWcud2FybmluZ3M7XG4gICAgfSxcbiAgICBjYW5jZWxsYXRpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLmNhbmNlbGxhdGlvbjtcbiAgICB9LFxuICAgIG1vbml0b3Jpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gY29uZmlnLm1vbml0b3Jpbmc7XG4gICAgfSxcbiAgICBwcm9wYWdhdGVGcm9tRnVuY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRnJvbUZ1bmN0aW9uO1xuICAgIH0sXG4gICAgYm91bmRWYWx1ZUZ1bmN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGJvdW5kVmFsdWVGdW5jdGlvbjtcbiAgICB9LFxuICAgIGNoZWNrRm9yZ290dGVuUmV0dXJuczogY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zLFxuICAgIHNldEJvdW5kczogc2V0Qm91bmRzLFxuICAgIHdhcm46IHdhcm4sXG4gICAgZGVwcmVjYXRlZDogZGVwcmVjYXRlZCxcbiAgICBDYXB0dXJlZFRyYWNlOiBDYXB0dXJlZFRyYWNlLFxuICAgIGZpcmVEb21FdmVudDogZmlyZURvbUV2ZW50LFxuICAgIGZpcmVHbG9iYWxFdmVudDogZmlyZUdsb2JhbEV2ZW50XG59O1xufTtcblxufSkuY2FsbCh0aGlzLHJlcXVpcmUoJ19wcm9jZXNzJykpXG59LHtcIi4vZXJyb3JzXCI6NTgsXCIuL3V0aWxcIjo4MixcIl9wcm9jZXNzXCI6MTAxfV0sNTY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UpIHtcbmZ1bmN0aW9uIHJldHVybmVyKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlO1xufVxuZnVuY3Rpb24gdGhyb3dlcigpIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGVbXCJyZXR1cm5cIl0gPVxuUHJvbWlzZS5wcm90b3R5cGUudGhlblJldHVybiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHZhbHVlLnN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucygpO1xuICAgIHJldHVybiB0aGlzLl90aGVuKFxuICAgICAgICByZXR1cm5lciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHt2YWx1ZTogdmFsdWV9LCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbXCJ0aHJvd1wiXSA9XG5Qcm9taXNlLnByb3RvdHlwZS50aGVuVGhyb3cgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RoZW4oXG4gICAgICAgIHRocm93ZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7cmVhc29uOiByZWFzb259LCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hUaHJvdyA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVuKFxuICAgICAgICAgICAgdW5kZWZpbmVkLCB0aHJvd2VyLCB1bmRlZmluZWQsIHtyZWFzb246IHJlYXNvbn0sIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIF9yZWFzb24gPSBhcmd1bWVudHNbMV07XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24oKSB7dGhyb3cgX3JlYXNvbjt9O1xuICAgICAgICByZXR1cm4gdGhpcy5jYXVnaHQocmVhc29uLCBoYW5kbGVyKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5jYXRjaFJldHVybiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkgdmFsdWUuc3VwcHJlc3NVbmhhbmRsZWRSZWplY3Rpb25zKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl90aGVuKFxuICAgICAgICAgICAgdW5kZWZpbmVkLCByZXR1cm5lciwgdW5kZWZpbmVkLCB7dmFsdWU6IHZhbHVlfSwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX3ZhbHVlID0gYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoX3ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkgX3ZhbHVlLnN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucygpO1xuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCkge3JldHVybiBfdmFsdWU7fTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2F1Z2h0KHZhbHVlLCBoYW5kbGVyKTtcbiAgICB9XG59O1xufTtcblxufSx7fV0sNTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMKSB7XG52YXIgUHJvbWlzZVJlZHVjZSA9IFByb21pc2UucmVkdWNlO1xudmFyIFByb21pc2VBbGwgPSBQcm9taXNlLmFsbDtcblxuZnVuY3Rpb24gcHJvbWlzZUFsbFRoaXMoKSB7XG4gICAgcmV0dXJuIFByb21pc2VBbGwodGhpcyk7XG59XG5cbmZ1bmN0aW9uIFByb21pc2VNYXBTZXJpZXMocHJvbWlzZXMsIGZuKSB7XG4gICAgcmV0dXJuIFByb21pc2VSZWR1Y2UocHJvbWlzZXMsIGZuLCBJTlRFUk5BTCwgSU5URVJOQUwpO1xufVxuXG5Qcm9taXNlLnByb3RvdHlwZS5lYWNoID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIFByb21pc2VSZWR1Y2UodGhpcywgZm4sIElOVEVSTkFMLCAwKVxuICAgICAgICAgICAgICAuX3RoZW4ocHJvbWlzZUFsbFRoaXMsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUubWFwU2VyaWVzID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIFByb21pc2VSZWR1Y2UodGhpcywgZm4sIElOVEVSTkFMLCBJTlRFUk5BTCk7XG59O1xuXG5Qcm9taXNlLmVhY2ggPSBmdW5jdGlvbiAocHJvbWlzZXMsIGZuKSB7XG4gICAgcmV0dXJuIFByb21pc2VSZWR1Y2UocHJvbWlzZXMsIGZuLCBJTlRFUk5BTCwgMClcbiAgICAgICAgICAgICAgLl90aGVuKHByb21pc2VBbGxUaGlzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcHJvbWlzZXMsIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLm1hcFNlcmllcyA9IFByb21pc2VNYXBTZXJpZXM7XG59O1xuXG5cbn0se31dLDU4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xudmFyIGVzNSA9IHJlcXVpcmUoXCIuL2VzNVwiKTtcbnZhciBPYmplY3RmcmVlemUgPSBlczUuZnJlZXplO1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIGluaGVyaXRzID0gdXRpbC5pbmhlcml0cztcbnZhciBub3RFbnVtZXJhYmxlUHJvcCA9IHV0aWwubm90RW51bWVyYWJsZVByb3A7XG5cbmZ1bmN0aW9uIHN1YkVycm9yKG5hbWVQcm9wZXJ0eSwgZGVmYXVsdE1lc3NhZ2UpIHtcbiAgICBmdW5jdGlvbiBTdWJFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTdWJFcnJvcikpIHJldHVybiBuZXcgU3ViRXJyb3IobWVzc2FnZSk7XG4gICAgICAgIG5vdEVudW1lcmFibGVQcm9wKHRoaXMsIFwibWVzc2FnZVwiLFxuICAgICAgICAgICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogZGVmYXVsdE1lc3NhZ2UpO1xuICAgICAgICBub3RFbnVtZXJhYmxlUHJvcCh0aGlzLCBcIm5hbWVcIiwgbmFtZVByb3BlcnR5KTtcbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIEVycm9yLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5oZXJpdHMoU3ViRXJyb3IsIEVycm9yKTtcbiAgICByZXR1cm4gU3ViRXJyb3I7XG59XG5cbnZhciBfVHlwZUVycm9yLCBfUmFuZ2VFcnJvcjtcbnZhciBXYXJuaW5nID0gc3ViRXJyb3IoXCJXYXJuaW5nXCIsIFwid2FybmluZ1wiKTtcbnZhciBDYW5jZWxsYXRpb25FcnJvciA9IHN1YkVycm9yKFwiQ2FuY2VsbGF0aW9uRXJyb3JcIiwgXCJjYW5jZWxsYXRpb24gZXJyb3JcIik7XG52YXIgVGltZW91dEVycm9yID0gc3ViRXJyb3IoXCJUaW1lb3V0RXJyb3JcIiwgXCJ0aW1lb3V0IGVycm9yXCIpO1xudmFyIEFnZ3JlZ2F0ZUVycm9yID0gc3ViRXJyb3IoXCJBZ2dyZWdhdGVFcnJvclwiLCBcImFnZ3JlZ2F0ZSBlcnJvclwiKTtcbnRyeSB7XG4gICAgX1R5cGVFcnJvciA9IFR5cGVFcnJvcjtcbiAgICBfUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG59IGNhdGNoKGUpIHtcbiAgICBfVHlwZUVycm9yID0gc3ViRXJyb3IoXCJUeXBlRXJyb3JcIiwgXCJ0eXBlIGVycm9yXCIpO1xuICAgIF9SYW5nZUVycm9yID0gc3ViRXJyb3IoXCJSYW5nZUVycm9yXCIsIFwicmFuZ2UgZXJyb3JcIik7XG59XG5cbnZhciBtZXRob2RzID0gKFwiam9pbiBwb3AgcHVzaCBzaGlmdCB1bnNoaWZ0IHNsaWNlIGZpbHRlciBmb3JFYWNoIHNvbWUgXCIgK1xuICAgIFwiZXZlcnkgbWFwIGluZGV4T2YgbGFzdEluZGV4T2YgcmVkdWNlIHJlZHVjZVJpZ2h0IHNvcnQgcmV2ZXJzZVwiKS5zcGxpdChcIiBcIik7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7ICsraSkge1xuICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlW21ldGhvZHNbaV1dID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgQWdncmVnYXRlRXJyb3IucHJvdG90eXBlW21ldGhvZHNbaV1dID0gQXJyYXkucHJvdG90eXBlW21ldGhvZHNbaV1dO1xuICAgIH1cbn1cblxuZXM1LmRlZmluZVByb3BlcnR5KEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIHZhbHVlOiAwLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxufSk7XG5BZ2dyZWdhdGVFcnJvci5wcm90b3R5cGVbXCJpc09wZXJhdGlvbmFsXCJdID0gdHJ1ZTtcbnZhciBsZXZlbCA9IDA7XG5BZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaW5kZW50ID0gQXJyYXkobGV2ZWwgKiA0ICsgMSkuam9pbihcIiBcIik7XG4gICAgdmFyIHJldCA9IFwiXFxuXCIgKyBpbmRlbnQgKyBcIkFnZ3JlZ2F0ZUVycm9yIG9mOlwiICsgXCJcXG5cIjtcbiAgICBsZXZlbCsrO1xuICAgIGluZGVudCA9IEFycmF5KGxldmVsICogNCArIDEpLmpvaW4oXCIgXCIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgc3RyID0gdGhpc1tpXSA9PT0gdGhpcyA/IFwiW0NpcmN1bGFyIEFnZ3JlZ2F0ZUVycm9yXVwiIDogdGhpc1tpXSArIFwiXCI7XG4gICAgICAgIHZhciBsaW5lcyA9IHN0ci5zcGxpdChcIlxcblwiKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBsaW5lcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgbGluZXNbal0gPSBpbmRlbnQgKyBsaW5lc1tqXTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBsaW5lcy5qb2luKFwiXFxuXCIpO1xuICAgICAgICByZXQgKz0gc3RyICsgXCJcXG5cIjtcbiAgICB9XG4gICAgbGV2ZWwtLTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuZnVuY3Rpb24gT3BlcmF0aW9uYWxFcnJvcihtZXNzYWdlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdGlvbmFsRXJyb3IpKVxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdGlvbmFsRXJyb3IobWVzc2FnZSk7XG4gICAgbm90RW51bWVyYWJsZVByb3AodGhpcywgXCJuYW1lXCIsIFwiT3BlcmF0aW9uYWxFcnJvclwiKTtcbiAgICBub3RFbnVtZXJhYmxlUHJvcCh0aGlzLCBcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgdGhpcy5jYXVzZSA9IG1lc3NhZ2U7XG4gICAgdGhpc1tcImlzT3BlcmF0aW9uYWxcIl0gPSB0cnVlO1xuXG4gICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBub3RFbnVtZXJhYmxlUHJvcCh0aGlzLCBcIm1lc3NhZ2VcIiwgbWVzc2FnZS5tZXNzYWdlKTtcbiAgICAgICAgbm90RW51bWVyYWJsZVByb3AodGhpcywgXCJzdGFja1wiLCBtZXNzYWdlLnN0YWNrKTtcbiAgICB9IGVsc2UgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cblxufVxuaW5oZXJpdHMoT3BlcmF0aW9uYWxFcnJvciwgRXJyb3IpO1xuXG52YXIgZXJyb3JUeXBlcyA9IEVycm9yW1wiX19CbHVlYmlyZEVycm9yVHlwZXNfX1wiXTtcbmlmICghZXJyb3JUeXBlcykge1xuICAgIGVycm9yVHlwZXMgPSBPYmplY3RmcmVlemUoe1xuICAgICAgICBDYW5jZWxsYXRpb25FcnJvcjogQ2FuY2VsbGF0aW9uRXJyb3IsXG4gICAgICAgIFRpbWVvdXRFcnJvcjogVGltZW91dEVycm9yLFxuICAgICAgICBPcGVyYXRpb25hbEVycm9yOiBPcGVyYXRpb25hbEVycm9yLFxuICAgICAgICBSZWplY3Rpb25FcnJvcjogT3BlcmF0aW9uYWxFcnJvcixcbiAgICAgICAgQWdncmVnYXRlRXJyb3I6IEFnZ3JlZ2F0ZUVycm9yXG4gICAgfSk7XG4gICAgZXM1LmRlZmluZVByb3BlcnR5KEVycm9yLCBcIl9fQmx1ZWJpcmRFcnJvclR5cGVzX19cIiwge1xuICAgICAgICB2YWx1ZTogZXJyb3JUeXBlcyxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBFcnJvcjogRXJyb3IsXG4gICAgVHlwZUVycm9yOiBfVHlwZUVycm9yLFxuICAgIFJhbmdlRXJyb3I6IF9SYW5nZUVycm9yLFxuICAgIENhbmNlbGxhdGlvbkVycm9yOiBlcnJvclR5cGVzLkNhbmNlbGxhdGlvbkVycm9yLFxuICAgIE9wZXJhdGlvbmFsRXJyb3I6IGVycm9yVHlwZXMuT3BlcmF0aW9uYWxFcnJvcixcbiAgICBUaW1lb3V0RXJyb3I6IGVycm9yVHlwZXMuVGltZW91dEVycm9yLFxuICAgIEFnZ3JlZ2F0ZUVycm9yOiBlcnJvclR5cGVzLkFnZ3JlZ2F0ZUVycm9yLFxuICAgIFdhcm5pbmc6IFdhcm5pbmdcbn07XG5cbn0se1wiLi9lczVcIjo1OSxcIi4vdXRpbFwiOjgyfV0sNTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIGlzRVM1ID0gKGZ1bmN0aW9uKCl7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgcmV0dXJuIHRoaXMgPT09IHVuZGVmaW5lZDtcbn0pKCk7XG5cbmlmIChpc0VTNSkge1xuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBmcmVlemU6IE9iamVjdC5mcmVlemUsXG4gICAgICAgIGRlZmluZVByb3BlcnR5OiBPYmplY3QuZGVmaW5lUHJvcGVydHksXG4gICAgICAgIGdldERlc2NyaXB0b3I6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIGtleXM6IE9iamVjdC5rZXlzLFxuICAgICAgICBuYW1lczogT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsXG4gICAgICAgIGdldFByb3RvdHlwZU9mOiBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgICAgIGlzQXJyYXk6IEFycmF5LmlzQXJyYXksXG4gICAgICAgIGlzRVM1OiBpc0VTNSxcbiAgICAgICAgcHJvcGVydHlJc1dyaXRhYmxlOiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApO1xuICAgICAgICAgICAgcmV0dXJuICEhKCFkZXNjcmlwdG9yIHx8IGRlc2NyaXB0b3Iud3JpdGFibGUgfHwgZGVzY3JpcHRvci5zZXQpO1xuICAgICAgICB9XG4gICAgfTtcbn0gZWxzZSB7XG4gICAgdmFyIGhhcyA9IHt9Lmhhc093blByb3BlcnR5O1xuICAgIHZhciBzdHIgPSB7fS50b1N0cmluZztcbiAgICB2YXIgcHJvdG8gPSB7fS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgT2JqZWN0S2V5cyA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG8pIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbChvLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgcmV0LnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG5cbiAgICB2YXIgT2JqZWN0R2V0RGVzY3JpcHRvciA9IGZ1bmN0aW9uKG8sIGtleSkge1xuICAgICAgICByZXR1cm4ge3ZhbHVlOiBvW2tleV19O1xuICAgIH07XG5cbiAgICB2YXIgT2JqZWN0RGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiAobywga2V5LCBkZXNjKSB7XG4gICAgICAgIG9ba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICAgIHJldHVybiBvO1xuICAgIH07XG5cbiAgICB2YXIgT2JqZWN0RnJlZXplID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH07XG5cbiAgICB2YXIgT2JqZWN0R2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KG9iaikuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvdG87XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIEFycmF5SXNBcnJheSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBzdHIuY2FsbChvYmopID09PSBcIltvYmplY3QgQXJyYXldXCI7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2goZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICBpc0FycmF5OiBBcnJheUlzQXJyYXksXG4gICAgICAgIGtleXM6IE9iamVjdEtleXMsXG4gICAgICAgIG5hbWVzOiBPYmplY3RLZXlzLFxuICAgICAgICBkZWZpbmVQcm9wZXJ0eTogT2JqZWN0RGVmaW5lUHJvcGVydHksXG4gICAgICAgIGdldERlc2NyaXB0b3I6IE9iamVjdEdldERlc2NyaXB0b3IsXG4gICAgICAgIGZyZWV6ZTogT2JqZWN0RnJlZXplLFxuICAgICAgICBnZXRQcm90b3R5cGVPZjogT2JqZWN0R2V0UHJvdG90eXBlT2YsXG4gICAgICAgIGlzRVM1OiBpc0VTNSxcbiAgICAgICAgcHJvcGVydHlJc1dyaXRhYmxlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxufSx7fV0sNjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMKSB7XG52YXIgUHJvbWlzZU1hcCA9IFByb21pc2UubWFwO1xuXG5Qcm9taXNlLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZU1hcCh0aGlzLCBmbiwgb3B0aW9ucywgSU5URVJOQUwpO1xufTtcblxuUHJvbWlzZS5maWx0ZXIgPSBmdW5jdGlvbiAocHJvbWlzZXMsIGZuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2VNYXAocHJvbWlzZXMsIGZuLCBvcHRpb25zLCBJTlRFUk5BTCk7XG59O1xufTtcblxufSx7fV0sNjE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIHRyeUNvbnZlcnRUb1Byb21pc2UpIHtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbnZhciBDYW5jZWxsYXRpb25FcnJvciA9IFByb21pc2UuQ2FuY2VsbGF0aW9uRXJyb3I7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xuXG5mdW5jdGlvbiBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0KHByb21pc2UsIHR5cGUsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLmNhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2FuY2VsUHJvbWlzZSA9IG51bGw7XG59XG5cblBhc3NUaHJvdWdoSGFuZGxlckNvbnRleHQucHJvdG90eXBlLmlzRmluYWxseUhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlID09PSAwO1xufTtcblxuZnVuY3Rpb24gRmluYWxseUhhbmRsZXJDYW5jZWxSZWFjdGlvbihmaW5hbGx5SGFuZGxlcikge1xuICAgIHRoaXMuZmluYWxseUhhbmRsZXIgPSBmaW5hbGx5SGFuZGxlcjtcbn1cblxuRmluYWxseUhhbmRsZXJDYW5jZWxSZWFjdGlvbi5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNoZWNrQ2FuY2VsKHRoaXMuZmluYWxseUhhbmRsZXIpO1xufTtcblxuZnVuY3Rpb24gY2hlY2tDYW5jZWwoY3R4LCByZWFzb24pIHtcbiAgICBpZiAoY3R4LmNhbmNlbFByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGN0eC5jYW5jZWxQcm9taXNlLl9yZWplY3QocmVhc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN0eC5jYW5jZWxQcm9taXNlLl9jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgICBjdHguY2FuY2VsUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHN1Y2NlZWQoKSB7XG4gICAgcmV0dXJuIGZpbmFsbHlIYW5kbGVyLmNhbGwodGhpcywgdGhpcy5wcm9taXNlLl90YXJnZXQoKS5fc2V0dGxlZFZhbHVlKCkpO1xufVxuZnVuY3Rpb24gZmFpbChyZWFzb24pIHtcbiAgICBpZiAoY2hlY2tDYW5jZWwodGhpcywgcmVhc29uKSkgcmV0dXJuO1xuICAgIGVycm9yT2JqLmUgPSByZWFzb247XG4gICAgcmV0dXJuIGVycm9yT2JqO1xufVxuZnVuY3Rpb24gZmluYWxseUhhbmRsZXIocmVhc29uT3JWYWx1ZSkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuICAgIHZhciBoYW5kbGVyID0gdGhpcy5oYW5kbGVyO1xuXG4gICAgaWYgKCF0aGlzLmNhbGxlZCkge1xuICAgICAgICB0aGlzLmNhbGxlZCA9IHRydWU7XG4gICAgICAgIHZhciByZXQgPSB0aGlzLmlzRmluYWxseUhhbmRsZXIoKVxuICAgICAgICAgICAgPyBoYW5kbGVyLmNhbGwocHJvbWlzZS5fYm91bmRWYWx1ZSgpKVxuICAgICAgICAgICAgOiBoYW5kbGVyLmNhbGwocHJvbWlzZS5fYm91bmRWYWx1ZSgpLCByZWFzb25PclZhbHVlKTtcbiAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9taXNlLl9zZXRSZXR1cm5lZE5vblVuZGVmaW5lZCgpO1xuICAgICAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmV0LCBwcm9taXNlKTtcbiAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsUHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UuX2lzQ2FuY2VsbGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFzb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDYW5jZWxsYXRpb25FcnJvcihcImxhdGUgY2FuY2VsbGF0aW9uIG9ic2VydmVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYXR0YWNoRXh0cmFUcmFjZShyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JPYmouZSA9IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXliZVByb21pc2UuaXNQZW5kaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fYXR0YWNoQ2FuY2VsbGF0aW9uQ2FsbGJhY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbmFsbHlIYW5kbGVyQ2FuY2VsUmVhY3Rpb24odGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtYXliZVByb21pc2UuX3RoZW4oXG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWQsIGZhaWwsIHVuZGVmaW5lZCwgdGhpcywgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9taXNlLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICBjaGVja0NhbmNlbCh0aGlzKTtcbiAgICAgICAgZXJyb3JPYmouZSA9IHJlYXNvbk9yVmFsdWU7XG4gICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0NhbmNlbCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHJlYXNvbk9yVmFsdWU7XG4gICAgfVxufVxuXG5Qcm9taXNlLnByb3RvdHlwZS5fcGFzc1Rocm91Z2ggPSBmdW5jdGlvbihoYW5kbGVyLCB0eXBlLCBzdWNjZXNzLCBmYWlsKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0aGlzLnRoZW4oKTtcbiAgICByZXR1cm4gdGhpcy5fdGhlbihzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgIGZhaWwsXG4gICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0KHRoaXMsIHR5cGUsIGhhbmRsZXIpLFxuICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5sYXN0bHkgPVxuUHJvbWlzZS5wcm90b3R5cGVbXCJmaW5hbGx5XCJdID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc1Rocm91Z2goaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHlIYW5kbGVyKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnRhcCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bhc3NUaHJvdWdoKGhhbmRsZXIsIDEsIGZpbmFsbHlIYW5kbGVyKTtcbn07XG5cbnJldHVybiBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0O1xufTtcblxufSx7XCIuL3V0aWxcIjo4Mn1dLDYyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSZWplY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlDb252ZXJ0VG9Qcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBQcm94eWFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKSB7XG52YXIgZXJyb3JzID0gcmVxdWlyZShcIi4vZXJyb3JzXCIpO1xudmFyIFR5cGVFcnJvciA9IGVycm9ycy5UeXBlRXJyb3I7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xudmFyIHRyeUNhdGNoID0gdXRpbC50cnlDYXRjaDtcbnZhciB5aWVsZEhhbmRsZXJzID0gW107XG5cbmZ1bmN0aW9uIHByb21pc2VGcm9tWWllbGRIYW5kbGVyKHZhbHVlLCB5aWVsZEhhbmRsZXJzLCB0cmFjZVBhcmVudCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgeWllbGRIYW5kbGVycy5sZW5ndGg7ICsraSkge1xuICAgICAgICB0cmFjZVBhcmVudC5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKHlpZWxkSGFuZGxlcnNbaV0pKHZhbHVlKTtcbiAgICAgICAgdHJhY2VQYXJlbnQuX3BvcENvbnRleHQoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgICAgIHRyYWNlUGFyZW50Ll9wdXNoQ29udGV4dCgpO1xuICAgICAgICAgICAgdmFyIHJldCA9IFByb21pc2UucmVqZWN0KGVycm9yT2JqLmUpO1xuICAgICAgICAgICAgdHJhY2VQYXJlbnQuX3BvcENvbnRleHQoKTtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmVzdWx0LCB0cmFjZVBhcmVudCk7XG4gICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvbWlzZVNwYXduKGdlbmVyYXRvckZ1bmN0aW9uLCByZWNlaXZlciwgeWllbGRIYW5kbGVyLCBzdGFjaykge1xuICAgIGlmIChkZWJ1Zy5jYW5jZWxsYXRpb24oKSkge1xuICAgICAgICB2YXIgaW50ZXJuYWwgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIHZhciBfZmluYWxseVByb21pc2UgPSB0aGlzLl9maW5hbGx5UHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IGludGVybmFsLmxhc3RseShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfZmluYWxseVByb21pc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBpbnRlcm5hbC5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICAgICAgaW50ZXJuYWwuX3NldE9uQ2FuY2VsKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgcHJvbWlzZS5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc3RhY2sgPSBzdGFjaztcbiAgICB0aGlzLl9nZW5lcmF0b3JGdW5jdGlvbiA9IGdlbmVyYXRvckZ1bmN0aW9uO1xuICAgIHRoaXMuX3JlY2VpdmVyID0gcmVjZWl2ZXI7XG4gICAgdGhpcy5fZ2VuZXJhdG9yID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3lpZWxkSGFuZGxlcnMgPSB0eXBlb2YgeWllbGRIYW5kbGVyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyBbeWllbGRIYW5kbGVyXS5jb25jYXQoeWllbGRIYW5kbGVycylcbiAgICAgICAgOiB5aWVsZEhhbmRsZXJzO1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9jYW5jZWxsYXRpb25QaGFzZSA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhQcm9taXNlU3Bhd24sIFByb3h5YWJsZSk7XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2lzUmVzb2x2ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZSA9PT0gbnVsbDtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2NsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9wcm9taXNlID0gdGhpcy5fZ2VuZXJhdG9yID0gbnVsbDtcbiAgICBpZiAoZGVidWcuY2FuY2VsbGF0aW9uKCkgJiYgdGhpcy5fZmluYWxseVByb21pc2UgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fZmluYWxseVByb21pc2UuX2Z1bGZpbGwoKTtcbiAgICAgICAgdGhpcy5fZmluYWxseVByb21pc2UgPSBudWxsO1xuICAgIH1cbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5faXNSZXNvbHZlZCgpKSByZXR1cm47XG4gICAgdmFyIGltcGxlbWVudHNSZXR1cm4gPSB0eXBlb2YgdGhpcy5fZ2VuZXJhdG9yW1wicmV0dXJuXCJdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoIWltcGxlbWVudHNSZXR1cm4pIHtcbiAgICAgICAgdmFyIHJlYXNvbiA9IG5ldyBQcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yKFxuICAgICAgICAgICAgXCJnZW5lcmF0b3IgLnJldHVybigpIHNlbnRpbmVsXCIpO1xuICAgICAgICBQcm9taXNlLmNvcm91dGluZS5yZXR1cm5TZW50aW5lbCA9IHJlYXNvbjtcbiAgICAgICAgdGhpcy5fcHJvbWlzZS5fYXR0YWNoRXh0cmFUcmFjZShyZWFzb24pO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuICAgICAgICByZXN1bHQgPSB0cnlDYXRjaCh0aGlzLl9nZW5lcmF0b3JbXCJ0aHJvd1wiXSkuY2FsbCh0aGlzLl9nZW5lcmF0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgcmVzdWx0ID0gdHJ5Q2F0Y2godGhpcy5fZ2VuZXJhdG9yW1wicmV0dXJuXCJdKS5jYWxsKHRoaXMuX2dlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgfVxuICAgIHRoaXMuX2NhbmNlbGxhdGlvblBoYXNlID0gdHJ1ZTtcbiAgICB0aGlzLl95aWVsZGVkUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9wcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuICAgIHZhciByZXN1bHQgPSB0cnlDYXRjaCh0aGlzLl9nZW5lcmF0b3IubmV4dCkuY2FsbCh0aGlzLl9nZW5lcmF0b3IsIHZhbHVlKTtcbiAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Byb21pc2VSZWplY3RlZCA9IGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9wcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHJlYXNvbik7XG4gICAgdGhpcy5fcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2godGhpcy5fZ2VuZXJhdG9yW1widGhyb3dcIl0pXG4gICAgICAgIC5jYWxsKHRoaXMuX2dlbmVyYXRvciwgcmVhc29uKTtcbiAgICB0aGlzLl9wcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgdGhpcy5fY29udGludWUocmVzdWx0KTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl95aWVsZGVkUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLl95aWVsZGVkUHJvbWlzZTtcbiAgICAgICAgdGhpcy5feWllbGRlZFByb21pc2UgPSBudWxsO1xuICAgICAgICBwcm9taXNlLmNhbmNlbCgpO1xuICAgIH1cbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUucHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX3J1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9nZW5lcmF0b3IgPSB0aGlzLl9nZW5lcmF0b3JGdW5jdGlvbi5jYWxsKHRoaXMuX3JlY2VpdmVyKTtcbiAgICB0aGlzLl9yZWNlaXZlciA9XG4gICAgICAgIHRoaXMuX2dlbmVyYXRvckZ1bmN0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3Byb21pc2VGdWxmaWxsZWQodW5kZWZpbmVkKTtcbn07XG5cblByb21pc2VTcGF3bi5wcm90b3R5cGUuX2NvbnRpbnVlID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHZhciBwcm9taXNlID0gdGhpcy5fcHJvbWlzZTtcbiAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iaikge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgICAgIGlmICh0aGlzLl9jYW5jZWxsYXRpb25QaGFzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuY2FuY2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2socmVzdWx0LmUsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICBpZiAocmVzdWx0LmRvbmUgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgICBpZiAodGhpcy5fY2FuY2VsbGF0aW9uUGhhc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuX3Jlc29sdmVDYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZSh2YWx1ZSwgdGhpcy5fcHJvbWlzZSk7XG4gICAgICAgIGlmICghKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpKSB7XG4gICAgICAgICAgICBtYXliZVByb21pc2UgPVxuICAgICAgICAgICAgICAgIHByb21pc2VGcm9tWWllbGRIYW5kbGVyKG1heWJlUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl95aWVsZEhhbmRsZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2UpO1xuICAgICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2VSZWplY3RlZChcbiAgICAgICAgICAgICAgICAgICAgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQSB2YWx1ZSAlcyB3YXMgeWllbGRlZCB0aGF0IGNvdWxkIG5vdCBiZSB0cmVhdGVkIGFzIGEgcHJvbWlzZVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcXHUwMDBhXCIucmVwbGFjZShcIiVzXCIsIHZhbHVlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIkZyb20gY29yb3V0aW5lOlxcdTAwMGFcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFjay5zcGxpdChcIlxcblwiKS5zbGljZSgxLCAtNykuam9pbihcIlxcblwiKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWF5YmVQcm9taXNlID0gbWF5YmVQcm9taXNlLl90YXJnZXQoKTtcbiAgICAgICAgdmFyIGJpdEZpZWxkID0gbWF5YmVQcm9taXNlLl9iaXRGaWVsZDtcbiAgICAgICAgO1xuICAgICAgICBpZiAoKChiaXRGaWVsZCAmIDUwMzk3MTg0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3lpZWxkZWRQcm9taXNlID0gbWF5YmVQcm9taXNlO1xuICAgICAgICAgICAgbWF5YmVQcm9taXNlLl9wcm94eSh0aGlzLCBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgUHJvbWlzZS5fYXN5bmMuaW52b2tlKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2VGdWxmaWxsZWQsIHRoaXMsIG1heWJlUHJvbWlzZS5fdmFsdWUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMTY3NzcyMTYpICE9PSAwKSkge1xuICAgICAgICAgICAgUHJvbWlzZS5fYXN5bmMuaW52b2tlKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Byb21pc2VSZWplY3RlZCwgdGhpcywgbWF5YmVQcm9taXNlLl9yZWFzb24oKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb21pc2VDYW5jZWxsZWQoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblByb21pc2UuY29yb3V0aW5lID0gZnVuY3Rpb24gKGdlbmVyYXRvckZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBnZW5lcmF0b3JGdW5jdGlvbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJnZW5lcmF0b3JGdW5jdGlvbiBtdXN0IGJlIGEgZnVuY3Rpb25cXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgIH1cbiAgICB2YXIgeWllbGRIYW5kbGVyID0gT2JqZWN0KG9wdGlvbnMpLnlpZWxkSGFuZGxlcjtcbiAgICB2YXIgUHJvbWlzZVNwYXduJCA9IFByb21pc2VTcGF3bjtcbiAgICB2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZ2VuZXJhdG9yID0gZ2VuZXJhdG9yRnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgdmFyIHNwYXduID0gbmV3IFByb21pc2VTcGF3biQodW5kZWZpbmVkLCB1bmRlZmluZWQsIHlpZWxkSGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2spO1xuICAgICAgICB2YXIgcmV0ID0gc3Bhd24ucHJvbWlzZSgpO1xuICAgICAgICBzcGF3bi5fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yO1xuICAgICAgICBzcGF3bi5fcHJvbWlzZUZ1bGZpbGxlZCh1bmRlZmluZWQpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG59O1xuXG5Qcm9taXNlLmNvcm91dGluZS5hZGRZaWVsZEhhbmRsZXIgPSBmdW5jdGlvbihmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZm4pKTtcbiAgICB9XG4gICAgeWllbGRIYW5kbGVycy5wdXNoKGZuKTtcbn07XG5cblByb21pc2Uuc3Bhd24gPSBmdW5jdGlvbiAoZ2VuZXJhdG9yRnVuY3Rpb24pIHtcbiAgICBkZWJ1Zy5kZXByZWNhdGVkKFwiUHJvbWlzZS5zcGF3bigpXCIsIFwiUHJvbWlzZS5jb3JvdXRpbmUoKVwiKTtcbiAgICBpZiAodHlwZW9mIGdlbmVyYXRvckZ1bmN0aW9uICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImdlbmVyYXRvckZ1bmN0aW9uIG11c3QgYmUgYSBmdW5jdGlvblxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxuICAgIHZhciBzcGF3biA9IG5ldyBQcm9taXNlU3Bhd24oZ2VuZXJhdG9yRnVuY3Rpb24sIHRoaXMpO1xuICAgIHZhciByZXQgPSBzcGF3bi5wcm9taXNlKCk7XG4gICAgc3Bhd24uX3J1bihQcm9taXNlLnNwYXduKTtcbiAgICByZXR1cm4gcmV0O1xufTtcbn07XG5cbn0se1wiLi9lcnJvcnNcIjo1OCxcIi4vdXRpbFwiOjgyfV0sNjM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9XG5mdW5jdGlvbihQcm9taXNlLCBQcm9taXNlQXJyYXksIHRyeUNvbnZlcnRUb1Byb21pc2UsIElOVEVSTkFMLCBhc3luYyxcbiAgICAgICAgIGdldERvbWFpbikge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIGNhbkV2YWx1YXRlID0gdXRpbC5jYW5FdmFsdWF0ZTtcbnZhciB0cnlDYXRjaCA9IHV0aWwudHJ5Q2F0Y2g7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xudmFyIHJlamVjdDtcblxuaWYgKCFmYWxzZSkge1xuaWYgKGNhbkV2YWx1YXRlKSB7XG4gICAgdmFyIHRoZW5DYWxsYmFjayA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcInZhbHVlXCIsIFwiaG9sZGVyXCIsIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgJ3VzZSBzdHJpY3QnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgaG9sZGVyLnBJbmRleCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgaG9sZGVyLmNoZWNrRnVsZmlsbG1lbnQodGhpcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgXCIucmVwbGFjZSgvSW5kZXgvZywgaSkpO1xuICAgIH07XG5cbiAgICB2YXIgcHJvbWlzZVNldHRlciA9IGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbihcInByb21pc2VcIiwgXCJob2xkZXJcIiwgXCIgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgJ3VzZSBzdHJpY3QnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgaG9sZGVyLnBJbmRleCA9IHByb21pc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgXCIucmVwbGFjZSgvSW5kZXgvZywgaSkpO1xuICAgIH07XG5cbiAgICB2YXIgZ2VuZXJhdGVIb2xkZXJDbGFzcyA9IGZ1bmN0aW9uKHRvdGFsKSB7XG4gICAgICAgIHZhciBwcm9wcyA9IG5ldyBBcnJheSh0b3RhbCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHByb3BzW2ldID0gXCJ0aGlzLnBcIiArIChpKzEpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhc3NpZ25tZW50ID0gcHJvcHMuam9pbihcIiA9IFwiKSArIFwiID0gbnVsbDtcIjtcbiAgICAgICAgdmFyIGNhbmNlbGxhdGlvbkNvZGU9IFwidmFyIHByb21pc2U7XFxuXCIgKyBwcm9wcy5tYXAoZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICAgICBwcm9taXNlID0gXCIgKyBwcm9wICsgXCI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLmNhbmNlbCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgXCI7XG4gICAgICAgIH0pLmpvaW4oXCJcXG5cIik7XG4gICAgICAgIHZhciBwYXNzZWRBcmd1bWVudHMgPSBwcm9wcy5qb2luKFwiLCBcIik7XG4gICAgICAgIHZhciBuYW1lID0gXCJIb2xkZXIkXCIgKyB0b3RhbDtcblxuXG4gICAgICAgIHZhciBjb2RlID0gXCJyZXR1cm4gZnVuY3Rpb24odHJ5Q2F0Y2gsIGVycm9yT2JqLCBQcm9taXNlLCBhc3luYykgeyAgICBcXG5cXFxuICAgICAgICAgICAgJ3VzZSBzdHJpY3QnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgZnVuY3Rpb24gW1RoZU5hbWVdKGZuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIFtUaGVQcm9wZXJ0aWVzXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHRoaXMuZm4gPSBmbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHRoaXMuYXN5bmNOZWVkZWQgPSB0cnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHRoaXMubm93ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgW1RoZU5hbWVdLnByb3RvdHlwZS5fY2FsbEZ1bmN0aW9uID0gZnVuY3Rpb24ocHJvbWlzZSkgeyAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHByb21pc2UuX3B1c2hDb250ZXh0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHZhciByZXQgPSB0cnlDYXRjaCh0aGlzLmZuKShbVGhlUGFzc2VkQXJndW1lbnRzXSk7ICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHByb21pc2UuX3BvcENvbnRleHQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IGVycm9yT2JqKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhyZXQuZSwgZmFsc2UpOyAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9yZXNvbHZlQ2FsbGJhY2socmV0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgW1RoZU5hbWVdLnByb3RvdHlwZS5jaGVja0Z1bGZpbGxtZW50ID0gZnVuY3Rpb24ocHJvbWlzZSkgeyAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHZhciBub3cgPSArK3RoaXMubm93OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIGlmIChub3cgPT09IFtUaGVUb3RhbF0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hc3luY05lZWRlZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMuaW52b2tlKHRoaXMuX2NhbGxGdW5jdGlvbiwgdGhpcywgcHJvbWlzZSk7ICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FsbEZ1bmN0aW9uKHByb21pc2UpOyAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgW1RoZU5hbWVdLnByb3RvdHlwZS5fcmVzdWx0Q2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIFtDYW5jZWxsYXRpb25Db2RlXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgcmV0dXJuIFtUaGVOYW1lXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICB9KHRyeUNhdGNoLCBlcnJvck9iaiwgUHJvbWlzZSwgYXN5bmMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICBcIjtcblxuICAgICAgICBjb2RlID0gY29kZS5yZXBsYWNlKC9cXFtUaGVOYW1lXFxdL2csIG5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxbVGhlVG90YWxcXF0vZywgdG90YWwpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxbVGhlUGFzc2VkQXJndW1lbnRzXFxdL2csIHBhc3NlZEFyZ3VtZW50cylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFtUaGVQcm9wZXJ0aWVzXFxdL2csIGFzc2lnbm1lbnQpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxbQ2FuY2VsbGF0aW9uQ29kZVxcXS9nLCBjYW5jZWxsYXRpb25Db2RlKTtcblxuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwidHJ5Q2F0Y2hcIiwgXCJlcnJvck9ialwiLCBcIlByb21pc2VcIiwgXCJhc3luY1wiLCBjb2RlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRyeUNhdGNoLCBlcnJvck9iaiwgUHJvbWlzZSwgYXN5bmMpO1xuICAgIH07XG5cbiAgICB2YXIgaG9sZGVyQ2xhc3NlcyA9IFtdO1xuICAgIHZhciB0aGVuQ2FsbGJhY2tzID0gW107XG4gICAgdmFyIHByb21pc2VTZXR0ZXJzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7ICsraSkge1xuICAgICAgICBob2xkZXJDbGFzc2VzLnB1c2goZ2VuZXJhdGVIb2xkZXJDbGFzcyhpICsgMSkpO1xuICAgICAgICB0aGVuQ2FsbGJhY2tzLnB1c2godGhlbkNhbGxiYWNrKGkgKyAxKSk7XG4gICAgICAgIHByb21pc2VTZXR0ZXJzLnB1c2gocHJvbWlzZVNldHRlcihpICsgMSkpO1xuICAgIH1cblxuICAgIHJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcbn19XG5cblByb21pc2Uuam9pbiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGFzdCA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmbjtcbiAgICBpZiAobGFzdCA+IDAgJiYgdHlwZW9mIGFyZ3VtZW50c1tsYXN0XSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGZuID0gYXJndW1lbnRzW2xhc3RdO1xuICAgICAgICBpZiAoIWZhbHNlKSB7XG4gICAgICAgICAgICBpZiAobGFzdCA8PSA4ICYmIGNhbkV2YWx1YXRlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgICAgICAgICAgdmFyIEhvbGRlckNsYXNzID0gaG9sZGVyQ2xhc3Nlc1tsYXN0IC0gMV07XG4gICAgICAgICAgICAgICAgdmFyIGhvbGRlciA9IG5ldyBIb2xkZXJDbGFzcyhmbik7XG4gICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRoZW5DYWxsYmFja3M7XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3Q7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZShhcmd1bWVudHNbaV0sIHJldCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdEZpZWxkID0gbWF5YmVQcm9taXNlLl9iaXRGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKGJpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fdGhlbihjYWxsYmFja3NbaV0sIHJlamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCByZXQsIGhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZVNldHRlcnNbaV0obWF5YmVQcm9taXNlLCBob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRlci5hc3luY05lZWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKHJldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UuX3ZhbHVlKCksIGhvbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Ll9yZWplY3QobWF5YmVQcm9taXNlLl9yZWFzb24oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldC5fY2FuY2VsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3NbaV0uY2FsbChyZXQsIG1heWJlUHJvbWlzZSwgaG9sZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcmV0Ll9pc0ZhdGVTZWFsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZGVyLmFzeW5jTmVlZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gZ2V0RG9tYWluKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGVyLmZuID0gdXRpbC5kb21haW5CaW5kKGRvbWFpbiwgaG9sZGVyLmZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXQuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgICAgICAgICAgICAgICAgICByZXQuX3NldE9uQ2FuY2VsKGhvbGRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyICRfbGVuID0gYXJndW1lbnRzLmxlbmd0aDt2YXIgYXJncyA9IG5ldyBBcnJheSgkX2xlbik7IGZvcih2YXIgJF9pID0gMDsgJF9pIDwgJF9sZW47ICsrJF9pKSB7YXJnc1skX2ldID0gYXJndW1lbnRzWyRfaV07fTtcbiAgICBpZiAoZm4pIGFyZ3MucG9wKCk7XG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlQXJyYXkoYXJncykucHJvbWlzZSgpO1xuICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gcmV0LnNwcmVhZChmbikgOiByZXQ7XG59O1xuXG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sNjQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBpUmVqZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlDb252ZXJ0VG9Qcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFUk5BTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcpIHtcbnZhciBnZXREb21haW4gPSBQcm9taXNlLl9nZXREb21haW47XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xudmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcbnZhciBhc3luYyA9IFByb21pc2UuX2FzeW5jO1xuXG5mdW5jdGlvbiBNYXBwaW5nUHJvbWlzZUFycmF5KHByb21pc2VzLCBmbiwgbGltaXQsIF9maWx0ZXIpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yJChwcm9taXNlcyk7XG4gICAgdGhpcy5fcHJvbWlzZS5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICB2YXIgZG9tYWluID0gZ2V0RG9tYWluKCk7XG4gICAgdGhpcy5fY2FsbGJhY2sgPSBkb21haW4gPT09IG51bGwgPyBmbiA6IHV0aWwuZG9tYWluQmluZChkb21haW4sIGZuKTtcbiAgICB0aGlzLl9wcmVzZXJ2ZWRWYWx1ZXMgPSBfZmlsdGVyID09PSBJTlRFUk5BTFxuICAgICAgICA/IG5ldyBBcnJheSh0aGlzLmxlbmd0aCgpKVxuICAgICAgICA6IG51bGw7XG4gICAgdGhpcy5fbGltaXQgPSBsaW1pdDtcbiAgICB0aGlzLl9pbkZsaWdodCA9IDA7XG4gICAgdGhpcy5fcXVldWUgPSBbXTtcbiAgICBhc3luYy5pbnZva2UodGhpcy5fYXN5bmNJbml0LCB0aGlzLCB1bmRlZmluZWQpO1xufVxudXRpbC5pbmhlcml0cyhNYXBwaW5nUHJvbWlzZUFycmF5LCBQcm9taXNlQXJyYXkpO1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fYXN5bmNJbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5faW5pdCQodW5kZWZpbmVkLCAtMik7XG59O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHt9O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZUZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgIHZhciBwcmVzZXJ2ZWRWYWx1ZXMgPSB0aGlzLl9wcmVzZXJ2ZWRWYWx1ZXM7XG4gICAgdmFyIGxpbWl0ID0gdGhpcy5fbGltaXQ7XG5cbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGluZGV4ID0gKGluZGV4ICogLTEpIC0gMTtcbiAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICBpZiAobGltaXQgPj0gMSkge1xuICAgICAgICAgICAgdGhpcy5faW5GbGlnaHQtLTtcbiAgICAgICAgICAgIHRoaXMuX2RyYWluUXVldWUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGxpbWl0ID49IDEgJiYgdGhpcy5faW5GbGlnaHQgPj0gbGltaXQpIHtcbiAgICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVzZXJ2ZWRWYWx1ZXMgIT09IG51bGwpIHByZXNlcnZlZFZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcblxuICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Byb21pc2U7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrO1xuICAgICAgICB2YXIgcmVjZWl2ZXIgPSBwcm9taXNlLl9ib3VuZFZhbHVlKCk7XG4gICAgICAgIHByb21pc2UuX3B1c2hDb250ZXh0KCk7XG4gICAgICAgIHZhciByZXQgPSB0cnlDYXRjaChjYWxsYmFjaykuY2FsbChyZWNlaXZlciwgdmFsdWUsIGluZGV4LCBsZW5ndGgpO1xuICAgICAgICB2YXIgcHJvbWlzZUNyZWF0ZWQgPSBwcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgICAgIGRlYnVnLmNoZWNrRm9yZ290dGVuUmV0dXJucyhcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIHByb21pc2VDcmVhdGVkLFxuICAgICAgICAgICAgcHJlc2VydmVkVmFsdWVzICE9PSBudWxsID8gXCJQcm9taXNlLmZpbHRlclwiIDogXCJQcm9taXNlLm1hcFwiLFxuICAgICAgICAgICAgcHJvbWlzZVxuICAgICAgICApO1xuICAgICAgICBpZiAocmV0ID09PSBlcnJvck9iaikge1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0KHJldC5lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UocmV0LCB0aGlzLl9wcm9taXNlKTtcbiAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIG1heWJlUHJvbWlzZSA9IG1heWJlUHJvbWlzZS5fdGFyZ2V0KCk7XG4gICAgICAgICAgICB2YXIgYml0RmllbGQgPSBtYXliZVByb21pc2UuX2JpdEZpZWxkO1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgaWYgKCgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxpbWl0ID49IDEpIHRoaXMuX2luRmxpZ2h0Kys7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2luZGV4XSA9IG1heWJlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICBtYXliZVByb21pc2UuX3Byb3h5KHRoaXMsIChpbmRleCArIDEpICogLTEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZXQgPSBtYXliZVByb21pc2UuX3ZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVqZWN0KG1heWJlUHJvbWlzZS5fcmVhc29uKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbaW5kZXhdID0gcmV0O1xuICAgIH1cbiAgICB2YXIgdG90YWxSZXNvbHZlZCA9ICsrdGhpcy5fdG90YWxSZXNvbHZlZDtcbiAgICBpZiAodG90YWxSZXNvbHZlZCA+PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHByZXNlcnZlZFZhbHVlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKHZhbHVlcywgcHJlc2VydmVkVmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwcGluZ1Byb21pc2VBcnJheS5wcm90b3R5cGUuX2RyYWluUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHF1ZXVlID0gdGhpcy5fcXVldWU7XG4gICAgdmFyIGxpbWl0ID0gdGhpcy5fbGltaXQ7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCAmJiB0aGlzLl9pbkZsaWdodCA8IGxpbWl0KSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybjtcbiAgICAgICAgdmFyIGluZGV4ID0gcXVldWUucG9wKCk7XG4gICAgICAgIHRoaXMuX3Byb21pc2VGdWxmaWxsZWQodmFsdWVzW2luZGV4XSwgaW5kZXgpO1xuICAgIH1cbn07XG5cbk1hcHBpbmdQcm9taXNlQXJyYXkucHJvdG90eXBlLl9maWx0ZXIgPSBmdW5jdGlvbiAoYm9vbGVhbnMsIHZhbHVlcykge1xuICAgIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoO1xuICAgIHZhciByZXQgPSBuZXcgQXJyYXkobGVuKTtcbiAgICB2YXIgaiA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoYm9vbGVhbnNbaV0pIHJldFtqKytdID0gdmFsdWVzW2ldO1xuICAgIH1cbiAgICByZXQubGVuZ3RoID0gajtcbiAgICB0aGlzLl9yZXNvbHZlKHJldCk7XG59O1xuXG5NYXBwaW5nUHJvbWlzZUFycmF5LnByb3RvdHlwZS5wcmVzZXJ2ZWRWYWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZXNlcnZlZFZhbHVlcztcbn07XG5cbmZ1bmN0aW9uIG1hcChwcm9taXNlcywgZm4sIG9wdGlvbnMsIF9maWx0ZXIpIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuXG4gICAgdmFyIGxpbWl0ID0gMDtcbiAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29uY3VycmVuY3kgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUeXBlRXJyb3IoXCInY29uY3VycmVuY3knIG11c3QgYmUgYSBudW1iZXIgYnV0IGl0IGlzIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY2xhc3NTdHJpbmcob3B0aW9ucy5jb25jdXJyZW5jeSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0ID0gb3B0aW9ucy5jb25jdXJyZW5jeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBidXQgaXQgaXMgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmNsYXNzU3RyaW5nKG9wdGlvbnMpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGltaXQgPSB0eXBlb2YgbGltaXQgPT09IFwibnVtYmVyXCIgJiZcbiAgICAgICAgaXNGaW5pdGUobGltaXQpICYmIGxpbWl0ID49IDEgPyBsaW1pdCA6IDA7XG4gICAgcmV0dXJuIG5ldyBNYXBwaW5nUHJvbWlzZUFycmF5KHByb21pc2VzLCBmbiwgbGltaXQsIF9maWx0ZXIpLnByb21pc2UoKTtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGZuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG1hcCh0aGlzLCBmbiwgb3B0aW9ucywgbnVsbCk7XG59O1xuXG5Qcm9taXNlLm1hcCA9IGZ1bmN0aW9uIChwcm9taXNlcywgZm4sIG9wdGlvbnMsIF9maWx0ZXIpIHtcbiAgICByZXR1cm4gbWFwKHByb21pc2VzLCBmbiwgb3B0aW9ucywgX2ZpbHRlcik7XG59O1xuXG5cbn07XG5cbn0se1wiLi91dGlsXCI6ODJ9XSw2NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID1cbmZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBhcGlSZWplY3Rpb24sIGRlYnVnKSB7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xuXG5Qcm9taXNlLm1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgUHJvbWlzZS5UeXBlRXJyb3IoXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmV0ID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgICAgIHJldC5fcHVzaENvbnRleHQoKTtcbiAgICAgICAgdmFyIHZhbHVlID0gdHJ5Q2F0Y2goZm4pLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIHZhciBwcm9taXNlQ3JlYXRlZCA9IHJldC5fcG9wQ29udGV4dCgpO1xuICAgICAgICBkZWJ1Zy5jaGVja0ZvcmdvdHRlblJldHVybnMoXG4gICAgICAgICAgICB2YWx1ZSwgcHJvbWlzZUNyZWF0ZWQsIFwiUHJvbWlzZS5tZXRob2RcIiwgcmV0KTtcbiAgICAgICAgcmV0Ll9yZXNvbHZlRnJvbVN5bmNWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcbn07XG5cblByb21pc2UuYXR0ZW1wdCA9IFByb21pc2VbXCJ0cnlcIl0gPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0Ll9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHJldC5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlYnVnLmRlcHJlY2F0ZWQoXCJjYWxsaW5nIFByb21pc2UudHJ5IHdpdGggbW9yZSB0aGFuIDEgYXJndW1lbnRcIik7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMV07XG4gICAgICAgIHZhciBjdHggPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhbHVlID0gdXRpbC5pc0FycmF5KGFyZykgPyB0cnlDYXRjaChmbikuYXBwbHkoY3R4LCBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0cnlDYXRjaChmbikuY2FsbChjdHgsIGFyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0cnlDYXRjaChmbikoKTtcbiAgICB9XG4gICAgdmFyIHByb21pc2VDcmVhdGVkID0gcmV0Ll9wb3BDb250ZXh0KCk7XG4gICAgZGVidWcuY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zKFxuICAgICAgICB2YWx1ZSwgcHJvbWlzZUNyZWF0ZWQsIFwiUHJvbWlzZS50cnlcIiwgcmV0KTtcbiAgICByZXQuX3Jlc29sdmVGcm9tU3luY1ZhbHVlKHZhbHVlKTtcbiAgICByZXR1cm4gcmV0O1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3Jlc29sdmVGcm9tU3luY1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSB1dGlsLmVycm9yT2JqKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdENhbGxiYWNrKHZhbHVlLmUsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXNvbHZlQ2FsbGJhY2sodmFsdWUsIHRydWUpO1xuICAgIH1cbn07XG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sNjY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgbWF5YmVXcmFwQXNFcnJvciA9IHV0aWwubWF5YmVXcmFwQXNFcnJvcjtcbnZhciBlcnJvcnMgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG52YXIgT3BlcmF0aW9uYWxFcnJvciA9IGVycm9ycy5PcGVyYXRpb25hbEVycm9yO1xudmFyIGVzNSA9IHJlcXVpcmUoXCIuL2VzNVwiKTtcblxuZnVuY3Rpb24gaXNVbnR5cGVkRXJyb3Iob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGVzNS5nZXRQcm90b3R5cGVPZihvYmopID09PSBFcnJvci5wcm90b3R5cGU7XG59XG5cbnZhciByRXJyb3JLZXkgPSAvXig/Om5hbWV8bWVzc2FnZXxzdGFja3xjYXVzZSkkLztcbmZ1bmN0aW9uIHdyYXBBc09wZXJhdGlvbmFsRXJyb3Iob2JqKSB7XG4gICAgdmFyIHJldDtcbiAgICBpZiAoaXNVbnR5cGVkRXJyb3Iob2JqKSkge1xuICAgICAgICByZXQgPSBuZXcgT3BlcmF0aW9uYWxFcnJvcihvYmopO1xuICAgICAgICByZXQubmFtZSA9IG9iai5uYW1lO1xuICAgICAgICByZXQubWVzc2FnZSA9IG9iai5tZXNzYWdlO1xuICAgICAgICByZXQuc3RhY2sgPSBvYmouc3RhY2s7XG4gICAgICAgIHZhciBrZXlzID0gZXM1LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgIGlmICghckVycm9yS2V5LnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJldFtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gICAgdXRpbC5tYXJrQXNPcmlnaW5hdGluZ0Zyb21SZWplY3Rpb24ob2JqKTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiBub2RlYmFja0ZvclByb21pc2UocHJvbWlzZSwgbXVsdGlBcmdzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGVyciwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHByb21pc2UgPT09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdmFyIHdyYXBwZWQgPSB3cmFwQXNPcGVyYXRpb25hbEVycm9yKG1heWJlV3JhcEFzRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICBwcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHdyYXBwZWQpO1xuICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0KHdyYXBwZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtdWx0aUFyZ3MpIHtcbiAgICAgICAgICAgIHByb21pc2UuX2Z1bGZpbGwodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyICRfbGVuID0gYXJndW1lbnRzLmxlbmd0aDt2YXIgYXJncyA9IG5ldyBBcnJheShNYXRoLm1heCgkX2xlbiAtIDEsIDApKTsgZm9yKHZhciAkX2kgPSAxOyAkX2kgPCAkX2xlbjsgKyskX2kpIHthcmdzWyRfaSAtIDFdID0gYXJndW1lbnRzWyRfaV07fTtcbiAgICAgICAgICAgIHByb21pc2UuX2Z1bGZpbGwoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcHJvbWlzZSA9IG51bGw7XG4gICAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub2RlYmFja0ZvclByb21pc2U7XG5cbn0se1wiLi9lcnJvcnNcIjo1OCxcIi4vZXM1XCI6NTksXCIuL3V0aWxcIjo4Mn1dLDY3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlKSB7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgYXN5bmMgPSBQcm9taXNlLl9hc3luYztcbnZhciB0cnlDYXRjaCA9IHV0aWwudHJ5Q2F0Y2g7XG52YXIgZXJyb3JPYmogPSB1dGlsLmVycm9yT2JqO1xuXG5mdW5jdGlvbiBzcHJlYWRBZGFwdGVyKHZhbCwgbm9kZWJhY2spIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgaWYgKCF1dGlsLmlzQXJyYXkodmFsKSkgcmV0dXJuIHN1Y2Nlc3NBZGFwdGVyLmNhbGwocHJvbWlzZSwgdmFsLCBub2RlYmFjayk7XG4gICAgdmFyIHJldCA9XG4gICAgICAgIHRyeUNhdGNoKG5vZGViYWNrKS5hcHBseShwcm9taXNlLl9ib3VuZFZhbHVlKCksIFtudWxsXS5jb25jYXQodmFsKSk7XG4gICAgaWYgKHJldCA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgYXN5bmMudGhyb3dMYXRlcihyZXQuZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzdWNjZXNzQWRhcHRlcih2YWwsIG5vZGViYWNrKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHZhciByZWNlaXZlciA9IHByb21pc2UuX2JvdW5kVmFsdWUoKTtcbiAgICB2YXIgcmV0ID0gdmFsID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB0cnlDYXRjaChub2RlYmFjaykuY2FsbChyZWNlaXZlciwgbnVsbClcbiAgICAgICAgOiB0cnlDYXRjaChub2RlYmFjaykuY2FsbChyZWNlaXZlciwgbnVsbCwgdmFsKTtcbiAgICBpZiAocmV0ID09PSBlcnJvck9iaikge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKHJldC5lKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlcnJvckFkYXB0ZXIocmVhc29uLCBub2RlYmFjaykge1xuICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgICB2YXIgbmV3UmVhc29uID0gbmV3IEVycm9yKHJlYXNvbiArIFwiXCIpO1xuICAgICAgICBuZXdSZWFzb24uY2F1c2UgPSByZWFzb247XG4gICAgICAgIHJlYXNvbiA9IG5ld1JlYXNvbjtcbiAgICB9XG4gICAgdmFyIHJldCA9IHRyeUNhdGNoKG5vZGViYWNrKS5jYWxsKHByb21pc2UuX2JvdW5kVmFsdWUoKSwgcmVhc29uKTtcbiAgICBpZiAocmV0ID09PSBlcnJvck9iaikge1xuICAgICAgICBhc3luYy50aHJvd0xhdGVyKHJldC5lKTtcbiAgICB9XG59XG5cblByb21pc2UucHJvdG90eXBlLmFzQ2FsbGJhY2sgPSBQcm9taXNlLnByb3RvdHlwZS5ub2RlaWZ5ID0gZnVuY3Rpb24gKG5vZGViYWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygbm9kZWJhY2sgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHZhciBhZGFwdGVyID0gc3VjY2Vzc0FkYXB0ZXI7XG4gICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0KG9wdGlvbnMpLnNwcmVhZCkge1xuICAgICAgICAgICAgYWRhcHRlciA9IHNwcmVhZEFkYXB0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGhlbihcbiAgICAgICAgICAgIGFkYXB0ZXIsXG4gICAgICAgICAgICBlcnJvckFkYXB0ZXIsXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbm9kZWJhY2tcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59O1xufTtcblxufSx7XCIuL3V0aWxcIjo4Mn1dLDY4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAocHJvY2Vzcyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG52YXIgbWFrZVNlbGZSZXNvbHV0aW9uRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJjaXJjdWxhciBwcm9taXNlIHJlc29sdXRpb24gY2hhaW5cXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xufTtcbnZhciByZWZsZWN0SGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbih0aGlzLl90YXJnZXQoKSk7XG59O1xudmFyIGFwaVJlamVjdGlvbiA9IGZ1bmN0aW9uKG1zZykge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKG1zZykpO1xufTtcbmZ1bmN0aW9uIFByb3h5YWJsZSgpIHt9XG52YXIgVU5ERUZJTkVEX0JJTkRJTkcgPSB7fTtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIGdldERvbWFpbjtcbmlmICh1dGlsLmlzTm9kZSkge1xuICAgIGdldERvbWFpbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmV0ID0gcHJvY2Vzcy5kb21haW47XG4gICAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5lZCkgcmV0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xufSBlbHNlIHtcbiAgICBnZXREb21haW4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbn1cbnV0aWwubm90RW51bWVyYWJsZVByb3AoUHJvbWlzZSwgXCJfZ2V0RG9tYWluXCIsIGdldERvbWFpbik7XG5cbnZhciBlczUgPSByZXF1aXJlKFwiLi9lczVcIik7XG52YXIgQXN5bmMgPSByZXF1aXJlKFwiLi9hc3luY1wiKTtcbnZhciBhc3luYyA9IG5ldyBBc3luYygpO1xuZXM1LmRlZmluZVByb3BlcnR5KFByb21pc2UsIFwiX2FzeW5jXCIsIHt2YWx1ZTogYXN5bmN9KTtcbnZhciBlcnJvcnMgPSByZXF1aXJlKFwiLi9lcnJvcnNcIik7XG52YXIgVHlwZUVycm9yID0gUHJvbWlzZS5UeXBlRXJyb3IgPSBlcnJvcnMuVHlwZUVycm9yO1xuUHJvbWlzZS5SYW5nZUVycm9yID0gZXJyb3JzLlJhbmdlRXJyb3I7XG52YXIgQ2FuY2VsbGF0aW9uRXJyb3IgPSBQcm9taXNlLkNhbmNlbGxhdGlvbkVycm9yID0gZXJyb3JzLkNhbmNlbGxhdGlvbkVycm9yO1xuUHJvbWlzZS5UaW1lb3V0RXJyb3IgPSBlcnJvcnMuVGltZW91dEVycm9yO1xuUHJvbWlzZS5PcGVyYXRpb25hbEVycm9yID0gZXJyb3JzLk9wZXJhdGlvbmFsRXJyb3I7XG5Qcm9taXNlLlJlamVjdGlvbkVycm9yID0gZXJyb3JzLk9wZXJhdGlvbmFsRXJyb3I7XG5Qcm9taXNlLkFnZ3JlZ2F0ZUVycm9yID0gZXJyb3JzLkFnZ3JlZ2F0ZUVycm9yO1xudmFyIElOVEVSTkFMID0gZnVuY3Rpb24oKXt9O1xudmFyIEFQUExZID0ge307XG52YXIgTkVYVF9GSUxURVIgPSB7fTtcbnZhciB0cnlDb252ZXJ0VG9Qcm9taXNlID0gcmVxdWlyZShcIi4vdGhlbmFibGVzXCIpKFByb21pc2UsIElOVEVSTkFMKTtcbnZhciBQcm9taXNlQXJyYXkgPVxuICAgIHJlcXVpcmUoXCIuL3Byb21pc2VfYXJyYXlcIikoUHJvbWlzZSwgSU5URVJOQUwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5Q29udmVydFRvUHJvbWlzZSwgYXBpUmVqZWN0aW9uLCBQcm94eWFibGUpO1xudmFyIENvbnRleHQgPSByZXF1aXJlKFwiLi9jb250ZXh0XCIpKFByb21pc2UpO1xuIC8qanNoaW50IHVudXNlZDpmYWxzZSovXG52YXIgY3JlYXRlQ29udGV4dCA9IENvbnRleHQuY3JlYXRlO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdnYWJpbGl0eVwiKShQcm9taXNlLCBDb250ZXh0KTtcbnZhciBDYXB0dXJlZFRyYWNlID0gZGVidWcuQ2FwdHVyZWRUcmFjZTtcbnZhciBQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0ID1cbiAgICByZXF1aXJlKFwiLi9maW5hbGx5XCIpKFByb21pc2UsIHRyeUNvbnZlcnRUb1Byb21pc2UpO1xudmFyIGNhdGNoRmlsdGVyID0gcmVxdWlyZShcIi4vY2F0Y2hfZmlsdGVyXCIpKE5FWFRfRklMVEVSKTtcbnZhciBub2RlYmFja0ZvclByb21pc2UgPSByZXF1aXJlKFwiLi9ub2RlYmFja1wiKTtcbnZhciBlcnJvck9iaiA9IHV0aWwuZXJyb3JPYmo7XG52YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xuZnVuY3Rpb24gY2hlY2soc2VsZiwgZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGV4ZWN1dG9yKSk7XG4gICAgfVxuICAgIGlmIChzZWxmLmNvbnN0cnVjdG9yICE9PSBQcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgcHJvbWlzZSBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgaW52b2tlZCBkaXJlY3RseVxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSAwO1xuICAgIHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVqZWN0aW9uSGFuZGxlcjAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcHJvbWlzZTAgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVjZWl2ZXIwID0gdW5kZWZpbmVkO1xuICAgIGlmIChleGVjdXRvciAhPT0gSU5URVJOQUwpIHtcbiAgICAgICAgY2hlY2sodGhpcywgZXhlY3V0b3IpO1xuICAgICAgICB0aGlzLl9yZXNvbHZlRnJvbUV4ZWN1dG9yKGV4ZWN1dG9yKTtcbiAgICB9XG4gICAgdGhpcy5fcHJvbWlzZUNyZWF0ZWQoKTtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlQ3JlYXRlZFwiLCB0aGlzKTtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBQcm9taXNlXVwiO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuY2F1Z2h0ID0gUHJvbWlzZS5wcm90b3R5cGVbXCJjYXRjaFwiXSA9IGZ1bmN0aW9uIChmbikge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChsZW4gPiAxKSB7XG4gICAgICAgIHZhciBjYXRjaEluc3RhbmNlcyA9IG5ldyBBcnJheShsZW4gLSAxKSxcbiAgICAgICAgICAgIGogPSAwLCBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMTsgKytpKSB7XG4gICAgICAgICAgICB2YXIgaXRlbSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGlmICh1dGlsLmlzT2JqZWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY2F0Y2hJbnN0YW5jZXNbaisrXSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJleHBlY3RpbmcgYW4gb2JqZWN0IGJ1dCBnb3QgXCIgK1xuICAgICAgICAgICAgICAgICAgICBcIkEgY2F0Y2ggc3RhdGVtZW50IHByZWRpY2F0ZSBcIiArIHV0aWwuY2xhc3NTdHJpbmcoaXRlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoSW5zdGFuY2VzLmxlbmd0aCA9IGo7XG4gICAgICAgIGZuID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgY2F0Y2hGaWx0ZXIoY2F0Y2hJbnN0YW5jZXMsIGZuLCB0aGlzKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBmbik7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5yZWZsZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl90aGVuKHJlZmxlY3RIYW5kbGVyLFxuICAgICAgICByZWZsZWN0SGFuZGxlciwgdW5kZWZpbmVkLCB0aGlzLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChkaWRGdWxmaWxsLCBkaWRSZWplY3QpIHtcbiAgICBpZiAoZGVidWcud2FybmluZ3MoKSAmJiBhcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgICB0eXBlb2YgZGlkRnVsZmlsbCAhPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgIHR5cGVvZiBkaWRSZWplY3QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB2YXIgbXNnID0gXCIudGhlbigpIG9ubHkgYWNjZXB0cyBmdW5jdGlvbnMgYnV0IHdhcyBwYXNzZWQ6IFwiICtcbiAgICAgICAgICAgICAgICB1dGlsLmNsYXNzU3RyaW5nKGRpZEZ1bGZpbGwpO1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIG1zZyArPSBcIiwgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGRpZFJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fd2Fybihtc2cpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdGhlbihkaWRGdWxmaWxsLCBkaWRSZWplY3QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uIChkaWRGdWxmaWxsLCBkaWRSZWplY3QpIHtcbiAgICB2YXIgcHJvbWlzZSA9XG4gICAgICAgIHRoaXMuX3RoZW4oZGlkRnVsZmlsbCwgZGlkUmVqZWN0LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICBwcm9taXNlLl9zZXRJc0ZpbmFsKCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5zcHJlYWQgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIGZ1bmN0aW9uIGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKGZuKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFsbCgpLl90aGVuKGZuLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgQVBQTFksIHVuZGVmaW5lZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHtcbiAgICAgICAgaXNGdWxmaWxsZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgZnVsZmlsbG1lbnRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICByZWplY3Rpb25SZWFzb246IHVuZGVmaW5lZFxuICAgIH07XG4gICAgaWYgKHRoaXMuaXNGdWxmaWxsZWQoKSkge1xuICAgICAgICByZXQuZnVsZmlsbG1lbnRWYWx1ZSA9IHRoaXMudmFsdWUoKTtcbiAgICAgICAgcmV0LmlzRnVsZmlsbGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNSZWplY3RlZCgpKSB7XG4gICAgICAgIHJldC5yZWplY3Rpb25SZWFzb24gPSB0aGlzLnJlYXNvbigpO1xuICAgICAgICByZXQuaXNSZWplY3RlZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5hbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX3dhcm4oXCIuYWxsKCkgd2FzIHBhc3NlZCBhcmd1bWVudHMgYnV0IGl0IGRvZXMgbm90IHRha2UgYW55XCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFByb21pc2VBcnJheSh0aGlzKS5wcm9taXNlKCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChmbikge1xuICAgIHJldHVybiB0aGlzLmNhdWdodCh1dGlsLm9yaWdpbmF0ZXNGcm9tUmVqZWN0aW9uLCBmbik7XG59O1xuXG5Qcm9taXNlLmdldE5ld0xpYnJhcnlDb3B5ID0gbW9kdWxlLmV4cG9ydHM7XG5cblByb21pc2UuaXMgPSBmdW5jdGlvbiAodmFsKSB7XG4gICAgcmV0dXJuIHZhbCBpbnN0YW5jZW9mIFByb21pc2U7XG59O1xuXG5Qcm9taXNlLmZyb21Ob2RlID0gUHJvbWlzZS5mcm9tQ2FsbGJhY2sgPSBmdW5jdGlvbihmbikge1xuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0Ll9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHZhciBtdWx0aUFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICEhT2JqZWN0KGFyZ3VtZW50c1sxXSkubXVsdGlBcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgdmFyIHJlc3VsdCA9IHRyeUNhdGNoKGZuKShub2RlYmFja0ZvclByb21pc2UocmV0LCBtdWx0aUFyZ3MpKTtcbiAgICBpZiAocmVzdWx0ID09PSBlcnJvck9iaikge1xuICAgICAgICByZXQuX3JlamVjdENhbGxiYWNrKHJlc3VsdC5lLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKCFyZXQuX2lzRmF0ZVNlYWxlZCgpKSByZXQuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLmFsbCA9IGZ1bmN0aW9uIChwcm9taXNlcykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZUFycmF5KHByb21pc2VzKS5wcm9taXNlKCk7XG59O1xuXG5Qcm9taXNlLmNhc3QgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIHJldCA9IHRyeUNvbnZlcnRUb1Byb21pc2Uob2JqKTtcbiAgICBpZiAoIShyZXQgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgICByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIHJldC5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICAgICAgcmV0Ll9zZXRGdWxmaWxsZWQoKTtcbiAgICAgICAgcmV0Ll9yZWplY3Rpb25IYW5kbGVyMCA9IG9iajtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblByb21pc2UucmVzb2x2ZSA9IFByb21pc2UuZnVsZmlsbGVkID0gUHJvbWlzZS5jYXN0O1xuXG5Qcm9taXNlLnJlamVjdCA9IFByb21pc2UucmVqZWN0ZWQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgcmV0Ll9yZWplY3RDYWxsYmFjayhyZWFzb24sIHRydWUpO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnNldFNjaGVkdWxlciA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMuc2V0U2NoZWR1bGVyKGZuKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl90aGVuID0gZnVuY3Rpb24gKFxuICAgIGRpZEZ1bGZpbGwsXG4gICAgZGlkUmVqZWN0LFxuICAgIF8sICAgIHJlY2VpdmVyLFxuICAgIGludGVybmFsRGF0YVxuKSB7XG4gICAgdmFyIGhhdmVJbnRlcm5hbERhdGEgPSBpbnRlcm5hbERhdGEgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgcHJvbWlzZSA9IGhhdmVJbnRlcm5hbERhdGEgPyBpbnRlcm5hbERhdGEgOiBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuX3RhcmdldCgpO1xuICAgIHZhciBiaXRGaWVsZCA9IHRhcmdldC5fYml0RmllbGQ7XG5cbiAgICBpZiAoIWhhdmVJbnRlcm5hbERhdGEpIHtcbiAgICAgICAgcHJvbWlzZS5fcHJvcGFnYXRlRnJvbSh0aGlzLCAzKTtcbiAgICAgICAgcHJvbWlzZS5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICAgICAgaWYgKHJlY2VpdmVyID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICgodGhpcy5fYml0RmllbGQgJiAyMDk3MTUyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgIGlmICghKChiaXRGaWVsZCAmIDUwMzk3MTg0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlciA9IHRoaXMuX2JvdW5kVmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZXIgPSB0YXJnZXQgPT09IHRoaXMgPyB1bmRlZmluZWQgOiB0aGlzLl9ib3VuZFRvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ZpcmVFdmVudChcInByb21pc2VDaGFpbmVkXCIsIHRoaXMsIHByb21pc2UpO1xuICAgIH1cblxuICAgIHZhciBkb21haW4gPSBnZXREb21haW4oKTtcbiAgICBpZiAoISgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgIHZhciBoYW5kbGVyLCB2YWx1ZSwgc2V0dGxlciA9IHRhcmdldC5fc2V0dGxlUHJvbWlzZUN0eDtcbiAgICAgICAgaWYgKCgoYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDApKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldC5fcmVqZWN0aW9uSGFuZGxlcjA7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkRnVsZmlsbDtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMTY3NzcyMTYpICE9PSAwKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0YXJnZXQuX2Z1bGZpbGxtZW50SGFuZGxlcjA7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkUmVqZWN0O1xuICAgICAgICAgICAgdGFyZ2V0Ll91bnNldFJlamVjdGlvbklzVW5oYW5kbGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXR0bGVyID0gdGFyZ2V0Ll9zZXR0bGVQcm9taXNlTGF0ZUNhbmNlbGxhdGlvbk9ic2VydmVyO1xuICAgICAgICAgICAgdmFsdWUgPSBuZXcgQ2FuY2VsbGF0aW9uRXJyb3IoXCJsYXRlIGNhbmNlbGxhdGlvbiBvYnNlcnZlclwiKTtcbiAgICAgICAgICAgIHRhcmdldC5fYXR0YWNoRXh0cmFUcmFjZSh2YWx1ZSk7XG4gICAgICAgICAgICBoYW5kbGVyID0gZGlkUmVqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgYXN5bmMuaW52b2tlKHNldHRsZXIsIHRhcmdldCwge1xuICAgICAgICAgICAgaGFuZGxlcjogZG9tYWluID09PSBudWxsID8gaGFuZGxlclxuICAgICAgICAgICAgICAgIDogKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgdXRpbC5kb21haW5CaW5kKGRvbWFpbiwgaGFuZGxlcikpLFxuICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlcixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXQuX2FkZENhbGxiYWNrcyhkaWRGdWxmaWxsLCBkaWRSZWplY3QsIHByb21pc2UsIHJlY2VpdmVyLCBkb21haW4pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX2xlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fYml0RmllbGQgJiA2NTUzNTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9pc0ZhdGVTZWFsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDExNzUwNjA0OCkgIT09IDA7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faXNGb2xsb3dpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDY3MTA4ODY0KSA9PT0gNjcxMDg4NjQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0TGVuZ3RoID0gZnVuY3Rpb24gKGxlbikge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gKHRoaXMuX2JpdEZpZWxkICYgLTY1NTM2KSB8XG4gICAgICAgIChsZW4gJiA2NTUzNSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0RnVsZmlsbGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAzMzU1NDQzMjtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlRnVsZmlsbGVkXCIsIHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldFJlamVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAxNjc3NzIxNjtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlUmVqZWN0ZWRcIiwgdGhpcyk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0Rm9sbG93aW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCA2NzEwODg2NDtcbiAgICB0aGlzLl9maXJlRXZlbnQoXCJwcm9taXNlUmVzb2x2ZWRcIiwgdGhpcyk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0SXNGaW5hbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkIHwgNDE5NDMwNDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9pc0ZpbmFsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiA0MTk0MzA0KSA+IDA7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fdW5zZXRDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9iaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkICYgKH42NTUzNik7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0Q2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCB8IDY1NTM2O1xuICAgIHRoaXMuX2ZpcmVFdmVudChcInByb21pc2VDYW5jZWxsZWRcIiwgdGhpcyk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0V2lsbEJlQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCB8IDgzODg2MDg7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0QXN5bmNHdWFyYW50ZWVkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGFzeW5jLmhhc0N1c3RvbVNjaGVkdWxlcigpKSByZXR1cm47XG4gICAgdGhpcy5fYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZCB8IDEzNDIxNzcyODtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZWNlaXZlckF0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgdmFyIHJldCA9IGluZGV4ID09PSAwID8gdGhpcy5fcmVjZWl2ZXIwIDogdGhpc1tcbiAgICAgICAgICAgIGluZGV4ICogNCAtIDQgKyAzXTtcbiAgICBpZiAocmV0ID09PSBVTkRFRklORURfQklORElORykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAocmV0ID09PSB1bmRlZmluZWQgJiYgdGhpcy5faXNCb3VuZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ib3VuZFZhbHVlKCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcHJvbWlzZUF0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXNbXG4gICAgICAgICAgICBpbmRleCAqIDQgLSA0ICsgMl07XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fZnVsZmlsbG1lbnRIYW5kbGVyQXQgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpc1tcbiAgICAgICAgICAgIGluZGV4ICogNCAtIDQgKyAwXTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZWplY3Rpb25IYW5kbGVyQXQgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICByZXR1cm4gdGhpc1tcbiAgICAgICAgICAgIGluZGV4ICogNCAtIDQgKyAxXTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9ib3VuZFZhbHVlID0gZnVuY3Rpb24oKSB7fTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX21pZ3JhdGVDYWxsYmFjazAgPSBmdW5jdGlvbiAoZm9sbG93ZXIpIHtcbiAgICB2YXIgYml0RmllbGQgPSBmb2xsb3dlci5fYml0RmllbGQ7XG4gICAgdmFyIGZ1bGZpbGwgPSBmb2xsb3dlci5fZnVsZmlsbG1lbnRIYW5kbGVyMDtcbiAgICB2YXIgcmVqZWN0ID0gZm9sbG93ZXIuX3JlamVjdGlvbkhhbmRsZXIwO1xuICAgIHZhciBwcm9taXNlID0gZm9sbG93ZXIuX3Byb21pc2UwO1xuICAgIHZhciByZWNlaXZlciA9IGZvbGxvd2VyLl9yZWNlaXZlckF0KDApO1xuICAgIGlmIChyZWNlaXZlciA9PT0gdW5kZWZpbmVkKSByZWNlaXZlciA9IFVOREVGSU5FRF9CSU5ESU5HO1xuICAgIHRoaXMuX2FkZENhbGxiYWNrcyhmdWxmaWxsLCByZWplY3QsIHByb21pc2UsIHJlY2VpdmVyLCBudWxsKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9taWdyYXRlQ2FsbGJhY2tBdCA9IGZ1bmN0aW9uIChmb2xsb3dlciwgaW5kZXgpIHtcbiAgICB2YXIgZnVsZmlsbCA9IGZvbGxvd2VyLl9mdWxmaWxsbWVudEhhbmRsZXJBdChpbmRleCk7XG4gICAgdmFyIHJlamVjdCA9IGZvbGxvd2VyLl9yZWplY3Rpb25IYW5kbGVyQXQoaW5kZXgpO1xuICAgIHZhciBwcm9taXNlID0gZm9sbG93ZXIuX3Byb21pc2VBdChpbmRleCk7XG4gICAgdmFyIHJlY2VpdmVyID0gZm9sbG93ZXIuX3JlY2VpdmVyQXQoaW5kZXgpO1xuICAgIGlmIChyZWNlaXZlciA9PT0gdW5kZWZpbmVkKSByZWNlaXZlciA9IFVOREVGSU5FRF9CSU5ESU5HO1xuICAgIHRoaXMuX2FkZENhbGxiYWNrcyhmdWxmaWxsLCByZWplY3QsIHByb21pc2UsIHJlY2VpdmVyLCBudWxsKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9hZGRDYWxsYmFja3MgPSBmdW5jdGlvbiAoXG4gICAgZnVsZmlsbCxcbiAgICByZWplY3QsXG4gICAgcHJvbWlzZSxcbiAgICByZWNlaXZlcixcbiAgICBkb21haW5cbikge1xuICAgIHZhciBpbmRleCA9IHRoaXMuX2xlbmd0aCgpO1xuXG4gICAgaWYgKGluZGV4ID49IDY1NTM1IC0gNCkge1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX3NldExlbmd0aCgwKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZTAgPSBwcm9taXNlO1xuICAgICAgICB0aGlzLl9yZWNlaXZlcjAgPSByZWNlaXZlcjtcbiAgICAgICAgaWYgKHR5cGVvZiBmdWxmaWxsID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjAgPVxuICAgICAgICAgICAgICAgIGRvbWFpbiA9PT0gbnVsbCA/IGZ1bGZpbGwgOiB1dGlsLmRvbWFpbkJpbmQoZG9tYWluLCBmdWxmaWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMCA9XG4gICAgICAgICAgICAgICAgZG9tYWluID09PSBudWxsID8gcmVqZWN0IDogdXRpbC5kb21haW5CaW5kKGRvbWFpbiwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiYXNlID0gaW5kZXggKiA0IC0gNDtcbiAgICAgICAgdGhpc1tiYXNlICsgMl0gPSBwcm9taXNlO1xuICAgICAgICB0aGlzW2Jhc2UgKyAzXSA9IHJlY2VpdmVyO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bGZpbGwgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpc1tiYXNlICsgMF0gPVxuICAgICAgICAgICAgICAgIGRvbWFpbiA9PT0gbnVsbCA/IGZ1bGZpbGwgOiB1dGlsLmRvbWFpbkJpbmQoZG9tYWluLCBmdWxmaWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aGlzW2Jhc2UgKyAxXSA9XG4gICAgICAgICAgICAgICAgZG9tYWluID09PSBudWxsID8gcmVqZWN0IDogdXRpbC5kb21haW5CaW5kKGRvbWFpbiwgcmVqZWN0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9zZXRMZW5ndGgoaW5kZXggKyAxKTtcbiAgICByZXR1cm4gaW5kZXg7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcHJveHkgPSBmdW5jdGlvbiAocHJveHlhYmxlLCBhcmcpIHtcbiAgICB0aGlzLl9hZGRDYWxsYmFja3ModW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyZywgcHJveHlhYmxlLCBudWxsKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZXNvbHZlQ2FsbGJhY2sgPSBmdW5jdGlvbih2YWx1ZSwgc2hvdWxkQmluZCkge1xuICAgIGlmICgoKHRoaXMuX2JpdEZpZWxkICYgMTE3NTA2MDQ4KSAhPT0gMCkpIHJldHVybjtcbiAgICBpZiAodmFsdWUgPT09IHRoaXMpXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWplY3RDYWxsYmFjayhtYWtlU2VsZlJlc29sdXRpb25FcnJvcigpLCBmYWxzZSk7XG4gICAgdmFyIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UodmFsdWUsIHRoaXMpO1xuICAgIGlmICghKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpKSByZXR1cm4gdGhpcy5fZnVsZmlsbCh2YWx1ZSk7XG5cbiAgICBpZiAoc2hvdWxkQmluZCkgdGhpcy5fcHJvcGFnYXRlRnJvbShtYXliZVByb21pc2UsIDIpO1xuXG4gICAgdmFyIHByb21pc2UgPSBtYXliZVByb21pc2UuX3RhcmdldCgpO1xuXG4gICAgaWYgKHByb21pc2UgPT09IHRoaXMpIHtcbiAgICAgICAgdGhpcy5fcmVqZWN0KG1ha2VTZWxmUmVzb2x1dGlvbkVycm9yKCkpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGJpdEZpZWxkID0gcHJvbWlzZS5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDApKSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLl9sZW5ndGgoKTtcbiAgICAgICAgaWYgKGxlbiA+IDApIHByb21pc2UuX21pZ3JhdGVDYWxsYmFjazAodGhpcyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIHByb21pc2UuX21pZ3JhdGVDYWxsYmFja0F0KHRoaXMsIGkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldEZvbGxvd2luZygpO1xuICAgICAgICB0aGlzLl9zZXRMZW5ndGgoMCk7XG4gICAgICAgIHRoaXMuX3NldEZvbGxvd2VlKHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgdGhpcy5fZnVsZmlsbChwcm9taXNlLl92YWx1ZSgpKTtcbiAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdChwcm9taXNlLl9yZWFzb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlYXNvbiA9IG5ldyBDYW5jZWxsYXRpb25FcnJvcihcImxhdGUgY2FuY2VsbGF0aW9uIG9ic2VydmVyXCIpO1xuICAgICAgICBwcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKHJlYXNvbik7XG4gICAgICAgIHRoaXMuX3JlamVjdChyZWFzb24pO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZWplY3RDYWxsYmFjayA9XG5mdW5jdGlvbihyZWFzb24sIHN5bmNocm9ub3VzLCBpZ25vcmVOb25FcnJvcldhcm5pbmdzKSB7XG4gICAgdmFyIHRyYWNlID0gdXRpbC5lbnN1cmVFcnJvck9iamVjdChyZWFzb24pO1xuICAgIHZhciBoYXNTdGFjayA9IHRyYWNlID09PSByZWFzb247XG4gICAgaWYgKCFoYXNTdGFjayAmJiAhaWdub3JlTm9uRXJyb3JXYXJuaW5ncyAmJiBkZWJ1Zy53YXJuaW5ncygpKSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gXCJhIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBub24tZXJyb3I6IFwiICtcbiAgICAgICAgICAgIHV0aWwuY2xhc3NTdHJpbmcocmVhc29uKTtcbiAgICAgICAgdGhpcy5fd2FybihtZXNzYWdlLCB0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fYXR0YWNoRXh0cmFUcmFjZSh0cmFjZSwgc3luY2hyb25vdXMgPyBoYXNTdGFjayA6IGZhbHNlKTtcbiAgICB0aGlzLl9yZWplY3QocmVhc29uKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZXNvbHZlRnJvbUV4ZWN1dG9yID0gZnVuY3Rpb24gKGV4ZWN1dG9yKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgIHRoaXMuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgdGhpcy5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgc3luY2hyb25vdXMgPSB0cnVlO1xuICAgIHZhciByID0gdGhpcy5fZXhlY3V0ZShleGVjdXRvciwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHZhbHVlKTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdENhbGxiYWNrKHJlYXNvbiwgc3luY2hyb25vdXMpO1xuICAgIH0pO1xuICAgIHN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgdGhpcy5fcG9wQ29udGV4dCgpO1xuXG4gICAgaWYgKHIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhyLCB0cnVlKTtcbiAgICB9XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlUHJvbWlzZUZyb21IYW5kbGVyID0gZnVuY3Rpb24gKFxuICAgIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSwgcHJvbWlzZVxuKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gcHJvbWlzZS5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiA2NTUzNikgIT09IDApKSByZXR1cm47XG4gICAgcHJvbWlzZS5fcHVzaENvbnRleHQoKTtcbiAgICB2YXIgeDtcbiAgICBpZiAocmVjZWl2ZXIgPT09IEFQUExZKSB7XG4gICAgICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgeCA9IGVycm9yT2JqO1xuICAgICAgICAgICAgeC5lID0gbmV3IFR5cGVFcnJvcihcImNhbm5vdCAuc3ByZWFkKCkgYSBub24tYXJyYXk6IFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuY2xhc3NTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHggPSB0cnlDYXRjaChoYW5kbGVyKS5hcHBseSh0aGlzLl9ib3VuZFZhbHVlKCksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHggPSB0cnlDYXRjaChoYW5kbGVyKS5jYWxsKHJlY2VpdmVyLCB2YWx1ZSk7XG4gICAgfVxuICAgIHZhciBwcm9taXNlQ3JlYXRlZCA9IHByb21pc2UuX3BvcENvbnRleHQoKTtcbiAgICBiaXRGaWVsZCA9IHByb21pc2UuX2JpdEZpZWxkO1xuICAgIGlmICgoKGJpdEZpZWxkICYgNjU1MzYpICE9PSAwKSkgcmV0dXJuO1xuXG4gICAgaWYgKHggPT09IE5FWFRfRklMVEVSKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdCh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmICh4ID09PSBlcnJvck9iaikge1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayh4LmUsIGZhbHNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1Zy5jaGVja0ZvcmdvdHRlblJldHVybnMoeCwgcHJvbWlzZUNyZWF0ZWQsIFwiXCIsICBwcm9taXNlLCB0aGlzKTtcbiAgICAgICAgcHJvbWlzZS5fcmVzb2x2ZUNhbGxiYWNrKHgpO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl90YXJnZXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmV0ID0gdGhpcztcbiAgICB3aGlsZSAocmV0Ll9pc0ZvbGxvd2luZygpKSByZXQgPSByZXQuX2ZvbGxvd2VlKCk7XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9mb2xsb3dlZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLl9zZXRGb2xsb3dlZSA9IGZ1bmN0aW9uKHByb21pc2UpIHtcbiAgICB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMCA9IHByb21pc2U7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2UsIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSkge1xuICAgIHZhciBpc1Byb21pc2UgPSBwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZTtcbiAgICB2YXIgYml0RmllbGQgPSB0aGlzLl9iaXRGaWVsZDtcbiAgICB2YXIgYXN5bmNHdWFyYW50ZWVkID0gKChiaXRGaWVsZCAmIDEzNDIxNzcyOCkgIT09IDApO1xuICAgIGlmICgoKGJpdEZpZWxkICYgNjU1MzYpICE9PSAwKSkge1xuICAgICAgICBpZiAoaXNQcm9taXNlKSBwcm9taXNlLl9pbnZva2VJbnRlcm5hbE9uQ2FuY2VsKCk7XG5cbiAgICAgICAgaWYgKHJlY2VpdmVyIGluc3RhbmNlb2YgUGFzc1Rocm91Z2hIYW5kbGVyQ29udGV4dCAmJlxuICAgICAgICAgICAgcmVjZWl2ZXIuaXNGaW5hbGx5SGFuZGxlcigpKSB7XG4gICAgICAgICAgICByZWNlaXZlci5jYW5jZWxQcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgIGlmICh0cnlDYXRjaChoYW5kbGVyKS5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgPT09IGVycm9yT2JqKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0KGVycm9yT2JqLmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPT09IHJlZmxlY3RIYW5kbGVyKSB7XG4gICAgICAgICAgICBwcm9taXNlLl9mdWxmaWxsKHJlZmxlY3RIYW5kbGVyLmNhbGwocmVjZWl2ZXIpKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZWNlaXZlciBpbnN0YW5jZW9mIFByb3h5YWJsZSkge1xuICAgICAgICAgICAgcmVjZWl2ZXIuX3Byb21pc2VDYW5jZWxsZWQocHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlIHx8IHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlQXJyYXkpIHtcbiAgICAgICAgICAgIHByb21pc2UuX2NhbmNlbCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVjZWl2ZXIuY2FuY2VsKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBoYW5kbGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgaWYgKCFpc1Byb21pc2UpIHtcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbChyZWNlaXZlciwgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGFzeW5jR3VhcmFudGVlZCkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgICAgICB0aGlzLl9zZXR0bGVQcm9taXNlRnJvbUhhbmRsZXIoaGFuZGxlciwgcmVjZWl2ZXIsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaW5zdGFuY2VvZiBQcm94eWFibGUpIHtcbiAgICAgICAgaWYgKCFyZWNlaXZlci5faXNSZXNvbHZlZCgpKSB7XG4gICAgICAgICAgICBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlci5fcHJvbWlzZUZ1bGZpbGxlZCh2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlY2VpdmVyLl9wcm9taXNlUmVqZWN0ZWQodmFsdWUsIHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1Byb21pc2UpIHtcbiAgICAgICAgaWYgKGFzeW5jR3VhcmFudGVlZCkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgcHJvbWlzZS5fZnVsZmlsbCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9taXNlLl9yZWplY3QodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2VMYXRlQ2FuY2VsbGF0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbihjdHgpIHtcbiAgICB2YXIgaGFuZGxlciA9IGN0eC5oYW5kbGVyO1xuICAgIHZhciBwcm9taXNlID0gY3R4LnByb21pc2U7XG4gICAgdmFyIHJlY2VpdmVyID0gY3R4LnJlY2VpdmVyO1xuICAgIHZhciB2YWx1ZSA9IGN0eC52YWx1ZTtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoIShwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIuY2FsbChyZWNlaXZlciwgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGxlUHJvbWlzZUZyb21IYW5kbGVyKGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHByb21pc2UuX3JlamVjdCh2YWx1ZSk7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2VDdHggPSBmdW5jdGlvbihjdHgpIHtcbiAgICB0aGlzLl9zZXR0bGVQcm9taXNlKGN0eC5wcm9taXNlLCBjdHguaGFuZGxlciwgY3R4LnJlY2VpdmVyLCBjdHgudmFsdWUpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2UwID0gZnVuY3Rpb24oaGFuZGxlciwgdmFsdWUsIGJpdEZpZWxkKSB7XG4gICAgdmFyIHByb21pc2UgPSB0aGlzLl9wcm9taXNlMDtcbiAgICB2YXIgcmVjZWl2ZXIgPSB0aGlzLl9yZWNlaXZlckF0KDApO1xuICAgIHRoaXMuX3Byb21pc2UwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JlY2VpdmVyMCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXR0bGVQcm9taXNlKHByb21pc2UsIGhhbmRsZXIsIHJlY2VpdmVyLCB2YWx1ZSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fY2xlYXJDYWxsYmFja0RhdGFBdEluZGV4ID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICB2YXIgYmFzZSA9IGluZGV4ICogNCAtIDQ7XG4gICAgdGhpc1tiYXNlICsgMl0gPVxuICAgIHRoaXNbYmFzZSArIDNdID1cbiAgICB0aGlzW2Jhc2UgKyAwXSA9XG4gICAgdGhpc1tiYXNlICsgMV0gPSB1bmRlZmluZWQ7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fZnVsZmlsbCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBiaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkO1xuICAgIGlmICgoKGJpdEZpZWxkICYgMTE3NTA2MDQ4KSA+Pj4gMTYpKSByZXR1cm47XG4gICAgaWYgKHZhbHVlID09PSB0aGlzKSB7XG4gICAgICAgIHZhciBlcnIgPSBtYWtlU2VsZlJlc29sdXRpb25FcnJvcigpO1xuICAgICAgICB0aGlzLl9hdHRhY2hFeHRyYVRyYWNlKGVycik7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWplY3QoZXJyKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RnVsZmlsbGVkKCk7XG4gICAgdGhpcy5fcmVqZWN0aW9uSGFuZGxlcjAgPSB2YWx1ZTtcblxuICAgIGlmICgoYml0RmllbGQgJiA2NTUzNSkgPiAwKSB7XG4gICAgICAgIGlmICgoKGJpdEZpZWxkICYgMTM0MjE3NzI4KSAhPT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRsZVByb21pc2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXR0bGVQcm9taXNlcyh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gdGhpcy5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiAxMTc1MDYwNDgpID4+PiAxNikpIHJldHVybjtcbiAgICB0aGlzLl9zZXRSZWplY3RlZCgpO1xuICAgIHRoaXMuX2Z1bGZpbGxtZW50SGFuZGxlcjAgPSByZWFzb247XG5cbiAgICBpZiAodGhpcy5faXNGaW5hbCgpKSB7XG4gICAgICAgIHJldHVybiBhc3luYy5mYXRhbEVycm9yKHJlYXNvbiwgdXRpbC5pc05vZGUpO1xuICAgIH1cblxuICAgIGlmICgoYml0RmllbGQgJiA2NTUzNSkgPiAwKSB7XG4gICAgICAgIGFzeW5jLnNldHRsZVByb21pc2VzKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZVBvc3NpYmxlUmVqZWN0aW9uSGFuZGxlZCgpO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl9mdWxmaWxsUHJvbWlzZXMgPSBmdW5jdGlvbiAobGVuLCB2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9mdWxmaWxsbWVudEhhbmRsZXJBdChpKTtcbiAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLl9wcm9taXNlQXQoaSk7XG4gICAgICAgIHZhciByZWNlaXZlciA9IHRoaXMuX3JlY2VpdmVyQXQoaSk7XG4gICAgICAgIHRoaXMuX2NsZWFyQ2FsbGJhY2tEYXRhQXRJbmRleChpKTtcbiAgICAgICAgdGhpcy5fc2V0dGxlUHJvbWlzZShwcm9taXNlLCBoYW5kbGVyLCByZWNlaXZlciwgdmFsdWUpO1xuICAgIH1cbn07XG5cblByb21pc2UucHJvdG90eXBlLl9yZWplY3RQcm9taXNlcyA9IGZ1bmN0aW9uIChsZW4sIHJlYXNvbikge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSB0aGlzLl9yZWplY3Rpb25IYW5kbGVyQXQoaSk7XG4gICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5fcHJvbWlzZUF0KGkpO1xuICAgICAgICB2YXIgcmVjZWl2ZXIgPSB0aGlzLl9yZWNlaXZlckF0KGkpO1xuICAgICAgICB0aGlzLl9jbGVhckNhbGxiYWNrRGF0YUF0SW5kZXgoaSk7XG4gICAgICAgIHRoaXMuX3NldHRsZVByb21pc2UocHJvbWlzZSwgaGFuZGxlciwgcmVjZWl2ZXIsIHJlYXNvbik7XG4gICAgfVxufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuX3NldHRsZVByb21pc2VzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBiaXRGaWVsZCA9IHRoaXMuX2JpdEZpZWxkO1xuICAgIHZhciBsZW4gPSAoYml0RmllbGQgJiA2NTUzNSk7XG5cbiAgICBpZiAobGVuID4gMCkge1xuICAgICAgICBpZiAoKChiaXRGaWVsZCAmIDE2ODQyNzUyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgIHZhciByZWFzb24gPSB0aGlzLl9mdWxmaWxsbWVudEhhbmRsZXIwO1xuICAgICAgICAgICAgdGhpcy5fc2V0dGxlUHJvbWlzZTAodGhpcy5fcmVqZWN0aW9uSGFuZGxlcjAsIHJlYXNvbiwgYml0RmllbGQpO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0UHJvbWlzZXMobGVuLCByZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fcmVqZWN0aW9uSGFuZGxlcjA7XG4gICAgICAgICAgICB0aGlzLl9zZXR0bGVQcm9taXNlMCh0aGlzLl9mdWxmaWxsbWVudEhhbmRsZXIwLCB2YWx1ZSwgYml0RmllbGQpO1xuICAgICAgICAgICAgdGhpcy5fZnVsZmlsbFByb21pc2VzKGxlbiwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldExlbmd0aCgwKTtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJDYW5jZWxsYXRpb25EYXRhKCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fc2V0dGxlZFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGJpdEZpZWxkID0gdGhpcy5fYml0RmllbGQ7XG4gICAgaWYgKCgoYml0RmllbGQgJiAzMzU1NDQzMikgIT09IDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWplY3Rpb25IYW5kbGVyMDtcbiAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mdWxmaWxsbWVudEhhbmRsZXIwO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGRlZmVyUmVzb2x2ZSh2KSB7dGhpcy5wcm9taXNlLl9yZXNvbHZlQ2FsbGJhY2sodik7fVxuZnVuY3Rpb24gZGVmZXJSZWplY3Qodikge3RoaXMucHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2sodiwgZmFsc2UpO31cblxuUHJvbWlzZS5kZWZlciA9IFByb21pc2UucGVuZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIGRlYnVnLmRlcHJlY2F0ZWQoXCJQcm9taXNlLmRlZmVyXCIsIFwibmV3IFByb21pc2VcIik7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgcmVzb2x2ZTogZGVmZXJSZXNvbHZlLFxuICAgICAgICByZWplY3Q6IGRlZmVyUmVqZWN0XG4gICAgfTtcbn07XG5cbnV0aWwubm90RW51bWVyYWJsZVByb3AoUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgXCJfbWFrZVNlbGZSZXNvbHV0aW9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgbWFrZVNlbGZSZXNvbHV0aW9uRXJyb3IpO1xuXG5yZXF1aXJlKFwiLi9tZXRob2RcIikoUHJvbWlzZSwgSU5URVJOQUwsIHRyeUNvbnZlcnRUb1Byb21pc2UsIGFwaVJlamVjdGlvbixcbiAgICBkZWJ1Zyk7XG5yZXF1aXJlKFwiLi9iaW5kXCIpKFByb21pc2UsIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBkZWJ1Zyk7XG5yZXF1aXJlKFwiLi9jYW5jZWxcIikoUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBhcGlSZWplY3Rpb24sIGRlYnVnKTtcbnJlcXVpcmUoXCIuL2RpcmVjdF9yZXNvbHZlXCIpKFByb21pc2UpO1xucmVxdWlyZShcIi4vc3luY2hyb25vdXNfaW5zcGVjdGlvblwiKShQcm9taXNlKTtcbnJlcXVpcmUoXCIuL2pvaW5cIikoXG4gICAgUHJvbWlzZSwgUHJvbWlzZUFycmF5LCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBJTlRFUk5BTCwgYXN5bmMsIGdldERvbWFpbik7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuUHJvbWlzZS52ZXJzaW9uID0gXCIzLjQuN1wiO1xucmVxdWlyZSgnLi9tYXAuanMnKShQcm9taXNlLCBQcm9taXNlQXJyYXksIGFwaVJlamVjdGlvbiwgdHJ5Q29udmVydFRvUHJvbWlzZSwgSU5URVJOQUwsIGRlYnVnKTtcbnJlcXVpcmUoJy4vY2FsbF9nZXQuanMnKShQcm9taXNlKTtcbnJlcXVpcmUoJy4vdXNpbmcuanMnKShQcm9taXNlLCBhcGlSZWplY3Rpb24sIHRyeUNvbnZlcnRUb1Byb21pc2UsIGNyZWF0ZUNvbnRleHQsIElOVEVSTkFMLCBkZWJ1Zyk7XG5yZXF1aXJlKCcuL3RpbWVycy5qcycpKFByb21pc2UsIElOVEVSTkFMLCBkZWJ1Zyk7XG5yZXF1aXJlKCcuL2dlbmVyYXRvcnMuanMnKShQcm9taXNlLCBhcGlSZWplY3Rpb24sIElOVEVSTkFMLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBQcm94eWFibGUsIGRlYnVnKTtcbnJlcXVpcmUoJy4vbm9kZWlmeS5qcycpKFByb21pc2UpO1xucmVxdWlyZSgnLi9wcm9taXNpZnkuanMnKShQcm9taXNlLCBJTlRFUk5BTCk7XG5yZXF1aXJlKCcuL3Byb3BzLmpzJykoUHJvbWlzZSwgUHJvbWlzZUFycmF5LCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBhcGlSZWplY3Rpb24pO1xucmVxdWlyZSgnLi9yYWNlLmpzJykoUHJvbWlzZSwgSU5URVJOQUwsIHRyeUNvbnZlcnRUb1Byb21pc2UsIGFwaVJlamVjdGlvbik7XG5yZXF1aXJlKCcuL3JlZHVjZS5qcycpKFByb21pc2UsIFByb21pc2VBcnJheSwgYXBpUmVqZWN0aW9uLCB0cnlDb252ZXJ0VG9Qcm9taXNlLCBJTlRFUk5BTCwgZGVidWcpO1xucmVxdWlyZSgnLi9zZXR0bGUuanMnKShQcm9taXNlLCBQcm9taXNlQXJyYXksIGRlYnVnKTtcbnJlcXVpcmUoJy4vc29tZS5qcycpKFByb21pc2UsIFByb21pc2VBcnJheSwgYXBpUmVqZWN0aW9uKTtcbnJlcXVpcmUoJy4vZmlsdGVyLmpzJykoUHJvbWlzZSwgSU5URVJOQUwpO1xucmVxdWlyZSgnLi9lYWNoLmpzJykoUHJvbWlzZSwgSU5URVJOQUwpO1xucmVxdWlyZSgnLi9hbnkuanMnKShQcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIHV0aWwudG9GYXN0UHJvcGVydGllcyhQcm9taXNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB1dGlsLnRvRmFzdFByb3BlcnRpZXMoUHJvbWlzZS5wcm90b3R5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZnVuY3Rpb24gZmlsbFR5cGVzKHZhbHVlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICB2YXIgcCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgcC5fZnVsZmlsbG1lbnRIYW5kbGVyMCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHAuX3JlamVjdGlvbkhhbmRsZXIwID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICBwLl9wcm9taXNlMCA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgcC5fcmVjZWl2ZXIwID0gdmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIC8vIENvbXBsZXRlIHNsYWNrIHRyYWNraW5nLCBvcHQgb3V0IG9mIGZpZWxkLXR5cGUgdHJhY2tpbmcgYW5kICAgICAgICAgICBcbiAgICAvLyBzdGFiaWxpemUgbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKHthOiAxfSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGZpbGxUeXBlcyh7YjogMn0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmaWxsVHlwZXMoe2M6IDN9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGZpbGxUeXBlcyhmdW5jdGlvbigpe30pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBmaWxsVHlwZXModW5kZWZpbmVkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgZmlsbFR5cGVzKGZhbHNlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGZpbGxUeXBlcyhuZXcgUHJvbWlzZShJTlRFUk5BTCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICBkZWJ1Zy5zZXRCb3VuZHMoQXN5bmMuZmlyc3RMaW5lRXJyb3IsIHV0aWwubGFzdExpbmVFcnJvcik7ICAgICAgICAgICAgICAgXG4gICAgcmV0dXJuIFByb21pc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG59O1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSlcbn0se1wiLi9hbnkuanNcIjo0OCxcIi4vYXN5bmNcIjo0OSxcIi4vYmluZFwiOjUwLFwiLi9jYWxsX2dldC5qc1wiOjUxLFwiLi9jYW5jZWxcIjo1MixcIi4vY2F0Y2hfZmlsdGVyXCI6NTMsXCIuL2NvbnRleHRcIjo1NCxcIi4vZGVidWdnYWJpbGl0eVwiOjU1LFwiLi9kaXJlY3RfcmVzb2x2ZVwiOjU2LFwiLi9lYWNoLmpzXCI6NTcsXCIuL2Vycm9yc1wiOjU4LFwiLi9lczVcIjo1OSxcIi4vZmlsdGVyLmpzXCI6NjAsXCIuL2ZpbmFsbHlcIjo2MSxcIi4vZ2VuZXJhdG9ycy5qc1wiOjYyLFwiLi9qb2luXCI6NjMsXCIuL21hcC5qc1wiOjY0LFwiLi9tZXRob2RcIjo2NSxcIi4vbm9kZWJhY2tcIjo2NixcIi4vbm9kZWlmeS5qc1wiOjY3LFwiLi9wcm9taXNlX2FycmF5XCI6NjksXCIuL3Byb21pc2lmeS5qc1wiOjcwLFwiLi9wcm9wcy5qc1wiOjcxLFwiLi9yYWNlLmpzXCI6NzMsXCIuL3JlZHVjZS5qc1wiOjc0LFwiLi9zZXR0bGUuanNcIjo3NixcIi4vc29tZS5qc1wiOjc3LFwiLi9zeW5jaHJvbm91c19pbnNwZWN0aW9uXCI6NzgsXCIuL3RoZW5hYmxlc1wiOjc5LFwiLi90aW1lcnMuanNcIjo4MCxcIi4vdXNpbmcuanNcIjo4MSxcIi4vdXRpbFwiOjgyLFwiX3Byb2Nlc3NcIjoxMDF9XSw2OTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSwgSU5URVJOQUwsIHRyeUNvbnZlcnRUb1Byb21pc2UsXG4gICAgYXBpUmVqZWN0aW9uLCBQcm94eWFibGUpIHtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbnZhciBpc0FycmF5ID0gdXRpbC5pc0FycmF5O1xuXG5mdW5jdGlvbiB0b1Jlc29sdXRpb25WYWx1ZSh2YWwpIHtcbiAgICBzd2l0Y2godmFsKSB7XG4gICAgY2FzZSAtMjogcmV0dXJuIFtdO1xuICAgIGNhc2UgLTM6IHJldHVybiB7fTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIFByb21pc2VBcnJheSh2YWx1ZXMpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgaWYgKHZhbHVlcyBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcHJvbWlzZS5fcHJvcGFnYXRlRnJvbSh2YWx1ZXMsIDMpO1xuICAgIH1cbiAgICBwcm9taXNlLl9zZXRPbkNhbmNlbCh0aGlzKTtcbiAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICB0aGlzLl90b3RhbFJlc29sdmVkID0gMDtcbiAgICB0aGlzLl9pbml0KHVuZGVmaW5lZCwgLTIpO1xufVxudXRpbC5pbmhlcml0cyhQcm9taXNlQXJyYXksIFByb3h5YWJsZSk7XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLnByb21pc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gaW5pdChfLCByZXNvbHZlVmFsdWVJZkVtcHR5KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRyeUNvbnZlcnRUb1Byb21pc2UodGhpcy5fdmFsdWVzLCB0aGlzLl9wcm9taXNlKTtcbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB2YWx1ZXMgPSB2YWx1ZXMuX3RhcmdldCgpO1xuICAgICAgICB2YXIgYml0RmllbGQgPSB2YWx1ZXMuX2JpdEZpZWxkO1xuICAgICAgICA7XG4gICAgICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcztcblxuICAgICAgICBpZiAoKChiaXRGaWVsZCAmIDUwMzk3MTg0KSA9PT0gMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb21pc2UuX3NldEFzeW5jR3VhcmFudGVlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcy5fdGhlbihcbiAgICAgICAgICAgICAgICBpbml0LFxuICAgICAgICAgICAgICAgIHRoaXMuX3JlamVjdCxcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICByZXNvbHZlVmFsdWVJZkVtcHR5XG4gICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoKChiaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMCkpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHZhbHVlcy5fdmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMTY3NzcyMTYpICE9PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlamVjdCh2YWx1ZXMuX3JlYXNvbigpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YWx1ZXMgPSB1dGlsLmFzQXJyYXkodmFsdWVzKTtcbiAgICBpZiAodmFsdWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBlcnIgPSBhcGlSZWplY3Rpb24oXG4gICAgICAgICAgICBcImV4cGVjdGluZyBhbiBhcnJheSBvciBhbiBpdGVyYWJsZSBvYmplY3QgYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcodmFsdWVzKSkucmVhc29uKCk7XG4gICAgICAgIHRoaXMuX3Byb21pc2UuX3JlamVjdENhbGxiYWNrKGVyciwgZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKHJlc29sdmVWYWx1ZUlmRW1wdHkgPT09IC01KSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlRW1wdHlBcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSh0b1Jlc29sdXRpb25WYWx1ZShyZXNvbHZlVmFsdWVJZkVtcHR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pdGVyYXRlKHZhbHVlcyk7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9pdGVyYXRlID0gZnVuY3Rpb24odmFsdWVzKSB7XG4gICAgdmFyIGxlbiA9IHRoaXMuZ2V0QWN0dWFsTGVuZ3RoKHZhbHVlcy5sZW5ndGgpO1xuICAgIHRoaXMuX2xlbmd0aCA9IGxlbjtcbiAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLnNob3VsZENvcHlWYWx1ZXMoKSA/IG5ldyBBcnJheShsZW4pIDogdGhpcy5fdmFsdWVzO1xuICAgIHZhciByZXN1bHQgPSB0aGlzLl9wcm9taXNlO1xuICAgIHZhciBpc1Jlc29sdmVkID0gZmFsc2U7XG4gICAgdmFyIGJpdEZpZWxkID0gbnVsbDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIHZhciBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHZhbHVlc1tpXSwgcmVzdWx0KTtcblxuICAgICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgbWF5YmVQcm9taXNlID0gbWF5YmVQcm9taXNlLl90YXJnZXQoKTtcbiAgICAgICAgICAgIGJpdEZpZWxkID0gbWF5YmVQcm9taXNlLl9iaXRGaWVsZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJpdEZpZWxkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICBpZiAoYml0RmllbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBtYXliZVByb21pc2Uuc3VwcHJlc3NVbmhhbmRsZWRSZWplY3Rpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYml0RmllbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICgoKGJpdEZpZWxkICYgNTAzOTcxODQpID09PSAwKSkge1xuICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZS5fcHJveHkodGhpcywgaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbWF5YmVQcm9taXNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoKGJpdEZpZWxkICYgMzM1NTQ0MzIpICE9PSAwKSkge1xuICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSB0aGlzLl9wcm9taXNlRnVsZmlsbGVkKG1heWJlUHJvbWlzZS5fdmFsdWUoKSwgaSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgoYml0RmllbGQgJiAxNjc3NzIxNikgIT09IDApKSB7XG4gICAgICAgICAgICAgICAgaXNSZXNvbHZlZCA9IHRoaXMuX3Byb21pc2VSZWplY3RlZChtYXliZVByb21pc2UuX3JlYXNvbigpLCBpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXNSZXNvbHZlZCA9IHRoaXMuX3Byb21pc2VDYW5jZWxsZWQoaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpc1Jlc29sdmVkID0gdGhpcy5fcHJvbWlzZUZ1bGZpbGxlZChtYXliZVByb21pc2UsIGkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghaXNSZXNvbHZlZCkgcmVzdWx0Ll9zZXRBc3luY0d1YXJhbnRlZWQoKTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX2lzUmVzb2x2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcyA9PT0gbnVsbDtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Jlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgIHRoaXMuX3Byb21pc2UuX2Z1bGZpbGwodmFsdWUpO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2lzUmVzb2x2ZWQoKSB8fCAhdGhpcy5fcHJvbWlzZS5faXNDYW5jZWxsYWJsZSgpKSByZXR1cm47XG4gICAgdGhpcy5fdmFsdWVzID0gbnVsbDtcbiAgICB0aGlzLl9wcm9taXNlLl9jYW5jZWwoKTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX3JlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgIHRoaXMuX3Byb21pc2UuX3JlamVjdENhbGxiYWNrKHJlYXNvbiwgZmFsc2UpO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZUZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICB0aGlzLl92YWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgdmFyIHRvdGFsUmVzb2x2ZWQgPSArK3RoaXMuX3RvdGFsUmVzb2x2ZWQ7XG4gICAgaWYgKHRvdGFsUmVzb2x2ZWQgPj0gdGhpcy5fbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VSZWplY3RlZCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICB0aGlzLl90b3RhbFJlc29sdmVkKys7XG4gICAgdGhpcy5fcmVqZWN0KHJlYXNvbik7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZXN1bHRDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5faXNSZXNvbHZlZCgpKSByZXR1cm47XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcztcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICBpZiAodmFsdWVzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB2YWx1ZXMuY2FuY2VsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZXNbaV0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2ldLmNhbmNlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5zaG91bGRDb3B5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuUHJvbWlzZUFycmF5LnByb3RvdHlwZS5nZXRBY3R1YWxMZW5ndGggPSBmdW5jdGlvbiAobGVuKSB7XG4gICAgcmV0dXJuIGxlbjtcbn07XG5cbnJldHVybiBQcm9taXNlQXJyYXk7XG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sNzA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMKSB7XG52YXIgVEhJUyA9IHt9O1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIG5vZGViYWNrRm9yUHJvbWlzZSA9IHJlcXVpcmUoXCIuL25vZGViYWNrXCIpO1xudmFyIHdpdGhBcHBlbmRlZCA9IHV0aWwud2l0aEFwcGVuZGVkO1xudmFyIG1heWJlV3JhcEFzRXJyb3IgPSB1dGlsLm1heWJlV3JhcEFzRXJyb3I7XG52YXIgY2FuRXZhbHVhdGUgPSB1dGlsLmNhbkV2YWx1YXRlO1xudmFyIFR5cGVFcnJvciA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKS5UeXBlRXJyb3I7XG52YXIgZGVmYXVsdFN1ZmZpeCA9IFwiQXN5bmNcIjtcbnZhciBkZWZhdWx0UHJvbWlzaWZpZWQgPSB7X19pc1Byb21pc2lmaWVkX186IHRydWV9O1xudmFyIG5vQ29weVByb3BzID0gW1xuICAgIFwiYXJpdHlcIiwgICAgXCJsZW5ndGhcIixcbiAgICBcIm5hbWVcIixcbiAgICBcImFyZ3VtZW50c1wiLFxuICAgIFwiY2FsbGVyXCIsXG4gICAgXCJjYWxsZWVcIixcbiAgICBcInByb3RvdHlwZVwiLFxuICAgIFwiX19pc1Byb21pc2lmaWVkX19cIlxuXTtcbnZhciBub0NvcHlQcm9wc1BhdHRlcm4gPSBuZXcgUmVnRXhwKFwiXig/OlwiICsgbm9Db3B5UHJvcHMuam9pbihcInxcIikgKyBcIikkXCIpO1xuXG52YXIgZGVmYXVsdEZpbHRlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdXRpbC5pc0lkZW50aWZpZXIobmFtZSkgJiZcbiAgICAgICAgbmFtZS5jaGFyQXQoMCkgIT09IFwiX1wiICYmXG4gICAgICAgIG5hbWUgIT09IFwiY29uc3RydWN0b3JcIjtcbn07XG5cbmZ1bmN0aW9uIHByb3BzRmlsdGVyKGtleSkge1xuICAgIHJldHVybiAhbm9Db3B5UHJvcHNQYXR0ZXJuLnRlc3Qoa2V5KTtcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNpZmllZChmbikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbi5fX2lzUHJvbWlzaWZpZWRfXyA9PT0gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzUHJvbWlzaWZpZWQob2JqLCBrZXksIHN1ZmZpeCkge1xuICAgIHZhciB2YWwgPSB1dGlsLmdldERhdGFQcm9wZXJ0eU9yRGVmYXVsdChvYmosIGtleSArIHN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFByb21pc2lmaWVkKTtcbiAgICByZXR1cm4gdmFsID8gaXNQcm9taXNpZmllZCh2YWwpIDogZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja1ZhbGlkKHJldCwgc3VmZml4LCBzdWZmaXhSZWdleHApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJldC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIga2V5ID0gcmV0W2ldO1xuICAgICAgICBpZiAoc3VmZml4UmVnZXhwLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgdmFyIGtleVdpdGhvdXRBc3luY1N1ZmZpeCA9IGtleS5yZXBsYWNlKHN1ZmZpeFJlZ2V4cCwgXCJcIik7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJldC5sZW5ndGg7IGogKz0gMikge1xuICAgICAgICAgICAgICAgIGlmIChyZXRbal0gPT09IGtleVdpdGhvdXRBc3luY1N1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHByb21pc2lmeSBhbiBBUEkgdGhhdCBoYXMgbm9ybWFsIG1ldGhvZHMgd2l0aCAnJXMnLXN1ZmZpeFxcdTAwMGFcXHUwMDBhICAgIFNlZSBodHRwOi8vZ29vLmdsL01xckZtWFxcdTAwMGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoXCIlc1wiLCBzdWZmaXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHByb21pc2lmaWFibGVNZXRob2RzKG9iaiwgc3VmZml4LCBzdWZmaXhSZWdleHAsIGZpbHRlcikge1xuICAgIHZhciBrZXlzID0gdXRpbC5pbmhlcml0ZWREYXRhS2V5cyhvYmopO1xuICAgIHZhciByZXQgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICB2YXIgcGFzc2VzRGVmYXVsdEZpbHRlciA9IGZpbHRlciA9PT0gZGVmYXVsdEZpbHRlclxuICAgICAgICAgICAgPyB0cnVlIDogZGVmYXVsdEZpbHRlcihrZXksIHZhbHVlLCBvYmopO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgICFpc1Byb21pc2lmaWVkKHZhbHVlKSAmJlxuICAgICAgICAgICAgIWhhc1Byb21pc2lmaWVkKG9iaiwga2V5LCBzdWZmaXgpICYmXG4gICAgICAgICAgICBmaWx0ZXIoa2V5LCB2YWx1ZSwgb2JqLCBwYXNzZXNEZWZhdWx0RmlsdGVyKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tWYWxpZChyZXQsIHN1ZmZpeCwgc3VmZml4UmVnZXhwKTtcbiAgICByZXR1cm4gcmV0O1xufVxuXG52YXIgZXNjYXBlSWRlbnRSZWdleCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFskXSkvLCBcIlxcXFwkXCIpO1xufTtcblxudmFyIG1ha2VOb2RlUHJvbWlzaWZpZWRFdmFsO1xuaWYgKCFmYWxzZSkge1xudmFyIHN3aXRjaENhc2VBcmd1bWVudE9yZGVyID0gZnVuY3Rpb24obGlrZWx5QXJndW1lbnRDb3VudCkge1xuICAgIHZhciByZXQgPSBbbGlrZWx5QXJndW1lbnRDb3VudF07XG4gICAgdmFyIG1pbiA9IE1hdGgubWF4KDAsIGxpa2VseUFyZ3VtZW50Q291bnQgLSAxIC0gMyk7XG4gICAgZm9yKHZhciBpID0gbGlrZWx5QXJndW1lbnRDb3VudCAtIDE7IGkgPj0gbWluOyAtLWkpIHtcbiAgICAgICAgcmV0LnB1c2goaSk7XG4gICAgfVxuICAgIGZvcih2YXIgaSA9IGxpa2VseUFyZ3VtZW50Q291bnQgKyAxOyBpIDw9IDM7ICsraSkge1xuICAgICAgICByZXQucHVzaChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbnZhciBhcmd1bWVudFNlcXVlbmNlID0gZnVuY3Rpb24oYXJndW1lbnRDb3VudCkge1xuICAgIHJldHVybiB1dGlsLmZpbGxlZFJhbmdlKGFyZ3VtZW50Q291bnQsIFwiX2FyZ1wiLCBcIlwiKTtcbn07XG5cbnZhciBwYXJhbWV0ZXJEZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHBhcmFtZXRlckNvdW50KSB7XG4gICAgcmV0dXJuIHV0aWwuZmlsbGVkUmFuZ2UoXG4gICAgICAgIE1hdGgubWF4KHBhcmFtZXRlckNvdW50LCAzKSwgXCJfYXJnXCIsIFwiXCIpO1xufTtcblxudmFyIHBhcmFtZXRlckNvdW50ID0gZnVuY3Rpb24oZm4pIHtcbiAgICBpZiAodHlwZW9mIGZuLmxlbmd0aCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4oZm4ubGVuZ3RoLCAxMDIzICsgMSksIDApO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbn07XG5cbm1ha2VOb2RlUHJvbWlzaWZpZWRFdmFsID1cbmZ1bmN0aW9uKGNhbGxiYWNrLCByZWNlaXZlciwgb3JpZ2luYWxOYW1lLCBmbiwgXywgbXVsdGlBcmdzKSB7XG4gICAgdmFyIG5ld1BhcmFtZXRlckNvdW50ID0gTWF0aC5tYXgoMCwgcGFyYW1ldGVyQ291bnQoZm4pIC0gMSk7XG4gICAgdmFyIGFyZ3VtZW50T3JkZXIgPSBzd2l0Y2hDYXNlQXJndW1lbnRPcmRlcihuZXdQYXJhbWV0ZXJDb3VudCk7XG4gICAgdmFyIHNob3VsZFByb3h5VGhpcyA9IHR5cGVvZiBjYWxsYmFjayA9PT0gXCJzdHJpbmdcIiB8fCByZWNlaXZlciA9PT0gVEhJUztcblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlQ2FsbEZvckFyZ3VtZW50Q291bnQoY291bnQpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudFNlcXVlbmNlKGNvdW50KS5qb2luKFwiLCBcIik7XG4gICAgICAgIHZhciBjb21tYSA9IGNvdW50ID4gMCA/IFwiLCBcIiA6IFwiXCI7XG4gICAgICAgIHZhciByZXQ7XG4gICAgICAgIGlmIChzaG91bGRQcm94eVRoaXMpIHtcbiAgICAgICAgICAgIHJldCA9IFwicmV0ID0gY2FsbGJhY2suY2FsbCh0aGlzLCB7e2FyZ3N9fSwgbm9kZWJhY2spOyBicmVhaztcXG5cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldCA9IHJlY2VpdmVyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IFwicmV0ID0gY2FsbGJhY2soe3thcmdzfX0sIG5vZGViYWNrKTsgYnJlYWs7XFxuXCJcbiAgICAgICAgICAgICAgICA6IFwicmV0ID0gY2FsbGJhY2suY2FsbChyZWNlaXZlciwge3thcmdzfX0sIG5vZGViYWNrKTsgYnJlYWs7XFxuXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldC5yZXBsYWNlKFwie3thcmdzfX1cIiwgYXJncykucmVwbGFjZShcIiwgXCIsIGNvbW1hKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZUFyZ3VtZW50U3dpdGNoQ2FzZSgpIHtcbiAgICAgICAgdmFyIHJldCA9IFwiXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRPcmRlci5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgcmV0ICs9IFwiY2FzZSBcIiArIGFyZ3VtZW50T3JkZXJbaV0gK1wiOlwiICtcbiAgICAgICAgICAgICAgICBnZW5lcmF0ZUNhbGxGb3JBcmd1bWVudENvdW50KGFyZ3VtZW50T3JkZXJbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ICs9IFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB2YXIgaSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBhcmdzW2ldID0gbm9kZWJhY2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBbQ29kZUZvckNhbGxdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcblxcXG4gICAgICAgIFwiLnJlcGxhY2UoXCJbQ29kZUZvckNhbGxdXCIsIChzaG91bGRQcm94eVRoaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInJldCA9IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpO1xcblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJyZXQgPSBjYWxsYmFjay5hcHBseShyZWNlaXZlciwgYXJncyk7XFxuXCIpKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICB2YXIgZ2V0RnVuY3Rpb25Db2RlID0gdHlwZW9mIGNhbGxiYWNrID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKFwidGhpcyAhPSBudWxsID8gdGhpc1snXCIrY2FsbGJhY2srXCInXSA6IGZuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJmblwiO1xuICAgIHZhciBib2R5ID0gXCIndXNlIHN0cmljdCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgdmFyIHJldCA9IGZ1bmN0aW9uIChQYXJhbWV0ZXJzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgICd1c2Ugc3RyaWN0JzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoSU5URVJOQUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHByb21pc2UuX2NhcHR1cmVTdGFja1RyYWNlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuXFxcbiAgICAgICAgICAgIHZhciBub2RlYmFjayA9IG5vZGViYWNrRm9yUHJvbWlzZShwcm9taXNlLCBcIiArIG11bHRpQXJncyArIFwiKTsgICBcXG5cXFxuICAgICAgICAgICAgdmFyIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdHJ5Q2F0Y2goW0dldEZ1bmN0aW9uQ29kZV0pOyAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgc3dpdGNoKGxlbikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIFtDb2RlRm9yU3dpdGNoQ2FzZV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgaWYgKHJldCA9PT0gZXJyb3JPYmopIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgICAgIHByb21pc2UuX3JlamVjdENhbGxiYWNrKG1heWJlV3JhcEFzRXJyb3IocmV0LmUpLCB0cnVlLCB0cnVlKTtcXG5cXFxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICAgICAgaWYgKCFwcm9taXNlLl9pc0ZhdGVTZWFsZWQoKSkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7ICAgICBcXG5cXFxuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICBub3RFbnVtZXJhYmxlUHJvcChyZXQsICdfX2lzUHJvbWlzaWZpZWRfXycsIHRydWUpOyAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgICAgICByZXR1cm4gcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG5cXFxuICAgIFwiLnJlcGxhY2UoXCJbQ29kZUZvclN3aXRjaENhc2VdXCIsIGdlbmVyYXRlQXJndW1lbnRTd2l0Y2hDYXNlKCkpXG4gICAgICAgIC5yZXBsYWNlKFwiW0dldEZ1bmN0aW9uQ29kZV1cIiwgZ2V0RnVuY3Rpb25Db2RlKTtcbiAgICBib2R5ID0gYm9keS5yZXBsYWNlKFwiUGFyYW1ldGVyc1wiLCBwYXJhbWV0ZXJEZWNsYXJhdGlvbihuZXdQYXJhbWV0ZXJDb3VudCkpO1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb24oXCJQcm9taXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlY2VpdmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIndpdGhBcHBlbmRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXliZVdyYXBBc0Vycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5vZGViYWNrRm9yUHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cnlDYXRjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlcnJvck9ialwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJub3RFbnVtZXJhYmxlUHJvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJJTlRFUk5BTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSkoXG4gICAgICAgICAgICAgICAgICAgIFByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIGZuLFxuICAgICAgICAgICAgICAgICAgICByZWNlaXZlcixcbiAgICAgICAgICAgICAgICAgICAgd2l0aEFwcGVuZGVkLFxuICAgICAgICAgICAgICAgICAgICBtYXliZVdyYXBBc0Vycm9yLFxuICAgICAgICAgICAgICAgICAgICBub2RlYmFja0ZvclByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgIHV0aWwudHJ5Q2F0Y2gsXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuZXJyb3JPYmosXG4gICAgICAgICAgICAgICAgICAgIHV0aWwubm90RW51bWVyYWJsZVByb3AsXG4gICAgICAgICAgICAgICAgICAgIElOVEVSTkFMKTtcbn07XG59XG5cbmZ1bmN0aW9uIG1ha2VOb2RlUHJvbWlzaWZpZWRDbG9zdXJlKGNhbGxiYWNrLCByZWNlaXZlciwgXywgZm4sIF9fLCBtdWx0aUFyZ3MpIHtcbiAgICB2YXIgZGVmYXVsdFRoaXMgPSAoZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXM7fSkoKTtcbiAgICB2YXIgbWV0aG9kID0gY2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBtZXRob2QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBmbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvbWlzaWZpZWQoKSB7XG4gICAgICAgIHZhciBfcmVjZWl2ZXIgPSByZWNlaXZlcjtcbiAgICAgICAgaWYgKHJlY2VpdmVyID09PSBUSElTKSBfcmVjZWl2ZXIgPSB0aGlzO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgcHJvbWlzZS5fY2FwdHVyZVN0YWNrVHJhY2UoKTtcbiAgICAgICAgdmFyIGNiID0gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIiAmJiB0aGlzICE9PSBkZWZhdWx0VGhpc1xuICAgICAgICAgICAgPyB0aGlzW21ldGhvZF0gOiBjYWxsYmFjaztcbiAgICAgICAgdmFyIGZuID0gbm9kZWJhY2tGb3JQcm9taXNlKHByb21pc2UsIG11bHRpQXJncyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYi5hcHBseShfcmVjZWl2ZXIsIHdpdGhBcHBlbmRlZChhcmd1bWVudHMsIGZuKSk7XG4gICAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICAgICAgcHJvbWlzZS5fcmVqZWN0Q2FsbGJhY2sobWF5YmVXcmFwQXNFcnJvcihlKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwcm9taXNlLl9pc0ZhdGVTZWFsZWQoKSkgcHJvbWlzZS5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cbiAgICB1dGlsLm5vdEVudW1lcmFibGVQcm9wKHByb21pc2lmaWVkLCBcIl9faXNQcm9taXNpZmllZF9fXCIsIHRydWUpO1xuICAgIHJldHVybiBwcm9taXNpZmllZDtcbn1cblxudmFyIG1ha2VOb2RlUHJvbWlzaWZpZWQgPSBjYW5FdmFsdWF0ZVxuICAgID8gbWFrZU5vZGVQcm9taXNpZmllZEV2YWxcbiAgICA6IG1ha2VOb2RlUHJvbWlzaWZpZWRDbG9zdXJlO1xuXG5mdW5jdGlvbiBwcm9taXNpZnlBbGwob2JqLCBzdWZmaXgsIGZpbHRlciwgcHJvbWlzaWZpZXIsIG11bHRpQXJncykge1xuICAgIHZhciBzdWZmaXhSZWdleHAgPSBuZXcgUmVnRXhwKGVzY2FwZUlkZW50UmVnZXgoc3VmZml4KSArIFwiJFwiKTtcbiAgICB2YXIgbWV0aG9kcyA9XG4gICAgICAgIHByb21pc2lmaWFibGVNZXRob2RzKG9iaiwgc3VmZml4LCBzdWZmaXhSZWdleHAsIGZpbHRlcik7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gbWV0aG9kcy5sZW5ndGg7IGkgPCBsZW47IGkrPSAyKSB7XG4gICAgICAgIHZhciBrZXkgPSBtZXRob2RzW2ldO1xuICAgICAgICB2YXIgZm4gPSBtZXRob2RzW2krMV07XG4gICAgICAgIHZhciBwcm9taXNpZmllZEtleSA9IGtleSArIHN1ZmZpeDtcbiAgICAgICAgaWYgKHByb21pc2lmaWVyID09PSBtYWtlTm9kZVByb21pc2lmaWVkKSB7XG4gICAgICAgICAgICBvYmpbcHJvbWlzaWZpZWRLZXldID1cbiAgICAgICAgICAgICAgICBtYWtlTm9kZVByb21pc2lmaWVkKGtleSwgVEhJUywga2V5LCBmbiwgc3VmZml4LCBtdWx0aUFyZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByb21pc2lmaWVkID0gcHJvbWlzaWZpZXIoZm4sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYWtlTm9kZVByb21pc2lmaWVkKGtleSwgVEhJUywga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuLCBzdWZmaXgsIG11bHRpQXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHV0aWwubm90RW51bWVyYWJsZVByb3AocHJvbWlzaWZpZWQsIFwiX19pc1Byb21pc2lmaWVkX19cIiwgdHJ1ZSk7XG4gICAgICAgICAgICBvYmpbcHJvbWlzaWZpZWRLZXldID0gcHJvbWlzaWZpZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXRpbC50b0Zhc3RQcm9wZXJ0aWVzKG9iaik7XG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gcHJvbWlzaWZ5KGNhbGxiYWNrLCByZWNlaXZlciwgbXVsdGlBcmdzKSB7XG4gICAgcmV0dXJuIG1ha2VOb2RlUHJvbWlzaWZpZWQoY2FsbGJhY2ssIHJlY2VpdmVyLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBudWxsLCBtdWx0aUFyZ3MpO1xufVxuXG5Qcm9taXNlLnByb21pc2lmeSA9IGZ1bmN0aW9uIChmbiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZm4pKTtcbiAgICB9XG4gICAgaWYgKGlzUHJvbWlzaWZpZWQoZm4pKSB7XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9XG4gICAgb3B0aW9ucyA9IE9iamVjdChvcHRpb25zKTtcbiAgICB2YXIgcmVjZWl2ZXIgPSBvcHRpb25zLmNvbnRleHQgPT09IHVuZGVmaW5lZCA/IFRISVMgOiBvcHRpb25zLmNvbnRleHQ7XG4gICAgdmFyIG11bHRpQXJncyA9ICEhb3B0aW9ucy5tdWx0aUFyZ3M7XG4gICAgdmFyIHJldCA9IHByb21pc2lmeShmbiwgcmVjZWl2ZXIsIG11bHRpQXJncyk7XG4gICAgdXRpbC5jb3B5RGVzY3JpcHRvcnMoZm4sIHJldCwgcHJvcHNGaWx0ZXIpO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5Qcm9taXNlLnByb21pc2lmeUFsbCA9IGZ1bmN0aW9uICh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSB0YXJnZXQgb2YgcHJvbWlzaWZ5QWxsIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb25cXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgIH1cbiAgICBvcHRpb25zID0gT2JqZWN0KG9wdGlvbnMpO1xuICAgIHZhciBtdWx0aUFyZ3MgPSAhIW9wdGlvbnMubXVsdGlBcmdzO1xuICAgIHZhciBzdWZmaXggPSBvcHRpb25zLnN1ZmZpeDtcbiAgICBpZiAodHlwZW9mIHN1ZmZpeCAhPT0gXCJzdHJpbmdcIikgc3VmZml4ID0gZGVmYXVsdFN1ZmZpeDtcbiAgICB2YXIgZmlsdGVyID0gb3B0aW9ucy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09IFwiZnVuY3Rpb25cIikgZmlsdGVyID0gZGVmYXVsdEZpbHRlcjtcbiAgICB2YXIgcHJvbWlzaWZpZXIgPSBvcHRpb25zLnByb21pc2lmaWVyO1xuICAgIGlmICh0eXBlb2YgcHJvbWlzaWZpZXIgIT09IFwiZnVuY3Rpb25cIikgcHJvbWlzaWZpZXIgPSBtYWtlTm9kZVByb21pc2lmaWVkO1xuXG4gICAgaWYgKCF1dGlsLmlzSWRlbnRpZmllcihzdWZmaXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwic3VmZml4IG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IHV0aWwuaW5oZXJpdGVkRGF0YUtleXModGFyZ2V0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGFyZ2V0W2tleXNbaV1dO1xuICAgICAgICBpZiAoa2V5c1tpXSAhPT0gXCJjb25zdHJ1Y3RvclwiICYmXG4gICAgICAgICAgICB1dGlsLmlzQ2xhc3ModmFsdWUpKSB7XG4gICAgICAgICAgICBwcm9taXNpZnlBbGwodmFsdWUucHJvdG90eXBlLCBzdWZmaXgsIGZpbHRlciwgcHJvbWlzaWZpZXIsXG4gICAgICAgICAgICAgICAgbXVsdGlBcmdzKTtcbiAgICAgICAgICAgIHByb21pc2lmeUFsbCh2YWx1ZSwgc3VmZml4LCBmaWx0ZXIsIHByb21pc2lmaWVyLCBtdWx0aUFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2lmeUFsbCh0YXJnZXQsIHN1ZmZpeCwgZmlsdGVyLCBwcm9taXNpZmllciwgbXVsdGlBcmdzKTtcbn07XG59O1xuXG5cbn0se1wiLi9lcnJvcnNcIjo1OCxcIi4vbm9kZWJhY2tcIjo2NixcIi4vdXRpbFwiOjgyfV0sNzE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFxuICAgIFByb21pc2UsIFByb21pc2VBcnJheSwgdHJ5Q29udmVydFRvUHJvbWlzZSwgYXBpUmVqZWN0aW9uKSB7XG52YXIgdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG52YXIgaXNPYmplY3QgPSB1dGlsLmlzT2JqZWN0O1xudmFyIGVzNSA9IHJlcXVpcmUoXCIuL2VzNVwiKTtcbnZhciBFczZNYXA7XG5pZiAodHlwZW9mIE1hcCA9PT0gXCJmdW5jdGlvblwiKSBFczZNYXAgPSBNYXA7XG5cbnZhciBtYXBUb0VudHJpZXMgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgc2l6ZSA9IDA7XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RW50cnkodmFsdWUsIGtleSkge1xuICAgICAgICB0aGlzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB0aGlzW2luZGV4ICsgc2l6ZV0gPSBrZXk7XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1hcFRvRW50cmllcyhtYXApIHtcbiAgICAgICAgc2l6ZSA9IG1hcC5zaXplO1xuICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgIHZhciByZXQgPSBuZXcgQXJyYXkobWFwLnNpemUgKiAyKTtcbiAgICAgICAgbWFwLmZvckVhY2goZXh0cmFjdEVudHJ5LCByZXQpO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH07XG59KSgpO1xuXG52YXIgZW50cmllc1RvTWFwID0gZnVuY3Rpb24oZW50cmllcykge1xuICAgIHZhciByZXQgPSBuZXcgRXM2TWFwKCk7XG4gICAgdmFyIGxlbmd0aCA9IGVudHJpZXMubGVuZ3RoIC8gMiB8IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIga2V5ID0gZW50cmllc1tsZW5ndGggKyBpXTtcbiAgICAgICAgdmFyIHZhbHVlID0gZW50cmllc1tpXTtcbiAgICAgICAgcmV0LnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn07XG5cbmZ1bmN0aW9uIFByb3BlcnRpZXNQcm9taXNlQXJyYXkob2JqKSB7XG4gICAgdmFyIGlzTWFwID0gZmFsc2U7XG4gICAgdmFyIGVudHJpZXM7XG4gICAgaWYgKEVzNk1hcCAhPT0gdW5kZWZpbmVkICYmIG9iaiBpbnN0YW5jZW9mIEVzNk1hcCkge1xuICAgICAgICBlbnRyaWVzID0gbWFwVG9FbnRyaWVzKG9iaik7XG4gICAgICAgIGlzTWFwID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIga2V5cyA9IGVzNS5rZXlzKG9iaik7XG4gICAgICAgIHZhciBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZW50cmllcyA9IG5ldyBBcnJheShsZW4gKiAyKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICBlbnRyaWVzW2ldID0gb2JqW2tleV07XG4gICAgICAgICAgICBlbnRyaWVzW2kgKyBsZW5dID0ga2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuY29uc3RydWN0b3IkKGVudHJpZXMpO1xuICAgIHRoaXMuX2lzTWFwID0gaXNNYXA7XG4gICAgdGhpcy5faW5pdCQodW5kZWZpbmVkLCAtMyk7XG59XG51dGlsLmluaGVyaXRzKFByb3BlcnRpZXNQcm9taXNlQXJyYXksIFByb21pc2VBcnJheSk7XG5cblByb3BlcnRpZXNQcm9taXNlQXJyYXkucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKCkge307XG5cblByb3BlcnRpZXNQcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgIHRoaXMuX3ZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICB2YXIgdG90YWxSZXNvbHZlZCA9ICsrdGhpcy5fdG90YWxSZXNvbHZlZDtcbiAgICBpZiAodG90YWxSZXNvbHZlZCA+PSB0aGlzLl9sZW5ndGgpIHtcbiAgICAgICAgdmFyIHZhbDtcbiAgICAgICAgaWYgKHRoaXMuX2lzTWFwKSB7XG4gICAgICAgICAgICB2YWwgPSBlbnRyaWVzVG9NYXAodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IHt9O1xuICAgICAgICAgICAgdmFyIGtleU9mZnNldCA9IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5sZW5ndGgoKTsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFsW3RoaXMuX3ZhbHVlc1tpICsga2V5T2Zmc2V0XV0gPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVzb2x2ZSh2YWwpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuUHJvcGVydGllc1Byb21pc2VBcnJheS5wcm90b3R5cGUuc2hvdWxkQ29weVZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5Qcm9wZXJ0aWVzUHJvbWlzZUFycmF5LnByb3RvdHlwZS5nZXRBY3R1YWxMZW5ndGggPSBmdW5jdGlvbiAobGVuKSB7XG4gICAgcmV0dXJuIGxlbiA+PiAxO1xufTtcblxuZnVuY3Rpb24gcHJvcHMocHJvbWlzZXMpIHtcbiAgICB2YXIgcmV0O1xuICAgIHZhciBjYXN0VmFsdWUgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHByb21pc2VzKTtcblxuICAgIGlmICghaXNPYmplY3QoY2FzdFZhbHVlKSkge1xuICAgICAgICByZXR1cm4gYXBpUmVqZWN0aW9uKFwiY2Fubm90IGF3YWl0IHByb3BlcnRpZXMgb2YgYSBub24tb2JqZWN0XFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9IGVsc2UgaWYgKGNhc3RWYWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0ID0gY2FzdFZhbHVlLl90aGVuKFxuICAgICAgICAgICAgUHJvbWlzZS5wcm9wcywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXQgPSBuZXcgUHJvcGVydGllc1Byb21pc2VBcnJheShjYXN0VmFsdWUpLnByb21pc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoY2FzdFZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXQuX3Byb3BhZ2F0ZUZyb20oY2FzdFZhbHVlLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuUHJvbWlzZS5wcm90b3R5cGUucHJvcHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHByb3BzKHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm9wcyA9IGZ1bmN0aW9uIChwcm9taXNlcykge1xuICAgIHJldHVybiBwcm9wcyhwcm9taXNlcyk7XG59O1xufTtcblxufSx7XCIuL2VzNVwiOjU5LFwiLi91dGlsXCI6ODJ9XSw3MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbmZ1bmN0aW9uIGFycmF5TW92ZShzcmMsIHNyY0luZGV4LCBkc3QsIGRzdEluZGV4LCBsZW4pIHtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbjsgKytqKSB7XG4gICAgICAgIGRzdFtqICsgZHN0SW5kZXhdID0gc3JjW2ogKyBzcmNJbmRleF07XG4gICAgICAgIHNyY1tqICsgc3JjSW5kZXhdID0gdm9pZCAwO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gUXVldWUoY2FwYWNpdHkpIHtcbiAgICB0aGlzLl9jYXBhY2l0eSA9IGNhcGFjaXR5O1xuICAgIHRoaXMuX2xlbmd0aCA9IDA7XG4gICAgdGhpcy5fZnJvbnQgPSAwO1xufVxuXG5RdWV1ZS5wcm90b3R5cGUuX3dpbGxCZU92ZXJDYXBhY2l0eSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcGFjaXR5IDwgc2l6ZTtcbn07XG5cblF1ZXVlLnByb3RvdHlwZS5fcHVzaE9uZSA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGgoKTtcbiAgICB0aGlzLl9jaGVja0NhcGFjaXR5KGxlbmd0aCArIDEpO1xuICAgIHZhciBpID0gKHRoaXMuX2Zyb250ICsgbGVuZ3RoKSAmICh0aGlzLl9jYXBhY2l0eSAtIDEpO1xuICAgIHRoaXNbaV0gPSBhcmc7XG4gICAgdGhpcy5fbGVuZ3RoID0gbGVuZ3RoICsgMTtcbn07XG5cblF1ZXVlLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGZuLCByZWNlaXZlciwgYXJnKSB7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoKCkgKyAzO1xuICAgIGlmICh0aGlzLl93aWxsQmVPdmVyQ2FwYWNpdHkobGVuZ3RoKSkge1xuICAgICAgICB0aGlzLl9wdXNoT25lKGZuKTtcbiAgICAgICAgdGhpcy5fcHVzaE9uZShyZWNlaXZlcik7XG4gICAgICAgIHRoaXMuX3B1c2hPbmUoYXJnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgaiA9IHRoaXMuX2Zyb250ICsgbGVuZ3RoIC0gMztcbiAgICB0aGlzLl9jaGVja0NhcGFjaXR5KGxlbmd0aCk7XG4gICAgdmFyIHdyYXBNYXNrID0gdGhpcy5fY2FwYWNpdHkgLSAxO1xuICAgIHRoaXNbKGogKyAwKSAmIHdyYXBNYXNrXSA9IGZuO1xuICAgIHRoaXNbKGogKyAxKSAmIHdyYXBNYXNrXSA9IHJlY2VpdmVyO1xuICAgIHRoaXNbKGogKyAyKSAmIHdyYXBNYXNrXSA9IGFyZztcbiAgICB0aGlzLl9sZW5ndGggPSBsZW5ndGg7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUuc2hpZnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZyb250ID0gdGhpcy5fZnJvbnQsXG4gICAgICAgIHJldCA9IHRoaXNbZnJvbnRdO1xuXG4gICAgdGhpc1tmcm9udF0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZnJvbnQgPSAoZnJvbnQgKyAxKSAmICh0aGlzLl9jYXBhY2l0eSAtIDEpO1xuICAgIHRoaXMuX2xlbmd0aC0tO1xuICAgIHJldHVybiByZXQ7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9sZW5ndGg7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUuX2NoZWNrQ2FwYWNpdHkgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICAgIGlmICh0aGlzLl9jYXBhY2l0eSA8IHNpemUpIHtcbiAgICAgICAgdGhpcy5fcmVzaXplVG8odGhpcy5fY2FwYWNpdHkgPDwgMSk7XG4gICAgfVxufTtcblxuUXVldWUucHJvdG90eXBlLl9yZXNpemVUbyA9IGZ1bmN0aW9uIChjYXBhY2l0eSkge1xuICAgIHZhciBvbGRDYXBhY2l0eSA9IHRoaXMuX2NhcGFjaXR5O1xuICAgIHRoaXMuX2NhcGFjaXR5ID0gY2FwYWNpdHk7XG4gICAgdmFyIGZyb250ID0gdGhpcy5fZnJvbnQ7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICB2YXIgbW92ZUl0ZW1zQ291bnQgPSAoZnJvbnQgKyBsZW5ndGgpICYgKG9sZENhcGFjaXR5IC0gMSk7XG4gICAgYXJyYXlNb3ZlKHRoaXMsIDAsIHRoaXMsIG9sZENhcGFjaXR5LCBtb3ZlSXRlbXNDb3VudCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFF1ZXVlO1xuXG59LHt9XSw3MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oXG4gICAgUHJvbWlzZSwgSU5URVJOQUwsIHRyeUNvbnZlcnRUb1Byb21pc2UsIGFwaVJlamVjdGlvbikge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuXG52YXIgcmFjZUxhdGVyID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgICAgIHJldHVybiByYWNlKGFycmF5LCBwcm9taXNlKTtcbiAgICB9KTtcbn07XG5cbmZ1bmN0aW9uIHJhY2UocHJvbWlzZXMsIHBhcmVudCkge1xuICAgIHZhciBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHByb21pc2VzKTtcblxuICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiByYWNlTGF0ZXIobWF5YmVQcm9taXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlcyA9IHV0aWwuYXNBcnJheShwcm9taXNlcyk7XG4gICAgICAgIGlmIChwcm9taXNlcyA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJleHBlY3RpbmcgYW4gYXJyYXkgb3IgYW4gaXRlcmFibGUgb2JqZWN0IGJ1dCBnb3QgXCIgKyB1dGlsLmNsYXNzU3RyaW5nKHByb21pc2VzKSk7XG4gICAgfVxuXG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0Ll9wcm9wYWdhdGVGcm9tKHBhcmVudCwgMyk7XG4gICAgfVxuICAgIHZhciBmdWxmaWxsID0gcmV0Ll9mdWxmaWxsO1xuICAgIHZhciByZWplY3QgPSByZXQuX3JlamVjdDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcHJvbWlzZXMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgdmFyIHZhbCA9IHByb21pc2VzW2ldO1xuXG4gICAgICAgIGlmICh2YWwgPT09IHVuZGVmaW5lZCAmJiAhKGkgaW4gcHJvbWlzZXMpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuY2FzdCh2YWwpLl90aGVuKGZ1bGZpbGwsIHJlamVjdCwgdW5kZWZpbmVkLCByZXQsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xufVxuXG5Qcm9taXNlLnJhY2UgPSBmdW5jdGlvbiAocHJvbWlzZXMpIHtcbiAgICByZXR1cm4gcmFjZShwcm9taXNlcywgdW5kZWZpbmVkKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLnJhY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJhY2UodGhpcywgdW5kZWZpbmVkKTtcbn07XG5cbn07XG5cbn0se1wiLi91dGlsXCI6ODJ9XSw3NDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcGlSZWplY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUNvbnZlcnRUb1Byb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVSTkFMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zykge1xudmFyIGdldERvbWFpbiA9IFByb21pc2UuX2dldERvbWFpbjtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcbnZhciB0cnlDYXRjaCA9IHV0aWwudHJ5Q2F0Y2g7XG5cbmZ1bmN0aW9uIFJlZHVjdGlvblByb21pc2VBcnJheShwcm9taXNlcywgZm4sIGluaXRpYWxWYWx1ZSwgX2VhY2gpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yJChwcm9taXNlcyk7XG4gICAgdmFyIGRvbWFpbiA9IGdldERvbWFpbigpO1xuICAgIHRoaXMuX2ZuID0gZG9tYWluID09PSBudWxsID8gZm4gOiB1dGlsLmRvbWFpbkJpbmQoZG9tYWluLCBmbik7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluaXRpYWxWYWx1ZSA9IFByb21pc2UucmVzb2x2ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICBpbml0aWFsVmFsdWUuX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgdGhpcy5fY3VycmVudENhbmNlbGxhYmxlID0gbnVsbDtcbiAgICBpZihfZWFjaCA9PT0gSU5URVJOQUwpIHtcbiAgICAgICAgdGhpcy5fZWFjaFZhbHVlcyA9IEFycmF5KHRoaXMuX2xlbmd0aCk7XG4gICAgfSBlbHNlIGlmIChfZWFjaCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLl9wcm9taXNlLl9jYXB0dXJlU3RhY2tUcmFjZSgpO1xuICAgIHRoaXMuX2luaXQkKHVuZGVmaW5lZCwgLTUpO1xufVxudXRpbC5pbmhlcml0cyhSZWR1Y3Rpb25Qcm9taXNlQXJyYXksIFByb21pc2VBcnJheSk7XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX2dvdEFjY3VtID0gZnVuY3Rpb24oYWNjdW0pIHtcbiAgICBpZiAodGhpcy5fZWFjaFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIFxuICAgICAgICB0aGlzLl9lYWNoVmFsdWVzICE9PSBudWxsICYmIFxuICAgICAgICBhY2N1bSAhPT0gSU5URVJOQUwpIHtcbiAgICAgICAgdGhpcy5fZWFjaFZhbHVlcy5wdXNoKGFjY3VtKTtcbiAgICB9XG59O1xuXG5SZWR1Y3Rpb25Qcm9taXNlQXJyYXkucHJvdG90eXBlLl9lYWNoQ29tcGxldGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9lYWNoVmFsdWVzICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2VhY2hWYWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9lYWNoVmFsdWVzO1xufTtcblxuUmVkdWN0aW9uUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uKCkge307XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Jlc29sdmVFbXB0eUFycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcmVzb2x2ZSh0aGlzLl9lYWNoVmFsdWVzICE9PSB1bmRlZmluZWQgPyB0aGlzLl9lYWNoVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9pbml0aWFsVmFsdWUpO1xufTtcblxuUmVkdWN0aW9uUHJvbWlzZUFycmF5LnByb3RvdHlwZS5zaG91bGRDb3B5VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Jlc29sdmUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHRoaXMuX3Byb21pc2UuX3Jlc29sdmVDYWxsYmFjayh2YWx1ZSk7XG4gICAgdGhpcy5fdmFsdWVzID0gbnVsbDtcbn07XG5cblJlZHVjdGlvblByb21pc2VBcnJheS5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKHNlbmRlcikge1xuICAgIGlmIChzZW5kZXIgPT09IHRoaXMuX2luaXRpYWxWYWx1ZSkgcmV0dXJuIHRoaXMuX2NhbmNlbCgpO1xuICAgIGlmICh0aGlzLl9pc1Jlc29sdmVkKCkpIHJldHVybjtcbiAgICB0aGlzLl9yZXN1bHRDYW5jZWxsZWQkKCk7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRDYW5jZWxsYWJsZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudENhbmNlbGxhYmxlLmNhbmNlbCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5pdGlhbFZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB0aGlzLl9pbml0aWFsVmFsdWUuY2FuY2VsKCk7XG4gICAgfVxufTtcblxuUmVkdWN0aW9uUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faXRlcmF0ZSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICB0aGlzLl92YWx1ZXMgPSB2YWx1ZXM7XG4gICAgdmFyIHZhbHVlO1xuICAgIHZhciBpO1xuICAgIHZhciBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuICAgIGlmICh0aGlzLl9pbml0aWFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX2luaXRpYWxWYWx1ZTtcbiAgICAgICAgaSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBQcm9taXNlLnJlc29sdmUodmFsdWVzWzBdKTtcbiAgICAgICAgaSA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudENhbmNlbGxhYmxlID0gdmFsdWU7XG5cbiAgICBpZiAoIXZhbHVlLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgY3R4ID0ge1xuICAgICAgICAgICAgICAgIGFjY3VtOiBudWxsLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZXNbaV0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICAgICAgICAgICAgYXJyYXk6IHRoaXNcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLl90aGVuKGdvdEFjY3VtLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY3R4LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VhY2hWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAuX3RoZW4odGhpcy5fZWFjaENvbXBsZXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGhpcywgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdmFsdWUuX3RoZW4oY29tcGxldGVkLCBjb21wbGV0ZWQsIHVuZGVmaW5lZCwgdmFsdWUsIHRoaXMpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24gKGZuLCBpbml0aWFsVmFsdWUpIHtcbiAgICByZXR1cm4gcmVkdWNlKHRoaXMsIGZuLCBpbml0aWFsVmFsdWUsIG51bGwpO1xufTtcblxuUHJvbWlzZS5yZWR1Y2UgPSBmdW5jdGlvbiAocHJvbWlzZXMsIGZuLCBpbml0aWFsVmFsdWUsIF9lYWNoKSB7XG4gICAgcmV0dXJuIHJlZHVjZShwcm9taXNlcywgZm4sIGluaXRpYWxWYWx1ZSwgX2VhY2gpO1xufTtcblxuZnVuY3Rpb24gY29tcGxldGVkKHZhbHVlT3JSZWFzb24sIGFycmF5KSB7XG4gICAgaWYgKHRoaXMuaXNGdWxmaWxsZWQoKSkge1xuICAgICAgICBhcnJheS5fcmVzb2x2ZSh2YWx1ZU9yUmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhcnJheS5fcmVqZWN0KHZhbHVlT3JSZWFzb24pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVkdWNlKHByb21pc2VzLCBmbiwgaW5pdGlhbFZhbHVlLCBfZWFjaCkge1xuICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gYXBpUmVqZWN0aW9uKFwiZXhwZWN0aW5nIGEgZnVuY3Rpb24gYnV0IGdvdCBcIiArIHV0aWwuY2xhc3NTdHJpbmcoZm4pKTtcbiAgICB9XG4gICAgdmFyIGFycmF5ID0gbmV3IFJlZHVjdGlvblByb21pc2VBcnJheShwcm9taXNlcywgZm4sIGluaXRpYWxWYWx1ZSwgX2VhY2gpO1xuICAgIHJldHVybiBhcnJheS5wcm9taXNlKCk7XG59XG5cbmZ1bmN0aW9uIGdvdEFjY3VtKGFjY3VtKSB7XG4gICAgdGhpcy5hY2N1bSA9IGFjY3VtO1xuICAgIHRoaXMuYXJyYXkuX2dvdEFjY3VtKGFjY3VtKTtcbiAgICB2YXIgdmFsdWUgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHRoaXMudmFsdWUsIHRoaXMuYXJyYXkuX3Byb21pc2UpO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhpcy5hcnJheS5fY3VycmVudENhbmNlbGxhYmxlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZS5fdGhlbihnb3RWYWx1ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMsIHVuZGVmaW5lZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdvdFZhbHVlLmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ290VmFsdWUodmFsdWUpIHtcbiAgICB2YXIgYXJyYXkgPSB0aGlzLmFycmF5O1xuICAgIHZhciBwcm9taXNlID0gYXJyYXkuX3Byb21pc2U7XG4gICAgdmFyIGZuID0gdHJ5Q2F0Y2goYXJyYXkuX2ZuKTtcbiAgICBwcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuICAgIHZhciByZXQ7XG4gICAgaWYgKGFycmF5Ll9lYWNoVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0ID0gZm4uY2FsbChwcm9taXNlLl9ib3VuZFZhbHVlKCksIHZhbHVlLCB0aGlzLmluZGV4LCB0aGlzLmxlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0ID0gZm4uY2FsbChwcm9taXNlLl9ib3VuZFZhbHVlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY3VtLCB2YWx1ZSwgdGhpcy5pbmRleCwgdGhpcy5sZW5ndGgpO1xuICAgIH1cbiAgICBpZiAocmV0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICBhcnJheS5fY3VycmVudENhbmNlbGxhYmxlID0gcmV0O1xuICAgIH1cbiAgICB2YXIgcHJvbWlzZUNyZWF0ZWQgPSBwcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgZGVidWcuY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zKFxuICAgICAgICByZXQsXG4gICAgICAgIHByb21pc2VDcmVhdGVkLFxuICAgICAgICBhcnJheS5fZWFjaFZhbHVlcyAhPT0gdW5kZWZpbmVkID8gXCJQcm9taXNlLmVhY2hcIiA6IFwiUHJvbWlzZS5yZWR1Y2VcIixcbiAgICAgICAgcHJvbWlzZVxuICAgICk7XG4gICAgcmV0dXJuIHJldDtcbn1cbn07XG5cbn0se1wiLi91dGlsXCI6ODJ9XSw3NTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcblwidXNlIHN0cmljdFwiO1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIHNjaGVkdWxlO1xudmFyIG5vQXN5bmNTY2hlZHVsZXIgPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBhc3luYyBzY2hlZHVsZXIgYXZhaWxhYmxlXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbn07XG52YXIgTmF0aXZlUHJvbWlzZSA9IHV0aWwuZ2V0TmF0aXZlUHJvbWlzZSgpO1xuaWYgKHV0aWwuaXNOb2RlICYmIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIEdsb2JhbFNldEltbWVkaWF0ZSA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG4gICAgdmFyIFByb2Nlc3NOZXh0VGljayA9IHByb2Nlc3MubmV4dFRpY2s7XG4gICAgc2NoZWR1bGUgPSB1dGlsLmlzUmVjZW50Tm9kZVxuICAgICAgICAgICAgICAgID8gZnVuY3Rpb24oZm4pIHsgR2xvYmFsU2V0SW1tZWRpYXRlLmNhbGwoZ2xvYmFsLCBmbik7IH1cbiAgICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGZuKSB7IFByb2Nlc3NOZXh0VGljay5jYWxsKHByb2Nlc3MsIGZuKTsgfTtcbn0gZWxzZSBpZiAodHlwZW9mIE5hdGl2ZVByb21pc2UgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICB0eXBlb2YgTmF0aXZlUHJvbWlzZS5yZXNvbHZlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgbmF0aXZlUHJvbWlzZSA9IE5hdGl2ZVByb21pc2UucmVzb2x2ZSgpO1xuICAgIHNjaGVkdWxlID0gZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgbmF0aXZlUHJvbWlzZS50aGVuKGZuKTtcbiAgICB9O1xufSBlbHNlIGlmICgodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIpICYmXG4gICAgICAgICAgISh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB3aW5kb3cubmF2aWdhdG9yICYmXG4gICAgICAgICAgICAod2luZG93Lm5hdmlnYXRvci5zdGFuZGFsb25lIHx8IHdpbmRvdy5jb3Jkb3ZhKSkpIHtcbiAgICBzY2hlZHVsZSA9IChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHZhciBvcHRzID0ge2F0dHJpYnV0ZXM6IHRydWV9O1xuICAgICAgICB2YXIgdG9nZ2xlU2NoZWR1bGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBkaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdmFyIG8yID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBkaXYuY2xhc3NMaXN0LnRvZ2dsZShcImZvb1wiKTtcbiAgICAgICAgICAgIHRvZ2dsZVNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbzIub2JzZXJ2ZShkaXYyLCBvcHRzKTtcblxuICAgICAgICB2YXIgc2NoZWR1bGVUb2dnbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0b2dnbGVTY2hlZHVsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0b2dnbGVTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRpdjIuY2xhc3NMaXN0LnRvZ2dsZShcImZvb1wiKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBzY2hlZHVsZShmbikge1xuICAgICAgICAgICAgdmFyIG8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBvLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvLm9ic2VydmUoZGl2LCBvcHRzKTtcbiAgICAgICAgICAgIHNjaGVkdWxlVG9nZ2xlKCk7XG4gICAgICAgIH07XG4gICAgfSkoKTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNjaGVkdWxlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHNldEltbWVkaWF0ZShmbik7XG4gICAgfTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldFRpbWVvdXQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzY2hlZHVsZSA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgICB9O1xufSBlbHNlIHtcbiAgICBzY2hlZHVsZSA9IG5vQXN5bmNTY2hlZHVsZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNjaGVkdWxlO1xuXG59KS5jYWxsKHRoaXMscmVxdWlyZSgnX3Byb2Nlc3MnKSx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7XCIuL3V0aWxcIjo4MixcIl9wcm9jZXNzXCI6MTAxfV0sNzY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9XG4gICAgZnVuY3Rpb24oUHJvbWlzZSwgUHJvbWlzZUFycmF5LCBkZWJ1Zykge1xudmFyIFByb21pc2VJbnNwZWN0aW9uID0gUHJvbWlzZS5Qcm9taXNlSW5zcGVjdGlvbjtcbnZhciB1dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxuZnVuY3Rpb24gU2V0dGxlZFByb21pc2VBcnJheSh2YWx1ZXMpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yJCh2YWx1ZXMpO1xufVxudXRpbC5pbmhlcml0cyhTZXR0bGVkUHJvbWlzZUFycmF5LCBQcm9taXNlQXJyYXkpO1xuXG5TZXR0bGVkUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZVJlc29sdmVkID0gZnVuY3Rpb24gKGluZGV4LCBpbnNwZWN0aW9uKSB7XG4gICAgdGhpcy5fdmFsdWVzW2luZGV4XSA9IGluc3BlY3Rpb247XG4gICAgdmFyIHRvdGFsUmVzb2x2ZWQgPSArK3RoaXMuX3RvdGFsUmVzb2x2ZWQ7XG4gICAgaWYgKHRvdGFsUmVzb2x2ZWQgPj0gdGhpcy5fbGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUodGhpcy5fdmFsdWVzKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblNldHRsZWRQcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlRnVsZmlsbGVkID0gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZUluc3BlY3Rpb24oKTtcbiAgICByZXQuX2JpdEZpZWxkID0gMzM1NTQ0MzI7XG4gICAgcmV0Ll9zZXR0bGVkVmFsdWVGaWVsZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlUmVzb2x2ZWQoaW5kZXgsIHJldCk7XG59O1xuU2V0dGxlZFByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VSZWplY3RlZCA9IGZ1bmN0aW9uIChyZWFzb24sIGluZGV4KSB7XG4gICAgdmFyIHJldCA9IG5ldyBQcm9taXNlSW5zcGVjdGlvbigpO1xuICAgIHJldC5fYml0RmllbGQgPSAxNjc3NzIxNjtcbiAgICByZXQuX3NldHRsZWRWYWx1ZUZpZWxkID0gcmVhc29uO1xuICAgIHJldHVybiB0aGlzLl9wcm9taXNlUmVzb2x2ZWQoaW5kZXgsIHJldCk7XG59O1xuXG5Qcm9taXNlLnNldHRsZSA9IGZ1bmN0aW9uIChwcm9taXNlcykge1xuICAgIGRlYnVnLmRlcHJlY2F0ZWQoXCIuc2V0dGxlKClcIiwgXCIucmVmbGVjdCgpXCIpO1xuICAgIHJldHVybiBuZXcgU2V0dGxlZFByb21pc2VBcnJheShwcm9taXNlcykucHJvbWlzZSgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuc2V0dGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBQcm9taXNlLnNldHRsZSh0aGlzKTtcbn07XG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sNzc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9XG5mdW5jdGlvbihQcm9taXNlLCBQcm9taXNlQXJyYXksIGFwaVJlamVjdGlvbikge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIFJhbmdlRXJyb3IgPSByZXF1aXJlKFwiLi9lcnJvcnNcIikuUmFuZ2VFcnJvcjtcbnZhciBBZ2dyZWdhdGVFcnJvciA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKS5BZ2dyZWdhdGVFcnJvcjtcbnZhciBpc0FycmF5ID0gdXRpbC5pc0FycmF5O1xudmFyIENBTkNFTExBVElPTiA9IHt9O1xuXG5cbmZ1bmN0aW9uIFNvbWVQcm9taXNlQXJyYXkodmFsdWVzKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciQodmFsdWVzKTtcbiAgICB0aGlzLl9ob3dNYW55ID0gMDtcbiAgICB0aGlzLl91bndyYXAgPSBmYWxzZTtcbiAgICB0aGlzLl9pbml0aWFsaXplZCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhTb21lUHJvbWlzZUFycmF5LCBQcm9taXNlQXJyYXkpO1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5faW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2hvd01hbnkgPT09IDApIHtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShbXSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faW5pdCQodW5kZWZpbmVkLCAtNSk7XG4gICAgdmFyIGlzQXJyYXlSZXNvbHZlZCA9IGlzQXJyYXkodGhpcy5fdmFsdWVzKTtcbiAgICBpZiAoIXRoaXMuX2lzUmVzb2x2ZWQoKSAmJlxuICAgICAgICBpc0FycmF5UmVzb2x2ZWQgJiZcbiAgICAgICAgdGhpcy5faG93TWFueSA+IHRoaXMuX2NhblBvc3NpYmx5RnVsZmlsbCgpKSB7XG4gICAgICAgIHRoaXMuX3JlamVjdCh0aGlzLl9nZXRSYW5nZUVycm9yKHRoaXMubGVuZ3RoKCkpKTtcbiAgICB9XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLl9pbml0KCk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5zZXRVbndyYXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fdW53cmFwID0gdHJ1ZTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLmhvd01hbnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hvd01hbnk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5zZXRIb3dNYW55ID0gZnVuY3Rpb24gKGNvdW50KSB7XG4gICAgdGhpcy5faG93TWFueSA9IGNvdW50O1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX3Byb21pc2VGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLl9hZGRGdWxmaWxsZWQodmFsdWUpO1xuICAgIGlmICh0aGlzLl9mdWxmaWxsZWQoKSA9PT0gdGhpcy5ob3dNYW55KCkpIHtcbiAgICAgICAgdGhpcy5fdmFsdWVzLmxlbmd0aCA9IHRoaXMuaG93TWFueSgpO1xuICAgICAgICBpZiAodGhpcy5ob3dNYW55KCkgPT09IDEgJiYgdGhpcy5fdW53cmFwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlKHRoaXMuX3ZhbHVlc1swXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlKHRoaXMuX3ZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcblxufTtcblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9wcm9taXNlUmVqZWN0ZWQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgdGhpcy5fYWRkUmVqZWN0ZWQocmVhc29uKTtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tPdXRjb21lKCk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fcHJvbWlzZUNhbmNlbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5fdmFsdWVzIGluc3RhbmNlb2YgUHJvbWlzZSB8fCB0aGlzLl92YWx1ZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuY2VsKCk7XG4gICAgfVxuICAgIHRoaXMuX2FkZFJlamVjdGVkKENBTkNFTExBVElPTik7XG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrT3V0Y29tZSgpO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2NoZWNrT3V0Y29tZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmhvd01hbnkoKSA+IHRoaXMuX2NhblBvc3NpYmx5RnVsZmlsbCgpKSB7XG4gICAgICAgIHZhciBlID0gbmV3IEFnZ3JlZ2F0ZUVycm9yKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSB0aGlzLmxlbmd0aCgpOyBpIDwgdGhpcy5fdmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzW2ldICE9PSBDQU5DRUxMQVRJT04pIHtcbiAgICAgICAgICAgICAgICBlLnB1c2godGhpcy5fdmFsdWVzW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3QoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2Z1bGZpbGxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG90YWxSZXNvbHZlZDtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZWplY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVzLmxlbmd0aCAtIHRoaXMubGVuZ3RoKCk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fYWRkUmVqZWN0ZWQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgdGhpcy5fdmFsdWVzLnB1c2gocmVhc29uKTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9hZGRGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLl92YWx1ZXNbdGhpcy5fdG90YWxSZXNvbHZlZCsrXSA9IHZhbHVlO1xufTtcblxuU29tZVByb21pc2VBcnJheS5wcm90b3R5cGUuX2NhblBvc3NpYmx5RnVsZmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGgoKSAtIHRoaXMuX3JlamVjdGVkKCk7XG59O1xuXG5Tb21lUHJvbWlzZUFycmF5LnByb3RvdHlwZS5fZ2V0UmFuZ2VFcnJvciA9IGZ1bmN0aW9uIChjb3VudCkge1xuICAgIHZhciBtZXNzYWdlID0gXCJJbnB1dCBhcnJheSBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgXCIgK1xuICAgICAgICAgICAgdGhpcy5faG93TWFueSArIFwiIGl0ZW1zIGJ1dCBjb250YWlucyBvbmx5IFwiICsgY291bnQgKyBcIiBpdGVtc1wiO1xuICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihtZXNzYWdlKTtcbn07XG5cblNvbWVQcm9taXNlQXJyYXkucHJvdG90eXBlLl9yZXNvbHZlRW1wdHlBcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9yZWplY3QodGhpcy5fZ2V0UmFuZ2VFcnJvcigwKSk7XG59O1xuXG5mdW5jdGlvbiBzb21lKHByb21pc2VzLCBob3dNYW55KSB7XG4gICAgaWYgKChob3dNYW55IHwgMCkgIT09IGhvd01hbnkgfHwgaG93TWFueSA8IDApIHtcbiAgICAgICAgcmV0dXJuIGFwaVJlamVjdGlvbihcImV4cGVjdGluZyBhIHBvc2l0aXZlIGludGVnZXJcXHUwMDBhXFx1MDAwYSAgICBTZWUgaHR0cDovL2dvby5nbC9NcXJGbVhcXHUwMDBhXCIpO1xuICAgIH1cbiAgICB2YXIgcmV0ID0gbmV3IFNvbWVQcm9taXNlQXJyYXkocHJvbWlzZXMpO1xuICAgIHZhciBwcm9taXNlID0gcmV0LnByb21pc2UoKTtcbiAgICByZXQuc2V0SG93TWFueShob3dNYW55KTtcbiAgICByZXQuaW5pdCgpO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5Qcm9taXNlLnNvbWUgPSBmdW5jdGlvbiAocHJvbWlzZXMsIGhvd01hbnkpIHtcbiAgICByZXR1cm4gc29tZShwcm9taXNlcywgaG93TWFueSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5zb21lID0gZnVuY3Rpb24gKGhvd01hbnkpIHtcbiAgICByZXR1cm4gc29tZSh0aGlzLCBob3dNYW55KTtcbn07XG5cblByb21pc2UuX1NvbWVQcm9taXNlQXJyYXkgPSBTb21lUHJvbWlzZUFycmF5O1xufTtcblxufSx7XCIuL2Vycm9yc1wiOjU4LFwiLi91dGlsXCI6ODJ9XSw3ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5cInVzZSBzdHJpY3RcIjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oUHJvbWlzZSkge1xuZnVuY3Rpb24gUHJvbWlzZUluc3BlY3Rpb24ocHJvbWlzZSkge1xuICAgIGlmIChwcm9taXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3RhcmdldCgpO1xuICAgICAgICB0aGlzLl9iaXRGaWVsZCA9IHByb21pc2UuX2JpdEZpZWxkO1xuICAgICAgICB0aGlzLl9zZXR0bGVkVmFsdWVGaWVsZCA9IHByb21pc2UuX2lzRmF0ZVNlYWxlZCgpXG4gICAgICAgICAgICA/IHByb21pc2UuX3NldHRsZWRWYWx1ZSgpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5fYml0RmllbGQgPSAwO1xuICAgICAgICB0aGlzLl9zZXR0bGVkVmFsdWVGaWVsZCA9IHVuZGVmaW5lZDtcbiAgICB9XG59XG5cblByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS5fc2V0dGxlZFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRsZWRWYWx1ZUZpZWxkO1xufTtcblxudmFyIHZhbHVlID0gUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLnZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3QgZ2V0IGZ1bGZpbGxtZW50IHZhbHVlIG9mIGEgbm9uLWZ1bGZpbGxlZCBwcm9taXNlXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NldHRsZWRWYWx1ZSgpO1xufTtcblxudmFyIHJlYXNvbiA9IFByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS5lcnJvciA9XG5Qcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUucmVhc29uID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5pc1JlamVjdGVkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbm5vdCBnZXQgcmVqZWN0aW9uIHJlYXNvbiBvZiBhIG5vbi1yZWplY3RlZCBwcm9taXNlXFx1MDAwYVxcdTAwMGEgICAgU2VlIGh0dHA6Ly9nb28uZ2wvTXFyRm1YXFx1MDAwYVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NldHRsZWRWYWx1ZSgpO1xufTtcblxudmFyIGlzRnVsZmlsbGVkID0gUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLmlzRnVsZmlsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDMzNTU0NDMyKSAhPT0gMDtcbn07XG5cbnZhciBpc1JlamVjdGVkID0gUHJvbWlzZUluc3BlY3Rpb24ucHJvdG90eXBlLmlzUmVqZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDE2Nzc3MjE2KSAhPT0gMDtcbn07XG5cbnZhciBpc1BlbmRpbmcgPSBQcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUuaXNQZW5kaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiA1MDM5NzE4NCkgPT09IDA7XG59O1xuXG52YXIgaXNSZXNvbHZlZCA9IFByb21pc2VJbnNwZWN0aW9uLnByb3RvdHlwZS5pc1Jlc29sdmVkID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiA1MDMzMTY0OCkgIT09IDA7XG59O1xuXG5Qcm9taXNlSW5zcGVjdGlvbi5wcm90b3R5cGUuaXNDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHRoaXMuX2JpdEZpZWxkICYgODQ1NDE0NCkgIT09IDA7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fX2lzQ2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICh0aGlzLl9iaXRGaWVsZCAmIDY1NTM2KSA9PT0gNjU1MzY7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5faXNDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0KCkuX19pc0NhbmNlbGxlZCgpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuaXNDYW5jZWxsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKHRoaXMuX3RhcmdldCgpLl9iaXRGaWVsZCAmIDg0NTQxNDQpICE9PSAwO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuaXNQZW5kaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlzUGVuZGluZy5jYWxsKHRoaXMuX3RhcmdldCgpKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzUmVqZWN0ZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gaXNSZWplY3RlZC5jYWxsKHRoaXMuX3RhcmdldCgpKTtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmlzRnVsZmlsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlzRnVsZmlsbGVkLmNhbGwodGhpcy5fdGFyZ2V0KCkpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUuaXNSZXNvbHZlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBpc1Jlc29sdmVkLmNhbGwodGhpcy5fdGFyZ2V0KCkpO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWUuY2FsbCh0aGlzLl90YXJnZXQoKSk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5yZWFzb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0KCk7XG4gICAgdGFyZ2V0Ll91bnNldFJlamVjdGlvbklzVW5oYW5kbGVkKCk7XG4gICAgcmV0dXJuIHJlYXNvbi5jYWxsKHRhcmdldCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fdmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGxlZFZhbHVlKCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZS5fcmVhc29uID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fdW5zZXRSZWplY3Rpb25Jc1VuaGFuZGxlZCgpO1xuICAgIHJldHVybiB0aGlzLl9zZXR0bGVkVmFsdWUoKTtcbn07XG5cblByb21pc2UuUHJvbWlzZUluc3BlY3Rpb24gPSBQcm9taXNlSW5zcGVjdGlvbjtcbn07XG5cbn0se31dLDc5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcblwidXNlIHN0cmljdFwiO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihQcm9taXNlLCBJTlRFUk5BTCkge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcbnZhciBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG5cbmZ1bmN0aW9uIHRyeUNvbnZlcnRUb1Byb21pc2Uob2JqLCBjb250ZXh0KSB7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikpIHtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBvYmo7XG4gICAgICAgIHZhciB0aGVuID0gZ2V0VGhlbihvYmopO1xuICAgICAgICBpZiAodGhlbiA9PT0gZXJyb3JPYmopIHtcbiAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0Ll9wdXNoQ29udGV4dCgpO1xuICAgICAgICAgICAgdmFyIHJldCA9IFByb21pc2UucmVqZWN0KHRoZW4uZSk7XG4gICAgICAgICAgICBpZiAoY29udGV4dCkgY29udGV4dC5fcG9wQ29udGV4dCgpO1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBpZiAoaXNBbnlCbHVlYmlyZFByb21pc2Uob2JqKSkge1xuICAgICAgICAgICAgICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgICAgICAgICAgb2JqLl90aGVuKFxuICAgICAgICAgICAgICAgICAgICByZXQuX2Z1bGZpbGwsXG4gICAgICAgICAgICAgICAgICAgIHJldC5fcmVqZWN0LFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkb1RoZW5hYmxlKG9iaiwgdGhlbiwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gZG9HZXRUaGVuKG9iaikge1xuICAgIHJldHVybiBvYmoudGhlbjtcbn1cblxuZnVuY3Rpb24gZ2V0VGhlbihvYmopIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZG9HZXRUaGVuKG9iaik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvck9iai5lID0gZTtcbiAgICAgICAgcmV0dXJuIGVycm9yT2JqO1xuICAgIH1cbn1cblxudmFyIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbmZ1bmN0aW9uIGlzQW55Qmx1ZWJpcmRQcm9taXNlKG9iaikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBoYXNQcm9wLmNhbGwob2JqLCBcIl9wcm9taXNlMFwiKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvVGhlbmFibGUoeCwgdGhlbiwgY29udGV4dCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoSU5URVJOQUwpO1xuICAgIHZhciByZXQgPSBwcm9taXNlO1xuICAgIGlmIChjb250ZXh0KSBjb250ZXh0Ll9wdXNoQ29udGV4dCgpO1xuICAgIHByb21pc2UuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgaWYgKGNvbnRleHQpIGNvbnRleHQuX3BvcENvbnRleHQoKTtcbiAgICB2YXIgc3luY2hyb25vdXMgPSB0cnVlO1xuICAgIHZhciByZXN1bHQgPSB1dGlsLnRyeUNhdGNoKHRoZW4pLmNhbGwoeCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICBzeW5jaHJvbm91cyA9IGZhbHNlO1xuXG4gICAgaWYgKHByb21pc2UgJiYgcmVzdWx0ID09PSBlcnJvck9iaikge1xuICAgICAgICBwcm9taXNlLl9yZWplY3RDYWxsYmFjayhyZXN1bHQuZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHByb21pc2UgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHByb21pc2UuX3Jlc29sdmVDYWxsYmFjayh2YWx1ZSk7XG4gICAgICAgIHByb21pc2UgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlamVjdChyZWFzb24pIHtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHByb21pc2UuX3JlamVjdENhbGxiYWNrKHJlYXNvbiwgc3luY2hyb25vdXMsIHRydWUpO1xuICAgICAgICBwcm9taXNlID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxucmV0dXJuIHRyeUNvbnZlcnRUb1Byb21pc2U7XG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sODA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKFByb21pc2UsIElOVEVSTkFMLCBkZWJ1Zykge1xudmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xudmFyIFRpbWVvdXRFcnJvciA9IFByb21pc2UuVGltZW91dEVycm9yO1xuXG5mdW5jdGlvbiBIYW5kbGVXcmFwcGVyKGhhbmRsZSkgIHtcbiAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTtcbn1cblxuSGFuZGxlV3JhcHBlci5wcm90b3R5cGUuX3Jlc3VsdENhbmNlbGxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmhhbmRsZSk7XG59O1xuXG52YXIgYWZ0ZXJWYWx1ZSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBkZWxheSgrdGhpcykudGhlblJldHVybih2YWx1ZSk7IH07XG52YXIgZGVsYXkgPSBQcm9taXNlLmRlbGF5ID0gZnVuY3Rpb24gKG1zLCB2YWx1ZSkge1xuICAgIHZhciByZXQ7XG4gICAgdmFyIGhhbmRsZTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXQgPSBQcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICAgICAgICAgICAgLl90aGVuKGFmdGVyVmFsdWUsIG51bGwsIG51bGwsIG1zLCB1bmRlZmluZWQpO1xuICAgICAgICBpZiAoZGVidWcuY2FuY2VsbGF0aW9uKCkgJiYgdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXQuX3NldE9uQ2FuY2VsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IG5ldyBQcm9taXNlKElOVEVSTkFMKTtcbiAgICAgICAgaGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsgcmV0Ll9mdWxmaWxsKCk7IH0sICttcyk7XG4gICAgICAgIGlmIChkZWJ1Zy5jYW5jZWxsYXRpb24oKSkge1xuICAgICAgICAgICAgcmV0Ll9zZXRPbkNhbmNlbChuZXcgSGFuZGxlV3JhcHBlcihoYW5kbGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXQuX2NhcHR1cmVTdGFja1RyYWNlKCk7XG4gICAgfVxuICAgIHJldC5fc2V0QXN5bmNHdWFyYW50ZWVkKCk7XG4gICAgcmV0dXJuIHJldDtcbn07XG5cblByb21pc2UucHJvdG90eXBlLmRlbGF5ID0gZnVuY3Rpb24gKG1zKSB7XG4gICAgcmV0dXJuIGRlbGF5KG1zLCB0aGlzKTtcbn07XG5cbnZhciBhZnRlclRpbWVvdXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgbWVzc2FnZSwgcGFyZW50KSB7XG4gICAgdmFyIGVycjtcbiAgICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgZXJyID0gbWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVyciA9IG5ldyBUaW1lb3V0RXJyb3IoXCJvcGVyYXRpb24gdGltZWQgb3V0XCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IFRpbWVvdXRFcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdXRpbC5tYXJrQXNPcmlnaW5hdGluZ0Zyb21SZWplY3Rpb24oZXJyKTtcbiAgICBwcm9taXNlLl9hdHRhY2hFeHRyYVRyYWNlKGVycik7XG4gICAgcHJvbWlzZS5fcmVqZWN0KGVycik7XG5cbiAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgcGFyZW50LmNhbmNlbCgpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NDbGVhcih2YWx1ZSkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmhhbmRsZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBmYWlsdXJlQ2xlYXIocmVhc29uKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGFuZGxlKTtcbiAgICB0aHJvdyByZWFzb247XG59XG5cblByb21pc2UucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbiAobXMsIG1lc3NhZ2UpIHtcbiAgICBtcyA9ICttcztcbiAgICB2YXIgcmV0LCBwYXJlbnQ7XG5cbiAgICB2YXIgaGFuZGxlV3JhcHBlciA9IG5ldyBIYW5kbGVXcmFwcGVyKHNldFRpbWVvdXQoZnVuY3Rpb24gdGltZW91dFRpbWVvdXQoKSB7XG4gICAgICAgIGlmIChyZXQuaXNQZW5kaW5nKCkpIHtcbiAgICAgICAgICAgIGFmdGVyVGltZW91dChyZXQsIG1lc3NhZ2UsIHBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9LCBtcykpO1xuXG4gICAgaWYgKGRlYnVnLmNhbmNlbGxhdGlvbigpKSB7XG4gICAgICAgIHBhcmVudCA9IHRoaXMudGhlbigpO1xuICAgICAgICByZXQgPSBwYXJlbnQuX3RoZW4oc3VjY2Vzc0NsZWFyLCBmYWlsdXJlQ2xlYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCBoYW5kbGVXcmFwcGVyLCB1bmRlZmluZWQpO1xuICAgICAgICByZXQuX3NldE9uQ2FuY2VsKGhhbmRsZVdyYXBwZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldCA9IHRoaXMuX3RoZW4oc3VjY2Vzc0NsZWFyLCBmYWlsdXJlQ2xlYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLCBoYW5kbGVXcmFwcGVyLCB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG59O1xuXG59O1xuXG59LHtcIi4vdXRpbFwiOjgyfV0sODE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChQcm9taXNlLCBhcGlSZWplY3Rpb24sIHRyeUNvbnZlcnRUb1Byb21pc2UsXG4gICAgY3JlYXRlQ29udGV4dCwgSU5URVJOQUwsIGRlYnVnKSB7XG4gICAgdmFyIHV0aWwgPSByZXF1aXJlKFwiLi91dGlsXCIpO1xuICAgIHZhciBUeXBlRXJyb3IgPSByZXF1aXJlKFwiLi9lcnJvcnNcIikuVHlwZUVycm9yO1xuICAgIHZhciBpbmhlcml0cyA9IHJlcXVpcmUoXCIuL3V0aWxcIikuaW5oZXJpdHM7XG4gICAgdmFyIGVycm9yT2JqID0gdXRpbC5lcnJvck9iajtcbiAgICB2YXIgdHJ5Q2F0Y2ggPSB1dGlsLnRyeUNhdGNoO1xuICAgIHZhciBOVUxMID0ge307XG5cbiAgICBmdW5jdGlvbiB0aHJvd2VyKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGU7fSwgMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FzdFByZXNlcnZpbmdEaXNwb3NhYmxlKHRoZW5hYmxlKSB7XG4gICAgICAgIHZhciBtYXliZVByb21pc2UgPSB0cnlDb252ZXJ0VG9Qcm9taXNlKHRoZW5hYmxlKTtcbiAgICAgICAgaWYgKG1heWJlUHJvbWlzZSAhPT0gdGhlbmFibGUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGVuYWJsZS5faXNEaXNwb3NhYmxlID09PSBcImZ1bmN0aW9uXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGVuYWJsZS5fZ2V0RGlzcG9zZXIgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgdGhlbmFibGUuX2lzRGlzcG9zYWJsZSgpKSB7XG4gICAgICAgICAgICBtYXliZVByb21pc2UuX3NldERpc3Bvc2FibGUodGhlbmFibGUuX2dldERpc3Bvc2VyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXliZVByb21pc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc3Bvc2UocmVzb3VyY2VzLCBpbnNwZWN0aW9uKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdmFyIGxlbiA9IHJlc291cmNlcy5sZW5ndGg7XG4gICAgICAgIHZhciByZXQgPSBuZXcgUHJvbWlzZShJTlRFUk5BTCk7XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yKCkge1xuICAgICAgICAgICAgaWYgKGkgPj0gbGVuKSByZXR1cm4gcmV0Ll9mdWxmaWxsKCk7XG4gICAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gY2FzdFByZXNlcnZpbmdEaXNwb3NhYmxlKHJlc291cmNlc1tpKytdKTtcbiAgICAgICAgICAgIGlmIChtYXliZVByb21pc2UgaW5zdGFuY2VvZiBQcm9taXNlICYmXG4gICAgICAgICAgICAgICAgbWF5YmVQcm9taXNlLl9pc0Rpc3Bvc2FibGUoKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG1heWJlUHJvbWlzZSA9IHRyeUNvbnZlcnRUb1Byb21pc2UoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXliZVByb21pc2UuX2dldERpc3Bvc2VyKCkudHJ5RGlzcG9zZShpbnNwZWN0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcy5wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd2VyKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobWF5YmVQcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlLl90aGVuKGl0ZXJhdG9yLCB0aHJvd2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZXJhdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgaXRlcmF0b3IoKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEaXNwb3NlcihkYXRhLCBwcm9taXNlLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLl9wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuXG4gICAgRGlzcG9zZXIucHJvdG90eXBlLmRhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH07XG5cbiAgICBEaXNwb3Nlci5wcm90b3R5cGUucHJvbWlzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfTtcblxuICAgIERpc3Bvc2VyLnByb3RvdHlwZS5yZXNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvbWlzZSgpLmlzRnVsZmlsbGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb21pc2UoKS52YWx1ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOVUxMO1xuICAgIH07XG5cbiAgICBEaXNwb3Nlci5wcm90b3R5cGUudHJ5RGlzcG9zZSA9IGZ1bmN0aW9uKGluc3BlY3Rpb24pIHtcbiAgICAgICAgdmFyIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSgpO1xuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuX2NvbnRleHQ7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIGNvbnRleHQuX3B1c2hDb250ZXh0KCk7XG4gICAgICAgIHZhciByZXQgPSByZXNvdXJjZSAhPT0gTlVMTFxuICAgICAgICAgICAgPyB0aGlzLmRvRGlzcG9zZShyZXNvdXJjZSwgaW5zcGVjdGlvbikgOiBudWxsO1xuICAgICAgICBpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSBjb250ZXh0Ll9wb3BDb250ZXh0KCk7XG4gICAgICAgIHRoaXMuX3Byb21pc2UuX3Vuc2V0RGlzcG9zYWJsZSgpO1xuICAgICAgICB0aGlzLl9kYXRhID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuXG4gICAgRGlzcG9zZXIuaXNEaXNwb3NlciA9IGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIHJldHVybiAoZCAhPSBudWxsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGQucmVzb3VyY2UgPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBkLnRyeURpc3Bvc2UgPT09IFwiZnVuY3Rpb25cIik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIEZ1bmN0aW9uRGlzcG9zZXIoZm4sIHByb21pc2UsIGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciQoZm4sIHByb21pc2UsIGNvbnRleHQpO1xuICAgIH1cbiAgICBpbmhlcml0cyhGdW5jdGlvbkRpc3Bvc2VyLCBEaXNwb3Nlcik7XG5cbiAgICBGdW5jdGlvbkRpc3Bvc2VyLnByb3RvdHlwZS5kb0Rpc3Bvc2UgPSBmdW5jdGlvbiAocmVzb3VyY2UsIGluc3BlY3Rpb24pIHtcbiAgICAgICAgdmFyIGZuID0gdGhpcy5kYXRhKCk7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHJlc291cmNlLCByZXNvdXJjZSwgaW5zcGVjdGlvbik7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG1heWJlVW53cmFwRGlzcG9zZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKERpc3Bvc2VyLmlzRGlzcG9zZXIodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlc1t0aGlzLmluZGV4XS5fc2V0RGlzcG9zYWJsZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucHJvbWlzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBSZXNvdXJjZUxpc3QobGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xuICAgICAgICB0aGlzLnByb21pc2UgPSBudWxsO1xuICAgICAgICB0aGlzW2xlbmd0aC0xXSA9IG51bGw7XG4gICAgfVxuXG4gICAgUmVzb3VyY2VMaXN0LnByb3RvdHlwZS5fcmVzdWx0Q2FuY2VsbGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzW2ldO1xuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBQcm9taXNlLnVzaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbiA8IDIpIHJldHVybiBhcGlSZWplY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICBcInlvdSBtdXN0IHBhc3MgYXQgbGVhc3QgMiBhcmd1bWVudHMgdG8gUHJvbWlzZS51c2luZ1wiKTtcbiAgICAgICAgdmFyIGZuID0gYXJndW1lbnRzW2xlbiAtIDFdO1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcGlSZWplY3Rpb24oXCJleHBlY3RpbmcgYSBmdW5jdGlvbiBidXQgZ290IFwiICsgdXRpbC5jbGFzc1N0cmluZyhmbikpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbnB1dDtcbiAgICAgICAgdmFyIHNwcmVhZEFyZ3MgPSB0cnVlO1xuICAgICAgICBpZiAobGVuID09PSAyICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICBsZW4gPSBpbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICBzcHJlYWRBcmdzID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIGxlbi0tO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXNvdXJjZXMgPSBuZXcgUmVzb3VyY2VMaXN0KGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIHZhciByZXNvdXJjZSA9IGlucHV0W2ldO1xuICAgICAgICAgICAgaWYgKERpc3Bvc2VyLmlzRGlzcG9zZXIocmVzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRpc3Bvc2VyID0gcmVzb3VyY2U7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZS5wcm9taXNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UuX3NldERpc3Bvc2FibGUoZGlzcG9zZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF5YmVQcm9taXNlID0gdHJ5Q29udmVydFRvUHJvbWlzZShyZXNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPVxuICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVQcm9taXNlLl90aGVuKG1heWJlVW53cmFwRGlzcG9zZXIsIG51bGwsIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaVxuICAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc291cmNlc1tpXSA9IHJlc291cmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZmxlY3RlZFJlc291cmNlcyA9IG5ldyBBcnJheShyZXNvdXJjZXMubGVuZ3RoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZsZWN0ZWRSZXNvdXJjZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHJlZmxlY3RlZFJlc291cmNlc1tpXSA9IFByb21pc2UucmVzb2x2ZShyZXNvdXJjZXNbaV0pLnJlZmxlY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZXN1bHRQcm9taXNlID0gUHJvbWlzZS5hbGwocmVmbGVjdGVkUmVzb3VyY2VzKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oaW5zcGVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluc3BlY3Rpb25zLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbnNwZWN0aW9uID0gaW5zcGVjdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnNwZWN0aW9uLmlzUmVqZWN0ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JPYmouZSA9IGluc3BlY3Rpb24uZXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9iajtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaW5zcGVjdGlvbi5pc0Z1bGZpbGxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQcm9taXNlLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluc3BlY3Rpb25zW2ldID0gaW5zcGVjdGlvbi52YWx1ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9taXNlLl9wdXNoQ29udGV4dCgpO1xuXG4gICAgICAgICAgICAgICAgZm4gPSB0cnlDYXRjaChmbik7XG4gICAgICAgICAgICAgICAgdmFyIHJldCA9IHNwcmVhZEFyZ3NcbiAgICAgICAgICAgICAgICAgICAgPyBmbi5hcHBseSh1bmRlZmluZWQsIGluc3BlY3Rpb25zKSA6IGZuKGluc3BlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZUNyZWF0ZWQgPSBwcm9taXNlLl9wb3BDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgZGVidWcuY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zKFxuICAgICAgICAgICAgICAgICAgICByZXQsIHByb21pc2VDcmVhdGVkLCBcIlByb21pc2UudXNpbmdcIiwgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBwcm9taXNlID0gcmVzdWx0UHJvbWlzZS5sYXN0bHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgaW5zcGVjdGlvbiA9IG5ldyBQcm9taXNlLlByb21pc2VJbnNwZWN0aW9uKHJlc3VsdFByb21pc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGRpc3Bvc2UocmVzb3VyY2VzLCBpbnNwZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc291cmNlcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgcHJvbWlzZS5fc2V0T25DYW5jZWwocmVzb3VyY2VzKTtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlLl9zZXREaXNwb3NhYmxlID0gZnVuY3Rpb24gKGRpc3Bvc2VyKSB7XG4gICAgICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgfCAxMzEwNzI7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VyID0gZGlzcG9zZXI7XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlLl9pc0Rpc3Bvc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fYml0RmllbGQgJiAxMzEwNzIpID4gMDtcbiAgICB9O1xuXG4gICAgUHJvbWlzZS5wcm90b3R5cGUuX2dldERpc3Bvc2VyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcG9zZXI7XG4gICAgfTtcblxuICAgIFByb21pc2UucHJvdG90eXBlLl91bnNldERpc3Bvc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2JpdEZpZWxkID0gdGhpcy5fYml0RmllbGQgJiAofjEzMTA3Mik7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VyID0gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICBQcm9taXNlLnByb3RvdHlwZS5kaXNwb3NlciA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICBpZiAodHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25EaXNwb3NlcihmbiwgdGhpcywgY3JlYXRlQ29udGV4dCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCk7XG4gICAgfTtcblxufTtcblxufSx7XCIuL2Vycm9yc1wiOjU4LFwiLi91dGlsXCI6ODJ9XSw4MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKHByb2Nlc3MsZ2xvYmFsKXtcblwidXNlIHN0cmljdFwiO1xudmFyIGVzNSA9IHJlcXVpcmUoXCIuL2VzNVwiKTtcbnZhciBjYW5FdmFsdWF0ZSA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gXCJ1bmRlZmluZWRcIjtcblxudmFyIGVycm9yT2JqID0ge2U6IHt9fTtcbnZhciB0cnlDYXRjaFRhcmdldDtcbnZhciBnbG9iYWxPYmplY3QgPSB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOlxuICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOlxuICAgIHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOlxuICAgIHRoaXMgIT09IHVuZGVmaW5lZCA/IHRoaXMgOiBudWxsO1xuXG5mdW5jdGlvbiB0cnlDYXRjaGVyKCkge1xuICAgIHRyeSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSB0cnlDYXRjaFRhcmdldDtcbiAgICAgICAgdHJ5Q2F0Y2hUYXJnZXQgPSBudWxsO1xuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlcnJvck9iai5lID0gZTtcbiAgICAgICAgcmV0dXJuIGVycm9yT2JqO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyeUNhdGNoKGZuKSB7XG4gICAgdHJ5Q2F0Y2hUYXJnZXQgPSBmbjtcbiAgICByZXR1cm4gdHJ5Q2F0Y2hlcjtcbn1cblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24oQ2hpbGQsIFBhcmVudCkge1xuICAgIHZhciBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgICBmdW5jdGlvbiBUKCkge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gQ2hpbGQ7XG4gICAgICAgIHRoaXMuY29uc3RydWN0b3IkID0gUGFyZW50O1xuICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gUGFyZW50LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgaWYgKGhhc1Byb3AuY2FsbChQYXJlbnQucHJvdG90eXBlLCBwcm9wZXJ0eU5hbWUpICYmXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmNoYXJBdChwcm9wZXJ0eU5hbWUubGVuZ3RoLTEpICE9PSBcIiRcIlxuICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZSArIFwiJFwiXSA9IFBhcmVudC5wcm90b3R5cGVbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBULnByb3RvdHlwZSA9IFBhcmVudC5wcm90b3R5cGU7XG4gICAgQ2hpbGQucHJvdG90eXBlID0gbmV3IFQoKTtcbiAgICByZXR1cm4gQ2hpbGQucHJvdG90eXBlO1xufTtcblxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWwpIHtcbiAgICByZXR1cm4gdmFsID09IG51bGwgfHwgdmFsID09PSB0cnVlIHx8IHZhbCA9PT0gZmFsc2UgfHxcbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiO1xuXG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiIHx8XG4gICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gbWF5YmVXcmFwQXNFcnJvcihtYXliZUVycm9yKSB7XG4gICAgaWYgKCFpc1ByaW1pdGl2ZShtYXliZUVycm9yKSkgcmV0dXJuIG1heWJlRXJyb3I7XG5cbiAgICByZXR1cm4gbmV3IEVycm9yKHNhZmVUb1N0cmluZyhtYXliZUVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHdpdGhBcHBlbmRlZCh0YXJnZXQsIGFwcGVuZGVlKSB7XG4gICAgdmFyIGxlbiA9IHRhcmdldC5sZW5ndGg7XG4gICAgdmFyIHJldCA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gdGFyZ2V0W2ldO1xuICAgIH1cbiAgICByZXRbaV0gPSBhcHBlbmRlZTtcbiAgICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBnZXREYXRhUHJvcGVydHlPckRlZmF1bHQob2JqLCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmIChlczUuaXNFUzUpIHtcbiAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcblxuICAgICAgICBpZiAoZGVzYyAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVzYy5nZXQgPT0gbnVsbCAmJiBkZXNjLnNldCA9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gZGVzYy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSA/IG9ialtrZXldIDogdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbm90RW51bWVyYWJsZVByb3Aob2JqLCBuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChpc1ByaW1pdGl2ZShvYmopKSByZXR1cm4gb2JqO1xuICAgIHZhciBkZXNjcmlwdG9yID0ge1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgfTtcbiAgICBlczUuZGVmaW5lUHJvcGVydHkob2JqLCBuYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gb2JqO1xufVxuXG5mdW5jdGlvbiB0aHJvd2VyKHIpIHtcbiAgICB0aHJvdyByO1xufVxuXG52YXIgaW5oZXJpdGVkRGF0YUtleXMgPSAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIGV4Y2x1ZGVkUHJvdG90eXBlcyA9IFtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLFxuICAgICAgICBGdW5jdGlvbi5wcm90b3R5cGVcbiAgICBdO1xuXG4gICAgdmFyIGlzRXhjbHVkZWRQcm90byA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4Y2x1ZGVkUHJvdG90eXBlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGV4Y2x1ZGVkUHJvdG90eXBlc1tpXSA9PT0gdmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBpZiAoZXM1LmlzRVM1KSB7XG4gICAgICAgIHZhciBnZXRLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgICAgIHZhciB2aXNpdGVkS2V5cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICB3aGlsZSAob2JqICE9IG51bGwgJiYgIWlzRXhjbHVkZWRQcm90byhvYmopKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleXM7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAga2V5cyA9IGdldEtleXMob2JqKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWRLZXlzW2tleV0pIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB2aXNpdGVkS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MgIT0gbnVsbCAmJiBkZXNjLmdldCA9PSBudWxsICYmIGRlc2Muc2V0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqID0gZXM1LmdldFByb3RvdHlwZU9mKG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0V4Y2x1ZGVkUHJvdG8ob2JqKSkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgdmFyIHJldCA9IFtdO1xuXG4gICAgICAgICAgICAvKmpzaGludCBmb3JpbjpmYWxzZSAqL1xuICAgICAgICAgICAgZW51bWVyYXRpb246IGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcC5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhjbHVkZWRQcm90b3R5cGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJvcC5jYWxsKGV4Y2x1ZGVkUHJvdG90eXBlc1tpXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGVudW1lcmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfTtcbiAgICB9XG5cbn0pKCk7XG5cbnZhciB0aGlzQXNzaWdubWVudFBhdHRlcm4gPSAvdGhpc1xccypcXC5cXHMqXFxTK1xccyo9LztcbmZ1bmN0aW9uIGlzQ2xhc3MoZm4pIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gZXM1Lm5hbWVzKGZuLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgIHZhciBoYXNNZXRob2RzID0gZXM1LmlzRVM1ICYmIGtleXMubGVuZ3RoID4gMTtcbiAgICAgICAgICAgIHZhciBoYXNNZXRob2RzT3RoZXJUaGFuQ29uc3RydWN0b3IgPSBrZXlzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAhKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09IFwiY29uc3RydWN0b3JcIik7XG4gICAgICAgICAgICB2YXIgaGFzVGhpc0Fzc2lnbm1lbnRBbmRTdGF0aWNNZXRob2RzID1cbiAgICAgICAgICAgICAgICB0aGlzQXNzaWdubWVudFBhdHRlcm4udGVzdChmbiArIFwiXCIpICYmIGVzNS5uYW1lcyhmbikubGVuZ3RoID4gMDtcblxuICAgICAgICAgICAgaWYgKGhhc01ldGhvZHMgfHwgaGFzTWV0aG9kc090aGVyVGhhbkNvbnN0cnVjdG9yIHx8XG4gICAgICAgICAgICAgICAgaGFzVGhpc0Fzc2lnbm1lbnRBbmRTdGF0aWNNZXRob2RzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9GYXN0UHJvcGVydGllcyhvYmopIHtcbiAgICAvKmpzaGludCAtVzAyNywtVzA1NSwtVzAzMSovXG4gICAgZnVuY3Rpb24gRmFrZUNvbnN0cnVjdG9yKCkge31cbiAgICBGYWtlQ29uc3RydWN0b3IucHJvdG90eXBlID0gb2JqO1xuICAgIHZhciBsID0gODtcbiAgICB3aGlsZSAobC0tKSBuZXcgRmFrZUNvbnN0cnVjdG9yKCk7XG4gICAgcmV0dXJuIG9iajtcbiAgICBldmFsKG9iaik7XG59XG5cbnZhciByaWRlbnQgPSAvXlthLXokX11bYS16JF8wLTldKiQvaTtcbmZ1bmN0aW9uIGlzSWRlbnRpZmllcihzdHIpIHtcbiAgICByZXR1cm4gcmlkZW50LnRlc3Qoc3RyKTtcbn1cblxuZnVuY3Rpb24gZmlsbGVkUmFuZ2UoY291bnQsIHByZWZpeCwgc3VmZml4KSB7XG4gICAgdmFyIHJldCA9IG5ldyBBcnJheShjb3VudCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgcmV0W2ldID0gcHJlZml4ICsgaSArIHN1ZmZpeDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gc2FmZVRvU3RyaW5nKG9iaikge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBvYmogKyBcIlwiO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIFwiW25vIHN0cmluZyByZXByZXNlbnRhdGlvbl1cIjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICAgICB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgIHR5cGVvZiBvYmoubWVzc2FnZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICB0eXBlb2Ygb2JqLm5hbWUgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIG1hcmtBc09yaWdpbmF0aW5nRnJvbVJlamVjdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgbm90RW51bWVyYWJsZVByb3AoZSwgXCJpc09wZXJhdGlvbmFsXCIsIHRydWUpO1xuICAgIH1cbiAgICBjYXRjaChpZ25vcmUpIHt9XG59XG5cbmZ1bmN0aW9uIG9yaWdpbmF0ZXNGcm9tUmVqZWN0aW9uKGUpIHtcbiAgICBpZiAoZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICgoZSBpbnN0YW5jZW9mIEVycm9yW1wiX19CbHVlYmlyZEVycm9yVHlwZXNfX1wiXS5PcGVyYXRpb25hbEVycm9yKSB8fFxuICAgICAgICBlW1wiaXNPcGVyYXRpb25hbFwiXSA9PT0gdHJ1ZSk7XG59XG5cbmZ1bmN0aW9uIGNhbkF0dGFjaFRyYWNlKG9iaikge1xuICAgIHJldHVybiBpc0Vycm9yKG9iaikgJiYgZXM1LnByb3BlcnR5SXNXcml0YWJsZShvYmosIFwic3RhY2tcIik7XG59XG5cbnZhciBlbnN1cmVFcnJvck9iamVjdCA9IChmdW5jdGlvbigpIHtcbiAgICBpZiAoIShcInN0YWNrXCIgaW4gbmV3IEVycm9yKCkpKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGNhbkF0dGFjaFRyYWNlKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgdHJ5IHt0aHJvdyBuZXcgRXJyb3Ioc2FmZVRvU3RyaW5nKHZhbHVlKSk7fVxuICAgICAgICAgICAgY2F0Y2goZXJyKSB7cmV0dXJuIGVycjt9XG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoY2FuQXR0YWNoVHJhY2UodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKHNhZmVUb1N0cmluZyh2YWx1ZSkpO1xuICAgICAgICB9O1xuICAgIH1cbn0pKCk7XG5cbmZ1bmN0aW9uIGNsYXNzU3RyaW5nKG9iaikge1xuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaik7XG59XG5cbmZ1bmN0aW9uIGNvcHlEZXNjcmlwdG9ycyhmcm9tLCB0bywgZmlsdGVyKSB7XG4gICAgdmFyIGtleXMgPSBlczUubmFtZXMoZnJvbSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICBpZiAoZmlsdGVyKGtleSkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXM1LmRlZmluZVByb3BlcnR5KHRvLCBrZXksIGVzNS5nZXREZXNjcmlwdG9yKGZyb20sIGtleSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaWdub3JlKSB7fVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgYXNBcnJheSA9IGZ1bmN0aW9uKHYpIHtcbiAgICBpZiAoZXM1LmlzQXJyYXkodikpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgdmFyIEFycmF5RnJvbSA9IHR5cGVvZiBBcnJheS5mcm9tID09PSBcImZ1bmN0aW9uXCIgPyBmdW5jdGlvbih2KSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHYpO1xuICAgIH0gOiBmdW5jdGlvbih2KSB7XG4gICAgICAgIHZhciByZXQgPSBbXTtcbiAgICAgICAgdmFyIGl0ID0gdltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIHZhciBpdFJlc3VsdDtcbiAgICAgICAgd2hpbGUgKCEoKGl0UmVzdWx0ID0gaXQubmV4dCgpKS5kb25lKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goaXRSZXN1bHQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIGFzQXJyYXkgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgIGlmIChlczUuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH0gZWxzZSBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2W1N5bWJvbC5pdGVyYXRvcl0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5RnJvbSh2KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xufVxuXG52YXIgaXNOb2RlID0gdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgY2xhc3NTdHJpbmcocHJvY2VzcykudG9Mb3dlckNhc2UoKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCI7XG5cbnZhciBoYXNFbnZWYXJpYWJsZXMgPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBwcm9jZXNzLmVudiAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZnVuY3Rpb24gZW52KGtleSkge1xuICAgIHJldHVybiBoYXNFbnZWYXJpYWJsZXMgPyBwcm9jZXNzLmVudltrZXldIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVQcm9taXNlKCkge1xuICAgIGlmICh0eXBlb2YgUHJvbWlzZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7fSk7XG4gICAgICAgICAgICBpZiAoe30udG9TdHJpbmcuY2FsbChwcm9taXNlKSA9PT0gXCJbb2JqZWN0IFByb21pc2VdXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvbWFpbkJpbmQoc2VsZiwgY2IpIHtcbiAgICByZXR1cm4gc2VsZi5iaW5kKGNiKTtcbn1cblxudmFyIHJldCA9IHtcbiAgICBpc0NsYXNzOiBpc0NsYXNzLFxuICAgIGlzSWRlbnRpZmllcjogaXNJZGVudGlmaWVyLFxuICAgIGluaGVyaXRlZERhdGFLZXlzOiBpbmhlcml0ZWREYXRhS2V5cyxcbiAgICBnZXREYXRhUHJvcGVydHlPckRlZmF1bHQ6IGdldERhdGFQcm9wZXJ0eU9yRGVmYXVsdCxcbiAgICB0aHJvd2VyOiB0aHJvd2VyLFxuICAgIGlzQXJyYXk6IGVzNS5pc0FycmF5LFxuICAgIGFzQXJyYXk6IGFzQXJyYXksXG4gICAgbm90RW51bWVyYWJsZVByb3A6IG5vdEVudW1lcmFibGVQcm9wLFxuICAgIGlzUHJpbWl0aXZlOiBpc1ByaW1pdGl2ZSxcbiAgICBpc09iamVjdDogaXNPYmplY3QsXG4gICAgaXNFcnJvcjogaXNFcnJvcixcbiAgICBjYW5FdmFsdWF0ZTogY2FuRXZhbHVhdGUsXG4gICAgZXJyb3JPYmo6IGVycm9yT2JqLFxuICAgIHRyeUNhdGNoOiB0cnlDYXRjaCxcbiAgICBpbmhlcml0czogaW5oZXJpdHMsXG4gICAgd2l0aEFwcGVuZGVkOiB3aXRoQXBwZW5kZWQsXG4gICAgbWF5YmVXcmFwQXNFcnJvcjogbWF5YmVXcmFwQXNFcnJvcixcbiAgICB0b0Zhc3RQcm9wZXJ0aWVzOiB0b0Zhc3RQcm9wZXJ0aWVzLFxuICAgIGZpbGxlZFJhbmdlOiBmaWxsZWRSYW5nZSxcbiAgICB0b1N0cmluZzogc2FmZVRvU3RyaW5nLFxuICAgIGNhbkF0dGFjaFRyYWNlOiBjYW5BdHRhY2hUcmFjZSxcbiAgICBlbnN1cmVFcnJvck9iamVjdDogZW5zdXJlRXJyb3JPYmplY3QsXG4gICAgb3JpZ2luYXRlc0Zyb21SZWplY3Rpb246IG9yaWdpbmF0ZXNGcm9tUmVqZWN0aW9uLFxuICAgIG1hcmtBc09yaWdpbmF0aW5nRnJvbVJlamVjdGlvbjogbWFya0FzT3JpZ2luYXRpbmdGcm9tUmVqZWN0aW9uLFxuICAgIGNsYXNzU3RyaW5nOiBjbGFzc1N0cmluZyxcbiAgICBjb3B5RGVzY3JpcHRvcnM6IGNvcHlEZXNjcmlwdG9ycyxcbiAgICBoYXNEZXZUb29sczogdHlwZW9mIGNocm9tZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjaHJvbWUgJiZcbiAgICAgICAgICAgICAgICAgdHlwZW9mIGNocm9tZS5sb2FkVGltZXMgPT09IFwiZnVuY3Rpb25cIixcbiAgICBpc05vZGU6IGlzTm9kZSxcbiAgICBoYXNFbnZWYXJpYWJsZXM6IGhhc0VudlZhcmlhYmxlcyxcbiAgICBlbnY6IGVudixcbiAgICBnbG9iYWw6IGdsb2JhbE9iamVjdCxcbiAgICBnZXROYXRpdmVQcm9taXNlOiBnZXROYXRpdmVQcm9taXNlLFxuICAgIGRvbWFpbkJpbmQ6IGRvbWFpbkJpbmRcbn07XG5yZXQuaXNSZWNlbnROb2RlID0gcmV0LmlzTm9kZSAmJiAoZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIHJldHVybiAodmVyc2lvblswXSA9PT0gMCAmJiB2ZXJzaW9uWzFdID4gMTApIHx8ICh2ZXJzaW9uWzBdID4gMCk7XG59KSgpO1xuXG5pZiAocmV0LmlzTm9kZSkgcmV0LnRvRmFzdFByb3BlcnRpZXMocHJvY2Vzcyk7XG5cbnRyeSB7dGhyb3cgbmV3IEVycm9yKCk7IH0gY2F0Y2ggKGUpIHtyZXQubGFzdExpbmVFcnJvciA9IGU7fVxubW9kdWxlLmV4cG9ydHMgPSByZXQ7XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHtcIi4vZXM1XCI6NTksXCJfcHJvY2Vzc1wiOjEwMX1dLDgzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHtcImJhc2U2NC1qc1wiOjQ3LFwiaWVlZTc1NFwiOjg2LFwiaXNhcnJheVwiOjg3fV0sODQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgZGluZ2JhdHMgPSBbXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIzM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMDBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODcwN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIwM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIzOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMERcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjQwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNDFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI0MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjQzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NzIyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjEyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI0NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjMwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI0OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjUxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjMzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM0XCIsIFwiVW5pY29kZSBkZWNcIjogXCI1MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI1NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjU2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI1OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0FcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0JcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjU5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjYwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNjBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI2MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0RcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0VcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjYyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjYzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NzczXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjQ1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM5MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkzNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0E3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM5NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkzNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0E2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM5M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjcyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOTdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzk5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNEMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTIyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOUFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNENcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzlCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjREXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjM5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTI1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNEZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzlGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNBMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTIwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOThcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0ExXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNBM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1NFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTMyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQTRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkzM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0E1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NjJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNDMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTM3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzlFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNBOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzOTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCI1QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODc1NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIzNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjVEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODY5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMkE1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiNUZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjgyNTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwM0VcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0IxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjYyXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNCMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY0XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNCNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk0OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0I1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQzZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNCM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk1MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0I3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTA1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQjlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5ODFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNENVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk1NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0JBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTA4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTU1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQkJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNCQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk1N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0JEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTU5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQkZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjcwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NjBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNDMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk1MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0I4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTYxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQzFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjczXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNDM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0M0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQzVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5ODJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNENlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0M5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTIwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIzQkVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNDOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0FcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk1MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiM0I2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTIzXCIsIFwiVW5pY29kZSBoZXhcIjogXCI3QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0NcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiN0NcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjdEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCI3RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjgzNjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwQUNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkExXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjNEMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjgyNDJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwMzJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkEzXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODA0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjY0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODI2MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjA0NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkE2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI0MDJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjE5MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk4MjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2NjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkE4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5ODMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjY2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgyOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY2NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk4MjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2NjBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkFCXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NTk2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMTk0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODU5MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjE5MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQURcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg1OTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxOTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkFFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NTk0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMTkyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODU5NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjE5M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjE3NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiQjBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkIxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxNzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIkIxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODI0M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjAzM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg4MDVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyNjVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIyMTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIkQ3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODczM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIxRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMDJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4MjI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMDIyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMjQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCJGN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg4MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyNjBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODAxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjYxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODc3NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjI0OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQkNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjgyMzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwMjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTY4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0QwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEzNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQkZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg2MjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxQjVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkMwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NTAxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMTM1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODQ2NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjExMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg0NzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxMUNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkMzXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NDcyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMTE4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODg1NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjI5N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg4NTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyOTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkM2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NzA5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjA1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODc0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIyOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3NDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMkFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkM5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjgzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODgzOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjI4N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQ0JcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg4MzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyODRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODM0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjgyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODgzOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjI4NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQ0VcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMDhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NzEzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjA5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODczNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIyMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMDdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxNzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIkFFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTY5XCIsIFwiVW5pY29kZSBoZXhcIjogXCJBOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg0ODJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxMjJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NzE5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjBGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODczMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIxQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg5MDFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyQzVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxNzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIkFDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODc0M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjIyN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiREFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3NDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMjhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRCXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NjYwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMUQ0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODY1NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjFEMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRERcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg2NTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxRDFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NjU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMUQyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODY1OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjFEM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1Q0FcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjI5NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzAwOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjE3NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiQUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxNjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIkE5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODQ4MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjEyMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTE1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzlCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTExNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjM5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzOURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTIxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0ExXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEyMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzQTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTI3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0E3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEyOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzQTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0FBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiNjM3NDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIkY4RkZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjI5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMzAwOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3NDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMkJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYzXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEzNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg5OTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzMjFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzlFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTExOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjM5RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMjBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzQTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0E0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEyNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI1MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRkJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzQTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiU3ltYm9sXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkZDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0FCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIlN5bWJvbFwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTEzMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNBQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJTeW1ib2xcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI1NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRkVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxMzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzQURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM3NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzc2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTcyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM3NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NzZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTQyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNDNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc4OTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMzk2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM5MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1ODdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0ODlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUU5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ5NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RjBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDk3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVGMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc3OThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMzM2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzg5NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzOTdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjM4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY3RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjdDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ2OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RDVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDcwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVENlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUQ3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyMDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzRjRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjUyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTIwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNGNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MjA2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0Y2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyMDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzRjdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE5NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNFQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTkzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0U5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkxOThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzRUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTE5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNFRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MjA4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0Y4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0NcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyMDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzRjlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjYxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTIxMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjNGQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNURBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0ZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ5OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzM2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZFMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0Q3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzk2MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzRDhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTYxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNEOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NjJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0RBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzk2NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzRENcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjcwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTgxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNFRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0RCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzk2OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzRTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjczXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNENlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0REXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNEJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODczOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2RTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjY5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjUwRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0Q0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNEVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODA2NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY0NDFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQ0MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0RFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzk1N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzRDVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjgyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzQwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZFNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0RGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODc1NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2RjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzY0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU2Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTZCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM2MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NjhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjY0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjUwOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc4OTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMzk0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNUFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzg5M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzOTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjdEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNURcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ5M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDkwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0OTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUVCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTU2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjk0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDA0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzE0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODY5MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2QjJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwMzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMUNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODczN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2RTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODIzMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY0RTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODc1M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2RjFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMDM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjFCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2NTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjkxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3MTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkM4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3NDVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkU5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3NTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkYwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0M4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTc0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTA0NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIyNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZFNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTEyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjYwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY5NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTEzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDcyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVEOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDczXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVEOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAwNjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3NTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODc1NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2RjJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODY0N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2ODdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODY1M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2OERcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk5NzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2RjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2ViZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwNjgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyOUI4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4ODU0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMjk2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2ODVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkFEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0OTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUVFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MTY4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyM0QwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0OTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUVGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0OThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUYyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2OTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkI5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2OThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkJBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3MTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkM5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3MTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkNBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkJDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgxMjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDdEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0NCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTc1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNkY3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5MzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0MyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0NDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0NBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0M0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0NEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5NTBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0NFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2NjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjk4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0ODBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUUwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg3MzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNkUyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgxNzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5OTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0Y3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgxNzlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEIzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgxMDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDZBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0ODFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUUxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0ODJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUUyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0ODNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUUzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldlYmRpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDAzMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjcyRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzg5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzkwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzczXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzY4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQ1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRDQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVEMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDY3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVEM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU2RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjREQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDc4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVERVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDc5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVERlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDUxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVDM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVDMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTczXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQ0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNBRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTAwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODk2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODk3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTExXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNBN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MTkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRCRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTAyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTE2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNBQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjQ5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjU0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjUxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODk4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODk5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRGQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MTg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRCQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDIxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDIyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDIzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzc3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNBRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzc5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjIzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRERlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDI1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDc2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVEQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mjc0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjUxMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mjc1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjUxM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDc3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVERFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjI5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRFNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MjI4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjRFNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzcxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzc5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzgxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzgyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTcyOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYwMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzgzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzcyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMxQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3Nzc3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMyMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzE1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZDQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzE5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZDRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODY5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM3RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODY0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM3OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZDRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZDRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTQxM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjRDNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTg1NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY3RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzEwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZDNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3ODkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjM5M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVFN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NzQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjZFQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDYzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQzRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDM4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQyNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQxRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDIxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQxNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDA4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQwOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjIwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjIyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjIxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjIzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTA2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVGQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzU3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMwRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzU5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMwRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMwRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXZWJkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU0QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzOTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTg5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIyXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzAyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIzXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzAxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgwODNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDUzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTZEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTZFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTZGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzODNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTdGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTkwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzA2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzODZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTgyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzODdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTgzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgyMzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEVBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgyMzVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEVCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgyMzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEVDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgyMzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEVEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUMwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUMxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NjJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUNFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUNGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUQwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUM0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzFCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUFFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUIyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUIzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUI0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUFCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUFDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzA3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTk3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzBEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzOThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNThFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTk2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzBDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzOTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNThGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgwNzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDREXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgwNzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDRFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzU2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjFDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjFFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzU3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjFEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzU5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjFGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTkwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Nzg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjNBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg1MjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjEwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Nzg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjM5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgxNjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNEEzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTcxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5ODdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0YzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc5ODVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGM0YxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzA4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUyXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Nzg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjNDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjc3NzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMzIyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDA1MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc0NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU0NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAwMTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3MUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODMyOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NDhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDE2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDAxN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjcyMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc3MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYyQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc3NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYyRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzI5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU0OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc4NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYzOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY0RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk4MDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2NEVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5ODA3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjRGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgwOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY1MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk4MDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2NTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5ODEwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjUyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTA1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTgxMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjY1M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYyNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NzBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjc1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTA4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTg5OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjZBQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODMxOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1M0VcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNUZDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTExXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc4RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjcxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDA2NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc1MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzUyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTI3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwNzMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyOUVCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVDNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDcwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzU2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwNDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMjlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTk5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzI3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTIxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExOTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQjlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzE4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3OTg5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjNGNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0NcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyNzk5MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUYzRjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjc2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY3N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0ZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QUZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjcyNDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMTBCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3ODBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDExM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc4MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTE0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzgyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4NFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3ODNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDExNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc4NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzg1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3ODZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDExOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc4N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTIwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzg4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3ODlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjcyNDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGMTBDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMjJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3OEFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEyM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc4QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE0MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOEVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzhDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3OERcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEyNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc4RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE0NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOTFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTI3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzhGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3OTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEyOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc5MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE0OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOTRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzkyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3OTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjYyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjA4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE1MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NjFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjYzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjA2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY1RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE1NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYwNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NUNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjlDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MDVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjVEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjA3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY1RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE1OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOUVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg3MjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIyMTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjlGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4MjI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMDIyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwMzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkExXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTA5NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI1OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkwMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3ODZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkEzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5MDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNzg4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTA2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc4QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkwN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OEJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkE2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzMTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTNGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY0MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVBQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OEVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNjlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkE5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0MxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTY1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk3MzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI2MDVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkFDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0NCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTczXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTc1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODk3OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3RDNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkFGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0QxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEyMTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCRDBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkIxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTgyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzE2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEyMTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQ0VcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkIzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTIxNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJDRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkQxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAwMjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3MkFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDAzMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjczMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODMzNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzMzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTUxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzM4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU1MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQkFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODMzOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTU0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU1NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQkRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM0MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTU3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzQ0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU1OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1NTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkMxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTVBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU1QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExODVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQjFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE4NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJCMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkIzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExODhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQjRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkM4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE4OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJCNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTkwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkI2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExOTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQjdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjZBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjE5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQ0RcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODU5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg1OTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjU0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTk5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY1N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODU5OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg1OTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjUwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTkzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY1MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODU5NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg1OTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjUzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTAwM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjMyQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg5OThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzMjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTYyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjlBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExNjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCOTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIxOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiREJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTQ0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjg4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExNDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCOEFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiREVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjhCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTI4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg2OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEzMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NkFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODY5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg2QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIyN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEzMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NkNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODZEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg2RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEzNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NkVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODc4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg3QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRTlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NzlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODdCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTQ4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg3Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE0OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4N0RcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODdGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg3RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg2NzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxRTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NjgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMUU4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODY3OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjFFN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg2ODFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxRTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTAxMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIwNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg2OTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIxRjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTAwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIwMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMDA4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjAwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwMTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMDNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTAxMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIwMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE5NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QUNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkZBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxOTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGOEFEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTAyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVGNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI1MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRkNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzEzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5nc1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVGN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3NcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI1NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRkVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODUwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RjlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM5NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OEFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4Mzk1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU4QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzOTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNThDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OERcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTk4OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjcwNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5OTg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzAwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODM4MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1N0VcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MzgxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU3RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUM1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ1NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1QzZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDU1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVDN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUM4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMkRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ1N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1QzlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIyRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVDQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUNCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI0OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ2MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1Q0NcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjQ5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDYxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVDRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgyMDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNENCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQ2NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RDFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjUyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDY4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVENFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUI1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQzOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1QjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDM5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVCN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0NDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUI4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI1N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMzlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQyOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1QURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjU4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUIxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0NcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQwMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjYxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCIzRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU5M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTk4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiM0ZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDEwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU5QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTlCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODA3MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY0NDhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjY3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4MDczXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjQ0OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTlDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI2OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQxM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OURcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjcwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDE0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjU5RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTlGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNDhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQxNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1QTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjczXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgwNzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNDQ2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNEJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODA3MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY0NDdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NDE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVBMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg0MTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUEzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI3OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNEVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODQwMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1OTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjc5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI0RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NTAwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjVGNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg1MDRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNUY4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODUwMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY1RjVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjgyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYxMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJCRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU0XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NzQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNjEyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTk4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkJFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTk5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkJGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODcxMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2QzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTA2ODBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI5QjhcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjI1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY3MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjc0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYyNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NzJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjI3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY3M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI4MjUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMDNEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNUVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYzM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NzlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjM0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY3QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjYwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MzVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjdCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODYxNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY2NjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4NjEyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjY2NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjYzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjY1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjY3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MDJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjVBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjU4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MDFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjU5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjVCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjY5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NDUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNEVBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzEyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDYwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZCXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzEzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDYxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZDXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDYyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZEXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDYzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZFXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjZGXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjcwXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjcxXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzE5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjcyXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzIwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjczXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MzIxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNDY5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc0XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5NDcxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNEZGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEwMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc3NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTE4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3NzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTA0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzc4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjc4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc3OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTIxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMDZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3N0FcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0FcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTA3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzdCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDEwOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc3Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI3Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAxMDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3N0RcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0RcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMTEwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzdFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjdFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDExMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjc3RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTczN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYwOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTI5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI3NzY1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjMxNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTMwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc4OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYzRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTMxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTc5MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjYzRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4NFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTE4MzlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJFM0ZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDEzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzFEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzMjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTQ3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNDhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTVDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNDlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTVEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTVFXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTVGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTYwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTYxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTYyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTYzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjhGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTY0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTY1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTY2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjgzNTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNTY3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjkzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjY4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg2MTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNjY5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTAxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMkM1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGNzg0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjk3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDYyNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjk4MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVDRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVDQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTAxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc4NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc4N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTA1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc4OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODg1N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjI5OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTA2ODdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI5QkZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE1OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiOUZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkwOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OENcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OERcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk3MjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1RkVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2MzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2MzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2NFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2NVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2OFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQThcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2MzVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE2OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQTlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3MVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkxOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OTdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3MlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQUNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODkyMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3OThcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE3M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQURcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMDQ5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjI5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkFFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTA0NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIyNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVDN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTIyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTY3MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjVDOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTIzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTI1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjc5RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwNTBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMkFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE4M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMDQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjI3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Njc0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNUNBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkI5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5MjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0EwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJBXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Njg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNUQ2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJCXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5Njg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNUQ3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxODhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTIxMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJDQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEyMTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQ0JcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQkVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjAwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkMwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkJGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTIwMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJDMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwMzlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMUZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjAyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkMyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkMyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTA0M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkIyM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEwNDJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCMjJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjE5NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQzRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjAzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkMzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxOTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTIwNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJDNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTI5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTMyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTMzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTM5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjExXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdBRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjEzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJENlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTQ5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjE5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJEQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTUxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTUyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjIzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJERlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTU5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdCRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjI5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTYwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTYyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTY0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjMzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTY5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTcwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjM1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJFQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTAwMzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI3MzZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODk3MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3Q0NcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRURcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODk3NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3Q0VcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODk3NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3RDBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIzOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRUZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODk3OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3RDJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEwMDQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyNzM5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0MzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjg5NjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGN0M3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMDAzMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjcyRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTczXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdDRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI4OTgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjdENFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgMlwiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJGNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEyMTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQ0NcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDJcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjI0N1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjEzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkNEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4MjUxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMDNCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAyXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkY5XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4MjU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMDQyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIzMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiMjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjMyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjIzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjI5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEyOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjJGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjMzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTA4NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI0RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjM5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjNGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNjlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTEzNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI3RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjQ5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0MlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE1MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiNzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjRGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE0OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI4Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTExOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI2RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjUyXCIsIFwiVW5pY29kZSBkZWNcIjogXCI5MDk5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzhCXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjg5OTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjIzMjRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1NFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiODk2M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjMwM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU1XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4OTk3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMzI1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjkyNTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI0MjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjg3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiOTA4NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMjM3RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiODhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjU4XCIsIFwiVW5pY29kZSBkZWNcIjogXCI4NjgyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyMUVBXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI4OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNTlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkI4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5MFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNUFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE4NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjhBMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxODZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGOEEyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5M1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNURcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE4N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI1RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjhBNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjVGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxODlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGOEE1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5NlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE5MFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjk3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI2MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjhBN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiOThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjYyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxOTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGOEE4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCI5OVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE5M1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE5NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QUFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTE5NVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4QUJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwNFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwNVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNjlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwN1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwOFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTEwOVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTExMVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEwOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTExMFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTExMlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NThcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNkZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyOTExM1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY4NTlcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NTBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QjJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NjBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QkNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzJcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NTFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QjNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzNcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QkRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QzBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExN1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzVcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QjZcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzZcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QzFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjExOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2NTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1QjdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzhcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2OTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1RTNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiNzlcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk2OThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1RTJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0FcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk3MDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1RTRcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyM1wiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0JcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjk3MDFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjI1RTVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0NcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODg5NlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3ODBcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0RcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODg5OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3ODJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyNlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiN0VcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODg5N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3ODFcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjEyODg5OVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMUY3ODNcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEyOVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODFcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjA1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkM1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjgyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTIwNlwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJDNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTMxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTEyMDdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQzdcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODRcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMjA4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkM4XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2NFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExNjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCOUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjEzNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiODdcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTY1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQjlEXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIxMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIjg4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE2N1wiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkI5RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTM5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI4RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5MFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5MVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5MlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDUwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5M1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDQ5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5NFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDUxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTQ5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5NVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDUyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5NlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDU0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5N1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDUzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5OFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDU1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgxRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTUzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5OVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5QlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwMVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5Q1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwM1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDMwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTU5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCI5RlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDI5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwNVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDMxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwN1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDMyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDM0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTYzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDMzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDM1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgwQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDU2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDU4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDYwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDYyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTY5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDY0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDY2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDY4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTcyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5Q1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTczXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTgxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5RFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTgyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5RVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJBRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTgzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5RlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDcwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgyRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDcyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzMFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDc0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzMlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTc5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDc2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzNFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDc4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzNlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzOFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDgyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTgzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDgxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzOVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDgzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzQlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTc2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5OFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTc4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5QVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTc3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5OVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MTc5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg5QlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTg5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzQ1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg2XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzRVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJCRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkyXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjgzRlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTkzXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg4XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0MFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDMlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDkwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0MlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk1XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDM1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDg5XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0MVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk2XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDkxXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0M1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDkyXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0NFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk4XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDNlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDk0XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0NlwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMTk5XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDN1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDkzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0NVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAwXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOFwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTI5MDk1XCIsIFwiVW5pY29kZSBoZXhcIjogXCIxRjg0N1wiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjAxXCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDOVwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExNzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQThcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwMlwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQ0FcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTc3XCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkE5XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE3OFwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBQVwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA0XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDQ1wiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExNzlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQUJcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwNVwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiQ0RcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTgwXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkFDXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkNFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMTE4MVwiLCBcIlVuaWNvZGUgaGV4XCI6IFwiMkJBRFwiIH0sXG4gICAgeyBcIlR5cGVmYWNlIG5hbWVcIjogXCJXaW5nZGluZ3MgM1wiLCBcIkRpbmdiYXQgZGVjXCI6IFwiMjA3XCIsIFwiRGluZ2JhdCBoZXhcIjogXCJDRlwiLCBcIlVuaWNvZGUgZGVjXCI6IFwiMTExODJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjJCQUVcIiB9LFxuICAgIHsgXCJUeXBlZmFjZSBuYW1lXCI6IFwiV2luZ2RpbmdzIDNcIiwgXCJEaW5nYmF0IGRlY1wiOiBcIjIwOFwiLCBcIkRpbmdiYXQgaGV4XCI6IFwiRDBcIiwgXCJVbmljb2RlIGRlY1wiOiBcIjExMTgzXCIsIFwiVW5pY29kZSBoZXhcIjogXCIyQkFGXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMDlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODYwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODYyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODYxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODYzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODY0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODY1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODY3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMjZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODY2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkQ5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMzZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODcwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMThcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMzhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODcyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMTlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMzdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODcxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxMzlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODczXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkREXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODc0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODc1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkRGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODc3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNDJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODc2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUxXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODgwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUyXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODgyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkUzXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODgxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU0XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODgzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMjlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU1XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTZcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODg0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU2XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTdcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODg1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzFcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU3XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNTlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODg3XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzJcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU4XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNThcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODg2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzNcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkU5XCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNjhcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODkwXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzRcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVBXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzBcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODkyXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzVcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVCXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNjlcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODkxXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzZcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVDXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzFcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODkzXCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzdcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVEXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzJcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODk0XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzhcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVFXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzRcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODk2XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyMzlcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkVGXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzNcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODk1XCIgfSxcbiAgICB7IFwiVHlwZWZhY2UgbmFtZVwiOiBcIldpbmdkaW5ncyAzXCIsIFwiRGluZ2JhdCBkZWNcIjogXCIyNDBcIiwgXCJEaW5nYmF0IGhleFwiOiBcIkYwXCIsIFwiVW5pY29kZSBkZWNcIjogXCIxMjkxNzVcIiwgXCJVbmljb2RlIGhleFwiOiBcIjFGODk3XCIgfSxcbl07XG5leHBvcnRzLmRlZmF1bHQgPSBkaW5nYmF0cztcblxufSx7fV0sODU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLmhleCA9IGV4cG9ydHMuZGVjID0gZXhwb3J0cy5jb2RlUG9pbnQgPSB2b2lkIDA7XG52YXIgZGluZ2JhdHNfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9kaW5nYmF0c1wiKSk7XG52YXIgZGluZ2JhdHNCeUNvZGVQb2ludCA9IHt9O1xudmFyIGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCA/IFN0cmluZy5mcm9tQ29kZVBvaW50IDogZnJvbUNvZGVQb2ludFBvbHlmaWxsO1xuZm9yICh2YXIgX2kgPSAwLCBkaW5nYmF0c18yID0gZGluZ2JhdHNfMS5kZWZhdWx0OyBfaSA8IGRpbmdiYXRzXzIubGVuZ3RoOyBfaSsrKSB7XG4gICAgdmFyIGRpbmdiYXQgPSBkaW5nYmF0c18yW19pXTtcbiAgICB2YXIgY29kZVBvaW50XzEgPSBwYXJzZUludChkaW5nYmF0W1wiVW5pY29kZSBkZWNcIl0sIDEwKTtcbiAgICB2YXIgc2NhbGFyVmFsdWUgPSB7XG4gICAgICAgIGNvZGVQb2ludDogY29kZVBvaW50XzEsXG4gICAgICAgIHN0cmluZzogZnJvbUNvZGVQb2ludChjb2RlUG9pbnRfMSksXG4gICAgfTtcbiAgICBkaW5nYmF0c0J5Q29kZVBvaW50W2RpbmdiYXRbXCJUeXBlZmFjZSBuYW1lXCJdLnRvVXBwZXJDYXNlKCkgKyBcIl9cIiArIGRpbmdiYXRbXCJEaW5nYmF0IGRlY1wiXV0gPSBzY2FsYXJWYWx1ZTtcbn1cbmZ1bmN0aW9uIGNvZGVQb2ludCh0eXBlZmFjZSwgY29kZVBvaW50KSB7XG4gICAgcmV0dXJuIGRpbmdiYXRzQnlDb2RlUG9pbnRbdHlwZWZhY2UudG9VcHBlckNhc2UoKSArIFwiX1wiICsgY29kZVBvaW50XTtcbn1cbmV4cG9ydHMuY29kZVBvaW50ID0gY29kZVBvaW50O1xuZnVuY3Rpb24gZGVjKHR5cGVmYWNlLCBkZWMpIHtcbiAgICByZXR1cm4gY29kZVBvaW50KHR5cGVmYWNlLCBwYXJzZUludChkZWMsIDEwKSk7XG59XG5leHBvcnRzLmRlYyA9IGRlYztcbmZ1bmN0aW9uIGhleCh0eXBlZmFjZSwgaGV4KSB7XG4gICAgcmV0dXJuIGNvZGVQb2ludCh0eXBlZmFjZSwgcGFyc2VJbnQoaGV4LCAxNikpO1xufVxuZXhwb3J0cy5oZXggPSBoZXg7XG5mdW5jdGlvbiBmcm9tQ29kZVBvaW50UG9seWZpbGwoY29kZVBvaW50KSB7XG4gICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHtcbiAgICAgICAgLy8gQk1QXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGVQb2ludCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBBc3RyYWxcbiAgICAgICAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgIHZhciBoaWdoU3Vycm9nYXRlID0gTWF0aC5mbG9vcigoY29kZVBvaW50IC0gMHgxMDAwMCkgLyAweDQwMCkgKyAweEQ4MDA7XG4gICAgICAgIHZhciBsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50IC0gMHgxMDAwMCkgJSAweDQwMCArIDB4REMwMDtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcbiAgICB9XG59XG47XG5cbn0se1wiLi9kaW5nYmF0c1wiOjg0fV0sODY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBuQml0cyA9IC03XG4gIHZhciBpID0gaXNMRSA/IChuQnl0ZXMgLSAxKSA6IDBcbiAgdmFyIGQgPSBpc0xFID8gLTEgOiAxXG4gIHZhciBzID0gYnVmZmVyW29mZnNldCArIGldXG5cbiAgaSArPSBkXG5cbiAgZSA9IHMgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgcyA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gZUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgcnQgPSAobUxlbiA9PT0gMjMgPyBNYXRoLnBvdygyLCAtMjQpIC0gTWF0aC5wb3coMiwgLTc3KSA6IDApXG4gIHZhciBpID0gaXNMRSA/IDAgOiAobkJ5dGVzIC0gMSlcbiAgdmFyIGQgPSBpc0xFID8gMSA6IC0xXG4gIHZhciBzID0gdmFsdWUgPCAwIHx8ICh2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwKSA/IDEgOiAwXG5cbiAgdmFsdWUgPSBNYXRoLmFicyh2YWx1ZSlcblxuICBpZiAoaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIG0gPSBpc05hTih2YWx1ZSkgPyAxIDogMFxuICAgIGUgPSBlTWF4XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguZmxvb3IoTWF0aC5sb2codmFsdWUpIC8gTWF0aC5MTjIpXG4gICAgaWYgKHZhbHVlICogKGMgPSBNYXRoLnBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tXG4gICAgICBjICo9IDJcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGNcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBNYXRoLnBvdygyLCAxIC0gZUJpYXMpXG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrXG4gICAgICBjIC89IDJcbiAgICB9XG5cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwXG4gICAgICBlID0gZU1heFxuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG5cbn0se31dLDg3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG59LHt9XSw4ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCxCdWZmZXIpe1xuLyohXG5cbkpTWmlwIHYzLjcuMSAtIEEgSmF2YVNjcmlwdCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBhbmQgcmVhZGluZyB6aXAgZmlsZXNcbjxodHRwOi8vc3R1YXJ0ay5jb20vanN6aXA+XG5cbihjKSAyMDA5LTIwMTYgU3R1YXJ0IEtuaWdodGxleSA8c3R1YXJ0IFthdF0gc3R1YXJ0ay5jb20+XG5EdWFsIGxpY2VuY2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBvciBHUEx2My4gU2VlIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vU3R1ay9qc3ppcC9tYXN0ZXIvTElDRU5TRS5tYXJrZG93bi5cblxuSlNaaXAgdXNlcyB0aGUgbGlicmFyeSBwYWtvIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSA6XG5odHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vYmxvYi9tYXN0ZXIvTElDRU5TRVxuKi9cblxuIWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sdCk7ZWxzZXsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5KU1ppcD10KCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBzKGEsbyxoKXtmdW5jdGlvbiB1KHIsdCl7aWYoIW9bcl0pe2lmKCFhW3JdKXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCF0JiZlKXJldHVybiBlKHIsITApO2lmKGwpcmV0dXJuIGwociwhMCk7dmFyIGk9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIityK1wiJ1wiKTt0aHJvdyBpLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsaX12YXIgbj1vW3JdPXtleHBvcnRzOnt9fTthW3JdWzBdLmNhbGwobi5leHBvcnRzLGZ1bmN0aW9uKHQpe3ZhciBlPWFbcl1bMV1bdF07cmV0dXJuIHUoZXx8dCl9LG4sbi5leHBvcnRzLHMsYSxvLGgpfXJldHVybiBvW3JdLmV4cG9ydHN9Zm9yKHZhciBsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsdD0wO3Q8aC5sZW5ndGg7dCsrKXUoaFt0XSk7cmV0dXJuIHV9KHsxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGM9dChcIi4vdXRpbHNcIiksZD10KFwiLi9zdXBwb3J0XCIpLHA9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO3IuZW5jb2RlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGksbixzLGEsbyxoPVtdLHU9MCxsPXQubGVuZ3RoLGY9bCxkPVwic3RyaW5nXCIhPT1jLmdldFR5cGVPZih0KTt1PHQubGVuZ3RoOylmPWwtdSxpPWQ/KGU9dFt1KytdLHI9dTxsP3RbdSsrXTowLHU8bD90W3UrK106MCk6KGU9dC5jaGFyQ29kZUF0KHUrKykscj11PGw/dC5jaGFyQ29kZUF0KHUrKyk6MCx1PGw/dC5jaGFyQ29kZUF0KHUrKyk6MCksbj1lPj4yLHM9KDMmZSk8PDR8cj4+NCxhPTE8Zj8oMTUmcik8PDJ8aT4+Njo2NCxvPTI8Zj82MyZpOjY0LGgucHVzaChwLmNoYXJBdChuKStwLmNoYXJBdChzKStwLmNoYXJBdChhKStwLmNoYXJBdChvKSk7cmV0dXJuIGguam9pbihcIlwiKX0sci5kZWNvZGU9ZnVuY3Rpb24odCl7dmFyIGUscixpLG4scyxhLG89MCxoPTAsdT1cImRhdGE6XCI7aWYodC5zdWJzdHIoMCx1Lmxlbmd0aCk9PT11KXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBpdCBsb29rcyBsaWtlIGEgZGF0YSB1cmwuXCIpO3ZhciBsLGY9MyoodD10LnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXFw9XS9nLFwiXCIpKS5sZW5ndGgvNDtpZih0LmNoYXJBdCh0Lmxlbmd0aC0xKT09PXAuY2hhckF0KDY0KSYmZi0tLHQuY2hhckF0KHQubGVuZ3RoLTIpPT09cC5jaGFyQXQoNjQpJiZmLS0sZiUxIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBiYWQgY29udGVudCBsZW5ndGguXCIpO2ZvcihsPWQudWludDhhcnJheT9uZXcgVWludDhBcnJheSgwfGYpOm5ldyBBcnJheSgwfGYpO288dC5sZW5ndGg7KWU9cC5pbmRleE9mKHQuY2hhckF0KG8rKykpPDwyfChuPXAuaW5kZXhPZih0LmNoYXJBdChvKyspKSk+PjQscj0oMTUmbik8PDR8KHM9cC5pbmRleE9mKHQuY2hhckF0KG8rKykpKT4+MixpPSgzJnMpPDw2fChhPXAuaW5kZXhPZih0LmNoYXJBdChvKyspKSksbFtoKytdPWUsNjQhPT1zJiYobFtoKytdPXIpLDY0IT09YSYmKGxbaCsrXT1pKTtyZXR1cm4gbH19LHtcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuL2V4dGVybmFsXCIpLG49dChcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIikscz10KFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxhPXQoXCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmVcIik7ZnVuY3Rpb24gbyh0LGUscixpLG4pe3RoaXMuY29tcHJlc3NlZFNpemU9dCx0aGlzLnVuY29tcHJlc3NlZFNpemU9ZSx0aGlzLmNyYzMyPXIsdGhpcy5jb21wcmVzc2lvbj1pLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bn1vLnByb3RvdHlwZT17Z2V0Q29udGVudFdvcmtlcjpmdW5jdGlvbigpe3ZhciB0PW5ldyBuKGkuUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKS5waXBlKHRoaXMuY29tcHJlc3Npb24udW5jb21wcmVzc1dvcmtlcigpKS5waXBlKG5ldyBhKFwiZGF0YV9sZW5ndGhcIikpLGU9dGhpcztyZXR1cm4gdC5vbihcImVuZFwiLGZ1bmN0aW9uKCl7aWYodGhpcy5zdHJlYW1JbmZvLmRhdGFfbGVuZ3RoIT09ZS51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcihcIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2hcIil9KSx0fSxnZXRDb21wcmVzc2VkV29ya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKGkuUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzZWRTaXplXCIsdGhpcy5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oXCJ1bmNvbXByZXNzZWRTaXplXCIsdGhpcy51bmNvbXByZXNzZWRTaXplKS53aXRoU3RyZWFtSW5mbyhcImNyYzMyXCIsdGhpcy5jcmMzMikud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2lvblwiLHRoaXMuY29tcHJlc3Npb24pfX0sby5jcmVhdGVXb3JrZXJGcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5waXBlKG5ldyBzKS5waXBlKG5ldyBhKFwidW5jb21wcmVzc2VkU2l6ZVwiKSkucGlwZShlLmNvbXByZXNzV29ya2VyKHIpKS5waXBlKG5ldyBhKFwiY29tcHJlc3NlZFNpemVcIikpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3Npb25cIixlKX0sZS5leHBvcnRzPW99LHtcIi4vZXh0ZXJuYWxcIjo2LFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiOjI1LFwiLi9zdHJlYW0vRGF0YUxlbmd0aFByb2JlXCI6MjYsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6Mjd9XSwzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ci5TVE9SRT17bWFnaWM6XCJcXDBcXDBcIixjb21wcmVzc1dvcmtlcjpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkoXCJTVE9SRSBjb21wcmVzc2lvblwiKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgaShcIlNUT1JFIGRlY29tcHJlc3Npb25cIil9fSxyLkRFRkxBVEU9dChcIi4vZmxhdGVcIil9LHtcIi4vZmxhdGVcIjo3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4fV0sNDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuL3V0aWxzXCIpO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj0wO3I8MjU2O3IrKyl7dD1yO2Zvcih2YXIgaT0wO2k8ODtpKyspdD0xJnQ/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW3JdPXR9cmV0dXJuIGV9KCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQmJnQubGVuZ3RoP1wic3RyaW5nXCIhPT1pLmdldFR5cGVPZih0KT9mdW5jdGlvbih0LGUscixpKXt2YXIgbj1vLHM9aStyO3RePS0xO2Zvcih2YXIgYT1pO2E8czthKyspdD10Pj4+OF5uWzI1NSYodF5lW2FdKV07cmV0dXJuLTFedH0oMHxlLHQsdC5sZW5ndGgsMCk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG49byxzPWkrcjt0Xj0tMTtmb3IodmFyIGE9aTthPHM7YSsrKXQ9dD4+PjheblsyNTUmKHReZS5jaGFyQ29kZUF0KGEpKV07cmV0dXJuLTFedH0oMHxlLHQsdC5sZW5ndGgsMCk6MH19LHtcIi4vdXRpbHNcIjozMn1dLDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJhc2U2ND0hMSxyLmJpbmFyeT0hMSxyLmRpcj0hMSxyLmNyZWF0ZUZvbGRlcnM9ITAsci5kYXRlPW51bGwsci5jb21wcmVzc2lvbj1udWxsLHIuY29tcHJlc3Npb25PcHRpb25zPW51bGwsci5jb21tZW50PW51bGwsci51bml4UGVybWlzc2lvbnM9bnVsbCxyLmRvc1Blcm1pc3Npb25zPW51bGx9LHt9XSw2OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9bnVsbDtpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlP1Byb21pc2U6dChcImxpZVwiKSxlLmV4cG9ydHM9e1Byb21pc2U6aX19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQzMkFycmF5LG49dChcInBha29cIikscz10KFwiLi91dGlsc1wiKSxhPXQoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLG89aT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7ZnVuY3Rpb24gaCh0LGUpe2EuY2FsbCh0aGlzLFwiRmxhdGVXb3JrZXIvXCIrdCksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249dCx0aGlzLl9wYWtvT3B0aW9ucz1lLHRoaXMubWV0YT17fX1yLm1hZ2ljPVwiXFxiXFwwXCIscy5pbmhlcml0cyhoLGEpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih0KXt0aGlzLm1ldGE9dC5tZXRhLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKHMudHJhbnNmb3JtVG8obyx0LmRhdGEpLCExKX0saC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXthLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKFtdLCEwKX0saC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2EucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLl9wYWtvPW51bGx9LGgucHJvdG90eXBlLl9jcmVhdGVQYWtvPWZ1bmN0aW9uKCl7dGhpcy5fcGFrbz1uZXcgblt0aGlzLl9wYWtvQWN0aW9uXSh7cmF3OiEwLGxldmVsOnRoaXMuX3Bha29PcHRpb25zLmxldmVsfHwtMX0pO3ZhciBlPXRoaXM7dGhpcy5fcGFrby5vbkRhdGE9ZnVuY3Rpb24odCl7ZS5wdXNoKHtkYXRhOnQsbWV0YTplLm1ldGF9KX19LHIuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBoKFwiRGVmbGF0ZVwiLHQpfSxyLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgoXCJJbmZsYXRlXCIse30pfX0se1wiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi91dGlsc1wiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gQSh0LGUpe3ZhciByLGk9XCJcIjtmb3Iocj0wO3I8ZTtyKyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmdCksdD4+Pj04O3JldHVybiBpfWZ1bmN0aW9uIGkodCxlLHIsaSxuLHMpe3ZhciBhLG8saD10LmZpbGUsdT10LmNvbXByZXNzaW9uLGw9cyE9PU8udXRmOGVuY29kZSxmPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGgubmFtZSkpLGQ9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLE8udXRmOGVuY29kZShoLm5hbWUpKSxjPWguY29tbWVudCxwPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGMpKSxtPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixPLnV0ZjhlbmNvZGUoYykpLF89ZC5sZW5ndGghPT1oLm5hbWUubGVuZ3RoLGc9bS5sZW5ndGghPT1jLmxlbmd0aCxiPVwiXCIsdj1cIlwiLHk9XCJcIix3PWguZGlyLGs9aC5kYXRlLHg9e2NyYzMyOjAsY29tcHJlc3NlZFNpemU6MCx1bmNvbXByZXNzZWRTaXplOjB9O2UmJiFyfHwoeC5jcmMzMj10LmNyYzMyLHguY29tcHJlc3NlZFNpemU9dC5jb21wcmVzc2VkU2l6ZSx4LnVuY29tcHJlc3NlZFNpemU9dC51bmNvbXByZXNzZWRTaXplKTt2YXIgUz0wO2UmJihTfD04KSxsfHwhXyYmIWd8fChTfD0yMDQ4KTt2YXIgej0wLEM9MDt3JiYoenw9MTYpLFwiVU5JWFwiPT09bj8oQz03OTgsenw9ZnVuY3Rpb24odCxlKXt2YXIgcj10O3JldHVybiB0fHwocj1lPzE2ODkzOjMzMjA0KSwoNjU1MzUmcik8PDE2fShoLnVuaXhQZXJtaXNzaW9ucyx3KSk6KEM9MjAsenw9ZnVuY3Rpb24odCl7cmV0dXJuIDYzJih0fHwwKX0oaC5kb3NQZXJtaXNzaW9ucykpLGE9ay5nZXRVVENIb3VycygpLGE8PD02LGF8PWsuZ2V0VVRDTWludXRlcygpLGE8PD01LGF8PWsuZ2V0VVRDU2Vjb25kcygpLzIsbz1rLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCxvPDw9NCxvfD1rLmdldFVUQ01vbnRoKCkrMSxvPDw9NSxvfD1rLmdldFVUQ0RhdGUoKSxfJiYodj1BKDEsMSkrQShCKGYpLDQpK2QsYis9XCJ1cFwiK0Eodi5sZW5ndGgsMikrdiksZyYmKHk9QSgxLDEpK0EoQihwKSw0KSttLGIrPVwidWNcIitBKHkubGVuZ3RoLDIpK3kpO3ZhciBFPVwiXCI7cmV0dXJuIEUrPVwiXFxuXFwwXCIsRSs9QShTLDIpLEUrPXUubWFnaWMsRSs9QShhLDIpLEUrPUEobywyKSxFKz1BKHguY3JjMzIsNCksRSs9QSh4LmNvbXByZXNzZWRTaXplLDQpLEUrPUEoeC51bmNvbXByZXNzZWRTaXplLDQpLEUrPUEoZi5sZW5ndGgsMiksRSs9QShiLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpSLkxPQ0FMX0ZJTEVfSEVBREVSK0UrZitiLGRpclJlY29yZDpSLkNFTlRSQUxfRklMRV9IRUFERVIrQShDLDIpK0UrQShwLmxlbmd0aCwyKStcIlxcMFxcMFxcMFxcMFwiK0Eoeiw0KStBKGksNCkrZitiK3B9fXZhciBJPXQoXCIuLi91dGlsc1wiKSxuPXQoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxPPXQoXCIuLi91dGY4XCIpLEI9dChcIi4uL2NyYzMyXCIpLFI9dChcIi4uL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiBzKHQsZSxyLGkpe24uY2FsbCh0aGlzLFwiWmlwRmlsZVdvcmtlclwiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD1lLHRoaXMuemlwUGxhdGZvcm09cix0aGlzLmVuY29kZUZpbGVOYW1lPWksdGhpcy5zdHJlYW1GaWxlcz10LHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119SS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9dC5tZXRhLnBlcmNlbnR8fDAscj10aGlzLmVudHJpZXNDb3VudCxpPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaCh0KToodGhpcy5ieXRlc1dyaXR0ZW4rPXQuZGF0YS5sZW5ndGgsbi5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6dC5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpyPyhlKzEwMCooci1pLTEpKS9yOjEwMH19KSl9LHMucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT10LmZpbGUubmFtZTt2YXIgZT10aGlzLnN0cmVhbUZpbGVzJiYhdC5maWxlLmRpcjtpZihlKXt2YXIgcj1pKHQsZSwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6ci5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0scy5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgZT10aGlzLnN0cmVhbUZpbGVzJiYhdC5maWxlLmRpcixyPWkodCxlLCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHIuZGlyUmVjb3JkKSxlKXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbih0KXtyZXR1cm4gUi5EQVRBX0RFU0NSSVBUT1IrQSh0LmNyYzMyLDQpK0EodC5jb21wcmVzc2VkU2l6ZSw0KStBKHQudW5jb21wcmVzc2VkU2l6ZSw0KX0odCksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOnIuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LHMucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuYnl0ZXNXcml0dGVuLGU9MDtlPHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7ZSsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbZV0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIHI9dGhpcy5ieXRlc1dyaXR0ZW4tdCxpPWZ1bmN0aW9uKHQsZSxyLGksbil7dmFyIHM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLG4oaSkpO3JldHVybiBSLkNFTlRSQUxfRElSRUNUT1JZX0VORCtcIlxcMFxcMFxcMFxcMFwiK0EodCwyKStBKHQsMikrQShlLDQpK0Eociw0KStBKHMubGVuZ3RoLDIpK3N9KHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgscix0LHRoaXMuemlwQ29tbWVudCx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6aSxtZXRhOntwZXJjZW50OjEwMH19KX0scy5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJldmlvdXMucmVzdW1lKCl9LHMucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24odCl7dGhpcy5fc291cmNlcy5wdXNoKHQpO3ZhciBlPXRoaXM7cmV0dXJuIHQub24oXCJkYXRhXCIsZnVuY3Rpb24odCl7ZS5wcm9jZXNzQ2h1bmsodCl9KSx0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtlLmNsb3NlZFNvdXJjZShlLnByZXZpb3VzLnN0cmVhbUluZm8pLGUuX3NvdXJjZXMubGVuZ3RoP2UucHJlcGFyZU5leHRTb3VyY2UoKTplLmVuZCgpfSksdC5vbihcImVycm9yXCIsZnVuY3Rpb24odCl7ZS5lcnJvcih0KX0pLHRoaXN9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhbi5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAwOih0aGlzLmVuZCgpLCEwKSl9LHMucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3NvdXJjZXM7aWYoIW4ucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyx0KSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0cnl7ZVtyXS5lcnJvcih0KX1jYXRjaCh0KXt9cmV0dXJuITB9LHMucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXtuLnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciB0PXRoaXMuX3NvdXJjZXMsZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ubG9jaygpfSxlLmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vc2lnbmF0dXJlXCI6MjMsXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRmOFwiOjMxLFwiLi4vdXRpbHNcIjozMn1dLDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT10KFwiLi4vY29tcHJlc3Npb25zXCIpLGk9dChcIi4vWmlwRmlsZVdvcmtlclwiKTtyLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKHQsYSxlKXt2YXIgbz1uZXcgaShhLnN0cmVhbUZpbGVzLGUsYS5wbGF0Zm9ybSxhLmVuY29kZUZpbGVOYW1lKSxoPTA7dHJ5e3QuZm9yRWFjaChmdW5jdGlvbih0LGUpe2grKzt2YXIgcj1mdW5jdGlvbih0LGUpe3ZhciByPXR8fGUsaT11W3JdO2lmKCFpKXRocm93IG5ldyBFcnJvcihyK1wiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhXCIpO3JldHVybiBpfShlLm9wdGlvbnMuY29tcHJlc3Npb24sYS5jb21wcmVzc2lvbiksaT1lLm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHxhLmNvbXByZXNzaW9uT3B0aW9uc3x8e30sbj1lLmRpcixzPWUuZGF0ZTtlLl9jb21wcmVzc1dvcmtlcihyLGkpLndpdGhTdHJlYW1JbmZvKFwiZmlsZVwiLHtuYW1lOnQsZGlyOm4sZGF0ZTpzLGNvbW1lbnQ6ZS5jb21tZW50fHxcIlwiLHVuaXhQZXJtaXNzaW9uczplLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczplLmRvc1Blcm1pc3Npb25zfSkucGlwZShvKX0pLG8uZW50cmllc0NvdW50PWh9Y2F0Y2godCl7by5lcnJvcih0KX1yZXR1cm4gb319LHtcIi4uL2NvbXByZXNzaW9uc1wiOjMsXCIuL1ppcEZpbGVXb3JrZXJcIjo4fV0sMTA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIG5ldyBpO2lmKGFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PVwiXCIsdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBpO2Zvcih2YXIgZSBpbiB0aGlzKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbZV0mJih0W2VdPXRoaXNbZV0pO3JldHVybiB0fX0oaS5wcm90b3R5cGU9dChcIi4vb2JqZWN0XCIpKS5sb2FkQXN5bmM9dChcIi4vbG9hZFwiKSxpLnN1cHBvcnQ9dChcIi4vc3VwcG9ydFwiKSxpLmRlZmF1bHRzPXQoXCIuL2RlZmF1bHRzXCIpLGkudmVyc2lvbj1cIjMuNy4xXCIsaS5sb2FkQXN5bmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4obmV3IGkpLmxvYWRBc3luYyh0LGUpfSxpLmV4dGVybmFsPXQoXCIuL2V4dGVybmFsXCIpLGUuZXhwb3J0cz1pfSx7XCIuL2RlZmF1bHRzXCI6NSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9sb2FkXCI6MTEsXCIuL29iamVjdFwiOjE1LFwiLi9zdXBwb3J0XCI6MzB9XSwxMTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuL3V0aWxzXCIpLG49dChcIi4vZXh0ZXJuYWxcIiksbz10KFwiLi91dGY4XCIpLGg9dChcIi4vemlwRW50cmllc1wiKSxzPXQoXCIuL3N0cmVhbS9DcmMzMlByb2JlXCIpLHU9dChcIi4vbm9kZWpzVXRpbHNcIik7ZnVuY3Rpb24gbChpKXtyZXR1cm4gbmV3IG4uUHJvbWlzZShmdW5jdGlvbih0LGUpe3ZhciByPWkuZGVjb21wcmVzc2VkLmdldENvbnRlbnRXb3JrZXIoKS5waXBlKG5ldyBzKTtyLm9uKFwiZXJyb3JcIixmdW5jdGlvbih0KXtlKHQpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe3Iuc3RyZWFtSW5mby5jcmMzMiE9PWkuZGVjb21wcmVzc2VkLmNyYzMyP2UobmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoXCIpKTp0KCl9KS5yZXN1bWUoKX0pfWUuZXhwb3J0cz1mdW5jdGlvbih0LHMpe3ZhciBhPXRoaXM7cmV0dXJuIHM9aS5leHRlbmQoc3x8e30se2Jhc2U2NDohMSxjaGVja0NSQzMyOiExLG9wdGltaXplZEJpbmFyeVN0cmluZzohMSxjcmVhdGVGb2xkZXJzOiExLGRlY29kZUZpbGVOYW1lOm8udXRmOGRlY29kZX0pLHUuaXNOb2RlJiZ1LmlzU3RyZWFtKHQpP24uUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSlNaaXAgY2FuJ3QgYWNjZXB0IGEgc3RyZWFtIHdoZW4gbG9hZGluZyBhIHppcCBmaWxlLlwiKSk6aS5wcmVwYXJlQ29udGVudChcInRoZSBsb2FkZWQgemlwIGZpbGVcIix0LCEwLHMub3B0aW1pemVkQmluYXJ5U3RyaW5nLHMuYmFzZTY0KS50aGVuKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBoKHMpO3JldHVybiBlLmxvYWQodCksZX0pLnRoZW4oZnVuY3Rpb24odCl7dmFyIGU9W24uUHJvbWlzZS5yZXNvbHZlKHQpXSxyPXQuZmlsZXM7aWYocy5jaGVja0NSQzMyKWZvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWUucHVzaChsKHJbaV0pKTtyZXR1cm4gbi5Qcm9taXNlLmFsbChlKX0pLnRoZW4oZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuc2hpZnQoKSxyPWUuZmlsZXMsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgbj1yW2ldO2EuZmlsZShuLmZpbGVOYW1lU3RyLG4uZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6bi5kYXRlLGRpcjpuLmRpcixjb21tZW50Om4uZmlsZUNvbW1lbnRTdHIubGVuZ3RoP24uZmlsZUNvbW1lbnRTdHI6bnVsbCx1bml4UGVybWlzc2lvbnM6bi51bml4UGVybWlzc2lvbnMsZG9zUGVybWlzc2lvbnM6bi5kb3NQZXJtaXNzaW9ucyxjcmVhdGVGb2xkZXJzOnMuY3JlYXRlRm9sZGVyc30pfXJldHVybiBlLnppcENvbW1lbnQubGVuZ3RoJiYoYS5jb21tZW50PWUuemlwQ29tbWVudCksYX0pfX0se1wiLi9leHRlcm5hbFwiOjYsXCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9DcmMzMlByb2JlXCI6MjUsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwRW50cmllc1wiOjMzfV0sMTI6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KFwiLi4vdXRpbHNcIiksbj10KFwiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyh0LGUpe24uY2FsbCh0aGlzLFwiTm9kZWpzIHN0cmVhbSBpbnB1dCBhZGFwdGVyIGZvciBcIit0KSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0oZSl9aS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7KHRoaXMuX3N0cmVhbT10KS5wYXVzZSgpLHQub24oXCJkYXRhXCIsZnVuY3Rpb24odCl7ZS5wdXNoKHtkYXRhOnQsbWV0YTp7cGVyY2VudDowfX0pfSkub24oXCJlcnJvclwiLGZ1bmN0aW9uKHQpe2UuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj10OmUuZXJyb3IodCl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7ZS5pc1BhdXNlZD9lLl91cHN0cmVhbUVuZGVkPSEwOmUuZW5kKCl9KX0scy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIW4ucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhbi5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0sZS5leHBvcnRzPXN9LHtcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuLi91dGlsc1wiOjMyfV0sMTM6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlO2Z1bmN0aW9uIGkodCxlLHIpe24uY2FsbCh0aGlzLGUpLHRoaXMuX2hlbHBlcj10O3ZhciBpPXRoaXM7dC5vbihcImRhdGFcIixmdW5jdGlvbih0LGUpe2kucHVzaCh0KXx8aS5faGVscGVyLnBhdXNlKCksciYmcihlKX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbih0KXtpLmVtaXQoXCJlcnJvclwiLHQpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe2kucHVzaChudWxsKX0pfXQoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLG4pLGkucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dGhpcy5faGVscGVyLnJlc3VtZSgpfSxlLmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9e2lzTm9kZTpcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyLG5ld0J1ZmZlckZyb206ZnVuY3Rpb24odCxlKXtpZihCdWZmZXIuZnJvbSYmQnVmZmVyLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIEJ1ZmZlci5mcm9tKHQsZSk7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJkYXRhXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IEJ1ZmZlcih0LGUpfSxhbGxvY0J1ZmZlcjpmdW5jdGlvbih0KXtpZihCdWZmZXIuYWxsb2MpcmV0dXJuIEJ1ZmZlci5hbGxvYyh0KTt2YXIgZT1uZXcgQnVmZmVyKHQpO3JldHVybiBlLmZpbGwoMCksZX0saXNCdWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KX0saXNTdHJlYW06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQub24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQucGF1c2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVzdW1lfX19LHt9XSwxNTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHModCxlLHIpe3ZhciBpLG49dS5nZXRUeXBlT2YoZSkscz11LmV4dGVuZChyfHx7fSxmKTtzLmRhdGU9cy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09cy5jb21wcmVzc2lvbiYmKHMuY29tcHJlc3Npb249cy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxcInN0cmluZ1wiPT10eXBlb2Ygcy51bml4UGVybWlzc2lvbnMmJihzLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChzLnVuaXhQZXJtaXNzaW9ucyw4KSkscy51bml4UGVybWlzc2lvbnMmJjE2Mzg0JnMudW5peFBlcm1pc3Npb25zJiYocy5kaXI9ITApLHMuZG9zUGVybWlzc2lvbnMmJjE2JnMuZG9zUGVybWlzc2lvbnMmJihzLmRpcj0hMCkscy5kaXImJih0PWcodCkpLHMuY3JlYXRlRm9sZGVycyYmKGk9Xyh0KSkmJmIuY2FsbCh0aGlzLGksITApO3ZhciBhPVwic3RyaW5nXCI9PT1uJiYhMT09PXMuYmluYXJ5JiYhMT09PXMuYmFzZTY0O3ImJnZvaWQgMCE9PXIuYmluYXJ5fHwocy5iaW5hcnk9IWEpLChlIGluc3RhbmNlb2YgZCYmMD09PWUudW5jb21wcmVzc2VkU2l6ZXx8cy5kaXJ8fCFlfHwwPT09ZS5sZW5ndGgpJiYocy5iYXNlNjQ9ITEscy5iaW5hcnk9ITAsZT1cIlwiLHMuY29tcHJlc3Npb249XCJTVE9SRVwiLG49XCJzdHJpbmdcIik7dmFyIG89bnVsbDtvPWUgaW5zdGFuY2VvZiBkfHxlIGluc3RhbmNlb2YgbD9lOnAuaXNOb2RlJiZwLmlzU3RyZWFtKGUpP25ldyBtKHQsZSk6dS5wcmVwYXJlQ29udGVudCh0LGUscy5iaW5hcnkscy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcscy5iYXNlNjQpO3ZhciBoPW5ldyBjKHQsbyxzKTt0aGlzLmZpbGVzW3RdPWh9dmFyIG49dChcIi4vdXRmOFwiKSx1PXQoXCIuL3V0aWxzXCIpLGw9dChcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIiksYT10KFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLGY9dChcIi4vZGVmYXVsdHNcIiksZD10KFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGM9dChcIi4vemlwT2JqZWN0XCIpLG89dChcIi4vZ2VuZXJhdGVcIikscD10KFwiLi9ub2RlanNVdGlsc1wiKSxtPXQoXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIiksXz1mdW5jdGlvbih0KXtcIi9cIj09PXQuc2xpY2UoLTEpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTEpKTt2YXIgZT10Lmxhc3RJbmRleE9mKFwiL1wiKTtyZXR1cm4gMDxlP3Quc3Vic3RyaW5nKDAsZSk6XCJcIn0sZz1mdW5jdGlvbih0KXtyZXR1cm5cIi9cIiE9PXQuc2xpY2UoLTEpJiYodCs9XCIvXCIpLHR9LGI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT12b2lkIDAhPT1lP2U6Zi5jcmVhdGVGb2xkZXJzLHQ9Zyh0KSx0aGlzLmZpbGVzW3RdfHxzLmNhbGwodGhpcyx0LG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOmV9KSx0aGlzLmZpbGVzW3RdfTtmdW5jdGlvbiBoKHQpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9dmFyIGk9e2xvYWQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZm9yRWFjaDpmdW5jdGlvbih0KXt2YXIgZSxyLGk7Zm9yKGUgaW4gdGhpcy5maWxlcylpPXRoaXMuZmlsZXNbZV0sKHI9ZS5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLGUubGVuZ3RoKSkmJmUuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmdChyLGkpfSxmaWx0ZXI6ZnVuY3Rpb24ocil7dmFyIGk9W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe3IodCxlKSYmaS5wdXNoKGUpfSksaX0sZmlsZTpmdW5jdGlvbih0LGUscil7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5yb290K3Qscy5jYWxsKHRoaXMsdCxlLHIpLHRoaXM7aWYoaCh0KSl7dmFyIGk9dDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm4hZS5kaXImJmkudGVzdCh0KX0pfXZhciBuPXRoaXMuZmlsZXNbdGhpcy5yb290K3RdO3JldHVybiBuJiYhbi5kaXI/bjpudWxsfSxmb2xkZXI6ZnVuY3Rpb24ocil7aWYoIXIpcmV0dXJuIHRoaXM7aWYoaChyKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kaXImJnIudGVzdCh0KX0pO3ZhciB0PXRoaXMucm9vdCtyLGU9Yi5jYWxsKHRoaXMsdCksaT10aGlzLmNsb25lKCk7cmV0dXJuIGkucm9vdD1lLm5hbWUsaX0scmVtb3ZlOmZ1bmN0aW9uKHIpe3I9dGhpcy5yb290K3I7dmFyIHQ9dGhpcy5maWxlc1tyXTtpZih0fHwoXCIvXCIhPT1yLnNsaWNlKC0xKSYmKHIrPVwiL1wiKSx0PXRoaXMuZmlsZXNbcl0pLHQmJiF0LmRpcilkZWxldGUgdGhpcy5maWxlc1tyXTtlbHNlIGZvcih2YXIgZT10aGlzLmZpbHRlcihmdW5jdGlvbih0LGUpe3JldHVybiBlLm5hbWUuc2xpY2UoMCxyLmxlbmd0aCk9PT1yfSksaT0wO2k8ZS5sZW5ndGg7aSsrKWRlbGV0ZSB0aGlzLmZpbGVzW2VbaV0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuXCIpfSxnZW5lcmF0ZUludGVybmFsU3RyZWFtOmZ1bmN0aW9uKHQpe3ZhciBlLHI9e307dHJ5e2lmKChyPXUuZXh0ZW5kKHR8fHt9LHtzdHJlYW1GaWxlczohMSxjb21wcmVzc2lvbjpcIlNUT1JFXCIsY29tcHJlc3Npb25PcHRpb25zOm51bGwsdHlwZTpcIlwiLHBsYXRmb3JtOlwiRE9TXCIsY29tbWVudDpudWxsLG1pbWVUeXBlOlwiYXBwbGljYXRpb24vemlwXCIsZW5jb2RlRmlsZU5hbWU6bi51dGY4ZW5jb2RlfSkpLnR5cGU9ci50eXBlLnRvTG93ZXJDYXNlKCksci5jb21wcmVzc2lvbj1yLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksXCJiaW5hcnlzdHJpbmdcIj09PXIudHlwZSYmKHIudHlwZT1cInN0cmluZ1wiKSwhci50eXBlKXRocm93IG5ldyBFcnJvcihcIk5vIG91dHB1dCB0eXBlIHNwZWNpZmllZC5cIik7dS5jaGVja1N1cHBvcnQoci50eXBlKSxcImRhcndpblwiIT09ci5wbGF0Zm9ybSYmXCJmcmVlYnNkXCIhPT1yLnBsYXRmb3JtJiZcImxpbnV4XCIhPT1yLnBsYXRmb3JtJiZcInN1bm9zXCIhPT1yLnBsYXRmb3JtfHwoci5wbGF0Zm9ybT1cIlVOSVhcIiksXCJ3aW4zMlwiPT09ci5wbGF0Zm9ybSYmKHIucGxhdGZvcm09XCJET1NcIik7dmFyIGk9ci5jb21tZW50fHx0aGlzLmNvbW1lbnR8fFwiXCI7ZT1vLmdlbmVyYXRlV29ya2VyKHRoaXMscixpKX1jYXRjaCh0KXsoZT1uZXcgbChcImVycm9yXCIpKS5lcnJvcih0KX1yZXR1cm4gbmV3IGEoZSxyLnR5cGV8fFwic3RyaW5nXCIsci5taW1lVHlwZSl9LGdlbmVyYXRlQXN5bmM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKHQpLmFjY3VtdWxhdGUoZSl9LGdlbmVyYXRlTm9kZVN0cmVhbTpmdW5jdGlvbih0LGUpe3JldHVybih0PXR8fHt9KS50eXBlfHwodC50eXBlPVwibm9kZWJ1ZmZlclwiKSx0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0odCkudG9Ob2RlanNTdHJlYW0oZSl9fTtlLmV4cG9ydHM9aX0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vZGVmYXVsdHNcIjo1LFwiLi9nZW5lcmF0ZVwiOjksXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIjoxMixcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3RyZWFtL1N0cmVhbUhlbHBlclwiOjI5LFwiLi91dGY4XCI6MzEsXCIuL3V0aWxzXCI6MzIsXCIuL3ppcE9iamVjdFwiOjM1fV0sMTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dChcInN0cmVhbVwiKX0se3N0cmVhbTp2b2lkIDB9XSwxNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyx0KTtmb3IodmFyIGU9MDtlPHRoaXMuZGF0YS5sZW5ndGg7ZSsrKXRbZV09MjU1JnRbZV19dChcIi4uL3V0aWxzXCIpLmluaGVyaXRzKG4saSksbi5wcm90b3R5cGUuYnl0ZUF0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRhdGFbdGhpcy56ZXJvK3RdfSxuLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jaGFyQ29kZUF0KDApLHI9dC5jaGFyQ29kZUF0KDEpLGk9dC5jaGFyQ29kZUF0KDIpLG49dC5jaGFyQ29kZUF0KDMpLHM9dGhpcy5sZW5ndGgtNDswPD1zOy0tcylpZih0aGlzLmRhdGFbc109PT1lJiZ0aGlzLmRhdGFbcysxXT09PXImJnRoaXMuZGF0YVtzKzJdPT09aSYmdGhpcy5kYXRhW3MrM109PT1uKXJldHVybiBzLXRoaXMuemVybztyZXR1cm4tMX0sbi5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2hhckNvZGVBdCgwKSxyPXQuY2hhckNvZGVBdCgxKSxpPXQuY2hhckNvZGVBdCgyKSxuPXQuY2hhckNvZGVBdCgzKSxzPXRoaXMucmVhZERhdGEoNCk7cmV0dXJuIGU9PT1zWzBdJiZyPT09c1sxXSYmaT09PXNbMl0mJm49PT1zWzNdfSxuLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbih0KXtpZih0aGlzLmNoZWNrT2Zmc2V0KHQpLDA9PT10KXJldHVybltdO3ZhciBlPXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCt0KTtyZXR1cm4gdGhpcy5pbmRleCs9dCxlfSxlLmV4cG9ydHM9bn0se1wiLi4vdXRpbHNcIjozMixcIi4vRGF0YVJlYWRlclwiOjE4fV0sMTg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gbih0KXt0aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aCx0aGlzLmluZGV4PTAsdGhpcy56ZXJvPTB9bi5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKHQpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K3QpfSxjaGVja0luZGV4OmZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPHRoaXMuemVybyt0fHx0PDApdGhyb3cgbmV3IEVycm9yKFwiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSBcIit0aGlzLmxlbmd0aCtcIiwgYXNrZWQgaW5kZXggPSBcIit0K1wiKS4gQ29ycnVwdGVkIHppcCA/XCIpfSxzZXRJbmRleDpmdW5jdGlvbih0KXt0aGlzLmNoZWNrSW5kZXgodCksdGhpcy5pbmRleD10fSxza2lwOmZ1bmN0aW9uKHQpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCt0KX0sYnl0ZUF0OmZ1bmN0aW9uKHQpe30scmVhZEludDpmdW5jdGlvbih0KXt2YXIgZSxyPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQodCksZT10aGlzLmluZGV4K3QtMTtlPj10aGlzLmluZGV4O2UtLSlyPShyPDw4KSt0aGlzLmJ5dGVBdChlKTtyZXR1cm4gdGhpcy5pbmRleCs9dCxyfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiBpLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIsdGhpcy5yZWFkRGF0YSh0KSl9LHJlYWREYXRhOmZ1bmN0aW9uKHQpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24odCl7fSxyZWFkQW5kQ2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24odCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoMTk4MCsodD4+MjUmMTI3KSwodD4+MjEmMTUpLTEsdD4+MTYmMzEsdD4+MTEmMzEsdD4+NSY2MywoMzEmdCk8PDEpKX19LGUuZXhwb3J0cz1ufSx7XCIuLi91dGlsc1wiOjMyfV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT10KFwiLi9VaW50OEFycmF5UmVhZGVyXCIpO2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMsdCl9dChcIi4uL3V0aWxzXCIpLmluaGVyaXRzKG4saSksbi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaGVja09mZnNldCh0KTt2YXIgZT10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrdCk7cmV0dXJuIHRoaXMuaW5kZXgrPXQsZX0sZS5leHBvcnRzPW59LHtcIi4uL3V0aWxzXCI6MzIsXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIjoyMX1dLDIwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vRGF0YVJlYWRlclwiKTtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzLHQpfXQoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy56ZXJvK3QpfSxuLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKHQpLXRoaXMuemVyb30sbi5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09dGhpcy5yZWFkRGF0YSg0KX0sbi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaGVja09mZnNldCh0KTt2YXIgZT10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrdCk7cmV0dXJuIHRoaXMuaW5kZXgrPXQsZX0sZS5leHBvcnRzPW59LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0RhdGFSZWFkZXJcIjoxOH1dLDIxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vQXJyYXlSZWFkZXJcIik7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyx0KX10KFwiLi4vdXRpbHNcIikuaW5oZXJpdHMobixpKSxuLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbih0KXtpZih0aGlzLmNoZWNrT2Zmc2V0KHQpLDA9PT10KXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgZT10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrdCk7cmV0dXJuIHRoaXMuaW5kZXgrPXQsZX0sZS5leHBvcnRzPW59LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0FycmF5UmVhZGVyXCI6MTd9XSwyMjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuLi91dGlsc1wiKSxuPXQoXCIuLi9zdXBwb3J0XCIpLHM9dChcIi4vQXJyYXlSZWFkZXJcIiksYT10KFwiLi9TdHJpbmdSZWFkZXJcIiksbz10KFwiLi9Ob2RlQnVmZmVyUmVhZGVyXCIpLGg9dChcIi4vVWludDhBcnJheVJlYWRlclwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5nZXRUeXBlT2YodCk7cmV0dXJuIGkuY2hlY2tTdXBwb3J0KGUpLFwic3RyaW5nXCIhPT1lfHxuLnVpbnQ4YXJyYXk/XCJub2RlYnVmZmVyXCI9PT1lP25ldyBvKHQpOm4udWludDhhcnJheT9uZXcgaChpLnRyYW5zZm9ybVRvKFwidWludDhhcnJheVwiLHQpKTpuZXcgcyhpLnRyYW5zZm9ybVRvKFwiYXJyYXlcIix0KSk6bmV3IGEodCl9fSx7XCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9BcnJheVJlYWRlclwiOjE3LFwiLi9Ob2RlQnVmZmVyUmVhZGVyXCI6MTksXCIuL1N0cmluZ1JlYWRlclwiOjIwLFwiLi9VaW50OEFycmF5UmVhZGVyXCI6MjF9XSwyMzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IuTE9DQUxfRklMRV9IRUFERVI9XCJQS1x1MDAwM1x1MDAwNFwiLHIuQ0VOVFJBTF9GSUxFX0hFQURFUj1cIlBLXHUwMDAxXHUwMDAyXCIsci5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9XCJQS1x1MDAwNVx1MDAwNlwiLHIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj1cIlBLXHUwMDA2XHUwMDA3XCIsci5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9XCJQS1x1MDAwNlx1MDAwNlwiLHIuREFUQV9ERVNDUklQVE9SPVwiUEtcdTAwMDdcXGJcIn0se31dLDI0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vR2VuZXJpY1dvcmtlclwiKSxuPXQoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBzKHQpe2kuY2FsbCh0aGlzLFwiQ29udmVydFdvcmtlciB0byBcIit0KSx0aGlzLmRlc3RUeXBlPXR9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih0KXt0aGlzLnB1c2goe2RhdGE6bi50cmFuc2Zvcm1Ubyh0aGlzLmRlc3RUeXBlLHQuZGF0YSksbWV0YTp0Lm1ldGF9KX0sZS5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vR2VuZXJpY1dvcmtlclwiKSxuPXQoXCIuLi9jcmMzMlwiKTtmdW5jdGlvbiBzKCl7aS5jYWxsKHRoaXMsXCJDcmMzMlByb2JlXCIpLHRoaXMud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLDApfXQoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih0KXt0aGlzLnN0cmVhbUluZm8uY3JjMzI9bih0LmRhdGEsdGhpcy5zdHJlYW1JbmZvLmNyYzMyfHwwKSx0aGlzLnB1c2godCl9LGUuZXhwb3J0cz1zfSx7XCIuLi9jcmMzMlwiOjQsXCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuLi91dGlsc1wiKSxuPXQoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyh0KXtuLmNhbGwodGhpcyxcIkRhdGFMZW5ndGhQcm9iZSBmb3IgXCIrdCksdGhpcy5wcm9wTmFtZT10LHRoaXMud2l0aFN0cmVhbUluZm8odCwwKX1pLmluaGVyaXRzKHMsbikscy5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXRoaXMuc3RyZWFtSW5mb1t0aGlzLnByb3BOYW1lXXx8MDt0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV09ZSt0LmRhdGEubGVuZ3RofW4ucHJvdG90eXBlLnByb2Nlc3NDaHVuay5jYWxsKHRoaXMsdCl9LGUuZXhwb3J0cz1zfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPXQoXCIuLi91dGlsc1wiKSxuPXQoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyh0KXtuLmNhbGwodGhpcyxcIkRhdGFXb3JrZXJcIik7dmFyIGU9dGhpczt0aGlzLmRhdGFJc1JlYWR5PSExLHRoaXMuaW5kZXg9MCx0aGlzLm1heD0wLHRoaXMuZGF0YT1udWxsLHRoaXMudHlwZT1cIlwiLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsdC50aGVuKGZ1bmN0aW9uKHQpe2UuZGF0YUlzUmVhZHk9ITAsZS5kYXRhPXQsZS5tYXg9dCYmdC5sZW5ndGh8fDAsZS50eXBlPWkuZ2V0VHlwZU9mKHQpLGUuaXNQYXVzZWR8fGUuX3RpY2tBbmRSZXBlYXQoKX0sZnVuY3Rpb24odCl7ZS5lcnJvcih0KX0pfWkuaW5oZXJpdHMocyxuKSxzLnByb3RvdHlwZS5jbGVhblVwPWZ1bmN0aW9uKCl7bi5wcm90b3R5cGUuY2xlYW5VcC5jYWxsKHRoaXMpLHRoaXMuZGF0YT1udWxsfSxzLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIW4ucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYoIXRoaXMuX3RpY2tTY2hlZHVsZWQmJnRoaXMuZGF0YUlzUmVhZHkmJih0aGlzLl90aWNrU2NoZWR1bGVkPSEwLGkuZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSksITApfSxzLnByb3RvdHlwZS5fdGlja0FuZFJlcGVhdD1mdW5jdGlvbigpe3RoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkfHwodGhpcy5fdGljaygpLHRoaXMuaXNGaW5pc2hlZHx8KGkuZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSx0aGlzLl90aWNrU2NoZWR1bGVkPSEwKSl9LHMucHJvdG90eXBlLl90aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciB0PW51bGwsZT1NYXRoLm1pbih0aGlzLm1heCx0aGlzLmluZGV4KzE2Mzg0KTtpZih0aGlzLmluZGV4Pj10aGlzLm1heClyZXR1cm4gdGhpcy5lbmQoKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXCJzdHJpbmdcIjp0PXRoaXMuZGF0YS5zdWJzdHJpbmcodGhpcy5pbmRleCxlKTticmVhaztjYXNlXCJ1aW50OGFycmF5XCI6dD10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCxlKTticmVhaztjYXNlXCJhcnJheVwiOmNhc2VcIm5vZGVidWZmZXJcIjp0PXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LGUpfXJldHVybiB0aGlzLmluZGV4PWUsdGhpcy5wdXNoKHtkYXRhOnQsbWV0YTp7cGVyY2VudDp0aGlzLm1heD90aGlzLmluZGV4L3RoaXMubWF4KjEwMDowfX0pfSxlLmV4cG9ydHM9c30se1wiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQpe3RoaXMubmFtZT10fHxcImRlZmF1bHRcIix0aGlzLnN0cmVhbUluZm89e30sdGhpcy5nZW5lcmF0ZWRFcnJvcj1udWxsLHRoaXMuZXh0cmFTdHJlYW1JbmZvPXt9LHRoaXMuaXNQYXVzZWQ9ITAsdGhpcy5pc0ZpbmlzaGVkPSExLHRoaXMuaXNMb2NrZWQ9ITEsdGhpcy5fbGlzdGVuZXJzPXtkYXRhOltdLGVuZDpbXSxlcnJvcjpbXX0sdGhpcy5wcmV2aW91cz1udWxsfWkucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKHQpe3RoaXMuZW1pdChcImRhdGFcIix0KX0sZW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3RoaXMuZmx1c2goKTt0cnl7dGhpcy5lbWl0KFwiZW5kXCIpLHRoaXMuY2xlYW5VcCgpLHRoaXMuaXNGaW5pc2hlZD0hMH1jYXRjaCh0KXt0aGlzLmVtaXQoXCJlcnJvclwiLHQpfXJldHVybiEwfSxlcnJvcjpmdW5jdGlvbih0KXtyZXR1cm4hdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPXQ6KHRoaXMuaXNGaW5pc2hlZD0hMCx0aGlzLmVtaXQoXCJlcnJvclwiLHQpLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMuZXJyb3IodCksdGhpcy5jbGVhblVwKCkpLCEwKX0sb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzW3RdLnB1c2goZSksdGhpc30sY2xlYW5VcDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtSW5mbz10aGlzLmdlbmVyYXRlZEVycm9yPXRoaXMuZXh0cmFTdHJlYW1JbmZvPW51bGwsdGhpcy5fbGlzdGVuZXJzPVtdfSxlbWl0OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fbGlzdGVuZXJzW3RdKWZvcih2YXIgcj0wO3I8dGhpcy5fbGlzdGVuZXJzW3RdLmxlbmd0aDtyKyspdGhpcy5fbGlzdGVuZXJzW3RdW3JdLmNhbGwodGhpcyxlKX0scGlwZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWdpc3RlclByZXZpb3VzKHRoaXMpfSxyZWdpc3RlclByZXZpb3VzOmZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNMb2NrZWQpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0cmVhbSAnXCIrdGhpcytcIicgaGFzIGFscmVhZHkgYmVlbiB1c2VkLlwiKTt0aGlzLnN0cmVhbUluZm89dC5zdHJlYW1JbmZvLHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpcy5wcmV2aW91cz10O3ZhciBlPXRoaXM7cmV0dXJuIHQub24oXCJkYXRhXCIsZnVuY3Rpb24odCl7ZS5wcm9jZXNzQ2h1bmsodCl9KSx0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtlLmVuZCgpfSksdC5vbihcImVycm9yXCIsZnVuY3Rpb24odCl7ZS5lcnJvcih0KX0pLHRoaXN9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNQYXVzZWQmJiF0aGlzLmlzRmluaXNoZWQmJih0aGlzLmlzUGF1c2VkPSEwLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucGF1c2UoKSwhMCl9LHJlc3VtZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dmFyIHQ9dGhpcy5pc1BhdXNlZD0hMTtyZXR1cm4gdGhpcy5nZW5lcmF0ZWRFcnJvciYmKHRoaXMuZXJyb3IodGhpcy5nZW5lcmF0ZWRFcnJvciksdD0hMCksdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5yZXN1bWUoKSwhdH0sZmx1c2g6ZnVuY3Rpb24oKXt9LHByb2Nlc3NDaHVuazpmdW5jdGlvbih0KXt0aGlzLnB1c2godCl9LHdpdGhTdHJlYW1JbmZvOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZXh0cmFTdHJlYW1JbmZvW3RdPWUsdGhpcy5tZXJnZVN0cmVhbUluZm8oKSx0aGlzfSxtZXJnZVN0cmVhbUluZm86ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5leHRyYVN0cmVhbUluZm8pdGhpcy5leHRyYVN0cmVhbUluZm8uaGFzT3duUHJvcGVydHkodCkmJih0aGlzLnN0cmVhbUluZm9bdF09dGhpcy5leHRyYVN0cmVhbUluZm9bdF0pfSxsb2NrOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtICdcIit0aGlzK1wiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXCIpO3RoaXMuaXNMb2NrZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5sb2NrKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9XCJXb3JrZXIgXCIrdGhpcy5uYW1lO3JldHVybiB0aGlzLnByZXZpb3VzP3RoaXMucHJldmlvdXMrXCIgLT4gXCIrdDp0fX0sZS5leHBvcnRzPWl9LHt9XSwyOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBoPXQoXCIuLi91dGlsc1wiKSxuPXQoXCIuL0NvbnZlcnRXb3JrZXJcIikscz10KFwiLi9HZW5lcmljV29ya2VyXCIpLHU9dChcIi4uL2Jhc2U2NFwiKSxpPXQoXCIuLi9zdXBwb3J0XCIpLGE9dChcIi4uL2V4dGVybmFsXCIpLG89bnVsbDtpZihpLm5vZGVzdHJlYW0pdHJ5e289dChcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCIpfWNhdGNoKHQpe31mdW5jdGlvbiBsKHQsbyl7cmV0dXJuIG5ldyBhLlByb21pc2UoZnVuY3Rpb24oZSxyKXt2YXIgaT1bXSxuPXQuX2ludGVybmFsVHlwZSxzPXQuX291dHB1dFR5cGUsYT10Ll9taW1lVHlwZTt0Lm9uKFwiZGF0YVwiLGZ1bmN0aW9uKHQsZSl7aS5wdXNoKHQpLG8mJm8oZSl9KS5vbihcImVycm9yXCIsZnVuY3Rpb24odCl7aT1bXSxyKHQpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe3RyeXt2YXIgdD1mdW5jdGlvbih0LGUscil7c3dpdGNoKHQpe2Nhc2VcImJsb2JcIjpyZXR1cm4gaC5uZXdCbG9iKGgudHJhbnNmb3JtVG8oXCJhcnJheWJ1ZmZlclwiLGUpLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB1LmVuY29kZShlKTtkZWZhdWx0OnJldHVybiBoLnRyYW5zZm9ybVRvKHQsZSl9fShzLGZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0wLG49bnVsbCxzPTA7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzKz1lW3JdLmxlbmd0aDtzd2l0Y2godCl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIGUuam9pbihcIlwiKTtjYXNlXCJhcnJheVwiOnJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpO2Nhc2VcInVpbnQ4YXJyYXlcIjpmb3Iobj1uZXcgVWludDhBcnJheShzKSxyPTA7cjxlLmxlbmd0aDtyKyspbi5zZXQoZVtyXSxpKSxpKz1lW3JdLmxlbmd0aDtyZXR1cm4gbjtjYXNlXCJub2RlYnVmZmVyXCI6cmV0dXJuIEJ1ZmZlci5jb25jYXQoZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjb25jYXQgOiB1bnN1cHBvcnRlZCB0eXBlICdcIit0K1wiJ1wiKX19KG4saSksYSk7ZSh0KX1jYXRjaCh0KXtyKHQpfWk9W119KS5yZXN1bWUoKX0pfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBpPWU7c3dpdGNoKGUpe2Nhc2VcImJsb2JcIjpjYXNlXCJhcnJheWJ1ZmZlclwiOmk9XCJ1aW50OGFycmF5XCI7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6aT1cInN0cmluZ1wifXRyeXt0aGlzLl9pbnRlcm5hbFR5cGU9aSx0aGlzLl9vdXRwdXRUeXBlPWUsdGhpcy5fbWltZVR5cGU9cixoLmNoZWNrU3VwcG9ydChpKSx0aGlzLl93b3JrZXI9dC5waXBlKG5ldyBuKGkpKSx0LmxvY2soKX1jYXRjaCh0KXt0aGlzLl93b3JrZXI9bmV3IHMoXCJlcnJvclwiKSx0aGlzLl93b3JrZXIuZXJyb3IodCl9fWYucHJvdG90eXBlPXthY2N1bXVsYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBsKHRoaXMsdCl9LG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztyZXR1cm5cImRhdGFcIj09PXQ/dGhpcy5fd29ya2VyLm9uKHQsZnVuY3Rpb24odCl7ZS5jYWxsKHIsdC5kYXRhLHQubWV0YSl9KTp0aGlzLl93b3JrZXIub24odCxmdW5jdGlvbigpe2guZGVsYXkoZSxhcmd1bWVudHMscil9KSx0aGlzfSxyZXN1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWxheSh0aGlzLl93b3JrZXIucmVzdW1lLFtdLHRoaXMuX3dvcmtlciksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd29ya2VyLnBhdXNlKCksdGhpc30sdG9Ob2RlanNTdHJlYW06ZnVuY3Rpb24odCl7aWYoaC5jaGVja1N1cHBvcnQoXCJub2Rlc3RyZWFtXCIpLFwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZSl0aHJvdyBuZXcgRXJyb3IodGhpcy5fb3V0cHV0VHlwZStcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kXCIpO3JldHVybiBuZXcgbyh0aGlzLHtvYmplY3RNb2RlOlwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZX0sdCl9fSxlLmV4cG9ydHM9Zn0se1wiLi4vYmFzZTY0XCI6MSxcIi4uL2V4dGVybmFsXCI6NixcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCI6MTMsXCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9Db252ZXJ0V29ya2VyXCI6MjQsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDMwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7aWYoci5iYXNlNjQ9ITAsci5hcnJheT0hMCxyLnN0cmluZz0hMCxyLmFycmF5YnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksci5ub2RlYnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXIsci51aW50OGFycmF5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcilyLmJsb2I9ITE7ZWxzZXt2YXIgaT1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e3IuYmxvYj0wPT09bmV3IEJsb2IoW2ldLHt0eXBlOlwiYXBwbGljYXRpb24vemlwXCJ9KS5zaXplfWNhdGNoKHQpe3RyeXt2YXIgbj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtuLmFwcGVuZChpKSxyLmJsb2I9MD09PW4uZ2V0QmxvYihcImFwcGxpY2F0aW9uL3ppcFwiKS5zaXplfWNhdGNoKHQpe3IuYmxvYj0hMX19fXRyeXtyLm5vZGVzdHJlYW09ISF0KFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlfWNhdGNoKHQpe3Iubm9kZXN0cmVhbT0hMX19LHtcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMzE6W2Z1bmN0aW9uKHQsZSxzKXtcInVzZSBzdHJpY3RcIjtmb3IodmFyIG89dChcIi4vdXRpbHNcIiksaD10KFwiLi9zdXBwb3J0XCIpLHI9dChcIi4vbm9kZWpzVXRpbHNcIiksaT10KFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSx1PW5ldyBBcnJheSgyNTYpLG49MDtuPDI1NjtuKyspdVtuXT0yNTI8PW4/NjoyNDg8PW4/NToyNDA8PW4/NDoyMjQ8PW4/MzoxOTI8PW4/MjoxO3VbMjU0XT11WzI1NF09MTtmdW5jdGlvbiBhKCl7aS5jYWxsKHRoaXMsXCJ1dGYtOCBkZWNvZGVcIiksdGhpcy5sZWZ0T3Zlcj1udWxsfWZ1bmN0aW9uIGwoKXtpLmNhbGwodGhpcyxcInV0Zi04IGVuY29kZVwiKX1zLnV0ZjhlbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGgubm9kZWJ1ZmZlcj9yLm5ld0J1ZmZlckZyb20odCxcInV0Zi04XCIpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxuLHMsYT10Lmxlbmd0aCxvPTA7Zm9yKG49MDtuPGE7bisrKTU1Mjk2PT0oNjQ1MTImKHI9dC5jaGFyQ29kZUF0KG4pKSkmJm4rMTxhJiY1NjMyMD09KDY0NTEyJihpPXQuY2hhckNvZGVBdChuKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKGktNTYzMjApLG4rKyksbys9cjwxMjg/MTpyPDIwNDg/MjpyPDY1NTM2PzM6NDtmb3IoZT1oLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkobyk6bmV3IEFycmF5KG8pLG49cz0wO3M8bztuKyspNTUyOTY9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQobikpKSYmbisxPGEmJjU2MzIwPT0oNjQ1MTImKGk9dC5jaGFyQ29kZUF0KG4rMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsoaS01NjMyMCksbisrKSxyPDEyOD9lW3MrK109cjoocjwyMDQ4P2VbcysrXT0xOTJ8cj4+PjY6KHI8NjU1MzY/ZVtzKytdPTIyNHxyPj4+MTI6KGVbcysrXT0yNDB8cj4+PjE4LGVbcysrXT0xMjh8cj4+PjEyJjYzKSxlW3MrK109MTI4fHI+Pj42JjYzKSxlW3MrK109MTI4fDYzJnIpO3JldHVybiBlfSh0KX0scy51dGY4ZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiBoLm5vZGVidWZmZXI/by50cmFuc2Zvcm1UbyhcIm5vZGVidWZmZXJcIix0KS50b1N0cmluZyhcInV0Zi04XCIpOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxuLHM9dC5sZW5ndGgsYT1uZXcgQXJyYXkoMipzKTtmb3IoZT1yPTA7ZTxzOylpZigoaT10W2UrK10pPDEyOClhW3IrK109aTtlbHNlIGlmKDQ8KG49dVtpXSkpYVtyKytdPTY1NTMzLGUrPW4tMTtlbHNle2ZvcihpJj0yPT09bj8zMTozPT09bj8xNTo3OzE8biYmZTxzOylpPWk8PDZ8NjMmdFtlKytdLG4tLTsxPG4/YVtyKytdPTY1NTMzOmk8NjU1MzY/YVtyKytdPWk6KGktPTY1NTM2LGFbcisrXT01NTI5NnxpPj4xMCYxMDIzLGFbcisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBhLmxlbmd0aCE9PXImJihhLnN1YmFycmF5P2E9YS5zdWJhcnJheSgwLHIpOmEubGVuZ3RoPXIpLG8uYXBwbHlGcm9tQ2hhckNvZGUoYSl9KHQ9by50cmFuc2Zvcm1UbyhoLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLHQpKX0sby5pbmhlcml0cyhhLGkpLGEucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbih0KXt2YXIgZT1vLnRyYW5zZm9ybVRvKGgudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsdC5kYXRhKTtpZih0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCl7aWYoaC51aW50OGFycmF5KXt2YXIgcj1lOyhlPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoK3RoaXMubGVmdE92ZXIubGVuZ3RoKSkuc2V0KHRoaXMubGVmdE92ZXIsMCksZS5zZXQocix0aGlzLmxlZnRPdmVyLmxlbmd0aCl9ZWxzZSBlPXRoaXMubGVmdE92ZXIuY29uY2F0KGUpO3RoaXMubGVmdE92ZXI9bnVsbH12YXIgaT1mdW5jdGlvbih0LGUpe3ZhciByO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxyPWUtMTswPD1yJiYxMjg9PSgxOTImdFtyXSk7KXItLTtyZXR1cm4gcjwwP2U6MD09PXI/ZTpyK3VbdFtyXV0+ZT9yOmV9KGUpLG49ZTtpIT09ZS5sZW5ndGgmJihoLnVpbnQ4YXJyYXk/KG49ZS5zdWJhcnJheSgwLGkpLHRoaXMubGVmdE92ZXI9ZS5zdWJhcnJheShpLGUubGVuZ3RoKSk6KG49ZS5zbGljZSgwLGkpLHRoaXMubGVmdE92ZXI9ZS5zbGljZShpLGUubGVuZ3RoKSkpLHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUobiksbWV0YTp0Lm1ldGF9KX0sYS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCYmKHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUodGhpcy5sZWZ0T3ZlciksbWV0YTp7fX0pLHRoaXMubGVmdE92ZXI9bnVsbCl9LHMuVXRmOERlY29kZVdvcmtlcj1hLG8uaW5oZXJpdHMobCxpKSxsLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24odCl7dGhpcy5wdXNoKHtkYXRhOnMudXRmOGVuY29kZSh0LmRhdGEpLG1ldGE6dC5tZXRhfSl9LHMuVXRmOEVuY29kZVdvcmtlcj1sfSx7XCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRpbHNcIjozMn1dLDMyOltmdW5jdGlvbih0LGUsYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dChcIi4vc3VwcG9ydFwiKSxoPXQoXCIuL2Jhc2U2NFwiKSxyPXQoXCIuL25vZGVqc1V0aWxzXCIpLGk9dChcInNldC1pbW1lZGlhdGUtc2hpbVwiKSx1PXQoXCIuL2V4dGVybmFsXCIpO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHR9ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7KytyKWVbcl09MjU1JnQuY2hhckNvZGVBdChyKTtyZXR1cm4gZX1hLm5ld0Jsb2I9ZnVuY3Rpb24oZSxyKXthLmNoZWNrU3VwcG9ydChcImJsb2JcIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZV0se3R5cGU6cn0pfWNhdGNoKHQpe3RyeXt2YXIgaT1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gaS5hcHBlbmQoZSksaS5nZXRCbG9iKHIpfWNhdGNoKHQpe3Rocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIil9fX07dmFyIHM9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPVtdLG49MCxzPXQubGVuZ3RoO2lmKHM8PXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KTtmb3IoO248czspXCJhcnJheVwiPT09ZXx8XCJub2RlYnVmZmVyXCI9PT1lP2kucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShuLE1hdGgubWluKG4rcixzKSkpKTppLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQuc3ViYXJyYXkobixNYXRoLm1pbihuK3IscykpKSksbis9cjtyZXR1cm4gaS5qb2luKFwiXCIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPVN0cmluZy5mcm9tQ2hhckNvZGUodFtyXSk7cmV0dXJuIGV9LGFwcGx5Q2FuQmVVc2VkOnt1aW50OGFycmF5OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBvLnVpbnQ4YXJyYXkmJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aH1jYXRjaCh0KXtyZXR1cm4hMX19KCksbm9kZWJ1ZmZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gby5ub2RlYnVmZmVyJiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIuYWxsb2NCdWZmZXIoMSkpLmxlbmd0aH1jYXRjaCh0KXtyZXR1cm4hMX19KCl9fTtmdW5jdGlvbiBmKHQpe3ZhciBlPTY1NTM2LHI9YS5nZXRUeXBlT2YodCksaT0hMDtpZihcInVpbnQ4YXJyYXlcIj09PXI/aT1zLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6XCJub2RlYnVmZmVyXCI9PT1yJiYoaT1zLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLGkpZm9yKDsxPGU7KXRyeXtyZXR1cm4gcy5zdHJpbmdpZnlCeUNodW5rKHQscixlKX1jYXRjaCh0KXtlPU1hdGguZmxvb3IoZS8yKX1yZXR1cm4gcy5zdHJpbmdpZnlCeUNoYXIodCl9ZnVuY3Rpb24gZCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWVbcl09dFtyXTtyZXR1cm4gZX1hLmFwcGx5RnJvbUNoYXJDb2RlPWY7dmFyIGM9e307Yy5zdHJpbmc9e3N0cmluZzpuLGFycmF5OmZ1bmN0aW9uKHQpe3JldHVybiBsKHQsbmV3IEFycmF5KHQubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBjLnN0cmluZy51aW50OGFycmF5KHQpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gbCh0LG5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxyLmFsbG9jQnVmZmVyKHQubGVuZ3RoKSl9fSxjLmFycmF5PXtzdHJpbmc6ZixhcnJheTpuLGFycmF5YnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVWludDhBcnJheSh0KS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHQpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiByLm5ld0J1ZmZlckZyb20odCl9fSxjLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIGYobmV3IFVpbnQ4QXJyYXkodCkpfSxhcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gZChuZXcgVWludDhBcnJheSh0KSxuZXcgQXJyYXkodC5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOm4sdWludDhhcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodCl9LG5vZGVidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheSh0KSl9fSxjLnVpbnQ4YXJyYXk9e3N0cmluZzpmLGFycmF5OmZ1bmN0aW9uKHQpe3JldHVybiBkKHQsbmV3IEFycmF5KHQubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1ZmZlcn0sdWludDhhcnJheTpuLG5vZGVidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbSh0KX19LGMubm9kZWJ1ZmZlcj17c3RyaW5nOmYsYXJyYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGQodCxuZXcgQXJyYXkodC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGMubm9kZWJ1ZmZlci51aW50OGFycmF5KHQpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbih0KXtyZXR1cm4gZCh0LG5ldyBVaW50OEFycmF5KHQubGVuZ3RoKSl9LG5vZGVidWZmZXI6bn0sYS50cmFuc2Zvcm1Ubz1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8XCJcIiwhdClyZXR1cm4gZTthLmNoZWNrU3VwcG9ydCh0KTt2YXIgcj1hLmdldFR5cGVPZihlKTtyZXR1cm4gY1tyXVt0XShlKX0sYS5nZXRUeXBlT2Y9ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJzdHJpbmdcIjpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk/XCJhcnJheVwiOm8ubm9kZWJ1ZmZlciYmci5pc0J1ZmZlcih0KT9cIm5vZGVidWZmZXJcIjpvLnVpbnQ4YXJyYXkmJnQgaW5zdGFuY2VvZiBVaW50OEFycmF5P1widWludDhhcnJheVwiOm8uYXJyYXlidWZmZXImJnQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9cImFycmF5YnVmZmVyXCI6dm9pZCAwfSxhLmNoZWNrU3VwcG9ydD1mdW5jdGlvbih0KXtpZighb1t0LnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcih0K1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybVwiKX0sYS5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LGEuTUFYX1ZBTFVFXzMyQklUUz0tMSxhLnByZXR0eT1mdW5jdGlvbih0KXt2YXIgZSxyLGk9XCJcIjtmb3Iocj0wO3I8KHR8fFwiXCIpLmxlbmd0aDtyKyspaSs9XCJcXFxceFwiKygoZT10LmNoYXJDb2RlQXQocikpPDE2P1wiMFwiOlwiXCIpK2UudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGl9LGEuZGVsYXk9ZnVuY3Rpb24odCxlLHIpe2koZnVuY3Rpb24oKXt0LmFwcGx5KHJ8fG51bGwsZXx8W10pfSl9LGEuaW5oZXJpdHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7fXIucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByfSxhLmV4dGVuZD1mdW5jdGlvbigpe3ZhciB0LGUscj17fTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZm9yKGUgaW4gYXJndW1lbnRzW3RdKWFyZ3VtZW50c1t0XS5oYXNPd25Qcm9wZXJ0eShlKSYmdm9pZCAwPT09cltlXSYmKHJbZV09YXJndW1lbnRzW3RdW2VdKTtyZXR1cm4gcn0sYS5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihyLHQsaSxuLHMpe3JldHVybiB1LlByb21pc2UucmVzb2x2ZSh0KS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBvLmJsb2ImJihpIGluc3RhbmNlb2YgQmxvYnx8LTEhPT1bXCJbb2JqZWN0IEZpbGVdXCIsXCJbb2JqZWN0IEJsb2JdXCJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGkpKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyP25ldyB1LlByb21pc2UoZnVuY3Rpb24oZSxyKXt2YXIgdD1uZXcgRmlsZVJlYWRlcjt0Lm9ubG9hZD1mdW5jdGlvbih0KXtlKHQudGFyZ2V0LnJlc3VsdCl9LHQub25lcnJvcj1mdW5jdGlvbih0KXtyKHQudGFyZ2V0LmVycm9yKX0sdC5yZWFkQXNBcnJheUJ1ZmZlcihpKX0pOml9KS50aGVuKGZ1bmN0aW9uKHQpe3ZhciBlPWEuZ2V0VHlwZU9mKHQpO3JldHVybiBlPyhcImFycmF5YnVmZmVyXCI9PT1lP3Q9YS50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIix0KTpcInN0cmluZ1wiPT09ZSYmKHM/dD1oLmRlY29kZSh0KTppJiYhMCE9PW4mJih0PWZ1bmN0aW9uKHQpe3JldHVybiBsKHQsby51aW50OGFycmF5P25ldyBVaW50OEFycmF5KHQubGVuZ3RoKTpuZXcgQXJyYXkodC5sZW5ndGgpKX0odCkpKSx0KTp1LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlYWQgdGhlIGRhdGEgb2YgJ1wiK3IrXCInLiBJcyBpdCBpbiBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgP1wiKSl9KX19LHtcIi4vYmFzZTY0XCI6MSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdXBwb3J0XCI6MzAsXCJzZXQtaW1tZWRpYXRlLXNoaW1cIjo1NH1dLDMzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vcmVhZGVyL3JlYWRlckZvclwiKSxuPXQoXCIuL3V0aWxzXCIpLHM9dChcIi4vc2lnbmF0dXJlXCIpLGE9dChcIi4vemlwRW50cnlcIiksbz0odChcIi4vdXRmOFwiKSx0KFwiLi9zdXBwb3J0XCIpKTtmdW5jdGlvbiBoKHQpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz10fWgucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbih0KXtpZighdGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKHQpKXt0aGlzLnJlYWRlci5pbmRleC09NDt2YXIgZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO3Rocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiB1bmV4cGVjdGVkIHNpZ25hdHVyZSAoXCIrbi5wcmV0dHkoZSkrXCIsIGV4cGVjdGVkIFwiK24ucHJldHR5KHQpK1wiKVwiKX19LGlzU2lnbmF0dXJlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5yZWFkZXIuaW5kZXg7dGhpcy5yZWFkZXIuc2V0SW5kZXgodCk7dmFyIGk9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PWU7cmV0dXJuIHRoaXMucmVhZGVyLnNldEluZGV4KHIpLGl9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJbnQoMik7dmFyIHQ9dGhpcy5yZWFkZXIucmVhZERhdGEodGhpcy56aXBDb21tZW50TGVuZ3RoKSxlPW8udWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIscj1uLnRyYW5zZm9ybVRvKGUsdCk7dGhpcy56aXBDb21tZW50PXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUocil9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnJlYWRlci5za2lwKDQpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgdCxlLHIsaT10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPGk7KXQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSxlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCkscj10aGlzLnJlYWRlci5yZWFkRGF0YShlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbdF09e2lkOnQsbGVuZ3RoOmUsdmFsdWU6cn19LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcjpmdW5jdGlvbigpe2lmKHRoaXMuZGlza1dpdGhaaXA2NENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuZGlza3NDb3VudD10aGlzLnJlYWRlci5yZWFkSW50KDQpLDE8dGhpcy5kaXNrc0NvdW50KXRocm93IG5ldyBFcnJvcihcIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkXCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciB0LGU7Zm9yKHQ9MDt0PHRoaXMuZmlsZXMubGVuZ3RoO3QrKyllPXRoaXMuZmlsZXNbdF0sdGhpcy5yZWFkZXIuc2V0SW5kZXgoZS5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShzLkxPQ0FMX0ZJTEVfSEVBREVSKSxlLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLGUuaGFuZGxlVVRGOCgpLGUucHJvY2Vzc0F0dHJpYnV0ZXMoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgdDtmb3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUocy5DRU5UUkFMX0ZJTEVfSEVBREVSKTspKHQ9bmV3IGEoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaCh0KTtpZih0aGlzLmNlbnRyYWxEaXJSZWNvcmRzIT09dGhpcy5maWxlcy5sZW5ndGgmJjAhPT10aGlzLmNlbnRyYWxEaXJSZWNvcmRzJiYwPT09dGhpcy5maWxlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCBvciBidWc6IGV4cGVjdGVkIFwiK3RoaXMuY2VudHJhbERpclJlY29yZHMrXCIgcmVjb3JkcyBpbiBjZW50cmFsIGRpciwgZ290IFwiK3RoaXMuZmlsZXMubGVuZ3RoKX0scmVhZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZih0PDApdGhyb3chdGhpcy5pc1NpZ25hdHVyZSgwLHMuTE9DQUxfRklMRV9IRUFERVIpP25ldyBFcnJvcihcIkNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IDogaXMgdGhpcyBhIHppcCBmaWxlID8gSWYgaXQgaXMsIHNlZSBodHRwczovL3N0dWsuZ2l0aHViLmlvL2pzemlwL2RvY3VtZW50YXRpb24vaG93dG8vcmVhZF96aXAuaHRtbFwiKTpuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeVwiKTt0aGlzLnJlYWRlci5zZXRJbmRleCh0KTt2YXIgZT10O2lmKHRoaXMuY2hlY2tTaWduYXR1cmUocy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09bi5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09bi5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PW4uTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PW4uTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyU2l6ZT09PW4uTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09bi5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLCh0PXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpPDApdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3JcIik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgodCksdGhpcy5jaGVja1NpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksIXRoaXMuaXNTaWduYXR1cmUodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyLHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSYmKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPDApKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeVwiKTt0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX12YXIgcj10aGlzLmNlbnRyYWxEaXJPZmZzZXQrdGhpcy5jZW50cmFsRGlyU2l6ZTt0aGlzLnppcDY0JiYocis9MjAscis9MTIrdGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUpO3ZhciBpPWUtcjtpZigwPGkpdGhpcy5pc1NpZ25hdHVyZShlLHMuQ0VOVFJBTF9GSUxFX0hFQURFUil8fCh0aGlzLnJlYWRlci56ZXJvPWkpO2Vsc2UgaWYoaTwwKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IG1pc3NpbmcgXCIrTWF0aC5hYnMoaSkrXCIgYnl0ZXMuXCIpfSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKHQpe3RoaXMucmVhZGVyPWkodCl9LGxvYWQ6ZnVuY3Rpb24odCl7dGhpcy5wcmVwYXJlUmVhZGVyKHQpLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlzLnJlYWRMb2NhbEZpbGVzKCl9fSxlLmV4cG9ydHM9aH0se1wiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3NpZ25hdHVyZVwiOjIzLFwiLi9zdXBwb3J0XCI6MzAsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwRW50cnlcIjozNH1dLDM0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9dChcIi4vcmVhZGVyL3JlYWRlckZvclwiKSxzPXQoXCIuL3V0aWxzXCIpLG49dChcIi4vY29tcHJlc3NlZE9iamVjdFwiKSxhPXQoXCIuL2NyYzMyXCIpLG89dChcIi4vdXRmOFwiKSxoPXQoXCIuL2NvbXByZXNzaW9uc1wiKSx1PXQoXCIuL3N1cHBvcnRcIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMub3B0aW9ucz10LHRoaXMubG9hZE9wdGlvbnM9ZX1sLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiAyMDQ4PT0oMjA0OCZ0aGlzLmJpdEZsYWcpfSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYodC5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPXQucmVhZEludCgyKSxyPXQucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPXQucmVhZERhdGEodGhpcy5maWxlTmFtZUxlbmd0aCksdC5za2lwKHIpLC0xPT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKFwiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT09IC0xKVwiKTtpZihudWxsPT09KGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIGgpaWYoaC5oYXNPd25Qcm9wZXJ0eShlKSYmaFtlXS5tYWdpYz09PXQpcmV0dXJuIGhbZV07cmV0dXJuIG51bGx9KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gXCIrcy5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrXCIgdW5rbm93biAoaW5uZXIgZmlsZSA6IFwiK3MudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix0aGlzLmZpbGVOYW1lKStcIilcIik7dGhpcy5kZWNvbXByZXNzZWQ9bmV3IG4odGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5jcmMzMixlLHQucmVhZERhdGEodGhpcy5jb21wcmVzc2VkU2l6ZSkpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24odCl7dGhpcy52ZXJzaW9uTWFkZUJ5PXQucmVhZEludCgyKSx0LnNraXAoMiksdGhpcy5iaXRGbGFnPXQucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPXQucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9dC5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9dC5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9dC5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT10LnJlYWRJbnQoNCk7dmFyIGU9dC5yZWFkSW50KDIpO2lmKHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9dC5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9dC5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PXQucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9dC5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz10LnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD10LnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIik7dC5za2lwKGUpLHRoaXMucmVhZEV4dHJhRmllbGRzKHQpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQodCksdGhpcy5maWxlQ29tbWVudD10LnJlYWREYXRhKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpfSxwcm9jZXNzQXR0cmlidXRlczpmdW5jdGlvbigpe3RoaXMudW5peFBlcm1pc3Npb25zPW51bGwsdGhpcy5kb3NQZXJtaXNzaW9ucz1udWxsO3ZhciB0PXRoaXMudmVyc2lvbk1hZGVCeT4+ODt0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLDA9PXQmJih0aGlzLmRvc1Blcm1pc3Npb25zPTYzJnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMz09dCYmKHRoaXMudW5peFBlcm1pc3Npb25zPXRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmNjU1MzUpLHRoaXMuZGlyfHxcIi9cIiE9PXRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbih0KXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgZT1pKHRoaXMuZXh0cmFGaWVsZHNbMV0udmFsdWUpO3RoaXMudW5jb21wcmVzc2VkU2l6ZT09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMudW5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoOCkpLHRoaXMuY29tcHJlc3NlZFNpemU9PT1zLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmNvbXByZXNzZWRTaXplPWUucmVhZEludCg4KSksdGhpcy5sb2NhbEhlYWRlck9mZnNldD09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9ZS5yZWFkSW50KDgpKSx0aGlzLmRpc2tOdW1iZXJTdGFydD09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuZGlza051bWJlclN0YXJ0PWUucmVhZEludCg0KSl9fSxyZWFkRXh0cmFGaWVsZHM6ZnVuY3Rpb24odCl7dmFyIGUscixpLG49dC5pbmRleCt0aGlzLmV4dHJhRmllbGRzTGVuZ3RoO2Zvcih0aGlzLmV4dHJhRmllbGRzfHwodGhpcy5leHRyYUZpZWxkcz17fSk7dC5pbmRleCs0PG47KWU9dC5yZWFkSW50KDIpLHI9dC5yZWFkSW50KDIpLGk9dC5yZWFkRGF0YShyKSx0aGlzLmV4dHJhRmllbGRzW2VdPXtpZDplLGxlbmd0aDpyLHZhbHVlOml9O3Quc2V0SW5kZXgobil9LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXt2YXIgdD11LnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiO2lmKHRoaXMudXNlVVRGOCgpKXRoaXMuZmlsZU5hbWVTdHI9by51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnRTdHI9by51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIGU9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7aWYobnVsbCE9PWUpdGhpcy5maWxlTmFtZVN0cj1lO2Vsc2V7dmFyIHI9cy50cmFuc2Zvcm1Ubyh0LHRoaXMuZmlsZU5hbWUpO3RoaXMuZmlsZU5hbWVTdHI9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShyKX12YXIgaT10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtpZihudWxsIT09aSl0aGlzLmZpbGVDb21tZW50U3RyPWk7ZWxzZXt2YXIgbj1zLnRyYW5zZm9ybVRvKHQsdGhpcy5maWxlQ29tbWVudCk7dGhpcy5maWxlQ29tbWVudFN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKG4pfX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZih0KXt2YXIgZT1pKHQudmFsdWUpO3JldHVybiAxIT09ZS5yZWFkSW50KDEpP251bGw6YSh0aGlzLmZpbGVOYW1lKSE9PWUucmVhZEludCg0KT9udWxsOm8udXRmOGRlY29kZShlLnJlYWREYXRhKHQubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH0sZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZXh0cmFGaWVsZHNbMjU0NjFdO2lmKHQpe3ZhciBlPWkodC52YWx1ZSk7cmV0dXJuIDEhPT1lLnJlYWRJbnQoMSk/bnVsbDphKHRoaXMuZmlsZUNvbW1lbnQpIT09ZS5yZWFkSW50KDQpP251bGw6by51dGY4ZGVjb2RlKGUucmVhZERhdGEodC5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sZS5leHBvcnRzPWx9LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL2NvbXByZXNzaW9uc1wiOjMsXCIuL2NyYzMyXCI6NCxcIi4vcmVhZGVyL3JlYWRlckZvclwiOjIyLFwiLi9zdXBwb3J0XCI6MzAsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMn1dLDM1OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaSh0LGUscil7dGhpcy5uYW1lPXQsdGhpcy5kaXI9ci5kaXIsdGhpcy5kYXRlPXIuZGF0ZSx0aGlzLmNvbW1lbnQ9ci5jb21tZW50LHRoaXMudW5peFBlcm1pc3Npb25zPXIudW5peFBlcm1pc3Npb25zLHRoaXMuZG9zUGVybWlzc2lvbnM9ci5kb3NQZXJtaXNzaW9ucyx0aGlzLl9kYXRhPWUsdGhpcy5fZGF0YUJpbmFyeT1yLmJpbmFyeSx0aGlzLm9wdGlvbnM9e2NvbXByZXNzaW9uOnIuY29tcHJlc3Npb24sY29tcHJlc3Npb25PcHRpb25zOnIuY29tcHJlc3Npb25PcHRpb25zfX12YXIgcz10KFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLG49dChcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIiksYT10KFwiLi91dGY4XCIpLG89dChcIi4vY29tcHJlc3NlZE9iamVjdFwiKSxoPXQoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO2kucHJvdG90eXBlPXtpbnRlcm5hbFN0cmVhbTpmdW5jdGlvbih0KXt2YXIgZT1udWxsLHI9XCJzdHJpbmdcIjt0cnl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKFwiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLlwiKTt2YXIgaT1cInN0cmluZ1wiPT09KHI9dC50b0xvd2VyQ2FzZSgpKXx8XCJ0ZXh0XCI9PT1yO1wiYmluYXJ5c3RyaW5nXCIhPT1yJiZcInRleHRcIiE9PXJ8fChyPVwic3RyaW5nXCIpLGU9dGhpcy5fZGVjb21wcmVzc1dvcmtlcigpO3ZhciBuPSF0aGlzLl9kYXRhQmluYXJ5O24mJiFpJiYoZT1lLnBpcGUobmV3IGEuVXRmOEVuY29kZVdvcmtlcikpLCFuJiZpJiYoZT1lLnBpcGUobmV3IGEuVXRmOERlY29kZVdvcmtlcikpfWNhdGNoKHQpeyhlPW5ldyBoKFwiZXJyb3JcIikpLmVycm9yKHQpfXJldHVybiBuZXcgcyhlLHIsXCJcIil9LGFzeW5jOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0odCkuYWNjdW11bGF0ZShlKX0sbm9kZVN0cmVhbTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludGVybmFsU3RyZWFtKHR8fFwibm9kZWJ1ZmZlclwiKS50b05vZGVqc1N0cmVhbShlKX0sX2NvbXByZXNzV29ya2VyOmZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fZGF0YSBpbnN0YW5jZW9mIG8mJnRoaXMuX2RhdGEuY29tcHJlc3Npb24ubWFnaWM9PT10Lm1hZ2ljKXJldHVybiB0aGlzLl9kYXRhLmdldENvbXByZXNzZWRXb3JrZXIoKTt2YXIgcj10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7cmV0dXJuIHRoaXMuX2RhdGFCaW5hcnl8fChyPXIucGlwZShuZXcgYS5VdGY4RW5jb2RlV29ya2VyKSksby5jcmVhdGVXb3JrZXJGcm9tKHIsdCxlKX0sX2RlY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YSBpbnN0YW5jZW9mIG8/dGhpcy5fZGF0YS5nZXRDb250ZW50V29ya2VyKCk6dGhpcy5fZGF0YSBpbnN0YW5jZW9mIGg/dGhpcy5fZGF0YTpuZXcgbih0aGlzLl9kYXRhKX19O2Zvcih2YXIgdT1bXCJhc1RleHRcIixcImFzQmluYXJ5XCIsXCJhc05vZGVCdWZmZXJcIixcImFzVWludDhBcnJheVwiLFwiYXNBcnJheUJ1ZmZlclwiXSxsPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGY9MDtmPHUubGVuZ3RoO2YrKylpLnByb3RvdHlwZVt1W2ZdXT1sO2UuZXhwb3J0cz1pfSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiOjI3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCI6MjksXCIuL3V0ZjhcIjozMX1dLDM2OltmdW5jdGlvbih0LGwsZSl7KGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciByLGksdD1lLk11dGF0aW9uT2JzZXJ2ZXJ8fGUuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtpZih0KXt2YXIgbj0wLHM9bmV3IHQodSksYT1lLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO3Mub2JzZXJ2ZShhLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2EuZGF0YT1uPSsrbiUyfX1lbHNlIGlmKGUuc2V0SW1tZWRpYXRlfHx2b2lkIDA9PT1lLk1lc3NhZ2VDaGFubmVsKXI9XCJkb2N1bWVudFwiaW4gZSYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT9mdW5jdGlvbigpe3ZhciB0PWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTt0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe3UoKSx0Lm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LGUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHQpfTpmdW5jdGlvbigpe3NldFRpbWVvdXQodSwwKX07ZWxzZXt2YXIgbz1uZXcgZS5NZXNzYWdlQ2hhbm5lbDtvLnBvcnQxLm9ubWVzc2FnZT11LHI9ZnVuY3Rpb24oKXtvLnBvcnQyLnBvc3RNZXNzYWdlKDApfX12YXIgaD1bXTtmdW5jdGlvbiB1KCl7dmFyIHQsZTtpPSEwO2Zvcih2YXIgcj1oLmxlbmd0aDtyOyl7Zm9yKGU9aCxoPVtdLHQ9LTE7Kyt0PHI7KWVbdF0oKTtyPWgubGVuZ3RofWk9ITF9bC5leHBvcnRzPWZ1bmN0aW9uKHQpezEhPT1oLnB1c2godCl8fGl8fHIoKX19KS5jYWxsKHRoaXMsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSwzNzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCJpbW1lZGlhdGVcIik7ZnVuY3Rpb24gdSgpe312YXIgbD17fSxzPVtcIlJFSkVDVEVEXCJdLGE9W1wiRlVMRklMTEVEXCJdLGk9W1wiUEVORElOR1wiXTtmdW5jdGlvbiBvKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInJlc29sdmVyIG11c3QgYmUgYSBmdW5jdGlvblwiKTt0aGlzLnN0YXRlPWksdGhpcy5xdWV1ZT1bXSx0aGlzLm91dGNvbWU9dm9pZCAwLHQhPT11JiZjKHRoaXMsdCl9ZnVuY3Rpb24gaCh0LGUscil7dGhpcy5wcm9taXNlPXQsXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHRoaXMub25GdWxmaWxsZWQ9ZSx0aGlzLmNhbGxGdWxmaWxsZWQ9dGhpcy5vdGhlckNhbGxGdWxmaWxsZWQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHImJih0aGlzLm9uUmVqZWN0ZWQ9cix0aGlzLmNhbGxSZWplY3RlZD10aGlzLm90aGVyQ2FsbFJlamVjdGVkKX1mdW5jdGlvbiBmKGUscixpKXtuKGZ1bmN0aW9uKCl7dmFyIHQ7dHJ5e3Q9cihpKX1jYXRjaCh0KXtyZXR1cm4gbC5yZWplY3QoZSx0KX10PT09ZT9sLnJlamVjdChlLG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBwcm9taXNlIHdpdGggaXRzZWxmXCIpKTpsLnJlc29sdmUoZSx0KX0pfWZ1bmN0aW9uIGQodCl7dmFyIGU9dCYmdC50aGVuO2lmKHQmJihcIm9iamVjdFwiPT10eXBlb2YgdHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUpcmV0dXJuIGZ1bmN0aW9uKCl7ZS5hcHBseSh0LGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGMoZSx0KXt2YXIgcj0hMTtmdW5jdGlvbiBpKHQpe3J8fChyPSEwLGwucmVqZWN0KGUsdCkpfWZ1bmN0aW9uIG4odCl7cnx8KHI9ITAsbC5yZXNvbHZlKGUsdCkpfXZhciBzPXAoZnVuY3Rpb24oKXt0KG4saSl9KTtcImVycm9yXCI9PT1zLnN0YXR1cyYmaShzLnZhbHVlKX1mdW5jdGlvbiBwKHQsZSl7dmFyIHI9e307dHJ5e3IudmFsdWU9dChlKSxyLnN0YXR1cz1cInN1Y2Nlc3NcIn1jYXRjaCh0KXtyLnN0YXR1cz1cImVycm9yXCIsci52YWx1ZT10fXJldHVybiByfShlLmV4cG9ydHM9bykucHJvdG90eXBlLmZpbmFsbHk9ZnVuY3Rpb24oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSlyZXR1cm4gdGhpczt2YXIgcj10aGlzLmNvbnN0cnVjdG9yO3JldHVybiB0aGlzLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIHIucmVzb2x2ZShlKCkpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gdH0pfSxmdW5jdGlvbih0KXtyZXR1cm4gci5yZXNvbHZlKGUoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IHR9KX0pfSxvLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50aGVuKG51bGwsdCl9LG8ucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ0aGlzLnN0YXRlPT09YXx8XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmdGhpcy5zdGF0ZT09PXMpcmV0dXJuIHRoaXM7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodSk7dGhpcy5zdGF0ZSE9PWk/ZihyLHRoaXMuc3RhdGU9PT1hP3Q6ZSx0aGlzLm91dGNvbWUpOnRoaXMucXVldWUucHVzaChuZXcgaChyLHQsZSkpO3JldHVybiByfSxoLnByb3RvdHlwZS5jYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKHQpe2wucmVzb2x2ZSh0aGlzLnByb21pc2UsdCl9LGgucHJvdG90eXBlLm90aGVyQ2FsbEZ1bGZpbGxlZD1mdW5jdGlvbih0KXtmKHRoaXMucHJvbWlzZSx0aGlzLm9uRnVsZmlsbGVkLHQpfSxoLnByb3RvdHlwZS5jYWxsUmVqZWN0ZWQ9ZnVuY3Rpb24odCl7bC5yZWplY3QodGhpcy5wcm9taXNlLHQpfSxoLnByb3RvdHlwZS5vdGhlckNhbGxSZWplY3RlZD1mdW5jdGlvbih0KXtmKHRoaXMucHJvbWlzZSx0aGlzLm9uUmVqZWN0ZWQsdCl9LGwucmVzb2x2ZT1mdW5jdGlvbih0LGUpe3ZhciByPXAoZCxlKTtpZihcImVycm9yXCI9PT1yLnN0YXR1cylyZXR1cm4gbC5yZWplY3QodCxyLnZhbHVlKTt2YXIgaT1yLnZhbHVlO2lmKGkpYyh0LGkpO2Vsc2V7dC5zdGF0ZT1hLHQub3V0Y29tZT1lO2Zvcih2YXIgbj0tMSxzPXQucXVldWUubGVuZ3RoOysrbjxzOyl0LnF1ZXVlW25dLmNhbGxGdWxmaWxsZWQoZSl9cmV0dXJuIHR9LGwucmVqZWN0PWZ1bmN0aW9uKHQsZSl7dC5zdGF0ZT1zLHQub3V0Y29tZT1lO2Zvcih2YXIgcj0tMSxpPXQucXVldWUubGVuZ3RoOysrcjxpOyl0LnF1ZXVlW3JdLmNhbGxSZWplY3RlZChlKTtyZXR1cm4gdH0sby5yZXNvbHZlPWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiB0aGlzKXJldHVybiB0O3JldHVybiBsLnJlc29sdmUobmV3IHRoaXModSksdCl9LG8ucmVqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyB0aGlzKHUpO3JldHVybiBsLnJlamVjdChlLHQpfSxvLmFsbD1mdW5jdGlvbih0KXt2YXIgcj10aGlzO2lmKFwiW29iamVjdCBBcnJheV1cIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSlyZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcihcIm11c3QgYmUgYW4gYXJyYXlcIikpO3ZhciBpPXQubGVuZ3RoLG49ITE7aWYoIWkpcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7dmFyIHM9bmV3IEFycmF5KGkpLGE9MCxlPS0xLG89bmV3IHRoaXModSk7Zm9yKDsrK2U8aTspaCh0W2VdLGUpO3JldHVybiBvO2Z1bmN0aW9uIGgodCxlKXtyLnJlc29sdmUodCkudGhlbihmdW5jdGlvbih0KXtzW2VdPXQsKythIT09aXx8bnx8KG49ITAsbC5yZXNvbHZlKG8scykpfSxmdW5jdGlvbih0KXtufHwobj0hMCxsLnJlamVjdChvLHQpKX0pfX0sby5yYWNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYoXCJbb2JqZWN0IEFycmF5XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwibXVzdCBiZSBhbiBhcnJheVwiKSk7dmFyIHI9dC5sZW5ndGgsaT0hMTtpZighcilyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTt2YXIgbj0tMSxzPW5ldyB0aGlzKHUpO2Zvcig7KytuPHI7KWE9dFtuXSxlLnJlc29sdmUoYSkudGhlbihmdW5jdGlvbih0KXtpfHwoaT0hMCxsLnJlc29sdmUocyx0KSl9LGZ1bmN0aW9uKHQpe2l8fChpPSEwLGwucmVqZWN0KHMsdCkpfSk7dmFyIGE7cmV0dXJuIHN9fSx7aW1tZWRpYXRlOjM2fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT17fTsoMCx0KFwiLi9saWIvdXRpbHMvY29tbW9uXCIpLmFzc2lnbikoaSx0KFwiLi9saWIvZGVmbGF0ZVwiKSx0KFwiLi9saWIvaW5mbGF0ZVwiKSx0KFwiLi9saWIvemxpYi9jb25zdGFudHNcIikpLGUuZXhwb3J0cz1pfSx7XCIuL2xpYi9kZWZsYXRlXCI6MzksXCIuL2xpYi9pbmZsYXRlXCI6NDAsXCIuL2xpYi91dGlscy9jb21tb25cIjo0MSxcIi4vbGliL3psaWIvY29uc3RhbnRzXCI6NDR9XSwzOTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBhPXQoXCIuL3psaWIvZGVmbGF0ZVwiKSxvPXQoXCIuL3V0aWxzL2NvbW1vblwiKSxoPXQoXCIuL3V0aWxzL3N0cmluZ3NcIiksbj10KFwiLi96bGliL21lc3NhZ2VzXCIpLHM9dChcIi4vemxpYi96c3RyZWFtXCIpLHU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxsPTAsZj0tMSxkPTAsYz04O2Z1bmN0aW9uIHAodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgcCkpcmV0dXJuIG5ldyBwKHQpO3RoaXMub3B0aW9ucz1vLmFzc2lnbih7bGV2ZWw6ZixtZXRob2Q6YyxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OmQsdG86XCJcIn0sdHx8e30pO3ZhciBlPXRoaXMub3B0aW9ucztlLnJhdyYmMDxlLndpbmRvd0JpdHM/ZS53aW5kb3dCaXRzPS1lLndpbmRvd0JpdHM6ZS5nemlwJiYwPGUud2luZG93Qml0cyYmZS53aW5kb3dCaXRzPDE2JiYoZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz1cIlwiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBzLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgcj1hLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sZS5sZXZlbCxlLm1ldGhvZCxlLndpbmRvd0JpdHMsZS5tZW1MZXZlbCxlLnN0cmF0ZWd5KTtpZihyIT09bCl0aHJvdyBuZXcgRXJyb3IobltyXSk7aWYoZS5oZWFkZXImJmEuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sZS5oZWFkZXIpLGUuZGljdGlvbmFyeSl7dmFyIGk7aWYoaT1cInN0cmluZ1wiPT10eXBlb2YgZS5kaWN0aW9uYXJ5P2guc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChlLmRpY3Rpb25hcnkpP25ldyBVaW50OEFycmF5KGUuZGljdGlvbmFyeSk6ZS5kaWN0aW9uYXJ5LChyPWEuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGkpKSE9PWwpdGhyb3cgbmV3IEVycm9yKG5bcl0pO3RoaXMuX2RpY3Rfc2V0PSEwfX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9bmV3IHAoZSk7aWYoci5wdXNoKHQsITApLHIuZXJyKXRocm93IHIubXNnfHxuW3IuZXJyXTtyZXR1cm4gci5yZXN1bHR9cC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByLGksbj10aGlzLnN0cm0scz10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7aT1lPT09fn5lP2U6ITA9PT1lPzQ6MCxcInN0cmluZ1wiPT10eXBlb2YgdD9uLmlucHV0PWguc3RyaW5nMmJ1Zih0KTpcIltvYmplY3QgQXJyYXlCdWZmZXJdXCI9PT11LmNhbGwodCk/bi5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpuLmlucHV0PXQsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bi5hdmFpbF9vdXQmJihuLm91dHB1dD1uZXcgby5CdWY4KHMpLG4ubmV4dF9vdXQ9MCxuLmF2YWlsX291dD1zKSwxIT09KHI9YS5kZWZsYXRlKG4saSkpJiZyIT09bClyZXR1cm4gdGhpcy5vbkVuZChyKSwhKHRoaXMuZW5kZWQ9ITApOzAhPT1uLmF2YWlsX291dCYmKDAhPT1uLmF2YWlsX2lufHw0IT09aSYmMiE9PWkpfHwoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShoLmJ1ZjJiaW5zdHJpbmcoby5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShvLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpfXdoaWxlKCgwPG4uYXZhaWxfaW58fDA9PT1uLmF2YWlsX291dCkmJjEhPT1yKTtyZXR1cm4gND09PWk/KHI9YS5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChyKSx0aGlzLmVuZGVkPSEwLHI9PT1sKToyIT09aXx8KHRoaXMub25FbmQobCksIShuLmF2YWlsX291dD0wKSl9LHAucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfSxwLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09bCYmKFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbihcIlwiKTp0aGlzLnJlc3VsdD1vLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHIuRGVmbGF0ZT1wLHIuZGVmbGF0ZT1pLHIuZGVmbGF0ZVJhdz1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHt9KS5yYXc9ITAsaSh0LGUpfSxyLmd6aXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZT1lfHx7fSkuZ3ppcD0hMCxpKHQsZSl9fSx7XCIuL3V0aWxzL2NvbW1vblwiOjQxLFwiLi91dGlscy9zdHJpbmdzXCI6NDIsXCIuL3psaWIvZGVmbGF0ZVwiOjQ2LFwiLi96bGliL21lc3NhZ2VzXCI6NTEsXCIuL3psaWIvenN0cmVhbVwiOjUzfV0sNDA6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgZD10KFwiLi96bGliL2luZmxhdGVcIiksYz10KFwiLi91dGlscy9jb21tb25cIikscD10KFwiLi91dGlscy9zdHJpbmdzXCIpLG09dChcIi4vemxpYi9jb25zdGFudHNcIiksaT10KFwiLi96bGliL21lc3NhZ2VzXCIpLG49dChcIi4vemxpYi96c3RyZWFtXCIpLHM9dChcIi4vemxpYi9nemhlYWRlclwiKSxfPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gYSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBhKSlyZXR1cm4gbmV3IGEodCk7dGhpcy5vcHRpb25zPWMuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOlwiXCJ9LHR8fHt9KTt2YXIgZT10aGlzLm9wdGlvbnM7ZS5yYXcmJjA8PWUud2luZG93Qml0cyYmZS53aW5kb3dCaXRzPDE2JiYoZS53aW5kb3dCaXRzPS1lLndpbmRvd0JpdHMsMD09PWUud2luZG93Qml0cyYmKGUud2luZG93Qml0cz0tMTUpKSwhKDA8PWUud2luZG93Qml0cyYmZS53aW5kb3dCaXRzPDE2KXx8dCYmdC53aW5kb3dCaXRzfHwoZS53aW5kb3dCaXRzKz0zMiksMTU8ZS53aW5kb3dCaXRzJiZlLndpbmRvd0JpdHM8NDgmJjA9PSgxNSZlLndpbmRvd0JpdHMpJiYoZS53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz1cIlwiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBuLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgcj1kLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sZS53aW5kb3dCaXRzKTtpZihyIT09bS5aX09LKXRocm93IG5ldyBFcnJvcihpW3JdKTt0aGlzLmhlYWRlcj1uZXcgcyxkLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9bmV3IGEoZSk7aWYoci5wdXNoKHQsITApLHIuZXJyKXRocm93IHIubXNnfHxpW3IuZXJyXTtyZXR1cm4gci5yZXN1bHR9YS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByLGksbixzLGEsbyxoPXRoaXMuc3RybSx1PXRoaXMub3B0aW9ucy5jaHVua1NpemUsbD10aGlzLm9wdGlvbnMuZGljdGlvbmFyeSxmPSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7aT1lPT09fn5lP2U6ITA9PT1lP20uWl9GSU5JU0g6bS5aX05PX0ZMVVNILFwic3RyaW5nXCI9PXR5cGVvZiB0P2guaW5wdXQ9cC5iaW5zdHJpbmcyYnVmKHQpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PV8uY2FsbCh0KT9oLmlucHV0PW5ldyBVaW50OEFycmF5KHQpOmguaW5wdXQ9dCxoLm5leHRfaW49MCxoLmF2YWlsX2luPWguaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1oLmF2YWlsX291dCYmKGgub3V0cHV0PW5ldyBjLkJ1ZjgodSksaC5uZXh0X291dD0wLGguYXZhaWxfb3V0PXUpLChyPWQuaW5mbGF0ZShoLG0uWl9OT19GTFVTSCkpPT09bS5aX05FRURfRElDVCYmbCYmKG89XCJzdHJpbmdcIj09dHlwZW9mIGw/cC5zdHJpbmcyYnVmKGwpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PV8uY2FsbChsKT9uZXcgVWludDhBcnJheShsKTpsLHI9ZC5pbmZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sbykpLHI9PT1tLlpfQlVGX0VSUk9SJiYhMD09PWYmJihyPW0uWl9PSyxmPSExKSxyIT09bS5aX1NUUkVBTV9FTkQmJnIhPT1tLlpfT0spcmV0dXJuIHRoaXMub25FbmQociksISh0aGlzLmVuZGVkPSEwKTtoLm5leHRfb3V0JiYoMCE9PWguYXZhaWxfb3V0JiZyIT09bS5aX1NUUkVBTV9FTkQmJigwIT09aC5hdmFpbF9pbnx8aSE9PW0uWl9GSU5JU0gmJmkhPT1tLlpfU1lOQ19GTFVTSCl8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvPyhuPXAudXRmOGJvcmRlcihoLm91dHB1dCxoLm5leHRfb3V0KSxzPWgubmV4dF9vdXQtbixhPXAuYnVmMnN0cmluZyhoLm91dHB1dCxuKSxoLm5leHRfb3V0PXMsaC5hdmFpbF9vdXQ9dS1zLHMmJmMuYXJyYXlTZXQoaC5vdXRwdXQsaC5vdXRwdXQsbixzLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShjLnNocmlua0J1ZihoLm91dHB1dCxoLm5leHRfb3V0KSkpKSwwPT09aC5hdmFpbF9pbiYmMD09PWguYXZhaWxfb3V0JiYoZj0hMCl9d2hpbGUoKDA8aC5hdmFpbF9pbnx8MD09PWguYXZhaWxfb3V0KSYmciE9PW0uWl9TVFJFQU1fRU5EKTtyZXR1cm4gcj09PW0uWl9TVFJFQU1fRU5EJiYoaT1tLlpfRklOSVNIKSxpPT09bS5aX0ZJTklTSD8ocj1kLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAscj09PW0uWl9PSyk6aSE9PW0uWl9TWU5DX0ZMVVNIfHwodGhpcy5vbkVuZChtLlpfT0spLCEoaC5hdmFpbF9vdXQ9MCkpfSxhLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24odCl7dGhpcy5jaHVua3MucHVzaCh0KX0sYS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PW0uWl9PSyYmKFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbihcIlwiKTp0aGlzLnJlc3VsdD1jLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LHIuSW5mbGF0ZT1hLHIuaW5mbGF0ZT1vLHIuaW5mbGF0ZVJhdz1mdW5jdGlvbih0LGUpe3JldHVybihlPWV8fHt9KS5yYXc9ITAsbyh0LGUpfSxyLnVuZ3ppcD1vfSx7XCIuL3V0aWxzL2NvbW1vblwiOjQxLFwiLi91dGlscy9zdHJpbmdzXCI6NDIsXCIuL3psaWIvY29uc3RhbnRzXCI6NDQsXCIuL3psaWIvZ3poZWFkZXJcIjo0NyxcIi4vemxpYi9pbmZsYXRlXCI6NDksXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MTpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBpPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5JiZcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDE2QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBJbnQzMkFycmF5O3IuYXNzaWduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7ZS5sZW5ndGg7KXt2YXIgcj1lLnNoaWZ0KCk7aWYocil7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcihyK1wibXVzdCBiZSBub24tb2JqZWN0XCIpO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJih0W2ldPXJbaV0pfX1yZXR1cm4gdH0sci5zaHJpbmtCdWY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg9PT1lP3Q6dC5zdWJhcnJheT90LnN1YmFycmF5KDAsZSk6KHQubGVuZ3RoPWUsdCl9O3ZhciBuPXthcnJheVNldDpmdW5jdGlvbih0LGUscixpLG4pe2lmKGUuc3ViYXJyYXkmJnQuc3ViYXJyYXkpdC5zZXQoZS5zdWJhcnJheShyLHIraSksbik7ZWxzZSBmb3IodmFyIHM9MDtzPGk7cysrKXRbbitzXT1lW3Irc119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odCl7dmFyIGUscixpLG4scyxhO2ZvcihlPWk9MCxyPXQubGVuZ3RoO2U8cjtlKyspaSs9dFtlXS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkoaSksZT1uPTAscj10Lmxlbmd0aDtlPHI7ZSsrKXM9dFtlXSxhLnNldChzLG4pLG4rPXMubGVuZ3RoO3JldHVybiBhfX0scz17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLHIsaSxuKXtmb3IodmFyIHM9MDtzPGk7cysrKXRbbitzXT1lW3Irc119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQpfX07ci5zZXRUeXBlZD1mdW5jdGlvbih0KXt0PyhyLkJ1Zjg9VWludDhBcnJheSxyLkJ1ZjE2PVVpbnQxNkFycmF5LHIuQnVmMzI9SW50MzJBcnJheSxyLmFzc2lnbihyLG4pKTooci5CdWY4PUFycmF5LHIuQnVmMTY9QXJyYXksci5CdWYzMj1BcnJheSxyLmFzc2lnbihyLHMpKX0sci5zZXRUeXBlZChpKX0se31dLDQyOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGg9dChcIi4vY29tbW9uXCIpLG49ITAscz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2godCl7bj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaCh0KXtzPSExfWZvcih2YXIgdT1uZXcgaC5CdWY4KDI1NiksaT0wO2k8MjU2O2krKyl1W2ldPTI1Mjw9aT82OjI0ODw9aT81OjI0MDw9aT80OjIyNDw9aT8zOjE5Mjw9aT8yOjE7ZnVuY3Rpb24gbCh0LGUpe2lmKGU8NjU1MzcmJih0LnN1YmFycmF5JiZzfHwhdC5zdWJhcnJheSYmbikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxoLnNocmlua0J1Zih0LGUpKTtmb3IodmFyIHI9XCJcIixpPTA7aTxlO2krKylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiByfXVbMjU0XT11WzI1NF09MSxyLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUscixpLG4scyxhPXQubGVuZ3RoLG89MDtmb3Iobj0wO248YTtuKyspNTUyOTY9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQobikpKSYmbisxPGEmJjU2MzIwPT0oNjQ1MTImKGk9dC5jaGFyQ29kZUF0KG4rMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsoaS01NjMyMCksbisrKSxvKz1yPDEyOD8xOnI8MjA0OD8yOnI8NjU1MzY/Mzo0O2ZvcihlPW5ldyBoLkJ1Zjgobyksbj1zPTA7czxvO24rKyk1NTI5Nj09KDY0NTEyJihyPXQuY2hhckNvZGVBdChuKSkpJiZuKzE8YSYmNTYzMjA9PSg2NDUxMiYoaT10LmNoYXJDb2RlQXQobisxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhpLTU2MzIwKSxuKyspLHI8MTI4P2VbcysrXT1yOihyPDIwNDg/ZVtzKytdPTE5MnxyPj4+Njoocjw2NTUzNj9lW3MrK109MjI0fHI+Pj4xMjooZVtzKytdPTI0MHxyPj4+MTgsZVtzKytdPTEyOHxyPj4+MTImNjMpLGVbcysrXT0xMjh8cj4+PjYmNjMpLGVbcysrXT0xMjh8NjMmcik7cmV0dXJuIGV9LHIuYnVmMmJpbnN0cmluZz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LHQubGVuZ3RoKX0sci5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgaC5CdWY4KHQubGVuZ3RoKSxyPTAsaT1lLmxlbmd0aDtyPGk7cisrKWVbcl09dC5jaGFyQ29kZUF0KHIpO3JldHVybiBlfSxyLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG4scyxhPWV8fHQubGVuZ3RoLG89bmV3IEFycmF5KDIqYSk7Zm9yKHI9aT0wO3I8YTspaWYoKG49dFtyKytdKTwxMjgpb1tpKytdPW47ZWxzZSBpZig0PChzPXVbbl0pKW9baSsrXT02NTUzMyxyKz1zLTE7ZWxzZXtmb3IobiY9Mj09PXM/MzE6Mz09PXM/MTU6NzsxPHMmJnI8YTspbj1uPDw2fDYzJnRbcisrXSxzLS07MTxzP29baSsrXT02NTUzMzpuPDY1NTM2P29baSsrXT1uOihuLT02NTUzNixvW2krK109NTUyOTZ8bj4+MTAmMTAyMyxvW2krK109NTYzMjB8MTAyMyZuKX1yZXR1cm4gbChvLGkpfSxyLnV0Zjhib3JkZXI9ZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IoKGU9ZXx8dC5sZW5ndGgpPnQubGVuZ3RoJiYoZT10Lmxlbmd0aCkscj1lLTE7MDw9ciYmMTI4PT0oMTkyJnRbcl0pOylyLS07cmV0dXJuIHI8MD9lOjA9PT1yP2U6cit1W3Rbcl1dPmU/cjplfX0se1wiLi9jb21tb25cIjo0MX1dLDQzOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbj02NTUzNSZ0fDAscz10Pj4+MTYmNjU1MzV8MCxhPTA7MCE9PXI7KXtmb3Ioci09YT0yZTM8cj8yZTM6cjtzPXMrKG49bitlW2krK118MCl8MCwtLWE7KTtuJT02NTUyMSxzJT02NTUyMX1yZXR1cm4gbnxzPDwxNnwwfX0se31dLDQ0OltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sNDU6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPVtdLHI9MDtyPDI1NjtyKyspe3Q9cjtmb3IodmFyIGk9MDtpPDg7aSsrKXQ9MSZ0PzM5ODgyOTIzODRedD4+PjE6dD4+PjE7ZVtyXT10fXJldHVybiBlfSgpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbj1vLHM9aStyO3RePS0xO2Zvcih2YXIgYT1pO2E8czthKyspdD10Pj4+OF5uWzI1NSYodF5lW2FdKV07cmV0dXJuLTFedH19LHt9XSw0NjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBoLGQ9dChcIi4uL3V0aWxzL2NvbW1vblwiKSx1PXQoXCIuL3RyZWVzXCIpLGM9dChcIi4vYWRsZXIzMlwiKSxwPXQoXCIuL2NyYzMyXCIpLGk9dChcIi4vbWVzc2FnZXNcIiksbD0wLGY9NCxtPTAsXz0tMixnPS0xLGI9NCxuPTIsdj04LHk9OSxzPTI4NixhPTMwLG89MTksdz0yKnMrMSxrPTE1LHg9MyxTPTI1OCx6PVMreCsxLEM9NDIsRT0xMTMsQT0xLEk9MixPPTMsQj00O2Z1bmN0aW9uIFIodCxlKXtyZXR1cm4gdC5tc2c9aVtlXSxlfWZ1bmN0aW9uIFQodCl7cmV0dXJuKHQ8PDEpLSg0PHQ/OTowKX1mdW5jdGlvbiBEKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDswPD0tLWU7KXRbZV09MH1mdW5jdGlvbiBGKHQpe3ZhciBlPXQuc3RhdGUscj1lLnBlbmRpbmc7cj50LmF2YWlsX291dCYmKHI9dC5hdmFpbF9vdXQpLDAhPT1yJiYoZC5hcnJheVNldCh0Lm91dHB1dCxlLnBlbmRpbmdfYnVmLGUucGVuZGluZ19vdXQscix0Lm5leHRfb3V0KSx0Lm5leHRfb3V0Kz1yLGUucGVuZGluZ19vdXQrPXIsdC50b3RhbF9vdXQrPXIsdC5hdmFpbF9vdXQtPXIsZS5wZW5kaW5nLT1yLDA9PT1lLnBlbmRpbmcmJihlLnBlbmRpbmdfb3V0PTApKX1mdW5jdGlvbiBOKHQsZSl7dS5fdHJfZmx1c2hfYmxvY2sodCwwPD10LmJsb2NrX3N0YXJ0P3QuYmxvY2tfc3RhcnQ6LTEsdC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0LGUpLHQuYmxvY2tfc3RhcnQ9dC5zdHJzdGFydCxGKHQuc3RybSl9ZnVuY3Rpb24gVSh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWV9ZnVuY3Rpb24gUCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZX1mdW5jdGlvbiBMKHQsZSl7dmFyIHIsaSxuPXQubWF4X2NoYWluX2xlbmd0aCxzPXQuc3Ryc3RhcnQsYT10LnByZXZfbGVuZ3RoLG89dC5uaWNlX21hdGNoLGg9dC5zdHJzdGFydD50Lndfc2l6ZS16P3Quc3Ryc3RhcnQtKHQud19zaXplLXopOjAsdT10LndpbmRvdyxsPXQud19tYXNrLGY9dC5wcmV2LGQ9dC5zdHJzdGFydCtTLGM9dVtzK2EtMV0scD11W3MrYV07dC5wcmV2X2xlbmd0aD49dC5nb29kX21hdGNoJiYobj4+PTIpLG8+dC5sb29rYWhlYWQmJihvPXQubG9va2FoZWFkKTtkb3tpZih1WyhyPWUpK2FdPT09cCYmdVtyK2EtMV09PT1jJiZ1W3JdPT09dVtzXSYmdVsrK3JdPT09dVtzKzFdKXtzKz0yLHIrKztkb3t9d2hpbGUodVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnM8ZCk7aWYoaT1TLShkLXMpLHM9ZC1TLGE8aSl7aWYodC5tYXRjaF9zdGFydD1lLG88PShhPWkpKWJyZWFrO2M9dVtzK2EtMV0scD11W3MrYV19fX13aGlsZSgoZT1mW2UmbF0pPmgmJjAhPS0tbik7cmV0dXJuIGE8PXQubG9va2FoZWFkP2E6dC5sb29rYWhlYWR9ZnVuY3Rpb24gaih0KXt2YXIgZSxyLGksbixzLGEsbyxoLHUsbCxmPXQud19zaXplO2Rve2lmKG49dC53aW5kb3dfc2l6ZS10Lmxvb2thaGVhZC10LnN0cnN0YXJ0LHQuc3Ryc3RhcnQ+PWYrKGYteikpe2ZvcihkLmFycmF5U2V0KHQud2luZG93LHQud2luZG93LGYsZiwwKSx0Lm1hdGNoX3N0YXJ0LT1mLHQuc3Ryc3RhcnQtPWYsdC5ibG9ja19zdGFydC09ZixlPXI9dC5oYXNoX3NpemU7aT10LmhlYWRbLS1lXSx0LmhlYWRbZV09Zjw9aT9pLWY6MCwtLXI7KTtmb3IoZT1yPWY7aT10LnByZXZbLS1lXSx0LnByZXZbZV09Zjw9aT9pLWY6MCwtLXI7KTtuKz1mfWlmKDA9PT10LnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoYT10LnN0cm0sbz10LndpbmRvdyxoPXQuc3Ryc3RhcnQrdC5sb29rYWhlYWQsdT1uLGw9dm9pZCAwLGw9YS5hdmFpbF9pbix1PGwmJihsPXUpLHI9MD09PWw/MDooYS5hdmFpbF9pbi09bCxkLmFycmF5U2V0KG8sYS5pbnB1dCxhLm5leHRfaW4sbCxoKSwxPT09YS5zdGF0ZS53cmFwP2EuYWRsZXI9YyhhLmFkbGVyLG8sbCxoKToyPT09YS5zdGF0ZS53cmFwJiYoYS5hZGxlcj1wKGEuYWRsZXIsbyxsLGgpKSxhLm5leHRfaW4rPWwsYS50b3RhbF9pbis9bCxsKSx0Lmxvb2thaGVhZCs9cix0Lmxvb2thaGVhZCt0Lmluc2VydD49eClmb3Iocz10LnN0cnN0YXJ0LXQuaW5zZXJ0LHQuaW5zX2g9dC53aW5kb3dbc10sdC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3MrMV0pJnQuaGFzaF9tYXNrO3QuaW5zZXJ0JiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3MreC0xXSkmdC5oYXNoX21hc2ssdC5wcmV2W3MmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09cyxzKyssdC5pbnNlcnQtLSwhKHQubG9va2FoZWFkK3QuaW5zZXJ0PHgpKTspO313aGlsZSh0Lmxvb2thaGVhZDx6JiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBaKHQsZSl7Zm9yKHZhciByLGk7Oyl7aWYodC5sb29rYWhlYWQ8eil7aWYoaih0KSx0Lmxvb2thaGVhZDx6JiZlPT09bClyZXR1cm4gQTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYocj0wLHQubG9va2FoZWFkPj14JiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQreC0xXSkmdC5oYXNoX21hc2sscj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSwwIT09ciYmdC5zdHJzdGFydC1yPD10Lndfc2l6ZS16JiYodC5tYXRjaF9sZW5ndGg9TCh0LHIpKSx0Lm1hdGNoX2xlbmd0aD49eClpZihpPXUuX3RyX3RhbGx5KHQsdC5zdHJzdGFydC10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoLXgpLHQubG9va2FoZWFkLT10Lm1hdGNoX2xlbmd0aCx0Lm1hdGNoX2xlbmd0aDw9dC5tYXhfbGF6eV9tYXRjaCYmdC5sb29rYWhlYWQ+PXgpe2Zvcih0Lm1hdGNoX2xlbmd0aC0tO3Quc3Ryc3RhcnQrKyx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCt4LTFdKSZ0Lmhhc2hfbWFzayxyPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQsMCE9LS10Lm1hdGNoX2xlbmd0aDspO3Quc3Ryc3RhcnQrK31lbHNlIHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTAsdC5pbnNfaD10LndpbmRvd1t0LnN0cnN0YXJ0XSx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCsxXSkmdC5oYXNoX21hc2s7ZWxzZSBpPXUuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0Kys7aWYoaSYmKE4odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfXJldHVybiB0Lmluc2VydD10LnN0cnN0YXJ0PHgtMT90LnN0cnN0YXJ0OngtMSxlPT09Zj8oTih0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9POkIpOnQubGFzdF9saXQmJihOKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9BOkl9ZnVuY3Rpb24gVyh0LGUpe2Zvcih2YXIgcixpLG47Oyl7aWYodC5sb29rYWhlYWQ8eil7aWYoaih0KSx0Lmxvb2thaGVhZDx6JiZlPT09bClyZXR1cm4gQTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYocj0wLHQubG9va2FoZWFkPj14JiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQreC0xXSkmdC5oYXNoX21hc2sscj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPXgtMSwwIT09ciYmdC5wcmV2X2xlbmd0aDx0Lm1heF9sYXp5X21hdGNoJiZ0LnN0cnN0YXJ0LXI8PXQud19zaXplLXomJih0Lm1hdGNoX2xlbmd0aD1MKHQsciksdC5tYXRjaF9sZW5ndGg8PTUmJigxPT09dC5zdHJhdGVneXx8dC5tYXRjaF9sZW5ndGg9PT14JiY0MDk2PHQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydCkmJih0Lm1hdGNoX2xlbmd0aD14LTEpKSx0LnByZXZfbGVuZ3RoPj14JiZ0Lm1hdGNoX2xlbmd0aDw9dC5wcmV2X2xlbmd0aCl7Zm9yKG49dC5zdHJzdGFydCt0Lmxvb2thaGVhZC14LGk9dS5fdHJfdGFsbHkodCx0LnN0cnN0YXJ0LTEtdC5wcmV2X21hdGNoLHQucHJldl9sZW5ndGgteCksdC5sb29rYWhlYWQtPXQucHJldl9sZW5ndGgtMSx0LnByZXZfbGVuZ3RoLT0yOysrdC5zdHJzdGFydDw9biYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K3gtMV0pJnQuaGFzaF9tYXNrLHI9dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCksMCE9LS10LnByZXZfbGVuZ3RoOyk7aWYodC5tYXRjaF9hdmFpbGFibGU9MCx0Lm1hdGNoX2xlbmd0aD14LTEsdC5zdHJzdGFydCsrLGkmJihOKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQX1lbHNlIGlmKHQubWF0Y2hfYXZhaWxhYmxlKXtpZigoaT11Ll90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSkpJiZOKHQsITEpLHQuc3Ryc3RhcnQrKyx0Lmxvb2thaGVhZC0tLDA9PT10LnN0cm0uYXZhaWxfb3V0KXJldHVybiBBfWVsc2UgdC5tYXRjaF9hdmFpbGFibGU9MSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLX1yZXR1cm4gdC5tYXRjaF9hdmFpbGFibGUmJihpPXUuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0LTFdKSx0Lm1hdGNoX2F2YWlsYWJsZT0wKSx0Lmluc2VydD10LnN0cnN0YXJ0PHgtMT90LnN0cnN0YXJ0OngtMSxlPT09Zj8oTih0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9POkIpOnQubGFzdF9saXQmJihOKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9BOkl9ZnVuY3Rpb24gTSh0LGUscixpLG4pe3RoaXMuZ29vZF9sZW5ndGg9dCx0aGlzLm1heF9sYXp5PWUsdGhpcy5uaWNlX2xlbmd0aD1yLHRoaXMubWF4X2NoYWluPWksdGhpcy5mdW5jPW59ZnVuY3Rpb24gSCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPXYsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IGQuQnVmMTYoMip3KSx0aGlzLmR5bl9kdHJlZT1uZXcgZC5CdWYxNigyKigyKmErMSkpLHRoaXMuYmxfdHJlZT1uZXcgZC5CdWYxNigyKigyKm8rMSkpLEQodGhpcy5keW5fbHRyZWUpLEQodGhpcy5keW5fZHRyZWUpLEQodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgZC5CdWYxNihrKzEpLHRoaXMuaGVhcD1uZXcgZC5CdWYxNigyKnMrMSksRCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgZC5CdWYxNigyKnMrMSksRCh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBHKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyh0LnRvdGFsX2luPXQudG90YWxfb3V0PTAsdC5kYXRhX3R5cGU9biwoZT10LnN0YXRlKS5wZW5kaW5nPTAsZS5wZW5kaW5nX291dD0wLGUud3JhcDwwJiYoZS53cmFwPS1lLndyYXApLGUuc3RhdHVzPWUud3JhcD9DOkUsdC5hZGxlcj0yPT09ZS53cmFwPzA6MSxlLmxhc3RfZmx1c2g9bCx1Ll90cl9pbml0KGUpLG0pOlIodCxfKX1mdW5jdGlvbiBLKHQpe3ZhciBlPUcodCk7cmV0dXJuIGU9PT1tJiZmdW5jdGlvbih0KXt0LndpbmRvd19zaXplPTIqdC53X3NpemUsRCh0LmhlYWQpLHQubWF4X2xhenlfbWF0Y2g9aFt0LmxldmVsXS5tYXhfbGF6eSx0Lmdvb2RfbWF0Y2g9aFt0LmxldmVsXS5nb29kX2xlbmd0aCx0Lm5pY2VfbWF0Y2g9aFt0LmxldmVsXS5uaWNlX2xlbmd0aCx0Lm1heF9jaGFpbl9sZW5ndGg9aFt0LmxldmVsXS5tYXhfY2hhaW4sdC5zdHJzdGFydD0wLHQuYmxvY2tfc3RhcnQ9MCx0Lmxvb2thaGVhZD0wLHQuaW5zZXJ0PTAsdC5tYXRjaF9sZW5ndGg9dC5wcmV2X2xlbmd0aD14LTEsdC5tYXRjaF9hdmFpbGFibGU9MCx0Lmluc19oPTB9KHQuc3RhdGUpLGV9ZnVuY3Rpb24gWSh0LGUscixpLG4scyl7aWYoIXQpcmV0dXJuIF87dmFyIGE9MTtpZihlPT09ZyYmKGU9NiksaTwwPyhhPTAsaT0taSk6MTU8aSYmKGE9MixpLT0xNiksbjwxfHx5PG58fHIhPT12fHxpPDh8fDE1PGl8fGU8MHx8OTxlfHxzPDB8fGI8cylyZXR1cm4gUih0LF8pOzg9PT1pJiYoaT05KTt2YXIgbz1uZXcgSDtyZXR1cm4odC5zdGF0ZT1vKS5zdHJtPXQsby53cmFwPWEsby5nemhlYWQ9bnVsbCxvLndfYml0cz1pLG8ud19zaXplPTE8PG8ud19iaXRzLG8ud19tYXNrPW8ud19zaXplLTEsby5oYXNoX2JpdHM9bis3LG8uaGFzaF9zaXplPTE8PG8uaGFzaF9iaXRzLG8uaGFzaF9tYXNrPW8uaGFzaF9zaXplLTEsby5oYXNoX3NoaWZ0PX5+KChvLmhhc2hfYml0cyt4LTEpL3gpLG8ud2luZG93PW5ldyBkLkJ1ZjgoMipvLndfc2l6ZSksby5oZWFkPW5ldyBkLkJ1ZjE2KG8uaGFzaF9zaXplKSxvLnByZXY9bmV3IGQuQnVmMTYoby53X3NpemUpLG8ubGl0X2J1ZnNpemU9MTw8bis2LG8ucGVuZGluZ19idWZfc2l6ZT00Km8ubGl0X2J1ZnNpemUsby5wZW5kaW5nX2J1Zj1uZXcgZC5CdWY4KG8ucGVuZGluZ19idWZfc2l6ZSksby5kX2J1Zj0xKm8ubGl0X2J1ZnNpemUsby5sX2J1Zj0zKm8ubGl0X2J1ZnNpemUsby5sZXZlbD1lLG8uc3RyYXRlZ3k9cyxvLm1ldGhvZD1yLEsodCl9aD1bbmV3IE0oMCwwLDAsMCxmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1O2ZvcihyPnQucGVuZGluZ19idWZfc2l6ZS01JiYocj10LnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYodC5sb29rYWhlYWQ8PTEpe2lmKGoodCksMD09PXQubG9va2FoZWFkJiZlPT09bClyZXR1cm4gQTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9dC5zdHJzdGFydCs9dC5sb29rYWhlYWQsdC5sb29rYWhlYWQ9MDt2YXIgaT10LmJsb2NrX3N0YXJ0K3I7aWYoKDA9PT10LnN0cnN0YXJ0fHx0LnN0cnN0YXJ0Pj1pKSYmKHQubG9va2FoZWFkPXQuc3Ryc3RhcnQtaSx0LnN0cnN0YXJ0PWksTih0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEE7aWYodC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0Pj10Lndfc2l6ZS16JiYoTih0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIHQuaW5zZXJ0PTAsZT09PWY/KE4odCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/TzpCKToodC5zdHJzdGFydD50LmJsb2NrX3N0YXJ0JiYoTih0LCExKSx0LnN0cm0uYXZhaWxfb3V0KSxBKX0pLG5ldyBNKDQsNCw4LDQsWiksbmV3IE0oNCw1LDE2LDgsWiksbmV3IE0oNCw2LDMyLDMyLFopLG5ldyBNKDQsNCwxNiwxNixXKSxuZXcgTSg4LDE2LDMyLDMyLFcpLG5ldyBNKDgsMTYsMTI4LDEyOCxXKSxuZXcgTSg4LDMyLDEyOCwyNTYsVyksbmV3IE0oMzIsMTI4LDI1OCwxMDI0LFcpLG5ldyBNKDMyLDI1OCwyNTgsNDA5NixXKV0sci5kZWZsYXRlSW5pdD1mdW5jdGlvbih0LGUpe3JldHVybiBZKHQsZSx2LDE1LDgsMCl9LHIuZGVmbGF0ZUluaXQyPVksci5kZWZsYXRlUmVzZXQ9SyxyLmRlZmxhdGVSZXNldEtlZXA9RyxyLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5zdGF0ZT8yIT09dC5zdGF0ZS53cmFwP186KHQuc3RhdGUuZ3poZWFkPWUsbSk6X30sci5kZWZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxuLHM7aWYoIXR8fCF0LnN0YXRlfHw1PGV8fGU8MClyZXR1cm4gdD9SKHQsXyk6XztpZihpPXQuc3RhdGUsIXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW58fDY2Nj09PWkuc3RhdHVzJiZlIT09ZilyZXR1cm4gUih0LDA9PT10LmF2YWlsX291dD8tNTpfKTtpZihpLnN0cm09dCxyPWkubGFzdF9mbHVzaCxpLmxhc3RfZmx1c2g9ZSxpLnN0YXR1cz09PUMpaWYoMj09PWkud3JhcCl0LmFkbGVyPTAsVShpLDMxKSxVKGksMTM5KSxVKGksOCksaS5nemhlYWQ/KFUoaSwoaS5nemhlYWQudGV4dD8xOjApKyhpLmd6aGVhZC5oY3JjPzI6MCkrKGkuZ3poZWFkLmV4dHJhPzQ6MCkrKGkuZ3poZWFkLm5hbWU/ODowKSsoaS5nemhlYWQuY29tbWVudD8xNjowKSksVShpLDI1NSZpLmd6aGVhZC50aW1lKSxVKGksaS5nemhlYWQudGltZT4+OCYyNTUpLFUoaSxpLmd6aGVhZC50aW1lPj4xNiYyNTUpLFUoaSxpLmd6aGVhZC50aW1lPj4yNCYyNTUpLFUoaSw5PT09aS5sZXZlbD8yOjI8PWkuc3RyYXRlZ3l8fGkubGV2ZWw8Mj80OjApLFUoaSwyNTUmaS5nemhlYWQub3MpLGkuZ3poZWFkLmV4dHJhJiZpLmd6aGVhZC5leHRyYS5sZW5ndGgmJihVKGksMjU1JmkuZ3poZWFkLmV4dHJhLmxlbmd0aCksVShpLGkuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxpLmd6aGVhZC5oY3JjJiYodC5hZGxlcj1wKHQuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmcsMCkpLGkuZ3ppbmRleD0wLGkuc3RhdHVzPTY5KTooVShpLDApLFUoaSwwKSxVKGksMCksVShpLDApLFUoaSwwKSxVKGksOT09PWkubGV2ZWw/MjoyPD1pLnN0cmF0ZWd5fHxpLmxldmVsPDI/NDowKSxVKGksMyksaS5zdGF0dXM9RSk7ZWxzZXt2YXIgYT12KyhpLndfYml0cy04PDw0KTw8ODthfD0oMjw9aS5zdHJhdGVneXx8aS5sZXZlbDwyPzA6aS5sZXZlbDw2PzE6Nj09PWkubGV2ZWw/MjozKTw8NiwwIT09aS5zdHJzdGFydCYmKGF8PTMyKSxhKz0zMS1hJTMxLGkuc3RhdHVzPUUsUChpLGEpLDAhPT1pLnN0cnN0YXJ0JiYoUChpLHQuYWRsZXI+Pj4xNiksUChpLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoNjk9PT1pLnN0YXR1cylpZihpLmd6aGVhZC5leHRyYSl7Zm9yKG49aS5wZW5kaW5nO2kuZ3ppbmRleDwoNjU1MzUmaS5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGkucGVuZGluZyE9PWkucGVuZGluZ19idWZfc2l6ZXx8KGkuZ3poZWFkLmhjcmMmJmkucGVuZGluZz5uJiYodC5hZGxlcj1wKHQuYWRsZXIsaS5wZW5kaW5nX2J1ZixpLnBlbmRpbmctbixuKSksRih0KSxuPWkucGVuZGluZyxpLnBlbmRpbmchPT1pLnBlbmRpbmdfYnVmX3NpemUpKTspVShpLDI1NSZpLmd6aGVhZC5leHRyYVtpLmd6aW5kZXhdKSxpLmd6aW5kZXgrKztpLmd6aGVhZC5oY3JjJiZpLnBlbmRpbmc+biYmKHQuYWRsZXI9cCh0LmFkbGVyLGkucGVuZGluZ19idWYsaS5wZW5kaW5nLW4sbikpLGkuZ3ppbmRleD09PWkuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGkuZ3ppbmRleD0wLGkuc3RhdHVzPTczKX1lbHNlIGkuc3RhdHVzPTczO2lmKDczPT09aS5zdGF0dXMpaWYoaS5nemhlYWQubmFtZSl7bj1pLnBlbmRpbmc7ZG97aWYoaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplJiYoaS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPm4mJih0LmFkbGVyPXAodC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1uLG4pKSxGKHQpLG49aS5wZW5kaW5nLGkucGVuZGluZz09PWkucGVuZGluZ19idWZfc2l6ZSkpe3M9MTticmVha31zPWkuZ3ppbmRleDxpLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmaS5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGkuZ3ppbmRleCsrKTowLFUoaSxzKX13aGlsZSgwIT09cyk7aS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPm4mJih0LmFkbGVyPXAodC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1uLG4pKSwwPT09cyYmKGkuZ3ppbmRleD0wLGkuc3RhdHVzPTkxKX1lbHNlIGkuc3RhdHVzPTkxO2lmKDkxPT09aS5zdGF0dXMpaWYoaS5nemhlYWQuY29tbWVudCl7bj1pLnBlbmRpbmc7ZG97aWYoaS5wZW5kaW5nPT09aS5wZW5kaW5nX2J1Zl9zaXplJiYoaS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPm4mJih0LmFkbGVyPXAodC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1uLG4pKSxGKHQpLG49aS5wZW5kaW5nLGkucGVuZGluZz09PWkucGVuZGluZ19idWZfc2l6ZSkpe3M9MTticmVha31zPWkuZ3ppbmRleDxpLmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaS5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KGkuZ3ppbmRleCsrKTowLFUoaSxzKX13aGlsZSgwIT09cyk7aS5nemhlYWQuaGNyYyYmaS5wZW5kaW5nPm4mJih0LmFkbGVyPXAodC5hZGxlcixpLnBlbmRpbmdfYnVmLGkucGVuZGluZy1uLG4pKSwwPT09cyYmKGkuc3RhdHVzPTEwMyl9ZWxzZSBpLnN0YXR1cz0xMDM7aWYoMTAzPT09aS5zdGF0dXMmJihpLmd6aGVhZC5oY3JjPyhpLnBlbmRpbmcrMj5pLnBlbmRpbmdfYnVmX3NpemUmJkYodCksaS5wZW5kaW5nKzI8PWkucGVuZGluZ19idWZfc2l6ZSYmKFUoaSwyNTUmdC5hZGxlciksVShpLHQuYWRsZXI+PjgmMjU1KSx0LmFkbGVyPTAsaS5zdGF0dXM9RSkpOmkuc3RhdHVzPUUpLDAhPT1pLnBlbmRpbmcpe2lmKEYodCksMD09PXQuYXZhaWxfb3V0KXJldHVybiBpLmxhc3RfZmx1c2g9LTEsbX1lbHNlIGlmKDA9PT10LmF2YWlsX2luJiZUKGUpPD1UKHIpJiZlIT09ZilyZXR1cm4gUih0LC01KTtpZig2NjY9PT1pLnN0YXR1cyYmMCE9PXQuYXZhaWxfaW4pcmV0dXJuIFIodCwtNSk7aWYoMCE9PXQuYXZhaWxfaW58fDAhPT1pLmxvb2thaGVhZHx8ZSE9PWwmJjY2NiE9PWkuc3RhdHVzKXt2YXIgbz0yPT09aS5zdHJhdGVneT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcjs7KXtpZigwPT09dC5sb29rYWhlYWQmJihqKHQpLDA9PT10Lmxvb2thaGVhZCkpe2lmKGU9PT1sKXJldHVybiBBO2JyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAscj11Ll90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrLHImJihOKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQX1yZXR1cm4gdC5pbnNlcnQ9MCxlPT09Zj8oTih0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD9POkIpOnQubGFzdF9saXQmJihOKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9BOkl9KGksZSk6Mz09PWkuc3RyYXRlZ3k/ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsaSxuLHMsYT10LndpbmRvdzs7KXtpZih0Lmxvb2thaGVhZDw9Uyl7aWYoaih0KSx0Lmxvb2thaGVhZDw9UyYmZT09PWwpcmV0dXJuIEE7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAsdC5sb29rYWhlYWQ+PXgmJjA8dC5zdHJzdGFydCYmKGk9YVtuPXQuc3Ryc3RhcnQtMV0pPT09YVsrK25dJiZpPT09YVsrK25dJiZpPT09YVsrK25dKXtzPXQuc3Ryc3RhcnQrUztkb3t9d2hpbGUoaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmaT09PWFbKytuXSYmbjxzKTt0Lm1hdGNoX2xlbmd0aD1TLShzLW4pLHQubWF0Y2hfbGVuZ3RoPnQubG9va2FoZWFkJiYodC5tYXRjaF9sZW5ndGg9dC5sb29rYWhlYWQpfWlmKHQubWF0Y2hfbGVuZ3RoPj14PyhyPXUuX3RyX3RhbGx5KHQsMSx0Lm1hdGNoX2xlbmd0aC14KSx0Lmxvb2thaGVhZC09dC5tYXRjaF9sZW5ndGgsdC5zdHJzdGFydCs9dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg9MCk6KHI9dS5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyksciYmKE4odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfXJldHVybiB0Lmluc2VydD0wLGU9PT1mPyhOKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P086Qik6dC5sYXN0X2xpdCYmKE4odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpP0E6SX0oaSxlKTpoW2kubGV2ZWxdLmZ1bmMoaSxlKTtpZihvIT09TyYmbyE9PUJ8fChpLnN0YXR1cz02NjYpLG89PT1BfHxvPT09TylyZXR1cm4gMD09PXQuYXZhaWxfb3V0JiYoaS5sYXN0X2ZsdXNoPS0xKSxtO2lmKG89PT1JJiYoMT09PWU/dS5fdHJfYWxpZ24oaSk6NSE9PWUmJih1Ll90cl9zdG9yZWRfYmxvY2soaSwwLDAsITEpLDM9PT1lJiYoRChpLmhlYWQpLDA9PT1pLmxvb2thaGVhZCYmKGkuc3Ryc3RhcnQ9MCxpLmJsb2NrX3N0YXJ0PTAsaS5pbnNlcnQ9MCkpKSxGKHQpLDA9PT10LmF2YWlsX291dCkpcmV0dXJuIGkubGFzdF9mbHVzaD0tMSxtfXJldHVybiBlIT09Zj9tOmkud3JhcDw9MD8xOigyPT09aS53cmFwPyhVKGksMjU1JnQuYWRsZXIpLFUoaSx0LmFkbGVyPj44JjI1NSksVShpLHQuYWRsZXI+PjE2JjI1NSksVShpLHQuYWRsZXI+PjI0JjI1NSksVShpLDI1NSZ0LnRvdGFsX2luKSxVKGksdC50b3RhbF9pbj4+OCYyNTUpLFUoaSx0LnRvdGFsX2luPj4xNiYyNTUpLFUoaSx0LnRvdGFsX2luPj4yNCYyNTUpKTooUChpLHQuYWRsZXI+Pj4xNiksUChpLDY1NTM1JnQuYWRsZXIpKSxGKHQpLDA8aS53cmFwJiYoaS53cmFwPS1pLndyYXApLDAhPT1pLnBlbmRpbmc/bToxKX0sci5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUuc3RhdHVzKSE9PUMmJjY5IT09ZSYmNzMhPT1lJiY5MSE9PWUmJjEwMyE9PWUmJmUhPT1FJiY2NjYhPT1lP1IodCxfKToodC5zdGF0ZT1udWxsLGU9PT1FP1IodCwtMyk6bSk6X30sci5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciByLGksbixzLGEsbyxoLHUsbD1lLmxlbmd0aDtpZighdHx8IXQuc3RhdGUpcmV0dXJuIF87aWYoMj09PShzPShyPXQuc3RhdGUpLndyYXApfHwxPT09cyYmci5zdGF0dXMhPT1DfHxyLmxvb2thaGVhZClyZXR1cm4gXztmb3IoMT09PXMmJih0LmFkbGVyPWModC5hZGxlcixlLGwsMCkpLHIud3JhcD0wLGw+PXIud19zaXplJiYoMD09PXMmJihEKHIuaGVhZCksci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSx1PW5ldyBkLkJ1Zjgoci53X3NpemUpLGQuYXJyYXlTZXQodSxlLGwtci53X3NpemUsci53X3NpemUsMCksZT11LGw9ci53X3NpemUpLGE9dC5hdmFpbF9pbixvPXQubmV4dF9pbixoPXQuaW5wdXQsdC5hdmFpbF9pbj1sLHQubmV4dF9pbj0wLHQuaW5wdXQ9ZSxqKHIpO3IubG9va2FoZWFkPj14Oyl7Zm9yKGk9ci5zdHJzdGFydCxuPXIubG9va2FoZWFkLSh4LTEpO3IuaW5zX2g9KHIuaW5zX2g8PHIuaGFzaF9zaGlmdF5yLndpbmRvd1tpK3gtMV0pJnIuaGFzaF9tYXNrLHIucHJldltpJnIud19tYXNrXT1yLmhlYWRbci5pbnNfaF0sci5oZWFkW3IuaW5zX2hdPWksaSsrLC0tbjspO3Iuc3Ryc3RhcnQ9aSxyLmxvb2thaGVhZD14LTEsaihyKX1yZXR1cm4gci5zdHJzdGFydCs9ci5sb29rYWhlYWQsci5ibG9ja19zdGFydD1yLnN0cnN0YXJ0LHIuaW5zZXJ0PXIubG9va2FoZWFkLHIubG9va2FoZWFkPTAsci5tYXRjaF9sZW5ndGg9ci5wcmV2X2xlbmd0aD14LTEsci5tYXRjaF9hdmFpbGFibGU9MCx0Lm5leHRfaW49byx0LmlucHV0PWgsdC5hdmFpbF9pbj1hLHIud3JhcD1zLG19LHIuZGVmbGF0ZUluZm89XCJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXCJ9LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9hZGxlcjMyXCI6NDMsXCIuL2NyYzMyXCI6NDUsXCIuL21lc3NhZ2VzXCI6NTEsXCIuL3RyZWVzXCI6NTJ9XSw0NzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT1cIlwiLHRoaXMuY29tbWVudD1cIlwiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSw0ODpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbixzLGEsbyxoLHUsbCxmLGQsYyxwLG0sXyxnLGIsdix5LHcsayx4LFMseixDO3I9dC5zdGF0ZSxpPXQubmV4dF9pbix6PXQuaW5wdXQsbj1pKyh0LmF2YWlsX2luLTUpLHM9dC5uZXh0X291dCxDPXQub3V0cHV0LGE9cy0oZS10LmF2YWlsX291dCksbz1zKyh0LmF2YWlsX291dC0yNTcpLGg9ci5kbWF4LHU9ci53c2l6ZSxsPXIud2hhdmUsZj1yLnduZXh0LGQ9ci53aW5kb3csYz1yLmhvbGQscD1yLmJpdHMsbT1yLmxlbmNvZGUsXz1yLmRpc3Rjb2RlLGc9KDE8PHIubGVuYml0cyktMSxiPSgxPDxyLmRpc3RiaXRzKS0xO3Q6ZG97cDwxNSYmKGMrPXpbaSsrXTw8cCxwKz04LGMrPXpbaSsrXTw8cCxwKz04KSx2PW1bYyZnXTtlOmZvcig7Oyl7aWYoYz4+Pj15PXY+Pj4yNCxwLT15LDA9PT0oeT12Pj4+MTYmMjU1KSlDW3MrK109NjU1MzUmdjtlbHNle2lmKCEoMTYmeSkpe2lmKDA9PSg2NCZ5KSl7dj1tWyg2NTUzNSZ2KSsoYyYoMTw8eSktMSldO2NvbnRpbnVlIGV9aWYoMzImeSl7ci5tb2RlPTEyO2JyZWFrIHR9dC5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixyLm1vZGU9MzA7YnJlYWsgdH13PTY1NTM1JnYsKHkmPTE1KSYmKHA8eSYmKGMrPXpbaSsrXTw8cCxwKz04KSx3Kz1jJigxPDx5KS0xLGM+Pj49eSxwLT15KSxwPDE1JiYoYys9eltpKytdPDxwLHArPTgsYys9eltpKytdPDxwLHArPTgpLHY9X1tjJmJdO3I6Zm9yKDs7KXtpZihjPj4+PXk9dj4+PjI0LHAtPXksISgxNiYoeT12Pj4+MTYmMjU1KSkpe2lmKDA9PSg2NCZ5KSl7dj1fWyg2NTUzNSZ2KSsoYyYoMTw8eSktMSldO2NvbnRpbnVlIHJ9dC5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixyLm1vZGU9MzA7YnJlYWsgdH1pZihrPTY1NTM1JnYscDwoeSY9MTUpJiYoYys9eltpKytdPDxwLChwKz04KTx5JiYoYys9eltpKytdPDxwLHArPTgpKSxoPChrKz1jJigxPDx5KS0xKSl7dC5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVhayB0fWlmKGM+Pj49eSxwLT15LCh5PXMtYSk8ayl7aWYobDwoeT1rLXkpJiZyLnNhbmUpe3QubXNnPVwiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2tcIixyLm1vZGU9MzA7YnJlYWsgdH1pZihTPWQsKHg9MCk9PT1mKXtpZih4Kz11LXkseTx3KXtmb3Iody09eTtDW3MrK109ZFt4KytdLC0teTspO3g9cy1rLFM9Q319ZWxzZSBpZihmPHkpe2lmKHgrPXUrZi15LCh5LT1mKTx3KXtmb3Iody09eTtDW3MrK109ZFt4KytdLC0teTspO2lmKHg9MCxmPHcpe2Zvcih3LT15PWY7Q1tzKytdPWRbeCsrXSwtLXk7KTt4PXMtayxTPUN9fX1lbHNlIGlmKHgrPWYteSx5PHcpe2Zvcih3LT15O0NbcysrXT1kW3grK10sLS15Oyk7eD1zLWssUz1DfWZvcig7Mjx3OylDW3MrK109U1t4KytdLENbcysrXT1TW3grK10sQ1tzKytdPVNbeCsrXSx3LT0zO3cmJihDW3MrK109U1t4KytdLDE8dyYmKENbcysrXT1TW3grK10pKX1lbHNle2Zvcih4PXMtaztDW3MrK109Q1t4KytdLENbcysrXT1DW3grK10sQ1tzKytdPUNbeCsrXSwyPCh3LT0zKTspO3cmJihDW3MrK109Q1t4KytdLDE8dyYmKENbcysrXT1DW3grK10pKX1icmVha319YnJlYWt9fXdoaWxlKGk8biYmczxvKTtpLT13PXA+PjMsYyY9KDE8PChwLT13PDwzKSktMSx0Lm5leHRfaW49aSx0Lm5leHRfb3V0PXMsdC5hdmFpbF9pbj1pPG4/bi1pKzU6NS0oaS1uKSx0LmF2YWlsX291dD1zPG8/by1zKzI1NzoyNTctKHMtbyksci5ob2xkPWMsci5iaXRzPXB9fSx7fV0sNDk6W2Z1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgST10KFwiLi4vdXRpbHMvY29tbW9uXCIpLE89dChcIi4vYWRsZXIzMlwiKSxCPXQoXCIuL2NyYzMyXCIpLFI9dChcIi4vaW5mZmFzdFwiKSxUPXQoXCIuL2luZnRyZWVzXCIpLEQ9MSxGPTIsTj0wLFU9LTIsUD0xLGk9ODUyLG49NTkyO2Z1bmN0aW9uIEwodCl7cmV0dXJuKHQ+Pj4yNCYyNTUpKyh0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ0KTw8OCkrKCgyNTUmdCk8PDI0KX1mdW5jdGlvbiBzKCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZlPTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0wLHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBJLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBJLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIGEodCl7dmFyIGU7cmV0dXJuIHQmJnQuc3RhdGU/KGU9dC5zdGF0ZSx0LnRvdGFsX2luPXQudG90YWxfb3V0PWUudG90YWw9MCx0Lm1zZz1cIlwiLGUud3JhcCYmKHQuYWRsZXI9MSZlLndyYXApLGUubW9kZT1QLGUubGFzdD0wLGUuaGF2ZWRpY3Q9MCxlLmRtYXg9MzI3NjgsZS5oZWFkPW51bGwsZS5ob2xkPTAsZS5iaXRzPTAsZS5sZW5jb2RlPWUubGVuZHluPW5ldyBJLkJ1ZjMyKGkpLGUuZGlzdGNvZGU9ZS5kaXN0ZHluPW5ldyBJLkJ1ZjMyKG4pLGUuc2FuZT0xLGUuYmFjaz0tMSxOKTpVfWZ1bmN0aW9uIG8odCl7dmFyIGU7cmV0dXJuIHQmJnQuc3RhdGU/KChlPXQuc3RhdGUpLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxhKHQpKTpVfWZ1bmN0aW9uIGgodCxlKXt2YXIgcixpO3JldHVybiB0JiZ0LnN0YXRlPyhpPXQuc3RhdGUsZTwwPyhyPTAsZT0tZSk6KHI9MSsoZT4+NCksZTw0OCYmKGUmPTE1KSksZSYmKGU8OHx8MTU8ZSk/VToobnVsbCE9PWkud2luZG93JiZpLndiaXRzIT09ZSYmKGkud2luZG93PW51bGwpLGkud3JhcD1yLGkud2JpdHM9ZSxvKHQpKSk6VX1mdW5jdGlvbiB1KHQsZSl7dmFyIHIsaTtyZXR1cm4gdD8oaT1uZXcgcywodC5zdGF0ZT1pKS53aW5kb3c9bnVsbCwocj1oKHQsZSkpIT09TiYmKHQuc3RhdGU9bnVsbCkscik6VX12YXIgbCxmLGQ9ITA7ZnVuY3Rpb24gaih0KXtpZihkKXt2YXIgZTtmb3IobD1uZXcgSS5CdWYzMig1MTIpLGY9bmV3IEkuQnVmMzIoMzIpLGU9MDtlPDE0NDspdC5sZW5zW2UrK109ODtmb3IoO2U8MjU2Oyl0LmxlbnNbZSsrXT05O2Zvcig7ZTwyODA7KXQubGVuc1tlKytdPTc7Zm9yKDtlPDI4ODspdC5sZW5zW2UrK109ODtmb3IoVChELHQubGVucywwLDI4OCxsLDAsdC53b3JrLHtiaXRzOjl9KSxlPTA7ZTwzMjspdC5sZW5zW2UrK109NTtUKEYsdC5sZW5zLDAsMzIsZiwwLHQud29yayx7Yml0czo1fSksZD0hMX10LmxlbmNvZGU9bCx0LmxlbmJpdHM9OSx0LmRpc3Rjb2RlPWYsdC5kaXN0Yml0cz01fWZ1bmN0aW9uIFoodCxlLHIsaSl7dmFyIG4scz10LnN0YXRlO3JldHVybiBudWxsPT09cy53aW5kb3cmJihzLndzaXplPTE8PHMud2JpdHMscy53bmV4dD0wLHMud2hhdmU9MCxzLndpbmRvdz1uZXcgSS5CdWY4KHMud3NpemUpKSxpPj1zLndzaXplPyhJLmFycmF5U2V0KHMud2luZG93LGUsci1zLndzaXplLHMud3NpemUsMCkscy53bmV4dD0wLHMud2hhdmU9cy53c2l6ZSk6KGk8KG49cy53c2l6ZS1zLnduZXh0KSYmKG49aSksSS5hcnJheVNldChzLndpbmRvdyxlLHItaSxuLHMud25leHQpLChpLT1uKT8oSS5hcnJheVNldChzLndpbmRvdyxlLHItaSxpLDApLHMud25leHQ9aSxzLndoYXZlPXMud3NpemUpOihzLnduZXh0Kz1uLHMud25leHQ9PT1zLndzaXplJiYocy53bmV4dD0wKSxzLndoYXZlPHMud3NpemUmJihzLndoYXZlKz1uKSkpLDB9ci5pbmZsYXRlUmVzZXQ9byxyLmluZmxhdGVSZXNldDI9aCxyLmluZmxhdGVSZXNldEtlZXA9YSxyLmluZmxhdGVJbml0PWZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMTUpfSxyLmluZmxhdGVJbml0Mj11LHIuaW5mbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByLGksbixzLGEsbyxoLHUsbCxmLGQsYyxwLG0sXyxnLGIsdix5LHcsayx4LFMseixDPTAsRT1uZXcgSS5CdWY4KDQpLEE9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCF0fHwhdC5zdGF0ZXx8IXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW4pcmV0dXJuIFU7MTI9PT0ocj10LnN0YXRlKS5tb2RlJiYoci5tb2RlPTEzKSxhPXQubmV4dF9vdXQsbj10Lm91dHB1dCxoPXQuYXZhaWxfb3V0LHM9dC5uZXh0X2luLGk9dC5pbnB1dCxvPXQuYXZhaWxfaW4sdT1yLmhvbGQsbD1yLmJpdHMsZj1vLGQ9aCx4PU47dDpmb3IoOzspc3dpdGNoKHIubW9kZSl7Y2FzZSBQOmlmKDA9PT1yLndyYXApe3IubW9kZT0xMzticmVha31mb3IoO2w8MTY7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1pZigyJnIud3JhcCYmMzU2MTU9PT11KXtFW3IuY2hlY2s9MF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSwyLDApLGw9dT0wLHIubW9kZT0yO2JyZWFrfWlmKHIuZmxhZ3M9MCxyLmhlYWQmJihyLmhlYWQuZG9uZT0hMSksISgxJnIud3JhcCl8fCgoKDI1NSZ1KTw8OCkrKHU+PjgpKSUzMSl7dC5tc2c9XCJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrXCIsci5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZ1KSl7dC5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLHIubW9kZT0zMDticmVha31pZihsLT00LGs9OCsoMTUmKHU+Pj49NCkpLDA9PT1yLndiaXRzKXIud2JpdHM9aztlbHNlIGlmKGs+ci53Yml0cyl7dC5tc2c9XCJpbnZhbGlkIHdpbmRvdyBzaXplXCIsci5tb2RlPTMwO2JyZWFrfXIuZG1heD0xPDxrLHQuYWRsZXI9ci5jaGVjaz0xLHIubW9kZT01MTImdT8xMDoxMixsPXU9MDticmVhaztjYXNlIDI6Zm9yKDtsPDE2Oyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9aWYoci5mbGFncz11LDghPSgyNTUmci5mbGFncykpe3QubXNnPVwidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2RcIixyLm1vZGU9MzA7YnJlYWt9aWYoNTczNDQmci5mbGFncyl7dC5tc2c9XCJ1bmtub3duIGhlYWRlciBmbGFncyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9ci5oZWFkJiYoci5oZWFkLnRleHQ9dT4+OCYxKSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSwyLDApKSxsPXU9MCxyLm1vZGU9MztjYXNlIDM6Zm9yKDtsPDMyOyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9ci5oZWFkJiYoci5oZWFkLnRpbWU9dSksNTEyJnIuZmxhZ3MmJihFWzBdPTI1NSZ1LEVbMV09dT4+PjgmMjU1LEVbMl09dT4+PjE2JjI1NSxFWzNdPXU+Pj4yNCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSw0LDApKSxsPXU9MCxyLm1vZGU9NDtjYXNlIDQ6Zm9yKDtsPDE2Oyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9ci5oZWFkJiYoci5oZWFkLnhmbGFncz0yNTUmdSxyLmhlYWQub3M9dT4+OCksNTEyJnIuZmxhZ3MmJihFWzBdPTI1NSZ1LEVbMV09dT4+PjgmMjU1LHIuY2hlY2s9QihyLmNoZWNrLEUsMiwwKSksbD11PTAsci5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmci5mbGFncyl7Zm9yKDtsPDE2Oyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9ci5sZW5ndGg9dSxyLmhlYWQmJihyLmhlYWQuZXh0cmFfbGVuPXUpLDUxMiZyLmZsYWdzJiYoRVswXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCkpLGw9dT0wfWVsc2Ugci5oZWFkJiYoci5oZWFkLmV4dHJhPW51bGwpO3IubW9kZT02O2Nhc2UgNjppZigxMDI0JnIuZmxhZ3MmJihvPChjPXIubGVuZ3RoKSYmKGM9byksYyYmKHIuaGVhZCYmKGs9ci5oZWFkLmV4dHJhX2xlbi1yLmxlbmd0aCxyLmhlYWQuZXh0cmF8fChyLmhlYWQuZXh0cmE9bmV3IEFycmF5KHIuaGVhZC5leHRyYV9sZW4pKSxJLmFycmF5U2V0KHIuaGVhZC5leHRyYSxpLHMsYyxrKSksNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxpLGMscykpLG8tPWMscys9YyxyLmxlbmd0aC09Yyksci5sZW5ndGgpKWJyZWFrIHQ7ci5sZW5ndGg9MCxyLm1vZGU9NztjYXNlIDc6aWYoMjA0OCZyLmZsYWdzKXtpZigwPT09bylicmVhayB0O2ZvcihjPTA7az1pW3MrYysrXSxyLmhlYWQmJmsmJnIubGVuZ3RoPDY1NTM2JiYoci5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoaykpLGsmJmM8bzspO2lmKDUxMiZyLmZsYWdzJiYoci5jaGVjaz1CKHIuY2hlY2ssaSxjLHMpKSxvLT1jLHMrPWMsaylicmVhayB0fWVsc2Ugci5oZWFkJiYoci5oZWFkLm5hbWU9bnVsbCk7ci5sZW5ndGg9MCxyLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZyLmZsYWdzKXtpZigwPT09bylicmVhayB0O2ZvcihjPTA7az1pW3MrYysrXSxyLmhlYWQmJmsmJnIubGVuZ3RoPDY1NTM2JiYoci5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaykpLGsmJmM8bzspO2lmKDUxMiZyLmZsYWdzJiYoci5jaGVjaz1CKHIuY2hlY2ssaSxjLHMpKSxvLT1jLHMrPWMsaylicmVhayB0fWVsc2Ugci5oZWFkJiYoci5oZWFkLmNvbW1lbnQ9bnVsbCk7ci5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZyLmZsYWdzKXtmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1pZih1IT09KDY1NTM1JnIuY2hlY2spKXt0Lm1zZz1cImhlYWRlciBjcmMgbWlzbWF0Y2hcIixyLm1vZGU9MzA7YnJlYWt9bD11PTB9ci5oZWFkJiYoci5oZWFkLmhjcmM9ci5mbGFncz4+OSYxLHIuaGVhZC5kb25lPSEwKSx0LmFkbGVyPXIuY2hlY2s9MCxyLm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH10LmFkbGVyPXIuY2hlY2s9TCh1KSxsPXU9MCxyLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09ci5oYXZlZGljdClyZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWgsdC5uZXh0X2luPXMsdC5hdmFpbF9pbj1vLHIuaG9sZD11LHIuYml0cz1sLDI7dC5hZGxlcj1yLmNoZWNrPTEsci5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PWV8fDY9PT1lKWJyZWFrIHQ7Y2FzZSAxMzppZihyLmxhc3Qpe3U+Pj49NyZsLGwtPTcmbCxyLm1vZGU9Mjc7YnJlYWt9Zm9yKDtsPDM7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1zd2l0Y2goci5sYXN0PTEmdSxsLT0xLDMmKHU+Pj49MSkpe2Nhc2UgMDpyLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKGoociksci5tb2RlPTIwLDYhPT1lKWJyZWFrO3U+Pj49MixsLT0yO2JyZWFrIHQ7Y2FzZSAyOnIubW9kZT0xNzticmVhaztjYXNlIDM6dC5tc2c9XCJpbnZhbGlkIGJsb2NrIHR5cGVcIixyLm1vZGU9MzB9dT4+Pj0yLGwtPTI7YnJlYWs7Y2FzZSAxNDpmb3IodT4+Pj03JmwsbC09NyZsO2w8MzI7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1pZigoNjU1MzUmdSkhPSh1Pj4+MTZeNjU1MzUpKXt0Lm1zZz1cImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHNcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5sZW5ndGg9NjU1MzUmdSxsPXU9MCxyLm1vZGU9MTUsNj09PWUpYnJlYWsgdDtjYXNlIDE1OnIubW9kZT0xNjtjYXNlIDE2OmlmKGM9ci5sZW5ndGgpe2lmKG88YyYmKGM9byksaDxjJiYoYz1oKSwwPT09YylicmVhayB0O0kuYXJyYXlTZXQobixpLHMsYyxhKSxvLT1jLHMrPWMsaC09YyxhKz1jLHIubGVuZ3RoLT1jO2JyZWFrfXIubW9kZT0xMjticmVhaztjYXNlIDE3OmZvcig7bDwxNDspe2lmKDA9PT1vKWJyZWFrIHQ7by0tLHUrPWlbcysrXTw8bCxsKz04fWlmKHIubmxlbj0yNTcrKDMxJnUpLHU+Pj49NSxsLT01LHIubmRpc3Q9MSsoMzEmdSksdT4+Pj01LGwtPTUsci5uY29kZT00KygxNSZ1KSx1Pj4+PTQsbC09NCwyODY8ci5ubGVufHwzMDxyLm5kaXN0KXt0Lm1zZz1cInRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzXCIsci5tb2RlPTMwO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT0xODtjYXNlIDE4OmZvcig7ci5oYXZlPHIubmNvZGU7KXtmb3IoO2w8Mzspe2lmKDA9PT1vKWJyZWFrIHQ7by0tLHUrPWlbcysrXTw8bCxsKz04fXIubGVuc1tBW3IuaGF2ZSsrXV09NyZ1LHU+Pj49MyxsLT0zfWZvcig7ci5oYXZlPDE5OylyLmxlbnNbQVtyLmhhdmUrK11dPTA7aWYoci5sZW5jb2RlPXIubGVuZHluLHIubGVuYml0cz03LFM9e2JpdHM6ci5sZW5iaXRzfSx4PVQoMCxyLmxlbnMsMCwxOSxyLmxlbmNvZGUsMCxyLndvcmssUyksci5sZW5iaXRzPVMuYml0cyx4KXt0Lm1zZz1cImludmFsaWQgY29kZSBsZW5ndGhzIHNldFwiLHIubW9kZT0zMDticmVha31yLmhhdmU9MCxyLm1vZGU9MTk7Y2FzZSAxOTpmb3IoO3IuaGF2ZTxyLm5sZW4rci5uZGlzdDspe2Zvcig7Zz0oQz1yLmxlbmNvZGVbdSYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEoKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1pZihiPDE2KXU+Pj49XyxsLT1fLHIubGVuc1tyLmhhdmUrK109YjtlbHNle2lmKDE2PT09Yil7Zm9yKHo9XysyO2w8ejspe2lmKDA9PT1vKWJyZWFrIHQ7by0tLHUrPWlbcysrXTw8bCxsKz04fWlmKHU+Pj49XyxsLT1fLDA9PT1yLmhhdmUpe3QubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLHIubW9kZT0zMDticmVha31rPXIubGVuc1tyLmhhdmUtMV0sYz0zKygzJnUpLHU+Pj49MixsLT0yfWVsc2UgaWYoMTc9PT1iKXtmb3Ioej1fKzM7bDx6Oyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9bC09XyxrPTAsYz0zKyg3Jih1Pj4+PV8pKSx1Pj4+PTMsbC09M31lbHNle2Zvcih6PV8rNztsPHo7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1sLT1fLGs9MCxjPTExKygxMjcmKHU+Pj49XykpLHU+Pj49NyxsLT03fWlmKHIuaGF2ZStjPnIubmxlbityLm5kaXN0KXt0Lm1zZz1cImludmFsaWQgYml0IGxlbmd0aCByZXBlYXRcIixyLm1vZGU9MzA7YnJlYWt9Zm9yKDtjLS07KXIubGVuc1tyLmhhdmUrK109a319aWYoMzA9PT1yLm1vZGUpYnJlYWs7aWYoMD09PXIubGVuc1syNTZdKXt0Lm1zZz1cImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9ja1wiLHIubW9kZT0zMDticmVha31pZihyLmxlbmJpdHM9OSxTPXtiaXRzOnIubGVuYml0c30seD1UKEQsci5sZW5zLDAsci5ubGVuLHIubGVuY29kZSwwLHIud29yayxTKSxyLmxlbmJpdHM9Uy5iaXRzLHgpe3QubXNnPVwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfWlmKHIuZGlzdGJpdHM9NixyLmRpc3Rjb2RlPXIuZGlzdGR5bixTPXtiaXRzOnIuZGlzdGJpdHN9LHg9VChGLHIubGVucyxyLm5sZW4sci5uZGlzdCxyLmRpc3Rjb2RlLDAsci53b3JrLFMpLHIuZGlzdGJpdHM9Uy5iaXRzLHgpe3QubXNnPVwiaW52YWxpZCBkaXN0YW5jZXMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfWlmKHIubW9kZT0yMCw2PT09ZSlicmVhayB0O2Nhc2UgMjA6ci5tb2RlPTIxO2Nhc2UgMjE6aWYoNjw9byYmMjU4PD1oKXt0Lm5leHRfb3V0PWEsdC5hdmFpbF9vdXQ9aCx0Lm5leHRfaW49cyx0LmF2YWlsX2luPW8sci5ob2xkPXUsci5iaXRzPWwsUih0LGQpLGE9dC5uZXh0X291dCxuPXQub3V0cHV0LGg9dC5hdmFpbF9vdXQscz10Lm5leHRfaW4saT10LmlucHV0LG89dC5hdmFpbF9pbix1PXIuaG9sZCxsPXIuYml0cywxMj09PXIubW9kZSYmKHIuYmFjaz0tMSk7YnJlYWt9Zm9yKHIuYmFjaz0wO2c9KEM9ci5sZW5jb2RlW3UmKDE8PHIubGVuYml0cyktMV0pPj4+MTYmMjU1LGI9NjU1MzUmQywhKChfPUM+Pj4yNCk8PWwpOyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9aWYoZyYmMD09KDI0MCZnKSl7Zm9yKHY9Xyx5PWcsdz1iO2c9KEM9ci5sZW5jb2RlW3crKCh1JigxPDx2K3kpLTEpPj52KV0pPj4+MTYmMjU1LGI9NjU1MzUmQywhKHYrKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH11Pj4+PXYsbC09dixyLmJhY2srPXZ9aWYodT4+Pj1fLGwtPV8sci5iYWNrKz1fLHIubGVuZ3RoPWIsMD09PWcpe3IubW9kZT0yNjticmVha31pZigzMiZnKXtyLmJhY2s9LTEsci5tb2RlPTEyO2JyZWFrfWlmKDY0Jmcpe3QubXNnPVwiaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlXCIsci5tb2RlPTMwO2JyZWFrfXIuZXh0cmE9MTUmZyxyLm1vZGU9MjI7Y2FzZSAyMjppZihyLmV4dHJhKXtmb3Ioej1yLmV4dHJhO2w8ejspe2lmKDA9PT1vKWJyZWFrIHQ7by0tLHUrPWlbcysrXTw8bCxsKz04fXIubGVuZ3RoKz11JigxPDxyLmV4dHJhKS0xLHU+Pj49ci5leHRyYSxsLT1yLmV4dHJhLHIuYmFjays9ci5leHRyYX1yLndhcz1yLmxlbmd0aCxyLm1vZGU9MjM7Y2FzZSAyMzpmb3IoO2c9KEM9ci5kaXN0Y29kZVt1JigxPDxyLmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEoKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH1pZigwPT0oMjQwJmcpKXtmb3Iodj1fLHk9Zyx3PWI7Zz0oQz1yLmRpc3Rjb2RlW3crKCh1JigxPDx2K3kpLTEpPj52KV0pPj4+MTYmMjU1LGI9NjU1MzUmQywhKHYrKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayB0O28tLSx1Kz1pW3MrK108PGwsbCs9OH11Pj4+PXYsbC09dixyLmJhY2srPXZ9aWYodT4+Pj1fLGwtPV8sci5iYWNrKz1fLDY0Jmcpe3QubXNnPVwiaW52YWxpZCBkaXN0YW5jZSBjb2RlXCIsci5tb2RlPTMwO2JyZWFrfXIub2Zmc2V0PWIsci5leHRyYT0xNSZnLHIubW9kZT0yNDtjYXNlIDI0OmlmKHIuZXh0cmEpe2Zvcih6PXIuZXh0cmE7bDx6Oyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9ci5vZmZzZXQrPXUmKDE8PHIuZXh0cmEpLTEsdT4+Pj1yLmV4dHJhLGwtPXIuZXh0cmEsci5iYWNrKz1yLmV4dHJhfWlmKHIub2Zmc2V0PnIuZG1heCl7dC5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVha31yLm1vZGU9MjU7Y2FzZSAyNTppZigwPT09aClicmVhayB0O2lmKGM9ZC1oLHIub2Zmc2V0PmMpe2lmKChjPXIub2Zmc2V0LWMpPnIud2hhdmUmJnIuc2FuZSl7dC5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVha31wPWM+ci53bmV4dD8oYy09ci53bmV4dCxyLndzaXplLWMpOnIud25leHQtYyxjPnIubGVuZ3RoJiYoYz1yLmxlbmd0aCksbT1yLndpbmRvd31lbHNlIG09bixwPWEtci5vZmZzZXQsYz1yLmxlbmd0aDtmb3IoaDxjJiYoYz1oKSxoLT1jLHIubGVuZ3RoLT1jO25bYSsrXT1tW3ArK10sLS1jOyk7MD09PXIubGVuZ3RoJiYoci5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1oKWJyZWFrIHQ7blthKytdPXIubGVuZ3RoLGgtLSxyLm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihyLndyYXApe2Zvcig7bDwzMjspe2lmKDA9PT1vKWJyZWFrIHQ7by0tLHV8PWlbcysrXTw8bCxsKz04fWlmKGQtPWgsdC50b3RhbF9vdXQrPWQsci50b3RhbCs9ZCxkJiYodC5hZGxlcj1yLmNoZWNrPXIuZmxhZ3M/QihyLmNoZWNrLG4sZCxhLWQpOk8oci5jaGVjayxuLGQsYS1kKSksZD1oLChyLmZsYWdzP3U6TCh1KSkhPT1yLmNoZWNrKXt0Lm1zZz1cImluY29ycmVjdCBkYXRhIGNoZWNrXCIsci5tb2RlPTMwO2JyZWFrfWw9dT0wfXIubW9kZT0yODtjYXNlIDI4OmlmKHIud3JhcCYmci5mbGFncyl7Zm9yKDtsPDMyOyl7aWYoMD09PW8pYnJlYWsgdDtvLS0sdSs9aVtzKytdPDxsLGwrPTh9aWYodSE9PSg0Mjk0OTY3Mjk1JnIudG90YWwpKXt0Lm1zZz1cImluY29ycmVjdCBsZW5ndGggY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9bD11PTB9ci5tb2RlPTI5O2Nhc2UgMjk6eD0xO2JyZWFrIHQ7Y2FzZSAzMDp4PS0zO2JyZWFrIHQ7Y2FzZSAzMTpyZXR1cm4tNDtjYXNlIDMyOmRlZmF1bHQ6cmV0dXJuIFV9cmV0dXJuIHQubmV4dF9vdXQ9YSx0LmF2YWlsX291dD1oLHQubmV4dF9pbj1zLHQuYXZhaWxfaW49byxyLmhvbGQ9dSxyLmJpdHM9bCwoci53c2l6ZXx8ZCE9PXQuYXZhaWxfb3V0JiZyLm1vZGU8MzAmJihyLm1vZGU8Mjd8fDQhPT1lKSkmJloodCx0Lm91dHB1dCx0Lm5leHRfb3V0LGQtdC5hdmFpbF9vdXQpPyhyLm1vZGU9MzEsLTQpOihmLT10LmF2YWlsX2luLGQtPXQuYXZhaWxfb3V0LHQudG90YWxfaW4rPWYsdC50b3RhbF9vdXQrPWQsci50b3RhbCs9ZCxyLndyYXAmJmQmJih0LmFkbGVyPXIuY2hlY2s9ci5mbGFncz9CKHIuY2hlY2ssbixkLHQubmV4dF9vdXQtZCk6TyhyLmNoZWNrLG4sZCx0Lm5leHRfb3V0LWQpKSx0LmRhdGFfdHlwZT1yLmJpdHMrKHIubGFzdD82NDowKSsoMTI9PT1yLm1vZGU/MTI4OjApKygyMD09PXIubW9kZXx8MTU9PT1yLm1vZGU/MjU2OjApLCgwPT1mJiYwPT09ZHx8ND09PWUpJiZ4PT09TiYmKHg9LTUpLHgpfSxyLmluZmxhdGVFbmQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LnN0YXRlKXJldHVybiBVO3ZhciBlPXQuc3RhdGU7cmV0dXJuIGUud2luZG93JiYoZS53aW5kb3c9bnVsbCksdC5zdGF0ZT1udWxsLE59LHIuaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiB0JiZ0LnN0YXRlPzA9PSgyJihyPXQuc3RhdGUpLndyYXApP1U6KChyLmhlYWQ9ZSkuZG9uZT0hMSxOKTpVfSxyLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1lLmxlbmd0aDtyZXR1cm4gdCYmdC5zdGF0ZT8wIT09KHI9dC5zdGF0ZSkud3JhcCYmMTEhPT1yLm1vZGU/VToxMT09PXIubW9kZSYmTygxLGUsaSwwKSE9PXIuY2hlY2s/LTM6Wih0LGUsaSxpKT8oci5tb2RlPTMxLC00KTooci5oYXZlZGljdD0xLE4pOlV9LHIuaW5mbGF0ZUluZm89XCJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpXCJ9LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9hZGxlcjMyXCI6NDMsXCIuL2NyYzMyXCI6NDUsXCIuL2luZmZhc3RcIjo0OCxcIi4vaW5mdHJlZXNcIjo1MH1dLDUwOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIEQ9dChcIi4uL3V0aWxzL2NvbW1vblwiKSxGPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sTj1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLFU9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLFA9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxuLHMsYSxvKXt2YXIgaCx1LGwsZixkLGMscCxtLF8sZz1vLmJpdHMsYj0wLHY9MCx5PTAsdz0wLGs9MCx4PTAsUz0wLHo9MCxDPTAsRT0wLEE9bnVsbCxJPTAsTz1uZXcgRC5CdWYxNigxNiksQj1uZXcgRC5CdWYxNigxNiksUj1udWxsLFQ9MDtmb3IoYj0wO2I8PTE1O2IrKylPW2JdPTA7Zm9yKHY9MDt2PGk7disrKU9bZVtyK3ZdXSsrO2ZvcihrPWcsdz0xNTsxPD13JiYwPT09T1t3XTt3LS0pO2lmKHc8ayYmKGs9dyksMD09PXcpcmV0dXJuIG5bcysrXT0yMDk3MTUyMCxuW3MrK109MjA5NzE1MjAsby5iaXRzPTEsMDtmb3IoeT0xO3k8dyYmMD09PU9beV07eSsrKTtmb3Ioazx5JiYoaz15KSxiPXo9MTtiPD0xNTtiKyspaWYoejw8PTEsKHotPU9bYl0pPDApcmV0dXJuLTE7aWYoMDx6JiYoMD09PXR8fDEhPT13KSlyZXR1cm4tMTtmb3IoQlsxXT0wLGI9MTtiPDE1O2IrKylCW2IrMV09QltiXStPW2JdO2Zvcih2PTA7djxpO3YrKykwIT09ZVtyK3ZdJiYoYVtCW2Vbcit2XV0rK109dik7aWYoYz0wPT09dD8oQT1SPWEsMTkpOjE9PT10PyhBPUYsSS09MjU3LFI9TixULT0yNTcsMjU2KTooQT1VLFI9UCwtMSksYj15LGQ9cyxTPXY9RT0wLGw9LTEsZj0oQz0xPDwoeD1rKSktMSwxPT09dCYmODUyPEN8fDI9PT10JiY1OTI8QylyZXR1cm4gMTtmb3IoOzspe2ZvcihwPWItUyxfPWFbdl08Yz8obT0wLGFbdl0pOmFbdl0+Yz8obT1SW1QrYVt2XV0sQVtJK2Fbdl1dKToobT05NiwwKSxoPTE8PGItUyx5PXU9MTw8eDtuW2QrKEU+PlMpKyh1LT1oKV09cDw8MjR8bTw8MTZ8X3wwLDAhPT11Oyk7Zm9yKGg9MTw8Yi0xO0UmaDspaD4+PTE7aWYoMCE9PWg/KEUmPWgtMSxFKz1oKTpFPTAsdisrLDA9PS0tT1tiXSl7aWYoYj09PXcpYnJlYWs7Yj1lW3IrYVt2XV19aWYoazxiJiYoRSZmKSE9PWwpe2ZvcigwPT09UyYmKFM9ayksZCs9eSx6PTE8PCh4PWItUyk7eCtTPHcmJiEoKHotPU9beCtTXSk8PTApOyl4Kyssejw8PTE7aWYoQys9MTw8eCwxPT09dCYmODUyPEN8fDI9PT10JiY1OTI8QylyZXR1cm4gMTtuW2w9RSZmXT1rPDwyNHx4PDwxNnxkLXN8MH19cmV0dXJuIDAhPT1FJiYobltkK0VdPWItUzw8MjR8NjQ8PDE2fDApLG8uYml0cz1rLDB9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUxOltmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5leHBvcnRzPXsyOlwibmVlZCBkaWN0aW9uYXJ5XCIsMTpcInN0cmVhbSBlbmRcIiwwOlwiXCIsXCItMVwiOlwiZmlsZSBlcnJvclwiLFwiLTJcIjpcInN0cmVhbSBlcnJvclwiLFwiLTNcIjpcImRhdGEgZXJyb3JcIixcIi00XCI6XCJpbnN1ZmZpY2llbnQgbWVtb3J5XCIsXCItNVwiOlwiYnVmZmVyIGVycm9yXCIsXCItNlwiOlwiaW5jb21wYXRpYmxlIHZlcnNpb25cIn19LHt9XSw1MjpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQoXCIuLi91dGlscy9jb21tb25cIiksbz0wLGg9MTtmdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDswPD0tLWU7KXRbZV09MH12YXIgcz0wLGE9MjksdT0yNTYsbD11KzErYSxmPTMwLGQ9MTksXz0yKmwrMSxnPTE1LGM9MTYscD03LG09MjU2LGI9MTYsdj0xNyx5PTE4LHc9WzAsMCwwLDAsMCwwLDAsMCwxLDEsMSwxLDIsMiwyLDIsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUsMF0saz1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10seD1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDMsN10sUz1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sej1uZXcgQXJyYXkoMioobCsyKSk7aSh6KTt2YXIgQz1uZXcgQXJyYXkoMipmKTtpKEMpO3ZhciBFPW5ldyBBcnJheSg1MTIpO2koRSk7dmFyIEE9bmV3IEFycmF5KDI1Nik7aShBKTt2YXIgST1uZXcgQXJyYXkoYSk7aShJKTt2YXIgTyxCLFIsVD1uZXcgQXJyYXkoZik7ZnVuY3Rpb24gRCh0LGUscixpLG4pe3RoaXMuc3RhdGljX3RyZWU9dCx0aGlzLmV4dHJhX2JpdHM9ZSx0aGlzLmV4dHJhX2Jhc2U9cix0aGlzLmVsZW1zPWksdGhpcy5tYXhfbGVuZ3RoPW4sdGhpcy5oYXNfc3RyZWU9dCYmdC5sZW5ndGh9ZnVuY3Rpb24gRih0LGUpe3RoaXMuZHluX3RyZWU9dCx0aGlzLm1heF9jb2RlPTAsdGhpcy5zdGF0X2Rlc2M9ZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0PDI1Nj9FW3RdOkVbMjU2Kyh0Pj4+NyldfWZ1bmN0aW9uIFUodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gUCh0LGUscil7dC5iaV92YWxpZD5jLXI/KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LFUodCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+Yy10LmJpX3ZhbGlkLHQuYmlfdmFsaWQrPXItYyk6KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LHQuYmlfdmFsaWQrPXIpfWZ1bmN0aW9uIEwodCxlLHIpe1AodCxyWzIqZV0sclsyKmUrMV0pfWZ1bmN0aW9uIGoodCxlKXtmb3IodmFyIHI9MDtyfD0xJnQsdD4+Pj0xLHI8PD0xLDA8LS1lOyk7cmV0dXJuIHI+Pj4xfWZ1bmN0aW9uIFoodCxlLHIpe3ZhciBpLG4scz1uZXcgQXJyYXkoZysxKSxhPTA7Zm9yKGk9MTtpPD1nO2krKylzW2ldPWE9YStyW2ktMV08PDE7Zm9yKG49MDtuPD1lO24rKyl7dmFyIG89dFsyKm4rMV07MCE9PW8mJih0WzIqbl09aihzW29dKyssbykpfX1mdW5jdGlvbiBXKHQpe3ZhciBlO2ZvcihlPTA7ZTxsO2UrKyl0LmR5bl9sdHJlZVsyKmVdPTA7Zm9yKGU9MDtlPGY7ZSsrKXQuZHluX2R0cmVlWzIqZV09MDtmb3IoZT0wO2U8ZDtlKyspdC5ibF90cmVlWzIqZV09MDt0LmR5bl9sdHJlZVsyKm1dPTEsdC5vcHRfbGVuPXQuc3RhdGljX2xlbj0wLHQubGFzdF9saXQ9dC5tYXRjaGVzPTB9ZnVuY3Rpb24gTSh0KXs4PHQuYmlfdmFsaWQ/VSh0LHQuYmlfYnVmKTowPHQuYmlfdmFsaWQmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT10LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gSCh0LGUscixpKXt2YXIgbj0yKmUscz0yKnI7cmV0dXJuIHRbbl08dFtzXXx8dFtuXT09PXRbc10mJmlbZV08PWlbcl19ZnVuY3Rpb24gRyh0LGUscil7Zm9yKHZhciBpPXQuaGVhcFtyXSxuPXI8PDE7bjw9dC5oZWFwX2xlbiYmKG48dC5oZWFwX2xlbiYmSChlLHQuaGVhcFtuKzFdLHQuaGVhcFtuXSx0LmRlcHRoKSYmbisrLCFIKGUsaSx0LmhlYXBbbl0sdC5kZXB0aCkpOyl0LmhlYXBbcl09dC5oZWFwW25dLHI9bixuPDw9MTt0LmhlYXBbcl09aX1mdW5jdGlvbiBLKHQsZSxyKXt2YXIgaSxuLHMsYSxvPTA7aWYoMCE9PXQubGFzdF9saXQpZm9yKDtpPXQucGVuZGluZ19idWZbdC5kX2J1ZisyKm9dPDw4fHQucGVuZGluZ19idWZbdC5kX2J1ZisyKm8rMV0sbj10LnBlbmRpbmdfYnVmW3QubF9idWYrb10sbysrLDA9PT1pP0wodCxuLGUpOihMKHQsKHM9QVtuXSkrdSsxLGUpLDAhPT0oYT13W3NdKSYmUCh0LG4tPUlbc10sYSksTCh0LHM9TigtLWkpLHIpLDAhPT0oYT1rW3NdKSYmUCh0LGktPVRbc10sYSkpLG88dC5sYXN0X2xpdDspO0wodCxtLGUpfWZ1bmN0aW9uIFkodCxlKXt2YXIgcixpLG4scz1lLmR5bl90cmVlLGE9ZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsbz1lLnN0YXRfZGVzYy5oYXNfc3RyZWUsaD1lLnN0YXRfZGVzYy5lbGVtcyx1PS0xO2Zvcih0LmhlYXBfbGVuPTAsdC5oZWFwX21heD1fLHI9MDtyPGg7cisrKTAhPT1zWzIqcl0/KHQuaGVhcFsrK3QuaGVhcF9sZW5dPXU9cix0LmRlcHRoW3JdPTApOnNbMipyKzFdPTA7Zm9yKDt0LmhlYXBfbGVuPDI7KXNbMioobj10LmhlYXBbKyt0LmhlYXBfbGVuXT11PDI/Kyt1OjApXT0xLHQuZGVwdGhbbl09MCx0Lm9wdF9sZW4tLSxvJiYodC5zdGF0aWNfbGVuLT1hWzIqbisxXSk7Zm9yKGUubWF4X2NvZGU9dSxyPXQuaGVhcF9sZW4+PjE7MTw9cjtyLS0pRyh0LHMscik7Zm9yKG49aDtyPXQuaGVhcFsxXSx0LmhlYXBbMV09dC5oZWFwW3QuaGVhcF9sZW4tLV0sRyh0LHMsMSksaT10LmhlYXBbMV0sdC5oZWFwWy0tdC5oZWFwX21heF09cix0LmhlYXBbLS10LmhlYXBfbWF4XT1pLHNbMipuXT1zWzIqcl0rc1syKmldLHQuZGVwdGhbbl09KHQuZGVwdGhbcl0+PXQuZGVwdGhbaV0/dC5kZXB0aFtyXTp0LmRlcHRoW2ldKSsxLHNbMipyKzFdPXNbMippKzFdPW4sdC5oZWFwWzFdPW4rKyxHKHQscywxKSwyPD10LmhlYXBfbGVuOyk7dC5oZWFwWy0tdC5oZWFwX21heF09dC5oZWFwWzFdLGZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxuLHMsYSxvLGg9ZS5keW5fdHJlZSx1PWUubWF4X2NvZGUsbD1lLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxmPWUuc3RhdF9kZXNjLmhhc19zdHJlZSxkPWUuc3RhdF9kZXNjLmV4dHJhX2JpdHMsYz1lLnN0YXRfZGVzYy5leHRyYV9iYXNlLHA9ZS5zdGF0X2Rlc2MubWF4X2xlbmd0aCxtPTA7Zm9yKHM9MDtzPD1nO3MrKyl0LmJsX2NvdW50W3NdPTA7Zm9yKGhbMip0LmhlYXBbdC5oZWFwX21heF0rMV09MCxyPXQuaGVhcF9tYXgrMTtyPF87cisrKXA8KHM9aFsyKmhbMiooaT10LmhlYXBbcl0pKzFdKzFdKzEpJiYocz1wLG0rKyksaFsyKmkrMV09cyx1PGl8fCh0LmJsX2NvdW50W3NdKyssYT0wLGM8PWkmJihhPWRbaS1jXSksbz1oWzIqaV0sdC5vcHRfbGVuKz1vKihzK2EpLGYmJih0LnN0YXRpY19sZW4rPW8qKGxbMippKzFdK2EpKSk7aWYoMCE9PW0pe2Rve2ZvcihzPXAtMTswPT09dC5ibF9jb3VudFtzXTspcy0tO3QuYmxfY291bnRbc10tLSx0LmJsX2NvdW50W3MrMV0rPTIsdC5ibF9jb3VudFtwXS0tLG0tPTJ9d2hpbGUoMDxtKTtmb3Iocz1wOzAhPT1zO3MtLSlmb3IoaT10LmJsX2NvdW50W3NdOzAhPT1pOyl1PChuPXQuaGVhcFstLXJdKXx8KGhbMipuKzFdIT09cyYmKHQub3B0X2xlbis9KHMtaFsyKm4rMV0pKmhbMipuXSxoWzIqbisxXT1zKSxpLS0pfX0odCxlKSxaKHMsdSx0LmJsX2NvdW50KX1mdW5jdGlvbiBYKHQsZSxyKXt2YXIgaSxuLHM9LTEsYT1lWzFdLG89MCxoPTcsdT00O2ZvcigwPT09YSYmKGg9MTM4LHU9MyksZVsyKihyKzEpKzFdPTY1NTM1LGk9MDtpPD1yO2krKyluPWEsYT1lWzIqKGkrMSkrMV0sKytvPGgmJm49PT1hfHwobzx1P3QuYmxfdHJlZVsyKm5dKz1vOjAhPT1uPyhuIT09cyYmdC5ibF90cmVlWzIqbl0rKyx0LmJsX3RyZWVbMipiXSsrKTpvPD0xMD90LmJsX3RyZWVbMip2XSsrOnQuYmxfdHJlZVsyKnldKysscz1uLHU9KG89MCk9PT1hPyhoPTEzOCwzKTpuPT09YT8oaD02LDMpOihoPTcsNCkpfWZ1bmN0aW9uIFYodCxlLHIpe3ZhciBpLG4scz0tMSxhPWVbMV0sbz0wLGg9Nyx1PTQ7Zm9yKDA9PT1hJiYoaD0xMzgsdT0zKSxpPTA7aTw9cjtpKyspaWYobj1hLGE9ZVsyKihpKzEpKzFdLCEoKytvPGgmJm49PT1hKSl7aWYobzx1KWZvcig7TCh0LG4sdC5ibF90cmVlKSwwIT0tLW87KTtlbHNlIDAhPT1uPyhuIT09cyYmKEwodCxuLHQuYmxfdHJlZSksby0tKSxMKHQsYix0LmJsX3RyZWUpLFAodCxvLTMsMikpOm88PTEwPyhMKHQsdix0LmJsX3RyZWUpLFAodCxvLTMsMykpOihMKHQseSx0LmJsX3RyZWUpLFAodCxvLTExLDcpKTtzPW4sdT0obz0wKT09PWE/KGg9MTM4LDMpOm49PT1hPyhoPTYsMyk6KGg9Nyw0KX19aShUKTt2YXIgcT0hMTtmdW5jdGlvbiBKKHQsZSxyLGkpe1AodCwoczw8MSkrKGk/MTowKSwzKSxmdW5jdGlvbih0LGUscixpKXtNKHQpLGkmJihVKHQsciksVSh0LH5yKSksbi5hcnJheVNldCh0LnBlbmRpbmdfYnVmLHQud2luZG93LGUscix0LnBlbmRpbmcpLHQucGVuZGluZys9cn0odCxlLHIsITApfXIuX3RyX2luaXQ9ZnVuY3Rpb24odCl7cXx8KGZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksbixzPW5ldyBBcnJheShnKzEpO2ZvcihpPXI9MDtpPGEtMTtpKyspZm9yKElbaV09cix0PTA7dDwxPDx3W2ldO3QrKylBW3IrK109aTtmb3IoQVtyLTFdPWksaT1uPTA7aTwxNjtpKyspZm9yKFRbaV09bix0PTA7dDwxPDxrW2ldO3QrKylFW24rK109aTtmb3Iobj4+PTc7aTxmO2krKylmb3IoVFtpXT1uPDw3LHQ9MDt0PDE8PGtbaV0tNzt0KyspRVsyNTYrbisrXT1pO2ZvcihlPTA7ZTw9ZztlKyspc1tlXT0wO2Zvcih0PTA7dDw9MTQzOyl6WzIqdCsxXT04LHQrKyxzWzhdKys7Zm9yKDt0PD0yNTU7KXpbMip0KzFdPTksdCsrLHNbOV0rKztmb3IoO3Q8PTI3OTspelsyKnQrMV09Nyx0Kyssc1s3XSsrO2Zvcig7dDw9Mjg3Oyl6WzIqdCsxXT04LHQrKyxzWzhdKys7Zm9yKFooeixsKzEscyksdD0wO3Q8Zjt0KyspQ1syKnQrMV09NSxDWzIqdF09aih0LDUpO089bmV3IEQoeix3LHUrMSxsLGcpLEI9bmV3IEQoQyxrLDAsZixnKSxSPW5ldyBEKG5ldyBBcnJheSgwKSx4LDAsZCxwKX0oKSxxPSEwKSx0LmxfZGVzYz1uZXcgRih0LmR5bl9sdHJlZSxPKSx0LmRfZGVzYz1uZXcgRih0LmR5bl9kdHJlZSxCKSx0LmJsX2Rlc2M9bmV3IEYodC5ibF90cmVlLFIpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wLFcodCl9LHIuX3RyX3N0b3JlZF9ibG9jaz1KLHIuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBuLHMsYT0wOzA8dC5sZXZlbD8oMj09PXQuc3RybS5kYXRhX3R5cGUmJih0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9NDA5MzYyNDQ0Nztmb3IoZT0wO2U8PTMxO2UrKyxyPj4+PTEpaWYoMSZyJiYwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gbztpZigwIT09dC5keW5fbHRyZWVbMThdfHwwIT09dC5keW5fbHRyZWVbMjBdfHwwIT09dC5keW5fbHRyZWVbMjZdKXJldHVybiBoO2ZvcihlPTMyO2U8dTtlKyspaWYoMCE9PXQuZHluX2x0cmVlWzIqZV0pcmV0dXJuIGg7cmV0dXJuIG99KHQpKSxZKHQsdC5sX2Rlc2MpLFkodCx0LmRfZGVzYyksYT1mdW5jdGlvbih0KXt2YXIgZTtmb3IoWCh0LHQuZHluX2x0cmVlLHQubF9kZXNjLm1heF9jb2RlKSxYKHQsdC5keW5fZHRyZWUsdC5kX2Rlc2MubWF4X2NvZGUpLFkodCx0LmJsX2Rlc2MpLGU9ZC0xOzM8PWUmJjA9PT10LmJsX3RyZWVbMipTW2VdKzFdO2UtLSk7cmV0dXJuIHQub3B0X2xlbis9MyooZSsxKSs1KzUrNCxlfSh0KSxuPXQub3B0X2xlbiszKzc+Pj4zLChzPXQuc3RhdGljX2xlbiszKzc+Pj4zKTw9biYmKG49cykpOm49cz1yKzUscis0PD1uJiYtMSE9PWU/Sih0LGUscixpKTo0PT09dC5zdHJhdGVneXx8cz09PW4/KFAodCwyKyhpPzE6MCksMyksSyh0LHosQykpOihQKHQsNCsoaT8xOjApLDMpLGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBuO2ZvcihQKHQsZS0yNTcsNSksUCh0LHItMSw1KSxQKHQsaS00LDQpLG49MDtuPGk7bisrKVAodCx0LmJsX3RyZWVbMipTW25dKzFdLDMpO1YodCx0LmR5bl9sdHJlZSxlLTEpLFYodCx0LmR5bl9kdHJlZSxyLTEpfSh0LHQubF9kZXNjLm1heF9jb2RlKzEsdC5kX2Rlc2MubWF4X2NvZGUrMSxhKzEpLEsodCx0LmR5bl9sdHJlZSx0LmR5bl9kdHJlZSkpLFcodCksaSYmTSh0KX0sci5fdHJfdGFsbHk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnBlbmRpbmdfYnVmW3QuZF9idWYrMip0Lmxhc3RfbGl0XT1lPj4+OCYyNTUsdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdCsxXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QubF9idWYrdC5sYXN0X2xpdF09MjU1JnIsdC5sYXN0X2xpdCsrLDA9PT1lP3QuZHluX2x0cmVlWzIqcl0rKzoodC5tYXRjaGVzKyssZS0tLHQuZHluX2x0cmVlWzIqKEFbcl0rdSsxKV0rKyx0LmR5bl9kdHJlZVsyKk4oZSldKyspLHQubGFzdF9saXQ9PT10LmxpdF9idWZzaXplLTF9LHIuX3RyX2FsaWduPWZ1bmN0aW9uKHQpe1AodCwyLDMpLEwodCxtLHopLGZ1bmN0aW9uKHQpezE2PT09dC5iaV92YWxpZD8oVSh0LHQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MCk6ODw9dC5iaV92YWxpZCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPTI1NSZ0LmJpX2J1Zix0LmJpX2J1Zj4+PTgsdC5iaV92YWxpZC09OCl9KHQpfX0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDF9XSw1MzpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz1cIlwiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XSw1NDpbZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UuZXhwb3J0cz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBzZXRJbW1lZGlhdGU/c2V0SW1tZWRpYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9W10uc2xpY2UuYXBwbHkoYXJndW1lbnRzKTt0LnNwbGljZSgxLDAsMCksc2V0VGltZW91dC5hcHBseShudWxsLHQpfX0se31dfSx7fSxbMTBdKSgxMCl9KTtcbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9LHJlcXVpcmUoXCJidWZmZXJcIikuQnVmZmVyKVxufSx7XCJidWZmZXJcIjo4M31dLDg5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZShcIi4vbGliL3BhcnNlclwiKS5QYXJzZXI7XG5leHBvcnRzLnJ1bGVzID0gcmVxdWlyZShcIi4vbGliL3J1bGVzXCIpO1xuZXhwb3J0cy5lcnJvcnMgPSByZXF1aXJlKFwiLi9saWIvZXJyb3JzXCIpO1xuZXhwb3J0cy5yZXN1bHRzID0gcmVxdWlyZShcIi4vbGliL3BhcnNpbmctcmVzdWx0c1wiKTtcbmV4cG9ydHMuU3RyaW5nU291cmNlID0gcmVxdWlyZShcIi4vbGliL1N0cmluZ1NvdXJjZVwiKTtcbmV4cG9ydHMuVG9rZW4gPSByZXF1aXJlKFwiLi9saWIvVG9rZW5cIik7XG5leHBvcnRzLmJvdHRvbVVwID0gcmVxdWlyZShcIi4vbGliL2JvdHRvbS11cFwiKTtcbmV4cG9ydHMuUmVnZXhUb2tlbmlzZXIgPSByZXF1aXJlKFwiLi9saWIvcmVnZXgtdG9rZW5pc2VyXCIpLlJlZ2V4VG9rZW5pc2VyO1xuXG5leHBvcnRzLnJ1bGUgPSBmdW5jdGlvbihydWxlQnVpbGRlcikge1xuICAgIHZhciBydWxlO1xuICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGUgPSBydWxlQnVpbGRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlKGlucHV0KTtcbiAgICB9O1xufTtcblxufSx7XCIuL2xpYi9TdHJpbmdTb3VyY2VcIjo5MCxcIi4vbGliL1Rva2VuXCI6OTEsXCIuL2xpYi9ib3R0b20tdXBcIjo5MyxcIi4vbGliL2Vycm9yc1wiOjk0LFwiLi9saWIvcGFyc2VyXCI6OTYsXCIuL2xpYi9wYXJzaW5nLXJlc3VsdHNcIjo5NyxcIi4vbGliL3JlZ2V4LXRva2VuaXNlclwiOjk4LFwiLi9saWIvcnVsZXNcIjo5OX1dLDkwOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciB1dGlsID0gcmVxdWlyZShcInV0aWxcIik7XG5cbnZhciBTdHJpbmdTb3VyY2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHN0cmluZywgZGVzY3JpcHRpb24pIHtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgYXNTdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgfSxcbiAgICAgICAgcmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1NvdXJjZVJhbmdlKHN0cmluZywgZGVzY3JpcHRpb24sIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNlbGY7XG59O1xuXG52YXIgU3RyaW5nU291cmNlUmFuZ2UgPSBmdW5jdGlvbihzdHJpbmcsIGRlc2NyaXB0aW9uLCBzdGFydEluZGV4LCBlbmRJbmRleCkge1xuICAgIHRoaXMuX3N0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHRoaXMuX3N0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgIHRoaXMuX2VuZEluZGV4ID0gZW5kSW5kZXg7XG59O1xuXG5TdHJpbmdTb3VyY2VSYW5nZS5wcm90b3R5cGUudG8gPSBmdW5jdGlvbihvdGhlclJhbmdlKSB7XG4gICAgLy8gVE9ETzogQXNzZXJ0IHRoYXQgdG9rZW5zIGFyZSB0aGUgc2FtZSBhY3Jvc3MgYm90aCBpdGVyYXRvcnNcbiAgICByZXR1cm4gbmV3IFN0cmluZ1NvdXJjZVJhbmdlKHRoaXMuX3N0cmluZywgdGhpcy5fZGVzY3JpcHRpb24sIHRoaXMuX3N0YXJ0SW5kZXgsIG90aGVyUmFuZ2UuX2VuZEluZGV4KTtcbn07XG5cblN0cmluZ1NvdXJjZVJhbmdlLnByb3RvdHlwZS5kZXNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwb3NpdGlvbiA9IHRoaXMuX3Bvc2l0aW9uKCk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gdGhpcy5fZGVzY3JpcHRpb24gPyB0aGlzLl9kZXNjcmlwdGlvbiArIFwiXFxuXCIgOiBcIlwiO1xuICAgIHJldHVybiB1dGlsLmZvcm1hdChcIiVzTGluZSBudW1iZXI6ICVzXFxuQ2hhcmFjdGVyIG51bWJlcjogJXNcIixcbiAgICAgICAgZGVzY3JpcHRpb24sIHBvc2l0aW9uLmxpbmVOdW1iZXIsIHBvc2l0aW9uLmNoYXJhY3Rlck51bWJlcik7XG59O1xuXG5TdHJpbmdTb3VyY2VSYW5nZS5wcm90b3R5cGUubGluZU51bWJlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbigpLmxpbmVOdW1iZXI7XG59O1xuXG5TdHJpbmdTb3VyY2VSYW5nZS5wcm90b3R5cGUuY2hhcmFjdGVyTnVtYmVyID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uKCkuY2hhcmFjdGVyTnVtYmVyO1xufTtcblxuU3RyaW5nU291cmNlUmFuZ2UucHJvdG90eXBlLl9wb3NpdGlvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBuZXh0TmV3TGluZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2VsZi5fc3RyaW5nLmluZGV4T2YoXCJcXG5cIiwgaW5kZXgpO1xuICAgIH07XG4gICAgXG4gICAgdmFyIGxpbmVOdW1iZXIgPSAxO1xuICAgIHdoaWxlIChuZXh0TmV3TGluZSgpICE9PSAtMSAmJiBuZXh0TmV3TGluZSgpIDwgdGhpcy5fc3RhcnRJbmRleCkge1xuICAgICAgICBpbmRleCA9IG5leHROZXdMaW5lKCkgKyAxO1xuICAgICAgICBsaW5lTnVtYmVyICs9IDE7XG4gICAgfVxuICAgIHZhciBjaGFyYWN0ZXJOdW1iZXIgPSB0aGlzLl9zdGFydEluZGV4IC0gaW5kZXggKyAxO1xuICAgIHJldHVybiB7bGluZU51bWJlcjogbGluZU51bWJlciwgY2hhcmFjdGVyTnVtYmVyOiBjaGFyYWN0ZXJOdW1iZXJ9O1xufTtcblxufSx7XCJ1dGlsXCI6MTA1fV0sOTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgc291cmNlKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG59O1xuXG59LHt9XSw5MjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgVG9rZW5JdGVyYXRvciA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24odG9rZW5zLCBzdGFydEluZGV4KSB7XG4gICAgdGhpcy5fdG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMuX3N0YXJ0SW5kZXggPSBzdGFydEluZGV4IHx8IDA7XG59O1xuXG5Ub2tlbkl0ZXJhdG9yLnByb3RvdHlwZS5oZWFkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2Vuc1t0aGlzLl9zdGFydEluZGV4XTtcbn07XG5cblRva2VuSXRlcmF0b3IucHJvdG90eXBlLnRhaWwgPSBmdW5jdGlvbihzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbkl0ZXJhdG9yKHRoaXMuX3Rva2VucywgdGhpcy5fc3RhcnRJbmRleCArIDEpO1xufTtcblxuVG9rZW5JdGVyYXRvci5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90b2tlbnMuc2xpY2UodGhpcy5fc3RhcnRJbmRleCk7XG59O1xuXG5Ub2tlbkl0ZXJhdG9yLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5zW3RoaXMuX3Rva2Vucy5sZW5ndGggLSAxXTtcbn07XG5cbi8vIFRPRE86IGRvZXNuJ3QgbmVlZCB0byBiZSBhIG1ldGhvZCwgY2FuIGJlIGEgc2VwYXJhdGUgZnVuY3Rpb24sXG4vLyB3aGljaCBzaW1wbGlmaWVzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUb2tlbkl0ZXJhdG9yIGludGVyZmFjZVxuVG9rZW5JdGVyYXRvci5wcm90b3R5cGUudG8gPSBmdW5jdGlvbihlbmQpIHtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLmhlYWQoKS5zb3VyY2U7XG4gICAgdmFyIGVuZFRva2VuID0gZW5kLmhlYWQoKSB8fCBlbmQuZW5kKCk7XG4gICAgcmV0dXJuIHN0YXJ0LnRvKGVuZFRva2VuLnNvdXJjZSk7XG59O1xuXG59LHt9XSw5MzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgcnVsZXMgPSByZXF1aXJlKFwiLi9ydWxlc1wiKTtcbnZhciByZXN1bHRzID0gcmVxdWlyZShcIi4vcGFyc2luZy1yZXN1bHRzXCIpO1xuXG5leHBvcnRzLnBhcnNlciA9IGZ1bmN0aW9uKG5hbWUsIHByZWZpeFJ1bGVzLCBpbmZpeFJ1bGVCdWlsZGVycykge1xuICAgIHZhciBzZWxmID0ge1xuICAgICAgICBydWxlOiBydWxlLFxuICAgICAgICBsZWZ0QXNzb2NpYXRpdmU6IGxlZnRBc3NvY2lhdGl2ZSxcbiAgICAgICAgcmlnaHRBc3NvY2lhdGl2ZTogcmlnaHRBc3NvY2lhdGl2ZVxuICAgIH07XG4gICAgXG4gICAgdmFyIGluZml4UnVsZXMgPSBuZXcgSW5maXhSdWxlcyhpbmZpeFJ1bGVCdWlsZGVycy5tYXAoY3JlYXRlSW5maXhSdWxlKSk7XG4gICAgdmFyIHByZWZpeFJ1bGUgPSBydWxlcy5maXJzdE9mKG5hbWUsIHByZWZpeFJ1bGVzKTtcbiAgICBcbiAgICBmdW5jdGlvbiBjcmVhdGVJbmZpeFJ1bGUoaW5maXhSdWxlQnVpbGRlcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogaW5maXhSdWxlQnVpbGRlci5uYW1lLFxuICAgICAgICAgICAgcnVsZTogbGF6eVJ1bGUoaW5maXhSdWxlQnVpbGRlci5ydWxlQnVpbGRlci5iaW5kKG51bGwsIHNlbGYpKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBydWxlKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUnVsZShpbmZpeFJ1bGVzKTtcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gbGVmdEFzc29jaWF0aXZlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJ1bGUoaW5maXhSdWxlcy51bnRpbEV4Y2x1c2l2ZShuYW1lKSk7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIHJpZ2h0QXNzb2NpYXRpdmUobmFtZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUnVsZShpbmZpeFJ1bGVzLnVudGlsSW5jbHVzaXZlKG5hbWUpKTtcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gY3JlYXRlUnVsZShpbmZpeFJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBhcHBseS5iaW5kKG51bGwsIGluZml4UnVsZXMpO1xuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBhcHBseShpbmZpeFJ1bGVzLCB0b2tlbnMpIHtcbiAgICAgICAgdmFyIGxlZnRSZXN1bHQgPSBwcmVmaXhSdWxlKHRva2Vucyk7XG4gICAgICAgIGlmIChsZWZ0UmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5maXhSdWxlcy5hcHBseShsZWZ0UmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0UmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzZWxmO1xufTtcblxuZnVuY3Rpb24gSW5maXhSdWxlcyhpbmZpeFJ1bGVzKSB7XG4gICAgZnVuY3Rpb24gdW50aWxFeGNsdXNpdmUobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEluZml4UnVsZXMoaW5maXhSdWxlcy5zbGljZSgwLCBydWxlTmFtZXMoKS5pbmRleE9mKG5hbWUpKSk7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIHVudGlsSW5jbHVzaXZlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbmZpeFJ1bGVzKGluZml4UnVsZXMuc2xpY2UoMCwgcnVsZU5hbWVzKCkuaW5kZXhPZihuYW1lKSArIDEpKTtcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gcnVsZU5hbWVzKCkge1xuICAgICAgICByZXR1cm4gaW5maXhSdWxlcy5tYXAoZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGUubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGFwcGx5KGxlZnRSZXN1bHQpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgIHZhciBzb3VyY2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBjdXJyZW50UmVzdWx0ID0gYXBwbHlUb1Rva2VucyhsZWZ0UmVzdWx0LnJlbWFpbmluZygpKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgc291cmNlID0gbGVmdFJlc3VsdC5zb3VyY2UoKS50byhjdXJyZW50UmVzdWx0LnNvdXJjZSgpKTtcbiAgICAgICAgICAgICAgICBsZWZ0UmVzdWx0ID0gcmVzdWx0cy5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0LnZhbHVlKCkobGVmdFJlc3VsdC52YWx1ZSgpLCBzb3VyY2UpLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0LnJlbWFpbmluZygpLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdFJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRSZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gYXBwbHlUb1Rva2Vucyh0b2tlbnMpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGVzLmZpcnN0T2YoXCJpbmZpeFwiLCBpbmZpeFJ1bGVzLm1hcChmdW5jdGlvbihpbmZpeCkge1xuICAgICAgICAgICAgcmV0dXJuIGluZml4LnJ1bGU7XG4gICAgICAgIH0pKSh0b2tlbnMpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgICBhcHBseTogYXBwbHksXG4gICAgICAgIHVudGlsRXhjbHVzaXZlOiB1bnRpbEV4Y2x1c2l2ZSxcbiAgICAgICAgdW50aWxJbmNsdXNpdmU6IHVudGlsSW5jbHVzaXZlXG4gICAgfVxufVxuXG5leHBvcnRzLmluZml4ID0gZnVuY3Rpb24obmFtZSwgcnVsZUJ1aWxkZXIpIHtcbiAgICBmdW5jdGlvbiBtYXAoZnVuYykge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5pbmZpeChuYW1lLCBmdW5jdGlvbihwYXJzZXIpIHtcbiAgICAgICAgICAgIHZhciBydWxlID0gcnVsZUJ1aWxkZXIocGFyc2VyKTtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbih0b2tlbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcnVsZSh0b2tlbnMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQubWFwKGZ1bmN0aW9uKHJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihsZWZ0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKGxlZnQsIHJpZ2h0LCBzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHJ1bGVCdWlsZGVyOiBydWxlQnVpbGRlcixcbiAgICAgICAgbWFwOiBtYXBcbiAgICB9O1xufVxuXG4vLyBUT0RPOiBtb3ZlIGludG8gYSBzZW5zaWJsZSBwbGFjZSBhbmQgcmVtb3ZlIGR1cGxpY2F0aW9uXG52YXIgbGF6eVJ1bGUgPSBmdW5jdGlvbihydWxlQnVpbGRlcikge1xuICAgIHZhciBydWxlO1xuICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgIHJ1bGUgPSBydWxlQnVpbGRlcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBydWxlKGlucHV0KTtcbiAgICB9O1xufTtcblxufSx7XCIuL3BhcnNpbmctcmVzdWx0c1wiOjk3LFwiLi9ydWxlc1wiOjk5fV0sOTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuZXhwb3J0cy5lcnJvciA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IEVycm9yKG9wdGlvbnMpO1xufTtcblxudmFyIEVycm9yID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHRoaXMuZXhwZWN0ZWQgPSBvcHRpb25zLmV4cGVjdGVkO1xuICAgIHRoaXMuYWN0dWFsID0gb3B0aW9ucy5hY3R1YWw7XG4gICAgdGhpcy5fbG9jYXRpb24gPSBvcHRpb25zLmxvY2F0aW9uO1xufTtcblxuRXJyb3IucHJvdG90eXBlLmRlc2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxvY2F0aW9uRGVzY3JpcHRpb24gPSB0aGlzLl9sb2NhdGlvbiA/IHRoaXMuX2xvY2F0aW9uLmRlc2NyaWJlKCkgKyBcIjpcXG5cIiA6IFwiXCI7XG4gICAgcmV0dXJuIGxvY2F0aW9uRGVzY3JpcHRpb24gKyBcIkV4cGVjdGVkIFwiICsgdGhpcy5leHBlY3RlZCArIFwiXFxuYnV0IGdvdCBcIiArIHRoaXMuYWN0dWFsO1xufTtcblxuRXJyb3IucHJvdG90eXBlLmxpbmVOdW1iZXIgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYXRpb24ubGluZU51bWJlcigpO1xufTtcblxuRXJyb3IucHJvdG90eXBlLmNoYXJhY3Rlck51bWJlciA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2NhdGlvbi5jaGFyYWN0ZXJOdW1iZXIoKTtcbn07XG5cbn0se31dLDk1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBmcm9tQXJyYXkgPSBleHBvcnRzLmZyb21BcnJheSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaGFzTmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaW5kZXggPCBhcnJheS5sZW5ndGg7XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IExhenlJdGVyYXRvcih7XG4gICAgICAgIGhhc05leHQ6IGhhc05leHQsXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFoYXNOZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtb3JlIGVsZW1lbnRzXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlbaW5kZXgrK107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbnZhciBMYXp5SXRlcmF0b3IgPSBmdW5jdGlvbihpdGVyYXRvcikge1xuICAgIHRoaXMuX2l0ZXJhdG9yID0gaXRlcmF0b3I7XG59O1xuXG5MYXp5SXRlcmF0b3IucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyYXRvcjtcbiAgICByZXR1cm4gbmV3IExhenlJdGVyYXRvcih7XG4gICAgICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLmhhc05leHQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYyhpdGVyYXRvci5uZXh0KCkpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG5MYXp5SXRlcmF0b3IucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uKGNvbmRpdGlvbikge1xuICAgIHZhciBpdGVyYXRvciA9IHRoaXMuX2l0ZXJhdG9yO1xuICAgIFxuICAgIHZhciBtb3ZlZCA9IGZhbHNlO1xuICAgIHZhciBoYXNOZXh0ID0gZmFsc2U7XG4gICAgdmFyIG5leHQ7XG4gICAgdmFyIG1vdmVJZk5lY2Vzc2FyeSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAobW92ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtb3ZlZCA9IHRydWU7XG4gICAgICAgIGhhc05leHQgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKGl0ZXJhdG9yLmhhc05leHQoKSAmJiAhaGFzTmV4dCkge1xuICAgICAgICAgICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIGhhc05leHQgPSBjb25kaXRpb24obmV4dCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIHJldHVybiBuZXcgTGF6eUl0ZXJhdG9yKHtcbiAgICAgICAgaGFzTmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBtb3ZlSWZOZWNlc3NhcnkoKTtcbiAgICAgICAgICAgIHJldHVybiBoYXNOZXh0O1xuICAgICAgICB9LFxuICAgICAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIG1vdmVJZk5lY2Vzc2FyeSgpO1xuICAgICAgICAgICAgdmFyIHRvUmV0dXJuID0gbmV4dDtcbiAgICAgICAgICAgIG1vdmVkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbkxhenlJdGVyYXRvci5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyYXRvcjtcbiAgICBpZiAodGhpcy5faXRlcmF0b3IuaGFzTmV4dCgpKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvci5uZXh0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuTGF6eUl0ZXJhdG9yLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHdoaWxlICh0aGlzLl9pdGVyYXRvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGhpcy5faXRlcmF0b3IubmV4dCgpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbn0se31dLDk2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbnZhciBUb2tlbkl0ZXJhdG9yID0gcmVxdWlyZShcIi4vVG9rZW5JdGVyYXRvclwiKTtcblxuZXhwb3J0cy5QYXJzZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgdmFyIHBhcnNlVG9rZW5zID0gZnVuY3Rpb24ocGFyc2VyLCB0b2tlbnMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlcihuZXcgVG9rZW5JdGVyYXRvcih0b2tlbnMpKTtcbiAgICB9O1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHBhcnNlVG9rZW5zOiBwYXJzZVRva2Vuc1xuICAgIH07XG59O1xuXG59LHtcIi4vVG9rZW5JdGVyYXRvclwiOjkyfV0sOTc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZmFpbHVyZTogZnVuY3Rpb24oZXJyb3JzLCByZW1haW5pbmcpIHtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsdXJlIG11c3QgaGF2ZSBlcnJvcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImZhaWx1cmVcIixcbiAgICAgICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nLFxuICAgICAgICAgICAgZXJyb3JzOiBlcnJvcnNcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oZXJyb3JzLCByZW1haW5pbmcpIHtcbiAgICAgICAgaWYgKGVycm9ycy5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsdXJlIG11c3QgaGF2ZSBlcnJvcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICAgICAgc3RhdHVzOiBcImVycm9yXCIsXG4gICAgICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyxcbiAgICAgICAgICAgIGVycm9yczogZXJyb3JzXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgc3VjY2VzczogZnVuY3Rpb24odmFsdWUsIHJlbWFpbmluZywgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICAgICAgICAgIHN0YXR1czogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nLFxuICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGN1dDogZnVuY3Rpb24ocmVtYWluaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICAgICAgICAgIHN0YXR1czogXCJjdXRcIixcbiAgICAgICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nLFxuICAgICAgICAgICAgZXJyb3JzOiBbXVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHRoaXMuX3ZhbHVlID0gb3B0aW9ucy52YWx1ZTtcbiAgICB0aGlzLl9zdGF0dXMgPSBvcHRpb25zLnN0YXR1cztcbiAgICB0aGlzLl9oYXNWYWx1ZSA9IG9wdGlvbnMudmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yZW1haW5pbmcgPSBvcHRpb25zLnJlbWFpbmluZztcbiAgICB0aGlzLl9zb3VyY2UgPSBvcHRpb25zLnNvdXJjZTtcbiAgICB0aGlzLl9lcnJvcnMgPSBvcHRpb25zLmVycm9ycztcbn07XG5cblJlc3VsdC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oZnVuYykge1xuICAgIGlmICh0aGlzLl9oYXNWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdCh7XG4gICAgICAgICAgICB2YWx1ZTogZnVuYyh0aGlzLl92YWx1ZSwgdGhpcy5fc291cmNlKSxcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5fc3RhdHVzLFxuICAgICAgICAgICAgcmVtYWluaW5nOiB0aGlzLl9yZW1haW5pbmcsXG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMuX3NvdXJjZSxcbiAgICAgICAgICAgIGVycm9yczogdGhpcy5fZXJyb3JzXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5cblJlc3VsdC5wcm90b3R5cGUuY2hhbmdlUmVtYWluaW5nID0gZnVuY3Rpb24ocmVtYWluaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQoe1xuICAgICAgICB2YWx1ZTogdGhpcy5fdmFsdWUsXG4gICAgICAgIHN0YXR1czogdGhpcy5fc3RhdHVzLFxuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyxcbiAgICAgICAgc291cmNlOiB0aGlzLl9zb3VyY2UsXG4gICAgICAgIGVycm9yczogdGhpcy5fZXJyb3JzXG4gICAgfSk7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLmlzU3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMgPT09IFwic3VjY2Vzc1wiIHx8IHRoaXMuX3N0YXR1cyA9PT0gXCJjdXRcIjtcbn07XG5cblJlc3VsdC5wcm90b3R5cGUuaXNGYWlsdXJlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cyA9PT0gXCJmYWlsdXJlXCI7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLmlzRXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzID09PSBcImVycm9yXCI7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLmlzQ3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cyA9PT0gXCJjdXRcIjtcbn07XG5cblJlc3VsdC5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLnJlbWFpbmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9yZW1haW5pbmc7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLnNvdXJjZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG59O1xuXG5SZXN1bHQucHJvdG90eXBlLmVycm9ycyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lcnJvcnM7XG59O1xuXG59LHt9XSw5ODpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG52YXIgVG9rZW4gPSByZXF1aXJlKFwiLi9Ub2tlblwiKTtcbnZhciBTdHJpbmdTb3VyY2UgPSByZXF1aXJlKFwiLi9TdHJpbmdTb3VyY2VcIik7XG5cbmV4cG9ydHMuUmVnZXhUb2tlbmlzZXIgPSBSZWdleFRva2VuaXNlcjtcblxuZnVuY3Rpb24gUmVnZXhUb2tlbmlzZXIocnVsZXMpIHtcbiAgICBydWxlcyA9IHJ1bGVzLm1hcChmdW5jdGlvbihydWxlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBydWxlLm5hbWUsXG4gICAgICAgICAgICByZWdleDogbmV3IFJlZ0V4cChydWxlLnJlZ2V4LnNvdXJjZSwgXCJnXCIpXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgXG4gICAgZnVuY3Rpb24gdG9rZW5pc2UoaW5wdXQsIGRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSBuZXcgU3RyaW5nU291cmNlKGlucHV0LCBkZXNjcmlwdGlvbik7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICBcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZE5leHRUb2tlbihpbnB1dCwgaW5kZXgsIHNvdXJjZSk7XG4gICAgICAgICAgICBpbmRleCA9IHJlc3VsdC5lbmRJbmRleDtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHJlc3VsdC50b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHRva2Vucy5wdXNoKGVuZFRva2VuKGlucHV0LCBzb3VyY2UpKTtcbiAgICAgICAgcmV0dXJuIHRva2VucztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkTmV4dFRva2VuKHN0cmluZywgc3RhcnRJbmRleCwgc291cmNlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciByZWdleCA9IHJ1bGVzW2ldLnJlZ2V4O1xuICAgICAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSByZWdleC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcmVzdWx0WzBdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmluZGV4ID09PSBzdGFydEluZGV4ICYmIGVuZEluZGV4ID4gc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHRbMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IG5ldyBUb2tlbihcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5yYW5nZShzdGFydEluZGV4LCBlbmRJbmRleClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt0b2tlbjogdG9rZW4sIGVuZEluZGV4OiBlbmRJbmRleH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyAxO1xuICAgICAgICB2YXIgdG9rZW4gPSBuZXcgVG9rZW4oXG4gICAgICAgICAgICBcInVucmVjb2duaXNlZENoYXJhY3RlclwiLFxuICAgICAgICAgICAgc3RyaW5nLnN1YnN0cmluZyhzdGFydEluZGV4LCBlbmRJbmRleCksXG4gICAgICAgICAgICBzb3VyY2UucmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7dG9rZW46IHRva2VuLCBlbmRJbmRleDogZW5kSW5kZXh9O1xuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBlbmRUb2tlbihpbnB1dCwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVG9rZW4oXG4gICAgICAgICAgICBcImVuZFwiLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHNvdXJjZS5yYW5nZShpbnB1dC5sZW5ndGgsIGlucHV0Lmxlbmd0aClcbiAgICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW5pc2U6IHRva2VuaXNlXG4gICAgfVxufVxuXG5cblxufSx7XCIuL1N0cmluZ1NvdXJjZVwiOjkwLFwiLi9Ub2tlblwiOjkxfV0sOTk6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xudmFyIF8gPSByZXF1aXJlKFwidW5kZXJzY29yZVwiKTtcbnZhciBvcHRpb25zID0gcmVxdWlyZShcIm9wdGlvblwiKTtcbnZhciByZXN1bHRzID0gcmVxdWlyZShcIi4vcGFyc2luZy1yZXN1bHRzXCIpO1xudmFyIGVycm9ycyA9IHJlcXVpcmUoXCIuL2Vycm9yc1wiKTtcbnZhciBsYXp5SXRlcmF0b3JzID0gcmVxdWlyZShcIi4vbGF6eS1pdGVyYXRvcnNcIik7XG5cbmV4cG9ydHMudG9rZW4gPSBmdW5jdGlvbih0b2tlblR5cGUsIHZhbHVlKSB7XG4gICAgdmFyIG1hdGNoVmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgdG9rZW4gPSBpbnB1dC5oZWFkKCk7XG4gICAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi5uYW1lID09PSB0b2tlblR5cGUgJiYgKCFtYXRjaFZhbHVlIHx8IHRva2VuLnZhbHVlID09PSB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzLnN1Y2Nlc3ModG9rZW4udmFsdWUsIGlucHV0LnRhaWwoKSwgdG9rZW4uc291cmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGRlc2NyaWJlVG9rZW4oe25hbWU6IHRva2VuVHlwZSwgdmFsdWU6IHZhbHVlfSk7XG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVUb2tlbk1pc21hdGNoKGlucHV0LCBleHBlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0cy50b2tlbk9mVHlwZSA9IGZ1bmN0aW9uKHRva2VuVHlwZSkge1xuICAgIHJldHVybiBleHBvcnRzLnRva2VuKHRva2VuVHlwZSk7XG59O1xuXG5leHBvcnRzLmZpcnN0T2YgPSBmdW5jdGlvbihuYW1lLCBwYXJzZXJzKSB7XG4gICAgaWYgKCFfLmlzQXJyYXkocGFyc2VycykpIHtcbiAgICAgICAgcGFyc2VycyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gbGF6eUl0ZXJhdG9yc1xuICAgICAgICAgICAgLmZyb21BcnJheShwYXJzZXJzKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbihwYXJzZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyKGlucHV0KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXNTdWNjZXNzKCkgfHwgcmVzdWx0LmlzRXJyb3IoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlyc3QoKSB8fCBkZXNjcmliZVRva2VuTWlzbWF0Y2goaW5wdXQsIG5hbWUpO1xuICAgIH07XG59O1xuXG5leHBvcnRzLnRoZW4gPSBmdW5jdGlvbihwYXJzZXIsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHBhcnNlcihpbnB1dCk7XG4gICAgICAgIGlmICghcmVzdWx0Lm1hcCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcChmdW5jKTtcbiAgICB9O1xufTtcblxuZXhwb3J0cy5zZXF1ZW5jZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXJzZXJzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICB2YXIgcnVsZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBfLmZvbGRsKHBhcnNlcnMsIGZ1bmN0aW9uKG1lbW8sIHBhcnNlcikge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IG1lbW8ucmVzdWx0O1xuICAgICAgICAgICAgdmFyIGhhc0N1dCA9IG1lbW8uaGFzQ3V0O1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBoYXNDdXQ6IGhhc0N1dH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgc3ViUmVzdWx0ID0gcGFyc2VyKHJlc3VsdC5yZW1haW5pbmcoKSk7XG4gICAgICAgICAgICBpZiAoc3ViUmVzdWx0LmlzQ3V0KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge3Jlc3VsdDogcmVzdWx0LCBoYXNDdXQ6IHRydWV9O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzO1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZXIuaXNDYXB0dXJlZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSByZXN1bHQudmFsdWUoKS53aXRoVmFsdWUocGFyc2VyLCBzdWJSZXN1bHQudmFsdWUoKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gcmVzdWx0LnZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZW1haW5pbmcgPSBzdWJSZXN1bHQucmVtYWluaW5nKCk7XG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGlucHV0LnRvKHJlbWFpbmluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXN1bHRzLnN1Y2Nlc3ModmFsdWVzLCByZW1haW5pbmcsIHNvdXJjZSksXG4gICAgICAgICAgICAgICAgICAgIGhhc0N1dDogaGFzQ3V0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ3V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtyZXN1bHQ6IHJlc3VsdHMuZXJyb3Ioc3ViUmVzdWx0LmVycm9ycygpLCBzdWJSZXN1bHQucmVtYWluaW5nKCkpLCBoYXNDdXQ6IGhhc0N1dH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB7cmVzdWx0OiBzdWJSZXN1bHQsIGhhc0N1dDogaGFzQ3V0fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge3Jlc3VsdDogcmVzdWx0cy5zdWNjZXNzKG5ldyBTZXF1ZW5jZVZhbHVlcygpLCBpbnB1dCksIGhhc0N1dDogZmFsc2V9KS5yZXN1bHQ7XG4gICAgICAgIHZhciBzb3VyY2UgPSBpbnB1dC50byhyZXN1bHQucmVtYWluaW5nKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcChmdW5jdGlvbih2YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMud2l0aFZhbHVlKGV4cG9ydHMuc2VxdWVuY2Uuc291cmNlLCBzb3VyY2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJ1bGUuaGVhZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmlyc3RDYXB0dXJlID0gXy5maW5kKHBhcnNlcnMsIGlzQ2FwdHVyZWRSdWxlKTtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMudGhlbihcbiAgICAgICAgICAgIHJ1bGUsXG4gICAgICAgICAgICBleHBvcnRzLnNlcXVlbmNlLmV4dHJhY3QoZmlyc3RDYXB0dXJlKVxuICAgICAgICApO1xuICAgIH07XG4gICAgcnVsZS5tYXAgPSBmdW5jdGlvbihmdW5jKSB7XG4gICAgICAgIHJldHVybiBleHBvcnRzLnRoZW4oXG4gICAgICAgICAgICBydWxlLFxuICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgcmVzdWx0LnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfTtcbiAgICBcbiAgICBmdW5jdGlvbiBpc0NhcHR1cmVkUnVsZShzdWJSdWxlKSB7XG4gICAgICAgIHJldHVybiBzdWJSdWxlLmlzQ2FwdHVyZWQ7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBydWxlO1xufTtcblxudmFyIFNlcXVlbmNlVmFsdWVzID0gZnVuY3Rpb24odmFsdWVzLCB2YWx1ZXNBcnJheSkge1xuICAgIHRoaXMuX3ZhbHVlcyA9IHZhbHVlcyB8fCB7fTtcbiAgICB0aGlzLl92YWx1ZXNBcnJheSA9IHZhbHVlc0FycmF5IHx8IFtdO1xufTtcblxuU2VxdWVuY2VWYWx1ZXMucHJvdG90eXBlLndpdGhWYWx1ZSA9IGZ1bmN0aW9uKHJ1bGUsIHZhbHVlKSB7XG4gICAgaWYgKHJ1bGUuY2FwdHVyZU5hbWUgJiYgcnVsZS5jYXB0dXJlTmFtZSBpbiB0aGlzLl92YWx1ZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGFkZCBzZWNvbmQgdmFsdWUgZm9yIGNhcHR1cmUgXFxcIlwiICsgcnVsZS5jYXB0dXJlTmFtZSArIFwiXFxcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbmV3VmFsdWVzID0gXy5jbG9uZSh0aGlzLl92YWx1ZXMpO1xuICAgICAgICBuZXdWYWx1ZXNbcnVsZS5jYXB0dXJlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlc0FycmF5ID0gdGhpcy5fdmFsdWVzQXJyYXkuY29uY2F0KFt2YWx1ZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFNlcXVlbmNlVmFsdWVzKG5ld1ZhbHVlcywgbmV3VmFsdWVzQXJyYXkpO1xuICAgIH1cbn07XG5cblNlcXVlbmNlVmFsdWVzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihydWxlKSB7XG4gICAgaWYgKHJ1bGUuY2FwdHVyZU5hbWUgaW4gdGhpcy5fdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNbcnVsZS5jYXB0dXJlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmFsdWUgZm9yIGNhcHR1cmUgXFxcIlwiICsgcnVsZS5jYXB0dXJlTmFtZSArIFwiXFxcIlwiKTtcbiAgICB9XG59O1xuXG5TZXF1ZW5jZVZhbHVlcy5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXNBcnJheTtcbn07XG5cbmV4cG9ydHMuc2VxdWVuY2UuY2FwdHVyZSA9IGZ1bmN0aW9uKHJ1bGUsIG5hbWUpIHtcbiAgICB2YXIgY2FwdHVyZVJ1bGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIGNhcHR1cmVSdWxlLmNhcHR1cmVOYW1lID0gbmFtZTtcbiAgICBjYXB0dXJlUnVsZS5pc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gY2FwdHVyZVJ1bGU7XG59O1xuXG5leHBvcnRzLnNlcXVlbmNlLmV4dHJhY3QgPSBmdW5jdGlvbihydWxlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmdldChydWxlKTtcbiAgICB9O1xufTtcblxuZXhwb3J0cy5zZXF1ZW5jZS5hcHBseVZhbHVlcyA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAvLyBUT0RPOiBjaGVjayBjYXB0dXJlTmFtZSBkb2Vzbid0IGNvbmZsaWN0IHdpdGggc291cmNlIG9yIG90aGVyIGNhcHR1cmVzXG4gICAgdmFyIHJ1bGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBydWxlcy5tYXAoZnVuY3Rpb24ocnVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5nZXQocnVsZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzLCB2YWx1ZXMpO1xuICAgIH07XG59O1xuXG5leHBvcnRzLnNlcXVlbmNlLnNvdXJjZSA9IHtcbiAgICBjYXB0dXJlTmFtZTogXCLimINzb3VyY2XimINcIlxufTtcblxuZXhwb3J0cy5zZXF1ZW5jZS5jdXQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuY3V0KGlucHV0KTtcbiAgICB9O1xufTtcblxuZXhwb3J0cy5vcHRpb25hbCA9IGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJ1bGUoaW5wdXQpO1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0Lm1hcChvcHRpb25zLnNvbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMuc3VjY2VzcyhvcHRpb25zLm5vbmUsIGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0cy56ZXJvT3JNb3JlV2l0aFNlcGFyYXRvciA9IGZ1bmN0aW9uKHJ1bGUsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiByZXBlYXRlZFdpdGhTZXBhcmF0b3IocnVsZSwgc2VwYXJhdG9yLCBmYWxzZSk7XG59O1xuXG5leHBvcnRzLm9uZU9yTW9yZVdpdGhTZXBhcmF0b3IgPSBmdW5jdGlvbihydWxlLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gcmVwZWF0ZWRXaXRoU2VwYXJhdG9yKHJ1bGUsIHNlcGFyYXRvciwgdHJ1ZSk7XG59O1xuXG52YXIgemVyb09yTW9yZSA9IGV4cG9ydHMuemVyb09yTW9yZSA9IGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB3aGlsZSAoKHJlc3VsdCA9IHJ1bGUoaW5wdXQpKSAmJiByZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcmVzdWx0LnJlbWFpbmluZygpO1xuICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0LnZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnJvcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMuc3VjY2Vzcyh2YWx1ZXMsIGlucHV0KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnRzLm9uZU9yTW9yZSA9IGZ1bmN0aW9uKHJ1bGUpIHtcbiAgICByZXR1cm4gZXhwb3J0cy5vbmVPck1vcmVXaXRoU2VwYXJhdG9yKHJ1bGUsIG5vT3BSdWxlKTtcbn07XG5cbmZ1bmN0aW9uIG5vT3BSdWxlKGlucHV0KSB7XG4gICAgcmV0dXJuIHJlc3VsdHMuc3VjY2VzcyhudWxsLCBpbnB1dCk7XG59XG5cbnZhciByZXBlYXRlZFdpdGhTZXBhcmF0b3IgPSBmdW5jdGlvbihydWxlLCBzZXBhcmF0b3IsIGlzT25lT3JNb3JlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBydWxlKGlucHV0KTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xuICAgICAgICAgICAgdmFyIG1haW5SdWxlID0gZXhwb3J0cy5zZXF1ZW5jZS5jYXB0dXJlKHJ1bGUsIFwibWFpblwiKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdSdWxlID0gemVyb09yTW9yZShleHBvcnRzLnRoZW4oXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zZXF1ZW5jZShzZXBhcmF0b3IsIG1haW5SdWxlKSxcbiAgICAgICAgICAgICAgICBleHBvcnRzLnNlcXVlbmNlLmV4dHJhY3QobWFpblJ1bGUpXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHZhciByZW1haW5pbmdSZXN1bHQgPSByZW1haW5pbmdSdWxlKHJlc3VsdC5yZW1haW5pbmcoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5zdWNjZXNzKFtyZXN1bHQudmFsdWUoKV0uY29uY2F0KHJlbWFpbmluZ1Jlc3VsdC52YWx1ZSgpKSwgcmVtYWluaW5nUmVzdWx0LnJlbWFpbmluZygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09uZU9yTW9yZSB8fCByZXN1bHQuaXNFcnJvcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMuc3VjY2VzcyhbXSwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydHMubGVmdEFzc29jaWF0aXZlID0gZnVuY3Rpb24obGVmdFJ1bGUsIHJpZ2h0UnVsZSwgZnVuYykge1xuICAgIHZhciByaWdodHM7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgcmlnaHRzID0gW3tmdW5jOiBmdW5jLCBydWxlOiByaWdodFJ1bGV9XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByaWdodHMgPSByaWdodFJ1bGU7XG4gICAgfVxuICAgIHJpZ2h0cyA9IHJpZ2h0cy5tYXAoZnVuY3Rpb24ocmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMudGhlbihyaWdodC5ydWxlLCBmdW5jdGlvbihyaWdodFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obGVmdFZhbHVlLCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmlnaHQuZnVuYyhsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUsIHNvdXJjZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICB2YXIgcmVwZWF0ZWRSdWxlID0gZXhwb3J0cy5maXJzdE9mLmFwcGx5KG51bGwsIFtcInJ1bGVzXCJdLmNvbmNhdChyaWdodHMpKTtcbiAgICBcbiAgICByZXR1cm4gZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHN0YXJ0ID0gaW5wdXQ7XG4gICAgICAgIHZhciBsZWZ0UmVzdWx0ID0gbGVmdFJ1bGUoaW5wdXQpO1xuICAgICAgICBpZiAoIWxlZnRSZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXBlYXRlZFJlc3VsdCA9IHJlcGVhdGVkUnVsZShsZWZ0UmVzdWx0LnJlbWFpbmluZygpKTtcbiAgICAgICAgd2hpbGUgKHJlcGVhdGVkUmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gcmVwZWF0ZWRSZXN1bHQucmVtYWluaW5nKCk7XG4gICAgICAgICAgICB2YXIgc291cmNlID0gc3RhcnQudG8ocmVwZWF0ZWRSZXN1bHQucmVtYWluaW5nKCkpO1xuICAgICAgICAgICAgdmFyIHJpZ2h0ID0gcmVwZWF0ZWRSZXN1bHQudmFsdWUoKTtcbiAgICAgICAgICAgIGxlZnRSZXN1bHQgPSByZXN1bHRzLnN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgcmlnaHQobGVmdFJlc3VsdC52YWx1ZSgpLCBzb3VyY2UpLFxuICAgICAgICAgICAgICAgIHJlbWFpbmluZyxcbiAgICAgICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXBlYXRlZFJlc3VsdCA9IHJlcGVhdGVkUnVsZShsZWZ0UmVzdWx0LnJlbWFpbmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwZWF0ZWRSZXN1bHQuaXNFcnJvcigpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVwZWF0ZWRSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxlZnRSZXN1bHQ7XG4gICAgfTtcbn07XG5cbmV4cG9ydHMubGVmdEFzc29jaWF0aXZlLmZpcnN0T2YgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbn07XG5cbmV4cG9ydHMubm9uQ29uc3VtaW5nID0gZnVuY3Rpb24ocnVsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gcnVsZShpbnB1dCkuY2hhbmdlUmVtYWluaW5nKGlucHV0KTtcbiAgICB9O1xufTtcblxudmFyIGRlc2NyaWJlVG9rZW4gPSBmdW5jdGlvbih0b2tlbikge1xuICAgIGlmICh0b2tlbi52YWx1ZSkge1xuICAgICAgICByZXR1cm4gdG9rZW4ubmFtZSArIFwiIFxcXCJcIiArIHRva2VuLnZhbHVlICsgXCJcXFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuLm5hbWU7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gZGVzY3JpYmVUb2tlbk1pc21hdGNoKGlucHV0LCBleHBlY3RlZCkge1xuICAgIHZhciBlcnJvcjtcbiAgICB2YXIgdG9rZW4gPSBpbnB1dC5oZWFkKCk7XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICAgIGVycm9yID0gZXJyb3JzLmVycm9yKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCxcbiAgICAgICAgICAgIGFjdHVhbDogZGVzY3JpYmVUb2tlbih0b2tlbiksXG4gICAgICAgICAgICBsb2NhdGlvbjogdG9rZW4uc291cmNlXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yID0gZXJyb3JzLmVycm9yKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZCxcbiAgICAgICAgICAgIGFjdHVhbDogXCJlbmQgb2YgdG9rZW5zXCJcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzLmZhaWx1cmUoW2Vycm9yXSwgaW5wdXQpO1xufVxuXG59LHtcIi4vZXJyb3JzXCI6OTQsXCIuL2xhenktaXRlcmF0b3JzXCI6OTUsXCIuL3BhcnNpbmctcmVzdWx0c1wiOjk3LFwib3B0aW9uXCI6MTAwLFwidW5kZXJzY29yZVwiOjEwMn1dLDEwMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5leHBvcnRzLm5vbmUgPSBPYmplY3QuY3JlYXRlKHtcbiAgICB2YWx1ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbGVkIHZhbHVlIG9uIG5vbmUnKTtcbiAgICB9LFxuICAgIGlzTm9uZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaXNTb21lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubm9uZTtcbiAgICB9LFxuICAgIGZsYXRNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ub25lO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubm9uZTtcbiAgICB9LFxuICAgIHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBvckVsc2U6IGNhbGxPclJldHVybixcbiAgICB2YWx1ZU9yRWxzZTogY2FsbE9yUmV0dXJuXG59KTtcblxuZnVuY3Rpb24gY2FsbE9yUmV0dXJuKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZih2YWx1ZSkgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59XG5cbmV4cG9ydHMuc29tZSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBTb21lKHZhbHVlKTtcbn07XG5cbnZhciBTb21lID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xufTtcblxuU29tZS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG59O1xuXG5Tb21lLnByb3RvdHlwZS5pc05vbmUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5Tb21lLnByb3RvdHlwZS5pc1NvbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblNvbWUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICByZXR1cm4gbmV3IFNvbWUoZnVuYyh0aGlzLl92YWx1ZSkpO1xufTtcblxuU29tZS5wcm90b3R5cGUuZmxhdE1hcCA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuYyh0aGlzLl92YWx1ZSk7XG59O1xuXG5Tb21lLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gcHJlZGljYXRlKHRoaXMuX3ZhbHVlKSA/IHRoaXMgOiBleHBvcnRzLm5vbmU7XG59O1xuXG5Tb21lLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFt0aGlzLl92YWx1ZV07XG59O1xuXG5Tb21lLnByb3RvdHlwZS5vckVsc2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzO1xufTtcblxuU29tZS5wcm90b3R5cGUudmFsdWVPckVsc2UgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbn07XG5cbmV4cG9ydHMuaXNPcHRpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gZXhwb3J0cy5ub25lIHx8IHZhbHVlIGluc3RhbmNlb2YgU29tZTtcbn07XG5cbmV4cG9ydHMuZnJvbU51bGxhYmxlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZXhwb3J0cy5ub25lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFNvbWUodmFsdWUpO1xufVxuXG59LHt9XSwxMDE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxufSx7fV0sMTAyOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbihmdW5jdGlvbiAoZ2xvYmFsKXtcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKCd1bmRlcnNjb3JlJywgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBjdXJyZW50ID0gZ2xvYmFsLl87XG4gICAgdmFyIGV4cG9ydHMgPSBnbG9iYWwuXyA9IGZhY3RvcnkoKTtcbiAgICBleHBvcnRzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7IGdsb2JhbC5fID0gY3VycmVudDsgcmV0dXJuIGV4cG9ydHM7IH07XG4gIH0oKSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkge1xuICAvLyAgICAgVW5kZXJzY29yZS5qcyAxLjEzLjFcbiAgLy8gICAgIGh0dHBzOi8vdW5kZXJzY29yZWpzLm9yZ1xuICAvLyAgICAgKGMpIDIwMDktMjAyMSBKZXJlbXkgQXNoa2VuYXMsIEp1bGlhbiBHb25nZ3JpanAsIGFuZCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAgLy8gICAgIFVuZGVyc2NvcmUgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG5cbiAgLy8gQ3VycmVudCB2ZXJzaW9uLlxuICB2YXIgVkVSU0lPTiA9ICcxLjEzLjEnO1xuXG4gIC8vIEVzdGFibGlzaCB0aGUgcm9vdCBvYmplY3QsIGB3aW5kb3dgIChgc2VsZmApIGluIHRoZSBicm93c2VyLCBgZ2xvYmFsYFxuICAvLyBvbiB0aGUgc2VydmVyLCBvciBgdGhpc2AgaW4gc29tZSB2aXJ0dWFsIG1hY2hpbmVzLiBXZSB1c2UgYHNlbGZgXG4gIC8vIGluc3RlYWQgb2YgYHdpbmRvd2AgZm9yIGBXZWJXb3JrZXJgIHN1cHBvcnQuXG4gIHZhciByb290ID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZi5zZWxmID09PSBzZWxmICYmIHNlbGYgfHxcbiAgICAgICAgICAgIHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsLmdsb2JhbCA9PT0gZ2xvYmFsICYmIGdsb2JhbCB8fFxuICAgICAgICAgICAgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKSB8fFxuICAgICAgICAgICAge307XG5cbiAgLy8gU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjpcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGUsIE9ialByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIFN5bWJvbFByb3RvID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgPyBTeW1ib2wucHJvdG90eXBlIDogbnVsbDtcblxuICAvLyBDcmVhdGUgcXVpY2sgcmVmZXJlbmNlIHZhcmlhYmxlcyBmb3Igc3BlZWQgYWNjZXNzIHRvIGNvcmUgcHJvdG90eXBlcy5cbiAgdmFyIHB1c2ggPSBBcnJheVByb3RvLnB1c2gsXG4gICAgICBzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UsXG4gICAgICB0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nLFxuICAgICAgaGFzT3duUHJvcGVydHkgPSBPYmpQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuICAvLyBNb2Rlcm4gZmVhdHVyZSBkZXRlY3Rpb24uXG4gIHZhciBzdXBwb3J0c0FycmF5QnVmZmVyID0gdHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyxcbiAgICAgIHN1cHBvcnRzRGF0YVZpZXcgPSB0eXBlb2YgRGF0YVZpZXcgIT09ICd1bmRlZmluZWQnO1xuXG4gIC8vIEFsbCAqKkVDTUFTY3JpcHQgNSsqKiBuYXRpdmUgZnVuY3Rpb24gaW1wbGVtZW50YXRpb25zIHRoYXQgd2UgaG9wZSB0byB1c2VcbiAgLy8gYXJlIGRlY2xhcmVkIGhlcmUuXG4gIHZhciBuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIG5hdGl2ZUtleXMgPSBPYmplY3Qua2V5cyxcbiAgICAgIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdC5jcmVhdGUsXG4gICAgICBuYXRpdmVJc1ZpZXcgPSBzdXBwb3J0c0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldztcblxuICAvLyBDcmVhdGUgcmVmZXJlbmNlcyB0byB0aGVzZSBidWlsdGluIGZ1bmN0aW9ucyBiZWNhdXNlIHdlIG92ZXJyaWRlIHRoZW0uXG4gIHZhciBfaXNOYU4gPSBpc05hTixcbiAgICAgIF9pc0Zpbml0ZSA9IGlzRmluaXRlO1xuXG4gIC8vIEtleXMgaW4gSUUgPCA5IHRoYXQgd29uJ3QgYmUgaXRlcmF0ZWQgYnkgYGZvciBrZXkgaW4gLi4uYCBhbmQgdGh1cyBtaXNzZWQuXG4gIHZhciBoYXNFbnVtQnVnID0gIXt0b1N0cmluZzogbnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoJ3RvU3RyaW5nJyk7XG4gIHZhciBub25FbnVtZXJhYmxlUHJvcHMgPSBbJ3ZhbHVlT2YnLCAnaXNQcm90b3R5cGVPZicsICd0b1N0cmluZycsXG4gICAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJ2hhc093blByb3BlcnR5JywgJ3RvTG9jYWxlU3RyaW5nJ107XG5cbiAgLy8gVGhlIGxhcmdlc3QgaW50ZWdlciB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LlxuICB2YXIgTUFYX0FSUkFZX0lOREVYID0gTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuICAvLyBTb21lIGZ1bmN0aW9ucyB0YWtlIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgb3IgYSBmZXcgZXhwZWN0ZWRcbiAgLy8gYXJndW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgYW5kIHRoZW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgdmFsdWVzIHRvIG9wZXJhdGVcbiAgLy8gb24uIFRoaXMgaGVscGVyIGFjY3VtdWxhdGVzIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIHBhc3QgdGhlIGZ1bmN0aW9u4oCZc1xuICAvLyBhcmd1bWVudCBsZW5ndGggKG9yIGFuIGV4cGxpY2l0IGBzdGFydEluZGV4YCksIGludG8gYW4gYXJyYXkgdGhhdCBiZWNvbWVzXG4gIC8vIHRoZSBsYXN0IGFyZ3VtZW50LiBTaW1pbGFyIHRvIEVTNuKAmXMgXCJyZXN0IHBhcmFtZXRlclwiLlxuICBmdW5jdGlvbiByZXN0QXJndW1lbnRzKGZ1bmMsIHN0YXJ0SW5kZXgpIHtcbiAgICBzdGFydEluZGV4ID0gc3RhcnRJbmRleCA9PSBudWxsID8gZnVuYy5sZW5ndGggLSAxIDogK3N0YXJ0SW5kZXg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KGFyZ3VtZW50cy5sZW5ndGggLSBzdGFydEluZGV4LCAwKSxcbiAgICAgICAgICByZXN0ID0gQXJyYXkobGVuZ3RoKSxcbiAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXggKyBzdGFydEluZGV4XTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoc3RhcnRJbmRleCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpcywgcmVzdCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzLCBhcmd1bWVudHNbMF0sIHJlc3QpO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpcywgYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIHJlc3QpO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBBcnJheShzdGFydEluZGV4ICsgMSk7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGFydEluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFyZ3Nbc3RhcnRJbmRleF0gPSByZXN0O1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFyaWFibGUgYW4gb2JqZWN0P1xuICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgcmV0dXJuIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZSA9PT0gJ29iamVjdCcgJiYgISFvYmo7XG4gIH1cblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/XG4gIGZ1bmN0aW9uIGlzTnVsbChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YXJpYWJsZSB1bmRlZmluZWQ/XG4gIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICAgIHJldHVybiBvYmogPT09IHZvaWQgMDtcbiAgfVxuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSBib29sZWFuP1xuICBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gdHJ1ZSB8fCBvYmogPT09IGZhbHNlIHx8IHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiB2YWx1ZSBhIERPTSBlbGVtZW50P1xuICBmdW5jdGlvbiBpc0VsZW1lbnQob2JqKSB7XG4gICAgcmV0dXJuICEhKG9iaiAmJiBvYmoubm9kZVR5cGUgPT09IDEpO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgYHRvU3RyaW5nYC1iYXNlZCB0eXBlIHRlc3Rlci5cbiAgZnVuY3Rpb24gdGFnVGVzdGVyKG5hbWUpIHtcbiAgICB2YXIgdGFnID0gJ1tvYmplY3QgJyArIG5hbWUgKyAnXSc7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwob2JqKSA9PT0gdGFnO1xuICAgIH07XG4gIH1cblxuICB2YXIgaXNTdHJpbmcgPSB0YWdUZXN0ZXIoJ1N0cmluZycpO1xuXG4gIHZhciBpc051bWJlciA9IHRhZ1Rlc3RlcignTnVtYmVyJyk7XG5cbiAgdmFyIGlzRGF0ZSA9IHRhZ1Rlc3RlcignRGF0ZScpO1xuXG4gIHZhciBpc1JlZ0V4cCA9IHRhZ1Rlc3RlcignUmVnRXhwJyk7XG5cbiAgdmFyIGlzRXJyb3IgPSB0YWdUZXN0ZXIoJ0Vycm9yJyk7XG5cbiAgdmFyIGlzU3ltYm9sID0gdGFnVGVzdGVyKCdTeW1ib2wnKTtcblxuICB2YXIgaXNBcnJheUJ1ZmZlciA9IHRhZ1Rlc3RlcignQXJyYXlCdWZmZXInKTtcblxuICB2YXIgaXNGdW5jdGlvbiA9IHRhZ1Rlc3RlcignRnVuY3Rpb24nKTtcblxuICAvLyBPcHRpbWl6ZSBgaXNGdW5jdGlvbmAgaWYgYXBwcm9wcmlhdGUuIFdvcmsgYXJvdW5kIHNvbWUgYHR5cGVvZmAgYnVncyBpbiBvbGRcbiAgLy8gdjgsIElFIDExICgjMTYyMSksIFNhZmFyaSA4ICgjMTkyOSksIGFuZCBQaGFudG9tSlMgKCMyMjM2KS5cbiAgdmFyIG5vZGVsaXN0ID0gcm9vdC5kb2N1bWVudCAmJiByb290LmRvY3VtZW50LmNoaWxkTm9kZXM7XG4gIGlmICh0eXBlb2YgLy4vICE9ICdmdW5jdGlvbicgJiYgdHlwZW9mIEludDhBcnJheSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygbm9kZWxpc3QgIT0gJ2Z1bmN0aW9uJykge1xuICAgIGlzRnVuY3Rpb24gPSBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpc0Z1bmN0aW9uJDEgPSBpc0Z1bmN0aW9uO1xuXG4gIHZhciBoYXNPYmplY3RUYWcgPSB0YWdUZXN0ZXIoJ09iamVjdCcpO1xuXG4gIC8vIEluIElFIDEwIC0gRWRnZSAxMywgYERhdGFWaWV3YCBoYXMgc3RyaW5nIHRhZyBgJ1tvYmplY3QgT2JqZWN0XSdgLlxuICAvLyBJbiBJRSAxMSwgdGhlIG1vc3QgY29tbW9uIGFtb25nIHRoZW0sIHRoaXMgcHJvYmxlbSBhbHNvIGFwcGxpZXMgdG9cbiAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAuXG4gIHZhciBoYXNTdHJpbmdUYWdCdWcgPSAoXG4gICAgICAgIHN1cHBvcnRzRGF0YVZpZXcgJiYgaGFzT2JqZWN0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoOCkpKVxuICAgICAgKSxcbiAgICAgIGlzSUUxMSA9ICh0eXBlb2YgTWFwICE9PSAndW5kZWZpbmVkJyAmJiBoYXNPYmplY3RUYWcobmV3IE1hcCkpO1xuXG4gIHZhciBpc0RhdGFWaWV3ID0gdGFnVGVzdGVyKCdEYXRhVmlldycpO1xuXG4gIC8vIEluIElFIDEwIC0gRWRnZSAxMywgd2UgbmVlZCBhIGRpZmZlcmVudCBoZXVyaXN0aWNcbiAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgYERhdGFWaWV3YC5cbiAgZnVuY3Rpb24gaWUxMElzRGF0YVZpZXcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGlzRnVuY3Rpb24kMShvYmouZ2V0SW50OCkgJiYgaXNBcnJheUJ1ZmZlcihvYmouYnVmZmVyKTtcbiAgfVxuXG4gIHZhciBpc0RhdGFWaWV3JDEgPSAoaGFzU3RyaW5nVGFnQnVnID8gaWUxMElzRGF0YVZpZXcgOiBpc0RhdGFWaWV3KTtcblxuICAvLyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5P1xuICAvLyBEZWxlZ2F0ZXMgdG8gRUNNQTUncyBuYXRpdmUgYEFycmF5LmlzQXJyYXlgLlxuICB2YXIgaXNBcnJheSA9IG5hdGl2ZUlzQXJyYXkgfHwgdGFnVGVzdGVyKCdBcnJheScpO1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgYGtleWAgaXMgYW4gb3duIHByb3BlcnR5IG5hbWUgb2YgYG9iamAuXG4gIGZ1bmN0aW9uIGhhcyQxKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIG9iaiAhPSBudWxsICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xuICB9XG5cbiAgdmFyIGlzQXJndW1lbnRzID0gdGFnVGVzdGVyKCdBcmd1bWVudHMnKTtcblxuICAvLyBEZWZpbmUgYSBmYWxsYmFjayB2ZXJzaW9uIG9mIHRoZSBtZXRob2QgaW4gYnJvd3NlcnMgKGFoZW0sIElFIDwgOSksIHdoZXJlXG4gIC8vIHRoZXJlIGlzbid0IGFueSBpbnNwZWN0YWJsZSBcIkFyZ3VtZW50c1wiIHR5cGUuXG4gIChmdW5jdGlvbigpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGFyZ3VtZW50cykpIHtcbiAgICAgIGlzQXJndW1lbnRzID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBoYXMkMShvYmosICdjYWxsZWUnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KCkpO1xuXG4gIHZhciBpc0FyZ3VtZW50cyQxID0gaXNBcmd1bWVudHM7XG5cbiAgLy8gSXMgYSBnaXZlbiBvYmplY3QgYSBmaW5pdGUgbnVtYmVyP1xuICBmdW5jdGlvbiBpc0Zpbml0ZSQxKG9iaikge1xuICAgIHJldHVybiAhaXNTeW1ib2wob2JqKSAmJiBfaXNGaW5pdGUob2JqKSAmJiAhaXNOYU4ocGFyc2VGbG9hdChvYmopKTtcbiAgfVxuXG4gIC8vIElzIHRoZSBnaXZlbiB2YWx1ZSBgTmFOYD9cbiAgZnVuY3Rpb24gaXNOYU4kMShvYmopIHtcbiAgICByZXR1cm4gaXNOdW1iZXIob2JqKSAmJiBfaXNOYU4ob2JqKTtcbiAgfVxuXG4gIC8vIFByZWRpY2F0ZS1nZW5lcmF0aW5nIGZ1bmN0aW9uLiBPZnRlbiB1c2VmdWwgb3V0c2lkZSBvZiBVbmRlcnNjb3JlLlxuICBmdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQ29tbW9uIGludGVybmFsIGxvZ2ljIGZvciBgaXNBcnJheUxpa2VgIGFuZCBgaXNCdWZmZXJMaWtlYC5cbiAgZnVuY3Rpb24gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0U2l6ZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24pIHtcbiAgICAgIHZhciBzaXplUHJvcGVydHkgPSBnZXRTaXplUHJvcGVydHkoY29sbGVjdGlvbik7XG4gICAgICByZXR1cm4gdHlwZW9mIHNpemVQcm9wZXJ0eSA9PSAnbnVtYmVyJyAmJiBzaXplUHJvcGVydHkgPj0gMCAmJiBzaXplUHJvcGVydHkgPD0gTUFYX0FSUkFZX0lOREVYO1xuICAgIH1cbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHRvIG9idGFpbiBwcm9wZXJ0eSBga2V5YCBmcm9tIGBvYmpgLlxuICBmdW5jdGlvbiBzaGFsbG93UHJvcGVydHkoa2V5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG9iaikge1xuICAgICAgcmV0dXJuIG9iaiA9PSBudWxsID8gdm9pZCAwIDogb2JqW2tleV07XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGhlbHBlciB0byBvYnRhaW4gdGhlIGBieXRlTGVuZ3RoYCBwcm9wZXJ0eSBvZiBhbiBvYmplY3QuXG4gIHZhciBnZXRCeXRlTGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdieXRlTGVuZ3RoJyk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBzcGVuZCBleHRlbnNpdmUgY2hlY2tzIGFnYWluc3RcbiAgLy8gYEFycmF5QnVmZmVyYCBldCBhbC5cbiAgdmFyIGlzQnVmZmVyTGlrZSA9IGNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrKGdldEJ5dGVMZW5ndGgpO1xuXG4gIC8vIElzIGEgZ2l2ZW4gdmFsdWUgYSB0eXBlZCBhcnJheT9cbiAgdmFyIHR5cGVkQXJyYXlQYXR0ZXJuID0gL1xcW29iamVjdCAoKEl8VWkpbnQoOHwxNnwzMil8RmxvYXQoMzJ8NjQpfFVpbnQ4Q2xhbXBlZHxCaWcoSXxVaSludDY0KUFycmF5XFxdLztcbiAgZnVuY3Rpb24gaXNUeXBlZEFycmF5KG9iaikge1xuICAgIC8vIGBBcnJheUJ1ZmZlci5pc1ZpZXdgIGlzIHRoZSBtb3N0IGZ1dHVyZS1wcm9vZiwgc28gdXNlIGl0IHdoZW4gYXZhaWxhYmxlLlxuICAgIC8vIE90aGVyd2lzZSwgZmFsbCBiYWNrIG9uIHRoZSBhYm92ZSByZWd1bGFyIGV4cHJlc3Npb24uXG4gICAgcmV0dXJuIG5hdGl2ZUlzVmlldyA/IChuYXRpdmVJc1ZpZXcob2JqKSAmJiAhaXNEYXRhVmlldyQxKG9iaikpIDpcbiAgICAgICAgICAgICAgICAgIGlzQnVmZmVyTGlrZShvYmopICYmIHR5cGVkQXJyYXlQYXR0ZXJuLnRlc3QodG9TdHJpbmcuY2FsbChvYmopKTtcbiAgfVxuXG4gIHZhciBpc1R5cGVkQXJyYXkkMSA9IHN1cHBvcnRzQXJyYXlCdWZmZXIgPyBpc1R5cGVkQXJyYXkgOiBjb25zdGFudChmYWxzZSk7XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIG9idGFpbiB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYW4gb2JqZWN0LlxuICB2YXIgZ2V0TGVuZ3RoID0gc2hhbGxvd1Byb3BlcnR5KCdsZW5ndGgnKTtcblxuICAvLyBJbnRlcm5hbCBoZWxwZXIgdG8gY3JlYXRlIGEgc2ltcGxlIGxvb2t1cCBzdHJ1Y3R1cmUuXG4gIC8vIGBjb2xsZWN0Tm9uRW51bVByb3BzYCB1c2VkIHRvIGRlcGVuZCBvbiBgXy5jb250YWluc2AsIGJ1dCB0aGlzIGxlZCB0b1xuICAvLyBjaXJjdWxhciBpbXBvcnRzLiBgZW11bGF0ZWRTZXRgIGlzIGEgb25lLW9mZiBzb2x1dGlvbiB0aGF0IG9ubHkgd29ya3MgZm9yXG4gIC8vIGFycmF5cyBvZiBzdHJpbmdzLlxuICBmdW5jdGlvbiBlbXVsYXRlZFNldChrZXlzKSB7XG4gICAgdmFyIGhhc2ggPSB7fTtcbiAgICBmb3IgKHZhciBsID0ga2V5cy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgKytpKSBoYXNoW2tleXNbaV1dID0gdHJ1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbnM6IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaGFzaFtrZXldOyB9LFxuICAgICAgcHVzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIGhhc2hba2V5XSA9IHRydWU7XG4gICAgICAgIHJldHVybiBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyLiBDaGVja3MgYGtleXNgIGZvciB0aGUgcHJlc2VuY2Ugb2Yga2V5cyBpbiBJRSA8IDkgdGhhdCB3b24ndFxuICAvLyBiZSBpdGVyYXRlZCBieSBgZm9yIGtleSBpbiAuLi5gIGFuZCB0aHVzIG1pc3NlZC4gRXh0ZW5kcyBga2V5c2AgaW4gcGxhY2UgaWZcbiAgLy8gbmVlZGVkLlxuICBmdW5jdGlvbiBjb2xsZWN0Tm9uRW51bVByb3BzKG9iaiwga2V5cykge1xuICAgIGtleXMgPSBlbXVsYXRlZFNldChrZXlzKTtcbiAgICB2YXIgbm9uRW51bUlkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGg7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgIHZhciBwcm90byA9IGlzRnVuY3Rpb24kMShjb25zdHJ1Y3RvcikgJiYgY29uc3RydWN0b3IucHJvdG90eXBlIHx8IE9ialByb3RvO1xuXG4gICAgLy8gQ29uc3RydWN0b3IgaXMgYSBzcGVjaWFsIGNhc2UuXG4gICAgdmFyIHByb3AgPSAnY29uc3RydWN0b3InO1xuICAgIGlmIChoYXMkMShvYmosIHByb3ApICYmICFrZXlzLmNvbnRhaW5zKHByb3ApKSBrZXlzLnB1c2gocHJvcCk7XG5cbiAgICB3aGlsZSAobm9uRW51bUlkeC0tKSB7XG4gICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25vbkVudW1JZHhdO1xuICAgICAgaWYgKHByb3AgaW4gb2JqICYmIG9ialtwcm9wXSAhPT0gcHJvdG9bcHJvcF0gJiYgIWtleXMuY29udGFpbnMocHJvcCkpIHtcbiAgICAgICAga2V5cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHJpZXZlIHRoZSBuYW1lcyBvZiBhbiBvYmplY3QncyBvd24gcHJvcGVydGllcy5cbiAgLy8gRGVsZWdhdGVzIHRvICoqRUNNQVNjcmlwdCA1KioncyBuYXRpdmUgYE9iamVjdC5rZXlzYC5cbiAgZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICBpZiAoIWlzT2JqZWN0KG9iaikpIHJldHVybiBbXTtcbiAgICBpZiAobmF0aXZlS2V5cykgcmV0dXJuIG5hdGl2ZUtleXMob2JqKTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChoYXMkMShvYmosIGtleSkpIGtleXMucHVzaChrZXkpO1xuICAgIC8vIEFoZW0sIElFIDwgOS5cbiAgICBpZiAoaGFzRW51bUJ1ZykgY29sbGVjdE5vbkVudW1Qcm9wcyhvYmosIGtleXMpO1xuICAgIHJldHVybiBrZXlzO1xuICB9XG5cbiAgLy8gSXMgYSBnaXZlbiBhcnJheSwgc3RyaW5nLCBvciBvYmplY3QgZW1wdHk/XG4gIC8vIEFuIFwiZW1wdHlcIiBvYmplY3QgaGFzIG5vIGVudW1lcmFibGUgb3duLXByb3BlcnRpZXMuXG4gIGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBTa2lwIHRoZSBtb3JlIGV4cGVuc2l2ZSBgdG9TdHJpbmdgLWJhc2VkIHR5cGUgY2hlY2tzIGlmIGBvYmpgIGhhcyBub1xuICAgIC8vIGAubGVuZ3RoYC5cbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG9iaik7XG4gICAgaWYgKHR5cGVvZiBsZW5ndGggPT0gJ251bWJlcicgJiYgKFxuICAgICAgaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNBcmd1bWVudHMkMShvYmopXG4gICAgKSkgcmV0dXJuIGxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gZ2V0TGVuZ3RoKGtleXMob2JqKSkgPT09IDA7XG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHNldCBvZiBga2V5OnZhbHVlYCBwYWlycy5cbiAgZnVuY3Rpb24gaXNNYXRjaChvYmplY3QsIGF0dHJzKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhhdHRycyksIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHJldHVybiAhbGVuZ3RoO1xuICAgIHZhciBvYmogPSBPYmplY3Qob2JqZWN0KTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gX2tleXNbaV07XG4gICAgICBpZiAoYXR0cnNba2V5XSAhPT0gb2JqW2tleV0gfHwgIShrZXkgaW4gb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIElmIFVuZGVyc2NvcmUgaXMgY2FsbGVkIGFzIGEgZnVuY3Rpb24sIGl0IHJldHVybnMgYSB3cmFwcGVkIG9iamVjdCB0aGF0IGNhblxuICAvLyBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgZnVuY3Rpb25zIGFkZGVkXG4gIC8vIHRocm91Z2ggYF8ubWl4aW5gLiBXcmFwcGVkIG9iamVjdHMgbWF5IGJlIGNoYWluZWQuXG4gIGZ1bmN0aW9uIF8kMShvYmopIHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgXyQxKSByZXR1cm4gb2JqO1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBfJDEpKSByZXR1cm4gbmV3IF8kMShvYmopO1xuICAgIHRoaXMuX3dyYXBwZWQgPSBvYmo7XG4gIH1cblxuICBfJDEuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgLy8gRXh0cmFjdHMgdGhlIHJlc3VsdCBmcm9tIGEgd3JhcHBlZCBhbmQgY2hhaW5lZCBvYmplY3QuXG4gIF8kMS5wcm90b3R5cGUudmFsdWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fd3JhcHBlZDtcbiAgfTtcblxuICAvLyBQcm92aWRlIHVud3JhcHBpbmcgcHJveGllcyBmb3Igc29tZSBtZXRob2RzIHVzZWQgaW4gZW5naW5lIG9wZXJhdGlvbnNcbiAgLy8gc3VjaCBhcyBhcml0aG1ldGljIGFuZCBKU09OIHN0cmluZ2lmaWNhdGlvbi5cbiAgXyQxLnByb3RvdHlwZS52YWx1ZU9mID0gXyQxLnByb3RvdHlwZS50b0pTT04gPSBfJDEucHJvdG90eXBlLnZhbHVlO1xuXG4gIF8kMS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuX3dyYXBwZWQpO1xuICB9O1xuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIHdyYXAgb3Igc2hhbGxvdy1jb3B5IGFuIEFycmF5QnVmZmVyLFxuICAvLyB0eXBlZCBhcnJheSBvciBEYXRhVmlldyB0byBhIG5ldyB2aWV3LCByZXVzaW5nIHRoZSBidWZmZXIuXG4gIGZ1bmN0aW9uIHRvQnVmZmVyVmlldyhidWZmZXJTb3VyY2UpIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoXG4gICAgICBidWZmZXJTb3VyY2UuYnVmZmVyIHx8IGJ1ZmZlclNvdXJjZSxcbiAgICAgIGJ1ZmZlclNvdXJjZS5ieXRlT2Zmc2V0IHx8IDAsXG4gICAgICBnZXRCeXRlTGVuZ3RoKGJ1ZmZlclNvdXJjZSlcbiAgICApO1xuICB9XG5cbiAgLy8gV2UgdXNlIHRoaXMgc3RyaW5nIHR3aWNlLCBzbyBnaXZlIGl0IGEgbmFtZSBmb3IgbWluaWZpY2F0aW9uLlxuICB2YXIgdGFnRGF0YVZpZXcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4gIC8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgXy5pc0VxdWFsYC5cbiAgZnVuY3Rpb24gZXEoYSwgYiwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHBzOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmVnYWwpLlxuICAgIGlmIChhID09PSBiKSByZXR1cm4gYSAhPT0gMCB8fCAxIC8gYSA9PT0gMSAvIGI7XG4gICAgLy8gYG51bGxgIG9yIGB1bmRlZmluZWRgIG9ubHkgZXF1YWwgdG8gaXRzZWxmIChzdHJpY3QgY29tcGFyaXNvbikuXG4gICAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAvLyBgTmFOYHMgYXJlIGVxdWl2YWxlbnQsIGJ1dCBub24tcmVmbGV4aXZlLlxuICAgIGlmIChhICE9PSBhKSByZXR1cm4gYiAhPT0gYjtcbiAgICAvLyBFeGhhdXN0IHByaW1pdGl2ZSBjaGVja3NcbiAgICB2YXIgdHlwZSA9IHR5cGVvZiBhO1xuICAgIGlmICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnICYmIHR5cGVvZiBiICE9ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjayk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCByZWN1cnNpdmUgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgYF8uaXNFcXVhbGAuXG4gIGZ1bmN0aW9uIGRlZXBFcShhLCBiLCBhU3RhY2ssIGJTdGFjaykge1xuICAgIC8vIFVud3JhcCBhbnkgd3JhcHBlZCBvYmplY3RzLlxuICAgIGlmIChhIGluc3RhbmNlb2YgXyQxKSBhID0gYS5fd3JhcHBlZDtcbiAgICBpZiAoYiBpbnN0YW5jZW9mIF8kMSkgYiA9IGIuX3dyYXBwZWQ7XG4gICAgLy8gQ29tcGFyZSBgW1tDbGFzc11dYCBuYW1lcy5cbiAgICB2YXIgY2xhc3NOYW1lID0gdG9TdHJpbmcuY2FsbChhKTtcbiAgICBpZiAoY2xhc3NOYW1lICE9PSB0b1N0cmluZy5jYWxsKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gV29yayBhcm91bmQgYSBidWcgaW4gSUUgMTAgLSBFZGdlIDEzLlxuICAgIGlmIChoYXNTdHJpbmdUYWdCdWcgJiYgY2xhc3NOYW1lID09ICdbb2JqZWN0IE9iamVjdF0nICYmIGlzRGF0YVZpZXckMShhKSkge1xuICAgICAgaWYgKCFpc0RhdGFWaWV3JDEoYikpIHJldHVybiBmYWxzZTtcbiAgICAgIGNsYXNzTmFtZSA9IHRhZ0RhdGFWaWV3O1xuICAgIH1cbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgLy8gVGhlc2UgdHlwZXMgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlLlxuICAgICAgY2FzZSAnW29iamVjdCBSZWdFeHBdJzpcbiAgICAgICAgLy8gUmVnRXhwcyBhcmUgY29lcmNlZCB0byBzdHJpbmdzIGZvciBjb21wYXJpc29uIChOb3RlOiAnJyArIC9hL2kgPT09ICcvYS9pJylcbiAgICAgIGNhc2UgJ1tvYmplY3QgU3RyaW5nXSc6XG4gICAgICAgIC8vIFByaW1pdGl2ZXMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgb2JqZWN0IHdyYXBwZXJzIGFyZSBlcXVpdmFsZW50OyB0aHVzLCBgXCI1XCJgIGlzXG4gICAgICAgIC8vIGVxdWl2YWxlbnQgdG8gYG5ldyBTdHJpbmcoXCI1XCIpYC5cbiAgICAgICAgcmV0dXJuICcnICsgYSA9PT0gJycgKyBiO1xuICAgICAgY2FzZSAnW29iamVjdCBOdW1iZXJdJzpcbiAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgLy8gT2JqZWN0KE5hTikgaXMgZXF1aXZhbGVudCB0byBOYU4uXG4gICAgICAgIGlmICgrYSAhPT0gK2EpIHJldHVybiArYiAhPT0gK2I7XG4gICAgICAgIC8vIEFuIGBlZ2FsYCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBmb3Igb3RoZXIgbnVtZXJpYyB2YWx1ZXMuXG4gICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICBjYXNlICdbb2JqZWN0IERhdGVdJzpcbiAgICAgIGNhc2UgJ1tvYmplY3QgQm9vbGVhbl0nOlxuICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgIC8vIG1pbGxpc2Vjb25kIHJlcHJlc2VudGF0aW9ucy4gTm90ZSB0aGF0IGludmFsaWQgZGF0ZXMgd2l0aCBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnNcbiAgICAgICAgLy8gb2YgYE5hTmAgYXJlIG5vdCBlcXVpdmFsZW50LlxuICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgICAgY2FzZSAnW29iamVjdCBTeW1ib2xdJzpcbiAgICAgICAgcmV0dXJuIFN5bWJvbFByb3RvLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sUHJvdG8udmFsdWVPZi5jYWxsKGIpO1xuICAgICAgY2FzZSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nOlxuICAgICAgY2FzZSB0YWdEYXRhVmlldzpcbiAgICAgICAgLy8gQ29lcmNlIHRvIHR5cGVkIGFycmF5IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guXG4gICAgICAgIHJldHVybiBkZWVwRXEodG9CdWZmZXJWaWV3KGEpLCB0b0J1ZmZlclZpZXcoYiksIGFTdGFjaywgYlN0YWNrKTtcbiAgICB9XG5cbiAgICB2YXIgYXJlQXJyYXlzID0gY2xhc3NOYW1lID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIGlmICghYXJlQXJyYXlzICYmIGlzVHlwZWRBcnJheSQxKGEpKSB7XG4gICAgICAgIHZhciBieXRlTGVuZ3RoID0gZ2V0Qnl0ZUxlbmd0aChhKTtcbiAgICAgICAgaWYgKGJ5dGVMZW5ndGggIT09IGdldEJ5dGVMZW5ndGgoYikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGEuYnVmZmVyID09PSBiLmJ1ZmZlciAmJiBhLmJ5dGVPZmZzZXQgPT09IGIuYnl0ZU9mZnNldCkgcmV0dXJuIHRydWU7XG4gICAgICAgIGFyZUFycmF5cyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghYXJlQXJyYXlzKSB7XG4gICAgICBpZiAodHlwZW9mIGEgIT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gT2JqZWN0cyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVpdmFsZW50LCBidXQgYE9iamVjdGBzIG9yIGBBcnJheWBzXG4gICAgICAvLyBmcm9tIGRpZmZlcmVudCBmcmFtZXMgYXJlLlxuICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgaWYgKGFDdG9yICE9PSBiQ3RvciAmJiAhKGlzRnVuY3Rpb24kMShhQ3RvcikgJiYgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24kMShiQ3RvcikgJiYgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCdjb25zdHJ1Y3RvcicgaW4gYSAmJiAnY29uc3RydWN0b3InIGluIGIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuXG4gICAgLy8gSW5pdGlhbGl6aW5nIHN0YWNrIG9mIHRyYXZlcnNlZCBvYmplY3RzLlxuICAgIC8vIEl0J3MgZG9uZSBoZXJlIHNpbmNlIHdlIG9ubHkgbmVlZCB0aGVtIGZvciBvYmplY3RzIGFuZCBhcnJheXMgY29tcGFyaXNvbi5cbiAgICBhU3RhY2sgPSBhU3RhY2sgfHwgW107XG4gICAgYlN0YWNrID0gYlN0YWNrIHx8IFtdO1xuICAgIHZhciBsZW5ndGggPSBhU3RhY2subGVuZ3RoO1xuICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAvLyB1bmlxdWUgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAgICBpZiAoYVN0YWNrW2xlbmd0aF0gPT09IGEpIHJldHVybiBiU3RhY2tbbGVuZ3RoXSA9PT0gYjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgYW5kIGFycmF5cy5cbiAgICBpZiAoYXJlQXJyYXlzKSB7XG4gICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERlZXAgY29tcGFyZSB0aGUgY29udGVudHMsIGlnbm9yaW5nIG5vbi1udW1lcmljIHByb3BlcnRpZXMuXG4gICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgaWYgKCFlcShhW2xlbmd0aF0sIGJbbGVuZ3RoXSwgYVN0YWNrLCBiU3RhY2spKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlZXAgY29tcGFyZSBvYmplY3RzLlxuICAgICAgdmFyIF9rZXlzID0ga2V5cyhhKSwga2V5O1xuICAgICAgbGVuZ3RoID0gX2tleXMubGVuZ3RoO1xuICAgICAgLy8gRW5zdXJlIHRoYXQgYm90aCBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIHByb3BlcnRpZXMgYmVmb3JlIGNvbXBhcmluZyBkZWVwIGVxdWFsaXR5LlxuICAgICAgaWYgKGtleXMoYikubGVuZ3RoICE9PSBsZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIHdoaWxlIChsZW5ndGgtLSkge1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAga2V5ID0gX2tleXNbbGVuZ3RoXTtcbiAgICAgICAgaWYgKCEoaGFzJDEoYiwga2V5KSAmJiBlcShhW2tleV0sIGJba2V5XSwgYVN0YWNrLCBiU3RhY2spKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgdGhlIGZpcnN0IG9iamVjdCBmcm9tIHRoZSBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICBhU3RhY2sucG9wKCk7XG4gICAgYlN0YWNrLnBvcCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuXG4gIGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICAgIHJldHVybiBlcShhLCBiKTtcbiAgfVxuXG4gIC8vIFJldHJpZXZlIGFsbCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIGFsbEtleXMob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gW107XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgICAvLyBBaGVtLCBJRSA8IDkuXG4gICAgaWYgKGhhc0VudW1CdWcpIGNvbGxlY3ROb25FbnVtUHJvcHMob2JqLCBrZXlzKTtcbiAgICByZXR1cm4ga2V5cztcbiAgfVxuXG4gIC8vIFNpbmNlIHRoZSByZWd1bGFyIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCB0eXBlIHRlc3RzIGRvbid0IHdvcmsgZm9yXG4gIC8vIHNvbWUgdHlwZXMgaW4gSUUgMTEsIHdlIHVzZSBhIGZpbmdlcnByaW50aW5nIGhldXJpc3RpYyBpbnN0ZWFkLCBiYXNlZFxuICAvLyBvbiB0aGUgbWV0aG9kcy4gSXQncyBub3QgZ3JlYXQsIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGdvdC5cbiAgLy8gVGhlIGZpbmdlcnByaW50IG1ldGhvZCBsaXN0cyBhcmUgZGVmaW5lZCBiZWxvdy5cbiAgZnVuY3Rpb24gaWUxMWZpbmdlcnByaW50KG1ldGhvZHMpIHtcbiAgICB2YXIgbGVuZ3RoID0gZ2V0TGVuZ3RoKG1ldGhvZHMpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gYE1hcGAsIGBXZWFrTWFwYCBhbmQgYFNldGAgaGF2ZSBubyBlbnVtZXJhYmxlIGtleXMuXG4gICAgICB2YXIga2V5cyA9IGFsbEtleXMob2JqKTtcbiAgICAgIGlmIChnZXRMZW5ndGgoa2V5cykpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0Z1bmN0aW9uJDEob2JqW21ldGhvZHNbaV1dKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gSWYgd2UgYXJlIHRlc3RpbmcgYWdhaW5zdCBgV2Vha01hcGAsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXRcbiAgICAgIC8vIGBvYmpgIGRvZXNuJ3QgaGF2ZSBhIGBmb3JFYWNoYCBtZXRob2QgaW4gb3JkZXIgdG8gZGlzdGluZ3Vpc2hcbiAgICAgIC8vIGl0IGZyb20gYSByZWd1bGFyIGBNYXBgLlxuICAgICAgcmV0dXJuIG1ldGhvZHMgIT09IHdlYWtNYXBNZXRob2RzIHx8ICFpc0Z1bmN0aW9uJDEob2JqW2ZvckVhY2hOYW1lXSk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEluIHRoZSBpbnRlcmVzdCBvZiBjb21wYWN0IG1pbmlmaWNhdGlvbiwgd2Ugd3JpdGVcbiAgLy8gZWFjaCBzdHJpbmcgaW4gdGhlIGZpbmdlcnByaW50cyBvbmx5IG9uY2UuXG4gIHZhciBmb3JFYWNoTmFtZSA9ICdmb3JFYWNoJyxcbiAgICAgIGhhc05hbWUgPSAnaGFzJyxcbiAgICAgIGNvbW1vbkluaXQgPSBbJ2NsZWFyJywgJ2RlbGV0ZSddLFxuICAgICAgbWFwVGFpbCA9IFsnZ2V0JywgaGFzTmFtZSwgJ3NldCddO1xuXG4gIC8vIGBNYXBgLCBgV2Vha01hcGAgYW5kIGBTZXRgIGVhY2ggaGF2ZSBzbGlnaHRseSBkaWZmZXJlbnRcbiAgLy8gY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBzdWJsaXN0cy5cbiAgdmFyIG1hcE1ldGhvZHMgPSBjb21tb25Jbml0LmNvbmNhdChmb3JFYWNoTmFtZSwgbWFwVGFpbCksXG4gICAgICB3ZWFrTWFwTWV0aG9kcyA9IGNvbW1vbkluaXQuY29uY2F0KG1hcFRhaWwpLFxuICAgICAgc2V0TWV0aG9kcyA9IFsnYWRkJ10uY29uY2F0KGNvbW1vbkluaXQsIGZvckVhY2hOYW1lLCBoYXNOYW1lKTtcblxuICB2YXIgaXNNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQobWFwTWV0aG9kcykgOiB0YWdUZXN0ZXIoJ01hcCcpO1xuXG4gIHZhciBpc1dlYWtNYXAgPSBpc0lFMTEgPyBpZTExZmluZ2VycHJpbnQod2Vha01hcE1ldGhvZHMpIDogdGFnVGVzdGVyKCdXZWFrTWFwJyk7XG5cbiAgdmFyIGlzU2V0ID0gaXNJRTExID8gaWUxMWZpbmdlcnByaW50KHNldE1ldGhvZHMpIDogdGFnVGVzdGVyKCdTZXQnKTtcblxuICB2YXIgaXNXZWFrU2V0ID0gdGFnVGVzdGVyKCdXZWFrU2V0Jyk7XG5cbiAgLy8gUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgdmFyIHZhbHVlcyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWVzW2ldID0gb2JqW19rZXlzW2ldXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfVxuXG4gIC8vIENvbnZlcnQgYW4gb2JqZWN0IGludG8gYSBsaXN0IG9mIGBba2V5LCB2YWx1ZV1gIHBhaXJzLlxuICAvLyBUaGUgb3Bwb3NpdGUgb2YgYF8ub2JqZWN0YCB3aXRoIG9uZSBhcmd1bWVudC5cbiAgZnVuY3Rpb24gcGFpcnMob2JqKSB7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBfa2V5cy5sZW5ndGg7XG4gICAgdmFyIHBhaXJzID0gQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBwYWlyc1tpXSA9IFtfa2V5c1tpXSwgb2JqW19rZXlzW2ldXV07XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbiAgfVxuXG4gIC8vIEludmVydCB0aGUga2V5cyBhbmQgdmFsdWVzIG9mIGFuIG9iamVjdC4gVGhlIHZhbHVlcyBtdXN0IGJlIHNlcmlhbGl6YWJsZS5cbiAgZnVuY3Rpb24gaW52ZXJ0KG9iaikge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgX2tleXMgPSBrZXlzKG9iaik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IF9rZXlzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbb2JqW19rZXlzW2ldXV0gPSBfa2V5c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIHRoZSBmdW5jdGlvbiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIG9iamVjdC5cbiAgZnVuY3Rpb24gZnVuY3Rpb25zKG9iaikge1xuICAgIHZhciBuYW1lcyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChpc0Z1bmN0aW9uJDEob2JqW2tleV0pKSBuYW1lcy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lcy5zb3J0KCk7XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYXNzaWduZXIgZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBjcmVhdGVBc3NpZ25lcihrZXlzRnVuYywgZGVmYXVsdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmIChkZWZhdWx0cykgb2JqID0gT2JqZWN0KG9iaik7XG4gICAgICBpZiAobGVuZ3RoIDwgMiB8fCBvYmogPT0gbnVsbCkgcmV0dXJuIG9iajtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMTsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpbmRleF0sXG4gICAgICAgICAgICBrZXlzID0ga2V5c0Z1bmMoc291cmNlKSxcbiAgICAgICAgICAgIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoIWRlZmF1bHRzIHx8IG9ialtrZXldID09PSB2b2lkIDApIG9ialtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEV4dGVuZCBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgcHJvcGVydGllcyBpbiBwYXNzZWQtaW4gb2JqZWN0KHMpLlxuICB2YXIgZXh0ZW5kID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cyk7XG5cbiAgLy8gQXNzaWducyBhIGdpdmVuIG9iamVjdCB3aXRoIGFsbCB0aGUgb3duIHByb3BlcnRpZXMgaW4gdGhlIHBhc3NlZC1pblxuICAvLyBvYmplY3QocykuXG4gIC8vIChodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduKVxuICB2YXIgZXh0ZW5kT3duID0gY3JlYXRlQXNzaWduZXIoa2V5cyk7XG5cbiAgLy8gRmlsbCBpbiBhIGdpdmVuIG9iamVjdCB3aXRoIGRlZmF1bHQgcHJvcGVydGllcy5cbiAgdmFyIGRlZmF1bHRzID0gY3JlYXRlQXNzaWduZXIoYWxsS2V5cywgdHJ1ZSk7XG5cbiAgLy8gQ3JlYXRlIGEgbmFrZWQgZnVuY3Rpb24gcmVmZXJlbmNlIGZvciBzdXJyb2dhdGUtcHJvdG90eXBlLXN3YXBwaW5nLlxuICBmdW5jdGlvbiBjdG9yKCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpe307XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSBuZXcgb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJvbSBhbm90aGVyLlxuICBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvdHlwZSkge1xuICAgIGlmICghaXNPYmplY3QocHJvdG90eXBlKSkgcmV0dXJuIHt9O1xuICAgIGlmIChuYXRpdmVDcmVhdGUpIHJldHVybiBuYXRpdmVDcmVhdGUocHJvdG90eXBlKTtcbiAgICB2YXIgQ3RvciA9IGN0b3IoKTtcbiAgICBDdG9yLnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEN0b3I7XG4gICAgQ3Rvci5wcm90b3R5cGUgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhlIGdpdmVuIHByb3RvdHlwZSBvYmplY3QuXG4gIC8vIElmIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcmUgcHJvdmlkZWQgdGhlbiB0aGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4gIC8vIGNyZWF0ZWQgb2JqZWN0LlxuICBmdW5jdGlvbiBjcmVhdGUocHJvdG90eXBlLCBwcm9wcykge1xuICAgIHZhciByZXN1bHQgPSBiYXNlQ3JlYXRlKHByb3RvdHlwZSk7XG4gICAgaWYgKHByb3BzKSBleHRlbmRPd24ocmVzdWx0LCBwcm9wcyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIENyZWF0ZSBhIChzaGFsbG93LWNsb25lZCkgZHVwbGljYXRlIG9mIGFuIG9iamVjdC5cbiAgZnVuY3Rpb24gY2xvbmUob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopKSByZXR1cm4gb2JqO1xuICAgIHJldHVybiBpc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IGV4dGVuZCh7fSwgb2JqKTtcbiAgfVxuXG4gIC8vIEludm9rZXMgYGludGVyY2VwdG9yYCB3aXRoIHRoZSBgb2JqYCBhbmQgdGhlbiByZXR1cm5zIGBvYmpgLlxuICAvLyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiwgaW5cbiAgLy8gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbiB0aGUgY2hhaW4uXG4gIGZ1bmN0aW9uIHRhcChvYmosIGludGVyY2VwdG9yKSB7XG4gICAgaW50ZXJjZXB0b3Iob2JqKTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gTm9ybWFsaXplIGEgKGRlZXApIHByb3BlcnR5IGBwYXRoYCB0byBhcnJheS5cbiAgLy8gTGlrZSBgXy5pdGVyYXRlZWAsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGN1c3RvbWl6ZWQuXG4gIGZ1bmN0aW9uIHRvUGF0aCQxKHBhdGgpIHtcbiAgICByZXR1cm4gaXNBcnJheShwYXRoKSA/IHBhdGggOiBbcGF0aF07XG4gIH1cbiAgXyQxLnRvUGF0aCA9IHRvUGF0aCQxO1xuXG4gIC8vIEludGVybmFsIHdyYXBwZXIgZm9yIGBfLnRvUGF0aGAgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbi5cbiAgLy8gU2ltaWxhciB0byBgY2JgIGZvciBgXy5pdGVyYXRlZWAuXG4gIGZ1bmN0aW9uIHRvUGF0aChwYXRoKSB7XG4gICAgcmV0dXJuIF8kMS50b1BhdGgocGF0aCk7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBmdW5jdGlvbiB0byBvYnRhaW4gYSBuZXN0ZWQgcHJvcGVydHkgaW4gYG9iamAgYWxvbmcgYHBhdGhgLlxuICBmdW5jdGlvbiBkZWVwR2V0KG9iaiwgcGF0aCkge1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiB2b2lkIDA7XG4gICAgICBvYmogPSBvYmpbcGF0aFtpXV07XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGggPyBvYmogOiB2b2lkIDA7XG4gIH1cblxuICAvLyBHZXQgdGhlIHZhbHVlIG9mIHRoZSAoZGVlcCkgcHJvcGVydHkgb24gYHBhdGhgIGZyb20gYG9iamVjdGAuXG4gIC8vIElmIGFueSBwcm9wZXJ0eSBpbiBgcGF0aGAgZG9lcyBub3QgZXhpc3Qgb3IgaWYgdGhlIHZhbHVlIGlzXG4gIC8vIGB1bmRlZmluZWRgLCByZXR1cm4gYGRlZmF1bHRWYWx1ZWAgaW5zdGVhZC5cbiAgLy8gVGhlIGBwYXRoYCBpcyBub3JtYWxpemVkIHRocm91Z2ggYF8udG9QYXRoYC5cbiAgZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgdmFyIHZhbHVlID0gZGVlcEdldChvYmplY3QsIHRvUGF0aChwYXRoKSk7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlO1xuICB9XG5cbiAgLy8gU2hvcnRjdXQgZnVuY3Rpb24gZm9yIGNoZWNraW5nIGlmIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBwcm9wZXJ0eSBkaXJlY3RseSBvblxuICAvLyBpdHNlbGYgKGluIG90aGVyIHdvcmRzLCBub3Qgb24gYSBwcm90b3R5cGUpLiBVbmxpa2UgdGhlIGludGVybmFsIGBoYXNgXG4gIC8vIGZ1bmN0aW9uLCB0aGlzIHB1YmxpYyB2ZXJzaW9uIGNhbiBhbHNvIHRyYXZlcnNlIG5lc3RlZCBwcm9wZXJ0aWVzLlxuICBmdW5jdGlvbiBoYXMob2JqLCBwYXRoKSB7XG4gICAgcGF0aCA9IHRvUGF0aChwYXRoKTtcbiAgICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG4gICAgICBpZiAoIWhhcyQxKG9iaiwga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgb2JqID0gb2JqW2tleV07XG4gICAgfVxuICAgIHJldHVybiAhIWxlbmd0aDtcbiAgfVxuXG4gIC8vIEtlZXAgdGhlIGlkZW50aXR5IGZ1bmN0aW9uIGFyb3VuZCBmb3IgZGVmYXVsdCBpdGVyYXRlZXMuXG4gIGZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHByZWRpY2F0ZSBmb3IgY2hlY2tpbmcgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gc2V0IG9mXG4gIC8vIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiBtYXRjaGVyKGF0dHJzKSB7XG4gICAgYXR0cnMgPSBleHRlbmRPd24oe30sIGF0dHJzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqKSB7XG4gICAgICByZXR1cm4gaXNNYXRjaChvYmosIGF0dHJzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gcGFzc2VkIGFuIG9iamVjdCwgd2lsbCB0cmF2ZXJzZSB0aGF0IG9iamVjdOKAmXNcbiAgLy8gcHJvcGVydGllcyBkb3duIHRoZSBnaXZlbiBgcGF0aGAsIHNwZWNpZmllZCBhcyBhbiBhcnJheSBvZiBrZXlzIG9yIGluZGljZXMuXG4gIGZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgIHJldHVybiBmdW5jdGlvbihvYmopIHtcbiAgICAgIHJldHVybiBkZWVwR2V0KG9iaiwgcGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlZmZpY2llbnQgKGZvciBjdXJyZW50IGVuZ2luZXMpIHZlcnNpb25cbiAgLy8gb2YgdGhlIHBhc3NlZC1pbiBjYWxsYmFjaywgdG8gYmUgcmVwZWF0ZWRseSBhcHBsaWVkIGluIG90aGVyIFVuZGVyc2NvcmVcbiAgLy8gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBvcHRpbWl6ZUNiKGZ1bmMsIGNvbnRleHQsIGFyZ0NvdW50KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHZvaWQgMCkgcmV0dXJuIGZ1bmM7XG4gICAgc3dpdGNoIChhcmdDb3VudCA9PSBudWxsID8gMyA6IGFyZ0NvdW50KSB7XG4gICAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgICAvLyBUaGUgMi1hcmd1bWVudCBjYXNlIGlzIG9taXR0ZWQgYmVjYXVzZSB3ZeKAmXJlIG5vdCB1c2luZyBpdC5cbiAgICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbik7XG4gICAgICB9O1xuICAgICAgY2FzZSA0OiByZXR1cm4gZnVuY3Rpb24oYWNjdW11bGF0b3IsIHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGFjY3VtdWxhdG9yLCB2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQW4gaW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgY2FsbGJhY2tzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gZWFjaFxuICAvLyBlbGVtZW50IGluIGEgY29sbGVjdGlvbiwgcmV0dXJuaW5nIHRoZSBkZXNpcmVkIHJlc3VsdCDigJQgZWl0aGVyIGBfLmlkZW50aXR5YCxcbiAgLy8gYW4gYXJiaXRyYXJ5IGNhbGxiYWNrLCBhIHByb3BlcnR5IG1hdGNoZXIsIG9yIGEgcHJvcGVydHkgYWNjZXNzb3IuXG4gIGZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGlkZW50aXR5O1xuICAgIGlmIChpc0Z1bmN0aW9uJDEodmFsdWUpKSByZXR1cm4gb3B0aW1pemVDYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICAgIGlmIChpc09iamVjdCh2YWx1ZSkgJiYgIWlzQXJyYXkodmFsdWUpKSByZXR1cm4gbWF0Y2hlcih2YWx1ZSk7XG4gICAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbiAgfVxuXG4gIC8vIEV4dGVybmFsIHdyYXBwZXIgZm9yIG91ciBjYWxsYmFjayBnZW5lcmF0b3IuIFVzZXJzIG1heSBjdXN0b21pemVcbiAgLy8gYF8uaXRlcmF0ZWVgIGlmIHRoZXkgd2FudCBhZGRpdGlvbmFsIHByZWRpY2F0ZS9pdGVyYXRlZSBzaG9ydGhhbmQgc3R5bGVzLlxuICAvLyBUaGlzIGFic3RyYWN0aW9uIGhpZGVzIHRoZSBpbnRlcm5hbC1vbmx5IGBhcmdDb3VudGAgYXJndW1lbnQuXG4gIGZ1bmN0aW9uIGl0ZXJhdGVlKHZhbHVlLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgSW5maW5pdHkpO1xuICB9XG4gIF8kMS5pdGVyYXRlZSA9IGl0ZXJhdGVlO1xuXG4gIC8vIFRoZSBmdW5jdGlvbiB3ZSBjYWxsIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgYSBjYWxsYmFjay4gSXQgaW52b2tlc1xuICAvLyBgXy5pdGVyYXRlZWAgaWYgb3ZlcnJpZGRlbiwgb3RoZXJ3aXNlIGBiYXNlSXRlcmF0ZWVgLlxuICBmdW5jdGlvbiBjYih2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpIHtcbiAgICBpZiAoXyQxLml0ZXJhdGVlICE9PSBpdGVyYXRlZSkgcmV0dXJuIF8kMS5pdGVyYXRlZSh2YWx1ZSwgY29udGV4dCk7XG4gICAgcmV0dXJuIGJhc2VJdGVyYXRlZSh2YWx1ZSwgY29udGV4dCwgYXJnQ291bnQpO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVzdWx0cyBvZiBhcHBseWluZyB0aGUgYGl0ZXJhdGVlYCB0byBlYWNoIGVsZW1lbnQgb2YgYG9iamAuXG4gIC8vIEluIGNvbnRyYXN0IHRvIGBfLm1hcGAgaXQgcmV0dXJucyBhbiBvYmplY3QuXG4gIGZ1bmN0aW9uIG1hcE9iamVjdChvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIF9rZXlzID0ga2V5cyhvYmopLFxuICAgICAgICBsZW5ndGggPSBfa2V5cy5sZW5ndGgsXG4gICAgICAgIHJlc3VsdHMgPSB7fTtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICB2YXIgY3VycmVudEtleSA9IF9rZXlzW2luZGV4XTtcbiAgICAgIHJlc3VsdHNbY3VycmVudEtleV0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gUHJlZGljYXRlLWdlbmVyYXRpbmcgZnVuY3Rpb24uIE9mdGVuIHVzZWZ1bCBvdXRzaWRlIG9mIFVuZGVyc2NvcmUuXG4gIGZ1bmN0aW9uIG5vb3AoKXt9XG5cbiAgLy8gR2VuZXJhdGVzIGEgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gb2JqZWN0IHRoYXQgcmV0dXJucyBhIGdpdmVuIHByb3BlcnR5LlxuICBmdW5jdGlvbiBwcm9wZXJ0eU9mKG9iaikge1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIG5vb3A7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiBnZXQob2JqLCBwYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUnVuIGEgZnVuY3Rpb24gKipuKiogdGltZXMuXG4gIGZ1bmN0aW9uIHRpbWVzKG4sIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGFjY3VtID0gQXJyYXkoTWF0aC5tYXgoMCwgbikpO1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIGFjY3VtW2ldID0gaXRlcmF0ZWUoaSk7XG4gICAgcmV0dXJuIGFjY3VtO1xuICB9XG5cbiAgLy8gUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAgKGluY2x1c2l2ZSkuXG4gIGZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT0gbnVsbCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG1pbiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSk7XG4gIH1cblxuICAvLyBBIChwb3NzaWJseSBmYXN0ZXIpIHdheSB0byBnZXQgdGhlIGN1cnJlbnQgdGltZXN0YW1wIGFzIGFuIGludGVnZXIuXG4gIHZhciBub3cgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH07XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGdlbmVyYXRlIGZ1bmN0aW9ucyBmb3IgZXNjYXBpbmcgYW5kIHVuZXNjYXBpbmcgc3RyaW5nc1xuICAvLyB0by9mcm9tIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgZnVuY3Rpb24gY3JlYXRlRXNjYXBlcihtYXApIHtcbiAgICB2YXIgZXNjYXBlciA9IGZ1bmN0aW9uKG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWFwW21hdGNoXTtcbiAgICB9O1xuICAgIC8vIFJlZ2V4ZXMgZm9yIGlkZW50aWZ5aW5nIGEga2V5IHRoYXQgbmVlZHMgdG8gYmUgZXNjYXBlZC5cbiAgICB2YXIgc291cmNlID0gJyg/OicgKyBrZXlzKG1hcCkuam9pbignfCcpICsgJyknO1xuICAgIHZhciB0ZXN0UmVnZXhwID0gUmVnRXhwKHNvdXJjZSk7XG4gICAgdmFyIHJlcGxhY2VSZWdleHAgPSBSZWdFeHAoc291cmNlLCAnZycpO1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZyA9PSBudWxsID8gJycgOiAnJyArIHN0cmluZztcbiAgICAgIHJldHVybiB0ZXN0UmVnZXhwLnRlc3Qoc3RyaW5nKSA/IHN0cmluZy5yZXBsYWNlKHJlcGxhY2VSZWdleHAsIGVzY2FwZXIpIDogc3RyaW5nO1xuICAgIH07XG4gIH1cblxuICAvLyBJbnRlcm5hbCBsaXN0IG9mIEhUTUwgZW50aXRpZXMgZm9yIGVzY2FwaW5nLlxuICB2YXIgZXNjYXBlTWFwID0ge1xuICAgICcmJzogJyZhbXA7JyxcbiAgICAnPCc6ICcmbHQ7JyxcbiAgICAnPic6ICcmZ3Q7JyxcbiAgICAnXCInOiAnJnF1b3Q7JyxcbiAgICBcIidcIjogJyYjeDI3OycsXG4gICAgJ2AnOiAnJiN4NjA7J1xuICB9O1xuXG4gIC8vIEZ1bmN0aW9uIGZvciBlc2NhcGluZyBzdHJpbmdzIHRvIEhUTUwgaW50ZXJwb2xhdGlvbi5cbiAgdmFyIF9lc2NhcGUgPSBjcmVhdGVFc2NhcGVyKGVzY2FwZU1hcCk7XG5cbiAgLy8gSW50ZXJuYWwgbGlzdCBvZiBIVE1MIGVudGl0aWVzIGZvciB1bmVzY2FwaW5nLlxuICB2YXIgdW5lc2NhcGVNYXAgPSBpbnZlcnQoZXNjYXBlTWFwKTtcblxuICAvLyBGdW5jdGlvbiBmb3IgdW5lc2NhcGluZyBzdHJpbmdzIGZyb20gSFRNTCBpbnRlcnBvbGF0aW9uLlxuICB2YXIgX3VuZXNjYXBlID0gY3JlYXRlRXNjYXBlcih1bmVzY2FwZU1hcCk7XG5cbiAgLy8gQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzIEVSQi1zdHlsZSB0ZW1wbGF0ZSBkZWxpbWl0ZXJzLiBDaGFuZ2UgdGhlXG4gIC8vIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy5cbiAgdmFyIHRlbXBsYXRlU2V0dGluZ3MgPSBfJDEudGVtcGxhdGVTZXR0aW5ncyA9IHtcbiAgICBldmFsdWF0ZTogLzwlKFtcXHNcXFNdKz8pJT4vZyxcbiAgICBpbnRlcnBvbGF0ZTogLzwlPShbXFxzXFxTXSs/KSU+L2csXG4gICAgZXNjYXBlOiAvPCUtKFtcXHNcXFNdKz8pJT4vZ1xuICB9O1xuXG4gIC8vIFdoZW4gY3VzdG9taXppbmcgYF8udGVtcGxhdGVTZXR0aW5nc2AsIGlmIHlvdSBkb24ndCB3YW50IHRvIGRlZmluZSBhblxuICAvLyBpbnRlcnBvbGF0aW9uLCBldmFsdWF0aW9uIG9yIGVzY2FwaW5nIHJlZ2V4LCB3ZSBuZWVkIG9uZSB0aGF0IGlzXG4gIC8vIGd1YXJhbnRlZWQgbm90IHRvIG1hdGNoLlxuICB2YXIgbm9NYXRjaCA9IC8oLileLztcblxuICAvLyBDZXJ0YWluIGNoYXJhY3RlcnMgbmVlZCB0byBiZSBlc2NhcGVkIHNvIHRoYXQgdGhleSBjYW4gYmUgcHV0IGludG8gYVxuICAvLyBzdHJpbmcgbGl0ZXJhbC5cbiAgdmFyIGVzY2FwZXMgPSB7XG4gICAgXCInXCI6IFwiJ1wiLFxuICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICdcXHInOiAncicsXG4gICAgJ1xcbic6ICduJyxcbiAgICAnXFx1MjAyOCc6ICd1MjAyOCcsXG4gICAgJ1xcdTIwMjknOiAndTIwMjknXG4gIH07XG5cbiAgdmFyIGVzY2FwZVJlZ0V4cCA9IC9cXFxcfCd8XFxyfFxcbnxcXHUyMDI4fFxcdTIwMjkvZztcblxuICBmdW5jdGlvbiBlc2NhcGVDaGFyKG1hdGNoKSB7XG4gICAgcmV0dXJuICdcXFxcJyArIGVzY2FwZXNbbWF0Y2hdO1xuICB9XG5cbiAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGlyZC1wYXJ0eSBjb2RlIGluamVjdGlvbiB0aHJvdWdoXG4gIC8vIGBfLnRlbXBsYXRlU2V0dGluZ3MudmFyaWFibGVgLCB3ZSB0ZXN0IGl0IGFnYWluc3QgdGhlIGZvbGxvd2luZyByZWd1bGFyXG4gIC8vIGV4cHJlc3Npb24uIEl0IGlzIGludGVudGlvbmFsbHkgYSBiaXQgbW9yZSBsaWJlcmFsIHRoYW4ganVzdCBtYXRjaGluZyB2YWxpZFxuICAvLyBpZGVudGlmaWVycywgYnV0IHN0aWxsIHByZXZlbnRzIHBvc3NpYmxlIGxvb3Bob2xlcyB0aHJvdWdoIGRlZmF1bHRzIG9yXG4gIC8vIGRlc3RydWN0dXJpbmcgYXNzaWdubWVudC5cbiAgdmFyIGJhcmVJZGVudGlmaWVyID0gL15cXHMqKFxcd3xcXCQpK1xccyokLztcblxuICAvLyBKYXZhU2NyaXB0IG1pY3JvLXRlbXBsYXRpbmcsIHNpbWlsYXIgdG8gSm9obiBSZXNpZydzIGltcGxlbWVudGF0aW9uLlxuICAvLyBVbmRlcnNjb3JlIHRlbXBsYXRpbmcgaGFuZGxlcyBhcmJpdHJhcnkgZGVsaW1pdGVycywgcHJlc2VydmVzIHdoaXRlc3BhY2UsXG4gIC8vIGFuZCBjb3JyZWN0bHkgZXNjYXBlcyBxdW90ZXMgd2l0aGluIGludGVycG9sYXRlZCBjb2RlLlxuICAvLyBOQjogYG9sZFNldHRpbmdzYCBvbmx5IGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gIGZ1bmN0aW9uIHRlbXBsYXRlKHRleHQsIHNldHRpbmdzLCBvbGRTZXR0aW5ncykge1xuICAgIGlmICghc2V0dGluZ3MgJiYgb2xkU2V0dGluZ3MpIHNldHRpbmdzID0gb2xkU2V0dGluZ3M7XG4gICAgc2V0dGluZ3MgPSBkZWZhdWx0cyh7fSwgc2V0dGluZ3MsIF8kMS50ZW1wbGF0ZVNldHRpbmdzKTtcblxuICAgIC8vIENvbWJpbmUgZGVsaW1pdGVycyBpbnRvIG9uZSByZWd1bGFyIGV4cHJlc3Npb24gdmlhIGFsdGVybmF0aW9uLlxuICAgIHZhciBtYXRjaGVyID0gUmVnRXhwKFtcbiAgICAgIChzZXR0aW5ncy5lc2NhcGUgfHwgbm9NYXRjaCkuc291cmNlLFxuICAgICAgKHNldHRpbmdzLmludGVycG9sYXRlIHx8IG5vTWF0Y2gpLnNvdXJjZSxcbiAgICAgIChzZXR0aW5ncy5ldmFsdWF0ZSB8fCBub01hdGNoKS5zb3VyY2VcbiAgICBdLmpvaW4oJ3wnKSArICd8JCcsICdnJyk7XG5cbiAgICAvLyBDb21waWxlIHRoZSB0ZW1wbGF0ZSBzb3VyY2UsIGVzY2FwaW5nIHN0cmluZyBsaXRlcmFscyBhcHByb3ByaWF0ZWx5LlxuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHNvdXJjZSA9IFwiX19wKz0nXCI7XG4gICAgdGV4dC5yZXBsYWNlKG1hdGNoZXIsIGZ1bmN0aW9uKG1hdGNoLCBlc2NhcGUsIGludGVycG9sYXRlLCBldmFsdWF0ZSwgb2Zmc2V0KSB7XG4gICAgICBzb3VyY2UgKz0gdGV4dC5zbGljZShpbmRleCwgb2Zmc2V0KS5yZXBsYWNlKGVzY2FwZVJlZ0V4cCwgZXNjYXBlQ2hhcik7XG4gICAgICBpbmRleCA9IG9mZnNldCArIG1hdGNoLmxlbmd0aDtcblxuICAgICAgaWYgKGVzY2FwZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGVzY2FwZSArIFwiKSk9PW51bGw/Jyc6Xy5lc2NhcGUoX190KSkrXFxuJ1wiO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnBvbGF0ZSkge1xuICAgICAgICBzb3VyY2UgKz0gXCInK1xcbigoX190PShcIiArIGludGVycG9sYXRlICsgXCIpKT09bnVsbD8nJzpfX3QpK1xcbidcIjtcbiAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGUpIHtcbiAgICAgICAgc291cmNlICs9IFwiJztcXG5cIiArIGV2YWx1YXRlICsgXCJcXG5fX3ArPSdcIjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRvYmUgVk1zIG5lZWQgdGhlIG1hdGNoIHJldHVybmVkIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb2Zmc2V0LlxuICAgICAgcmV0dXJuIG1hdGNoO1xuICAgIH0pO1xuICAgIHNvdXJjZSArPSBcIic7XFxuXCI7XG5cbiAgICB2YXIgYXJndW1lbnQgPSBzZXR0aW5ncy52YXJpYWJsZTtcbiAgICBpZiAoYXJndW1lbnQpIHtcbiAgICAgIC8vIEluc3VyZSBhZ2FpbnN0IHRoaXJkLXBhcnR5IGNvZGUgaW5qZWN0aW9uLiAoQ1ZFLTIwMjEtMjMzNTgpXG4gICAgICBpZiAoIWJhcmVJZGVudGlmaWVyLnRlc3QoYXJndW1lbnQpKSB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICd2YXJpYWJsZSBpcyBub3QgYSBiYXJlIGlkZW50aWZpZXI6ICcgKyBhcmd1bWVudFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyBub3Qgc3BlY2lmaWVkLCBwbGFjZSBkYXRhIHZhbHVlcyBpbiBsb2NhbCBzY29wZS5cbiAgICAgIHNvdXJjZSA9ICd3aXRoKG9ianx8e30pe1xcbicgKyBzb3VyY2UgKyAnfVxcbic7XG4gICAgICBhcmd1bWVudCA9ICdvYmonO1xuICAgIH1cblxuICAgIHNvdXJjZSA9IFwidmFyIF9fdCxfX3A9JycsX19qPUFycmF5LnByb3RvdHlwZS5qb2luLFwiICtcbiAgICAgIFwicHJpbnQ9ZnVuY3Rpb24oKXtfX3ArPV9fai5jYWxsKGFyZ3VtZW50cywnJyk7fTtcXG5cIiArXG4gICAgICBzb3VyY2UgKyAncmV0dXJuIF9fcDtcXG4nO1xuXG4gICAgdmFyIHJlbmRlcjtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyID0gbmV3IEZ1bmN0aW9uKGFyZ3VtZW50LCAnXycsIHNvdXJjZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHZhciB0ZW1wbGF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHJldHVybiByZW5kZXIuY2FsbCh0aGlzLCBkYXRhLCBfJDEpO1xuICAgIH07XG5cbiAgICAvLyBQcm92aWRlIHRoZSBjb21waWxlZCBzb3VyY2UgYXMgYSBjb252ZW5pZW5jZSBmb3IgcHJlY29tcGlsYXRpb24uXG4gICAgdGVtcGxhdGUuc291cmNlID0gJ2Z1bmN0aW9uKCcgKyBhcmd1bWVudCArICcpe1xcbicgKyBzb3VyY2UgKyAnfSc7XG5cbiAgICByZXR1cm4gdGVtcGxhdGU7XG4gIH1cblxuICAvLyBUcmF2ZXJzZXMgdGhlIGNoaWxkcmVuIG9mIGBvYmpgIGFsb25nIGBwYXRoYC4gSWYgYSBjaGlsZCBpcyBhIGZ1bmN0aW9uLCBpdFxuICAvLyBpcyBpbnZva2VkIHdpdGggaXRzIHBhcmVudCBhcyBjb250ZXh0LiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmluYWxcbiAgLy8gY2hpbGQsIG9yIGBmYWxsYmFja2AgaWYgYW55IGNoaWxkIGlzIHVuZGVmaW5lZC5cbiAgZnVuY3Rpb24gcmVzdWx0KG9iaiwgcGF0aCwgZmFsbGJhY2spIHtcbiAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcbiAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgcmV0dXJuIGlzRnVuY3Rpb24kMShmYWxsYmFjaykgPyBmYWxsYmFjay5jYWxsKG9iaikgOiBmYWxsYmFjaztcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHByb3AgPSBvYmogPT0gbnVsbCA/IHZvaWQgMCA6IG9ialtwYXRoW2ldXTtcbiAgICAgIGlmIChwcm9wID09PSB2b2lkIDApIHtcbiAgICAgICAgcHJvcCA9IGZhbGxiYWNrO1xuICAgICAgICBpID0gbGVuZ3RoOyAvLyBFbnN1cmUgd2UgZG9uJ3QgY29udGludWUgaXRlcmF0aW5nLlxuICAgICAgfVxuICAgICAgb2JqID0gaXNGdW5jdGlvbiQxKHByb3ApID8gcHJvcC5jYWxsKG9iaikgOiBwcm9wO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgYSB1bmlxdWUgaW50ZWdlciBpZCAodW5pcXVlIHdpdGhpbiB0aGUgZW50aXJlIGNsaWVudCBzZXNzaW9uKS5cbiAgLy8gVXNlZnVsIGZvciB0ZW1wb3JhcnkgRE9NIGlkcy5cbiAgdmFyIGlkQ291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICAgIHZhciBpZCA9ICsraWRDb3VudGVyICsgJyc7XG4gICAgcmV0dXJuIHByZWZpeCA/IHByZWZpeCArIGlkIDogaWQ7XG4gIH1cblxuICAvLyBTdGFydCBjaGFpbmluZyBhIHdyYXBwZWQgVW5kZXJzY29yZSBvYmplY3QuXG4gIGZ1bmN0aW9uIGNoYWluKG9iaikge1xuICAgIHZhciBpbnN0YW5jZSA9IF8kMShvYmopO1xuICAgIGluc3RhbmNlLl9jaGFpbiA9IHRydWU7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZXhlY3V0ZSBgc291cmNlRnVuY2AgYm91bmQgdG8gYGNvbnRleHRgIHdpdGggb3B0aW9uYWxcbiAgLy8gYGFyZ3NgLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZXhlY3V0ZSBhIGZ1bmN0aW9uIGFzIGEgY29uc3RydWN0b3Igb3IgYXMgYVxuICAvLyBub3JtYWwgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIGV4ZWN1dGVCb3VuZChzb3VyY2VGdW5jLCBib3VuZEZ1bmMsIGNvbnRleHQsIGNhbGxpbmdDb250ZXh0LCBhcmdzKSB7XG4gICAgaWYgKCEoY2FsbGluZ0NvbnRleHQgaW5zdGFuY2VvZiBib3VuZEZ1bmMpKSByZXR1cm4gc291cmNlRnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB2YXIgc2VsZiA9IGJhc2VDcmVhdGUoc291cmNlRnVuYy5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBzb3VyY2VGdW5jLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIGlmIChpc09iamVjdChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgLy8gUGFydGlhbGx5IGFwcGx5IGEgZnVuY3Rpb24gYnkgY3JlYXRpbmcgYSB2ZXJzaW9uIHRoYXQgaGFzIGhhZCBzb21lIG9mIGl0c1xuICAvLyBhcmd1bWVudHMgcHJlLWZpbGxlZCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgZHluYW1pYyBgdGhpc2AgY29udGV4dC4gYF9gIGFjdHNcbiAgLy8gYXMgYSBwbGFjZWhvbGRlciBieSBkZWZhdWx0LCBhbGxvd2luZyBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHRvIGJlXG4gIC8vIHByZS1maWxsZWQuIFNldCBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCBmb3IgYSBjdXN0b20gcGxhY2Vob2xkZXIgYXJndW1lbnQuXG4gIHZhciBwYXJ0aWFsID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihmdW5jLCBib3VuZEFyZ3MpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBwYXJ0aWFsLnBsYWNlaG9sZGVyO1xuICAgIHZhciBib3VuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBvc2l0aW9uID0gMCwgbGVuZ3RoID0gYm91bmRBcmdzLmxlbmd0aDtcbiAgICAgIHZhciBhcmdzID0gQXJyYXkobGVuZ3RoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYXJnc1tpXSA9IGJvdW5kQXJnc1tpXSA9PT0gcGxhY2Vob2xkZXIgPyBhcmd1bWVudHNbcG9zaXRpb24rK10gOiBib3VuZEFyZ3NbaV07XG4gICAgICB9XG4gICAgICB3aGlsZSAocG9zaXRpb24gPCBhcmd1bWVudHMubGVuZ3RoKSBhcmdzLnB1c2goYXJndW1lbnRzW3Bvc2l0aW9uKytdKTtcbiAgICAgIHJldHVybiBleGVjdXRlQm91bmQoZnVuYywgYm91bmQsIHRoaXMsIHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvdW5kO1xuICB9KTtcblxuICBwYXJ0aWFsLnBsYWNlaG9sZGVyID0gXyQxO1xuXG4gIC8vIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLFxuICAvLyBvcHRpb25hbGx5KS5cbiAgdmFyIGJpbmQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIGNvbnRleHQsIGFyZ3MpIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24kMShmdW5jKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQmluZCBtdXN0IGJlIGNhbGxlZCBvbiBhIGZ1bmN0aW9uJyk7XG4gICAgdmFyIGJvdW5kID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihjYWxsQXJncykge1xuICAgICAgcmV0dXJuIGV4ZWN1dGVCb3VuZChmdW5jLCBib3VuZCwgY29udGV4dCwgdGhpcywgYXJncy5jb25jYXQoY2FsbEFyZ3MpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYm91bmQ7XG4gIH0pO1xuXG4gIC8vIEludGVybmFsIGhlbHBlciBmb3IgY29sbGVjdGlvbiBtZXRob2RzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgY29sbGVjdGlvblxuICAvLyBzaG91bGQgYmUgaXRlcmF0ZWQgYXMgYW4gYXJyYXkgb3IgYXMgYW4gb2JqZWN0LlxuICAvLyBSZWxhdGVkOiBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtdG9sZW5ndGhcbiAgLy8gQXZvaWRzIGEgdmVyeSBuYXN0eSBpT1MgOCBKSVQgYnVnIG9uIEFSTS02NC4gIzIwOTRcbiAgdmFyIGlzQXJyYXlMaWtlID0gY3JlYXRlU2l6ZVByb3BlcnR5Q2hlY2soZ2V0TGVuZ3RoKTtcblxuICAvLyBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBhIHJlY3Vyc2l2ZSBgZmxhdHRlbmAgZnVuY3Rpb24uXG4gIGZ1bmN0aW9uIGZsYXR0ZW4kMShpbnB1dCwgZGVwdGgsIHN0cmljdCwgb3V0cHV0KSB7XG4gICAgb3V0cHV0ID0gb3V0cHV0IHx8IFtdO1xuICAgIGlmICghZGVwdGggJiYgZGVwdGggIT09IDApIHtcbiAgICAgIGRlcHRoID0gSW5maW5pdHk7XG4gICAgfSBlbHNlIGlmIChkZXB0aCA8PSAwKSB7XG4gICAgICByZXR1cm4gb3V0cHV0LmNvbmNhdChpbnB1dCk7XG4gICAgfVxuICAgIHZhciBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoaW5wdXQpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHMkMSh2YWx1ZSkpKSB7XG4gICAgICAgIC8vIEZsYXR0ZW4gY3VycmVudCBsZXZlbCBvZiBhcnJheSBvciBhcmd1bWVudHMgb2JqZWN0LlxuICAgICAgICBpZiAoZGVwdGggPiAxKSB7XG4gICAgICAgICAgZmxhdHRlbiQxKHZhbHVlLCBkZXB0aCAtIDEsIHN0cmljdCwgb3V0cHV0KTtcbiAgICAgICAgICBpZHggPSBvdXRwdXQubGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBqID0gMCwgbGVuID0gdmFsdWUubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChqIDwgbGVuKSBvdXRwdXRbaWR4KytdID0gdmFsdWVbaisrXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc3RyaWN0KSB7XG4gICAgICAgIG91dHB1dFtpZHgrK10gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8vIEJpbmQgYSBudW1iZXIgb2YgYW4gb2JqZWN0J3MgbWV0aG9kcyB0byB0aGF0IG9iamVjdC4gUmVtYWluaW5nIGFyZ3VtZW50c1xuICAvLyBhcmUgdGhlIG1ldGhvZCBuYW1lcyB0byBiZSBib3VuZC4gVXNlZnVsIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsYmFja3NcbiAgLy8gZGVmaW5lZCBvbiBhbiBvYmplY3QgYmVsb25nIHRvIGl0LlxuICB2YXIgYmluZEFsbCA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBrZXlzKSB7XG4gICAga2V5cyA9IGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpO1xuICAgIHZhciBpbmRleCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChpbmRleCA8IDEpIHRocm93IG5ldyBFcnJvcignYmluZEFsbCBtdXN0IGJlIHBhc3NlZCBmdW5jdGlvbiBuYW1lcycpO1xuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpbmRleF07XG4gICAgICBvYmpba2V5XSA9IGJpbmQob2JqW2tleV0sIG9iaik7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH0pO1xuXG4gIC8vIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuXG4gIGZ1bmN0aW9uIG1lbW9pemUoZnVuYywgaGFzaGVyKSB7XG4gICAgdmFyIG1lbW9pemUgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgIHZhciBjYWNoZSA9IG1lbW9pemUuY2FjaGU7XG4gICAgICB2YXIgYWRkcmVzcyA9ICcnICsgKGhhc2hlciA/IGhhc2hlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDoga2V5KTtcbiAgICAgIGlmICghaGFzJDEoY2FjaGUsIGFkZHJlc3MpKSBjYWNoZVthZGRyZXNzXSA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiBjYWNoZVthZGRyZXNzXTtcbiAgICB9O1xuICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICByZXR1cm4gbWVtb2l6ZTtcbiAgfVxuXG4gIC8vIERlbGF5cyBhIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gY2FsbHNcbiAgLy8gaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLlxuICB2YXIgZGVsYXkgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGZ1bmMsIHdhaXQsIGFyZ3MpIHtcbiAgICByZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH0sIHdhaXQpO1xuICB9KTtcblxuICAvLyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXNcbiAgLy8gY2xlYXJlZC5cbiAgdmFyIGRlZmVyID0gcGFydGlhbChkZWxheSwgXyQxLCAxKTtcblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24sIHRoYXQsIHdoZW4gaW52b2tlZCwgd2lsbCBvbmx5IGJlIHRyaWdnZXJlZCBhdCBtb3N0IG9uY2VcbiAgLy8gZHVyaW5nIGEgZ2l2ZW4gd2luZG93IG9mIHRpbWUuIE5vcm1hbGx5LCB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uIHdpbGwgcnVuXG4gIC8vIGFzIG11Y2ggYXMgaXQgY2FuLCB3aXRob3V0IGV2ZXIgZ29pbmcgbW9yZSB0aGFuIG9uY2UgcGVyIGB3YWl0YCBkdXJhdGlvbjtcbiAgLy8gYnV0IGlmIHlvdSdkIGxpa2UgdG8gZGlzYWJsZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBsZWFkaW5nIGVkZ2UsIHBhc3NcbiAgLy8gYHtsZWFkaW5nOiBmYWxzZX1gLiBUbyBkaXNhYmxlIGV4ZWN1dGlvbiBvbiB0aGUgdHJhaWxpbmcgZWRnZSwgZGl0dG8uXG4gIGZ1bmN0aW9uIHRocm90dGxlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGltZW91dCwgY29udGV4dCwgYXJncywgcmVzdWx0O1xuICAgIHZhciBwcmV2aW91cyA9IDA7XG4gICAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG5cbiAgICB2YXIgbGF0ZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgIHByZXZpb3VzID0gb3B0aW9ucy5sZWFkaW5nID09PSBmYWxzZSA/IDAgOiBub3coKTtcbiAgICAgIHRpbWVvdXQgPSBudWxsO1xuICAgICAgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIGlmICghdGltZW91dCkgY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgdGhyb3R0bGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgX25vdyA9IG5vdygpO1xuICAgICAgaWYgKCFwcmV2aW91cyAmJiBvcHRpb25zLmxlYWRpbmcgPT09IGZhbHNlKSBwcmV2aW91cyA9IF9ub3c7XG4gICAgICB2YXIgcmVtYWluaW5nID0gd2FpdCAtIChfbm93IC0gcHJldmlvdXMpO1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gYXJndW1lbnRzO1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8IHJlbWFpbmluZyA+IHdhaXQpIHtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBfbm93O1xuICAgICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MpO1xuICAgICAgICBpZiAoIXRpbWVvdXQpIGNvbnRleHQgPSBhcmdzID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpbWVvdXQgJiYgb3B0aW9ucy50cmFpbGluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQobGF0ZXIsIHJlbWFpbmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICB0aHJvdHRsZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBwcmV2aW91cyA9IDA7XG4gICAgICB0aW1lb3V0ID0gY29udGV4dCA9IGFyZ3MgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhyb3R0bGVkO1xuICB9XG5cbiAgLy8gV2hlbiBhIHNlcXVlbmNlIG9mIGNhbGxzIG9mIHRoZSByZXR1cm5lZCBmdW5jdGlvbiBlbmRzLCB0aGUgYXJndW1lbnRcbiAgLy8gZnVuY3Rpb24gaXMgdHJpZ2dlcmVkLiBUaGUgZW5kIG9mIGEgc2VxdWVuY2UgaXMgZGVmaW5lZCBieSB0aGUgYHdhaXRgXG4gIC8vIHBhcmFtZXRlci4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0aGUgYXJndW1lbnQgZnVuY3Rpb24gd2lsbCBiZVxuICAvLyB0cmlnZ2VyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VxdWVuY2UgaW5zdGVhZCBvZiBhdCB0aGUgZW5kLlxuICBmdW5jdGlvbiBkZWJvdW5jZShmdW5jLCB3YWl0LCBpbW1lZGlhdGUpIHtcbiAgICB2YXIgdGltZW91dCwgcHJldmlvdXMsIGFyZ3MsIHJlc3VsdCwgY29udGV4dDtcblxuICAgIHZhciBsYXRlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHBhc3NlZCA9IG5vdygpIC0gcHJldmlvdXM7XG4gICAgICBpZiAod2FpdCA+IHBhc3NlZCkge1xuICAgICAgICB0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCAtIHBhc3NlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpbW1lZGlhdGUpIHJlc3VsdCA9IGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgICAgIC8vIFRoaXMgY2hlY2sgaXMgbmVlZGVkIGJlY2F1c2UgYGZ1bmNgIGNhbiByZWN1cnNpdmVseSBpbnZva2UgYGRlYm91bmNlZGAuXG4gICAgICAgIGlmICghdGltZW91dCkgYXJncyA9IGNvbnRleHQgPSBudWxsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgZGVib3VuY2VkID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihfYXJncykge1xuICAgICAgY29udGV4dCA9IHRoaXM7XG4gICAgICBhcmdzID0gX2FyZ3M7XG4gICAgICBwcmV2aW91cyA9IG5vdygpO1xuICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGxhdGVyLCB3YWl0KTtcbiAgICAgICAgaWYgKGltbWVkaWF0ZSkgcmVzdWx0ID0gZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBkZWJvdW5jZWQuY2FuY2VsID0gZnVuY3Rpb24oKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gYXJncyA9IGNvbnRleHQgPSBudWxsO1xuICAgIH07XG5cbiAgICByZXR1cm4gZGVib3VuY2VkO1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3QgZnVuY3Rpb24gcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBzZWNvbmQsXG4gIC8vIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmRcbiAgLy8gY29uZGl0aW9uYWxseSBleGVjdXRlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cbiAgZnVuY3Rpb24gd3JhcChmdW5jLCB3cmFwcGVyKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwod3JhcHBlciwgZnVuYyk7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBwYXNzZWQtaW4gcHJlZGljYXRlLlxuICBmdW5jdGlvbiBuZWdhdGUocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICFwcmVkaWNhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIGEgbGlzdCBvZiBmdW5jdGlvbnMsIGVhY2hcbiAgLy8gY29uc3VtaW5nIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgZm9sbG93cy5cbiAgZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgc3RhcnQgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGkgPSBzdGFydDtcbiAgICAgIHZhciByZXN1bHQgPSBhcmdzW3N0YXJ0XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgd2hpbGUgKGktLSkgcmVzdWx0ID0gYXJnc1tpXS5jYWxsKHRoaXMsIHJlc3VsdCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIG9ubHkgYmUgZXhlY3V0ZWQgb24gYW5kIGFmdGVyIHRoZSBOdGggY2FsbC5cbiAgZnVuY3Rpb24gYWZ0ZXIodGltZXMsIGZ1bmMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA8IDEpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBvbmx5IGJlIGV4ZWN1dGVkIHVwIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlXG4gIC8vIE50aCBjYWxsLlxuICBmdW5jdGlvbiBiZWZvcmUodGltZXMsIGZ1bmMpIHtcbiAgICB2YXIgbWVtbztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoLS10aW1lcyA+IDApIHtcbiAgICAgICAgbWVtbyA9IGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lcyA8PSAxKSBmdW5jID0gbnVsbDtcbiAgICAgIHJldHVybiBtZW1vO1xuICAgIH07XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGF0IG1vc3Qgb25lIHRpbWUsIG5vIG1hdHRlciBob3dcbiAgLy8gb2Z0ZW4geW91IGNhbGwgaXQuIFVzZWZ1bCBmb3IgbGF6eSBpbml0aWFsaXphdGlvbi5cbiAgdmFyIG9uY2UgPSBwYXJ0aWFsKGJlZm9yZSwgMik7XG5cbiAgLy8gUmV0dXJucyB0aGUgZmlyc3Qga2V5IG9uIGFuIG9iamVjdCB0aGF0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbmRLZXkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9IGtleXMob2JqKSwga2V5O1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBfa2V5cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gX2tleXNbaV07XG4gICAgICBpZiAocHJlZGljYXRlKG9ialtrZXldLCBrZXksIG9iaikpIHJldHVybiBrZXk7XG4gICAgfVxuICB9XG5cbiAgLy8gSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyKGRpcikge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgICAgdmFyIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICB2YXIgaW5kZXggPSBkaXIgPiAwID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICBmb3IgKDsgaW5kZXggPj0gMCAmJiBpbmRleCA8IGxlbmd0aDsgaW5kZXggKz0gZGlyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSByZXR1cm4gaW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGZpcnN0IGluZGV4IG9uIGFuIGFycmF5LWxpa2UgdGhhdCBwYXNzZXMgYSB0cnV0aCB0ZXN0LlxuICB2YXIgZmluZEluZGV4ID0gY3JlYXRlUHJlZGljYXRlSW5kZXhGaW5kZXIoMSk7XG5cbiAgLy8gUmV0dXJucyB0aGUgbGFzdCBpbmRleCBvbiBhbiBhcnJheS1saWtlIHRoYXQgcGFzc2VzIGEgdHJ1dGggdGVzdC5cbiAgdmFyIGZpbmRMYXN0SW5kZXggPSBjcmVhdGVQcmVkaWNhdGVJbmRleEZpbmRlcigtMSk7XG5cbiAgLy8gVXNlIGEgY29tcGFyYXRvciBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IHRoZSBzbWFsbGVzdCBpbmRleCBhdCB3aGljaFxuICAvLyBhbiBvYmplY3Qgc2hvdWxkIGJlIGluc2VydGVkIHNvIGFzIHRvIG1haW50YWluIG9yZGVyLiBVc2VzIGJpbmFyeSBzZWFyY2guXG4gIGZ1bmN0aW9uIHNvcnRlZEluZGV4KGFycmF5LCBvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCwgMSk7XG4gICAgdmFyIHZhbHVlID0gaXRlcmF0ZWUob2JqKTtcbiAgICB2YXIgbG93ID0gMCwgaGlnaCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgd2hpbGUgKGxvdyA8IGhpZ2gpIHtcbiAgICAgIHZhciBtaWQgPSBNYXRoLmZsb29yKChsb3cgKyBoaWdoKSAvIDIpO1xuICAgICAgaWYgKGl0ZXJhdGVlKGFycmF5W21pZF0pIDwgdmFsdWUpIGxvdyA9IG1pZCArIDE7IGVsc2UgaGlnaCA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvdztcbiAgfVxuXG4gIC8vIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBgXy5pbmRleE9mYCBhbmQgYF8ubGFzdEluZGV4T2ZgIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gY3JlYXRlSW5kZXhGaW5kZXIoZGlyLCBwcmVkaWNhdGVGaW5kLCBzb3J0ZWRJbmRleCkge1xuICAgIHJldHVybiBmdW5jdGlvbihhcnJheSwgaXRlbSwgaWR4KSB7XG4gICAgICB2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChhcnJheSk7XG4gICAgICBpZiAodHlwZW9mIGlkeCA9PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAoZGlyID4gMCkge1xuICAgICAgICAgIGkgPSBpZHggPj0gMCA/IGlkeCA6IE1hdGgubWF4KGlkeCArIGxlbmd0aCwgaSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGVuZ3RoID0gaWR4ID49IDAgPyBNYXRoLm1pbihpZHggKyAxLCBsZW5ndGgpIDogaWR4ICsgbGVuZ3RoICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb3J0ZWRJbmRleCAmJiBpZHggJiYgbGVuZ3RoKSB7XG4gICAgICAgIGlkeCA9IHNvcnRlZEluZGV4KGFycmF5LCBpdGVtKTtcbiAgICAgICAgcmV0dXJuIGFycmF5W2lkeF0gPT09IGl0ZW0gPyBpZHggOiAtMTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgIGlkeCA9IHByZWRpY2F0ZUZpbmQoc2xpY2UuY2FsbChhcnJheSwgaSwgbGVuZ3RoKSwgaXNOYU4kMSk7XG4gICAgICAgIHJldHVybiBpZHggPj0gMCA/IGlkeCArIGkgOiAtMTtcbiAgICAgIH1cbiAgICAgIGZvciAoaWR4ID0gZGlyID4gMCA/IGkgOiBsZW5ndGggLSAxOyBpZHggPj0gMCAmJiBpZHggPCBsZW5ndGg7IGlkeCArPSBkaXIpIHtcbiAgICAgICAgaWYgKGFycmF5W2lkeF0gPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICB9XG4gICAgICByZXR1cm4gLTE7XG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYW4gaXRlbSBpbiBhbiBhcnJheSxcbiAgLy8gb3IgLTEgaWYgdGhlIGl0ZW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBhcnJheS5cbiAgLy8gSWYgdGhlIGFycmF5IGlzIGxhcmdlIGFuZCBhbHJlYWR5IGluIHNvcnQgb3JkZXIsIHBhc3MgYHRydWVgXG4gIC8vIGZvciAqKmlzU29ydGVkKiogdG8gdXNlIGJpbmFyeSBzZWFyY2guXG4gIHZhciBpbmRleE9mID0gY3JlYXRlSW5kZXhGaW5kZXIoMSwgZmluZEluZGV4LCBzb3J0ZWRJbmRleCk7XG5cbiAgLy8gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mIGFuIGl0ZW0gaW4gYW4gYXJyYXksXG4gIC8vIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuXG4gIHZhciBsYXN0SW5kZXhPZiA9IGNyZWF0ZUluZGV4RmluZGVyKC0xLCBmaW5kTGFzdEluZGV4KTtcblxuICAvLyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIGZpbmQob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIga2V5RmluZGVyID0gaXNBcnJheUxpa2Uob2JqKSA/IGZpbmRJbmRleCA6IGZpbmRLZXk7XG4gICAgdmFyIGtleSA9IGtleUZpbmRlcihvYmosIHByZWRpY2F0ZSwgY29udGV4dCk7XG4gICAgaWYgKGtleSAhPT0gdm9pZCAwICYmIGtleSAhPT0gLTEpIHJldHVybiBvYmpba2V5XTtcbiAgfVxuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmluZGA6IGdldHRpbmcgdGhlIGZpcnN0XG4gIC8vIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiBmaW5kV2hlcmUob2JqLCBhdHRycykge1xuICAgIHJldHVybiBmaW5kKG9iaiwgbWF0Y2hlcihhdHRycykpO1xuICB9XG5cbiAgLy8gVGhlIGNvcm5lcnN0b25lIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9ucywgYW4gYGVhY2hgXG4gIC8vIGltcGxlbWVudGF0aW9uLCBha2EgYGZvckVhY2hgLlxuICAvLyBIYW5kbGVzIHJhdyBvYmplY3RzIGluIGFkZGl0aW9uIHRvIGFycmF5LWxpa2VzLiBUcmVhdHMgYWxsXG4gIC8vIHNwYXJzZSBhcnJheS1saWtlcyBhcyBpZiB0aGV5IHdlcmUgZGVuc2UuXG4gIGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgIGl0ZXJhdGVlID0gb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgdmFyIGksIGxlbmd0aDtcbiAgICBpZiAoaXNBcnJheUxpa2Uob2JqKSkge1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gb2JqLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGl0ZXJhdGVlKG9ialtpXSwgaSwgb2JqKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9rZXlzID0ga2V5cyhvYmopO1xuICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gX2tleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaXRlcmF0ZWUob2JqW19rZXlzW2ldXSwgX2tleXNbaV0sIG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdGVlIHRvIGVhY2ggZWxlbWVudC5cbiAgZnVuY3Rpb24gbWFwKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgIGxlbmd0aCA9IChfa2V5cyB8fCBvYmopLmxlbmd0aCxcbiAgICAgICAgcmVzdWx0cyA9IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgcmVzdWx0c1tpbmRleF0gPSBpdGVyYXRlZShvYmpbY3VycmVudEtleV0sIGN1cnJlbnRLZXksIG9iaik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgLy8gSW50ZXJuYWwgaGVscGVyIHRvIGNyZWF0ZSBhIHJlZHVjaW5nIGZ1bmN0aW9uLCBpdGVyYXRpbmcgbGVmdCBvciByaWdodC5cbiAgZnVuY3Rpb24gY3JlYXRlUmVkdWNlKGRpcikge1xuICAgIC8vIFdyYXAgY29kZSB0aGF0IHJlYXNzaWducyBhcmd1bWVudCB2YXJpYWJsZXMgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiB0aGFuXG4gICAgLy8gdGhlIG9uZSB0aGF0IGFjY2Vzc2VzIGBhcmd1bWVudHMubGVuZ3RoYCB0byBhdm9pZCBhIHBlcmYgaGl0LiAoIzE5OTEpXG4gICAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBpbml0aWFsKSB7XG4gICAgICB2YXIgX2tleXMgPSAhaXNBcnJheUxpa2Uob2JqKSAmJiBrZXlzKG9iaiksXG4gICAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoLFxuICAgICAgICAgIGluZGV4ID0gZGlyID4gMCA/IDAgOiBsZW5ndGggLSAxO1xuICAgICAgaWYgKCFpbml0aWFsKSB7XG4gICAgICAgIG1lbW8gPSBvYmpbX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGRpcjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpbmRleCA+PSAwICYmIGluZGV4IDwgbGVuZ3RoOyBpbmRleCArPSBkaXIpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRLZXkgPSBfa2V5cyA/IF9rZXlzW2luZGV4XSA6IGluZGV4O1xuICAgICAgICBtZW1vID0gaXRlcmF0ZWUobWVtbywgb2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbihvYmosIGl0ZXJhdGVlLCBtZW1vLCBjb250ZXh0KSB7XG4gICAgICB2YXIgaW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMztcbiAgICAgIHJldHVybiByZWR1Y2VyKG9iaiwgb3B0aW1pemVDYihpdGVyYXRlZSwgY29udGV4dCwgNCksIG1lbW8sIGluaXRpYWwpO1xuICAgIH07XG4gIH1cblxuICAvLyAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBha2EgYGluamVjdGAsXG4gIC8vIG9yIGBmb2xkbGAuXG4gIHZhciByZWR1Y2UgPSBjcmVhdGVSZWR1Y2UoMSk7XG5cbiAgLy8gVGhlIHJpZ2h0LWFzc29jaWF0aXZlIHZlcnNpb24gb2YgcmVkdWNlLCBhbHNvIGtub3duIGFzIGBmb2xkcmAuXG4gIHZhciByZWR1Y2VSaWdodCA9IGNyZWF0ZVJlZHVjZSgtMSk7XG5cbiAgLy8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgdGhhdCBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZmlsdGVyKG9iaiwgcHJlZGljYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGxpc3QpIHtcbiAgICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBsaXN0KSkgcmVzdWx0cy5wdXNoKHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuXG4gIGZ1bmN0aW9uIHJlamVjdChvYmosIHByZWRpY2F0ZSwgY29udGV4dCkge1xuICAgIHJldHVybiBmaWx0ZXIob2JqLCBuZWdhdGUoY2IocHJlZGljYXRlKSksIGNvbnRleHQpO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgYWxsIG9mIHRoZSBlbGVtZW50cyBwYXNzIGEgdHJ1dGggdGVzdC5cbiAgZnVuY3Rpb24gZXZlcnkob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmICghcHJlZGljYXRlKG9ialtjdXJyZW50S2V5XSwgY3VycmVudEtleSwgb2JqKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIERldGVybWluZSBpZiBhdCBsZWFzdCBvbmUgZWxlbWVudCBpbiB0aGUgb2JqZWN0IHBhc3NlcyBhIHRydXRoIHRlc3QuXG4gIGZ1bmN0aW9uIHNvbWUob2JqLCBwcmVkaWNhdGUsIGNvbnRleHQpIHtcbiAgICBwcmVkaWNhdGUgPSBjYihwcmVkaWNhdGUsIGNvbnRleHQpO1xuICAgIHZhciBfa2V5cyA9ICFpc0FycmF5TGlrZShvYmopICYmIGtleXMob2JqKSxcbiAgICAgICAgbGVuZ3RoID0gKF9rZXlzIHx8IG9iaikubGVuZ3RoO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHZhciBjdXJyZW50S2V5ID0gX2tleXMgPyBfa2V5c1tpbmRleF0gOiBpbmRleDtcbiAgICAgIGlmIChwcmVkaWNhdGUob2JqW2N1cnJlbnRLZXldLCBjdXJyZW50S2V5LCBvYmopKSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhcnJheSBvciBvYmplY3QgY29udGFpbnMgYSBnaXZlbiBpdGVtICh1c2luZyBgPT09YCkuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zKG9iaiwgaXRlbSwgZnJvbUluZGV4LCBndWFyZCkge1xuICAgIGlmICghaXNBcnJheUxpa2Uob2JqKSkgb2JqID0gdmFsdWVzKG9iaik7XG4gICAgaWYgKHR5cGVvZiBmcm9tSW5kZXggIT0gJ251bWJlcicgfHwgZ3VhcmQpIGZyb21JbmRleCA9IDA7XG4gICAgcmV0dXJuIGluZGV4T2Yob2JqLCBpdGVtLCBmcm9tSW5kZXgpID49IDA7XG4gIH1cblxuICAvLyBJbnZva2UgYSBtZXRob2QgKHdpdGggYXJndW1lbnRzKSBvbiBldmVyeSBpdGVtIGluIGEgY29sbGVjdGlvbi5cbiAgdmFyIGludm9rZSA9IHJlc3RBcmd1bWVudHMoZnVuY3Rpb24ob2JqLCBwYXRoLCBhcmdzKSB7XG4gICAgdmFyIGNvbnRleHRQYXRoLCBmdW5jO1xuICAgIGlmIChpc0Z1bmN0aW9uJDEocGF0aCkpIHtcbiAgICAgIGZ1bmMgPSBwYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXRoID0gdG9QYXRoKHBhdGgpO1xuICAgICAgY29udGV4dFBhdGggPSBwYXRoLnNsaWNlKDAsIC0xKTtcbiAgICAgIHBhdGggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBtYXAob2JqLCBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgICB2YXIgbWV0aG9kID0gZnVuYztcbiAgICAgIGlmICghbWV0aG9kKSB7XG4gICAgICAgIGlmIChjb250ZXh0UGF0aCAmJiBjb250ZXh0UGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICBjb250ZXh0ID0gZGVlcEdldChjb250ZXh0LCBjb250ZXh0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgcmV0dXJuIHZvaWQgMDtcbiAgICAgICAgbWV0aG9kID0gY29udGV4dFtwYXRoXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtZXRob2QgPT0gbnVsbCA/IG1ldGhvZCA6IG1ldGhvZC5hcHBseShjb250ZXh0LCBhcmdzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQ29udmVuaWVuY2UgdmVyc2lvbiBvZiBhIGNvbW1vbiB1c2UgY2FzZSBvZiBgXy5tYXBgOiBmZXRjaGluZyBhIHByb3BlcnR5LlxuICBmdW5jdGlvbiBwbHVjayhvYmosIGtleSkge1xuICAgIHJldHVybiBtYXAob2JqLCBwcm9wZXJ0eShrZXkpKTtcbiAgfVxuXG4gIC8vIENvbnZlbmllbmNlIHZlcnNpb24gb2YgYSBjb21tb24gdXNlIGNhc2Ugb2YgYF8uZmlsdGVyYDogc2VsZWN0aW5nIG9ubHlcbiAgLy8gb2JqZWN0cyBjb250YWluaW5nIHNwZWNpZmljIGBrZXk6dmFsdWVgIHBhaXJzLlxuICBmdW5jdGlvbiB3aGVyZShvYmosIGF0dHJzKSB7XG4gICAgcmV0dXJuIGZpbHRlcihvYmosIG1hdGNoZXIoYXR0cnMpKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWF4aW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgZnVuY3Rpb24gbWF4KG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gLUluZmluaXR5LCBsYXN0Q29tcHV0ZWQgPSAtSW5maW5pdHksXG4gICAgICAgIHZhbHVlLCBjb21wdXRlZDtcbiAgICBpZiAoaXRlcmF0ZWUgPT0gbnVsbCB8fCB0eXBlb2YgaXRlcmF0ZWUgPT0gJ251bWJlcicgJiYgdHlwZW9mIG9ialswXSAhPSAnb2JqZWN0JyAmJiBvYmogIT0gbnVsbCkge1xuICAgICAgb2JqID0gaXNBcnJheUxpa2Uob2JqKSA/IG9iaiA6IHZhbHVlcyhvYmopO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IG9iai5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IG9ialtpXTtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgPiByZXN1bHQpIHtcbiAgICAgICAgICByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2LCBpbmRleCwgbGlzdCkge1xuICAgICAgICBjb21wdXRlZCA9IGl0ZXJhdGVlKHYsIGluZGV4LCBsaXN0KTtcbiAgICAgICAgaWYgKGNvbXB1dGVkID4gbGFzdENvbXB1dGVkIHx8IGNvbXB1dGVkID09PSAtSW5maW5pdHkgJiYgcmVzdWx0ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgICByZXN1bHQgPSB2O1xuICAgICAgICAgIGxhc3RDb21wdXRlZCA9IGNvbXB1dGVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbWluaW11bSBlbGVtZW50IChvciBlbGVtZW50LWJhc2VkIGNvbXB1dGF0aW9uKS5cbiAgZnVuY3Rpb24gbWluKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpIHtcbiAgICB2YXIgcmVzdWx0ID0gSW5maW5pdHksIGxhc3RDb21wdXRlZCA9IEluZmluaXR5LFxuICAgICAgICB2YWx1ZSwgY29tcHV0ZWQ7XG4gICAgaWYgKGl0ZXJhdGVlID09IG51bGwgfHwgdHlwZW9mIGl0ZXJhdGVlID09ICdudW1iZXInICYmIHR5cGVvZiBvYmpbMF0gIT0gJ29iamVjdCcgJiYgb2JqICE9IG51bGwpIHtcbiAgICAgIG9iaiA9IGlzQXJyYXlMaWtlKG9iaikgPyBvYmogOiB2YWx1ZXMob2JqKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBvYmoubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBvYmpbaV07XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlIDwgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXRlcmF0ZWUgPSBjYihpdGVyYXRlZSwgY29udGV4dCk7XG4gICAgICBlYWNoKG9iaiwgZnVuY3Rpb24odiwgaW5kZXgsIGxpc3QpIHtcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSh2LCBpbmRleCwgbGlzdCk7XG4gICAgICAgIGlmIChjb21wdXRlZCA8IGxhc3RDb21wdXRlZCB8fCBjb21wdXRlZCA9PT0gSW5maW5pdHkgJiYgcmVzdWx0ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgIHJlc3VsdCA9IHY7XG4gICAgICAgICAgbGFzdENvbXB1dGVkID0gY29tcHV0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU2FtcGxlICoqbioqIHJhbmRvbSB2YWx1ZXMgZnJvbSBhIGNvbGxlY3Rpb24gdXNpbmcgdGhlIG1vZGVybiB2ZXJzaW9uIG9mIHRoZVxuICAvLyBbRmlzaGVyLVlhdGVzIHNodWZmbGVdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlcuKAk1lhdGVzX3NodWZmbGUpLlxuICAvLyBJZiAqKm4qKiBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIGEgc2luZ2xlIHJhbmRvbSBlbGVtZW50LlxuICAvLyBUaGUgaW50ZXJuYWwgYGd1YXJkYCBhcmd1bWVudCBhbGxvd3MgaXQgdG8gd29yayB3aXRoIGBfLm1hcGAuXG4gIGZ1bmN0aW9uIHNhbXBsZShvYmosIG4sIGd1YXJkKSB7XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkge1xuICAgICAgaWYgKCFpc0FycmF5TGlrZShvYmopKSBvYmogPSB2YWx1ZXMob2JqKTtcbiAgICAgIHJldHVybiBvYmpbcmFuZG9tKG9iai5sZW5ndGggLSAxKV07XG4gICAgfVxuICAgIHZhciBzYW1wbGUgPSBpc0FycmF5TGlrZShvYmopID8gY2xvbmUob2JqKSA6IHZhbHVlcyhvYmopO1xuICAgIHZhciBsZW5ndGggPSBnZXRMZW5ndGgoc2FtcGxlKTtcbiAgICBuID0gTWF0aC5tYXgoTWF0aC5taW4obiwgbGVuZ3RoKSwgMCk7XG4gICAgdmFyIGxhc3QgPSBsZW5ndGggLSAxO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBuOyBpbmRleCsrKSB7XG4gICAgICB2YXIgcmFuZCA9IHJhbmRvbShpbmRleCwgbGFzdCk7XG4gICAgICB2YXIgdGVtcCA9IHNhbXBsZVtpbmRleF07XG4gICAgICBzYW1wbGVbaW5kZXhdID0gc2FtcGxlW3JhbmRdO1xuICAgICAgc2FtcGxlW3JhbmRdID0gdGVtcDtcbiAgICB9XG4gICAgcmV0dXJuIHNhbXBsZS5zbGljZSgwLCBuKTtcbiAgfVxuXG4gIC8vIFNodWZmbGUgYSBjb2xsZWN0aW9uLlxuICBmdW5jdGlvbiBzaHVmZmxlKG9iaikge1xuICAgIHJldHVybiBzYW1wbGUob2JqLCBJbmZpbml0eSk7XG4gIH1cblxuICAvLyBTb3J0IHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24gcHJvZHVjZWQgYnkgYW4gaXRlcmF0ZWUuXG4gIGZ1bmN0aW9uIHNvcnRCeShvYmosIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICByZXR1cm4gcGx1Y2sobWFwKG9iaiwgZnVuY3Rpb24odmFsdWUsIGtleSwgbGlzdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBpbmRleDogaW5kZXgrKyxcbiAgICAgICAgY3JpdGVyaWE6IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGxpc3QpXG4gICAgICB9O1xuICAgIH0pLnNvcnQoZnVuY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICAgIHZhciBhID0gbGVmdC5jcml0ZXJpYTtcbiAgICAgIHZhciBiID0gcmlnaHQuY3JpdGVyaWE7XG4gICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICBpZiAoYSA+IGIgfHwgYSA9PT0gdm9pZCAwKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPCBiIHx8IGIgPT09IHZvaWQgMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxlZnQuaW5kZXggLSByaWdodC5pbmRleDtcbiAgICB9KSwgJ3ZhbHVlJyk7XG4gIH1cblxuICAvLyBBbiBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBhZ2dyZWdhdGUgXCJncm91cCBieVwiIG9wZXJhdGlvbnMuXG4gIGZ1bmN0aW9uIGdyb3VwKGJlaGF2aW9yLCBwYXJ0aXRpb24pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ob2JqLCBpdGVyYXRlZSwgY29udGV4dCkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcnRpdGlvbiA/IFtbXSwgW11dIDoge307XG4gICAgICBpdGVyYXRlZSA9IGNiKGl0ZXJhdGVlLCBjb250ZXh0KTtcbiAgICAgIGVhY2gob2JqLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgdmFyIGtleSA9IGl0ZXJhdGVlKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICAgICAgYmVoYXZpb3IocmVzdWx0LCB2YWx1ZSwga2V5KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICB9XG5cbiAgLy8gR3JvdXBzIHRoZSBvYmplY3QncyB2YWx1ZXMgYnkgYSBjcml0ZXJpb24uIFBhc3MgZWl0aGVyIGEgc3RyaW5nIGF0dHJpYnV0ZVxuICAvLyB0byBncm91cCBieSwgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGNyaXRlcmlvbi5cbiAgdmFyIGdyb3VwQnkgPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBrZXkpIHtcbiAgICBpZiAoaGFzJDEocmVzdWx0LCBrZXkpKSByZXN1bHRba2V5XS5wdXNoKHZhbHVlKTsgZWxzZSByZXN1bHRba2V5XSA9IFt2YWx1ZV07XG4gIH0pO1xuXG4gIC8vIEluZGV4ZXMgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiwgc2ltaWxhciB0byBgXy5ncm91cEJ5YCwgYnV0IGZvclxuICAvLyB3aGVuIHlvdSBrbm93IHRoYXQgeW91ciBpbmRleCB2YWx1ZXMgd2lsbCBiZSB1bmlxdWUuXG4gIHZhciBpbmRleEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgfSk7XG5cbiAgLy8gQ291bnRzIGluc3RhbmNlcyBvZiBhbiBvYmplY3QgdGhhdCBncm91cCBieSBhIGNlcnRhaW4gY3JpdGVyaW9uLiBQYXNzXG4gIC8vIGVpdGhlciBhIHN0cmluZyBhdHRyaWJ1dGUgdG8gY291bnQgYnksIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZVxuICAvLyBjcml0ZXJpb24uXG4gIHZhciBjb3VudEJ5ID0gZ3JvdXAoZnVuY3Rpb24ocmVzdWx0LCB2YWx1ZSwga2V5KSB7XG4gICAgaWYgKGhhcyQxKHJlc3VsdCwga2V5KSkgcmVzdWx0W2tleV0rKzsgZWxzZSByZXN1bHRba2V5XSA9IDE7XG4gIH0pO1xuXG4gIC8vIFNwbGl0IGEgY29sbGVjdGlvbiBpbnRvIHR3byBhcnJheXM6IG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgcGFzcyB0aGUgZ2l2ZW5cbiAgLy8gdHJ1dGggdGVzdCwgYW5kIG9uZSB3aG9zZSBlbGVtZW50cyBhbGwgZG8gbm90IHBhc3MgdGhlIHRydXRoIHRlc3QuXG4gIHZhciBwYXJ0aXRpb24gPSBncm91cChmdW5jdGlvbihyZXN1bHQsIHZhbHVlLCBwYXNzKSB7XG4gICAgcmVzdWx0W3Bhc3MgPyAwIDogMV0ucHVzaCh2YWx1ZSk7XG4gIH0sIHRydWUpO1xuXG4gIC8vIFNhZmVseSBjcmVhdGUgYSByZWFsLCBsaXZlIGFycmF5IGZyb20gYW55dGhpbmcgaXRlcmFibGUuXG4gIHZhciByZVN0clN5bWJvbCA9IC9bXlxcdWQ4MDAtXFx1ZGZmZl18W1xcdWQ4MDAtXFx1ZGJmZl1bXFx1ZGMwMC1cXHVkZmZmXXxbXFx1ZDgwMC1cXHVkZmZmXS9nO1xuICBmdW5jdGlvbiB0b0FycmF5KG9iaikge1xuICAgIGlmICghb2JqKSByZXR1cm4gW107XG4gICAgaWYgKGlzQXJyYXkob2JqKSkgcmV0dXJuIHNsaWNlLmNhbGwob2JqKTtcbiAgICBpZiAoaXNTdHJpbmcob2JqKSkge1xuICAgICAgLy8gS2VlcCBzdXJyb2dhdGUgcGFpciBjaGFyYWN0ZXJzIHRvZ2V0aGVyLlxuICAgICAgcmV0dXJuIG9iai5tYXRjaChyZVN0clN5bWJvbCk7XG4gICAgfVxuICAgIGlmIChpc0FycmF5TGlrZShvYmopKSByZXR1cm4gbWFwKG9iaiwgaWRlbnRpdHkpO1xuICAgIHJldHVybiB2YWx1ZXMob2JqKTtcbiAgfVxuXG4gIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgY29sbGVjdGlvbi5cbiAgZnVuY3Rpb24gc2l6ZShvYmopIHtcbiAgICBpZiAob2JqID09IG51bGwpIHJldHVybiAwO1xuICAgIHJldHVybiBpc0FycmF5TGlrZShvYmopID8gb2JqLmxlbmd0aCA6IGtleXMob2JqKS5sZW5ndGg7XG4gIH1cblxuICAvLyBJbnRlcm5hbCBgXy5waWNrYCBoZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYGtleWAgaXMgYW4gZW51bWVyYWJsZVxuICAvLyBwcm9wZXJ0eSBuYW1lIG9mIGBvYmpgLlxuICBmdW5jdGlvbiBrZXlJbk9iaih2YWx1ZSwga2V5LCBvYmopIHtcbiAgICByZXR1cm4ga2V5IGluIG9iajtcbiAgfVxuXG4gIC8vIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBvbmx5IGNvbnRhaW5pbmcgdGhlIGFsbG93ZWQgcHJvcGVydGllcy5cbiAgdmFyIHBpY2sgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciByZXN1bHQgPSB7fSwgaXRlcmF0ZWUgPSBrZXlzWzBdO1xuICAgIGlmIChvYmogPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDtcbiAgICBpZiAoaXNGdW5jdGlvbiQxKGl0ZXJhdGVlKSkge1xuICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkgaXRlcmF0ZWUgPSBvcHRpbWl6ZUNiKGl0ZXJhdGVlLCBrZXlzWzFdKTtcbiAgICAgIGtleXMgPSBhbGxLZXlzKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdGVlID0ga2V5SW5PYmo7XG4gICAgICBrZXlzID0gZmxhdHRlbiQxKGtleXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgICBvYmogPSBPYmplY3Qob2JqKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGtleXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgdmFyIHZhbHVlID0gb2JqW2tleV07XG4gICAgICBpZiAoaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqKSkgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGhvdXQgdGhlIGRpc2FsbG93ZWQgcHJvcGVydGllcy5cbiAgdmFyIG9taXQgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKG9iaiwga2V5cykge1xuICAgIHZhciBpdGVyYXRlZSA9IGtleXNbMF0sIGNvbnRleHQ7XG4gICAgaWYgKGlzRnVuY3Rpb24kMShpdGVyYXRlZSkpIHtcbiAgICAgIGl0ZXJhdGVlID0gbmVnYXRlKGl0ZXJhdGVlKTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIGNvbnRleHQgPSBrZXlzWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzID0gbWFwKGZsYXR0ZW4kMShrZXlzLCBmYWxzZSwgZmFsc2UpLCBTdHJpbmcpO1xuICAgICAgaXRlcmF0ZWUgPSBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgICAgIHJldHVybiAhY29udGFpbnMoa2V5cywga2V5KTtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBwaWNrKG9iaiwgaXRlcmF0ZWUsIGNvbnRleHQpO1xuICB9KTtcblxuICAvLyBSZXR1cm5zIGV2ZXJ5dGhpbmcgYnV0IHRoZSBsYXN0IGVudHJ5IG9mIHRoZSBhcnJheS4gRXNwZWNpYWxseSB1c2VmdWwgb25cbiAgLy8gdGhlIGFyZ3VtZW50cyBvYmplY3QuIFBhc3NpbmcgKipuKiogd2lsbCByZXR1cm4gYWxsIHRoZSB2YWx1ZXMgaW5cbiAgLy8gdGhlIGFycmF5LCBleGNsdWRpbmcgdGhlIGxhc3QgTi5cbiAgZnVuY3Rpb24gaW5pdGlhbChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICByZXR1cm4gc2xpY2UuY2FsbChhcnJheSwgMCwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gKG4gPT0gbnVsbCB8fCBndWFyZCA/IDEgOiBuKSkpO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5LiBQYXNzaW5nICoqbioqIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuIFRoZSAqKmd1YXJkKiogY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsgd2l0aCBgXy5tYXBgLlxuICBmdW5jdGlvbiBmaXJzdChhcnJheSwgbiwgZ3VhcmQpIHtcbiAgICBpZiAoYXJyYXkgPT0gbnVsbCB8fCBhcnJheS5sZW5ndGggPCAxKSByZXR1cm4gbiA9PSBudWxsIHx8IGd1YXJkID8gdm9pZCAwIDogW107XG4gICAgaWYgKG4gPT0gbnVsbCB8fCBndWFyZCkgcmV0dXJuIGFycmF5WzBdO1xuICAgIHJldHVybiBpbml0aWFsKGFycmF5LCBhcnJheS5sZW5ndGggLSBuKTtcbiAgfVxuXG4gIC8vIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBgYXJyYXlgLiBFc3BlY2lhbGx5IHVzZWZ1bCBvblxuICAvLyB0aGUgYGFyZ3VtZW50c2Agb2JqZWN0LiBQYXNzaW5nIGFuICoqbioqIHdpbGwgcmV0dXJuIHRoZSByZXN0IE4gdmFsdWVzIGluIHRoZVxuICAvLyBgYXJyYXlgLlxuICBmdW5jdGlvbiByZXN0KGFycmF5LCBuLCBndWFyZCkge1xuICAgIHJldHVybiBzbGljZS5jYWxsKGFycmF5LCBuID09IG51bGwgfHwgZ3VhcmQgPyAxIDogbik7XG4gIH1cblxuICAvLyBHZXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBhcnJheS4gUGFzc2luZyAqKm4qKiB3aWxsIHJldHVybiB0aGUgbGFzdCBOXG4gIC8vIHZhbHVlcyBpbiB0aGUgYXJyYXkuXG4gIGZ1bmN0aW9uIGxhc3QoYXJyYXksIG4sIGd1YXJkKSB7XG4gICAgaWYgKGFycmF5ID09IG51bGwgfHwgYXJyYXkubGVuZ3RoIDwgMSkgcmV0dXJuIG4gPT0gbnVsbCB8fCBndWFyZCA/IHZvaWQgMCA6IFtdO1xuICAgIGlmIChuID09IG51bGwgfHwgZ3VhcmQpIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gcmVzdChhcnJheSwgTWF0aC5tYXgoMCwgYXJyYXkubGVuZ3RoIC0gbikpO1xuICB9XG5cbiAgLy8gVHJpbSBvdXQgYWxsIGZhbHN5IHZhbHVlcyBmcm9tIGFuIGFycmF5LlxuICBmdW5jdGlvbiBjb21wYWN0KGFycmF5KSB7XG4gICAgcmV0dXJuIGZpbHRlcihhcnJheSwgQm9vbGVhbik7XG4gIH1cblxuICAvLyBGbGF0dGVuIG91dCBhbiBhcnJheSwgZWl0aGVyIHJlY3Vyc2l2ZWx5IChieSBkZWZhdWx0KSwgb3IgdXAgdG8gYGRlcHRoYC5cbiAgLy8gUGFzc2luZyBgdHJ1ZWAgb3IgYGZhbHNlYCBhcyBgZGVwdGhgIG1lYW5zIGAxYCBvciBgSW5maW5pdHlgLCByZXNwZWN0aXZlbHkuXG4gIGZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXksIGRlcHRoKSB7XG4gICAgcmV0dXJuIGZsYXR0ZW4kMShhcnJheSwgZGVwdGgsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIFRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBvbmUgYXJyYXkgYW5kIGEgbnVtYmVyIG9mIG90aGVyIGFycmF5cy5cbiAgLy8gT25seSB0aGUgZWxlbWVudHMgcHJlc2VudCBpbiBqdXN0IHRoZSBmaXJzdCBhcnJheSB3aWxsIHJlbWFpbi5cbiAgdmFyIGRpZmZlcmVuY2UgPSByZXN0QXJndW1lbnRzKGZ1bmN0aW9uKGFycmF5LCByZXN0KSB7XG4gICAgcmVzdCA9IGZsYXR0ZW4kMShyZXN0LCB0cnVlLCB0cnVlKTtcbiAgICByZXR1cm4gZmlsdGVyKGFycmF5LCBmdW5jdGlvbih2YWx1ZSl7XG4gICAgICByZXR1cm4gIWNvbnRhaW5zKHJlc3QsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gUmV0dXJuIGEgdmVyc2lvbiBvZiB0aGUgYXJyYXkgdGhhdCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgdmFsdWUocykuXG4gIHZhciB3aXRob3V0ID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheSwgb3RoZXJBcnJheXMpIHtcbiAgICByZXR1cm4gZGlmZmVyZW5jZShhcnJheSwgb3RoZXJBcnJheXMpO1xuICB9KTtcblxuICAvLyBQcm9kdWNlIGEgZHVwbGljYXRlLWZyZWUgdmVyc2lvbiBvZiB0aGUgYXJyYXkuIElmIHRoZSBhcnJheSBoYXMgYWxyZWFkeVxuICAvLyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uXG4gIC8vIFRoZSBmYXN0ZXIgYWxnb3JpdGhtIHdpbGwgbm90IHdvcmsgd2l0aCBhbiBpdGVyYXRlZSBpZiB0aGUgaXRlcmF0ZWVcbiAgLy8gaXMgbm90IGEgb25lLXRvLW9uZSBmdW5jdGlvbiwgc28gcHJvdmlkaW5nIGFuIGl0ZXJhdGVlIHdpbGwgZGlzYWJsZVxuICAvLyB0aGUgZmFzdGVyIGFsZ29yaXRobS5cbiAgZnVuY3Rpb24gdW5pcShhcnJheSwgaXNTb3J0ZWQsIGl0ZXJhdGVlLCBjb250ZXh0KSB7XG4gICAgaWYgKCFpc0Jvb2xlYW4oaXNTb3J0ZWQpKSB7XG4gICAgICBjb250ZXh0ID0gaXRlcmF0ZWU7XG4gICAgICBpdGVyYXRlZSA9IGlzU29ydGVkO1xuICAgICAgaXNTb3J0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGl0ZXJhdGVlICE9IG51bGwpIGl0ZXJhdGVlID0gY2IoaXRlcmF0ZWUsIGNvbnRleHQpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBnZXRMZW5ndGgoYXJyYXkpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldLFxuICAgICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPyBpdGVyYXRlZSh2YWx1ZSwgaSwgYXJyYXkpIDogdmFsdWU7XG4gICAgICBpZiAoaXNTb3J0ZWQgJiYgIWl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghaSB8fCBzZWVuICE9PSBjb21wdXRlZCkgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgICAgICBzZWVuID0gY29tcHV0ZWQ7XG4gICAgICB9IGVsc2UgaWYgKGl0ZXJhdGVlKSB7XG4gICAgICAgIGlmICghY29udGFpbnMoc2VlbiwgY29tcHV0ZWQpKSB7XG4gICAgICAgICAgc2Vlbi5wdXNoKGNvbXB1dGVkKTtcbiAgICAgICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zKHJlc3VsdCwgdmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyB0aGUgdW5pb246IGVhY2ggZGlzdGluY3QgZWxlbWVudCBmcm9tIGFsbCBvZlxuICAvLyB0aGUgcGFzc2VkLWluIGFycmF5cy5cbiAgdmFyIHVuaW9uID0gcmVzdEFyZ3VtZW50cyhmdW5jdGlvbihhcnJheXMpIHtcbiAgICByZXR1cm4gdW5pcShmbGF0dGVuJDEoYXJyYXlzLCB0cnVlLCB0cnVlKSk7XG4gIH0pO1xuXG4gIC8vIFByb2R1Y2UgYW4gYXJyYXkgdGhhdCBjb250YWlucyBldmVyeSBpdGVtIHNoYXJlZCBiZXR3ZWVuIGFsbCB0aGVcbiAgLy8gcGFzc2VkLWluIGFycmF5cy5cbiAgZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGFycmF5KSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBhcmdzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2V0TGVuZ3RoKGFycmF5KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgICAgaWYgKGNvbnRhaW5zKHJlc3VsdCwgaXRlbSkpIGNvbnRpbnVlO1xuICAgICAgdmFyIGo7XG4gICAgICBmb3IgKGogPSAxOyBqIDwgYXJnc0xlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmICghY29udGFpbnMoYXJndW1lbnRzW2pdLCBpdGVtKSkgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoaiA9PT0gYXJnc0xlbmd0aCkgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBDb21wbGVtZW50IG9mIHppcC4gVW56aXAgYWNjZXB0cyBhbiBhcnJheSBvZiBhcnJheXMgYW5kIGdyb3Vwc1xuICAvLyBlYWNoIGFycmF5J3MgZWxlbWVudHMgb24gc2hhcmVkIGluZGljZXMuXG4gIGZ1bmN0aW9uIHVuemlwKGFycmF5KSB7XG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ICYmIG1heChhcnJheSwgZ2V0TGVuZ3RoKS5sZW5ndGggfHwgMDtcbiAgICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIHJlc3VsdFtpbmRleF0gPSBwbHVjayhhcnJheSwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZVxuICAvLyBhbiBpbmRleCBnbyB0b2dldGhlci5cbiAgdmFyIHppcCA9IHJlc3RBcmd1bWVudHModW56aXApO1xuXG4gIC8vIENvbnZlcnRzIGxpc3RzIGludG8gb2JqZWN0cy4gUGFzcyBlaXRoZXIgYSBzaW5nbGUgYXJyYXkgb2YgYFtrZXksIHZhbHVlXWBcbiAgLy8gcGFpcnMsIG9yIHR3byBwYXJhbGxlbCBhcnJheXMgb2YgdGhlIHNhbWUgbGVuZ3RoIC0tIG9uZSBvZiBrZXlzLCBhbmQgb25lIG9mXG4gIC8vIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcy4gUGFzc2luZyBieSBwYWlycyBpcyB0aGUgcmV2ZXJzZSBvZiBgXy5wYWlyc2AuXG4gIGZ1bmN0aW9uIG9iamVjdChsaXN0LCB2YWx1ZXMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGdldExlbmd0aChsaXN0KTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldXSA9IHZhbHVlc1tpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtsaXN0W2ldWzBdXSA9IGxpc3RbaV1bMV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBHZW5lcmF0ZSBhbiBpbnRlZ2VyIEFycmF5IGNvbnRhaW5pbmcgYW4gYXJpdGhtZXRpYyBwcm9ncmVzc2lvbi4gQSBwb3J0IG9mXG4gIC8vIHRoZSBuYXRpdmUgUHl0aG9uIGByYW5nZSgpYCBmdW5jdGlvbi4gU2VlXG4gIC8vIFt0aGUgUHl0aG9uIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjcmFuZ2UpLlxuICBmdW5jdGlvbiByYW5nZShzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIGlmIChzdG9wID09IG51bGwpIHtcbiAgICAgIHN0b3AgPSBzdGFydCB8fCAwO1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICBpZiAoIXN0ZXApIHtcbiAgICAgIHN0ZXAgPSBzdG9wIDwgc3RhcnQgPyAtMSA6IDE7XG4gICAgfVxuXG4gICAgdmFyIGxlbmd0aCA9IE1hdGgubWF4KE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApLCAwKTtcbiAgICB2YXIgcmFuZ2UgPSBBcnJheShsZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuZ3RoOyBpZHgrKywgc3RhcnQgKz0gc3RlcCkge1xuICAgICAgcmFuZ2VbaWR4XSA9IHN0YXJ0O1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZTtcbiAgfVxuXG4gIC8vIENodW5rIGEgc2luZ2xlIGFycmF5IGludG8gbXVsdGlwbGUgYXJyYXlzLCBlYWNoIGNvbnRhaW5pbmcgYGNvdW50YCBvciBmZXdlclxuICAvLyBpdGVtcy5cbiAgZnVuY3Rpb24gY2h1bmsoYXJyYXksIGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPCAxKSByZXR1cm4gW107XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaChzbGljZS5jYWxsKGFycmF5LCBpLCBpICs9IGNvdW50KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY29udGludWUgY2hhaW5pbmcgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gIGZ1bmN0aW9uIGNoYWluUmVzdWx0KGluc3RhbmNlLCBvYmopIHtcbiAgICByZXR1cm4gaW5zdGFuY2UuX2NoYWluID8gXyQxKG9iaikuY2hhaW4oKSA6IG9iajtcbiAgfVxuXG4gIC8vIEFkZCB5b3VyIG93biBjdXN0b20gZnVuY3Rpb25zIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC5cbiAgZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gICAgZWFjaChmdW5jdGlvbnMob2JqKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGZ1bmMgPSBfJDFbbmFtZV0gPSBvYmpbbmFtZV07XG4gICAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW3RoaXMuX3dyYXBwZWRdO1xuICAgICAgICBwdXNoLmFwcGx5KGFyZ3MsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJldHVybiBjaGFpblJlc3VsdCh0aGlzLCBmdW5jLmFwcGx5KF8kMSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gXyQxO1xuICB9XG5cbiAgLy8gQWRkIGFsbCBtdXRhdG9yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgbWV0aG9kID0gQXJyYXlQcm90b1tuYW1lXTtcbiAgICBfJDEucHJvdG90eXBlW25hbWVdID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgb2JqID0gdGhpcy5fd3JhcHBlZDtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgICBpZiAoKG5hbWUgPT09ICdzaGlmdCcgfHwgbmFtZSA9PT0gJ3NwbGljZScpICYmIG9iai5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgb2JqWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2hhaW5SZXN1bHQodGhpcywgb2JqKTtcbiAgICB9O1xuICB9KTtcblxuICAvLyBBZGQgYWxsIGFjY2Vzc29yIGBBcnJheWAgZnVuY3Rpb25zIHRvIHRoZSB3cmFwcGVyLlxuICBlYWNoKFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgZnVuY3Rpb24obmFtZSkge1xuICAgIHZhciBtZXRob2QgPSBBcnJheVByb3RvW25hbWVdO1xuICAgIF8kMS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBvYmogPSB0aGlzLl93cmFwcGVkO1xuICAgICAgaWYgKG9iaiAhPSBudWxsKSBvYmogPSBtZXRob2QuYXBwbHkob2JqLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIGNoYWluUmVzdWx0KHRoaXMsIG9iaik7XG4gICAgfTtcbiAgfSk7XG5cbiAgLy8gTmFtZWQgRXhwb3J0c1xuXG4gIHZhciBhbGxFeHBvcnRzID0ge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBWRVJTSU9OOiBWRVJTSU9OLFxuICAgIHJlc3RBcmd1bWVudHM6IHJlc3RBcmd1bWVudHMsXG4gICAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICAgIGlzTnVsbDogaXNOdWxsLFxuICAgIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgICBpc0Jvb2xlYW46IGlzQm9vbGVhbixcbiAgICBpc0VsZW1lbnQ6IGlzRWxlbWVudCxcbiAgICBpc1N0cmluZzogaXNTdHJpbmcsXG4gICAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICAgIGlzRGF0ZTogaXNEYXRlLFxuICAgIGlzUmVnRXhwOiBpc1JlZ0V4cCxcbiAgICBpc0Vycm9yOiBpc0Vycm9yLFxuICAgIGlzU3ltYm9sOiBpc1N5bWJvbCxcbiAgICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICAgIGlzRGF0YVZpZXc6IGlzRGF0YVZpZXckMSxcbiAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24kMSxcbiAgICBpc0FyZ3VtZW50czogaXNBcmd1bWVudHMkMSxcbiAgICBpc0Zpbml0ZTogaXNGaW5pdGUkMSxcbiAgICBpc05hTjogaXNOYU4kMSxcbiAgICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSQxLFxuICAgIGlzRW1wdHk6IGlzRW1wdHksXG4gICAgaXNNYXRjaDogaXNNYXRjaCxcbiAgICBpc0VxdWFsOiBpc0VxdWFsLFxuICAgIGlzTWFwOiBpc01hcCxcbiAgICBpc1dlYWtNYXA6IGlzV2Vha01hcCxcbiAgICBpc1NldDogaXNTZXQsXG4gICAgaXNXZWFrU2V0OiBpc1dlYWtTZXQsXG4gICAga2V5czoga2V5cyxcbiAgICBhbGxLZXlzOiBhbGxLZXlzLFxuICAgIHZhbHVlczogdmFsdWVzLFxuICAgIHBhaXJzOiBwYWlycyxcbiAgICBpbnZlcnQ6IGludmVydCxcbiAgICBmdW5jdGlvbnM6IGZ1bmN0aW9ucyxcbiAgICBtZXRob2RzOiBmdW5jdGlvbnMsXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgZXh0ZW5kT3duOiBleHRlbmRPd24sXG4gICAgYXNzaWduOiBleHRlbmRPd24sXG4gICAgZGVmYXVsdHM6IGRlZmF1bHRzLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGNsb25lOiBjbG9uZSxcbiAgICB0YXA6IHRhcCxcbiAgICBnZXQ6IGdldCxcbiAgICBoYXM6IGhhcyxcbiAgICBtYXBPYmplY3Q6IG1hcE9iamVjdCxcbiAgICBpZGVudGl0eTogaWRlbnRpdHksXG4gICAgY29uc3RhbnQ6IGNvbnN0YW50LFxuICAgIG5vb3A6IG5vb3AsXG4gICAgdG9QYXRoOiB0b1BhdGgkMSxcbiAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgcHJvcGVydHlPZjogcHJvcGVydHlPZixcbiAgICBtYXRjaGVyOiBtYXRjaGVyLFxuICAgIG1hdGNoZXM6IG1hdGNoZXIsXG4gICAgdGltZXM6IHRpbWVzLFxuICAgIHJhbmRvbTogcmFuZG9tLFxuICAgIG5vdzogbm93LFxuICAgIGVzY2FwZTogX2VzY2FwZSxcbiAgICB1bmVzY2FwZTogX3VuZXNjYXBlLFxuICAgIHRlbXBsYXRlU2V0dGluZ3M6IHRlbXBsYXRlU2V0dGluZ3MsXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgIHJlc3VsdDogcmVzdWx0LFxuICAgIHVuaXF1ZUlkOiB1bmlxdWVJZCxcbiAgICBjaGFpbjogY2hhaW4sXG4gICAgaXRlcmF0ZWU6IGl0ZXJhdGVlLFxuICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgYmluZDogYmluZCxcbiAgICBiaW5kQWxsOiBiaW5kQWxsLFxuICAgIG1lbW9pemU6IG1lbW9pemUsXG4gICAgZGVsYXk6IGRlbGF5LFxuICAgIGRlZmVyOiBkZWZlcixcbiAgICB0aHJvdHRsZTogdGhyb3R0bGUsXG4gICAgZGVib3VuY2U6IGRlYm91bmNlLFxuICAgIHdyYXA6IHdyYXAsXG4gICAgbmVnYXRlOiBuZWdhdGUsXG4gICAgY29tcG9zZTogY29tcG9zZSxcbiAgICBhZnRlcjogYWZ0ZXIsXG4gICAgYmVmb3JlOiBiZWZvcmUsXG4gICAgb25jZTogb25jZSxcbiAgICBmaW5kS2V5OiBmaW5kS2V5LFxuICAgIGZpbmRJbmRleDogZmluZEluZGV4LFxuICAgIGZpbmRMYXN0SW5kZXg6IGZpbmRMYXN0SW5kZXgsXG4gICAgc29ydGVkSW5kZXg6IHNvcnRlZEluZGV4LFxuICAgIGluZGV4T2Y6IGluZGV4T2YsXG4gICAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mLFxuICAgIGZpbmQ6IGZpbmQsXG4gICAgZGV0ZWN0OiBmaW5kLFxuICAgIGZpbmRXaGVyZTogZmluZFdoZXJlLFxuICAgIGVhY2g6IGVhY2gsXG4gICAgZm9yRWFjaDogZWFjaCxcbiAgICBtYXA6IG1hcCxcbiAgICBjb2xsZWN0OiBtYXAsXG4gICAgcmVkdWNlOiByZWR1Y2UsXG4gICAgZm9sZGw6IHJlZHVjZSxcbiAgICBpbmplY3Q6IHJlZHVjZSxcbiAgICByZWR1Y2VSaWdodDogcmVkdWNlUmlnaHQsXG4gICAgZm9sZHI6IHJlZHVjZVJpZ2h0LFxuICAgIGZpbHRlcjogZmlsdGVyLFxuICAgIHNlbGVjdDogZmlsdGVyLFxuICAgIHJlamVjdDogcmVqZWN0LFxuICAgIGV2ZXJ5OiBldmVyeSxcbiAgICBhbGw6IGV2ZXJ5LFxuICAgIHNvbWU6IHNvbWUsXG4gICAgYW55OiBzb21lLFxuICAgIGNvbnRhaW5zOiBjb250YWlucyxcbiAgICBpbmNsdWRlczogY29udGFpbnMsXG4gICAgaW5jbHVkZTogY29udGFpbnMsXG4gICAgaW52b2tlOiBpbnZva2UsXG4gICAgcGx1Y2s6IHBsdWNrLFxuICAgIHdoZXJlOiB3aGVyZSxcbiAgICBtYXg6IG1heCxcbiAgICBtaW46IG1pbixcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIHNhbXBsZTogc2FtcGxlLFxuICAgIHNvcnRCeTogc29ydEJ5LFxuICAgIGdyb3VwQnk6IGdyb3VwQnksXG4gICAgaW5kZXhCeTogaW5kZXhCeSxcbiAgICBjb3VudEJ5OiBjb3VudEJ5LFxuICAgIHBhcnRpdGlvbjogcGFydGl0aW9uLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgc2l6ZTogc2l6ZSxcbiAgICBwaWNrOiBwaWNrLFxuICAgIG9taXQ6IG9taXQsXG4gICAgZmlyc3Q6IGZpcnN0LFxuICAgIGhlYWQ6IGZpcnN0LFxuICAgIHRha2U6IGZpcnN0LFxuICAgIGluaXRpYWw6IGluaXRpYWwsXG4gICAgbGFzdDogbGFzdCxcbiAgICByZXN0OiByZXN0LFxuICAgIHRhaWw6IHJlc3QsXG4gICAgZHJvcDogcmVzdCxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGZsYXR0ZW46IGZsYXR0ZW4sXG4gICAgd2l0aG91dDogd2l0aG91dCxcbiAgICB1bmlxOiB1bmlxLFxuICAgIHVuaXF1ZTogdW5pcSxcbiAgICB1bmlvbjogdW5pb24sXG4gICAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb24sXG4gICAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZSxcbiAgICB1bnppcDogdW56aXAsXG4gICAgdHJhbnNwb3NlOiB1bnppcCxcbiAgICB6aXA6IHppcCxcbiAgICBvYmplY3Q6IG9iamVjdCxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgY2h1bms6IGNodW5rLFxuICAgIG1peGluOiBtaXhpbixcbiAgICAnZGVmYXVsdCc6IF8kMVxuICB9O1xuXG4gIC8vIERlZmF1bHQgRXhwb3J0XG5cbiAgLy8gQWRkIGFsbCBvZiB0aGUgVW5kZXJzY29yZSBmdW5jdGlvbnMgdG8gdGhlIHdyYXBwZXIgb2JqZWN0LlxuICB2YXIgXyA9IG1peGluKGFsbEV4cG9ydHMpO1xuICAvLyBMZWdhY3kgTm9kZS5qcyBBUEkuXG4gIF8uXyA9IF87XG5cbiAgcmV0dXJuIF87XG5cbn0pKSk7XG5cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHt9XSwxMDM6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gIC8vIGltcGxlbWVudGF0aW9uIGZyb20gc3RhbmRhcmQgbm9kZS5qcyAndXRpbCcgbW9kdWxlXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgY3Rvci5zdXBlcl8gPSBzdXBlckN0b3JcbiAgICBjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGN0b3IsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBvbGQgc2Nob29sIHNoaW0gZm9yIG9sZCBicm93c2Vyc1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGluaGVyaXRzKGN0b3IsIHN1cGVyQ3Rvcikge1xuICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yXG4gICAgdmFyIFRlbXBDdG9yID0gZnVuY3Rpb24gKCkge31cbiAgICBUZW1wQ3Rvci5wcm90b3R5cGUgPSBzdXBlckN0b3IucHJvdG90eXBlXG4gICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKVxuICAgIGN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY3RvclxuICB9XG59XG5cbn0se31dLDEwNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQnVmZmVyKGFyZykge1xuICByZXR1cm4gYXJnICYmIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnXG4gICAgJiYgdHlwZW9mIGFyZy5jb3B5ID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5maWxsID09PSAnZnVuY3Rpb24nXG4gICAgJiYgdHlwZW9mIGFyZy5yZWFkVUludDggPT09ICdmdW5jdGlvbic7XG59XG59LHt9XSwxMDU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChwcm9jZXNzLGdsb2JhbCl7XG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIGZvcm1hdFJlZ0V4cCA9IC8lW3NkaiVdL2c7XG5leHBvcnRzLmZvcm1hdCA9IGZ1bmN0aW9uKGYpIHtcbiAgaWYgKCFpc1N0cmluZyhmKSkge1xuICAgIHZhciBvYmplY3RzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG9iamVjdHMucHVzaChpbnNwZWN0KGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0cy5qb2luKCcgJyk7XG4gIH1cblxuICB2YXIgaSA9IDE7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzO1xuICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBzdHIgPSBTdHJpbmcoZikucmVwbGFjZShmb3JtYXRSZWdFeHAsIGZ1bmN0aW9uKHgpIHtcbiAgICBpZiAoeCA9PT0gJyUlJykgcmV0dXJuICclJztcbiAgICBpZiAoaSA+PSBsZW4pIHJldHVybiB4O1xuICAgIHN3aXRjaCAoeCkge1xuICAgICAgY2FzZSAnJXMnOiByZXR1cm4gU3RyaW5nKGFyZ3NbaSsrXSk7XG4gICAgICBjYXNlICclZCc6IHJldHVybiBOdW1iZXIoYXJnc1tpKytdKTtcbiAgICAgIGNhc2UgJyVqJzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYXJnc1tpKytdKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfSk7XG4gIGZvciAodmFyIHggPSBhcmdzW2ldOyBpIDwgbGVuOyB4ID0gYXJnc1srK2ldKSB7XG4gICAgaWYgKGlzTnVsbCh4KSB8fCAhaXNPYmplY3QoeCkpIHtcbiAgICAgIHN0ciArPSAnICcgKyB4O1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgKz0gJyAnICsgaW5zcGVjdCh4KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHN0cjtcbn07XG5cblxuLy8gTWFyayB0aGF0IGEgbWV0aG9kIHNob3VsZCBub3QgYmUgdXNlZC5cbi8vIFJldHVybnMgYSBtb2RpZmllZCBmdW5jdGlvbiB3aGljaCB3YXJucyBvbmNlIGJ5IGRlZmF1bHQuXG4vLyBJZiAtLW5vLWRlcHJlY2F0aW9uIGlzIHNldCwgdGhlbiBpdCBpcyBhIG5vLW9wLlxuZXhwb3J0cy5kZXByZWNhdGUgPSBmdW5jdGlvbihmbiwgbXNnKSB7XG4gIC8vIEFsbG93IGZvciBkZXByZWNhdGluZyB0aGluZ3MgaW4gdGhlIHByb2Nlc3Mgb2Ygc3RhcnRpbmcgdXAuXG4gIGlmIChpc1VuZGVmaW5lZChnbG9iYWwucHJvY2VzcykpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy5kZXByZWNhdGUoZm4sIG1zZykuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKHByb2Nlc3Mubm9EZXByZWNhdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgaWYgKHByb2Nlc3MudGhyb3dEZXByZWNhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy50cmFjZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUudHJhY2UobXNnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobXNnKTtcbiAgICAgIH1cbiAgICAgIHdhcm5lZCA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgcmV0dXJuIGRlcHJlY2F0ZWQ7XG59O1xuXG5cbnZhciBkZWJ1Z3MgPSB7fTtcbnZhciBkZWJ1Z0Vudmlyb247XG5leHBvcnRzLmRlYnVnbG9nID0gZnVuY3Rpb24oc2V0KSB7XG4gIGlmIChpc1VuZGVmaW5lZChkZWJ1Z0Vudmlyb24pKVxuICAgIGRlYnVnRW52aXJvbiA9IHByb2Nlc3MuZW52Lk5PREVfREVCVUcgfHwgJyc7XG4gIHNldCA9IHNldC50b1VwcGVyQ2FzZSgpO1xuICBpZiAoIWRlYnVnc1tzZXRdKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoJ1xcXFxiJyArIHNldCArICdcXFxcYicsICdpJykudGVzdChkZWJ1Z0Vudmlyb24pKSB7XG4gICAgICB2YXIgcGlkID0gcHJvY2Vzcy5waWQ7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgbXNnID0gZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignJXMgJWQ6ICVzJywgc2V0LCBwaWQsIG1zZyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z3Nbc2V0XSA9IGZ1bmN0aW9uKCkge307XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWJ1Z3Nbc2V0XTtcbn07XG5cblxuLyoqXG4gKiBFY2hvcyB0aGUgdmFsdWUgb2YgYSB2YWx1ZS4gVHJ5cyB0byBwcmludCB0aGUgdmFsdWUgb3V0XG4gKiBpbiB0aGUgYmVzdCB3YXkgcG9zc2libGUgZ2l2ZW4gdGhlIGRpZmZlcmVudCB0eXBlcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcHJpbnQgb3V0LlxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uYWwgb3B0aW9ucyBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIG91dHB1dC5cbiAqL1xuLyogbGVnYWN5OiBvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMqL1xuZnVuY3Rpb24gaW5zcGVjdChvYmosIG9wdHMpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBjdHggPSB7XG4gICAgc2VlbjogW10sXG4gICAgc3R5bGl6ZTogc3R5bGl6ZU5vQ29sb3JcbiAgfTtcbiAgLy8gbGVnYWN5Li4uXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID49IDMpIGN0eC5kZXB0aCA9IGFyZ3VtZW50c1syXTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gNCkgY3R4LmNvbG9ycyA9IGFyZ3VtZW50c1szXTtcbiAgaWYgKGlzQm9vbGVhbihvcHRzKSkge1xuICAgIC8vIGxlZ2FjeS4uLlxuICAgIGN0eC5zaG93SGlkZGVuID0gb3B0cztcbiAgfSBlbHNlIGlmIChvcHRzKSB7XG4gICAgLy8gZ290IGFuIFwib3B0aW9uc1wiIG9iamVjdFxuICAgIGV4cG9ydHMuX2V4dGVuZChjdHgsIG9wdHMpO1xuICB9XG4gIC8vIHNldCBkZWZhdWx0IG9wdGlvbnNcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5zaG93SGlkZGVuKSkgY3R4LnNob3dIaWRkZW4gPSBmYWxzZTtcbiAgaWYgKGlzVW5kZWZpbmVkKGN0eC5kZXB0aCkpIGN0eC5kZXB0aCA9IDI7XG4gIGlmIChpc1VuZGVmaW5lZChjdHguY29sb3JzKSkgY3R4LmNvbG9ycyA9IGZhbHNlO1xuICBpZiAoaXNVbmRlZmluZWQoY3R4LmN1c3RvbUluc3BlY3QpKSBjdHguY3VzdG9tSW5zcGVjdCA9IHRydWU7XG4gIGlmIChjdHguY29sb3JzKSBjdHguc3R5bGl6ZSA9IHN0eWxpemVXaXRoQ29sb3I7XG4gIHJldHVybiBmb3JtYXRWYWx1ZShjdHgsIG9iaiwgY3R4LmRlcHRoKTtcbn1cbmV4cG9ydHMuaW5zcGVjdCA9IGluc3BlY3Q7XG5cblxuLy8gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI2dyYXBoaWNzXG5pbnNwZWN0LmNvbG9ycyA9IHtcbiAgJ2JvbGQnIDogWzEsIDIyXSxcbiAgJ2l0YWxpYycgOiBbMywgMjNdLFxuICAndW5kZXJsaW5lJyA6IFs0LCAyNF0sXG4gICdpbnZlcnNlJyA6IFs3LCAyN10sXG4gICd3aGl0ZScgOiBbMzcsIDM5XSxcbiAgJ2dyZXknIDogWzkwLCAzOV0sXG4gICdibGFjaycgOiBbMzAsIDM5XSxcbiAgJ2JsdWUnIDogWzM0LCAzOV0sXG4gICdjeWFuJyA6IFszNiwgMzldLFxuICAnZ3JlZW4nIDogWzMyLCAzOV0sXG4gICdtYWdlbnRhJyA6IFszNSwgMzldLFxuICAncmVkJyA6IFszMSwgMzldLFxuICAneWVsbG93JyA6IFszMywgMzldXG59O1xuXG4vLyBEb24ndCB1c2UgJ2JsdWUnIG5vdCB2aXNpYmxlIG9uIGNtZC5leGVcbmluc3BlY3Quc3R5bGVzID0ge1xuICAnc3BlY2lhbCc6ICdjeWFuJyxcbiAgJ251bWJlcic6ICd5ZWxsb3cnLFxuICAnYm9vbGVhbic6ICd5ZWxsb3cnLFxuICAndW5kZWZpbmVkJzogJ2dyZXknLFxuICAnbnVsbCc6ICdib2xkJyxcbiAgJ3N0cmluZyc6ICdncmVlbicsXG4gICdkYXRlJzogJ21hZ2VudGEnLFxuICAvLyBcIm5hbWVcIjogaW50ZW50aW9uYWxseSBub3Qgc3R5bGluZ1xuICAncmVnZXhwJzogJ3JlZCdcbn07XG5cblxuZnVuY3Rpb24gc3R5bGl6ZVdpdGhDb2xvcihzdHIsIHN0eWxlVHlwZSkge1xuICB2YXIgc3R5bGUgPSBpbnNwZWN0LnN0eWxlc1tzdHlsZVR5cGVdO1xuXG4gIGlmIChzdHlsZSkge1xuICAgIHJldHVybiAnXFx1MDAxYlsnICsgaW5zcGVjdC5jb2xvcnNbc3R5bGVdWzBdICsgJ20nICsgc3RyICtcbiAgICAgICAgICAgJ1xcdTAwMWJbJyArIGluc3BlY3QuY29sb3JzW3N0eWxlXVsxXSArICdtJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59XG5cblxuZnVuY3Rpb24gc3R5bGl6ZU5vQ29sb3Ioc3RyLCBzdHlsZVR5cGUpIHtcbiAgcmV0dXJuIHN0cjtcbn1cblxuXG5mdW5jdGlvbiBhcnJheVRvSGFzaChhcnJheSkge1xuICB2YXIgaGFzaCA9IHt9O1xuXG4gIGFycmF5LmZvckVhY2goZnVuY3Rpb24odmFsLCBpZHgpIHtcbiAgICBoYXNoW3ZhbF0gPSB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gaGFzaDtcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRWYWx1ZShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMpIHtcbiAgLy8gUHJvdmlkZSBhIGhvb2sgZm9yIHVzZXItc3BlY2lmaWVkIGluc3BlY3QgZnVuY3Rpb25zLlxuICAvLyBDaGVjayB0aGF0IHZhbHVlIGlzIGFuIG9iamVjdCB3aXRoIGFuIGluc3BlY3QgZnVuY3Rpb24gb24gaXRcbiAgaWYgKGN0eC5jdXN0b21JbnNwZWN0ICYmXG4gICAgICB2YWx1ZSAmJlxuICAgICAgaXNGdW5jdGlvbih2YWx1ZS5pbnNwZWN0KSAmJlxuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgdXRpbCBtb2R1bGUsIGl0J3MgaW5zcGVjdCBmdW5jdGlvbiBpcyBzcGVjaWFsXG4gICAgICB2YWx1ZS5pbnNwZWN0ICE9PSBleHBvcnRzLmluc3BlY3QgJiZcbiAgICAgIC8vIEFsc28gZmlsdGVyIG91dCBhbnkgcHJvdG90eXBlIG9iamVjdHMgdXNpbmcgdGhlIGNpcmN1bGFyIGNoZWNrLlxuICAgICAgISh2YWx1ZS5jb25zdHJ1Y3RvciAmJiB2YWx1ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgPT09IHZhbHVlKSkge1xuICAgIHZhciByZXQgPSB2YWx1ZS5pbnNwZWN0KHJlY3Vyc2VUaW1lcywgY3R4KTtcbiAgICBpZiAoIWlzU3RyaW5nKHJldCkpIHtcbiAgICAgIHJldCA9IGZvcm1hdFZhbHVlKGN0eCwgcmV0LCByZWN1cnNlVGltZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLy8gUHJpbWl0aXZlIHR5cGVzIGNhbm5vdCBoYXZlIHByb3BlcnRpZXNcbiAgdmFyIHByaW1pdGl2ZSA9IGZvcm1hdFByaW1pdGl2ZShjdHgsIHZhbHVlKTtcbiAgaWYgKHByaW1pdGl2ZSkge1xuICAgIHJldHVybiBwcmltaXRpdmU7XG4gIH1cblxuICAvLyBMb29rIHVwIHRoZSBrZXlzIG9mIHRoZSBvYmplY3QuXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpO1xuICB2YXIgdmlzaWJsZUtleXMgPSBhcnJheVRvSGFzaChrZXlzKTtcblxuICBpZiAoY3R4LnNob3dIaWRkZW4pIHtcbiAgICBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpO1xuICB9XG5cbiAgLy8gSUUgZG9lc24ndCBtYWtlIGVycm9yIGZpZWxkcyBub24tZW51bWVyYWJsZVxuICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvZHd3NTJzYnQodj12cy45NCkuYXNweFxuICBpZiAoaXNFcnJvcih2YWx1ZSlcbiAgICAgICYmIChrZXlzLmluZGV4T2YoJ21lc3NhZ2UnKSA+PSAwIHx8IGtleXMuaW5kZXhPZignZGVzY3JpcHRpb24nKSA+PSAwKSkge1xuICAgIHJldHVybiBmb3JtYXRFcnJvcih2YWx1ZSk7XG4gIH1cblxuICAvLyBTb21lIHR5cGUgb2Ygb2JqZWN0IHdpdGhvdXQgcHJvcGVydGllcyBjYW4gYmUgc2hvcnRjdXR0ZWQuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgdmFyIG5hbWUgPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZSgnW0Z1bmN0aW9uJyArIG5hbWUgKyAnXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICAgIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjdHguc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLCAncmVnZXhwJyk7XG4gICAgfVxuICAgIGlmIChpc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSksICdkYXRlJyk7XG4gICAgfVxuICAgIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgYmFzZSA9ICcnLCBhcnJheSA9IGZhbHNlLCBicmFjZXMgPSBbJ3snLCAnfSddO1xuXG4gIC8vIE1ha2UgQXJyYXkgc2F5IHRoYXQgdGhleSBhcmUgQXJyYXlcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgYXJyYXkgPSB0cnVlO1xuICAgIGJyYWNlcyA9IFsnWycsICddJ107XG4gIH1cblxuICAvLyBNYWtlIGZ1bmN0aW9ucyBzYXkgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbnNcbiAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgdmFyIG4gPSB2YWx1ZS5uYW1lID8gJzogJyArIHZhbHVlLm5hbWUgOiAnJztcbiAgICBiYXNlID0gJyBbRnVuY3Rpb24nICsgbiArICddJztcbiAgfVxuXG4gIC8vIE1ha2UgUmVnRXhwcyBzYXkgdGhhdCB0aGV5IGFyZSBSZWdFeHBzXG4gIGlmIChpc1JlZ0V4cCh2YWx1ZSkpIHtcbiAgICBiYXNlID0gJyAnICsgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZGF0ZXMgd2l0aCBwcm9wZXJ0aWVzIGZpcnN0IHNheSB0aGUgZGF0ZVxuICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgIGJhc2UgPSAnICcgKyBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgfVxuXG4gIC8vIE1ha2UgZXJyb3Igd2l0aCBtZXNzYWdlIGZpcnN0IHNheSB0aGUgZXJyb3JcbiAgaWYgKGlzRXJyb3IodmFsdWUpKSB7XG4gICAgYmFzZSA9ICcgJyArIGZvcm1hdEVycm9yKHZhbHVlKTtcbiAgfVxuXG4gIGlmIChrZXlzLmxlbmd0aCA9PT0gMCAmJiAoIWFycmF5IHx8IHZhbHVlLmxlbmd0aCA9PSAwKSkge1xuICAgIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgYnJhY2VzWzFdO1xuICB9XG5cbiAgaWYgKHJlY3Vyc2VUaW1lcyA8IDApIHtcbiAgICBpZiAoaXNSZWdFeHAodmFsdWUpKSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSwgJ3JlZ2V4cCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3R4LnN0eWxpemUoJ1tPYmplY3RdJywgJ3NwZWNpYWwnKTtcbiAgICB9XG4gIH1cblxuICBjdHguc2Vlbi5wdXNoKHZhbHVlKTtcblxuICB2YXIgb3V0cHV0O1xuICBpZiAoYXJyYXkpIHtcbiAgICBvdXRwdXQgPSBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKTtcbiAgfSBlbHNlIHtcbiAgICBvdXRwdXQgPSBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICAgIHJldHVybiBmb3JtYXRQcm9wZXJ0eShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXksIGFycmF5KTtcbiAgICB9KTtcbiAgfVxuXG4gIGN0eC5zZWVuLnBvcCgpO1xuXG4gIHJldHVybiByZWR1Y2VUb1NpbmdsZVN0cmluZyhvdXRwdXQsIGJhc2UsIGJyYWNlcyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0UHJpbWl0aXZlKGN0eCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSlcbiAgICByZXR1cm4gY3R4LnN0eWxpemUoJ3VuZGVmaW5lZCcsICd1bmRlZmluZWQnKTtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHZhciBzaW1wbGUgPSAnXFwnJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFxcIi9nLCAnXCInKSArICdcXCcnO1xuICAgIHJldHVybiBjdHguc3R5bGl6ZShzaW1wbGUsICdzdHJpbmcnKTtcbiAgfVxuICBpZiAoaXNOdW1iZXIodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnbnVtYmVyJyk7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnJyArIHZhbHVlLCAnYm9vbGVhbicpO1xuICAvLyBGb3Igc29tZSByZWFzb24gdHlwZW9mIG51bGwgaXMgXCJvYmplY3RcIiwgc28gc3BlY2lhbCBjYXNlIGhlcmUuXG4gIGlmIChpc051bGwodmFsdWUpKVxuICAgIHJldHVybiBjdHguc3R5bGl6ZSgnbnVsbCcsICdudWxsJyk7XG59XG5cblxuZnVuY3Rpb24gZm9ybWF0RXJyb3IodmFsdWUpIHtcbiAgcmV0dXJuICdbJyArIEVycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSArICddJztcbn1cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShjdHgsIHZhbHVlLCByZWN1cnNlVGltZXMsIHZpc2libGVLZXlzLCBrZXlzKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkodmFsdWUsIFN0cmluZyhpKSkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsXG4gICAgICAgICAgU3RyaW5nKGkpLCB0cnVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKCcnKTtcbiAgICB9XG4gIH1cbiAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uKGtleSkge1xuICAgIGlmICgha2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgb3V0cHV0LnB1c2goZm9ybWF0UHJvcGVydHkoY3R4LCB2YWx1ZSwgcmVjdXJzZVRpbWVzLCB2aXNpYmxlS2V5cyxcbiAgICAgICAgICBrZXksIHRydWUpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3V0cHV0O1xufVxuXG5cbmZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KGN0eCwgdmFsdWUsIHJlY3Vyc2VUaW1lcywgdmlzaWJsZUtleXMsIGtleSwgYXJyYXkpIHtcbiAgdmFyIG5hbWUsIHN0ciwgZGVzYztcbiAgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSkgfHwgeyB2YWx1ZTogdmFsdWVba2V5XSB9O1xuICBpZiAoZGVzYy5nZXQpIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbR2V0dGVyL1NldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBjdHguc3R5bGl6ZSgnW0dldHRlcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGVzYy5zZXQpIHtcbiAgICAgIHN0ciA9IGN0eC5zdHlsaXplKCdbU2V0dGVyXScsICdzcGVjaWFsJyk7XG4gICAgfVxuICB9XG4gIGlmICghaGFzT3duUHJvcGVydHkodmlzaWJsZUtleXMsIGtleSkpIHtcbiAgICBuYW1lID0gJ1snICsga2V5ICsgJ10nO1xuICB9XG4gIGlmICghc3RyKSB7XG4gICAgaWYgKGN0eC5zZWVuLmluZGV4T2YoZGVzYy52YWx1ZSkgPCAwKSB7XG4gICAgICBpZiAoaXNOdWxsKHJlY3Vyc2VUaW1lcykpIHtcbiAgICAgICAgc3RyID0gZm9ybWF0VmFsdWUoY3R4LCBkZXNjLnZhbHVlLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IGZvcm1hdFZhbHVlKGN0eCwgZGVzYy52YWx1ZSwgcmVjdXJzZVRpbWVzIC0gMSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ1xcbicpID4gLTEpIHtcbiAgICAgICAgaWYgKGFycmF5KSB7XG4gICAgICAgICAgc3RyID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAoZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgICcgKyBsaW5lO1xuICAgICAgICAgIH0pLmpvaW4oJ1xcbicpLnN1YnN0cigyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSAnXFxuJyArIHN0ci5zcGxpdCgnXFxuJykubWFwKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiAnICAgJyArIGxpbmU7XG4gICAgICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gY3R4LnN0eWxpemUoJ1tDaXJjdWxhcl0nLCAnc3BlY2lhbCcpO1xuICAgIH1cbiAgfVxuICBpZiAoaXNVbmRlZmluZWQobmFtZSkpIHtcbiAgICBpZiAoYXJyYXkgJiYga2V5Lm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgbmFtZSA9IEpTT04uc3RyaW5naWZ5KCcnICsga2V5KTtcbiAgICBpZiAobmFtZS5tYXRjaCgvXlwiKFthLXpBLVpfXVthLXpBLVpfMC05XSopXCIkLykpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cigxLCBuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICduYW1lJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoLycvZywgXCJcXFxcJ1wiKVxuICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXFwiL2csICdcIicpXG4gICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8oXlwifFwiJCkvZywgXCInXCIpO1xuICAgICAgbmFtZSA9IGN0eC5zdHlsaXplKG5hbWUsICdzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZSArICc6ICcgKyBzdHI7XG59XG5cblxuZnVuY3Rpb24gcmVkdWNlVG9TaW5nbGVTdHJpbmcob3V0cHV0LCBiYXNlLCBicmFjZXMpIHtcbiAgdmFyIG51bUxpbmVzRXN0ID0gMDtcbiAgdmFyIGxlbmd0aCA9IG91dHB1dC5yZWR1Y2UoZnVuY3Rpb24ocHJldiwgY3VyKSB7XG4gICAgbnVtTGluZXNFc3QrKztcbiAgICBpZiAoY3VyLmluZGV4T2YoJ1xcbicpID49IDApIG51bUxpbmVzRXN0Kys7XG4gICAgcmV0dXJuIHByZXYgKyBjdXIucmVwbGFjZSgvXFx1MDAxYlxcW1xcZFxcZD9tL2csICcnKS5sZW5ndGggKyAxO1xuICB9LCAwKTtcblxuICBpZiAobGVuZ3RoID4gNjApIHtcbiAgICByZXR1cm4gYnJhY2VzWzBdICtcbiAgICAgICAgICAgKGJhc2UgPT09ICcnID8gJycgOiBiYXNlICsgJ1xcbiAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIG91dHB1dC5qb2luKCcsXFxuICAnKSArXG4gICAgICAgICAgICcgJyArXG4gICAgICAgICAgIGJyYWNlc1sxXTtcbiAgfVxuXG4gIHJldHVybiBicmFjZXNbMF0gKyBiYXNlICsgJyAnICsgb3V0cHV0LmpvaW4oJywgJykgKyAnICcgKyBicmFjZXNbMV07XG59XG5cblxuLy8gTk9URTogVGhlc2UgdHlwZSBjaGVja2luZyBmdW5jdGlvbnMgaW50ZW50aW9uYWxseSBkb24ndCB1c2UgYGluc3RhbmNlb2ZgXG4vLyBiZWNhdXNlIGl0IGlzIGZyYWdpbGUgYW5kIGNhbiBiZSBlYXNpbHkgZmFrZWQgd2l0aCBgT2JqZWN0LmNyZWF0ZSgpYC5cbmZ1bmN0aW9uIGlzQXJyYXkoYXIpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXIpO1xufVxuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNCb29sZWFuKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5cbmZ1bmN0aW9uIGlzTnVsbChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gbnVsbDtcbn1cbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuXG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PSBudWxsO1xufVxuZXhwb3J0cy5pc051bGxPclVuZGVmaW5lZCA9IGlzTnVsbE9yVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuZXhwb3J0cy5pc051bWJlciA9IGlzTnVtYmVyO1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuXG5mdW5jdGlvbiBpc1N5bWJvbChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdzeW1ib2wnO1xufVxuZXhwb3J0cy5pc1N5bWJvbCA9IGlzU3ltYm9sO1xuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuIGFyZyA9PT0gdm9pZCAwO1xufVxuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpc1JlZ0V4cChyZSkge1xuICByZXR1cm4gaXNPYmplY3QocmUpICYmIG9iamVjdFRvU3RyaW5nKHJlKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5leHBvcnRzLmlzUmVnRXhwID0gaXNSZWdFeHA7XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG5mdW5jdGlvbiBpc0RhdGUoZCkge1xuICByZXR1cm4gaXNPYmplY3QoZCkgJiYgb2JqZWN0VG9TdHJpbmcoZCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuXG5mdW5jdGlvbiBpc0Vycm9yKGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGUpICYmXG4gICAgICAob2JqZWN0VG9TdHJpbmcoZSkgPT09ICdbb2JqZWN0IEVycm9yXScgfHwgZSBpbnN0YW5jZW9mIEVycm9yKTtcbn1cbmV4cG9ydHMuaXNFcnJvciA9IGlzRXJyb3I7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNQcmltaXRpdmUoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGwgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdib29sZWFuJyB8fFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgIHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICB0eXBlb2YgYXJnID09PSAnc3ltYm9sJyB8fCAgLy8gRVM2IHN5bWJvbFxuICAgICAgICAgdHlwZW9mIGFyZyA9PT0gJ3VuZGVmaW5lZCc7XG59XG5leHBvcnRzLmlzUHJpbWl0aXZlID0gaXNQcmltaXRpdmU7XG5cbmV4cG9ydHMuaXNCdWZmZXIgPSByZXF1aXJlKCcuL3N1cHBvcnQvaXNCdWZmZXInKTtcblxuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuXG5cbmZ1bmN0aW9uIHBhZChuKSB7XG4gIHJldHVybiBuIDwgMTAgPyAnMCcgKyBuLnRvU3RyaW5nKDEwKSA6IG4udG9TdHJpbmcoMTApO1xufVxuXG5cbnZhciBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJyxcbiAgICAgICAgICAgICAgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbi8vIDI2IEZlYiAxNjoxOTozNFxuZnVuY3Rpb24gdGltZXN0YW1wKCkge1xuICB2YXIgZCA9IG5ldyBEYXRlKCk7XG4gIHZhciB0aW1lID0gW3BhZChkLmdldEhvdXJzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRNaW51dGVzKCkpLFxuICAgICAgICAgICAgICBwYWQoZC5nZXRTZWNvbmRzKCkpXS5qb2luKCc6Jyk7XG4gIHJldHVybiBbZC5nZXREYXRlKCksIG1vbnRoc1tkLmdldE1vbnRoKCldLCB0aW1lXS5qb2luKCcgJyk7XG59XG5cblxuLy8gbG9nIGlzIGp1c3QgYSB0aGluIHdyYXBwZXIgdG8gY29uc29sZS5sb2cgdGhhdCBwcmVwZW5kcyBhIHRpbWVzdGFtcFxuZXhwb3J0cy5sb2cgPSBmdW5jdGlvbigpIHtcbiAgY29uc29sZS5sb2coJyVzIC0gJXMnLCB0aW1lc3RhbXAoKSwgZXhwb3J0cy5mb3JtYXQuYXBwbHkoZXhwb3J0cywgYXJndW1lbnRzKSk7XG59O1xuXG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyLlxuICpcbiAqIFRoZSBGdW5jdGlvbi5wcm90b3R5cGUuaW5oZXJpdHMgZnJvbSBsYW5nLmpzIHJld3JpdHRlbiBhcyBhIHN0YW5kYWxvbmVcbiAqIGZ1bmN0aW9uIChub3Qgb24gRnVuY3Rpb24ucHJvdG90eXBlKS4gTk9URTogSWYgdGhpcyBmaWxlIGlzIHRvIGJlIGxvYWRlZFxuICogZHVyaW5nIGJvb3RzdHJhcHBpbmcgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSByZXdyaXR0ZW4gdXNpbmcgc29tZSBuYXRpdmVcbiAqIGZ1bmN0aW9ucyBhcyBwcm90b3R5cGUgc2V0dXAgdXNpbmcgbm9ybWFsIEphdmFTY3JpcHQgZG9lcyBub3Qgd29yayBhc1xuICogZXhwZWN0ZWQgZHVyaW5nIGJvb3RzdHJhcHBpbmcgKHNlZSBtaXJyb3IuanMgaW4gcjExNDkwMykuXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB3aGljaCBuZWVkcyB0byBpbmhlcml0IHRoZVxuICogICAgIHByb3RvdHlwZS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ3RvciBDb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBpbmhlcml0IHByb3RvdHlwZSBmcm9tLlxuICovXG5leHBvcnRzLmluaGVyaXRzID0gcmVxdWlyZSgnaW5oZXJpdHMnKTtcblxuZXhwb3J0cy5fZXh0ZW5kID0gZnVuY3Rpb24ob3JpZ2luLCBhZGQpIHtcbiAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgYWRkIGlzbid0IGFuIG9iamVjdFxuICBpZiAoIWFkZCB8fCAhaXNPYmplY3QoYWRkKSkgcmV0dXJuIG9yaWdpbjtcblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFkZCk7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICBvcmlnaW5ba2V5c1tpXV0gPSBhZGRba2V5c1tpXV07XG4gIH1cbiAgcmV0dXJuIG9yaWdpbjtcbn07XG5cbmZ1bmN0aW9uIGhhc093blByb3BlcnR5KG9iaiwgcHJvcCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59XG5cbn0pLmNhbGwodGhpcyxyZXF1aXJlKCdfcHJvY2VzcycpLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHtcIi4vc3VwcG9ydC9pc0J1ZmZlclwiOjEwNCxcIl9wcm9jZXNzXCI6MTAxLFwiaW5oZXJpdHNcIjoxMDN9XSwxMDY6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIGFzc2lnbiwgZ2V0VmFsdWUsIGlzQXJyYXksIGlzRW1wdHksIGlzRnVuY3Rpb24sIGlzT2JqZWN0LCBpc1BsYWluT2JqZWN0LFxuICAgIHNsaWNlID0gW10uc2xpY2UsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGFzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBpLCBrZXksIGxlbiwgc291cmNlLCBzb3VyY2VzLCB0YXJnZXQ7XG4gICAgdGFyZ2V0ID0gYXJndW1lbnRzWzBdLCBzb3VyY2VzID0gMiA8PSBhcmd1bWVudHMubGVuZ3RoID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpIDogW107XG4gICAgaWYgKGlzRnVuY3Rpb24oT2JqZWN0LmFzc2lnbikpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gc291cmNlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBzb3VyY2UgPSBzb3VyY2VzW2ldO1xuICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWwpIHtcbiAgICByZXR1cm4gISF2YWwgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG5cbiAgaXNPYmplY3QgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIgcmVmO1xuICAgIHJldHVybiAhIXZhbCAmJiAoKHJlZiA9IHR5cGVvZiB2YWwpID09PSAnZnVuY3Rpb24nIHx8IHJlZiA9PT0gJ29iamVjdCcpO1xuICB9O1xuXG4gIGlzQXJyYXkgPSBmdW5jdGlvbih2YWwpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihBcnJheS5pc0FycmF5KSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nO1xuICAgIH1cbiAgfTtcblxuICBpc0VtcHR5ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIGtleTtcbiAgICBpZiAoaXNBcnJheSh2YWwpKSB7XG4gICAgICByZXR1cm4gIXZhbC5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoa2V5IGluIHZhbCkge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbCh2YWwsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgaXNQbGFpbk9iamVjdCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHZhciBjdG9yLCBwcm90bztcbiAgICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiAocHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsKSkgJiYgKGN0b3IgPSBwcm90by5jb25zdHJ1Y3RvcikgJiYgKHR5cGVvZiBjdG9yID09PSAnZnVuY3Rpb24nKSAmJiAoY3RvciBpbnN0YW5jZW9mIGN0b3IpICYmIChGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0KSk7XG4gIH07XG5cbiAgZ2V0VmFsdWUgPSBmdW5jdGlvbihvYmopIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvYmoudmFsdWVPZikpIHtcbiAgICAgIHJldHVybiBvYmoudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5cbiAgbW9kdWxlLmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbiAgbW9kdWxlLmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcblxuICBtb2R1bGUuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcblxuICBtb2R1bGUuZXhwb3J0cy5nZXRWYWx1ZSA9IGdldFZhbHVlO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHt9XSwxMDc6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTEF0dHJpYnV0ZTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTEF0dHJpYnV0ZSA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxBdHRyaWJ1dGUocGFyZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gcGFyZW50Lm9wdGlvbnM7XG4gICAgICB0aGlzLnN0cmluZ2lmeSA9IHBhcmVudC5zdHJpbmdpZnk7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhdHRyaWJ1dGUgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnN0cmluZ2lmeS5hdHROYW1lKG5hbWUpO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmF0dFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBYTUxBdHRyaWJ1dGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5hdHRyaWJ1dGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUuZGVidWdJbmZvID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIHJlZiwgcmVmMTtcbiAgICAgIG5hbWUgPSBuYW1lIHx8IHRoaXMubmFtZTtcbiAgICAgIGlmICgobmFtZSA9PSBudWxsKSAmJiAhKChyZWYgPSB0aGlzLnBhcmVudCkgIT0gbnVsbCA/IHJlZi5uYW1lIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcInBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfSBlbHNlIGlmICghKChyZWYxID0gdGhpcy5wYXJlbnQpICE9IG51bGwgPyByZWYxLm5hbWUgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiBcImF0dHJpYnV0ZToge1wiICsgbmFtZSArIFwifVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlOiB7XCIgKyBuYW1lICsgXCJ9LCBwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTEF0dHJpYnV0ZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHt9XSwxMDg6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTENEYXRhLCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ0RhdGEgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxDRGF0YSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxDRGF0YShwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTENEYXRhLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgQ0RBVEEgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGV4dCA9IHRoaXMuc3RyaW5naWZ5LmNkYXRhKHRleHQpO1xuICAgIH1cblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5jZGF0YSh0aGlzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTENEYXRhO1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vWE1MTm9kZVwiOjExOX1dLDEwOTpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MQ29tbWVudCwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTENvbW1lbnQgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxDb21tZW50LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTENvbW1lbnQocGFyZW50LCB0ZXh0KSB7XG4gICAgICBYTUxDb21tZW50Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgY29tbWVudCB0ZXh0LiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy50ZXh0ID0gdGhpcy5zdHJpbmdpZnkuY29tbWVudCh0ZXh0KTtcbiAgICB9XG5cbiAgICBYTUxDb21tZW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENvbW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuc2V0KG9wdGlvbnMpLmNvbW1lbnQodGhpcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxDb21tZW50O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vWE1MTm9kZVwiOjExOX1dLDExMDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRFREQXR0TGlzdCwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERUREF0dExpc3QgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEVERBdHRMaXN0LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERUREF0dExpc3QocGFyZW50LCBlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICBYTUxEVERBdHRMaXN0Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAoZWxlbWVudE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBlbGVtZW50IG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGF0dHJpYnV0ZSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoIWF0dHJpYnV0ZVR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgYXR0cmlidXRlIHR5cGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghZGVmYXVsdFZhbHVlVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBhdHRyaWJ1dGUgZGVmYXVsdC4gXCIgKyB0aGlzLmRlYnVnSW5mbyhlbGVtZW50TmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZVR5cGUuaW5kZXhPZignIycpICE9PSAwKSB7XG4gICAgICAgIGRlZmF1bHRWYWx1ZVR5cGUgPSAnIycgKyBkZWZhdWx0VmFsdWVUeXBlO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWZhdWx0VmFsdWVUeXBlLm1hdGNoKC9eKCNSRVFVSVJFRHwjSU1QTElFRHwjRklYRUR8I0RFRkFVTFQpJC8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGVmYXVsdCB2YWx1ZSB0eXBlOyBleHBlY3RlZDogI1JFUVVJUkVELCAjSU1QTElFRCwgI0ZJWEVEIG9yICNERUZBVUxULiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlICYmICFkZWZhdWx0VmFsdWVUeXBlLm1hdGNoKC9eKCNGSVhFRHwjREVGQVVMVCkkLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVmYXVsdCB2YWx1ZSBvbmx5IGFwcGxpZXMgdG8gI0ZJWEVEIG9yICNERUZBVUxULiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVsZW1lbnROYW1lID0gdGhpcy5zdHJpbmdpZnkuZWxlTmFtZShlbGVtZW50TmFtZSk7XG4gICAgICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSB0aGlzLnN0cmluZ2lmeS5hdHROYW1lKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVUeXBlID0gdGhpcy5zdHJpbmdpZnkuZHRkQXR0VHlwZShhdHRyaWJ1dGVUeXBlKTtcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkQXR0RGVmYXVsdChkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gZGVmYXVsdFZhbHVlVHlwZTtcbiAgICB9XG5cbiAgICBYTUxEVERBdHRMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5kdGRBdHRMaXN0KHRoaXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFREQXR0TGlzdDtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7XCIuL1hNTE5vZGVcIjoxMTl9XSwxMTE6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERUREVsZW1lbnQsIFhNTE5vZGUsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEVERFbGVtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERWxlbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEVERFbGVtZW50KHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIFhNTERUREVsZW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgZWxlbWVudCBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9ICcoI1BDREFUQSknO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gJygnICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfVxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5zdHJpbmdpZnkuZWxlTmFtZShuYW1lKTtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5kdGRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIFhNTERUREVsZW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuc2V0KG9wdGlvbnMpLmR0ZEVsZW1lbnQodGhpcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVERFbGVtZW50O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vWE1MTm9kZVwiOjExOX1dLDExMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRFRERW50aXR5LCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFRERW50aXR5ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERW50aXR5LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERUREVudGl0eShwYXJlbnQsIHBlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRERW50aXR5Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSB2YWx1ZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlID0gISFwZTtcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5LmVsZU5hbWUobmFtZSk7XG4gICAgICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkRW50aXR5VmFsdWUodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5wdWJJRCAmJiAhdmFsdWUuc3lzSUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgYW5kL29yIHN5c3RlbSBpZGVudGlmaWVycyBhcmUgcmVxdWlyZWQgZm9yIGFuIGV4dGVybmFsIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5c3RlbSBpZGVudGlmaWVyIGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBleHRlcm5hbCBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5wdWJJRCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHZhbHVlLnB1YklEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuc3lzSUQgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRCh2YWx1ZS5zeXNJRCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLm5EYXRhICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLm5EYXRhID0gdGhpcy5zdHJpbmdpZnkuZHRkTkRhdGEodmFsdWUubkRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlICYmIHRoaXMubkRhdGEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb3RhdGlvbiBkZWNsYXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiBhIHBhcmFtZXRlciBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MRFRERW50aXR5LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5kdGRFbnRpdHkodGhpcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVERFbnRpdHk7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbn0se1wiLi9VdGlsaXR5XCI6MTA2LFwiLi9YTUxOb2RlXCI6MTE5fV0sMTEzOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxEVEROb3RhdGlvbiwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERURE5vdGF0aW9uID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRETm90YXRpb24sIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFRETm90YXRpb24ocGFyZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRETm90YXRpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgbm90YXRpb24gbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgb3Igc3lzdGVtIGlkZW50aWZpZXJzIGFyZSByZXF1aXJlZCBmb3IgYW4gZXh0ZXJuYWwgZW50aXR5LiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5LmVsZU5hbWUobmFtZSk7XG4gICAgICBpZiAodmFsdWUucHViSUQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnB1YklEID0gdGhpcy5zdHJpbmdpZnkuZHRkUHViSUQodmFsdWUucHViSUQpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLnN5c0lEICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zeXNJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFN5c0lEKHZhbHVlLnN5c0lEKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxEVEROb3RhdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5zZXQob3B0aW9ucykuZHRkTm90YXRpb24odGhpcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVEROb3RhdGlvbjtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7XCIuL1hNTE5vZGVcIjoxMTl9XSwxMTQ6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERlY2xhcmF0aW9uLCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRGVjbGFyYXRpb24gPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEZWNsYXJhdGlvbiwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEZWNsYXJhdGlvbihwYXJlbnQsIHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgcmVmO1xuICAgICAgWE1MRGVjbGFyYXRpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChpc09iamVjdCh2ZXJzaW9uKSkge1xuICAgICAgICByZWYgPSB2ZXJzaW9uLCB2ZXJzaW9uID0gcmVmLnZlcnNpb24sIGVuY29kaW5nID0gcmVmLmVuY29kaW5nLCBzdGFuZGFsb25lID0gcmVmLnN0YW5kYWxvbmU7XG4gICAgICB9XG4gICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgdmVyc2lvbiA9ICcxLjAnO1xuICAgICAgfVxuICAgICAgdGhpcy52ZXJzaW9uID0gdGhpcy5zdHJpbmdpZnkueG1sVmVyc2lvbih2ZXJzaW9uKTtcbiAgICAgIGlmIChlbmNvZGluZyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZW5jb2RpbmcgPSB0aGlzLnN0cmluZ2lmeS54bWxFbmNvZGluZyhlbmNvZGluZyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhbmRhbG9uZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RhbmRhbG9uZSA9IHRoaXMuc3RyaW5naWZ5LnhtbFN0YW5kYWxvbmUoc3RhbmRhbG9uZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MRGVjbGFyYXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuc2V0KG9wdGlvbnMpLmRlY2xhcmF0aW9uKHRoaXMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRGVjbGFyYXRpb247XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbn0se1wiLi9VdGlsaXR5XCI6MTA2LFwiLi9YTUxOb2RlXCI6MTE5fV0sMTE1OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxEVERBdHRMaXN0LCBYTUxEVERFbGVtZW50LCBYTUxEVERFbnRpdHksIFhNTERURE5vdGF0aW9uLCBYTUxEb2NUeXBlLCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERvY1R5cGUgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEb2NUeXBlLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERvY1R5cGUocGFyZW50LCBwdWJJRCwgc3lzSUQpIHtcbiAgICAgIHZhciByZWYsIHJlZjE7XG4gICAgICBYTUxEb2NUeXBlLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICB0aGlzLm5hbWUgPSBcIiFET0NUWVBFXCI7XG4gICAgICB0aGlzLmRvY3VtZW50T2JqZWN0ID0gcGFyZW50O1xuICAgICAgaWYgKGlzT2JqZWN0KHB1YklEKSkge1xuICAgICAgICByZWYgPSBwdWJJRCwgcHViSUQgPSByZWYucHViSUQsIHN5c0lEID0gcmVmLnN5c0lEO1xuICAgICAgfVxuICAgICAgaWYgKHN5c0lEID09IG51bGwpIHtcbiAgICAgICAgcmVmMSA9IFtwdWJJRCwgc3lzSURdLCBzeXNJRCA9IHJlZjFbMF0sIHB1YklEID0gcmVmMVsxXTtcbiAgICAgIH1cbiAgICAgIGlmIChwdWJJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMucHViSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRQdWJJRChwdWJJRCk7XG4gICAgICB9XG4gICAgICBpZiAoc3lzSUQgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN5c0lEID0gdGhpcy5zdHJpbmdpZnkuZHRkU3lzSUQoc3lzSUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFRERWxlbWVudCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmF0dExpc3QgPSBmdW5jdGlvbihlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxEVERBdHRMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5lbnRpdHkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIGZhbHNlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnBFbnRpdHkgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIHRydWUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUubm90YXRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFRETm90YXRpb24odGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5kb2NUeXBlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5lbGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmF0dCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dExpc3QoZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5wZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBFbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90YXRpb24obmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdCgpIHx8IHRoaXMuZG9jdW1lbnRPYmplY3Q7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEb2NUeXBlO1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vVXRpbGl0eVwiOjEwNixcIi4vWE1MRFREQXR0TGlzdFwiOjExMCxcIi4vWE1MRFRERWxlbWVudFwiOjExMSxcIi4vWE1MRFRERW50aXR5XCI6MTEyLFwiLi9YTUxEVEROb3RhdGlvblwiOjExMyxcIi4vWE1MTm9kZVwiOjExOX1dLDExNjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRG9jdW1lbnQsIFhNTE5vZGUsIFhNTFN0cmluZ1dyaXRlciwgWE1MU3RyaW5naWZpZXIsIGlzUGxhaW5PYmplY3QsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBpc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNQbGFpbk9iamVjdDtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgWE1MU3RyaW5naWZpZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ2lmaWVyJyk7XG5cbiAgWE1MU3RyaW5nV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdXcml0ZXInKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERvY3VtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRG9jdW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRG9jdW1lbnQob3B0aW9ucykge1xuICAgICAgWE1MRG9jdW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbnVsbCk7XG4gICAgICB0aGlzLm5hbWUgPSBcIj94bWxcIjtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICBpZiAoIW9wdGlvbnMud3JpdGVyKSB7XG4gICAgICAgIG9wdGlvbnMud3JpdGVyID0gbmV3IFhNTFN0cmluZ1dyaXRlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMuc3RyaW5naWZ5ID0gbmV3IFhNTFN0cmluZ2lmaWVyKG9wdGlvbnMpO1xuICAgICAgdGhpcy5pc0RvY3VtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gICAgICB2YXIgd3JpdGVyT3B0aW9ucztcbiAgICAgIGlmICghd3JpdGVyKSB7XG4gICAgICAgIHdyaXRlciA9IHRoaXMub3B0aW9ucy53cml0ZXI7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qod3JpdGVyKSkge1xuICAgICAgICB3cml0ZXJPcHRpb25zID0gd3JpdGVyO1xuICAgICAgICB3cml0ZXIgPSB0aGlzLm9wdGlvbnMud3JpdGVyLnNldCh3cml0ZXJPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB3cml0ZXIuZG9jdW1lbnQodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5kb2N1bWVudCh0aGlzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERvY3VtZW50O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vVXRpbGl0eVwiOjEwNixcIi4vWE1MTm9kZVwiOjExOSxcIi4vWE1MU3RyaW5nV3JpdGVyXCI6MTIzLFwiLi9YTUxTdHJpbmdpZmllclwiOjEyNH1dLDExNzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MQXR0cmlidXRlLCBYTUxDRGF0YSwgWE1MQ29tbWVudCwgWE1MRFREQXR0TGlzdCwgWE1MRFRERWxlbWVudCwgWE1MRFRERW50aXR5LCBYTUxEVEROb3RhdGlvbiwgWE1MRGVjbGFyYXRpb24sIFhNTERvY1R5cGUsIFhNTERvY3VtZW50Q0IsIFhNTEVsZW1lbnQsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxTdHJpbmdXcml0ZXIsIFhNTFN0cmluZ2lmaWVyLCBYTUxUZXh0LCBnZXRWYWx1ZSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUGxhaW5PYmplY3QsIHJlZixcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGlzUGxhaW5PYmplY3QgPSByZWYuaXNQbGFpbk9iamVjdCwgZ2V0VmFsdWUgPSByZWYuZ2V0VmFsdWU7XG5cbiAgWE1MRWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRWxlbWVudCcpO1xuXG4gIFhNTENEYXRhID0gcmVxdWlyZSgnLi9YTUxDRGF0YScpO1xuXG4gIFhNTENvbW1lbnQgPSByZXF1aXJlKCcuL1hNTENvbW1lbnQnKTtcblxuICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuXG4gIFhNTFRleHQgPSByZXF1aXJlKCcuL1hNTFRleHQnKTtcblxuICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKCcuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbicpO1xuXG4gIFhNTERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9YTUxEZWNsYXJhdGlvbicpO1xuXG4gIFhNTERvY1R5cGUgPSByZXF1aXJlKCcuL1hNTERvY1R5cGUnKTtcblxuICBYTUxEVERBdHRMaXN0ID0gcmVxdWlyZSgnLi9YTUxEVERBdHRMaXN0Jyk7XG5cbiAgWE1MRFRERW50aXR5ID0gcmVxdWlyZSgnLi9YTUxEVERFbnRpdHknKTtcblxuICBYTUxEVERFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxEVERFbGVtZW50Jyk7XG5cbiAgWE1MRFRETm90YXRpb24gPSByZXF1aXJlKCcuL1hNTERURE5vdGF0aW9uJyk7XG5cbiAgWE1MQXR0cmlidXRlID0gcmVxdWlyZSgnLi9YTUxBdHRyaWJ1dGUnKTtcblxuICBYTUxTdHJpbmdpZmllciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5naWZpZXInKTtcblxuICBYTUxTdHJpbmdXcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ1dyaXRlcicpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jdW1lbnRDQiA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxEb2N1bWVudENCKG9wdGlvbnMsIG9uRGF0YSwgb25FbmQpIHtcbiAgICAgIHZhciB3cml0ZXJPcHRpb25zO1xuICAgICAgdGhpcy5uYW1lID0gXCI/eG1sXCI7XG4gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgaWYgKCFvcHRpb25zLndyaXRlcikge1xuICAgICAgICBvcHRpb25zLndyaXRlciA9IG5ldyBYTUxTdHJpbmdXcml0ZXIob3B0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy53cml0ZXIpKSB7XG4gICAgICAgIHdyaXRlck9wdGlvbnMgPSBvcHRpb25zLndyaXRlcjtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKHdyaXRlck9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICAgIHRoaXMud3JpdGVyID0gb3B0aW9ucy53cml0ZXI7XG4gICAgICB0aGlzLnN0cmluZ2lmeSA9IG5ldyBYTUxTdHJpbmdpZmllcihvcHRpb25zKTtcbiAgICAgIHRoaXMub25EYXRhQ2FsbGJhY2sgPSBvbkRhdGEgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgIHRoaXMub25FbmRDYWxsYmFjayA9IG9uRW5kIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudExldmVsID0gLTE7XG4gICAgICB0aGlzLm9wZW5UYWdzID0ge307XG4gICAgICB0aGlzLmRvY3VtZW50U3RhcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICB9XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub2RlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIHJlZjE7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgbm9kZSBuYW1lLlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvb3QgJiYgdGhpcy5jdXJyZW50TGV2ZWwgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY3VtZW50IGNhbiBvbmx5IGhhdmUgb25lIHJvb3Qgbm9kZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICBpZiAoYXR0cmlidXRlcyA9PSBudWxsKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMgPSBnZXRWYWx1ZShhdHRyaWJ1dGVzKTtcbiAgICAgIGlmICghaXNPYmplY3QoYXR0cmlidXRlcykpIHtcbiAgICAgICAgcmVmMSA9IFthdHRyaWJ1dGVzLCB0ZXh0XSwgdGV4dCA9IHJlZjFbMF0sIGF0dHJpYnV0ZXMgPSByZWYxWzFdO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG5ldyBYTUxFbGVtZW50KHRoaXMsIG5hbWUsIGF0dHJpYnV0ZXMpO1xuICAgICAgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jdXJyZW50TGV2ZWwrKztcbiAgICAgIHRoaXMub3BlblRhZ3NbdGhpcy5jdXJyZW50TGV2ZWxdID0gdGhpcy5jdXJyZW50Tm9kZTtcbiAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy50ZXh0KHRleHQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSAmJiB0aGlzLmN1cnJlbnROb2RlIGluc3RhbmNlb2YgWE1MRG9jVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kdGRFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIGF0dE5hbWUsIGF0dFZhbHVlO1xuICAgICAgaWYgKCF0aGlzLmN1cnJlbnROb2RlIHx8IHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXR0KCkgY2FuIG9ubHkgYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBhbiBlbGUoKSBjYWxsIGluIGNhbGxiYWNrIG1vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgICAgZm9yIChhdHROYW1lIGluIG5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChuYW1lLCBhdHROYW1lKSkgY29udGludWU7XG4gICAgICAgICAgYXR0VmFsdWUgPSBuYW1lW2F0dE5hbWVdO1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlKGF0dE5hbWUsIGF0dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5hcHBseSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNraXBOdWxsQXR0cmlidXRlcyB8fCAodmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnROb2RlLmF0dHJpYnV0ZXNbbmFtZV0gPSBuZXcgWE1MQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTFRleHQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIudGV4dChub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxDRGF0YSh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5jZGF0YShub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTENvbW1lbnQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuY29tbWVudChub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MUmF3KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLnJhdyhub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGksIGluc1RhcmdldCwgaW5zVmFsdWUsIGxlbiwgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICB0YXJnZXQgPSBnZXRWYWx1ZSh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHRhcmdldC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGluc1RhcmdldCA9IHRhcmdldFtpXTtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKGluc1RhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGluc1RhcmdldCBpbiB0YXJnZXQpIHtcbiAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbCh0YXJnZXQsIGluc1RhcmdldCkpIGNvbnRpbnVlO1xuICAgICAgICAgIGluc1ZhbHVlID0gdGFyZ2V0W2luc1RhcmdldF07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQsIGluc1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5hcHBseSgpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBuZXcgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50U3RhcnRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkZWNsYXJhdGlvbigpIG11c3QgYmUgdGhlIGZpcnN0IG5vZGUuXCIpO1xuICAgICAgfVxuICAgICAgbm9kZSA9IG5ldyBYTUxEZWNsYXJhdGlvbih0aGlzLCB2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kZWNsYXJhdGlvbihub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRvY3R5cGUgPSBmdW5jdGlvbihyb290LCBwdWJJRCwgc3lzSUQpIHtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmIChyb290ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyByb290IG5vZGUgbmFtZS5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImR0ZCgpIG11c3QgY29tZSBiZWZvcmUgdGhlIHJvb3Qgbm9kZS5cIik7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbmV3IFhNTERvY1R5cGUodGhpcywgcHViSUQsIHN5c0lEKTtcbiAgICAgIHRoaXMuY3VycmVudE5vZGUucm9vdE5vZGVOYW1lID0gcm9vdDtcbiAgICAgIHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudExldmVsKys7XG4gICAgICB0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZHRkRWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFRERWxlbWVudCh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kdGRFbGVtZW50KG5vZGUsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERBdHRMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkQXR0TGlzdChub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIGZhbHNlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5kdGRFbnRpdHkobm9kZSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5wRW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERFbnRpdHkodGhpcywgdHJ1ZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkRW50aXR5KG5vZGUsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm90YXRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERURE5vdGF0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZE5vdGF0aW9uKG5vZGUsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUudXAgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGRvY3VtZW50IG5vZGUgaGFzIG5vIHBhcmVudC5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIHRoaXMuY2xvc2VOb2RlKHRoaXMuY3VycmVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3Blbk5vZGUodGhpcy5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsb3NlTm9kZSh0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXSk7XG4gICAgICB9XG4gICAgICBkZWxldGUgdGhpcy5vcGVuVGFnc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbC0tO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgd2hpbGUgKHRoaXMuY3VycmVudExldmVsID49IDApIHtcbiAgICAgICAgdGhpcy51cCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMub25FbmQoKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub3BlbkN1cnJlbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuTm9kZSh0aGlzLmN1cnJlbnROb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUub3Blbk5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAoIW5vZGUuaXNPcGVuKSB7XG4gICAgICAgIGlmICghdGhpcy5yb290ICYmIHRoaXMuY3VycmVudExldmVsID09PSAwICYmIG5vZGUgaW5zdGFuY2VvZiBYTUxFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5yb290ID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5vcGVuTm9kZShub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCksIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuY2xvc2VOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKCFub2RlLmlzQ2xvc2VkKSB7XG4gICAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmNsb3NlTm9kZShub2RlLCB0aGlzLmN1cnJlbnRMZXZlbCksIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaywgbGV2ZWwpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTdGFydGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLm9uRGF0YUNhbGxiYWNrKGNodW5rLCBsZXZlbCArIDEpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5vbkVuZENhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYnVnSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+XCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub2QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50eHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRhdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNvbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuaW5zID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR0ZCA9IGZ1bmN0aW9uKHJvb3QsIHB1YklELCBzeXNJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdHlwZShyb290LCBwdWJJRCwgc3lzSUQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubiA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmkgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSAmJiB0aGlzLmN1cnJlbnROb2RlIGluc3RhbmNlb2YgWE1MRG9jVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRMaXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYSA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUgJiYgdGhpcy5jdXJyZW50Tm9kZSBpbnN0YW5jZW9mIFhNTERvY1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVudCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5wZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBFbnRpdHkobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub3QgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMubm90YXRpb24obmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRG9jdW1lbnRDQjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vVXRpbGl0eVwiOjEwNixcIi4vWE1MQXR0cmlidXRlXCI6MTA3LFwiLi9YTUxDRGF0YVwiOjEwOCxcIi4vWE1MQ29tbWVudFwiOjEwOSxcIi4vWE1MRFREQXR0TGlzdFwiOjExMCxcIi4vWE1MRFRERWxlbWVudFwiOjExMSxcIi4vWE1MRFRERW50aXR5XCI6MTEyLFwiLi9YTUxEVEROb3RhdGlvblwiOjExMyxcIi4vWE1MRGVjbGFyYXRpb25cIjoxMTQsXCIuL1hNTERvY1R5cGVcIjoxMTUsXCIuL1hNTEVsZW1lbnRcIjoxMTgsXCIuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvblwiOjEyMCxcIi4vWE1MUmF3XCI6MTIxLFwiLi9YTUxTdHJpbmdXcml0ZXJcIjoxMjMsXCIuL1hNTFN0cmluZ2lmaWVyXCI6MTI0LFwiLi9YTUxUZXh0XCI6MTI1fV0sMTE4OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxBdHRyaWJ1dGUsIFhNTEVsZW1lbnQsIFhNTE5vZGUsIGdldFZhbHVlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgcmVmLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGdldFZhbHVlID0gcmVmLmdldFZhbHVlO1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBYTUxBdHRyaWJ1dGUgPSByZXF1aXJlKCcuL1hNTEF0dHJpYnV0ZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRWxlbWVudCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTEVsZW1lbnQsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRWxlbWVudChwYXJlbnQsIG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICAgIFhNTEVsZW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBlbGVtZW50IG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnN0cmluZ2lmeS5lbGVOYW1lKG5hbWUpO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVzID0ge307XG4gICAgICBpZiAoYXR0cmlidXRlcyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlKGF0dHJpYnV0ZXMpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudC5pc0RvY3VtZW50KSB7XG4gICAgICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudE9iamVjdCA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50LnJvb3RPYmplY3QgPSB0aGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYXR0LCBhdHROYW1lLCBjbG9uZWRTZWxmLCByZWYxO1xuICAgICAgY2xvbmVkU2VsZiA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICBpZiAoY2xvbmVkU2VsZi5pc1Jvb3QpIHtcbiAgICAgICAgY2xvbmVkU2VsZi5kb2N1bWVudE9iamVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBjbG9uZWRTZWxmLmF0dHJpYnV0ZXMgPSB7fTtcbiAgICAgIHJlZjEgPSB0aGlzLmF0dHJpYnV0ZXM7XG4gICAgICBmb3IgKGF0dE5hbWUgaW4gcmVmMSkge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYxLCBhdHROYW1lKSkgY29udGludWU7XG4gICAgICAgIGF0dCA9IHJlZjFbYXR0TmFtZV07XG4gICAgICAgIGNsb25lZFNlbGYuYXR0cmlidXRlc1thdHROYW1lXSA9IGF0dC5jbG9uZSgpO1xuICAgICAgfVxuICAgICAgY2xvbmVkU2VsZi5jaGlsZHJlbiA9IFtdO1xuICAgICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHZhciBjbG9uZWRDaGlsZDtcbiAgICAgICAgY2xvbmVkQ2hpbGQgPSBjaGlsZC5jbG9uZSgpO1xuICAgICAgICBjbG9uZWRDaGlsZC5wYXJlbnQgPSBjbG9uZWRTZWxmO1xuICAgICAgICByZXR1cm4gY2xvbmVkU2VsZi5jaGlsZHJlbi5wdXNoKGNsb25lZENoaWxkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNsb25lZFNlbGY7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgYXR0TmFtZSwgYXR0VmFsdWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGF0dE5hbWUgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICBhdHRWYWx1ZSA9IG5hbWVbYXR0TmFtZV07XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGUoYXR0TmFtZSwgYXR0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuc2tpcE51bGxBdHRyaWJ1dGVzIHx8ICh2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1tuYW1lXSA9IG5ldyBYTUxBdHRyaWJ1dGUodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIGF0dE5hbWUsIGksIGxlbjtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhdHRyaWJ1dGUgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IG5hbWUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBhdHROYW1lID0gbmFtZVtpXTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW2F0dE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5hdHRyaWJ1dGVzW25hbWVdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuc2V0KG9wdGlvbnMpLmVsZW1lbnQodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmF0dCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5hID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxFbGVtZW50O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vVXRpbGl0eVwiOjEwNixcIi4vWE1MQXR0cmlidXRlXCI6MTA3LFwiLi9YTUxOb2RlXCI6MTE5fV0sMTE5OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxDRGF0YSwgWE1MQ29tbWVudCwgWE1MRGVjbGFyYXRpb24sIFhNTERvY1R5cGUsIFhNTEVsZW1lbnQsIFhNTE5vZGUsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxUZXh0LCBnZXRWYWx1ZSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIHJlZixcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGlzRW1wdHkgPSByZWYuaXNFbXB0eSwgZ2V0VmFsdWUgPSByZWYuZ2V0VmFsdWU7XG5cbiAgWE1MRWxlbWVudCA9IG51bGw7XG5cbiAgWE1MQ0RhdGEgPSBudWxsO1xuXG4gIFhNTENvbW1lbnQgPSBudWxsO1xuXG4gIFhNTERlY2xhcmF0aW9uID0gbnVsbDtcblxuICBYTUxEb2NUeXBlID0gbnVsbDtcblxuICBYTUxSYXcgPSBudWxsO1xuXG4gIFhNTFRleHQgPSBudWxsO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IG51bGw7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxOb2RlID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTE5vZGUocGFyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnBhcmVudC5vcHRpb25zO1xuICAgICAgICB0aGlzLnN0cmluZ2lmeSA9IHRoaXMucGFyZW50LnN0cmluZ2lmeTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIGlmICghWE1MRWxlbWVudCkge1xuICAgICAgICBYTUxFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxFbGVtZW50Jyk7XG4gICAgICAgIFhNTENEYXRhID0gcmVxdWlyZSgnLi9YTUxDRGF0YScpO1xuICAgICAgICBYTUxDb21tZW50ID0gcmVxdWlyZSgnLi9YTUxDb21tZW50Jyk7XG4gICAgICAgIFhNTERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9YTUxEZWNsYXJhdGlvbicpO1xuICAgICAgICBYTUxEb2NUeXBlID0gcmVxdWlyZSgnLi9YTUxEb2NUeXBlJyk7XG4gICAgICAgIFhNTFJhdyA9IHJlcXVpcmUoJy4vWE1MUmF3Jyk7XG4gICAgICAgIFhNTFRleHQgPSByZXF1aXJlKCcuL1hNTFRleHQnKTtcbiAgICAgICAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcmVxdWlyZSgnLi9YTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkTm9kZSwgaXRlbSwgaiwgaywga2V5LCBsYXN0Q2hpbGQsIGxlbiwgbGVuMSwgcmVmMSwgdmFsO1xuICAgICAgbGFzdENoaWxkID0gbnVsbDtcbiAgICAgIGlmIChhdHRyaWJ1dGVzID09IG51bGwpIHtcbiAgICAgICAgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgfVxuICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlKGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKCFpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgICByZWYxID0gW2F0dHJpYnV0ZXMsIHRleHRdLCB0ZXh0ID0gcmVmMVswXSwgYXR0cmlidXRlcyA9IHJlZjFbMV07XG4gICAgICB9XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IG5hbWUubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBpdGVtID0gbmFtZVtqXTtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihuYW1lKSkge1xuICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQobmFtZS5hcHBseSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QobmFtZSkpIHtcbiAgICAgICAgZm9yIChrZXkgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIHZhbCA9IG5hbWVba2V5XTtcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWwpKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuYXBwbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKChpc09iamVjdCh2YWwpKSAmJiAoaXNFbXB0eSh2YWwpKSkge1xuICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRGVjb3JhdG9ycyAmJiB0aGlzLnN0cmluZ2lmeS5jb252ZXJ0QXR0S2V5ICYmIGtleS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkpID09PSAwKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmF0dHJpYnV0ZShrZXkuc3Vic3RyKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkubGVuZ3RoKSwgdmFsKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuc2VwYXJhdGVBcnJheUl0ZW1zICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHZhbC5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgaXRlbSA9IHZhbFtrXTtcbiAgICAgICAgICAgICAgY2hpbGROb2RlID0ge307XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtrZXldID0gaXRlbTtcbiAgICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5lbGVtZW50KGNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoa2V5KTtcbiAgICAgICAgICAgIGxhc3RDaGlsZC5lbGVtZW50KHZhbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChrZXksIHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLnRleHQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDRGF0YUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydENEYXRhS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuY2RhdGEodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDb21tZW50S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0Q29tbWVudEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmNvbW1lbnQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkgJiYgbmFtZS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkpID09PSAwKSB7XG4gICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5yYXcodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRQSUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuaW5zdHJ1Y3Rpb24obmFtZS5zdWJzdHIodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5Lmxlbmd0aCksIHRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxhc3RDaGlsZCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgYW55IGVsZW1lbnRzIHdpdGg6IFwiICsgbmFtZSArIFwiLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhc3RDaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBpbnNlcnQgZWxlbWVudHMgYXQgcm9vdCBsZXZlbC4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBpbnNlcnQgZWxlbWVudHMgYXQgcm9vdCBsZXZlbC4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSArIDEpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCByZWYxO1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCByZW1vdmUgdGhlIHJvb3QgZWxlbWVudC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgW10uc3BsaWNlLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCBbaSwgaSAtIGkgKyAxXS5jb25jYXQocmVmMSA9IFtdKSksIHJlZjE7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLm5vZGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICB2YXIgY2hpbGQsIHJlZjE7XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGF0dHJpYnV0ZXMgfHwgKGF0dHJpYnV0ZXMgPSB7fSk7XG4gICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWUoYXR0cmlidXRlcyk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJlZjEgPSBbYXR0cmlidXRlcywgdGV4dF0sIHRleHQgPSByZWYxWzBdLCBhdHRyaWJ1dGVzID0gcmVmMVsxXTtcbiAgICAgIH1cbiAgICAgIGNoaWxkID0gbmV3IFhNTEVsZW1lbnQodGhpcywgbmFtZSwgYXR0cmlidXRlcyk7XG4gICAgICBpZiAodGV4dCAhPSBudWxsKSB7XG4gICAgICAgIGNoaWxkLnRleHQodGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTFRleHQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxDRGF0YSh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MQ29tbWVudCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbW1lbnRCZWZvcmUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5jb21tZW50KHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb21tZW50QWZ0ZXIgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkLCBpLCByZW1vdmVkO1xuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkgKyAxKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuY29tbWVudCh2YWx1ZSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTFJhdyh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGluc1RhcmdldCwgaW5zVmFsdWUsIGluc3RydWN0aW9uLCBqLCBsZW47XG4gICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0VmFsdWUodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSB0YXJnZXQubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBpbnNUYXJnZXQgPSB0YXJnZXRbal07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChpbnNUYXJnZXQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwodGFyZ2V0LCBpbnNUYXJnZXQpKSBjb250aW51ZTtcbiAgICAgICAgICBpbnNWYWx1ZSA9IHRhcmdldFtpbnNUYXJnZXRdO1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24oaW5zVGFyZ2V0LCBpbnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0cnVjdGlvbiA9IG5ldyBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhpcywgdGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChpbnN0cnVjdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zdHJ1Y3Rpb25CZWZvcmUgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50Lmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uQWZ0ZXIgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSArIDEpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgZG9jLCB4bWxkZWM7XG4gICAgICBkb2MgPSB0aGlzLmRvY3VtZW50KCk7XG4gICAgICB4bWxkZWMgPSBuZXcgWE1MRGVjbGFyYXRpb24oZG9jLCB2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgICBpZiAoZG9jLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgWE1MRGVjbGFyYXRpb24pIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuWzBdID0geG1sZGVjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuLnVuc2hpZnQoeG1sZGVjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb2Mucm9vdCgpIHx8IGRvYztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZG9jdHlwZSA9IGZ1bmN0aW9uKHB1YklELCBzeXNJRCkge1xuICAgICAgdmFyIGNoaWxkLCBkb2MsIGRvY3R5cGUsIGksIGosIGssIGxlbiwgbGVuMSwgcmVmMSwgcmVmMjtcbiAgICAgIGRvYyA9IHRoaXMuZG9jdW1lbnQoKTtcbiAgICAgIGRvY3R5cGUgPSBuZXcgWE1MRG9jVHlwZShkb2MsIHB1YklELCBzeXNJRCk7XG4gICAgICByZWYxID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBpID0gKytqKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMVtpXTtcbiAgICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgWE1MRG9jVHlwZSkge1xuICAgICAgICAgIGRvYy5jaGlsZHJlbltpXSA9IGRvY3R5cGU7XG4gICAgICAgICAgcmV0dXJuIGRvY3R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZjIgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBrID0gMCwgbGVuMSA9IHJlZjIubGVuZ3RoOyBrIDwgbGVuMTsgaSA9ICsraykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbaV07XG4gICAgICAgIGlmIChjaGlsZC5pc1Jvb3QpIHtcbiAgICAgICAgICBkb2MuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGRvY3R5cGUpO1xuICAgICAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2MuY2hpbGRyZW4ucHVzaChkb2N0eXBlKTtcbiAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSByb290IG5vZGUgaGFzIG5vIHBhcmVudC4gVXNlIGRvYygpIGlmIHlvdSBuZWVkIHRvIGdldCB0aGUgZG9jdW1lbnQgb2JqZWN0LlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucm9vdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBub2RlID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmlzRG9jdW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS5yb290T2JqZWN0O1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaXNSb290KSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRvY3VtZW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIG5vZGUgPSB0aGlzO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaXNEb2N1bWVudCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2N1bWVudCgpLmVuZChvcHRpb25zKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIGlmIChpIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBbHJlYWR5IGF0IHRoZSBmaXJzdCBub2RlLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoaWxkcmVuW2kgLSAxXTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGk7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIGlmIChpID09PSAtMSB8fCBpID09PSB0aGlzLnBhcmVudC5jaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgYXQgdGhlIGxhc3Qgbm9kZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbltpICsgMV07XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmltcG9ydERvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICB2YXIgY2xvbmVkUm9vdDtcbiAgICAgIGNsb25lZFJvb3QgPSBkb2Mucm9vdCgpLmNsb25lKCk7XG4gICAgICBjbG9uZWRSb290LnBhcmVudCA9IHRoaXM7XG4gICAgICBjbG9uZWRSb290LmlzUm9vdCA9IGZhbHNlO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNsb25lZFJvb3QpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRlYnVnSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciByZWYxLCByZWYyO1xuICAgICAgbmFtZSA9IG5hbWUgfHwgdGhpcy5uYW1lO1xuICAgICAgaWYgKChuYW1lID09IG51bGwpICYmICEoKHJlZjEgPSB0aGlzLnBhcmVudCkgIT0gbnVsbCA/IHJlZjEubmFtZSA6IHZvaWQgMCkpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH0gZWxzZSBpZiAoISgocmVmMiA9IHRoaXMucGFyZW50KSAhPSBudWxsID8gcmVmMi5uYW1lIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+LCBwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZWxlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubm9kID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudHh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kYXQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb20gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tbWVudCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlucyA9IGZ1bmN0aW9uKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kb2MgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50KCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmR0ZCA9IGZ1bmN0aW9uKHB1YklELCBzeXNJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdHlwZShwdWJJRCwgc3lzSUQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUubiA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmkgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXAoKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW1wb3J0WE1MQnVpbGRlciA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0RG9jdW1lbnQoZG9jKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTE5vZGU7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7XCIuL1V0aWxpdHlcIjoxMDYsXCIuL1hNTENEYXRhXCI6MTA4LFwiLi9YTUxDb21tZW50XCI6MTA5LFwiLi9YTUxEZWNsYXJhdGlvblwiOjExNCxcIi4vWE1MRG9jVHlwZVwiOjExNSxcIi4vWE1MRWxlbWVudFwiOjExOCxcIi4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uXCI6MTIwLFwiLi9YTUxSYXdcIjoxMjEsXCIuL1hNTFRleHRcIjoxMjV9XSwxMjA6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTE5vZGUsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbixcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyZW50LCB0YXJnZXQsIHZhbHVlKSB7XG4gICAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGluc3RydWN0aW9uIHRhcmdldC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5zdHJpbmdpZnkuaW5zVGFyZ2V0KHRhcmdldCk7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5Lmluc1ZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLnNldChvcHRpb25zKS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhpcyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb247XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbn0se1wiLi9YTUxOb2RlXCI6MTE5fV0sMTIxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxOb2RlLCBYTUxSYXcsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxSYXcgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxSYXcsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MUmF3KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MUmF3Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmF3IHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkucmF3KHRleHQpO1xuICAgIH1cblxuICAgIFhNTFJhdy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxSYXcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuc2V0KG9wdGlvbnMpLnJhdyh0aGlzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFJhdztcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7XCIuL1hNTE5vZGVcIjoxMTl9XSwxMjI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEVERBdHRMaXN0LCBYTUxEVERFbGVtZW50LCBYTUxEVERFbnRpdHksIFhNTERURE5vdGF0aW9uLCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRWxlbWVudCwgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBYTUxSYXcsIFhNTFN0cmVhbVdyaXRlciwgWE1MVGV4dCwgWE1MV3JpdGVyQmFzZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTERlY2xhcmF0aW9uID0gcmVxdWlyZSgnLi9YTUxEZWNsYXJhdGlvbicpO1xuXG4gIFhNTERvY1R5cGUgPSByZXF1aXJlKCcuL1hNTERvY1R5cGUnKTtcblxuICBYTUxDRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ0RhdGEnKTtcblxuICBYTUxDb21tZW50ID0gcmVxdWlyZSgnLi9YTUxDb21tZW50Jyk7XG5cbiAgWE1MRWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRWxlbWVudCcpO1xuXG4gIFhNTFJhdyA9IHJlcXVpcmUoJy4vWE1MUmF3Jyk7XG5cbiAgWE1MVGV4dCA9IHJlcXVpcmUoJy4vWE1MVGV4dCcpO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoJy4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uJyk7XG5cbiAgWE1MRFREQXR0TGlzdCA9IHJlcXVpcmUoJy4vWE1MRFREQXR0TGlzdCcpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERURE5vdGF0aW9uID0gcmVxdWlyZSgnLi9YTUxEVEROb3RhdGlvbicpO1xuXG4gIFhNTFdyaXRlckJhc2UgPSByZXF1aXJlKCcuL1hNTFdyaXRlckJhc2UnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFN0cmVhbVdyaXRlciA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFN0cmVhbVdyaXRlciwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxTdHJlYW1Xcml0ZXIoc3RyZWFtLCBvcHRpb25zKSB7XG4gICAgICBYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB9XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmRvY3VtZW50ID0gZnVuY3Rpb24oZG9jKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIGosIGxlbiwgbGVuMSwgcmVmLCByZWYxLCByZXN1bHRzO1xuICAgICAgcmVmID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICBjaGlsZC5pc0xhc3RSb290Tm9kZSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgZG9jLmNoaWxkcmVuW2RvYy5jaGlsZHJlbi5sZW5ndGggLSAxXS5pc0xhc3RSb290Tm9kZSA9IHRydWU7XG4gICAgICByZWYxID0gZG9jLmNoaWxkcmVuO1xuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChqID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuMTsgaisrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMVtqXTtcbiAgICAgICAgc3dpdGNoIChmYWxzZSkge1xuICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERlY2xhcmF0aW9uKTpcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRlY2xhcmF0aW9uKGNoaWxkKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxEb2NUeXBlKTpcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmRvY1R5cGUoY2hpbGQpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTENvbW1lbnQpOlxuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMuY29tbWVudChjaGlsZCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKTpcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihjaGlsZCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaCh0aGlzLmVsZW1lbnQoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuYXR0cmlidXRlID0gZnVuY3Rpb24oYXR0KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoJyAnICsgYXR0Lm5hbWUgKyAnPVwiJyArIGF0dC52YWx1ZSArICdcIicpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSArICc8IVtDREFUQVsnICsgbm9kZS50ZXh0ICsgJ11dPicgKyB0aGlzLmVuZGxpbmUobm9kZSkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuc3BhY2UobGV2ZWwpICsgJzwhLS0gJyArIG5vZGUudGV4dCArICcgLS0+JyArIHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5zcGFjZShsZXZlbCkpO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJzw/eG1sIHZlcnNpb249XCInICsgbm9kZS52ZXJzaW9uICsgJ1wiJyk7XG4gICAgICBpZiAobm9kZS5lbmNvZGluZyAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgZW5jb2Rpbmc9XCInICsgbm9kZS5lbmNvZGluZyArICdcIicpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3RhbmRhbG9uZSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgc3RhbmRhbG9uZT1cIicgKyBub2RlLnN0YW5kYWxvbmUgKyAnXCInKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICc/PicpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZG9jVHlwZSA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIGxlbiwgcmVmO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSk7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPCFET0NUWVBFICcgKyBub2RlLnJvb3QoKS5uYW1lKTtcbiAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIicpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFsnKTtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUpKTtcbiAgICAgICAgcmVmID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgc3dpdGNoIChmYWxzZSkge1xuICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MRFREQXR0TGlzdCk6XG4gICAgICAgICAgICAgIHRoaXMuZHRkQXR0TGlzdChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxEVERFbGVtZW50KTpcbiAgICAgICAgICAgICAgdGhpcy5kdGRFbGVtZW50KGNoaWxkLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERUREVudGl0eSk6XG4gICAgICAgICAgICAgIHRoaXMuZHRkRW50aXR5KGNoaWxkLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERURE5vdGF0aW9uKTpcbiAgICAgICAgICAgICAgdGhpcy5kdGROb3RhdGlvbihjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxDRGF0YSk6XG4gICAgICAgICAgICAgIHRoaXMuY2RhdGEoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MQ29tbWVudCk6XG4gICAgICAgICAgICAgIHRoaXMuY29tbWVudChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOlxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIERURCBub2RlIHR5cGU6IFwiICsgY2hpbGQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCddJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicpO1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB2YXIgYXR0LCBjaGlsZCwgaSwgbGVuLCBuYW1lLCByZWYsIHJlZjEsIHNwYWNlO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICBzcGFjZSA9IHRoaXMuc3BhY2UobGV2ZWwpO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoc3BhY2UgKyAnPCcgKyBub2RlLm5hbWUpO1xuICAgICAgcmVmID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgZm9yIChuYW1lIGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIG5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgYXR0ID0gcmVmW25hbWVdO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHQpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IG5vZGUuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS52YWx1ZSA9PT0gJyc7XG4gICAgICB9KSkge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0VtcHR5KSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJz48LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICcvPicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJldHR5ICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIChub2RlLmNoaWxkcmVuWzBdLnZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc+Jyk7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKG5vZGUuY2hpbGRyZW5bMF0udmFsdWUpO1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPC8nICsgbm9kZS5uYW1lICsgJz4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc+JyArIHRoaXMubmV3bGluZSk7XG4gICAgICAgIHJlZjEgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWYxW2ldO1xuICAgICAgICAgIHN3aXRjaCAoZmFsc2UpIHtcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTENEYXRhKTpcbiAgICAgICAgICAgICAgdGhpcy5jZGF0YShjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxDb21tZW50KTpcbiAgICAgICAgICAgICAgdGhpcy5jb21tZW50KGNoaWxkLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTEVsZW1lbnQpOlxuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MUmF3KTpcbiAgICAgICAgICAgICAgdGhpcy5yYXcoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MVGV4dCk6XG4gICAgICAgICAgICAgIHRoaXMudGV4dChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pOlxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIFhNTCBub2RlIHR5cGU6IFwiICsgY2hpbGQuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHNwYWNlICsgJzwvJyArIG5vZGUubmFtZSArICc+Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5zcGFjZShsZXZlbCkgKyAnPD8nICsgbm9kZS50YXJnZXQpO1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyAnICsgbm9kZS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5zcGFjZWJlZm9yZXNsYXNoICsgJz8+JyArIHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSArIG5vZGUudmFsdWUgKyB0aGlzLmVuZGxpbmUobm9kZSkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLnRleHQgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuc3BhY2UobGV2ZWwpICsgbm9kZS52YWx1ZSArIHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkQXR0TGlzdCA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSArICc8IUFUVExJU1QgJyArIG5vZGUuZWxlbWVudE5hbWUgKyAnICcgKyBub2RlLmF0dHJpYnV0ZU5hbWUgKyAnICcgKyBub2RlLmF0dHJpYnV0ZVR5cGUpO1xuICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlVHlwZSAhPT0gJyNERUZBVUxUJykge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnICcgKyBub2RlLmRlZmF1bHRWYWx1ZVR5cGUpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgXCInICsgbm9kZS5kZWZhdWx0VmFsdWUgKyAnXCInKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicgKyB0aGlzLmVuZGxpbmUobm9kZSkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5zcGFjZShsZXZlbCkgKyAnPCFFTEVNRU5UICcgKyBub2RlLm5hbWUgKyAnICcgKyBub2RlLnZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicgKyB0aGlzLmVuZGxpbmUobm9kZSkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZEVudGl0eSA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSArICc8IUVOVElUWScpO1xuICAgICAgaWYgKG5vZGUucGUpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyAlJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSgnICcgKyBub2RlLm5hbWUpO1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBcIicgKyBub2RlLnZhbHVlICsgJ1wiJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJyk7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgU1lTVEVNIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5uRGF0YSkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgTkRBVEEgJyArIG5vZGUubkRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5zcGFjZWJlZm9yZXNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kdGROb3RhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLnNwYWNlKGxldmVsKSArICc8IU5PVEFUSU9OICcgKyBub2RlLm5hbWUpO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5wdWJJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiJyk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZW5kbGluZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmICghbm9kZS5pc0xhc3RSb290Tm9kZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXdsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gWE1MU3RyZWFtV3JpdGVyO1xuXG4gIH0pKFhNTFdyaXRlckJhc2UpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vWE1MQ0RhdGFcIjoxMDgsXCIuL1hNTENvbW1lbnRcIjoxMDksXCIuL1hNTERUREF0dExpc3RcIjoxMTAsXCIuL1hNTERUREVsZW1lbnRcIjoxMTEsXCIuL1hNTERUREVudGl0eVwiOjExMixcIi4vWE1MRFRETm90YXRpb25cIjoxMTMsXCIuL1hNTERlY2xhcmF0aW9uXCI6MTE0LFwiLi9YTUxEb2NUeXBlXCI6MTE1LFwiLi9YTUxFbGVtZW50XCI6MTE4LFwiLi9YTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25cIjoxMjAsXCIuL1hNTFJhd1wiOjEyMSxcIi4vWE1MVGV4dFwiOjEyNSxcIi4vWE1MV3JpdGVyQmFzZVwiOjEyNn1dLDEyMzpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MQ0RhdGEsIFhNTENvbW1lbnQsIFhNTERUREF0dExpc3QsIFhNTERUREVsZW1lbnQsIFhNTERUREVudGl0eSwgWE1MRFRETm90YXRpb24sIFhNTERlY2xhcmF0aW9uLCBYTUxEb2NUeXBlLCBYTUxFbGVtZW50LCBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIFhNTFJhdywgWE1MU3RyaW5nV3JpdGVyLCBYTUxUZXh0LCBYTUxXcml0ZXJCYXNlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL1hNTERlY2xhcmF0aW9uJyk7XG5cbiAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuXG4gIFhNTENEYXRhID0gcmVxdWlyZSgnLi9YTUxDRGF0YScpO1xuXG4gIFhNTENvbW1lbnQgPSByZXF1aXJlKCcuL1hNTENvbW1lbnQnKTtcblxuICBYTUxFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxFbGVtZW50Jyk7XG5cbiAgWE1MUmF3ID0gcmVxdWlyZSgnLi9YTUxSYXcnKTtcblxuICBYTUxUZXh0ID0gcmVxdWlyZSgnLi9YTUxUZXh0Jyk7XG5cbiAgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gcmVxdWlyZSgnLi9YTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nKTtcblxuICBYTUxEVERBdHRMaXN0ID0gcmVxdWlyZSgnLi9YTUxEVERBdHRMaXN0Jyk7XG5cbiAgWE1MRFRERWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRFRERWxlbWVudCcpO1xuXG4gIFhNTERUREVudGl0eSA9IHJlcXVpcmUoJy4vWE1MRFRERW50aXR5Jyk7XG5cbiAgWE1MRFRETm90YXRpb24gPSByZXF1aXJlKCcuL1hNTERURE5vdGF0aW9uJyk7XG5cbiAgWE1MV3JpdGVyQmFzZSA9IHJlcXVpcmUoJy4vWE1MV3JpdGVyQmFzZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MU3RyaW5nV3JpdGVyID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MU3RyaW5nV3JpdGVyLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTFN0cmluZ1dyaXRlcihvcHRpb25zKSB7XG4gICAgICBYTUxTdHJpbmdXcml0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5kb2N1bWVudCA9IGZ1bmN0aW9uKGRvYykge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIHIsIHJlZjtcbiAgICAgIHRoaXMudGV4dGlzcHJlc2VudCA9IGZhbHNlO1xuICAgICAgciA9ICcnO1xuICAgICAgcmVmID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICByICs9IChmdW5jdGlvbigpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbHNlKSB7XG4gICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxEZWNsYXJhdGlvbik6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9uKGNoaWxkKTtcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERvY1R5cGUpOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NUeXBlKGNoaWxkKTtcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTENvbW1lbnQpOlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tZW50KGNoaWxkKTtcbiAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NpbmdJbnN0cnVjdGlvbihjaGlsZCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50KGNoaWxkLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wcmV0dHkgJiYgci5zbGljZSgtdGhpcy5uZXdsaW5lLmxlbmd0aCkgPT09IHRoaXMubmV3bGluZSkge1xuICAgICAgICByID0gci5zbGljZSgwLCAtdGhpcy5uZXdsaW5lLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5hdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHQpIHtcbiAgICAgIHJldHVybiAnICcgKyBhdHQubmFtZSArICc9XCInICsgYXR0LnZhbHVlICsgJ1wiJztcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGFjZShsZXZlbCkgKyAnPCFbQ0RBVEFbJyArIG5vZGUudGV4dCArICddXT4nICsgdGhpcy5uZXdsaW5lO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdXcml0ZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3BhY2UobGV2ZWwpICsgJzwhLS0gJyArIG5vZGUudGV4dCArICcgLS0+JyArIHRoaXMubmV3bGluZTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHIgPSB0aGlzLnNwYWNlKGxldmVsKTtcbiAgICAgIHIgKz0gJzw/eG1sIHZlcnNpb249XCInICsgbm9kZS52ZXJzaW9uICsgJ1wiJztcbiAgICAgIGlmIChub2RlLmVuY29kaW5nICE9IG51bGwpIHtcbiAgICAgICAgciArPSAnIGVuY29kaW5nPVwiJyArIG5vZGUuZW5jb2RpbmcgKyAnXCInO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3RhbmRhbG9uZSAhPSBudWxsKSB7XG4gICAgICAgIHIgKz0gJyBzdGFuZGFsb25lPVwiJyArIG5vZGUuc3RhbmRhbG9uZSArICdcIic7XG4gICAgICB9XG4gICAgICByICs9IHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICc/Pic7XG4gICAgICByICs9IHRoaXMubmV3bGluZTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdXcml0ZXIucHJvdG90eXBlLmRvY1R5cGUgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIHIsIHJlZjtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgciA9IHRoaXMuc3BhY2UobGV2ZWwpO1xuICAgICAgciArPSAnPCFET0NUWVBFICcgKyBub2RlLnJvb3QoKS5uYW1lO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgciArPSAnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgciArPSAnIFsnO1xuICAgICAgICByICs9IHRoaXMubmV3bGluZTtcbiAgICAgICAgcmVmID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgciArPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERUREF0dExpc3QpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEF0dExpc3QoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERUREVsZW1lbnQpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEVsZW1lbnQoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTERUREVudGl0eSk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHRkRW50aXR5KGNoaWxkLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICBjYXNlICEoY2hpbGQgaW5zdGFuY2VvZiBYTUxEVEROb3RhdGlvbik6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZHRkTm90YXRpb24oY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTENEYXRhKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZGF0YShjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MQ29tbWVudCk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBEVEQgbm9kZSB0eXBlOiBcIiArIGNoaWxkLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgciArPSAnXSc7XG4gICAgICB9XG4gICAgICByICs9IHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICc+JztcbiAgICAgIHIgKz0gdGhpcy5uZXdsaW5lO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB2YXIgYXR0LCBjaGlsZCwgaSwgaiwgbGVuLCBsZW4xLCBuYW1lLCByLCByZWYsIHJlZjEsIHJlZjIsIHNwYWNlLCB0ZXh0aXNwcmVzZW50d2Fzc2V0O1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICB0ZXh0aXNwcmVzZW50d2Fzc2V0ID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy50ZXh0aXNwcmVzZW50KSB7XG4gICAgICAgIHRoaXMubmV3bGluZSA9ICcnO1xuICAgICAgICB0aGlzLnByZXR0eSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXdsaW5lID0gdGhpcy5uZXdsaW5lZGVmYXVsdDtcbiAgICAgICAgdGhpcy5wcmV0dHkgPSB0aGlzLnByZXR0eWRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBzcGFjZSA9IHRoaXMuc3BhY2UobGV2ZWwpO1xuICAgICAgciA9ICcnO1xuICAgICAgciArPSBzcGFjZSArICc8JyArIG5vZGUubmFtZTtcbiAgICAgIHJlZiA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgIGZvciAobmFtZSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBuYW1lKSkgY29udGludWU7XG4gICAgICAgIGF0dCA9IHJlZltuYW1lXTtcbiAgICAgICAgciArPSB0aGlzLmF0dHJpYnV0ZShhdHQpO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwIHx8IG5vZGUuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS52YWx1ZSA9PT0gJyc7XG4gICAgICB9KSkge1xuICAgICAgICBpZiAodGhpcy5hbGxvd0VtcHR5KSB7XG4gICAgICAgICAgciArPSAnPjwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMubmV3bGluZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByICs9IHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICcvPicgKyB0aGlzLm5ld2xpbmU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV0dHkgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgKG5vZGUuY2hpbGRyZW5bMF0udmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgciArPSAnPic7XG4gICAgICAgIHIgKz0gbm9kZS5jaGlsZHJlblswXS52YWx1ZTtcbiAgICAgICAgciArPSAnPC8nICsgbm9kZS5uYW1lICsgJz4nICsgdGhpcy5uZXdsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZG9udHByZXR0eXRleHRub2Rlcykge1xuICAgICAgICAgIHJlZjEgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gcmVmMVtpXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIHRoaXMudGV4dGlzcHJlc2VudCsrO1xuICAgICAgICAgICAgICB0ZXh0aXNwcmVzZW50d2Fzc2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRleHRpc3ByZXNlbnQpIHtcbiAgICAgICAgICB0aGlzLm5ld2xpbmUgPSAnJztcbiAgICAgICAgICB0aGlzLnByZXR0eSA9IGZhbHNlO1xuICAgICAgICAgIHNwYWNlID0gdGhpcy5zcGFjZShsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgciArPSAnPicgKyB0aGlzLm5ld2xpbmU7XG4gICAgICAgIHJlZjIgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4xID0gcmVmMi5sZW5ndGg7IGogPCBsZW4xOyBqKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgICAgciArPSAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTENEYXRhKTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZGF0YShjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MQ29tbWVudCk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MRWxlbWVudCk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChjaGlsZCwgbGV2ZWwgKyAxKTtcbiAgICAgICAgICAgICAgY2FzZSAhKGNoaWxkIGluc3RhbmNlb2YgWE1MUmF3KTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yYXcoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTFRleHQpOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQoY2hpbGQsIGxldmVsICsgMSk7XG4gICAgICAgICAgICAgIGNhc2UgIShjaGlsZCBpbnN0YW5jZW9mIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbik6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2luZ0luc3RydWN0aW9uKGNoaWxkLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gWE1MIG5vZGUgdHlwZTogXCIgKyBjaGlsZC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZXh0aXNwcmVzZW50d2Fzc2V0KSB7XG4gICAgICAgICAgdGhpcy50ZXh0aXNwcmVzZW50LS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRleHRpc3ByZXNlbnQpIHtcbiAgICAgICAgICB0aGlzLm5ld2xpbmUgPSB0aGlzLm5ld2xpbmVkZWZhdWx0O1xuICAgICAgICAgIHRoaXMucHJldHR5ID0gdGhpcy5wcmV0dHlkZWZhdWx0O1xuICAgICAgICB9XG4gICAgICAgIHIgKz0gc3BhY2UgKyAnPC8nICsgbm9kZS5uYW1lICsgJz4nICsgdGhpcy5uZXdsaW5lO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgciA9IHRoaXMuc3BhY2UobGV2ZWwpICsgJzw/JyArIG5vZGUudGFyZ2V0O1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgciArPSAnICcgKyBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgICAgciArPSB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPz4nICsgdGhpcy5uZXdsaW5lO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwYWNlKGxldmVsKSArIG5vZGUudmFsdWUgKyB0aGlzLm5ld2xpbmU7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcGFjZShsZXZlbCkgKyBub2RlLnZhbHVlICsgdGhpcy5uZXdsaW5lO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdXcml0ZXIucHJvdG90eXBlLmR0ZEF0dExpc3QgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICByID0gdGhpcy5zcGFjZShsZXZlbCkgKyAnPCFBVFRMSVNUICcgKyBub2RlLmVsZW1lbnROYW1lICsgJyAnICsgbm9kZS5hdHRyaWJ1dGVOYW1lICsgJyAnICsgbm9kZS5hdHRyaWJ1dGVUeXBlO1xuICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlVHlwZSAhPT0gJyNERUZBVUxUJykge1xuICAgICAgICByICs9ICcgJyArIG5vZGUuZGVmYXVsdFZhbHVlVHlwZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICByICs9ICcgXCInICsgbm9kZS5kZWZhdWx0VmFsdWUgKyAnXCInO1xuICAgICAgfVxuICAgICAgciArPSB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicgKyB0aGlzLm5ld2xpbmU7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5kdGRFbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnNwYWNlKGxldmVsKSArICc8IUVMRU1FTlQgJyArIG5vZGUubmFtZSArICcgJyArIG5vZGUudmFsdWUgKyB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicgKyB0aGlzLm5ld2xpbmU7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUuZHRkRW50aXR5ID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgciA9IHRoaXMuc3BhY2UobGV2ZWwpICsgJzwhRU5USVRZJztcbiAgICAgIGlmIChub2RlLnBlKSB7XG4gICAgICAgIHIgKz0gJyAlJztcbiAgICAgIH1cbiAgICAgIHIgKz0gJyAnICsgbm9kZS5uYW1lO1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgciArPSAnIFwiJyArIG5vZGUudmFsdWUgKyAnXCInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICAgIHIgKz0gJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLnN5c0lEKSB7XG4gICAgICAgICAgciArPSAnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5uRGF0YSkge1xuICAgICAgICAgIHIgKz0gJyBOREFUQSAnICsgbm9kZS5uRGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgciArPSB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggKyAnPicgKyB0aGlzLm5ld2xpbmU7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5kdGROb3RhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHIgPSB0aGlzLnNwYWNlKGxldmVsKSArICc8IU5PVEFUSU9OICcgKyBub2RlLm5hbWU7XG4gICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5wdWJJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9XG4gICAgICByICs9IHRoaXMuc3BhY2ViZWZvcmVzbGFzaCArICc+JyArIHRoaXMubmV3bGluZTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdXcml0ZXIucHJvdG90eXBlLm9wZW5Ob2RlID0gZnVuY3Rpb24obm9kZSwgbGV2ZWwpIHtcbiAgICAgIHZhciBhdHQsIG5hbWUsIHIsIHJlZjtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBYTUxFbGVtZW50KSB7XG4gICAgICAgIHIgPSB0aGlzLnNwYWNlKGxldmVsKSArICc8JyArIG5vZGUubmFtZTtcbiAgICAgICAgcmVmID0gbm9kZS5hdHRyaWJ1dGVzO1xuICAgICAgICBmb3IgKG5hbWUgaW4gcmVmKSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBuYW1lKSkgY29udGludWU7XG4gICAgICAgICAgYXR0ID0gcmVmW25hbWVdO1xuICAgICAgICAgIHIgKz0gdGhpcy5hdHRyaWJ1dGUoYXR0KTtcbiAgICAgICAgfVxuICAgICAgICByICs9IChub2RlLmNoaWxkcmVuID8gJz4nIDogJy8+JykgKyB0aGlzLm5ld2xpbmU7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgciA9IHRoaXMuc3BhY2UobGV2ZWwpICsgJzwhRE9DVFlQRSAnICsgbm9kZS5yb290Tm9kZU5hbWU7XG4gICAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH1cbiAgICAgICAgciArPSAobm9kZS5jaGlsZHJlbiA/ICcgWycgOiAnPicpICsgdGhpcy5uZXdsaW5lO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MU3RyaW5nV3JpdGVyLnByb3RvdHlwZS5jbG9zZU5vZGUgPSBmdW5jdGlvbihub2RlLCBsZXZlbCkge1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICBzd2l0Y2ggKGZhbHNlKSB7XG4gICAgICAgIGNhc2UgIShub2RlIGluc3RhbmNlb2YgWE1MRWxlbWVudCk6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3BhY2UobGV2ZWwpICsgJzwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMubmV3bGluZTtcbiAgICAgICAgY2FzZSAhKG5vZGUgaW5zdGFuY2VvZiBYTUxEb2NUeXBlKTpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zcGFjZShsZXZlbCkgKyAnXT4nICsgdGhpcy5uZXdsaW5lO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gWE1MU3RyaW5nV3JpdGVyO1xuXG4gIH0pKFhNTFdyaXRlckJhc2UpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHtcIi4vWE1MQ0RhdGFcIjoxMDgsXCIuL1hNTENvbW1lbnRcIjoxMDksXCIuL1hNTERUREF0dExpc3RcIjoxMTAsXCIuL1hNTERUREVsZW1lbnRcIjoxMTEsXCIuL1hNTERUREVudGl0eVwiOjExMixcIi4vWE1MRFRETm90YXRpb25cIjoxMTMsXCIuL1hNTERlY2xhcmF0aW9uXCI6MTE0LFwiLi9YTUxEb2NUeXBlXCI6MTE1LFwiLi9YTUxFbGVtZW50XCI6MTE4LFwiLi9YTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25cIjoxMjAsXCIuL1hNTFJhd1wiOjEyMSxcIi4vWE1MVGV4dFwiOjEyNSxcIi4vWE1MV3JpdGVyQmFzZVwiOjEyNn1dLDEyNDpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7XG4vLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MU3RyaW5naWZpZXIsXG4gICAgYmluZCA9IGZ1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MU3RyaW5naWZpZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MU3RyaW5naWZpZXIob3B0aW9ucykge1xuICAgICAgdGhpcy5hc3NlcnRMZWdhbENoYXIgPSBiaW5kKHRoaXMuYXNzZXJ0TGVnYWxDaGFyLCB0aGlzKTtcbiAgICAgIHZhciBrZXksIHJlZiwgdmFsdWU7XG4gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgdGhpcy5ub0RvdWJsZUVuY29kaW5nID0gb3B0aW9ucy5ub0RvdWJsZUVuY29kaW5nO1xuICAgICAgcmVmID0gb3B0aW9ucy5zdHJpbmdpZnkgfHwge307XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmVsZU5hbWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5lbGVUZXh0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih0aGlzLmVsRXNjYXBlKHZhbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ11dPicsICddXV1dPjwhW0NEQVRBWz4nKTtcbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih2YWwpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAodmFsLm1hdGNoKC8tLS8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1lbnQgdGV4dCBjYW5ub3QgY29udGFpbiBkb3VibGUtaHlwZW46IFwiICsgdmFsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih2YWwpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hdHROYW1lID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hdHRWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICByZXR1cm4gdGhpcy5hdHRFc2NhcGUodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmluc1RhcmdldCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICcnICsgdmFsIHx8ICcnO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuaW5zVmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgaWYgKHZhbC5tYXRjaCgvXFw/Pi8pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiB2YWx1ZTogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFZlcnNpb24gPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgaWYgKCF2YWwubWF0Y2goLzFcXC5bMC05XSsvKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZlcnNpb24gbnVtYmVyOiBcIiArIHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUueG1sRW5jb2RpbmcgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHZhbCA9ICcnICsgdmFsIHx8ICcnO1xuICAgICAgaWYgKCF2YWwubWF0Y2goL15bQS1aYS16XSg/OltBLVphLXowLTkuXy1dKSokLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBlbmNvZGluZzogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFN0YW5kYWxvbmUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIFwieWVzXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkUHViSUQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAnJyArIHZhbCB8fCAnJztcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZFN5c0lEID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRFbGVtZW50VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAnJyArIHZhbCB8fCAnJztcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEF0dFR5cGUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAnJyArIHZhbCB8fCAnJztcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEF0dERlZmF1bHQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkRW50aXR5VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAnJyArIHZhbCB8fCAnJztcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZE5EYXRhID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0QXR0S2V5ID0gJ0AnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRQSUtleSA9ICc/JztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0VGV4dEtleSA9ICcjdGV4dCc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydENEYXRhS2V5ID0gJyNjZGF0YSc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydENvbW1lbnRLZXkgPSAnI2NvbW1lbnQnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRSYXdLZXkgPSAnI3Jhdyc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuYXNzZXJ0TGVnYWxDaGFyID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICB2YXIgcmVzO1xuICAgICAgcmVzID0gc3RyLm1hdGNoKC9bXFwwXFx1RkZGRVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdLyk7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIHN0cmluZzogXCIgKyBzdHIgKyBcIiBhdCBpbmRleCBcIiArIHJlcy5pbmRleCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciBhbXByZWdleDtcbiAgICAgIGFtcHJlZ2V4ID0gdGhpcy5ub0RvdWJsZUVuY29kaW5nID8gLyg/ISZcXFMrOykmL2cgOiAvJi9nO1xuICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKGFtcHJlZ2V4LCAnJmFtcDsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpLnJlcGxhY2UoL1xcci9nLCAnJiN4RDsnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmF0dEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGFtcHJlZ2V4O1xuICAgICAgYW1wcmVnZXggPSB0aGlzLm5vRG91YmxlRW5jb2RpbmcgPyAvKD8hJlxcUys7KSYvZyA6IC8mL2c7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW1wcmVnZXgsICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykucmVwbGFjZSgvXFx0L2csICcmI3g5OycpLnJlcGxhY2UoL1xcbi9nLCAnJiN4QTsnKS5yZXBsYWNlKC9cXHIvZywgJyYjeEQ7Jyk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxTdHJpbmdpZmllcjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuXG59LHt9XSwxMjU6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpe1xuLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTE5vZGUsIFhNTFRleHQsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxUZXh0ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MVGV4dCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxUZXh0KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MVGV4dC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGVsZW1lbnQgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5lbGVUZXh0KHRleHQpO1xuICAgIH1cblxuICAgIFhNTFRleHQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MVGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5zZXQob3B0aW9ucykudGV4dCh0aGlzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFRleHQ7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG5cbn0se1wiLi9YTUxOb2RlXCI6MTE5fV0sMTI2OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxXcml0ZXJCYXNlLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFdyaXRlckJhc2UgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MV3JpdGVyQmFzZShvcHRpb25zKSB7XG4gICAgICB2YXIga2V5LCByZWYsIHJlZjEsIHJlZjIsIHJlZjMsIHJlZjQsIHJlZjUsIHJlZjYsIHZhbHVlO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHRoaXMucHJldHR5ID0gb3B0aW9ucy5wcmV0dHkgfHwgZmFsc2U7XG4gICAgICB0aGlzLmFsbG93RW1wdHkgPSAocmVmID0gb3B0aW9ucy5hbGxvd0VtcHR5KSAhPSBudWxsID8gcmVmIDogZmFsc2U7XG4gICAgICBpZiAodGhpcy5wcmV0dHkpIHtcbiAgICAgICAgdGhpcy5pbmRlbnQgPSAocmVmMSA9IG9wdGlvbnMuaW5kZW50KSAhPSBudWxsID8gcmVmMSA6ICcgICc7XG4gICAgICAgIHRoaXMubmV3bGluZSA9IChyZWYyID0gb3B0aW9ucy5uZXdsaW5lKSAhPSBudWxsID8gcmVmMiA6ICdcXG4nO1xuICAgICAgICB0aGlzLm9mZnNldCA9IChyZWYzID0gb3B0aW9ucy5vZmZzZXQpICE9IG51bGwgPyByZWYzIDogMDtcbiAgICAgICAgdGhpcy5kb250cHJldHR5dGV4dG5vZGVzID0gKHJlZjQgPSBvcHRpb25zLmRvbnRwcmV0dHl0ZXh0bm9kZXMpICE9IG51bGwgPyByZWY0IDogMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5kZW50ID0gJyc7XG4gICAgICAgIHRoaXMubmV3bGluZSA9ICcnO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuZG9udHByZXR0eXRleHRub2RlcyA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggPSAocmVmNSA9IG9wdGlvbnMuc3BhY2ViZWZvcmVzbGFzaCkgIT0gbnVsbCA/IHJlZjUgOiAnJztcbiAgICAgIGlmICh0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5zcGFjZWJlZm9yZXNsYXNoID0gJyAnO1xuICAgICAgfVxuICAgICAgdGhpcy5uZXdsaW5lZGVmYXVsdCA9IHRoaXMubmV3bGluZTtcbiAgICAgIHRoaXMucHJldHR5ZGVmYXVsdCA9IHRoaXMucHJldHR5O1xuICAgICAgcmVmNiA9IG9wdGlvbnMud3JpdGVyIHx8IHt9O1xuICAgICAgZm9yIChrZXkgaW4gcmVmNikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWY2LCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWY2W2tleV07XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHZhciBrZXksIHJlZiwgdmFsdWU7XG4gICAgICBvcHRpb25zIHx8IChvcHRpb25zID0ge30pO1xuICAgICAgaWYgKFwicHJldHR5XCIgaW4gb3B0aW9ucykge1xuICAgICAgICB0aGlzLnByZXR0eSA9IG9wdGlvbnMucHJldHR5O1xuICAgICAgfVxuICAgICAgaWYgKFwiYWxsb3dFbXB0eVwiIGluIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5hbGxvd0VtcHR5ID0gb3B0aW9ucy5hbGxvd0VtcHR5O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucHJldHR5KSB7XG4gICAgICAgIHRoaXMuaW5kZW50ID0gXCJpbmRlbnRcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5pbmRlbnQgOiAnICAnO1xuICAgICAgICB0aGlzLm5ld2xpbmUgPSBcIm5ld2xpbmVcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5uZXdsaW5lIDogJ1xcbic7XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gXCJvZmZzZXRcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5vZmZzZXQgOiAwO1xuICAgICAgICB0aGlzLmRvbnRwcmV0dHl0ZXh0bm9kZXMgPSBcImRvbnRwcmV0dHl0ZXh0bm9kZXNcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5kb250cHJldHR5dGV4dG5vZGVzIDogMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5kZW50ID0gJyc7XG4gICAgICAgIHRoaXMubmV3bGluZSA9ICcnO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHRoaXMuZG9udHByZXR0eXRleHRub2RlcyA9IDA7XG4gICAgICB9XG4gICAgICB0aGlzLnNwYWNlYmVmb3Jlc2xhc2ggPSBcInNwYWNlYmVmb3Jlc2xhc2hcIiBpbiBvcHRpb25zID8gb3B0aW9ucy5zcGFjZWJlZm9yZXNsYXNoIDogJyc7XG4gICAgICBpZiAodGhpcy5zcGFjZWJlZm9yZXNsYXNoID09PSB0cnVlKSB7XG4gICAgICAgIHRoaXMuc3BhY2ViZWZvcmVzbGFzaCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHRoaXMubmV3bGluZWRlZmF1bHQgPSB0aGlzLm5ld2xpbmU7XG4gICAgICB0aGlzLnByZXR0eWRlZmF1bHQgPSB0aGlzLnByZXR0eTtcbiAgICAgIHJlZiA9IG9wdGlvbnMud3JpdGVyIHx8IHt9O1xuICAgICAgZm9yIChrZXkgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gcmVmW2tleV07XG4gICAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnNwYWNlID0gZnVuY3Rpb24obGV2ZWwpIHtcbiAgICAgIHZhciBpbmRlbnQ7XG4gICAgICBpZiAodGhpcy5wcmV0dHkpIHtcbiAgICAgICAgaW5kZW50ID0gKGxldmVsIHx8IDApICsgdGhpcy5vZmZzZXQgKyAxO1xuICAgICAgICBpZiAoaW5kZW50ID4gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoaW5kZW50KS5qb2luKHRoaXMuaW5kZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFdyaXRlckJhc2U7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7fV0sMTI3OltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXtcbi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxEb2N1bWVudCwgWE1MRG9jdW1lbnRDQiwgWE1MU3RyZWFtV3JpdGVyLCBYTUxTdHJpbmdXcml0ZXIsIGFzc2lnbiwgaXNGdW5jdGlvbiwgcmVmO1xuXG4gIHJlZiA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLCBhc3NpZ24gPSByZWYuYXNzaWduLCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb247XG5cbiAgWE1MRG9jdW1lbnQgPSByZXF1aXJlKCcuL1hNTERvY3VtZW50Jyk7XG5cbiAgWE1MRG9jdW1lbnRDQiA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnRDQicpO1xuXG4gIFhNTFN0cmluZ1dyaXRlciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5nV3JpdGVyJyk7XG5cbiAgWE1MU3RyZWFtV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJlYW1Xcml0ZXInKTtcblxuICBtb2R1bGUuZXhwb3J0cy5jcmVhdGUgPSBmdW5jdGlvbihuYW1lLCB4bWxkZWMsIGRvY3R5cGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgZG9jLCByb290O1xuICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlJvb3QgZWxlbWVudCBuZWVkcyBhIG5hbWUuXCIpO1xuICAgIH1cbiAgICBvcHRpb25zID0gYXNzaWduKHt9LCB4bWxkZWMsIGRvY3R5cGUsIG9wdGlvbnMpO1xuICAgIGRvYyA9IG5ldyBYTUxEb2N1bWVudChvcHRpb25zKTtcbiAgICByb290ID0gZG9jLmVsZW1lbnQobmFtZSk7XG4gICAgaWYgKCFvcHRpb25zLmhlYWRsZXNzKSB7XG4gICAgICBkb2MuZGVjbGFyYXRpb24ob3B0aW9ucyk7XG4gICAgICBpZiAoKG9wdGlvbnMucHViSUQgIT0gbnVsbCkgfHwgKG9wdGlvbnMuc3lzSUQgIT0gbnVsbCkpIHtcbiAgICAgICAgZG9jLmRvY3R5cGUob3B0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb290O1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLmJlZ2luID0gZnVuY3Rpb24ob3B0aW9ucywgb25EYXRhLCBvbkVuZCkge1xuICAgIHZhciByZWYxO1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICByZWYxID0gW29wdGlvbnMsIG9uRGF0YV0sIG9uRGF0YSA9IHJlZjFbMF0sIG9uRW5kID0gcmVmMVsxXTtcbiAgICAgIG9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgaWYgKG9uRGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxEb2N1bWVudENCKG9wdGlvbnMsIG9uRGF0YSwgb25FbmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFhNTERvY3VtZW50KG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5zdHJpbmdXcml0ZXIgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBYTUxTdHJpbmdXcml0ZXIob3B0aW9ucyk7XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuc3RyZWFtV3JpdGVyID0gZnVuY3Rpb24oc3RyZWFtLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBYTUxTdHJlYW1Xcml0ZXIoc3RyZWFtLCBvcHRpb25zKTtcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcblxufSx7XCIuL1V0aWxpdHlcIjoxMDYsXCIuL1hNTERvY3VtZW50XCI6MTE2LFwiLi9YTUxEb2N1bWVudENCXCI6MTE3LFwiLi9YTUxTdHJlYW1Xcml0ZXJcIjoxMjIsXCIuL1hNTFN0cmluZ1dyaXRlclwiOjEyM31dfSx7fSxbMjFdKSgyMSlcbn0pOyIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBZnJpa2FhbnMgW2FmXVxuLy8hIGF1dGhvciA6IFdlcm5lciBNb2xsZW50emUgOiBodHRwczovL2dpdGh1Yi5jb20vd2VybmVybVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFmID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYWYnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmllX0ZlYnJ1YXJpZV9NYWFydF9BcHJpbF9NZWlfSnVuaWVfSnVsaWVfQXVndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU29uZGFnX01hYW5kYWdfRGluc2RhZ19Xb2Vuc2RhZ19Eb25kZXJkYWdfVnJ5ZGFnX1NhdGVyZGFnJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU29uX01hYV9EaW5fV29lX0Rvbl9WcnlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01hX0RpX1dvX0RvX1ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvdm18bm0vaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL15ubSQvaS50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICd2bScgOiAnVk0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdubScgOiAnTk0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1ZhbmRhZyBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tNw7RyZSBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHaXN0ZXIgb21dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhYXNdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29vciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlJyxcbiAgICAgICAgICAgIHM6IFwiJ24gcGFhciBzZWtvbmRlc1wiLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRlcycsXG4gICAgICAgICAgICBtOiBcIiduIG1pbnV1dFwiLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGUnLFxuICAgICAgICAgICAgaDogXCInbiB1dXJcIixcbiAgICAgICAgICAgIGhoOiAnJWQgdXJlJyxcbiAgICAgICAgICAgIGQ6IFwiJ24gZGFnXCIsXG4gICAgICAgICAgICBkZDogJyVkIGRhZScsXG4gICAgICAgICAgICBNOiBcIiduIG1hYW5kXCIsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZScsXG4gICAgICAgICAgICB5OiBcIiduIGphYXJcIixcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7IC8vIFRoYW5rcyB0byBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pqdXBpdGVyXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTWFhbmRhZyBpcyBkaWUgZWVyc3RlIGRhZyB2YW4gZGllIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIERpZSB3ZWVrIHdhdCBkaWUgNGRlIEphbnVhcmllIGJldmF0IGlzIGRpZSBlZXJzdGUgd2VlayB2YW4gZGllIGphYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYWY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChBbGdlcmlhKSBbYXItZHpdXG4vLyEgYXV0aG9yIDogQW1pbmUgUm91a2g6IGh0dHBzOi8vZ2l0aHViLmNvbS9BbWluZTI3XG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcbi8vISBhdXRob3IgOiBOb3VyZWRkaW5lIExPVUFIRURKIDogaHR0cHM6Ly9naXRodWIuY29tL25vdXJlZGRpbmVtXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgICAgICAgICAgICAgOiA1O1xuICAgICAgICB9LFxuICAgICAgICBwbHVyYWxzID0ge1xuICAgICAgICAgICAgczogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICAgICAn2KvYp9mG2YrYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICAgICAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYr9mC2YrZgtiq2KfZhicsICfYr9mC2YrZgtiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGg6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LPYp9i52KknLFxuICAgICAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KfYqicsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGQ6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICAgICAn2YrZiNmFINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINmK2YjZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIE06IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgICAgICBbJ9i02YfYsdin2YYnLCAn2LTZh9ix2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICAgICAnJWQg2LTZh9ixJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB5OiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi52KfZhScsXG4gICAgICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYudmI2KfZhScsXG4gICAgICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2KfZhtmB2YonLFxuICAgICAgICAgICAgJ9mB2YrZgdix2YonLFxuICAgICAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgICAgICfYo9mB2LHZitmEJyxcbiAgICAgICAgICAgICfZhdin2YonLFxuICAgICAgICAgICAgJ9is2YjYp9mGJyxcbiAgICAgICAgICAgICfYrNmI2YrZhNmK2KknLFxuICAgICAgICAgICAgJ9ij2YjYqicsXG4gICAgICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBhckR6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItZHonLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL1xcdTIwMEZNL1xcdTIwMEZZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyRHo7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChLdXdhaXQpIFthci1rd11cbi8vISBhdXRob3IgOiBOdXNyZXQgUGFybGFrOiBodHRwczovL2dpdGh1Yi5jb20vbnVzcmV0cGFybGFrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYXJLdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWt3Jywge1xuICAgICAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYqtmG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KfYrdivX9in2KrZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyS3c7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChMaWJ5YSkgW2FyLWx5XVxuLy8hIGF1dGhvciA6IEFsaSBIbWVyOiBodHRwczovL2dpdGh1Yi5jb20va2lrb2FuaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAnMScsXG4gICAgICAgICAgICAyOiAnMicsXG4gICAgICAgICAgICAzOiAnMycsXG4gICAgICAgICAgICA0OiAnNCcsXG4gICAgICAgICAgICA1OiAnNScsXG4gICAgICAgICAgICA2OiAnNicsXG4gICAgICAgICAgICA3OiAnNycsXG4gICAgICAgICAgICA4OiAnOCcsXG4gICAgICAgICAgICA5OiAnOScsXG4gICAgICAgICAgICAwOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgOiBuID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogNTtcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFscyA9IHtcbiAgICAgICAgICAgIHM6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYq9mI2KfZhicsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICfYr9mC2YrZgtipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBoOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAn2LPYp9i52Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYs9in2LnYqtin2YYnLCAn2LPYp9i52KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINmK2YjZhScsXG4gICAgICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBNOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi02YfYsScsXG4gICAgICAgICAgICAgICAgJ9i02YfYsSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LHYpycsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgICAgICfYudin2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LnYp9mF2KfZhicsICfYudin2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBwbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07XG4gICAgICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfZitmG2KfZitixJyxcbiAgICAgICAgICAgICfZgdio2LHYp9mK2LEnLFxuICAgICAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgICAgICfYo9io2LHZitmEJyxcbiAgICAgICAgICAgICfZhdin2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmG2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmE2YrZiCcsXG4gICAgICAgICAgICAn2KPYutiz2LfYsycsXG4gICAgICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBhckx5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbHknLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdEL1xcdTIwMEZNL1xcdTIwMEZZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2YvYpyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgbW06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgICAgICBkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgTU06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyTHk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChNb3JvY2NvKSBbYXItbWFdXG4vLyEgYXV0aG9yIDogRWxGYWRpbGkgWWFzc2luZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbEZhZGlsaVlcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGFyTWEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1tYScsIHtcbiAgICAgICAgbW9udGhzOiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9in2K3Yr1/Yp9ir2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgICAgICBzOiAn2KvZiNin2YYnLFxuICAgICAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgIGQ6ICfZitmI2YUnLFxuICAgICAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJNYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKFBhbGVzdGluZSkgW2FyLXBzXVxuLy8hIGF1dGhvciA6IE1hamQgQWwtU2hpaGFiaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWpkYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYXJQcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLXBzJywge1xuICAgICAgICBtb250aHM6ICfZg9in2YbZiNmGINin2YTYq9in2YbZil/YtNio2KfYt1/Yotiw2KfYsV/ZhtmK2LPYp9mGX9ij2YrZkdin2LFf2K3YstmK2LHYp9mGX9iq2YXZkdmI2LJf2KLYqF/Yo9mK2YTZiNmEX9iq2LTYsdmKINin2YTYo9mI2ZHZhF/Yqti02LHZitmGINin2YTYq9in2YbZil/Zg9in2YbZiNmGINin2YTYo9mI2ZHZhCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2YPZol/YtNio2KfYt1/Yotiw2KfYsV/ZhtmK2LPYp9mGX9ij2YrZkdin2LFf2K3YstmK2LHYp9mGX9iq2YXZkdmI2LJf2KLYqF/Yo9mK2YTZiNmEX9iq2aFf2KrZol/Zg9mhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3BsaXQoJycpIC8vIHJldmVyc2VkIHNpbmNlIG5lZ2F0aXZlIGxvb2tiZWhpbmQgbm90IHN1cHBvcnRlZCBldmVyeXdoZXJlXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZol0oPyFbXFx1MDYyYVxcdTA2NDNdKS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3BsaXQoJycpXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFyUHM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChTYXVkaSBBcmFiaWEpIFthci1zYV1cbi8vISBhdXRob3IgOiBTdWhhaWwgQWxrb3dhaWxlZXQgOiBodHRwczovL2dpdGh1Yi5jb20veHNvaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfZoScsXG4gICAgICAgICAgICAyOiAn2aInLFxuICAgICAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgICAgIDQ6ICfZpCcsXG4gICAgICAgICAgICA1OiAn2aUnLFxuICAgICAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgICAgIDc6ICfZpycsXG4gICAgICAgICAgICA4OiAn2agnLFxuICAgICAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgICAgIDA6ICfZoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgICAgICfZoic6ICcyJyxcbiAgICAgICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgICAgICfZpSc6ICc1JyxcbiAgICAgICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgICAgICfZqCc6ICc4JyxcbiAgICAgICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgICAgICfZoCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBhclNhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItc2EnLCB7XG4gICAgICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXJTYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgIDogIEFyYWJpYyAoVHVuaXNpYSkgW2FyLXRuXVxuLy8hIGF1dGhvciA6IE5hZGVyIFRvdWthYnJpIDogaHR0cHM6Ly9naXRodWIuY29tL25hZGVyaW9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBhclRuID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXItdG4nLCB7XG4gICAgICAgIG1vbnRoczogJ9is2KfZhtmB2Ypf2YHZitmB2LHZil/Zhdin2LHYs1/Yo9mB2LHZitmEX9mF2KfZil/YrNmI2KfZhl/YrNmI2YrZhNmK2Klf2KPZiNiqX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YHZiiAlcycsXG4gICAgICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgICAgICBzczogJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgIGg6ICfYs9in2LnYqScsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgICAgICBkZDogJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICB5OiAn2LPZhtipJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhclRuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyBbYXJdXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuLy8hIGF1dGhvciA6IEFobWVkIEVsa2hhdGliXG4vLyEgYXV0aG9yIDogZm9yYWJpIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JhYmlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgcmV0dXJuIG4gPT09IDBcbiAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgICAgOiBuID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgICAgICA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwXG4gICAgICAgICAgICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogNTtcbiAgICAgICAgfSxcbiAgICAgICAgcGx1cmFscyA9IHtcbiAgICAgICAgICAgIHM6IFtcbiAgICAgICAgICAgICAgICAn2KPZgtmEINmF2YYg2KvYp9mG2YrYqScsXG4gICAgICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLFxuICAgICAgICAgICAgICAgICclZCDYq9mI2KfZhicsXG4gICAgICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICfYr9mC2YrZgtipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICAgICAgJyVkINiv2YLZitmC2KknLFxuICAgICAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBoOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICAgICAn2LPYp9i52Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICAgICAgWyfYs9in2LnYqtin2YYnLCAn2LPYp9i52KrZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINmK2YjZhScsXG4gICAgICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPZitin2YUnLFxuICAgICAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2YrZiNmFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBNOiBbXG4gICAgICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi02YfYsScsXG4gICAgICAgICAgICAgICAgJ9i02YfYsSDZiNin2K3YrycsXG4gICAgICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICAgICAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgICAgICclZCDYtNmH2LHYpycsXG4gICAgICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgeTogW1xuICAgICAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgICAgICfYudin2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgICAgIFsn2LnYp9mF2KfZhicsICfYudin2YXZitmGJ10sXG4gICAgICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgICAgICclZCDYudin2YXZi9inJyxcbiAgICAgICAgICAgICAgICAnJWQg2LnYp9mFJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHBsdXJhbGl6ZSA9IGZ1bmN0aW9uICh1KSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBwbHVyYWxzW3VdW3BsdXJhbEZvcm0obnVtYmVyKV07XG4gICAgICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfZitmG2KfZitixJyxcbiAgICAgICAgICAgICfZgdio2LHYp9mK2LEnLFxuICAgICAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgICAgICfYo9io2LHZitmEJyxcbiAgICAgICAgICAgICfZhdin2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmG2YrZiCcsXG4gICAgICAgICAgICAn2YrZiNmE2YrZiCcsXG4gICAgICAgICAgICAn2KPYutiz2LfYsycsXG4gICAgICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZgdmF2KjYsScsXG4gICAgICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBhciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfZhdmG2LAgJXMnLFxuICAgICAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgICAgICBtOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgaGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgICAgICBNOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICAgICAgeXk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhcjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBemVyYmFpamFuaSBbYXpdXG4vLyEgYXV0aG9yIDogdG9wY2hpeWV2IDogaHR0cHM6Ly9naXRodWIuY29tL3RvcGNoaXlldlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiAnLWluY2knLFxuICAgICAgICA1OiAnLWluY2knLFxuICAgICAgICA4OiAnLWluY2knLFxuICAgICAgICA3MDogJy1pbmNpJyxcbiAgICAgICAgODA6ICctaW5jaScsXG4gICAgICAgIDI6ICctbmNpJyxcbiAgICAgICAgNzogJy1uY2knLFxuICAgICAgICAyMDogJy1uY2knLFxuICAgICAgICA1MDogJy1uY2knLFxuICAgICAgICAzOiAnLcO8bmPDvCcsXG4gICAgICAgIDQ6ICctw7xuY8O8JyxcbiAgICAgICAgMTAwOiAnLcO8bmPDvCcsXG4gICAgICAgIDY6ICctbmPEsScsXG4gICAgICAgIDk6ICctdW5jdScsXG4gICAgICAgIDEwOiAnLXVuY3UnLFxuICAgICAgICAzMDogJy11bmN1JyxcbiAgICAgICAgNjA6ICctxLFuY8SxJyxcbiAgICAgICAgOTA6ICctxLFuY8SxJyxcbiAgICB9O1xuXG4gICAgdmFyIGF6ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYXonLCB7XG4gICAgICAgIG1vbnRoczogJ3lhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAneWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0JhemFyX0JhemFyIGVydMmZc2lfw4fJmXLFn8mZbmLJmSBheMWfYW3EsV/Dh8mZcsWfyZluYsmZX0PDvG3JmSBheMWfYW3EsV9Dw7xtyZlfxZ7JmW5iyZknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0Jhel9CekVfw4dBeF/Dh8mZcl9DQXhfQ8O8bV/FnsmZbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdCel9CRV/Dh0Ffw4fJmV9DQV9Dw7xfxZ7JmScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2J1Z8O8biBzYWF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3NhYmFoIHNhYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW2fJmWzJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuyZluXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1trZcOnyZluIGjJmWZ0yZldIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMmZdnbJmWwnLFxuICAgICAgICAgICAgczogJ2JpciBuZcOnyZkgc2FuaXnJmScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5yZknLFxuICAgICAgICAgICAgbTogJ2JpciBkyZlxaXHJmScsXG4gICAgICAgICAgICBtbTogJyVkIGTJmXFpccmZJyxcbiAgICAgICAgICAgIGg6ICdiaXIgc2FhdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNhYXQnLFxuICAgICAgICAgICAgZDogJ2JpciBnw7xuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ8O8bicsXG4gICAgICAgICAgICBNOiAnYmlyIGF5JyxcbiAgICAgICAgICAgIE1NOiAnJWQgYXknLFxuICAgICAgICAgICAgeTogJ2JpciBpbCcsXG4gICAgICAgICAgICB5eTogJyVkIGlsJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14oZ8O8bmTDvHp8YXjFn2FtKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdnZWPJmSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc8mZaMmZcic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZ8O8bmTDvHonO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2F4xZ9hbSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0oxLFuY8SxfGluY2l8bmNpfMO8bmPDvHxuY8SxfHVuY3UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLcSxbmPEsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgYyA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZWxhcnVzaWFuIFtiZV1cbi8vISBhdXRob3IgOiBEbWl0cnkgRGVtaWRvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW1pZG92OTFcbi8vISBhdXRob3I6IFByYWxlc2thOiBodHRwOi8vcHJhbGVza2EucHJvL1xuLy8hIEF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICAgICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgICAgICAgOiBmb3Jtc1syXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstGW0LvRltC90LBf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyA6ICfRhdCy0ZbQu9GW0L3Rg1/RhdCy0ZbQu9GW0L3Ri1/RhdCy0ZbQu9GW0L0nLFxuICAgICAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LBf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyA6ICfQs9Cw0LTQt9GW0L3Rg1/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nLFxuICAgICAgICAgICAgZGQ6ICfQtNC30LXQvdGMX9C00L3Rll/QtNC30ZHQvScsXG4gICAgICAgICAgICBNTTogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtGLX9C80LXRgdGP0YbQsNGeJyxcbiAgICAgICAgICAgIHl5OiAn0LPQvtC0X9Cz0LDQtNGLX9Cz0LDQtNC+0Z4nLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwJyA6ICfRhdCy0ZbQu9GW0L3Rgyc7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnaCcpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0LDQtNC30ZbQvdCwJyA6ICfQs9Cw0LTQt9GW0L3Rgyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JlJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ9GB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0YHRgtGD0LTQt9C10L3RjF/Qu9GO0YLRi1/RgdCw0LrQsNCy0ZbQul/QutGA0LDRgdCw0LLRltC6X9GC0YDQsNCy0LXQvdGMX9GH0Y3RgNCy0LXQvdGMX9C70ZbQv9C10L3RjF/QttC90ZbQstC10L3RjF/QstC10YDQsNGB0LXQvdGMX9C60LDRgdGC0YDRi9GH0L3RltC6X9C70ZbRgdGC0LDQv9Cw0LRf0YHQvdC10LbQsNC90YwnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfRgdGC0YPQtF/Qu9GO0YJf0YHQsNC6X9C60YDQsNGBX9GC0YDQsNCyX9GH0Y3RgNCyX9C70ZbQv1/QttC90ZbQsl/QstC10YBf0LrQsNGB0YJf0LvRltGB0YJf0YHQvdC10LYnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfQvdGP0LTQt9C10LvRjl/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00YNf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtGDX9GB0YPQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQo9GD0Z5dID8oPzrQvNGW0L3Rg9C70YPRjnzQvdCw0YHRgtGD0L/QvdGD0Y4pPyA/XFxdID9kZGRkLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDQsy4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0LMuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Ch0ZHQvdC90Y8g0Z5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0JfQsNGe0YLRgNCwINGeXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Cj0YfQvtGA0LAg0Z5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdb0KNdIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0KMg0LzRltC90YPQu9GD0Y5dIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQoyDQvNGW0L3Rg9C70YtdIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0L/RgNCw0LcgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzINGC0LDQvNGDJyxcbiAgICAgICAgICAgIHM6ICfQvdC10LrQsNC70YzQutGWINGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQt9C10L3RjCcsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICfQvNC10YHRj9GGJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9GLfNGA0LDQvdGW0YbRi3zQtNC90Y980LLQtdGH0LDRgNCwLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9Cw0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0YsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdGW0YbRiyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQsNGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGWfNGLfNCz0LApLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobnVtYmVyICUgMTAgPT09IDIgfHwgbnVtYmVyICUgMTAgPT09IDMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgIT09IDEyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgIT09IDEzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG51bWJlciArICct0ZYnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bWJlciArICct0YsnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9CwJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYmU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQnVsZ2FyaWFuIFtiZ11cbi8vISBhdXRob3IgOiBLcmFzZW4gQm9yaXNvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcmF6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgYmcgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdiZycsIHtcbiAgICAgICAgbW9udGhzOiAn0Y/QvdGD0LDRgNC4X9GE0LXQstGA0YPQsNGA0Lhf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Llf0Y7QvdC4X9GO0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90YNf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70Y9f0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNGP0LTQsF/Rh9C10YLQstGK0YDRgtGK0Lpf0L/QtdGC0YrQul/RgdGK0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0Y9f0YfQtdGCX9C/0LXRgl/RgdGK0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JTQvdC10YEg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0KPRgtGA0LUg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCDQsl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9Cc0LjQvdCw0LvQsNGC0LBdIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9Cc0LjQvdCw0LvQuNGPXSBkZGRkIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9GB0LvQtdC0ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfQv9GA0LXQtNC4ICVzJyxcbiAgICAgICAgICAgIHM6ICfQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogJyVkINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIG06ICfQvNC40L3Rg9GC0LAnLFxuICAgICAgICAgICAgbW06ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICAgICAgaDogJ9GH0LDRgScsXG4gICAgICAgICAgICBoaDogJyVkINGH0LDRgdCwJyxcbiAgICAgICAgICAgIGQ6ICfQtNC10L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQtNC10L3QsCcsXG4gICAgICAgICAgICB3OiAn0YHQtdC00LzQuNGG0LAnLFxuICAgICAgICAgICAgd3c6ICclZCDRgdC10LTQvNC40YbQuCcsXG4gICAgICAgICAgICBNOiAn0LzQtdGB0LXRhicsXG4gICAgICAgICAgICBNTTogJyVkINC80LXRgdC10YbQsCcsXG4gICAgICAgICAgICB5OiAn0LPQvtC00LjQvdCwJyxcbiAgICAgICAgICAgIHl5OiAnJWQg0LPQvtC00LjQvdC4JyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQtdCyfNC10L180YLQuHzQstC4fNGA0Lh80LzQuCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgbGFzdDJEaWdpdHMgPSBudW1iZXIgJSAxMDA7XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQsic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQvSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID4gMTAgJiYgbGFzdDJEaWdpdHMgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QstC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YDQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNyB8fCBsYXN0RGlnaXQgPT09IDgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QvNC4JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBiZztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYW1iYXJhIFtibV1cbi8vISBhdXRob3IgOiBFc3RlbGxlIENvbW1lbnQgOiBodHRwczovL2dpdGh1Yi5jb20vZXN0ZWxsZWNvbW1lbnRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBibSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JtJywge1xuICAgICAgICBtb250aHM6ICdaYW53dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NyZtrYWxvX1p1d8mbbmthbG9fWnVsdXlla2Fsb19VdGlrYWxvX1PJm3RhbmJ1cnVrYWxvX8mUa3V0yZRidXJ1a2Fsb19Ob3dhbmJ1cnVrYWxvX0Rlc2FuYnVydWthbG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnWmFuX0Zld19NYXJfQXdpX03Jm19adXdfWnVsX1V0aV9TyZt0X8mUa3VfTm93X0Rlcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdLYXJpX050yZtuyZtuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnS2FyX050yZtfVGFyX0FyYV9BbGFfSnVtX1NpYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdLYV9OdF9UYV9Bcl9BbF9KdV9TaScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0JpIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tTaW5pIGzJm3LJm10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkb24gbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0t1bnUgbMmbcsmbXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3TJm23Jm25lbiBsyZtyyZtdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMga8mUbsmUJyxcbiAgICAgICAgICAgIHBhc3Q6ICdhIGLJmyAlcyBiyZQnLFxuICAgICAgICAgICAgczogJ3NhbmdhIGRhbWEgZGFtYScsXG4gICAgICAgICAgICBzczogJ3Nla29uZGkgJWQnLFxuICAgICAgICAgICAgbTogJ21pbml0aSBrZWxlbicsXG4gICAgICAgICAgICBtbTogJ21pbml0aSAlZCcsXG4gICAgICAgICAgICBoOiAnbMmbcsmbIGtlbGVuJyxcbiAgICAgICAgICAgIGhoOiAnbMmbcsmbICVkJyxcbiAgICAgICAgICAgIGQ6ICd0aWxlIGtlbGVuJyxcbiAgICAgICAgICAgIGRkOiAndGlsZSAlZCcsXG4gICAgICAgICAgICBNOiAna2FsbyBrZWxlbicsXG4gICAgICAgICAgICBNTTogJ2thbG8gJWQnLFxuICAgICAgICAgICAgeTogJ3NhbiBrZWxlbicsXG4gICAgICAgICAgICB5eTogJ3NhbiAlZCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZW5nYWxpIChCYW5nbGFkZXNoKSBbYm4tYmRdXG4vLyEgYXV0aG9yIDogQXNyYWYgSG9zc2FpbiBQYXRvYXJ5IDogaHR0cHM6Ly9naXRodWIuY29tL2FzaHdvb2xmb3JkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CnpycsXG4gICAgICAgICAgICAyOiAn4KeoJyxcbiAgICAgICAgICAgIDM6ICfgp6knLFxuICAgICAgICAgICAgNDogJ+CnqicsXG4gICAgICAgICAgICA1OiAn4KerJyxcbiAgICAgICAgICAgIDY6ICfgp6wnLFxuICAgICAgICAgICAgNzogJ+CnrScsXG4gICAgICAgICAgICA4OiAn4KeuJyxcbiAgICAgICAgICAgIDk6ICfgp68nLFxuICAgICAgICAgICAgMDogJ+CnpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgp6cnOiAnMScsXG4gICAgICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAgICAgJ+CnqSc6ICczJyxcbiAgICAgICAgICAgICfgp6onOiAnNCcsXG4gICAgICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAgICAgJ+CnrCc6ICc2JyxcbiAgICAgICAgICAgICfgp60nOiAnNycsXG4gICAgICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAgICAgJ+Cnryc6ICc5JyxcbiAgICAgICAgICAgICfgp6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgYm5CZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuLWJkJywge1xuICAgICAgICBtb250aHM6ICfgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgprjgpq7gp58nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpobgppxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KaX4Kak4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgppfgpqRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kaq4Kaw4KeHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpobgppfgp4cnLFxuICAgICAgICAgICAgczogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3M6ICclZCDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgbTogJ+Cmj+CmlSDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgbW06ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaDogJ+Cmj+CmlSDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgaGg6ICclZCDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgZDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgTTogJ+Cmj+CmlSDgpq7gpr7gprgnLFxuICAgICAgICAgICAgTU06ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeTogJ+Cmj+CmlSDgpqzgppvgprAnLFxuICAgICAgICAgICAgeXk6ICclZCDgpqzgppvgprAnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gprDgpr7gpqR84Kat4KeL4KawfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmuOCmqOCnjeCmp+CnjeCmr+CmvnzgprDgpr7gpqQvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpq3gp4vgprAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Ka44KaV4Ka+4KayJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAzID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpqzgpr/gppXgpr7gprInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgprjgpqjgp43gpqfgp43gpq/gpr4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kat4KeL4KawJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgppXgpr7gprInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmpuCngeCmquCngeCmsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kas4Ka/4KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgprjgpqjgp43gpqfgp43gpq/gpr4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBibkJkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJlbmdhbGkgW2JuXVxuLy8hIGF1dGhvciA6IEthdXNoaWsgR2FuZGhpIDogaHR0cHM6Ly9naXRodWIuY29tL2thdXNoaWtnYW5kaGlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KenJyxcbiAgICAgICAgICAgIDI6ICfgp6gnLFxuICAgICAgICAgICAgMzogJ+CnqScsXG4gICAgICAgICAgICA0OiAn4KeqJyxcbiAgICAgICAgICAgIDU6ICfgp6snLFxuICAgICAgICAgICAgNjogJ+CnrCcsXG4gICAgICAgICAgICA3OiAn4KetJyxcbiAgICAgICAgICAgIDg6ICfgp64nLFxuICAgICAgICAgICAgOTogJ+CnrycsXG4gICAgICAgICAgICAwOiAn4KemJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Cnpyc6ICcxJyxcbiAgICAgICAgICAgICfgp6gnOiAnMicsXG4gICAgICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAgICAgJ+Cnqic6ICc0JyxcbiAgICAgICAgICAgICfgp6snOiAnNScsXG4gICAgICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAgICAgJ+CnrSc6ICc3JyxcbiAgICAgICAgICAgICfgp64nOiAnOCcsXG4gICAgICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAgICAgJ+Cnpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBibiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuJywge1xuICAgICAgICBtb250aHM6ICfgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfgprDgpqzgpr/gpqzgpr7gprBf4Ka44KeL4Kau4Kas4Ka+4KawX+CmruCmmeCnjeCml+CmsuCmrOCmvuCmsF/gpqzgp4Hgpqfgpqzgpr7gprBf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/4Kas4Ka+4KawX+CmtuCngeCmleCnjeCmsOCmrOCmvuCmsF/gprbgpqjgpr/gpqzgpr7gprAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Ka44Kau4KefJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgprjgpq7gp58nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpobgppxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KaX4Kak4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgppfgpqRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kaq4Kaw4KeHJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgpobgppfgp4cnLFxuICAgICAgICAgICAgczogJ+CmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgc3M6ICclZCDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICAgICAgbTogJ+Cmj+CmlSDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgbW06ICclZCDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICAgICAgaDogJ+Cmj+CmlSDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgaGg6ICclZCDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICAgICAgZDogJ+Cmj+CmlSDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgpqbgpr/gpqgnLFxuICAgICAgICAgICAgTTogJ+Cmj+CmlSDgpq7gpr7gprgnLFxuICAgICAgICAgICAgTU06ICclZCDgpq7gpr7gprgnLFxuICAgICAgICAgICAgeTogJ+Cmj+CmlSDgpqzgppvgprAnLFxuICAgICAgICAgICAgeXk6ICclZCDgpqzgppvgprAnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4Kaw4Ka+4KakfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmsOCmvuCmpC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgpqbgp4Hgpqrgp4HgprAnICYmIGhvdXIgPCA1KSB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4Kas4Ka/4KaV4Ka+4KayJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CmrOCmv+CmleCmvuCmsic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRpYmV0YW4gW2JvXVxuLy8hIGF1dGhvciA6IFRodXB0ZW4gTi4gQ2hha3Jpc2hhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS92YWpyYWRvZ1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgvKEnLFxuICAgICAgICAgICAgMjogJ+C8oicsXG4gICAgICAgICAgICAzOiAn4LyjJyxcbiAgICAgICAgICAgIDQ6ICfgvKQnLFxuICAgICAgICAgICAgNTogJ+C8pScsXG4gICAgICAgICAgICA2OiAn4LymJyxcbiAgICAgICAgICAgIDc6ICfgvKcnLFxuICAgICAgICAgICAgODogJ+C8qCcsXG4gICAgICAgICAgICA5OiAn4LypJyxcbiAgICAgICAgICAgIDA6ICfgvKAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4LyhJzogJzEnLFxuICAgICAgICAgICAgJ+C8oic6ICcyJyxcbiAgICAgICAgICAgICfgvKMnOiAnMycsXG4gICAgICAgICAgICAn4LykJzogJzQnLFxuICAgICAgICAgICAgJ+C8pSc6ICc1JyxcbiAgICAgICAgICAgICfgvKYnOiAnNicsXG4gICAgICAgICAgICAn4LynJzogJzcnLFxuICAgICAgICAgICAgJ+C8qCc6ICc4JyxcbiAgICAgICAgICAgICfgvKknOiAnOScsXG4gICAgICAgICAgICAn4LygJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGJvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYm8nLCB7XG4gICAgICAgIG1vbnRoczogJ+C9n+C+s+C8i+C9luC8i+C9keC9hOC8i+C9lOC9vF/gvZ/gvrPgvIvgvZbgvIvgvYLgvYngvbLgvabgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2C4L2m4L204L2Y4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9nuC9suC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvaPgvpTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L6y4L204L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9keC9tOC9k+C8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvaLgvpLgvrHgvZHgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2R4L2C4L204LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvYLgvYXgvbLgvYLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2J4L2y4L2m4LyL4L2UJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgvZ/gvrPgvIsxX+C9n+C+s+C8izJf4L2f4L6z4LyLM1/gvZ/gvrPgvIs0X+C9n+C+s+C8izVf4L2f4L6z4LyLNl/gvZ/gvrPgvIs3X+C9n+C+s+C8izhf4L2f4L6z4LyLOV/gvZ/gvrPgvIsxMF/gvZ/gvrPgvIsxMV/gvZ/gvrPgvIsxMicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiAvXijgvZ/gvrPgvItcXGR7MSwyfSkvLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICfgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C9ieC9suC8i+C9mOC8i1/gvZ/gvrPgvIvgvZbgvItf4L2Y4L2y4L2C4LyL4L2R4L2Y4L2i4LyLX+C9o+C+t+C9guC8i+C9lOC8i1/gvZXgvbTgvaLgvIvgvZbgvbRf4L2U4LyL4L2m4L2E4L2m4LyLX+C9puC+pOC9uuC9k+C8i+C9lOC8iycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgvYngvbJf4L2f4L6zX+C9mOC9suC9gl/gvaPgvrfgvYJf4L2V4L204L2iX+C9puC9hOC9pl/gvabgvqTgvbrgvZMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4L2R4L2y4LyL4L2i4L2y4L2EXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+C9puC9hOC8i+C9ieC9suC9k10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2i4L6X4L264L2m4LyL4L2YXSwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgvYHgvIvgvabgvYRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgvaPgvIsnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOC9puC+lOC9k+C8i+C9oycsXG4gICAgICAgICAgICBzOiAn4L2j4L2Y4LyL4L2m4L2EJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4L2m4L6Q4L2i4LyL4L2G4LyNJyxcbiAgICAgICAgICAgIG06ICfgvabgvpDgvaLgvIvgvZjgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgbW06ICclZCDgvabgvpDgvaLgvIvgvZgnLFxuICAgICAgICAgICAgaDogJ+C9huC9tOC8i+C9muC9vOC9keC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICBoaDogJyVkIOC9huC9tOC8i+C9muC9vOC9kScsXG4gICAgICAgICAgICBkOiAn4L2J4L2y4L2T4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4L2J4L2y4L2T4LyLJyxcbiAgICAgICAgICAgIE06ICfgvZ/gvrPgvIvgvZbgvIvgvYLgvYXgvbLgvYInLFxuICAgICAgICAgICAgTU06ICclZCDgvZ/gvrPgvIvgvZYnLFxuICAgICAgICAgICAgeTogJ+C9o+C9vOC8i+C9guC9heC9suC9gicsXG4gICAgICAgICAgICB5eTogJyVkIOC9o+C9vCcsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgvKHgvKLgvKPgvKTgvKXgvKbgvKfgvKjgvKngvKBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gvZjgvZrgvZPgvIvgvZjgvbx84L2e4L284L2C4L2m4LyL4L2A4L2mfOC9ieC9suC9k+C8i+C9guC9tOC9hHzgvZHgvYLgvbzgvYTgvIvgvZHgvYJ84L2Y4L2a4L2T4LyL4L2Y4L28LyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C9mOC9muC9k+C8i+C9mOC9vCcgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C9ieC9suC9k+C8i+C9guC9tOC9hCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2Y4L2a4L2T4LyL4L2Y4L28JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZ7gvbzgvYLgvabgvIvgvYDgvaYnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C9ieC9suC9k+C8i+C9guC9tOC9hCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4L2R4L2C4L284L2E4LyL4L2R4L2CJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYm87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQnJldG9uIFticl1cbi8vISBhdXRob3IgOiBKZWFuLUJhcHRpc3RlIExlIER1aWdvdSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYmxlZHVpZ291XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24obnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG1tOiAnbXVudXRlbm4nLFxuICAgICAgICAgICAgTU06ICdtaXonLFxuICAgICAgICAgICAgZGQ6ICdkZXZlemgnLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgbXV0YXRpb24oZm9ybWF0W2tleV0sIG51bWJlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNwZWNpYWxNdXRhdGlvbkZvclllYXJzKG51bWJlcikge1xuICAgICAgICBzd2l0Y2ggKGxhc3ROdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGJsb2F6JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgdmxvYXonO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxhc3ROdW1iZXIobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPiA5KSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdE51bWJlcihudW1iZXIgJSAxMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbXV0YXRpb24odGV4dCwgbnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBzb2Z0TXV0YXRpb24odGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNvZnRNdXRhdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciBtdXRhdGlvblRhYmxlID0ge1xuICAgICAgICAgICAgbTogJ3YnLFxuICAgICAgICAgICAgYjogJ3YnLFxuICAgICAgICAgICAgZDogJ3onLFxuICAgICAgICB9O1xuICAgICAgICBpZiAobXV0YXRpb25UYWJsZVt0ZXh0LmNoYXJBdCgwKV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldICsgdGV4dC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuXG4gICAgdmFyIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15nZW4vaSxcbiAgICAgICAgICAgIC9eY1vKvFxcJ11od2UvaSxcbiAgICAgICAgICAgIC9ebWV1L2ksXG4gICAgICAgICAgICAvXmVici9pLFxuICAgICAgICAgICAgL15tYWUvaSxcbiAgICAgICAgICAgIC9eKG1lenxldmUpL2ksXG4gICAgICAgICAgICAvXmdvdS9pLFxuICAgICAgICAgICAgL15lb3MvaSxcbiAgICAgICAgICAgIC9eZ3dlL2ksXG4gICAgICAgICAgICAvXmhlci9pLFxuICAgICAgICAgICAgL15kdS9pLFxuICAgICAgICAgICAgL15rZXIvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbW9udGhzUmVnZXggPVxuICAgICAgICAgICAgL14oZ2VudmVyfGNbyrxcXCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvXihnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksXG4gICAgICAgIGZ1bGxXZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAgICAgL15zdWwvaSxcbiAgICAgICAgICAgIC9ebHVuL2ksXG4gICAgICAgICAgICAvXm1ldXJ6aC9pLFxuICAgICAgICAgICAgL15tZXJjW8q8XFwnXWhlci9pLFxuICAgICAgICAgICAgL155YW91L2ksXG4gICAgICAgICAgICAvXmd3ZW5lci9pLFxuICAgICAgICAgICAgL15zYWRvcm4vaSxcbiAgICAgICAgXSxcbiAgICAgICAgc2hvcnRXZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAgICAgL15TdWwvaSxcbiAgICAgICAgICAgIC9eTHVuL2ksXG4gICAgICAgICAgICAvXk1ldS9pLFxuICAgICAgICAgICAgL15NZXIvaSxcbiAgICAgICAgICAgIC9eWWFvL2ksXG4gICAgICAgICAgICAvXkd3ZS9pLFxuICAgICAgICAgICAgL15TYWQvaSxcbiAgICAgICAgXSxcbiAgICAgICAgbWluV2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eU3UvaSxcbiAgICAgICAgICAgIC9eTHUvaSxcbiAgICAgICAgICAgIC9eTWUoW15yXXwkKS9pLFxuICAgICAgICAgICAgL15NZXIvaSxcbiAgICAgICAgICAgIC9eWWEvaSxcbiAgICAgICAgICAgIC9eR3cvaSxcbiAgICAgICAgICAgIC9eU2EvaSxcbiAgICAgICAgXTtcblxuICAgIHZhciBiciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JyJywge1xuICAgICAgICBtb250aHM6ICdHZW52ZXJfQ8q8aHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnR2VuX0PKvGh3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlcicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdWxfTHVuX01ldXJ6aF9NZXJjyrxoZXJfWWFvdV9Hd2VuZXJfU2Fkb3JuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X0x1X01lX01lcl9ZYV9Hd19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZTogbWluV2Vla2RheXNQYXJzZSxcbiAgICAgICAgZnVsbFdlZWtkYXlzUGFyc2U6IGZ1bGxXZWVrZGF5c1BhcnNlLFxuICAgICAgICBzaG9ydFdlZWtkYXlzUGFyc2U6IHNob3J0V2Vla2RheXNQYXJzZSxcbiAgICAgICAgbWluV2Vla2RheXNQYXJzZTogbWluV2Vla2RheXNQYXJzZSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDogbW9udGhzU3RyaWN0UmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IG1vbnRoc1Nob3J0U3RyaWN0UmVnZXgsXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIFthIHZpel0gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIaXppdiBkYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tXYXJjyrxob2F6aCBkYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZWPKvGggZGFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbcGFzZXQgZGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnYS1iZW5uICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDKvHpvJyxcbiAgICAgICAgICAgIHM6ICd1biBuZWJldWQgc2Vnb25kZW5ub8O5JyxcbiAgICAgICAgICAgIHNzOiAnJWQgZWlsZW5uJyxcbiAgICAgICAgICAgIG06ICd1ciB2dW51dGVubicsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICAgICAgaDogJ3VuIGV1cicsXG4gICAgICAgICAgICBoaDogJyVkIGV1cicsXG4gICAgICAgICAgICBkOiAndW4gZGV2ZXpoJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICBNOiAndXIgbWl6JyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgICAgICB5OiAndXIgYmxvYXonLFxuICAgICAgICAgICAgeXk6IHNwZWNpYWxNdXRhdGlvbkZvclllYXJzLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oYcOxfHZldCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gbnVtYmVyID09PSAxID8gJ2HDsScgOiAndmV0JztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2EubS58Zy5tLi8sIC8vIGdvdWRlIG1lcmVubiB8IGEtcmFvayBtZXJlbm5cbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKHRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICdnLm0uJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgMTIgPyAnYS5tLicgOiAnZy5tLic7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gYnI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQm9zbmlhbiBbYnNdXG4vLyEgYXV0aG9yIDogTmVkaW0gQ2hvbGljaCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mcm9udHlhcmRcbi8vISBhdXRob3IgOiBSYXNpZCBSZWR6aWMgOiBodHRwczovL2dpdGh1Yi5jb20vcmFzaWRyZVxuLy8hIGJhc2VkIG9uIChocikgdHJhbnNsYXRpb24gYnkgQm9qYW4gTWFya292acSHXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgPyAnamVkbmEgbWludXRhJ1xuICAgICAgICAgICAgICAgICAgICA6IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgPyAnamVkbnUgbWludXR1J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRhbiBzYXQnO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXRhJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnYnMnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxpXSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICdwYXIgc2VrdW5kaScsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogJ2RhbicsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogJ21qZXNlYycsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhdGFsYW4gW2NhXVxuLy8hIGF1dGhvciA6IEp1YW4gRy4gSHVydGFkbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWFuZ2h1cnRhZG9cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBjYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NhJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ2dlbmVyX2ZlYnJlcl9tYXLDp19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXLDp19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmVcIi5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXHMpK01NTU0vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdnZW4uX2ZlYnIuX21hcsOnX2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0Ll9ub3YuX2Rlcy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkZ19kbF9kdF9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRCBNTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXZ1aSBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbZGVtw6AgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1thaGlyIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzc2F0IGEgJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgICAgICBwYXN0OiAnZmEgJXMnLFxuICAgICAgICAgICAgczogJ3VucyBzZWdvbnMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWdvbnMnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRzJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkaWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkaWVzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNvcycsXG4gICAgICAgICAgICB5OiAndW4gYW55JyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW55cycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ8OoJztcbiAgICAgICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDemVjaCBbY3NdXG4vLyEgYXV0aG9yIDogcGV0cmJlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vcGV0cmJlbGFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdsZWRlbl/Dum5vcl9ixZllemVuX2R1YmVuX2t2xJt0ZW5fxI1lcnZlbl/EjWVydmVuZWNfc3JwZW5fesOhxZnDrV/FmcOtamVuX2xpc3RvcGFkX3Byb3NpbmVjJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogJ2xlZG5hX8O6bm9yYV9ixZllem5hX2R1Ym5hX2t2xJt0bmFfxI1lcnZuYV/EjWVydmVuY2Vfc3JwbmFfesOhxZnDrV/FmcOtam5hX2xpc3RvcGFkdV9wcm9zaW5jZScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9ERD9bby5dPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2xlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9ebGVkL2ksXG4gICAgICAgICAgICAvXsO6bm8vaSxcbiAgICAgICAgICAgIC9eYsWZZS9pLFxuICAgICAgICAgICAgL15kdWIvaSxcbiAgICAgICAgICAgIC9ea3bEmy9pLFxuICAgICAgICAgICAgL14oxI12bnzEjWVydmVuJHzEjWVydm5hKS9pLFxuICAgICAgICAgICAgL14oxI12Y3zEjWVydmVuZWN8xI1lcnZlbmNlKS9pLFxuICAgICAgICAgICAgL15zcnAvaSxcbiAgICAgICAgICAgIC9eesOhxZkvaSxcbiAgICAgICAgICAgIC9exZnDrWovaSxcbiAgICAgICAgICAgIC9ebGlzL2ksXG4gICAgICAgICAgICAvXnByby9pLFxuICAgICAgICBdLFxuICAgICAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGxlZGVufMO6bm9yfGLFmWV6ZW58ZHViZW58a3bEm3RlbnzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnx6w6HFmcOtfMWZw61qZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2k7XG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiA+IDEgJiYgbiA8IDUgJiYgfn4obiAvIDEwKSAhPT0gMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla3VuZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Nla3VuZGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogaXNGdXR1cmUgPyAnbWludXR1JyA6ICdtaW51dG91JztcbiAgICAgICAgICAgIGNhc2UgJ21tJzogLy8gOSBtaW51dGVzIC8gaW4gOSBtaW51dGVzIC8gOSBtaW51dGVzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ2gnOiAvLyBhbiBob3VyIC8gaW4gYW4gaG91ciAvIGFuIGhvdXIgYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6IC8vIDkgaG91cnMgLyBpbiA5IGhvdXJzIC8gOSBob3VycyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kaW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlbicgOiAnZG5lbSc7XG4gICAgICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2RueScgOiAnZG7DrScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZG55JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ23Em3PDrWMnIDogJ23Em3PDrWNlbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ23Em3PDrWNlJyA6ICdtxJtzw61jxa8nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23Em3PDrWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rZW0nO1xuICAgICAgICAgICAgY2FzZSAneXknOiAvLyA5IHllYXJzIC8gaW4gOSB5ZWFycyAvIDkgeWVhcnMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdsZXQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2xldHknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NzJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14obGVkZW58bGVkbmF8w7pub3JhfMO6bm9yfGLFmWV6ZW58YsWZZXpuYXxkdWJlbnxkdWJuYXxrdsSbdGVufGt2xJt0bmF8xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58c3JwbmF8esOhxZnDrXzFmcOtamVufMWZw61qbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14obGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2ksXG4gICAgICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkxJtsZV9wb25kxJtsw61fw7p0ZXLDvV9zdMWZZWRhX8SNdHZydGVrX3DDoXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIGw6ICdELiBNLiBZWVlZJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZG5lcyB2XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW3rDrXRyYSB2XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdmUgc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIMSNdHZydGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBww6F0ZWsgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHNvYm90dSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbdsSNZXJhIHZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3UgbmVkxJtsaSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDqV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IHN0xZllZHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwxZllZCAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gY3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2h1dmFzaCBbY3ZdXG4vLyEgYXV0aG9yIDogQW5hdG9seSBNaXJvbm92IDogaHR0cHM6Ly9naXRodWIuY29tL21pcm9udG9saVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnY3YnLCB7XG4gICAgICAgIG1vbnRoczogJ9C605HRgNC70LDRh1/QvdCw0YDTkdGBX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgNGC0LzQtV/Rg9GC05Ff0qvRg9GA0LvQsF/QsNCy05HQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiNGC0LDQsicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfQutOR0YBf0L3QsNGAX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgF/Rg9GC05Ff0qvRg9GAX9Cw0LLQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn0LLRi9GA0YHQsNGA0L3QuNC60YPQvV/RgtGD0L3RgtC40LrRg9C9X9GL0YLQu9Cw0YDQuNC60YPQvV/RjtC90LrRg9C9X9C605fSq9C90LXRgNC90LjQutGD0L1f0Y3RgNC90LXQutGD0L1f0YjTkdC80LDRgtC60YPQvScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0LLRi9GAX9GC0YPQvV/Ri9GC0Ltf0Y7QvV/QutOX0qtf0Y3RgNC9X9GI05HQvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQstGAX9GC0L1f0YvRgl/RjtC9X9C60qtf0Y3RgF/RiNC8Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ1lZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgW9Kr0YPQu9GF0LhdIE1NTU0gW9GD0LnTkdGF05fQvV0gRFst0LzTl9GI05ddLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0J/QsNGP0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQq9GA0LDQvV0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9OW0L3QtdGAXSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW9Kq0LjRgtC10YFdIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vQmNGA0YLQvdOXXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6IGZ1bmN0aW9uIChvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgYWZmaXggPSAv0YHQtdGF0LXRgiQvaS5leGVjKG91dHB1dClcbiAgICAgICAgICAgICAgICAgICAgPyAn0YDQtdC9J1xuICAgICAgICAgICAgICAgICAgICA6IC/Sq9GD0LskL2kuZXhlYyhvdXRwdXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAn0YLQsNC9J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ9GA0LDQvSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQutCw0Y/Qu9C70LAnLFxuICAgICAgICAgICAgczogJ9C/05fRgC3QuNC6INKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgICAgIHNzOiAnJWQg0qvQtdC60LrRg9C90YInLFxuICAgICAgICAgICAgbTogJ9C/05fRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoOiAn0L/Tl9GAINGB0LXRhdC10YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdC10YXQtdGCJyxcbiAgICAgICAgICAgIGQ6ICfQv9OX0YAg0LrRg9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrRg9C9JyxcbiAgICAgICAgICAgIE06ICfQv9OX0YAg0YPQudOR0YUnLFxuICAgICAgICAgICAgTU06ICclZCDRg9C505HRhScsXG4gICAgICAgICAgICB5OiAn0L/Tl9GAINKr0YPQuycsXG4gICAgICAgICAgICB5eTogJyVkINKr0YPQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS3QvNOX0YgvLFxuICAgICAgICBvcmRpbmFsOiAnJWQt0LzTl9GIJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFdlbHNoIFtjeV1cbi8vISBhdXRob3IgOiBSb2JlcnQgQWxsZW4gOiBodHRwczovL2dpdGh1Yi5jb20vcm9iZ2FsbGVuXG4vLyEgYXV0aG9yIDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5ncmVhdmVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgY3kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdjeScsIHtcbiAgICAgICAgbW9udGhzOiAnSW9uYXdyX0Nod2Vmcm9yX01hd3J0aF9FYnJpbGxfTWFpX01laGVmaW5fR29yZmZlbm5hZl9Bd3N0X01lZGlfSHlkcmVmX1RhY2h3ZWRkX1JoYWdmeXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dvcl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWcnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0R5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3cm4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bF9MbHVuX01hd19NZXJfSWF1X0d3ZV9TYWQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTGxfTWFfTWVfSWFfR3dfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgLy8gdGltZSBmb3JtYXRzIGFyZSB0aGUgc2FtZSBhcyBlbi1nYlxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0hlZGRpdyBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tEZG9lIGFtXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ21ld24gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHluIMO0bCcsXG4gICAgICAgICAgICBzOiAneWNoeWRpZyBlaWxpYWRhdScsXG4gICAgICAgICAgICBzczogJyVkIGVpbGlhZCcsXG4gICAgICAgICAgICBtOiAnbXVudWQnLFxuICAgICAgICAgICAgbW06ICclZCBtdW51ZCcsXG4gICAgICAgICAgICBoOiAnYXdyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgYXdyJyxcbiAgICAgICAgICAgIGQ6ICdkaXdybm9kJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGl3cm5vZCcsXG4gICAgICAgICAgICBNOiAnbWlzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWlzJyxcbiAgICAgICAgICAgIHk6ICdibHd5ZGR5bicsXG4gICAgICAgICAgICB5eTogJyVkIGZseW5lZGQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZmVkfGFpbnxhZnxpbHx5ZGR8ZWR8ZWcpLyxcbiAgICAgICAgLy8gdHJhZGl0aW9uYWwgb3JkaW5hbCBudW1iZXJzIGFib3ZlIDMxIGFyZSBub3QgY29tbW9ubHkgdXNlZCBpbiBjb2xsb3F1aWFsIFdlbHNoXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGxvb2t1cCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgICdhZicsXG4gICAgICAgICAgICAgICAgICAgICdpbCcsXG4gICAgICAgICAgICAgICAgICAgICd5ZGQnLFxuICAgICAgICAgICAgICAgICAgICAneWRkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJywgLy8gMWFmIHRvIDEwZmVkXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgICAgICdmZWQnLCAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChiID4gMjApIHtcbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICdmZWQnOyAvLyBub3QgMzBhaW4sIDcwYWluIG9yIDkwYWluXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChiID4gMCkge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBjeTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBEYW5pc2ggW2RhXVxuLy8hIGF1dGhvciA6IFVscmlrIE5pZWxzZW4gOiBodHRwczovL2dpdGh1Yi5jb20vbXJiYXNlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkYScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydHNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDuG5fbWFuX3Rpcl9vbnNfdG9yX2ZyZV9sw7hyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDuF9tYV90aV9vbl90b19mcl9sw7gnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpIG1vcmdlbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAncMOlIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tpXSBkZGRkW3Mga2wuXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgICAgICBzOiAnZsOlIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2V0IG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXR0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZScsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmVkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmVkZXInLFxuICAgICAgICAgICAgeTogJ2V0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGE7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChBdXN0cmlhKSBbZGUtYXRdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1hcnRpbiBHcm9sbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL01hZE1HXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVBdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWF0Jywge1xuICAgICAgICBtb250aHM6ICdKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0rDpG4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQXQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIChTd2l0emVybGFuZCkgW2RlLWNoXVxuLy8hIGF1dGhvciA6IHNzY2h1ZWxsZXIgOiBodHRwczovL2dpdGh1Yi5jb20vc3NjaHVlbGxlclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGVDaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWNoJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlQ2g7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIFtkZV1cbi8vISBhdXRob3IgOiBsbHVjaHMgOiBodHRwczovL2dpdGh1Yi5jb20vbGx1Y2hzXG4vLyEgYXV0aG9yOiBNZW5lbGlvbiBFbGVuc8O6bGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsZGl2aWFuIFtkdl1cbi8vISBhdXRob3IgOiBKYXdpc2ggSGFtZWVkIDogaHR0cHM6Ly9naXRodWIuY29tL2phd2lzaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfelt6s3oLeqt6H3qbeg96pJyxcbiAgICAgICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICAgICAn3onep96D3qjel96qJyxcbiAgICAgICAgICAgICfeh96t3pXesN6D3qnejd6qJyxcbiAgICAgICAgICAgICfeid6tJyxcbiAgICAgICAgICAgICfelt6r3oLesCcsXG4gICAgICAgICAgICAn3pbeqt6N3qbeh96oJyxcbiAgICAgICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgICAgICfekN6s3pXesN6T3qzeid6w3oTept6D3qonLFxuICAgICAgICAgICAgJ96H3q7eht6w3pPer96E3qbeg96qJyxcbiAgICAgICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICAgICAn3pHeqN6Q3qzeid6w3oTept6D3qonLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICfeh96n3oveqN6H3rDejN6mJyxcbiAgICAgICAgICAgICfegN6v3onepicsXG4gICAgICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICAgICAn3oTeqt6L3qYnLFxuICAgICAgICAgICAgJ96E3qreg96n3pDesN6K3qbejN6oJyxcbiAgICAgICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAgICAgJ96A3q7egt6o3oDeqN6D3qonLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGR2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ96H3qfei96oX96A3q/eid6mX96H3qbegt6wX96E3qrei96mX96E3qreg96nX96A3qreht6qX96A3q7egt6oJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/eid6GfN6J3oovLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn3oneiicgPT09IGlucHV0O1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3onehic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn3oneiic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW96J3qjeh96m3oveql0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW96H3qjeh96w3pTerF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ96M3qzeg96t3o7ept6H3qggJXMnLFxuICAgICAgICAgICAgcGFzdDogJ96G3qreg96o3oLesCAlcycsXG4gICAgICAgICAgICBzOiAn3pDeqN6G3qregt6w3ozeqt6G3q7ehd6s3ofesCcsXG4gICAgICAgICAgICBzczogJ2QlIN6Q3qjeht6q3oLesN6M3qonLFxuICAgICAgICAgICAgbTogJ96J3qjegt6o3pPerN6H3rAnLFxuICAgICAgICAgICAgbW06ICfeid6o3oLeqN6T3qogJWQnLFxuICAgICAgICAgICAgaDogJ96O3qbekd6o3ofeqN6D3qzeh96wJyxcbiAgICAgICAgICAgIGhoOiAn3o7ept6R3qjeh96o3oPeqiAlZCcsXG4gICAgICAgICAgICBkOiAn3oveqt6I3qbegN6s3ofesCcsXG4gICAgICAgICAgICBkZDogJ96L3qreiN6m3pDesCAlZCcsXG4gICAgICAgICAgICBNOiAn3onept6A3qzeh96wJyxcbiAgICAgICAgICAgIE1NOiAn3onept6Q3rAgJWQnLFxuICAgICAgICAgICAgeTogJ96H3qbegN6m3oPerN6H3rAnLFxuICAgICAgICAgICAgeXk6ICfeh96m3oDept6D3qogJWQnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNywgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGR2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdyZWVrIFtlbF1cbi8vISBhdXRob3IgOiBBZ2dlbG9zIEthcmFsaWFzIDogaHR0cHM6Ly9naXRodWIuY29tL21laGllbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbCcsIHtcbiAgICAgICAgbW9udGhzTm9taW5hdGl2ZUVsOlxuICAgICAgICAgICAgJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzR2VuaXRpdmVFbDpcbiAgICAgICAgICAgICfOmc6xzr3Ov8+FzrHPgc6vzr/PhV/Ops61zrLPgc6/z4XOsc+Bzq/Ov8+FX86czrHPgc+Ezq/Ov8+FX86Rz4DPgc65zrvOr86/z4VfzpzOsc6Qzr/PhV/Omc6/z4XOvc6vzr/PhV/Omc6/z4XOu86vzr/PhV/Okc+FzrPOv8+Nz4PPhM6/z4VfzqPOtc+Az4TOtc68zrLPgc6vzr/PhV/On866z4TPic6yz4HOr86/z4Vfzp3Ov861zrzOss+Bzq/Ov8+FX86UzrXOus61zrzOss+Bzq/Ov8+FJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoczogZnVuY3Rpb24gKG1vbWVudFRvRm9ybWF0LCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgIC9ELy50ZXN0KGZvcm1hdC5zdWJzdHJpbmcoMCwgZm9ybWF0LmluZGV4T2YoJ01NTU0nKSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNHZW5pdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ86ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xz4pfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgF/On866z4Rfzp3Ov861X86UzrXOuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfOms+Fz4FfzpTOtc+FX86kz4HOuV/OpM61z4RfzqDOtc68X86gzrHPgV/Oo86xzrInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnzprPhV/OlM61X86kz4FfzqTOtV/OoM61X86gzrFfzqPOsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfOvM68JyA6ICfOnM6cJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnz4DOvCcgOiAnzqDOnCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpWzBdID09PSAnzrwnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvW86gzpxdXFwuP86cP1xcLj8vaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJFbDoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vOo86uzrzOtc+BzrEge31dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vOp864zrXPgiB7fV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrddIGRkZGQgW3t9XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiBmdW5jdGlvbiAoa2V5LCBtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhckVsW2tleV0sXG4gICAgICAgICAgICAgICAgaG91cnMgPSBtb20gJiYgbW9tLmhvdXJzKCk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihvdXRwdXQpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmFwcGx5KG1vbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnJlcGxhY2UoJ3t9JywgaG91cnMgJSAxMiA9PT0gMSA/ICfPg8+EzrcnIDogJ8+Dz4TOuc+CJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnz4POtSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgz4DPgc65zr0nLFxuICAgICAgICAgICAgczogJ867zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBzczogJyVkIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgICAgICBtOiAnzq3Ovc6xIM67zrXPgM+Ez4wnLFxuICAgICAgICAgICAgbW06ICclZCDOu861z4DPhM6sJyxcbiAgICAgICAgICAgIGg6ICfOvM6vzrEgz47Pgc6xJyxcbiAgICAgICAgICAgIGhoOiAnJWQgz47Pgc61z4InLFxuICAgICAgICAgICAgZDogJ868zq/OsSDOvM6tz4HOsScsXG4gICAgICAgICAgICBkZDogJyVkIM68zq3Pgc61z4InLFxuICAgICAgICAgICAgTTogJ86tzr3Osc+CIM68zq7Ovc6xz4InLFxuICAgICAgICAgICAgTU06ICclZCDOvM6uzr3Otc+CJyxcbiAgICAgICAgICAgIHk6ICfOrc69zrHPgiDPh8+Bz4zOvc6/z4InLFxuICAgICAgICAgICAgeXk6ICclZCDPh8+Bz4zOvc65zrEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Oty8sXG4gICAgICAgIG9yZGluYWw6ICclZM63JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKEF1c3RyYWxpYSkgW2VuLWF1XVxuLy8hIGF1dGhvciA6IEphcmVkIE1vcnNlIDogaHR0cHM6Ly9naXRodWIuY29tL2phcmNvYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkF1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tYXUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuQXU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoQ2FuYWRhKSBbZW4tY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5DYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWNhJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5DYTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChVbml0ZWQgS2luZ2RvbSkgW2VuLWdiXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuR2IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkdiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElyZWxhbmQpIFtlbi1pZV1cbi8vISBhdXRob3IgOiBDaHJpcyBDYXJ0bGlkZ2UgOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNjYXJ0bGlkZ2VcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbkllID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkllO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElzcmFlbCkgW2VuLWlsXVxuLy8hIGF1dGhvciA6IENocmlzIEdlZHJpbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2dlZHJpbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVuSWwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5JbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChJbmRpYSkgW2VuLWluXVxuLy8hIGF1dGhvciA6IEphdGluIEFncmF3YWwgOiBodHRwczovL2dpdGh1Yi5jb20vamF0aW5hZzIyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZW5JbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWluJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbkluO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKE5ldyBaZWFsYW5kKSBbZW4tbnpdXG4vLyEgYXV0aG9yIDogTHVrZSBNY0dyZWdvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlbWNncmVnb3JcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlbk56ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tbnonLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVuTno7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoU2luZ2Fwb3JlKSBbZW4tc2ddXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDYXN0cmlsbG9uLU1hZHJpZ2FsIDogaHR0cHM6Ly9naXRodWIuY29tL3RlY2hkaW1lbnNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBlblNnID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tc2cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5TZztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFc3BlcmFudG8gW2VvXVxuLy8hIGF1dGhvciA6IENvbGluIERlYW4gOiBodHRwczovL2dpdGh1Yi5jb20vY29saW5kZWFuXG4vLyEgYXV0aG9yIDogTWlhIE5vcmRlbnRvZnQgSW1wZXJhdG9yaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWVzdGFzbWlhXG4vLyEgY29tbWVudCA6IG1pZXN0YXNtaWEgY29ycmVjdGVkIHRoZSB0cmFuc2xhdGlvbiBieSBjb2xpbmRlYW5cbi8vISBjb21tZW50IDogVml2YWt2byBjb3JyZWN0ZWQgdGhlIHRyYW5zbGF0aW9uIGJ5IGNvbGluZGVhbiBhbmQgbWllc3Rhc21pYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGVvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZW8nLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYcWtZ3VzdG9fc2VwdGVtYnJvX29rdG9icm9fbm92ZW1icm9fZGVjZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcHRfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW7EiW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fxLVhxa1kb192ZW5kcmVkb19zYWJhdG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW1fbHVuX21hcmRfbWVya1/EtWHFrV92ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX8S1YV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ1tsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGRbbl0sIFtsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL1thcF1cXC50XFwubS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSA9PT0gJ3AnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3AudC5tLicgOiAnUC5ULk0uJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYS50Lm0uJyA6ICdBLlQuTS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tIb2RpYcWtIGplXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW01vcmdhxa0gamVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZFtuIGplXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXJhxa0gamVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3Bhc2ludGFuXSBkZGRkW24gamVdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncG9zdCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnYW50YcWtICVzJyxcbiAgICAgICAgICAgIHM6ICdrZWxrYWogc2VrdW5kb2onLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRvaicsXG4gICAgICAgICAgICBtOiAndW51IG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b2onLFxuICAgICAgICAgICAgaDogJ3VudSBob3JvJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yb2onLFxuICAgICAgICAgICAgZDogJ3VudSB0YWdvJywgLy9uZSAnZGl1cm5vJywgxIlhciBlc3RhcyB1eml0YSBwb3IgcHJva3NpbXVtb1xuICAgICAgICAgICAgZGQ6ICclZCB0YWdvaicsXG4gICAgICAgICAgICBNOiAndW51IG1vbmF0bycsXG4gICAgICAgICAgICBNTTogJyVkIG1vbmF0b2onLFxuICAgICAgICAgICAgeTogJ3VudSBqYXJvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFyb2onLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1hLyxcbiAgICAgICAgb3JkaW5hbDogJyVkYScsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBlbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChEb21pbmljYW4gUmVwdWJsaWMpIFtlcy1kb11cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzRG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1kbycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNEbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChNZXhpY28pIFtlcy1teF1cbi8vISBhdXRob3IgOiBKQyBGcmFuY28gOiBodHRwczovL2dpdGh1Yi5jb20vamNmcmFuY29cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzTXggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy1teCcsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbaG95IGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbWHDsWFuYSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbYXllciBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2VuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgICAgIHM6ICd1bm9zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VuYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhw7FvJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYcOxb3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgICAgICBpbnZhbGlkRGF0ZTogJ0ZlY2hhIGludsOhbGlkYScsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNNeDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIChVbml0ZWQgU3RhdGVzKSBbZXMtdXNdXG4vLyEgYXV0aG9yIDogYnVzdHRhIDogaHR0cHM6Ly9naXRodWIuY29tL2J1c3R0YVxuLy8hIGF1dGhvciA6IGNocmlzcm9keiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3JvZHpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzVXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdlcy11cycsIHtcbiAgICAgICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9taV9qdV92aV9zw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1tob3kgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxYW5hIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBbYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1theWVyIGEgbGEnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICdbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2hhY2UgJXMnLFxuICAgICAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgICAgICBkZDogJyVkIGTDrWFzJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2VtYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICAgICAgeXk6ICclZCBhw7FvcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZXNVcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTcGFuaXNoIFtlc11cbi8vISBhdXRob3IgOiBKdWxpbyBOYXB1csOtIDogaHR0cHM6Ly9naXRodWIuY29tL2p1bGlvbmNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHNTaG9ydERvdCA9XG4gICAgICAgICAgICAnZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15lbmUvaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15hYnIvaSxcbiAgICAgICAgICAgIC9ebWF5L2ksXG4gICAgICAgICAgICAvXmp1bi9pLFxuICAgICAgICAgICAgL15qdWwvaSxcbiAgICAgICAgICAgIC9eYWdvL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15vY3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRpYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVxcLj98ZmViXFwuP3xtYXJcXC4/fGFiclxcLj98bWF5XFwuP3xqdW5cXC4/fGp1bFxcLj98YWdvXFwuP3xzZXBcXC4/fG9jdFxcLj98bm92XFwuP3xkaWNcXC4/KS9pO1xuXG4gICAgdmFyIGVzID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXMnLCB7XG4gICAgICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0W20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tlbF0gZGRkZCBbcGFzYWRvIGEgbGEnICtcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdzJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaGFjZSAlcycsXG4gICAgICAgICAgICBzOiAndW5vcyBzZWd1bmRvcycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBkw61hJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICAgICAgdzogJ3VuYSBzZW1hbmEnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW4gYcOxbycsXG4gICAgICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICAgICAgaW52YWxpZERhdGU6ICdGZWNoYSBpbnbDoWxpZGEnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ23DtW5lIHNla3VuZGknLCAnbcO1bmkgc2VrdW5kJywgJ3BhYXIgc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJ3Nla3VuZGknLCBudW1iZXIgKyAnc2VrdW5kaXQnXSxcbiAgICAgICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICAgICAgbW06IFtudW1iZXIgKyAnIG1pbnV0aScsIG51bWJlciArICcgbWludXRpdCddLFxuICAgICAgICAgICAgaDogWyfDvGhlIHR1bm5pJywgJ3R1bmQgYWVnYScsICfDvGtzIHR1bmQnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgICAgIGQ6IFsnw7xoZSBww6RldmEnLCAnw7xrcyBww6RldiddLFxuICAgICAgICAgICAgTTogWydrdXUgYWphJywgJ2t1dSBhZWdhJywgJ8O8a3Mga3V1J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgICAgICB5OiBbJ8O8aGUgYWFzdGEnLCAnYWFzdGEnLCAnw7xrcyBhYXN0YSddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIGFhc3RhJywgbnVtYmVyICsgJyBhYXN0YXQnXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRba2V5XVsyXSA/IGZvcm1hdFtrZXldWzJdIDogZm9ybWF0W2tleV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFhbnVhcl92ZWVicnVhcl9tw6RydHNfYXByaWxsX21haV9qdXVuaV9qdXVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFhbl92ZWVicl9tw6RydHNfYXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUF9FX1RfS19OX1JfTCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbVMOkbmEsXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0hvbW1lLF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbSsOkcmdtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRWlsZSxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0VlbG1pbmVdIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6RyYXN0JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB0YWdhc2knLFxuICAgICAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiAnJWQgcMOkZXZhJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYXNxdWUgW2V1XVxuLy8hIGF1dGhvciA6IEVuZWtvIElsbGFycmFtZW5kaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9laWxsYXJyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGV1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZXUnLCB7XG4gICAgICAgIG1vbnRoczogJ3VydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd1cnQuX290cy5fbWFyLl9hcGkuX21haS5fZWthLl91enQuX2FidS5faXJhLl91cnIuX2F6YS5fYWJlLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnaWdfYWxfYXJfYXpfb2dfb2xfbHInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVktTS1EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWVtrb10gTU1NIERbYV0nLFxuICAgICAgICAgICAgbGxsOiAnWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgWVlZWVtrb10gTU1NIERbYV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tnYXVyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2JpaGFyXSBMVFtldGFuXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgTFRbZXRhbl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1thdHpvXSBMVFtldGFuXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thdXJyZWtvXSBkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFycnUnLFxuICAgICAgICAgICAgcGFzdDogJ2R1ZWxhICVzJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmRvIGJhdHp1aycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ21pbnV0dSBiYXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHUnLFxuICAgICAgICAgICAgaDogJ29yZHUgYmF0JyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JkdScsXG4gICAgICAgICAgICBkOiAnZWd1biBiYXQnLFxuICAgICAgICAgICAgZGQ6ICclZCBlZ3VuJyxcbiAgICAgICAgICAgIE06ICdoaWxhYmV0ZSBiYXQnLFxuICAgICAgICAgICAgTU06ICclZCBoaWxhYmV0ZScsXG4gICAgICAgICAgICB5OiAndXJ0ZSBiYXQnLFxuICAgICAgICAgICAgeXk6ICclZCB1cnRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBldTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQZXJzaWFuIFtmYV1cbi8vISBhdXRob3IgOiBFYnJhaGltIEJ5YWdvd2kgOiBodHRwczovL2dpdGh1Yi5jb20vZWJyYW1pbmlvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ9uxJyxcbiAgICAgICAgICAgIDI6ICfbsicsXG4gICAgICAgICAgICAzOiAn27MnLFxuICAgICAgICAgICAgNDogJ9u0JyxcbiAgICAgICAgICAgIDU6ICfbtScsXG4gICAgICAgICAgICA2OiAn27YnLFxuICAgICAgICAgICAgNzogJ9u3JyxcbiAgICAgICAgICAgIDg6ICfbuCcsXG4gICAgICAgICAgICA5OiAn27knLFxuICAgICAgICAgICAgMDogJ9uwJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ9uxJzogJzEnLFxuICAgICAgICAgICAgJ9uyJzogJzInLFxuICAgICAgICAgICAgJ9uzJzogJzMnLFxuICAgICAgICAgICAgJ9u0JzogJzQnLFxuICAgICAgICAgICAgJ9u1JzogJzUnLFxuICAgICAgICAgICAgJ9u2JzogJzYnLFxuICAgICAgICAgICAgJ9u3JzogJzcnLFxuICAgICAgICAgICAgJ9u4JzogJzgnLFxuICAgICAgICAgICAgJ9u5JzogJzknLFxuICAgICAgICAgICAgJ9uwJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIGZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmEnLCB7XG4gICAgICAgIG1vbnRoczogJ9qY2KfZhtmI24zZh1/ZgdmI2LHbjNmHX9mF2KfYsdizX9ii2YjYsduM2YRf2YXZh1/amNmI2KbZhl/amNmI2KbbjNmHX9in2YjYql/Ys9m+2KrYp9mF2KjYsV/Yp9qp2KrYqNixX9mG2YjYp9mF2KjYsV/Yr9iz2KfZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9qY2KfZhtmI24zZh1/ZgdmI2LHbjNmHX9mF2KfYsdizX9ii2YjYsduM2YRf2YXZh1/amNmI2KbZhl/amNmI2KbbjNmHX9in2YjYql/Ys9m+2KrYp9mF2KjYsV/Yp9qp2KrYqNixX9mG2YjYp9mF2KjYsV/Yr9iz2KfZhdio2LEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn24zaqVxcdTIwMGPYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZh1xcdTIwMGPYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrFxcdTIwMGPYtNmG2KjZh1/YrNmF2LnZh1/YtNmG2KjZhycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OlxuICAgICAgICAgICAgJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfbjF/Yr1/Ys1/ahl/Zvl/YrF/YtCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/Zgtio2YQg2KfYsiDYuNmH2LF82KjYudivINin2LIg2LjZh9ixLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9io2LnYryDYp9iyINi42YfYsS8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZgtio2YQg2KfYsiDYuNmH2LEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9io2LnYryDYp9iyINi42YfYsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2YXYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2YHYsdiv2Kcg2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LPYp9i52KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2K/bjNix2YjYsiDYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvZvtuM2LRdIFvYs9in2LnYql0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfYr9ixICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDZvtuM2LQnLFxuICAgICAgICAgICAgczogJ9qG2YbYryDYq9in2YbbjNmHJyxcbiAgICAgICAgICAgIHNzOiAnJWQg2KvYp9mG24zZhycsXG4gICAgICAgICAgICBtOiAn24zaqSDYr9mC24zZgtmHJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K/ZgtuM2YLZhycsXG4gICAgICAgICAgICBoOiAn24zaqSDYs9in2LnYqicsXG4gICAgICAgICAgICBoaDogJyVkINiz2KfYudiqJyxcbiAgICAgICAgICAgIGQ6ICfbjNqpINix2YjYsicsXG4gICAgICAgICAgICBkZDogJyVkINix2YjYsicsXG4gICAgICAgICAgICBNOiAn24zaqSDZhdin2YcnLFxuICAgICAgICAgICAgTU06ICclZCDZhdin2YcnLFxuICAgICAgICAgICAgeTogJ9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9uwLdu5XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfdmFLyxcbiAgICAgICAgb3JkaW5hbDogJyVk2YUnLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzUGFzdCA9XG4gICAgICAgICAgICAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnICdcbiAgICAgICAgICAgICksXG4gICAgICAgIG51bWJlcnNGdXR1cmUgPSBbXG4gICAgICAgICAgICAnbm9sbGEnLFxuICAgICAgICAgICAgJ3loZGVuJyxcbiAgICAgICAgICAgICdrYWhkZW4nLFxuICAgICAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICAgICAnbmVsasOkbicsXG4gICAgICAgICAgICAndmlpZGVuJyxcbiAgICAgICAgICAgICdrdXVkZW4nLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbN10sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs4XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTBcbiAgICAgICAgICAgID8gaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyc1Bhc3RbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmknLCB7XG4gICAgICAgIG1vbnRoczogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaXR0ZW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbGlwaW5vIFtmaWxdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cbi8vISBhdXRob3IgOiBNYXR0aGV3IENvIDogaHR0cHM6Ly9naXRodWIuY29tL21hdHRoZXdkZWVjb1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGZpbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpbCcsIHtcbiAgICAgICAgbW9udGhzOiAnRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0VuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0xpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0xpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdMaV9MdV9NYV9NaV9IdV9CaV9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdNTS9EL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdMVCBbbmdheW9uZyBhcmF3XScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0J1a2FzIG5nXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ0xUIFtzYSBzdXN1bm9kIG5hXSBkZGRkJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdMVCBba2FoYXBvbl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnc2EgbG9vYiBuZyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgYW5nIG5ha2FsaXBhcycsXG4gICAgICAgICAgICBzOiAnaWxhbmcgc2VndW5kbycsXG4gICAgICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICAgICAgbTogJ2lzYW5nIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0bycsXG4gICAgICAgICAgICBoOiAnaXNhbmcgb3JhcycsXG4gICAgICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICAgICAgZDogJ2lzYW5nIGFyYXcnLFxuICAgICAgICAgICAgZGQ6ICclZCBhcmF3JyxcbiAgICAgICAgICAgIE06ICdpc2FuZyBidXdhbicsXG4gICAgICAgICAgICBNTTogJyVkIGJ1d2FuJyxcbiAgICAgICAgICAgIHk6ICdpc2FuZyB0YW9uJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGFvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmFyb2VzZSBbZm9dXG4vLyEgYXV0aG9yIDogUmFnbmFyIEpvaGFubmVzZW4gOiBodHRwczovL2dpdGh1Yi5jb20vcmFnbmFyMTIzXG4vLyEgYXV0aG9yIDogS3Jpc3RpYW4gU2FrYXJpc3NvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zYWthcmlzc29uXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmbycsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdW5fbcOhbl90w71zX21pa19ow7NzX2Zyw61fbGV5Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X23DoV90w71fbWlfaMOzX2ZyX2xlJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDjSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8ONIG1vcmdpbiBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8ONIGdqw6FyIGtsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbc8Otw7BzdHVdIGRkZGQgW2tsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3VtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzw63DsGFuaScsXG4gICAgICAgICAgICBzOiAnZsOhIHNla3VuZCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGlyJyxcbiAgICAgICAgICAgIG06ICdlaW4gbWludXR0dXInLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHRpcicsXG4gICAgICAgICAgICBoOiAnZWluIHTDrW1pJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdMOtbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlaW4gZGFndXInLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZWluIG3DoW5hw7B1cicsXG4gICAgICAgICAgICBNTTogJyVkIG3DoW5hw7BpcicsXG4gICAgICAgICAgICB5OiAnZWl0dCDDoXInLFxuICAgICAgICAgICAgeXk6ICclZCDDoXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoQ2FuYWRhKSBbZnItY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZnJDYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNhJywge1xuICAgICAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkaV9sdV9tYV9tZV9qZV92ZV9zYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tEZW1haW4gw6BdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtkZXJuaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgICAgICBzOiAncXVlbHF1ZXMgc2Vjb25kZXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgICAgICBkOiAndW4gam91cicsXG4gICAgICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIGZlbWluaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogc2VtYWluZVxuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdyZScgOiAnZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyQ2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRnJlbmNoIChTd2l0emVybGFuZCkgW2ZyLWNoXVxuLy8hIGF1dGhvciA6IEdhc3BhcmQgQnVjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2dhc3BhcmRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBmckNoID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2gnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFucyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVzJyxcbiAgICAgICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgICAgICBoOiAndW5lIGhldXJlJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam91cnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnxlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JkcyB3aXRoIG1hc2N1bGluZSBncmFtbWF0aWNhbCBnZW5kZXI6IG1vaXMsIHRyaW1lc3RyZSwgam91clxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmckNoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCBbZnJdXG4vLyEgYXV0aG9yIDogSm9obiBGaXNjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2pmcm9mZmljZVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1N0cmljdFJlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/KS9pLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvKGphbnZcXC4/fGbDqXZyXFwuP3xtYXJzfGF2clxcLj98bWFpfGp1aW58anVpbFxcLj98YW/Du3R8c2VwdFxcLj98b2N0XFwuP3xub3ZcXC4/fGTDqWNcXC4/fGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXmphbnYvaSxcbiAgICAgICAgICAgIC9eZsOpdnIvaSxcbiAgICAgICAgICAgIC9ebWFycy9pLFxuICAgICAgICAgICAgL15hdnIvaSxcbiAgICAgICAgICAgIC9ebWFpL2ksXG4gICAgICAgICAgICAvXmp1aW4vaSxcbiAgICAgICAgICAgIC9eanVpbC9pLFxuICAgICAgICAgICAgL15hb8O7dC9pLFxuICAgICAgICAgICAgL15zZXB0L2ksXG4gICAgICAgICAgICAvXm9jdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZMOpYy9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGZyID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZnInLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiBtb250aHNTaG9ydFN0cmljdFJlZ2V4LFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0F1am91cmTigJlodWkgw6BdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0hpZXIgw6BdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdpbCB5IGEgJXMnLFxuICAgICAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICAgICAgbTogJ3VuZSBtaW51dGUnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICAgICAgaGg6ICclZCBoZXVyZXMnLFxuICAgICAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgICAgICB3OiAndW5lIHNlbWFpbmUnLFxuICAgICAgICAgICAgd3c6ICclZCBzZW1haW5lcycsXG4gICAgICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogUmV0dXJuICdlJyB3aGVuIGRheSBvZiBtb250aCA+IDEuIE1vdmUgdGhpcyBjYXNlIGluc2lkZVxuICAgICAgICAgICAgICAgIC8vIGJsb2NrIGZvciBtYXNjdWxpbmUgd29yZHMgYmVsb3cuXG4gICAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8zMzc1XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICcnKTtcblxuICAgICAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKG51bWJlciA9PT0gMSA/ICdlcicgOiAnZScpO1xuXG4gICAgICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyaXNpYW4gW2Z5XVxuLy8hIGF1dGhvciA6IFJvYmluIHZhbiBkZXIgVmxpZXQgOiBodHRwczovL2dpdGh1Yi5jb20vcm9iaW4wdmFuMGRlcjB2XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9XG4gICAgICAgICAgICAnamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9XG4gICAgICAgICAgICAnamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMnLnNwbGl0KCdfJyk7XG5cbiAgICB2YXIgZnkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmeScsIHtcbiAgICAgICAgbW9udGhzOiAnamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnc25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU2lfTW9fVGlfV29fVG9fRnJfU28nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hqb2VkIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vYXJuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1c3RlciBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbw7RmcsO7bmVdIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29lciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgbHluJyxcbiAgICAgICAgICAgIHM6ICdpbiBwZWFyIHNla29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kZW4nLFxuICAgICAgICAgICAgbTogJ2llbiBtaW7DunQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICdpZW4gb2VyZScsXG4gICAgICAgICAgICBoaDogJyVkIG9lcmVuJyxcbiAgICAgICAgICAgIGQ6ICdpZW4gZGVpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgTTogJ2llbiBtb2FubmUnLFxuICAgICAgICAgICAgTU06ICclZCBtb2FubmVuJyxcbiAgICAgICAgICAgIHk6ICdpZW4gamllcicsXG4gICAgICAgICAgICB5eTogJyVkIGppZXJyZW4nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXJpc2ggb3IgSXJpc2ggR2FlbGljIFtnYV1cbi8vISBhdXRob3IgOiBBbmRyw6kgU2lsdmEgOiBodHRwczovL2dpdGh1Yi5jb20vYXNrcHRcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAnRWFuw6FpcicsXG4gICAgICAgICAgICAnRmVhYmhyYScsXG4gICAgICAgICAgICAnTcOhcnRhJyxcbiAgICAgICAgICAgICdBaWJyZcOhbicsXG4gICAgICAgICAgICAnQmVhbHRhaW5lJyxcbiAgICAgICAgICAgICdNZWl0aGVhbWgnLFxuICAgICAgICAgICAgJ0nDumlsJyxcbiAgICAgICAgICAgICdMw7puYXNhJyxcbiAgICAgICAgICAgICdNZcOhbiBGw7NtaGFpcicsXG4gICAgICAgICAgICAnRGVpcmVhZGggRsOzbWhhaXInLFxuICAgICAgICAgICAgJ1NhbWhhaW4nLFxuICAgICAgICAgICAgJ05vbGxhaWcnLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNTaG9ydCA9IFtcbiAgICAgICAgICAgICdFYW4nLFxuICAgICAgICAgICAgJ0ZlYWJoJyxcbiAgICAgICAgICAgICdNw6FydCcsXG4gICAgICAgICAgICAnQWliJyxcbiAgICAgICAgICAgICdCZWFsJyxcbiAgICAgICAgICAgICdNZWl0aCcsXG4gICAgICAgICAgICAnScO6aWwnLFxuICAgICAgICAgICAgJ0zDum4nLFxuICAgICAgICAgICAgJ00uRi4nLFxuICAgICAgICAgICAgJ0QuRi4nLFxuICAgICAgICAgICAgJ1NhbWgnLFxuICAgICAgICAgICAgJ05vbGwnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgICAgICdEw6kgRG9taG5haWdoJyxcbiAgICAgICAgICAgICdEw6kgTHVhaW4nLFxuICAgICAgICAgICAgJ0TDqSBNw6FpcnQnLFxuICAgICAgICAgICAgJ0TDqSBDw6lhZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqWFyZGFvaW4nLFxuICAgICAgICAgICAgJ0TDqSBoQW9pbmUnLFxuICAgICAgICAgICAgJ0TDqSBTYXRoYWlybicsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQgPSBbJ0RvbWgnLCAnTHVhbicsICdNw6FpcnQnLCAnQ8OpYWQnLCAnRMOpYXInLCAnQW9pbmUnLCAnU2F0aCddLFxuICAgICAgICB3ZWVrZGF5c01pbiA9IFsnRG8nLCAnTHUnLCAnTcOhJywgJ0PDqScsICdEw6knLCAnQScsICdTYSddO1xuXG4gICAgdmFyIGdhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ2EnLCB7XG4gICAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICAgICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lubml1IGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0Ftw6FyYWNoIGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lubsOpIGFnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2kgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOzIHNoaW4nLFxuICAgICAgICAgICAgczogJ2PDunBsYSBzb2ljaW5kJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc29pY2luZCcsXG4gICAgICAgICAgICBtOiAnbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbsOzaW3DqWFkJyxcbiAgICAgICAgICAgIGg6ICd1YWlyIGFuIGNobG9pZycsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXIgYW4gY2hsb2lnJyxcbiAgICAgICAgICAgIGQ6ICdsw6EnLFxuICAgICAgICAgICAgZGQ6ICclZCBsw6EnLFxuICAgICAgICAgICAgTTogJ23DrScsXG4gICAgICAgICAgICBNTTogJyVkIG3DrW9ubmEnLFxuICAgICAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgICAgICB5eTogJyVkIGJsaWFpbicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNjb3R0aXNoIEdhZWxpYyBbZ2RdXG4vLyEgYXV0aG9yIDogSm9uIEFzaGRvd24gOiBodHRwczovL2dpdGh1Yi5jb20vam9uYXNoZG93blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRocyA9IFtcbiAgICAgICAgICAgICdBbSBGYW9pbGxlYWNoJyxcbiAgICAgICAgICAgICdBbiBHZWFycmFuJyxcbiAgICAgICAgICAgICdBbSBNw6BydCcsXG4gICAgICAgICAgICAnQW4gR2libGVhbicsXG4gICAgICAgICAgICAnQW4gQ8OoaXRlYW4nLFxuICAgICAgICAgICAgJ0FuIHQtw5JnbWhpb3MnLFxuICAgICAgICAgICAgJ0FuIHQtSXVjaGFyJyxcbiAgICAgICAgICAgICdBbiBMw7luYXN0YWwnLFxuICAgICAgICAgICAgJ0FuIHQtU3VsdGFpbicsXG4gICAgICAgICAgICAnQW4gRMOgbWhhaXInLFxuICAgICAgICAgICAgJ0FuIHQtU2FtaGFpbicsXG4gICAgICAgICAgICAnQW4gRMO5YmhsYWNoZCcsXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gW1xuICAgICAgICAgICAgJ0Zhb2knLFxuICAgICAgICAgICAgJ0dlYXInLFxuICAgICAgICAgICAgJ03DoHJ0JyxcbiAgICAgICAgICAgICdHaWJsJyxcbiAgICAgICAgICAgICdDw6hpdCcsXG4gICAgICAgICAgICAnw5JnbWgnLFxuICAgICAgICAgICAgJ0l1Y2gnLFxuICAgICAgICAgICAgJ0zDuW4nLFxuICAgICAgICAgICAgJ1N1bHQnLFxuICAgICAgICAgICAgJ0TDoG1oJyxcbiAgICAgICAgICAgICdTYW1oJyxcbiAgICAgICAgICAgICdEw7liaCcsXG4gICAgICAgIF0sXG4gICAgICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAgICAgJ0RpZMOybWhuYWljaCcsXG4gICAgICAgICAgICAnRGlsdWFpbicsXG4gICAgICAgICAgICAnRGltw6BpcnQnLFxuICAgICAgICAgICAgJ0RpY2lhZGFpbicsXG4gICAgICAgICAgICAnRGlhcmRhb2luJyxcbiAgICAgICAgICAgICdEaWhhb2luZScsXG4gICAgICAgICAgICAnRGlzYXRoYWlybmUnLFxuICAgICAgICBdLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXSxcbiAgICAgICAgd2Vla2RheXNNaW4gPSBbJ0TDsicsICdMdScsICdNw6AnLCAnQ2knLCAnQXInLCAnSGEnLCAnU2EnXTtcblxuICAgIHZhciBnZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgICAgIHdlZWtkYXlzTWluOiB3ZWVrZGF5c01pbixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBbi1kaXVnaCBhaWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQS1tw6BpcmVhY2ggYWlnXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FpZ10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tBbi1kw6ggYWlnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnYW5uIGFuICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiaG8gY2hpb25uICVzJyxcbiAgICAgICAgICAgIHM6ICdiZWFnYW4gZGlvZ2FuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGlvZ2FuJyxcbiAgICAgICAgICAgIG06ICdtaW9uYWlkJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWlvbmFpZGVhbicsXG4gICAgICAgICAgICBoOiAndWFpcicsXG4gICAgICAgICAgICBoaDogJyVkIHVhaXJlYW4nLFxuICAgICAgICAgICAgZDogJ2xhdGhhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgbGF0aGEnLFxuICAgICAgICAgICAgTTogJ23DrG9zJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOsb3NhbicsXG4gICAgICAgICAgICB5OiAnYmxpYWRobmEnLFxuICAgICAgICAgICAgeXk6ICclZCBibGlhZGhuYScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSBudW1iZXIgPT09IDEgPyAnZCcgOiBudW1iZXIgJSAxMCA9PT0gMiA/ICduYScgOiAnbWgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdhbGljaWFuIFtnbF1cbi8vISBhdXRob3IgOiBKdWFuIEcuIEh1cnRhZG8gOiBodHRwczovL2dpdGh1Yi5jb20vanVhbmdodXJ0YWRvXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgZ2wgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdnbCcsIHtcbiAgICAgICAgbW9udGhzOiAneGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX23DqXIuX3hvdi5fdmVuLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdkb19sdV9tYV9tw6lfeG9fdmVfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW2hveGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1ttYcOxw6EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICfDoScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFsnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoXMnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdbb250ZSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICfDoScgOiAnYScpICsgJ10gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgJ1tvXSBkZGRkIFtwYXNhZG8gJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0ci5pbmRleE9mKCd1bicpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnbicgKyBzdHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnZW4gJyArIHN0cjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiAnaGFpICVzJyxcbiAgICAgICAgICAgIHM6ICd1bnMgc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW5oYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VuIGTDrWEnLFxuICAgICAgICAgICAgZGQ6ICclZCBkw61hcycsXG4gICAgICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICAgICAgeTogJ3VuIGFubycsXG4gICAgICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvbmthbmkgRGV2YW5hZ2FyaSBzY3JpcHQgW2dvbS1kZXZhXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgczogWyfgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgJ+CkpeCli+CkoeClhyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgICAgIHNzOiBbbnVtYmVyICsgJyDgpLjgpYXgpJXgpILgpKHgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkuOClheCkleCkguCkoSddLFxuICAgICAgICAgICAgbTogWyfgpI/gpJXgpL4g4KSu4KS/4KSj4KSf4KS+4KSoJywgJ+Ckj+CklSDgpK7gpL/gpKjgpYLgpJ8nXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkruCkv+Cko+Ckn+CkvuCkgiddLFxuICAgICAgICAgICAgaDogWyfgpI/gpJXgpL4g4KS14KSw4KS+4KSoJywgJ+Ckj+CklSDgpLXgpLAnXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDgpLXgpLDgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCkvuCkgiddLFxuICAgICAgICAgICAgZDogWyfgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoJywgJ+Ckj+CklSDgpKbgpYDgpLgnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyDgpKbgpL/gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkpuClgOCkuCddLFxuICAgICAgICAgICAgTTogWyfgpI/gpJXgpL4g4KSu4KWN4KS54KSv4KSo4KWN4KSv4KS+4KSoJywgJ+Ckj+CklSDgpK7gpY3gpLngpK/gpKjgpYsnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAnLCBudW1iZXIgKyAnIOCkruCljeCkueCkr+CkqOClhyddLFxuICAgICAgICAgICAgeTogWyfgpI/gpJXgpL4g4KS14KSw4KWN4KS44KS+4KSoJywgJ+Ckj+CklSDgpLXgpLDgpY3gpLgnXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkteCksOCljeCkuOCkvuCkgiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBnb21EZXZhID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZ29tLWRldmEnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWA4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KSvX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWA4KSa4KWN4KSv4KS+X+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpK7gpL7gpLDgpY3gpJrgpL7gpJrgpY3gpK/gpL5f4KSP4KSq4KWN4KSw4KWA4KSy4KS+4KSa4KWN4KSv4KS+X+CkruClh+Ckr+CkvuCkmuCljeCkr+Ckvl/gpJzgpYLgpKjgpL7gpJrgpY3gpK/gpL5f4KSc4KWB4KSy4KSv4KS+4KSa4KWN4KSv4KS+X+CkkeCkl+CkuOCljeCkn+CkvuCkmuCljeCkr+Ckvl/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSR4KSV4KWN4KSf4KWL4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkqOCli+CkteCljeCkueClh+CkguCkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKHgpL/gpLjgpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWALl/gpK7gpYdf4KSc4KWC4KSoX+CknOClgeCksi5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4KSG4KSv4KSk4KS+4KSwX+CkuOCli+CkruCkvuCksF/gpK7gpILgpJfgpLPgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+CkrOCkv+CksOClh+CkuOCljeCkpOCkvuCksF/gpLjgpYHgpJXgpY3gpLDgpL7gpLBf4KS24KWH4KSo4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSG4KSv4KSkLl/gpLjgpYvgpK4uX+CkruCkguCkl+Cksy5f4KSs4KWB4KSnLl/gpKzgpY3gpLDgpYfgpLjgpY3gpKQuX+CkuOClgeCkleCljeCksC5f4KS24KWH4KSoLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgpIZf4KS44KWLX+CkruCkgl/gpKzgpYFf4KSs4KWN4KSw4KWHX+CkuOClgV/gpLbgpYcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CkhuCkr+CknF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgpKvgpL7gpLLgpY3gpK/gpL7gpIJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+Ckq+ClgeCkoeCksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCkvuCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSr4KS+4KSf4KSy4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCkhuCkpuClgOCkgicsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgpLXgpYfgpLApLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICfgpLXgpYfgpLAnIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4KS14KWH4KSwJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWtcbiAgICAgICAgICAgIGRveTogMywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyICg3ICsgMCAtIDQpXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gpLDgpL7gpKTgpYB84KS44KSV4KS+4KSz4KWA4KSCfOCkpuCkqOCkquCkvuCksOCkvuCkgnzgpLjgpL7gpILgpJzgpYcvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpYAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYDgpIInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID4gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkuOCkvuCkguCknOClhycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgOCkgic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSm4KSo4KSq4KS+4KSw4KS+4KSCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpILgpJzgpYcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tRGV2YTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb25rYW5pIExhdGluIHNjcmlwdCBbZ29tLWxhdG5dXG4vLyEgYXV0aG9yIDogVGhlIERpc2NvdmVyZXIgOiBodHRwczovL2dpdGh1Yi5jb20vV2lraURpc2NvdmVyZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ3Rob2RkZWEgc2Vrb25kYW1uaScsICd0aG9kZGUgc2Vrb25kJ10sXG4gICAgICAgICAgICBzczogW251bWJlciArICcgc2Vrb25kYW1uaScsIG51bWJlciArICcgc2Vrb25kJ10sXG4gICAgICAgICAgICBtOiBbJ2VrYSBtaW50YW4nLCAnZWsgbWludXQnXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtaW50YW1uaScsIG51bWJlciArICcgbWludGFtJ10sXG4gICAgICAgICAgICBoOiBbJ2VrYSB2b3JhbicsICdlayB2b3InXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyB2b3JhbW5pJywgbnVtYmVyICsgJyB2b3JhbSddLFxuICAgICAgICAgICAgZDogWydla2EgZGlzYW4nLCAnZWsgZGlzJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgZGlzYW1uaScsIG51bWJlciArICcgZGlzJ10sXG4gICAgICAgICAgICBNOiBbJ2VrYSBtaG9pbmVhbicsICdlayBtaG9pbm8nXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBtaG9pbmVhbW5pJywgbnVtYmVyICsgJyBtaG9pbmUnXSxcbiAgICAgICAgICAgIHk6IFsnZWthIHZvcnNhbicsICdlayB2b3JvcyddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIHZvcnNhbW5pJywgbnVtYmVyICsgJyB2b3JzYW0nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZ29tTGF0biA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dvbS1sYXRuJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ0phbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnInLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgZm9ybWF0OiAnSmFuZXJhY2hlYV9GZWJyZXJhY2hlYV9NYXJzYWNoZWFfQWJyaWxhY2hlYV9NYWlhY2hlYV9KdW5hY2hlYV9KdWxhaWFjaGVhX0Fnb3N0YWNoZWFfU2V0ZW1icmFjaGVhX090dWJyYWNoZWFfTm92ZW1icmFjaGVhX0RlemVtYnJhY2hlYScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9NTU1NKFxccykrRFtvRF0/LyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogXCJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFyXCIuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FpdC5fU29tLl9Nb24uX0J1ZC5fQnJlLl9TdWsuX1Nvbi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnQWlfU21fTW9fQnVfQnJfU3VfU24nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIFt2YXp0YV0nLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tBaXpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRmFsZWFtXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tGdWRkbG9dIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLYWxdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ZhdHRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhZGltJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGUgb3JkaW5hbCAnZXInIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnZXInO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1xuICAgICAgICAgICAgZG95OiAzLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIgKDcgKyAwIC0gNClcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdyYXRpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc29rYWxsaW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZG9ucGFyYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPiAxMiA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2FuamUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29rYWxsaW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RvbnBhcmFtJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzYW5qZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmF0aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ29tTGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHdWphcmF0aSBbZ3VdXG4vLyEgYXV0aG9yIDogS2F1c2hpayBUaGFua2kgOiBodHRwczovL2dpdGh1Yi5jb20vS2F1c2hpazE5ODdcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KunJyxcbiAgICAgICAgICAgIDI6ICfgq6gnLFxuICAgICAgICAgICAgMzogJ+CrqScsXG4gICAgICAgICAgICA0OiAn4KuqJyxcbiAgICAgICAgICAgIDU6ICfgq6snLFxuICAgICAgICAgICAgNjogJ+CrrCcsXG4gICAgICAgICAgICA3OiAn4KutJyxcbiAgICAgICAgICAgIDg6ICfgq64nLFxuICAgICAgICAgICAgOTogJ+CrrycsXG4gICAgICAgICAgICAwOiAn4KumJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Crpyc6ICcxJyxcbiAgICAgICAgICAgICfgq6gnOiAnMicsXG4gICAgICAgICAgICAn4KupJzogJzMnLFxuICAgICAgICAgICAgJ+Crqic6ICc0JyxcbiAgICAgICAgICAgICfgq6snOiAnNScsXG4gICAgICAgICAgICAn4KusJzogJzYnLFxuICAgICAgICAgICAgJ+CrrSc6ICc3JyxcbiAgICAgICAgICAgICfgq64nOiAnOCcsXG4gICAgICAgICAgICAn4KuvJzogJzknLFxuICAgICAgICAgICAgJ+Crpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBndSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2d1Jywge1xuICAgICAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4Kqc4Kq+4Kqo4KuN4Kqv4KuBLl/gqqvgq4fgqqzgq43gqrDgq4EuX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr8uX+CqruCrh1/gqpzgq4Lgqqhf4Kqc4KuB4Kqy4Kq+Ll/gqpHgqpcuX+CquOCqquCrjeCqn+Crhy5f4KqR4KqV4KuN4Kqf4KuNLl/gqqjgqrXgq4cuX+CqoeCqv+CquOCrhy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgqrDgqrXgqr/gqrXgqr7gqrBf4Kq44KuL4Kqu4Kq14Kq+4KqwX+CqruCqguCql+Cqs+CqteCqvuCqsF/gqqzgq4Hgqqfgq43gqrXgqr7gqrBf4KqX4KuB4Kqw4KuB4Kq14Kq+4KqwX+CqtuCrgeCqleCrjeCqsOCqteCqvuCqsF/gqrbgqqjgqr/gqrXgqr7gqrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KqwX+CquOCri1/gqq7gqoJf4Kqs4KuBX+Cql+CrgV/gqrbgq4Ff4Kq2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgqqrgqr7gqpvgqrLgqr5dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4Kqu4Kq+JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgqqrgqrngq4fgqrLgqr4nLFxuICAgICAgICAgICAgczogJ+CqheCqruCrgeCqlSDgqqrgqrPgq4snLFxuICAgICAgICAgICAgc3M6ICclZCDgqrjgq4fgqpXgqoLgqqEnLFxuICAgICAgICAgICAgbTogJ+Cqj+CqlSDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgbW06ICclZCDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICAgICAgaDogJ+Cqj+CqlSDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgaGg6ICclZCDgqpXgqrLgqr7gqpUnLFxuICAgICAgICAgICAgZDogJ+Cqj+CqlSDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgZGQ6ICclZCDgqqbgqr/gqrXgqrgnLFxuICAgICAgICAgICAgTTogJ+Cqj+CqlSDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgTU06ICclZCDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICAgICAgeTogJ+Cqj+CqlSDgqrXgqrDgq43gqrcnLFxuICAgICAgICAgICAgeXk6ICclZCDgqrXgqrDgq43gqrcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBHdWphcmF0aS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CqsOCqvuCqpHzgqqzgqqrgq4vgqrB84Kq44Kq14Kq+4KqwfOCquOCqvuCqguCqnC8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CqsOCqvuCqpCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqqzgqqrgq4vgqrAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqvuCqguCqnCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrDgqr7gqqQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kqs4Kqq4KuL4KqwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqrjgqr7gqoLgqpwnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBndTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIZWJyZXcgW2hlXVxuLy8hIGF1dGhvciA6IFRvbWVyIENvaGVuIDogaHR0cHM6Ly9naXRodWIuY29tL3RvbWVyXG4vLyEgYXV0aG9yIDogTW9zaGUgU2ltYW50b3YgOiBodHRwczovL2dpdGh1Yi5jb20vRGV2ZWxvcG1lbnRJTFxuLy8hIGF1dGhvciA6IFRhbCBBdGVyIDogaHR0cHM6Ly9naXRodWIuY29tL1RhbEF0ZXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgICAgICBtb250aHM6ICfXmdeg15XXkNeoX9ek15HXqNeV15DXqF/Xnteo16Vf15DXpNeo15nXnF/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS15XXodeYX9eh16TXmNee15HXqF/XkNeV16fXmNeV15HXqF/XoNeV15HXnteR16hf15PXptee15HXqCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn15nXoNeV17Nf16TXkdeo17Nf157XqNelX9eQ16TXqNezX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXs1/Xodek15jXs1/XkNeV16fXs1/XoNeV15HXs1/Xk9em157Xsycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfXqNeQ16nXldefX9ep16DXmV/Xqdec15nXqdeZX9eo15HXmdei15lf15fXnteZ16nXmV/XqdeZ16nXmV/XqdeR16onLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9eQX9eRX9eSX9eTX9eUX9eVX9epJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgW9eRXU1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIFvXkV1NTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9eU15nXldedINeR1r5dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vXnteX16gg15HWvl1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9eR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9eQ16rXnteV15wg15HWvl1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vXkdeZ15XXnV0gZGRkZCBb15TXkNeX16jXldefINeR16nXoteUXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9eR16LXldeTICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICfXnNek16DXmSAlcycsXG4gICAgICAgICAgICBzOiAn157Xodek16gg16nXoNeZ15XXqicsXG4gICAgICAgICAgICBzczogJyVkINep16DXmdeV16onLFxuICAgICAgICAgICAgbTogJ9eT16fXlCcsXG4gICAgICAgICAgICBtbTogJyVkINeT16fXldeqJyxcbiAgICAgICAgICAgIGg6ICfXqdei15QnLFxuICAgICAgICAgICAgaGg6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn16nXoteq15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg16nXoteV16onO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQ6ICfXmdeV150nLFxuICAgICAgICAgICAgZGQ6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAn15nXldee15nXmdedJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg15nXnteZ150nO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIE06ICfXl9eV15PXqScsXG4gICAgICAgICAgICBNTTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXl9eV15PXqdeZ15nXnSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeX15XXk9ep15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeTogJ9ep16DXlCcsXG4gICAgICAgICAgICB5eTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICfXqdeg16rXmdeZ150nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyICUgMTAgPT09IDAgJiYgbnVtYmVyICE9PSAxMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15QnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15nXnSc7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOlxuICAgICAgICAgICAgL9eQ15fXlFwi16Z815zXpNeg15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNec16TXoNeZINeU16bXlNeo15nXmdedfNec16TXoNeV16og15HXlden16h815HXkdeV16fXqHzXkdei16jXkS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijXkNeX15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNeR16LXqNeRKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXnNek16DXldeqINeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdeR15XXp9eoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15zXpNeg15RcItemJyA6ICfXnNek16DXmSDXlNem15TXqNeZ15nXnSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9eQ15fXlFwi16YnIDogJ9eQ15fXqNeZINeU16bXlNeo15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfXkdei16jXkSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSGluZGkgW2hpXVxuLy8hIGF1dGhvciA6IE1heWFuayBTaW5naGFsIDogaHR0cHM6Ly9naXRodWIuY29tL21heWFua3NpbmdoYWxcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgICAgIDI6ICfgpagnLFxuICAgICAgICAgICAgMzogJ+ClqScsXG4gICAgICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgICAgIDU6ICfgpasnLFxuICAgICAgICAgICAgNjogJ+ClrCcsXG4gICAgICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgICAgIDg6ICfgpa4nLFxuICAgICAgICAgICAgOTogJ+ClrycsXG4gICAgICAgICAgICAwOiAn4KWmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICAgICAn4KWpJzogJzMnLFxuICAgICAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICAgICAn4KWsJzogJzYnLFxuICAgICAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICAgICAn4KWvJzogJzknLFxuICAgICAgICAgICAgJ+Clpic6ICcwJyxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgICAgICAvXuCknOCkqC9pLFxuICAgICAgICAgICAgL17gpKvgpLzgpLB84KSr4KSwL2ksXG4gICAgICAgICAgICAvXuCkruCkvuCksOCljeCkmi9pLFxuICAgICAgICAgICAgL17gpIXgpKrgpY3gpLDgpYgvaSxcbiAgICAgICAgICAgIC9e4KSu4KSIL2ksXG4gICAgICAgICAgICAvXuCknOClguCkqC9pLFxuICAgICAgICAgICAgL17gpJzgpYHgpLIvaSxcbiAgICAgICAgICAgIC9e4KSF4KSXL2ksXG4gICAgICAgICAgICAvXuCkuOCkv+CkpOCkgnzgpLjgpL/gpKQvaSxcbiAgICAgICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgICAgICAvXuCkqOCktXzgpKjgpLXgpIIvaSxcbiAgICAgICAgICAgIC9e4KSm4KS/4KS44KSCfOCkpuCkv+CkuC9pLFxuICAgICAgICBdLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL17gpJzgpKgvaSxcbiAgICAgICAgICAgIC9e4KSr4KS84KSwL2ksXG4gICAgICAgICAgICAvXuCkruCkvuCksOCljeCkmi9pLFxuICAgICAgICAgICAgL17gpIXgpKrgpY3gpLDgpYgvaSxcbiAgICAgICAgICAgIC9e4KSu4KSIL2ksXG4gICAgICAgICAgICAvXuCknOClguCkqC9pLFxuICAgICAgICAgICAgL17gpJzgpYHgpLIvaSxcbiAgICAgICAgICAgIC9e4KSF4KSXL2ksXG4gICAgICAgICAgICAvXuCkuOCkv+CkpC9pLFxuICAgICAgICAgICAgL17gpIXgpJXgpY3gpJ/gpYIvaSxcbiAgICAgICAgICAgIC9e4KSo4KS1L2ksXG4gICAgICAgICAgICAvXuCkpuCkv+CkuC9pLFxuICAgICAgICBdO1xuXG4gICAgdmFyIGhpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaGknLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn4KSc4KSo4KS14KSw4KWAX+Ckq+CkvOCksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkruCljeCkrOCksF/gpKbgpL/gpLjgpK7gpY3gpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ+CknOCkqOCkteCksOClgF/gpKvgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSC4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpILgpKzgpLBf4KSm4KS/4KS44KSC4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KSoLl/gpKvgpLzgpLAuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYguX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpIXgpJcuX+CkuOCkv+CkpC5f4KSF4KSV4KWN4KSf4KWCLl/gpKjgpLUuX+CkpuCkv+CkuC4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAn4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLLgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLJf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IHNob3J0TW9udGhzUGFyc2UsXG5cbiAgICAgICAgbW9udGhzUmVnZXg6XG4gICAgICAgICAgICAvXijgpJzgpKjgpLXgpLDgpYB84KSc4KSoXFwuP3zgpKvgpLzgpLDgpLXgpLDgpYB84KSr4KSw4KS14KSw4KWAfOCkq+CkvOCksFxcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIfOCknOClgeCkslxcLj984KSF4KSX4KS44KWN4KSkfOCkheCkl1xcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClguCkrOCksHzgpIXgpJXgpY3gpJ/gpYJcXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLB84KSo4KS1XFwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFxcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcXC4/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYB84KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliOCksnzgpIXgpKrgpY3gpLDgpYhcXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXFwuP3zgpIXgpJfgpLjgpY3gpKR84KSF4KSXXFwuP3zgpLjgpL/gpKTgpK7gpY3gpKzgpLB84KS44KS/4KSk4KSC4KSs4KSwfOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglxcLj984KSo4KS14KSu4KWN4KSs4KSwfOCkqOCkteCkguCkrOCksHzgpKjgpLVcXC4/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLB84KSm4KS/4KS4XFwuPykvaSxcblxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKOCknOCkqOCkteCksOClgD984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgD984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLI/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIg/fOCkheCkl+CkuOCljeCkpD984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKQ/XFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwPykvaSxcblxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o4KSc4KSoXFwuP3zgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWIXFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSyXFwuP3zgpIXgpJdcXC4/fOCkuOCkv+CkpFxcLj984KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLVcXC4/fOCkpuCkv+CkuFxcLj8pL2ksXG5cbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+CkleCksl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4KSq4KS/4KSb4KSy4KWHXSBkZGRkLCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIOCkruClh+CkgicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KSq4KS54KSy4KWHJyxcbiAgICAgICAgICAgIHM6ICfgpJXgpYHgpJsg4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgICAgICBzczogJyVkIOCkuOClh+CkleCkguCkoScsXG4gICAgICAgICAgICBtOiAn4KSP4KSVIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBtbTogJyVkIOCkruCkv+CkqOCknycsXG4gICAgICAgICAgICBoOiAn4KSP4KSVIOCkmOCkguCkn+CkvicsXG4gICAgICAgICAgICBoaDogJyVkIOCkmOCkguCkn+ClhycsXG4gICAgICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgICAgICBNOiAn4KSP4KSVIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICBNTTogJyVkIOCkruCkueClgOCkqOClhycsXG4gICAgICAgICAgICB5OiAn4KSP4KSVIOCkteCksOCljeCktycsXG4gICAgICAgICAgICB5eTogJyVkIOCkteCksOCljeCktycsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgpafgpajgpangpargpavgpazgpa3gpa7gpa/gpaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIEhpbmRpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAgICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIEhpbmRpLlxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSkfOCkuOClgeCkrOCkuXzgpKbgpYvgpKrgpLngpLB84KS24KS+4KSuLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSkJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KWB4KSs4KS5Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCli+CkquCkueCksCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS24KS+4KSuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KWB4KSs4KS5JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpYvgpKrgpLngpLAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CktuCkvuCkric7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENyb2F0aWFuIFtocl1cbi8vISBhdXRob3IgOiBCb2phbiBNYXJrb3ZpxIcgOiBodHRwczovL2dpdGh1Yi5jb20vYm1hcmtvdmljXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0ZSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkYW4gc2F0JyA6ICdqZWRub2cgc2F0YSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2Rhbic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5lJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaHIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdocicsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICdzaWplxI1uamFfdmVsamHEjWVfb8W+dWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICdzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdzaWouX3ZlbGouX2/FvnUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tzdXRyYSB1XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmlqZWR1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbHVdIFtuZWRqZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Byb8WhbGldIGRkZGQgW3VdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpamUgJXMnLFxuICAgICAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBocjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBIdW5nYXJpYW4gW2h1XVxuLy8hIGF1dGhvciA6IEFkYW0gQnJ1bm5lciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnJ1bm5lclxuLy8hIGF1dGhvciA6IFBldGVyIFZpc3p0ICA6IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXNzYXRndFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHdlZWtFbmRpbmdzID1cbiAgICAgICAgJ3Zhc8Ohcm5hcCBow6l0ZsWRbiBrZWRkZW4gc3plcmTDoW4gY3PDvHTDtnJ0w7Zrw7ZuIHDDqW50ZWtlbiBzem9tYmF0b24nLnNwbGl0KCcgJyk7XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgbnVtID0gbnVtYmVyO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgPyAnbsOpaMOhbnkgbcOhc29kcGVyYydcbiAgICAgICAgICAgICAgICAgICAgOiAnbsOpaMOhbnkgbcOhc29kcGVyY2UnO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgPyAnIG3DoXNvZHBlcmMnXG4gICAgICAgICAgICAgICAgICAgIDogJyBtw6Fzb2RwZXJjZSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgcGVyYycgOiAnIHBlcmNlJyk7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBwZXJjJyA6ICcgcGVyY2UnKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDs3JhJyA6ICcgw7Nyw6FqYScpO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw7NyYScgOiAnIMOzcsOhamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBuYXAnIDogJyBuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBow7NuYXAnIDogJyBow7NuYXBqYScpO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3ZWVrKGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaXNGdXR1cmUgPyAnJyA6ICdbbcO6bHRdICcpICtcbiAgICAgICAgICAgICdbJyArXG4gICAgICAgICAgICB3ZWVrRW5kaW5nc1t0aGlzLmRheSgpXSArXG4gICAgICAgICAgICAnXSBMVFsta29yXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgaHUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdodScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudcOhcl9mZWJydcOhcl9tw6FyY2l1c1/DoXByaWxpc19tw6FqdXNfasO6bml1c19qw7psaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbcOhcmMuX8OhcHIuX23DoWouX2rDum4uX2rDumwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAndmFzw6FybmFwX2jDqXRmxZFfa2VkZF9zemVyZGFfY3PDvHTDtnJ0w7ZrX3DDqW50ZWtfc3pvbWJhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3Zhc19ow6l0X2tlZGRfc3plX2Nzw7x0X3DDqW5fc3pvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3ZfaF9rX3N6ZV9jc19wX3N6bycuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBMTDogJ1lZWVkuIE1NTU0gRC4nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gTU1NTSBELiBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBNTU1NIEQuLCBkZGRkIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZGV8ZHUvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCkgPT09ICd1JztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA9PT0gdHJ1ZSA/ICdkZScgOiAnREUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA9PT0gdHJ1ZSA/ICdkdScgOiAnRFUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1ttYV0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbmV4dERheTogJ1tob2xuYXBdIExUWy1rb3JdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3RlZ25hcF0gTFRbLWtvcl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vlay5jYWxsKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIG3Dumx2YScsXG4gICAgICAgICAgICBwYXN0OiAnJXMnLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFybWVuaWFuIFtoeS1hbV1cbi8vISBhdXRob3IgOiBBcm1lbmRhcmFieWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2FybWVuZGFyYWJ5YW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBoeUFtID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaHktYW0nLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn1bDVuNaC1bbVvtWh1oBf1oPVpdW/1oDVvtWh1oBf1bTVodaA1b9f1aHVutaA1avVrF/VtNWh1bXVq9W9X9Ww1bjWgtW21avVvV/VsNW41oLVrNWr1b1f1oXVo9W41b3Vv9W41b1f1b3VpdW61b/VpdW01aLVpdaAX9Ww1bjVr9W/1aXVtNWi1aXWgF/VttW41bXVpdW01aLVpdaAX9Wk1aXVr9W/1aXVtNWi1aXWgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ9Wv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg1akuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Wh1bXVvdaF1oBdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb1b7VodWy1ahdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb1aXWgNWl1a9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg1bDVpdW/1bgnLFxuICAgICAgICAgICAgcGFzdDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgICAgIHM6ICfVtNWrINaE1aHVttWrINW+1aHVtdaA1a/VtdWh1bYnLFxuICAgICAgICAgICAgc3M6ICclZCDVvtWh1bXWgNWv1bXVodW2JyxcbiAgICAgICAgICAgIG06ICfWgNW41brVpScsXG4gICAgICAgICAgICBtbTogJyVkINaA1bjVutWlJyxcbiAgICAgICAgICAgIGg6ICfVqtWh1bQnLFxuICAgICAgICAgICAgaGg6ICclZCDVqtWh1bQnLFxuICAgICAgICAgICAgZDogJ9aF1oAnLFxuICAgICAgICAgICAgZGQ6ICclZCDWhdaAJyxcbiAgICAgICAgICAgIE06ICfVodW01avVvScsXG4gICAgICAgICAgICBNTTogJyVkINWh1bTVq9W9JyxcbiAgICAgICAgICAgIHk6ICfVv9Wh1oDVqycsXG4gICAgICAgICAgICB5eTogJyVkINW/1aHWgNWrJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Wj1avVt9Wl1oDVvtWhfNWh1bzVodW+1bjVv9W+1aF81oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVti8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIC9eKNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYpJC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfVo9Wr1bfVpdaA1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1aHVvNWh1b7VuNW/1b7VoSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Wl1oDVpdWv1bjVtdWh1bYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn18XFxkezEsMn0tKNWr1bZ81oDVpCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERERvJzpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1avVtic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGh5QW07XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSW5kb25lc2lhbiBbaWRdXG4vLyEgYXV0aG9yIDogTW9oYW1tYWQgU2F0cmlvIFV0b21vIDogaHR0cHM6Ly9naXRodWIuY29tL3R5b2tcbi8vISByZWZlcmVuY2U6IGh0dHA6Ly9pZC53aWtpc291cmNlLm9yZy93aWtpL1BlZG9tYW5fVW11bV9FamFhbl9CYWhhc2FfSW5kb25lc2lhX3lhbmdfRGlzZW1wdXJuYWthblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGlkID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaWQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3RfU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ01pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdNZ19Tbl9TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8c2lhbmd8c29yZXxtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2lhbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NvcmUnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdzaWFuZyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NvcmUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQmVzb2sgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsYWx1IHB1a3VsXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyB5YW5nIGxhbHUnLFxuICAgICAgICAgICAgczogJ2JlYmVyYXBhIGRldGlrJyxcbiAgICAgICAgICAgIHNzOiAnJWQgZGV0aWsnLFxuICAgICAgICAgICAgbTogJ3NlbWVuaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEljZWxhbmRpYyBbaXNdXG4vLyEgYXV0aG9yIDogSGlucmlrIMOWcm4gU2lndXLDsHNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vaGlucmlrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG4gJSAxMCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICA/ICdub2trcmFyIHNla8O6bmR1cidcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9ra3J1bSBzZWvDum5kdW0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla8O6bmR1cicgOiAnc2Vrw7puZHVtJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdtw61uw7p0YScgOiAnbcOtbsO6dHUnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw61uw7p0dSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdrbHVra3VzdHVuZGlyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2tsdWtrdXN0dW5kdW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnZGFnJyA6ICdkZWdpJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnZGFnYScgOiAnZMO2Z3VtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFndXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsGknIDogJ23DoW51w7B1bScpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DoW51w7B1cic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcnVtJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBpcyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2lzJywge1xuICAgICAgICBtb250aHM6ICdqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hw61fasO6bl9qw7psX8OhZ8O6X3NlcF9va3RfbsOzdl9kZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51ZGFndXJfbcOhbnVkYWd1cl/DvnJpw7BqdWRhZ3VyX21pw7B2aWt1ZGFndXJfZmltbXR1ZGFndXJfZsO2c3R1ZGFndXJfbGF1Z2FyZGFndXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU3VfTcOhX8Oecl9NaV9GaV9Gw7ZfTGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vDrSBkYWcga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW8OhIG1vcmd1biBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW8OtIGfDpnIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw63DsGFzdGFdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdlZnRpciAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZnlyaXIgJXMgc8Otw7BhbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6ICdrbHVra3VzdHVuZCcsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEl0YWxpYW4gKFN3aXR6ZXJsYW5kKSBbaXQtY2hdXG4vLyEgYXV0aG9yIDogeGZoIDogaHR0cHM6Ly9naXRodWIuY29tL3hmaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0Q2ggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdpdC1jaCcsIHtcbiAgICAgICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ2RvbWVuaWNhX2x1bmVkw6xfbWFydGVkw6xfbWVyY29sZWTDrF9naW92ZWTDrF92ZW5lcmTDrF9zYWJhdG8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWVfZ2lfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRG9tYW5pIGFsbGVdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYWxsZV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiAoL15bMC05XS4rJC8udGVzdChzKSA/ICd0cmEnIDogJ2luJykgKyAnICcgKyBzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgICAgICBzOiAnYWxjdW5pIHNlY29uZGknLFxuICAgICAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGknLFxuICAgICAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgICAgIGQ6ICd1biBnaW9ybm8nLFxuICAgICAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNpJyxcbiAgICAgICAgICAgIHk6ICd1biBhbm5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRDaDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJdGFsaWFuIFtpdF1cbi8vISBhdXRob3IgOiBMb3JlbnpvIDogaHR0cHM6Ly9naXRodWIuY29tL2FsaWVtXG4vLyEgYXV0aG9yOiBNYXR0aWEgTGFyZW50aXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub3N0YWxnaWF6XG4vLyEgYXV0aG9yOiBNYXJjbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYW5mcmU5OFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGl0ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgICAgIG1vbnRoczogJ2dlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW09nZ2kgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0RvbWFuaSBhJyArXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnZGRkZCBbYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAnW0llcmkgYScgK1xuICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1tMYSBzY29yc2FdIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ11MVCdcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbTG8gc2NvcnNvXSBkZGRkIFthJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGxlICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmhvdXJzKCkgPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ3RyYSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgZmEnLFxuICAgICAgICAgICAgczogJ2FsY3VuaSBzZWNvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kaScsXG4gICAgICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6IFwidW4nb3JhXCIsXG4gICAgICAgICAgICBoaDogJyVkIG9yZScsXG4gICAgICAgICAgICBkOiAndW4gZ2lvcm5vJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZ2lvcm5pJyxcbiAgICAgICAgICAgIHc6ICd1bmEgc2V0dGltYW5hJyxcbiAgICAgICAgICAgIHd3OiAnJWQgc2V0dGltYW5lJyxcbiAgICAgICAgICAgIE06ICd1biBtZXNlJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWVzaScsXG4gICAgICAgICAgICB5OiAndW4gYW5ubycsXG4gICAgICAgICAgICB5eTogJyVkIGFubmknLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEphcGFuZXNlIFtqYV1cbi8vISBhdXRob3IgOiBMSSBMb25nIDogaHR0cHM6Ly9naXRodWIuY29tL2JhcnlvblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGphID0gbW9tZW50LmRlZmluZUxvY2FsZSgnamEnLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzIwMTktMDUtMDEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5Luk5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfji78nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTg5LTAxLTA4JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzIwMTktMDQtMzAnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5bmz5oiQJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbsnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdIJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTI2LTEyLTI1JyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5ODktMDEtMDcnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5pit5ZKMJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjbwnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdTJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxOTEyLTA3LTMwJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MjYtMTItMjQnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn5aSn5q2jJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb0nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcxODczLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE5MTItMDctMjknLFxuICAgICAgICAgICAgICAgIG9mZnNldDogNixcbiAgICAgICAgICAgICAgICBuYW1lOiAn5piO5rK7JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICfjjb4nLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdNJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogJzE4NzMtMTItMzEnLFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn6KW/5pqmJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAn57SA5YWD5YmNJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVyYVllYXJPcmRpbmFsUmVnZXg6IC8o5YWDfFxcZCsp5bm0LyxcbiAgICAgICAgZXJhWWVhck9yZGluYWxQYXJzZTogZnVuY3Rpb24gKGlucHV0LCBtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzFdID09PSAn5YWDJyA/IDEgOiBwYXJzZUludChtYXRjaFsxXSB8fCBpbnB1dCwgMTApO1xuICAgICAgICB9LFxuICAgICAgICBtb250aHM6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfml6Xmm5zml6Vf5pyI5puc5pelX+eBq+abnOaXpV/msLTmm5zml6Vf5pyo5puc5pelX+mHkeabnOaXpV/lnJ/mm5zml6UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+aciF/ngatf5rC0X+acqF/ph5Ff5ZyfJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpSBkZGRkIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv5Y2I5YmNfOWNiOW+jC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ+WNiOW+jCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfljYjliY0nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+WNiOW+jCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+S7iuaXpV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7ml6VdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+adpemAsV1kZGRkIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOaXpV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5YWI6YCxXWRkZGQgTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGRkZCBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeaXpS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gMSA/ICflhYPlubQnIDogbnVtYmVyICsgJ+W5tCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgICAgIHM6ICfmlbDnp5InLFxuICAgICAgICAgICAgc3M6ICclZOenkicsXG4gICAgICAgICAgICBtOiAnMeWIhicsXG4gICAgICAgICAgICBtbTogJyVk5YiGJyxcbiAgICAgICAgICAgIGg6ICcx5pmC6ZaTJyxcbiAgICAgICAgICAgIGhoOiAnJWTmmYLplpMnLFxuICAgICAgICAgICAgZDogJzHml6UnLFxuICAgICAgICAgICAgZGQ6ICclZOaXpScsXG4gICAgICAgICAgICBNOiAnMeODtuaciCcsXG4gICAgICAgICAgICBNTTogJyVk44O25pyIJyxcbiAgICAgICAgICAgIHk6ICcx5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWTlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGphO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEphdmFuZXNlIFtqdl1cbi8vISBhdXRob3IgOiBSb255IExhbnRpcCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sYW50aXBcbi8vISByZWZlcmVuY2U6IGh0dHA6Ly9qdi53aWtpcGVkaWEub3JnL3dpa2kvQmFzYV9KYXdhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIganYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdqdicsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9TZXAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTWdfU25fU2xfUmJfS21fSm1fU3AnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ2VuamluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzaXlhbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NvbnRlbicgfHwgbWVyaWRpZW0gPT09ICduZGFsdScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZW5qaW5nJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc2l5YW5nJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnc29udGVuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICduZGFsdSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTWJlbmphbmcgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVrdWxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2FsYSB3aW5naSBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnd29udGVuIGluZyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgaW5na2FuZyBrZXBlbmdrZXInLFxuICAgICAgICAgICAgczogJ3Nhd2V0YXdpcyBkZXRpaycsXG4gICAgICAgICAgICBzczogJyVkIGRldGlrJyxcbiAgICAgICAgICAgIG06ICdzZXR1bmdnYWwgbWVuaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtZW5pdCcsXG4gICAgICAgICAgICBoOiAnc2V0dW5nZ2FsIGphbScsXG4gICAgICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgICAgICBkOiAnc2VkaW50ZW4nLFxuICAgICAgICAgICAgZGQ6ICclZCBkaW50ZW4nLFxuICAgICAgICAgICAgTTogJ3Nld3VsYW4nLFxuICAgICAgICAgICAgTU06ICclZCB3dWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YXVuJyxcbiAgICAgICAgICAgIHl5OiAnJWQgdGF1bicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBqdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZW9yZ2lhbiBba2FdXG4vLyEgYXV0aG9yIDogSXJha2xpIEphbmlhc2h2aWxpIDogaHR0cHM6Ly9naXRodWIuY29tL0lyYWtsaUphbmlcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBrYSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2thJywge1xuICAgICAgICBtb250aHM6ICfhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hf4YOX4YOU4YOR4YOU4YOg4YOV4YOQ4YOa4YOYX+GDm+GDkOGDoOGDouGDmF/hg5Dhg57hg6Dhg5jhg5rhg5hf4YOb4YOQ4YOY4YOh4YOYX+GDmOGDleGDnOGDmOGDoeGDmF/hg5jhg5Xhg5rhg5jhg6Hhg5hf4YOQ4YOS4YOV4YOY4YOh4YOi4YOdX+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmF/hg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hf4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYX+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhg5jhg5Dhg5xf4YOX4YOU4YORX+GDm+GDkOGDoF/hg5Dhg57hg6Bf4YOb4YOQ4YOYX+GDmOGDleGDnF/hg5jhg5Xhg5pf4YOQ4YOS4YOVX+GDoeGDlOGDpV/hg53hg6Xhg6Jf4YOc4YOd4YOUX+GDk+GDlOGDmScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ+GDmeGDleGDmOGDoOGDkF/hg53hg6Dhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOh4YOQ4YOb4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDneGDl+GDruGDqOGDkOGDkeGDkOGDl+GDmF/hg67hg6Phg5fhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOe4YOQ4YOg4YOQ4YOh4YOZ4YOU4YOV4YOYX+GDqOGDkOGDkeGDkOGDl+GDmCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICfhg5nhg5Xhg5jhg6Dhg5Dhg6Ff4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDoV/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDoV/hg6jhg5Dhg5Hhg5Dhg5fhg6EnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvKOGDrOGDmOGDnOGDkHzhg6jhg5Thg5vhg5Phg5Thg5IpLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+GDmeGDleGDmF/hg53hg6Dhg6hf4YOh4YOQ4YObX+GDneGDl+GDrl/hg67hg6Phg5df4YOe4YOQ4YOgX+GDqOGDkOGDkScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfhg5nhg5Vf4YOd4YOgX+GDoeGDkF/hg53hg5df4YOu4YOjX+GDnuGDkF/hg6jhg5AnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4YOT4YOm4YOU4YOhXSBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GDruGDleGDkOGDml0gTFRbLeGDluGDlF0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1vhg5Lhg6Phg6jhg5jhg5xdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+GDqOGDlOGDm+GDk+GDlOGDkl0gZGRkZCBMVFst4YOW4YOUXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vhg6zhg5jhg5zhg5BdIGRkZGQgTFQt4YOW4YOUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC8o4YOs4YOQ4YObfOGDrOGDo+GDl3zhg6Hhg5Dhg5Dhg5d84YOs4YOU4YOafOGDk+GDpnzhg5fhg5UpKOGDmHzhg5QpLyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCQwLCAkMSwgJDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkMiA9PT0gJ+GDmCcgPyAkMSArICfhg6jhg5gnIDogJDEgKyAkMiArICfhg6jhg5gnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXN0OiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICAgIGlmICgvKOGDrOGDkOGDm+GDmHzhg6zhg6Phg5fhg5h84YOh4YOQ4YOQ4YOX4YOYfOGDk+GDpuGDlHzhg5fhg5Xhg5QpLy50ZXN0KHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoLyjhg5h84YOUKSQvLCAn4YOY4YOhIOGDrOGDmOGDnCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoL+GDrOGDlOGDmuGDmC8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC/hg6zhg5Thg5rhg5gkLywgJ+GDrOGDmuGDmOGDoSDhg6zhg5jhg5wnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgczogJ+GDoOGDkOGDm+GDk+GDlOGDnOGDmOGDm+GDlCDhg6zhg5Dhg5vhg5gnLFxuICAgICAgICAgICAgc3M6ICclZCDhg6zhg5Dhg5vhg5gnLFxuICAgICAgICAgICAgbTogJ+GDrOGDo+GDl+GDmCcsXG4gICAgICAgICAgICBtbTogJyVkIOGDrOGDo+GDl+GDmCcsXG4gICAgICAgICAgICBoOiAn4YOh4YOQ4YOQ4YOX4YOYJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4YOh4YOQ4YOQ4YOX4YOYJyxcbiAgICAgICAgICAgIGQ6ICfhg5Phg6bhg5QnLFxuICAgICAgICAgICAgZGQ6ICclZCDhg5Phg6bhg5QnLFxuICAgICAgICAgICAgTTogJ+GDl+GDleGDlCcsXG4gICAgICAgICAgICBNTTogJyVkIOGDl+GDleGDlCcsXG4gICAgICAgICAgICB5OiAn4YOs4YOU4YOa4YOYJyxcbiAgICAgICAgICAgIHl5OiAnJWQg4YOs4YOU4YOa4YOYJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLzB8MS3hg5rhg5h84YOb4YOULVxcZHsxLDJ9fFxcZHsxLDJ9LeGDlC8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLeGDmuGDmCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyIDwgMjAgfHxcbiAgICAgICAgICAgICAgICAobnVtYmVyIDw9IDEwMCAmJiBudW1iZXIgJSAyMCA9PT0gMCkgfHxcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4YOb4YOULScgKyBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5QnO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsXG4gICAgICAgICAgICBkb3k6IDcsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga2E7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2F6YWtoIFtra11cbi8vISBhdXRob3JzIDogTnVybGFuIFJha2hpbXpoYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9udXJsYW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdWZmaXhlcyA9IHtcbiAgICAgICAgMDogJy3RiNGWJyxcbiAgICAgICAgMTogJy3RiNGWJyxcbiAgICAgICAgMjogJy3RiNGWJyxcbiAgICAgICAgMzogJy3RiNGWJyxcbiAgICAgICAgNDogJy3RiNGWJyxcbiAgICAgICAgNTogJy3RiNGWJyxcbiAgICAgICAgNjogJy3RiNGLJyxcbiAgICAgICAgNzogJy3RiNGWJyxcbiAgICAgICAgODogJy3RiNGWJyxcbiAgICAgICAgOTogJy3RiNGLJyxcbiAgICAgICAgMTA6ICct0YjRiycsXG4gICAgICAgIDIwOiAnLdGI0YsnLFxuICAgICAgICAzMDogJy3RiNGLJyxcbiAgICAgICAgNDA6ICct0YjRiycsXG4gICAgICAgIDUwOiAnLdGI0ZYnLFxuICAgICAgICA2MDogJy3RiNGLJyxcbiAgICAgICAgNzA6ICct0YjRlicsXG4gICAgICAgIDgwOiAnLdGI0ZYnLFxuICAgICAgICA5MDogJy3RiNGLJyxcbiAgICAgICAgMTAwOiAnLdGI0ZYnLFxuICAgIH07XG5cbiAgICB2YXIga2sgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdraycsIHtcbiAgICAgICAgbW9udGhzOiAn0pvQsNKj0YLQsNGAX9Cw0pvQv9Cw0L1f0L3QsNGD0YDRi9C3X9GB05nRg9GW0YBf0LzQsNC80YvRgF/QvNCw0YPRgdGL0Lxf0YjRltC70LTQtV/RgtCw0LzRi9C3X9Kb0YvRgNC60q/QudC10Lpf0pvQsNC30LDQvV/Sm9Cw0YDQsNGI0LBf0LbQtdC70YLQvtKb0YHQsNC9Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9Kb0LDSo1/QsNKb0L9f0L3QsNGDX9GB05nRg1/QvNCw0Lxf0LzQsNGDX9GI0ZbQu1/RgtCw0Lxf0pvRi9GAX9Kb0LDQt1/Sm9Cw0YBf0LbQtdC7Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9C20LXQutGB0LXQvdCx0ZZf0LTSr9C50YHQtdC90LHRll/RgdC10LnRgdC10L3QsdGWX9GB05nRgNGB0LXQvdCx0ZZf0LHQtdC50YHQtdC90LHRll/QttKx0LzQsF/RgdC10L3QsdGWJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0LbQtdC6X9C00q/QuV/RgdC10Llf0YHTmdGAX9Cx0LXQuV/QttKx0Lxf0YHQtdC9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C20Lpf0LTQuV/RgdC5X9GB0YBf0LHQuV/QttC8X9GB0L0nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHSr9Cz0ZbQvSDRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CV0YDRgtC10qMg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRiNC1INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Oo0YLQutC10L0g0LDQv9GC0LDQvdGL0qNdIGRkZGQgW9GB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0ZbRiNGW0L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQsdKx0YDRi9C9JyxcbiAgICAgICAgICAgIHM6ICfQsdGW0YDQvdC10YjQtSDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogJ9Cx0ZbRgCDQvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgICAgICBoOiAn0LHRltGAINGB0LDSk9Cw0YInLFxuICAgICAgICAgICAgaGg6ICclZCDRgdCw0pPQsNGCJyxcbiAgICAgICAgICAgIGQ6ICfQsdGW0YAg0LrSr9C9JyxcbiAgICAgICAgICAgIGRkOiAnJWQg0LrSr9C9JyxcbiAgICAgICAgICAgIE06ICfQsdGW0YAg0LDQuScsXG4gICAgICAgICAgICBNTTogJyVkINCw0LknLFxuICAgICAgICAgICAgeTogJ9Cx0ZbRgCDQttGL0LsnLFxuICAgICAgICAgICAgeXk6ICclZCDQttGL0LsnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGI0ZZ80YjRiykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBraztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDYW1ib2RpYW4gW2ttXVxuLy8hIGF1dGhvciA6IEtydXkgVmFubmEgOiBodHRwczovL2dpdGh1Yi5jb20va3J1eXZhbm5hXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+GfoScsXG4gICAgICAgICAgICAyOiAn4Z+iJyxcbiAgICAgICAgICAgIDM6ICfhn6MnLFxuICAgICAgICAgICAgNDogJ+GfpCcsXG4gICAgICAgICAgICA1OiAn4Z+lJyxcbiAgICAgICAgICAgIDY6ICfhn6YnLFxuICAgICAgICAgICAgNzogJ+GfpycsXG4gICAgICAgICAgICA4OiAn4Z+oJyxcbiAgICAgICAgICAgIDk6ICfhn6knLFxuICAgICAgICAgICAgMDogJ+GfoCcsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfhn6EnOiAnMScsXG4gICAgICAgICAgICAn4Z+iJzogJzInLFxuICAgICAgICAgICAgJ+Gfoyc6ICczJyxcbiAgICAgICAgICAgICfhn6QnOiAnNCcsXG4gICAgICAgICAgICAn4Z+lJzogJzUnLFxuICAgICAgICAgICAgJ+Gfpic6ICc2JyxcbiAgICAgICAgICAgICfhn6cnOiAnNycsXG4gICAgICAgICAgICAn4Z+oJzogJzgnLFxuICAgICAgICAgICAgJ+GfqSc6ICc5JyxcbiAgICAgICAgICAgICfhn6AnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIga20gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbScsIHtcbiAgICAgICAgbW9udGhzOiAn4Z6Y4Z6A4Z6a4Z62X+GegOGeu+GemOGfkuGel+GfiF/hnpjhnrjhnpPhnrZf4Z6Y4Z+B4Z6f4Z62X+Gep+Gen+Gel+Getl/hnpjhnrfhnpDhnrvhnpPhnrZf4Z6A4Z6A4Z+S4Z6A4Z6K4Z62X+Gen+GeuOGeoOGetl/hnoDhnonhn5LhnonhnrZf4Z6P4Z674Z6b4Z62X+GenOGet+GeheGfkuGehuGet+GegOGetl/hnpLhn5LhnpPhnrwnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+GemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn4Z6i4Z624Z6R4Z634Z6P4Z+S4Z6ZX+GeheGfkOGek+GfkuGekV/hnqLhnoThn5LhnoLhnrbhnppf4Z6W4Z674Z6SX+GeluGfkuGemuGeoOGen+GfkuGelOGej+Get+GfjV/hnp/hnrvhnoDhn5Lhnppf4Z6f4Z+F4Z6a4Z+NJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Z6i4Z62X+GehV/hnqJf4Z6WX+GeluGfkuGeml/hnp/hnrtf4Z6fJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/hnpbhn5LhnprhnrnhnoB84Z6b4Z+S4Z6E4Z624Z6FLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfhnpvhn5LhnoThnrbhnoUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Z6W4Z+S4Z6a4Z654Z6AJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfhnpvhn5LhnoThnrbhnoUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhnpDhn5LhnoThn4PhnpPhn4Hhn4cg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+Gen+GfkuGeouGfguGegCDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+GemOGfkuGen+Get+Gem+GemOGet+GeiSDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb4Z6f4Z6U4Z+S4Z6P4Z624Z6g4Z+N4Z6Y4Z674Z6TXSBb4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz4Z6R4Z+A4Z6PJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+GemOGeu+GekycsXG4gICAgICAgICAgICBzOiAn4Z6U4Z+J4Z674Z6T4Z+S4Z6Y4Z624Z6T4Z6c4Z634Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Z6c4Z634Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgICAgIG06ICfhnpjhnr3hnpnhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgbW06ICclZCDhnpPhnrbhnpHhnrgnLFxuICAgICAgICAgICAgaDogJ+GemOGeveGemeGemOGfieGfhOGehCcsXG4gICAgICAgICAgICBoaDogJyVkIOGemOGfieGfhOGehCcsXG4gICAgICAgICAgICBkOiAn4Z6Y4Z694Z6Z4Z6Q4Z+S4Z6E4Z+DJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Z6Q4Z+S4Z6E4Z+DJyxcbiAgICAgICAgICAgIE06ICfhnpjhnr3hnpnhnoHhn4InLFxuICAgICAgICAgICAgTU06ICclZCDhnoHhn4InLFxuICAgICAgICAgICAgeTogJ+GemOGeveGemeGehuGfkuGek+GetuGfhicsXG4gICAgICAgICAgICB5eTogJyVkIOGehuGfkuGek+GetuGfhicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC/hnpHhnrhcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICfhnpHhnrglZCcsXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhn6Hhn6Lhn6Phn6Thn6Xhn6bhn6fhn6jhn6nhn6BdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrbTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLYW5uYWRhIFtrbl1cbi8vISBhdXRob3IgOiBSYWplZXYgTmFpayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWplZXZuYWlrdGVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4LOnJyxcbiAgICAgICAgICAgIDI6ICfgs6gnLFxuICAgICAgICAgICAgMzogJ+CzqScsXG4gICAgICAgICAgICA0OiAn4LOqJyxcbiAgICAgICAgICAgIDU6ICfgs6snLFxuICAgICAgICAgICAgNjogJ+CzrCcsXG4gICAgICAgICAgICA3OiAn4LOtJyxcbiAgICAgICAgICAgIDg6ICfgs64nLFxuICAgICAgICAgICAgOTogJ+CzrycsXG4gICAgICAgICAgICAwOiAn4LOmJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+Czpyc6ICcxJyxcbiAgICAgICAgICAgICfgs6gnOiAnMicsXG4gICAgICAgICAgICAn4LOpJzogJzMnLFxuICAgICAgICAgICAgJ+Czqic6ICc0JyxcbiAgICAgICAgICAgICfgs6snOiAnNScsXG4gICAgICAgICAgICAn4LOsJzogJzYnLFxuICAgICAgICAgICAgJ+CzrSc6ICc3JyxcbiAgICAgICAgICAgICfgs64nOiAnOCcsXG4gICAgICAgICAgICAn4LOvJzogJzknLFxuICAgICAgICAgICAgJ+Czpic6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBrbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tuJywge1xuICAgICAgICBtb250aHM6ICfgspzgsqjgsrXgsrDgsr9f4LKr4LOG4LKs4LON4LKw4LK14LKw4LK/X+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCyguCyrOCysOCzjV/gsoXgspXgs43gsp/gs4bgs4Lgs5XgsqzgsrDgs41f4LKo4LK14LOG4LKC4LKs4LKw4LONX+CyoeCyv+CyuOCzhuCyguCyrOCysOCzjScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LKc4LKoX+Cyq+CzhuCyrOCzjeCysF/gsq7gsr7gsrDgs43gsprgs41f4LKP4LKq4LON4LKw4LK/4LKy4LONX+CyruCzhuCzlV/gspzgs4Lgsqjgs41f4LKc4LOB4LKy4LOG4LOWX+CyhuCyl+CyuOCzjeCyn+CzjV/gsrjgs4bgsqrgs43gsp/gs4bgsoJf4LKF4LKV4LON4LKf4LOG4LOC4LOVX+CyqOCyteCzhuCygl/gsqHgsr/gsrjgs4bgsoInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgsq3gsr7gsqjgs4HgsrXgsr7gsrBf4LK44LOG4LOC4LOV4LKu4LK14LK+4LKwX+CyruCyguCyl+Cys+CyteCyvuCysF/gsqzgs4HgsqfgsrXgsr7gsrBf4LKX4LOB4LKw4LOB4LK14LK+4LKwX+CytuCzgeCyleCzjeCysOCyteCyvuCysF/gsrbgsqjgsr/gsrXgsr7gsrAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4LKt4LK+X+CyuOCzhuCzguCzlV/gsq7gsoJf4LKs4LOBX+Cyl+CzgV/gsrbgs4Ff4LK2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+Cyh+CyguCypuCzgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgsqjgsr7gsrPgs4ZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgsqjgsr/gsqjgs43gsqjgs4ZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CyleCzhuCzguCyqOCzhuCyr10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgsqjgsoLgsqTgsrAnLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCyueCyv+CyguCypuCzhicsXG4gICAgICAgICAgICBzOiAn4LKV4LOG4LKy4LK14LOBIOCyleCzjeCyt+Cyo+Cyl+Cys+CzgScsXG4gICAgICAgICAgICBzczogJyVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgScsXG4gICAgICAgICAgICBtOiAn4LKS4LKC4LKm4LOBIOCyqOCyv+CyruCyv+CytycsXG4gICAgICAgICAgICBtbTogJyVkIOCyqOCyv+CyruCyv+CytycsXG4gICAgICAgICAgICBoOiAn4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhicsXG4gICAgICAgICAgICBoaDogJyVkIOCyl+CyguCyn+CzhicsXG4gICAgICAgICAgICBkOiAn4LKS4LKC4LKm4LOBIOCypuCyv+CyqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCypuCyv+CyqCcsXG4gICAgICAgICAgICBNOiAn4LKS4LKC4LKm4LOBIOCypOCyv+CyguCyl+Cys+CzgScsXG4gICAgICAgICAgICBNTTogJyVkIOCypOCyv+CyguCyl+Cys+CzgScsXG4gICAgICAgICAgICB5OiAn4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytycsXG4gICAgICAgICAgICB5eTogJyVkIOCyteCysOCzjeCytycsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gsrDgsr7gsqTgs43gsrDgsr984LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGfOCyruCyp+CzjeCyr+CyvuCyueCzjeCyqHzgsrjgsoLgspzgs4YvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgsrDgsr7gsqTgs43gsrDgsr8nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsqzgs4bgsrPgsr/gspfgs43gspfgs4YnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKu4LKn4LON4LKv4LK+4LK54LON4LKoJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsrjgsoLgspzgs4YnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsqzgs4bgsrPgsr/gspfgs43gspfgs4YnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CyruCyp+CzjeCyr+CyvuCyueCzjeCyqCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LK44LKC4LKc4LOGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsrDgsr7gsqTgs43gsrDgsr8nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o4LKo4LOG4LOVKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn4LKo4LOG4LOVJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGtuO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEtvcmVhbiBba29dXG4vLyEgYXV0aG9yIDogS3l1bmd3b29rLCBQYXJrIDogaHR0cHM6Ly9naXRodWIuY29tL2t5dW5ndzAwa1xuLy8hIGF1dGhvciA6IEplZWV5dWwgTGVlIDxqZWVleXVsQGdtYWlsLmNvbT5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBrbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tvJywge1xuICAgICAgICBtb250aHM6ICcx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblCcuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfsnbzsmpTsnbxf7JuU7JqU7J28X+2ZlOyalOydvF/siJjsmpTsnbxf66qp7JqU7J28X+q4iOyalOydvF/thqDsmpTsnbwnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn7J28X+yblF/tmZRf7IiYX+uqqV/quIhf7YagJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLk1NLkRELicsXG4gICAgICAgICAgICBMTDogJ1lZWVnrhYQgTU1NTSBE7J28JyxcbiAgICAgICAgICAgIExMTDogJ1lZWVnrhYQgTU1NTSBE7J28IEEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeuFhCBNTU1NIETsnbwgZGRkZCBBIGg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeuFhCBNTU1NIETsnbwnLFxuICAgICAgICAgICAgbGxsOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAn7Jik64qYIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICfrgrTsnbwgTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICfslrTsoJwgTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICfsp4Drgpzso7wgZGRkZCBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIO2bhCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMg7KCEJyxcbiAgICAgICAgICAgIHM6ICfrqocg7LSIJyxcbiAgICAgICAgICAgIHNzOiAnJWTstIgnLFxuICAgICAgICAgICAgbTogJzHrtoQnLFxuICAgICAgICAgICAgbW06ICclZOu2hCcsXG4gICAgICAgICAgICBoOiAn7ZWcIOyLnOqwhCcsXG4gICAgICAgICAgICBoaDogJyVk7Iuc6rCEJyxcbiAgICAgICAgICAgIGQ6ICftlZjro6gnLFxuICAgICAgICAgICAgZGQ6ICclZOydvCcsXG4gICAgICAgICAgICBNOiAn7ZWcIOuLrCcsXG4gICAgICAgICAgICBNTTogJyVk64usJyxcbiAgICAgICAgICAgIHk6ICfsnbwg64WEJyxcbiAgICAgICAgICAgIHl5OiAnJWTrhYQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o7J28fOyblHzso7wpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7J28JztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfsm5QnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+yjvCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+yYpOyghHzsmKTtm4QvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbiA9PT0gJ+yYpO2bhCc7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc1VwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDEyID8gJ+yYpOyghCcgOiAn7Jik7ZuEJztcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBrbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBLdXJkaXNoIFtrdS1rbXJdXG4vLyEgYXV0aG9ycyA6IE1hemx1bSDDlnpkb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZXJnZWhlelxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW0sIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHM6IFsnw6dlbmQgc2Fuw655ZScsICfDp2VuZCBzYW7DrnlleWFuJ10sXG4gICAgICAgICAgICBzczogW251bSArICcgc2Fuw655ZScsIG51bSArICcgc2Fuw655ZXlhbiddLFxuICAgICAgICAgICAgbTogWydkZXHDrnFleWVrJywgJ2RlccOucWV5ZWvDqiddLFxuICAgICAgICAgICAgbW06IFtudW0gKyAnIGRlccOucWUnLCBudW0gKyAnIGRlccOucWV5YW4nXSxcbiAgICAgICAgICAgIGg6IFsnc2FldGVrJywgJ3NhZXRla8OqJ10sXG4gICAgICAgICAgICBoaDogW251bSArICcgc2FldCcsIG51bSArICcgc2FldGFuJ10sXG4gICAgICAgICAgICBkOiBbJ3JvamVrJywgJ3JvamVrw6onXSxcbiAgICAgICAgICAgIGRkOiBbbnVtICsgJyByb2onLCBudW0gKyAnIHJvamFuJ10sXG4gICAgICAgICAgICB3OiBbJ2hlZnRleWVrJywgJ2hlZnRleWVrw6onXSxcbiAgICAgICAgICAgIHd3OiBbbnVtICsgJyBoZWZ0ZScsIG51bSArICcgaGVmdGV5YW4nXSxcbiAgICAgICAgICAgIE06IFsnbWVoZWsnLCAnbWVoZWvDqiddLFxuICAgICAgICAgICAgTU06IFtudW0gKyAnIG1laCcsIG51bSArICcgbWVoYW4nXSxcbiAgICAgICAgICAgIHk6IFsnc2FsZWsnLCAnc2FsZWvDqiddLFxuICAgICAgICAgICAgeXk6IFtudW0gKyAnIHNhbCcsIG51bSArICcgc2FsYW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICAvLyBmdW5jdGlvbiBvYmxpcXVlTnVtU3VmZml4KG51bSkge1xuICAgIC8vICAgICBpZihudW0uaW5jbHVkZXMoJzonKSlcbiAgICAvLyAgICAgICAgIG51bSA9IHBhcnNlSW50KG51bS5zcGxpdCgnOicpWzBdKTtcbiAgICAvLyAgICAgZWxzZVxuICAgIC8vICAgICAgICAgbnVtID0gcGFyc2VJbnQobnVtKTtcbiAgICAvLyAgICAgcmV0dXJuIG51bSA9PSAwIHx8IG51bSAlIDEwID09IDEgPyAnw6onXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgOiAobnVtID4gMTAgJiYgbnVtICUgMTAgPT0gMCA/ICfDricgOiAnYW4nKTtcbiAgICAvLyB9XG4gICAgZnVuY3Rpb24gZXphZmVOdW1TdWZmaXgobnVtKSB7XG4gICAgICAgIG51bSA9ICcnICsgbnVtO1xuICAgICAgICB2YXIgbCA9IG51bS5zdWJzdHJpbmcobnVtLmxlbmd0aCAtIDEpLFxuICAgICAgICAgICAgbGwgPSBudW0ubGVuZ3RoID4gMSA/IG51bS5zdWJzdHJpbmcobnVtLmxlbmd0aCAtIDIpIDogJyc7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEobGwgPT0gMTIgfHwgbGwgPT0gMTMpICYmXG4gICAgICAgICAgICAobCA9PSAnMicgfHwgbCA9PSAnMycgfHwgbGwgPT0gJzUwJyB8fCBsID09ICc3MCcgfHwgbCA9PSAnODAnKVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gJ3nDqic7XG4gICAgICAgIHJldHVybiAnw6onO1xuICAgIH1cblxuICAgIHZhciBrdUttciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1LWttcicsIHtcbiAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBzcGVsbGluZyBydWxlcyBkZWZpbmVkIGJ5IHRoZSB3b3JrIGdyb3VwIG9mIFdlcWZhIE1lem9wb3RhbXlhecOqIChNZXNvcG90YW1pYSBGb3VuZGF0aW9uKVxuICAgICAgICAvLyB0aGlzIHNob3VsZCBiZTogJ0thbsO7bmEgUGHFn8Oubl9TaWJhdF9BZGFyX07DrnNhbl9HdWxhbl9IZXrDrnJhbl9Uw65ybWVoX1RlYmF4X8OObG9uX8OHaXLDrnlhIFDDqsWfw65uX8OHaXLDrnlhIFBhxZ/Drm5fS2Fuw7tuYSBQw6rFn8OubidcbiAgICAgICAgLy8gQnV0IHRoZSBuYW1lcyBiZWxvdyBhcmUgbW9yZSB3ZWxsIGtub3duIGFuZCBoYW5keVxuICAgICAgICBtb250aHM6ICdSw6piZW5kYW5fU2liYXRfQWRhcl9Ow65zYW5fR3VsYW5fSGV6w65yYW5fVMOucm1laF9UZWJheF/Djmxvbl9Db3RtZWhfTWlqZGFyX0JlcmZhbmJhcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdSw6piX1NpYl9BZGFfTsOuc19HdWxfSGV6X1TDrnJfVGViX8OObG9fQ290X01pal9CZXInLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnWWVrxZ9lbV9EdcWfZW1fU8OqxZ9lbV/Dh2FyxZ9lbV9Qw6puY8WfZW1fw45uX8WeZW3Dricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1lla19EdV9Tw6pfw4dhcl9Qw6puX8OObl/FnmVtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1llX0R1X1PDql/Dh2FfUMOqX8OObl/FnmUnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYm4nIDogJ0JOJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG4nIDogJ1BOJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2JufEJOfHBufFBOLyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW2FdIFlZWVlbYW5dJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0nLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU1bLl0gWVlZWVthbl0nLFxuICAgICAgICAgICAgbGxsOiAnRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8OOcm8gZGkgc2FldF0gTFQgW2RlXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1NpYsOqIGRpIHNhZXRdIExUIFtkZV0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkaSBzYWV0XSBMVCBbZGVdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbRHVoIGRpIHNhZXRdIExUIFtkZV0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkW2EgYm9yw64gZGkgc2FldF0gTFQgW2RlXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2RpICVzIGRlJyxcbiAgICAgICAgICAgIHBhc3Q6ICdiZXLDriAlcycsXG4gICAgICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSg/OnnDqnzDqnxcXC4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bSwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgcCA9IHBlcmlvZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHAuaW5jbHVkZXMoJ3cnKSB8fCBwLmluY2x1ZGVzKCdtJykpIHJldHVybiBudW0gKyAnLic7XG5cbiAgICAgICAgICAgIHJldHVybiBudW0gKyBlemFmZU51bVN1ZmZpeChudW0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3VLbXI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3VyZGlzaCBba3VdXG4vLyEgYXV0aG9yIDogU2hhaHJhbSBNZWJhc2hhciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9TaGFocmFtTWViYXNoYXJcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn2aEnLFxuICAgICAgICAgICAgMjogJ9miJyxcbiAgICAgICAgICAgIDM6ICfZoycsXG4gICAgICAgICAgICA0OiAn2aQnLFxuICAgICAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgICAgIDY6ICfZpicsXG4gICAgICAgICAgICA3OiAn2acnLFxuICAgICAgICAgICAgODogJ9moJyxcbiAgICAgICAgICAgIDk6ICfZqScsXG4gICAgICAgICAgICAwOiAn2aAnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn2aEnOiAnMScsXG4gICAgICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICAgICAn2aQnOiAnNCcsXG4gICAgICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICAgICAn2acnOiAnNycsXG4gICAgICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICAgICAn2aAnOiAnMCcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRocyA9IFtcbiAgICAgICAgICAgICfaqdin2YbZiNmG24wg2K/ZiNmI25XZhScsXG4gICAgICAgICAgICAn2LTZiNio2KfYqicsXG4gICAgICAgICAgICAn2KbYp9iy2KfYsScsXG4gICAgICAgICAgICAn2YbbjNiz2KfZhicsXG4gICAgICAgICAgICAn2KbYp9uM2KfYsScsXG4gICAgICAgICAgICAn2K3ZiNiy25XbjNix2KfZhicsXG4gICAgICAgICAgICAn2KrbldmF2YXZiNiyJyxcbiAgICAgICAgICAgICfYptin2KgnLFxuICAgICAgICAgICAgJ9im25XbjNmE2YjZiNmEJyxcbiAgICAgICAgICAgICfYqti02LHbjNmG24wg24zbldmD25XZhScsXG4gICAgICAgICAgICAn2KrYtNix24zZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAgICAgJ9mD2KfZhtmI2YbbjCDbjNuV2qnbldmFJyxcbiAgICAgICAgXTtcblxuICAgIHZhciBrdSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1Jywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAn24zZh+KAjNmD2LTZh+KAjNmF2YXZh+KAjF/Yr9mI2YjYtNmH4oCM2YXZhdmH4oCMX9iz247YtNmH4oCM2YXZhdmH4oCMX9qG2YjYp9ix2LTZh+KAjNmF2YXZh+KAjF/ZvtuO2YbYrNi02YfigIzZhdmF2YfigIxf2YfZh+KAjNuM2YbbjF/YtNmH4oCM2YXZhdmH4oCMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6XG4gICAgICAgICAgICAn24zZh+KAjNmD2LTZh+KAjNmFX9iv2YjZiNi02YfigIzZhV/Ys9uO2LTZh+KAjNmFX9qG2YjYp9ix2LTZh+KAjNmFX9m+247Zhtis2LTZh+KAjNmFX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfbjF/Yr1/Ys1/ahl/Zvl/Zh1/YtCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/YptuO2YjYp9ix2YfigIx82KjZh+KAjNuM2KfZhtuMLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gL9im247ZiNin2LHZh+KAjC8udGVzdChpbnB1dCk7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYqNmH4oCM24zYp9mG24wnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9im247ZiNin2LHZh+KAjCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9im2YfigIzZhdix24Yg2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2KjZh+KAjNuM2KfZhtuMINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9mD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9iv2YjbjtmG244g2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn2YTZh+KAjCAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMnLFxuICAgICAgICAgICAgczogJ9qG2YfigIzZhtivINqG2LHZg9mH4oCM24zZh+KAjNmDJyxcbiAgICAgICAgICAgIHNzOiAn2obYsdmD2YfigIwgJWQnLFxuICAgICAgICAgICAgbTogJ9uM2YfigIzZgyDYrtmI2YTZh+KAjNmDJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2K7ZiNmE2YfigIzZgycsXG4gICAgICAgICAgICBoOiAn24zZh+KAjNmDINmD2KfYqtqY2YXbjtixJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICAgICAgZDogJ9uM2YfigIzZgyDalduG2pgnLFxuICAgICAgICAgICAgZGQ6ICclZCDalduG2pgnLFxuICAgICAgICAgICAgTTogJ9uM2YfigIzZgyDZhdin2YbarycsXG4gICAgICAgICAgICBNTTogJyVkINmF2KfZhtqvJyxcbiAgICAgICAgICAgIHk6ICfbjNmH4oCM2YMg2LPYp9q1JyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9q1JyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4ga3U7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS3lyZ3l6IFtreV1cbi8vISBhdXRob3IgOiBDaHluZ3l6IEFyeXN0YW4gdXVsdSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaHluZ3l6XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3VmZml4ZXMgPSB7XG4gICAgICAgIDA6ICct0YfSrycsXG4gICAgICAgIDE6ICct0YfQuCcsXG4gICAgICAgIDI6ICct0YfQuCcsXG4gICAgICAgIDM6ICct0YfSrycsXG4gICAgICAgIDQ6ICct0YfSrycsXG4gICAgICAgIDU6ICct0YfQuCcsXG4gICAgICAgIDY6ICct0YfRiycsXG4gICAgICAgIDc6ICct0YfQuCcsXG4gICAgICAgIDg6ICct0YfQuCcsXG4gICAgICAgIDk6ICct0YfRgycsXG4gICAgICAgIDEwOiAnLdGH0YMnLFxuICAgICAgICAyMDogJy3Rh9GLJyxcbiAgICAgICAgMzA6ICct0YfRgycsXG4gICAgICAgIDQwOiAnLdGH0YsnLFxuICAgICAgICA1MDogJy3Rh9KvJyxcbiAgICAgICAgNjA6ICct0YfRiycsXG4gICAgICAgIDcwOiAnLdGH0LgnLFxuICAgICAgICA4MDogJy3Rh9C4JyxcbiAgICAgICAgOTA6ICct0YfRgycsXG4gICAgICAgIDEwMDogJy3Rh9KvJyxcbiAgICB9O1xuXG4gICAgdmFyIGt5ID0gbW9tZW50LmRlZmluZUxvY2FsZSgna3knLCB7XG4gICAgICAgIG1vbnRoczogJ9GP0L3QstCw0YDRjF/RhNC10LLRgNCw0LvRjF/QvNCw0YDRgl/QsNC/0YDQtdC70Yxf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgNGMX9C+0LrRgtGP0LHRgNGMX9C90L7Rj9Cx0YDRjF/QtNC10LrQsNCx0YDRjCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRj9C90LJf0YTQtdCyX9C80LDRgNGCX9Cw0L/RgF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzX9GB0LXQvV/QvtC60YJf0L3QvtGPX9C00LXQuicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0JbQtdC6X9CU0q/QuV/QqNC10Llf0KjQsNGAX9CR0LXQuV/QltGD0Lxf0JjRiNC1Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9CW0Lpf0JTQuV/QqNC5X9Co0YBf0JHQuV/QltC8X9CY0YgnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHSr9Cz0q/QvSDRgdCw0LDRgl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQrdGA0YLQtdKjINGB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Ca0LXRh9GN0Y0g0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9Oo0YLQutOp0L0g0LDQv9GC0LDQvdGL0L1dIGRkZGQgW9C60q/QvdKvXSBb0YHQsNCw0YJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LjRh9C40L3QtNC1JyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQvNGD0YDRg9C9JyxcbiAgICAgICAgICAgIHM6ICfQsdC40YDQvdC10YfQtSDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgbTogJ9Cx0LjRgCDQvNKv0L3TqdGCJyxcbiAgICAgICAgICAgIG1tOiAnJWQg0LzSr9C906nRgicsXG4gICAgICAgICAgICBoOiAn0LHQuNGAINGB0LDQsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQsNCw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0LjRgCDQutKv0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0LjRgCDQsNC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LDQuScsXG4gICAgICAgICAgICB5OiAn0LHQuNGAINC20YvQuycsXG4gICAgICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbbnVtYmVyXSB8fCBzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBreTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMdXhlbWJvdXJnaXNoIFtsYl1cbi8vISBhdXRob3IgOiBtd2VpbWVyc2tpcmNoIDogaHR0cHM6Ly9naXRodWIuY29tL213ZWltZXJza2lyY2hcbi8vISBhdXRob3IgOiBEYXZpZCBSYWlzb24gOiBodHRwczovL2dpdGh1Yi5jb20va3dpc2F0elxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZW5nIE1pbnV0dCcsICdlbmdlciBNaW51dHQnXSxcbiAgICAgICAgICAgIGg6IFsnZW5nIFN0b25uJywgJ2VuZ2VyIFN0b25uJ10sXG4gICAgICAgICAgICBkOiBbJ2VlbiBEYWcnLCAnZW5nZW0gRGFnJ10sXG4gICAgICAgICAgICBNOiBbJ2VlIE1vdW50JywgJ2VuZ2VtIE1vdW50J10sXG4gICAgICAgICAgICB5OiBbJ2VlIEpvZXInLCAnZW5nZW0gSm9lciddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NGdXR1cmVUaW1lKHN0cmluZykge1xuICAgICAgICB2YXIgbnVtYmVyID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZignICcpKTtcbiAgICAgICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2EgJyArIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2FuICcgKyBzdHJpbmc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHByb2Nlc3NQYXN0VGltZShzdHJpbmcpIHtcbiAgICAgICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgICAgIGlmIChlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKSkge1xuICAgICAgICAgICAgcmV0dXJuICd2aXJ1ICcgKyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICd2aXJ1biAnICsgc3RyaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHdvcmQgYmVmb3JlIHRoZSBnaXZlbiBudW1iZXIgbG9zZXMgdGhlICctbicgZW5kaW5nLlxuICAgICAqIGUuZy4gJ2FuIDEwIERlZWcnIGJ1dCAnYSA1IERlZWcnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbnVtYmVyIHtpbnRlZ2VyfVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQobnVtYmVyLCAxMCk7XG4gICAgICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIE5lZ2F0aXZlIE51bWJlciAtLT4gYWx3YXlzIHRydWVcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwKSB7XG4gICAgICAgICAgICAvLyBPbmx5IDEgZGlnaXRcbiAgICAgICAgICAgIGlmICg0IDw9IG51bWJlciAmJiBudW1iZXIgPD0gNykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgLy8gMiBkaWdpdHNcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBmaXJzdERpZ2l0ID0gbnVtYmVyIC8gMTA7XG4gICAgICAgICAgICBpZiAobGFzdERpZ2l0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihmaXJzdERpZ2l0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobGFzdERpZ2l0KTtcbiAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCAxMDAwMCkge1xuICAgICAgICAgICAgLy8gMyBvciA0IGRpZ2l0cyAtLT4gcmVjdXJzaXZlbHkgY2hlY2sgZmlyc3QgZGlnaXRcbiAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPj0gMTApIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFueXRoaW5nIGxhcmdlciB0aGFuIDQgZGlnaXRzOiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBuLTMgZGlnaXRzXG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgLyAxMDAwO1xuICAgICAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxiID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbGInLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubmRlZ19Nw6lpbmRlZ19Ew6tuc2NoZGVnX03Dq3R0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX03DqS5fRMOrLl9Nw6suX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX03DqV9Ew6tfTcOrX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0gW0F1ZXJdJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MgW0F1ZXJdJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGF1dCB1bV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTXVlciB1bV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tHw6tzY2h0ZXIgdW1dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gRGlmZmVyZW50IGRhdGUgc3RyaW5nIGZvciAnRMOrbnNjaGRlZycgKFR1ZXNkYXkpIGFuZCAnRG9ubmVzY2hkZWcnIChUaHVyc2RheSkgZHVlIHRvIHBob25vbG9naWNhbCBydWxlXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tMZXNjaHRlXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiBwcm9jZXNzRnV0dXJlVGltZSxcbiAgICAgICAgICAgIHBhc3Q6IHByb2Nlc3NQYXN0VGltZSxcbiAgICAgICAgICAgIHM6ICdlIHB1ZXIgU2Vrb25uZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWtvbm5lbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dHRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdG9ubmVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogJyVkIERlZWcnLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiAnJWQgTcOpaW50JyxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogJyVkIEpvZXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGxiO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhbyBbbG9dXG4vLyEgYXV0aG9yIDogUnlhbiBIYXJ0IDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5oYXJ0MlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIGxvID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbG8nLCB7XG4gICAgICAgIG1vbnRoczogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6sicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+C6reC6suC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+C6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgupdf4LqIX+C6reC6hF/gup5f4Lqe4LqrX+C6quC6gV/guqonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAn4Lqn4Lqx4LqZZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgupXguq3gupngu4HguqXguocnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vguqHgurfgu4ngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4Lqh4Lq34LuJ4Lqt4Lq34LuI4LqZ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vguqfgurHgupldZGRkZFvgu5zgu4ngurLgu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4Lqh4Lq34LuJ4Lqn4Lqy4LqZ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vguqfgurHgupldZGRkZFvgu4HguqXgu4nguqfgupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4Lqt4Lq14LqBICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+C6nOC7iOC6suC6meC6oeC6sicsXG4gICAgICAgICAgICBzOiAn4Lqa4LuN4LuI4LuA4LqX4Lq74LuI4Lqy4LuD4LqU4Lqn4Lq04LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIHNzOiAnJWQg4Lqn4Lq04LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgICAgIG06ICcxIOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBtbTogJyVkIOC6meC6suC6l+C6tScsXG4gICAgICAgICAgICBoOiAnMSDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgaGg6ICclZCDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICAgICAgZDogJzEg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4Lqh4Lq34LuJJyxcbiAgICAgICAgICAgIE06ICcxIOC7gOC6lOC6t+C6reC6mScsXG4gICAgICAgICAgICBNTTogJyVkIOC7gOC6lOC6t+C6reC6mScsXG4gICAgICAgICAgICB5OiAnMSDgupvgurUnLFxuICAgICAgICAgICAgeXk6ICclZCDgupvgurUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvKOC6l+C6teC7iClcXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LqX4Lq14LuIJyArIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBsbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMaXRodWFuaWFuIFtsdF1cbi8vISBhdXRob3IgOiBNaW5kYXVnYXMgTW96xatyYXMgOiBodHRwczovL2dpdGh1Yi5jb20vbW1venVyYXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1bml0cyA9IHtcbiAgICAgICAgc3M6ICdzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcycsXG4gICAgICAgIG06ICdtaW51dMSXX21pbnV0xJdzX21pbnV0xJknLFxuICAgICAgICBtbTogJ21pbnV0xJdzX21pbnXEjWnFs19taW51dGVzJyxcbiAgICAgICAgaDogJ3ZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kxIUnLFxuICAgICAgICBoaDogJ3ZhbGFuZG9zX3ZhbGFuZMWzX3ZhbGFuZGFzJyxcbiAgICAgICAgZDogJ2RpZW5hX2RpZW5vc19kaWVuxIUnLFxuICAgICAgICBkZDogJ2RpZW5vc19kaWVuxbNfZGllbmFzJyxcbiAgICAgICAgTTogJ23El251b19txJduZXNpb19txJduZXPErycsXG4gICAgICAgIE1NOiAnbcSXbmVzaWFpX23El25lc2nFs19txJduZXNpdXMnLFxuICAgICAgICB5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgICAgICB5eTogJ21ldGFpX21ldMWzX21ldHVzJyxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2tlbGlvcyBzZWt1bmTEl3MnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2tlbGnFsyBzZWt1bmTFvmnFsycgOiAna2VsaWFzIHNla3VuZGVzJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgID8gZm9ybXMoa2V5KVswXVxuICAgICAgICAgICAgOiBpc0Z1dHVyZVxuICAgICAgICAgICAgICA/IGZvcm1zKGtleSlbMV1cbiAgICAgICAgICAgICAgOiBmb3JtcyhrZXkpWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzcGVjaWFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDAgfHwgKG51bWJlciA+IDEwICYmIG51bWJlciA8IDIwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybXMoa2V5KSB7XG4gICAgICAgIHJldHVybiB1bml0c1trZXldLnNwbGl0KCdfJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICByZXN1bHQgKyB0cmFuc2xhdGVTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleVswXSwgaXNGdXR1cmUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoc3BlY2lhbChudW1iZXIpID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIGZvcm1zKGtleSlbMV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoc3BlY2lhbChudW1iZXIpID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBsdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2x0Jywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIGZvcm1hdDogJ3NhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kxb5pb19nZWd1xb7El3NfYmlyxb5lbGlvX2xpZXBvc19ydWdwasWrxI1pb19ydWdzxJdqb19zcGFsaW9fbGFwa3JpxI1pb19ncnVvZMW+aW8nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ3NhdXNpc192YXNhcmlzX2tvdmFzX2JhbGFuZGlzX2dlZ3XFvsSXX2JpcsW+ZWxpc19saWVwYV9ydWdwasWrdGlzX3J1Z3PEl2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/fE1NTU0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStEW29EXT8vLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czoge1xuICAgICAgICAgICAgZm9ybWF0OiAnc2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7Erycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAnc2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlxI1pYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfxaFlxaF0YWRpZW5pcycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBpc0Zvcm1hdDogL2RkZGQgSEg6bW0vLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fxaBlxaEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU19QX0FfVF9LX1BuX8WgJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgICAgIExMTDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBsbDogJ1lZWVkgW20uXSBNTU1NIEQgW2QuXScsXG4gICAgICAgICAgICBsbGw6ICdZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW8WgaWFuZGllbl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tSeXRval0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1ByYcSXanVzxK9dIGRkZGQgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwbyAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJpZcWhICVzJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tb2ppLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctb2ppJztcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGx0O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhdHZpYW4gW2x2XVxuLy8hIGF1dGhvciA6IEtyaXN0YXBzIEthcmxzb25zIDogaHR0cHM6Ly9naXRodWIuY29tL3NrYWtyaVxuLy8hIGF1dGhvciA6IErEgW5pcyBFbG1lcmlzIDogaHR0cHM6Ly9naXRodWIuY29tL0phbmlzRVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVuaXRzID0ge1xuICAgICAgICBzczogJ3Nla3VuZGVzX3Nla3VuZMSTbV9zZWt1bmRlX3Nla3VuZGVzJy5zcGxpdCgnXycpLFxuICAgICAgICBtOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1tOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgICAgICBoaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGRkOiAnZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzJy5zcGxpdCgnXycpLFxuICAgICAgICBNOiAnbcSTbmXFoWFfbcSTbmXFoWllbV9txJNuZXNpc19txJNuZcWhaScuc3BsaXQoJ18nKSxcbiAgICAgICAgTU06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgICAgICB5OiAnZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpJy5zcGxpdCgnXycpLFxuICAgICAgICB5eTogJ2dhZGFfZ2FkaWVtX2dhZHNfZ2FkaScuc3BsaXQoJ18nKSxcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aXRob3V0U3VmZml4IGJvb2xlYW4gdHJ1ZSA9IGEgbGVuZ3RoIG9mIHRpbWU7IGZhbHNlID0gYmVmb3JlL2FmdGVyIGEgcGVyaW9kIG9mIHRpbWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZm9ybWF0KGZvcm1zLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxICYmIG51bWJlciAlIDEwMCAhPT0gMTEgPyBmb3Jtc1syXSA6IGZvcm1zWzNdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgICAgICAvLyBFLmcuIFwiMyBtaW7Fq3TEk21cIiBhcyBpbiBcInDEk2MgMyBtaW7Fq3TEk21cIi5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMSAmJiBudW1iZXIgJSAxMDAgIT09IDExID8gZm9ybXNbMF0gOiBmb3Jtc1sxXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVsYXRpdmVTZWNvbmRzKG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbiAgICB9XG5cbiAgICB2YXIgbHYgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdsdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N2xJN0ZGllbmFfcGlybWRpZW5hX290cmRpZW5hX3RyZcWhZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N2X1BfT19UX0NfUGtfUycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTdl9QX09fVF9DX1BrX1MnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVkuJyxcbiAgICAgICAgICAgIExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0nLFxuICAgICAgICAgICAgTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vFoG9kaWVuIHB1bGtzdGVuXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1LEq3QgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbVmFrYXIgcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW1BhZ8SBanXFocSBXSBkZGRkIFtwdWxrc3Rlbl0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdwxJNjICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwaXJtcyAlcycsXG4gICAgICAgICAgICBzOiByZWxhdGl2ZVNlY29uZHMsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiByZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIsXG4gICAgICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06IHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcixcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbHY7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9udGVuZWdyaW4gW21lXVxuLy8hIGF1dGhvciA6IE1pb2RyYWcgTmlrYcSNIDxtaW9kcmFnQHJlc3RhcnRpdC5tZT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlvZHJhZ25pa2FjXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHJhbnNsYXRvciA9IHtcbiAgICAgICAgd29yZHM6IHtcbiAgICAgICAgICAgIC8vRGlmZmVyZW50IGdyYW1tYXRpY2FsIGNhc2VzXG4gICAgICAgICAgICBzczogWydzZWt1bmQnLCAnc2VrdW5kYScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkZDogWydkYW4nLCAnZGFuYScsICdkYW5hJ10sXG4gICAgICAgICAgICBNTTogWydtamVzZWMnLCAnbWplc2VjYScsICdtamVzZWNpJ10sXG4gICAgICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyB3b3JkS2V5WzBdXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICAgICAgICA6IHdvcmRLZXlbMl07XG4gICAgICAgIH0sXG4gICAgICAgIHRyYW5zbGF0ZTogZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgbWUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtZScsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc2p1dHJhIHVdIExUJyxcblxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkamVsamVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3JpamVkZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnZGFuJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFvcmkgW21pXVxuLy8hIGF1dGhvciA6IEpvaG4gQ29ycmlnYW4gPHJvYmJpZWNsb3NldEBnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL2pvaG5pZGVhbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1pID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbWknLCB7XG4gICAgICAgIG1vbnRoczogJ0tvaGktdMSBdGVfSHVpLXRhbmd1cnVfUG91dMWrLXRlLXJhbmdpX1BhZW5nYS13aMSBd2jEgV9IYXJhdHVhX1BpcGlyaV9IxY1uZ29pbmdvaV9IZXJlLXR1cmkta8WNa8SBX01haHVydV9XaGlyaW5nYS3EgS1udWt1X1doaXJpbmdhLcSBLXJhbmdpX0hha2loZWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0tvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICAgICAgbW9udGhzU2hvcnRSZWdleDogLyg/OlsnYS16XFx1MDEwMVxcdTAxNERcXHUwMTZCXStcXC0/KXsxLDN9L2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwyfS9pLFxuICAgICAgICB3ZWVrZGF5czogJ1LEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1RhX01hX1TFq19XZV9UxIFpX1BhX0jEgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2ldIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIHRlaWUgbWFoYW5hLCBpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fwb3BvIGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpbmFuYWhpIGldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbd2hha2FtdXR1bmdhIGldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaSByb3RvIGkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGkgbXVhJyxcbiAgICAgICAgICAgIHM6ICd0ZSBoxJNrb25hIHJ1YXJ1YScsXG4gICAgICAgICAgICBzczogJyVkIGjEk2tvbmEnLFxuICAgICAgICAgICAgbTogJ2hlIG1lbmV0aScsXG4gICAgICAgICAgICBtbTogJyVkIG1lbmV0aScsXG4gICAgICAgICAgICBoOiAndGUgaGFvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBoYW9yYScsXG4gICAgICAgICAgICBkOiAnaGUgcmEnLFxuICAgICAgICAgICAgZGQ6ICclZCByYScsXG4gICAgICAgICAgICBNOiAnaGUgbWFyYW1hJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbWFyYW1hJyxcbiAgICAgICAgICAgIHk6ICdoZSB0YXUnLFxuICAgICAgICAgICAgeXk6ICclZCB0YXUnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1pO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hY2Vkb25pYW4gW21rXVxuLy8hIGF1dGhvciA6IEJvcmlzbGF2IE1pY2tvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9CMGswXG4vLyEgYXV0aG9yIDogU2FzaGtvIFRvZG9yb3YgOiBodHRwczovL2dpdGh1Yi5jb20vYmt5Y2VoXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaycsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRmNCw0L1f0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfQvdC10LTQtdC70LBf0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQvtC6X9C/0LXRgtC+0Lpf0YHQsNCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CU0LXQvdC10YEg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQo9GC0YDQtSDQstC+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQktC+XSBkZGRkIFvQstC+XSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LLQvl0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgICAgICBwYXN0OiAn0L/RgNC10LQgJXMnLFxuICAgICAgICAgICAgczogJ9C90LXQutC+0LvQutGDINGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICAgICAgbTogJ9C10LTQvdCwINC80LjQvdGD0YLQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC80LjQvdGD0YLQuCcsXG4gICAgICAgICAgICBoOiAn0LXQtNC10L0g0YfQsNGBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YfQsNGB0LAnLFxuICAgICAgICAgICAgZDogJ9C10LTQtdC9INC00LXQvScsXG4gICAgICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgICAgIE06ICfQtdC00LXQvSDQvNC10YHQtdGGJyxcbiAgICAgICAgICAgIE1NOiAnJWQg0LzQtdGB0LXRhtC4JyxcbiAgICAgICAgICAgIHk6ICfQtdC00L3QsCDQs9C+0LTQuNC90LAnLFxuICAgICAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBsYXN0RGlnaXQgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdCyJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPiAxMCAmJiBsYXN0MkRpZ2l0cyA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCy0LgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSA3IHx8IGxhc3REaWdpdCA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgtC4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1rO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5YWxhbSBbbWxdXG4vLyEgYXV0aG9yIDogRmxveWQgUGluayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG95ZHBpbmtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtbCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21sJywge1xuICAgICAgICBtb250aHM6ICfgtJzgtKjgtYHgtLXgtLDgtL9f4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/X+C0ruC0vuC1vOC0muC1jeC0muC1jV/gtI/gtKrgtY3gtLDgtL/gtb1f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYhf4LST4LSX4LS44LWN4LSx4LWN4LSx4LWNX+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC1vF/gtJLgtJXgtY3gtJ/gtYvgtKzgtbxf4LSo4LS14LSC4LSs4LW8X+C0oeC0v+C0uOC0guC0rOC1vCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4LSc4LSo4LWBLl/gtKvgtYbgtKzgtY3gtLDgtYEuX+C0ruC0vuC1vC5f4LSP4LSq4LWN4LSw4LS/Ll/gtK7gtYfgtK/gtY1f4LSc4LWC4LW6X+C0nOC1guC0suC1iC5f4LST4LSXLl/gtLjgtYbgtKrgtY3gtLHgtY3gtLEuX+C0kuC0leC1jeC0n+C1iy5f4LSo4LS14LSCLl/gtKHgtL/gtLjgtIIuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0micuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LSe4LS+4LSv4LW8X+C0pOC0v+C0meC1jeC0leC1vl/gtJrgtYrgtLXgtY3gtLVf4LSs4LWB4LSn4LW7X+C0teC1jeC0r+C0vuC0tOC0gl/gtLXgtYbgtLPgtY3gtLPgtL9f4LS24LSo4LS/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0ticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIC3gtKjgtYEnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEnLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+C0h+C0qOC1jeC0qOC1jV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgtKjgtL7gtLPgtYZdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgtIfgtKjgtY3gtKjgtLLgtYZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C0leC0tOC0v+C0nuC1jeC0nl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY0nLFxuICAgICAgICAgICAgcGFzdDogJyVzIOC0ruC1geC1u+C0quC1jScsXG4gICAgICAgICAgICBzOiAn4LSF4LW94LSqIOC0qOC0v+C0ruC0v+C0t+C0meC1jeC0meC1vicsXG4gICAgICAgICAgICBzczogJyVkIOC0uOC1huC0leC1jeC0leC1u+C0oeC1jScsXG4gICAgICAgICAgICBtOiAn4LSS4LSw4LWBIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBtbTogJyVkIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgICAgICBoOiAn4LSS4LSw4LWBIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBoaDogJyVkIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgICAgICBkOiAn4LSS4LSw4LWBIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBkZDogJyVkIOC0puC0v+C0teC0uOC0gicsXG4gICAgICAgICAgICBNOiAn4LSS4LSw4LWBIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICBNTTogJyVkIOC0ruC0vuC0uOC0gicsXG4gICAgICAgICAgICB5OiAn4LSS4LSw4LWBIOC0teC1vOC0t+C0gicsXG4gICAgICAgICAgICB5eTogJyVkIOC0teC1vOC0t+C0gicsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/gtLDgtL7gtKTgtY3gtLDgtL984LSw4LS+4LS14LS/4LSy4LWGfOC0ieC0muC1jeC0miDgtJXgtLTgtL/gtJ7gtY3gtJ7gtY184LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCfOC0sOC0vuC0pOC1jeC0sOC0vy9pLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKG1lcmlkaWVtID09PSAn4LSw4LS+4LSk4LWN4LSw4LS/JyAmJiBob3VyID49IDQpIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJyB8fFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4LS14LWI4LSV4LWB4LSo4LWN4LSo4LWH4LSw4LSCJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LS14LS/4LSy4LWGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWw7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9uZ29saWFuIFttbl1cbi8vISBhdXRob3IgOiBKYXZraGxhbnR1Z3MgTnlhbWRvcmogOiBodHRwczovL2dpdGh1Yi5jb20vamF2a2hhYW5qN1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtCcgOiAn0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0nO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQtdC60YPQvdC0JyA6ICcg0YHQtdC60YPQvdC00YvQvScpO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQvNC40L3Rg9GCJyA6ICcg0LzQuNC90YPRgtGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YbQsNCzJyA6ICcg0YbQsNCz0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINOp0LTTqdGAJyA6ICcg06nQtNGA0LjQudC9Jyk7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINGB0LDRgCcgOiAnINGB0LDRgNGL0L0nKTtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0LbQuNC7JyA6ICcg0LbQuNC70LjQudC9Jyk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbW4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbicsIHtcbiAgICAgICAgbW9udGhzOiAn0J3RjdCz0LTSr9Cz0Y3RjdGAINGB0LDRgF/QpdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YBf0JPRg9GA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JTTqdGA06nQstC00q/Qs9GN0Y3RgCDRgdCw0YBf0KLQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/Ql9GD0YDQs9Cw0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNC+0LvQtNGD0LPQsNCw0YAg0YHQsNGAX9Cd0LDQudC80LTRg9Cz0LDQsNGAINGB0LDRgF/QldGB0LTSr9Cz0Y3RjdGAINGB0LDRgF/QkNGA0LDQstC00YPQs9Cw0LDRgCDRgdCw0YBf0JDRgNCy0LDQvSDQvdGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQstCw0L0g0YXQvtGR0YDQtNGD0LPQsNCw0YAg0YHQsNGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICcxINGB0LDRgF8yINGB0LDRgF8zINGB0LDRgF80INGB0LDRgF81INGB0LDRgF82INGB0LDRgF83INGB0LDRgF84INGB0LDRgF85INGB0LDRgF8xMCDRgdCw0YBfMTEg0YHQsNGAXzEyINGB0LDRgCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9Cd0Y/QvF/QlNCw0LLQsNCwX9Cc0Y/Qs9C80LDRgF/Qm9GF0LDQs9Cy0LBf0J/Sr9GA0Y3Qsl/QkdCw0LDRgdCw0L1f0JHRj9C80LHQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfQndGPX9CU0LBf0JzRj1/Qm9GFX9Cf0q9f0JHQsF/QkdGPJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCcsXG4gICAgICAgICAgICBMTEw6ICdZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9Ku06h80q7QpS9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ9Ku0KUnO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7TqCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0q7QpSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9Oo0L3TqdOp0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9Cc0LDRgNCz0LDQsNGIXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1vQmNGA0Y3RhV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9Oo0YfQuNCz0LTTqdGAXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg0LTQsNGA0LDQsCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMg06nQvNC906knLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g06nQtNOp0YAvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg06nQtNOp0YAnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbW47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFyYXRoaSBbbXJdXG4vLyEgYXV0aG9yIDogSGFyc2hhZCBLYWxlIDogaHR0cHM6Ly9naXRodWIuY29tL2thbGVodlxuLy8hIGF1dGhvciA6IFZpdmVrIEF0aGFseWUgOiBodHRwczovL2dpdGh1Yi5jb20vdm5hdGhhbHllXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+ClpycsXG4gICAgICAgICAgICAyOiAn4KWoJyxcbiAgICAgICAgICAgIDM6ICfgpaknLFxuICAgICAgICAgICAgNDogJ+ClqicsXG4gICAgICAgICAgICA1OiAn4KWrJyxcbiAgICAgICAgICAgIDY6ICfgpawnLFxuICAgICAgICAgICAgNzogJ+ClrScsXG4gICAgICAgICAgICA4OiAn4KWuJyxcbiAgICAgICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAgICAgMDogJ+ClpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICAgICAn4KWoJzogJzInLFxuICAgICAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICAgICAn4KWrJzogJzUnLFxuICAgICAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICAgICAn4KWuJzogJzgnLFxuICAgICAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgICAgICfgpaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVNcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9ICcnO1xuICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpL/gpKjgpL/gpJ8nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLgnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpK7gpLngpL/gpKjgpL4nO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CklSDgpLXgpLDgpY3gpLcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpYcnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpJXgpL7gpLngpYAg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS44KWH4KSV4KSC4KSm4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS/4KSo4KS/4KSf4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS/4KSo4KS/4KSf4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSk4KS+4KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSk4KS+4KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSm4KS/4KS14KS44KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSm4KS/4KS14KS44KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KSu4KS54KS/4KSo4KWN4KSv4KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KSu4KS54KS/4KSo4KWN4KSv4KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dCA9ICfgpI/gpJXgpL4g4KS14KSw4KWN4KS34KS+JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSAnJWQg4KS14KSw4KWN4KS34KS+4KSCJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBtciA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ21yJywge1xuICAgICAgICBtb250aHM6ICfgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpL/gpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpYhf4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4KSc4KS+4KSo4KWHLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkmi5f4KSP4KSq4KWN4KSw4KS/Ll/gpK7gpYcuX+CknOClguCkqC5f4KSc4KWB4KSy4KWILl/gpJHgpJcuX+CkuOCkquCljeCkn+Clh+Ckgi5f4KSR4KSV4KWN4KSf4KWLLl/gpKjgpYvgpLXgpY3gpLngpYfgpIIuX+CkoeCkv+CkuOClh+Ckgi4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+Cks+CkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cks1/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdBIGg6bW0g4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcyDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkteCkvuCknOCkpOCkvicsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4KSJ4KSm4KWN4KSv4KS+XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgpK7gpKfgpY3gpK/gpYcnLFxuICAgICAgICAgICAgcGFzdDogJyVz4KSq4KWC4KSw4KWN4KS14KWAJyxcbiAgICAgICAgICAgIHM6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZU1yLFxuICAgICAgICAgICAgTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgICAgICB5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CkquCkueCkvuCkn+Clh3zgpLjgpJXgpL7gpLPgpYB84KSm4KWB4KSq4KS+4KSw4KWAfOCkuOCkvuCkr+CkguCkleCkvuCks+ClgHzgpLDgpL7gpKTgpY3gpLDgpYAvLFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpKrgpLngpL7gpJ/gpYcnIHx8IG1lcmlkaWVtID09PSAn4KS44KSV4KS+4KSz4KWAJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkpuClgeCkquCkvuCksOClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCcgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOCljeCksOClgCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkquCkueCkvuCkn+Clhyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KS44KSV4KS+4KSz4KWAJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpYHgpKrgpL7gpLDgpYAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KWN4KSw4KWAJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1yO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5IFttcy1teV1cbi8vISBub3RlIDogREVQUkVDQVRFRCwgdGhlIGNvcnJlY3Qgb25lIGlzIFttc11cbi8vISBhdXRob3IgOiBXZWxkYW4gSmFtaWxpIDogaHR0cHM6Ly9naXRodWIuY29tL3dlbGRhblxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1zTXkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcy1teScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zTXk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFsYXkgW21zXVxuLy8hIGF1dGhvciA6IFdlbGRhbiBKYW1pbGkgOiBodHRwczovL2dpdGh1Yi5jb20vd2VsZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbXMgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0FoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBaF9Jc19TbF9SYl9LbV9KbV9TYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAndGVuZ2FoYXJpJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdwZXRhbmcnIHx8IG1lcmlkaWVtID09PSAnbWFsYW0nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3BhZ2knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdwZXRhbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21hbGFtJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tLZWxtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgeWFuZyBsZXBhcycsXG4gICAgICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgICAgICBzczogJyVkIHNhYXQnLFxuICAgICAgICAgICAgbTogJ3NlbWluaXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgICAgICBoOiAnc2VqYW0nLFxuICAgICAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgICAgICBkZDogJyVkIGhhcmknLFxuICAgICAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgICAgICB5OiAnc2V0YWh1bicsXG4gICAgICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1zO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbHRlc2UgKE1hbHRhKSBbbXRdXG4vLyEgYXV0aG9yIDogQWxlc3NhbmRybyBNYXJ1Y2NpYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzbWFcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtdCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ210Jywge1xuICAgICAgICBtb250aHM6ICdKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV/EoHVuanVfTHVsanVfQXd3aXNzdV9TZXR0ZW1icnVfT3R0dWJydV9Ob3ZlbWJydV9EacSLZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZyYV9NYXJfQXByX01lal/EoHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGnEiycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnSWwtxKZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ8SnYV9JbC3EpmFtaXNfSWwtxKBpbWfEp2FfSXMtU2lidCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ8SmYV9Ubl9UbF9Fcl/EpmFfxKBpX1NpJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lsbHVtIGZpbC1dTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tHxKdhZGEgZmlsLV1MVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJbC1iaWVyYcSnIGZpbC1dTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2bigJkgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGlsdScsXG4gICAgICAgICAgICBzOiAnZnRpdCBzZWtvbmRpJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vrb25kaScsXG4gICAgICAgICAgICBtOiAnbWludXRhJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgICAgIGg6ICdzaWVnxKdhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgc2llZ8SnYXQnLFxuICAgICAgICAgICAgZDogJ8ShdXJuYXRhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgxKFyYW5ldCcsXG4gICAgICAgICAgICBNOiAneGFoYXInLFxuICAgICAgICAgICAgTU06ICclZCB4aHVyJyxcbiAgICAgICAgICAgIHk6ICdzZW5hJyxcbiAgICAgICAgICAgIHl5OiAnJWQgc25pJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgICAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBtdDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCdXJtZXNlIFtteV1cbi8vISBhdXRob3IgOiBTcXVhciB0ZWFtLCBteXNxdWFyLmNvbVxuLy8hIGF1dGhvciA6IERhdmlkIFJvc3NlbGxhdCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9naG9sYWRyXG4vLyEgYXV0aG9yIDogVGluIEF1bmcgTGluIDogaHR0cHM6Ly9naXRodWIuY29tL3RoYW55YXd6aW5taW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgICAgICAxOiAn4YGBJyxcbiAgICAgICAgICAgIDI6ICfhgYInLFxuICAgICAgICAgICAgMzogJ+GBgycsXG4gICAgICAgICAgICA0OiAn4YGEJyxcbiAgICAgICAgICAgIDU6ICfhgYUnLFxuICAgICAgICAgICAgNjogJ+GBhicsXG4gICAgICAgICAgICA3OiAn4YGHJyxcbiAgICAgICAgICAgIDg6ICfhgYgnLFxuICAgICAgICAgICAgOTogJ+GBiScsXG4gICAgICAgICAgICAwOiAn4YGAJyxcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAgICAgJ+GBgSc6ICcxJyxcbiAgICAgICAgICAgICfhgYInOiAnMicsXG4gICAgICAgICAgICAn4YGDJzogJzMnLFxuICAgICAgICAgICAgJ+GBhCc6ICc0JyxcbiAgICAgICAgICAgICfhgYUnOiAnNScsXG4gICAgICAgICAgICAn4YGGJzogJzYnLFxuICAgICAgICAgICAgJ+GBhyc6ICc3JyxcbiAgICAgICAgICAgICfhgYgnOiAnOCcsXG4gICAgICAgICAgICAn4YGJJzogJzknLFxuICAgICAgICAgICAgJ+GBgCc6ICcwJyxcbiAgICAgICAgfTtcblxuICAgIHZhciBteSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ215Jywge1xuICAgICAgICBtb250aHM6ICfhgIfhgJThgLrhgJThgJ3hgKvhgJvhgK5f4YCW4YCx4YCW4YCx4YCs4YC64YCd4YCr4YCb4YCuX+GAmeGAkOGAul/hgKfhgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgIfhgLDhgJzhgK3hgK/hgIThgLpf4YCe4YC84YCC4YCv4YCQ4YC6X+GAheGAgOGAuuGAkOGAhOGAuuGAmOGArF/hgKHhgLHhgKzhgIDhgLrhgJDhgK3hgK/hgJjhgKxf4YCU4YCt4YCv4YCd4YCE4YC64YCY4YCsX+GAkuGAruGAh+GAhOGAuuGAmOGArCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGAricuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICfhgJDhgJThgIThgLrhgLnhgILhgJThgL3hgLFf4YCQ4YCU4YCE4YC64YC54YCc4YCsX+GAoeGAhOGAuuGAueGAguGAq1/hgJfhgK/hgJLhgLnhgJPhgJ/hgLDhgLhf4YCA4YC84YCs4YCe4YCV4YCQ4YCx4YC4X+GAnuGAseGArOGAgOGAvOGArF/hgIXhgJThgLEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfhgJThgL3hgLFf4YCc4YCsX+GAguGAq1/hgJ/hgLDhgLhf4YCA4YC84YCsX+GAnuGAseGArF/hgJThgLEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vhgJrhgJThgLEuXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+GAmeGAlOGAgOGAuuGAluGAvOGAlOGAul0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4YCZ4YCU4YCxLuGAgF0gTFQgW+GAmeGAvuGArF0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdb4YCV4YC84YCu4YC44YCB4YCy4YC34YCe4YCx4YCsXSBkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgICAgICBwYXN0OiAn4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCcsXG4gICAgICAgICAgICBzOiAn4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuicsXG4gICAgICAgICAgICBzczogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgICAgICBtOiAn4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIG1tOiAnJWQg4YCZ4YCt4YCU4YCF4YC6JyxcbiAgICAgICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgaGg6ICclZCDhgJThgKzhgJvhgK4nLFxuICAgICAgICAgICAgZDogJ+GAkOGAheGAuuGAm+GAgOGAuicsXG4gICAgICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgICAgICBNOiAn4YCQ4YCF4YC64YCcJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4YCcJyxcbiAgICAgICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICAgICAgeXk6ICclZCDhgJThgL7hgIXhgLonLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbXk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTm9yd2VnaWFuIEJva23DpWwgW25iXVxuLy8hIGF1dGhvcnMgOiBFc3BlbiBIb3ZsYW5kc2RhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXh4YXJzXG4vLyEgICAgICAgICAgIFNpZ3VyZCBHYXJ0bWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaWd1cmRnYVxuLy8hICAgICAgICAgICBTdGVwaGVuIFJhbXRodW4gOiBodHRwczovL2dpdGh1Yi5jb20vc3RlcGhlbnJhbXRodW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBuYiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25iJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3PDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7guX21hLl90aS5fb24uX3RvLl9mci5fbMO4Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tpIGRhZyBrbC5dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsLl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tmb3JyaWdlXSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpZGVuJyxcbiAgICAgICAgICAgIHM6ICdub2VuIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2V0dCBtaW51dHQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dHRlcicsXG4gICAgICAgICAgICBoOiAnw6luIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgICAgICBkOiAnw6luIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VyJyxcbiAgICAgICAgICAgIHc6ICfDqW4gdWtlJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdWtlcicsXG4gICAgICAgICAgICBNOiAnw6luIG3DpW5lZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5lZGVyJyxcbiAgICAgICAgICAgIHk6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBuYjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOZXBhbGVzZSBbbmVdXG4vLyEgYXV0aG9yIDogc3V2YXNoIDogaHR0cHM6Ly9naXRodWIuY29tL3N1dmFzaFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgICAgIDE6ICfgpacnLFxuICAgICAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgICAgIDQ6ICfgpaonLFxuICAgICAgICAgICAgNTogJ+ClqycsXG4gICAgICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgICAgIDc6ICfgpa0nLFxuICAgICAgICAgICAgODogJ+ClricsXG4gICAgICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgICAgIDA6ICfgpaYnLFxuICAgICAgICB9LFxuICAgICAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICAgICAn4KWnJzogJzEnLFxuICAgICAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICAgICAn4KWqJzogJzQnLFxuICAgICAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICAgICAn4KWtJzogJzcnLFxuICAgICAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICAgICAn4KWmJzogJzAnLFxuICAgICAgICB9O1xuXG4gICAgdmFyIG5lID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CknOCkqOCkteCksOClgF/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkv+Cksl/gpK7gpIhf4KSc4KWB4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLfgpY3gpJ9f4KS44KWH4KSq4KWN4KSf4KWH4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+Cli+CkrOCksF/gpKjgpYvgpK3gpYfgpK7gpY3gpKzgpLBf4KSh4KS/4KS44KWH4KSu4KWN4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgpJzgpKguX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCkvy5f4KSu4KSIX+CknOClgeCkqF/gpJzgpYHgpLLgpL7gpIguX+CkheCkly5f4KS44KWH4KSq4KWN4KSfLl/gpIXgpJXgpY3gpJ/gpYsuX+CkqOCli+CkreClhy5f4KSh4KS/4KS44KWHLicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ+CkhuCkh+CkpOCkrOCkvuCksF/gpLjgpYvgpK7gpKzgpL7gpLBf4KSu4KSZ4KWN4KSX4KSy4KSs4KS+4KSwX+CkrOClgeCkp+CkrOCkvuCksF/gpKzgpL/gpLngpL/gpKzgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KSs4KS+4KSwX+CktuCkqOCkv+CkrOCkvuCksCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CkhuCkh+CkpC5f4KS44KWL4KSuLl/gpK7gpJngpY3gpJfgpLIuX+CkrOClgeCkpy5f4KSs4KS/4KS54KS/Ll/gpLbgpYHgpJXgpY3gpLAuX+CktuCkqOCkvy4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2Licuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgICAgIExUUzogJ0HgpJXgpYsgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhycsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcnLFxuICAgICAgICB9LFxuICAgICAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KS/fOCkrOCkv+CkueCkvuCkqHzgpKbgpL/gpIngpIHgpLjgpYt84KS44KS+4KSB4KSdLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KS/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSs4KS/4KS54KS+4KSoJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCkv+CkieCkgeCkuOCliycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KS+4KSB4KSdJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOCkvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSs4KS/4KS54KS+4KSoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgpKbgpL/gpIngpIHgpLjgpYsnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkgeCknSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4KSG4KScXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+CkreCli+CksuCkv10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb4KSG4KSJ4KSB4KSm4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4KS54KS/4KSc4KWLXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgpJfgpI/gpJXgpYtdIGRkZGRbLF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclc+CkruCkvicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg4KSF4KSX4KS+4KSh4KS/JyxcbiAgICAgICAgICAgIHM6ICfgpJXgpYfgpLngpYAg4KSV4KWN4KS34KSjJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4KS44KWH4KSV4KWH4KSj4KWN4KShJyxcbiAgICAgICAgICAgIG06ICfgpI/gpJUg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4KSu4KS/4KSo4KWH4KSfJyxcbiAgICAgICAgICAgIGg6ICfgpI/gpJUg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGhoOiAnJWQg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgICAgIGQ6ICfgpI/gpJUg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIGRkOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgICAgIE06ICfgpI/gpJUg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIE1NOiAnJWQg4KSu4KS54KS/4KSo4KS+JyxcbiAgICAgICAgICAgIHk6ICfgpI/gpJUg4KSs4KSw4KWN4KS3JyxcbiAgICAgICAgICAgIHl5OiAnJWQg4KSs4KSw4KWN4KS3JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5lO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IER1dGNoIChCZWxnaXVtKSBbbmwtYmVdXG4vLyEgYXV0aG9yIDogSm9yaXMgUsO2bGluZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3Jpc3JvbGluZ1xuLy8hIGF1dGhvciA6IEphY29iIE1pZGRhZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWRkYWdqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9XG4gICAgICAgICAgICAnamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9XG4gICAgICAgICAgICAnamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15qYW4vaSxcbiAgICAgICAgICAgIC9eZmViL2ksXG4gICAgICAgICAgICAvXihtYWFydHxtcnRcXC4/KSQvaSxcbiAgICAgICAgICAgIC9eYXByL2ksXG4gICAgICAgICAgICAvXm1laSQvaSxcbiAgICAgICAgICAgIC9eanVuW2kuXT8kL2ksXG4gICAgICAgICAgICAvXmp1bFtpLl0/JC9pLFxuICAgICAgICAgICAgL15hdWcvaSxcbiAgICAgICAgICAgIC9ec2VwL2ksXG4gICAgICAgICAgICAvXm9rdC9pLFxuICAgICAgICAgICAgL15ub3YvaSxcbiAgICAgICAgICAgIC9eZGVjL2ksXG4gICAgICAgIF0sXG4gICAgICAgIG1vbnRoc1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuICAgIHZhciBubEJlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnbmwtYmUnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvLU1NTS0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzW20ubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgbW9udGhzUmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICAgICAgbW9udGhzU3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pLFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICd6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t2YW5kYWFnIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnaXN0ZXJlbiBvbV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvdmVyICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBnZWxlZGVuJyxcbiAgICAgICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgICAgICBzczogJyVkIHNlY29uZGVuJyxcbiAgICAgICAgICAgIG06ICfDqcOpbiBtaW51dXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgICAgIGg6ICfDqcOpbiB1dXInLFxuICAgICAgICAgICAgaGg6ICclZCB1dXInLFxuICAgICAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgICAgIE06ICfDqcOpbiBtYWFuZCcsXG4gICAgICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICAgICAgeTogJ8Opw6luIGphYXInLFxuICAgICAgICAgICAgeXk6ICclZCBqYWFyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgKG51bWJlciA9PT0gMSB8fCBudW1iZXIgPT09IDggfHwgbnVtYmVyID49IDIwID8gJ3N0ZScgOiAnZGUnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5sQmU7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggW25sXVxuLy8hIGF1dGhvciA6IEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vam9yaXNyb2xpbmdcbi8vISBhdXRob3IgOiBKYWNvYiBNaWRkYWcgOiBodHRwczovL2dpdGh1Yi5jb20vbWlkZGFnalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPVxuICAgICAgICAgICAgJ2phbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1Nob3J0V2l0aG91dERvdHMgPVxuICAgICAgICAgICAgJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgICAgIC9eamFuL2ksXG4gICAgICAgICAgICAvXmZlYi9pLFxuICAgICAgICAgICAgL14obWFhcnR8bXJ0XFwuPykkL2ksXG4gICAgICAgICAgICAvXmFwci9pLFxuICAgICAgICAgICAgL15tZWkkL2ksXG4gICAgICAgICAgICAvXmp1bltpLl0/JC9pLFxuICAgICAgICAgICAgL15qdWxbaS5dPyQvaSxcbiAgICAgICAgICAgIC9eYXVnL2ksXG4gICAgICAgICAgICAvXnNlcC9pLFxuICAgICAgICAgICAgL15va3QvaSxcbiAgICAgICAgICAgIC9ebm92L2ksXG4gICAgICAgICAgICAvXmRlYy9pLFxuICAgICAgICBdLFxuICAgICAgICBtb250aHNSZWdleCA9XG4gICAgICAgICAgICAvXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblxcLj98ZmViXFwuP3xtcnRcXC4/fGFwclxcLj98anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2k7XG5cbiAgICB2YXIgbmwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdubCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aG91dERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6IG1vbnRoc1JlZ2V4LFxuICAgICAgICBtb250aHNTdHJpY3RSZWdleDpcbiAgICAgICAgICAgIC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6XG4gICAgICAgICAgICAvXihqYW5cXC4/fGZlYlxcLj98bXJ0XFwuP3xhcHJcXC4/fG1laXxqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaSxcblxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3pvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICd6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnem9fbWFfZGlfd29fZG9fdnJfemEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3ZhbmRhYWcgb21dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIG9tXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dpc3RlcmVuIG9tXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1thZmdlbG9wZW5dIGRkZGQgW29tXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGdlbGVkZW4nLFxuICAgICAgICAgICAgczogJ2VlbiBwYWFyIHNlY29uZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICAgICAgbTogJ8Opw6luIG1pbnV1dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgICAgICBoaDogJyVkIHV1cicsXG4gICAgICAgICAgICBkOiAnw6nDqW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICAgICAgdzogJ8Opw6luIHdlZWsnLFxuICAgICAgICAgICAgd3c6ICclZCB3ZWtlbicsXG4gICAgICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICAgICAgTU06ICclZCBtYWFuZGVuJyxcbiAgICAgICAgICAgIHk6ICfDqcOpbiBqYWFyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdGV8ZGUpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBubDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOeW5vcnNrIFtubl1cbi8vISBhdXRob3JzIDogaHR0cHM6Ly9naXRodWIuY29tL21lY2h1d2luZFxuLy8hICAgICAgICAgICBTdGVwaGVuIFJhbXRodW4gOiBodHRwczovL2dpdGh1Yi5jb20vc3RlcGhlbnJhbXRodW5cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBubiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25uJywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ3N1bmRhZ19tw6VuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1Ll9tw6UuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X23DpV90eV9vbl90b19mcl9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJIGRhZyBrbG9ra2FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSSBtb3Jnb24ga2xva2thXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb2trYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJIGfDpXIga2xva2thXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tGw7hyZWfDpWFuZGVdIGRkZGQgW2tsb2trYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2lkYW4nLFxuICAgICAgICAgICAgczogJ25va3JlIHNla3VuZCcsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZCcsXG4gICAgICAgICAgICBtOiAnZWl0IG1pbnV0dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0dCcsXG4gICAgICAgICAgICBoOiAnZWluIHRpbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1hcicsXG4gICAgICAgICAgICBkOiAnZWluIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIHc6ICdlaSB2ZWtlJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdmVrZXInLFxuICAgICAgICAgICAgTTogJ2VpbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZWl0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogT2NjaXRhbiwgbGVuZ2Fkb2NpYW4gZGlhbGVjdGUgW29jLWxuY11cbi8vISBhdXRob3IgOiBRdWVudGluIFBBR8OIUyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9RdWVudHkzMVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG9jTG5jID0gbW9tZW50LmRlZmluZUxvY2FsZSgnb2MtbG5jJywge1xuICAgICAgICBtb250aHM6IHtcbiAgICAgICAgICAgIHN0YW5kYWxvbmU6XG4gICAgICAgICAgICAgICAgJ2dlbmnDqHJfZmVicmnDqHJfbWFyw6dfYWJyaWxfbWFpX2p1bmhfanVsaGV0X2Fnb3N0X3NldGVtYnJlX29jdMOyYnJlX25vdmVtYnJlX2RlY2VtYnJlJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZSBnZW5pw6hyX2RlIGZlYnJpw6hyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpX2RlIGp1bmhfZGUganVsaGV0X2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3TDsmJyZV9kZSBub3ZlbWJyZV9kZSBkZWNlbWJyZVwiLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGlzRm9ybWF0OiAvRFtvRF0/KFxccykrTU1NTS8sXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2dlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6ICdkaW1lbmdlX2RpbHVuc19kaW1hcnNfZGltw6hjcmVzX2RpasOydXNfZGl2ZW5kcmVzX2Rpc3NhYnRlJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RnX2RsX2RtX2RjX2RqX2R2X2RzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSwgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3XDqGkgYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tkZW1hbiBhXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbacOociBhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc3NhdCBhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgICAgICBwYXN0OiAnZmEgJXMnLFxuICAgICAgICAgICAgczogJ3VuYXMgc2Vnb25kYXMnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWdvbmRhcycsXG4gICAgICAgICAgICBtOiAndW5hIG1pbnV0YScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0YXMnLFxuICAgICAgICAgICAgaDogJ3VuYSBvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgICAgIGQ6ICd1biBqb3JuJyxcbiAgICAgICAgICAgIGRkOiAnJWQgam9ybnMnLFxuICAgICAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgICAgICB5eTogJyVkIGFucycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3InXG4gICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgPyAnbidcbiAgICAgICAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ8OoJztcbiAgICAgICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgICAgIG91dHB1dCA9ICdhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2NMbmM7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHVuamFiaSAoSW5kaWEpIFtwYS1pbl1cbi8vISBhdXRob3IgOiBIYXJwcmVldCBTaW5naCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJwcmVldGtoYWxzYWd0Yml0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CppycsXG4gICAgICAgICAgICAyOiAn4KmoJyxcbiAgICAgICAgICAgIDM6ICfgqaknLFxuICAgICAgICAgICAgNDogJ+CpqicsXG4gICAgICAgICAgICA1OiAn4KmrJyxcbiAgICAgICAgICAgIDY6ICfgqawnLFxuICAgICAgICAgICAgNzogJ+CprScsXG4gICAgICAgICAgICA4OiAn4KmuJyxcbiAgICAgICAgICAgIDk6ICfgqa8nLFxuICAgICAgICAgICAgMDogJ+CppicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgqacnOiAnMScsXG4gICAgICAgICAgICAn4KmoJzogJzInLFxuICAgICAgICAgICAgJ+CpqSc6ICczJyxcbiAgICAgICAgICAgICfgqaonOiAnNCcsXG4gICAgICAgICAgICAn4KmrJzogJzUnLFxuICAgICAgICAgICAgJ+CprCc6ICc2JyxcbiAgICAgICAgICAgICfgqa0nOiAnNycsXG4gICAgICAgICAgICAn4KmuJzogJzgnLFxuICAgICAgICAgICAgJ+Cpryc6ICc5JyxcbiAgICAgICAgICAgICfgqaYnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgcGFJbiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3BhLWluJywge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbW9udGhzIG5hbWUgYXMgcGVyIE5hbmFrc2hhaGkgQ2FsZW5kYXIgYnV0IHRoZXkgYXJlIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIFB1bmphYmkuXG4gICAgICAgIG1vbnRoczogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgqJzgqKjgqLXgqLDgqYBf4Kir4Ki84Kiw4Ki14Kiw4KmAX+CoruCovuCosOComl/gqIXgqKrgqY3gqLDgqYjgqLJf4Kiu4KiIX+ConOCpguCoqF/gqJzgqYHgqLLgqL7gqIhf4KiF4KiX4Ki44KikX+CouOCopOCpsOCorOCosF/gqIXgqJXgqKTgqYLgqKzgqLBf4Kio4Ki14Kmw4Kis4KiwX+CopuCouOCpsOCorOCosCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0EgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICAgICAgTFRTOiAnQSBoOm1tOnNzIOCoteConOCphycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0g4Ki14Kic4KmHJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphycsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+CoheConF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW+CoheCol+CosuCovl0gZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CoquCov+Com+CosuCph10gZGRkZCwgTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyDgqLXgqL/gqbHgqJonLFxuICAgICAgICAgICAgcGFzdDogJyVzIOCoquCov+Com+CosuCphycsXG4gICAgICAgICAgICBzOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBzczogJyVkIOCouOColeCov+CpsOConycsXG4gICAgICAgICAgICBtOiAn4KiH4KiVIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBtbTogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgICAgICBoOiAn4KiH4Kmx4KiVIOComOCpsOCon+CovicsXG4gICAgICAgICAgICBoaDogJyVkIOComOCpsOCon+CphycsXG4gICAgICAgICAgICBkOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgICAgICBkZDogJyVkIOCopuCov+CoqCcsXG4gICAgICAgICAgICBNOiAn4KiH4Kmx4KiVIOCoruCoueCpgOCoqOCovicsXG4gICAgICAgICAgICBNTTogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgICAgICB5OiAn4KiH4Kmx4KiVIOCouOCovuCosicsXG4gICAgICAgICAgICB5eTogJyVkIOCouOCovuCosicsXG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgqafgqajgqangqargqavgqazgqa3gqa7gqa/gqaZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFB1bmphYmkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgICAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+CosOCovuCopHzgqLjgqLXgqYfgqLB84Kim4KmB4Kiq4Ki54Ki/4KiwfOCouOCovOCovuCori8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CosOCovuCopCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCoteCph+CosCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqKbgqYHgqKrgqLngqL/gqLAnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCovOCovuCoricpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CouOCoteCph+CosCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Kim4KmB4Kiq4Ki54Ki/4KiwJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CosOCovuCopCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwYUluO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvbGlzaCBbcGxdXG4vLyEgYXV0aG9yIDogUmFmYWwgSGlyc3ogOiBodHRwczovL2dpdGh1Yi5jb20vZXZvTFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG1vbnRoc05vbWluYXRpdmUgPVxuICAgICAgICAgICAgJ3N0eWN6ZcWEX2x1dHlfbWFyemVjX2t3aWVjaWXFhF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWXFhF93cnplc2llxYRfcGHFumR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWXFhCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNTdWJqZWN0aXZlID1cbiAgICAgICAgICAgICdzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemXFm25pYV9wYcW6ZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAgICAgL15zdHkvaSxcbiAgICAgICAgICAgIC9ebHV0L2ksXG4gICAgICAgICAgICAvXm1hci9pLFxuICAgICAgICAgICAgL15rd2kvaSxcbiAgICAgICAgICAgIC9ebWFqL2ksXG4gICAgICAgICAgICAvXmN6ZS9pLFxuICAgICAgICAgICAgL15saXAvaSxcbiAgICAgICAgICAgIC9ec2llL2ksXG4gICAgICAgICAgICAvXndyei9pLFxuICAgICAgICAgICAgL15wYcW6L2ksXG4gICAgICAgICAgICAvXmxpcy9pLFxuICAgICAgICAgICAgL15ncnUvaSxcbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiBwbHVyYWwobikge1xuICAgICAgICByZXR1cm4gbiAlIDEwIDwgNSAmJiBuICUgMTAgPiAxICYmIH5+KG4gLyAxMCkgJSAxMCAhPT0gMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWt1bmQnKTtcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXTEmSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdnb2R6aW5hJyA6ICdnb2R6aW7EmSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdnb2R6aW55JyA6ICdnb2R6aW4nKTtcbiAgICAgICAgICAgIGNhc2UgJ3d3JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3R5Z29kbmllJyA6ICd0eWdvZG5pJyk7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaWVzacSFY2UnIDogJ21pZXNpxJljeScpO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbGF0YScgOiAnbGF0Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcGwgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwbCcsIHtcbiAgICAgICAgbW9udGhzOiBmdW5jdGlvbiAobW9tZW50VG9Gb3JtYXQsIGZvcm1hdCkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRUb0Zvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgvRCBNTU1NLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzU3ViamVjdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRoc05vbWluYXRpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnc3R5X2x1dF9tYXJfa3dpX21hal9jemVfbGlwX3NpZV93cnpfcGHFul9saXNfZ3J1Jy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgICAgIHNob3J0TW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICduaWVkemllbGFfcG9uaWVkemlhxYJla193dG9yZWtfxZtyb2RhX2N6d2FydGVrX3BpxIV0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnbmR6X3Bvbl93dF/Fm3JfY3p3X3B0X3NvYicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdOZF9Qbl9XdF/FmnJfQ3pfUHRfU28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbRHppxZsgb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tKdXRybyBvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIG5pZWR6aWVsxJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1dlIHd0b3JlayBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyDFm3JvZMSZIG9dIExUJztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHNvYm90xJkgb10gTFQnO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXXSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbV2N6b3JhaiBvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgsSFIG5pZWR6aWVsxJkgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgsSFIMWbcm9kxJkgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgsSFIHNvYm90xJkgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYJ5XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHRlbXUnLFxuICAgICAgICAgICAgczogJ2tpbGthIHNla3VuZCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnMSBkemllxYQnLFxuICAgICAgICAgICAgZGQ6ICclZCBkbmknLFxuICAgICAgICAgICAgdzogJ3R5ZHppZcWEJyxcbiAgICAgICAgICAgIHd3OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnbWllc2nEhWMnLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6ICdyb2snLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb3J0dWd1ZXNlIChCcmF6aWwpIFtwdC1icl1cbi8vISBhdXRob3IgOiBDYWlvIFJpYmVpcm8gUGVyZWlyYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jYWlvLXJpYmVpcm8tcGVyZWlyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHB0QnIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwdC1icicsIHtcbiAgICAgICAgbW9udGhzOiAnamFuZWlyb19mZXZlcmVpcm9fbWFyw6dvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ2RvbWluZ29fc2VndW5kYS1mZWlyYV90ZXLDp2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zw6FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fc2VnX3Rlcl9xdWFfcXVpX3NleF9zw6FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2RvXzLCql8zwqpfNMKqXzXCql82wqpfc8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9qZSDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQW1hbmjDoyDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW09udGVtIMOgc10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSA9PT0gMCB8fCB0aGlzLmRheSgpID09PSA2XG4gICAgICAgICAgICAgICAgICAgID8gJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgICAgICA6ICdbw5psdGltYV0gZGRkZCBbw6BzXSBMVCc7IC8vIE1vbmRheSAtIEZyaWRheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2jDoSAlcycsXG4gICAgICAgICAgICBzOiAncG91Y29zIHNlZ3VuZG9zJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICAgICAgbTogJ3VtIG1pbnV0bycsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICAgICAgaDogJ3VtYSBob3JhJyxcbiAgICAgICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICAgICAgZDogJ3VtIGRpYScsXG4gICAgICAgICAgICBkZDogJyVkIGRpYXMnLFxuICAgICAgICAgICAgTTogJ3VtIG3DqnMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW0gYW5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5vcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICBpbnZhbGlkRGF0ZTogJ0RhdGEgaW52w6FsaWRhJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBwdEJyO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBvcnR1Z3Vlc2UgW3B0XVxuLy8hIGF1dGhvciA6IEplZmZlcnNvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWxleDc5XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgcHQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdwdCcsIHtcbiAgICAgICAgbW9udGhzOiAnamFuZWlyb19mZXZlcmVpcm9fbWFyw6dvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ0RvbWluZ29fU2VndW5kYS1mZWlyYV9UZXLDp2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9Tw6FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9Tw6FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0RvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSG9qZSDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQW1hbmjDoyDDoHNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BzXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW09udGVtIMOgc10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSA9PT0gMCB8fCB0aGlzLmRheSgpID09PSA2XG4gICAgICAgICAgICAgICAgICAgID8gJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgICAgICA6ICdbw5psdGltYV0gZGRkZCBbw6BzXSBMVCc7IC8vIE1vbmRheSAtIEZyaWRheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZW0gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2jDoSAlcycsXG4gICAgICAgICAgICBzOiAnc2VndW5kb3MnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgICAgICBkOiAndW0gZGlhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgICAgICB3OiAndW1hIHNlbWFuYScsXG4gICAgICAgICAgICB3dzogJyVkIHNlbWFuYXMnLFxuICAgICAgICAgICAgTTogJ3VtIG3DqnMnLFxuICAgICAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgICAgICB5OiAndW0gYW5vJyxcbiAgICAgICAgICAgIHl5OiAnJWQgYW5vcycsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICAgICAgb3JkaW5hbDogJyVkwronLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHQ7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUm9tYW5pYW4gW3JvXVxuLy8hIGF1dGhvciA6IFZsYWQgR3VyZGlnYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXJkaWdhXG4vLyEgYXV0aG9yIDogVmFsZW50aW4gQWdhY2hpIDogaHR0cHM6Ly9naXRodWIuY29tL2F2YWx5XG4vLyEgYXV0aG9yIDogRW1hbnVlbCBDZXBvaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jZXBlbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgICAgIHNzOiAnc2VjdW5kZScsXG4gICAgICAgICAgICAgICAgbW06ICdtaW51dGUnLFxuICAgICAgICAgICAgICAgIGhoOiAnb3JlJyxcbiAgICAgICAgICAgICAgICBkZDogJ3ppbGUnLFxuICAgICAgICAgICAgICAgIHd3OiAnc8SDcHTEg23Dom5pJyxcbiAgICAgICAgICAgICAgICBNTTogJ2x1bmknLFxuICAgICAgICAgICAgICAgIHl5OiAnYW5pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXBhcmF0b3IgPSAnICc7XG4gICAgICAgIGlmIChudW1iZXIgJSAxMDAgPj0gMjAgfHwgKG51bWJlciA+PSAxMDAgJiYgbnVtYmVyICUgMTAwID09PSAwKSkge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gJyBkZSAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBzZXBhcmF0b3IgKyBmb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgcm8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdybycsIHtcbiAgICAgICAgbW9udGhzOiAnaWFudWFyaWVfZmVicnVhcmllX21hcnRpZV9hcHJpbGllX21haV9pdW5pZV9pdWxpZV9hdWd1c3Rfc2VwdGVtYnJpZV9vY3RvbWJyaWVfbm9pZW1icmllX2RlY2VtYnJpZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnaWFuLl9mZWIuX21hcnQuX2Fwci5fbWFpX2l1bi5faXVsLl9hdWcuX3NlcHQuX29jdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnZHVtaW5pY8SDX2x1bmlfbWFyyJtpX21pZXJjdXJpX2pvaV92aW5lcmlfc8OibWLEg3TEgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0R1bV9MdW5fTWFyX01pZV9Kb2lfVmluX1PDom0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRHVfTHVfTWFfTWlfSm9fVmlfU8OiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbYXppIGxhXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW23DomluZSBsYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtsYV0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tpZXJpIGxhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tmb3N0YV0gZGRkZCBbbGFdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAncGVzdGUgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMOubiB1cm3EgycsXG4gICAgICAgICAgICBzOiAnY8OidGV2YSBzZWN1bmRlJyxcbiAgICAgICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbTogJ3VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgaDogJ28gb3LEgycsXG4gICAgICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGQ6ICdvIHppJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgdzogJ28gc8SDcHTEg23Dom7EgycsXG4gICAgICAgICAgICB3dzogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIE06ICdvIGx1bsSDJyxcbiAgICAgICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcm87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUnVzc2lhbiBbcnVdXG4vLyEgYXV0aG9yIDogVmlrdG9ybWluYXRvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9WaWt0b3JtaW5hdG9yXG4vLyEgYXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiDQmtC+0YDQtdC90LHQtdGA0LMg0JzQsNGA0LogOiBodHRwczovL2dpdGh1Yi5jb20vc29ja2V0cGFpclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgICAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgICAgICAgIDogZm9ybXNbMl07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9C80LjQvdGD0YLQsF/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicgOiAn0LzQuNC90YPRgtGDX9C80LjQvdGD0YLRi1/QvNC40L3Rg9GCJyxcbiAgICAgICAgICAgIGhoOiAn0YfQsNGBX9GH0LDRgdCwX9GH0LDRgdC+0LInLFxuICAgICAgICAgICAgZGQ6ICfQtNC10L3RjF/QtNC90Y9f0LTQvdC10LknLFxuICAgICAgICAgICAgd3c6ICfQvdC10LTQtdC70Y9f0L3QtdC00LXQu9C4X9C90LXQtNC10LvRjCcsXG4gICAgICAgICAgICBNTTogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyJyxcbiAgICAgICAgICAgIHl5OiAn0LPQvtC0X9Cz0L7QtNCwX9C70LXRgicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LzQuNC90YPRgtCwJyA6ICfQvNC40L3Rg9GC0YMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAvXtGP0L3Qsi9pLFxuICAgICAgICAvXtGE0LXQsi9pLFxuICAgICAgICAvXtC80LDRgC9pLFxuICAgICAgICAvXtCw0L/RgC9pLFxuICAgICAgICAvXtC80LBb0LnRj10vaSxcbiAgICAgICAgL17QuNGO0L0vaSxcbiAgICAgICAgL17QuNGO0LsvaSxcbiAgICAgICAgL17QsNCy0LMvaSxcbiAgICAgICAgL17RgdC10L0vaSxcbiAgICAgICAgL17QvtC60YIvaSxcbiAgICAgICAgL17QvdC+0Y8vaSxcbiAgICAgICAgL17QtNC10LovaSxcbiAgICBdO1xuXG4gICAgLy8gaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvcnVsZXMvMTM5LXByb3AgOiDCpyAxMDNcbiAgICAvLyDQodC+0LrRgNCw0YnQtdC90LjRjyDQvNC10YHRj9GG0LXQsjogaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvYnVyby9zZWFyY2gtYW5zd2VyP3M9MjQyNjM3XG4gICAgLy8gQ0xEUiBkYXRhOiAgICAgICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvY2hhcnRzLzI4L3N1bW1hcnkvcnUuaHRtbCMxNzUzXG4gICAgdmFyIHJ1ID0gbW9tZW50LmRlZmluZUxvY2FsZSgncnUnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6IHtcbiAgICAgICAgICAgIC8vINC/0L4gQ0xEUiDQuNC80LXQvdC90L4gXCLQuNGO0LsuXCIg0LggXCLQuNGO0L0uXCIsINC90L4g0LrQsNC60L7QuSDRgdC80YvRgdC7INC80LXQvdGP0YLRjCDQsdGD0LrQstGDINC90LAg0YLQvtGH0LrRgz9cbiAgICAgICAgICAgIGZvcm1hdDogJ9GP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0Y/QvdCyLl/RhNC10LLRgC5f0LzQsNGA0YJf0LDQv9GALl/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6Licuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWtkYXlzOiB7XG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTQsF/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbQsF/RgdGD0LHQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICBmb3JtYXQ6ICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQktCyXSA/KD860L/RgNC+0YjQu9GD0Y580YHQu9C10LTRg9GO0YnRg9GOfNGN0YLRgyk/ID9dID9kZGRkLyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9Cy0YFf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgICAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4LCDQv9C+INGC0YDQuCDQsdGD0LrQstGLLCDQtNC70Y8g0L3QtdC60L7RgtC+0YDRi9GFLCDQv9C+IDQg0LHRg9C60LLRiywg0YHQvtC60YDQsNGJ0LXQvdC40Y8g0YEg0YLQvtGH0LrQvtC5INC4INCx0LXQtyDRgtC+0YfQutC4XG4gICAgICAgIG1vbnRoc1JlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAgICAgLy8g0LrQvtC/0LjRjyDQv9GA0LXQtNGL0LTRg9GJ0LXQs9C+XG4gICAgICAgIG1vbnRoc1Nob3J0UmVnZXg6XG4gICAgICAgICAgICAvXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxcblxuICAgICAgICAvLyDQv9C+0LvQvdGL0LUg0L3QsNC30LLQsNC90LjRjyDRgSDQv9Cw0LTQtdC20LDQvNC4XG4gICAgICAgIG1vbnRoc1N0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCy0LDRgFvRj9GMXXzRhNC10LLRgNCw0Ltb0Y/RjF180LzQsNGA0YLQsD980LDQv9GA0LXQu1vRj9GMXXzQvNCwW9GP0LldfNC40Y7QvVvRj9GMXXzQuNGO0Ltb0Y/RjF180LDQstCz0YPRgdGC0LA/fNGB0LXQvdGC0Y/QsdGAW9GP0YxdfNC+0LrRgtGP0LHRgFvRj9GMXXzQvdC+0Y/QsdGAW9GP0YxdfNC00LXQutCw0LHRgFvRj9GMXSkvaSxcblxuICAgICAgICAvLyDQktGL0YDQsNC20LXQvdC40LUsINC60L7RgtC+0YDQvtC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0L7Qu9GM0LrQviDRgdC+0LrRgNCw0YnRkdC90L3Ri9C8INGE0L7RgNC80LDQvFxuICAgICAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OlxuICAgICAgICAgICAgL14o0Y/QvdCyXFwufNGE0LXQstGAP1xcLnzQvNCw0YBb0YIuXXzQsNC/0YBcXC580LzQsFvRj9C5XXzQuNGO0L1b0YzRjy5dfNC40Y7Qu1vRjNGPLl180LDQstCzXFwufNGB0LXQvdGCP1xcLnzQvtC60YJcXC580L3QvtGP0LE/XFwufNC00LXQulxcLikvaSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVkg0LMuJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0KHQtdCz0L7QtNC90Y8sINCyXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9CX0LDQstGC0YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCwg0LJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0LXQtV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidGD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDQv9GA0L7RiNC70YvQuV0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0L/RgNC+0YjQu9GD0Y5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF5KCkgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JJdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0YfQtdGA0LXQtyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg0L3QsNC30LDQtCcsXG4gICAgICAgICAgICBzOiAn0L3QtdGB0LrQvtC70YzQutC+INGB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICAgICAgaGg6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBkOiAn0LTQtdC90YwnLFxuICAgICAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB3OiAn0L3QtdC00LXQu9GPJyxcbiAgICAgICAgICAgIHd3OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICB5OiAn0LPQvtC0JyxcbiAgICAgICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv0L3QvtGH0Lh80YPRgtGA0LB80LTQvdGPfNCy0LXRh9C10YDQsC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0LXRgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfQuCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YPRgtGA0LAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LLQtdGH0LXRgNCwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQuXzQs9C+fNGPKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdCz0L4nO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Rjyc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJ1O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmRoaSBbc2RdXG4vLyEgYXV0aG9yIDogTmFyYWluIFNhZ2FyIDogaHR0cHM6Ly9naXRodWIuY29tL25hcmFpbnNhZ2FyXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID0gW1xuICAgICAgICAgICAgJ9is2YbZiNix2YonLFxuICAgICAgICAgICAgJ9mB2YrYqNix2YjYsdmKJyxcbiAgICAgICAgICAgICfZhdin2LHahicsXG4gICAgICAgICAgICAn2KfZvtix2YrZhCcsXG4gICAgICAgICAgICAn2YXYptmKJyxcbiAgICAgICAgICAgICfYrNmI2YYnLFxuICAgICAgICAgICAgJ9is2YjZhNin2KHZkCcsXG4gICAgICAgICAgICAn2KLar9iz2b0nLFxuICAgICAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgICAgICfYotqq2b3ZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9qK2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYotqG2LEnLCAn2LPZiNmF2LEnLCAn2Kfasdin2LHZiCcsICfYp9ix2KjYuScsICfYrtmF2YrYsycsICfYrNmF2LknLCAn2ofZhtqH2LEnXTtcblxuICAgIHZhciBzZCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NkJywge1xuICAgICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICAgICAgd2Vla2RheXM6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkYXlzLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv2LXYqNitfNi02KfZhS8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9i12KjYrSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9in2oRdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2LPagNin2rvZil0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9qq2KfZhNmH2YddIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LLYsdmK2YQg2YfZgdiq2YpdIGRkZGQgW9iq2YpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2b7ZiNihJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDYp9qzJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPZitqq2YbaiicsXG4gICAgICAgICAgICBzczogJyVkINiz2YraqtmG2oonLFxuICAgICAgICAgICAgbTogJ9mH2qog2YXZhtm9JyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZhtm9JyxcbiAgICAgICAgICAgIGg6ICfZh9qqINqq2YTYp9qqJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2qrZhNin2qonLFxuICAgICAgICAgICAgZDogJ9mH2qog2o/ZitmG2YfZhicsXG4gICAgICAgICAgICBkZDogJyVkINqP2YrZhtmH2YYnLFxuICAgICAgICAgICAgTTogJ9mH2qog2YXZh9mK2YbZiCcsXG4gICAgICAgICAgICBNTTogJyVkINmF2YfZitmG2KcnLFxuICAgICAgICAgICAgeTogJ9mH2qog2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2Q7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTm9ydGhlcm4gU2FtaSBbc2VdXG4vLyEgYXV0aG9ycyA6IELDpXJkIFJvbHN0YWQgSGVucmlrc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL2thcmFtZWxsXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc2UgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZScsIHtcbiAgICAgICAgbW9udGhzOiAnb8SRxJFhamFnZW3DoW5udV9ndW92dmFtw6FubnVfbmp1a8SNYW3DoW5udV9jdW/Fi29tw6FubnVfbWllc3NlbcOhbm51X2dlYXNzZW3DoW5udV9zdW9pZG5lbcOhbm51X2JvcmdlbcOhbm51X8SNYWvEjWFtw6FubnVfZ29sZ2dvdG3DoW5udV9za8OhYm1hbcOhbm51X2p1b3ZsYW3DoW5udScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnb8SRxJFqX2d1b3Zfbmp1a19jdW9fbWllc19nZWFzX3N1b2lfYm9yZ1/EjWFrxI1fZ29sZ19za8OhYl9qdW92Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzb3RuYWJlYWl2aV92dW9zc8OhcmdhX21hxYvFi2Viw6FyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sw6F2dmFyZGF0Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzb3RuX3Z1b3NfbWHFi19nYXNrX2R1b3JfYmVhcl9sw6F2Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3Nfdl9tX2dfZF9iX0wnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnTU1NTSBELiBbYi5dIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbb3RuZSB0aV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tpaHR0aW4gdGldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdGldIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbaWt0ZSB0aV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbb3ZkZGl0XSBkZGRkIFt0aV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBnZWHFvmVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdtYcWLaXQgJXMnLFxuICAgICAgICAgICAgczogJ21vYWRkZSBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRkYXQnLFxuICAgICAgICAgICAgbTogJ29rdGEgbWludWh0YScsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnVodGF0JyxcbiAgICAgICAgICAgIGg6ICdva3RhIGRpaW1tdScsXG4gICAgICAgICAgICBoaDogJyVkIGRpaW1tdXQnLFxuICAgICAgICAgICAgZDogJ29rdGEgYmVhaXZpJyxcbiAgICAgICAgICAgIGRkOiAnJWQgYmVhaXZ2aXQnLFxuICAgICAgICAgICAgTTogJ29rdGEgbcOhbm51JyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOhbnV0JyxcbiAgICAgICAgICAgIHk6ICdva3RhIGphaGtpJyxcbiAgICAgICAgICAgIHl5OiAnJWQgamFnaXQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmhhbGVzZSBbc2ldXG4vLyEgYXV0aG9yIDogU2FtcGF0aCBTaXRpbmFtYWx1d2EgOiBodHRwczovL2dpdGh1Yi5jb20vc2FtcGF0aHNyaXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIC8qanNoaW50IC1XMTAwKi9cbiAgICB2YXIgc2kgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaScsIHtcbiAgICAgICAgbW9udGhzOiAn4Lai4Lax4LeA4LeP4La74LeSX+C2tOC3meC2tuC2u+C3gOC3j+C2u+C3kl/gtrjgt4/gtrvgt4rgtq3gt5Rf4LaF4La04LeK4oCN4La74Lea4La94LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3neC3g+C3iuC2reC3lF/gt4Pgt5DgtrTgt4rgtq3gt5Dgtrjgt4rgtrbgtrvgt4pf4LaU4Laa4LeK4Lat4Led4La24La74LeKX+C2seC3nOC3gOC3kOC2uOC3iuC2tuC2u+C3il/gtq/gt5ngt4Pgt5Dgtrjgt4rgtrbgtrvgt4onLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAn4Lai4LaxX+C2tOC3meC2tl/gtrjgt4/gtrvgt4pf4LaF4La04LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3nV/gt4Pgt5DgtrTgt4pf4LaU4Laa4LeKX+C2seC3nOC3gOC3kF/gtq/gt5ngt4Pgt5AnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+C2ieC2u+C3kuC2r+C3j1/gt4PgtrPgt5Tgtq/gt49f4LaF4Laf4LeE4La74LeU4LeA4LeP4Lav4LePX+C2tuC2r+C3j+C2r+C3j1/gtrbgt4rigI3gtrvgt4Tgt4Pgt4rgtrTgtq3gt5LgtrHgt4rgtq/gt49f4LeD4LeS4Laa4LeU4La74LeP4Lav4LePX+C3g+C3meC2seC3g+C3lOC2u+C3j+C2r+C3jycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LaJ4La74LeSX+C3g+C2s+C3lF/gtoXgtp9f4La24Lav4LePX+C2tuC3iuKAjeC2u+C3hF/gt4Pgt5Lgtprgt5Rf4LeD4LeZ4LaxJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C2iV/gt4Nf4LaFX+C2tl/gtrbgt4rigI3gtrtf4LeD4LeSX+C3g+C3mScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdhIGg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnYSBoOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgICAgIExMOiAnWVlZWSBNTU1NIEQnLFxuICAgICAgICAgICAgTExMOiAnWVlZWSBNTU1NIEQsIGEgaDptbScsXG4gICAgICAgICAgICBMTExMOiAnWVlZWSBNTU1NIEQgW+C3gOC3kOC2seC3kl0gZGRkZCwgYSBoOm1tOnNzJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4LaF4LavXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LeE4LeZ4LanXSBMVFvgtqddJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LaK4La64LeaXSBMVFvgtqddJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+C2tOC3g+C3lOC2nOC3kuC2ul0gZGRkZCBMVFvgtqddJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXPgtprgt5LgtrHgt4onLFxuICAgICAgICAgICAgcGFzdDogJyVz4Laa4LanIOC2tOC3meC2uycsXG4gICAgICAgICAgICBzOiAn4Lat4Lat4LeK4La04La7IOC2muC3kuC3hOC3kuC2tOC2uicsXG4gICAgICAgICAgICBzczogJ+C2reC2reC3iuC2tOC2uyAlZCcsXG4gICAgICAgICAgICBtOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAJyxcbiAgICAgICAgICAgIG1tOiAn4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUICVkJyxcbiAgICAgICAgICAgIGg6ICfgtrTgt5DgtronLFxuICAgICAgICAgICAgaGg6ICfgtrTgt5DgtrogJWQnLFxuICAgICAgICAgICAgZDogJ+C2r+C3kuC2seC2uicsXG4gICAgICAgICAgICBkZDogJ+C2r+C3kuC2sSAlZCcsXG4gICAgICAgICAgICBNOiAn4La44LeP4LeD4La6JyxcbiAgICAgICAgICAgIE1NOiAn4La44LeP4LeDICVkJyxcbiAgICAgICAgICAgIHk6ICfgt4Dgt4PgtrsnLFxuICAgICAgICAgICAgeXk6ICfgt4Dgt4PgtrsgJWQnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g4LeA4LeQ4Lax4LeSLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcg4LeA4LeQ4Lax4LeSJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL+C2tOC3meC2uyDgt4Dgtrvgt5R84La04LeD4LeKIOC3gOC2u+C3lHzgtrTgt5ku4LeAfOC2tC7gt4AuLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfgtrQu4LeALicgfHwgaW5wdXQgPT09ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfgtrQu4LeALicgOiAn4La04LeD4LeKIOC3gOC2u+C3lCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tOC3mS7gt4AuJyA6ICfgtrTgt5ngtrsg4LeA4La74LeUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92YWsgW3NrXVxuLy8hIGF1dGhvciA6IE1hcnRpbiBNaW5rYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rMnNcbi8vISBiYXNlZCBvbiB3b3JrIG9mIHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbW9udGhzID1cbiAgICAgICAgICAgICdqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0ID0gJ2phbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpO1xuICAgIGZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgICAgIHJldHVybiBuID4gMSAmJiBuIDwgNTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdww6FyIHNla8O6bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzogLy8gOSBzZWNvbmRzIC8gaW4gOSBzZWNvbmRzIC8gOSBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2Vrw7puZCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtJzogLy8gYSBtaW51dGUgLyBpbiBhIG1pbnV0ZSAvIGEgbWludXRlIGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbsO6dGEnIDogaXNGdXR1cmUgPyAnbWluw7p0dScgOiAnbWluw7p0b3UnO1xuICAgICAgICAgICAgY2FzZSAnbW0nOiAvLyA5IG1pbnV0ZXMgLyBpbiA5IG1pbnV0ZXMgLyA5IG1pbnV0ZXMgYWdvXG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW7DunR5JyA6ICdtaW7DunQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ21pbsO6dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaCc6IC8vIGFuIGhvdXIgLyBpbiBhbiBob3VyIC8gYW4gaG91ciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdob2RpbmEnIDogaXNGdXR1cmUgPyAnaG9kaW51JyA6ICdob2Rpbm91JztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnaG9kaW55JyA6ICdob2TDrW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2hvZGluYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RlxYgnIDogJ2TFiG9tJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzogLy8gOSBkYXlzIC8gaW4gOSBkYXlzIC8gOSBkYXlzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnZG5pJyA6ICdkbsOtJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkxYhhbWknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ00nOiAvLyBhIG1vbnRoIC8gaW4gYSBtb250aCAvIGEgbW9udGggYWdvXG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzaWFjJyA6ICdtZXNpYWNvbSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6IC8vIDkgbW9udGhzIC8gaW4gOSBtb250aHMgLyA5IG1vbnRocyBhZ29cbiAgICAgICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21lc2lhY2UnIDogJ21lc2lhY292Jyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtZXNpYWNtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdyb2snIDogJ3Jva29tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAncm9reScgOiAncm9rb3YnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ3Jva21pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2sgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaycsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICAgICAgd2Vla2RheXM6ICduZWRlxL5hX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfxaF0dnJ0b2tfcGlhdG9rX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zdF/FoXRfcGlfc28nLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RuZXMgb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t6YWp0cmEgb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdm8gxaF0dnJ0b2sgb10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IHBpYXRvayBvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDuiBuZWRlxL51IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlZCAlcycsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc2s7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2xvdmVuaWFuIFtzbF1cbi8vISBhdXRob3IgOiBSb2JlcnQgU2Vkb3bFoWVrIDogaHR0cHM6Ly9naXRodWIuY29tL3NlZG92c2VrXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICAgICAgPyAnbmVrYWogc2VrdW5kJ1xuICAgICAgICAgICAgICAgICAgICA6ICduZWthaiBzZWt1bmRhbWknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnc2VrdW5kbycgOiAnc2VrdW5kaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kaScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdzZWt1bmRlJyA6ICdzZWt1bmRhaCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnZW5hIG1pbnV0YScgOiAnZW5vIG1pbnV0byc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdtaW51dGEnIDogJ21pbnV0byc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWludXRpJyA6ICdtaW51dGFtYSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0ZScgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0JyA6ICdtaW51dGFtaSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgdXJhJyA6ICdlbm8gdXJvJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3VyYScgOiAndXJvJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmknIDogJ3VyYW1hJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJlJyA6ICd1cmFtaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXInIDogJ3VyYW1pJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIGRhbicgOiAnZW5pbSBkbmVtJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2RhbicgOiAnZG5lbSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2b21hJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkbmknIDogJ2RuZXZpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIG1lc2VjJyA6ICdlbmltIG1lc2VjZW0nO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWMnIDogJ21lc2VjZW0nO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjYScgOiAnbWVzZWNlbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2UnIDogJ21lc2VjaSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNldicgOiAnbWVzZWNpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VubyBsZXRvJyA6ICdlbmltIGxldG9tJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldG8nIDogJ2xldG9tJztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRpJyA6ICdsZXRvbWEnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRhJyA6ICdsZXRpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXQnIDogJ2xldGknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc2wnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcmVjX2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX8SNZXRydGVrX3BldGVrX3NvYm90YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl90b3IuX3NyZS5fxI1ldC5fcGV0Ll9zb2IuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3RvX3NyX8SNZV9wZV9zbycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELiBNTS4gWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tkYW5lcyBvYl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tqdXRyaSBvYl0gTFQnLFxuXG4gICAgICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBbbmVkZWxqb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW3bEjWVyYWogb2JdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcmVqxaFuam9dIFtzcmVkb10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW3NvYm90b10gW29iXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfEjWV6ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdwcmVkICVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzbDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBbGJhbmlhbiBbc3FdXG4vLyEgYXV0aG9yIDogRmxha8OrcmltIElzbWFuaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGFrZXJpbWlcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE9lcmQgQ3VrYWxsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9vZXJkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3EgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTsOrbnRvcl9EaGpldG9yJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9HdXNfU2h0X1RldF9Ow6tuX0Roaicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdFIERpZWxfRSBIw6tuw6tfRSBNYXJ0w6tfRSBNw6tya3Vyw6tfRSBFbmp0ZV9FIFByZW10ZV9FIFNodHVuw6snLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEaWVfSMOrbl9NYXJfTcOrcl9FbmpfUHJlX1NodCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdEX0hfTWFfTcOrX0VfUF9TaCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvUER8TUQvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkgPT09ICdNJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXJzIDwgMTIgPyAnUEQnIDogJ01EJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tTb3QgbsOrXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW05lc8OrciBuw6tdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbbsOrXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0RqZSBuw6tdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZSBrYWx1YXIgbsOrXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ27DqyAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgbcOrIHBhcsOrJyxcbiAgICAgICAgICAgIHM6ICdkaXNhIHNla29uZGEnLFxuICAgICAgICAgICAgc3M6ICclZCBzZWtvbmRhJyxcbiAgICAgICAgICAgIG06ICduasOrIG1pbnV0w6snLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGEnLFxuICAgICAgICAgICAgaDogJ25qw6sgb3LDqycsXG4gICAgICAgICAgICBoaDogJyVkIG9yw6snLFxuICAgICAgICAgICAgZDogJ25qw6sgZGl0w6snLFxuICAgICAgICAgICAgZGQ6ICclZCBkaXTDqycsXG4gICAgICAgICAgICBNOiAnbmrDqyBtdWFqJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbXVhaicsXG4gICAgICAgICAgICB5OiAnbmrDqyB2aXQnLFxuICAgICAgICAgICAgeXk6ICclZCB2aXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzcTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIEN5cmlsbGljIFtzci1jeXJsXVxuLy8hIGF1dGhvciA6IE1pbGFuIEphbmHEjWtvdmnEhzxtaWxhbmphbmFja292aWNAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWxhbi1qXG4vLyEgYXV0aG9yIDogU3RlZmFuIENybmpha292acSHIDxzdGVmYW5AaG90bWFpbC5ycz4gOiBodHRwczovL2dpdGh1Yi5jb20vY3JuamFrb3ZpY1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgICAgIHdvcmRzOiB7XG4gICAgICAgICAgICAvL0RpZmZlcmVudCBncmFtbWF0aWNhbCBjYXNlc1xuICAgICAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgICAgIG06IFsn0ZjQtdC00LDQvSDQvNC40L3Rg9GCJywgJ9GY0LXQtNC90L7QsyDQvNC40L3Rg9GC0LAnXSxcbiAgICAgICAgICAgIG1tOiBbJ9C80LjQvdGD0YInLCAn0LzQuNC90YPRgtCwJywgJ9C80LjQvdGD0YLQsCddLFxuICAgICAgICAgICAgaDogWyfRmNC10LTQsNC9INGB0LDRgicsICfRmNC10LTQvdC+0LMg0YHQsNGC0LAnXSxcbiAgICAgICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICAgICAgZDogWyfRmNC10LTQsNC9INC00LDQvScsICfRmNC10LTQvdC+0LMg0LTQsNC90LAnXSxcbiAgICAgICAgICAgIGRkOiBbJ9C00LDQvScsICfQtNCw0L3QsCcsICfQtNCw0L3QsCddLFxuICAgICAgICAgICAgTTogWyfRmNC10LTQsNC9INC80LXRgdC10YYnLCAn0ZjQtdC00L3QvtCzINC80LXRgdC10YbQsCddLFxuICAgICAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgICAgICB5OiBbJ9GY0LXQtNC90YMg0LPQvtC00LjQvdGDJywgJ9GY0LXQtNC90LUg0LPQvtC00LjQvdC1J10sXG4gICAgICAgICAgICB5eTogWyfQs9C+0LTQuNC90YMnLCAn0LPQvtC00LjQvdC1JywgJ9Cz0L7QtNC40L3QsCddLFxuICAgICAgICB9LFxuICAgICAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPj0gMSAmJlxuICAgICAgICAgICAgICAgIG51bWJlciAlIDEwIDw9IDQgJiZcbiAgICAgICAgICAgICAgICAobnVtYmVyICUgMTAwIDwgMTAgfHwgbnVtYmVyICUgMTAwID49IDIwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAlIDEwID09PSAxID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gd29yZEtleVsyXTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XSxcbiAgICAgICAgICAgICAgICB3b3JkO1xuXG4gICAgICAgICAgICBpZiAoa2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIC8vIE5vbWluYXRpdlxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd5JyAmJiB3aXRob3V0U3VmZml4KSByZXR1cm4gJ9GY0LXQtNC90LAg0LPQvtC00LjQvdCwJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAn0LPQvtC00LjQvdGDJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINCz0L7QtNC40L3QsCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3JDeXJsID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3ItY3lybCcsIHtcbiAgICAgICAgbW9udGhzOiAn0ZjQsNC90YPQsNGAX9GE0LXQsdGA0YPQsNGAX9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCx0LDRgF/QvtC60YLQvtCx0LDRgF/QvdC+0LLQtdC80LHQsNGAX9C00LXRhtC10LzQsdCw0YAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ9C90LXQtNC10ZnQsF/Qv9C+0L3QtdC00LXRmdCw0Lpf0YPRgtC+0YDQsNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0LDQul/Qv9C10YLQsNC6X9GB0YPQsdC+0YLQsCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtC5f0L/QvtC9Ll/Rg9GC0L4uX9GB0YDQtS5f0YfQtdGCLl/Qv9C10YIuX9GB0YPQsS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9C00LDQvdCw0YEg0YNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvQvdC10LTQtdGZ0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9GDXSBkZGRkIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW9GY0YPRh9C1INGDXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0L3QtdC00LXRmdC1XSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YDQtdC00LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvRgdGD0LHQvtGC0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ9C30LAgJXMnLFxuICAgICAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgICAgICBzOiAn0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNyQ3lybDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTZXJiaWFuIFtzcl1cbi8vISBhdXRob3IgOiBNaWxhbiBKYW5hxI1rb3ZpxIc8bWlsYW5qYW5hY2tvdmljQGdtYWlsLmNvbT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlsYW4talxuLy8hIGF1dGhvciA6IFN0ZWZhbiBDcm5qYWtvdmnEhyA8c3RlZmFuQGhvdG1haWwucnM+IDogaHR0cHM6Ly9naXRodWIuY29tL2Nybmpha292aWNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0cmFuc2xhdG9yID0ge1xuICAgICAgICB3b3Jkczoge1xuICAgICAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgICAgIHNzOiBbJ3Nla3VuZGEnLCAnc2VrdW5kZScsICdzZWt1bmRpJ10sXG4gICAgICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgICAgIG1tOiBbJ21pbnV0JywgJ21pbnV0YScsICdtaW51dGEnXSxcbiAgICAgICAgICAgIGg6IFsnamVkYW4gc2F0JywgJ2plZG5vZyBzYXRhJ10sXG4gICAgICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgICAgICBkOiBbJ2plZGFuIGRhbicsICdqZWRub2cgZGFuYSddLFxuICAgICAgICAgICAgZGQ6IFsnZGFuJywgJ2RhbmEnLCAnZGFuYSddLFxuICAgICAgICAgICAgTTogWydqZWRhbiBtZXNlYycsICdqZWRub2cgbWVzZWNhJ10sXG4gICAgICAgICAgICBNTTogWydtZXNlYycsICdtZXNlY2EnLCAnbWVzZWNpJ10sXG4gICAgICAgICAgICB5OiBbJ2plZG51IGdvZGludScsICdqZWRuZSBnb2RpbmUnXSxcbiAgICAgICAgICAgIHl5OiBbJ2dvZGludScsICdnb2RpbmUnLCAnZ29kaW5hJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6IGZ1bmN0aW9uIChudW1iZXIsIHdvcmRLZXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBudW1iZXIgJSAxMCA+PSAxICYmXG4gICAgICAgICAgICAgICAgbnVtYmVyICUgMTAgPD0gNCAmJlxuICAgICAgICAgICAgICAgIChudW1iZXIgJSAxMDAgPCAxMCB8fCBudW1iZXIgJSAxMDAgPj0gMjApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgPyB3b3JkS2V5WzBdIDogd29yZEtleVsxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3b3JkS2V5WzJdO1xuICAgICAgICB9LFxuICAgICAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciB3b3JkS2V5ID0gdHJhbnNsYXRvci53b3Jkc1trZXldLFxuICAgICAgICAgICAgICAgIHdvcmQ7XG5cbiAgICAgICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gTm9taW5hdGl2XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3knICYmIHdpdGhvdXRTdWZmaXgpIHJldHVybiAnamVkbmEgZ29kaW5hJztcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB3b3JkID0gdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSk7XG4gICAgICAgICAgICAvLyBOb21pbmF0aXZcbiAgICAgICAgICAgIGlmIChrZXkgPT09ICd5eScgJiYgd2l0aG91dFN1ZmZpeCAmJiB3b3JkID09PSAnZ29kaW51Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGdvZGluYSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyB3b3JkO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICB2YXIgc3IgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpha191dG9yYWtfc3JlZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyZS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0QuIE0uIFlZWVkuJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2RhbmFzIHVdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3N1Ym90dV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2p1xI1lIHVdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbbmVkZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3NyZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgICAgICBwYXN0OiAncHJlICVzJyxcbiAgICAgICAgICAgIHM6ICduZWtvbGlrbyBzZWt1bmRpJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3I7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogc2lTd2F0aSBbc3NdXG4vLyEgYXV0aG9yIDogTmljb2xhaSBEYXZpZXM8bWFpbEBuaWNvbGFpLmlvPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFpZGF2aWVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3MgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzcycsIHtcbiAgICAgICAgbW9udGhzOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0JoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdMaXNfVW1iX0xzYl9MZXNfTHNpX0xzaF9VbWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnTGlfVXNfTGJfTHRfTHNfTGhfVWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbTmFtdWhsYSBuZ2FdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbS3VzYXNhIG5nYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSXRvbG8gbmdhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xlbGlwaGVsaWxlXSBbbmdhXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ25nYSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnd2VudGVrYSBuZ2EgJXMnLFxuICAgICAgICAgICAgczogJ2VtaXp1endhbmEgbG9tY2FuZScsXG4gICAgICAgICAgICBzczogJyVkIG16dXp3YW5hJyxcbiAgICAgICAgICAgIG06ICd1bXp1enUnLFxuICAgICAgICAgICAgbW06ICclZCBlbWl6dXp1JyxcbiAgICAgICAgICAgIGg6ICdsaWhvcmEnLFxuICAgICAgICAgICAgaGg6ICclZCBlbWFob3JhJyxcbiAgICAgICAgICAgIGQ6ICdsaWxhbmdhJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZW1hbGFuZ2EnLFxuICAgICAgICAgICAgTTogJ2lueWFuZ2EnLFxuICAgICAgICAgICAgTU06ICclZCB0aW55YW5nYScsXG4gICAgICAgICAgICB5OiAndW1ueWFrYScsXG4gICAgICAgICAgICB5eTogJyVkIGltaW55YWthJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VrdXNlbmknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdlbWluaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VudHNhbWJhbWEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2VidXN1a3UnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWVyaWRpZW0gPT09ICdla3VzZW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdlbnRzYW1iYW1hJyB8fCBtZXJpZGllbSA9PT0gJ2VidXN1a3UnKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgICAgIG9yZGluYWw6ICclZCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dhaGlsaSBbc3ddXG4vLyEgYXV0aG9yIDogRmFoYWQgS2Fzc2ltIDogaHR0cHM6Ly9naXRodWIuY29tL2ZhZHNlbFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN3ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3cnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdKMl9KM19KNF9KNV9BbF9Jal9KMScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoaDptbSBBJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbbGVvIHNhYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1trZXNobyBzYWFdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbamFuYV0gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgICAgICBwYXN0OiAndG9rZWEgJXMnLFxuICAgICAgICAgICAgczogJ2hpdmkgcHVuZGUnLFxuICAgICAgICAgICAgc3M6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgICAgIG06ICdkYWtpa2EgbW9qYScsXG4gICAgICAgICAgICBtbTogJ2Rha2lrYSAlZCcsXG4gICAgICAgICAgICBoOiAnc2FhIGxpbW9qYScsXG4gICAgICAgICAgICBoaDogJ21hc2FhICVkJyxcbiAgICAgICAgICAgIGQ6ICdzaWt1IG1vamEnLFxuICAgICAgICAgICAgZGQ6ICdzaWt1ICVkJyxcbiAgICAgICAgICAgIE06ICdtd2V6aSBtbW9qYScsXG4gICAgICAgICAgICBNTTogJ21pZXppICVkJyxcbiAgICAgICAgICAgIHk6ICdtd2FrYSBtbW9qYScsXG4gICAgICAgICAgICB5eTogJ21pYWthICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN3O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbWlsIFt0YV1cbi8vISBhdXRob3IgOiBBcmp1bmt1bWFyIEtyaXNobmFtb29ydGh5IDogaHR0cHM6Ly9naXRodWIuY29tL3RrMTIwNDA0XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAgICAgMTogJ+CvpycsXG4gICAgICAgICAgICAyOiAn4K+oJyxcbiAgICAgICAgICAgIDM6ICfgr6knLFxuICAgICAgICAgICAgNDogJ+CvqicsXG4gICAgICAgICAgICA1OiAn4K+rJyxcbiAgICAgICAgICAgIDY6ICfgr6wnLFxuICAgICAgICAgICAgNzogJ+CvrScsXG4gICAgICAgICAgICA4OiAn4K+uJyxcbiAgICAgICAgICAgIDk6ICfgr68nLFxuICAgICAgICAgICAgMDogJ+CvpicsXG4gICAgICAgIH0sXG4gICAgICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgICAgICfgr6cnOiAnMScsXG4gICAgICAgICAgICAn4K+oJzogJzInLFxuICAgICAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgICAgICfgr6onOiAnNCcsXG4gICAgICAgICAgICAn4K+rJzogJzUnLFxuICAgICAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgICAgICfgr60nOiAnNycsXG4gICAgICAgICAgICAn4K+uJzogJzgnLFxuICAgICAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgICAgICfgr6YnOiAnMCcsXG4gICAgICAgIH07XG5cbiAgICB2YXIgdGEgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICAgICAgbW9udGhzOiAn4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+CunOCuqeCuteCusOCuv1/grqrgrr/grqrgr43grrDgrrXgrrDgrr9f4K6u4K6+4K6w4K+N4K6a4K+NX+Cuj+CuquCvjeCusOCusuCvjV/grq7gr4df4K6c4K+C4K6p4K+NX+CunOCvguCusuCviF/grobgrpXgrrjgr43grp/gr41f4K6a4K+G4K6q4K+N4K6f4K+G4K6u4K+N4K6q4K6w4K+NX+CuheCuleCvjeCun+Cvh+CuvuCuquCusOCvjV/grqjgrrXgrq7gr43grqrgrrDgr41f4K6f4K6/4K6a4K6u4K+N4K6q4K6w4K+NJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4K6e4K6+4K6v4K6/4K6x4K+BX+CupOCuv+CumeCvjeCuleCus+CvjV/grprgr4bgrrXgr43grrXgrr7grq/gr41f4K6q4K+B4K6k4K6p4K+NX+CuteCuv+Cur+CuvuCutOCuqeCvjV/grrXgr4bgrrPgr43grrPgrr9f4K6a4K6p4K6/Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+CunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+Cumicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW+Cuh+CuqeCvjeCuseCvgV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vgrqjgr4fgrrHgr43grrHgr4FdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4K6H4K6y4K+NJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgrq7gr4Hgrqngr40nLFxuICAgICAgICAgICAgczogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIHNzOiAnJWQg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIG06ICfgrpLgrrDgr4Eg4K6o4K6/4K6u4K6/4K6f4K6u4K+NJyxcbiAgICAgICAgICAgIG1tOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgICAgIGg6ICfgrpLgrrDgr4Eg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjScsXG4gICAgICAgICAgICBoaDogJyVkIOCuruCuo+CuvyDgrqjgr4fgrrDgrq7gr40nLFxuICAgICAgICAgICAgZDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICAgICAgZGQ6ICclZCDgrqjgrr7grp/gr43grpXgrrPgr40nLFxuICAgICAgICAgICAgTTogJ+CukuCusOCvgSDgrq7grr7grqTgrq7gr40nLFxuICAgICAgICAgICAgTU06ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICAgICAgeTogJ+CukuCusOCvgSDgrrXgrrDgr4Hgrp/grq7gr40nLFxuICAgICAgICAgICAgeXk6ICclZCDgrobgrqPgr43grp/gr4HgrpXgrrPgr40nLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3grrXgrqTgr4EvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgICAgIH0sXG4gICAgICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4K6v4K6+4K6u4K6u4K+NfOCuteCviOCuleCuseCviHzgrpXgrr7grrLgr4h84K6o4K6j4K+N4K6q4K6V4K6y4K+NfOCujuCuseCvjeCuquCuvuCun+CvgXzgrq7grr7grrLgr4gvLFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAvLyDgrrXgr4jgrpXgrrHgr4hcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6V4K6+4K6y4K+IJzsgLy8g4K6V4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCuqOCuo+CvjeCuquCuleCusuCvjSc7IC8vIOCuqOCuo+CvjeCuquCuleCusuCvjVxuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyDgro7grrHgr43grqrgrr7grp/gr4EnOyAvLyDgro7grrHgr43grqrgrr7grp/gr4FcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcg4K6u4K6+4K6y4K+IJzsgLy8g4K6u4K6+4K6y4K+IXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnIOCur+CuvuCuruCuruCvjSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+Cur+CuvuCuruCuruCvjScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CuteCviOCuleCuseCviCcgfHwgbWVyaWRpZW0gPT09ICfgrpXgrr7grrLgr4gnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRlbHVndSBbdGVdXG4vLyEgYXV0aG9yIDogS3Jpc2huYSBDaGFpdGFueWEgVGhvdGEgOiBodHRwczovL2dpdGh1Yi5jb20va2N0aG90YVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgICAgIG1vbnRoczogJ+CwnOCwqOCwteCwsOCwv1/gsKvgsL/gsKzgsY3gsLDgsLXgsLDgsL9f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwv+CwsuCxjV/gsK7gsYdf4LCc4LGC4LCo4LGNX+CwnOCxgeCwsuCxiF/gsIbgsJfgsLjgsY3gsJ/gsYFf4LC44LGG4LCq4LGN4LCf4LGG4LCC4LCs4LCw4LGNX+CwheCwleCxjeCwn+Cxi+CwrOCwsOCxjV/gsKjgsLXgsILgsKzgsLDgsY1f4LCh4LC/4LC44LGG4LCC4LCs4LCw4LGNJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICfgsJzgsKguX+Cwq+Cwv+CwrOCxjeCwsC5f4LCu4LC+4LCw4LGN4LCa4LC/X+Cwj+CwquCxjeCwsOCwvy5f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCXLl/gsLjgsYbgsKrgsY0uX+CwheCwleCxjeCwn+Cxiy5f4LCo4LC1Ll/gsKHgsL/gsLjgsYYuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4LCG4LCm4LC/X+CwuOCxi+Cwrl/gsK7gsILgsJfgsLNf4LCs4LGB4LCnX+Cwl+CxgeCwsOCxgV/gsLbgsYHgsJXgsY3gsLBf4LC24LCo4LC/Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vgsKjgsYfgsKHgsYFdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb4LCw4LGH4LCq4LGBXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb4LCo4LC/4LCo4LGN4LCoXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vgsJfgsKRdIGRkZGQsIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDgsJXgsY3gsLDgsL/gsKTgsIInLFxuICAgICAgICAgICAgczogJ+CwleCxiuCwqOCxjeCwqOCwvyDgsJXgsY3gsLfgsKPgsL7gsLLgsYEnLFxuICAgICAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICAgICAgbTogJ+CwkuCwlSDgsKjgsL/gsK7gsL/gsLfgsIInLFxuICAgICAgICAgICAgbW06ICclZCDgsKjgsL/gsK7gsL/gsLfgsL7gsLLgsYEnLFxuICAgICAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICAgICAgaGg6ICclZCDgsJfgsILgsJ/gsLLgsYEnLFxuICAgICAgICAgICAgZDogJ+CwkuCwlSDgsLDgsYvgsJzgsYEnLFxuICAgICAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICAgICAgTTogJ+CwkuCwlSDgsKjgsYbgsLInLFxuICAgICAgICAgICAgTU06ICclZCDgsKjgsYbgsLLgsLLgsYEnLFxuICAgICAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICAgICAgeXk6ICclZCDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsL7gsLLgsYEnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgICAgICBvcmRpbmFsOiAnJWTgsLUnLFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LCw4LC+4LCk4LGN4LCw4LC/fOCwieCwpuCwr+CwgnzgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIJ84LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4LCw4LC+4LCk4LGN4LCw4LC/Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwsOCwvuCwpOCxjeCwsOCwvyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+CwuOCwvuCwr+CwguCwpOCxjeCwsOCwgic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRlO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRldHVuIERpbGkgKEVhc3QgVGltb3IpIFt0ZXRdXG4vLyEgYXV0aG9yIDogSm9zaHVhIEJyb29rcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NoYnJvb2tzXG4vLyEgYXV0aG9yIDogT25vcmlvIERlIEouIEFmb25zbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJvYm9cbi8vISBhdXRob3IgOiBTb25pYSBTaW1vZXMgOiBodHRwczovL2dpdGh1Yi5jb20vc29uaWFzaW1vZXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB0ZXQgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0ZXQnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbmVpcnVfRmV2ZXJlaXJ1X01hcnN1X0FicmlsX01haXVfSnXDsXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnSmFuX0Zldl9NYXJfQWJyX01haV9KdW5fSnVsX0Fnb19TZXRfT3V0X05vdl9EZXonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnRG9fU2VnX1RlX0t1X0tpX1Nlc19TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tBYmFuIGloYV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtpaGFdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3NlbWFuYSBrb3R1a10gW2loYV0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpaGEgJXMnLFxuICAgICAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgICAgIHM6ICdzZWd1bmR1IGJhbHVuJyxcbiAgICAgICAgICAgIHNzOiAnc2VndW5kdSAlZCcsXG4gICAgICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgICAgICBtbTogJ21pbnV0dSAlZCcsXG4gICAgICAgICAgICBoOiAnb3JhcyBpZGEnLFxuICAgICAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgICAgIGQ6ICdsb3JvbiBpZGEnLFxuICAgICAgICAgICAgZGQ6ICdsb3JvbiAlZCcsXG4gICAgICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgICAgIE1NOiAnZnVsYW4gJWQnLFxuICAgICAgICAgICAgeTogJ3RpbmFuIGlkYScsXG4gICAgICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRldDtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWppayBbdGddXG4vLyEgYXV0aG9yIDogT3JpZiBOLiBKci4gOiBodHRwczovL2dpdGh1Yi5jb20vb3JpZi1qclxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAwOiAnLdGD0LwnLFxuICAgICAgICAxOiAnLdGD0LwnLFxuICAgICAgICAyOiAnLdGO0LwnLFxuICAgICAgICAzOiAnLdGO0LwnLFxuICAgICAgICA0OiAnLdGD0LwnLFxuICAgICAgICA1OiAnLdGD0LwnLFxuICAgICAgICA2OiAnLdGD0LwnLFxuICAgICAgICA3OiAnLdGD0LwnLFxuICAgICAgICA4OiAnLdGD0LwnLFxuICAgICAgICA5OiAnLdGD0LwnLFxuICAgICAgICAxMDogJy3Rg9C8JyxcbiAgICAgICAgMTI6ICct0YPQvCcsXG4gICAgICAgIDEzOiAnLdGD0LwnLFxuICAgICAgICAyMDogJy3Rg9C8JyxcbiAgICAgICAgMzA6ICct0Y7QvCcsXG4gICAgICAgIDQwOiAnLdGD0LwnLFxuICAgICAgICA1MDogJy3Rg9C8JyxcbiAgICAgICAgNjA6ICct0YPQvCcsXG4gICAgICAgIDcwOiAnLdGD0LwnLFxuICAgICAgICA4MDogJy3Rg9C8JyxcbiAgICAgICAgOTA6ICct0YPQvCcsXG4gICAgICAgIDEwMDogJy3Rg9C8JyxcbiAgICB9O1xuXG4gICAgdmFyIHRnID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGcnLCB7XG4gICAgICAgIG1vbnRoczoge1xuICAgICAgICAgICAgZm9ybWF0OiAn0Y/QvdCy0LDRgNC4X9GE0LXQstGA0LDQu9C4X9C80LDRgNGC0Lhf0LDQv9GA0LXQu9C4X9C80LDQudC4X9C40Y7QvdC4X9C40Y7Qu9C4X9Cw0LLQs9GD0YHRgtC4X9GB0LXQvdGC0Y/QsdGA0Lhf0L7QutGC0Y/QsdGA0Lhf0L3QvtGP0LHRgNC4X9C00LXQutCw0LHRgNC4Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBzdGFuZGFsb25lOlxuICAgICAgICAgICAgICAgICfRj9C90LLQsNGAX9GE0LXQstGA0LDQu1/QvNCw0YDRgl/QsNC/0YDQtdC7X9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs9GD0YHRgl/RgdC10L3RgtGP0LHRgF/QvtC60YLRj9Cx0YBf0L3QvtGP0LHRgF/QtNC10LrQsNCx0YAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9GP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9GP0YjQsV/QtNGI0LFf0YHRiNCxX9GH0YjQsV/Qv9GI0LFf0rfRg9C8X9GI0L3QsScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW9CY0LzRgNOv0Lcg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vQpNCw0YDQtNC+INGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0L7Rj9C90LTQsCDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGRb0LhdIFvSs9Cw0YTRgtCw0Lgg0LPRg9C30LDRiNGC0LAg0YHQvtCw0YLQuF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDQv9C10YgnLFxuICAgICAgICAgICAgczogJ9GP0LrRh9Cw0L3QtCDRgdC+0L3QuNGPJyxcbiAgICAgICAgICAgIG06ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDSm9C40pvQsCcsXG4gICAgICAgICAgICBoOiAn0Y/QuiDRgdC+0LDRgicsXG4gICAgICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGQ6ICfRj9C6INGA06/QtycsXG4gICAgICAgICAgICBkZDogJyVkINGA06/QtycsXG4gICAgICAgICAgICBNOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICAgICAgTU06ICclZCDQvNC+0rMnLFxuICAgICAgICAgICAgeTogJ9GP0Log0YHQvtC7JyxcbiAgICAgICAgICAgIHl5OiAnJWQg0YHQvtC7JyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ9GI0LDQsScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GA06/QtycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn0LHQtdCz0L7SsycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRiNCw0LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfRgNOv0LcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9Cx0LXQs9C+0rMnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBhID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRnO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRoYWkgW3RoXVxuLy8hIGF1dGhvciA6IEtyaWRzYWRhIFRoYW5hYnVscG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zaXJuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGggPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aCcsIHtcbiAgICAgICAgbW9udGhzOiAn4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ+C4oS7guIQuX+C4gS7guJ4uX+C4oeC4tS7guIQuX+C5gOC4oS7guKIuX+C4ni7guIQuX+C4oeC4tC7guKIuX+C4gS7guIQuX+C4qi7guIQuX+C4gS7guKIuX+C4lS7guIQuX+C4ni7guKIuX+C4mC7guIQuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4quC4muC4lOC4tV/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLCAvLyB5ZXMsIHRocmVlIGNoYXJhY3RlcnMgZGlmZmVyZW5jZVxuICAgICAgICB3ZWVrZGF5c01pbjogJ+C4reC4si5f4LiILl/guK0uX+C4ni5f4Lie4LikLl/guKguX+C4qi4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSDptbScsXG4gICAgICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ+C4p+C4seC4mWRkZGTguJfguLXguYggRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAv4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8sXG4gICAgICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4hyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn4Lir4Lil4Lix4LiH4LmA4LiX4Li14LmI4Lii4LiHJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4Lin4Lix4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vguJ7guKPguLjguYjguIfguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGRb4Lir4LiZ4LmJ4LiyIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vguYDguKHguLfguYjguK3guKfguLLguJnguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vguKfguLHguJldZGRkZFvguJfguLXguYjguYHguKXguYnguKcg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ+C4reC4teC4gSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXPguJfguLXguYjguYHguKXguYnguKcnLFxuICAgICAgICAgICAgczogJ+C5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBzczogJyVkIOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgICAgICBtOiAnMSDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgbW06ICclZCDguJnguLLguJfguLUnLFxuICAgICAgICAgICAgaDogJzEg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHJyxcbiAgICAgICAgICAgIGQ6ICcxIOC4p+C4seC4mScsXG4gICAgICAgICAgICBkZDogJyVkIOC4p+C4seC4mScsXG4gICAgICAgICAgICB3OiAnMSDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgd3c6ICclZCDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICAgICAgTTogJzEg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4LmA4LiU4Li34Lit4LiZJyxcbiAgICAgICAgICAgIHk6ICcxIOC4m+C4tScsXG4gICAgICAgICAgICB5eTogJyVkIOC4m+C4tScsXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVHVya21lbiBbdGtdXG4vLyEgYXV0aG9yIDogQXRhbXlyYXQgQWJkeXJhaG1hbm92IDogaHR0cHM6Ly9naXRodWIuY29tL2F0YW15cmF0YWJkeVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmppXCIsXG4gICAgICAgIDU6IFwiJ2luamlcIixcbiAgICAgICAgODogXCInaW5qaVwiLFxuICAgICAgICA3MDogXCInaW5qaVwiLFxuICAgICAgICA4MDogXCInaW5qaVwiLFxuICAgICAgICAyOiBcIiduamlcIixcbiAgICAgICAgNzogXCInbmppXCIsXG4gICAgICAgIDIwOiBcIiduamlcIixcbiAgICAgICAgNTA6IFwiJ25qaVwiLFxuICAgICAgICAzOiBcIifDvG5qaVwiLFxuICAgICAgICA0OiBcIifDvG5qaVwiLFxuICAgICAgICAxMDA6IFwiJ8O8bmppXCIsXG4gICAgICAgIDY6IFwiJ25qeVwiLFxuICAgICAgICA5OiBcIid1bmp5XCIsXG4gICAgICAgIDEwOiBcIid1bmp5XCIsXG4gICAgICAgIDMwOiBcIid1bmp5XCIsXG4gICAgICAgIDYwOiBcIid5bmp5XCIsXG4gICAgICAgIDkwOiBcIid5bmp5XCIsXG4gICAgfTtcblxuICAgIHZhciB0ayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RrJywge1xuICAgICAgICBtb250aHM6ICfDnWFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hw71fScO9dW5fScO9dWxfQXdndXN0X1NlbnTDvWFicl9Pa3TDvWFicl9Ob8O9YWJyX0Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfDnWFuX0Zld19NYXJfQXByX01hw71fScO9bl9Jw71sX0F3Z19TZW5fT2t0X05vw71fRGVrJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ8OdZWvFn2VuYmVfRHXFn2VuYmVfU2nFn2VuYmVfw4dhcsWfZW5iZV9QZW7Fn2VuYmVfQW5uYV/FnmVuYmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfDnWVrX0R1xZ9fU2nFn1/Dh2FyX1Blbl9Bbm5fxZ5lbicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfDnWtfRMWfX1PFn1/Dh3JfUG5fQW5fxZ5uJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2J1Z8O8biBzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tlcnRpciBzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7zDvW5dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2dlw6dlbl0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc2/FiCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw7bFiCcsXG4gICAgICAgICAgICBzOiAnYmlybsOkw6dlIHNla3VudCcsXG4gICAgICAgICAgICBtOiAnYmlyIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXQnLFxuICAgICAgICAgICAgaDogJ2JpciBzYWdhdCcsXG4gICAgICAgICAgICBoaDogJyVkIHNhZ2F0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgTTogJ2JpciBhw70nLFxuICAgICAgICAgICAgTU06ICclZCBhw70nLFxuICAgICAgICAgICAgeTogJ2JpciDDvXlsJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw715bCcsXG4gICAgICAgIH0sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICBjYXNlICdEbyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIFwiJ3VuanlcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUYWdhbG9nIChQaGlsaXBwaW5lcykgW3RsLXBoXVxuLy8hIGF1dGhvciA6IERhbiBIYWdtYW4gOiBodHRwczovL2dpdGh1Yi5jb20vaGFnbWFuZGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdGxQaCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RsLXBoJywge1xuICAgICAgICBtb250aHM6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ01NL0QvWVlZWScsXG4gICAgICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ0xUIFtuZ2F5b25nIGFyYXddJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbQnVrYXMgbmddIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQnLFxuICAgICAgICAgICAgbGFzdERheTogJ0xUIFtrYWhhcG9uXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xUIFtub29uZyBuYWthcmFhbmddIGRkZGQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgICAgIHM6ICdpbGFuZyBzZWd1bmRvJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgICAgICBtOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRvJyxcbiAgICAgICAgICAgIGg6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgICAgICBkOiAnaXNhbmcgYXJhdycsXG4gICAgICAgICAgICBkZDogJyVkIGFyYXcnLFxuICAgICAgICAgICAgTTogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgICAgIE1NOiAnJWQgYnV3YW4nLFxuICAgICAgICAgICAgeTogJ2lzYW5nIHRhb24nLFxuICAgICAgICAgICAgeXk6ICclZCB0YW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRsUGg7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2xpbmdvbiBbdGxoXVxuLy8hIGF1dGhvciA6IERvbWluaWthIEtydWsgOiBodHRwczovL2dpdGh1Yi5jb20vYW1hcmFudGhyb3NlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc05vdW5zID0gJ3BhZ2hfd2HigJlfY2hh4oCZX3dlal9sb1NfdmFnaF9qYXZfU29jaF9jaG9yZ2hfSHV0Jy5zcGxpdCgnXycpO1xuXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlKG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdsZVMnXG4gICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dhUSdcbiAgICAgICAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ25lbSdcbiAgICAgICAgICAgICAgICAgICAgOiB0aW1lICsgJyBwSXEnO1xuICAgICAgICByZXR1cm4gdGltZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0cmFuc2xhdGVQYXN0KG91dHB1dCkge1xuICAgICAgICB2YXIgdGltZSA9IG91dHB1dDtcbiAgICAgICAgdGltZSA9XG4gICAgICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdIdeKAmSdcbiAgICAgICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdqYXInKSAhPT0gLTFcbiAgICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnd2VuJ1xuICAgICAgICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignRElTJykgIT09IC0xXG4gICAgICAgICAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnYmVuJ1xuICAgICAgICAgICAgICAgICAgICA6IHRpbWUgKyAnIHJldCc7XG4gICAgICAgIHJldHVybiB0aW1lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG51bWJlck5vdW4gPSBudW1iZXJBc05vdW4obnVtYmVyKTtcbiAgICAgICAgc3dpdGNoIChzdHJpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgbHVwJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgdHVwJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgcmVwJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFqJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFyJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgRElTJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG51bWJlckFzTm91bihudW1iZXIpIHtcbiAgICAgICAgdmFyIGh1bmRyZWQgPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDAwKSAvIDEwMCksXG4gICAgICAgICAgICB0ZW4gPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDApIC8gMTApLFxuICAgICAgICAgICAgb25lID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICB3b3JkID0gJyc7XG4gICAgICAgIGlmIChodW5kcmVkID4gMCkge1xuICAgICAgICAgICAgd29yZCArPSBudW1iZXJzTm91bnNbaHVuZHJlZF0gKyAndmF0bGgnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0ZW4gPiAwKSB7XG4gICAgICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1t0ZW5dICsgJ21hSCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uZSA+IDApIHtcbiAgICAgICAgICAgIHdvcmQgKz0gKHdvcmQgIT09ICcnID8gJyAnIDogJycpICsgbnVtYmVyc05vdW5zW29uZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmQgPT09ICcnID8gJ3BhZ2gnIDogd29yZDtcbiAgICB9XG5cbiAgICB2YXIgdGxoID0gbW9tZW50LmRlZmluZUxvY2FsZSgndGxoJywge1xuICAgICAgICBtb250aHM6ICd0ZXJh4oCZIGphciB3YeKAmV90ZXJh4oCZIGphciBjaGHigJlfdGVyYeKAmSBqYXIgd2VqX3RlcmHigJkgamFyIGxvU190ZXJh4oCZIGphciB2YWdoX3RlcmHigJkgamFyIGphdl90ZXJh4oCZIGphciBTb2NoX3RlcmHigJkgamFyIGNob3JnaF90ZXJh4oCZIGphciBIdXRfdGVyYeKAmSBqYXIgd2HigJltYUhfdGVyYeKAmSBqYXIgd2HigJltYUggd2HigJlfdGVyYeKAmSBqYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdqYXIgd2HigJlfamFyIGNoYeKAmV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdh4oCZbWFIX2phciB3YeKAmW1hSCB3YeKAmV9qYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6XG4gICAgICAgICAgICAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOlxuICAgICAgICAgICAgJ2xvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0RhSGphal0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t3YeKAmWxlU10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdMTEwnLFxuICAgICAgICAgICAgbGFzdERheTogJ1t3YeKAmUh14oCZXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ0xMTCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogdHJhbnNsYXRlRnV0dXJlLFxuICAgICAgICAgICAgcGFzdDogdHJhbnNsYXRlUGFzdCxcbiAgICAgICAgICAgIHM6ICdwdVMgbHVwJyxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiAnd2HigJkgdHVwJyxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiAnd2HigJkgcmVwJyxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiAnd2HigJkgamFqJyxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiAnd2HigJkgamFyJyxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiAnd2HigJkgRElTJyxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGxoO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFR1cmtpc2ggW3RyXVxuLy8hIGF1dGhvcnMgOiBFcmhhbiBHdW5kb2dhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lcmhhbmd1bmRvZ2FuLFxuLy8hICAgICAgICAgICBCdXJhayBZacSfaXQgS2F5YTogaHR0cHM6Ly9naXRodWIuY29tL0JZS1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN1ZmZpeGVzID0ge1xuICAgICAgICAxOiBcIidpbmNpXCIsXG4gICAgICAgIDU6IFwiJ2luY2lcIixcbiAgICAgICAgODogXCInaW5jaVwiLFxuICAgICAgICA3MDogXCInaW5jaVwiLFxuICAgICAgICA4MDogXCInaW5jaVwiLFxuICAgICAgICAyOiBcIiduY2lcIixcbiAgICAgICAgNzogXCInbmNpXCIsXG4gICAgICAgIDIwOiBcIiduY2lcIixcbiAgICAgICAgNTA6IFwiJ25jaVwiLFxuICAgICAgICAzOiBcIifDvG5jw7xcIixcbiAgICAgICAgNDogXCInw7xuY8O8XCIsXG4gICAgICAgIDEwMDogXCInw7xuY8O8XCIsXG4gICAgICAgIDY6IFwiJ25jxLFcIixcbiAgICAgICAgOTogXCIndW5jdVwiLFxuICAgICAgICAxMDogXCIndW5jdVwiLFxuICAgICAgICAzMDogXCIndW5jdVwiLFxuICAgICAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgICAgIDkwOiBcIifEsW5jxLFcIixcbiAgICB9O1xuXG4gICAgdmFyIHRyID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgICAgIG1vbnRoczogJ09jYWtfxZ51YmF0X01hcnRfTmlzYW5fTWF5xLFzX0hhemlyYW5fVGVtbXV6X0HEn3VzdG9zX0V5bMO8bF9Fa2ltX0thc8SxbV9BcmFsxLFrJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ09jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnUGF6YXJfUGF6YXJ0ZXNpX1NhbMSxX8OHYXLFn2FtYmFfUGVyxZ9lbWJlX0N1bWFfQ3VtYXJ0ZXNpJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnUGF6X1B6dF9TYWxfw4dhcl9QZXJfQ3VtX0NtdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ8O2cycgOiAnw5ZTJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL8O2w7Z8w5bDlnzDtnN8w5ZTLyxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfDtnMnIHx8IGlucHV0ID09PSAnw5ZTJztcbiAgICAgICAgfSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1t5YXLEsW4gc2FhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbZ2VsZWNla10gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tnZcOnZW5dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgICAgIHM6ICdiaXJrYcOnIHNhbml5ZScsXG4gICAgICAgICAgICBzczogJyVkIHNhbml5ZScsXG4gICAgICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgICAgICBtbTogJyVkIGRha2lrYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNhYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgICAgICB3dzogJyVkIGhhZnRhJyxcbiAgICAgICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgICAgICB5OiAnYmlyIHnEsWwnLFxuICAgICAgICAgICAgeXk6ICclZCB5xLFsJyxcbiAgICAgICAgfSxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciB6ZXJvXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCInxLFuY8SxXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAobnVtYmVyICUgMTAwKSAtIGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAoc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0gfHwgc3VmZml4ZXNbY10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFsb3NzYW4gW3R6bF1cbi8vISBhdXRob3IgOiBSb2JpbiB2YW4gZGVyIFZsaWV0IDogaHR0cHM6Ly9naXRodWIuY29tL3JvYmluMHZhbjBkZXIwdlxuLy8hIGF1dGhvciA6IEl1c3TDrCBDYW51blxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgLy8gQWZ0ZXIgdGhlIHllYXIgdGhlcmUgc2hvdWxkIGJlIGEgc2xhc2ggYW5kIHRoZSBhbW91bnQgb2YgeWVhcnMgc2luY2UgRGVjZW1iZXIgMjYsIDE5NzkgaW4gUm9tYW4gbnVtZXJhbHMuXG4gICAgLy8gVGhpcyBpcyBjdXJyZW50bHkgdG9vIGRpZmZpY3VsdCAobWF5YmUgZXZlbiBpbXBvc3NpYmxlKSB0byBhZGQuXG4gICAgdmFyIHR6bCA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bCcsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZldnJhZ2xoX01hcsOnX0F2csOvdV9NYWlfR8O8bl9KdWxpYV9HdXNjaHRfU2V0ZW12YXJfTGlzdG9ww6R0c19Ob2VtdmFyX1plY2VtdmFyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ0phbl9GZXZfTWFyX0F2cl9NYWlfR8O8bl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdTw7psYWRpX0zDum5lw6dpX01haXR6aV9Nw6FyY3VyaV9YaMO6YWRpX1Zpw6luZXLDp2lfU8OhdHVyaScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1PDumxfTMO6bl9NYWlfTcOhcl9YaMO6X1Zpw6lfU8OhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6EnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBbZGFsbGFzXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbVBhcnNlOiAvZFxcJ298ZFxcJ2EvaSxcbiAgICAgICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gXCJkJ29cIiA9PT0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdvXCIgOiBcIkQnT1wiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/IFwiZCdhXCIgOiBcIkQnQVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tveGhpIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2RlbcOgIMOgXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2llaXJpIMOgXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb3NwcmVpICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdqYSVzJyxcbiAgICAgICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzOiBbJ3ZpZW5zYXMgc2VjdW5kcycsIFwiJ2llbnNhcyBzZWN1bmRzXCJdLFxuICAgICAgICAgICAgc3M6IFtudW1iZXIgKyAnIHNlY3VuZHMnLCAnJyArIG51bWJlciArICcgc2VjdW5kcyddLFxuICAgICAgICAgICAgbTogW1wiJ24gbcOtdXRcIiwgXCInaWVucyBtw611dFwiXSxcbiAgICAgICAgICAgIG1tOiBbbnVtYmVyICsgJyBtw611dHMnLCAnJyArIG51bWJlciArICcgbcOtdXRzJ10sXG4gICAgICAgICAgICBoOiBbXCInbiDDvm9yYVwiLCBcIidpZW5zYSDDvm9yYVwiXSxcbiAgICAgICAgICAgIGhoOiBbbnVtYmVyICsgJyDDvm9yYXMnLCAnJyArIG51bWJlciArICcgw75vcmFzJ10sXG4gICAgICAgICAgICBkOiBbXCInbiB6aXVhXCIsIFwiJ2llbnNhIHppdWFcIl0sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgeml1YXMnLCAnJyArIG51bWJlciArICcgeml1YXMnXSxcbiAgICAgICAgICAgIE06IFtcIiduIG1lc1wiLCBcIidpZW5zIG1lc1wiXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBtZXNlbicsICcnICsgbnVtYmVyICsgJyBtZXNlbiddLFxuICAgICAgICAgICAgeTogW1wiJ24gYXJcIiwgXCInaWVucyBhclwiXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBhcnMnLCAnJyArIG51bWJlciArICcgYXJzJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0Z1dHVyZVxuICAgICAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICAgICAgOiB3aXRob3V0U3VmZml4XG4gICAgICAgICAgICAgID8gZm9ybWF0W2tleV1bMF1cbiAgICAgICAgICAgICAgOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHpsO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluIFt0em0tbGF0bl1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHR6bUxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0tbGF0bicsIHtcbiAgICAgICAgbW9udGhzOiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ2FzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1thc2RraCBnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2Fza2EgZ10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtnXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2Fzc2FudCBnXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnZGFka2ggcyB5YW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3lhbiAlcycsXG4gICAgICAgICAgICBzOiAnaW1paycsXG4gICAgICAgICAgICBzczogJyVkIGltaWsnLFxuICAgICAgICAgICAgbTogJ21pbnXhuI0nLFxuICAgICAgICAgICAgbW06ICclZCBtaW514biNJyxcbiAgICAgICAgICAgIGg6ICdzYcmbYScsXG4gICAgICAgICAgICBoaDogJyVkIHRhc3NhyZtpbicsXG4gICAgICAgICAgICBkOiAnYXNzJyxcbiAgICAgICAgICAgIGRkOiAnJWQgb3NzYW4nLFxuICAgICAgICAgICAgTTogJ2F5b3dyJyxcbiAgICAgICAgICAgIE1NOiAnJWQgaXl5aXJuJyxcbiAgICAgICAgICAgIHk6ICdhc2dhcycsXG4gICAgICAgICAgICB5eTogJyVkIGlzZ2FzbicsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHptTGF0bjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDZW50cmFsIEF0bGFzIFRhbWF6aWdodCBbdHptXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdHptID0gbW9tZW50LmRlZmluZUxvY2FsZSgndHptJywge1xuICAgICAgICBtb250aHM6ICfitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb4rSw4rWZ4rS34rWFIOK0tF0gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vitLDitZnitL3itLAg4rS0XSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW+K0tF0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vitLDitZritLDitY/itZwg4rS0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+K0tF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlcycsXG4gICAgICAgICAgICBwYXN0OiAn4rWi4rSw4rWPICVzJyxcbiAgICAgICAgICAgIHM6ICfitYnitY7itYnitL0nLFxuICAgICAgICAgICAgc3M6ICclZCDitYnitY7itYnitL0nLFxuICAgICAgICAgICAgbTogJ+K1juK1ieK1j+K1k+K0uicsXG4gICAgICAgICAgICBtbTogJyVkIOK1juK1ieK1j+K1k+K0uicsXG4gICAgICAgICAgICBoOiAn4rWZ4rSw4rWE4rSwJyxcbiAgICAgICAgICAgIGhoOiAnJWQg4rWc4rSw4rWZ4rWZ4rSw4rWE4rWJ4rWPJyxcbiAgICAgICAgICAgIGQ6ICfitLDitZnitZknLFxuICAgICAgICAgICAgZGQ6ICclZCBv4rWZ4rWZ4rSw4rWPJyxcbiAgICAgICAgICAgIE06ICfitLDitaJv4rWT4rWUJyxcbiAgICAgICAgICAgIE1NOiAnJWQg4rWJ4rWi4rWi4rWJ4rWU4rWPJyxcbiAgICAgICAgICAgIHk6ICfitLDitZnitLPitLDitZknLFxuICAgICAgICAgICAgeXk6ICclZCDitYnitZnitLPitLDitZnitY8nLFxuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR6bTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVeWdodXIgKENoaW5hKSBbdWctY25dXG4vLyEgYXV0aG9yOiBib3lhcSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3lhcVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHVnQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1Zy1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn2YrYp9mG24vYp9ixX9mB25Dbi9ix2KfZhF/Zhdin2LHYql/Yptin2b7YsduQ2YRf2YXYp9mKX9im2YnZituH2YZf2KbZidmK24fZhF/Yptin24vYutuH2LPYql/Ys9uQ2YbYqtuV2KjZidixX9im24bZg9iq25XYqNmJ2LFf2YbZiNmK2KfYqNmJ2LFf2K/bkNmD2KfYqNmJ2LEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn2YrblV/Yr9uIX9iz25Vf2obYp1/ZvtuVX9is24hf2LTblScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YknLFxuICAgICAgICAgICAgTExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICAgICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9PT0gJ9iz25XavtuV2LEnIHx8XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhidcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJyB8fCBtZXJpZGllbSA9PT0gJ9mD25XahicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZituQ2LHZidmFINmD25DahtuVJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9iz25XavtuV2LEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfahtuI2LQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDZg9uQ2YrZidmGJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYqNuI2q/biNmGINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb2Kbbldiq25Ug2LPYp9im25XYql0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2KrbhtmG24jar9uI2YZdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9im2KfZhNiv2YnZhtmC2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2Kjbh9ix24fZhicsXG4gICAgICAgICAgICBzOiAn2YbbldqG2obblSDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICAgICAgbTogJ9io2YnYsSDZhdmJ2Ybbh9iqJyxcbiAgICAgICAgICAgIG1tOiAnJWQg2YXZidmG24fYqicsXG4gICAgICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICAgICAgaGg6ICclZCDYs9in2KbbldiqJyxcbiAgICAgICAgICAgIGQ6ICfYqNmJ2LEg2YPbiNmGJyxcbiAgICAgICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgICAgIE06ICfYqNmJ2LEg2KbYp9mKJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2KbYp9mKJyxcbiAgICAgICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2YrZidmEJyxcbiAgICAgICAgfSxcblxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdmD24jZhtmJJztcbiAgICAgICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2r7bldm+2KrblSc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxc3QgaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdWdDbjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVa3JhaW5pYW4gW3VrXVxuLy8hIGF1dGhvciA6IHplbWxhbmluIDogaHR0cHM6Ly9naXRodWIuY29tL3plbWxhbmluXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICAgICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgICAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICAgICAgICA6IGZvcm1zWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCcsXG4gICAgICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfRhdCy0LjQu9C40L3QsF/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nIDogJ9GF0LLQuNC70LjQvdGDX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvScsXG4gICAgICAgICAgICBoaDogd2l0aG91dFN1ZmZpeCA/ICfQs9C+0LTQuNC90LBf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nIDogJ9Cz0L7QtNC40L3Rg1/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvScsXG4gICAgICAgICAgICBkZDogJ9C00LXQvdGMX9C00L3Rll/QtNC90ZbQsicsXG4gICAgICAgICAgICBNTTogJ9C80ZbRgdGP0YbRjF/QvNGW0YHRj9GG0ZZf0LzRltGB0Y/RhtGW0LInLFxuICAgICAgICAgICAgeXk6ICfRgNGW0Lpf0YDQvtC60Lhf0YDQvtC60ZbQsicsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LAnIDogJ9GF0LLQuNC70LjQvdGDJztcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0LPQvtC00LjQvdCwJyA6ICfQs9C+0LTQuNC90YMnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gd2Vla2RheXNDYXNlUmVwbGFjZShtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0ge1xuICAgICAgICAgICAgICAgIG5vbWluYXRpdmU6XG4gICAgICAgICAgICAgICAgICAgICfQvdC10LTRltC70Y9f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNCwX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRj1/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgYWNjdXNhdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgJ9C90LXQtNGW0LvRjl/Qv9C+0L3QtdC00ZbQu9C+0Lpf0LLRltCy0YLQvtGA0L7Qul/RgdC10YDQtdC00YNf0YfQtdGC0LLQtdGAX9C/4oCZ0Y/RgtC90LjRhtGOX9GB0YPQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBnZW5pdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgJ9C90LXQtNGW0LvRll/Qv9C+0L3QtdC00ZbQu9C60LBf0LLRltCy0YLQvtGA0LrQsF/RgdC10YDQtdC00Lhf0YfQtdGC0LLQtdGA0LPQsF/Qv+KAmdGP0YLQvdC40YbRll/RgdGD0LHQvtGC0LgnLnNwbGl0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm91bkNhc2U7XG5cbiAgICAgICAgaWYgKG0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5c1snbm9taW5hdGl2ZSddXG4gICAgICAgICAgICAgICAgLnNsaWNlKDEsIDcpXG4gICAgICAgICAgICAgICAgLmNvbmNhdCh3ZWVrZGF5c1snbm9taW5hdGl2ZSddLnNsaWNlKDAsIDEpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrZGF5c1snbm9taW5hdGl2ZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgbm91bkNhc2UgPSAvKFxcW1vQktCy0KPRg11cXF0pID9kZGRkLy50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgID8gJ2FjY3VzYXRpdmUnXG4gICAgICAgICAgICA6IC9cXFs/KD860LzQuNC90YPQu9C+0Zd80L3QsNGB0YLRg9C/0L3QvtGXKT8gP1xcXSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgID8gJ2dlbml0aXZlJ1xuICAgICAgICAgICAgICA6ICdub21pbmF0aXZlJztcbiAgICAgICAgcmV0dXJuIHdlZWtkYXlzW25vdW5DYXNlXVttLmRheSgpXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyICsgJ9C+JyArICh0aGlzLmhvdXJzKCkgPT09IDExID8gJ9CxJyA6ICcnKSArICddIExUJztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgdWsgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1aycsIHtcbiAgICAgICAgbW9udGhzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6ICfRgdGW0YfQvdGPX9C70Y7RgtC+0LPQvl/QsdC10YDQtdC30L3Rj1/QutCy0ZbRgtC90Y9f0YLRgNCw0LLQvdGPX9GH0LXRgNCy0L3Rj1/Qu9C40L/QvdGPX9GB0LXRgNC/0L3Rj1/QstC10YDQtdGB0L3Rj1/QttC+0LLRgtC90Y9f0LvQuNGB0YLQvtC/0LDQtNCwX9Cz0YDRg9C00L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgc3RhbmRhbG9uZTpcbiAgICAgICAgICAgICAgICAn0YHRltGH0LXQvdGMX9C70Y7RgtC40Llf0LHQtdGA0LXQt9C10L3RjF/QutCy0ZbRgtC10L3RjF/RgtGA0LDQstC10L3RjF/Rh9C10YDQstC10L3RjF/Qu9C40L/QtdC90Yxf0YHQtdGA0L/QtdC90Yxf0LLQtdGA0LXRgdC10L3RjF/QttC+0LLRgtC10L3RjF/Qu9C40YHRgtC+0L/QsNC0X9Cz0YDRg9C00LXQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czogd2Vla2RheXNDYXNlUmVwbGFjZSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDRgC4nLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Ch0YzQvtCz0L7QtNC90ZYgJyksXG4gICAgICAgICAgICBuZXh0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CX0LDQstGC0YDQsCAnKSxcbiAgICAgICAgICAgIGxhc3REYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JLRh9C+0YDQsCAnKSxcbiAgICAgICAgICAgIG5leHRXZWVrOiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CjXSBkZGRkIFsnKSxcbiAgICAgICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtGXXSBkZGRkIFsnKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0LPQvl0gZGRkZCBbJykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyDRgtC+0LzRgycsXG4gICAgICAgICAgICBzOiAn0LTQtdC60ZbQu9GM0LrQsCDRgdC10LrRg9C90LQnLFxuICAgICAgICAgICAgc3M6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgICAgICBoOiAn0LPQvtC00LjQvdGDJyxcbiAgICAgICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICAgICAgTTogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgICAgIHk6ICfRgNGW0LonLFxuICAgICAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIE0uIEUuOiB0aG9zZSB0d28gYXJlIHZpcnR1YWxseSB1bnVzZWQgYnV0IGEgdXNlciBtaWdodCB3YW50IHRvIGltcGxlbWVudCB0aGVtIGZvciBoaXMvaGVyIHdlYnNpdGUgZm9yIHNvbWUgcmVhc29uXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXijQtNC90Y980LLQtdGH0L7RgNCwKSQvLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0YDQsNC90LrRgyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgICAgIHJldHVybiAn0LTQvdGPJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC5JztcbiAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVrO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFVyZHUgW3VyXVxuLy8hIGF1dGhvciA6IFNhd29vZCBBbGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2libmVzYXllZWRcbi8vISBhdXRob3IgOiBaYWNrIDogaHR0cHM6Ly9naXRodWIuY29tL1phY2tWaXNpb25cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBtb250aHMgPSBbXG4gICAgICAgICAgICAn2KzZhtmI2LHbjCcsXG4gICAgICAgICAgICAn2YHYsdmI2LHbjCcsXG4gICAgICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAgICAgJ9in2b7YsduM2YQnLFxuICAgICAgICAgICAgJ9mF2KbbjCcsXG4gICAgICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgICAgICfYrNmI2YTYp9im24wnLFxuICAgICAgICAgICAgJ9in2q/Ys9iqJyxcbiAgICAgICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgICAgICfYp9qp2KrZiNio2LEnLFxuICAgICAgICAgICAgJ9mG2YjZhdio2LEnLFxuICAgICAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgICAgICBdLFxuICAgICAgICBkYXlzID0gWyfYp9iq2YjYp9ixJywgJ9m+24zYsScsICfZhdmG2q/ZhCcsICfYqNiv2r4nLCAn2KzZhdi52LHYp9iqJywgJ9is2YXYuduBJywgJ9uB2YHYqtuBJ107XG5cbiAgICB2YXIgdXIgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICAgICAgbW9udGhzOiBtb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LTYp9mFJyA9PT0gaW5wdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICfYtNin2YUnO1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vYotisINio2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW9qp2YQg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb2q/YsNi02KrbgSDYsdmI2LIg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW9qv2LDYtNiq24FdIGRkZGQgW9io2YjZgtiqXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgICAgICBwYXN0OiAnJXMg2YLYqNmEJyxcbiAgICAgICAgICAgIHM6ICfahtmG2K8g2LPbjNqp2YbaiCcsXG4gICAgICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICAgICAgbTogJ9in24zaqSDZhdmG2bknLFxuICAgICAgICAgICAgbW06ICclZCDZhdmG2bknLFxuICAgICAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgICAgIGhoOiAnJWQg2q/avtmG2bnbkicsXG4gICAgICAgICAgICBkOiAn2KfbjNqpINiv2YYnLFxuICAgICAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgICAgIE06ICfYp9uM2qkg2YXYp9uBJyxcbiAgICAgICAgICAgIE1NOiAnJWQg2YXYp9uBJyxcbiAgICAgICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgICAgIHl5OiAnJWQg2LPYp9mEJyxcbiAgICAgICAgfSxcbiAgICAgICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXI7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgTGF0aW4gW3V6LWxhdG5dXG4vLyEgYXV0aG9yIDogUmFzdWxiZWsgTWlyemF5ZXYgOiBnaXRodWIuY29tL1Jhc3VsYmVlZWtcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciB1ekxhdG4gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1ei1sYXRuJywge1xuICAgICAgICBtb250aHM6ICdZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2Ficicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFuYmEnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tCdWd1biBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbRXJ0YWdhXSBMVCBbZGFdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbS2VjaGEgc29hdF0gTFQgW2RhXScsXG4gICAgICAgICAgICBsYXN0V2VlazogXCJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV1cIixcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnWWFxaW4gJXMgaWNoaWRhJyxcbiAgICAgICAgICAgIHBhc3Q6ICdCaXIgbmVjaGEgJXMgb2xkaW4nLFxuICAgICAgICAgICAgczogJ3Nvbml5YScsXG4gICAgICAgICAgICBzczogJyVkIHNvbml5YScsXG4gICAgICAgICAgICBtOiAnYmlyIGRhcWlxYScsXG4gICAgICAgICAgICBtbTogJyVkIGRhcWlxYScsXG4gICAgICAgICAgICBoOiAnYmlyIHNvYXQnLFxuICAgICAgICAgICAgaGg6ICclZCBzb2F0JyxcbiAgICAgICAgICAgIGQ6ICdiaXIga3VuJyxcbiAgICAgICAgICAgIGRkOiAnJWQga3VuJyxcbiAgICAgICAgICAgIE06ICdiaXIgb3knLFxuICAgICAgICAgICAgTU06ICclZCBveScsXG4gICAgICAgICAgICB5OiAnYmlyIHlpbCcsXG4gICAgICAgICAgICB5eTogJyVkIHlpbCcsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1ekxhdG47XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgW3V6XVxuLy8hIGF1dGhvciA6IFNhcmRvciBNdW1pbm92IDogaHR0cHM6Ly9naXRodWIuY29tL211bWlub2ZmXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgdXogPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd1eicsIHtcbiAgICAgICAgbW9udGhzOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ9Cv0LrRiNCw0L3QsdCwX9CU0YPRiNCw0L3QsdCwX9Ch0LXRiNCw0L3QsdCwX9Cn0L7RgNGI0LDQvdCx0LBf0J/QsNC50YjQsNC90LHQsF/QltGD0LzQsF/QqNCw0L3QsdCwJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn0K/QutGIX9CU0YPRiF/QodC10Yhf0KfQvtGAX9Cf0LDQuV/QltGD0Lxf0KjQsNC9Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ9Cv0Lpf0JTRg1/QodC1X9Cn0L5f0J/QsF/QltGDX9Co0LAnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ0QgTU1NTSBZWVlZLCBkZGRkIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb0JHRg9Cz0YPQvSDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdb0K3RgNGC0LDQs9CwXSBMVCBb0LTQsF0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdb0JrQtdGH0LAg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vQo9GC0LPQsNC9XSBkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAn0K/QutC40L0gJXMg0LjRh9C40LTQsCcsXG4gICAgICAgICAgICBwYXN0OiAn0JHQuNGAINC90LXRh9CwICVzINC+0LvQtNC40L0nLFxuICAgICAgICAgICAgczogJ9GE0YPRgNGB0LDRgicsXG4gICAgICAgICAgICBzczogJyVkINGE0YPRgNGB0LDRgicsXG4gICAgICAgICAgICBtOiAn0LHQuNGAINC00LDQutC40LrQsCcsXG4gICAgICAgICAgICBtbTogJyVkINC00LDQutC40LrQsCcsXG4gICAgICAgICAgICBoOiAn0LHQuNGAINGB0L7QsNGCJyxcbiAgICAgICAgICAgIGhoOiAnJWQg0YHQvtCw0YInLFxuICAgICAgICAgICAgZDogJ9Cx0LjRgCDQutGD0L0nLFxuICAgICAgICAgICAgZGQ6ICclZCDQutGD0L0nLFxuICAgICAgICAgICAgTTogJ9Cx0LjRgCDQvtC5JyxcbiAgICAgICAgICAgIE1NOiAnJWQg0L7QuScsXG4gICAgICAgICAgICB5OiAn0LHQuNGAINC50LjQuycsXG4gICAgICAgICAgICB5eTogJyVkINC50LjQuycsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB1ejtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBWaWV0bmFtZXNlIFt2aV1cbi8vISBhdXRob3IgOiBCYW5nIE5ndXllbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iYW5nbmtcbi8vISBhdXRob3IgOiBDaGllbiBLaXJhIDogaHR0cHM6Ly9naXRodWIuY29tL2NoaWVua2lyYVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgndmknLCB7XG4gICAgICAgIG1vbnRoczogJ3Row6FuZyAxX3Row6FuZyAyX3Row6FuZyAzX3Row6FuZyA0X3Row6FuZyA1X3Row6FuZyA2X3Row6FuZyA3X3Row6FuZyA4X3Row6FuZyA5X3Row6FuZyAxMF90aMOhbmcgMTFfdGjDoW5nIDEyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czogJ2No4bunIG5o4bqtdF90aOG7qSBoYWlfdGjhu6kgYmFfdGjhu6kgdMawX3Ro4bupIG7Eg21fdGjhu6kgc8OhdV90aOG7qSBi4bqjeScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC9zYXxjaC9pLFxuICAgICAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAvXmNoJC9pLnRlc3QoaW5wdXQpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3NhJyA6ICdTQSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2NoJyA6ICdDSCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFtuxINtXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGw6ICdERC9NL1lZWVknLFxuICAgICAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0jDtG0gbmF5IGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdHXhuqduIHThu5tpIGzDumNdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSMO0bSBxdWEgbMO6Y10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gdHLGsOG7m2MgbMO6Y10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyB04bubaScsXG4gICAgICAgICAgICBwYXN0OiAnJXMgdHLGsOG7m2MnLFxuICAgICAgICAgICAgczogJ3bDoGkgZ2nDonknLFxuICAgICAgICAgICAgc3M6ICclZCBnacOieScsXG4gICAgICAgICAgICBtOiAnbeG7mXQgcGjDunQnLFxuICAgICAgICAgICAgbW06ICclZCBwaMO6dCcsXG4gICAgICAgICAgICBoOiAnbeG7mXQgZ2nhu50nLFxuICAgICAgICAgICAgaGg6ICclZCBnaeG7nScsXG4gICAgICAgICAgICBkOiAnbeG7mXQgbmfDoHknLFxuICAgICAgICAgICAgZGQ6ICclZCBuZ8OgeScsXG4gICAgICAgICAgICB3OiAnbeG7mXQgdHXhuqduJyxcbiAgICAgICAgICAgIHd3OiAnJWQgdHXhuqduJyxcbiAgICAgICAgICAgIE06ICdt4buZdCB0aMOhbmcnLFxuICAgICAgICAgICAgTU06ICclZCB0aMOhbmcnLFxuICAgICAgICAgICAgeTogJ23hu5l0IG7Eg20nLFxuICAgICAgICAgICAgeXk6ICclZCBuxINtJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBzZXVkbyBbeC1wc2V1ZG9dXG4vLyEgYXV0aG9yIDogQW5kcmV3IEhvb2QgOiBodHRwczovL2dpdGh1Yi5jb20vYW5kcmV3aG9vZDEyNVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHhQc2V1ZG8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd4LXBzZXVkbycsIHtcbiAgICAgICAgbW9udGhzOiAnSn7DocOxw7rDoX5yw71fRn7DqWJyw7p+w6Fyw71ffk3DoXJjfmhfw4FwfnLDrWxffk3DocO9X35Kw7rDscOpfl9Kw7psfsO9X8OBw7p+Z8O6c3R+X1PDqXB+dMOpbWJ+w6lyX8OTfmN0w7NifsOpcl/DkX7Ds3bDqW1+YsOpcl9+RMOpY8Opfm1iw6lyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKfsOhw7FffkbDqWJffk3DoXJffsOBcHJffk3DocO9X35Kw7rDsV9+SsO6bF9+w4HDumdfflPDqXBffsOTY3RffsORw7N2X35Ew6ljJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1N+w7rDsV9+TcOzw7FfflTDusOpX35Xw6lkX35UaMO6X35GcsOtX35Tw6F0Jy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1N+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW1R+w7Nkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW1R+w7Ntw7N+cnLDs353IMOhdF0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbw51+w6lzdH7DqXJkw6F+w70gw6F0XSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tMfsOhc3RdIGRkZGQgW8OhdF0gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICfDrX7DsSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMgw6F+Z8OzJyxcbiAgICAgICAgICAgIHM6ICfDoSB+ZsOpdyB+c8OpY8OzfsOxZHMnLFxuICAgICAgICAgICAgc3M6ICclZCBzfsOpY8Ozw7F+ZHMnLFxuICAgICAgICAgICAgbTogJ8OhIH5tw63DsX7DunTDqScsXG4gICAgICAgICAgICBtbTogJyVkIG1+w63DscO6fnTDqXMnLFxuICAgICAgICAgICAgaDogJ8OhfsOxIGjDs37DunInLFxuICAgICAgICAgICAgaGg6ICclZCBofsOzw7pycycsXG4gICAgICAgICAgICBkOiAnw6EgfmTDocO9JyxcbiAgICAgICAgICAgIGRkOiAnJWQgZH7DocO9cycsXG4gICAgICAgICAgICBNOiAnw6Egfm3Ds8OxfnRoJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbX7Ds8OxdH5ocycsXG4gICAgICAgICAgICB5OiAnw6EgfsO9w6nDoXInLFxuICAgICAgICAgICAgeXk6ICclZCDDvX7DqcOhcnMnLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4geFBzZXVkbztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBZb3J1YmEgTmlnZXJpYSBbeW9dXG4vLyEgYXV0aG9yIDogQXRvbGFnYmUgQWJpc295ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRlbGEtYmF0b2xhZ2JlXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgeW8gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd5bycsIHtcbiAgICAgICAgbW9udGhzOiAnU+G6ucyBcuG6ucyBX0XMgHJlzIBsZcyAX+G6uHLhurnMgG5hzIBfScyAZ2JlzIFfRcyAYmliaV9PzIBrdcyAZHVfQWfhurltb19PzIBndcyBbl9Pd2V3ZV/hu4zMgHdhzIByYcyAX0JlzIFsdcyBX+G7jMyAcOG6ucyAzIAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnU+G6ucyBcl9FzIBybF/hurhybl9JzIBnYl9FzIBiaV9PzIBrdcyAX0Fn4bq5X0/MgGd1zIFfT3dlX+G7jMyAd2HMgF9CZcyBbF/hu4zMgHDhurnMgMyAJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ0HMgGnMgGt1zIFfQWplzIFfScyAc+G6ucyBZ3VuX+G7jGrhu43MgXJ1zIFf4buMauG7jcyBYuG7jV/hurh0acyAX0HMgGJhzIFt4bq5zIF0YScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ0HMgGnMgGtfQWplzIFfScyAc+G6ucyBX+G7jGpyX+G7jGpiX+G6uHRpzIBfQcyAYmHMgScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tPzIBuacyAIG5pXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+G7jMyAbGEgbmldIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiBcImRkZGQgW+G7jHPhurnMgCB0b8yBbidi4buNXSBbbmldIExUXCIsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0HMgG5hIG5pXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+G7jHPhurnMgCB0b8yBbOG7jcyBXSBbbmldIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnbmnMgSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnJXMga+G7jWphzIEnLFxuICAgICAgICAgICAgczogJ2nMgHPhurlqdcyBIGFheWHMgSBkaWUnLFxuICAgICAgICAgICAgc3M6ICdhYXlhzIEgJWQnLFxuICAgICAgICAgICAgbTogJ2nMgHPhurlqdcyBIGthbicsXG4gICAgICAgICAgICBtbTogJ2nMgHPhurlqdcyBICVkJyxcbiAgICAgICAgICAgIGg6ICd3YcyBa2F0aSBrYW4nLFxuICAgICAgICAgICAgaGg6ICd3YcyBa2F0aSAlZCcsXG4gICAgICAgICAgICBkOiAn4buNauG7jcyBIGthbicsXG4gICAgICAgICAgICBkZDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgICAgICBNOiAnb3N1zIAga2FuJyxcbiAgICAgICAgICAgIE1NOiAnb3N1zIAgJWQnLFxuICAgICAgICAgICAgeTogJ+G7jWR1zIFuIGthbicsXG4gICAgICAgICAgICB5eTogJ+G7jWR1zIFuICVkJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL+G7jWrhu43MgVxcc1xcZHsxLDJ9LyxcbiAgICAgICAgb3JkaW5hbDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB5bztcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChDaGluYSkgW3poLWNuXVxuLy8hIGF1dGhvciA6IHN1dXBpYyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXVwaWNcbi8vISBhdXRob3IgOiBaZW5vIFplbmcgOiBodHRwczovL2dpdGh1Yi5jb20vemVub3plbmdcbi8vISBhdXRob3IgOiB1dTEwOSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91dTEwOVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHpoQ24gPSBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1jbicsIHtcbiAgICAgICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAn5ZGo5pelX+WRqOS4gF/lkajkuoxf5ZGo5LiJX+WRqOWbm1/lkajkupRf5ZGo5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelQWjngrltbeWIhicsXG4gICAgICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYnLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb5LiLXWRkZExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSAhPT0gbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuIpdZGRkTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW+acrF1kZGRMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOWRqCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5ZGoJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5ZCOJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5Yeg56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumSnycsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumSnycsXG4gICAgICAgICAgICBoOiAnMSDlsI/ml7YnLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/ml7YnLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIHc6ICcxIOWRqCcsXG4gICAgICAgICAgICB3dzogJyVkIOWRqCcsXG4gICAgICAgICAgICBNOiAnMSDkuKrmnIgnLFxuICAgICAgICAgICAgTU06ICclZCDkuKrmnIgnLFxuICAgICAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgLy8gR0IvVCA3NDA4LTE5OTTjgIrmlbDmja7lhYPlkozkuqTmjaLmoLzlvI/Ct+S/oeaBr+S6pOaNosK35pel5pyf5ZKM5pe26Ze06KGo56S65rOV44CL5LiOSVNPIDg2MDE6MTk4OOetieaViFxuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoQ247XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoSG9uZyBLb25nKSBbemgtaGtdXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogS29uc3RhbnRpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2ZkXG4vLyEgYXV0aG9yIDogQW50aG9ueSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRob255bGF1XG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhIayA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWhrJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPT09IDEyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTgwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfmmZrkuIonO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGRMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoSGs7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoTWFjYXUpIFt6aC1tb11cbi8vISBhdXRob3IgOiBCZW4gOiBodHRwczovL2dpdGh1Yi5jb20vYmVuLWxpblxuLy8hIGF1dGhvciA6IENocmlzIExhbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oZWhhY2hyaXNcbi8vISBhdXRob3IgOiBUYW4gWXVhbmhvbmcgOiBodHRwczovL2dpdGh1Yi5jb20vbGUwdGFuXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhNbyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLW1vJywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ0QvTS9ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5YWnJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoTW87XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoVGFpd2FuKSBbemgtdHddXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgemhUdyA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLXR3Jywge1xuICAgICAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS9NTS9ERCcsXG4gICAgICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTEzMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICfkuK3ljYgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1vmmKjlpKldIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW+S4il1kZGRkIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICAgICAgeXk6ICclZCDlubQnLFxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHpoVHc7XG5cbn0pKSk7XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vYWZcIjogMjUxNzcsXG5cdFwiLi9hZi5qc1wiOiAyNTE3Nyxcblx0XCIuL2FyXCI6IDYxNTA5LFxuXHRcIi4vYXItZHpcIjogNDE0ODgsXG5cdFwiLi9hci1kei5qc1wiOiA0MTQ4OCxcblx0XCIuL2FyLWt3XCI6IDU4Njc2LFxuXHRcIi4vYXIta3cuanNcIjogNTg2NzYsXG5cdFwiLi9hci1seVwiOiA0MjM1Myxcblx0XCIuL2FyLWx5LmpzXCI6IDQyMzUzLFxuXHRcIi4vYXItbWFcIjogMjQ0OTYsXG5cdFwiLi9hci1tYS5qc1wiOiAyNDQ5Nixcblx0XCIuL2FyLXBzXCI6IDY5NDcsXG5cdFwiLi9hci1wcy5qc1wiOiA2OTQ3LFxuXHRcIi4vYXItc2FcIjogODI2ODIsXG5cdFwiLi9hci1zYS5qc1wiOiA4MjY4Mixcblx0XCIuL2FyLXRuXCI6IDg5NzU2LFxuXHRcIi4vYXItdG4uanNcIjogODk3NTYsXG5cdFwiLi9hci5qc1wiOiA2MTUwOSxcblx0XCIuL2F6XCI6IDk1NTMzLFxuXHRcIi4vYXouanNcIjogOTU1MzMsXG5cdFwiLi9iZVwiOiAyODk1OSxcblx0XCIuL2JlLmpzXCI6IDI4OTU5LFxuXHRcIi4vYmdcIjogNDc3NzcsXG5cdFwiLi9iZy5qc1wiOiA0Nzc3Nyxcblx0XCIuL2JtXCI6IDU0OTAzLFxuXHRcIi4vYm0uanNcIjogNTQ5MDMsXG5cdFwiLi9iblwiOiA2MTI5MCxcblx0XCIuL2JuLWJkXCI6IDE3MzU3LFxuXHRcIi4vYm4tYmQuanNcIjogMTczNTcsXG5cdFwiLi9ibi5qc1wiOiA2MTI5MCxcblx0XCIuL2JvXCI6IDMxNTQ1LFxuXHRcIi4vYm8uanNcIjogMzE1NDUsXG5cdFwiLi9iclwiOiAxMTQ3MCxcblx0XCIuL2JyLmpzXCI6IDExNDcwLFxuXHRcIi4vYnNcIjogNDQ0MjksXG5cdFwiLi9icy5qc1wiOiA0NDQyOSxcblx0XCIuL2NhXCI6IDczMDYsXG5cdFwiLi9jYS5qc1wiOiA3MzA2LFxuXHRcIi4vY3NcIjogNTY0NjQsXG5cdFwiLi9jcy5qc1wiOiA1NjQ2NCxcblx0XCIuL2N2XCI6IDczNjM1LFxuXHRcIi4vY3YuanNcIjogNzM2MzUsXG5cdFwiLi9jeVwiOiA2NDIyNixcblx0XCIuL2N5LmpzXCI6IDY0MjI2LFxuXHRcIi4vZGFcIjogOTM2MDEsXG5cdFwiLi9kYS5qc1wiOiA5MzYwMSxcblx0XCIuL2RlXCI6IDc3ODUzLFxuXHRcIi4vZGUtYXRcIjogMjYxMTEsXG5cdFwiLi9kZS1hdC5qc1wiOiAyNjExMSxcblx0XCIuL2RlLWNoXCI6IDU0Njk3LFxuXHRcIi4vZGUtY2guanNcIjogNTQ2OTcsXG5cdFwiLi9kZS5qc1wiOiA3Nzg1Myxcblx0XCIuL2R2XCI6IDYwNzA4LFxuXHRcIi4vZHYuanNcIjogNjA3MDgsXG5cdFwiLi9lbFwiOiA1NDY5MSxcblx0XCIuL2VsLmpzXCI6IDU0NjkxLFxuXHRcIi4vZW4tYXVcIjogNTM4NzIsXG5cdFwiLi9lbi1hdS5qc1wiOiA1Mzg3Mixcblx0XCIuL2VuLWNhXCI6IDI4Mjk4LFxuXHRcIi4vZW4tY2EuanNcIjogMjgyOTgsXG5cdFwiLi9lbi1nYlwiOiA1NjE5NSxcblx0XCIuL2VuLWdiLmpzXCI6IDU2MTk1LFxuXHRcIi4vZW4taWVcIjogNjY1ODQsXG5cdFwiLi9lbi1pZS5qc1wiOiA2NjU4NCxcblx0XCIuL2VuLWlsXCI6IDY1NTQzLFxuXHRcIi4vZW4taWwuanNcIjogNjU1NDMsXG5cdFwiLi9lbi1pblwiOiA5MDMzLFxuXHRcIi4vZW4taW4uanNcIjogOTAzMyxcblx0XCIuL2VuLW56XCI6IDc5NDAyLFxuXHRcIi4vZW4tbnouanNcIjogNzk0MDIsXG5cdFwiLi9lbi1zZ1wiOiA0MzAwNCxcblx0XCIuL2VuLXNnLmpzXCI6IDQzMDA0LFxuXHRcIi4vZW9cIjogMzI5MzQsXG5cdFwiLi9lby5qc1wiOiAzMjkzNCxcblx0XCIuL2VzXCI6IDk3NjUwLFxuXHRcIi4vZXMtZG9cIjogMjA4MzgsXG5cdFwiLi9lcy1kby5qc1wiOiAyMDgzOCxcblx0XCIuL2VzLW14XCI6IDE3NzMwLFxuXHRcIi4vZXMtbXguanNcIjogMTc3MzAsXG5cdFwiLi9lcy11c1wiOiA1NjU3NSxcblx0XCIuL2VzLXVzLmpzXCI6IDU2NTc1LFxuXHRcIi4vZXMuanNcIjogOTc2NTAsXG5cdFwiLi9ldFwiOiAzMDM1LFxuXHRcIi4vZXQuanNcIjogMzAzNSxcblx0XCIuL2V1XCI6IDM1MDgsXG5cdFwiLi9ldS5qc1wiOiAzNTA4LFxuXHRcIi4vZmFcIjogMTE5LFxuXHRcIi4vZmEuanNcIjogMTE5LFxuXHRcIi4vZmlcIjogOTA1MjcsXG5cdFwiLi9maS5qc1wiOiA5MDUyNyxcblx0XCIuL2ZpbFwiOiA5NTk5NSxcblx0XCIuL2ZpbC5qc1wiOiA5NTk5NSxcblx0XCIuL2ZvXCI6IDUyNDc3LFxuXHRcIi4vZm8uanNcIjogNTI0NzcsXG5cdFwiLi9mclwiOiA4NTQ5OCxcblx0XCIuL2ZyLWNhXCI6IDI2NDM1LFxuXHRcIi4vZnItY2EuanNcIjogMjY0MzUsXG5cdFwiLi9mci1jaFwiOiAzNzg5Mixcblx0XCIuL2ZyLWNoLmpzXCI6IDM3ODkyLFxuXHRcIi4vZnIuanNcIjogODU0OTgsXG5cdFwiLi9meVwiOiAzNzA3MSxcblx0XCIuL2Z5LmpzXCI6IDM3MDcxLFxuXHRcIi4vZ2FcIjogNDE3MzQsXG5cdFwiLi9nYS5qc1wiOiA0MTczNCxcblx0XCIuL2dkXCI6IDcwMjE3LFxuXHRcIi4vZ2QuanNcIjogNzAyMTcsXG5cdFwiLi9nbFwiOiA3NzMyOSxcblx0XCIuL2dsLmpzXCI6IDc3MzI5LFxuXHRcIi4vZ29tLWRldmFcIjogMzIxMjQsXG5cdFwiLi9nb20tZGV2YS5qc1wiOiAzMjEyNCxcblx0XCIuL2dvbS1sYXRuXCI6IDkzMzgzLFxuXHRcIi4vZ29tLWxhdG4uanNcIjogOTMzODMsXG5cdFwiLi9ndVwiOiA5NTA1MCxcblx0XCIuL2d1LmpzXCI6IDk1MDUwLFxuXHRcIi4vaGVcIjogMTE3MTMsXG5cdFwiLi9oZS5qc1wiOiAxMTcxMyxcblx0XCIuL2hpXCI6IDQzODYxLFxuXHRcIi4vaGkuanNcIjogNDM4NjEsXG5cdFwiLi9oclwiOiAyNjMwOCxcblx0XCIuL2hyLmpzXCI6IDI2MzA4LFxuXHRcIi4vaHVcIjogOTA2MDksXG5cdFwiLi9odS5qc1wiOiA5MDYwOSxcblx0XCIuL2h5LWFtXCI6IDE3MTYwLFxuXHRcIi4vaHktYW0uanNcIjogMTcxNjAsXG5cdFwiLi9pZFwiOiA3NDA2Myxcblx0XCIuL2lkLmpzXCI6IDc0MDYzLFxuXHRcIi4vaXNcIjogODkzNzQsXG5cdFwiLi9pcy5qc1wiOiA4OTM3NCxcblx0XCIuL2l0XCI6IDg4MzgzLFxuXHRcIi4vaXQtY2hcIjogMjE4MjcsXG5cdFwiLi9pdC1jaC5qc1wiOiAyMTgyNyxcblx0XCIuL2l0LmpzXCI6IDg4MzgzLFxuXHRcIi4vamFcIjogMjM4MjcsXG5cdFwiLi9qYS5qc1wiOiAyMzgyNyxcblx0XCIuL2p2XCI6IDg5NzIyLFxuXHRcIi4vanYuanNcIjogODk3MjIsXG5cdFwiLi9rYVwiOiA0MTc5NCxcblx0XCIuL2thLmpzXCI6IDQxNzk0LFxuXHRcIi4va2tcIjogMjcwODgsXG5cdFwiLi9ray5qc1wiOiAyNzA4OCxcblx0XCIuL2ttXCI6IDk2ODcwLFxuXHRcIi4va20uanNcIjogOTY4NzAsXG5cdFwiLi9rblwiOiA4NDQ1MSxcblx0XCIuL2tuLmpzXCI6IDg0NDUxLFxuXHRcIi4va29cIjogNjMxNjQsXG5cdFwiLi9rby5qc1wiOiA2MzE2NCxcblx0XCIuL2t1XCI6IDk4MTc0LFxuXHRcIi4va3Uta21yXCI6IDYxODEsXG5cdFwiLi9rdS1rbXIuanNcIjogNjE4MSxcblx0XCIuL2t1LmpzXCI6IDk4MTc0LFxuXHRcIi4va3lcIjogNzg0NzQsXG5cdFwiLi9reS5qc1wiOiA3ODQ3NCxcblx0XCIuL2xiXCI6IDc5NjgwLFxuXHRcIi4vbGIuanNcIjogNzk2ODAsXG5cdFwiLi9sb1wiOiAxNTg2Nyxcblx0XCIuL2xvLmpzXCI6IDE1ODY3LFxuXHRcIi4vbHRcIjogNDU3NjYsXG5cdFwiLi9sdC5qc1wiOiA0NTc2Nixcblx0XCIuL2x2XCI6IDY5NTMyLFxuXHRcIi4vbHYuanNcIjogNjk1MzIsXG5cdFwiLi9tZVwiOiA1ODA3Nixcblx0XCIuL21lLmpzXCI6IDU4MDc2LFxuXHRcIi4vbWlcIjogNDE4NDgsXG5cdFwiLi9taS5qc1wiOiA0MTg0OCxcblx0XCIuL21rXCI6IDMwMzA2LFxuXHRcIi4vbWsuanNcIjogMzAzMDYsXG5cdFwiLi9tbFwiOiA3MzczOSxcblx0XCIuL21sLmpzXCI6IDczNzM5LFxuXHRcIi4vbW5cIjogOTkwNTMsXG5cdFwiLi9tbi5qc1wiOiA5OTA1Myxcblx0XCIuL21yXCI6IDg2MTY5LFxuXHRcIi4vbXIuanNcIjogODYxNjksXG5cdFwiLi9tc1wiOiA3MzM4Nixcblx0XCIuL21zLW15XCI6IDkyMjk3LFxuXHRcIi4vbXMtbXkuanNcIjogOTIyOTcsXG5cdFwiLi9tcy5qc1wiOiA3MzM4Nixcblx0XCIuL210XCI6IDc3MDc1LFxuXHRcIi4vbXQuanNcIjogNzcwNzUsXG5cdFwiLi9teVwiOiA3MjI2NCxcblx0XCIuL215LmpzXCI6IDcyMjY0LFxuXHRcIi4vbmJcIjogMjIyNzQsXG5cdFwiLi9uYi5qc1wiOiAyMjI3NCxcblx0XCIuL25lXCI6IDgyMzUsXG5cdFwiLi9uZS5qc1wiOiA4MjM1LFxuXHRcIi4vbmxcIjogOTI1NzIsXG5cdFwiLi9ubC1iZVwiOiA0Mzc4NCxcblx0XCIuL25sLWJlLmpzXCI6IDQzNzg0LFxuXHRcIi4vbmwuanNcIjogOTI1NzIsXG5cdFwiLi9ublwiOiA1NDU2Nixcblx0XCIuL25uLmpzXCI6IDU0NTY2LFxuXHRcIi4vb2MtbG5jXCI6IDY5MzMwLFxuXHRcIi4vb2MtbG5jLmpzXCI6IDY5MzMwLFxuXHRcIi4vcGEtaW5cIjogMjk4NDksXG5cdFwiLi9wYS1pbi5qc1wiOiAyOTg0OSxcblx0XCIuL3BsXCI6IDk0NDE4LFxuXHRcIi4vcGwuanNcIjogOTQ0MTgsXG5cdFwiLi9wdFwiOiA3OTgzNCxcblx0XCIuL3B0LWJyXCI6IDQ4MzAzLFxuXHRcIi4vcHQtYnIuanNcIjogNDgzMDMsXG5cdFwiLi9wdC5qc1wiOiA3OTgzNCxcblx0XCIuL3JvXCI6IDI0NDU3LFxuXHRcIi4vcm8uanNcIjogMjQ0NTcsXG5cdFwiLi9ydVwiOiA4MjI3MSxcblx0XCIuL3J1LmpzXCI6IDgyMjcxLFxuXHRcIi4vc2RcIjogMTIyMSxcblx0XCIuL3NkLmpzXCI6IDEyMjEsXG5cdFwiLi9zZVwiOiAzMzQ3OCxcblx0XCIuL3NlLmpzXCI6IDMzNDc4LFxuXHRcIi4vc2lcIjogMTc1MzgsXG5cdFwiLi9zaS5qc1wiOiAxNzUzOCxcblx0XCIuL3NrXCI6IDU3ODQsXG5cdFwiLi9zay5qc1wiOiA1Nzg0LFxuXHRcIi4vc2xcIjogNDY2MzcsXG5cdFwiLi9zbC5qc1wiOiA0NjYzNyxcblx0XCIuL3NxXCI6IDg2Nzk0LFxuXHRcIi4vc3EuanNcIjogODY3OTQsXG5cdFwiLi9zclwiOiA0NTcxOSxcblx0XCIuL3NyLWN5cmxcIjogMzMyMixcblx0XCIuL3NyLWN5cmwuanNcIjogMzMyMixcblx0XCIuL3NyLmpzXCI6IDQ1NzE5LFxuXHRcIi4vc3NcIjogNTYwMDAsXG5cdFwiLi9zcy5qc1wiOiA1NjAwMCxcblx0XCIuL3N2XCI6IDQxMDExLFxuXHRcIi4vc3YuanNcIjogNDEwMTEsXG5cdFwiLi9zd1wiOiA0MDc0OCxcblx0XCIuL3N3LmpzXCI6IDQwNzQ4LFxuXHRcIi4vdGFcIjogMTEwMjUsXG5cdFwiLi90YS5qc1wiOiAxMTAyNSxcblx0XCIuL3RlXCI6IDExODg1LFxuXHRcIi4vdGUuanNcIjogMTE4ODUsXG5cdFwiLi90ZXRcIjogMjg4NjEsXG5cdFwiLi90ZXQuanNcIjogMjg4NjEsXG5cdFwiLi90Z1wiOiA4NjU3MSxcblx0XCIuL3RnLmpzXCI6IDg2NTcxLFxuXHRcIi4vdGhcIjogNTU4MDIsXG5cdFwiLi90aC5qc1wiOiA1NTgwMixcblx0XCIuL3RrXCI6IDU5NTI3LFxuXHRcIi4vdGsuanNcIjogNTk1MjcsXG5cdFwiLi90bC1waFwiOiAyOTIzMSxcblx0XCIuL3RsLXBoLmpzXCI6IDI5MjMxLFxuXHRcIi4vdGxoXCI6IDMxMDUyLFxuXHRcIi4vdGxoLmpzXCI6IDMxMDUyLFxuXHRcIi4vdHJcIjogODUwOTYsXG5cdFwiLi90ci5qc1wiOiA4NTA5Nixcblx0XCIuL3R6bFwiOiA3OTg0Nixcblx0XCIuL3R6bC5qc1wiOiA3OTg0Nixcblx0XCIuL3R6bVwiOiA4MTc2NSxcblx0XCIuL3R6bS1sYXRuXCI6IDk3NzExLFxuXHRcIi4vdHptLWxhdG4uanNcIjogOTc3MTEsXG5cdFwiLi90em0uanNcIjogODE3NjUsXG5cdFwiLi91Zy1jblwiOiA0ODQxNCxcblx0XCIuL3VnLWNuLmpzXCI6IDQ4NDE0LFxuXHRcIi4vdWtcIjogMTY2MTgsXG5cdFwiLi91ay5qc1wiOiAxNjYxOCxcblx0XCIuL3VyXCI6IDU3Nzc3LFxuXHRcIi4vdXIuanNcIjogNTc3NzcsXG5cdFwiLi91elwiOiA1NzYwOSxcblx0XCIuL3V6LWxhdG5cIjogNzI0NzUsXG5cdFwiLi91ei1sYXRuLmpzXCI6IDcyNDc1LFxuXHRcIi4vdXouanNcIjogNTc2MDksXG5cdFwiLi92aVwiOiAyMTEzNSxcblx0XCIuL3ZpLmpzXCI6IDIxMTM1LFxuXHRcIi4veC1wc2V1ZG9cIjogNjQwNTEsXG5cdFwiLi94LXBzZXVkby5qc1wiOiA2NDA1MSxcblx0XCIuL3lvXCI6IDgyMjE4LFxuXHRcIi4veW8uanNcIjogODIyMTgsXG5cdFwiLi96aC1jblwiOiA1MjY0OCxcblx0XCIuL3poLWNuLmpzXCI6IDUyNjQ4LFxuXHRcIi4vemgtaGtcIjogMTYzMixcblx0XCIuL3poLWhrLmpzXCI6IDE2MzIsXG5cdFwiLi96aC1tb1wiOiAzMTU0MSxcblx0XCIuL3poLW1vLmpzXCI6IDMxNTQxLFxuXHRcIi4vemgtdHdcIjogNTAzMDQsXG5cdFwiLi96aC10dy5qc1wiOiA1MDMwNFxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IDM1MzU4OyIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIhZnVuY3Rpb24oZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9ZSgpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxlKTtlbHNleyhcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLm51bWJybz1lKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBhKG8sdSxjKXtmdW5jdGlvbiBzKHQsZSl7aWYoIXVbdF0pe2lmKCFvW3RdKXt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZyKXJldHVybiByKHQsITApO2lmKGwpcmV0dXJuIGwodCwhMCk7dmFyIG49bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIit0K1wiJ1wiKTt0aHJvdyBuLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsbn12YXIgaT11W3RdPXtleHBvcnRzOnt9fTtvW3RdWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3JldHVybiBzKG9bdF1bMV1bZV18fGUpfSxpLGkuZXhwb3J0cyxhLG8sdSxjKX1yZXR1cm4gdVt0XS5leHBvcnRzfWZvcih2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGMubGVuZ3RoO2UrKylzKGNbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSxyLHQpeyFmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdCxrPS9eLT8oPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/JC9pLF89TWF0aC5jZWlsLEw9TWF0aC5mbG9vcixUPVwiW0JpZ051bWJlciBFcnJvcl0gXCIsUD1UK1wiTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25pZmljYW50IGRpZ2l0czogXCIsVT0xZTE0LGo9MTQsQz05MDA3MTk5MjU0NzQwOTkxLFI9WzEsMTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSxJPTFlNywkPTFlOTtmdW5jdGlvbiBHKGUpe3ZhciB0PTB8ZTtyZXR1cm4gMDxlfHxlPT09dD90OnQtMX1mdW5jdGlvbiBWKGUpe2Zvcih2YXIgdCxyLG49MSxpPWUubGVuZ3RoLGE9ZVswXStcIlwiO248aTspe2Zvcih0PWVbbisrXStcIlwiLHI9ai10Lmxlbmd0aDtyLS07dD1cIjBcIit0KTthKz10fWZvcihpPWEubGVuZ3RoOzQ4PT09YS5jaGFyQ29kZUF0KC0taSk7KTtyZXR1cm4gYS5zbGljZSgwLGkrMXx8MSl9ZnVuY3Rpb24gcShlLHQpe3ZhciByLG4saT1lLmMsYT10LmMsbz1lLnMsdT10LnMsYz1lLmUscz10LmU7aWYoIW98fCF1KXJldHVybiBudWxsO2lmKHI9aSYmIWlbMF0sbj1hJiYhYVswXSxyfHxuKXJldHVybiByP24/MDotdTpvO2lmKG8hPXUpcmV0dXJuIG87aWYocj1vPDAsbj1jPT1zLCFpfHwhYSlyZXR1cm4gbj8wOiFpXnI/MTotMTtpZighbilyZXR1cm4gczxjXnI/MTotMTtmb3IodT0oYz1pLmxlbmd0aCk8KHM9YS5sZW5ndGgpP2M6cyxvPTA7bzx1O28rKylpZihpW29dIT1hW29dKXJldHVybiBpW29dPmFbb11ecj8xOi0xO3JldHVybiBjPT1zPzA6czxjXnI/MTotMX1mdW5jdGlvbiBaKGUsdCxyLG4pe2lmKGU8dHx8cjxlfHxlIT09KGU8MD9fKGUpOkwoZSkpKXRocm93IEVycm9yKFQrKG58fFwiQXJndW1lbnRcIikrKFwibnVtYmVyXCI9PXR5cGVvZiBlP2U8dHx8cjxlP1wiIG91dCBvZiByYW5nZTogXCI6XCIgbm90IGFuIGludGVnZXI6IFwiOlwiIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6IFwiKStTdHJpbmcoZSkpfWZ1bmN0aW9uIHooZSl7dmFyIHQ9ZS5jLmxlbmd0aC0xO3JldHVybiBHKGUuZS9qKT09dCYmZS5jW3RdJTIhPTB9ZnVuY3Rpb24gVyhlLHQpe3JldHVybigxPGUubGVuZ3RoP2UuY2hhckF0KDApK1wiLlwiK2Uuc2xpY2UoMSk6ZSkrKHQ8MD9cImVcIjpcImUrXCIpK3R9ZnVuY3Rpb24gSChlLHQscil7dmFyIG4saTtpZih0PDApe2ZvcihpPXIrXCIuXCI7Kyt0O2krPXIpO2U9aStlfWVsc2UgaWYoKyt0PihuPWUubGVuZ3RoKSl7Zm9yKGk9cix0LT1uOy0tdDtpKz1yKTtlKz1pfWVsc2UgdDxuJiYoZT1lLnNsaWNlKDAsdCkrXCIuXCIrZS5zbGljZSh0KSk7cmV0dXJuIGV9KHQ9ZnVuY3Rpb24gZSh0KXt2YXIgeSxmLHAscixzLG8sdSxjLGwsZyxuPUEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpBLHRvU3RyaW5nOm51bGwsdmFsdWVPZjpudWxsfSxkPW5ldyBBKDEpLGI9MjAsdz00LGg9LTcsdj0yMSxtPS0xZTcsTz0xZTcseD0hMSxhPTEsUz0wLE49e3ByZWZpeDpcIlwiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOlwiLFwiLGRlY2ltYWxTZXBhcmF0b3I6XCIuXCIsZnJhY3Rpb25Hcm91cFNpemU6MCxmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOlwiwqBcIixzdWZmaXg6XCJcIn0sTT1cIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO2Z1bmN0aW9uIEEoZSx0KXt2YXIgcixuLGksYSxvLHUsYyxzLGw9dGhpcztpZighKGwgaW5zdGFuY2VvZiBBKSlyZXR1cm4gbmV3IEEoZSx0KTtpZihudWxsPT10KXtpZihlIGluc3RhbmNlb2YgQSlyZXR1cm4gbC5zPWUucyxsLmU9ZS5lLHZvaWQobC5jPShlPWUuYyk/ZS5zbGljZSgpOmUpO2lmKCh1PVwibnVtYmVyXCI9PXR5cGVvZiBlKSYmMCplPT0wKXtpZihsLnM9MS9lPDA/KGU9LWUsLTEpOjEsZT09PX5+ZSl7Zm9yKGE9MCxvPWU7MTA8PW87by89MTAsYSsrKTtyZXR1cm4gbC5lPWEsdm9pZChsLmM9W2VdKX1zPVN0cmluZyhlKX1lbHNle2lmKHM9U3RyaW5nKGUpLCFrLnRlc3QocykpcmV0dXJuIHAobCxzLHUpO2wucz00NT09cy5jaGFyQ29kZUF0KDApPyhzPXMuc2xpY2UoMSksLTEpOjF9LTE8KGE9cy5pbmRleE9mKFwiLlwiKSkmJihzPXMucmVwbGFjZShcIi5cIixcIlwiKSksMDwobz1zLnNlYXJjaCgvZS9pKSk/KGE8MCYmKGE9byksYSs9K3Muc2xpY2UobysxKSxzPXMuc3Vic3RyaW5nKDAsbykpOmE8MCYmKGE9cy5sZW5ndGgpfWVsc2V7aWYoWih0LDIsTS5sZW5ndGgsXCJCYXNlXCIpLHM9U3RyaW5nKGUpLDEwPT10KXJldHVybiBFKGw9bmV3IEEoZSBpbnN0YW5jZW9mIEE/ZTpzKSxiK2wuZSsxLHcpO2lmKHU9XCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKDAqZSE9MClyZXR1cm4gcChsLHMsdSx0KTtpZihsLnM9MS9lPDA/KHM9cy5zbGljZSgxKSwtMSk6MSxBLkRFQlVHJiYxNTxzLnJlcGxhY2UoL14wXFwuMCp8XFwuLyxcIlwiKS5sZW5ndGgpdGhyb3cgRXJyb3IoUCtlKTt1PSExfWVsc2UgbC5zPTQ1PT09cy5jaGFyQ29kZUF0KDApPyhzPXMuc2xpY2UoMSksLTEpOjE7Zm9yKHI9TS5zbGljZSgwLHQpLGE9bz0wLGM9cy5sZW5ndGg7bzxjO28rKylpZihyLmluZGV4T2Yobj1zLmNoYXJBdChvKSk8MCl7aWYoXCIuXCI9PW4pe2lmKGE8byl7YT1jO2NvbnRpbnVlfX1lbHNlIGlmKCFpJiYocz09cy50b1VwcGVyQ2FzZSgpJiYocz1zLnRvTG93ZXJDYXNlKCkpfHxzPT1zLnRvTG93ZXJDYXNlKCkmJihzPXMudG9VcHBlckNhc2UoKSkpKXtpPSEwLG89LTEsYT0wO2NvbnRpbnVlfXJldHVybiBwKGwsU3RyaW5nKGUpLHUsdCl9LTE8KGE9KHM9ZihzLHQsMTAsbC5zKSkuaW5kZXhPZihcIi5cIikpP3M9cy5yZXBsYWNlKFwiLlwiLFwiXCIpOmE9cy5sZW5ndGh9Zm9yKG89MDs0OD09PXMuY2hhckNvZGVBdChvKTtvKyspO2ZvcihjPXMubGVuZ3RoOzQ4PT09cy5jaGFyQ29kZUF0KC0tYyk7KTtpZihzPXMuc2xpY2UobywrK2MpKXtpZihjLT1vLHUmJkEuREVCVUcmJjE1PGMmJihDPGV8fGUhPT1MKGUpKSl0aHJvdyBFcnJvcihQK2wucyplKTtpZihPPChhPWEtby0xKSlsLmM9bC5lPW51bGw7ZWxzZSBpZihhPG0pbC5jPVtsLmU9MF07ZWxzZXtpZihsLmU9YSxsLmM9W10sbz0oYSsxKSVqLGE8MCYmKG8rPWopLG88Yyl7Zm9yKG8mJmwuYy5wdXNoKCtzLnNsaWNlKDAsbykpLGMtPWo7bzxjOylsLmMucHVzaCgrcy5zbGljZShvLG8rPWopKTtzPXMuc2xpY2Uobyksbz1qLXMubGVuZ3RofWVsc2Ugby09Yztmb3IoO28tLTtzKz1cIjBcIik7bC5jLnB1c2goK3MpfX1lbHNlIGwuYz1bbC5lPTBdfWZ1bmN0aW9uIGkoZSx0LHIsbil7dmFyIGksYSxvLHUsYztpZihudWxsPT1yP3I9dzpaKHIsMCw4KSwhZS5jKXJldHVybiBlLnRvU3RyaW5nKCk7aWYoaT1lLmNbMF0sbz1lLmUsbnVsbD09dCljPVYoZS5jKSxjPTE9PW58fDI9PW4mJihvPD1ofHx2PD1vKT9XKGMsbyk6SChjLG8sXCIwXCIpO2Vsc2UgaWYoYT0oZT1FKG5ldyBBKGUpLHQscikpLmUsdT0oYz1WKGUuYykpLmxlbmd0aCwxPT1ufHwyPT1uJiYodDw9YXx8YTw9aCkpe2Zvcig7dTx0O2MrPVwiMFwiLHUrKyk7Yz1XKGMsYSl9ZWxzZSBpZih0LT1vLGM9SChjLGEsXCIwXCIpLHU8YSsxKXtpZigwPC0tdClmb3IoYys9XCIuXCI7dC0tO2MrPVwiMFwiKTt9ZWxzZSBpZigwPCh0Kz1hLXUpKWZvcihhKzE9PXUmJihjKz1cIi5cIik7dC0tO2MrPVwiMFwiKTtyZXR1cm4gZS5zPDAmJmk/XCItXCIrYzpjfWZ1bmN0aW9uIEIoZSx0KXtmb3IodmFyIHIsbj0xLGk9bmV3IEEoZVswXSk7bjxlLmxlbmd0aDtuKyspe2lmKCEocj1uZXcgQShlW25dKSkucyl7aT1yO2JyZWFrfXQuY2FsbChpLHIpJiYoaT1yKX1yZXR1cm4gaX1mdW5jdGlvbiBEKGUsdCxyKXtmb3IodmFyIG49MSxpPXQubGVuZ3RoOyF0Wy0taV07dC5wb3AoKSk7Zm9yKGk9dFswXTsxMDw9aTtpLz0xMCxuKyspO3JldHVybihyPW4rcipqLTEpPk8/ZS5jPWUuZT1udWxsOmUuYz1yPG0/W2UuZT0wXTooZS5lPXIsdCksZX1mdW5jdGlvbiBFKGUsdCxyLG4pe3ZhciBpLGEsbyx1LGMscyxsLGY9ZS5jLHA9UjtpZihmKXtlOntmb3IoaT0xLHU9ZlswXTsxMDw9dTt1Lz0xMCxpKyspO2lmKChhPXQtaSk8MClhKz1qLG89dCxsPShjPWZbcz0wXSkvcFtpLW8tMV0lMTB8MDtlbHNlIGlmKChzPV8oKGErMSkvaikpPj1mLmxlbmd0aCl7aWYoIW4pYnJlYWsgZTtmb3IoO2YubGVuZ3RoPD1zO2YucHVzaCgwKSk7Yz1sPTAsbz0oYSU9aiktaisoaT0xKX1lbHNle2ZvcihjPXU9ZltzXSxpPTE7MTA8PXU7dS89MTAsaSsrKTtsPShvPShhJT1qKS1qK2kpPDA/MDpjL3BbaS1vLTFdJTEwfDB9aWYobj1ufHx0PDB8fG51bGwhPWZbcysxXXx8KG88MD9jOmMlcFtpLW8tMV0pLG49cjw0PyhsfHxuKSYmKDA9PXJ8fHI9PShlLnM8MD8zOjIpKTo1PGx8fDU9PWwmJig0PT1yfHxufHw2PT1yJiYoMDxhPzA8bz9jL3BbaS1vXTowOmZbcy0xXSklMTAmMXx8cj09KGUuczwwPzg6NykpLHQ8MXx8IWZbMF0pcmV0dXJuIGYubGVuZ3RoPTAsbj8odC09ZS5lKzEsZlswXT1wWyhqLXQlaiklal0sZS5lPS10fHwwKTpmWzBdPWUuZT0wLGU7aWYoMD09YT8oZi5sZW5ndGg9cyx1PTEscy0tKTooZi5sZW5ndGg9cysxLHU9cFtqLWFdLGZbc109MDxvP0woYy9wW2ktb10lcFtvXSkqdTowKSxuKWZvcig7Oyl7aWYoMD09cyl7Zm9yKGE9MSxvPWZbMF07MTA8PW87by89MTAsYSsrKTtmb3Iobz1mWzBdKz11LHU9MTsxMDw9bztvLz0xMCx1KyspO2EhPXUmJihlLmUrKyxmWzBdPT1VJiYoZlswXT0xKSk7YnJlYWt9aWYoZltzXSs9dSxmW3NdIT1VKWJyZWFrO2Zbcy0tXT0wLHU9MX1mb3IoYT1mLmxlbmd0aDswPT09ZlstLWFdO2YucG9wKCkpO31lLmU+Tz9lLmM9ZS5lPW51bGw6ZS5lPG0mJihlLmM9W2UuZT0wXSl9cmV0dXJuIGV9ZnVuY3Rpb24gRihlKXt2YXIgdCxyPWUuZTtyZXR1cm4gbnVsbD09PXI/ZS50b1N0cmluZygpOih0PVYoZS5jKSx0PXI8PWh8fHY8PXI/Vyh0LHIpOkgodCxyLFwiMFwiKSxlLnM8MD9cIi1cIit0OnQpfXJldHVybiBBLmNsb25lPWUsQS5ST1VORF9VUD0wLEEuUk9VTkRfRE9XTj0xLEEuUk9VTkRfQ0VJTD0yLEEuUk9VTkRfRkxPT1I9MyxBLlJPVU5EX0hBTEZfVVA9NCxBLlJPVU5EX0hBTEZfRE9XTj01LEEuUk9VTkRfSEFMRl9FVkVOPTYsQS5ST1VORF9IQUxGX0NFSUw9NyxBLlJPVU5EX0hBTEZfRkxPT1I9OCxBLkVVQ0xJRD05LEEuY29uZmlnPUEuc2V0PWZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYobnVsbCE9ZSl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IoVCtcIk9iamVjdCBleHBlY3RlZDogXCIrZSk7aWYoZS5oYXNPd25Qcm9wZXJ0eSh0PVwiREVDSU1BTF9QTEFDRVNcIikmJihaKHI9ZVt0XSwwLCQsdCksYj1yKSxlLmhhc093blByb3BlcnR5KHQ9XCJST1VORElOR19NT0RFXCIpJiYoWihyPWVbdF0sMCw4LHQpLHc9ciksZS5oYXNPd25Qcm9wZXJ0eSh0PVwiRVhQT05FTlRJQUxfQVRcIikmJigocj1lW3RdKSYmci5wb3A/KFooclswXSwtJCwwLHQpLFooclsxXSwwLCQsdCksaD1yWzBdLHY9clsxXSk6KFoociwtJCwkLHQpLGg9LSh2PXI8MD8tcjpyKSkpLGUuaGFzT3duUHJvcGVydHkodD1cIlJBTkdFXCIpKWlmKChyPWVbdF0pJiZyLnBvcClaKHJbMF0sLSQsLTEsdCksWihyWzFdLDEsJCx0KSxtPXJbMF0sTz1yWzFdO2Vsc2V7aWYoWihyLC0kLCQsdCksIXIpdGhyb3cgRXJyb3IoVCt0K1wiIGNhbm5vdCBiZSB6ZXJvOiBcIityKTttPS0oTz1yPDA/LXI6cil9aWYoZS5oYXNPd25Qcm9wZXJ0eSh0PVwiQ1JZUFRPXCIpKXtpZigocj1lW3RdKSE9PSEhcil0aHJvdyBFcnJvcihUK3QrXCIgbm90IHRydWUgb3IgZmFsc2U6IFwiK3IpO2lmKHIpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBjcnlwdG98fCFjcnlwdG98fCFjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYhY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IHg9IXIsRXJyb3IoVCtcImNyeXB0byB1bmF2YWlsYWJsZVwiKTt4PXJ9ZWxzZSB4PXJ9aWYoZS5oYXNPd25Qcm9wZXJ0eSh0PVwiTU9EVUxPX01PREVcIikmJihaKHI9ZVt0XSwwLDksdCksYT1yKSxlLmhhc093blByb3BlcnR5KHQ9XCJQT1dfUFJFQ0lTSU9OXCIpJiYoWihyPWVbdF0sMCwkLHQpLFM9ciksZS5oYXNPd25Qcm9wZXJ0eSh0PVwiRk9STUFUXCIpKXtpZihcIm9iamVjdFwiIT10eXBlb2Yocj1lW3RdKSl0aHJvdyBFcnJvcihUK3QrXCIgbm90IGFuIG9iamVjdDogXCIrcik7Tj1yfWlmKGUuaGFzT3duUHJvcGVydHkodD1cIkFMUEhBQkVUXCIpKXtpZihcInN0cmluZ1wiIT10eXBlb2Yocj1lW3RdKXx8L14uJHxbKy0uXFxzXXwoLikuKlxcMS8udGVzdChyKSl0aHJvdyBFcnJvcihUK3QrXCIgaW52YWxpZDogXCIrcik7TT1yfX1yZXR1cm57REVDSU1BTF9QTEFDRVM6YixST1VORElOR19NT0RFOncsRVhQT05FTlRJQUxfQVQ6W2gsdl0sUkFOR0U6W20sT10sQ1JZUFRPOngsTU9EVUxPX01PREU6YSxQT1dfUFJFQ0lTSU9OOlMsRk9STUFUOk4sQUxQSEFCRVQ6TX19LEEuaXNCaWdOdW1iZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBBfHxlJiYhMD09PWUuX2lzQmlnTnVtYmVyfHwhMX0sQS5tYXhpbXVtPUEubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIEIoYXJndW1lbnRzLG4ubHQpfSxBLm1pbmltdW09QS5taW49ZnVuY3Rpb24oKXtyZXR1cm4gQihhcmd1bWVudHMsbi5ndCl9LEEucmFuZG9tPShyPTkwMDcxOTkyNTQ3NDA5OTIscz1NYXRoLnJhbmRvbSgpKnImMjA5NzE1MT9mdW5jdGlvbigpe3JldHVybiBMKE1hdGgucmFuZG9tKCkqcil9OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgqKDEwNzM3NDE4MjQqTWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRvbSgpfDApfSxmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxhLG89MCx1PVtdLGM9bmV3IEEoZCk7aWYobnVsbD09ZT9lPWI6WihlLDAsJCksaT1fKGUvaikseClpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtmb3IodD1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShpKj0yKSk7bzxpOyk5ZTE1PD0oYT0xMzEwNzIqdFtvXSsodFtvKzFdPj4+MTEpKT8ocj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSksdFtvXT1yWzBdLHRbbysxXT1yWzFdKToodS5wdXNoKGElMWUxNCksbys9Mik7bz1pLzJ9ZWxzZXtpZighY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IHg9ITEsRXJyb3IoVCtcImNyeXB0byB1bmF2YWlsYWJsZVwiKTtmb3IodD1jcnlwdG8ucmFuZG9tQnl0ZXMoaSo9Nyk7bzxpOyk5ZTE1PD0oYT0yODE0NzQ5NzY3MTA2NTYqKDMxJnRbb10pKzEwOTk1MTE2Mjc3NzYqdFtvKzFdKzQyOTQ5NjcyOTYqdFtvKzJdKzE2Nzc3MjE2KnRbbyszXSsodFtvKzRdPDwxNikrKHRbbys1XTw8OCkrdFtvKzZdKT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weSh0LG8pOih1LnB1c2goYSUxZTE0KSxvKz03KTtvPWkvN31pZigheClmb3IoO288aTspKGE9cygpKTw5ZTE1JiYodVtvKytdPWElMWUxNCk7Zm9yKGk9dVstLW9dLGUlPWosaSYmZSYmKGE9UltqLWVdLHVbb109TChpL2EpKmEpOzA9PT11W29dO3UucG9wKCksby0tKTtpZihvPDApdT1bbj0wXTtlbHNle2ZvcihuPS0xOzA9PT11WzBdO3Uuc3BsaWNlKDAsMSksbi09aik7Zm9yKG89MSxhPXVbMF07MTA8PWE7YS89MTAsbysrKTtvPGomJihuLT1qLW8pfXJldHVybiBjLmU9bixjLmM9dSxjfSksQS5zdW09ZnVuY3Rpb24oKXtmb3IodmFyIGU9MSx0PWFyZ3VtZW50cyxyPW5ldyBBKHRbMF0pO2U8dC5sZW5ndGg7KXI9ci5wbHVzKHRbZSsrXSk7cmV0dXJuIHJ9LGY9ZnVuY3Rpb24oKXt2YXIgdj1cIjAxMjM0NTY3ODlcIjtmdW5jdGlvbiBtKGUsdCxyLG4pe2Zvcih2YXIgaSxhLG89WzBdLHU9MCxjPWUubGVuZ3RoO3U8Yzspe2ZvcihhPW8ubGVuZ3RoO2EtLTtvW2FdKj10KTtmb3Iob1swXSs9bi5pbmRleE9mKGUuY2hhckF0KHUrKykpLGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldPnItMSYmKG51bGw9PW9baSsxXSYmKG9baSsxXT0wKSxvW2krMV0rPW9baV0vcnwwLG9baV0lPXIpfXJldHVybiBvLnJldmVyc2UoKX1yZXR1cm4gZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgYSxvLHUsYyxzLGwsZixwLGc9ZS5pbmRleE9mKFwiLlwiKSxoPWIsZD13O2ZvcigwPD1nJiYoYz1TLFM9MCxlPWUucmVwbGFjZShcIi5cIixcIlwiKSxsPShwPW5ldyBBKHQpKS5wb3coZS5sZW5ndGgtZyksUz1jLHAuYz1tKEgoVihsLmMpLGwuZSxcIjBcIiksMTAscix2KSxwLmU9cC5jLmxlbmd0aCksdT1jPShmPW0oZSx0LHIsaT8oYT1NLHYpOihhPXYsTSkpKS5sZW5ndGg7MD09ZlstLWNdO2YucG9wKCkpO2lmKCFmWzBdKXJldHVybiBhLmNoYXJBdCgwKTtpZihnPDA/LS11OihsLmM9ZixsLmU9dSxsLnM9bixmPShsPXkobCxwLGgsZCxyKSkuYyxzPWwucix1PWwuZSksZz1mW289dStoKzFdLGM9ci8yLHM9c3x8bzwwfHxudWxsIT1mW28rMV0scz1kPDQ/KG51bGwhPWd8fHMpJiYoMD09ZHx8ZD09KGwuczwwPzM6MikpOmM8Z3x8Zz09YyYmKDQ9PWR8fHN8fDY9PWQmJjEmZltvLTFdfHxkPT0obC5zPDA/ODo3KSksbzwxfHwhZlswXSllPXM/SChhLmNoYXJBdCgxKSwtaCxhLmNoYXJBdCgwKSk6YS5jaGFyQXQoMCk7ZWxzZXtpZihmLmxlbmd0aD1vLHMpZm9yKC0tcjsrK2ZbLS1vXT5yOylmW29dPTAsb3x8KCsrdSxmPVsxXS5jb25jYXQoZikpO2ZvcihjPWYubGVuZ3RoOyFmWy0tY107KTtmb3IoZz0wLGU9XCJcIjtnPD1jO2UrPWEuY2hhckF0KGZbZysrXSkpO2U9SChlLHUsYS5jaGFyQXQoMCkpfXJldHVybiBlfX0oKSx5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTShlLHQscil7dmFyIG4saSxhLG8sdT0wLGM9ZS5sZW5ndGgscz10JUksbD10L0l8MDtmb3IoZT1lLnNsaWNlKCk7Yy0tOyl1PSgoaT1zKihhPWVbY10lSSkrKG49bCphKyhvPWVbY10vSXwwKSpzKSVJKkkrdSkvcnwwKSsobi9JfDApK2wqbyxlW2NdPWklcjtyZXR1cm4gdSYmKGU9W3VdLmNvbmNhdChlKSksZX1mdW5jdGlvbiBCKGUsdCxyLG4pe3ZhciBpLGE7aWYociE9bilhPW48cj8xOi0xO2Vsc2UgZm9yKGk9YT0wO2k8cjtpKyspaWYoZVtpXSE9dFtpXSl7YT1lW2ldPnRbaV0/MTotMTticmVha31yZXR1cm4gYX1mdW5jdGlvbiBEKGUsdCxyLG4pe2Zvcih2YXIgaT0wO3ItLTspZVtyXS09aSxpPWVbcl08dFtyXT8xOjAsZVtyXT1pKm4rZVtyXS10W3JdO2Zvcig7IWVbMF0mJjE8ZS5sZW5ndGg7ZS5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5jdGlvbihlLHQscixuLGkpe3ZhciBhLG8sdSxjLHMsbCxmLHAsZyxoLGQsdixtLHksYix3LE8seD1lLnM9PXQucz8xOi0xLFM9ZS5jLE49dC5jO2lmKCEoUyYmU1swXSYmTiYmTlswXSkpcmV0dXJuIG5ldyBBKGUucyYmdC5zJiYoUz8hTnx8U1swXSE9TlswXTpOKT9TJiYwPT1TWzBdfHwhTj8wKng6eC8wOk5hTik7Zm9yKGc9KHA9bmV3IEEoeCkpLmM9W10seD1yKyhvPWUuZS10LmUpKzEsaXx8KGk9VSxvPUcoZS5lL2opLUcodC5lL2opLHg9eC9qfDApLHU9MDtOW3VdPT0oU1t1XXx8MCk7dSsrKTtpZihOW3VdPihTW3VdfHwwKSYmby0tLHg8MClnLnB1c2goMSksYz0hMDtlbHNle2Zvcih5PVMubGVuZ3RoLHc9Ti5sZW5ndGgseCs9MiwxPChzPUwoaS8oTlt1PTBdKzEpKSkmJihOPU0oTixzLGkpLFM9TShTLHMsaSksdz1OLmxlbmd0aCx5PVMubGVuZ3RoKSxtPXcsZD0oaD1TLnNsaWNlKDAsdykpLmxlbmd0aDtkPHc7aFtkKytdPTApO089Ti5zbGljZSgpLE89WzBdLmNvbmNhdChPKSxiPU5bMF0sTlsxXT49aS8yJiZiKys7ZG97aWYocz0wLChhPUIoTixoLHcsZCkpPDApe2lmKHY9aFswXSx3IT1kJiYodj12KmkrKGhbMV18fDApKSwxPChzPUwodi9iKSkpZm9yKGk8PXMmJihzPWktMSksZj0obD1NKE4scyxpKSkubGVuZ3RoLGQ9aC5sZW5ndGg7MT09QihsLGgsZixkKTspcy0tLEQobCx3PGY/TzpOLGYsaSksZj1sLmxlbmd0aCxhPTE7ZWxzZSAwPT1zJiYoYT1zPTEpLGY9KGw9Ti5zbGljZSgpKS5sZW5ndGg7aWYoZjxkJiYobD1bMF0uY29uY2F0KGwpKSxEKGgsbCxkLGkpLGQ9aC5sZW5ndGgsLTE9PWEpZm9yKDtCKE4saCx3LGQpPDE7KXMrKyxEKGgsdzxkP086TixkLGkpLGQ9aC5sZW5ndGh9ZWxzZSAwPT09YSYmKHMrKyxoPVswXSk7Z1t1KytdPXMsaFswXT9oW2QrK109U1ttXXx8MDooaD1bU1ttXV0sZD0xKX13aGlsZSgobSsrPHl8fG51bGwhPWhbMF0pJiZ4LS0pO2M9bnVsbCE9aFswXSxnWzBdfHxnLnNwbGljZSgwLDEpfWlmKGk9PVUpe2Zvcih1PTEseD1nWzBdOzEwPD14O3gvPTEwLHUrKyk7RShwLHIrKHAuZT11K28qai0xKSsxLG4sYyl9ZWxzZSBwLmU9byxwLnI9K2M7cmV0dXJuIHB9fSgpLG89L14oLT8pMChbeGJvXSkoPz1cXHdbXFx3Ll0qJCkvaSx1PS9eKFteLl0rKVxcLiQvLGM9L15cXC4oW14uXSspJC8sbD0vXi0/KEluZmluaXR5fE5hTikkLyxnPS9eXFxzKlxcKyg/PVtcXHcuXSl8Xlxccyt8XFxzKyQvZyxwPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpLGE9cj90OnQucmVwbGFjZShnLFwiXCIpO2lmKGwudGVzdChhKSllLnM9aXNOYU4oYSk/bnVsbDphPDA/LTE6MSxlLmM9ZS5lPW51bGw7ZWxzZXtpZighciYmKGE9YS5yZXBsYWNlKG8sZnVuY3Rpb24oZSx0LHIpe3JldHVybiBpPVwieFwiPT0ocj1yLnRvTG93ZXJDYXNlKCkpPzE2OlwiYlwiPT1yPzI6OCxuJiZuIT1pP2U6dH0pLG4mJihpPW4sYT1hLnJlcGxhY2UodSxcIiQxXCIpLnJlcGxhY2UoYyxcIjAuJDFcIikpLHQhPWEpKXJldHVybiBuZXcgQShhLGkpO2lmKEEuREVCVUcpdGhyb3cgRXJyb3IoVCtcIk5vdCBhXCIrKG4/XCIgYmFzZSBcIituOlwiXCIpK1wiIG51bWJlcjogXCIrdCk7ZS5jPWUuZT1lLnM9bnVsbH19LG4uYWJzb2x1dGVWYWx1ZT1uLmFicz1mdW5jdGlvbigpe3ZhciBlPW5ldyBBKHRoaXMpO3JldHVybiBlLnM8MCYmKGUucz0xKSxlfSxuLmNvbXBhcmVkVG89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcSh0aGlzLG5ldyBBKGUsdCkpfSxuLmRlY2ltYWxQbGFjZXM9bi5kcD1mdW5jdGlvbihlLHQpe3ZhciByLG4saTtpZihudWxsIT1lKXJldHVybiBaKGUsMCwkKSxudWxsPT10P3Q9dzpaKHQsMCw4KSxFKG5ldyBBKHRoaXMpLGUrdGhpcy5lKzEsdCk7aWYoIShyPXRoaXMuYykpcmV0dXJuIG51bGw7aWYobj0oKGk9ci5sZW5ndGgtMSktRyh0aGlzLmUvaikpKmosaT1yW2ldKWZvcig7aSUxMD09MDtpLz0xMCxuLS0pO3JldHVybiBuPDAmJihuPTApLG59LG4uZGl2aWRlZEJ5PW4uZGl2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHkodGhpcyxuZXcgQShlLHQpLGIsdyl9LG4uZGl2aWRlZFRvSW50ZWdlckJ5PW4uaWRpdj1mdW5jdGlvbihlLHQpe3JldHVybiB5KHRoaXMsbmV3IEEoZSx0KSwwLDEpfSxuLmV4cG9uZW50aWF0ZWRCeT1uLnBvdz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxhLG8sdSxjLHMsbD10aGlzO2lmKChlPW5ldyBBKGUpKS5jJiYhZS5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcihUK1wiRXhwb25lbnQgbm90IGFuIGludGVnZXI6IFwiK0YoZSkpO2lmKG51bGwhPXQmJih0PW5ldyBBKHQpKSxvPTE0PGUuZSwhbC5jfHwhbC5jWzBdfHwxPT1sLmNbMF0mJiFsLmUmJjE9PWwuYy5sZW5ndGh8fCFlLmN8fCFlLmNbMF0pcmV0dXJuIHM9bmV3IEEoTWF0aC5wb3coK0YobCksbz8yLXooZSk6K0YoZSkpKSx0P3MubW9kKHQpOnM7aWYodT1lLnM8MCx0KXtpZih0LmM/IXQuY1swXTohdC5zKXJldHVybiBuZXcgQShOYU4pOyhuPSF1JiZsLmlzSW50ZWdlcigpJiZ0LmlzSW50ZWdlcigpKSYmKGw9bC5tb2QodCkpfWVsc2V7aWYoOTxlLmUmJigwPGwuZXx8bC5lPC0xfHwoMD09bC5lPzE8bC5jWzBdfHxvJiYyNGU3PD1sLmNbMV06bC5jWzBdPDhlMTN8fG8mJmwuY1swXTw9OTk5OTk3NWU3KSkpcmV0dXJuIGE9bC5zPDAmJnooZSk/LTA6MCwtMTxsLmUmJihhPTEvYSksbmV3IEEodT8xL2E6YSk7UyYmKGE9XyhTL2orMikpfWZvcihjPW8/KHI9bmV3IEEoLjUpLHUmJihlLnM9MSkseihlKSk6KGk9TWF0aC5hYnMoK0YoZSkpKSUyLHM9bmV3IEEoZCk7Oyl7aWYoYyl7aWYoIShzPXMudGltZXMobCkpLmMpYnJlYWs7YT9zLmMubGVuZ3RoPmEmJihzLmMubGVuZ3RoPWEpOm4mJihzPXMubW9kKHQpKX1pZihpKXtpZigwPT09KGk9TChpLzIpKSlicmVhaztjPWklMn1lbHNlIGlmKEUoZT1lLnRpbWVzKHIpLGUuZSsxLDEpLDE0PGUuZSljPXooZSk7ZWxzZXtpZigwPT0oaT0rRihlKSkpYnJlYWs7Yz1pJTJ9bD1sLnRpbWVzKGwpLGE/bC5jJiZsLmMubGVuZ3RoPmEmJihsLmMubGVuZ3RoPWEpOm4mJihsPWwubW9kKHQpKX1yZXR1cm4gbj9zOih1JiYocz1kLmRpdihzKSksdD9zLm1vZCh0KTphP0UocyxTLHcsdm9pZCAwKTpzKX0sbi5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEEodGhpcyk7cmV0dXJuIG51bGw9PWU/ZT13OlooZSwwLDgpLEUodCx0LmUrMSxlKX0sbi5pc0VxdWFsVG89bi5lcT1mdW5jdGlvbihlLHQpe3JldHVybiAwPT09cSh0aGlzLG5ldyBBKGUsdCkpfSxuLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN9LG4uaXNHcmVhdGVyVGhhbj1uLmd0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8cSh0aGlzLG5ldyBBKGUsdCkpfSxuLmlzR3JlYXRlclRoYW5PckVxdWFsVG89bi5ndGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMT09PSh0PXEodGhpcyxuZXcgQShlLHQpKSl8fDA9PT10fSxuLmlzSW50ZWdlcj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiZHKHRoaXMuZS9qKT50aGlzLmMubGVuZ3RoLTJ9LG4uaXNMZXNzVGhhbj1uLmx0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHEodGhpcyxuZXcgQShlLHQpKTwwfSxuLmlzTGVzc1RoYW5PckVxdWFsVG89bi5sdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4tMT09PSh0PXEodGhpcyxuZXcgQShlLHQpKSl8fDA9PT10fSxuLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30sbi5pc05lZ2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSxuLmlzUG9zaXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLnN9LG4uaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9PXRoaXMuY1swXX0sbi5taW51cz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxhLG89dGhpcyx1PW8ucztpZih0PShlPW5ldyBBKGUsdCkpLnMsIXV8fCF0KXJldHVybiBuZXcgQShOYU4pO2lmKHUhPXQpcmV0dXJuIGUucz0tdCxvLnBsdXMoZSk7dmFyIGM9by5lL2oscz1lLmUvaixsPW8uYyxmPWUuYztpZighY3x8IXMpe2lmKCFsfHwhZilyZXR1cm4gbD8oZS5zPS10LGUpOm5ldyBBKGY/bzpOYU4pO2lmKCFsWzBdfHwhZlswXSlyZXR1cm4gZlswXT8oZS5zPS10LGUpOm5ldyBBKGxbMF0/bzozPT13Py0wOjApfWlmKGM9RyhjKSxzPUcocyksbD1sLnNsaWNlKCksdT1jLXMpe2ZvcigoaT0oYT11PDApPyh1PS11LGwpOihzPWMsZikpLnJldmVyc2UoKSx0PXU7dC0tO2kucHVzaCgwKSk7aS5yZXZlcnNlKCl9ZWxzZSBmb3Iobj0oYT0odT1sLmxlbmd0aCk8KHQ9Zi5sZW5ndGgpKT91OnQsdT10PTA7dDxuO3QrKylpZihsW3RdIT1mW3RdKXthPWxbdF08Zlt0XTticmVha31pZihhJiYoaT1sLGw9ZixmPWksZS5zPS1lLnMpLDA8KHQ9KG49Zi5sZW5ndGgpLShyPWwubGVuZ3RoKSkpZm9yKDt0LS07bFtyKytdPTApO2Zvcih0PVUtMTt1PG47KXtpZihsWy0tbl08ZltuXSl7Zm9yKHI9bjtyJiYhbFstLXJdO2xbcl09dCk7LS1sW3JdLGxbbl0rPVV9bFtuXS09ZltuXX1mb3IoOzA9PWxbMF07bC5zcGxpY2UoMCwxKSwtLXMpO3JldHVybiBsWzBdP0QoZSxsLHMpOihlLnM9Mz09dz8tMToxLGUuYz1bZS5lPTBdLGUpfSxuLm1vZHVsbz1uLm1vZD1mdW5jdGlvbihlLHQpe3ZhciByLG4saT10aGlzO3JldHVybiBlPW5ldyBBKGUsdCksIWkuY3x8IWUuc3x8ZS5jJiYhZS5jWzBdP25ldyBBKE5hTik6IWUuY3x8aS5jJiYhaS5jWzBdP25ldyBBKGkpOig5PT1hPyhuPWUucyxlLnM9MSxyPXkoaSxlLDAsMyksZS5zPW4sci5zKj1uKTpyPXkoaSxlLDAsYSksKGU9aS5taW51cyhyLnRpbWVzKGUpKSkuY1swXXx8MSE9YXx8KGUucz1pLnMpLGUpfSxuLm11bHRpcGxpZWRCeT1uLnRpbWVzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLGEsbyx1LGMscyxsLGYscCxnLGgsZCx2LG09dGhpcyx5PW0uYyxiPShlPW5ldyBBKGUsdCkpLmM7aWYoISh5JiZiJiZ5WzBdJiZiWzBdKSlyZXR1cm4hbS5zfHwhZS5zfHx5JiYheVswXSYmIWJ8fGImJiFiWzBdJiYheT9lLmM9ZS5lPWUucz1udWxsOihlLnMqPW0ucyx5JiZiPyhlLmM9WzBdLGUuZT0wKTplLmM9ZS5lPW51bGwpLGU7Zm9yKG49RyhtLmUvaikrRyhlLmUvaiksZS5zKj1tLnMsKGM9eS5sZW5ndGgpPChmPWIubGVuZ3RoKSYmKGg9eSx5PWIsYj1oLGk9YyxjPWYsZj1pKSxpPWMrZixoPVtdO2ktLTtoLnB1c2goMCkpO2ZvcihkPVUsdj1JLGk9ZjswPD0tLWk7KXtmb3Iocj0wLHA9YltpXSV2LGc9YltpXS92fDAsYT1pKyhvPWMpO2k8YTspcj0oKHM9cCoocz15Wy0tb10ldikrKHU9ZypzKyhsPXlbb10vdnwwKSpwKSV2KnYraFthXStyKS9kfDApKyh1L3Z8MCkrZypsLGhbYS0tXT1zJWQ7aFthXT1yfXJldHVybiByPysrbjpoLnNwbGljZSgwLDEpLEQoZSxoLG4pfSxuLm5lZ2F0ZWQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgQSh0aGlzKTtyZXR1cm4gZS5zPS1lLnN8fG51bGwsZX0sbi5wbHVzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLGk9bi5zO2lmKHQ9KGU9bmV3IEEoZSx0KSkucywhaXx8IXQpcmV0dXJuIG5ldyBBKE5hTik7aWYoaSE9dClyZXR1cm4gZS5zPS10LG4ubWludXMoZSk7dmFyIGE9bi5lL2osbz1lLmUvaix1PW4uYyxjPWUuYztpZighYXx8IW8pe2lmKCF1fHwhYylyZXR1cm4gbmV3IEEoaS8wKTtpZighdVswXXx8IWNbMF0pcmV0dXJuIGNbMF0/ZTpuZXcgQSh1WzBdP246MCppKX1pZihhPUcoYSksbz1HKG8pLHU9dS5zbGljZSgpLGk9YS1vKXtmb3IoKHI9MDxpPyhvPWEsYyk6KGk9LWksdSkpLnJldmVyc2UoKTtpLS07ci5wdXNoKDApKTtyLnJldmVyc2UoKX1mb3IoKGk9dS5sZW5ndGgpLSh0PWMubGVuZ3RoKTwwJiYocj1jLGM9dSx1PXIsdD1pKSxpPTA7dDspaT0odVstLXRdPXVbdF0rY1t0XStpKS9VfDAsdVt0XT1VPT09dVt0XT8wOnVbdF0lVTtyZXR1cm4gaSYmKHU9W2ldLmNvbmNhdCh1KSwrK28pLEQoZSx1LG8pfSxuLnByZWNpc2lvbj1uLnNkPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKG51bGwhPWUmJmUhPT0hIWUpcmV0dXJuIFooZSwxLCQpLG51bGw9PXQ/dD13OloodCwwLDgpLEUobmV3IEEodGhpcyksZSx0KTtpZighKHI9dGhpcy5jKSlyZXR1cm4gbnVsbDtpZihuPShpPXIubGVuZ3RoLTEpKmorMSxpPXJbaV0pe2Zvcig7aSUxMD09MDtpLz0xMCxuLS0pO2ZvcihpPXJbMF07MTA8PWk7aS89MTAsbisrKTt9cmV0dXJuIGUmJnRoaXMuZSsxPm4mJihuPXRoaXMuZSsxKSxufSxuLnNoaWZ0ZWRCeT1mdW5jdGlvbihlKXtyZXR1cm4gWihlLC1DLEMpLHRoaXMudGltZXMoXCIxZVwiK2UpfSxuLnNxdWFyZVJvb3Q9bi5zcXJ0PWZ1bmN0aW9uKCl7dmFyIGUsdCxyLG4saSxhPXRoaXMsbz1hLmMsdT1hLnMsYz1hLmUscz1iKzQsbD1uZXcgQShcIjAuNVwiKTtpZigxIT09dXx8IW98fCFvWzBdKXJldHVybiBuZXcgQSghdXx8dTwwJiYoIW98fG9bMF0pP05hTjpvP2E6MS8wKTtpZigocj0wPT0odT1NYXRoLnNxcnQoK0YoYSkpKXx8dT09MS8wPygoKHQ9VihvKSkubGVuZ3RoK2MpJTI9PTAmJih0Kz1cIjBcIiksdT1NYXRoLnNxcnQoK3QpLGM9RygoYysxKS8yKS0oYzwwfHxjJTIpLG5ldyBBKHQ9dT09MS8wP1wiMWVcIitjOih0PXUudG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLHQuaW5kZXhPZihcImVcIikrMSkrYykpOm5ldyBBKHUrXCJcIikpLmNbMF0pZm9yKCh1PShjPXIuZSkrcyk8MyYmKHU9MCk7OylpZihpPXIscj1sLnRpbWVzKGkucGx1cyh5KGEsaSxzLDEpKSksVihpLmMpLnNsaWNlKDAsdSk9PT0odD1WKHIuYykpLnNsaWNlKDAsdSkpe2lmKHIuZTxjJiYtLXUsXCI5OTk5XCIhPSh0PXQuc2xpY2UodS0zLHUrMSkpJiYobnx8XCI0OTk5XCIhPXQpKXsrdCYmKCt0LnNsaWNlKDEpfHxcIjVcIiE9dC5jaGFyQXQoMCkpfHwoRShyLHIuZStiKzIsMSksZT0hci50aW1lcyhyKS5lcShhKSk7YnJlYWt9aWYoIW4mJihFKGksaS5lK2IrMiwwKSxpLnRpbWVzKGkpLmVxKGEpKSl7cj1pO2JyZWFrfXMrPTQsdSs9NCxuPTF9cmV0dXJuIEUocixyLmUrYisxLHcsZSl9LG4udG9FeHBvbmVudGlhbD1mdW5jdGlvbihlLHQpe3JldHVybiBudWxsIT1lJiYoWihlLDAsJCksZSsrKSxpKHRoaXMsZSx0LDEpfSxuLnRvRml4ZWQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmKFooZSwwLCQpLGU9ZSt0aGlzLmUrMSksaSh0aGlzLGUsdCl9LG4udG9Gb3JtYXQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuO2lmKG51bGw9PXIpbnVsbCE9ZSYmdCYmXCJvYmplY3RcIj09dHlwZW9mIHQ/KHI9dCx0PW51bGwpOmUmJlwib2JqZWN0XCI9PXR5cGVvZiBlPyhyPWUsZT10PW51bGwpOnI9TjtlbHNlIGlmKFwib2JqZWN0XCIhPXR5cGVvZiByKXRocm93IEVycm9yKFQrXCJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiBcIityKTtpZihuPXRoaXMudG9GaXhlZChlLHQpLHRoaXMuYyl7dmFyIGksYT1uLnNwbGl0KFwiLlwiKSxvPStyLmdyb3VwU2l6ZSx1PStyLnNlY29uZGFyeUdyb3VwU2l6ZSxjPXIuZ3JvdXBTZXBhcmF0b3J8fFwiXCIscz1hWzBdLGw9YVsxXSxmPXRoaXMuczwwLHA9Zj9zLnNsaWNlKDEpOnMsZz1wLmxlbmd0aDtpZih1JiYoaT1vLG89dSxnLT11PWkpLDA8byYmMDxnKXtmb3IoaT1nJW98fG8scz1wLnN1YnN0cigwLGkpO2k8ZztpKz1vKXMrPWMrcC5zdWJzdHIoaSxvKTswPHUmJihzKz1jK3Auc2xpY2UoaSkpLGYmJihzPVwiLVwiK3MpfW49bD9zKyhyLmRlY2ltYWxTZXBhcmF0b3J8fFwiXCIpKygodT0rci5mcmFjdGlvbkdyb3VwU2l6ZSk/bC5yZXBsYWNlKG5ldyBSZWdFeHAoXCJcXFxcZHtcIit1K1wifVxcXFxCXCIsXCJnXCIpLFwiJCZcIisoci5mcmFjdGlvbkdyb3VwU2VwYXJhdG9yfHxcIlwiKSk6bCk6c31yZXR1cm4oci5wcmVmaXh8fFwiXCIpK24rKHIuc3VmZml4fHxcIlwiKX0sbi50b0ZyYWN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLGEsbyx1LGMscyxsLGYscCxnPXRoaXMsaD1nLmM7aWYobnVsbCE9ZSYmKCEodT1uZXcgQShlKSkuaXNJbnRlZ2VyKCkmJih1LmN8fDEhPT11LnMpfHx1Lmx0KGQpKSl0aHJvdyBFcnJvcihUK1wiQXJndW1lbnQgXCIrKHUuaXNJbnRlZ2VyKCk/XCJvdXQgb2YgcmFuZ2U6IFwiOlwibm90IGFuIGludGVnZXI6IFwiKStGKHUpKTtpZighaClyZXR1cm4gbmV3IEEoZyk7Zm9yKHQ9bmV3IEEoZCkscz1yPW5ldyBBKGQpLG49Yz1uZXcgQShkKSxwPVYoaCksYT10LmU9cC5sZW5ndGgtZy5lLTEsdC5jWzBdPVJbKG89YSVqKTwwP2orbzpvXSxlPSFlfHwwPHUuY29tcGFyZWRUbyh0KT8wPGE/dDpzOnUsbz1PLE89MS8wLHU9bmV3IEEocCksYy5jWzBdPTA7bD15KHUsdCwwLDEpLDEhPShpPXIucGx1cyhsLnRpbWVzKG4pKSkuY29tcGFyZWRUbyhlKTspcj1uLG49aSxzPWMucGx1cyhsLnRpbWVzKGk9cykpLGM9aSx0PXUubWludXMobC50aW1lcyhpPXQpKSx1PWk7cmV0dXJuIGk9eShlLm1pbnVzKHIpLG4sMCwxKSxjPWMucGx1cyhpLnRpbWVzKHMpKSxyPXIucGx1cyhpLnRpbWVzKG4pKSxjLnM9cy5zPWcucyxmPXkocyxuLGEqPTIsdykubWludXMoZykuYWJzKCkuY29tcGFyZWRUbyh5KGMscixhLHcpLm1pbnVzKGcpLmFicygpKTwxP1tzLG5dOltjLHJdLE89byxmfSxuLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuK0YodGhpcyl9LG4udG9QcmVjaXNpb249ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbCE9ZSYmWihlLDEsJCksaSh0aGlzLGUsdCwyKX0sbi50b1N0cmluZz1mdW5jdGlvbihlKXt2YXIgdCxyPXRoaXMsbj1yLnMsaT1yLmU7cmV0dXJuIG51bGw9PT1pP24/KHQ9XCJJbmZpbml0eVwiLG48MCYmKHQ9XCItXCIrdCkpOnQ9XCJOYU5cIjoodD1udWxsPT1lP2k8PWh8fHY8PWk/VyhWKHIuYyksaSk6SChWKHIuYyksaSxcIjBcIik6MTA9PT1lP0goVigocj1FKG5ldyBBKHIpLGIraSsxLHcpKS5jKSxyLmUsXCIwXCIpOihaKGUsMixNLmxlbmd0aCxcIkJhc2VcIiksZihIKFYoci5jKSxpLFwiMFwiKSwxMCxlLG4sITApKSxuPDAmJnIuY1swXSYmKHQ9XCItXCIrdCkpLHR9LG4udmFsdWVPZj1uLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiBGKHRoaXMpfSxuLl9pc0JpZ051bWJlcj0hMCxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3ImJihuW1N5bWJvbC50b1N0cmluZ1RhZ109XCJCaWdOdW1iZXJcIixuW1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKV09bi52YWx1ZU9mKSxudWxsIT10JiZBLnNldCh0KSxBfSgpKS5kZWZhdWx0PXQuQmlnTnVtYmVyPXQsdm9pZCAwIT09ciYmci5leHBvcnRzP3IuZXhwb3J0cz10OihlfHwoZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZj9zZWxmOndpbmRvdyksZS5CaWdOdW1iZXI9dCl9KHRoaXMpfSx7fV0sMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz17bGFuZ3VhZ2VUYWc6XCJlbi1VU1wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczpcIixcIixkZWNpbWFsOlwiLlwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDpcImtcIixtaWxsaW9uOlwibVwiLGJpbGxpb246XCJiXCIsdHJpbGxpb246XCJ0XCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMDtyZXR1cm4gMT09fn4oZSUxMDAvMTApP1widGhcIjoxPT09dD9cInN0XCI6Mj09PXQ/XCJuZFwiOjM9PT10P1wicmRcIjpcInRoXCJ9LGN1cnJlbmN5OntzeW1ib2w6XCIkXCIscG9zaXRpb246XCJwcmVmaXhcIixjb2RlOlwiVVNEXCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6XCJjdXJyZW5jeVwiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDpcImN1cnJlbmN5XCIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dLDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBDKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHU9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXUubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7aT0hMCxhPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09dS5yZXR1cm58fHUucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IGF9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpfSgpfXZhciBSPWUoXCIuL2dsb2JhbFN0YXRlXCIpLG89ZShcIi4vdmFsaWRhdGluZ1wiKSx1PWUoXCIuL3BhcnNpbmdcIiksbj1bXCJCXCIsXCJLQlwiLFwiTUJcIixcIkdCXCIsXCJUQlwiLFwiUEJcIixcIkVCXCIsXCJaQlwiLFwiWUJcIl0sTT17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpuLG1hcmtlcjpcImJkXCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczpbXCJCXCIsXCJLaUJcIixcIk1pQlwiLFwiR2lCXCIsXCJUaUJcIixcIlBpQlwiLFwiRWlCXCIsXCJaaUJcIixcIllpQlwiXSxtYXJrZXI6XCJiXCJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpuLG1hcmtlcjpcImRcIn19LEk9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxmb3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxtYW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVkOiExLHNwYWNlU2VwYXJhdGVkOiExLG5lZ2F0aXZlOlwic2lnblwiLGZvcmNlU2lnbjohMX07ZnVuY3Rpb24gaShlKXt2YXIgdD0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30scj0yPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzJdOnZvaWQgMDtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9dS5wYXJzZUZvcm1hdCh0KSksIW8udmFsaWRhdGVGb3JtYXQodCkpcmV0dXJuXCJFUlJPUjogaW52YWxpZCBmb3JtYXRcIjt2YXIgbj10LnByZWZpeHx8XCJcIixpPXQucG9zdGZpeHx8XCJcIixhPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2godC5vdXRwdXQpe2Nhc2VcImN1cnJlbmN5XCI6cmV0dXJuIHQ9QSh0LFIuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSxmdW5jdGlvbihlLHQscil7dmFyIG49ci5jdXJyZW50Q3VycmVuY3koKSxpPU9iamVjdC5hc3NpZ24oe30sSSx0KSxhPXZvaWQgMCxvPVwiXCIsdT0hIWkudG90YWxMZW5ndGh8fCEhaS5mb3JjZUF2ZXJhZ2V8fGkuYXZlcmFnZSxjPXQuY3VycmVuY3lQb3NpdGlvbnx8bi5wb3NpdGlvbixzPXQuY3VycmVuY3lTeW1ib2x8fG4uc3ltYm9sO2kuc3BhY2VTZXBhcmF0ZWQmJihvPVwiIFwiKTtcImluZml4XCI9PT1jJiYoYT1vK3Mrbyk7dmFyIGw9RCh7aW5zdGFuY2U6ZSxwcm92aWRlZEZvcm1hdDp0LHN0YXRlOnIsZGVjaW1hbFNlcGFyYXRvcjphfSk7XCJwcmVmaXhcIj09PWMmJihsPWUuX3ZhbHVlPDAmJlwic2lnblwiPT09aS5uZWdhdGl2ZT9cIi1cIi5jb25jYXQobykuY29uY2F0KHMpLmNvbmNhdChsLnNsaWNlKDEpKTpzK28rbCk7YyYmXCJwb3N0Zml4XCIhPT1jfHwobD1sKyhvPXU/XCJcIjpvKStzKTtyZXR1cm4gbH0oZSx0LFIpO2Nhc2VcInBlcmNlbnRcIjpyZXR1cm4gdD1BKHQsUi5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQoKSksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9dC5wcmVmaXhTeW1ib2wsYT1EKHtpbnN0YW5jZTpuKDEwMCplLl92YWx1ZSkscHJvdmlkZWRGb3JtYXQ6dCxzdGF0ZTpyfSksbz1PYmplY3QuYXNzaWduKHt9LEksdCk7aWYoaSlyZXR1cm5cIiVcIi5jb25jYXQoby5zcGFjZVNlcGFyYXRlZD9cIiBcIjpcIlwiKS5jb25jYXQoYSk7cmV0dXJuXCJcIi5jb25jYXQoYSkuY29uY2F0KG8uc3BhY2VTZXBhcmF0ZWQ/XCIgXCI6XCJcIixcIiVcIil9KGUsdCxSLHIpO2Nhc2VcImJ5dGVcIjpyZXR1cm4gdD1BKHQsUi5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksaD1lLHY9UixtPXIseT0oZD10KS5iYXNlfHxcImJpbmFyeVwiLGI9TVt5XSx3PUIoaC5fdmFsdWUsYi5zdWZmaXhlcyxiLnNjYWxlKSxPPXcudmFsdWUseD13LnN1ZmZpeCxTPUQoe2luc3RhbmNlOm0oTykscHJvdmlkZWRGb3JtYXQ6ZCxzdGF0ZTp2LGRlZmF1bHRzOnYuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCl9KSxOPXYuY3VycmVudEFiYnJldmlhdGlvbnMoKSxcIlwiLmNvbmNhdChTKS5jb25jYXQoTi5zcGFjZWQ/XCIgXCI6XCJcIikuY29uY2F0KHgpO2Nhc2VcInRpbWVcIjpyZXR1cm4gdD1BKHQsUi5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksbD1lLGY9TWF0aC5mbG9vcihsLl92YWx1ZS82MC82MCkscD1NYXRoLmZsb29yKChsLl92YWx1ZS02MCpmKjYwKS82MCksZz1NYXRoLnJvdW5kKGwuX3ZhbHVlLTYwKmYqNjAtNjAqcCksXCJcIi5jb25jYXQoZixcIjpcIikuY29uY2F0KHA8MTA/XCIwXCI6XCJcIikuY29uY2F0KHAsXCI6XCIpLmNvbmNhdChnPDEwP1wiMFwiOlwiXCIpLmNvbmNhdChnKTtjYXNlXCJvcmRpbmFsXCI6cmV0dXJuIHQ9QSh0LFIuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0KCkpLG49ZSxpPXQsbz0oYT1SKS5jdXJyZW50T3JkaW5hbCgpLHU9T2JqZWN0LmFzc2lnbih7fSxJLGkpLGM9RCh7aW5zdGFuY2U6bixwcm92aWRlZEZvcm1hdDppLHN0YXRlOmF9KSxzPW8obi5fdmFsdWUpLFwiXCIuY29uY2F0KGMpLmNvbmNhdCh1LnNwYWNlU2VwYXJhdGVkP1wiIFwiOlwiXCIpLmNvbmNhdChzKTtjYXNlXCJudW1iZXJcIjpkZWZhdWx0OnJldHVybiBEKHtpbnN0YW5jZTplLHByb3ZpZGVkRm9ybWF0OnQsbnVtYnJvOnJ9KX12YXIgbixpLGEsbyx1LGMsczt2YXIgbCxmLHAsZzt2YXIgaCxkLHYsbSx5LGIsdyxPLHgsUyxOfShlLHQscik7cmV0dXJuIGE9KGE9bithKStpfWZ1bmN0aW9uIEIoZSx0LHIpe3ZhciBuPXRbMF0saT1NYXRoLmFicyhlKTtpZihyPD1pKXtmb3IodmFyIGE9MTthPHQubGVuZ3RoOysrYSl7dmFyIG89TWF0aC5wb3cocixhKSx1PU1hdGgucG93KHIsYSsxKTtpZihvPD1pJiZpPHUpe249dFthXSxlLz1vO2JyZWFrfX1uPT09dFswXSYmKGUvPU1hdGgucG93KHIsdC5sZW5ndGgtMSksbj10W3QubGVuZ3RoLTFdKX1yZXR1cm57dmFsdWU6ZSxzdWZmaXg6bn19ZnVuY3Rpb24gcChlKXtmb3IodmFyIHQ9XCJcIixyPTA7cjxlO3IrKyl0Kz1cIjBcIjtyZXR1cm4gdH1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuLTEhPT1lLnRvU3RyaW5nKCkuaW5kZXhPZihcImVcIik/ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnRvU3RyaW5nKCksbj1DKHIuc3BsaXQoXCJlXCIpLDIpLGk9blswXSxhPW5bMV0sbz1DKGkuc3BsaXQoXCIuXCIpLDIpLHU9b1swXSxjPW9bMV0scz12b2lkIDA9PT1jP1wiXCI6YztpZigwPCthKXI9dStzK3AoYS1zLmxlbmd0aCk7ZWxzZXt2YXIgbD1cIi5cIjtsPSt1PDA/XCItMFwiLmNvbmNhdChsKTpcIjBcIi5jb25jYXQobCk7dmFyIGY9KHAoLWEtMSkrTWF0aC5hYnModSkrcykuc3Vic3RyKDAsdCk7Zi5sZW5ndGg8dCYmKGYrPXAodC1mLmxlbmd0aCkpLHI9bCtmfXJldHVybiAwPCthJiYwPHQmJihyKz1cIi5cIi5jb25jYXQocCh0KSkpLHJ9KGUsdCk6KE1hdGgucm91bmQoK1wiXCIuY29uY2F0KGUsXCJlK1wiKS5jb25jYXQodCkpL01hdGgucG93KDEwLHQpKS50b0ZpeGVkKHQpfWZ1bmN0aW9uIEQoZSl7dmFyIHQ9ZS5pbnN0YW5jZSxyPWUucHJvdmlkZWRGb3JtYXQsbj1lLnN0YXRlLGk9dm9pZCAwPT09bj9SOm4sYT1lLmRlY2ltYWxTZXBhcmF0b3Isbz1lLmRlZmF1bHRzLHU9dm9pZCAwPT09bz9pLmN1cnJlbnREZWZhdWx0cygpOm8sYz10Ll92YWx1ZTtpZigwPT09YyYmaS5oYXNaZXJvRm9ybWF0KCkpcmV0dXJuIGkuZ2V0WmVyb0Zvcm1hdCgpO2lmKCFpc0Zpbml0ZShjKSlyZXR1cm4gYy50b1N0cmluZygpO3ZhciBzLGwsZixwLGcsaCxkLHYsbT1PYmplY3QuYXNzaWduKHt9LEksdSxyKSx5PW0udG90YWxMZW5ndGgsYj15PzA6bS5jaGFyYWN0ZXJpc3RpYyx3PW0ub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYyxPPW0uZm9yY2VBdmVyYWdlLHg9ISF5fHwhIU98fG0uYXZlcmFnZSxTPXk/LTE6eCYmdm9pZCAwPT09ci5tYW50aXNzYT8wOm0ubWFudGlzc2EsTj0heSYmKHZvaWQgMD09PXIub3B0aW9uYWxNYW50aXNzYT8tMT09PVM6bS5vcHRpb25hbE1hbnRpc3NhKSxNPW0udHJpbU1hbnRpc3NhLEI9bS50aG91c2FuZFNlcGFyYXRlZCxEPW0uc3BhY2VTZXBhcmF0ZWQsQT1tLm5lZ2F0aXZlLEU9bS5mb3JjZVNpZ24sRj1tLmV4cG9uZW50aWFsLGs9XCJcIjtpZih4KXt2YXIgXz1mdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlLHI9ZS5mb3JjZUF2ZXJhZ2Usbj1lLmFiYnJldmlhdGlvbnMsaT1lLnNwYWNlU2VwYXJhdGVkLGE9dm9pZCAwIT09aSYmaSxvPWUudG90YWxMZW5ndGgsdT12b2lkIDA9PT1vPzA6byxjPVwiXCIscz1NYXRoLmFicyh0KSxsPS0xO2lmKHM+PU1hdGgucG93KDEwLDEyKSYmIXJ8fFwidHJpbGxpb25cIj09PXI/KGM9bi50cmlsbGlvbix0Lz1NYXRoLnBvdygxMCwxMikpOnM8TWF0aC5wb3coMTAsMTIpJiZzPj1NYXRoLnBvdygxMCw5KSYmIXJ8fFwiYmlsbGlvblwiPT09cj8oYz1uLmJpbGxpb24sdC89TWF0aC5wb3coMTAsOSkpOnM8TWF0aC5wb3coMTAsOSkmJnM+PU1hdGgucG93KDEwLDYpJiYhcnx8XCJtaWxsaW9uXCI9PT1yPyhjPW4ubWlsbGlvbix0Lz1NYXRoLnBvdygxMCw2KSk6KHM8TWF0aC5wb3coMTAsNikmJnM+PU1hdGgucG93KDEwLDMpJiYhcnx8XCJ0aG91c2FuZFwiPT09cikmJihjPW4udGhvdXNhbmQsdC89TWF0aC5wb3coMTAsMykpLGMmJihjPShhP1wiIFwiOlwiXCIpK2MpLHUpe3ZhciBmPXQudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMF07bD1NYXRoLm1heCh1LWYubGVuZ3RoLDApfXJldHVybnt2YWx1ZTp0LGFiYnJldmlhdGlvbjpjLG1hbnRpc3NhUHJlY2lzaW9uOmx9fSh7dmFsdWU6Yyxmb3JjZUF2ZXJhZ2U6TyxhYmJyZXZpYXRpb25zOmkuY3VycmVudEFiYnJldmlhdGlvbnMoKSxzcGFjZVNlcGFyYXRlZDpELHRvdGFsTGVuZ3RoOnl9KTtjPV8udmFsdWUsays9Xy5hYmJyZXZpYXRpb24seSYmKFM9Xy5tYW50aXNzYVByZWNpc2lvbil9aWYoRil7dmFyIEw9KGw9KHM9e3ZhbHVlOmMsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246Yn0pLnZhbHVlLGY9cy5jaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbixwPXZvaWQgMD09PWY/MDpmLGc9QyhsLnRvRXhwb25lbnRpYWwoKS5zcGxpdChcImVcIiksMiksaD1nWzBdLGQ9Z1sxXSx2PStoLHAmJjE8cCYmKHYqPU1hdGgucG93KDEwLHAtMSksZD0wPD0oZD0rZC0ocC0xKSk/XCIrXCIuY29uY2F0KGQpOmQpLHt2YWx1ZTp2LGFiYnJldmlhdGlvbjpcImVcIi5jb25jYXQoZCl9KTtjPUwudmFsdWUsaz1MLmFiYnJldmlhdGlvbitrfXZhciBULFAsVSxqPWZ1bmN0aW9uKGUsdCxyLG4saSl7aWYoLTE9PT1uKXJldHVybiBlO3ZhciBhPSQodCxuKSxvPUMoYS50b1N0cmluZygpLnNwbGl0KFwiLlwiKSwyKSx1PW9bMF0sYz1vWzFdLHM9dm9pZCAwPT09Yz9cIlwiOmM7aWYocy5tYXRjaCgvXjArJC8pJiYocnx8aSkpcmV0dXJuIHU7dmFyIGw9cy5tYXRjaCgvMCskLyk7cmV0dXJuIGkmJmw/XCJcIi5jb25jYXQodSxcIi5cIikuY29uY2F0KHMudG9TdHJpbmcoKS5zbGljZSgwLGwuaW5kZXgpKTphLnRvU3RyaW5nKCl9KGMudG9TdHJpbmcoKSxjLE4sUyxNKTtyZXR1cm4gaj1mdW5jdGlvbihlLHQscixuLGkpe3ZhciBhPW4uY3VycmVudERlbGltaXRlcnMoKSxvPWEudGhvdXNhbmRzO2k9aXx8YS5kZWNpbWFsO3ZhciB1PWEudGhvdXNhbmRzU2l6ZXx8MyxjPWUudG9TdHJpbmcoKSxzPWMuc3BsaXQoXCIuXCIpWzBdLGw9Yy5zcGxpdChcIi5cIilbMV07cmV0dXJuIHImJih0PDAmJihzPXMuc2xpY2UoMSkpLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49MCxpPWU7MDxpO2ktLSluPT09dCYmKHIudW5zaGlmdChpKSxuPTApLG4rKztyZXR1cm4gcn0ocy5sZW5ndGgsdSkuZm9yRWFjaChmdW5jdGlvbihlLHQpe3M9cy5zbGljZSgwLGUrdCkrbytzLnNsaWNlKGUrdCl9KSx0PDAmJihzPVwiLVwiLmNvbmNhdChzKSkpLGM9bD9zK2krbDpzfShqPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUsYT1DKGkudG9TdHJpbmcoKS5zcGxpdChcIi5cIiksMiksbz1hWzBdLHU9YVsxXTtpZihvLm1hdGNoKC9eLT8wJC8pJiZyKXJldHVybiB1P1wiXCIuY29uY2F0KG8ucmVwbGFjZShcIjBcIixcIlwiKSxcIi5cIikuY29uY2F0KHUpOm8ucmVwbGFjZShcIjBcIixcIlwiKTtpZihvLmxlbmd0aDxuKWZvcih2YXIgYz1uLW8ubGVuZ3RoLHM9MDtzPGM7cysrKWk9XCIwXCIuY29uY2F0KGkpO3JldHVybiBpLnRvU3RyaW5nKCl9KGosMCx3LGIpLGMsQixpLGEpLCh4fHxGKSYmKGo9aitrKSwoRXx8YzwwKSYmKFQ9aixVPUEsaj0wPT09KFA9Yyk/VDowPT0rVD9ULnJlcGxhY2UoXCItXCIsXCJcIik6MDxQP1wiK1wiLmNvbmNhdChUKTpcInNpZ25cIj09PVU/VDpcIihcIi5jb25jYXQoVC5yZXBsYWNlKFwiLVwiLFwiXCIpLFwiKVwiKSksan1mdW5jdGlvbiBBKGUsdCl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9T2JqZWN0LmtleXMoZSk7cmV0dXJuIDE9PT1yLmxlbmd0aCYmXCJvdXRwdXRcIj09PXJbMF0/dDplfXQuZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm57Zm9ybWF0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGkuYXBwbHkodm9pZCAwLHQuY29uY2F0KFtuXSkpfSxnZXRCeXRlVW5pdDpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLHI9MDtyPGU7cisrKXRbcl09YXJndW1lbnRzW3JdO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1NLmdlbmVyYWw7cmV0dXJuIEIoZS5fdmFsdWUsdC5zdWZmaXhlcyx0LnNjYWxlKS5zdWZmaXh9LmFwcGx5KHZvaWQgMCx0LmNvbmNhdChbbl0pKX0sZ2V0QmluYXJ5Qnl0ZVVuaXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9TS5iaW5hcnk7cmV0dXJuIEIoZS5fdmFsdWUsdC5zdWZmaXhlcyx0LnNjYWxlKS5zdWZmaXh9LmFwcGx5KHZvaWQgMCx0LmNvbmNhdChbbl0pKX0sZ2V0RGVjaW1hbEJ5dGVVbml0OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSkscj0wO3I8ZTtyKyspdFtyXT1hcmd1bWVudHNbcl07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PU0uZGVjaW1hbDtyZXR1cm4gQihlLl92YWx1ZSx0LnN1ZmZpeGVzLHQuc2NhbGUpLnN1ZmZpeH0uYXBwbHkodm9pZCAwLHQuY29uY2F0KFtuXSkpfSxmb3JtYXRPckRlZmF1bHQ6QX19fSx7XCIuL2dsb2JhbFN0YXRlXCI6NCxcIi4vcGFyc2luZ1wiOjgsXCIuL3ZhbGlkYXRpbmdcIjoxMH1dLDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1lKFwiLi9lbi1VU1wiKSxuPWUoXCIuL3ZhbGlkYXRpbmdcIiksYT1lKFwiLi9wYXJzaW5nXCIpLG89e30sdT12b2lkIDAsYz17fSxzPW51bGwsbD17fTtmdW5jdGlvbiBmKGUpe3U9ZX1mdW5jdGlvbiBwKCl7cmV0dXJuIGNbdV19by5sYW5ndWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX0sby5jdXJyZW50TGFuZ3VhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdX0sby5jdXJyZW50Q3VycmVuY3k9ZnVuY3Rpb24oKXtyZXR1cm4gcCgpLmN1cnJlbmN5fSxvLmN1cnJlbnRBYmJyZXZpYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHAoKS5hYmJyZXZpYXRpb25zfSxvLmN1cnJlbnREZWxpbWl0ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHAoKS5kZWxpbWl0ZXJzfSxvLmN1cnJlbnRPcmRpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHAoKS5vcmRpbmFsfSxvLmN1cnJlbnREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LHAoKS5kZWZhdWx0cyxsKX0sby5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxvLmN1cnJlbnREZWZhdWx0cygpLHAoKS5vcmRpbmFsRm9ybWF0KX0sby5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxvLmN1cnJlbnREZWZhdWx0cygpLHAoKS5ieXRlRm9ybWF0KX0sby5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxvLmN1cnJlbnREZWZhdWx0cygpLHAoKS5wZXJjZW50YWdlRm9ybWF0KX0sby5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sby5jdXJyZW50RGVmYXVsdHMoKSxwKCkuY3VycmVuY3lGb3JtYXQpfSxvLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LG8uY3VycmVudERlZmF1bHRzKCkscCgpLnRpbWVGb3JtYXQpfSxvLnNldERlZmF1bHRzPWZ1bmN0aW9uKGUpe2U9YS5wYXJzZUZvcm1hdChlKSxuLnZhbGlkYXRlRm9ybWF0KGUpJiYobD1lKX0sby5nZXRaZXJvRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHN9LG8uc2V0WmVyb0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gcz1cInN0cmluZ1wiPT10eXBlb2YgZT9lOm51bGx9LG8uaGFzWmVyb0Zvcm1hdD1mdW5jdGlvbigpe3JldHVybiBudWxsIT09c30sby5sYW5ndWFnZURhdGE9ZnVuY3Rpb24oZSl7aWYoZSl7aWYoY1tlXSlyZXR1cm4gY1tlXTt0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdGFnIFwiJy5jb25jYXQoZSwnXCInKSl9cmV0dXJuIHAoKX0sby5yZWdpc3Rlckxhbmd1YWdlPWZ1bmN0aW9uKGUpe3ZhciB0PTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoIW4udmFsaWRhdGVMYW5ndWFnZShlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhbmd1YWdlIGRhdGFcIik7Y1tlLmxhbmd1YWdlVGFnXT1lLHQmJmYoZS5sYW5ndWFnZVRhZyl9LG8uc2V0TGFuZ3VhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmkubGFuZ3VhZ2VUYWc7aWYoIWNbZV0pe3ZhciByPWUuc3BsaXQoXCItXCIpWzBdLG49T2JqZWN0LmtleXMoYykuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5zcGxpdChcIi1cIilbMF09PT1yfSk7cmV0dXJuIGNbbl0/dm9pZCBmKG4pOnZvaWQgZih0KX1mKGUpfSxvLnJlZ2lzdGVyTGFuZ3VhZ2UoaSksdT1pLmxhbmd1YWdlVGFnLHQuZXhwb3J0cz1vfSx7XCIuL2VuLVVTXCI6MixcIi4vcGFyc2luZ1wiOjgsXCIuL3ZhbGlkYXRpbmdcIjoxMH1dLDU6W2Z1bmN0aW9uKG4sZSx0KXtcInVzZSBzdHJpY3RcIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJue2xvYWRMYW5ndWFnZXNJbk5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHI9dCx2b2lkIGUuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZT12b2lkIDA7dHJ5e2U9bihcIi4uL2xhbmd1YWdlcy9cIi5jb25jYXQodCkpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBsb2FkIFwiJy5jb25jYXQodCwnXCIuIE5vIG1hdGNoaW5nIGxhbmd1YWdlIGZpbGUgZm91bmQuJykpfWUmJnIucmVnaXN0ZXJMYW5ndWFnZShlKX0pO3ZhciByfX19fSx7fV0sNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBjPWUoXCJiaWdudW1iZXIuanNcIik7ZnVuY3Rpb24gYShlLHQscil7dmFyIG49bmV3IGMoZS5fdmFsdWUpLGk9dDtyZXR1cm4gci5pc051bWJybyh0KSYmKGk9dC5fdmFsdWUpLGk9bmV3IGMoaSksZS5fdmFsdWU9bi5taW51cyhpKS50b051bWJlcigpLGV9dC5leHBvcnRzPWZ1bmN0aW9uKHUpe3JldHVybnthZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbj10LGk9dSxhPW5ldyBjKChyPWUpLl92YWx1ZSksbz1uLGkuaXNOdW1icm8obikmJihvPW4uX3ZhbHVlKSxvPW5ldyBjKG8pLHIuX3ZhbHVlPWEucGx1cyhvKS50b051bWJlcigpLHI7dmFyIHIsbixpLGEsb30sc3VidHJhY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlLHQsdSl9LG11bHRpcGx5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG49dCxpPXUsYT1uZXcgYygocj1lKS5fdmFsdWUpLG89bixpLmlzTnVtYnJvKG4pJiYobz1uLl92YWx1ZSksbz1uZXcgYyhvKSxyLl92YWx1ZT1hLnRpbWVzKG8pLnRvTnVtYmVyKCkscjt2YXIgcixuLGksYSxvfSxkaXZpZGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbj10LGk9dSxhPW5ldyBjKChyPWUpLl92YWx1ZSksbz1uLGkuaXNOdW1icm8obikmJihvPW4uX3ZhbHVlKSxvPW5ldyBjKG8pLHIuX3ZhbHVlPWEuZGl2aWRlZEJ5KG8pLnRvTnVtYmVyKCkscjt2YXIgcixuLGksYSxvfSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcj1lLGk9bj10LHUuaXNOdW1icm8obikmJihpPW4uX3ZhbHVlKSxyLl92YWx1ZT1pLHI7dmFyIHIsbixpfSxkaWZmZXJlbmNlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHI9dCxhKGk9KG49dSkoZS5fdmFsdWUpLHIsbiksTWF0aC5hYnMoaS5fdmFsdWUpO3ZhciByLG4saX19fX0se1wiYmlnbnVtYmVyLmpzXCI6MX1dLDc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX12YXIgYT1lKFwiLi9nbG9iYWxTdGF0ZVwiKSxuPWUoXCIuL3ZhbGlkYXRpbmdcIiksbz1lKFwiLi9sb2FkaW5nXCIpKGcpLHU9ZShcIi4vdW5mb3JtYXR0aW5nXCIpLGM9ZShcIi4vZm9ybWF0dGluZ1wiKShnKSxzPWUoXCIuL21hbmlwdWxhdGluZ1wiKShnKSxsPWUoXCIuL3BhcnNpbmdcIiksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX0odGhpcyx0KSx0aGlzLl92YWx1ZT1lfXZhciBlLHIsbjtyZXR1cm4gZT10LChyPVt7a2V5OlwiY2xvbmVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBnKHRoaXMuX3ZhbHVlKX19LHtrZXk6XCJmb3JtYXRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gYy5mb3JtYXQodGhpcyxlKX19LHtrZXk6XCJmb3JtYXRDdXJyZW5jeVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1sLnBhcnNlRm9ybWF0KGUpKSwoZT1jLmZvcm1hdE9yRGVmYXVsdChlLGEuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSkub3V0cHV0PVwiY3VycmVuY3lcIixjLmZvcm1hdCh0aGlzLGUpfX0se2tleTpcImZvcm1hdFRpbWVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gZS5vdXRwdXQ9XCJ0aW1lXCIsYy5mb3JtYXQodGhpcyxlKX19LHtrZXk6XCJiaW5hcnlCeXRlVW5pdHNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjLmdldEJpbmFyeUJ5dGVVbml0KHRoaXMpfX0se2tleTpcImRlY2ltYWxCeXRlVW5pdHNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjLmdldERlY2ltYWxCeXRlVW5pdCh0aGlzKX19LHtrZXk6XCJieXRlVW5pdHNcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBjLmdldEJ5dGVVbml0KHRoaXMpfX0se2tleTpcImRpZmZlcmVuY2VcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5kaWZmZXJlbmNlKHRoaXMsZSl9fSx7a2V5OlwiYWRkXCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMuYWRkKHRoaXMsZSl9fSx7a2V5Olwic3VidHJhY3RcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5zdWJ0cmFjdCh0aGlzLGUpfX0se2tleTpcIm11bHRpcGx5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHMubXVsdGlwbHkodGhpcyxlKX19LHtrZXk6XCJkaXZpZGVcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5kaXZpZGUodGhpcyxlKX19LHtrZXk6XCJzZXRcIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5zZXQodGhpcyxwKGUpKX19LHtrZXk6XCJ2YWx1ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleTpcInZhbHVlT2ZcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19XSkmJmkoZS5wcm90b3R5cGUsciksbiYmaShlLG4pLHR9KCk7ZnVuY3Rpb24gcChlKXt2YXIgdD1lO3JldHVybiBnLmlzTnVtYnJvKGUpP3Q9ZS5fdmFsdWU6XCJzdHJpbmdcIj09dHlwZW9mIGU/dD1nLnVuZm9ybWF0KGUpOmlzTmFOKGUpJiYodD1OYU4pLHR9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gbmV3IGYocChlKSl9Zy52ZXJzaW9uPVwiMi4xLjJcIixnLmlzTnVtYnJvPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgZn0sZy5sYW5ndWFnZT1hLmN1cnJlbnRMYW5ndWFnZSxnLnJlZ2lzdGVyTGFuZ3VhZ2U9YS5yZWdpc3Rlckxhbmd1YWdlLGcuc2V0TGFuZ3VhZ2U9YS5zZXRMYW5ndWFnZSxnLmxhbmd1YWdlcz1hLmxhbmd1YWdlcyxnLmxhbmd1YWdlRGF0YT1hLmxhbmd1YWdlRGF0YSxnLnplcm9Gb3JtYXQ9YS5zZXRaZXJvRm9ybWF0LGcuZGVmYXVsdEZvcm1hdD1hLmN1cnJlbnREZWZhdWx0cyxnLnNldERlZmF1bHRzPWEuc2V0RGVmYXVsdHMsZy5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9YS5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0LGcudmFsaWRhdGU9bi52YWxpZGF0ZSxnLmxvYWRMYW5ndWFnZXNJbk5vZGU9by5sb2FkTGFuZ3VhZ2VzSW5Ob2RlLGcudW5mb3JtYXQ9dS51bmZvcm1hdCx0LmV4cG9ydHM9Z30se1wiLi9mb3JtYXR0aW5nXCI6MyxcIi4vZ2xvYmFsU3RhdGVcIjo0LFwiLi9sb2FkaW5nXCI6NSxcIi4vbWFuaXB1bGF0aW5nXCI6NixcIi4vcGFyc2luZ1wiOjgsXCIuL3VuZm9ybWF0dGluZ1wiOjksXCIuL3ZhbGlkYXRpbmdcIjoxMH1dLDg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLGEsbyx1LGMscyxsLGYscCxnLGgsZCx2LG0seSxiLHcsTz0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGU/ZToocj1PLGU9KG49KHQ9ZSkubWF0Y2goL157KFtefV0qKX0vKSk/KHIucHJlZml4PW5bMV0sdC5zbGljZShuWzBdLmxlbmd0aCkpOnQsYT1PLGZ1bmN0aW9uKGUsdCl7aWYoLTE9PT1lLmluZGV4T2YoXCIkXCIpKXtpZigtMT09PWUuaW5kZXhPZihcIiVcIikpcmV0dXJuLTEhPT1lLmluZGV4T2YoXCJiZFwiKT8odC5vdXRwdXQ9XCJieXRlXCIsdC5iYXNlPVwiZ2VuZXJhbFwiKTotMSE9PWUuaW5kZXhPZihcImJcIik/KHQub3V0cHV0PVwiYnl0ZVwiLHQuYmFzZT1cImJpbmFyeVwiKTotMSE9PWUuaW5kZXhPZihcImRcIik/KHQub3V0cHV0PVwiYnl0ZVwiLHQuYmFzZT1cImRlY2ltYWxcIik6LTE9PT1lLmluZGV4T2YoXCI6XCIpPy0xIT09ZS5pbmRleE9mKFwib1wiKSYmKHQub3V0cHV0PVwib3JkaW5hbFwiKTp0Lm91dHB1dD1cInRpbWVcIjt0Lm91dHB1dD1cInBlcmNlbnRcIn1lbHNlIHQub3V0cHV0PVwiY3VycmVuY3lcIn0oZT0obz0oaT1lKS5tYXRjaCgveyhbXn1dKil9JC8pKT8oYS5wb3N0Zml4PW9bMV0saS5zbGljZSgwLC1vWzBdLmxlbmd0aCkpOmksTyksdT1PLChjPWUubWF0Y2goL1sxLTldK1swLTldKi8pKSYmKHUudG90YWxMZW5ndGg9K2NbMF0pLHM9TywobD1lLnNwbGl0KFwiLlwiKVswXS5tYXRjaCgvMCsvKSkmJihzLmNoYXJhY3RlcmlzdGljPWxbMF0ubGVuZ3RoKSxmdW5jdGlvbihlLHQpe2lmKC0xIT09ZS5pbmRleE9mKFwiLlwiKSl7dmFyIHI9ZS5zcGxpdChcIi5cIilbMF07dC5vcHRpb25hbENoYXJhY3RlcmlzdGljPS0xPT09ci5pbmRleE9mKFwiMFwiKX19KGUsTyksZj1PLC0xIT09ZS5pbmRleE9mKFwiYVwiKSYmKGYuYXZlcmFnZT0hMCksZz1PLC0xIT09KHA9ZSkuaW5kZXhPZihcIktcIik/Zy5mb3JjZUF2ZXJhZ2U9XCJ0aG91c2FuZFwiOi0xIT09cC5pbmRleE9mKFwiTVwiKT9nLmZvcmNlQXZlcmFnZT1cIm1pbGxpb25cIjotMSE9PXAuaW5kZXhPZihcIkJcIik/Zy5mb3JjZUF2ZXJhZ2U9XCJiaWxsaW9uXCI6LTEhPT1wLmluZGV4T2YoXCJUXCIpJiYoZy5mb3JjZUF2ZXJhZ2U9XCJ0cmlsbGlvblwiKSxmdW5jdGlvbihlLHQpe3ZhciByPWUuc3BsaXQoXCIuXCIpWzFdO2lmKHIpe3ZhciBuPXIubWF0Y2goLzArLyk7biYmKHQubWFudGlzc2E9blswXS5sZW5ndGgpfX0oZSxPKSxkPU8sKGg9ZSkubWF0Y2goL1xcW1xcLl0vKT9kLm9wdGlvbmFsTWFudGlzc2E9ITA6aC5tYXRjaCgvXFwuLykmJihkLm9wdGlvbmFsTWFudGlzc2E9ITEpLHY9TywtMSE9PWUuaW5kZXhPZihcIixcIikmJih2LnRob3VzYW5kU2VwYXJhdGVkPSEwKSxtPU8sLTEhPT1lLmluZGV4T2YoXCIgXCIpJiYobS5zcGFjZVNlcGFyYXRlZD0hMCksYj1PLCh5PWUpLm1hdGNoKC9eXFwrP1xcKFteKV0qXFwpJC8pJiYoYi5uZWdhdGl2ZT1cInBhcmVudGhlc2lzXCIpLHkubWF0Y2goL15cXCs/LS8pJiYoYi5uZWdhdGl2ZT1cInNpZ25cIiksdz1PLGUubWF0Y2goL15cXCsvKSYmKHcuZm9yY2VTaWduPSEwKSxPKX19fSx7fV0sOTpbZnVuY3Rpb24ocCxlLHQpe1widXNlIHN0cmljdFwiO3ZhciBPPVt7a2V5OlwiWmlCXCIsZmFjdG9yOk1hdGgucG93KDEwMjQsNyl9LHtrZXk6XCJaQlwiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6XCJZaUJcIixmYWN0b3I6TWF0aC5wb3coMTAyNCw4KX0se2tleTpcIllCXCIsZmFjdG9yOk1hdGgucG93KDFlMyw4KX0se2tleTpcIlRpQlwiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDQpfSx7a2V5OlwiVEJcIixmYWN0b3I6TWF0aC5wb3coMWUzLDQpfSx7a2V5OlwiUGlCXCIsZmFjdG9yOk1hdGgucG93KDEwMjQsNSl9LHtrZXk6XCJQQlwiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9LHtrZXk6XCJNaUJcIixmYWN0b3I6TWF0aC5wb3coMTAyNCwyKX0se2tleTpcIk1CXCIsZmFjdG9yOk1hdGgucG93KDFlMywyKX0se2tleTpcIktpQlwiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OlwiS0JcIixmYWN0b3I6TWF0aC5wb3coMWUzLDEpfSx7a2V5OlwiR2lCXCIsZmFjdG9yOk1hdGgucG93KDEwMjQsMyl9LHtrZXk6XCJHQlwiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtrZXk6XCJFaUJcIixmYWN0b3I6TWF0aC5wb3coMTAyNCw2KX0se2tleTpcIkVCXCIsZmFjdG9yOk1hdGgucG93KDFlMyw2KX0se2tleTpcIkJcIixmYWN0b3I6MX1dO2Z1bmN0aW9uIHgoZSl7cmV0dXJuIGUucmVwbGFjZSgvWy0vXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKX1mdW5jdGlvbiBnKGUsdCl7dmFyIHI9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiXCIsbj0zPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzNdOnZvaWQgMCxpPTQ8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNF06dm9pZCAwLGE9NTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s1XTp2b2lkIDAsbz02PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzZdOnZvaWQgMDtpZihcIlwiIT09ZSlyZXR1cm4gZT09PWk/MDpmdW5jdGlvbiBlKHQscil7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlwiXCIsaT0zPGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzNdOnZvaWQgMCxhPTQ8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNF06dm9pZCAwLG89NTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s1XTp2b2lkIDAsdT02PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzZdOnZvaWQgMDtpZighaXNOYU4oK3QpKXJldHVybit0O3ZhciBjPVwiXCIscz10LnJlcGxhY2UoLyheW14oXSopXFwoKC4qKVxcKShbXildKiQpLyxcIiQxJDIkM1wiKTtpZihzIT09dClyZXR1cm4tMSplKHMscixuLGksYSxvLHUpO2Zvcih2YXIgbD0wO2w8Ty5sZW5ndGg7bCsrKXt2YXIgZj1PW2xdO2lmKChjPXQucmVwbGFjZShmLmtleSxcIlwiKSkhPT10KXJldHVybiBlKGMscixuLGksYSxvLHUpKmYuZmFjdG9yfWlmKChjPXQucmVwbGFjZShcIiVcIixcIlwiKSkhPT10KXJldHVybiBlKGMscixuLGksYSxvLHUpLzEwMDt2YXIgcD1wYXJzZUZsb2F0KHQpO2lmKCFpc05hTihwKSl7dmFyIGc9aShwKTtpZihnJiZcIi5cIiE9PWcmJihjPXQucmVwbGFjZShuZXcgUmVnRXhwKFwiXCIuY29uY2F0KHgoZyksXCIkXCIpKSxcIlwiKSkhPT10KXJldHVybiBlKGMscixuLGksYSxvLHUpO3ZhciBoPXt9O09iamVjdC5rZXlzKG8pLmZvckVhY2goZnVuY3Rpb24oZSl7aFtvW2VdXT1lfSk7Zm9yKHZhciBkPU9iamVjdC5rZXlzKGgpLnNvcnQoKS5yZXZlcnNlKCksdj1kLmxlbmd0aCxtPTA7bTx2O20rKyl7dmFyIHk9ZFttXSxiPWhbeV07aWYoKGM9dC5yZXBsYWNlKHksXCJcIikpIT09dCl7dmFyIHc9dm9pZCAwO3N3aXRjaChiKXtjYXNlXCJ0aG91c2FuZFwiOnc9TWF0aC5wb3coMTAsMyk7YnJlYWs7Y2FzZVwibWlsbGlvblwiOnc9TWF0aC5wb3coMTAsNik7YnJlYWs7Y2FzZVwiYmlsbGlvblwiOnc9TWF0aC5wb3coMTAsOSk7YnJlYWs7Y2FzZVwidHJpbGxpb25cIjp3PU1hdGgucG93KDEwLDEyKX1yZXR1cm4gZShjLHIsbixpLGEsbyx1KSp3fX19fShmdW5jdGlvbihlLHQpe3ZhciByPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpcIlwiLG49ZS5yZXBsYWNlKHIsXCJcIik7cmV0dXJuIG49KG49bi5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoWzAtOV0pXCIuY29uY2F0KHgodC50aG91c2FuZHMpLFwiKFswLTldKVwiKSxcImdcIiksXCIkMSQyXCIpKS5yZXBsYWNlKHQuZGVjaW1hbCxcIi5cIil9KGUsdCxyKSx0LHIsbixpLGEsbyl9ZS5leHBvcnRzPXt1bmZvcm1hdDpmdW5jdGlvbihlLHQpe3ZhciByLG4saSxhPXAoXCIuL2dsb2JhbFN0YXRlXCIpLG89YS5jdXJyZW50RGVsaW1pdGVycygpLHU9YS5jdXJyZW50Q3VycmVuY3koKS5zeW1ib2wsYz1hLmN1cnJlbnRPcmRpbmFsKCkscz1hLmdldFplcm9Gb3JtYXQoKSxsPWEuY3VycmVudEFiYnJldmlhdGlvbnMoKSxmPXZvaWQgMDtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlmPWZ1bmN0aW9uKGUsdCl7aWYoIWUuaW5kZXhPZihcIjpcIil8fFwiOlwiPT09dC50aG91c2FuZHMpcmV0dXJuITE7dmFyIHI9ZS5zcGxpdChcIjpcIik7aWYoMyE9PXIubGVuZ3RoKXJldHVybiExO3ZhciBuPStyWzBdLGk9K3JbMV0sYT0rclsyXTtyZXR1cm4haXNOYU4obikmJiFpc05hTihpKSYmIWlzTmFOKGEpfShlLG8pPyhyPWUuc3BsaXQoXCI6XCIpLG49K3JbMF0saT0rclsxXSwrclsyXSs2MCppKzM2MDAqbik6ZyhlLG8sdSxjLHMsbCx0KTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXJldHVybjtmPWV9aWYodm9pZCAwIT09ZilyZXR1cm4gZn19fSx7XCIuL2dsb2JhbFN0YXRlXCI6NH1dLDEwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19KGUpfHxmdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHxcIltvYmplY3QgQXJndW1lbnRzXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2VcIil9KCl9ZnVuY3Rpb24gZihlKXtyZXR1cm4oZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSkoZSl9dmFyIGk9ZShcIi4vdW5mb3JtYXR0aW5nXCIpLGE9L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxwPXtvdXRwdXQ6e3R5cGU6XCJzdHJpbmdcIix2YWxpZFZhbHVlczpbXCJjdXJyZW5jeVwiLFwicGVyY2VudFwiLFwiYnl0ZVwiLFwidGltZVwiLFwib3JkaW5hbFwiLFwibnVtYmVyXCJdfSxiYXNlOnt0eXBlOlwic3RyaW5nXCIsdmFsaWRWYWx1ZXM6W1wiZGVjaW1hbFwiLFwiYmluYXJ5XCIsXCJnZW5lcmFsXCJdLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJieXRlXCI9PT10Lm91dHB1dH0sbWVzc2FnZTpcImBiYXNlYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBieXRlYFwiLG1hbmRhdG9yeTpmdW5jdGlvbihlKXtyZXR1cm5cImJ5dGVcIj09PWUub3V0cHV0fX0sY2hhcmFjdGVyaXN0aWM6e3R5cGU6XCJudW1iZXJcIixyZXN0cmljdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gMDw9ZX0sbWVzc2FnZTpcInZhbHVlIG11c3QgYmUgcG9zaXRpdmVcIn0scHJlZml4Olwic3RyaW5nXCIscG9zdGZpeDpcInN0cmluZ1wiLGZvcmNlQXZlcmFnZTp7dHlwZTpcInN0cmluZ1wiLHZhbGlkVmFsdWVzOltcInRyaWxsaW9uXCIsXCJiaWxsaW9uXCIsXCJtaWxsaW9uXCIsXCJ0aG91c2FuZFwiXX0sYXZlcmFnZTpcImJvb2xlYW5cIixjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOlwic3RyaW5nXCIsdmFsaWRWYWx1ZXM6W1wicHJlZml4XCIsXCJpbmZpeFwiLFwicG9zdGZpeFwiXX0sY3VycmVuY3lTeW1ib2w6XCJzdHJpbmdcIix0b3RhbExlbmd0aDp7dHlwZTpcIm51bWJlclwiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiAwPD1lfSxtZXNzYWdlOlwidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZVwifSx7cmVzdHJpY3Rpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdC5leHBvbmVudGlhbH0sbWVzc2FnZTpcImB0b3RhbExlbmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYFwifV19LG1hbnRpc3NhOnt0eXBlOlwibnVtYmVyXCIscmVzdHJpY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIDA8PWV9LG1lc3NhZ2U6XCJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlXCJ9LG9wdGlvbmFsTWFudGlzc2E6XCJib29sZWFuXCIsdHJpbU1hbnRpc3NhOlwiYm9vbGVhblwiLG9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM6XCJib29sZWFuXCIsdGhvdXNhbmRTZXBhcmF0ZWQ6XCJib29sZWFuXCIsc3BhY2VTZXBhcmF0ZWQ6XCJib29sZWFuXCIsYWJicmV2aWF0aW9uczp7dHlwZTpcIm9iamVjdFwiLGNoaWxkcmVuOnt0aG91c2FuZDpcInN0cmluZ1wiLG1pbGxpb246XCJzdHJpbmdcIixiaWxsaW9uOlwic3RyaW5nXCIsdHJpbGxpb246XCJzdHJpbmdcIn19LG5lZ2F0aXZlOnt0eXBlOlwic3RyaW5nXCIsdmFsaWRWYWx1ZXM6W1wic2lnblwiLFwicGFyZW50aGVzaXNcIl19LGZvcmNlU2lnbjpcImJvb2xlYW5cIixleHBvbmVudGlhbDp7dHlwZTpcImJvb2xlYW5cIn0scHJlZml4U3ltYm9sOnt0eXBlOlwiYm9vbGVhblwiLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJwZXJjZW50XCI9PT10Lm91dHB1dH0sbWVzc2FnZTpcImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGBcIn19LG89e2xhbmd1YWdlVGFnOnt0eXBlOlwic3RyaW5nXCIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLm1hdGNoKGEpfSxtZXNzYWdlOlwidGhlIGxhbmd1YWdlIHRhZyBtdXN0IGZvbGxvdyB0aGUgQkNQIDQ3IHNwZWNpZmljYXRpb24gKHNlZSBodHRwczovL3Rvb2xzLmllZnQub3JnL2h0bWwvYmNwNDcpXCJ9LGRlbGltaXRlcnM6e3R5cGU6XCJvYmplY3RcIixjaGlsZHJlbjp7dGhvdXNhbmRzOlwic3RyaW5nXCIsZGVjaW1hbDpcInN0cmluZ1wiLHRob3VzYW5kc1NpemU6XCJudW1iZXJcIn0sbWFuZGF0b3J5OiEwfSxhYmJyZXZpYXRpb25zOnt0eXBlOlwib2JqZWN0XCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOlwic3RyaW5nXCIsbWFuZGF0b3J5OiEwfSxtaWxsaW9uOnt0eXBlOlwic3RyaW5nXCIsbWFuZGF0b3J5OiEwfSxiaWxsaW9uOnt0eXBlOlwic3RyaW5nXCIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZTpcInN0cmluZ1wiLG1hbmRhdG9yeTohMH19LG1hbmRhdG9yeTohMH0sc3BhY2VTZXBhcmF0ZWQ6XCJib29sZWFuXCIsb3JkaW5hbDp7dHlwZTpcImZ1bmN0aW9uXCIsbWFuZGF0b3J5OiEwfSxjdXJyZW5jeTp7dHlwZTpcIm9iamVjdFwiLGNoaWxkcmVuOntzeW1ib2w6XCJzdHJpbmdcIixwb3NpdGlvbjpcInN0cmluZ1wiLGNvZGU6XCJzdHJpbmdcIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czpcImZvcm1hdFwiLG9yZGluYWxGb3JtYXQ6XCJmb3JtYXRcIixieXRlRm9ybWF0OlwiZm9ybWF0XCIscGVyY2VudGFnZUZvcm1hdDpcImZvcm1hdFwiLGN1cnJlbmN5Rm9ybWF0OlwiZm9ybWF0XCIsdGltZURlZmF1bHRzOlwiZm9ybWF0XCIsZm9ybWF0czp7dHlwZTpcIm9iamVjdFwiLGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOlwiZm9ybWF0XCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0eXBlOlwiZm9ybWF0XCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZTpcImZvcm1hdFwiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOnt0eXBlOlwiZm9ybWF0XCIsbWFuZGF0b3J5OiEwfX19fTtmdW5jdGlvbiB1KGUpe3JldHVybiEhaS51bmZvcm1hdChlKX1mdW5jdGlvbiBnKGMscyxsKXt2YXIgZT0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLHQ9T2JqZWN0LmtleXMoYykubWFwKGZ1bmN0aW9uKGUpe2lmKCFzW2VdKXJldHVybiBjb25zb2xlLmVycm9yKFwiXCIuY29uY2F0KGwsXCIgSW52YWxpZCBrZXk6IFwiKS5jb25jYXQoZSkpLCExO3ZhciB0PWNbZV0scj1zW2VdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj17dHlwZTpyfSksXCJmb3JtYXRcIj09PXIudHlwZSl7aWYoIWcodCxwLFwiW1ZhbGlkYXRlIFwiLmNvbmNhdChlLFwiXVwiKSwhMCkpcmV0dXJuITF9ZWxzZSBpZihmKHQpIT09ci50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKFwiXCIuY29uY2F0KGwsXCIgXCIpLmNvbmNhdChlLCcgdHlwZSBtaXNtYXRjaGVkOiBcIicpLmNvbmNhdChyLnR5cGUsJ1wiIGV4cGVjdGVkLCBcIicpLmNvbmNhdChmKHQpLCdcIiBwcm92aWRlZCcpKSwhMTtpZihyLnJlc3RyaWN0aW9ucyYmci5yZXN0cmljdGlvbnMubGVuZ3RoKWZvcih2YXIgbj1yLnJlc3RyaWN0aW9ucy5sZW5ndGgsaT0wO2k8bjtpKyspe3ZhciBhPXIucmVzdHJpY3Rpb25zW2ldLG89YS5yZXN0cmljdGlvbix1PWEubWVzc2FnZTtpZighbyh0LGMpKXJldHVybiBjb25zb2xlLmVycm9yKFwiXCIuY29uY2F0KGwsXCIgXCIpLmNvbmNhdChlLFwiIGludmFsaWQgdmFsdWU6IFwiKS5jb25jYXQodSkpLCExfWlmKHIucmVzdHJpY3Rpb24mJiFyLnJlc3RyaWN0aW9uKHQsYykpcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJcIi5jb25jYXQobCxcIiBcIikuY29uY2F0KGUsXCIgaW52YWxpZCB2YWx1ZTogXCIpLmNvbmNhdChyLm1lc3NhZ2UpKSwhMTtpZihyLnZhbGlkVmFsdWVzJiYtMT09PXIudmFsaWRWYWx1ZXMuaW5kZXhPZih0KSlyZXR1cm4gY29uc29sZS5lcnJvcihcIlwiLmNvbmNhdChsLFwiIFwiKS5jb25jYXQoZSxcIiBpbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGFtb25nIFwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoci52YWxpZFZhbHVlcyksJywgXCInKS5jb25jYXQodCwnXCIgcHJvdmlkZWQnKSksITE7aWYoci5jaGlsZHJlbiYmIWcodCxyLmNoaWxkcmVuLFwiW1ZhbGlkYXRlIFwiLmNvbmNhdChlLFwiXVwiKSkpcmV0dXJuITE7cmV0dXJuITB9KTtyZXR1cm4gZXx8dC5wdXNoLmFwcGx5KHQsbihPYmplY3Qua2V5cyhzKS5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9c1tlXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9e3R5cGU6dH0pLHQubWFuZGF0b3J5KXt2YXIgcj10Lm1hbmRhdG9yeTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiYocj1yKGMpKSxyJiZ2b2lkIDA9PT1jW2VdKXJldHVybiBjb25zb2xlLmVycm9yKFwiXCIuY29uY2F0KGwsJyBNaXNzaW5nIG1hbmRhdG9yeSBrZXkgXCInKS5jb25jYXQoZSwnXCInKSksITF9cmV0dXJuITB9KSkpLHQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUmJnR9LCEwKX1mdW5jdGlvbiBjKGUpe3JldHVybiBnKGUscCxcIltWYWxpZGF0ZSBmb3JtYXRdXCIpfXQuZXhwb3J0cz17dmFsaWRhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgcj11KGUpLG49Yyh0KTtyZXR1cm4gciYmbn0sdmFsaWRhdGVGb3JtYXQ6Yyx2YWxpZGF0ZUlucHV0OnUsdmFsaWRhdGVMYW5ndWFnZTpmdW5jdGlvbihlKXtyZXR1cm4gZyhlLG8sXCJbVmFsaWRhdGUgbGFuZ3VhZ2VdXCIpfX19LHtcIi4vdW5mb3JtYXR0aW5nXCI6OX1dfSx7fSxbN10pKDcpfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1icm8ubWluLmpzLm1hcFxuIiwiLyogQGxpY2Vuc2VcblBhcGEgUGFyc2VcbnY1LjQuMVxuaHR0cHM6Ly9naXRodWIuY29tL21ob2x0L1BhcGFQYXJzZVxuTGljZW5zZTogTUlUXG4qL1xuIWZ1bmN0aW9uKGUsdCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz10KCk6ZS5QYXBhPXQoKX0odGhpcyxmdW5jdGlvbiBzKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGY9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1mP2Y6e307dmFyIG49IWYuZG9jdW1lbnQmJiEhZi5wb3N0TWVzc2FnZSxvPWYuSVNfUEFQQV9XT1JLRVJ8fCExLGE9e30sdT0wLGI9e3BhcnNlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9KHQ9dHx8e30pLmR5bmFtaWNUeXBpbmd8fCExO0oocikmJih0LmR5bmFtaWNUeXBpbmdGdW5jdGlvbj1yLHI9e30pO2lmKHQuZHluYW1pY1R5cGluZz1yLHQudHJhbnNmb3JtPSEhSih0LnRyYW5zZm9ybSkmJnQudHJhbnNmb3JtLHQud29ya2VyJiZiLldPUktFUlNfU1VQUE9SVEVEKXt2YXIgaT1mdW5jdGlvbigpe2lmKCFiLldPUktFUlNfU1VQUE9SVEVEKXJldHVybiExO3ZhciBlPShyPWYuVVJMfHxmLndlYmtpdFVSTHx8bnVsbCxpPXMudG9TdHJpbmcoKSxiLkJMT0JfVVJMfHwoYi5CTE9CX1VSTD1yLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbXCJ2YXIgZ2xvYmFsID0gKGZ1bmN0aW9uKCkgeyBpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBzZWxmOyB9IGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gd2luZG93OyB9IGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9IHJldHVybiB7fTsgfSkoKTsgZ2xvYmFsLklTX1BBUEFfV09SS0VSPXRydWU7IFwiLFwiKFwiLGksXCIpKCk7XCJdLHt0eXBlOlwidGV4dC9qYXZhc2NyaXB0XCJ9KSkpKSx0PW5ldyBmLldvcmtlcihlKTt2YXIgcixpO3JldHVybiB0Lm9ubWVzc2FnZT1fLHQuaWQ9dSsrLGFbdC5pZF09dH0oKTtyZXR1cm4gaS51c2VyU3RlcD10LnN0ZXAsaS51c2VyQ2h1bms9dC5jaHVuayxpLnVzZXJDb21wbGV0ZT10LmNvbXBsZXRlLGkudXNlckVycm9yPXQuZXJyb3IsdC5zdGVwPUoodC5zdGVwKSx0LmNodW5rPUoodC5jaHVuayksdC5jb21wbGV0ZT1KKHQuY29tcGxldGUpLHQuZXJyb3I9Sih0LmVycm9yKSxkZWxldGUgdC53b3JrZXIsdm9pZCBpLnBvc3RNZXNzYWdlKHtpbnB1dDplLGNvbmZpZzp0LHdvcmtlcklkOmkuaWR9KX12YXIgbj1udWxsO2IuTk9ERV9TVFJFQU1fSU5QVVQsXCJzdHJpbmdcIj09dHlwZW9mIGU/KGU9ZnVuY3Rpb24oZSl7aWYoNjUyNzk9PT1lLmNoYXJDb2RlQXQoMCkpcmV0dXJuIGUuc2xpY2UoMSk7cmV0dXJuIGV9KGUpLG49dC5kb3dubG9hZD9uZXcgbCh0KTpuZXcgcCh0KSk6ITA9PT1lLnJlYWRhYmxlJiZKKGUucmVhZCkmJkooZS5vbik/bj1uZXcgZyh0KTooZi5GaWxlJiZlIGluc3RhbmNlb2YgRmlsZXx8ZSBpbnN0YW5jZW9mIE9iamVjdCkmJihuPW5ldyBjKHQpKTtyZXR1cm4gbi5zdHJlYW0oZSl9LHVucGFyc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMSxfPSEwLG09XCIsXCIseT1cIlxcclxcblwiLHM9J1wiJyxhPXMrcyxyPSExLGk9bnVsbCxvPSExOyFmdW5jdGlvbigpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0KXJldHVybjtcInN0cmluZ1wiIT10eXBlb2YgdC5kZWxpbWl0ZXJ8fGIuQkFEX0RFTElNSVRFUlMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5kZWxpbWl0ZXIuaW5kZXhPZihlKX0pLmxlbmd0aHx8KG09dC5kZWxpbWl0ZXIpOyhcImJvb2xlYW5cIj09dHlwZW9mIHQucXVvdGVzfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnF1b3Rlc3x8QXJyYXkuaXNBcnJheSh0LnF1b3RlcykpJiYobj10LnF1b3Rlcyk7XCJib29sZWFuXCIhPXR5cGVvZiB0LnNraXBFbXB0eUxpbmVzJiZcInN0cmluZ1wiIT10eXBlb2YgdC5za2lwRW1wdHlMaW5lc3x8KHI9dC5za2lwRW1wdHlMaW5lcyk7XCJzdHJpbmdcIj09dHlwZW9mIHQubmV3bGluZSYmKHk9dC5uZXdsaW5lKTtcInN0cmluZ1wiPT10eXBlb2YgdC5xdW90ZUNoYXImJihzPXQucXVvdGVDaGFyKTtcImJvb2xlYW5cIj09dHlwZW9mIHQuaGVhZGVyJiYoXz10LmhlYWRlcik7aWYoQXJyYXkuaXNBcnJheSh0LmNvbHVtbnMpKXtpZigwPT09dC5jb2x1bW5zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJPcHRpb24gY29sdW1ucyBpcyBlbXB0eVwiKTtpPXQuY29sdW1uc312b2lkIDAhPT10LmVzY2FwZUNoYXImJihhPXQuZXNjYXBlQ2hhcitzKTsoXCJib29sZWFuXCI9PXR5cGVvZiB0LmVzY2FwZUZvcm11bGFlfHx0LmVzY2FwZUZvcm11bGFlIGluc3RhbmNlb2YgUmVnRXhwKSYmKG89dC5lc2NhcGVGb3JtdWxhZSBpbnN0YW5jZW9mIFJlZ0V4cD90LmVzY2FwZUZvcm11bGFlOi9eWz0rXFwtQFxcdFxccl0uKiQvKX0oKTt2YXIgdT1uZXcgUmVnRXhwKFEocyksXCJnXCIpO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1KU09OLnBhcnNlKGUpKTtpZihBcnJheS5pc0FycmF5KGUpKXtpZighZS5sZW5ndGh8fEFycmF5LmlzQXJyYXkoZVswXSkpcmV0dXJuIGgobnVsbCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlWzBdKXJldHVybiBoKGl8fE9iamVjdC5rZXlzKGVbMF0pLGUscil9ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgZSlyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZS5kYXRhJiYoZS5kYXRhPUpTT04ucGFyc2UoZS5kYXRhKSksQXJyYXkuaXNBcnJheShlLmRhdGEpJiYoZS5maWVsZHN8fChlLmZpZWxkcz1lLm1ldGEmJmUubWV0YS5maWVsZHN8fGkpLGUuZmllbGRzfHwoZS5maWVsZHM9QXJyYXkuaXNBcnJheShlLmRhdGFbMF0pP2UuZmllbGRzOlwib2JqZWN0XCI9PXR5cGVvZiBlLmRhdGFbMF0/T2JqZWN0LmtleXMoZS5kYXRhWzBdKTpbXSksQXJyYXkuaXNBcnJheShlLmRhdGFbMF0pfHxcIm9iamVjdFwiPT10eXBlb2YgZS5kYXRhWzBdfHwoZS5kYXRhPVtlLmRhdGFdKSksaChlLmZpZWxkc3x8W10sZS5kYXRhfHxbXSxyKTt0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gc2VyaWFsaXplIHVucmVjb2duaXplZCBpbnB1dFwiKTtmdW5jdGlvbiBoKGUsdCxyKXt2YXIgaT1cIlwiO1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1KU09OLnBhcnNlKGUpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9SlNPTi5wYXJzZSh0KSk7dmFyIG49QXJyYXkuaXNBcnJheShlKSYmMDxlLmxlbmd0aCxzPSFBcnJheS5pc0FycmF5KHRbMF0pO2lmKG4mJl8pe2Zvcih2YXIgYT0wO2E8ZS5sZW5ndGg7YSsrKTA8YSYmKGkrPW0pLGkrPXYoZVthXSxhKTswPHQubGVuZ3RoJiYoaSs9eSl9Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciB1PW4/ZS5sZW5ndGg6dFtvXS5sZW5ndGgsaD0hMSxmPW4/MD09PU9iamVjdC5rZXlzKHRbb10pLmxlbmd0aDowPT09dFtvXS5sZW5ndGg7aWYociYmIW4mJihoPVwiZ3JlZWR5XCI9PT1yP1wiXCI9PT10W29dLmpvaW4oXCJcIikudHJpbSgpOjE9PT10W29dLmxlbmd0aCYmMD09PXRbb11bMF0ubGVuZ3RoKSxcImdyZWVkeVwiPT09ciYmbil7Zm9yKHZhciBkPVtdLGw9MDtsPHU7bCsrKXt2YXIgYz1zP2VbbF06bDtkLnB1c2godFtvXVtjXSl9aD1cIlwiPT09ZC5qb2luKFwiXCIpLnRyaW0oKX1pZighaCl7Zm9yKHZhciBwPTA7cDx1O3ArKyl7MDxwJiYhZiYmKGkrPW0pO3ZhciBnPW4mJnM/ZVtwXTpwO2krPXYodFtvXVtnXSxwKX1vPHQubGVuZ3RoLTEmJighcnx8MDx1JiYhZikmJihpKz15KX19cmV0dXJuIGl9ZnVuY3Rpb24gdihlLHQpe2lmKG51bGw9PWUpcmV0dXJuXCJcIjtpZihlLmNvbnN0cnVjdG9yPT09RGF0ZSlyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSkuc2xpY2UoMSwyNSk7dmFyIHI9ITE7byYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJm8udGVzdChlKSYmKGU9XCInXCIrZSxyPSEwKTt2YXIgaT1lLnRvU3RyaW5nKCkucmVwbGFjZSh1LGEpO3JldHVybihyPXJ8fCEwPT09bnx8XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmbihlLHQpfHxBcnJheS5pc0FycmF5KG4pJiZuW3RdfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKC0xPGUuaW5kZXhPZih0W3JdKSlyZXR1cm4hMDtyZXR1cm4hMX0oaSxiLkJBRF9ERUxJTUlURVJTKXx8LTE8aS5pbmRleE9mKG0pfHxcIiBcIj09PWkuY2hhckF0KDApfHxcIiBcIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKT9zK2krczppfX19O2lmKGIuUkVDT1JEX1NFUD1TdHJpbmcuZnJvbUNoYXJDb2RlKDMwKSxiLlVOSVRfU0VQPVN0cmluZy5mcm9tQ2hhckNvZGUoMzEpLGIuQllURV9PUkRFUl9NQVJLPVwiXFx1ZmVmZlwiLGIuQkFEX0RFTElNSVRFUlM9W1wiXFxyXCIsXCJcXG5cIiwnXCInLGIuQllURV9PUkRFUl9NQVJLXSxiLldPUktFUlNfU1VQUE9SVEVEPSFuJiYhIWYuV29ya2VyLGIuTk9ERV9TVFJFQU1fSU5QVVQ9MSxiLkxvY2FsQ2h1bmtTaXplPTEwNDg1NzYwLGIuUmVtb3RlQ2h1bmtTaXplPTUyNDI4ODAsYi5EZWZhdWx0RGVsaW1pdGVyPVwiLFwiLGIuUGFyc2VyPUUsYi5QYXJzZXJIYW5kbGU9cixiLk5ldHdvcmtTdHJlYW1lcj1sLGIuRmlsZVN0cmVhbWVyPWMsYi5TdHJpbmdTdHJlYW1lcj1wLGIuUmVhZGFibGVTdHJlYW1TdHJlYW1lcj1nLGYualF1ZXJ5KXt2YXIgZD1mLmpRdWVyeTtkLmZuLnBhcnNlPWZ1bmN0aW9uKG8pe3ZhciByPW8uY29uZmlnfHx7fSx1PVtdO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7aWYoIShcIklOUFVUXCI9PT1kKHRoaXMpLnByb3AoXCJ0YWdOYW1lXCIpLnRvVXBwZXJDYXNlKCkmJlwiZmlsZVwiPT09ZCh0aGlzKS5hdHRyKFwidHlwZVwiKS50b0xvd2VyQ2FzZSgpJiZmLkZpbGVSZWFkZXIpfHwhdGhpcy5maWxlc3x8MD09PXRoaXMuZmlsZXMubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8dGhpcy5maWxlcy5sZW5ndGg7dCsrKXUucHVzaCh7ZmlsZTp0aGlzLmZpbGVzW3RdLGlucHV0RWxlbTp0aGlzLGluc3RhbmNlQ29uZmlnOmQuZXh0ZW5kKHt9LHIpfSl9KSxlKCksdGhpcztmdW5jdGlvbiBlKCl7aWYoMCE9PXUubGVuZ3RoKXt2YXIgZSx0LHIsaSxuPXVbMF07aWYoSihvLmJlZm9yZSkpe3ZhciBzPW8uYmVmb3JlKG4uZmlsZSxuLmlucHV0RWxlbSk7aWYoXCJvYmplY3RcIj09dHlwZW9mIHMpe2lmKFwiYWJvcnRcIj09PXMuYWN0aW9uKXJldHVybiBlPVwiQWJvcnRFcnJvclwiLHQ9bi5maWxlLHI9bi5pbnB1dEVsZW0saT1zLnJlYXNvbix2b2lkKEooby5lcnJvcikmJm8uZXJyb3Ioe25hbWU6ZX0sdCxyLGkpKTtpZihcInNraXBcIj09PXMuYWN0aW9uKXJldHVybiB2b2lkIGgoKTtcIm9iamVjdFwiPT10eXBlb2Ygcy5jb25maWcmJihuLmluc3RhbmNlQ29uZmlnPWQuZXh0ZW5kKG4uaW5zdGFuY2VDb25maWcscy5jb25maWcpKX1lbHNlIGlmKFwic2tpcFwiPT09cylyZXR1cm4gdm9pZCBoKCl9dmFyIGE9bi5pbnN0YW5jZUNvbmZpZy5jb21wbGV0ZTtuLmluc3RhbmNlQ29uZmlnLmNvbXBsZXRlPWZ1bmN0aW9uKGUpe0ooYSkmJmEoZSxuLmZpbGUsbi5pbnB1dEVsZW0pLGgoKX0sYi5wYXJzZShuLmZpbGUsbi5pbnN0YW5jZUNvbmZpZyl9ZWxzZSBKKG8uY29tcGxldGUpJiZvLmNvbXBsZXRlKCl9ZnVuY3Rpb24gaCgpe3Uuc3BsaWNlKDAsMSksZSgpfX19ZnVuY3Rpb24gaChlKXt0aGlzLl9oYW5kbGU9bnVsbCx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9jb21wbGV0ZWQ9ITEsdGhpcy5faGFsdGVkPSExLHRoaXMuX2lucHV0PW51bGwsdGhpcy5fYmFzZUluZGV4PTAsdGhpcy5fcGFydGlhbExpbmU9XCJcIix0aGlzLl9yb3dDb3VudD0wLHRoaXMuX3N0YXJ0PTAsdGhpcy5fbmV4dENodW5rPW51bGwsdGhpcy5pc0ZpcnN0Q2h1bms9ITAsdGhpcy5fY29tcGxldGVSZXN1bHRzPXtkYXRhOltdLGVycm9yczpbXSxtZXRhOnt9fSxmdW5jdGlvbihlKXt2YXIgdD13KGUpO3QuY2h1bmtTaXplPXBhcnNlSW50KHQuY2h1bmtTaXplKSxlLnN0ZXB8fGUuY2h1bmt8fCh0LmNodW5rU2l6ZT1udWxsKTt0aGlzLl9oYW5kbGU9bmV3IHIodCksKHRoaXMuX2hhbmRsZS5zdHJlYW1lcj10aGlzKS5fY29uZmlnPXR9LmNhbGwodGhpcyxlKSx0aGlzLnBhcnNlQ2h1bms9ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmlzRmlyc3RDaHVuayYmSih0aGlzLl9jb25maWcuYmVmb3JlRmlyc3RDaHVuaykpe3ZhciByPXRoaXMuX2NvbmZpZy5iZWZvcmVGaXJzdENodW5rKGUpO3ZvaWQgMCE9PXImJihlPXIpfXRoaXMuaXNGaXJzdENodW5rPSExLHRoaXMuX2hhbHRlZD0hMTt2YXIgaT10aGlzLl9wYXJ0aWFsTGluZStlO3RoaXMuX3BhcnRpYWxMaW5lPVwiXCI7dmFyIG49dGhpcy5faGFuZGxlLnBhcnNlKGksdGhpcy5fYmFzZUluZGV4LCF0aGlzLl9maW5pc2hlZCk7aWYoIXRoaXMuX2hhbmRsZS5wYXVzZWQoKSYmIXRoaXMuX2hhbmRsZS5hYm9ydGVkKCkpe3ZhciBzPW4ubWV0YS5jdXJzb3I7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9wYXJ0aWFsTGluZT1pLnN1YnN0cmluZyhzLXRoaXMuX2Jhc2VJbmRleCksdGhpcy5fYmFzZUluZGV4PXMpLG4mJm4uZGF0YSYmKHRoaXMuX3Jvd0NvdW50Kz1uLmRhdGEubGVuZ3RoKTt2YXIgYT10aGlzLl9maW5pc2hlZHx8dGhpcy5fY29uZmlnLnByZXZpZXcmJnRoaXMuX3Jvd0NvdW50Pj10aGlzLl9jb25maWcucHJldmlldztpZihvKWYucG9zdE1lc3NhZ2Uoe3Jlc3VsdHM6bix3b3JrZXJJZDpiLldPUktFUl9JRCxmaW5pc2hlZDphfSk7ZWxzZSBpZihKKHRoaXMuX2NvbmZpZy5jaHVuaykmJiF0KXtpZih0aGlzLl9jb25maWcuY2h1bmsobix0aGlzLl9oYW5kbGUpLHRoaXMuX2hhbmRsZS5wYXVzZWQoKXx8dGhpcy5faGFuZGxlLmFib3J0ZWQoKSlyZXR1cm4gdm9pZCh0aGlzLl9oYWx0ZWQ9ITApO249dm9pZCAwLHRoaXMuX2NvbXBsZXRlUmVzdWx0cz12b2lkIDB9cmV0dXJuIHRoaXMuX2NvbmZpZy5zdGVwfHx0aGlzLl9jb25maWcuY2h1bmt8fCh0aGlzLl9jb21wbGV0ZVJlc3VsdHMuZGF0YT10aGlzLl9jb21wbGV0ZVJlc3VsdHMuZGF0YS5jb25jYXQobi5kYXRhKSx0aGlzLl9jb21wbGV0ZVJlc3VsdHMuZXJyb3JzPXRoaXMuX2NvbXBsZXRlUmVzdWx0cy5lcnJvcnMuY29uY2F0KG4uZXJyb3JzKSx0aGlzLl9jb21wbGV0ZVJlc3VsdHMubWV0YT1uLm1ldGEpLHRoaXMuX2NvbXBsZXRlZHx8IWF8fCFKKHRoaXMuX2NvbmZpZy5jb21wbGV0ZSl8fG4mJm4ubWV0YS5hYm9ydGVkfHwodGhpcy5fY29uZmlnLmNvbXBsZXRlKHRoaXMuX2NvbXBsZXRlUmVzdWx0cyx0aGlzLl9pbnB1dCksdGhpcy5fY29tcGxldGVkPSEwKSxhfHxuJiZuLm1ldGEucGF1c2VkfHx0aGlzLl9uZXh0Q2h1bmsoKSxufXRoaXMuX2hhbHRlZD0hMH0sdGhpcy5fc2VuZEVycm9yPWZ1bmN0aW9uKGUpe0oodGhpcy5fY29uZmlnLmVycm9yKT90aGlzLl9jb25maWcuZXJyb3IoZSk6byYmdGhpcy5fY29uZmlnLmVycm9yJiZmLnBvc3RNZXNzYWdlKHt3b3JrZXJJZDpiLldPUktFUl9JRCxlcnJvcjplLGZpbmlzaGVkOiExfSl9fWZ1bmN0aW9uIGwoZSl7dmFyIGk7KGU9ZXx8e30pLmNodW5rU2l6ZXx8KGUuY2h1bmtTaXplPWIuUmVtb3RlQ2h1bmtTaXplKSxoLmNhbGwodGhpcyxlKSx0aGlzLl9uZXh0Q2h1bms9bj9mdW5jdGlvbigpe3RoaXMuX3JlYWRDaHVuaygpLHRoaXMuX2NodW5rTG9hZGVkKCl9OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZENodW5rKCl9LHRoaXMuc3RyZWFtPWZ1bmN0aW9uKGUpe3RoaXMuX2lucHV0PWUsdGhpcy5fbmV4dENodW5rKCl9LHRoaXMuX3JlYWRDaHVuaz1mdW5jdGlvbigpe2lmKHRoaXMuX2ZpbmlzaGVkKXRoaXMuX2NodW5rTG9hZGVkKCk7ZWxzZXtpZihpPW5ldyBYTUxIdHRwUmVxdWVzdCx0aGlzLl9jb25maWcud2l0aENyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9dGhpcy5fY29uZmlnLndpdGhDcmVkZW50aWFscyksbnx8KGkub25sb2FkPXYodGhpcy5fY2h1bmtMb2FkZWQsdGhpcyksaS5vbmVycm9yPXYodGhpcy5fY2h1bmtFcnJvcix0aGlzKSksaS5vcGVuKHRoaXMuX2NvbmZpZy5kb3dubG9hZFJlcXVlc3RCb2R5P1wiUE9TVFwiOlwiR0VUXCIsdGhpcy5faW5wdXQsIW4pLHRoaXMuX2NvbmZpZy5kb3dubG9hZFJlcXVlc3RIZWFkZXJzKXt2YXIgZT10aGlzLl9jb25maWcuZG93bmxvYWRSZXF1ZXN0SGVhZGVycztmb3IodmFyIHQgaW4gZSlpLnNldFJlcXVlc3RIZWFkZXIodCxlW3RdKX1pZih0aGlzLl9jb25maWcuY2h1bmtTaXplKXt2YXIgcj10aGlzLl9zdGFydCt0aGlzLl9jb25maWcuY2h1bmtTaXplLTE7aS5zZXRSZXF1ZXN0SGVhZGVyKFwiUmFuZ2VcIixcImJ5dGVzPVwiK3RoaXMuX3N0YXJ0K1wiLVwiK3IpfXRyeXtpLnNlbmQodGhpcy5fY29uZmlnLmRvd25sb2FkUmVxdWVzdEJvZHkpfWNhdGNoKGUpe3RoaXMuX2NodW5rRXJyb3IoZS5tZXNzYWdlKX1uJiYwPT09aS5zdGF0dXMmJnRoaXMuX2NodW5rRXJyb3IoKX19LHRoaXMuX2NodW5rTG9hZGVkPWZ1bmN0aW9uKCl7ND09PWkucmVhZHlTdGF0ZSYmKGkuc3RhdHVzPDIwMHx8NDAwPD1pLnN0YXR1cz90aGlzLl9jaHVua0Vycm9yKCk6KHRoaXMuX3N0YXJ0Kz10aGlzLl9jb25maWcuY2h1bmtTaXplP3RoaXMuX2NvbmZpZy5jaHVua1NpemU6aS5yZXNwb25zZVRleHQubGVuZ3RoLHRoaXMuX2ZpbmlzaGVkPSF0aGlzLl9jb25maWcuY2h1bmtTaXplfHx0aGlzLl9zdGFydD49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIik7aWYobnVsbD09PXQpcmV0dXJuLTE7cmV0dXJuIHBhcnNlSW50KHQuc3Vic3RyaW5nKHQubGFzdEluZGV4T2YoXCIvXCIpKzEpKX0oaSksdGhpcy5wYXJzZUNodW5rKGkucmVzcG9uc2VUZXh0KSkpfSx0aGlzLl9jaHVua0Vycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PWkuc3RhdHVzVGV4dHx8ZTt0aGlzLl9zZW5kRXJyb3IobmV3IEVycm9yKHQpKX19ZnVuY3Rpb24gYyhlKXt2YXIgaSxuOyhlPWV8fHt9KS5jaHVua1NpemV8fChlLmNodW5rU2l6ZT1iLkxvY2FsQ2h1bmtTaXplKSxoLmNhbGwodGhpcyxlKTt2YXIgcz1cInVuZGVmaW5lZFwiIT10eXBlb2YgRmlsZVJlYWRlcjt0aGlzLnN0cmVhbT1mdW5jdGlvbihlKXt0aGlzLl9pbnB1dD1lLG49ZS5zbGljZXx8ZS53ZWJraXRTbGljZXx8ZS5tb3pTbGljZSxzPygoaT1uZXcgRmlsZVJlYWRlcikub25sb2FkPXYodGhpcy5fY2h1bmtMb2FkZWQsdGhpcyksaS5vbmVycm9yPXYodGhpcy5fY2h1bmtFcnJvcix0aGlzKSk6aT1uZXcgRmlsZVJlYWRlclN5bmMsdGhpcy5fbmV4dENodW5rKCl9LHRoaXMuX25leHRDaHVuaz1mdW5jdGlvbigpe3RoaXMuX2ZpbmlzaGVkfHx0aGlzLl9jb25maWcucHJldmlldyYmISh0aGlzLl9yb3dDb3VudDx0aGlzLl9jb25maWcucHJldmlldyl8fHRoaXMuX3JlYWRDaHVuaygpfSx0aGlzLl9yZWFkQ2h1bms9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9pbnB1dDtpZih0aGlzLl9jb25maWcuY2h1bmtTaXplKXt2YXIgdD1NYXRoLm1pbih0aGlzLl9zdGFydCt0aGlzLl9jb25maWcuY2h1bmtTaXplLHRoaXMuX2lucHV0LnNpemUpO2U9bi5jYWxsKGUsdGhpcy5fc3RhcnQsdCl9dmFyIHI9aS5yZWFkQXNUZXh0KGUsdGhpcy5fY29uZmlnLmVuY29kaW5nKTtzfHx0aGlzLl9jaHVua0xvYWRlZCh7dGFyZ2V0OntyZXN1bHQ6cn19KX0sdGhpcy5fY2h1bmtMb2FkZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQrPXRoaXMuX2NvbmZpZy5jaHVua1NpemUsdGhpcy5fZmluaXNoZWQ9IXRoaXMuX2NvbmZpZy5jaHVua1NpemV8fHRoaXMuX3N0YXJ0Pj10aGlzLl9pbnB1dC5zaXplLHRoaXMucGFyc2VDaHVuayhlLnRhcmdldC5yZXN1bHQpfSx0aGlzLl9jaHVua0Vycm9yPWZ1bmN0aW9uKCl7dGhpcy5fc2VuZEVycm9yKGkuZXJyb3IpfX1mdW5jdGlvbiBwKGUpe3ZhciByO2guY2FsbCh0aGlzLGU9ZXx8e30pLHRoaXMuc3RyZWFtPWZ1bmN0aW9uKGUpe3JldHVybiByPWUsdGhpcy5fbmV4dENodW5rKCl9LHRoaXMuX25leHRDaHVuaz1mdW5jdGlvbigpe2lmKCF0aGlzLl9maW5pc2hlZCl7dmFyIGUsdD10aGlzLl9jb25maWcuY2h1bmtTaXplO3JldHVybiB0PyhlPXIuc3Vic3RyaW5nKDAsdCkscj1yLnN1YnN0cmluZyh0KSk6KGU9cixyPVwiXCIpLHRoaXMuX2ZpbmlzaGVkPSFyLHRoaXMucGFyc2VDaHVuayhlKX19fWZ1bmN0aW9uIGcoZSl7aC5jYWxsKHRoaXMsZT1lfHx7fSk7dmFyIHQ9W10scj0hMCxpPSExO3RoaXMucGF1c2U9ZnVuY3Rpb24oKXtoLnByb3RvdHlwZS5wYXVzZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5faW5wdXQucGF1c2UoKX0sdGhpcy5yZXN1bWU9ZnVuY3Rpb24oKXtoLnByb3RvdHlwZS5yZXN1bWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2lucHV0LnJlc3VtZSgpfSx0aGlzLnN0cmVhbT1mdW5jdGlvbihlKXt0aGlzLl9pbnB1dD1lLHRoaXMuX2lucHV0Lm9uKFwiZGF0YVwiLHRoaXMuX3N0cmVhbURhdGEpLHRoaXMuX2lucHV0Lm9uKFwiZW5kXCIsdGhpcy5fc3RyZWFtRW5kKSx0aGlzLl9pbnB1dC5vbihcImVycm9yXCIsdGhpcy5fc3RyZWFtRXJyb3IpfSx0aGlzLl9jaGVja0lzRmluaXNoZWQ9ZnVuY3Rpb24oKXtpJiYxPT09dC5sZW5ndGgmJih0aGlzLl9maW5pc2hlZD0hMCl9LHRoaXMuX25leHRDaHVuaz1mdW5jdGlvbigpe3RoaXMuX2NoZWNrSXNGaW5pc2hlZCgpLHQubGVuZ3RoP3RoaXMucGFyc2VDaHVuayh0LnNoaWZ0KCkpOnI9ITB9LHRoaXMuX3N0cmVhbURhdGE9dihmdW5jdGlvbihlKXt0cnl7dC5wdXNoKFwic3RyaW5nXCI9PXR5cGVvZiBlP2U6ZS50b1N0cmluZyh0aGlzLl9jb25maWcuZW5jb2RpbmcpKSxyJiYocj0hMSx0aGlzLl9jaGVja0lzRmluaXNoZWQoKSx0aGlzLnBhcnNlQ2h1bmsodC5zaGlmdCgpKSl9Y2F0Y2goZSl7dGhpcy5fc3RyZWFtRXJyb3IoZSl9fSx0aGlzKSx0aGlzLl9zdHJlYW1FcnJvcj12KGZ1bmN0aW9uKGUpe3RoaXMuX3N0cmVhbUNsZWFuVXAoKSx0aGlzLl9zZW5kRXJyb3IoZSl9LHRoaXMpLHRoaXMuX3N0cmVhbUVuZD12KGZ1bmN0aW9uKCl7dGhpcy5fc3RyZWFtQ2xlYW5VcCgpLGk9ITAsdGhpcy5fc3RyZWFtRGF0YShcIlwiKX0sdGhpcyksdGhpcy5fc3RyZWFtQ2xlYW5VcD12KGZ1bmN0aW9uKCl7dGhpcy5faW5wdXQucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsdGhpcy5fc3RyZWFtRGF0YSksdGhpcy5faW5wdXQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIix0aGlzLl9zdHJlYW1FbmQpLHRoaXMuX2lucHV0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIix0aGlzLl9zdHJlYW1FcnJvcil9LHRoaXMpfWZ1bmN0aW9uIHIobSl7dmFyIGEsbyx1LGk9TWF0aC5wb3coMiw1Myksbj0taSxzPS9eXFxzKi0/KFxcZCtcXC4/fFxcLlxcZCt8XFxkK1xcLlxcZCspKFtlRV1bLStdP1xcZCspP1xccyokLyxoPS9eKChcXGR7NH0tWzAxXVxcZC1bMC0zXVxcZFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZFxcLlxcZCsoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKXwoXFxkezR9LVswMV1cXGQtWzAtM11cXGRUWzAtMl1cXGQ6WzAtNV1cXGQoWystXVswLTJdXFxkOlswLTVdXFxkfFopKSkkLyx0PXRoaXMscj0wLGY9MCxkPSExLGU9ITEsbD1bXSxjPXtkYXRhOltdLGVycm9yczpbXSxtZXRhOnt9fTtpZihKKG0uc3RlcCkpe3ZhciBwPW0uc3RlcDttLnN0ZXA9ZnVuY3Rpb24oZSl7aWYoYz1lLF8oKSlnKCk7ZWxzZXtpZihnKCksMD09PWMuZGF0YS5sZW5ndGgpcmV0dXJuO3IrPWUuZGF0YS5sZW5ndGgsbS5wcmV2aWV3JiZyPm0ucHJldmlldz9vLmFib3J0KCk6KGMuZGF0YT1jLmRhdGFbMF0scChjLHQpKX19fWZ1bmN0aW9uIHkoZSl7cmV0dXJuXCJncmVlZHlcIj09PW0uc2tpcEVtcHR5TGluZXM/XCJcIj09PWUuam9pbihcIlwiKS50cmltKCk6MT09PWUubGVuZ3RoJiYwPT09ZVswXS5sZW5ndGh9ZnVuY3Rpb24gZygpe3JldHVybiBjJiZ1JiYoayhcIkRlbGltaXRlclwiLFwiVW5kZXRlY3RhYmxlRGVsaW1pdGVyXCIsXCJVbmFibGUgdG8gYXV0by1kZXRlY3QgZGVsaW1pdGluZyBjaGFyYWN0ZXI7IGRlZmF1bHRlZCB0byAnXCIrYi5EZWZhdWx0RGVsaW1pdGVyK1wiJ1wiKSx1PSExKSxtLnNraXBFbXB0eUxpbmVzJiYoYy5kYXRhPWMuZGF0YS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXkoZSl9KSksXygpJiZmdW5jdGlvbigpe2lmKCFjKXJldHVybjtmdW5jdGlvbiBlKGUsdCl7SihtLnRyYW5zZm9ybUhlYWRlcikmJihlPW0udHJhbnNmb3JtSGVhZGVyKGUsdCkpLGwucHVzaChlKX1pZihBcnJheS5pc0FycmF5KGMuZGF0YVswXSkpe2Zvcih2YXIgdD0wO18oKSYmdDxjLmRhdGEubGVuZ3RoO3QrKyljLmRhdGFbdF0uZm9yRWFjaChlKTtjLmRhdGEuc3BsaWNlKDAsMSl9ZWxzZSBjLmRhdGEuZm9yRWFjaChlKX0oKSxmdW5jdGlvbigpe2lmKCFjfHwhbS5oZWFkZXImJiFtLmR5bmFtaWNUeXBpbmcmJiFtLnRyYW5zZm9ybSlyZXR1cm4gYztmdW5jdGlvbiBlKGUsdCl7dmFyIHIsaT1tLmhlYWRlcj97fTpbXTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLHM9ZVtyXTttLmhlYWRlciYmKG49cj49bC5sZW5ndGg/XCJfX3BhcnNlZF9leHRyYVwiOmxbcl0pLG0udHJhbnNmb3JtJiYocz1tLnRyYW5zZm9ybShzLG4pKSxzPXYobixzKSxcIl9fcGFyc2VkX2V4dHJhXCI9PT1uPyhpW25dPWlbbl18fFtdLGlbbl0ucHVzaChzKSk6aVtuXT1zfXJldHVybiBtLmhlYWRlciYmKHI+bC5sZW5ndGg/ayhcIkZpZWxkTWlzbWF0Y2hcIixcIlRvb01hbnlGaWVsZHNcIixcIlRvbyBtYW55IGZpZWxkczogZXhwZWN0ZWQgXCIrbC5sZW5ndGgrXCIgZmllbGRzIGJ1dCBwYXJzZWQgXCIrcixmK3QpOnI8bC5sZW5ndGgmJmsoXCJGaWVsZE1pc21hdGNoXCIsXCJUb29GZXdGaWVsZHNcIixcIlRvbyBmZXcgZmllbGRzOiBleHBlY3RlZCBcIitsLmxlbmd0aCtcIiBmaWVsZHMgYnV0IHBhcnNlZCBcIityLGYrdCkpLGl9dmFyIHQ9MTshYy5kYXRhLmxlbmd0aHx8QXJyYXkuaXNBcnJheShjLmRhdGFbMF0pPyhjLmRhdGE9Yy5kYXRhLm1hcChlKSx0PWMuZGF0YS5sZW5ndGgpOmMuZGF0YT1lKGMuZGF0YSwwKTttLmhlYWRlciYmYy5tZXRhJiYoYy5tZXRhLmZpZWxkcz1sKTtyZXR1cm4gZis9dCxjfSgpfWZ1bmN0aW9uIF8oKXtyZXR1cm4gbS5oZWFkZXImJjA9PT1sLmxlbmd0aH1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIHI9ZSxtLmR5bmFtaWNUeXBpbmdGdW5jdGlvbiYmdm9pZCAwPT09bS5keW5hbWljVHlwaW5nW3JdJiYobS5keW5hbWljVHlwaW5nW3JdPW0uZHluYW1pY1R5cGluZ0Z1bmN0aW9uKHIpKSwhMD09PShtLmR5bmFtaWNUeXBpbmdbcl18fG0uZHluYW1pY1R5cGluZyk/XCJ0cnVlXCI9PT10fHxcIlRSVUVcIj09PXR8fFwiZmFsc2VcIiE9PXQmJlwiRkFMU0VcIiE9PXQmJihmdW5jdGlvbihlKXtpZihzLnRlc3QoZSkpe3ZhciB0PXBhcnNlRmxvYXQoZSk7aWYobjx0JiZ0PGkpcmV0dXJuITB9cmV0dXJuITF9KHQpP3BhcnNlRmxvYXQodCk6aC50ZXN0KHQpP25ldyBEYXRlKHQpOlwiXCI9PT10P251bGw6dCk6dDt2YXIgcn1mdW5jdGlvbiBrKGUsdCxyLGkpe3ZhciBuPXt0eXBlOmUsY29kZTp0LG1lc3NhZ2U6cn07dm9pZCAwIT09aSYmKG4ucm93PWkpLGMuZXJyb3JzLnB1c2gobil9dGhpcy5wYXJzZT1mdW5jdGlvbihlLHQscil7dmFyIGk9bS5xdW90ZUNoYXJ8fCdcIic7aWYobS5uZXdsaW5lfHwobS5uZXdsaW5lPWZ1bmN0aW9uKGUsdCl7ZT1lLnN1YnN0cmluZygwLDEwNDg1NzYpO3ZhciByPW5ldyBSZWdFeHAoUSh0KStcIihbXl0qPylcIitRKHQpLFwiZ21cIiksaT0oZT1lLnJlcGxhY2UocixcIlwiKSkuc3BsaXQoXCJcXHJcIiksbj1lLnNwbGl0KFwiXFxuXCIpLHM9MTxuLmxlbmd0aCYmblswXS5sZW5ndGg8aVswXS5sZW5ndGg7aWYoMT09PWkubGVuZ3RofHxzKXJldHVyblwiXFxuXCI7Zm9yKHZhciBhPTAsbz0wO288aS5sZW5ndGg7bysrKVwiXFxuXCI9PT1pW29dWzBdJiZhKys7cmV0dXJuIGE+PWkubGVuZ3RoLzI/XCJcXHJcXG5cIjpcIlxcclwifShlLGkpKSx1PSExLG0uZGVsaW1pdGVyKUoobS5kZWxpbWl0ZXIpJiYobS5kZWxpbWl0ZXI9bS5kZWxpbWl0ZXIoZSksYy5tZXRhLmRlbGltaXRlcj1tLmRlbGltaXRlcik7ZWxzZXt2YXIgbj1mdW5jdGlvbihlLHQscixpLG4pe3ZhciBzLGEsbyx1O249bnx8W1wiLFwiLFwiXFx0XCIsXCJ8XCIsXCI7XCIsYi5SRUNPUkRfU0VQLGIuVU5JVF9TRVBdO2Zvcih2YXIgaD0wO2g8bi5sZW5ndGg7aCsrKXt2YXIgZj1uW2hdLGQ9MCxsPTAsYz0wO289dm9pZCAwO2Zvcih2YXIgcD1uZXcgRSh7Y29tbWVudHM6aSxkZWxpbWl0ZXI6ZixuZXdsaW5lOnQscHJldmlldzoxMH0pLnBhcnNlKGUpLGc9MDtnPHAuZGF0YS5sZW5ndGg7ZysrKWlmKHImJnkocC5kYXRhW2ddKSljKys7ZWxzZXt2YXIgXz1wLmRhdGFbZ10ubGVuZ3RoO2wrPV8sdm9pZCAwIT09bz8wPF8mJihkKz1NYXRoLmFicyhfLW8pLG89Xyk6bz1ffTA8cC5kYXRhLmxlbmd0aCYmKGwvPXAuZGF0YS5sZW5ndGgtYyksKHZvaWQgMD09PWF8fGQ8PWEpJiYodm9pZCAwPT09dXx8dTxsKSYmMS45OTxsJiYoYT1kLHM9Zix1PWwpfXJldHVybntzdWNjZXNzZnVsOiEhKG0uZGVsaW1pdGVyPXMpLGJlc3REZWxpbWl0ZXI6c319KGUsbS5uZXdsaW5lLG0uc2tpcEVtcHR5TGluZXMsbS5jb21tZW50cyxtLmRlbGltaXRlcnNUb0d1ZXNzKTtuLnN1Y2Nlc3NmdWw/bS5kZWxpbWl0ZXI9bi5iZXN0RGVsaW1pdGVyOih1PSEwLG0uZGVsaW1pdGVyPWIuRGVmYXVsdERlbGltaXRlciksYy5tZXRhLmRlbGltaXRlcj1tLmRlbGltaXRlcn12YXIgcz13KG0pO3JldHVybiBtLnByZXZpZXcmJm0uaGVhZGVyJiZzLnByZXZpZXcrKyxhPWUsbz1uZXcgRShzKSxjPW8ucGFyc2UoYSx0LHIpLGcoKSxkP3ttZXRhOntwYXVzZWQ6ITB9fTpjfHx7bWV0YTp7cGF1c2VkOiExfX19LHRoaXMucGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIGR9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXtkPSEwLG8uYWJvcnQoKSxhPUoobS5jaHVuayk/XCJcIjphLnN1YnN0cmluZyhvLmdldENoYXJJbmRleCgpKX0sdGhpcy5yZXN1bWU9ZnVuY3Rpb24oKXt0LnN0cmVhbWVyLl9oYWx0ZWQ/KGQ9ITEsdC5zdHJlYW1lci5wYXJzZUNodW5rKGEsITApKTpzZXRUaW1lb3V0KHQucmVzdW1lLDMpfSx0aGlzLmFib3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sdGhpcy5hYm9ydD1mdW5jdGlvbigpe2U9ITAsby5hYm9ydCgpLGMubWV0YS5hYm9ydGVkPSEwLEoobS5jb21wbGV0ZSkmJm0uY29tcGxldGUoYyksYT1cIlwifX1mdW5jdGlvbiBRKGUpe3JldHVybiBlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLFwiXFxcXCQmXCIpfWZ1bmN0aW9uIEUoail7dmFyIHosTT0oaj1qfHx7fSkuZGVsaW1pdGVyLFA9ai5uZXdsaW5lLFU9ai5jb21tZW50cyxxPWouc3RlcCxOPWoucHJldmlldyxCPWouZmFzdE1vZGUsSz16PXZvaWQgMD09PWoucXVvdGVDaGFyfHxudWxsPT09ai5xdW90ZUNoYXI/J1wiJzpqLnF1b3RlQ2hhcjtpZih2b2lkIDAhPT1qLmVzY2FwZUNoYXImJihLPWouZXNjYXBlQ2hhciksKFwic3RyaW5nXCIhPXR5cGVvZiBNfHwtMTxiLkJBRF9ERUxJTUlURVJTLmluZGV4T2YoTSkpJiYoTT1cIixcIiksVT09PU0pdGhyb3cgbmV3IEVycm9yKFwiQ29tbWVudCBjaGFyYWN0ZXIgc2FtZSBhcyBkZWxpbWl0ZXJcIik7ITA9PT1VP1U9XCIjXCI6KFwic3RyaW5nXCIhPXR5cGVvZiBVfHwtMTxiLkJBRF9ERUxJTUlURVJTLmluZGV4T2YoVSkpJiYoVT0hMSksXCJcXG5cIiE9PVAmJlwiXFxyXCIhPT1QJiZcIlxcclxcblwiIT09UCYmKFA9XCJcXG5cIik7dmFyIFc9MCxIPSExO3RoaXMucGFyc2U9ZnVuY3Rpb24oaSx0LHIpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBpKXRocm93IG5ldyBFcnJvcihcIklucHV0IG11c3QgYmUgYSBzdHJpbmdcIik7dmFyIG49aS5sZW5ndGgsZT1NLmxlbmd0aCxzPVAubGVuZ3RoLGE9VS5sZW5ndGgsbz1KKHEpLHU9W10saD1bXSxmPVtdLGQ9Vz0wO2lmKCFpKXJldHVybiBMKCk7aWYoai5oZWFkZXImJiF0KXt2YXIgbD1pLnNwbGl0KFApWzBdLnNwbGl0KE0pLGM9W10scD17fSxnPSExO2Zvcih2YXIgXyBpbiBsKXt2YXIgbT1sW19dO0ooai50cmFuc2Zvcm1IZWFkZXIpJiYobT1qLnRyYW5zZm9ybUhlYWRlcihtLF8pKTt2YXIgeT1tLHY9cFttXXx8MDtmb3IoMDx2JiYoZz0hMCx5PW0rXCJfXCIrdikscFttXT12KzE7Yy5pbmNsdWRlcyh5KTspeT15K1wiX1wiK3Y7Yy5wdXNoKHkpfWlmKGcpe3ZhciBrPWkuc3BsaXQoUCk7a1swXT1jLmpvaW4oTSksaT1rLmpvaW4oUCl9fWlmKEJ8fCExIT09QiYmLTE9PT1pLmluZGV4T2Yoeikpe2Zvcih2YXIgYj1pLnNwbGl0KFApLEU9MDtFPGIubGVuZ3RoO0UrKyl7aWYoZj1iW0VdLFcrPWYubGVuZ3RoLEUhPT1iLmxlbmd0aC0xKVcrPVAubGVuZ3RoO2Vsc2UgaWYocilyZXR1cm4gTCgpO2lmKCFVfHxmLnN1YnN0cmluZygwLGEpIT09VSl7aWYobyl7aWYodT1bXSxJKGYuc3BsaXQoTSkpLEYoKSxIKXJldHVybiBMKCl9ZWxzZSBJKGYuc3BsaXQoTSkpO2lmKE4mJk48PUUpcmV0dXJuIHU9dS5zbGljZSgwLE4pLEwoITApfX1yZXR1cm4gTCgpfWZvcih2YXIgdz1pLmluZGV4T2YoTSxXKSxSPWkuaW5kZXhPZihQLFcpLEM9bmV3IFJlZ0V4cChRKEspK1EoeiksXCJnXCIpLFM9aS5pbmRleE9mKHosVyk7OylpZihpW1ddIT09eilpZihVJiYwPT09Zi5sZW5ndGgmJmkuc3Vic3RyaW5nKFcsVythKT09PVUpe2lmKC0xPT09UilyZXR1cm4gTCgpO1c9UitzLFI9aS5pbmRleE9mKFAsVyksdz1pLmluZGV4T2YoTSxXKX1lbHNlIGlmKC0xIT09dyYmKHc8Unx8LTE9PT1SKSlmLnB1c2goaS5zdWJzdHJpbmcoVyx3KSksVz13K2Usdz1pLmluZGV4T2YoTSxXKTtlbHNle2lmKC0xPT09UilicmVhaztpZihmLnB1c2goaS5zdWJzdHJpbmcoVyxSKSksRChSK3MpLG8mJihGKCksSCkpcmV0dXJuIEwoKTtpZihOJiZ1Lmxlbmd0aD49TilyZXR1cm4gTCghMCl9ZWxzZSBmb3IoUz1XLFcrKzs7KXtpZigtMT09PShTPWkuaW5kZXhPZih6LFMrMSkpKXJldHVybiByfHxoLnB1c2goe3R5cGU6XCJRdW90ZXNcIixjb2RlOlwiTWlzc2luZ1F1b3Rlc1wiLG1lc3NhZ2U6XCJRdW90ZWQgZmllbGQgdW50ZXJtaW5hdGVkXCIscm93OnUubGVuZ3RoLGluZGV4Old9KSxUKCk7aWYoUz09PW4tMSlyZXR1cm4gVChpLnN1YnN0cmluZyhXLFMpLnJlcGxhY2UoQyx6KSk7aWYoeiE9PUt8fGlbUysxXSE9PUspe2lmKHo9PT1LfHwwPT09U3x8aVtTLTFdIT09Syl7LTEhPT13JiZ3PFMrMSYmKHc9aS5pbmRleE9mKE0sUysxKSksLTEhPT1SJiZSPFMrMSYmKFI9aS5pbmRleE9mKFAsUysxKSk7dmFyIE89QSgtMT09PVI/dzpNYXRoLm1pbih3LFIpKTtpZihpLnN1YnN0cihTKzErTyxlKT09PU0pe2YucHVzaChpLnN1YnN0cmluZyhXLFMpLnJlcGxhY2UoQyx6KSksaVtXPVMrMStPK2VdIT09eiYmKFM9aS5pbmRleE9mKHosVykpLHc9aS5pbmRleE9mKE0sVyksUj1pLmluZGV4T2YoUCxXKTticmVha312YXIgeD1BKFIpO2lmKGkuc3Vic3RyaW5nKFMrMSt4LFMrMSt4K3MpPT09UCl7aWYoZi5wdXNoKGkuc3Vic3RyaW5nKFcsUykucmVwbGFjZShDLHopKSxEKFMrMSt4K3MpLHc9aS5pbmRleE9mKE0sVyksUz1pLmluZGV4T2YoeixXKSxvJiYoRigpLEgpKXJldHVybiBMKCk7aWYoTiYmdS5sZW5ndGg+PU4pcmV0dXJuIEwoITApO2JyZWFrfWgucHVzaCh7dHlwZTpcIlF1b3Rlc1wiLGNvZGU6XCJJbnZhbGlkUXVvdGVzXCIsbWVzc2FnZTpcIlRyYWlsaW5nIHF1b3RlIG9uIHF1b3RlZCBmaWVsZCBpcyBtYWxmb3JtZWRcIixyb3c6dS5sZW5ndGgsaW5kZXg6V30pLFMrK319ZWxzZSBTKyt9cmV0dXJuIFQoKTtmdW5jdGlvbiBJKGUpe3UucHVzaChlKSxkPVd9ZnVuY3Rpb24gQShlKXt2YXIgdD0wO2lmKC0xIT09ZSl7dmFyIHI9aS5zdWJzdHJpbmcoUysxLGUpO3ImJlwiXCI9PT1yLnRyaW0oKSYmKHQ9ci5sZW5ndGgpfXJldHVybiB0fWZ1bmN0aW9uIFQoZSl7cmV0dXJuIHJ8fCh2b2lkIDA9PT1lJiYoZT1pLnN1YnN0cmluZyhXKSksZi5wdXNoKGUpLFc9bixJKGYpLG8mJkYoKSksTCgpfWZ1bmN0aW9uIEQoZSl7Vz1lLEkoZiksZj1bXSxSPWkuaW5kZXhPZihQLFcpfWZ1bmN0aW9uIEwoZSl7cmV0dXJue2RhdGE6dSxlcnJvcnM6aCxtZXRhOntkZWxpbWl0ZXI6TSxsaW5lYnJlYWs6UCxhYm9ydGVkOkgsdHJ1bmNhdGVkOiEhZSxjdXJzb3I6ZCsodHx8MCl9fX1mdW5jdGlvbiBGKCl7cShMKCkpLHU9W10saD1bXX19LHRoaXMuYWJvcnQ9ZnVuY3Rpb24oKXtIPSEwfSx0aGlzLmdldENoYXJJbmRleD1mdW5jdGlvbigpe3JldHVybiBXfX1mdW5jdGlvbiBfKGUpe3ZhciB0PWUuZGF0YSxyPWFbdC53b3JrZXJJZF0saT0hMTtpZih0LmVycm9yKXIudXNlckVycm9yKHQuZXJyb3IsdC5maWxlKTtlbHNlIGlmKHQucmVzdWx0cyYmdC5yZXN1bHRzLmRhdGEpe3ZhciBuPXthYm9ydDpmdW5jdGlvbigpe2k9ITAsbSh0LndvcmtlcklkLHtkYXRhOltdLGVycm9yczpbXSxtZXRhOnthYm9ydGVkOiEwfX0pfSxwYXVzZTp5LHJlc3VtZTp5fTtpZihKKHIudXNlclN0ZXApKXtmb3IodmFyIHM9MDtzPHQucmVzdWx0cy5kYXRhLmxlbmd0aCYmKHIudXNlclN0ZXAoe2RhdGE6dC5yZXN1bHRzLmRhdGFbc10sZXJyb3JzOnQucmVzdWx0cy5lcnJvcnMsbWV0YTp0LnJlc3VsdHMubWV0YX0sbiksIWkpO3MrKyk7ZGVsZXRlIHQucmVzdWx0c31lbHNlIEooci51c2VyQ2h1bmspJiYoci51c2VyQ2h1bmsodC5yZXN1bHRzLG4sdC5maWxlKSxkZWxldGUgdC5yZXN1bHRzKX10LmZpbmlzaGVkJiYhaSYmbSh0LndvcmtlcklkLHQucmVzdWx0cyl9ZnVuY3Rpb24gbShlLHQpe3ZhciByPWFbZV07SihyLnVzZXJDb21wbGV0ZSkmJnIudXNlckNvbXBsZXRlKHQpLHIudGVybWluYXRlKCksZGVsZXRlIGFbZV19ZnVuY3Rpb24geSgpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZC5cIil9ZnVuY3Rpb24gdyhlKXtpZihcIm9iamVjdFwiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuIGU7dmFyIHQ9QXJyYXkuaXNBcnJheShlKT9bXTp7fTtmb3IodmFyIHIgaW4gZSl0W3JdPXcoZVtyXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdihlLHQpe3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodCxhcmd1bWVudHMpfX1mdW5jdGlvbiBKKGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGV9cmV0dXJuIG8mJihmLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dm9pZCAwPT09Yi5XT1JLRVJfSUQmJnQmJihiLldPUktFUl9JRD10LndvcmtlcklkKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdC5pbnB1dClmLnBvc3RNZXNzYWdlKHt3b3JrZXJJZDpiLldPUktFUl9JRCxyZXN1bHRzOmIucGFyc2UodC5pbnB1dCx0LmNvbmZpZyksZmluaXNoZWQ6ITB9KTtlbHNlIGlmKGYuRmlsZSYmdC5pbnB1dCBpbnN0YW5jZW9mIEZpbGV8fHQuaW5wdXQgaW5zdGFuY2VvZiBPYmplY3Qpe3ZhciByPWIucGFyc2UodC5pbnB1dCx0LmNvbmZpZyk7ciYmZi5wb3N0TWVzc2FnZSh7d29ya2VySWQ6Yi5XT1JLRVJfSUQscmVzdWx0czpyLGZpbmlzaGVkOiEwfSl9fSksKGwucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1sLChjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGgucHJvdG90eXBlKSkuY29uc3RydWN0b3I9YywocC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShwLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPXAsKGcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1nLGJ9KTsiLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiBJbiB0aGUgYnJvd3NlciB3ZSB0aGVyZWZvcmVcbi8vIHJlcXVpcmUgdGhlIGNyeXB0byBBUEkgYW5kIGRvIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGZhbGxiYWNrIHRvIGxvd2VyIHF1YWxpdHkgcmFuZG9tIG51bWJlclxuLy8gZ2VuZXJhdG9ycyAobGlrZSBNYXRoLnJhbmRvbSgpKS5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi4gQWxzbyxcbiAgICAvLyBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gKG1zQ3J5cHRvKSBvbiBJRTExLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykgfHwgdHlwZW9mIG1zQ3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKTtcblxuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgL14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pOyIsImltcG9ydCB2YWxpZGF0ZSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuXG52YXIgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIpIHtcbiAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMDtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHZhciB1dWlkID0gKGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgM11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDVdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA3XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDhdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxM11dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAxNV1dKS50b0xvd2VyQ2FzZSgpOyAvLyBDb25zaXN0ZW5jeSBjaGVjayBmb3IgdmFsaWQgVVVJRC4gIElmIHRoaXMgdGhyb3dzLCBpdCdzIGxpa2VseSBkdWUgdG8gb25lXG4gIC8vIG9mIHRoZSBmb2xsb3dpbmc6XG4gIC8vIC0gT25lIG9yIG1vcmUgaW5wdXQgYXJyYXkgdmFsdWVzIGRvbid0IG1hcCB0byBhIGhleCBvY3RldCAobGVhZGluZyB0b1xuICAvLyBcInVuZGVmaW5lZFwiIGluIHRoZSB1dWlkKVxuICAvLyAtIEludmFsaWQgaW5wdXQgdmFsdWVzIGZvciB0aGUgUkZDIGB2ZXJzaW9uYCBvciBgdmFyaWFudGAgZmllbGRzXG5cbiAgaWYgKCF2YWxpZGF0ZSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RyaW5naWZ5OyIsImltcG9ydCBSRUdFWCBmcm9tICcuL3JlZ2V4LmpzJztcblxuZnVuY3Rpb24gdmFsaWRhdGUodXVpZCkge1xuICByZXR1cm4gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnICYmIFJFR0VYLnRlc3QodXVpZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHZhbGlkYXRlOyIsImltcG9ydCBybmcgZnJvbSAnLi9ybmcuanMnO1xuaW1wb3J0IHN0cmluZ2lmeSBmcm9tICcuL3N0cmluZ2lmeS5qcyc7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuICBybmRzWzZdID0gcm5kc1s2XSAmIDB4MGYgfCAweDQwO1xuICBybmRzWzhdID0gcm5kc1s4XSAmIDB4M2YgfCAweDgwOyAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcblxuICBpZiAoYnVmKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHJuZHNbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmdpZnkocm5kcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHY0OyIsImltcG9ydCBNZDUgZnJvbSAnc3BhcmstbWQ1JztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgdnV2dXplbGEgZnJvbSAndnV2dXplbGEnO1xuaW1wb3J0IEVFIGZyb20gJ2V2ZW50cyc7XG5cbmZ1bmN0aW9uIGlzQmluYXJ5T2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqZWN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8XG4gICAgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBvYmplY3QgaW5zdGFuY2VvZiBCbG9iKTtcbn1cblxuLyoqXG4gKiBAdGVtcGxhdGUge0FycmF5QnVmZmVyIHwgQmxvYn0gVFxuICogQHBhcmFtIHtUfSBvYmplY3RcbiAqIEByZXR1cm5zIHtUfVxuICovXG5mdW5jdGlvbiBjbG9uZUJpbmFyeU9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyXG4gICAgPyBvYmplY3Quc2xpY2UoMClcbiAgICA6IG9iamVjdC5zbGljZSgwLCBvYmplY3Quc2l6ZSwgb2JqZWN0LnR5cGUpO1xufVxuXG4vLyBtb3N0IG9mIHRoaXMgaXMgYm9ycm93ZWQgZnJvbSBsb2Rhc2guaXNQbGFpbk9iamVjdDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9maXMtY29tcG9uZW50cy9sb2Rhc2guaXNwbGFpbm9iamVjdC9cbi8vIGJsb2IvMjljMzU4MTQwYTc0ZjI1MmFlYjA4YzllYjI4YmVmODZmMjIxN2Q0YS9pbmRleC5qc1xuXG52YXIgZnVuY1RvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocHJvdG8gPT09IG51bGwpIHsgLy8gbm90IHN1cmUgd2hlbiB0aGlzIGhhcHBlbnMsIGJ1dCBJIGd1ZXNzIGl0IGNhblxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJlxuICAgIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIGZ1bmNUb1N0cmluZy5jYWxsKEN0b3IpID09IG9iamVjdEN0b3JTdHJpbmcpO1xufVxuXG5mdW5jdGlvbiBjbG9uZShvYmplY3QpIHtcbiAgdmFyIG5ld09iamVjdDtcbiAgdmFyIGk7XG4gIHZhciBsZW47XG5cbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIG5ld09iamVjdCA9IFtdO1xuICAgIGZvciAoaSA9IDAsIGxlbiA9IG9iamVjdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgbmV3T2JqZWN0W2ldID0gY2xvbmUob2JqZWN0W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld09iamVjdDtcbiAgfVxuXG4gIC8vIHNwZWNpYWwgY2FzZTogdG8gYXZvaWQgaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gSW5kZXhlZERCXG4gIC8vIGFuZCBvdGhlciBiYWNrZW5kcywgd2UgYXV0b21hdGljYWxseSBzdHJpbmdpZnkgRGF0ZXNcbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUgJiYgaXNGaW5pdGUob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIGlmIChpc0JpbmFyeU9iamVjdChvYmplY3QpKSB7XG4gICAgcmV0dXJuIGNsb25lQmluYXJ5T2JqZWN0KG9iamVjdCk7XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3Qob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3Q7IC8vIGRvbid0IGNsb25lIG9iamVjdHMgbGlrZSBXb3JrZXJzXG4gIH1cblxuICBuZXdPYmplY3QgPSB7fTtcbiAgZm9yIChpIGluIG9iamVjdCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGkpKSB7XG4gICAgICB2YXIgdmFsdWUgPSBjbG9uZShvYmplY3RbaV0pO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbmV3T2JqZWN0W2ldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZnVuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgLy8gdGhpcyBpcyBhIHNtb2tlIHRlc3QgYW5kIHNob3VsZCBuZXZlciBhY3R1YWxseSBoYXBwZW5cbiAgICAgIHRocm93IG5ldyBFcnJvcignb25jZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZ1bi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvUHJvbWlzZShmdW5jKSB7XG4gIC8vY3JlYXRlIHRoZSBmdW5jdGlvbiB3ZSB3aWxsIGJlIHJldHVybmluZ1xuICByZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAvLyBDbG9uZSBhcmd1bWVudHNcbiAgICBhcmdzID0gY2xvbmUoYXJncyk7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGlmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24sIGFzc3VtZSBpdHMgYSBjYWxsYmFja1xuICAgIHZhciB1c2VkQ0IgPSAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykgPyBhcmdzLnBvcCgpIDogZmFsc2U7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZnVsZmlsbCwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVzcDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IG9uY2UoZnVuY3Rpb24gKGVyciwgbWVzZykge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdWxmaWxsKG1lc2cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGNyZWF0ZSBhIGNhbGxiYWNrIGZvciB0aGlzIGludm9jYXRpb25cbiAgICAgICAgLy8gYXBwbHkgdGhlIGZ1bmN0aW9uIGluIHRoZSBvcmlnIGNvbnRleHRcbiAgICAgICAgYXJncy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgcmVzcCA9IGZ1bmMuYXBwbHkoc2VsZiwgYXJncyk7XG4gICAgICAgIGlmIChyZXNwICYmIHR5cGVvZiByZXNwLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBmdWxmaWxsKHJlc3ApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBpZiB0aGVyZSBpcyBhIGNhbGxiYWNrLCBjYWxsIGl0IGJhY2tcbiAgICBpZiAodXNlZENCKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICB1c2VkQ0IobnVsbCwgcmVzdWx0KTtcbiAgICAgIH0sIHVzZWRDQik7XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBsb2dBcGlDYWxsKHNlbGYsIG5hbWUsIGFyZ3MpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChzZWxmLmNvbnN0cnVjdG9yLmxpc3RlbmVycygnZGVidWcnKS5sZW5ndGgpIHtcbiAgICB2YXIgbG9nQXJncyA9IFsnYXBpJywgc2VsZi5uYW1lLCBuYW1lXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBsb2dBcmdzLnB1c2goYXJnc1tpXSk7XG4gICAgfVxuICAgIHNlbGYuY29uc3RydWN0b3IuZW1pdCgnZGVidWcnLCBsb2dBcmdzKTtcblxuICAgIC8vIG92ZXJyaWRlIHRoZSBjYWxsYmFjayBpdHNlbGYgdG8gbG9nIHRoZSByZXNwb25zZVxuICAgIHZhciBvcmlnQ2FsbGJhY2sgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdID0gZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICB2YXIgcmVzcG9uc2VBcmdzID0gWydhcGknLCBzZWxmLm5hbWUsIG5hbWVdO1xuICAgICAgcmVzcG9uc2VBcmdzID0gcmVzcG9uc2VBcmdzLmNvbmNhdChcbiAgICAgICAgZXJyID8gWydlcnJvcicsIGVycl0gOiBbJ3N1Y2Nlc3MnLCByZXNdXG4gICAgICApO1xuICAgICAgc2VsZi5jb25zdHJ1Y3Rvci5lbWl0KCdkZWJ1ZycsIHJlc3BvbnNlQXJncyk7XG4gICAgICBvcmlnQ2FsbGJhY2soZXJyLCByZXMpO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRhcHRlckZ1bihuYW1lLCBjYWxsYmFjaykge1xuICByZXR1cm4gdG9Qcm9taXNlKGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKHRoaXMuX2Nsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZGF0YWJhc2UgaXMgY2xvc2VkJykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdkYXRhYmFzZSBpcyBkZXN0cm95ZWQnKSk7XG4gICAgfVxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBsb2dBcGlDYWxsKHNlbGYsIG5hbWUsIGFyZ3MpO1xuICAgIGlmICghdGhpcy50YXNrcXVldWUuaXNSZWFkeSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChmdWxmaWxsLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi50YXNrcXVldWUuYWRkVGFzayhmdW5jdGlvbiAoZmFpbGVkKSB7XG4gICAgICAgICAgaWYgKGZhaWxlZCkge1xuICAgICAgICAgICAgcmVqZWN0KGZhaWxlZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZ1bGZpbGwoc2VsZltuYW1lXS5hcHBseShzZWxmLCBhcmdzKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncyk7XG4gIH0pO1xufVxuXG4vLyBsaWtlIHVuZGVyc2NvcmUvbG9kYXNoIF8ucGljaygpXG5mdW5jdGlvbiBwaWNrKG9iaiwgYXJyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFyci5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBwcm9wID0gYXJyW2ldO1xuICAgIGlmIChwcm9wIGluIG9iaikge1xuICAgICAgcmVzW3Byb3BdID0gb2JqW3Byb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vLyBNb3N0IGJyb3dzZXJzIHRocm90dGxlIGNvbmN1cnJlbnQgcmVxdWVzdHMgYXQgNiwgc28gaXQncyBzaWxseVxuLy8gdG8gc2hpbSBfYnVsa19nZXQgYnkgdHJ5aW5nIHRvIGxhdW5jaCBwb3RlbnRpYWxseSBodW5kcmVkcyBvZiByZXF1ZXN0c1xuLy8gYW5kIHRoZW4gbGV0dGluZyB0aGUgbWFqb3JpdHkgdGltZSBvdXQuIFdlIGNhbiBoYW5kbGUgdGhpcyBvdXJzZWx2ZXMuXG52YXIgTUFYX05VTV9DT05DVVJSRU5UX1JFUVVFU1RTID0gNjtcblxuZnVuY3Rpb24gaWRlbnRpdHlGdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRSZXN1bHRGb3JPcGVuUmV2c0dldChyZXN1bHQpIHtcbiAgcmV0dXJuIFt7XG4gICAgb2s6IHJlc3VsdFxuICB9XTtcbn1cblxuLy8gc2hpbSBmb3IgUC9Db3VjaERCIGFkYXB0ZXJzIHRoYXQgZG9uJ3QgZGlyZWN0bHkgaW1wbGVtZW50IF9idWxrX2dldFxuZnVuY3Rpb24gYnVsa0dldChkYiwgb3B0cywgY2FsbGJhY2spIHtcbiAgdmFyIHJlcXVlc3RzID0gb3B0cy5kb2NzO1xuXG4gIC8vIGNvbnNvbGlkYXRlIGludG8gb25lIHJlcXVlc3QgcGVyIGRvYyBpZiBwb3NzaWJsZVxuICB2YXIgcmVxdWVzdHNCeUlkID0gbmV3IE1hcCgpO1xuICByZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3RzQnlJZC5oYXMocmVxdWVzdC5pZCkpIHtcbiAgICAgIHJlcXVlc3RzQnlJZC5nZXQocmVxdWVzdC5pZCkucHVzaChyZXF1ZXN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdHNCeUlkLnNldChyZXF1ZXN0LmlkLCBbcmVxdWVzdF0pO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIG51bURvY3MgPSByZXF1ZXN0c0J5SWQuc2l6ZTtcbiAgdmFyIG51bURvbmUgPSAwO1xuICB2YXIgcGVyRG9jUmVzdWx0cyA9IG5ldyBBcnJheShudW1Eb2NzKTtcblxuICBmdW5jdGlvbiBjb2xsYXBzZVJlc3VsdHNBbmRGaW5pc2goKSB7XG4gICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICBwZXJEb2NSZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlcykge1xuICAgICAgcmVzLmRvY3MuZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgICAgZG9jczogW2luZm9dXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY2FsbGJhY2sobnVsbCwge3Jlc3VsdHN9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrRG9uZSgpIHtcbiAgICBpZiAoKytudW1Eb25lID09PSBudW1Eb2NzKSB7XG4gICAgICBjb2xsYXBzZVJlc3VsdHNBbmRGaW5pc2goKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnb3RSZXN1bHQoZG9jSW5kZXgsIGlkLCBkb2NzKSB7XG4gICAgcGVyRG9jUmVzdWx0c1tkb2NJbmRleF0gPSB7aWQsIGRvY3N9O1xuICAgIGNoZWNrRG9uZSgpO1xuICB9XG5cbiAgdmFyIGFsbFJlcXVlc3RzID0gW107XG4gIHJlcXVlc3RzQnlJZC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgYWxsUmVxdWVzdHMucHVzaChrZXkpO1xuICB9KTtcblxuICB2YXIgaSA9IDA7XG5cbiAgZnVuY3Rpb24gbmV4dEJhdGNoKCkge1xuXG4gICAgaWYgKGkgPj0gYWxsUmVxdWVzdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHVwVG8gPSBNYXRoLm1pbihpICsgTUFYX05VTV9DT05DVVJSRU5UX1JFUVVFU1RTLCBhbGxSZXF1ZXN0cy5sZW5ndGgpO1xuICAgIHZhciBiYXRjaCA9IGFsbFJlcXVlc3RzLnNsaWNlKGksIHVwVG8pO1xuICAgIHByb2Nlc3NCYXRjaChiYXRjaCwgaSk7XG4gICAgaSArPSBiYXRjaC5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzQmF0Y2goYmF0Y2gsIG9mZnNldCkge1xuICAgIGJhdGNoLmZvckVhY2goZnVuY3Rpb24gKGRvY0lkLCBqKSB7XG4gICAgICB2YXIgZG9jSWR4ID0gb2Zmc2V0ICsgajtcbiAgICAgIHZhciBkb2NSZXF1ZXN0cyA9IHJlcXVlc3RzQnlJZC5nZXQoZG9jSWQpO1xuXG4gICAgICAvLyBqdXN0IHVzZSB0aGUgZmlyc3QgcmVxdWVzdCBhcyB0aGUgXCJ0ZW1wbGF0ZVwiXG4gICAgICAvLyBUT0RPOiBUaGUgX2J1bGtfZ2V0IEFQSSBhbGxvd3MgZm9yIG1vcmUgc3VidGxlIHVzZSBjYXNlcyB0aGFuIHRoaXMsXG4gICAgICAvLyBidXQgZm9yIG5vdyBpdCBpcyB1bmxpa2VseSB0aGF0IHRoZXJlIHdpbGwgYmUgYSBtaXggb2YgZGlmZmVyZW50XG4gICAgICAvLyBcImF0dHNfc2luY2VcIiBvciBcImF0dGFjaG1lbnRzXCIgaW4gdGhlIHNhbWUgcmVxdWVzdCwgc2luY2UgaXQncyBqdXN0XG4gICAgICAvLyByZXBsaWNhdGUuanMgdGhhdCBpcyB1c2luZyB0aGlzIGZvciB0aGUgbW9tZW50LlxuICAgICAgLy8gQWxzbywgYXR0c19zaW5jZSBpcyBhc3BpcmF0aW9uYWwsIHNpbmNlIHdlIGRvbid0IHN1cHBvcnQgaXQgeWV0LlxuICAgICAgdmFyIGRvY09wdHMgPSBwaWNrKGRvY1JlcXVlc3RzWzBdLCBbJ2F0dHNfc2luY2UnLCAnYXR0YWNobWVudHMnXSk7XG4gICAgICBkb2NPcHRzLm9wZW5fcmV2cyA9IGRvY1JlcXVlc3RzLm1hcChmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgICAgICAvLyByZXYgaXMgb3B0aW9uYWwsIG9wZW5fcmV2cyBkaXNhbGxvd2VkXG4gICAgICAgIHJldHVybiByZXF1ZXN0LnJldjtcbiAgICAgIH0pO1xuXG4gICAgICAvLyByZW1vdmUgZmFsc2V5IC8gdW5kZWZpbmVkIHJldmlzaW9uc1xuICAgICAgZG9jT3B0cy5vcGVuX3JldnMgPSBkb2NPcHRzLm9wZW5fcmV2cy5maWx0ZXIoaWRlbnRpdHlGdW5jdGlvbik7XG5cbiAgICAgIHZhciBmb3JtYXRSZXN1bHQgPSBpZGVudGl0eUZ1bmN0aW9uO1xuXG4gICAgICBpZiAoZG9jT3B0cy5vcGVuX3JldnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBkb2NPcHRzLm9wZW5fcmV2cztcblxuICAgICAgICAvLyB3aGVuIGZldGNoaW5nIG9ubHkgdGhlIFwid2lubmluZ1wiIGxlYWYsXG4gICAgICAgIC8vIHRyYW5zZm9ybSB0aGUgcmVzdWx0IHNvIGl0IGxvb2tzIGxpa2UgYW4gb3Blbl9yZXZzXG4gICAgICAgIC8vIHJlcXVlc3RcbiAgICAgICAgZm9ybWF0UmVzdWx0ID0gZm9ybWF0UmVzdWx0Rm9yT3BlblJldnNHZXQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGdsb2JhbGx5LXN1cHBsaWVkIG9wdGlvbnNcbiAgICAgIFsncmV2cycsICdhdHRhY2htZW50cycsICdiaW5hcnknLCAnYWpheCcsICdsYXRlc3QnXS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICBpZiAocGFyYW0gaW4gb3B0cykge1xuICAgICAgICAgIGRvY09wdHNbcGFyYW1dID0gb3B0c1twYXJhbV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGIuZ2V0KGRvY0lkLCBkb2NPcHRzLCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXN1bHQgPSBbe2Vycm9yOiBlcnJ9XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBmb3JtYXRSZXN1bHQocmVzKTtcbiAgICAgICAgfVxuICAgICAgICBnb3RSZXN1bHQoZG9jSWR4LCBkb2NJZCwgcmVzdWx0KTtcbiAgICAgICAgbmV4dEJhdGNoKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5leHRCYXRjaCgpO1xuXG59XG5cbnZhciBoYXNMb2NhbDtcblxudHJ5IHtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ19wb3VjaF9jaGVja19sb2NhbHN0b3JhZ2UnLCAxKTtcbiAgaGFzTG9jYWwgPSAhIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfcG91Y2hfY2hlY2tfbG9jYWxzdG9yYWdlJyk7XG59IGNhdGNoIChlKSB7XG4gIGhhc0xvY2FsID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGhhc0xvY2FsU3RvcmFnZSgpIHtcbiAgcmV0dXJuIGhhc0xvY2FsO1xufVxuXG5jb25zdCBuZXh0VGljayA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayA9PT0gXCJmdW5jdGlvblwiXG4gID8gcXVldWVNaWNyb3Rhc2tcbiAgOiBmdW5jdGlvbiBuZXh0VGljayhmbikge1xuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZm4pO1xuICB9O1xuXG5jbGFzcyBDaGFuZ2VzIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzID0ge307XG5cbiAgICBpZiAoaGFzTG9jYWxTdG9yYWdlKCkpIHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoXCJzdG9yYWdlXCIsIChlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1pdChlLmtleSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhZGRMaXN0ZW5lcihkYk5hbWUsIGlkLCBkYiwgb3B0cykge1xuICAgIGlmICh0aGlzLl9saXN0ZW5lcnNbaWRdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpbnByb2dyZXNzID0gZmFsc2U7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGV2ZW50RnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXNlbGYuX2xpc3RlbmVyc1tpZF0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlucHJvZ3Jlc3MpIHtcbiAgICAgICAgaW5wcm9ncmVzcyA9ICd3YWl0aW5nJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaW5wcm9ncmVzcyA9IHRydWU7XG4gICAgICB2YXIgY2hhbmdlc09wdHMgPSBwaWNrKG9wdHMsIFtcbiAgICAgICAgJ3N0eWxlJywgJ2luY2x1ZGVfZG9jcycsICdhdHRhY2htZW50cycsICdjb25mbGljdHMnLCAnZmlsdGVyJyxcbiAgICAgICAgJ2RvY19pZHMnLCAndmlldycsICdzaW5jZScsICdxdWVyeV9wYXJhbXMnLCAnYmluYXJ5JywgJ3JldHVybl9kb2NzJ1xuICAgICAgXSk7XG5cbiAgICAgIGZ1bmN0aW9uIG9uRXJyb3IoKSB7XG4gICAgICAgIGlucHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgZGIuY2hhbmdlcyhjaGFuZ2VzT3B0cykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIGlmIChjLnNlcSA+IG9wdHMuc2luY2UgJiYgIW9wdHMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgb3B0cy5zaW5jZSA9IGMuc2VxO1xuICAgICAgICAgIG9wdHMub25DaGFuZ2UoYyk7XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdjb21wbGV0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlucHJvZ3Jlc3MgPT09ICd3YWl0aW5nJykge1xuICAgICAgICAgIG5leHRUaWNrKGV2ZW50RnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlucHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIH0pLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLl9saXN0ZW5lcnNbaWRdID0gZXZlbnRGdW5jdGlvbjtcbiAgICB0aGlzLm9uKGRiTmFtZSwgZXZlbnRGdW5jdGlvbik7XG4gIH1cblxuICByZW1vdmVMaXN0ZW5lcihkYk5hbWUsIGlkKSB7XG4gICAgaWYgKCEoaWQgaW4gdGhpcy5fbGlzdGVuZXJzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVMaXN0ZW5lcihkYk5hbWUsIHRoaXMuX2xpc3RlbmVyc1tpZF0pO1xuICAgIGRlbGV0ZSB0aGlzLl9saXN0ZW5lcnNbaWRdO1xuICB9XG5cbiAgbm90aWZ5TG9jYWxXaW5kb3dzKGRiTmFtZSkge1xuICAgIC8vZG8gYSB1c2VsZXNzIGNoYW5nZSBvbiBhIHN0b3JhZ2UgdGhpbmdcbiAgICAvL2luIG9yZGVyIHRvIGdldCBvdGhlciB3aW5kb3dzJ3MgbGlzdGVuZXJzIHRvIGFjdGl2YXRlXG4gICAgaWYgKGhhc0xvY2FsU3RvcmFnZSgpKSB7XG4gICAgICBsb2NhbFN0b3JhZ2VbZGJOYW1lXSA9IChsb2NhbFN0b3JhZ2VbZGJOYW1lXSA9PT0gXCJhXCIpID8gXCJiXCIgOiBcImFcIjtcbiAgICB9XG4gIH1cblxuICBub3RpZnkoZGJOYW1lKSB7XG4gICAgdGhpcy5lbWl0KGRiTmFtZSk7XG4gICAgdGhpcy5ub3RpZnlMb2NhbFdpbmRvd3MoZGJOYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBndWFyZGVkQ29uc29sZShtZXRob2QpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZVttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGNvbnNvbGVbbWV0aG9kXS5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByYW5kb21OdW1iZXIobWluLCBtYXgpIHtcbiAgdmFyIG1heFRpbWVvdXQgPSA2MDAwMDA7IC8vIEhhcmQtY29kZWQgZGVmYXVsdCBvZiAxMCBtaW51dGVzXG4gIG1pbiA9IHBhcnNlSW50KG1pbiwgMTApIHx8IDA7XG4gIG1heCA9IHBhcnNlSW50KG1heCwgMTApO1xuICBpZiAobWF4ICE9PSBtYXggfHwgbWF4IDw9IG1pbikge1xuICAgIG1heCA9IChtaW4gfHwgMSkgPDwgMTsgLy9kb3VibGluZ1xuICB9IGVsc2Uge1xuICAgIG1heCA9IG1heCArIDE7XG4gIH1cbiAgLy8gSW4gb3JkZXIgdG8gbm90IGV4Y2VlZCBtYXhUaW1lb3V0LCBwaWNrIGEgcmFuZG9tIHZhbHVlIGJldHdlZW4gaGFsZiBvZiBtYXhUaW1lb3V0IGFuZCBtYXhUaW1lb3V0XG4gIGlmIChtYXggPiBtYXhUaW1lb3V0KSB7XG4gICAgbWluID0gbWF4VGltZW91dCA+PiAxOyAvLyBkaXZpZGUgYnkgdHdvXG4gICAgbWF4ID0gbWF4VGltZW91dDtcbiAgfVxuICB2YXIgcmF0aW8gPSBNYXRoLnJhbmRvbSgpO1xuICB2YXIgcmFuZ2UgPSBtYXggLSBtaW47XG5cbiAgcmV0dXJuIH5+KHJhbmdlICogcmF0aW8gKyBtaW4pOyAvLyB+fiBjb2VyY2VzIHRvIGFuIGludCwgYnV0IGZhc3QuXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRCYWNrT2ZmKG1pbikge1xuICB2YXIgbWF4ID0gMDtcbiAgaWYgKCFtaW4pIHtcbiAgICBtYXggPSAyMDAwO1xuICB9XG4gIHJldHVybiByYW5kb21OdW1iZXIobWluLCBtYXgpO1xufVxuXG4vLyBkZXNpZ25lZCB0byBnaXZlIGluZm8gdG8gYnJvd3NlciB1c2Vycywgd2hvIGFyZSBkaXN0dXJiZWRcbi8vIHdoZW4gdGhleSBzZWUgaHR0cCBlcnJvcnMgaW4gdGhlIGNvbnNvbGVcbmZ1bmN0aW9uIGV4cGxhaW5FcnJvcihzdGF0dXMsIHN0cikge1xuICBndWFyZGVkQ29uc29sZSgnaW5mbycsICdUaGUgYWJvdmUgJyArIHN0YXR1cyArICcgaXMgdG90YWxseSBub3JtYWwuICcgKyBzdHIpO1xufVxuXG5jbGFzcyBQb3VjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzdGF0dXMsIGVycm9yLCByZWFzb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubmFtZSA9IGVycm9yO1xuICAgIHRoaXMubWVzc2FnZSA9IHJlYXNvbjtcbiAgICB0aGlzLmVycm9yID0gdHJ1ZTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgcmVhc29uOiB0aGlzLnJlYXNvblxuICAgIH0pO1xuICB9XG59XG5cbnZhciBVTkFVVEhPUklaRUQgPSBuZXcgUG91Y2hFcnJvcig0MDEsICd1bmF1dGhvcml6ZWQnLCBcIk5hbWUgb3IgcGFzc3dvcmQgaXMgaW5jb3JyZWN0LlwiKTtcbnZhciBNSVNTSU5HX0JVTEtfRE9DUyA9IG5ldyBQb3VjaEVycm9yKDQwMCwgJ2JhZF9yZXF1ZXN0JywgXCJNaXNzaW5nIEpTT04gbGlzdCBvZiAnZG9jcydcIik7XG52YXIgTUlTU0lOR19ET0MgPSBuZXcgUG91Y2hFcnJvcig0MDQsICdub3RfZm91bmQnLCAnbWlzc2luZycpO1xudmFyIFJFVl9DT05GTElDVCA9IG5ldyBQb3VjaEVycm9yKDQwOSwgJ2NvbmZsaWN0JywgJ0RvY3VtZW50IHVwZGF0ZSBjb25mbGljdCcpO1xudmFyIElOVkFMSURfSUQgPSBuZXcgUG91Y2hFcnJvcig0MDAsICdiYWRfcmVxdWVzdCcsICdfaWQgZmllbGQgbXVzdCBjb250YWluIGEgc3RyaW5nJyk7XG52YXIgTUlTU0lOR19JRCA9IG5ldyBQb3VjaEVycm9yKDQxMiwgJ21pc3NpbmdfaWQnLCAnX2lkIGlzIHJlcXVpcmVkIGZvciBwdXRzJyk7XG52YXIgUkVTRVJWRURfSUQgPSBuZXcgUG91Y2hFcnJvcig0MDAsICdiYWRfcmVxdWVzdCcsICdPbmx5IHJlc2VydmVkIGRvY3VtZW50IGlkcyBtYXkgc3RhcnQgd2l0aCB1bmRlcnNjb3JlLicpO1xudmFyIE5PVF9PUEVOID0gbmV3IFBvdWNoRXJyb3IoNDEyLCAncHJlY29uZGl0aW9uX2ZhaWxlZCcsICdEYXRhYmFzZSBub3Qgb3BlbicpO1xudmFyIFVOS05PV05fRVJST1IgPSBuZXcgUG91Y2hFcnJvcig1MDAsICd1bmtub3duX2Vycm9yJywgJ0RhdGFiYXNlIGVuY291bnRlcmVkIGFuIHVua25vd24gZXJyb3InKTtcbnZhciBCQURfQVJHID0gbmV3IFBvdWNoRXJyb3IoNTAwLCAnYmFkYXJnJywgJ1NvbWUgcXVlcnkgYXJndW1lbnQgaXMgaW52YWxpZCcpO1xudmFyIElOVkFMSURfUkVRVUVTVCA9IG5ldyBQb3VjaEVycm9yKDQwMCwgJ2ludmFsaWRfcmVxdWVzdCcsICdSZXF1ZXN0IHdhcyBpbnZhbGlkJyk7XG52YXIgUVVFUllfUEFSU0VfRVJST1IgPSBuZXcgUG91Y2hFcnJvcig0MDAsICdxdWVyeV9wYXJzZV9lcnJvcicsICdTb21lIHF1ZXJ5IHBhcmFtZXRlciBpcyBpbnZhbGlkJyk7XG52YXIgRE9DX1ZBTElEQVRJT04gPSBuZXcgUG91Y2hFcnJvcig1MDAsICdkb2NfdmFsaWRhdGlvbicsICdCYWQgc3BlY2lhbCBkb2N1bWVudCBtZW1iZXInKTtcbnZhciBCQURfUkVRVUVTVCA9IG5ldyBQb3VjaEVycm9yKDQwMCwgJ2JhZF9yZXF1ZXN0JywgJ1NvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSByZXF1ZXN0Jyk7XG52YXIgTk9UX0FOX09CSkVDVCA9IG5ldyBQb3VjaEVycm9yKDQwMCwgJ2JhZF9yZXF1ZXN0JywgJ0RvY3VtZW50IG11c3QgYmUgYSBKU09OIG9iamVjdCcpO1xudmFyIERCX01JU1NJTkcgPSBuZXcgUG91Y2hFcnJvcig0MDQsICdub3RfZm91bmQnLCAnRGF0YWJhc2Ugbm90IGZvdW5kJyk7XG52YXIgSURCX0VSUk9SID0gbmV3IFBvdWNoRXJyb3IoNTAwLCAnaW5kZXhlZF9kYl93ZW50X2JhZCcsICd1bmtub3duJyk7XG52YXIgV1NRX0VSUk9SID0gbmV3IFBvdWNoRXJyb3IoNTAwLCAnd2ViX3NxbF93ZW50X2JhZCcsICd1bmtub3duJyk7XG52YXIgTERCX0VSUk9SID0gbmV3IFBvdWNoRXJyb3IoNTAwLCAnbGV2ZWxEQl93ZW50X3dlbnRfYmFkJywgJ3Vua25vd24nKTtcbnZhciBGT1JCSURERU4gPSBuZXcgUG91Y2hFcnJvcig0MDMsICdmb3JiaWRkZW4nLCAnRm9yYmlkZGVuIGJ5IGRlc2lnbiBkb2MgdmFsaWRhdGVfZG9jX3VwZGF0ZSBmdW5jdGlvbicpO1xudmFyIElOVkFMSURfUkVWID0gbmV3IFBvdWNoRXJyb3IoNDAwLCAnYmFkX3JlcXVlc3QnLCAnSW52YWxpZCByZXYgZm9ybWF0Jyk7XG52YXIgRklMRV9FWElTVFMgPSBuZXcgUG91Y2hFcnJvcig0MTIsICdmaWxlX2V4aXN0cycsICdUaGUgZGF0YWJhc2UgY291bGQgbm90IGJlIGNyZWF0ZWQsIHRoZSBmaWxlIGFscmVhZHkgZXhpc3RzLicpO1xudmFyIE1JU1NJTkdfU1RVQiA9IG5ldyBQb3VjaEVycm9yKDQxMiwgJ21pc3Npbmdfc3R1YicsICdBIHByZS1leGlzdGluZyBhdHRhY2htZW50IHN0dWIgd2FzblxcJ3QgZm91bmQnKTtcbnZhciBJTlZBTElEX1VSTCA9IG5ldyBQb3VjaEVycm9yKDQxMywgJ2ludmFsaWRfdXJsJywgJ1Byb3ZpZGVkIFVSTCBpcyBpbnZhbGlkJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yKGVycm9yLCByZWFzb24pIHtcbiAgZnVuY3Rpb24gQ3VzdG9tUG91Y2hFcnJvcihyZWFzb24pIHtcbiAgICAvLyBpbmhlcml0IGVycm9yIHByb3BlcnRpZXMgZnJvbSBvdXIgcGFyZW50IGVycm9yIG1hbnVhbGx5XG4gICAgLy8gc28gYXMgdG8gYWxsb3cgcHJvcGVyIEpTT04gcGFyc2luZy5cbiAgICB2YXIgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcik7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIGVycm9yW25hbWVzW2ldXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW25hbWVzW2ldXSA9IGVycm9yW25hbWVzW2ldXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgICB9XG5cbiAgICBpZiAocmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIH1cbiAgfVxuICBDdXN0b21Qb3VjaEVycm9yLnByb3RvdHlwZSA9IFBvdWNoRXJyb3IucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEN1c3RvbVBvdWNoRXJyb3IocmVhc29uKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVFcnJvckZyb21SZXNwb25zZShlcnIpIHtcblxuICBpZiAodHlwZW9mIGVyciAhPT0gJ29iamVjdCcpIHtcbiAgICB2YXIgZGF0YSA9IGVycjtcbiAgICBlcnIgPSBVTktOT1dOX0VSUk9SO1xuICAgIGVyci5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGlmICgnZXJyb3InIGluIGVyciAmJiBlcnIuZXJyb3IgPT09ICdjb25mbGljdCcpIHtcbiAgICBlcnIubmFtZSA9ICdjb25mbGljdCc7XG4gICAgZXJyLnN0YXR1cyA9IDQwOTtcbiAgfVxuXG4gIGlmICghKCduYW1lJyBpbiBlcnIpKSB7XG4gICAgZXJyLm5hbWUgPSBlcnIuZXJyb3IgfHwgJ3Vua25vd24nO1xuICB9XG5cbiAgaWYgKCEoJ3N0YXR1cycgaW4gZXJyKSkge1xuICAgIGVyci5zdGF0dXMgPSA1MDA7XG4gIH1cblxuICBpZiAoISgnbWVzc2FnZScgaW4gZXJyKSkge1xuICAgIGVyci5tZXNzYWdlID0gZXJyLm1lc3NhZ2UgfHwgZXJyLnJlYXNvbjtcbiAgfVxuXG4gIGlmICghKCdzdGFjaycgaW4gZXJyKSkge1xuICAgIGVyci5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiB0cnlGaWx0ZXIoZmlsdGVyLCBkb2MsIHJlcSkge1xuICB0cnkge1xuICAgIHJldHVybiAhZmlsdGVyKGRvYywgcmVxKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdmFyIG1zZyA9ICdGaWx0ZXIgZnVuY3Rpb24gdGhyZXc6ICcgKyBlcnIudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3IoQkFEX1JFUVVFU1QsIG1zZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKG9wdHMpIHtcbiAgdmFyIHJlcSA9IHt9O1xuICB2YXIgaGFzRmlsdGVyID0gb3B0cy5maWx0ZXIgJiYgdHlwZW9mIG9wdHMuZmlsdGVyID09PSAnZnVuY3Rpb24nO1xuICByZXEucXVlcnkgPSBvcHRzLnF1ZXJ5X3BhcmFtcztcblxuICByZXR1cm4gZnVuY3Rpb24gZmlsdGVyKGNoYW5nZSkge1xuICAgIGlmICghY2hhbmdlLmRvYykge1xuICAgICAgLy8gQ1NHIHNlbmRzIGV2ZW50cyBvbiB0aGUgY2hhbmdlcyBmZWVkIHRoYXQgZG9uJ3QgaGF2ZSBkb2N1bWVudHMsXG4gICAgICAvLyB0aGlzIGhhY2sgbWFrZXMgYSB3aG9sZSBsb3Qgb2YgZXhpc3RpbmcgY29kZSByb2J1c3QuXG4gICAgICBjaGFuZ2UuZG9jID0ge307XG4gICAgfVxuXG4gICAgdmFyIGZpbHRlclJldHVybiA9IGhhc0ZpbHRlciAmJiB0cnlGaWx0ZXIob3B0cy5maWx0ZXIsIGNoYW5nZS5kb2MsIHJlcSk7XG5cbiAgICBpZiAodHlwZW9mIGZpbHRlclJldHVybiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJSZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclJldHVybikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghb3B0cy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgIGRlbGV0ZSBjaGFuZ2UuZG9jO1xuICAgIH0gZWxzZSBpZiAoIW9wdHMuYXR0YWNobWVudHMpIHtcbiAgICAgIGZvciAodmFyIGF0dCBpbiBjaGFuZ2UuZG9jLl9hdHRhY2htZW50cykge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZS5kb2MuX2F0dGFjaG1lbnRzLCBhdHQpKSB7XG4gICAgICAgICAgY2hhbmdlLmRvYy5fYXR0YWNobWVudHNbYXR0XS5zdHViID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLy8gc2hpbSBmb3IgRnVuY3Rpb24ucHJvdG90eXBlLm5hbWUsXG5cbi8vIERldGVybWluZSBpZCBhbiBJRCBpcyB2YWxpZFxuLy8gICAtIGludmFsaWQgSURzIGJlZ2luIHdpdGggYW4gdW5kZXJlc2NvcmUgdGhhdCBkb2VzIG5vdCBiZWdpbiAnX2Rlc2lnbicgb3Jcbi8vICAgICAnX2xvY2FsJ1xuLy8gICAtIGFueSBvdGhlciBzdHJpbmcgdmFsdWUgaXMgYSB2YWxpZCBpZFxuLy8gUmV0dXJucyB0aGUgc3BlY2lmaWMgZXJyb3Igb2JqZWN0IGZvciBlYWNoIGNhc2VcbmZ1bmN0aW9uIGludmFsaWRJZEVycm9yKGlkKSB7XG4gIHZhciBlcnI7XG4gIGlmICghaWQpIHtcbiAgICBlcnIgPSBjcmVhdGVFcnJvcihNSVNTSU5HX0lEKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgZXJyID0gY3JlYXRlRXJyb3IoSU5WQUxJRF9JRCk7XG4gIH0gZWxzZSBpZiAoL15fLy50ZXN0KGlkKSAmJiAhKC9eXyhkZXNpZ258bG9jYWwpLykudGVzdChpZCkpIHtcbiAgICBlcnIgPSBjcmVhdGVFcnJvcihSRVNFUlZFRF9JRCk7XG4gIH1cbiAgaWYgKGVycikge1xuICAgIHRocm93IGVycjtcbiAgfVxufVxuXG4vLyBDaGVja3MgaWYgYSBQb3VjaERCIG9iamVjdCBpcyBcInJlbW90ZVwiIG9yIG5vdC4gVGhpcyBpc1xuXG5mdW5jdGlvbiBpc1JlbW90ZShkYikge1xuICBpZiAodHlwZW9mIGRiLl9yZW1vdGUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBkYi5fcmVtb3RlO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICh0eXBlb2YgZGIudHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGd1YXJkZWRDb25zb2xlKCd3YXJuJyxcbiAgICAgICdkYi50eXBlKCkgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgK1xuICAgICAgJ2EgZnV0dXJlIHZlcnNpb24gb2YgUG91Y2hEQicpO1xuICAgIHJldHVybiBkYi50eXBlKCkgPT09ICdodHRwJztcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQoZWUsIHR5cGUpIHtcbiAgcmV0dXJuICdsaXN0ZW5lckNvdW50JyBpbiBlZSA/IGVlLmxpc3RlbmVyQ291bnQodHlwZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUUubGlzdGVuZXJDb3VudChlZSwgdHlwZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGVzaWduRG9jRnVuY3Rpb25OYW1lKHMpIHtcbiAgaWYgKCFzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgdmFyIHBhcnRzID0gcy5zcGxpdCgnLycpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgcmV0dXJuIHBhcnRzO1xuICB9XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gW3MsIHNdO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEZXNpZ25Eb2NGdW5jdGlvbk5hbWUocykge1xuICB2YXIgbm9ybWFsaXplZCA9IHBhcnNlRGVzaWduRG9jRnVuY3Rpb25OYW1lKHMpO1xuICByZXR1cm4gbm9ybWFsaXplZCA/IG5vcm1hbGl6ZWQuam9pbignLycpIDogbnVsbDtcbn1cblxuLy8gb3JpZ2luYWxseSBwYXJzZVVyaSAxLjIuMiwgbm93IHBhdGNoZWQgYnkgdXNcbi8vIChjKSBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT5cbi8vIE1JVCBMaWNlbnNlXG52YXIga2V5cyA9IFtcInNvdXJjZVwiLCBcInByb3RvY29sXCIsIFwiYXV0aG9yaXR5XCIsIFwidXNlckluZm9cIiwgXCJ1c2VyXCIsIFwicGFzc3dvcmRcIixcbiAgICBcImhvc3RcIiwgXCJwb3J0XCIsIFwicmVsYXRpdmVcIiwgXCJwYXRoXCIsIFwiZGlyZWN0b3J5XCIsIFwiZmlsZVwiLCBcInF1ZXJ5XCIsIFwiYW5jaG9yXCJdO1xudmFyIHFOYW1lID1cInF1ZXJ5S2V5XCI7XG52YXIgcVBhcnNlciA9IC8oPzpefCYpKFteJj1dKik9PyhbXiZdKikvZztcblxuLy8gdXNlIHRoZSBcImxvb3NlXCIgcGFyc2VyXG4vKiBlc2xpbnQgbm8tdXNlbGVzcy1lc2NhcGU6IDAgKi9cbnZhciBwYXJzZXIgPSAvXig/Oig/IVteOkBdKzpbXjpAXFwvXSpAKShbXjpcXC8/Iy5dKyk6KT8oPzpcXC9cXC8pPygoPzooKFteOkBdKikoPzo6KFteOkBdKikpPyk/QCk/KFteOlxcLz8jXSopKD86OihcXGQqKSk/KSgoKFxcLyg/OltePyNdKD8hW14/I1xcL10qXFwuW14/I1xcLy5dKyg/Ols/I118JCkpKSpcXC8/KT8oW14/I1xcL10qKSkoPzpcXD8oW14jXSopKT8oPzojKC4qKSk/KS87XG5cbmZ1bmN0aW9uIHBhcnNlVXJpKHN0cikge1xuICB2YXIgbSA9IHBhcnNlci5leGVjKHN0cik7XG4gIHZhciB1cmkgPSB7fTtcbiAgdmFyIGkgPSAxNDtcblxuICB3aGlsZSAoaS0tKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgdmFyIHZhbHVlID0gbVtpXSB8fCBcIlwiO1xuICAgIHZhciBlbmNvZGVkID0gWyd1c2VyJywgJ3Bhc3N3b3JkJ10uaW5kZXhPZihrZXkpICE9PSAtMTtcbiAgICB1cmlba2V5XSA9IGVuY29kZWQgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpIDogdmFsdWU7XG4gIH1cblxuICB1cmlbcU5hbWVdID0ge307XG4gIHVyaVtrZXlzWzEyXV0ucmVwbGFjZShxUGFyc2VyLCBmdW5jdGlvbiAoJDAsICQxLCAkMikge1xuICAgIGlmICgkMSkge1xuICAgICAgdXJpW3FOYW1lXVskMV0gPSAkMjtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB1cmk7XG59XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGV4ZGF2aWQvc2NvcGUtZXZhbCB2MC4wLjNcbi8vIChzb3VyY2U6IGh0dHBzOi8vdW5wa2cuY29tL3Njb3BlLWV2YWxAMC4wLjMvc2NvcGVfZXZhbC5qcylcbi8vIFRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgYSB3cmFwcGVyIGFyb3VuZCBuZXcgRnVuY3Rpb24oKVxuXG5mdW5jdGlvbiBzY29wZUV2YWwoc291cmNlLCBzY29wZSkge1xuICB2YXIga2V5cyA9IFtdO1xuICB2YXIgdmFsdWVzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBzY29wZSkge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2NvcGUsIGtleSkpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgICAgdmFsdWVzLnB1c2goc2NvcGVba2V5XSk7XG4gICAgfVxuICB9XG4gIGtleXMucHVzaChzb3VyY2UpO1xuICByZXR1cm4gRnVuY3Rpb24uYXBwbHkobnVsbCwga2V5cykuYXBwbHkobnVsbCwgdmFsdWVzKTtcbn1cblxuLy8gdGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgXCJ1cGRhdGUgc3VnYXJcIiBmdW5jdGlvbiBmcm9tIGRhbGVoYXJ2ZXkvcG91Y2hkYiMxMzg4XG4vLyB0aGUgZGlmZkZ1biB0ZWxscyB1cyB3aGF0IGRlbHRhIHRvIGFwcGx5IHRvIHRoZSBkb2MuICBpdCBlaXRoZXIgcmV0dXJuc1xuLy8gdGhlIGRvYywgb3IgZmFsc2UgaWYgaXQgZG9lc24ndCBuZWVkIHRvIGRvIGFuIHVwZGF0ZSBhZnRlciBhbGxcbmZ1bmN0aW9uIHVwc2VydChkYiwgZG9jSWQsIGRpZmZGdW4pIHtcbiAgcmV0dXJuIGRiLmdldChkb2NJZClcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLnRoZW4oZnVuY3Rpb24gKGRvYykge1xuICAgICAgLy8gdGhlIHVzZXIgbWlnaHQgY2hhbmdlIHRoZSBfcmV2LCBzbyBzYXZlIGl0IGZvciBwb3N0ZXJpdHlcbiAgICAgIHZhciBkb2NSZXYgPSBkb2MuX3JldjtcbiAgICAgIHZhciBuZXdEb2MgPSBkaWZmRnVuKGRvYyk7XG5cbiAgICAgIGlmICghbmV3RG9jKSB7XG4gICAgICAgIC8vIGlmIHRoZSBkaWZmRnVuIHJldHVybnMgZmFsc3ksIHdlIHNob3J0LWNpcmN1aXQgYXNcbiAgICAgICAgLy8gYW4gb3B0aW1pemF0aW9uXG4gICAgICAgIHJldHVybiB7dXBkYXRlZDogZmFsc2UsIHJldjogZG9jUmV2fTtcbiAgICAgIH1cblxuICAgICAgLy8gdXNlcnMgYXJlbid0IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZXNlIHZhbHVlcyxcbiAgICAgIC8vIHNvIHJlc2V0IHRoZW0gaGVyZVxuICAgICAgbmV3RG9jLl9pZCA9IGRvY0lkO1xuICAgICAgbmV3RG9jLl9yZXYgPSBkb2NSZXY7XG4gICAgICByZXR1cm4gdHJ5QW5kUHV0KGRiLCBuZXdEb2MsIGRpZmZGdW4pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiB0cnlBbmRQdXQoZGIsIGRvYywgZGlmZkZ1bikge1xuICByZXR1cm4gZGIucHV0KGRvYykudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZWQ6IHRydWUsXG4gICAgICByZXY6IHJlcy5yZXZcbiAgICB9O1xuICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAoZXJyLnN0YXR1cyAhPT0gNDA5KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiB1cHNlcnQoZGIsIGRvYy5faWQsIGRpZmZGdW4pO1xuICB9KTtcbn1cblxudmFyIHRoaXNBdG9iID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gYXRvYihzdHIpO1xufTtcblxudmFyIHRoaXNCdG9hID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gYnRvYShzdHIpO1xufTtcblxuLy8gQWJzdHJhY3RzIGNvbnN0cnVjdGluZyBhIEJsb2Igb2JqZWN0LCBzbyBpdCBhbHNvIHdvcmtzIGluIG9sZGVyXG4vLyBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlIG5hdGl2ZSBCbG9iIGNvbnN0cnVjdG9yIChlLmcuXG4vLyBvbGQgUXRXZWJLaXQgdmVyc2lvbnMsIEFuZHJvaWQgPCA0LjQpLlxuZnVuY3Rpb24gY3JlYXRlQmxvYihwYXJ0cywgcHJvcGVydGllcykge1xuICAvKiBnbG9iYWwgQmxvYkJ1aWxkZXIsTVNCbG9iQnVpbGRlcixNb3pCbG9iQnVpbGRlcixXZWJLaXRCbG9iQnVpbGRlciAqL1xuICBwYXJ0cyA9IHBhcnRzIHx8IFtdO1xuICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IEJsb2IocGFydHMsIHByb3BlcnRpZXMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUubmFtZSAhPT0gXCJUeXBlRXJyb3JcIikge1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gQmxvYkJ1aWxkZXIgOlxuICAgICAgICAgICAgICAgICAgdHlwZW9mIE1TQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gTVNCbG9iQnVpbGRlciA6XG4gICAgICAgICAgICAgICAgICB0eXBlb2YgTW96QmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gTW96QmxvYkJ1aWxkZXIgOlxuICAgICAgICAgICAgICAgICAgV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhcnRzW2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYihwcm9wZXJ0aWVzLnR5cGUpO1xuICB9XG59XG5cbi8vIEZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDk2NzY0Ny8gKGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUpXG4vLyBlbmNvZGUtZGVjb2RlLWltYWdlLXdpdGgtYmFzZTY0LWJyZWFrcy1pbWFnZSAoMjAxMy0wNC0yMSlcbmZ1bmN0aW9uIGJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYmluKSB7XG4gIHZhciBsZW5ndGggPSBiaW4ubGVuZ3RoO1xuICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7XG4gIHZhciBhcnIgPSBuZXcgVWludDhBcnJheShidWYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyW2ldID0gYmluLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZnVuY3Rpb24gYmluU3RyaW5nVG9CbHVmZmVyKGJpblN0cmluZywgdHlwZSkge1xuICByZXR1cm4gY3JlYXRlQmxvYihbYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlcihiaW5TdHJpbmcpXSwge3R5cGV9KTtcbn1cblxuZnVuY3Rpb24gYjY0VG9CbHVmZmVyKGI2NCwgdHlwZSkge1xuICByZXR1cm4gYmluU3RyaW5nVG9CbHVmZmVyKHRoaXNBdG9iKGI2NCksIHR5cGUpO1xufVxuXG4vL0Nhbid0IGZpbmQgb3JpZ2luYWwgcG9zdCwgYnV0IHRoaXMgaXMgY2xvc2Vcbi8vaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82OTY1MTA3LyAoY29udGludWVzIG9uIG5leHQgbGluZSlcbi8vY29udmVydGluZy1iZXR3ZWVuLXN0cmluZ3MtYW5kLWFycmF5YnVmZmVyc1xuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhidWZmZXIpIHtcbiAgdmFyIGJpbmFyeSA9ICcnO1xuICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICB2YXIgbGVuZ3RoID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgfVxuICByZXR1cm4gYmluYXJ5O1xufVxuXG4vLyBzaGltIGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaXRcbmZ1bmN0aW9uIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iLCBjYWxsYmFjaykge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgdmFyIGhhc0JpbmFyeVN0cmluZyA9IHR5cGVvZiByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nID09PSAnZnVuY3Rpb24nO1xuICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0IHx8ICcnO1xuICAgIGlmIChoYXNCaW5hcnlTdHJpbmcpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhyZXN1bHQpO1xuICAgIH1cbiAgICBjYWxsYmFjayhhcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKHJlc3VsdCkpO1xuICB9O1xuICBpZiAoaGFzQmluYXJ5U3RyaW5nKSB7XG4gICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhibG9iKTtcbiAgfSBlbHNlIHtcbiAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmxvYlRvQmluYXJ5U3RyaW5nKGJsb2JPckJ1ZmZlciwgY2FsbGJhY2spIHtcbiAgcmVhZEFzQmluYXJ5U3RyaW5nKGJsb2JPckJ1ZmZlciwgZnVuY3Rpb24gKGJpbikge1xuICAgIGNhbGxiYWNrKGJpbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBibG9iVG9CYXNlNjQoYmxvYk9yQnVmZmVyLCBjYWxsYmFjaykge1xuICBibG9iVG9CaW5hcnlTdHJpbmcoYmxvYk9yQnVmZmVyLCBmdW5jdGlvbiAoYmFzZTY0KSB7XG4gICAgY2FsbGJhY2sodGhpc0J0b2EoYmFzZTY0KSk7XG4gIH0pO1xufVxuXG4vLyBzaW1wbGlmaWVkIEFQSS4gdW5pdmVyc2FsIGJyb3dzZXIgc3VwcG9ydCBpcyBhc3N1bWVkXG5mdW5jdGlvbiByZWFkQXNBcnJheUJ1ZmZlcihibG9iLCBjYWxsYmFjaykge1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgcmVhZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGUudGFyZ2V0LnJlc3VsdCB8fCBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgY2FsbGJhY2socmVzdWx0KTtcbiAgfTtcbiAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xufVxuXG4vLyB0aGlzIGlzIG5vdCB1c2VkIGluIHRoZSBicm93c2VyXG5cbnZhciBzZXRJbW1lZGlhdGVTaGltID0gc2VsZi5zZXRJbW1lZGlhdGUgfHwgc2VsZi5zZXRUaW1lb3V0O1xudmFyIE1ENV9DSFVOS19TSVpFID0gMzI3Njg7XG5cbmZ1bmN0aW9uIHJhd1RvQmFzZTY0KHJhdykge1xuICByZXR1cm4gdGhpc0J0b2EocmF3KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kQmxvYihidWZmZXIsIGJsb2IsIHN0YXJ0LCBlbmQsIGNhbGxiYWNrKSB7XG4gIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgYmxvYi5zaXplKSB7XG4gICAgLy8gb25seSBzbGljZSBibG9iIGlmIHdlIHJlYWxseSBuZWVkIHRvXG4gICAgYmxvYiA9IGJsb2Iuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gIH1cbiAgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYiwgZnVuY3Rpb24gKGFycmF5QnVmZmVyKSB7XG4gICAgYnVmZmVyLmFwcGVuZChhcnJheUJ1ZmZlcik7XG4gICAgY2FsbGJhY2soKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFN0cmluZyhidWZmZXIsIHN0cmluZywgc3RhcnQsIGVuZCwgY2FsbGJhY2spIHtcbiAgaWYgKHN0YXJ0ID4gMCB8fCBlbmQgPCBzdHJpbmcubGVuZ3RoKSB7XG4gICAgLy8gb25seSBjcmVhdGUgYSBzdWJzdHJpbmcgaWYgd2UgcmVhbGx5IG5lZWQgdG9cbiAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpO1xuICB9XG4gIGJ1ZmZlci5hcHBlbmRCaW5hcnkoc3RyaW5nKTtcbiAgY2FsbGJhY2soKTtcbn1cblxuZnVuY3Rpb24gYmluYXJ5TWQ1KGRhdGEsIGNhbGxiYWNrKSB7XG4gIHZhciBpbnB1dElzU3RyaW5nID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnO1xuICB2YXIgbGVuID0gaW5wdXRJc1N0cmluZyA/IGRhdGEubGVuZ3RoIDogZGF0YS5zaXplO1xuICB2YXIgY2h1bmtTaXplID0gTWF0aC5taW4oTUQ1X0NIVU5LX1NJWkUsIGxlbik7XG4gIHZhciBjaHVua3MgPSBNYXRoLmNlaWwobGVuIC8gY2h1bmtTaXplKTtcbiAgdmFyIGN1cnJlbnRDaHVuayA9IDA7XG4gIHZhciBidWZmZXIgPSBpbnB1dElzU3RyaW5nID8gbmV3IE1kNSgpIDogbmV3IE1kNS5BcnJheUJ1ZmZlcigpO1xuXG4gIHZhciBhcHBlbmQgPSBpbnB1dElzU3RyaW5nID8gYXBwZW5kU3RyaW5nIDogYXBwZW5kQmxvYjtcblxuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHNldEltbWVkaWF0ZVNoaW0obG9hZE5leHRDaHVuayk7XG4gIH1cblxuICBmdW5jdGlvbiBkb25lKCkge1xuICAgIHZhciByYXcgPSBidWZmZXIuZW5kKHRydWUpO1xuICAgIHZhciBiYXNlNjQgPSByYXdUb0Jhc2U2NChyYXcpO1xuICAgIGNhbGxiYWNrKGJhc2U2NCk7XG4gICAgYnVmZmVyLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWROZXh0Q2h1bmsoKSB7XG4gICAgdmFyIHN0YXJ0ID0gY3VycmVudENodW5rICogY2h1bmtTaXplO1xuICAgIHZhciBlbmQgPSBzdGFydCArIGNodW5rU2l6ZTtcbiAgICBjdXJyZW50Q2h1bmsrKztcbiAgICBpZiAoY3VycmVudENodW5rIDwgY2h1bmtzKSB7XG4gICAgICBhcHBlbmQoYnVmZmVyLCBkYXRhLCBzdGFydCwgZW5kLCBuZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kKGJ1ZmZlciwgZGF0YSwgc3RhcnQsIGVuZCwgZG9uZSk7XG4gICAgfVxuICB9XG4gIGxvYWROZXh0Q2h1bmsoKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nTWQ1KHN0cmluZykge1xuICByZXR1cm4gTWQ1Lmhhc2goc3RyaW5nKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJldmlzaW9uIHN0cmluZyB0aGF0IGRvZXMgTk9UIGluY2x1ZGUgdGhlIHJldmlzaW9uIGhlaWdodFxuICogRm9yIGV4YW1wbGUgJzU2NjQ5ZjFiMDUwNmM2Y2E5ZmRhMDc0NmViMGNhY2RmJ1xuICovXG5mdW5jdGlvbiByZXYoZG9jLCBkZXRlcm1pbmlzdGljX3JldnMpIHtcbiAgaWYgKCFkZXRlcm1pbmlzdGljX3JldnMpIHtcbiAgICByZXR1cm4gdjQoKS5yZXBsYWNlKC8tL2csICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdmFyIG11dGF0ZWFibGVEb2MgPSBPYmplY3QuYXNzaWduKHt9LCBkb2MpO1xuICBkZWxldGUgbXV0YXRlYWJsZURvYy5fcmV2X3RyZWU7XG4gIHJldHVybiBzdHJpbmdNZDUoSlNPTi5zdHJpbmdpZnkobXV0YXRlYWJsZURvYykpO1xufVxuXG52YXIgdXVpZCA9IHY0OyAvLyBtaW1pYyBvbGQgaW1wb3J0LCBvbmx5IHY0IGlzIGV2ZXIgdXNlZCBlbHNld2hlcmVcblxuLy8gV2UgZmV0Y2ggYWxsIGxlYWZzIG9mIHRoZSByZXZpc2lvbiB0cmVlLCBhbmQgc29ydCB0aGVtIGJhc2VkIG9uIHRyZWUgbGVuZ3RoXG4vLyBhbmQgd2hldGhlciB0aGV5IHdlcmUgZGVsZXRlZCwgdW5kZWxldGVkIGRvY3VtZW50cyB3aXRoIHRoZSBsb25nZXN0IHJldmlzaW9uXG4vLyB0cmVlIChtb3N0IGVkaXRzKSB3aW5cbi8vIFRoZSBmaW5hbCBzb3J0IGFsZ29yaXRobSBpcyBzbGlnaHRseSBkb2N1bWVudGVkIGluIGEgc2lkZWJhciBoZXJlOlxuLy8gaHR0cDovL2d1aWRlLmNvdWNoZGIub3JnL2RyYWZ0L2NvbmZsaWN0cy5odG1sXG5mdW5jdGlvbiB3aW5uaW5nUmV2KG1ldGFkYXRhKSB7XG4gIHZhciB3aW5uaW5nSWQ7XG4gIHZhciB3aW5uaW5nUG9zO1xuICB2YXIgd2lubmluZ0RlbGV0ZWQ7XG4gIHZhciB0b1Zpc2l0ID0gbWV0YWRhdGEucmV2X3RyZWUuc2xpY2UoKTtcbiAgdmFyIG5vZGU7XG4gIHdoaWxlICgobm9kZSA9IHRvVmlzaXQucG9wKCkpKSB7XG4gICAgdmFyIHRyZWUgPSBub2RlLmlkcztcbiAgICB2YXIgYnJhbmNoZXMgPSB0cmVlWzJdO1xuICAgIHZhciBwb3MgPSBub2RlLnBvcztcbiAgICBpZiAoYnJhbmNoZXMubGVuZ3RoKSB7IC8vIG5vbi1sZWFmXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnJhbmNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdG9WaXNpdC5wdXNoKHtwb3M6IHBvcyArIDEsIGlkczogYnJhbmNoZXNbaV19KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgZGVsZXRlZCA9ICEhdHJlZVsxXS5kZWxldGVkO1xuICAgIHZhciBpZCA9IHRyZWVbMF07XG4gICAgLy8gc29ydCBieSBkZWxldGVkLCB0aGVuIHBvcywgdGhlbiBpZFxuICAgIGlmICghd2lubmluZ0lkIHx8ICh3aW5uaW5nRGVsZXRlZCAhPT0gZGVsZXRlZCA/IHdpbm5pbmdEZWxldGVkIDpcbiAgICAgICAgd2lubmluZ1BvcyAhPT0gcG9zID8gd2lubmluZ1BvcyA8IHBvcyA6IHdpbm5pbmdJZCA8IGlkKSkge1xuICAgICAgd2lubmluZ0lkID0gaWQ7XG4gICAgICB3aW5uaW5nUG9zID0gcG9zO1xuICAgICAgd2lubmluZ0RlbGV0ZWQgPSBkZWxldGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3aW5uaW5nUG9zICsgJy0nICsgd2lubmluZ0lkO1xufVxuXG4vLyBQcmV0dHkgbXVjaCBhbGwgYmVsb3cgY2FuIGJlIGNvbWJpbmVkIGludG8gYSBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG9cbi8vIHRyYXZlcnNlIHJldmlzaW9uc1xuLy8gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCBhcyBjb250ZXh0IHRvIGFsbFxuLy8gY2hpbGRyZW4gb2YgdGhhdCBub2RlXG5mdW5jdGlvbiB0cmF2ZXJzZVJldlRyZWUocmV2cywgY2FsbGJhY2spIHtcbiAgdmFyIHRvVmlzaXQgPSByZXZzLnNsaWNlKCk7XG5cbiAgdmFyIG5vZGU7XG4gIHdoaWxlICgobm9kZSA9IHRvVmlzaXQucG9wKCkpKSB7XG4gICAgdmFyIHBvcyA9IG5vZGUucG9zO1xuICAgIHZhciB0cmVlID0gbm9kZS5pZHM7XG4gICAgdmFyIGJyYW5jaGVzID0gdHJlZVsyXTtcbiAgICB2YXIgbmV3Q3R4ID1cbiAgICAgIGNhbGxiYWNrKGJyYW5jaGVzLmxlbmd0aCA9PT0gMCwgcG9zLCB0cmVlWzBdLCBub2RlLmN0eCwgdHJlZVsxXSk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGJyYW5jaGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB0b1Zpc2l0LnB1c2goe3BvczogcG9zICsgMSwgaWRzOiBicmFuY2hlc1tpXSwgY3R4OiBuZXdDdHh9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc29ydEJ5UG9zKGEsIGIpIHtcbiAgcmV0dXJuIGEucG9zIC0gYi5wb3M7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RMZWF2ZXMocmV2cykge1xuICB2YXIgbGVhdmVzID0gW107XG4gIHRyYXZlcnNlUmV2VHJlZShyZXZzLCBmdW5jdGlvbiAoaXNMZWFmLCBwb3MsIGlkLCBhY2MsIG9wdHMpIHtcbiAgICBpZiAoaXNMZWFmKSB7XG4gICAgICBsZWF2ZXMucHVzaCh7cmV2OiBwb3MgKyBcIi1cIiArIGlkLCBwb3MsIG9wdHN9KTtcbiAgICB9XG4gIH0pO1xuICBsZWF2ZXMuc29ydChzb3J0QnlQb3MpLnJldmVyc2UoKTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxlYXZlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGRlbGV0ZSBsZWF2ZXNbaV0ucG9zO1xuICB9XG4gIHJldHVybiBsZWF2ZXM7XG59XG5cbi8vIHJldHVybnMgcmV2cyBvZiBhbGwgY29uZmxpY3RzIHRoYXQgaXMgbGVhdmVzIHN1Y2ggdGhhdFxuLy8gMS4gYXJlIG5vdCBkZWxldGVkIGFuZFxuLy8gMi4gYXJlIGRpZmZlcmVudCB0aGFuIHdpbm5pbmcgcmV2aXNpb25cbmZ1bmN0aW9uIGNvbGxlY3RDb25mbGljdHMobWV0YWRhdGEpIHtcbiAgdmFyIHdpbiA9IHdpbm5pbmdSZXYobWV0YWRhdGEpO1xuICB2YXIgbGVhdmVzID0gY29sbGVjdExlYXZlcyhtZXRhZGF0YS5yZXZfdHJlZSk7XG4gIHZhciBjb25mbGljdHMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGxlYXZlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBsZWFmID0gbGVhdmVzW2ldO1xuICAgIGlmIChsZWFmLnJldiAhPT0gd2luICYmICFsZWFmLm9wdHMuZGVsZXRlZCkge1xuICAgICAgY29uZmxpY3RzLnB1c2gobGVhZi5yZXYpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY29uZmxpY3RzO1xufVxuXG4vLyBjb21wYWN0IGEgdHJlZSBieSBtYXJraW5nIGl0cyBub24tbGVhZnMgYXMgbWlzc2luZyxcbi8vIGFuZCByZXR1cm4gYSBsaXN0IG9mIHJldnMgdG8gZGVsZXRlXG5mdW5jdGlvbiBjb21wYWN0VHJlZShtZXRhZGF0YSkge1xuICB2YXIgcmV2cyA9IFtdO1xuICB0cmF2ZXJzZVJldlRyZWUobWV0YWRhdGEucmV2X3RyZWUsIGZ1bmN0aW9uIChpc0xlYWYsIHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2SGFzaCwgY3R4LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMuc3RhdHVzID09PSAnYXZhaWxhYmxlJyAmJiAhaXNMZWFmKSB7XG4gICAgICByZXZzLnB1c2gocG9zICsgJy0nICsgcmV2SGFzaCk7XG4gICAgICBvcHRzLnN0YXR1cyA9ICdtaXNzaW5nJztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmV2cztcbn1cblxuLy8gYGZpbmRQYXRoVG9MZWFmKClgIHJldHVybnMgYW4gYXJyYXkgb2YgcmV2cyB0aGF0IGdvZXMgZnJvbSB0aGUgc3BlY2lmaWVkXG4vLyBsZWFmIHJldiB0byB0aGUgcm9vdCBvZiB0aGF0IGxlYWbigJlzIGJyYW5jaC5cbi8vXG4vLyBlZy4gZm9yIHRoaXMgcmV2IHRyZWU6XG4vLyAxLTk2OTIg4pa2IDItMzdhYSDilrYgMy1kZjIyIOKWtiA0LTZlOTQg4pa2IDUtZGY0YSDilrYgNi02YTNhIOKWtiA3LTU3ZTVcbi8vICAgICAgICAgIOKUgyAgICAgICAgICAgICAgICAg4pSX4pSB4pSB4pSB4pSB4pSB4pSB4pa2IDUtOGQ4YyDilrYgNi02NWUwXG4vLyAgICAgICAgICDilJfilIHilIHilIHilIHilIHilIHilrYgMy00M2Y2IOKWtiA0LWEzYjRcbi8vXG4vLyBGb3IgYSBgdGFyZ2V0UmV2YCBvZiAnNy01N2U1JywgYGZpbmRQYXRoVG9MZWFmKClgIHdvdWxkIHJldHVybiBbJzctNTdlNScsICc2LTZhM2EnLCAnNS1kZjRhJ11cbi8vIFRoZSBgcmV2c2AgYXJndW1lbnQgaGFzIHRoZSBzYW1lIHN0cnVjdHVyZSBhcyB3aGF0IGByZXZzX3RyZWVgIGhhcyBvbiBlLmcuXG4vLyB0aGUgSW5kZXhlZERCIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXYgdHJlZSBkYXRhc3RydWN0dXJlLiBQbGVhc2UgcmVmZXIgdG9cbi8vIHRlc3RzL3VuaXQvdGVzdC5wdXJnZS5qcyBmb3IgZXhhbXBsZXMgb2Ygd2hhdCB0aGVzZSBsb29rIGxpa2UuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHRocm93IGFuIGVycm9yIGlmOlxuLy8gLSBUaGUgcmVxdWVzdGVkIHJldmlzaW9uIGRvZXMgbm90IGV4aXN0XG4vLyAtIFRoZSByZXF1ZXN0ZWQgcmV2aXNpb24gaXMgbm90IGEgbGVhZlxuZnVuY3Rpb24gZmluZFBhdGhUb0xlYWYocmV2cywgdGFyZ2V0UmV2KSB7XG4gIGxldCBwYXRoID0gW107XG4gIGNvbnN0IHRvVmlzaXQgPSByZXZzLnNsaWNlKCk7XG5cbiAgbGV0IG5vZGU7XG4gIHdoaWxlICgobm9kZSA9IHRvVmlzaXQucG9wKCkpKSB7XG4gICAgY29uc3QgeyBwb3MsIGlkczogdHJlZSB9ID0gbm9kZTtcbiAgICBjb25zdCByZXYgPSBgJHtwb3N9LSR7dHJlZVswXX1gO1xuICAgIGNvbnN0IGJyYW5jaGVzID0gdHJlZVsyXTtcblxuICAgIC8vIGp1c3QgYXNzdW1pbmcgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9uIHRoZSBwYXRoIHVwIHRvd2FyZHMgb3VyIGRlc2lyZWQgbGVhZi5cbiAgICBwYXRoLnB1c2gocmV2KTtcblxuICAgIC8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGxlYWYgb2Ygb3VyIGRyZWFtcywgc28gcmV0dXJuIHRoZSBjb21wdXRlZCBwYXRoLlxuICAgIGlmIChyZXYgPT09IHRhcmdldFJldikge1xuICAgICAgLy/igKZ1bmxlZWVlZXNzXG4gICAgICBpZiAoYnJhbmNoZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcXVlc3RlZCByZXZpc2lvbiBpcyBub3QgYSBsZWFmJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aC5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBpcyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFmdGVyIHdlIGhhdmUgYSBsZWFmIChgYnJhbmNoZXMubGVuZ3RoID09IDBgKSwgd2UgaGFuZGxlIHRoZSBuZXh0XG4gICAgLy8gYnJhbmNoLiB0aGlzIGlzIHRydWUgZm9yIGFsbCBicmFuY2hlcyBvdGhlciB0aGFuIHRoZSBwYXRoIGxlYWRpbmcgdG8gdGhlIHdpbm5pbmcgcmV2ICh3aGljaCBpcyA3LTU3ZTUgaW5cbiAgICAvLyB0aGUgZXhhbXBsZSBhYm92ZS4gaSd2ZSBhZGRlZCBhIHJlc2V0IGNvbmRpdGlvbiBmb3IgYnJhbmNoaW5nIG5vZGVzIChgYnJhbmNoZXMubGVuZ3RoID4gMWApIGFzIHdlbGwuXG4gICAgaWYgKGJyYW5jaGVzLmxlbmd0aCA9PT0gMCB8fCBicmFuY2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICBwYXRoID0gW107XG4gICAgfVxuXG4gICAgLy8gYXMgYSBuZXh0IHN0ZXAsIHdlIHB1c2ggdGhlIGJyYW5jaGVzIG9mIHRoaXMgbm9kZSB0byBgdG9WaXNpdGAgZm9yIHZpc2l0aW5nIGl0IGR1cmluZyB0aGUgbmV4dCBpdGVyYXRpb25cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gYnJhbmNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRvVmlzaXQucHVzaCh7IHBvczogcG9zICsgMSwgaWRzOiBicmFuY2hlc1tpXSB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgcmVxdWVzdGVkIHJldmlzaW9uIGRvZXMgbm90IGV4aXN0Jyk7XG4gIH1cbiAgcmV0dXJuIHBhdGgucmV2ZXJzZSgpO1xufVxuXG4vLyBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSBwYXRocyB0byB0aGUgbGVhZnMgaW4gdGhpcyByZXZpc2lvbiB0cmVlXG5mdW5jdGlvbiByb290VG9MZWFmKHJldnMpIHtcbiAgdmFyIHBhdGhzID0gW107XG4gIHZhciB0b1Zpc2l0ID0gcmV2cy5zbGljZSgpO1xuICB2YXIgbm9kZTtcbiAgd2hpbGUgKChub2RlID0gdG9WaXNpdC5wb3AoKSkpIHtcbiAgICB2YXIgcG9zID0gbm9kZS5wb3M7XG4gICAgdmFyIHRyZWUgPSBub2RlLmlkcztcbiAgICB2YXIgaWQgPSB0cmVlWzBdO1xuICAgIHZhciBvcHRzID0gdHJlZVsxXTtcbiAgICB2YXIgYnJhbmNoZXMgPSB0cmVlWzJdO1xuICAgIHZhciBpc0xlYWYgPSBicmFuY2hlcy5sZW5ndGggPT09IDA7XG5cbiAgICB2YXIgaGlzdG9yeSA9IG5vZGUuaGlzdG9yeSA/IG5vZGUuaGlzdG9yeS5zbGljZSgpIDogW107XG4gICAgaGlzdG9yeS5wdXNoKHtpZCwgb3B0c30pO1xuICAgIGlmIChpc0xlYWYpIHtcbiAgICAgIHBhdGhzLnB1c2goe3BvczogKHBvcyArIDEgLSBoaXN0b3J5Lmxlbmd0aCksIGlkczogaGlzdG9yeX0pO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYnJhbmNoZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRvVmlzaXQucHVzaCh7cG9zOiBwb3MgKyAxLCBpZHM6IGJyYW5jaGVzW2ldLCBoaXN0b3J5fSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBwYXRocy5yZXZlcnNlKCk7XG59XG5cbi8vIGZvciBhIGJldHRlciBvdmVydmlldyBvZiB3aGF0IHRoaXMgaXMgZG9pbmcsIHJlYWQ6XG5cbmZ1bmN0aW9uIHNvcnRCeVBvcyQxKGEsIGIpIHtcbiAgcmV0dXJuIGEucG9zIC0gYi5wb3M7XG59XG5cbi8vIGNsYXNzaWMgYmluYXJ5IHNlYXJjaFxuZnVuY3Rpb24gYmluYXJ5U2VhcmNoKGFyciwgaXRlbSwgY29tcGFyYXRvcikge1xuICB2YXIgbG93ID0gMDtcbiAgdmFyIGhpZ2ggPSBhcnIubGVuZ3RoO1xuICB2YXIgbWlkO1xuICB3aGlsZSAobG93IDwgaGlnaCkge1xuICAgIG1pZCA9IChsb3cgKyBoaWdoKSA+Pj4gMTtcbiAgICBpZiAoY29tcGFyYXRvcihhcnJbbWlkXSwgaXRlbSkgPCAwKSB7XG4gICAgICBsb3cgPSBtaWQgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBoaWdoID0gbWlkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbG93O1xufVxuXG4vLyBhc3N1bWluZyB0aGUgYXJyIGlzIHNvcnRlZCwgaW5zZXJ0IHRoZSBpdGVtIGluIHRoZSBwcm9wZXIgcGxhY2VcbmZ1bmN0aW9uIGluc2VydFNvcnRlZChhcnIsIGl0ZW0sIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGlkeCA9IGJpbmFyeVNlYXJjaChhcnIsIGl0ZW0sIGNvbXBhcmF0b3IpO1xuICBhcnIuc3BsaWNlKGlkeCwgMCwgaXRlbSk7XG59XG5cbi8vIFR1cm4gYSBwYXRoIGFzIGEgZmxhdCBhcnJheSBpbnRvIGEgdHJlZSB3aXRoIGEgc2luZ2xlIGJyYW5jaC5cbi8vIElmIGFueSBzaG91bGQgYmUgc3RlbW1lZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LCB0aGF0J3MgcGFzc2VkXG4vLyBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50XG5mdW5jdGlvbiBwYXRoVG9UcmVlKHBhdGgsIG51bVN0ZW1tZWQpIHtcbiAgdmFyIHJvb3Q7XG4gIHZhciBsZWFmO1xuICBmb3IgKHZhciBpID0gbnVtU3RlbW1lZCwgbGVuID0gcGF0aC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBub2RlID0gcGF0aFtpXTtcbiAgICB2YXIgY3VycmVudExlYWYgPSBbbm9kZS5pZCwgbm9kZS5vcHRzLCBbXV07XG4gICAgaWYgKGxlYWYpIHtcbiAgICAgIGxlYWZbMl0ucHVzaChjdXJyZW50TGVhZik7XG4gICAgICBsZWFmID0gY3VycmVudExlYWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvb3QgPSBsZWFmID0gY3VycmVudExlYWY7XG4gICAgfVxuICB9XG4gIHJldHVybiByb290O1xufVxuXG4vLyBjb21wYXJlIHRoZSBJRHMgb2YgdHdvIHRyZWVzXG5mdW5jdGlvbiBjb21wYXJlVHJlZShhLCBiKSB7XG4gIHJldHVybiBhWzBdIDwgYlswXSA/IC0xIDogMTtcbn1cblxuLy8gTWVyZ2UgdHdvIHRyZWVzIHRvZ2V0aGVyXG4vLyBUaGUgcm9vdHMgb2YgdHJlZTEgYW5kIHRyZWUyIG11c3QgYmUgdGhlIHNhbWUgcmV2aXNpb25cbmZ1bmN0aW9uIG1lcmdlVHJlZShpbl90cmVlMSwgaW5fdHJlZTIpIHtcbiAgdmFyIHF1ZXVlID0gW3t0cmVlMTogaW5fdHJlZTEsIHRyZWUyOiBpbl90cmVlMn1dO1xuICB2YXIgY29uZmxpY3RzID0gZmFsc2U7XG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICB2YXIgdHJlZTEgPSBpdGVtLnRyZWUxO1xuICAgIHZhciB0cmVlMiA9IGl0ZW0udHJlZTI7XG5cbiAgICBpZiAodHJlZTFbMV0uc3RhdHVzIHx8IHRyZWUyWzFdLnN0YXR1cykge1xuICAgICAgdHJlZTFbMV0uc3RhdHVzID1cbiAgICAgICAgKHRyZWUxWzFdLnN0YXR1cyA9PT0gICdhdmFpbGFibGUnIHx8XG4gICAgICAgIHRyZWUyWzFdLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScpID8gJ2F2YWlsYWJsZScgOiAnbWlzc2luZyc7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmVlMlsyXS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCF0cmVlMVsyXVswXSkge1xuICAgICAgICBjb25mbGljdHMgPSAnbmV3X2xlYWYnO1xuICAgICAgICB0cmVlMVsyXVswXSA9IHRyZWUyWzJdW2ldO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lcmdlZCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0cmVlMVsyXS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAodHJlZTFbMl1bal1bMF0gPT09IHRyZWUyWzJdW2ldWzBdKSB7XG4gICAgICAgICAgcXVldWUucHVzaCh7dHJlZTE6IHRyZWUxWzJdW2pdLCB0cmVlMjogdHJlZTJbMl1baV19KTtcbiAgICAgICAgICBtZXJnZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIW1lcmdlZCkge1xuICAgICAgICBjb25mbGljdHMgPSAnbmV3X2JyYW5jaCc7XG4gICAgICAgIGluc2VydFNvcnRlZCh0cmVlMVsyXSwgdHJlZTJbMl1baV0sIGNvbXBhcmVUcmVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtjb25mbGljdHMsIHRyZWU6IGluX3RyZWUxfTtcbn1cblxuZnVuY3Rpb24gZG9NZXJnZSh0cmVlLCBwYXRoLCBkb250RXhwYW5kKSB7XG4gIHZhciByZXN0cmVlID0gW107XG4gIHZhciBjb25mbGljdHMgPSBmYWxzZTtcbiAgdmFyIG1lcmdlZCA9IGZhbHNlO1xuICB2YXIgcmVzO1xuXG4gIGlmICghdHJlZS5sZW5ndGgpIHtcbiAgICByZXR1cm4ge3RyZWU6IFtwYXRoXSwgY29uZmxpY3RzOiAnbmV3X2xlYWYnfTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSB0cmVlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGJyYW5jaCA9IHRyZWVbaV07XG4gICAgaWYgKGJyYW5jaC5wb3MgPT09IHBhdGgucG9zICYmIGJyYW5jaC5pZHNbMF0gPT09IHBhdGguaWRzWzBdKSB7XG4gICAgICAvLyBQYXRocyBzdGFydCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBhbmQgaGF2ZSB0aGUgc2FtZSByb290LCBzbyB0aGV5IG5lZWRcbiAgICAgIC8vIG1lcmdlZFxuICAgICAgcmVzID0gbWVyZ2VUcmVlKGJyYW5jaC5pZHMsIHBhdGguaWRzKTtcbiAgICAgIHJlc3RyZWUucHVzaCh7cG9zOiBicmFuY2gucG9zLCBpZHM6IHJlcy50cmVlfSk7XG4gICAgICBjb25mbGljdHMgPSBjb25mbGljdHMgfHwgcmVzLmNvbmZsaWN0cztcbiAgICAgIG1lcmdlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChkb250RXhwYW5kICE9PSB0cnVlKSB7XG4gICAgICAvLyBUaGUgcGF0aHMgc3RhcnQgYXQgYSBkaWZmZXJlbnQgcG9zaXRpb24sIHRha2UgdGhlIGVhcmxpZXN0IHBhdGggYW5kXG4gICAgICAvLyB0cmF2ZXJzZSB1cCB1bnRpbCBpdCBhcyBhdCB0aGUgc2FtZSBwb2ludCBmcm9tIHJvb3QgYXMgdGhlIHBhdGggd2VcbiAgICAgIC8vIHdhbnQgdG8gbWVyZ2UuICBJZiB0aGUga2V5cyBtYXRjaCB3ZSByZXR1cm4gdGhlIGxvbmdlciBwYXRoIHdpdGggdGhlXG4gICAgICAvLyBvdGhlciBtZXJnZWQgQWZ0ZXIgc3RlbW1pbmcgd2UgZG9uJ3Qgd2FudCB0byBleHBhbmQgdGhlIHRyZWVzXG5cbiAgICAgIHZhciB0MSA9IGJyYW5jaC5wb3MgPCBwYXRoLnBvcyA/IGJyYW5jaCA6IHBhdGg7XG4gICAgICB2YXIgdDIgPSBicmFuY2gucG9zIDwgcGF0aC5wb3MgPyBwYXRoIDogYnJhbmNoO1xuICAgICAgdmFyIGRpZmYgPSB0Mi5wb3MgLSB0MS5wb3M7XG5cbiAgICAgIHZhciBjYW5kaWRhdGVQYXJlbnRzID0gW107XG5cbiAgICAgIHZhciB0cmVlcyA9IFtdO1xuICAgICAgdHJlZXMucHVzaCh7aWRzOiB0MS5pZHMsIGRpZmYsIHBhcmVudDogbnVsbCwgcGFyZW50SWR4OiBudWxsfSk7XG4gICAgICB3aGlsZSAodHJlZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB2YXIgaXRlbSA9IHRyZWVzLnBvcCgpO1xuICAgICAgICBpZiAoaXRlbS5kaWZmID09PSAwKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uaWRzWzBdID09PSB0Mi5pZHNbMF0pIHtcbiAgICAgICAgICAgIGNhbmRpZGF0ZVBhcmVudHMucHVzaChpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVsZW1lbnRzID0gaXRlbS5pZHNbMl07XG4gICAgICAgIGZvciAodmFyIGogPSAwLCBlbGVtZW50c0xlbiA9IGVsZW1lbnRzLmxlbmd0aDsgaiA8IGVsZW1lbnRzTGVuOyBqKyspIHtcbiAgICAgICAgICB0cmVlcy5wdXNoKHtcbiAgICAgICAgICAgIGlkczogZWxlbWVudHNbal0sXG4gICAgICAgICAgICBkaWZmOiBpdGVtLmRpZmYgLSAxLFxuICAgICAgICAgICAgcGFyZW50OiBpdGVtLmlkcyxcbiAgICAgICAgICAgIHBhcmVudElkeDogalxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBlbCA9IGNhbmRpZGF0ZVBhcmVudHNbMF07XG5cbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmVzdHJlZS5wdXNoKGJyYW5jaCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMgPSBtZXJnZVRyZWUoZWwuaWRzLCB0Mi5pZHMpO1xuICAgICAgICBlbC5wYXJlbnRbMl1bZWwucGFyZW50SWR4XSA9IHJlcy50cmVlO1xuICAgICAgICByZXN0cmVlLnB1c2goe3BvczogdDEucG9zLCBpZHM6IHQxLmlkc30pO1xuICAgICAgICBjb25mbGljdHMgPSBjb25mbGljdHMgfHwgcmVzLmNvbmZsaWN0cztcbiAgICAgICAgbWVyZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdHJlZS5wdXNoKGJyYW5jaCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2UgZGlkbnQgZmluZFxuICBpZiAoIW1lcmdlZCkge1xuICAgIHJlc3RyZWUucHVzaChwYXRoKTtcbiAgfVxuXG4gIHJlc3RyZWUuc29ydChzb3J0QnlQb3MkMSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0cmVlOiByZXN0cmVlLFxuICAgIGNvbmZsaWN0czogY29uZmxpY3RzIHx8ICdpbnRlcm5hbF9ub2RlJ1xuICB9O1xufVxuXG4vLyBUbyBlbnN1cmUgd2UgZG9uJ3QgZ3JvdyB0aGUgcmV2aXNpb24gdHJlZSBpbmZpbml0ZWx5LCB3ZSBzdGVtIG9sZCByZXZpc2lvbnNcbmZ1bmN0aW9uIHN0ZW0odHJlZSwgZGVwdGgpIHtcbiAgLy8gRmlyc3Qgd2UgYnJlYWsgb3V0IHRoZSB0cmVlIGludG8gYSBjb21wbGV0ZSBsaXN0IG9mIHJvb3QgdG8gbGVhZiBwYXRoc1xuICB2YXIgcGF0aHMgPSByb290VG9MZWFmKHRyZWUpO1xuICB2YXIgc3RlbW1lZFJldnM7XG5cbiAgdmFyIHJlc3VsdDtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhdGhzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgLy8gVGhlbiBmb3IgZWFjaCBwYXRoLCB3ZSBjdXQgb2ZmIHRoZSBzdGFydCBvZiB0aGUgcGF0aCBiYXNlZCBvbiB0aGVcbiAgICAvLyBgZGVwdGhgIHRvIHN0ZW0gdG8sIGFuZCBnZW5lcmF0ZSBhIG5ldyBzZXQgb2YgZmxhdCB0cmVlc1xuICAgIHZhciBwYXRoID0gcGF0aHNbaV07XG4gICAgdmFyIHN0ZW1tZWQgPSBwYXRoLmlkcztcbiAgICB2YXIgbm9kZTtcbiAgICBpZiAoc3RlbW1lZC5sZW5ndGggPiBkZXB0aCkge1xuICAgICAgLy8gb25seSBkbyB0aGUgc3RlbW1pbmcgd29yayBpZiB3ZSBhY3R1YWxseSBuZWVkIHRvIHN0ZW1cbiAgICAgIGlmICghc3RlbW1lZFJldnMpIHtcbiAgICAgICAgc3RlbW1lZFJldnMgPSB7fTsgLy8gYXZvaWQgYWxsb2NhdGluZyB0aGlzIG9iamVjdCB1bm5lY2Vzc2FyaWx5XG4gICAgICB9XG4gICAgICB2YXIgbnVtU3RlbW1lZCA9IHN0ZW1tZWQubGVuZ3RoIC0gZGVwdGg7XG4gICAgICBub2RlID0ge1xuICAgICAgICBwb3M6IHBhdGgucG9zICsgbnVtU3RlbW1lZCxcbiAgICAgICAgaWRzOiBwYXRoVG9UcmVlKHN0ZW1tZWQsIG51bVN0ZW1tZWQpXG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBzID0gMDsgcyA8IG51bVN0ZW1tZWQ7IHMrKykge1xuICAgICAgICB2YXIgcmV2ID0gKHBhdGgucG9zICsgcykgKyAnLScgKyBzdGVtbWVkW3NdLmlkO1xuICAgICAgICBzdGVtbWVkUmV2c1tyZXZdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBubyBuZWVkIHRvIGFjdHVhbGx5IHN0ZW1cbiAgICAgIG5vZGUgPSB7XG4gICAgICAgIHBvczogcGF0aC5wb3MsXG4gICAgICAgIGlkczogcGF0aFRvVHJlZShzdGVtbWVkLCAwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUaGVuIHdlIHJlbWVyZ2UgYWxsIHRob3NlIGZsYXQgdHJlZXMgdG9nZXRoZXIsIGVuc3VyaW5nIHRoYXQgd2UgZG9uJ3RcbiAgICAvLyBjb25uZWN0IHRyZWVzIHRoYXQgd291bGQgZ28gYmV5b25kIHRoZSBkZXB0aCBsaW1pdFxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJlc3VsdCA9IGRvTWVyZ2UocmVzdWx0LCBub2RlLCB0cnVlKS50cmVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBbbm9kZV07XG4gICAgfVxuICB9XG5cbiAgLy8gdGhpcyBpcyBtZW1vcnktaGVhdnkgcGVyIENocm9tZSBwcm9maWxlciwgYXZvaWQgdW5sZXNzIHdlIGFjdHVhbGx5IHN0ZW1tZWRcbiAgaWYgKHN0ZW1tZWRSZXZzKSB7XG4gICAgdHJhdmVyc2VSZXZUcmVlKHJlc3VsdCwgZnVuY3Rpb24gKGlzTGVhZiwgcG9zLCByZXZIYXNoKSB7XG4gICAgICAvLyBzb21lIHJldmlzaW9ucyBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gYSBicmFuY2ggYnV0IG5vdCBpbiBhbm90aGVyXG4gICAgICBkZWxldGUgc3RlbW1lZFJldnNbcG9zICsgJy0nICsgcmV2SGFzaF07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRyZWU6IHJlc3VsdCxcbiAgICByZXZzOiBzdGVtbWVkUmV2cyA/IE9iamVjdC5rZXlzKHN0ZW1tZWRSZXZzKSA6IFtdXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlKHRyZWUsIHBhdGgsIGRlcHRoKSB7XG4gIHZhciBuZXdUcmVlID0gZG9NZXJnZSh0cmVlLCBwYXRoKTtcbiAgdmFyIHN0ZW1tZWQgPSBzdGVtKG5ld1RyZWUudHJlZSwgZGVwdGgpO1xuICByZXR1cm4ge1xuICAgIHRyZWU6IHN0ZW1tZWQudHJlZSxcbiAgICBzdGVtbWVkUmV2czogc3RlbW1lZC5yZXZzLFxuICAgIGNvbmZsaWN0czogbmV3VHJlZS5jb25mbGljdHNcbiAgfTtcbn1cblxuLy8gcmV0dXJuIHRydWUgaWYgYSByZXYgZXhpc3RzIGluIHRoZSByZXYgdHJlZSwgZmFsc2Ugb3RoZXJ3aXNlXG5mdW5jdGlvbiByZXZFeGlzdHMocmV2cywgcmV2KSB7XG4gIHZhciB0b1Zpc2l0ID0gcmV2cy5zbGljZSgpO1xuICB2YXIgc3BsaXRSZXYgPSByZXYuc3BsaXQoJy0nKTtcbiAgdmFyIHRhcmdldFBvcyA9IHBhcnNlSW50KHNwbGl0UmV2WzBdLCAxMCk7XG4gIHZhciB0YXJnZXRJZCA9IHNwbGl0UmV2WzFdO1xuXG4gIHZhciBub2RlO1xuICB3aGlsZSAoKG5vZGUgPSB0b1Zpc2l0LnBvcCgpKSkge1xuICAgIGlmIChub2RlLnBvcyA9PT0gdGFyZ2V0UG9zICYmIG5vZGUuaWRzWzBdID09PSB0YXJnZXRJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZhciBicmFuY2hlcyA9IG5vZGUuaWRzWzJdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBicmFuY2hlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdG9WaXNpdC5wdXNoKHtwb3M6IG5vZGUucG9zICsgMSwgaWRzOiBicmFuY2hlc1tpXX0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFRyZWVzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuaWRzO1xufVxuXG4vLyBjaGVjayBpZiBhIHNwZWNpZmljIHJldmlzaW9uIG9mIGEgZG9jIGhhcyBiZWVuIGRlbGV0ZWRcbi8vICAtIG1ldGFkYXRhOiB0aGUgbWV0YWRhdGEgb2JqZWN0IGZyb20gdGhlIGRvYyBzdG9yZVxuLy8gIC0gcmV2OiAob3B0aW9uYWwpIHRoZSByZXZpc2lvbiB0byBjaGVjay4gZGVmYXVsdHMgdG8gd2lubmluZyByZXZpc2lvblxuZnVuY3Rpb24gaXNEZWxldGVkKG1ldGFkYXRhLCByZXYpIHtcbiAgaWYgKCFyZXYpIHtcbiAgICByZXYgPSB3aW5uaW5nUmV2KG1ldGFkYXRhKTtcbiAgfVxuICB2YXIgaWQgPSByZXYuc3Vic3RyaW5nKHJldi5pbmRleE9mKCctJykgKyAxKTtcbiAgdmFyIHRvVmlzaXQgPSBtZXRhZGF0YS5yZXZfdHJlZS5tYXAoZ2V0VHJlZXMpO1xuXG4gIHZhciB0cmVlO1xuICB3aGlsZSAoKHRyZWUgPSB0b1Zpc2l0LnBvcCgpKSkge1xuICAgIGlmICh0cmVlWzBdID09PSBpZCkge1xuICAgICAgcmV0dXJuICEhdHJlZVsxXS5kZWxldGVkO1xuICAgIH1cbiAgICB0b1Zpc2l0ID0gdG9WaXNpdC5jb25jYXQodHJlZVsyXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNMb2NhbElkKGlkKSB7XG4gIHJldHVybiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIGlkLnN0YXJ0c1dpdGgoJ19sb2NhbC8nKTtcbn1cblxuLy8gcmV0dXJucyB0aGUgY3VycmVudCBsZWFmIG5vZGUgZm9yIGEgZ2l2ZW4gcmV2aXNpb25cbmZ1bmN0aW9uIGxhdGVzdChyZXYsIG1ldGFkYXRhKSB7XG4gIHZhciB0b1Zpc2l0ID0gbWV0YWRhdGEucmV2X3RyZWUuc2xpY2UoKTtcbiAgdmFyIG5vZGU7XG4gIHdoaWxlICgobm9kZSA9IHRvVmlzaXQucG9wKCkpKSB7XG4gICAgdmFyIHBvcyA9IG5vZGUucG9zO1xuICAgIHZhciB0cmVlID0gbm9kZS5pZHM7XG4gICAgdmFyIGlkID0gdHJlZVswXTtcbiAgICB2YXIgb3B0cyA9IHRyZWVbMV07XG4gICAgdmFyIGJyYW5jaGVzID0gdHJlZVsyXTtcbiAgICB2YXIgaXNMZWFmID0gYnJhbmNoZXMubGVuZ3RoID09PSAwO1xuXG4gICAgdmFyIGhpc3RvcnkgPSBub2RlLmhpc3RvcnkgPyBub2RlLmhpc3Rvcnkuc2xpY2UoKSA6IFtdO1xuICAgIGhpc3RvcnkucHVzaCh7aWQsIHBvcywgb3B0c30pO1xuXG4gICAgaWYgKGlzTGVhZikge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGhpc3RvcnkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGhpc3RvcnlOb2RlID0gaGlzdG9yeVtpXTtcbiAgICAgICAgdmFyIGhpc3RvcnlSZXYgPSBoaXN0b3J5Tm9kZS5wb3MgKyAnLScgKyBoaXN0b3J5Tm9kZS5pZDtcblxuICAgICAgICBpZiAoaGlzdG9yeVJldiA9PT0gcmV2KSB7XG4gICAgICAgICAgLy8gcmV0dXJuIHRoZSByZXYgb2YgdGhpcyBsZWFmXG4gICAgICAgICAgcmV0dXJuIHBvcyArICctJyArIGlkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDAsIGwgPSBicmFuY2hlcy5sZW5ndGg7IGogPCBsOyBqKyspIHtcbiAgICAgIHRvVmlzaXQucHVzaCh7cG9zOiBwb3MgKyAxLCBpZHM6IGJyYW5jaGVzW2pdLCBoaXN0b3J5fSk7XG4gICAgfVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBsYXRlc3QgcmV2aXNpb24gZm9yIGlkICcgKyBtZXRhZGF0YS5pZCArICcsIHJldiAnICsgcmV2KTtcbn1cblxuZnVuY3Rpb24gdHJ5Q2F0Y2hJbkNoYW5nZUxpc3RlbmVyKHNlbGYsIGNoYW5nZSwgcGVuZGluZywgbGFzdFNlcSkge1xuICAvLyBpc29sYXRlIHRyeS9jYXRjaGVzIHRvIGF2b2lkIFY4IGRlb3B0aW1pemF0aW9uc1xuICB0cnkge1xuICAgIHNlbGYuZW1pdCgnY2hhbmdlJywgY2hhbmdlLCBwZW5kaW5nLCBsYXN0U2VxKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGd1YXJkZWRDb25zb2xlKCdlcnJvcicsICdFcnJvciBpbiAub24oXCJjaGFuZ2VcIiwgZnVuY3Rpb24pOicsIGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2UoZG9jLCBtZXRhZGF0YSwgb3B0cykge1xuICB2YXIgY2hhbmdlTGlzdCA9IFt7cmV2OiBkb2MuX3Jldn1dO1xuICBpZiAob3B0cy5zdHlsZSA9PT0gJ2FsbF9kb2NzJykge1xuICAgIGNoYW5nZUxpc3QgPSBjb2xsZWN0TGVhdmVzKG1ldGFkYXRhLnJldl90cmVlKVxuICAgIC5tYXAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHtyZXY6IHgucmV2fTsgfSk7XG4gIH1cbiAgdmFyIGNoYW5nZSA9IHtcbiAgICBpZDogbWV0YWRhdGEuaWQsXG4gICAgY2hhbmdlczogY2hhbmdlTGlzdCxcbiAgICBkb2NcbiAgfTtcblxuICBpZiAoaXNEZWxldGVkKG1ldGFkYXRhLCBkb2MuX3JldikpIHtcbiAgICBjaGFuZ2UuZGVsZXRlZCA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdHMuY29uZmxpY3RzKSB7XG4gICAgY2hhbmdlLmRvYy5fY29uZmxpY3RzID0gY29sbGVjdENvbmZsaWN0cyhtZXRhZGF0YSk7XG4gICAgaWYgKCFjaGFuZ2UuZG9jLl9jb25mbGljdHMubGVuZ3RoKSB7XG4gICAgICBkZWxldGUgY2hhbmdlLmRvYy5fY29uZmxpY3RzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2hhbmdlO1xufVxuXG5jbGFzcyBDaGFuZ2VzJDEgZXh0ZW5kcyBFRSB7XG4gIGNvbnN0cnVjdG9yKGRiLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYiA9IGRiO1xuICAgIG9wdHMgPSBvcHRzID8gY2xvbmUob3B0cykgOiB7fTtcbiAgICB2YXIgY29tcGxldGUgPSBvcHRzLmNvbXBsZXRlID0gb25jZSgoZXJyLCByZXNwKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lckNvdW50KHRoaXMsICdlcnJvcicpID4gMCkge1xuICAgICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVtaXQoJ2NvbXBsZXRlJywgcmVzcCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgZGIucmVtb3ZlTGlzdGVuZXIoJ2Rlc3Ryb3llZCcsIG9uRGVzdHJveSk7XG4gICAgfSk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLm9uKCdjb21wbGV0ZScsIGZ1bmN0aW9uIChyZXNwKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3ApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgY29uc3Qgb25EZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICB9O1xuICAgIGRiLm9uY2UoJ2Rlc3Ryb3llZCcsIG9uRGVzdHJveSk7XG5cbiAgICBvcHRzLm9uQ2hhbmdlID0gKGNoYW5nZSwgcGVuZGluZywgbGFzdFNlcSkgPT4ge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnlDYXRjaEluQ2hhbmdlTGlzdGVuZXIodGhpcywgY2hhbmdlLCBwZW5kaW5nLCBsYXN0U2VxKTtcbiAgICB9O1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZnVsZmlsbCwgcmVqZWN0KSB7XG4gICAgICBvcHRzLmNvbXBsZXRlID0gZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmdWxmaWxsKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vbmNlKCdjYW5jZWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBkYi5yZW1vdmVMaXN0ZW5lcignZGVzdHJveWVkJywgb25EZXN0cm95KTtcbiAgICAgIG9wdHMuY29tcGxldGUobnVsbCwge3N0YXR1czogJ2NhbmNlbGxlZCd9KTtcbiAgICB9KTtcbiAgICB0aGlzLnRoZW4gPSBwcm9taXNlLnRoZW4uYmluZChwcm9taXNlKTtcbiAgICB0aGlzWydjYXRjaCddID0gcHJvbWlzZVsnY2F0Y2gnXS5iaW5kKHByb21pc2UpO1xuICAgIHRoaXMudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICBjb21wbGV0ZShudWxsLCByZXN1bHQpO1xuICAgIH0sIGNvbXBsZXRlKTtcblxuXG5cbiAgICBpZiAoIWRiLnRhc2txdWV1ZS5pc1JlYWR5KSB7XG4gICAgICBkYi50YXNrcXVldWUuYWRkVGFzaygoZmFpbGVkKSA9PiB7XG4gICAgICAgIGlmIChmYWlsZWQpIHtcbiAgICAgICAgICBvcHRzLmNvbXBsZXRlKGZhaWxlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZUNoYW5nZXMob3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbGlkYXRlQ2hhbmdlcyhvcHRzKTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuZGIudGFza3F1ZXVlLmlzUmVhZHkpIHtcbiAgICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVDaGFuZ2VzKG9wdHMpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBvcHRzLmNvbXBsZXRlO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoUG91Y2hEQi5fY2hhbmdlc0ZpbHRlclBsdWdpbikge1xuICAgICAgUG91Y2hEQi5fY2hhbmdlc0ZpbHRlclBsdWdpbi52YWxpZGF0ZShvcHRzLCAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvQ2hhbmdlcyhvcHRzKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvQ2hhbmdlcyhvcHRzKTtcbiAgICB9XG4gIH1cblxuICBkb0NoYW5nZXMob3B0cykge1xuICAgIHZhciBjYWxsYmFjayA9IG9wdHMuY29tcGxldGU7XG5cbiAgICBvcHRzID0gY2xvbmUob3B0cyk7XG4gICAgaWYgKCdsaXZlJyBpbiBvcHRzICYmICEoJ2NvbnRpbnVvdXMnIGluIG9wdHMpKSB7XG4gICAgICBvcHRzLmNvbnRpbnVvdXMgPSBvcHRzLmxpdmU7XG4gICAgfVxuICAgIG9wdHMucHJvY2Vzc0NoYW5nZSA9IHByb2Nlc3NDaGFuZ2U7XG5cbiAgICBpZiAob3B0cy5zaW5jZSA9PT0gJ2xhdGVzdCcpIHtcbiAgICAgIG9wdHMuc2luY2UgPSAnbm93JztcbiAgICB9XG4gICAgaWYgKCFvcHRzLnNpbmNlKSB7XG4gICAgICBvcHRzLnNpbmNlID0gMDtcbiAgICB9XG4gICAgaWYgKG9wdHMuc2luY2UgPT09ICdub3cnKSB7XG4gICAgICB0aGlzLmRiLmluZm8oKS50aGVuKChpbmZvKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtzdGF0dXM6ICdjYW5jZWxsZWQnfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9wdHMuc2luY2UgPSBpbmZvLnVwZGF0ZV9zZXE7XG4gICAgICAgIHRoaXMuZG9DaGFuZ2VzKG9wdHMpO1xuICAgICAgfSwgY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKFBvdWNoREIuX2NoYW5nZXNGaWx0ZXJQbHVnaW4pIHtcbiAgICAgIFBvdWNoREIuX2NoYW5nZXNGaWx0ZXJQbHVnaW4ubm9ybWFsaXplKG9wdHMpO1xuICAgICAgaWYgKFBvdWNoREIuX2NoYW5nZXNGaWx0ZXJQbHVnaW4uc2hvdWxkRmlsdGVyKHRoaXMsIG9wdHMpKSB7XG4gICAgICAgIHJldHVybiBQb3VjaERCLl9jaGFuZ2VzRmlsdGVyUGx1Z2luLmZpbHRlcih0aGlzLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgWydkb2NfaWRzJywgJ2ZpbHRlcicsICdzZWxlY3RvcicsICd2aWV3J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgaW4gb3B0cykge1xuICAgICAgICAgIGd1YXJkZWRDb25zb2xlKCd3YXJuJyxcbiAgICAgICAgICAgICdUaGUgXCInICsga2V5ICsgJ1wiIG9wdGlvbiB3YXMgcGFzc2VkIGluIHRvIGNoYW5nZXMvcmVwbGljYXRlLCAnICtcbiAgICAgICAgICAgICdidXQgcG91Y2hkYi1jaGFuZ2VzLWZpbHRlciBwbHVnaW4gaXMgbm90IGluc3RhbGxlZCwgc28gaXQgJyArXG4gICAgICAgICAgICAnd2FzIGlnbm9yZWQuIFBsZWFzZSBpbnN0YWxsIHRoZSBwbHVnaW4gdG8gZW5hYmxlIGZpbHRlcmluZy4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCEoJ2Rlc2NlbmRpbmcnIGluIG9wdHMpKSB7XG4gICAgICBvcHRzLmRlc2NlbmRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAwIGFuZCAxIHNob3VsZCByZXR1cm4gMSBkb2N1bWVudFxuICAgIG9wdHMubGltaXQgPSBvcHRzLmxpbWl0ID09PSAwID8gMSA6IG9wdHMubGltaXQ7XG4gICAgb3B0cy5jb21wbGV0ZSA9IGNhbGxiYWNrO1xuICAgIHZhciBuZXdQcm9taXNlID0gdGhpcy5kYi5fY2hhbmdlcyhvcHRzKTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChuZXdQcm9taXNlICYmIHR5cGVvZiBuZXdQcm9taXNlLmNhbmNlbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY2FuY2VsID0gdGhpcy5jYW5jZWw7XG4gICAgICB0aGlzLmNhbmNlbCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIG5ld1Byb21pc2UuY2FuY2VsKCk7XG4gICAgICAgIGNhbmNlbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbi8qXG4gKiBBIGdlbmVyaWMgcG91Y2ggYWRhcHRlclxuICovXG5cbi8vIFdyYXBwZXIgZm9yIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlIGJ1bGtkb2NzIGFwaSB3aXRoIGEgc2luZ2xlIGRvYyxcbi8vIGlmIHRoZSBmaXJzdCByZXN1bHQgaXMgYW4gZXJyb3IsIHJldHVybiBhbiBlcnJvclxuZnVuY3Rpb24geWFua0Vycm9yKGNhbGxiYWNrLCBkb2NJZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGVyciwgcmVzdWx0cykge1xuICAgIGlmIChlcnIgfHwgKHJlc3VsdHNbMF0gJiYgcmVzdWx0c1swXS5lcnJvcikpIHtcbiAgICAgIGVyciA9IGVyciB8fCByZXN1bHRzWzBdO1xuICAgICAgZXJyLmRvY0lkID0gZG9jSWQ7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHRzLmxlbmd0aCA/IHJlc3VsdHNbMF0gIDogcmVzdWx0cyk7XG4gICAgfVxuICB9O1xufVxuXG4vLyBjbGVhbiBkb2NzIGdpdmVuIHRvIHVzIGJ5IHRoZSB1c2VyXG5mdW5jdGlvbiBjbGVhbkRvY3MoZG9jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZG9jID0gZG9jc1tpXTtcbiAgICBpZiAoZG9jLl9kZWxldGVkKSB7XG4gICAgICBkZWxldGUgZG9jLl9hdHRhY2htZW50czsgLy8gaWdub3JlIGF0dHMgZm9yIGRlbGV0ZWQgZG9jc1xuICAgIH0gZWxzZSBpZiAoZG9jLl9hdHRhY2htZW50cykge1xuICAgICAgLy8gZmlsdGVyIG91dCBleHRyYW5lb3VzIGtleXMgZnJvbSBfYXR0YWNobWVudHNcbiAgICAgIHZhciBhdHRzID0gT2JqZWN0LmtleXMoZG9jLl9hdHRhY2htZW50cyk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGF0dHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIGF0dCA9IGF0dHNbal07XG4gICAgICAgIGRvYy5fYXR0YWNobWVudHNbYXR0XSA9IHBpY2soZG9jLl9hdHRhY2htZW50c1thdHRdLFxuICAgICAgICAgIFsnZGF0YScsICdkaWdlc3QnLCAnY29udGVudF90eXBlJywgJ2xlbmd0aCcsICdyZXZwb3MnLCAnc3R1YiddKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gY29tcGFyZSB0d28gZG9jcywgZmlyc3QgYnkgX2lkIHRoZW4gYnkgX3JldlxuZnVuY3Rpb24gY29tcGFyZUJ5SWRUaGVuUmV2KGEsIGIpIHtcbiAgaWYgKGEuX2lkID09PSBiLl9pZCkge1xuICAgIGNvbnN0IGFTdGFydCA9IGEuX3JldmlzaW9ucyA/IGEuX3JldmlzaW9ucy5zdGFydCA6IDA7XG4gICAgY29uc3QgYlN0YXJ0ID0gYi5fcmV2aXNpb25zID8gYi5fcmV2aXNpb25zLnN0YXJ0IDogMDtcbiAgICByZXR1cm4gYVN0YXJ0IC0gYlN0YXJ0O1xuICB9XG4gIHJldHVybiBhLl9pZCA8IGIuX2lkID8gLTEgOiAxO1xufVxuXG4vLyBmb3IgZXZlcnkgbm9kZSBpbiBhIHJldmlzaW9uIHRyZWUgY29tcHV0ZXMgaXRzIGRpc3RhbmNlIGZyb20gdGhlIGNsb3Nlc3Rcbi8vIGxlYWZcbmZ1bmN0aW9uIGNvbXB1dGVIZWlnaHQocmV2cykge1xuICB2YXIgaGVpZ2h0ID0ge307XG4gIHZhciBlZGdlcyA9IFtdO1xuICB0cmF2ZXJzZVJldlRyZWUocmV2cywgZnVuY3Rpb24gKGlzTGVhZiwgcG9zLCBpZCwgcHJudCkge1xuICAgIHZhciByZXYkJDEgPSBwb3MgKyBcIi1cIiArIGlkO1xuICAgIGlmIChpc0xlYWYpIHtcbiAgICAgIGhlaWdodFtyZXYkJDFdID0gMDtcbiAgICB9XG4gICAgaWYgKHBybnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZWRnZXMucHVzaCh7ZnJvbTogcHJudCwgdG86IHJldiQkMX0pO1xuICAgIH1cbiAgICByZXR1cm4gcmV2JCQxO1xuICB9KTtcblxuICBlZGdlcy5yZXZlcnNlKCk7XG4gIGVkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICBpZiAoaGVpZ2h0W2VkZ2UuZnJvbV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgaGVpZ2h0W2VkZ2UuZnJvbV0gPSAxICsgaGVpZ2h0W2VkZ2UudG9dO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWlnaHRbZWRnZS5mcm9tXSA9IE1hdGgubWluKGhlaWdodFtlZGdlLmZyb21dLCAxICsgaGVpZ2h0W2VkZ2UudG9dKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaGVpZ2h0O1xufVxuXG5mdW5jdGlvbiBhbGxEb2NzS2V5c1BhcnNlKG9wdHMpIHtcbiAgdmFyIGtleXMgPSAgKCdsaW1pdCcgaW4gb3B0cykgP1xuICAgIG9wdHMua2V5cy5zbGljZShvcHRzLnNraXAsIG9wdHMubGltaXQgKyBvcHRzLnNraXApIDpcbiAgICAob3B0cy5za2lwID4gMCkgPyBvcHRzLmtleXMuc2xpY2Uob3B0cy5za2lwKSA6IG9wdHMua2V5cztcbiAgb3B0cy5rZXlzID0ga2V5cztcbiAgb3B0cy5za2lwID0gMDtcbiAgZGVsZXRlIG9wdHMubGltaXQ7XG4gIGlmIChvcHRzLmRlc2NlbmRpbmcpIHtcbiAgICBrZXlzLnJldmVyc2UoKTtcbiAgICBvcHRzLmRlc2NlbmRpbmcgPSBmYWxzZTtcbiAgfVxufVxuXG4vLyBhbGwgY29tcGFjdGlvbiBpcyBkb25lIGluIGEgcXVldWUsIHRvIGF2b2lkIGF0dGFjaGluZ1xuLy8gdG9vIG1hbnkgbGlzdGVuZXJzIGF0IG9uY2VcbmZ1bmN0aW9uIGRvTmV4dENvbXBhY3Rpb24oc2VsZikge1xuICB2YXIgdGFzayA9IHNlbGYuX2NvbXBhY3Rpb25RdWV1ZVswXTtcbiAgdmFyIG9wdHMgPSB0YXNrLm9wdHM7XG4gIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gIHNlbGYuZ2V0KCdfbG9jYWwvY29tcGFjdGlvbicpLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pLnRoZW4oZnVuY3Rpb24gKGRvYykge1xuICAgIGlmIChkb2MgJiYgZG9jLmxhc3Rfc2VxKSB7XG4gICAgICBvcHRzLmxhc3Rfc2VxID0gZG9jLmxhc3Rfc2VxO1xuICAgIH1cbiAgICBzZWxmLl9jb21wYWN0KG9wdHMsIGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsLCByZXMpO1xuICAgICAgfVxuICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLl9jb21wYWN0aW9uUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKHNlbGYuX2NvbXBhY3Rpb25RdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgICBkb05leHRDb21wYWN0aW9uKHNlbGYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFB1cmdlU2VxKGRiLCBkb2NJZCwgcmV2JCQxKSB7XG4gIHJldHVybiBkYi5nZXQoJ19sb2NhbC9wdXJnZXMnKS50aGVuKGZ1bmN0aW9uIChkb2MpIHtcbiAgICBjb25zdCBwdXJnZVNlcSA9IGRvYy5wdXJnZVNlcSArIDE7XG4gICAgZG9jLnB1cmdlcy5wdXNoKHtcbiAgICAgIGRvY0lkLFxuICAgICAgcmV2OiByZXYkJDEsXG4gICAgICBwdXJnZVNlcSxcbiAgICB9KTtcbiAgICBpZiAoZG9jLnB1cmdlcy5sZW5ndGggPiBzZWxmLnB1cmdlZF9pbmZvc19saW1pdCkge1xuICAgICAgZG9jLnB1cmdlcy5zcGxpY2UoMCwgZG9jLnB1cmdlcy5sZW5ndGggLSBzZWxmLnB1cmdlZF9pbmZvc19saW1pdCk7XG4gICAgfVxuICAgIGRvYy5wdXJnZVNlcSA9IHB1cmdlU2VxO1xuICAgIHJldHVybiBkb2M7XG4gIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBfaWQ6ICdfbG9jYWwvcHVyZ2VzJyxcbiAgICAgIHB1cmdlczogW3tcbiAgICAgICAgZG9jSWQsXG4gICAgICAgIHJldjogcmV2JCQxLFxuICAgICAgICBwdXJnZVNlcTogMCxcbiAgICAgIH1dLFxuICAgICAgcHVyZ2VTZXE6IDAsXG4gICAgfTtcbiAgfSkudGhlbihmdW5jdGlvbiAoZG9jKSB7XG4gICAgcmV0dXJuIGRiLnB1dChkb2MpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXR0YWNobWVudE5hbWVFcnJvcihuYW1lKSB7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJ18nKSB7XG4gICAgcmV0dXJuIG5hbWUgKyAnIGlzIG5vdCBhIHZhbGlkIGF0dGFjaG1lbnQgbmFtZSwgYXR0YWNobWVudCAnICtcbiAgICAgICduYW1lcyBjYW5ub3Qgc3RhcnQgd2l0aCBcXCdfXFwnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzTm90U2luZ2xlRG9jKGRvYykge1xuICByZXR1cm4gZG9jID09PSBudWxsIHx8IHR5cGVvZiBkb2MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZG9jKTtcbn1cblxuY29uc3QgdmFsaWRSZXZSZWdleCA9IC9eXFxkKy1bXi1dKiQvO1xuZnVuY3Rpb24gaXNWYWxpZFJldihyZXYkJDEpIHtcbiAgcmV0dXJuIHR5cGVvZiByZXYkJDEgPT09ICdzdHJpbmcnICYmIHZhbGlkUmV2UmVnZXgudGVzdChyZXYkJDEpO1xufVxuXG5jbGFzcyBBYnN0cmFjdFBvdWNoREIgZXh0ZW5kcyBFRSB7XG4gIF9zZXR1cCgpIHtcbiAgICB0aGlzLnBvc3QgPSBhZGFwdGVyRnVuKCdwb3N0JywgZnVuY3Rpb24gKGRvYywgb3B0cywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05vdFNpbmdsZURvYyhkb2MpKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihOT1RfQU5fT0JKRUNUKSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1bGtEb2NzKHtkb2NzOiBbZG9jXX0sIG9wdHMsIHlhbmtFcnJvcihjYWxsYmFjaywgZG9jLl9pZCkpO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnB1dCA9IGFkYXB0ZXJGdW4oJ3B1dCcsIGZ1bmN0aW9uIChkb2MsIG9wdHMsIGNiKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRzO1xuICAgICAgICBvcHRzID0ge307XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3RTaW5nbGVEb2MoZG9jKSkge1xuICAgICAgICByZXR1cm4gY2IoY3JlYXRlRXJyb3IoTk9UX0FOX09CSkVDVCkpO1xuICAgICAgfVxuICAgICAgaW52YWxpZElkRXJyb3IoZG9jLl9pZCk7XG4gICAgICBpZiAoJ19yZXYnIGluIGRvYyAmJiAhaXNWYWxpZFJldihkb2MuX3JldikpIHtcbiAgICAgICAgcmV0dXJuIGNiKGNyZWF0ZUVycm9yKElOVkFMSURfUkVWKSk7XG4gICAgICB9XG4gICAgICBpZiAoaXNMb2NhbElkKGRvYy5faWQpICYmIHR5cGVvZiB0aGlzLl9wdXRMb2NhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoZG9jLl9kZWxldGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZUxvY2FsKGRvYywgY2IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9wdXRMb2NhbChkb2MsIGNiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwdXREb2MgPSAobmV4dCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3B1dCA9PT0gJ2Z1bmN0aW9uJyAmJiBvcHRzLm5ld19lZGl0cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLl9wdXQoZG9jLCBvcHRzLCBuZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ1bGtEb2NzKHtkb2NzOiBbZG9jXX0sIG9wdHMsIHlhbmtFcnJvcihuZXh0LCBkb2MuX2lkKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChvcHRzLmZvcmNlICYmIGRvYy5fcmV2KSB7XG4gICAgICAgIHRyYW5zZm9ybUZvcmNlT3B0aW9uVG9OZXdFZGl0c09wdGlvbigpO1xuICAgICAgICBwdXREb2MoZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBlcnIgPyBudWxsIDoge29rOiB0cnVlLCBpZDogZG9jLl9pZCwgcmV2OiBkb2MuX3Jldn07XG4gICAgICAgICAgY2IoZXJyLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHB1dERvYyhjYik7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUZvcmNlT3B0aW9uVG9OZXdFZGl0c09wdGlvbigpIHtcbiAgICAgICAgdmFyIHBhcnRzID0gZG9jLl9yZXYuc3BsaXQoJy0nKTtcbiAgICAgICAgdmFyIG9sZFJldklkID0gcGFydHNbMV07XG4gICAgICAgIHZhciBvbGRSZXZOdW0gPSBwYXJzZUludChwYXJ0c1swXSwgMTApO1xuXG4gICAgICAgIHZhciBuZXdSZXZOdW0gPSBvbGRSZXZOdW0gKyAxO1xuICAgICAgICB2YXIgbmV3UmV2SWQgPSByZXYoKTtcblxuICAgICAgICBkb2MuX3JldmlzaW9ucyA9IHtcbiAgICAgICAgICBzdGFydDogbmV3UmV2TnVtLFxuICAgICAgICAgIGlkczogW25ld1JldklkLCBvbGRSZXZJZF1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jLl9yZXYgPSBuZXdSZXZOdW0gKyAnLScgKyBuZXdSZXZJZDtcbiAgICAgICAgb3B0cy5uZXdfZWRpdHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5wdXRBdHRhY2htZW50ID0gYWRhcHRlckZ1bigncHV0QXR0YWNobWVudCcsIGZ1bmN0aW9uIChkb2NJZCwgYXR0YWNobWVudElkLCByZXYkJDEsIGJsb2IsIHR5cGUpIHtcbiAgICAgIHZhciBhcGkgPSB0aGlzO1xuICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHR5cGUgPSBibG9iO1xuICAgICAgICBibG9iID0gcmV2JCQxO1xuICAgICAgICByZXYkJDEgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gTGV0cyBmaXggaW4gaHR0cHM6Ly9naXRodWIuY29tL3BvdWNoZGIvcG91Y2hkYi9pc3N1ZXMvMzI2N1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHR5cGUgPSBibG9iO1xuICAgICAgICBibG9iID0gcmV2JCQxO1xuICAgICAgICByZXYkJDEgPSBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIGd1YXJkZWRDb25zb2xlKCd3YXJuJywgJ0F0dGFjaG1lbnQnLCBhdHRhY2htZW50SWQsICdvbiBkb2N1bWVudCcsIGRvY0lkLCAnaXMgbWlzc2luZyBjb250ZW50X3R5cGUnKTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gY3JlYXRlQXR0YWNobWVudChkb2MpIHtcbiAgICAgICAgdmFyIHByZXZyZXZwb3MgPSAnX3JldicgaW4gZG9jID8gcGFyc2VJbnQoZG9jLl9yZXYsIDEwKSA6IDA7XG4gICAgICAgIGRvYy5fYXR0YWNobWVudHMgPSBkb2MuX2F0dGFjaG1lbnRzIHx8IHt9O1xuICAgICAgICBkb2MuX2F0dGFjaG1lbnRzW2F0dGFjaG1lbnRJZF0gPSB7XG4gICAgICAgICAgY29udGVudF90eXBlOiB0eXBlLFxuICAgICAgICAgIGRhdGE6IGJsb2IsXG4gICAgICAgICAgcmV2cG9zOiArK3ByZXZyZXZwb3NcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFwaS5wdXQoZG9jKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwaS5nZXQoZG9jSWQpLnRoZW4oZnVuY3Rpb24gKGRvYykge1xuICAgICAgICBpZiAoZG9jLl9yZXYgIT09IHJldiQkMSkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKFJFVl9DT05GTElDVCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlQXR0YWNobWVudChkb2MpO1xuICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAvLyBjcmVhdGUgbmV3IGRvY1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoZXJyLnJlYXNvbiA9PT0gTUlTU0lOR19ET0MubWVzc2FnZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBdHRhY2htZW50KHtfaWQ6IGRvY0lkfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5yZW1vdmVBdHRhY2htZW50ID0gYWRhcHRlckZ1bigncmVtb3ZlQXR0YWNobWVudCcsIGZ1bmN0aW9uIChkb2NJZCwgYXR0YWNobWVudElkLCByZXYkJDEsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmdldChkb2NJZCwgKGVyciwgb2JqKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iai5fcmV2ICE9PSByZXYkJDEpIHtcbiAgICAgICAgICBjYWxsYmFjayhjcmVhdGVFcnJvcihSRVZfQ09ORkxJQ1QpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghb2JqLl9hdHRhY2htZW50cykge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZSBvYmouX2F0dGFjaG1lbnRzW2F0dGFjaG1lbnRJZF07XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmouX2F0dGFjaG1lbnRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgb2JqLl9hdHRhY2htZW50cztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnB1dChvYmosIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnJlbW92ZSA9IGFkYXB0ZXJGdW4oJ3JlbW92ZScsIGZ1bmN0aW9uIChkb2NPcklkLCBvcHRzT3JSZXYsIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgZG9jO1xuICAgICAgaWYgKHR5cGVvZiBvcHRzT3JSZXYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIGlkLCByZXYsIG9wdHMsIGNhbGxiYWNrIHN0eWxlXG4gICAgICAgIGRvYyA9IHtcbiAgICAgICAgICBfaWQ6IGRvY09ySWQsXG4gICAgICAgICAgX3Jldjogb3B0c09yUmV2XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgICAgICBvcHRzID0ge307XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvYywgb3B0cywgY2FsbGJhY2sgc3R5bGVcbiAgICAgICAgZG9jID0gZG9jT3JJZDtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRzT3JSZXYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjYWxsYmFjayA9IG9wdHNPclJldjtcbiAgICAgICAgICBvcHRzID0ge307XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgICAgICAgIG9wdHMgPSBvcHRzT3JSZXY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgb3B0cy53YXNfZGVsZXRlID0gdHJ1ZTtcbiAgICAgIHZhciBuZXdEb2MgPSB7X2lkOiBkb2MuX2lkLCBfcmV2OiAoZG9jLl9yZXYgfHwgb3B0cy5yZXYpfTtcbiAgICAgIG5ld0RvYy5fZGVsZXRlZCA9IHRydWU7XG4gICAgICBpZiAoaXNMb2NhbElkKG5ld0RvYy5faWQpICYmIHR5cGVvZiB0aGlzLl9yZW1vdmVMb2NhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTG9jYWwoZG9jLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICB0aGlzLmJ1bGtEb2NzKHtkb2NzOiBbbmV3RG9jXX0sIG9wdHMsIHlhbmtFcnJvcihjYWxsYmFjaywgbmV3RG9jLl9pZCkpO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLnJldnNEaWZmID0gYWRhcHRlckZ1bigncmV2c0RpZmYnLCBmdW5jdGlvbiAocmVxLCBvcHRzLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIGlkcyA9IE9iamVjdC5rZXlzKHJlcSk7XG5cbiAgICAgIGlmICghaWRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwge30pO1xuICAgICAgfVxuXG4gICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgdmFyIG1pc3NpbmcgPSBuZXcgTWFwKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGFkZFRvTWlzc2luZyhpZCwgcmV2SWQpIHtcbiAgICAgICAgaWYgKCFtaXNzaW5nLmhhcyhpZCkpIHtcbiAgICAgICAgICBtaXNzaW5nLnNldChpZCwge21pc3Npbmc6IFtdfSk7XG4gICAgICAgIH1cbiAgICAgICAgbWlzc2luZy5nZXQoaWQpLm1pc3NpbmcucHVzaChyZXZJZCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEb2MoaWQsIHJldl90cmVlKSB7XG4gICAgICAgIC8vIElzIHRoaXMgZmFzdCBlbm91Z2g/IE1heWJlIHdlIHNob3VsZCBzd2l0Y2ggdG8gYSBzZXQgc2ltdWxhdGVkIGJ5IGEgbWFwXG4gICAgICAgIHZhciBtaXNzaW5nRm9ySWQgPSByZXFbaWRdLnNsaWNlKDApO1xuICAgICAgICB0cmF2ZXJzZVJldlRyZWUocmV2X3RyZWUsIGZ1bmN0aW9uIChpc0xlYWYsIHBvcywgcmV2SGFzaCwgY3R4LFxuICAgICAgICAgIG9wdHMpIHtcbiAgICAgICAgICAgIHZhciByZXYkJDEgPSBwb3MgKyAnLScgKyByZXZIYXNoO1xuICAgICAgICAgICAgdmFyIGlkeCA9IG1pc3NpbmdGb3JJZC5pbmRleE9mKHJldiQkMSk7XG4gICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1pc3NpbmdGb3JJZC5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKG9wdHMuc3RhdHVzICE9PSAnYXZhaWxhYmxlJykge1xuICAgICAgICAgICAgICBhZGRUb01pc3NpbmcoaWQsIHJldiQkMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVHJhdmVyc2luZyB0aGUgdHJlZSBpcyBzeW5jaHJvbm91cywgc28gbm93IGBtaXNzaW5nRm9ySWRgIGNvbnRhaW5zXG4gICAgICAgIC8vIHJldmlzaW9ucyB0aGF0IHdlcmUgbm90IGZvdW5kIGluIHRoZSB0cmVlXG4gICAgICAgIG1pc3NpbmdGb3JJZC5mb3JFYWNoKGZ1bmN0aW9uIChyZXYkJDEpIHtcbiAgICAgICAgICBhZGRUb01pc3NpbmcoaWQsIHJldiQkMSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgdGhpcy5fZ2V0UmV2aXNpb25UcmVlKGlkLCBmdW5jdGlvbiAoZXJyLCByZXZfdHJlZSkge1xuICAgICAgICAgIGlmIChlcnIgJiYgZXJyLnN0YXR1cyA9PT0gNDA0ICYmIGVyci5tZXNzYWdlID09PSAnbWlzc2luZycpIHtcbiAgICAgICAgICAgIG1pc3Npbmcuc2V0KGlkLCB7bWlzc2luZzogcmVxW2lkXX0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3NEb2MoaWQsIHJldl90cmVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKytjb3VudCA9PT0gaWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY29udmVydCBMYXp5TWFwIHRvIG9iamVjdFxuICAgICAgICAgICAgdmFyIG1pc3NpbmdPYmogPSB7fTtcbiAgICAgICAgICAgIG1pc3NpbmcuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICBtaXNzaW5nT2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG1pc3NpbmdPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LCB0aGlzKTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gX2J1bGtfZ2V0IEFQSSBmb3IgZmFzdGVyIHJlcGxpY2F0aW9uLCBhcyBkZXNjcmliZWQgaW5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2NvdWNoZGItY2h0dHBkL3B1bGwvMzNcbiAgICAvLyBBdCB0aGUgXCJhYnN0cmFjdFwiIGxldmVsLCBpdCB3aWxsIGp1c3QgcnVuIG11bHRpcGxlIGdldCgpcyBpblxuICAgIC8vIHBhcmFsbGVsLCBiZWNhdXNlIHRoaXMgaXNuJ3QgbXVjaCBvZiBhIHBlcmZvcm1hbmNlIGNvc3RcbiAgICAvLyBmb3IgbG9jYWwgZGF0YWJhc2VzIChleGNlcHQgdGhlIGNvc3Qgb2YgbXVsdGlwbGUgdHJhbnNhY3Rpb25zLCB3aGljaCBpc1xuICAgIC8vIHNtYWxsKS4gVGhlIGh0dHAgYWRhcHRlciBvdmVycmlkZXMgdGhpcyBpbiBvcmRlclxuICAgIC8vIHRvIGRvIGEgbW9yZSBlZmZpY2llbnQgc2luZ2xlIEhUVFAgcmVxdWVzdC5cbiAgICB0aGlzLmJ1bGtHZXQgPSBhZGFwdGVyRnVuKCdidWxrR2V0JywgZnVuY3Rpb24gKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICBidWxrR2V0KHRoaXMsIG9wdHMsIGNhbGxiYWNrKTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gY29tcGFjdCBvbmUgZG9jdW1lbnQgYW5kIGZpcmUgY2FsbGJhY2tcbiAgICAvLyBieSBjb21wYWN0aW5nIHdlIG1lYW4gcmVtb3ZpbmcgYWxsIHJldmlzaW9ucyB3aGljaFxuICAgIC8vIGFyZSBmdXJ0aGVyIGZyb20gdGhlIGxlYWYgaW4gcmV2aXNpb24gdHJlZSB0aGFuIG1heF9oZWlnaHRcbiAgICB0aGlzLmNvbXBhY3REb2N1bWVudCA9IGFkYXB0ZXJGdW4oJ2NvbXBhY3REb2N1bWVudCcsIGZ1bmN0aW9uIChkb2NJZCwgbWF4SGVpZ2h0LCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5fZ2V0UmV2aXNpb25UcmVlKGRvY0lkLCAoZXJyLCByZXZUcmVlKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhlaWdodCA9IGNvbXB1dGVIZWlnaHQocmV2VHJlZSk7XG4gICAgICAgIHZhciBjYW5kaWRhdGVzID0gW107XG4gICAgICAgIHZhciByZXZzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGhlaWdodCkuZm9yRWFjaChmdW5jdGlvbiAocmV2JCQxKSB7XG4gICAgICAgICAgaWYgKGhlaWdodFtyZXYkJDFdID4gbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICBjYW5kaWRhdGVzLnB1c2gocmV2JCQxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRyYXZlcnNlUmV2VHJlZShyZXZUcmVlLCBmdW5jdGlvbiAoaXNMZWFmLCBwb3MsIHJldkhhc2gsIGN0eCwgb3B0cykge1xuICAgICAgICAgIHZhciByZXYkJDEgPSBwb3MgKyAnLScgKyByZXZIYXNoO1xuICAgICAgICAgIGlmIChvcHRzLnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScgJiYgY2FuZGlkYXRlcy5pbmRleE9mKHJldiQkMSkgIT09IC0xKSB7XG4gICAgICAgICAgICByZXZzLnB1c2gocmV2JCQxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kb0NvbXBhY3Rpb24oZG9jSWQsIHJldnMsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvLyBjb21wYWN0IHRoZSB3aG9sZSBkYXRhYmFzZSB1c2luZyBzaW5nbGUgZG9jdW1lbnRcbiAgICAvLyBjb21wYWN0aW9uXG4gICAgdGhpcy5jb21wYWN0ID0gYWRhcHRlckZ1bignY29tcGFjdCcsIGZ1bmN0aW9uIChvcHRzLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgICAgdGhpcy5fY29tcGFjdGlvblF1ZXVlID0gdGhpcy5fY29tcGFjdGlvblF1ZXVlIHx8IFtdO1xuICAgICAgdGhpcy5fY29tcGFjdGlvblF1ZXVlLnB1c2goe29wdHMsIGNhbGxiYWNrfSk7XG4gICAgICBpZiAodGhpcy5fY29tcGFjdGlvblF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBkb05leHRDb21wYWN0aW9uKHRoaXMpO1xuICAgICAgfVxuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICAvKiBCZWdpbiBhcGkgd3JhcHBlcnMuIFNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgdG8gc3RvcmFnZSBiZWxvbmdzIGluIHRoZSBfW21ldGhvZF0gKi9cbiAgICB0aGlzLmdldCA9IGFkYXB0ZXJGdW4oJ2dldCcsIGZ1bmN0aW9uIChpZCwgb3B0cywgY2IpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGNiKGNyZWF0ZUVycm9yKElOVkFMSURfSUQpKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xvY2FsSWQoaWQpICYmIHR5cGVvZiB0aGlzLl9nZXRMb2NhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TG9jYWwoaWQsIGNiKTtcbiAgICAgIH1cbiAgICAgIHZhciBsZWF2ZXMgPSBbXTtcblxuICAgICAgY29uc3QgZmluaXNoT3BlblJldnMgPSAoKSA9PiB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIGNvdW50ID0gbGVhdmVzLmxlbmd0aDtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG9yZGVyIHdpdGggb3Blbl9yZXZzIGlzIHVuc3BlY2lmaWVkXG4gICAgICAgIGxlYXZlcy5mb3JFYWNoKChsZWFmKSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXQoaWQsIHtcbiAgICAgICAgICAgIHJldjogbGVhZixcbiAgICAgICAgICAgIHJldnM6IG9wdHMucmV2cyxcbiAgICAgICAgICAgIGxhdGVzdDogb3B0cy5sYXRlc3QsXG4gICAgICAgICAgICBhdHRhY2htZW50czogb3B0cy5hdHRhY2htZW50cyxcbiAgICAgICAgICAgIGJpbmFyeTogb3B0cy5iaW5hcnlcbiAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyLCBkb2MpIHtcbiAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgIC8vIHVzaW5nIGxhdGVzdD10cnVlIGNhbiBwcm9kdWNlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nO1xuICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0W2ldLm9rICYmIHJlc3VsdFtpXS5vay5fcmV2ID09PSBkb2MuX3Jldikge1xuICAgICAgICAgICAgICAgICAgZXhpc3RpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7b2s6IGRvY30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXN1bHQucHVzaCh7bWlzc2luZzogbGVhZn0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY291bnQtLTtcbiAgICAgICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAgICAgY2IobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0cy5vcGVuX3JldnMpIHtcbiAgICAgICAgaWYgKG9wdHMub3Blbl9yZXZzID09PSBcImFsbFwiKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0UmV2aXNpb25UcmVlKGlkLCBmdW5jdGlvbiAoZXJyLCByZXZfdHJlZSkge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGVhdmVzID0gY29sbGVjdExlYXZlcyhyZXZfdHJlZSkubWFwKGZ1bmN0aW9uIChsZWFmKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsZWFmLnJldjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmluaXNoT3BlblJldnMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRzLm9wZW5fcmV2cykpIHtcbiAgICAgICAgICAgIGxlYXZlcyA9IG9wdHMub3Blbl9yZXZzO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZWF2ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgdmFyIGwgPSBsZWF2ZXNbaV07XG4gICAgICAgICAgICAgIC8vIGxvb2tzIGxpa2UgaXQncyB0aGUgb25seSB0aGluZyBjb3VjaGRiIGNoZWNrc1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRSZXYobCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2IoY3JlYXRlRXJyb3IoSU5WQUxJRF9SRVYpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluaXNoT3BlblJldnMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGNyZWF0ZUVycm9yKFVOS05PV05fRVJST1IsICdmdW5jdGlvbl9jbGF1c2UnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybjsgLy8gb3Blbl9yZXZzIGRvZXMgbm90IGxpa2Ugb3RoZXIgb3B0aW9uc1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fZ2V0KGlkLCBvcHRzLCAoZXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGVyci5kb2NJZCA9IGlkO1xuICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRvYyA9IHJlc3VsdC5kb2M7XG4gICAgICAgIHZhciBtZXRhZGF0YSA9IHJlc3VsdC5tZXRhZGF0YTtcbiAgICAgICAgdmFyIGN0eCA9IHJlc3VsdC5jdHg7XG5cbiAgICAgICAgaWYgKG9wdHMuY29uZmxpY3RzKSB7XG4gICAgICAgICAgdmFyIGNvbmZsaWN0cyA9IGNvbGxlY3RDb25mbGljdHMobWV0YWRhdGEpO1xuICAgICAgICAgIGlmIChjb25mbGljdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkb2MuX2NvbmZsaWN0cyA9IGNvbmZsaWN0cztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEZWxldGVkKG1ldGFkYXRhLCBkb2MuX3JldikpIHtcbiAgICAgICAgICBkb2MuX2RlbGV0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdHMucmV2cyB8fCBvcHRzLnJldnNfaW5mbykge1xuICAgICAgICAgIHZhciBzcGxpdHRlZFJldiA9IGRvYy5fcmV2LnNwbGl0KCctJyk7XG4gICAgICAgICAgdmFyIHJldk5vICAgICAgID0gcGFyc2VJbnQoc3BsaXR0ZWRSZXZbMF0sIDEwKTtcbiAgICAgICAgICB2YXIgcmV2SGFzaCAgICAgPSBzcGxpdHRlZFJldlsxXTtcblxuICAgICAgICAgIHZhciBwYXRocyA9IHJvb3RUb0xlYWYobWV0YWRhdGEucmV2X3RyZWUpO1xuICAgICAgICAgIHZhciBwYXRoID0gbnVsbDtcblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50UGF0aCA9IHBhdGhzW2ldO1xuICAgICAgICAgICAgY29uc3QgaGFzaEluZGV4ID0gY3VycmVudFBhdGguaWRzLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IHJldkhhc2gpO1xuICAgICAgICAgICAgdmFyIGhhc2hGb3VuZEF0UmV2UG9zID0gaGFzaEluZGV4ID09PSAocmV2Tm8gLSAxKTtcblxuICAgICAgICAgICAgaWYgKGhhc2hGb3VuZEF0UmV2UG9zIHx8ICghcGF0aCAmJiBoYXNoSW5kZXggIT09IC0xKSkge1xuICAgICAgICAgICAgICBwYXRoID0gY3VycmVudFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgICAgICBlcnIgPSBuZXcgRXJyb3IoJ2ludmFsaWQgcmV2IHRyZWUnKTtcbiAgICAgICAgICAgIGVyci5kb2NJZCA9IGlkO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcGF0aElkID0gZG9jLl9yZXYuc3BsaXQoJy0nKVsxXTtcbiAgICAgICAgICBjb25zdCBpbmRleE9mUmV2ID0gcGF0aC5pZHMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gcGF0aElkKSArIDE7XG4gICAgICAgICAgdmFyIGhvd01hbnkgPSBwYXRoLmlkcy5sZW5ndGggLSBpbmRleE9mUmV2O1xuICAgICAgICAgIHBhdGguaWRzLnNwbGljZShpbmRleE9mUmV2LCBob3dNYW55KTtcbiAgICAgICAgICBwYXRoLmlkcy5yZXZlcnNlKCk7XG5cbiAgICAgICAgICBpZiAob3B0cy5yZXZzKSB7XG4gICAgICAgICAgICBkb2MuX3JldmlzaW9ucyA9IHtcbiAgICAgICAgICAgICAgc3RhcnQ6IChwYXRoLnBvcyArIHBhdGguaWRzLmxlbmd0aCkgLSAxLFxuICAgICAgICAgICAgICBpZHM6IHBhdGguaWRzLm1hcChmdW5jdGlvbiAocmV2JCQxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldiQkMS5pZDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnJldnNfaW5mbykge1xuICAgICAgICAgICAgdmFyIHBvcyA9ICBwYXRoLnBvcyArIHBhdGguaWRzLmxlbmd0aDtcbiAgICAgICAgICAgIGRvYy5fcmV2c19pbmZvID0gcGF0aC5pZHMubWFwKGZ1bmN0aW9uIChyZXYkJDEpIHtcbiAgICAgICAgICAgICAgcG9zLS07XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmV2OiBwb3MgKyAnLScgKyByZXYkJDEuaWQsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXYkJDEub3B0cy5zdGF0dXNcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRzLmF0dGFjaG1lbnRzICYmIGRvYy5fYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB2YXIgYXR0YWNobWVudHMgPSBkb2MuX2F0dGFjaG1lbnRzO1xuICAgICAgICAgIHZhciBjb3VudCA9IE9iamVjdC5rZXlzKGF0dGFjaG1lbnRzKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IobnVsbCwgZG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmtleXMoYXR0YWNobWVudHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0QXR0YWNobWVudChkb2MuX2lkLCBrZXksIGF0dGFjaG1lbnRzW2tleV0sIHtcbiAgICAgICAgICAgICAgYmluYXJ5OiBvcHRzLmJpbmFyeSxcbiAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgIGN0eFxuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICAgICAgICB2YXIgYXR0ID0gZG9jLl9hdHRhY2htZW50c1trZXldO1xuICAgICAgICAgICAgICBhdHQuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgIGRlbGV0ZSBhdHQuc3R1YjtcbiAgICAgICAgICAgICAgZGVsZXRlIGF0dC5sZW5ndGg7XG4gICAgICAgICAgICAgIGlmICghLS1jb3VudCkge1xuICAgICAgICAgICAgICAgIGNiKG51bGwsIGRvYyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkb2MuX2F0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZG9jLl9hdHRhY2htZW50cykge1xuICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRvYy5fYXR0YWNobWVudHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICBkb2MuX2F0dGFjaG1lbnRzW2tleV0uc3R1YiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY2IobnVsbCwgZG9jKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIC8vIFRPRE86IEkgZG9uJ3QgbGlrZSB0aGlzLCBpdCBmb3JjZXMgYW4gZXh0cmEgcmVhZCBmb3IgZXZlcnlcbiAgICAvLyBhdHRhY2htZW50IHJlYWQgYW5kIGVuZm9yY2VzIGEgY29uZnVzaW5nIGFwaSBiZXR3ZWVuXG4gICAgLy8gYWRhcHRlci5qcyBhbmQgdGhlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb25cbiAgICB0aGlzLmdldEF0dGFjaG1lbnQgPSBhZGFwdGVyRnVuKCdnZXRBdHRhY2htZW50JywgZnVuY3Rpb24gKGRvY0lkLCBhdHRhY2htZW50SWQsIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAob3B0cyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5fZ2V0KGRvY0lkLCBvcHRzLCAoZXJyLCByZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuZG9jLl9hdHRhY2htZW50cyAmJiByZXMuZG9jLl9hdHRhY2htZW50c1thdHRhY2htZW50SWRdKSB7XG4gICAgICAgICAgb3B0cy5jdHggPSByZXMuY3R4O1xuICAgICAgICAgIG9wdHMuYmluYXJ5ID0gdHJ1ZTtcbiAgICAgICAgICBvcHRzLm1ldGFkYXRhID0gcmVzLm1ldGFkYXRhO1xuICAgICAgICAgIHRoaXMuX2dldEF0dGFjaG1lbnQoZG9jSWQsIGF0dGFjaG1lbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kb2MuX2F0dGFjaG1lbnRzW2F0dGFjaG1lbnRJZF0sIG9wdHMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY3JlYXRlRXJyb3IoTUlTU0lOR19ET0MpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuYWxsRG9jcyA9IGFkYXB0ZXJGdW4oJ2FsbERvY3MnLCBmdW5jdGlvbiAob3B0cywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH1cbiAgICAgIG9wdHMuc2tpcCA9IHR5cGVvZiBvcHRzLnNraXAgIT09ICd1bmRlZmluZWQnID8gb3B0cy5za2lwIDogMDtcbiAgICAgIGlmIChvcHRzLnN0YXJ0X2tleSkge1xuICAgICAgICBvcHRzLnN0YXJ0a2V5ID0gb3B0cy5zdGFydF9rZXk7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5lbmRfa2V5KSB7XG4gICAgICAgIG9wdHMuZW5ka2V5ID0gb3B0cy5lbmRfa2V5O1xuICAgICAgfVxuICAgICAgaWYgKCdrZXlzJyBpbiBvcHRzKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvcHRzLmtleXMpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBUeXBlRXJyb3IoJ29wdGlvbnMua2V5cyBtdXN0IGJlIGFuIGFycmF5JykpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmNvbXBhdGlibGVPcHQgPVxuICAgICAgICAgIFsnc3RhcnRrZXknLCAnZW5ka2V5JywgJ2tleSddLmZpbHRlcihmdW5jdGlvbiAoaW5jb21wYXRpYmxlT3B0KSB7XG4gICAgICAgICAgcmV0dXJuIGluY29tcGF0aWJsZU9wdCBpbiBvcHRzO1xuICAgICAgICB9KVswXTtcbiAgICAgICAgaWYgKGluY29tcGF0aWJsZU9wdCkge1xuICAgICAgICAgIGNhbGxiYWNrKGNyZWF0ZUVycm9yKFFVRVJZX1BBUlNFX0VSUk9SLFxuICAgICAgICAgICAgJ1F1ZXJ5IHBhcmFtZXRlciBgJyArIGluY29tcGF0aWJsZU9wdCArXG4gICAgICAgICAgICAnYCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG11bHRpLWdldCdcbiAgICAgICAgICApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1JlbW90ZSh0aGlzKSkge1xuICAgICAgICAgIGFsbERvY3NLZXlzUGFyc2Uob3B0cyk7XG4gICAgICAgICAgaWYgKG9wdHMua2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hbGxEb2NzKHtsaW1pdDogMH0sIGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2FsbERvY3Mob3B0cywgY2FsbGJhY2spO1xuICAgIH0pLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLmNsb3NlID0gYWRhcHRlckZ1bignY2xvc2UnLCBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2Nsb3NlZCA9IHRydWU7XG4gICAgICB0aGlzLmVtaXQoJ2Nsb3NlZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlKGNhbGxiYWNrKTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5pbmZvID0gYWRhcHRlckZ1bignaW5mbycsIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5faW5mbygoZXJyLCBpbmZvKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhc3N1bWUgd2Uga25vdyBiZXR0ZXIgdGhhbiB0aGUgYWRhcHRlciwgdW5sZXNzIGl0IGluZm9ybXMgdXNcbiAgICAgICAgaW5mby5kYl9uYW1lID0gaW5mby5kYl9uYW1lIHx8IHRoaXMubmFtZTtcbiAgICAgICAgaW5mby5hdXRvX2NvbXBhY3Rpb24gPSAhISh0aGlzLmF1dG9fY29tcGFjdGlvbiAmJiAhaXNSZW1vdGUodGhpcykpO1xuICAgICAgICBpbmZvLmFkYXB0ZXIgPSB0aGlzLmFkYXB0ZXI7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGluZm8pO1xuICAgICAgfSk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuaWQgPSBhZGFwdGVyRnVuKCdpZCcsIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuX2lkKGNhbGxiYWNrKTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5idWxrRG9jcyA9IGFkYXB0ZXJGdW4oJ2J1bGtEb2NzJywgZnVuY3Rpb24gKHJlcSwgb3B0cywgY2FsbGJhY2spIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH1cblxuICAgICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlcSkpIHtcbiAgICAgICAgcmVxID0ge1xuICAgICAgICAgIGRvY3M6IHJlcVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlcSB8fCAhcmVxLmRvY3MgfHwgIUFycmF5LmlzQXJyYXkocmVxLmRvY3MpKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihNSVNTSU5HX0JVTEtfRE9DUykpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcS5kb2NzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IHJlcS5kb2NzW2ldO1xuICAgICAgICBpZiAoaXNOb3RTaW5nbGVEb2MoZG9jKSkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihOT1RfQU5fT0JKRUNUKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdfcmV2JyBpbiBkb2MgJiYgIWlzVmFsaWRSZXYoZG9jLl9yZXYpKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNyZWF0ZUVycm9yKElOVkFMSURfUkVWKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGF0dGFjaG1lbnRFcnJvcjtcbiAgICAgIHJlcS5kb2NzLmZvckVhY2goZnVuY3Rpb24gKGRvYykge1xuICAgICAgICBpZiAoZG9jLl9hdHRhY2htZW50cykge1xuICAgICAgICAgIE9iamVjdC5rZXlzKGRvYy5fYXR0YWNobWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIGF0dGFjaG1lbnRFcnJvciA9IGF0dGFjaG1lbnRFcnJvciB8fCBhdHRhY2htZW50TmFtZUVycm9yKG5hbWUpO1xuICAgICAgICAgICAgaWYgKCFkb2MuX2F0dGFjaG1lbnRzW25hbWVdLmNvbnRlbnRfdHlwZSkge1xuICAgICAgICAgICAgICBndWFyZGVkQ29uc29sZSgnd2FybicsICdBdHRhY2htZW50JywgbmFtZSwgJ29uIGRvY3VtZW50JywgZG9jLl9pZCwgJ2lzIG1pc3NpbmcgY29udGVudF90eXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYXR0YWNobWVudEVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihCQURfUkVRVUVTVCwgYXR0YWNobWVudEVycm9yKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKCduZXdfZWRpdHMnIGluIG9wdHMpKSB7XG4gICAgICAgIGlmICgnbmV3X2VkaXRzJyBpbiByZXEpIHtcbiAgICAgICAgICBvcHRzLm5ld19lZGl0cyA9IHJlcS5uZXdfZWRpdHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0cy5uZXdfZWRpdHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBhZGFwdGVyID0gdGhpcztcbiAgICAgIGlmICghb3B0cy5uZXdfZWRpdHMgJiYgIWlzUmVtb3RlKGFkYXB0ZXIpKSB7XG4gICAgICAgIC8vIGVuc3VyZSByZXZpc2lvbnMgb2YgdGhlIHNhbWUgZG9jIGFyZSBzb3J0ZWQsIHNvIHRoYXRcbiAgICAgICAgLy8gdGhlIGxvY2FsIGFkYXB0ZXIgcHJvY2Vzc2VzIHRoZW0gY29ycmVjdGx5ICgjMjkzNSlcbiAgICAgICAgcmVxLmRvY3Muc29ydChjb21wYXJlQnlJZFRoZW5SZXYpO1xuICAgICAgfVxuXG4gICAgICBjbGVhbkRvY3MocmVxLmRvY3MpO1xuXG4gICAgICAvLyBpbiB0aGUgY2FzZSBvZiBjb25mbGljdHMsIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSBfaWRzIHRvIHRoZSB1c2VyXG4gICAgICAvLyBob3dldmVyLCB0aGUgdW5kZXJseWluZyBhZGFwdGVyIG1heSBkZXN0cm95IHRoZSBkb2NzIGFycmF5LCBzb1xuICAgICAgLy8gY3JlYXRlIGEgY29weSBoZXJlXG4gICAgICB2YXIgaWRzID0gcmVxLmRvY3MubWFwKGZ1bmN0aW9uIChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5faWQ7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fYnVsa0RvY3MocmVxLCBvcHRzLCBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghb3B0cy5uZXdfZWRpdHMpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIHdoYXQgY291Y2ggZG9lcyB3aGVuIG5ld19lZGl0cyBpcyBmYWxzZVxuICAgICAgICAgIHJlcyA9IHJlcy5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4LmVycm9yO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkZCBpZHMgZm9yIGVycm9yL2NvbmZsaWN0IHJlc3BvbnNlcyAobm90IHJlcXVpcmVkIGZvciBDb3VjaERCKVxuICAgICAgICBpZiAoIWlzUmVtb3RlKGFkYXB0ZXIpKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICByZXNbaV0uaWQgPSByZXNbaV0uaWQgfHwgaWRzW2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcyk7XG4gICAgICB9KTtcbiAgICB9KS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5yZWdpc3RlckRlcGVuZGVudERhdGFiYXNlID0gYWRhcHRlckZ1bigncmVnaXN0ZXJEZXBlbmRlbnREYXRhYmFzZScsIGZ1bmN0aW9uIChkZXBlbmRlbnREYiwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkYk9wdGlvbnMgPSBjbG9uZSh0aGlzLl9fb3B0cyk7XG4gICAgICBpZiAodGhpcy5fX29wdHMudmlld19hZGFwdGVyKSB7XG4gICAgICAgIGRiT3B0aW9ucy5hZGFwdGVyID0gdGhpcy5fX29wdHMudmlld19hZGFwdGVyO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGVwREIgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihkZXBlbmRlbnREYiwgZGJPcHRpb25zKTtcblxuICAgICAgZnVuY3Rpb24gZGlmZkZ1bihkb2MpIHtcbiAgICAgICAgZG9jLmRlcGVuZGVudERicyA9IGRvYy5kZXBlbmRlbnREYnMgfHwge307XG4gICAgICAgIGlmIChkb2MuZGVwZW5kZW50RGJzW2RlcGVuZGVudERiXSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gbm8gdXBkYXRlIHJlcXVpcmVkXG4gICAgICAgIH1cbiAgICAgICAgZG9jLmRlcGVuZGVudERic1tkZXBlbmRlbnREYl0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gZG9jO1xuICAgICAgfVxuICAgICAgdXBzZXJ0KHRoaXMsICdfbG9jYWwvX3BvdWNoX2RlcGVuZGVudERicycsIGRpZmZGdW4pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICBjYWxsYmFjayhudWxsLCB7ZGI6IGRlcERCfSk7XG4gICAgICB9KS5jYXRjaChjYWxsYmFjayk7XG4gICAgfSkuYmluZCh0aGlzKTtcblxuICAgIHRoaXMuZGVzdHJveSA9IGFkYXB0ZXJGdW4oJ2Rlc3Ryb3knLCBmdW5jdGlvbiAob3B0cywgY2FsbGJhY2spIHtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgfVxuXG4gICAgICB2YXIgdXNlUHJlZml4ID0gJ3VzZV9wcmVmaXgnIGluIHRoaXMgPyB0aGlzLnVzZV9wcmVmaXggOiB0cnVlO1xuXG4gICAgICBjb25zdCBkZXN0cm95RGIgPSAoKSA9PiB7XG4gICAgICAgIC8vIGNhbGwgZGVzdHJveSBtZXRob2Qgb2YgdGhlIHBhcnRpY3VsYXIgYWRhcHRvclxuICAgICAgICB0aGlzLl9kZXN0cm95KG9wdHMsIChlcnIsIHJlc3ApID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVtaXQoJ2Rlc3Ryb3llZCcpO1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3AgfHwgeyAnb2snOiB0cnVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChpc1JlbW90ZSh0aGlzKSkge1xuICAgICAgICAvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBkZXBlbmRlbnQgREJzIGlmIGl0J3MgYSByZW1vdGUgREJcbiAgICAgICAgcmV0dXJuIGRlc3Ryb3lEYigpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmdldCgnX2xvY2FsL19wb3VjaF9kZXBlbmRlbnREYnMnLCAoZXJyLCBsb2NhbERvYykgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXMgIT09IDQwNCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfSBlbHNlIHsgLy8gbm8gZGVwZW5kZW5jaWVzXG4gICAgICAgICAgICByZXR1cm4gZGVzdHJveURiKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBkZXBlbmRlbnREYnMgPSBsb2NhbERvYy5kZXBlbmRlbnREYnM7XG4gICAgICAgIHZhciBQb3VjaERCID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICAgICAgdmFyIGRlbGV0ZWRNYXAgPSBPYmplY3Qua2V5cyhkZXBlbmRlbnREYnMpLm1hcCgobmFtZSkgPT4ge1xuICAgICAgICAgIC8vIHVzZV9wcmVmaXggaXMgb25seSBmYWxzZSBpbiB0aGUgYnJvd3NlclxuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgdmFyIHRydWVOYW1lID0gdXNlUHJlZml4ID9cbiAgICAgICAgICAgIG5hbWUucmVwbGFjZShuZXcgUmVnRXhwKCdeJyArIFBvdWNoREIucHJlZml4KSwgJycpIDogbmFtZTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBvdWNoREIodHJ1ZU5hbWUsIHRoaXMuX19vcHRzKS5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBQcm9taXNlLmFsbChkZWxldGVkTWFwKS50aGVuKGRlc3Ryb3lEYiwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfSkuYmluZCh0aGlzKTtcbiAgfVxuXG4gIF9jb21wYWN0KG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGNoYW5nZXNPcHRzID0ge1xuICAgICAgcmV0dXJuX2RvY3M6IGZhbHNlLFxuICAgICAgbGFzdF9zZXE6IG9wdHMubGFzdF9zZXEgfHwgMCxcbiAgICAgIHNpbmNlOiBvcHRzLmxhc3Rfc2VxIHx8IDBcbiAgICB9O1xuICAgIHZhciBwcm9taXNlcyA9IFtdO1xuXG4gICAgdmFyIHRhc2tJZDtcbiAgICB2YXIgY29tcGFjdGVkRG9jcyA9IDA7XG5cbiAgICBjb25zdCBvbkNoYW5nZSA9IChyb3cpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlVGFza3MudXBkYXRlKHRhc2tJZCwge1xuICAgICAgICBjb21wbGV0ZWRfaXRlbXM6ICsrY29tcGFjdGVkRG9jc1xuICAgICAgfSk7XG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMuY29tcGFjdERvY3VtZW50KHJvdy5pZCwgMCkpO1xuICAgIH07XG4gICAgY29uc3Qgb25FcnJvciA9IChlcnIpID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlVGFza3MucmVtb3ZlKHRhc2tJZCwgZXJyKTtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfTtcbiAgICBjb25zdCBvbkNvbXBsZXRlID0gKHJlc3ApID0+IHtcbiAgICAgIHZhciBsYXN0U2VxID0gcmVzcC5sYXN0X3NlcTtcbiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVwc2VydCh0aGlzLCAnX2xvY2FsL2NvbXBhY3Rpb24nLCAoZG9jKSA9PiB7XG4gICAgICAgICAgaWYgKCFkb2MubGFzdF9zZXEgfHwgZG9jLmxhc3Rfc2VxIDwgbGFzdFNlcSkge1xuICAgICAgICAgICAgZG9jLmxhc3Rfc2VxID0gbGFzdFNlcTtcbiAgICAgICAgICAgIHJldHVybiBkb2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gc29tZWJvZHkgZWxzZSBnb3QgaGVyZSBmaXJzdCwgZG9uJ3QgdXBkYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFza3MucmVtb3ZlKHRhc2tJZCk7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHtvazogdHJ1ZX0pO1xuICAgICAgfSkuY2F0Y2gob25FcnJvcik7XG4gICAgfTtcblxuICAgIHRoaXMuaW5mbygpLnRoZW4oKGluZm8pID0+IHtcbiAgICAgIHRhc2tJZCA9IHRoaXMuYWN0aXZlVGFza3MuYWRkKHtcbiAgICAgICAgbmFtZTogJ2RhdGFiYXNlX2NvbXBhY3Rpb24nLFxuICAgICAgICB0b3RhbF9pdGVtczogaW5mby51cGRhdGVfc2VxIC0gY2hhbmdlc09wdHMubGFzdF9zZXEsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5jaGFuZ2VzKGNoYW5nZXNPcHRzKVxuICAgICAgICAub24oJ2NoYW5nZScsIG9uQ2hhbmdlKVxuICAgICAgICAub24oJ2NvbXBsZXRlJywgb25Db21wbGV0ZSlcbiAgICAgICAgLm9uKCdlcnJvcicsIG9uRXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgY2hhbmdlcyhvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgICAgb3B0cyA9IHt9O1xuICAgIH1cblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgLy8gQnkgZGVmYXVsdCBzZXQgcmV0dXJuX2RvY3MgdG8gZmFsc2UgaWYgdGhlIGNhbGxlciBoYXMgb3B0cy5saXZlID0gdHJ1ZSxcbiAgICAvLyB0aGlzIHdpbGwgcHJldmVudCB1cyBmcm9tIGNvbGxlY3RpbmcgdGhlIHNldCBvZiBjaGFuZ2VzIGluZGVmaW5pdGVseVxuICAgIC8vIHJlc3VsdGluZyBpbiBncm93aW5nIG1lbW9yeVxuICAgIG9wdHMucmV0dXJuX2RvY3MgPSAoJ3JldHVybl9kb2NzJyBpbiBvcHRzKSA/IG9wdHMucmV0dXJuX2RvY3MgOiAhb3B0cy5saXZlO1xuXG4gICAgcmV0dXJuIG5ldyBDaGFuZ2VzJDEodGhpcywgb3B0cywgY2FsbGJhY2spO1xuICB9XG5cbiAgdHlwZSgpIHtcbiAgICByZXR1cm4gKHR5cGVvZiB0aGlzLl90eXBlID09PSAnZnVuY3Rpb24nKSA/IHRoaXMuX3R5cGUoKSA6IHRoaXMuYWRhcHRlcjtcbiAgfVxufVxuXG4vLyBUaGUgYWJzdHJhY3QgcHVyZ2UgaW1wbGVtZW50YXRpb24gZXhwZWN0cyBhIGRvYyBpZCBhbmQgdGhlIHJldiBvZiBhIGxlYWYgbm9kZSBpbiB0aGF0IGRvYy5cbi8vIEl0IHdpbGwgcmV0dXJuIGVycm9ycyBpZiB0aGUgcmV2IGRvZXNu4oCZdCBleGlzdCBvciBpc27igJl0IGEgbGVhZi5cbkFic3RyYWN0UG91Y2hEQi5wcm90b3R5cGUucHVyZ2UgPSBhZGFwdGVyRnVuKCdfcHVyZ2UnLCBmdW5jdGlvbiAoZG9jSWQsIHJldiQkMSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiB0aGlzLl9wdXJnZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soY3JlYXRlRXJyb3IoVU5LTk9XTl9FUlJPUiwgJ1B1cmdlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgJyArIHRoaXMuYWRhcHRlciArICcgYWRhcHRlci4nKSk7XG4gIH1cbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuX2dldFJldmlzaW9uVHJlZShkb2NJZCwgKGVycm9yLCByZXZzKSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBpZiAoIXJldnMpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihNSVNTSU5HX0RPQykpO1xuICAgIH1cbiAgICBsZXQgcGF0aDtcbiAgICB0cnkge1xuICAgICAgcGF0aCA9IGZpbmRQYXRoVG9MZWFmKHJldnMsIHJldiQkMSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvci5tZXNzYWdlIHx8IGVycm9yKTtcbiAgICB9XG4gICAgc2VsZi5fcHVyZ2UoZG9jSWQsIHBhdGgsIChlcnJvciwgcmVzdWx0KSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFwcGVuZFB1cmdlU2VxKHNlbGYsIGRvY0lkLCByZXYkJDEpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59KTtcblxuY2xhc3MgVGFza1F1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5mYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXVlID0gW107XG4gIH1cblxuICBleGVjdXRlKCkge1xuICAgIHZhciBmdW47XG4gICAgaWYgKHRoaXMuZmFpbGVkKSB7XG4gICAgICB3aGlsZSAoKGZ1biA9IHRoaXMucXVldWUuc2hpZnQoKSkpIHtcbiAgICAgICAgZnVuKHRoaXMuZmFpbGVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKChmdW4gPSB0aGlzLnF1ZXVlLnNoaWZ0KCkpKSB7XG4gICAgICAgIGZ1bigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZhaWwoZXJyKSB7XG4gICAgdGhpcy5mYWlsZWQgPSBlcnI7XG4gICAgdGhpcy5leGVjdXRlKCk7XG4gIH1cblxuICByZWFkeShkYikge1xuICAgIHRoaXMuaXNSZWFkeSA9IHRydWU7XG4gICAgdGhpcy5kYiA9IGRiO1xuICAgIHRoaXMuZXhlY3V0ZSgpO1xuICB9XG5cbiAgYWRkVGFzayhmdW4pIHtcbiAgICB0aGlzLnF1ZXVlLnB1c2goZnVuKTtcbiAgICBpZiAodGhpcy5mYWlsZWQpIHtcbiAgICAgIHRoaXMuZXhlY3V0ZSgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUFkYXB0ZXIobmFtZSwgb3B0cykge1xuICB2YXIgbWF0Y2ggPSBuYW1lLm1hdGNoKC8oW2Etei1dKik6XFwvXFwvKC4qKS8pO1xuICBpZiAobWF0Y2gpIHtcbiAgICAvLyB0aGUgaHR0cCBhZGFwdGVyIGV4cGVjdHMgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IC9odHRwcz8vLnRlc3QobWF0Y2hbMV0pID8gbWF0Y2hbMV0gKyAnOi8vJyArIG1hdGNoWzJdIDogbWF0Y2hbMl0sXG4gICAgICBhZGFwdGVyOiBtYXRjaFsxXVxuICAgIH07XG4gIH1cblxuICB2YXIgYWRhcHRlcnMgPSBQb3VjaERCLmFkYXB0ZXJzO1xuICB2YXIgcHJlZmVycmVkQWRhcHRlcnMgPSBQb3VjaERCLnByZWZlcnJlZEFkYXB0ZXJzO1xuICB2YXIgcHJlZml4ID0gUG91Y2hEQi5wcmVmaXg7XG4gIHZhciBhZGFwdGVyTmFtZSA9IG9wdHMuYWRhcHRlcjtcblxuICBpZiAoIWFkYXB0ZXJOYW1lKSB7IC8vIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGFkYXB0ZXJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZWZlcnJlZEFkYXB0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhZGFwdGVyTmFtZSA9IHByZWZlcnJlZEFkYXB0ZXJzW2ldO1xuICAgICAgLy8gY2hlY2sgZm9yIGJyb3dzZXJzIHRoYXQgaGF2ZSBiZWVuIHVwZ3JhZGVkIGZyb20gd2Vic3FsLW9ubHkgdG8gd2Vic3FsK2lkYlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoYWRhcHRlck5hbWUgPT09ICdpZGInICYmICd3ZWJzcWwnIGluIGFkYXB0ZXJzICYmXG4gICAgICAgICAgaGFzTG9jYWxTdG9yYWdlKCkgJiYgbG9jYWxTdG9yYWdlWydfcG91Y2hfX3dlYnNxbGRiXycgKyBwcmVmaXggKyBuYW1lXSkge1xuICAgICAgICAvLyBsb2cgaXQsIGJlY2F1c2UgdGhpcyBjYW4gYmUgY29uZnVzaW5nIGR1cmluZyBkZXZlbG9wbWVudFxuICAgICAgICBndWFyZGVkQ29uc29sZSgnbG9nJywgJ1BvdWNoREIgaXMgZG93bmdyYWRpbmcgXCInICsgbmFtZSArICdcIiB0byBXZWJTUUwgdG8nICtcbiAgICAgICAgICAnIGF2b2lkIGRhdGEgbG9zcywgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSBvcGVuZWQgd2l0aCBXZWJTUUwuJyk7XG4gICAgICAgIGNvbnRpbnVlOyAvLyBrZWVwIHVzaW5nIHdlYnNxbCB0byBhdm9pZCB1c2VyIGRhdGEgbG9zc1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIGFkYXB0ZXIgPSBhZGFwdGVyc1thZGFwdGVyTmFtZV07XG5cbiAgLy8gaWYgYWRhcHRlciBpcyBpbnZhbGlkLCB0aGVuIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duIGxhdGVyXG4gIHZhciB1c2VQcmVmaXggPSAoYWRhcHRlciAmJiAndXNlX3ByZWZpeCcgaW4gYWRhcHRlcikgP1xuICAgIGFkYXB0ZXIudXNlX3ByZWZpeCA6IHRydWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB1c2VQcmVmaXggPyAocHJlZml4ICsgbmFtZSkgOiBuYW1lLFxuICAgIGFkYXB0ZXI6IGFkYXB0ZXJOYW1lXG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaGVyaXRzKEEsIEIpIHtcbiAgQS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEIucHJvdG90eXBlLCB7XG4gICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IEEgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xhc3MocGFyZW50LCBpbml0KSB7XG4gIGxldCBrbGFzcyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGtsYXNzKSkge1xuICAgICAgcmV0dXJuIG5ldyBrbGFzcyguLi5hcmdzKTtcbiAgICB9XG4gICAgaW5pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfTtcbiAgaW5oZXJpdHMoa2xhc3MsIHBhcmVudCk7XG4gIHJldHVybiBrbGFzcztcbn1cblxuLy8gT0ssIHNvIGhlcmUncyB0aGUgZGVhbC4gQ29uc2lkZXIgdGhpcyBjb2RlOlxuLy8gICAgIHZhciBkYjEgPSBuZXcgUG91Y2hEQignZm9vJyk7XG4vLyAgICAgdmFyIGRiMiA9IG5ldyBQb3VjaERCKCdmb28nKTtcbi8vICAgICBkYjEuZGVzdHJveSgpO1xuLy8gXiB0aGVzZSB0d28gYm90aCBuZWVkIHRvIGVtaXQgJ2Rlc3Ryb3llZCcgZXZlbnRzLFxuLy8gYXMgd2VsbCBhcyB0aGUgUG91Y2hEQiBjb25zdHJ1Y3RvciBpdHNlbGYuXG4vLyBTbyB3ZSBoYXZlIG9uZSBkYiBvYmplY3QgKHdoaWNoZXZlciBvbmUgZ290IGRlc3Ryb3koKSBjYWxsZWQgb24gaXQpXG4vLyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgdGhlIGluaXRpYWwgZXZlbnQsIHdoaWNoIHRoZW4gZ2V0cyBlbWl0dGVkXG4vLyBieSB0aGUgY29uc3RydWN0b3IsIHdoaWNoIHRoZW4gYnJvYWRjYXN0cyBpdCB0byBhbnkgb3RoZXIgZGJzXG4vLyB0aGF0IG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBzYW1lIG5hbWUuXG5mdW5jdGlvbiBwcmVwYXJlRm9yRGVzdHJ1Y3Rpb24oc2VsZikge1xuXG4gIGZ1bmN0aW9uIG9uRGVzdHJveWVkKGZyb21fY29uc3RydWN0b3IpIHtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKCdjbG9zZWQnLCBvbkNsb3NlZCk7XG4gICAgaWYgKCFmcm9tX2NvbnN0cnVjdG9yKSB7XG4gICAgICBzZWxmLmNvbnN0cnVjdG9yLmVtaXQoJ2Rlc3Ryb3llZCcsIHNlbGYubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25DbG9zZWQoKSB7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcignZGVzdHJveWVkJywgb25EZXN0cm95ZWQpO1xuICAgIHNlbGYuY29uc3RydWN0b3IuZW1pdCgndW5yZWYnLCBzZWxmKTtcbiAgfVxuXG4gIHNlbGYub25jZSgnZGVzdHJveWVkJywgb25EZXN0cm95ZWQpO1xuICBzZWxmLm9uY2UoJ2Nsb3NlZCcsIG9uQ2xvc2VkKTtcbiAgc2VsZi5jb25zdHJ1Y3Rvci5lbWl0KCdyZWYnLCBzZWxmKTtcbn1cblxuY2xhc3MgUG91Y2hJbnRlcm5hbCBleHRlbmRzIEFic3RyYWN0UG91Y2hEQiB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIG9wdHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3NldHVwKG5hbWUsIG9wdHMpO1xuICB9XG5cbiAgX3NldHVwKG5hbWUsIG9wdHMpIHtcbiAgICBzdXBlci5fc2V0dXAoKTtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGlmIChuYW1lICYmIHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0cyA9IG5hbWU7XG4gICAgICBuYW1lID0gb3B0cy5uYW1lO1xuICAgICAgZGVsZXRlIG9wdHMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5kZXRlcm1pbmlzdGljX3JldnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3B0cy5kZXRlcm1pbmlzdGljX3JldnMgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuX19vcHRzID0gb3B0cyA9IGNsb25lKG9wdHMpO1xuXG4gICAgdGhpcy5hdXRvX2NvbXBhY3Rpb24gPSBvcHRzLmF1dG9fY29tcGFjdGlvbjtcbiAgICB0aGlzLnB1cmdlZF9pbmZvc19saW1pdCA9IG9wdHMucHVyZ2VkX2luZm9zX2xpbWl0IHx8IDEwMDA7XG4gICAgdGhpcy5wcmVmaXggPSBQb3VjaERCLnByZWZpeDtcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZy9pbnZhbGlkIERCIG5hbWUnKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlZml4ZWROYW1lID0gKG9wdHMucHJlZml4IHx8ICcnKSArIG5hbWU7XG4gICAgdmFyIGJhY2tlbmQgPSBwYXJzZUFkYXB0ZXIocHJlZml4ZWROYW1lLCBvcHRzKTtcblxuICAgIG9wdHMubmFtZSA9IGJhY2tlbmQubmFtZTtcbiAgICBvcHRzLmFkYXB0ZXIgPSBvcHRzLmFkYXB0ZXIgfHwgYmFja2VuZC5hZGFwdGVyO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLl9hZGFwdGVyID0gb3B0cy5hZGFwdGVyO1xuICAgIFBvdWNoREIuZW1pdCgnZGVidWcnLCBbJ2FkYXB0ZXInLCAnUGlja2VkIGFkYXB0ZXI6ICcsIG9wdHMuYWRhcHRlcl0pO1xuXG4gICAgaWYgKCFQb3VjaERCLmFkYXB0ZXJzW29wdHMuYWRhcHRlcl0gfHxcbiAgICAgICAgIVBvdWNoREIuYWRhcHRlcnNbb3B0cy5hZGFwdGVyXS52YWxpZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgQWRhcHRlcjogJyArIG9wdHMuYWRhcHRlcik7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMudmlld19hZGFwdGVyKSB7XG4gICAgICBpZiAoIVBvdWNoREIuYWRhcHRlcnNbb3B0cy52aWV3X2FkYXB0ZXJdIHx8XG4gICAgICAgICAgIVBvdWNoREIuYWRhcHRlcnNbb3B0cy52aWV3X2FkYXB0ZXJdLnZhbGlkKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFZpZXcgQWRhcHRlcjogJyArIG9wdHMudmlld19hZGFwdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRhc2txdWV1ZSA9IG5ldyBUYXNrUXVldWUoKTtcblxuICAgIHRoaXMuYWRhcHRlciA9IG9wdHMuYWRhcHRlcjtcblxuICAgIFBvdWNoREIuYWRhcHRlcnNbb3B0cy5hZGFwdGVyXS5jYWxsKHRoaXMsIG9wdHMsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza3F1ZXVlLmZhaWwoZXJyKTtcbiAgICAgIH1cbiAgICAgIHByZXBhcmVGb3JEZXN0cnVjdGlvbih0aGlzKTtcblxuICAgICAgdGhpcy5lbWl0KCdjcmVhdGVkJywgdGhpcyk7XG4gICAgICBQb3VjaERCLmVtaXQoJ2NyZWF0ZWQnLCB0aGlzLm5hbWUpO1xuICAgICAgdGhpcy50YXNrcXVldWUucmVhZHkodGhpcyk7XG4gICAgfSk7XG4gIH1cbn1cblxuY29uc3QgUG91Y2hEQiA9IGNyZWF0ZUNsYXNzKFBvdWNoSW50ZXJuYWwsIGZ1bmN0aW9uIChuYW1lLCBvcHRzKSB7XG4gIFBvdWNoSW50ZXJuYWwucHJvdG90eXBlLl9zZXR1cC5jYWxsKHRoaXMsIG5hbWUsIG9wdHMpO1xufSk7XG5cbnZhciBmJDEgPSBmZXRjaDtcbnZhciBoID0gSGVhZGVycztcblxuY2xhc3MgQWN0aXZlVGFza3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRhc2tzID0ge307XG4gIH1cblxuICBsaXN0KCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMudGFza3MpO1xuICB9XG5cbiAgYWRkKHRhc2spIHtcbiAgICBjb25zdCBpZCA9IHY0KCk7XG4gICAgdGhpcy50YXNrc1tpZF0gPSB7XG4gICAgICBpZCxcbiAgICAgIG5hbWU6IHRhc2submFtZSxcbiAgICAgIHRvdGFsX2l0ZW1zOiB0YXNrLnRvdGFsX2l0ZW1zLFxuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoKS50b0pTT04oKVxuICAgIH07XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0KGlkKSB7XG4gICAgcmV0dXJuIHRoaXMudGFza3NbaWRdO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgcmVtb3ZlKGlkLCByZWFzb24pIHtcbiAgICBkZWxldGUgdGhpcy50YXNrc1tpZF07XG4gICAgcmV0dXJuIHRoaXMudGFza3M7XG4gIH1cblxuICB1cGRhdGUoaWQsIHVwZGF0ZWRUYXNrKSB7XG4gICAgY29uc3QgdGFzayA9IHRoaXMudGFza3NbaWRdO1xuICAgIGlmICh0eXBlb2YgdGFzayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IG1lcmdlZFRhc2sgPSB7XG4gICAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgICBuYW1lOiB0YXNrLm5hbWUsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IHRhc2suY3JlYXRlZF9hdCxcbiAgICAgICAgdG90YWxfaXRlbXM6IHVwZGF0ZWRUYXNrLnRvdGFsX2l0ZW1zIHx8IHRhc2sudG90YWxfaXRlbXMsXG4gICAgICAgIGNvbXBsZXRlZF9pdGVtczogdXBkYXRlZFRhc2suY29tcGxldGVkX2l0ZW1zIHx8IHRhc2suY29tcGxldGVkX2l0ZW1zLFxuICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSlNPTigpXG4gICAgICB9O1xuICAgICAgdGhpcy50YXNrc1tpZF0gPSBtZXJnZWRUYXNrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50YXNrcztcbiAgfVxufVxuXG5Qb3VjaERCLmFkYXB0ZXJzID0ge307XG5Qb3VjaERCLnByZWZlcnJlZEFkYXB0ZXJzID0gW107XG5cblBvdWNoREIucHJlZml4ID0gJ19wb3VjaF8nO1xuXG52YXIgZXZlbnRFbWl0dGVyID0gbmV3IEVFKCk7XG5cbmZ1bmN0aW9uIHNldFVwRXZlbnRFbWl0dGVyKFBvdWNoKSB7XG4gIE9iamVjdC5rZXlzKEVFLnByb3RvdHlwZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKHR5cGVvZiBFRS5wcm90b3R5cGVba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgUG91Y2hba2V5XSA9IGV2ZW50RW1pdHRlcltrZXldLmJpbmQoZXZlbnRFbWl0dGVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIHRoZXNlIGFyZSBjcmVhdGVkIGluIGNvbnN0cnVjdG9yLmpzLCBhbmQgYWxsb3cgdXMgdG8gbm90aWZ5IGVhY2ggREIgd2l0aFxuICAvLyB0aGUgc2FtZSBuYW1lIHRoYXQgaXQgd2FzIGRlc3Ryb3llZCwgdmlhIHRoZSBjb25zdHJ1Y3RvciBvYmplY3RcbiAgdmFyIGRlc3RydWN0TGlzdGVuZXJzID0gUG91Y2guX2Rlc3RydWN0aW9uTGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuXG4gIFBvdWNoLm9uKCdyZWYnLCBmdW5jdGlvbiBvbkNvbnN0cnVjdG9yUmVmKGRiKSB7XG4gICAgaWYgKCFkZXN0cnVjdExpc3RlbmVycy5oYXMoZGIubmFtZSkpIHtcbiAgICAgIGRlc3RydWN0TGlzdGVuZXJzLnNldChkYi5uYW1lLCBbXSk7XG4gICAgfVxuICAgIGRlc3RydWN0TGlzdGVuZXJzLmdldChkYi5uYW1lKS5wdXNoKGRiKTtcbiAgfSk7XG5cbiAgUG91Y2gub24oJ3VucmVmJywgZnVuY3Rpb24gb25Db25zdHJ1Y3RvclVucmVmKGRiKSB7XG4gICAgaWYgKCFkZXN0cnVjdExpc3RlbmVycy5oYXMoZGIubmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGRiTGlzdCA9IGRlc3RydWN0TGlzdGVuZXJzLmdldChkYi5uYW1lKTtcbiAgICB2YXIgcG9zID0gZGJMaXN0LmluZGV4T2YoZGIpO1xuICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkYkxpc3Quc3BsaWNlKHBvcywgMSk7XG4gICAgaWYgKGRiTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgZGVzdHJ1Y3RMaXN0ZW5lcnMuc2V0KGRiLm5hbWUsIGRiTGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc3RydWN0TGlzdGVuZXJzLmRlbGV0ZShkYi5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIFBvdWNoLm9uKCdkZXN0cm95ZWQnLCBmdW5jdGlvbiBvbkNvbnN0cnVjdG9yRGVzdHJveWVkKG5hbWUpIHtcbiAgICBpZiAoIWRlc3RydWN0TGlzdGVuZXJzLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgZGJMaXN0ID0gZGVzdHJ1Y3RMaXN0ZW5lcnMuZ2V0KG5hbWUpO1xuICAgIGRlc3RydWN0TGlzdGVuZXJzLmRlbGV0ZShuYW1lKTtcbiAgICBkYkxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGIpIHtcbiAgICAgIGRiLmVtaXQoJ2Rlc3Ryb3llZCcsdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5zZXRVcEV2ZW50RW1pdHRlcihQb3VjaERCKTtcblxuUG91Y2hEQi5hZGFwdGVyID0gZnVuY3Rpb24gKGlkLCBvYmosIGFkZFRvUHJlZmVycmVkQWRhcHRlcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKG9iai52YWxpZCgpKSB7XG4gICAgUG91Y2hEQi5hZGFwdGVyc1tpZF0gPSBvYmo7XG4gICAgaWYgKGFkZFRvUHJlZmVycmVkQWRhcHRlcnMpIHtcbiAgICAgIFBvdWNoREIucHJlZmVycmVkQWRhcHRlcnMucHVzaChpZCk7XG4gICAgfVxuICB9XG59O1xuXG5Qb3VjaERCLnBsdWdpbiA9IGZ1bmN0aW9uIChvYmopIHtcbiAgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHsgLy8gZnVuY3Rpb24gc3R5bGUgZm9yIHBsdWdpbnNcbiAgICBvYmooUG91Y2hEQik7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGx1Z2luOiBnb3QgXCInICsgb2JqICsgJ1wiLCBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbicpO1xuICB9IGVsc2Uge1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoaWQpIHsgLy8gb2JqZWN0IHN0eWxlIGZvciBwbHVnaW5zXG4gICAgICBQb3VjaERCLnByb3RvdHlwZVtpZF0gPSBvYmpbaWRdO1xuICAgIH0pO1xuICB9XG4gIGlmICh0aGlzLl9fZGVmYXVsdHMpIHtcbiAgICBQb3VjaERCLl9fZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9fZGVmYXVsdHMpO1xuICB9XG4gIHJldHVybiBQb3VjaERCO1xufTtcblxuUG91Y2hEQi5kZWZhdWx0cyA9IGZ1bmN0aW9uIChkZWZhdWx0T3B0cykge1xuICBsZXQgUG91Y2hXaXRoRGVmYXVsdHMgPSBjcmVhdGVDbGFzcyhQb3VjaERCLCBmdW5jdGlvbiAobmFtZSwgb3B0cykge1xuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgaWYgKG5hbWUgJiYgdHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBvcHRzID0gbmFtZTtcbiAgICAgIG5hbWUgPSBvcHRzLm5hbWU7XG4gICAgICBkZWxldGUgb3B0cy5uYW1lO1xuICAgIH1cblxuICAgIG9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCBQb3VjaFdpdGhEZWZhdWx0cy5fX2RlZmF1bHRzLCBvcHRzKTtcbiAgICBQb3VjaERCLmNhbGwodGhpcywgbmFtZSwgb3B0cyk7XG4gIH0pO1xuXG4gIFBvdWNoV2l0aERlZmF1bHRzLnByZWZlcnJlZEFkYXB0ZXJzID0gUG91Y2hEQi5wcmVmZXJyZWRBZGFwdGVycy5zbGljZSgpO1xuICBPYmplY3Qua2V5cyhQb3VjaERCKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIShrZXkgaW4gUG91Y2hXaXRoRGVmYXVsdHMpKSB7XG4gICAgICBQb3VjaFdpdGhEZWZhdWx0c1trZXldID0gUG91Y2hEQltrZXldO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgdHJhbnNpdGl2ZVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG91Y2hkYi9wb3VjaGRiL2lzc3Vlcy81OTIyXG4gIFBvdWNoV2l0aERlZmF1bHRzLl9fZGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9fZGVmYXVsdHMsIGRlZmF1bHRPcHRzKTtcblxuICByZXR1cm4gUG91Y2hXaXRoRGVmYXVsdHM7XG59O1xuXG5Qb3VjaERCLmZldGNoID0gZnVuY3Rpb24gKHVybCwgb3B0cykge1xuICByZXR1cm4gZiQxKHVybCwgb3B0cyk7XG59O1xuXG5Qb3VjaERCLnByb3RvdHlwZS5hY3RpdmVUYXNrcyA9IFBvdWNoREIuYWN0aXZlVGFza3MgPSBuZXcgQWN0aXZlVGFza3MoKTtcblxuLy8gbWFuYWdlZCBhdXRvbWF0aWNhbGx5IGJ5IHNldC12ZXJzaW9uLmpzXG52YXIgdmVyc2lvbiA9IFwiOS4wLjBcIjtcblxuLy8gdGhpcyB3b3VsZCBqdXN0IGJlIFwicmV0dXJuIGRvY1tmaWVsZF1cIiwgYnV0IGZpZWxkc1xuLy8gY2FuIGJlIFwiZGVlcFwiIGR1ZSB0byBkb3Qgbm90YXRpb25cbmZ1bmN0aW9uIGdldEZpZWxkRnJvbURvYyhkb2MsIHBhcnNlZEZpZWxkKSB7XG4gIHZhciB2YWx1ZSA9IGRvYztcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZEZpZWxkLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhcnNlZEZpZWxkW2ldO1xuICAgIHZhbHVlID0gdmFsdWVba2V5XTtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjb21wYXJlKGxlZnQsIHJpZ2h0KSB7XG4gIHJldHVybiBsZWZ0IDwgcmlnaHQgPyAtMSA6IGxlZnQgPiByaWdodCA/IDEgOiAwO1xufVxuXG4vLyBDb252ZXJ0cyBhIHN0cmluZyBpbiBkb3Qgbm90YXRpb24gdG8gYW4gYXJyYXkgb2YgaXRzIGNvbXBvbmVudHMsIHdpdGggYmFja3NsYXNoIGVzY2FwaW5nXG5mdW5jdGlvbiBwYXJzZUZpZWxkKGZpZWxkTmFtZSkge1xuICAvLyBmaWVsZHMgbWF5IGJlIGRlZXAgKGUuZy4gXCJmb28uYmFyLmJhelwiKSwgc28gcGFyc2VcbiAgdmFyIGZpZWxkcyA9IFtdO1xuICB2YXIgY3VycmVudCA9ICcnO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZmllbGROYW1lLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGNoID0gZmllbGROYW1lW2ldO1xuICAgIGlmIChpID4gMCAmJiBmaWVsZE5hbWVbaSAtIDFdID09PSAnXFxcXCcgJiYgKGNoID09PSAnJCcgfHwgY2ggPT09ICcuJykpIHtcbiAgICAgIC8vIGVzY2FwZWQgZGVsaW1pdGVyXG4gICAgICBjdXJyZW50ID0gY3VycmVudC5zdWJzdHJpbmcoMCwgY3VycmVudC5sZW5ndGggLSAxKSArIGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcuJykge1xuICAgICAgLy8gV2hlbiBgLmAgaXMgbm90IGVzY2FwZWQgKGFib3ZlKSwgaXQgaXMgYSBmaWVsZCBkZWxpbWl0ZXJcbiAgICAgIGZpZWxkcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgY3VycmVudCA9ICcnO1xuICAgIH0gZWxzZSB7IC8vIG5vcm1hbCBjaGFyYWN0ZXJcbiAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgfVxuICB9XG4gIGZpZWxkcy5wdXNoKGN1cnJlbnQpO1xuICByZXR1cm4gZmllbGRzO1xufVxuXG52YXIgY29tYmluYXRpb25GaWVsZHMgPSBbJyRvcicsICckbm9yJywgJyRub3QnXTtcbmZ1bmN0aW9uIGlzQ29tYmluYXRpb25hbEZpZWxkKGZpZWxkKSB7XG4gIHJldHVybiBjb21iaW5hdGlvbkZpZWxkcy5pbmRleE9mKGZpZWxkKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBnZXRLZXkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopWzBdO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmopIHtcbiAgcmV0dXJuIG9ialtnZXRLZXkob2JqKV07XG59XG5cblxuLy8gZmxhdHRlbiBhbiBhcnJheSBvZiBzZWxlY3RvcnMgam9pbmVkIGJ5IGFuICRhbmQgb3BlcmF0b3JcbmZ1bmN0aW9uIG1lcmdlQW5kZWRTZWxlY3RvcnMoc2VsZWN0b3JzKSB7XG5cbiAgLy8gc29ydCB0byBlbnN1cmUgdGhhdCBlLmcuIGlmIHRoZSB1c2VyIHNwZWNpZmllZFxuICAvLyAkYW5kOiBbeyRndDogJ2EnfSwgeyRndDogJ2InfV0sIHRoZW4gaXQncyBjb2xsYXBzZWQgaW50b1xuICAvLyBqdXN0IHskZ3Q6ICdiJ31cbiAgdmFyIHJlcyA9IHt9O1xuICB2YXIgZmlyc3QgPSB7JG9yOiB0cnVlLCAkbm9yOiB0cnVlfTtcblxuICBzZWxlY3RvcnMuZm9yRWFjaChmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICBPYmplY3Qua2V5cyhzZWxlY3RvcikuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgIHZhciBtYXRjaGVyID0gc2VsZWN0b3JbZmllbGRdO1xuICAgICAgaWYgKHR5cGVvZiBtYXRjaGVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBtYXRjaGVyID0geyRlcTogbWF0Y2hlcn07XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0NvbWJpbmF0aW9uYWxGaWVsZChmaWVsZCkpIHtcbiAgICAgICAgLy8gb3IsIG5vclxuICAgICAgICBpZiAobWF0Y2hlciBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgaWYgKGZpcnN0W2ZpZWxkXSkge1xuICAgICAgICAgICAgZmlyc3RbZmllbGRdID0gZmFsc2U7XG4gICAgICAgICAgICByZXNbZmllbGRdID0gbWF0Y2hlcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZW50cmllcyA9IFtdO1xuICAgICAgICAgIHJlc1tmaWVsZF0uZm9yRWFjaChmdW5jdGlvbiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1hdGNoZXIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICB2YXIgbSA9IG1hdGNoZXJba2V5XTtcbiAgICAgICAgICAgICAgdmFyIGxvbmdlc3QgPSBNYXRoLm1heChPYmplY3Qua2V5cyhleGlzdGluZykubGVuZ3RoLCBPYmplY3Qua2V5cyhtKS5sZW5ndGgpO1xuICAgICAgICAgICAgICB2YXIgbWVyZ2VkID0gbWVyZ2VBbmRlZFNlbGVjdG9ycyhbZXhpc3RpbmcsIG1dKTtcbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZCkubGVuZ3RoIDw9IGxvbmdlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc2l0dWF0aW9uIGxpa2U6IChhIDp7JGVxIDoxfSB8fCAuLi4pICYmIChhIHskZXE6IDJ9IHx8IC4uLilcbiAgICAgICAgICAgICAgICAvLyBtZXJnaW5nIHdvdWxkIHByb2R1Y2UgYSAkZXEgMiB3aGVuIGFjdHVhbGx5IHdlIHNob3VsZG4ndCBldmVyIG1hdGNoIGFnYWluc3QgdGhlc2UgbWVyZ2VkIGNvbmRpdGlvbnNcbiAgICAgICAgICAgICAgICAvLyBtZXJnZWQgc2hvdWxkIGFsd2F5cyBjb250YWluIG1vcmUgdmFsdWVzIHRvIGJlIHZhbGlkXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJpZXMucHVzaChtZXJnZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzW2ZpZWxkXSA9IGVudHJpZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm90XG4gICAgICAgICAgcmVzW2ZpZWxkXSA9IG1lcmdlQW5kZWRTZWxlY3RvcnMoW21hdGNoZXJdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGZpZWxkTWF0Y2hlcnMgPSByZXNbZmllbGRdID0gcmVzW2ZpZWxkXSB8fCB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMobWF0Y2hlcikuZm9yRWFjaChmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBtYXRjaGVyW29wZXJhdG9yXTtcblxuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJyRndCcgfHwgb3BlcmF0b3IgPT09ICckZ3RlJykge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlR3RHdGUob3BlcmF0b3IsIHZhbHVlLCBmaWVsZE1hdGNoZXJzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSAnJGx0JyB8fCBvcGVyYXRvciA9PT0gJyRsdGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VMdEx0ZShvcGVyYXRvciwgdmFsdWUsIGZpZWxkTWF0Y2hlcnMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgPT09ICckbmUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VOZSh2YWx1ZSwgZmllbGRNYXRjaGVycyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciA9PT0gJyRlcScpIHtcbiAgICAgICAgICAgIHJldHVybiBtZXJnZUVxKHZhbHVlLCBmaWVsZE1hdGNoZXJzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdG9yID09PSBcIiRyZWdleFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VSZWdleCh2YWx1ZSwgZmllbGRNYXRjaGVycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpZWxkTWF0Y2hlcnNbb3BlcmF0b3JdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzO1xufVxuXG5cblxuLy8gY29sbGFwc2UgbG9naWNhbGx5IGVxdWl2YWxlbnQgZ3QvZ3RlIHZhbHVlc1xuZnVuY3Rpb24gbWVyZ2VHdEd0ZShvcGVyYXRvciwgdmFsdWUsIGZpZWxkTWF0Y2hlcnMpIHtcbiAgaWYgKHR5cGVvZiBmaWVsZE1hdGNoZXJzLiRlcSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47IC8vIGRvIG5vdGhpbmdcbiAgfVxuICBpZiAodHlwZW9mIGZpZWxkTWF0Y2hlcnMuJGd0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAob3BlcmF0b3IgPT09ICckZ3RlJykge1xuICAgICAgaWYgKHZhbHVlID4gZmllbGRNYXRjaGVycy4kZ3RlKSB7IC8vIG1vcmUgc3BlY2lmaWNpdHlcbiAgICAgICAgZmllbGRNYXRjaGVycy4kZ3RlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gb3BlcmF0b3IgPT09ICckZ3QnXG4gICAgICBpZiAodmFsdWUgPj0gZmllbGRNYXRjaGVycy4kZ3RlKSB7IC8vIG1vcmUgc3BlY2lmaWNpdHlcbiAgICAgICAgZGVsZXRlIGZpZWxkTWF0Y2hlcnMuJGd0ZTtcbiAgICAgICAgZmllbGRNYXRjaGVycy4kZ3QgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkTWF0Y2hlcnMuJGd0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChvcGVyYXRvciA9PT0gJyRndGUnKSB7XG4gICAgICBpZiAodmFsdWUgPiBmaWVsZE1hdGNoZXJzLiRndCkgeyAvLyBtb3JlIHNwZWNpZmljaXR5XG4gICAgICAgIGRlbGV0ZSBmaWVsZE1hdGNoZXJzLiRndDtcbiAgICAgICAgZmllbGRNYXRjaGVycy4kZ3RlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gb3BlcmF0b3IgPT09ICckZ3QnXG4gICAgICBpZiAodmFsdWUgPiBmaWVsZE1hdGNoZXJzLiRndCkgeyAvLyBtb3JlIHNwZWNpZmljaXR5XG4gICAgICAgIGZpZWxkTWF0Y2hlcnMuJGd0ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpZWxkTWF0Y2hlcnNbb3BlcmF0b3JdID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gY29sbGFwc2UgbG9naWNhbGx5IGVxdWl2YWxlbnQgbHQvbHRlIHZhbHVlc1xuZnVuY3Rpb24gbWVyZ2VMdEx0ZShvcGVyYXRvciwgdmFsdWUsIGZpZWxkTWF0Y2hlcnMpIHtcbiAgaWYgKHR5cGVvZiBmaWVsZE1hdGNoZXJzLiRlcSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47IC8vIGRvIG5vdGhpbmdcbiAgfVxuICBpZiAodHlwZW9mIGZpZWxkTWF0Y2hlcnMuJGx0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAob3BlcmF0b3IgPT09ICckbHRlJykge1xuICAgICAgaWYgKHZhbHVlIDwgZmllbGRNYXRjaGVycy4kbHRlKSB7IC8vIG1vcmUgc3BlY2lmaWNpdHlcbiAgICAgICAgZmllbGRNYXRjaGVycy4kbHRlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gb3BlcmF0b3IgPT09ICckZ3QnXG4gICAgICBpZiAodmFsdWUgPD0gZmllbGRNYXRjaGVycy4kbHRlKSB7IC8vIG1vcmUgc3BlY2lmaWNpdHlcbiAgICAgICAgZGVsZXRlIGZpZWxkTWF0Y2hlcnMuJGx0ZTtcbiAgICAgICAgZmllbGRNYXRjaGVycy4kbHQgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkTWF0Y2hlcnMuJGx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmIChvcGVyYXRvciA9PT0gJyRsdGUnKSB7XG4gICAgICBpZiAodmFsdWUgPCBmaWVsZE1hdGNoZXJzLiRsdCkgeyAvLyBtb3JlIHNwZWNpZmljaXR5XG4gICAgICAgIGRlbGV0ZSBmaWVsZE1hdGNoZXJzLiRsdDtcbiAgICAgICAgZmllbGRNYXRjaGVycy4kbHRlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gb3BlcmF0b3IgPT09ICckZ3QnXG4gICAgICBpZiAodmFsdWUgPCBmaWVsZE1hdGNoZXJzLiRsdCkgeyAvLyBtb3JlIHNwZWNpZmljaXR5XG4gICAgICAgIGZpZWxkTWF0Y2hlcnMuJGx0ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpZWxkTWF0Y2hlcnNbb3BlcmF0b3JdID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gY29tYmluZSAkbmUgdmFsdWVzIGludG8gb25lIGFycmF5XG5mdW5jdGlvbiBtZXJnZU5lKHZhbHVlLCBmaWVsZE1hdGNoZXJzKSB7XG4gIGlmICgnJG5lJyBpbiBmaWVsZE1hdGNoZXJzKSB7XG4gICAgLy8gdGhlcmUgYXJlIG1hbnkgdGhpbmdzIHRoaXMgY291bGQgXCJub3RcIiBiZVxuICAgIGZpZWxkTWF0Y2hlcnMuJG5lLnB1c2godmFsdWUpO1xuICB9IGVsc2UgeyAvLyBkb2Vzbid0IGV4aXN0IHlldFxuICAgIGZpZWxkTWF0Y2hlcnMuJG5lID0gW3ZhbHVlXTtcbiAgfVxufVxuXG4vLyBhZGQgJGVxIGludG8gdGhlIG1peFxuZnVuY3Rpb24gbWVyZ2VFcSh2YWx1ZSwgZmllbGRNYXRjaGVycykge1xuICAvLyB0aGVzZSBhbGwgaGF2ZSBsZXNzIHNwZWNpZmljaXR5IHRoYW4gdGhlICRlcVxuICAvLyBUT0RPOiBjaGVjayBmb3IgdXNlciBlcnJvcnMgaGVyZVxuICBkZWxldGUgZmllbGRNYXRjaGVycy4kZ3Q7XG4gIGRlbGV0ZSBmaWVsZE1hdGNoZXJzLiRndGU7XG4gIGRlbGV0ZSBmaWVsZE1hdGNoZXJzLiRsdDtcbiAgZGVsZXRlIGZpZWxkTWF0Y2hlcnMuJGx0ZTtcbiAgZGVsZXRlIGZpZWxkTWF0Y2hlcnMuJG5lO1xuICBmaWVsZE1hdGNoZXJzLiRlcSA9IHZhbHVlO1xufVxuXG4vLyBjb21iaW5lICRyZWdleCB2YWx1ZXMgaW50byBvbmUgYXJyYXlcbmZ1bmN0aW9uIG1lcmdlUmVnZXgodmFsdWUsIGZpZWxkTWF0Y2hlcnMpIHtcbiAgaWYgKCckcmVnZXgnIGluIGZpZWxkTWF0Y2hlcnMpIHtcbiAgICAvLyBhIHZhbHVlIGNvdWxkIG1hdGNoIG11bHRpcGxlIHJlZ2V4ZXNcbiAgICBmaWVsZE1hdGNoZXJzLiRyZWdleC5wdXNoKHZhbHVlKTtcbiAgfSBlbHNlIHsgLy8gZG9lc24ndCBleGlzdCB5ZXRcbiAgICBmaWVsZE1hdGNoZXJzLiRyZWdleCA9IFt2YWx1ZV07XG4gIH1cbn1cblxuLy8jNzQ1ODogZXhlY3V0ZSBmdW5jdGlvbiBtZXJnZUFuZGVkU2VsZWN0b3JzIG9uIG5lc3RlZCAkYW5kXG5mdW5jdGlvbiBtZXJnZUFuZGVkU2VsZWN0b3JzTmVzdGVkKG9iaikge1xuICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9ialtpXVsnJGFuZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ialtpXSA9IG1lcmdlQW5kZWRTZWxlY3RvcnMob2JqW2ldWyckYW5kJ10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWUgPSBvYmpbcHJvcF07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBtZXJnZUFuZGVkU2VsZWN0b3JzTmVzdGVkKHZhbHVlKTsgLy8gPC0gcmVjdXJzaXZlIGNhbGxcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vLyM3NDU4OiBkZXRlcm1pbmUgaWQgJGFuZCBpcyBwcmVzZW50IGluIHNlbGVjdG9yIChhdCBhbnkgbGV2ZWwpXG5mdW5jdGlvbiBpc0FuZEluU2VsZWN0b3Iob2JqLCBpc0FuZCkge1xuICAgIGZvciAodmFyIHByb3AgaW4gb2JqKSB7XG4gICAgICAgIGlmIChwcm9wID09PSAnJGFuZCcpIHtcbiAgICAgICAgICAgIGlzQW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWUgPSBvYmpbcHJvcF07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpc0FuZCA9IGlzQW5kSW5TZWxlY3Rvcih2YWx1ZSwgaXNBbmQpOyAvLyA8LSByZWN1cnNpdmUgY2FsbFxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpc0FuZDtcbn1cblxuLy9cbi8vIG5vcm1hbGl6ZSB0aGUgc2VsZWN0b3Jcbi8vXG5mdW5jdGlvbiBtYXNzYWdlU2VsZWN0b3IoaW5wdXQpIHtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKGlucHV0KTtcblxuICAvLyM3NDU4OiBpZiAkYW5kIGlzIHByZXNlbnQgaW4gc2VsZWN0b3IgKGF0IGFueSBsZXZlbCkgbWVyZ2UgbmVzdGVkICRhbmRcbiAgaWYgKGlzQW5kSW5TZWxlY3RvcihyZXN1bHQsIGZhbHNlKSkge1xuICAgIHJlc3VsdCA9IG1lcmdlQW5kZWRTZWxlY3RvcnNOZXN0ZWQocmVzdWx0KTtcbiAgICBpZiAoJyRhbmQnIGluIHJlc3VsdCkge1xuICAgICAgcmVzdWx0ID0gbWVyZ2VBbmRlZFNlbGVjdG9ycyhyZXN1bHRbJyRhbmQnXSk7XG4gICAgfVxuICB9XG5cbiAgWyckb3InLCAnJG5vciddLmZvckVhY2goZnVuY3Rpb24gKG9yT3JOb3IpIHtcbiAgICBpZiAob3JPck5vciBpbiByZXN1bHQpIHtcbiAgICAgIC8vIG1lc3NhZ2UgZWFjaCBpbmRpdmlkdWFsIHNlbGVjdG9yXG4gICAgICAvLyBlLmcuIHtmb286ICdiYXInfSBiZWNvbWVzIHtmb286IHskZXE6ICdiYXInfX1cbiAgICAgIHJlc3VsdFtvck9yTm9yXS5mb3JFYWNoKGZ1bmN0aW9uIChzdWJTZWxlY3Rvcikge1xuICAgICAgICB2YXIgZmllbGRzID0gT2JqZWN0LmtleXMoc3ViU2VsZWN0b3IpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkc1tpXTtcbiAgICAgICAgICB2YXIgbWF0Y2hlciA9IHN1YlNlbGVjdG9yW2ZpZWxkXTtcbiAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoZXIgIT09ICdvYmplY3QnIHx8IG1hdGNoZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YlNlbGVjdG9yW2ZpZWxkXSA9IHskZXE6IG1hdGNoZXJ9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoJyRub3QnIGluIHJlc3VsdCkge1xuICAgIC8vVGhpcyBmZWVscyBhIGxpdHRsZSBsaWtlIGZvcmNpbmcsIGJ1dCBpdCB3aWxsIHdvcmsgZm9yIG5vdyxcbiAgICAvL0kgd291bGQgbGlrZSB0byBjb21lIGJhY2sgdG8gdGhpcyBhbmQgbWFrZSB0aGUgbWVyZ2luZyBvZiBzZWxlY3RvcnMgYSBsaXR0bGUgbW9yZSBnZW5lcmljXG4gICAgcmVzdWx0Wyckbm90J10gPSBtZXJnZUFuZGVkU2VsZWN0b3JzKFtyZXN1bHRbJyRub3QnXV0pO1xuICB9XG5cbiAgdmFyIGZpZWxkcyA9IE9iamVjdC5rZXlzKHJlc3VsdCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZmllbGQgPSBmaWVsZHNbaV07XG4gICAgdmFyIG1hdGNoZXIgPSByZXN1bHRbZmllbGRdO1xuXG4gICAgaWYgKHR5cGVvZiBtYXRjaGVyICE9PSAnb2JqZWN0JyB8fCBtYXRjaGVyID09PSBudWxsKSB7XG4gICAgICBtYXRjaGVyID0geyRlcTogbWF0Y2hlcn07XG4gICAgfVxuICAgIHJlc3VsdFtmaWVsZF0gPSBtYXRjaGVyO1xuICB9XG5cbiAgbm9ybWFsaXplQXJyYXlPcGVyYXRvcnMocmVzdWx0KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vL1xuLy8gVGhlICRuZSBhbmQgJHJlZ2V4IHZhbHVlcyBtdXN0IGJlIHBsYWNlZCBpbiBhbiBhcnJheSBiZWNhdXNlIHRoZXNlIG9wZXJhdG9ycyBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBmaWVsZC5cbi8vIFdoZW4gJGFuZCBpcyB1c2VkLCBtZXJnZUFuZGVkU2VsZWN0b3JzIHRha2VzIGNhcmUgb2YgcHV0dGluZyBzb21lIG9mIHRoZW0gaW50byBhcnJheXMsIG90aGVyd2lzZSBpdCdzIGRvbmUgaGVyZS5cbi8vXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheU9wZXJhdG9ycyhzZWxlY3Rvcikge1xuICBPYmplY3Qua2V5cyhzZWxlY3RvcikuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICB2YXIgbWF0Y2hlciA9IHNlbGVjdG9yW2ZpZWxkXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hdGNoZXIpKSB7XG4gICAgICBtYXRjaGVyLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoZXJJdGVtKSB7XG4gICAgICAgIGlmIChtYXRjaGVySXRlbSAmJiB0eXBlb2YgbWF0Y2hlckl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgbm9ybWFsaXplQXJyYXlPcGVyYXRvcnMobWF0Y2hlckl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkID09PSAnJG5lJykge1xuICAgICAgc2VsZWN0b3IuJG5lID0gW21hdGNoZXJdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQgPT09ICckcmVnZXgnKSB7XG4gICAgICBzZWxlY3Rvci4kcmVnZXggPSBbbWF0Y2hlcl07XG4gICAgfSBlbHNlIGlmIChtYXRjaGVyICYmIHR5cGVvZiBtYXRjaGVyID09PSAnb2JqZWN0Jykge1xuICAgICAgbm9ybWFsaXplQXJyYXlPcGVyYXRvcnMobWF0Y2hlcik7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFkKHN0ciwgcGFkV2l0aCwgdXBUb0xlbmd0aCkge1xuICB2YXIgcGFkZGluZyA9ICcnO1xuICB2YXIgdGFyZ2V0TGVuZ3RoID0gdXBUb0xlbmd0aCAtIHN0ci5sZW5ndGg7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHdoaWxlIChwYWRkaW5nLmxlbmd0aCA8IHRhcmdldExlbmd0aCkge1xuICAgIHBhZGRpbmcgKz0gcGFkV2l0aDtcbiAgfVxuICByZXR1cm4gcGFkZGluZztcbn1cblxuZnVuY3Rpb24gcGFkTGVmdChzdHIsIHBhZFdpdGgsIHVwVG9MZW5ndGgpIHtcbiAgdmFyIHBhZGRpbmcgPSBwYWQoc3RyLCBwYWRXaXRoLCB1cFRvTGVuZ3RoKTtcbiAgcmV0dXJuIHBhZGRpbmcgKyBzdHI7XG59XG5cbnZhciBNSU5fTUFHTklUVURFID0gLTMyNDsgLy8gdmVyaWZpZWQgYnkgLU51bWJlci5NSU5fVkFMVUVcbnZhciBNQUdOSVRVREVfRElHSVRTID0gMzsgLy8gZGl0dG9cbnZhciBTRVAgPSAnJzsgLy8gc2V0IHRvICdfJyBmb3IgZWFzaWVyIGRlYnVnZ2luZ1xuXG5mdW5jdGlvbiBjb2xsYXRlKGEsIGIpIHtcblxuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgYSA9IG5vcm1hbGl6ZUtleShhKTtcbiAgYiA9IG5vcm1hbGl6ZUtleShiKTtcblxuICB2YXIgYWkgPSBjb2xsYXRpb25JbmRleChhKTtcbiAgdmFyIGJpID0gY29sbGF0aW9uSW5kZXgoYik7XG4gIGlmICgoYWkgLSBiaSkgIT09IDApIHtcbiAgICByZXR1cm4gYWkgLSBiaTtcbiAgfVxuICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHJldHVybiBhIDwgYiA/IC0xIDogMTtcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgcmV0dXJuIHN0cmluZ0NvbGxhdGUoYSwgYik7XG4gIH1cbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyBhcnJheUNvbGxhdGUoYSwgYikgOiBvYmplY3RDb2xsYXRlKGEsIGIpO1xufVxuXG4vLyBjb3VjaCBjb25zaWRlcnMgbnVsbC9OYU4vSW5maW5pdHkvLUluZmluaXR5ID09PSB1bmRlZmluZWQsXG4vLyBmb3IgdGhlIHB1cnBvc2VzIG9mIG1hcHJlZHVjZSBpbmRleGVzLiBhbHNvLCBkYXRlcyBnZXQgc3RyaW5naWZpZWQuXG5mdW5jdGlvbiBub3JtYWxpemVLZXkoa2V5KSB7XG4gIHN3aXRjaCAodHlwZW9mIGtleSkge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdudW1iZXInOlxuICAgICAgaWYgKGtleSA9PT0gSW5maW5pdHkgfHwga2V5ID09PSAtSW5maW5pdHkgfHwgaXNOYU4oa2V5KSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBrZXk7XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHZhciBvcmlnS2V5ID0ga2V5O1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICB2YXIgbGVuID0ga2V5Lmxlbmd0aDtcbiAgICAgICAga2V5ID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBrZXlbaV0gPSBub3JtYWxpemVLZXkob3JpZ0tleVtpXSk7XG4gICAgICAgIH1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB9IGVsc2UgaWYgKGtleSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGtleS50b0pTT04oKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ICE9PSBudWxsKSB7IC8vIGdlbmVyaWMgb2JqZWN0XG4gICAgICAgIGtleSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrIGluIG9yaWdLZXkpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9yaWdLZXksIGspKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gb3JpZ0tleVtrXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBrZXlba10gPSBub3JtYWxpemVLZXkodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICByZXR1cm4ga2V5O1xufVxuXG5mdW5jdGlvbiBpbmRleGlmeShrZXkpIHtcbiAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAodHlwZW9mIGtleSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiBrZXkgPyAxIDogMDtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBudW1Ub0luZGV4YWJsZVN0cmluZyhrZXkpO1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gV2UndmUgdG8gYmUgc3VyZSB0aGF0IGtleSBkb2VzIG5vdCBjb250YWluIFxcdTAwMDBcbiAgICAgICAgLy8gRG8gb3JkZXItcHJlc2VydmluZyByZXBsYWNlbWVudHM6XG4gICAgICAgIC8vIDAgLT4gMSwgMVxuICAgICAgICAvLyAxIC0+IDEsIDJcbiAgICAgICAgLy8gMiAtPiAyLCAyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRyb2wtcmVnZXggKi9cbiAgICAgICAgcmV0dXJuIGtleVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHUwMDAyL2csICdcXHUwMDAyXFx1MDAwMicpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcdTAwMDEvZywgJ1xcdTAwMDFcXHUwMDAyJylcbiAgICAgICAgICAucmVwbGFjZSgvXFx1MDAwMC9nLCAnXFx1MDAwMVxcdTAwMDEnKTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkoa2V5KTtcbiAgICAgICAgdmFyIGFyciA9IGlzQXJyYXkgPyBrZXkgOiBPYmplY3Qua2V5cyhrZXkpO1xuICAgICAgICB2YXIgaSA9IC0xO1xuICAgICAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0b0luZGV4YWJsZVN0cmluZyhhcnJbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgICAgICAgICB2YXIgb2JqS2V5ID0gYXJyW2ldO1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRvSW5kZXhhYmxlU3RyaW5nKG9iaktleSkgK1xuICAgICAgICAgICAgICAgIHRvSW5kZXhhYmxlU3RyaW5nKGtleVtvYmpLZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vLyBjb252ZXJ0IHRoZSBnaXZlbiBrZXkgdG8gYSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBhcHByb3ByaWF0ZVxuLy8gZm9yIGxleGljYWwgc29ydGluZywgZS5nLiB3aXRoaW4gYSBkYXRhYmFzZSwgd2hlcmUgdGhlXG4vLyBzb3J0aW5nIGlzIHRoZSBzYW1lIGdpdmVuIGJ5IHRoZSBjb2xsYXRlKCkgZnVuY3Rpb24uXG5mdW5jdGlvbiB0b0luZGV4YWJsZVN0cmluZyhrZXkpIHtcbiAgdmFyIHplcm8gPSAnXFx1MDAwMCc7XG4gIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuICByZXR1cm4gY29sbGF0aW9uSW5kZXgoa2V5KSArIFNFUCArIGluZGV4aWZ5KGtleSkgKyB6ZXJvO1xufVxuXG5mdW5jdGlvbiBwYXJzZU51bWJlcihzdHIsIGkpIHtcbiAgdmFyIG9yaWdpbmFsSWR4ID0gaTtcbiAgdmFyIG51bTtcbiAgdmFyIHplcm8gPSBzdHJbaV0gPT09ICcxJztcbiAgaWYgKHplcm8pIHtcbiAgICBudW0gPSAwO1xuICAgIGkrKztcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmVnID0gc3RyW2ldID09PSAnMCc7XG4gICAgaSsrO1xuICAgIHZhciBudW1Bc1N0cmluZyA9ICcnO1xuICAgIHZhciBtYWdBc1N0cmluZyA9IHN0ci5zdWJzdHJpbmcoaSwgaSArIE1BR05JVFVERV9ESUdJVFMpO1xuICAgIHZhciBtYWduaXR1ZGUgPSBwYXJzZUludChtYWdBc1N0cmluZywgMTApICsgTUlOX01BR05JVFVERTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChuZWcpIHtcbiAgICAgIG1hZ25pdHVkZSA9IC1tYWduaXR1ZGU7XG4gICAgfVxuICAgIGkgKz0gTUFHTklUVURFX0RJR0lUUztcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgdmFyIGNoID0gc3RyW2ldO1xuICAgICAgaWYgKGNoID09PSAnXFx1MDAwMCcpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBudW1Bc1N0cmluZyArPSBjaDtcbiAgICAgIH1cbiAgICAgIGkrKztcbiAgICB9XG4gICAgbnVtQXNTdHJpbmcgPSBudW1Bc1N0cmluZy5zcGxpdCgnLicpO1xuICAgIGlmIChudW1Bc1N0cmluZy5sZW5ndGggPT09IDEpIHtcbiAgICAgIG51bSA9IHBhcnNlSW50KG51bUFzU3RyaW5nLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBudW0gPSBwYXJzZUZsb2F0KG51bUFzU3RyaW5nWzBdICsgJy4nICsgbnVtQXNTdHJpbmdbMV0pO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChuZWcpIHtcbiAgICAgIG51bSA9IG51bSAtIDEwO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChtYWduaXR1ZGUgIT09IDApIHtcbiAgICAgIC8vIHBhcnNlRmxvYXQgaXMgbW9yZSByZWxpYWJsZSB0aGFuIHBvdyBkdWUgdG8gcm91bmRpbmcgZXJyb3JzXG4gICAgICAvLyBlLmcuIE51bWJlci5NQVhfVkFMVUUgd291bGQgcmV0dXJuIEluZmluaXR5IGlmIHdlIGRpZFxuICAgICAgLy8gbnVtICogTWF0aC5wb3coMTAsIG1hZ25pdHVkZSk7XG4gICAgICBudW0gPSBwYXJzZUZsb2F0KG51bSArICdlJyArIG1hZ25pdHVkZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB7bnVtLCBsZW5ndGggOiBpIC0gb3JpZ2luYWxJZHh9O1xufVxuXG4vLyBtb3ZlIHVwIHRoZSBzdGFjayB3aGlsZSBwYXJzaW5nXG4vLyB0aGlzIGZ1bmN0aW9uIG1vdmVkIG91dHNpZGUgb2YgcGFyc2VJbmRleGFibGVTdHJpbmcgZm9yIHBlcmZvcm1hbmNlXG5mdW5jdGlvbiBwb3Aoc3RhY2ssIG1ldGFTdGFjaykge1xuICB2YXIgb2JqID0gc3RhY2sucG9wKCk7XG5cbiAgaWYgKG1ldGFTdGFjay5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdE1ldGFFbGVtZW50ID0gbWV0YVN0YWNrW21ldGFTdGFjay5sZW5ndGggLSAxXTtcbiAgICBpZiAob2JqID09PSBsYXN0TWV0YUVsZW1lbnQuZWxlbWVudCkge1xuICAgICAgLy8gcG9wcGluZyBhIG1ldGEtZWxlbWVudCwgZS5nLiBhbiBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgYW5vdGhlciBvYmplY3RcbiAgICAgIG1ldGFTdGFjay5wb3AoKTtcbiAgICAgIGxhc3RNZXRhRWxlbWVudCA9IG1ldGFTdGFja1ttZXRhU3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIHZhciBlbGVtZW50ID0gbGFzdE1ldGFFbGVtZW50LmVsZW1lbnQ7XG4gICAgdmFyIGxhc3RFbGVtZW50SW5kZXggPSBsYXN0TWV0YUVsZW1lbnQuaW5kZXg7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQucHVzaChvYmopO1xuICAgIH0gZWxzZSBpZiAobGFzdEVsZW1lbnRJbmRleCA9PT0gc3RhY2subGVuZ3RoIC0gMikgeyAvLyBvYmogd2l0aCBrZXkrdmFsdWVcbiAgICAgIHZhciBrZXkgPSBzdGFjay5wb3AoKTtcbiAgICAgIGVsZW1lbnRba2V5XSA9IG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhY2sucHVzaChvYmopOyAvLyBvYmogd2l0aCBrZXkgb25seVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUluZGV4YWJsZVN0cmluZyhzdHIpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBtZXRhU3RhY2sgPSBbXTsgLy8gc3RhY2sgZm9yIGFycmF5cyBhbmQgb2JqZWN0c1xuICB2YXIgaSA9IDA7XG5cbiAgLyplc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOiBbXCJlcnJvclwiLCB7IFwiY2hlY2tMb29wc1wiOiBmYWxzZSB9XSovXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIGNvbGxhdGlvbkluZGV4ID0gc3RyW2krK107XG4gICAgaWYgKGNvbGxhdGlvbkluZGV4ID09PSAnXFx1MDAwMCcpIHtcbiAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHN0YWNrLnBvcCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9wKHN0YWNrLCBtZXRhU3RhY2spO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3dpdGNoIChjb2xsYXRpb25JbmRleCkge1xuICAgICAgY2FzZSAnMSc6XG4gICAgICAgIHN0YWNrLnB1c2gobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMic6XG4gICAgICAgIHN0YWNrLnB1c2goc3RyW2ldID09PSAnMScpO1xuICAgICAgICBpKys7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMyc6XG4gICAgICAgIHZhciBwYXJzZWROdW0gPSBwYXJzZU51bWJlcihzdHIsIGkpO1xuICAgICAgICBzdGFjay5wdXNoKHBhcnNlZE51bS5udW0pO1xuICAgICAgICBpICs9IHBhcnNlZE51bS5sZW5ndGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnNCc6XG4gICAgICAgIHZhciBwYXJzZWRTdHIgPSAnJztcbiAgICAgICAgLyplc2xpbnQgbm8tY29uc3RhbnQtY29uZGl0aW9uOiBbXCJlcnJvclwiLCB7IFwiY2hlY2tMb29wc1wiOiBmYWxzZSB9XSovXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdmFyIGNoID0gc3RyW2ldO1xuICAgICAgICAgIGlmIChjaCA9PT0gJ1xcdTAwMDAnKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyc2VkU3RyICs9IGNoO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICAvLyBwZXJmb3JtIHRoZSByZXZlcnNlIG9mIHRoZSBvcmRlci1wcmVzZXJ2aW5nIHJlcGxhY2VtZW50XG4gICAgICAgIC8vIGFsZ29yaXRobSAoc2VlIGFib3ZlKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG4gICAgICAgIHBhcnNlZFN0ciA9IHBhcnNlZFN0ci5yZXBsYWNlKC9cXHUwMDAxXFx1MDAwMS9nLCAnXFx1MDAwMCcpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcdTAwMDFcXHUwMDAyL2csICdcXHUwMDAxJylcbiAgICAgICAgICAucmVwbGFjZSgvXFx1MDAwMlxcdTAwMDIvZywgJ1xcdTAwMDInKTtcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb250cm9sLXJlZ2V4ICovXG4gICAgICAgIHN0YWNrLnB1c2gocGFyc2VkU3RyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICc1JzpcbiAgICAgICAgdmFyIGFycmF5RWxlbWVudCA9IHsgZWxlbWVudDogW10sIGluZGV4OiBzdGFjay5sZW5ndGggfTtcbiAgICAgICAgc3RhY2sucHVzaChhcnJheUVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgIG1ldGFTdGFjay5wdXNoKGFycmF5RWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnNic6XG4gICAgICAgIHZhciBvYmpFbGVtZW50ID0geyBlbGVtZW50OiB7fSwgaW5kZXg6IHN0YWNrLmxlbmd0aCB9O1xuICAgICAgICBzdGFjay5wdXNoKG9iakVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgIG1ldGFTdGFjay5wdXNoKG9iakVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ2JhZCBjb2xsYXRpb25JbmRleCBvciB1bmV4cGVjdGVkbHkgcmVhY2hlZCBlbmQgb2YgaW5wdXQ6ICcgK1xuICAgICAgICAgICAgY29sbGF0aW9uSW5kZXgpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcnJheUNvbGxhdGUoYSwgYikge1xuICB2YXIgbGVuID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBzb3J0ID0gY29sbGF0ZShhW2ldLCBiW2ldKTtcbiAgICBpZiAoc29ydCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuICB9XG4gIHJldHVybiAoYS5sZW5ndGggPT09IGIubGVuZ3RoKSA/IDAgOlxuICAgIChhLmxlbmd0aCA+IGIubGVuZ3RoKSA/IDEgOiAtMTtcbn1cbmZ1bmN0aW9uIHN0cmluZ0NvbGxhdGUoYSwgYikge1xuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYWxlaGFydmV5L3BvdWNoZGIvaXNzdWVzLzQwXG4gIC8vIFRoaXMgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENvdWNoREIgaW1wbGVtZW50YXRpb24sIGJ1dCBpdHMgdGhlXG4gIC8vIGJlc3Qgd2UgY2FuIGRvIGZvciBub3dcbiAgcmV0dXJuIChhID09PSBiKSA/IDAgOiAoKGEgPiBiKSA/IDEgOiAtMSk7XG59XG5mdW5jdGlvbiBvYmplY3RDb2xsYXRlKGEsIGIpIHtcbiAgdmFyIGFrID0gT2JqZWN0LmtleXMoYSksIGJrID0gT2JqZWN0LmtleXMoYik7XG4gIHZhciBsZW4gPSBNYXRoLm1pbihhay5sZW5ndGgsIGJrLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAvLyBGaXJzdCBzb3J0IHRoZSBrZXlzXG4gICAgdmFyIHNvcnQgPSBjb2xsYXRlKGFrW2ldLCBia1tpXSk7XG4gICAgaWYgKHNvcnQgIT09IDApIHtcbiAgICAgIHJldHVybiBzb3J0O1xuICAgIH1cbiAgICAvLyBpZiB0aGUga2V5cyBhcmUgZXF1YWwgc29ydCB0aGUgdmFsdWVzXG4gICAgc29ydCA9IGNvbGxhdGUoYVtha1tpXV0sIGJbYmtbaV1dKTtcbiAgICBpZiAoc29ydCAhPT0gMCkge1xuICAgICAgcmV0dXJuIHNvcnQ7XG4gICAgfVxuXG4gIH1cbiAgcmV0dXJuIChhay5sZW5ndGggPT09IGJrLmxlbmd0aCkgPyAwIDpcbiAgICAoYWsubGVuZ3RoID4gYmsubGVuZ3RoKSA/IDEgOiAtMTtcbn1cbi8vIFRoZSBjb2xsYXRpb24gaXMgZGVmaW5lZCBieSBlcmxhbmdzIG9yZGVyZWQgdGVybXNcbi8vIHRoZSBhdG9tcyBudWxsLCB0cnVlLCBmYWxzZSBjb21lIGZpcnN0LCB0aGVuIG51bWJlcnMsIHN0cmluZ3MsXG4vLyBhcnJheXMsIHRoZW4gb2JqZWN0c1xuLy8gbnVsbC91bmRlZmluZWQvTmFOL0luZmluaXR5Ly1JbmZpbml0eSBhcmUgYWxsIGNvbnNpZGVyZWQgbnVsbFxuZnVuY3Rpb24gY29sbGF0aW9uSW5kZXgoeCkge1xuICB2YXIgaWQgPSBbJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ3N0cmluZycsICdvYmplY3QnXTtcbiAgdmFyIGlkeCA9IGlkLmluZGV4T2YodHlwZW9mIHgpO1xuICAvL2ZhbHNlIGlmIC0xIG90aGVyd2lzZSB0cnVlLCBidXQgZmFzdCEhISExXG4gIGlmICh+aWR4KSB7XG4gICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIDU7XG4gICAgfVxuICAgIHJldHVybiBpZHggPCAzID8gKGlkeCArIDIpIDogKGlkeCArIDMpO1xuICB9XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIDU7XG4gIH1cbn1cblxuLy8gY29udmVyc2lvbjpcbi8vIHggeXl5IHp6Li4uenpcbi8vIHggPSAwIGZvciBuZWdhdGl2ZSwgMSBmb3IgMCwgMiBmb3IgcG9zaXRpdmVcbi8vIHkgPSBleHBvbmVudCAoZm9yIG5lZ2F0aXZlIG51bWJlcnMgbmVnYXRlZCkgbW92ZWQgc28gdGhhdCBpdCdzID49IDBcbi8vIHogPSBtYW50aXNzZVxuZnVuY3Rpb24gbnVtVG9JbmRleGFibGVTdHJpbmcobnVtKSB7XG5cbiAgaWYgKG51bSA9PT0gMCkge1xuICAgIHJldHVybiAnMSc7XG4gIH1cblxuICAvLyBjb252ZXJ0IG51bWJlciB0byBleHBvbmVudGlhbCBmb3JtYXQgZm9yIGVhc2llciBhbmRcbiAgLy8gbW9yZSBzdWNjaW5jdCBzdHJpbmcgc29ydGluZ1xuICB2YXIgZXhwRm9ybWF0ID0gbnVtLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgvZVxcKz8vKTtcbiAgdmFyIG1hZ25pdHVkZSA9IHBhcnNlSW50KGV4cEZvcm1hdFsxXSwgMTApO1xuXG4gIHZhciBuZWcgPSBudW0gPCAwO1xuXG4gIHZhciByZXN1bHQgPSBuZWcgPyAnMCcgOiAnMic7XG5cbiAgLy8gZmlyc3Qgc29ydCBieSBtYWduaXR1ZGVcbiAgLy8gaXQncyBlYXNpZXIgaWYgYWxsIG1hZ25pdHVkZXMgYXJlIHBvc2l0aXZlXG4gIHZhciBtYWdGb3JDb21wYXJpc29uID0gKChuZWcgPyAtbWFnbml0dWRlIDogbWFnbml0dWRlKSAtIE1JTl9NQUdOSVRVREUpO1xuICB2YXIgbWFnU3RyaW5nID0gcGFkTGVmdCgobWFnRm9yQ29tcGFyaXNvbikudG9TdHJpbmcoKSwgJzAnLCBNQUdOSVRVREVfRElHSVRTKTtcblxuICByZXN1bHQgKz0gU0VQICsgbWFnU3RyaW5nO1xuXG4gIC8vIHRoZW4gc29ydCBieSB0aGUgZmFjdG9yXG4gIHZhciBmYWN0b3IgPSBNYXRoLmFicyhwYXJzZUZsb2F0KGV4cEZvcm1hdFswXSkpOyAvLyBbMS4uMTApXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmIChuZWcpIHsgLy8gZm9yIG5lZ2F0aXZlIHJldmVyc2Ugb3JkZXJpbmdcbiAgICBmYWN0b3IgPSAxMCAtIGZhY3RvcjtcbiAgfVxuXG4gIHZhciBmYWN0b3JTdHIgPSBmYWN0b3IudG9GaXhlZCgyMCk7XG5cbiAgLy8gc3RyaXAgemVyb3MgZnJvbSB0aGUgZW5kXG4gIGZhY3RvclN0ciA9IGZhY3RvclN0ci5yZXBsYWNlKC9cXC4/MCskLywgJycpO1xuXG4gIHJlc3VsdCArPSBTRVAgKyBmYWN0b3JTdHI7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gY3JlYXRlIGEgY29tcGFyYXRvciBiYXNlZCBvbiB0aGUgc29ydCBvYmplY3RcbmZ1bmN0aW9uIGNyZWF0ZUZpZWxkU29ydGVyKHNvcnQpIHtcblxuICBmdW5jdGlvbiBnZXRGaWVsZFZhbHVlc0FzQXJyYXkoZG9jKSB7XG4gICAgcmV0dXJuIHNvcnQubWFwKGZ1bmN0aW9uIChzb3J0aW5nKSB7XG4gICAgICB2YXIgZmllbGROYW1lID0gZ2V0S2V5KHNvcnRpbmcpO1xuICAgICAgdmFyIHBhcnNlZEZpZWxkID0gcGFyc2VGaWVsZChmaWVsZE5hbWUpO1xuICAgICAgdmFyIGRvY0ZpZWxkVmFsdWUgPSBnZXRGaWVsZEZyb21Eb2MoZG9jLCBwYXJzZWRGaWVsZCk7XG4gICAgICByZXR1cm4gZG9jRmllbGRWYWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoYVJvdywgYlJvdykge1xuICAgIHZhciBhRmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlc0FzQXJyYXkoYVJvdy5kb2MpO1xuICAgIHZhciBiRmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlc0FzQXJyYXkoYlJvdy5kb2MpO1xuICAgIHZhciBjb2xsYXRpb24gPSBjb2xsYXRlKGFGaWVsZFZhbHVlcywgYkZpZWxkVmFsdWVzKTtcbiAgICBpZiAoY29sbGF0aW9uICE9PSAwKSB7XG4gICAgICByZXR1cm4gY29sbGF0aW9uO1xuICAgIH1cbiAgICAvLyB0aGlzIGlzIHdoYXQgbWFuZ28gc2VlbXMgdG8gZG9cbiAgICByZXR1cm4gY29tcGFyZShhUm93LmRvYy5faWQsIGJSb3cuZG9jLl9pZCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbHRlckluTWVtb3J5RmllbGRzKHJvd3MsIHJlcXVlc3REZWYsIGluTWVtb3J5RmllbGRzKSB7XG4gIHJvd3MgPSByb3dzLmZpbHRlcihmdW5jdGlvbiAocm93KSB7XG4gICAgcmV0dXJuIHJvd0ZpbHRlcihyb3cuZG9jLCByZXF1ZXN0RGVmLnNlbGVjdG9yLCBpbk1lbW9yeUZpZWxkcyk7XG4gIH0pO1xuXG4gIGlmIChyZXF1ZXN0RGVmLnNvcnQpIHtcbiAgICAvLyBpbi1tZW1vcnkgc29ydFxuICAgIHZhciBmaWVsZFNvcnRlciA9IGNyZWF0ZUZpZWxkU29ydGVyKHJlcXVlc3REZWYuc29ydCk7XG4gICAgcm93cyA9IHJvd3Muc29ydChmaWVsZFNvcnRlcik7XG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0RGVmLnNvcnRbMF0gIT09ICdzdHJpbmcnICYmXG4gICAgICAgIGdldFZhbHVlKHJlcXVlc3REZWYuc29ydFswXSkgPT09ICdkZXNjJykge1xuICAgICAgcm93cyA9IHJvd3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGlmICgnbGltaXQnIGluIHJlcXVlc3REZWYgfHwgJ3NraXAnIGluIHJlcXVlc3REZWYpIHtcbiAgICAvLyBoYXZlIHRvIGRvIHRoZSBsaW1pdCBpbi1tZW1vcnlcbiAgICB2YXIgc2tpcCA9IHJlcXVlc3REZWYuc2tpcCB8fCAwO1xuICAgIHZhciBsaW1pdCA9ICgnbGltaXQnIGluIHJlcXVlc3REZWYgPyByZXF1ZXN0RGVmLmxpbWl0IDogcm93cy5sZW5ndGgpICsgc2tpcDtcbiAgICByb3dzID0gcm93cy5zbGljZShza2lwLCBsaW1pdCk7XG4gIH1cbiAgcmV0dXJuIHJvd3M7XG59XG5cbmZ1bmN0aW9uIHJvd0ZpbHRlcihkb2MsIHNlbGVjdG9yLCBpbk1lbW9yeUZpZWxkcykge1xuICByZXR1cm4gaW5NZW1vcnlGaWVsZHMuZXZlcnkoZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgdmFyIG1hdGNoZXIgPSBzZWxlY3RvcltmaWVsZF07XG4gICAgdmFyIHBhcnNlZEZpZWxkID0gcGFyc2VGaWVsZChmaWVsZCk7XG4gICAgdmFyIGRvY0ZpZWxkVmFsdWUgPSBnZXRGaWVsZEZyb21Eb2MoZG9jLCBwYXJzZWRGaWVsZCk7XG4gICAgaWYgKGlzQ29tYmluYXRpb25hbEZpZWxkKGZpZWxkKSkge1xuICAgICAgcmV0dXJuIG1hdGNoQ29taW5hdGlvbmFsU2VsZWN0b3IoZmllbGQsIG1hdGNoZXIsIGRvYyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoU2VsZWN0b3IobWF0Y2hlciwgZG9jLCBwYXJzZWRGaWVsZCwgZG9jRmllbGRWYWx1ZSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaFNlbGVjdG9yKG1hdGNoZXIsIGRvYywgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgaWYgKCFtYXRjaGVyKSB7XG4gICAgLy8gbm8gZmlsdGVyaW5nIG5lY2Vzc2FyeTsgdGhpcyBmaWVsZCBpcyBqdXN0IG5lZWRlZCBmb3Igc29ydGluZ1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gaXMgbWF0Y2hlciBhbiBvYmplY3QsIGlmIHNvIGNvbnRpbnVlIHJlY3Vyc2lvblxuICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hdGNoZXIpLmV2ZXJ5KGZ1bmN0aW9uIChtYXliZVVzZXJPcGVyYXRvcikge1xuICAgICAgdmFyIHVzZXJWYWx1ZSA9IG1hdGNoZXJbIG1heWJlVXNlck9wZXJhdG9yIF07XG4gICAgICAvLyBleHBsaWNpdCBvcGVyYXRvclxuICAgICAgaWYgKG1heWJlVXNlck9wZXJhdG9yLmluZGV4T2YoXCIkXCIpID09PSAwKSB7XG4gICAgICAgIHJldHVybiBtYXRjaChtYXliZVVzZXJPcGVyYXRvciwgZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzdWJQYXJzZWRGaWVsZCA9IHBhcnNlRmllbGQobWF5YmVVc2VyT3BlcmF0b3IpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBkb2NGaWVsZFZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0eXBlb2YgdXNlclZhbHVlICE9PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgc3ViUGFyc2VkRmllbGQubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAvLyB0aGUgZmllbGQgZG9lcyBub3QgZXhpc3QsIHJldHVybiBvciBnZXRGaWVsZEZyb21Eb2Mgd2lsbCB0aHJvd1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdWJEb2NGaWVsZFZhbHVlID0gZ2V0RmllbGRGcm9tRG9jKGRvY0ZpZWxkVmFsdWUsIHN1YlBhcnNlZEZpZWxkKTtcblxuICAgICAgICBpZiAodHlwZW9mIHVzZXJWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIC8vIGZpZWxkIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IG1pZ2h0IGNvbnRhaW4gbW9yZSBvcGVyYXRvcnNcbiAgICAgICAgICByZXR1cm4gbWF0Y2hTZWxlY3Rvcih1c2VyVmFsdWUsIGRvYywgcGFyc2VkRmllbGQsIHN1YkRvY0ZpZWxkVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW1wbGljaXQgb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG1hdGNoKFwiJGVxXCIsIGRvYywgdXNlclZhbHVlLCBzdWJQYXJzZWRGaWVsZCwgc3ViRG9jRmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBubyBtb3JlIGRlcHRoLCBObyBuZWVkIHRvIHJlY3Vyc2UgZnVydGhlclxuICByZXR1cm4gbWF0Y2hlciA9PT0gZG9jRmllbGRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hDb21pbmF0aW9uYWxTZWxlY3RvcihmaWVsZCwgbWF0Y2hlciwgZG9jKSB7XG5cbiAgaWYgKGZpZWxkID09PSAnJG9yJykge1xuICAgIHJldHVybiBtYXRjaGVyLnNvbWUoZnVuY3Rpb24gKG9yTWF0Y2hlcnMpIHtcbiAgICAgIHJldHVybiByb3dGaWx0ZXIoZG9jLCBvck1hdGNoZXJzLCBPYmplY3Qua2V5cyhvck1hdGNoZXJzKSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoZmllbGQgPT09ICckbm90Jykge1xuICAgIHJldHVybiAhcm93RmlsdGVyKGRvYywgbWF0Y2hlciwgT2JqZWN0LmtleXMobWF0Y2hlcikpO1xuICB9XG5cbiAgLy9gJG5vcmBcbiAgcmV0dXJuICFtYXRjaGVyLmZpbmQoZnVuY3Rpb24gKG9yTWF0Y2hlcnMpIHtcbiAgICByZXR1cm4gcm93RmlsdGVyKGRvYywgb3JNYXRjaGVycywgT2JqZWN0LmtleXMob3JNYXRjaGVycykpO1xuICB9KTtcblxufVxuXG5mdW5jdGlvbiBtYXRjaCh1c2VyT3BlcmF0b3IsIGRvYywgdXNlclZhbHVlLCBwYXJzZWRGaWVsZCwgZG9jRmllbGRWYWx1ZSkge1xuICBpZiAoIW1hdGNoZXJzW3VzZXJPcGVyYXRvcl0pIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBvcGVyYXRvciBcIicgKyB1c2VyT3BlcmF0b3IgK1xuICAgICAgJ1wiIC0gc2hvdWxkIGJlIG9uZSBvZiAkZXEsICRsdGUsICRsdCwgJGd0LCAkZ3RlLCAkZXhpc3RzLCAkbmUsICRpbiwgJyArXG4gICAgICAnJG5pbiwgJHNpemUsICRtb2QsICRyZWdleCwgJGVsZW1NYXRjaCwgJHR5cGUsICRhbGxNYXRjaCBvciAkYWxsJyk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXJzW3VzZXJPcGVyYXRvcl0oZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZmllbGRFeGlzdHMoZG9jRmllbGRWYWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIGRvY0ZpZWxkVmFsdWUgIT09ICd1bmRlZmluZWQnICYmIGRvY0ZpZWxkVmFsdWUgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpZWxkSXNOb3RVbmRlZmluZWQoZG9jRmllbGRWYWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIGRvY0ZpZWxkVmFsdWUgIT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBtb2RGaWVsZChkb2NGaWVsZFZhbHVlLCB1c2VyVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBkb2NGaWVsZFZhbHVlICE9PSBcIm51bWJlclwiIHx8XG4gICAgcGFyc2VJbnQoZG9jRmllbGRWYWx1ZSwgMTApICE9PSBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGRpdmlzb3IgPSB1c2VyVmFsdWVbMF07XG4gIHZhciBtb2QgPSB1c2VyVmFsdWVbMV07XG5cbiAgcmV0dXJuIGRvY0ZpZWxkVmFsdWUgJSBkaXZpc29yID09PSBtb2Q7XG59XG5cbmZ1bmN0aW9uIGFycmF5Q29udGFpbnNWYWx1ZShkb2NGaWVsZFZhbHVlLCB1c2VyVmFsdWUpIHtcbiAgcmV0dXJuIHVzZXJWYWx1ZS5zb21lKGZ1bmN0aW9uICh2YWwpIHtcbiAgICBpZiAoZG9jRmllbGRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gZG9jRmllbGRWYWx1ZS5zb21lKGZ1bmN0aW9uIChkb2NGaWVsZFZhbHVlSXRlbSkge1xuICAgICAgICByZXR1cm4gY29sbGF0ZSh2YWwsIGRvY0ZpZWxkVmFsdWVJdGVtKSA9PT0gMDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb2xsYXRlKHZhbCwgZG9jRmllbGRWYWx1ZSkgPT09IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcnJheUNvbnRhaW5zQWxsVmFsdWVzKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSkge1xuICByZXR1cm4gdXNlclZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcbiAgICByZXR1cm4gZG9jRmllbGRWYWx1ZS5zb21lKGZ1bmN0aW9uIChkb2NGaWVsZFZhbHVlSXRlbSkge1xuICAgICAgcmV0dXJuIGNvbGxhdGUodmFsLCBkb2NGaWVsZFZhbHVlSXRlbSkgPT09IDA7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcnJheVNpemUoZG9jRmllbGRWYWx1ZSwgdXNlclZhbHVlKSB7XG4gIHJldHVybiBkb2NGaWVsZFZhbHVlLmxlbmd0aCA9PT0gdXNlclZhbHVlO1xufVxuXG5mdW5jdGlvbiByZWdleE1hdGNoKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSkge1xuICB2YXIgcmUgPSBuZXcgUmVnRXhwKHVzZXJWYWx1ZSk7XG5cbiAgcmV0dXJuIHJlLnRlc3QoZG9jRmllbGRWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVNYXRjaChkb2NGaWVsZFZhbHVlLCB1c2VyVmFsdWUpIHtcblxuICBzd2l0Y2ggKHVzZXJWYWx1ZSkge1xuICAgIGNhc2UgJ251bGwnOlxuICAgICAgcmV0dXJuIGRvY0ZpZWxkVmFsdWUgPT09IG51bGw7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICByZXR1cm4gdHlwZW9mIChkb2NGaWVsZFZhbHVlKSA9PT0gJ2Jvb2xlYW4nO1xuICAgIGNhc2UgJ251bWJlcic6XG4gICAgICByZXR1cm4gdHlwZW9mIChkb2NGaWVsZFZhbHVlKSA9PT0gJ251bWJlcic7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIHJldHVybiB0eXBlb2YgKGRvY0ZpZWxkVmFsdWUpID09PSAnc3RyaW5nJztcbiAgICBjYXNlICdhcnJheSc6XG4gICAgICByZXR1cm4gZG9jRmllbGRWYWx1ZSBpbnN0YW5jZW9mIEFycmF5O1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICByZXR1cm4gKHt9KS50b1N0cmluZy5jYWxsKGRvY0ZpZWxkVmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJztcbiAgfVxufVxuXG52YXIgbWF0Y2hlcnMgPSB7XG5cbiAgJyRlbGVtTWF0Y2gnOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRvY0ZpZWxkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGRvY0ZpZWxkVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkb2NGaWVsZFZhbHVlWzBdID09PSAnb2JqZWN0JyAmJiAgZG9jRmllbGRWYWx1ZVswXSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRvY0ZpZWxkVmFsdWUuc29tZShmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiByb3dGaWx0ZXIodmFsLCB1c2VyVmFsdWUsIE9iamVjdC5rZXlzKHVzZXJWYWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvY0ZpZWxkVmFsdWUuc29tZShmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gbWF0Y2hTZWxlY3Rvcih1c2VyVmFsdWUsIGRvYywgcGFyc2VkRmllbGQsIHZhbCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgJyRhbGxNYXRjaCc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZG9jRmllbGRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChkb2NGaWVsZFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZG9jRmllbGRWYWx1ZVswXSA9PT0gJ29iamVjdCcgJiYgIGRvY0ZpZWxkVmFsdWVbMF0gIT09IG51bGwpIHtcbiAgICAgIHJldHVybiBkb2NGaWVsZFZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgcmV0dXJuIHJvd0ZpbHRlcih2YWwsIHVzZXJWYWx1ZSwgT2JqZWN0LmtleXModXNlclZhbHVlKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZG9jRmllbGRWYWx1ZS5ldmVyeShmdW5jdGlvbiAodmFsKSB7XG4gICAgICByZXR1cm4gbWF0Y2hTZWxlY3Rvcih1c2VyVmFsdWUsIGRvYywgcGFyc2VkRmllbGQsIHZhbCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgJyRlcSc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gZmllbGRJc05vdFVuZGVmaW5lZChkb2NGaWVsZFZhbHVlKSAmJiBjb2xsYXRlKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSkgPT09IDA7XG4gIH0sXG5cbiAgJyRndGUnOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZpZWxkSXNOb3RVbmRlZmluZWQoZG9jRmllbGRWYWx1ZSkgJiYgY29sbGF0ZShkb2NGaWVsZFZhbHVlLCB1c2VyVmFsdWUpID49IDA7XG4gIH0sXG5cbiAgJyRndCc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gZmllbGRJc05vdFVuZGVmaW5lZChkb2NGaWVsZFZhbHVlKSAmJiBjb2xsYXRlKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSkgPiAwO1xuICB9LFxuXG4gICckbHRlJzogZnVuY3Rpb24gKGRvYywgdXNlclZhbHVlLCBwYXJzZWRGaWVsZCwgZG9jRmllbGRWYWx1ZSkge1xuICAgIHJldHVybiBmaWVsZElzTm90VW5kZWZpbmVkKGRvY0ZpZWxkVmFsdWUpICYmIGNvbGxhdGUoZG9jRmllbGRWYWx1ZSwgdXNlclZhbHVlKSA8PSAwO1xuICB9LFxuXG4gICckbHQnOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZpZWxkSXNOb3RVbmRlZmluZWQoZG9jRmllbGRWYWx1ZSkgJiYgY29sbGF0ZShkb2NGaWVsZFZhbHVlLCB1c2VyVmFsdWUpIDwgMDtcbiAgfSxcblxuICAnJGV4aXN0cyc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICAvL2EgZmllbGQgdGhhdCBpcyBudWxsIGlzIHN0aWxsIGNvbnNpZGVyZWQgdG8gZXhpc3RcbiAgICBpZiAodXNlclZhbHVlKSB7XG4gICAgICByZXR1cm4gZmllbGRJc05vdFVuZGVmaW5lZChkb2NGaWVsZFZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWZpZWxkSXNOb3RVbmRlZmluZWQoZG9jRmllbGRWYWx1ZSk7XG4gIH0sXG5cbiAgJyRtb2QnOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZpZWxkRXhpc3RzKGRvY0ZpZWxkVmFsdWUpICYmIG1vZEZpZWxkKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSk7XG4gIH0sXG5cbiAgJyRuZSc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlLmV2ZXJ5KGZ1bmN0aW9uIChuZVZhbHVlKSB7XG4gICAgICByZXR1cm4gY29sbGF0ZShkb2NGaWVsZFZhbHVlLCBuZVZhbHVlKSAhPT0gMDtcbiAgICB9KTtcbiAgfSxcbiAgJyRpbic6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gZmllbGRFeGlzdHMoZG9jRmllbGRWYWx1ZSkgJiYgYXJyYXlDb250YWluc1ZhbHVlKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSk7XG4gIH0sXG5cbiAgJyRuaW4nOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZpZWxkRXhpc3RzKGRvY0ZpZWxkVmFsdWUpICYmICFhcnJheUNvbnRhaW5zVmFsdWUoZG9jRmllbGRWYWx1ZSwgdXNlclZhbHVlKTtcbiAgfSxcblxuICAnJHNpemUnOiBmdW5jdGlvbiAoZG9jLCB1c2VyVmFsdWUsIHBhcnNlZEZpZWxkLCBkb2NGaWVsZFZhbHVlKSB7XG4gICAgcmV0dXJuIGZpZWxkRXhpc3RzKGRvY0ZpZWxkVmFsdWUpICYmXG4gICAgICBBcnJheS5pc0FycmF5KGRvY0ZpZWxkVmFsdWUpICYmXG4gICAgICBhcnJheVNpemUoZG9jRmllbGRWYWx1ZSwgdXNlclZhbHVlKTtcbiAgfSxcblxuICAnJGFsbCc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkb2NGaWVsZFZhbHVlKSAmJiBhcnJheUNvbnRhaW5zQWxsVmFsdWVzKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSk7XG4gIH0sXG5cbiAgJyRyZWdleCc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gZmllbGRFeGlzdHMoZG9jRmllbGRWYWx1ZSkgJiZcbiAgICAgIHR5cGVvZiBkb2NGaWVsZFZhbHVlID09IFwic3RyaW5nXCIgJiZcbiAgICAgIHVzZXJWYWx1ZS5ldmVyeShmdW5jdGlvbiAocmVnZXhWYWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVnZXhNYXRjaChkb2NGaWVsZFZhbHVlLCByZWdleFZhbHVlKTtcbiAgICAgIH0pO1xuICB9LFxuXG4gICckdHlwZSc6IGZ1bmN0aW9uIChkb2MsIHVzZXJWYWx1ZSwgcGFyc2VkRmllbGQsIGRvY0ZpZWxkVmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZU1hdGNoKGRvY0ZpZWxkVmFsdWUsIHVzZXJWYWx1ZSk7XG4gIH1cbn07XG5cbi8vIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBkb2MgbWF0Y2hlcyB0aGUgc3VwcGxpZWQgc2VsZWN0b3JcbmZ1bmN0aW9uIG1hdGNoZXNTZWxlY3Rvcihkb2MsIHNlbGVjdG9yKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnb2JqZWN0Jykge1xuICAgIC8vIG1hdGNoIHRoZSBDb3VjaERCIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdG9yIGVycm9yOiBleHBlY3RlZCBhIEpTT04gb2JqZWN0Jyk7XG4gIH1cblxuICBzZWxlY3RvciA9IG1hc3NhZ2VTZWxlY3RvcihzZWxlY3Rvcik7XG4gIHZhciByb3cgPSB7XG4gICAgZG9jXG4gIH07XG5cbiAgdmFyIHJvd3NNYXRjaGVkID0gZmlsdGVySW5NZW1vcnlGaWVsZHMoW3Jvd10sIHsgc2VsZWN0b3IgfSwgT2JqZWN0LmtleXMoc2VsZWN0b3IpKTtcbiAgcmV0dXJuIHJvd3NNYXRjaGVkICYmIHJvd3NNYXRjaGVkLmxlbmd0aCA9PT0gMTtcbn1cblxuZnVuY3Rpb24gZXZhbEZpbHRlcihpbnB1dCkge1xuICByZXR1cm4gc2NvcGVFdmFsKCdcInVzZSBzdHJpY3RcIjtcXG5yZXR1cm4gJyArIGlucHV0ICsgJzsnLCB7fSk7XG59XG5cbmZ1bmN0aW9uIGV2YWxWaWV3KGlucHV0KSB7XG4gIHZhciBjb2RlID0gW1xuICAgICdyZXR1cm4gZnVuY3Rpb24oZG9jKSB7JyxcbiAgICAnICBcInVzZSBzdHJpY3RcIjsnLFxuICAgICcgIHZhciBlbWl0dGVkID0gZmFsc2U7JyxcbiAgICAnICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChhLCBiKSB7JyxcbiAgICAnICAgIGVtaXR0ZWQgPSB0cnVlOycsXG4gICAgJyAgfTsnLFxuICAgICcgIHZhciB2aWV3ID0gJyArIGlucHV0ICsgJzsnLFxuICAgICcgIHZpZXcoZG9jKTsnLFxuICAgICcgIGlmIChlbWl0dGVkKSB7JyxcbiAgICAnICAgIHJldHVybiB0cnVlOycsXG4gICAgJyAgfScsXG4gICAgJ307J1xuICBdLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiBzY29wZUV2YWwoY29kZSwge30pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZShvcHRzLCBjYWxsYmFjaykge1xuICBpZiAob3B0cy5zZWxlY3Rvcikge1xuICAgIGlmIChvcHRzLmZpbHRlciAmJiBvcHRzLmZpbHRlciAhPT0gJ19zZWxlY3RvcicpIHtcbiAgICAgIHZhciBmaWx0ZXJOYW1lID0gdHlwZW9mIG9wdHMuZmlsdGVyID09PSAnc3RyaW5nJyA/XG4gICAgICAgIG9wdHMuZmlsdGVyIDogJ2Z1bmN0aW9uJztcbiAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoJ3NlbGVjdG9yIGludmFsaWQgZm9yIGZpbHRlciBcIicgKyBmaWx0ZXJOYW1lICsgJ1wiJykpO1xuICAgIH1cbiAgfVxuICBjYWxsYmFjaygpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUob3B0cykge1xuICBpZiAob3B0cy52aWV3ICYmICFvcHRzLmZpbHRlcikge1xuICAgIG9wdHMuZmlsdGVyID0gJ192aWV3JztcbiAgfVxuXG4gIGlmIChvcHRzLnNlbGVjdG9yICYmICFvcHRzLmZpbHRlcikge1xuICAgIG9wdHMuZmlsdGVyID0gJ19zZWxlY3Rvcic7XG4gIH1cblxuICBpZiAob3B0cy5maWx0ZXIgJiYgdHlwZW9mIG9wdHMuZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgIGlmIChvcHRzLmZpbHRlciA9PT0gJ192aWV3Jykge1xuICAgICAgb3B0cy52aWV3ID0gbm9ybWFsaXplRGVzaWduRG9jRnVuY3Rpb25OYW1lKG9wdHMudmlldyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMuZmlsdGVyID0gbm9ybWFsaXplRGVzaWduRG9jRnVuY3Rpb25OYW1lKG9wdHMuZmlsdGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkRmlsdGVyKGNoYW5nZXNIYW5kbGVyLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzLmZpbHRlciAmJiB0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdzdHJpbmcnICYmXG4gICAgIW9wdHMuZG9jX2lkcyAmJiAhaXNSZW1vdGUoY2hhbmdlc0hhbmRsZXIuZGIpO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXIoY2hhbmdlc0hhbmRsZXIsIG9wdHMpIHtcbiAgdmFyIGNhbGxiYWNrID0gb3B0cy5jb21wbGV0ZTtcbiAgaWYgKG9wdHMuZmlsdGVyID09PSAnX3ZpZXcnKSB7XG4gICAgaWYgKCFvcHRzLnZpZXcgfHwgdHlwZW9mIG9wdHMudmlldyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBlcnIgPSBjcmVhdGVFcnJvcihCQURfUkVRVUVTVCxcbiAgICAgICAgJ2B2aWV3YCBmaWx0ZXIgcGFyYW1ldGVyIG5vdCBmb3VuZCBvciBpbnZhbGlkLicpO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICAgIC8vIGZldGNoIGEgdmlldyBmcm9tIGEgZGVzaWduIGRvYywgbWFrZSBpdCBiZWhhdmUgbGlrZSBhIGZpbHRlclxuICAgIHZhciB2aWV3TmFtZSA9IHBhcnNlRGVzaWduRG9jRnVuY3Rpb25OYW1lKG9wdHMudmlldyk7XG4gICAgY2hhbmdlc0hhbmRsZXIuZGIuZ2V0KCdfZGVzaWduLycgKyB2aWV3TmFtZVswXSwgZnVuY3Rpb24gKGVyciwgZGRvYykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY2hhbmdlc0hhbmRsZXIuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtzdGF0dXM6ICdjYW5jZWxsZWQnfSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZ2VuZXJhdGVFcnJvckZyb21SZXNwb25zZShlcnIpKTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXBGdW4gPSBkZG9jICYmIGRkb2Mudmlld3MgJiYgZGRvYy52aWV3c1t2aWV3TmFtZVsxXV0gJiZcbiAgICAgICAgZGRvYy52aWV3c1t2aWV3TmFtZVsxXV0ubWFwO1xuICAgICAgaWYgKCFtYXBGdW4pIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNyZWF0ZUVycm9yKE1JU1NJTkdfRE9DLFxuICAgICAgICAgIChkZG9jLnZpZXdzID8gJ21pc3NpbmcganNvbiBrZXk6ICcgKyB2aWV3TmFtZVsxXSA6XG4gICAgICAgICAgICAnbWlzc2luZyBqc29uIGtleTogdmlld3MnKSkpO1xuICAgICAgfVxuICAgICAgb3B0cy5maWx0ZXIgPSBldmFsVmlldyhtYXBGdW4pO1xuICAgICAgY2hhbmdlc0hhbmRsZXIuZG9DaGFuZ2VzKG9wdHMpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9wdHMuc2VsZWN0b3IpIHtcbiAgICBvcHRzLmZpbHRlciA9IGZ1bmN0aW9uIChkb2MpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzU2VsZWN0b3IoZG9jLCBvcHRzLnNlbGVjdG9yKTtcbiAgICB9O1xuICAgIGNoYW5nZXNIYW5kbGVyLmRvQ2hhbmdlcyhvcHRzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBmZXRjaCBhIGZpbHRlciBmcm9tIGEgZGVzaWduIGRvY1xuICAgIHZhciBmaWx0ZXJOYW1lID0gcGFyc2VEZXNpZ25Eb2NGdW5jdGlvbk5hbWUob3B0cy5maWx0ZXIpO1xuICAgIGNoYW5nZXNIYW5kbGVyLmRiLmdldCgnX2Rlc2lnbi8nICsgZmlsdGVyTmFtZVswXSwgZnVuY3Rpb24gKGVyciwgZGRvYykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoY2hhbmdlc0hhbmRsZXIuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHtzdGF0dXM6ICdjYW5jZWxsZWQnfSk7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZ2VuZXJhdGVFcnJvckZyb21SZXNwb25zZShlcnIpKTtcbiAgICAgIH1cbiAgICAgIHZhciBmaWx0ZXJGdW4gPSBkZG9jICYmIGRkb2MuZmlsdGVycyAmJiBkZG9jLmZpbHRlcnNbZmlsdGVyTmFtZVsxXV07XG4gICAgICBpZiAoIWZpbHRlckZ1bikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soY3JlYXRlRXJyb3IoTUlTU0lOR19ET0MsXG4gICAgICAgICAgKChkZG9jICYmIGRkb2MuZmlsdGVycykgPyAnbWlzc2luZyBqc29uIGtleTogJyArIGZpbHRlck5hbWVbMV1cbiAgICAgICAgICAgIDogJ21pc3NpbmcganNvbiBrZXk6IGZpbHRlcnMnKSkpO1xuICAgICAgfVxuICAgICAgb3B0cy5maWx0ZXIgPSBldmFsRmlsdGVyKGZpbHRlckZ1bik7XG4gICAgICBjaGFuZ2VzSGFuZGxlci5kb0NoYW5nZXMob3B0cyk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlDaGFuZ2VzRmlsdGVyUGx1Z2luKFBvdWNoREIpIHtcbiAgUG91Y2hEQi5fY2hhbmdlc0ZpbHRlclBsdWdpbiA9IHtcbiAgICB2YWxpZGF0ZSxcbiAgICBub3JtYWxpemUsXG4gICAgc2hvdWxkRmlsdGVyLFxuICAgIGZpbHRlclxuICB9O1xufVxuXG4vLyBUT0RPOiByZW1vdmUgZnJvbSBwb3VjaGRiLWNvcmUgKGJyZWFraW5nKVxuUG91Y2hEQi5wbHVnaW4oYXBwbHlDaGFuZ2VzRmlsdGVyUGx1Z2luKTtcblxuUG91Y2hEQi52ZXJzaW9uID0gdmVyc2lvbjtcblxuLy9cbi8vIEJsb2JzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGFsbCB2ZXJzaW9ucyBvZiBJbmRleGVkREIsIG5vdGFibHlcbi8vIENocm9tZSA8MzcsIEFuZHJvaWQgPDUgYW5kIChzb21lPykgd2Via2l0LWJhc2VkIGJyb3dzZXJzLlxuLy8gSW4gdGhvc2UgdmVyc2lvbnMsIHN0b3JpbmcgYSBibG9iIHdpbGwgdGhyb3cuXG4vL1xuLy8gRXhhbXBsZSBXZWJraXQgZXJyb3I6XG4vLyA+IERhdGFDbG9uZUVycm9yOiBGYWlsZWQgdG8gc3RvcmUgcmVjb3JkIGluIGFuIElEQk9iamVjdFN0b3JlOiBCbG9iVVJMcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQuXG4vL1xuLy8gVmFyaW91cyBvdGhlciBibG9iIGJ1Z3MgZXhpc3QgaW4gQ2hyb21lIHYzNy00MiAoaW5jbHVzaXZlKS5cbi8vIERldGVjdGluZyB0aGVtIGlzIGV4cGVuc2l2ZSBhbmQgY29uZnVzaW5nIHRvIHVzZXJzLCBhbmQgQ2hyb21lIDM3LTQyXG4vLyBpcyBhdCB2ZXJ5IGxvdyB1c2FnZSB3b3JsZHdpZGUsIHNvIHdlIGRvIGEgaGFja3kgdXNlckFnZW50IGNoZWNrIGluc3RlYWQuXG4vL1xuLy8gY29udGVudC10eXBlIGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQwODEyMFxuLy8gNDA0IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0NzkxNlxuLy8gRmlsZVJlYWRlciBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc4MzZcbi8vXG5mdW5jdGlvbiBjaGVja0Jsb2JTdXBwb3J0KHR4biwgc3RvcmUsIGRvY0lkT3JDcmVhdGVEb2MpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgdmFyIGJsb2IkJDEgPSBjcmVhdGVCbG9iKFsnJ10pO1xuXG4gICAgbGV0IHJlcTtcbiAgICBpZiAodHlwZW9mIGRvY0lkT3JDcmVhdGVEb2MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFN0b3JlIG1heSByZXF1aXJlIGEgc3BlY2lmaWMga2V5IHBhdGgsIGluIHdoaWNoIGNhc2Ugd2UgY2FuJ3Qgc3RvcmUgdGhlXG4gICAgICAvLyBibG9iIGRpcmVjdGx5IGluIHRoZSBzdG9yZS5cbiAgICAgIGNvbnN0IGNyZWF0ZURvYyA9IGRvY0lkT3JDcmVhdGVEb2M7XG4gICAgICBjb25zdCBkb2MgPSBjcmVhdGVEb2MoYmxvYiQkMSk7XG4gICAgICByZXEgPSB0eG4ub2JqZWN0U3RvcmUoc3RvcmUpLnB1dChkb2MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkb2NJZCA9IGRvY0lkT3JDcmVhdGVEb2M7XG4gICAgICByZXEgPSB0eG4ub2JqZWN0U3RvcmUoc3RvcmUpLnB1dChibG9iJCQxLCBkb2NJZCk7XG4gICAgfVxuXG4gICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtYXRjaGVkQ2hyb21lID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgICB2YXIgbWF0Y2hlZEVkZ2UgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvLyk7XG4gICAgICAvLyBNUyBFZGdlIHByZXRlbmRzIHRvIGJlIENocm9tZSA0MjpcbiAgICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaGg4NjkzMDElMjh2PXZzLjg1JTI5LmFzcHhcbiAgICAgIHJlc29sdmUobWF0Y2hlZEVkZ2UgfHwgIW1hdGNoZWRDaHJvbWUgfHxcbiAgICAgICAgcGFyc2VJbnQobWF0Y2hlZENocm9tZVsxXSwgMTApID49IDQzKTtcbiAgICB9O1xuXG4gICAgcmVxLm9uZXJyb3IgPSB0eG4ub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gYWJvcnRzIG5vdyBpdHMgZHVlIHRvIG5vdCBiZWluZyBhYmxlIHRvXG4gICAgICAvLyB3cml0ZSB0byB0aGUgZGF0YWJhc2UsIGxpa2VseSBkdWUgdG8gdGhlIGRpc2sgYmVpbmcgZnVsbFxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgIH07XG4gIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGVycm9yLCBzbyBhc3N1bWUgdW5zdXBwb3J0ZWRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5yZWR1Y2UoZnVuY3Rpb24gKG9iaiwgaXRlbSkge1xuICAgIG9ialtpdGVtXSA9IHRydWU7XG4gICAgcmV0dXJuIG9iajtcbiAgfSwge30pO1xufVxuLy8gTGlzdCBvZiB0b3AgbGV2ZWwgcmVzZXJ2ZWQgd29yZHMgZm9yIGRvY1xudmFyIHJlc2VydmVkV29yZHMgPSB0b09iamVjdChbXG4gICdfaWQnLFxuICAnX3JldicsXG4gICdfYWNjZXNzJyxcbiAgJ19hdHRhY2htZW50cycsXG4gICdfZGVsZXRlZCcsXG4gICdfcmV2aXNpb25zJyxcbiAgJ19yZXZzX2luZm8nLFxuICAnX2NvbmZsaWN0cycsXG4gICdfZGVsZXRlZF9jb25mbGljdHMnLFxuICAnX2xvY2FsX3NlcScsXG4gICdfcmV2X3RyZWUnLFxuICAvLyByZXBsaWNhdGlvbiBkb2N1bWVudHNcbiAgJ19yZXBsaWNhdGlvbl9pZCcsXG4gICdfcmVwbGljYXRpb25fc3RhdGUnLFxuICAnX3JlcGxpY2F0aW9uX3N0YXRlX3RpbWUnLFxuICAnX3JlcGxpY2F0aW9uX3N0YXRlX3JlYXNvbicsXG4gICdfcmVwbGljYXRpb25fc3RhdHMnLFxuICAvLyBTcGVjaWZpYyB0byBDb3VjaGJhc2UgU3luYyBHYXRld2F5XG4gICdfcmVtb3ZlZCdcbl0pO1xuXG4vLyBMaXN0IG9mIHJlc2VydmVkIHdvcmRzIHRoYXQgc2hvdWxkIGVuZCB1cCBpbiB0aGUgZG9jdW1lbnRcbnZhciBkYXRhV29yZHMgPSB0b09iamVjdChbXG4gICdfYWNjZXNzJyxcbiAgJ19hdHRhY2htZW50cycsXG4gIC8vIHJlcGxpY2F0aW9uIGRvY3VtZW50c1xuICAnX3JlcGxpY2F0aW9uX2lkJyxcbiAgJ19yZXBsaWNhdGlvbl9zdGF0ZScsXG4gICdfcmVwbGljYXRpb25fc3RhdGVfdGltZScsXG4gICdfcmVwbGljYXRpb25fc3RhdGVfcmVhc29uJyxcbiAgJ19yZXBsaWNhdGlvbl9zdGF0cydcbl0pO1xuXG5mdW5jdGlvbiBwYXJzZVJldmlzaW9uSW5mbyhyZXYkJDEpIHtcbiAgaWYgKCEvXlxcZCstLy50ZXN0KHJldiQkMSkpIHtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3IoSU5WQUxJRF9SRVYpO1xuICB9XG4gIHZhciBpZHggPSByZXYkJDEuaW5kZXhPZignLScpO1xuICB2YXIgbGVmdCA9IHJldiQkMS5zdWJzdHJpbmcoMCwgaWR4KTtcbiAgdmFyIHJpZ2h0ID0gcmV2JCQxLnN1YnN0cmluZyhpZHggKyAxKTtcbiAgcmV0dXJuIHtcbiAgICBwcmVmaXg6IHBhcnNlSW50KGxlZnQsIDEwKSxcbiAgICBpZDogcmlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZVJldlRyZWVGcm9tUmV2aXNpb25zKHJldmlzaW9ucywgb3B0cykge1xuICB2YXIgcG9zID0gcmV2aXNpb25zLnN0YXJ0IC0gcmV2aXNpb25zLmlkcy5sZW5ndGggKyAxO1xuXG4gIHZhciByZXZpc2lvbklkcyA9IHJldmlzaW9ucy5pZHM7XG4gIHZhciBpZHMgPSBbcmV2aXNpb25JZHNbMF0sIG9wdHMsIFtdXTtcblxuICBmb3IgKHZhciBpID0gMSwgbGVuID0gcmV2aXNpb25JZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZHMgPSBbcmV2aXNpb25JZHNbaV0sIHtzdGF0dXM6ICdtaXNzaW5nJ30sIFtpZHNdXTtcbiAgfVxuXG4gIHJldHVybiBbe1xuICAgIHBvcyxcbiAgICBpZHNcbiAgfV07XG59XG5cbi8vIFByZXByb2Nlc3MgZG9jdW1lbnRzLCBwYXJzZSB0aGVpciByZXZpc2lvbnMsIGFzc2lnbiBhbiBpZCBhbmQgYVxuLy8gcmV2aXNpb24gZm9yIG5ldyB3cml0ZXMgdGhhdCBhcmUgbWlzc2luZyB0aGVtLCBldGNcbmZ1bmN0aW9uIHBhcnNlRG9jKGRvYywgbmV3RWRpdHMsIGRiT3B0cykge1xuICBpZiAoIWRiT3B0cykge1xuICAgIGRiT3B0cyA9IHtcbiAgICAgIGRldGVybWluaXN0aWNfcmV2czogdHJ1ZVxuICAgIH07XG4gIH1cblxuICB2YXIgblJldk51bTtcbiAgdmFyIG5ld1JldklkO1xuICB2YXIgcmV2SW5mbztcbiAgdmFyIG9wdHMgPSB7c3RhdHVzOiAnYXZhaWxhYmxlJ307XG4gIGlmIChkb2MuX2RlbGV0ZWQpIHtcbiAgICBvcHRzLmRlbGV0ZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKG5ld0VkaXRzKSB7XG4gICAgaWYgKCFkb2MuX2lkKSB7XG4gICAgICBkb2MuX2lkID0gdXVpZCgpO1xuICAgIH1cbiAgICBuZXdSZXZJZCA9IHJldihkb2MsIGRiT3B0cy5kZXRlcm1pbmlzdGljX3JldnMpO1xuICAgIGlmIChkb2MuX3Jldikge1xuICAgICAgcmV2SW5mbyA9IHBhcnNlUmV2aXNpb25JbmZvKGRvYy5fcmV2KTtcbiAgICAgIGlmIChyZXZJbmZvLmVycm9yKSB7XG4gICAgICAgIHJldHVybiByZXZJbmZvO1xuICAgICAgfVxuICAgICAgZG9jLl9yZXZfdHJlZSA9IFt7XG4gICAgICAgIHBvczogcmV2SW5mby5wcmVmaXgsXG4gICAgICAgIGlkczogW3JldkluZm8uaWQsIHtzdGF0dXM6ICdtaXNzaW5nJ30sIFtbbmV3UmV2SWQsIG9wdHMsIFtdXV1dXG4gICAgICB9XTtcbiAgICAgIG5SZXZOdW0gPSByZXZJbmZvLnByZWZpeCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvYy5fcmV2X3RyZWUgPSBbe1xuICAgICAgICBwb3M6IDEsXG4gICAgICAgIGlkcyA6IFtuZXdSZXZJZCwgb3B0cywgW11dXG4gICAgICB9XTtcbiAgICAgIG5SZXZOdW0gPSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZG9jLl9yZXZpc2lvbnMpIHtcbiAgICAgIGRvYy5fcmV2X3RyZWUgPSBtYWtlUmV2VHJlZUZyb21SZXZpc2lvbnMoZG9jLl9yZXZpc2lvbnMsIG9wdHMpO1xuICAgICAgblJldk51bSA9IGRvYy5fcmV2aXNpb25zLnN0YXJ0O1xuICAgICAgbmV3UmV2SWQgPSBkb2MuX3JldmlzaW9ucy5pZHNbMF07XG4gICAgfVxuICAgIGlmICghZG9jLl9yZXZfdHJlZSkge1xuICAgICAgcmV2SW5mbyA9IHBhcnNlUmV2aXNpb25JbmZvKGRvYy5fcmV2KTtcbiAgICAgIGlmIChyZXZJbmZvLmVycm9yKSB7XG4gICAgICAgIHJldHVybiByZXZJbmZvO1xuICAgICAgfVxuICAgICAgblJldk51bSA9IHJldkluZm8ucHJlZml4O1xuICAgICAgbmV3UmV2SWQgPSByZXZJbmZvLmlkO1xuICAgICAgZG9jLl9yZXZfdHJlZSA9IFt7XG4gICAgICAgIHBvczogblJldk51bSxcbiAgICAgICAgaWRzOiBbbmV3UmV2SWQsIG9wdHMsIFtdXVxuICAgICAgfV07XG4gICAgfVxuICB9XG5cbiAgaW52YWxpZElkRXJyb3IoZG9jLl9pZCk7XG5cbiAgZG9jLl9yZXYgPSBuUmV2TnVtICsgJy0nICsgbmV3UmV2SWQ7XG5cbiAgdmFyIHJlc3VsdCA9IHttZXRhZGF0YSA6IHt9LCBkYXRhIDoge319O1xuICBmb3IgKHZhciBrZXkgaW4gZG9jKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRvYywga2V5KSkge1xuICAgICAgdmFyIHNwZWNpYWxLZXkgPSBrZXlbMF0gPT09ICdfJztcbiAgICAgIGlmIChzcGVjaWFsS2V5ICYmICFyZXNlcnZlZFdvcmRzW2tleV0pIHtcbiAgICAgICAgdmFyIGVycm9yID0gY3JlYXRlRXJyb3IoRE9DX1ZBTElEQVRJT04sIGtleSk7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBET0NfVkFMSURBVElPTi5tZXNzYWdlICsgJzogJyArIGtleTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGVsc2UgaWYgKHNwZWNpYWxLZXkgJiYgIWRhdGFXb3Jkc1trZXldKSB7XG4gICAgICAgIHJlc3VsdC5tZXRhZGF0YVtrZXkuc2xpY2UoMSldID0gZG9jW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQuZGF0YVtrZXldID0gZG9jW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQmFzZTY0KGRhdGEpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpc0F0b2IoZGF0YSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgZXJyID0gY3JlYXRlRXJyb3IoQkFEX0FSRyxcbiAgICAgICdBdHRhY2htZW50IGlzIG5vdCBhIHZhbGlkIGJhc2U2NCBzdHJpbmcnKTtcbiAgICByZXR1cm4ge2Vycm9yOiBlcnJ9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXByb2Nlc3NTdHJpbmcoYXR0LCBibG9iVHlwZSwgY2FsbGJhY2spIHtcbiAgdmFyIGFzQmluYXJ5ID0gcGFyc2VCYXNlNjQoYXR0LmRhdGEpO1xuICBpZiAoYXNCaW5hcnkuZXJyb3IpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soYXNCaW5hcnkuZXJyb3IpO1xuICB9XG5cbiAgYXR0Lmxlbmd0aCA9IGFzQmluYXJ5Lmxlbmd0aDtcbiAgaWYgKGJsb2JUeXBlID09PSAnYmxvYicpIHtcbiAgICBhdHQuZGF0YSA9IGJpblN0cmluZ1RvQmx1ZmZlcihhc0JpbmFyeSwgYXR0LmNvbnRlbnRfdHlwZSk7XG4gIH0gZWxzZSBpZiAoYmxvYlR5cGUgPT09ICdiYXNlNjQnKSB7XG4gICAgYXR0LmRhdGEgPSB0aGlzQnRvYShhc0JpbmFyeSk7XG4gIH0gZWxzZSB7IC8vIGJpbmFyeVxuICAgIGF0dC5kYXRhID0gYXNCaW5hcnk7XG4gIH1cbiAgYmluYXJ5TWQ1KGFzQmluYXJ5LCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgYXR0LmRpZ2VzdCA9ICdtZDUtJyArIHJlc3VsdDtcbiAgICBjYWxsYmFjaygpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc0Jsb2IoYXR0LCBibG9iVHlwZSwgY2FsbGJhY2spIHtcbiAgYmluYXJ5TWQ1KGF0dC5kYXRhLCBmdW5jdGlvbiAobWQ1KSB7XG4gICAgYXR0LmRpZ2VzdCA9ICdtZDUtJyArIG1kNTtcbiAgICAvLyBzaXplIGlzIGZvciBibG9icyAoYnJvd3NlciksIGxlbmd0aCBpcyBmb3IgYnVmZmVycyAobm9kZSlcbiAgICBhdHQubGVuZ3RoID0gYXR0LmRhdGEuc2l6ZSB8fCBhdHQuZGF0YS5sZW5ndGggfHwgMDtcbiAgICBpZiAoYmxvYlR5cGUgPT09ICdiaW5hcnknKSB7XG4gICAgICBibG9iVG9CaW5hcnlTdHJpbmcoYXR0LmRhdGEsIGZ1bmN0aW9uIChiaW5TdHJpbmcpIHtcbiAgICAgICAgYXR0LmRhdGEgPSBiaW5TdHJpbmc7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGJsb2JUeXBlID09PSAnYmFzZTY0Jykge1xuICAgICAgYmxvYlRvQmFzZTY0KGF0dC5kYXRhLCBmdW5jdGlvbiAoYjY0KSB7XG4gICAgICAgIGF0dC5kYXRhID0gYjY0O1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc0F0dGFjaG1lbnQoYXR0LCBibG9iVHlwZSwgY2FsbGJhY2spIHtcbiAgaWYgKGF0dC5zdHViKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBhdHQuZGF0YSA9PT0gJ3N0cmluZycpIHsgLy8gaW5wdXQgaXMgYSBiYXNlNjQgc3RyaW5nXG4gICAgcHJlcHJvY2Vzc1N0cmluZyhhdHQsIGJsb2JUeXBlLCBjYWxsYmFjayk7XG4gIH0gZWxzZSB7IC8vIGlucHV0IGlzIGEgYmxvYlxuICAgIHByZXByb2Nlc3NCbG9iKGF0dCwgYmxvYlR5cGUsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzQXR0YWNobWVudHMoZG9jSW5mb3MsIGJsb2JUeXBlLCBjYWxsYmFjaykge1xuXG4gIGlmICghZG9jSW5mb3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICB2YXIgZG9jdiA9IDA7XG4gIHZhciBvdmVyYWxsRXJyO1xuXG4gIGRvY0luZm9zLmZvckVhY2goZnVuY3Rpb24gKGRvY0luZm8pIHtcbiAgICB2YXIgYXR0YWNobWVudHMgPSBkb2NJbmZvLmRhdGEgJiYgZG9jSW5mby5kYXRhLl9hdHRhY2htZW50cyA/XG4gICAgICBPYmplY3Qua2V5cyhkb2NJbmZvLmRhdGEuX2F0dGFjaG1lbnRzKSA6IFtdO1xuICAgIHZhciByZWN2ID0gMDtcblxuICAgIGlmICghYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZG9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NlZEF0dGFjaG1lbnQoZXJyKSB7XG4gICAgICBvdmVyYWxsRXJyID0gZXJyO1xuICAgICAgcmVjdisrO1xuICAgICAgaWYgKHJlY3YgPT09IGF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgICBkb25lKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIga2V5IGluIGRvY0luZm8uZGF0YS5fYXR0YWNobWVudHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZG9jSW5mby5kYXRhLl9hdHRhY2htZW50cywga2V5KSkge1xuICAgICAgICBwcmVwcm9jZXNzQXR0YWNobWVudChkb2NJbmZvLmRhdGEuX2F0dGFjaG1lbnRzW2tleV0sXG4gICAgICAgICAgYmxvYlR5cGUsIHByb2Nlc3NlZEF0dGFjaG1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICBkb2N2Kys7XG4gICAgaWYgKGRvY0luZm9zLmxlbmd0aCA9PT0gZG9jdikge1xuICAgICAgaWYgKG92ZXJhbGxFcnIpIHtcbiAgICAgICAgY2FsbGJhY2sob3ZlcmFsbEVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVEb2MocmV2TGltaXQsIHByZXYsIGRvY0luZm8sIHJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgaSwgY2IsIHdyaXRlRG9jLCBuZXdFZGl0cykge1xuXG4gIGlmIChyZXZFeGlzdHMocHJldi5yZXZfdHJlZSwgZG9jSW5mby5tZXRhZGF0YS5yZXYpICYmICFuZXdFZGl0cykge1xuICAgIHJlc3VsdHNbaV0gPSBkb2NJbmZvO1xuICAgIHJldHVybiBjYigpO1xuICB9XG5cbiAgLy8gc29tZXRpbWVzIHRoaXMgaXMgcHJlLWNhbGN1bGF0ZWQuIGhpc3RvcmljYWxseSBub3QgYWx3YXlzXG4gIHZhciBwcmV2aW91c1dpbm5pbmdSZXYgPSBwcmV2Lndpbm5pbmdSZXYgfHwgd2lubmluZ1JldihwcmV2KTtcbiAgdmFyIHByZXZpb3VzbHlEZWxldGVkID0gJ2RlbGV0ZWQnIGluIHByZXYgPyBwcmV2LmRlbGV0ZWQgOlxuICAgIGlzRGVsZXRlZChwcmV2LCBwcmV2aW91c1dpbm5pbmdSZXYpO1xuICB2YXIgZGVsZXRlZCA9ICdkZWxldGVkJyBpbiBkb2NJbmZvLm1ldGFkYXRhID8gZG9jSW5mby5tZXRhZGF0YS5kZWxldGVkIDpcbiAgICBpc0RlbGV0ZWQoZG9jSW5mby5tZXRhZGF0YSk7XG4gIHZhciBpc1Jvb3QgPSAvXjEtLy50ZXN0KGRvY0luZm8ubWV0YWRhdGEucmV2KTtcblxuICBpZiAocHJldmlvdXNseURlbGV0ZWQgJiYgIWRlbGV0ZWQgJiYgbmV3RWRpdHMgJiYgaXNSb290KSB7XG4gICAgdmFyIG5ld0RvYyA9IGRvY0luZm8uZGF0YTtcbiAgICBuZXdEb2MuX3JldiA9IHByZXZpb3VzV2lubmluZ1JldjtcbiAgICBuZXdEb2MuX2lkID0gZG9jSW5mby5tZXRhZGF0YS5pZDtcbiAgICBkb2NJbmZvID0gcGFyc2VEb2MobmV3RG9jLCBuZXdFZGl0cyk7XG4gIH1cblxuICB2YXIgbWVyZ2VkID0gbWVyZ2UocHJldi5yZXZfdHJlZSwgZG9jSW5mby5tZXRhZGF0YS5yZXZfdHJlZVswXSwgcmV2TGltaXQpO1xuXG4gIHZhciBpbkNvbmZsaWN0ID0gbmV3RWRpdHMgJiYgKChcbiAgICAocHJldmlvdXNseURlbGV0ZWQgJiYgZGVsZXRlZCAmJiBtZXJnZWQuY29uZmxpY3RzICE9PSAnbmV3X2xlYWYnKSB8fFxuICAgICghcHJldmlvdXNseURlbGV0ZWQgJiYgbWVyZ2VkLmNvbmZsaWN0cyAhPT0gJ25ld19sZWFmJykgfHxcbiAgICAocHJldmlvdXNseURlbGV0ZWQgJiYgIWRlbGV0ZWQgJiYgbWVyZ2VkLmNvbmZsaWN0cyA9PT0gJ25ld19icmFuY2gnKSkpO1xuXG4gIGlmIChpbkNvbmZsaWN0KSB7XG4gICAgdmFyIGVyciA9IGNyZWF0ZUVycm9yKFJFVl9DT05GTElDVCk7XG4gICAgcmVzdWx0c1tpXSA9IGVycjtcbiAgICByZXR1cm4gY2IoKTtcbiAgfVxuXG4gIHZhciBuZXdSZXYgPSBkb2NJbmZvLm1ldGFkYXRhLnJldjtcbiAgZG9jSW5mby5tZXRhZGF0YS5yZXZfdHJlZSA9IG1lcmdlZC50cmVlO1xuICBkb2NJbmZvLnN0ZW1tZWRSZXZzID0gbWVyZ2VkLnN0ZW1tZWRSZXZzIHx8IFtdO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAocHJldi5yZXZfbWFwKSB7XG4gICAgZG9jSW5mby5tZXRhZGF0YS5yZXZfbWFwID0gcHJldi5yZXZfbWFwOyAvLyB1c2VkIG9ubHkgYnkgbGV2ZWxkYlxuICB9XG5cbiAgLy8gcmVjYWxjdWxhdGVcbiAgdmFyIHdpbm5pbmdSZXYkJDEgPSB3aW5uaW5nUmV2KGRvY0luZm8ubWV0YWRhdGEpO1xuICB2YXIgd2lubmluZ1JldklzRGVsZXRlZCA9IGlzRGVsZXRlZChkb2NJbmZvLm1ldGFkYXRhLCB3aW5uaW5nUmV2JCQxKTtcblxuICAvLyBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBkb2N1bWVudHMgdGhhdCB3ZXJlIGFkZGVkL3JlbW92ZWQsXG4gIC8vIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRvdGFsX3Jvd3MvZG9jX2NvdW50XG4gIHZhciBkZWx0YSA9IChwcmV2aW91c2x5RGVsZXRlZCA9PT0gd2lubmluZ1JldklzRGVsZXRlZCkgPyAwIDpcbiAgICBwcmV2aW91c2x5RGVsZXRlZCA8IHdpbm5pbmdSZXZJc0RlbGV0ZWQgPyAtMSA6IDE7XG5cbiAgdmFyIG5ld1JldklzRGVsZXRlZDtcbiAgaWYgKG5ld1JldiA9PT0gd2lubmluZ1JldiQkMSkge1xuICAgIC8vIGlmIHRoZSBuZXcgcmV2IGlzIHRoZSBzYW1lIGFzIHRoZSB3aW5uaW5nIHJldiwgd2UgY2FuIHJldXNlIHRoYXQgdmFsdWVcbiAgICBuZXdSZXZJc0RlbGV0ZWQgPSB3aW5uaW5nUmV2SXNEZWxldGVkO1xuICB9IGVsc2Uge1xuICAgIC8vIGlmIHRoZXkncmUgbm90IHRoZSBzYW1lLCB0aGVuIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGVcbiAgICBuZXdSZXZJc0RlbGV0ZWQgPSBpc0RlbGV0ZWQoZG9jSW5mby5tZXRhZGF0YSwgbmV3UmV2KTtcbiAgfVxuXG4gIHdyaXRlRG9jKGRvY0luZm8sIHdpbm5pbmdSZXYkJDEsIHdpbm5pbmdSZXZJc0RlbGV0ZWQsIG5ld1JldklzRGVsZXRlZCxcbiAgICB0cnVlLCBkZWx0YSwgaSwgY2IpO1xufVxuXG5mdW5jdGlvbiByb290SXNNaXNzaW5nKGRvY0luZm8pIHtcbiAgcmV0dXJuIGRvY0luZm8ubWV0YWRhdGEucmV2X3RyZWVbMF0uaWRzWzFdLnN0YXR1cyA9PT0gJ21pc3NpbmcnO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRG9jcyhyZXZMaW1pdCwgZG9jSW5mb3MsIGFwaSwgZmV0Y2hlZERvY3MsIHR4LCByZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgd3JpdGVEb2MsIG9wdHMsIG92ZXJhbGxDYWxsYmFjaykge1xuXG4gIC8vIERlZmF1bHQgdG8gMTAwMCBsb2NhbGx5XG4gIHJldkxpbWl0ID0gcmV2TGltaXQgfHwgMTAwMDtcblxuICBmdW5jdGlvbiBpbnNlcnREb2MoZG9jSW5mbywgcmVzdWx0c0lkeCwgY2FsbGJhY2spIHtcbiAgICAvLyBDYW50IGluc2VydCBuZXcgZGVsZXRlZCBkb2N1bWVudHNcbiAgICB2YXIgd2lubmluZ1JldiQkMSA9IHdpbm5pbmdSZXYoZG9jSW5mby5tZXRhZGF0YSk7XG4gICAgdmFyIGRlbGV0ZWQgPSBpc0RlbGV0ZWQoZG9jSW5mby5tZXRhZGF0YSwgd2lubmluZ1JldiQkMSk7XG4gICAgaWYgKCd3YXNfZGVsZXRlJyBpbiBvcHRzICYmIGRlbGV0ZWQpIHtcbiAgICAgIHJlc3VsdHNbcmVzdWx0c0lkeF0gPSBjcmVhdGVFcnJvcihNSVNTSU5HX0RPQywgJ2RlbGV0ZWQnKTtcbiAgICAgIHJldHVybiBjYWxsYmFjaygpO1xuICAgIH1cblxuICAgIC8vIDQ3MTIgLSBkZXRlY3Qgd2hldGhlciBhIG5ldyBkb2N1bWVudCB3YXMgaW5zZXJ0ZWQgd2l0aCBhIF9yZXZcbiAgICB2YXIgaW5Db25mbGljdCA9IG5ld0VkaXRzICYmIHJvb3RJc01pc3NpbmcoZG9jSW5mbyk7XG5cbiAgICBpZiAoaW5Db25mbGljdCkge1xuICAgICAgdmFyIGVyciA9IGNyZWF0ZUVycm9yKFJFVl9DT05GTElDVCk7XG4gICAgICByZXN1bHRzW3Jlc3VsdHNJZHhdID0gZXJyO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gZGVsZXRlZCA/IDAgOiAxO1xuXG4gICAgd3JpdGVEb2MoZG9jSW5mbywgd2lubmluZ1JldiQkMSwgZGVsZXRlZCwgZGVsZXRlZCwgZmFsc2UsXG4gICAgICBkZWx0YSwgcmVzdWx0c0lkeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgdmFyIG5ld0VkaXRzID0gb3B0cy5uZXdfZWRpdHM7XG4gIHZhciBpZHNUb0RvY3MgPSBuZXcgTWFwKCk7XG5cbiAgdmFyIGRvY3NEb25lID0gMDtcbiAgdmFyIGRvY3NUb0RvID0gZG9jSW5mb3MubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIGNoZWNrQWxsRG9jc0RvbmUoKSB7XG4gICAgaWYgKCsrZG9jc0RvbmUgPT09IGRvY3NUb0RvICYmIG92ZXJhbGxDYWxsYmFjaykge1xuICAgICAgb3ZlcmFsbENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZG9jSW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudERvYywgcmVzdWx0c0lkeCkge1xuXG4gICAgaWYgKGN1cnJlbnREb2MuX2lkICYmIGlzTG9jYWxJZChjdXJyZW50RG9jLl9pZCkpIHtcbiAgICAgIHZhciBmdW4gPSBjdXJyZW50RG9jLl9kZWxldGVkID8gJ19yZW1vdmVMb2NhbCcgOiAnX3B1dExvY2FsJztcbiAgICAgIGFwaVtmdW5dKGN1cnJlbnREb2MsIHtjdHg6IHR4fSwgZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICAgIHJlc3VsdHNbcmVzdWx0c0lkeF0gPSBlcnIgfHwgcmVzO1xuICAgICAgICBjaGVja0FsbERvY3NEb25lKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaWQgPSBjdXJyZW50RG9jLm1ldGFkYXRhLmlkO1xuICAgIGlmIChpZHNUb0RvY3MuaGFzKGlkKSkge1xuICAgICAgZG9jc1RvRG8tLTsgLy8gZHVwbGljYXRlXG4gICAgICBpZHNUb0RvY3MuZ2V0KGlkKS5wdXNoKFtjdXJyZW50RG9jLCByZXN1bHRzSWR4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkc1RvRG9jcy5zZXQoaWQsIFtbY3VycmVudERvYywgcmVzdWx0c0lkeF1dKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGluIHRoZSBjYXNlIG9mIG5ld19lZGl0cywgdGhlIHVzZXIgY2FuIHByb3ZpZGUgbXVsdGlwbGUgZG9jc1xuICAvLyB3aXRoIHRoZSBzYW1lIGlkLiB0aGVzZSBuZWVkIHRvIGJlIHByb2Nlc3NlZCBzZXF1ZW50aWFsbHlcbiAgaWRzVG9Eb2NzLmZvckVhY2goZnVuY3Rpb24gKGRvY3MsIGlkKSB7XG4gICAgdmFyIG51bURvbmUgPSAwO1xuXG4gICAgZnVuY3Rpb24gZG9jV3JpdHRlbigpIHtcbiAgICAgIGlmICgrK251bURvbmUgPCBkb2NzLmxlbmd0aCkge1xuICAgICAgICBuZXh0RG9jKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja0FsbERvY3NEb25lKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5leHREb2MoKSB7XG4gICAgICB2YXIgdmFsdWUgPSBkb2NzW251bURvbmVdO1xuICAgICAgdmFyIGN1cnJlbnREb2MgPSB2YWx1ZVswXTtcbiAgICAgIHZhciByZXN1bHRzSWR4ID0gdmFsdWVbMV07XG5cbiAgICAgIGlmIChmZXRjaGVkRG9jcy5oYXMoaWQpKSB7XG4gICAgICAgIHVwZGF0ZURvYyhyZXZMaW1pdCwgZmV0Y2hlZERvY3MuZ2V0KGlkKSwgY3VycmVudERvYywgcmVzdWx0cyxcbiAgICAgICAgICByZXN1bHRzSWR4LCBkb2NXcml0dGVuLCB3cml0ZURvYywgbmV3RWRpdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW5zdXJlIHN0ZW1taW5nIGFwcGxpZXMgdG8gbmV3IHdyaXRlcyBhcyB3ZWxsXG4gICAgICAgIHZhciBtZXJnZWQgPSBtZXJnZShbXSwgY3VycmVudERvYy5tZXRhZGF0YS5yZXZfdHJlZVswXSwgcmV2TGltaXQpO1xuICAgICAgICBjdXJyZW50RG9jLm1ldGFkYXRhLnJldl90cmVlID0gbWVyZ2VkLnRyZWU7XG4gICAgICAgIGN1cnJlbnREb2Muc3RlbW1lZFJldnMgPSBtZXJnZWQuc3RlbW1lZFJldnMgfHwgW107XG4gICAgICAgIGluc2VydERvYyhjdXJyZW50RG9jLCByZXN1bHRzSWR4LCBkb2NXcml0dGVuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV4dERvYygpO1xuICB9KTtcbn1cblxuLy8gSW5kZXhlZERCIHJlcXVpcmVzIGEgdmVyc2lvbmVkIGRhdGFiYXNlIHN0cnVjdHVyZSwgc28gd2UgdXNlIHRoZVxuLy8gdmVyc2lvbiBoZXJlIHRvIG1hbmFnZSBtaWdyYXRpb25zLlxudmFyIEFEQVBURVJfVkVSU0lPTiA9IDU7XG5cbi8vIFRoZSBvYmplY3Qgc3RvcmVzIGNyZWF0ZWQgZm9yIGVhY2ggZGF0YWJhc2Vcbi8vIERPQ19TVE9SRSBzdG9yZXMgdGhlIGRvY3VtZW50IG1ldGEgZGF0YSwgaXRzIHJldmlzaW9uIGhpc3RvcnkgYW5kIHN0YXRlXG4vLyBLZXllZCBieSBkb2N1bWVudCBpZFxudmFyIERPQ19TVE9SRSA9ICdkb2N1bWVudC1zdG9yZSc7XG4vLyBCWV9TRVFfU1RPUkUgc3RvcmVzIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIGEgZG9jdW1lbnQsIGtleWVkIGJ5IGl0c1xuLy8gc2VxdWVuY2UgaWRcbnZhciBCWV9TRVFfU1RPUkUgPSAnYnktc2VxdWVuY2UnO1xuLy8gV2hlcmUgd2Ugc3RvcmUgYXR0YWNobWVudHNcbnZhciBBVFRBQ0hfU1RPUkUgPSAnYXR0YWNoLXN0b3JlJztcbi8vIFdoZXJlIHdlIHN0b3JlIG1hbnktdG8tbWFueSByZWxhdGlvbnNcbi8vIGJldHdlZW4gYXR0YWNobWVudCBkaWdlc3RzIGFuZCBzZXFzXG52YXIgQVRUQUNIX0FORF9TRVFfU1RPUkUgPSAnYXR0YWNoLXNlcS1zdG9yZSc7XG5cbi8vIFdoZXJlIHdlIHN0b3JlIGRhdGFiYXNlLXdpZGUgbWV0YSBkYXRhIGluIGEgc2luZ2xlIHJlY29yZFxuLy8ga2V5ZWQgYnkgaWQ6IE1FVEFfU1RPUkVcbnZhciBNRVRBX1NUT1JFID0gJ21ldGEtc3RvcmUnO1xuLy8gV2hlcmUgd2Ugc3RvcmUgbG9jYWwgZG9jdW1lbnRzXG52YXIgTE9DQUxfU1RPUkUgPSAnbG9jYWwtc3RvcmUnO1xuLy8gV2hlcmUgd2UgZGV0ZWN0IGJsb2Igc3VwcG9ydFxudmFyIERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUgPSAnZGV0ZWN0LWJsb2Itc3VwcG9ydCc7XG5cbmZ1bmN0aW9uIHNhZmVKc29uUGFyc2Uoc3RyKSB7XG4gIC8vIFRoaXMgdHJ5L2NhdGNoIGd1YXJkcyBhZ2FpbnN0IHN0YWNrIG92ZXJmbG93IGVycm9ycy5cbiAgLy8gSlNPTi5wYXJzZSgpIGlzIGZhc3RlciB0aGFuIHZ1dnV6ZWxhLnBhcnNlKCkgYnV0IHZ1dnV6ZWxhXG4gIC8vIGNhbm5vdCBvdmVyZmxvdy5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdnV2dXplbGEucGFyc2Uoc3RyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlSnNvblN0cmluZ2lmeShqc29uKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGpzb24pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdnV2dXplbGEuc3RyaW5naWZ5KGpzb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlkYkVycm9yKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAndW5rbm93bl9lcnJvcic7XG4gICAgaWYgKGV2dC50YXJnZXQgJiYgZXZ0LnRhcmdldC5lcnJvcikge1xuICAgICAgbWVzc2FnZSA9IGV2dC50YXJnZXQuZXJyb3IubmFtZSB8fCBldnQudGFyZ2V0LmVycm9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIGNhbGxiYWNrKGNyZWF0ZUVycm9yKElEQl9FUlJPUiwgbWVzc2FnZSwgZXZ0LnR5cGUpKTtcbiAgfTtcbn1cblxuLy8gVW5mb3J0dW5hdGVseSwgdGhlIG1ldGFkYXRhIGhhcyB0byBiZSBzdHJpbmdpZmllZFxuLy8gd2hlbiBpdCBpcyBwdXQgaW50byB0aGUgZGF0YWJhc2UsIGJlY2F1c2Ugb3RoZXJ3aXNlXG4vLyBJbmRleGVkREIgY2FuIHRocm93IGVycm9ycyBmb3IgZGVlcGx5LW5lc3RlZCBvYmplY3RzLlxuLy8gT3JpZ2luYWxseSB3ZSBqdXN0IHVzZWQgSlNPTi5wYXJzZS9KU09OLnN0cmluZ2lmeTsgbm93XG4vLyB3ZSB1c2UgdGhpcyBjdXN0b20gdnV2dXplbGEgbGlicmFyeSB0aGF0IGF2b2lkcyByZWN1cnNpb24uXG4vLyBJZiB3ZSBjb3VsZCBkbyBpdCBhbGwgb3ZlciBhZ2Fpbiwgd2UnZCBwcm9iYWJseSB1c2UgYVxuLy8gZm9ybWF0IGZvciB0aGUgcmV2aXNpb24gdHJlZXMgb3RoZXIgdGhhbiBKU09OLlxuZnVuY3Rpb24gZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEsIHdpbm5pbmdSZXYsIGRlbGV0ZWQpIHtcbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBzYWZlSnNvblN0cmluZ2lmeShtZXRhZGF0YSksXG4gICAgd2lubmluZ1JldixcbiAgICBkZWxldGVkT3JMb2NhbDogZGVsZXRlZCA/ICcxJyA6ICcwJyxcbiAgICBzZXE6IG1ldGFkYXRhLnNlcSwgLy8gaGlnaGVzdCBzZXEgZm9yIHRoaXMgZG9jXG4gICAgaWQ6IG1ldGFkYXRhLmlkXG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZU1ldGFkYXRhKHN0b3JlZE9iamVjdCkge1xuICBpZiAoIXN0b3JlZE9iamVjdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHZhciBtZXRhZGF0YSA9IHNhZmVKc29uUGFyc2Uoc3RvcmVkT2JqZWN0LmRhdGEpO1xuICBtZXRhZGF0YS53aW5uaW5nUmV2ID0gc3RvcmVkT2JqZWN0Lndpbm5pbmdSZXY7XG4gIG1ldGFkYXRhLmRlbGV0ZWQgPSBzdG9yZWRPYmplY3QuZGVsZXRlZE9yTG9jYWwgPT09ICcxJztcbiAgbWV0YWRhdGEuc2VxID0gc3RvcmVkT2JqZWN0LnNlcTtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG4vLyByZWFkIHRoZSBkb2MgYmFjayBvdXQgZnJvbSB0aGUgZGF0YWJhc2UuIHdlIGRvbid0IHN0b3JlIHRoZVxuLy8gX2lkIG9yIF9yZXYgYmVjYXVzZSB3ZSBhbHJlYWR5IGhhdmUgX2RvY19pZF9yZXYuXG5mdW5jdGlvbiBkZWNvZGVEb2MoZG9jKSB7XG4gIGlmICghZG9jKSB7XG4gICAgcmV0dXJuIGRvYztcbiAgfVxuICB2YXIgaWR4ID0gZG9jLl9kb2NfaWRfcmV2Lmxhc3RJbmRleE9mKCc6Jyk7XG4gIGRvYy5faWQgPSBkb2MuX2RvY19pZF9yZXYuc3Vic3RyaW5nKDAsIGlkeCAtIDEpO1xuICBkb2MuX3JldiA9IGRvYy5fZG9jX2lkX3Jldi5zdWJzdHJpbmcoaWR4ICsgMSk7XG4gIGRlbGV0ZSBkb2MuX2RvY19pZF9yZXY7XG4gIHJldHVybiBkb2M7XG59XG5cbi8vIFJlYWQgYSBibG9iIGZyb20gdGhlIGRhdGFiYXNlLCBlbmNvZGluZyBhcyBuZWNlc3Nhcnlcbi8vIGFuZCB0cmFuc2xhdGluZyBmcm9tIGJhc2U2NCBpZiB0aGUgSURCIGRvZXNuJ3Qgc3VwcG9ydFxuLy8gbmF0aXZlIEJsb2JzXG5mdW5jdGlvbiByZWFkQmxvYkRhdGEoYm9keSwgdHlwZSwgYXNCbG9iLCBjYWxsYmFjaykge1xuICBpZiAoYXNCbG9iKSB7XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICBjYWxsYmFjayhjcmVhdGVCbG9iKFsnJ10sIHt0eXBlfSkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJvZHkgIT09ICdzdHJpbmcnKSB7IC8vIHdlIGhhdmUgYmxvYiBzdXBwb3J0XG4gICAgICBjYWxsYmFjayhib2R5KTtcbiAgICB9IGVsc2UgeyAvLyBubyBibG9iIHN1cHBvcnRcbiAgICAgIGNhbGxiYWNrKGI2NFRvQmx1ZmZlcihib2R5LCB0eXBlKSk7XG4gICAgfVxuICB9IGVsc2UgeyAvLyBhcyBiYXNlNjQgc3RyaW5nXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICBjYWxsYmFjaygnJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSAhPT0gJ3N0cmluZycpIHsgLy8gd2UgaGF2ZSBibG9iIHN1cHBvcnRcbiAgICAgIHJlYWRBc0JpbmFyeVN0cmluZyhib2R5LCBmdW5jdGlvbiAoYmluYXJ5KSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXNCdG9hKGJpbmFyeSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHsgLy8gbm8gYmxvYiBzdXBwb3J0XG4gICAgICBjYWxsYmFjayhib2R5KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmV0Y2hBdHRhY2htZW50c0lmTmVjZXNzYXJ5KGRvYywgb3B0cywgdHhuLCBjYikge1xuICB2YXIgYXR0YWNobWVudHMgPSBPYmplY3Qua2V5cyhkb2MuX2F0dGFjaG1lbnRzIHx8IHt9KTtcbiAgaWYgKCFhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY2IgJiYgY2IoKTtcbiAgfVxuICB2YXIgbnVtRG9uZSA9IDA7XG5cbiAgZnVuY3Rpb24gY2hlY2tEb25lKCkge1xuICAgIGlmICgrK251bURvbmUgPT09IGF0dGFjaG1lbnRzLmxlbmd0aCAmJiBjYikge1xuICAgICAgY2IoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmZXRjaEF0dGFjaG1lbnQoZG9jLCBhdHQpIHtcbiAgICB2YXIgYXR0T2JqID0gZG9jLl9hdHRhY2htZW50c1thdHRdO1xuICAgIHZhciBkaWdlc3QgPSBhdHRPYmouZGlnZXN0O1xuICAgIHZhciByZXEgPSB0eG4ub2JqZWN0U3RvcmUoQVRUQUNIX1NUT1JFKS5nZXQoZGlnZXN0KTtcbiAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGF0dE9iai5ib2R5ID0gZS50YXJnZXQucmVzdWx0LmJvZHk7XG4gICAgICBjaGVja0RvbmUoKTtcbiAgICB9O1xuICB9XG5cbiAgYXR0YWNobWVudHMuZm9yRWFjaChmdW5jdGlvbiAoYXR0KSB7XG4gICAgaWYgKG9wdHMuYXR0YWNobWVudHMgJiYgb3B0cy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgIGZldGNoQXR0YWNobWVudChkb2MsIGF0dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvYy5fYXR0YWNobWVudHNbYXR0XS5zdHViID0gdHJ1ZTtcbiAgICAgIGNoZWNrRG9uZSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8vIElEQi1zcGVjaWZpYyBwb3N0cHJvY2Vzc2luZyBuZWNlc3NhcnkgYmVjYXVzZVxuLy8gd2UgZG9uJ3Qga25vdyB3aGV0aGVyIHdlIHN0b3JlZCBhIHRydWUgQmxvYiBvclxuLy8gYSBiYXNlNjQtZW5jb2RlZCBzdHJpbmcsIGFuZCBpZiBpdCdzIGEgQmxvYiBpdFxuLy8gbmVlZHMgdG8gYmUgcmVhZCBvdXRzaWRlIG9mIHRoZSB0cmFuc2FjdGlvbiBjb250ZXh0XG5mdW5jdGlvbiBwb3N0UHJvY2Vzc0F0dGFjaG1lbnRzKHJlc3VsdHMsIGFzQmxvYikge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0cy5tYXAoZnVuY3Rpb24gKHJvdykge1xuICAgIGlmIChyb3cuZG9jICYmIHJvdy5kb2MuX2F0dGFjaG1lbnRzKSB7XG4gICAgICB2YXIgYXR0TmFtZXMgPSBPYmplY3Qua2V5cyhyb3cuZG9jLl9hdHRhY2htZW50cyk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYXR0TmFtZXMubWFwKGZ1bmN0aW9uIChhdHQpIHtcbiAgICAgICAgdmFyIGF0dE9iaiA9IHJvdy5kb2MuX2F0dGFjaG1lbnRzW2F0dF07XG4gICAgICAgIGlmICghKCdib2R5JyBpbiBhdHRPYmopKSB7IC8vIGFscmVhZHkgcHJvY2Vzc2VkXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBib2R5ID0gYXR0T2JqLmJvZHk7XG4gICAgICAgIHZhciB0eXBlID0gYXR0T2JqLmNvbnRlbnRfdHlwZTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgcmVhZEJsb2JEYXRhKGJvZHksIHR5cGUsIGFzQmxvYiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIHJvdy5kb2MuX2F0dGFjaG1lbnRzW2F0dF0gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICBwaWNrKGF0dE9iaiwgWydkaWdlc3QnLCAnY29udGVudF90eXBlJ10pLFxuICAgICAgICAgICAgICB7ZGF0YX1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBjb21wYWN0UmV2cyhyZXZzLCBkb2NJZCwgdHhuKSB7XG5cbiAgdmFyIHBvc3NpYmx5T3JwaGFuZWREaWdlc3RzID0gW107XG4gIHZhciBzZXFTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShCWV9TRVFfU1RPUkUpO1xuICB2YXIgYXR0U3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoQVRUQUNIX1NUT1JFKTtcbiAgdmFyIGF0dEFuZFNlcVN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEFUVEFDSF9BTkRfU0VRX1NUT1JFKTtcbiAgdmFyIGNvdW50ID0gcmV2cy5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gY2hlY2tEb25lKCkge1xuICAgIGNvdW50LS07XG4gICAgaWYgKCFjb3VudCkgeyAvLyBkb25lIHByb2Nlc3NpbmcgYWxsIHJldnNcbiAgICAgIGRlbGV0ZU9ycGhhbmVkQXR0YWNobWVudHMoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVPcnBoYW5lZEF0dGFjaG1lbnRzKCkge1xuICAgIGlmICghcG9zc2libHlPcnBoYW5lZERpZ2VzdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHBvc3NpYmx5T3JwaGFuZWREaWdlc3RzLmZvckVhY2goZnVuY3Rpb24gKGRpZ2VzdCkge1xuICAgICAgdmFyIGNvdW50UmVxID0gYXR0QW5kU2VxU3RvcmUuaW5kZXgoJ2RpZ2VzdFNlcScpLmNvdW50KFxuICAgICAgICBJREJLZXlSYW5nZS5ib3VuZChcbiAgICAgICAgICBkaWdlc3QgKyAnOjonLCBkaWdlc3QgKyAnOjpcXHVmZmZmJywgZmFsc2UsIGZhbHNlKSk7XG4gICAgICBjb3VudFJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY291bnQgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgICAvLyBvcnBoYW5lZFxuICAgICAgICAgIGF0dFN0b3JlLmRlbGV0ZShkaWdlc3QpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcmV2cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXYkJDEpIHtcbiAgICB2YXIgaW5kZXggPSBzZXFTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKTtcbiAgICB2YXIga2V5ID0gZG9jSWQgKyBcIjo6XCIgKyByZXYkJDE7XG4gICAgaW5kZXguZ2V0S2V5KGtleSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBzZXEgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICBpZiAodHlwZW9mIHNlcSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGNoZWNrRG9uZSgpO1xuICAgICAgfVxuICAgICAgc2VxU3RvcmUuZGVsZXRlKHNlcSk7XG5cbiAgICAgIHZhciBjdXJzb3IgPSBhdHRBbmRTZXFTdG9yZS5pbmRleCgnc2VxJylcbiAgICAgICAgLm9wZW5DdXJzb3IoSURCS2V5UmFuZ2Uub25seShzZXEpKTtcblxuICAgICAgY3Vyc29yLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgY3Vyc29yID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgaWYgKGN1cnNvcikge1xuICAgICAgICAgIHZhciBkaWdlc3QgPSBjdXJzb3IudmFsdWUuZGlnZXN0U2VxLnNwbGl0KCc6OicpWzBdO1xuICAgICAgICAgIHBvc3NpYmx5T3JwaGFuZWREaWdlc3RzLnB1c2goZGlnZXN0KTtcbiAgICAgICAgICBhdHRBbmRTZXFTdG9yZS5kZWxldGUoY3Vyc29yLnByaW1hcnlLZXkpO1xuICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICB9IGVsc2UgeyAvLyBkb25lXG4gICAgICAgICAgY2hlY2tEb25lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9wZW5UcmFuc2FjdGlvblNhZmVseShpZGIsIHN0b3JlcywgbW9kZSkge1xuICB0cnkge1xuICAgIHJldHVybiB7XG4gICAgICB0eG46IGlkYi50cmFuc2FjdGlvbihzdG9yZXMsIG1vZGUpXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiBlcnJcbiAgICB9O1xuICB9XG59XG5cbnZhciBjaGFuZ2VzSGFuZGxlciA9IG5ldyBDaGFuZ2VzKCk7XG5cbmZ1bmN0aW9uIGlkYkJ1bGtEb2NzKGRiT3B0cywgcmVxLCBvcHRzLCBhcGksIGlkYiwgY2FsbGJhY2spIHtcbiAgdmFyIGRvY0luZm9zID0gcmVxLmRvY3M7XG4gIHZhciB0eG47XG4gIHZhciBkb2NTdG9yZTtcbiAgdmFyIGJ5U2VxU3RvcmU7XG4gIHZhciBhdHRhY2hTdG9yZTtcbiAgdmFyIGF0dGFjaEFuZFNlcVN0b3JlO1xuICB2YXIgbWV0YVN0b3JlO1xuICB2YXIgZG9jSW5mb0Vycm9yO1xuICB2YXIgbWV0YURvYztcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZG9jSW5mb3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgZG9jID0gZG9jSW5mb3NbaV07XG4gICAgaWYgKGRvYy5faWQgJiYgaXNMb2NhbElkKGRvYy5faWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZG9jID0gZG9jSW5mb3NbaV0gPSBwYXJzZURvYyhkb2MsIG9wdHMubmV3X2VkaXRzLCBkYk9wdHMpO1xuICAgIGlmIChkb2MuZXJyb3IgJiYgIWRvY0luZm9FcnJvcikge1xuICAgICAgZG9jSW5mb0Vycm9yID0gZG9jO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkb2NJbmZvRXJyb3IpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soZG9jSW5mb0Vycm9yKTtcbiAgfVxuXG4gIHZhciBhbGxEb2NzUHJvY2Vzc2VkID0gZmFsc2U7XG4gIHZhciBkb2NDb3VudERlbHRhID0gMDtcbiAgdmFyIHJlc3VsdHMgPSBuZXcgQXJyYXkoZG9jSW5mb3MubGVuZ3RoKTtcbiAgdmFyIGZldGNoZWREb2NzID0gbmV3IE1hcCgpO1xuICB2YXIgcHJlY29uZGl0aW9uRXJyb3JlZCA9IGZhbHNlO1xuICB2YXIgYmxvYlR5cGUgPSBhcGkuX21ldGEuYmxvYlN1cHBvcnQgPyAnYmxvYicgOiAnYmFzZTY0JztcblxuICBwcmVwcm9jZXNzQXR0YWNobWVudHMoZG9jSW5mb3MsIGJsb2JUeXBlLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICAgIHN0YXJ0VHJhbnNhY3Rpb24oKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gc3RhcnRUcmFuc2FjdGlvbigpIHtcblxuICAgIHZhciBzdG9yZXMgPSBbXG4gICAgICBET0NfU1RPUkUsIEJZX1NFUV9TVE9SRSxcbiAgICAgIEFUVEFDSF9TVE9SRSxcbiAgICAgIExPQ0FMX1NUT1JFLCBBVFRBQ0hfQU5EX1NFUV9TVE9SRSxcbiAgICAgIE1FVEFfU1RPUkVcbiAgICBdO1xuICAgIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBzdG9yZXMsICdyZWFkd3JpdGUnKTtcbiAgICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodHhuUmVzdWx0LmVycm9yKTtcbiAgICB9XG4gICAgdHhuID0gdHhuUmVzdWx0LnR4bjtcbiAgICB0eG4ub25hYm9ydCA9IGlkYkVycm9yKGNhbGxiYWNrKTtcbiAgICB0eG4ub250aW1lb3V0ID0gaWRiRXJyb3IoY2FsbGJhY2spO1xuICAgIHR4bi5vbmNvbXBsZXRlID0gY29tcGxldGU7XG4gICAgZG9jU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoRE9DX1NUT1JFKTtcbiAgICBieVNlcVN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEJZX1NFUV9TVE9SRSk7XG4gICAgYXR0YWNoU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoQVRUQUNIX1NUT1JFKTtcbiAgICBhdHRhY2hBbmRTZXFTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShBVFRBQ0hfQU5EX1NFUV9TVE9SRSk7XG4gICAgbWV0YVN0b3JlID0gdHhuLm9iamVjdFN0b3JlKE1FVEFfU1RPUkUpO1xuXG4gICAgbWV0YVN0b3JlLmdldChNRVRBX1NUT1JFKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgbWV0YURvYyA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIHVwZGF0ZURvY0NvdW50SWZSZWFkeSgpO1xuICAgIH07XG5cbiAgICB2ZXJpZnlBdHRhY2htZW50cyhmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHByZWNvbmRpdGlvbkVycm9yZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICAgIGZldGNoRXhpc3RpbmdEb2NzKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkFsbERvY3NQcm9jZXNzZWQoKSB7XG4gICAgYWxsRG9jc1Byb2Nlc3NlZCA9IHRydWU7XG4gICAgdXBkYXRlRG9jQ291bnRJZlJlYWR5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBpZGJQcm9jZXNzRG9jcygpIHtcbiAgICBwcm9jZXNzRG9jcyhkYk9wdHMucmV2c19saW1pdCwgZG9jSW5mb3MsIGFwaSwgZmV0Y2hlZERvY3MsXG4gICAgICAgICAgICAgICAgdHhuLCByZXN1bHRzLCB3cml0ZURvYywgb3B0cywgb25BbGxEb2NzUHJvY2Vzc2VkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZURvY0NvdW50SWZSZWFkeSgpIHtcbiAgICBpZiAoIW1ldGFEb2MgfHwgIWFsbERvY3NQcm9jZXNzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY2FjaGluZyB0aGUgZG9jQ291bnQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBpbiBhbGxEb2NzKCkgYW5kXG4gICAgLy8gaW5mbygpLCB3aGljaCBpcyB3aHkgd2UgZ28gdG8gYWxsIHRoZSB0cm91YmxlIG9mIGRvaW5nIHRoaXNcbiAgICBtZXRhRG9jLmRvY0NvdW50ICs9IGRvY0NvdW50RGVsdGE7XG4gICAgbWV0YVN0b3JlLnB1dChtZXRhRG9jKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZldGNoRXhpc3RpbmdEb2NzKCkge1xuXG4gICAgaWYgKCFkb2NJbmZvcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbnVtRmV0Y2hlZCA9IDA7XG5cbiAgICBmdW5jdGlvbiBjaGVja0RvbmUoKSB7XG4gICAgICBpZiAoKytudW1GZXRjaGVkID09PSBkb2NJbmZvcy5sZW5ndGgpIHtcbiAgICAgICAgaWRiUHJvY2Vzc0RvY3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkTWV0YWRhdGEoZXZlbnQpIHtcbiAgICAgIHZhciBtZXRhZGF0YSA9IGRlY29kZU1ldGFkYXRhKGV2ZW50LnRhcmdldC5yZXN1bHQpO1xuXG4gICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgZmV0Y2hlZERvY3Muc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7XG4gICAgICB9XG4gICAgICBjaGVja0RvbmUoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZG9jSW5mb3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHZhciBkb2NJbmZvID0gZG9jSW5mb3NbaV07XG4gICAgICBpZiAoZG9jSW5mby5faWQgJiYgaXNMb2NhbElkKGRvY0luZm8uX2lkKSkge1xuICAgICAgICBjaGVja0RvbmUoKTsgLy8gc2tpcCBsb2NhbCBkb2NzXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHJlcSA9IGRvY1N0b3JlLmdldChkb2NJbmZvLm1ldGFkYXRhLmlkKTtcbiAgICAgIHJlcS5vbnN1Y2Nlc3MgPSByZWFkTWV0YWRhdGE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgaWYgKHByZWNvbmRpdGlvbkVycm9yZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjaGFuZ2VzSGFuZGxlci5ub3RpZnkoYXBpLl9tZXRhLm5hbWUpO1xuICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmVyaWZ5QXR0YWNobWVudChkaWdlc3QsIGNhbGxiYWNrKSB7XG5cbiAgICB2YXIgcmVxID0gYXR0YWNoU3RvcmUuZ2V0KGRpZ2VzdCk7XG4gICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIWUudGFyZ2V0LnJlc3VsdCkge1xuICAgICAgICB2YXIgZXJyID0gY3JlYXRlRXJyb3IoTUlTU0lOR19TVFVCLFxuICAgICAgICAgICd1bmtub3duIHN0dWIgYXR0YWNobWVudCB3aXRoIGRpZ2VzdCAnICtcbiAgICAgICAgICBkaWdlc3QpO1xuICAgICAgICBlcnIuc3RhdHVzID0gNDEyO1xuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gdmVyaWZ5QXR0YWNobWVudHMoZmluaXNoKSB7XG5cblxuICAgIHZhciBkaWdlc3RzID0gW107XG4gICAgZG9jSW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoZG9jSW5mbykge1xuICAgICAgaWYgKGRvY0luZm8uZGF0YSAmJiBkb2NJbmZvLmRhdGEuX2F0dGFjaG1lbnRzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGRvY0luZm8uZGF0YS5fYXR0YWNobWVudHMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVuYW1lKSB7XG4gICAgICAgICAgdmFyIGF0dCA9IGRvY0luZm8uZGF0YS5fYXR0YWNobWVudHNbZmlsZW5hbWVdO1xuICAgICAgICAgIGlmIChhdHQuc3R1Yikge1xuICAgICAgICAgICAgZGlnZXN0cy5wdXNoKGF0dC5kaWdlc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFkaWdlc3RzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZpbmlzaCgpO1xuICAgIH1cbiAgICB2YXIgbnVtRG9uZSA9IDA7XG4gICAgdmFyIGVycjtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRG9uZSgpIHtcbiAgICAgIGlmICgrK251bURvbmUgPT09IGRpZ2VzdHMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmlzaChlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgICBkaWdlc3RzLmZvckVhY2goZnVuY3Rpb24gKGRpZ2VzdCkge1xuICAgICAgdmVyaWZ5QXR0YWNobWVudChkaWdlc3QsIGZ1bmN0aW9uIChhdHRFcnIpIHtcbiAgICAgICAgaWYgKGF0dEVyciAmJiAhZXJyKSB7XG4gICAgICAgICAgZXJyID0gYXR0RXJyO1xuICAgICAgICB9XG4gICAgICAgIGNoZWNrRG9uZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZURvYyhkb2NJbmZvLCB3aW5uaW5nUmV2JCQxLCB3aW5uaW5nUmV2SXNEZWxldGVkLCBuZXdSZXZJc0RlbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgIGlzVXBkYXRlLCBkZWx0YSwgcmVzdWx0c0lkeCwgY2FsbGJhY2spIHtcblxuICAgIGRvY0luZm8ubWV0YWRhdGEud2lubmluZ1JldiA9IHdpbm5pbmdSZXYkJDE7XG4gICAgZG9jSW5mby5tZXRhZGF0YS5kZWxldGVkID0gd2lubmluZ1JldklzRGVsZXRlZDtcblxuICAgIHZhciBkb2MgPSBkb2NJbmZvLmRhdGE7XG4gICAgZG9jLl9pZCA9IGRvY0luZm8ubWV0YWRhdGEuaWQ7XG4gICAgZG9jLl9yZXYgPSBkb2NJbmZvLm1ldGFkYXRhLnJldjtcblxuICAgIGlmIChuZXdSZXZJc0RlbGV0ZWQpIHtcbiAgICAgIGRvYy5fZGVsZXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGhhc0F0dGFjaG1lbnRzID0gZG9jLl9hdHRhY2htZW50cyAmJlxuICAgICAgT2JqZWN0LmtleXMoZG9jLl9hdHRhY2htZW50cykubGVuZ3RoO1xuICAgIGlmIChoYXNBdHRhY2htZW50cykge1xuICAgICAgcmV0dXJuIHdyaXRlQXR0YWNobWVudHMoZG9jSW5mbywgd2lubmluZ1JldiQkMSwgd2lubmluZ1JldklzRGVsZXRlZCxcbiAgICAgICAgaXNVcGRhdGUsIHJlc3VsdHNJZHgsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBkb2NDb3VudERlbHRhICs9IGRlbHRhO1xuICAgIHVwZGF0ZURvY0NvdW50SWZSZWFkeSgpO1xuXG4gICAgZmluaXNoRG9jKGRvY0luZm8sIHdpbm5pbmdSZXYkJDEsIHdpbm5pbmdSZXZJc0RlbGV0ZWQsXG4gICAgICBpc1VwZGF0ZSwgcmVzdWx0c0lkeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoRG9jKGRvY0luZm8sIHdpbm5pbmdSZXYkJDEsIHdpbm5pbmdSZXZJc0RlbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgICBpc1VwZGF0ZSwgcmVzdWx0c0lkeCwgY2FsbGJhY2spIHtcblxuICAgIHZhciBkb2MgPSBkb2NJbmZvLmRhdGE7XG4gICAgdmFyIG1ldGFkYXRhID0gZG9jSW5mby5tZXRhZGF0YTtcblxuICAgIGRvYy5fZG9jX2lkX3JldiA9IG1ldGFkYXRhLmlkICsgJzo6JyArIG1ldGFkYXRhLnJldjtcbiAgICBkZWxldGUgZG9jLl9pZDtcbiAgICBkZWxldGUgZG9jLl9yZXY7XG5cbiAgICBmdW5jdGlvbiBhZnRlclB1dERvYyhlKSB7XG4gICAgICB2YXIgcmV2c1RvRGVsZXRlID0gZG9jSW5mby5zdGVtbWVkUmV2cyB8fCBbXTtcblxuICAgICAgaWYgKGlzVXBkYXRlICYmIGFwaS5hdXRvX2NvbXBhY3Rpb24pIHtcbiAgICAgICAgcmV2c1RvRGVsZXRlID0gcmV2c1RvRGVsZXRlLmNvbmNhdChjb21wYWN0VHJlZShkb2NJbmZvLm1ldGFkYXRhKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXZzVG9EZWxldGUgJiYgcmV2c1RvRGVsZXRlLmxlbmd0aCkge1xuICAgICAgICBjb21wYWN0UmV2cyhyZXZzVG9EZWxldGUsIGRvY0luZm8ubWV0YWRhdGEuaWQsIHR4bik7XG4gICAgICB9XG5cbiAgICAgIG1ldGFkYXRhLnNlcSA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIC8vIEN1cnJlbnQgX3JldiBpcyBjYWxjdWxhdGVkIGZyb20gX3Jldl90cmVlIG9uIHJlYWRcbiAgICAgIC8vIGRlbGV0ZSBtZXRhZGF0YS5yZXY7XG4gICAgICB2YXIgbWV0YWRhdGFUb1N0b3JlID0gZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEsIHdpbm5pbmdSZXYkJDEsXG4gICAgICAgIHdpbm5pbmdSZXZJc0RlbGV0ZWQpO1xuICAgICAgdmFyIG1ldGFEYXRhUmVxID0gZG9jU3RvcmUucHV0KG1ldGFkYXRhVG9TdG9yZSk7XG4gICAgICBtZXRhRGF0YVJlcS5vbnN1Y2Nlc3MgPSBhZnRlclB1dE1ldGFkYXRhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFmdGVyUHV0RG9jRXJyb3IoZSkge1xuICAgICAgLy8gQ29uc3RyYWludEVycm9yLCBuZWVkIHRvIHVwZGF0ZSwgbm90IHB1dCAoc2VlICMxNjM4IGZvciBkZXRhaWxzKVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBhdm9pZCB0cmFuc2FjdGlvbiBhYm9ydFxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsgLy8gYXZvaWQgdHJhbnNhY3Rpb24gb25lcnJvclxuICAgICAgdmFyIGluZGV4ID0gYnlTZXFTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKTtcbiAgICAgIHZhciBnZXRLZXlSZXEgPSBpbmRleC5nZXRLZXkoZG9jLl9kb2NfaWRfcmV2KTtcbiAgICAgIGdldEtleVJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgcHV0UmVxID0gYnlTZXFTdG9yZS5wdXQoZG9jLCBlLnRhcmdldC5yZXN1bHQpO1xuICAgICAgICBwdXRSZXEub25zdWNjZXNzID0gYWZ0ZXJQdXREb2M7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFmdGVyUHV0TWV0YWRhdGEoKSB7XG4gICAgICByZXN1bHRzW3Jlc3VsdHNJZHhdID0ge1xuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgaWQ6IG1ldGFkYXRhLmlkLFxuICAgICAgICByZXY6IG1ldGFkYXRhLnJldlxuICAgICAgfTtcbiAgICAgIGZldGNoZWREb2NzLnNldChkb2NJbmZvLm1ldGFkYXRhLmlkLCBkb2NJbmZvLm1ldGFkYXRhKTtcbiAgICAgIGluc2VydEF0dGFjaG1lbnRNYXBwaW5ncyhkb2NJbmZvLCBtZXRhZGF0YS5zZXEsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICB2YXIgcHV0UmVxID0gYnlTZXFTdG9yZS5wdXQoZG9jKTtcblxuICAgIHB1dFJlcS5vbnN1Y2Nlc3MgPSBhZnRlclB1dERvYztcbiAgICBwdXRSZXEub25lcnJvciA9IGFmdGVyUHV0RG9jRXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZUF0dGFjaG1lbnRzKGRvY0luZm8sIHdpbm5pbmdSZXYkJDEsIHdpbm5pbmdSZXZJc0RlbGV0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGRhdGUsIHJlc3VsdHNJZHgsIGNhbGxiYWNrKSB7XG5cblxuICAgIHZhciBkb2MgPSBkb2NJbmZvLmRhdGE7XG5cbiAgICB2YXIgbnVtRG9uZSA9IDA7XG4gICAgdmFyIGF0dGFjaG1lbnRzID0gT2JqZWN0LmtleXMoZG9jLl9hdHRhY2htZW50cyk7XG5cbiAgICBmdW5jdGlvbiBjb2xsZWN0UmVzdWx0cygpIHtcbiAgICAgIGlmIChudW1Eb25lID09PSBhdHRhY2htZW50cy5sZW5ndGgpIHtcbiAgICAgICAgZmluaXNoRG9jKGRvY0luZm8sIHdpbm5pbmdSZXYkJDEsIHdpbm5pbmdSZXZJc0RlbGV0ZWQsXG4gICAgICAgICAgaXNVcGRhdGUsIHJlc3VsdHNJZHgsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhdHRhY2htZW50U2F2ZWQoKSB7XG4gICAgICBudW1Eb25lKys7XG4gICAgICBjb2xsZWN0UmVzdWx0cygpO1xuICAgIH1cblxuICAgIGF0dGFjaG1lbnRzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIGF0dCA9IGRvY0luZm8uZGF0YS5fYXR0YWNobWVudHNba2V5XTtcbiAgICAgIGlmICghYXR0LnN0dWIpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBhdHQuZGF0YTtcbiAgICAgICAgZGVsZXRlIGF0dC5kYXRhO1xuICAgICAgICBhdHQucmV2cG9zID0gcGFyc2VJbnQod2lubmluZ1JldiQkMSwgMTApO1xuICAgICAgICB2YXIgZGlnZXN0ID0gYXR0LmRpZ2VzdDtcbiAgICAgICAgc2F2ZUF0dGFjaG1lbnQoZGlnZXN0LCBkYXRhLCBhdHRhY2htZW50U2F2ZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtRG9uZSsrO1xuICAgICAgICBjb2xsZWN0UmVzdWx0cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gbWFwIHNlcXMgdG8gYXR0YWNobWVudCBkaWdlc3RzLCB3aGljaFxuICAvLyB3ZSB3aWxsIG5lZWQgbGF0ZXIgZHVyaW5nIGNvbXBhY3Rpb25cbiAgZnVuY3Rpb24gaW5zZXJ0QXR0YWNobWVudE1hcHBpbmdzKGRvY0luZm8sIHNlcSwgY2FsbGJhY2spIHtcblxuICAgIHZhciBhdHRzQWRkZWQgPSAwO1xuICAgIHZhciBhdHRzVG9BZGQgPSBPYmplY3Qua2V5cyhkb2NJbmZvLmRhdGEuX2F0dGFjaG1lbnRzIHx8IHt9KTtcblxuICAgIGlmICghYXR0c1RvQWRkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tEb25lKCkge1xuICAgICAgaWYgKCsrYXR0c0FkZGVkID09PSBhdHRzVG9BZGQubGVuZ3RoKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkKGF0dCkge1xuICAgICAgdmFyIGRpZ2VzdCA9IGRvY0luZm8uZGF0YS5fYXR0YWNobWVudHNbYXR0XS5kaWdlc3Q7XG4gICAgICB2YXIgcmVxID0gYXR0YWNoQW5kU2VxU3RvcmUucHV0KHtcbiAgICAgICAgc2VxLFxuICAgICAgICBkaWdlc3RTZXE6IGRpZ2VzdCArICc6OicgKyBzZXFcbiAgICAgIH0pO1xuXG4gICAgICByZXEub25zdWNjZXNzID0gY2hlY2tEb25lO1xuICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAvLyB0aGlzIGNhbGxiYWNrIGlzIGZvciBhIGNvbnN0YWludCBlcnJvciwgd2hpY2ggd2UgaWdub3JlXG4gICAgICAgIC8vIGJlY2F1c2UgdGhpcyBkb2NpZC9yZXYgaGFzIGFscmVhZHkgYmVlbiBhc3NvY2lhdGVkIHdpdGhcbiAgICAgICAgLy8gdGhlIGRpZ2VzdCAoZS5nLiB3aGVuIG5ld19lZGl0cyA9PSBmYWxzZSlcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAvLyBhdm9pZCB0cmFuc2FjdGlvbiBhYm9ydFxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOyAvLyBhdm9pZCB0cmFuc2FjdGlvbiBvbmVycm9yXG4gICAgICAgIGNoZWNrRG9uZSgpO1xuICAgICAgfTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRzVG9BZGQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFkZChhdHRzVG9BZGRbaV0pOyAvLyBkbyBpbiBwYXJhbGxlbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNhdmVBdHRhY2htZW50KGRpZ2VzdCwgZGF0YSwgY2FsbGJhY2spIHtcblxuXG4gICAgdmFyIGdldEtleVJlcSA9IGF0dGFjaFN0b3JlLmNvdW50KGRpZ2VzdCk7XG4gICAgZ2V0S2V5UmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY291bnQgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICBpZiAoY291bnQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7IC8vIGFscmVhZHkgZXhpc3RzXG4gICAgICB9XG4gICAgICB2YXIgbmV3QXR0ID0ge1xuICAgICAgICBkaWdlc3QsXG4gICAgICAgIGJvZHk6IGRhdGFcbiAgICAgIH07XG4gICAgICB2YXIgcHV0UmVxID0gYXR0YWNoU3RvcmUucHV0KG5ld0F0dCk7XG4gICAgICBwdXRSZXEub25zdWNjZXNzID0gY2FsbGJhY2s7XG4gICAgfTtcbiAgfVxufVxuXG4vLyBBYnN0cmFjdGlvbiBvdmVyIElEQkN1cnNvciBhbmQgZ2V0QWxsKCkvZ2V0QWxsS2V5cygpIHRoYXQgYWxsb3dzIHVzIHRvIGJhdGNoIG91ciBvcGVyYXRpb25zXG4vLyB3aGlsZSBmYWxsaW5nIGJhY2sgdG8gYSBub3JtYWwgSURCQ3Vyc29yIG9wZXJhdGlvbiBvbiBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgZ2V0QWxsKCkgb3Jcbi8vIGdldEFsbEtleXMoKS4gVGhpcyBhbGxvd3MgZm9yIGEgbXVjaCBmYXN0ZXIgaW1wbGVtZW50YXRpb24gdGhhbiBqdXN0IHN0cmFpZ2h0LXVwIGN1cnNvcnMsIGJlY2F1c2Vcbi8vIHdlJ3JlIG5vdCBwcm9jZXNzaW5nIGVhY2ggZG9jdW1lbnQgb25lLWF0LWEtdGltZS5cbmZ1bmN0aW9uIHJ1bkJhdGNoZWRDdXJzb3Iob2JqZWN0U3RvcmUsIGtleVJhbmdlLCBkZXNjZW5kaW5nLCBiYXRjaFNpemUsIG9uQmF0Y2gpIHtcblxuICBpZiAoYmF0Y2hTaXplID09PSAtMSkge1xuICAgIGJhdGNoU2l6ZSA9IDEwMDA7XG4gIH1cblxuICAvLyBCYWlsIG91dCBvZiBnZXRBbGwoKS9nZXRBbGxLZXlzKCkgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgLy8gMSkgZWl0aGVyIG1ldGhvZCBpcyB1bnN1cHBvcnRlZCAtIHdlIG5lZWQgYm90aFxuICAvLyAyKSBiYXRjaFNpemUgaXMgMSAobWlnaHQgYXMgd2VsbCB1c2UgSURCQ3Vyc29yKVxuICAvLyAzKSBkZXNjZW5kaW5nIOKAkyBubyByZWFsIHdheSB0byBkbyB0aGlzIHZpYSBnZXRBbGwoKS9nZXRBbGxLZXlzKClcblxuICB2YXIgdXNlR2V0QWxsID0gdHlwZW9mIG9iamVjdFN0b3JlLmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3RTdG9yZS5nZXRBbGxLZXlzID09PSAnZnVuY3Rpb24nICYmXG4gICAgYmF0Y2hTaXplID4gMSAmJiAhZGVzY2VuZGluZztcblxuICB2YXIga2V5c0JhdGNoO1xuICB2YXIgdmFsdWVzQmF0Y2g7XG4gIHZhciBwc2V1ZG9DdXJzb3I7XG5cbiAgZnVuY3Rpb24gb25HZXRBbGwoZSkge1xuICAgIHZhbHVlc0JhdGNoID0gZS50YXJnZXQucmVzdWx0O1xuICAgIGlmIChrZXlzQmF0Y2gpIHtcbiAgICAgIG9uQmF0Y2goa2V5c0JhdGNoLCB2YWx1ZXNCYXRjaCwgcHNldWRvQ3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkdldEFsbEtleXMoZSkge1xuICAgIGtleXNCYXRjaCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICBpZiAodmFsdWVzQmF0Y2gpIHtcbiAgICAgIG9uQmF0Y2goa2V5c0JhdGNoLCB2YWx1ZXNCYXRjaCwgcHNldWRvQ3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb250aW51ZVBzZXVkb0N1cnNvcigpIHtcbiAgICBpZiAoIWtleXNCYXRjaC5sZW5ndGgpIHsgLy8gbm8gbW9yZSByZXN1bHRzXG4gICAgICByZXR1cm4gb25CYXRjaCgpO1xuICAgIH1cbiAgICAvLyBmZXRjaCBuZXh0IGJhdGNoLCBleGNsdXNpdmUgc3RhcnRcbiAgICB2YXIgbGFzdEtleSA9IGtleXNCYXRjaFtrZXlzQmF0Y2gubGVuZ3RoIC0gMV07XG4gICAgdmFyIG5ld0tleVJhbmdlO1xuICAgIGlmIChrZXlSYW5nZSAmJiBrZXlSYW5nZS51cHBlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3S2V5UmFuZ2UgPSBJREJLZXlSYW5nZS5ib3VuZChsYXN0S2V5LCBrZXlSYW5nZS51cHBlcixcbiAgICAgICAgICB0cnVlLCBrZXlSYW5nZS51cHBlck9wZW4pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5uYW1lID09PSBcIkRhdGFFcnJvclwiICYmIGUuY29kZSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvbkJhdGNoKCk7IC8vIHdlJ3JlIGRvbmUsIHN0YXJ0a2V5IGFuZCBlbmRrZXkgYXJlIGVxdWFsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3S2V5UmFuZ2UgPSBJREJLZXlSYW5nZS5sb3dlckJvdW5kKGxhc3RLZXksIHRydWUpO1xuICAgIH1cbiAgICBrZXlSYW5nZSA9IG5ld0tleVJhbmdlO1xuICAgIGtleXNCYXRjaCA9IG51bGw7XG4gICAgdmFsdWVzQmF0Y2ggPSBudWxsO1xuICAgIG9iamVjdFN0b3JlLmdldEFsbChrZXlSYW5nZSwgYmF0Y2hTaXplKS5vbnN1Y2Nlc3MgPSBvbkdldEFsbDtcbiAgICBvYmplY3RTdG9yZS5nZXRBbGxLZXlzKGtleVJhbmdlLCBiYXRjaFNpemUpLm9uc3VjY2VzcyA9IG9uR2V0QWxsS2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ3Vyc29yKGUpIHtcbiAgICB2YXIgY3Vyc29yID0gZS50YXJnZXQucmVzdWx0O1xuICAgIGlmICghY3Vyc29yKSB7IC8vIGRvbmVcbiAgICAgIHJldHVybiBvbkJhdGNoKCk7XG4gICAgfVxuICAgIC8vIHJlZ3VsYXIgSURCQ3Vyc29yIGFjdHMgbGlrZSBhIGJhdGNoIHdoZXJlIGJhdGNoIHNpemUgaXMgYWx3YXlzIDFcbiAgICBvbkJhdGNoKFtjdXJzb3Iua2V5XSwgW2N1cnNvci52YWx1ZV0sIGN1cnNvcik7XG4gIH1cblxuICBpZiAodXNlR2V0QWxsKSB7XG4gICAgcHNldWRvQ3Vyc29yID0ge1wiY29udGludWVcIjogY29udGludWVQc2V1ZG9DdXJzb3J9O1xuICAgIG9iamVjdFN0b3JlLmdldEFsbChrZXlSYW5nZSwgYmF0Y2hTaXplKS5vbnN1Y2Nlc3MgPSBvbkdldEFsbDtcbiAgICBvYmplY3RTdG9yZS5nZXRBbGxLZXlzKGtleVJhbmdlLCBiYXRjaFNpemUpLm9uc3VjY2VzcyA9IG9uR2V0QWxsS2V5cztcbiAgfSBlbHNlIGlmIChkZXNjZW5kaW5nKSB7XG4gICAgb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZSwgJ3ByZXYnKS5vbnN1Y2Nlc3MgPSBvbkN1cnNvcjtcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKGtleVJhbmdlKS5vbnN1Y2Nlc3MgPSBvbkN1cnNvcjtcbiAgfVxufVxuXG4vLyBzaW1wbGUgc2hpbSBmb3Igb2JqZWN0U3RvcmUuZ2V0QWxsKCksIGZhbGxpbmcgYmFjayB0byBJREJDdXJzb3JcbmZ1bmN0aW9uIGdldEFsbChvYmplY3RTdG9yZSwga2V5UmFuZ2UsIG9uU3VjY2Vzcykge1xuICBpZiAodHlwZW9mIG9iamVjdFN0b3JlLmdldEFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIHVzZSBuYXRpdmUgZ2V0QWxsXG4gICAgb2JqZWN0U3RvcmUuZ2V0QWxsKGtleVJhbmdlKS5vbnN1Y2Nlc3MgPSBvblN1Y2Nlc3M7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIGZhbGwgYmFjayB0byBjdXJzb3JzXG4gIHZhciB2YWx1ZXMgPSBbXTtcblxuICBmdW5jdGlvbiBvbkN1cnNvcihlKSB7XG4gICAgdmFyIGN1cnNvciA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICBpZiAoY3Vyc29yKSB7XG4gICAgICB2YWx1ZXMucHVzaChjdXJzb3IudmFsdWUpO1xuICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uU3VjY2Vzcyh7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIHJlc3VsdDogdmFsdWVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9iamVjdFN0b3JlLm9wZW5DdXJzb3Ioa2V5UmFuZ2UpLm9uc3VjY2VzcyA9IG9uQ3Vyc29yO1xufVxuXG5mdW5jdGlvbiBhbGxEb2NzS2V5cyhrZXlzLCBkb2NTdG9yZSwgb25CYXRjaCkge1xuICAvLyBJdCdzIG5vdCBndWFyYW50ZWVkIHRvIGJlIHJldHVybmVkIGluIHJpZ2h0IG9yZGVyXG4gIHZhciB2YWx1ZXNCYXRjaCA9IG5ldyBBcnJheShrZXlzLmxlbmd0aCk7XG4gIHZhciBjb3VudCA9IDA7XG4gIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCBpbmRleCkge1xuICAgIGRvY1N0b3JlLmdldChrZXkpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQpIHtcbiAgICAgICAgdmFsdWVzQmF0Y2hbaW5kZXhdID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlc0JhdGNoW2luZGV4XSA9IHtrZXksIGVycm9yOiAnbm90X2ZvdW5kJ307XG4gICAgICB9XG4gICAgICBjb3VudCsrO1xuICAgICAgaWYgKGNvdW50ID09PSBrZXlzLmxlbmd0aCkge1xuICAgICAgICBvbkJhdGNoKGtleXMsIHZhbHVlc0JhdGNoLCB7fSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVJhbmdlKHN0YXJ0LCBlbmQsIGluY2x1c2l2ZUVuZCwga2V5LCBkZXNjZW5kaW5nKSB7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgaWYgKGRlc2NlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIElEQktleVJhbmdlLmJvdW5kKGVuZCwgc3RhcnQsICFpbmNsdXNpdmVFbmQsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBJREJLZXlSYW5nZS5ib3VuZChzdGFydCwgZW5kLCBmYWxzZSwgIWluY2x1c2l2ZUVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGFydCkge1xuICAgICAgaWYgKGRlc2NlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIElEQktleVJhbmdlLnVwcGVyQm91bmQoc3RhcnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIElEQktleVJhbmdlLmxvd2VyQm91bmQoc3RhcnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW5kKSB7XG4gICAgICBpZiAoZGVzY2VuZGluZykge1xuICAgICAgICByZXR1cm4gSURCS2V5UmFuZ2UubG93ZXJCb3VuZChlbmQsICFpbmNsdXNpdmVFbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIElEQktleVJhbmdlLnVwcGVyQm91bmQoZW5kLCAhaW5jbHVzaXZlRW5kKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSkge1xuICAgICAgcmV0dXJuIElEQktleVJhbmdlLm9ubHkoa2V5KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaWRiQWxsRG9jcyhvcHRzLCBpZGIsIGNhbGxiYWNrKSB7XG4gIHZhciBzdGFydCA9ICdzdGFydGtleScgaW4gb3B0cyA/IG9wdHMuc3RhcnRrZXkgOiBmYWxzZTtcbiAgdmFyIGVuZCA9ICdlbmRrZXknIGluIG9wdHMgPyBvcHRzLmVuZGtleSA6IGZhbHNlO1xuICB2YXIga2V5ID0gJ2tleScgaW4gb3B0cyA/IG9wdHMua2V5IDogZmFsc2U7XG4gIHZhciBrZXlzID0gJ2tleXMnIGluIG9wdHMgPyBvcHRzLmtleXMgOiBmYWxzZTtcbiAgdmFyIHNraXAgPSBvcHRzLnNraXAgfHwgMDtcbiAgdmFyIGxpbWl0ID0gdHlwZW9mIG9wdHMubGltaXQgPT09ICdudW1iZXInID8gb3B0cy5saW1pdCA6IC0xO1xuICB2YXIgaW5jbHVzaXZlRW5kID0gb3B0cy5pbmNsdXNpdmVfZW5kICE9PSBmYWxzZTtcblxuICB2YXIga2V5UmFuZ2UgO1xuICB2YXIga2V5UmFuZ2VFcnJvcjtcbiAgaWYgKCFrZXlzKSB7XG4gICAga2V5UmFuZ2UgPSBjcmVhdGVLZXlSYW5nZShzdGFydCwgZW5kLCBpbmNsdXNpdmVFbmQsIGtleSwgb3B0cy5kZXNjZW5kaW5nKTtcbiAgICBrZXlSYW5nZUVycm9yID0ga2V5UmFuZ2UgJiYga2V5UmFuZ2UuZXJyb3I7XG4gICAgaWYgKGtleVJhbmdlRXJyb3IgJiZcbiAgICAgICEoa2V5UmFuZ2VFcnJvci5uYW1lID09PSBcIkRhdGFFcnJvclwiICYmIGtleVJhbmdlRXJyb3IuY29kZSA9PT0gMCkpIHtcbiAgICAgIC8vIERhdGFFcnJvciB3aXRoIGVycm9yIGNvZGUgMCBpbmRpY2F0ZXMgc3RhcnQgaXMgbGVzcyB0aGFuIGVuZCwgc29cbiAgICAgIC8vIGNhbiBqdXN0IGRvIGFuIGVtcHR5IHF1ZXJ5LiBFbHNlIG5lZWQgdG8gdGhyb3dcbiAgICAgIHJldHVybiBjYWxsYmFjayhjcmVhdGVFcnJvcihJREJfRVJST1IsXG4gICAgICAgIGtleVJhbmdlRXJyb3IubmFtZSwga2V5UmFuZ2VFcnJvci5tZXNzYWdlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHN0b3JlcyA9IFtET0NfU1RPUkUsIEJZX1NFUV9TVE9SRSwgTUVUQV9TVE9SRV07XG5cbiAgaWYgKG9wdHMuYXR0YWNobWVudHMpIHtcbiAgICBzdG9yZXMucHVzaChBVFRBQ0hfU1RPUkUpO1xuICB9XG4gIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBzdG9yZXMsICdyZWFkb25seScpO1xuICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKHR4blJlc3VsdC5lcnJvcik7XG4gIH1cbiAgdmFyIHR4biA9IHR4blJlc3VsdC50eG47XG4gIHR4bi5vbmNvbXBsZXRlID0gb25UeG5Db21wbGV0ZTtcbiAgdHhuLm9uYWJvcnQgPSBpZGJFcnJvcihjYWxsYmFjayk7XG4gIHZhciBkb2NTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShET0NfU1RPUkUpO1xuICB2YXIgc2VxU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoQllfU0VRX1NUT1JFKTtcbiAgdmFyIG1ldGFTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShNRVRBX1NUT1JFKTtcbiAgdmFyIGRvY0lkUmV2SW5kZXggPSBzZXFTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKTtcbiAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgdmFyIGRvY0NvdW50O1xuICB2YXIgdXBkYXRlU2VxO1xuXG4gIG1ldGFTdG9yZS5nZXQoTUVUQV9TVE9SRSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICBkb2NDb3VudCA9IGUudGFyZ2V0LnJlc3VsdC5kb2NDb3VudDtcbiAgfTtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKG9wdHMudXBkYXRlX3NlcSkge1xuICAgIC8vIGdldCBtYXggdXBkYXRlU2VxXG4gICAgc2VxU3RvcmUub3BlbktleUN1cnNvcihudWxsLCAncHJldicpLm9uc3VjY2VzcyA9IGUgPT4ge1xuICAgICAgdmFyIGN1cnNvciA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmIChjdXJzb3IgJiYgY3Vyc29yLmtleSkge1xuICAgICAgICB1cGRhdGVTZXEgPSBjdXJzb3Iua2V5O1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBpZiB0aGUgdXNlciBzcGVjaWZpZXMgaW5jbHVkZV9kb2NzPXRydWUsIHRoZW4gd2UgZG9uJ3RcbiAgLy8gd2FudCB0byBibG9jayB0aGUgbWFpbiBjdXJzb3Igd2hpbGUgd2UncmUgZmV0Y2hpbmcgdGhlIGRvY1xuICBmdW5jdGlvbiBmZXRjaERvY0FzeW5jaHJvbm91c2x5KG1ldGFkYXRhLCByb3csIHdpbm5pbmdSZXYkJDEpIHtcbiAgICB2YXIga2V5ID0gbWV0YWRhdGEuaWQgKyBcIjo6XCIgKyB3aW5uaW5nUmV2JCQxO1xuICAgIGRvY0lkUmV2SW5kZXguZ2V0KGtleSkub25zdWNjZXNzID0gIGZ1bmN0aW9uIG9uR2V0RG9jKGUpIHtcbiAgICAgIHJvdy5kb2MgPSBkZWNvZGVEb2MoZS50YXJnZXQucmVzdWx0KSB8fCB7fTtcbiAgICAgIGlmIChvcHRzLmNvbmZsaWN0cykge1xuICAgICAgICB2YXIgY29uZmxpY3RzID0gY29sbGVjdENvbmZsaWN0cyhtZXRhZGF0YSk7XG4gICAgICAgIGlmIChjb25mbGljdHMubGVuZ3RoKSB7XG4gICAgICAgICAgcm93LmRvYy5fY29uZmxpY3RzID0gY29uZmxpY3RzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmZXRjaEF0dGFjaG1lbnRzSWZOZWNlc3Nhcnkocm93LmRvYywgb3B0cywgdHhuKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWxsRG9jc0lubmVyKHdpbm5pbmdSZXYkJDEsIG1ldGFkYXRhKSB7XG4gICAgdmFyIHJvdyA9IHtcbiAgICAgIGlkOiBtZXRhZGF0YS5pZCxcbiAgICAgIGtleTogbWV0YWRhdGEuaWQsXG4gICAgICB2YWx1ZToge1xuICAgICAgICByZXY6IHdpbm5pbmdSZXYkJDFcbiAgICAgIH1cbiAgICB9O1xuICAgIHZhciBkZWxldGVkID0gbWV0YWRhdGEuZGVsZXRlZDtcbiAgICBpZiAoZGVsZXRlZCkge1xuICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJvdyk7XG4gICAgICAgIC8vIGRlbGV0ZWQgZG9jcyBhcmUgb2theSB3aXRoIFwia2V5c1wiIHJlcXVlc3RzXG4gICAgICAgIHJvdy52YWx1ZS5kZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgcm93LmRvYyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChza2lwLS0gPD0gMCkge1xuICAgICAgcmVzdWx0cy5wdXNoKHJvdyk7XG4gICAgICBpZiAob3B0cy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgICAgZmV0Y2hEb2NBc3luY2hyb25vdXNseShtZXRhZGF0YSwgcm93LCB3aW5uaW5nUmV2JCQxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzQmF0Y2goYmF0Y2hWYWx1ZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYmF0Y2hWYWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gbGltaXQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgYmF0Y2hWYWx1ZSA9IGJhdGNoVmFsdWVzW2ldO1xuICAgICAgaWYgKGJhdGNoVmFsdWUuZXJyb3IgJiYga2V5cykge1xuICAgICAgICAvLyBrZXkgd2FzIG5vdCBmb3VuZCB3aXRoIFwia2V5c1wiIHJlcXVlc3RzXG4gICAgICAgIHJlc3VsdHMucHVzaChiYXRjaFZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgbWV0YWRhdGEgPSBkZWNvZGVNZXRhZGF0YShiYXRjaFZhbHVlKTtcbiAgICAgIHZhciB3aW5uaW5nUmV2JCQxID0gbWV0YWRhdGEud2lubmluZ1JldjtcbiAgICAgIGFsbERvY3NJbm5lcih3aW5uaW5nUmV2JCQxLCBtZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25CYXRjaChiYXRjaEtleXMsIGJhdGNoVmFsdWVzLCBjdXJzb3IpIHtcbiAgICBpZiAoIWN1cnNvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwcm9jZXNzQmF0Y2goYmF0Y2hWYWx1ZXMpO1xuICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IGxpbWl0KSB7XG4gICAgICBjdXJzb3IuY29udGludWUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkdldEFsbChlKSB7XG4gICAgdmFyIHZhbHVlcyA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICBpZiAob3B0cy5kZXNjZW5kaW5nKSB7XG4gICAgICB2YWx1ZXMgPSB2YWx1ZXMucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBwcm9jZXNzQmF0Y2godmFsdWVzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUmVzdWx0c1JlYWR5KCkge1xuICAgIHZhciByZXR1cm5WYWwgPSB7XG4gICAgICB0b3RhbF9yb3dzOiBkb2NDb3VudCxcbiAgICAgIG9mZnNldDogb3B0cy5za2lwLFxuICAgICAgcm93czogcmVzdWx0c1xuICAgIH07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAob3B0cy51cGRhdGVfc2VxICYmIHVwZGF0ZVNlcSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm5WYWwudXBkYXRlX3NlcSA9IHVwZGF0ZVNlcTtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwgcmV0dXJuVmFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVHhuQ29tcGxldGUoKSB7XG4gICAgaWYgKG9wdHMuYXR0YWNobWVudHMpIHtcbiAgICAgIHBvc3RQcm9jZXNzQXR0YWNobWVudHMocmVzdWx0cywgb3B0cy5iaW5hcnkpLnRoZW4ob25SZXN1bHRzUmVhZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvblJlc3VsdHNSZWFkeSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGRvbid0IGJvdGhlciBkb2luZyBhbnkgcmVxdWVzdHMgaWYgc3RhcnQgPiBlbmQgb3IgbGltaXQgPT09IDBcbiAgaWYgKGtleVJhbmdlRXJyb3IgfHwgbGltaXQgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGtleXMpIHtcbiAgICByZXR1cm4gYWxsRG9jc0tleXMoa2V5cywgZG9jU3RvcmUsIG9uQmF0Y2gpO1xuICB9XG4gIGlmIChsaW1pdCA9PT0gLTEpIHsgLy8ganVzdCBmZXRjaCBldmVyeXRoaW5nXG4gICAgcmV0dXJuIGdldEFsbChkb2NTdG9yZSwga2V5UmFuZ2UsIG9uR2V0QWxsKTtcbiAgfVxuICAvLyBlbHNlIGRvIGEgY3Vyc29yXG4gIC8vIGNob29zZSBhIGJhdGNoIHNpemUgYmFzZWQgb24gdGhlIHNraXAsIHNpbmNlIHdlJ2xsIG5lZWQgdG8gc2tpcCB0aGF0IG1hbnlcbiAgcnVuQmF0Y2hlZEN1cnNvcihkb2NTdG9yZSwga2V5UmFuZ2UsIG9wdHMuZGVzY2VuZGluZywgbGltaXQgKyBza2lwLCBvbkJhdGNoKTtcbn1cblxuZnVuY3Rpb24gY291bnREb2NzKHR4biwgY2IpIHtcbiAgdmFyIGluZGV4ID0gdHhuLm9iamVjdFN0b3JlKERPQ19TVE9SRSkuaW5kZXgoJ2RlbGV0ZWRPckxvY2FsJyk7XG4gIGluZGV4LmNvdW50KElEQktleVJhbmdlLm9ubHkoJzAnKSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICBjYihlLnRhcmdldC5yZXN1bHQpO1xuICB9O1xufVxuXG4vLyBUaGlzIHRhc2sgcXVldWUgZW5zdXJlcyB0aGF0IElEQiBvcGVuIGNhbGxzIGFyZSBkb25lIGluIHRoZWlyIG93biB0aWNrXG5cbnZhciBydW5uaW5nID0gZmFsc2U7XG52YXIgcXVldWUgPSBbXTtcblxuZnVuY3Rpb24gdHJ5Q29kZShmdW4sIGVyciwgcmVzLCBQb3VjaERCKSB7XG4gIHRyeSB7XG4gICAgZnVuKGVyciwgcmVzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gU2hvdWxkbid0IGhhcHBlbiwgYnV0IGluIHNvbWUgb2RkIGNhc2VzXG4gICAgLy8gSW5kZXhlZERCIGltcGxlbWVudGF0aW9ucyBtaWdodCB0aHJvdyBhIHN5bmNcbiAgICAvLyBlcnJvciwgaW4gd2hpY2ggY2FzZSB0aGlzIHdpbGwgYXQgbGVhc3QgbG9nIGl0LlxuICAgIFBvdWNoREIuZW1pdCgnZXJyb3InLCBlcnIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5TmV4dCgpIHtcbiAgaWYgKHJ1bm5pbmcgfHwgIXF1ZXVlLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuICBydW5uaW5nID0gdHJ1ZTtcbiAgcXVldWUuc2hpZnQoKSgpO1xufVxuXG5mdW5jdGlvbiBlbnF1ZXVlVGFzayhhY3Rpb24sIGNhbGxiYWNrLCBQb3VjaERCKSB7XG4gIHF1ZXVlLnB1c2goZnVuY3Rpb24gcnVuQWN0aW9uKCkge1xuICAgIGFjdGlvbihmdW5jdGlvbiBydW5DYWxsYmFjayhlcnIsIHJlcykge1xuICAgICAgdHJ5Q29kZShjYWxsYmFjaywgZXJyLCByZXMsIFBvdWNoREIpO1xuICAgICAgcnVubmluZyA9IGZhbHNlO1xuICAgICAgbmV4dFRpY2soZnVuY3Rpb24gcnVuTmV4dCgpIHtcbiAgICAgICAgYXBwbHlOZXh0KFBvdWNoREIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuICBhcHBseU5leHQoKTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlcyhvcHRzLCBhcGksIGRiTmFtZSwgaWRiKSB7XG4gIG9wdHMgPSBjbG9uZShvcHRzKTtcblxuICBpZiAob3B0cy5jb250aW51b3VzKSB7XG4gICAgdmFyIGlkID0gZGJOYW1lICsgJzonICsgdXVpZCgpO1xuICAgIGNoYW5nZXNIYW5kbGVyLmFkZExpc3RlbmVyKGRiTmFtZSwgaWQsIGFwaSwgb3B0cyk7XG4gICAgY2hhbmdlc0hhbmRsZXIubm90aWZ5KGRiTmFtZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjaGFuZ2VzSGFuZGxlci5yZW1vdmVMaXN0ZW5lcihkYk5hbWUsIGlkKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgdmFyIGRvY0lkcyA9IG9wdHMuZG9jX2lkcyAmJiBuZXcgU2V0KG9wdHMuZG9jX2lkcyk7XG5cbiAgb3B0cy5zaW5jZSA9IG9wdHMuc2luY2UgfHwgMDtcbiAgdmFyIGxhc3RTZXEgPSBvcHRzLnNpbmNlO1xuXG4gIHZhciBsaW1pdCA9ICdsaW1pdCcgaW4gb3B0cyA/IG9wdHMubGltaXQgOiAtMTtcbiAgaWYgKGxpbWl0ID09PSAwKSB7XG4gICAgbGltaXQgPSAxOyAvLyBwZXIgQ291Y2hEQiBfY2hhbmdlcyBzcGVjXG4gIH1cblxuICB2YXIgcmVzdWx0cyA9IFtdO1xuICB2YXIgbnVtUmVzdWx0cyA9IDA7XG4gIHZhciBmaWx0ZXIgPSBmaWx0ZXJDaGFuZ2Uob3B0cyk7XG4gIHZhciBkb2NJZHNUb01ldGFkYXRhID0gbmV3IE1hcCgpO1xuXG4gIHZhciB0eG47XG4gIHZhciBieVNlcVN0b3JlO1xuICB2YXIgZG9jU3RvcmU7XG4gIHZhciBkb2NJZFJldkluZGV4O1xuXG4gIGZ1bmN0aW9uIG9uQmF0Y2goYmF0Y2hLZXlzLCBiYXRjaFZhbHVlcywgY3Vyc29yKSB7XG4gICAgaWYgKCFjdXJzb3IgfHwgIWJhdGNoS2V5cy5sZW5ndGgpIHsgLy8gZG9uZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciB3aW5uaW5nRG9jcyA9IG5ldyBBcnJheShiYXRjaEtleXMubGVuZ3RoKTtcbiAgICB2YXIgbWV0YWRhdGFzID0gbmV3IEFycmF5KGJhdGNoS2V5cy5sZW5ndGgpO1xuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc01ldGFkYXRhQW5kV2lubmluZ0RvYyhtZXRhZGF0YSwgd2lubmluZ0RvYykge1xuICAgICAgdmFyIGNoYW5nZSA9IG9wdHMucHJvY2Vzc0NoYW5nZSh3aW5uaW5nRG9jLCBtZXRhZGF0YSwgb3B0cyk7XG4gICAgICBsYXN0U2VxID0gY2hhbmdlLnNlcSA9IG1ldGFkYXRhLnNlcTtcblxuICAgICAgdmFyIGZpbHRlcmVkID0gZmlsdGVyKGNoYW5nZSk7XG4gICAgICBpZiAodHlwZW9mIGZpbHRlcmVkID09PSAnb2JqZWN0JykgeyAvLyBhbnl0aGluZyBidXQgdHJ1ZS9mYWxzZSBpbmRpY2F0ZXMgZXJyb3JcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGZpbHRlcmVkKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmaWx0ZXJlZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9XG4gICAgICBudW1SZXN1bHRzKys7XG4gICAgICBpZiAob3B0cy5yZXR1cm5fZG9jcykge1xuICAgICAgICByZXN1bHRzLnB1c2goY2hhbmdlKTtcbiAgICAgIH1cbiAgICAgIC8vIHByb2Nlc3MgdGhlIGF0dGFjaG1lbnQgaW1tZWRpYXRlbHlcbiAgICAgIC8vIGZvciB0aGUgYmVuZWZpdCBvZiBsaXZlIGxpc3RlbmVyc1xuICAgICAgaWYgKG9wdHMuYXR0YWNobWVudHMgJiYgb3B0cy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgZmV0Y2hBdHRhY2htZW50c0lmTmVjZXNzYXJ5KHdpbm5pbmdEb2MsIG9wdHMsIHR4biwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcG9zdFByb2Nlc3NBdHRhY2htZW50cyhbY2hhbmdlXSwgb3B0cy5iaW5hcnkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICByZXNvbHZlKGNoYW5nZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNoYW5nZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25CYXRjaERvbmUoKSB7XG4gICAgICB2YXIgcHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB3aW5uaW5nRG9jcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAobnVtUmVzdWx0cyA9PT0gbGltaXQpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2lubmluZ0RvYyA9IHdpbm5pbmdEb2NzW2ldO1xuICAgICAgICBpZiAoIXdpbm5pbmdEb2MpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWV0YWRhdGEgPSBtZXRhZGF0YXNbaV07XG4gICAgICAgIHByb21pc2VzLnB1c2gocHJvY2Vzc01ldGFkYXRhQW5kV2lubmluZ0RvYyhtZXRhZGF0YSwgd2lubmluZ0RvYykpO1xuICAgICAgfVxuXG4gICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbiAoY2hhbmdlcykge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gY2hhbmdlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmIChjaGFuZ2VzW2ldKSB7XG4gICAgICAgICAgICBvcHRzLm9uQ2hhbmdlKGNoYW5nZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2gob3B0cy5jb21wbGV0ZSk7XG5cbiAgICAgIGlmIChudW1SZXN1bHRzICE9PSBsaW1pdCkge1xuICAgICAgICBjdXJzb3IuY29udGludWUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGZXRjaCBhbGwgbWV0YWRhdGFzL3dpbm5pbmdkb2NzIGZyb20gdGhpcyBiYXRjaCBpbiBwYXJhbGxlbCwgdGhlbiBwcm9jZXNzXG4gICAgLy8gdGhlbSBhbGwgb25seSBvbmNlIGFsbCBkYXRhIGhhcyBiZWVuIGNvbGxlY3RlZC4gVGhpcyBpcyBkb25lIGluIHBhcmFsbGVsXG4gICAgLy8gYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGRvaW5nIGl0IG9uZS1hdC1hLXRpbWUuXG4gICAgdmFyIG51bURvbmUgPSAwO1xuICAgIGJhdGNoVmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpKSB7XG4gICAgICB2YXIgZG9jID0gZGVjb2RlRG9jKHZhbHVlKTtcbiAgICAgIHZhciBzZXEgPSBiYXRjaEtleXNbaV07XG4gICAgICBmZXRjaFdpbm5pbmdEb2NBbmRNZXRhZGF0YShkb2MsIHNlcSwgZnVuY3Rpb24gKG1ldGFkYXRhLCB3aW5uaW5nRG9jKSB7XG4gICAgICAgIG1ldGFkYXRhc1tpXSA9IG1ldGFkYXRhO1xuICAgICAgICB3aW5uaW5nRG9jc1tpXSA9IHdpbm5pbmdEb2M7XG4gICAgICAgIGlmICgrK251bURvbmUgPT09IGJhdGNoS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICBvbkJhdGNoRG9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uR2V0TWV0YWRhdGEoZG9jLCBzZXEsIG1ldGFkYXRhLCBjYikge1xuICAgIGlmIChtZXRhZGF0YS5zZXEgIT09IHNlcSkge1xuICAgICAgLy8gc29tZSBvdGhlciBzZXEgaXMgbGF0ZXJcbiAgICAgIHJldHVybiBjYigpO1xuICAgIH1cblxuICAgIGlmIChtZXRhZGF0YS53aW5uaW5nUmV2ID09PSBkb2MuX3Jldikge1xuICAgICAgLy8gdGhpcyBpcyB0aGUgd2lubmluZyBkb2NcbiAgICAgIHJldHVybiBjYihtZXRhZGF0YSwgZG9jKTtcbiAgICB9XG5cbiAgICAvLyBmZXRjaCB3aW5uaW5nIGRvYyBpbiBzZXBhcmF0ZSByZXF1ZXN0XG4gICAgdmFyIGRvY0lkUmV2ID0gZG9jLl9pZCArICc6OicgKyBtZXRhZGF0YS53aW5uaW5nUmV2O1xuICAgIHZhciByZXEgPSBkb2NJZFJldkluZGV4LmdldChkb2NJZFJldik7XG4gICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBjYihtZXRhZGF0YSwgZGVjb2RlRG9jKGUudGFyZ2V0LnJlc3VsdCkpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmZXRjaFdpbm5pbmdEb2NBbmRNZXRhZGF0YShkb2MsIHNlcSwgY2IpIHtcbiAgICBpZiAoZG9jSWRzICYmICFkb2NJZHMuaGFzKGRvYy5faWQpKSB7XG4gICAgICByZXR1cm4gY2IoKTtcbiAgICB9XG5cbiAgICB2YXIgbWV0YWRhdGEgPSBkb2NJZHNUb01ldGFkYXRhLmdldChkb2MuX2lkKTtcbiAgICBpZiAobWV0YWRhdGEpIHsgLy8gY2FjaGVkXG4gICAgICByZXR1cm4gb25HZXRNZXRhZGF0YShkb2MsIHNlcSwgbWV0YWRhdGEsIGNiKTtcbiAgICB9XG4gICAgLy8gbWV0YWRhdGEgbm90IGNhY2hlZCwgaGF2ZSB0byBnbyBmZXRjaCBpdFxuICAgIGRvY1N0b3JlLmdldChkb2MuX2lkKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgbWV0YWRhdGEgPSBkZWNvZGVNZXRhZGF0YShlLnRhcmdldC5yZXN1bHQpO1xuICAgICAgZG9jSWRzVG9NZXRhZGF0YS5zZXQoZG9jLl9pZCwgbWV0YWRhdGEpO1xuICAgICAgb25HZXRNZXRhZGF0YShkb2MsIHNlcSwgbWV0YWRhdGEsIGNiKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gZmluaXNoKCkge1xuICAgIG9wdHMuY29tcGxldGUobnVsbCwge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGxhc3Rfc2VxOiBsYXN0U2VxXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblR4bkNvbXBsZXRlKCkge1xuICAgIGlmICghb3B0cy5jb250aW51b3VzICYmIG9wdHMuYXR0YWNobWVudHMpIHtcbiAgICAgIC8vIGNhbm5vdCBndWFyYW50ZWUgdGhhdCBwb3N0UHJvY2Vzc2luZyB3YXMgYWxyZWFkeSBkb25lLFxuICAgICAgLy8gc28gZG8gaXQgYWdhaW5cbiAgICAgIHBvc3RQcm9jZXNzQXR0YWNobWVudHMocmVzdWx0cykudGhlbihmaW5pc2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5pc2goKTtcbiAgICB9XG4gIH1cblxuICB2YXIgb2JqZWN0U3RvcmVzID0gW0RPQ19TVE9SRSwgQllfU0VRX1NUT1JFXTtcbiAgaWYgKG9wdHMuYXR0YWNobWVudHMpIHtcbiAgICBvYmplY3RTdG9yZXMucHVzaChBVFRBQ0hfU1RPUkUpO1xuICB9XG4gIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBvYmplY3RTdG9yZXMsICdyZWFkb25seScpO1xuICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgcmV0dXJuIG9wdHMuY29tcGxldGUodHhuUmVzdWx0LmVycm9yKTtcbiAgfVxuICB0eG4gPSB0eG5SZXN1bHQudHhuO1xuICB0eG4ub25hYm9ydCA9IGlkYkVycm9yKG9wdHMuY29tcGxldGUpO1xuICB0eG4ub25jb21wbGV0ZSA9IG9uVHhuQ29tcGxldGU7XG5cbiAgYnlTZXFTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShCWV9TRVFfU1RPUkUpO1xuICBkb2NTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShET0NfU1RPUkUpO1xuICBkb2NJZFJldkluZGV4ID0gYnlTZXFTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKTtcblxuICB2YXIga2V5UmFuZ2UgPSAob3B0cy5zaW5jZSAmJiAhb3B0cy5kZXNjZW5kaW5nKSA/XG4gICAgSURCS2V5UmFuZ2UubG93ZXJCb3VuZChvcHRzLnNpbmNlLCB0cnVlKSA6IG51bGw7XG5cbiAgcnVuQmF0Y2hlZEN1cnNvcihieVNlcVN0b3JlLCBrZXlSYW5nZSwgb3B0cy5kZXNjZW5kaW5nLCBsaW1pdCwgb25CYXRjaCk7XG59XG5cbnZhciBjYWNoZWREQnMgPSBuZXcgTWFwKCk7XG52YXIgYmxvYlN1cHBvcnRQcm9taXNlO1xudmFyIG9wZW5SZXFMaXN0ID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBJZGJQb3VjaChvcHRzLCBjYWxsYmFjaykge1xuICB2YXIgYXBpID0gdGhpcztcblxuICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAodGhpc0NhbGxiYWNrKSB7XG4gICAgaW5pdChhcGksIG9wdHMsIHRoaXNDYWxsYmFjayk7XG4gIH0sIGNhbGxiYWNrLCBhcGkuY29uc3RydWN0b3IpO1xufVxuXG5mdW5jdGlvbiBpbml0KGFwaSwgb3B0cywgY2FsbGJhY2spIHtcblxuICB2YXIgZGJOYW1lID0gb3B0cy5uYW1lO1xuXG4gIHZhciBpZGIgPSBudWxsO1xuICB2YXIgaWRiR2xvYmFsRmFpbHVyZUVycm9yID0gbnVsbDtcbiAgYXBpLl9tZXRhID0gbnVsbDtcblxuICBmdW5jdGlvbiBlbnJpY2hDYWxsYmFja0Vycm9yKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlcnJvciwgcmVzdWx0KSB7XG4gICAgICBpZiAoZXJyb3IgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhZXJyb3IucmVhc29uKSB7XG4gICAgICAgIGlmIChpZGJHbG9iYWxGYWlsdXJlRXJyb3IpIHtcbiAgICAgICAgICBlcnJvci5yZWFzb24gPSBpZGJHbG9iYWxGYWlsdXJlRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGEgZnJlc2ggbmV3IGRhdGFiYXNlXG4gIGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYShkYikge1xuICAgIHZhciBkb2NTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKERPQ19TVE9SRSwge2tleVBhdGggOiAnaWQnfSk7XG4gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoQllfU0VRX1NUT1JFLCB7YXV0b0luY3JlbWVudDogdHJ1ZX0pXG4gICAgICAuY3JlYXRlSW5kZXgoJ19kb2NfaWRfcmV2JywgJ19kb2NfaWRfcmV2Jywge3VuaXF1ZTogdHJ1ZX0pO1xuICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKEFUVEFDSF9TVE9SRSwge2tleVBhdGg6ICdkaWdlc3QnfSk7XG4gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoTUVUQV9TVE9SRSwge2tleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IGZhbHNlfSk7XG4gICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUoREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSk7XG5cbiAgICAvLyBhZGRlZCBpbiB2MlxuICAgIGRvY1N0b3JlLmNyZWF0ZUluZGV4KCdkZWxldGVkT3JMb2NhbCcsICdkZWxldGVkT3JMb2NhbCcsIHt1bmlxdWUgOiBmYWxzZX0pO1xuXG4gICAgLy8gYWRkZWQgaW4gdjNcbiAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShMT0NBTF9TVE9SRSwge2tleVBhdGg6ICdfaWQnfSk7XG5cbiAgICAvLyBhZGRlZCBpbiB2NFxuICAgIHZhciBhdHRBbmRTZXFTdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKEFUVEFDSF9BTkRfU0VRX1NUT1JFLFxuICAgICAge2F1dG9JbmNyZW1lbnQ6IHRydWV9KTtcbiAgICBhdHRBbmRTZXFTdG9yZS5jcmVhdGVJbmRleCgnc2VxJywgJ3NlcScpO1xuICAgIGF0dEFuZFNlcVN0b3JlLmNyZWF0ZUluZGV4KCdkaWdlc3RTZXEnLCAnZGlnZXN0U2VxJywge3VuaXF1ZTogdHJ1ZX0pO1xuICB9XG5cbiAgLy8gbWlncmF0aW9uIHRvIHZlcnNpb24gMlxuICAvLyB1bmZvcnR1bmF0ZWx5IFwiZGVsZXRlZE9yTG9jYWxcIiBpcyBhIG1pc25vbWVyIG5vdyB0aGF0IHdlIG5vIGxvbmdlclxuICAvLyBzdG9yZSBsb2NhbCBkb2NzIGluIHRoZSBtYWluIGRvYy1zdG9yZSwgYnV0IHdoYWRkeWFnb25uYWRvXG4gIGZ1bmN0aW9uIGFkZERlbGV0ZWRPckxvY2FsSW5kZXgodHhuLCBjYWxsYmFjaykge1xuICAgIHZhciBkb2NTdG9yZSA9IHR4bi5vYmplY3RTdG9yZShET0NfU1RPUkUpO1xuICAgIGRvY1N0b3JlLmNyZWF0ZUluZGV4KCdkZWxldGVkT3JMb2NhbCcsICdkZWxldGVkT3JMb2NhbCcsIHt1bmlxdWUgOiBmYWxzZX0pO1xuXG4gICAgZG9jU3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgIHZhciBtZXRhZGF0YSA9IGN1cnNvci52YWx1ZTtcbiAgICAgICAgdmFyIGRlbGV0ZWQgPSBpc0RlbGV0ZWQobWV0YWRhdGEpO1xuICAgICAgICBtZXRhZGF0YS5kZWxldGVkT3JMb2NhbCA9IGRlbGV0ZWQgPyBcIjFcIiA6IFwiMFwiO1xuICAgICAgICBkb2NTdG9yZS5wdXQobWV0YWRhdGEpO1xuICAgICAgICBjdXJzb3IuY29udGludWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIG1pZ3JhdGlvbiB0byB2ZXJzaW9uIDMgKHBhcnQgMSlcbiAgZnVuY3Rpb24gY3JlYXRlTG9jYWxTdG9yZVNjaGVtYShkYikge1xuICAgIGRiLmNyZWF0ZU9iamVjdFN0b3JlKExPQ0FMX1NUT1JFLCB7a2V5UGF0aDogJ19pZCd9KVxuICAgICAgLmNyZWF0ZUluZGV4KCdfZG9jX2lkX3JldicsICdfZG9jX2lkX3JldicsIHt1bmlxdWU6IHRydWV9KTtcbiAgfVxuXG4gIC8vIG1pZ3JhdGlvbiB0byB2ZXJzaW9uIDMgKHBhcnQgMilcbiAgZnVuY3Rpb24gbWlncmF0ZUxvY2FsU3RvcmUodHhuLCBjYikge1xuICAgIHZhciBsb2NhbFN0b3JlID0gdHhuLm9iamVjdFN0b3JlKExPQ0FMX1NUT1JFKTtcbiAgICB2YXIgZG9jU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoRE9DX1NUT1JFKTtcbiAgICB2YXIgc2VxU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoQllfU0VRX1NUT1JFKTtcblxuICAgIHZhciBjdXJzb3IgPSBkb2NTdG9yZS5vcGVuQ3Vyc29yKCk7XG4gICAgY3Vyc29yLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIGN1cnNvciA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBpZiAoY3Vyc29yKSB7XG4gICAgICAgIHZhciBtZXRhZGF0YSA9IGN1cnNvci52YWx1ZTtcbiAgICAgICAgdmFyIGRvY0lkID0gbWV0YWRhdGEuaWQ7XG4gICAgICAgIHZhciBsb2NhbCA9IGlzTG9jYWxJZChkb2NJZCk7XG4gICAgICAgIHZhciByZXYkJDEgPSB3aW5uaW5nUmV2KG1ldGFkYXRhKTtcbiAgICAgICAgaWYgKGxvY2FsKSB7XG4gICAgICAgICAgdmFyIGRvY0lkUmV2ID0gZG9jSWQgKyBcIjo6XCIgKyByZXYkJDE7XG4gICAgICAgICAgLy8gcmVtb3ZlIGFsbCBzZXEgZW50cmllc1xuICAgICAgICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRvY0lkXG4gICAgICAgICAgdmFyIHN0YXJ0ID0gZG9jSWQgKyBcIjo6XCI7XG4gICAgICAgICAgdmFyIGVuZCA9IGRvY0lkICsgXCI6On5cIjtcbiAgICAgICAgICB2YXIgaW5kZXggPSBzZXFTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKTtcbiAgICAgICAgICB2YXIgcmFuZ2UgPSBJREJLZXlSYW5nZS5ib3VuZChzdGFydCwgZW5kLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgIHZhciBzZXFDdXJzb3IgPSBpbmRleC5vcGVuQ3Vyc29yKHJhbmdlKTtcbiAgICAgICAgICBzZXFDdXJzb3Iub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHNlcUN1cnNvciA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgIGlmICghc2VxQ3Vyc29yKSB7XG4gICAgICAgICAgICAgIC8vIGRvbmVcbiAgICAgICAgICAgICAgZG9jU3RvcmUuZGVsZXRlKGN1cnNvci5wcmltYXJ5S2V5KTtcbiAgICAgICAgICAgICAgY3Vyc29yLmNvbnRpbnVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgZGF0YSA9IHNlcUN1cnNvci52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGRhdGEuX2RvY19pZF9yZXYgPT09IGRvY0lkUmV2KSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yZS5wdXQoZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2VxU3RvcmUuZGVsZXRlKHNlcUN1cnNvci5wcmltYXJ5S2V5KTtcbiAgICAgICAgICAgICAgc2VxQ3Vyc29yLmNvbnRpbnVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJzb3IuY29udGludWUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjYikge1xuICAgICAgICBjYigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBtaWdyYXRpb24gdG8gdmVyc2lvbiA0IChwYXJ0IDEpXG4gIGZ1bmN0aW9uIGFkZEF0dGFjaEFuZFNlcVN0b3JlKGRiKSB7XG4gICAgdmFyIGF0dEFuZFNlcVN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoQVRUQUNIX0FORF9TRVFfU1RPUkUsXG4gICAgICB7YXV0b0luY3JlbWVudDogdHJ1ZX0pO1xuICAgIGF0dEFuZFNlcVN0b3JlLmNyZWF0ZUluZGV4KCdzZXEnLCAnc2VxJyk7XG4gICAgYXR0QW5kU2VxU3RvcmUuY3JlYXRlSW5kZXgoJ2RpZ2VzdFNlcScsICdkaWdlc3RTZXEnLCB7dW5pcXVlOiB0cnVlfSk7XG4gIH1cblxuICAvLyBtaWdyYXRpb24gdG8gdmVyc2lvbiA0IChwYXJ0IDIpXG4gIGZ1bmN0aW9uIG1pZ3JhdGVBdHRzQW5kU2Vxcyh0eG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlcVN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEJZX1NFUV9TVE9SRSk7XG4gICAgdmFyIGF0dFN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEFUVEFDSF9TVE9SRSk7XG4gICAgdmFyIGF0dEFuZFNlcVN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEFUVEFDSF9BTkRfU0VRX1NUT1JFKTtcblxuICAgIC8vIG5lZWQgdG8gYWN0dWFsbHkgcG9wdWxhdGUgdGhlIHRhYmxlLiB0aGlzIGlzIHRoZSBleHBlbnNpdmUgcGFydCxcbiAgICAvLyBzbyBhcyBhbiBvcHRpbWl6YXRpb24sIGNoZWNrIGZpcnN0IHRoYXQgdGhpcyBkYXRhYmFzZSBldmVuXG4gICAgLy8gY29udGFpbnMgYXR0YWNobWVudHNcbiAgICB2YXIgcmVxID0gYXR0U3RvcmUuY291bnQoKTtcbiAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBjb3VudCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmICghY291bnQpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7IC8vIGRvbmVcbiAgICAgIH1cblxuICAgICAgc2VxU3RvcmUub3BlbkN1cnNvcigpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBjdXJzb3IgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7IC8vIGRvbmVcbiAgICAgICAgfVxuICAgICAgICB2YXIgZG9jID0gY3Vyc29yLnZhbHVlO1xuICAgICAgICB2YXIgc2VxID0gY3Vyc29yLnByaW1hcnlLZXk7XG4gICAgICAgIHZhciBhdHRzID0gT2JqZWN0LmtleXMoZG9jLl9hdHRhY2htZW50cyB8fCB7fSk7XG4gICAgICAgIHZhciBkaWdlc3RNYXAgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhdHRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGF0dCA9IGRvYy5fYXR0YWNobWVudHNbYXR0c1tqXV07XG4gICAgICAgICAgZGlnZXN0TWFwW2F0dC5kaWdlc3RdID0gdHJ1ZTsgLy8gdW5pcSBkaWdlc3RzLCBqdXN0IGluIGNhc2VcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGlnZXN0cyA9IE9iamVjdC5rZXlzKGRpZ2VzdE1hcCk7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBkaWdlc3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgdmFyIGRpZ2VzdCA9IGRpZ2VzdHNbal07XG4gICAgICAgICAgYXR0QW5kU2VxU3RvcmUucHV0KHtcbiAgICAgICAgICAgIHNlcSxcbiAgICAgICAgICAgIGRpZ2VzdFNlcTogZGlnZXN0ICsgJzo6JyArIHNlcVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG5cbiAgLy8gbWlncmF0aW9uIHRvIHZlcnNpb24gNVxuICAvLyBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gb24tdGhlLWZseSBtaWdyYXRpb24gb2YgbWV0YWRhdGEsXG4gIC8vIHRoaXMgYnJpbmdzIHRoZSBkb2Mtc3RvcmUgdG8gaXRzIG1vZGVybiBmb3JtOlxuICAvLyAtIG1ldGFkYXRhLndpbm5pbmdyZXZcbiAgLy8gLSBtZXRhZGF0YS5zZXFcbiAgLy8gLSBzdHJpbmdpZnkgdGhlIG1ldGFkYXRhIHdoZW4gc3RvcmluZyBpdFxuICBmdW5jdGlvbiBtaWdyYXRlTWV0YWRhdGEodHhuKSB7XG5cbiAgICBmdW5jdGlvbiBkZWNvZGVNZXRhZGF0YUNvbXBhdChzdG9yZWRPYmplY3QpIHtcbiAgICAgIGlmICghc3RvcmVkT2JqZWN0LmRhdGEpIHtcbiAgICAgICAgLy8gb2xkIGZvcm1hdCwgd2hlbiB3ZSBkaWRuJ3Qgc3RvcmUgaXQgc3RyaW5naWZpZWRcbiAgICAgICAgc3RvcmVkT2JqZWN0LmRlbGV0ZWQgPSBzdG9yZWRPYmplY3QuZGVsZXRlZE9yTG9jYWwgPT09ICcxJztcbiAgICAgICAgcmV0dXJuIHN0b3JlZE9iamVjdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWNvZGVNZXRhZGF0YShzdG9yZWRPYmplY3QpO1xuICAgIH1cblxuICAgIC8vIGVuc3VyZSB0aGF0IGV2ZXJ5IG1ldGFkYXRhIGhhcyBhIHdpbm5pbmdSZXYgYW5kIHNlcSxcbiAgICAvLyB3aGljaCB3YXMgcHJldmlvdXNseSBjcmVhdGVkIG9uLXRoZS1mbHkgYnV0IGJldHRlciB0byBtaWdyYXRlXG4gICAgdmFyIGJ5U2VxU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoQllfU0VRX1NUT1JFKTtcbiAgICB2YXIgZG9jU3RvcmUgPSB0eG4ub2JqZWN0U3RvcmUoRE9DX1NUT1JFKTtcbiAgICB2YXIgY3Vyc29yID0gZG9jU3RvcmUub3BlbkN1cnNvcigpO1xuICAgIGN1cnNvci5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGN1cnNvciA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgIHJldHVybjsgLy8gZG9uZVxuICAgICAgfVxuICAgICAgdmFyIG1ldGFkYXRhID0gZGVjb2RlTWV0YWRhdGFDb21wYXQoY3Vyc29yLnZhbHVlKTtcblxuICAgICAgbWV0YWRhdGEud2lubmluZ1JldiA9IG1ldGFkYXRhLndpbm5pbmdSZXYgfHxcbiAgICAgICAgd2lubmluZ1JldihtZXRhZGF0YSk7XG5cbiAgICAgIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGFTZXEoKSB7XG4gICAgICAgIC8vIG1ldGFkYXRhLnNlcSB3YXMgYWRkZWQgcG9zdC0zLjIuMCwgc28gaWYgaXQncyBtaXNzaW5nLFxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGZldGNoIGl0IG1hbnVhbGx5XG4gICAgICAgIHZhciBzdGFydCA9IG1ldGFkYXRhLmlkICsgJzo6JztcbiAgICAgICAgdmFyIGVuZCA9IG1ldGFkYXRhLmlkICsgJzo6XFx1ZmZmZic7XG4gICAgICAgIHZhciByZXEgPSBieVNlcVN0b3JlLmluZGV4KCdfZG9jX2lkX3JldicpLm9wZW5DdXJzb3IoXG4gICAgICAgICAgSURCS2V5UmFuZ2UuYm91bmQoc3RhcnQsIGVuZCkpO1xuXG4gICAgICAgIHZhciBtZXRhZGF0YVNlcSA9IDA7XG4gICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIHZhciBjdXJzb3IgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgICAgaWYgKCFjdXJzb3IpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhLnNlcSA9IG1ldGFkYXRhU2VxO1xuICAgICAgICAgICAgcmV0dXJuIG9uR2V0TWV0YWRhdGFTZXEoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIHNlcSA9IGN1cnNvci5wcmltYXJ5S2V5O1xuICAgICAgICAgIGlmIChzZXEgPiBtZXRhZGF0YVNlcSkge1xuICAgICAgICAgICAgbWV0YWRhdGFTZXEgPSBzZXE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvbkdldE1ldGFkYXRhU2VxKCkge1xuICAgICAgICB2YXIgbWV0YWRhdGFUb1N0b3JlID0gZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEsXG4gICAgICAgICAgbWV0YWRhdGEud2lubmluZ1JldiwgbWV0YWRhdGEuZGVsZXRlZCk7XG5cbiAgICAgICAgdmFyIHJlcSA9IGRvY1N0b3JlLnB1dChtZXRhZGF0YVRvU3RvcmUpO1xuICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1cnNvci5jb250aW51ZSgpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0YWRhdGEuc2VxKSB7XG4gICAgICAgIHJldHVybiBvbkdldE1ldGFkYXRhU2VxKCk7XG4gICAgICB9XG5cbiAgICAgIGZldGNoTWV0YWRhdGFTZXEoKTtcbiAgICB9O1xuXG4gIH1cblxuICBhcGkuX3JlbW90ZSA9IGZhbHNlO1xuICBhcGkudHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2lkYic7XG4gIH07XG5cbiAgYXBpLl9pZCA9IHRvUHJvbWlzZShmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayhudWxsLCBhcGkuX21ldGEuaW5zdGFuY2VJZCk7XG4gIH0pO1xuXG4gIGFwaS5fYnVsa0RvY3MgPSBmdW5jdGlvbiBpZGJfYnVsa0RvY3MocmVxLCByZXFPcHRzLCBjYWxsYmFjaykge1xuICAgIGlkYkJ1bGtEb2NzKG9wdHMsIHJlcSwgcmVxT3B0cywgYXBpLCBpZGIsIGVucmljaENhbGxiYWNrRXJyb3IoY2FsbGJhY2spKTtcbiAgfTtcblxuICAvLyBGaXJzdCB3ZSBsb29rIHVwIHRoZSBtZXRhZGF0YSBpbiB0aGUgaWRzIGRhdGFiYXNlLCB0aGVuIHdlIGZldGNoIHRoZVxuICAvLyBjdXJyZW50IHJldmlzaW9uKHMpIGZyb20gdGhlIGJ5IHNlcXVlbmNlIHN0b3JlXG4gIGFwaS5fZ2V0ID0gZnVuY3Rpb24gaWRiX2dldChpZCwgb3B0cywgY2FsbGJhY2spIHtcbiAgICB2YXIgZG9jO1xuICAgIHZhciBtZXRhZGF0YTtcbiAgICB2YXIgZXJyO1xuICAgIHZhciB0eG4gPSBvcHRzLmN0eDtcbiAgICBpZiAoIXR4bikge1xuICAgICAgdmFyIHR4blJlc3VsdCA9IG9wZW5UcmFuc2FjdGlvblNhZmVseShpZGIsXG4gICAgICAgIFtET0NfU1RPUkUsIEJZX1NFUV9TVE9SRSwgQVRUQUNIX1NUT1JFXSwgJ3JlYWRvbmx5Jyk7XG4gICAgICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh0eG5SZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdHhuID0gdHhuUmVzdWx0LnR4bjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5pc2goKSB7XG4gICAgICBjYWxsYmFjayhlcnIsIHtkb2MsIG1ldGFkYXRhLCBjdHg6IHR4bn0pO1xuICAgIH1cblxuICAgIHR4bi5vYmplY3RTdG9yZShET0NfU1RPUkUpLmdldChpZCkub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIG1ldGFkYXRhID0gZGVjb2RlTWV0YWRhdGEoZS50YXJnZXQucmVzdWx0KTtcbiAgICAgIC8vIHdlIGNhbiBkZXRlcm1pbmUgdGhlIHJlc3VsdCBoZXJlIGlmOlxuICAgICAgLy8gMS4gdGhlcmUgaXMgbm8gc3VjaCBkb2N1bWVudFxuICAgICAgLy8gMi4gdGhlIGRvY3VtZW50IGlzIGRlbGV0ZWQgYW5kIHdlIGRvbid0IGFzayBhYm91dCBzcGVjaWZpYyByZXZcbiAgICAgIC8vIFdoZW4gd2UgYXNrIHdpdGggb3B0cy5yZXYgd2UgZXhwZWN0IHRoZSBhbnN3ZXIgdG8gYmUgZWl0aGVyXG4gICAgICAvLyBkb2MgKHBvc3NpYmx5IHdpdGggX2RlbGV0ZWQ9dHJ1ZSkgb3IgbWlzc2luZyBlcnJvclxuICAgICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgICBlcnIgPSBjcmVhdGVFcnJvcihNSVNTSU5HX0RPQywgJ21pc3NpbmcnKTtcbiAgICAgICAgcmV0dXJuIGZpbmlzaCgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmV2JCQxO1xuICAgICAgaWYgKCFvcHRzLnJldikge1xuICAgICAgICByZXYkJDEgPSBtZXRhZGF0YS53aW5uaW5nUmV2O1xuICAgICAgICB2YXIgZGVsZXRlZCA9IGlzRGVsZXRlZChtZXRhZGF0YSk7XG4gICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgZXJyID0gY3JlYXRlRXJyb3IoTUlTU0lOR19ET0MsIFwiZGVsZXRlZFwiKTtcbiAgICAgICAgICByZXR1cm4gZmluaXNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldiQkMSA9IG9wdHMubGF0ZXN0ID8gbGF0ZXN0KG9wdHMucmV2LCBtZXRhZGF0YSkgOiBvcHRzLnJldjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9iamVjdFN0b3JlID0gdHhuLm9iamVjdFN0b3JlKEJZX1NFUV9TVE9SRSk7XG4gICAgICB2YXIga2V5ID0gbWV0YWRhdGEuaWQgKyAnOjonICsgcmV2JCQxO1xuXG4gICAgICBvYmplY3RTdG9yZS5pbmRleCgnX2RvY19pZF9yZXYnKS5nZXQoa2V5KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBkb2MgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgICBkb2MgPSBkZWNvZGVEb2MoZG9jKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRvYykge1xuICAgICAgICAgIGVyciA9IGNyZWF0ZUVycm9yKE1JU1NJTkdfRE9DLCAnbWlzc2luZycpO1xuICAgICAgICAgIHJldHVybiBmaW5pc2goKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5pc2goKTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcblxuICBhcGkuX2dldEF0dGFjaG1lbnQgPSBmdW5jdGlvbiAoZG9jSWQsIGF0dGFjaElkLCBhdHRhY2htZW50LCBvcHRzLCBjYWxsYmFjaykge1xuICAgIHZhciB0eG47XG4gICAgaWYgKG9wdHMuY3R4KSB7XG4gICAgICB0eG4gPSBvcHRzLmN0eDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHR4blJlc3VsdCA9IG9wZW5UcmFuc2FjdGlvblNhZmVseShpZGIsXG4gICAgICAgIFtET0NfU1RPUkUsIEJZX1NFUV9TVE9SRSwgQVRUQUNIX1NUT1JFXSwgJ3JlYWRvbmx5Jyk7XG4gICAgICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh0eG5SZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdHhuID0gdHhuUmVzdWx0LnR4bjtcbiAgICB9XG4gICAgdmFyIGRpZ2VzdCA9IGF0dGFjaG1lbnQuZGlnZXN0O1xuICAgIHZhciB0eXBlID0gYXR0YWNobWVudC5jb250ZW50X3R5cGU7XG5cbiAgICB0eG4ub2JqZWN0U3RvcmUoQVRUQUNIX1NUT1JFKS5nZXQoZGlnZXN0KS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGJvZHkgPSBlLnRhcmdldC5yZXN1bHQuYm9keTtcbiAgICAgIHJlYWRCbG9iRGF0YShib2R5LCB0eXBlLCBvcHRzLmJpbmFyeSwgZnVuY3Rpb24gKGJsb2JEYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGJsb2JEYXRhKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgYXBpLl9pbmZvID0gZnVuY3Rpb24gaWRiX2luZm8oY2FsbGJhY2spIHtcbiAgICB2YXIgdXBkYXRlU2VxO1xuICAgIHZhciBkb2NDb3VudDtcblxuICAgIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBbTUVUQV9TVE9SRSwgQllfU0VRX1NUT1JFXSwgJ3JlYWRvbmx5Jyk7XG4gICAgaWYgKHR4blJlc3VsdC5lcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHR4blJlc3VsdC5lcnJvcik7XG4gICAgfVxuICAgIHZhciB0eG4gPSB0eG5SZXN1bHQudHhuO1xuICAgIHR4bi5vYmplY3RTdG9yZShNRVRBX1NUT1JFKS5nZXQoTUVUQV9TVE9SRSkub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRvY0NvdW50ID0gZS50YXJnZXQucmVzdWx0LmRvY0NvdW50O1xuICAgIH07XG4gICAgdHhuLm9iamVjdFN0b3JlKEJZX1NFUV9TVE9SRSkub3BlbktleUN1cnNvcihudWxsLCAncHJldicpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgY3Vyc29yID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgdXBkYXRlU2VxID0gY3Vyc29yID8gY3Vyc29yLmtleSA6IDA7XG4gICAgfTtcblxuICAgIHR4bi5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2sobnVsbCwge1xuICAgICAgICBkb2NfY291bnQ6IGRvY0NvdW50LFxuICAgICAgICB1cGRhdGVfc2VxOiB1cGRhdGVTZXEsXG4gICAgICAgIC8vIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgaWRiX2F0dGFjaG1lbnRfZm9ybWF0OiAoYXBpLl9tZXRhLmJsb2JTdXBwb3J0ID8gJ2JpbmFyeScgOiAnYmFzZTY0JylcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgYXBpLl9hbGxEb2NzID0gZnVuY3Rpb24gaWRiX2FsbERvY3Mob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZGJBbGxEb2NzKG9wdHMsIGlkYiwgZW5yaWNoQ2FsbGJhY2tFcnJvcihjYWxsYmFjaykpO1xuICB9O1xuXG4gIGFwaS5fY2hhbmdlcyA9IGZ1bmN0aW9uIGlkYkNoYW5nZXMob3B0cykge1xuICAgIHJldHVybiBjaGFuZ2VzKG9wdHMsIGFwaSwgZGJOYW1lLCBpZGIpO1xuICB9O1xuXG4gIGFwaS5fY2xvc2UgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0luZGV4ZWREQi9JREJEYXRhYmFzZSNjbG9zZVxuICAgIC8vIFwiUmV0dXJucyBpbW1lZGlhdGVseSBhbmQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIGluIGEgc2VwYXJhdGUgdGhyZWFkLi4uXCJcbiAgICBpZGIuY2xvc2UoKTtcbiAgICBjYWNoZWREQnMuZGVsZXRlKGRiTmFtZSk7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcblxuICBhcGkuX2dldFJldmlzaW9uVHJlZSA9IGZ1bmN0aW9uIChkb2NJZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgdHhuUmVzdWx0ID0gb3BlblRyYW5zYWN0aW9uU2FmZWx5KGlkYiwgW0RPQ19TVE9SRV0sICdyZWFkb25seScpO1xuICAgIGlmICh0eG5SZXN1bHQuZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh0eG5SZXN1bHQuZXJyb3IpO1xuICAgIH1cbiAgICB2YXIgdHhuID0gdHhuUmVzdWx0LnR4bjtcbiAgICB2YXIgcmVxID0gdHhuLm9iamVjdFN0b3JlKERPQ19TVE9SRSkuZ2V0KGRvY0lkKTtcbiAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgZG9jID0gZGVjb2RlTWV0YWRhdGEoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XG4gICAgICBpZiAoIWRvYykge1xuICAgICAgICBjYWxsYmFjayhjcmVhdGVFcnJvcihNSVNTSU5HX0RPQykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZG9jLnJldl90cmVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyByZXZpc2lvbnMgb2YgZG9jdW1lbnQgZG9jSWRcbiAgLy8gd2hpY2ggYXJlIGxpc3RlZCBpbiByZXZzIGFuZCBzZXRzIHRoaXMgZG9jdW1lbnRcbiAgLy8gcmV2aXNpb24gdG8gdG8gcmV2X3RyZWVcbiAgYXBpLl9kb0NvbXBhY3Rpb24gPSBmdW5jdGlvbiAoZG9jSWQsIHJldnMsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHN0b3JlcyA9IFtcbiAgICAgIERPQ19TVE9SRSxcbiAgICAgIEJZX1NFUV9TVE9SRSxcbiAgICAgIEFUVEFDSF9TVE9SRSxcbiAgICAgIEFUVEFDSF9BTkRfU0VRX1NUT1JFXG4gICAgXTtcbiAgICB2YXIgdHhuUmVzdWx0ID0gb3BlblRyYW5zYWN0aW9uU2FmZWx5KGlkYiwgc3RvcmVzLCAncmVhZHdyaXRlJyk7XG4gICAgaWYgKHR4blJlc3VsdC5lcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHR4blJlc3VsdC5lcnJvcik7XG4gICAgfVxuICAgIHZhciB0eG4gPSB0eG5SZXN1bHQudHhuO1xuXG4gICAgdmFyIGRvY1N0b3JlID0gdHhuLm9iamVjdFN0b3JlKERPQ19TVE9SRSk7XG5cbiAgICBkb2NTdG9yZS5nZXQoZG9jSWQpLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG1ldGFkYXRhID0gZGVjb2RlTWV0YWRhdGEoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XG4gICAgICB0cmF2ZXJzZVJldlRyZWUobWV0YWRhdGEucmV2X3RyZWUsIGZ1bmN0aW9uIChpc0xlYWYsIHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldkhhc2gsIGN0eCwgb3B0cykge1xuICAgICAgICB2YXIgcmV2JCQxID0gcG9zICsgJy0nICsgcmV2SGFzaDtcbiAgICAgICAgaWYgKHJldnMuaW5kZXhPZihyZXYkJDEpICE9PSAtMSkge1xuICAgICAgICAgIG9wdHMuc3RhdHVzID0gJ21pc3NpbmcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGNvbXBhY3RSZXZzKHJldnMsIGRvY0lkLCB0eG4pO1xuICAgICAgdmFyIHdpbm5pbmdSZXYkJDEgPSBtZXRhZGF0YS53aW5uaW5nUmV2O1xuICAgICAgdmFyIGRlbGV0ZWQgPSBtZXRhZGF0YS5kZWxldGVkO1xuICAgICAgdHhuLm9iamVjdFN0b3JlKERPQ19TVE9SRSkucHV0KFxuICAgICAgICBlbmNvZGVNZXRhZGF0YShtZXRhZGF0YSwgd2lubmluZ1JldiQkMSwgZGVsZXRlZCkpO1xuICAgIH07XG4gICAgdHhuLm9uYWJvcnQgPSBpZGJFcnJvcihjYWxsYmFjayk7XG4gICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH07XG5cblxuICBhcGkuX2dldExvY2FsID0gZnVuY3Rpb24gKGlkLCBjYWxsYmFjaykge1xuICAgIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBbTE9DQUxfU1RPUkVdLCAncmVhZG9ubHknKTtcbiAgICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodHhuUmVzdWx0LmVycm9yKTtcbiAgICB9XG4gICAgdmFyIHR4ID0gdHhuUmVzdWx0LnR4bjtcbiAgICB2YXIgcmVxID0gdHgub2JqZWN0U3RvcmUoTE9DQUxfU1RPUkUpLmdldChpZCk7XG5cbiAgICByZXEub25lcnJvciA9IGlkYkVycm9yKGNhbGxiYWNrKTtcbiAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBkb2MgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICBpZiAoIWRvYykge1xuICAgICAgICBjYWxsYmFjayhjcmVhdGVFcnJvcihNSVNTSU5HX0RPQykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGRvY1snX2RvY19pZF9yZXYnXTsgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZG9jKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIGFwaS5fcHV0TG9jYWwgPSBmdW5jdGlvbiAoZG9jLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgICAgb3B0cyA9IHt9O1xuICAgIH1cbiAgICBkZWxldGUgZG9jLl9yZXZpc2lvbnM7IC8vIGlnbm9yZSB0aGlzLCB0cnVzdCB0aGUgcmV2XG4gICAgdmFyIG9sZFJldiA9IGRvYy5fcmV2O1xuICAgIHZhciBpZCA9IGRvYy5faWQ7XG4gICAgaWYgKCFvbGRSZXYpIHtcbiAgICAgIGRvYy5fcmV2ID0gJzAtMSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvYy5fcmV2ID0gJzAtJyArIChwYXJzZUludChvbGRSZXYuc3BsaXQoJy0nKVsxXSwgMTApICsgMSk7XG4gICAgfVxuXG4gICAgdmFyIHR4ID0gb3B0cy5jdHg7XG4gICAgdmFyIHJldDtcbiAgICBpZiAoIXR4KSB7XG4gICAgICB2YXIgdHhuUmVzdWx0ID0gb3BlblRyYW5zYWN0aW9uU2FmZWx5KGlkYiwgW0xPQ0FMX1NUT1JFXSwgJ3JlYWR3cml0ZScpO1xuICAgICAgaWYgKHR4blJlc3VsdC5lcnJvcikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodHhuUmVzdWx0LmVycm9yKTtcbiAgICAgIH1cbiAgICAgIHR4ID0gdHhuUmVzdWx0LnR4bjtcbiAgICAgIHR4Lm9uZXJyb3IgPSBpZGJFcnJvcihjYWxsYmFjayk7XG4gICAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmV0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgb1N0b3JlID0gdHgub2JqZWN0U3RvcmUoTE9DQUxfU1RPUkUpO1xuICAgIHZhciByZXE7XG4gICAgaWYgKG9sZFJldikge1xuICAgICAgcmVxID0gb1N0b3JlLmdldChpZCk7XG4gICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIG9sZERvYyA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgaWYgKCFvbGREb2MgfHwgb2xkRG9jLl9yZXYgIT09IG9sZFJldikge1xuICAgICAgICAgIGNhbGxiYWNrKGNyZWF0ZUVycm9yKFJFVl9DT05GTElDVCkpO1xuICAgICAgICB9IGVsc2UgeyAvLyB1cGRhdGVcbiAgICAgICAgICB2YXIgcmVxID0gb1N0b3JlLnB1dChkb2MpO1xuICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXQgPSB7b2s6IHRydWUsIGlkOiBkb2MuX2lkLCByZXY6IGRvYy5fcmV2fTtcbiAgICAgICAgICAgIGlmIChvcHRzLmN0eCkgeyAvLyByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7IC8vIG5ldyBkb2NcbiAgICAgIHJlcSA9IG9TdG9yZS5hZGQoZG9jKTtcbiAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgLy8gY29uc3RyYWludCBlcnJvciwgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgY2FsbGJhY2soY3JlYXRlRXJyb3IoUkVWX0NPTkZMSUNUKSk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gYXZvaWQgdHJhbnNhY3Rpb24gYWJvcnRcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsgLy8gYXZvaWQgdHJhbnNhY3Rpb24gb25lcnJvclxuICAgICAgfTtcbiAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldCA9IHtvazogdHJ1ZSwgaWQ6IGRvYy5faWQsIHJldjogZG9jLl9yZXZ9O1xuICAgICAgICBpZiAob3B0cy5jdHgpIHsgLy8gcmV0dXJuIGltbWVkaWF0ZWx5XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmV0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgYXBpLl9yZW1vdmVMb2NhbCA9IGZ1bmN0aW9uIChkb2MsIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICBvcHRzID0ge307XG4gICAgfVxuICAgIHZhciB0eCA9IG9wdHMuY3R4O1xuICAgIGlmICghdHgpIHtcbiAgICAgIHZhciB0eG5SZXN1bHQgPSBvcGVuVHJhbnNhY3Rpb25TYWZlbHkoaWRiLCBbTE9DQUxfU1RPUkVdLCAncmVhZHdyaXRlJyk7XG4gICAgICBpZiAodHhuUmVzdWx0LmVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh0eG5SZXN1bHQuZXJyb3IpO1xuICAgICAgfVxuICAgICAgdHggPSB0eG5SZXN1bHQudHhuO1xuICAgICAgdHgub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHJldCkge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJldCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHZhciByZXQ7XG4gICAgdmFyIGlkID0gZG9jLl9pZDtcbiAgICB2YXIgb1N0b3JlID0gdHgub2JqZWN0U3RvcmUoTE9DQUxfU1RPUkUpO1xuICAgIHZhciByZXEgPSBvU3RvcmUuZ2V0KGlkKTtcblxuICAgIHJlcS5vbmVycm9yID0gaWRiRXJyb3IoY2FsbGJhY2spO1xuICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIG9sZERvYyA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGlmICghb2xkRG9jIHx8IG9sZERvYy5fcmV2ICE9PSBkb2MuX3Jldikge1xuICAgICAgICBjYWxsYmFjayhjcmVhdGVFcnJvcihNSVNTSU5HX0RPQykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb1N0b3JlLmRlbGV0ZShpZCk7XG4gICAgICAgIHJldCA9IHtvazogdHJ1ZSwgaWQsIHJldjogJzAtMCd9O1xuICAgICAgICBpZiAob3B0cy5jdHgpIHsgLy8gcmV0dXJuIGltbWVkaWF0ZWx5XG4gICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmV0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH07XG5cbiAgYXBpLl9kZXN0cm95ID0gZnVuY3Rpb24gKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgY2hhbmdlc0hhbmRsZXIucmVtb3ZlQWxsTGlzdGVuZXJzKGRiTmFtZSk7XG5cbiAgICAvL0Nsb3NlIG9wZW4gcmVxdWVzdCBmb3IgXCJkYk5hbWVcIiBkYXRhYmFzZSB0byBmaXggaWUgZGVsYXkuXG4gICAgdmFyIG9wZW5SZXEgPSBvcGVuUmVxTGlzdC5nZXQoZGJOYW1lKTtcbiAgICBpZiAob3BlblJlcSAmJiBvcGVuUmVxLnJlc3VsdCkge1xuICAgICAgb3BlblJlcS5yZXN1bHQuY2xvc2UoKTtcbiAgICAgIGNhY2hlZERCcy5kZWxldGUoZGJOYW1lKTtcbiAgICB9XG4gICAgdmFyIHJlcSA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYk5hbWUpO1xuXG4gICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vUmVtb3ZlIG9wZW4gcmVxdWVzdCBmcm9tIHRoZSBsaXN0LlxuICAgICAgb3BlblJlcUxpc3QuZGVsZXRlKGRiTmFtZSk7XG4gICAgICBpZiAoaGFzTG9jYWxTdG9yYWdlKCkgJiYgKGRiTmFtZSBpbiBsb2NhbFN0b3JhZ2UpKSB7XG4gICAgICAgIGRlbGV0ZSBsb2NhbFN0b3JhZ2VbZGJOYW1lXTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIHsgJ29rJzogdHJ1ZSB9KTtcbiAgICB9O1xuXG4gICAgcmVxLm9uZXJyb3IgPSBpZGJFcnJvcihjYWxsYmFjayk7XG4gIH07XG5cbiAgdmFyIGNhY2hlZCA9IGNhY2hlZERCcy5nZXQoZGJOYW1lKTtcblxuICBpZiAoY2FjaGVkKSB7XG4gICAgaWRiID0gY2FjaGVkLmlkYjtcbiAgICBhcGkuX21ldGEgPSBjYWNoZWQuZ2xvYmFsO1xuICAgIHJldHVybiBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBhcGkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHJlcSA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgQURBUFRFUl9WRVJTSU9OKTtcbiAgb3BlblJlcUxpc3Quc2V0KGRiTmFtZSwgcmVxKTtcblxuICByZXEub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgZGIgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgaWYgKGUub2xkVmVyc2lvbiA8IDEpIHtcbiAgICAgIHJldHVybiBjcmVhdGVTY2hlbWEoZGIpOyAvLyBuZXcgZGIsIGluaXRpYWwgc2NoZW1hXG4gICAgfVxuICAgIC8vIGRvIG1pZ3JhdGlvbnNcblxuICAgIHZhciB0eG4gPSBlLmN1cnJlbnRUYXJnZXQudHJhbnNhY3Rpb247XG4gICAgLy8gdGhlc2UgbWlncmF0aW9ucyBoYXZlIHRvIGJlIGRvbmUgaW4gdGhpcyBmdW5jdGlvbiwgYmVmb3JlXG4gICAgLy8gY29udHJvbCBpcyByZXR1cm5lZCB0byB0aGUgZXZlbnQgbG9vcCwgYmVjYXVzZSBJbmRleGVkREJcblxuICAgIGlmIChlLm9sZFZlcnNpb24gPCAzKSB7XG4gICAgICBjcmVhdGVMb2NhbFN0b3JlU2NoZW1hKGRiKTsgLy8gdjIgLT4gdjNcbiAgICB9XG4gICAgaWYgKGUub2xkVmVyc2lvbiA8IDQpIHtcbiAgICAgIGFkZEF0dGFjaEFuZFNlcVN0b3JlKGRiKTsgLy8gdjMgLT4gdjRcbiAgICB9XG5cbiAgICB2YXIgbWlncmF0aW9ucyA9IFtcbiAgICAgIGFkZERlbGV0ZWRPckxvY2FsSW5kZXgsIC8vIHYxIC0+IHYyXG4gICAgICBtaWdyYXRlTG9jYWxTdG9yZSwgICAgICAvLyB2MiAtPiB2M1xuICAgICAgbWlncmF0ZUF0dHNBbmRTZXFzLCAgICAgLy8gdjMgLT4gdjRcbiAgICAgIG1pZ3JhdGVNZXRhZGF0YSAgICAgICAgIC8vIHY0IC0+IHY1XG4gICAgXTtcblxuICAgIHZhciBpID0gZS5vbGRWZXJzaW9uO1xuXG4gICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHZhciBtaWdyYXRpb24gPSBtaWdyYXRpb25zW2kgLSAxXTtcbiAgICAgIGkrKztcbiAgICAgIGlmIChtaWdyYXRpb24pIHtcbiAgICAgICAgbWlncmF0aW9uKHR4biwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9O1xuXG4gIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuXG4gICAgaWRiID0gZS50YXJnZXQucmVzdWx0O1xuXG4gICAgaWRiLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlkYi5jbG9zZSgpO1xuICAgICAgY2FjaGVkREJzLmRlbGV0ZShkYk5hbWUpO1xuICAgIH07XG5cbiAgICBpZGIub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBndWFyZGVkQ29uc29sZSgnZXJyb3InLCAnRGF0YWJhc2UgaGFzIGEgZ2xvYmFsIGZhaWx1cmUnLCBlLnRhcmdldC5lcnJvcik7XG4gICAgICBpZGJHbG9iYWxGYWlsdXJlRXJyb3IgPSBlLnRhcmdldC5lcnJvcjtcbiAgICAgIGlkYi5jbG9zZSgpO1xuICAgICAgY2FjaGVkREJzLmRlbGV0ZShkYk5hbWUpO1xuICAgIH07XG5cbiAgICAvLyBEbyBhIGZldyBzZXR1cCBvcGVyYXRpb25zIChpbiBwYXJhbGxlbCBhcyBtdWNoIGFzIHBvc3NpYmxlKTpcbiAgICAvLyAxLiBGZXRjaCBtZXRhIGRvY1xuICAgIC8vIDIuIENoZWNrIGJsb2Igc3VwcG9ydFxuICAgIC8vIDMuIENhbGN1bGF0ZSBkb2NDb3VudFxuICAgIC8vIDQuIEdlbmVyYXRlIGFuIGluc3RhbmNlSWQgaWYgbmVjZXNzYXJ5XG4gICAgLy8gNS4gU3RvcmUgZG9jQ291bnQgYW5kIGluc3RhbmNlSWQgb24gbWV0YSBkb2NcblxuICAgIHZhciB0eG4gPSBpZGIudHJhbnNhY3Rpb24oW1xuICAgICAgTUVUQV9TVE9SRSxcbiAgICAgIERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUsXG4gICAgICBET0NfU1RPUkVcbiAgICBdLCAncmVhZHdyaXRlJyk7XG5cbiAgICB2YXIgc3RvcmVkTWV0YURvYyA9IGZhbHNlO1xuICAgIHZhciBtZXRhRG9jO1xuICAgIHZhciBkb2NDb3VudDtcbiAgICB2YXIgYmxvYlN1cHBvcnQ7XG4gICAgdmFyIGluc3RhbmNlSWQ7XG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZVNldHVwKCkge1xuICAgICAgaWYgKHR5cGVvZiBibG9iU3VwcG9ydCA9PT0gJ3VuZGVmaW5lZCcgfHwgIXN0b3JlZE1ldGFEb2MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXBpLl9tZXRhID0ge1xuICAgICAgICBuYW1lOiBkYk5hbWUsXG4gICAgICAgIGluc3RhbmNlSWQsXG4gICAgICAgIGJsb2JTdXBwb3J0XG4gICAgICB9O1xuXG4gICAgICBjYWNoZWREQnMuc2V0KGRiTmFtZSwge1xuICAgICAgICBpZGIsXG4gICAgICAgIGdsb2JhbDogYXBpLl9tZXRhXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGFwaSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RvcmVNZXRhRG9jSWZSZWFkeSgpIHtcbiAgICAgIGlmICh0eXBlb2YgZG9jQ291bnQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBtZXRhRG9jID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgaW5zdGFuY2VLZXkgPSBkYk5hbWUgKyAnX2lkJztcbiAgICAgIGlmIChpbnN0YW5jZUtleSBpbiBtZXRhRG9jKSB7XG4gICAgICAgIGluc3RhbmNlSWQgPSBtZXRhRG9jW2luc3RhbmNlS2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1ldGFEb2NbaW5zdGFuY2VLZXldID0gaW5zdGFuY2VJZCA9IHV1aWQoKTtcbiAgICAgIH1cbiAgICAgIG1ldGFEb2MuZG9jQ291bnQgPSBkb2NDb3VudDtcbiAgICAgIHR4bi5vYmplY3RTdG9yZShNRVRBX1NUT1JFKS5wdXQobWV0YURvYyk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBmZXRjaCBvciBnZW5lcmF0ZSB0aGUgaW5zdGFuY2VJZFxuICAgIC8vXG4gICAgdHhuLm9iamVjdFN0b3JlKE1FVEFfU1RPUkUpLmdldChNRVRBX1NUT1JFKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgbWV0YURvYyA9IGUudGFyZ2V0LnJlc3VsdCB8fCB7IGlkOiBNRVRBX1NUT1JFIH07XG4gICAgICBzdG9yZU1ldGFEb2NJZlJlYWR5KCk7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gY291bnREb2NzXG4gICAgLy9cbiAgICBjb3VudERvY3ModHhuLCBmdW5jdGlvbiAoY291bnQpIHtcbiAgICAgIGRvY0NvdW50ID0gY291bnQ7XG4gICAgICBzdG9yZU1ldGFEb2NJZlJlYWR5KCk7XG4gICAgfSk7XG5cbiAgICAvL1xuICAgIC8vIGNoZWNrIGJsb2Igc3VwcG9ydFxuICAgIC8vXG4gICAgaWYgKCFibG9iU3VwcG9ydFByb21pc2UpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBibG9iIHN1cHBvcnQgaXMgb25seSBjaGVja2VkIG9uY2VcbiAgICAgIGJsb2JTdXBwb3J0UHJvbWlzZSA9IGNoZWNrQmxvYlN1cHBvcnQodHhuLCBERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFLCAna2V5Jyk7XG4gICAgfVxuXG4gICAgYmxvYlN1cHBvcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHZhbCkge1xuICAgICAgYmxvYlN1cHBvcnQgPSB2YWw7XG4gICAgICBjb21wbGV0ZVNldHVwKCk7XG4gICAgfSk7XG5cbiAgICAvLyBvbmx5IHdoZW4gdGhlIG1ldGFkYXRhIHB1dCB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkLFxuICAgIC8vIGNvbnNpZGVyIHRoZSBzZXR1cCBkb25lXG4gICAgdHhuLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzdG9yZWRNZXRhRG9jID0gdHJ1ZTtcbiAgICAgIGNvbXBsZXRlU2V0dXAoKTtcbiAgICB9O1xuICAgIHR4bi5vbmFib3J0ID0gaWRiRXJyb3IoY2FsbGJhY2spO1xuICB9O1xuXG4gIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgbXNnID0gZS50YXJnZXQuZXJyb3IgJiYgZS50YXJnZXQuZXJyb3IubWVzc2FnZTtcblxuICAgIGlmICghbXNnKSB7XG4gICAgICBtc2cgPSAnRmFpbGVkIHRvIG9wZW4gaW5kZXhlZERCLCBhcmUgeW91IGluIHByaXZhdGUgYnJvd3NpbmcgbW9kZT8nO1xuICAgIH0gZWxzZSBpZiAobXNnLmluZGV4T2YoXCJzdG9yZWQgZGF0YWJhc2UgaXMgYSBoaWdoZXIgdmVyc2lvblwiKSAhPT0gLTEpIHtcbiAgICAgIG1zZyA9IG5ldyBFcnJvcignVGhpcyBEQiB3YXMgY3JlYXRlZCB3aXRoIHRoZSBuZXdlciBcImluZGV4ZWRkYlwiIGFkYXB0ZXIsIGJ1dCB5b3UgYXJlIHRyeWluZyB0byBvcGVuIGl0IHdpdGggdGhlIG9sZGVyIFwiaWRiXCIgYWRhcHRlcicpO1xuICAgIH1cblxuICAgIGd1YXJkZWRDb25zb2xlKCdlcnJvcicsIG1zZyk7XG4gICAgY2FsbGJhY2soY3JlYXRlRXJyb3IoSURCX0VSUk9SLCBtc2cpKTtcbiAgfTtcbn1cblxuSWRiUG91Y2gudmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZvbGxvd2luZyAjNzA4NSBidWdneSBpZGIgdmVyc2lvbnMgKHR5cGljYWxseSBTYWZhcmkgPCAxMC4xKSBhcmVcbiAgLy8gY29uc2lkZXJlZCB2YWxpZC5cblxuICAvLyBPbiBGaXJlZm94IFNlY3VyaXR5RXJyb3IgaXMgdGhyb3duIHdoaWxlIHJlZmVyZW5jaW5nIGluZGV4ZWREQiBpZiBjb29raWVzXG4gIC8vIGFyZSBub3QgYWxsb3dlZC4gYHR5cGVvZiBpbmRleGVkREJgIGFsc28gdHJpZ2dlcnMgdGhlIGVycm9yLlxuICB0cnkge1xuICAgIC8vIHNvbWUgb3V0ZGF0ZWQgaW1wbGVtZW50YXRpb25zIG9mIElEQiB0aGF0IGFwcGVhciBvbiBTYW1zdW5nXG4gICAgLy8gYW5kIEhUQyBBbmRyb2lkIGRldmljZXMgPDQuNCBhcmUgbWlzc2luZyBJREJLZXlSYW5nZVxuICAgIHJldHVybiB0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgSURCS2V5UmFuZ2UgIT09ICd1bmRlZmluZWQnO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBJREJQb3VjaCAoUG91Y2hEQikge1xuICBQb3VjaERCLmFkYXB0ZXIoJ2lkYicsIElkYlBvdWNoLCB0cnVlKTtcbn1cblxuLy8gZGVhZCBzaW1wbGUgcHJvbWlzZSBwb29sLCBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vdGltZHAvZXM2LXByb21pc2UtcG9vbFxuLy8gYnV0IG11Y2ggc21hbGxlciBpbiBjb2RlIHNpemUuIGxpbWl0cyB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgcHJvbWlzZXMgdGhhdCBhcmUgZXhlY3V0ZWRcblxuXG5mdW5jdGlvbiBwb29sKHByb21pc2VGYWN0b3JpZXMsIGxpbWl0KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIHJ1bm5pbmcgPSAwO1xuICAgIHZhciBjdXJyZW50ID0gMDtcbiAgICB2YXIgZG9uZSA9IDA7XG4gICAgdmFyIGxlbiA9IHByb21pc2VGYWN0b3JpZXMubGVuZ3RoO1xuICAgIHZhciBlcnI7XG5cbiAgICBmdW5jdGlvbiBydW5OZXh0KCkge1xuICAgICAgcnVubmluZysrO1xuICAgICAgcHJvbWlzZUZhY3Rvcmllc1tjdXJyZW50KytdKCkudGhlbihvblN1Y2Nlc3MsIG9uRXJyb3IpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRvTmV4dCgpIHtcbiAgICAgIGlmICgrK2RvbmUgPT09IGxlbikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcnVuTmV4dEJhdGNoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25TdWNjZXNzKCkge1xuICAgICAgcnVubmluZy0tO1xuICAgICAgZG9OZXh0KCk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBvbkVycm9yKHRoaXNFcnIpIHtcbiAgICAgIHJ1bm5pbmctLTtcbiAgICAgIGVyciA9IGVyciB8fCB0aGlzRXJyO1xuICAgICAgZG9OZXh0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcnVuTmV4dEJhdGNoKCkge1xuICAgICAgd2hpbGUgKHJ1bm5pbmcgPCBsaW1pdCAmJiBjdXJyZW50IDwgbGVuKSB7XG4gICAgICAgIHJ1bk5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBydW5OZXh0QmF0Y2goKTtcbiAgfSk7XG59XG5cbmNvbnN0IENIQU5HRVNfQkFUQ0hfU0laRSA9IDI1O1xuY29uc3QgTUFYX1NJTVVMVEFORU9VU19SRVZTID0gNTA7XG5jb25zdCBDSEFOR0VTX1RJTUVPVVRfQlVGRkVSID0gNTAwMDtcbmNvbnN0IERFRkFVTFRfSEVBUlRCRUFUID0gMTAwMDA7XG5cbmNvbnN0IHN1cHBvcnRzQnVsa0dldE1hcCA9IHt9O1xuXG5mdW5jdGlvbiByZWFkQXR0YWNobWVudHNBc0Jsb2JPckJ1ZmZlcihyb3cpIHtcbiAgY29uc3QgZG9jID0gcm93LmRvYyB8fCByb3cub2s7XG4gIGNvbnN0IGF0dHMgPSBkb2MgJiYgZG9jLl9hdHRhY2htZW50cztcbiAgaWYgKCFhdHRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIE9iamVjdC5rZXlzKGF0dHMpLmZvckVhY2goZnVuY3Rpb24gKGZpbGVuYW1lKSB7XG4gICAgY29uc3QgYXR0ID0gYXR0c1tmaWxlbmFtZV07XG4gICAgYXR0LmRhdGEgPSBiNjRUb0JsdWZmZXIoYXR0LmRhdGEsIGF0dC5jb250ZW50X3R5cGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZW5jb2RlRG9jSWQoaWQpIHtcbiAgaWYgKC9eX2Rlc2lnbi8udGVzdChpZCkpIHtcbiAgICByZXR1cm4gJ19kZXNpZ24vJyArIGVuY29kZVVSSUNvbXBvbmVudChpZC5zbGljZSg4KSk7XG4gIH1cbiAgaWYgKGlkLnN0YXJ0c1dpdGgoJ19sb2NhbC8nKSkge1xuICAgIHJldHVybiAnX2xvY2FsLycgKyBlbmNvZGVVUklDb21wb25lbnQoaWQuc2xpY2UoNykpO1xuICB9XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaWQpO1xufVxuXG5mdW5jdGlvbiBwcmVwcm9jZXNzQXR0YWNobWVudHMkMShkb2MpIHtcbiAgaWYgKCFkb2MuX2F0dGFjaG1lbnRzIHx8ICFPYmplY3Qua2V5cyhkb2MuX2F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhkb2MuX2F0dGFjaG1lbnRzKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBkb2MuX2F0dGFjaG1lbnRzW2tleV07XG4gICAgaWYgKGF0dGFjaG1lbnQuZGF0YSAmJiB0eXBlb2YgYXR0YWNobWVudC5kYXRhICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIGJsb2JUb0Jhc2U2NChhdHRhY2htZW50LmRhdGEsIHJlc29sdmUpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAoYjY0KSB7XG4gICAgICAgIGF0dGFjaG1lbnQuZGF0YSA9IGI2NDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBoYXNVcmxQcmVmaXgob3B0cykge1xuICBpZiAoIW9wdHMucHJlZml4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHByb3RvY29sID0gcGFyc2VVcmkob3B0cy5wcmVmaXgpLnByb3RvY29sO1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwJyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzJztcbn1cblxuLy8gR2V0IGFsbCB0aGUgaW5mb3JtYXRpb24geW91IHBvc3NpYmx5IGNhbiBhYm91dCB0aGUgVVJJIGdpdmVuIGJ5IG5hbWUgYW5kXG4vLyByZXR1cm4gaXQgYXMgYSBzdWl0YWJsZSBvYmplY3QuXG5mdW5jdGlvbiBnZXRIb3N0KG5hbWUsIG9wdHMpIHtcbiAgLy8gZW5jb2RlIGRiIG5hbWUgaWYgb3B0cy5wcmVmaXggaXMgYSB1cmwgKCM1NTc0KVxuICBpZiAoaGFzVXJsUHJlZml4KG9wdHMpKSB7XG4gICAgY29uc3QgZGJOYW1lID0gb3B0cy5uYW1lLnN1YnN0cihvcHRzLnByZWZpeC5sZW5ndGgpO1xuICAgIC8vIEVuc3VyZSBwcmVmaXggaGFzIGEgdHJhaWxpbmcgc2xhc2hcbiAgICBjb25zdCBwcmVmaXggPSBvcHRzLnByZWZpeC5yZXBsYWNlKC9cXC8/JC8sICcvJyk7XG4gICAgbmFtZSA9IHByZWZpeCArIGVuY29kZVVSSUNvbXBvbmVudChkYk5hbWUpO1xuICB9XG5cbiAgY29uc3QgdXJpID0gcGFyc2VVcmkobmFtZSk7XG4gIGlmICh1cmkudXNlciB8fCB1cmkucGFzc3dvcmQpIHtcbiAgICB1cmkuYXV0aCA9IHt1c2VybmFtZTogdXJpLnVzZXIsIHBhc3N3b3JkOiB1cmkucGFzc3dvcmR9O1xuICB9XG5cbiAgLy8gU3BsaXQgdGhlIHBhdGggcGFydCBvZiB0aGUgVVJJIGludG8gcGFydHMgdXNpbmcgJy8nIGFzIHRoZSBkZWxpbWl0ZXJcbiAgLy8gYWZ0ZXIgcmVtb3ZpbmcgYW55IGxlYWRpbmcgJy8nIGFuZCBhbnkgdHJhaWxpbmcgJy8nXG4gIGNvbnN0IHBhcnRzID0gdXJpLnBhdGgucmVwbGFjZSgvKF5cXC98XFwvJCkvZywgJycpLnNwbGl0KCcvJyk7XG5cbiAgdXJpLmRiID0gcGFydHMucG9wKCk7XG4gIC8vIFByZXZlbnQgZG91YmxlIGVuY29kaW5nIG9mIFVSSSBjb21wb25lbnRcbiAgaWYgKHVyaS5kYi5pbmRleE9mKCclJykgPT09IC0xKSB7XG4gICAgdXJpLmRiID0gZW5jb2RlVVJJQ29tcG9uZW50KHVyaS5kYik7XG4gIH1cblxuICB1cmkucGF0aCA9IHBhcnRzLmpvaW4oJy8nKTtcblxuICByZXR1cm4gdXJpO1xufVxuXG4vLyBHZW5lcmF0ZSBhIFVSTCB3aXRoIHRoZSBob3N0IGRhdGEgZ2l2ZW4gYnkgb3B0cyBhbmQgdGhlIGdpdmVuIHBhdGhcbmZ1bmN0aW9uIGdlbkRCVXJsKG9wdHMsIHBhdGgpIHtcbiAgcmV0dXJuIGdlblVybChvcHRzLCBvcHRzLmRiICsgJy8nICsgcGF0aCk7XG59XG5cbi8vIEdlbmVyYXRlIGEgVVJMIHdpdGggdGhlIGhvc3QgZGF0YSBnaXZlbiBieSBvcHRzIGFuZCB0aGUgZ2l2ZW4gcGF0aFxuZnVuY3Rpb24gZ2VuVXJsKG9wdHMsIHBhdGgpIHtcbiAgLy8gSWYgdGhlIGhvc3QgYWxyZWFkeSBoYXMgYSBwYXRoLCB0aGVuIHdlIG5lZWQgdG8gaGF2ZSBhIHBhdGggZGVsaW1pdGVyXG4gIC8vIE90aGVyd2lzZSwgdGhlIHBhdGggZGVsaW1pdGVyIGlzIHRoZSBlbXB0eSBzdHJpbmdcbiAgY29uc3QgcGF0aERlbCA9ICFvcHRzLnBhdGggPyAnJyA6ICcvJztcblxuICAvLyBJZiB0aGUgaG9zdCBhbHJlYWR5IGhhcyBhIHBhdGgsIHRoZW4gd2UgbmVlZCB0byBoYXZlIGEgcGF0aCBkZWxpbWl0ZXJcbiAgLy8gT3RoZXJ3aXNlLCB0aGUgcGF0aCBkZWxpbWl0ZXIgaXMgdGhlIGVtcHR5IHN0cmluZ1xuICByZXR1cm4gb3B0cy5wcm90b2NvbCArICc6Ly8nICsgb3B0cy5ob3N0ICtcbiAgICAgICAgIChvcHRzLnBvcnQgPyAoJzonICsgb3B0cy5wb3J0KSA6ICcnKSArXG4gICAgICAgICAnLycgKyBvcHRzLnBhdGggKyBwYXRoRGVsICsgcGF0aDtcbn1cblxuZnVuY3Rpb24gcGFyYW1zVG9TdHIocGFyYW1zKSB7XG4gIGNvbnN0IHBhcmFtS2V5cyA9IE9iamVjdC5rZXlzKHBhcmFtcyk7XG4gIGlmIChwYXJhbUtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuICc/JyArIHBhcmFtS2V5cy5tYXAoa2V5ID0+IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbXNba2V5XSkpLmpvaW4oJyYnKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FjaGVCdXN0KG9wdHMpIHtcbiAgY29uc3QgdWEgPSAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCkgP1xuICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpIDogJyc7XG4gIGNvbnN0IGlzSUUgPSB1YS5pbmRleE9mKCdtc2llJykgIT09IC0xO1xuICBjb25zdCBpc1RyaWRlbnQgPSB1YS5pbmRleE9mKCd0cmlkZW50JykgIT09IC0xO1xuICBjb25zdCBpc0VkZ2UgPSB1YS5pbmRleE9mKCdlZGdlJykgIT09IC0xO1xuICBjb25zdCBpc0dFVCA9ICEoJ21ldGhvZCcgaW4gb3B0cykgfHwgb3B0cy5tZXRob2QgPT09ICdHRVQnO1xuICByZXR1cm4gKGlzSUUgfHwgaXNUcmlkZW50IHx8IGlzRWRnZSkgJiYgaXNHRVQ7XG59XG5cbi8vIEltcGxlbWVudHMgdGhlIFBvdWNoREIgQVBJIGZvciBkZWFsaW5nIHdpdGggQ291Y2hEQiBpbnN0YW5jZXMgb3ZlciBIVFRQXG5mdW5jdGlvbiBIdHRwUG91Y2gob3B0cywgY2FsbGJhY2spIHtcblxuICAvLyBUaGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBiZSBwdWJsaWNseSBhdmFpbGFibGUgZm9yIEh0dHBQb3VjaFxuICBjb25zdCBhcGkgPSB0aGlzO1xuXG4gIGNvbnN0IGhvc3QgPSBnZXRIb3N0KG9wdHMubmFtZSwgb3B0cyk7XG4gIGNvbnN0IGRiVXJsID0gZ2VuREJVcmwoaG9zdCwgJycpO1xuXG4gIG9wdHMgPSBjbG9uZShvcHRzKTtcblxuICBjb25zdCBvdXJGZXRjaCA9IGFzeW5jIGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCBuZXcgaCgpO1xuXG4gICAgb3B0aW9ucy5jcmVkZW50aWFscyA9ICdpbmNsdWRlJztcblxuICAgIGlmIChvcHRzLmF1dGggfHwgaG9zdC5hdXRoKSB7XG4gICAgICBjb25zdCBuQXV0aCA9IG9wdHMuYXV0aCB8fCBob3N0LmF1dGg7XG4gICAgICBjb25zdCBzdHIgPSBuQXV0aC51c2VybmFtZSArICc6JyArIG5BdXRoLnBhc3N3b3JkO1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzQnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICsgdG9rZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnMgfHwge307XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMuYXBwZW5kKGtleSwgaGVhZGVyc1trZXldKTtcbiAgICB9KTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChzaG91bGRDYWNoZUJ1c3Qob3B0aW9ucykpIHtcbiAgICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgJ19ub25jZT0nICsgRGF0ZS5ub3coKTtcbiAgICB9XG5cbiAgICBjb25zdCBmZXRjaEZ1biA9IG9wdHMuZmV0Y2ggfHwgZiQxO1xuICAgIHJldHVybiBhd2FpdCBmZXRjaEZ1bih1cmwsIG9wdGlvbnMpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkYXB0ZXJGdW4kJDEobmFtZSwgZnVuKSB7XG4gICAgcmV0dXJuIGFkYXB0ZXJGdW4obmFtZSwgZnVuY3Rpb24gKC4uLmFyZ3MpIHtcbiAgICAgIHNldHVwKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFyZ3MucG9wKCk7XG4gICAgICAgIGNhbGxiYWNrKGUpO1xuICAgICAgfSk7XG4gICAgfSkuYmluZChhcGkpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZmV0Y2hKU09OKHVybCwgb3B0aW9ucykge1xuXG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwgbmV3IGgoKTtcblxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuICAgIGlmICghb3B0aW9ucy5oZWFkZXJzLmdldCgnQWNjZXB0JykpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvdXJGZXRjaCh1cmwsIG9wdGlvbnMpO1xuICAgIHJlc3VsdC5vayA9IHJlc3BvbnNlLm9rO1xuICAgIHJlc3VsdC5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcblxuICAgIHJlc3VsdC5kYXRhID0ganNvbjtcbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgcmVzdWx0LmRhdGEuc3RhdHVzID0gcmVzdWx0LnN0YXR1cztcbiAgICAgIGNvbnN0IGVyciA9IGdlbmVyYXRlRXJyb3JGcm9tUmVzcG9uc2UocmVzdWx0LmRhdGEpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdC5kYXRhKSkge1xuICAgICAgcmVzdWx0LmRhdGEgPSByZXN1bHQuZGF0YS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKHYuZXJyb3IgfHwgdi5taXNzaW5nKSB7XG4gICAgICAgICAgcmV0dXJuIGdlbmVyYXRlRXJyb3JGcm9tUmVzcG9uc2Uodik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsZXQgc2V0dXBQcm9taXNlO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNldHVwKCkge1xuICAgIGlmIChvcHRzLnNraXBfc2V0dXApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHNldHVwIGluIHByb2Nlc3Mgb3IgcHJldmlvdXMgc3VjY2Vzc2Z1bCBzZXR1cFxuICAgIC8vIGRvbmUgdGhlbiB3ZSB3aWxsIHVzZSB0aGF0XG4gICAgLy8gSWYgcHJldmlvdXMgc2V0dXBzIGhhdmUgYmVlbiByZWplY3RlZCB3ZSB3aWxsIHRyeSBhZ2FpblxuICAgIGlmIChzZXR1cFByb21pc2UpIHtcbiAgICAgIHJldHVybiBzZXR1cFByb21pc2U7XG4gICAgfVxuXG4gICAgc2V0dXBQcm9taXNlID0gZmV0Y2hKU09OKGRiVXJsKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgJiYgZXJyLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIC8vIERvZXNudCBleGlzdCwgY3JlYXRlIGl0XG4gICAgICAgIGV4cGxhaW5FcnJvcig0MDQsICdQb3VjaERCIGlzIGp1c3QgZGV0ZWN0aW5nIGlmIHRoZSByZW1vdGUgZXhpc3RzLicpO1xuICAgICAgICByZXR1cm4gZmV0Y2hKU09OKGRiVXJsLCB7bWV0aG9kOiAnUFVUJ30pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgLy8gSWYgd2UgdHJ5IHRvIGNyZWF0ZSBhIGRhdGFiYXNlIHRoYXQgYWxyZWFkeSBleGlzdHMsIHNraXBwZWQgaW5cbiAgICAgIC8vIGlzdGFuYnVsIHNpbmNlIGl0cyBjYXRjaGluZyBhIHJhY2UgY29uZGl0aW9uLlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZXJyICYmIGVyci5zdGF0dXMgJiYgZXJyLnN0YXR1cyA9PT0gNDEyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfSk7XG5cbiAgICBzZXR1cFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge1xuICAgICAgc2V0dXBQcm9taXNlID0gbnVsbDtcbiAgICB9KTtcblxuICAgIHJldHVybiBzZXR1cFByb21pc2U7XG4gIH1cblxuICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgY2FsbGJhY2sobnVsbCwgYXBpKTtcbiAgfSk7XG5cbiAgYXBpLl9yZW1vdGUgPSB0cnVlO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGFwaS50eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnaHR0cCc7XG4gIH07XG5cbiAgYXBpLmlkID0gYWRhcHRlckZ1biQkMSgnaWQnLCBhc3luYyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG91ckZldGNoKGdlblVybChob3N0LCAnJykpO1xuICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVzdWx0ID0ge307XG4gICAgfVxuXG4gICAgLy8gQmFkIHJlc3BvbnNlIG9yIG1pc3NpbmcgYHV1aWRgIHNob3VsZCBub3QgcHJldmVudCBJRCBnZW5lcmF0aW9uLlxuICAgIGNvbnN0IHV1aWQkJDEgPSAocmVzdWx0ICYmIHJlc3VsdC51dWlkKSA/IChyZXN1bHQudXVpZCArIGhvc3QuZGIpIDogZ2VuREJVcmwoaG9zdCwgJycpO1xuICAgIGNhbGxiYWNrKG51bGwsIHV1aWQkJDEpO1xuICB9KTtcblxuICAvLyBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byB0aGUgaG9zdCBjYWxsaW5nIHRoZSBjb3VjaGRiIF9jb21wYWN0IGZ1bmN0aW9uXG4gIC8vICAgIHZlcnNpb246IFRoZSB2ZXJzaW9uIG9mIENvdWNoREIgaXQgaXMgcnVubmluZ1xuICBhcGkuY29tcGFjdCA9IGFkYXB0ZXJGdW4kJDEoJ2NvbXBhY3QnLCBhc3luYyBmdW5jdGlvbiAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgb3B0cyA9IGNsb25lKG9wdHMpO1xuXG4gICAgYXdhaXQgZmV0Y2hKU09OKGdlbkRCVXJsKGhvc3QsICdfY29tcGFjdCcpLCB7bWV0aG9kOiAnUE9TVCd9KTtcblxuICAgIGZ1bmN0aW9uIHBpbmcoKSB7XG4gICAgICBhcGkuaW5mbyhmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgLy8gQ291Y2hEQiBtYXkgc2VuZCBhIFwiY29tcGFjdF9ydW5uaW5nOnRydWVcIiBpZiBpdCdzXG4gICAgICAgIC8vIGFscmVhZHkgY29tcGFjdGluZy4gUG91Y2hEQiBTZXJ2ZXIgZG9lc24ndC5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKHJlcyAmJiAhcmVzLmNvbXBhY3RfcnVubmluZykge1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtvazogdHJ1ZX0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQocGluZywgb3B0cy5pbnRlcnZhbCB8fCAyMDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gUGluZyB0aGUgaHR0cCBpZiBpdCdzIGZpbmlzaGVkIGNvbXBhY3Rpb25cbiAgICBwaW5nKCk7XG4gIH0pO1xuXG4gIGFwaS5idWxrR2V0ID0gYWRhcHRlckZ1bignYnVsa0dldCcsIGZ1bmN0aW9uIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgYXN5bmMgZnVuY3Rpb24gZG9CdWxrR2V0KGNiKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB7fTtcbiAgICAgIGlmIChvcHRzLnJldnMpIHtcbiAgICAgICAgcGFyYW1zLnJldnMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKG9wdHMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcGFyYW1zLmF0dGFjaG1lbnRzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRzLmxhdGVzdCkge1xuICAgICAgICBwYXJhbXMubGF0ZXN0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoSlNPTihnZW5EQlVybChob3N0LCAnX2J1bGtfZ2V0JyArIHBhcmFtc1RvU3RyKHBhcmFtcykpLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBkb2NzOiBvcHRzLmRvY3N9KVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0cy5hdHRhY2htZW50cyAmJiBvcHRzLmJpbmFyeSkge1xuICAgICAgICAgIHJlc3VsdC5kYXRhLnJlc3VsdHMuZm9yRWFjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgICAgICByZXMuZG9jcy5mb3JFYWNoKHJlYWRBdHRhY2htZW50c0FzQmxvYk9yQnVmZmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYihudWxsLCByZXN1bHQuZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYihlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBmdW5jdGlvbiBkb0J1bGtHZXRTaGltKCkge1xuICAgICAgLy8gYXZvaWQgXCJ1cmwgdG9vIGxvbmcgZXJyb3JcIiBieSBzcGxpdHRpbmcgdXAgaW50byBtdWx0aXBsZSByZXF1ZXN0c1xuICAgICAgY29uc3QgYmF0Y2hTaXplID0gTUFYX1NJTVVMVEFORU9VU19SRVZTO1xuICAgICAgY29uc3QgbnVtQmF0Y2hlcyA9IE1hdGguY2VpbChvcHRzLmRvY3MubGVuZ3RoIC8gYmF0Y2hTaXplKTtcbiAgICAgIGxldCBudW1Eb25lID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgQXJyYXkobnVtQmF0Y2hlcyk7XG5cbiAgICAgIGZ1bmN0aW9uIG9uUmVzdWx0KGJhdGNoTnVtKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgICAvLyBlcnIgaXMgaW1wb3NzaWJsZSBiZWNhdXNlIHNoaW0gcmV0dXJucyBhIGxpc3Qgb2YgZXJycyBpbiB0aGF0IGNhc2VcbiAgICAgICAgICByZXN1bHRzW2JhdGNoTnVtXSA9IHJlcy5yZXN1bHRzO1xuICAgICAgICAgIGlmICgrK251bURvbmUgPT09IG51bUJhdGNoZXMpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHtyZXN1bHRzOiByZXN1bHRzLmZsYXQoKX0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1CYXRjaGVzOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc3ViT3B0cyA9IHBpY2sob3B0cywgWydyZXZzJywgJ2F0dGFjaG1lbnRzJywgJ2JpbmFyeScsICdsYXRlc3QnXSk7XG4gICAgICAgIHN1Yk9wdHMuZG9jcyA9IG9wdHMuZG9jcy5zbGljZShpICogYmF0Y2hTaXplLFxuICAgICAgICAgIE1hdGgubWluKG9wdHMuZG9jcy5sZW5ndGgsIChpICsgMSkgKiBiYXRjaFNpemUpKTtcbiAgICAgICAgYnVsa0dldChzZWxmLCBzdWJPcHRzLCBvblJlc3VsdChpKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFyayB0aGUgd2hvbGUgZGF0YWJhc2UgYXMgZWl0aGVyIHN1cHBvcnRpbmcgb3Igbm90IHN1cHBvcnRpbmcgX2J1bGtfZ2V0XG4gICAgY29uc3QgZGJVcmwgPSBnZW5VcmwoaG9zdCwgJycpO1xuICAgIGNvbnN0IHN1cHBvcnRzQnVsa0dldCA9IHN1cHBvcnRzQnVsa0dldE1hcFtkYlVybF07XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2Ygc3VwcG9ydHNCdWxrR2V0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoaXMgZGF0YWJhc2Ugc3VwcG9ydHMgX2J1bGtfZ2V0XG4gICAgICBkb0J1bGtHZXQoZnVuY3Rpb24gKGVyciwgcmVzKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzdXBwb3J0c0J1bGtHZXRNYXBbZGJVcmxdID0gZmFsc2U7XG4gICAgICAgICAgZXhwbGFpbkVycm9yKFxuICAgICAgICAgICAgZXJyLnN0YXR1cyxcbiAgICAgICAgICAgICdQb3VjaERCIGlzIGp1c3QgZGV0ZWN0aW5nIGlmIHRoZSByZW1vdGUgJyArXG4gICAgICAgICAgICAnc3VwcG9ydHMgdGhlIF9idWxrX2dldCBBUEkuJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZG9CdWxrR2V0U2hpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN1cHBvcnRzQnVsa0dldE1hcFtkYlVybF0gPSB0cnVlO1xuICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoc3VwcG9ydHNCdWxrR2V0KSB7XG4gICAgICBkb0J1bGtHZXQoY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb0J1bGtHZXRTaGltKCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBDYWxscyBHRVQgb24gdGhlIGhvc3QsIHdoaWNoIGdldHMgYmFjayBhIEpTT04gc3RyaW5nIGNvbnRhaW5pbmdcbiAgLy8gICAgY291Y2hkYjogQSB3ZWxjb21lIHN0cmluZ1xuICAvLyAgICB2ZXJzaW9uOiBUaGUgdmVyc2lvbiBvZiBDb3VjaERCIGl0IGlzIHJ1bm5pbmdcbiAgYXBpLl9pbmZvID0gYXN5bmMgZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNldHVwKCk7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG91ckZldGNoKGdlbkRCVXJsKGhvc3QsICcnKSk7XG4gICAgICBjb25zdCBpbmZvID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgaW5mby5ob3N0ID0gZ2VuREJVcmwoaG9zdCwgJycpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgaW5mbyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgfTtcblxuICBhcGkuZmV0Y2ggPSBhc3luYyBmdW5jdGlvbiAocGF0aCwgb3B0aW9ucykge1xuICAgIGF3YWl0IHNldHVwKCk7XG4gICAgY29uc3QgdXJsID0gcGF0aC5zdWJzdHJpbmcoMCwgMSkgPT09ICcvJyA/XG4gICAgZ2VuVXJsKGhvc3QsIHBhdGguc3Vic3RyaW5nKDEpKSA6XG4gICAgZ2VuREJVcmwoaG9zdCwgcGF0aCk7XG4gICAgcmV0dXJuIG91ckZldGNoKHVybCwgb3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gR2V0IHRoZSBkb2N1bWVudCB3aXRoIHRoZSBnaXZlbiBpZCBmcm9tIHRoZSBkYXRhYmFzZSBnaXZlbiBieSBob3N0LlxuICAvLyBUaGUgaWQgY291bGQgYmUgc29sZWx5IHRoZSBfaWQgaW4gdGhlIGRhdGFiYXNlLCBvciBpdCBtYXkgYmUgYVxuICAvLyBfZGVzaWduL0lEIG9yIF9sb2NhbC9JRCBwYXRoXG4gIGFwaS5nZXQgPSBhZGFwdGVyRnVuJCQxKCdnZXQnLCBhc3luYyBmdW5jdGlvbiAoaWQsIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgLy8gSWYgbm8gb3B0aW9ucyB3ZXJlIGdpdmVuLCBzZXQgdGhlIGNhbGxiYWNrIHRvIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICBvcHRzID0ge307XG4gICAgfVxuICAgIG9wdHMgPSBjbG9uZShvcHRzKTtcblxuICAgIC8vIExpc3Qgb2YgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIEdFVCByZXF1ZXN0XG4gICAgY29uc3QgcGFyYW1zID0ge307XG5cbiAgICBpZiAob3B0cy5yZXZzKSB7XG4gICAgICBwYXJhbXMucmV2cyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMucmV2c19pbmZvKSB7XG4gICAgICBwYXJhbXMucmV2c19pbmZvID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5sYXRlc3QpIHtcbiAgICAgIHBhcmFtcy5sYXRlc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLm9wZW5fcmV2cykge1xuICAgICAgaWYgKG9wdHMub3Blbl9yZXZzICE9PSBcImFsbFwiKSB7XG4gICAgICAgIG9wdHMub3Blbl9yZXZzID0gSlNPTi5zdHJpbmdpZnkob3B0cy5vcGVuX3JldnMpO1xuICAgICAgfVxuICAgICAgcGFyYW1zLm9wZW5fcmV2cyA9IG9wdHMub3Blbl9yZXZzO1xuICAgIH1cblxuICAgIGlmIChvcHRzLnJldikge1xuICAgICAgcGFyYW1zLnJldiA9IG9wdHMucmV2O1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNvbmZsaWN0cykge1xuICAgICAgcGFyYW1zLmNvbmZsaWN0cyA9IG9wdHMuY29uZmxpY3RzO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChvcHRzLnVwZGF0ZV9zZXEpIHtcbiAgICAgIHBhcmFtcy51cGRhdGVfc2VxID0gb3B0cy51cGRhdGVfc2VxO1xuICAgIH1cblxuICAgIGlkID0gZW5jb2RlRG9jSWQoaWQpO1xuXG4gICAgZnVuY3Rpb24gZmV0Y2hBdHRhY2htZW50cyhkb2MpIHtcbiAgICAgIGNvbnN0IGF0dHMgPSBkb2MuX2F0dGFjaG1lbnRzO1xuICAgICAgY29uc3QgZmlsZW5hbWVzID0gYXR0cyAmJiBPYmplY3Qua2V5cyhhdHRzKTtcbiAgICAgIGlmICghYXR0cyB8fCAhZmlsZW5hbWVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB3ZSBmZXRjaCB0aGVzZSBtYW51YWxseSBpbiBzZXBhcmF0ZSBYSFJzLCBiZWNhdXNlXG4gICAgICAvLyBTeW5jIEdhdGV3YXkgd291bGQgbm9ybWFsbHkgc2VuZCBpdCBiYWNrIGFzIG11bHRpcGFydC9taXhlZCxcbiAgICAgIC8vIHdoaWNoIHdlIGNhbm5vdCBwYXJzZS4gQWxzbywgdGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuXG4gICAgICAvLyByZWNlaXZpbmcgYXR0YWNobWVudHMgYXMgYmFzZTY0LWVuY29kZWQgc3RyaW5ncy5cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YShmaWxlbmFtZSkge1xuICAgICAgICBjb25zdCBhdHQgPSBhdHRzW2ZpbGVuYW1lXTtcbiAgICAgICAgY29uc3QgcGF0aCA9IGVuY29kZURvY0lkKGRvYy5faWQpICsgJy8nICsgZW5jb2RlQXR0YWNobWVudElkKGZpbGVuYW1lKSArXG4gICAgICAgICAgICAnP3Jldj0nICsgZG9jLl9yZXY7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvdXJGZXRjaChnZW5EQlVybChob3N0LCBwYXRoKSk7XG5cbiAgICAgICAgbGV0IGJsb2I7XG4gICAgICAgIGlmICgnYnVmZmVyJyBpbiByZXNwb25zZSkge1xuICAgICAgICAgIGJsb2IgPSBhd2FpdCByZXNwb25zZS5idWZmZXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgIGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgaWYgKG9wdHMuYmluYXJ5KSB7XG4gICAgICAgICAgY29uc3QgdHlwZUZpZWxkRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmxvYi5fX3Byb3RvX18sICd0eXBlJyk7XG4gICAgICAgICAgaWYgKCF0eXBlRmllbGREZXNjcmlwdG9yIHx8IHR5cGVGaWVsZERlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICBibG9iLnR5cGUgPSBhdHQuY29udGVudF90eXBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhID0gYmxvYjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgIGJsb2JUb0Jhc2U2NChibG9iLCByZXNvbHZlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBhdHQuc3R1YjtcbiAgICAgICAgZGVsZXRlIGF0dC5sZW5ndGg7XG4gICAgICAgIGF0dC5kYXRhID0gZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvbWlzZUZhY3RvcmllcyA9IGZpbGVuYW1lcy5tYXAoZnVuY3Rpb24gKGZpbGVuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZldGNoRGF0YShmaWxlbmFtZSk7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhpcyBsaW1pdHMgdGhlIG51bWJlciBvZiBwYXJhbGxlbCB4aHIgcmVxdWVzdHMgdG8gNSBhbnkgdGltZVxuICAgICAgLy8gdG8gYXZvaWQgaXNzdWVzIHdpdGggbWF4aW11bSBicm93c2VyIHJlcXVlc3QgbGltaXRzXG4gICAgICByZXR1cm4gcG9vbChwcm9taXNlRmFjdG9yaWVzLCA1KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmZXRjaEFsbEF0dGFjaG1lbnRzKGRvY09yRG9jcykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZG9jT3JEb2NzKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoZG9jT3JEb2NzLm1hcChmdW5jdGlvbiAoZG9jKSB7XG4gICAgICAgICAgaWYgKGRvYy5vaykge1xuICAgICAgICAgICAgcmV0dXJuIGZldGNoQXR0YWNobWVudHMoZG9jLm9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmZXRjaEF0dGFjaG1lbnRzKGRvY09yRG9jcyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gZ2VuREJVcmwoaG9zdCwgaWQgKyBwYXJhbXNUb1N0cihwYXJhbXMpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hKU09OKHVybCk7XG4gICAgICBpZiAob3B0cy5hdHRhY2htZW50cykge1xuICAgICAgICBhd2FpdCBmZXRjaEFsbEF0dGFjaG1lbnRzKHJlcy5kYXRhKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlcy5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3IuZG9jSWQgPSBpZDtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgLy8gRGVsZXRlIHRoZSBkb2N1bWVudCBnaXZlbiBieSBkb2MgZnJvbSB0aGUgZGF0YWJhc2UgZ2l2ZW4gYnkgaG9zdC5cbiAgYXBpLnJlbW92ZSA9IGFkYXB0ZXJGdW4kJDEoJ3JlbW92ZScsIGFzeW5jIGZ1bmN0aW9uIChkb2NPcklkLCBvcHRzT3JSZXYsIG9wdHMsIGNiKSB7XG4gICAgbGV0IGRvYztcbiAgICBpZiAodHlwZW9mIG9wdHNPclJldiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGlkLCByZXYsIG9wdHMsIGNhbGxiYWNrIHN0eWxlXG4gICAgICBkb2MgPSB7XG4gICAgICAgIF9pZDogZG9jT3JJZCxcbiAgICAgICAgX3Jldjogb3B0c09yUmV2XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNiID0gb3B0cztcbiAgICAgICAgb3B0cyA9IHt9O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkb2MsIG9wdHMsIGNhbGxiYWNrIHN0eWxlXG4gICAgICBkb2MgPSBkb2NPcklkO1xuICAgICAgaWYgKHR5cGVvZiBvcHRzT3JSZXYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBvcHRzT3JSZXY7XG4gICAgICAgIG9wdHMgPSB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNiID0gb3B0cztcbiAgICAgICAgb3B0cyA9IG9wdHNPclJldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXYkJDEgPSAoZG9jLl9yZXYgfHwgb3B0cy5yZXYpO1xuICAgIGNvbnN0IHVybCA9IGdlbkRCVXJsKGhvc3QsIGVuY29kZURvY0lkKGRvYy5faWQpKSArICc/cmV2PScgKyByZXYkJDE7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hKU09OKHVybCwge21ldGhvZDogJ0RFTEVURSd9KTtcbiAgICAgIGNiKG51bGwsIHJlc3VsdC5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2IoZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZW5jb2RlQXR0YWNobWVudElkKGF0dGFjaG1lbnRJZCkge1xuICAgIHJldHVybiBhdHRhY2htZW50SWQuc3BsaXQoXCIvXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBhdHRhY2htZW50XG4gIGFwaS5nZXRBdHRhY2htZW50ID0gYWRhcHRlckZ1biQkMSgnZ2V0QXR0YWNobWVudCcsIGFzeW5jIGZ1bmN0aW9uIChkb2NJZCwgYXR0YWNobWVudElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zID0gb3B0cy5yZXYgPyAoJz9yZXY9JyArIG9wdHMucmV2KSA6ICcnO1xuICAgIGNvbnN0IHVybCA9IGdlbkRCVXJsKGhvc3QsIGVuY29kZURvY0lkKGRvY0lkKSkgKyAnLycgK1xuICAgICAgICBlbmNvZGVBdHRhY2htZW50SWQoYXR0YWNobWVudElkKSArIHBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgb3VyRmV0Y2godXJsLCB7bWV0aG9kOiAnR0VUJ30pO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IHJlc3BvbnNlO1xuICAgICAgfVxuXG4gICAgICBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgIGxldCBibG9iO1xuICAgICAgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAhcHJvY2Vzcy5icm93c2VyICYmIHR5cGVvZiByZXNwb25zZS5idWZmZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJ1ZmZlcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogYWxzbyByZW1vdmVcbiAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXByb2Nlc3MuYnJvd3Nlcikge1xuICAgICAgICBjb25zdCB0eXBlRmllbGREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihibG9iLl9fcHJvdG9fXywgJ3R5cGUnKTtcbiAgICAgICAgaWYgKCF0eXBlRmllbGREZXNjcmlwdG9yIHx8IHR5cGVGaWVsZERlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgYmxvYi50eXBlID0gY29udGVudFR5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGJsb2IpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFJlbW92ZSB0aGUgYXR0YWNobWVudCBnaXZlbiBieSB0aGUgaWQgYW5kIHJldlxuICBhcGkucmVtb3ZlQXR0YWNobWVudCA9ICBhZGFwdGVyRnVuJCQxKCdyZW1vdmVBdHRhY2htZW50JywgYXN5bmMgZnVuY3Rpb24gKFxuICAgIGRvY0lkLFxuICAgIGF0dGFjaG1lbnRJZCxcbiAgICByZXYkJDEsXG4gICAgY2FsbGJhY2ssXG4gICkge1xuICAgIGNvbnN0IHVybCA9IGdlbkRCVXJsKGhvc3QsIGVuY29kZURvY0lkKGRvY0lkKSArICcvJyArIGVuY29kZUF0dGFjaG1lbnRJZChhdHRhY2htZW50SWQpKSArICc/cmV2PScgKyByZXYkJDE7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hKU09OKHVybCwge21ldGhvZDogJ0RFTEVURSd9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkIHRoZSBhdHRhY2htZW50IGdpdmVuIGJ5IGJsb2IgYW5kIGl0cyBjb250ZW50VHlwZSBwcm9wZXJ0eVxuICAvLyB0byB0aGUgZG9jdW1lbnQgd2l0aCB0aGUgZ2l2ZW4gaWQsIHRoZSByZXZpc2lvbiBnaXZlbiBieSByZXYsIGFuZFxuICAvLyBhZGQgaXQgdG8gdGhlIGRhdGFiYXNlIGdpdmVuIGJ5IGhvc3QuXG4gIGFwaS5wdXRBdHRhY2htZW50ID0gYWRhcHRlckZ1biQkMSgncHV0QXR0YWNobWVudCcsIGFzeW5jIGZ1bmN0aW9uIChcbiAgICBkb2NJZCxcbiAgICBhdHRhY2htZW50SWQsXG4gICAgcmV2JCQxLFxuICAgIGJsb2IsXG4gICAgdHlwZSxcbiAgICBjYWxsYmFjayxcbiAgKSB7XG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IHR5cGU7XG4gICAgICB0eXBlID0gYmxvYjtcbiAgICAgIGJsb2IgPSByZXYkJDE7XG4gICAgICByZXYkJDEgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGVuY29kZURvY0lkKGRvY0lkKSArICcvJyArIGVuY29kZUF0dGFjaG1lbnRJZChhdHRhY2htZW50SWQpO1xuICAgIGxldCB1cmwgPSBnZW5EQlVybChob3N0LCBpZCk7XG4gICAgaWYgKHJldiQkMSkge1xuICAgICAgdXJsICs9ICc/cmV2PScgKyByZXYkJDE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBibG9iID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gaW5wdXQgaXMgYXNzdW1lZCB0byBiZSBhIGJhc2U2NCBzdHJpbmdcbiAgICAgIGxldCBiaW5hcnk7XG4gICAgICB0cnkge1xuICAgICAgICBiaW5hcnkgPSB0aGlzQXRvYihibG9iKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soY3JlYXRlRXJyb3IoQkFEX0FSRyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdHRhY2htZW50IGlzIG5vdCBhIHZhbGlkIGJhc2U2NCBzdHJpbmcnKSk7XG4gICAgICB9XG4gICAgICBibG9iID0gYmluYXJ5ID8gYmluU3RyaW5nVG9CbHVmZmVyKGJpbmFyeSwgdHlwZSkgOiAnJztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gQWRkIHRoZSBhdHRhY2htZW50XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEpTT04odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IG5ldyBoKHsnQ29udGVudC1UeXBlJzogdHlwZX0pLFxuICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICBib2R5OiBibG9iXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVXBkYXRlL2NyZWF0ZSBtdWx0aXBsZSBkb2N1bWVudHMgZ2l2ZW4gYnkgcmVxIGluIHRoZSBkYXRhYmFzZVxuICAvLyBnaXZlbiBieSBob3N0LlxuICBhcGkuX2J1bGtEb2NzID0gYXN5bmMgZnVuY3Rpb24gKHJlcSwgb3B0cywgY2FsbGJhY2spIHtcbiAgICAvLyBJZiBuZXdfZWRpdHM9ZmFsc2UgdGhlbiBpdCBwcmV2ZW50cyB0aGUgZGF0YWJhc2UgZnJvbSBjcmVhdGluZ1xuICAgIC8vIG5ldyByZXZpc2lvbiBudW1iZXJzIGZvciB0aGUgZG9jdW1lbnRzLiBJbnN0ZWFkIGl0IGp1c3QgdXNlc1xuICAgIC8vIHRoZSBvbGQgb25lcy4gVGhpcyBpcyB1c2VkIGluIGRhdGFiYXNlIHJlcGxpY2F0aW9uLlxuICAgIHJlcS5uZXdfZWRpdHMgPSBvcHRzLm5ld19lZGl0cztcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXR1cCgpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVxLmRvY3MubWFwKHByZXByb2Nlc3NBdHRhY2htZW50cyQxKSk7XG5cbiAgICAgIC8vIFVwZGF0ZS9jcmVhdGUgdGhlIGRvY3VtZW50c1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hKU09OKGdlbkRCVXJsKGhvc3QsICdfYnVsa19kb2NzJyksIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcSlcbiAgICAgIH0pO1xuICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0LmRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIC8vIFVwZGF0ZS9jcmVhdGUgZG9jdW1lbnRcbiAgYXBpLl9wdXQgPSBhc3luYyBmdW5jdGlvbiAoZG9jLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZXR1cCgpO1xuICAgICAgYXdhaXQgcHJlcHJvY2Vzc0F0dGFjaG1lbnRzJDEoZG9jKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hKU09OKGdlbkRCVXJsKGhvc3QsIGVuY29kZURvY0lkKGRvYy5faWQpKSwge1xuICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkb2MpXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3IuZG9jSWQgPSBkb2MgJiYgZG9jLl9pZDtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gIH07XG5cblxuICAvLyBHZXQgYSBsaXN0aW5nIG9mIHRoZSBkb2N1bWVudHMgaW4gdGhlIGRhdGFiYXNlIGdpdmVuXG4gIC8vIGJ5IGhvc3QgYW5kIG9yZGVyZWQgYnkgaW5jcmVhc2luZyBpZC5cbiAgYXBpLmFsbERvY3MgPSBhZGFwdGVyRnVuJCQxKCdhbGxEb2NzJywgYXN5bmMgZnVuY3Rpb24gKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICBvcHRzID0ge307XG4gICAgfVxuICAgIG9wdHMgPSBjbG9uZShvcHRzKTtcblxuICAgIC8vIExpc3Qgb2YgcGFyYW1ldGVycyB0byBhZGQgdG8gdGhlIEdFVCByZXF1ZXN0XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgbGV0IGJvZHk7XG4gICAgbGV0IG1ldGhvZCA9ICdHRVQnO1xuXG4gICAgaWYgKG9wdHMuY29uZmxpY3RzKSB7XG4gICAgICBwYXJhbXMuY29uZmxpY3RzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAob3B0cy51cGRhdGVfc2VxKSB7XG4gICAgICBwYXJhbXMudXBkYXRlX3NlcSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVzY2VuZGluZykge1xuICAgICAgcGFyYW1zLmRlc2NlbmRpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmluY2x1ZGVfZG9jcykge1xuICAgICAgcGFyYW1zLmluY2x1ZGVfZG9jcyA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gYWRkZWQgaW4gQ291Y2hEQiAxLjYuMFxuICAgIGlmIChvcHRzLmF0dGFjaG1lbnRzKSB7XG4gICAgICBwYXJhbXMuYXR0YWNobWVudHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmtleSkge1xuICAgICAgcGFyYW1zLmtleSA9IEpTT04uc3RyaW5naWZ5KG9wdHMua2V5KTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zdGFydF9rZXkpIHtcbiAgICAgIG9wdHMuc3RhcnRrZXkgPSBvcHRzLnN0YXJ0X2tleTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zdGFydGtleSkge1xuICAgICAgcGFyYW1zLnN0YXJ0a2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0cy5zdGFydGtleSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5kX2tleSkge1xuICAgICAgb3B0cy5lbmRrZXkgPSBvcHRzLmVuZF9rZXk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5ka2V5KSB7XG4gICAgICBwYXJhbXMuZW5ka2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0cy5lbmRrZXkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5pbmNsdXNpdmVfZW5kICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmluY2x1c2l2ZV9lbmQgPSAhIW9wdHMuaW5jbHVzaXZlX2VuZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMubGltaXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMubGltaXQgPSBvcHRzLmxpbWl0O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0cy5za2lwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLnNraXAgPSBvcHRzLnNraXA7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1TdHIgPSBwYXJhbXNUb1N0cihwYXJhbXMpO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmtleXMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBtZXRob2QgPSAnUE9TVCc7XG4gICAgICBib2R5ID0ge2tleXM6IG9wdHMua2V5c307XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoSlNPTihnZW5EQlVybChob3N0LCAnX2FsbF9kb2NzJyArIHBhcmFtU3RyKSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpXG4gICAgICB9KTtcbiAgICAgIGlmIChvcHRzLmluY2x1ZGVfZG9jcyAmJiBvcHRzLmF0dGFjaG1lbnRzICYmIG9wdHMuYmluYXJ5KSB7XG4gICAgICAgIHJlc3VsdC5kYXRhLnJvd3MuZm9yRWFjaChyZWFkQXR0YWNobWVudHNBc0Jsb2JPckJ1ZmZlcik7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQuZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEdldCBhIGxpc3Qgb2YgY2hhbmdlcyBtYWRlIHRvIGRvY3VtZW50cyBpbiB0aGUgZGF0YWJhc2UgZ2l2ZW4gYnkgaG9zdC5cbiAgLy8gVE9ETyBBY2NvcmRpbmcgdG8gdGhlIFJFQURNRSwgdGhlcmUgc2hvdWxkIGJlIHR3byBvdGhlciBtZXRob2RzIGhlcmUsXG4gIC8vIGFwaS5jaGFuZ2VzLmFkZExpc3RlbmVyIGFuZCBhcGkuY2hhbmdlcy5yZW1vdmVMaXN0ZW5lci5cbiAgYXBpLl9jaGFuZ2VzID0gZnVuY3Rpb24gKG9wdHMpIHtcblxuICAgIC8vIFdlIGludGVybmFsbHkgcGFnZSB0aGUgcmVzdWx0cyBvZiBhIGNoYW5nZXMgcmVxdWVzdCwgdGhpcyBtZWFuc1xuICAgIC8vIGlmIHRoZXJlIGlzIGEgbGFyZ2Ugc2V0IG9mIGNoYW5nZXMgdG8gYmUgcmV0dXJuZWQgd2UgY2FuIHN0YXJ0XG4gICAgLy8gcHJvY2Vzc2luZyB0aGVtIHF1aWNrZXIgaW5zdGVhZCBvZiB3YWl0aW5nIG9uIHRoZSBlbnRpcmVcbiAgICAvLyBzZXQgb2YgY2hhbmdlcyB0byByZXR1cm4gYW5kIGF0dGVtcHRpbmcgdG8gcHJvY2VzcyB0aGVtIGF0IG9uY2VcbiAgICBjb25zdCBiYXRjaFNpemUgPSAnYmF0Y2hfc2l6ZScgaW4gb3B0cyA/IG9wdHMuYmF0Y2hfc2l6ZSA6IENIQU5HRVNfQkFUQ0hfU0laRTtcblxuICAgIG9wdHMgPSBjbG9uZShvcHRzKTtcblxuICAgIGlmIChvcHRzLmNvbnRpbnVvdXMgJiYgISgnaGVhcnRiZWF0JyBpbiBvcHRzKSkge1xuICAgICAgb3B0cy5oZWFydGJlYXQgPSBERUZBVUxUX0hFQVJUQkVBVDtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFRpbWVvdXQgPSAoJ3RpbWVvdXQnIGluIG9wdHMpID8gb3B0cy50aW1lb3V0IDogMzAgKiAxMDAwO1xuXG4gICAgLy8gZW5zdXJlIENIQU5HRVNfVElNRU9VVF9CVUZGRVIgYXBwbGllc1xuICAgIGlmICgndGltZW91dCcgaW4gb3B0cyAmJiBvcHRzLnRpbWVvdXQgJiZcbiAgICAgIChyZXF1ZXN0VGltZW91dCAtIG9wdHMudGltZW91dCkgPCBDSEFOR0VTX1RJTUVPVVRfQlVGRkVSKSB7XG4gICAgICAgIHJlcXVlc3RUaW1lb3V0ID0gb3B0cy50aW1lb3V0ICsgQ0hBTkdFU19USU1FT1VUX0JVRkZFUjtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJ2hlYXJ0YmVhdCcgaW4gb3B0cyAmJiBvcHRzLmhlYXJ0YmVhdCAmJlxuICAgICAgIChyZXF1ZXN0VGltZW91dCAtIG9wdHMuaGVhcnRiZWF0KSA8IENIQU5HRVNfVElNRU9VVF9CVUZGRVIpIHtcbiAgICAgICAgcmVxdWVzdFRpbWVvdXQgPSBvcHRzLmhlYXJ0YmVhdCArIENIQU5HRVNfVElNRU9VVF9CVUZGRVI7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgaWYgKCd0aW1lb3V0JyBpbiBvcHRzICYmIG9wdHMudGltZW91dCkge1xuICAgICAgcGFyYW1zLnRpbWVvdXQgPSBvcHRzLnRpbWVvdXQ7XG4gICAgfVxuXG4gICAgY29uc3QgbGltaXQgPSAodHlwZW9mIG9wdHMubGltaXQgIT09ICd1bmRlZmluZWQnKSA/IG9wdHMubGltaXQgOiBmYWxzZTtcbiAgICBsZXQgbGVmdFRvRmV0Y2ggPSBsaW1pdDtcblxuICAgIGlmIChvcHRzLnN0eWxlKSB7XG4gICAgICBwYXJhbXMuc3R5bGUgPSBvcHRzLnN0eWxlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmluY2x1ZGVfZG9jcyB8fCBvcHRzLmZpbHRlciAmJiB0eXBlb2Ygb3B0cy5maWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBhcmFtcy5pbmNsdWRlX2RvY3MgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmF0dGFjaG1lbnRzKSB7XG4gICAgICBwYXJhbXMuYXR0YWNobWVudHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmNvbnRpbnVvdXMpIHtcbiAgICAgIHBhcmFtcy5mZWVkID0gJ2xvbmdwb2xsJztcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zZXFfaW50ZXJ2YWwpIHtcbiAgICAgIHBhcmFtcy5zZXFfaW50ZXJ2YWwgPSBvcHRzLnNlcV9pbnRlcnZhbDtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5jb25mbGljdHMpIHtcbiAgICAgIHBhcmFtcy5jb25mbGljdHMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChvcHRzLmRlc2NlbmRpbmcpIHtcbiAgICAgIHBhcmFtcy5kZXNjZW5kaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAob3B0cy51cGRhdGVfc2VxKSB7XG4gICAgICBwYXJhbXMudXBkYXRlX3NlcSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCdoZWFydGJlYXQnIGluIG9wdHMpIHtcbiAgICAgIC8vIElmIHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgZmFsc2UsIGl0IGRpc2FibGVzIHRoZSBkZWZhdWx0IGhlYXJ0YmVhdFxuICAgICAgaWYgKG9wdHMuaGVhcnRiZWF0KSB7XG4gICAgICAgIHBhcmFtcy5oZWFydGJlYXQgPSBvcHRzLmhlYXJ0YmVhdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3B0cy5maWx0ZXIgJiYgdHlwZW9mIG9wdHMuZmlsdGVyID09PSAnc3RyaW5nJykge1xuICAgICAgcGFyYW1zLmZpbHRlciA9IG9wdHMuZmlsdGVyO1xuICAgIH1cblxuICAgIGlmIChvcHRzLnZpZXcgJiYgdHlwZW9mIG9wdHMudmlldyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhcmFtcy5maWx0ZXIgPSAnX3ZpZXcnO1xuICAgICAgcGFyYW1zLnZpZXcgPSBvcHRzLnZpZXc7XG4gICAgfVxuXG4gICAgLy8gSWYgb3B0cy5xdWVyeV9wYXJhbXMgZXhpc3RzLCBwYXNzIGl0IHRocm91Z2ggdG8gdGhlIGNoYW5nZXMgcmVxdWVzdC5cbiAgICAvLyBUaGVzZSBwYXJhbWV0ZXJzIG1heSBiZSB1c2VkIGJ5IHRoZSBmaWx0ZXIgb24gdGhlIHNvdXJjZSBkYXRhYmFzZS5cbiAgICBpZiAob3B0cy5xdWVyeV9wYXJhbXMgJiYgdHlwZW9mIG9wdHMucXVlcnlfcGFyYW1zID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbV9uYW1lIGluIG9wdHMucXVlcnlfcGFyYW1zKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0cy5xdWVyeV9wYXJhbXMsIHBhcmFtX25hbWUpKSB7XG4gICAgICAgICAgcGFyYW1zW3BhcmFtX25hbWVdID0gb3B0cy5xdWVyeV9wYXJhbXNbcGFyYW1fbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbWV0aG9kID0gJ0dFVCc7XG4gICAgbGV0IGJvZHk7XG5cbiAgICBpZiAob3B0cy5kb2NfaWRzKSB7XG4gICAgICAvLyBzZXQgdGhpcyBhdXRvbWFnaWNhbGx5IGZvciB0aGUgdXNlcjsgaXQncyBhbm5veWluZyB0aGF0IGNvdWNoZGJcbiAgICAgIC8vIHJlcXVpcmVzIGJvdGggYSBcImZpbHRlclwiIGFuZCBhIFwiZG9jX2lkc1wiIHBhcmFtLlxuICAgICAgcGFyYW1zLmZpbHRlciA9ICdfZG9jX2lkcyc7XG4gICAgICBtZXRob2QgPSAnUE9TVCc7XG4gICAgICBib2R5ID0ge2RvY19pZHM6IG9wdHMuZG9jX2lkcyB9O1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGVsc2UgaWYgKG9wdHMuc2VsZWN0b3IpIHtcbiAgICAgIC8vIHNldCB0aGlzIGF1dG9tYWdpY2FsbHkgZm9yIHRoZSB1c2VyLCBzaW1pbGFyIHRvIGFib3ZlXG4gICAgICBwYXJhbXMuZmlsdGVyID0gJ19zZWxlY3Rvcic7XG4gICAgICBtZXRob2QgPSAnUE9TVCc7XG4gICAgICBib2R5ID0ge3NlbGVjdG9yOiBvcHRzLnNlbGVjdG9yIH07XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgbGFzdEZldGNoZWRTZXE7XG5cbiAgICAvLyBHZXQgYWxsIHRoZSBjaGFuZ2VzIHN0YXJ0aW5nIHdpdGggdGhlIG9uZSBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgICAvLyBzZXF1ZW5jZSBudW1iZXIgZ2l2ZW4gYnkgc2luY2UuXG4gICAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgZnVuY3Rpb24gKHNpbmNlLCBjYWxsYmFjaykge1xuICAgICAgaWYgKG9wdHMuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwYXJhbXMuc2luY2UgPSBzaW5jZTtcbiAgICAgIC8vIFwic2luY2VcIiBjYW4gYmUgYW55IGtpbmQgb2YganNvbiBvYmplY3QgaW4gQ2xvdWRhbnQvQ291Y2hEQiAyLnhcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAodHlwZW9mIHBhcmFtcy5zaW5jZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBwYXJhbXMuc2luY2UgPSBKU09OLnN0cmluZ2lmeShwYXJhbXMuc2luY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5kZXNjZW5kaW5nKSB7XG4gICAgICAgIGlmIChsaW1pdCkge1xuICAgICAgICAgIHBhcmFtcy5saW1pdCA9IGxlZnRUb0ZldGNoO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJhbXMubGltaXQgPSAoIWxpbWl0IHx8IGxlZnRUb0ZldGNoID4gYmF0Y2hTaXplKSA/XG4gICAgICAgICAgYmF0Y2hTaXplIDogbGVmdFRvRmV0Y2g7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgb3B0aW9ucyBmb3IgdGhlIGFqYXggY2FsbFxuICAgICAgY29uc3QgdXJsID0gZ2VuREJVcmwoaG9zdCwgJ19jaGFuZ2VzJyArIHBhcmFtc1RvU3RyKHBhcmFtcykpO1xuICAgICAgY29uc3QgZmV0Y2hPcHRzID0ge1xuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpXG4gICAgICB9O1xuICAgICAgbGFzdEZldGNoZWRTZXEgPSBzaW5jZTtcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAob3B0cy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBjaGFuZ2VzXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZXR1cCgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEpTT04odXJsLCBmZXRjaE9wdHMpO1xuICAgICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQuZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIElmIG9wdHMuc2luY2UgZXhpc3RzLCBnZXQgYWxsIHRoZSBjaGFuZ2VzIGZyb20gdGhlIHNlcXVlbmNlXG4gICAgLy8gbnVtYmVyIGdpdmVuIGJ5IG9wdHMuc2luY2UuIE90aGVyd2lzZSwgZ2V0IGFsbCB0aGUgY2hhbmdlc1xuICAgIC8vIGZyb20gdGhlIHNlcXVlbmNlIG51bWJlciAwLlxuICAgIGNvbnN0IHJlc3VsdHMgPSB7cmVzdWx0czogW119O1xuXG4gICAgY29uc3QgZmV0Y2hlZCA9IGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgaWYgKG9wdHMuYWJvcnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcmF3X3Jlc3VsdHNfbGVuZ3RoID0gMDtcbiAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGFqYXggY2FsbCAocmVzKSBjb250YWlucyBjaGFuZ2VzIChyZXMucmVzdWx0cylcbiAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdHMpIHtcbiAgICAgICAgcmF3X3Jlc3VsdHNfbGVuZ3RoID0gcmVzLnJlc3VsdHMubGVuZ3RoO1xuICAgICAgICByZXN1bHRzLmxhc3Rfc2VxID0gcmVzLmxhc3Rfc2VxO1xuICAgICAgICBsZXQgcGVuZGluZyA9IG51bGw7XG4gICAgICAgIGxldCBsYXN0U2VxID0gbnVsbDtcbiAgICAgICAgLy8gQXR0YWNoICdwZW5kaW5nJyBwcm9wZXJ0eSBpZiBzZXJ2ZXIgc3VwcG9ydHMgaXQgKENvdWNoREIgMi4wKylcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmICh0eXBlb2YgcmVzLnBlbmRpbmcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHJlcy5wZW5kaW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcmVzdWx0cy5sYXN0X3NlcSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHJlc3VsdHMubGFzdF9zZXEgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbGFzdFNlcSA9IHJlc3VsdHMubGFzdF9zZXE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIGVhY2ggY2hhbmdlXG4gICAgICAgIGNvbnN0IHJlcSA9IHt9O1xuICAgICAgICByZXEucXVlcnkgPSBvcHRzLnF1ZXJ5X3BhcmFtcztcbiAgICAgICAgcmVzLnJlc3VsdHMgPSByZXMucmVzdWx0cy5maWx0ZXIoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICBsZWZ0VG9GZXRjaC0tO1xuICAgICAgICAgIGNvbnN0IHJldCA9IGZpbHRlckNoYW5nZShvcHRzKShjKTtcbiAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICBpZiAob3B0cy5pbmNsdWRlX2RvY3MgJiYgb3B0cy5hdHRhY2htZW50cyAmJiBvcHRzLmJpbmFyeSkge1xuICAgICAgICAgICAgICByZWFkQXR0YWNobWVudHNBc0Jsb2JPckJ1ZmZlcihjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRzLnJldHVybl9kb2NzKSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0cy5wdXNoKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0cy5vbkNoYW5nZShjLCBwZW5kaW5nLCBsYXN0U2VxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGVycikge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGVycm9yLCBzdG9wIGxpc3RlbmluZyBmb3IgY2hhbmdlcyBhbmQgY2FsbFxuICAgICAgICAvLyBvcHRzLmNvbXBsZXRlXG4gICAgICAgIG9wdHMuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIG9wdHMuY29tcGxldGUoZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY2hhbmdlcyBmZWVkIG1heSBoYXZlIHRpbWVkIG91dCB3aXRoIG5vIHJlc3VsdHNcbiAgICAgIC8vIGlmIHNvIHJldXNlIGxhc3QgdXBkYXRlIHNlcXVlbmNlXG4gICAgICBpZiAocmVzICYmIHJlcy5sYXN0X3NlcSkge1xuICAgICAgICBsYXN0RmV0Y2hlZFNlcSA9IHJlcy5sYXN0X3NlcTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmluaXNoZWQgPSAobGltaXQgJiYgbGVmdFRvRmV0Y2ggPD0gMCkgfHxcbiAgICAgICAgKHJlcyAmJiByYXdfcmVzdWx0c19sZW5ndGggPCBiYXRjaFNpemUpIHx8XG4gICAgICAgIChvcHRzLmRlc2NlbmRpbmcpO1xuXG4gICAgICBpZiAoKG9wdHMuY29udGludW91cyAmJiAhKGxpbWl0ICYmIGxlZnRUb0ZldGNoIDw9IDApKSB8fCAhZmluaXNoZWQpIHtcbiAgICAgICAgLy8gUXVldWUgYSBjYWxsIHRvIGZldGNoIGFnYWluIHdpdGggdGhlIG5ld2VzdCBzZXF1ZW5jZSBudW1iZXJcbiAgICAgICAgbmV4dFRpY2soZnVuY3Rpb24gKCkgeyBmZXRjaERhdGEobGFzdEZldGNoZWRTZXEsIGZldGNoZWQpOyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlJ3JlIGRvbmUsIGNhbGwgdGhlIGNhbGxiYWNrXG4gICAgICAgIG9wdHMuY29tcGxldGUobnVsbCwgcmVzdWx0cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZldGNoRGF0YShvcHRzLnNpbmNlIHx8IDAsIGZldGNoZWQpO1xuXG4gICAgLy8gUmV0dXJuIGEgbWV0aG9kIHRvIGNhbmNlbCB0aGlzIG1ldGhvZCBmcm9tIHByb2Nlc3NpbmcgYW55IG1vcmVcbiAgICByZXR1cm4ge1xuICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wdHMuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIC8vIEdpdmVuIGEgc2V0IG9mIGRvY3VtZW50L3JldmlzaW9uIElEcyAoZ2l2ZW4gYnkgcmVxKSwgdGV0cyB0aGUgc3Vic2V0IG9mXG4gIC8vIHRob3NlIHRoYXQgZG8gTk9UIGNvcnJlc3BvbmQgdG8gcmV2aXNpb25zIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UuXG4gIC8vIFNlZSBodHRwOi8vd2lraS5hcGFjaGUub3JnL2NvdWNoZGIvSHR0cFBvc3RSZXZzRGlmZlxuICBhcGkucmV2c0RpZmYgPSBhZGFwdGVyRnVuJCQxKCdyZXZzRGlmZicsIGFzeW5jIGZ1bmN0aW9uIChyZXEsIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgLy8gSWYgbm8gb3B0aW9ucyB3ZXJlIGdpdmVuLCBzZXQgdGhlIGNhbGxiYWNrIHRvIGJlIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgICBvcHRzID0ge307XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCB0aGUgbWlzc2luZyBkb2N1bWVudC9yZXZpc2lvbiBJRHNcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoSlNPTihnZW5EQlVybChob3N0LCAnX3JldnNfZGlmZicpLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXEpXG4gICAgICB9KTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdC5kYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgYXBpLl9jbG9zZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKCk7XG4gIH07XG5cbiAgYXBpLl9kZXN0cm95ID0gYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBmZXRjaEpTT04oZ2VuREJVcmwoaG9zdCwgJycpLCB7bWV0aG9kOiAnREVMRVRFJ30pO1xuICAgICAgY2FsbGJhY2sobnVsbCwganNvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICBjYWxsYmFjayhudWxsLCB7b2s6IHRydWV9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8vIEh0dHBQb3VjaCBpcyBhIHZhbGlkIGFkYXB0ZXIuXG5IdHRwUG91Y2gudmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZnVuY3Rpb24gSHR0cFBvdWNoJDEgKFBvdWNoREIpIHtcbiAgUG91Y2hEQi5hZGFwdGVyKCdodHRwJywgSHR0cFBvdWNoLCBmYWxzZSk7XG4gIFBvdWNoREIuYWRhcHRlcignaHR0cHMnLCBIdHRwUG91Y2gsIGZhbHNlKTtcbn1cblxuY2xhc3MgUXVlcnlQYXJzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0YXR1cyA9IDQwMDtcbiAgICB0aGlzLm5hbWUgPSAncXVlcnlfcGFyc2VfZXJyb3InO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFF1ZXJ5UGFyc2VFcnJvcik7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5jbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN0YXR1cyA9IDQwNDtcbiAgICB0aGlzLm5hbWUgPSAnbm90X2ZvdW5kJztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RGb3VuZEVycm9yKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG59XG5cbmNsYXNzIEJ1aWx0SW5FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdGF0dXMgPSA1MDA7XG4gICAgdGhpcy5uYW1lID0gJ2ludmFsaWRfdmFsdWUnO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvciA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEJ1aWx0SW5FcnJvcik7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9taXNlZENhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjaykge1xuICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlcyk7XG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNhbGxiYWNrKHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gY2FsbGJhY2tpZnkoZnVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIHZhciBjYiA9IGFyZ3MucG9wKCk7XG4gICAgdmFyIHByb21pc2UgPSBmdW4uYXBwbHkodGhpcywgYXJncyk7XG4gICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvbWlzZWRDYWxsYmFjayhwcm9taXNlLCBjYik7XG4gICAgfVxuICAgIHJldHVybiBwcm9taXNlO1xuICB9O1xufVxuXG4vLyBQcm9taXNlIGZpbmFsbHkgdXRpbCBzaW1pbGFyIHRvIFEuZmluYWxseVxuZnVuY3Rpb24gZmluKHByb21pc2UsIGZpbmFsUHJvbWlzZUZhY3RvcnkpIHtcbiAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgcmV0dXJuIGZpbmFsUHJvbWlzZUZhY3RvcnkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICByZXR1cm4gZmluYWxQcm9taXNlRmFjdG9yeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2VxdWVudGlhbGl6ZShxdWV1ZSwgcHJvbWlzZUZhY3RvcnkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHF1ZXVlLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZUZhY3RvcnkuYXBwbHkodGhhdCwgYXJncyk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8vIHVuaXEgYW4gYXJyYXkgb2Ygc3RyaW5ncywgb3JkZXIgbm90IGd1YXJhbnRlZWRcbi8vIHNpbWlsYXIgdG8gdW5kZXJzY29yZS9sb2Rhc2ggXy51bmlxXG5mdW5jdGlvbiB1bmlxKGFycikge1xuICB2YXIgdGhlU2V0ID0gbmV3IFNldChhcnIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KHRoZVNldC5zaXplKTtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHRoZVNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbWFwVG9LZXlzQXJyYXkobWFwKSB7XG4gIHZhciByZXN1bHQgPSBuZXcgQXJyYXkobWFwLnNpemUpO1xuICB2YXIgaW5kZXggPSAtMTtcbiAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBrZXk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWlsdEluRXJyb3IobmFtZSkge1xuICB2YXIgbWVzc2FnZSA9ICdidWlsdGluICcgKyBuYW1lICtcbiAgICAnIGZ1bmN0aW9uIHJlcXVpcmVzIG1hcCB2YWx1ZXMgdG8gYmUgbnVtYmVycycgK1xuICAgICcgb3IgbnVtYmVyIGFycmF5cyc7XG4gIHJldHVybiBuZXcgQnVpbHRJbkVycm9yKG1lc3NhZ2UpO1xufVxuXG5mdW5jdGlvbiBzdW0odmFsdWVzKSB7XG4gIHZhciByZXN1bHQgPSAwO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIG51bSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIG51bSAhPT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG51bSkpIHtcbiAgICAgICAgLy8gbGlzdHMgb2YgbnVtYmVycyBhcmUgYWxzbyBhbGxvd2VkLCBzdW0gdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHJlc3VsdCA9IHR5cGVvZiByZXN1bHQgPT09ICdudW1iZXInID8gW3Jlc3VsdF0gOiByZXN1bHQ7XG4gICAgICAgIGZvciAodmFyIGogPSAwLCBqTGVuID0gbnVtLmxlbmd0aDsgaiA8IGpMZW47IGorKykge1xuICAgICAgICAgIHZhciBqTnVtID0gbnVtW2pdO1xuICAgICAgICAgIGlmICh0eXBlb2Ygak51bSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZUJ1aWx0SW5FcnJvcignX3N1bScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFtqXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGpOdW0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbal0gKz0gak51bTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7IC8vIG5vdCBhcnJheS9udW1iZXJcbiAgICAgICAgdGhyb3cgY3JlYXRlQnVpbHRJbkVycm9yKCdfc3VtJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnbnVtYmVyJykge1xuICAgICAgcmVzdWx0ICs9IG51bTtcbiAgICB9IGVsc2UgeyAvLyBhZGQgbnVtYmVyIHRvIGFycmF5XG4gICAgICByZXN1bHRbMF0gKz0gbnVtO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgbG9nID0gZ3VhcmRlZENvbnNvbGUuYmluZChudWxsLCAnbG9nJyk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgdG9KU09OID0gSlNPTi5wYXJzZTtcblxuZnVuY3Rpb24gZXZhbEZ1bmN0aW9uV2l0aEV2YWwoZnVuYywgZW1pdCkge1xuICByZXR1cm4gc2NvcGVFdmFsKFxuICAgIFwicmV0dXJuIChcIiArIGZ1bmMucmVwbGFjZSgvO1xccyokLywgXCJcIikgKyBcIik7XCIsXG4gICAge1xuICAgICAgZW1pdCxcbiAgICAgIHN1bSxcbiAgICAgIGxvZyxcbiAgICAgIGlzQXJyYXksXG4gICAgICB0b0pTT05cbiAgICB9XG4gICk7XG59XG5cbi8qXG4gKiBTaW1wbGUgdGFzayBxdWV1ZSB0byBzZXF1ZW50aWFsaXplIGFjdGlvbnMuIEFzc3VtZXNcbiAqIGNhbGxiYWNrcyB3aWxsIGV2ZW50dWFsbHkgZmlyZSAob25jZSkuXG4gKi9cblxuY2xhc3MgVGFza1F1ZXVlJDEge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIGFkZChwcm9taXNlRmFjdG9yeSkge1xuICAgIHRoaXMucHJvbWlzZSA9IHRoaXMucHJvbWlzZVxuICAgICAgLy8ganVzdCByZWNvdmVyXG4gICAgICAuY2F0Y2goKCkgPT4geyB9KVxuICAgICAgLnRoZW4oKCkgPT4gcHJvbWlzZUZhY3RvcnkoKSk7XG4gICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgfVxuXG4gIGZpbmlzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShpbnB1dCkge1xuICBpZiAoIWlucHV0KSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnOyAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBlbXB0eSByZWR1Y2VcbiAgfVxuICAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdCB3aXRoIG1hcHJlZHVjZSwgZnVuY3Rpb25zL3N0cmluZ3MgYXJlIHN0cmluZ2lmaWVkXG4gIC8vIGFzLWlzLiBldmVyeXRoaW5nIGVsc2UgaXMgSlNPTi1zdHJpbmdpZmllZC5cbiAgc3dpdGNoICh0eXBlb2YgaW5wdXQpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAvLyBlLmcuIGEgbWFwcmVkdWNlIG1hcFxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIC8vIGUuZy4gYSBtYXByZWR1Y2UgYnVpbHQtaW4gX3JlZHVjZSBmdW5jdGlvblxuICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGUuZy4gYSBKU09OIG9iamVjdCBpbiB0aGUgY2FzZSBvZiBtYW5nbyBxdWVyaWVzXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5wdXQpO1xuICB9XG59XG5cbi8qIGNyZWF0ZSBhIHN0cmluZyBzaWduYXR1cmUgZm9yIGEgdmlldyBzbyB3ZSBjYW4gY2FjaGUgaXQgYW5kIHVuaXEgaXQgKi9cbmZ1bmN0aW9uIGNyZWF0ZVZpZXdTaWduYXR1cmUobWFwRnVuLCByZWR1Y2VGdW4pIHtcbiAgLy8gdGhlIFwidW5kZWZpbmVkXCIgcGFydCBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgcmV0dXJuIHN0cmluZ2lmeShtYXBGdW4pICsgc3RyaW5naWZ5KHJlZHVjZUZ1bikgKyAndW5kZWZpbmVkJztcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVmlldyhzb3VyY2VEQiwgdmlld05hbWUsIG1hcEZ1biwgcmVkdWNlRnVuLCB0ZW1wb3JhcnksIGxvY2FsRG9jTmFtZSkge1xuICBjb25zdCB2aWV3U2lnbmF0dXJlID0gY3JlYXRlVmlld1NpZ25hdHVyZShtYXBGdW4sIHJlZHVjZUZ1bik7XG5cbiAgbGV0IGNhY2hlZFZpZXdzO1xuICBpZiAoIXRlbXBvcmFyeSkge1xuICAgIC8vIGNhY2hlIHRoaXMgdG8gZW5zdXJlIHdlIGRvbid0IHRyeSB0byB1cGRhdGUgdGhlIHNhbWUgdmlldyB0d2ljZVxuICAgIGNhY2hlZFZpZXdzID0gc291cmNlREIuX2NhY2hlZFZpZXdzID0gc291cmNlREIuX2NhY2hlZFZpZXdzIHx8IHt9O1xuICAgIGlmIChjYWNoZWRWaWV3c1t2aWV3U2lnbmF0dXJlXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZFZpZXdzW3ZpZXdTaWduYXR1cmVdO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByb21pc2VGb3JWaWV3ID0gc291cmNlREIuaW5mbygpLnRoZW4oYXN5bmMgZnVuY3Rpb24gKGluZm8pIHtcbiAgICBjb25zdCBkZXBEYk5hbWUgPSBpbmZvLmRiX25hbWUgKyAnLW1ydmlldy0nICtcbiAgICAodGVtcG9yYXJ5ID8gJ3RlbXAnIDogc3RyaW5nTWQ1KHZpZXdTaWduYXR1cmUpKTtcblxuICAgIC8vIHNhdmUgdGhlIHZpZXcgbmFtZSBpbiB0aGUgc291cmNlIGRiIHNvIGl0IGNhbiBiZSBjbGVhbmVkIHVwIGlmIG5lY2Vzc2FyeVxuICAgIC8vIChlLmcuIHdoZW4gdGhlIF9kZXNpZ24gZG9jIGlzIGRlbGV0ZWQsIHJlbW92ZSBhbGwgYXNzb2NpYXRlZCB2aWV3IGRhdGEpXG4gICAgZnVuY3Rpb24gZGlmZkZ1bmN0aW9uKGRvYykge1xuICAgICAgZG9jLnZpZXdzID0gZG9jLnZpZXdzIHx8IHt9O1xuICAgICAgbGV0IGZ1bGxWaWV3TmFtZSA9IHZpZXdOYW1lO1xuICAgICAgaWYgKGZ1bGxWaWV3TmFtZS5pbmRleE9mKCcvJykgPT09IC0xKSB7XG4gICAgICAgIGZ1bGxWaWV3TmFtZSA9IHZpZXdOYW1lICsgJy8nICsgdmlld05hbWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkZXBEYnMgPSBkb2Mudmlld3NbZnVsbFZpZXdOYW1lXSA9IGRvYy52aWV3c1tmdWxsVmlld05hbWVdIHx8IHt9O1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZGVwRGJzW2RlcERiTmFtZV0pIHtcbiAgICAgICAgcmV0dXJuOyAvLyBubyB1cGRhdGUgbmVjZXNzYXJ5XG4gICAgICB9XG4gICAgICBkZXBEYnNbZGVwRGJOYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZG9jO1xuICAgIH1cbiAgICBhd2FpdCB1cHNlcnQoc291cmNlREIsICdfbG9jYWwvJyArIGxvY2FsRG9jTmFtZSwgZGlmZkZ1bmN0aW9uKTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBzb3VyY2VEQi5yZWdpc3RlckRlcGVuZGVudERhdGFiYXNlKGRlcERiTmFtZSk7XG4gICAgY29uc3QgZGIgPSByZXMuZGI7XG4gICAgZGIuYXV0b19jb21wYWN0aW9uID0gdHJ1ZTtcbiAgICBjb25zdCB2aWV3ID0ge1xuICAgICAgbmFtZTogZGVwRGJOYW1lLFxuICAgICAgZGIsXG4gICAgICBzb3VyY2VEQixcbiAgICAgIGFkYXB0ZXI6IHNvdXJjZURCLmFkYXB0ZXIsXG4gICAgICBtYXBGdW4sXG4gICAgICByZWR1Y2VGdW5cbiAgICB9O1xuXG4gICAgbGV0IGxhc3RTZXFEb2M7XG4gICAgdHJ5IHtcbiAgICAgIGxhc3RTZXFEb2MgPSBhd2FpdCB2aWV3LmRiLmdldCgnX2xvY2FsL2xhc3RTZXEnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZXJyLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2aWV3LnNlcSA9IGxhc3RTZXFEb2MgPyBsYXN0U2VxRG9jLnNlcSA6IDA7XG4gICAgaWYgKGNhY2hlZFZpZXdzKSB7XG4gICAgICB2aWV3LmRiLm9uY2UoJ2Rlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVsZXRlIGNhY2hlZFZpZXdzW3ZpZXdTaWduYXR1cmVdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2aWV3O1xuICB9KTtcblxuICBpZiAoY2FjaGVkVmlld3MpIHtcbiAgICBjYWNoZWRWaWV3c1t2aWV3U2lnbmF0dXJlXSA9IHByb21pc2VGb3JWaWV3O1xuICB9XG4gIHJldHVybiBwcm9taXNlRm9yVmlldztcbn1cblxuY29uc3QgcGVyc2lzdGVudFF1ZXVlcyA9IHt9O1xuY29uc3QgdGVtcFZpZXdRdWV1ZSA9IG5ldyBUYXNrUXVldWUkMSgpO1xuY29uc3QgQ0hBTkdFU19CQVRDSF9TSVpFJDEgPSA1MDtcblxuZnVuY3Rpb24gcGFyc2VWaWV3TmFtZShuYW1lKSB7XG4gIC8vIGNhbiBiZSBlaXRoZXIgJ2Rkb2NuYW1lL3ZpZXduYW1lJyBvciBqdXN0ICd2aWV3bmFtZSdcbiAgLy8gKHdoZXJlIHRoZSBkZG9jIG5hbWUgaXMgdGhlIHNhbWUpXG4gIHJldHVybiBuYW1lLmluZGV4T2YoJy8nKSA9PT0gLTEgPyBbbmFtZSwgbmFtZV0gOiBuYW1lLnNwbGl0KCcvJyk7XG59XG5cbmZ1bmN0aW9uIGlzR2VuT25lKGNoYW5nZXMpIHtcbiAgLy8gb25seSByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBjaGFuZ2UgaXMgMS1cbiAgLy8gYW5kIHRoZXJlIGFyZSBubyBvdGhlciBsZWFmc1xuICByZXR1cm4gY2hhbmdlcy5sZW5ndGggPT09IDEgJiYgL14xLS8udGVzdChjaGFuZ2VzWzBdLnJldik7XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvcihkYiwgZSwgZGF0YSkge1xuICB0cnkge1xuICAgIGRiLmVtaXQoJ2Vycm9yJywgZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGd1YXJkZWRDb25zb2xlKCdlcnJvcicsXG4gICAgICAnVGhlIHVzZXJcXCdzIG1hcC9yZWR1Y2UgZnVuY3Rpb24gdGhyZXcgYW4gdW5jYXVnaHQgZXJyb3IuXFxuJyArXG4gICAgICAnWW91IGNhbiBkZWJ1ZyB0aGlzIGVycm9yIGJ5IGRvaW5nOlxcbicgK1xuICAgICAgJ215RGF0YWJhc2Uub24oXFwnZXJyb3JcXCcsIGZ1bmN0aW9uIChlcnIpIHsgZGVidWdnZXI7IH0pO1xcbicgK1xuICAgICAgJ1BsZWFzZSBkb3VibGUtY2hlY2sgeW91ciBtYXAvcmVkdWNlIGZ1bmN0aW9uLicpO1xuICAgIGd1YXJkZWRDb25zb2xlKCdlcnJvcicsIGUsIGRhdGEpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhbiBcImFic3RyYWN0XCIgbWFwcmVkdWNlIG9iamVjdCBvZiB0aGUgZm9ybTpcbiAqXG4gKiAgIHtcbiAqICAgICBxdWVyeTogcXVlcnlGdW4sXG4gKiAgICAgdmlld0NsZWFudXA6IHZpZXdDbGVhbnVwRnVuXG4gKiAgIH1cbiAqXG4gKiBBcmd1bWVudHMgYXJlOlxuICpcbiAqIGxvY2FsRG9jOiBzdHJpbmdcbiAqICAgVGhpcyBpcyBmb3IgdGhlIGxvY2FsIGRvYyB0aGF0IGdldHMgc2F2ZWQgaW4gb3JkZXIgdG8gdHJhY2sgdGhlXG4gKiAgIFwiZGVwZW5kZW50XCIgREJzIGFuZCBjbGVhbiB0aGVtIHVwIGZvciB2aWV3Q2xlYW51cC4gSXQgc2hvdWxkIGJlXG4gKiAgIHVuaXF1ZSwgc28gdGhhdCBpbmRleGVyIHBsdWdpbnMgZG9uJ3QgY29sbGlkZSB3aXRoIGVhY2ggb3RoZXIuXG4gKiBtYXBwZXI6IGZ1bmN0aW9uIChtYXBGdW5EZWYsIGVtaXQpXG4gKiAgIFJldHVybnMgYSBtYXAgZnVuY3Rpb24gYmFzZWQgb24gdGhlIG1hcEZ1bkRlZiwgd2hpY2ggaW4gdGhlIGNhc2Ugb2ZcbiAqICAgbm9ybWFsIG1hcC9yZWR1Y2UgaXMganVzdCB0aGUgZGUtc3RyaW5naWZpZWQgZnVuY3Rpb24sIGJ1dCBtYXkgYmVcbiAqICAgc29tZXRoaW5nIGVsc2UsIHN1Y2ggYXMgYW4gb2JqZWN0IGluIHRoZSBjYXNlIG9mIHBvdWNoZGItZmluZC5cbiAqIHJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VGdW5EZWYpXG4gKiAgIERpdHRvLCBidXQgZm9yIHJlZHVjaW5nLiBNb2R1bGVzIGRvbid0IGhhdmUgdG8gc3VwcG9ydCByZWR1Y2luZ1xuICogICAoZS5nLiBwb3VjaGRiLWZpbmQpLlxuICogZGRvY1ZhbGlkYXRvcjogZnVuY3Rpb24gKGRkb2MsIHZpZXdOYW1lKVxuICogICBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIGRkb2Mgb3Igdmlld05hbWUgaXMgbm90IHZhbGlkLlxuICogICBUaGlzIGNvdWxkIGJlIGEgd2F5IHRvIGNvbW11bmljYXRlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZVxuICogICBpbmRleGVyIGlzIGludmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUFic3RyYWN0TWFwUmVkdWNlKGxvY2FsRG9jTmFtZSwgbWFwcGVyLCByZWR1Y2VyLCBkZG9jVmFsaWRhdG9yKSB7XG5cbiAgZnVuY3Rpb24gdHJ5TWFwKGRiLCBmdW4sIGRvYykge1xuICAgIC8vIGVtaXQgYW4gZXZlbnQgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHRocm93biBieSBhIG1hcCBmdW5jdGlvbi5cbiAgICAvLyBwdXR0aW5nIHRyeS9jYXRjaGVzIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGFsc28gYXZvaWRzIGRlb3B0aW1pemF0aW9ucy5cbiAgICB0cnkge1xuICAgICAgZnVuKGRvYyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZW1pdEVycm9yKGRiLCBlLCB7ZnVuLCBkb2N9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnlSZWR1Y2UoZGIsIGZ1biwga2V5cywgdmFsdWVzLCByZXJlZHVjZSkge1xuICAgIC8vIHNhbWUgYXMgYWJvdmUsIGJ1dCByZXR1cm5pbmcgdGhlIHJlc3VsdCBvciBhbiBlcnJvci4gdGhlcmUgYXJlIHR3byBzZXBhcmF0ZVxuICAgIC8vIGZ1bmN0aW9ucyB0byBhdm9pZCBleHRyYSBtZW1vcnkgYWxsb2NhdGlvbnMgc2luY2UgdGhlIHRyeUNvZGUoKSBjYXNlIGlzIHVzZWRcbiAgICAvLyBmb3IgY3VzdG9tIG1hcCBmdW5jdGlvbnMgKGNvbW1vbikgdnMgdGhpcyBmdW5jdGlvbiwgd2hpY2ggaXMgb25seSB1c2VkIGZvclxuICAgIC8vIGN1c3RvbSByZWR1Y2UgZnVuY3Rpb25zIChyYXJlKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge291dHB1dCA6IGZ1bihrZXlzLCB2YWx1ZXMsIHJlcmVkdWNlKX07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZW1pdEVycm9yKGRiLCBlLCB7ZnVuLCBrZXlzLCB2YWx1ZXMsIHJlcmVkdWNlfSk7XG4gICAgICByZXR1cm4ge2Vycm9yOiBlfTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzb3J0QnlLZXlUaGVuVmFsdWUoeCwgeSkge1xuICAgIGNvbnN0IGtleUNvbXBhcmUgPSBjb2xsYXRlKHgua2V5LCB5LmtleSk7XG4gICAgcmV0dXJuIGtleUNvbXBhcmUgIT09IDAgPyBrZXlDb21wYXJlIDogY29sbGF0ZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWNlUmVzdWx0cyhyZXN1bHRzLCBsaW1pdCwgc2tpcCkge1xuICAgIHNraXAgPSBza2lwIHx8IDA7XG4gICAgaWYgKHR5cGVvZiBsaW1pdCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiByZXN1bHRzLnNsaWNlKHNraXAsIGxpbWl0ICsgc2tpcCk7XG4gICAgfSBlbHNlIGlmIChza2lwID4gMCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHMuc2xpY2Uoc2tpcCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgZnVuY3Rpb24gcm93VG9Eb2NJZChyb3cpIHtcbiAgICBjb25zdCB2YWwgPSByb3cudmFsdWU7XG4gICAgLy8gVXNlcnMgY2FuIGV4cGxpY2l0bHkgc3BlY2lmeSBhIGpvaW5lZCBkb2MgX2lkLCBvciBpdFxuICAgIC8vIGRlZmF1bHRzIHRvIHRoZSBkb2MgX2lkIHRoYXQgZW1pdHRlZCB0aGUga2V5L3ZhbHVlLlxuICAgIGNvbnN0IGRvY0lkID0gKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwuX2lkKSB8fCByb3cuaWQ7XG4gICAgcmV0dXJuIGRvY0lkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVhZEF0dGFjaG1lbnRzQXNCbG9iT3JCdWZmZXIocmVzKSB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgcmVzLnJvd3MpIHtcbiAgICAgIGNvbnN0IGF0dHMgPSByb3cuZG9jICYmIHJvdy5kb2MuX2F0dGFjaG1lbnRzO1xuICAgICAgaWYgKCFhdHRzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBPYmplY3Qua2V5cyhhdHRzKSkge1xuICAgICAgICBjb25zdCBhdHQgPSBhdHRzW2ZpbGVuYW1lXTtcbiAgICAgICAgYXR0c1tmaWxlbmFtZV0uZGF0YSA9IGI2NFRvQmx1ZmZlcihhdHQuZGF0YSwgYXR0LmNvbnRlbnRfdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcG9zdHByb2Nlc3NBdHRhY2htZW50cyhvcHRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXMpIHtcbiAgICAgIGlmIChvcHRzLmluY2x1ZGVfZG9jcyAmJiBvcHRzLmF0dGFjaG1lbnRzICYmIG9wdHMuYmluYXJ5KSB7XG4gICAgICAgIHJlYWRBdHRhY2htZW50c0FzQmxvYk9yQnVmZmVyKHJlcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIdHRwUGFyYW0ocGFyYW1OYW1lLCBvcHRzLCBwYXJhbXMsIGFzSnNvbikge1xuICAgIC8vIGFkZCBhbiBodHRwIHBhcmFtIGZyb20gb3B0cyB0byBwYXJhbXMsIG9wdGlvbmFsbHkganNvbi1lbmNvZGVkXG4gICAgbGV0IHZhbCA9IG9wdHNbcGFyYW1OYW1lXTtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChhc0pzb24pIHtcbiAgICAgICAgdmFsID0gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHZhbCkpO1xuICAgICAgfVxuICAgICAgcGFyYW1zLnB1c2gocGFyYW1OYW1lICsgJz0nICsgdmFsKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb2VyY2VJbnRlZ2VyKGludGVnZXJDYW5kaWRhdGUpIHtcbiAgICBpZiAodHlwZW9mIGludGVnZXJDYW5kaWRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBhc051bWJlciA9IE51bWJlcihpbnRlZ2VyQ2FuZGlkYXRlKTtcbiAgICAgIC8vIHByZXZlbnRzIGUuZy4gJzFmb28nIG9yICcxLjEnIGJlaW5nIGNvZXJjZWQgdG8gMVxuICAgICAgaWYgKCFpc05hTihhc051bWJlcikgJiYgYXNOdW1iZXIgPT09IHBhcnNlSW50KGludGVnZXJDYW5kaWRhdGUsIDEwKSkge1xuICAgICAgICByZXR1cm4gYXNOdW1iZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW50ZWdlckNhbmRpZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjb2VyY2VPcHRpb25zKG9wdHMpIHtcbiAgICBvcHRzLmdyb3VwX2xldmVsID0gY29lcmNlSW50ZWdlcihvcHRzLmdyb3VwX2xldmVsKTtcbiAgICBvcHRzLmxpbWl0ID0gY29lcmNlSW50ZWdlcihvcHRzLmxpbWl0KTtcbiAgICBvcHRzLnNraXAgPSBjb2VyY2VJbnRlZ2VyKG9wdHMuc2tpcCk7XG4gICAgcmV0dXJuIG9wdHM7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja1Bvc2l0aXZlSW50ZWdlcihudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyKSB7XG4gICAgICBpZiAodHlwZW9mIG51bWJlciAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuICBuZXcgUXVlcnlQYXJzZUVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBpbnRlZ2VyOiBcIiR7bnVtYmVyfVwiYCk7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXJ5UGFyc2VFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3IgcG9zaXRpdmUgaW50ZWdlcjogXCIke251bWJlcn1cImApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrUXVlcnlQYXJzZUVycm9yKG9wdGlvbnMsIGZ1bikge1xuICAgIGNvbnN0IHN0YXJ0a2V5TmFtZSA9IG9wdGlvbnMuZGVzY2VuZGluZyA/ICdlbmRrZXknIDogJ3N0YXJ0a2V5JztcbiAgICBjb25zdCBlbmRrZXlOYW1lID0gb3B0aW9ucy5kZXNjZW5kaW5nID8gJ3N0YXJ0a2V5JyA6ICdlbmRrZXknO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zW3N0YXJ0a2V5TmFtZV0gIT09ICd1bmRlZmluZWQnICYmXG4gICAgICB0eXBlb2Ygb3B0aW9uc1tlbmRrZXlOYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgIGNvbGxhdGUob3B0aW9uc1tzdGFydGtleU5hbWVdLCBvcHRpb25zW2VuZGtleU5hbWVdKSA+IDApIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeVBhcnNlRXJyb3IoJ05vIHJvd3MgY2FuIG1hdGNoIHlvdXIga2V5IHJhbmdlLCAnICtcbiAgICAgICAgJ3JldmVyc2UgeW91ciBzdGFydF9rZXkgYW5kIGVuZF9rZXkgb3Igc2V0IHtkZXNjZW5kaW5nIDogdHJ1ZX0nKTtcbiAgICB9IGVsc2UgaWYgKGZ1bi5yZWR1Y2UgJiYgb3B0aW9ucy5yZWR1Y2UgIT09IGZhbHNlKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5UGFyc2VFcnJvcigne2luY2x1ZGVfZG9jczp0cnVlfSBpcyBpbnZhbGlkIGZvciByZWR1Y2UnKTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rZXlzICYmIG9wdGlvbnMua2V5cy5sZW5ndGggPiAxICYmXG4gICAgICAgICFvcHRpb25zLmdyb3VwICYmICFvcHRpb25zLmdyb3VwX2xldmVsKSB7XG4gICAgICAgIHRocm93IG5ldyBRdWVyeVBhcnNlRXJyb3IoJ011bHRpLWtleSBmZXRjaGVzIGZvciByZWR1Y2Ugdmlld3MgbXVzdCB1c2UgJyArXG4gICAgICAgICAgJ3tncm91cDogdHJ1ZX0nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcHRpb25OYW1lIG9mIFsnZ3JvdXBfbGV2ZWwnLCAnbGltaXQnLCAnc2tpcCddKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNoZWNrUG9zaXRpdmVJbnRlZ2VyKG9wdGlvbnNbb3B0aW9uTmFtZV0pO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGh0dHBRdWVyeShkYiwgZnVuLCBvcHRzKSB7XG4gICAgLy8gTGlzdCBvZiBwYXJhbWV0ZXJzIHRvIGFkZCB0byB0aGUgUFVUIHJlcXVlc3RcbiAgICBsZXQgcGFyYW1zID0gW107XG4gICAgbGV0IGJvZHk7XG4gICAgbGV0IG1ldGhvZCA9ICdHRVQnO1xuICAgIGxldCBvaztcblxuICAgIC8vIElmIG9wdHMucmVkdWNlIGV4aXN0cyBhbmQgaXMgZGVmaW5lZCwgdGhlbiBhZGQgaXQgdG8gdGhlIGxpc3RcbiAgICAvLyBvZiBwYXJhbWV0ZXJzLlxuICAgIC8vIElmIHJlZHVjZT1mYWxzZSB0aGVuIHRoZSByZXN1bHRzIGFyZSB0aGF0IG9mIG9ubHkgdGhlIG1hcCBmdW5jdGlvblxuICAgIC8vIG5vdCB0aGUgZmluYWwgcmVzdWx0IG9mIG1hcCBhbmQgcmVkdWNlLlxuICAgIGFkZEh0dHBQYXJhbSgncmVkdWNlJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ2luY2x1ZGVfZG9jcycsIG9wdHMsIHBhcmFtcyk7XG4gICAgYWRkSHR0cFBhcmFtKCdhdHRhY2htZW50cycsIG9wdHMsIHBhcmFtcyk7XG4gICAgYWRkSHR0cFBhcmFtKCdsaW1pdCcsIG9wdHMsIHBhcmFtcyk7XG4gICAgYWRkSHR0cFBhcmFtKCdkZXNjZW5kaW5nJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ2dyb3VwJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ2dyb3VwX2xldmVsJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ3NraXAnLCBvcHRzLCBwYXJhbXMpO1xuICAgIGFkZEh0dHBQYXJhbSgnc3RhbGUnLCBvcHRzLCBwYXJhbXMpO1xuICAgIGFkZEh0dHBQYXJhbSgnY29uZmxpY3RzJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ3N0YXJ0a2V5Jywgb3B0cywgcGFyYW1zLCB0cnVlKTtcbiAgICBhZGRIdHRwUGFyYW0oJ3N0YXJ0X2tleScsIG9wdHMsIHBhcmFtcywgdHJ1ZSk7XG4gICAgYWRkSHR0cFBhcmFtKCdlbmRrZXknLCBvcHRzLCBwYXJhbXMsIHRydWUpO1xuICAgIGFkZEh0dHBQYXJhbSgnZW5kX2tleScsIG9wdHMsIHBhcmFtcywgdHJ1ZSk7XG4gICAgYWRkSHR0cFBhcmFtKCdpbmNsdXNpdmVfZW5kJywgb3B0cywgcGFyYW1zKTtcbiAgICBhZGRIdHRwUGFyYW0oJ2tleScsIG9wdHMsIHBhcmFtcywgdHJ1ZSk7XG4gICAgYWRkSHR0cFBhcmFtKCd1cGRhdGVfc2VxJywgb3B0cywgcGFyYW1zKTtcblxuICAgIC8vIEZvcm1hdCB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGludG8gYSB2YWxpZCBVUkkgcXVlcnkgc3RyaW5nXG4gICAgcGFyYW1zID0gcGFyYW1zLmpvaW4oJyYnKTtcbiAgICBwYXJhbXMgPSBwYXJhbXMgPT09ICcnID8gJycgOiAnPycgKyBwYXJhbXM7XG5cbiAgICAvLyBJZiBrZXlzIGFyZSBzdXBwbGllZCwgaXNzdWUgYSBQT1NUIHRvIGNpcmN1bXZlbnQgR0VUIHF1ZXJ5IHN0cmluZyBsaW1pdHNcbiAgICAvLyBzZWUgaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9jb3VjaGRiL0hUVFBfdmlld19BUEkjUXVlcnlpbmdfT3B0aW9uc1xuICAgIGlmICh0eXBlb2Ygb3B0cy5rZXlzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgTUFYX1VSTF9MRU5HVEggPSAyMDAwO1xuICAgICAgLy8gYWNjb3JkaW5nIHRvIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQxNzE4NC82ODA3NDIsXG4gICAgICAvLyB0aGUgZGUgZmFjdG8gVVJMIGxlbmd0aCBsaW1pdCBpcyAyMDAwIGNoYXJhY3RlcnNcblxuICAgICAgY29uc3Qga2V5c0FzU3RyaW5nID0gYGtleXM9JHtlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkob3B0cy5rZXlzKSl9YDtcbiAgICAgIGlmIChrZXlzQXNTdHJpbmcubGVuZ3RoICsgcGFyYW1zLmxlbmd0aCArIDEgPD0gTUFYX1VSTF9MRU5HVEgpIHtcbiAgICAgICAgLy8gSWYgdGhlIGtleXMgYXJlIHNob3J0IGVub3VnaCwgZG8gYSBHRVQuIHdlIGRvIHRoaXMgdG8gd29yayBhcm91bmRcbiAgICAgICAgLy8gU2FmYXJpIG5vdCB1bmRlcnN0YW5kaW5nIDMwNHMgb24gUE9TVHMgKHNlZSBwb3VjaGRiL3BvdWNoZGIjMTIzOSlcbiAgICAgICAgcGFyYW1zICs9IChwYXJhbXNbMF0gPT09ICc/JyA/ICcmJyA6ICc/JykgKyBrZXlzQXNTdHJpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZXRob2QgPSAnUE9TVCc7XG4gICAgICAgIGlmICh0eXBlb2YgZnVuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGJvZHkgPSB7a2V5czogb3B0cy5rZXlzfTtcbiAgICAgICAgfSBlbHNlIHsgLy8gZnVuIGlzIHttYXAgOiBtYXBmdW59LCBzbyBhcHBlbmQgdG8gdGhpc1xuICAgICAgICAgIGZ1bi5rZXlzID0gb3B0cy5rZXlzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIHJlZmVyZW5jaW5nIGEgcXVlcnkgZGVmaW5lZCBpbiB0aGUgZGVzaWduIGRvY1xuICAgIGlmICh0eXBlb2YgZnVuID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFydHMgPSBwYXJzZVZpZXdOYW1lKGZ1bik7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZGIuZmV0Y2goJ19kZXNpZ24vJyArIHBhcnRzWzBdICsgJy9fdmlldy8nICsgcGFydHNbMV0gKyBwYXJhbXMsIHtcbiAgICAgICAgaGVhZGVyczogbmV3IGgoeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgICAgfSk7XG4gICAgICBvayA9IHJlc3BvbnNlLm9rO1xuICAgICAgLy8gc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuXG4gICAgICBpZiAoIW9rKSB7XG4gICAgICAgIHJlc3VsdC5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgIHRocm93IGdlbmVyYXRlRXJyb3JGcm9tUmVzcG9uc2UocmVzdWx0KTtcbiAgICAgIH1cblxuICAgICAgLy8gZmFpbCB0aGUgZW50aXJlIHJlcXVlc3QgaWYgdGhlIHJlc3VsdCBjb250YWlucyBhbiBlcnJvclxuICAgICAgZm9yIChjb25zdCByb3cgb2YgcmVzdWx0LnJvd3MpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChyb3cudmFsdWUgJiYgcm93LnZhbHVlLmVycm9yICYmIHJvdy52YWx1ZS5lcnJvciA9PT0gXCJidWlsdGluX3JlZHVjZV9lcnJvclwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJvdy5yZWFzb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KS50aGVuKHBvc3Rwcm9jZXNzQXR0YWNobWVudHMob3B0cykpO1xuICAgIH1cblxuICAgIC8vIFdlIGFyZSB1c2luZyBhIHRlbXBvcmFyeSB2aWV3LCB0ZXJyaWJsZSBmb3IgcGVyZm9ybWFuY2UsIGdvb2QgZm9yIHRlc3RpbmdcbiAgICBib2R5ID0gYm9keSB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmdW4pKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmdW5ba2V5XSkpIHtcbiAgICAgICAgYm9keVtrZXldID0gZnVuW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5W2tleV0gPSBmdW5ba2V5XS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZGIuZmV0Y2goJ190ZW1wX3ZpZXcnICsgcGFyYW1zLCB7XG4gICAgICBoZWFkZXJzOiBuZXcgaCh7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ30pLFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KVxuICAgIH0pO1xuXG4gICAgb2sgPSByZXNwb25zZS5vaztcbiAgICAvLyBzdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIGlmICghb2spIHtcbiAgICAgIHJlc3VsdC5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB0aHJvdyBnZW5lcmF0ZUVycm9yRnJvbVJlc3BvbnNlKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgfSkudGhlbihwb3N0cHJvY2Vzc0F0dGFjaG1lbnRzKG9wdHMpKTtcbiAgfVxuXG4gIC8vIGN1c3RvbSBhZGFwdGVycyBjYW4gZGVmaW5lIHRoZWlyIG93biBhcGkuX3F1ZXJ5XG4gIC8vIGFuZCBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmdW5jdGlvbiBjdXN0b21RdWVyeShkYiwgZnVuLCBvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGRiLl9xdWVyeShmdW4sIG9wdHMsIGZ1bmN0aW9uIChlcnIsIHJlcykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY3VzdG9tIGFkYXB0ZXJzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGFwaS5fdmlld0NsZWFudXBcbiAgLy8gYW5kIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIGN1c3RvbVZpZXdDbGVhbnVwKGRiKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGRiLl92aWV3Q2xlYW51cChmdW5jdGlvbiAoZXJyLCByZXMpIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmF1bHRzVG8odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChyZWFzb24uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyByZXR1cm5zIGEgcHJvbWlzZSBmb3IgYSBsaXN0IG9mIGRvY3MgdG8gdXBkYXRlLCBiYXNlZCBvbiB0aGUgaW5wdXQgZG9jSWQuXG4gIC8vIHRoZSBvcmRlciBkb2Vzbid0IG1hdHRlciwgYmVjYXVzZSBwb3N0LTMuMi4wLCBidWxrRG9jc1xuICAvLyBpcyBhbiBhdG9taWMgb3BlcmF0aW9uIGluIGFsbCB0aHJlZSBhZGFwdGVycy5cbiAgYXN5bmMgZnVuY3Rpb24gZ2V0RG9jc1RvUGVyc2lzdChkb2NJZCwgdmlldywgZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMpIHtcbiAgICBjb25zdCBtZXRhRG9jSWQgPSAnX2xvY2FsL2RvY18nICsgZG9jSWQ7XG4gICAgY29uc3QgZGVmYXVsdE1ldGFEb2MgPSB7X2lkOiBtZXRhRG9jSWQsIGtleXM6IFtdfTtcbiAgICBjb25zdCBkb2NEYXRhID0gZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMuZ2V0KGRvY0lkKTtcbiAgICBjb25zdCBpbmRleGFibGVLZXlzVG9LZXlWYWx1ZXMgPSBkb2NEYXRhWzBdO1xuICAgIGNvbnN0IGNoYW5nZXMgPSBkb2NEYXRhWzFdO1xuXG4gICAgZnVuY3Rpb24gZ2V0TWV0YURvYygpIHtcbiAgICAgIGlmIChpc0dlbk9uZShjaGFuZ2VzKSkge1xuICAgICAgICAvLyBnZW5lcmF0aW9uIDEsIHNvIHdlIGNhbiBzYWZlbHkgYXNzdW1lIGluaXRpYWwgc3RhdGVcbiAgICAgICAgLy8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKGF2b2lkcyB1bm5lY2Vzc2FyeSBHRVRzKVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGRlZmF1bHRNZXRhRG9jKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2aWV3LmRiLmdldChtZXRhRG9jSWQpLmNhdGNoKGRlZmF1bHRzVG8oZGVmYXVsdE1ldGFEb2MpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRLZXlWYWx1ZURvY3MobWV0YURvYykge1xuICAgICAgaWYgKCFtZXRhRG9jLmtleXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIG5vIGtleXMsIG5vIG5lZWQgZm9yIGEgbG9va3VwXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe3Jvd3M6IFtdfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmlldy5kYi5hbGxEb2NzKHtcbiAgICAgICAga2V5czogbWV0YURvYy5rZXlzLFxuICAgICAgICBpbmNsdWRlX2RvY3M6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NLZXlWYWx1ZURvY3MobWV0YURvYywga3ZEb2NzUmVzKSB7XG4gICAgICBjb25zdCBrdkRvY3MgPSBbXTtcbiAgICAgIGNvbnN0IG9sZEtleXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGt2RG9jc1Jlcy5yb3dzKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IHJvdy5kb2M7XG4gICAgICAgIGlmICghZG9jKSB7IC8vIGRlbGV0ZWRcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBrdkRvY3MucHVzaChkb2MpO1xuICAgICAgICBvbGRLZXlzLmFkZChkb2MuX2lkKTtcbiAgICAgICAgZG9jLl9kZWxldGVkID0gIWluZGV4YWJsZUtleXNUb0tleVZhbHVlcy5oYXMoZG9jLl9pZCk7XG4gICAgICAgIGlmICghZG9jLl9kZWxldGVkKSB7XG4gICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSBpbmRleGFibGVLZXlzVG9LZXlWYWx1ZXMuZ2V0KGRvYy5faWQpO1xuICAgICAgICAgIGlmICgndmFsdWUnIGluIGtleVZhbHVlKSB7XG4gICAgICAgICAgICBkb2MudmFsdWUgPSBrZXlWYWx1ZS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IG5ld0tleXMgPSBtYXBUb0tleXNBcnJheShpbmRleGFibGVLZXlzVG9LZXlWYWx1ZXMpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgbmV3S2V5cykge1xuICAgICAgICBpZiAoIW9sZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAvLyBuZXcgZG9jXG4gICAgICAgICAgY29uc3Qga3ZEb2MgPSB7XG4gICAgICAgICAgICBfaWQ6IGtleVxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3Qga2V5VmFsdWUgPSBpbmRleGFibGVLZXlzVG9LZXlWYWx1ZXMuZ2V0KGtleSk7XG4gICAgICAgICAgaWYgKCd2YWx1ZScgaW4ga2V5VmFsdWUpIHtcbiAgICAgICAgICAgIGt2RG9jLnZhbHVlID0ga2V5VmFsdWUudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGt2RG9jcy5wdXNoKGt2RG9jKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbWV0YURvYy5rZXlzID0gdW5pcShuZXdLZXlzLmNvbmNhdChtZXRhRG9jLmtleXMpKTtcbiAgICAgIGt2RG9jcy5wdXNoKG1ldGFEb2MpO1xuXG4gICAgICByZXR1cm4ga3ZEb2NzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGFEb2MgPSBhd2FpdCBnZXRNZXRhRG9jKCk7XG4gICAgY29uc3Qga2V5VmFsdWVEb2NzID0gYXdhaXQgZ2V0S2V5VmFsdWVEb2NzKG1ldGFEb2MpO1xuICAgIHJldHVybiBwcm9jZXNzS2V5VmFsdWVEb2NzKG1ldGFEb2MsIGtleVZhbHVlRG9jcyk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQdXJnZVNlcSh2aWV3KSB7XG4gICAgLy8gd2l0aCB0aGlzIGFwcHJvYWNoLCB3ZSBqdXN0IGFzc3VtZSB0byBoYXZlIHByb2Nlc3NlZCBhbGwgbWlzc2luZyBwdXJnZXMgYW5kIHdyaXRlIHRoZSBsYXRlc3RcbiAgICAvLyBwdXJnZVNlcSBpbnRvIHRoZSBfbG9jYWwvcHVyZ2VTZXEgZG9jLlxuICAgIHJldHVybiB2aWV3LnNvdXJjZURCLmdldCgnX2xvY2FsL3B1cmdlcycpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgY29uc3QgcHVyZ2VTZXEgPSByZXMucHVyZ2VTZXE7XG4gICAgICByZXR1cm4gdmlldy5kYi5nZXQoJ19sb2NhbC9wdXJnZVNlcScpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICByZXR1cm4gcmVzLl9yZXY7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGRlZmF1bHRzVG8odW5kZWZpbmVkKSlcbiAgICAgIC50aGVuKGZ1bmN0aW9uIChyZXYkJDEpIHtcbiAgICAgICAgcmV0dXJuIHZpZXcuZGIucHV0KHtcbiAgICAgICAgICBfaWQ6ICdfbG9jYWwvcHVyZ2VTZXEnLFxuICAgICAgICAgIF9yZXY6IHJldiQkMSxcbiAgICAgICAgICBwdXJnZVNlcSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnN0YXR1cyAhPT0gNDA0KSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHVwZGF0ZXMgYWxsIGVtaXR0ZWQga2V5L3ZhbHVlIGRvY3MgYW5kIG1ldGFEb2NzIGluIHRoZSBtcnZpZXcgZGF0YWJhc2VcbiAgLy8gZm9yIHRoZSBnaXZlbiBiYXRjaCBvZiBkb2N1bWVudHMgZnJvbSB0aGUgc291cmNlIGRhdGFiYXNlXG4gIGZ1bmN0aW9uIHNhdmVLZXlWYWx1ZXModmlldywgZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMsIHNlcSkge1xuICAgIHZhciBzZXFEb2NJZCA9ICdfbG9jYWwvbGFzdFNlcSc7XG4gICAgcmV0dXJuIHZpZXcuZGIuZ2V0KHNlcURvY0lkKVxuICAgICAgLmNhdGNoKGRlZmF1bHRzVG8oe19pZDogc2VxRG9jSWQsIHNlcTogMH0pKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKGxhc3RTZXFEb2MpIHtcbiAgICAgICAgdmFyIGRvY0lkcyA9IG1hcFRvS2V5c0FycmF5KGRvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRvY0lkcy5tYXAoZnVuY3Rpb24gKGRvY0lkKSB7XG4gICAgICAgICAgcmV0dXJuIGdldERvY3NUb1BlcnNpc3QoZG9jSWQsIHZpZXcsIGRvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzKTtcbiAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKGxpc3RPZkRvY3NUb1BlcnNpc3QpIHtcbiAgICAgICAgICB2YXIgZG9jc1RvUGVyc2lzdCA9IGxpc3RPZkRvY3NUb1BlcnNpc3QuZmxhdCgpO1xuICAgICAgICAgIGxhc3RTZXFEb2Muc2VxID0gc2VxO1xuICAgICAgICAgIGRvY3NUb1BlcnNpc3QucHVzaChsYXN0U2VxRG9jKTtcbiAgICAgICAgICAvLyB3cml0ZSBhbGwgZG9jcyBpbiBhIHNpbmdsZSBvcGVyYXRpb24sIHVwZGF0ZSB0aGUgc2VxIG9uY2VcbiAgICAgICAgICByZXR1cm4gdmlldy5kYi5idWxrRG9jcyh7ZG9jcyA6IGRvY3NUb1BlcnNpc3R9KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBwbGFjZWQgc29tZXdoZXJlIGVsc2UsIHByb2JhYmx5PyB3ZSdyZSBxdWVyeWluZyBib3RoIGRvY3MgdHdpY2VcbiAgICAgICAgICAvLyAgIChmaXJzdCB0aW1lIHdoZW4gZ2V0dGluZyB0aGUgYWN0dWFsIHB1cmdlcykuXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdXBkYXRlUHVyZ2VTZXEodmlldykpO1xuICAgICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRRdWV1ZSh2aWV3KSB7XG4gICAgY29uc3Qgdmlld05hbWUgPSB0eXBlb2YgdmlldyA9PT0gJ3N0cmluZycgPyB2aWV3IDogdmlldy5uYW1lO1xuICAgIGxldCBxdWV1ZSA9IHBlcnNpc3RlbnRRdWV1ZXNbdmlld05hbWVdO1xuICAgIGlmICghcXVldWUpIHtcbiAgICAgIHF1ZXVlID0gcGVyc2lzdGVudFF1ZXVlc1t2aWV3TmFtZV0gPSBuZXcgVGFza1F1ZXVlJDEoKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmlldyh2aWV3LCBvcHRzKSB7XG4gICAgcmV0dXJuIHNlcXVlbnRpYWxpemUoZ2V0UXVldWUodmlldyksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB1cGRhdGVWaWV3SW5RdWV1ZSh2aWV3LCBvcHRzKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gdXBkYXRlVmlld0luUXVldWUodmlldywgb3B0cykge1xuICAgIC8vIGJpbmQgdGhlIGVtaXQgZnVuY3Rpb24gb25jZVxuICAgIGxldCBtYXBSZXN1bHRzO1xuICAgIGxldCBkb2M7XG4gICAgbGV0IHRhc2tJZDtcblxuICAgIGZ1bmN0aW9uIGVtaXQoa2V5LCB2YWx1ZSkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0ge2lkOiBkb2MuX2lkLCBrZXk6IG5vcm1hbGl6ZUtleShrZXkpfTtcbiAgICAgIC8vIERvbid0IGV4cGxpY2l0bHkgc3RvcmUgdGhlIHZhbHVlIHVubGVzcyBpdCdzIGRlZmluZWQgYW5kIG5vbi1udWxsLlxuICAgICAgLy8gVGhpcyBzYXZlcyBvbiBzdG9yYWdlIHNwYWNlLCBiZWNhdXNlIG9mdGVuIHBlb3BsZSBkb24ndCB1c2UgaXQuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBvdXRwdXQudmFsdWUgPSBub3JtYWxpemVLZXkodmFsdWUpO1xuICAgICAgfVxuICAgICAgbWFwUmVzdWx0cy5wdXNoKG91dHB1dCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwRnVuID0gbWFwcGVyKHZpZXcubWFwRnVuLCBlbWl0KTtcblxuICAgIGxldCBjdXJyZW50U2VxID0gdmlldy5zZXEgfHwgMDtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRhc2soKSB7XG4gICAgICByZXR1cm4gdmlldy5zb3VyY2VEQi5pbmZvKCkudGhlbihmdW5jdGlvbiAoaW5mbykge1xuICAgICAgICB0YXNrSWQgPSB2aWV3LnNvdXJjZURCLmFjdGl2ZVRhc2tzLmFkZCh7XG4gICAgICAgICAgbmFtZTogJ3ZpZXdfaW5kZXhpbmcnLFxuICAgICAgICAgIHRvdGFsX2l0ZW1zOiBpbmZvLnVwZGF0ZV9zZXEgLSBjdXJyZW50U2VxLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NDaGFuZ2UoZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMsIHNlcSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHNhdmVLZXlWYWx1ZXModmlldywgZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMsIHNlcSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBpbmRleGVkX2RvY3MgPSAwO1xuICAgIGNvbnN0IHByb2dyZXNzID0ge1xuICAgICAgdmlldzogdmlldy5uYW1lLFxuICAgICAgaW5kZXhlZF9kb2NzXG4gICAgfTtcbiAgICB2aWV3LnNvdXJjZURCLmVtaXQoJ2luZGV4aW5nJywgcHJvZ3Jlc3MpO1xuXG4gICAgY29uc3QgcXVldWUgPSBuZXcgVGFza1F1ZXVlJDEoKTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXh0QmF0Y2goKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHZpZXcuc291cmNlREIuY2hhbmdlcyh7XG4gICAgICAgIHJldHVybl9kb2NzOiB0cnVlLFxuICAgICAgICBjb25mbGljdHM6IHRydWUsXG4gICAgICAgIGluY2x1ZGVfZG9jczogdHJ1ZSxcbiAgICAgICAgc3R5bGU6ICdhbGxfZG9jcycsXG4gICAgICAgIHNpbmNlOiBjdXJyZW50U2VxLFxuICAgICAgICBsaW1pdDogb3B0cy5jaGFuZ2VzX2JhdGNoX3NpemVcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHVyZ2VzID0gYXdhaXQgZ2V0UmVjZW50UHVyZ2VzKCk7XG4gICAgICByZXR1cm4gcHJvY2Vzc0JhdGNoKHJlc3BvbnNlLCBwdXJnZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJlY2VudFB1cmdlcygpIHtcbiAgICAgIHJldHVybiB2aWV3LmRiLmdldCgnX2xvY2FsL3B1cmdlU2VxJykudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIHJldHVybiByZXMucHVyZ2VTZXE7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKGRlZmF1bHRzVG8oLTEpKVxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHB1cmdlU2VxKSB7XG4gICAgICAgIHJldHVybiB2aWV3LnNvdXJjZURCLmdldCgnX2xvY2FsL3B1cmdlcycpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgICAgIGNvbnN0IHJlY2VudFB1cmdlcyA9IHJlcy5wdXJnZXMuZmlsdGVyKGZ1bmN0aW9uIChwdXJnZSwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA+IHB1cmdlU2VxO1xuICAgICAgICAgIH0pLm1hcCgocHVyZ2UpID0+IHB1cmdlLmRvY0lkKTtcblxuICAgICAgICAgIGNvbnN0IHVuaXF1ZVB1cmdlcyA9IHJlY2VudFB1cmdlcy5maWx0ZXIoZnVuY3Rpb24gKGRvY0lkLCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlY2VudFB1cmdlcy5pbmRleE9mKGRvY0lkKSA9PT0gaW5kZXg7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodW5pcXVlUHVyZ2VzLm1hcChmdW5jdGlvbiAoZG9jSWQpIHtcbiAgICAgICAgICAgIHJldHVybiB2aWV3LnNvdXJjZURCLmdldChkb2NJZCkudGhlbihmdW5jdGlvbiAoZG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRvY0lkLCBkb2MgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZGVmYXVsdHNUbyh7IGRvY0lkIH0pKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChkZWZhdWx0c1RvKFtdKSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzQmF0Y2gocmVzcG9uc2UsIHB1cmdlcykge1xuICAgICAgY29uc3QgcmVzdWx0cyA9IHJlc3BvbnNlLnJlc3VsdHM7XG4gICAgICBpZiAoIXJlc3VsdHMubGVuZ3RoICYmICFwdXJnZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBwdXJnZSBvZiBwdXJnZXMpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSByZXN1bHRzLmZpbmRJbmRleChmdW5jdGlvbiAoY2hhbmdlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoYW5nZS5pZCA9PT0gcHVyZ2UuZG9jSWQ7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gbWltaWMgYSBkYi5yZW1vdmUoKSBvbiB0aGUgY2hhbmdlcyBmZWVkXG4gICAgICAgICAgY29uc3QgZW50cnkgPSB7XG4gICAgICAgICAgICBfaWQ6IHB1cmdlLmRvY0lkLFxuICAgICAgICAgICAgZG9jOiB7XG4gICAgICAgICAgICAgIF9pZDogcHVyZ2UuZG9jSWQsXG4gICAgICAgICAgICAgIF9kZWxldGVkOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoYW5nZXM6IFtdLFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAocHVyZ2UuZG9jKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgd2l0aCBuZXcgd2lubmluZyByZXYgYWZ0ZXIgcHVyZ2VcbiAgICAgICAgICAgIGVudHJ5LmRvYyA9IHB1cmdlLmRvYztcbiAgICAgICAgICAgIGVudHJ5LmNoYW5nZXMucHVzaCh7IHJldjogcHVyZ2UuZG9jLl9yZXYgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkb2NJZHNUb0NoYW5nZXNBbmRFbWl0cyA9IGNyZWF0ZURvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzKHJlc3VsdHMpO1xuXG4gICAgICBxdWV1ZS5hZGQocHJvY2Vzc0NoYW5nZShkb2NJZHNUb0NoYW5nZXNBbmRFbWl0cywgY3VycmVudFNlcSkpO1xuXG4gICAgICBpbmRleGVkX2RvY3MgPSBpbmRleGVkX2RvY3MgKyByZXN1bHRzLmxlbmd0aDtcbiAgICAgIGNvbnN0IHByb2dyZXNzID0ge1xuICAgICAgICB2aWV3OiB2aWV3Lm5hbWUsXG4gICAgICAgIGxhc3Rfc2VxOiByZXNwb25zZS5sYXN0X3NlcSxcbiAgICAgICAgcmVzdWx0c19jb3VudDogcmVzdWx0cy5sZW5ndGgsXG4gICAgICAgIGluZGV4ZWRfZG9jc1xuICAgICAgfTtcbiAgICAgIHZpZXcuc291cmNlREIuZW1pdCgnaW5kZXhpbmcnLCBwcm9ncmVzcyk7XG4gICAgICB2aWV3LnNvdXJjZURCLmFjdGl2ZVRhc2tzLnVwZGF0ZSh0YXNrSWQsIHtjb21wbGV0ZWRfaXRlbXM6IGluZGV4ZWRfZG9jc30pO1xuXG4gICAgICBpZiAocmVzdWx0cy5sZW5ndGggPCBvcHRzLmNoYW5nZXNfYmF0Y2hfc2l6ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvY2Vzc05leHRCYXRjaCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzKHJlc3VsdHMpIHtcbiAgICAgIGNvbnN0IGRvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzID0gbmV3IE1hcCgpO1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAoY2hhbmdlLmRvYy5faWRbMF0gIT09ICdfJykge1xuICAgICAgICAgIG1hcFJlc3VsdHMgPSBbXTtcbiAgICAgICAgICBkb2MgPSBjaGFuZ2UuZG9jO1xuXG4gICAgICAgICAgaWYgKCFkb2MuX2RlbGV0ZWQpIHtcbiAgICAgICAgICAgIHRyeU1hcCh2aWV3LnNvdXJjZURCLCBtYXBGdW4sIGRvYyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG1hcFJlc3VsdHMuc29ydChzb3J0QnlLZXlUaGVuVmFsdWUpO1xuXG4gICAgICAgICAgY29uc3QgaW5kZXhhYmxlS2V5c1RvS2V5VmFsdWVzID0gY3JlYXRlSW5kZXhhYmxlS2V5c1RvS2V5VmFsdWVzKG1hcFJlc3VsdHMpO1xuICAgICAgICAgIGRvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzLnNldChjaGFuZ2UuZG9jLl9pZCwgW1xuICAgICAgICAgICAgaW5kZXhhYmxlS2V5c1RvS2V5VmFsdWVzLFxuICAgICAgICAgICAgY2hhbmdlLmNoYW5nZXNcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50U2VxID0gY2hhbmdlLnNlcTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb2NJZHNUb0NoYW5nZXNBbmRFbWl0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbmRleGFibGVLZXlzVG9LZXlWYWx1ZXMobWFwUmVzdWx0cykge1xuICAgICAgY29uc3QgaW5kZXhhYmxlS2V5c1RvS2V5VmFsdWVzID0gbmV3IE1hcCgpO1xuICAgICAgbGV0IGxhc3RLZXk7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbWFwUmVzdWx0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjb25zdCBlbWl0dGVkS2V5VmFsdWUgPSBtYXBSZXN1bHRzW2ldO1xuICAgICAgICBjb25zdCBjb21wbGV4S2V5ID0gW2VtaXR0ZWRLZXlWYWx1ZS5rZXksIGVtaXR0ZWRLZXlWYWx1ZS5pZF07XG4gICAgICAgIGlmIChpID4gMCAmJiBjb2xsYXRlKGVtaXR0ZWRLZXlWYWx1ZS5rZXksIGxhc3RLZXkpID09PSAwKSB7XG4gICAgICAgICAgY29tcGxleEtleS5wdXNoKGkpOyAvLyBkdXAga2V5K2lkLCBzbyBtYWtlIGl0IHVuaXF1ZVxuICAgICAgICB9XG4gICAgICAgIGluZGV4YWJsZUtleXNUb0tleVZhbHVlcy5zZXQodG9JbmRleGFibGVTdHJpbmcoY29tcGxleEtleSksIGVtaXR0ZWRLZXlWYWx1ZSk7XG4gICAgICAgIGxhc3RLZXkgPSBlbWl0dGVkS2V5VmFsdWUua2V5O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4YWJsZUtleXNUb0tleVZhbHVlcztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY3JlYXRlVGFzaygpO1xuICAgICAgYXdhaXQgcHJvY2Vzc05leHRCYXRjaCgpO1xuICAgICAgYXdhaXQgcXVldWUuZmluaXNoKCk7XG4gICAgICB2aWV3LnNlcSA9IGN1cnJlbnRTZXE7XG4gICAgICB2aWV3LnNvdXJjZURCLmFjdGl2ZVRhc2tzLnJlbW92ZSh0YXNrSWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB2aWV3LnNvdXJjZURCLmFjdGl2ZVRhc2tzLnJlbW92ZSh0YXNrSWQsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWR1Y2VWaWV3KHZpZXcsIHJlc3VsdHMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5ncm91cF9sZXZlbCA9PT0gMCkge1xuICAgICAgZGVsZXRlIG9wdGlvbnMuZ3JvdXBfbGV2ZWw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkR3JvdXAgPSBvcHRpb25zLmdyb3VwIHx8IG9wdGlvbnMuZ3JvdXBfbGV2ZWw7XG4gICAgY29uc3QgcmVkdWNlRnVuID0gcmVkdWNlcih2aWV3LnJlZHVjZUZ1bik7XG4gICAgY29uc3QgZ3JvdXBzID0gW107XG4gICAgY29uc3QgbHZsID0gaXNOYU4ob3B0aW9ucy5ncm91cF9sZXZlbClcbiAgICAgID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZXG4gICAgICA6IG9wdGlvbnMuZ3JvdXBfbGV2ZWw7XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBjb25zdCBsYXN0ID0gZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBncm91cEtleSA9IHNob3VsZEdyb3VwID8gcmVzdWx0LmtleSA6IG51bGw7XG5cbiAgICAgIC8vIG9ubHkgc2V0IGdyb3VwX2xldmVsIGZvciBhcnJheSBrZXlzXG4gICAgICBpZiAoc2hvdWxkR3JvdXAgJiYgQXJyYXkuaXNBcnJheShncm91cEtleSkpIHtcbiAgICAgICAgZ3JvdXBLZXkgPSBncm91cEtleS5zbGljZSgwLCBsdmwpO1xuICAgICAgfVxuXG4gICAgICBpZiAobGFzdCAmJiBjb2xsYXRlKGxhc3QuZ3JvdXBLZXksIGdyb3VwS2V5KSA9PT0gMCkge1xuICAgICAgICBsYXN0LmtleXMucHVzaChbcmVzdWx0LmtleSwgcmVzdWx0LmlkXSk7XG4gICAgICAgIGxhc3QudmFsdWVzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBncm91cHMucHVzaCh7XG4gICAgICAgIGtleXM6IFtbcmVzdWx0LmtleSwgcmVzdWx0LmlkXV0sXG4gICAgICAgIHZhbHVlczogW3Jlc3VsdC52YWx1ZV0sXG4gICAgICAgIGdyb3VwS2V5XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXN1bHRzID0gW107XG4gICAgZm9yIChjb25zdCBncm91cCBvZiBncm91cHMpIHtcbiAgICAgIGNvbnN0IHJlZHVjZVRyeSA9IHRyeVJlZHVjZSh2aWV3LnNvdXJjZURCLCByZWR1Y2VGdW4sIGdyb3VwLmtleXMsIGdyb3VwLnZhbHVlcywgZmFsc2UpO1xuICAgICAgaWYgKHJlZHVjZVRyeS5lcnJvciAmJiByZWR1Y2VUcnkuZXJyb3IgaW5zdGFuY2VvZiBCdWlsdEluRXJyb3IpIHtcbiAgICAgICAgLy8gQ291Y2hEQiByZXR1cm5zIGFuIGVycm9yIGlmIGEgYnVpbHQtaW4gZXJyb3JzIG91dFxuICAgICAgICB0aHJvdyByZWR1Y2VUcnkuZXJyb3I7XG4gICAgICB9XG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAvLyBDb3VjaERCIGp1c3Qgc2V0cyB0aGUgdmFsdWUgdG8gbnVsbCBpZiBhIG5vbi1idWlsdC1pbiBlcnJvcnMgb3V0XG4gICAgICAgIHZhbHVlOiByZWR1Y2VUcnkuZXJyb3IgPyBudWxsIDogcmVkdWNlVHJ5Lm91dHB1dCxcbiAgICAgICAga2V5OiBncm91cC5ncm91cEtleVxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIG5vIHRvdGFsX3Jvd3Mvb2Zmc2V0IHdoZW4gcmVkdWNpbmdcbiAgICByZXR1cm4geyByb3dzOiBzbGljZVJlc3VsdHMocmVzdWx0cywgb3B0aW9ucy5saW1pdCwgb3B0aW9ucy5za2lwKSB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVlcnlWaWV3KHZpZXcsIG9wdHMpIHtcbiAgICByZXR1cm4gc2VxdWVudGlhbGl6ZShnZXRRdWV1ZSh2aWV3KSwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHF1ZXJ5Vmlld0luUXVldWUodmlldywgb3B0cyk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHF1ZXJ5Vmlld0luUXVldWUodmlldywgb3B0cykge1xuICAgIGxldCB0b3RhbFJvd3M7XG4gICAgY29uc3Qgc2hvdWxkUmVkdWNlID0gdmlldy5yZWR1Y2VGdW4gJiYgb3B0cy5yZWR1Y2UgIT09IGZhbHNlO1xuICAgIGNvbnN0IHNraXAgPSBvcHRzLnNraXAgfHwgMDtcbiAgICBpZiAodHlwZW9mIG9wdHMua2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgIW9wdHMua2V5cy5sZW5ndGgpIHtcbiAgICAgIC8vIGVxdWl2YWxlbnQgcXVlcnlcbiAgICAgIG9wdHMubGltaXQgPSAwO1xuICAgICAgZGVsZXRlIG9wdHMua2V5cztcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBmZXRjaEZyb21WaWV3KHZpZXdPcHRzKSB7XG4gICAgICB2aWV3T3B0cy5pbmNsdWRlX2RvY3MgPSB0cnVlO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdmlldy5kYi5hbGxEb2NzKHZpZXdPcHRzKTtcbiAgICAgIHRvdGFsUm93cyA9IHJlcy50b3RhbF9yb3dzO1xuXG4gICAgICByZXR1cm4gcmVzLnJvd3MubWFwKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgLy8gaW1wbGljaXQgbWlncmF0aW9uIC0gaW4gb2xkZXIgdmVyc2lvbnMgb2YgUG91Y2hEQixcbiAgICAgICAgLy8gd2UgZXhwbGljaXRseSBzdG9yZWQgdGhlIGRvYyBhcyB7aWQ6IC4uLiwga2V5OiAuLi4sIHZhbHVlOiAuLi59XG4gICAgICAgIC8vIHRoaXMgaXMgdGVzdGVkIGluIGEgbWlncmF0aW9uIHRlc3RcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCd2YWx1ZScgaW4gcmVzdWx0LmRvYyAmJiB0eXBlb2YgcmVzdWx0LmRvYy52YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICByZXN1bHQuZG9jLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlc3VsdC5kb2MudmFsdWUpLnNvcnQoKTtcbiAgICAgICAgICAvLyB0aGlzIGRldGVjdGlvbiBtZXRob2QgaXMgbm90IHBlcmZlY3QsIGJ1dCBpdCdzIHVubGlrZWx5IHRoZSB1c2VyXG4gICAgICAgICAgLy8gZW1pdHRlZCBhIHZhbHVlIHdoaWNoIHdhcyBhbiBvYmplY3Qgd2l0aCB0aGVzZSAzIGV4YWN0IGtleXNcbiAgICAgICAgICBjb25zdCBleHBlY3RlZEtleXMgPSBbJ2lkJywgJ2tleScsICd2YWx1ZSddO1xuICAgICAgICAgIGlmICghKGtleXMgPCBleHBlY3RlZEtleXMgfHwga2V5cyA+IGV4cGVjdGVkS2V5cykpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZG9jLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcnNlZEtleUFuZERvY0lkID0gcGFyc2VJbmRleGFibGVTdHJpbmcocmVzdWx0LmRvYy5faWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleTogcGFyc2VkS2V5QW5kRG9jSWRbMF0sXG4gICAgICAgICAgaWQ6IHBhcnNlZEtleUFuZERvY0lkWzFdLFxuICAgICAgICAgIHZhbHVlOiAoJ3ZhbHVlJyBpbiByZXN1bHQuZG9jID8gcmVzdWx0LmRvYy52YWx1ZSA6IG51bGwpXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBvbk1hcFJlc3VsdHNSZWFkeShyb3dzKSB7XG4gICAgICBsZXQgZmluYWxSZXN1bHRzO1xuICAgICAgaWYgKHNob3VsZFJlZHVjZSkge1xuICAgICAgICBmaW5hbFJlc3VsdHMgPSByZWR1Y2VWaWV3KHZpZXcsIHJvd3MsIG9wdHMpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0cy5rZXlzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmaW5hbFJlc3VsdHMgPSB7XG4gICAgICAgICAgdG90YWxfcm93czogdG90YWxSb3dzLFxuICAgICAgICAgIG9mZnNldDogc2tpcCxcbiAgICAgICAgICByb3dzXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdXBwb3J0IGxpbWl0LCBza2lwIGZvciBrZXlzIHF1ZXJ5XG4gICAgICAgIGZpbmFsUmVzdWx0cyA9IHtcbiAgICAgICAgICB0b3RhbF9yb3dzOiB0b3RhbFJvd3MsXG4gICAgICAgICAgb2Zmc2V0OiBza2lwLFxuICAgICAgICAgIHJvd3M6IHNsaWNlUmVzdWx0cyhyb3dzLG9wdHMubGltaXQsb3B0cy5za2lwKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAob3B0cy51cGRhdGVfc2VxKSB7XG4gICAgICAgIGZpbmFsUmVzdWx0cy51cGRhdGVfc2VxID0gdmlldy5zZXE7XG4gICAgICB9XG4gICAgICBpZiAob3B0cy5pbmNsdWRlX2RvY3MpIHtcbiAgICAgICAgY29uc3QgZG9jSWRzID0gdW5pcShyb3dzLm1hcChyb3dUb0RvY0lkKSk7XG5cbiAgICAgICAgY29uc3QgYWxsRG9jc1JlcyA9IGF3YWl0IHZpZXcuc291cmNlREIuYWxsRG9jcyh7XG4gICAgICAgICAga2V5czogZG9jSWRzLFxuICAgICAgICAgIGluY2x1ZGVfZG9jczogdHJ1ZSxcbiAgICAgICAgICBjb25mbGljdHM6IG9wdHMuY29uZmxpY3RzLFxuICAgICAgICAgIGF0dGFjaG1lbnRzOiBvcHRzLmF0dGFjaG1lbnRzLFxuICAgICAgICAgIGJpbmFyeTogb3B0cy5iaW5hcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRvY0lkc1RvRG9jcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgYWxsRG9jc1Jlcy5yb3dzKSB7XG4gICAgICAgICAgZG9jSWRzVG9Eb2NzLnNldChyb3cuaWQsIHJvdy5kb2MpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgICBjb25zdCBkb2NJZCA9IHJvd1RvRG9jSWQocm93KTtcbiAgICAgICAgICBjb25zdCBkb2MgPSBkb2NJZHNUb0RvY3MuZ2V0KGRvY0lkKTtcbiAgICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgICByb3cuZG9jID0gZG9jO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpbmFsUmVzdWx0cztcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9wdHMua2V5cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBvcHRzLmtleXM7XG4gICAgICBjb25zdCBmZXRjaFByb21pc2VzID0ga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjb25zdCB2aWV3T3B0cyA9IHtcbiAgICAgICAgICBzdGFydGtleSA6IHRvSW5kZXhhYmxlU3RyaW5nKFtrZXldKSxcbiAgICAgICAgICBlbmRrZXkgICA6IHRvSW5kZXhhYmxlU3RyaW5nKFtrZXksIHt9XSlcbiAgICAgICAgfTtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChvcHRzLnVwZGF0ZV9zZXEpIHtcbiAgICAgICAgICB2aWV3T3B0cy51cGRhdGVfc2VxID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmV0Y2hGcm9tVmlldyh2aWV3T3B0cyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKGZldGNoUHJvbWlzZXMpO1xuICAgICAgY29uc3QgZmxhdHRlbmVkUmVzdWx0ID0gcmVzdWx0LmZsYXQoKTtcbiAgICAgIHJldHVybiBvbk1hcFJlc3VsdHNSZWFkeShmbGF0dGVuZWRSZXN1bHQpO1xuICAgIH0gZWxzZSB7IC8vIG5vcm1hbCBxdWVyeSwgbm8gJ2tleXMnXG4gICAgICBjb25zdCB2aWV3T3B0cyA9IHtcbiAgICAgICAgZGVzY2VuZGluZyA6IG9wdHMuZGVzY2VuZGluZ1xuICAgICAgfTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKG9wdHMudXBkYXRlX3NlcSkge1xuICAgICAgICB2aWV3T3B0cy51cGRhdGVfc2VxID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzdGFydGtleTtcbiAgICAgIGxldCBlbmRrZXk7XG4gICAgICBpZiAoJ3N0YXJ0X2tleScgaW4gb3B0cykge1xuICAgICAgICBzdGFydGtleSA9IG9wdHMuc3RhcnRfa2V5O1xuICAgICAgfVxuICAgICAgaWYgKCdzdGFydGtleScgaW4gb3B0cykge1xuICAgICAgICBzdGFydGtleSA9IG9wdHMuc3RhcnRrZXk7XG4gICAgICB9XG4gICAgICBpZiAoJ2VuZF9rZXknIGluIG9wdHMpIHtcbiAgICAgICAgZW5ka2V5ID0gb3B0cy5lbmRfa2V5O1xuICAgICAgfVxuICAgICAgaWYgKCdlbmRrZXknIGluIG9wdHMpIHtcbiAgICAgICAgZW5ka2V5ID0gb3B0cy5lbmRrZXk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHN0YXJ0a2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB2aWV3T3B0cy5zdGFydGtleSA9IG9wdHMuZGVzY2VuZGluZyA/XG4gICAgICAgICAgdG9JbmRleGFibGVTdHJpbmcoW3N0YXJ0a2V5LCB7fV0pIDpcbiAgICAgICAgICB0b0luZGV4YWJsZVN0cmluZyhbc3RhcnRrZXldKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZW5ka2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsZXQgaW5jbHVzaXZlRW5kID0gb3B0cy5pbmNsdXNpdmVfZW5kICE9PSBmYWxzZTtcbiAgICAgICAgaWYgKG9wdHMuZGVzY2VuZGluZykge1xuICAgICAgICAgIGluY2x1c2l2ZUVuZCA9ICFpbmNsdXNpdmVFbmQ7XG4gICAgICAgIH1cblxuICAgICAgICB2aWV3T3B0cy5lbmRrZXkgPSB0b0luZGV4YWJsZVN0cmluZyhcbiAgICAgICAgICBpbmNsdXNpdmVFbmQgPyBbZW5ka2V5LCB7fV0gOiBbZW5ka2V5XSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdHMua2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBrZXlTdGFydCA9IHRvSW5kZXhhYmxlU3RyaW5nKFtvcHRzLmtleV0pO1xuICAgICAgICBjb25zdCBrZXlFbmQgPSB0b0luZGV4YWJsZVN0cmluZyhbb3B0cy5rZXksIHt9XSk7XG4gICAgICAgIGlmICh2aWV3T3B0cy5kZXNjZW5kaW5nKSB7XG4gICAgICAgICAgdmlld09wdHMuZW5ka2V5ID0ga2V5U3RhcnQ7XG4gICAgICAgICAgdmlld09wdHMuc3RhcnRrZXkgPSBrZXlFbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlld09wdHMuc3RhcnRrZXkgPSBrZXlTdGFydDtcbiAgICAgICAgICB2aWV3T3B0cy5lbmRrZXkgPSBrZXlFbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc2hvdWxkUmVkdWNlKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5saW1pdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICB2aWV3T3B0cy5saW1pdCA9IG9wdHMubGltaXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmlld09wdHMuc2tpcCA9IHNraXA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVZpZXcodmlld09wdHMpO1xuICAgICAgcmV0dXJuIG9uTWFwUmVzdWx0c1JlYWR5KHJlc3VsdCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaHR0cFZpZXdDbGVhbnVwKGRiKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBkYi5mZXRjaCgnX3ZpZXdfY2xlYW51cCcsIHtcbiAgICAgIGhlYWRlcnM6IG5ldyBoKHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSksXG4gICAgICBtZXRob2Q6ICdQT1NUJ1xuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBsb2NhbFZpZXdDbGVhbnVwKGRiKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFEb2MgPSBhd2FpdCBkYi5nZXQoJ19sb2NhbC8nICsgbG9jYWxEb2NOYW1lKTtcbiAgICAgIGNvbnN0IGRvY3NUb1ZpZXdzID0gbmV3IE1hcCgpO1xuXG4gICAgICBmb3IgKGNvbnN0IGZ1bGxWaWV3TmFtZSBvZiBPYmplY3Qua2V5cyhtZXRhRG9jLnZpZXdzKSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhcnNlVmlld05hbWUoZnVsbFZpZXdOYW1lKTtcbiAgICAgICAgY29uc3QgZGVzaWduRG9jTmFtZSA9ICdfZGVzaWduLycgKyBwYXJ0c1swXTtcbiAgICAgICAgY29uc3Qgdmlld05hbWUgPSBwYXJ0c1sxXTtcbiAgICAgICAgbGV0IHZpZXdzID0gZG9jc1RvVmlld3MuZ2V0KGRlc2lnbkRvY05hbWUpO1xuICAgICAgICBpZiAoIXZpZXdzKSB7XG4gICAgICAgICAgdmlld3MgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgZG9jc1RvVmlld3Muc2V0KGRlc2lnbkRvY05hbWUsIHZpZXdzKTtcbiAgICAgICAgfVxuICAgICAgICB2aWV3cy5hZGQodmlld05hbWUpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAga2V5cyA6IG1hcFRvS2V5c0FycmF5KGRvY3NUb1ZpZXdzKSxcbiAgICAgICAgaW5jbHVkZV9kb2NzIDogdHJ1ZVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZGIuYWxsRG9jcyhvcHRzKTtcbiAgICAgIGNvbnN0IHZpZXdzVG9TdGF0dXMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHJlcy5yb3dzKSB7XG4gICAgICAgIGNvbnN0IGRkb2NOYW1lID0gcm93LmtleS5zdWJzdHJpbmcoOCk7IC8vIGN1dHMgb2ZmICdfZGVzaWduLydcbiAgICAgICAgZm9yIChjb25zdCB2aWV3TmFtZSBvZiBkb2NzVG9WaWV3cy5nZXQocm93LmtleSkpIHtcbiAgICAgICAgICBsZXQgZnVsbFZpZXdOYW1lID0gZGRvY05hbWUgKyAnLycgKyB2aWV3TmFtZTtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICBpZiAoIW1ldGFEb2Mudmlld3NbZnVsbFZpZXdOYW1lXSkge1xuICAgICAgICAgICAgLy8gbmV3IGZvcm1hdCwgd2l0aG91dCBzbGFzaGVzLCB0byBzdXBwb3J0IFBvdWNoREIgMi4yLjBcbiAgICAgICAgICAgIC8vIG1pZ3JhdGlvbiB0ZXN0IGluIHBvdWNoZGIncyBicm93c2VyLm1pZ3JhdGlvbi5qcyB2ZXJpZmllcyB0aGlzXG4gICAgICAgICAgICBmdWxsVmlld05hbWUgPSB2aWV3TmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgdmlld0RCTmFtZXMgPSBPYmplY3Qua2V5cyhtZXRhRG9jLnZpZXdzW2Z1bGxWaWV3TmFtZV0pO1xuICAgICAgICAgIC8vIGRlc2lnbiBkb2MgZGVsZXRlZCwgb3IgdmlldyBmdW5jdGlvbiBub25leGlzdGVudFxuICAgICAgICAgIGNvbnN0IHN0YXR1c0lzR29vZCA9IHJvdy5kb2MgJiYgcm93LmRvYy52aWV3cyAmJlxuICAgICAgICAgICAgcm93LmRvYy52aWV3c1t2aWV3TmFtZV07XG4gICAgICAgICAgZm9yIChjb25zdCB2aWV3REJOYW1lIG9mIHZpZXdEQk5hbWVzKSB7XG4gICAgICAgICAgICB2aWV3c1RvU3RhdHVzW3ZpZXdEQk5hbWVdID0gdmlld3NUb1N0YXR1c1t2aWV3REJOYW1lXSB8fCBzdGF0dXNJc0dvb2Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRic1RvRGVsZXRlID0gT2JqZWN0LmtleXModmlld3NUb1N0YXR1cylcbiAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAodmlld0RCTmFtZSkgeyByZXR1cm4gIXZpZXdzVG9TdGF0dXNbdmlld0RCTmFtZV07IH0pO1xuXG4gICAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBkYnNUb0RlbGV0ZS5tYXAoZnVuY3Rpb24gKHZpZXdEQk5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHNlcXVlbnRpYWxpemUoZ2V0UXVldWUodmlld0RCTmFtZSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IGRiLmNvbnN0cnVjdG9yKHZpZXdEQk5hbWUsIGRiLl9fb3B0cykuZGVzdHJveSgpO1xuICAgICAgICB9KSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge29rOiB0cnVlfTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4ge29rOiB0cnVlfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBxdWVyeVByb21pc2VkKGRiLCBmdW4sIG9wdHMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGIuX3F1ZXJ5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY3VzdG9tUXVlcnkoZGIsIGZ1biwgb3B0cyk7XG4gICAgfVxuICAgIGlmIChpc1JlbW90ZShkYikpIHtcbiAgICAgIHJldHVybiBodHRwUXVlcnkoZGIsIGZ1biwgb3B0cyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlVmlld09wdHMgPSB7XG4gICAgICBjaGFuZ2VzX2JhdGNoX3NpemU6IGRiLl9fb3B0cy52aWV3X3VwZGF0ZV9jaGFuZ2VzX2JhdGNoX3NpemUgfHwgQ0hBTkdFU19CQVRDSF9TSVpFJDFcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVvZiBmdW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyB0ZW1wX3ZpZXdcbiAgICAgIGNoZWNrUXVlcnlQYXJzZUVycm9yKG9wdHMsIGZ1bik7XG5cbiAgICAgIHRlbXBWaWV3UXVldWUuYWRkKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IGF3YWl0IGNyZWF0ZVZpZXcoXG4gICAgICAgICAgLyogc291cmNlREIgKi8gZGIsXG4gICAgICAgICAgLyogdmlld05hbWUgKi8gJ3RlbXBfdmlldy90ZW1wX3ZpZXcnLFxuICAgICAgICAgIC8qIG1hcEZ1biAqLyBmdW4ubWFwLFxuICAgICAgICAgIC8qIHJlZHVjZUZ1biAqLyBmdW4ucmVkdWNlLFxuICAgICAgICAgIC8qIHRlbXBvcmFyeSAqLyB0cnVlLFxuICAgICAgICAgIC8qIGxvY2FsRG9jTmFtZSAqLyBsb2NhbERvY05hbWUpO1xuXG4gICAgICAgIHJldHVybiBmaW4odXBkYXRlVmlldyh2aWV3LCB1cGRhdGVWaWV3T3B0cykudGhlbihcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7IHJldHVybiBxdWVyeVZpZXcodmlldywgb3B0cyk7IH0pLFxuICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZpZXcuZGIuZGVzdHJveSgpOyB9XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0ZW1wVmlld1F1ZXVlLmZpbmlzaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwZXJzaXN0ZW50IHZpZXdcbiAgICAgIGNvbnN0IGZ1bGxWaWV3TmFtZSA9IGZ1bjtcbiAgICAgIGNvbnN0IHBhcnRzID0gcGFyc2VWaWV3TmFtZShmdWxsVmlld05hbWUpO1xuICAgICAgY29uc3QgZGVzaWduRG9jTmFtZSA9IHBhcnRzWzBdO1xuICAgICAgY29uc3Qgdmlld05hbWUgPSBwYXJ0c1sxXTtcblxuICAgICAgY29uc3QgZG9jID0gYXdhaXQgZGIuZ2V0KCdfZGVzaWduLycgKyBkZXNpZ25Eb2NOYW1lKTtcbiAgICAgIGZ1biA9IGRvYy52aWV3cyAmJiBkb2Mudmlld3Nbdmlld05hbWVdO1xuXG4gICAgICBpZiAoIWZ1bikge1xuICAgICAgICAvLyBiYXNpYyB2YWxpZGF0b3I7IGl0J3MgYXNzdW1lZCB0aGF0IGV2ZXJ5IHN1YmNsYXNzIHdvdWxkIHdhbnQgdGhpc1xuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgZGRvYyAke2RvYy5faWR9IGhhcyBubyB2aWV3IG5hbWVkICR7dmlld05hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIGRkb2NWYWxpZGF0b3IoZG9jLCB2aWV3TmFtZSk7XG4gICAgICBjaGVja1F1ZXJ5UGFyc2VFcnJvcihvcHRzLCBmdW4pO1xuXG4gICAgICBjb25zdCB2aWV3ID0gYXdhaXQgY3JlYXRlVmlldyhcbiAgICAgICAgLyogc291cmNlREIgKi8gZGIsXG4gICAgICAgIC8qIHZpZXdOYW1lICovIGZ1bGxWaWV3TmFtZSxcbiAgICAgICAgLyogbWFwRnVuICovIGZ1bi5tYXAsXG4gICAgICAgIC8qIHJlZHVjZUZ1biAqLyBmdW4ucmVkdWNlLFxuICAgICAgICAvKiB0ZW1wb3JhcnkgKi8gZmFsc2UsXG4gICAgICAgIC8qIGxvY2FsRG9jTmFtZSAqLyBsb2NhbERvY05hbWUpO1xuXG4gICAgICBpZiAob3B0cy5zdGFsZSA9PT0gJ29rJyB8fCBvcHRzLnN0YWxlID09PSAndXBkYXRlX2FmdGVyJykge1xuICAgICAgICBpZiAob3B0cy5zdGFsZSA9PT0gJ3VwZGF0ZV9hZnRlcicpIHtcbiAgICAgICAgICBuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1cGRhdGVWaWV3KHZpZXcsIHVwZGF0ZVZpZXdPcHRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnlWaWV3KHZpZXcsIG9wdHMpO1xuICAgICAgfSBlbHNlIHsgLy8gc3RhbGUgbm90IG9rXG4gICAgICAgIGF3YWl0IHVwZGF0ZVZpZXcodmlldywgdXBkYXRlVmlld09wdHMpO1xuICAgICAgICByZXR1cm4gcXVlcnlWaWV3KHZpZXcsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFic3RyYWN0UXVlcnkoZnVuLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IGRiID0gdGhpcztcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICAgIG9wdHMgPSB7fTtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgPyBjb2VyY2VPcHRpb25zKG9wdHMpIDoge307XG5cbiAgICBpZiAodHlwZW9mIGZ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZnVuID0ge21hcCA6IGZ1bn07XG4gICAgfVxuXG4gICAgY29uc3QgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHF1ZXJ5UHJvbWlzZWQoZGIsIGZ1biwgb3B0cyk7XG4gICAgfSk7XG4gICAgcHJvbWlzZWRDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBjb25zdCBhYnN0cmFjdFZpZXdDbGVhbnVwID0gY2FsbGJhY2tpZnkoZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGRiID0gdGhpcztcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0eXBlb2YgZGIuX3ZpZXdDbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVmlld0NsZWFudXAoZGIpO1xuICAgIH1cbiAgICBpZiAoaXNSZW1vdGUoZGIpKSB7XG4gICAgICByZXR1cm4gaHR0cFZpZXdDbGVhbnVwKGRiKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsVmlld0NsZWFudXAoZGIpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHF1ZXJ5OiBhYnN0cmFjdFF1ZXJ5LFxuICAgIHZpZXdDbGVhbnVwOiBhYnN0cmFjdFZpZXdDbGVhbnVwXG4gIH07XG59XG5cbnZhciBidWlsdEluUmVkdWNlID0ge1xuICBfc3VtOiBmdW5jdGlvbiAoa2V5cywgdmFsdWVzKSB7XG4gICAgcmV0dXJuIHN1bSh2YWx1ZXMpO1xuICB9LFxuXG4gIF9jb3VudDogZnVuY3Rpb24gKGtleXMsIHZhbHVlcykge1xuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoO1xuICB9LFxuXG4gIF9zdGF0czogZnVuY3Rpb24gKGtleXMsIHZhbHVlcykge1xuICAgIC8vIG5vIG5lZWQgdG8gaW1wbGVtZW50IHJlcmVkdWNlPXRydWUsIGJlY2F1c2UgUG91Y2hcbiAgICAvLyB3aWxsIG5ldmVyIGNhbGwgaXRcbiAgICBmdW5jdGlvbiBzdW1zcXIodmFsdWVzKSB7XG4gICAgICB2YXIgX3N1bXNxciA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gdmFsdWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBudW0gPSB2YWx1ZXNbaV07XG4gICAgICAgIF9zdW1zcXIgKz0gKG51bSAqIG51bSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gX3N1bXNxcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1bSAgICAgOiBzdW0odmFsdWVzKSxcbiAgICAgIG1pbiAgICAgOiBNYXRoLm1pbi5hcHBseShudWxsLCB2YWx1ZXMpLFxuICAgICAgbWF4ICAgICA6IE1hdGgubWF4LmFwcGx5KG51bGwsIHZhbHVlcyksXG4gICAgICBjb3VudCAgIDogdmFsdWVzLmxlbmd0aCxcbiAgICAgIHN1bXNxciA6IHN1bXNxcih2YWx1ZXMpXG4gICAgfTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0QnVpbHRJbihyZWR1Y2VGdW5TdHJpbmcpIHtcbiAgaWYgKC9eX3N1bS8udGVzdChyZWR1Y2VGdW5TdHJpbmcpKSB7XG4gICAgcmV0dXJuIGJ1aWx0SW5SZWR1Y2UuX3N1bTtcbiAgfSBlbHNlIGlmICgvXl9jb3VudC8udGVzdChyZWR1Y2VGdW5TdHJpbmcpKSB7XG4gICAgcmV0dXJuIGJ1aWx0SW5SZWR1Y2UuX2NvdW50O1xuICB9IGVsc2UgaWYgKC9eX3N0YXRzLy50ZXN0KHJlZHVjZUZ1blN0cmluZykpIHtcbiAgICByZXR1cm4gYnVpbHRJblJlZHVjZS5fc3RhdHM7XG4gIH0gZWxzZSBpZiAoL15fLy50ZXN0KHJlZHVjZUZ1blN0cmluZykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocmVkdWNlRnVuU3RyaW5nICsgJyBpcyBub3QgYSBzdXBwb3J0ZWQgcmVkdWNlIGZ1bmN0aW9uLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcHBlcihtYXBGdW4sIGVtaXQpIHtcbiAgLy8gZm9yIHRlbXBfdmlld3Mgb25lIGNhbiB1c2UgZW1pdChkb2MsIGVtaXQpLCBzZWUgIzM4XG4gIGlmICh0eXBlb2YgbWFwRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgbWFwRnVuLmxlbmd0aCA9PT0gMikge1xuICAgIHZhciBvcmlnTWFwID0gbWFwRnVuO1xuICAgIHJldHVybiBmdW5jdGlvbiAoZG9jKSB7XG4gICAgICByZXR1cm4gb3JpZ01hcChkb2MsIGVtaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV2YWxGdW5jdGlvbldpdGhFdmFsKG1hcEZ1bi50b1N0cmluZygpLCBlbWl0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2VyKHJlZHVjZUZ1bikge1xuICB2YXIgcmVkdWNlRnVuU3RyaW5nID0gcmVkdWNlRnVuLnRvU3RyaW5nKCk7XG4gIHZhciBidWlsdEluID0gZ2V0QnVpbHRJbihyZWR1Y2VGdW5TdHJpbmcpO1xuICBpZiAoYnVpbHRJbikge1xuICAgIHJldHVybiBidWlsdEluO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBldmFsRnVuY3Rpb25XaXRoRXZhbChyZWR1Y2VGdW5TdHJpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRkb2NWYWxpZGF0b3IoZGRvYywgdmlld05hbWUpIHtcbiAgdmFyIGZ1biA9IGRkb2Mudmlld3MgJiYgZGRvYy52aWV3c1t2aWV3TmFtZV07XG4gIGlmICh0eXBlb2YgZnVuLm1hcCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcignZGRvYyAnICsgZGRvYy5faWQgKyAnIGhhcyBubyBzdHJpbmcgdmlldyBuYW1lZCAnICtcbiAgICAgIHZpZXdOYW1lICsgJywgaW5zdGVhZCBmb3VuZCBvYmplY3Qgb2YgdHlwZTogJyArIHR5cGVvZiBmdW4ubWFwKTtcbiAgfVxufVxuXG52YXIgbG9jYWxEb2NOYW1lID0gJ21ydmlld3MnO1xudmFyIGFic3RyYWN0ID0gY3JlYXRlQWJzdHJhY3RNYXBSZWR1Y2UobG9jYWxEb2NOYW1lLCBtYXBwZXIsIHJlZHVjZXIsIGRkb2NWYWxpZGF0b3IpO1xuXG5mdW5jdGlvbiBxdWVyeShmdW4sIG9wdHMsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBhYnN0cmFjdC5xdWVyeS5jYWxsKHRoaXMsIGZ1biwgb3B0cywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB2aWV3Q2xlYW51cChjYWxsYmFjaykge1xuICByZXR1cm4gYWJzdHJhY3Qudmlld0NsZWFudXAuY2FsbCh0aGlzLCBjYWxsYmFjayk7XG59XG5cbnZhciBtYXByZWR1Y2UgPSB7XG4gIHF1ZXJ5LFxuICB2aWV3Q2xlYW51cFxufTtcblxuZnVuY3Rpb24gZmlsZUhhc0NoYW5nZWQobG9jYWxEb2MsIHJlbW90ZURvYywgZmlsZW5hbWUpIHtcbiAgcmV0dXJuICFsb2NhbERvYy5fYXR0YWNobWVudHMgfHxcbiAgICAgICAgICFsb2NhbERvYy5fYXR0YWNobWVudHNbZmlsZW5hbWVdIHx8XG4gICAgICAgICBsb2NhbERvYy5fYXR0YWNobWVudHNbZmlsZW5hbWVdLmRpZ2VzdCAhPT0gcmVtb3RlRG9jLl9hdHRhY2htZW50c1tmaWxlbmFtZV0uZGlnZXN0O1xufVxuXG5mdW5jdGlvbiBnZXREb2NBdHRhY2htZW50cyhkYiwgZG9jKSB7XG4gIHZhciBmaWxlbmFtZXMgPSBPYmplY3Qua2V5cyhkb2MuX2F0dGFjaG1lbnRzKTtcbiAgcmV0dXJuIFByb21pc2UuYWxsKGZpbGVuYW1lcy5tYXAoZnVuY3Rpb24gKGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIGRiLmdldEF0dGFjaG1lbnQoZG9jLl9pZCwgZmlsZW5hbWUsIHtyZXY6IGRvYy5fcmV2fSk7XG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gZ2V0RG9jQXR0YWNobWVudHNGcm9tVGFyZ2V0T3JTb3VyY2UodGFyZ2V0LCBzcmMsIGRvYykge1xuICB2YXIgZG9DaGVja0ZvckxvY2FsQXR0YWNobWVudHMgPSBpc1JlbW90ZShzcmMpICYmICFpc1JlbW90ZSh0YXJnZXQpO1xuICB2YXIgZmlsZW5hbWVzID0gT2JqZWN0LmtleXMoZG9jLl9hdHRhY2htZW50cyk7XG5cbiAgaWYgKCFkb0NoZWNrRm9yTG9jYWxBdHRhY2htZW50cykge1xuICAgIHJldHVybiBnZXREb2NBdHRhY2htZW50cyhzcmMsIGRvYyk7XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0LmdldChkb2MuX2lkKS50aGVuKGZ1bmN0aW9uIChsb2NhbERvYykge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChmaWxlbmFtZXMubWFwKGZ1bmN0aW9uIChmaWxlbmFtZSkge1xuICAgICAgaWYgKGZpbGVIYXNDaGFuZ2VkKGxvY2FsRG9jLCBkb2MsIGZpbGVuYW1lKSkge1xuICAgICAgICByZXR1cm4gc3JjLmdldEF0dGFjaG1lbnQoZG9jLl9pZCwgZmlsZW5hbWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFyZ2V0LmdldEF0dGFjaG1lbnQobG9jYWxEb2MuX2lkLCBmaWxlbmFtZSk7XG4gICAgfSkpO1xuICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiBnZXREb2NBdHRhY2htZW50cyhzcmMsIGRvYyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWxrR2V0T3B0cyhkaWZmcykge1xuICB2YXIgcmVxdWVzdHMgPSBbXTtcbiAgT2JqZWN0LmtleXMoZGlmZnMpLmZvckVhY2goZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIG1pc3NpbmdSZXZzID0gZGlmZnNbaWRdLm1pc3Npbmc7XG4gICAgbWlzc2luZ1JldnMuZm9yRWFjaChmdW5jdGlvbiAobWlzc2luZ1Jldikge1xuICAgICAgcmVxdWVzdHMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICByZXY6IG1pc3NpbmdSZXZcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGRvY3M6IHJlcXVlc3RzLFxuICAgIHJldnM6IHRydWUsXG4gICAgbGF0ZXN0OiB0cnVlXG4gIH07XG59XG5cbi8vXG4vLyBGZXRjaCBhbGwgdGhlIGRvY3VtZW50cyBmcm9tIHRoZSBzcmMgYXMgZGVzY3JpYmVkIGluIHRoZSBcImRpZmZzXCIsXG4vLyB3aGljaCBpcyBhIG1hcHBpbmcgb2YgZG9jcyBJRHMgdG8gcmV2aXNpb25zLiBJZiB0aGUgc3RhdGUgZXZlclxuLy8gY2hhbmdlcyB0byBcImNhbmNlbGxlZFwiLCB0aGVuIHRoZSByZXR1cm5lZCBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQuXG4vLyBFbHNlIGl0IHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCBhIGxpc3Qgb2YgZmV0Y2hlZCBkb2N1bWVudHMuXG4vL1xuZnVuY3Rpb24gZ2V0RG9jcyhzcmMsIHRhcmdldCwgZGlmZnMsIHN0YXRlKSB7XG4gIGRpZmZzID0gY2xvbmUoZGlmZnMpOyAvLyB3ZSBkbyBub3QgbmVlZCB0byBtb2RpZnkgdGhpc1xuXG4gIHZhciByZXN1bHREb2NzID0gW10sXG4gICAgICBvayA9IHRydWU7XG5cbiAgZnVuY3Rpb24gZ2V0QWxsRG9jcygpIHtcblxuICAgIHZhciBidWxrR2V0T3B0cyA9IGNyZWF0ZUJ1bGtHZXRPcHRzKGRpZmZzKTtcblxuICAgIGlmICghYnVsa0dldE9wdHMuZG9jcy5sZW5ndGgpIHsgLy8gb3B0aW1pemF0aW9uOiBza2lwIGVtcHR5IHJlcXVlc3RzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNyYy5idWxrR2V0KGJ1bGtHZXRPcHRzKS50aGVuKGZ1bmN0aW9uIChidWxrR2V0UmVzcG9uc2UpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHN0YXRlLmNhbmNlbGxlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbGxlZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1bGtHZXRSZXNwb25zZS5yZXN1bHRzLm1hcChmdW5jdGlvbiAoYnVsa0dldEluZm8pIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGJ1bGtHZXRJbmZvLmRvY3MubWFwKGZ1bmN0aW9uIChkb2MpIHtcbiAgICAgICAgICB2YXIgcmVtb3RlRG9jID0gZG9jLm9rO1xuXG4gICAgICAgICAgaWYgKGRvYy5lcnJvcikge1xuICAgICAgICAgICAgLy8gd2hlbiBBVVRPX0NPTVBBQ1RJT04gaXMgc2V0LCBkb2NzIGNhbiBiZSByZXR1cm5lZCB3aGljaCBsb29rXG4gICAgICAgICAgICAvLyBsaWtlIHRoaXM6IHtcIm1pc3NpbmdcIjpcIjEtN2MzYWMyNTZiNjkzYzQ2MmFmODQ0MmY5OTJiODM2OTZcIn1cbiAgICAgICAgICAgIG9rID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZW1vdGVEb2MgfHwgIXJlbW90ZURvYy5fYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIHJldHVybiByZW1vdGVEb2M7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGdldERvY0F0dGFjaG1lbnRzRnJvbVRhcmdldE9yU291cmNlKHRhcmdldCwgc3JjLCByZW1vdGVEb2MpLnRoZW4oKGF0dGFjaG1lbnRzKSA9PiB7XG4gICAgICAgICAgICB2YXIgZmlsZW5hbWVzID0gT2JqZWN0LmtleXMocmVtb3RlRG9jLl9hdHRhY2htZW50cyk7XG4gICAgICAgICAgICBhdHRhY2htZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChhdHRhY2htZW50LCBpKSB7XG4gICAgICAgICAgICAgIHZhciBhdHQgPSByZW1vdGVEb2MuX2F0dGFjaG1lbnRzW2ZpbGVuYW1lc1tpXV07XG4gICAgICAgICAgICAgIGRlbGV0ZSBhdHQuc3R1YjtcbiAgICAgICAgICAgICAgZGVsZXRlIGF0dC5sZW5ndGg7XG4gICAgICAgICAgICAgIGF0dC5kYXRhID0gYXR0YWNobWVudDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gcmVtb3RlRG9jO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICB9KSlcblxuICAgICAgLnRoZW4oZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0RG9jcyA9IHJlc3VsdERvY3MuY29uY2F0KHJlc3VsdHMuZmxhdCgpLmZpbHRlcihCb29sZWFuKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJldHVyblJlc3VsdCgpIHtcbiAgICByZXR1cm4geyBvaywgZG9jczpyZXN1bHREb2NzIH07XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAudGhlbihnZXRBbGxEb2NzKVxuICAgIC50aGVuKHJldHVyblJlc3VsdCk7XG59XG5cbnZhciBDSEVDS1BPSU5UX1ZFUlNJT04gPSAxO1xudmFyIFJFUExJQ0FUT1IgPSBcInBvdWNoZGJcIjtcbi8vIFRoaXMgaXMgYW4gYXJiaXRyYXJ5IG51bWJlciB0byBsaW1pdCB0aGVcbi8vIGFtb3VudCBvZiByZXBsaWNhdGlvbiBoaXN0b3J5IHdlIHNhdmUgaW4gdGhlIGNoZWNrcG9pbnQuXG4vLyBJZiB3ZSBzYXZlIHRvbyBtdWNoLCB0aGUgY2hlY2twb2ludCBkb2NzIHdpbGwgYmVjb21lIHZlcnkgYmlnLFxuLy8gaWYgd2Ugc2F2ZSBmZXdlciwgd2UnbGwgcnVuIGEgZ3JlYXRlciByaXNrIG9mIGhhdmluZyB0b1xuLy8gcmVhZCBhbGwgdGhlIGNoYW5nZXMgZnJvbSAwIHdoZW4gY2hlY2twb2ludCBQVVRzIGZhaWxcbi8vIENvdWNoREIgMi4wIGhhcyBhIG1vcmUgaW52b2x2ZWQgaGlzdG9yeSBwcnVuaW5nLFxuLy8gYnV0IGxldCdzIGdvIGZvciB0aGUgc2ltcGxlIHZlcnNpb24gZm9yIG5vdy5cbnZhciBDSEVDS1BPSU5UX0hJU1RPUllfU0laRSA9IDU7XG52YXIgTE9XRVNUX1NFUSA9IDA7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoZWNrcG9pbnQoZGIsIGlkLCBjaGVja3BvaW50LCBzZXNzaW9uLCByZXR1cm5WYWx1ZSkge1xuICByZXR1cm4gZGIuZ2V0KGlkKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyci5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgaWYgKGRiLmFkYXB0ZXIgPT09ICdodHRwJyB8fCBkYi5hZGFwdGVyID09PSAnaHR0cHMnKSB7XG4gICAgICAgIGV4cGxhaW5FcnJvcihcbiAgICAgICAgICA0MDQsICdQb3VjaERCIGlzIGp1c3QgY2hlY2tpbmcgaWYgYSByZW1vdGUgY2hlY2twb2ludCBleGlzdHMuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbixcbiAgICAgICAgX2lkOiBpZCxcbiAgICAgICAgaGlzdG9yeTogW10sXG4gICAgICAgIHJlcGxpY2F0b3I6IFJFUExJQ0FUT1IsXG4gICAgICAgIHZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTlxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgZXJyO1xuICB9KS50aGVuKGZ1bmN0aW9uIChkb2MpIHtcbiAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIGNoZWNrcG9pbnQgaGFzIG5vdCBjaGFuZ2VkLCBkbyBub3QgdXBkYXRlXG4gICAgaWYgKGRvYy5sYXN0X3NlcSA9PT0gY2hlY2twb2ludCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgY3VycmVudCBlbnRyeSBmb3IgdGhpcyByZXBsaWNhdGlvblxuICAgIGRvYy5oaXN0b3J5ID0gKGRvYy5oaXN0b3J5IHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNlc3Npb25faWQgIT09IHNlc3Npb247XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgdGhlIGxhdGVzdCBjaGVja3BvaW50IHRvIGhpc3RvcnlcbiAgICBkb2MuaGlzdG9yeS51bnNoaWZ0KHtcbiAgICAgIGxhc3Rfc2VxOiBjaGVja3BvaW50LFxuICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvblxuICAgIH0pO1xuXG4gICAgLy8gSnVzdCB0YWtlIHRoZSBsYXN0IHBpZWNlcyBpbiBoaXN0b3J5LCB0b1xuICAgIC8vIGF2b2lkIHJlYWxseSBiaWcgY2hlY2twb2ludCBkb2NzLlxuICAgIC8vIHNlZSBjb21tZW50IG9uIGhpc3Rvcnkgc2l6ZSBhYm92ZVxuICAgIGRvYy5oaXN0b3J5ID0gZG9jLmhpc3Rvcnkuc2xpY2UoMCwgQ0hFQ0tQT0lOVF9ISVNUT1JZX1NJWkUpO1xuXG4gICAgZG9jLnZlcnNpb24gPSBDSEVDS1BPSU5UX1ZFUlNJT047XG4gICAgZG9jLnJlcGxpY2F0b3IgPSBSRVBMSUNBVE9SO1xuXG4gICAgZG9jLnNlc3Npb25faWQgPSBzZXNzaW9uO1xuICAgIGRvYy5sYXN0X3NlcSA9IGNoZWNrcG9pbnQ7XG5cbiAgICByZXR1cm4gZGIucHV0KGRvYykuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICAvLyByZXRyeTsgc29tZW9uZSBpcyB0cnlpbmcgdG8gd3JpdGUgYSBjaGVja3BvaW50IHNpbXVsdGFuZW91c2x5XG4gICAgICAgIHJldHVybiB1cGRhdGVDaGVja3BvaW50KGRiLCBpZCwgY2hlY2twb2ludCwgc2Vzc2lvbiwgcmV0dXJuVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQ2hlY2twb2ludGVySW50ZXJuYWwge1xuICBjb25zdHJ1Y3RvcihzcmMsIHRhcmdldCwgaWQsIHJldHVyblZhbHVlLCBvcHRzID0ge1xuICAgIHdyaXRlU291cmNlQ2hlY2twb2ludDogdHJ1ZSxcbiAgICB3cml0ZVRhcmdldENoZWNrcG9pbnQ6IHRydWUsXG4gIH0pIHtcbiAgICB0aGlzLnNyYyA9IHNyYztcbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5yZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlO1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG5cbiAgICBpZiAodHlwZW9mIG9wdHMud3JpdGVTb3VyY2VDaGVja3BvaW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBvcHRzLndyaXRlU291cmNlQ2hlY2twb2ludCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLndyaXRlVGFyZ2V0Q2hlY2twb2ludCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgb3B0cy53cml0ZVRhcmdldENoZWNrcG9pbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlQ2hlY2twb2ludChjaGVja3BvaW50LCBzZXNzaW9uKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhcmdldChjaGVja3BvaW50LCBzZXNzaW9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBzZWxmLnVwZGF0ZVNvdXJjZShjaGVja3BvaW50LCBzZXNzaW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVRhcmdldChjaGVja3BvaW50LCBzZXNzaW9uKSB7XG4gICAgaWYgKHRoaXMub3B0cy53cml0ZVRhcmdldENoZWNrcG9pbnQpIHtcbiAgICAgIHJldHVybiB1cGRhdGVDaGVja3BvaW50KHRoaXMudGFyZ2V0LCB0aGlzLmlkLCBjaGVja3BvaW50LFxuICAgICAgICBzZXNzaW9uLCB0aGlzLnJldHVyblZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3VyY2UoY2hlY2twb2ludCwgc2Vzc2lvbikge1xuICAgIGlmICh0aGlzLm9wdHMud3JpdGVTb3VyY2VDaGVja3BvaW50KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICByZXR1cm4gdXBkYXRlQ2hlY2twb2ludCh0aGlzLnNyYywgdGhpcy5pZCwgY2hlY2twb2ludCxcbiAgICAgICAgc2Vzc2lvbiwgdGhpcy5yZXR1cm5WYWx1ZSlcbiAgICAgICAgLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICBpZiAoaXNGb3JiaWRkZW5FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICBzZWxmLm9wdHMud3JpdGVTb3VyY2VDaGVja3BvaW50ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRDaGVja3BvaW50KCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGlmICghc2VsZi5vcHRzLndyaXRlU291cmNlQ2hlY2twb2ludCAmJiAhc2VsZi5vcHRzLndyaXRlVGFyZ2V0Q2hlY2twb2ludCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShMT1dFU1RfU0VRKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5vcHRzICYmIHNlbGYub3B0cy53cml0ZVNvdXJjZUNoZWNrcG9pbnQgJiYgIXNlbGYub3B0cy53cml0ZVRhcmdldENoZWNrcG9pbnQpIHtcbiAgICAgIHJldHVybiBzZWxmLnNyYy5nZXQoc2VsZi5pZCkudGhlbihmdW5jdGlvbiAoc291cmNlRG9jKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VEb2MubGFzdF9zZXEgfHwgTE9XRVNUX1NFUTtcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIExPV0VTVF9TRVE7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi50YXJnZXQuZ2V0KHNlbGYuaWQpLnRoZW4oZnVuY3Rpb24gKHRhcmdldERvYykge1xuICAgICAgaWYgKHNlbGYub3B0cyAmJiBzZWxmLm9wdHMud3JpdGVUYXJnZXRDaGVja3BvaW50ICYmICFzZWxmLm9wdHMud3JpdGVTb3VyY2VDaGVja3BvaW50KSB7XG4gICAgICAgIHJldHVybiB0YXJnZXREb2MubGFzdF9zZXEgfHwgTE9XRVNUX1NFUTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNlbGYuc3JjLmdldChzZWxmLmlkKS50aGVuKGZ1bmN0aW9uIChzb3VyY2VEb2MpIHtcbiAgICAgICAgLy8gU2luY2Ugd2UgY2FuJ3QgbWlncmF0ZSBhbiBvbGQgdmVyc2lvbiBkb2MgdG8gYSBuZXcgb25lXG4gICAgICAgIC8vIChubyBzZXNzaW9uIGlkKSwgd2UganVzdCBnbyB3aXRoIHRoZSBsb3dlc3Qgc2VxIGluIHRoaXMgY2FzZVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKHRhcmdldERvYy52ZXJzaW9uICE9PSBzb3VyY2VEb2MudmVyc2lvbikge1xuICAgICAgICAgIHJldHVybiBMT1dFU1RfU0VRO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHZlcnNpb247XG4gICAgICAgIGlmICh0YXJnZXREb2MudmVyc2lvbikge1xuICAgICAgICAgIHZlcnNpb24gPSB0YXJnZXREb2MudmVyc2lvbi50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZlcnNpb24gPSBcInVuZGVmaW5lZFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcnNpb24gaW4gY29tcGFyaXNvbnMpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGFyaXNvbnNbdmVyc2lvbl0odGFyZ2V0RG9jLCBzb3VyY2VEb2MpO1xuICAgICAgICB9XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiBMT1dFU1RfU0VRO1xuICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA0ICYmIHRhcmdldERvYy5sYXN0X3NlcSkge1xuICAgICAgICAgIHJldHVybiBzZWxmLnNyYy5wdXQoe1xuICAgICAgICAgICAgX2lkOiBzZWxmLmlkLFxuICAgICAgICAgICAgbGFzdF9zZXE6IExPV0VTVF9TRVFcbiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBMT1dFU1RfU0VRO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChpc0ZvcmJpZGRlbkVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgc2VsZi5vcHRzLndyaXRlU291cmNlQ2hlY2twb2ludCA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0RG9jLmxhc3Rfc2VxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIHJldHVybiBMT1dFU1RfU0VRO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH0pO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGlmIChlcnIuc3RhdHVzICE9PSA0MDQpIHtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIExPV0VTVF9TRVE7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNvbXBhcmlzb25zID0ge1xuICBcInVuZGVmaW5lZFwiOiBmdW5jdGlvbiAodGFyZ2V0RG9jLCBzb3VyY2VEb2MpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBwcmV2aW91cyBjb21wYXJpc29uIGZ1bmN0aW9uXG4gICAgaWYgKGNvbGxhdGUodGFyZ2V0RG9jLmxhc3Rfc2VxLCBzb3VyY2VEb2MubGFzdF9zZXEpID09PSAwKSB7XG4gICAgICByZXR1cm4gc291cmNlRG9jLmxhc3Rfc2VxO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiAwO1xuICB9LFxuICBcIjFcIjogZnVuY3Rpb24gKHRhcmdldERvYywgc291cmNlRG9jKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBwb3J0ZWQgZnJvbSBDb3VjaERCXG4gICAgcmV0dXJuIGNvbXBhcmVSZXBsaWNhdGlvbkxvZ3Moc291cmNlRG9jLCB0YXJnZXREb2MpLmxhc3Rfc2VxO1xuICB9XG59O1xuXG4vLyBUaGlzIGNoZWNrcG9pbnQgY29tcGFyaXNvbiBpcyBwb3J0ZWQgZnJvbSBDb3VjaERCcyBzb3VyY2Vcbi8vIHRoZXkgY29tZSBmcm9tIGhlcmU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL2NvdWNoZGItY291Y2gtcmVwbGljYXRvci9ibG9iL21hc3Rlci9zcmMvY291Y2hfcmVwbGljYXRvci5lcmwjTDg2My1MOTA2XG5cbmZ1bmN0aW9uIGNvbXBhcmVSZXBsaWNhdGlvbkxvZ3Moc3JjRG9jLCB0Z3REb2MpIHtcbiAgaWYgKHNyY0RvYy5zZXNzaW9uX2lkID09PSB0Z3REb2Muc2Vzc2lvbl9pZCkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X3NlcTogc3JjRG9jLmxhc3Rfc2VxLFxuICAgICAgaGlzdG9yeTogc3JjRG9jLmhpc3RvcnlcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmVSZXBsaWNhdGlvbkhpc3Rvcnkoc3JjRG9jLmhpc3RvcnksIHRndERvYy5oaXN0b3J5KTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZVJlcGxpY2F0aW9uSGlzdG9yeShzb3VyY2VIaXN0b3J5LCB0YXJnZXRIaXN0b3J5KSB7XG4gIC8vIHRoZSBlcmxhbmcgbG9vcCB2aWEgZnVuY3Rpb24gYXJndW1lbnRzIGlzIG5vdCBzbyBlYXN5IHRvIHJlcGVhdCBpbiBKU1xuICAvLyB0aGVyZWZvcmUsIGRvaW5nIHRoaXMgYXMgcmVjdXJzaW9uXG4gIHZhciBTID0gc291cmNlSGlzdG9yeVswXTtcbiAgdmFyIHNvdXJjZVJlc3QgPSBzb3VyY2VIaXN0b3J5LnNsaWNlKDEpO1xuICB2YXIgVCA9IHRhcmdldEhpc3RvcnlbMF07XG4gIHZhciB0YXJnZXRSZXN0ID0gdGFyZ2V0SGlzdG9yeS5zbGljZSgxKTtcblxuICBpZiAoIVMgfHwgdGFyZ2V0SGlzdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFzdF9zZXE6IExPV0VTVF9TRVEsXG4gICAgICBoaXN0b3J5OiBbXVxuICAgIH07XG4gIH1cblxuICB2YXIgc291cmNlSWQgPSBTLnNlc3Npb25faWQ7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoaGFzU2Vzc2lvbklkKHNvdXJjZUlkLCB0YXJnZXRIaXN0b3J5KSkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X3NlcTogUy5sYXN0X3NlcSxcbiAgICAgIGhpc3Rvcnk6IHNvdXJjZUhpc3RvcnlcbiAgICB9O1xuICB9XG5cbiAgdmFyIHRhcmdldElkID0gVC5zZXNzaW9uX2lkO1xuICBpZiAoaGFzU2Vzc2lvbklkKHRhcmdldElkLCBzb3VyY2VSZXN0KSkge1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X3NlcTogVC5sYXN0X3NlcSxcbiAgICAgIGhpc3Rvcnk6IHRhcmdldFJlc3RcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmVSZXBsaWNhdGlvbkhpc3Rvcnkoc291cmNlUmVzdCwgdGFyZ2V0UmVzdCk7XG59XG5cbmZ1bmN0aW9uIGhhc1Nlc3Npb25JZChzZXNzaW9uSWQsIGhpc3RvcnkpIHtcbiAgdmFyIHByb3BzID0gaGlzdG9yeVswXTtcbiAgdmFyIHJlc3QgPSBoaXN0b3J5LnNsaWNlKDEpO1xuXG4gIGlmICghc2Vzc2lvbklkIHx8IGhpc3RvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlc3Npb25JZCA9PT0gcHJvcHMuc2Vzc2lvbl9pZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGhhc1Nlc3Npb25JZChzZXNzaW9uSWQsIHJlc3QpO1xufVxuXG5mdW5jdGlvbiBpc0ZvcmJpZGRlbkVycm9yKGVycikge1xuICByZXR1cm4gdHlwZW9mIGVyci5zdGF0dXMgPT09ICdudW1iZXInICYmIE1hdGguZmxvb3IoZXJyLnN0YXR1cyAvIDEwMCkgPT09IDQ7XG59XG5cbmZ1bmN0aW9uIENoZWNrcG9pbnRlcihzcmMsIHRhcmdldCwgaWQsIHJldHVyblZhbHVlLCBvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDaGVja3BvaW50ZXJJbnRlcm5hbCkpIHtcbiAgICByZXR1cm4gbmV3IENoZWNrcG9pbnRlckludGVybmFsKHNyYywgdGFyZ2V0LCBpZCwgcmV0dXJuVmFsdWUsIG9wdHMpO1xuICB9XG4gIHJldHVybiBDaGVja3BvaW50ZXI7XG59XG5cbnZhciBTVEFSVElOR19CQUNLX09GRiA9IDA7XG5cbmZ1bmN0aW9uIGJhY2tPZmYob3B0cywgcmV0dXJuVmFsdWUsIGVycm9yLCBjYWxsYmFjaykge1xuICBpZiAob3B0cy5yZXRyeSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm5WYWx1ZS5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICByZXR1cm5WYWx1ZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmICh0eXBlb2Ygb3B0cy5iYWNrX29mZl9mdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdHMuYmFja19vZmZfZnVuY3Rpb24gPSBkZWZhdWx0QmFja09mZjtcbiAgfVxuICByZXR1cm5WYWx1ZS5lbWl0KCdyZXF1ZXN0RXJyb3InLCBlcnJvcik7XG4gIGlmIChyZXR1cm5WYWx1ZS5zdGF0ZSA9PT0gJ2FjdGl2ZScgfHwgcmV0dXJuVmFsdWUuc3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgIHJldHVyblZhbHVlLmVtaXQoJ3BhdXNlZCcsIGVycm9yKTtcbiAgICByZXR1cm5WYWx1ZS5zdGF0ZSA9ICdzdG9wcGVkJztcbiAgICB2YXIgYmFja09mZlNldCA9IGZ1bmN0aW9uIGJhY2tvZmZUaW1lU2V0KCkge1xuICAgICAgb3B0cy5jdXJyZW50X2JhY2tfb2ZmID0gU1RBUlRJTkdfQkFDS19PRkY7XG4gICAgfTtcbiAgICB2YXIgcmVtb3ZlQmFja09mZlNldHRlciA9IGZ1bmN0aW9uIHJlbW92ZUJhY2tPZmZUaW1lU2V0KCkge1xuICAgICAgcmV0dXJuVmFsdWUucmVtb3ZlTGlzdGVuZXIoJ2FjdGl2ZScsIGJhY2tPZmZTZXQpO1xuICAgIH07XG4gICAgcmV0dXJuVmFsdWUub25jZSgncGF1c2VkJywgcmVtb3ZlQmFja09mZlNldHRlcik7XG4gICAgcmV0dXJuVmFsdWUub25jZSgnYWN0aXZlJywgYmFja09mZlNldCk7XG4gIH1cblxuICBvcHRzLmN1cnJlbnRfYmFja19vZmYgPSBvcHRzLmN1cnJlbnRfYmFja19vZmYgfHwgU1RBUlRJTkdfQkFDS19PRkY7XG4gIG9wdHMuY3VycmVudF9iYWNrX29mZiA9IG9wdHMuYmFja19vZmZfZnVuY3Rpb24ob3B0cy5jdXJyZW50X2JhY2tfb2ZmKTtcbiAgc2V0VGltZW91dChjYWxsYmFjaywgb3B0cy5jdXJyZW50X2JhY2tfb2ZmKTtcbn1cblxuZnVuY3Rpb24gc29ydE9iamVjdFByb3BlcnRpZXNCeUtleShxdWVyeVBhcmFtcykge1xuICByZXR1cm4gT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpLnNvcnQoY29sbGF0ZSkucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSkge1xuICAgIHJlc3VsdFtrZXldID0gcXVlcnlQYXJhbXNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cbi8vIEdlbmVyYXRlIGEgdW5pcXVlIGlkIHBhcnRpY3VsYXIgdG8gdGhpcyByZXBsaWNhdGlvbi5cbi8vIE5vdCBndWFyYW50ZWVkIHRvIGFsaWduIHBlcmZlY3RseSB3aXRoIENvdWNoREIncyByZXAgaWRzLlxuZnVuY3Rpb24gZ2VuZXJhdGVSZXBsaWNhdGlvbklkKHNyYywgdGFyZ2V0LCBvcHRzKSB7XG4gIHZhciBkb2NJZHMgPSBvcHRzLmRvY19pZHMgPyBvcHRzLmRvY19pZHMuc29ydChjb2xsYXRlKSA6ICcnO1xuICB2YXIgZmlsdGVyRnVuID0gb3B0cy5maWx0ZXIgPyBvcHRzLmZpbHRlci50b1N0cmluZygpIDogJyc7XG4gIHZhciBxdWVyeVBhcmFtcyA9ICcnO1xuICB2YXIgZmlsdGVyVmlld05hbWUgPSAgJyc7XG4gIHZhciBzZWxlY3RvciA9ICcnO1xuXG4gIC8vIHBvc3NpYmlsaXR5IGZvciBjaGVja3BvaW50cyB0byBiZSBsb3N0IGhlcmUgYXMgYmVoYXZpb3VyIG9mXG4gIC8vIEpTT04uc3RyaW5naWZ5IGlzIG5vdCBzdGFibGUgKHNlZSAjNjIyNilcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gIGlmIChvcHRzLnNlbGVjdG9yKSB7XG4gICAgc2VsZWN0b3IgPSBKU09OLnN0cmluZ2lmeShvcHRzLnNlbGVjdG9yKTtcbiAgfVxuXG4gIGlmIChvcHRzLmZpbHRlciAmJiBvcHRzLnF1ZXJ5X3BhcmFtcykge1xuICAgIHF1ZXJ5UGFyYW1zID0gSlNPTi5zdHJpbmdpZnkoc29ydE9iamVjdFByb3BlcnRpZXNCeUtleShvcHRzLnF1ZXJ5X3BhcmFtcykpO1xuICB9XG5cbiAgaWYgKG9wdHMuZmlsdGVyICYmIG9wdHMuZmlsdGVyID09PSAnX3ZpZXcnKSB7XG4gICAgZmlsdGVyVmlld05hbWUgPSBvcHRzLnZpZXcudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChbc3JjLmlkKCksIHRhcmdldC5pZCgpXSkudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgdmFyIHF1ZXJ5RGF0YSA9IHJlc1swXSArIHJlc1sxXSArIGZpbHRlckZ1biArIGZpbHRlclZpZXdOYW1lICtcbiAgICAgIHF1ZXJ5UGFyYW1zICsgZG9jSWRzICsgc2VsZWN0b3I7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBiaW5hcnlNZDUocXVlcnlEYXRhLCByZXNvbHZlKTtcbiAgICB9KTtcbiAgfSkudGhlbihmdW5jdGlvbiAobWQ1c3VtKSB7XG4gICAgLy8gY2FuJ3QgdXNlIHN0cmFpZ2h0LXVwIG1kNSBhbHBoYWJldCwgYmVjYXVzZVxuICAgIC8vIHRoZSBjaGFyICcvJyBpcyBpbnRlcnByZXRlZCBhcyBiZWluZyBmb3IgYXR0YWNobWVudHMsXG4gICAgLy8gYW5kICsgaXMgYWxzbyBub3QgdXJsLXNhZmVcbiAgICBtZDVzdW0gPSBtZDVzdW0ucmVwbGFjZSgvXFwvL2csICcuJykucmVwbGFjZSgvXFwrL2csICdfJyk7XG4gICAgcmV0dXJuICdfbG9jYWwvJyArIG1kNXN1bTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlcGxpY2F0ZShzcmMsIHRhcmdldCwgb3B0cywgcmV0dXJuVmFsdWUsIHJlc3VsdCkge1xuICB2YXIgYmF0Y2hlcyA9IFtdOyAgICAgICAgICAgICAgIC8vIGxpc3Qgb2YgYmF0Y2hlcyB0byBiZSBwcm9jZXNzZWRcbiAgdmFyIGN1cnJlbnRCYXRjaDsgICAgICAgICAgICAgICAvLyB0aGUgYmF0Y2ggY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZFxuICB2YXIgcGVuZGluZ0JhdGNoID0ge1xuICAgIHNlcTogMCxcbiAgICBjaGFuZ2VzOiBbXSxcbiAgICBkb2NzOiBbXVxuICB9OyAvLyBuZXh0IGJhdGNoLCBub3QgeWV0IHJlYWR5IHRvIGJlIHByb2Nlc3NlZFxuICB2YXIgd3JpdGluZ0NoZWNrcG9pbnQgPSBmYWxzZTsgIC8vIHRydWUgd2hpbGUgY2hlY2twb2ludCBpcyBiZWluZyB3cml0dGVuXG4gIHZhciBjaGFuZ2VzQ29tcGxldGVkID0gZmFsc2U7ICAgLy8gdHJ1ZSB3aGVuIGFsbCBjaGFuZ2VzIHJlY2VpdmVkXG4gIHZhciByZXBsaWNhdGlvbkNvbXBsZXRlZCA9IGZhbHNlOyAvLyB0cnVlIHdoZW4gcmVwbGljYXRpb24gaGFzIGNvbXBsZXRlZFxuICAvLyBpbml0aWFsX2xhc3Rfc2VxIGlzIHRoZSBzdGF0ZSBvZiB0aGUgc291cmNlIGRiIGJlZm9yZVxuICAvLyByZXBsaWNhdGlvbiBzdGFydGVkLCBhbmQgaXQgaXMgX25vdF8gdXBkYXRlZCBkdXJpbmdcbiAgLy8gcmVwbGljYXRpb24gb3IgdXNlZCBhbnl3aGVyZSBlbHNlLCBhcyBvcHBvc2VkIHRvIGxhc3Rfc2VxXG4gIHZhciBpbml0aWFsX2xhc3Rfc2VxID0gMDtcbiAgdmFyIGxhc3Rfc2VxID0gMDtcbiAgdmFyIGNvbnRpbnVvdXMgPSBvcHRzLmNvbnRpbnVvdXMgfHwgb3B0cy5saXZlIHx8IGZhbHNlO1xuICB2YXIgYmF0Y2hfc2l6ZSA9IG9wdHMuYmF0Y2hfc2l6ZSB8fCAxMDA7XG4gIHZhciBiYXRjaGVzX2xpbWl0ID0gb3B0cy5iYXRjaGVzX2xpbWl0IHx8IDEwO1xuICB2YXIgc3R5bGUgPSBvcHRzLnN0eWxlIHx8ICdhbGxfZG9jcyc7XG4gIHZhciBjaGFuZ2VzUGVuZGluZyA9IGZhbHNlOyAgICAgLy8gdHJ1ZSB3aGlsZSBzcmMuY2hhbmdlcyBpcyBydW5uaW5nXG4gIHZhciBkb2NfaWRzID0gb3B0cy5kb2NfaWRzO1xuICB2YXIgc2VsZWN0b3IgPSBvcHRzLnNlbGVjdG9yO1xuICB2YXIgcmVwSWQ7XG4gIHZhciBjaGVja3BvaW50ZXI7XG4gIHZhciBjaGFuZ2VkRG9jcyA9IFtdO1xuICAvLyBMaWtlIGNvdWNoZGIsIGV2ZXJ5IHJlcGxpY2F0aW9uIGdldHMgYSB1bmlxdWUgc2Vzc2lvbiBpZFxuICB2YXIgc2Vzc2lvbiA9IHV1aWQoKTtcbiAgdmFyIHRhc2tJZDtcblxuICByZXN1bHQgPSByZXN1bHQgfHwge1xuICAgIG9rOiB0cnVlLFxuICAgIHN0YXJ0X3RpbWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICBkb2NzX3JlYWQ6IDAsXG4gICAgZG9jc193cml0dGVuOiAwLFxuICAgIGRvY193cml0ZV9mYWlsdXJlczogMCxcbiAgICBlcnJvcnM6IFtdXG4gIH07XG5cbiAgdmFyIGNoYW5nZXNPcHRzID0ge307XG4gIHJldHVyblZhbHVlLnJlYWR5KHNyYywgdGFyZ2V0KTtcblxuICBmdW5jdGlvbiBpbml0Q2hlY2twb2ludGVyKCkge1xuICAgIGlmIChjaGVja3BvaW50ZXIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGdlbmVyYXRlUmVwbGljYXRpb25JZChzcmMsIHRhcmdldCwgb3B0cykudGhlbihmdW5jdGlvbiAocmVzKSB7XG4gICAgICByZXBJZCA9IHJlcztcblxuICAgICAgdmFyIGNoZWNrcG9pbnRPcHRzID0ge307XG4gICAgICBpZiAob3B0cy5jaGVja3BvaW50ID09PSBmYWxzZSkge1xuICAgICAgICBjaGVja3BvaW50T3B0cyA9IHsgd3JpdGVTb3VyY2VDaGVja3BvaW50OiBmYWxzZSwgd3JpdGVUYXJnZXRDaGVja3BvaW50OiBmYWxzZSB9O1xuICAgICAgfSBlbHNlIGlmIChvcHRzLmNoZWNrcG9pbnQgPT09ICdzb3VyY2UnKSB7XG4gICAgICAgIGNoZWNrcG9pbnRPcHRzID0geyB3cml0ZVNvdXJjZUNoZWNrcG9pbnQ6IHRydWUsIHdyaXRlVGFyZ2V0Q2hlY2twb2ludDogZmFsc2UgfTtcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5jaGVja3BvaW50ID09PSAndGFyZ2V0Jykge1xuICAgICAgICBjaGVja3BvaW50T3B0cyA9IHsgd3JpdGVTb3VyY2VDaGVja3BvaW50OiBmYWxzZSwgd3JpdGVUYXJnZXRDaGVja3BvaW50OiB0cnVlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja3BvaW50T3B0cyA9IHsgd3JpdGVTb3VyY2VDaGVja3BvaW50OiB0cnVlLCB3cml0ZVRhcmdldENoZWNrcG9pbnQ6IHRydWUgfTtcbiAgICAgIH1cblxuICAgICAgY2hlY2twb2ludGVyID0gbmV3IENoZWNrcG9pbnRlcihzcmMsIHRhcmdldCwgcmVwSWQsIHJldHVyblZhbHVlLCBjaGVja3BvaW50T3B0cyk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZURvY3MoKSB7XG4gICAgY2hhbmdlZERvY3MgPSBbXTtcblxuICAgIGlmIChjdXJyZW50QmF0Y2guZG9jcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGRvY3MgPSBjdXJyZW50QmF0Y2guZG9jcztcbiAgICB2YXIgYnVsa09wdHMgPSB7dGltZW91dDogb3B0cy50aW1lb3V0fTtcbiAgICByZXR1cm4gdGFyZ2V0LmJ1bGtEb2NzKHtkb2NzLCBuZXdfZWRpdHM6IGZhbHNlfSwgYnVsa09wdHMpLnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7XG4gICAgICAgIGNvbXBsZXRlUmVwbGljYXRpb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5jZWxsZWQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gYHJlc2AgZG9lc24ndCBpbmNsdWRlIGZ1bGwgZG9jdW1lbnRzICh3aGljaCBsaXZlIGluIGBkb2NzYCksIHNvIHdlIGNyZWF0ZSBhIG1hcCBvZlxuICAgICAgLy8gKGlkIC0+IGVycm9yKSwgYW5kIGNoZWNrIGZvciBlcnJvcnMgd2hpbGUgaXRlcmF0aW5nIG92ZXIgYGRvY3NgXG4gICAgICB2YXIgZXJyb3JzQnlJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICByZXMuZm9yRWFjaChmdW5jdGlvbiAocmVzKSB7XG4gICAgICAgIGlmIChyZXMuZXJyb3IpIHtcbiAgICAgICAgICBlcnJvcnNCeUlkW3Jlcy5pZF0gPSByZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZXJyb3JzTm8gPSBPYmplY3Qua2V5cyhlcnJvcnNCeUlkKS5sZW5ndGg7XG4gICAgICByZXN1bHQuZG9jX3dyaXRlX2ZhaWx1cmVzICs9IGVycm9yc05vO1xuICAgICAgcmVzdWx0LmRvY3Nfd3JpdHRlbiArPSBkb2NzLmxlbmd0aCAtIGVycm9yc05vO1xuXG4gICAgICBkb2NzLmZvckVhY2goZnVuY3Rpb24gKGRvYykge1xuICAgICAgICB2YXIgZXJyb3IgPSBlcnJvcnNCeUlkW2RvYy5faWRdO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIC8vIE5vcm1hbGl6ZSBlcnJvciBuYW1lLiBpLmUuICdVbmF1dGhvcml6ZWQnIC0+ICd1bmF1dGhvcml6ZWQnIChlZyBTeW5jIEdhdGV3YXkpXG4gICAgICAgICAgdmFyIGVycm9yTmFtZSA9IChlcnJvci5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChlcnJvck5hbWUgPT09ICd1bmF1dGhvcml6ZWQnIHx8IGVycm9yTmFtZSA9PT0gJ2ZvcmJpZGRlbicpIHtcbiAgICAgICAgICAgIHJldHVyblZhbHVlLmVtaXQoJ2RlbmllZCcsIGNsb25lKGVycm9yKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VkRG9jcy5wdXNoKGRvYyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgcmVzdWx0LmRvY193cml0ZV9mYWlsdXJlcyArPSBkb2NzLmxlbmd0aDtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmlzaEJhdGNoKCkge1xuICAgIGlmIChjdXJyZW50QmF0Y2guZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgd2FzIGEgcHJvYmxlbSBnZXR0aW5nIGRvY3MuJyk7XG4gICAgfVxuICAgIHJlc3VsdC5sYXN0X3NlcSA9IGxhc3Rfc2VxID0gY3VycmVudEJhdGNoLnNlcTtcbiAgICB2YXIgb3V0UmVzdWx0ID0gY2xvbmUocmVzdWx0KTtcbiAgICBpZiAoY2hhbmdlZERvY3MubGVuZ3RoKSB7XG4gICAgICBvdXRSZXN1bHQuZG9jcyA9IGNoYW5nZWREb2NzO1xuICAgICAgLy8gQXR0YWNoICdwZW5kaW5nJyBwcm9wZXJ0eSBpZiBzZXJ2ZXIgc3VwcG9ydHMgaXQgKENvdWNoREIgMi4wKylcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50QmF0Y2gucGVuZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgb3V0UmVzdWx0LnBlbmRpbmcgPSBjdXJyZW50QmF0Y2gucGVuZGluZztcbiAgICAgICAgZGVsZXRlIGN1cnJlbnRCYXRjaC5wZW5kaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuVmFsdWUuZW1pdCgnY2hhbmdlJywgb3V0UmVzdWx0KTtcbiAgICB9XG4gICAgd3JpdGluZ0NoZWNrcG9pbnQgPSB0cnVlO1xuXG4gICAgc3JjLmluZm8oKS50aGVuKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICB2YXIgdGFzayA9IHNyYy5hY3RpdmVUYXNrcy5nZXQodGFza0lkKTtcbiAgICAgIGlmICghY3VycmVudEJhdGNoIHx8ICF0YXNrKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBsZXRlZCA9IHRhc2suY29tcGxldGVkX2l0ZW1zIHx8IDA7XG4gICAgICB2YXIgdG90YWxfaXRlbXMgPSBwYXJzZUludChpbmZvLnVwZGF0ZV9zZXEsIDEwKSAtIHBhcnNlSW50KGluaXRpYWxfbGFzdF9zZXEsIDEwKTtcbiAgICAgIHNyYy5hY3RpdmVUYXNrcy51cGRhdGUodGFza0lkLCB7XG4gICAgICAgIGNvbXBsZXRlZF9pdGVtczogY29tcGxldGVkICsgY3VycmVudEJhdGNoLmNoYW5nZXMubGVuZ3RoLFxuICAgICAgICB0b3RhbF9pdGVtc1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2hlY2twb2ludGVyLndyaXRlQ2hlY2twb2ludChjdXJyZW50QmF0Y2guc2VxLFxuICAgICAgICBzZXNzaW9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVyblZhbHVlLmVtaXQoJ2NoZWNrcG9pbnQnLCB7ICdjaGVja3BvaW50JzogY3VycmVudEJhdGNoLnNlcSB9KTtcbiAgICAgIHdyaXRpbmdDaGVja3BvaW50ID0gZmFsc2U7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChyZXR1cm5WYWx1ZS5jYW5jZWxsZWQpIHtcbiAgICAgICAgY29tcGxldGVSZXBsaWNhdGlvbigpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbGxlZCcpO1xuICAgICAgfVxuICAgICAgY3VycmVudEJhdGNoID0gdW5kZWZpbmVkO1xuICAgICAgZ2V0Q2hhbmdlcygpO1xuICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIG9uQ2hlY2twb2ludEVycm9yKGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaWZmcygpIHtcbiAgICB2YXIgZGlmZiA9IHt9O1xuICAgIGN1cnJlbnRCYXRjaC5jaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKGNoYW5nZSkge1xuICAgICAgcmV0dXJuVmFsdWUuZW1pdCgnY2hlY2twb2ludCcsIHsgJ3JldnNfZGlmZic6IGNoYW5nZSB9KTtcbiAgICAgIC8vIENvdWNoYmFzZSBTeW5jIEdhdGV3YXkgZW1pdHMgdGhlc2UsIGJ1dCB3ZSBjYW4gaWdub3JlIHRoZW1cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGNoYW5nZS5pZCA9PT0gXCJfdXNlci9cIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWZmW2NoYW5nZS5pZF0gPSBjaGFuZ2UuY2hhbmdlcy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHgucmV2O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhcmdldC5yZXZzRGlmZihkaWZmKS50aGVuKGZ1bmN0aW9uIChkaWZmcykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7XG4gICAgICAgIGNvbXBsZXRlUmVwbGljYXRpb24oKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5jZWxsZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGN1cnJlbnRCYXRjaC5kaWZmcyBlbGVtZW50cyBhcmUgZGVsZXRlZCBhcyB0aGUgZG9jdW1lbnRzIGFyZSB3cml0dGVuXG4gICAgICBjdXJyZW50QmF0Y2guZGlmZnMgPSBkaWZmcztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJhdGNoRG9jcygpIHtcbiAgICByZXR1cm4gZ2V0RG9jcyhzcmMsIHRhcmdldCwgY3VycmVudEJhdGNoLmRpZmZzLCByZXR1cm5WYWx1ZSkudGhlbihmdW5jdGlvbiAoZ290KSB7XG4gICAgICBjdXJyZW50QmF0Y2guZXJyb3IgPSAhZ290Lm9rO1xuICAgICAgZ290LmRvY3MuZm9yRWFjaChmdW5jdGlvbiAoZG9jKSB7XG4gICAgICAgIGRlbGV0ZSBjdXJyZW50QmF0Y2guZGlmZnNbZG9jLl9pZF07XG4gICAgICAgIHJlc3VsdC5kb2NzX3JlYWQrKztcbiAgICAgICAgY3VycmVudEJhdGNoLmRvY3MucHVzaChkb2MpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydE5leHRCYXRjaCgpIHtcbiAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkIHx8IGN1cnJlbnRCYXRjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYmF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHByb2Nlc3NQZW5kaW5nQmF0Y2godHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnJlbnRCYXRjaCA9IGJhdGNoZXMuc2hpZnQoKTtcbiAgICByZXR1cm5WYWx1ZS5lbWl0KCdjaGVja3BvaW50JywgeyAnc3RhcnRfbmV4dF9iYXRjaCc6IGN1cnJlbnRCYXRjaC5zZXEgfSk7XG4gICAgZ2V0RGlmZnMoKVxuICAgICAgLnRoZW4oZ2V0QmF0Y2hEb2NzKVxuICAgICAgLnRoZW4od3JpdGVEb2NzKVxuICAgICAgLnRoZW4oZmluaXNoQmF0Y2gpXG4gICAgICAudGhlbihzdGFydE5leHRCYXRjaClcbiAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGFib3J0UmVwbGljYXRpb24oJ2JhdGNoIHByb2Nlc3NpbmcgdGVybWluYXRlZCB3aXRoIGVycm9yJywgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cblxuICBmdW5jdGlvbiBwcm9jZXNzUGVuZGluZ0JhdGNoKGltbWVkaWF0ZSkge1xuICAgIGlmIChwZW5kaW5nQmF0Y2guY2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChiYXRjaGVzLmxlbmd0aCA9PT0gMCAmJiAhY3VycmVudEJhdGNoKSB7XG4gICAgICAgIGlmICgoY29udGludW91cyAmJiBjaGFuZ2VzT3B0cy5saXZlKSB8fCBjaGFuZ2VzQ29tcGxldGVkKSB7XG4gICAgICAgICAgcmV0dXJuVmFsdWUuc3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgcmV0dXJuVmFsdWUuZW1pdCgncGF1c2VkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICBjb21wbGV0ZVJlcGxpY2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaW1tZWRpYXRlIHx8XG4gICAgICBjaGFuZ2VzQ29tcGxldGVkIHx8XG4gICAgICBwZW5kaW5nQmF0Y2guY2hhbmdlcy5sZW5ndGggPj0gYmF0Y2hfc2l6ZVxuICAgICkge1xuICAgICAgYmF0Y2hlcy5wdXNoKHBlbmRpbmdCYXRjaCk7XG4gICAgICBwZW5kaW5nQmF0Y2ggPSB7XG4gICAgICAgIHNlcTogMCxcbiAgICAgICAgY2hhbmdlczogW10sXG4gICAgICAgIGRvY3M6IFtdXG4gICAgICB9O1xuICAgICAgaWYgKHJldHVyblZhbHVlLnN0YXRlID09PSAncGVuZGluZycgfHwgcmV0dXJuVmFsdWUuc3RhdGUgPT09ICdzdG9wcGVkJykge1xuICAgICAgICByZXR1cm5WYWx1ZS5zdGF0ZSA9ICdhY3RpdmUnO1xuICAgICAgICByZXR1cm5WYWx1ZS5lbWl0KCdhY3RpdmUnKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0TmV4dEJhdGNoKCk7XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBhYm9ydFJlcGxpY2F0aW9uKHJlYXNvbiwgZXJyKSB7XG4gICAgaWYgKHJlcGxpY2F0aW9uQ29tcGxldGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghZXJyLm1lc3NhZ2UpIHtcbiAgICAgIGVyci5tZXNzYWdlID0gcmVhc29uO1xuICAgIH1cbiAgICByZXN1bHQub2sgPSBmYWxzZTtcbiAgICByZXN1bHQuc3RhdHVzID0gJ2Fib3J0aW5nJztcbiAgICBiYXRjaGVzID0gW107XG4gICAgcGVuZGluZ0JhdGNoID0ge1xuICAgICAgc2VxOiAwLFxuICAgICAgY2hhbmdlczogW10sXG4gICAgICBkb2NzOiBbXVxuICAgIH07XG4gICAgY29tcGxldGVSZXBsaWNhdGlvbihlcnIpO1xuICB9XG5cblxuICBmdW5jdGlvbiBjb21wbGV0ZVJlcGxpY2F0aW9uKGZhdGFsRXJyb3IpIHtcbiAgICBpZiAocmVwbGljYXRpb25Db21wbGV0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHJldHVyblZhbHVlLmNhbmNlbGxlZCkge1xuICAgICAgcmVzdWx0LnN0YXR1cyA9ICdjYW5jZWxsZWQnO1xuICAgICAgaWYgKHdyaXRpbmdDaGVja3BvaW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0LnN0YXR1cyA9IHJlc3VsdC5zdGF0dXMgfHwgJ2NvbXBsZXRlJztcbiAgICByZXN1bHQuZW5kX3RpbWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgcmVzdWx0Lmxhc3Rfc2VxID0gbGFzdF9zZXE7XG4gICAgcmVwbGljYXRpb25Db21wbGV0ZWQgPSB0cnVlO1xuXG4gICAgc3JjLmFjdGl2ZVRhc2tzLnJlbW92ZSh0YXNrSWQsIGZhdGFsRXJyb3IpO1xuXG4gICAgaWYgKGZhdGFsRXJyb3IpIHtcbiAgICAgIC8vIG5lZWQgdG8gZXh0ZW5kIHRoZSBlcnJvciBiZWNhdXNlIEZpcmVmb3ggY29uc2lkZXJzIFwiLnJlc3VsdFwiIHJlYWQtb25seVxuICAgICAgZmF0YWxFcnJvciA9IGNyZWF0ZUVycm9yKGZhdGFsRXJyb3IpO1xuICAgICAgZmF0YWxFcnJvci5yZXN1bHQgPSByZXN1bHQ7XG5cbiAgICAgIC8vIE5vcm1hbGl6ZSBlcnJvciBuYW1lLiBpLmUuICdVbmF1dGhvcml6ZWQnIC0+ICd1bmF1dGhvcml6ZWQnIChlZyBTeW5jIEdhdGV3YXkpXG4gICAgICB2YXIgZXJyb3JOYW1lID0gKGZhdGFsRXJyb3IubmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChlcnJvck5hbWUgPT09ICd1bmF1dGhvcml6ZWQnIHx8IGVycm9yTmFtZSA9PT0gJ2ZvcmJpZGRlbicpIHtcbiAgICAgICAgcmV0dXJuVmFsdWUuZW1pdCgnZXJyb3InLCBmYXRhbEVycm9yKTtcbiAgICAgICAgcmV0dXJuVmFsdWUucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiYWNrT2ZmKG9wdHMsIHJldHVyblZhbHVlLCBmYXRhbEVycm9yLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmVwbGljYXRlKHNyYywgdGFyZ2V0LCBvcHRzLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5WYWx1ZS5lbWl0KCdjb21wbGV0ZScsIHJlc3VsdCk7XG4gICAgICByZXR1cm5WYWx1ZS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkNoYW5nZShjaGFuZ2UsIHBlbmRpbmcsIGxhc3RTZXEpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7XG4gICAgICByZXR1cm4gY29tcGxldGVSZXBsaWNhdGlvbigpO1xuICAgIH1cbiAgICAvLyBBdHRhY2ggJ3BlbmRpbmcnIHByb3BlcnR5IGlmIHNlcnZlciBzdXBwb3J0cyBpdCAoQ291Y2hEQiAyLjArKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICh0eXBlb2YgcGVuZGluZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHBlbmRpbmdCYXRjaC5wZW5kaW5nID0gcGVuZGluZztcbiAgICB9XG5cbiAgICB2YXIgZmlsdGVyID0gZmlsdGVyQ2hhbmdlKG9wdHMpKGNoYW5nZSk7XG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIC8vIHVwZGF0ZSBwcm9jZXNzZWQgaXRlbXMgY291bnQgYnkgMVxuICAgICAgdmFyIHRhc2sgPSBzcmMuYWN0aXZlVGFza3MuZ2V0KHRhc2tJZCk7XG4gICAgICBpZiAodGFzaykge1xuICAgICAgICAvLyB3ZSBjYW4gYXNzdW1lIHRoYXQgdGFzayBleGlzdHMgaGVyZT8gc2hvdWxkbid0IGJlIGRlbGV0ZWQgYnkgaGVyZS5cbiAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHRhc2suY29tcGxldGVkX2l0ZW1zIHx8IDA7XG4gICAgICAgIHNyYy5hY3RpdmVUYXNrcy51cGRhdGUodGFza0lkLCB7Y29tcGxldGVkX2l0ZW1zOiArK2NvbXBsZXRlZH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBwZW5kaW5nQmF0Y2guc2VxID0gY2hhbmdlLnNlcSB8fCBsYXN0U2VxO1xuICAgIHBlbmRpbmdCYXRjaC5jaGFuZ2VzLnB1c2goY2hhbmdlKTtcbiAgICByZXR1cm5WYWx1ZS5lbWl0KCdjaGVja3BvaW50JywgeyAncGVuZGluZ19iYXRjaCc6IHBlbmRpbmdCYXRjaC5zZXEgfSk7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzc1BlbmRpbmdCYXRjaChiYXRjaGVzLmxlbmd0aCA9PT0gMCAmJiBjaGFuZ2VzT3B0cy5saXZlKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25DaGFuZ2VzQ29tcGxldGUoY2hhbmdlcykge1xuICAgIGNoYW5nZXNQZW5kaW5nID0gZmFsc2U7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKHJldHVyblZhbHVlLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuIGNvbXBsZXRlUmVwbGljYXRpb24oKTtcbiAgICB9XG5cbiAgICAvLyBpZiBubyByZXN1bHRzIHdlcmUgcmV0dXJuZWQgdGhlbiB3ZSdyZSBkb25lLFxuICAgIC8vIGVsc2UgZmV0Y2ggbW9yZVxuICAgIGlmIChjaGFuZ2VzLnJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgY2hhbmdlc09wdHMuc2luY2UgPSBjaGFuZ2VzLnJlc3VsdHNbY2hhbmdlcy5yZXN1bHRzLmxlbmd0aCAtIDFdLnNlcTtcbiAgICAgIGdldENoYW5nZXMoKTtcbiAgICAgIHByb2Nlc3NQZW5kaW5nQmF0Y2godHJ1ZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoY29udGludW91cykge1xuICAgICAgICAgIGNoYW5nZXNPcHRzLmxpdmUgPSB0cnVlO1xuICAgICAgICAgIGdldENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGFuZ2VzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzUGVuZGluZ0JhdGNoKHRydWUpO1xuICAgICAgfTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSBjaGVja3BvaW50IHNvIHdlIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHNlcSBuZXh0IHRpbWVcbiAgICAgIGlmICghY3VycmVudEJhdGNoICYmIGNoYW5nZXMucmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgd3JpdGluZ0NoZWNrcG9pbnQgPSB0cnVlO1xuICAgICAgICBjaGVja3BvaW50ZXIud3JpdGVDaGVja3BvaW50KGNoYW5nZXMubGFzdF9zZXEsXG4gICAgICAgICAgICBzZXNzaW9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB3cml0aW5nQ2hlY2twb2ludCA9IGZhbHNlO1xuICAgICAgICAgIHJlc3VsdC5sYXN0X3NlcSA9IGxhc3Rfc2VxID0gY2hhbmdlcy5sYXN0X3NlcTtcbiAgICAgICAgICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICBjb21wbGV0ZVJlcGxpY2F0aW9uKCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbmNlbGxlZCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKG9uQ2hlY2twb2ludEVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmdW5jdGlvbiBvbkNoYW5nZXNFcnJvcihlcnIpIHtcbiAgICBjaGFuZ2VzUGVuZGluZyA9IGZhbHNlO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChyZXR1cm5WYWx1ZS5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZVJlcGxpY2F0aW9uKCk7XG4gICAgfVxuICAgIGFib3J0UmVwbGljYXRpb24oJ2NoYW5nZXMgcmVqZWN0ZWQnLCBlcnIpO1xuICB9XG5cblxuICBmdW5jdGlvbiBnZXRDaGFuZ2VzKCkge1xuICAgIGlmICghKFxuICAgICAgIWNoYW5nZXNQZW5kaW5nICYmXG4gICAgICAhY2hhbmdlc0NvbXBsZXRlZCAmJlxuICAgICAgYmF0Y2hlcy5sZW5ndGggPCBiYXRjaGVzX2xpbWl0XG4gICAgICApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNoYW5nZXNQZW5kaW5nID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBhYm9ydENoYW5nZXMoKSB7XG4gICAgICBjaGFuZ2VzLmNhbmNlbCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcigpIHtcbiAgICAgIHJldHVyblZhbHVlLnJlbW92ZUxpc3RlbmVyKCdjYW5jZWwnLCBhYm9ydENoYW5nZXMpO1xuICAgIH1cblxuICAgIGlmIChyZXR1cm5WYWx1ZS5fY2hhbmdlcykgeyAvLyByZW1vdmUgb2xkIGNoYW5nZXMoKSBhbmQgbGlzdGVuZXJzXG4gICAgICByZXR1cm5WYWx1ZS5yZW1vdmVMaXN0ZW5lcignY2FuY2VsJywgcmV0dXJuVmFsdWUuX2Fib3J0Q2hhbmdlcyk7XG4gICAgICByZXR1cm5WYWx1ZS5fY2hhbmdlcy5jYW5jZWwoKTtcbiAgICB9XG4gICAgcmV0dXJuVmFsdWUub25jZSgnY2FuY2VsJywgYWJvcnRDaGFuZ2VzKTtcblxuICAgIHZhciBjaGFuZ2VzID0gc3JjLmNoYW5nZXMoY2hhbmdlc09wdHMpXG4gICAgICAub24oJ2NoYW5nZScsIG9uQ2hhbmdlKTtcbiAgICBjaGFuZ2VzLnRoZW4ocmVtb3ZlTGlzdGVuZXIsIHJlbW92ZUxpc3RlbmVyKTtcbiAgICBjaGFuZ2VzLnRoZW4ob25DaGFuZ2VzQ29tcGxldGUpXG4gICAgICAuY2F0Y2gob25DaGFuZ2VzRXJyb3IpO1xuXG4gICAgaWYgKG9wdHMucmV0cnkpIHtcbiAgICAgIC8vIHNhdmUgZm9yIGxhdGVyIHNvIHdlIGNhbiBjYW5jZWwgaWYgbmVjZXNzYXJ5XG4gICAgICByZXR1cm5WYWx1ZS5fY2hhbmdlcyA9IGNoYW5nZXM7XG4gICAgICByZXR1cm5WYWx1ZS5fYWJvcnRDaGFuZ2VzID0gYWJvcnRDaGFuZ2VzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVRhc2soY2hlY2twb2ludCkge1xuICAgIHJldHVybiBzcmMuaW5mbygpLnRoZW4oZnVuY3Rpb24gKGluZm8pIHtcbiAgICAgIHZhciB0b3RhbF9pdGVtcyA9IHR5cGVvZiBvcHRzLnNpbmNlID09PSAndW5kZWZpbmVkJyA/XG4gICAgICAgIHBhcnNlSW50KGluZm8udXBkYXRlX3NlcSwgMTApIC0gcGFyc2VJbnQoY2hlY2twb2ludCwgMTApIDpcbiAgICAgICAgcGFyc2VJbnQoaW5mby51cGRhdGVfc2VxLCAxMCk7XG5cbiAgICAgIHRhc2tJZCA9IHNyYy5hY3RpdmVUYXNrcy5hZGQoe1xuICAgICAgICBuYW1lOiBgJHtjb250aW51b3VzID8gJ2NvbnRpbnVvdXMgJyA6ICcnfXJlcGxpY2F0aW9uIGZyb20gJHtpbmZvLmRiX25hbWV9YCAsXG4gICAgICAgIHRvdGFsX2l0ZW1zLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjaGVja3BvaW50O1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRDaGFuZ2VzKCkge1xuICAgIGluaXRDaGVja3BvaW50ZXIoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHJldHVyblZhbHVlLmNhbmNlbGxlZCkge1xuICAgICAgICBjb21wbGV0ZVJlcGxpY2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjaGVja3BvaW50ZXIuZ2V0Q2hlY2twb2ludCgpLnRoZW4oY3JlYXRlVGFzaykudGhlbihmdW5jdGlvbiAoY2hlY2twb2ludCkge1xuICAgICAgICBsYXN0X3NlcSA9IGNoZWNrcG9pbnQ7XG4gICAgICAgIGluaXRpYWxfbGFzdF9zZXEgPSBjaGVja3BvaW50O1xuICAgICAgICBjaGFuZ2VzT3B0cyA9IHtcbiAgICAgICAgICBzaW5jZTogbGFzdF9zZXEsXG4gICAgICAgICAgbGltaXQ6IGJhdGNoX3NpemUsXG4gICAgICAgICAgYmF0Y2hfc2l6ZSxcbiAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICBkb2NfaWRzLFxuICAgICAgICAgIHNlbGVjdG9yLFxuICAgICAgICAgIHJldHVybl9kb2NzOiB0cnVlIC8vIHJlcXVpcmVkIHNvIHdlIGtub3cgd2hlbiB3ZSdyZSBkb25lXG4gICAgICAgIH07XG4gICAgICAgIGlmIChvcHRzLmZpbHRlcikge1xuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy5maWx0ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAvLyByZXF1aXJlZCBmb3IgdGhlIGNsaWVudC1zaWRlIGZpbHRlciBpbiBvbkNoYW5nZVxuICAgICAgICAgICAgY2hhbmdlc09wdHMuaW5jbHVkZV9kb2NzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgeyAvLyBkZG9jIGZpbHRlclxuICAgICAgICAgICAgY2hhbmdlc09wdHMuZmlsdGVyID0gb3B0cy5maWx0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgnaGVhcnRiZWF0JyBpbiBvcHRzKSB7XG4gICAgICAgICAgY2hhbmdlc09wdHMuaGVhcnRiZWF0ID0gb3B0cy5oZWFydGJlYXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCd0aW1lb3V0JyBpbiBvcHRzKSB7XG4gICAgICAgICAgY2hhbmdlc09wdHMudGltZW91dCA9IG9wdHMudGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy5xdWVyeV9wYXJhbXMpIHtcbiAgICAgICAgICBjaGFuZ2VzT3B0cy5xdWVyeV9wYXJhbXMgPSBvcHRzLnF1ZXJ5X3BhcmFtcztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cy52aWV3KSB7XG4gICAgICAgICAgY2hhbmdlc09wdHMudmlldyA9IG9wdHMudmlldztcbiAgICAgICAgfVxuICAgICAgICBnZXRDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBhYm9ydFJlcGxpY2F0aW9uKCdnZXRDaGVja3BvaW50IHJlamVjdGVkIHdpdGggJywgZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIG9uQ2hlY2twb2ludEVycm9yKGVycikge1xuICAgIHdyaXRpbmdDaGVja3BvaW50ID0gZmFsc2U7XG4gICAgYWJvcnRSZXBsaWNhdGlvbignd3JpdGVDaGVja3BvaW50IGNvbXBsZXRlZCB3aXRoIGVycm9yJywgZXJyKTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAocmV0dXJuVmFsdWUuY2FuY2VsbGVkKSB7IC8vIGNhbmNlbGxlZCBpbW1lZGlhdGVseVxuICAgIGNvbXBsZXRlUmVwbGljYXRpb24oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIXJldHVyblZhbHVlLl9hZGRlZExpc3RlbmVycykge1xuICAgIHJldHVyblZhbHVlLm9uY2UoJ2NhbmNlbCcsIGNvbXBsZXRlUmVwbGljYXRpb24pO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm5WYWx1ZS5vbmNlKCdlcnJvcicsIG9wdHMuY29tcGxldGUpO1xuICAgICAgcmV0dXJuVmFsdWUub25jZSgnY29tcGxldGUnLCBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgIG9wdHMuY29tcGxldGUobnVsbCwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm5WYWx1ZS5fYWRkZWRMaXN0ZW5lcnMgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRzLnNpbmNlID09PSAndW5kZWZpbmVkJykge1xuICAgIHN0YXJ0Q2hhbmdlcygpO1xuICB9IGVsc2Uge1xuICAgIGluaXRDaGVja3BvaW50ZXIoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIHdyaXRpbmdDaGVja3BvaW50ID0gdHJ1ZTtcbiAgICAgIHJldHVybiBjaGVja3BvaW50ZXIud3JpdGVDaGVja3BvaW50KG9wdHMuc2luY2UsIHNlc3Npb24pO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgd3JpdGluZ0NoZWNrcG9pbnQgPSBmYWxzZTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHJldHVyblZhbHVlLmNhbmNlbGxlZCkge1xuICAgICAgICBjb21wbGV0ZVJlcGxpY2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxhc3Rfc2VxID0gb3B0cy5zaW5jZTtcbiAgICAgIHN0YXJ0Q2hhbmdlcygpO1xuICAgIH0pLmNhdGNoKG9uQ2hlY2twb2ludEVycm9yKTtcbiAgfVxufVxuXG4vLyBXZSBjcmVhdGUgYSBiYXNpYyBwcm9taXNlIHNvIHRoZSBjYWxsZXIgY2FuIGNhbmNlbCB0aGUgcmVwbGljYXRpb24gcG9zc2libHlcbi8vIGJlZm9yZSB3ZSBoYXZlIGFjdHVhbGx5IHN0YXJ0ZWQgbGlzdGVuaW5nIHRvIGNoYW5nZXMgZXRjXG5jbGFzcyBSZXBsaWNhdGlvbiBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RhdGUgPSAncGVuZGluZyc7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChmdWxmaWxsLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMub25jZSgnY29tcGxldGUnLCBmdWxmaWxsKTtcbiAgICAgIHRoaXMub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIH0pO1xuICAgIHRoaXMudGhlbiA9IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHJldHVybiBwcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9O1xuICAgIHRoaXMuY2F0Y2ggPSBmdW5jdGlvbiAocmVqZWN0KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZS5jYXRjaChyZWplY3QpO1xuICAgIH07XG4gICAgLy8gQXMgd2UgYWxsb3cgZXJyb3IgaGFuZGxpbmcgdmlhIFwiZXJyb3JcIiBldmVudCBhcyB3ZWxsLFxuICAgIC8vIHB1dCBhIHN0dWIgaW4gaGVyZSBzbyB0aGF0IHJlamVjdGluZyBuZXZlciB0aHJvd3MgVW5oYW5kbGVkRXJyb3IuXG4gICAgdGhpcy5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuc3RhdGUgPSAnY2FuY2VsbGVkJztcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG5cbiAgcmVhZHkoc3JjLCB0YXJnZXQpIHtcbiAgICBpZiAodGhpcy5fcmVhZHlDYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmVhZHlDYWxsZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgb25EZXN0cm95ID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICB9O1xuICAgIHNyYy5vbmNlKCdkZXN0cm95ZWQnLCBvbkRlc3Ryb3kpO1xuICAgIHRhcmdldC5vbmNlKCdkZXN0cm95ZWQnLCBvbkRlc3Ryb3kpO1xuICAgIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBzcmMucmVtb3ZlTGlzdGVuZXIoJ2Rlc3Ryb3llZCcsIG9uRGVzdHJveSk7XG4gICAgICB0YXJnZXQucmVtb3ZlTGlzdGVuZXIoJ2Rlc3Ryb3llZCcsIG9uRGVzdHJveSk7XG4gICAgfVxuICAgIHRoaXMub25jZSgnY29tcGxldGUnLCBjbGVhbnVwKTtcbiAgICB0aGlzLm9uY2UoJ2Vycm9yJywgY2xlYW51cCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9Qb3VjaChkYiwgb3B0cykge1xuICB2YXIgUG91Y2hDb25zdHJ1Y3RvciA9IG9wdHMuUG91Y2hDb25zdHJ1Y3RvcjtcbiAgaWYgKHR5cGVvZiBkYiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbmV3IFBvdWNoQ29uc3RydWN0b3IoZGIsIG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsaWNhdGVXcmFwcGVyKHNyYywgdGFyZ2V0LCBvcHRzLCBjYWxsYmFjaykge1xuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gb3B0cztcbiAgICBvcHRzID0ge307XG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzID09PSAndW5kZWZpbmVkJykge1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIGlmIChvcHRzLmRvY19pZHMgJiYgIUFycmF5LmlzQXJyYXkob3B0cy5kb2NfaWRzKSkge1xuICAgIHRocm93IGNyZWF0ZUVycm9yKEJBRF9SRVFVRVNULFxuICAgICAgICAgICAgICAgICAgICAgICBcImBkb2NfaWRzYCBmaWx0ZXIgcGFyYW1ldGVyIGlzIG5vdCBhIGxpc3QuXCIpO1xuICB9XG5cbiAgb3B0cy5jb21wbGV0ZSA9IGNhbGxiYWNrO1xuICBvcHRzID0gY2xvbmUob3B0cyk7XG4gIG9wdHMuY29udGludW91cyA9IG9wdHMuY29udGludW91cyB8fCBvcHRzLmxpdmU7XG4gIG9wdHMucmV0cnkgPSAoJ3JldHJ5JyBpbiBvcHRzKSA/IG9wdHMucmV0cnkgOiBmYWxzZTtcbiAgb3B0cy5Qb3VjaENvbnN0cnVjdG9yID0gb3B0cy5Qb3VjaENvbnN0cnVjdG9yIHx8IHRoaXM7XG4gIHZhciByZXBsaWNhdGVSZXQgPSBuZXcgUmVwbGljYXRpb24ob3B0cyk7XG4gIHZhciBzcmNQb3VjaCA9IHRvUG91Y2goc3JjLCBvcHRzKTtcbiAgdmFyIHRhcmdldFBvdWNoID0gdG9Qb3VjaCh0YXJnZXQsIG9wdHMpO1xuICByZXBsaWNhdGUoc3JjUG91Y2gsIHRhcmdldFBvdWNoLCBvcHRzLCByZXBsaWNhdGVSZXQpO1xuICByZXR1cm4gcmVwbGljYXRlUmV0O1xufVxuXG5mdW5jdGlvbiBzeW5jKHNyYywgdGFyZ2V0LCBvcHRzLCBjYWxsYmFjaykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvcHRzID0ge307XG4gIH1cbiAgb3B0cyA9IGNsb25lKG9wdHMpO1xuICBvcHRzLlBvdWNoQ29uc3RydWN0b3IgPSBvcHRzLlBvdWNoQ29uc3RydWN0b3IgfHwgdGhpcztcbiAgc3JjID0gdG9Qb3VjaChzcmMsIG9wdHMpO1xuICB0YXJnZXQgPSB0b1BvdWNoKHRhcmdldCwgb3B0cyk7XG4gIHJldHVybiBuZXcgU3luYyhzcmMsIHRhcmdldCwgb3B0cywgY2FsbGJhY2spO1xufVxuXG5jbGFzcyBTeW5jIGV4dGVuZHMgRUUge1xuICBjb25zdHJ1Y3RvcihzcmMsIHRhcmdldCwgb3B0cywgY2FsbGJhY2spIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2FuY2VsZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG9wdHNQdXNoID0gb3B0cy5wdXNoID8gT2JqZWN0LmFzc2lnbih7fSwgb3B0cywgb3B0cy5wdXNoKSA6IG9wdHM7XG4gICAgY29uc3Qgb3B0c1B1bGwgPSBvcHRzLnB1bGwgPyBPYmplY3QuYXNzaWduKHt9LCBvcHRzLCBvcHRzLnB1bGwpIDogb3B0cztcblxuICAgIHRoaXMucHVzaCA9IHJlcGxpY2F0ZVdyYXBwZXIoc3JjLCB0YXJnZXQsIG9wdHNQdXNoKTtcbiAgICB0aGlzLnB1bGwgPSByZXBsaWNhdGVXcmFwcGVyKHRhcmdldCwgc3JjLCBvcHRzUHVsbCk7XG5cbiAgICB0aGlzLnB1c2hQYXVzZWQgPSB0cnVlO1xuICAgIHRoaXMucHVsbFBhdXNlZCA9IHRydWU7XG5cbiAgICBjb25zdCBwdWxsQ2hhbmdlID0gKGNoYW5nZSkgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgIGRpcmVjdGlvbjogJ3B1bGwnLFxuICAgICAgICBjaGFuZ2VcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHVzaENoYW5nZSA9IChjaGFuZ2UpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICBkaXJlY3Rpb246ICdwdXNoJyxcbiAgICAgICAgY2hhbmdlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHB1c2hEZW5pZWQgPSAoZG9jKSA9PiB7XG4gICAgICB0aGlzLmVtaXQoJ2RlbmllZCcsIHtcbiAgICAgICAgZGlyZWN0aW9uOiAncHVzaCcsXG4gICAgICAgIGRvY1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwdWxsRGVuaWVkID0gKGRvYykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkZW5pZWQnLCB7XG4gICAgICAgIGRpcmVjdGlvbjogJ3B1bGwnLFxuICAgICAgICBkb2NcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcHVzaFBhdXNlZCA9ICgpID0+IHtcbiAgICAgIHRoaXMucHVzaFBhdXNlZCA9IHRydWU7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLnB1bGxQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdwYXVzZWQnKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHB1bGxQYXVzZWQgPSAoKSA9PiB7XG4gICAgICB0aGlzLnB1bGxQYXVzZWQgPSB0cnVlO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5wdXNoUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuZW1pdCgncGF1c2VkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwdXNoQWN0aXZlID0gKCkgPT4ge1xuICAgICAgdGhpcy5wdXNoUGF1c2VkID0gZmFsc2U7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLnB1bGxQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdhY3RpdmUnLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiAncHVzaCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwdWxsQWN0aXZlID0gKCkgPT4ge1xuICAgICAgdGhpcy5wdWxsUGF1c2VkID0gZmFsc2U7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLnB1c2hQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5lbWl0KCdhY3RpdmUnLCB7XG4gICAgICAgICAgZGlyZWN0aW9uOiAncHVsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxldCByZW1vdmVkID0ge307XG5cbiAgICBjb25zdCByZW1vdmVBbGwgPSAodHlwZSkgPT4geyAvLyB0eXBlIGlzICdwdXNoJyBvciAncHVsbCdcbiAgICAgIHJldHVybiAoZXZlbnQsIGZ1bmMpID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGFuZ2UgPSBldmVudCA9PT0gJ2NoYW5nZScgJiZcbiAgICAgICAgICAoZnVuYyA9PT0gcHVsbENoYW5nZSB8fCBmdW5jID09PSBwdXNoQ2hhbmdlKTtcbiAgICAgICAgY29uc3QgaXNEZW5pZWQgPSBldmVudCA9PT0gJ2RlbmllZCcgJiZcbiAgICAgICAgICAoZnVuYyA9PT0gcHVsbERlbmllZCB8fCBmdW5jID09PSBwdXNoRGVuaWVkKTtcbiAgICAgICAgY29uc3QgaXNQYXVzZWQgPSBldmVudCA9PT0gJ3BhdXNlZCcgJiZcbiAgICAgICAgICAoZnVuYyA9PT0gcHVsbFBhdXNlZCB8fCBmdW5jID09PSBwdXNoUGF1c2VkKTtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBldmVudCA9PT0gJ2FjdGl2ZScgJiZcbiAgICAgICAgICAoZnVuYyA9PT0gcHVsbEFjdGl2ZSB8fCBmdW5jID09PSBwdXNoQWN0aXZlKTtcblxuICAgICAgICBpZiAoaXNDaGFuZ2UgfHwgaXNEZW5pZWQgfHwgaXNQYXVzZWQgfHwgaXNBY3RpdmUpIHtcbiAgICAgICAgICBpZiAoIShldmVudCBpbiByZW1vdmVkKSkge1xuICAgICAgICAgICAgcmVtb3ZlZFtldmVudF0gPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVtb3ZlZFtldmVudF1bdHlwZV0gPSB0cnVlO1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1vdmVkW2V2ZW50XSkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBib3RoIHB1c2ggYW5kIHB1bGwgaGF2ZSBhc2tlZCB0byBiZSByZW1vdmVkXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhldmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG5cbiAgICBpZiAob3B0cy5saXZlKSB7XG4gICAgICB0aGlzLnB1c2gub24oJ2NvbXBsZXRlJywgdGhpcy5wdWxsLmNhbmNlbC5iaW5kKHRoaXMucHVsbCkpO1xuICAgICAgdGhpcy5wdWxsLm9uKCdjb21wbGV0ZScsIHRoaXMucHVzaC5jYW5jZWwuYmluZCh0aGlzLnB1c2gpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRPbmVMaXN0ZW5lcihlZSwgZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoZWUubGlzdGVuZXJzKGV2ZW50KS5pbmRleE9mKGxpc3RlbmVyKSA9PSAtMSkge1xuICAgICAgICBlZS5vbihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgIGFkZE9uZUxpc3RlbmVyKHRoaXMucHVsbCwgJ2NoYW5nZScsIHB1bGxDaGFuZ2UpO1xuICAgICAgICBhZGRPbmVMaXN0ZW5lcih0aGlzLnB1c2gsICdjaGFuZ2UnLCBwdXNoQ2hhbmdlKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdkZW5pZWQnKSB7XG4gICAgICAgIGFkZE9uZUxpc3RlbmVyKHRoaXMucHVsbCwgJ2RlbmllZCcsIHB1bGxEZW5pZWQpO1xuICAgICAgICBhZGRPbmVMaXN0ZW5lcih0aGlzLnB1c2gsICdkZW5pZWQnLCBwdXNoRGVuaWVkKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgIGFkZE9uZUxpc3RlbmVyKHRoaXMucHVsbCwgJ2FjdGl2ZScsIHB1bGxBY3RpdmUpO1xuICAgICAgICBhZGRPbmVMaXN0ZW5lcih0aGlzLnB1c2gsICdhY3RpdmUnLCBwdXNoQWN0aXZlKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdwYXVzZWQnKSB7XG4gICAgICAgIGFkZE9uZUxpc3RlbmVyKHRoaXMucHVsbCwgJ3BhdXNlZCcsIHB1bGxQYXVzZWQpO1xuICAgICAgICBhZGRPbmVMaXN0ZW5lcih0aGlzLnB1c2gsICdwYXVzZWQnLCBwdXNoUGF1c2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMub24oJ3JlbW92ZUxpc3RlbmVyJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdjaGFuZ2UnKSB7XG4gICAgICAgIHRoaXMucHVsbC5yZW1vdmVMaXN0ZW5lcignY2hhbmdlJywgcHVsbENoYW5nZSk7XG4gICAgICAgIHRoaXMucHVzaC5yZW1vdmVMaXN0ZW5lcignY2hhbmdlJywgcHVzaENoYW5nZSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnZGVuaWVkJykge1xuICAgICAgICB0aGlzLnB1bGwucmVtb3ZlTGlzdGVuZXIoJ2RlbmllZCcsIHB1bGxEZW5pZWQpO1xuICAgICAgICB0aGlzLnB1c2gucmVtb3ZlTGlzdGVuZXIoJ2RlbmllZCcsIHB1c2hEZW5pZWQpO1xuICAgICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgdGhpcy5wdWxsLnJlbW92ZUxpc3RlbmVyKCdhY3RpdmUnLCBwdWxsQWN0aXZlKTtcbiAgICAgICAgdGhpcy5wdXNoLnJlbW92ZUxpc3RlbmVyKCdhY3RpdmUnLCBwdXNoQWN0aXZlKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdwYXVzZWQnKSB7XG4gICAgICAgIHRoaXMucHVsbC5yZW1vdmVMaXN0ZW5lcigncGF1c2VkJywgcHVsbFBhdXNlZCk7XG4gICAgICAgIHRoaXMucHVzaC5yZW1vdmVMaXN0ZW5lcigncGF1c2VkJywgcHVzaFBhdXNlZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnB1bGwub24oJ3JlbW92ZUxpc3RlbmVyJywgcmVtb3ZlQWxsKCdwdWxsJykpO1xuICAgIHRoaXMucHVzaC5vbigncmVtb3ZlTGlzdGVuZXInLCByZW1vdmVBbGwoJ3B1c2gnKSk7XG5cbiAgICBjb25zdCBwcm9taXNlID0gUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5wdXNoLFxuICAgICAgdGhpcy5wdWxsXG4gICAgXSkudGhlbigocmVzcCkgPT4ge1xuICAgICAgY29uc3Qgb3V0ID0ge1xuICAgICAgICBwdXNoOiByZXNwWzBdLFxuICAgICAgICBwdWxsOiByZXNwWzFdXG4gICAgICB9O1xuICAgICAgdGhpcy5lbWl0KCdjb21wbGV0ZScsIG91dCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgLy8gaWYgdGhlcmUncyBhIGNhbGxiYWNrLCB0aGVuIHRoZSBjYWxsYmFjayBjYW4gcmVjZWl2ZVxuICAgICAgICAvLyB0aGUgZXJyb3IgZXZlbnRcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIHRoZXJlJ3Mgbm8gY2FsbGJhY2ssIHRoZW4gd2UncmUgc2FmZSB0byBlbWl0IGFuIGVycm9yXG4gICAgICAgIC8vIGV2ZW50LCB3aGljaCB3b3VsZCBvdGhlcndpc2UgdGhyb3cgYW4gdW5oYW5kbGVkIGVycm9yXG4gICAgICAgIC8vIGR1ZSB0byAnZXJyb3InIGJlaW5nIGEgc3BlY2lhbCBldmVudCBpbiBFdmVudEVtaXR0ZXJzXG4gICAgICAgIHRoaXMuZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAvLyBubyBzZW5zZSB0aHJvd2luZyBpZiB3ZSdyZSBhbHJlYWR5IGVtaXR0aW5nIGFuICdlcnJvcicgZXZlbnRcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVuID0gZnVuY3Rpb24gKHN1Y2Nlc3MsIGVycikge1xuICAgICAgcmV0dXJuIHByb21pc2UudGhlbihzdWNjZXNzLCBlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLmNhdGNoID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goZXJyKTtcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGlmICghdGhpcy5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnB1c2guY2FuY2VsKCk7XG4gICAgICB0aGlzLnB1bGwuY2FuY2VsKCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxpY2F0aW9uKFBvdWNoREIpIHtcbiAgUG91Y2hEQi5yZXBsaWNhdGUgPSByZXBsaWNhdGVXcmFwcGVyO1xuICBQb3VjaERCLnN5bmMgPSBzeW5jO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQb3VjaERCLnByb3RvdHlwZSwgJ3JlcGxpY2F0ZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXBsaWNhdGVNZXRob2RzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aGlzLnJlcGxpY2F0ZU1ldGhvZHMgPSB7XG4gICAgICAgICAgZnJvbTogZnVuY3Rpb24gKG90aGVyLCBvcHRzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RydWN0b3IucmVwbGljYXRlKG90aGVyLCBzZWxmLCBvcHRzLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0bzogZnVuY3Rpb24gKG90aGVyLCBvcHRzLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uc3RydWN0b3IucmVwbGljYXRlKHNlbGYsIG90aGVyLCBvcHRzLCBjYWxsYmFjayk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVwbGljYXRlTWV0aG9kcztcbiAgICB9XG4gIH0pO1xuXG4gIFBvdWNoREIucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbiAoZGJOYW1lLCBvcHRzLCBjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLnN5bmModGhpcywgZGJOYW1lLCBvcHRzLCBjYWxsYmFjayk7XG4gIH07XG59XG5cblBvdWNoREIucGx1Z2luKElEQlBvdWNoKVxuICAucGx1Z2luKEh0dHBQb3VjaCQxKVxuICAucGx1Z2luKG1hcHJlZHVjZSlcbiAgLnBsdWdpbihyZXBsaWNhdGlvbik7XG5cbi8vIFB1bGwgZnJvbSBzcmMgYmVjYXVzZSBwb3VjaGRiLW5vZGUvcG91Y2hkYi1icm93c2VyIHRoZW1zZWx2ZXNcblxuZXhwb3J0IGRlZmF1bHQgUG91Y2hEQjtcbiIsIihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gTm9kZS9Db21tb25KU1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICAvLyBBTURcbiAgICAgICAgZGVmaW5lKGZhY3RvcnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAod2l0aCBzdXBwb3J0IGZvciB3ZWIgd29ya2VycylcbiAgICAgICAgdmFyIGdsb2I7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdsb2IgPSB3aW5kb3c7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGdsb2IgPSBzZWxmO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2xvYi5TcGFya01ENSA9IGZhY3RvcnkoKTtcbiAgICB9XG59KGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcblxuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8qXG4gICAgICogRmFzdGVzdCBtZDUgaW1wbGVtZW50YXRpb24gYXJvdW5kIChKS00gbWQ1KS5cbiAgICAgKiBDcmVkaXRzOiBKb3NlcGggTXllcnNcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUtdGV4dC5odG1sXG4gICAgICogQHNlZSBodHRwOi8vanNwZXJmLmNvbS9tZDUtc2hvb3RvdXQvN1xuICAgICAqL1xuXG4gICAgLyogdGhpcyBmdW5jdGlvbiBpcyBtdWNoIGZhc3RlcixcbiAgICAgIHNvIGlmIHBvc3NpYmxlIHdlIHVzZSBpdC4gU29tZSBJRXNcbiAgICAgIGFyZSB0aGUgb25seSBvbmVzIEkga25vdyBvZiB0aGF0XG4gICAgICBuZWVkIHRoZSBpZGlvdGljIHNlY29uZCBmdW5jdGlvbixcbiAgICAgIGdlbmVyYXRlZCBieSBhbiBpZiBjbGF1c2UuICAqL1xuICAgIHZhciBhZGQzMiA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiAoYSArIGIpICYgMHhGRkZGRkZGRjtcbiAgICB9LFxuICAgICAgICBoZXhfY2hyID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJ107XG5cblxuICAgIGZ1bmN0aW9uIGNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgICAgIGEgPSBhZGQzMihhZGQzMihhLCBxKSwgYWRkMzIoeCwgdCkpO1xuICAgICAgICByZXR1cm4gYWRkMzIoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZDVjeWNsZSh4LCBrKSB7XG4gICAgICAgIHZhciBhID0geFswXSxcbiAgICAgICAgICAgIGIgPSB4WzFdLFxuICAgICAgICAgICAgYyA9IHhbMl0sXG4gICAgICAgICAgICBkID0geFszXTtcblxuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzBdIC0gNjgwODc2OTM2IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBiIHwgfmEgJiBjKSArIGtbMV0gLSAzODk1NjQ1ODYgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEyIHwgZCA+Pj4gMjApICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBhIHwgfmQgJiBiKSArIGtbMl0gKyA2MDYxMDU4MTkgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE3IHwgYyA+Pj4gMTUpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgJiBkIHwgfmMgJiBhKSArIGtbM10gLSAxMDQ0NTI1MzMwIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzRdIC0gMTc2NDE4ODk3IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA3IHwgYSA+Pj4gMjUpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBiIHwgfmEgJiBjKSArIGtbNV0gKyAxMjAwMDgwNDI2IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMiB8IGQgPj4+IDIwKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYSB8IH5kICYgYikgKyBrWzZdIC0gMTQ3MzIzMTM0MSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGQgfCB+YyAmIGEpICsga1s3XSAtIDQ1NzA1OTgzIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzhdICsgMTc3MDAzNTQxNiB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNyB8IGEgPj4+IDI1KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYiB8IH5hICYgYykgKyBrWzldIC0gMTk1ODQxNDQxNyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGEgfCB+ZCAmIGIpICsga1sxMF0gLSA0MjA2MyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTcgfCBjID4+PiAxNSkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGQgfCB+YyAmIGEpICsga1sxMV0gLSAxOTkwNDA0MTYyIHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMiB8IGIgPj4+IDEwKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgYyB8IH5iICYgZCkgKyBrWzEyXSArIDE4MDQ2MDM2ODIgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDcgfCBhID4+PiAyNSkgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYSAmIGIgfCB+YSAmIGMpICsga1sxM10gLSA0MDM0MTEwMSB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTIgfCBkID4+PiAyMCkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCAmIGEgfCB+ZCAmIGIpICsga1sxNF0gLSAxNTAyMDAyMjkwIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNyB8IGMgPj4+IDE1KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgZCB8IH5jICYgYSkgKyBrWzE1XSArIDEyMzY1MzUzMjkgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIyIHwgYiA+Pj4gMTApICsgYyB8IDA7XG5cbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1sxXSAtIDE2NTc5NjUxMCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNSB8IGEgPj4+IDI3KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYyB8IGIgJiB+YykgKyBrWzZdIC0gMTA2OTUwMTYzMiB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzExXSArIDY0MzcxNzcxMyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGEgfCBkICYgfmEpICsga1swXSAtIDM3Mzg5NzMwMiB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1s1XSAtIDcwMTU1ODY5MSB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNSB8IGEgPj4+IDI3KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhICYgYyB8IGIgJiB+YykgKyBrWzEwXSArIDM4MDE2MDgzIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCA5IHwgZCA+Pj4gMjMpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgJiBiIHwgYSAmIH5iKSArIGtbMTVdIC0gNjYwNDc4MzM1IHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzRdIC0gNDA1NTM3ODQ4IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuICAgICAgICBhICs9IChiICYgZCB8IGMgJiB+ZCkgKyBrWzldICsgNTY4NDQ2NDM4IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbMTRdIC0gMTAxOTgwMzY5MCB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzNdIC0gMTg3MzYzOTYxIHwgMDtcbiAgICAgICAgYyAgPSAoYyA8PCAxNCB8IGMgPj4+IDE4KSArIGQgfCAwO1xuICAgICAgICBiICs9IChjICYgYSB8IGQgJiB+YSkgKyBrWzhdICsgMTE2MzUzMTUwMSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjAgfCBiID4+PiAxMikgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiAmIGQgfCBjICYgfmQpICsga1sxM10gLSAxNDQ0NjgxNDY3IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgJiBjIHwgYiAmIH5jKSArIGtbMl0gLSA1MTQwMzc4NCB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgOSB8IGQgPj4+IDIzKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkICYgYiB8IGEgJiB+YikgKyBrWzddICsgMTczNTMyODQ3MyB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTQgfCBjID4+PiAxOCkgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyAmIGEgfCBkICYgfmEpICsga1sxMl0gLSAxOTI2NjA3NzM0IHwgMDtcbiAgICAgICAgYiAgPSAoYiA8PCAyMCB8IGIgPj4+IDEyKSArIGMgfCAwO1xuXG4gICAgICAgIGEgKz0gKGIgXiBjIF4gZCkgKyBrWzVdIC0gMzc4NTU4IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzhdIC0gMjAyMjU3NDQ2MyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCBeIGEgXiBiKSArIGtbMTFdICsgMTgzOTAzMDU2MiB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbMTRdIC0gMzUzMDk1NTYgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiBeIGMgXiBkKSArIGtbMV0gLSAxNTMwOTkyMDYwIHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzRdICsgMTI3Mjg5MzM1MyB8IDA7XG4gICAgICAgIGQgID0gKGQgPDwgMTEgfCBkID4+PiAyMSkgKyBhIHwgMDtcbiAgICAgICAgYyArPSAoZCBeIGEgXiBiKSArIGtbN10gLSAxNTU0OTc2MzIgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE2IHwgYyA+Pj4gMTYpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGMgXiBkIF4gYSkgKyBrWzEwXSAtIDEwOTQ3MzA2NDAgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYiBeIGMgXiBkKSArIGtbMTNdICsgNjgxMjc5MTc0IHwgMDtcbiAgICAgICAgYSAgPSAoYSA8PCA0IHwgYSA+Pj4gMjgpICsgYiB8IDA7XG4gICAgICAgIGQgKz0gKGEgXiBiIF4gYykgKyBrWzBdIC0gMzU4NTM3MjIyIHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMSB8IGQgPj4+IDIxKSArIGEgfCAwO1xuICAgICAgICBjICs9IChkIF4gYSBeIGIpICsga1szXSAtIDcyMjUyMTk3OSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbNl0gKyA3NjAyOTE4OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjMgfCBiID4+PiA5KSArIGMgfCAwO1xuICAgICAgICBhICs9IChiIF4gYyBeIGQpICsga1s5XSAtIDY0MDM2NDQ4NyB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNCB8IGEgPj4+IDI4KSArIGIgfCAwO1xuICAgICAgICBkICs9IChhIF4gYiBeIGMpICsga1sxMl0gLSA0MjE4MTU4MzUgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDExIHwgZCA+Pj4gMjEpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGQgXiBhIF4gYikgKyBrWzE1XSArIDUzMDc0MjUyMCB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTYgfCBjID4+PiAxNikgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoYyBeIGQgXiBhKSArIGtbMl0gLSA5OTUzMzg2NTEgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIzIHwgYiA+Pj4gOSkgKyBjIHwgMDtcblxuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1swXSAtIDE5ODYzMDg0NCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1s3XSArIDExMjY4OTE0MTUgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzE0XSAtIDE0MTYzNTQ5MDUgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBrWzVdIC0gNTc0MzQwNTUgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIxIHxiID4+PiAxMSkgKyBjIHwgMDtcbiAgICAgICAgYSArPSAoYyBeIChiIHwgfmQpKSArIGtbMTJdICsgMTcwMDQ4NTU3MSB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1szXSAtIDE4OTQ5ODY2MDYgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzEwXSAtIDEwNTE1MjMgfCAwO1xuICAgICAgICBjICA9IChjIDw8IDE1IHwgYyA+Pj4gMTcpICsgZCB8IDA7XG4gICAgICAgIGIgKz0gKGQgXiAoYyB8IH5hKSkgKyBrWzFdIC0gMjA1NDkyMjc5OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfGIgPj4+IDExKSArIGMgfCAwO1xuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1s4XSArIDE4NzMzMTMzNTkgfCAwO1xuICAgICAgICBhICA9IChhIDw8IDYgfCBhID4+PiAyNikgKyBiIHwgMDtcbiAgICAgICAgZCArPSAoYiBeIChhIHwgfmMpKSArIGtbMTVdIC0gMzA2MTE3NDQgfCAwO1xuICAgICAgICBkICA9IChkIDw8IDEwIHwgZCA+Pj4gMjIpICsgYSB8IDA7XG4gICAgICAgIGMgKz0gKGEgXiAoZCB8IH5iKSkgKyBrWzZdIC0gMTU2MDE5ODM4MCB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbMTNdICsgMTMwOTE1MTY0OSB8IDA7XG4gICAgICAgIGIgID0gKGIgPDwgMjEgfGIgPj4+IDExKSArIGMgfCAwO1xuICAgICAgICBhICs9IChjIF4gKGIgfCB+ZCkpICsga1s0XSAtIDE0NTUyMzA3MCB8IDA7XG4gICAgICAgIGEgID0gKGEgPDwgNiB8IGEgPj4+IDI2KSArIGIgfCAwO1xuICAgICAgICBkICs9IChiIF4gKGEgfCB+YykpICsga1sxMV0gLSAxMTIwMjEwMzc5IHwgMDtcbiAgICAgICAgZCAgPSAoZCA8PCAxMCB8IGQgPj4+IDIyKSArIGEgfCAwO1xuICAgICAgICBjICs9IChhIF4gKGQgfCB+YikpICsga1syXSArIDcxODc4NzI1OSB8IDA7XG4gICAgICAgIGMgID0gKGMgPDwgMTUgfCBjID4+PiAxNykgKyBkIHwgMDtcbiAgICAgICAgYiArPSAoZCBeIChjIHwgfmEpKSArIGtbOV0gLSAzNDM0ODU1NTEgfCAwO1xuICAgICAgICBiICA9IChiIDw8IDIxIHwgYiA+Pj4gMTEpICsgYyB8IDA7XG5cbiAgICAgICAgeFswXSA9IGEgKyB4WzBdIHwgMDtcbiAgICAgICAgeFsxXSA9IGIgKyB4WzFdIHwgMDtcbiAgICAgICAgeFsyXSA9IGMgKyB4WzJdIHwgMDtcbiAgICAgICAgeFszXSA9IGQgKyB4WzNdIHwgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZDVibGsocykge1xuICAgICAgICB2YXIgbWQ1YmxrcyA9IFtdLFxuICAgICAgICAgICAgaTsgLyogQW5keSBLaW5nIHNhaWQgZG8gaXQgdGhpcyB3YXkuICovXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpICs9IDQpIHtcbiAgICAgICAgICAgIG1kNWJsa3NbaSA+PiAyXSA9IHMuY2hhckNvZGVBdChpKSArIChzLmNoYXJDb2RlQXQoaSArIDEpIDw8IDgpICsgKHMuY2hhckNvZGVBdChpICsgMikgPDwgMTYpICsgKHMuY2hhckNvZGVBdChpICsgMykgPDwgMjQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZDVibGtzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNWJsa19hcnJheShhKSB7XG4gICAgICAgIHZhciBtZDVibGtzID0gW10sXG4gICAgICAgICAgICBpOyAvKiBBbmR5IEtpbmcgc2FpZCBkbyBpdCB0aGlzIHdheS4gKi9cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkgKz0gNCkge1xuICAgICAgICAgICAgbWQ1Ymxrc1tpID4+IDJdID0gYVtpXSArIChhW2kgKyAxXSA8PCA4KSArIChhW2kgKyAyXSA8PCAxNikgKyAoYVtpICsgM10gPDwgMjQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZDVibGtzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1kNTEocykge1xuICAgICAgICB2YXIgbiA9IHMubGVuZ3RoLFxuICAgICAgICAgICAgc3RhdGUgPSBbMTczMjU4NDE5MywgLTI3MTczMzg3OSwgLTE3MzI1ODQxOTQsIDI3MTczMzg3OF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgdGFpbCxcbiAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgIGxvLFxuICAgICAgICAgICAgaGk7XG5cbiAgICAgICAgZm9yIChpID0gNjQ7IGkgPD0gbjsgaSArPSA2NCkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIG1kNWJsayhzLnN1YnN0cmluZyhpIC0gNjQsIGkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcyA9IHMuc3Vic3RyaW5nKGkgLSA2NCk7XG4gICAgICAgIGxlbmd0aCA9IHMubGVuZ3RoO1xuICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBzLmNoYXJDb2RlQXQoaSkgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIH1cbiAgICAgICAgdGFpbFtpID4+IDJdIHw9IDB4ODAgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIGlmIChpID4gNTUpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHN0YXRlLCB0YWlsKTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdGFpbFtpXSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZXdhcmUgdGhhdCB0aGUgZmluYWwgbGVuZ3RoIG1pZ2h0IG5vdCBmaXQgaW4gMzIgYml0cyBzbyB3ZSB0YWtlIGNhcmUgb2YgdGhhdFxuICAgICAgICB0bXAgPSBuICogODtcbiAgICAgICAgdG1wID0gdG1wLnRvU3RyaW5nKDE2KS5tYXRjaCgvKC4qPykoLnswLDh9KSQvKTtcbiAgICAgICAgbG8gPSBwYXJzZUludCh0bXBbMl0sIDE2KTtcbiAgICAgICAgaGkgPSBwYXJzZUludCh0bXBbMV0sIDE2KSB8fCAwO1xuXG4gICAgICAgIHRhaWxbMTRdID0gbG87XG4gICAgICAgIHRhaWxbMTVdID0gaGk7XG5cbiAgICAgICAgbWQ1Y3ljbGUoc3RhdGUsIHRhaWwpO1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWQ1MV9hcnJheShhKSB7XG4gICAgICAgIHZhciBuID0gYS5sZW5ndGgsXG4gICAgICAgICAgICBzdGF0ZSA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICB0YWlsLFxuICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgbG8sXG4gICAgICAgICAgICBoaTtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBuOyBpICs9IDY0KSB7XG4gICAgICAgICAgICBtZDVjeWNsZShzdGF0ZSwgbWQ1YmxrX2FycmF5KGEuc3ViYXJyYXkoaSAtIDY0LCBpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm90IHN1cmUgaWYgaXQgaXMgYSBidWcsIGhvd2V2ZXIgSUUxMCB3aWxsIGFsd2F5cyBwcm9kdWNlIGEgc3ViIGFycmF5IG9mIGxlbmd0aCAxXG4gICAgICAgIC8vIGNvbnRhaW5pbmcgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGFyZW50IGFycmF5IGlmIHRoZSBzdWIgYXJyYXkgc3BlY2lmaWVkIHN0YXJ0c1xuICAgICAgICAvLyBiZXlvbmQgdGhlIGxlbmd0aCBvZiB0aGUgcGFyZW50IGFycmF5IC0gd2VpcmQuXG4gICAgICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvNzcxNDUyL3R5cGVkLWFycmF5LXN1YmFycmF5LWlzc3VlXG4gICAgICAgIGEgPSAoaSAtIDY0KSA8IG4gPyBhLnN1YmFycmF5KGkgLSA2NCkgOiBuZXcgVWludDhBcnJheSgwKTtcblxuICAgICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgICAgdGFpbCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB0YWlsW2kgPj4gMl0gfD0gYVtpXSA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhaWxbaSA+PiAyXSB8PSAweDgwIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICBpZiAoaSA+IDU1KSB7XG4gICAgICAgICAgICBtZDVjeWNsZShzdGF0ZSwgdGFpbCk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHRhaWxbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmV3YXJlIHRoYXQgdGhlIGZpbmFsIGxlbmd0aCBtaWdodCBub3QgZml0IGluIDMyIGJpdHMgc28gd2UgdGFrZSBjYXJlIG9mIHRoYXRcbiAgICAgICAgdG1wID0gbiAqIDg7XG4gICAgICAgIHRtcCA9IHRtcC50b1N0cmluZygxNikubWF0Y2goLyguKj8pKC57MCw4fSkkLyk7XG4gICAgICAgIGxvID0gcGFyc2VJbnQodG1wWzJdLCAxNik7XG4gICAgICAgIGhpID0gcGFyc2VJbnQodG1wWzFdLCAxNikgfHwgMDtcblxuICAgICAgICB0YWlsWzE0XSA9IGxvO1xuICAgICAgICB0YWlsWzE1XSA9IGhpO1xuXG4gICAgICAgIG1kNWN5Y2xlKHN0YXRlLCB0YWlsKTtcblxuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmhleChuKSB7XG4gICAgICAgIHZhciBzID0gJycsXG4gICAgICAgICAgICBqO1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgNDsgaiArPSAxKSB7XG4gICAgICAgICAgICBzICs9IGhleF9jaHJbKG4gPj4gKGogKiA4ICsgNCkpICYgMHgwRl0gKyBoZXhfY2hyWyhuID4+IChqICogOCkpICYgMHgwRl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGV4KHgpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB4W2ldID0gcmhleCh4W2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geC5qb2luKCcnKTtcbiAgICB9XG5cbiAgICAvLyBJbiBzb21lIGNhc2VzIHRoZSBmYXN0IGFkZDMyIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkLi5cbiAgICBpZiAoaGV4KG1kNTEoJ2hlbGxvJykpICE9PSAnNWQ0MTQwMmFiYzRiMmE3NmI5NzE5ZDkxMTAxN2M1OTInKSB7XG4gICAgICAgIGFkZDMyID0gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICAgICAgICAgIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRiksXG4gICAgICAgICAgICAgICAgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gICAgICAgICAgICByZXR1cm4gKG1zdyA8PCAxNikgfCAobHN3ICYgMHhGRkZGKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIEFycmF5QnVmZmVyIHNsaWNlIHBvbHlmaWxsLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdHRhdWJlcnQvbm9kZS1hcnJheWJ1ZmZlci1zbGljZVxuICAgICAqL1xuXG4gICAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgIUFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSkge1xuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gY2xhbXAodmFsLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAodmFsIHwgMCkgfHwgMDtcblxuICAgICAgICAgICAgICAgIGlmICh2YWwgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCh2YWwgKyBsZW5ndGgsIDApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbih2YWwsIGxlbmd0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIChmcm9tLCB0bykge1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmJ5dGVMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luID0gY2xhbXAoZnJvbSwgbGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBudW0sXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUFycmF5O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gY2xhbXAodG8sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJlZ2luID4gZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbnVtID0gZW5kIC0gYmVnaW47XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IEFycmF5QnVmZmVyKG51bSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0QXJyYXkgPSBuZXcgVWludDhBcnJheSh0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgc291cmNlQXJyYXkgPSBuZXcgVWludDhBcnJheSh0aGlzLCBiZWdpbiwgbnVtKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRBcnJheS5zZXQoc291cmNlQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXJzLlxuICAgICAqL1xuXG4gICAgZnVuY3Rpb24gdG9VdGY4KHN0cikge1xuICAgICAgICBpZiAoL1tcXHUwMDgwLVxcdUZGRkZdLy50ZXN0KHN0cikpIHtcbiAgICAgICAgICAgIHN0ciA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRmOFN0cjJBcnJheUJ1ZmZlcihzdHIsIHJldHVyblVJbnQ4QXJyYXkpIHtcbiAgICAgICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGgsXG4gICAgICAgICAgIGJ1ZmYgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKSxcbiAgICAgICAgICAgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmZiksXG4gICAgICAgICAgIGk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBhcnJbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5VSW50OEFycmF5ID8gYXJyIDogYnVmZjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcnJheUJ1ZmZlcjJVdGY4U3RyKGJ1ZmYpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgbmV3IFVpbnQ4QXJyYXkoYnVmZikpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmNhdGVuYXRlQXJyYXlCdWZmZXJzKGZpcnN0LCBzZWNvbmQsIHJldHVyblVJbnQ4QXJyYXkpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGZpcnN0LmJ5dGVMZW5ndGggKyBzZWNvbmQuYnl0ZUxlbmd0aCk7XG5cbiAgICAgICAgcmVzdWx0LnNldChuZXcgVWludDhBcnJheShmaXJzdCkpO1xuICAgICAgICByZXN1bHQuc2V0KG5ldyBVaW50OEFycmF5KHNlY29uZCksIGZpcnN0LmJ5dGVMZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiByZXR1cm5VSW50OEFycmF5ID8gcmVzdWx0IDogcmVzdWx0LmJ1ZmZlcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXhUb0JpbmFyeVN0cmluZyhoZXgpIHtcbiAgICAgICAgdmFyIGJ5dGVzID0gW10sXG4gICAgICAgICAgICBsZW5ndGggPSBoZXgubGVuZ3RoLFxuICAgICAgICAgICAgeDtcblxuICAgICAgICBmb3IgKHggPSAwOyB4IDwgbGVuZ3RoIC0gMTsgeCArPSAyKSB7XG4gICAgICAgICAgICBieXRlcy5wdXNoKHBhcnNlSW50KGhleC5zdWJzdHIoeCwgMiksIDE2KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGJ5dGVzKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIC8qKlxuICAgICAqIFNwYXJrTUQ1IE9PUCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGNsYXNzIHRvIHBlcmZvcm0gYW4gaW5jcmVtZW50YWwgbWQ1LCBvdGhlcndpc2UgdXNlIHRoZVxuICAgICAqIHN0YXRpYyBtZXRob2RzIGluc3RlYWQuXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiBTcGFya01ENSgpIHtcbiAgICAgICAgLy8gY2FsbCByZXNldCB0byBpbml0IHRoZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhIHN0cmluZy5cbiAgICAgKiBBIGNvbnZlcnNpb24gd2lsbCBiZSBhcHBsaWVkIGlmIGFuIHV0Zjggc3RyaW5nIGlzIGRldGVjdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgc3RyaW5nIHRvIGJlIGFwcGVuZGVkXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdXRmOCBieXRlcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgLy8gVGhlbiBhcHBlbmQgYXMgYmluYXJ5XG4gICAgICAgIHRoaXMuYXBwZW5kQmluYXJ5KHRvVXRmOChzdHIpKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQXBwZW5kcyBhIGJpbmFyeSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gY29udGVudHMgVGhlIGJpbmFyeSBzdHJpbmcgdG8gYmUgYXBwZW5kZWRcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1NwYXJrTUQ1fSBUaGUgaW5zdGFuY2UgaXRzZWxmXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmFwcGVuZEJpbmFyeSA9IGZ1bmN0aW9uIChjb250ZW50cykge1xuICAgICAgICB0aGlzLl9idWZmICs9IGNvbnRlbnRzO1xuICAgICAgICB0aGlzLl9sZW5ndGggKz0gY29udGVudHMubGVuZ3RoO1xuXG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLl9idWZmLmxlbmd0aCxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgZm9yIChpID0gNjQ7IGkgPD0gbGVuZ3RoOyBpICs9IDY0KSB7XG4gICAgICAgICAgICBtZDVjeWNsZSh0aGlzLl9oYXNoLCBtZDVibGsodGhpcy5fYnVmZi5zdWJzdHJpbmcoaSAtIDY0LCBpKSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYnVmZiA9IHRoaXMuX2J1ZmYuc3Vic3RyaW5nKGkgLSA2NCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSBpbmNyZW1lbnRhbCBjb21wdXRhdGlvbiwgcmVzZXRpbmcgdGhlIGludGVybmFsIHN0YXRlIGFuZFxuICAgICAqIHJldHVybmluZyB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSByYXcgVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChyYXcpIHtcbiAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLl9idWZmLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgdGFpbCA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXSxcbiAgICAgICAgICAgIHJldDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBidWZmLmNoYXJDb2RlQXQoaSkgPDwgKChpICUgNCkgPDwgMyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9maW5pc2godGFpbCwgbGVuZ3RoKTtcbiAgICAgICAgcmV0ID0gaGV4KHRoaXMuX2hhc2gpO1xuXG4gICAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgICAgIHJldCA9IGhleFRvQmluYXJ5U3RyaW5nKHJldCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0KCk7XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fYnVmZiA9ICcnO1xuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl9oYXNoID0gWzE3MzI1ODQxOTMsIC0yNzE3MzM4NzksIC0xNzMyNTg0MTk0LCAyNzE3MzM4NzhdO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBzdGF0ZVxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJ1ZmY6IHRoaXMuX2J1ZmYsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMuX2xlbmd0aCxcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuX2hhc2guc2xpY2UoKVxuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY29tcHV0YXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGUgVGhlIHN0YXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTcGFya01ENX0gVGhlIGluc3RhbmNlIGl0c2VsZlxuICAgICAqL1xuICAgIFNwYXJrTUQ1LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB0aGlzLl9idWZmID0gc3RhdGUuYnVmZjtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gc3RhdGUubGVuZ3RoO1xuICAgICAgICB0aGlzLl9oYXNoID0gc3RhdGUuaGFzaDtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgbWVtb3J5IHVzZWQgYnkgdGhlIGluY3JlbWVudGFsIGJ1ZmZlciBhbmQgb3RoZXIgYWRkaXRpb25hbFxuICAgICAqIHJlc291cmNlcy4gSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBpbnN0YW5jZSBhZ2FpbiwgdXNlIHJlc2V0IGluc3RlYWQuXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9oYXNoO1xuICAgICAgICBkZWxldGUgdGhpcy5fYnVmZjtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2xlbmd0aDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluaXNoIHRoZSBmaW5hbCBjYWxjdWxhdGlvbiBiYXNlZCBvbiB0aGUgdGFpbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXl9ICB0YWlsICAgVGhlIHRhaWwgKHdpbGwgYmUgbW9kaWZpZWQpXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSByZW1haW5pbmcgYnVmZmVyXG4gICAgICovXG4gICAgU3BhcmtNRDUucHJvdG90eXBlLl9maW5pc2ggPSBmdW5jdGlvbiAodGFpbCwgbGVuZ3RoKSB7XG4gICAgICAgIHZhciBpID0gbGVuZ3RoLFxuICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgbG8sXG4gICAgICAgICAgICBoaTtcblxuICAgICAgICB0YWlsW2kgPj4gMl0gfD0gMHg4MCA8PCAoKGkgJSA0KSA8PCAzKTtcbiAgICAgICAgaWYgKGkgPiA1NSkge1xuICAgICAgICAgICAgbWQ1Y3ljbGUodGhpcy5faGFzaCwgdGFpbCk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgIHRhaWxbaV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG8gdGhlIGZpbmFsIGNvbXB1dGF0aW9uIGJhc2VkIG9uIHRoZSB0YWlsIGFuZCBsZW5ndGhcbiAgICAgICAgLy8gQmV3YXJlIHRoYXQgdGhlIGZpbmFsIGxlbmd0aCBtYXkgbm90IGZpdCBpbiAzMiBiaXRzIHNvIHdlIHRha2UgY2FyZSBvZiB0aGF0XG4gICAgICAgIHRtcCA9IHRoaXMuX2xlbmd0aCAqIDg7XG4gICAgICAgIHRtcCA9IHRtcC50b1N0cmluZygxNikubWF0Y2goLyguKj8pKC57MCw4fSkkLyk7XG4gICAgICAgIGxvID0gcGFyc2VJbnQodG1wWzJdLCAxNik7XG4gICAgICAgIGhpID0gcGFyc2VJbnQodG1wWzFdLCAxNikgfHwgMDtcblxuICAgICAgICB0YWlsWzE0XSA9IGxvO1xuICAgICAgICB0YWlsWzE1XSA9IGhpO1xuICAgICAgICBtZDVjeWNsZSh0aGlzLl9oYXNoLCB0YWlsKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIG1kNSBoYXNoIG9uIGEgc3RyaW5nLlxuICAgICAqIEEgY29udmVyc2lvbiB3aWxsIGJlIGFwcGxpZWQgaWYgdXRmOCBzdHJpbmcgaXMgZGV0ZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gIHN0ciBUaGUgc3RyaW5nXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBbcmF3XSBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5oYXNoID0gZnVuY3Rpb24gKHN0ciwgcmF3KSB7XG4gICAgICAgIC8vIENvbnZlcnRzIHRoZSBzdHJpbmcgdG8gdXRmOCBieXRlcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgLy8gVGhlbiBjb21wdXRlIGl0IHVzaW5nIHRoZSBiaW5hcnkgZnVuY3Rpb25cbiAgICAgICAgcmV0dXJuIFNwYXJrTUQ1Lmhhc2hCaW5hcnkodG9VdGY4KHN0ciksIHJhdyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIHRoZSBtZDUgaGFzaCBvbiBhIGJpbmFyeSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gIGNvbnRlbnQgVGhlIGJpbmFyeSBzdHJpbmdcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtyYXddICAgICBUcnVlIHRvIGdldCB0aGUgcmF3IHN0cmluZywgZmFsc2UgdG8gZ2V0IHRoZSBoZXggc3RyaW5nXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IFRoZSByZXN1bHRcbiAgICAgKi9cbiAgICBTcGFya01ENS5oYXNoQmluYXJ5ID0gZnVuY3Rpb24gKGNvbnRlbnQsIHJhdykge1xuICAgICAgICB2YXIgaGFzaCA9IG1kNTEoY29udGVudCksXG4gICAgICAgICAgICByZXQgPSBoZXgoaGFzaCk7XG5cbiAgICAgICAgcmV0dXJuIHJhdyA/IGhleFRvQmluYXJ5U3RyaW5nKHJldCkgOiByZXQ7XG4gICAgfTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogU3BhcmtNRDUgT09QIGltcGxlbWVudGF0aW9uIGZvciBhcnJheSBidWZmZXJzLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgY2xhc3MgdG8gcGVyZm9ybSBhbiBpbmNyZW1lbnRhbCBtZDUgT05MWSBmb3IgYXJyYXkgYnVmZmVycy5cbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gY2FsbCByZXNldCB0byBpbml0IHRoZSBpbnN0YW5jZVxuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFwcGVuZHMgYW4gYXJyYXkgYnVmZmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyIFRoZSBhcnJheSB0byBiZSBhcHBlbmRlZFxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgICB2YXIgYnVmZiA9IGNvbmNhdGVuYXRlQXJyYXlCdWZmZXJzKHRoaXMuX2J1ZmYuYnVmZmVyLCBhcnIsIHRydWUpLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICBpO1xuXG4gICAgICAgIHRoaXMuX2xlbmd0aCArPSBhcnIuYnl0ZUxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSA2NDsgaSA8PSBsZW5ndGg7IGkgKz0gNjQpIHtcbiAgICAgICAgICAgIG1kNWN5Y2xlKHRoaXMuX2hhc2gsIG1kNWJsa19hcnJheShidWZmLnN1YmFycmF5KGkgLSA2NCwgaSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2J1ZmYgPSAoaSAtIDY0KSA8IGxlbmd0aCA/IG5ldyBVaW50OEFycmF5KGJ1ZmYuYnVmZmVyLnNsaWNlKGkgLSA2NCkpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEZpbmlzaGVzIHRoZSBpbmNyZW1lbnRhbCBjb21wdXRhdGlvbiwgcmVzZXRpbmcgdGhlIGludGVybmFsIHN0YXRlIGFuZFxuICAgICAqIHJldHVybmluZyB0aGUgcmVzdWx0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtCb29sZWFufSByYXcgVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IHN0cmluZ1xuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUuQXJyYXlCdWZmZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChyYXcpIHtcbiAgICAgICAgdmFyIGJ1ZmYgPSB0aGlzLl9idWZmLFxuICAgICAgICAgICAgbGVuZ3RoID0gYnVmZi5sZW5ndGgsXG4gICAgICAgICAgICB0YWlsID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHJldDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHRhaWxbaSA+PiAyXSB8PSBidWZmW2ldIDw8ICgoaSAlIDQpIDw8IDMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZmluaXNoKHRhaWwsIGxlbmd0aCk7XG4gICAgICAgIHJldCA9IGhleCh0aGlzLl9oYXNoKTtcblxuICAgICAgICBpZiAocmF3KSB7XG4gICAgICAgICAgICByZXQgPSBoZXhUb0JpbmFyeVN0cmluZyhyZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZXNldCgpO1xuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2J1ZmYgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgdGhpcy5fbGVuZ3RoID0gMDtcbiAgICAgICAgdGhpcy5faGFzaCA9IFsxNzMyNTg0MTkzLCAtMjcxNzMzODc5LCAtMTczMjU4NDE5NCwgMjcxNzMzODc4XTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgc3RhdGVcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuZ2V0U3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IFNwYXJrTUQ1LnByb3RvdHlwZS5nZXRTdGF0ZS5jYWxsKHRoaXMpO1xuXG4gICAgICAgIC8vIENvbnZlcnQgYnVmZmVyIHRvIGEgc3RyaW5nXG4gICAgICAgIHN0YXRlLmJ1ZmYgPSBhcnJheUJ1ZmZlcjJVdGY4U3RyKHN0YXRlLmJ1ZmYpO1xuXG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGNvbXB1dGF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlIFRoZSBzdGF0ZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3BhcmtNRDUuQXJyYXlCdWZmZXJ9IFRoZSBpbnN0YW5jZSBpdHNlbGZcbiAgICAgKi9cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gYnVmZmVyXG4gICAgICAgIHN0YXRlLmJ1ZmYgPSB1dGY4U3RyMkFycmF5QnVmZmVyKHN0YXRlLmJ1ZmYsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiBTcGFya01ENS5wcm90b3R5cGUuc2V0U3RhdGUuY2FsbCh0aGlzLCBzdGF0ZSk7XG4gICAgfTtcblxuICAgIFNwYXJrTUQ1LkFycmF5QnVmZmVyLnByb3RvdHlwZS5kZXN0cm95ID0gU3BhcmtNRDUucHJvdG90eXBlLmRlc3Ryb3k7XG5cbiAgICBTcGFya01ENS5BcnJheUJ1ZmZlci5wcm90b3R5cGUuX2ZpbmlzaCA9IFNwYXJrTUQ1LnByb3RvdHlwZS5fZmluaXNoO1xuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIG1kNSBoYXNoIG9uIGFuIGFycmF5IGJ1ZmZlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFyciBUaGUgYXJyYXkgYnVmZmVyXG4gICAgICogQHBhcmFtIHtCb29sZWFufSAgICAgW3Jhd10gVHJ1ZSB0byBnZXQgdGhlIHJhdyBzdHJpbmcsIGZhbHNlIHRvIGdldCB0aGUgaGV4IG9uZVxuICAgICAqXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBUaGUgcmVzdWx0XG4gICAgICovXG4gICAgU3BhcmtNRDUuQXJyYXlCdWZmZXIuaGFzaCA9IGZ1bmN0aW9uIChhcnIsIHJhdykge1xuICAgICAgICB2YXIgaGFzaCA9IG1kNTFfYXJyYXkobmV3IFVpbnQ4QXJyYXkoYXJyKSksXG4gICAgICAgICAgICByZXQgPSBoZXgoaGFzaCk7XG5cbiAgICAgICAgcmV0dXJuIHJhdyA/IGhleFRvQmluYXJ5U3RyaW5nKHJldCkgOiByZXQ7XG4gICAgfTtcblxuICAgIHJldHVybiBTcGFya01ENTtcbn0pKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTUFYXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXguZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOSUxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25pbC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJzZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVRvVjZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YxVG9WLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YyLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YzLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Y0LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Y1LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjZUb1YxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NlRvVi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY3XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Ni5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG52YXIgX21heCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbWF4LmpzXCIpKTtcbnZhciBfbmlsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uaWwuanNcIikpO1xudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xudmFyIF9zdHJpbmdpZnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKSk7XG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YxLmpzXCIpKTtcbnZhciBfdjFUb1YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YxVG9WNi5qc1wiKSk7XG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG52YXIgX3YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NC5qc1wiKSk7XG52YXIgX3Y0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NS5qc1wiKSk7XG52YXIgX3Y1ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92Ni5qc1wiKSk7XG52YXIgX3Y2VG9WID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NlRvVjEuanNcIikpO1xudmFyIF92NiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjcuanNcIikpO1xudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9ICdmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYnOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuLypcbiAqIEJyb3dzZXItY29tcGF0aWJsZSBKYXZhU2NyaXB0IE1ENVxuICpcbiAqIE1vZGlmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IE1ENVxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1NRDVcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogQmFzZWQgb25cbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcbiAqIERpZ2VzdCBBbGdvcml0aG0sIGFzIGRlZmluZWQgaW4gUkZDIDEzMjEuXG4gKiBWZXJzaW9uIDIuMiBDb3B5cmlnaHQgKEMpIFBhdWwgSm9obnN0b24gMTk5OSAtIDIwMDlcbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIG1vcmUgaW5mby5cbiAqL1xuZnVuY3Rpb24gbWQ1KGJ5dGVzKSB7XG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIG1zZyA9IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChieXRlcykpOyAvLyBVVEY4IGVzY2FwZVxuXG4gICAgYnl0ZXMgPSBuZXcgVWludDhBcnJheShtc2cubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1kNVRvSGV4RW5jb2RlZEFycmF5KHdvcmRzVG9NZDUoYnl0ZXNUb1dvcmRzKGJ5dGVzKSwgYnl0ZXMubGVuZ3RoICogOCkpO1xufVxuXG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIG1kNVRvSGV4RW5jb2RlZEFycmF5KGlucHV0KSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzI7XG4gIHZhciBoZXhUYWIgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIHZhciB4ID0gaW5wdXRbaSA+PiA1XSA+Pj4gaSAlIDMyICYgMHhmZjtcbiAgICB2YXIgaGV4ID0gcGFyc2VJbnQoaGV4VGFiLmNoYXJBdCh4ID4+PiA0ICYgMHgwZikgKyBoZXhUYWIuY2hhckF0KHggJiAweDBmKSwgMTYpO1xuICAgIG91dHB1dC5wdXNoKGhleCk7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgb3V0cHV0IGxlbmd0aCB3aXRoIHBhZGRpbmcgYW5kIGJpdCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoOCkge1xuICByZXR1cm4gKGlucHV0TGVuZ3RoOCArIDY0ID4+PiA5IDw8IDQpICsgMTQgKyAxO1xufVxuXG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqL1xuZnVuY3Rpb24gd29yZHNUb01kNSh4LCBsZW4pIHtcbiAgLyogYXBwZW5kIHBhZGRpbmcgKi9cbiAgeFtsZW4gPj4gNV0gfD0gMHg4MCA8PCBsZW4gJSAzMjtcbiAgeFtnZXRPdXRwdXRMZW5ndGgobGVuKSAtIDFdID0gbGVuO1xuICB2YXIgYSA9IDE3MzI1ODQxOTM7XG4gIHZhciBiID0gLTI3MTczMzg3OTtcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcbiAgdmFyIGQgPSAyNzE3MzM4Nzg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICB2YXIgb2xkYSA9IGE7XG4gICAgdmFyIG9sZGIgPSBiO1xuICAgIHZhciBvbGRjID0gYztcbiAgICB2YXIgb2xkZCA9IGQ7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaV0sIDcsIC02ODA4NzY5MzYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTcsIDYwNjEwNTgxOSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNywgLTE3NjQxODg5Nyk7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDVdLCAxMiwgMTIwMDA4MDQyNik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyA3XSwgMjIsIC00NTcwNTk4Myk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA3LCAxNzcwMDM1NDE2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2Myk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA3LCAxODA0NjAzNjgyKTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxNV0sIDIyLCAxMjM2NTM1MzI5KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMV0sIDUsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2ldLCAyMCwgLTM3Mzg5NzMwMik7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4Myk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAxODM5MDMwNTYyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgNF0sIDExLCAxMjcyODkzMzUzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDQsIDY4MTI3OTE3NCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaV0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgNl0sIDIzLCA3NjAyOTE4OSk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDldLCA0LCAtNjQwMzY0NDg3KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTYsIDUzMDc0MjUyMCk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDJdLCAyMywgLTk5NTMzODY1MSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaV0sIDYsIC0xOTg2MzA4NDQpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDVdLCAyMSwgLTU3NDM0MDU1KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA2LCAxNzAwNDg1NTcxKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTUsIC0xMDUxNTIzKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA2LCAxODczMzEzMzU5KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDEzXSwgMjEsIDEzMDkxNTE2NDkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNiwgLTE0NTUyMzA3MCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE1LCA3MTg3ODcyNTkpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuICAgIGEgPSBzYWZlQWRkKGEsIG9sZGEpO1xuICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpO1xuICAgIGMgPSBzYWZlQWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlQWRkKGQsIG9sZGQpO1xuICB9XG4gIHJldHVybiBbYSwgYiwgYywgZF07XG59XG5cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IGJ5dGVzIHRvIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAqIENoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpZ2gtYnl0ZSBzaWxlbnRseSBpZ25vcmVkLlxuICovXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICB2YXIgbGVuZ3RoOCA9IGlucHV0Lmxlbmd0aCAqIDg7XG4gIHZhciBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbmd0aDgpKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg4OyBpICs9IDgpIHtcbiAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXRbaSAvIDhdICYgMHhmZikgPDwgaSAlIDMyO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbi8qXG4gKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5XG4gKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxuICovXG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgdmFyIGxzdyA9ICh4ICYgMHhmZmZmKSArICh5ICYgMHhmZmZmKTtcbiAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xuICByZXR1cm4gbXN3IDw8IDE2IHwgbHN3ICYgMHhmZmZmO1xufVxuXG4vKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICovXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiBudW0gPDwgY250IHwgbnVtID4+PiAzMiAtIGNudDtcbn1cblxuLypcbiAqIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGZvdXIgYmFzaWMgb3BlcmF0aW9ucyB0aGUgYWxnb3JpdGhtIHVzZXMuXG4gKi9cbmZ1bmN0aW9uIG1kNWNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gIHJldHVybiBzYWZlQWRkKGJpdFJvdGF0ZUxlZnQoc2FmZUFkZChzYWZlQWRkKGEsIHEpLCBzYWZlQWRkKHgsIHQpKSwgcyksIGIpO1xufVxuZnVuY3Rpb24gbWQ1ZmYoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGIgJiBjIHwgfmIgJiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgZCB8IGMgJiB+ZCwgYSwgYiwgeCwgcywgdCk7XG59XG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cbmZ1bmN0aW9uIG1kNWlpKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihjIF4gKGIgfCB+ZCksIGEsIGIsIHgsIHMsIHQpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gbWQ1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIHJhbmRvbVVVSUQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8ucmFuZG9tVVVJRCAmJiBjcnlwdG8ucmFuZG9tVVVJRC5iaW5kKGNyeXB0byk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB7XG4gIHJhbmRvbVVVSURcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuICB2YXIgdjtcbiAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuICAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cbiAgYXJyWzBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDAsIDgpLCAxNikpID4+PiAyNDtcbiAgYXJyWzFdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMl0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzNdID0gdiAmIDB4ZmY7XG5cbiAgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG4gIGFycls0XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSg5LCAxMyksIDE2KSkgPj4+IDg7XG4gIGFycls1XSA9IHYgJiAweGZmO1xuXG4gIC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuICBhcnJbNl0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE4KSwgMTYpKSA+Pj4gODtcbiAgYXJyWzddID0gdiAmIDB4ZmY7XG5cbiAgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG4gIGFycls4XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxOSwgMjMpLCAxNikpID4+PiA4O1xuICBhcnJbOV0gPSB2ICYgMHhmZjtcblxuICAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuICBhcnJbMTBdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDI0LCAzNiksIDE2KSkgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzExXSA9IHYgLyAweDEwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMl0gPSB2ID4+PiAyNCAmIDB4ZmY7XG4gIGFyclsxM10gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsxNF0gPSB2ID4+PiA4ICYgMHhmZjtcbiAgYXJyWzE1XSA9IHYgJiAweGZmO1xuICByZXR1cm4gYXJyO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gcGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLThdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC9pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5cbnZhciBnZXRSYW5kb21WYWx1ZXM7XG52YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5mdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuICAgIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuLy8gQWRhcHRlZCBmcm9tIENocmlzIFZlbmVzcycgU0hBMSBjb2RlIGF0XG4vLyBodHRwOi8vd3d3Lm1vdmFibGUtdHlwZS5jby51ay9zY3JpcHRzL3NoYTEuaHRtbFxuZnVuY3Rpb24gZihzLCB4LCB5LCB6KSB7XG4gIHN3aXRjaCAocykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB4ICYgeSBeIH54ICYgejtcbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcbiAgfVxufVxuZnVuY3Rpb24gUk9UTCh4LCBuKSB7XG4gIHJldHVybiB4IDw8IG4gfCB4ID4+PiAzMiAtIG47XG59XG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIHZhciBLID0gWzB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDZdO1xuICB2YXIgSCA9IFsweDY3NDUyMzAxLCAweGVmY2RhYjg5LCAweDk4YmFkY2ZlLCAweDEwMzI1NDc2LCAweGMzZDJlMWYwXTtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgbXNnID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJ5dGVzKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgICBieXRlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgKytpKSB7XG4gICAgICBieXRlcy5wdXNoKG1zZy5jaGFyQ29kZUF0KGkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYnl0ZXMpKSB7XG4gICAgLy8gQ29udmVydCBBcnJheS1saWtlIHRvIEFycmF5XG4gICAgYnl0ZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChieXRlcyk7XG4gIH1cbiAgYnl0ZXMucHVzaCgweDgwKTtcbiAgdmFyIGwgPSBieXRlcy5sZW5ndGggLyA0ICsgMjtcbiAgdmFyIE4gPSBNYXRoLmNlaWwobCAvIDE2KTtcbiAgdmFyIE0gPSBuZXcgQXJyYXkoTik7XG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBOOyArK19pKSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50MzJBcnJheSgxNik7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tfaSAqIDY0ICsgaiAqIDRdIDw8IDI0IHwgYnl0ZXNbX2kgKiA2NCArIGogKiA0ICsgMV0gPDwgMTYgfCBieXRlc1tfaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbX2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgfVxuICAgIE1bX2ldID0gYXJyO1xuICB9XG4gIE1bTiAtIDFdWzE0XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggLyBNYXRoLnBvdygyLCAzMik7XG4gIE1bTiAtIDFdWzE0XSA9IE1hdGguZmxvb3IoTVtOIC0gMV1bMTRdKTtcbiAgTVtOIC0gMV1bMTVdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAmIDB4ZmZmZmZmZmY7XG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47ICsrX2kyKSB7XG4gICAgdmFyIFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuICAgIGZvciAodmFyIHQgPSAwOyB0IDwgMTY7ICsrdCkge1xuICAgICAgV1t0XSA9IE1bX2kyXVt0XTtcbiAgICB9XG4gICAgZm9yICh2YXIgX3QgPSAxNjsgX3QgPCA4MDsgKytfdCkge1xuICAgICAgV1tfdF0gPSBST1RMKFdbX3QgLSAzXSBeIFdbX3QgLSA4XSBeIFdbX3QgLSAxNF0gXiBXW190IC0gMTZdLCAxKTtcbiAgICB9XG4gICAgdmFyIGEgPSBIWzBdO1xuICAgIHZhciBiID0gSFsxXTtcbiAgICB2YXIgYyA9IEhbMl07XG4gICAgdmFyIGQgPSBIWzNdO1xuICAgIHZhciBlID0gSFs0XTtcbiAgICBmb3IgKHZhciBfdDIgPSAwOyBfdDIgPCA4MDsgKytfdDIpIHtcbiAgICAgIHZhciBzID0gTWF0aC5mbG9vcihfdDIgLyAyMCk7XG4gICAgICB2YXIgVCA9IFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW190Ml0gPj4+IDA7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IFJPVEwoYiwgMzApID4+PiAwO1xuICAgICAgYiA9IGE7XG4gICAgICBhID0gVDtcbiAgICB9XG4gICAgSFswXSA9IEhbMF0gKyBhID4+PiAwO1xuICAgIEhbMV0gPSBIWzFdICsgYiA+Pj4gMDtcbiAgICBIWzJdID0gSFsyXSArIGMgPj4+IDA7XG4gICAgSFszXSA9IEhbM10gKyBkID4+PiAwO1xuICAgIEhbNF0gPSBIWzRdICsgZSA+Pj4gMDtcbiAgfVxuICByZXR1cm4gW0hbMF0gPj4gMjQgJiAweGZmLCBIWzBdID4+IDE2ICYgMHhmZiwgSFswXSA+PiA4ICYgMHhmZiwgSFswXSAmIDB4ZmYsIEhbMV0gPj4gMjQgJiAweGZmLCBIWzFdID4+IDE2ICYgMHhmZiwgSFsxXSA+PiA4ICYgMHhmZiwgSFsxXSAmIDB4ZmYsIEhbMl0gPj4gMjQgJiAweGZmLCBIWzJdID4+IDE2ICYgMHhmZiwgSFsyXSA+PiA4ICYgMHhmZiwgSFsyXSAmIDB4ZmYsIEhbM10gPj4gMjQgJiAweGZmLCBIWzNdID4+IDE2ICYgMHhmZiwgSFszXSA+PiA4ICYgMHhmZiwgSFszXSAmIDB4ZmYsIEhbNF0gPj4gMjQgJiAweGZmLCBIWzRdID4+IDE2ICYgMHhmZiwgSFs0XSA+PiA4ICYgMHhmZiwgSFs0XSAmIDB4ZmZdO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc2hhMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG52YXIgYnl0ZVRvSGV4ID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5mdW5jdGlvbiB1bnNhZmVTdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIC8vIE5vdGU6IEJlIGNhcmVmdWwgZWRpdGluZyB0aGlzIGNvZGUhICBJdCdzIGJlZW4gdHVuZWQgZm9yIHBlcmZvcm1hbmNlXG4gIC8vIGFuZCB3b3JrcyBpbiB3YXlzIHlvdSBtYXkgbm90IGV4cGVjdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZC9wdWxsLzQzNFxuICAvL1xuICAvLyBOb3RlIHRvIGZ1dHVyZS1zZWxmOiBObywgeW91IGNhbid0IHJlbW92ZSB0aGUgYHRvTG93ZXJDYXNlKClgIGNhbGwuXG4gIC8vIFJFRjogaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNjc3I2lzc3VlY29tbWVudC0xNzU3MzUxMzUxXG4gIHJldHVybiAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnkoYXJyLCBvZmZzZXQgPSAwKSB7XG4gIHZhciB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTtcbiAgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG4gIHJldHVybiB1dWlkO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gc3RyaW5naWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbi8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcblxudmFyIF9ub2RlSWQ7XG52YXIgX2Nsb2Nrc2VxO1xuXG4vLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcbnZhciBfbGFzdE1TZWNzID0gMDtcbnZhciBfbGFzdE5TZWNzID0gMDtcblxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgQXJyYXkoMTYpO1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIG5vZGUgPSBvcHRpb25zLm5vZGU7XG4gIHZhciBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXE7XG5cbiAgLy8gdjEgb25seTogVXNlIGNhY2hlZCBgbm9kZWAgYW5kIGBjbG9ja3NlcWAgdmFsdWVzXG4gIGlmICghb3B0aW9ucy5fdjYpIHtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIG5vZGUgPSBfbm9kZUlkO1xuICAgIH1cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgY2xvY2tzZXEgPSBfY2xvY2tzZXE7XG4gICAgfVxuICB9XG5cbiAgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIHdlIG5lZWQgZW50cm9weS4gIFdlIGRvIHRoaXMgbGF6aWx5IHRvIG1pbmltaXplIGlzc3Vlc1xuICAvLyByZWxhdGVkIHRvIGluc3VmZmljaWVudCBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIHZhciBzZWVkQnl0ZXMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gICAgLy8gUmFuZG9taXplIG5vZGVcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICBub2RlID0gW3NlZWRCeXRlc1swXSwgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1dO1xuXG4gICAgICAvLyB2MSBvbmx5OiBjYWNoZSBub2RlIHZhbHVlIGZvciByZXVzZVxuICAgICAgaWYgKCFfbm9kZUlkICYmICFvcHRpb25zLl92Nikge1xuICAgICAgICAvLyBwZXIgUkZDNDEyMiA0LjU6IFNldCBNQUMgbXVsdGljYXN0IGJpdCAodjEgb25seSlcbiAgICAgICAgbm9kZVswXSB8PSAweDAxOyAvLyBTZXQgbXVsdGljYXN0IGJpdFxuXG4gICAgICAgIF9ub2RlSWQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJhbmRvbWl6ZSBjbG9ja3NlcVxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxuICAgICAgY2xvY2tzZXEgPSAoc2VlZEJ5dGVzWzZdIDw8IDggfCBzZWVkQnl0ZXNbN10pICYgMHgzZmZmO1xuICAgICAgaWYgKF9jbG9ja3NlcSA9PT0gdW5kZWZpbmVkICYmICFvcHRpb25zLl92Nikge1xuICAgICAgICBfY2xvY2tzZXEgPSBjbG9ja3NlcTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyB2MSAmIHY2IHRpbWVzdGFtcHMgYXJlIDEwMCBuYW5vLXNlY29uZCB1bml0cyBzaW5jZSB0aGUgR3JlZ29yaWFuIGVwb2NoLFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzbyB0aW1lIGlzXG4gIC8vIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcbiAgLy8gKDEwMC1uYW5vc2Vjb25kcyBvZmZzZXQgZnJvbSBtc2Vjcykgc2luY2UgdW5peCBlcG9jaCwgMTk3MC0wMS0wMSAwMDowMC5cbiAgdmFyIG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IERhdGUubm93KCk7XG5cbiAgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuICB2YXIgbnNlY3MgPSBvcHRpb25zLm5zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zZWNzIDogX2xhc3ROU2VjcyArIDE7XG5cbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuICB2YXIgZHQgPSBtc2VjcyAtIF9sYXN0TVNlY3MgKyAobnNlY3MgLSBfbGFzdE5TZWNzKSAvIDEwMDAwO1xuXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cbiAgaWYgKGR0IDwgMCAmJiBvcHRpb25zLmNsb2Nrc2VxID09PSB1bmRlZmluZWQpIHtcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcbiAgfVxuXG4gIC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH1cblxuICAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xuICBfY2xvY2tzZXEgPSBjbG9ja3NlcTtcblxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcbiAgbXNlY3MgKz0gMTIyMTkyOTI4MDAwMDA7XG5cbiAgLy8gYHRpbWVfbG93YFxuICB2YXIgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmO1xuXG4gIC8vIGB0aW1lX21pZGBcbiAgdmFyIHRtaCA9IG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCAmIDB4ZmZmZmZmZjtcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdG1oICYgMHhmZjtcblxuICAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMTYgJiAweGZmO1xuXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxuICBiW2krK10gPSBjbG9ja3NlcSA+Pj4gOCB8IDB4ODA7XG5cbiAgLy8gYGNsb2NrX3NlcV9sb3dgXG4gIGJbaSsrXSA9IGNsb2Nrc2VxICYgMHhmZjtcblxuICAvLyBgbm9kZWBcbiAgZm9yICh2YXIgbiA9IDA7IG4gPCA2OyArK24pIHtcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XG4gIH1cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdjE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2MVRvVjY7XG52YXIgX3BhcnNlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wYXJzZS5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbi8qKlxuICogQ29udmVydCBhIHYxIFVVSUQgdG8gYSB2NiBVVUlEXG4gKlxuICogQHBhcmFtIHtzdHJpbmd8VWludDhBcnJheX0gdXVpZCAtIFRoZSB2MSBVVUlEIHRvIGNvbnZlcnQgdG8gdjZcbiAqIEByZXR1cm5zIHtzdHJpbmd8VWludDhBcnJheX0gVGhlIHY2IFVVSUQgYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYHV1aWRgIGFyZ1xuICogKHN0cmluZyBvciBVaW50OEFycmF5KVxuICovXG5mdW5jdGlvbiB2MVRvVjYodXVpZCkge1xuICB2YXIgdjFCeXRlcyA9IHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyA/ICgwLCBfcGFyc2UuZGVmYXVsdCkodXVpZCkgOiB1dWlkO1xuICB2YXIgdjZCeXRlcyA9IF92MVRvVjYodjFCeXRlcyk7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgPyAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKHY2Qnl0ZXMpIDogdjZCeXRlcztcbn1cblxuLy8gRG8gdGhlIGZpZWxkIHRyYW5zZm9ybWF0aW9uIG5lZWRlZCBmb3IgdjEgLT4gdjZcbmZ1bmN0aW9uIF92MVRvVjYodjFCeXRlcywgcmFuZG9taXplID0gZmFsc2UpIHtcbiAgcmV0dXJuIFVpbnQ4QXJyYXkub2YoKHYxQnl0ZXNbNl0gJiAweDBmKSA8PCA0IHwgdjFCeXRlc1s3XSA+PiA0ICYgMHgwZiwgKHYxQnl0ZXNbN10gJiAweDBmKSA8PCA0IHwgKHYxQnl0ZXNbNF0gJiAweGYwKSA+PiA0LCAodjFCeXRlc1s0XSAmIDB4MGYpIDw8IDQgfCAodjFCeXRlc1s1XSAmIDB4ZjApID4+IDQsICh2MUJ5dGVzWzVdICYgMHgwZikgPDwgNCB8ICh2MUJ5dGVzWzBdICYgMHhmMCkgPj4gNCwgKHYxQnl0ZXNbMF0gJiAweDBmKSA8PCA0IHwgKHYxQnl0ZXNbMV0gJiAweGYwKSA+PiA0LCAodjFCeXRlc1sxXSAmIDB4MGYpIDw8IDQgfCAodjFCeXRlc1syXSAmIDB4ZjApID4+IDQsIDB4NjAgfCB2MUJ5dGVzWzJdICYgMHgwZiwgdjFCeXRlc1szXSwgdjFCeXRlc1s4XSwgdjFCeXRlc1s5XSwgdjFCeXRlc1sxMF0sIHYxQnl0ZXNbMTFdLCB2MUJ5dGVzWzEyXSwgdjFCeXRlc1sxM10sIHYxQnl0ZXNbMTRdLCB2MUJ5dGVzWzE1XSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG52YXIgX21kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZDUuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxudmFyIHYzID0gKDAsIF92LmRlZmF1bHQpKCd2MycsIDB4MzAsIF9tZC5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHYzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmV4cG9ydHMuZGVmYXVsdCA9IHYzNTtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgc3RyID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpOyAvLyBVVEY4IGVzY2FwZVxuXG4gIHZhciBieXRlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cbnZhciBETlMgPSBleHBvcnRzLkROUyA9ICc2YmE3YjgxMC05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xudmFyIFVSTCA9IGV4cG9ydHMuVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5mdW5jdGlvbiB2MzUobmFtZSwgdmVyc2lvbiwgaGFzaGZ1bmMpIHtcbiAgZnVuY3Rpb24gZ2VuZXJhdGVVVUlEKHZhbHVlLCBuYW1lc3BhY2UsIGJ1Ziwgb2Zmc2V0KSB7XG4gICAgdmFyIF9uYW1lc3BhY2U7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgbmFtZXNwYWNlID0gKDAsIF9wYXJzZS5kZWZhdWx0KShuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBpZiAoKChfbmFtZXNwYWNlID0gbmFtZXNwYWNlKSA9PT0gbnVsbCB8fCBfbmFtZXNwYWNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbmFtZXNwYWNlLmxlbmd0aCkgIT09IDE2KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ05hbWVzcGFjZSBtdXN0IGJlIGFycmF5LWxpa2UgKDE2IGl0ZXJhYmxlIGludGVnZXIgdmFsdWVzLCAwLTI1NSknKTtcbiAgICB9XG5cbiAgICAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KDE2ICsgdmFsdWUubGVuZ3RoKTtcbiAgICBieXRlcy5zZXQobmFtZXNwYWNlKTtcbiAgICBieXRlcy5zZXQodmFsdWUsIG5hbWVzcGFjZS5sZW5ndGgpO1xuICAgIGJ5dGVzID0gaGFzaGZ1bmMoYnl0ZXMpO1xuICAgIGJ5dGVzWzZdID0gYnl0ZXNbNl0gJiAweDBmIHwgdmVyc2lvbjtcbiAgICBieXRlc1s4XSA9IGJ5dGVzWzhdICYgMHgzZiB8IDB4ODA7XG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgYnVmW29mZnNldCArIGldID0gYnl0ZXNbaV07XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH1cbiAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG4gIH1cblxuICAvLyBGdW5jdGlvbiNuYW1lIGlzIG5vdCBzZXR0YWJsZSBvbiBzb21lIHBsYXRmb3JtcyAoIzI3MClcbiAgdHJ5IHtcbiAgICBnZW5lcmF0ZVVVSUQubmFtZSA9IG5hbWU7XG4gIH0gY2F0Y2ggKGVycikge31cblxuICAvLyBGb3IgQ29tbW9uSlMgZGVmYXVsdCBleHBvcnQgc3VwcG9ydFxuICBnZW5lcmF0ZVVVSUQuRE5TID0gRE5TO1xuICBnZW5lcmF0ZVVVSUQuVVJMID0gVVJMO1xuICByZXR1cm4gZ2VuZXJhdGVVVUlEO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9uYXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25hdGl2ZS5qc1wiKSk7XG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQoKTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDtcblxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHY0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xudmFyIF9zaGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYTEuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxudmFyIHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB2NTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHY2O1xudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YxLmpzXCIpKTtcbnZhciBfdjFUb1YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YxVG9WNi5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHsgdmFyIHQgPSBPYmplY3Qua2V5cyhlKTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpOyByICYmIChvID0gby5maWx0ZXIoZnVuY3Rpb24gKHIpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgcikuZW51bWVyYWJsZTsgfSkpLCB0LnB1c2guYXBwbHkodCwgbyk7IH0gcmV0dXJuIHQ7IH1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQoZSkgeyBmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykgeyB2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307IHIgJSAyID8gb3duS2V5cyhPYmplY3QodCksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0W3JdKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIHIpKTsgfSk7IH0gcmV0dXJuIGU7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7IHJldHVybiAociA9IF90b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHsgdmFsdWU6IHQsIGVudW1lcmFibGU6ICEwLCBjb25maWd1cmFibGU6ICEwLCB3cml0YWJsZTogITAgfSkgOiBlW3JdID0gdCwgZTsgfVxuZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkodCkgeyB2YXIgaSA9IF90b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTsgcmV0dXJuIFwic3ltYm9sXCIgPT0gdHlwZW9mIGkgPyBpIDogaSArIFwiXCI7IH1cbmZ1bmN0aW9uIF90b1ByaW1pdGl2ZSh0LCByKSB7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8ICF0KSByZXR1cm4gdDsgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmICh2b2lkIDAgIT09IGUpIHsgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7IGlmIChcIm9iamVjdFwiICE9IHR5cGVvZiBpKSByZXR1cm4gaTsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpOyB9IHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7IH1cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBidWZcbiAqIEBwYXJhbSB7bnVtYmVyPX0gb2Zmc2V0XG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB2NihvcHRpb25zID0ge30sIGJ1Ziwgb2Zmc2V0ID0gMCkge1xuICAvLyB2NiBpcyB2MSB3aXRoIGRpZmZlcmVudCBmaWVsZCBsYXlvdXQsIHNvIHdlIHN0YXJ0IHdpdGggYSB2MSBVVUlELCBhbGJlaXRcbiAgLy8gd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgYmVoYXZpb3IgYXJvdW5kIGhvdyB0aGUgY2xvY2tfc2VxIGFuZCBub2RlIGZpZWxkc1xuICAvLyBhcmUgcmFuZG9taXplZCwgd2hpY2ggaXMgd2h5IHdlIGNhbGwgdjEgd2l0aCBfdjY6IHRydWUuXG4gIHZhciBieXRlcyA9ICgwLCBfdi5kZWZhdWx0KShfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgIF92NjogdHJ1ZVxuICB9KSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcblxuICAvLyBSZW9yZGVyIHRoZSBmaWVsZHMgdG8gdjYgbGF5b3V0LlxuICBieXRlcyA9ICgwLCBfdjFUb1YuZGVmYXVsdCkoYnl0ZXMpO1xuXG4gIC8vIFJldHVybiBhcyBhIGJ5dGUgYXJyYXkgaWYgcmVxdWVzdGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGJ1ZltvZmZzZXQgKyBpXSA9IGJ5dGVzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gYnVmO1xuICB9XG4gIHJldHVybiAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGJ5dGVzKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHY2VG9WMTtcbnZhciBfcGFyc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpKTtcbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuLyoqXG4gKiBDb252ZXJ0IGEgdjYgVVVJRCB0byBhIHYxIFVVSURcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xVaW50OEFycmF5fSB1dWlkIC0gVGhlIHY2IFVVSUQgdG8gY29udmVydCB0byB2NlxuICogQHJldHVybnMge3N0cmluZ3xVaW50OEFycmF5fSBUaGUgdjEgVVVJRCBhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBgdXVpZGAgYXJnXG4gKiAoc3RyaW5nIG9yIFVpbnQ4QXJyYXkpXG4gKi9cbmZ1bmN0aW9uIHY2VG9WMSh1dWlkKSB7XG4gIHZhciB2NkJ5dGVzID0gdHlwZW9mIHV1aWQgPT09ICdzdHJpbmcnID8gKDAsIF9wYXJzZS5kZWZhdWx0KSh1dWlkKSA6IHV1aWQ7XG4gIHZhciB2MUJ5dGVzID0gX3Y2VG9WMSh2NkJ5dGVzKTtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyA/ICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkodjFCeXRlcykgOiB2MUJ5dGVzO1xufVxuXG4vLyBEbyB0aGUgZmllbGQgdHJhbnNmb3JtYXRpb24gbmVlZGVkIGZvciB2NiAtPiB2MVxuZnVuY3Rpb24gX3Y2VG9WMSh2NkJ5dGVzKSB7XG4gIHJldHVybiBVaW50OEFycmF5Lm9mKCh2NkJ5dGVzWzNdICYgMHgwZikgPDwgNCB8IHY2Qnl0ZXNbNF0gPj4gNCAmIDB4MGYsICh2NkJ5dGVzWzRdICYgMHgwZikgPDwgNCB8ICh2NkJ5dGVzWzVdICYgMHhmMCkgPj4gNCwgKHY2Qnl0ZXNbNV0gJiAweDBmKSA8PCA0IHwgdjZCeXRlc1s2XSAmIDB4MGYsIHY2Qnl0ZXNbN10sICh2NkJ5dGVzWzFdICYgMHgwZikgPDwgNCB8ICh2NkJ5dGVzWzJdICYgMHhmMCkgPj4gNCwgKHY2Qnl0ZXNbMl0gJiAweDBmKSA8PCA0IHwgKHY2Qnl0ZXNbM10gJiAweGYwKSA+PiA0LCAweDEwIHwgKHY2Qnl0ZXNbMF0gJiAweGYwKSA+PiA0LCAodjZCeXRlc1swXSAmIDB4MGYpIDw8IDQgfCAodjZCeXRlc1sxXSAmIDB4ZjApID4+IDQsIHY2Qnl0ZXNbOF0sIHY2Qnl0ZXNbOV0sIHY2Qnl0ZXNbMTBdLCB2NkJ5dGVzWzExXSwgdjZCeXRlc1sxMl0sIHY2Qnl0ZXNbMTNdLCB2NkJ5dGVzWzE0XSwgdjZCeXRlc1sxNV0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoZSkgeyByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDogeyBkZWZhdWx0OiBlIH07IH1cbi8qKlxuICogVVVJRCBWNyAtIFVuaXggRXBvY2ggdGltZS1iYXNlZCBVVUlEXG4gKlxuICogVGhlIElFVEYgaGFzIHB1Ymxpc2hlZCBSRkM5NTYyLCBpbnRyb2R1Y2luZyAzIG5ldyBVVUlEIHZlcnNpb25zICg2LDcsOCkuIFRoaXNcbiAqIGltcGxlbWVudGF0aW9uIG9mIFY3IGlzIGJhc2VkIG9uIHRoZSBhY2NlcHRlZCwgdGhvdWdoIG5vdCB5ZXQgYXBwcm92ZWQsXG4gKiByZXZpc2lvbnMuXG4gKlxuICogUkZDIDk1NjI6aHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzk1NjIuaHRtbCBVbml2ZXJzYWxseSBVbmlxdWVcbiAqIElEZW50aWZpZXJzIChVVUlEcylcblxuICpcbiAqIFNhbXBsZSBWNyB2YWx1ZTpcbiAqIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5NTYyLmh0bWwjbmFtZS1leGFtcGxlLW9mLWEtdXVpZHY3LXZhbHVlXG4gKlxuICogTW9ub3RvbmljIEJpdCBMYXlvdXQ6IFJGQyByZmM5NTYyLjYuMiBNZXRob2QgMSwgRGVkaWNhdGVkIENvdW50ZXIgQml0cyByZWY6XG4gKiAgICAgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzk1NjIuaHRtbCNzZWN0aW9uLTYuMi01LjFcbiAqXG4gKiAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMgMCAxIDIgMyA0IDUgNlxuICogICA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxXG4gKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLStcbiAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB1bml4X3RzX21zICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rXG4gKiAgfCAgICAgICAgICB1bml4X3RzX21zICAgICAgICAgICB8ICB2ZXIgIHwgICAgICAgIHNlcV9oaSAgICAgICAgIHxcbiAqICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstK1xuICogIHx2YXJ8ICAgICAgICAgICAgICAgc2VxX2xvdyAgICAgICAgICAgICAgIHwgICAgICAgIHJhbmQgICAgICAgICB8XG4gKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLStcbiAqICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rXG4gKlxuICogc2VxIGlzIGEgMzEgYml0IHNlcmlhbGl6ZWQgY291bnRlcjsgY29tcHJpc2VkIG9mIDEyIGJpdCBzZXFfaGkgYW5kIDE5IGJpdFxuICogc2VxX2xvdywgYW5kIHJhbmRvbWx5IGluaXRpYWxpemVkIHVwb24gdGltZXN0YW1wIGNoYW5nZS4gMzEgYml0IGNvdW50ZXIgc2l6ZVxuICogd2FzIHNlbGVjdGVkIGFzIGFueSBiaXR3aXNlIG9wZXJhdGlvbnMgaW4gbm9kZSBhcmUgZG9uZSBhcyBfc2lnbmVkXyAzMiBiaXRcbiAqIGludHMuIHdlIGV4Y2x1ZGUgdGhlIHNpZ24gYml0LlxuICovXG5cbnZhciBfc2VxTG93ID0gbnVsbDtcbnZhciBfc2VxSGlnaCA9IG51bGw7XG52YXIgX21zZWNzID0gMDtcbmZ1bmN0aW9uIHY3KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIC8vIGluaXRpYWxpemUgYnVmZmVyIGFuZCBwb2ludGVyXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICB2YXIgYiA9IGJ1ZiB8fCBuZXcgVWludDhBcnJheSgxNik7XG5cbiAgLy8gcm5kcyBpcyBVaW50OEFycmF5KDE2KSBmaWxsZWQgd2l0aCByYW5kb20gYnl0ZXNcbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gIC8vIG1pbGxpc2Vjb25kcyBzaW5jZSB1bml4IGVwb2NoLCAxOTcwLTAxLTAxIDAwOjAwXG4gIHZhciBtc2VjcyA9IG9wdGlvbnMubXNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubXNlY3MgOiBEYXRlLm5vdygpO1xuXG4gIC8vIHNlcSBpcyB1c2VyIHByb3ZpZGVkIDMxIGJpdCBjb3VudGVyXG4gIHZhciBzZXEgPSBvcHRpb25zLnNlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5zZXEgOiBudWxsO1xuXG4gIC8vIGluaXRpYWxpemUgbG9jYWwgc2VxIGhpZ2gvbG93IHBhcnRzXG4gIHZhciBzZXFIaWdoID0gX3NlcUhpZ2g7XG4gIHZhciBzZXFMb3cgPSBfc2VxTG93O1xuXG4gIC8vIGNoZWNrIGlmIGNsb2NrIGhhcyBhZHZhbmNlZCBhbmQgdXNlciBoYXMgbm90IHByb3ZpZGVkIG1zZWNzXG4gIGlmIChtc2VjcyA+IF9tc2VjcyAmJiBvcHRpb25zLm1zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBfbXNlY3MgPSBtc2VjcztcblxuICAgIC8vIHVubGVzcyB1c2VyIHByb3ZpZGVkIHNlcSwgcmVzZXQgc2VxIHBhcnRzXG4gICAgaWYgKHNlcSAhPT0gbnVsbCkge1xuICAgICAgc2VxSGlnaCA9IG51bGw7XG4gICAgICBzZXFMb3cgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIGlmIHdlIGhhdmUgYSB1c2VyIHByb3ZpZGVkIHNlcVxuICBpZiAoc2VxICE9PSBudWxsKSB7XG4gICAgLy8gdHJpbSBwcm92aWRlZCBzZXEgdG8gMzEgYml0cyBvZiB2YWx1ZSwgYXZvaWRpbmcgb3ZlcmZsb3dcbiAgICBpZiAoc2VxID4gMHg3ZmZmZmZmZikge1xuICAgICAgc2VxID0gMHg3ZmZmZmZmZjtcbiAgICB9XG5cbiAgICAvLyBzcGxpdCBwcm92aWRlZCBzZXEgaW50byBoaWdoL2xvdyBwYXJ0c1xuICAgIHNlcUhpZ2ggPSBzZXEgPj4+IDE5ICYgMHhmZmY7XG4gICAgc2VxTG93ID0gc2VxICYgMHg3ZmZmZjtcbiAgfVxuXG4gIC8vIHJhbmRvbWx5IGluaXRpYWxpemUgc2VxXG4gIGlmIChzZXFIaWdoID09PSBudWxsIHx8IHNlcUxvdyA9PT0gbnVsbCkge1xuICAgIHNlcUhpZ2ggPSBybmRzWzZdICYgMHg3ZjtcbiAgICBzZXFIaWdoID0gc2VxSGlnaCA8PCA4IHwgcm5kc1s3XTtcbiAgICBzZXFMb3cgPSBybmRzWzhdICYgMHgzZjsgLy8gcGFkIGZvciB2YXJcbiAgICBzZXFMb3cgPSBzZXFMb3cgPDwgOCB8IHJuZHNbOV07XG4gICAgc2VxTG93ID0gc2VxTG93IDw8IDUgfCBybmRzWzEwXSA+Pj4gMztcbiAgfVxuXG4gIC8vIGluY3JlbWVudCBzZXEgaWYgd2l0aGluIG1zZWNzIHdpbmRvd1xuICBpZiAobXNlY3MgKyAxMDAwMCA+IF9tc2VjcyAmJiBzZXEgPT09IG51bGwpIHtcbiAgICBpZiAoKytzZXFMb3cgPiAweDdmZmZmKSB7XG4gICAgICBzZXFMb3cgPSAwO1xuICAgICAgaWYgKCsrc2VxSGlnaCA+IDB4ZmZmKSB7XG4gICAgICAgIHNlcUhpZ2ggPSAwO1xuXG4gICAgICAgIC8vIGluY3JlbWVudCBpbnRlcm5hbCBfbXNlY3MuIHRoaXMgYWxsb3dzIHVzIHRvIGNvbnRpbnVlIGluY3JlbWVudGluZ1xuICAgICAgICAvLyB3aGlsZSBzdGF5aW5nIG1vbm90b25pYy4gTm90ZSwgb25jZSB3ZSBoaXQgMTBrIG1pbGxpc2Vjb25kcyBiZXlvbmQgc3lzdGVtXG4gICAgICAgIC8vIGNsb2NrLCB3ZSB3aWxsIHJlc2V0IGJyZWFraW5nIG1vbm90b25pY2l0eSAoYWZ0ZXIgKDJeMzEpKjEwMDAwIGdlbmVyYXRpb25zKVxuICAgICAgICBfbXNlY3MrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gcmVzZXR0aW5nOyB3ZSBoYXZlIGFkdmFuY2VkIG1vcmUgdGhhblxuICAgIC8vIDEwayBtaWxsaXNlY29uZHMgYmV5b25kIHN5c3RlbSBjbG9ja1xuICAgIF9tc2VjcyA9IG1zZWNzO1xuICB9XG4gIF9zZXFIaWdoID0gc2VxSGlnaDtcbiAgX3NlcUxvdyA9IHNlcUxvdztcblxuICAvLyBbYnl0ZXMgMC01XSA0OCBiaXRzIG9mIGxvY2FsIHRpbWVzdGFtcFxuICBiW2krK10gPSBfbXNlY3MgLyAweDEwMDAwMDAwMDAwICYgMHhmZjtcbiAgYltpKytdID0gX21zZWNzIC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBiW2krK10gPSBfbXNlY3MgLyAweDEwMDAwMDAgJiAweGZmO1xuICBiW2krK10gPSBfbXNlY3MgLyAweDEwMDAwICYgMHhmZjtcbiAgYltpKytdID0gX21zZWNzIC8gMHgxMDAgJiAweGZmO1xuICBiW2krK10gPSBfbXNlY3MgJiAweGZmO1xuXG4gIC8vIFtieXRlIDZdIC0gc2V0IDQgYml0cyBvZiB2ZXJzaW9uICg3KSB3aXRoIGZpcnN0IDQgYml0cyBzZXFfaGlcbiAgYltpKytdID0gc2VxSGlnaCA+Pj4gNCAmIDB4MGYgfCAweDcwO1xuXG4gIC8vIFtieXRlIDddIHJlbWFpbmluZyA4IGJpdHMgb2Ygc2VxX2hpXG4gIGJbaSsrXSA9IHNlcUhpZ2ggJiAweGZmO1xuXG4gIC8vIFtieXRlIDhdIC0gdmFyaWFudCAoMiBiaXRzKSwgZmlyc3QgNiBiaXRzIHNlcV9sb3dcbiAgYltpKytdID0gc2VxTG93ID4+PiAxMyAmIDB4M2YgfCAweDgwO1xuXG4gIC8vIFtieXRlIDldIDggYml0cyBzZXFfbG93XG4gIGJbaSsrXSA9IHNlcUxvdyA+Pj4gNSAmIDB4ZmY7XG5cbiAgLy8gW2J5dGUgMTBdIHJlbWFpbmluZyA1IGJpdHMgc2VxX2xvdywgMyBiaXRzIHJhbmRvbVxuICBiW2krK10gPSBzZXFMb3cgPDwgMyAmIDB4ZmYgfCBybmRzWzEwXSAmIDB4MDc7XG5cbiAgLy8gW2J5dGVzIDExLTE1XSBhbHdheXMgcmFuZG9tXG4gIGJbaSsrXSA9IHJuZHNbMTFdO1xuICBiW2krK10gPSBybmRzWzEyXTtcbiAgYltpKytdID0gcm5kc1sxM107XG4gIGJbaSsrXSA9IHJuZHNbMTRdO1xuICBiW2krK10gPSBybmRzWzE1XTtcbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdjc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KGUpIHsgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHsgZGVmYXVsdDogZSB9OyB9XG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgX3JlZ2V4LmRlZmF1bHQudGVzdCh1dWlkKTtcbn1cbnZhciBfZGVmYXVsdCA9IGV4cG9ydHMuZGVmYXVsdCA9IHZhbGlkYXRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChlKSB7IHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7IGRlZmF1bHQ6IGUgfTsgfVxuZnVuY3Rpb24gdmVyc2lvbih1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxudmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gdmVyc2lvbjsiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3RyaW5naWZ5L3BhcnNlIGZ1bmN0aW9ucyB0aGF0IGRvbid0IG9wZXJhdGVcbiAqIHJlY3Vyc2l2ZWx5LCBzbyB0aGV5IGF2b2lkIGNhbGwgc3RhY2sgZXhjZWVkZWRcbiAqIGVycm9ycy5cbiAqL1xuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoaW5wdXQpIHtcbiAgdmFyIHF1ZXVlID0gW107XG4gIHF1ZXVlLnB1c2goe29iajogaW5wdXR9KTtcblxuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuZXh0LCBvYmosIHByZWZpeCwgdmFsLCBpLCBhcnJheVByZWZpeCwga2V5cywgaywga2V5LCB2YWx1ZSwgb2JqUHJlZml4O1xuICB3aGlsZSAoKG5leHQgPSBxdWV1ZS5wb3AoKSkpIHtcbiAgICBvYmogPSBuZXh0Lm9iajtcbiAgICBwcmVmaXggPSBuZXh0LnByZWZpeCB8fCAnJztcbiAgICB2YWwgPSBuZXh0LnZhbCB8fCAnJztcbiAgICByZXMgKz0gcHJlZml4O1xuICAgIGlmICh2YWwpIHtcbiAgICAgIHJlcyArPSB2YWw7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmVzICs9IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnID8gbnVsbCA6IEpTT04uc3RyaW5naWZ5KG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgIHJlcyArPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHF1ZXVlLnB1c2goe3ZhbDogJ10nfSk7XG4gICAgICBmb3IgKGkgPSBvYmoubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXJyYXlQcmVmaXggPSBpID09PSAwID8gJycgOiAnLCc7XG4gICAgICAgIHF1ZXVlLnB1c2goe29iajogb2JqW2ldLCBwcmVmaXg6IGFycmF5UHJlZml4fSk7XG4gICAgICB9XG4gICAgICBxdWV1ZS5wdXNoKHt2YWw6ICdbJ30pO1xuICAgIH0gZWxzZSB7IC8vIG9iamVjdFxuICAgICAga2V5cyA9IFtdO1xuICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAga2V5cy5wdXNoKGspO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWV1ZS5wdXNoKHt2YWw6ICd9J30pO1xuICAgICAgZm9yIChpID0ga2V5cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgICBvYmpQcmVmaXggPSAoaSA+IDAgPyAnLCcgOiAnJyk7XG4gICAgICAgIG9ialByZWZpeCArPSBKU09OLnN0cmluZ2lmeShrZXkpICsgJzonO1xuICAgICAgICBxdWV1ZS5wdXNoKHtvYmo6IHZhbHVlLCBwcmVmaXg6IG9ialByZWZpeH0pO1xuICAgICAgfVxuICAgICAgcXVldWUucHVzaCh7dmFsOiAneyd9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cbi8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciB0aGUgcGFyc2UgZnVuY3Rpb24uXG4vLyBUaGlzIHBvcCBmdW5jdGlvbiBpcyBiYXNpY2FsbHkgY29waWVkIGZyb21cbi8vIHBvdWNoQ29sbGF0ZS5wYXJzZUluZGV4YWJsZVN0cmluZ1xuZnVuY3Rpb24gcG9wKG9iaiwgc3RhY2ssIG1ldGFTdGFjaykge1xuICB2YXIgbGFzdE1ldGFFbGVtZW50ID0gbWV0YVN0YWNrW21ldGFTdGFjay5sZW5ndGggLSAxXTtcbiAgaWYgKG9iaiA9PT0gbGFzdE1ldGFFbGVtZW50LmVsZW1lbnQpIHtcbiAgICAvLyBwb3BwaW5nIGEgbWV0YS1lbGVtZW50LCBlLmcuIGFuIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyBhbm90aGVyIG9iamVjdFxuICAgIG1ldGFTdGFjay5wb3AoKTtcbiAgICBsYXN0TWV0YUVsZW1lbnQgPSBtZXRhU3RhY2tbbWV0YVN0YWNrLmxlbmd0aCAtIDFdO1xuICB9XG4gIHZhciBlbGVtZW50ID0gbGFzdE1ldGFFbGVtZW50LmVsZW1lbnQ7XG4gIHZhciBsYXN0RWxlbWVudEluZGV4ID0gbGFzdE1ldGFFbGVtZW50LmluZGV4O1xuICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgIGVsZW1lbnQucHVzaChvYmopO1xuICB9IGVsc2UgaWYgKGxhc3RFbGVtZW50SW5kZXggPT09IHN0YWNrLmxlbmd0aCAtIDIpIHsgLy8gb2JqIHdpdGgga2V5K3ZhbHVlXG4gICAgdmFyIGtleSA9IHN0YWNrLnBvcCgpO1xuICAgIGVsZW1lbnRba2V5XSA9IG9iajtcbiAgfSBlbHNlIHtcbiAgICBzdGFjay5wdXNoKG9iaik7IC8vIG9iaiB3aXRoIGtleSBvbmx5XG4gIH1cbn1cblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIHZhciBtZXRhU3RhY2sgPSBbXTsgLy8gc3RhY2sgZm9yIGFycmF5cyBhbmQgb2JqZWN0c1xuICB2YXIgaSA9IDA7XG4gIHZhciBjb2xsYXRpb25JbmRleCxwYXJzZWROdW0sbnVtQ2hhcjtcbiAgdmFyIHBhcnNlZFN0cmluZyxsYXN0Q2gsbnVtQ29uc2VjdXRpdmVTbGFzaGVzLGNoO1xuICB2YXIgYXJyYXlFbGVtZW50LCBvYmpFbGVtZW50O1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbGxhdGlvbkluZGV4ID0gc3RyW2krK107XG4gICAgaWYgKGNvbGxhdGlvbkluZGV4ID09PSAnfScgfHxcbiAgICAgICAgY29sbGF0aW9uSW5kZXggPT09ICddJyB8fFxuICAgICAgICB0eXBlb2YgY29sbGF0aW9uSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBzdGFjay5wb3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBvcChzdGFjay5wb3AoKSwgc3RhY2ssIG1ldGFTdGFjayk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2l0Y2ggKGNvbGxhdGlvbkluZGV4KSB7XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ1xcdCc6XG4gICAgICBjYXNlICdcXG4nOlxuICAgICAgY2FzZSAnOic6XG4gICAgICBjYXNlICcsJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICduJzpcbiAgICAgICAgaSArPSAzOyAvLyAndWxsJ1xuICAgICAgICBwb3AobnVsbCwgc3RhY2ssIG1ldGFTdGFjayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndCc6XG4gICAgICAgIGkgKz0gMzsgLy8gJ3J1ZSdcbiAgICAgICAgcG9wKHRydWUsIHN0YWNrLCBtZXRhU3RhY2spO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2YnOlxuICAgICAgICBpICs9IDQ7IC8vICdhbHNlJ1xuICAgICAgICBwb3AoZmFsc2UsIHN0YWNrLCBtZXRhU3RhY2spO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJzAnOlxuICAgICAgY2FzZSAnMSc6XG4gICAgICBjYXNlICcyJzpcbiAgICAgIGNhc2UgJzMnOlxuICAgICAgY2FzZSAnNCc6XG4gICAgICBjYXNlICc1JzpcbiAgICAgIGNhc2UgJzYnOlxuICAgICAgY2FzZSAnNyc6XG4gICAgICBjYXNlICc4JzpcbiAgICAgIGNhc2UgJzknOlxuICAgICAgY2FzZSAnLSc6XG4gICAgICAgIHBhcnNlZE51bSA9ICcnO1xuICAgICAgICBpLS07XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgbnVtQ2hhciA9IHN0cltpKytdO1xuICAgICAgICAgIGlmICgvW1xcZFxcLlxcLWVcXCtdLy50ZXN0KG51bUNoYXIpKSB7XG4gICAgICAgICAgICBwYXJzZWROdW0gKz0gbnVtQ2hhcjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvcChwYXJzZUZsb2F0KHBhcnNlZE51bSksIHN0YWNrLCBtZXRhU3RhY2spO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgcGFyc2VkU3RyaW5nID0gJyc7XG4gICAgICAgIGxhc3RDaCA9IHZvaWQgMDtcbiAgICAgICAgbnVtQ29uc2VjdXRpdmVTbGFzaGVzID0gMDtcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBjaCA9IHN0cltpKytdO1xuICAgICAgICAgIGlmIChjaCAhPT0gJ1wiJyB8fCAobGFzdENoID09PSAnXFxcXCcgJiZcbiAgICAgICAgICAgICAgbnVtQ29uc2VjdXRpdmVTbGFzaGVzICUgMiA9PT0gMSkpIHtcbiAgICAgICAgICAgIHBhcnNlZFN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIGxhc3RDaCA9IGNoO1xuICAgICAgICAgICAgaWYgKGxhc3RDaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgIG51bUNvbnNlY3V0aXZlU2xhc2hlcysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtQ29uc2VjdXRpdmVTbGFzaGVzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvcChKU09OLnBhcnNlKCdcIicgKyBwYXJzZWRTdHJpbmcgKyAnXCInKSwgc3RhY2ssIG1ldGFTdGFjayk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIGFycmF5RWxlbWVudCA9IHsgZWxlbWVudDogW10sIGluZGV4OiBzdGFjay5sZW5ndGggfTtcbiAgICAgICAgc3RhY2sucHVzaChhcnJheUVsZW1lbnQuZWxlbWVudCk7XG4gICAgICAgIG1ldGFTdGFjay5wdXNoKGFycmF5RWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneyc6XG4gICAgICAgIG9iakVsZW1lbnQgPSB7IGVsZW1lbnQ6IHt9LCBpbmRleDogc3RhY2subGVuZ3RoIH07XG4gICAgICAgIHN0YWNrLnB1c2gob2JqRWxlbWVudC5lbGVtZW50KTtcbiAgICAgICAgbWV0YVN0YWNrLnB1c2gob2JqRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICd1bmV4cGVjdGVkbHkgcmVhY2hlZCBlbmQgb2YgaW5wdXQ6ICcgKyBjb2xsYXRpb25JbmRleCk7XG4gICAgfVxuICB9XG59O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG4vKiFcbiAqIFBpa2FkYXlcbiAqXG4gKiBDb3B5cmlnaHQgwqkgMjAxNCBEYXZpZCBCdXNoZWxsIHwgQlNEICYgTUlUIGxpY2Vuc2UgfCBodHRwczovL2dpdGh1Yi5jb20vUGlrYWRheS9QaWthZGF5XG4gKi9cbmNvbnN0IGdldFdpbmRvdyA9ICgpID0+IHdpbmRvdztcbmNvbnN0IGdldERvY3VtZW50ID0gKCkgPT4gd2luZG93LmRvY3VtZW50O1xuY29uc3Qgc3RvID0gKGZuLCBkZWxheSkgPT4gd2luZG93LnNldFRpbWVvdXQoZm4sIGRlbGF5KTtcbmNvbnN0IGFkZEV2ZW50ID0gZnVuY3Rpb24oZWwsIGUsIGNhbGxiYWNrLCBjYXB0dXJlKSB7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoZSwgY2FsbGJhY2ssICEhY2FwdHVyZSk7XG59O1xuY29uc3QgcmVtb3ZlRXZlbnQgPSBmdW5jdGlvbihlbCwgZSwgY2FsbGJhY2ssIGNhcHR1cmUpIHtcbiAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBjYWxsYmFjaywgISFjYXB0dXJlKTtcbn07XG5jb25zdCB0cmltID0gZnVuY3Rpb24oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgXCJcIik7XG59O1xuY29uc3QgaGFzQ2xhc3MgPSBmdW5jdGlvbihlbCwgY24pIHtcbiAgcmV0dXJuIChcIiBcIiArIGVsLmNsYXNzTmFtZSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY24gKyBcIiBcIikgIT09IC0xO1xufTtcbmNvbnN0IGFkZENsYXNzID0gZnVuY3Rpb24oZWwsIGNuKSB7XG4gIGlmICghaGFzQ2xhc3MoZWwsIGNuKSkge1xuICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSA9PT0gXCJcIiA/IGNuIDogZWwuY2xhc3NOYW1lICsgXCIgXCIgKyBjbjtcbiAgfVxufTtcbmNvbnN0IHJlbW92ZUNsYXNzID0gZnVuY3Rpb24oZWwsIGNuKSB7XG4gIGVsLmNsYXNzTmFtZSA9IHRyaW0oKFwiIFwiICsgZWwuY2xhc3NOYW1lICsgXCIgXCIpLnJlcGxhY2UoXCIgXCIgKyBjbiArIFwiIFwiLCBcIiBcIikpO1xufTtcbmNvbnN0IGlzQXJyYXkgPSBmdW5jdGlvbihvYmopIHtcbiAgcmV0dXJuIC9BcnJheS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSk7XG59O1xuY29uc3QgaXNEYXRlID0gZnVuY3Rpb24ob2JqKSB7XG4gIHJldHVybiAvRGF0ZS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgJiYgIWlzTmFOKG9iai5nZXRUaW1lKCkpO1xufTtcbmNvbnN0IGlzV2Vla2VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgbGV0IGRheSA9IGRhdGUuZ2V0RGF5KCk7XG4gIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2O1xufTtcbmNvbnN0IGlzTGVhcFllYXIgPSBmdW5jdGlvbih5ZWFyKSB7XG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDA7XG59O1xuY29uc3QgZ2V0RGF5c0luTW9udGggPSBmdW5jdGlvbih5ZWFyLCBtb250aCkge1xuICByZXR1cm4gWzMxLCBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXTtcbn07XG5jb25zdCBzZXRUb1N0YXJ0T2ZEYXkgPSBmdW5jdGlvbihkYXRlKSB7XG4gIGlmIChpc0RhdGUoZGF0ZSkpIHtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICB9XG59O1xuY29uc3QgY29tcGFyZURhdGVzID0gZnVuY3Rpb24oYSwgYikge1xuICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xufTtcbmNvbnN0IGV4dGVuZCA9IGZ1bmN0aW9uKHRvLCBmcm9tLCBvdmVyd3JpdGUpIHtcbiAgbGV0IHByb3AsIGhhc1Byb3A7XG4gIGZvciAocHJvcCBpbiBmcm9tKSB7XG4gICAgaGFzUHJvcCA9IHRvW3Byb3BdICE9PSB2b2lkIDA7XG4gICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIGZyb21bcHJvcF0gPT09IFwib2JqZWN0XCIgJiYgZnJvbVtwcm9wXSAhPT0gbnVsbCAmJiBmcm9tW3Byb3BdLm5vZGVOYW1lID09PSB2b2lkIDApIHtcbiAgICAgIGlmIChpc0RhdGUoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgIHRvW3Byb3BdID0gbmV3IERhdGUoZnJvbVtwcm9wXS5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZnJvbVtwcm9wXSkpIHtcbiAgICAgICAgaWYgKG92ZXJ3cml0ZSkge1xuICAgICAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXS5zbGljZSgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9bcHJvcF0gPSBleHRlbmQoe30sIGZyb21bcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvdmVyd3JpdGUgfHwgIWhhc1Byb3ApIHtcbiAgICAgIHRvW3Byb3BdID0gZnJvbVtwcm9wXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufTtcbmNvbnN0IGZpcmVFdmVudCA9IGZ1bmN0aW9uKGVsLCBldmVudE5hbWUsIGRhdGEpIHtcbiAgbGV0IGV2ID0gZ2V0RG9jdW1lbnQoKS5jcmVhdGVFdmVudChcIkhUTUxFdmVudHNcIik7XG4gIGV2LmluaXRFdmVudChldmVudE5hbWUsIHRydWUsIGZhbHNlKTtcbiAgZXYgPSBleHRlbmQoZXYsIGRhdGEpO1xuICBlbC5kaXNwYXRjaEV2ZW50KGV2KTtcbn07XG5jb25zdCBhZGp1c3RDYWxlbmRhciA9IGZ1bmN0aW9uKGNhbGVuZGFyKSB7XG4gIGlmIChjYWxlbmRhci5tb250aCA8IDApIHtcbiAgICBjYWxlbmRhci55ZWFyIC09IE1hdGguY2VpbChNYXRoLmFicyhjYWxlbmRhci5tb250aCkgLyAxMik7XG4gICAgY2FsZW5kYXIubW9udGggKz0gMTI7XG4gIH1cbiAgaWYgKGNhbGVuZGFyLm1vbnRoID4gMTEpIHtcbiAgICBjYWxlbmRhci55ZWFyICs9IE1hdGguZmxvb3IoTWF0aC5hYnMoY2FsZW5kYXIubW9udGgpIC8gMTIpO1xuICAgIGNhbGVuZGFyLm1vbnRoIC09IDEyO1xuICB9XG4gIHJldHVybiBjYWxlbmRhcjtcbn07XG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgLy8gYmluZCB0aGUgcGlja2VyIHRvIGEgZm9ybSBmaWVsZFxuICBmaWVsZDogbnVsbCxcbiAgLy8gYXV0b21hdGljYWxseSBzaG93L2hpZGUgdGhlIHBpY2tlciBvbiBgZmllbGRgIGZvY3VzIChkZWZhdWx0IGB0cnVlYCBpZiBgZmllbGRgIGlzIHNldClcbiAgYm91bmQ6IHZvaWQgMCxcbiAgLy8gZGF0YS1hdHRyaWJ1dGUgb24gdGhlIGlucHV0IGZpZWxkIHdpdGggYW4gYXJpYSBhc3Npc3RhbmNlIHRleHQgKG9ubHkgYXBwbGllZCB3aGVuIGBib3VuZGAgaXMgc2V0KVxuICBhcmlhTGFiZWw6IFwiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIHBpY2sgYSBkYXRlXCIsXG4gIC8vIHBvc2l0aW9uIG9mIHRoZSBkYXRlcGlja2VyLCByZWxhdGl2ZSB0byB0aGUgZmllbGQgKGRlZmF1bHQgdG8gYm90dG9tICYgbGVmdClcbiAgLy8gKCdib3R0b20nICYgJ2xlZnQnIGtleXdvcmRzIGFyZSBub3QgdXNlZCwgJ3RvcCcgJiAncmlnaHQnIGFyZSBtb2RpZmllciBvbiB0aGUgYm90dG9tL2xlZnQgcG9zaXRpb24pXG4gIHBvc2l0aW9uOiBcImJvdHRvbSBsZWZ0XCIsXG4gIC8vIGF1dG9tYXRpY2FsbHkgZml0IGluIHRoZSB2aWV3cG9ydCBldmVuIGlmIGl0IG1lYW5zIHJlcG9zaXRpb25pbmcgZnJvbSB0aGUgcG9zaXRpb24gb3B0aW9uXG4gIHJlcG9zaXRpb246IHRydWUsXG4gIC8vIHRoZSBkZWZhdWx0IG91dHB1dCBmb3JtYXQgZm9yIGAudG9TdHJpbmcoKWAgYW5kIGBmaWVsZGAgdmFsdWVcbiAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgLy8gdGhlIHRvU3RyaW5nIGZ1bmN0aW9uIHdoaWNoIGdldHMgcGFzc2VkIGEgY3VycmVudCBkYXRlIG9iamVjdCBhbmQgZm9ybWF0XG4gIC8vIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gIHRvU3RyaW5nOiBudWxsLFxuICAvLyB1c2VkIHRvIGNyZWF0ZSBkYXRlIG9iamVjdCBmcm9tIGN1cnJlbnQgaW5wdXQgc3RyaW5nXG4gIHBhcnNlOiBudWxsLFxuICAvLyB0aGUgaW5pdGlhbCBkYXRlIHRvIHZpZXcgd2hlbiBmaXJzdCBvcGVuZWRcbiAgZGVmYXVsdERhdGU6IG51bGwsXG4gIC8vIG1ha2UgdGhlIGBkZWZhdWx0RGF0ZWAgdGhlIGluaXRpYWwgc2VsZWN0ZWQgdmFsdWVcbiAgc2V0RGVmYXVsdERhdGU6IGZhbHNlLFxuICAvLyBmaXJzdCBkYXkgb2Ygd2VlayAoMDogU3VuZGF5LCAxOiBNb25kYXkgZXRjKVxuICBmaXJzdERheTogMCxcbiAgLy8gbWluaW11bSBudW1iZXIgb2YgZGF5cyBpbiB0aGUgd2VlayB0aGF0IGdldHMgd2VlayBudW1iZXIgb25lXG4gIC8vIGRlZmF1bHQgSVNPIDg2MDEsIHdlZWsgMDEgaXMgdGhlIHdlZWsgd2l0aCB0aGUgZmlyc3QgVGh1cnNkYXkgKDQpXG4gIGZpcnN0V2Vla09mWWVhck1pbkRheXM6IDQsXG4gIC8vIHRoZSBkZWZhdWx0IGZsYWcgZm9yIG1vbWVudCdzIHN0cmljdCBkYXRlIHBhcnNpbmdcbiAgZm9ybWF0U3RyaWN0OiBmYWxzZSxcbiAgLy8gdGhlIG1pbmltdW0vZWFybGllc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICBtaW5EYXRlOiBudWxsLFxuICAvLyB0aGUgbWF4aW11bS9sYXRlc3QgZGF0ZSB0aGF0IGNhbiBiZSBzZWxlY3RlZFxuICBtYXhEYXRlOiBudWxsLFxuICAvLyBudW1iZXIgb2YgeWVhcnMgZWl0aGVyIHNpZGUsIG9yIGFycmF5IG9mIHVwcGVyL2xvd2VyIHJhbmdlXG4gIHllYXJSYW5nZTogMTAsXG4gIC8vIHNob3cgd2VlayBudW1iZXJzIGF0IGhlYWQgb2Ygcm93XG4gIHNob3dXZWVrTnVtYmVyOiBmYWxzZSxcbiAgLy8gV2VlayBwaWNrZXIgbW9kZVxuICBwaWNrV2hvbGVXZWVrOiBmYWxzZSxcbiAgLy8gdXNlZCBpbnRlcm5hbGx5IChkb24ndCBjb25maWcgb3V0c2lkZSlcbiAgbWluWWVhcjogMCxcbiAgbWF4WWVhcjogOTk5OSxcbiAgbWluTW9udGg6IHZvaWQgMCxcbiAgbWF4TW9udGg6IHZvaWQgMCxcbiAgc3RhcnRSYW5nZTogbnVsbCxcbiAgZW5kUmFuZ2U6IG51bGwsXG4gIGlzUlRMOiBmYWxzZSxcbiAgLy8gQWRkaXRpb25hbCB0ZXh0IHRvIGFwcGVuZCB0byB0aGUgeWVhciBpbiB0aGUgY2FsZW5kYXIgdGl0bGVcbiAgeWVhclN1ZmZpeDogXCJcIixcbiAgLy8gUmVuZGVyIHRoZSBtb250aCBhZnRlciB5ZWFyIGluIHRoZSBjYWxlbmRhciB0aXRsZVxuICBzaG93TW9udGhBZnRlclllYXI6IGZhbHNlLFxuICAvLyBSZW5kZXIgZGF5cyBvZiB0aGUgY2FsZW5kYXIgZ3JpZCB0aGF0IGZhbGwgaW4gdGhlIG5leHQgb3IgcHJldmlvdXMgbW9udGhcbiAgc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczogZmFsc2UsXG4gIC8vIEFsbG93cyB1c2VyIHRvIHNlbGVjdCBkYXlzIHRoYXQgZmFsbCBpbiB0aGUgbmV4dCBvciBwcmV2aW91cyBtb250aFxuICBlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IGZhbHNlLFxuICAvLyBob3cgbWFueSBtb250aHMgYXJlIHZpc2libGVcbiAgbnVtYmVyT2ZNb250aHM6IDEsXG4gIC8vIHdoZW4gbnVtYmVyT2ZNb250aHMgaXMgdXNlZCwgdGhpcyB3aWxsIGhlbHAgeW91IHRvIGNob29zZSB3aGVyZSB0aGUgbWFpbiBjYWxlbmRhciB3aWxsIGJlIChkZWZhdWx0IGBsZWZ0YCwgY2FuIGJlIHNldCB0byBgcmlnaHRgKVxuICAvLyBvbmx5IHVzZWQgZm9yIHRoZSBmaXJzdCBkaXNwbGF5IG9yIHdoZW4gYSBzZWxlY3RlZCBkYXRlIGlzIG5vdCB2aXNpYmxlXG4gIG1haW5DYWxlbmRhcjogXCJsZWZ0XCIsXG4gIC8vIFNwZWNpZnkgYSBET00gZWxlbWVudCB0byByZW5kZXIgdGhlIGNhbGVuZGFyIGluXG4gIGNvbnRhaW5lcjogdm9pZCAwLFxuICAvLyBCbHVyIGZpZWxkIHdoZW4gZGF0ZSBpcyBzZWxlY3RlZFxuICBibHVyRmllbGRPblNlbGVjdDogdHJ1ZSxcbiAgLy8gaW50ZXJuYXRpb25hbGl6YXRpb25cbiAgaTE4bjoge1xuICAgIHByZXZpb3VzTW9udGg6IFwiUHJldmlvdXMgTW9udGhcIixcbiAgICBuZXh0TW9udGg6IFwiTmV4dCBNb250aFwiLFxuICAgIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gICAgd2Vla2RheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICAgIHdlZWtkYXlzU2hvcnQ6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXVxuICB9LFxuICAvLyBUaGVtZSBDbGFzc25hbWVcbiAgdGhlbWU6IG51bGwsXG4gIC8vIGV2ZW50cyBhcnJheVxuICBldmVudHM6IFtdLFxuICAvLyBjYWxsYmFjayBmdW5jdGlvblxuICBvblNlbGVjdDogbnVsbCxcbiAgb25PcGVuOiBudWxsLFxuICBvbkNsb3NlOiBudWxsLFxuICBvbkRyYXc6IG51bGwsXG4gIC8vIEVuYWJsZSBrZXlib2FyZCBpbnB1dFxuICBrZXlib2FyZElucHV0OiB0cnVlXG59O1xuY29uc3QgcmVuZGVyRGF5TmFtZSA9IGZ1bmN0aW9uKG9wdHMsIGRheSwgYWJicikge1xuICBkYXkgKz0gb3B0cy5maXJzdERheTtcbiAgd2hpbGUgKGRheSA+PSA3KSB7XG4gICAgZGF5IC09IDc7XG4gIH1cbiAgcmV0dXJuIGFiYnIgPyBvcHRzLmkxOG4ud2Vla2RheXNTaG9ydFtkYXldIDogb3B0cy5pMThuLndlZWtkYXlzW2RheV07XG59O1xuY29uc3QgcmVuZGVyRGF5ID0gZnVuY3Rpb24ob3B0cykge1xuICBsZXQgYXJyID0gW107XG4gIGxldCBhcmlhU2VsZWN0ZWQgPSBcImZhbHNlXCI7XG4gIGlmIChvcHRzLmlzRW1wdHkpIHtcbiAgICBpZiAob3B0cy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKSB7XG4gICAgICBhcnIucHVzaChcImlzLW91dHNpZGUtY3VycmVudC1tb250aFwiKTtcbiAgICAgIGlmICghb3B0cy5lbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpIHtcbiAgICAgICAgYXJyLnB1c2goXCJpcy1zZWxlY3Rpb24tZGlzYWJsZWRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnPHRkIGNsYXNzPVwiaXMtZW1wdHlcIj48L3RkPic7XG4gICAgfVxuICB9XG4gIGlmIChvcHRzLmlzRGlzYWJsZWQpIHtcbiAgICBhcnIucHVzaChcImlzLWRpc2FibGVkXCIpO1xuICB9XG4gIGlmIChvcHRzLmlzVG9kYXkpIHtcbiAgICBhcnIucHVzaChcImlzLXRvZGF5XCIpO1xuICB9XG4gIGlmIChvcHRzLmlzU2VsZWN0ZWQpIHtcbiAgICBhcnIucHVzaChcImlzLXNlbGVjdGVkXCIpO1xuICAgIGFyaWFTZWxlY3RlZCA9IFwidHJ1ZVwiO1xuICB9XG4gIGlmIChvcHRzLmhhc0V2ZW50KSB7XG4gICAgYXJyLnB1c2goXCJoYXMtZXZlbnRcIik7XG4gIH1cbiAgaWYgKG9wdHMuaXNJblJhbmdlKSB7XG4gICAgYXJyLnB1c2goXCJpcy1pbnJhbmdlXCIpO1xuICB9XG4gIGlmIChvcHRzLmlzU3RhcnRSYW5nZSkge1xuICAgIGFyci5wdXNoKFwiaXMtc3RhcnRyYW5nZVwiKTtcbiAgfVxuICBpZiAob3B0cy5pc0VuZFJhbmdlKSB7XG4gICAgYXJyLnB1c2goXCJpcy1lbmRyYW5nZVwiKTtcbiAgfVxuICByZXR1cm4gJzx0ZCBkYXRhLWRheT1cIicgKyBvcHRzLmRheSArICdcIiBjbGFzcz1cIicgKyBhcnIuam9pbihcIiBcIikgKyAnXCIgYXJpYS1zZWxlY3RlZD1cIicgKyBhcmlhU2VsZWN0ZWQgKyAnXCI+PGJ1dHRvbiBjbGFzcz1cInBpa2EtYnV0dG9uIHBpa2EtZGF5XCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtcGlrYS15ZWFyPVwiJyArIG9wdHMueWVhciArICdcIiBkYXRhLXBpa2EtbW9udGg9XCInICsgb3B0cy5tb250aCArICdcIiBkYXRhLXBpa2EtZGF5PVwiJyArIG9wdHMuZGF5ICsgJ1wiPicgKyBvcHRzLmRheSArIFwiPC9idXR0b24+PC90ZD5cIjtcbn07XG5jb25zdCBpc29XZWVrID0gZnVuY3Rpb24oZGF0ZSwgZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykge1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICBsZXQgeWVhckRheSA9IGRhdGUuZ2V0RGF0ZSgpLCB3ZWVrRGF5ID0gZGF0ZS5nZXREYXkoKSwgZGF5SW5GaXJzdFdlZWsgPSBmaXJzdFdlZWtPZlllYXJNaW5EYXlzLCBkYXlTaGlmdCA9IGRheUluRmlyc3RXZWVrIC0gMSwgZGF5c1BlcldlZWsgPSA3LCBwcmV2V2Vla0RheSA9IGZ1bmN0aW9uKGRheSkge1xuICAgIHJldHVybiAoZGF5ICsgZGF5c1BlcldlZWsgLSAxKSAlIGRheXNQZXJXZWVrO1xuICB9O1xuICBkYXRlLnNldERhdGUoeWVhckRheSArIGRheVNoaWZ0IC0gcHJldldlZWtEYXkod2Vla0RheSkpO1xuICBsZXQgamFuNHRoID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCBkYXlJbkZpcnN0V2VlayksIG1zUGVyRGF5ID0gMjQgKiA2MCAqIDYwICogMWUzLCBkYXlzQmV0d2VlbiA9IChkYXRlLmdldFRpbWUoKSAtIGphbjR0aC5nZXRUaW1lKCkpIC8gbXNQZXJEYXksIHdlZWtOdW0gPSAxICsgTWF0aC5yb3VuZCgoZGF5c0JldHdlZW4gLSBkYXlTaGlmdCArIHByZXZXZWVrRGF5KGphbjR0aC5nZXREYXkoKSkpIC8gZGF5c1BlcldlZWspO1xuICByZXR1cm4gd2Vla051bTtcbn07XG5jb25zdCByZW5kZXJXZWVrID0gZnVuY3Rpb24ocGlrYWRheSwgZCwgbSwgeSwgZmlyc3RXZWVrT2ZZZWFyTWluRGF5cykge1xuICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQpLCB3ZWVrID0gcGlrYWRheS5oYXNNb21lbnQgPyBwaWthZGF5Lm1vbWVudChkYXRlKS5pc29XZWVrKCkgOiBpc29XZWVrKGRhdGUsIGZpcnN0V2Vla09mWWVhck1pbkRheXMpO1xuICByZXR1cm4gJzx0ZCBjbGFzcz1cInBpa2Etd2Vla1wiPicgKyB3ZWVrICsgXCI8L3RkPlwiO1xufTtcbmNvbnN0IHJlbmRlclJvdyA9IGZ1bmN0aW9uKGRheXMsIGlzUlRMLCBwaWNrV2hvbGVXZWVrLCBpc1Jvd1NlbGVjdGVkKSB7XG4gIHJldHVybiAnPHRyIGNsYXNzPVwicGlrYS1yb3cnICsgKHBpY2tXaG9sZVdlZWsgPyBcIiBwaWNrLXdob2xlLXdlZWtcIiA6IFwiXCIpICsgKGlzUm93U2VsZWN0ZWQgPyBcIiBpcy1zZWxlY3RlZFwiIDogXCJcIikgKyAnXCI+JyArIChpc1JUTCA/IGRheXMucmV2ZXJzZSgpIDogZGF5cykuam9pbihcIlwiKSArIFwiPC90cj5cIjtcbn07XG5jb25zdCByZW5kZXJCb2R5ID0gZnVuY3Rpb24ocm93cykge1xuICByZXR1cm4gXCI8dGJvZHk+XCIgKyByb3dzLmpvaW4oXCJcIikgKyBcIjwvdGJvZHk+XCI7XG59O1xuY29uc3QgcmVuZGVySGVhZCA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgbGV0IGksIGFyciA9IFtdO1xuICBpZiAob3B0cy5zaG93V2Vla051bWJlcikge1xuICAgIGFyci5wdXNoKFwiPHRoPjwvdGg+XCIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICBhcnIucHVzaCgnPHRoIHNjb3BlPVwiY29sXCI+PGFiYnIgdGl0bGU9XCInICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpKSArICdcIj4nICsgcmVuZGVyRGF5TmFtZShvcHRzLCBpLCB0cnVlKSArIFwiPC9hYmJyPjwvdGg+XCIpO1xuICB9XG4gIHJldHVybiBcIjx0aGVhZD48dHI+XCIgKyAob3B0cy5pc1JUTCA/IGFyci5yZXZlcnNlKCkgOiBhcnIpLmpvaW4oXCJcIikgKyBcIjwvdHI+PC90aGVhZD5cIjtcbn07XG5jb25zdCByZW5kZXJUaXRsZSA9IGZ1bmN0aW9uKGluc3RhbmNlLCBjLCB5ZWFyLCBtb250aCwgcmVmWWVhciwgcmFuZElkKSB7XG4gIGxldCBpLCBqLCBhcnIsIG9wdHMgPSBpbnN0YW5jZS5fbywgaXNNaW5ZZWFyID0geWVhciA9PT0gb3B0cy5taW5ZZWFyLCBpc01heFllYXIgPSB5ZWFyID09PSBvcHRzLm1heFllYXIsIGh0bWwgPSAnPGRpdiBpZD1cIicgKyByYW5kSWQgKyAnXCIgY2xhc3M9XCJwaWthLXRpdGxlXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj4nLCBtb250aEh0bWwsIHllYXJIdG1sLCBwcmV2ID0gdHJ1ZSwgbmV4dCA9IHRydWU7XG4gIGZvciAoYXJyID0gW10sIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGFyci5wdXNoKCc8b3B0aW9uIHZhbHVlPVwiJyArICh5ZWFyID09PSByZWZZZWFyID8gaSAtIGMgOiAxMiArIGkgLSBjKSArICdcIicgKyAoaSA9PT0gbW9udGggPyAnIHNlbGVjdGVkPVwic2VsZWN0ZWRcIicgOiBcIlwiKSArIChpc01pblllYXIgJiYgaSA8IG9wdHMubWluTW9udGggfHwgaXNNYXhZZWFyICYmIGkgPiBvcHRzLm1heE1vbnRoID8gJyBkaXNhYmxlZD1cImRpc2FibGVkXCInIDogXCJcIikgKyBcIj5cIiArIG9wdHMuaTE4bi5tb250aHNbaV0gKyBcIjwvb3B0aW9uPlwiKTtcbiAgfVxuICBtb250aEh0bWwgPSAnPGRpdiBjbGFzcz1cInBpa2EtbGFiZWxcIj4nICsgb3B0cy5pMThuLm1vbnRoc1ttb250aF0gKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LW1vbnRoXCIgdGFiaW5kZXg9XCItMVwiPicgKyBhcnIuam9pbihcIlwiKSArIFwiPC9zZWxlY3Q+PC9kaXY+XCI7XG4gIGlmIChpc0FycmF5KG9wdHMueWVhclJhbmdlKSkge1xuICAgIGkgPSBvcHRzLnllYXJSYW5nZVswXTtcbiAgICBqID0gb3B0cy55ZWFyUmFuZ2VbMV0gKyAxO1xuICB9IGVsc2Uge1xuICAgIGkgPSB5ZWFyIC0gb3B0cy55ZWFyUmFuZ2U7XG4gICAgaiA9IDEgKyB5ZWFyICsgb3B0cy55ZWFyUmFuZ2U7XG4gIH1cbiAgZm9yIChhcnIgPSBbXTsgaSA8IGogJiYgaSA8PSBvcHRzLm1heFllYXI7IGkrKykge1xuICAgIGlmIChpID49IG9wdHMubWluWWVhcikge1xuICAgICAgYXJyLnB1c2goJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIicgKyAoaSA9PT0geWVhciA/ICcgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiJyA6IFwiXCIpICsgXCI+XCIgKyBpICsgXCI8L29wdGlvbj5cIik7XG4gICAgfVxuICB9XG4gIHllYXJIdG1sID0gJzxkaXYgY2xhc3M9XCJwaWthLWxhYmVsXCI+JyArIHllYXIgKyBvcHRzLnllYXJTdWZmaXggKyAnPHNlbGVjdCBjbGFzcz1cInBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXJcIiB0YWJpbmRleD1cIi0xXCI+JyArIGFyci5qb2luKFwiXCIpICsgXCI8L3NlbGVjdD48L2Rpdj5cIjtcbiAgaWYgKG9wdHMuc2hvd01vbnRoQWZ0ZXJZZWFyKSB7XG4gICAgaHRtbCArPSB5ZWFySHRtbCArIG1vbnRoSHRtbDtcbiAgfSBlbHNlIHtcbiAgICBodG1sICs9IG1vbnRoSHRtbCArIHllYXJIdG1sO1xuICB9XG4gIGlmIChpc01pblllYXIgJiYgKG1vbnRoID09PSAwIHx8IG9wdHMubWluTW9udGggPj0gbW9udGgpKSB7XG4gICAgcHJldiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc01heFllYXIgJiYgKG1vbnRoID09PSAxMSB8fCBvcHRzLm1heE1vbnRoIDw9IG1vbnRoKSkge1xuICAgIG5leHQgPSBmYWxzZTtcbiAgfVxuICBpZiAoYyA9PT0gMCkge1xuICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLXByZXYnICsgKHByZXYgPyBcIlwiIDogXCIgaXMtZGlzYWJsZWRcIikgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ucHJldmlvdXNNb250aCArIFwiPC9idXR0b24+XCI7XG4gIH1cbiAgaWYgKGMgPT09IGluc3RhbmNlLl9vLm51bWJlck9mTW9udGhzIC0gMSkge1xuICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9XCJwaWthLW5leHQnICsgKG5leHQgPyBcIlwiIDogXCIgaXMtZGlzYWJsZWRcIikgKyAnXCIgdHlwZT1cImJ1dHRvblwiPicgKyBvcHRzLmkxOG4ubmV4dE1vbnRoICsgXCI8L2J1dHRvbj5cIjtcbiAgfVxuICByZXR1cm4gaHRtbCArPSBcIjwvZGl2PlwiO1xufTtcbmNvbnN0IHJlbmRlclRhYmxlID0gZnVuY3Rpb24ob3B0cywgZGF0YSwgcmFuZElkKSB7XG4gIHJldHVybiAnPHRhYmxlIGNlbGxwYWRkaW5nPVwiMFwiIGNlbGxzcGFjaW5nPVwiMFwiIGNsYXNzPVwicGlrYS10YWJsZVwiIHJvbGU9XCJncmlkXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJyArIHJhbmRJZCArICdcIj4nICsgcmVuZGVySGVhZChvcHRzKSArIHJlbmRlckJvZHkoZGF0YSkgKyBcIjwvdGFibGU+XCI7XG59O1xuZnVuY3Rpb24gUGlrYWRheShvcHRpb25zKSB7XG4gIGxldCBzZWxmID0gdGhpcywgb3B0cyA9IHNlbGYuY29uZmlnKG9wdGlvbnMpO1xuICBzZWxmLl9vbk1vdXNlRG93biA9IGZ1bmN0aW9uKGUpIHtcbiAgICBpZiAoIXNlbGYuX3YpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZSA9IGUgfHwgZ2V0V2luZG93KCkuZXZlbnQ7XG4gICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWhhc0NsYXNzKHRhcmdldCwgXCJpcy1kaXNhYmxlZFwiKSkge1xuICAgICAgaWYgKGhhc0NsYXNzKHRhcmdldCwgXCJwaWthLWJ1dHRvblwiKSAmJiAhaGFzQ2xhc3ModGFyZ2V0LCBcImlzLWVtcHR5XCIpICYmICFoYXNDbGFzcyh0YXJnZXQucGFyZW50Tm9kZSwgXCJpcy1kaXNhYmxlZFwiKSkge1xuICAgICAgICBzZWxmLnNldERhdGUoXG4gICAgICAgICAgbmV3IERhdGUoXG4gICAgICAgICAgICB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1waWthLXllYXJcIiksXG4gICAgICAgICAgICB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1waWthLW1vbnRoXCIpLFxuICAgICAgICAgICAgdGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtcGlrYS1kYXlcIilcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICAgICAgc3RvKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgc2VsZi5oaWRlKCk7XG4gICAgICAgICAgICBpZiAob3B0cy5ibHVyRmllbGRPblNlbGVjdCAmJiBvcHRzLmZpZWxkKSB7XG4gICAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGFzQ2xhc3ModGFyZ2V0LCBcInBpa2EtcHJldlwiKSkge1xuICAgICAgICBzZWxmLnByZXZNb250aCgpO1xuICAgICAgfSBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsIFwicGlrYS1uZXh0XCIpKSB7XG4gICAgICAgIHNlbGYubmV4dE1vbnRoKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaGFzQ2xhc3ModGFyZ2V0LCBcInBpa2Etc2VsZWN0XCIpKSB7XG4gICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZi5fYyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBzZWxmLl9vbkNoYW5nZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICBlID0gZSB8fCBnZXRXaW5kb3coKS5ldmVudDtcbiAgICBsZXQgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoYXNDbGFzcyh0YXJnZXQsIFwicGlrYS1zZWxlY3QtbW9udGhcIikpIHtcbiAgICAgIHNlbGYuZ290b01vbnRoKHRhcmdldC52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChoYXNDbGFzcyh0YXJnZXQsIFwicGlrYS1zZWxlY3QteWVhclwiKSkge1xuICAgICAgc2VsZi5nb3RvWWVhcih0YXJnZXQudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgc2VsZi5fb25LZXlDaGFuZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgZSA9IGUgfHwgZ2V0V2luZG93KCkuZXZlbnQ7XG4gICAgaWYgKHNlbGYuaXNWaXNpYmxlKCkpIHtcbiAgICAgIHN3aXRjaCAoZS5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2UgMTM6XG4gICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgaWYgKG9wdHMuZmllbGQpIHtcbiAgICAgICAgICAgIG9wdHMuZmllbGQuYmx1cigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICBzZWxmLmFkanVzdERhdGUoXCJzdWJ0cmFjdFwiLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICBzZWxmLmFkanVzdERhdGUoXCJzdWJ0cmFjdFwiLCA3KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICBzZWxmLmFkanVzdERhdGUoXCJhZGRcIiwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgc2VsZi5hZGp1c3REYXRlKFwiYWRkXCIsIDcpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgc2VsZi5zZXREYXRlKG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2VsZi5fcGFyc2VGaWVsZFZhbHVlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKG9wdHMucGFyc2UpIHtcbiAgICAgIHJldHVybiBvcHRzLnBhcnNlKG9wdHMuZmllbGQudmFsdWUsIG9wdHMuZm9ybWF0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaGFzTW9tZW50KSB7XG4gICAgICBsZXQgZGF0ZSA9IHRoaXMubW9tZW50KFxuICAgICAgICBvcHRzLmZpZWxkLnZhbHVlLFxuICAgICAgICBvcHRzLmZvcm1hdCxcbiAgICAgICAgb3B0cy5mb3JtYXRTdHJpY3RcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSA/IGRhdGUudG9EYXRlKCkgOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5wYXJzZShvcHRzLmZpZWxkLnZhbHVlKSk7XG4gICAgfVxuICB9O1xuICBzZWxmLl9vbklucHV0Q2hhbmdlID0gZnVuY3Rpb24oZSkge1xuICAgIGxldCBkYXRlO1xuICAgIGlmIChlLmZpcmVkQnkgPT09IHNlbGYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGF0ZSA9IHNlbGYuX3BhcnNlRmllbGRWYWx1ZSgpO1xuICAgIGlmIChpc0RhdGUoZGF0ZSkpIHtcbiAgICAgIHNlbGYuc2V0RGF0ZShkYXRlKTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLl92KSB7XG4gICAgICBzZWxmLnNob3coKTtcbiAgICB9XG4gIH07XG4gIHNlbGYuX29uSW5wdXRGb2N1cyA9IGZ1bmN0aW9uKCkge1xuICAgIHNlbGYuc2hvdygpO1xuICB9O1xuICBzZWxmLl9vbklucHV0Q2xpY2sgPSBmdW5jdGlvbigpIHtcbiAgICBzZWxmLnNob3coKTtcbiAgfTtcbiAgc2VsZi5fb25JbnB1dEJsdXIgPSBmdW5jdGlvbigpIHtcbiAgICBsZXQgcEVsID0gZ2V0RG9jdW1lbnQoKS5hY3RpdmVFbGVtZW50O1xuICAgIGRvIHtcbiAgICAgIGlmIChoYXNDbGFzcyhwRWwsIFwicGlrYS1zaW5nbGVcIikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHBFbCA9IHBFbC5wYXJlbnROb2RlKTtcbiAgICBpZiAoIXNlbGYuX2MpIHtcbiAgICAgIHNlbGYuX2IgPSBzdG8oZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuaGlkZSgpO1xuICAgICAgfSwgNTApO1xuICAgIH1cbiAgICBzZWxmLl9jID0gZmFsc2U7XG4gIH07XG4gIHNlbGYuX29uQ2xpY2sgPSBmdW5jdGlvbihlKSB7XG4gICAgZSA9IGUgfHwgZ2V0V2luZG93KCkuZXZlbnQ7XG4gICAgbGV0IHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudCwgcEVsID0gdGFyZ2V0O1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaGFzRXZlbnRMaXN0ZW5lcnMgJiYgaGFzQ2xhc3ModGFyZ2V0LCBcInBpa2Etc2VsZWN0XCIpKSB7XG4gICAgICBpZiAoIXRhcmdldC5vbmNoYW5nZSkge1xuICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKFwib25jaGFuZ2VcIiwgXCJyZXR1cm47XCIpO1xuICAgICAgICBhZGRFdmVudCh0YXJnZXQsIFwiY2hhbmdlXCIsIHNlbGYuX29uQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZG8ge1xuICAgICAgaWYgKGhhc0NsYXNzKHBFbCwgXCJwaWthLXNpbmdsZVwiKSB8fCBwRWwgPT09IG9wdHMudHJpZ2dlcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSB3aGlsZSAocEVsID0gcEVsLnBhcmVudE5vZGUpO1xuICAgIGlmIChzZWxmLl92ICYmIHRhcmdldCAhPT0gb3B0cy50cmlnZ2VyICYmIHBFbCAhPT0gb3B0cy50cmlnZ2VyKSB7XG4gICAgICBzZWxmLmhpZGUoKTtcbiAgICB9XG4gIH07XG4gIHNlbGYuZWwgPSBnZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHNlbGYuZWwuY2xhc3NOYW1lID0gXCJwaWthLXNpbmdsZVwiICsgKG9wdHMuaXNSVEwgPyBcIiBpcy1ydGxcIiA6IFwiXCIpICsgKG9wdHMudGhlbWUgPyBcIiBcIiArIG9wdHMudGhlbWUgOiBcIlwiKTtcbiAgYWRkRXZlbnQoc2VsZi5lbCwgXCJtb3VzZWRvd25cIiwgc2VsZi5fb25Nb3VzZURvd24sIHRydWUpO1xuICBhZGRFdmVudChzZWxmLmVsLCBcInRvdWNoZW5kXCIsIHNlbGYuX29uTW91c2VEb3duLCB0cnVlKTtcbiAgYWRkRXZlbnQoc2VsZi5lbCwgXCJjaGFuZ2VcIiwgc2VsZi5fb25DaGFuZ2UpO1xuICBpZiAob3B0cy5rZXlib2FyZElucHV0KSB7XG4gICAgYWRkRXZlbnQoZ2V0RG9jdW1lbnQoKSwgXCJrZXlkb3duXCIsIHNlbGYuX29uS2V5Q2hhbmdlKTtcbiAgfVxuICBpZiAob3B0cy5maWVsZCkge1xuICAgIGlmIChvcHRzLmNvbnRhaW5lcikge1xuICAgICAgb3B0cy5jb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5lbCk7XG4gICAgfSBlbHNlIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICBnZXREb2N1bWVudCgpLmJvZHkuYXBwZW5kQ2hpbGQoc2VsZi5lbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdHMuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXG4gICAgICAgIHNlbGYuZWwsXG4gICAgICAgIG9wdHMuZmllbGQubmV4dFNpYmxpbmdcbiAgICAgICk7XG4gICAgfVxuICAgIGFkZEV2ZW50KG9wdHMuZmllbGQsIFwiY2hhbmdlXCIsIHNlbGYuX29uSW5wdXRDaGFuZ2UpO1xuICAgIGlmICghb3B0cy5kZWZhdWx0RGF0ZSkge1xuICAgICAgb3B0cy5kZWZhdWx0RGF0ZSA9IHNlbGYuX3BhcnNlRmllbGRWYWx1ZSgpO1xuICAgICAgb3B0cy5zZXREZWZhdWx0RGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGxldCBkZWZEYXRlID0gb3B0cy5kZWZhdWx0RGF0ZTtcbiAgaWYgKGlzRGF0ZShkZWZEYXRlKSkge1xuICAgIGlmIChvcHRzLnNldERlZmF1bHREYXRlKSB7XG4gICAgICBzZWxmLnNldERhdGUoZGVmRGF0ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuZ290b0RhdGUoZGVmRGF0ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHNlbGYuZ290b0RhdGUoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpO1xuICB9XG4gIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgdGhpcy5oaWRlKCk7XG4gICAgc2VsZi5lbC5jbGFzc05hbWUgKz0gXCIgaXMtYm91bmRcIjtcbiAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsIFwiY2xpY2tcIiwgc2VsZi5fb25JbnB1dENsaWNrKTtcbiAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsIFwiZm9jdXNcIiwgc2VsZi5fb25JbnB1dEZvY3VzKTtcbiAgICBhZGRFdmVudChvcHRzLnRyaWdnZXIsIFwiYmx1clwiLCBzZWxmLl9vbklucHV0Qmx1cik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zaG93KCk7XG4gIH1cbn1cblBpa2FkYXkucHJvdG90eXBlID0ge1xuICAvKipcbiAgICogY29uZmlndXJlIGZ1bmN0aW9uYWxpdHlcbiAgICovXG4gIGNvbmZpZzogZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghdGhpcy5fbykge1xuICAgICAgdGhpcy5fbyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIHRydWUpO1xuICAgIH1cbiAgICBsZXQgb3B0cyA9IGV4dGVuZCh0aGlzLl9vLCBvcHRpb25zLCB0cnVlKTtcbiAgICBvcHRzLmlzUlRMID0gISFvcHRzLmlzUlRMO1xuICAgIG9wdHMuZmllbGQgPSBvcHRzLmZpZWxkICYmIG9wdHMuZmllbGQubm9kZU5hbWUgPyBvcHRzLmZpZWxkIDogbnVsbDtcbiAgICBvcHRzLnRoZW1lID0gdHlwZW9mIG9wdHMudGhlbWUgPT09IFwic3RyaW5nXCIgJiYgb3B0cy50aGVtZSA/IG9wdHMudGhlbWUgOiBudWxsO1xuICAgIG9wdHMuYm91bmQgPSAhIShvcHRzLmJvdW5kICE9PSB2b2lkIDAgPyBvcHRzLmZpZWxkICYmIG9wdHMuYm91bmQgOiBvcHRzLmZpZWxkKTtcbiAgICBvcHRzLnRyaWdnZXIgPSBvcHRzLnRyaWdnZXIgJiYgb3B0cy50cmlnZ2VyLm5vZGVOYW1lID8gb3B0cy50cmlnZ2VyIDogb3B0cy5maWVsZDtcbiAgICBvcHRzLmRpc2FibGVXZWVrZW5kcyA9ICEhb3B0cy5kaXNhYmxlV2Vla2VuZHM7XG4gICAgb3B0cy5kaXNhYmxlRGF5Rm4gPSB0eXBlb2Ygb3B0cy5kaXNhYmxlRGF5Rm4gPT09IFwiZnVuY3Rpb25cIiA/IG9wdHMuZGlzYWJsZURheUZuIDogbnVsbDtcbiAgICBsZXQgbm9tID0gcGFyc2VJbnQob3B0cy5udW1iZXJPZk1vbnRocywgMTApIHx8IDE7XG4gICAgb3B0cy5udW1iZXJPZk1vbnRocyA9IG5vbSA+IDQgPyA0IDogbm9tO1xuICAgIGlmICghaXNEYXRlKG9wdHMubWluRGF0ZSkpIHtcbiAgICAgIG9wdHMubWluRGF0ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShvcHRzLm1heERhdGUpKSB7XG4gICAgICBvcHRzLm1heERhdGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG9wdHMubWluRGF0ZSAmJiBvcHRzLm1heERhdGUgJiYgb3B0cy5tYXhEYXRlIDwgb3B0cy5taW5EYXRlKSB7XG4gICAgICBvcHRzLm1heERhdGUgPSBvcHRzLm1pbkRhdGUgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG9wdHMubWluRGF0ZSkge1xuICAgICAgdGhpcy5zZXRNaW5EYXRlKG9wdHMubWluRGF0ZSk7XG4gICAgfVxuICAgIGlmIChvcHRzLm1heERhdGUpIHtcbiAgICAgIHRoaXMuc2V0TWF4RGF0ZShvcHRzLm1heERhdGUpO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheShvcHRzLnllYXJSYW5nZSkpIHtcbiAgICAgIGxldCBmYWxsYmFjayA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkuZ2V0RnVsbFllYXIoKSAtIDEwO1xuICAgICAgb3B0cy55ZWFyUmFuZ2VbMF0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVswXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgICAgb3B0cy55ZWFyUmFuZ2VbMV0gPSBwYXJzZUludChvcHRzLnllYXJSYW5nZVsxXSwgMTApIHx8IGZhbGxiYWNrO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRzLnllYXJSYW5nZSA9IE1hdGguYWJzKHBhcnNlSW50KG9wdHMueWVhclJhbmdlLCAxMCkpIHx8IGRlZmF1bHRzLnllYXJSYW5nZTtcbiAgICAgIGlmIChvcHRzLnllYXJSYW5nZSA+IDEwMCkge1xuICAgICAgICBvcHRzLnllYXJSYW5nZSA9IDEwMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9wdHM7XG4gIH0sXG4gIC8qKlxuICAgKiByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAodXNpbmcgTW9tZW50LmpzIGlmIGF2YWlsYWJsZSlcbiAgICovXG4gIHRvU3RyaW5nOiBmdW5jdGlvbihmb3JtYXQpIHtcbiAgICBmb3JtYXQgPSBmb3JtYXQgfHwgdGhpcy5fby5mb3JtYXQ7XG4gICAgaWYgKCFpc0RhdGUodGhpcy5fZCkpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBpZiAodGhpcy5fby50b1N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuX28udG9TdHJpbmcodGhpcy5fZCwgZm9ybWF0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzTW9tZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5tb21lbnQodGhpcy5fZCkuZm9ybWF0KGZvcm1hdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kLnRvRGF0ZVN0cmluZygpO1xuICB9LFxuICAvKipcbiAgICogcmV0dXJuIGEgTW9tZW50LmpzIG9iamVjdCBvZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gKGlmIGF2YWlsYWJsZSlcbiAgICovXG4gIGdldE1vbWVudDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzTW9tZW50ID8gdGhpcy5tb21lbnQodGhpcy5fZCkgOiBudWxsO1xuICB9LFxuICAvKipcbiAgICogc2V0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmcm9tIGEgTW9tZW50LmpzIG9iamVjdCAoaWYgYXZhaWxhYmxlKVxuICAgKi9cbiAgc2V0TW9tZW50OiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpIHtcbiAgICBpZiAodGhpcy5oYXNNb21lbnQgJiYgdGhpcy5tb21lbnQuaXNNb21lbnQoZGF0ZSkpIHtcbiAgICAgIHRoaXMuc2V0RGF0ZShkYXRlLnRvRGF0ZSgpLCBwcmV2ZW50T25TZWxlY3QpO1xuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFNldHMgdGhlIG1vbWVudGpzIGZ1bmN0aW9uIGFzIGRlcGVuZGVuY3kgdG8gcGFyc2UgYW5kIGZvcm1hdCB0aGUgZGF0ZXNcbiAgICovXG4gIHVzZU1vbWVudDogZnVuY3Rpb24obW9tZW50RnVuY3Rpb24pIHtcbiAgICB0aGlzLmhhc01vbWVudCA9IHRydWU7XG4gICAgdGhpcy5tb21lbnQgPSBtb21lbnRGdW5jdGlvbjtcbiAgfSxcbiAgLyoqXG4gICAqIHJldHVybiBhIERhdGUgb2JqZWN0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvblxuICAgKi9cbiAgZ2V0RGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh0aGlzLl9kKSA/IG5ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKSA6IG51bGw7XG4gIH0sXG4gIC8qKlxuICAgKiBzZXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAqL1xuICBzZXREYXRlOiBmdW5jdGlvbihkYXRlLCBwcmV2ZW50T25TZWxlY3QpIHtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHRoaXMuX2QgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuX28uZmllbGQpIHtcbiAgICAgICAgdGhpcy5fby5maWVsZC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIGZpcmVFdmVudCh0aGlzLl9vLmZpZWxkLCBcImNoYW5nZVwiLCB7IGZpcmVkQnk6IHRoaXMgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5kcmF3KCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkpO1xuICAgIH1cbiAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgbWluID0gdGhpcy5fby5taW5EYXRlLCBtYXggPSB0aGlzLl9vLm1heERhdGU7XG4gICAgaWYgKGlzRGF0ZShtaW4pICYmIGRhdGUgPCBtaW4pIHtcbiAgICAgIGRhdGUgPSBtaW47XG4gICAgfSBlbHNlIGlmIChpc0RhdGUobWF4KSAmJiBkYXRlID4gbWF4KSB7XG4gICAgICBkYXRlID0gbWF4O1xuICAgIH1cbiAgICB0aGlzLl9kID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgIHNldFRvU3RhcnRPZkRheSh0aGlzLl9kKTtcbiAgICB0aGlzLmdvdG9EYXRlKHRoaXMuX2QpO1xuICAgIGlmICh0aGlzLl9vLmZpZWxkKSB7XG4gICAgICB0aGlzLl9vLmZpZWxkLnZhbHVlID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgZmlyZUV2ZW50KHRoaXMuX28uZmllbGQsIFwiY2hhbmdlXCIsIHsgZmlyZWRCeTogdGhpcyB9KTtcbiAgICB9XG4gICAgaWYgKCFwcmV2ZW50T25TZWxlY3QgJiYgdHlwZW9mIHRoaXMuX28ub25TZWxlY3QgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsIHRoaXMuZ2V0RGF0ZSgpKTtcbiAgICB9XG4gIH0sXG4gIC8qKlxuICAgKiBjbGVhciBhbmQgcmVzZXQgdGhlIGRhdGVcbiAgICovXG4gIGNsZWFyOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldERhdGUobnVsbCk7XG4gIH0sXG4gIC8qKlxuICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGRhdGVcbiAgICovXG4gIGdvdG9EYXRlOiBmdW5jdGlvbihkYXRlKSB7XG4gICAgbGV0IG5ld0NhbGVuZGFyID0gdHJ1ZTtcbiAgICBpZiAoIWlzRGF0ZShkYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYWxlbmRhcnMpIHtcbiAgICAgIGxldCBmaXJzdFZpc2libGVEYXRlID0gbmV3IERhdGUodGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgsIDEpLCBsYXN0VmlzaWJsZURhdGUgPSBuZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGggLSAxXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGggLSAxXS5tb250aCwgMSksIHZpc2libGVEYXRlID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICBsYXN0VmlzaWJsZURhdGUuc2V0TW9udGgobGFzdFZpc2libGVEYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgIGxhc3RWaXNpYmxlRGF0ZS5zZXREYXRlKGxhc3RWaXNpYmxlRGF0ZS5nZXREYXRlKCkgLSAxKTtcbiAgICAgIG5ld0NhbGVuZGFyID0gdmlzaWJsZURhdGUgPCBmaXJzdFZpc2libGVEYXRlLmdldFRpbWUoKSB8fCBsYXN0VmlzaWJsZURhdGUuZ2V0VGltZSgpIDwgdmlzaWJsZURhdGU7XG4gICAgfVxuICAgIGlmIChuZXdDYWxlbmRhcikge1xuICAgICAgdGhpcy5jYWxlbmRhcnMgPSBbe1xuICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgIH1dO1xuICAgICAgaWYgKHRoaXMuX28ubWFpbkNhbGVuZGFyID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKz0gMSAtIHRoaXMuX28ubnVtYmVyT2ZNb250aHM7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gIH0sXG4gIGFkanVzdERhdGU6IGZ1bmN0aW9uKHNpZ24sIGRheXMpIHtcbiAgICBsZXQgZGF5ID0gdGhpcy5nZXREYXRlKCkgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7XG4gICAgbGV0IGRpZmZlcmVuY2UgPSBwYXJzZUludChkYXlzKSAqIDI0ICogNjAgKiA2MCAqIDFlMztcbiAgICBsZXQgbmV3RGF5O1xuICAgIGlmIChzaWduID09PSBcImFkZFwiKSB7XG4gICAgICBuZXdEYXkgPSBuZXcgRGF0ZShkYXkudmFsdWVPZigpICsgZGlmZmVyZW5jZSk7XG4gICAgfSBlbHNlIGlmIChzaWduID09PSBcInN1YnRyYWN0XCIpIHtcbiAgICAgIG5ld0RheSA9IG5ldyBEYXRlKGRheS52YWx1ZU9mKCkgLSBkaWZmZXJlbmNlKTtcbiAgICB9XG4gICAgdGhpcy5zZXREYXRlKG5ld0RheSk7XG4gIH0sXG4gIGFkanVzdENhbGVuZGFyczogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jYWxlbmRhcnNbMF0gPSBhZGp1c3RDYWxlbmRhcih0aGlzLmNhbGVuZGFyc1swXSk7XG4gICAgZm9yIChsZXQgYyA9IDE7IGMgPCB0aGlzLl9vLm51bWJlck9mTW9udGhzOyBjKyspIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJzW2NdID0gYWRqdXN0Q2FsZW5kYXIoe1xuICAgICAgICBtb250aDogdGhpcy5jYWxlbmRhcnNbMF0ubW9udGggKyBjLFxuICAgICAgICB5ZWFyOiB0aGlzLmNhbGVuZGFyc1swXS55ZWFyXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kcmF3KCk7XG4gIH0sXG4gIGdvdG9Ub2RheTogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5nb3RvRGF0ZSgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSk7XG4gIH0sXG4gIC8qKlxuICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIG1vbnRoICh6ZXJvLWluZGV4LCBlLmcuIDA6IEphbnVhcnkpXG4gICAqL1xuICBnb3RvTW9udGg6IGZ1bmN0aW9uKG1vbnRoKSB7XG4gICAgaWYgKCFpc05hTihtb250aCkpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoID0gcGFyc2VJbnQobW9udGgsIDEwKTtcbiAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgfVxuICB9LFxuICBuZXh0TW9udGg6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKys7XG4gICAgdGhpcy5hZGp1c3RDYWxlbmRhcnMoKTtcbiAgfSxcbiAgcHJldk1vbnRoOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tO1xuICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gIH0sXG4gIC8qKlxuICAgKiBjaGFuZ2UgdmlldyB0byBhIHNwZWNpZmljIGZ1bGwgeWVhciAoZS5nLiBcIjIwMTJcIilcbiAgICovXG4gIGdvdG9ZZWFyOiBmdW5jdGlvbih5ZWFyKSB7XG4gICAgaWYgKCFpc05hTih5ZWFyKSkge1xuICAgICAgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciA9IHBhcnNlSW50KHllYXIsIDEwKTtcbiAgICAgIHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCk7XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogY2hhbmdlIHRoZSBtaW5EYXRlXG4gICAqL1xuICBzZXRNaW5EYXRlOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHNldFRvU3RhcnRPZkRheSh2YWx1ZSk7XG4gICAgICB0aGlzLl9vLm1pbkRhdGUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX28ubWluWWVhciA9IHZhbHVlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB0aGlzLl9vLm1pbk1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fby5taW5EYXRlID0gZGVmYXVsdHMubWluRGF0ZTtcbiAgICAgIHRoaXMuX28ubWluWWVhciA9IGRlZmF1bHRzLm1pblllYXI7XG4gICAgICB0aGlzLl9vLm1pbk1vbnRoID0gZGVmYXVsdHMubWluTW9udGg7XG4gICAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSBkZWZhdWx0cy5zdGFydFJhbmdlO1xuICAgIH1cbiAgICB0aGlzLmRyYXcoKTtcbiAgfSxcbiAgLyoqXG4gICAqIGNoYW5nZSB0aGUgbWF4RGF0ZVxuICAgKi9cbiAgc2V0TWF4RGF0ZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBzZXRUb1N0YXJ0T2ZEYXkodmFsdWUpO1xuICAgICAgdGhpcy5fby5tYXhEYXRlID0gdmFsdWU7XG4gICAgICB0aGlzLl9vLm1heFllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgdGhpcy5fby5tYXhNb250aCA9IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX28ubWF4RGF0ZSA9IGRlZmF1bHRzLm1heERhdGU7XG4gICAgICB0aGlzLl9vLm1heFllYXIgPSBkZWZhdWx0cy5tYXhZZWFyO1xuICAgICAgdGhpcy5fby5tYXhNb250aCA9IGRlZmF1bHRzLm1heE1vbnRoO1xuICAgICAgdGhpcy5fby5lbmRSYW5nZSA9IGRlZmF1bHRzLmVuZFJhbmdlO1xuICAgIH1cbiAgICB0aGlzLmRyYXcoKTtcbiAgfSxcbiAgc2V0U3RhcnRSYW5nZTogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLl9vLnN0YXJ0UmFuZ2UgPSB2YWx1ZTtcbiAgfSxcbiAgc2V0RW5kUmFuZ2U6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5fby5lbmRSYW5nZSA9IHZhbHVlO1xuICB9LFxuICAvKipcbiAgICogcmVmcmVzaCB0aGUgSFRNTFxuICAgKi9cbiAgZHJhdzogZnVuY3Rpb24oZm9yY2UpIHtcbiAgICBpZiAoIXRoaXMuX3YgJiYgIWZvcmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBvcHRzID0gdGhpcy5fbywgbWluWWVhciA9IG9wdHMubWluWWVhciwgbWF4WWVhciA9IG9wdHMubWF4WWVhciwgbWluTW9udGggPSBvcHRzLm1pbk1vbnRoLCBtYXhNb250aCA9IG9wdHMubWF4TW9udGgsIGh0bWwgPSBcIlwiLCByYW5kSWQ7XG4gICAgaWYgKHRoaXMuX3kgPD0gbWluWWVhcikge1xuICAgICAgdGhpcy5feSA9IG1pblllYXI7XG4gICAgICBpZiAoIWlzTmFOKG1pbk1vbnRoKSAmJiB0aGlzLl9tIDwgbWluTW9udGgpIHtcbiAgICAgICAgdGhpcy5fbSA9IG1pbk1vbnRoO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5feSA+PSBtYXhZZWFyKSB7XG4gICAgICB0aGlzLl95ID0gbWF4WWVhcjtcbiAgICAgIGlmICghaXNOYU4obWF4TW9udGgpICYmIHRoaXMuX20gPiBtYXhNb250aCkge1xuICAgICAgICB0aGlzLl9tID0gbWF4TW9udGg7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgb3B0cy5udW1iZXJPZk1vbnRoczsgYysrKSB7XG4gICAgICByYW5kSWQgPSBcInBpa2EtdGl0bGUtXCIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIFwiXCIpLnN1YnN0cigwLCAyKTtcbiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJwaWthLWxlbmRhclwiPicgKyByZW5kZXJUaXRsZSh0aGlzLCBjLCB0aGlzLmNhbGVuZGFyc1tjXS55ZWFyLCB0aGlzLmNhbGVuZGFyc1tjXS5tb250aCwgdGhpcy5jYWxlbmRhcnNbMF0ueWVhciwgcmFuZElkKSArIHRoaXMucmVuZGVyKHRoaXMuY2FsZW5kYXJzW2NdLnllYXIsIHRoaXMuY2FsZW5kYXJzW2NdLm1vbnRoLCByYW5kSWQpICsgXCI8L2Rpdj5cIjtcbiAgICB9XG4gICAgdGhpcy5lbC5pbm5lckhUTUwgPSBodG1sO1xuICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICBpZiAob3B0cy5maWVsZC50eXBlICE9PSBcImhpZGRlblwiKSB7XG4gICAgICAgIHN0byhmdW5jdGlvbigpIHtcbiAgICAgICAgICBvcHRzLnRyaWdnZXIuZm9jdXMoKTtcbiAgICAgICAgfSwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5fby5vbkRyYXcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhpcy5fby5vbkRyYXcodGhpcyk7XG4gICAgfVxuICAgIGlmIChvcHRzLmJvdW5kKSB7XG4gICAgICBvcHRzLmZpZWxkLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgb3B0cy5hcmlhTGFiZWwpO1xuICAgIH1cbiAgfSxcbiAgYWRqdXN0UG9zaXRpb246IGZ1bmN0aW9uKCkge1xuICAgIGxldCBmaWVsZCwgd2lkdGgsIGhlaWdodCwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQsIHNjcm9sbFRvcCwgbGVmdCwgdG9wLCBjbGllbnRSZWN0LCBsZWZ0QWxpZ25lZCwgYm90dG9tQWxpZ25lZDtcbiAgICBpZiAodGhpcy5fby5jb250YWluZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICBmaWVsZCA9IHRoaXMuX28udHJpZ2dlcjtcbiAgICB3aWR0aCA9IHRoaXMuZWwub2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gdGhpcy5lbC5vZmZzZXRIZWlnaHQ7XG4gICAgdmlld3BvcnRXaWR0aCA9IGdldFdpbmRvdygpLmlubmVyV2lkdGggfHwgZ2V0RG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgdmlld3BvcnRIZWlnaHQgPSBnZXRXaW5kb3coKS5pbm5lckhlaWdodCB8fCBnZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgc2Nyb2xsVG9wID0gZ2V0RG9jdW1lbnQoKS5ib2R5LnNjcm9sbFRvcCB8fCBnZXREb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XG4gICAgbGVmdEFsaWduZWQgPSB0cnVlO1xuICAgIGJvdHRvbUFsaWduZWQgPSB0cnVlO1xuICAgIGNsaWVudFJlY3QgPSBmaWVsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZ2V0V2luZG93KCkucGFnZVhPZmZzZXQ7XG4gICAgdG9wID0gY2xpZW50UmVjdC5ib3R0b20gKyBnZXRXaW5kb3coKS5wYWdlWU9mZnNldDtcbiAgICBpZiAodGhpcy5fby5yZXBvc2l0aW9uICYmIGxlZnQgKyB3aWR0aCA+IHZpZXdwb3J0V2lkdGggfHwgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKFwicmlnaHRcIikgPiAtMSAmJiBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aCA+IDApIHtcbiAgICAgIGxlZnQgPSBsZWZ0IC0gd2lkdGggKyBmaWVsZC5vZmZzZXRXaWR0aDtcbiAgICAgIGxlZnRBbGlnbmVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vLnJlcG9zaXRpb24gJiYgdG9wICsgaGVpZ2h0ID4gdmlld3BvcnRIZWlnaHQgKyBzY3JvbGxUb3AgfHwgdGhpcy5fby5wb3NpdGlvbi5pbmRleE9mKFwidG9wXCIpID4gLTEgJiYgdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0ID4gMCkge1xuICAgICAgdG9wID0gdG9wIC0gaGVpZ2h0IC0gZmllbGQub2Zmc2V0SGVpZ2h0O1xuICAgICAgYm90dG9tQWxpZ25lZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAobGVmdCA8IDApIHtcbiAgICAgIGxlZnQgPSAwO1xuICAgIH1cbiAgICBpZiAodG9wIDwgMCkge1xuICAgICAgdG9wID0gMDtcbiAgICB9XG4gICAgdGhpcy5lbC5zdHlsZS5sZWZ0ID0gbGVmdCArIFwicHhcIjtcbiAgICB0aGlzLmVsLnN0eWxlLnRvcCA9IHRvcCArIFwicHhcIjtcbiAgICBhZGRDbGFzcyh0aGlzLmVsLCBsZWZ0QWxpZ25lZCA/IFwibGVmdC1hbGlnbmVkXCIgOiBcInJpZ2h0LWFsaWduZWRcIik7XG4gICAgYWRkQ2xhc3ModGhpcy5lbCwgYm90dG9tQWxpZ25lZCA/IFwiYm90dG9tLWFsaWduZWRcIiA6IFwidG9wLWFsaWduZWRcIik7XG4gICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgIWxlZnRBbGlnbmVkID8gXCJsZWZ0LWFsaWduZWRcIiA6IFwicmlnaHQtYWxpZ25lZFwiKTtcbiAgICByZW1vdmVDbGFzcyh0aGlzLmVsLCAhYm90dG9tQWxpZ25lZCA/IFwiYm90dG9tLWFsaWduZWRcIiA6IFwidG9wLWFsaWduZWRcIik7XG4gIH0sXG4gIC8qKlxuICAgKiByZW5kZXIgSFRNTCBmb3IgYSBwYXJ0aWN1bGFyIG1vbnRoXG4gICAqL1xuICByZW5kZXI6IGZ1bmN0aW9uKHllYXIsIG1vbnRoLCByYW5kSWQpIHtcbiAgICBsZXQgb3B0cyA9IHRoaXMuX28sIG5vdyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpLCBkYXlzID0gZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLCBiZWZvcmUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCksIGRhdGEgPSBbXSwgcm93ID0gW107XG4gICAgc2V0VG9TdGFydE9mRGF5KG5vdyk7XG4gICAgaWYgKG9wdHMuZmlyc3REYXkgPiAwKSB7XG4gICAgICBiZWZvcmUgLT0gb3B0cy5maXJzdERheTtcbiAgICAgIGlmIChiZWZvcmUgPCAwKSB7XG4gICAgICAgIGJlZm9yZSArPSA3O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcHJldmlvdXNNb250aCA9IG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEsIG5leHRNb250aCA9IG1vbnRoID09PSAxMSA/IDAgOiBtb250aCArIDEsIHllYXJPZlByZXZpb3VzTW9udGggPSBtb250aCA9PT0gMCA/IHllYXIgLSAxIDogeWVhciwgeWVhck9mTmV4dE1vbnRoID0gbW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyLCBkYXlzSW5QcmV2aW91c01vbnRoID0gZ2V0RGF5c0luTW9udGgoeWVhck9mUHJldmlvdXNNb250aCwgcHJldmlvdXNNb250aCk7XG4gICAgbGV0IGNlbGxzID0gZGF5cyArIGJlZm9yZSwgYWZ0ZXIgPSBjZWxscztcbiAgICB3aGlsZSAoYWZ0ZXIgPiA3KSB7XG4gICAgICBhZnRlciAtPSA3O1xuICAgIH1cbiAgICBjZWxscyArPSA3IC0gYWZ0ZXI7XG4gICAgbGV0IGlzV2Vla1NlbGVjdGVkID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDAsIHIgPSAwOyBpIDwgY2VsbHM7IGkrKykge1xuICAgICAgbGV0IGRheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxICsgKGkgLSBiZWZvcmUpKSwgaXNTZWxlY3RlZCA9IGlzRGF0ZSh0aGlzLl9kKSA/IGNvbXBhcmVEYXRlcyhkYXksIHRoaXMuX2QpIDogZmFsc2UsIGlzVG9kYXkgPSBjb21wYXJlRGF0ZXMoZGF5LCBub3cpLCBoYXNFdmVudCA9IG9wdHMuZXZlbnRzLmluZGV4T2YoZGF5LnRvRGF0ZVN0cmluZygpKSAhPT0gLTEgPyB0cnVlIDogZmFsc2UsIGlzRW1wdHkgPSBpIDwgYmVmb3JlIHx8IGkgPj0gZGF5cyArIGJlZm9yZSwgZGF5TnVtYmVyID0gMSArIChpIC0gYmVmb3JlKSwgbW9udGhOdW1iZXIgPSBtb250aCwgeWVhck51bWJlciA9IHllYXIsIGlzU3RhcnRSYW5nZSA9IG9wdHMuc3RhcnRSYW5nZSAmJiBjb21wYXJlRGF0ZXMob3B0cy5zdGFydFJhbmdlLCBkYXkpLCBpc0VuZFJhbmdlID0gb3B0cy5lbmRSYW5nZSAmJiBjb21wYXJlRGF0ZXMob3B0cy5lbmRSYW5nZSwgZGF5KSwgaXNJblJhbmdlID0gb3B0cy5zdGFydFJhbmdlICYmIG9wdHMuZW5kUmFuZ2UgJiYgb3B0cy5zdGFydFJhbmdlIDwgZGF5ICYmIGRheSA8IG9wdHMuZW5kUmFuZ2UsIGlzRGlzYWJsZWQgPSBvcHRzLm1pbkRhdGUgJiYgZGF5IDwgb3B0cy5taW5EYXRlIHx8IG9wdHMubWF4RGF0ZSAmJiBkYXkgPiBvcHRzLm1heERhdGUgfHwgb3B0cy5kaXNhYmxlV2Vla2VuZHMgJiYgaXNXZWVrZW5kKGRheSkgfHwgb3B0cy5kaXNhYmxlRGF5Rm4gJiYgb3B0cy5kaXNhYmxlRGF5Rm4oZGF5KTtcbiAgICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICAgIGlmIChpIDwgYmVmb3JlKSB7XG4gICAgICAgICAgZGF5TnVtYmVyID0gZGF5c0luUHJldmlvdXNNb250aCArIGRheU51bWJlcjtcbiAgICAgICAgICBtb250aE51bWJlciA9IHByZXZpb3VzTW9udGg7XG4gICAgICAgICAgeWVhck51bWJlciA9IHllYXJPZlByZXZpb3VzTW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF5TnVtYmVyID0gZGF5TnVtYmVyIC0gZGF5cztcbiAgICAgICAgICBtb250aE51bWJlciA9IG5leHRNb250aDtcbiAgICAgICAgICB5ZWFyTnVtYmVyID0geWVhck9mTmV4dE1vbnRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgZGF5Q29uZmlnID0ge1xuICAgICAgICBkYXk6IGRheU51bWJlcixcbiAgICAgICAgbW9udGg6IG1vbnRoTnVtYmVyLFxuICAgICAgICB5ZWFyOiB5ZWFyTnVtYmVyLFxuICAgICAgICBoYXNFdmVudCxcbiAgICAgICAgaXNTZWxlY3RlZCxcbiAgICAgICAgaXNUb2RheSxcbiAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgaXNFbXB0eSxcbiAgICAgICAgaXNTdGFydFJhbmdlLFxuICAgICAgICBpc0VuZFJhbmdlLFxuICAgICAgICBpc0luUmFuZ2UsXG4gICAgICAgIHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6IG9wdHMuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxcbiAgICAgICAgZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiBvcHRzLmVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc1xuICAgICAgfTtcbiAgICAgIGlmIChvcHRzLnBpY2tXaG9sZVdlZWsgJiYgaXNTZWxlY3RlZCkge1xuICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByb3cucHVzaChyZW5kZXJEYXkoZGF5Q29uZmlnKSk7XG4gICAgICBpZiAoKytyID09PSA3KSB7XG4gICAgICAgIGlmIChvcHRzLnNob3dXZWVrTnVtYmVyKSB7XG4gICAgICAgICAgcm93LnVuc2hpZnQocmVuZGVyV2Vlayh0aGlzLCBpIC0gYmVmb3JlLCBtb250aCwgeWVhciwgb3B0cy5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5wdXNoKHJlbmRlclJvdyhyb3csIG9wdHMuaXNSVEwsIG9wdHMucGlja1dob2xlV2VlaywgaXNXZWVrU2VsZWN0ZWQpKTtcbiAgICAgICAgcm93ID0gW107XG4gICAgICAgIHIgPSAwO1xuICAgICAgICBpc1dlZWtTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyVGFibGUob3B0cywgZGF0YSwgcmFuZElkKTtcbiAgfSxcbiAgaXNWaXNpYmxlOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdjtcbiAgfSxcbiAgc2hvdzogZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmlzVmlzaWJsZSgpKSB7XG4gICAgICB0aGlzLl92ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJhdygpO1xuICAgICAgcmVtb3ZlQ2xhc3ModGhpcy5lbCwgXCJpcy1oaWRkZW5cIik7XG4gICAgICBpZiAodGhpcy5fby5ib3VuZCkge1xuICAgICAgICBhZGRFdmVudChnZXREb2N1bWVudCgpLCBcImNsaWNrXCIsIHRoaXMuX29uQ2xpY2spO1xuICAgICAgICB0aGlzLmFkanVzdFBvc2l0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuX28ub25PcGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGhpZGU6IGZ1bmN0aW9uKCkge1xuICAgIGxldCB2ID0gdGhpcy5fdjtcbiAgICBpZiAodiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLl9vLmJvdW5kKSB7XG4gICAgICAgIHJlbW92ZUV2ZW50KGdldERvY3VtZW50KCksIFwiY2xpY2tcIiwgdGhpcy5fb25DbGljayk7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuX28uY29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuZWwuc3R5bGUucG9zaXRpb24gPSBcInN0YXRpY1wiO1xuICAgICAgICB0aGlzLmVsLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgdGhpcy5lbC5zdHlsZS50b3AgPSBcImF1dG9cIjtcbiAgICAgIH1cbiAgICAgIGFkZENsYXNzKHRoaXMuZWwsIFwiaXMtaGlkZGVuXCIpO1xuICAgICAgdGhpcy5fdiA9IGZhbHNlO1xuICAgICAgaWYgKHYgIT09IHZvaWQgMCAmJiB0eXBlb2YgdGhpcy5fby5vbkNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICAvKipcbiAgICogR0FNRSBPVkVSXG4gICAqL1xuICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICBsZXQgb3B0cyA9IHRoaXMuX287XG4gICAgdGhpcy5oaWRlKCk7XG4gICAgcmVtb3ZlRXZlbnQodGhpcy5lbCwgXCJtb3VzZWRvd25cIiwgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsIFwidG91Y2hlbmRcIiwgdGhpcy5fb25Nb3VzZURvd24sIHRydWUpO1xuICAgIHJlbW92ZUV2ZW50KHRoaXMuZWwsIFwiY2hhbmdlXCIsIHRoaXMuX29uQ2hhbmdlKTtcbiAgICBpZiAob3B0cy5rZXlib2FyZElucHV0KSB7XG4gICAgICByZW1vdmVFdmVudChnZXREb2N1bWVudCgpLCBcImtleWRvd25cIiwgdGhpcy5fb25LZXlDaGFuZ2UpO1xuICAgIH1cbiAgICBpZiAob3B0cy5maWVsZCkge1xuICAgICAgcmVtb3ZlRXZlbnQob3B0cy5maWVsZCwgXCJjaGFuZ2VcIiwgdGhpcy5fb25JbnB1dENoYW5nZSk7XG4gICAgICBpZiAob3B0cy5ib3VuZCkge1xuICAgICAgICByZW1vdmVFdmVudChvcHRzLnRyaWdnZXIsIFwiY2xpY2tcIiwgdGhpcy5fb25JbnB1dENsaWNrKTtcbiAgICAgICAgcmVtb3ZlRXZlbnQob3B0cy50cmlnZ2VyLCBcImZvY3VzXCIsIHRoaXMuX29uSW5wdXRGb2N1cyk7XG4gICAgICAgIHJlbW92ZUV2ZW50KG9wdHMudHJpZ2dlciwgXCJibHVyXCIsIHRoaXMuX29uSW5wdXRCbHVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuZWwucGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpO1xuICAgIH1cbiAgfVxufTtcbm1vZHVsZS5leHBvcnRzID0gUGlrYWRheTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5oYXM7XG5cbi8vIFBlcmZvcm0gPyBSZXF1aXJlSW50ZXJuYWxTbG90KE0sIFtbU2V0RGF0YV1dKVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaGFzKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgaW5kZXhPZiwgaW5jbHVkZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICAgIGlmICh2YWx1ZSAhPT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gU2FmYXJpIDwgMTMgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IgaW4gdGhpcyBjYXNlXG52YXIgU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID0gREVTQ1JJUFRPUlMgJiYgIWZ1bmN0aW9uICgpIHtcbiAgLy8gbWFrZXMgbm8gc2Vuc2Ugd2l0aG91dCBwcm9wZXIgc3RyaWN0IG1vZGUgc3VwcG9ydFxuICBpZiAodGhpcyAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5sZW5ndGggPSAxO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNJTEVOVF9PTl9OT05fV1JJVEFCTEVfTEVOR1RIX1NFVCA/IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgaWYgKGlzQXJyYXkoTykgJiYgIWdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCAnbGVuZ3RoJykud3JpdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcignQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCcpO1xuICB9IHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn0gOiBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gIHJldHVybiBPLmxlbmd0aCA9IGxlbmd0aDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UsIGV4Y2VwdGlvbnMpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpICYmICEoZXhjZXB0aW9ucyAmJiBoYXNPd24oZXhjZXB0aW9ucywga2V5KSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4gLS0gQnVuIGNhc2UgKi9cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIEJ1biA9PSAnZnVuY3Rpb24nICYmIEJ1biAmJiB0eXBlb2YgQnVuLnZlcnNpb24gPT0gJ3N0cmluZyc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09PSAncHJvY2Vzcyc7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCIndXNlIHN0cmljdCc7XG4vLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyICRFcnJvciA9IEVycm9yO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcblxudmFyIFRFU1QgPSAoZnVuY3Rpb24gKGFyZykgeyByZXR1cm4gU3RyaW5nKG5ldyAkRXJyb3IoYXJnKS5zdGFjayk7IH0pKCd6eGNhc2QnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhcicpO1xudmFyIEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGxhYmxlJyk7XG5cbi8vIG5vbi1zdGFuZGFyZCBWOFxudmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGVycm9yLCBDLCBzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgaWYgKGNhcHR1cmVTdGFja1RyYWNlKSBjYXB0dXJlU3RhY2tUcmFjZShlcnJvciwgQyk7XG4gICAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNsZWFyRXJyb3JTdGFjayhzdGFjaywgZHJvcEVudHJpZXMpKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBlcnJvciA9IG5ldyBFcnJvcignYScpO1xuICBpZiAoISgnc3RhY2snIGluIGVycm9yKSkgcmV0dXJuIHRydWU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsICdzdGFjaycsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCA3KSk7XG4gIHJldHVybiBlcnJvci5zdGFjayAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gJiYgZ2xvYmFsW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQgLS0gc2FmZVxuICB2YXIgdGVzdCA9IChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pLmJpbmQoKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiB0eXBlb2YgdGVzdCAhPSAnZnVuY3Rpb24nIHx8IHRlc3QuaGFzT3duUHJvcGVydHkoJ3Byb3RvdHlwZScpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IGNhbGwuYmluZChjYWxsKSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoY2FsbCwgYXJndW1lbnRzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbnZhciB1bmN1cnJ5VGhpc1dpdGhCaW5kID0gTkFUSVZFX0JJTkQgJiYgRnVuY3Rpb25Qcm90b3R5cGUuYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gdW5jdXJyeVRoaXNXaXRoQmluZCA6IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjYWxsLmFwcGx5KGZuLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKSA6IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNOdWxsT3JVbmRlZmluZWQoaXQpKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlcGxhY2VyKSB7XG4gIGlmIChpc0NhbGxhYmxlKHJlcGxhY2VyKSkgcmV0dXJuIHJlcGxhY2VyO1xuICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXR1cm47XG4gIHZhciByYXdMZW5ndGggPSByZXBsYWNlci5sZW5ndGg7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3TGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZWxlbWVudCA9IHJlcGxhY2VyW2ldO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnc3RyaW5nJykgcHVzaChrZXlzLCBlbGVtZW50KTtcbiAgICBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PSAnbnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnTnVtYmVyJyB8fCBjbGFzc29mKGVsZW1lbnQpID09PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbnZhciBJTlZBTElEX1NJWkUgPSAnSW52YWxpZCBzaXplJztcbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxudmFyIFNldFJlY29yZCA9IGZ1bmN0aW9uIChzZXQsIGludFNpemUpIHtcbiAgdGhpcy5zZXQgPSBzZXQ7XG4gIHRoaXMuc2l6ZSA9IG1heChpbnRTaXplLCAwKTtcbiAgdGhpcy5oYXMgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gIHRoaXMua2V5cyA9IGFDYWxsYWJsZShzZXQua2V5cyk7XG59O1xuXG5TZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJdGVyYXRvckRpcmVjdChhbk9iamVjdChjYWxsKHRoaXMua2V5cywgdGhpcy5zZXQpKSk7XG4gIH0sXG4gIGluY2x1ZGVzOiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gY2FsbCh0aGlzLmhhcywgdGhpcy5zZXQsIGl0KTtcbiAgfVxufTtcblxuLy8gYEdldFNldFJlY29yZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtc2V0LW1ldGhvZHMvI3NlYy1nZXRzZXRyZWNvcmRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICBhbk9iamVjdChvYmopO1xuICB2YXIgbnVtU2l6ZSA9ICtvYmouc2l6ZTtcbiAgLy8gTk9URTogSWYgc2l6ZSBpcyB1bmRlZmluZWQsIHRoZW4gbnVtU2l6ZSB3aWxsIGJlIE5hTlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtU2l6ZSAhPT0gbnVtU2l6ZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoSU5WQUxJRF9TSVpFKTtcbiAgdmFyIGludFNpemUgPSB0b0ludGVnZXJPckluZmluaXR5KG51bVNpemUpO1xuICBpZiAoaW50U2l6ZSA8IDApIHRocm93IG5ldyAkUmFuZ2VFcnJvcihJTlZBTElEX1NJWkUpO1xuICByZXR1cm4gbmV3IFNldFJlY29yZChvYmosIGludFNpemUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgdmFyIGNhcHR1cmU7XG4gICAgc3dpdGNoIChjaGFyQXQoY2gsIDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCAwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCB0YWlsUG9zKTtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tzdHJpbmdTbGljZShjaCwgMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaGFyQXQoY2gsIDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2hhckF0KGNoLCAxKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFua3MgdG8gSUU4IGZvciBpdHMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkJyk7XG4gICAgfSByZXR1cm4gc3RhdGU7XG4gIH07XG59O1xuXG5pZiAoTkFUSVZFX1dFQUtfTUFQIHx8IHNoYXJlZC5zdGF0ZSkge1xuICB2YXIgc3RvcmUgPSBzaGFyZWQuc3RhdGUgfHwgKHNoYXJlZC5zdGF0ZSA9IG5ldyBXZWFrTWFwKCkpO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHN0b3JlLmdldCA9IHN0b3JlLmdldDtcbiAgc3RvcmUuaGFzID0gc3RvcmUuaGFzO1xuICBzdG9yZS5zZXQgPSBzdG9yZS5zZXQ7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKHN0b3JlLmhhcyhpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT09ICdBcnJheSc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHdlIGNhbid0IHVzZSBqdXN0IGBpdCA9PSBudWxsYCBzaW5jZSBvZiBgZG9jdW1lbnQuYWxsYCBzcGVjaWFsIGNhc2Vcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3QtYWVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IG51bGwgfHwgaXQgPT09IHVuZGVmaW5lZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIGlzUHJvdG90eXBlT2YoJFN5bWJvbC5wcm90b3R5cGUsICRPYmplY3QoaXQpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlY29yZCwgZm4sIElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEKSB7XG4gIHZhciBpdGVyYXRvciA9IElURVJBVE9SX0lOU1RFQURfT0ZfUkVDT1JEID8gcmVjb3JkIDogcmVjb3JkLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHJlY29yZC5uZXh0O1xuICB2YXIgc3RlcCwgcmVzdWx0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICByZXN1bHQgPSBmbihzdGVwLnZhbHVlKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxudmFyIENPTkZJR1VSQUJMRV9MRU5HVEggPSBERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAnbGVuZ3RoJywgeyB2YWx1ZTogOCB9KS5sZW5ndGggIT09IDg7XG59KTtcblxudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG52YXIgbWFrZUJ1aWx0SW4gPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSwgb3B0aW9ucykge1xuICBpZiAoc3RyaW5nU2xpY2UoJFN0cmluZyhuYW1lKSwgMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgIG5hbWUgPSAnWycgKyByZXBsYWNlKCRTdHJpbmcobmFtZSksIC9eU3ltYm9sXFwoKFteKV0qKVxcKS4qJC8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gam9pbihURU1QTEFURSwgdHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG5cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWV4dGVuZC1uYXRpdmUgLS0gcmVxdWlyZWRcbkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IG1ha2VCdWlsdEluKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gaXNDYWxsYWJsZSh0aGlzKSAmJiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnNvdXJjZSB8fCBpbnNwZWN0U291cmNlKHRoaXMpO1xufSwgJ3RvU3RyaW5nJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1jcmVhdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllc01vZHVsZS5mKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG52YXIgaGlkZGVuS2V5cyA9IGVudW1CdWdLZXlzLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBjb25jYXQoa2V5cywgZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVGFyZ2V0LCBTb3VyY2UsIGtleSkge1xuICBrZXkgaW4gVGFyZ2V0IHx8IGRlZmluZVByb3BlcnR5KFRhcmdldCwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU291cmNlW2tleV07IH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgU291cmNlW2tleV0gPSBpdDsgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBFTkdJTkVfSVNfQlVOID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1idW4nKTtcbnZhciBVU0VSX0FHRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGgnKTtcblxudmFyIEZ1bmN0aW9uID0gZ2xvYmFsLkZ1bmN0aW9uO1xuLy8gZGlydHkgSUU5LSBhbmQgQnVuIDAuMy4wLSBjaGVja3NcbnZhciBXUkFQID0gL01TSUUgLlxcLi8udGVzdChVU0VSX0FHRU5UKSB8fCBFTkdJTkVfSVNfQlVOICYmIChmdW5jdGlvbiAoKSB7XG4gIHZhciB2ZXJzaW9uID0gZ2xvYmFsLkJ1bi52ZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiB2ZXJzaW9uLmxlbmd0aCA8IDMgfHwgdmVyc2lvblswXSA9PT0gJzAnICYmICh2ZXJzaW9uWzFdIDwgMyB8fCB2ZXJzaW9uWzFdID09PSAnMycgJiYgdmVyc2lvblsyXSA9PT0gJzAnKTtcbn0pKCk7XG5cbi8vIElFOS0gLyBCdW4gMC4zLjAtIHNldFRpbWVvdXQgLyBzZXRJbnRlcnZhbCAvIHNldEltbWVkaWF0ZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGhhc1RpbWVBcmcpIHtcbiAgdmFyIGZpcnN0UGFyYW1JbmRleCA9IGhhc1RpbWVBcmcgPyAyIDogMTtcbiAgcmV0dXJuIFdSQVAgPyBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCAvKiAsIC4uLmFyZ3VtZW50cyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IGZpcnN0UGFyYW1JbmRleDtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBwYXJhbXMgPSBib3VuZEFyZ3MgPyBhcnJheVNsaWNlKGFyZ3VtZW50cywgZmlyc3RQYXJhbUluZGV4KSA6IFtdO1xuICAgIHZhciBjYWxsYmFjayA9IGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwcGx5KGZuLCB0aGlzLCBwYXJhbXMpO1xuICAgIH0gOiBmbjtcbiAgICByZXR1cm4gaGFzVGltZUFyZyA/IHNjaGVkdWxlcihjYWxsYmFjaywgdGltZW91dCkgOiBzY2hlZHVsZXIoY2FsbGJhY2spO1xuICB9IDogc2NoZWR1bGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNldCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuICBpdGVyYXRlKHNldCwgZnVuY3Rpb24gKGl0KSB7XG4gICAgYWRkKHJlc3VsdCwgaXQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXRlcmF0ZScpO1xudmFyIGl0ZXJhdGVTaW1wbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZS1zaW1wbGUnKTtcblxudmFyIGhhcyA9IFNldEhlbHBlcnMuaGFzO1xudmFyIHJlbW92ZSA9IFNldEhlbHBlcnMucmVtb3ZlO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2Uob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAob3RoZXJSZWMuaW5jbHVkZXMoZSkpIHJlbW92ZShyZXN1bHQsIGUpO1xuICB9KTtcbiAgZWxzZSBpdGVyYXRlU2ltcGxlKG90aGVyUmVjLmdldEl0ZXJhdG9yKCksIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG52YXIgU2V0UHJvdG90eXBlID0gU2V0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICBTZXQ6IFNldCxcbiAgYWRkOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuYWRkKSxcbiAgaGFzOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGUuaGFzKSxcbiAgcmVtb3ZlOiB1bmN1cnJ5VGhpcyhTZXRQcm90b3R5cGVbJ2RlbGV0ZSddKSxcbiAgcHJvdG86IFNldFByb3RvdHlwZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgU2V0SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG52YXIgU2V0ID0gU2V0SGVscGVycy5TZXQ7XG52YXIgYWRkID0gU2V0SGVscGVycy5hZGQ7XG52YXIgaGFzID0gU2V0SGVscGVycy5oYXM7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICB2YXIgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG4gIGlmIChzaXplKE8pID4gb3RoZXJSZWMuc2l6ZSkge1xuICAgIGl0ZXJhdGVTaW1wbGUob3RoZXJSZWMuZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChoYXMoTywgZSkpIGFkZChyZXN1bHQsIGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGVTZXQoTywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChvdGhlclJlYy5pbmNsdWRlcyhlKSkgYWRkKHJlc3VsdCwgZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Etc2V0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJykuaGFzO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDw9IG90aGVyUmVjLnNpemUpIHJldHVybiBpdGVyYXRlU2V0KE8sIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKG90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbiAgdmFyIGl0ZXJhdG9yID0gb3RoZXJSZWMuZ2V0SXRlcmF0b3IoKTtcbiAgcmV0dXJuIGl0ZXJhdGVTaW1wbGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIHNpemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNpemUnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pdGVyYXRlJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3Vic2V0T2Yob3RoZXIpIHtcbiAgdmFyIE8gPSBhU2V0KHRoaXMpO1xuICB2YXIgb3RoZXJSZWMgPSBnZXRTZXRSZWNvcmQob3RoZXIpO1xuICBpZiAoc2l6ZShPKSA+IG90aGVyUmVjLnNpemUpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGl0ZXJhdGUoTywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW90aGVyUmVjLmluY2x1ZGVzKGUpKSByZXR1cm4gZmFsc2U7XG4gIH0sIHRydWUpICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaGVscGVycycpLmhhcztcbnZhciBzaXplID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zaXplJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBvdGhlclJlYyA9IGdldFNldFJlY29yZChvdGhlcik7XG4gIGlmIChzaXplKE8pIDwgb3RoZXJSZWMuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaXRlcmF0b3IgPSBvdGhlclJlYy5nZXRJdGVyYXRvcigpO1xuICByZXR1cm4gaXRlcmF0ZVNpbXBsZShpdGVyYXRvciwgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIWhhcyhPLCBlKSkgcmV0dXJuIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnLCBmYWxzZSk7XG4gIH0pICE9PSBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcblxudmFyIFNldCA9IFNldEhlbHBlcnMuU2V0O1xudmFyIFNldFByb3RvdHlwZSA9IFNldEhlbHBlcnMucHJvdG87XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBrZXlzID0gdW5jdXJyeVRoaXMoU2V0UHJvdG90eXBlLmtleXMpO1xudmFyIG5leHQgPSBrZXlzKG5ldyBTZXQoKSkubmV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc2V0LCBmbiwgaW50ZXJydXB0aWJsZSkge1xuICByZXR1cm4gaW50ZXJydXB0aWJsZSA/IGl0ZXJhdGVTaW1wbGUoeyBpdGVyYXRvcjoga2V5cyhzZXQpLCBuZXh0OiBuZXh0IH0sIGZuKSA6IGZvckVhY2goc2V0LCBmbik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBjcmVhdGVTZXRMaWtlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIHtcbiAgICBzaXplOiBzaXplLFxuICAgIGhhczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBTZXQgPSBnZXRCdWlsdEluKCdTZXQnKTtcbiAgdHJ5IHtcbiAgICBuZXcgU2V0KClbbmFtZV0oY3JlYXRlU2V0TGlrZSgwKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGxhdGUgc3BlYyBjaGFuZ2UsIGVhcmx5IFdlYktpdCB+IFNhZmFyaSAxNy4wIGJldGEgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgcGFzcyBpdFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHMvcHVsbC84OFxuICAgICAgbmV3IFNldCgpW25hbWVdKGNyZWF0ZVNldExpa2UoLTEpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBTZXRIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXNBY2Nlc3NvcihTZXRIZWxwZXJzLnByb3RvLCAnc2l6ZScsICdnZXQnKSB8fCBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBzZXQuc2l6ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYVNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXNldCcpO1xudmFyIFNldEhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKTtcbnZhciBjbG9uZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtY2xvbmUnKTtcbnZhciBnZXRTZXRSZWNvcmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1yZWNvcmQnKTtcbnZhciBpdGVyYXRlU2ltcGxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUtc2ltcGxlJyk7XG5cbnZhciBhZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBoYXMgPSBTZXRIZWxwZXJzLmhhcztcbnZhciByZW1vdmUgPSBTZXRIZWxwZXJzLnJlbW92ZTtcblxuLy8gYFNldC5wcm90b3R5cGUuc3ltbWV0cmljRGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKG90aGVyKSB7XG4gIHZhciBPID0gYVNldCh0aGlzKTtcbiAgdmFyIGtleXNJdGVyID0gZ2V0U2V0UmVjb3JkKG90aGVyKS5nZXRJdGVyYXRvcigpO1xuICB2YXIgcmVzdWx0ID0gY2xvbmUoTyk7XG4gIGl0ZXJhdGVTaW1wbGUoa2V5c0l0ZXIsIGZ1bmN0aW9uIChlKSB7XG4gICAgaWYgKGhhcyhPLCBlKSkgcmVtb3ZlKHJlc3VsdCwgZSk7XG4gICAgZWxzZSBhZGQocmVzdWx0LCBlKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFTZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1zZXQnKTtcbnZhciBhZGQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWhlbHBlcnMnKS5hZGQ7XG52YXIgY2xvbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWNsb25lJyk7XG52YXIgZ2V0U2V0UmVjb3JkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtcmVjb3JkJyk7XG52YXIgaXRlcmF0ZVNpbXBsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlLXNpbXBsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51bmlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1bmlvbihvdGhlcikge1xuICB2YXIgTyA9IGFTZXQodGhpcyk7XG4gIHZhciBrZXlzSXRlciA9IGdldFNldFJlY29yZChvdGhlcikuZ2V0SXRlcmF0b3IoKTtcbiAgdmFyIHJlc3VsdCA9IGNsb25lKE8pO1xuICBpdGVyYXRlU2ltcGxlKGtleXNJdGVyLCBmdW5jdGlvbiAoaXQpIHtcbiAgICBhZGQocmVzdWx0LCBpdCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbihzdG9yZS52ZXJzaW9ucyB8fCAoc3RvcmUudmVyc2lvbnMgPSBbXSkpLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zNy4xJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjQgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zNy4xL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgfHwge30pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgnc3ltYm9sIGRldGVjdGlvbicpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBjYWxsKGV4b3RpY1RvUHJpbSwgaW5wdXQsIHByZWYpO1xuICAgIGlmICghaXNPYmplY3QocmVzdWx0KSB8fCBpc1N5bWJvbChyZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBrZXkgKyAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJyk7XG4gIHJldHVybiBwYXNzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKFdlYWtNYXApKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQnKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaW5zdGFsbEVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEZVTExfTkFNRSwgd3JhcHBlciwgRk9SQ0VELCBJU19BR0dSRUdBVEVfRVJST1IpIHtcbiAgdmFyIFNUQUNLX1RSQUNFX0xJTUlUID0gJ3N0YWNrVHJhY2VMaW1pdCc7XG4gIHZhciBPUFRJT05TX1BPU0lUSU9OID0gSVNfQUdHUkVHQVRFX0VSUk9SID8gMiA6IDE7XG4gIHZhciBwYXRoID0gRlVMTF9OQU1FLnNwbGl0KCcuJyk7XG4gIHZhciBFUlJPUl9OQU1FID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICB2YXIgT3JpZ2luYWxFcnJvciA9IGdldEJ1aWx0SW4uYXBwbHkobnVsbCwgcGF0aCk7XG5cbiAgaWYgKCFPcmlnaW5hbEVycm9yKSByZXR1cm47XG5cbiAgdmFyIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUgPSBPcmlnaW5hbEVycm9yLnByb3RvdHlwZTtcblxuICAvLyBWOCA5LjMtIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjAwNlxuICBpZiAoIUlTX1BVUkUgJiYgaGFzT3duKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICdjYXVzZScpKSBkZWxldGUgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jYXVzZTtcblxuICBpZiAoIUZPUkNFRCkgcmV0dXJuIE9yaWdpbmFsRXJyb3I7XG5cbiAgdmFyIEJhc2VFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG5cbiAgdmFyIFdyYXBwZWRFcnJvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KElTX0FHR1JFR0FURV9FUlJPUiA/IGIgOiBhLCB1bmRlZmluZWQpO1xuICAgIHZhciByZXN1bHQgPSBJU19BR0dSRUdBVEVfRVJST1IgPyBuZXcgT3JpZ2luYWxFcnJvcihhKSA6IG5ldyBPcmlnaW5hbEVycm9yKCk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IHVuZGVmaW5lZCkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ21lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICBpbnN0YWxsRXJyb3JTdGFjayhyZXN1bHQsIFdyYXBwZWRFcnJvciwgcmVzdWx0LnN0YWNrLCAyKTtcbiAgICBpZiAodGhpcyAmJiBpc1Byb3RvdHlwZU9mKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsIHRoaXMpKSBpbmhlcml0SWZSZXF1aXJlZChyZXN1bHQsIHRoaXMsIFdyYXBwZWRFcnJvcik7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiBPUFRJT05TX1BPU0lUSU9OKSBpbnN0YWxsRXJyb3JDYXVzZShyZXN1bHQsIGFyZ3VtZW50c1tPUFRJT05TX1BPU0lUSU9OXSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgV3JhcHBlZEVycm9yLnByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3JQcm90b3R5cGU7XG5cbiAgaWYgKEVSUk9SX05BTUUgIT09ICdFcnJvcicpIHtcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFdyYXBwZWRFcnJvciwgQmFzZUVycm9yKTtcbiAgICBlbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IsIHsgbmFtZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIGlmIChERVNDUklQVE9SUyAmJiBTVEFDS19UUkFDRV9MSU1JVCBpbiBPcmlnaW5hbEVycm9yKSB7XG4gICAgcHJveHlBY2Nlc3NvcihXcmFwcGVkRXJyb3IsIE9yaWdpbmFsRXJyb3IsIFNUQUNLX1RSQUNFX0xJTUlUKTtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gIH1cblxuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvcik7XG5cbiAgaWYgKCFJU19QVVJFKSB0cnkge1xuICAgIC8vIFNhZmFyaSAxMy0gYnVnOiBXZWJBc3NlbWJseSBlcnJvcnMgZG9lcyBub3QgaGF2ZSBhIHByb3BlciBgLm5hbWVgXG4gICAgaWYgKE9yaWdpbmFsRXJyb3JQcm90b3R5cGUubmFtZSAhPT0gRVJST1JfTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE9yaWdpbmFsRXJyb3JQcm90b3R5cGUsICduYW1lJywgRVJST1JfTkFNRSk7XG4gICAgfVxuICAgIE9yaWdpbmFsRXJyb3JQcm90b3R5cGUuY29uc3RydWN0b3IgPSBXcmFwcGVkRXJyb3I7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICByZXR1cm4gV3JhcHBlZEVycm9yO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5hdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBhdDogZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgcmVsYXRpdmVJbmRleCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICAgIHZhciBrID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbiArIHJlbGF0aXZlSW5kZXg7XG4gICAgcmV0dXJuIChrIDwgMCB8fCBrID49IGxlbikgPyB1bmRlZmluZWQgOiBPW2tdO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnYXQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgc2V0QXJyYXlMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2V0LWxlbmd0aCcpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIElOQ09SUkVDVF9UT19MRU5HVEggPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbXS5wdXNoLmNhbGwoeyBsZW5ndGg6IDB4MTAwMDAwMDAwIH0sIDEpICE9PSA0Mjk0OTY3Mjk3O1xufSk7XG5cbi8vIFY4IDw9IDEyMSBhbmQgU2FmYXJpIDw9IDE1LjQ7IEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3Jcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyNjgxXG52YXIgcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLnB1c2goKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBUeXBlRXJyb3I7XG4gIH1cbn07XG5cbnZhciBGT1JDRUQgPSBJTkNPUlJFQ1RfVE9fTEVOR1RIIHx8ICFwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGgoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5wdXNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnB1c2hcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBwdXNoOiBmdW5jdGlvbiBwdXNoKGl0ZW0pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKSB7XG4gICAgICBPW2xlbl0gPSBhcmd1bWVudHNbaV07XG4gICAgICBsZW4rKztcbiAgICB9XG4gICAgc2V0QXJyYXlMZW5ndGgoTywgbGVuKTtcbiAgICByZXR1cm4gbGVuO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIHRoaXMgbWV0aG9kIHdhcyBhZGRlZCB0byB1bnNjb3BhYmxlcyBhZnRlciBpbXBsZW1lbnRhdGlvblxuLy8gaW4gcG9wdWxhciBlbmdpbmVzLCBzbyBpdCdzIG1vdmVkIHRvIGEgc2VwYXJhdGUgbW9kdWxlXG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gdGhpcyBtZXRob2Qgd2FzIGFkZGVkIHRvIHVuc2NvcGFibGVzIGFmdGVyIGltcGxlbWVudGF0aW9uXG4vLyBpbiBwb3B1bGFyIGVuZ2luZXMsIHNvIGl0J3MgbW92ZWQgdG8gYSBzZXBhcmF0ZSBtb2R1bGVcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdmbGF0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG52YXIgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXInKTtcblxuLy8gSUU4LVxudmFyIElOQ09SUkVDVF9SRVNVTFQgPSBbXS51bnNoaWZ0KDApICE9PSAxO1xuXG4vLyBWOCB+IENocm9tZSA8IDcxIGFuZCBTYWZhcmkgPD0gMTUuNCwgRkYgPCAyMyB0aHJvd3MgSW50ZXJuYWxFcnJvclxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS51bnNoaWZ0KCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1JFU1VMVCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5zaGlmdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS51bnNoaWZ0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdW5zaGlmdDogZnVuY3Rpb24gdW5zaGlmdChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAoYXJnQ291bnQpIHtcbiAgICAgIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlcihsZW4gKyBhcmdDb3VudCk7XG4gICAgICB2YXIgayA9IGxlbjtcbiAgICAgIHdoaWxlIChrLS0pIHtcbiAgICAgICAgdmFyIHRvID0gayArIGFyZ0NvdW50O1xuICAgICAgICBpZiAoayBpbiBPKSBPW3RvXSA9IE9ba107XG4gICAgICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXJnQ291bnQ7IGorKykge1xuICAgICAgICBPW2pdID0gYXJndW1lbnRzW2pdO1xuICAgICAgfVxuICAgIH0gcmV0dXJuIHNldEFycmF5TGVuZ3RoKE8sIGxlbiArIGFyZ0NvdW50KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgZnVuY3Rpb25zIGAubGVuZ3RoYCAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgd3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlJyk7XG5cbnZhciBXRUJfQVNTRU1CTFkgPSAnV2ViQXNzZW1ibHknO1xudmFyIFdlYkFzc2VtYmx5ID0gZ2xvYmFsW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmZyb21FbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1mcm9tLWVudHJpZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbUVudHJpZXM6IGZ1bmN0aW9uIGZyb21FbnRyaWVzKGl0ZXJhYmxlKSB7XG4gICAgdmFyIG9iaiA9IHt9O1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShvYmosIGssIHYpO1xuICAgIH0sIHsgQVNfRU5UUklFUzogdHJ1ZSB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGRpZmZlcmVuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnZGlmZmVyZW5jZScpIH0sIHtcbiAgZGlmZmVyZW5jZTogZGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVyc2VjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaW50ZXJzZWN0aW9uJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG52YXIgSU5DT1JSRUNUID0gIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2ludGVyc2VjdGlvbicpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIGVzL25vLXNldCAtLSB0ZXN0aW5nXG4gIHJldHVybiBTdHJpbmcoQXJyYXkuZnJvbShuZXcgU2V0KFsxLCAyLCAzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsIDJdKSkpKSAhPT0gJzMsMic7XG59KTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUIH0sIHtcbiAgaW50ZXJzZWN0aW9uOiBpbnRlcnNlY3Rpb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNEaXNqb2ludEZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWlzLWRpc2pvaW50LWZyb20nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzRGlzam9pbnRGcm9tJykgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogaXNEaXNqb2ludEZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdWJzZXRPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtaXMtc3Vic2V0LW9mJyk7XG52YXIgc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtbWV0aG9kLWFjY2VwdC1zZXQtbGlrZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3Vic2V0T2YnKSB9LCB7XG4gIGlzU3Vic2V0T2Y6IGlzU3Vic2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNTdXBlcnNldE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1pcy1zdXBlcnNldC1vZicpO1xudmFyIHNldE1ldGhvZEFjY2VwdFNldExpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LW1ldGhvZC1hY2NlcHQtc2V0LWxpa2UnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdXBlcnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ2lzU3VwZXJzZXRPZicpIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBpc1N1cGVyc2V0T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc3ltbWV0cmljRGlmZmVyZW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3ltbWV0cmljLWRpZmZlcmVuY2UnKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiAhc2V0TWV0aG9kQWNjZXB0U2V0TGlrZSgnc3ltbWV0cmljRGlmZmVyZW5jZScpIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogc3ltbWV0cmljRGlmZmVyZW5jZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdW5pb24nKTtcbnZhciBzZXRNZXRob2RBY2NlcHRTZXRMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1tZXRob2QtYWNjZXB0LXNldC1saWtlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogIXNldE1ldGhvZEFjY2VwdFNldExpa2UoJ3VuaW9uJykgfSwge1xuICB1bmlvbjogdW5pb25cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZWFsbFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlIH0sIHtcbiAgcmVwbGFjZUFsbDogZnVuY3Rpb24gcmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgIHZhciBJU19SRUdfRVhQLCBmbGFncywgcmVwbGFjZXIsIHN0cmluZywgc2VhcmNoU3RyaW5nLCBmdW5jdGlvbmFsUmVwbGFjZSwgc2VhcmNoTGVuZ3RoLCBhZHZhbmNlQnksIHJlcGxhY2VtZW50O1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGVuZE9mTGFzdE1hdGNoID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkpIHtcbiAgICAgIElTX1JFR19FWFAgPSBpc1JlZ0V4cChzZWFyY2hWYWx1ZSk7XG4gICAgICBpZiAoSVNfUkVHX0VYUCkge1xuICAgICAgICBmbGFncyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoZ2V0UmVnRXhwRmxhZ3Moc2VhcmNoVmFsdWUpKSk7XG4gICAgICAgIGlmICghfmluZGV4T2YoZmxhZ3MsICdnJykpIHRocm93IG5ldyAkVHlwZUVycm9yKCdgLnJlcGxhY2VBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcycpO1xuICAgICAgfVxuICAgICAgcmVwbGFjZXIgPSBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgaWYgKHJlcGxhY2VyKSB7XG4gICAgICAgIHJldHVybiBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoSVNfUFVSRSAmJiBJU19SRUdfRVhQKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlKHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyaW5nID0gdG9TdHJpbmcoTyk7XG4gICAgc2VhcmNoU3RyaW5nID0gdG9TdHJpbmcoc2VhcmNoVmFsdWUpO1xuICAgIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgc2VhcmNoTGVuZ3RoID0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgICBhZHZhbmNlQnkgPSBtYXgoMSwgc2VhcmNoTGVuZ3RoKTtcbiAgICBwb3NpdGlvbiA9IGluZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcpO1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIHJlcGxhY2VtZW50ID0gZnVuY3Rpb25hbFJlcGxhY2VcbiAgICAgICAgPyB0b1N0cmluZyhyZXBsYWNlVmFsdWUoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiwgc3RyaW5nKSlcbiAgICAgICAgOiBnZXRTdWJzdGl0dXRpb24oc2VhcmNoU3RyaW5nLCBzdHJpbmcsIHBvc2l0aW9uLCBbXSwgdW5kZWZpbmVkLCByZXBsYWNlVmFsdWUpO1xuICAgICAgcmVzdWx0ICs9IHN0cmluZ1NsaWNlKHN0cmluZywgZW5kT2ZMYXN0TWF0Y2gsIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgZW5kT2ZMYXN0TWF0Y2ggPSBwb3NpdGlvbiArIHNlYXJjaExlbmd0aDtcbiAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gKyBhZHZhbmNlQnkgPiBzdHJpbmcubGVuZ3RoID8gLTEgOiBpbmRleE9mKHN0cmluZywgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiArIGFkdmFuY2VCeSk7XG4gICAgfVxuICAgIGlmIChlbmRPZkxhc3RNYXRjaCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmdTbGljZShzdHJpbmcsIGVuZE9mTGFzdE1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQuZGlmZmVyZW5jZS52MicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmludGVyc2VjdGlvbi52MicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LmlzLWRpc2pvaW50LWZyb20udjInKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdWJzZXQtb2YudjInKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldC5pcy1zdXBlcnNldC1vZi52MicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLnYyJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zZXQudW5pb24udjInKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjbGVhckltbWVkaWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuY2xlYXI7XG5cbi8vIGBjbGVhckltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLWNsZWFySW1tZWRpYXRlXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IGdsb2JhbC5jbGVhckltbWVkaWF0ZSAhPT0gY2xlYXJJbW1lZGlhdGUgfSwge1xuICBjbGVhckltbWVkaWF0ZTogY2xlYXJJbW1lZGlhdGVcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbW9kdWxlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBzcGxpdCB0byBtb2R1bGVzIGxpc3RlZCBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuY2xlYXItaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi5zZXQtaW1tZWRpYXRlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIHNjaGVkdWxlcnNGaXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2NoZWR1bGVycy1maXgnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL292ZW4tc2gvYnVuL2lzc3Vlcy8xNjMzXG52YXIgc2V0SW1tZWRpYXRlID0gZ2xvYmFsLnNldEltbWVkaWF0ZSA/IHNjaGVkdWxlcnNGaXgoc2V0VGFzaywgZmFsc2UpIDogc2V0VGFzaztcblxuLy8gYHNldEltbWVkaWF0ZWAgbWV0aG9kXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLXNldEltbWVkaWF0ZVxuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBnbG9iYWwuc2V0SW1tZWRpYXRlICE9PSBzZXRJbW1lZGlhdGUgfSwge1xuICBzZXRJbW1lZGlhdGU6IHNldEltbWVkaWF0ZVxufSk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCJpbXBvcnQgQ3Jlc3NWaWV3IGZyb20gJy4uLy4uL3NyYy9DcmVzc1ZpZXcnO1xuaW1wb3J0IHsgcGFyc2VXT1JEIH0gZnJvbSAnLi4vLi4vc3JjL0Rhc2hib2FyZC9TdG9yYWdlJztcbmltcG9ydCB7IElFbnRyeSwgSUZvbGRlciB9IGZyb20gJy4uLy4uL3NyYy9EYXNoYm9hcmQvRmlsZVN5c3RlbSc7XG5pbXBvcnQgeyBDcmVzc0RvYywgRG9jLCBHbHlwaEFycmF5IH0gZnJvbSAnLi4vLi4vc3JjL1R5cGVzJztcbmltcG9ydCBQb3VjaERCIGZyb20gJ3BvdWNoZGInO1xuaW1wb3J0ICogYXMgUGFwYSBmcm9tICdwYXBhcGFyc2UnO1xuXG5jb25zdCBzYW1wbGVJZCA9IGdldEdldFBhcmFtKCdzYW1wbGUnKTtcbmNvbnN0IHVwbG9hZElkID0gZ2V0R2V0UGFyYW0oJ3VwbG9hZCcpO1xuXG5pZiAoc2FtcGxlSWQpIHtcbiAgY29uc3QgZnMgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NyZXNzLWZzJyk7XG4gIGlmIChmcykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBsb2NhbEZpbGVTeXN0ZW0gPSBKU09OLnBhcnNlKGZzKSBhcyBJRm9sZGVyO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBmaW5kRmlsZU5hbWVCeUlkKGxvY2FsRmlsZVN5c3RlbSk7XG4gICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgbGV0IGZpbGVQYXRoID0gYC4vQ3Jlc3MtZ2gvYXNzZXRzL3NhbXBsZXMvJHtmaWxlbmFtZX1gO1xuICAgICAgICB3aW5kb3dcbiAgICAgICAgICAuZmV0Y2goZmlsZVBhdGgpXG4gICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8gZ2V0IGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgICAgICAgIGxldCBleHRlbnNpb24gPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uID09PSAnY3N2Jykge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBjc3Ygc2FtcGxlXG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0cyA9IFBhcGEucGFyc2UodGV4dCwgeyBoZWFkZXI6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgbGV0IGNyZXNzRG9jOiBDcmVzc0RvYyA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBzYW1wbGVJZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyOiByZXN1bHRzLm1ldGEuZmllbGRzLFxuICAgICAgICAgICAgICAgICAgYm9keTogcmVzdWx0cy5kYXRhLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IG5ldyBDcmVzc1ZpZXcoY3Jlc3NEb2MpO1xuICAgICAgICAgICAgICAgIHZpZXcuc3RhcnQoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRlbnNpb24gPT09ICdkb2N4Jykge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBkb2N4IHNhbXBsZVxuICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyczogc3RyaW5nW10sIGRhdGE6IGFueVtdO1xuICAgICAgICAgICAgICAgIFtoZWFkZXJzLCBkYXRhXSA9IGF3YWl0IHBhcnNlV09SRChhcnJheUJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgbGV0IGNyZXNzRG9jOiBDcmVzc0RvYyA9IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBzYW1wbGVJZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgaGVhZGVyOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgQ3Jlc3NWaWV3KGNyZXNzRG9jKTtcbiAgICAgICAgICAgICAgICB2aWV3LnN0YXJ0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZpbmRpbmcgZmlsZSBpbiBsb2NhbCBmaWxlIHN5c3RlbS4nKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIGxvY2FsIGZpbGUgc3lzdGVtOicsIGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKCdMb2NhbCBmaWxlIHN5c3RlbSBkYXRhIG5vdCBmb3VuZC4nKTtcbiAgfVxufSBlbHNlIHtcbiAgY29uc3QgZGIgPSBuZXcgUG91Y2hEQignQ3Jlc3MtVXNlci1TdG9yYWdlJyk7XG4gIGRiLmdldEF0dGFjaG1lbnQodXBsb2FkSWQsICd0YWJsZScpXG4gICAgLnRoZW4oKGJsb2IpID0+IHtcbiAgICAgIHJldHVybiBuZXcgd2luZG93LlJlc3BvbnNlKGJsb2IpLmpzb24oKTtcbiAgICB9KVxuICAgIC50aGVuKGFzeW5jICh0YWJsZSkgPT4ge1xuICAgICAgY29uc29sZS5sb2codGFibGUpO1xuICAgICAgY29uc3QgZG9jOiBEb2MgPSBhd2FpdCBkYi5nZXQodXBsb2FkSWQpO1xuICAgICAgY29uc3QgbmFtZSA9IGRvYy5uYW1lO1xuICAgICAgbGV0IGNyZXNzRG9jOiBDcmVzc0RvYyA9IHtcbiAgICAgICAgaWQ6IHVwbG9hZElkLFxuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICBoZWFkZXI6IHRhYmxlWzBdLFxuICAgICAgICBib2R5OiB0YWJsZS5zbGljZSgxKSxcbiAgICAgIH07XG4gICAgICBjb25zdCB2aWV3ID0gbmV3IENyZXNzVmlldyhjcmVzc0RvYyk7XG4gICAgICB2aWV3LnN0YXJ0KCk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEdldFBhcmFtKHBhcmFtTmFtZSk6IHN0cmluZyB7XG4gIGxldCByZXN1bHQ7XG5cbiAgd2luZG93LmxvY2F0aW9uLnNlYXJjaFxuICAgIC5zdWJzdHIoMSlcbiAgICAuc3BsaXQoJyYnKVxuICAgIC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB0bXAgPSBpdGVtLnNwbGl0KCc9Jyk7XG4gICAgICBpZiAodG1wWzBdID09PSBwYXJhbU5hbWUpIHtcbiAgICAgICAgcmVzdWx0ID0gZGVjb2RlVVJJQ29tcG9uZW50KHRtcFsxXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8vIFJlY3Vyc2l2ZSBmdW5jdGlvbiB0byBmaW5kIHRoZSBmaWxlbmFtZSBieSBJRFxuZnVuY3Rpb24gZmluZEZpbGVOYW1lQnlJZChub2RlOiBJRW50cnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKG5vZGUuaWQgPT09IHNhbXBsZUlkKSB7XG4gICAgcmV0dXJuIG5vZGUubmFtZTtcbiAgfVxuXG4gIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmaW5kRmlsZU5hbWVCeUlkKGNoaWxkKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZGF0YUxpc3RUb0RpY3Qocm93czogYW55W10pIHtcbiAgbGV0IGhlYWRlcnMgPSByb3dzWzBdO1xuICBjb25zdCBnbHlwaEFycmF5OiBHbHlwaEFycmF5ID0gW107XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGdseXBoOiBhbnkgPSB7fTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGhlYWRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGdseXBoW2hlYWRlcnNbal1dID0gcm93c1tpXVtqXTtcbiAgICB9XG4gICAgZ2x5cGhBcnJheS5wdXNoKGdseXBoKTtcbiAgfVxuICByZXR1cm4gZ2x5cGhBcnJheTtcbn1cbiJdLCJuYW1lcyI6WyJob3RrZXlzTW9kYWwiLCJlcnJvckxvZ3NQYW5lbENvbnRlbnRzIiwiY29uc3RydWN0b3IiLCJjcmVzc0RvYyIsInRoaXMiLCJpZCIsIm5hbWUiLCJoZWFkZXIiLCJib2R5Iiwic3RhcnQiLCJ0aGVuIiwibW9kYWwiLCJNb2RhbFdpbmRvdyIsImxpc3RlblVuc2F2ZWRDaGFuZ2VzIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInN0eWxlIiwiZGlzcGxheSIsInRhYmxlIiwiQ3Jlc3NUYWJsZSIsInVwbG9hZEFyZWFIVE1MIiwibmV3Rm9sZGVySFRNTCIsInJlbmFtZUhUTUwiLCJhc3luYyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZGIiLCJhbGxEb2NzIiwiaW5jbHVkZV9kb2NzIiwicmVzdWx0IiwiY2F0Y2giLCJlcnIiLCJyb3dzIiwibWFwIiwicm93IiwiZG9jIiwiY29uc29sZSIsImxvZyIsIm1lc3NhZ2UiLCJmaWxlIiwidHlwZSIsImhlYWRlcnMiLCJkYXRhIiwiUGFwYSIsInBhcnNlIiwiZHluYW1pY1R5cGluZyIsImNvbXBsZXRlIiwicmVzdWx0cyIsImVycm9ycyIsImxlbmd0aCIsIkVycm9yIiwibWV0YSIsImZpZWxkcyIsImVycm9yIiwicGFyc2VDU1YiLCJ3b3JrYm9vayIsIldvcmtib29rIiwid29ya3NoZWV0IiwieGxzeCIsImxvYWQiLCJhcnJheUJ1ZmZlciIsIndvcmtzaGVldHMiLCJoZWFkZXJOYW1lcyIsImVhY2hSb3ciLCJpbmNsdWRlRW1wdHkiLCJyb3dOdW1iZXIiLCJ2YWx1ZXMiLCJmb3JFYWNoIiwicHVzaCIsInRvU3RyaW5nIiwicm93RGF0YSIsImNlbGwiLCJjZWxsTnVtYmVyIiwiaGVhZGVyS2V5IiwiaW1hZ2VIZWFkZXIiLCJmaW5kIiwiaW5jbHVkZXMiLCJpbWFnZSIsImdldEltYWdlcyIsImltZyIsIm1vZGVsIiwibWVkaWEiLCJtIiwiaW5kZXgiLCJpbWFnZUlkIiwiYmFzZTY0IiwiYnVmZmVyIiwiZGF0YVVybCIsInJhbmdlIiwidGwiLCJuYXRpdmVSb3ciLCJwYXJzZVhMU1giLCJwYXJzZVdPUkQiLCJCbG9iIiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbnRlbnQiLCJwdXQiLCJfaWQiLCJfYXR0YWNobWVudHMiLCJjb250ZW50X3R5cGUiLCJ3aW5kb3ciLCJhbGVydCIsImdldCIsInJlbW92ZSIsIl8iLCJuZXdOYW1lIiwianNvbkJsb2IiLCJtYW1tb3RoIiwiY29udmVydFRvSHRtbCIsImh0bWwiLCJ2YWx1ZSIsIm1lc3NhZ2VzIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJoZWFkZXJFbGVtZW50cyIsIkFycmF5IiwiZnJvbSIsImVsZW1lbnQiLCJpbm5lclRleHQiLCJkZWxldGVSb3ciLCJqIiwiY2VsbHMiLCJrIiwicGFyYWdyYXBocyIsInRleHQiLCJwIiwidGV4dENvbnRlbnQiLCJpbWFnZXMiLCJpbWdTcmMiLCJzcmMiLCJpbnB1dEhlYWRlciIsImdldENvbHVtbnMiLCJjb2x1bW5zIiwiaSIsImlucHV0SW1nSGVhZGVyIiwicmVuZGVyZXIiLCJyZWFkT25seSIsImdldENvbFdpZHRocyIsImdldEluZGljZXMiLCJnZXRNZWlEYXRhIiwibWVpIiwiY29udmVydE1laVF1b3RlU2lnbiIsInJlcGxhY2UiLCJjaGFuZ2VIb29rcyIsImNvbnRhaW5lciIsImltYWdlVG9vbHMiLCJJbWFnZVRvb2xzIiwibWVpVG9vbHMiLCJNZWlUb29scyIsInZhbGlkYXRpb25Ub29scyIsIlZhbGlkYXRpb25Ub29scyIsImV4cG9ydFRvb2xzIiwiRXhwb3J0VG9vbHMiLCJjb2x1bW5Ub29scyIsIkNvbHVtblRvb2xzIiwicmVuZGVyZXJzIiwicmVnaXN0ZXJSZW5kZXJlciIsImltZ1JlbmRlciIsImJpbmQiLCJtZWlSZW5kZXIiLCJjb2xXaWR0aHMiLCJpbmRpY2VzIiwiU3RyaW5nIiwic3RvcmVJbWFnZXMiLCJpbnB1dE1laUhlYWRlciIsImluaXRNZWlEYXRhIiwic3RhcnRDb2xzIiwic3RhcnRSb3dzIiwiaGVpZ2h0Iiwid2lkdGgiLCJtYW51YWxSb3dSZXNpemUiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJtYW51YWxSb3dNb3ZlIiwic2VsZWN0aW9uTW9kZSIsInJvd0hlaWdodHMiLCJyb3dIZWFkZXJzIiwiY29sSGVhZGVycyIsInN0cmV0Y2hIIiwibWluU3BhcmVSb3dzIiwiYXV0b1dyYXBSb3ciLCJhdXRvV3JhcENvbCIsImNvbnRleHRNZW51IiwiZHJvcGRvd25NZW51IiwiY2xhc3NOYW1lIiwibGljZW5zZUtleSIsImFmdGVyQ2hhbmdlIiwiY2hhbmdlcyIsInNvdXJjZSIsInZhbGlkYXRlTWVpIiwiaW5pdEZpbGVMaXN0ZW5lciIsImluaXRDaGFuZ2VMaXN0ZW5lciIsImV4cG9ydFBsdWdpbiIsImdldFBsdWdpbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJleHBvcnRUb0NzdiIsImV4cG9ydFRvRXhjZWwiLCJ1cGRhdGVBdHRhY2htZW50Iiwic2V0U2F2ZWRTdGF0dXMiLCJOb3RpZmljYXRpb24iLCJxdWV1ZU5vdGlmaWNhdGlvbiIsImV2dCIsImtleSIsImhvb2siLCJhZGRIb29rIiwic2V0UHJvY2Vzc1N0YXR1cyIsIm1laVZhbGlkYXRvciIsImlzVmFsaWQiLCJlcnJvck1zZyIsInVwZGF0ZU1laURhdGEiLCJyZW5kZXIiLCJzZXRSZXN1bHRTdGF0dXMiLCJwcm9wIiwib2xkVmFsdWUiLCJuZXdWYWx1ZSIsInVuZGVmaW5lZCIsImRvd25sb2FkRmlsZSIsImJvbSIsImNvbHVtbkRlbGltaXRlciIsImNvbHVtbkhlYWRlcnMiLCJleHBvcnRIaWRkZW5Db2x1bW5zIiwiZXhwb3J0SGlkZGVuUm93cyIsImZpbGVFeHRlbnNpb24iLCJmaWxlbmFtZSIsIm1pbWVUeXBlIiwicm93RGVsaW1pdGVyIiwiYWRkV29ya3NoZWV0IiwicHJvcGVydGllcyIsImRlZmF1bHRSb3dIZWlnaHQiLCJhZGRSb3ciLCJpbnB1dEN1cnJlbnRIZWFkZXIiLCJjZWxsVmFsdWUiLCJhZGRJbWFnZSIsImV4dGVuc2lvbiIsImNvbCIsImV4dCIsImluc2VydFJvdyIsImNvbHVtbiIsImVhY2hDZWxsIiwiYWxpZ25tZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwid3JhcFRleHQiLCJjdXJyZW50RGF0ZSIsIkRhdGUiLCJmaWxlTmFtZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJwYWRTdGFydCIsImdldERhdGUiLCJ3cml0ZUJ1ZmZlciIsImJsb2IiLCJzYXZlQXMiLCJyb3dJbmRleCIsImJhc2U2NEltYWdlIiwiZ2V0SW1hZ2VEaW1lbnNpb25zIiwiYmFzZTY0U3RyaW5nIiwiSW1hZ2UiLCJvbmxvYWQiLCJ3aWR0aFJhdGlvIiwiaGVpZ2h0UmF0aW8iLCJyYXRpbyIsIk1hdGgiLCJtaW4iLCJtYXgiLCJvbmVycm9yIiwiaW5zdGFuY2UiLCJ0ZCIsImNlbGxQcm9wZXJ0aWVzIiwiZG9tIiwiZW1wdHkiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiaW1nQ29udGFpbmVyIiwiY3JlYXRlSW1hZ2VFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJyZXNpemVIYW5kbGUiLCJjcmVhdGVSZXNpemVIYW5kbGUiLCJtYWtlSW1hZ2VSZXNpemFibGUiLCJidXR0b25zIiwiY3JlYXRlQnV0dG9ucyIsImlucHV0IiwiaGFuZGxlSW1nVXBsb2FkIiwidXBsb2FkSW1nQnV0dG9uIiwidXBsb2FkSW1nSWNvbiIsImFsdCIsImltZ0lucHV0IiwiYWNjZXB0IiwiY2xpY2siLCJldmVudCIsInRhcmdldCIsImZpbGVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsImUiLCJzZXREYXRhQXRDZWxsIiwicmVhZEFzRGF0YVVSTCIsIm92ZXJmbG93IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJwcmV2ZW50RGVmYXVsdCIsImJhY2tncm91bmRDb2xvciIsInBvc2l0aW9uIiwicmlnaHQiLCJib3R0b20iLCJjdXJzb3IiLCJzdGFydFgiLCJjbGllbnRYIiwic3RhcnRZIiwiY2xpZW50WSIsInN0YXJ0V2lkdGgiLCJvZmZzZXRXaWR0aCIsInN0YXJ0SGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0Iiwib25Nb3VzZU1vdmUiLCJuZXdXaWR0aCIsIm5ld0hlaWdodCIsIm9uTW91c2VVcCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJidXR0b25Db250YWluZXIiLCJkZWxldGVCdXR0b24iLCJkZWxldGVJY29uIiwidGl0bGUiLCJjaGFuZ2VCdXR0b24iLCJjaGFuZ2VJY29uIiwicXVlcnlTZWxlY3RvciIsInZhbGlkYXRpb25JblByb2dyZXNzIiwicGVuZGluZ1ZhbGlkYXRpb25zIiwiaGFzSW52YWxpZCIsIm1laURhdGEiLCJ1cGRhdGVTdGF0dXMiLCJpbnZhbGlkQ29udGFpbmVyIiwidG9vbHRpcENvbnRhaW5lciIsInRvb2x0aXBDb250ZW50IiwiY29weUJ0biIsInRvb2x0aXBJY29uIiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0Iiwic3RhdHVzIiwibWVpU3RhdHVzIiwiY29sb3IiLCJzY2hlbWFQcm9taXNlIiwidGVtcGxhdGVQcm9taXNlIiwiZmV0Y2hTY2hlbWFBbmRUZW1wbGF0ZSIsImZldGNoIiwicmVzcG9uc2UiLCJzY2hlbWEiLCJtZWlUZW1wbGF0ZSIsInZhbGlkYXRlTUVJIiwibGluZSIsIm1laURvYyIsImRvY3VtZW50RWxlbWVudCIsImlubmVySFRNTCIsInRvQmVWYWxpZGF0ZWQiLCJYTUxTZXJpYWxpemVyIiwic2VyaWFsaXplVG9TdHJpbmciLCJ3b3JrZXIiLCJXb3JrZXIiLCJwb3N0TWVzc2FnZSIsIm9ubWVzc2FnZSIsInRlcm1pbmF0ZSIsIk1vZGFsV2luZG93VmlldyIsIk1vZGFsV2luZG93U3RhdGUiLCJvcGVuRWRpdFN5bFRleHRNb2RhbFdpbmRvdyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJlbGVtIiwiaGlkZU1vZGFsV2luZG93IiwidXBkYXRlU3lsVGV4dCIsImZvY3VzTW9kYWxXaW5kb3ciLCJrZXlkb3duTGlzdGVuZXIiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJtb2RhbFdpbmRvd1ZpZXciLCJET0NVTUVOVF9VUExPQUQiLCJORVdfRk9MREVSIiwiUkVOQU1FIiwiZm9jdXMiLCJtb2RhbFdpbmRvd1N0YXRlIiwiQ0xPU0VEIiwic2V0dXBFdmVudExpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwic2V0TW9kYWxXaW5kb3dWaWV3IiwidmlldyIsInNldE1vZGFsV2luZG93Q29udGVudCIsImdldE1vZGFsV2luZG93VmlldyIsIm9wZW5Nb2RhbFdpbmRvdyIsIkhPVEtFWVMiLCJNT1ZFX1RPIiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwiT1BFTiIsIkVSUk9SX0xPRyIsImVuY29kZVVSSSIsInVwZGF0ZVNlbGVjdGVkQkJveCIsInNwYW4iLCJub3RpZmljYXRpb25zIiwiY3VycmVudE1vZGVNZXNzYWdlIiwiTlVNQkVSX1RPX0RJU1BMQVkiLCJUSU1FT1VUIiwibm90aWZpY2F0aW9uSWNvbiIsImRlZmF1bHQiLCJ3YXJuaW5nIiwic3VjY2VzcyIsImxvZ0luZm8iLCJkaXNwbGF5ZWQiLCJpc01vZGVNZXNzYWdlIiwic2VhcmNoIiwidGltZW91dElEIiwic2V0VGltZW91dElkIiwiZ2V0SWQiLCJjbGVhck5vdGlmaWNhdGlvbiIsImN1cnJlbnRJZCIsIm5vdGlmaWNhdGlvbkNvbnRlbnQiLCJub3RpZmljYXRpb24iLCJjbGVhclRpbWVvdXQiLCJzaGlmdCIsIm5ld05vdGlmaWNhdGlvbiIsImFwcGVuZCIsImRpc3BsYXlOb3RpZmljYXRpb24iLCJzZXRUaW1lb3V0IiwiY3Jlc3NWaWV3IiwiZWwiLCJpbmRpY2F0b3IiLCJzZXRBdHRyaWJ1dGUiLCJzYXZlZCIsInBhdGgiLCJhbHRNZXNzYWdlIiwidXBkYXRlSW5kaWNhdG9yIiwib25iZWZvcmV1bmxvYWQiLCJtb2R1bGUiLCJleHBvcnRzIiwiX3R5cGVvZiIsIm9iaiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwicHJvdG90eXBlIiwiX3NldFByb3RvdHlwZU9mIiwibyIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsImFyZ3MiLCJDbGFzcyIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJCb29sZWFuIiwidmFsdWVPZiIsImNhbGwiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiYSIsImFwcGx5IiwiRnVuY3Rpb24iLCJhcmd1bWVudHMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJhcnIiLCJpc0FycmF5IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsIm4iLCJzbGljZSIsInRlc3QiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJUeXBlRXJyb3IiLCJfbm9uSXRlcmFibGVTcHJlYWQiLCJsZW4iLCJhcnIyIiwiaGFzT3duUHJvcGVydHkiLCJpc0Zyb3plbiIsImdldFByb3RvdHlwZU9mIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZnJlZXplIiwic2VhbCIsImNyZWF0ZSIsIl9yZWYiLCJmdW4iLCJ0aGlzVmFsdWUiLCJ4IiwiRnVuYyIsImZ1bmMiLCJhcnJheUZvckVhY2giLCJ1bmFwcGx5IiwiYXJyYXlQb3AiLCJwb3AiLCJhcnJheVB1c2giLCJzdHJpbmdUb0xvd2VyQ2FzZSIsInRvTG93ZXJDYXNlIiwic3RyaW5nVG9TdHJpbmciLCJzdHJpbmdNYXRjaCIsIm1hdGNoIiwic3RyaW5nUmVwbGFjZSIsInN0cmluZ0luZGV4T2YiLCJpbmRleE9mIiwic3RyaW5nVHJpbSIsInRyaW0iLCJyZWdFeHBUZXN0IiwiUmVnRXhwIiwidHlwZUVycm9yQ3JlYXRlIiwiX2xlbjIiLCJfa2V5MiIsIm51bWJlcklzTmFOIiwiaXNOYU4iLCJ0aGlzQXJnIiwiX2xlbiIsIl9rZXkiLCJhZGRUb1NldCIsInNldCIsImFycmF5IiwidHJhbnNmb3JtQ2FzZUZ1bmMiLCJfdHJhbnNmb3JtQ2FzZUZ1bmMiLCJsIiwibGNFbGVtZW50IiwiY2xvbmUiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIm5ld09iamVjdCIsImxvb2t1cEdldHRlciIsImRlc2MiLCJ3YXJuIiwiaHRtbCQxIiwic3ZnJDEiLCJzdmdGaWx0ZXJzIiwic3ZnRGlzYWxsb3dlZCIsIm1hdGhNbCQxIiwibWF0aE1sRGlzYWxsb3dlZCIsInN2ZyIsIm1hdGhNbCIsInhtbCIsIk1VU1RBQ0hFX0VYUFIiLCJFUkJfRVhQUiIsIlRNUExJVF9FWFBSIiwiREFUQV9BVFRSIiwiQVJJQV9BVFRSIiwiSVNfQUxMT1dFRF9VUkkiLCJJU19TQ1JJUFRfT1JfREFUQSIsIkFUVFJfV0hJVEVTUEFDRSIsIkRPQ1RZUEVfTkFNRSIsIkNVU1RPTV9FTEVNRU5UIiwiZ2V0R2xvYmFsIiwiY3JlYXRlRE9NUHVyaWZ5IiwiRE9NUHVyaWZ5Iiwicm9vdCIsInZlcnNpb24iLCJyZW1vdmVkIiwibm9kZVR5cGUiLCJpc1N1cHBvcnRlZCIsIm9yaWdpbmFsRG9jdW1lbnQiLCJEb2N1bWVudEZyYWdtZW50IiwiSFRNTFRlbXBsYXRlRWxlbWVudCIsIk5vZGUiLCJFbGVtZW50IiwiTm9kZUZpbHRlciIsIl93aW5kb3ckTmFtZWROb2RlTWFwIiwiTmFtZWROb2RlTWFwIiwiTW96TmFtZWRBdHRyTWFwIiwiSFRNTEZvcm1FbGVtZW50IiwidHJ1c3RlZFR5cGVzIiwiRWxlbWVudFByb3RvdHlwZSIsImNsb25lTm9kZSIsImdldE5leHRTaWJsaW5nIiwiZ2V0Q2hpbGROb2RlcyIsImdldFBhcmVudE5vZGUiLCJ0ZW1wbGF0ZSIsIm93bmVyRG9jdW1lbnQiLCJ0cnVzdGVkVHlwZXNQb2xpY3kiLCJjcmVhdGVQb2xpY3kiLCJzdWZmaXgiLCJBVFRSX05BTUUiLCJjdXJyZW50U2NyaXB0IiwiaGFzQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwicG9saWN5TmFtZSIsImNyZWF0ZUhUTUwiLCJjcmVhdGVTY3JpcHRVUkwiLCJzY3JpcHRVcmwiLCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5IiwiZW1wdHlIVE1MIiwiX2RvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaW1wb3J0Tm9kZSIsImRvY3VtZW50TW9kZSIsImhvb2tzIiwiY3JlYXRlSFRNTERvY3VtZW50IiwiUEFSU0VSX01FRElBX1RZUEUiLCJNVVNUQUNIRV9FWFBSJDEiLCJFUkJfRVhQUiQxIiwiVE1QTElUX0VYUFIkMSIsIkRBVEFfQVRUUiQxIiwiQVJJQV9BVFRSJDEiLCJJU19TQ1JJUFRfT1JfREFUQSQxIiwiQVRUUl9XSElURVNQQUNFJDEiLCJDVVNUT01fRUxFTUVOVCQxIiwiSVNfQUxMT1dFRF9VUkkkMSIsIkFMTE9XRURfVEFHUyIsIkRFRkFVTFRfQUxMT1dFRF9UQUdTIiwiY29uY2F0IiwiQUxMT1dFRF9BVFRSIiwiREVGQVVMVF9BTExPV0VEX0FUVFIiLCJDVVNUT01fRUxFTUVOVF9IQU5ETElORyIsInRhZ05hbWVDaGVjayIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImF0dHJpYnV0ZU5hbWVDaGVjayIsImFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyIsIkZPUkJJRF9UQUdTIiwiRk9SQklEX0FUVFIiLCJBTExPV19BUklBX0FUVFIiLCJBTExPV19EQVRBX0FUVFIiLCJBTExPV19VTktOT1dOX1BST1RPQ09MUyIsIkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUiIsIlNBRkVfRk9SX1RFTVBMQVRFUyIsIlNBRkVfRk9SX1hNTCIsIldIT0xFX0RPQ1VNRU5UIiwiU0VUX0NPTkZJRyIsIkZPUkNFX0JPRFkiLCJSRVRVUk5fRE9NIiwiUkVUVVJOX0RPTV9GUkFHTUVOVCIsIlJFVFVSTl9UUlVTVEVEX1RZUEUiLCJTQU5JVElaRV9ET00iLCJTQU5JVElaRV9OQU1FRF9QUk9QUyIsIktFRVBfQ09OVEVOVCIsIklOX1BMQUNFIiwiVVNFX1BST0ZJTEVTIiwiRk9SQklEX0NPTlRFTlRTIiwiREVGQVVMVF9GT1JCSURfQ09OVEVOVFMiLCJEQVRBX1VSSV9UQUdTIiwiREVGQVVMVF9EQVRBX1VSSV9UQUdTIiwiVVJJX1NBRkVfQVRUUklCVVRFUyIsIkRFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyIsIk1BVEhNTF9OQU1FU1BBQ0UiLCJTVkdfTkFNRVNQQUNFIiwiSFRNTF9OQU1FU1BBQ0UiLCJOQU1FU1BBQ0UiLCJJU19FTVBUWV9JTlBVVCIsIkFMTE9XRURfTkFNRVNQQUNFUyIsIkRFRkFVTFRfQUxMT1dFRF9OQU1FU1BBQ0VTIiwiU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUyIsIkNPTkZJRyIsImZvcm1FbGVtZW50IiwiaXNSZWdleE9yRnVuY3Rpb24iLCJ0ZXN0VmFsdWUiLCJfcGFyc2VDb25maWciLCJjZmciLCJBRERfVVJJX1NBRkVfQVRUUiIsIkFERF9EQVRBX1VSSV9UQUdTIiwiQUxMT1dFRF9VUklfUkVHRVhQIiwiQUREX1RBR1MiLCJBRERfQVRUUiIsInRib2R5IiwiTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTIiwiSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMiLCJDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTIiwiQUxMX1NWR19UQUdTIiwiQUxMX01BVEhNTF9UQUdTIiwiX2ZvcmNlUmVtb3ZlIiwibm9kZSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsIm91dGVySFRNTCIsIl9yZW1vdmVBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGVOb2RlIiwicmVtb3ZlQXR0cmlidXRlIiwiX2luaXREb2N1bWVudCIsImRpcnR5IiwibGVhZGluZ1doaXRlc3BhY2UiLCJtYXRjaGVzIiwiZGlydHlQYXlsb2FkIiwiY3JlYXRlRG9jdW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVUZXh0Tm9kZSIsImNoaWxkTm9kZXMiLCJfY3JlYXRlSXRlcmF0b3IiLCJTSE9XX0VMRU1FTlQiLCJTSE9XX0NPTU1FTlQiLCJTSE9XX1RFWFQiLCJTSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT04iLCJTSE9XX0NEQVRBX1NFQ1RJT04iLCJfaXNDbG9iYmVyZWQiLCJlbG0iLCJfX2RlcHRoIiwiX19yZW1vdmFsQ291bnQiLCJub2RlTmFtZSIsImF0dHJpYnV0ZXMiLCJuYW1lc3BhY2VVUkkiLCJoYXNDaGlsZE5vZGVzIiwiX2lzTm9kZSIsIl9leGVjdXRlSG9vayIsImVudHJ5UG9pbnQiLCJjdXJyZW50Tm9kZSIsIl9zYW5pdGl6ZUVsZW1lbnRzIiwidGFnTmFtZSIsImFsbG93ZWRUYWdzIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJfYmFzaWNDdXN0b21FbGVtZW50VGVzdCIsImNoaWxkQ2xvbmUiLCJwYXJlbnQiLCJwYXJlbnRUYWdOYW1lIiwiX2NoZWNrVmFsaWROYW1lc3BhY2UiLCJfaXNWYWxpZEF0dHJpYnV0ZSIsImxjVGFnIiwibGNOYW1lIiwiX3Nhbml0aXplQXR0cmlidXRlcyIsImF0dHIiLCJob29rRXZlbnQiLCJhdHRyTmFtZSIsImF0dHJWYWx1ZSIsImtlZXBBdHRyIiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJfYXR0ciIsImZvcmNlS2VlcEF0dHIiLCJnZXRBdHRyaWJ1dGVUeXBlIiwic2V0QXR0cmlidXRlTlMiLCJfc2FuaXRpemVTaGFkb3dET00iLCJmcmFnbWVudCIsInNoYWRvd05vZGUiLCJzaGFkb3dJdGVyYXRvciIsIm5leHROb2RlIiwic2FuaXRpemUiLCJpbXBvcnRlZE5vZGUiLCJvbGROb2RlIiwicmV0dXJuTm9kZSIsInRvU3RhdGljSFRNTCIsImZpcnN0Q2hpbGQiLCJub2RlSXRlcmF0b3IiLCJzaGFkb3dyb290Iiwic2hhZG93cm9vdG1vZCIsInNlcmlhbGl6ZWRIVE1MIiwiZG9jdHlwZSIsInNldENvbmZpZyIsImNsZWFyQ29uZmlnIiwiaXNWYWxpZEF0dHJpYnV0ZSIsInRhZyIsImhvb2tGdW5jdGlvbiIsInJlbW92ZUhvb2siLCJyZW1vdmVIb29rcyIsInJlbW92ZUFsbEhvb2tzIiwiZmFjdG9yeSIsIlJlZmxlY3RPd25LZXlzIiwiUiIsIlJlZmxlY3RBcHBseSIsInJlY2VpdmVyIiwib3duS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImdldE93blByb3BlcnR5TmFtZXMiLCJOdW1iZXJJc05hTiIsIk51bWJlciIsIkV2ZW50RW1pdHRlciIsImluaXQiLCJvbmNlIiwiZW1pdHRlciIsImVycm9yTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInJlc29sdmVyIiwiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwiaGFuZGxlciIsImZsYWdzIiwib24iLCJhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlciIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwicHJlcGVuZCIsImV2ZW50cyIsImV4aXN0aW5nIiwibmV3TGlzdGVuZXIiLCJlbWl0IiwidW5zaGlmdCIsIndhcm5lZCIsInciLCJjb3VudCIsIm9uY2VXcmFwcGVyIiwiZmlyZWQiLCJ3cmFwRm4iLCJfb25jZVdyYXAiLCJzdGF0ZSIsIndyYXBwZWQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsInJldCIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwiY29weSIsIndyYXBMaXN0ZW5lciIsImFyZyIsImRlZmluZVByb3BlcnR5IiwiUmFuZ2VFcnJvciIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlciIsImNvbnRleHQiLCJsaXN0ZW5lcnMiLCJhZGRMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0Iiwib3JpZ2luYWxMaXN0ZW5lciIsInNwbGljZU9uZSIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsImtleXMiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwidCIsInIiLCJzIiwiYyIsImNvZGUiLCJ1IiwiZXh0ZW5kIiwiZnMiLCJleGlzdHMiLCJ0cnVlIiwiZmFsc2UiLCJyZWFkRmlsZSIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZWFkIiwiY2xvc2UiLCJzaGVldE5hbWUiLCJkYXRlRm9ybWF0cyIsInJlZHVjZSIsInBhcnNlck9wdGlvbnMiLCJwaXBlIiwiY3JlYXRlSW5wdXRTdHJlYW0iLCJ3cml0ZSIsImdldFdvcmtzaGVldCIsInNoZWV0SWQiLCJmb3JtYXQiLCJmb3JtYXR0ZXJPcHRpb25zIiwiZGF0ZUZvcm1hdCIsImRhdGVVVEMiLCJoeXBlcmxpbmsiLCJmb3JtdWxhIiwidXRjIiwiaCIsImluY2x1ZGVFbXB0eVJvd3MiLCJmIiwiZW5kIiwid3JpdGVGaWxlIiwiZW5jb2RpbmciLCJjcmVhdGVXcml0ZVN0cmVhbSIsImRheWpzIiwiZGVjb2RlQWRkcmVzcyIsIm5hdGl2ZUNvbCIsIm5hdGl2ZUNvbE9mZiIsIm5hdGl2ZVJvd09mZiIsImFzSW5zdGFuY2UiLCJjb2xXaWR0aCIsImZsb29yIiwicm93SGVpZ2h0IiwiZ2V0Q29sdW1uIiwiaXNDdXN0b21XaWR0aCIsImdldFJvdyIsInNsaWRlRm9ybXVsYSIsIl9yb3ciLCJfY29sdW1uIiwidmFsaWRhdGVBZGRyZXNzIiwiX2FkZHJlc3MiLCJfdmFsdWUiLCJUeXBlcyIsIk51bGwiLCJfbWVyZ2VTdHlsZSIsIl9tZXJnZUNvdW50IiwiZGVzdHJveSIsIm51bUZtdCIsImZvbnQiLCJib3JkZXIiLCJmaWxsIiwicHJvdGVjdGlvbiIsImFkZHJlc3MiLCJudW1iZXIiLCIkY29sJHJvdyIsImxldHRlciIsImVmZmVjdGl2ZVR5cGUiLCJ0b0NzdlN0cmluZyIsImFkZE1lcmdlUmVmIiwicmVsZWFzZU1lcmdlUmVmIiwiaXNNZXJnZWQiLCJNZXJnZSIsIm1lcmdlIiwicmVsZWFzZSIsInVubWVyZ2UiLCJpc01lcmdlZFRvIiwibWFzdGVyIiwiaXNIeXBlcmxpbmsiLCJIeXBlcmxpbmsiLCJnZXRUeXBlIiwibm90ZSIsIl9jb21tZW50IiwiZXNjYXBlSHRtbCIsIl91cGdyYWRlVG9IeXBlcmxpbmsiLCJmb3JtdWxhVHlwZSIsImZ1bGxBZGRyZXNzIiwibmFtZXMiLCJkZWZpbmVkTmFtZXMiLCJnZXROYW1lc0V4IiwicmVtb3ZlQWxsTmFtZXMiLCJhZGRFeCIsImFkZE5hbWUiLCJyZW1vdmVOYW1lIiwicmVtb3ZlRXgiLCJfZGF0YVZhbGlkYXRpb25zIiwiZGF0YVZhbGlkYXRpb25zIiwiZGF0YVZhbGlkYXRpb24iLCJjb21tZW50IiwiZnJvbU1vZGVsIiwiVmFsdWVUeXBlIiwic2hhcmVkRm9ybXVsYSIsIkZvcm11bGEiLCJyaWNoVGV4dCIsIlJpY2hUZXh0Iiwic2hhcmVkU3RyaW5nIiwiU2hhcmVkU3RyaW5nIiwidHlwZXMiLCJ0b0lTT1N0cmluZyIsInRvb2x0aXAiLCJzaGFyZVR5cGUiLCJyZWYiLCJfY29weU1vZGVsIiwidmFsaWRhdGUiLCJkZXBlbmRlbmNpZXMiLCJyYW5nZXMiLCJfZ2V0VHJhbnNsYXRlZEZvcm11bGEiLCJGb3JtdWxhVHlwZSIsIk1hc3RlciIsIlNoYXJlZCIsIk5vbmUiLCJfdHJhbnNsYXRlZEZvcm11bGEiLCJmaW5kQ2VsbCIsIl9tYXN0ZXIiLCJyYXdWYWx1ZSIsImpvaW4iLCJfd29ya3NoZWV0IiwiX251bWJlciIsImRlZm4iLCJuMmwiLCJfaGVhZGVyIiwiaGlkZGVuIiwib3V0bGluZUxldmVsIiwiX2hpZGRlbiIsImdldENlbGwiLCJnZXRDb2x1bW5LZXkiLCJkZWxldGVDb2x1bW5LZXkiLCJzZXRDb2x1bW5LZXkiLCJfb3V0bGluZUxldmVsIiwiY29sbGFwc2VkIiwib3V0bGluZUxldmVsQ29sIiwiZXF1aXZhbGVudFRvIiwiaXNFcXVhbCIsImlzRGVmYXVsdCIsImhlYWRlckNvdW50IiwiX2FwcGx5U3R5bGUiLCJ0b01vZGVsIiwic29ydCIsIm1hdHJpeE1hcCIsImdldE1hdHJpeCIsImRlY29kZUV4IiwidG9wIiwibGVmdCIsImFkZENlbGxFeCIsInJlbW92ZUNlbGxFeCIsImVhY2giLCJnZXROYW1lcyIsImZpbmRDZWxsRXgiLCJmaWx0ZXIiLCJfZXhwbG9yZSIsIm1hcmsiLCJmaW5kQ2VsbEF0IiwiZ2V0UmFuZ2VzIiwiJHNob3J0UmFuZ2UiLCJub3JtYWxpc2VNYXRyaXgiLCJmb3JFYWNoSW5TaGVldCIsInNwbGljZVJvd3MiLCJzcGxpY2VDb2x1bW5zIiwic3BsaXQiLCJhZGRDZWxsIiwiUmVsYXRpb25zaGlwVHlwZSIsIk9mZmljZURvY3VtZW50IiwiV29ya3NoZWV0IiwiQ2FsY0NoYWluIiwiU2hhcmVkU3RyaW5ncyIsIlN0eWxlcyIsIlRoZW1lIiwiRG9jdW1lbnRUeXBlIiwiWGxzeCIsIlJlYWRpbmdPcmRlciIsIkxlZnRUb1JpZ2h0IiwiUmlnaHRUb0xlZnQiLCJFcnJvclZhbHVlIiwiTm90QXBwbGljYWJsZSIsIlJlZiIsIk5hbWUiLCJEaXZaZXJvIiwiVmFsdWUiLCJOdW0iLCJoeXBlcmxpbmtzIiwiYnIiLCJlZGl0QXMiLCJkZWNvZGUiLCJ0ZXh0cyIsImRlZXBNZXJnZSIsIkRFRkFVTFRfQ09ORklHUyIsIm1hcmdpbnMiLCJpbnNldG1vZGUiLCJpbnNldCIsImxvY2tlZCIsImxvY2tUZXh0Iiwic2V0VExCUiIsIl9zZXJpYWxpc2VkU2hlZXROYW1lIiwiZXhwYW5kIiwiZXhwYW5kUm93IiwiZGltZW5zaW9ucyIsImV4cGFuZFRvQWRkcmVzcyIsIiR0JGwiLCIkYiRyIiwiJHJhbmdlIiwic2hvcnRSYW5nZSIsImludGVyc2VjdHMiLCJjb250YWlucyIsImNvbnRhaW5zRXgiLCJmb3JFYWNoQWRkcmVzcyIsImVuY29kZUFkZHJlc3MiLCJfY2VsbHMiLCJjb21taXQiLCJfY29tbWl0Um93IiwiZ2V0Q2VsbEV4IiwibDJuIiwic3BsaWNlIiwiYWRkUGFnZUJyZWFrIiwibWFuIiwicm93QnJlYWtzIiwiZWFjaENvbHVtbktleSIsImhhc1ZhbHVlcyIsInNvbWUiLCJjZWxsQ291bnQiLCJhY3R1YWxDZWxsQ291bnQiLCJvdXRsaW5lTGV2ZWxSb3ciLCJfc2V0IiwiY2FjaGVTdGF0ZSIsImZpbHRlckJ1dHRvbiIsInRvdGFsc1Jvd0xhYmVsIiwidG90YWxzUm93RnVuY3Rpb24iLCJ0b3RhbHNSb3dSZXN1bHQiLCJ0b3RhbHNSb3dGb3JtdWxhIiwic3RvcmUiLCJnZXRGb3JtdWxhIiwiZmlsdGVySGVpZ2h0IiwiaGVhZGVyUm93IiwidGFibGVIZWlnaHQiLCJ0b3RhbHNSb3ciLCJhdXRvRmlsdGVyUmVmIiwiZW5jb2RlIiwidGFibGVSZWYiLCJfY2FjaGUiLCJyZW1vdmVSb3dzIiwiYWRkQ29sdW1uIiwicmVtb3ZlQ29sdW1ucyIsIl9hc3NpZ24iLCJkaXNwbGF5TmFtZSIsImRpc3BseU5hbWUiLCJkaXNwbGF5TmFtZW5hbWUiLCJ0aGVtZSIsInNob3dGaXJzdENvbHVtbiIsInNob3dMYXN0Q29sdW1uIiwic2hvd1Jvd1N0cmlwZXMiLCJzaG93Q29sdW1uU3RyaXBlcyIsImNhdGVnb3J5IiwiY29tcGFueSIsImNyZWF0ZWQiLCJkZXNjcmlwdGlvbiIsImtleXdvcmRzIiwibWFuYWdlciIsIm1vZGlmaWVkIiwiY2FsY1Byb3BlcnRpZXMiLCJfd29ya3NoZWV0cyIsInN1YmplY3QiLCJ2aWV3cyIsIl9kZWZpbmVkTmFtZXMiLCJfeGxzeCIsImNzdiIsIl9jc3YiLCJuZXh0SWQiLCJ0cmFjZSIsInRhYkNvbG9yIiwiYXJnYiIsImluZGV4ZWQiLCJvcmRlck5vIiwiYXNzaWduIiwicmVtb3ZlV29ya3NoZWV0RXgiLCJyZW1vdmVXb3Jrc2hlZXQiLCJlYWNoU2hlZXQiLCJjbGVhclRoZW1lcyIsIl90aGVtZXMiLCJnZXRJbWFnZSIsImNyZWF0b3IiLCJsYXN0TW9kaWZpZWRCeSIsImxhc3RQcmludGVkIiwic2hlZXRzIiwibGFuZ3VhZ2UiLCJyZXZpc2lvbiIsImNvbnRlbnRTdGF0dXMiLCJ0aGVtZXMiLCJmaW5kSW5kZXgiLCJjb3B5U3R5bGUiLCJkIiwiX3dvcmtib29rIiwiX3Jvd3MiLCJfY29sdW1ucyIsIl9rZXlzIiwiX21lcmdlcyIsImR5RGVzY2VudCIsInBhZ2VTZXR1cCIsImZvb3RlciIsIm9yaWVudGF0aW9uIiwiaG9yaXpvbnRhbERwaSIsInZlcnRpY2FsRHBpIiwiZml0VG9QYWdlIiwiZml0VG9XaWR0aCIsImZpdFRvSGVpZ2h0Iiwic2NhbGUiLCJwYWdlT3JkZXIiLCJibGFja0FuZFdoaXRlIiwiZHJhZnQiLCJjZWxsQ29tbWVudHMiLCJwYXBlclNpemUiLCJzaG93Um93Q29sSGVhZGVycyIsInNob3dHcmlkTGluZXMiLCJmaXJzdFBhZ2VOdW1iZXIiLCJob3Jpem9udGFsQ2VudGVyZWQiLCJ2ZXJ0aWNhbENlbnRlcmVkIiwiY29sQnJlYWtzIiwiaGVhZGVyRm9vdGVyIiwiZGlmZmVyZW50Rmlyc3QiLCJkaWZmZXJlbnRPZGRFdmVuIiwib2RkSGVhZGVyIiwib2RkRm9vdGVyIiwiZXZlbkhlYWRlciIsImV2ZW5Gb290ZXIiLCJmaXJzdEhlYWRlciIsImZpcnN0Rm9vdGVyIiwiYXV0b0ZpbHRlciIsIl9tZWRpYSIsInNoZWV0UHJvdGVjdGlvbiIsInRhYmxlcyIsImNvbmRpdGlvbmFsRm9ybWF0dGluZ3MiLCJfbmFtZSIsInN1YnN0cmluZyIsIl9oZWFkZXJSb3dDb3VudCIsImxhc3RDb2x1bW4iLCJjb2x1bW5Db3VudCIsImFjdHVhbENvbHVtbkNvdW50IiwiX2xhc3RSb3dOdW1iZXIiLCJfbmV4dFJvdyIsImxhc3RSb3ciLCJmaW5kUm93IiwiZmluZFJvd3MiLCJyb3dDb3VudCIsImFjdHVhbFJvd0NvdW50IiwiZ2V0Um93cyIsIl9zZXRTdHlsZU9wdGlvbiIsImFkZFJvd3MiLCJpbnNlcnRSb3dzIiwiX2NvcHlTdHlsZSIsImR1cGxpY2F0ZVJvdyIsImdldFNoZWV0VmFsdWVzIiwiZ2V0QWRkcmVzcyIsIm1lcmdlQ2VsbHMiLCJfbWVyZ2VDZWxsc0ludGVybmFsIiwibWVyZ2VDZWxsc1dpdGhvdXRTdHlsZSIsIl91bk1lcmdlTWFzdGVyIiwiaGFzTWVyZ2VzIiwidW5NZXJnZUNlbGxzIiwiZmlsbEZvcm11bGEiLCJhZGRCYWNrZ3JvdW5kSW1hZ2UiLCJnZXRCYWNrZ3JvdW5kSW1hZ2VJZCIsInByb3RlY3QiLCJzaGVldCIsInNwaW5Db3VudCIsImlzRmluaXRlIiwicm91bmQiLCJhbGdvcml0aG1OYW1lIiwic2FsdFZhbHVlIiwicmFuZG9tQnl0ZXMiLCJoYXNoVmFsdWUiLCJjb252ZXJ0UGFzc3dvcmRUb0hhc2giLCJ1bnByb3RlY3QiLCJhZGRUYWJsZSIsImdldFRhYmxlIiwicmVtb3ZlVGFibGUiLCJnZXRUYWJsZXMiLCJhZGRDb25kaXRpb25hbEZvcm1hdHRpbmciLCJyZW1vdmVDb25kaXRpb25hbEZvcm1hdHRpbmciLCJjb2xzIiwibWVyZ2VzIiwiX3BhcnNlUm93cyIsIl9wYXJzZU1lcmdlQ2VsbHMiLCJUZXh0RGVjb2RlciIsImJ1ZmZlclRvU3RyaW5nIiwiVGV4dEVuY29kZXIiLCJCdWZmZXIiLCJzdHJpbmdUb0J1ZmZlciIsImdldENlbGxBdCIsImZpbmRTaGVldCIsImZpbmRTaGVldFJvdyIsImZpbmRSb3dDZWxsIiwiX2RpY3Rpb25hcnkiLCJfbDJuRmlsbCIsIl9sMm4iLCJfbjJsIiwiX2xldmVsIiwiX2ZpbGwiLCJfaGFzaCIsImNoYXJDb2RlQXQiLCJzdGFydHNXaXRoIiwiaW5SYW5nZSIsInN0b3BzIiwiaGFzaCIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJnZXRIYXNoZXMiLCJhbGxvYyIsIndyaXRlVUludDMyTEUiLCJjcnlwdG8iLCJTYXhlc1BhcnNlciIsIlBhc3NUaHJvdWdoIiwiYXN5bmNJdGVyYXRvciIsImV2ZW50VHlwZSIsInNheGVzIiwiZXhlYyIsInRvVXBwZXJDYXNlIiwicGFyc2VJbnQiLCJfZGF0YSIsIl9lbmNvZGluZyIsInRvQnVmZmVyIiwiX2J1ZmZlciIsIl9idWYiLCJzaXplIiwiaVJlYWQiLCJpV3JpdGUiLCJlb2QiLCJmdWxsIiwiYnVmU2l6ZSIsImJ1ZmZlcnMiLCJiYXRjaCIsImNvcmtlZCIsImluUG9zIiwib3V0UG9zIiwicGlwZXMiLCJwYXVzZWQiLCJpbmhlcml0cyIsIkR1cGxleCIsIl9nZXRXcml0YWJsZUJ1ZmZlciIsIl9waXBlIiwiYWxsIiwiX3dyaXRlVG9CdWZmZXJzIiwibm9wIiwiQXJyYXlCdWZmZXIiLCJuZXh0VGljayIsImNvcmsiLCJfZmx1c2giLCJ1bmNvcmsiLCJzZXRFbmNvZGluZyIsInBhdXNlIiwicmVzdW1lIiwiaXNQYXVzZWQiLCJ1bnBpcGUiLCJ3cmFwIiwiX3Byb2Nlc3MiLCJfaW5Qb3MiLCJjYXBhY2l0eSIsInJlc2V0IiwiX2dyb3ciLCJhZGRUZXh0IiwiYWRkU3RyaW5nQnVmIiwiZXZlcnkiLCJrZXlCeSIsImNoYXJBdCIsInN0cmNtcCIsImlzVW5kZWZpbmVkIiwiaXNPYmplY3QiLCJwcm9taXNlSW1tZWRpYXRlIiwic2V0SW1tZWRpYXRlIiwic3VwZXJfIiwiZGF0ZVRvRXhjZWwiLCJnZXRUaW1lIiwiZXhjZWxUb0RhdGUiLCJwYXJzZVBhdGgiLCJsYXN0SW5kZXhPZiIsImdldFJlbHNQYXRoIiwieG1sRW5jb2RlIiwieG1sRGVjb2RlIiwidmFsaWRJbnQiLCJpc0RhdGVGbXQiLCJhY2Nlc3MiLCJjb25zdGFudHMiLCJGX09LIiwidG9Jc29EYXRlU3RyaW5nIiwidG9Jc29TdHJpbmciLCJzdWJzc3RyIiwicGFyc2VCb29sZWFuIiwiZyIsInNlbGYiLCJ0aW1lcnMiLCJfeG1sIiwiX3N0YWNrIiwiX3JvbGxiYWNrcyIsInRvcyIsIm9wZW5YbWwiLCJvcGVuTm9kZSIsIm9wZW4iLCJsZWFmIiwiYWRkQXR0cmlidXRlIiwiYWRkQXR0cmlidXRlcyIsIndyaXRlWG1sIiwiY2xvc2VOb2RlIiwibGVhZk5vZGUiLCJjbG9zZUFsbCIsImFkZFJvbGxiYWNrIiwic3RhY2siLCJyb2xsYmFjayIsIlN0ZERvY0F0dHJpYnV0ZXMiLCJzdGFuZGFsb25lIiwic3VwZXIiLCJvcHRpb25zIiwiY29tcHJlc3Npb24iLCJ6aXAiLCJzdHJlYW0iLCJicm93c2VyIiwiZmluYWxpemUiLCJnZW5lcmF0ZUFzeW5jIiwiWmlwV3JpdGVyIiwianN6aXAiLCJDb3JlUHJvcGVydGllcyIsIkV4dGVuZGVyUHJvcGVydGllcyIsIkNvbW1lbnRzIiwiVm1sRHJhd2luZyIsIlRhYmxlIiwicHJlcGFyZSIsInBhcnNlT3BlbiIsInBhcnNlVGV4dCIsInBhcnNlQ2xvc2UiLCJyZWNvbmNpbGUiLCJ4Zm9ybSIsIm1lcmdlTW9kZWwiLCJwYXJzZVN0cmVhbSIsInRvWG1sIiwidG9BdHRyaWJ1dGUiLCJ0b1N0cmluZ0F0dHJpYnV0ZSIsInRvU3RyaW5nVmFsdWUiLCJ0b0Jvb2xBdHRyaWJ1dGUiLCJ0b0Jvb2xWYWx1ZSIsInRvSW50QXR0cmlidXRlIiwidG9JbnRWYWx1ZSIsInRvRmxvYXRBdHRyaWJ1dGUiLCJ0b0Zsb2F0VmFsdWUiLCJwYXJzZUZsb2F0IiwibG9jYWxTaGVldElkIiwiX3BhcnNlZE5hbWUiLCJfcGFyc2VkTG9jYWxTaGVldElkIiwiX3BhcnNlZFRleHQiLCJySWQiLCJjYWxjSWQiLCJmdWxsQ2FsY09uTG9hZCIsImRhdGUxOTA0IiwiZGVmYXVsdFRoZW1lVmVyc2lvbiIsImZpbHRlclByaXZhY3kiLCJ4V2luZG93IiwieVdpbmRvdyIsInkiLCJ3aW5kb3dXaWR0aCIsIndpbmRvd0hlaWdodCIsImZpcnN0U2hlZXQiLCJhY3RpdmVUYWIiLCJ2aXNpYmlsaXR5IiwiZmlsZVZlcnNpb24iLCJTVEFUSUNfWEZPUk1TIiwid29ya2Jvb2tQciIsImJvb2tWaWV3cyIsImNoaWxkWGZvcm0iLCJjYWxjUHIiLCJwcmludEFyZWEiLCJwcmludFRpdGxlc1JvdyIsInByaW50VGl0bGVzQ29sdW1uIiwiV09SS0JPT0tfQVRUUklCVVRFUyIsInBhcnNlciIsIndvcmtib29rUmVscyIsIklkIiwid29ya3NoZWV0SGFzaCIsIlRhcmdldCIsInhtbG5zIiwiJCIsImFwcE5hbWUiLCJsYXN0RWRpdGVkIiwibG93ZXN0RWRpdGVkIiwicnVwQnVpbGQiLCJyaWNoVGV4dFhmb3JtIiwiX3JpY2hUZXh0WGZvcm0iLCJhdXRob3JJZCIsIkNPTU1FTlRTX0FUVFJJQlVURVMiLCJjb21tZW50cyIsIl9tb2RlbCIsImdldEFuY2hvclJlY3QiLCJnZXREZWZhdWx0UmVjdCIsImFuY2hvciIsInJlZkFkZHJlc3MiLCJPYmplY3RUeXBlIiwibm9ybWFsaXplTW9kZWwiLCJEUkFXSU5HX0FUVFJJQlVURVMiLCJjb29yZHNpemUiLCJqb2luc3R5bGUiLCJncmFkaWVudHNoYXBlb2siLCJhbmNob3JzIiwiVl9TSEFQRV9BVFRSSUJVVEVTIiwiY29sb3IyIiwib2JzY3VyZWQiLCJmaWxsY29sb3IiLCJzdHJva2Vjb2xvciIsImNvbnZlcnNpb25Vbml0IiwidG9GaXhlZCIsInJldmVyc2VDb252ZXJzaW9uVW5pdCIsImNyZWF0ZU5ld01vZGVsIiwib25QYXJzZXJDbG9zZSIsImJhc2VUeXBlIiwiQ29tcGFueSIsIk1hbmFnZXIiLCJIZWFkaW5nUGFpcnMiLCJUaXRsZU9mUGFydHMiLCJQUk9QRVJUWV9BVFRSSUJVVEVTIiwiRGF0ZUZvcm1hdCIsIkRhdGVBdHRycyIsIkV4dGVuc2lvbiIsIkNvbnRlbnRUeXBlIiwiUGFydE5hbWUiLCJzaGFyZWRTdHJpbmdzIiwiZHJhd2luZ3MiLCJjb21tZW50UmVmcyIsImNvbW1lbnROYW1lIiwiYXR0cnMiLCJDT1JFX1BST1BFUlRZX0FUVFJJQlVURVMiLCJpZGVudGlmaWVyIiwiY29udGVudFR5cGUiLCJSZWxhdGlvbnNoaXAiLCJfdmFsdWVzIiwiUkVMQVRJT05TSElQU19BVFRSSUJVVEVTIiwicmVjb25jaWxlUGljdHVyZSIsInJlbHMiLCJtZWRpYUluZGV4IiwiY3N0YXRlIiwibm9DaGFuZ2VBc3BlY3QiLCJ6ZXJvIiwiYW5jaG9yVHlwZSIsInVyaSIsImN4IiwiY3kiLCJwaWN0dXJlIiwibWVkaXVtIiwicHJzdCIsImFsd2F5cyIsIiRjb3VudCIsIm1heEl0ZW1zIiwidG8iLCJyaWNoVGV4dFhGb3JtIiwic3R5bGVzIiwiYWRkU3R5bGVNb2RlbCIsInN0eWxlSWQiLCJzc0lkIiwic2kiLCJzaUZvcm11bGFlIiwiZm9ybXVsYWUiLCJyZW5kZXJGb3JtdWxhIiwiZ2V0U3R5bGVNb2RlbCIsImdldFN0cmluZyIsImh5cGVybGlua01hcCIsImNvbW1lbnRzTWFwIiwiaWNvblNldCIsImljb25JZCIsInY0IiwiZGF0YWJhclhmb3JtIiwiaWNvblNldFhmb3JtIiwiaXNFeHQiLCJjdXN0b20iLCJ4MTRJZCIsInJlbmRlckRhdGFCYXIiLCJyZW5kZXJJY29uU2V0IiwicHJpb3JpdHkiLCJ1dWlkIiwiZkV4dFhmb3JtIiwic3FSZWYiLCJjZlJ1bGUiLCJydWxlcyIsImNmWGZvcm0iLCJoYXNDb250ZW50IiwiaGFzRXh0Q29udGVudCIsImNmdm9YZm9ybSIsImJvcmRlckNvbG9yWGZvcm0iLCJuZWdhdGl2ZUJvcmRlckNvbG9yWGZvcm0iLCJuZWdhdGl2ZUZpbGxDb2xvclhmb3JtIiwiYXhpc0NvbG9yWGZvcm0iLCJncmFkaWVudCIsIm1pbkxlbmd0aCIsIm1heExlbmd0aCIsIm5lZ2F0aXZlQmFyQ29sb3JTYW1lQXNQb3NpdGl2ZSIsIm5lZ2F0aXZlQmFyQm9yZGVyQ29sb3JTYW1lQXNQb3NpdGl2ZSIsImF4aXNQb3NpdGlvbiIsImRpcmVjdGlvbiIsImNmdm8iLCJib3JkZXJDb2xvciIsIm5lZ2F0aXZlQm9yZGVyQ29sb3IiLCJuZWdhdGl2ZUZpbGxDb2xvciIsImF4aXNDb2xvciIsImNmSWNvblhmb3JtIiwicmV2ZXJzZSIsInNob3dWYWx1ZSIsImljb25zIiwib3BlcmF0b3IiLCJkYXRhQmFyIiwiZXh0THN0IiwiZXh0THN0UmVmWGZvcm0iLCJmb3JtdWxhWGZvcm0iLCJjb2xvclNjYWxlIiwiY29sb3JTY2FsZVhmb3JtIiwiaXNQcmltaXRpdmUiLCJyZW5kZXJFeHByZXNzaW9uIiwicmVuZGVyQ2VsbElzIiwicmVuZGVyVG9wMTAiLCJyZW5kZXJBYm92ZUF2ZXJhZ2UiLCJyZW5kZXJDb2xvclNjYWxlIiwicmVuZGVyVGV4dCIsInJlbmRlclRpbWVQZXJpb2QiLCJkeGZJZCIsInBlcmNlbnQiLCJyYW5rIiwiYWJvdmVBdmVyYWdlIiwidGltZVBlcmlvZCIsInZhbCIsImNvbG9yWGZvcm0iLCJzcXJlZiIsImFkZER4ZlN0eWxlIiwiZ2V0RHhmU3R5bGUiLCJpZFhmb3JtIiwiYmVzdEZpdCIsIm1hcmtlZCIsImFsbG93QmxhbmsiLCJzaG93SW5wdXRNZXNzYWdlIiwicHJvbXB0VGl0bGUiLCJwcm9tcHQiLCJzaG93RXJyb3JNZXNzYWdlIiwiZXJyb3JTdHlsZSIsImVycm9yVGl0bGUiLCJfZGF0YVZhbGlkYXRpb24iLCJfZm9ybXVsYSIsImlzSW50ZXJuYWxMaW5rIiwibG9jYXRpb24iLCJnZXRNYXN0ZXJBZGRyZXNzIiwic3VtbWFyeUJlbG93Iiwic3VtbWFyeVJpZ2h0IiwidXNlRmlyc3RQYWdlTnVtYmVyIiwidXNlUHJpbnRlckRlZmF1bHRzIiwiY29waWVzIiwiaGVhZGluZ3MiLCJncmlkTGluZXMiLCJudW1Sb3dzU2VlbiIsInNwYW5zIiwiaHQiLCJkZWZhdWx0Q29sV2lkdGgiLCJjdXN0b21IZWlnaHQiLCJwYWdlU2V0VXBQciIsIm91dGxpbmVQciIsIm91dGxpbmVQcm9wZXJ0aWVzIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIiwiZm9ybWF0Q2VsbHMiLCJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVsZXRlQ29sdW1ucyIsImRlbGV0ZVJvd3MiLCJwaXZvdFRhYmxlcyIsIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJmcm96ZW4iLCJmcm96ZW5TcGxpdCIsIndvcmtib29rVmlld0lkIiwicmlnaHRUb0xlZnQiLCJ0YWJTZWxlY3RlZCIsInNob3dSdWxlciIsInpvb21TY2FsZSIsInpvb21TY2FsZU5vcm1hbCIsInhTcGxpdCIsInlTcGxpdCIsInRvcExlZnRDZWxsIiwiYWN0aXZlUGFuZSIsInBhbmUiLCJhY3RpdmVDZWxsIiwic2hlZXRWaWV3Iiwic2VsZWN0aW9ucyIsInRvcExlZnQiLCJiIiwidiIsIlMiLCJNIiwiQyIsIlQiLCJFIiwiQSIsIm1heFJvd3MiLCJtYXhDb2xzIiwiaWdub3JlTm9kZXMiLCJzaGVldFByIiwiZGltZW5zaW9uIiwic2hlZXRWaWV3cyIsInNoZWV0Rm9ybWF0UHIiLCJzaGVldERhdGEiLCJwYWdlTWFyZ2lucyIsInByaW50T3B0aW9ucyIsImRyYXdpbmciLCJ0YWJsZVBhcnRzIiwiY29uZGl0aW9uYWxGb3JtYXR0aW5nIiwiVHlwZSIsIlRhcmdldE1vZGUiLCJ2bWxEcmF3aW5nIiwiYmFja2dyb3VuZCIsImRyYXdpbmdzQ291bnQiLCJwcmVJbWFnZUlkIiwiV09SS1NIRUVUX0FUVFJJQlVURVMiLCJPIiwicmVsYXRpb25zaGlwcyIsInZtbERyYXdpbmdzIiwiX2Zvcm1hdCIsIl9wYXJzZSIsInNiIiwiZWIiLCJ0ZXh0WGZvcm0iLCJfdGV4dFhmb3JtIiwiZm9udFhmb3JtIiwiX2ZvbnRYZm9ybSIsIkZPTlRfT1BUSU9OUyIsImZvbnROYW1lVGFnIiwiclBoIiwicmljaCIsInNoYXJlZFN0cmluZ1hmb3JtIiwiX3NoYXJlZFN0cmluZ1hmb3JtIiwidW5pcXVlQ291bnQiLCJhZGRSaWNoVGV4dCIsIl90ZXh0IiwiZnJvbUNoYXJDb2RlIiwiaG9yaXpvbnRhbFZhbHVlcyIsInZlcnRpY2FsVmFsdWVzIiwic2hyaW5rVG9GaXQiLCJ0ZXh0Um90YXRpb24iLCJpbmRlbnQiLCJyZWFkaW5nT3JkZXIiLCJkZWZhdWx0Q29sb3IiLCJ2YWxpZFN0eWxlIiwidmFsaWRTdHlsZVZhbHVlcyIsImRpYWdvbmFsIiwidXAiLCJkb3duIiwiZGlhZ29uYWxVcCIsImRpYWdvbmFsRG93biIsInRpbnQiLCJyZ2IiLCJudW1GbXRJZCIsImZvcm1hdENvZGUiLCJmZ0NvbG9yIiwiYmdDb2xvciIsInBhdHRlcm4iLCJwYXR0ZXJuVHlwZSIsInN0b3AiLCJkZWdyZWUiLCJjZW50ZXIiLCJwYXR0ZXJuRmlsbCIsImdyYWRpZW50RmlsbCIsInZhbGlkUGF0dGVyblZhbHVlcyIsIlN0b3BYZm9ybSIsIlBhdHRlcm5GaWxsWGZvcm0iLCJHcmFkaWVudEZpbGxYZm9ybSIsIk9QVElPTlMiLCJjaGFyc2V0IiwiY29uZGVuc2UiLCJmYW1pbHkiLCJvdXRsaW5lIiwidmVydEFsaWduIiwic2NoZW1lIiwic2hhZG93Iiwic3RyaWtlIiwic3oiLCJnZXREZWZhdWx0Rm10SWQiLCJnZXREZWZhdWx0Rm10Q29kZSIsInhmSWQiLCJmb250SWQiLCJmaWxsSWQiLCJib3JkZXJJZCIsIm51bUZtdHMiLCJmb250cyIsImZpbGxzIiwiYm9yZGVycyIsImNlbGxTdHlsZVhmcyIsImNlbGxYZnMiLCJkeGZzIiwiY2VsbFN0eWxlcyIsInRhYmxlU3R5bGVzIiwiaW5pdEluZGV4IiwibnVtRm10TmV4dElkIiwiX2FkZEJvcmRlciIsIl9hZGRTdHlsZSIsIl9hZGRGaWxsIiwid2Vha01hcCIsIldlYWtNYXAiLCJTVFlMRVNIRUVUX0FUVFJJQlVURVMiLCJfYWRkRm9udCIsImhhcyIsIl9hZGROdW1GbXRTdHIiLCJidWlsdGluSWQiLCJkZWZhdWx0VGFibGVTdHlsZSIsImRlZmF1bHRQaXZvdFN0eWxlIiwiZGVmYXVsdFNsaWNlclN0eWxlIiwiZGVmYXVsdFRpbWVsaW5lU3R5bGUiLCJNb2NrIiwiYXV0b2RyYWluIiwiZGF0ZVN0eWxlSWQiLCJfZGF0ZVN0eWxlSWQiLCJBdHRyaWJ1dGVzIiwic2luZ2xlIiwiZG91YmxlIiwic2luZ2xlQWNjb3VudGluZyIsImRvdWJsZUFjY291bnRpbmciLCJmaWx0ZXJDb2x1bW4iLCJjdXN0b21GaWx0ZXJzIiwiZmlsdGVycyIsImNvbElkIiwiaGlkZGVuQnV0dG9uIiwidGFibGVDb2x1bW5zIiwidGFibGVTdHlsZUluZm8iLCJUQUJMRV9BVFRSSUJVVEVTIiwidG90YWxzUm93Q291bnQiLCJ0b3RhbHNSb3dTaG93biIsImhlYWRlclJvd0NvdW50IiwicGFyc2VSZWxzIiwicGFyc2VXb3JrYm9vayIsInBhcnNlU2hhcmVkU3RyaW5ncyIsImRyYXdpbmdSZWxzIiwid29ya3NoZWV0UmVscyIsInNoZWV0Tm8iLCJnbG9iYWxSZWxzIiwic2hlZXREZWZzIiwiX3Byb2Nlc3NXb3Jrc2hlZXRFbnRyeSIsIl9wcm9jZXNzQ29tbWVudEVudHJ5IiwiX3Byb2Nlc3NUYWJsZUVudHJ5IiwiX3Byb2Nlc3NXb3Jrc2hlZXRSZWxzRW50cnkiLCJfcHJvY2Vzc01lZGlhRW50cnkiLCJzdWJzdHIiLCJfcHJvY2Vzc0RyYXdpbmdFbnRyeSIsIl9wcm9jZXNzRHJhd2luZ1JlbHNFbnRyeSIsIl9wcm9jZXNzVm1sRHJhd2luZ0VudHJ5IiwiX3Byb2Nlc3NUaGVtZUVudHJ5IiwibG9hZEFzeW5jIiwiZGlyIiwid3JpdGFibGVPYmplY3RNb2RlIiwicmVhZGFibGVPYmplY3RNb2RlIiwiYWRkTWVkaWEiLCJhZGREcmF3aW5ncyIsImFkZFRhYmxlcyIsImFkZENvbnRlbnRUeXBlcyIsImFkZEFwcCIsImFkZENvcmUiLCJhZGRUaGVtZXMiLCJ0aGVtZTEiLCJhZGRPZmZpY2VSZWxzIiwiUmVsVHlwZSIsImFkZFdvcmtib29rUmVscyIsImFkZFNoYXJlZFN0cmluZ3MiLCJhZGRTdHlsZXMiLCJhZGRXb3JrYm9vayIsImFkZFdvcmtzaGVldHMiLCJfZmluYWxpemUiLCJwcmVwYXJlTW9kZWwiLCJ1c2VTaGFyZWRTdHJpbmdzIiwidXNlU3R5bGVzIiwiQ3N2Rm9ybWF0dGVyU3RyZWFtIiwiVHJhbnNmb3JtIiwib2JqZWN0TW9kZSIsImhhc1dyaXR0ZW5CT00iLCJyb3dGb3JtYXR0ZXIiLCJSb3dGb3JtYXR0ZXIiLCJ3cml0ZUJPTSIsInRyYW5zZm9ybSIsInJvd1RyYW5zZm9ybSIsIl90cmFuc2Zvcm0iLCJCT00iLCJmaW5pc2giLCJGb3JtYXR0ZXJPcHRpb25zIiwiZGVsaW1pdGVyIiwicXVvdGUiLCJlc2NhcGUiLCJxdW90ZUNvbHVtbnMiLCJxdW90ZUhlYWRlcnMiLCJpbmNsdWRlRW5kUm93RGVsaW1pdGVyIiwiYWx3YXlzV3JpdGVIZWFkZXJzIiwic2hvdWxkV3JpdGVIZWFkZXJzIiwid3JpdGVIZWFkZXJzIiwiZXNjYXBlZFF1b3RlIiwiX19lc01vZHVsZSIsIkZpZWxkRm9ybWF0dGVyIiwiX2hlYWRlcnMiLCJSRVBMQUNFX1JFR0VYUCIsIkVTQ0FQRV9SRUdFWFAiLCJzaG91bGRRdW90ZSIsInF1b3RlRmllbGQiLCJmaWVsZEZvcm1hdHRlciIsImhhc1dyaXR0ZW5IZWFkZXJzIiwiaXNSb3dIYXNoQXJyYXkiLCJpc1Jvd0FycmF5IiwiZ2F0aGVySGVhZGVycyIsImNyZWF0ZVRyYW5zZm9ybSIsImlzU3luY1RyYW5zZm9ybSIsIl9yb3dUcmFuc2Zvcm0iLCJjYWxsVHJhbnNmb3JtZXIiLCJzaG91bGRGb3JtYXRDb2x1bW5zIiwiY2hlY2tIZWFkZXJzIiwiZ2F0aGVyQ29sdW1ucyIsIndyaXRlVG9QYXRoIiwid3JpdGVUb1N0cmluZyIsIndyaXRlVG9CdWZmZXIiLCJ3cml0ZVRvU3RyZWFtIiwicHJvbWlzaWZ5IiwiV3JpdGFibGUiLCJ1dGlsIiwiQ3N2UGFyc2VyU3RyZWFtIiwibGluZXMiLCJwYXJzZWRSb3dDb3VudCIsInBhcnNlZExpbmVDb3VudCIsImVuZEVtaXR0ZWQiLCJoZWFkZXJzRW1pdHRlZCIsIlBhcnNlciIsImhlYWRlclRyYW5zZm9ybWVyIiwiSGVhZGVyVHJhbnNmb3JtZXIiLCJkZWNvZGVyIiwiU3RyaW5nRGVjb2RlciIsInJvd1RyYW5zZm9ybWVyVmFsaWRhdG9yIiwiUm93VHJhbnNmb3JtZXJWYWxpZGF0b3IiLCJoYXNIaXRSb3dMaW1pdCIsImxpbWl0Um93cyIsInNob3VsZEVtaXRSb3dzIiwic2tpcFJvd3MiLCJzaG91bGRTa2lwTGluZSIsInNraXBMaW5lcyIsInJvd1ZhbGlkYXRvciIsIndyYXBEb25lQ2FsbGJhY2siLCJwcm9jZXNzUm93cyIsImNoZWNrQW5kRW1pdEhlYWRlcnMiLCJ0cmFuc2Zvcm1Sb3ciLCJwdXNoUm93IiwicmVhc29uIiwidHJhbnNmb3JtQW5kVmFsaWRhdGUiLCJza2lwUm93Iiwic3RyaW5nX2RlY29kZXIiLCJQYXJzZXJPcHRpb25zIiwiaWdub3JlRW1wdHkiLCJlc2NhcGVDaGFyIiwic3VwcG9ydHNDb21tZW50cyIsImx0cmltIiwicnRyaW0iLCJyZW5hbWVIZWFkZXJzIiwic3RyaWN0Q29sdW1uSGFuZGxpbmciLCJkaXNjYXJkVW5tYXBwZWRDb2x1bW5zIiwiY2FycmlhZ2VSZXR1cm4iLCJlc2NhcGVkRGVsaW1pdGVyIiwiTkVYVF9UT0tFTl9SRUdFWFAiLCJwYXJzZVN0cmluZyIsInBhcnNlRmlsZSIsIlJlYWRhYmxlIiwicm93UGFyc2VyIiwiUm93UGFyc2VyIiwicmVtb3ZlQk9NIiwiU2Nhbm5lciIsImhhc01vcmVEYXRhIiwicGFyc2VXaXRoQ29tbWVudHMiLCJwYXJzZVdpdGhvdXRDb21tZW50cyIsInBhcnNlUm93IiwibmV4dENoYXJhY3RlclRva2VuIiwiVG9rZW4iLCJpc1Rva2VuQ29tbWVudCIsImFkdmFuY2VQYXN0TGluZSIsImxpbmVGcm9tQ3Vyc29yIiwiaGFzTW9yZUNoYXJhY3RlcnMiLCJ0cnVuY2F0ZVRvQ3Vyc29yIiwibmV4dE5vblNwYWNlVG9rZW4iLCJpc0VtcHR5Um93IiwiY29sdW1uUGFyc2VyIiwiQ29sdW1uUGFyc2VyIiwiZ2V0U3RhcnRUb2tlbiIsImlzVG9rZW5Sb3dEZWxpbWl0ZXIiLCJhZHZhbmNlUGFzdFRva2VuIiwiaXNUb2tlbkNhcnJpYWdlUmV0dXJuIiwic2hvdWxkU2tpcENvbHVtblBhcnNlIiwiaXNUb2tlbkRlbGltaXRlciIsImxpbmVMZW5ndGgiLCJ0b2tlbiIsInN0YXJ0Q3Vyc29yIiwiZW5kQ3Vyc29yIiwiYWR2YW5jZVRvIiwiYWR2YW5jZVRvVG9rZW4iLCJpc1Rva2VuRXNjYXBlQ2hhcmFjdGVyIiwiaXNUb2tlblF1b3RlIiwiQ29sdW1uRm9ybWF0dGVyIiwidHJpbUxlZnQiLCJ0cmltUmlnaHQiLCJxdW90ZWRDb2x1bW5QYXJzZXIiLCJRdW90ZWRDb2x1bW5QYXJzZXIiLCJub25RdW90ZWRDb2x1bW5QYXJzZXIiLCJOb25RdW90ZWRDb2x1bW5QYXJzZXIiLCJjb2x1bW5Gb3JtYXR0ZXIiLCJmb3VuZENsb3NpbmdRdW90ZSIsImdhdGhlckRhdGFCZXR3ZWVuUXVvdGVzIiwiY2hlY2tGb3JNYWxmb3JtZWRDb2x1bW4iLCJyZWNlaXZlZEhlYWRlcnMiLCJzaG91bGRVc2VGaXJzdFJvdyIsInByb2Nlc3NlZEZpcnN0Um93IiwiaGVhZGVyc0xlbmd0aCIsInNldEhlYWRlcnMiLCJoZWFkZXJzVHJhbnNmb3JtIiwic2hvdWxkTWFwUm93IiwicHJvY2Vzc1JvdyIsIm1hcEhlYWRlcnMiLCJfcm93VmFsaWRhdG9yIiwiY3JlYXRlVmFsaWRhdG9yIiwiaXNTeW5jVmFsaWRhdGUiLCJjYWxsVmFsaWRhdG9yIiwiYmlnbnVtIiwiZGVmaW5lIiwiYmFzZSIsImRlY29kZXJzIiwiZW5jb2RlcnMiLCJfY3JlYXRlTmFtZWQiLCJfaW5pdE5hbWVkIiwiX2dldERlY29kZXIiLCJfZ2V0RW5jb2RlciIsIlJlcG9ydGVyIiwiaXNCdWZmZXIiLCJvZmZzZXQiLCJpc0VuY29kZXJCdWZmZXIiLCJieXRlTGVuZ3RoIiwiRGVjb2RlckJ1ZmZlciIsImlzRGVjb2RlckJ1ZmZlciIsInNhdmUiLCJyZXN0b3JlIiwiaXNFbXB0eSIsInJlYWRVSW50OCIsInNraXAiLCJyYXciLCJyZXBvcnRlciIsIl9yZXBvcnRlclN0YXRlIiwiRW5jb2RlckJ1ZmZlciIsIl9iYXNlU3RhdGUiLCJlbmMiLCJjaGlsZHJlbiIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJ1c2UiLCJ1c2VEZWNvZGVyIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsIl93cmFwIiwiX2luaXQiLCJlcXVhbCIsIl91c2VBcmdzIiwiZGVmIiwiX2RlY29kZSIsIndyYXBSZXN1bHQiLCJlbnRlcktleSIsIl9wZWVrVGFnIiwiaXNFcnJvciIsIl9kZWNvZGVHZW5lcmljIiwiX2RlY29kZUNob2ljZSIsImVudGVyT2JqZWN0IiwiX2RlY29kZVRhZyIsInRyYWNrIiwiX2dldFVzZSIsImxlYXZlT2JqZWN0IiwiZXhpdEtleSIsImxlYXZlS2V5IiwiX2RlY29kZUxpc3QiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUludCIsIl91c2UiLCJfY3JlYXRlRW5jb2RlckJ1ZmZlciIsIl9lbmNvZGUiLCJfZW5jb2RlVmFsdWUiLCJfc2tpcERlZmF1bHQiLCJfZW5jb2RlQ2hvaWNlIiwiX2VuY29kZVByaW1pdGl2ZSIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCIsIl9pc051bXN0ciIsIl9pc1ByaW50c3RyIiwicmV0aHJvdyIsInBhdGhMZW4iLCJwYXJ0aWFsIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJ0YWdDbGFzcyIsInRhZ0NsYXNzQnlOYW1lIiwidGFnQnlOYW1lIiwiX3JldmVyc2UiLCJkZXIiLCJlbnRpdHkiLCJ0cmVlIiwiY2xzIiwicHJpbWl0aXZlIiwidGFnU3RyIiwiX3NraXBVbnRpbEVuZCIsInVudXNlZCIsInJlYWRVSW50MTZCRSIsIlVUQyIsInBlbSIsImxhYmVsIiwid3JpdGVVSW50MTZCRSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsInRvQXJyYXkiLCJzaWduIiwiZGVmYXVsdEJ1ZmZlciIsImlzQk4iLCJuZWdhdGl2ZSIsIndvcmRzIiwicmVkIiwiQk4iLCJ3b3JkU2l6ZSIsImNtcCIsIl9pbml0TnVtYmVyIiwiX2luaXRBcnJheSIsIl9wYXJzZUhleCIsIl9wYXJzZUJhc2UiLCJjZWlsIiwic3RyaXAiLCJpbXVsbiIsIl9pYWRkbiIsIl9leHBhbmQiLCJfbm9ybVNpZ24iLCJpbnNwZWN0IiwiaXNaZXJvIiwibW9kbiIsImlkaXZuIiwidG9OdW1iZXIiLCJ0b0pTT04iLCJ0b0FycmF5TGlrZSIsImFuZGxuIiwiaXVzaHJuIiwiY2x6MzIiLCJfY291bnRCaXRzIiwiX3plcm9CaXRzIiwiYml0TGVuZ3RoIiwiemVyb0JpdHMiLCJ0b1R3b3MiLCJhYnMiLCJpbm90biIsImlhZGRuIiwiZnJvbVR3b3MiLCJ0ZXN0biIsIm5vdG4iLCJpbmVnIiwiaXNOZWciLCJuZWciLCJpdW9yIiwiaW9yIiwib3IiLCJ1b3IiLCJpdWFuZCIsImlhbmQiLCJhbmQiLCJ1YW5kIiwiaXV4b3IiLCJpeG9yIiwieG9yIiwidXhvciIsInNldG4iLCJpYWRkIiwiaXN1YiIsInN1YiIsIkkiLCJOIiwiUCIsIkIiLCJEIiwiRiIsIkwiLCJ6IiwiVSIsIkgiLCJWIiwicSIsIlciLCJYIiwiSyIsIlkiLCJaIiwiRyIsIkoiLCJRIiwiZWUiLCJ0ZSIsInJlIiwibmUiLCJpZSIsInNlIiwib2UiLCJhZSIsImxlIiwiY2UiLCJ1ZSIsImhlIiwiZmUiLCJkZSIsInBlIiwibWUiLCJiZSIsImltdWwiLCJnZSIsInllIiwidmUiLCJ3ZSIsIl9lIiwieGUiLCJrZSIsIlNlIiwiTWUiLCJDZSIsIlRlIiwiRWUiLCJBZSIsIlJlIiwiT2UiLCJqZSIsIkllIiwiTmUiLCJtdWxwIiwibXVsVG8iLCJtYWtlUkJUIiwicmV2QmluIiwicGVybXV0ZSIsImNvcyIsIlBJIiwic2luIiwiZ3Vlc3NMZW4xM2IiLCJjb25qdWdhdGUiLCJub3JtYWxpemUxM2IiLCJjb252ZXJ0MTNiIiwic3R1YiIsIm11bCIsIm11bGYiLCJtdWxuIiwic3FyIiwiaXNxciIsInBvdyIsIml1c2hsbiIsImlzaGxuIiwiaXNocm4iLCJzaGxuIiwidXNobG4iLCJzaHJuIiwidXNocm4iLCJpbWFza24iLCJtYXNrbiIsImlzdWJuIiwiYWRkbiIsInN1Ym4iLCJpYWJzIiwiX2lzaGxuc3VibXVsIiwiX3dvcmREaXYiLCJkaXYiLCJtb2QiLCJkaXZtb2QiLCJkaXZuIiwidW1vZCIsImRpdlJvdW5kIiwiZWdjZCIsImlzRXZlbiIsImlzT2RkIiwiZ2NkIiwiX2ludm1wIiwiY21wbiIsImludm0iLCJiaW5jbiIsInVjbXAiLCJndG4iLCJndCIsImd0ZW4iLCJndGUiLCJsdG4iLCJsdCIsImx0ZW4iLCJsdGUiLCJlcW4iLCJlcSIsInRvUmVkIiwiY29udmVydFRvIiwiX2ZvcmNlUmVkIiwiZnJvbVJlZCIsImNvbnZlcnRGcm9tIiwiZm9yY2VSZWQiLCJyZWRBZGQiLCJyZWRJQWRkIiwicmVkU3ViIiwicmVkSVN1YiIsInJlZFNobCIsInNobCIsInJlZE11bCIsIl92ZXJpZnkyIiwicmVkSU11bCIsInJlZFNxciIsIl92ZXJpZnkxIiwicmVkSVNxciIsInJlZFNxcnQiLCJzcXJ0IiwicmVkSW52bSIsInJlZE5lZyIsInJlZFBvdyIsImsyNTYiLCJwMjI0IiwicDE5MiIsInAyNTUxOSIsInRtcCIsIl90bXAiLCJfcHJpbWUiLCJwcmltZSIsInIyIiwiaW1vZCIsInJpbnYiLCJtaW52IiwiaXJlZHVjZSIsImltdWxLIiwiX3N0cmlwIiwibW9udCIsInRvQnl0ZUFycmF5IiwiZnJvbUJ5dGVBcnJheSIsIlVpbnQ4QXJyYXkiLCJfbW92ZSIsImZvciIsIm1vZHJuIiwiYWxsb2NVbnNhZmUiLCJfdG9BcnJheUxpa2VMRSIsIl90b0FycmF5TGlrZUJFIiwicmFuZCIsImdlbmVyYXRlIiwiUmFuZCIsIl9yYW5kIiwiZ2V0Qnl0ZXMiLCJnZXRCeXRlIiwiZ2V0UmFuZG9tVmFsdWVzIiwibXNDcnlwdG8iLCJyZWFkVUludDMyQkUiLCJTQk9YIiwiSU5WX1NCT1giLCJTVUJfTUlYIiwiSU5WX1NVQl9NSVgiLCJfcmVzZXQiLCJibG9ja1NpemUiLCJrZXlTaXplIiwiX25Sb3VuZHMiLCJfa2V5U2NoZWR1bGUiLCJfaW52S2V5U2NoZWR1bGUiLCJlbmNyeXB0QmxvY2tSYXciLCJlbmNyeXB0QmxvY2siLCJ3cml0ZVVJbnQzMkJFIiwiZGVjcnlwdEJsb2NrIiwic2NydWIiLCJBRVMiLCJfY2lwaGVyIiwiX2doYXNoIiwiX2ZpbklEIiwid3JpdGVVSW50QkUiLCJfcHJldiIsIl9zZWNDYWNoZSIsIl9kZWNyeXB0IiwiX2FsZW4iLCJfbW9kZSIsIl9hdXRoVGFnIiwiX2NhbGxlZCIsIl91cGRhdGUiLCJlbmNyeXB0IiwiX2ZpbmFsIiwiZmluYWwiLCJnZXRBdXRoVGFnIiwic2V0QXV0aFRhZyIsInNldEFBRCIsImNyZWF0ZUNpcGhlciIsIkNpcGhlciIsImNyZWF0ZUNpcGhlcml2IiwiQ2lwaGVyaXYiLCJjcmVhdGVEZWNpcGhlciIsIkRlY2lwaGVyIiwiY3JlYXRlRGVjaXBoZXJpdiIsIkRlY2lwaGVyaXYiLCJsaXN0Q2lwaGVycyIsImdldENpcGhlcnMiLCJfbGFzdCIsIl9hdXRvcGFkZGluZyIsImNhY2hlIiwibW9kZSIsIml2IiwiZGVjcnlwdCIsImZsdXNoIiwic2V0QXV0b1BhZGRpbmciLCJldnBfYnl0ZXN0b2tleSIsImVxdWFscyIsIndyaXRlVUludDgiLCJnaGFzaCIsIl9tdWx0aXBseSIsIkVDQiIsIkNCQyIsIkNGQiIsIkNGQjgiLCJDRkIxIiwiT0ZCIiwiQ1RSIiwiR0NNIiwiY2lwaGVyIiwiYWVzMTI4IiwiYWVzMTkyIiwiYWVzMjU2IiwiaW5zdGFudGlhdGUiLCJFREUiLCJERVMiLCJfZGVzIiwiZGVzIiwiZGVzMyIsIm1vZHVsdXMiLCJwcmltZTEiLCJwcmltZTIiLCJibGluZGVyIiwicHVibGljRXhwb25lbnQiLCJ1bmJsaW5kZXIiLCJjb2VmZmljaWVudCIsImV4cG9uZW50MSIsImV4cG9uZW50MiIsImdldHIiLCJyYW5kb21ieXRlcyIsInNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIiwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iLCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiIsInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIiwic2hhMjU2Iiwic2hhMjI0Iiwic2hhMzg0Iiwic2hhNTEyIiwiRFNBIiwicmlwZW1kMTYwV2l0aFJTQSIsIm1kNVdpdGhSU0FFbmNyeXB0aW9uIiwiX2hhc2hUeXBlIiwiX3RhZyIsIl9zaWduVHlwZSIsIl93cml0ZSIsInZlcmlmeSIsIlNpZ24iLCJWZXJpZnkiLCJjcmVhdGVTaWduIiwiY3JlYXRlVmVyaWZ5IiwiZWMiLCJjdXJ2ZSIsImtleUZyb21Qcml2YXRlIiwicHJpdmF0ZUtleSIsInRvREVSIiwicGFyYW1zIiwicHJpdl9rZXkiLCJnZXRLZXkiLCJtYWtlS2V5IiwiZWxsaXB0aWMiLCJhbGdvcml0aG0iLCJzdWJqZWN0UHJpdmF0ZUtleSIsInB1Yl9rZXkiLCJzaWduYXR1cmUiLCJhbGxvY1Vuc2FmZVNsb3ciLCJTbG93QnVmZmVyIiwiaXNFbmNvZGluZyIsImZpbGxMYXN0IiwibGFzdE5lZWQiLCJsYXN0VG90YWwiLCJsYXN0Q2hhciIsImlzVmlldyIsInRvUHJpbWl0aXZlIiwiSU5TUEVDVF9NQVhfQllURVMiLCJrTWF4TGVuZ3RoIiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsImZvbyIsImJ5dGVPZmZzZXQiLCJzcGVjaWVzIiwicG9vbFNpemUiLCJfaXNCdWZmZXIiLCJjb21wYXJlIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwidG9Mb2NhbGVTdHJpbmciLCJfYXJyIiwic3ViYXJyYXkiLCJyZWFkVUludExFIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQ4IiwicmVhZEludDE2TEUiLCJyZWFkSW50MTZCRSIsInJlYWRJbnQzMkxFIiwicmVhZEludDMyQkUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVJbnRMRSIsIndyaXRlSW50QkUiLCJ3cml0ZUludDgiLCJ3cml0ZUludDE2TEUiLCJ3cml0ZUludDE2QkUiLCJ3cml0ZUludDMyTEUiLCJ3cml0ZUludDMyQkUiLCJ3cml0ZUZsb2F0TEUiLCJ3cml0ZUZsb2F0QkUiLCJ3cml0ZURvdWJsZUxFIiwid3JpdGVEb3VibGVCRSIsImNvcHlXaXRoaW4iLCJpZWVlNzU0IiwiaGFzaE1vZGUiLCJfZmluYWxPckRpZ2VzdCIsIl9fZmluYWwiLCJfZGVjb2RlciIsIl90b1N0cmluZyIsImZpbHRlclJlamVjdCIsIm5leHQiLCJkb25lIiwicmV0dXJuIiwiY2FsbGVlIiwiZ2V0dGVyIiwic2V0dGVyIiwiZ2xvYmFsIiwidW5zYWZlIiwibm9uQ29uZmlndXJhYmxlIiwibm9uV3JpdGFibGUiLCJJU19IVE1MRERBIiwiRGVubyIsIlBlYmJsZSIsInByb2Nlc3MiLCJ1c2VyQWdlbnQiLCJ2ZXJzaW9ucyIsInY4Iiwic3RhdCIsImRvbnRDYWxsR2V0U2V0IiwiZm9yY2VkIiwiRVhJU1RTIiwiUFJPUEVSIiwiQ09ORklHVVJBQkxFIiwiZ2xvYmFsVGhpcyIsImhhc093biIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaW5zcGVjdFNvdXJjZSIsImZhY2FkZSIsImVuZm9yY2UiLCJnZXR0ZXJGb3IiLCJub3JtYWxpemUiLCJOQVRJVkUiLCJQT0xZRklMTCIsInN0b3BwZWQiLCJBU19FTlRSSUVTIiwiSVNfUkVDT1JEIiwiSVNfSVRFUkFUT1IiLCJJTlRFUlJVUFRFRCIsIkl0ZXJhdG9yUHJvdG90eXBlIiwiQlVHR1lfU0FGQVJJX0lURVJBVE9SUyIsImVudHJpZXMiLCJwcm90byIsImR1cCIsImFyaXR5IiwidHJ1bmMiLCJNdXRhdGlvbk9ic2VydmVyIiwiV2ViS2l0TXV0YXRpb25PYnNlcnZlciIsImRvbWFpbiIsImV4aXQiLCJoZWFkIiwiZW50ZXIiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInByb21pc2UiLCJwYXJlbnRXaW5kb3ciLCJBY3RpdmVYT2JqZWN0IiwiY29udGVudFdpbmRvdyIsImRlZmluZVByb3BlcnRpZXMiLCJpc1Byb3RvdHlwZU9mIiwiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwiZmluYWxseSIsIkNPTlNUUlVDVE9SIiwiUkVKRUNUSU9OX0VWRU5UIiwiU1VCQ0xBU1NJTkciLCJ0YWlsIiwiaXRlbSIsImNvcHlyaWdodCIsImxpY2Vuc2UiLCJrZXlGb3IiLCJjbGVhckltbWVkaWF0ZSIsIkRpc3BhdGNoIiwiTWVzc2FnZUNoYW5uZWwiLCJwcm90b2NvbCIsImhvc3QiLCJub3ciLCJwb3J0MiIsInBvcnQxIiwiaW1wb3J0U2NyaXB0cyIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsImNsZWFyIiwicmFuZG9tIiwid2l0aG91dFNldHRlciIsImtpbmQiLCJBcmd1bWVudHMiLCJyZWFsIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50Iiwib2siLCJmYWlsIiwicmVqZWN0aW9uIiwibm90aWZpZWQiLCJyZWFjdGlvbnMiLCJpbml0RXZlbnQiLCJyYWNlIiwiZnJvbUNvZGVQb2ludCIsIlFPYmplY3QiLCJmaW5kQ2hpbGQiLCJ1c2VTZXR0ZXIiLCJ1c2VTaW1wbGUiLCJpc0Jvb2xlYW4iLCJpc051bGwiLCJpc051bGxPclVuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNTdHJpbmciLCJpc1N5bWJvbCIsImlzUmVnRXhwIiwiaXNEYXRlIiwiaXNGdW5jdGlvbiIsInNlY3AyNTZrMSIsInNlY3AyMjRyMSIsInByaW1lMjU2djEiLCJwcmltZTE5MnYxIiwiZWQyNTUxOSIsInNlY3AzODRyMSIsInNlY3A1MjFyMSIsImN1cnZlVHlwZSIsInAyNTYiLCJzZWNwMjU2cjEiLCJzZWNwMTkycjEiLCJwMzg0IiwicDUyMSIsImdlbmVyYXRlS2V5cyIsImdlbktleVBhaXIiLCJnZXRQdWJsaWNLZXkiLCJjb21wdXRlU2VjcmV0Iiwia2V5RnJvbVB1YmxpYyIsImdldFB1YmxpYyIsImdldFByaXZhdGUiLCJnZXRYIiwiZ2V0UHJpdmF0ZUtleSIsInNldFB1YmxpY0tleSIsIl9pbXBvcnRQdWJsaWMiLCJzZXRQcml2YXRlS2V5IiwiX2ltcG9ydFByaXZhdGUiLCJyaXBlbWQxNjAiLCJfYWxnIiwiX2lwYWQiLCJfb3BhZCIsInJuZyIsInBzZXVkb1JhbmRvbUJ5dGVzIiwicHJuZyIsIkhhc2giLCJjcmVhdGVIbWFjIiwiSG1hYyIsInBia2RmMiIsInBia2RmMlN5bmMiLCJEaWZmaWVIZWxsbWFuR3JvdXAiLCJjcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAiLCJnZXREaWZmaWVIZWxsbWFuIiwiY3JlYXRlRGlmZmllSGVsbG1hbiIsIkRpZmZpZUhlbGxtYW4iLCJjcmVhdGVFQ0RIIiwicHVibGljRW5jcnlwdCIsInByaXZhdGVFbmNyeXB0IiwicHVibGljRGVjcnlwdCIsInByaXZhdGVEZWNyeXB0IiwicmFuZG9tRmlsbCIsInJhbmRvbUZpbGxTeW5jIiwiY3JlYXRlQ3JlZGVudGlhbHMiLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIiwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiIsIk5QTl9FTkFCTEVEIiwiQUxQTl9FTkFCTEVEIiwiUlNBX1BLQ1MxX1BBRERJTkciLCJSU0FfU1NMVjIzX1BBRERJTkciLCJSU0FfTk9fUEFERElORyIsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciLCJSU0FfWDkzMV9QQURESU5HIiwiUlNBX1BLQ1MxX1BTU19QQURESU5HIiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiLCJQT0lOVF9DT05WRVJTSU9OX0hZQlJJRCIsInJhbmRvbWZpbGwiLCJ3ZWVrZGF5cyIsIm1vbnRocyIsIm9yZGluYWwiLCJ1dGNPZmZzZXQiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwibXMiLCJsb2NhbGUiLCIkTCIsIiR1IiwiJHgiLCIkb2Zmc2V0IiwiJGQiLCJOYU4iLCIkeSIsIiRNIiwiJEQiLCIkVyIsImdldERheSIsIiRIIiwiZ2V0SG91cnMiLCIkbSIsImdldE1pbnV0ZXMiLCIkcyIsImdldFNlY29uZHMiLCIkbXMiLCJnZXRNaWxsaXNlY29uZHMiLCIkdXRpbHMiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInVuaXgiLCJ0b0RhdGUiLCIkbG9jYWxlIiwid2Vla1N0YXJ0IiwiJHNldCIsImRheXNJbk1vbnRoIiwic3VidHJhY3QiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b1VUQ1N0cmluZyIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJkYXlqc19wbHVnaW5fY3VzdG9tUGFyc2VGb3JtYXQiLCJMVFMiLCJMVCIsIkxMIiwiTExMIiwiTExMTCIsInpvbmUiLCJhZnRlcm5vb24iLCJtaWxsaXNlY29uZHMiLCJTUyIsIlNTUyIsInNzIiwibW0iLCJISCIsImhoIiwiREQiLCJEbyIsImRheSIsIk1NIiwiTU1NIiwiTU1NTSIsIllZIiwiWVlZWSIsIlpaIiwiZm9ybWF0cyIsInJlZ2V4IiwiaG91cnMiLCJjdXN0b21QYXJzZUZvcm1hdCIsInBhcnNlVHdvRGlnaXRZZWFyIiwibWludXRlcyIsInNlY29uZHMiLCJkYXlqc19wbHVnaW5fdXRjIiwibG9jYWwiLCJnZXRVVENEYXkiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInV0aWxzIiwiX2NiY0luaXQiLCJfY2JjU3RhdGUiLCJidWZmZXJPZmYiLCJwYWRkaW5nIiwiX3VwZGF0ZURlY3J5cHQiLCJfdXBkYXRlRW5jcnlwdCIsIl9mbHVzaEJ1ZmZlciIsIl9maW5hbEVuY3J5cHQiLCJfZmluYWxEZWNyeXB0IiwiX3BhZCIsIl91bnBhZCIsIl9kZXNTdGF0ZSIsImRlcml2ZUtleXMiLCJwYzEiLCJyMjhzaGwiLCJwYzIiLCJpcCIsIl9lbmNyeXB0Iiwic3Vic3RpdHV0ZSIsInJpcCIsImNpcGhlcnMiLCJfZWRlU3RhdGUiLCJwYWRTcGxpdCIsImJpbmFyeSIsImhleCIsImdlbiIsIl9wdWIiLCJfcHJpdiIsInNldEdlbmVyYXRvciIsIl9fcHJpbWUiLCJfcHJpbWVMZW4iLCJfcHJpbWVDb2RlIiwic2ltcGxlU2lldmUiLCJmZXJtYXRUZXN0IiwiX19nZW4iLCJfZ2VuIiwiZ2V0UHJpbWUiLCJnZXRHZW5lcmF0b3IiLCJtb2RwMSIsIm1vZHAyIiwibW9kcDUiLCJtb2RwMTQiLCJtb2RwMTUiLCJtb2RwMTYiLCJtb2RwMTciLCJtb2RwMTgiLCJjdXJ2ZXMiLCJlZGRzYSIsImJyb3JhbmQiLCJnZXROQUYiLCJnZXRKU0YiLCJhc3NlcnQiLCJvbmUiLCJ0d28iLCJwb2ludEZyb21KU09OIiwiZ1JlZCIsIl93bmFmVDEiLCJfd25hZlQyIiwiX3duYWZUMyIsIl93bmFmVDQiLCJfYml0TGVuZ3RoIiwicmVkTiIsIl9tYXh3ZWxsVHJpY2siLCJwcmVjb21wdXRlZCIsInBvaW50IiwiX2ZpeGVkTmFmTXVsIiwiX2dldERvdWJsZXMiLCJzdGVwIiwianBvaW50IiwibWl4ZWRBZGQiLCJwb2ludHMiLCJ0b1AiLCJfd25hZk11bCIsIl9nZXROQUZQb2ludHMiLCJ3bmQiLCJkYmxwIiwiX3duYWZNdWxBZGQiLCJ0b0oiLCJCYXNlUG9pbnQiLCJkZWNvZGVQb2ludCIsInBvaW50RnJvbVgiLCJlbmNvZGVDb21wcmVzc2VkIiwiZ2V0WSIsInByZWNvbXB1dGUiLCJkb3VibGVzIiwibmFmIiwiYmV0YSIsIl9nZXRCZXRhIiwiX2hhc0RvdWJsZXMiLCJkYmwiLCJ0d2lzdGVkIiwibU9uZUEiLCJleHRlbmRlZCIsImMyIiwiZGQiLCJvbmVDIiwiek9uZSIsIl9tdWxBIiwiX211bEMiLCJwb2ludEZyb21ZIiwiaXNJbmZpbml0eSIsImZyb21KU09OIiwiX2V4dERibCIsIl9wcm9qRGJsIiwiX2V4dEFkZCIsIl9wcm9qQWRkIiwibXVsQWRkIiwiam11bEFkZCIsImVxWFRvUCIsInNob3J0IiwiZWR3YXJkcyIsImk0IiwiYTI0IiwiZGlmZkFkZCIsImp1bWxBZGQiLCJ0aW52IiwiemVyb0EiLCJ0aHJlZUEiLCJlbmRvIiwiX2dldEVuZG9tb3JwaGlzbSIsIl9lbmRvV25hZlQxIiwiX2VuZG9XbmFmVDIiLCJpbmYiLCJfZ2V0RW5kb1Jvb3RzIiwibGFtYmRhIiwiYmFzaXMiLCJfZ2V0RW5kb0Jhc2lzIiwiX2VuZG9TcGxpdCIsImsxIiwiazIiLCJfZW5kb1duYWZNdWxBZGQiLCJfemVyb0RibCIsIl90aHJlZURibCIsIl9kYmwiLCJ0cnBsIiwiUHJlc2V0Q3VydmUiLCJuaCIsImtleVBhaXIiLCJmcm9tUHJpdmF0ZSIsImZyb21QdWJsaWMiLCJwZXJzIiwicGVyc0VuYyIsImVudHJvcHkiLCJobWFjU3RyZW5ndGgiLCJlbnRyb3B5RW5jIiwibm9uY2UiLCJfdHJ1bmNhdGVUb04iLCJjYW5vbmljYWwiLCJyZWNvdmVyeVBhcmFtIiwicmVjb3ZlclB1YktleSIsImdldEtleVJlY292ZXJ5UGFyYW0iLCJwcml2IiwicHViIiwicHJpdkVuYyIsInB1YkVuYyIsImRlcml2ZSIsIl9pbXBvcnRERVIiLCJwbGFjZSIsIkxOMiIsInBhcnNlQnl0ZXMiLCJwb2ludENsYXNzIiwiZW5jb2RpbmdMZW5ndGgiLCJrZXlGcm9tU2VjcmV0IiwiaGFzaEludCIsIm1lc3NhZ2VQcmVmaXgiLCJlbmNvZGVQb2ludCIsInB1YkJ5dGVzIiwibWFrZVNpZ25hdHVyZSIsIlJlbmNvZGVkIiwiaW50RnJvbUxFIiwiZnJvbVNlY3JldCIsImVuY29kZUludCIsImRlY29kZUludCIsImlzUG9pbnQiLCJjYWNoZWRQcm9wZXJ0eSIsIl9zZWNyZXQiLCJzZWNyZXQiLCJfcHViQnl0ZXMiLCJwcml2Qnl0ZXMiLCJnZXRTZWNyZXQiLCJfUiIsIl9TIiwiX1JlbmNvZGVkIiwiX1NlbmNvZGVkIiwiU2VuY29kZWQiLCJ0b0J5dGVzIiwidG9IZXgiLCJ6ZXJvMiIsIm1haW4iLCJzY3JpcHRzIiwibGludCIsInVuaXQiLCJyZXBvc2l0b3J5IiwidXJsIiwiYXV0aG9yIiwiYnVncyIsImhvbWVwYWdlIiwiZGV2RGVwZW5kZW5jaWVzIiwiYnJmcyIsImNvdmVyYWxscyIsImVzbGludCIsImdydW50IiwiaXN0YW5idWwiLCJtb2NoYSIsIl9ibG9jayIsIl9ibG9ja1NpemUiLCJfYmxvY2tPZmZzZXQiLCJfbGVuZ3RoIiwiX2ZpbmFsaXplZCIsIl9kaWdlc3QiLCJjb21tb24iLCJzaGEiLCJyaXBlbWQiLCJobWFjIiwic2hhMSIsInBlbmRpbmciLCJwZW5kaW5nVG90YWwiLCJvdXRTaXplIiwicGFkTGVuZ3RoIiwiZW5kaWFuIiwiX2RlbHRhOCIsIl9kZWx0YTMyIiwiQmxvY2tIYXNoIiwiam9pbjMyIiwiaW5uZXIiLCJvdXRlciIsInJvdGwzMiIsInN1bTMyIiwic3VtMzJfMyIsInN1bTMyXzQiLCJ0b0hleDMyIiwic3BsaXQzMiIsInN1bTMyXzUiLCJmdF8xIiwiY2gzMiIsIm1hajMyIiwiczBfMjU2IiwiczFfMjU2IiwiZzBfMjU2IiwiZzFfMjU2Iiwicm90cjY0X2hpIiwicm90cjY0X2xvIiwic2hyNjRfaGkiLCJzaHI2NF9sbyIsInN1bTY0Iiwic3VtNjRfaGkiLCJzdW02NF9sbyIsInN1bTY0XzRfaGkiLCJzdW02NF80X2xvIiwic3VtNjRfNV9oaSIsInN1bTY0XzVfbG8iLCJfcHJlcGFyZUJsb2NrIiwicm90cjMyIiwicDMyIiwiaHRvbmwiLCJ6ZXJvOCIsInByZWRSZXNpc3QiLCJvdXRMZW4iLCJtaW5FbnRyb3B5IiwiX3Jlc2VlZCIsInJlc2VlZEludGVydmFsIiwibm9uY2VFbmMiLCJfaG1hYyIsInJlc2VlZCIsIkpTWmlwIiwiZ2V0VHlwZU9mIiwidWludDhhcnJheSIsImNvbXByZXNzZWRTaXplIiwidW5jb21wcmVzc2VkU2l6ZSIsImNyYzMyIiwiY29tcHJlc3NlZENvbnRlbnQiLCJnZXRDb250ZW50V29ya2VyIiwidW5jb21wcmVzc1dvcmtlciIsInN0cmVhbUluZm8iLCJkYXRhX2xlbmd0aCIsImdldENvbXByZXNzZWRXb3JrZXIiLCJ3aXRoU3RyZWFtSW5mbyIsImNyZWF0ZVdvcmtlckZyb20iLCJjb21wcmVzc1dvcmtlciIsIlNUT1JFIiwibWFnaWMiLCJERUZMQVRFIiwiY3JlYXRlRm9sZGVycyIsImNvbXByZXNzaW9uT3B0aW9ucyIsInVuaXhQZXJtaXNzaW9ucyIsImRvc1Blcm1pc3Npb25zIiwibGllIiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJheSIsIl9wYWtvIiwiX3Bha29BY3Rpb24iLCJfcGFrb09wdGlvbnMiLCJwcm9jZXNzQ2h1bmsiLCJfY3JlYXRlUGFrbyIsInRyYW5zZm9ybVRvIiwiY2xlYW5VcCIsImxldmVsIiwib25EYXRhIiwicGFrbyIsInV0ZjhlbmNvZGUiLCJmaWxlUmVjb3JkIiwiTE9DQUxfRklMRV9IRUFERVIiLCJkaXJSZWNvcmQiLCJDRU5UUkFMX0ZJTEVfSEVBREVSIiwiYnl0ZXNXcml0dGVuIiwiemlwQ29tbWVudCIsInppcFBsYXRmb3JtIiwiZW5jb2RlRmlsZU5hbWUiLCJzdHJlYW1GaWxlcyIsImFjY3VtdWxhdGUiLCJjb250ZW50QnVmZmVyIiwiZGlyUmVjb3JkcyIsImN1cnJlbnRTb3VyY2VPZmZzZXQiLCJlbnRyaWVzQ291bnQiLCJjdXJyZW50RmlsZSIsIl9zb3VyY2VzIiwib3BlbmVkU291cmNlIiwiY2xvc2VkU291cmNlIiwiREFUQV9ERVNDUklQVE9SIiwiQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwicHJlcGFyZU5leHRTb3VyY2UiLCJwcmV2aW91cyIsInJlZ2lzdGVyUHJldmlvdXMiLCJnZW5lcmF0ZWRFcnJvciIsImxvY2siLCJnZW5lcmF0ZVdvcmtlciIsInBsYXRmb3JtIiwiX2NvbXByZXNzV29ya2VyIiwic3VwcG9ydCIsImRlZmF1bHRzIiwiZXh0ZXJuYWwiLCJkZWNvbXByZXNzZWQiLCJjaGVja0NSQzMyIiwib3B0aW1pemVkQmluYXJ5U3RyaW5nIiwiZGVjb2RlRmlsZU5hbWUiLCJ1dGY4ZGVjb2RlIiwiaXNOb2RlIiwiaXNTdHJlYW0iLCJwcmVwYXJlQ29udGVudCIsImZpbGVOYW1lU3RyIiwiZmlsZUNvbW1lbnRTdHIiLCJ1bnNhZmVPcmlnaW5hbE5hbWUiLCJfdXBzdHJlYW1FbmRlZCIsIl9iaW5kU3RyZWFtIiwiX3N0cmVhbSIsIl9oZWxwZXIiLCJfcmVhZCIsIm5ld0J1ZmZlckZyb20iLCJhbGxvY0J1ZmZlciIsImZvbGRlciIsImdlbmVyYXRlSW50ZXJuYWxTdHJlYW0iLCJjaGVja1N1cHBvcnQiLCJnZW5lcmF0ZU5vZGVTdHJlYW0iLCJ0b05vZGVqc1N0cmVhbSIsImJ5dGVBdCIsImxhc3RJbmRleE9mU2lnbmF0dXJlIiwicmVhZEFuZENoZWNrU2lnbmF0dXJlIiwicmVhZERhdGEiLCJjaGVja09mZnNldCIsImNoZWNrSW5kZXgiLCJzZXRJbmRleCIsInJlYWRJbnQiLCJyZWFkU3RyaW5nIiwicmVhZERhdGUiLCJaSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SIiwiWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EIiwiZGVzdFR5cGUiLCJwcm9wTmFtZSIsImRhdGFJc1JlYWR5IiwiX3RpY2tTY2hlZHVsZWQiLCJfdGlja0FuZFJlcGVhdCIsImRlbGF5IiwiaXNGaW5pc2hlZCIsIl90aWNrIiwiZXh0cmFTdHJlYW1JbmZvIiwiaXNMb2NrZWQiLCJtZXJnZVN0cmVhbUluZm8iLCJub2Rlc3RyZWFtIiwiX2ludGVybmFsVHlwZSIsIl9vdXRwdXRUeXBlIiwiX21pbWVUeXBlIiwiX3dvcmtlciIsIm5ld0Jsb2IiLCJzdHJpbmciLCJhcnJheWJ1ZmZlciIsIm5vZGVidWZmZXIiLCJCbG9iQnVpbGRlciIsIldlYktpdEJsb2JCdWlsZGVyIiwiTW96QmxvYkJ1aWxkZXIiLCJNU0Jsb2JCdWlsZGVyIiwiZ2V0QmxvYiIsImxlZnRPdmVyIiwiYXBwbHlGcm9tQ2hhckNvZGUiLCJVdGY4RGVjb2RlV29ya2VyIiwiVXRmOEVuY29kZVdvcmtlciIsInN0cmluZ2lmeUJ5Q2h1bmsiLCJzdHJpbmdpZnlCeUNoYXIiLCJhcHBseUNhbkJlVXNlZCIsIk1BWF9WQUxVRV8xNkJJVFMiLCJNQVhfVkFMVUVfMzJCSVRTIiwicHJldHR5IiwicmVhZEFzQXJyYXlCdWZmZXIiLCJzZXRpbW1lZGlhdGUiLCJsb2FkT3B0aW9ucyIsImNoZWNrU2lnbmF0dXJlIiwiaXNTaWduYXR1cmUiLCJyZWFkQmxvY2tFbmRPZkNlbnRyYWwiLCJkaXNrTnVtYmVyIiwiZGlza1dpdGhDZW50cmFsRGlyU3RhcnQiLCJjZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2siLCJjZW50cmFsRGlyUmVjb3JkcyIsImNlbnRyYWxEaXJTaXplIiwiY2VudHJhbERpck9mZnNldCIsInppcENvbW1lbnRMZW5ndGgiLCJyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCIsInppcDY0RW5kT2ZDZW50cmFsU2l6ZSIsInppcDY0RXh0ZW5zaWJsZURhdGEiLCJyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IiLCJkaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0IiwicmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciIsImRpc2tzQ291bnQiLCJyZWFkTG9jYWxGaWxlcyIsImxvY2FsSGVhZGVyT2Zmc2V0IiwicmVhZExvY2FsUGFydCIsImhhbmRsZVVURjgiLCJwcm9jZXNzQXR0cmlidXRlcyIsInJlYWRDZW50cmFsRGlyIiwiemlwNjQiLCJyZWFkQ2VudHJhbFBhcnQiLCJyZWFkRW5kT2ZDZW50cmFsIiwicHJlcGFyZVJlYWRlciIsImlzRW5jcnlwdGVkIiwiYml0RmxhZyIsInVzZVVURjgiLCJmaWxlTmFtZUxlbmd0aCIsImNvbXByZXNzaW9uTWV0aG9kIiwidmVyc2lvbk1hZGVCeSIsImV4dHJhRmllbGRzTGVuZ3RoIiwiZmlsZUNvbW1lbnRMZW5ndGgiLCJkaXNrTnVtYmVyU3RhcnQiLCJpbnRlcm5hbEZpbGVBdHRyaWJ1dGVzIiwiZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyIsInJlYWRFeHRyYUZpZWxkcyIsInBhcnNlWklQNjRFeHRyYUZpZWxkIiwiZmlsZUNvbW1lbnQiLCJleHRyYUZpZWxkcyIsImZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgiLCJmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50IiwiX2RhdGFCaW5hcnkiLCJpbnRlcm5hbFN0cmVhbSIsIl9kZWNvbXByZXNzV29ya2VyIiwibm9kZVN0cmVhbSIsInF1ZXVlIiwib3V0Y29tZSIsIm9uRnVsZmlsbGVkIiwiY2FsbEZ1bGZpbGxlZCIsIm90aGVyQ2FsbEZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYWxsUmVqZWN0ZWQiLCJvdGhlckNhbGxSZWplY3RlZCIsImltbWVkaWF0ZSIsIm1ldGhvZCIsImNodW5rU2l6ZSIsIndpbmRvd0JpdHMiLCJtZW1MZXZlbCIsInN0cmF0ZWd5IiwiZ3ppcCIsIm1zZyIsImVuZGVkIiwiY2h1bmtzIiwic3RybSIsImF2YWlsX291dCIsImRlZmxhdGVJbml0MiIsImRlZmxhdGVTZXRIZWFkZXIiLCJkaWN0aW9uYXJ5Iiwic3RyaW5nMmJ1ZiIsImRlZmxhdGVTZXREaWN0aW9uYXJ5IiwiX2RpY3Rfc2V0IiwibmV4dF9pbiIsImF2YWlsX2luIiwib3V0cHV0IiwiQnVmOCIsIm5leHRfb3V0IiwiZGVmbGF0ZSIsIm9uRW5kIiwiYnVmMmJpbnN0cmluZyIsInNocmlua0J1ZiIsImRlZmxhdGVFbmQiLCJmbGF0dGVuQ2h1bmtzIiwiRGVmbGF0ZSIsImRlZmxhdGVSYXciLCJpbmZsYXRlSW5pdDIiLCJaX09LIiwiaW5mbGF0ZUdldEhlYWRlciIsIlpfRklOSVNIIiwiWl9OT19GTFVTSCIsImJpbnN0cmluZzJidWYiLCJpbmZsYXRlIiwiWl9ORUVEX0RJQ1QiLCJpbmZsYXRlU2V0RGljdGlvbmFyeSIsIlpfQlVGX0VSUk9SIiwiWl9TVFJFQU1fRU5EIiwiWl9TWU5DX0ZMVVNIIiwidXRmOGJvcmRlciIsImJ1ZjJzdHJpbmciLCJhcnJheVNldCIsImluZmxhdGVFbmQiLCJJbmZsYXRlIiwiaW5mbGF0ZVJhdyIsInVuZ3ppcCIsIkludDMyQXJyYXkiLCJzZXRUeXBlZCIsIkJ1ZjE2IiwiQnVmMzIiLCJaX1BBUlRJQUxfRkxVU0giLCJaX0ZVTExfRkxVU0giLCJaX0JMT0NLIiwiWl9UUkVFUyIsIlpfRVJSTk8iLCJaX1NUUkVBTV9FUlJPUiIsIlpfREFUQV9FUlJPUiIsIlpfTk9fQ09NUFJFU1NJT04iLCJaX0JFU1RfU1BFRUQiLCJaX0JFU1RfQ09NUFJFU1NJT04iLCJaX0RFRkFVTFRfQ09NUFJFU1NJT04iLCJaX0ZJTFRFUkVEIiwiWl9IVUZGTUFOX09OTFkiLCJaX1JMRSIsIlpfRklYRUQiLCJaX0RFRkFVTFRfU1RSQVRFR1kiLCJaX0JJTkFSWSIsIlpfVEVYVCIsIlpfVU5LTk9XTiIsIlpfREVGTEFURUQiLCJwZW5kaW5nX2J1ZiIsInBlbmRpbmdfb3V0IiwidG90YWxfb3V0IiwiX3RyX2ZsdXNoX2Jsb2NrIiwiYmxvY2tfc3RhcnQiLCJzdHJzdGFydCIsIm1heF9jaGFpbl9sZW5ndGgiLCJwcmV2X2xlbmd0aCIsIm5pY2VfbWF0Y2giLCJ3X3NpemUiLCJ3X21hc2siLCJwcmV2IiwiZ29vZF9tYXRjaCIsImxvb2thaGVhZCIsIm1hdGNoX3N0YXJ0Iiwid2luZG93X3NpemUiLCJoYXNoX3NpemUiLCJhZGxlciIsInRvdGFsX2luIiwiaW5zZXJ0IiwiaW5zX2giLCJoYXNoX3NoaWZ0IiwiaGFzaF9tYXNrIiwibWF0Y2hfbGVuZ3RoIiwiX3RyX3RhbGx5IiwibWF4X2xhenlfbWF0Y2giLCJsYXN0X2xpdCIsInByZXZfbWF0Y2giLCJtYXRjaF9hdmFpbGFibGUiLCJnb29kX2xlbmd0aCIsIm1heF9sYXp5IiwibmljZV9sZW5ndGgiLCJtYXhfY2hhaW4iLCJwZW5kaW5nX2J1Zl9zaXplIiwiZ3poZWFkIiwiZ3ppbmRleCIsImxhc3RfZmx1c2giLCJ3X2JpdHMiLCJoYXNoX2JpdHMiLCJkeW5fbHRyZWUiLCJkeW5fZHRyZWUiLCJibF90cmVlIiwibF9kZXNjIiwiZF9kZXNjIiwiYmxfZGVzYyIsImJsX2NvdW50IiwiaGVhcCIsImhlYXBfbGVuIiwiaGVhcF9tYXgiLCJkZXB0aCIsImxfYnVmIiwibGl0X2J1ZnNpemUiLCJkX2J1ZiIsIm9wdF9sZW4iLCJzdGF0aWNfbGVuIiwiYmlfYnVmIiwiYmlfdmFsaWQiLCJkYXRhX3R5cGUiLCJfdHJfaW5pdCIsImRlZmxhdGVJbml0IiwiZGVmbGF0ZVJlc2V0IiwiZGVmbGF0ZVJlc2V0S2VlcCIsImhjcmMiLCJleHRyYSIsInRpbWUiLCJvcyIsIl90cl9hbGlnbiIsIl90cl9zdG9yZWRfYmxvY2siLCJkZWZsYXRlSW5mbyIsInhmbGFncyIsImV4dHJhX2xlbiIsImRtYXgiLCJ3c2l6ZSIsIndoYXZlIiwid25leHQiLCJob2xkIiwiYml0cyIsImxlbmNvZGUiLCJkaXN0Y29kZSIsImxlbmJpdHMiLCJkaXN0Yml0cyIsInNhbmUiLCJsYXN0IiwiaGF2ZWRpY3QiLCJjaGVjayIsInRvdGFsIiwid2JpdHMiLCJuY29kZSIsIm5sZW4iLCJuZGlzdCIsImhhdmUiLCJsZW5zIiwid29yayIsImxlbmR5biIsImRpc3RkeW4iLCJiYWNrIiwid2FzIiwiaW5mbGF0ZVJlc2V0IiwiaW5mbGF0ZVJlc2V0MiIsImluZmxhdGVSZXNldEtlZXAiLCJpbmZsYXRlSW5pdCIsImluZmxhdGVJbmZvIiwic3RhdGljX3RyZWUiLCJleHRyYV9iaXRzIiwiZXh0cmFfYmFzZSIsImVsZW1zIiwibWF4X2xlbmd0aCIsImhhc19zdHJlZSIsImR5bl90cmVlIiwibWF4X2NvZGUiLCJzdGF0X2Rlc2MiLCJhdHRhY2hFdmVudCIsImNhbGxiYWNrIiwiYmluZGluZyIsImlzVHlwZWRBcnJheSIsIklFX1BST1RPIiwiX19kYXRhX18iLCJMZSIsImRlbGV0ZSIsIlllIiwiJGUiLCJxZSIsIldlIiwiVWUiLCJLZSIsIkhlIiwiWGUiLCJGZSIsIlBlIiwiRGUiLCJaZSIsIlZlIiwiemUiLCJDYWNoZSIsInRvU3RyaW5nVGFnIiwiX2EiLCJfYiIsIl9jIiwiX2QiLCJfcmFuZGJlbG93IiwiX3JhbmRyYW5nZSIsImdldERpdmlzb3IiLCJjZXJ0aWZpY2F0ZSIsInNlcSIsImludCIsIlJTQVByaXZhdGVLZXkiLCJSU0FQdWJsaWNLZXkiLCJiaXRzdHIiLCJQdWJsaWNLZXkiLCJvYmppZCIsIm51bGxfIiwib2N0c3RyIiwiUHJpdmF0ZUtleSIsIkVuY3J5cHRlZFByaXZhdGVLZXkiLCJEU0FQcml2YXRlS2V5IiwiRFNBcGFyYW0iLCJFQ1ByaXZhdGVLZXkiLCJuYW1lZEN1cnZlIiwidXRjVGltZSIsInV0Y3RpbWUiLCJnZW5lcmFsVGltZSIsImdlbnRpbWUiLCJzZXRvZiIsInNlcW9mIiwicmRuU2VxdWVuY2UiLCJib29sIiwicGFzc3BocmFzZSIsInRic0NlcnRpZmljYXRlIiwic3ViamVjdFB1YmxpY0tleUluZm8iLCJzdWJqZWN0UHVibGljS2V5Iiwia2RlIiwia2RlcGFyYW1zIiwic2FsdCIsIml0ZXJzIiwiYWxnbyIsInBhcmFtZXRlcnMiLCJzdWJ0bGUiLCJxdWV1ZU1pY3JvdGFzayIsImltcG9ydEtleSIsImRlcml2ZUJpdHMiLCJpdGVyYXRpb25zIiwibWQ1Iiwicm1kMTYwIiwiaXBhZDEiLCJpcGFkMiIsIm9wYWQiLCJhbGciLCJibG9ja3NpemUiLCJydW4iLCJlbnYiLCJhcmd2IiwiY3dkIiwiY2hkaXIiLCJ1bWFzayIsImNvZGVzIiwiYWxsb3dIYWxmT3BlbiIsInJlYWRhYmxlIiwiX3dyaXRhYmxlU3RhdGUiLCJoaWdoV2F0ZXJNYXJrIiwiZ2V0QnVmZmVyIiwiX3JlYWRhYmxlU3RhdGUiLCJkZXN0cm95ZWQiLCJSZWFkYWJsZVN0YXRlIiwiZGVidWdsb2ciLCJnZXRIaWdoV2F0ZXJNYXJrIiwiRVJSX0lOVkFMSURfQVJHX1RZUEUiLCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwiZXJyb3JPckRlc3Ryb3kiLCJwaXBlc0NvdW50IiwiZmxvd2luZyIsInJlYWRpbmciLCJzeW5jIiwibmVlZFJlYWRhYmxlIiwiZW1pdHRlZFJlYWRhYmxlIiwicmVhZGFibGVMaXN0ZW5pbmciLCJyZXN1bWVTY2hlZHVsZWQiLCJlbWl0Q2xvc2UiLCJhdXRvRGVzdHJveSIsImRlZmF1bHRFbmNvZGluZyIsImF3YWl0RHJhaW4iLCJyZWFkaW5nTW9yZSIsIl9kZXN0cm95IiwiZmlyc3QiLCJjb25zdW1lIiwiZmluaXNoZWQiLCJfdW5kZXN0cm95IiwidW5kZXN0cm95Iiwic3Rkb3V0Iiwic3RkZXJyIiwiaGFzVW5waXBlZCIsIm5lZWREcmFpbiIsIl9mcm9tTGlzdCIsIkVSUl9NVUxUSVBMRV9DQUxMQkFDSyIsIkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkciLCJFUlJfVFJBTlNGT1JNX1dJVEhfTEVOR1RIXzAiLCJfdHJhbnNmb3JtU3RhdGUiLCJ0cmFuc2Zvcm1pbmciLCJ3cml0ZWNiIiwid3JpdGVjaHVuayIsImFmdGVyVHJhbnNmb3JtIiwibmVlZFRyYW5zZm9ybSIsIndyaXRlZW5jb2RpbmciLCJlbnRyeSIsInBlbmRpbmdjYiIsImNvcmtlZFJlcXVlc3RzRnJlZSIsIldyaXRhYmxlU3RhdGUiLCJkZXByZWNhdGUiLCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLCJFUlJfU1RSRUFNX05VTExfVkFMVUVTIiwiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJFUlJfVU5LTk9XTl9FTkNPRElORyIsImZpbmFsQ2FsbGVkIiwiZW5kaW5nIiwiZGVjb2RlU3RyaW5ncyIsIndyaXRpbmciLCJidWZmZXJQcm9jZXNzaW5nIiwib253cml0ZSIsIndyaXRlbGVuIiwiZXJyb3JFbWl0dGVkIiwiYnVmZmVyZWRSZXF1ZXN0IiwibGFzdEJ1ZmZlcmVkUmVxdWVzdCIsInByZWZpbmlzaGVkIiwiYnVmZmVyZWRSZXF1ZXN0Q291bnQiLCJ3cml0ZXYiLCJfd3JpdGV2IiwiaXNCdWYiLCJhbGxCdWZmZXJzIiwiY2h1bmsiLCJoYXNJbnN0YW5jZSIsInNldERlZmF1bHRFbmNvZGluZyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJfZ2V0U3RyaW5nIiwiX2dldEJ1ZmZlciIsImN1c3RvbUluc3BlY3QiLCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsInJlcSIsInNldEhlYWRlciIsImFib3J0IiwiRVJSX01JU1NJTkdfQVJHUyIsIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsIlN0cmVhbSIsInBpcGVsaW5lIiwiX2ludm9rZSIsIl9fYXdhaXQiLCJkZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJjb21wbGV0aW9uIiwiaXNHZW5lcmF0b3JGdW5jdGlvbiIsImF3cmFwIiwiQXN5bmNJdGVyYXRvciIsInJ2YWwiLCJkZWxlZ2F0ZVlpZWxkIiwicmVnZW5lcmF0b3JSdW50aW1lIiwia1N0cmluZ01heExlbmd0aCIsIk1BWF9MRU5HVEgiLCJNQVhfU1RSSU5HX0xFTkdUSCIsImlzUyIsImlzQ2hhciIsImlzTmFtZVN0YXJ0Q2hhciIsImlzTmFtZUNoYXIiLCJTX0xJU1QiLCJOQU1FX1JFIiwiaXNOQ05hbWVTdGFydENoYXIiLCJpc05DTmFtZUNoYXIiLCJOQ19OQU1FX1JFIiwiYW1wIiwicXVvdCIsImFwb3MiLCJFVkVOVFMiLCJ4bWxkZWNsIiwicHJvY2Vzc2luZ2luc3RydWN0aW9uIiwib3BlbnRhZ3N0YXJ0Iiwib3BlbnRhZyIsImNsb3NldGFnIiwiY2RhdGEiLCJyZWFkeSIsIm9wdCIsImZyYWdtZW50T3B0IiwieG1sbnNPcHQiLCJ0cmFja1Bvc2l0aW9uIiwibmFtZVN0YXJ0Q2hlY2siLCJuYW1lQ2hlY2siLCJpc05hbWUiLCJwcm9jZXNzQXR0cmlicyIsInByb2Nlc3NBdHRyaWJzTlMiLCJwdXNoQXR0cmliIiwicHVzaEF0dHJpYk5TIiwibnMiLCJhZGRpdGlvbmFsTmFtZXNwYWNlcyIsInByb2Nlc3NBdHRyaWJzUGxhaW4iLCJwdXNoQXR0cmliUGxhaW4iLCJzdGF0ZVRhYmxlIiwic0JlZ2luIiwic0JlZ2luV2hpdGVzcGFjZSIsInNEb2N0eXBlIiwic0RvY3R5cGVRdW90ZSIsInNEVEQiLCJzRFREUXVvdGVkIiwic0RURE9wZW5XYWthIiwic0RURE9wZW5XYWthQmFuZyIsInNEVERDb21tZW50Iiwic0RURENvbW1lbnRFbmRpbmciLCJzRFREQ29tbWVudEVuZGVkIiwic0RURFBJIiwic0RURFBJRW5kaW5nIiwic1RleHQiLCJzRW50aXR5Iiwic09wZW5XYWthIiwic09wZW5XYWthQmFuZyIsInNDb21tZW50Iiwic0NvbW1lbnRFbmRpbmciLCJzQ29tbWVudEVuZGVkIiwic0NEYXRhIiwic0NEYXRhRW5kaW5nIiwic0NEYXRhRW5kaW5nMiIsInNQSUZpcnN0Q2hhciIsInNQSVJlc3QiLCJzUElCb2R5Iiwic1BJRW5kaW5nIiwic1hNTERlY2xOYW1lU3RhcnQiLCJzWE1MRGVjbE5hbWUiLCJzWE1MRGVjbEVxIiwic1hNTERlY2xWYWx1ZVN0YXJ0Iiwic1hNTERlY2xWYWx1ZSIsInNYTUxEZWNsU2VwYXJhdG9yIiwic1hNTERlY2xFbmRpbmciLCJzT3BlblRhZyIsInNPcGVuVGFnU2xhc2giLCJzQXR0cmliIiwic0F0dHJpYk5hbWUiLCJzQXR0cmliTmFtZVNhd1doaXRlIiwic0F0dHJpYlZhbHVlIiwic0F0dHJpYlZhbHVlUXVvdGVkIiwic0F0dHJpYlZhbHVlQ2xvc2VkIiwic0F0dHJpYlZhbHVlVW5xdW90ZWQiLCJzQ2xvc2VUYWciLCJzQ2xvc2VUYWdTYXdXaGl0ZSIsImNsb3NlZCIsIl9jbG9zZWQiLCJvcGVuV2FrYUJhbmciLCJwaVRhcmdldCIsInRhZ3MiLCJ0b3BOUyIsImNodW5rUG9zaXRpb24iLCJwcmV2SSIsImNhcnJpZWRGcm9tUHJldmlvdXMiLCJmb3JiaWRkZW5TdGF0ZSIsImF0dHJpYkxpc3QiLCJyZXBvcnRlZFRleHRCZWZvcmVSb290IiwicmVwb3J0ZWRUZXh0QWZ0ZXJSb290IiwiY2xvc2VkUm9vdCIsInNhd1Jvb3QiLCJ4bWxEZWNsUG9zc2libGUiLCJ4bWxEZWNsRXhwZWN0cyIsImVudGl0eVJldHVyblN0YXRlIiwiZGVmYXVsdFhNTFZlcnNpb24iLCJmb3JjZVhNTFZlcnNpb24iLCJzZXRYTUxWZXJzaW9uIiwicG9zaXRpb25BdE5ld0xpbmUiLCJ4bWxEZWNsIiwiRU5USVRJRVMiLCJyZWFkeUhhbmRsZXIiLCJjb2x1bW5JbmRleCIsIm1ha2VFcnJvciIsImVycm9ySGFuZGxlciIsImdldENvZGUxMCIsImdldENvZGUxMSIsImdldENvZGVOb3JtIiwiZ2V0Q29kZSIsInVuZ2V0IiwiY2FwdHVyZVRvIiwiY2FwdHVyZVRvQ2hhciIsImNhcHR1cmVOYW1lQ2hhcnMiLCJza2lwU3BhY2VzIiwiY3VycmVudFhNTFZlcnNpb24iLCJkb2N0eXBlSGFuZGxlciIsImhhbmRsZVRleHRJblJvb3QiLCJoYW5kbGVUZXh0T3V0c2lkZVJvb3QiLCJwYXJzZUVudGl0eSIsInRleHRIYW5kbGVyIiwiY29tbWVudEhhbmRsZXIiLCJjZGF0YUhhbmRsZXIiLCJwaUhhbmRsZXIiLCJ4bWxkZWNsSGFuZGxlciIsIm9wZW5UYWdTdGFydEhhbmRsZXIiLCJvcGVuVGFnIiwib3BlblNlbGZDbG9zaW5nVGFnIiwiY2xvc2VUYWciLCJwcmVmaXgiLCJxbmFtZSIsImF0dHJpYnV0ZUhhbmRsZXIiLCJlbmRIYW5kbGVyIiwicmVzb2x2ZVByZWZpeCIsIlNldCIsImlzU2VsZkNsb3NpbmciLCJvcGVuVGFnSGFuZGxlciIsImNsb3NlVGFnSGFuZGxlciIsIl9maW5hbFNpemUiLCJfdyIsIl9mIiwiX2ciLCJfaCIsIl9haCIsIl9iaCIsIl9jaCIsIl9kaCIsIl9laCIsIl9maCIsIl9naCIsIl9oaCIsIl9hbCIsIl9ibCIsIl9jbCIsIl9kbCIsIl9lbCIsIl9mbCIsIl9nbCIsIl9obCIsIl9pc1N0ZGlvIiwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIiwiaXNhcnJheSIsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsIl9jbGVhckZuIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwidW5yZWYiLCJlbnJvbGwiLCJfaWRsZVRpbWVvdXRJZCIsIl9pZGxlVGltZW91dCIsInVuZW5yb2xsIiwiX3VucmVmQWN0aXZlIiwiYWN0aXZlIiwiX29uVGltZW91dCIsImxvY2FsU3RvcmFnZSIsIm5vRGVwcmVjYXRpb24iLCJ0aHJvd0RlcHJlY2F0aW9uIiwidHJhY2VEZXByZWNhdGlvbiIsInNlZW4iLCJzdHlsaXplIiwiY29sb3JzIiwic2hvd0hpZGRlbiIsIl9leHRlbmQiLCJOT0RFX0RFQlVHIiwicGlkIiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsImludmVyc2UiLCJ3aGl0ZSIsImdyZXkiLCJibGFjayIsImJsdWUiLCJjeWFuIiwiZ3JlZW4iLCJtYWdlbnRhIiwieWVsbG93Iiwic3BlY2lhbCIsImJvb2xlYW4iLCJudWxsIiwicmVnZXhwIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjbG9ja3NlcSIsIm1zZWNzIiwibnNlY3MiLCJETlMiLCJVUkwiLCJDSEFSIiwiTkFNRV9TVEFSVF9DSEFSIiwiTkFNRV9DSEFSIiwiQ0hBUl9SRSIsIlNfUkUiLCJOQU1FX1NUQVJUX0NIQVJfUkUiLCJOQU1FX0NIQVJfUkUiLCJOTVRPS0VOX1JFIiwiUkVTVFJJQ1RFRF9DSEFSIiwiUkVTVFJJQ1RFRF9DSEFSX1JFIiwiaXNSZXN0cmljdGVkQ2hhciIsImlzQ2hhckFuZE5vdFJlc3RyaWN0ZWQiLCJOQ19OQU1FX1NUQVJUX0NIQVIiLCJOQ19OQU1FX0NIQVIiLCJOQ19OQU1FX1NUQVJUX0NIQVJfUkUiLCJOQ19OQU1FX0NIQVJfUkUiLCJYTUxIdHRwUmVxdWVzdCIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJNb3VzZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJIVE1MQW5jaG9yRWxlbWVudCIsIndlYmtpdFVSTCIsImRvd25sb2FkIiwicmVsIiwiaHJlZiIsIm9yaWdpbiIsImNyZWF0ZU9iamVjdFVSTCIsInJldm9rZU9iamVjdFVSTCIsIm1zU2F2ZU9yT3BlbkJsb2IiLCJhdXRvQm9tIiwiSFRNTEVsZW1lbnQiLCJzYWZhcmkiLCJvbmxvYWRlbmQiLCJzdHIiLCJsYXN0TGVuZ3RoIiwicmVnTmV4dEVtcHR5Q2VsbCIsInJlZ1VuaXZlcnNhbE5ld0xpbmUiLCJuZXh0Q2VsbCIsInF1b3RlTm8iLCJpc1N0aWxsQ2VsbCIsIm5leHRDaGFyIiwibWF0Y2hlZFRleHQiLCJyZWdOZXh0Q2VsbE5vUXVvdGVzIiwickxlbiIsImNMZW4iLCJfU2hlZXRDbGlwIiwiUkVOREVSX1RZUEUiLCJGVUxMWV9WSVNJQkxFX1RZUEUiLCJQQVJUSUFMTFlfVklTSUJMRV9UWVBFIiwiX2V4cG9ydE5hbWVzIiwiUmVuZGVyQWxsQ29sdW1uc0NhbGN1bGF0b3IiLCJSZW5kZXJBbGxSb3dzQ2FsY3VsYXRvciIsIlZpZXdwb3J0Q29sdW1uc0NhbGN1bGF0b3IiLCJWaWV3cG9ydFJvd3NDYWxjdWxhdG9yIiwiX3JlbmRlckFsbENvbHVtbnMiLCJfcmVuZGVyQWxsUm93cyIsIl92aWV3cG9ydENvbHVtbnMiLCJfdmlld3BvcnRSb3dzIiwiX2NvbnN0YW50cyIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b1ByaW1pdGl2ZSIsInRvdGFsQ29sdW1ucyIsImVuZENvbHVtbiIsInRvdGFsUm93cyIsImVuZFJvdyIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldCIsIl9hc3NlcnRDbGFzc0JyYW5kIiwiX29wdGlvbnMiLCJERUZBVUxUX1dJRFRIIiwicHJpdmF0ZU1hcCIsInByaXZhdGVDb2xsZWN0aW9uIiwiX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24iLCJjYWxjdWxhdGUiLCJjYWxjdWxhdGlvblR5cGUiLCJvdmVycmlkZUZuIiwic2Nyb2xsT2Zmc2V0Iiwidmlld3BvcnRXaWR0aCIsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsImNvbXBlbnNhdGVkVmlld3BvcnRXaWR0aCIsInN1bSIsIm5lZWRSZXZlcnNlIiwic3RhcnRQb3NpdGlvbnMiLCJjb2x1bW5XaWR0aCIsImZpcnN0VmlzaWJsZUNvbHVtbldpZHRoIiwibGFzdFZpc2libGVDb2x1bW5XaWR0aCIsIl9nZXRDb2x1bW5XaWR0aCIsInN0YXJ0Q29sdW1uIiwibW9zdFJpZ2h0U2Nyb2xsT2Zmc2V0IiwiaW5saW5lRW5kQ29sdW1uT2Zmc2V0IiwiaW5saW5lU3RhcnRDb2x1bW5PZmZzZXQiLCJpbmxpbmVTdGFydE9mZnNldCIsImF0IiwiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsInZpZXdwb3J0U3VtIiwic3RhcnRQb3NpdGlvbiIsImNvbHVtbldpZHRoRm4iLCJERUZBVUxUX0hFSUdIVCIsInJvd0hlaWdodEZuIiwidmlld3BvcnRIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwiaW5uZXJWaWV3cG9ydEhlaWdodCIsImZpcnN0VmlzaWJsZVJvd0hlaWdodCIsImxhc3RWaXNpYmxlUm93SGVpZ2h0Iiwic3RhcnRSb3ciLCJtb3N0Qm90dG9tU2Nyb2xsT2Zmc2V0IiwidG9wUm93T2Zmc2V0IiwiYm90dG9tUm93T2Zmc2V0IiwiX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwiX2lzUnRsIiwiQ2VsbENvb3JkcyIsImlzUnRsIiwidGFibGVQYXJhbXMiLCJjb3VudFJvd3MiLCJjb3VudENvbHMiLCJjb3VudFJvd0hlYWRlcnMiLCJjb3VudENvbEhlYWRlcnMiLCJpc0ludGVnZXIiLCJjb29yZHMiLCJpc0hlYWRlciIsImlzQ2VsbCIsImlzU291dGhFYXN0T2YiLCJ0ZXN0ZWRDb29yZHMiLCJpc05vcnRoV2VzdE9mIiwiaXNTb3V0aFdlc3RPZiIsImlzTm9ydGhFYXN0T2YiLCJ0b09iamVjdCIsIl9jb29yZHMiLCJDZWxsUmFuZ2UiLCJoaWdobGlnaHQiLCJfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyIsInNldEhpZ2hsaWdodCIsInNldEZyb20iLCJzZXRUbyIsImlzU2luZ2xlIiwiaXNTaW5nbGVDZWxsIiwiaXNTaW5nbGVIZWFkZXIiLCJjb250YWluc0hlYWRlcnMiLCJnZXRPdXRlckhlaWdodCIsImdldE91dGVyV2lkdGgiLCJnZXRIZWlnaHQiLCJmcm9tUm93IiwidG9Sb3ciLCJnZXRXaWR0aCIsImZyb21Db2wiLCJ0b0NvbCIsImdldENlbGxzQ291bnQiLCJjZWxsQ29vcmRzIiwidG9wU3RhcnQiLCJnZXRPdXRlclRvcFN0YXJ0Q29ybmVyIiwiYm90dG9tRW5kIiwiZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIiLCJpbmNsdWRlc1JhbmdlIiwiY2VsbFJhbmdlIiwib3ZlcmxhcHMiLCJnZXRPdXRlclRvcExlZnRDb3JuZXIiLCJnZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyIiwiaXNPdmVybGFwcGluZ0hvcml6b250YWxseSIsImdldE91dGVyVG9wRW5kQ29ybmVyIiwiaXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkiLCJnZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyIiwiZ2V0T3V0ZXJUb3BSaWdodENvcm5lciIsIl9jcmVhdGVDZWxsQ29vcmRzIiwiZXhwYW5kQnlSYW5nZSIsImV4cGFuZGluZ1JhbmdlIiwiY2hhbmdlRGlyZWN0aW9uIiwiaW5pdGlhbERpcmVjdGlvbiIsImdldERpcmVjdGlvbiIsImV4cGFuZGluZ1RvcFN0YXJ0IiwiZXhwYW5kaW5nQm90dG9tRW5kIiwicmVzdWx0VG9wUm93IiwicmVzdWx0VG9wQ29sIiwicmVzdWx0Qm90dG9tUm93IiwicmVzdWx0Qm90dG9tQ29sIiwiZmluYWxGcm9tIiwiZmluYWxUbyIsInNldERpcmVjdGlvbiIsImdldFZlcnRpY2FsRGlyZWN0aW9uIiwiZmxpcERpcmVjdGlvblZlcnRpY2FsbHkiLCJnZXRIb3Jpem9udGFsRGlyZWN0aW9uIiwiZmxpcERpcmVjdGlvbkhvcml6b250YWxseSIsImdldE91dGVyQm90dG9tTGVmdENvcm5lciIsImdldFRvcFN0YXJ0Q29ybmVyIiwiZ2V0VG9wTGVmdENvcm5lciIsImdldFRvcEVuZENvcm5lciIsImdldEJvdHRvbUVuZENvcm5lciIsImdldEJvdHRvbVJpZ2h0Q29ybmVyIiwiZ2V0Qm90dG9tU3RhcnRDb3JuZXIiLCJnZXRUb3BSaWdodENvcm5lciIsImdldEJvdHRvbUxlZnRDb3JuZXIiLCJpc0Nvcm5lciIsImdldE9wcG9zaXRlQ29ybmVyIiwiZ2V0Qm9yZGVyc1NoYXJlZFdpdGgiLCJ0aGlzQm9yZGVycyIsInJhbmdlQm9yZGVycyIsImdldElubmVyIiwib3V0IiwiZ2V0QWxsIiwiZm9yQWxsIiwiX2VsZW1lbnQiLCJfc3RyaW5nIiwiX2V2ZW50TWFuYWdlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc2Nyb2xsIiwiX3JhbmdlIiwiZXZlbnRNYW5hZ2VyIiwic2V0dGluZ3MiLCJyYW5kb21TdHJpbmciLCJkb21CaW5kaW5ncyIsInJvb3RUYWJsZSIsInJvb3REb2N1bWVudCIsInJvb3RXaW5kb3ciLCJkZWZhdWx0VmlldyIsInd0U2V0dGluZ3MiLCJ3dFNjcm9sbCIsImNyZWF0ZVNjcm9sbERhbyIsImZpbmRPcmlnaW5hbEhlYWRlcnMiLCJvcmlnaW5hbEhlYWRlcnMiLCJ3dFRhYmxlIiwiVEhFQUQiLCJjbGVuIiwiZ2V0U2V0dGluZyIsIlRIIiwiZmFzdElubmVyVGV4dCIsImNyZWF0ZUNlbGxDb29yZHMiLCJjcmVhdGVDZWxsUmFuZ2UiLCJkcmF3IiwiZmFzdERyYXciLCJkcmF3SW50ZXJydXB0ZWQiLCJpc1Zpc2libGUiLCJmaXhlZFJvd3NUb3AiLCJmaXhlZFJvd3NCb3R0b20iLCJmaXhlZENvbHVtbnNTdGFydCIsInd0T3ZlcmxheXMiLCJ0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLCJ0b3BPdmVybGF5IiwiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IiwiaW5saW5lU3RhcnRPdmVybGF5IiwiYm90dG9tT3ZlcmxheSIsInNjcm9sbFZpZXdwb3J0Iiwic25hcFRvVG9wIiwic25hcFRvUmlnaHQiLCJzbmFwVG9Cb3R0b20iLCJzbmFwVG9MZWZ0Iiwic2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkiLCJzY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkiLCJnZXRWaWV3cG9ydCIsImdldEZpcnN0VmlzaWJsZVJvdyIsImdldEZpcnN0VmlzaWJsZUNvbHVtbiIsImdldExhc3RWaXNpYmxlUm93IiwiZ2V0TGFzdFZpc2libGVDb2x1bW4iLCJ3dEV2ZW50Iiwid290IiwiZHJhd24iLCJ3dFZpZXdwb3J0IiwiZ2V0VGFibGVEYW8iLCJwYXJlbnRUYWJsZU9mZnNldCIsImNsb25lU291cmNlIiwidGFibGVPZmZzZXQiLCJ3b3Jrc3BhY2VXaWR0aCIsImdldFdvcmtzcGFjZVdpZHRoIiwic2VsZWN0aW9uTWFuYWdlciIsInN0YXJ0Q29sdW1uUmVuZGVyZWQiLCJjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciIsInN0YXJ0Q29sdW1uVmlzaWJsZSIsImNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvciIsInN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZSIsImNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvciIsImVuZENvbHVtblJlbmRlcmVkIiwiZW5kQ29sdW1uVmlzaWJsZSIsImVuZENvbHVtblBhcnRpYWxseVZpc2libGUiLCJjb3VudENvbHVtbnNSZW5kZXJlZCIsImNvdW50Q29sdW1uc1Zpc2libGUiLCJzdGFydFJvd1JlbmRlcmVkIiwicm93c1JlbmRlckNhbGN1bGF0b3IiLCJzdGFydFJvd1Zpc2libGUiLCJyb3dzVmlzaWJsZUNhbGN1bGF0b3IiLCJzdGFydFJvd1BhcnRpYWxseVZpc2libGUiLCJyb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IiLCJlbmRSb3dSZW5kZXJlZCIsImVuZFJvd1Zpc2libGUiLCJlbmRSb3dQYXJ0aWFsbHlWaXNpYmxlIiwiY291bnRSb3dzUmVuZGVyZWQiLCJjb3VudFJvd3NWaXNpYmxlIiwiX2V2ZW50IiwiX2Jhc2UiLCJDbG9uZSIsImZhY2FkZUdldHRlciIsImNsb25lT3ZlcmxheSIsIm92ZXJsYXkiLCJjcmVhdGVUYWJsZSIsInZpZXdwb3J0IiwiX292ZXJsYXlzIiwiX3NldHRpbmdzIiwiX3ZpZXdwb3J0IiwiX21hbmFnZXIiLCJfb2JqZWN0IiwiV2Fsa29udGFibGUiLCJnZXRWaWV3cG9ydERhbyIsIlNlbGVjdGlvbk1hbmFnZXIiLCJleHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcyIsImFsbENsYXNzTmFtZXMiLCJuZXdDbGFzc05hbWVzIiwib2JqZWN0RWFjaCIsInJlbW92ZUNsYXNzIiwid3RSb290RWxlbWVudCIsImFkZENsYXNzIiwidG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyIiwidHJpbW1pbmdDb250YWluZXIiLCJpbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lciIsInRvcFNjcm9sbFBvc2l0aW9uIiwiZ2V0U2Nyb2xsUG9zaXRpb24iLCJ0b3BQYXJlbnRPZmZzZXQiLCJnZXRUYWJsZVBhcmVudE9mZnNldCIsImlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24iLCJpbmxpbmVTdGFydFBhcmVudE9mZnNldCIsIl9mdW5jdGlvbiIsIl9mZWF0dXJlIiwiX2Jyb3dzZXIiLCJfbWl4ZWQiLCJfd3RTZXR0aW5ncyIsIl9kb21CaW5kaW5ncyIsIl93dFRhYmxlIiwiX3NlbGVjdGlvbk1hbmFnZXIiLCJfcGFyZW50IiwiX2ZhY2FkZUdldHRlciIsIl9zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZCIsIl9kYmxDbGlja1RpbWVvdXQiLCJfZGJsQ2xpY2tPcmlnaW4iLCJyZWdpc3RlckV2ZW50cyIsImhvbGRlciIsIm9uQ29udGV4dE1lbnUiLCJUQUJMRSIsIm9uTW91c2VPdmVyIiwib25Nb3VzZU91dCIsImluaXRUb3VjaEV2ZW50cyIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hFbmQiLCJtb21lbnR1bVNjcm9sbGluZyIsIl90aW1lb3V0Iiwib25nb2luZyIsInRvdWNoQXBwbGllZCIsImlzTW9iaWxlQnJvd3NlciIsImlzVG91Y2hTdXBwb3J0ZWQiLCJvbk1vdXNlRG93biIsImluaXRNb3VzZUV2ZW50cyIsInNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQiLCJ0b3VjaFRhcmdldCIsImNvb3Jkc09mQ2VsbFVuZGVyRmluZ2VyIiwicGFyZW50Q2VsbCIsInJvd1RvdWNoZWQiLCJyb3dTZWxlY3RlZCIsImNvbFRvdWNoZWQiLCJjb2xTZWxlY3RlZCIsIlREIiwiY2xvc2VzdERvd24iLCJnZXRDb29yZHMiLCJoYXNDbGFzcyIsImdldEZvY3VzU2VsZWN0aW9uIiwiZ2V0QXJlYVNlbGVjdGlvbiIsImFjdGl2ZUVsZW1lbnQiLCJnZXRQYXJlbnQiLCJyZWFsVGFyZ2V0IiwiY2FsbExpc3RlbmVyIiwiYnV0dG9uIiwibGFzdE1vdXNlT3ZlciIsImlzQ2hpbGRPZiIsImxhc3RURCIsIm5leHRURCIsInJlbGF0ZWRUYXJnZXQiLCJfdGhpcyRwYXJlbnRDZWxsIiwicGFyZW50Q2VsbENvb3JkcyIsImlzQ2VsbHNSYW5nZSIsImlzRGVmaW5lZCIsImNhbmNlbGFibGUiLCJpbnRlcmFjdGl2ZUVsZW1lbnRzIiwiaXNJT1MiLCJpc0Nocm9tZVdlYktpdCIsImlzRmlyZWZveFdlYktpdCIsImdldFNldHRpbmdQdXJlIiwiX2NvcmUiLCJXYWxrb250YWJsZUZhY2FkZSIsInNldHRpbmdzT3JJbnN0YW5jZSIsIl93b3QiLCJfaW5pdEZyb21TZXR0aW5ncyIsImd1aWQiLCJldmVudExpc3RlbmVycyIsInRvcG1vc3QiLCJnZXRPdmVybGF5TmFtZSIsInBhcmFtMSIsInBhcmFtMiIsInBhcmFtMyIsInBhcmFtNCIsImhhc1NldHRpbmciLCJjb3VudFRIIiwib2Zmc2V0dGVkIiwidW5PZmZzZXR0ZWQiLCJyZW5kZXJlZFRvU291cmNlIiwic291cmNlVG9SZW5kZXJlZCIsIm9mZnNldHRlZFRIIiwidW5PZmZzZXR0ZWRUSCIsInZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbiIsInNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbiIsInZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyIsInNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyIsIl9jYWxjdWxhdG9yIiwiQ29yZSIsIl9zZWxlY3Rpb24iLCJTZWxlY3Rpb24iLCJISUdITElHSFRfQUNUSVZFX0hFQURFUl9UWVBFIiwiQUNUSVZFX0hFQURFUl9UWVBFIiwiSElHSExJR0hUX0FSRUFfVFlQRSIsIkFSRUFfVFlQRSIsIkhJR0hMSUdIVF9GT0NVU19UWVBFIiwiRk9DVVNfVFlQRSIsIkhJR0hMSUdIVF9GSUxMX1RZUEUiLCJGSUxMX1RZUEUiLCJISUdITElHSFRfSEVBREVSX1RZUEUiLCJIRUFERVJfVFlQRSIsIkhJR0hMSUdIVF9ST1dfVFlQRSIsIlJPV19UWVBFIiwiSElHSExJR0hUX0NPTFVNTl9UWVBFIiwiQ09MVU1OX1RZUEUiLCJISUdITElHSFRfQ1VTVE9NX1NFTEVDVElPTl9UWVBFIiwiQ1VTVE9NX1NFTEVDVElPTl9UWVBFIiwiUmVuZGVyZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9vcmRlclZpZXciLCJPcmRlclZpZXciLCJTaGFyZWRPcmRlclZpZXciLCJnZXRMaXN0ZW5lcnNDb3VudGVyIiwiX2NvbnNvbGUiLCJfY2xvbmUiLCJfYTExeSIsIk92ZXJsYXkiLCJ3b3RJbnN0YW5jZSIsImRlZmluZUdldHRlciIsImhpZGVyIiwic3ByZWFkZXIiLCJtYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCIsImdldFRyaW1taW5nQ29udGFpbmVyIiwibmVlZEZ1bGxSZW5kZXIiLCJzaG91bGRCZVJlbmRlcmVkIiwibWFrZUNsb25lIiwiaGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkIiwidXBkYXRlU3RhdGVPZlJlbmRlcmluZyIsImRyYXdQaGFzZSIsInVwZGF0ZVRyaW1taW5nQ29udGFpbmVyIiwidXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRTY3JvbGxhYmxlRWxlbWVudCIsImdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uIiwid2luZG93U2Nyb2xsIiwiZml4ZWRDb2x1bW5TdGFydCIsImZpeGVkUm93VG9wIiwiZml4ZWRSb3dCb3R0b20iLCJzcHJlYWRlck9mZnNldCIsImdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbiIsIm9mZnNldFRvcCIsImVsZW1lbnRPZmZzZXQiLCJvZmZzZXRPYmplY3QiLCJnZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyIsImdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyIiwib2Zmc2V0UGFyZW50Iiwib2Zmc2V0TGVmdCIsIm9uRml4ZWRSb3dUb3AiLCJvbkZpeGVkQ29sdW1uIiwiYWJzb2x1dGVSb290RWxlbWVudFBvc2l0aW9uIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaG9yaXpvbnRhbE9mZnNldCIsInZlcnRpY2FsT2Zmc2V0IiwiYWJzb2x1dGVSb290RWxlbWVudFN0YXJ0UG9zaXRpb24iLCJpbm5lcldpZHRoIiwiZ2V0U2Nyb2xsYmFyV2lkdGgiLCJvbkZpeGVkUm93Qm90dG9tIiwidGFibGVTY3JvbGxQb3NpdGlvbiIsIkNMT05FX1RZUEVTIiwiY2xvbmVkVGFibGUiLCJ0YWJsZVBhcmVudCIsIkNMT05FX0NMQVNTX05BTUVTIiwiQTExWV9QUkVTRU5UQVRJT04iLCJwcmV2ZW50T3ZlcmZsb3ciLCJDTE9ORV9UT1AiLCJDTE9ORV9JTkxJTkVfU1RBUlQiLCJyZWZyZXNoIiwiX2JvdHRvbSIsIkJvdHRvbU92ZXJsYXkiLCJDTE9ORV9CT1RUT00iLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLCJyZXNldEZpeGVkUG9zaXRpb24iLCJvdmVybGF5Um9vdCIsIm92ZXJsYXlQb3NpdGlvbiIsInJlcG9zaXRpb25PdmVybGF5IiwiZ2V0T3ZlcmxheU9mZnNldCIsInBvc2l0aW9uQ2hhbmdlZCIsImFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbiIsImFkanVzdEVsZW1lbnRzU2l6ZSIsImNsb25lUm9vdCIsImJvdHRvbU9mZnNldCIsImhhc1ZlcnRpY2FsU2Nyb2xsIiwiZ2V0V29ya3NwYWNlSGVpZ2h0IiwiZ2V0VG90YWxIZWlnaHQiLCJoYXNIb3Jpem9udGFsU2Nyb2xsIiwic2V0U2Nyb2xsUG9zaXRpb24iLCJwb3MiLCJzY3JvbGxUbyIsImdldFdpbmRvd1Njcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJvblNjcm9sbCIsInN1bUNlbGxTaXplcyIsImdldFJvd0hlaWdodCIsImFkanVzdFJvb3RFbGVtZW50U2l6ZSIsImFkanVzdFJvb3RDaGlsZHJlblNpemUiLCJzY3JvbGxiYXJXaWR0aCIsIm92ZXJsYXlSb290U3R5bGUiLCJoYXNTY3JvbGxiYXJSaWdodCIsInNjcm9sbFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJoYXNEZWZpbmVkU2l6ZSIsImFwcGx5VG9ET00iLCJzeW5jT3ZlcmxheU9mZnNldCIsInN0eWxlUHJvcGVydHkiLCJzb3VyY2VSb3ciLCJib3R0b21FZGdlIiwibmV3WSIsIm1haW5Ib2xkZXIiLCJzY3JvbGxiYXJDb21wZW5zYXRpb24iLCJjbGllbnRIZWlnaHQiLCJnZXRWaWV3cG9ydEhlaWdodCIsImhvbGRlck9mZnNldCIsImdldFNjcm9sbFRvcCIsIm92ZXJsYXlPZmZzZXQiLCJyb290SGVpZ2h0IiwibWF4T2Zmc2V0IiwiZG9jQ2xpZW50SGVpZ2h0IiwiYXJlRml4ZWRSb3dzQm90dG9tQ2hhbmdlZCIsIm1hc3RlclBhcmVudCIsInByZXZpb3VzU3RhdGUiLCJfYm90dG9tSW5saW5lU3RhcnRDb3JuZXIiLCJCb3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLCJDTE9ORV9CT1RUT01fSU5MSU5FX1NUQVJUX0NPUk5FUiIsInJlc2V0Q3NzVHJhbnNmb3JtIiwidGFibGVXaWR0aCIsIm91dGVyV2lkdGgiLCJDTE9ORV9UT1BfSU5MSU5FX1NUQVJUX0NPUk5FUiIsIk1hcCIsIklubGluZVN0YXJ0T3ZlcmxheSIsIlRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsIlRvcE92ZXJsYXkiLCJfaW5saW5lU3RhcnQiLCJfdG9wSW5saW5lU3RhcnRDb3JuZXIiLCJfdG9wIiwic2V0T3ZlcmxheVBvc2l0aW9uIiwic2Nyb2xsWCIsImdldFdpbmRvd1Njcm9sbFRvcCIsInNjcm9sbExlZnQiLCJkZWZhdWx0Q29sdW1uV2lkdGgiLCJnZXRTdHJldGNoZWRDb2x1bW5XaWR0aCIsInNjcm9sbGJhckhlaWdodCIsImhhc1Njcm9sbGJhckJvdHRvbSIsInNjcm9sbEhlaWdodCIsInNlbGVjdGlvbkNvcm5lck9mZnNldCIsIkNPUk5FUl9ERUZBVUxUX1NUWUxFIiwic291cmNlQ29sIiwiYmV5b25kUmVuZGVyZWQiLCJyb3dIZWFkZXJCb3JkZXJDb21wZW5zYXRpb24iLCJuZXdYIiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRWaWV3cG9ydFdpZHRoIiwiY2xpZW50V2lkdGgiLCJnZXRNYXhpbXVtU2Nyb2xsTGVmdCIsImV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkiLCJnZXRTY3JvbGxMZWZ0IiwiZ2V0VG90YWxXaWR0aCIsInByZXZlbnRWZXJ0aWNhbE92ZXJmbG93IiwiY2FjaGVkRml4ZWRSb3dzVG9wIiwic2tpcElubmVyQm9yZGVyQWRqdXN0aW5nIiwiaGlkZXJSZWN0Iiwic2Nyb2xsWSIsImNvbHVtbkhlYWRlckJvcmRlckNvbXBlbnNhdGlvbiIsImdldE1heGltdW1TY3JvbGxUb3AiLCJleHBhbmRIaWRlclZlcnRpY2FsbHlCeSIsInByZXZlbnRIb3Jpem9udGFsT3ZlcmZsb3ciLCJhcmVGaXhlZFJvd3NUb3BDaGFuZ2VkIiwiX2FycmF5IiwiX3VuaWNvZGUiLCJfb3ZlcmxheSIsIl9oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQiLCJSZXNpemVPYnNlcnZlciIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNjcm9sbGJhclNpemUiLCJpc092ZXJmbG93SGlkZGVuIiwic2Nyb2xsYWJsZUVsZW1lbnQiLCJpbml0T3ZlcmxheXMiLCJrZXlQcmVzc2VkIiwic3ByZWFkZXJMYXN0U2l6ZSIsInZlcnRpY2FsU2Nyb2xsaW5nIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsImluaXRCcm93c2VyTGluZUhlaWdodCIsInJlZ2lzdGVyTGlzdGVuZXJzIiwibGFzdFNjcm9sbFgiLCJsYXN0U2Nyb2xsWSIsImdldE92ZXJsYXlzIiwiaW5jbHVkZU1hc3RlciIsIm92ZXJsYXlzIiwiY29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJsaW5lSGVpZ2h0RmFsYmFjayIsImZvbnRTaXplIiwiYnJvd3NlckxpbmVIZWlnaHQiLCJiZWZvcmVEcmF3IiwiYWNjIiwiYWZ0ZXJEcmF3Iiwic3luY1Njcm9sbFdpdGhNYXN0ZXIiLCJyZWZyZXNoQWxsIiwidG9wT3ZlcmxheVNjcm9sbGFibGVFbGVtZW50IiwiaW5saW5lU3RhcnRPdmVybGF5U2Nyb2xsYWJsZUVsZW1lbnQiLCJvbktleURvd24iLCJvbktleVVwIiwib25UYWJsZVNjcm9sbCIsInBhc3NpdmUiLCJpc0hpZ2hQaXhlbFJhdGlvIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImlzU2Nyb2xsT25XaW5kb3ciLCJwcmV2ZW50V2hlZWwiLCJ3aGVlbEV2ZW50T3B0aW9ucyIsInJlc2l6ZVRpbWVvdXQiLCJpc0Nocm9tZSIsIm9uQ2xvbmVXaGVlbCIsInJlc2l6ZU9ic2VydmVyIiwicGFyZW50RWxlbWVudCIsImRlcmVnaXN0ZXJMaXN0ZW5lcnMiLCJjbGVhckV2ZW50cyIsIm1hc3Rlckhvcml6b250YWwiLCJtYXN0ZXJWZXJ0aWNhbCIsInN5bmNTY3JvbGxQb3NpdGlvbnMiLCJzaG91bGROb3RXaGVlbFZlcnRpY2FsbHkiLCJzaG91bGROb3RXaGVlbEhvcml6b250YWxseSIsImlzU2Nyb2xsUG9zc2libGUiLCJ0cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwiLCJpc0tleSIsImtleUNvZGUiLCJkZWx0YVkiLCJ3aGVlbERlbHRhWSIsImRlbHRhWCIsIndoZWVsRGVsdGFYIiwiZGVsdGFNb2RlIiwiaXNTY3JvbGxWZXJ0aWNhbGx5UG9zc2libGUiLCJzY3JvbGxWZXJ0aWNhbGx5IiwiaXNTY3JvbGxIb3Jpem9udGFsbHlQb3NzaWJsZSIsInNjcm9sbEhvcml6b250YWxseSIsImRlbHRhIiwicHJldmlvdXNTY3JvbGwiLCJ0b3BIb2xkZXIiLCJsZWZ0SG9sZGVyIiwiYm90dG9tSG9sZGVyIiwidXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cyIsImRpc2Nvbm5lY3QiLCJ1cGRhdGVMYXN0U3ByZWFkZXJTaXplIiwibmVlZHNVcGRhdGluZyIsImlzV2luZG93U2Nyb2xsZWQiLCJoZWFkZXJSb3dTaXplIiwiZ2V0Um93SGVhZGVyV2lkdGgiLCJwcm9wb3NlZEhpZGVySGVpZ2h0IiwiZ2V0Q29sdW1uSGVhZGVySGVpZ2h0IiwicHJvcG9zZWRIaWRlcldpZHRoIiwiaGlkZXJTdHlsZSIsImlzU2Nyb2xsZWRCZXlvbmRIaWRlckhlaWdodCIsImlzU2Nyb2xsZWRCZXlvbmRIaWRlcldpZHRoIiwicm9vdEVsZW1TY3JvbGxIZWlnaHQiLCJyb290RWxlbVNjcm9sbFdpZHRoIiwiaG9sZGVyU2Nyb2xsSGVpZ2h0IiwiaG9sZGVyU2Nyb2xsV2lkdGgiLCJoZWlnaHREZWx0YSIsIndpZHRoRGVsdGEiLCJnZXRQYXJlbnRPdmVybGF5IiwiYXJyYXlFYWNoIiwic3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMiLCJtYXN0ZXJUYWJsZSIsIl9ub2Rlc1Bvb2wiLCJyb290Tm9kZSIsIm5vZGVzUG9vbCIsInNldFRhYmxlIiwic2V0Um9vdERvY3VtZW50IiwiYWRqdXN0IiwiQ2VsbHNSZW5kZXJlciIsIm9idGFpbk9yZGVyVmlldyIsIm9yZGVyVmlldyIsIm9yZGVyVmlld3MiLCJzb3VyY2VDb2x1bW5JbmRleCIsIm9idGFpbiIsInNvdXJjZVJvd0luZGV4Iiwicm93c1RvUmVuZGVyIiwiY29sdW1uc1RvUmVuZGVyIiwidmlzaWJsZVJvd0luZGV4IiwicmVuZGVyZWRSb3dUb1NvdXJjZSIsIlRSIiwiZ2V0UmVuZGVyZWROb2RlIiwicm93SGVhZGVyc1ZpZXciLCJwcmVwZW5kVmlldyIsInNldFNpemUiLCJzZXRPZmZzZXQiLCJyZW5kZXJlZENvbHVtblRvU291cmNlIiwidmlzaWJsZUNvbHVtbkluZGV4IiwiZ2V0Q3VycmVudE5vZGUiLCJfdGhpcyR0YWJsZSRyb3dVdGlscyQiLCJfdGhpcyR0YWJsZSRyb3dVdGlscyIsImNlbGxSZW5kZXJlciIsImlzQXJpYUVuYWJsZWQiLCJBMTFZX0dSSURDRUxMIiwiQTExWV9UQUJJTkRFWCIsIkExMVlfQ09MSU5ERVgiLCJyb3dVdGlscyIsImRhdGFBY2Nlc3NPYmplY3QiLCJfdGVtcGxhdGVMaXRlcmFsVGFnIiwicGVyZm9ybWFuY2VXYXJuaW5nQXBwZWFyZWQiLCJDb2xHcm91cFJlbmRlcmVyIiwicm93SGVhZGVyc0NvdW50IiwiYWxsQ29sdW1uc1RvUmVuZGVyIiwicmVuZGVyZWROb2RlcyIsImxhc3RDaGlsZCIsInRvU2luZ2xlTGluZSIsImNvbHVtblV0aWxzIiwiZ2V0SGVhZGVyV2lkdGgiLCJDb2x1bW5IZWFkZXJzUmVuZGVyZXIiLCJjb2x1bW5IZWFkZXJzQ291bnQiLCJ0aGVhZENoaWxkcmVuTGVuZ3RoIiwiQTExWV9ST1dHUk9VUCIsInJvd0hlYWRlckluZGV4IiwiY29sdW1uSGVhZGVyRnVuY3Rpb25zIiwiQTExWV9ST1ciLCJBMTFZX1JPV0lOREVYIiwicmVuZGVyZWRDb2x1bW5JbmRleCIsIkExMVlfQ09MVU1OSEVBREVSIiwiQTExWV9TQ09QRV9DT0wiLCJfcm93SGVhZGVycyIsIlJvd0hlYWRlcnNSZW5kZXJlciIsIl9jb2x1bW5IZWFkZXJzIiwiX2NvbEdyb3VwIiwiUm93c1JlbmRlcmVyIiwiX3RhYmxlIiwiVGFibGVSZW5kZXJlciIsIkNPTEdST1VQIiwiVEJPRFkiLCJzZXRSZW5kZXJlcnMiLCJjb2xHcm91cCIsInNldEF4aXNVdGlscyIsInNldEZpbHRlcnMiLCJyb3dGaWx0ZXIiLCJjb2x1bW5GaWx0ZXIiLCJzZXRWaWV3cG9ydFNpemUiLCJyb3dzQ291bnQiLCJjb2x1bW5zQ291bnQiLCJzZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzIiwicm93SGVhZGVyRnVuY3Rpb25zIiwiY2VsbHNWaWV3IiwiYXBwZW5kVmlldyIsIkExMVlfUk9XSEVBREVSIiwiQTExWV9TQ09QRV9ST1ciLCJ2aXN1YWxJbmRleCIsImdldE5vZGUiLCJjYWxjdWxhdGVXaWR0aHMiLCJfU2Nyb2xsX2JyYW5kIiwiV2Vha1NldCIsIl9nZXRMYXN0Q29sdW1uSW5kZXgiLCJsYXN0Q29sdW1uSW5kZXgiLCJpbmxpbmVTdGFydFJvb3RFbGVtZW50T2Zmc2V0IiwidGFibGVSZWN0IiwiZG9jT2Zmc2V0V2lkdGgiLCJ3aW5kb3dTY3JvbGxMZWZ0IiwiY29sdW1uc1dpZHRoIiwiX2dldExhc3RSb3dJbmRleCIsImxhc3RSb3dJbmRleCIsInJvb3RFbGVtZW50T2Zmc2V0Iiwid2luZG93U2Nyb2xsVG9wIiwiaW5uZXJIZWlnaHQiLCJyb3dzSGVpZ2h0IiwicHJpdmF0ZVNldCIsInNjcm9sbGVkSG9yaXpvbnRhbGx5Iiwic2Nyb2xsZWRWZXJ0aWNhbGx5IiwiYXV0b1NuYXBwaW5nIiwiZmlyc3RDb2x1bW4iLCJnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbiIsImZpcnN0Um93IiwiZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3ciLCJnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3ciLCJnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4iLCJtb3VzZURvd24iLCJ0b3BTdHlsZSIsImJvdHRvbVN0eWxlIiwic3RhcnRTdHlsZSIsImVuZFN0eWxlIiwiY29ybmVyRGVmYXVsdFN0eWxlIiwiY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQiLCJjb3JuZXIiLCJjb3JuZXJTdHlsZSIsImNyZWF0ZUJvcmRlcnMiLCJkb2N1bWVudEJvZHkiLCJvbk1vdXNlRW50ZXIiLCJfdGhpcyIsImJvdW5kcyIsImhhbmRsZXJFdmVudCIsIm1vdXNlRXZlbnQiLCJib3JkZXJEaXZzIiwiaGlkZSIsImJvcmRlcldpZHRoIiwiYm9yZGVyU3R5bGUiLCJjcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcyIsImRpc2FwcGVhciIsImJvcmRlcnNIb2xkZXIiLCJzZWxlY3Rpb25IYW5kbGVzIiwidG9wSGl0QXJlYSIsImJvdHRvbUhpdEFyZWEiLCJoaXRBcmVhU3R5bGUiLCJoYW5kbGVTdHlsZSIsImlzUGFydFJhbmdlIiwiYXJlYVNlbGVjdGlvbiIsInVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uIiwiaW5saW5lUG9zUHJvcGVydHkiLCJ0b3BTdHlsZXMiLCJ0b3BIaXRBcmVhU3R5bGVzIiwiYm90dG9tU3R5bGVzIiwiYm90dG9tSGl0QXJlYVN0eWxlcyIsImhhbmRsZUJvcmRlclNpemUiLCJoYW5kbGVTaXplIiwiaGl0QXJlYVNpemUiLCJ0b3RhbFRhYmxlV2lkdGgiLCJ0b3RhbFRhYmxlSGVpZ2h0IiwiYm90dG9tSGFuZGxlcklubGluZSIsImJvdHRvbUhhbmRsZXJBcmVhSW5saW5lIiwiYm90dG9tSGFuZGxlclRvcCIsImJvdHRvbUhhbmRsZXJBcmVhVG9wIiwiY29ybmVyVmlzaWJsZSIsInpJbmRleCIsImFwcGVhciIsImNvcm5lcnMiLCJkaXNhYmxlZCIsImZyb21Db2x1bW4iLCJ0b0NvbHVtbiIsInJvd0hlYWRlciIsImNvbHVtbkhlYWRlciIsImdldFJlbmRlcmVkUm93c0NvdW50IiwiZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQiLCJmcm9tVEQiLCJpc011bHRpcGxlIiwidG9URCIsImZyb21PZmZzZXQiLCJ0b09mZnNldCIsImNvbnRhaW5lck9mZnNldCIsImNvbnRhaW5lcldpZHRoIiwibWluVG9wIiwibWluTGVmdCIsImlubGluZVN0YXJ0UG9zIiwiZnJvbVdpZHRoIiwiZ3JpZFJpZ2h0UG9zIiwiaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCIsIm1vZGlmaWVkVmFsdWVzIiwiZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIiLCJmcm9tVEgiLCJpc0VudGlyZVJvd1NlbGVjdGVkIiwiYm9yZGVyVG9wV2lkdGgiLCJjb3JuZXJWaXNpYmxlU2V0dGluZyIsImxheWVyTGV2ZWwiLCJob29rUmVzdWx0IiwiY2hlY2tSb3ciLCJjaGVja0NvbCIsImJvcmRlclJpZ2h0V2lkdGgiLCJ0cmltVG9XaW5kb3ciLCJjb3JuZXJIYWxmV2lkdGgiLCJjb3JuZXJIYWxmSGVpZ2h0IiwidG9UZE9mZnNldExlZnQiLCJjb3JuZXJPdmVybGFwcGluZ0NvbnRhaW5lciIsImNvcm5lckVkZ2UiLCJib3JkZXJCb3R0b21XaWR0aCIsInN0YXJ0Um93SW5kZXgiLCJlbmRSb3dJbmRleCIsImdldEZpcnN0UmVuZGVyZWRSb3ciLCJnZXRMYXN0UmVuZGVyZWRSb3ciLCJzdGFydENvbHVtbkluZGV4IiwiZW5kQ29sdW1uSW5kZXgiLCJnZXRGaXJzdFJlbmRlcmVkQ29sdW1uIiwiZ2V0TGFzdFJlbmRlcmVkQ29sdW1uIiwiZnJvbUluZGV4IiwidG9JbmRleCIsImhlYWRlckluZGV4Iiwicm9vdEhvdEVsZW1lbnQiLCJnZXRIZWFkZXJGbiIsImRpbWVuc2lvbkZuIiwiZW50aXJlU2VsZWN0aW9uQ2xhc3NuYW1lIiwiZGltZW5zaW9uUHJvcGVydHkiLCJzdGFydEhlYWRlciIsImVuZEhlYWRlciIsImdldFJvd0hlYWRlciIsImdldENvbHVtbkhlYWRlciIsImNvbHVtbkhlYWRlckxldmVsQ291bnQiLCJzdGFydEhlYWRlck9mZnNldCIsImVuZE9mZnNldCIsImNoYW5nZUJvcmRlclN0eWxlIiwiYm9yZGVyRWxlbWVudCIsImNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlIiwidG9nZ2xlSGlkZGVuQ2xhc3MiLCJkZXN0cm95V2l0aE93bkV2ZW50c09ubHkiLCJfY29uc3RhbnRzMiIsIl9zY2FubmVyMiIsIl9ib3JkZXIiLCJfYWN0aXZlT3ZlcmxheXNXb3QiLCJfc2VsZWN0aW9ucyIsIl9zY2FubmVyIiwiX2FwcGxpZWRDbGFzc2VzIiwiX2Rlc3Ryb3lMaXN0ZW5lcnMiLCJfc2VsZWN0aW9uQm9yZGVycyIsIl9TZWxlY3Rpb25NYW5hZ2VyX2JyYW5kIiwiX3Jlc2V0Q2VsbHMiLCJhcHBsaWVkT3ZlcmxheXNDbGFzc2VzIiwiY2xhc3Nlc1RvUmVtb3ZlIiwiX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NSIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldDYiLCJub2RlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjZWxsQXR0cmlidXRlcyIsImhlYWRlckF0dHJpYnV0ZXMiLCJfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWMiLCJTZWxlY3Rpb25TY2FubmVyIiwic2V0QWN0aXZlT3ZlcmxheSIsImFjdGl2ZVdvdCIsImdldEZvY3VzIiwiY3JlYXRlTGF5ZXJlZEFyZWEiLCJnZXRCb3JkZXJJbnN0YW5jZSIsInNlbGVjdGlvbiIsImdldEJvcmRlckluc3RhbmNlcyIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldDIiLCJfY2xhc3NQcml2YXRlRmllbGRHZXQzIiwiZGVzdHJveUJvcmRlcnMiLCJjbGFzc05hbWVzTWFwIiwiaGVhZGVyQXR0cmlidXRlc01hcCIsImNyZWF0ZUxheWVycyIsInNlbGVjdGlvblR5cGUiLCJhZGRMb2NhbEhvb2siLCJib3JkZXJJbnN0YW5jZSIsInNldEFjdGl2ZVNlbGVjdGlvbiIsInNjYW4iLCJjbGFzc05hbWVzTGF5ZXJzIiwiZ2V0Q29ybmVycyIsIl9jbGFzc1ByaXZhdGVGaWVsZEdldDQiLCJjbGFzc05hbWVzIiwib2NjdXJyZW5jZUNvdW50IiwiZmxhdCIsIl9TZWxlY3Rpb25TY2FubmVyX2JyYW5kIiwiX3NjYW5DZWxsc1JhbmdlIiwicmVuZGVyZWRSb3dzQ291bnQiLCJyZW5kZXJlZENvbHVtbnNDb3VudCIsImFjdGl2ZU92ZXJsYXlzV290IiwiZWxlbWVudHMiLCJzY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlIiwic2NhblJvd3NJbkhlYWRlcnNSYW5nZSIsInNjYW5DZWxsc1JhbmdlIiwic2NhblJvd3NJbkNlbGxzUmFuZ2UiLCJzY2FuQ29sdW1uc0luQ2VsbHNSYW5nZSIsInRvcFJvdyIsInRvcENvbHVtbiIsImJvdHRvbVJvdyIsImJvdHRvbUNvbHVtbiIsImdldENvbHVtbkhlYWRlcnNDb3VudCIsImdldFJvd0hlYWRlcnNDb3VudCIsInNvdXJjZUNvbHVtbiIsImhlYWRlckxldmVsIiwicG9zaXRpdmVCYXNlZEhlYWRlckxldmVsIiwibmV3U291cmNlQ29sIiwiY29sdW1uQ3Vyc29yIiwic2VsZWN0aW9uV2lkdGgiLCJuZXdTb3VyY2VSb3ciLCJyb3dDdXJzb3IiLCJzZWxlY3Rpb25IZWlnaHQiLCJhZGRpdGlvbmFsU2VsZWN0aW9uQ2xhc3MiLCJfbG9jYWxIb29rcyIsIm9sZENvb3JkcyIsIm5ld0Nvb3JkcyIsInJ1bkxvY2FsSG9va3MiLCJtaXhpbiIsImdldERlZmF1bHRzIiwiaXNEYXRhVmlld0luc3RhbmNlIiwiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIiwiY3VycmVudFJvd0NsYXNzTmFtZSIsImN1cnJlbnRDb2x1bW5DbGFzc05hbWUiLCJmcmVlemVPdmVybGF5cyIsInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIsInNob3VsZFJlbmRlclRvcE92ZXJsYXkiLCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IiwiY2VsbERhdGEiLCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIiwidmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsIm9uQ2VsbE1vdXNlRG93biIsIm9uQ2VsbENvbnRleHRNZW51Iiwib25DZWxsTW91c2VPdmVyIiwib25DZWxsTW91c2VPdXQiLCJvbkNlbGxNb3VzZVVwIiwib25DZWxsRGJsQ2xpY2siLCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLCJvbkNlbGxDb3JuZXJEYmxDbGljayIsIm9uRHJhdyIsIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsIm9uQmVmb3JlRHJhd0JvcmRlcnMiLCJvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Iiwib25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLCJvblNjcm9sbEhvcml6b250YWxseSIsIm9uU2Nyb2xsVmVydGljYWxseSIsIm9uQmVmb3JlVG91Y2hTY3JvbGwiLCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiLCJvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJvbk1vZGlmeUdldENlbGxDb29yZHMiLCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwib25XaW5kb3dSZXNpemUiLCJvbkNvbnRhaW5lckVsZW1lbnRSZXNpemUiLCJyZW5kZXJBbGxDb2x1bW5zIiwicmVuZGVyQWxsUm93cyIsImdyb3VwcyIsInJvd0hlYWRlcldpZHRoIiwiY29sdW1uSGVhZGVySGVpZ2h0IiwiaGVhZGVyQ2xhc3NOYW1lIiwicnRsTW9kZSIsImFyaWFUYWdzIiwic2V0dGluZ1ZhbHVlIiwiX3JlbmRlcmVyIiwiX2NvbHVtbjIiLCJfcm93MiIsImlzTWFzdGVyIiwicmVtb3ZlVGV4dE5vZGVzIiwiY3JlYXRlU3ByZWFkZXIiLCJjcmVhdGVIaWRlciIsImNyZWF0ZUhvbGRlciIsImFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIiLCJmaXhUYWJsZURvbVRyZWUiLCJjb3JyZWN0SGVhZGVyV2lkdGgiLCJvcmlnUm93SGVhZGVyV2lkdGgiLCJfbW9kaWZ5Um93SGVhZGVyV2lkdGgiLCJ0YWJsZVJlbmRlcmVyIiwiaXMiLCJvdmVybGF5VHlwZU5hbWUiLCJFTEVNRU5UX05PREUiLCJydW5GYXN0RHJhdyIsImNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzIiwibGVmdFNjcm9sbFBvcyIsImNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycyIsImNyZWF0ZVBhcnRpYWxseVZpc2libGVDYWxjdWxhdG9ycyIsInBlcmZvcm1SZWRyYXciLCJza2lwUmVuZGVyIiwicmVzZXRPdmVyc2l6ZWRSb3dzIiwibWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMiLCJhZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRzIiwibWFya092ZXJzaXplZFJvd3MiLCJoaWRlcldpZHRoIiwibWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyIiwic291cmNlQ29sSW5kZXgiLCJwcmV2aW91c0NvbEhlYWRlckhlaWdodCIsImN1cnJlbnRIZWFkZXIiLCJjdXJyZW50SGVhZGVySGVpZ2h0IiwiY29sdW1uSGVhZGVySGVpZ2h0U2V0dGluZyIsIm92ZXJzaXplZENvbHVtbkhlYWRlcnMiLCJvdmVyc2l6ZWRSb3dzIiwiaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MiLCJpc1Jvd0FmdGVyUmVuZGVyZWRSb3dzIiwiaXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMiLCJpc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zIiwicmVuZGVyZWRSb3dJbmRleCIsIl90aGlzJHJvd0ZpbHRlciIsIl90aGlzJHJvd0ZpbHRlcjIiLCJnZXRDb2x1bW5IZWFkZXJzIiwiVEhzIiwidmlzaWJsZUNvbHVtbiIsInJlbmRlcmVkUm93IiwidmlzaWJsZVJvdyIsImdldFJvd0hlYWRlcnMiLCJjZWxsRWxlbWVudCIsImNsb3Nlc3QiLCJDT05UQUlORVIiLCJjZWxsSW5kZXgiLCJvdmVybGF5Q29udGFpbnNFbGVtZW50IiwicHJldmlvdXNSb3dIZWlnaHQiLCJyb3dJbm5lckhlaWdodCIsImN1cnJlbnRUciIsImdldFRyRm9yUm93IiwiaXNDb2x1bW5IZWFkZXJSZW5kZXJlZCIsImlzUm93SGVhZGVyUmVuZGVyZWQiLCJpc0NvbHVtbkFmdGVyVmlld3BvcnQiLCJpc1Jvd0FmdGVyVmlld3BvcnQiLCJpc0NvbHVtbkJlZm9yZVZpZXdwb3J0IiwiaXNMYXN0Um93RnVsbHlWaXNpYmxlIiwiaXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlIiwiYWxsUm93c0luVmlld3BvcnQiLCJnZXRWaXNpYmxlUm93c0NvdW50IiwiYWxsQ29sdW1uc0luVmlld3BvcnQiLCJnZXRWaXNpYmxlQ29sdW1uc0NvdW50IiwiZ2V0SGVhZGVySGVpZ2h0IiwiaGFzVGFibGVIZWlnaHQiLCJoYXNUYWJsZVdpZHRoIiwicm93SGVhZGVyV2lkdGhGYWN0b3J5Iiwid2lkdGhzIiwiX2NvcnJlY3RSb3dIZWFkZXJXaWR0aCIsIl9zdGlja3lSb3dzQm90dG9tIiwiX2NhbGN1bGF0ZWRDb2x1bW5zIiwiQm90dG9tT3ZlcmxheVRhYmxlIiwiX3N0aWNreUNvbHVtbnNTdGFydCIsIkJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVRhYmxlIiwiX2NhbGN1bGF0ZWRSb3dzIiwiSW5saW5lU3RhcnRPdmVybGF5VGFibGUiLCJNYXN0ZXJUYWJsZSIsInRyaW1taW5nRWxlbWVudCIsInRyaW1taW5nRWxlbWVudFBhcmVudCIsInRyaW1taW5nSGVpZ2h0IiwiZ2V0U3R5bGUiLCJ0cmltbWluZ092ZXJmbG93IiwiaG9sZGVyU3R5bGUiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJjbG9uZUhlaWdodCIsImlzVGFibGVWaXNpYmxlIiwib3ZlcmxheU5hbWUiLCJoYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkIiwicm93SGVhZGVyQ291bnQiLCJjYWxjdWxhdGVkQ29sdW1ucyIsImNhbGN1bGF0ZWRSb3dzIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iiwic3RpY2t5Um93c0JvdHRvbSIsInN0aWNreVJvd3NUb3AiLCJfc3RpY2t5Um93c1RvcCIsIlRvcE92ZXJsYXlUYWJsZSIsIlRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheVRhYmxlIiwiX2NvbHVtblN0cmV0Y2hpbmciLCJzdHJldGNoaW5nIiwiQ29sdW1uU3RyZXRjaGluZyIsInN0cmV0Y2hNb2RlIiwic3RyZXRjaGluZ0NvbHVtbldpZHRoRm4iLCJzdHJldGNoZWRXaWR0aCIsInNvdXJjZUluZGV4Iiwib3ZlcnNpemVkSGVpZ2h0IiwiaGVhZGVyV2lkdGhzIiwicmVmcmVzaFN0cmV0Y2hpbmciLCJyb3dIZWFkZXJXaWR0aFNldHRpbmciLCJfdG90YWxUYXJnZXRXaWR0aCIsIl90b3RhbENvbHVtbnMiLCJfc3RyZXRjaGluZ0NvbHVtbldpZHRoRm4iLCJfY29sdW1uV2lkdGhGbiIsIl9zdHJldGNoTW9kZSIsInRvdGFsV2lkdGgiLCJzdHJldGNoQWxsUmF0aW8iLCJzdHJldGNoQWxsQ29sdW1uc1dpZHRoIiwibmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aCIsInN0cmV0Y2hMYXN0V2lkdGgiLCJzdW1BbGwiLCJwZXJtYW5lbnRDb2x1bW5XaWR0aCIsInJlbWFpbmluZ1NpemUiLCJJbmZpbml0eSIsImxhc3RDb2x1bW5XaWR0aCIsImJhc2VXaWR0aCIsIl9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aCIsIl9nZXRTdHJldGNoZWRMYXN0Q29sdW1uV2lkdGgiLCJzdW1SYXRpb1dpZHRoIiwibmV3U3RyZXRjaGVkV2lkdGgiLCJXT1JLSU5HX1NQQUNFX0FMTCIsIldPUktJTkdfU1BBQ0VfVE9QIiwiV09SS0lOR19TUEFDRV9CT1RUT00iLCJfdmlldyIsIl9zaGFyZWRWaWV3Iiwic2l6ZVNldCIsIl92aWV3U2l6ZVNldCIsImNoaWxkTm9kZVR5cGUiLCJpc1NoYXJlZFZpZXdTZXQiLCJpc1NoYXJlZCIsImNvbGxlY3RlZE5vZGVzIiwiZ2V0UmVuZGVyZWRDaGlsZENvdW50IiwiY2hpbGRFbGVtZW50Q291bnQiLCJpc1BsYWNlT24iLCJuZXh0U2l6ZSIsImdldFZpZXdTaXplIiwibmV3Tm9kZSIsImlzU2hhcmVkUGxhY2VkT25Ub3AiLCJzaGFyZWRTaXplIiwicmVwbGFjZUNoaWxkIiwiY3VycmVudFNpemUiLCJjdXJyZW50T2Zmc2V0IiwibmV4dE9mZnNldCIsIl92aWV3U2l6ZSIsIndvcmtpbmdTcGFjZSIsInZpZXdTaXplIiwiY3VycmVudERvY3VtZW50IiwiZ2V0Q29udGFpbmVyRmlsbFdpZHRoIiwic3VtQ29sdW1uV2lkdGhzIiwic3RyZXRjaFNldHRpbmciLCJtYWluQ29udGFpbmVyIiwiZHVtbXlFbGVtZW50IiwiZmlsbFdpZHRoIiwiZ2V0V29ya3NwYWNlT2Zmc2V0IiwiY29udGFpbmVySGVpZ2h0Iiwicm93SGVhZGVyc1dpZHRoU2V0dGluZyIsIm5leHRTaWJsaW5nIiwiY3JlYXRlUm93c0NhbGN1bGF0b3IiLCJmaXhlZFJvd3NIZWlnaHQiLCJjcmVhdGVDb2x1bW5zQ2FsY3VsYXRvciIsImZpeGVkQ29sdW1uc1dpZHRoIiwicHJvcG9zZWRSb3dzVmlzaWJsZUNhbGN1bGF0b3IiLCJhcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkIiwicHJvcG9zZWRDb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IiLCJhcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkIiwicmVuZGVyZWRTdGFydFJvdyIsInJlbmRlcmVkRW5kUm93IiwicmVuZGVyZWRTdGFydENvbHVtbiIsInJlbmRlcmVkRW5kQ29sdW1uIiwicmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkIiwiX3Jvb3RJbnN0YW5jZSIsIl9kYXRhTWFwIiwiX3BsdWdpbkhvb2tzIiwiX3JlZ2lzdHJ5IiwiX3JlZ2lzdHJ5MiIsIl90ZXh0VHlwZSIsIl9iYXNlRWRpdG9yIiwiX3NyYyIsIkhhbmRzb250YWJsZSIsInJvb3RFbGVtZW50IiwidXNlclNldHRpbmdzIiwicm9vdEluc3RhbmNlU3ltYm9sIiwicmVnaXN0ZXJDZWxsVHlwZSIsIlRleHRDZWxsVHlwZSIsImVkaXRvcnMiLCJCYXNlRWRpdG9yIiwiRGVmYXVsdFNldHRpbmdzIiwibWV0YVNjaGVtYUZhY3RvcnkiLCJnZXRTaW5nbGV0b24iLCJwYWNrYWdlTmFtZSIsImJ1aWxkRGF0ZSIsImxhbmd1YWdlcyIsImRpY3Rpb25hcnlLZXlzIiwiZ2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5IiwiZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzIiwicmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnkiLCJnZXRUcmFuc2xhdGVkUGhyYXNlIiwiX2F1dG9jb21wbGV0ZUVkaXRvciIsIl9hdXRvY29tcGxldGVSZW5kZXJlciIsIl9hdXRvY29tcGxldGVWYWxpZGF0b3IiLCJDRUxMX1RZUEUiLCJBdXRvY29tcGxldGVDZWxsVHlwZSIsImVkaXRvciIsIkF1dG9jb21wbGV0ZUVkaXRvciIsImF1dG9jb21wbGV0ZVJlbmRlcmVyIiwidmFsaWRhdG9yIiwiYXV0b2NvbXBsZXRlVmFsaWRhdG9yIiwiX2F1dG9jb21wbGV0ZVR5cGUiLCJfY2hlY2tib3hFZGl0b3IiLCJfY2hlY2tib3hSZW5kZXJlciIsIkNoZWNrYm94Q2VsbFR5cGUiLCJDaGVja2JveEVkaXRvciIsImNoZWNrYm94UmVuZGVyZXIiLCJfY2hlY2tib3hUeXBlIiwiX2RhdGVFZGl0b3IiLCJfZGF0ZVJlbmRlcmVyIiwiX2RhdGVWYWxpZGF0b3IiLCJEYXRlQ2VsbFR5cGUiLCJEYXRlRWRpdG9yIiwiZGF0ZVJlbmRlcmVyIiwiZGF0ZVZhbGlkYXRvciIsIl9kYXRlVHlwZSIsIl9kcm9wZG93bkVkaXRvciIsIl9kcm9wZG93blJlbmRlcmVyIiwiX2Ryb3Bkb3duVmFsaWRhdG9yIiwiRHJvcGRvd25DZWxsVHlwZSIsIkRyb3Bkb3duRWRpdG9yIiwiZHJvcGRvd25SZW5kZXJlciIsImRyb3Bkb3duVmFsaWRhdG9yIiwiX2Ryb3Bkb3duVHlwZSIsIl9oYW5kc29udGFibGVFZGl0b3IiLCJfaGFuZHNvbnRhYmxlUmVuZGVyZXIiLCJIYW5kc29udGFibGVDZWxsVHlwZSIsIkhhbmRzb250YWJsZUVkaXRvciIsImhhbmRzb250YWJsZVJlbmRlcmVyIiwiX2hhbmRzb250YWJsZVR5cGUiLCJyZWdpc3RlckFsbENlbGxUeXBlcyIsIl9udW1lcmljVHlwZSIsIk51bWVyaWNDZWxsVHlwZSIsIl9wYXNzd29yZFR5cGUiLCJQYXNzd29yZENlbGxUeXBlIiwiX3NlbGVjdFR5cGUiLCJTZWxlY3RDZWxsVHlwZSIsIl90aW1lVHlwZSIsIlRpbWVDZWxsVHlwZSIsIkFVVE9DT01QTEVURV9UWVBFIiwiQ0hFQ0tCT1hfVFlQRSIsIkRBVEVfVFlQRSIsIkRST1BET1dOX1RZUEUiLCJIQU5EU09OVEFCTEVfVFlQRSIsIk5VTUVSSUNfVFlQRSIsIlBBU1NXT1JEX1RZUEUiLCJTRUxFQ1RfVFlQRSIsIlRFWFRfVFlQRSIsIlRJTUVfVFlQRSIsImdldENlbGxUeXBlIiwiZ2V0UmVnaXN0ZXJlZENlbGxUeXBlTmFtZXMiLCJnZXRSZWdpc3RlcmVkQ2VsbFR5cGVzIiwiaGFzQ2VsbFR5cGUiLCJfbnVtZXJpY0VkaXRvciIsIl9udW1lcmljUmVuZGVyZXIiLCJfbnVtZXJpY1ZhbGlkYXRvciIsIk51bWVyaWNFZGl0b3IiLCJudW1lcmljUmVuZGVyZXIiLCJudW1lcmljVmFsaWRhdG9yIiwiZGF0YVR5cGUiLCJfcGFzc3dvcmRFZGl0b3IiLCJfcGFzc3dvcmRSZW5kZXJlciIsIlBhc3N3b3JkRWRpdG9yIiwicGFzc3dvcmRSZW5kZXJlciIsImNvcHlhYmxlIiwiaGFzSXRlbSIsImdldEl0ZW0iLCJyZWdpc3RlckVkaXRvciIsIl9yZWdpc3RyeTMiLCJyZWdpc3RlclZhbGlkYXRvciIsInJlZ2lzdGVyIiwiX3N0YXRpY1JlZ2lzdGVyIiwiZ2V0VmFsdWVzIiwiX3NlbGVjdEVkaXRvciIsIl9zZWxlY3RSZW5kZXJlciIsIlNlbGVjdEVkaXRvciIsInNlbGVjdFJlbmRlcmVyIiwiX3RleHRFZGl0b3IiLCJfdGV4dFJlbmRlcmVyIiwiVGV4dEVkaXRvciIsInRleHRSZW5kZXJlciIsIl90aW1lRWRpdG9yIiwiX3RpbWVSZW5kZXJlciIsIl90aW1lVmFsaWRhdG9yIiwiVGltZUVkaXRvciIsInRpbWVSZW5kZXJlciIsInRpbWVWYWxpZGF0b3IiLCJfdXNlclNldHRpbmdzJGxheW91dEQiLCJkYXRhbWFwIiwiZGF0YVNvdXJjZSIsImdyaWQiLCJlZGl0b3JNYW5hZ2VyIiwiZm9jdXNNYW5hZ2VyIiwidmlld3BvcnRTY3JvbGxlciIsImZpcnN0UnVuIiwiaGFzVmFsaWRQYXJhbWV0ZXIiLCJyZWdpc3RlckFzUm9vdEluc3RhbmNlIiwiaXNEZXN0cm95ZWQiLCJyZW5kZXJTdXNwZW5kZWRDb3VudGVyIiwiZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlciIsImxheW91dERpcmVjdGlvbiIsInJvb3RFbGVtZW50RGlyZWN0aW9uIiwiaXNMdHIiLCJnZXREaXJlY3Rpb25GYWN0b3IiLCJfcmVnaXN0cnk1IiwiZ2V0VmFsaWRMYW5ndWFnZUNvZGUiLCJtZXRhTWFuYWdlciIsIk1ldGFNYW5hZ2VyIiwiRHluYW1pY0NlbGxNZXRhTW9kIiwiRXh0ZW5kTWV0YVByb3BlcnRpZXNNb2QiLCJ0YWJsZU1ldGEiLCJnZXRUYWJsZU1ldGEiLCJnbG9iYWxNZXRhIiwiZ2V0R2xvYmFsTWV0YSIsInBsdWdpbnNSZWdpc3RyeSIsIl91bmlxdWVNYXAiLCJjcmVhdGVVbmlxdWVNYXAiLCJyZW5kZXJDYWxsIiwiaXNSb290SW5zdGFuY2UiLCJfaW5qZWN0UHJvZHVjdEluZm8iLCJmb3JlaWduSG90SW5zdGFuY2VzIiwiY29sdW1uSW5kZXhNYXBwZXIiLCJfdHJhbnNsYXRpb25zIiwiSW5kZXhNYXBwZXIiLCJyb3dJbmRleE1hcHBlciIsInJ1bkhvb2tzIiwiX2RhdGFTb3VyY2UiLCJwcm9wVG9Db2wiLCJpc0VkaXRvck9wZW5lZCIsImdldEFjdGl2ZUVkaXRvciIsImlzT3BlbmVkIiwiY291bnRSZW5kZXJhYmxlQ29sdW1ucyIsImNvdW50UmVuZGVyYWJsZVJvd3MiLCJjb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSIsImNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlIiwiZ2V0U2hvcnRjdXRNYW5hZ2VyIiwiX2NyZWF0ZUNlbGxSYW5nZSIsInZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyIsInZpc3VhbFJvdyIsInZpc3VhbENvbHVtbiIsImdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgiLCJyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMiLCJyZW5kZXJhYmxlUm93IiwicmVuZGVyYWJsZUNvbHVtbiIsImdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgiLCJmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93IiwidmlzdWFsUm93RnJvbSIsInZpc3VhbFJvd1RvIiwibWluSW5kZXgiLCJtYXhJbmRleCIsImdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCIsImZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4iLCJ2aXN1YWxDb2x1bW5Gcm9tIiwidmlzdWFsQ29sdW1uVG8iLCJpc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbiIsImdldFNldHRpbmdzIiwiZGlzYWJsZVZpc3VhbFNlbGVjdGlvbiIsImdldENlbGxNZXRhIiwib25JbmRleE1hcHBlckNhY2hlVXBkYXRlIiwiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCJzZXRMYW5ndWFnZSIsImxhbmd1YWdlQ29kZSIsIm5vcm1hbGl6ZWRMYW5ndWFnZUNvZGUiLCJfdXRpbHMiLCJub3JtYWxpemVMYW5ndWFnZUNvZGUiLCJoYXNMYW5ndWFnZURpY3Rpb25hcnkiLCJ3YXJuVXNlckFib3V0TGFuZ3VhZ2VSZWdpc3RyYXRpb24iLCJzZXRDbGFzc05hbWUiLCJjbGFzc1NldHRpbmdzIiwiZ2xvYmFsTWV0YVNldHRpbmdzQXJyYXkiLCJzZXR0aW5nc0FycmF5Iiwic3RyaW5nVG9BcnJheSIsImNsYXNzTmFtZVRvUmVtb3ZlIiwiZ2V0RGlmZmVyZW5jZU9mQXJyYXlzIiwiY2xhc3NOYW1lVG9BZGQiLCJWYWxpZGF0b3JzUXVldWUiLCJyZXNvbHZlZCIsInZhbGlkYXRvcnNJblF1ZXVlIiwidmFsaWQiLCJhZGRWYWxpZGF0b3JUb1F1ZXVlIiwicmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlIiwiY2hlY2tJZlF1ZXVlSXNFbXB0eSIsIm9uUXVldWVFbXB0eSIsImdldFBhcnNlZE51bWJlciIsIm51bWVyaWNEYXRhIiwidW5pZmllZE51bWVyaWNEYXRhIiwidmFsaWRhdGVDaGFuZ2VzIiwiYWN0aXZlRWRpdG9yIiwid2FpdGluZ0ZvclZhbGlkYXRvciIsInNob3VsZEJlQ2FuY2VsZWQiLCJjYW5jZWxDaGFuZ2VzIiwidmlzdWFsQ29sIiwiaXNOdW1lcmljTGlrZSIsImdldENlbGxWYWxpZGF0b3IiLCJ2YWxpZGF0ZUNlbGwiLCJjZWxsUHJvcGVydGllc1JlZmVyZW5jZSIsImFsbG93SW52YWxpZCIsImludmFsaWRDZWxsQ2xhc3NOYW1lIiwiYXBwbHlDaGFuZ2VzIiwic2tpcFRoaXNDaGFuZ2UiLCJhbGxvd0luc2VydFJvdyIsIm51bWJlck9mQ3JlYXRlZFJvd3MiLCJjcmVhdGVSb3ciLCJhbGxvd0luc2VydENvbHVtbiIsIm51bWJlck9mQ3JlYXRlZENvbHVtbnMiLCJjcmVhdGVDb2wiLCJmb3JjZUZ1bGxSZW5kZXIiLCJhZGp1c3RSb3dzQW5kQ29scyIsImNsb3NlRWRpdG9yIiwicHJlcGFyZUVkaXRvciIsInJlZnJlc2hWYWx1ZSIsInNldERhdGFJbnB1dFRvQXJyYXkiLCJwcm9wT3JDb2wiLCJwcm9jZXNzQ2hhbmdlcyIsImJlZm9yZUNoYW5nZVJlc3VsdCIsImZpbHRlcmVkQ2hhbmdlcyIsImNoYW5nZSIsImlzTGFzdFNlbGVjdGlvbkxheWVyIiwicHJldmVudFNjcm9sbGluZyIsImNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lciIsInNlbGVjdGlvblJhbmdlIiwiZ2V0U2VsZWN0ZWRSYW5nZSIsImN1cnJlbnQiLCJzZWxlY3Rpb25MYXllckxldmVsIiwiY29sVG9Qcm9wIiwiaXNUb3VjaGVkIiwiaXNTZWxlY3RlZEJ5Um93SGVhZGVyIiwiaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyIiwiZ2V0U2VsZWN0aW9uU291cmNlIiwiY2VsbFJhbmdlcyIsImNoYW5nZWRJc011bHRpcGxlIiwiX2xlbjMiLCJfa2V5MyIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJfbGVuOCIsIl9rZXk4IiwiX2xlbjkiLCJfa2V5OSIsIl9sZW4xMCIsIl9rZXkxMCIsIl9sZW4xMSIsIl9rZXkxMSIsIl9sZW4xMiIsIl9rZXkxMiIsIl9sZW4xMyIsIl9rZXkxMyIsIl9sZW4xNCIsIl9rZXkxNCIsIl9sZW4xNSIsIl9rZXkxNSIsImFsdGVyIiwidG90YWxDb2xzIiwiYWN0aW9uIiwiX2luZGV4IiwiX2luZGV4MiIsImFtb3VudCIsImtlZXBFbXB0eVJvd3MiLCJub3JtYWxpemVJbmRleGVzR3JvdXAiLCJpbmRleGVzIiwic29ydGVkSW5kZXhlcyIsIl9yZWYyIiwiX3JlZjMiLCJpbmRleEEiLCJpbmRleEIiLCJhcnJheVJlZHVjZSIsIl9yZWY0IiwiZ3JvdXBJbmRleCIsImdyb3VwQW1vdW50IiwicHJldmlvdXNJdGVtIiwicHJldkluZGV4IiwicHJldkFtb3VudCIsInByZXZMYXN0SW5kZXgiLCJhbW91bnRUb0FkZCIsIm51bWJlck9mU291cmNlUm93cyIsImNvdW50U291cmNlUm93cyIsImluc2VydFJvd01vZGUiLCJyb3dEZWx0YSIsInN0YXJ0UGh5c2ljYWxJbmRleCIsInN0YXJ0Um93UGh5c2ljYWxJbmRleCIsInNoaWZ0Um93cyIsInRvVmlzdWFsUm93IiwiaW5zZXJ0Q29sdW1uTW9kZSIsImNvdW50U291cmNlQ29scyIsImNvbERlbHRhIiwic3RhcnRDb2x1bW5QaHlzaWNhbEluZGV4Iiwic3BsaWNlQXJyYXkiLCJ0b1Zpc3VhbENvbHVtbiIsInNoaWZ0Q29sdW1ucyIsInJlbW92ZVJvdyIsIl9yZWY1IiwiY2FsY0luZGV4IiwiaXNTZWxlY3RlZCIsImdldFNlbGVjdGVkUmFuZ2VMYXN0IiwiZGVzZWxlY3QiLCJyZW1vdmVDb2wiLCJfcmVmNiIsInBoeXNpY2FsQ29sdW1uSW5kZXgiLCJ0b1BoeXNpY2FsQ29sdW1uIiwibWluUm93cyIsIm1pbkNvbHMiLCJtaW5TcGFyZUNvbHMiLCJuck9mUm93cyIsImVtcHR5Um93cyIsImNvdW50RW1wdHlSb3dzIiwiZW1wdHlSb3dzTWlzc2luZyIsInJvd3NUb0NyZWF0ZSIsImVtcHR5Q29scyIsImNvdW50RW1wdHlDb2xzIiwibnJPZkNvbHVtbnMiLCJjb2xzVG9DcmVhdGUiLCJlbXB0eUNvbHNNaXNzaW5nIiwicG9wdWxhdGVGcm9tQXJyYXkiLCJybGVuIiwic2V0RGF0YSIsIm5ld0RhdGFCeUNvbHVtbnMiLCJjb2x1bW5zUG9wdWxhdGlvbkVuZCIsInJvd3NQb3B1bGF0aW9uRW5kIiwicG9wdWxhdGVkRGF0YUJ5Q29sdW1ucyIsInBpdm90IiwibnVtYmVyT2ZEYXRhQ29sdW1ucyIsIm51bWJlck9mQ29sdW1uc1RvUG9wdWxhdGUiLCJwdXNoZWREb3duRGF0YUJ5Um93cyIsImdldERhdGEiLCJwdXNoZWREb3duRGF0YUJ5Q29sdW1ucyIsIm51bWJlck9mRGF0YVJvd3MiLCJudW1iZXJPZlJvd3NUb1BvcHVsYXRlIiwicHVzaGVkUmlnaHREYXRhQnlSb3dzIiwiY2VsbE1ldGEiLCJza2lwcGVkUm93Iiwic2tpcHBlZENvbHVtbiIsInB1c2hEYXRhIiwiZ2V0SW5wdXRWYWx1ZSIsInJvd1ZhbHVlIiwicm93SW5wdXRMZW5ndGgiLCJyb3dTZWxlY3Rpb25MZW5ndGgiLCJjb2xJbnB1dExlbmd0aCIsImNvbFNlbGVjdGlvbkxlbmd0aCIsInNraXBSb3dPblBhc3RlIiwic2tpcENvbHVtbk9uUGFzdGUiLCJvcmdWYWx1ZSIsImdldERhdGFBdENlbGwiLCJvcmdWYWx1ZVNjaGVtYSIsImR1Y2tTY2hlbWEiLCJ2YWx1ZVNjaGVtYSIsImlzT2JqZWN0RXF1YWwiLCJkZWVwQ2xvbmUiLCJpc0lwYWRPUyIsInVwZGF0ZVNldHRpbmdzIiwiX3RhYmxlVmlldyIsIl9lZGl0b3JNYW5hZ2VyIiwiZ2V0SW5zdGFuY2UiLCJfaW5kZXgzIiwiY3JlYXRlVmlld3BvcnRTY3JvbGxlciIsIl9mb2N1c01hbmFnZXIiLCJGb2N1c01hbmFnZXIiLCJpbnN0YWxsRm9jdXNDYXRjaGVyIiwib2JzZXJ2ZVZpc2liaWxpdHlDaGFuZ2VPbmNlIiwiX3d0IiwiZXhwcmVzc2lvbiIsInZhbGlkYXRvckNhbGxiYWNrIiwiX3JlZ2lzdGVySW1tZWRpYXRlIiwiaWxlbiIsImNoYW5nZVNvdXJjZSIsImdldEF0Q2VsbCIsInRvUGh5c2ljYWxSb3ciLCJwcm9jZXNzZWRDaGFuZ2VzIiwic2V0RGF0YUF0Um93UHJvcCIsImxpc3RlbiIsImlzTGlzdGVuaW5nIiwiZm9yZWlnbkhvdCIsInVubGlzdGVuIiwiYWN0aXZlR3VpZCIsImRlc3Ryb3lFZGl0b3IiLCJyZXZlcnRPcmlnaW5hbCIsInByZXBhcmVFZGl0b3JJZk5lZWRlZCIsImVuZENvbCIsInNwbGljZUNvbCIsIl9sZW4xNiIsIl9rZXkxNiIsInNwbGljZVJvdyIsIl9sZW4xNyIsIl9rZXkxNyIsImdldFNlbGVjdGVkIiwiYXJyYXlNYXAiLCJfcmVmNyIsImdldFNlbGVjdGVkTGFzdCIsInNlbGVjdGVkIiwic2VsZWN0ZWRSYW5nZSIsImVtcHR5U2VsZWN0ZWRDZWxscyIsInJhbmdlRWFjaCIsImlzUmVuZGVyU3VzcGVuZGVkIiwic3VzcGVuZFJlbmRlciIsInJlc3VtZVJlbmRlciIsIm5leHRWYWx1ZSIsImJhdGNoUmVuZGVyIiwid3JhcHBlZE9wZXJhdGlvbnMiLCJpc0V4ZWN1dGlvblN1c3BlbmRlZCIsInN1c3BlbmRFeGVjdXRpb24iLCJzdXNwZW5kT3BlcmF0aW9ucyIsInJlc3VtZUV4ZWN1dGlvbiIsImZvcmNlRmx1c2hDaGFuZ2VzIiwicmVzdW1lT3BlcmF0aW9ucyIsImJhdGNoRXhlY3V0aW9uIiwicmVmcmVzaERpbWVuc2lvbnMiLCJsYXN0V2lkdGgiLCJsYXN0SGVpZ2h0IiwiZ2V0TGFzdFNpemUiLCJpc1NpemVDaGFuZ2VkIiwic2V0TGFzdFNpemUiLCJ1cGRhdGVEYXRhIiwicmVwbGFjZURhdGEiLCJuZXdEYXRhTWFwIiwiZml0VG9MZW5ndGgiLCJnZXRJbml0aWFsQ29sdW1uQ291bnQiLCJob3RJbnN0YW5jZSIsImRhdGFNYXAiLCJpbnRlcm5hbFNvdXJjZSIsImxvYWREYXRhIiwiY2xlYXJDZWxsc0NhY2hlIiwiaW5pdEluZGV4TWFwcGVycyIsImNvbHVtbnNTZXR0aW5ncyIsImZpbmFsTnJPZkNvbHVtbnMiLCJuck9mU291cmNlQ29sdW1ucyIsImNvbFRvUHJvcENhY2hlIiwiZGF0YVNjaGVtYSIsImdldFNjaGVtYSIsImRlZXBPYmplY3RTaXplIiwiaW5pdFRvTGVuZ3RoIiwicm93MiIsImNvbHVtbjIiLCJnZXRSYW5nZSIsIkRFU1RJTkFUSU9OX1JFTkRFUkVSIiwiZ2V0Q29weWFibGVUZXh0Iiwic3RhcnRDb2wiLCJnZXRDb3B5YWJsZURhdGEiLCJnZXRDb3B5YWJsZSIsImRhdGFVcGRhdGVGdW5jdGlvbiIsImNvbHVtbnNBc0Z1bmMiLCJnYW50dENoYXJ0IiwidGFibGVDbGFzc05hbWUiLCJpc1JlZ2lzdGVyZWQiLCJpc0RlcHJlY2F0ZWQiLCJpbml0aWFsSG9vayIsImNyZWF0ZU1hcCIsImNvbHVtblNldHRpbmciLCJjbGVhckNhY2hlIiwidXBkYXRlQ29sdW1uTWV0YSIsInNldENlbGxNZXRhT2JqZWN0IiwiY3VycmVudEhlaWdodCIsImluaXRpYWxTdHlsZSIsImdldFZhbHVlIiwic2VsIiwic2VsZWN0QWxsIiwicmVuZGVyYWJsZUNvbHVtbkluZGV4IiwicmVuZGVyYWJsZVJvd0luZGV4IiwiaXNIaWRkZW4iLCJnZXRDZWxsQXRDb29yZHMiLCJyZW5kZXJhYmxlQ29vcmRzIiwiZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgiLCJnZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCIsImdldERhdGFBdFJvd1Byb3AiLCJnZXREYXRhQXRDb2wiLCJjb2x1bW5EYXRhIiwiZGF0YUJ5Um93cyIsImdldERhdGFBdFByb3AiLCJnZXRTb3VyY2VEYXRhIiwiZ2V0QnlSYW5nZSIsImdldFNvdXJjZURhdGFBcnJheSIsImdldFNvdXJjZURhdGFBdENvbCIsImdldEF0Q29sdW1uIiwic2V0U291cmNlRGF0YUF0Q2VsbCIsImlzVGhlcmVBbnlTZXRTb3VyY2VMaXN0ZW5lciIsImhhc0hvb2siLCJjaGFuZ2VzRm9ySG9vayIsIl9yZWY4IiwiY2hhbmdlUm93IiwiY2hhbmdlUHJvcCIsImNoYW5nZVZhbHVlIiwiX3JlZjkiLCJzZXRBdENlbGwiLCJnZXRTb3VyY2VEYXRhQXRSb3ciLCJnZXRBdFJvdyIsImdldFNvdXJjZURhdGFBdENlbGwiLCJnZXREYXRhQXRSb3ciLCJnZXREYXRhVHlwZSIsInJvd0Zyb20iLCJjb2x1bW5Gcm9tIiwicm93VG8iLCJjb2x1bW5UbyIsInJvd1N0YXJ0IiwiY29sdW1uU3RhcnQiLCJyb3dFbmQiLCJjb2x1bW5FbmQiLCJwcmV2aW91c1R5cGUiLCJjdXJyZW50VHlwZSIsImlzVHlwZUVxdWFsIiwiY2VsbFR5cGUiLCJyZW1vdmVDZWxsTWV0YSIsInBoeXNpY2FsUm93IiwicGh5c2ljYWxDb2x1bW4iLCJjYWNoZWRWYWx1ZSIsImdldENlbGxNZXRhS2V5VmFsdWUiLCJzcGxpY2VDZWxsc01ldGEiLCJkZWxldGVBbW91bnQiLCJfbGVuMTgiLCJjZWxsTWV0YVJvd3MiLCJfa2V5MTgiLCJjZWxsTWV0YVJvdyIsInNldENlbGxNZXRhIiwiZ2V0Q2VsbHNNZXRhIiwiZ2V0Q2VsbE1ldGFBdFJvdyIsImdldENlbGxzTWV0YUF0Um93IiwiaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkIiwiZ2V0Q2VsbFJlbmRlcmVyIiwicm93T3JNZXRhIiwiZ2V0UmVuZGVyZXIiLCJnZXRDZWxsRWRpdG9yIiwiY2VsbEVkaXRvciIsImdldEVkaXRvciIsImNlbGxWYWxpZGF0b3IiLCJfcmVnaXN0cnk0IiwiZ2V0VmFsaWRhdG9yIiwidmFsaWRhdGVDZWxscyIsIl92YWxpZGF0ZUNlbGxzIiwidmFsaWRhdGVSb3dzIiwidmFsaWRhdGVDb2x1bW5zIiwiaGFzUm93SGVhZGVycyIsImhhc0NvbEhlYWRlcnMiLCJnZXRDb2xIZWFkZXIiLCJ2aXN1YWxDb2x1bW5JbmRleCIsImNvbHVtbnNMZW4iLCJ0cmFuc2xhdGVWaXN1YWxJbmRleFRvQ29sdW1ucyIsInNwcmVhZHNoZWV0Q29sdW1uTGFiZWwiLCJfZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MiLCJnZXRDb2xXaWR0aCIsIl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3MiLCJjb3VudEZpcnN0Um93S2V5cyIsImdldExlbmd0aCIsImRhdGFMZW4iLCJnZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCIsImNvdW50UmVuZGVyZWRSb3dzIiwiY291bnRWaXNpYmxlUm93cyIsImNvdW50UmVuZGVyZWRDb2xzIiwiY291bnRWaXNpYmxlQ29scyIsInJhbmdlRWFjaFJldmVyc2UiLCJlbXB0eUNvbHVtbnMiLCJpc0VtcHR5Q29sIiwic2VsZWN0Q2VsbCIsInNjcm9sbFRvQ2VsbCIsImNoYW5nZUxpc3RlbmVyIiwic2VsZWN0Q2VsbHMiLCJzdXNwZW5kIiwid2FzU2VsZWN0ZWQiLCJzZWxlY3RDb2x1bW5zIiwiZm9jdXNQb3NpdGlvbiIsInNlbGVjdFJvd3MiLCJkZXNlbGVjdENlbGwiLCJpbmNsdWRlUm93SGVhZGVycyIsImluY2x1ZGVDb2x1bW5IZWFkZXJzIiwic2tpcE5leHRTY3JvbGxDeWNsZSIsImdldEluZGV4VG9TY3JvbGwiLCJpbmRleE1hcHBlciIsInNjcm9sbFZpZXdwb3J0VG8iLCJfYXJndW1lbnRzJCIsInZlcnRpY2FsU25hcCIsImhvcml6b250YWxTbmFwIiwiY29uc2lkZXJIaWRkZW5JbmRleGVzIiwic25hcFRvSW5saW5lU3RhcnQiLCJzbmFwVG9JbmxpbmVFbmQiLCJpc1ZhbGlkUm93R3JpZCIsImlzVmFsaWRDb2x1bW5HcmlkIiwidmlzdWFsUm93VG9TY3JvbGwiLCJ2aXN1YWxDb2x1bW5Ub1Njcm9sbCIsImlzUm93SW50ZWdlciIsImlzQ29sdW1uSW50ZWdlciIsInNjcm9sbFRvRm9jdXNlZENlbGwiLCJhZGRIb29rT25jZSIsIl9jbGVhclRpbWVvdXRzIiwiX2NsZWFySW1tZWRpYXRlcyIsImxpY2Vuc2VJbmZvIiwidW5yZWdpc3RlckFsbCIsImdldEl0ZW1zIiwiX3JlZjEwIiwicGx1Z2luIiwicGx1Z2luTmFtZSIsInVuaWZpZWRQbHVnaW5OYW1lIiwidG9VcHBlckNhc2VGaXJzdCIsInVuZG9SZWRvIiwiZ2V0UGx1Z2luTmFtZSIsIlBMVUdJTl9LRVkiLCJvcmRlckluZGV4IiwicDEiLCJwMiIsInAzIiwicDQiLCJwNSIsInA2IiwiZGljdGlvbmFyeUtleSIsImV4dHJhQXJndW1lbnRzIiwidG9IVE1MIiwiX3BhcnNlVGFibGUiLCJpbnN0YW5jZVRvSFRNTCIsInRvVGFibGVFbGVtZW50IiwidGVtcEVsZW1lbnQiLCJpbnNlcnRBZGphY2VudEhUTUwiLCJ0aW1lb3V0cyIsIl9yZWdpc3RlclRpbWVvdXQiLCJoYW5kbGUiLCJoYW5kbGVGdW5jIiwiaW1tZWRpYXRlcyIsIl9nZXRFZGl0b3JNYW5hZ2VyIiwic2hvcnRjdXRNYW5hZ2VyIiwiX3Nob3J0Y3V0cyIsImNyZWF0ZVNob3J0Y3V0TWFuYWdlciIsImhhbmRsZUV2ZW50IiwiYmVmb3JlS2V5RG93biIsImFmdGVyS2V5RG93biIsIm93bmVyV2luZG93IiwiY3RybEtleSIsIm1ldGFLZXkiLCJyZWxlYXNlUHJlc3NlZEtleXMiLCJnZXRGb2N1c01hbmFnZXIiLCJnZXRQbHVnaW5zTmFtZXMiLCJQbHVnaW5DbGFzcyIsImFkZEl0ZW0iLCJfc2hvcnRjdXRDb250ZXh0cyIsInJlZ2lzdGVyQWxsU2hvcnRjdXRDb250ZXh0cyIsInNldEFjdGl2ZUNvbnRleHROYW1lIiwiaW5zdGFsbEZvY3VzRGV0ZWN0b3IiLCJob3QiLCJpbnB1dFRyYXBUb3AiLCJjcmVhdGVJbnB1dEVsZW1lbnQiLCJpbnB1dFRyYXBCb3R0b20iLCJvbkZvY3VzRnJvbVRvcCIsIm9uRm9jdXNGcm9tQm90dG9tIiwiYmVmb3JlIiwiYWZ0ZXIiLCJhY3RpdmF0ZSIsInRhYkluZGV4IiwiZGVhY3RpdmF0ZSIsIkExMVlfSElEREVOIiwiY2xhbXBDb29yZHNJZk5lZWRlZCIsIm1vc3RUb3BTdGFydENvb3JkcyIsImdldE1vc3RUb3BTdGFydFBvc2l0aW9uIiwibW9zdEJvdHRvbUVuZENvb3JkcyIsImdldE1vc3RCb3R0b21FbmRQb3NpdGlvbiIsIm5vcm1hbGl6ZUNvb3Jkc0lmTmVlZGVkIiwicmVjZW50bHlBZGRlZEZvY3VzQ29vcmRzIiwiX2ZvY3VzRGV0ZWN0b3IiLCJfY2xhbXBDb29yZHNJZk5lZWRlZCIsIl9jbGFtcENvb3Jkc0lmTmVlZGVkMiIsInJvd1dyYXBTdGF0ZSIsImZsaXBwZWQiLCJpc1NhdmluZ0Nvb3Jkc0VuYWJsZWQiLCJpc1RhYk9yU2hpZnRUYWJQcmVzc2VkIiwicHJldmVudFZpZXdwb3J0U2Nyb2xsIiwiX2hvdCRnZXRTZWxlY3RlZFJhbmdlIiwiaW50ZXJydXB0ZWRCeUF1dG9JbnNlcnRNb2RlIiwiaXNGbGlwcGVkIiwic2hvcnRjdXRPcHRpb25zIiwic3RvcFByb3BhZ2F0aW9uIiwicmVsYXRpdmVUb0dyb3VwIiwiR1JJRF9HUk9VUCIsImdyb3VwIiwiZ2V0Q29udGV4dCIsImFkZFNob3J0Y3V0cyIsInRhYk5hdmlnYXRpb24iLCJzaGlmdEtleSIsIm5hdmlnYWJsZUhlYWRlcnMiLCJfcm93SW5kZXhNYXBwZXIkZ2V0VmkiLCJfY29sdW1uSW5kZXhNYXBwZXIkZ2UiLCJnZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCIsIl9mb2N1c0NhdGNoZXIiLCJfdmlld3BvcnRTY3JvbGwiLCJza2lwTmV4dENhbGwiLCJpc1N1c3BlbmRlZCIsIl9zY3JvbGxTdHJhdGVneSIsInNjcm9sbFN0cmF0ZWd5IiwiaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQiLCJfZm9jdXNTY3JvbGwiLCJmb2N1c1Njcm9sbFN0cmF0ZWd5IiwiaXNTZWxlY3RlZEJ5Q29ybmVyIiwiX2Nvcm5lckhlYWRlclNjcm9sbCIsImNvcm5lckhlYWRlclNjcm9sbFN0cmF0ZWd5IiwiX3Jvd0hlYWRlclNjcm9sbCIsInJvd0hlYWRlclNjcm9sbFN0cmF0ZWd5IiwiX2NvbHVtbkhlYWRlclNjcm9sbCIsImNvbHVtbkhlYWRlclNjcm9sbFN0cmF0ZWd5IiwiX211bHRpcGxlU2Nyb2xsIiwibXVsdGlwbGVTY3JvbGxTdHJhdGVneSIsIl9ub25jb250aWd1b3VzU2Nyb2xsIiwibm9uY29udGlndW91c1Njcm9sbFN0cmF0ZWd5IiwiX3NpbmdsZVNjcm9sbCIsInNpbmdsZVNjcm9sbFN0cmF0ZWd5Iiwic2VsZWN0aW9uU291cmNlIiwiRGF0YU1hcCIsIkRFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IiLCJjcmVhdGVEdWNrU2NoZW1hIiwicHJvcFRvQ29sQ2FjaGUiLCJmaWx0ZXJlZEluZGV4Iiwic2NoZW1hTGVuIiwicmVjdXJzaXZlRHVja0NvbHVtbnMiLCJsYXN0Q29sIiwicHJvcGVydHlQYXJlbnQiLCJjYWNoZWRQaHlzaWNhbEluZGV4IiwicmVmcmVzaER1Y2tTY2hlbWEiLCJzb3VyY2VSb3dzQ291bnQiLCJwaHlzaWNhbFJvd0luZGV4Iiwicm93c1RvQWRkIiwiZGVlcEV4dGVuZCIsImluc2VydEluZGV4ZXMiLCJzcGxpY2VEYXRhIiwibmV3VmlzdWFsUm93SW5kZXgiLCJudW1iZXJPZkNyZWF0ZWRDb2xzIiwiY3VycmVudEluZGV4IiwiY3JlYXRlQ29sdW1uIiwibmV3VmlzdWFsQ29sdW1uSW5kZXgiLCJyZW1vdmVkUGh5c2ljYWxJbmRleGVzIiwidmlzdWFsUm93c1RvUGh5c2ljYWwiLCJzb3VyY2VSb3dzTGVuZ3RoIiwibnVtYmVyT2ZSZW1vdmVkSW5kZXhlcyIsImZpbHRlckRhdGEiLCJyZW1vdmVJbmRleGVzIiwiY3VzdG9tRGVmaW5lZENvbHVtbnMiLCJzZXRJbmRleGVzU2VxdWVuY2UiLCJyb3dQaHlzaWNhbEluZGV4IiwidmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwiLCJkZXNjZW5kaW5nUGh5c2ljYWxDb2x1bW5zIiwiaXNUYWJsZVVuaWZvcm0iLCJyZW1vdmVkQ29sdW1uc0NvdW50IiwicmVtb3ZlQ29sdW1uIiwiY29sRGF0YSIsImV4dGVuZEFycmF5IiwidG8yZEFycmF5IiwiZGVsZXRlQ291bnQiLCJuZXdEYXRhIiwicGh5c2ljYWxSb3dzIiwiZGF0YVJvdyIsIm1vZGlmaWVkUm93RGF0YSIsImRhdGFEb3ROb3RhdGlvbiIsInNsaWNlZCIsInZhbHVlSG9sZGVyIiwibG9naWNSb3dzIiwicGh5c2ljUm93Iiwicm93c1RvUmVtb3ZlIiwidmlzdWFsQ29scyIsInBoeXNpY2FsQ29sIiwiY29sc1RvUmVtb3ZlIiwibWF4Um93c0Zyb21TZXR0aW5ncyIsImNvdW50Q2FjaGVkQ29sdW1ucyIsImRlc3RpbmF0aW9uIiwiZ2V0Rm4iLCJnZXRUZXh0IiwibW9kaWZ5Um93RGF0YSIsImdldEFsbFByb3BzIiwibmV3RGF0YVJvdyIsImdldEF0UGh5c2ljYWxDZWxsIiwicmFuZ2VTdGFydCIsInJhbmdlRW5kIiwic2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsImNvbHVtbk9yUHJvcCIsImN1cnJlbnRSb3ciLCJtb2RpZmllZFNvdXJjZUxlbmd0aCIsIl9tZXRhTWFuYWdlciIsIl9tZXRhU2NoZW1hIiwiX3JlcGxhY2VEYXRhIiwiX2R5bmFtaWNDZWxsTWV0YSIsIl9leHRlbmRNZXRhUHJvcGVydGllcyIsIl9nbG9iYWxNZXRhIiwiX3RhYmxlTWV0YSIsIl9jb2x1bW5NZXRhIiwiX2NlbGxNZXRhIiwiY3VzdG9tU2V0dGluZ3MiLCJtZXRhTW9kcyIsImNvbHVtbk1ldGEiLCJNb2RpZmllckNsYXNzIiwidXBkYXRlTWV0YSIsImdldE1ldGEiLCJ1cGRhdGVHbG9iYWxNZXRhIiwidXBkYXRlVGFibGVNZXRhIiwiZ2V0Q29sdW1uTWV0YSIsInNldE1ldGEiLCJ1cGRhdGVDZWxsTWV0YSIsInJlbW92ZU1ldGEiLCJnZXRNZXRhcyIsImdldE1ldGFzQXRSb3ciLCJMYXp5RmFjdG9yeU1hcCIsInZhbHVlRmFjdG9yeSIsImlzVW5zaWduZWROdW1iZXIiLCJkYXRhSW5kZXgiLCJfZ2V0U3RvcmFnZUluZGV4QnlLZXkiLCJob2xlcyIsInJldXNlSW5kZXgiLCJpc051bGxpc2giLCJuZXdJbmRleGVzIiwiZGF0YUxlbmd0aCIsImluc2VydGlvbkluZGV4IiwicmVtb3ZlZEluZGV4IiwiYXJyYXlGaWx0ZXIiLCJ2YWxpZEVudHJpZXMiLCJrZXlJbmRleCIsIl9nZXRLZXlCeVN0b3JhZ2VJbmRleCIsIl9sYXp5RmFjdG9yeU1hcCIsIl9jcmVhdGVSb3ciLCJleHRlbmRCeU1ldGFUeXBlIiwibWV0YXMiLCJfY2VsbE1ldGEkX2F1dG9tYXRpY2EiLCJfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzIiwicm93c01ldGEiLCJfY3JlYXRlTWV0YSIsImdldE1ldGFDb25zdHJ1Y3RvciIsIkNPTFVNTlNfUFJPUFNfQ09ORkxJQ1RTIiwiY29sdW1uRmFjdG9yeSIsIm1ldGFDdG9yIiwiX3NldHRpbmdzJHR5cGUiLCJNZXRhQ3RvciIsImFjdGl2ZUhlYWRlckNsYXNzTmFtZSIsImFsbG93RW1wdHkiLCJhbGxvd0h0bWwiLCJhbGxvd1JlbW92ZUNvbHVtbiIsImFsbG93UmVtb3ZlUm93IiwiYXV0b0NvbHVtblNpemUiLCJhdXRvUm93U2l6ZSIsImJpbmRSb3dzV2l0aEhlYWRlcnMiLCJjaGVja2VkVGVtcGxhdGUiLCJjb2xsYXBzaWJsZUNvbHVtbnMiLCJjb2x1bW5Tb3J0aW5nIiwiY29sdW1uU3VtbWFyeSIsImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLCJjb3B5UGFzdGUiLCJjb3JyZWN0Rm9ybWF0IiwiY3VycmVudENvbENsYXNzTmFtZSIsImN1cnJlbnRIZWFkZXJDbGFzc05hbWUiLCJjdXN0b21Cb3JkZXJzIiwidGltZUZvcm1hdCIsImRhdGVQaWNrZXJDb25maWciLCJkZWZhdWx0RGF0ZSIsImRyYWdUb1Njcm9sbCIsImVudGVyQmVnaW5zRWRpdGluZyIsImVudGVyTW92ZXMiLCJmaWxsSGFuZGxlIiwiYXV0b0luc2VydFJvdyIsImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLCJmaXhlZENvbHVtbnNMZWZ0IiwiZm9ybXVsYXMiLCJmcmFnbWVudFNlbGVjdGlvbiIsImhpZGRlbkNvbHVtbnMiLCJoaWRkZW5Sb3dzIiwiaW1lRmFzdEVkaXQiLCJyb3dMZW4iLCJjb2xMZW4iLCJtYW51YWxDb2x1bW5GcmVlemUiLCJtYW51YWxDb2x1bW5Nb3ZlIiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwibmVzdGVkSGVhZGVycyIsIm5lc3RlZFJvd3MiLCJub1dvcmRXcmFwQ2xhc3NOYW1lIiwibnVtZXJpY0Zvcm1hdCIsIm9ic2VydmVET01WaXNpYmlsaXR5Iiwib3V0c2lkZUNsaWNrRGVzZWxlY3RzIiwicGVyc2lzdGVudFN0YXRlIiwicGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUiLCJyZWFkT25seUNlbGxDbGFzc05hbWUiLCJzZWxlY3RPcHRpb25zIiwic29ydEJ5UmVsZXZhbmNlIiwic3RyaWN0IiwidGFiTW92ZXMiLCJ0cmltRHJvcGRvd24iLCJ0cmltUm93cyIsInRyaW1XaGl0ZXNwYWNlIiwidW5jaGVja2VkVGVtcGxhdGUiLCJ1bmRvIiwidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQiLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsInZpc2libGVSb3dzIiwid29yZFdyYXAiLCJleHRlbmRDZWxsTWV0YSIsIm1ldGFTeW5jTWVtbyIsIl90aGlzJG1ldGFTeW5jTWVtbyRnZSIsImNlbGxTZXR0aW5ncyIsIl9jZWxsU2V0dGluZ3MkdHlwZSIsIl9pbml0T25seUNhbGxiYWNrIiwiaW5pdE9ubHkiLCJvbkNoYW5nZSIsInVzYWdlVHJhY2tlciIsImlzSW5pdGlhbENoYW5nZSIsImV4dGVuZE1ldGFQcm9wcyIsInByb3BEZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJhbGlhcyIsImhhc1RhcmdldCIsInRhcmdldFByb3AiLCJvcmlnUHJvcCIsImluc3RhbGxQcm9wV2F0Y2hlciIsIl9pbml0T25seVNldHRpbmdzIiwiY29uZGl0aW9uIiwiZXJyb3JNZXNzYWdlIiwiVGFibGVNZXRhIiwiY29uZmxpY3RMaXN0IiwiQ29sdW1uTWV0YSIsImluaGVyaXQiLCJtZXRhT2JqZWN0Iiwic2V0dGluZ3NUb0NvbXBhcmVXaXRoIiwidmFsaWRUeXBlIiwiZXhwYW5kZWRUeXBlIiwiX21ldGFPYmplY3QkX2F1dG9tYXRpMiIsInByb3BlcnR5TmFtZSIsIl9tZXRhT2JqZWN0JF9hdXRvbWF0aSIsImNhbkJlT3ZlcndyaXR0ZW4iLCJ2YXJpYWJsZSIsInNldERhdGFNYXBGdW5jdGlvbiIsImNhbGxiYWNrRnVuY3Rpb24iLCJjb25maWciLCJjYXBpdGFsaXplZEludGVybmFsU291cmNlIiwiQTExWV9ST1dDT1VOVCIsIkExMVlfQ09MQ09VTlQiLCJfRWRpdG9yTWFuYWdlcl9icmFuZCIsIkVkaXRvck1hbmFnZXIiLCJfb25BZnRlckRvY3VtZW50S2V5RG93biIsIm9wZW5FZGl0b3IiLCJfb25DZWxsRGJsQ2xpY2siLCJfdGhpcyRob3QkZ2V0U2VsZWN0ZWQiLCJpc1dhaXRpbmciLCJkYXRhU2F2ZWQiLCJtb2RpZmllZENlbGxDb29yZHMiLCJ2aXN1YWxSb3dUb0NoZWNrIiwidmlzdWFsQ29sdW1uVG9DaGVjayIsImlzQ2VsbEVkaXRhYmxlIiwiY2xlYXJBY3RpdmVFZGl0b3IiLCJlZGl0b3JDbGFzcyIsIm9yaWdpbmFsVmFsdWUiLCJnZXRFZGl0b3JJbnN0YW5jZSIsIm5ld0luaXRpYWxWYWx1ZSIsImVuYWJsZUZ1bGxFZGl0TW9kZSIsImFsbG93T3BlbmluZyIsImdldExheWVyTGV2ZWwiLCJiZWdpbkVkaXRpbmciLCJyZXN0b3JlT3JpZ2luYWxWYWx1ZSIsImlzQ3RybFByZXNzZWQiLCJmaW5pc2hFZGl0aW5nIiwiY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyIsImNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUiLCJpc0NlbGxIaWRkZW4iLCJtb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlciIsInRyYW5zZm9ybUZvY3VzIiwidHJhbnNmb3JtU3RhcnQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsImFsdEtleSIsImlzRnVuY3Rpb25LZXkiLCJpc0N0cmxNZXRhS2V5IiwiaW5zdGFuY2VzIiwiRURJVE9SX1RZUEUiLCJfaWRQcmVmaXgiLCJjaG9pY2VzIiwiY2FzZVNlbnNpdGl2ZSIsImNob2ljZXNSZWxldmFuY2UiLCJ2YWx1ZUxlbmd0aCIsImNoYXJzTGVmdCIsImN1cnJlbnRJdGVtIiwidmFsdWVJbmRleCIsImNob2ljZXNDb3VudCIsInN0cmlwVGFncyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiYmFzZUluZGV4Iiwic2VsZWN0ZWRWYWx1ZSIsInJhd0Nob2ljZXMiLCJzdHJpcFZhbHVlSWZOZWVkZWQiLCJURVhUQVJFQSIsImNyZWF0ZUVsZW1lbnRzIiwiaHRDb250YWluZXIiLCJBMTFZX1RFWFQiLCJBMTFZX0NPTUJPQk9YIiwiQTExWV9IQVNQT1BVUCIsIkExMVlfQVVUT0NPTVBMRVRFIiwiQTExWV9FWFBBTkRFRCIsIkExMVlfQ09OVFJPTFMiLCJyb290SW5zdGFuY2VBcmlhVGFnc0VuYWJsZWQiLCJzb3VyY2VBcnJheSIsInNvdXJjZVNpemUiLCJjb2xJbmRleCIsInNob3dFZGl0YWJsZUVsZW1lbnQiLCJpc01hY09TIiwib25CZWZvcmVLZXlEb3duIiwiaHRFZGl0b3IiLCJxdWVyeSIsImluZGV4T2ZNYXRjaCIsIkExMVlfT1BUSU9OIiwiQTExWV9TRVRTSVpFIiwiQTExWV9QT1NJTlNFVCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiQTExWV9TRUxFQ1RFRCIsIkExMVlfQUNUSVZFREVTQ0VOREFOVCIsIkExMVlfTElTVEJPWCIsIkExMVlfTElWRSIsIkExMVlfUkVMRVZBTlQiLCJxdWVyeUNob2ljZXMiLCJyZW1vdmVIb29rc0J5S2V5IiwiZGlzY2FyZEVkaXRvciIsInVwZGF0ZUNob2ljZXNMaXN0Iiwic3RyaXBWYWx1ZXNJZk5lZWRlZCIsImNob2ljZXNMaXN0IiwiZ2V0Q2FyZXRQb3NpdGlvbiIsImVuZFBvcyIsImdldFNlbGVjdGlvbkVuZFBvc2l0aW9uIiwic29ydEJ5UmVsZXZhbmNlU2V0dGluZyIsImZpbHRlclNldHRpbmciLCJvcmRlckJ5UmVsZXZhbmNlIiwiaGlnaGxpZ2h0SW5kZXgiLCJvcmRlckJ5UmVsZXZhbmNlTGVuZ3RoIiwic29ydGVkIiwic3RyaXBwZWRDaG9pY2VzIiwidXBkYXRlRHJvcGRvd25EaW1lbnNpb25zIiwiZmxpcERyb3Bkb3duSWZOZWVkZWQiLCJoaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UiLCJzZXRDYXJldFBvc2l0aW9uIiwiaXNXaW5kb3dBc1Njcm9sbGFibGVFbGVtZW50IiwidGV4dGFyZWFPZmZzZXQiLCJ0ZXh0YXJlYUhlaWdodCIsImRyb3Bkb3duSGVpZ2h0IiwiZ2V0RHJvcGRvd25IZWlnaHQiLCJ0cmltbWluZ0NvbnRhaW5lclNjcm9sbFRvcCIsImhlYWRlcnNIZWlnaHQiLCJzcGFjZUFib3ZlIiwic3BhY2VCZWxvdyIsImZsaXBOZWVkZWQiLCJmbGlwRHJvcGRvd24iLCJ1bmZsaXBEcm9wZG93biIsImxpbWl0RHJvcGRvd25JZk5lZWRlZCIsInNwYWNlQXZhaWxhYmxlIiwidGVtcEhlaWdodCIsImxhc3RSb3dIZWlnaHQiLCJzZXREcm9wZG93bkhlaWdodCIsImRyb3Bkb3duU3R5bGUiLCJjdXJyZW50RHJvcGRvd25XaWR0aCIsImZpcnN0Um93SGVpZ2h0Iiwic3RyaW5naWZpZWRWYWx1ZXMiLCJhbGxvd0tleUV2ZW50UHJvcGFnYXRpb24iLCJhbGxvd2VkIiwiS0VZX0NPREVTIiwiQVJST1dfRE9XTiIsIkFSUk9XX1VQIiwiaXNQcmludGFibGVDaGFyIiwiQkFDS1NQQUNFIiwiREVMRVRFIiwiSU5TRVJUIiwidGltZU9mZnNldCIsIl9ob29rc1JlZlJlZ2lzdGVyZXIiLCJFRElUT1JfU1RBVEUiLCJWSVJHSU4iLCJFRElUSU5HIiwiV0FJVElORyIsIkZJTklTSEVEIiwiX2ZpcmVDYWxsYmFja3MiLCJfY2xvc2VDYWxsYmFjayIsInNldFZhbHVlIiwic2F2ZVZhbHVlIiwiY3RybERvd24iLCJzZWxlY3RlZExhc3QiLCJpc0luRnVsbEVkaXRNb2RlIiwic3RyaW5naWZpZWRJbml0aWFsVmFsdWUiLCJfb3BlbmVkIiwicHJldmlvdXNDbG9zZUNhbGxiYWNrIiwiX2Z1bGxFZGl0TW9kZSIsImdldEVkaXRlZENlbGxSZWN0IiwiX3d0T3ZlcmxheXMkZ2V0UGFyZW50IiwiZ2V0RWRpdGVkQ2VsbCIsImNlbGxXaWR0aCIsInNjcm9sbGFibGVDb250YWluZXJUb3AiLCJzY3JvbGxhYmxlQ29udGFpbmVyTGVmdCIsImNvbnRhaW5lclNjcm9sbFRvcCIsImNvbnRhaW5lclNjcm9sbExlZnQiLCJncmlkTW9zdFJpZ2h0UG9zIiwib3ZlcmxheVRhYmxlIiwiZWRpdFRvcE1vZGlmaWVyIiwidG9wUG9zIiwiaGFzQ29sdW1uSGVhZGVycyIsImZpcnN0Um93SW5kZXhPZlRoZUJvdHRvbU92ZXJsYXkiLCJmaXJzdFJvd09mZnNldCIsImZpcnN0Q29sdW1uT2Zmc2V0IiwiaG9yaXpvbnRhbFNjcm9sbFBvc2l0aW9uIiwidmVydGljYWxTY3JvbGxQb3NpdGlvbiIsImNlbGxUb3BPZmZzZXQiLCJib3R0b21XdFZpZXdwb3J0IiwiYm90dG9tV3RUYWJsZSIsImNlbGxTdGFydE9mZnNldCIsImNlbGxDb21wdXRlZFN0eWxlIiwiYm9yZGVyUGh5c2ljYWxXaWR0aFByb3AiLCJpbmxpbmVTdGFydEJvcmRlckNvbXBlbnNhdGlvbiIsInRvcEJvcmRlckNvbXBlbnNhdGlvbiIsImFjdHVhbFZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgiLCJoYXNWZXJ0aWNhbFNjcm9sbGJhciIsImFjdHVhbEhvcml6b250YWxTY3JvbGxiYXJXaWR0aCIsImhhc0hvcml6b250YWxTY3JvbGxiYXIiLCJtYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aCIsIm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodCIsImdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcyIsImNoZWNrRWRpdG9yU2VjdGlvbiIsInNlY3Rpb24iLCJpbml0aWFsVmFsdWUiLCJjaGVja2JveCIsIl9tb21lbnQiLCJfcGlrYWRheSIsIlNIT1JUQ1VUU19HUk9VUF9FRElUT1IiLCJwYXJlbnREZXN0cm95ZWQiLCJkZXN0cm95RWxlbWVudHMiLCJkYXRlUGlja2VyIiwiZGF0ZVBpY2tlclN0eWxlIiwiaGlkZURhdGVwaWNrZXIiLCJkYXRlUGlja2VyUGFyZW50RWxlbWVudCIsIiRkYXRlUGlja2VyIiwiZWRpdG9yQ29udGV4dCIsInNob3dEYXRlcGlja2VyIiwiYWRqdXN0RGF0ZSIsIl90aGlzJCRkYXRlUGlja2VyIiwicmVtb3ZlU2hvcnRjdXRzQnlHcm91cCIsImRlZmF1bHREYXRlRm9ybWF0IiwiaXNNb3VzZURvd24iLCJpc01ldGEiLCJkYXRlU3RyIiwiZ2V0RGF0ZVBpY2tlckNvbmZpZyIsInVzZU1vbWVudCIsIl9vbklucHV0Rm9jdXMiLCJzZXRNb21lbnQiLCJnb3RvVG9kYXkiLCJodElucHV0Iiwib3JpZ09uU2VsZWN0Iiwib25TZWxlY3QiLCJvcmlnT25DbG9zZSIsIm9uQ2xvc2UiLCJmaWVsZCIsInRyaWdnZXIiLCJib3VuZCIsImtleWJvYXJkSW5wdXQiLCJyZXBvc2l0aW9uIiwiaXNSVEwiLCJmb3JjZSIsImZpcnN0VmlzaWJsZVJvdyIsImxhc3RWaXNpYmxlUm93IiwiZmlyc3RWaXNpYmxlQ29sdW1uIiwibGFzdFZpc2libGVDb2x1bW4iLCJwYWdlWU9mZnNldCIsInBpY2tlckxlZnRQb3NpdGlvbiIsInBhZ2VYT2Zmc2V0IiwiU0hPUlRDVVRTX0dST1VQIiwiaHRPcHRpb25zIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJzb3VyY2VWYWx1ZSIsImhhbmRzb250YWJsZSIsIm9uQmVnaW5FZGl0aW5nIiwiRElWIiwiVEVYVEFSRUFfUEFSRU5UIiwiYXNzaWduSG9va3MiLCJyZWdpc3RlclNob3J0Y3V0cyIsImNvbnRleHRDb25maWciLCJFRElUT1JfRURJVF9HUk9VUCIsInJvd1RvU2VsZWN0IiwiaW5uZXJIT1QiLCJzZWxlY3RlZFJvdyIsInVucmVnaXN0ZXJTaG9ydGN1dHMiLCJyZWdpc3RlckFsbEVkaXRvcnMiLCJBVVRPQ09NUExFVEVfRURJVE9SIiwiQkFTRV9FRElUT1IiLCJDSEVDS0JPWF9FRElUT1IiLCJEQVRFX0VESVRPUiIsIkRST1BET1dOX0VESVRPUiIsIkhBTkRTT05UQUJMRV9FRElUT1IiLCJOVU1FUklDX0VESVRPUiIsIlBBU1NXT1JEX0VESVRPUiIsIlNFTEVDVF9FRElUT1IiLCJURVhUX0VESVRPUiIsIlRJTUVfRURJVE9SIiwiUmVnaXN0ZXJlZEVkaXRvciIsIl9nZXRFZGl0b3JJbnN0YW5jZSIsImdldFJlZ2lzdGVyZWRFZGl0b3JOYW1lcyIsImdldFJlZ2lzdGVyZWRFZGl0b3JzIiwiaGFzRWRpdG9yIiwidGV4dGFyZWFTdHlsZSIsInJlZ2lzdGVyZWRFZGl0b3JDbGFzc2VzIiwiX3JlZ2lzdGVyIiwiZ2V0Q29uc3RydWN0b3IiLCJDbGF6eiIsImVkaXRvcldyYXBwZXIiLCJFRElUT1JfVklTSUJMRV9DTEFTU19OQU1FIiwic2VsZWN0IiwicmVnaXN0ZXJIb29rcyIsImNsZWFySG9va3MiLCJwcmVwYXJlT3B0aW9ucyIsIm9wdGlvblZhbHVlIiwib3B0aW9uRWxlbWVudCIsImZhc3RJbm5lckhUTUwiLCJvcHRpb25zVG9QcmVwYXJlIiwicHJlcGFyZWRPcHRpb25zIiwic291cmNlRGF0YSIsInNlbGVjdFN0eWxlIiwibWFyZ2luIiwicHJldmlvdXNPcHRpb25JbmRleCIsInNlbGVjdGVkSW5kZXgiLCJuZXh0T3B0aW9uSW5kZXgiLCJ1cGRhdGVDYXJldFBvc2l0aW9uIiwiYWN0aW9uTmFtZSIsInRleHRhcmVhRWxlbWVudCIsImNhcmV0UG9zaXRpb24iLCJ0ZXh0TGluZXMiLCJuZXdDYXJldFBvc2l0aW9uIiwibGluZVN0YXJ0SW5kZXgiLCJ0ZXh0TGluZSIsImxpbmVFbmRJbmRleCIsIl9hdXRvUmVzaXplIiwiX2NhcmV0UG9zaXRpb25lciIsIkVESVRPUl9ISURERU5fQ0xBU1NfTkFNRSIsImNyZWF0ZUlucHV0RWxlbWVudFJlc2l6ZXIiLCJiaW5kRXZlbnRzIiwiYXV0b1Jlc2l6ZSIsInVuT2JzZXJ2ZSIsImlzVGhpc0hvdENoaWxkIiwiaGlkZUVkaXRhYmxlRWxlbWVudCIsImxheWVyQ2xhc3MiLCJ0ZXh0YXJlYVBhcmVudFN0eWxlIiwiaXNFZGdlIiwidGV4dEluZGVudCIsIm9wYWNpdHkiLCJoYXNDbGFzc0hhbmRzb250YWJsZUVkaXRvciIsImNoaWxkTm9kZSIsImZvbnRGYW1pbHkiLCJ0ZXh0YXJlYUNvbXB1dGVkU3R5bGUiLCJob3Jpem9udGFsUGFkZGluZyIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwidmVydGljYWxQYWRkaW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJmaW5hbFdpZHRoIiwiZmluYWxIZWlnaHQiLCJmaW5hbE1heFdpZHRoIiwiZmluYWxNYXhIZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsInJ1bk9ubHlJZiIsImluc2VydE5ld0xpbmUiLCJleGVjQ29tbWFuZCIsImtleU5hbWUiLCJsaXN0ZW5lcnNDb3VudGVyIiwiZXZlbnROYW1lIiwiY2FsbGJhY2tQcm94eSIsIm5hdGl2ZVN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsImV4dGVuZEV2ZW50IiwidG1wRXZlbnQiLCJvbmx5T3duRXZlbnRzIiwiZmlyZUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsInNjcmVlblgiLCJzY3JlZW5ZIiwiY3JlYXRlRXZlbnRPYmplY3QiLCJGT0NVU19NT0RFUyIsIkNFTEwiLCJNSVhFRCIsIl9ob3QiLCJfZm9jdXNNb2RlIiwiX3JlZm9jdXNEZWxheSIsIl9yZWZvY3VzRWxlbWVudEdldHRlciIsIl9kZWJvdW5jZWRTZWxlY3QiLCJfRm9jdXNNYW5hZ2VyX2JyYW5kIiwiX2dldFNlbGVjdGVkQ2VsbCIsImlzQ2VsbFZpc2libGUiLCJfZm9jdXNDZWxsIiwic2VsZWN0ZWRDZWxsIiwiaXNPdXRzaWRlSW5wdXQiLCJibHVyIiwiZm9jdXNPbkhpZ2hsaWdodGVkQ2VsbCIsIl9mb2N1c0VkaXRvckVsZW1lbnQiLCJnZXRGb2N1c01vZGUiLCJyZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSIsIl9vblVwZGF0ZVNldHRpbmdzIiwibmV3U2V0dGluZ3MiLCJzZXRGb2N1c01vZGUiLCJob3RTZXR0aW5ncyIsImZvY3VzTW9kZSIsImdldFJlZm9jdXNEZWxheSIsInNldFJlZm9jdXNEZWxheSIsInNldFJlZm9jdXNFbGVtZW50R2V0dGVyIiwiZ2V0UmVmb2N1c0VsZW1lbnRGdW5jdGlvbiIsImdldFJlZm9jdXNFbGVtZW50IiwiZm9jdXNFbGVtZW50IiwiY3VycmVudEhpZ2hsaWdodENvb3JkcyIsImVsZW1lbnRUb0JlRm9jdXNlZCIsInByZXZlbnRTY3JvbGwiLCJyZWZvY3VzRWxlbWVudCIsImRlYm91bmNlIiwiQTExWV9UUkVFR1JJRCIsIkExMVlfTUVOVSIsIkExMVlfTUVOVV9JVEVNIiwiQTExWV9DSEVDS0JPWCIsIkExMVlfTEFCRUwiLCJBMTFZX0RJU0FCTEVEIiwiQTExWV9NVUxUSVNFTEVDVEFCTEUiLCJBMTFZX1NPUlQiLCJBMTFZX1JFQURPTkxZIiwiQTExWV9JTlZBTElEIiwiQTExWV9DSEVDS0VEIiwiaXRlcmF0ZWUiLCJhY2N1bXVsYXRvciIsImluaXRGcm9tQXJyYXkiLCJpdGVyYWJsZSIsImFycmF5U3VtIiwiYXJyYXlBdmciLCJwcmVkaWNhdGUiLCJyZXNJbmRleCIsImFycmF5RmxhdHRlbiIsImluaXRpYWwiLCJhcnJheU1heCIsImFycmF5TWluIiwiYXJyYXlVbmlxdWUiLCJ1bmlxdWUiLCJhcnJheXMiLCJyZXN0IiwiZmlsdGVyZWRGaXJzdEFycmF5IiwiZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXMiLCJnZXRVbmlvbk9mQXJyYXlzIiwicGl2b3RlZEFyciIsImNvbENvdW50IiwiYnJvd3NlcnMiLCJjaHJvbWUiLCJjaHJvbWVXZWJLaXQiLCJlZGdlIiwiaXNFZGdlV2ViS2l0IiwiZWRnZVdlYktpdCIsImlzRmlyZWZveCIsImZpcmVmb3giLCJmaXJlZm94V2ViS2l0IiwicGxhdGZvcm1zIiwiaW9zIiwibWF4VG91Y2hQb2ludHMiLCJtYWMiLCJpc0xpbnV4T1MiLCJsaW51eCIsIm1vYmlsZSIsImlzU2FmYXJpIiwiaXNXaW5kb3dzT1MiLCJ3aW4iLCJzZXRCcm93c2VyTWV0YSIsInNldFBsYXRmb3JtTWV0YSIsInRlc3RlciIsInRlc3RlckZ1bmMiLCJ1YSIsInZlbmRvciIsImlzQ1NSIiwiaW5mbyIsImNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhIiwiY3JlYXRlU3ByZWFkc2hlZXREYXRhIiwiY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhIiwiZGF0YVJvd1RvQ2hhbmdlc0FycmF5Iiwicm93T2Zmc2V0IiwiZGF0YVJvd3MiLCJjaGFuZ2VzQXJyYXkiLCJpc0FycmF5T2ZBcnJheXMiLCJpc0FycmF5T2ZPYmplY3RzIiwic3ByZWFkc2hlZXRDb2x1bW5JbmRleCIsIkNPTFVNTl9MQUJFTF9CQVNFX0xFTkdUSCIsIkNPTFVNTl9MQUJFTF9CQVNFIiwibW9kdWxvIiwiZGl2aWRlbmQiLCJjb2x1bW5MYWJlbCIsImdldE5vcm1hbGl6ZWREYXRlIiwiZGF0ZVN0cmluZyIsIm5hdGl2ZURhdGUiLCJhZGRFdmVudCIsImNsZWFyVGV4dFNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJlbW92ZUFsbFJhbmdlcyIsInVudGlsIiwibWF0Y2hlZCIsImVsZW1lbnRUb0NoZWNrIiwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERSIsInNhbml0aXplQ29udGVudCIsIkhUTUxfQ0hBUkFDVEVSUyIsInNlbGVjdGlvblN0YXJ0IiwiZ2V0Q3NzVHJhbnNmb3JtIiwiZ2V0RnJhbWVFbGVtZW50IiwiaXRlcmF0aW9uIiwiZ2V0UGFyZW50V2luZG93IiwiZnJhbWUiLCJwcm9wcyIsImNhY2hlZFNjcm9sbGJhcldpZHRoIiwiYm94U2l6aW5nIiwidzEiLCJ3MiIsIndhbGtvbnRhYmxlQ2FsY3VsYXRlU2Nyb2xsYmFyV2lkdGgiLCJzZWxlY3Rpb25FbmQiLCJnZXRTZWxlY3Rpb25UZXh0IiwiY3JlYXRlUmFuZ2UiLCJzdHlsZVByb3AiLCJhbGxvd2VkUHJvcGVydGllcyIsInByb3BlcnR5WSIsInByb3BlcnR5WCIsImhhc0FjY2Vzc1RvUGFyZW50V2luZG93IiwicHJldmlvdXNTaWJsaW5nIiwiY2hpbGQiLCJxdWVyaWVkUGFyZW50cyIsImlzRGV0YWNoZWQiLCJpc0lucHV0IiwidGhpc0hvdENvbnRhaW5lciIsImNsb3Nlc3RIYW5kc29udGFibGVDb250YWluZXIiLCJpbXBsIiwibWFrZUVsZW1lbnRDb250ZW50RWRpdGFibGVBbmRTZWxlY3RJdHNDb250ZW50IiwibWF0Y2hlc0NTU1J1bGVzIiwicnVsZSIsInNlbGVjdG9yVGV4dCIsIkNTU1J1bGUiLCJTVFlMRV9SVUxFIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJlbGVtZW50VG9CZU9ic2VydmVkIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwidW5vYnNlcnZlIiwibGFzdEVsZW0iLCJvdmVybGF5VHlwZSIsIm92ZXJsYXlFbGVtZW50IiwiZG9tRWxlbWVudCIsImF0dHJpYnV0ZXNUb1JlbW92ZSIsInJlZ2V4RnJlZSIsInN0cmluZ0F0dHJpYnV0ZXMiLCJyZWdleGVzIiwicmVnZXhBdHRyaWJ1dGVzIiwiZmlsdGVyUmVnZXhlcyIsImF0dHJpYnV0ZU5hbWVUb1JlbW92ZSIsImF0dHJpYnV0ZVJlZ2V4IiwiZ2V0QXR0cmlidXRlTmFtZXMiLCJhdHRyaWJ1dGVOYW1lIiwicmVtb3ZlQ29udGVudEVkaXRhYmxlRnJvbUVsZW1lbnRBbmREZXNlbGVjdCIsInJlbW92ZUV2ZW50IiwiY2hpbGRzIiwicnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudCIsImludmlzaWJsZVNlbGVjdGlvbiIsInNlbGVjdEVsZW1lbnRJZkFsbG93ZWQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImVsZW1lbnRQYXJlbnQiLCJwYXJlbnREaXNwbGF5VmFsdWUiLCJvdmVybGF5RWxlbSIsImZyYW1lRWxlbWVudCIsImZpbHRlckVtcHR5Q2xhc3NOYW1lcyIsInJldHVybkJvdGgiLCJpc1JlZ2V4Iiwic3RyaW5nQ2xhc3NlcyIsInJlZ2V4Q2xhc3NlcyIsInJlZ2V4Q2xhc3NOYW1lIiwiY3VycmVudENsYXNzTmFtZSIsImF0dHJpYnV0ZVZhbHVlIiwiYXR0cmlidXRlSW5mbyIsImN1cnJlbnRTdHlsZSIsImNvbnRlbnRFZGl0YWJsZSIsImFyaWFIaWRkZW4iLCJzZWxlY3ROb2RlQ29udGVudHMiLCJhZGRSYW5nZSIsInNlbGVjdGVkRWxlbWVudCIsInJlbW92ZUludmlzaWJsZVNlbGVjdGlvbkNsYXNzIiwiaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQiLCJpc0xlZnRDbGljayIsImlzUmlnaHRDbGljayIsIm9mZnNldFJlbGF0aXZlVG8iLCJ1bnRpbEVsZW1lbnQiLCJvZmZzZXRYIiwib2Zmc2V0WSIsImNhbmNlbEJ1YmJsZSIsImNvbXBhcmlzb25GdW5jdGlvbiIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiZ2V0Q29tcGFyaXNvbkZ1bmN0aW9uIiwiSW50bCIsIkNvbGxhdG9yIiwibG9jYWxlQ29tcGFyZSIsImN1cnJ5IiwiYXJnc0xlbmd0aCIsImdpdmVuIiwiYXJnc1NvRmFyIiwicGFzc2VkQXJnc1NvRmFyIiwiY3VycnlSaWdodCIsIndhaXQiLCJsYXN0VGltZXIiLCJmYXN0Q2FsbCIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImFyZzQiLCJhcmc1IiwiYXJnNiIsInJlc3RQYXJhbXMiLCJmdW5jdGlvbnMiLCJmaXJzdEZ1bmMiLCJyZXN0RnVuYyIsImZuIiwidGhyb3R0bGUiLCJ0aHJvdHRsZUFmdGVySGl0cyIsImhpdHMiLCJmdW5jVGhyb3R0bGUiLCJyZW1haW5IaXRzIiwiX3Rocm90dGxlQWZ0ZXJIaXRzIiwiY2xlYXJIaXRzIiwibGFzdENhbGxlZCIsImxhc3RDYWxsVGhyb3R0bGVkIiwic3RhbXAiLCJuZWVkQ2FsbCIsInJlbWFpbmluZyIsImhhc1ZhbGlkVHlwZSIsImlzTm9uQ29tbWVyY2lhbCIsImhvdFZlcnNpb24iLCJrZXlWYWxpZGl0eURhdGUiLCJjb25zb2xlTWVzc2FnZVN0YXRlIiwiZG9tTWVzc2FnZVN0YXRlIiwic2NoZW1hVmFsaWRpdHkiLCJfbSIsIl9jcCIsIl9waSIsIl9oZCIsIl9zcyIsIl9jaGVja0tleVNjaGVtYSIsIl9ub3JtIiwicmVsZWFzZURhdGUiLCJyZWxlYXNlRGF5cyIsImtleVZhbGlkaXR5RGF5cyIsIl9leHRyYWN0VGltZSIsIl9pZ25vcmVkIiwiX25vdGlmaWVkIiwiY29uc29sZU1lc3NhZ2VzIiwiZG9tTWVzc2FnZXMiLCJtZXNzYWdlTm9kZSIsImludmFsaWQiLCJleHBpcmVkIiwibWlzc2luZyIsIm5vbl9jb21tZXJjaWFsIiwiZ2V0TW92ZXMiLCJtb3ZlZEluZGV4ZXMiLCJmaW5hbEluZGV4IiwibnVtYmVyT2ZJbmRleGVzIiwibW92ZXMiLCJtb3ZlTGluZSIsIm1vdmVkSW5kZXgiLCJtb3ZlIiwicHJldmlvdXNseU1vdmVkSW5kZXgiLCJpc01vdmluZ0Zyb21FbmRUb1N0YXJ0IiwiaXNNb3ZpbmdFbGVtZW50QmVmb3JlIiwiZ2V0SW5pdGlhbGx5Q2FsY3VsYXRlZE1vdmVzIiwibm90TW92ZWRFbGVtZW50cyIsIl9ub3RNb3ZlZEVsZW1lbnRzJGZpbiIsImdldE1vdmVMaW5lIiwibmV4dE1vdmVkSW5kZXgiLCJpc01vdmluZ0Zyb21TdGFydFRvRW5kIiwiaXNOdW1lcmljIiwiYWRkaXRpb25hbERlbGltaXRlcnMiLCJjbGFtcCIsIm1pblZhbHVlIiwibWF4VmFsdWUiLCJyYW5nZUZyb20iLCJyYW5nZVRvIiwidmFsdWVBY2NvcmRpbmdQZXJjZW50IiwiZGVmYXVsdFZhbHVlIiwicHJvcGVydHlUb0xpc3RlbiIsInByaXZhdGVQcm9wZXJ0eSIsIl90b3VjaGVkIiwicmVjdXJzT2JqTGVuIiwid3JpdGFibGVLZXlzIiwiaGFzV3JpdGFibGVLZXlzIiwibmFtZUl0ZW0iLCJDaGlsZCIsIm9iamVjdDEiLCJvYmplY3QyIiwiQmFzZSIsIk1JWElOUyIsIm1peGlucyIsIm1peGluSXRlbSIsIk1JWElOX05BTUUiLCJpbml0VmFsdWUiLCJ3b3JraW5nT2JqZWN0IiwiZXF1YWxzSWdub3JlQ2FzZSIsInN0cmluZ3MiLCJpc1BlcmNlbnRWYWx1ZSIsInM0IiwidmFyaWFibGVzIiwiX2RvbXB1cmlmeSIsImV4cHJlc3Npb25zIiwicHJldmlvdXNWYWx1ZSIsImN1cnJlbnRWYWx1ZSIsImlzQ3RybEtleSIsIkNPTU1BTkRfTEVGVCIsIkNPTU1BTkRfUklHSFQiLCJDT01NQU5EX0ZJUkVGT1giLCJDT05UUk9MIiwiRlVOQ1RJT05fS0VZUyIsImJhc2VDb2RlIiwiQUxUIiwiQVJST1dfTEVGVCIsIkFSUk9XX1JJR0hUIiwiQVVESU9fRE9XTiIsIkFVRElPX01VVEUiLCJBVURJT19VUCIsIkNBUFNfTE9DSyIsIkNPTU1BIiwiRU5EIiwiRU5URVIiLCJFU0NBUEUiLCJGMSIsIkYyIiwiRjMiLCJGNCIsIkY1IiwiRjYiLCJGNyIsIkY4IiwiRjkiLCJGMTAiLCJGMTEiLCJGMTIiLCJGMTMiLCJGMTQiLCJGMTUiLCJGMTYiLCJGMTciLCJGMTgiLCJGMTkiLCJIT01FIiwiTUVESUFfTkVYVCIsIk1FRElBX1BMQVlfUEFVU0UiLCJNRURJQV9QUkVWIiwiTUVESUFfU1RPUCIsIk5VTEwiLCJOVU1fTE9DSyIsIlBBR0VfRE9XTiIsIlBBR0VfVVAiLCJQQVVTRSIsIlBFUklPRCIsIlNDUk9MTF9MT0NLIiwiU0hJRlQiLCJTUEFDRSIsIlRBQiIsImpRdWVyeSIsIiR0aGlzIiwicmVtb3ZlRGF0YSIsIkNNX0FMSUFTIiwiQ09OVEVYVF9NRU5VX0lURU1TX05BTUVTUEFDRSIsIkZJTFRFUlNfTkFNRVNQQUNFIiwiQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVMiLCJDT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkUiLCJDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1ciLCJDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfTEVGVCIsIkNPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVCIsIkNPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9ST1ciLCJDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09MVU1OIiwiQ09OVEVYVE1FTlVfSVRFTVNfVU5ETyIsIkNPTlRFWFRNRU5VX0lURU1TX1JFRE8iLCJDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFkiLCJDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU4iLCJDT05URVhUTUVOVV9JVEVNU19DT1BZIiwiQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9IRUFERVJTIiwiQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9HUk9VUF9IRUFERVJTIiwiQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZIiwiQ09OVEVYVE1FTlVfSVRFTVNfQ1VUIiwiQ09OVEVYVE1FTlVfSVRFTVNfRlJFRVpFX0NPTFVNTiIsIkNPTlRFWFRNRU5VX0lURU1TX1VORlJFRVpFX0NPTFVNTiIsIkNPTlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTIiwiQ09OVEVYVE1FTlVfSVRFTVNfVU5NRVJHRV9DRUxMUyIsIkNPTlRFWFRNRU5VX0lURU1TX0FERF9DT01NRU5UIiwiQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UIiwiQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0NPTU1FTlQiLCJDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVCIsIkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVCIsIkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUIiwiQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUiIsIkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9SSUdIVCIsIkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9KVVNUSUZZIiwiQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX1RPUCIsIkNPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEUiLCJDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NIiwiQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSUyIsIkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfVE9QIiwiQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19SSUdIVCIsIkNPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NIiwiQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19MRUZUIiwiQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JPUkRFUlMiLCJDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19JTlNFUlRfQ0hJTEQiLCJDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQiLCJDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTiIsIkNPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OIiwiQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1ciLCJDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVyIsIkZJTFRFUlNfQ09ORElUSU9OU19OQU1FU1BBQ0UiLCJDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0UiLCJGSUxURVJTX0NPTkRJVElPTlNfTk9ORSIsIkZJTFRFUlNfQ09ORElUSU9OU19FTVBUWSIsIkZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFkiLCJGSUxURVJTX0NPTkRJVElPTlNfRVFVQUwiLCJGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMIiwiRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIIiwiRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSCIsIkZJTFRFUlNfQ09ORElUSU9OU19DT05UQUlOUyIsIkZJTFRFUlNfQ09ORElUSU9OU19OT1RfQ09OVEFJTiIsIkZJTFRFUlNfQ09ORElUSU9OU19CWV9WQUxVRSIsIkZJTFRFUlNfQ09ORElUSU9OU19HUkVBVEVSX1RIQU4iLCJGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMIiwiRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTiIsIkZJTFRFUlNfQ09ORElUSU9OU19MRVNTX1RIQU5fT1JfRVFVQUwiLCJGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTiIsIkZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTiIsIkZJTFRFUlNfQ09ORElUSU9OU19BRlRFUiIsIkZJTFRFUlNfQ09ORElUSU9OU19CRUZPUkUiLCJGSUxURVJTX0NPTkRJVElPTlNfVE9EQVkiLCJGSUxURVJTX0NPTkRJVElPTlNfVE9NT1JST1ciLCJGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZIiwiRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT04iLCJGSUxURVJTX0RJVlNfRklMVEVSX0JZX1ZBTFVFIiwiRklMVEVSU19MQUJFTFNfQ09OSlVOQ1RJT04iLCJGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTiIsIkZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTIiwiRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEwiLCJGSUxURVJTX0JVVFRPTlNfQ0xFQVIiLCJGSUxURVJTX0JVVFRPTlNfT0siLCJGSUxURVJTX0JVVFRPTlNfQ0FOQ0VMIiwiRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJDSCIsIkZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRSIsIkZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUUiLCJDSEVDS0JPWF9DSEVDS0VEIiwiQ0hFQ0tCT1hfVU5DSEVDS0VEIiwiZ2V0UGhyYXNlRm9ybWF0dGVycyIsImdldEdsb2JhbFBocmFzZUZvcm1hdHRlcnMiLCJyZWdpc3RlclBocmFzZUZvcm1hdHRlciIsIl9wbHVyYWxpemUiLCJyZWdpc3Rlckdsb2JhbGx5UGhyYXNlRm9ybWF0dGVyIiwiZm9ybWF0dGVyRm4iLCJwaHJhc2VQcm9wb3NpdGlvbnMiLCJwbHVyYWxGb3JtIiwiZ2V0RGVmYXVsdExhbmd1YWdlRGljdGlvbmFyeSIsIl9lblVTIiwiZ2V0R2xvYmFsTGFuZ3VhZ2VzRGljdGlvbmFyaWVzIiwiYXJndW1lbnRzRm9yRm9ybWF0dGVycyIsImxhbmd1YWdlRGljdGlvbmFyeSIsImZvcm1hdHRlZFBocmFzZSIsImZvcm1hdHRlZFBocmFzZVByb3Bvc2l0aW9ucyIsIl9waHJhc2VGb3JtYXR0ZXJzIiwiZm9ybWF0dGVyIiwiZ2V0Rm9ybWF0dGVkUGhyYXNlIiwiREVGQVVMVF9MQU5HVUFHRV9DT0RFIiwiX2RpY3Rpb25hcnlLZXlzIiwicmVnaXN0ZXJHbG9iYWxseUxhbmd1YWdlRGljdGlvbmFyeSIsImdldEdsb2JhbExhbmd1YWdlRGljdGlvbmFyeSIsImhhc0dsb2JhbExhbmd1YWdlRGljdGlvbmFyeSIsImxhbmd1YWdlQ29kZU9yRGljdGlvbmFyeSIsImRpY3Rpb25hcnlPYmplY3QiLCJleHRlbmROb3RFeGlzdGluZ0tleXMiLCJleHRlbmRMYW5ndWFnZURpY3Rpb25hcnkiLCJjcmVhdGVDZWxsSGVhZGVyc1JhbmdlIiwiZmlyc3RSb3dJbmRleCIsIm5leHRSb3dJbmRleCIsImZyb21WYWx1ZSIsInRvVmFsdWUiLCJwYXJ0c09mTGFuZ3VhZ2VDb2RlIiwiX0hhbmRzb250YWJsZSRjZWxsVHlwIiwiX0hhbmRzb250YWJsZSRlZGl0b3JzIiwiX0hhbmRzb250YWJsZSRyZW5kZXJlIiwiX0hhbmRzb250YWJsZSR2YWxpZGF0IiwiX0hhbmRzb250YWJsZSRwbHVnaW5zIiwiX2pxdWVyeSIsIl9naG9zdFRhYmxlIiwicGFyc2VUYWJsZUhlbHBlcnMiLCJhcnJheUhlbHBlcnMiLCJicm93c2VySGVscGVycyIsImRhdGFIZWxwZXJzIiwiZGF0ZUhlbHBlcnMiLCJmZWF0dXJlSGVscGVycyIsImZ1bmN0aW9uSGVscGVycyIsIm1peGVkSGVscGVycyIsIm51bWJlckhlbHBlcnMiLCJvYmplY3RIZWxwZXJzIiwic3RyaW5nSGVscGVycyIsInVuaWNvZGVIZWxwZXJzIiwiZG9tSGVscGVycyIsImRvbUV2ZW50SGVscGVycyIsIl9yZWdpc3RyeTYiLCJfYmFzZTIiLCJyZWdpc3RlckFsbE1vZHVsZXMiLCJfX0dob3N0VGFibGUiLCJfZ2V0TGlzdGVuZXJzQ291bnRlciIsIl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXIiLCJnZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXIiLCJFdmVudE1hbmFnZXIiLCJIRUxQRVJTIiwiRE9NIiwiaGVscGVyIiwiY2VsbFR5cGVzIiwiY2VsbFR5cGVOYW1lIiwiZWRpdG9yTmFtZSIsImdldFJlZ2lzdGVyZWRSZW5kZXJlck5hbWVzIiwicmVuZGVyZXJOYW1lIiwiY2VsbERlY29yYXRvciIsInZhbGlkYXRvcnMiLCJnZXRSZWdpc3RlcmVkVmFsaWRhdG9yTmFtZXMiLCJ2YWxpZGF0b3JOYW1lIiwicGx1Z2lucyIsIkJhc2VQbHVnaW4iLCJyZWdpc3RlclBsdWdpbiIsImhvb2tzUmVmUmVnaXN0ZXJlciIsIl9ob29rc1N0b3JhZ2UiLCJjYWxsYmFja3MiLCJsb2NhbEhvb2tzIiwiY2xlYXJMb2NhbEhvb2tzIiwiUkVHSVNURVJFRF9IT09LUyIsIlJFTU9WRURfTUVTU0FHRSIsIlJFTU9WRURfSE9PS1MiLCJERVBSRUNBVEVEX0hPT0tTIiwiY2FsbGJhY2tPcmRlciIsIkhvb2tzIiwiZ2xvYmFsU2luZ2xldG9uIiwiZ2xvYmFsQnVja2V0IiwiY3JlYXRlRW1wdHlCdWNrZXQiLCJidWNrZXQiLCJpbml0T3JkZXJNYXAiLCJnZXRCdWNrZXQiLCJwbHVnaW5Ib29rQnVja2V0IiwiaG9va05hbWUiLCJyZW1vdmVkSW5WZXJzaW9uIiwiZm91bmRJbml0aWFsSG9vayIsImNiIiwic2V0Q2FsbGJhY2tPcmRlckluZGV4Iiwib3JkZXJCdWNrZXRCeU9yZGVySW5kZXgiLCJydW5PbmNlIiwiZ2xvYmFsSGFuZGxlcnMiLCJyZXMiLCJsb2NhbEhhbmRsZXJzIiwiZGVyZWdpc3RlciIsImdldFJlZ2lzdGVyZWQiLCJub3JtYWxpemVkT3JkZXJJbmRleCIsIm9yZGVyTWFwIiwiZ2V0Q2FsbGJhY2tPcmRlck1hcCIsImZsYXRNYXAiLCJfc2FtcGxlc0dlbmVyYXRvciIsIlBMVUdJTl9QUklPUklUWSIsIl9jYWNoZWRDb2x1bW5IZWFkZXJzIiwiX0F1dG9Db2x1bW5TaXplX2JyYW5kIiwiQXV0b0NvbHVtblNpemUiLCJTRVRUSU5HX0tFWVMiLCJDQUxDVUxBVElPTl9TVEVQIiwiU1lOQ19DQUxDVUxBVElPTl9MSU1JVCIsInNwYW5uZWQiLCJidW5kbGVTZWVkIiwiUGh5c2ljYWxJbmRleFRvVmFsdWVNYXAiLCJyZWdpc3Rlck1hcCIsImNvbHVtbldpZHRoc01hcCIsImlzRGJsQ2xpY2siLCJfb25CZWZvcmVDb2x1bW5SZXNpemUiLCJpc0VuYWJsZWQiLCJlbmFibGVQbHVnaW4iLCJlbmFibGVkIiwic2V0dGluZyIsInVzZUhlYWRlcnMiLCJnaG9zdFRhYmxlIiwic2V0U2V0dGluZyIsInNldFNhbXBsaW5nT3B0aW9ucyIsIl9vbkFmdGVyTG9hZERhdGEiLCJfb25CZWZvcmVDaGFuZ2UiLCJfb25BZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiX29uQmVmb3JlVmlld1JlbmRlciIsIl9vbkFmdGVySW5pdCIsInVwZGF0ZVBsdWdpbiIsImNoYW5nZWRDb2x1bW5zIiwiZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQiLCJjYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoIiwiZGlzYWJsZVBsdWdpbiIsImNhbGN1bGF0ZUNvbHVtbnNXaWR0aCIsImNvbFJhbmdlIiwicm93UmFuZ2UiLCJjb2x1bW5zUmFuZ2UiLCJyb3dzUmFuZ2UiLCJnZXRWYWx1ZUF0SW5kZXgiLCJzYW1wbGVzIiwic2FtcGxlc0dlbmVyYXRvciIsImdlbmVyYXRlQ29sdW1uU2FtcGxlcyIsInNhbXBsZSIsImdldFdpZHRocyIsInNldFZhbHVlQXRJbmRleCIsIm1lYXN1cmVkQ29sdW1ucyIsImNsZWFuIiwiY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoIiwidGltZXIiLCJpblByb2dyZXNzIiwibG9vcCIsInN5bmNMaW1pdCIsImdldFN5bmNDYWxjdWxhdGlvbkxpbWl0IiwiZmlyc3RDYWxjdWxhdGlvbiIsInNhbXBsaW5nUmF0aW8iLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiLCJzZXRTYW1wbGVDb3VudCIsInNldEFsbG93RHVwbGljYXRlcyIsInJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoIiwibGltaXQiLCJjb2xzTGltaXQiLCJrZWVwTWluaW11bSIsImZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uIiwiZmlyc3RSZW5kZXJlZENvbHVtbiIsImxhc3RGdWxseVZpc2libGVDb2x1bW4iLCJsYXN0UmVuZGVyZWRDb2x1bW4iLCJjb2x1bW5UaXRsZSIsImNhY2hlZENvbHVtbnNMZW5ndGgiLCJwaHlzaWNhbEluZGV4IiwiaXNOZWVkUmVjYWxjdWxhdGUiLCJjb2x1bW5Qcm9wZXJ0eSIsIm5ld1NpemUiLCJfY2hhbmdlJGFkZHJlc3MiLCJfYXV0b0NvbHVtblNpemUiLCJfQXV0b1Jvd1NpemVfYnJhbmQiLCJBdXRvUm93U2l6ZSIsInJvd0hlaWdodHNNYXAiLCJfb25CZWZvcmVSb3dSZXNpemUiLCJyZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQiLCJoZWFkZXJIZWlnaHQiLCJjYWxjdWxhdGVSb3dzSGVpZ2h0IiwiZ2VuZXJhdGVSb3dTYW1wbGVzIiwiYWRkQ29sdW1uSGVhZGVyc1JvdyIsImdldEhlaWdodHMiLCJtZWFzdXJlZFJvd3MiLCJjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0Iiwicm93c0xpbWl0IiwiZGVmYXVsdEhlaWdodCIsImNhY2hlZEhlaWdodCIsImNsZWFyQ2FjaGVCeVJhbmdlIiwiX2F1dG9Sb3dTaXplIiwiX0F1dG9maWxsX2JyYW5kIiwiQXV0b2ZpbGwiLCJtYXBTZXR0aW5ncyIsIl9vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93biIsIl9vbkNlbGxDb3JuZXJEYmxDbGljayIsIl9vbkJlZm9yZUNlbGxNb3VzZU92ZXIiLCJjbGVhck1hcHBlZFNldHRpbmdzIiwiZ2V0U2VsZWN0aW9uRGF0YSIsImNvcHlhYmxlUmFuZ2VzIiwiY29weWFibGVSb3dzIiwiY29weWFibGVDb2x1bW5zIiwicm93U2V0IiwiZmlsbEluIiwiZ2V0RmlsbCIsImZpbGxTdGFydFJvdyIsImZpbGxTdGFydENvbHVtbiIsImZpbGxFbmRSb3ciLCJmaWxsRW5kQ29sdW1uIiwiZ2V0VmlzdWFsQ29ybmVycyIsInNlbGVjdGlvblJhbmdlTGFzdCIsInRvcFN0YXJ0Q29ybmVyIiwiYm90dG9tRW5kQ29ybmVyIiwicmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhIiwiY29ybmVyc09mU2VsZWN0ZWRDZWxscyIsImNvcm5lcnNPZlNlbGVjdGlvbkFuZERyYWdBcmVhcyIsImRpcmVjdGlvbk9mRHJhZyIsInN0YXJ0T2ZEcmFnQ29vcmRzIiwiZW5kT2ZEcmFnQ29vcmRzIiwiZ2V0RHJhZ0RpcmVjdGlvbkFuZFJhbmdlIiwic2VsZWN0aW9uRGF0YSIsInNvdXJjZVJhbmdlIiwidGFyZ2V0UmFuZ2UiLCJiZWZvcmVBdXRvZmlsbEhvb2tSZXN1bHQiLCJmaWxsRGF0YSIsImRyYWdMZW5ndGgiLCJmaWxsT2Zmc2V0Iiwic2V0U2VsZWN0aW9uIiwicmVkdWNlU2VsZWN0aW9uQXJlYUlmTmVlZGVkIiwiZ2V0Q29vcmRzT2ZEcmFnQW5kRHJvcEJvcmRlcnMiLCJjb29yZHNPZlNlbGVjdGlvbiIsImN1cnJlbnRTZWxlY3Rpb24iLCJib3R0b21SaWdodENvcm5lciIsImRpcmVjdGlvbnMiLCJESVJFQ1RJT05TIiwic2hvd0JvcmRlciIsImNvb3Jkc09mRHJhZ0FuZERyb3BCb3JkZXJzIiwicmVkcmF3Qm9yZGVycyIsImFkZGluZ1N0YXJ0ZWQiLCJhZGROZXdSb3dJZk5lZWRlZCIsImNvcm5lcnNPZlNlbGVjdGVkRHJhZ0FyZWEiLCJuck9mVGFibGVSb3dzIiwiZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93IiwibGFzdEZpbGxlZEluUm93SW5kZXgiLCJkYXRhSW5DZWxsIiwiZGF0YUluTmV4dExlZnRDZWxsIiwiZGF0YUluTmV4dFJpZ2h0Q2VsbCIsImFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgiLCJzZWxlY3RTdGFydEFyZWEiLCJjb3JuZXJzT2ZBcmVhIiwic2VsZWN0QWRqYWNlbnQiLCJoYW5kbGVEcmFnZ2VkQ2VsbHMiLCJnZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUiLCJ0YWJsZUJvdHRvbSIsInRhYmxlUmlnaHQiLCJfb25Nb3VzZVVwIiwiX29uTW91c2VNb3ZlIiwibWFwcGVkU2V0dGluZ3MiLCJnZXRNYXBwZWRGaWxsSGFuZGxlU2V0dGluZyIsIm1vdXNlRG93bk9uQ2VsbENvcm5lciIsIm1vdXNlV2FzRHJhZ2dlZE91dHNpZGUiLCJtb3VzZURyYWdPdXRzaWRlIiwiX2F1dG9maWxsIiwic3RhcnRTZWxlY3Rpb24iLCJlbmRTZWxlY3Rpb24iLCJjZWxsQ29vcmRzRmFjdG9yeSIsIkRFUFNfVFlQRV9DSEVDS0VSUyIsImhhc1BsdWdpbiIsImhhc1JlbmRlcmVyIiwiaGFzVmFsaWRhdG9yIiwibWlzc2luZ0RlcHNNc2dzIiwiaW5pdGlhbGl6ZWRQbHVnaW5zIiwiX2hvb2tzIiwiX0Jhc2VQbHVnaW5fYnJhbmQiLCJfaXNSZWxldmFudFRvU2V0dGluZ3MiLCJzZXR0aW5nS2V5cyIsIm9uQWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCJvblVwZGF0ZVNldHRpbmdzIiwicGx1Z2luRGVwcyIsIlBMVUdJTl9ERVBTIiwiZGVwcyIsIm1pc3NpbmdEZXBlbmRlbmNpZXMiLCJkZXBlbmRlbmN5IiwibW9kdWxlTmFtZSIsImluaXRpYWxpemVkIiwiX3RoaXMkZXZlbnRNYW5hZ2VyIiwiY2FsbE9uUGx1Z2luc1JlYWR5IiwiaXNQbHVnaW5zUmVhZHkiLCJwbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MiLCJyZWxldmFudFRvU2V0dGluZ3MiLCJfdGhpcyRldmVudE1hbmFnZXIyIiwiX2xvb3NlQmluZHNNYXAiLCJfc3RyaWN0QmluZHNNYXAiLCJiaW5kVHlwZVRvTWFwU3RyYXRlZ3kiLCJfQmluZFJvd3NXaXRoSGVhZGVyc19icmFuZCIsIkJpbmRSb3dzV2l0aEhlYWRlcnMiLCJiaW5kVHlwZSIsIk1hcFN0cmF0ZWd5IiwiaGVhZGVySW5kZXhlcyIsIl9vbk1vZGlmeVJvd0hlYWRlciIsInVucmVnaXN0ZXJNYXAiLCJfYmluZFJvd3NXaXRoSGVhZGVycyIsImdldExpc3RXaXRoSW5zZXJ0ZWRJdGVtcyIsImdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zIiwiYWx0ZXJVdGlsc0ZhY3RvcnkiLCJMb29zZUJpbmRzTWFwIiwiSW5kZXhNYXAiLCJpbnNlcnRlZEluZGV4ZXMiLCJsaXN0QWZ0ZXJVcGRhdGUiLCJnZXRJbmNyZWFzZWRJbmRleGVzIiwiaW5kZXhlZFZhbHVlcyIsImluaXRWYWx1ZU9yRm4iLCJyZW1vdmVkSW5kZXhlcyIsImdldERlY3JlYXNlZEluZGV4ZXMiLCJTdHJpY3RCaW5kc01hcCIsIm9yZGluYWxOdW1iZXIiLCJnZXROZXh0VmFsdWUiLCJDT0xMQVBTSUJMRV9FTEVNRU5UX0NMQVNTIiwiYWN0aW9uRGljdGlvbmFyeSIsImhpZGVDb2x1bW4iLCJiZWZvcmVIb29rIiwiYWZ0ZXJIb29rIiwiX2NvbGxhcHNlZENvbHVtbnNNYXAiLCJfQ29sbGFwc2libGVDb2x1bW5zX2JyYW5kIiwiQ29sbGFwc2libGVDb2x1bW5zIiwiY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCIsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLCJoZWFkZXJTdGF0ZU1hbmFnZXIiLCJnZXRTdGF0ZU1hbmFnZXIiLCJfb25Jbml0IiwiX29uQWZ0ZXJHZXRDb2xIZWFkZXIiLCJfb25CZWZvcmVPbkNlbGxNb3VzZURvd24iLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwibWFwU3RhdGUiLCJoZWFkZXJTZXR0aW5ncyIsImNvbGxhcHNpYmxlIiwib3JpZ0NvbHNwYW4iLCJtZXJnZVN0YXRlV2l0aCIsImNsZWFyQnV0dG9ucyIsImFkZFNob3J0Y3V0IiwiX3RoaXMkaGVhZGVyU3RhdGVNYW5hIiwiaXNDb2xsYXBzZWQiLCJnZXRIZWFkZXJUcmVlTm9kZURhdGEiLCJleHBhbmRTZWN0aW9uIiwiY29sbGFwc2VTZWN0aW9uIiwiX3RoaXMkaG90JGdldFNlbGVjdGVkMiIsImhlYWRlckxldmVscyIsIm1haW5IZWFkZXJzIiwidG9wSGVhZGVycyIsInRvcExlZnRDb3JuZXJIZWFkZXJzIiwicmVtb3ZlQnV0dG9uIiwibWFzdGVyTGV2ZWwiLCJ0b3BMZXZlbCIsInRvcExlZnRDb3JuZXJMZXZlbCIsInRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbiIsInRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMiLCJtYXBOb2RlcyIsImxldmVsVG9Sb3dDb29yZHMiLCJjb2xsYXBzZUFsbCIsImV4cGFuZEFsbCIsImZpbHRlcmVkQ29vcmRzIiwiaXNBY3Rpb25Qb3NzaWJsZSIsIl90aGlzJGhlYWRlclN0YXRlTWFuYTIiLCJnZXRIZWFkZXJTZXR0aW5ncyIsIm5vZGVNb2RSb2xsYmFja3MiLCJhZmZlY3RlZENvbHVtbnNJbmRleGVzIiwiY29sc3BhbkNvbXBlbnNhdGlvbiIsImFmZmVjdGVkQ29sdW1ucyIsInJvbGxiYWNrTW9kaWZpY2F0aW9uIiwidHJpZ2dlck5vZGVNb2RpZmljYXRpb24iLCJjdXJyZW50Q29sbGFwc2VkQ29sdW1ucyIsImdldENvbGxhcHNlZENvbHVtbnMiLCJkZXN0aW5hdGlvbkNvbGxhcHNlZENvbHVtbnMiLCJhY3Rpb25UcmFuc2xhdG9yIiwibm9kZU1vZFJvbGxiYWNrIiwiaXNBY3Rpb25QZXJmb3JtZWQiLCJuZXh0Um93IiwibmV4dENvbHVtbiIsImdldEhpZGRlbkluZGV4ZXMiLCJfdGhpcyRoZWFkZXJTdGF0ZU1hbmEzIiwiaXNOb2RlQ29sbGFwc2libGUiLCJpc0FyaWFUYWdzRW5hYmxlZCIsImNvbGxhcHNpYmxlRWxlbWVudCIsIl9jb2xsYXBzaWJsZUVsZW1lbnQiLCJpbml0aWFsTG9hZCIsIl9jb2xsYXBzaWJsZUNvbHVtbnMiLCJfY29sdW1uU3RhdGVzTWFuYWdlciIsIl9kb21IZWxwZXJzIiwiX3Jvb3RDb21wYXJhdG9yIiwiX3NvcnRTZXJ2aWNlIiwiQVBQRU5EX0NPTFVNTl9DT05GSUdfU1RSQVRFR1kiLCJSRVBMQUNFX0NPTFVNTl9DT05GSUdfU1RSQVRFR1kiLCJyZWdpc3RlclJvb3RDb21wYXJhdG9yIiwicm9vdENvbXBhcmF0b3IiLCJfQ29sdW1uU29ydGluZ19icmFuZCIsIkNvbHVtblNvcnRpbmciLCJwbHVnaW5LZXkiLCJjb2x1bW5TdGF0ZXNNYW5hZ2VyIiwiQ29sdW1uU3RhdGVzTWFuYWdlciIsImNvbHVtbk1ldGFDYWNoZSIsImdldE1lcmdlZFBsdWdpblNldHRpbmdzIiwib25BZnRlck9uQ2VsbE1vdXNlRG93biIsIl9sb2FkT3JTb3J0QnlTZXR0aW5ncyIsImNsZWFyQ29sSGVhZGVyIiwiaGVhZGVyU3BhbkVsZW1lbnQiLCJnZXRIZWFkZXJTcGFuRWxlbWVudCIsImlzRmlyc3RMZXZlbENvbHVtbkhlYWRlciIsInVwZGF0ZUhlYWRlckNsYXNzZXMiLCJpbmRleGVzU2VxdWVuY2VDYWNoZSIsImdldENvbHVtbk5leHRDb25maWciLCJzb3J0Q29uZmlnIiwiY3VycmVudFNvcnRDb25maWciLCJnZXRTb3J0Q29uZmlnIiwiZGVzdGluYXRpb25Tb3J0Q29uZmlncyIsImdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyIsInNvcnRQb3NzaWJsZSIsImFyZVZhbGlkU29ydENvbmZpZ3MiLCJJbmRleGVzU2VxdWVuY2UiLCJzZXRWYWx1ZXMiLCJnZXRJbmRleGVzU2VxdWVuY2UiLCJzZXRTb3J0U3RhdGVzIiwic29ydEJ5UHJlc2V0U29ydFN0YXRlcyIsInNhdmVBbGxTb3J0U2V0dGluZ3MiLCJjbGVhclNvcnQiLCJpc1NvcnRlZCIsImlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5IiwiZ2V0Q29sdW1uU29ydFN0YXRlIiwiZ2V0U29ydFN0YXRlcyIsInNldFNvcnRDb25maWciLCJzb3J0Q29uZmlncyIsIm51bWJlck9mQ29sdW1ucyIsImFyZVZhbGlkU29ydFN0YXRlcyIsImFsbFNvcnRTZXR0aW5ncyIsImdldEFsbENvbHVtbnNQcm9wZXJ0aWVzIiwiaW5pdGlhbENvbmZpZyIsInJlc3RPZlByb3BlcnRpZXMiLCJnZXRBbGxTYXZlZFNvcnRTZXR0aW5ncyIsInN0b3JlZEFsbFNvcnRTZXR0aW5ncyIsInNvcnRPcmRlciIsImdldFNvcnRPcmRlck9mQ29sdW1uIiwibmV4dFNvcnRPcmRlciIsImdldE5leHRTb3J0T3JkZXIiLCJnZXROZXh0U29ydENvbmZpZyIsImNvbHVtblRvQ2hhbmdlIiwic3RyYXRlZ3lJZCIsImluZGV4T2ZDb2x1bW5Ub0NoYW5nZSIsImdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZSIsImlzQ29sdW1uU29ydGVkIiwibmV4dENvbHVtbkNvbmZpZyIsImdldFBsdWdpbkNvbHVtbkNvbmZpZyIsImNvbHVtbkNvbmZpZyIsInBsdWdpbkNvbHVtbkNvbmZpZyIsInBsdWdpbk1haW5TZXR0aW5ncyIsInN0b3JlZENvbHVtblByb3BlcnRpZXMiLCJnZXRGaXJzdENlbGxTZXR0aW5ncyIsImNlbGxNZXRhQ29weSIsImdldE51bWJlck9mUm93c1RvU29ydCIsIm51bWJlck9mUm93cyIsImluZGV4ZXNXaXRoRGF0YSIsImdldERhdGFGb3JTb3J0ZWRDb2x1bW5zIiwidmlzdWFsUm93SW5kZXgiLCJpbmRleGVzQmVmb3JlIiwiaW5kZXhXaXRoRGF0YSIsImluZGV4ZXNBZnRlciIsImluZGV4TWFwcGluZyIsImluZGV4QmVmb3JlIiwiaW5kZXhJbnNpZGVBcnJheSIsIm5ld0luZGV4ZXNTZXF1ZW5jZSIsInNvcnRCeVNldHRpbmdzIiwidXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMiLCJnZXRDbGFzc2VzVG9SZW1vdmUiLCJnZXRDbGFzc2VzVG9BZGQiLCJnZXROdW1iZXJPZkluZGV4ZXMiLCJ3YXNDbGlja2FibGVIZWFkZXJDbGlja2VkIiwiaGVhZGVyQWN0aW9uIiwiSEVBREVSX1NQQU5fQ0xBU1MiLCJ3YXNIZWFkZXJDbGlja2VkUHJvcGVybHkiLCJfdGhpcyRjb2x1bW5TdGF0ZXNNYW4iLCJwbHVnaW5TZXR0aW5nc0ZvckNvbHVtbiIsInNob3dTb3J0SW5kaWNhdG9yIiwiaGVhZGVyQWN0aW9uRW5hYmxlZCIsImN1cnJlbnRTb3J0U3RhdGUiLCJjb250cm9sbGVyIiwiaW5oZXJpdGVkQ29sdW1uUHJvcGVydGllcyIsIm1hcE5hbWUiLCJMaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCIsInNvcnRpbmdTdGF0ZXMiLCJjb2x1bW5Qcm9wZXJ0aWVzIiwic29ydEVtcHR5Q2VsbHMiLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Iiwic2VhcmNoZWRDb2x1bW4iLCJfdGhpcyRzb3J0aW5nU3RhdGVzJGciLCJnZXRFbnRyaWVzIiwiZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zIiwic29ydFN0YXRlcyIsImNzc0NsYXNzZXMiLCJIRUFERVJfU09SVF9DTEFTUyIsIkhFQURFUl9BQ1RJT05fQ0xBU1MiLCJIRUFERVJfQ0xBU1NfSU5ESUNBVE9SX0RJU0FCTEVEIiwiY29sdW1uT3JkZXIiLCJvcmRlclRvQ3NzQ2xhc3MiLCJBU0NfU09SVF9TVEFURSIsIkRFU0NfU09SVF9TVEFURSIsIl9jb2x1bW5Tb3J0aW5nIiwic29ydGluZ09yZGVycyIsImNvbHVtbk1ldGFzIiwicm93SW5kZXhXaXRoVmFsdWVzIiwibmV4dFJvd0luZGV4V2l0aFZhbHVlcyIsIm5leHRWYWx1ZXMiLCJzb3J0aW5nT3JkZXIiLCJwbHVnaW5TZXR0aW5ncyIsImdldENvbXBhcmVGdW5jdGlvbkZhY3RvcnkiLCJjb2x1bW5QbHVnaW5TZXR0aW5ncyIsImlzRW1wdHlWYWx1ZSIsImlzRW1wdHlOZXh0VmFsdWUiLCJ1bmlmaWVkVmFsdWUiLCJ1bmlmaWVkTmV4dFZhbHVlIiwiaXNWYWx1ZUZyb21UZW1wbGF0ZSIsImlzTmV4dFZhbHVlRnJvbVRlbXBsYXRlIiwiRklSU1RfQUZURVJfU0VDT05EIiwiRklSU1RfQkVGT1JFX1NFQ09ORCIsIl9kZWZhdWx0IiwiRE9fTk9UX1NXQVAiLCJDT0xVTU5fREFUQV9UWVBFIiwiY3JlYXRlRGF0ZVRpbWVDb21wYXJlRnVuY3Rpb24iLCJwYXJzZWRGaXJzdFZhbHVlIiwicGFyc2VkU2Vjb25kVmFsdWUiLCJyb290Q29tcGFyYXRvcklkIiwiZ2V0Um9vdENvbXBhcmF0b3IiLCJhcmdzRm9yUm9vdENvbXBhcmF0b3IiLCJfZW5naW5lIiwiaGFzR2xvYmFsbHlDb21wYXJlRnVuY3Rpb25GYWN0b3J5IiwiZ2V0R2xvYmFsbHlDb21wYXJlRnVuY3Rpb25GYWN0b3J5IiwiX251bWVyaWMiLCJfY2hlY2tib3giLCJfZGF0ZSIsIl90aW1lIiwicmVnaXN0ZXJDb21wYXJlRnVuY3Rpb25GYWN0b3J5IiwiY29sdW1uU3RhdGUiLCJpc1ZhbGlkQ29sdW1uU3RhdGUiLCJzb3J0ZWRDb2x1bW5zIiwiZmlyc3REYXRlIiwibmV4dERhdGUiLCJUUnMiLCJjbGlja0V2ZW50IiwiX2VuZHBvaW50cyIsIl9Db2x1bW5TdW1tYXJ5X2JyYW5kIiwiQ29sdW1uU3VtbWFyeSIsImVuZHBvaW50cyIsIl9vbkFmdGVyQ2hhbmdlIiwiX29uQWZ0ZXJVcGRhdGVTZXR0aW5ncyIsInJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uIiwicmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbiIsIl9vbkFmdGVyUm93TW92ZSIsImN1cnJlbnRFbmRwb2ludCIsImluaXRFbmRwb2ludHMiLCJlbmRwb2ludCIsImNhbGN1bGF0ZVN1bSIsImNhbGN1bGF0ZU1pbk1heCIsImNvdW50RW50cmllcyIsImNhbGN1bGF0ZUF2ZXJhZ2UiLCJjdXN0b21GdW5jdGlvbiIsImdldFBhcnRpYWxTdW0iLCJiaWdnZXN0RGVjaW1hbFBsYWNlc0NvdW50IiwiZ2V0Q2VsbFZhbHVlIiwiaXNOdWxsaXNoT3JOYU4iLCJkZWNpbWFsUGxhY2VzIiwicGFydGlhbFJlc3VsdCIsImdldFBhcnRpYWxNaW5NYXgiLCJjb3VudEVtcHR5IiwiY291bnRlciIsImVtcHR5Q291bnQiLCJjZWxsQ2xhc3NOYW1lIiwiZm9yY2VOdW1lcmljIiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsInJlZnJlc2hDZWxsTWV0YXMiLCJyZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyIsInBhcnNlU2V0dGluZ3MiLCJyZWZyZXNoQWxsRW5kcG9pbnRzIiwiZ2V0RW5kcG9pbnQiLCJzZXR0aW5nc1R5cGUiLCJmaWxsTWlzc2luZ0VuZHBvaW50RGF0YSIsImdldEFsbEVuZHBvaW50cyIsImVuZHBvaW50c0FycmF5IiwibmV3RW5kcG9pbnQiLCJhc3NpZ25TZXR0aW5nIiwiZGVzdGluYXRpb25Db2x1bW4iLCJyZXZlcnNlZFJvd0Nvb3JkcyIsImRlc3RpbmF0aW9uUm93IiwiYWx0ZXJSb3dPZmZzZXQiLCJhbHRlckNvbHVtbk9mZnNldCIsInJlc2V0QWxsRW5kcG9pbnRzIiwiZm9yY2VSZWZyZXNoIiwiYmVmb3JlVmlld1JlbmRlckNhbGxiYWNrIiwibXVsdGlwbGllciIsInJvd01vdmluZyIsInBsYWNlT2ZBbHRlcmF0aW9uIiwiZXh0ZW5kRW5kcG9pbnRSYW5nZXMiLCJyZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzIiwiY2xlYXJPZmZzZXRJbmZvcm1hdGlvbiIsInNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyIsInByZXZpb3VzUG9zaXRpb24iLCJuZXdSYW5nZXMiLCJhbGxJbmRleGVzIiwibmV3UmFuZ2UiLCJjb29yZCIsIm9mZnNldFN0YXJ0SW5kZXgiLCJzdWJFbGVtZW50IiwidXNlT2Zmc2V0IiwiYWx0ZXJDb2xPZmZzZXQiLCJjZWxsc1RvU2V0Q2FjaGUiLCJyZXNldEVuZHBvaW50VmFsdWUiLCJzZXRFbmRwb2ludFZhbHVlIiwibmVlZFRvUmVmcmVzaCIsImNoYW5nZXNPYmoiLCJyZWZyZXNoRW5kcG9pbnQiLCJkZXN0aW5hdGlvblZpc3VhbFJvdyIsInZpc3VhbEVuZHBvaW50Um93SW5kZXgiLCJ0aHJvd091dE9mQm91bmRzV2FybmluZyIsInJvdW5kRmxvYXQiLCJyb3VuZEZsb2F0VmFsdWUiLCJkZWNpbWFsUGxhY2VzQ291bnQiLCJfY29sdW1uU3VtbWFyeSIsIkNvbW1lbnRFZGl0b3IiLCJDTEFTU19FRElUT1JfQ09OVEFJTkVSIiwiQ0xBU1NfRURJVE9SIiwiQ0xBU1NfSU5QVVQiLCJDTEFTU19DRUxMIiwiY3JlYXRlRWRpdG9yIiwiZWRpdG9yU3R5bGUiLCJzZXRQb3NpdGlvbiIsImdldElucHV0RWxlbWVudCIsImdldFNpemUiLCJyZXNldFNpemUiLCJzZXRSZWFkT25seVN0YXRlIiwic2hvdyIsImlzRm9jdXNlZCIsInRleHRBcmVhIiwiY29udGFpbmVyUGFyZW50RWxlbWVudCIsIl9jb21tZW50RWRpdG9yIiwiX2Rpc3BsYXlTd2l0Y2gyIiwiX3ByZWRlZmluZWRJdGVtcyIsIl9hZGRFZGl0Q29tbWVudCIsIl9yZW1vdmVDb21tZW50IiwiX3JlYWRPbmx5Q29tbWVudCIsIk1FVEFfQ09NTUVOVCIsIk1FVEFfQ09NTUVOVF9WQUxVRSIsIk1FVEFfU1RZTEUiLCJNRVRBX1JFQURPTkxZIiwiU0hPUlRDVVRTX0NPTlRFWFRfTkFNRSIsIl9lZGl0b3IiLCJfZGlzcGxheVN3aXRjaCIsIl9wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaCIsIl9wcmV2ZW50RWRpdG9ySGlkaW5nIiwiX3RlbXBFZGl0b3JEaW1lbnNpb25zIiwiX2NlbGxCZWxvd0N1cnNvciIsIl9jb21tZW50VmFsdWVCZWZvcmVTYXZlIiwiX0NvbW1lbnRzX2JyYW5kIiwiZ2V0RGlzcGxheURlbGF5U2V0dGluZyIsImFkZFRvQ29udGV4dE1lbnUiLCJfb25BZnRlclJlbmRlcmVyIiwiX29uQWZ0ZXJTY3JvbGwiLCJzaG93QXRDZWxsIiwidXBkYXRlRGVsYXkiLCJncmlkQ29udGV4dCIsInBsdWdpbkNvbnRleHQiLCJhZGRDb250ZXh0Iiwic2V0UmFuZ2UiLCJmb2N1c0VkaXRvciIsImVkaXRvckVsZW1lbnQiLCJnZXRFZGl0b3JJbnB1dEVsZW1lbnQiLCJfb25Nb3VzZU92ZXIiLCJfb25Nb3VzZURvd24iLCJfb25FZGl0b3JGb2N1cyIsIl9vbkVkaXRvckJsdXIiLCJfb25FZGl0b3JNb3VzZURvd24iLCJfb25FZGl0b3JNb3VzZVVwIiwiY2xlYXJSYW5nZSIsInRhcmdldElzQ2VsbFdpdGhDb21tZW50IiwiY2xvc2VzdENlbGwiLCJ0YXJnZXRJc0NvbW1lbnRUZXh0QXJlYSIsInNldENvbW1lbnQiLCJlZGl0b3JWYWx1ZSIsInVwZGF0ZUNvbW1lbnRNZXRhIiwic2V0Q29tbWVudEF0Q2VsbCIsInJlbW92ZUNvbW1lbnQiLCJmb3JjZVJlbmRlciIsInJlbW92ZUNvbW1lbnRBdENlbGwiLCJnZXRDb21tZW50IiwiZ2V0Q29tbWVudE1ldGEiLCJnZXRDb21tZW50QXRDZWxsIiwiY2FuY2VsSGlkaW5nIiwicmVmcmVzaEVkaXRvciIsIl9yZW5kZXJhYmxlUm93IiwiX3JlbmRlcmFibGVDb2x1bW4iLCJ0YXJnZXRpbmdQcmV2aW91c1JvdyIsImlzQmVmb3JlUmVuZGVyZWRSb3dzIiwiaXNCZWZvcmVSZW5kZXJlZENvbHVtbnMiLCJ3dCIsImNvbW1lbnRTdHlsZSIsImxhc3RDb2xXaWR0aCIsImNlbGxIZWlnaHQiLCJlZGl0b3JXaWR0aCIsImVkaXRvckhlaWdodCIsIm9sZENvbW1lbnQiLCJuZXdDb21tZW50IiwiaXRlbXMiLCJTRVBBUkFUT1IiLCJjb21tZW50U2V0dGluZyIsImRpc3BsYXlEZWxheSIsImV2ZW50Q2VsbCIsImNvb3JkaW5hdGVzIiwiZWxlbWVudEZyb21Qb2ludCIsImN1cnJlbnRXaWR0aCIsIl90aGlzJGdldFNlbGVjdGVkUmFuZyIsImNoZWNrU2VsZWN0aW9uQ29uc2lzdGVuY3kiLCJfY29tbWVudHMiLCJtYXJrTGFiZWxBc1NlbGVjdGVkIiwiY3VycmVudFN0YXRlIiwiRGlzcGxheVN3aXRjaCIsIndhc0xhc3RBY3Rpb25TaG93IiwiaGlkaW5nVGltZXIiLCJzaG93RGVib3VuY2VkIiwiQ29tbWFuZEV4ZWN1dG9yIiwicmVnaXN0ZXJDb21tYW5kIiwiY29tbWFuZERlc2NyaXB0b3IiLCJjb21tYW5kcyIsInNldENvbW1vbkNhbGxiYWNrIiwiY29tbW9uQ2FsbGJhY2siLCJleGVjdXRlIiwiY29tbWFuZE5hbWUiLCJjb21tYW5kU3BsaXQiLCJjb21tYW5kTmFtZVByaW1hcnkiLCJzdWJDb21tYW5kTmFtZSIsImNvbW1hbmQiLCJzdWJtZW51Iiwic3ViQ29tbWFuZHMiLCJjbWQiLCJjbWRzIiwiZmluZFN1YkNvbW1hbmQiLCJfY29tbWFuZEV4ZWN1dG9yIiwiX2l0ZW1zRmFjdG9yeSIsIl9tZW51IiwiX0NvbnRleHRNZW51X2JyYW5kIiwiQ29udGV4dE1lbnUiLCJERUZBVUxUX0lURU1TIiwiUk9XX0FCT1ZFIiwiUk9XX0JFTE9XIiwiQ09MVU1OX0xFRlQiLCJDT0xVTU5fUklHSFQiLCJSRU1PVkVfUk9XIiwiUkVNT1ZFX0NPTFVNTiIsIlVORE8iLCJSRURPIiwiUkVBRF9PTkxZIiwiQUxJR05NRU5UIiwiY29tbWFuZEV4ZWN1dG9yIiwibWVudSIsIk1lbnUiLCJrZWVwSW5WaWV3cG9ydCIsInVpQ29udGFpbmVyIiwiX29uTWVudUJlZm9yZU9wZW4iLCJfb25NZW51QWZ0ZXJPcGVuIiwiX29uTWVudUFmdGVyQ2xvc2UiLCJleGVjdXRlQ29tbWFuZCIsIl9vbkFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJyZWN0IiwiZ2V0RG9jdW1lbnRPZmZzZXRCeUVsZW1lbnQiLCJhYm92ZSIsImdldE5hdmlnYXRvciIsInRvRmlyc3RJdGVtIiwiX3RoaXMkbWVudSIsImJlbG93IiwicHJlcGFyZU1lbnVJdGVtcyIsIl90aGlzJG1lbnUyIiwiaXRlbXNGYWN0b3J5IiwiSXRlbXNGYWN0b3J5IiwicHJlZGVmaW5lZEl0ZW1zIiwic2V0UHJlZGVmaW5lZEl0ZW1zIiwibWVudUl0ZW1zIiwic2V0TWVudUl0ZW1zIiwic2hvd1Jvd0hlYWRlcnMiLCJzaG93Q29sSGVhZGVycyIsImlzVmFsaWRFbGVtZW50IiwiX2NvbnRleHRNZW51Iiwib3JkZXJQYXR0ZXJuIiwiZGVmYXVsdE9yZGVyUGF0dGVybiIsInByZWRlZmluZWRJdGVtc0NvbGxlY3Rpb24iLCJtZW51SXRlbUtleSIsImRlZmF1bHRQYXR0ZXJuIiwiSVRFTVMiLCJDdXJzb3IiLCJ0b3BSZWxhdGl2ZSIsImxlZnRSZWxhdGl2ZSIsImdldFNvdXJjZVR5cGUiLCJwYWdlWSIsInBhZ2VYIiwiRXZlbnQiLCJmaXRzQWJvdmUiLCJmaXRzQmVsb3ciLCJmaXRzT25SaWdodCIsImZpdHNPbkxlZnQiLCJjcmVhdGVEZWZhdWx0U2hvcnRjdXRzTGlzdCIsImhvdE1lbnUiLCJmb3J3YXJkVG9Db250ZXh0IiwidG9OZXh0SXRlbSIsInRvUHJldmlvdXNJdGVtIiwic3ViTWVudSIsIm9wZW5TdWJNZW51IiwiaXNTdWJNZW51IiwicGFyZW50TWVudSIsInRvTGFzdEl0ZW0iLCJfcG9zaXRpb25lciIsIl9uYXZpZ2F0b3IyIiwiX21lbnVJdGVtUmVuZGVyZXIiLCJfbmF2aWdhdG9yIiwiX3Nob3J0Y3V0c0N0cmwiLCJjcmVhdGVDb250YWluZXIiLCJwb3NpdGlvbmVyIiwiUG9zaXRpb25lciIsIm9uRG9jdW1lbnRNb3VzZURvd24iLCJvbkRvY3VtZW50Q29udGV4dE1lbnUiLCJnZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwiLCJnZXRTZWxlY3RlZEl0ZW0iLCJoYXNTZWxlY3RlZEl0ZW0iLCJkZWxheWVkT3BlblN1Yk1lbnUiLCJtaW5XaWR0aE9mTWVudSIsIm5vSXRlbXNEZWZpbmVkIiwiZmlsdGVyZWRJdGVtcyIsIk5PX0lURU1TIiwiaXNJdGVtSGlkZGVuIiwiZmlsdGVyU2VwYXJhdG9ycyIsInNob3VsZEF1dG9DbG9zZU1lbnUiLCJtb2RpZnlDb2xXaWR0aCIsImNyZWF0ZU1lbnVJdGVtUmVuZGVyZXIiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJzZXRDdXJyZW50UGFnZSIsImFmdGVyT25DZWxsTW91c2VPdmVyIiwiaXNBbGxTdWJNZW51c0Nsb3NlZCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlclNlbGVjdGlvbiIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJpc0NvbW1hbmRQYXNzaXZlIiwiYWZ0ZXJPbkNlbGxNb3VzZVVwIiwiYWZ0ZXJVbmxpc3RlbiIsIm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLCJvbkFmdGVySW5pdCIsImNyZWF0ZU1lbnVOYXZpZ2F0b3IiLCJjcmVhdGVLZXlib2FyZFNob3J0Y3V0c0N0cmwiLCJjbG9zZVBhcmVudCIsImNsb3NlQWxsU3ViTWVudXMiLCJoYXNTdWJNZW51IiwiZGF0YUl0ZW0iLCJob3RTdWJNZW51cyIsImNsb3NlU3ViTWVudSIsIm1lbnVzIiwibWVudUNvbnRhaW5lclBhcmVudEVsZW1lbnQiLCJzZWxlY3RlZEl0ZW0iLCJzZWxSYW5nZXMiLCJub3JtYWxpemVkU2VsZWN0aW9uIiwibm9ybWFsaXplU2VsZWN0aW9uIiwiaXNDb21tYW5kIiwiaXNJdGVtU2VwYXJhdG9yIiwiaXNJdGVtRGlzYWJsZWQiLCJpc0l0ZW1TdWJNZW51IiwiYXJlYSIsInNldFBhcmVudEVsZW1lbnQiLCJzZXRFbGVtZW50IiwidXBkYXRlUG9zaXRpb24iLCJjdXJyZW50SGlkZXJXaWR0aCIsInJlYWxIZWlnaHQiLCJtYWluVGFibGVIb3QiLCJtZW51SG90Iiwid3JhcHBlciIsIml0ZW1WYWx1ZSIsImlzRm9jdXNhYmxlIiwiaXNJdGVtU2VsZWN0aW9uRGlzYWJsZWQiLCJfcGFnaW5hdG9yIiwiY3JlYXRlUGFnaW5hdG9yIiwib25JdGVtU2VsZWN0IiwiZGlyZWN0SXRlbUNoYW5nZSIsImlzU2VwYXJhdG9yIiwiaXNEaXNhYmxlZCIsImlzU2VsZWN0aW9uRGlzYWJsZWQiLCJvbkNsZWFyIiwiX2N1cnNvcjIiLCJfY29udGFpbmVyIiwiX3BhcmVudENvbnRhaW5lciIsIl9jdXJzb3IiLCJfa2VlcEluVmlld3BvcnQiLCJfb2Zmc2V0Iiwic2V0UG9zaXRpb25CZWxvd0N1cnNvciIsInNldFBvc2l0aW9uQWJvdmVDdXJzb3IiLCJ1cGRhdGVIb3Jpem9udGFsUG9zaXRpb24iLCJzZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvciIsInNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IiLCJwYXJlbnRNZW51UmlnaHQiLCJwYXJlbnRNZW51TGVmdCIsImN1c3RvbUtleWJvYXJkU2hvcnRjdXRzIiwiY3VzdG9tU2hvcnRjdXRzIiwiX2FkZFNob3J0Y3V0cyIsInNob3J0Y3V0cyIsImNvbnRleHROYW1lIiwiU0hPUlRDVVRTX0NPTlRFWFQiLCJhZGRDdXN0b21TaG9ydGN1dHMiLCJyZW1vdmVTaG9ydGN1dHNCeUtleXMiLCJfZ2V0Q29udGV4dE5hbWUiLCJfbWFuYWdlciRnZXRDb250ZXh0IiwiX2RlZmF1bHRTaG9ydGN1dHNMaXN0IiwiZ2V0Q3VzdG9tU2hvcnRjdXRzIiwic2VwYXJhdG9yIiwic2hpZnRTZXBhcmF0b3JzIiwicG9wU2VwYXJhdG9ycyIsInJlbW92ZUR1cGxpY2F0ZWRTZXBhcmF0b3JzIiwiaXRlbVRvVGVzdCIsIktFWSIsInN0YXRlQmVmb3JlIiwiZ2V0QWxpZ25tZW50Q2xhc3NlcyIsImFsaWduIiwiX3NlcGFyYXRvciIsImxhdGVzdFNlbGVjdGlvbiIsImFsdGVyQWN0aW9uIiwiaXRlbUZhY3RvcnkiLCJfYWxpZ25tZW50IiwiX2NsZWFyQ29sdW1uIiwiQ0xFQVJfQ09MVU1OIiwiX2NvbHVtbkxlZnQiLCJfY29sdW1uUmlnaHQiLCJfcmVhZE9ubHkiLCJfcmVkbyIsIl9yZW1vdmVDb2x1bW4iLCJfcmVtb3ZlUm93IiwiX3Jvd0Fib3ZlIiwiX3Jvd0JlbG93IiwiX25vSXRlbXMiLCJfdW5kbyIsImF0TGVhc3RPbmVSZWFkT25seSIsInJlZG8iLCJpc1JlZG9BdmFpbGFibGUiLCJ0cmFuc2Zvcm1TZWxlY3Rpb25Ub0NvbHVtbkRpc3RhbmNlIiwidHJhbnNmb3JtU2VsZWN0aW9uVG9Sb3dEaXN0YW5jZSIsImlzVW5kb0F2YWlsYWJsZSIsImNlbGxEZXNjcmlwdG9yIiwicHJvcGVydHlTZXR0ZXIiLCJwcmVwYXJlVmVydGljYWxBbGlnbkNsYXNzIiwicHJlcGFyZUhvcml6b250YWxBbGlnbkNsYXNzIiwiYXBwbHlBbGlnbkNsYXNzTmFtZSIsImNvbXBhcmF0b3IiLCJjbGFzc2VzIiwiYmFzZURvY3VtZW50IiwiY29weVBhc3RlUGx1Z2luIiwiY29weUNlbGxzT25seSIsIm5vdW5Gb3JtIiwiY29weUNvbHVtbkhlYWRlcnNPbmx5IiwiY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzIiwiY29weVdpdGhDb2x1bW5IZWFkZXJzIiwiY3V0IiwiX2NvcHkiLCJfY29weUNvbHVtbkhlYWRlcnNPbmx5IiwiX2NvcHlXaXRoQ29sdW1uR3JvdXBIZWFkZXJzIiwiX2NvcHlXaXRoQ29sdW1uSGVhZGVycyIsIl9jdXQiLCJfcGFzdGVFdmVudCIsIl9jb3B5YWJsZVJhbmdlcyIsIk1FVEFfSEVBRCIsIl9lbmFibGVDb3B5Q29sdW1uSGVhZGVycyIsIl9lbmFibGVDb3B5Q29sdW1uR3JvdXBIZWFkZXJzIiwiX2VuYWJsZUNvcHlDb2x1bW5IZWFkZXJzT25seSIsIl9jb3B5TW9kZSIsIl9pc1RyaWdnZXJlZEJ5Q29weSIsIl9pc1RyaWdnZXJlZEJ5Q3V0IiwiX2NvcHlhYmxlUmFuZ2VzRmFjdG9yeSIsIl9wcmV2ZW50Vmlld3BvcnRTY3JvbGxPblBhc3RlIiwiX0NvcHlQYXN0ZV9icmFuZCIsIkNvcHlQYXN0ZSIsIkNvcHlhYmxlUmFuZ2VzRmFjdG9yeSIsImNvdW50Q29sdW1ucyIsImNvbHVtbnNMaW1pdCIsImNvdW50Q29sdW1uSGVhZGVycyIsIl9zZXR0aW5ncyRwYXN0ZU1vZGUiLCJfc2V0dGluZ3MkdWlDb250YWluZXIiLCJwYXN0ZU1vZGUiLCJjb3B5Q29sdW1uSGVhZGVycyIsImNvcHlDb2x1bW5Hcm91cEhlYWRlcnMiLCJfb25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLCJfb25BZnRlclNlbGVjdGlvbiIsIl9vbkFmdGVyU2VsZWN0aW9uRW5kIiwib25Db3B5Iiwib25DdXQiLCJvblBhc3RlIiwiX29uU2FmYXJpTW91c2VFbnRlciIsIl9vblNhZmFyaU1vdXNlTGVhdmUiLCJfb25TYWZhcmlBZnRlclNlbGVjdGlvbiIsIl9lbnN1cmVDbGlwYm9hcmRFdmVudHNHZXRUcmlnZ2VyZWQiLCJnZXRSYW5nZWRDb3B5YWJsZURhdGEiLCJnZXRSYW5nZWREYXRhIiwibm9ybWFsaXplUmFuZ2VzIiwicGFzdGUiLCJwYXN0YWJsZVRleHQiLCJwYXN0YWJsZUh0bWwiLCJwYXN0ZURhdGEiLCJjbGlwYm9hcmREYXRhIiwic2V0Q29weWFibGVUZXh0Iiwic2V0U2VsZWN0ZWRSYW5nZSIsImdyb3VwZWRSYW5nZXMiLCJnZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlIiwiZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlIiwiZ2V0Q2VsbHNSYW5nZSIsImNlbGxzUmFuZ2UiLCJpc1JhbmdlVHJpbW1lZCIsIl90aGlzJGhvdCRnZXRBY3RpdmVFZCIsInBvcHVsYXRlVmFsdWVzIiwiaW5wdXRBcnJheSIsInBvcHVsYXRlZFJvd3NMZW5ndGgiLCJwb3B1bGF0ZWRDb2x1bW5zTGVuZ3RoIiwibmV3Um93cyIsImVuZFJvd0Zyb21TZWxlY3Rpb24iLCJlbmRDb2x1bW5Gcm9tU2VsZWN0aW9uIiwidmlzdWFsUm93Rm9yUG9wdWxhdGVkRGF0YSIsInZpc3VhbENvbHVtbkZvclBvcHVsYXRlZERhdGEiLCJsYXN0VmlzdWFsUm93IiwibGFzdFZpc3VhbENvbHVtbiIsIm5ld1JvdyIsImluc2VydGVkUm93IiwiaW5zZXJ0ZWRDb2x1bW4iLCJjb3BpZWRIZWFkZXJzQ291bnQiLCJfY291bnRDb3BpZWRIZWFkZXJzIiwidGV4dFBsYWluIiwidGV4dEhUTUwiLCJfZGF0YVRvSFRNTCIsIkNsaXBib2FyZEV2ZW50IiwicmFuZ2VkRGF0YSIsInBhc3RlZERhdGEiLCJodG1sVG9HcmlkU2V0dGluZ3MiLCJsYXN0U2VsZWN0ZWRSYW5nZSIsImhpZ2hsaWdodFJvdyIsImhpZ2hsaWdodENvbHVtbiIsImN1cnJlbnRseVNlbGVjdGVkQ2VsbCIsIl9hZGRDb250ZW50RWRpdGFibGVUb0hpZ2hsaWdodGVkQ2VsbCIsIl9yZW1vdmVDb250ZW50RWRpdGFibGVGcm9tSGlnaGxpZ2h0ZWRDZWxsIiwibWluUm93IiwibWF4Um93IiwibWluQ29sdW1uIiwibWF4Q29sdW1uIiwiX3NlbGVjdGVkUmFuZ2UiLCJfY291bnRSb3dzIiwiX2NvdW50Q29sdW1ucyIsIl9yb3dzTGltaXQiLCJfY29sdW1uc0xpbWl0IiwiX2NvdW50Q29sdW1uSGVhZGVycyIsIl9Db3B5YWJsZVJhbmdlc0ZhY3RvcnlfYnJhbmQiLCJfdHJpbUNvbHVtbnNSYW5nZSIsIl90cmltUm93c1JhbmdlIiwiZmluYWxFbmRSb3ciLCJmaW5hbEVuZENvbCIsIl9jb3B5UGFzdGUiLCJfY2xpcGJvYXJkRGF0YSIsImN1c3RvbUJvcmRlcnNQbHVnaW4iLCJjaGVja1NlbGVjdGlvbkJvcmRlcnMiLCJtYXJrU2VsZWN0ZWQiLCJoYXNCb3JkZXIiLCJwcmVwYXJlQm9yZGVyIiwiX2xlZnQiLCJfbm9Cb3JkZXJzIiwibm9Cb3JkZXJzIiwiX3JpZ2h0IiwiYm9yZGVyRGlyZWN0aW9uIiwiX2NvbnRleHRNZW51SXRlbSIsIl9DdXN0b21Cb3JkZXJzX2JyYW5kIiwiQ3VzdG9tQm9yZGVycyIsImhpZGVCb3JkZXJzIiwiY2hhbmdlQm9yZGVyU2V0dGluZ3MiLCJzZXRCb3JkZXJzIiwic2VsZWN0aW9uUmFuZ2VzIiwiYm9yZGVyT2JqZWN0IiwiYm9yZGVyS2V5cyIsIm5vcm1Cb3JkZXIiLCJjaGVja1NldHRpbmdzQ29oZXNpb24iLCJub3JtYWxpemVCb3JkZXIiLCJkZXRlY3RTZWxlY3Rpb25UeXBlIiwic2VsZWN0aW9uU2NoZW1hTm9ybWFsaXplciIsIm5vcm1hbGl6ZVNlbGVjdGlvbkZhY3RvcnkiLCJib3JkZXJLZXkiLCJwcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkIiwidG9JbmxpbmVQcm9wTmFtZSIsImdldEJvcmRlcnMiLCJzYXZlZEJvcmRlcnMiLCJzZWxlY3RlZEJvcmRlcnMiLCJkZW5vcm1hbGl6ZUJvcmRlciIsImNsZWFyQm9yZGVycyIsImNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyIsImNsZWFyTnVsbENlbGxSYW5nZSIsImluc2VydEJvcmRlckludG9TZXR0aW5ncyIsImNoZWNrU2F2ZWRCb3JkZXJzIiwidmlzdWFsQ2VsbFJhbmdlIiwiY2hlY2tDdXN0b21TZWxlY3Rpb25zIiwiYWRkQ3VzdG9tU2VsZWN0aW9uIiwiYm9yZGVyRGVzY3JpcHRvciIsImNyZWF0ZUVtcHR5Qm9yZGVycyIsImV4dGVuZERlZmF1bHRCb3JkZXIiLCJjdXN0b21TZWxlY3Rpb25zIiwiY3VzdG9tU2VsZWN0aW9uIiwicHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlIiwiY3VzdG9tQm9yZGVyIiwicmVtb3ZlQWxsQm9yZGVycyIsImNyZWF0ZUlkIiwic3BsaWNlQm9yZGVyIiwic2V0Qm9yZGVyIiwiYm9yZGVyc01ldGEiLCJjcmVhdGVTaW5nbGVFbXB0eUJvcmRlciIsImNvdW50SGlkZSIsImNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudSIsImNyZWF0ZURlZmF1bHRDdXN0b21Cb3JkZXIiLCJ0b3BDb2wiLCJib3R0b21Db2wiLCJjcmVhdGVDdXN0b21Cb3JkZXJzIiwibm9ybUN1c3RvbUJvcmRlciIsInNhdmVkQm9yZGVyIiwiaGlkZUNvdW50IiwiYm9yZGVyc0Nsb25lIiwiaGFzTGVmdE9yUmlnaHQiLCJoYXNMZWZ0UmlnaHRUeXBlT3B0aW9ucyIsImhhc1N0YXJ0T3JFbmQiLCJoYXNTdGFydEVuZFR5cGVPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJfY3VzdG9tQm9yZGVycyIsImF0TGVhc3RPbmVIYXNCb3JkZXIiLCJtZXRhQm9yZGVycyIsImNyZWF0ZURlZmF1bHRIdEJvcmRlciIsImRlZmF1bHRCb3JkZXIiLCJfYm9yZGVyJHN0YXJ0IiwiX2JvcmRlciRlbmQiLCJfcGh5c2ljYWxUb0lubGluZVByb3AiLCJwaHlzaWNhbFRvSW5saW5lUHJvcE5hbWVzIiwiX0RyYWdUb1Njcm9sbF9icmFuZCIsIkRyYWdUb1Njcm9sbCIsIl9zZXR1cExpc3RlbmluZyIsInVucmVnaXN0ZXJFdmVudHMiLCJzZXRCb3VuZGFyaWVzIiwiYm91bmRhcmllcyIsInNldENhbGxiYWNrIiwiZGlmZlgiLCJkaWZmWSIsImxpc3RlbmluZyIsInNjcm9sbEhhbmRsZXIiLCJfc2Nyb2xsSGFuZGxlciRzY3JvbGwiLCJfc2Nyb2xsSGFuZGxlciRzY3JvbGwyIiwiaG9yaXpvbnRhbFNjcm9sbFZhbHVlIiwidmVydGljYWxTY3JvbGxWYWx1ZSIsInNjcm9sbCIsIl9kcmFnVG9TY3JvbGwiLCJCVVRUT05fQ0xBU1NfTkFNRSIsIl9pc0J1dHRvbkNsaWNrZWQiLCJfRHJvcGRvd25NZW51X2JyYW5kIiwiRHJvcGRvd25NZW51IiwiX29uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLCJzdWJNZW51SW5zdGFuY2UiLCJfb25TdWJNZW51QWZ0ZXJPcGVuIiwiY2FwdHVyZUN0cmwiLCJfb25UYWJsZUNsaWNrIiwic2V0TGlzdGVuaW5nIiwiX2FkZEN1c3RvbVNob3J0Y3V0cyIsIm1lbnVJbnN0YW5jZSIsImhlYWRlclJvd0xpc3QiLCJleGlzdGluZ0J1dHRvbiIsIm9uY2xpY2siLCJfZHJvcGRvd25NZW51Iiwic2V0T3B0aW9ucyIsIl9nZXREYXRhUmFuZ2UiLCJfaXNIaWRkZW5Sb3ciLCJfaXNIaWRkZW5Db2x1bW4iLCJfZGF0YVByb3ZpZGVyIiwiX3R5cGVGYWN0b3J5IiwiRXhwb3J0RmlsZSIsImV4cG9ydEFzU3RyaW5nIiwiX2NyZWF0ZVR5cGVGb3JtYXR0ZXIiLCJleHBvcnQiLCJleHBvcnRBc0Jsb2IiLCJfY3JlYXRlQmxvYiIsIkVYUE9SVF9UWVBFUyIsInR5cGVGb3JtYXR0ZXIiLCJfZXhwb3J0RmlsZSIsImRhdGFQcm92aWRlciIsIlRZUEVfQ1NWIiwiVFlQRV9FWENFTCIsIlRZUEVfUERGIiwiQmFzZVR5cGUiLCJERUZBVUxUX09QVElPTlMiLCJfbWVyZ2VPcHRpb25zIiwiQ0hBUl9DQVJSSUFHRV9SRVRVUk4iLCJDSEFSX0RPVUJMRV9RVU9URVMiLCJDSEFSX0xJTkVfRkVFRCIsIkNzdiIsIl9lc2NhcGVDZWxsIiwiZXNjYXBlZFZhbHVlIiwiQmFzZUNvbXBvbmVudCIsInN0YXRlbGVzcyIsInN0YXRlSWQiLCJnZXRFbGVtZW50cyIsInVpIiwicmVzdG9yZVN0YXRlIiwic2V0U3RhdGUiLCJzYXZlU3RhdGUiLCJnZXRTdGF0ZSIsIl9BY3Rpb25CYXJDb21wb25lbnQiLCJfaW5wdXQiLCJfQWN0aW9uQmFyQ29tcG9uZW50X2JyYW5kIiwiQWN0aW9uQmFyQ29tcG9uZW50IiwiQlVUVE9OX09LIiwiQlVUVE9OX0NBTkNFTCIsIklucHV0VUkiLCJfb25CdXR0b25DbGljayIsImdldE1lbnVJdGVtRGVzY3JpcHRvciIsImRpc2FibGVTZWxlY3Rpb24iLCJjYW5jZWwiLCJfc2VsZWN0IiwiX2NvbmRpdGlvblJlZ2lzdGVyZXIiLCJfQ29uZGl0aW9uQ29tcG9uZW50X2JyYW5kIiwiQ29uZGl0aW9uQ29tcG9uZW50IiwiYWRkU2VwYXJhdG9yIiwiU2VsZWN0VUkiLCJtZW51Q29udGFpbmVyIiwiZ2V0U2VsZWN0RWxlbWVudCIsIl9vbkNvbmRpdGlvblNlbGVjdCIsImdldElucHV0RWxlbWVudHMiLCJfb25JbnB1dEtleURvd24iLCJjb3B5T2ZDb21tYW5kIiwiaW5wdXRzQ291bnQiLCJnZXRDb25kaXRpb25EZXNjcmlwdG9yIiwiQ09ORElUSU9OX05PTkUiLCJ1cGRhdGVTdGF0ZSIsInNlbGVjdGVkQ29sdW1uIiwiZ2V0U2VsZWN0ZWRDb2x1bW4iLCJzZXRJdGVtcyIsIl9sb2dpY2FsT3BlcmF0aW9uUmVnaXN0ZXJlciIsIl9jb25qdW5jdGlvbiIsIl9kaXNqdW5jdGlvbiIsIl9kaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiIsIl9yYWRpb0lucHV0IiwiX09wZXJhdG9yc0NvbXBvbmVudF9icmFuZCIsIk9wZXJhdG9yc0NvbXBvbmVudCIsImJ1aWxkT3BlcmF0b3JzRWxlbWVudCIsIm9wZXJhdGlvbktleXMiLCJPUEVSQVRJT05fSUQiLCJvcGVyYXRpb24iLCJyYWRpb0lucHV0IiwiUmFkaW9JbnB1dFVJIiwiaHRtbEZvciIsImdldE9wZXJhdGlvbk5hbWUiLCJjaGVja2VkIiwiX29uUmFkaW9JbnB1dENoYW5nZSIsInNldENoZWNrZWQiLCJzZWFyY2hlZEluZGV4IiwiZ2V0QWN0aXZlT3BlcmF0aW9uSWQiLCJvcGVyYXRpb25FbGVtZW50IiwiaXNDaGVja2VkIiwib3BlcmF0aW9uSWQiLCJzZWxlY3RlZE9wZXJhdGlvbklkIiwiX211bHRpcGxlU2VsZWN0IiwiX1ZhbHVlQ29tcG9uZW50X2JyYW5kIiwiVmFsdWVDb21wb25lbnQiLCJNdWx0aXBsZVNlbGVjdFVJIiwiZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50IiwiX29uTW9kaWZ5RGlzcGxheWVkVmFsdWUiLCJzZWxlY3RFbGVtZW50IiwiZ2V0U2VhcmNoSW5wdXRFbGVtZW50IiwiZ2V0U2VsZWN0QWxsRWxlbWVudCIsImdldENsZWFyQWxsRWxlbWVudCIsIkNPTkRJVElPTl9CWV9WQUxVRSIsIml0ZW1zU25hcHNob3QiLCJzZXRMb2NhbGUiLCJhdmFpbGFibGVJdGVtcyIsImlzU2VsZWN0ZWRBbGxWYWx1ZXMiLCJzdGF0ZUluZm8iLCJ1cGRhdGVDb2x1bW5TdGF0ZSIsImNvbmRpdGlvbnMiLCJjb25kaXRpb25BcmdzQ2hhbmdlIiwiZmlsdGVyZWRSb3dzRmFjdG9yeSIsImNvbmRpdGlvbnNTdGFjayIsImZpcnN0QnlWYWx1ZUNvbmRpdGlvbiIsImRlZmF1bHRCbGFua0NlbGxWYWx1ZSIsImZpbHRlcmVkUm93cyIsInJvd1ZhbHVlcyIsInJvd01ldGFNYXAiLCJ1bmlmaWVkUm93VmFsdWVzIiwidW5pZnlDb2x1bW5WYWx1ZXMiLCJzZWxlY3RlZFZhbHVlcyIsImludGVyc2VjdFZhbHVlcyIsIl90cmlnZ2VyTW9kaWZ5TXVsdGlwbGVTZWxlY3Rpb25WYWx1ZUhvb2siLCJlZGl0ZWRDb25kaXRpb25TdGFjayIsImRlcGVuZGVudENvbmRpdGlvblN0YWNrcyIsInJvd0VudHJpZXMiLCJfZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcyIsInRvRW1wdHlTdHJpbmciLCJtZXRhTWFwIiwidmlzdWFsVmFsdWUiLCJnZXRSZW5kZXJlZFZhbHVlIiwiQ09ORElUSU9OX05BTUUiLCJyZWdpc3RlckNvbmRpdGlvbiIsInNob3dPcGVyYXRvcnMiLCJfYWZ0ZXIiLCJfYmVmb3JlIiwiX2Zyb20iLCJfdG8iLCJkYXRlQmVmb3JlIiwiZ2V0Q29uZGl0aW9uIiwiZGF0ZUFmdGVyIiwiaW5wdXRWYWx1ZXNEZWNvcmF0b3IiLCJjcmVhdGVBcnJheUFzc2VydGlvbiIsImlucHV0RGF0ZSIsImVuZHNXaXRoIiwiY29uZGl0aW9uVmFsdWUiLCJfYmV0d2VlbiIsImlucHV0VmFsdWVzIiwiX2NvbnRhaW5zIiwiX2VtcHR5IiwiX2VxdWFsIiwiTUFQX05BTUUiLCJDb25kaXRpb25Db2xsZWN0aW9uIiwiaXNNYXBSZWdpc3RyYWJsZSIsImZpbHRlcmluZ1N0YXRlcyIsImdldEZpbHRlcmVkQ29sdW1ucyIsImlzTWF0Y2giLCJfc3RhdGVGb3JDb2x1bW4kY29uZGkiLCJzdGF0ZUZvckNvbHVtbiIsImlzTWF0Y2hJbkNvbmRpdGlvbnMiLCJvcGVyYXRpb25UeXBlIiwiZ2V0T3BlcmF0aW9uRnVuYyIsImFkZENvbmRpdGlvbiIsImNvbmRpdGlvbkRlZmluaXRpb24iLCJsb2NhbGVGb3JDb2x1bW4iLCJjb2x1bW5UeXBlIiwiZ2V0T3BlcmF0aW9uIiwib3BlcmF0aW9ucyIsImNvbmRpdGlvbnNGb3JDb2x1bW4iLCJnZXRDb25kaXRpb25zIiwiX3RoaXMkZmlsdGVyaW5nU3RhdGVzIiwiX3RoaXMkZmlsdGVyaW5nU3RhdGVzMiIsIl90aGlzJGZpbHRlcmluZ1N0YXRlczMiLCJnZXRDb2x1bW5TdGFja1Bvc2l0aW9uIiwiZXhwb3J0QWxsQ29uZGl0aW9ucyIsImFsbENvbmRpdGlvbnMiLCJpbXBvcnRBbGxDb25kaXRpb25zIiwicmVtb3ZlQ29uZGl0aW9ucyIsImNsZWFyVmFsdWUiLCJoYXNDb25kaXRpb25zIiwiY29uZGl0aW9uQXJndW1lbnRzIiwiX2NvbmRpdGlvbkNvbGxlY3Rpb24iLCJfZGF0YUZpbHRlciIsIl9Db25kaXRpb25VcGRhdGVPYnNlcnZlcl9icmFuZCIsIkNvbmRpdGlvblVwZGF0ZU9ic2VydmVyIiwiY29uZGl0aW9uQ29sbGVjdGlvbiIsImNvbHVtbkRhdGFGYWN0b3J5IiwiX29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5IiwidXBkYXRlU3RhdGVzQXRDb2x1bW4iLCJfb25Db25kaXRpb25CZWZvcmVDbGVhbiIsIl9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4iLCJncm91cENoYW5nZXMiLCJncm91cGluZyIsImVkaXRlZENvbHVtblBvc2l0aW9uIiwibGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24iLCJjb25kaXRpb25zQmVmb3JlIiwiY29uZGl0aW9uc0FmdGVyIiwidmlzaWJsZURhdGFGYWN0b3J5IiwiY3VycmllZENvbmRpdGlvbnNCZWZvcmUiLCJjdXJyaWVkQ29sdW1uIiwic3BsaXRDb25kaXRpb25Db2xsZWN0aW9uIiwiY3VycmllZENvbmRpdGlvbnNCZWZvcmVBcnJheSIsImFsbFJvd3MiLCJ2aXNpYmxlUm93c0Fzc2VydGlvbiIsImVkaXRlZENvbmRpdGlvbnMiLCJsYXRlc3RPcmRlclN0YWNrIiwidHlwZU5hbWUiLCJUWVBFUyIsIlRZUEVfVEVYVCIsInR5cGVWYWx1ZSIsIm9wdGlvbiIsIl9ub25lIiwiQ09ORElUSU9OX0VNUFRZIiwiX25vdEVtcHR5IiwiQ09ORElUSU9OX05PVF9FTVBUWSIsIkNPTkRJVElPTl9FUVVBTCIsIl9ub3RFcXVhbCIsIkNPTkRJVElPTl9OT1RfRVFVQUwiLCJfZ3JlYXRlclRoYW4iLCJDT05ESVRJT05fR1JFQVRFUl9USEFOIiwiX2dyZWF0ZXJUaGFuT3JFcXVhbCIsIkNPTkRJVElPTl9HUkVBVEVSX1RIQU5fT1JfRVFVQUwiLCJfbGVzc1RoYW4iLCJDT05ESVRJT05fTEVTU19USEFOIiwiX2xlc3NUaGFuT3JFcXVhbCIsIkNPTkRJVElPTl9MRVNTX1RIQU5fT1JfRVFVQUwiLCJDT05ESVRJT05fQkVUV0VFTiIsIl9ub3RCZXR3ZWVuIiwiQ09ORElUSU9OX05PVF9CRVRXRUVOIiwiX2JlZ2luc1dpdGgiLCJDT05ESVRJT05fQkVHSU5TX1dJVEgiLCJfZW5kc1dpdGgiLCJDT05ESVRJT05fRU5EU19XSVRIIiwiQ09ORElUSU9OX0NPTlRBSU5TIiwiX25vdENvbnRhaW5zIiwiQ09ORElUSU9OX05PVF9DT05UQUlOUyIsIkNPTkRJVElPTl9EQVRFX0JFRk9SRSIsIkNPTkRJVElPTl9EQVRFX0FGVEVSIiwiX3RvbW9ycm93IiwiQ09ORElUSU9OX1RPTU9SUk9XIiwiX3RvZGF5IiwiQ09ORElUSU9OX1RPREFZIiwiX3llc3RlcmRheSIsIkNPTkRJVElPTl9ZRVNURVJEQVkiLCJfYnlWYWx1ZSIsIl90cnVlIiwiQ09ORElUSU9OX1RSVUUiLCJfZmFsc2UiLCJDT05ESVRJT05fRkFMU0UiLCJPUEVSQVRJT05fQU5EIiwiT1BFUkFUSU9OX09SIiwiT1BFUkFUSU9OX09SX1RIRU5fVkFSSUFCTEUiLCJUWVBFX05VTUVSSUMiLCJUWVBFX0RBVEUiLCJmaWx0ZXJlZERhdGEiLCJfZ2V0SW50ZXJzZWN0RGF0YSIsImZpbHRlckJ5Q29sdW1uIiwibmVlZGxlcyIsIm5lZWRsZVJvdyIsIl9jb25kaXRpb24iLCJfb3BlcmF0b3JzIiwiX2FjdGlvbkJhciIsIl9jb25kaXRpb25VcGRhdGVPYnNlcnZlciIsIl9mb2N1c0NvbnRyb2xsZXIiLCJfbWVudUZvY3VzTmF2aWdhdG9yIiwiX0ZpbHRlcnNfYnJhbmQiLCJGaWx0ZXJzIiwiZmlsdGVyc1Jvd3NNYXAiLCJUcmltbWluZ01hcCIsImRyb3Bkb3duTWVudVBsdWdpbiIsImRyb3Bkb3duU2V0dGluZ3MiLCJhZGRDb25maXJtYXRpb25Ib29rcyIsImNvbXBvbmVudCIsIl9vbkFjdGlvbkJhclN1Ym1pdCIsIl9vbkNvbXBvbmVudENoYW5nZSIsImZpbHRlckJ5Q29uZGl0aW9uTGFiZWwiLCJjb21wb25lbnRzIiwiY29uZGl0aW9uQ29tcG9uZW50IiwiX29uU2VsZWN0VUlDbG9zZWQiLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsImdldERhdGFNYXBBdENvbHVtbiIsImNvbmRpdGlvblN0YXRlIiwiX3VwZGF0ZUNvbXBvbmVudHMiLCJfb25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiX29uQWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwiX29uQWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwibWFpbk1lbnUiLCJmb2N1c2FibGVJdGVtcyIsIm1lbnVOYXZpZ2F0b3IiLCJsYXN0U2VsZWN0ZWRNZW51SXRlbSIsImdldExhc3RNZW51UGFnZSIsImNyZWF0ZU1lbnVGb2N1c0NvbnRyb2xsZXIiLCJmb3J3YXJkVG9Gb2N1c05hdmlnYXRpb24iLCJfdGhpcyRkcm9wZG93bk1lbnVQbHUiLCJjbGVhckNvbmRpdGlvbnMiLCJkYXRhRmlsdGVyIiwiX2NyZWF0ZURhdGFGaWx0ZXIiLCJuZWVkVG9GaWx0ZXIiLCJ2aXNpYmxlVmlzdWFsUm93cyIsInRyaW1tZWRSb3dzIiwidmlzaWJsZVZpc3VhbFJvd3NBc3NlcnRpb24iLCJfdGhpcyRob3QkZ2V0RGF0YUF0Q2UiLCJkYXRhVmFsdWUiLCJ1cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbiIsImRhdGFBdENvbCIsInJlc3RvcmVDb21wb25lbnRzIiwiX3RoaXMkZ2V0U2VsZWN0ZWRDb2x1IiwidXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkiLCJnZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzIiwic3VnZ2VzdGVkT3BlcmF0aW9uIiwiYnlDb25kaXRpb25TdGF0ZTEiLCJieUNvbmRpdGlvblN0YXRlMiIsImJ5VmFsdWVTdGF0ZSIsInNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSIsImNvbXBvbmVudHNUb1Nob3ciLCJzaG93Q29tcG9uZW50cyIsImhpZGVDb21wb25lbnRzIiwiZ2V0SW5kZXhlc09mQ29tcG9uZW50cyIsImNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5IiwidmlzaWJsZSIsInNob3dSb3dzIiwiaGlkZVJvd3MiLCJjbG9zZU9wdGlvbnMiLCJzdWJtaXRUeXBlIiwiX3RoaXMkZHJvcGRvd25NZW51UGx1MyIsIl90aGlzJGRyb3Bkb3duTWVudVBsdTIiLCJjb2x1bW5TdGFja1Bvc2l0aW9uIiwiY29uZGl0aW9uc1N0YXRlIiwiX3RoaXMkZHJvcGRvd25NZW51UGx1NCIsImNvbmRpdGlvbnNCeVZhbHVlIiwiY29uZGl0aW9uc1dpdGhvdXRCeVZhbHVlIiwiX2ZpbHRlcnMiLCJyZWdpc3Rlck9wZXJhdGlvbiIsIm9wZXJhdGlvblJlc3VsdCIsIlNIT1JUX05BTUVfRk9SX0NPTVBPTkVOVCIsImZvY3VzTmF2aWdhdG9yIiwiX2ZvY3VzTmF2aWdhdG9yIiwiY3JlYXRlRm9jdXNOYXZpZ2F0b3IiLCJ1cGRhdGVOYXZpZ2F0b3JQb3NpdGlvbiIsIlNIT1JUQ1VUU19NRU5VX0NPTlRFWFQiLCJhZGRLZXlib2FyZFNob3J0Y3V0cyIsIm1haW5NZW51U2hvcnRjdXRzQ3RybCIsImN1cnJlbnRNZW51U2hvcnRjdXRzQ3RybCIsImdldEN1cnJlbnRQYWdlIiwib3Blbk9wdGlvbnMiLCJfbGluayIsIkxpbmtVSSIsIkJhc2VVSSIsImluaXRpYWxQYWdlIiwiU1RBVEVfQlVJTFQiLCJTVEFURV9CVUlMRElORyIsIkVWRU5UU19UT19SRUdJU1RFUiIsIkRFRkFVTFRTIiwid3JhcEl0IiwiYnVpbGRTdGF0ZSIsImJ1aWxkIiwiaXNCdWlsdCIsInRyYW5zbGF0ZUlmUG9zc2libGUiLCJyZWdpc3RlckV2ZW50Iiwicm9sZSIsIl9JbnB1dFVJX2JyYW5kIiwiX29uS2V5dXAiLCJpY29uIiwiX2l0ZW1zIiwiX2l0ZW1zQm94IiwiX2xvY2FsZSIsIl9zZWFyY2hJbnB1dCIsIl9zZWxlY3RBbGxVSSIsIl9jbGVhckFsbFVJIiwiX011bHRpcGxlU2VsZWN0VUlfYnJhbmQiLCJnZXRJdGVtc0JveCIsIl9vbklucHV0IiwiX29uU2VsZWN0QWxsQ2xpY2siLCJfb25DbGVhckFsbENsaWNrIiwiZ2V0TG9jYWxlIiwiaXRlbXNUb1ZhbHVlIiwiaXRlbXNCb3hXcmFwcGVyIiwic2VsZWN0aW9uQ29udHJvbCIsImhvdEluaXRpYWxpemVyIiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlckxpc3RlbiIsImFycmF5QXNzZXJ0aW9uIiwidmFsdWVUb0l0ZW1zIiwiaXNLZXlDb2RlIiwiX2xhYmVsIiwiX21lbnUyIiwiX2NhcHRpb24iLCJfY2FwdGlvbkVsZW1lbnQiLCJfZHJvcGRvd24iLCJfU2VsZWN0VUlfYnJhbmQiLCJnZXRNZW51IiwiX29uQ2xpY2siLCJ0cmFuc2xhdGVOYW1lcyIsImNhcHRpb24iLCJkcm9wZG93biIsIl9vbk1lbnVTZWxlY3QiLCJfb25NZW51Q2xvc2VkIiwiY29uZGl0aW9uTmFtZSIsImRlZmF1bHRFbXB0eVZhbHVlIiwic2FtZSIsInNlbGVjdGVkSXRlbXNBc3NlcnRpb24iLCJ0b1Zpc3VhbFZhbHVlIiwic29ydENvbXBhcmlzb24iLCJzb3J0Q29tcGFyZSIsInVuaWZpZWRWYWx1ZXMiLCJTVVBQT1JUX0ZBU1RfREVEVVBFIiwiU1VQUE9SVF9TRVRfQ09OU1RSVUNUT1IiLCJpbml0aWFsRGF0YSIsImRhdGFzZXQiLCJnZXRSZWdpc3RlcmVkSG90SW5zdGFuY2VzIiwiZW5naW5lIiwiX2VuZ2luZVJlZ2lzdHJ5JGdldCIsImVuZ2luZVJlZ2lzdHJ5IiwiZ2V0RW5naW5lUmVsYXRpb25zaGlwUmVnaXN0cnkiLCJob3RJbnN0YW5jZXMiLCJyZWdpc3RlckN1c3RvbUZ1bmN0aW9ucyIsInJlZ2lzdGVyRW5naW5lIiwicmVnaXN0ZXJMYW5ndWFnZSIsInJlZ2lzdGVyTmFtZWRFeHByZXNzaW9ucyIsInNldHVwRW5naW5lIiwiX2Zvcm11bGFzIiwiZW5naW5lQ29uZmlnSXRlbSIsIl9lbmdpbmVDb25maWdJdGVtJGh5cCIsImh5cGVyZm9ybXVsYSIsImVuZ2luZVJlbGF0aW9uc2hpcCIsInNoYXJlZEVuZ2luZVVzYWdlIiwiZ2V0U2hhcmVkRW5naW5lVXNhZ2VSZWdpc3RyeSIsImdldENvbmZpZyIsInVwZGF0ZUNvbmZpZyIsIkRFRkFVTFRfTElDRU5TRV9LRVkiLCJsZWFwWWVhcjE5MDAiLCJERUZBVUxUX1NFVFRJTkdTIiwibnVsbERhdGUiLCJzZXR1cFNoZWV0IiwiZW5naW5lSW5zdGFuY2UiLCJkb2VzU2hlZXRFeGlzdCIsImFkZFNoZWV0IiwidW5yZWdpc3RlckVuZ2luZSIsImVuZ2luZUhvdFJlbGF0aW9uc2hpcCIsInNoYXJlZEVuZ2luZVJlZ2lzdHJ5IiwicmVnaXN0cnlLZXkiLCJwbHVnaW5TdGF0aWNSZWdpc3RyeSIsImVuZ2luZUNsYXNzIiwiZW5naW5lU2V0dGluZ3MiLCJnZXRFbmdpbmVTZXR0aW5nc1dpdGhEZWZhdWx0c0FuZE92ZXJyaWRlcyIsImJ1aWxkRW1wdHkiLCJuYW1lZEV4cHJlc3Npb25zIiwicmVidWlsZEFuZFJlY2FsY3VsYXRlIiwiY3VzdG9tRnVuY3Rpb25zIiwidHJhbnNsYXRpb25zIiwicmVnaXN0ZXJGdW5jdGlvbiIsImxhbmd1YWdlU2V0dGluZyIsImxhbmdDb2RlIiwic3VzcGVuZEV2YWx1YXRpb24iLCJuYW1lZEV4cCIsInNjb3BlIiwiYWRkTmFtZWRFeHByZXNzaW9uIiwicmVzdW1lRXZhbHVhdGlvbiIsImdldEVuZ2luZVNldHRpbmdzT3ZlcnJpZGVzIiwiX3BsdWdpblNldHRpbmdzJGVuZ2luIiwiY2xlYW5FbmdpbmVTZXR0aW5ncyIsIm92ZXJyaWRlcyIsImdldEVuZ2luZVNldHRpbmdzV2l0aE92ZXJyaWRlcyIsIl9wbHVnaW5TZXR0aW5ncyRlbmdpbjIiLCJoYXZlRW5naW5lU2V0dGluZ3NDaGFuZ2VkIiwiY3VycmVudEVuZ2luZVNldHRpbmdzIiwibmV3RW5naW5lU2V0dGluZ3MiLCJzZXR0aW5nT3B0aW9uIiwidXNlQXJyYXlBcml0aG1ldGljIiwidXNlQ29sdW1uSW5kZXgiLCJ1c2VTdGF0cyIsImV2YWx1YXRlTnVsbFRvWmVybyIsInByZWNpc2lvbkVwc2lsb24iLCJwcmVjaXNpb25Sb3VuZGluZyIsInNtYXJ0Um91bmRpbmciLCJudWxsWWVhciIsInRpbWVGb3JtYXRzIiwibWF0Y2hXaG9sZUNlbGwiLCJ1c2VSZWd1bGFyRXhwcmVzc2lvbnMiLCJ1c2VXaWxkY2FyZHMiLCJmdW5jdGlvbkFyZ1NlcGFyYXRvciIsInRob3VzYW5kU2VwYXJhdG9yIiwiZGVjaW1hbFNlcGFyYXRvciIsIl9ob3RTZXR0aW5ncyRQTFVHSU5fSyIsIm1heENvbHVtbnMiLCJfaW5kZXhTeW5jZXIiLCJpc0Jsb2NrZWRTb3VyY2UiLCJfaW50ZXJuYWxPcGVyYXRpb25QZW5kaW5nIiwiX2hvdFdhc0luaXRpYWxpemVkV2l0aEVtcHR5RGF0YSIsIl9lbmdpbmVMaXN0ZW5lcnMiLCJfRm9ybXVsYXNfYnJhbmQiLCJGb3JtdWxhcyIsIl9vbkVuZ2luZVZhbHVlc1VwZGF0ZWQiLCJfb25FbmdpbmVOYW1lZEV4cHJlc3Npb25zQWRkZWQiLCJfb25FbmdpbmVOYW1lZEV4cHJlc3Npb25zUmVtb3ZlZCIsIl9vbkVuZ2luZVNoZWV0QWRkZWQiLCJfb25FbmdpbmVTaGVldFJlbmFtZWQiLCJfb25FbmdpbmVTaGVldFJlbW92ZWQiLCJnZXRTaGVldElkIiwiX3NldHVwRW5naW5lIiwiX3RoaXMyIiwibmV3U2hlZXROYW1lIiwiX29uQmVmb3JlTG9hZERhdGEiLCJfb25Nb2RpZnlEYXRhIiwiX29uTW9kaWZ5U291cmNlRGF0YSIsIl9vbkJlZm9yZVZhbGlkYXRlIiwiX29uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiX29uQWZ0ZXJTZXREYXRhQXRDZWxsIiwiX29uQmVmb3JlQ3JlYXRlUm93IiwiX29uQmVmb3JlQ3JlYXRlQ29sIiwiX2xlbjE5IiwiX2tleTE5IiwiX29uQWZ0ZXJDcmVhdGVSb3ciLCJfbGVuMjAiLCJfa2V5MjAiLCJfb25BZnRlckNyZWF0ZUNvbCIsIl9sZW4yMSIsIl9rZXkyMSIsIl9vbkJlZm9yZVJlbW92ZVJvdyIsIl9sZW4yMiIsIl9rZXkyMiIsIl9vbkJlZm9yZVJlbW92ZUNvbCIsIl9sZW4yMyIsIl9rZXkyMyIsIl9vbkFmdGVyUmVtb3ZlUm93IiwiX2xlbjI0IiwiX2tleTI0IiwiX29uQWZ0ZXJSZW1vdmVDb2wiLCJpbmRleFN5bmNlciIsInBvc3Rwb25lZEFjdGlvbiIsInJvd0F4aXNTeW5jZXIiLCJnZXRGb3JBeGlzIiwiY29sdW1uQXhpc1N5bmNlciIsImdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kIiwibW92ZWRSb3dzIiwibW92ZVBvc3NpYmxlIiwic3RvcmVNb3Zlc0luZm9ybWF0aW9uIiwibW92ZWRDb2x1bW5zIiwiZHJvcEluZGV4Iiwib3JkZXJDaGFuZ2VkIiwiY2FsY3VsYXRlQW5kU3luY01vdmVzIiwiZnJlZXplUGVyZm9ybWVkIiwidW5mcmVlemVQZXJmb3JtZWQiLCJfbGVuMjUiLCJfa2V5MjUiLCJfb25BZnRlckNlbGxNZXRhUmVzZXQiLCJzZXRQZXJmb3JtVW5kbyIsInNldFBlcmZvcm1SZWRvIiwiX2xlbjI2IiwiX2tleTI2IiwiX29uQWZ0ZXJEZXRhY2hDaGlsZCIsIl9sZW4yNyIsIl9rZXkyNyIsIl9vbkJlZm9yZUF1dG9maWxsIiwic3dpdGNoU2hlZXQiLCJfdGhpcyRlbmdpbmUiLCJhY3R1YWxTaGVldE5hbWUiLCJzZXRTaGVldENvbnRlbnQiLCJzZXJpYWxpemVkIiwiZ2V0U2hlZXRTZXJpYWxpemVkIiwiZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCIsImlzRm9ybXVsYUNlbGxUeXBlIiwiZG9lc0NlbGxIYXZlRm9ybXVsYSIsInJlbmRlckRlcGVuZGVudFNoZWV0cyIsImRlcGVuZGVudENlbGxzIiwicmVuZGVyU2VsZiIsImFmZmVjdGVkU2hlZXRJZHMiLCJyZWxhdGVkSG90IiwiX3JlbGF0ZWRIb3QkdmlldyIsInZhbGlkYXRlRGVwZW5kZW50Q2VsbHMiLCJzdHJpbmdpZnlBZGRyZXNzIiwiX2NoYW5nZSRhZGRyZXNzMiIsImNoYW5nZWRDZWxsc1NldCIsIl9jaGFuZ2UkYWRkcmVzczMiLCJfY2hhbmdlJGFkZHJlc3M0IiwiYWRkcmVzc0lkIiwiYm91bmRIb3QiLCJzeW5jQ2hhbmdlV2l0aEVuZ2luZSIsImlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzIiwiaXNEYXRlVmFsaWQiLCJnZXREYXRlSW5IZkZvcm1hdCIsImlzRm9ybXVsYSIsInNldENlbGxDb250ZW50cyIsImdldERhdGVGcm9tRXhjZWxEYXRlIiwic291cmNlVG9wU3RhcnRSb3ciLCJzb3VyY2VUb3BTdGFydENvbHVtbiIsInNvdXJjZUJvdHRvbUVuZFJvdyIsInNvdXJjZUJvdHRvbUVuZENvbHVtbiIsInRhcmdldFRvcFN0YXJ0Um93IiwidGFyZ2V0VG9wU3RhcnRDb2x1bW4iLCJ0YXJnZXRCb3R0b21FbmRSb3ciLCJ0YXJnZXRCb3R0b21FbmRDb2x1bW4iLCJlbmdpbmVTb3VyY2VSYW5nZSIsImVuZ2luZVRhcmdldFJhbmdlIiwiZmlsbFJhbmdlRGF0YSIsImdldEZpbGxSYW5nZURhdGEiLCJzb3VyY2VTdGFydFJvdyIsInNvdXJjZVN0YXJ0Q29sdW1uIiwic291cmNlRW5kUm93Iiwic291cmNlRW5kQ29sdW1uIiwicG9wdWxhdGlvblJvd0xlbmd0aCIsInBvcHVsYXRpb25Db2x1bW5MZW5ndGgiLCJwb3B1bGF0ZWRSb3dJbmRleCIsInBvcHVsYXRlZENvbHVtbkluZGV4IiwicG9wdWxhdGVkVmFsdWUiLCJzb3VyY2VDZWxsTWV0YSIsImdldERhdGVJbkhvdEZvcm1hdCIsInNvdXJjZURhdGFBcnJheSIsInZhbHVlQ2hhbmdlZCIsImlzSXRQb3NzaWJsZVRvUmVwbGFjZVNoZWV0Q29udGVudCIsInNldHVwU3luY0VuZHBvaW50IiwiaW9Nb2RlIiwiaXNFc2NhcGVkRm9ybXVsYUV4cHJlc3Npb24iLCJ1bmVzY2FwZUZvcm11bGFFeHByZXNzaW9uIiwic2luZ2xlQ2VsbE1ldGEiLCJnZXRTaGVldERpbWVuc2lvbnMiLCJnZXRDZWxsU2VyaWFsaXplZCIsIm91dE9mQm91bmRzQ2hhbmdlcyIsImNoYW5nZWRDZWxscyIsIm91dE9mQm91bmRzRGVwZW5kZW50Q2VsbHMiLCJoZlJvd0luZGV4IiwiaXNJdFBvc3NpYmxlVG9BZGRSb3dzIiwiaGZDb2x1bW5JbmRleCIsImlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyIsInNldFJlbW92ZWRIZkluZGV4ZXMiLCJoZlJvdyIsImlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyIsInBoeXNpY2FsQ29sdW1ucyIsImhmQ29sdW1uIiwiaXNJdFBvc3NpYmxlVG9SZW1vdmVDb2x1bW5zIiwiYWRkQ29sdW1ucyIsImRlc2NlbmRpbmdIZlJvd3MiLCJnZXRSZW1vdmVkSGZJbmRleGVzIiwiZGVzY2VuZGluZ0hmQ29sdW1ucyIsImZpbmFsRWxlbWVudFJvd0luZGV4IiwiX2VsZW1lbnQkX19jaGlsZHJlbiIsInJvd3NEYXRhIiwiX19jaGlsZHJlbiIsInJlbGF0aXZlUm93SW5kZXgiLCJuYW1lZEV4cHJlc3Npb25OYW1lIiwiYWRkZWRTaGVldERpc3BsYXlOYW1lIiwib2xkRGlzcGxheU5hbWUiLCJuZXdEaXNwbGF5TmFtZSIsInJlbW92ZWRTaGVldERpc3BsYXlOYW1lIiwiX21vdmVzIiwiX2F4aXMiLCJfaW5kZXhNYXBwZXIiLCJfaW5kZXhlc1NlcXVlbmNlIiwiX21vdmVkSW5kZXhlcyIsIl9maW5hbEluZGV4IiwiX3JlbW92ZWRJbmRleGVzIiwiYXhpcyIsImluZGV4ZXNTZXF1ZW5jZSIsIm5vdFRyaW1tZWRJbmRleGVzIiwiZ2V0Tm90VHJpbW1lZEluZGV4ZXMiLCJzeW5jTW92ZXMiLCJTWU5DX01PVkVfTUVUSE9EX05BTUUiLCJnZXRFbmdpbmUiLCJtb3ZlVG9UaGVTYW1lUG9zaXRpb24iLCJhbm90aGVyTW92ZVdpdGhvdXRFZmZlY3QiLCJtb3ZlZFZpc3VhbEluZGV4ZXMiLCJ2aXN1YWxGaW5hbEluZGV4IiwiaXNQZXJmb3JtaW5nVW5kb1JlZG8iLCJjYWxjdWxhdGVkTW92ZXMiLCJnZXRQb3N0cG9uZUFjdGlvbiIsIlNZTkNfT1JERVJfQ0hBTkdFX01FVEhPRF9OQU1FIiwibmV3U2VxdWVuY2UiLCJyZWxhdGl2ZVRyYW5zZm9ybWF0aW9uIiwic2hlZXREaW1lbnNpb25zIiwic2l6ZUZvckF4aXMiLCJfYXhpc1N5bmNlciIsIl9yb3dJbmRleFN5bmNlciIsIl9jb2x1bW5JbmRleFN5bmNlciIsIl9wb3N0cG9uZUFjdGlvbiIsIl9pc1BlcmZvcm1pbmdVbmRvIiwiX2lzUGVyZm9ybWluZ1JlZG8iLCJfc2hlZXRJZCIsInBvc3Rwb25lQWN0aW9uIiwiaW5kZXhUeXBlIiwiZmxhZ1ZhbHVlIiwibnVtZXJpY0RhdGUiLCJkYXRlRm9yRm9ybWF0dGluZyIsIkRFRkFVTFRfREFURV9GT1JNQVRfSFlQRVJGT1JNVUxBIiwiaGlkZGVuQ29sdW1uc1BsdWdpbiIsImNvbHVtbnNUb0hpZGUiLCJoaWRlQ29sdW1ucyIsImxhc3RIaWRkZW5Db2x1bW4iLCJjb2x1bW5Ub1NlbGVjdCIsIl90aGlzJGNvbHVtbkluZGV4TWFwcCIsIl90aGlzJGNvbHVtbkluZGV4TWFwcDIiLCJzdGFydFZpc3VhbENvbHVtbiIsImVuZFZpc3VhbENvbHVtbiIsInNob3dDb2x1bW5zIiwiaGlkZGVuUGh5c2ljYWxDb2x1bW5zIiwiZ2V0SGlkZGVuQ29sdW1ucyIsInNlbGVjdGVkUmFuZ2VMYXN0IiwidmlzdWFsU3RhcnRDb2x1bW4iLCJ2aXN1YWxFbmRDb2x1bW4iLCJyZW5kZXJhYmxlU3RhcnRDb2x1bW4iLCJyZW5kZXJhYmxlRW5kQ29sdW1uIiwibm90VHJpbW1lZENvbHVtbkluZGV4ZXMiLCJwaHlzaWNhbENvbHVtbkluZGV4ZXMiLCJwaHlzaWNhbEluZGV4ZXNJblJhbmdlIiwibGFzdFZpc3VhbEluZGV4IiwiX2hpZGVDb2x1bW4iLCJfc2hvd0NvbHVtbiIsIl9oaWRkZW5Db2x1bW5zTWFwIiwiX0hpZGRlbkNvbHVtbnNfYnJhbmQiLCJIaWRkZW5Db2x1bW5zIiwiY29weVBhc3RlRW5hYmxlZCIsIkhpZGluZ01hcCIsIl9vbk1hcEluaXQiLCJfb25BZnRlckdldENlbGxNZXRhIiwiX29uTW9kaWZ5Q29sV2lkdGgiLCJfb25Nb2RpZnlDb3B5YWJsZVJhbmdlIiwicmVzZXRDZWxsc01ldGEiLCJjdXJyZW50SGlkZUNvbmZpZyIsImlzVmFsaWRDb25maWciLCJkZXN0aW5hdGlvbkhpZGVDb25maWciLCJoaWRpbmdNYXBWYWx1ZXMiLCJpc0FueUNvbHVtblNob3dlZCIsImhpZGRlbkluZGV4ZXMiLCJzaG93Q29sdW1uIiwiaXNDb25maWdWYWxpZCIsImluZGljYXRvcnMiLCJjbGFzc0FyciIsImNvbnRhaW5BZnRlckhpZGRlbkNvbHVtbiIsInB1c2hSYW5nZSIsIl9oaWRkZW5Db2x1bW5zIiwiaGlkZGVuUm93c1BsdWdpbiIsInJvd3NUb0hpZGUiLCJsYXN0SGlkZGVuUm93IiwiX3RoaXMkcm93SW5kZXhNYXBwZXIkIiwiX3RoaXMkcm93SW5kZXhNYXBwZXIkMiIsInN0YXJ0VmlzdWFsUm93IiwiZW5kVmlzdWFsUm93IiwiaGlkZGVuUGh5c2ljYWxSb3dzIiwiZ2V0SGlkZGVuUm93cyIsInZpc3VhbFN0YXJ0Um93IiwidmlzdWFsRW5kUm93IiwicmVuZGVyYWJsZVN0YXJ0Um93IiwicmVuZGVyYWJsZUVuZFJvdyIsIm5vdFRyaW1tZWRSb3dJbmRleGVzIiwicGh5c2ljYWxSb3dJbmRleGVzIiwiX2hpZGVSb3ciLCJfc2hvd1JvdyIsIl9oaWRkZW5Sb3dzTWFwIiwiX0hpZGRlblJvd3NfYnJhbmQiLCJIaWRkZW5Sb3dzIiwiX29uTW9kaWZ5Um93SGVpZ2h0IiwiX29uQWZ0ZXJHZXRSb3dIZWFkZXIiLCJpc0FueVJvd1Nob3dlZCIsInNob3dSb3ciLCJoaWRlUm93IiwiY29udGFpbkFmdGVySGlkZGVuUm93IiwiX2hpZGRlblJvd3MiLCJyZWdpc3RlckFsbFBsdWdpbnMiLCJfbWFudWFsQ29sdW1uRnJlZXplIiwiTWFudWFsQ29sdW1uRnJlZXplIiwiX21hbnVhbENvbHVtbk1vdmUiLCJNYW51YWxDb2x1bW5Nb3ZlIiwiX21hbnVhbENvbHVtblJlc2l6ZSIsIk1hbnVhbENvbHVtblJlc2l6ZSIsIl9tYW51YWxSb3dNb3ZlIiwiTWFudWFsUm93TW92ZSIsIl9tYW51YWxSb3dSZXNpemUiLCJNYW51YWxSb3dSZXNpemUiLCJfbWVyZ2VDZWxscyIsIk1lcmdlQ2VsbHMiLCJfbXVsdGlDb2x1bW5Tb3J0aW5nIiwiTXVsdGlDb2x1bW5Tb3J0aW5nIiwiX211bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyIsIk11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyIsIl9uZXN0ZWRIZWFkZXJzIiwiTmVzdGVkSGVhZGVycyIsIl9uZXN0ZWRSb3dzIiwiTmVzdGVkUm93cyIsIl9wZXJzaXN0ZW50U3RhdGUiLCJQZXJzaXN0ZW50U3RhdGUiLCJfc2VhcmNoIiwiU2VhcmNoIiwiX3RvdWNoU2Nyb2xsIiwiVG91Y2hTY3JvbGwiLCJfdHJpbVJvd3MiLCJUcmltUm93cyIsIl91bmRvUmVkbyIsIlVuZG9SZWRvIiwibWFudWFsQ29sdW1uRnJlZXplUGx1Z2luIiwiZnJlZXplQ29sdW1uIiwidW5mcmVlemVDb2x1bW4iLCJfZnJlZXplQ29sdW1uIiwiX3VuZnJlZXplQ29sdW1uIiwiX2FmdGVyRmlyc3RVc2UiLCJfTWFudWFsQ29sdW1uRnJlZXplX2JyYW5kIiwiX2FkZENvbnRleHRNZW51RW50cnkiLCJfb25CZWZvcmVDb2x1bW5Nb3ZlIiwibW92ZUluZGV4ZXMiLCJfZml4ZWRDb2x1bW5zU3RhcnQiLCJmcmVlemVMaW5lIiwiX2JhY2tsaWdodDIiLCJfZ3VpZGVsaW5lMiIsIkNTU19QTFVHSU4iLCJDU1NfU0hPV19VSSIsIkNTU19PTl9NT1ZJTkciLCJDU1NfQUZURVJfU0VMRUNUSU9OIiwiX2JhY2tsaWdodCIsIl9ndWlkZWxpbmUiLCJfY29sdW1uc1RvTW92ZSIsIl9jb3VudENvbHMiLCJfcHJlc3NlZCIsIl90YXJnZXQiLCJfY2FjaGVkRHJvcEluZGV4IiwiX2hvdmVyZWRDb2x1bW4iLCJfcm9vdEVsZW1lbnRPZmZzZXQiLCJfaGFzUm93SGVhZGVycyIsIl9NYW51YWxDb2x1bW5Nb3ZlX2JyYW5kIiwiX29uQmVmb3JlT25DZWxsTW91c2VPdmVyIiwiX29uQWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwiYnVpbGRQbHVnaW5VSSIsIm1vdmVCeVNldHRpbmdzT3JMb2FkIiwibW92ZUNvbHVtbiIsIm1vdmVDb2x1bW5zIiwiaXNNb3ZlUG9zc2libGUiLCJiZWZvcmVNb3ZlSG9vayIsIm1vdmVQZXJmb3JtZWQiLCJpc0NvbHVtbk9yZGVyQ2hhbmdlZCIsImRyYWdDb2x1bW4iLCJkcmFnQ29sdW1ucyIsImNvdW50RmluYWxJbmRleCIsInRvb0hpZ2hEZXN0aW5hdGlvbkluZGV4IiwidG9vTG93RGVzdGluYXRpb25JbmRleCIsInRvb0xvd01vdmVkQ29sdW1uSW5kZXgiLCJtb3ZlZENvbHVtbiIsInRvb0hpZ2hNb3ZlZENvbHVtbkluZGV4IiwibnJPZk1vdmVkRWxlbWVudCIsIm51bWJlck9mQ29sdW1uc0xvd2VyVGhhbkRyb3BJbmRleCIsImN1cnJlbnRDb2x1bW5JbmRleCIsImdldENvbHVtbnNXaWR0aCIsImNvbHVtbk1hcHBlciIsInJlbmRlcmFibGVJbmRleCIsInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJpc0ZpeGVkQ29sdW1uc1N0YXJ0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsInN0b3JlZFN0YXRlIiwicHJlcGFyZUNvbHVtbnNUb01vdmluZyIsInNlbGVjdGVkQ29sdW1ucyIsInJlZnJlc2hQb3NpdGlvbnMiLCJmaXJzdFZpc2libGUiLCJnZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbiIsInNjcm9sbFN0YXJ0IiwidGRPZmZzZXRTdGFydCIsInRib2R5T2Zmc2V0TGVmdCIsImJhY2tsaWdodEVsZW1NYXJnaW5TdGFydCIsImdldE9mZnNldCIsImJhY2tsaWdodEVsZW1XaWR0aCIsIm1vdXNlT2Zmc2V0U3RhcnQiLCJldmVudFBhZ2VYIiwibmV3Q29vcmRzQ29sIiwiYmFja2xpZ2h0U3RhcnQiLCJndWlkZWxpbmVTdGFydCIsImlzSGVhZGVyU2VsZWN0aW9uIiwiaXNTb3J0aW5nRWxlbWVudCIsImd1aWRlbGluZUlzTm90UmVhZHkiLCJpc0FwcGVuZGVkIiwiYmFja2xpZ2h0SXNOb3RSZWFkeSIsImFwcGVuZFRvIiwiZXZlbnRPZmZzZXRYIiwiY291bnRDb2x1bW5zRnJvbSIsImlubGluZU9mZnNldCIsImlubGluZVBvcyIsImZpcnN0TW92ZWRWaXN1YWxDb2x1bW4iLCJmaXJzdE1vdmVkUGh5c2ljYWxDb2x1bW4iLCJwb3NUb3AiLCJVTklUIiwiaW5saW5lUHJvcGVydHkiLCJpbmxpbmVQb3NpdGlvbiIsImdldFBvc2l0aW9uIiwibWFyZ2luVG9wIiwiaW5saW5lUHJvcCIsIkJhY2tsaWdodFVJIiwiR3VpZGVsaW5lVUkiLCJQRVJTSVNURU5UX1NUQVRFX0tFWSIsIl9jdXJyZW50VEgiLCJfY3VycmVudENvbCIsIl9zZWxlY3RlZENvbHMiLCJfY3VycmVudFdpZHRoIiwiX25ld1NpemUiLCJfc3RhcnRZIiwiX3N0YXJ0V2lkdGgiLCJfc3RhcnRPZmZzZXQiLCJfaGFuZGxlIiwiX2d1aWRlIiwiX2lzVHJpZ2dlcmVkQnlSTUIiLCJfZGJsY2xpY2siLCJfYXV0b3Jlc2l6ZVRpbWVvdXQiLCJfY29sdW1uV2lkdGhzTWFwIiwiX2NvbmZpZyIsIl9NYW51YWxDb2x1bW5SZXNpemVfYnJhbmQiLCJpbmxpbmVEaXIiLCJfb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLCJpc0RvdWJsZUNsaWNrIiwic2F2ZU1hbnVhbENvbHVtbldpZHRocyIsImxvYWRNYW51YWxDb2x1bW5XaWR0aHMiLCJzZXRNYW51YWxTaXplIiwiY2xlYXJNYW51YWxTaXplIiwic2V0dXBIYW5kbGVQb3NpdGlvbiIsImJveCIsInJlbGF0aXZlSGVhZGVyUG9zaXRpb24iLCJpc0Z1bGxDb2x1bW5TZWxlY3RlZCIsInJlZnJlc2hIYW5kbGVQb3NpdGlvbiIsInNldHVwR3VpZGVQb3NpdGlvbiIsImhhbmRsZUhlaWdodCIsImhhbmRsZUJvdHRvbVBvc2l0aW9uIiwicmVmcmVzaEd1aWRlUG9zaXRpb24iLCJoaWRlSGFuZGxlQW5kR3VpZGUiLCJjaGVja0lmQ29sdW1uSGVhZGVyIiwidGhlYWQiLCJnZXRDbG9zZXN0VEhQYXJlbnQiLCJhZnRlck1vdXNlRG93blRpbWVvdXQiLCJyZXNpemUiLCJob29rTmV3U2l6ZSIsInNlbGVjdGVkQ29sIiwiX29uQ29udGV4dE1lbnUiLCJpbml0aWFsU2V0dGluZyIsImxvYWRlZE1hbnVhbENvbHVtbldpZHRocyIsInRoIiwiY29sc3BhbiIsIl9yb3dzVG9Nb3ZlIiwiX01hbnVhbFJvd01vdmVfYnJhbmQiLCJfb25BZnRlclNjcm9sbEhvcml6b250YWxseSIsIm1vdmVSb3ciLCJtb3ZlUm93cyIsImlzUm93T3JkZXJDaGFuZ2VkIiwiZHJhZ1JvdyIsImRyYWdSb3dzIiwidG9vTG93TW92ZWRSb3dJbmRleCIsIm1vdmVkUm93IiwidG9vSGlnaE1vdmVkUm93SW5kZXgiLCJudW1iZXJPZlJvd3NMb3dlclRoYW5Ecm9wSW5kZXgiLCJjdXJyZW50Um93SW5kZXgiLCJnZXRSb3dzSGVpZ2h0Iiwicm93TWFwcGVyIiwiaXNGaXhlZFJvd1RvcCIsImlzRml4ZWRSb3dCb3R0b20iLCJwcmVwYXJlUm93c1RvTW92aW5nIiwic2VsZWN0ZWRSb3dzIiwiZ2V0Rmlyc3RGdWxseVZpc2libGVSb3ciLCJsYXN0VmlzaWJsZSIsImdldExhc3RGdWxseVZpc2libGVSb3ciLCJ0YWJsZVNjcm9sbCIsInRyaW1taW5nQ29udGFpbmVyU2Nyb2xsIiwicGl4ZWxzQWJvdmUiLCJwaXhlbHNSZWxUb1RhYmxlU3RhcnQiLCJldmVudFBhZ2VZIiwiaGlkZXJIZWlnaHQiLCJ0Ym9keU9mZnNldFRvcCIsImJhY2tsaWdodEVsZW1NYXJnaW5Ub3AiLCJiYWNrbGlnaHRFbGVtSGVpZ2h0IiwidGRNaWRkbGUiLCJ0ZEhlaWdodCIsInRkU3RhcnRQaXhlbCIsImlzQmVsb3dUYWJsZSIsImJhY2tsaWdodFRvcCIsImd1aWRlbGluZVRvcCIsImxlZnRQb3MiLCJ0b3BPZmZzZXQiLCJyb3dzTGVuIiwiZmlyc3RNb3ZlZFZpc3VhbFJvdyIsImZpcnN0TW92ZWRQaHlzaWNhbFJvdyIsInBvc0xlZnQiLCJtYXJnaW5MZWZ0IiwiX2N1cnJlbnRSb3ciLCJfc2VsZWN0ZWRSb3dzIiwiX2N1cnJlbnRIZWlnaHQiLCJfc3RhcnRIZWlnaHQiLCJfcm93SGVpZ2h0c01hcCIsIl9NYW51YWxSb3dSZXNpemVfYnJhbmQiLCJzYXZlTWFudWFsUm93SGVpZ2h0cyIsImxvYWRNYW51YWxSb3dIZWlnaHRzIiwiZ2V0TGFzdERlc2lyZWRSb3dIZWlnaHQiLCJoZWFkZXJXaWR0aCIsImNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyIsImlzRnVsbFJvd1NlbGVjdGVkIiwiaGFuZGxlV2lkdGgiLCJoYW5kbGVFbmRQb3NpdGlvbiIsImNoZWNrSWZSb3dIZWFkZXIiLCJnZXRBY3R1YWxSb3dIZWlnaHQiLCJ3YWxrb250YWJsZUhlaWdodCIsImxvYWRlZE1hbnVhbFJvd0hlaWdodHMiLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLCJjb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUiLCJzZWxlY3Rpb25BcmVhIiwibWVyZ2VkQ2VsbCIsInJvd3NwYW4iLCJmaW5hbEFyZWEiLCJzbmFwRHJhZ0FyZWEiLCJiYXNlQXJlYSIsImRyYWdBcmVhIiwiZHJhZ0RpcmVjdGlvbiIsImZvdW5kTWVyZ2VkQ2VsbHMiLCJuZXdEcmFnQXJlYSIsImZpbGxTaXplIiwiZ2V0QXV0b2ZpbGxTaXplIiwiYmFzZUFyZWFTdGFydFJvdyIsImJhc2VBcmVhU3RhcnRDb2x1bW4iLCJiYXNlQXJlYUVuZFJvdyIsImJhc2VBcmVhRW5kQ29sdW1uIiwiZnVsbEN5Y2xlIiwicGFydGlhbHMiLCJmYXJ0aGVzdENvbGxlY3Rpb24iLCJnZXRGYXJ0aGVzdENvbGxlY3Rpb24iLCJ1cGRhdGVDdXJyZW50RmlsbENhY2hlIiwiY3ljbGVMZW5ndGgiLCJ1cGRhdGVPYmplY3QiLCJjdXJyZW50RmlsbERhdGEiLCJkcmFnQXJlYVN0YXJ0Um93IiwiZHJhZ0FyZWFTdGFydENvbHVtbiIsImRyYWdBcmVhRW5kUm93IiwiZHJhZ0FyZWFFbmRDb2x1bW4iLCJnZXREcmFnQXJlYSIsIm1lcmdlZENlbGxBcnJheSIsInZlcnRpY2FsRGlyZWN0aW9uIiwiYmFzZUVuZCIsImJhc2VTdGFydCIsImluY2x1c2lvbkZ1bmN0aW9uTmFtZSIsImVuZE9mRHJhZ1JlY3JlYXRpb25JbmRleCIsImN1cnJlbnRDb2xsZWN0aW9uIiwiaXNGYXJ0aGVyIiwicmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uIiwiZmlsbFJhbmdlIiwiZ2V0UmFuZ2VGcm9tQ2hhbmdlcyIsImluQm91bmRzIiwiaWZDaHJvbWVGb3JjZVJlcGFpbnQiLCJkcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMiLCJmdWxsQXJlYSIsImJvdHRvbVJpZ2h0IiwiZHJhZ1JhbmdlIiwiZ2V0V2l0aGluUmFuZ2UiLCJnZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJjdXJyZW50Q29sdW1uIiwiY29ybmVyc09mU2VsZWN0aW9uIiwiaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsIiwibWVyZ2VSb3dFbmQiLCJnZXRMYXN0Um93IiwibWVyZ2VDb2x1bW5FbmQiLCJnZXRMYXN0Q29sdW1uIiwiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJpc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQiLCJzZWxlY3Rpb25SYW5nZXNBcnJheSIsIm1lcmdlZENlbGxJbmRpdmlkdWFsQ29vcmRzIiwiaW5zaWRlU2VsZWN0aW9ucyIsImdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlIiwiY2VsbFJhbmdlRmFjdG9yeSIsIk5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HIiwibmV3TWVyZ2VkQ2VsbCIsIklTX09VVF9PRl9CT1VORFNfV0FSTklORyIsIklTX1NJTkdMRV9DRUxMIiwiWkVST19TUEFOX1dBUk5JTkciLCJjb250YWluc05lZ2F0aXZlVmFsdWVzIiwibWVyZ2VkQ2VsbEluZm8iLCJjb250YWluc1plcm9TcGFuIiwiaXNPdXRPZkJvdW5kcyIsIm1lcmdlQ2VsbCIsImluY2x1ZGVzSG9yaXpvbnRhbGx5IiwiaW5jbHVkZXNWZXJ0aWNhbGx5Iiwic2hpZnRWZWN0b3IiLCJpbmRleE9mQ2hhbmdlIiwic2hpZnRWYWx1ZSIsInNoaWZ0ZWRJbmRleCIsImNoYW5nZVN0YXJ0IiwiY2hhbmdlRW5kIiwibWVyZ2VTdGFydCIsIm1lcmdlRW5kIiwicmVtb3ZlZE9mZnNldCIsInByZVJlbW92ZWRPZmZzZXQiLCJyZW1vdmVkUGFydCIsIl9jZWxsQ29vcmRzIiwiX01lcmdlZENlbGxzQ29sbGVjdGlvbl9icmFuZCIsIk1lcmdlZENlbGxzQ29sbGVjdGlvbiIsIm1lcmdlQ2VsbHNQbHVnaW4iLCJJU19PVkVSTEFQUElOR19XQVJOSU5HIiwibWVyZ2VkQ2VsbHMiLCJjb3VudFBhcnRpYWxzIiwidGVzdGVkUmFuZ2UiLCJtZXJnZWRDZWxsVG9wTGVmdCIsIm1lcmdlZENlbGxCb3R0b21SaWdodCIsIm1lcmdlZENlbGxSYW5nZSIsImFscmVhZHlFeGlzdHMiLCJpc092ZXJsYXBwaW5nIiwid2FudGVkQ29sbGVjdGlvbiIsIndhbnRlZENvbGxlY3Rpb25JbmRleCIsIm1lcmdlZENlbGxQYXJlbnRzVG9DbGVhciIsImhpZGRlbkNvbGxlY3Rpb25FbGVtZW50cyIsIm1lcmdlZENlbGxQYXJlbnRzIiwiYXBwbHlTcGFuUHJvcGVydGllcyIsImhpZGRlbkNvbGxlY3Rpb25FbGVtZW50IiwibWVyZ2VQYXJlbnQiLCJnZXRGaXJzdFJlbmRlcmFibGVDb29yZHMiLCJmaXJzdFJlbmRlcmFibGVSb3ciLCJmaXJzdFJlbmRlcmFibGVDb2x1bW4iLCJnZXRTdGFydE1vc3RDb2x1bW5JbmRleCIsIl9nZXROb25JbnRlcnNlY3RpbmdJbmRleGVzIiwic3RhcnRNb3N0SW5kZXgiLCJnZXRFbmRNb3N0Q29sdW1uSW5kZXgiLCJlbmRNb3N0SW5kZXgiLCJnZXRUb3BNb3N0Um93SW5kZXgiLCJ0b3BNb3N0SW5kZXgiLCJnZXRCb3R0b21Nb3N0Um93SW5kZXgiLCJib3R0b21Nb3N0SW5kZXgiLCJzaGlmdENvbGxlY3Rpb25zIiwiY3VycmVudE1lcmdlIiwic2NhbkRpcmVjdGlvbiIsImxhc3RJbmRleCIsImN1cnJlbnRSYW5nZSIsInRvZ2dsZU1lcmdlIiwiX2xpbmtlZExpc3QiLCJfY2VsbHNIb3Jpem9udGFsT3JkZXIiLCJfY2VsbHNWZXJ0aWNhbE9yZGVyIiwiX2N1cnJlbnRIb3Jpem9udGFsTGlua2VkTm9kZSIsIl9jdXJyZW50VmVydGljYWxMaW5rZWROb2RlIiwiX21lcmdlZENlbGxzR2V0dGVyIiwiX3Jvd0luZGV4TWFwcGVyIiwiX2NvbHVtbkluZGV4TWFwcGVyIiwiX0ZvY3VzT3JkZXJfYnJhbmQiLCJfcHVzaE9yZGVyTm9kZSIsImxpc3RPcmRlciIsIm1lcmdlQ2VsbHNWaXNpdG9yIiwiY29sU3RhcnQiLCJjb2xFbmQiLCJsaW5rZWROb2RlIiwiRm9jdXNPcmRlciIsIm1lcmdlZENlbGxzR2V0dGVyIiwiZ2V0Q3VycmVudFZlcnRpY2FsTm9kZSIsImdldEZpcnN0VmVydGljYWxOb2RlIiwiZ2V0TmV4dFZlcnRpY2FsTm9kZSIsImdldFByZXZWZXJ0aWNhbE5vZGUiLCJnZXRDdXJyZW50SG9yaXpvbnRhbE5vZGUiLCJnZXRGaXJzdEhvcml6b250YWxOb2RlIiwiZ2V0TmV4dEhvcml6b250YWxOb2RlIiwiZ2V0UHJldkhvcml6b250YWxOb2RlIiwic2V0UHJldk5vZGVBc0FjdGl2ZSIsInNldE5leHROb2RlQXNBY3RpdmUiLCJidWlsZEZvY3VzT3JkZXIiLCJ2aXNpdGVkSG9yaXpvbnRhbENlbGxzIiwidmlzaXRlZFZlcnRpY2FsQ2VsbHMiLCJzZXRBY3RpdmVOb2RlIiwiaW5vcmRlciIsIl9jZWxsc0NvbGxlY3Rpb24iLCJfdG9nZ2xlTWVyZ2UiLCJfZm9jdXNPcmRlcjIiLCJfbGFzdFNlbGVjdGVkRm9jdXMiLCJfbGFzdEZvY3VzRGVsdGEiLCJfZm9jdXNPcmRlciIsIl9NZXJnZUNlbGxzX2JyYW5kIiwiYXV0b2ZpbGxDYWxjdWxhdGlvbnMiLCJzZWxlY3Rpb25DYWxjdWxhdGlvbnMiLCJfb25Nb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsIl9vbk1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiX29uTW9kaWZ5VHJhbnNmb3JtRW5kIiwiX29uQmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiX29uQmVmb3JlU2V0UmFuZ2VTdGFydCIsIl9vbkJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IiwiX29uQWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsIl9vbk1vZGlmeUdldENlbGxDb29yZHMiLCJfb25BZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLCJfYWRkTWVyZ2VBY3Rpb25zVG9Db250ZXh0TWVudSIsIl9vbkFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLCJfb25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIiwiX29uTW9kaWZ5QXV0b2ZpbGxSYW5nZSIsIl9vbkJlZm9yZURyYXdBcmVhQm9yZGVycyIsIl9vbkFmdGVyRHJhd1NlbGVjdGlvbiIsIl9vbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiX29uQmVmb3JlQmVnaW5FZGl0aW5nIiwiY2xlYXJDb2xsZWN0aW9ucyIsImdlbmVyYXRlRnJvbVNldHRpbmdzIiwicm93c1RvUmVmcmVzaCIsInJvd0luZGV4ZXNUb1JlZnJlc2giLCJ3dFRhYmxlUmVmIiwicm93VG9SZWZyZXNoIiwicm93RWxlbWVudCIsInZhbGlkYXRlU2V0dGluZyIsInBvcHVsYXRlZE51bGxzIiwibWVyZ2VSYW5nZSIsImNhbk1lcmdlUmFuZ2UiLCJuZXdNZXJnZWRDZWxsSW5mbyIsIm1lcmdlU2VsZWN0aW9uIiwidW5tZXJnZVJhbmdlIiwidW5tZXJnZVNlbGVjdGlvbiIsImF1dG8iLCJwcmV2ZW50UG9wdWxhdGlvbiIsImNsZWFyZWREYXRhIiwicG9wdWxhdGlvbkluZm8iLCJjbGVhcmVkVmFsdWUiLCJtb2RpZnlWaWV3cG9ydFJvd1N0YXJ0IiwiY2FsYyIsIm1lcmdlUGFyZW50Rm9yVmlld3BvcnRTdGFydCIsInJlbmRlcmFibGVJbmRleEF0TWVyZ2VTdGFydCIsIm1vZGlmeVZpZXdwb3J0Um93RW5kIiwibWVyZ2VQYXJlbnRGb3JWaWV3cG9ydEVuZCIsInJlbmRlcmFibGVJbmRleEF0TWVyZ2VFbmQiLCJtb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0IiwidmlzdWFsU3RhcnRDb2wiLCJtb2RpZnlWaWV3cG9ydENvbHVtbkVuZCIsInZpc3VhbEVuZENvbCIsInRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUiLCJwYXJlbnRSb3ciLCJwYXJlbnRDb2x1bW4iLCJmaXJzdE5vbkhpZGRlblJvdyIsImZpcnN0Tm9uSGlkZGVuQ29sdW1uIiwidG9wU3RhcnRDb29yZHMiLCJib3R0b21FbmRDb29yZHMiLCJtZXJnZWRQYXJlbnQiLCJ2aXN1YWxDb2x1bW5JbmRleFN0YXJ0IiwidmlzdWFsQ29sdW1uSW5kZXhFbmQiLCJub3RIaWRkZW5Db2x1bW5JbmRleCIsInZpc3VhbFJvd0luZGV4U3RhcnQiLCJ2aXN1YWxSb3dJbmRleEVuZCIsIm5vdEhpZGRlblJvd0luZGV4IiwiY2xvbmVSYW5nZSIsImV4cGFuZENsb25lUmFuZ2UiLCJtZXJnZVJvdyIsIm1lcmdlQ29sdW1uIiwibWVyZ2VkQ2VsbENvcHkiLCJsYXN0TWVyZ2VkUm93SW5kZXgiLCJsYXN0TWVyZ2VkQ29sdW1uSW5kZXgiLCJtYXhSb3dTcGFuIiwibWF4Q29sU3BhbiIsInZlcnRpY2FsRGlyIiwiaG9yaXpvbnRhbERpciIsImZvY3VzQ29vcmRzIiwiZm9jdXNIaWdobGlnaHQiLCJkcmFnIiwibWVyZ2VkQ2VsbHNXaXRoaW5TZWxlY3Rpb25BcmVhIiwibWVyZ2VkQ2VsbHNXaXRoaW5SYW5nZSIsIkNPTFVNTl9PUkRFUl9QUkVGSVgiLCJodG1sRWxlbWVudCIsInNvcnRTZXF1ZW5jZVJlZ0V4cCIsImNzc0NsYXNzIiwiX3V0aWxzMiIsIkNPTkZMSUNURURfUExVR0lOX0tFWSIsIndhcm5BYm91dFBsdWdpbnNDb25mbGljdCIsImdldENvbXBhcmVSZXN1bHQiLCJjb21wYXJlUmVzdWx0IiwibmV4dFNvcnRlZENvbHVtbiIsInJlbW92ZUZyb21EcmFnZ2VkIiwiZHJhZ2dlZCIsImVudHJ5UG9zaXRpb24iLCJ0b3VjaFN0YXJ0UmFuZ2UiLCJ0YXJnZXRDb29yZHMiLCJyYW5nZVdpZHRoIiwicmFuZ2VIZWlnaHQiLCJyYW5nZURpcmVjdGlvbiIsIm5ld1JhbmdlQ29vcmRzIiwiZW5kVGFyZ2V0IiwidG91Y2hlcyIsImxhc3RTZXRDZWxsIiwic2V0UmFuZ2VFbmQiLCJnZXRDdXJyZW50UmFuZ2VDb29yZHMiLCJzZXRSYW5nZVN0YXJ0IiwiY3VycmVudFRvdWNoIiwidG91Y2hTdGFydERpcmVjdGlvbiIsImN1cnJlbnREaXJlY3Rpb24iLCJkcmFnZ2VkSGFuZGxlIiwiYm90dG9tU3RhcnRDb3JuZXIiLCJ0b3BFbmRDb3JuZXIiLCJpc0RyYWdnZWQiLCJfc3RhdGVNYW5hZ2VyMiIsIl9zdGF0ZU1hbmFnZXIiLCJfaGlkaW5nSW5kZXhNYXBPYnNlcnZlciIsIl9mb2N1c0luaXRpYWxDb29yZHMiLCJfaXNDb2x1bW5zU2VsZWN0aW9uSW5Qcm9ncmVzcyIsIl9OZXN0ZWRIZWFkZXJzX2JyYW5kIiwiX29uQWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJfb25CZWZvcmVPbkNlbGxNb3VzZVVwIiwiX3VwZGF0ZUZvY3VzSGlnaGxpZ2h0UG9zaXRpb24iLCJfb25BZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsIl9vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIiwiX29uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwiX29uQmVmb3JlQ29weSIsIl9vbkJlZm9yZVNlbGVjdENvbHVtbnMiLCJfb25Nb2RpZnlGb2N1c2VkRWxlbWVudCIsInNldENvbHVtbnNMaW1pdCIsImhpZGluZ01hcHNDb2xsZWN0aW9uIiwiZ2V0TWVyZ2VkVmFsdWVzIiwiaXNDb2x1bW5IaWRkZW4iLCJ0cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uIiwiY3JlYXRlQ2hhbmdlc09ic2VydmVyIiwic3Vic2NyaWJlIiwib3AiLCJidWlsZFdpZHRoc01hcCIsInNldExheWVyc0NvdW50IiwiZ2V0TGF5ZXJzQ291bnQiLCJjbGVhckNvbHNwYW5zIiwidW5zdWJzY3JpYmUiLCJtYXN0ZXJOb2RlcyIsImhlYWRlclJlbmRlcmVyRmFjdG9yeSIsImlzUGxhY2Vob2xkZXIiLCJfd3RPdmVybGF5cyR0b3BJbmxpbmUiLCJfd3RPdmVybGF5cyRpbmxpbmVTdGEiLCJpc1RvcElubGluZVN0YXJ0T3ZlcmxheSIsImlzSW5saW5lU3RhcnRPdmVybGF5IiwiY29ycmVjdGVkQ29sc3BhbiIsImFwcGVuZENvbEhlYWRlciIsImdldENvbHVtbkhlYWRlclZhbHVlIiwiX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzIiwiX3RoaXMkaG90IiwiZmluZExlZnRNb3N0Q29sdW1uSW5kZXgiLCJnZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uIiwibW9zdExlZnRDb2x1bW5JbmRleCIsIm1vc3RSaWdodENvbHVtbkluZGV4IiwiZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4IiwiaGlnaGxpZ2h0TWV0YSIsImhlYWRlck5vZGVEYXRhIiwiaXNSb290IiwicmFuZ2VJbmRleCIsInplcm9CYXNlZENvbHVtbkhlYWRlckxldmVsIiwiemVyb0Jhc2VkQ29sdW1uSW5kZXgiLCJjb2x1bW5zVG9TZWxlY3QiLCJhbGxvd1JpZ2h0Q2xpY2tTZWxlY3Rpb24iLCJpbkluU2VsZWN0aW9uIiwiZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbCIsIm5leHRDb29yZHMiLCJzdGFydE5vZGVEYXRhIiwiZW5kTm9kZURhdGEiLCJyZW5kZXJlcnNBcnJheSIsImhlYWRlckxheWVyIiwiaGVhZGVyTGF5ZXJzQ291bnQiLCJuZXdTdGFydENvbHVtbiIsIm5vblJlbmRlcmFibGUiLCJjYWNoZWRXaWR0aCIsIl90cmVlIiwiX3Jvb3ROb2RlcyIsIl9yb290c0luZGV4IiwiX3NvdXJjZVNldHRpbmdzIiwic291cmNlU2V0dGluZ3MiLCJnZXRSb290cyIsImdldFJvb3RCeUNvbHVtbiIsIm5vcm1Db2x1bW5JbmRleCIsInRyZWVOb2RlIiwid2Fsa0Rvd24iLCJub2RlSGVhZGVyTGV2ZWwiLCJyZWJ1aWxkVHJlZUluZGV4IiwiYnVpbGRUcmVlIiwiZ2V0Q29sdW1uc0NvdW50IiwiY29sdW1uU2V0dGluZ3MiLCJidWlsZExlYXZlcyIsImV4dHJhY3Rpb25MZW5ndGgiLCJnZXRIZWFkZXJzU2V0dGluZ3MiLCJub2RlRGF0YSIsImFkZENoaWxkIiwiX3NvdXJjZVNldHRpbmdzMiIsIl9oZWFkZXJzVHJlZTIiLCJfbm9kZU1vZGlmaWVycyIsIl9tYXRyaXhHZW5lcmF0b3IiLCJfaGVhZGVyc1RyZWUiLCJfc3RhdGVNYXRyaXgiLCJuZXN0ZWRIZWFkZXJzU2V0dGluZ3MiLCJoYXNFcnJvciIsImV4IiwiZ2VuZXJhdGVNYXRyaXgiLCJ0cmFuc2Zvcm1lZFNldHRpbmdzIiwicm93Q29vcmRzVG9MZXZlbCIsIm1lcmdlV2l0aCIsIm5vZGVUb1Byb2Nlc3MiLCJhY3Rpb25SZXN1bHQiLCJnZXRIZWFkZXJUcmVlTm9kZSIsImNvbHVtbkluZGV4RnJvbSIsIl9oZWFkZXJMZXZlbCIsImNvbHVtbkluZGV4VG8iLCJhdExlYXN0T25lUm9vdEZvdW5kIiwibm9kZUNvbHVtbkluZGV4IiwiVFJBVkVSU0FMX0RGX1BSRSIsIl90aGlzJGdldEhlYWRlclNldHRpbiIsInN0ZXBCYWNrQ29sdW1uIiwiX3RoaXMkZ2V0SGVhZGVyU2V0dGluMiIsImlzUm9vdE5vZGUiLCJfdGhpcyRnZXRIZWFkZXJTZXR0aW4zIiwic3RlcEZvcnRoQ29sdW1uIiwiX3RoaXMkZ2V0SGVhZGVyU2V0dGluNCIsImhlYWRlclJvb3RzIiwibWF0cml4IiwiY3Jvc3NIaWRkZW5Db2x1bW5zIiwiY29sc3BhbkhlYWRlckxheWVyIiwic3ViQXJyYXkiLCJjcmVhdGVOZXN0ZWRBcnJheUlmTmVjZXNzYXJ5IiwiaXNSb290U2V0dGluZ3NGb3VuZCIsImNyZWF0ZVBsYWNlaG9sZGVySGVhZGVyU2V0dGluZ3MiLCJoZWFkZXJSb290U2V0dGluZ3MiLCJjcmVhdGVIZWFkZXJTZXR0aW5ncyIsImNyZWF0ZURlZmF1bHRIZWFkZXJTZXR0aW5ncyIsImNvbGxhcHNlTm9kZSIsIl9nZXRGaXJzdENoaWxkUHJvcGVydCIsIm5vZGVDaGlsZHMiLCJpc05vZGVSZWZsZWN0c0ZpcnN0Q2hpbGRDb2xzcGFuIiwiYWxsTGVhdmVzRXhjZXB0TW9zdExlZnQiLCJ0cmF2ZXJzZUhpZGRlbk5vZGVDb2x1bW5JbmRleGVzIiwiZ3JpZENvbHVtbkluZGV4IiwiY2xvbmVkVHJlZSIsImNsb25lVHJlZSIsImdldEZpcnN0Q2hpbGRQcm9wZXJ0eSIsIndhbGtVcCIsImV4cGFuZE5vZGUiLCJyZXBsYWNlVHJlZVdpdGgiLCJsZWFmRGF0YSIsIl9jb2xsYXBzZSIsImlzQ29sbGFwc2libGVOb2RlIiwiYXZhaWxhYmxlTW9kaWZpZXJzIiwibm9ybWFsaXplU2V0dGluZ3MiLCJub3JtYWxpemVkU2V0dGluZ3MiLCJoZWFkZXJzU2V0dGluZ3MiLCJzb3VyY2VIZWFkZXJTZXR0aW5ncyIsImNhbmNlbFByb2Nlc3NpbmciLCJjb2x1bW5zTGVuZ3RoIiwiZGVmYXVsdFNldHRpbmdzIiwiX3NldHRpbmdzTm9ybWFsaXplciIsIkhFQURFUl9DT05GSUdVUkFCTEVfUFJPUFMiLCJfZGF0YUxlbmd0aCIsImFkZGl0aW9uYWxTZXR0aW5ncyIsInByb3BzVG9FeHRlbmQiLCJfaGVhZGVyc1NldHRpbmdzJGNvbHUiLCJoZWFkZXJzU2V0dGluZ3NDaHVua3MiLCJjdXJyZW50TGVuZ3RoIiwibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLCJ3aWR0aHNNYXAiLCJsYXllcnNDb3VudCIsIl9idWlsZEdob3N0VGFibGUiLCJ2aXN1YWxDb2x1bW5zSW5kZXgiLCJpc0Ryb3Bkb3duRW5hYmxlZCIsIm1heFJlbmRlcmVkQ29scyIsInRyIiwiY29sU3BhbiIsIm5lc3RlZFJvd3NQbHVnaW4iLCJsZXZlbHMiLCJsZXZlbENvdW50Iiwibm9kZUluZm8iLCJnZXRSYXdTb3VyY2VEYXRhIiwicmF3U291cmNlRGF0YSIsImRpc2FibGVDb3JlQVBJTW9kaWZpZXJzIiwiZW5hYmxlQ29yZUFQSU1vZGlmaWVycyIsInVwZGF0ZVdpdGhEYXRhIiwicmV3cml0ZUNhY2hlIiwiY2FjaGVOb2RlIiwiaGFzQ2hpbGRyZW4iLCJnZXREYXRhT2JqZWN0IiwicmVhZFRyZWVOb2RlcyIsInJlYWRDb3VudCIsIm5lZWRlZEluZGV4IiwibmVlZGVkT2JqZWN0Iiwicm9vdExldmVsIiwicmVhZE5vZGVzQ291bnQiLCJwYXJlbnRPYmoiLCJwYXJlbnRSZWZlcmVuY2UiLCJtb2NrUGFyZW50IiwiZmFrZVBhcmVudCIsIm1vY2tOb2RlIiwiZmFrZU5vZGUiLCJnZXRSb3dJbmRleCIsInJvd09iaiIsImdldFJvd0luZGV4V2l0aGluUGFyZW50IiwiZ2V0Um93UGFyZW50IiwiY291bnRBbGxSb3dzIiwicm9vdE5vZGVNb2NrIiwiY291bnRDaGlsZHJlbiIsInJvd09iamVjdCIsImdldFJvd09iamVjdFBhcmVudCIsImdldFJvd0xldmVsIiwiZ2V0Um93T2JqZWN0TGV2ZWwiLCJpc0NoaWxkIiwiZ2V0Q2hpbGQiLCJfcGFyZW50JF9fY2hpbGRyZW4iLCJpc1Jvd0hpZ2hlc3RMZXZlbCIsImlzUGFyZW50IiwiX3Jvd09iaiRfX2NoaWxkcmVuIiwiY2hpbGRFbGVtZW50IiwicGFyZW50SW5kZXgiLCJmdW5jdGlvbmFsUGFyZW50IiwibmV3Um93SW5kZXgiLCJhZGRDaGlsZEF0SW5kZXgiLCJmbGF0dGVuZWRJbmRleCIsImZpbmFsQ2hpbGRJbmRleCIsImFkZFNpYmxpbmciLCJ3aGVyZSIsInRyYW5zbGF0ZWRJbmRleCIsInRyYW5zbGF0ZVRyaW1tZWRSb3ciLCJpbmRleFdpdGhpblBhcmVudCIsImRldGFjaEZyb21QYXJlbnQiLCJyb3dPYmplY3RzIiwiY2hpbGRSb3dJbmRleCIsImNoaWxkQ291bnQiLCJncmFuZHBhcmVudCIsImdyYW5kcGFyZW50Um93SW5kZXgiLCJtb3ZlZEVsZW1lbnRSb3dJbmRleCIsInJlbW92ZWRSb3dJbmRleGVzIiwibGFzdEdyYW5kcGFyZW50Q2hpbGQiLCJsYXN0R3JhbmRwYXJlbnRDaGlsZEluZGV4IiwiZWxlbWVudHNUb1JlbW92ZSIsInRlbXBQYXJlbnQiLCJwcmV2aW91c0VsZW1lbnQiLCJuZXdSb3dQYXJlbnQiLCJzeW5jUm93V2l0aFJhd1NvdXJjZSIsInVwbW9zdFBhcmVudCIsIm1vdmVUb0NvbGxhcHNlZCIsIm1vdmVUb0xhc3RDaGlsZCIsIm1vdmVUb0xhc3RSb3ciLCJmcm9tUGFyZW50IiwiaW5kZXhJbkZyb21QYXJlbnQiLCJlbGVtVG9Nb3ZlIiwibW92aW5nVXAiLCJ0b1BhcmVudCIsImluZGV4SW5UYXJnZXRQYXJlbnQiLCJzYW1lUGFyZW50IiwiY29sbGFwc2luZ1VJIiwidW50cmFuc2xhdGVUcmltbWVkUm93IiwiX2RhdGFNYW5hZ2VyIiwiX2NvbGxhcHNpbmciLCJfcm93TW92ZUNvbnRyb2xsZXIiLCJfc2tpcFJlbmRlciIsIl9za2lwQ29yZUFQSU1vZGlmaWVycyIsIl9OZXN0ZWRSb3dzX2JyYW5kIiwiY29sbGFwc2VkUm93c01hcCIsImRhdGFNYW5hZ2VyIiwiaGVhZGVyc1VJIiwiY29udGV4dE1lbnVVSSIsInJvd01vdmVDb250cm9sbGVyIiwib25Nb2RpZnlSb3dEYXRhIiwib25Nb2RpZnlTb3VyY2VMZW5ndGgiLCJvbkJlZm9yZURhdGFTcGxpY2UiLCJfb25GaWx0ZXJEYXRhIiwiX29uQmVmb3JlQWRkQ2hpbGQiLCJfb25BZnRlckFkZENoaWxkIiwiX29uQmVmb3JlRGV0YWNoQ2hpbGQiLCJfb25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsIl9vbkJlZm9yZVJvd01vdmUiLCJjdXJyZW50U291cmNlRGF0YSIsImFyZUNoaWxkcmVuQ29sbGFwc2VkIiwiZXhwYW5kQ2hpbGRyZW4iLCJjb2xsYXBzZUNoaWxkcmVuIiwib25CZWZvcmVSb3dNb3ZlIiwidG9nZ2xlU3RhdGUiLCJjb2xsYXBzZWRSb3dzU3Rhc2giLCJzdGFzaCIsInRyaW1TdGFzaCIsInNoaWZ0U3Rhc2giLCJhcHBlbmRPcHRpb25zIiwiYXBwZW5kTGV2ZWxJbmRpY2F0b3JzIiwicm93SGVhZGVyV2lkdGhDYWNoZSIsInVwZGF0ZVJvd0hlYWRlcldpZHRoIiwiYXBwbHlTdGFzaCIsIm1vZGlmaWVkUGh5c2ljYWxSb3dzIiwicmVtb3ZlZFJvd3MiLCJwbHVnaW5JbnN0YW5jZSIsIkNvbGxhcHNpbmdVSSIsImNvbGxhcHNlZFJvd3MiLCJsYXN0Q29sbGFwc2VkUm93cyIsImV4cGFuZE11bHRpcGxlQ2hpbGRyZW4iLCJ0YXJnZXRJbmRleCIsImNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbiIsInJlYWxFbGVtZW50SW5kZXgiLCJpbmRleE9mRWxlbWVudCIsImRvVHJpbW1pbmciLCJyb3dzVG9Db2xsYXBzZSIsInJvd3NUb1RyaW0iLCJjb2xsYXBzZVJvd3MiLCJyZW5kZXJBbmRBZGp1c3QiLCJjb2xsYXBzZVJvdyIsInJlY3Vyc2l2ZSIsInJvd0luZGV4ZXMiLCJjb2xsYXBzZUNoaWxkUm93cyIsInBhcmVudE9iamVjdCIsImVsZW1JbmRleCIsImV4cGFuZFJvd3MiLCJyb3dzVG9VbnRyaW0iLCJleHBhbmRDaGlsZFJvd3MiLCJ1bnRyaW1Sb3dzIiwiaXNBbnlQYXJlbnRDb2xsYXBzZWQiLCJyb3dzVG9FeHBhbmQiLCJjaGlsZEluZGV4IiwicGFyZW50c1RvQ29sbGFwc2UiLCJwYXJlbnRzVG9FeHBhbmQiLCJhbGxDb2xsYXBzZWQiLCJDU1NfQ0xBU1NFUyIsIl9tZW51RW50cmllcyIsIkNvbnRleHRNZW51VUkiLCJyb3dfYWJvdmUiLCJsYXN0U2VsZWN0aW9uIiwicm93X2JlbG93IiwibmV3RW50cmllcyIsInRyYW5zbGF0ZWRSb3dJbmRleCIsIm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMiLCJIZWFkZXJzVUkiLCJpbmRpY2F0b3JDb250YWluZXIiLCJlbXB0eUluZGljYXRvciIsImV4cGFuZEJ1dHRvbiIsImNvbGxhcHNlQnV0dG9uIiwicm93TGV2ZWwiLCJpbm5lckRpdiIsImlubmVyU3BhbiIsInByZXZpb3VzSW5kaWNhdG9ycyIsImFyaWFFbmFibGVkIiwiaW5pdGlhbENvbnRlbnQiLCJsZXZlbEluZGljYXRvciIsImJ1dHRvbnNDb250YWluZXIiLCJkZWVwZXN0TGV2ZWwiLCJkZWVwZXN0TGV2ZWxJbmRleCIsImRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyIsIm1vdmVkVG9Db2xsYXBzZWQiLCJkcm9wVG9MYXN0Um93IiwicGh5c2ljYWxEcm9wSW5kZXgiLCJhbGxvd01vdmUiLCJwaHlzaWNhbFN0YXJ0SW5kZXhlcyIsInNob3VsZEFsbG93TW92aW5nIiwid2lsbERhdGFDaGFuZ2UiLCJiYXNlUGFyZW50IiwiZ2V0QmFzZVBhcmVudCIsInRhcmdldFBhcmVudCIsImdldFRhcmdldFBhcmVudCIsInNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zIiwibW92ZUNlbGxzTWV0YSIsImJlZm9yZU1vdmVSb3dIb29rQXJncyIsInNob3VsZFRlcm1pbmF0ZSIsInBoeXNpY2FsU3RhcnRJbmRleCIsImJhc2VJbmRleGVzIiwicm93c09mTWV0YSIsIm1vdmluZ0Rvd24iLCJsYXN0Q29sSW5kZXgiLCJfc3RvcmFnZSIsInN0b3JhZ2UiLCJzYXZlVG8iLCJsb2FkVmFsdWUiLCJyZXNldFZhbHVlIiwicmVzZXRBbGwiLCJsb2FkU2F2ZWRLZXlzIiwic2V0SXRlbSIsInNhdmVkS2V5cyIsInNhdmVTYXZlZEtleXMiLCJpdGVtS2V5IiwicmVtb3ZlSXRlbSIsImNsZWFyU2F2ZWRLZXlzIiwia2V5c0pTT04iLCJwcmlvcml0eVBsdWdpbnNRdWV1ZSIsInVuaXF1ZVBsdWdpbnNRdWV1ZSIsInBsdWdpbkNsYXNzIiwidW5pZnlQbHVnaW5Bcmd1bWVudHMiLCJ1bmlxdWVQbHVnaW5zTGlzdCIsIkVSUk9SX1BMVUdJTl9SRUdJU1RFUkVEIiwiX3JlZ2lzdGVyUGx1Z2luIiwiX3ByaW9yaXR5TWFwIiwiX3VuaXF1ZVNldCIsImNyZWF0ZVByaW9yaXR5TWFwIiwiZXJyb3JQcmlvcml0eUV4aXN0cyIsImVycm9yUHJpb3JpdHlOYU4iLCJjcmVhdGVVbmlxdWVTZXQiLCJlcnJvckl0ZW1FeGlzdHMiLCJlcnJvcklkRXhpc3RzIiwiREVGQVVMVF9DQUxMQkFDSyIsInRlc3RSZXN1bHQiLCJpc1NlYXJjaFJlc3VsdCIsIkRFRkFVTFRfUVVFUllfTUVUSE9EIiwiX1NlYXJjaF9icmFuZCIsInNlYXJjaFNldHRpbmdzIiwidXBkYXRlUGx1Z2luU2V0dGluZ3MiLCJfb25CZWZvcmVSZW5kZXJlciIsImJlZm9yZVJlbmRlcmVyQ2FsbGJhY2siLCJxdWVyeVN0ciIsImdldENhbGxiYWNrIiwicXVlcnlNZXRob2QiLCJnZXRRdWVyeU1ldGhvZCIsInF1ZXJ5UmVzdWx0IiwiY2VsbENhbGxiYWNrIiwic2luZ2xlUmVzdWx0IiwibmV3Q2FsbGJhY2siLCJzZXRRdWVyeU1ldGhvZCIsIm5ld1F1ZXJ5TWV0aG9kIiwiZ2V0U2VhcmNoUmVzdWx0Q2xhc3MiLCJzZWFyY2hSZXN1bHRDbGFzcyIsInNldFNlYXJjaFJlc3VsdENsYXNzIiwibmV3RWxlbWVudENsYXNzIiwiY2xhc3NBcnJheSIsIl9Ub3VjaFNjcm9sbF9icmFuZCIsIl9vbkFmdGVyVmlld1JlbmRlciIsImxvY2tlZENvbGxlY3Rpb24iLCJfb25CZWZvcmVUb3VjaFNjcm9sbCIsIl9vbkFmdGVyTW9tZW50dW1TY3JvbGwiLCJzY3JvbGxiYXJzIiwiY2xvbmVzIiwic2Nyb2xsYmFyIiwiX1RyaW1Sb3dzX2JyYW5kIiwidHJpbW1lZFJvd3NNYXAiLCJnZXRUcmltbWVkUm93cyIsImdldFRyaW1tZWRJbmRleGVzIiwiY3VycmVudFRyaW1Db25maWciLCJkZXN0aW5hdGlvblRyaW1Db25maWciLCJ0cmltUm93IiwidHJpbW1pbmdNYXBWYWx1ZXMiLCJpc0FueVJvd1VudHJpbW1lZCIsInRyaW1tZWRJbmRleGVzIiwiaXNUcmltbWVkIiwidW50cmltUm93IiwidW50cmltQWxsIiwic291cmNlUm93cyIsInRyaW1tZWRSb3ciLCJkb25lQWN0aW9ucyIsInVuZG9uZUFjdGlvbnMiLCJpZ25vcmVOZXdBY3Rpb25zIiwiY2hhbmdlc0xlbiIsImNsb25lZENoYW5nZXMiLCJDaGFuZ2VBY3Rpb24iLCJDcmVhdGVSb3dBY3Rpb24iLCJnZXRDZWxsTWV0YXMiLCJnZW5lcmljS2V5cyIsImdlbmVyaWNLZXlzTGVuZ3RoIiwiY2VsbE1ldGFzIiwidW5pcXVlTWV0YSIsImZyb21FbnRyaWVzIiwicmVtb3ZlZERhdGEiLCJSZW1vdmVSb3dBY3Rpb24iLCJDcmVhdGVDb2x1bW5BY3Rpb24iLCJsb2dpY0NvbHVtbnMiLCJvcmlnaW5hbERhdGEiLCJvcmlnUm93IiwiY29sdW1uc01hcCIsInJvd3NNYXAiLCJSZW1vdmVDb2x1bW5BY3Rpb24iLCJDZWxsQWxpZ25tZW50QWN0aW9uIiwiRmlsdGVyc0FjdGlvbiIsIlJvd01vdmVBY3Rpb24iLCJDb2x1bW5Nb3ZlQWN0aW9uIiwiTWVyZ2VDZWxsc0FjdGlvbiIsIlVubWVyZ2VDZWxsc0FjdGlvbiIsIndyYXBwZWRBY3Rpb24iLCJkb25lQWN0aW9uc0NvcHkiLCJuZXdBY3Rpb24iLCJ1bmRvbmVBY3Rpb25zQ29weSIsImFjdGlvbkNsb25lIiwiZW5hYmxlIiwiY2xlYXJVbmRvIiwib25BZnRlckNoYW5nZSIsImRpc2FibGUiLCJBY3Rpb24iLCJhY3Rpb25UeXBlIiwidW5kb25lQ2FsbGJhY2siLCJlbXB0eVJvd3NBdFRoZUVuZCIsImVtcHR5Q29sc0F0VGhlRW5kIiwiY2hhbmdlZFJvdyIsImNoYW5nZWRDb2x1bW4iLCJpc0luVmVydGljYWxWaWV3UG9ydCIsImlzSW5Ib3Jpem9udGFsVmlld1BvcnQiLCJzY3JvbGxDb25maWciLCJvbkZpbmlzaENhbGxiYWNrIiwicmVkb25lQ2FsbGJhY2siLCJyb3dJbmRleGVzU2VxdWVuY2UiLCJyZW1vdmVkQ2VsbE1ldGFzIiwicm93SW5kZXhEZWx0YSIsImNvbHVtblByb3AiLCJjb2x1bW5Qb3NpdGlvbnMiLCJyb3dQb3NpdGlvbnMiLCJhc2NlbmRpbmdJbmRleGVzIiwic29ydEJ5SW5kZXhlcyIsInJlbW92ZWREYXRhTGVuZ3RoIiwic29ydGVkRGF0YSIsInNvcnRlZEhlYWRlcnMiLCJjaGFuZ2VkSW5kZXgiLCJjb250aXF1ZXNJbmRleCIsImhlYWRlckRhdGEiLCJyYW5nZURhdGEiLCJmaW5hbFJvd0luZGV4IiwiZmluYWxDb2x1bW5JbmRleCIsInBsdWdpbkVuYWJsZWQiLCJfdGhpcyRnZXRQbHVnaW4iLCJfZWRpdG9ycyIsIl9yZW5kZXJlcnMiLCJyZWdpc3RlckFsbFJlbmRlcmVycyIsIl92YWxpZGF0b3JzIiwicmVnaXN0ZXJBbGxWYWxpZGF0b3JzIiwiX2NlbGxUeXBlcyIsIl9wbHVnaW5zIiwiX2h0bWxSZW5kZXJlciIsIlJFTkRFUkVSX1RZUEUiLCJyZW5kZXJlckZ1bmMiLCJodG1sUmVuZGVyZXIiLCJBUlJPVyIsImFjQXJyb3dMaXN0ZW5lciIsImJhc2VSZW5kZXJlciIsImNsYXNzZXNUb0FkZCIsImF0dHJpYnV0ZXNUb0FkZCIsIl9iYXNlUmVuZGVyZXIiLCJpc0xpc3RlbmluZ0tleURvd25FdmVudCIsImlzQ2hlY2tib3hMaXN0ZW5lckFkZGVkIiwiQkFEX1ZBTFVFX0NMQVNTIiwiQVRUUl9ST1ciLCJBVFRSX0NPTFVNTiIsImlzQ2hlY2tib3hJbnB1dCIsIm9uQ2xpY2siLCJuZXdDaGVja2JveFZhbHVlIiwiY3JlYXRlSW5wdXQiLCJsYWJlbE9wdGlvbnMiLCJiYWRWYWx1ZSIsImxhYmVsVGV4dCIsImxhYmVsVmFsdWUiLCJmdWxsV2lkdGgiLCJjcmVhdGVMYWJlbCIsInNlcGFyYXRlZCIsImNoYW5nZVNlbGVjdGVkQ2hlY2tib3hlc1N0YXRlIiwidW5jaGVja0NoZWNrYm94Iiwic2VsUmFuZ2UiLCJjaGFuZ2VzUGVyU3ViU2VsZWN0aW9uIiwiY2hhbmdlQ291bnRlciIsImNhY2hlZENlbGxQcm9wZXJ0aWVzIiwidGVtcGxhdGVzIiwiZGF0YUF0Q2VsbCIsImNoYW5nZXNDb3VudCIsImNoYW5nZXNDaHVuayIsImFyZVNlbGVjdGVkQ2hlY2tib3hDZWxscyIsIl9ob3RJbnN0YW5jZSRnZXRTZWxlYyIsIl9ob3RJbnN0YW5jZSRnZXRTZWxlYzIiLCJsYWJlbFByb3BlcnR5IiwibGFiZWxEYXRhIiwiQVVUT0NPTVBMRVRFX1JFTkRFUkVSIiwiQkFTRV9SRU5ERVJFUiIsIkRST1BET1dOX1JFTkRFUkVSIiwiQ0hFQ0tCT1hfUkVOREVSRVIiLCJIQU5EU09OVEFCTEVfUkVOREVSRVIiLCJIVE1MX1JFTkRFUkVSIiwiTlVNRVJJQ19SRU5ERVJFUiIsIlBBU1NXT1JEX1JFTkRFUkVSIiwiU0VMRUNUX1JFTkRFUkVSIiwiVEVYVF9SRU5ERVJFUiIsIlRJTUVfUkVOREVSRVIiLCJnZXRSZWdpc3RlcmVkUmVuZGVyZXJzIiwiX251bWJybyIsImNlbGxDdWx0dXJlIiwiY3VsdHVyZSIsImNlbGxGb3JtYXRQYXR0ZXJuIiwic2hvcnRUYWciLCJsYW5nRGF0YSIsImFsbExhbmd1YWdlcyIsImhhc2hMZW5ndGgiLCJoYXNoU3ltYm9sIiwiZXNjYXBlZCIsInJlbmRlcmVyVGVtcGxhdGUiLCJURU1QTEFURSIsImRlY29yYXRlIiwiX2FjdGl2ZUhlYWRlciIsIl9hcmVhTGF5ZXJlZCIsIl9hcmVhIiwiX2ZvY3VzIiwiX2N1c3RvbVNlbGVjdGlvbiIsIl9IaWdobGlnaHRfYnJhbmQiLCJIaWdobGlnaHQiLCJjcmVhdGVIaWdobGlnaHQiLCJpc0VuYWJsZWRGb3IiLCJoaWdobGlnaHRUeXBlIiwiZGlzYWJsZUhpZ2hsaWdodCIsImRpc2FibGVkQ2VsbFNlbGVjdGlvbiIsInVzZUxheWVyTGV2ZWwiLCJfY3JlYXRlSGlnaGxpZ2h0IiwibGF5ZXJlZEFyZWFzIiwiZ2V0TGF5ZXJlZEFyZWFzIiwiY3JlYXRlQXJlYSIsImFyZWFzIiwiZ2V0QXJlYXMiLCJjcmVhdGVSb3dIZWFkZXIiLCJjcmVhdGVDb2x1bW5IZWFkZXIiLCJjcmVhdGVBY3RpdmVSb3dIZWFkZXIiLCJhY3RpdmVSb3dIZWFkZXJzIiwiZ2V0QWN0aXZlUm93SGVhZGVycyIsImNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlciIsImFjdGl2ZUNvbHVtbkhlYWRlcnMiLCJnZXRBY3RpdmVDb2x1bW5IZWFkZXJzIiwiY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyIiwiYWN0aXZlQ29ybmVySGVhZGVycyIsImdldEFjdGl2ZUNvcm5lckhlYWRlcnMiLCJjcmVhdGVSb3dIaWdobGlnaHQiLCJyb3dIaWdobGlnaHRzIiwiZ2V0Um93SGlnaGxpZ2h0cyIsImNyZWF0ZUNvbHVtbkhpZ2hsaWdodCIsImNvbHVtbkhpZ2hsaWdodHMiLCJnZXRDb2x1bW5IaWdobGlnaHRzIiwiZ2V0Q3VzdG9tU2VsZWN0aW9ucyIsInNlbGVjdGlvbkluc3RhbmNlIiwiY2FjaGVNYXAiLCJoaWdobGlnaHRGYWN0b3J5IiwicmVzdE9wdGlvbnMiLCJfdmlzdWFsU2VsZWN0aW9uIiwiYXJlYUNvcm5lclZpc2libGUiLCJjb2x1bW5DbGFzc05hbWUiLCJjZWxsQ29ybmVyVmlzaWJsZSIsInJvd0NsYXNzTmFtZSIsIlZpc3VhbFNlbGVjdGlvbiIsInRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSIsInZpc2libGVGcm9tQ29vcmRzIiwiZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyIsInZpc2libGVUb0Nvb3JkcyIsInJvd1NlYXJjaERpcmVjdGlvbiIsImNvbHVtblNlYXJjaERpcmVjdGlvbiIsIm5leHRWaXNpYmxlUm93IiwibmV4dFZpc2libGVDb2x1bW4iLCJzZWFyY2hEaXJlY3Rpb24iLCJ0cmltbWVkQ2VsbFJhbmdlIiwiY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZSIsInN5bmNXaXRoIiwiYnJvYWRlckNlbGxSYW5nZSIsImNvb3Jkc0Zyb20iLCJyb3dEaXJlY3Rpb24iLCJjb2x1bW5EaXJlY3Rpb24iLCJyZW5kZXJhYmxlSGlnaGxpZ2h0IiwiY2VsbENvb3Jkc1Zpc3VhbCIsImN1cnJlbnRIaWdobGlnaHQiLCJjZWxsQ29vcmRzUmVuZGVyYWJsZSIsInZpc3VhbEZyb21Db29yZHMiLCJ2aXN1YWxUb0Nvb3JkcyIsInJlbmRlcmFibGVGcm9tQ29vcmRzIiwicmVuZGVyYWJsZVRvQ29vcmRzIiwiaGFuZGxlTW91c2VFdmVudCIsIl9tb3VzZUV2ZW50SGFuZGxlciIsIl9oaWdobGlnaHQiLCJoYW5kbGVycyIsImlzU2hpZnRLZXkiLCJtb3VzZU92ZXIiLCJzZWxlY3RlZENvcm5lciIsIm1hcmtTb3VyY2UiLCJwZXJmb3JtU2VsZWN0aW9uIiwiZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQiLCJtYXJrRW5kU291cmNlIiwidGFibGVQcm9wcyIsIlNlbGVjdGlvblJhbmdlIiwicGVla0J5SW5kZXgiLCJfdHJhbnNmb3JtYXRpb24yIiwiX3RyYW5zZm9ybWF0aW9uIiwiX2ZvY3VzVHJhbnNmb3JtYXRpb24iLCJfaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQiLCJfZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQiLCJfc2VsZWN0aW9uU291cmNlIiwiX2V4cGVjdGVkTGF5ZXJzQ291bnQiLCJpc0NlbGxDb3JuZXJWaXNpYmxlIiwiaXNBcmVhQ29ybmVyVmlzaWJsZSIsInNvdXJjZU5hbWUiLCJzZXRFeHBlY3RlZExheWVycyIsImJlZ2luIiwiaXNJblByb2dyZXNzIiwibXVsdGlwbGVTZWxlY3Rpb24iLCJoaWdobGlnaHRDb29yZHMiLCJpc011bHRpcGxlTW9kZSIsImlzTXVsdGlwbGVTZWxlY3Rpb24iLCJjb29yZHNDbG9uZSIsInNlbGVjdGVkQnlSb3dIZWFkZXIiLCJzZWxlY3RlZEJ5Q29sdW1uSGVhZGVyIiwic2V0UmFuZ2VTdGFydE9ubHkiLCJzZXRSYW5nZUZvY3VzIiwiYXBwbHlBbmRDb21taXQiLCJpc0xhc3RMYXllciIsImFyZWFIaWdobGlnaHQiLCJsYXllcmVkQXJlYUhpZ2hsaWdodCIsInJvd0hlYWRlckhpZ2hsaWdodCIsImNvbHVtbkhlYWRlckhpZ2hsaWdodCIsImFjdGl2ZVJvd0hlYWRlckhpZ2hsaWdodCIsImFjdGl2ZUNvbHVtbkhlYWRlckhpZ2hsaWdodCIsImFjdGl2ZUNvcm5lckhlYWRlckhpZ2hsaWdodCIsInJvd0hpZ2hsaWdodCIsImNvbHVtbkhpZ2hsaWdodCIsInByZXZpb3VzUmFuZ2UiLCJyb3dDb29yZHNGcm9tIiwicm93Q29vcmRzVG8iLCJjb2x1bW5Db29yZHNGcm9tIiwiY29sdW1uQ29vcmRzVG8iLCJoaWdobGlnaHRSb3dIZWFkZXJzIiwiaGlnaGxpZ2h0Q29sdW1uSGVhZGVycyIsImNyZWF0ZU1pc3NpbmdSZWNvcmRzIiwic2V0T2Zmc2V0U2l6ZSIsInRyYW5zZm9ybUVuZCIsImNvbHVtbnNJblJhbmdlIiwicm93c0luUmFuZ2UiLCJjb29yZHNTdGFydEFtb3VudCIsImNvb3Jkc1N0YXJ0IiwiY29vcmRzRW5kIiwiaXNNdWx0aXBsZUxpc3RlbmVyIiwiaXNTZWxlY3RlZEJ5QW55SGVhZGVyIiwic3RhcnRDb29yZHMiLCJlbmRDb29yZHMiLCJTRUxFQ1RJT05fVFlQRV9FTVBUWSIsIlNFTEVDVElPTl9UWVBFX1VOUkVDT0dOSVpFRCIsImtlZXBEaXJlY3Rpb24iLCJyYW5nZVZhbGlkaXR5IiwiY29sdW1uSGVhZGVyTGFzdEluZGV4IiwiZnJvbUNvb3JkcyIsInRvQ29vcmRzIiwicm93SGVhZGVyTGFzdEluZGV4IiwiY3VycmVudExheWVyIiwiYXJlYUxheWVyZWRIaWdobGlnaHQiLCJfVHJhbnNmb3JtYXRpb25fYnJhbmQiLCJUcmFuc2Zvcm1hdGlvbiIsInZpc3VhbENvb3JkcyIsImhpZ2hsaWdodFJlbmRlcmFibGVDb29yZHMiLCJyb3dUcmFuc2Zvcm1EaXIiLCJjb2xUcmFuc2Zvcm1EaXIiLCJfZ2V0VGFibGVTaXplIiwiX3Zpc3VhbFRvWmVyb0Jhc2VkQ29vcmRzIiwiemVyb0Jhc2VkQ29vcmRzIiwiaXNBY3Rpb25JbnRlcnJ1cHRlZCIsIl96ZXJvQmFzZWRUb1Zpc3VhbENvb3JkcyIsInByZXZpb3VzQ29sdW1uIiwicHJldmlvdXNSb3ciLCJyb3dEaXIiLCJjb2xEaXIiLCJfY2xhbXBDb29yZHMiLCJfZmluZEZpcnN0Tm9uSGlkZGVuWmVyb0Jhc2VkUm93IiwiX2ZpbmRGaXJzdE5vbkhpZGRlblplcm9CYXNlZENvbHVtbiIsImNvbHVtblJlc3REZWx0YSIsInJvd1Jlc3REZWx0YSIsImJvdHRvbVJvd0luZGV4IiwibmV3VmlzdWFsQ29vcmRzIiwidW5vcmRlcmVkSW5kZXhlcyIsImNvbHVtbk5vbkhlYWRlclN0YXJ0Iiwib3JkZXJlZEluZGV4ZXMiLCJyb3dOb25IZWFkZXJTdGFydCIsIlNFTEVDVElPTl9UWVBFX0FSUkFZIiwiU0VMRUNUSU9OX1RZUEVfT0JKRUNUIiwiU0VMRUNUSU9OX1RZUEVTIiwiQVJSQVlfVFlQRV9QQVRURVJOIiwicm9vdENhbGwiLCJjaGlsZENhbGwiLCJfY2FsbFN5bWJvbCIsImlzUm9vdENhbGwiLCJmaXJzdEl0ZW0iLCJpc09iamVjdFR5cGUiLCJvcmlnUm93U3RhcnQiLCJvcmlnQ29sdW1uU3RhcnQiLCJvcmlnUm93RW5kIiwib3JpZ0NvbHVtbkVuZCIsImdldEFsbENvbW1hbmRzIiwiX2Nsb3NlQW5kU2F2ZSIsIl9jbG9zZUFuZFNhdmVCeUFycm93S2V5cyIsIl9jbG9zZUFuZFNhdmVCeUVudGVyIiwiX2Nsb3NlV2l0aG91dFNhdmluZyIsIl9mYXN0T3BlbiIsIl9vcGVuIiwibmV4dFJvd0luZGV4VG9TZWxlY3QiLCJzY3JvbGxQYWRkaW5nIiwibmV4dFZlcnRpY2FsU2Nyb2xsIiwiX2Rvd24iLCJfZG93bkJ5Vmlld3BvcnRIZWlnaHQiLCJfdG9Db2x1bW5zIiwiX3RvTW9zdEJvdHRvbSIsIl90b01vc3RJbmxpbmVFbmQiLCJfdG9Nb3N0SW5saW5lU3RhcnQiLCJfdG9Nb3N0TGVmdCIsIl90b01vc3RSaWdodCIsIl90b01vc3RUb3AiLCJfdG9Sb3dzIiwiX3VwIiwiX3VwQnlWaWV3cG9ydEhlaWdodCIsImlzRm9jdXNIaWdobGlnaHRlZEJ5SGVhZGVyIiwibmV3RnJvbSIsImZpeGVkQ29sdW1ucyIsImNyZWF0ZUtleWJvYXJkU2hvcnRjdXRDb21tYW5kc1Bvb2wiLCJhbGxDb21tYW5kcyIsIl9leHRlbmRDZWxsc1NlbGVjdGlvbiIsIl9tb3ZlQ2VsbFNlbGVjdGlvbiIsIl9lbXB0eVNlbGVjdGVkQ2VsbHMiLCJfc2Nyb2xsVG9Gb2N1c2VkQ2VsbCIsIl9zZWxlY3RBbGxDZWxscyIsIl9zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMiLCJfcG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsInJvd3NTdGVwIiwiX2lubGluZUVuZCIsIl90b01vc3RCb3R0b21JbmxpbmVFbmQiLCJfdG9Nb3N0VG9wSW5saW5lU3RhcnQiLCJmaXhlZFJvd3MiLCJ2YWx1ZVRvUG9wdWxhdGUiLCJjZWxsVmFsdWVzIiwidmlzaWJsZUNvb3Jkc0Zyb20iLCJ2aXNpYmxlQ29vcmRzVG8iLCJzY3JvbGxDb29yZHMiLCJvZmZzZXRDb2x1bW5zIiwib2Zmc2V0Um93cyIsInNob3J0Y3V0c0VkaXRvckNvbnRleHQiLCJjb21tYW5kc1Bvb2wiLCJfY29tbWFuZHMiLCJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIiwiZWRpdG9yQ2xvc2VBbmRTYXZlIiwiZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMiLCJlZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmciLCJzaG9ydGN1dHNHcmlkQ29udGV4dCIsImVkaXRvckZhc3RPcGVuIiwiZWRpdG9yT3BlbiIsInNlbGVjdEFsbENlbGxzIiwic2VsZWN0QWxsQ2VsbHNBbmRIZWFkZXJzIiwicG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Db2x1bW5zIiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MiLCJtb3ZlQ2VsbFNlbGVjdGlvblVwIiwibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLCJleHRlbmRDZWxsc1NlbGVjdGlvblVwIiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RUb3AiLCJtb3ZlQ2VsbFNlbGVjdGlvbkRvd24iLCJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsImV4dGVuZENlbGxzU2VsZWN0aW9uRG93biIsImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90dG9tIiwibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IiwibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0IiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RMZWZ0IiwibW92ZUNlbGxTZWxlY3Rpb25SaWdodCIsIm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0UmlnaHQiLCJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RSaWdodCIsIm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lU3RhcnQiLCJpc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMiLCJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IiwibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3BJbmxpbmVTdGFydCIsIm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIiwiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLCJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCIsIm1vdmVDZWxsU2VsZWN0aW9uVXBCeVZpZXdwb3J0SGlnaHQiLCJleHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCIsIm1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLCJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IiwibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVTdGFydCIsIm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kIiwiX2dyaWQiLCJpc0NvbnRleHRPYmplY3QiLCJfX2tpbmRPZiIsIm9iamVjdFRvQ2hlY2siLCJjcmVhdGVDb250ZXh0IiwiU0hPUlRDVVRTIiwibmV3U2hvcnRjdXQiLCJrZXlDb21iaW5hdGlvbiIsIm5vcm1hbGl6ZWRLZXlzIiwibm9ybWFsaXplS2V5cyIsInNob3J0Y3V0IiwiZ2V0U2hvcnRjdXRzIiwiaGFzU2hvcnRjdXQiLCJsZWZ0T3B0aW9ucyIsImdldEtleXNMaXN0IiwiY3JlYXRlS2V5c09ic2VydmVyIiwiUFJFU1NFRF9LRVlTIiwicHJlc3MiLCJyZWxlYXNlQWxsIiwiaXNQcmVzc2VkIiwiX2NvbnRleHQiLCJfcmVjb3JkZXIiLCJDT05URVhUUyIsImFjdGl2ZUNvbnRleHROYW1lIiwiZ2V0QWN0aXZlQ29udGV4dE5hbWUiLCJpc0N0cmxLZXlTaWxlbmNlZCIsInJlY29yZGVyQ2FsbGJhY2siLCJhY3RpdmVDb250ZXh0IiwiaXNFeGVjdXRpb25DYW5jZWxsZWQiLCJrZXlSZWNvcmRlciIsInVzZVJlY29yZGVyIiwibW91bnQiLCJ1bm1vdW50IiwiaXNNb2RpZmllcktleSIsInByZXNzZWRLZXkiLCJNT0RJRklFUl9LRVlTIiwiZ2V0UHJlc3NlZE1vZGlmaWVyS2V5cyIsIm1lcmdlTWV0YUtleXMiLCJwcmVzc2VkTW9kaWZpZXJLZXlzIiwib25rZXlkb3duIiwibm9ybWFsaXplRXZlbnRLZXkiLCJleHRyYU1vZGlmaWVyS2V5cyIsInByZXNzZWRLZXlzIiwib25rZXlkb3duRm9yTW9kS2V5cyIsIm1vZGlmaWVyS2V5c09ic2VydmVyIiwib25rZXl1cEZvck1vZEtleXMiLCJvbmJsdXIiLCJldmVudFRhcmdldCIsImluc3RhbmNlQ291bnRlciIsIm1vZEtleUxpc3RlbmVycyIsIl9rZXlPYnNlcnZlciIsIm1hcHBpbmdzIiwibG93ZXJjYXNlS2V5IiwiY29kZVRvS2V5UmVnRXhwIiwia2V5Q29kZU5hbWVzIiwibm9ybWFsaXplZEtleSIsIl9jb2x1bW5IZWFkZXJzQ291bnQiLCJfcm93SGVhZGVyc0NvdW50IiwiX3NlbGVjdGlvbk1vdXNlRG93biIsIl9tb3VzZURvd24iLCJfbGFzdFdpZHRoIiwiX2xhc3RIZWlnaHQiLCJfVGFibGVWaWV3X2JyYW5kIiwiX2dldEFyaWFDb2xjb3VudCIsIl91cGRhdGVBcmlhQ29sY291bnQiLCJpbml0aWFsaXplV2Fsa29udGFibGUiLCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCJvcmlnaW5hbFN0eWxlIiwiaXNUZXh0U2VsZWN0aW9uQWxsb3dlZCIsImlzT3V0c2lkZUlucHV0RWxlbWVudCIsIm9yaWdpbmFsVGFyZ2V0IiwiZXZlbnRYIiwiZXZlbnRZIiwiaXNUYXJnZXRXZWJDb21wb25lbnQiLCJ0cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzIiwidHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4IiwiY291bnRSZW5kZXJhYmxlSW5kZXhlcyIsIm1heEVsZW1lbnRzIiwiY29uc2lkZXJlZEVsZW1lbnRzIiwiZmlyc3ROb3RIaWRkZW5JbmRleCIsImluY3JlbWVudEJ5IiwiY291bnROb3RIaWRkZW5JbmRleGVzIiwiY291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzIiwicmVuZGVyYWJsZUluZGV4ZXNDb3VudCIsImZpcnN0VmlzaWJsZUluZGV4Iiwibm90SGlkZGVuSW5kZXhlcyIsImNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQiLCJ2aXN1YWxGaXhlZENvbHVtbnNTdGFydCIsImNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wIiwidmlzdWFsRml4ZWRSb3dzVG9wIiwiY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20iLCJ2aXN1YWxGaXhlZFJvd3NCb3R0b20iLCJmaXhlZEFsbFJvd3MiLCJmaXhlZEFsbENvbHVtbnMiLCJ3YWxrb250YWJsZUNvbmZpZyIsImhlYWRlclJlbmRlcmVycyIsImFwcGVuZFJvd0hlYWRlciIsImFjdGl2ZVd0IiwiYmVmb3JlUmVuZGVyIiwiYWZ0ZXJSZW5kZXIiLCJhcmVDb2x1bW5IZWFkZXJzU2VsZWN0ZWQiLCJhcmVSb3dIZWFkZXJzU2VsZWN0ZWQiLCJuZXdWaXN1YWxSb3ciLCJuZXdWaXN1YWxDb2x1bW4iLCJzZWxlY3Rpb25Gb3JMYXllciIsImJvcmRlckNsYXNzTmFtZSIsInN0YXJ0UmVuZGVyYWJsZVJvdyIsInN0YXJ0UmVuZGVyYWJsZUNvbHVtbiIsImVuZFJlbmRlcmFibGVSb3ciLCJlbmRSZW5kZXJhYmxlQ29sdW1uIiwidmlzdWFsQ29ybmVycyIsInZpc3VhbEluZGV4ZXMiLCJ2aWV3cG9ydE9mZnNldCIsInJlbmRlcmFibGVSb3dzIiwiZmlyc3RSZW5kZXJlZFJvdyIsImxhc3RSZW5kZXJlZFJvdyIsInJlbmRlcmFibGVDb2x1bW5zIiwid2hpY2giLCJpc0NoaWxkT2ZUYWJsZUJvZHkiLCJpc1NlbGVjdGVkT25seUNlbGwiLCJpc0NlbGxFZGl0ZWQiLCJ1cGRhdGVDZWxsSGVhZGVyIiwicmVuZGVyZWRJbmRleCIsInBhcmVudE92ZXJsYXkiLCJfb2JzZXJ2ZXIiLCJfb2JzZXJ2ZXJzIiwiX2luZGV4TWF0cml4IiwiX2N1cnJlbnRJbmRleFN0YXRlIiwiX2lzTWF0cml4SW5kZXhlc0luaXRpYWxpemVkIiwiX2luaXRpYWxJbmRleFZhbHVlIiwiQ2hhbmdlc09ic2VydmFibGUiLCJpbml0aWFsSW5kZXhWYWx1ZSIsImNyZWF0ZU9ic2VydmVyIiwiQ2hhbmdlc09ic2VydmVyIiwiX3dyaXRlSW5pdGlhbENoYW5nZXMiLCJhcnJheURpZmYiLCJpbmRleGVzU3RhdGUiLCJjdXJyZW50SW5kZXhTdGF0ZSIsIl9jdXJyZW50SW5pdGlhbENoYW5nZXMiLCJpbml0aWFsQ2hhbmdlcyIsImJhc2VBcnJheSIsIm5ld0FycmF5IiwiX21hcENvbGxlY3Rpb24iLCJfbWFwcyIsIl9tYXBDb2xsZWN0aW9ucyIsIl9vYnNlcnZhYmxlIiwiQWdncmVnYXRlZENvbGxlY3Rpb24iLCJ2YWx1ZXNGb3JJbmRleCIsIk1hcENvbGxlY3Rpb24iLCJpbmRleGVzU2VxdWVuY2VDaGFuZ2VkIiwidXBkYXRlQ2FjaGUiLCJpbmRleGVzQ2hhbmdlU291cmNlIiwidHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsImNoYW5nZWRNYXAiLCJ0cmltbWVkSW5kZXhlc0NoYW5nZWQiLCJ2YXJpb3VzTWFwc0NvbGxlY3Rpb24iLCJpc0JhdGNoZWQiLCJpbmRleE1hcFR5cGUiLCJoaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZSIsImluZGV4TmFtZSIsIm1hcFR5cGUiLCJjcmVhdGVJbmRleE1hcCIsInVuaXF1ZU5hbWUiLCJpbmRleE1hcCIsInVucmVnaXN0ZXIiLCJub3RUcmltbWVkSW5kZXhlc0NhY2hlIiwiZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4IiwicmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlIiwiZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUiLCJmcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlIiwiZnJvbVZpc3VhbEluZGV4Iiwic2VhcmNoQWxzb090aGVyV2F5QXJvdW5kIiwidmlzaWJsZUluZGV4ZXMiLCJub3RIaWRkZW5JbmRleGVzQ2FjaGUiLCJpbml0RXZlcnkiLCJjdXJyZW50SW5kZXhDb3VudCIsImluZGV4ZXNUb0JlUmVtb3ZlZCIsImdldE5vdEhpZGRlbkluZGV4ZXMiLCJnZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoIiwiZ2V0UmVuZGVyYWJsZUluZGV4ZXMiLCJwaHlzaWNhbE1vdmVkSW5kZXhlcyIsIm5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoIiwibW92ZWRJbmRleGVzTGVuZ3RoIiwibm90TW92ZWRJbmRleGVzIiwibm90VHJpbW1lZE5vdE1vdmVkSXRlbXMiLCJkZXN0aW5hdGlvblBvc2l0aW9uIiwiZ2V0TWVyZ2VkVmFsdWVBdEluZGV4IiwiZmlyc3RJbnNlcnRlZFZpc3VhbEluZGV4IiwiYW1vdW50T2ZJbmRleGVzIiwibnRoVmlzaWJsZUluZGV4IiwiZmlyc3RJbnNlcnRlZFBoeXNpY2FsSW5kZXgiLCJuZXh0SW5kZXgiLCJzdGVwc0Zyb21TdGFydCIsImluc2VydFRvRXZlcnkiLCJyZW1vdmVGcm9tRXZlcnkiLCJhbnlDYWNoZWRJbmRleENoYW5nZWQiLCJjYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcyIsImNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMiLCJuck9mTm90VHJpbW1lZEluZGV4ZXMiLCJuck9mUmVuZGVyYWJsZUluZGV4ZXMiLCJhZ2dyZWdhdGlvbkZ1bmN0aW9uIiwiZmFsbGJhY2tWYWx1ZSIsIm1lcmdlZFZhbHVlc0NhY2hlIiwibWFwc1ZhbHVlc01hdHJpeCIsImluZGV4ZXNWYWx1ZXNNYXRyaXgiLCJtYXBzTGVuZ3RoIiwibWFwSW5kZXgiLCJyZWFkRnJvbUNhY2hlIiwidmFsdWVBdEluZGV4IiwiX2FnZ3JlZ2F0ZWRDb2xsZWN0aW9uIiwicmVnaXN0ZXJlZE1hcHMiLCJjb2xsZWN0aW9uIiwiX3BoeXNpY2FsSW5kZXhUb1ZhbHVlTWFwIiwiaW5kZXhlc0xpc3QiLCJhdmFpbGFibGVJbmRleE1hcFR5cGVzIiwiX2hpZGluZ01hcCIsIl9pbmRleE1hcCIsIl9saW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZU1hcCIsIl90cmltbWluZ01hcCIsIl9pbmRleGVzU2VxdWVuY2UyIiwic2V0RGVmYXVsdFZhbHVlcyIsIl9waHlzaWNhbGx5SW5kZXhlZCIsIl9hY3Rpb25zT25JbmRleGVzIiwib3JkZXJPZkluZGV4ZXMiLCJmaXJzdEluc2VydGVkSW5kZXgiLCJhbHRlclN0cmF0ZWdpZXMiLCJpbmRleGF0aW9uU3RyYXRlZ3kiLCJpbnNlcnRlZFZhbHVlc01hcHBpbmciLCJpbnNlcnRlZEluZGV4IiwidGV4dEhvbGRlciIsInRleHRDb250YWluZXIiLCJvYnNlcnZlZEVsZW1lbnQiLCJ3aGl0ZVNwYWNlIiwiZWxlbWVudFN0eWxlIiwiZGVsYXllZFJlc2l6ZSIsImVsZW1lbnRUb09ic2VydmUiLCJkb09ic2VydmUiLCJleHRlbmREZWZhdWx0cyIsIk5vZGVTdHJ1Y3R1cmUiLCJ0ZW1wIiwiaW50ZXJydXB0IiwiaGFzQ3ljbGUiLCJmYXN0Iiwic2xvdyIsInJlY3Vyc2l2ZVJldmVyc2UiLCJwcmlvcml0eU1hcCIsIkRFRkFVTFRfRVJST1JfUFJJT1JJVFlfRVhJU1RTIiwiREVGQVVMVF9FUlJPUl9QUklPUklUWV9OQU4iLCJvcmRlciIsIkFTQyIsIk9SREVSX01BUCIsIkRFU0MiLCJkZXB0aEZpcnN0UHJlT3JkZXIiLCJjb250aW51ZVRyYXZlcnNlIiwiVFJBVkVSU0FMX0RGX1BPU1QiLCJUUkFWRVJTQUxfQkYiLCJERUZBVUxUX1RSQVZFUlNBTF9TVFJBVEVHWSIsIlRSQVZFUlNBTF9TVFJBVEVHSUVTIiwiZGVwdGhGaXJzdFBvc3RPcmRlciIsIlRyZWVOb2RlIiwibm9kZVRyZWUiLCJjbG9uZWROb2RlIiwidHJhdmVyc2FsU3RyYXRlZ3kiLCJ1bmlxdWVNYXAiLCJERUZBVUxUX0VSUk9SX0lEX0VYSVNUUyIsIml0ZW1JZCIsInVuaXF1ZVNldCIsIkRFRkFVTFRfRVJST1JfSVRFTV9FWElTVFMiLCJjcmVhdGVDb2xHcm91cHNDb2wiLCJjb2xIZWFkZXIiLCJhcHBlbmRDb2x1bW5IZWFkZXJzUm93IiwiY29sdW1uT2JqZWN0IiwidEJvZHkiLCJpbmplY3RlZCIsImluamVjdFRhYmxlIiwic2V0U2V0dGluZ3MiLCJjcmVhdGVDb2xFbGVtZW50IiwiZG9tRnJhZ21lbnQiLCJ0SGVhZCIsImlzVmVydGljYWwiLCJpc0hvcml6b250YWwiLCJ0YWJsZUxheW91dCIsImNvbnRhaW5lckNsYXNzTmFtZSIsInZpc2l0ZWRQYWdlcyIsIl91cGRhdGVTdGF0ZSIsIm5ld0luZGV4IiwiaW5wdXRMZW4iLCJjb2x1bW5zUmVzdWx0IiwicGFyc2VkQ2VsbERhdGEiLCJyZXBlYXQiLCJzZXR0aW5nc09iaiIsInRlbXBFbGVtIiwiY2hlY2tFbGVtZW50IiwiZXNjYXBlZEFkamFjZW50SFRNTCIsImNlbGxGcmFnbWVudCIsIm9wZW5pbmdUYWciLCJyZXBsYWNlQWxsIiwiaXNIVE1MVGFibGUiLCJnZW5lcmF0b3IiLCJ0ckVsZW1lbnQiLCJ0Rm9vdCIsInRoUm93c0xlbiIsInRoUm93cyIsImlzRGF0YVJvdyIsImhlYWRlcnNSb3ciLCJuZXh0SGVhZGVyIiwidEJvZGllcyIsInNlY3Rpb25zIiwiZGF0YUFyciIsImNlbGxzTGVuIiwiY2VsbElkIiwicm93U3BhbiIsInJzdGFydCIsImNzdGFydCIsInN0eWxlQXR0ciIsInJlZ0VzY2FwZWRDaGFycyIsIkVTQ0FQRURfSFRNTF9DSEFSUyIsInJvd01vZGlmaWVyIiwiY29sdW1uTW9kaWZpZXIiLCJpc0NvbHVtbkhlYWRlcnNSb3ciLCJDRUxMUyIsImlzUm93SGVhZGVyc0NvbHVtbiIsInJvb3RTeW1ib2wiLCJTYW1wbGVzR2VuZXJhdG9yIiwiU0FNUExFX0NPVU5UIiwiZGF0YUZhY3RvcnkiLCJnZXRTYW1wbGVDb3VudCIsImN1c3RvbVNhbXBsZUNvdW50Iiwic2FtcGxlQ291bnQiLCJhbGxvd0R1cGxpY2F0ZXMiLCJnZW5lcmF0ZVNhbXBsZXMiLCJzcGVjaWZpZXJSYW5nZSIsImdlbmVyYXRlU2FtcGxlIiwic3BlY2lmaWVyVmFsdWUiLCJjb21wdXRlZEtleSIsInNhbXBsZWRWYWx1ZXMiLCJoYXNDdXN0b21CdW5kbGVTZWVkIiwic2VlZCIsIm5lZWRlZCIsIm5hbWVzcGFjZSIsInN1YkNvbGxlY3Rpb24iLCJWQUxJREFUT1JfVFlQRSIsInZhbHVlVG9WYWxpZGF0ZSIsIm9yaWdpbmFsVmFsIiwiZm91bmQiLCJzbGVuIiwiZGF0ZUVkaXRvciIsImlzVmFsaWRGb3JtYXQiLCJpc1ZhbGlkRGF0ZSIsImNvcnJlY3RlZFZhbHVlIiwiZGF0ZUZyb21EYXRlIiwiZGF0ZUZyb21Nb21lbnQiLCJpc0FscGhhbnVtZXJpYyIsIkFVVE9DT01QTEVURV9WQUxJREFUT1IiLCJEQVRFX1ZBTElEQVRPUiIsIkRST1BET1dOX1ZBTElEQVRPUiIsIk5VTUVSSUNfVkFMSURBVE9SIiwiVElNRV9WQUxJREFUT1IiLCJnZXRSZWdpc3RlcmVkVmFsaWRhdG9ycyIsIlNUUklDVF9GT1JNQVRTIiwidHdvRGlnaXRWYWx1ZSIsImlzVmFsaWRUaW1lIiwicmVxdWlyZSIsInByb21pc2VzIiwiRmlsZXMiLCJ6aXBmaWxlIiwib3BlblppcCIsIm9wZW5BcnJheUJ1ZmZlciIsImRvY3VtZW50cyIsImh0bWxQYXRocyIsIkh0bWwiLCJ3cml0ZXJzIiwiRG9jdW1lbnRDb252ZXJzaW9uIiwibm90ZU51bWJlciIsIm5vdGVSZWZlcmVuY2VzIiwicmVmZXJlbmNlZENvbW1lbnRzIiwiaWRQcmVmaXgiLCJpZ25vcmVFbXB0eVBhcmFncmFwaHMiLCJkZWZhdWx0UGFyYWdyYXBoU3R5bGUiLCJ0b3BMZXZlbEVsZW1lbnQiLCJzdHlsZU1hcCIsImNvbnZlcnRFbGVtZW50cyIsImVsZW1lbnRUb0h0bWwiLCJlbGVtZW50Q29udmVydGVycyIsImZpbmRIdG1sUGF0aEZvclJ1blByb3BlcnR5IiwiZWxlbWVudFR5cGUiLCJkZWZhdWx0VGFnTmFtZSIsImZpbmRIdG1sUGF0aCIsImZyZXNoIiwiZGVmYXVsdFBhdGgiLCJmaW5kU3R5bGUiLCJub3RlSHRtbElkIiwicmVmZXJlbnRIdG1sSWQiLCJub3RlVHlwZSIsIm5vdGVJZCIsIm5vdGVSZWZIdG1sSWQiLCJyZWZlcmVuY2VIdG1sSWQiLCJyZWZlcmVuY2VUeXBlIiwicmVmZXJlbmNlSWQiLCJodG1sSWQiLCJkZWZhdWx0VGFibGVQYXRoIiwiY29udmVydENvbW1lbnQiLCJyZWZlcmVuY2VkQ29tbWVudCIsIm5vbkZyZXNoRWxlbWVudCIsImZyZXNoRWxlbWVudCIsImNvbW1lbnRJZCIsImNvbnZlcnRJbWFnZSIsIm5vdGVzTm9kZXMiLCJub3RlUmVmZXJlbmNlIiwibm90ZXMiLCJ1bnJlY29nbmlzZWRTdHlsZVdhcm5pbmciLCJodG1sUGF0aEZvclBhcmFncmFwaCIsImZvcmNlV3JpdGUiLCJwYXRocyIsImlzU21hbGxDYXBzIiwiaXNBbGxDYXBzIiwiaXNTdHJpa2V0aHJvdWdoIiwiaXNVbmRlcmxpbmUiLCJ2ZXJ0aWNhbEFsaWdubWVudCIsInN1YnNjcmlwdCIsInN1cGVyc2NyaXB0IiwiaXNJdGFsaWMiLCJpc0JvbGQiLCJzdHlsZVBhdGgiLCJ0YXJnZXRGcmFtZSIsImJhY2tMaW5rIiwiZWxlbWVudFdpdGhUYWciLCJyZWZlcmVuY2UiLCJpZ25vcmUiLCJjb21tZW50QXV0aG9yTGFiZWwiLCJkYXRhVXJpIiwiYXR0ZW1wdCIsImNhdWdodCIsImRlZmVycmVkSWQiLCJib2R5SW5kZXgiLCJ0YWJsZVJvdyIsImlzVGFibGVIZWFkZXIiLCJoZWFkUm93cyIsImJvZHlSb3dzIiwiY29udmVydFRhYmxlQ2hpbGRyZW4iLCJicmVha1R5cGUiLCJodG1sUGF0aEZvckJyZWFrIiwiZGVmZXJyZWROb2RlcyIsIndhbGtIdG1sIiwiZGVmZXJyZWRWYWx1ZXMiLCJtYXBTZXJpZXMiLCJkZWZlcnJlZCIsIndyaXRlciIsInByZXR0eVByaW50Iiwib3V0cHV0Rm9ybWF0Iiwic2ltcGxpZnkiLCJyZXBsYWNlRGVmZXJyZWQiLCJSZXN1bHQiLCJhc1N0cmluZyIsIkRvY3VtZW50Q29udmVydGVyIiwiaW5kZXhCeSIsInN0eWxlTmFtZSIsImZsYXR0ZW4iLCJhdXRob3JJbml0aWFscyIsInBhcmFncmFwaCIsInRhYiIsImNvbW1lbnRSZWZlcmVuY2UiLCJ0YWJsZUNlbGwiLCJib29rbWFya1N0YXJ0IiwiYmFzZWxpbmUiLCJOb3RlcyIsIl9ub3RlcyIsIm5vdGVLZXkiLCJCcmVhayIsImZpbmROb3RlQnlLZXkiLCJEb2N1bWVudCIsIlBhcmFncmFwaCIsIm51bWJlcmluZyIsImZpcnN0TGluZSIsImhhbmdpbmciLCJSdW4iLCJUZXh0IiwiVGFiIiwiTm90ZVJlZmVyZW5jZSIsIk5vdGUiLCJhdXRob3JOYW1lIiwicmVhZEltYWdlIiwicmVhZEFzQmFzZTY0U3RyaW5nIiwicmVhZEFzQnVmZmVyIiwiYWx0VGV4dCIsIlRhYmxlUm93IiwiVGFibGVDZWxsIiwibGluZUJyZWFrIiwicGFnZUJyZWFrIiwiY29sdW1uQnJlYWsiLCJCb29rbWFya1N0YXJ0IiwiY3JlYXRlQm9keVJlYWRlciIsInJlYWRYbWxFbGVtZW50IiwiQm9keVJlYWRlciIsInJlYWRYbWxFbGVtZW50cyIsIl9yZWFkTnVtYmVyaW5nUHJvcGVydGllcyIsInJlYWROdW1iZXJpbmdQcm9wZXJ0aWVzIiwiZGluZ2JhdFRvVW5pY29kZSIsInVyaXMiLCJjb21wbGV4RmllbGRTdGFjayIsImN1cnJlbnRJbnN0clRleHQiLCJkZWxldGVkUGFyYWdyYXBoQ29udGVudHMiLCJjb250ZW50VHlwZXMiLCJkb2N4RmlsZSIsImNvbWJpbmVSZXN1bHRzIiwieG1sRWxlbWVudFJlYWRlcnMiLCJpZ25vcmVFbGVtZW50cyIsImVtcHR5UmVzdWx0V2l0aE1lc3NhZ2VzIiwiZW1wdHlSZXN1bHQiLCJyZWFkUGFyYWdyYXBoSW5kZW50IiwicmVhZFVuZGVybGluZSIsInJlYWRCb29sZWFuRWxlbWVudCIsInJlYWRTdHlsZSIsInN0eWxlVGFnTmFtZSIsInN0eWxlVHlwZSIsImZpbmRTdHlsZUJ5SWQiLCJzdHlsZUVsZW1lbnQiLCJ1bmRlZmluZWRTdHlsZVdhcm5pbmciLCJlbGVtZW50UmVzdWx0V2l0aE1lc3NhZ2VzIiwidW5rbm93bkNvbXBsZXhGaWVsZCIsIm5vdGVSZWZlcmVuY2VSZWFkZXIiLCJlbGVtZW50UmVzdWx0IiwicmVhZENoaWxkRWxlbWVudHMiLCJwYXJhZ3JhcGhQcm9wZXJ0aWVzRWxlbWVudCIsImZpcnN0T3JFbXB0eSIsImNoaWxkcmVuWG1sIiwiUmVhZFJlc3VsdCIsImZpbmRQYXJhZ3JhcGhTdHlsZUJ5SWQiLCJyZWFkUGFyYWdyYXBoU3R5bGUiLCJyZWFkUGFyYWdyYXBoUHJvcGVydGllcyIsImluc2VydEV4dHJhIiwiZmluZENoYXJhY3RlclN0eWxlQnlJZCIsInJlYWRSdW5TdHlsZSIsImZvbnRTaXplU3RyaW5nIiwicmVhZFJ1blByb3BlcnRpZXMiLCJ0b3BIeXBlcmxpbmsiLCJoeXBlcmxpbmtPcHRpb25zIiwiY29tcGxleEZpZWxkIiwiZXh0ZXJuYWxMaW5rUmVzdWx0IiwiaW50ZXJuYWxMaW5rUmVzdWx0IiwicGFyc2VIeXBlcmxpbmtGaWVsZENvZGUiLCJjaGFyIiwidW5pY29kZUNoYXJhY3RlciIsInJlbGF0aW9uc2hpcElkIiwiZmluZFRhcmdldEJ5UmVsYXRpb25zaGlwSWQiLCJyZXBsYWNlRnJhZ21lbnQiLCJwcm9wZXJ0aWVzUmVzdWx0IiwiZmluZFRhYmxlU3R5bGVCeUlkIiwicmVhZFRhYmxlU3R5bGUiLCJyZWFkVGFibGVQcm9wZXJ0aWVzIiwiY2FsY3VsYXRlUm93U3BhbnMiLCJncmlkU3BhbiIsIl92TWVyZ2UiLCJyZWFkVk1lcmdlIiwidG9FeHRyYSIsInJlYWREcmF3aW5nRWxlbWVudCIsImZpbmRFbWJlZGRlZEltYWdlRmlsZSIsInJlYWRCbGlwIiwiYmxpcCIsImRlc2NyIiwiYmxpcEltYWdlRmlsZSIsImVtYmVkUmVsYXRpb25zaGlwSWQiLCJsaW5rUmVsYXRpb25zaGlwSWQiLCJpbWFnZVBhdGgiLCJmaW5kQmxpcEltYWdlRmlsZSIsInVyaVRvWmlwRW50cnlOYW1lIiwiaW1hZ2VGaWxlIiwiZmluZENvbnRlbnRUeXBlIiwic3VwcG9ydGVkSW1hZ2VUeXBlcyIsIm51bUlkIiwiZmluZExldmVsIiwibGV2ZWxCeVN0eWxlSWQiLCJmaW5kTGV2ZWxCeVBhcmFncmFwaFN0eWxlSWQiLCJfcmVzdWx0IiwiY29tYmluZSIsInBsdWNrIiwiaWRlbnRpdHkiLCJqb2luRWxlbWVudHMiLCJzZWNvbmQiLCJjcmVhdGVDb21tZW50c1JlYWRlciIsImJvZHlSZWFkZXIiLCJyZWFkQ29tbWVudEVsZW1lbnQiLCJyZWFkT3B0aW9uYWxBdHRyaWJ1dGUiLCJyZWFkQ29udGVudFR5cGVzRnJvbVhtbCIsImV4dGVuc2lvbkRlZmF1bHRzIiwiZmFsbGJhY2tDb250ZW50VHlwZXMiLCJvdmVycmlkZUNvbnRlbnRUeXBlIiwicGF0aFBhcnRzIiwiZmFsbGJhY2siLCJkZWZhdWx0Q29udGVudFR5cGVzIiwiRG9jdW1lbnRYbWxSZWFkZXIiLCJjb252ZXJ0WG1sVG9Eb2N1bWVudCIsInJlYWRDb250ZW50VHlwZXNGcm9tWmlwRmlsZSIsInBhcnRQYXRocyIsImZpbmRQYXJ0UGF0aHMiLCJyZWxhdGl2ZVRvRmlsZSIsImFsc28iLCJ6aXBGaWxlIiwieG1sRmlsZVJlYWRlciIsInJlYWRFbGVtZW50Iiwic3R5bGVzUmVhZGVyIiwicmVhZFN0eWxlc1htbCIsImRlZmF1bHRTdHlsZXMiLCJudW1iZXJpbmdYbWwiLCJyZWFkTnVtYmVyaW5nWG1sIiwiZGVmYXVsdE51bWJlcmluZyIsImZvb3Rub3RlcyIsInJlYWRYbWxGaWxlV2l0aEJvZHkiLCJub3Rlc1JlYWRlciIsImNyZWF0ZUZvb3Rub3Rlc1JlYWRlciIsImVuZG5vdGVzIiwiY3JlYXRlRW5kbm90ZXNSZWFkZXIiLCJjb21tZW50c1JlYWRlciIsIm1haW5Eb2N1bWVudCIsIl9maW5kUGFydFBhdGhzIiwicmVhZFhtbEZyb21aaXBGaWxlIiwicmVsYXRpb25zaGlwc1JlYWRlciIsImNvbnRlbnRUeXBlc1JlYWRlciIsInJlYWRQYWNrYWdlUmVsYXRpb25zaGlwcyIsInBhY2thZ2VSZWxhdGlvbnNoaXBzIiwibWFpbkRvY3VtZW50UGF0aCIsImZpbmRQYXJ0UGF0aCIsInJlbGF0aW9uc2hpcFR5cGUiLCJiYXNlUGF0aCIsImZhbGxiYWNrUGF0aCIsInJlbGF0aW9uc2hpcHNGaWxlbmFtZSIsInJlYWRSZWxhdGlvbnNoaXBzIiwiZG9jdW1lbnRSZWxhdGlvbnNoaXBzIiwiZmluZFBhcnRSZWxhdGVkVG9NYWluRG9jdW1lbnQiLCJzcGxpdFBhdGgiLCJkaXJuYW1lIiwidmFsaWRUYXJnZXRzIiwiZmluZFRhcmdldHNCeVR5cGUiLCJqb2luUGF0aCIsInJlYWRSZWxhdGlvbnNoaXBzRnJvbVppcEZpbGUiLCJiYXNlbmFtZSIsImNyZWF0ZVJlYWRlciIsImlzRm9vdG5vdGVFbGVtZW50IiwicmVhZEZvb3Rub3RlRWxlbWVudCIsImZvb3Rub3RlRWxlbWVudCIsIk51bWJlcmluZyIsIm51bXMiLCJhYnN0cmFjdE51bXMiLCJhbGxMZXZlbHMiLCJhYnN0cmFjdE51bSIsImxldmVsc0J5UGFyYWdyYXBoU3R5bGVJZCIsInBhcmFncmFwaFN0eWxlSWQiLCJudW0iLCJhYnN0cmFjdE51bUlkIiwibnVtU3R5bGVMaW5rIiwiZmluZE51bWJlcmluZ1N0eWxlQnlJZCIsImxldmVsRWxlbWVudCIsImxldmVsSW5kZXgiLCJpc09yZGVyZWQiLCJyZWFkQWJzdHJhY3ROdW0iLCJyZWFkQWJzdHJhY3ROdW1zIiwicmVhZE51bXMiLCJzdHJpcFV0ZjhCb20iLCJ4bWxOYW1lc3BhY2VNYXAiLCJ4bWxTdHJpbmciLCJjb2xsYXBzZUFsdGVybmF0ZUNvbnRlbnQiLCJSZWxhdGlvbnNoaXBzIiwidGFyZ2V0c0J5UmVsYXRpb25zaGlwSWQiLCJyZWxhdGlvbnNoaXAiLCJ0YXJnZXRzQnlUeXBlIiwid3JpdGVTdHlsZU1hcCIsInN0eWxlTWFwUGF0aCIsInJlbGF0aW9uc2hpcHNVcmkiLCJyZWxhdGlvbnNoaXBFbGVtZW50TmFtZSIsInJlbGF0aW9uc2hpcHNDb250YWluZXIiLCJhZGRPclVwZGF0ZUVsZW1lbnQiLCJzdHlsZU1hcEFic29sdXRlUGF0aCIsIm5hbWVzcGFjZXMiLCJ3cml0ZVN0cmluZyIsInVwZGF0ZVJlbGF0aW9uc2hpcHMiLCJjb250ZW50VHlwZXNVcmkiLCJvdmVycmlkZU5hbWUiLCJ0eXBlc0VsZW1lbnQiLCJ1cGRhdGVDb250ZW50VHlwZXMiLCJyZWFkU3R5bGVNYXAiLCJpZGVudGlmeWluZ0F0dHJpYnV0ZSIsImV4aXN0aW5nRWxlbWVudCIsInBhcmFncmFwaFN0eWxlcyIsImNoYXJhY3RlclN0eWxlcyIsIm51bWJlcmluZ1N0eWxlcyIsIm5hbWVFbGVtZW50IiwicmVhZFN0eWxlRWxlbWVudCIsInJlYWROdW1iZXJpbmdTdHlsZUVsZW1lbnQiLCJzdHlsZVNldCIsIkVNUFRZIiwiaGFzaEluZGV4Iiwidm9pZFRhZ05hbWVzIiwiaXNWb2lkRWxlbWVudCIsImFzdCIsInRvU3RyaW5ncyIsIndyaXRlTm9kZSIsInNlbGZDbG9zaW5nIiwiY29sbGFwc2UiLCJjb2xsYXBzZXJzIiwibWF0Y2hlc0VsZW1lbnQiLCJncmFuZENoaWxkIiwicmVtb3ZlRW1wdHkiLCJlbXB0aWVycyIsImltZ0VsZW1lbnQiLCJ3aGVuIiwiaW5saW5lIiwiaW1hZ2VCdWZmZXIiLCJkb2N4UmVhZGVyIiwiZG9jeFN0eWxlTWFwIiwiY29udmVydEVsZW1lbnRUb1Jhd1RleHQiLCJyZWFkT3B0aW9ucyIsInVuemlwIiwiY29udmVydCIsInRhcCIsImVtYmVkZGVkU3R5bGVNYXAiLCJkb2N1bWVudFJlc3VsdCIsInRyYW5zZm9ybURvY3VtZW50Iiwic3R5bGVNYXBSZXN1bHQiLCJzdHlsZU1hcHBpbmciLCJwYXJzZWRPcHRpb25zIiwiZG9jdW1lbnRDb252ZXJ0ZXIiLCJmbGF0TWFwVGhlbiIsImNvbnZlcnREb2N1bWVudFRvSHRtbCIsImNvbnZlcnRUb01hcmtkb3duIiwibWFya2Rvd25PcHRpb25zIiwiZXh0cmFjdFJhd1RleHQiLCJ0cmFuc2Zvcm1zIiwiZW1iZWRTdHlsZU1hcCIsInRvQXJyYXlCdWZmZXIiLCJyZWFkRW1iZWRkZWRTdHlsZU1hcCIsInN0YW5kYXJkT3B0aW9ucyIsImN1c3RvbVN0eWxlTWFwIiwiaW5jbHVkZUVtYmVkZGVkU3R5bGVNYXAiLCJpbmNsdWRlRGVmYXVsdFN0eWxlTWFwIiwiZGVmYXVsdFN0eWxlTWFwIiwiX2RlZmF1bHRTdHlsZU1hcCIsIl9zdGFuZGFyZE9wdGlvbnMiLCJibHVlYmlyZCIsImRlZmVyIiwicmVzb2x2ZUFyZyIsInJlamVjdEFyZyIsIm5mY2FsbCIsInJldHVyblZhbHVlIiwiY29tYmluZU1lc3NhZ2VzIiwiaXNTYW1lTWVzc2FnZSIsImNvbnRhaW5zTWVzc2FnZSIsImV4Y2VwdGlvbiIsImZ1bmNSZXN1bHQiLCJvdGhlclJlc3VsdCIsImxvcCIsImRvY3VtZW50TWF0Y2hlcnMiLCJ0b2tlbmlzZSIsImRvY3VtZW50TWF0Y2hlclJ1bGUiLCJzZXF1ZW5jZSIsImlkZW50aWZpZXJUb0NvbnN0YW50IiwiY29uc3RhbnQiLCJwYXJhZ3JhcGhSdWxlIiwicnVuUnVsZSIsImVsZW1lbnRUeXBlUnVsZSIsImZpcnN0T2YiLCJzdHlsZUlkUnVsZSIsInRva2VuT2ZUeXBlIiwiY2FwdHVyZSIsImlkZW50aWZpZXJSdWxlIiwic3R5bGVOYW1lTWF0Y2hlclJ1bGUiLCJzdHJpbmdSdWxlIiwiZXF1YWxUbyIsInN0eWxlTmFtZVJ1bGUiLCJsaXN0VHlwZVJ1bGUiLCJsaXN0UnVsZSIsImludGVnZXJSdWxlIiwibGlzdFR5cGUiLCJsZXZlbE51bWJlciIsImNyZWF0ZU1hdGNoZXJTdWZmaXhlc1J1bGUiLCJtYXRjaGVyU3VmZml4IiwibWF0Y2hlclN1ZmZpeGVzIiwiemVyb09yTW9yZSIsInN1ZmZpeGVzIiwibWF0Y2hlck9wdGlvbnMiLCJwYXJhZ3JhcGhPclJ1biIsImNyZWF0ZU1hdGNoZXIiLCJzdHJpa2V0aHJvdWdoIiwiYWxsQ2FwcyIsInNtYWxsQ2FwcyIsInZhbHVlT3JFbHNlIiwiYnJlYWtNYXRjaGVyIiwiaHRtbFBhdGhSdWxlIiwid2hpdGVzcGFjZVJ1bGUiLCJmcmVzaFJ1bGUiLCJzZXBhcmF0b3JSdWxlIiwidGFnTmFtZXNSdWxlIiwib25lT3JNb3JlV2l0aFNlcGFyYXRvciIsInN0eWxlRWxlbWVudFJ1bGUiLCJhdHRyaWJ1dGVPckNsYXNzUnVsZSIsImF0dHJpYnV0ZXNMaXN0IiwiemVyb09yTW9yZVdpdGhTZXBhcmF0b3IiLCJyZWFkSHRtbFBhdGgiLCJyZWFkRG9jdW1lbnRNYXRjaGVyIiwic3R5bGVSdWxlIiwiZGVjb2RlRXNjYXBlU2VxdWVuY2VzIiwiZXNjYXBlU2VxdWVuY2VzIiwiYXR0cmlidXRlUnVsZSIsImNsYXNzUnVsZSIsInRva2VucyIsInBhcnNlUmVzdWx0IiwicGFyc2VUb2tlbnMiLCJpc1N1Y2Nlc3MiLCJkZXNjcmliZUZhaWx1cmUiLCJkZXNjcmliZUVycm9yIiwiY2hhcmFjdGVyTnVtYmVyIiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJkb2N1bWVudE1hdGNoZXIiLCJodG1sUGF0aCIsIk1hdGNoZXIiLCJfZWxlbWVudFR5cGUiLCJfc3R5bGVJZCIsIl9zdHlsZU5hbWUiLCJfbGlzdEluZGV4IiwiX2xpc3RJc09yZGVyZWQiLCJIaWdobGlnaHRNYXRjaGVyIiwiX2NvbG9yIiwiQnJlYWtNYXRjaGVyIiwiX2JyZWFrVHlwZSIsIm9wZXJhdG9yRXF1YWxUbyIsIm9wZXJhdG9yU3RhcnRzV2l0aCIsIm9wZXJhbmQiLCJpc0xpc3QiLCJlbGVtZW50U3R5bGVzIiwiSHRtbFBhdGgiLCJfZWxlbWVudHMiLCJ0YWdOYW1lcyIsIndyYXBOb2RlcyIsImdlbmVyYXRlTm9kZXMiLCJSZWdleFRva2VuaXNlciIsImlkZW50aWZpZXJDaGFyYWN0ZXIiLCJzdHJpbmdQcmVmaXgiLCJlbGVtZW50c09mVHlwZSIsInRyYW5zZm9ybUVsZW1lbnQiLCJnZXREZXNjZW5kYW50cyIsImRlc2NlbmRhbnRzIiwidmlzaXREZXNjZW5kYW50cyIsImRlc2NlbmRhbnQiLCJ2aXNpdCIsImdldERlc2NlbmRhbnRzT2ZUeXBlIiwiaW5kZW50YXRpb25MZXZlbCIsImluZGVudGF0aW9uIiwiaW5UZXh0Iiwic2ltcGxlV3JpdGVyIiwiaW5kZW50ZWRFbGVtZW50cyIsImlzSW5QcmUiLCJfYXBwZW5kIiwicHJldHR5V3JpdGVyIiwidWwiLCJsaSIsImZyYWdtZW50cyIsImdlbmVyYXRlQXR0cmlidXRlU3RyaW5nIiwiZXNjYXBlSHRtbEF0dHJpYnV0ZSIsImF0dHJpYnV0ZVN0cmluZyIsImVzY2FwZUh0bWxUZXh0IiwiaHRtbFdyaXRlciIsIm1hcmtkb3duV3JpdGVyIiwic3ltbWV0cmljTWFya2Rvd25FbGVtZW50IiwibWFya2Rvd25FbGVtZW50IiwibWFya2Rvd25MaXN0IiwiaHRtbFRvTWFya2Rvd24iLCJsaXN0SXRlbSIsImhhc0Nsb3NlZCIsImJ1bGxldCIsInJlcGVhdFN0cmluZyIsImFuY2hvclBvc2l0aW9uIiwiZWxlbWVudFN0YWNrIiwiYW5jaG9yQmVmb3JlU3RhcnQiLCJ3cml0ZUFuY2hvciIsImVzY2FwZU1hcmtkb3duIiwiZW1wdHlFbGVtZW50IiwidG9FbGVtZW50TGlzdCIsImVsZW1lbnRMaXN0UHJvdG90eXBlIiwieG1sZG9tIiwibmFtZXNwYWNlTWFwIiwiY29udmVydE5hbWUiLCJtYXBwZWRQcmVmaXgiLCJsb2NhbE5hbWUiLCJjb252ZXJ0Tm9kZSIsImNvbnZlcnRlZE5hbWUiLCJjb252ZXJ0ZWRDaGlsZHJlbiIsImNvbnZlcnRlZE5vZGUiLCJjb252ZXJ0ZWRBdHRyaWJ1dGVzIiwiY29udmVydEVsZW1lbnQiLCJURVhUX05PREUiLCJub2RlVmFsdWUiLCJ4bWxidWlsZGVyIiwid3JpdGVUZXh0Tm9kZSIsImJ1aWxkZXIiLCJ1cmlUb1ByZWZpeCIsImludmVydCIsIm5vZGVXcml0ZXJzIiwiZWxlbWVudEJ1aWxkZXIiLCJtYXBFbGVtZW50TmFtZSIsImxvbmdGb3JtTWF0Y2giLCJ3cml0ZURvY3VtZW50IiwiYmFzZTY0anMiLCJjb250ZW50cyIsIm5vbkVtcHR5UGF0aHMiLCJyZWxldmFudFBhdGhzIiwib2MiLCJNSU1FX1RZUEUiLCJIVE1MIiwiaXNIVE1MIiwiWE1MX0FQUExJQ0FUSU9OIiwiWE1MX1RFWFQiLCJYTUxfWEhUTUxfQVBQTElDQVRJT04iLCJYTUxfU1ZHX0lNQUdFIiwiU1ZHIiwiWE1MIiwiWE1MTlMiLCJhYyIsImNvbnZlbnRpb25zIiwiZW50aXRpZXMiLCJzYXgiLCJET01JbXBsZW1lbnRhdGlvbiIsIlBhcnNlRXJyb3IiLCJYTUxSZWFkZXIiLCJub3JtYWxpemVMaW5lRW5kaW5ncyIsImxvY2F0b3IiLCJET01IYW5kbGVyIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsIl9sb2NhdG9yIiwic3lzdGVtSWQiLCJjaGFycyIsImphdmEiLCJsYW5nIiwiYXBwZW5kRWxlbWVudCIsImhhbmRlciIsImN1cnJlbnRFbGVtZW50IiwiZG9tQnVpbGRlciIsImRlZmF1bHROU01hcCIsImVudGl0eU1hcCIsIkhUTUxfRU5USVRJRVMiLCJYTUxfRU5USVRJRVMiLCJzZXREb2N1bWVudExvY2F0b3IiLCJlcnJvckltcGwiLCJpc0NhbGxiYWNrIiwiYnVpbGRFcnJvckhhbmRsZXIiLCJzdGFydERvY3VtZW50IiwiZG9jdW1lbnRVUkkiLCJzdGFydEVsZW1lbnQiLCJxTmFtZSIsImNyZWF0ZUVsZW1lbnROUyIsImdldFVSSSIsImdldFFOYW1lIiwiY3JlYXRlQXR0cmlidXRlTlMiLCJnZXRMb2NhdG9yIiwic2V0QXR0cmlidXRlTm9kZSIsImVuZEVsZW1lbnQiLCJzdGFydFByZWZpeE1hcHBpbmciLCJlbmRQcmVmaXhNYXBwaW5nIiwicHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiaW5zIiwiY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiaWdub3JhYmxlV2hpdGVzcGFjZSIsImNoIiwiY2hhcmFjdGVycyIsImNoYXJOb2RlIiwiY3JlYXRlQ0RBVEFTZWN0aW9uIiwic2tpcHBlZEVudGl0eSIsImVuZERvY3VtZW50IiwiY29tbSIsImNyZWF0ZUNvbW1lbnQiLCJzdGFydENEQVRBIiwiZW5kQ0RBVEEiLCJzdGFydERURCIsInB1YmxpY0lkIiwiY3JlYXRlRG9jdW1lbnRUeXBlIiwiZHQiLCJmYXRhbEVycm9yIiwiX19ET01IYW5kbGVyIiwibm90RW1wdHlTdHJpbmciLCJvcmRlcmVkU2V0UmVkdWNlciIsInRvT3JkZXJlZFNldCIsInNwbGl0T25BU0NJSVdoaXRlc3BhY2UiLCJkZXN0IiwiX2V4dGVuZHMiLCJTdXBlciIsInB0IiwiTm9kZVR5cGUiLCJBVFRSSUJVVEVfTk9ERSIsIkNEQVRBX1NFQ1RJT05fTk9ERSIsIkVOVElUWV9SRUZFUkVOQ0VfTk9ERSIsIkVOVElUWV9OT0RFIiwiUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFIiwiQ09NTUVOVF9OT0RFIiwiRE9DVU1FTlRfTk9ERSIsIkRPQ1VNRU5UX1RZUEVfTk9ERSIsIk5PVEFUSU9OX05PREUiLCJFeGNlcHRpb25Db2RlIiwiRXhjZXB0aW9uTWVzc2FnZSIsIkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIsIklOREVYX1NJWkVfRVJSIiwiRE9NU1RSSU5HX1NJWkVfRVJSIiwiTk9UX0ZPVU5EX0VSUiIsIldST05HX0RPQ1VNRU5UX0VSUiIsIklOVkFMSURfQ0hBUkFDVEVSX0VSUiIsIk5PX0RBVEFfQUxMT1dFRF9FUlIiLCJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIiLCJJTlVTRV9BVFRSSUJVVEVfRVJSIiwiTk9UX1NVUFBPUlRFRF9FUlIiLCJET01FeGNlcHRpb24iLCJOb2RlTGlzdCIsIkxpdmVOb2RlTGlzdCIsIl9ub2RlIiwiX3JlZnJlc2giLCJfdXBkYXRlTGl2ZUxpc3QiLCJpbmMiLCJfaW5jIiwibHMiLCJfX3NldF9fIiwiX2ZpbmROb2RlSW5kZXgiLCJfYWRkTmFtZWROb2RlIiwibmV3QXR0ciIsIm9sZEF0dHIiLCJvd25lckVsZW1lbnQiLCJfb25SZW1vdmVBdHRyaWJ1dGUiLCJfbnNNYXAiLCJfb25BZGRBdHRyaWJ1dGUiLCJfcmVtb3ZlTmFtZWROb2RlIiwiX3htbEVuY29kZXIiLCJfdmlzaXROb2RlIiwiX29uVXBkYXRlQ2hpbGQiLCJuZXdDaGlsZCIsImNzIiwiX3JlbW92ZUNoaWxkIiwiaXNEb2NUeXBlTm9kZSIsImlzRWxlbWVudE5vZGUiLCJpc1RleHROb2RlIiwiaXNFbGVtZW50SW5zZXJ0aW9uUG9zc2libGUiLCJwYXJlbnRDaGlsZE5vZGVzIiwiZG9jVHlwZU5vZGUiLCJpc0VsZW1lbnRSZXBsYWNlbWVudFBvc3NpYmxlIiwiYXNzZXJ0UHJlSW5zZXJ0aW9uVmFsaWRpdHlJbkRvY3VtZW50Iiwibm9kZUNoaWxkTm9kZXMiLCJub2RlQ2hpbGRFbGVtZW50cyIsInBhcmVudEVsZW1lbnRDaGlsZCIsImFzc2VydFByZVJlcGxhY2VtZW50VmFsaWRpdHlJbkRvY3VtZW50IiwiX2luc2VydEJlZm9yZSIsIl9pbkRvY3VtZW50QXNzZXJ0aW9uIiwiaGFzVmFsaWRQYXJlbnROb2RlVHlwZSIsImhhc0luc2VydGFibGVOb2RlVHlwZSIsImFzc2VydFByZUluc2VydGlvblZhbGlkaXR5MXRvNSIsImNwIiwibmV3Rmlyc3QiLCJuZXdMYXN0IiwicHJlIiwiQXR0ciIsIkNoYXJhY3RlckRhdGEiLCJDb21tZW50IiwiQ0RBVEFTZWN0aW9uIiwiTm90YXRpb24iLCJFbnRpdHkiLCJFbnRpdHlSZWZlcmVuY2UiLCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCJub2RlU2VyaWFsaXplVG9TdHJpbmciLCJpc0h0bWwiLCJub2RlRmlsdGVyIiwiYnVmIiwicmVmTm9kZSIsImxvb2t1cFByZWZpeCIsInZpc2libGVOYW1lc3BhY2VzIiwibmVlZE5hbWVzcGFjZURlZmluZSIsImFkZFNlcmlhbGl6ZWRBdHRyaWJ1dGUiLCJxdWFsaWZpZWROYW1lIiwicHJlZml4ZWROb2RlTmFtZSIsImRlZmF1bHROUyIsImFpIiwibnNpIiwicHViaWQiLCJzeXNpZCIsImludGVybmFsU3Vic2V0IiwiZGVlcCIsIm5vZGUyIiwiYXR0cnMyIiwiX293bmVyRWxlbWVudCIsIklOVkFMSURfU1RBVEVfRVJSIiwiU1lOVEFYX0VSUiIsIklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiIsIk5BTUVTUEFDRV9FUlIiLCJJTlZBTElEX0FDQ0VTU19FUlIiLCJnZXROYW1lZEl0ZW0iLCJzZXROYW1lZEl0ZW0iLCJzZXROYW1lZEl0ZW1OUyIsImdldE5hbWVkSXRlbU5TIiwicmVtb3ZlTmFtZWRJdGVtIiwicmVtb3ZlTmFtZWRJdGVtTlMiLCJoYXNGZWF0dXJlIiwiZmVhdHVyZSIsInJlZkNoaWxkIiwib2xkQ2hpbGQiLCJhcHBlbmREYXRhIiwiaGFzQXR0cmlidXRlcyIsImxvb2t1cE5hbWVzcGFjZVVSSSIsImlzRGVmYXVsdE5hbWVzcGFjZSIsInJ0diIsImNsYXNzTmFtZXNTZXQiLCJub2RlQ2xhc3NOYW1lcyIsIm5vZGVDbGFzc05hbWVzU2V0IiwiY3JlYXRlQXR0cmlidXRlIiwic3BlY2lmaWVkIiwiY3JlYXRlRW50aXR5UmVmZXJlbmNlIiwicGwiLCJyZW1vdmVBdHRyaWJ1dGVOb2RlIiwiX2FwcGVuZFNpbmdsZUNoaWxkIiwic2V0QXR0cmlidXRlTm9kZU5TIiwicmVtb3ZlQXR0cmlidXRlTlMiLCJvbGQiLCJnZXRBdHRyaWJ1dGVOb2RlTlMiLCJoYXNBdHRyaWJ1dGVOUyIsImdldEF0dHJpYnV0ZU5TIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyIsInN1YnN0cmluZ0RhdGEiLCJpbnNlcnREYXRhIiwiZGVsZXRlRGF0YSIsInNwbGl0VGV4dCIsIm5ld1RleHQiLCJnZXRUZXh0Q29udGVudCIsIiQkbGVuZ3RoIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmMiLCJBdGlsZGUiLCJBdW1sIiwiQXJpbmciLCJBRWxpZyIsIkNjZWRpbCIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjIiwiRXVtbCIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjIiwiSXVtbCIsIkVUSCIsIk50aWxkZSIsIk9ncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjIiwiT3RpbGRlIiwiT3VtbCIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjIiwiVXVtbCIsIllhY3V0ZSIsIlRIT1JOIiwic3psaWciLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyYyIsImF0aWxkZSIsImF1bWwiLCJhcmluZyIsImFlbGlnIiwiY2NlZGlsIiwiZWdyYXZlIiwiZWFjdXRlIiwiZWNpcmMiLCJldW1sIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmMiLCJpdW1sIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmMiLCJvdGlsZGUiLCJvdW1sIiwib3NsYXNoIiwidWdyYXZlIiwidWFjdXRlIiwidWNpcmMiLCJ1dW1sIiwieWFjdXRlIiwidGhvcm4iLCJ5dW1sIiwibmJzcCIsImlleGNsIiwiY2VudCIsInBvdW5kIiwiY3VycmVuIiwieWVuIiwiYnJ2YmFyIiwic2VjdCIsInVtbCIsIm9yZGYiLCJsYXF1byIsIm5vdCIsInNoeSIsInJlZyIsIm1hY3IiLCJkZWciLCJwbHVzbW4iLCJzdXAyIiwic3VwMyIsImFjdXRlIiwibWljcm8iLCJwYXJhIiwibWlkZG90IiwiY2VkaWwiLCJzdXAxIiwib3JkbSIsInJhcXVvIiwiZnJhYzE0IiwiZnJhYzEyIiwiZnJhYzM0IiwiaXF1ZXN0IiwidGltZXMiLCJkaXZpZGUiLCJmb3JhbGwiLCJwYXJ0IiwiZXhpc3QiLCJuYWJsYSIsImlzaW4iLCJub3RpbiIsIm5pIiwicHJvZCIsIm1pbnVzIiwibG93YXN0IiwicmFkaWMiLCJpbmZpbiIsImFuZyIsImNhcCIsImN1cCIsInRoZXJlNCIsInNpbSIsImNvbmciLCJhc3ltcCIsImVxdWl2Iiwic3VwIiwibnN1YiIsInN1YmUiLCJzdXBlIiwib3BsdXMiLCJvdGltZXMiLCJwZXJwIiwic2RvdCIsIkFscGhhIiwiQmV0YSIsIkdhbW1hIiwiRGVsdGEiLCJFcHNpbG9uIiwiWmV0YSIsIkV0YSIsIlRoZXRhIiwiSW90YSIsIkthcHBhIiwiTGFtYmRhIiwiTXUiLCJOdSIsIlhpIiwiT21pY3JvbiIsIlBpIiwiUmhvIiwiU2lnbWEiLCJUYXUiLCJVcHNpbG9uIiwiUGhpIiwiQ2hpIiwiUHNpIiwiT21lZ2EiLCJhbHBoYSIsImdhbW1hIiwiZXBzaWxvbiIsInpldGEiLCJldGEiLCJ0aGV0YSIsImlvdGEiLCJrYXBwYSIsIm11IiwibnUiLCJ4aSIsIm9taWNyb24iLCJwaSIsInJobyIsInNpZ21hZiIsInNpZ21hIiwidGF1IiwidXBzaWxvbiIsInBoaSIsImNoaSIsInBzaSIsIm9tZWdhIiwidGhldGFzeW0iLCJ1cHNpaCIsInBpdiIsIk9FbGlnIiwib2VsaWciLCJTY2Fyb24iLCJzY2Fyb24iLCJZdW1sIiwiZm5vZiIsImNpcmMiLCJ0aWxkZSIsImVuc3AiLCJlbXNwIiwidGhpbnNwIiwienduaiIsInp3aiIsImxybSIsInJsbSIsIm5kYXNoIiwibWRhc2giLCJsc3F1byIsInJzcXVvIiwic2JxdW8iLCJsZHF1byIsInJkcXVvIiwiYmRxdW8iLCJkYWdnZXIiLCJEYWdnZXIiLCJidWxsIiwiaGVsbGlwIiwicGVybWlsIiwiUHJpbWUiLCJsc2FxdW8iLCJyc2FxdW8iLCJvbGluZSIsImV1cm8iLCJ0cmFkZSIsImxhcnIiLCJ1YXJyIiwicmFyciIsImRhcnIiLCJoYXJyIiwiY3JhcnIiLCJsY2VpbCIsInJjZWlsIiwibGZsb29yIiwicmZsb29yIiwibG96Iiwic3BhZGVzIiwiY2x1YnMiLCJoZWFydHMiLCJkaWFtcyIsIm5hbWVTdGFydENoYXIiLCJuYW1lQ2hhciIsInRhZ05hbWVQYXR0ZXJuIiwiY29weUxvY2F0b3IiLCJwYXJzZUVsZW1lbnRTdGFydFBhcnQiLCJjdXJyZW50TlNNYXAiLCJlbnRpdHlSZXBsYWNlciIsInN0YXJ0SW5kZXgiLCJhdHRyaWJ1dGVOYW1lcyIsImFkZFZhbHVlIiwic2V0VGFnTmFtZSIsImxvY2FsTlNNYXAiLCJuc3AiLCJuc1ByZWZpeCIsInBhcnNlSHRtbFNwZWNpYWxDb250ZW50IiwiZWxTdGFydEVuZCIsImVsRW5kU3RhcnQiLCJmaXhTZWxmQ2xvc2VkIiwiY2xvc2VNYXAiLCJwYXJzZURDQyIsIm1hdGNocyIsImxhc3RNYXRjaCIsImVuZERURCIsInBhcnNlSW5zdHJ1Y3Rpb24iLCJFbGVtZW50QXR0cmlidXRlcyIsImRlZmF1bHROU01hcENvcHkiLCJzdXJyb2dhdGUxIiwic3Vycm9nYXRlMiIsImZpeGVkRnJvbUNoYXJDb2RlIiwiYXBwZW5kVGV4dCIsInh0IiwibGluZUVuZCIsImxpbmVQYXR0ZXJuIiwibGluZVN0YXJ0IiwicGFyc2VTdGFjayIsInRhZ1N0YXJ0IiwiZW5kTWF0Y2giLCJsb2NhdG9yMiIsImdldExvY2FsTmFtZSIsImI2NCIsImdldExlbnMiLCJ2YWxpZExlbiIsInBsYWNlSG9sZGVyc0xlbiIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibWF4Q2h1bmtMZW5ndGgiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJTb21lUHJvbWlzZUFycmF5IiwiX1NvbWVQcm9taXNlQXJyYXkiLCJzZXRIb3dNYW55Iiwic2V0VW53cmFwIiwiZmlyc3RMaW5lRXJyb3IiLCJzY2hlZHVsZSIsIlF1ZXVlIiwiQXN5bmMiLCJfY3VzdG9tU2NoZWR1bGVyIiwiX2lzVGlja1VzZWQiLCJfbGF0ZVF1ZXVlIiwiX25vcm1hbFF1ZXVlIiwiX2hhdmVEcmFpbmVkUXVldWVzIiwiX3RyYW1wb2xpbmVFbmFibGVkIiwiZHJhaW5RdWV1ZXMiLCJfZHJhaW5RdWV1ZXMiLCJfc2NoZWR1bGUiLCJBc3luY0ludm9rZUxhdGVyIiwiX3F1ZXVlVGljayIsIkFzeW5jSW52b2tlIiwiQXN5bmNTZXR0bGVQcm9taXNlcyIsIl9wdXNoT25lIiwic2V0U2NoZWR1bGVyIiwiaGFzQ3VzdG9tU2NoZWR1bGVyIiwiZW5hYmxlVHJhbXBvbGluZSIsImRpc2FibGVUcmFtcG9saW5lSWZOZWNlc3NhcnkiLCJoYXNEZXZUb29scyIsImhhdmVJdGVtc1F1ZXVlZCIsInRocm93TGF0ZXIiLCJpbnZva2VMYXRlciIsImludm9rZSIsInNldHRsZVByb21pc2VzIiwiX3NldHRsZVByb21pc2VzIiwiX2RyYWluUXVldWUiLCJJTlRFUk5BTCIsInRyeUNvbnZlcnRUb1Byb21pc2UiLCJkZWJ1ZyIsImNhbGxlZEJpbmQiLCJyZWplY3RUaGlzIiwiX3JlamVjdCIsInRhcmdldFJlamVjdGVkIiwicHJvbWlzZVJlamVjdGlvblF1ZXVlZCIsImJpbmRpbmdQcm9taXNlIiwiX3RoZW4iLCJiaW5kaW5nUmVzb2x2ZWQiLCJfYml0RmllbGQiLCJfcmVzb2x2ZUNhbGxiYWNrIiwiYmluZGluZ1JlamVjdGVkIiwiX3Byb3BhZ2F0ZUZyb20iLCJwcm9wYWdhdGVGcm9tRnVuY3Rpb24iLCJfYm91bmRWYWx1ZSIsImJvdW5kVmFsdWVGdW5jdGlvbiIsIm1heWJlUHJvbWlzZSIsIl9zZXRCb3VuZFRvIiwiX3NldE9uQ2FuY2VsIiwiX2JvdW5kVG8iLCJfaXNCb3VuZCIsImNyIiwiY2FsbGVyQ2FjaGUiLCJnZXR0ZXJDYWNoZSIsImdldE1ldGhvZENhbGxlciIsImdldEdldHRlciIsImNhbkV2YWx1YXRlIiwiaXNJZGVudGlmaWVyIiwibWFrZU1ldGhvZENhbGxlciIsIm1ldGhvZE5hbWUiLCJlbnN1cmVNZXRob2QiLCJtYWtlR2V0dGVyIiwiZ2V0Q29tcGlsZWQiLCJjb21waWxlciIsImNsYXNzU3RyaW5nIiwiY2FsbGVyIiwibmFtZWRHZXR0ZXIiLCJpbmRleGVkR2V0dGVyIiwiJF9sZW4iLCIkX2kiLCJtYXliZUNhbGxlciIsIm1heWJlR2V0dGVyIiwiUHJvbWlzZUFycmF5IiwiYXBpUmVqZWN0aW9uIiwidHJ5Q2F0Y2giLCJlcnJvck9iaiIsIl9hc3luYyIsImNhbmNlbGxhdGlvbiIsIl93YXJuIiwiX2lzQ2FuY2VsbGFibGUiLCJfY2FuY2VsQnkiLCJfaXNGb2xsb3dpbmciLCJfZm9sbG93ZWUiLCJfY2FuY2VsQnJhbmNoZWQiLCJfY2FuY2VsbGF0aW9uUGFyZW50IiwiX3NldFdpbGxCZUNhbmNlbGxlZCIsIl9icmFuY2hIYXNDYW5jZWxsZWQiLCJfYnJhbmNoZXNSZW1haW5pbmdUb0NhbmNlbCIsIl9lbm91Z2hCcmFuY2hlc0hhdmVDYW5jZWxsZWQiLCJjYW5jZWxsZXIiLCJfaW52b2tlT25DYW5jZWwiLCJfY2FuY2VsIiwiX3NldENhbmNlbGxlZCIsIl9jYW5jZWxQcm9taXNlcyIsIl91bnNldE9uQ2FuY2VsIiwiX29uQ2FuY2VsRmllbGQiLCJpc1BlbmRpbmciLCJfaXNDYW5jZWxsZWQiLCJpc0NhbmNlbGxhYmxlIiwiaXNDYW5jZWxsZWQiLCJfZG9JbnZva2VPbkNhbmNlbCIsIm9uQ2FuY2VsQ2FsbGJhY2siLCJpbnRlcm5hbE9ubHkiLCJfYXR0YWNoRXh0cmFUcmFjZSIsIl9yZXN1bHRDYW5jZWxsZWQiLCJfb25DYW5jZWwiLCJfaW52b2tlSW50ZXJuYWxPbkNhbmNlbCIsIk5FWFRfRklMVEVSIiwiZ2V0S2V5cyIsImJvdW5kVG8iLCJwcmVkaWNhdGVMb29wIiwibWF0Y2hlc1ByZWRpY2F0ZSIsImxvbmdTdGFja1RyYWNlcyIsImNvbnRleHRTdGFjayIsIkNvbnRleHQiLCJfdHJhY2UiLCJDYXB0dXJlZFRyYWNlIiwicGVla0NvbnRleHQiLCJfcHJvbWlzZUNyZWF0ZWQiLCJfcHVzaENvbnRleHQiLCJfcG9wQ29udGV4dCIsIl9wZWVrQ29udGV4dCIsImRlYWN0aXZhdGVMb25nU3RhY2tUcmFjZXMiLCJhY3RpdmF0ZUxvbmdTdGFja1RyYWNlcyIsIlByb21pc2VfcHVzaENvbnRleHQiLCJQcm9taXNlX3BvcENvbnRleHQiLCJQcm9taXNlX1BlZWtDb250ZXh0IiwiUHJvbWlzZV9wZWVrQ29udGV4dCIsIlByb21pc2VfcHJvbWlzZUNyZWF0ZWQiLCJjdHgiLCJ1bmhhbmRsZWRSZWplY3Rpb25IYW5kbGVkIiwicG9zc2libHlVbmhhbmRsZWRSZWplY3Rpb24iLCJwcmludFdhcm5pbmciLCJnZXREb21haW4iLCJfZ2V0RG9tYWluIiwiV2FybmluZyIsImNhbkF0dGFjaFRyYWNlIiwiYmx1ZWJpcmRGcmFtZVBhdHRlcm4iLCJub2RlRnJhbWVQYXR0ZXJuIiwicGFyc2VMaW5lUGF0dGVybiIsInN0YWNrRnJhbWVQYXR0ZXJuIiwiZm9ybWF0U3RhY2siLCJpbmRlbnRTdGFja0ZyYW1lcyIsImRlYnVnZ2luZyIsIndhcm5pbmdzIiwid0ZvcmdvdHRlblJldHVybiIsInN1cHByZXNzVW5oYW5kbGVkUmVqZWN0aW9ucyIsIl9lbnN1cmVQb3NzaWJsZVJlamVjdGlvbkhhbmRsZWQiLCJfc2V0UmVqZWN0aW9uSXNVbmhhbmRsZWQiLCJfbm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uIiwiX25vdGlmeVVuaGFuZGxlZFJlamVjdGlvbklzSGFuZGxlZCIsImZpcmVSZWplY3Rpb25FdmVudCIsIl9zZXRSZXR1cm5lZE5vblVuZGVmaW5lZCIsIl9yZXR1cm5lZE5vblVuZGVmaW5lZCIsIl9pc1JlamVjdGlvblVuaGFuZGxlZCIsIl9zZXR0bGVkVmFsdWUiLCJfc2V0VW5oYW5kbGVkUmVqZWN0aW9uSXNOb3RpZmllZCIsIl91bnNldFVuaGFuZGxlZFJlamVjdGlvbklzTm90aWZpZWQiLCJfaXNVbmhhbmRsZWRSZWplY3Rpb25Ob3RpZmllZCIsIl91bnNldFJlamVjdGlvbklzVW5oYW5kbGVkIiwic2hvdWxkVXNlT3duVHJhY2UiLCJvblBvc3NpYmx5VW5oYW5kbGVkUmVqZWN0aW9uIiwiZG9tYWluQmluZCIsIm9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlZCIsImRpc2FibGVMb25nU3RhY2tUcmFjZXMiLCJsb25nU3RhY2tUcmFjZXNJc1N1cHBvcnRlZCIsIlByb21pc2VfY2FwdHVyZVN0YWNrVHJhY2UiLCJfY2FwdHVyZVN0YWNrVHJhY2UiLCJQcm9taXNlX2F0dGFjaEV4dHJhVHJhY2UiLCJsb25nU3RhY2tUcmFjZXNDYXB0dXJlU3RhY2tUcmFjZSIsImxvbmdTdGFja1RyYWNlc0F0dGFjaEV4dHJhVHJhY2UiLCJoYXNMb25nU3RhY2tUcmFjZXMiLCJmaXJlRG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRvbUV2ZW50IiwiaW5pdEN1c3RvbUV2ZW50IiwiZmlyZUdsb2JhbEV2ZW50IiwiZ2VuZXJhdGVQcm9taXNlTGlmZWN5Y2xlRXZlbnRPYmplY3QiLCJldmVudFRvT2JqZWN0R2VuZXJhdG9yIiwicHJvbWlzZUNyZWF0ZWQiLCJwcm9taXNlRnVsZmlsbGVkIiwicHJvbWlzZVJlamVjdGVkIiwicHJvbWlzZVJlc29sdmVkIiwicHJvbWlzZUNhbmNlbGxlZCIsInByb21pc2VDaGFpbmVkIiwidW5oYW5kbGVkUmVqZWN0aW9uIiwicmVqZWN0aW9uSGFuZGxlZCIsImFjdGl2ZUZpcmVFdmVudCIsImdsb2JhbEV2ZW50RmlyZWQiLCJkb21FdmVudEZpcmVkIiwiZGVmYXVsdEZpcmVFdmVudCIsImNhbmNlbGxhdGlvbkV4ZWN1dGUiLCJleGVjdXRvciIsIm9uQ2FuY2VsIiwiX2F0dGFjaENhbmNlbGxhdGlvbkNhbGxiYWNrIiwiY2FuY2VsbGF0aW9uQXR0YWNoQ2FuY2VsbGF0aW9uQ2FsbGJhY2siLCJwcmV2aW91c09uQ2FuY2VsIiwiY2FuY2VsbGF0aW9uT25DYW5jZWwiLCJjYW5jZWxsYXRpb25TZXRPbkNhbmNlbCIsImNhbmNlbGxhdGlvbkNsZWFyQ2FuY2VsbGF0aW9uRGF0YSIsImNhbmNlbGxhdGlvblByb3BhZ2F0ZUZyb20iLCJicmFuY2hlc1JlbWFpbmluZ1RvQ2FuY2VsIiwib3B0cyIsIndhcm5pbmdzT3B0aW9uIiwiX2NsZWFyQ2FuY2VsbGF0aW9uRGF0YSIsIl9leGVjdXRlIiwibW9uaXRvcmluZyIsIl9maXJlRXZlbnQiLCJpc0Z1bGZpbGxlZCIsImlnbm9yZVNlbGYiLCJhdHRhY2hFeHRyYVRyYWNlIiwiX19zdGFja0NsZWFuZWRfXyIsInBhcnNlZCIsInBhcnNlU3RhY2tBbmRNZXNzYWdlIiwibm90RW51bWVyYWJsZVByb3AiLCJmb3JtYXRBbmRMb2dFcnJvciIsImNsZWFuU3RhY2siLCJpc1RyYWNlTGluZSIsImlzSW50ZXJuYWxGcmFtZSIsInNob3VsZElnbm9yZSIsInN0YWNrRnJhbWVzQXNBcnJheSIsImlzU29mdCIsImxvY2FsSGFuZGxlciIsImxvY2FsRXZlbnRGaXJlZCIsImZvcm1hdE5vbkVycm9yIiwibWF4Q2hhcnMiLCJzbmlwIiwicGFyc2VMaW5lSW5mb1JlZ2V4IiwicGFyc2VMaW5lSW5mbyIsIl9wcm9taXNlc0NyZWF0ZWQiLCJ1bmN5Y2xlIiwic3RhY2tUb0luZGV4IiwiY3ljbGVFZGdlTm9kZSIsImN1cnJlbnRDaGlsZExlbmd0aCIsInN0YWNrcyIsImN1cnJlbnRMYXN0SW5kZXgiLCJjdXJyZW50TGFzdExpbmUiLCJjb21tb25Sb290TWVldFBvaW50IiwicmVtb3ZlQ29tbW9uUm9vdHMiLCJyZW1vdmVEdXBsaWNhdGVPckVtcHR5SnVtcHMiLCJyZWNvbnN0cnVjdFN0YWNrIiwidjhzdGFja0ZyYW1lUGF0dGVybiIsInY4c3RhY2tGb3JtYXR0ZXIiLCJzdGFja1RyYWNlTGltaXQiLCJpZ25vcmVVbnRpbCIsImhhc1N0YWNrQWZ0ZXJUaHJvdyIsImlzVFRZIiwiY2hlY2tGb3Jnb3R0ZW5SZXR1cm5zIiwiaGFuZGxlckxpbmUiLCJjcmVhdG9yTGluZSIsInRyYWNlTGluZXMiLCJsaW5lTWF0Y2hlcyIsImZpcnN0VXNlckxpbmUiLCJzZXRCb3VuZHMiLCJsYXN0TGluZUVycm9yIiwiZmlyc3RGaWxlTmFtZSIsImxhc3RGaWxlTmFtZSIsImZpcnN0U3RhY2tMaW5lcyIsImxhc3RTdGFja0xpbmVzIiwiZmlyc3RJbmRleCIsImRlcHJlY2F0ZWQiLCJyZXBsYWNlbWVudCIsInJldHVybmVyIiwidGhyb3dlciIsInRoZW5SZXR1cm4iLCJ0aGVuVGhyb3ciLCJjYXRjaFRocm93IiwiX3JlYXNvbiIsImNhdGNoUmV0dXJuIiwiUHJvbWlzZVJlZHVjZSIsIlByb21pc2VBbGwiLCJwcm9taXNlQWxsVGhpcyIsIl9UeXBlRXJyb3IiLCJfUmFuZ2VFcnJvciIsImVzNSIsIk9iamVjdGZyZWV6ZSIsInN1YkVycm9yIiwibmFtZVByb3BlcnR5IiwiZGVmYXVsdE1lc3NhZ2UiLCJTdWJFcnJvciIsIkNhbmNlbGxhdGlvbkVycm9yIiwiVGltZW91dEVycm9yIiwiQWdncmVnYXRlRXJyb3IiLCJtZXRob2RzIiwiT3BlcmF0aW9uYWxFcnJvciIsImNhdXNlIiwiZXJyb3JUeXBlcyIsIlJlamVjdGlvbkVycm9yIiwiaXNFUzUiLCJnZXREZXNjcmlwdG9yIiwicHJvcGVydHlJc1dyaXRhYmxlIiwiT2JqZWN0S2V5cyIsIlByb21pc2VNYXAiLCJQYXNzVGhyb3VnaEhhbmRsZXJDb250ZXh0IiwiY2FsbGVkIiwiY2FuY2VsUHJvbWlzZSIsIkZpbmFsbHlIYW5kbGVyQ2FuY2VsUmVhY3Rpb24iLCJmaW5hbGx5SGFuZGxlciIsImNoZWNrQ2FuY2VsIiwic3VjY2VlZCIsInJlYXNvbk9yVmFsdWUiLCJpc0ZpbmFsbHlIYW5kbGVyIiwiaXNSZWplY3RlZCIsIl9wYXNzVGhyb3VnaCIsImxhc3RseSIsIlByb3h5YWJsZSIsInlpZWxkSGFuZGxlcnMiLCJQcm9taXNlU3Bhd24iLCJnZW5lcmF0b3JGdW5jdGlvbiIsInlpZWxkSGFuZGxlciIsImludGVybmFsIiwiX2ZpbmFsbHlQcm9taXNlIiwiX3Byb21pc2UiLCJfZ2VuZXJhdG9yRnVuY3Rpb24iLCJfcmVjZWl2ZXIiLCJfZ2VuZXJhdG9yIiwiX3lpZWxkSGFuZGxlcnMiLCJfeWllbGRlZFByb21pc2UiLCJfY2FuY2VsbGF0aW9uUGhhc2UiLCJfaXNSZXNvbHZlZCIsIl9jbGVhbnVwIiwiX2Z1bGZpbGwiLCJfcHJvbWlzZUNhbmNlbGxlZCIsImNvcm91dGluZSIsInJldHVyblNlbnRpbmVsIiwiX2NvbnRpbnVlIiwiX3Byb21pc2VGdWxmaWxsZWQiLCJfcHJvbWlzZVJlamVjdGVkIiwiX3J1biIsIl9yZWplY3RDYWxsYmFjayIsInRyYWNlUGFyZW50IiwicHJvbWlzZUZyb21ZaWVsZEhhbmRsZXIiLCJiaXRGaWVsZCIsIl9wcm94eSIsIlByb21pc2VTcGF3biQiLCJzcGF3biIsImFkZFlpZWxkSGFuZGxlciIsInRoZW5DYWxsYmFjayIsInByb21pc2VTZXR0ZXIiLCJnZW5lcmF0ZUhvbGRlckNsYXNzIiwiYXNzaWdubWVudCIsImNhbmNlbGxhdGlvbkNvZGUiLCJwYXNzZWRBcmd1bWVudHMiLCJob2xkZXJDbGFzc2VzIiwidGhlbkNhbGxiYWNrcyIsInByb21pc2VTZXR0ZXJzIiwiSG9sZGVyQ2xhc3MiLCJhc3luY05lZWRlZCIsIl9pc0ZhdGVTZWFsZWQiLCJfc2V0QXN5bmNHdWFyYW50ZWVkIiwic3ByZWFkIiwiTWFwcGluZ1Byb21pc2VBcnJheSIsIl9maWx0ZXIiLCJjb25zdHJ1Y3RvciQiLCJfY2FsbGJhY2siLCJfcHJlc2VydmVkVmFsdWVzIiwiX2xpbWl0IiwiX2luRmxpZ2h0IiwiX3F1ZXVlIiwiX2FzeW5jSW5pdCIsImNvbmN1cnJlbmN5IiwiX2luaXQkIiwicHJlc2VydmVkVmFsdWVzIiwiX3RvdGFsUmVzb2x2ZWQiLCJfcmVzb2x2ZSIsImJvb2xlYW5zIiwiX3Jlc29sdmVGcm9tU3luY1ZhbHVlIiwibWF5YmVXcmFwQXNFcnJvciIsInJFcnJvcktleSIsIm11bHRpQXJncyIsImlzVW50eXBlZEVycm9yIiwibWFya0FzT3JpZ2luYXRpbmdGcm9tUmVqZWN0aW9uIiwid3JhcEFzT3BlcmF0aW9uYWxFcnJvciIsInNwcmVhZEFkYXB0ZXIiLCJub2RlYmFjayIsInN1Y2Nlc3NBZGFwdGVyIiwiZXJyb3JBZGFwdGVyIiwibmV3UmVhc29uIiwiYXNDYWxsYmFjayIsIm5vZGVpZnkiLCJhZGFwdGVyIiwibWFrZVNlbGZSZXNvbHV0aW9uRXJyb3IiLCJyZWZsZWN0SGFuZGxlciIsIlByb21pc2VJbnNwZWN0aW9uIiwiVU5ERUZJTkVEX0JJTkRJTkciLCJBUFBMWSIsImNhdGNoRmlsdGVyIiwibm9kZWJhY2tGb3JQcm9taXNlIiwiX2Z1bGZpbGxtZW50SGFuZGxlcjAiLCJfcmVqZWN0aW9uSGFuZGxlcjAiLCJfcHJvbWlzZTAiLCJfcmVjZWl2ZXIwIiwiX3Jlc29sdmVGcm9tRXhlY3V0b3IiLCJkZWZlclJlc29sdmUiLCJkZWZlclJlamVjdCIsImZpbGxUeXBlcyIsImNhdGNoSW5zdGFuY2VzIiwicmVmbGVjdCIsImRpZEZ1bGZpbGwiLCJkaWRSZWplY3QiLCJfc2V0SXNGaW5hbCIsImZ1bGZpbGxtZW50VmFsdWUiLCJyZWplY3Rpb25SZWFzb24iLCJvcmlnaW5hdGVzRnJvbVJlamVjdGlvbiIsImdldE5ld0xpYnJhcnlDb3B5IiwiZnJvbU5vZGUiLCJmcm9tQ2FsbGJhY2siLCJjYXN0IiwiX3NldEZ1bGZpbGxlZCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwiaW50ZXJuYWxEYXRhIiwiaGF2ZUludGVybmFsRGF0YSIsInNldHRsZXIiLCJfc2V0dGxlUHJvbWlzZUN0eCIsIl9zZXR0bGVQcm9taXNlTGF0ZUNhbmNlbGxhdGlvbk9ic2VydmVyIiwiX2FkZENhbGxiYWNrcyIsIl9zZXRMZW5ndGgiLCJfc2V0UmVqZWN0ZWQiLCJfc2V0Rm9sbG93aW5nIiwiX2lzRmluYWwiLCJfdW5zZXRDYW5jZWxsZWQiLCJfcmVjZWl2ZXJBdCIsIl9wcm9taXNlQXQiLCJfZnVsZmlsbG1lbnRIYW5kbGVyQXQiLCJfcmVqZWN0aW9uSGFuZGxlckF0IiwiX21pZ3JhdGVDYWxsYmFjazAiLCJmb2xsb3dlciIsImZ1bGZpbGwiLCJfbWlncmF0ZUNhbGxiYWNrQXQiLCJwcm94eWFibGUiLCJzaG91bGRCaW5kIiwiX3NldEZvbGxvd2VlIiwic3luY2hyb25vdXMiLCJpZ25vcmVOb25FcnJvcldhcm5pbmdzIiwiZW5zdXJlRXJyb3JPYmplY3QiLCJoYXNTdGFjayIsIl9zZXR0bGVQcm9taXNlRnJvbUhhbmRsZXIiLCJfc2V0dGxlUHJvbWlzZSIsImlzUHJvbWlzZSIsImFzeW5jR3VhcmFudGVlZCIsIl9zZXR0bGVQcm9taXNlMCIsIl9jbGVhckNhbGxiYWNrRGF0YUF0SW5kZXgiLCJfZnVsZmlsbFByb21pc2VzIiwiX3JlamVjdFByb21pc2VzIiwidG9GYXN0UHJvcGVydGllcyIsInJlc29sdmVWYWx1ZUlmRW1wdHkiLCJhc0FycmF5IiwiX2l0ZXJhdGUiLCJfcmVzb2x2ZUVtcHR5QXJyYXkiLCJ0b1Jlc29sdXRpb25WYWx1ZSIsImdldEFjdHVhbExlbmd0aCIsInNob3VsZENvcHlWYWx1ZXMiLCJpc1Jlc29sdmVkIiwiVEhJUyIsIndpdGhBcHBlbmRlZCIsImRlZmF1bHRQcm9taXNpZmllZCIsIl9faXNQcm9taXNpZmllZF9fIiwibm9Db3B5UHJvcHNQYXR0ZXJuIiwiZGVmYXVsdEZpbHRlciIsInByb3BzRmlsdGVyIiwiaXNQcm9taXNpZmllZCIsImhhc1Byb21pc2lmaWVkIiwiZ2V0RGF0YVByb3BlcnR5T3JEZWZhdWx0IiwibWFrZU5vZGVQcm9taXNpZmllZCIsIm9yaWdpbmFsTmFtZSIsIm5ld1BhcmFtZXRlckNvdW50IiwicGFyYW1ldGVyQ291bnQiLCJhcmd1bWVudE9yZGVyIiwibGlrZWx5QXJndW1lbnRDb3VudCIsInN3aXRjaENhc2VBcmd1bWVudE9yZGVyIiwic2hvdWxkUHJveHlUaGlzIiwiZ2V0RnVuY3Rpb25Db2RlIiwiYXJndW1lbnRDb3VudCIsImNvbW1hIiwiZmlsbGVkUmFuZ2UiLCJnZW5lcmF0ZUFyZ3VtZW50U3dpdGNoQ2FzZSIsIl9fIiwiZGVmYXVsdFRoaXMiLCJwcm9taXNpZmllZCIsInByb21pc2lmeUFsbCIsInByb21pc2lmaWVyIiwic3VmZml4UmVnZXhwIiwiaW5oZXJpdGVkRGF0YUtleXMiLCJwYXNzZXNEZWZhdWx0RmlsdGVyIiwia2V5V2l0aG91dEFzeW5jU3VmZml4IiwiY2hlY2tWYWxpZCIsInByb21pc2lmaWFibGVNZXRob2RzIiwicHJvbWlzaWZpZWRLZXkiLCJjb3B5RGVzY3JpcHRvcnMiLCJpc0NsYXNzIiwiRXM2TWFwIiwibWFwVG9FbnRyaWVzIiwiZXh0cmFjdEVudHJ5IiwiUHJvcGVydGllc1Byb21pc2VBcnJheSIsImlzTWFwIiwiX2lzTWFwIiwiY2FzdFZhbHVlIiwiZW50cmllc1RvTWFwIiwia2V5T2Zmc2V0IiwiX2NhcGFjaXR5IiwiX2Zyb250IiwiX3dpbGxCZU92ZXJDYXBhY2l0eSIsIl9jaGVja0NhcGFjaXR5Iiwid3JhcE1hc2siLCJmcm9udCIsIl9yZXNpemVUbyIsIm9sZENhcGFjaXR5Iiwic3JjSW5kZXgiLCJkc3QiLCJkc3RJbmRleCIsImFycmF5TW92ZSIsIlJlZHVjdGlvblByb21pc2VBcnJheSIsIl9lYWNoIiwiX2ZuIiwiX2luaXRpYWxWYWx1ZSIsIl9jdXJyZW50Q2FuY2VsbGFibGUiLCJfZWFjaFZhbHVlcyIsImNvbXBsZXRlZCIsInZhbHVlT3JSZWFzb24iLCJnb3RBY2N1bSIsImFjY3VtIiwiX2dvdEFjY3VtIiwiZ290VmFsdWUiLCJfZWFjaENvbXBsZXRlIiwic2VuZGVyIiwiX3Jlc3VsdENhbmNlbGxlZCQiLCJ0b2dnbGVTY2hlZHVsZWQiLCJkaXYyIiwiTmF0aXZlUHJvbWlzZSIsImdldE5hdGl2ZVByb21pc2UiLCJHbG9iYWxTZXRJbW1lZGlhdGUiLCJQcm9jZXNzTmV4dFRpY2siLCJpc1JlY2VudE5vZGUiLCJuYXRpdmVQcm9taXNlIiwiY29yZG92YSIsInRvZ2dsZSIsIlNldHRsZWRQcm9taXNlQXJyYXkiLCJfcHJvbWlzZVJlc29sdmVkIiwiaW5zcGVjdGlvbiIsIl9zZXR0bGVkVmFsdWVGaWVsZCIsInNldHRsZSIsIkNBTkNFTExBVElPTiIsIl9ob3dNYW55IiwiX3Vud3JhcCIsIl9pbml0aWFsaXplZCIsImhvd01hbnkiLCJpc0FycmF5UmVzb2x2ZWQiLCJfY2FuUG9zc2libHlGdWxmaWxsIiwiX2dldFJhbmdlRXJyb3IiLCJfYWRkRnVsZmlsbGVkIiwiX2Z1bGZpbGxlZCIsIl9hZGRSZWplY3RlZCIsIl9jaGVja091dGNvbWUiLCJfcmVqZWN0ZWQiLCJfX2lzQ2FuY2VsbGVkIiwiaGFzUHJvcCIsImRvR2V0VGhlbiIsImdldFRoZW4iLCJpc0FueUJsdWViaXJkUHJvbWlzZSIsImRvVGhlbmFibGUiLCJIYW5kbGVXcmFwcGVyIiwiYWZ0ZXJWYWx1ZSIsInN1Y2Nlc3NDbGVhciIsImZhaWx1cmVDbGVhciIsInRpbWVvdXQiLCJoYW5kbGVXcmFwcGVyIiwiYWZ0ZXJUaW1lb3V0IiwiRGlzcG9zZXIiLCJGdW5jdGlvbkRpc3Bvc2VyIiwibWF5YmVVbndyYXBEaXNwb3NlciIsImlzRGlzcG9zZXIiLCJyZXNvdXJjZXMiLCJfc2V0RGlzcG9zYWJsZSIsIlJlc291cmNlTGlzdCIsInJlc291cmNlIiwidHJ5RGlzcG9zZSIsImRvRGlzcG9zZSIsIl91bnNldERpc3Bvc2FibGUiLCJ1c2luZyIsInNwcmVhZEFyZ3MiLCJkaXNwb3NlciIsInJlZmxlY3RlZFJlc291cmNlcyIsInJlc3VsdFByb21pc2UiLCJpbnNwZWN0aW9ucyIsInRoZW5hYmxlIiwiX2lzRGlzcG9zYWJsZSIsIl9nZXREaXNwb3NlciIsImNhc3RQcmVzZXJ2aW5nRGlzcG9zYWJsZSIsImRpc3Bvc2UiLCJfZGlzcG9zZXIiLCJ0cnlDYXRjaFRhcmdldCIsImdsb2JhbE9iamVjdCIsInRyeUNhdGNoZXIiLCJleGNsdWRlZFByb3RvdHlwZXMiLCJpc0V4Y2x1ZGVkUHJvdG8iLCJ2aXNpdGVkS2V5cyIsImVudW1lcmF0aW9uIiwidGhpc0Fzc2lnbm1lbnRQYXR0ZXJuIiwicmlkZW50Iiwic2FmZVRvU3RyaW5nIiwiQXJyYXlGcm9tIiwiaXRSZXN1bHQiLCJpdCIsImhhc0VudlZhcmlhYmxlcyIsImhhc01ldGhvZHMiLCJoYXNNZXRob2RzT3RoZXJUaGFuQ29uc3RydWN0b3IiLCJoYXNUaGlzQXNzaWdubWVudEFuZFN0YXRpY01ldGhvZHMiLCJhcHBlbmRlZSIsIm1heWJlRXJyb3IiLCJGYWtlQ29uc3RydWN0b3IiLCJsb2FkVGltZXMiLCJjcmVhdGVCdWZmZXIiLCJlbmNvZGluZ09yT2Zmc2V0IiwiZnJvbUFycmF5TGlrZSIsImZyb21BcnJheUJ1ZmZlciIsImZyb21TdHJpbmciLCJmcm9tT2JqZWN0IiwiYXNzZXJ0U2l6ZSIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwic2xvd1RvU3RyaW5nIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImFycmF5SW5kZXhPZiIsImluZGV4U2l6ZSIsImFyckxlbmd0aCIsInZhbExlbmd0aCIsImZvdW5kSW5kZXgiLCJoZXhXcml0ZSIsInN0ckxlbiIsInV0ZjhXcml0ZSIsImJsaXRCdWZmZXIiLCJhc2NpaVdyaXRlIiwiYnl0ZUFycmF5IiwiYXNjaWlUb0J5dGVzIiwibGF0aW4xV3JpdGUiLCJiYXNlNjRXcml0ZSIsInVjczJXcml0ZSIsInVuaXRzIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImRlY29kZUNvZGVQb2ludHNBcnJheSIsInR5cGVkQXJyYXlTdXBwb3J0IiwiX2F1Z21lbnQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiYnl0ZXMiLCJjaGVja0ludCIsIm9iamVjdFdyaXRlVUludDE2IiwibGl0dGxlRW5kaWFuIiwib2JqZWN0V3JpdGVVSW50MzIiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0Iiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInNsaWNlTGVuIiwidGFyZ2V0U3RhcnQiLCJJTlZBTElEX0JBU0U2NF9SRSIsImxlYWRTdXJyb2dhdGUiLCJzdHJpbmd0cmltIiwiYmFzZTY0Y2xlYW4iLCJfX2ltcG9ydERlZmF1bHQiLCJkZWMiLCJkaW5nYmF0c18xIiwiZGluZ2JhdHNCeUNvZGVQb2ludCIsImhpZ2hTdXJyb2dhdGUiLCJsb3dTdXJyb2dhdGUiLCJfaSIsImRpbmdiYXRzXzIiLCJkaW5nYmF0IiwiY29kZVBvaW50XzEiLCJzY2FsYXJWYWx1ZSIsInR5cGVmYWNlIiwiaXNMRSIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwibkJpdHMiLCJydCIsIlN0cmluZ1NvdXJjZSIsImJvdHRvbVVwIiwicnVsZUJ1aWxkZXIiLCJTdHJpbmdTb3VyY2VSYW5nZSIsImVuZEluZGV4IiwiX2Rlc2NyaXB0aW9uIiwiX3N0YXJ0SW5kZXgiLCJfZW5kSW5kZXgiLCJvdGhlclJhbmdlIiwiZGVzY3JpYmUiLCJfcG9zaXRpb24iLCJuZXh0TmV3TGluZSIsIlRva2VuSXRlcmF0b3IiLCJfdG9rZW5zIiwiZW5kVG9rZW4iLCJJbmZpeFJ1bGVzIiwiaW5maXhSdWxlcyIsInJ1bGVOYW1lcyIsImxlZnRSZXN1bHQiLCJjdXJyZW50UmVzdWx0IiwiaW5maXgiLCJpc0ZhaWx1cmUiLCJ1bnRpbEV4Y2x1c2l2ZSIsInVudGlsSW5jbHVzaXZlIiwicHJlZml4UnVsZXMiLCJpbmZpeFJ1bGVCdWlsZGVycyIsImNyZWF0ZVJ1bGUiLCJsZWZ0QXNzb2NpYXRpdmUiLCJyaWdodEFzc29jaWF0aXZlIiwiaW5maXhSdWxlQnVpbGRlciIsImxhenlSdWxlIiwicHJlZml4UnVsZSIsIl9sb2NhdGlvbiIsImZyb21BcnJheSIsImhhc05leHQiLCJMYXp5SXRlcmF0b3IiLCJfaXRlcmF0b3IiLCJtb3ZlZCIsIm1vdmVJZk5lY2Vzc2FyeSIsImZhaWx1cmUiLCJfc3RhdHVzIiwiX2hhc1ZhbHVlIiwiX3JlbWFpbmluZyIsIl9zb3VyY2UiLCJfZXJyb3JzIiwiY2hhbmdlUmVtYWluaW5nIiwiaXNDdXQiLCJyZWFkTmV4dFRva2VuIiwibGF6eUl0ZXJhdG9ycyIsInRva2VuVHlwZSIsIm1hdGNoVmFsdWUiLCJkZXNjcmliZVRva2VuTWlzbWF0Y2giLCJkZXNjcmliZVRva2VuIiwicGFyc2VycyIsImZvbGRsIiwibWVtbyIsImhhc0N1dCIsInN1YlJlc3VsdCIsImlzQ2FwdHVyZWQiLCJ3aXRoVmFsdWUiLCJTZXF1ZW5jZVZhbHVlcyIsImlzQ2FwdHVyZWRSdWxlIiwic3ViUnVsZSIsImZpcnN0Q2FwdHVyZSIsImV4dHJhY3QiLCJ2YWx1ZXNBcnJheSIsIl92YWx1ZXNBcnJheSIsImNhcHR1cmVOYW1lIiwibmV3VmFsdWVzIiwibmV3VmFsdWVzQXJyYXkiLCJjYXB0dXJlUnVsZSIsImFwcGx5VmFsdWVzIiwibm9uZSIsInJlcGVhdGVkV2l0aFNlcGFyYXRvciIsIm5vT3BSdWxlIiwib25lT3JNb3JlIiwiaXNPbmVPck1vcmUiLCJtYWluUnVsZSIsInJlbWFpbmluZ1Jlc3VsdCIsInJlbWFpbmluZ1J1bGUiLCJsZWZ0UnVsZSIsInJpZ2h0UnVsZSIsInJpZ2h0cyIsInJpZ2h0VmFsdWUiLCJsZWZ0VmFsdWUiLCJyZXBlYXRlZFJ1bGUiLCJyZXBlYXRlZFJlc3VsdCIsIm5vbkNvbnN1bWluZyIsImNhbGxPclJldHVybiIsImlzTm9uZSIsImlzU29tZSIsIm9yRWxzZSIsIlNvbWUiLCJpc09wdGlvbiIsImZyb21OdWxsYWJsZSIsImNhY2hlZFNldFRpbWVvdXQiLCJjYWNoZWRDbGVhclRpbWVvdXQiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJkcmFpblF1ZXVlIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsIm5vb3AiLCJub0NvbmZsaWN0IiwiVkVSU0lPTiIsIkFycmF5UHJvdG8iLCJPYmpQcm90byIsIlN5bWJvbFByb3RvIiwic3VwcG9ydHNBcnJheUJ1ZmZlciIsInN1cHBvcnRzRGF0YVZpZXciLCJEYXRhVmlldyIsIm5hdGl2ZUlzQXJyYXkiLCJuYXRpdmVLZXlzIiwibmF0aXZlQ3JlYXRlIiwibmF0aXZlSXNWaWV3IiwiX2lzTmFOIiwiX2lzRmluaXRlIiwiaGFzRW51bUJ1ZyIsIm5vbkVudW1lcmFibGVQcm9wcyIsIk1BWF9BUlJBWV9JTkRFWCIsInJlc3RBcmd1bWVudHMiLCJ0YWdUZXN0ZXIiLCJpc0FycmF5QnVmZmVyIiwibm9kZWxpc3QiLCJJbnQ4QXJyYXkiLCJpc0Z1bmN0aW9uJDEiLCJoYXNPYmplY3RUYWciLCJoYXNTdHJpbmdUYWdCdWciLCJpc0lFMTEiLCJpc0RhdGFWaWV3IiwiaXNEYXRhVmlldyQxIiwiZ2V0SW50OCIsImhhcyQxIiwiaXNBcmd1bWVudHMiLCJpc0FyZ3VtZW50cyQxIiwiaXNOYU4kMSIsImNyZWF0ZVNpemVQcm9wZXJ0eUNoZWNrIiwiZ2V0U2l6ZVByb3BlcnR5Iiwic2l6ZVByb3BlcnR5Iiwic2hhbGxvd1Byb3BlcnR5IiwiZ2V0Qnl0ZUxlbmd0aCIsImlzQnVmZmVyTGlrZSIsInR5cGVkQXJyYXlQYXR0ZXJuIiwiaXNUeXBlZEFycmF5JDEiLCJjb2xsZWN0Tm9uRW51bVByb3BzIiwiZW11bGF0ZWRTZXQiLCJub25FbnVtSWR4IiwiXyQxIiwiX3dyYXBwZWQiLCJ0b0J1ZmZlclZpZXciLCJidWZmZXJTb3VyY2UiLCJ0YWdEYXRhVmlldyIsImFTdGFjayIsImJTdGFjayIsImRlZXBFcSIsImFyZUFycmF5cyIsImFDdG9yIiwiYkN0b3IiLCJhbGxLZXlzIiwiaWUxMWZpbmdlcnByaW50Iiwid2Vha01hcE1ldGhvZHMiLCJmb3JFYWNoTmFtZSIsImNvbW1vbkluaXQiLCJtYXBUYWlsIiwibWFwTWV0aG9kcyIsInNldE1ldGhvZHMiLCJpc1dlYWtNYXAiLCJpc1NldCIsImlzV2Vha1NldCIsImNyZWF0ZUFzc2lnbmVyIiwia2V5c0Z1bmMiLCJleHRlbmRPd24iLCJiYXNlQ3JlYXRlIiwiQ3RvciIsInRvUGF0aCQxIiwidG9QYXRoIiwiZGVlcEdldCIsIm1hdGNoZXIiLCJvcHRpbWl6ZUNiIiwiYXJnQ291bnQiLCJiYXNlSXRlcmF0ZWUiLCJjcmVhdGVFc2NhcGVyIiwiZXNjYXBlciIsInRlc3RSZWdleHAiLCJyZXBsYWNlUmVnZXhwIiwiZXNjYXBlTWFwIiwiX2VzY2FwZSIsIl91bmVzY2FwZSIsInRlbXBsYXRlU2V0dGluZ3MiLCJldmFsdWF0ZSIsImludGVycG9sYXRlIiwibm9NYXRjaCIsImVzY2FwZXMiLCJlc2NhcGVSZWdFeHAiLCJiYXJlSWRlbnRpZmllciIsImlkQ291bnRlciIsImV4ZWN1dGVCb3VuZCIsInNvdXJjZUZ1bmMiLCJib3VuZEZ1bmMiLCJjYWxsaW5nQ29udGV4dCIsImJvdW5kQXJncyIsImNhbGxBcmdzIiwiaXNBcnJheUxpa2UiLCJmbGF0dGVuJDEiLCJpZHgiLCJiaW5kQWxsIiwibmVnYXRlIiwiZmluZEtleSIsImNyZWF0ZVByZWRpY2F0ZUluZGV4RmluZGVyIiwiZmluZExhc3RJbmRleCIsInNvcnRlZEluZGV4IiwibG93IiwiaGlnaCIsIm1pZCIsImNyZWF0ZUluZGV4RmluZGVyIiwicHJlZGljYXRlRmluZCIsImN1cnJlbnRLZXkiLCJjcmVhdGVSZWR1Y2UiLCJyZWR1Y2VyIiwicmVkdWNlUmlnaHQiLCJndWFyZCIsImNvbnRleHRQYXRoIiwiY29tcHV0ZWQiLCJsYXN0Q29tcHV0ZWQiLCJiZWhhdmlvciIsInBhcnRpdGlvbiIsImdyb3VwQnkiLCJjb3VudEJ5IiwicGFzcyIsInJlU3RyU3ltYm9sIiwia2V5SW5PYmoiLCJwaWNrIiwib21pdCIsImRpZmZlcmVuY2UiLCJ3aXRob3V0Iiwib3RoZXJBcnJheXMiLCJ1bmlxIiwidW5pb24iLCJjaGFpblJlc3VsdCIsIl9jaGFpbiIsImNoYWluIiwiYWxsRXhwb3J0cyIsImlzRWxlbWVudCIsInBhaXJzIiwiaW50ZXJjZXB0b3IiLCJtYXBPYmplY3QiLCJwcm9wZXJ0eU9mIiwib2xkU2V0dGluZ3MiLCJhcmd1bWVudCIsInVuaXF1ZUlkIiwibWVtb2l6ZSIsImhhc2hlciIsImxhdGVyIiwibGVhZGluZyIsInRocm90dGxlZCIsIl9ub3ciLCJ0cmFpbGluZyIsInBhc3NlZCIsImRlYm91bmNlZCIsIl9hcmdzIiwiY29tcG9zZSIsImRldGVjdCIsImZpbmRXaGVyZSIsImNvbGxlY3QiLCJpbmplY3QiLCJmb2xkciIsImluY2x1ZGUiLCJzaHVmZmxlIiwic29ydEJ5IiwiY3JpdGVyaWEiLCJ0YWtlIiwiZHJvcCIsImNvbXBhY3QiLCJpbnRlcnNlY3Rpb24iLCJ0cmFuc3Bvc2UiLCJjdG9yIiwic3VwZXJDdG9yIiwiVGVtcEN0b3IiLCJmb3JtYXRSZWdFeHAiLCJkZWJ1Z0Vudmlyb24iLCJkZWJ1Z3MiLCJzdHlsaXplTm9Db2xvciIsInN0eWxpemVXaXRoQ29sb3IiLCJmb3JtYXRWYWx1ZSIsInJlY3Vyc2VUaW1lcyIsInNpbXBsZSIsImZvcm1hdFByaW1pdGl2ZSIsInZpc2libGVLZXlzIiwiYXJyYXlUb0hhc2giLCJmb3JtYXRFcnJvciIsImJyYWNlcyIsImZvcm1hdFByb3BlcnR5IiwiZm9ybWF0QXJyYXkiLCJjdXIiLCJyZWR1Y2VUb1NpbmdsZVN0cmluZyIsImFyIiwib2JqZWN0VG9TdHJpbmciLCJwYWQiLCJpc1BsYWluT2JqZWN0Iiwic291cmNlcyIsIlhNTEF0dHJpYnV0ZSIsImRlYnVnSW5mbyIsImF0dE5hbWUiLCJhdHRWYWx1ZSIsInJlZjEiLCJYTUxOb2RlIiwic3VwZXJDbGFzcyIsIlhNTENEYXRhIiwiX19zdXBlcl9fIiwiWE1MQ29tbWVudCIsIlhNTERUREF0dExpc3QiLCJlbGVtZW50TmFtZSIsImF0dHJpYnV0ZVR5cGUiLCJkZWZhdWx0VmFsdWVUeXBlIiwiZWxlTmFtZSIsImR0ZEF0dFR5cGUiLCJkdGRBdHREZWZhdWx0IiwiZHRkQXR0TGlzdCIsIlhNTERUREVsZW1lbnQiLCJkdGRFbGVtZW50VmFsdWUiLCJkdGRFbGVtZW50IiwiWE1MRFRERW50aXR5IiwicHViSUQiLCJzeXNJRCIsImR0ZFB1YklEIiwiZHRkU3lzSUQiLCJuRGF0YSIsImR0ZE5EYXRhIiwiZHRkRW50aXR5VmFsdWUiLCJkdGRFbnRpdHkiLCJYTUxEVEROb3RhdGlvbiIsImR0ZE5vdGF0aW9uIiwiWE1MRGVjbGFyYXRpb24iLCJ4bWxWZXJzaW9uIiwieG1sRW5jb2RpbmciLCJ4bWxTdGFuZGFsb25lIiwiZGVjbGFyYXRpb24iLCJYTUxEb2NUeXBlIiwiZG9jdW1lbnRPYmplY3QiLCJhdHRMaXN0IiwicEVudGl0eSIsIm5vdGF0aW9uIiwiZG9jVHlwZSIsImVsZSIsImF0dCIsImVudCIsInBlbnQiLCJYTUxTdHJpbmdXcml0ZXIiLCJYTUxTdHJpbmdpZmllciIsIlhNTERvY3VtZW50IiwiaXNEb2N1bWVudCIsIndyaXRlck9wdGlvbnMiLCJYTUxFbGVtZW50IiwiWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiWE1MUmF3IiwiWE1MVGV4dCIsIlhNTERvY3VtZW50Q0IiLCJvbkRhdGFDYWxsYmFjayIsIm9uRW5kQ2FsbGJhY2siLCJjdXJyZW50TGV2ZWwiLCJvcGVuVGFncyIsImRvY3VtZW50U3RhcnRlZCIsImRvY3VtZW50Q29tcGxldGVkIiwib3BlbkN1cnJlbnQiLCJza2lwTnVsbEF0dHJpYnV0ZXMiLCJpbnN0cnVjdGlvbiIsImluc1RhcmdldCIsImluc1ZhbHVlIiwicm9vdE5vZGVOYW1lIiwiaXNPcGVuIiwiaXNDbG9zZWQiLCJub2QiLCJ0eHQiLCJkYXQiLCJjb20iLCJkdGQiLCJyb290T2JqZWN0IiwiY2xvbmVkU2VsZiIsImNsb25lZENoaWxkIiwibGVuMSIsImlnbm9yZURlY29yYXRvcnMiLCJjb252ZXJ0QXR0S2V5Iiwic2VwYXJhdGVBcnJheUl0ZW1zIiwiY29udmVydFRleHRLZXkiLCJjb252ZXJ0Q0RhdGFLZXkiLCJjb252ZXJ0Q29tbWVudEtleSIsImNvbnZlcnRSYXdLZXkiLCJjb252ZXJ0UElLZXkiLCJpbnNlcnRBZnRlciIsImNvbW1lbnRCZWZvcmUiLCJjb21tZW50QWZ0ZXIiLCJpbnN0cnVjdGlvbkJlZm9yZSIsImluc3RydWN0aW9uQWZ0ZXIiLCJ4bWxkZWMiLCJyZWYyIiwiaW1wb3J0RG9jdW1lbnQiLCJjbG9uZWRSb290IiwiaW1wb3J0WE1MQnVpbGRlciIsIlhNTFdyaXRlckJhc2UiLCJYTUxTdHJlYW1Xcml0ZXIiLCJpc0xhc3RSb290Tm9kZSIsInNwYWNlIiwiZW5kbGluZSIsInNwYWNlYmVmb3Jlc2xhc2giLCJuZXdsaW5lIiwidGV4dGlzcHJlc2VudCIsInRleHRpc3ByZXNlbnR3YXNzZXQiLCJuZXdsaW5lZGVmYXVsdCIsInByZXR0eWRlZmF1bHQiLCJkb250cHJldHR5dGV4dG5vZGVzIiwiYXNzZXJ0TGVnYWxDaGFyIiwibm9Eb3VibGVFbmNvZGluZyIsImVsZVRleHQiLCJlbEVzY2FwZSIsImF0dEVzY2FwZSIsImFtcHJlZ2V4IiwicmVmMyIsInJlZjQiLCJyZWY1IiwicmVmNiIsImhlYWRsZXNzIiwic3RyaW5nV3JpdGVyIiwic3RyZWFtV3JpdGVyIiwibW9tZW50IiwiZGVmaW5lTG9jYWxlIiwibWVyaWRpZW1QYXJzZSIsImlzUE0iLCJpc0xvd2VyIiwibG9uZ0RhdGVGb3JtYXQiLCJjYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsInJlbGF0aXZlVGltZSIsImZ1dHVyZSIsInBhc3QiLCJ5eSIsImRheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJ3ZWVrIiwiZG93IiwiZG95IiwicGx1cmFscyIsInBsdXJhbGl6ZSIsIndpdGhvdXRTdWZmaXgiLCJpc0Z1dHVyZSIsIndlZWtkYXlzUGFyc2VFeGFjdCIsImhvdXIiLCJtaW51dGUiLCJwb3N0Zm9ybWF0Iiwic3ltYm9sTWFwIiwicHJlcGFyc2UiLCJudW1iZXJNYXAiLCJyZWxhdGl2ZVRpbWVXaXRoUGx1cmFsIiwiZm9ybXMiLCJpc0Zvcm1hdCIsInBlcmlvZCIsInd3IiwibGFzdERpZ2l0IiwibGFzdDJEaWdpdHMiLCJtZXJpZGllbUhvdXIiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzUGFyc2VFeGFjdCIsInJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbiIsIm11dGF0aW9uVGFibGUiLCJzb2Z0TXV0YXRpb24iLCJtdXRhdGlvbiIsImxhc3ROdW1iZXIiLCJtb250aHNQYXJzZSIsIm1vbnRoc1JlZ2V4IiwibWluV2Vla2RheXNQYXJzZSIsIndlZWtkYXlzUGFyc2UiLCJmdWxsV2Vla2RheXNQYXJzZSIsInNob3J0V2Vla2RheXNQYXJzZSIsIm1vbnRoc1N0cmljdFJlZ2V4IiwibW9udGhzU2hvcnRTdHJpY3RSZWdleCIsImxvbmdNb250aHNQYXJzZSIsInNob3J0TW9udGhzUGFyc2UiLCJ0cmFuc2xhdGUiLCJsbCIsImxsbCIsImxsbGwiLCJwbHVyYWwiLCJwcm9jZXNzUmVsYXRpdmVUaW1lIiwibW9udGhzTm9taW5hdGl2ZUVsIiwibW9udGhzR2VuaXRpdmVFbCIsIm1vbWVudFRvRm9ybWF0IiwiX21vbnRoc0dlbml0aXZlRWwiLCJfbW9udGhzTm9taW5hdGl2ZUVsIiwiY2FsZW5kYXJFbCIsIm1vbSIsIl9jYWxlbmRhckVsIiwibW9udGhzU2hvcnREb3QiLCJudW1iZXJzUGFzdCIsIm51bWJlcnNGdXR1cmUiLCJ2ZXJiYWxOdW1iZXIiLCJtb250aHNTaG9ydFdpdGhEb3RzIiwibW9udGhzU2hvcnRXaXRob3V0RG90cyIsIndlZWtFbmRpbmdzIiwiZXJhcyIsInNpbmNlIiwibmFycm93IiwiYWJiciIsImVyYVllYXJPcmRpbmFsUmVnZXgiLCJlcmFZZWFyT3JkaW5hbFBhcnNlIiwiJDAiLCIkMSIsIiQyIiwiaXNVcHBlciIsImV6YWZlTnVtU3VmZml4IiwiZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyIiwidHJhbnNsYXRlU2luZ3VsYXIiLCJyZWxhdGl2ZVRpbWVXaXRoU2luZ3VsYXIiLCJ0cmFuc2xhdG9yIiwiY29ycmVjdEdyYW1tYXRpY2FsQ2FzZSIsIndvcmRLZXkiLCJyZWxhdGl2ZVRpbWVNciIsIm1vbnRoc05vbWluYXRpdmUiLCJtb250aHNTdWJqZWN0aXZlIiwiZGF5cyIsIndvcmQiLCJudW1iZXJzTm91bnMiLCJudW1iZXJOb3VuIiwiaHVuZHJlZCIsInRlbiIsIm51bWJlckFzTm91biIsImhtIiwicHJvY2Vzc0hvdXJzRnVuY3Rpb24iLCJub21pbmF0aXZlIiwiYWNjdXNhdGl2ZSIsImdlbml0aXZlIiwid2VicGFja0NvbnRleHQiLCJ3ZWJwYWNrQ29udGV4dFJlc29sdmUiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwiaG9va0NhbGxiYWNrIiwiaGFzT3duUHJvcCIsImlzT2JqZWN0RW1wdHkiLCJhcnJMZW4iLCJjcmVhdGVVVEMiLCJjcmVhdGVMb2NhbE9yVVRDIiwiZ2V0UGFyc2luZ0ZsYWdzIiwiX3BmIiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJyZmMyODIyIiwid2Vla2RheU1pc21hdGNoIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiaW52YWxpZFdlZWtkYXkiLCJfc3RyaWN0IiwiYmlnSG91ciIsIl9pc1ZhbGlkIiwiY3JlYXRlSW52YWxpZCIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiTW9tZW50IiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJhcmdMZW4iLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsInplcm9GaWxsIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiemVyb3NUb0ZpbGwiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInBhZGRlZCIsImxvY2FsZURhdGEiLCJmb3JtYXRNb21lbnQiLCJleHBhbmRGb3JtYXQiLCJtYWtlRm9ybWF0RnVuY3Rpb24iLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJhbGlhc2VzIiwiZGF0ZXMiLCJ3ZWVrZGF5IiwiaXNvd2Vla2RheXMiLCJpc293ZWVrZGF5IiwiREREIiwiZGF5b2Z5ZWFycyIsImRheW9meWVhciIsIm1pbGxpc2Vjb25kIiwicXVhcnRlcnMiLCJxdWFydGVyIiwiZ2ciLCJ3ZWVreWVhcnMiLCJ3ZWVreWVhciIsIkdHIiwiaXNvd2Vla3llYXJzIiwiaXNvd2Vla3llYXIiLCJ3ZWVrcyIsImlzb3dlZWtzIiwiaXNvd2VlayIsInllYXJzIiwibm9ybWFsaXplVW5pdHMiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZFByb3AiLCJub3JtYWxpemVkSW5wdXQiLCJwcmlvcml0aWVzIiwiaXNvV2Vla2RheSIsImRheU9mWWVhciIsIndlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJpc29XZWVrIiwibWF0Y2gxIiwibWF0Y2gyIiwibWF0Y2gzIiwibWF0Y2g0IiwibWF0Y2g2IiwibWF0Y2gxdG8yIiwibWF0Y2gzdG80IiwibWF0Y2g1dG82IiwibWF0Y2gxdG8zIiwibWF0Y2gxdG80IiwibWF0Y2gxdG82IiwibWF0Y2hVbnNpZ25lZCIsIm1hdGNoU2lnbmVkIiwibWF0Y2hPZmZzZXQiLCJtYXRjaFNob3J0T2Zmc2V0IiwibWF0Y2hXb3JkIiwibWF0Y2gxdG8yTm9MZWFkaW5nWmVybyIsIm1hdGNoMXRvMkhhc1plcm8iLCJhZGRSZWdleFRva2VuIiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInJlZ2V4RXNjYXBlIiwiYWJzRmxvb3IiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwiYWRkUGFyc2VUb2tlbiIsInRva2VuTGVuIiwiYWRkV2Vla1BhcnNlVG9rZW4iLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsImlzTGVhcFllYXIiLCJZRUFSIiwiTU9OVEgiLCJEQVRFIiwiSE9VUiIsIk1JTlVURSIsIlNFQ09ORCIsIk1JTExJU0VDT05EIiwiV0VFSyIsIldFRUtEQVkiLCJkYXlzSW5ZZWFyIiwiZ2V0U2V0WWVhciIsIm1ha2VHZXRTZXQiLCJrZWVwVGltZSIsInNldCQxIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwic2V0VVRDU2Vjb25kcyIsInNldFNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0TWludXRlcyIsInNldFVUQ0hvdXJzIiwic2V0SG91cnMiLCJzZXRVVENEYXRlIiwic2V0RGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJtb2RNb250aCIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwic2V0TW9udGgiLCJzZXRVVENNb250aCIsImdldFNldE1vbnRoIiwiY29tcHV0ZU1vbnRoc1BhcnNlIiwiY21wTGVuUmV2Iiwic2hvcnRQIiwibG9uZ1AiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsIl9tb250aHNSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgiLCJjcmVhdGVEYXRlIiwiY3JlYXRlVVRDRGF0ZSIsImZpcnN0V2Vla09mZnNldCIsImZ3ZCIsImRheU9mWWVhckZyb21XZWVrcyIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXMiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiIsImRlZmF1bHRXZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCIsImRlZmF1bHRXZWVrZGF5c01pblJlZ2V4IiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJjb21wdXRlV2Vla2RheXNQYXJzZSIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsIm1pblBpZWNlcyIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJoRm9ybWF0IiwibG93ZXJjYXNlIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwia0lucHV0IiwiX2lzUG0iLCJfbWVyaWRpZW0iLCJwb3MxIiwicG9zMiIsImdldFNldEhvdXIiLCJnbG9iYWxMb2NhbGUiLCJiYXNlQ29uZmlnIiwibG9jYWxlcyIsImxvY2FsZUZhbWlsaWVzIiwiY29tbW9uUHJlZml4IiwiYXJyMSIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJsb2FkTG9jYWxlIiwib2xkTG9jYWxlIiwiaXNMb2NhbGVOYW1lU2FuZSIsIl9hYmJyIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwicGFyZW50TG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwiYWxsb3dUaW1lIiwidHpGb3JtYXQiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsInVudHJ1bmNhdGVZZWFyIiwieWVhclN0ciIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJjaGVja1dlZWtkYXkiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImNhbGN1bGF0ZU9mZnNldCIsImNvbmZpZ0Zyb21BcnJheSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsIm5vd1ZhbHVlIiwiX3VzZVVUQyIsImN1cnJlbnREYXRlQXJyYXkiLCJ3ZWVrZGF5T3ZlcmZsb3ciLCJjdXJXZWVrIiwiY3JlYXRlTG9jYWwiLCJfd2VlayIsIl9kYXlPZlllYXIiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfbmV4dERheSIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsImlzUG0iLCJtZXJpZGllbUZpeFdyYXAiLCJlcmFzQ29udmVydFllYXIiLCJwcmVwYXJlQ29uZmlnIiwidGVtcENvbmZpZyIsImJlc3RNb21lbnQiLCJzY29yZVRvQmVhdCIsImN1cnJlbnRTY29yZSIsInZhbGlkRm9ybWF0Rm91bmQiLCJiZXN0Rm9ybWF0SXNWYWxpZCIsImNvbmZpZ2ZMZW4iLCJzY29yZSIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiY29uZmlnRnJvbVN0cmluZyIsImRheU9yRGF0ZSIsImNvbmZpZ0Zyb21PYmplY3QiLCJjb25maWdGcm9tSW5wdXQiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJ1bml0SGFzRGVjaW1hbCIsIm9yZGVyTGVuIiwiaXNEdXJhdGlvblZhbGlkIiwiX21pbGxpc2Vjb25kcyIsIl9kYXlzIiwiX21vbnRocyIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJjbG9uZVdpdGhPZmZzZXQiLCJzZXRUaW1lIiwiZ2V0RGF0ZU9mZnNldCIsImlzVXRjIiwiYXNwTmV0UmVnZXgiLCJpc29SZWdleCIsImNyZWF0ZUR1cmF0aW9uIiwiZGlmZlJlcyIsInBhcnNlSXNvIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImlucCIsImNyZWF0ZUFkZGVyIiwiYWRkU3VidHJhY3QiLCJpc0FkZGluZyIsImlzTW9tZW50SW5wdXQiLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc051bWJlck9yU3RyaW5nQXJyYXkiLCJvYmplY3RUZXN0IiwicHJvcGVydHlUZXN0IiwicHJvcGVydHlMZW4iLCJpc01vbWVudElucHV0T2JqZWN0IiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJuZXdMb2NhbGVEYXRhIiwiZGVmYXVsdEZvcm1hdCIsImRlZmF1bHRGb3JtYXRVdGMiLCJNU19QRVJfU0VDT05EIiwiTVNfUEVSX01JTlVURSIsIk1TX1BFUl9IT1VSIiwiTVNfUEVSXzQwMF9ZRUFSUyIsIm1vZCQxIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsIm1hdGNoRXJhQWJiciIsImVyYXNBYmJyUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiZXJhc05hbWUiLCJlcmFzQWJiciIsImVyYXNOYXJyb3ciLCJhYmJyUGllY2VzIiwibmFtZVBpZWNlcyIsIm5hcnJvd1BpZWNlcyIsIl9lcmFzUmVnZXgiLCJfZXJhc05hbWVSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsImFkZFdlZWtZZWFyRm9ybWF0VG9rZW4iLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJlcmFzTmFtZVJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiZXJhc1BhcnNlIiwiX2VyYVllYXJPcmRpbmFsUmVnZXgiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsUGFyc2UiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJnZXRTZXRTZWNvbmQiLCJwYXJzZU1zIiwicHJlUGFyc2VQb3N0Rm9ybWF0IiwiaXNDYWxlbmRhclNwZWMiLCJzb2QiLCJjYWxlbmRhckZvcm1hdCIsImFzRmxvYXQiLCJ6b25lRGVsdGEiLCJzdGFydE9mRGF0ZSIsImlucHV0U3RyaW5nIiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJpbnZhbGlkQXQiLCJsb2NhbElucHV0IiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsInBhcnNpbmdGbGFncyIsInByaW9yaXRpemVkIiwidW5pdHNPYmoiLCJnZXRQcmlvcml0aXplZFVuaXRzIiwicHJpb3JpdGl6ZWRMZW4iLCJrZWVwT2Zmc2V0IiwiaXNMb2NhbCIsImNyZWF0aW9uRGF0YSIsImVyYU5hbWUiLCJlcmFOYXJyb3ciLCJlcmFBYmJyIiwiZXJhWWVhciIsImlzb1dlZWtzIiwid2Vla0luZm8iLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsInBhcnNlV2Vla2RheSIsInBhcnNlSXNvV2Vla2RheSIsImtlZXBMb2NhbFRpbWUiLCJrZWVwTWludXRlcyIsImxvY2FsQWRqdXN0IiwiX2NoYW5nZUluUHJvZ3Jlc3MiLCJwYXJzZVpvbmUiLCJ0Wm9uZSIsImhhc0FsaWduZWRIb3VyT2Zmc2V0IiwiaXNEU1QiLCJpc1V0Y09mZnNldCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJpc0RTVFNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwiYXJyYXkxIiwiYXJyYXkyIiwiZG9udENvbnZlcnQiLCJsZW5ndGhEaWZmIiwiZGlmZnMiLCJjb21wYXJlQXJyYXlzIiwicHJvdG8kMSIsImdldCQxIiwibGlzdE1vbnRoc0ltcGwiLCJsaXN0V2Vla2RheXNJbXBsIiwibG9jYWxlU29ydGVkIiwiX2NhbGVuZGFyIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b2siLCJfaW52YWxpZERhdGUiLCJfb3JkaW5hbCIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiX2VyYXMiLCJfbW9udGhzU2hvcnQiLCJfbW9udGhzUGFyc2VFeGFjdCIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJfd2Vla2RheXMiLCJfd2Vla2RheXNNaW4iLCJfd2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1BhcnNlRXhhY3QiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJtYXRoQWJzIiwiYWRkU3VidHJhY3QkMSIsImFic0NlaWwiLCJkYXlzVG9Nb250aHMiLCJtb250aHNUb0RheXMiLCJtYWtlQXMiLCJhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwidmFsdWVPZiQxIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwicHJvdG8kMiIsIm1vbnRoc0Zyb21EYXlzIiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwicG9zTmVnRHVyYXRpb24iLCJyZWxhdGl2ZVRpbWUkMSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsInJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsIm15TW9tZW50IiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUwiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwiREFURVRJTUVfTE9DQUxfTVMiLCJUSU1FIiwiVElNRV9TRUNPTkRTIiwiVElNRV9NUyIsImdyb3VwU2l6ZSIsInNlY29uZGFyeUdyb3VwU2l6ZSIsImdyb3VwU2VwYXJhdG9yIiwiZnJhY3Rpb25Hcm91cFNpemUiLCJmcmFjdGlvbkdyb3VwU2VwYXJhdG9yIiwiREVCVUciLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsIkRFQ0lNQUxfUExBQ0VTIiwiUk9VTkRJTkdfTU9ERSIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJDUllQVE8iLCJNT0RVTE9fTU9ERSIsIlBPV19QUkVDSVNJT04iLCJGT1JNQVQiLCJBTFBIQUJFVCIsImlzQmlnTnVtYmVyIiwiX2lzQmlnTnVtYmVyIiwibWF4aW11bSIsIm1pbmltdW0iLCJwbHVzIiwiYWJzb2x1dGVWYWx1ZSIsImNvbXBhcmVkVG8iLCJkcCIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJpbnRlZ2VyVmFsdWUiLCJpc0VxdWFsVG8iLCJpc0dyZWF0ZXJUaGFuIiwiaXNHcmVhdGVyVGhhbk9yRXF1YWxUbyIsImlzTGVzc1RoYW4iLCJpc0xlc3NUaGFuT3JFcXVhbFRvIiwiaXNOZWdhdGl2ZSIsImlzUG9zaXRpdmUiLCJtdWx0aXBsaWVkQnkiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2QiLCJzaGlmdGVkQnkiLCJzcXVhcmVSb290IiwidG9FeHBvbmVudGlhbCIsInRvRm9ybWF0IiwidG9GcmFjdGlvbiIsInRvUHJlY2lzaW9uIiwiQmlnTnVtYmVyIiwibGFuZ3VhZ2VUYWciLCJkZWxpbWl0ZXJzIiwidGhvdXNhbmRzIiwiZGVjaW1hbCIsImFiYnJldmlhdGlvbnMiLCJ0aG91c2FuZCIsIm1pbGxpb24iLCJiaWxsaW9uIiwidHJpbGxpb24iLCJzcGFjZVNlcGFyYXRlZCIsImN1cnJlbmN5Iiwic3ltYm9sIiwiY3VycmVuY3lGb3JtYXQiLCJ0aG91c2FuZFNlcGFyYXRlZCIsInRvdGFsTGVuZ3RoIiwiZm91ckRpZ2l0cyIsImZ1bGxXaXRoVHdvRGVjaW1hbHMiLCJtYW50aXNzYSIsImZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5IiwiZnVsbFdpdGhOb0RlY2ltYWxzIiwiZ2VuZXJhbCIsImNoYXJhY3RlcmlzdGljIiwiZm9yY2VBdmVyYWdlIiwiYXZlcmFnZSIsIm9wdGlvbmFsTWFudGlzc2EiLCJwYXJzZUZvcm1hdCIsInZhbGlkYXRlRm9ybWF0IiwicG9zdGZpeCIsImN1cnJlbnRDdXJyZW5jeSIsImN1cnJlbmN5UG9zaXRpb24iLCJjdXJyZW5jeVN5bWJvbCIsInByb3ZpZGVkRm9ybWF0IiwiY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCIsInByZWZpeFN5bWJvbCIsImN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCIsImN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdCIsImN1cnJlbnRBYmJyZXZpYXRpb25zIiwic3BhY2VkIiwiY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0IiwiY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0IiwiY3VycmVudE9yZGluYWwiLCJudW1icm8iLCJjdXJyZW50RGVmYXVsdHMiLCJoYXNaZXJvRm9ybWF0IiwiZ2V0WmVyb0Zvcm1hdCIsIm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWMiLCJ0cmltTWFudGlzc2EiLCJleHBvbmVudGlhbCIsImFiYnJldmlhdGlvbiIsIm1hbnRpc3NhUHJlY2lzaW9uIiwiY2hhcmFjdGVyaXN0aWNQcmVjaXNpb24iLCJjdXJyZW50RGVsaW1pdGVycyIsInRob3VzYW5kc1NpemUiLCJnZXRCeXRlVW5pdCIsImdldEJpbmFyeUJ5dGVVbml0IiwiZ2V0RGVjaW1hbEJ5dGVVbml0IiwiZm9ybWF0T3JEZWZhdWx0IiwiY3VycmVudExhbmd1YWdlIiwib3JkaW5hbEZvcm1hdCIsImJ5dGVGb3JtYXQiLCJwZXJjZW50YWdlRm9ybWF0Iiwic2V0RGVmYXVsdHMiLCJzZXRaZXJvRm9ybWF0IiwibGFuZ3VhZ2VEYXRhIiwidmFsaWRhdGVMYW5ndWFnZSIsImxvYWRMYW5ndWFnZXNJbk5vZGUiLCJpc051bWJybyIsIm11bHRpcGx5IiwidW5mb3JtYXQiLCJ6ZXJvRm9ybWF0IiwiZGVmYXVsdEN1cnJlbmN5Rm9ybWF0IiwiZmFjdG9yIiwidmFsaWRWYWx1ZXMiLCJyZXN0cmljdGlvbiIsIm1hbmRhdG9yeSIsInJlc3RyaWN0aW9ucyIsInRpbWVEZWZhdWx0cyIsInZhbGlkYXRlSW5wdXQiLCJJU19QQVBBX1dPUktFUiIsImR5bmFtaWNUeXBpbmdGdW5jdGlvbiIsIldPUktFUlNfU1VQUE9SVEVEIiwiQkxPQl9VUkwiLCJ1c2VyU3RlcCIsInVzZXJDaHVuayIsInVzZXJDb21wbGV0ZSIsInVzZXJFcnJvciIsIndvcmtlcklkIiwiTk9ERV9TVFJFQU1fSU5QVVQiLCJGaWxlIiwidW5wYXJzZSIsIkJBRF9ERUxJTUlURVJTIiwicXVvdGVzIiwic2tpcEVtcHR5TGluZXMiLCJxdW90ZUNoYXIiLCJlc2NhcGVGb3JtdWxhZSIsIlJFQ09SRF9TRVAiLCJVTklUX1NFUCIsIkJZVEVfT1JERVJfTUFSSyIsIkxvY2FsQ2h1bmtTaXplIiwiUmVtb3RlQ2h1bmtTaXplIiwiRGVmYXVsdERlbGltaXRlciIsIlBhcnNlckhhbmRsZSIsIk5ldHdvcmtTdHJlYW1lciIsIkZpbGVTdHJlYW1lciIsIlN0cmluZ1N0cmVhbWVyIiwiUmVhZGFibGVTdHJlYW1TdHJlYW1lciIsImlucHV0RWxlbSIsImluc3RhbmNlQ29uZmlnIiwiX2ZpbmlzaGVkIiwiX2NvbXBsZXRlZCIsIl9oYWx0ZWQiLCJfYmFzZUluZGV4IiwiX3BhcnRpYWxMaW5lIiwiX3Jvd0NvdW50IiwiX3N0YXJ0IiwiX25leHRDaHVuayIsImlzRmlyc3RDaHVuayIsIl9jb21wbGV0ZVJlc3VsdHMiLCJzdHJlYW1lciIsInBhcnNlQ2h1bmsiLCJiZWZvcmVGaXJzdENodW5rIiwiYWJvcnRlZCIsInByZXZpZXciLCJXT1JLRVJfSUQiLCJfc2VuZEVycm9yIiwiX3JlYWRDaHVuayIsIl9jaHVua0xvYWRlZCIsIndpdGhDcmVkZW50aWFscyIsIl9jaHVua0Vycm9yIiwiZG93bmxvYWRSZXF1ZXN0Qm9keSIsImRvd25sb2FkUmVxdWVzdEhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVGV4dCIsImdldFJlc3BvbnNlSGVhZGVyIiwic3RhdHVzVGV4dCIsIndlYmtpdFNsaWNlIiwibW96U2xpY2UiLCJGaWxlUmVhZGVyU3luYyIsInJlYWRBc1RleHQiLCJfc3RyZWFtRGF0YSIsIl9zdHJlYW1FbmQiLCJfc3RyZWFtRXJyb3IiLCJfY2hlY2tJc0ZpbmlzaGVkIiwiX3N0cmVhbUNsZWFuVXAiLCJ0cmFuc2Zvcm1IZWFkZXIiLCJzdWNjZXNzZnVsIiwiYmVzdERlbGltaXRlciIsImRlbGltaXRlcnNUb0d1ZXNzIiwiZ2V0Q2hhckluZGV4IiwiZmFzdE1vZGUiLCJsaW5lYnJlYWsiLCJ0cnVuY2F0ZWQiLCJybmRzOCIsImJ5dGVUb0hleCIsInJuZHMiLCJmdW5jVG9TdHJpbmciLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNCaW5hcnlPYmplY3QiLCJjbG9uZUJpbmFyeU9iamVjdCIsInRvUHJvbWlzZSIsInVzZWRDQiIsInJlc3AiLCJtZXNnIiwiYWRhcHRlckZ1biIsIl9kZXN0cm95ZWQiLCJsb2dBcmdzIiwib3JpZ0NhbGxiYWNrIiwicmVzcG9uc2VBcmdzIiwibG9nQXBpQ2FsbCIsInRhc2txdWV1ZSIsImlzUmVhZHkiLCJhZGRUYXNrIiwiZmFpbGVkIiwiaGFzTG9jYWwiLCJNQVhfTlVNX0NPTkNVUlJFTlRfUkVRVUVTVFMiLCJpZGVudGl0eUZ1bmN0aW9uIiwiZm9ybWF0UmVzdWx0Rm9yT3BlblJldnNHZXQiLCJidWxrR2V0IiwicmVxdWVzdHMiLCJkb2NzIiwicmVxdWVzdHNCeUlkIiwicmVxdWVzdCIsIm51bURvY3MiLCJudW1Eb25lIiwicGVyRG9jUmVzdWx0cyIsImFsbFJlcXVlc3RzIiwibmV4dEJhdGNoIiwidXBUbyIsImRvY0lkIiwiZG9jSWR4IiwiZG9jUmVxdWVzdHMiLCJkb2NPcHRzIiwib3Blbl9yZXZzIiwicmV2IiwiZm9ybWF0UmVzdWx0IiwicGFyYW0iLCJwcm9jZXNzQmF0Y2giLCJoYXNMb2NhbFN0b3JhZ2UiLCJDaGFuZ2VzIiwiZGJOYW1lIiwiaW5wcm9ncmVzcyIsImV2ZW50RnVuY3Rpb24iLCJjaGFuZ2VzT3B0cyIsImNhbmNlbGxlZCIsIm5vdGlmeUxvY2FsV2luZG93cyIsIm5vdGlmeSIsImd1YXJkZWRDb25zb2xlIiwiZGVmYXVsdEJhY2tPZmYiLCJtYXhUaW1lb3V0IiwicmFuZG9tTnVtYmVyIiwiZXhwbGFpbkVycm9yIiwiUG91Y2hFcnJvciIsIk1JU1NJTkdfQlVMS19ET0NTIiwiTUlTU0lOR19ET0MiLCJSRVZfQ09ORkxJQ1QiLCJJTlZBTElEX0lEIiwiTUlTU0lOR19JRCIsIlJFU0VSVkVEX0lEIiwiVU5LTk9XTl9FUlJPUiIsIkJBRF9BUkciLCJRVUVSWV9QQVJTRV9FUlJPUiIsIkRPQ19WQUxJREFUSU9OIiwiQkFEX1JFUVVFU1QiLCJOT1RfQU5fT0JKRUNUIiwiSURCX0VSUk9SIiwiSU5WQUxJRF9SRVYiLCJNSVNTSU5HX1NUVUIiLCJjcmVhdGVFcnJvciIsIkN1c3RvbVBvdWNoRXJyb3IiLCJnZW5lcmF0ZUVycm9yRnJvbVJlc3BvbnNlIiwiZmlsdGVyQ2hhbmdlIiwiaGFzRmlsdGVyIiwicXVlcnlfcGFyYW1zIiwiZmlsdGVyUmV0dXJuIiwidHJ5RmlsdGVyIiwiYXR0YWNobWVudHMiLCJpbnZhbGlkSWRFcnJvciIsImlzUmVtb3RlIiwiX3JlbW90ZSIsInBhcnNlRGVzaWduRG9jRnVuY3Rpb25OYW1lIiwibm9ybWFsaXplRGVzaWduRG9jRnVuY3Rpb25OYW1lIiwibm9ybWFsaXplZCIsInFQYXJzZXIiLCJwYXJzZVVyaSIsImVuY29kZWQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzY29wZUV2YWwiLCJ1cHNlcnQiLCJkaWZmRnVuIiwiZG9jUmV2IiwiX3JldiIsIm5ld0RvYyIsInVwZGF0ZWQiLCJ0cnlBbmRQdXQiLCJ0aGlzQXRvYiIsImF0b2IiLCJ0aGlzQnRvYSIsImJ0b2EiLCJjcmVhdGVCbG9iIiwiYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlciIsImJpbiIsImJpblN0cmluZ1RvQmx1ZmZlciIsImJpblN0cmluZyIsImI2NFRvQmx1ZmZlciIsInJlYWRBc0JpbmFyeVN0cmluZyIsImhhc0JpbmFyeVN0cmluZyIsImFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmciLCJibG9iVG9CaW5hcnlTdHJpbmciLCJibG9iT3JCdWZmZXIiLCJibG9iVG9CYXNlNjQiLCJzZXRJbW1lZGlhdGVTaGltIiwiTUQ1X0NIVU5LX1NJWkUiLCJhcHBlbmRCbG9iIiwiYXBwZW5kU3RyaW5nIiwiYXBwZW5kQmluYXJ5IiwiYmluYXJ5TWQ1IiwiaW5wdXRJc1N0cmluZyIsImN1cnJlbnRDaHVuayIsImxvYWROZXh0Q2h1bmsiLCJzdHJpbmdNZDUiLCJkZXRlcm1pbmlzdGljX3JldnMiLCJtdXRhdGVhYmxlRG9jIiwiX3Jldl90cmVlIiwid2lubmluZ1JldiIsIm1ldGFkYXRhIiwid2lubmluZ0lkIiwid2lubmluZ1BvcyIsIndpbm5pbmdEZWxldGVkIiwidG9WaXNpdCIsInJldl90cmVlIiwiaWRzIiwiYnJhbmNoZXMiLCJkZWxldGVkIiwidHJhdmVyc2VSZXZUcmVlIiwicmV2cyIsIm5ld0N0eCIsInNvcnRCeVBvcyIsImNvbGxlY3RMZWF2ZXMiLCJsZWF2ZXMiLCJpc0xlYWYiLCJjb2xsZWN0Q29uZmxpY3RzIiwiY29uZmxpY3RzIiwicm9vdFRvTGVhZiIsImhpc3RvcnkiLCJzb3J0QnlQb3MkMSIsImluc2VydFNvcnRlZCIsImJpbmFyeVNlYXJjaCIsInBhdGhUb1RyZWUiLCJudW1TdGVtbWVkIiwiY3VycmVudExlYWYiLCJjb21wYXJlVHJlZSIsIm1lcmdlVHJlZSIsImluX3RyZWUxIiwiaW5fdHJlZTIiLCJ0cmVlMSIsInRyZWUyIiwibWVyZ2VkIiwiZG9NZXJnZSIsImRvbnRFeHBhbmQiLCJyZXN0cmVlIiwiYnJhbmNoIiwidDEiLCJ0MiIsImNhbmRpZGF0ZVBhcmVudHMiLCJ0cmVlcyIsInBhcmVudElkeCIsImVsZW1lbnRzTGVuIiwibmV3VHJlZSIsInN0ZW1tZWQiLCJzdGVtbWVkUmV2cyIsInJldkhhc2giLCJzdGVtIiwiZ2V0VHJlZXMiLCJpc0RlbGV0ZWQiLCJpc0xvY2FsSWQiLCJwcm9jZXNzQ2hhbmdlIiwiY2hhbmdlTGlzdCIsIl9jb25mbGljdHMiLCJDaGFuZ2VzJDEiLCJvbkRlc3Ryb3kiLCJsYXN0U2VxIiwidHJ5Q2F0Y2hJbkNoYW5nZUxpc3RlbmVyIiwiUG91Y2hEQiIsIl9jaGFuZ2VzRmlsdGVyUGx1Z2luIiwiZG9DaGFuZ2VzIiwiY29udGludW91cyIsImxpdmUiLCJzaG91bGRGaWx0ZXIiLCJkZXNjZW5kaW5nIiwibmV3UHJvbWlzZSIsIl9jaGFuZ2VzIiwidXBkYXRlX3NlcSIsInlhbmtFcnJvciIsImNvbXBhcmVCeUlkVGhlblJldiIsIl9yZXZpc2lvbnMiLCJkb05leHRDb21wYWN0aW9uIiwidGFzayIsIl9jb21wYWN0aW9uUXVldWUiLCJsYXN0X3NlcSIsIl9jb21wYWN0IiwiYXBwZW5kUHVyZ2VTZXEiLCJyZXYkJDEiLCJwdXJnZVNlcSIsInB1cmdlcyIsInB1cmdlZF9pbmZvc19saW1pdCIsImlzTm90U2luZ2xlRG9jIiwidmFsaWRSZXZSZWdleCIsImlzVmFsaWRSZXYiLCJBYnN0cmFjdFBvdWNoREIiLCJfc2V0dXAiLCJwb3N0IiwiYnVsa0RvY3MiLCJfcHV0TG9jYWwiLCJfZGVsZXRlZCIsIl9yZW1vdmVMb2NhbCIsInB1dERvYyIsIl9wdXQiLCJuZXdfZWRpdHMiLCJvbGRSZXZJZCIsIm5ld1Jldk51bSIsIm5ld1JldklkIiwicHV0QXR0YWNobWVudCIsImF0dGFjaG1lbnRJZCIsImFwaSIsImNyZWF0ZUF0dGFjaG1lbnQiLCJwcmV2cmV2cG9zIiwicmV2cG9zIiwicmVtb3ZlQXR0YWNobWVudCIsImRvY09ySWQiLCJvcHRzT3JSZXYiLCJ3YXNfZGVsZXRlIiwicmV2c0RpZmYiLCJhZGRUb01pc3NpbmciLCJyZXZJZCIsIl9nZXRSZXZpc2lvblRyZWUiLCJtaXNzaW5nRm9ySWQiLCJwcm9jZXNzRG9jIiwibWlzc2luZ09iaiIsImNvbXBhY3REb2N1bWVudCIsInJldlRyZWUiLCJlZGdlcyIsInBybnQiLCJjb21wdXRlSGVpZ2h0IiwiY2FuZGlkYXRlcyIsIl9kb0NvbXBhY3Rpb24iLCJfZ2V0TG9jYWwiLCJmaW5pc2hPcGVuUmV2cyIsImxhdGVzdCIsIl9nZXQiLCJyZXZzX2luZm8iLCJzcGxpdHRlZFJldiIsInJldk5vIiwiY3VycmVudFBhdGgiLCJwYXRoSWQiLCJpbmRleE9mUmV2IiwiX3JldnNfaW5mbyIsIl9nZXRBdHRhY2htZW50IiwiZ2V0QXR0YWNobWVudCIsInN0YXJ0X2tleSIsInN0YXJ0a2V5IiwiZW5kX2tleSIsImVuZGtleSIsImluY29tcGF0aWJsZU9wdCIsImFsbERvY3NLZXlzUGFyc2UiLCJfYWxsRG9jcyIsIl9jbG9zZSIsIl9pbmZvIiwiZGJfbmFtZSIsImF1dG9fY29tcGFjdGlvbiIsImF0dGFjaG1lbnRFcnJvciIsImF0dGFjaG1lbnROYW1lRXJyb3IiLCJhdHRzIiwiY2xlYW5Eb2NzIiwiX2J1bGtEb2NzIiwicmVnaXN0ZXJEZXBlbmRlbnREYXRhYmFzZSIsImRlcGVuZGVudERiIiwiZGJPcHRpb25zIiwiX19vcHRzIiwidmlld19hZGFwdGVyIiwiZGVwREIiLCJkZXBlbmRlbnREYnMiLCJ1c2VQcmVmaXgiLCJ1c2VfcHJlZml4IiwiZGVzdHJveURiIiwibG9jYWxEb2MiLCJkZWxldGVkTWFwIiwidHJ1ZU5hbWUiLCJ0YXNrSWQiLCJyZXR1cm5fZG9jcyIsImNvbXBhY3RlZERvY3MiLCJhY3RpdmVUYXNrcyIsImNvbXBsZXRlZF9pdGVtcyIsIm9uRXJyb3IiLCJvbkNvbXBsZXRlIiwidG90YWxfaXRlbXMiLCJfdHlwZSIsInB1cmdlIiwiX3B1cmdlIiwidGFyZ2V0UmV2IiwiZmluZFBhdGhUb0xlYWYiLCJUYXNrUXVldWUiLCJjcmVhdGVDbGFzcyIsImtsYXNzIiwiUG91Y2hJbnRlcm5hbCIsImJhY2tlbmQiLCJhZGFwdGVycyIsInByZWZlcnJlZEFkYXB0ZXJzIiwiYWRhcHRlck5hbWUiLCJwYXJzZUFkYXB0ZXIiLCJfYWRhcHRlciIsIm9uRGVzdHJveWVkIiwiZnJvbV9jb25zdHJ1Y3RvciIsIm9uQ2xvc2VkIiwicHJlcGFyZUZvckRlc3RydWN0aW9uIiwiZiQxIiwiSGVhZGVycyIsImV2ZW50RW1pdHRlciIsImdldEZpZWxkRnJvbURvYyIsInBhcnNlZEZpZWxkIiwicGFyc2VGaWVsZCIsImZpZWxkTmFtZSIsIlBvdWNoIiwiZGVzdHJ1Y3RMaXN0ZW5lcnMiLCJfZGVzdHJ1Y3Rpb25MaXN0ZW5lcnMiLCJkYkxpc3QiLCJzZXRVcEV2ZW50RW1pdHRlciIsImFkZFRvUHJlZmVycmVkQWRhcHRlcnMiLCJfX2RlZmF1bHRzIiwiZGVmYXVsdE9wdHMiLCJQb3VjaFdpdGhEZWZhdWx0cyIsInRhc2tzIiwiY3JlYXRlZF9hdCIsInVwZGF0ZWRUYXNrIiwibWVyZ2VkVGFzayIsInVwZGF0ZWRfYXQiLCJjb21iaW5hdGlvbkZpZWxkcyIsImlzQ29tYmluYXRpb25hbEZpZWxkIiwibWVyZ2VBbmRlZFNlbGVjdG9ycyIsInNlbGVjdG9ycyIsIiRvciIsIiRub3IiLCJzZWxlY3RvciIsIiRlcSIsImxvbmdlc3QiLCJmaWVsZE1hdGNoZXJzIiwiJGd0ZSIsIiRndCIsIm1lcmdlR3RHdGUiLCIkbHRlIiwiJGx0IiwibWVyZ2VMdEx0ZSIsIiRuZSIsIm1lcmdlTmUiLCJtZXJnZUVxIiwiJHJlZ2V4IiwibWVyZ2VSZWdleCIsIm1lcmdlQW5kZWRTZWxlY3RvcnNOZXN0ZWQiLCJpc0FuZEluU2VsZWN0b3IiLCJpc0FuZCIsIm1hc3NhZ2VTZWxlY3RvciIsIm9yT3JOb3IiLCJzdWJTZWxlY3RvciIsIm5vcm1hbGl6ZUFycmF5T3BlcmF0b3JzIiwibWF0Y2hlckl0ZW0iLCJNSU5fTUFHTklUVURFIiwiTUFHTklUVURFX0RJR0lUUyIsIlNFUCIsImNvbGxhdGUiLCJub3JtYWxpemVLZXkiLCJjb2xsYXRpb25JbmRleCIsImJpIiwic3RyaW5nQ29sbGF0ZSIsImFycmF5Q29sbGF0ZSIsImFrIiwiYmsiLCJvYmplY3RDb2xsYXRlIiwib3JpZ0tleSIsInRvSW5kZXhhYmxlU3RyaW5nIiwiZXhwRm9ybWF0IiwibWFnbml0dWRlIiwibWFnU3RyaW5nIiwicGFkV2l0aCIsInVwVG9MZW5ndGgiLCJmYWN0b3JTdHIiLCJudW1Ub0luZGV4YWJsZVN0cmluZyIsIm9iaktleSIsImluZGV4aWZ5IiwicGFyc2VOdW1iZXIiLCJvcmlnaW5hbElkeCIsIm51bUFzU3RyaW5nIiwibWFnQXNTdHJpbmciLCJtZXRhU3RhY2siLCJsYXN0TWV0YUVsZW1lbnQiLCJsYXN0RWxlbWVudEluZGV4IiwiaW5NZW1vcnlGaWVsZHMiLCJkb2NGaWVsZFZhbHVlIiwib3JNYXRjaGVycyIsIm1hdGNoQ29taW5hdGlvbmFsU2VsZWN0b3IiLCJtYXRjaFNlbGVjdG9yIiwibWF5YmVVc2VyT3BlcmF0b3IiLCJ1c2VyVmFsdWUiLCJzdWJQYXJzZWRGaWVsZCIsInN1YkRvY0ZpZWxkVmFsdWUiLCJ1c2VyT3BlcmF0b3IiLCJtYXRjaGVycyIsImZpZWxkRXhpc3RzIiwiZmllbGRJc05vdFVuZGVmaW5lZCIsImFycmF5Q29udGFpbnNWYWx1ZSIsImRvY0ZpZWxkVmFsdWVJdGVtIiwibW9kRmllbGQiLCJuZVZhbHVlIiwiYXJyYXlTaXplIiwiYXJyYXlDb250YWluc0FsbFZhbHVlcyIsInJlZ2V4VmFsdWUiLCJyZWdleE1hdGNoIiwidHlwZU1hdGNoIiwiZmlsdGVyTmFtZSIsImNoYW5nZXNIYW5kbGVyIiwiZG9jX2lkcyIsInZpZXdOYW1lIiwiZGRvYyIsIm1hcEZ1biIsInJvd3NNYXRjaGVkIiwicmVxdWVzdERlZiIsImZpZWxkU29ydGVyIiwiZ2V0RmllbGRWYWx1ZXNBc0FycmF5Iiwic29ydGluZyIsImFSb3ciLCJiUm93IiwiY29sbGF0aW9uIiwiY3JlYXRlRmllbGRTb3J0ZXIiLCJmaWx0ZXJJbk1lbW9yeUZpZWxkcyIsIm1hdGNoZXNTZWxlY3RvciIsImZpbHRlckZ1biIsInJlc2VydmVkV29yZHMiLCJkYXRhV29yZHMiLCJwYXJzZVJldmlzaW9uSW5mbyIsInBhcnNlRG9jIiwibmV3RWRpdHMiLCJkYk9wdHMiLCJuUmV2TnVtIiwicmV2SW5mbyIsInJldmlzaW9ucyIsInJldmlzaW9uSWRzIiwibWFrZVJldlRyZWVGcm9tUmV2aXNpb25zIiwic3BlY2lhbEtleSIsInByZXByb2Nlc3NBdHRhY2htZW50IiwiYmxvYlR5cGUiLCJhc0JpbmFyeSIsInBhcnNlQmFzZTY0IiwicHJlcHJvY2Vzc1N0cmluZyIsInByZXByb2Nlc3NCbG9iIiwicHJvY2Vzc0RvY3MiLCJyZXZMaW1pdCIsImRvY0luZm9zIiwiZmV0Y2hlZERvY3MiLCJ0eCIsIndyaXRlRG9jIiwib3ZlcmFsbENhbGxiYWNrIiwiaWRzVG9Eb2NzIiwiZG9jc0RvbmUiLCJkb2NzVG9EbyIsImNoZWNrQWxsRG9jc0RvbmUiLCJjdXJyZW50RG9jIiwicmVzdWx0c0lkeCIsImRvY1dyaXR0ZW4iLCJuZXh0RG9jIiwiZG9jSW5mbyIsInNwbGl0UmV2IiwidGFyZ2V0UG9zIiwidGFyZ2V0SWQiLCJyZXZFeGlzdHMiLCJwcmV2aW91c1dpbm5pbmdSZXYiLCJwcmV2aW91c2x5RGVsZXRlZCIsIm5ld1JldiIsInJldl9tYXAiLCJ3aW5uaW5nUmV2JCQxIiwid2lubmluZ1JldklzRGVsZXRlZCIsInVwZGF0ZURvYyIsInJvb3RJc01pc3NpbmciLCJpbnNlcnREb2MiLCJET0NfU1RPUkUiLCJCWV9TRVFfU1RPUkUiLCJBVFRBQ0hfU1RPUkUiLCJBVFRBQ0hfQU5EX1NFUV9TVE9SRSIsIk1FVEFfU1RPUkUiLCJMT0NBTF9TVE9SRSIsIkRFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUiLCJzYWZlSnNvblN0cmluZ2lmeSIsImpzb24iLCJ2dXZ1emVsYSIsImlkYkVycm9yIiwiZW5jb2RlTWV0YWRhdGEiLCJkZWxldGVkT3JMb2NhbCIsImRlY29kZU1ldGFkYXRhIiwic3RvcmVkT2JqZWN0Iiwic2FmZUpzb25QYXJzZSIsImRlY29kZURvYyIsIl9kb2NfaWRfcmV2IiwicmVhZEJsb2JEYXRhIiwiYXNCbG9iIiwiZmV0Y2hBdHRhY2htZW50c0lmTmVjZXNzYXJ5IiwidHhuIiwiY2hlY2tEb25lIiwiYXR0T2JqIiwib2JqZWN0U3RvcmUiLCJvbnN1Y2Nlc3MiLCJmZXRjaEF0dGFjaG1lbnQiLCJwb3N0UHJvY2Vzc0F0dGFjaG1lbnRzIiwiYXR0TmFtZXMiLCJjb21wYWN0UmV2cyIsInBvc3NpYmx5T3JwaGFuZWREaWdlc3RzIiwic2VxU3RvcmUiLCJhdHRTdG9yZSIsImF0dEFuZFNlcVN0b3JlIiwiSURCS2V5UmFuZ2UiLCJvcGVuQ3Vyc29yIiwib25seSIsImRpZ2VzdFNlcSIsInByaW1hcnlLZXkiLCJjb250aW51ZSIsIm9wZW5UcmFuc2FjdGlvblNhZmVseSIsImlkYiIsInN0b3JlcyIsInRyYW5zYWN0aW9uIiwiaWRiQnVsa0RvY3MiLCJkb2NTdG9yZSIsImJ5U2VxU3RvcmUiLCJhdHRhY2hTdG9yZSIsImF0dGFjaEFuZFNlcVN0b3JlIiwibWV0YVN0b3JlIiwiZG9jSW5mb0Vycm9yIiwibWV0YURvYyIsImFsbERvY3NQcm9jZXNzZWQiLCJkb2NDb3VudERlbHRhIiwicHJlY29uZGl0aW9uRXJyb3JlZCIsIl9tZXRhIiwiYmxvYlN1cHBvcnQiLCJvbkFsbERvY3NQcm9jZXNzZWQiLCJ1cGRhdGVEb2NDb3VudElmUmVhZHkiLCJkb2NDb3VudCIsIm5ld1JldklzRGVsZXRlZCIsImlzVXBkYXRlIiwiY29sbGVjdFJlc3VsdHMiLCJmaW5pc2hEb2MiLCJhdHRhY2htZW50U2F2ZWQiLCJuZXdBdHQiLCJzYXZlQXR0YWNobWVudCIsIndyaXRlQXR0YWNobWVudHMiLCJhZnRlclB1dERvYyIsInJldnNUb0RlbGV0ZSIsImNvbXBhY3RUcmVlIiwibWV0YWRhdGFUb1N0b3JlIiwiYWZ0ZXJQdXRNZXRhZGF0YSIsImF0dHNBZGRlZCIsImF0dHNUb0FkZCIsImluc2VydEF0dGFjaG1lbnRNYXBwaW5ncyIsInB1dFJlcSIsIm92ZXJhbGxFcnIiLCJkb2N2IiwicmVjdiIsInByb2Nlc3NlZEF0dGFjaG1lbnQiLCJwcmVwcm9jZXNzQXR0YWNobWVudHMiLCJ0eG5SZXN1bHQiLCJvbmFib3J0Iiwib250aW1lb3V0Iiwib25jb21wbGV0ZSIsImRpZ2VzdHMiLCJ2ZXJpZnlBdHRhY2htZW50IiwiYXR0RXJyIiwidmVyaWZ5QXR0YWNobWVudHMiLCJudW1GZXRjaGVkIiwicmVhZE1ldGFkYXRhIiwicmV2c19saW1pdCIsImZldGNoRXhpc3RpbmdEb2NzIiwic3RhcnRUcmFuc2FjdGlvbiIsInJ1bkJhdGNoZWRDdXJzb3IiLCJrZXlSYW5nZSIsImJhdGNoU2l6ZSIsIm9uQmF0Y2giLCJrZXlzQmF0Y2giLCJ2YWx1ZXNCYXRjaCIsInBzZXVkb0N1cnNvciIsIm9uR2V0QWxsIiwib25HZXRBbGxLZXlzIiwib25DdXJzb3IiLCJnZXRBbGxLZXlzIiwibmV3S2V5UmFuZ2UiLCJsYXN0S2V5IiwidXBwZXIiLCJ1cHBlck9wZW4iLCJsb3dlckJvdW5kIiwicnVubmluZyIsImFwcGx5TmV4dCIsImJsb2JTdXBwb3J0UHJvbWlzZSIsImNhY2hlZERCcyIsIm9wZW5SZXFMaXN0IiwiSWRiUG91Y2giLCJ0aGlzQ2FsbGJhY2siLCJ0cnlDb2RlIiwiaWRiR2xvYmFsRmFpbHVyZUVycm9yIiwiZW5yaWNoQ2FsbGJhY2tFcnJvciIsImNyZWF0ZVNjaGVtYSIsImNyZWF0ZU9iamVjdFN0b3JlIiwia2V5UGF0aCIsImF1dG9JbmNyZW1lbnQiLCJjcmVhdGVJbmRleCIsImFkZERlbGV0ZWRPckxvY2FsSW5kZXgiLCJjcmVhdGVMb2NhbFN0b3JlU2NoZW1hIiwibWlncmF0ZUxvY2FsU3RvcmUiLCJsb2NhbFN0b3JlIiwiZG9jSWRSZXYiLCJzZXFDdXJzb3IiLCJhZGRBdHRhY2hBbmRTZXFTdG9yZSIsIm1pZ3JhdGVBdHRzQW5kU2VxcyIsImRpZ2VzdE1hcCIsIm1pZ3JhdGVNZXRhZGF0YSIsImRlY29kZU1ldGFkYXRhQ29tcGF0Iiwib25HZXRNZXRhZGF0YVNlcSIsImZldGNoTWV0YWRhdGFTZXEiLCJtZXRhZGF0YVNlcSIsImluc3RhbmNlSWQiLCJyZXFPcHRzIiwiaGlzdG9yeU5vZGUiLCJhdHRhY2hJZCIsImF0dGFjaG1lbnQiLCJibG9iRGF0YSIsInVwZGF0ZVNlcSIsIm9wZW5LZXlDdXJzb3IiLCJkb2NfY291bnQiLCJpZGJfYXR0YWNobWVudF9mb3JtYXQiLCJrZXlSYW5nZUVycm9yIiwiaW5jbHVzaXZlRW5kIiwiaW5jbHVzaXZlX2VuZCIsInVwcGVyQm91bmQiLCJjcmVhdGVLZXlSYW5nZSIsIm9uUmVzdWx0c1JlYWR5IiwiZG9jSWRSZXZJbmRleCIsImFsbERvY3NJbm5lciIsImZldGNoRG9jQXN5bmNocm9ub3VzbHkiLCJiYXRjaFZhbHVlcyIsImJhdGNoVmFsdWUiLCJiYXRjaEtleXMiLCJyZXR1cm5WYWwiLCJ0b3RhbF9yb3dzIiwiYWxsRG9jc0tleXMiLCJvblN1Y2Nlc3MiLCJpZGJBbGxEb2NzIiwiZG9jSWRzIiwibnVtUmVzdWx0cyIsImRvY0lkc1RvTWV0YWRhdGEiLCJvbkdldE1ldGFkYXRhIiwib2JqZWN0U3RvcmVzIiwid2lubmluZ0RvY3MiLCJtZXRhZGF0YXMiLCJmZXRjaFdpbm5pbmdEb2NBbmRNZXRhZGF0YSIsIndpbm5pbmdEb2MiLCJwcm9jZXNzTWV0YWRhdGFBbmRXaW5uaW5nRG9jIiwib25CYXRjaERvbmUiLCJmaWx0ZXJlZCIsIm9sZFJldiIsIm9TdG9yZSIsIm9sZERvYyIsIm9wZW5SZXEiLCJpbmRleGVkREIiLCJkZWxldGVEYXRhYmFzZSIsImNhY2hlZCIsIm9udXBncmFkZW5lZWRlZCIsIm9sZFZlcnNpb24iLCJjdXJyZW50VGFyZ2V0IiwibWlncmF0aW9ucyIsIm1pZ3JhdGlvbiIsIm9udmVyc2lvbmNoYW5nZSIsInN0b3JlZE1ldGFEb2MiLCJjb21wbGV0ZVNldHVwIiwic3RvcmVNZXRhRG9jSWZSZWFkeSIsImluc3RhbmNlS2V5IiwiY291bnREb2NzIiwiZG9jSWRPckNyZWF0ZURvYyIsImJsb2IkJDEiLCJtYXRjaGVkQ2hyb21lIiwibWF0Y2hlZEVkZ2UiLCJjaGVja0Jsb2JTdXBwb3J0IiwiZW5xdWV1ZVRhc2siLCJDSEFOR0VTX1RJTUVPVVRfQlVGRkVSIiwic3VwcG9ydHNCdWxrR2V0TWFwIiwicmVhZEF0dGFjaG1lbnRzQXNCbG9iT3JCdWZmZXIiLCJlbmNvZGVEb2NJZCIsInByZXByb2Nlc3NBdHRhY2htZW50cyQxIiwiZ2VuREJVcmwiLCJnZW5VcmwiLCJwYXRoRGVsIiwicG9ydCIsInBhcmFtc1RvU3RyIiwicGFyYW1LZXlzIiwiSHR0cFBvdWNoIiwiaGFzVXJsUHJlZml4IiwidXNlciIsInBhc3N3b3JkIiwiYXV0aCIsInVzZXJuYW1lIiwiZ2V0SG9zdCIsImRiVXJsIiwib3VyRmV0Y2giLCJjcmVkZW50aWFscyIsIm5BdXRoIiwiaXNJRSIsImlzVHJpZGVudCIsImlzR0VUIiwic2hvdWxkQ2FjaGVCdXN0IiwiZmV0Y2hGdW4iLCJhZGFwdGVyRnVuJCQxIiwic2V0dXAiLCJmZXRjaEpTT04iLCJzZXR1cFByb21pc2UiLCJza2lwX3NldHVwIiwiZW5jb2RlQXR0YWNobWVudElkIiwicGluZyIsImNvbXBhY3RfcnVubmluZyIsImludGVydmFsIiwiZG9CdWxrR2V0IiwiZG9CdWxrR2V0U2hpbSIsIm51bUJhdGNoZXMiLCJvblJlc3VsdCIsImJhdGNoTnVtIiwic3ViT3B0cyIsInN1cHBvcnRzQnVsa0dldCIsImZldGNoQXR0YWNobWVudHMiLCJmaWxlbmFtZXMiLCJwcm9taXNlRmFjdG9yaWVzIiwidHlwZUZpZWxkRGVzY3JpcHRvciIsImZldGNoRGF0YSIsImRvTmV4dCIsInJ1bk5leHRCYXRjaCIsInRoaXNFcnIiLCJkb2NPckRvY3MiLCJwYXJhbVN0ciIsImJhdGNoX3NpemUiLCJoZWFydGJlYXQiLCJyZXF1ZXN0VGltZW91dCIsImxlZnRUb0ZldGNoIiwiZmVlZCIsInNlcV9pbnRlcnZhbCIsInBhcmFtX25hbWUiLCJBYm9ydENvbnRyb2xsZXIiLCJsYXN0RmV0Y2hlZFNlcSIsImZldGNoT3B0cyIsInNpZ25hbCIsImZldGNoZWQiLCJyYXdfcmVzdWx0c19sZW5ndGgiLCJRdWVyeVBhcnNlRXJyb3IiLCJOb3RGb3VuZEVycm9yIiwiQnVpbHRJbkVycm9yIiwicHJvbWlzZWRDYWxsYmFjayIsInNlcXVlbnRpYWxpemUiLCJwcm9taXNlRmFjdG9yeSIsInRoZVNldCIsIm1hcFRvS2V5c0FycmF5IiwiY3JlYXRlQnVpbHRJbkVycm9yIiwiakxlbiIsImpOdW0iLCJldmFsRnVuY3Rpb25XaXRoRXZhbCIsIlRhc2tRdWV1ZSQxIiwiY3JlYXRlVmlldyIsInNvdXJjZURCIiwicmVkdWNlRnVuIiwidGVtcG9yYXJ5IiwibG9jYWxEb2NOYW1lIiwidmlld1NpZ25hdHVyZSIsImNyZWF0ZVZpZXdTaWduYXR1cmUiLCJjYWNoZWRWaWV3cyIsIl9jYWNoZWRWaWV3cyIsInByb21pc2VGb3JWaWV3IiwiZGVwRGJOYW1lIiwiZnVsbFZpZXdOYW1lIiwiZGVwRGJzIiwibGFzdFNlcURvYyIsInBlcnNpc3RlbnRRdWV1ZXMiLCJ0ZW1wVmlld1F1ZXVlIiwicGFyc2VWaWV3TmFtZSIsImVtaXRFcnJvciIsImJ1aWx0SW5SZWR1Y2UiLCJzdW1zcXIiLCJfc3Vtc3FyIiwibWFwcGVyIiwiZGRvY1ZhbGlkYXRvciIsInRyeU1hcCIsInRyeVJlZHVjZSIsInJlcmVkdWNlIiwic29ydEJ5S2V5VGhlblZhbHVlIiwia2V5Q29tcGFyZSIsInNsaWNlUmVzdWx0cyIsInJvd1RvRG9jSWQiLCJwb3N0cHJvY2Vzc0F0dGFjaG1lbnRzIiwiYWRkSHR0cFBhcmFtIiwicGFyYW1OYW1lIiwiYXNKc29uIiwiY29lcmNlSW50ZWdlciIsImludGVnZXJDYW5kaWRhdGUiLCJhc051bWJlciIsImNoZWNrUG9zaXRpdmVJbnRlZ2VyIiwiY2hlY2tRdWVyeVBhcnNlRXJyb3IiLCJzdGFydGtleU5hbWUiLCJlbmRrZXlOYW1lIiwiZ3JvdXBfbGV2ZWwiLCJvcHRpb25OYW1lIiwiZGVmYXVsdHNUbyIsImdldFF1ZXVlIiwidXBkYXRlVmlldyIsIm1hcFJlc3VsdHMiLCJjdXJyZW50U2VxIiwiZG9jSWRzVG9DaGFuZ2VzQW5kRW1pdHMiLCJzZXFEb2NJZCIsIm1ldGFEb2NJZCIsImRlZmF1bHRNZXRhRG9jIiwiZG9jRGF0YSIsImluZGV4YWJsZUtleXNUb0tleVZhbHVlcyIsImlzR2VuT25lIiwia2V5VmFsdWVEb2NzIiwiZ2V0S2V5VmFsdWVEb2NzIiwia3ZEb2NzUmVzIiwia3ZEb2NzIiwib2xkS2V5cyIsImtleVZhbHVlIiwibmV3S2V5cyIsImt2RG9jIiwicHJvY2Vzc0tleVZhbHVlRG9jcyIsImdldERvY3NUb1BlcnNpc3QiLCJsaXN0T2ZEb2NzVG9QZXJzaXN0IiwiZG9jc1RvUGVyc2lzdCIsInVwZGF0ZVB1cmdlU2VxIiwic2F2ZUtleVZhbHVlcyIsImluZGV4ZWRfZG9jcyIsInByb2dyZXNzIiwicHJvY2Vzc05leHRCYXRjaCIsImNyZWF0ZUluZGV4YWJsZUtleXNUb0tleVZhbHVlcyIsImNyZWF0ZURvY0lkc1RvQ2hhbmdlc0FuZEVtaXRzIiwicmVzdWx0c19jb3VudCIsImNoYW5nZXNfYmF0Y2hfc2l6ZSIsInJlY2VudFB1cmdlcyIsInVuaXF1ZVB1cmdlcyIsImVtaXR0ZWRLZXlWYWx1ZSIsImNvbXBsZXhLZXkiLCJ1cGRhdGVWaWV3SW5RdWV1ZSIsInF1ZXJ5VmlldyIsInNob3VsZFJlZHVjZSIsImZldGNoRnJvbVZpZXciLCJ2aWV3T3B0cyIsImV4cGVjdGVkS2V5cyIsInBhcnNlZEtleUFuZERvY0lkIiwicGFyc2VkTnVtIiwicGFyc2VkU3RyIiwiYXJyYXlFbGVtZW50Iiwib2JqRWxlbWVudCIsInBhcnNlSW5kZXhhYmxlU3RyaW5nIiwib25NYXBSZXN1bHRzUmVhZHkiLCJmaW5hbFJlc3VsdHMiLCJzaG91bGRHcm91cCIsImx2bCIsIlBPU0lUSVZFX0lORklOSVRZIiwiZ3JvdXBLZXkiLCJyZWR1Y2VUcnkiLCJyZWR1Y2VWaWV3IiwiYWxsRG9jc1JlcyIsImRvY0lkc1RvRG9jcyIsImZldGNoUHJvbWlzZXMiLCJrZXlTdGFydCIsImtleUVuZCIsInF1ZXJ5Vmlld0luUXVldWUiLCJxdWVyeVByb21pc2VkIiwiX3F1ZXJ5IiwiY3VzdG9tUXVlcnkiLCJNQVhfVVJMX0xFTkdUSCIsImtleXNBc1N0cmluZyIsImh0dHBRdWVyeSIsInVwZGF0ZVZpZXdPcHRzIiwidmlld191cGRhdGVfY2hhbmdlc19iYXRjaF9zaXplIiwiZmluYWxQcm9taXNlRmFjdG9yeSIsImRlc2lnbkRvY05hbWUiLCJzdGFsZSIsImNvZXJjZU9wdGlvbnMiLCJ2aWV3Q2xlYW51cCIsIl92aWV3Q2xlYW51cCIsImN1c3RvbVZpZXdDbGVhbnVwIiwiaHR0cFZpZXdDbGVhbnVwIiwiZG9jc1RvVmlld3MiLCJ2aWV3c1RvU3RhdHVzIiwiZGRvY05hbWUiLCJ2aWV3REJOYW1lcyIsInN0YXR1c0lzR29vZCIsInZpZXdEQk5hbWUiLCJkZXN0cm95UHJvbWlzZXMiLCJsb2NhbFZpZXdDbGVhbnVwIiwiY3JlYXRlQWJzdHJhY3RNYXBSZWR1Y2UiLCJvcmlnTWFwIiwicmVkdWNlRnVuU3RyaW5nIiwiYnVpbHRJbiIsImdldEJ1aWx0SW4iLCJtYXByZWR1Y2UiLCJnZXREb2NBdHRhY2htZW50cyIsIlJFUExJQ0FUT1IiLCJ1cGRhdGVDaGVja3BvaW50IiwiY2hlY2twb2ludCIsInNlc3Npb24iLCJzZXNzaW9uX2lkIiwicmVwbGljYXRvciIsIkNoZWNrcG9pbnRlckludGVybmFsIiwid3JpdGVTb3VyY2VDaGVja3BvaW50Iiwid3JpdGVUYXJnZXRDaGVja3BvaW50Iiwid3JpdGVDaGVja3BvaW50IiwidXBkYXRlVGFyZ2V0IiwidXBkYXRlU291cmNlIiwiaXNGb3JiaWRkZW5FcnJvciIsImdldENoZWNrcG9pbnQiLCJzb3VyY2VEb2MiLCJ0YXJnZXREb2MiLCJjb21wYXJpc29ucyIsInNyY0RvYyIsInRndERvYyIsImNvbXBhcmVSZXBsaWNhdGlvbkhpc3RvcnkiLCJzb3VyY2VIaXN0b3J5IiwidGFyZ2V0SGlzdG9yeSIsInNvdXJjZVJlc3QiLCJ0YXJnZXRSZXN0IiwiaGFzU2Vzc2lvbklkIiwic2Vzc2lvbklkIiwiQ2hlY2twb2ludGVyIiwiU1RBUlRJTkdfQkFDS19PRkYiLCJyZXBsaWNhdGUiLCJjdXJyZW50QmF0Y2giLCJyZXBJZCIsImNoZWNrcG9pbnRlciIsImJhdGNoZXMiLCJwZW5kaW5nQmF0Y2giLCJ3cml0aW5nQ2hlY2twb2ludCIsImNoYW5nZXNDb21wbGV0ZWQiLCJyZXBsaWNhdGlvbkNvbXBsZXRlZCIsImluaXRpYWxfbGFzdF9zZXEiLCJiYXRjaGVzX2xpbWl0IiwiY2hhbmdlc1BlbmRpbmciLCJjaGFuZ2VkRG9jcyIsInN0YXJ0X3RpbWUiLCJkb2NzX3JlYWQiLCJkb2NzX3dyaXR0ZW4iLCJkb2Nfd3JpdGVfZmFpbHVyZXMiLCJpbml0Q2hlY2twb2ludGVyIiwicXVlcnlQYXJhbXMiLCJmaWx0ZXJWaWV3TmFtZSIsInNvcnRPYmplY3RQcm9wZXJ0aWVzQnlLZXkiLCJxdWVyeURhdGEiLCJtZDVzdW0iLCJnZW5lcmF0ZVJlcGxpY2F0aW9uSWQiLCJjaGVja3BvaW50T3B0cyIsIndyaXRlRG9jcyIsImJ1bGtPcHRzIiwiY29tcGxldGVSZXBsaWNhdGlvbiIsImVycm9yc0J5SWQiLCJlcnJvcnNObyIsImVycm9yTmFtZSIsImZpbmlzaEJhdGNoIiwib3V0UmVzdWx0IiwiZ2V0Q2hhbmdlcyIsIm9uQ2hlY2twb2ludEVycm9yIiwiZ2V0QmF0Y2hEb2NzIiwicmVzdWx0RG9jcyIsImJ1bGtHZXRPcHRzIiwibWlzc2luZ1JldiIsImNyZWF0ZUJ1bGtHZXRPcHRzIiwiYnVsa0dldFJlc3BvbnNlIiwiYnVsa0dldEluZm8iLCJyZW1vdGVEb2MiLCJkb0NoZWNrRm9yTG9jYWxBdHRhY2htZW50cyIsImZpbGVIYXNDaGFuZ2VkIiwiZ2V0RG9jQXR0YWNobWVudHNGcm9tVGFyZ2V0T3JTb3VyY2UiLCJnZXREb2NzIiwiZ290Iiwic3RhcnROZXh0QmF0Y2giLCJhYm9ydFJlcGxpY2F0aW9uIiwicHJvY2Vzc1BlbmRpbmdCYXRjaCIsImVuZF90aW1lIiwicmV0cnkiLCJiYWNrX29mZl9mdW5jdGlvbiIsImJhY2tPZmZTZXQiLCJjdXJyZW50X2JhY2tfb2ZmIiwiYmFja09mZiIsIm9uQ2hhbmdlc0NvbXBsZXRlIiwib25DaGFuZ2VzRXJyb3IiLCJfYWJvcnRDaGFuZ2VzIiwiYWJvcnRDaGFuZ2VzIiwiY3JlYXRlVGFzayIsInN0YXJ0Q2hhbmdlcyIsIl9hZGRlZExpc3RlbmVycyIsIlJlcGxpY2F0aW9uIiwiX3JlYWR5Q2FsbGVkIiwiY2xlYW51cCIsInRvUG91Y2giLCJQb3VjaENvbnN0cnVjdG9yIiwicmVwbGljYXRlV3JhcHBlciIsInJlcGxpY2F0ZVJldCIsIlN5bmMiLCJjYW5jZWxlZCIsIm9wdHNQdXNoIiwib3B0c1B1bGwiLCJwdWxsIiwicHVzaFBhdXNlZCIsInB1bGxQYXVzZWQiLCJwdWxsQ2hhbmdlIiwicHVzaENoYW5nZSIsInB1c2hEZW5pZWQiLCJwdWxsRGVuaWVkIiwicHVzaEFjdGl2ZSIsInB1bGxBY3RpdmUiLCJyZW1vdmVBbGwiLCJhZGRPbmVMaXN0ZW5lciIsInJlcGxpY2F0ZU1ldGhvZHMiLCJoZXhfY2hyIiwibWQ1Y3ljbGUiLCJtZDVibGsiLCJtZDVibGtzIiwibWQ1YmxrX2FycmF5IiwibWQ1MSIsInJoZXgiLCJ0b1V0ZjgiLCJoZXhUb0JpbmFyeVN0cmluZyIsIlNwYXJrTUQ1IiwidGFyZ2V0QXJyYXkiLCJfYnVmZiIsImJ1ZmYiLCJfZmluaXNoIiwiaGFzaEJpbmFyeSIsInJldHVyblVJbnQ4QXJyYXkiLCJ1dGY4U3RyMkFycmF5QnVmZmVyIiwibWQ1MV9hcnJheSIsIl9tYXgiLCJfbmlsIiwiX3N0cmluZ2lmeSIsIl92IiwiX3YxVG9WIiwiX3YyIiwiX3YzIiwiX3Y0IiwiX3Y1IiwiX3Y2VG9WIiwiX3Y2IiwiX3ZhbGlkYXRlIiwiX3ZlcnNpb24iLCJnZXRPdXRwdXRMZW5ndGgiLCJpbnB1dExlbmd0aDgiLCJzYWZlQWRkIiwibHN3IiwibWQ1Y21uIiwiY250IiwibWQ1ZmYiLCJtZDVnZyIsIm1kNWhoIiwibWQ1aWkiLCJsZW5ndGgzMiIsImhleFRhYiIsIm1kNVRvSGV4RW5jb2RlZEFycmF5Iiwib2xkYSIsIm9sZGIiLCJvbGRjIiwib2xkZCIsIndvcmRzVG9NZDUiLCJsZW5ndGg4IiwiYnl0ZXNUb1dvcmRzIiwicmFuZG9tVVVJRCIsIlJPVEwiLCJfaTIiLCJfdCIsIl90MiIsInVuc2FmZVN0cmluZ2lmeSIsIl9ub2RlSWQiLCJfY2xvY2tzZXEiLCJfcm5nIiwiX2xhc3RNU2VjcyIsIl9sYXN0TlNlY3MiLCJzZWVkQnl0ZXMiLCJ0bWgiLCJ2MUJ5dGVzIiwidjZCeXRlcyIsIm9mIiwiX21kIiwidjMiLCJoYXNoZnVuYyIsImdlbmVyYXRlVVVJRCIsIl9uYW1lc3BhY2UiLCJzdHJpbmdUb0J5dGVzIiwiX25hdGl2ZSIsIl9zaGEiLCJ2NSIsIl9vYmplY3RTcHJlYWQiLCJfdG9Qcm9wZXJ0eUtleSIsIl9zZXFMb3ciLCJfc2VxSGlnaCIsIl9tc2VjcyIsInNlcUhpZ2giLCJzZXFMb3ciLCJfcmVnZXgiLCJhcnJheVByZWZpeCIsIm9ialByZWZpeCIsIm51bUNoYXIiLCJwYXJzZWRTdHJpbmciLCJsYXN0Q2giLCJudW1Db25zZWN1dGl2ZVNsYXNoZXMiLCJnZXRXaW5kb3ciLCJnZXREb2N1bWVudCIsInN0byIsImNuIiwiaXNXZWVrZW5kIiwiZ2V0RGF5c0luTW9udGgiLCJzZXRUb1N0YXJ0T2ZEYXkiLCJjb21wYXJlRGF0ZXMiLCJvdmVyd3JpdGUiLCJldiIsImFkanVzdENhbGVuZGFyIiwiYXJpYUxhYmVsIiwic2V0RGVmYXVsdERhdGUiLCJmaXJzdERheSIsImZpcnN0V2Vla09mWWVhck1pbkRheXMiLCJmb3JtYXRTdHJpY3QiLCJtaW5EYXRlIiwibWF4RGF0ZSIsInllYXJSYW5nZSIsInNob3dXZWVrTnVtYmVyIiwicGlja1dob2xlV2VlayIsIm1pblllYXIiLCJtYXhZZWFyIiwibWluTW9udGgiLCJtYXhNb250aCIsInN0YXJ0UmFuZ2UiLCJlbmRSYW5nZSIsInllYXJTdWZmaXgiLCJzaG93TW9udGhBZnRlclllYXIiLCJzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzIiwiZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzIiwibnVtYmVyT2ZNb250aHMiLCJtYWluQ2FsZW5kYXIiLCJibHVyRmllbGRPblNlbGVjdCIsImkxOG4iLCJwcmV2aW91c01vbnRoIiwibmV4dE1vbnRoIiwib25PcGVuIiwicmVuZGVyRGF5TmFtZSIsInJlbmRlckRheSIsImFyaWFTZWxlY3RlZCIsImlzVG9kYXkiLCJoYXNFdmVudCIsImlzSW5SYW5nZSIsImlzU3RhcnRSYW5nZSIsImlzRW5kUmFuZ2UiLCJyZW5kZXJXZWVrIiwicGlrYWRheSIsImhhc01vbWVudCIsInllYXJEYXkiLCJ3ZWVrRGF5IiwiZGF5SW5GaXJzdFdlZWsiLCJkYXlTaGlmdCIsInByZXZXZWVrRGF5IiwiamFuNHRoIiwiZGF5c0JldHdlZW4iLCJyZW5kZXJSb3ciLCJpc1Jvd1NlbGVjdGVkIiwicmVuZGVyVGl0bGUiLCJyZWZZZWFyIiwicmFuZElkIiwibW9udGhIdG1sIiwieWVhckh0bWwiLCJfbyIsImlzTWluWWVhciIsImlzTWF4WWVhciIsIlBpa2FkYXkiLCJzcmNFbGVtZW50IiwicHJldk1vbnRoIiwiX29uQ2hhbmdlIiwiZ290b01vbnRoIiwiZ290b1llYXIiLCJfb25LZXlDaGFuZ2UiLCJfcGFyc2VGaWVsZFZhbHVlIiwiX29uSW5wdXRDaGFuZ2UiLCJmaXJlZEJ5IiwiX29uSW5wdXRDbGljayIsIl9vbklucHV0Qmx1ciIsInBFbCIsImhhc0V2ZW50TGlzdGVuZXJzIiwib25jaGFuZ2UiLCJkZWZEYXRlIiwiZ290b0RhdGUiLCJkaXNhYmxlV2Vla2VuZHMiLCJkaXNhYmxlRGF5Rm4iLCJub20iLCJzZXRNaW5EYXRlIiwic2V0TWF4RGF0ZSIsInRvRGF0ZVN0cmluZyIsImdldE1vbWVudCIsInByZXZlbnRPblNlbGVjdCIsIm1vbWVudEZ1bmN0aW9uIiwibmV3Q2FsZW5kYXIiLCJjYWxlbmRhcnMiLCJmaXJzdFZpc2libGVEYXRlIiwibGFzdFZpc2libGVEYXRlIiwidmlzaWJsZURhdGUiLCJhZGp1c3RDYWxlbmRhcnMiLCJuZXdEYXkiLCJzZXRTdGFydFJhbmdlIiwic2V0RW5kUmFuZ2UiLCJfeSIsImFkanVzdFBvc2l0aW9uIiwiY2xpZW50UmVjdCIsImxlZnRBbGlnbmVkIiwiYm90dG9tQWxpZ25lZCIsInllYXJPZlByZXZpb3VzTW9udGgiLCJ5ZWFyT2ZOZXh0TW9udGgiLCJkYXlzSW5QcmV2aW91c01vbnRoIiwiaXNXZWVrU2VsZWN0ZWQiLCJkYXlOdW1iZXIiLCJtb250aE51bWJlciIsInllYXJOdW1iZXIiLCJkYXlDb25maWciLCJyZW5kZXJIZWFkIiwicmVuZGVyVGFibGUiLCJpc0NhbGxhYmxlIiwidHJ5VG9TdHJpbmciLCIkVHlwZUVycm9yIiwiaXNQb3NzaWJsZVByb3RvdHlwZSIsIiRTdHJpbmciLCJ3ZWxsS25vd25TeW1ib2wiLCJVTlNDT1BBQkxFUyIsIkFycmF5UHJvdG90eXBlIiwidG9JbmRleGVkT2JqZWN0IiwidG9BYnNvbHV0ZUluZGV4IiwibGVuZ3RoT2ZBcnJheUxpa2UiLCJjcmVhdGVNZXRob2QiLCJJU19JTkNMVURFUyIsIkRFU0NSSVBUT1JTIiwiU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUIiwidW5jdXJyeVRoaXMiLCJzdHJpbmdTbGljZSIsIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsImNsYXNzb2ZSYXciLCJUT19TVFJJTkdfVEFHIiwiJE9iamVjdCIsIkNPUlJFQ1RfQVJHVU1FTlRTIiwidHJ5R2V0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJleGNlcHRpb25zIiwiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwiYml0bWFwIiwibWFrZUJ1aWx0SW4iLCJkZWZpbmVHbG9iYWxQcm9wZXJ0eSIsImZhaWxzIiwiQnVuIiwiY2xhc3NvZiIsIiRFcnJvciIsIlRFU1QiLCJWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkiLCJJU19WOF9PUl9DSEFLUkFfU1RBQ0siLCJkcm9wRW50cmllcyIsInByZXBhcmVTdGFja1RyYWNlIiwiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5IiwiY2xlYXJFcnJvclN0YWNrIiwiRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUiLCJkZWZpbmVCdWlsdEluIiwiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsImlzRm9yY2VkIiwidGFyZ2V0UHJvcGVydHkiLCJzb3VyY2VQcm9wZXJ0eSIsIlRBUkdFVCIsIkdMT0JBTCIsIlNUQVRJQyIsIk5BVElWRV9CSU5EIiwiRnVuY3Rpb25Qcm90b3R5cGUiLCJhQ2FsbGFibGUiLCJ1bmN1cnJ5VGhpc1dpdGhCaW5kIiwiZ2V0TWV0aG9kIiwiSXRlcmF0b3JzIiwiSVRFUkFUT1IiLCJhbk9iamVjdCIsImdldEl0ZXJhdG9yTWV0aG9kIiwidXNpbmdJdGVyYXRvciIsIml0ZXJhdG9yTWV0aG9kIiwicmVwbGFjZXIiLCJyYXdMZW5ndGgiLCJrZXlzTGVuZ3RoIiwidG9JbnRlZ2VyT3JJbmZpbml0eSIsImdldEl0ZXJhdG9yRGlyZWN0IiwiSU5WQUxJRF9TSVpFIiwiJFJhbmdlRXJyb3IiLCJTZXRSZWNvcmQiLCJpbnRTaXplIiwiZ2V0SXRlcmF0b3IiLCJudW1TaXplIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFMiLCJTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInRhaWxQb3MiLCJzeW1ib2xzIiwiZHVtbXkiLCJXcmFwcGVyIiwiTmV3VGFyZ2V0IiwiTmV3VGFyZ2V0UHJvdG90eXBlIiwiZnVuY3Rpb25Ub1N0cmluZyIsIk5BVElWRV9XRUFLX01BUCIsInNoYXJlZCIsInNoYXJlZEtleSIsImhpZGRlbktleXMiLCJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsIlNUQVRFIiwiVFlQRSIsImRvY3VtZW50QWxsIiwiZGV0ZWN0aW9uIiwiTUFUQ0giLCJVU0VfU1lNQk9MX0FTX1VJRCIsIiRTeW1ib2wiLCJyZWNvcmQiLCJJVEVSQVRPUl9JTlNURUFEX09GX1JFQ09SRCIsImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsIml0ZXJhdG9yQ2xvc2UiLCJSZXN1bHRQcm90b3R5cGUiLCJ1bmJvdW5kRnVuY3Rpb24iLCJpdGVyRm4iLCJjYWxsRm4iLCJpbm5lclJlc3VsdCIsImlubmVyRXJyb3IiLCJ0b0xlbmd0aCIsIkNPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FIiwiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsImVuZm9yY2VJbnRlcm5hbFN0YXRlIiwiZ2V0SW50ZXJuYWxTdGF0ZSIsIkNPTkZJR1VSQUJMRV9MRU5HVEgiLCIkZGVmYXVsdCIsImFjdGl2ZVhEb2N1bWVudCIsImRlZmluZVByb3BlcnRpZXNNb2R1bGUiLCJlbnVtQnVnS2V5cyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIlBST1RPVFlQRSIsIlNDUklQVCIsIkVtcHR5Q29uc3RydWN0b3IiLCJzY3JpcHRUYWciLCJOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYIiwiTnVsbFByb3RvT2JqZWN0IiwiaWZyYW1lRG9jdW1lbnQiLCJpZnJhbWUiLCJKUyIsIlByb3BlcnRpZXMiLCJWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyIsIm9iamVjdEtleXMiLCJJRThfRE9NX0RFRklORSIsInRvUHJvcGVydHlLZXkiLCIkZGVmaW5lUHJvcGVydHkiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiRU5VTUVSQUJMRSIsIldSSVRBQkxFIiwicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCJpbnRlcm5hbE9iamVjdEtleXMiLCIkcHJvcGVydHlJc0VudW1lcmFibGUiLCJOQVNIT1JOX0JVRyIsInVuY3VycnlUaGlzQWNjZXNzb3IiLCJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwiYVBvc3NpYmxlUHJvdG90eXBlIiwiQ09SUkVDVF9TRVRURVIiLCJwcmVmIiwiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsIlNvdXJjZSIsImhhc0luZGljZXMiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwiZG90QWxsIiwidW5pY29kZSIsInVuaWNvZGVTZXRzIiwic3RpY2t5IiwicmVnRXhwRmxhZ3MiLCJSZWdFeHBQcm90b3R5cGUiLCJFTkdJTkVfSVNfQlVOIiwiVVNFUl9BR0VOVCIsImFycmF5U2xpY2UiLCJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsIldSQVAiLCJzY2hlZHVsZXIiLCJoYXNUaW1lQXJnIiwiZmlyc3RQYXJhbUluZGV4IiwiU2V0SGVscGVycyIsIml0ZXJhdGUiLCJhU2V0IiwiZ2V0U2V0UmVjb3JkIiwiaXRlcmF0ZVNldCIsIml0ZXJhdGVTaW1wbGUiLCJvdGhlclJlYyIsIlNldFByb3RvdHlwZSIsImludGVycnVwdGlibGUiLCJjcmVhdGVTZXRMaWtlIiwiZXJyb3IyIiwia2V5c0l0ZXIiLCJ1aWQiLCJJU19QVVJFIiwiU0hBUkVEIiwiVjhfVkVSU0lPTiIsIiRsb2NhdGlvbiIsImNoYW5uZWwiLCJJU19JT1MiLCJJU19OT0RFIiwiT05SRUFEWVNUQVRFQ0hBTkdFIiwicnVubmVyIiwiZXZlbnRMaXN0ZW5lciIsImdsb2JhbFBvc3RNZXNzYWdlRGVmZXIiLCJpbnRlZ2VyIiwiSW5kZXhlZE9iamVjdCIsIm9yZGluYXJ5VG9QcmltaXRpdmUiLCJUT19QUklNSVRJVkUiLCJleG90aWNUb1ByaW0iLCJOQVRJVkVfU1lNQk9MIiwicmVxdWlyZWQiLCJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCJwcm94eUFjY2Vzc29yIiwiaW5oZXJpdElmUmVxdWlyZWQiLCJub3JtYWxpemVTdHJpbmdBcmd1bWVudCIsImluc3RhbGxFcnJvckNhdXNlIiwiaW5zdGFsbEVycm9yU3RhY2siLCJGVUxMX05BTUUiLCJGT1JDRUQiLCJJU19BR0dSRUdBVEVfRVJST1IiLCJTVEFDS19UUkFDRV9MSU1JVCIsIk9QVElPTlNfUE9TSVRJT04iLCJFUlJPUl9OQU1FIiwiT3JpZ2luYWxFcnJvciIsIk9yaWdpbmFsRXJyb3JQcm90b3R5cGUiLCJCYXNlRXJyb3IiLCJXcmFwcGVkRXJyb3IiLCJhZGRUb1Vuc2NvcGFibGVzIiwicmVsYXRpdmVJbmRleCIsInNldEFycmF5TGVuZ3RoIiwiZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyIiwicHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoIiwiZGVsZXRlUHJvcGVydHlPclRocm93Iiwid3JhcEVycm9yQ29uc3RydWN0b3JXaXRoQ2F1c2UiLCJXRUJfQVNTRU1CTFkiLCJXZWJBc3NlbWJseSIsImV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyIiwiZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlciIsImdldFJlcGxhY2VyRnVuY3Rpb24iLCIkc3RyaW5naWZ5IiwibnVtYmVyVG9TdHJpbmciLCJXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04iLCJJTExfRk9STUVEX1VOSUNPREUiLCJzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCIsIiRyZXBsYWNlciIsImZpeElsbEZvcm1lZCIsImNyZWF0ZVByb3BlcnR5Iiwic2V0TWV0aG9kQWNjZXB0U2V0TGlrZSIsImlzRGlzam9pbnRGcm9tIiwiaXNTdWJzZXRPZiIsImlzU3VwZXJzZXRPZiIsInN5bW1ldHJpY0RpZmZlcmVuY2UiLCJnZXRSZWdFeHBGbGFncyIsImdldFN1YnN0aXR1dGlvbiIsIlJFUExBQ0UiLCJzZWFyY2hWYWx1ZSIsInJlcGxhY2VWYWx1ZSIsIklTX1JFR19FWFAiLCJzZWFyY2hTdHJpbmciLCJmdW5jdGlvbmFsUmVwbGFjZSIsInNlYXJjaExlbmd0aCIsImFkdmFuY2VCeSIsImVuZE9mTGFzdE1hdGNoIiwic2V0VGFzayIsInNjaGVkdWxlcnNGaXgiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsImxvYWRlZCIsIl9fd2VicGFja19tb2R1bGVzX18iLCJkZWZpbml0aW9uIiwibm1kIiwic2FtcGxlSWQiLCJnZXRHZXRQYXJhbSIsInVwbG9hZElkIiwiZmluZEZpbGVOYW1lQnlJZCIsImZpbGVQYXRoIiwiUmVzcG9uc2UiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file